routino-3.2/ 40755 233 144 0 13061252066 6212 5routino-3.2/src/ 40755 233 144 0 13061252060 6773 5routino-3.2/src/nodesx.h 644 233 144 12730 12550012612 10502 0/*************************************** A header file for the extended nodes. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef NODESX_H #define NODESX_H /*+ To stop multiple inclusions. +*/ #include #include "types.h" #include "nodes.h" #include "typesx.h" #include "cache.h" #include "files.h" /* Data structures */ /*+ An extended structure used for processing. +*/ struct _NodeX { node_t id; /*+ The node identifier; initially the OSM value, later the Node index, finally the first segment. +*/ latlong_t latitude; /*+ The node latitude. +*/ latlong_t longitude; /*+ The node longitude. +*/ transports_t allow; /*+ The node allowed traffic. +*/ nodeflags_t flags; /*+ The node flags. +*/ }; /*+ A structure containing a set of nodes (memory format). +*/ struct _NodesX { char *filename; /*+ The name of the intermediate file (for the NodesX). +*/ char *filename_tmp; /*+ The name of the temporary file (for the NodesX). +*/ int fd; /*+ The file descriptor of the open file (for the NodesX). +*/ index_t number; /*+ The number of extended nodes still being considered. +*/ index_t knumber; /*+ The number of extended nodes kept for next time. +*/ #if !SLIM NodeX *data; /*+ The extended node data (when mapped into memory). +*/ #else NodeX cached[3]; /*+ Three cached extended nodes read from the file in slim mode. +*/ index_t incache[3]; /*+ The indexes of the cached extended nodes. +*/ NodeXCache *cache; /*+ A RAM cache of extended nodes read from the file. +*/ #endif node_t *idata; /*+ The extended node IDs (sorted by ID). +*/ index_t *pdata; /*+ The node indexes after pruning. +*/ index_t *gdata; /*+ The final node indexes (sorted geographically). +*/ BitMask *super; /*+ A bit-mask marker for super nodes (same order as sorted nodes). +*/ index_t latbins; /*+ The number of bins containing latitude. +*/ index_t lonbins; /*+ The number of bins containing longitude. +*/ ll_bin_t latzero; /*+ The bin number of the furthest south bin. +*/ ll_bin_t lonzero; /*+ The bin number of the furthest west bin. +*/ }; /* Functions in nodesx.c */ NodesX *NewNodeList(int append,int readonly); void FreeNodeList(NodesX *nodesx,int keep); void AppendNodeList(NodesX *nodesx,node_t id,double latitude,double longitude,transports_t allow,nodeflags_t flags); void FinishNodeList(NodesX *nodesx); index_t IndexNodeX(NodesX *nodesx,node_t id); void SortNodeList(NodesX *nodesx); void RemoveNonHighwayNodes(NodesX *nodesx,WaysX *waysx,int keep); void RemovePrunedNodes(NodesX *nodesx,SegmentsX *segmentsx); void SortNodeListGeographically(NodesX *nodesx); void SaveNodeList(NodesX *nodesx,const char *filename,SegmentsX *segmentsx); /* Macros and inline functions */ #if !SLIM #define LookupNodeX(nodesx,index,position) &(nodesx)->data[index] #define PutBackNodeX(nodesx,nodex) while(0) { /* nop */ } #else /* Prototypes */ static inline NodeX *LookupNodeX(NodesX *nodesx,index_t index,int position); static inline void PutBackNodeX(NodesX *nodesx,NodeX *nodex); CACHE_NEWCACHE_PROTO(NodeX) CACHE_DELETECACHE_PROTO(NodeX) CACHE_FETCHCACHE_PROTO(NodeX) CACHE_REPLACECACHE_PROTO(NodeX) CACHE_INVALIDATECACHE_PROTO(NodeX) /* Data type */ CACHE_STRUCTURE(NodeX) /* Inline functions */ CACHE_NEWCACHE(NodeX) CACHE_DELETECACHE(NodeX) CACHE_FETCHCACHE(NodeX) CACHE_REPLACECACHE(NodeX) CACHE_INVALIDATECACHE(NodeX) /*++++++++++++++++++++++++++++++++++++++ Lookup a particular extended node with the specified id from the file on disk. NodeX *LookupNodeX Returns a pointer to a cached copy of the extended node. NodesX *nodesx The set of nodes to use. index_t index The node index to look for. int position The position in the cache to use. ++++++++++++++++++++++++++++++++++++++*/ static inline NodeX *LookupNodeX(NodesX *nodesx,index_t index,int position) { nodesx->cached[position-1]=*FetchCachedNodeX(nodesx->cache,index,nodesx->fd,0); nodesx->incache[position-1]=index; return(&nodesx->cached[position-1]); } /*++++++++++++++++++++++++++++++++++++++ Put back an extended node's data into the file on disk. NodesX *nodesx The set of nodes to modify. NodeX *nodex The extended node to be put back. ++++++++++++++++++++++++++++++++++++++*/ static inline void PutBackNodeX(NodesX *nodesx,NodeX *nodex) { int position1=nodex-&nodesx->cached[0]; ReplaceCachedNodeX(nodesx->cache,nodex,nodesx->incache[position1],nodesx->fd,0); } #endif /* SLIM */ #endif /* NODESX_H */ routino-3.2/src/nodes.h 644 233 144 12404 12550223461 10316 0/*************************************** A header file for the nodes. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef NODES_H #define NODES_H /*+ To stop multiple inclusions. +*/ #include #include #include "types.h" #include "cache.h" #include "files.h" #include "profiles.h" /* Data structures */ /*+ A structure containing a single node. +*/ struct _Node { index_t firstseg; /*+ The index of the first segment. +*/ ll_off_t latoffset; /*+ The node latitude offset within its bin. +*/ ll_off_t lonoffset; /*+ The node longitude offset within its bin. +*/ transports_t allow; /*+ The types of transport that are allowed through the node. +*/ nodeflags_t flags; /*+ Flags containing extra information (e.g. super-node, turn restriction). +*/ }; /*+ A structure containing the header from the file. +*/ typedef struct _NodesFile { index_t number; /*+ The number of nodes in total. +*/ index_t snumber; /*+ The number of super-nodes. +*/ ll_bin_t latbins; /*+ The number of bins containing latitude. +*/ ll_bin_t lonbins; /*+ The number of bins containing longitude. +*/ ll_bin_t latzero; /*+ The bin number of the furthest south bin. +*/ ll_bin_t lonzero; /*+ The bin number of the furthest west bin. +*/ } NodesFile; /*+ A structure containing a set of nodes. +*/ struct _Nodes { NodesFile file; /*+ The header data from the file. +*/ #if !SLIM char *data; /*+ The memory mapped data in the file. +*/ index_t *offsets; /*+ A pointer to the array of offsets in the file. +*/ Node *nodes; /*+ A pointer to the array of nodes in the file. +*/ #else int fd; /*+ The file descriptor for the file. +*/ index_t *offsets; /*+ An allocated array with a copy of the file offsets. +*/ offset_t nodesoffset; /*+ The offset of the nodes within the file. +*/ Node cached[6]; /*+ Some cached nodes read from the file in slim mode. +*/ NodeCache *cache; /*+ A RAM cache of nodes read from the file. +*/ #endif }; /* Functions in nodes.c */ Nodes *LoadNodeList(const char *filename); void DestroyNodeList(Nodes *nodes); index_t FindClosestNode(Nodes *nodes,Segments *segments,Ways *ways,double latitude,double longitude, distance_t distance,Profile *profile,distance_t *bestdist); index_t FindClosestSegment(Nodes *nodes,Segments *segments,Ways *ways,double latitude,double longitude, distance_t distance,Profile *profile, distance_t *bestdist, index_t *bestnode1,index_t *bestnode2,distance_t *bestdist1,distance_t *bestdist2); void GetLatLong(Nodes *nodes,index_t index,Node *nodep,double *latitude,double *longitude); /* Macros and inline functions */ /*+ Return true if this is a super-node. +*/ #define IsSuperNode(xxx) (((xxx)->flags)&NODE_SUPER) /*+ Return true if this is a turn restricted node. +*/ #define IsTurnRestrictedNode(xxx) (((xxx)->flags)&NODE_TURNRSTRCT) /*+ Return a Segment index given a Node pointer and a set of segments. +*/ #define FirstSegment(xxx,yyy,ppp) LookupSegment((xxx),(yyy)->firstseg,ppp) /*+ Return the offset of a geographical region given a set of nodes. +*/ #define LookupNodeOffset(xxx,yyy) ((xxx)->offsets[yyy]) #if !SLIM /*+ Return a Node pointer given a set of nodes and an index. +*/ #define LookupNode(xxx,yyy,ppp) (&(xxx)->nodes[yyy]) #else /* Prototypes */ static inline Node *LookupNode(Nodes *nodes,index_t index,int position); CACHE_NEWCACHE_PROTO(Node) CACHE_DELETECACHE_PROTO(Node) CACHE_FETCHCACHE_PROTO(Node) CACHE_INVALIDATECACHE_PROTO(Node) /* Data type */ CACHE_STRUCTURE(Node) /* Inline functions */ CACHE_NEWCACHE(Node) CACHE_DELETECACHE(Node) CACHE_FETCHCACHE(Node) CACHE_INVALIDATECACHE(Node) /*++++++++++++++++++++++++++++++++++++++ Find the Node information for a particular node. Node *LookupNode Returns a pointer to the cached node information. Nodes *nodes The set of nodes to use. index_t index The index of the node. int position The position in the cache to store the value. ++++++++++++++++++++++++++++++++++++++*/ static inline Node *LookupNode(Nodes *nodes,index_t index,int position) { nodes->cached[position-1]=*FetchCachedNode(nodes->cache,index,nodes->fd,nodes->nodesoffset); return(&nodes->cached[position-1]); } #endif #endif /* NODES_H */ routino-3.2/src/queue.c 644 233 144 12331 12636554470 10340 0/*************************************** Queue data type functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2013 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include "results.h" /*+ A queue of results. +*/ struct _Queue { int nincrement; /*+ The amount to increment the queue when full. +*/ int nallocated; /*+ The number of entries allocated. +*/ int noccupied; /*+ The number of entries occupied. +*/ Result **results; /*+ The queue of pointers to results. +*/ }; /*++++++++++++++++++++++++++++++++++++++ Allocate a new queue. Queue *NewQueueList Returns the queue. uint8_t log2bins The base 2 logarithm of the initial number of bins in the queue. ++++++++++++++++++++++++++++++++++++++*/ Queue *NewQueueList(uint8_t log2bins) { Queue *queue; queue=(Queue*)malloc(sizeof(Queue)); queue->nincrement=1<nallocated=queue->nincrement; queue->noccupied=0; queue->results=(Result**)malloc(queue->nallocated*sizeof(Result*)); return(queue); } /*++++++++++++++++++++++++++++++++++++++ Re-use an existing queue. Queue *queue The queue to reset for re-use. ++++++++++++++++++++++++++++++++++++++*/ void ResetQueueList(Queue *queue) { queue->noccupied=0; } /*++++++++++++++++++++++++++++++++++++++ Free a queue. Queue *queue The queue to be freed. ++++++++++++++++++++++++++++++++++++++*/ void FreeQueueList(Queue *queue) { free(queue->results); free(queue); } /*++++++++++++++++++++++++++++++++++++++ Insert a new item into the queue in the right place. The data is stored in a "Binary Heap" http://en.wikipedia.org/wiki/Binary_heap and this operation is adding an item to the heap. Queue *queue The queue to insert the result into. Result *result The result to insert into the queue. score_t score The score to use for sorting the node. ++++++++++++++++++++++++++++++++++++++*/ void InsertInQueue(Queue *queue,Result *result,score_t score) { int index; if(result->queued==NOT_QUEUED) { queue->noccupied++; index=queue->noccupied; if(queue->noccupied==queue->nallocated) { queue->nallocated=queue->nallocated+queue->nincrement; queue->results=(Result**)realloc((void*)queue->results,queue->nallocated*sizeof(Result*)); } queue->results[index]=result; queue->results[index]->queued=index; } else index=result->queued; queue->results[index]->sortby=score; /* Bubble up the new value */ while(index>1) { int newindex; Result *temp; newindex=index/2; if(queue->results[index]->sortby>=queue->results[newindex]->sortby) break; temp=queue->results[index]; queue->results[index]=queue->results[newindex]; queue->results[newindex]=temp; queue->results[index]->queued=index; queue->results[newindex]->queued=newindex; index=newindex; } } /*++++++++++++++++++++++++++++++++++++++ Pop an item from the front of the queue. The data is stored in a "Binary Heap" http://en.wikipedia.org/wiki/Binary_heap and this operation is deleting the root item from the heap. Result *PopFromQueue Returns the top item. Queue *queue The queue to remove the result from. ++++++++++++++++++++++++++++++++++++++*/ Result *PopFromQueue(Queue *queue) { int index; Result *retval; if(queue->noccupied==0) return(NULL); retval=queue->results[1]; retval->queued=NOT_QUEUED; index=1; queue->results[index]=queue->results[queue->noccupied]; queue->noccupied--; /* Bubble down the newly promoted value */ while((2*index)noccupied) { int newindex; Result *temp; newindex=2*index; if(queue->results[newindex]->sortby>queue->results[newindex+1]->sortby) newindex=newindex+1; if(queue->results[index]->sortby<=queue->results[newindex]->sortby) break; temp=queue->results[newindex]; queue->results[newindex]=queue->results[index]; queue->results[index]=temp; queue->results[index]->queued=index; queue->results[newindex]->queued=newindex; index=newindex; } if((2*index)==queue->noccupied) { int newindex; Result *temp; newindex=2*index; if(queue->results[index]->sortby<=queue->results[newindex]->sortby) ; /* break */ else { temp=queue->results[newindex]; queue->results[newindex]=queue->results[index]; queue->results[index]=temp; queue->results[index]->queued=index; queue->results[newindex]->queued=newindex; } } return(retval); } routino-3.2/src/uncompress.c 644 233 144 24015 12535623410 11401 0/*************************************** File uncompression. Part of the Routino routing software. ******************/ /****************** This file Copyright 2012-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #if defined(_MSC_VER) #include #define read(fd,address,length) _read(fd,address,(unsigned int)(length)) #define write(fd,address,length) _write(fd,address,(unsigned int)(length)) #define close _close #else #include #endif #include #if defined(USE_BZIP2) && USE_BZIP2 #define BZ_NO_STDIO #include #endif #if defined(USE_GZIP) && USE_GZIP #include #endif #if defined(USE_XZ) && USE_XZ #include #endif #include "logging.h" #include "uncompress.h" /* Local functions */ #if !defined(_MSC_VER) && !defined(__MINGW32__) #if (defined(USE_BZIP2) && USE_BZIP2) || (defined(USE_GZIP) && USE_GZIP) || (defined(USE_XZ) && USE_XZ) static int pipe_and_fork(int filefd,int *pipefd); #endif #if defined(USE_BZIP2) && USE_BZIP2 static void uncompress_bzip2_pipe(int filefd,int pipefd); #endif #if defined(USE_GZIP) && USE_GZIP static void uncompress_gzip_pipe(int filefd,int pipefd); #endif #if defined(USE_XZ) && USE_XZ static void uncompress_xz_pipe(int filefd,int pipefd); #endif #endif /* !defined(_MSC_VER) && !defined(__MINGW32__) */ /*++++++++++++++++++++++++++++++++++++++ Create a child process to uncompress data on a file descriptor as if it were a pipe. int Uncompress_Bzip2 Returns the file descriptor of the uncompressed end of the pipe. int filefd The file descriptor of the compressed end of the pipe. ++++++++++++++++++++++++++++++++++++++*/ int Uncompress_Bzip2(int filefd) { #if defined(USE_BZIP2) && USE_BZIP2 && !defined(_MSC_VER) && !defined(__MINGW32__) int pipefd=-1; if(pipe_and_fork(filefd,&pipefd)) return(pipefd); uncompress_bzip2_pipe(filefd,pipefd); exit(EXIT_SUCCESS); #else /* USE_BZIP2 */ logassert(0,"No bzip2 compression support available (re-compile and try again)"); return(0); #endif /* USE_BZIP2 */ } /*++++++++++++++++++++++++++++++++++++++ Create a child process to uncompress data on a file descriptor as if it were a pipe. int Uncompress_Gzip Returns the file descriptor of the uncompressed end of the pipe. int filefd The file descriptor of the compressed end of the pipe. ++++++++++++++++++++++++++++++++++++++*/ int Uncompress_Gzip(int filefd) { #if defined(USE_GZIP) && USE_GZIP && !defined(_MSC_VER) && !defined(__MINGW32__) int pipefd=-1; if(pipe_and_fork(filefd,&pipefd)) return(pipefd); uncompress_gzip_pipe(filefd,pipefd); exit(EXIT_SUCCESS); #else /* USE_GZIP */ logassert(0,"No gzip compression support available (re-compile and try again)"); return(0); #endif /* USE_GZIP */ } /*++++++++++++++++++++++++++++++++++++++ Create a child process to uncompress data on a file descriptor as if it were a pipe. int Uncompress_Xz Returns the file descriptor of the uncompressed end of the pipe. int filefd The file descriptor of the compressed end of the pipe. ++++++++++++++++++++++++++++++++++++++*/ int Uncompress_Xz(int filefd) { #if defined(USE_XZ) && USE_XZ && !defined(_MSC_VER) && !defined(__MINGW32__) int pipefd=-1; if(pipe_and_fork(filefd,&pipefd)) return(pipefd); uncompress_xz_pipe(filefd,pipefd); exit(EXIT_SUCCESS); #else /* USE_XZ */ logassert(0,"No xz compression support available (re-compile and try again)"); return(0); #endif /* USE_XZ */ } #if !defined(_MSC_VER) && !defined(__MINGW32__) #if (defined(USE_BZIP2) && USE_BZIP2) || (defined(USE_GZIP) && USE_GZIP) || (defined(USE_XZ) && USE_XZ) /*++++++++++++++++++++++++++++++++++++++ Create a pipe and then fork returning in the parent and child with a different end of the pipe. int pipe_and_fork Returns 1 for the reading (parent) end of the pipe and 0 for the writing (child) end. int filefd The file descriptor of the file. int *pipefd Returns the file descriptor for the end of the pipe. ++++++++++++++++++++++++++++++++++++++*/ static int pipe_and_fork(int filefd,int *pipefd) { int pipe_fd[2]={-1,-1}; pid_t childpid; #define PIPE_READER 0 #define PIPE_WRITER 1 if(pipe(pipe_fd)) { logassert(0,"Cannot create pipe for uncompressor (try without using a compressed file)"); return(1); } if((childpid=fork()) == -1) { logassert(0,"Cannot create new process for uncompressor (try without using a compressed file)"); return(1); } if(childpid==0) /* The child */ { int i; *pipefd=pipe_fd[PIPE_WRITER]; /* Close all unneeded file descriptors */ for(i=0;i<255;i++) if(i!=filefd && i!=*pipefd) close(i); return(0); } else /* The parent */ { struct sigaction action; *pipefd=pipe_fd[PIPE_READER]; /* Close all unneeded file descriptors */ close(pipe_fd[PIPE_WRITER]); close(filefd); /* Ignore child exiting and pipe signals */ /* SIGCHLD */ action.sa_handler=SIG_IGN; sigemptyset(&action.sa_mask); action.sa_flags=0; sigaction(SIGCHLD,&action,NULL); /* SIGPIPE */ action.sa_handler=SIG_IGN; sigemptyset(&action.sa_mask); action.sa_flags=0; sigaction(SIGPIPE,&action,NULL); return(1); } } #endif /* (defined(USE_BZIP2) && USE_BZIP2) || (defined(USE_GZIP) && USE_GZIP) || (defined(USE_XZ) && USE_XZ) */ #if defined(USE_BZIP2) && USE_BZIP2 /*++++++++++++++++++++++++++++++++++++++ Uncompress a file using bzip2 as a pipeline. int filefd The incoming, compressed, data. int pipefd The outgoing, uncompressed, data. ++++++++++++++++++++++++++++++++++++++*/ static void uncompress_bzip2_pipe(int filefd,int pipefd) { bz_stream bz={0}; char inbuffer[16384],outbuffer[16384]; int infinished=0; int state; if(BZ2_bzDecompressInit(&bz,0,0)!=BZ_OK) exit(EXIT_FAILURE); do { if(bz.avail_in==0 && !infinished) { ssize_t n=read(filefd,inbuffer,sizeof(inbuffer)); if(n<=0) infinished=1; else { bz.next_in=inbuffer; bz.avail_in=n; } } bz.next_out=outbuffer; bz.avail_out=sizeof(outbuffer); state=BZ2_bzDecompress(&bz); if(state!=BZ_OK && state!=BZ_STREAM_END) exit(EXIT_FAILURE); if(bz.avail_out0) { m=write(pipefd,p,n); if(m<=0) exit(EXIT_FAILURE); p+=m; n-=m; } } } while(state!=BZ_STREAM_END); if(BZ2_bzDecompressEnd(&bz)!=BZ_OK) exit(EXIT_FAILURE); exit(EXIT_SUCCESS); } #endif /* USE_BZIP2 */ #if defined(USE_GZIP) && USE_GZIP /*++++++++++++++++++++++++++++++++++++++ Uncompress a file using gzip as a pipeline. int filefd The incoming, compressed, data. int pipefd The outgoing, uncompressed, data. ++++++++++++++++++++++++++++++++++++++*/ static void uncompress_gzip_pipe(int filefd,int pipefd) { z_stream z={0}; unsigned char inbuffer[16384],outbuffer[16384]; int infinished=0; int state; if(inflateInit2(&z,15+32)!=Z_OK) exit(EXIT_FAILURE); do { if(z.avail_in==0 && !infinished) { ssize_t n=read(filefd,inbuffer,sizeof(inbuffer)); if(n<=0) infinished=1; else { z.next_in=inbuffer; z.avail_in=n; } } z.next_out=outbuffer; z.avail_out=sizeof(outbuffer); state=inflate(&z,Z_NO_FLUSH); if(state!=Z_OK && state!=Z_STREAM_END) { exit(EXIT_FAILURE); } if(z.avail_out0) { m=write(pipefd,p,n); if(m<=0) exit(EXIT_FAILURE); p+=m; n-=m; } } } while(state!=Z_STREAM_END); if(inflateEnd(&z)!=Z_OK) exit(EXIT_FAILURE); exit(EXIT_SUCCESS); } #endif /* USE_GZIP */ #if defined(USE_XZ) && USE_XZ /*++++++++++++++++++++++++++++++++++++++ Uncompress a file using xz as a pipeline. int filefd The incoming, compressed, data. int pipefd The outgoing, uncompressed, data. ++++++++++++++++++++++++++++++++++++++*/ static void uncompress_xz_pipe(int filefd,int pipefd) { lzma_stream lzma=LZMA_STREAM_INIT; unsigned char inbuffer[16384],outbuffer[16384]; int infinished=0; lzma_ret retval; if(lzma_stream_decoder(&lzma,UINT64_MAX,0)!=LZMA_OK) exit(EXIT_FAILURE); do { if(lzma.avail_in==0 && !infinished) { ssize_t n=read(filefd,inbuffer,sizeof(inbuffer)); if(n<=0) infinished=1; else { lzma.next_in=inbuffer; lzma.avail_in=n; } } lzma.next_out=outbuffer; lzma.avail_out=sizeof(outbuffer); retval=lzma_code(&lzma,LZMA_RUN); if(retval!=LZMA_OK && retval!=LZMA_STREAM_END) { exit(EXIT_FAILURE); } if(lzma.avail_out0) { m=write(pipefd,p,n); if(m<=0) exit(EXIT_FAILURE); p+=m; n-=m; } } } while(retval!=LZMA_STREAM_END); lzma_end(&lzma); exit(EXIT_SUCCESS); } #endif /* USE_XZ */ #endif /* !defined(_MSC_VER) && !defined(__MINGW32__) */ routino-3.2/src/xmlparse.c 644 233 144 210010 12664307375 11062 0/*************************************** A simple generic XML parser where the structure comes from the function parameters. Not intended to be fully conforming to XML standard or a validating parser but sufficient to parse OSM XML and simple program configuration files. Part of the Routino routing software. ******************/ /****************** This file Copyright 2010-2016 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #if defined(_MSC_VER) #include #include #define read(fd,address,length) _read(fd,address,(unsigned int)(length)) #define snprintf _snprintf #define ssize_t SSIZE_T #else #include #endif #include #include #include #include #include #if defined(_MSC_VER) || defined(__MINGW32__) #define strcasecmp _stricmp #else #include #endif #include #include "xmlparse.h" /* Parser states */ #define LEX_EOF 0 #define LEX_FUNC_TAG_BEGIN 1 #define LEX_FUNC_XML_DECL_BEGIN 2 #define LEX_FUNC_TAG_POP 3 #define LEX_FUNC_TAG_PUSH 4 #define LEX_FUNC_XML_DECL_FINISH 5 #define LEX_FUNC_TAG_FINISH 6 #define LEX_FUNC_ATTR_KEY 7 #define LEX_FUNC_ATTR_VAL 8 #define LEX_STATE_INITIAL 10 #define LEX_STATE_BANGTAG 11 #define LEX_STATE_COMMENT 12 #define LEX_STATE_XML_DECL_START 13 #define LEX_STATE_XML_DECL 14 #define LEX_STATE_TAG_START 15 #define LEX_STATE_TAG 16 #define LEX_STATE_ATTR_KEY 17 #define LEX_STATE_ATTR_VAL 18 #define LEX_STATE_END_TAG1 19 #define LEX_STATE_END_TAG2 20 #define LEX_STATE_DQUOTED 21 #define LEX_STATE_SQUOTED 22 #define LEX_ERROR_TAG_START 101 #define LEX_ERROR_XML_DECL_START 102 #define LEX_ERROR_TAG 103 #define LEX_ERROR_XML_DECL 104 #define LEX_ERROR_ATTR 105 #define LEX_ERROR_END_TAG 106 #define LEX_ERROR_COMMENT 107 #define LEX_ERROR_CLOSE 108 #define LEX_ERROR_ATTR_VAL 109 #define LEX_ERROR_ENTITY_REF 110 #define LEX_ERROR_CHAR_REF 111 #define LEX_ERROR_TEXT_OUTSIDE 112 #define LEX_ERROR_UNEXP_TAG 201 #define LEX_ERROR_UNBALANCED 202 #define LEX_ERROR_NO_START 203 #define LEX_ERROR_UNEXP_ATT 204 #define LEX_ERROR_UNEXP_EOF 205 #define LEX_ERROR_XML_NOT_FIRST 206 #define LEX_ERROR_CALLBACK 255 /* Parsing variables and functions (re-initialised for each file) */ static uint64_t lineno; static unsigned char buffer[2][16384]; static unsigned char *buffer_token,*buffer_end,*buffer_ptr; static int buffer_active=0; static char *stored_message=NULL; /*++++++++++++++++++++++++++++++++++++++ Refill the data buffer making sure that the string starting at buffer_token is contiguous. int buffer_refill Return 0 if everything is OK or 1 for EOF. int fd The file descriptor to read from. ++++++++++++++++++++++++++++++++++++++*/ static inline int buffer_refill(int fd) { ssize_t n; size_t m=0; m=(buffer_end-buffer[buffer_active])+1; if(m>(sizeof(buffer[0])/2)) /* more than half full */ { m=0; buffer_active=!buffer_active; if(buffer_token) { m=(buffer_end-buffer_token)+1; memcpy(buffer[buffer_active],buffer_token,m); buffer_token=buffer[buffer_active]; } } n=read(fd,buffer[buffer_active]+m,sizeof(buffer[0])-m); buffer_ptr=buffer[buffer_active]+m; buffer_end=buffer[buffer_active]+m+n-1; if(n<=0) return(1); else return(0); } /* Macros to simplify the parser (and make it look more like lex) */ #define BEGIN(xx) do{ state=(xx); goto new_state; } while(0) #define NEXT(xx) next_state=(xx) #define START_TOKEN buffer_token=buffer_ptr #define END_TOKEN buffer_token=NULL #define NEXT_CHAR \ do{ \ if(buffer_ptr==buffer_end) \ { if(buffer_refill(fd)) BEGIN(LEX_EOF); } \ else \ buffer_ptr++; \ } while(0) /* -------- equivalent flex definition -------- S [ \t\r] N (\n) U1 [\x09\x0A\x0D\x20-\x7F] U2 [\xC2-\xDF][\x80-\xBF] U3a \xE0[\xA0-\xBF][\x80-\xBF] U3b [\xE1-\xEC][\x80-\xBF][\x80-\xBF] U3c \xED[\x80-\x9F][\x80-\xBF] U3d [\xEE-\xEF][\x80-\xBF][\x80-\xBF] U3 {U3a}|{U3b}|{U3c}|{U3d} U4a \xF0[\x90-\xBF][\x80-\xBF][\x80-\xBF] U4b [\xF1-\xF3][\x80-\xBF][\x80-\xBF][\x80-\xBF] U4c \xF4[\x80-\x8F][\x80-\xBF][\x80-\xBF] U4 {U4a}|{U4b}|{U4c} U ({U1}|{U2}|{U3}|{U4}) U1_xml ([\x09\x0A\x0D\x20-\x25\x27-\x3B\x3D\x3F-\x7F]) U1quotedS_xml ([\x09\x0A\x0D\x20-\x25\x28-\x3B\x3D\x3F-\x7F]) U1quotedD_xml ([\x09\x0A\x0D\x20-\x21\x23-\x25\x27-\x3B\x3D\x3F-\x7F]) UquotedS ({U1quotedS_xml}|{U2}|{U3}|{U4}) UquotedD ({U1quotedD_xml}|{U2}|{U3}|{U4}) letter [a-zA-Z] digit [0-9] xdigit [a-fA-F0-9] namechar ({letter}|{digit}|[-._:]) namestart ({letter}|[_:]) name ({namestart}{namechar}*) entityref (&{name};) charref (&#({digit}+|x{xdigit}+);) -------- equivalent flex definition -------- */ /* Tables containing character class defintions (advance declaration for data at end of file). */ static const unsigned char quotedD[256],quotedS[256]; static const unsigned char *U2[1],*U3a[2],*U3b[2],*U3c[2],*U3d[2],*U4a[3],*U4b[3],*U4c[3]; static const unsigned char namestart[256],namechar[256],whitespace[256],digit[256],xdigit[256]; /*++++++++++++++++++++++++++++++++++++++ A function to call the callback function with the parameters needed. int call_callback Returns 1 if the callback returned with an error. const char *name The name of the tag. int (*callback)() The callback function. int type The type of tag (start and/or end). int nattributes The number of attributes collected. unsigned char *attributes[XMLPARSE_MAX_ATTRS] The list of attributes. ++++++++++++++++++++++++++++++++++++++*/ static inline int call_callback(const char *name,int (*callback)(),int type,int nattributes,unsigned char *attributes[XMLPARSE_MAX_ATTRS]) { switch(nattributes) { case 0: return (*callback)(name,type); case 1: return (*callback)(name,type,attributes[0]); case 2: return (*callback)(name,type,attributes[0],attributes[1]); case 3: return (*callback)(name,type,attributes[0],attributes[1],attributes[2]); case 4: return (*callback)(name,type,attributes[0],attributes[1],attributes[2],attributes[3]); case 5: return (*callback)(name,type,attributes[0],attributes[1],attributes[2],attributes[3],attributes[4]); case 6: return (*callback)(name,type,attributes[0],attributes[1],attributes[2],attributes[3],attributes[4],attributes[5]); case 7: return (*callback)(name,type,attributes[0],attributes[1],attributes[2],attributes[3],attributes[4],attributes[5],attributes[6]); case 8: return (*callback)(name,type,attributes[0],attributes[1],attributes[2],attributes[3],attributes[4],attributes[5],attributes[6],attributes[7]); case 9: return (*callback)(name,type,attributes[0],attributes[1],attributes[2],attributes[3],attributes[4],attributes[5],attributes[6],attributes[7],attributes[8]); case 10: return (*callback)(name,type,attributes[0],attributes[1],attributes[2],attributes[3],attributes[4],attributes[5],attributes[6],attributes[7],attributes[8],attributes[9]); case 11: return (*callback)(name,type,attributes[0],attributes[1],attributes[2],attributes[3],attributes[4],attributes[5],attributes[6],attributes[7],attributes[8],attributes[9],attributes[10]); case 12: return (*callback)(name,type,attributes[0],attributes[1],attributes[2],attributes[3],attributes[4],attributes[5],attributes[6],attributes[7],attributes[8],attributes[9],attributes[10],attributes[11]); case 13: return (*callback)(name,type,attributes[0],attributes[1],attributes[2],attributes[3],attributes[4],attributes[5],attributes[6],attributes[7],attributes[8],attributes[9],attributes[10],attributes[11],attributes[12]); case 14: return (*callback)(name,type,attributes[0],attributes[1],attributes[2],attributes[3],attributes[4],attributes[5],attributes[6],attributes[7],attributes[8],attributes[9],attributes[10],attributes[11],attributes[12],attributes[13]); case 15: return (*callback)(name,type,attributes[0],attributes[1],attributes[2],attributes[3],attributes[4],attributes[5],attributes[6],attributes[7],attributes[8],attributes[9],attributes[10],attributes[11],attributes[12],attributes[13],attributes[14]); case 16: return (*callback)(name,type,attributes[0],attributes[1],attributes[2],attributes[3],attributes[4],attributes[5],attributes[6],attributes[7],attributes[8],attributes[9],attributes[10],attributes[11],attributes[12],attributes[13],attributes[14],attributes[15]); default: ParseXML_SetError("Too many attributes for tag '%s' source code needs changing.",name); return(1); } } /*++++++++++++++++++++++++++++++++++++++ Parse the XML and call the functions for each tag as seen. int ParseXML Returns 0 if OK or something else in case of an error. int fd The file descriptor of the file to parse. const xmltag *const *tags The array of pointers to tags for the top level. int options A list of XML Parser options OR-ed together. ++++++++++++++++++++++++++++++++++++++*/ int ParseXML(int fd,const xmltag *const *tags,int options) { int i; int state,next_state,after_attr; unsigned char saved_buffer_ptr=0; const unsigned char *quoted; unsigned char *attributes[XMLPARSE_MAX_ATTRS]={NULL}; int attribute=0; int stackdepth=0,stackused=0; const xmltag * const **tags_stack=NULL; const xmltag **tag_stack=NULL; const xmltag *tag=NULL; /* The actual parser. */ lineno=1; if(stored_message) free(stored_message); stored_message=NULL; buffer_end=buffer[buffer_active]+sizeof(buffer[0])-1; buffer_token=NULL; buffer_refill(fd); BEGIN(LEX_STATE_INITIAL); new_state: switch(state) { /* ================ Parsing states ================ */ /* -------- equivalent flex definition -------- """"<" { BEGIN(TAG_START); } ">" { return(LEX_ERROR_CLOSE); } {N} { lineno++; } {S}+ { } . { return(LEX_ERROR_TEXT_OUTSIDE); } -------- equivalent flex definition -------- */ case LEX_STATE_INITIAL: while(1) { while(whitespace[(int)*buffer_ptr]) NEXT_CHAR; if(*buffer_ptr=='\n') { NEXT_CHAR; lineno++; } else if(*buffer_ptr=='<') { NEXT_CHAR; if(*buffer_ptr=='/') { NEXT_CHAR; BEGIN(LEX_STATE_END_TAG1); } else if(*buffer_ptr=='!') { NEXT_CHAR; BEGIN(LEX_STATE_BANGTAG); } else if(*buffer_ptr=='?') { NEXT_CHAR; BEGIN(LEX_STATE_XML_DECL_START); } else BEGIN(LEX_STATE_TAG_START); } else if(*buffer_ptr=='>') BEGIN(LEX_ERROR_CLOSE); else BEGIN(LEX_ERROR_TEXT_OUTSIDE); } break; /* -------- equivalent flex definition -------- "--" { BEGIN(COMMENT); } {N} { return(LEX_ERROR_TAG_START); } . { return(LEX_ERROR_TAG_START); } -------- equivalent flex definition -------- */ case LEX_STATE_BANGTAG: if(*buffer_ptr!='-') BEGIN(LEX_ERROR_TAG_START); NEXT_CHAR; if(*buffer_ptr!='-') BEGIN(LEX_ERROR_TAG_START); NEXT_CHAR; BEGIN(LEX_STATE_COMMENT); break; /* -------- equivalent flex definition -------- "-->" { BEGIN(INITIAL); } "--"[^>] { return(LEX_ERROR_COMMENT); } "-" { } {N} { lineno++; } [^-\n]+ { } -------- equivalent flex definition -------- */ case LEX_STATE_COMMENT: while(1) { while(*buffer_ptr!='-' && *buffer_ptr!='\n') NEXT_CHAR; if(*buffer_ptr=='-') { NEXT_CHAR; if(*buffer_ptr!='-') continue; NEXT_CHAR; if(*buffer_ptr=='>') { NEXT_CHAR; BEGIN(LEX_STATE_INITIAL); } BEGIN(LEX_ERROR_COMMENT); } else /* if(*buffer_ptr=='\n') */ { NEXT_CHAR; lineno++; } } break; /* -------- equivalent flex definition -------- xml { BEGIN(XML_DECL); return(LEX_XML_DECL_BEGIN); } {N} { return(LEX_ERROR_XML_DECL_START); } . { return(LEX_ERROR_XML_DECL_START); } -------- equivalent flex definition -------- */ case LEX_STATE_XML_DECL_START: START_TOKEN; if(*buffer_ptr=='x') { NEXT_CHAR; if(*buffer_ptr=='m') { NEXT_CHAR; if(*buffer_ptr=='l') { NEXT_CHAR; saved_buffer_ptr=*buffer_ptr; *buffer_ptr=0; NEXT(LEX_STATE_XML_DECL); BEGIN(LEX_FUNC_XML_DECL_BEGIN); } } } BEGIN(LEX_ERROR_XML_DECL_START); /* -------- equivalent flex definition -------- "?>" { BEGIN(INITIAL); return(LEX_XML_DECL_FINISH); } {S}+ { } {N} { lineno++; } {name} { after_attr=XML_DECL; BEGIN(ATTR_KEY); return(LEX_ATTR_KEY); } . { return(LEX_ERROR_XML_DECL); } -------- equivalent flex definition -------- */ case LEX_STATE_XML_DECL: while(1) { while(whitespace[(int)*buffer_ptr]) NEXT_CHAR; if(namestart[(int)*buffer_ptr]) { START_TOKEN; NEXT_CHAR; while(namechar[(int)*buffer_ptr]) NEXT_CHAR; saved_buffer_ptr=*buffer_ptr; *buffer_ptr=0; after_attr=LEX_STATE_XML_DECL; NEXT(LEX_STATE_ATTR_KEY); BEGIN(LEX_FUNC_ATTR_KEY); } else if(*buffer_ptr=='?') { NEXT_CHAR; if(*buffer_ptr=='>') { NEXT_CHAR; NEXT(LEX_STATE_INITIAL); BEGIN(LEX_FUNC_XML_DECL_FINISH); } BEGIN(LEX_ERROR_XML_DECL); } else if(*buffer_ptr=='\n') { NEXT_CHAR; lineno++; } else BEGIN(LEX_ERROR_XML_DECL); } break; /* -------- equivalent flex definition -------- {name} { BEGIN(TAG); return(LEX_TAG_BEGIN); } {N} { return(LEX_ERROR_TAG_START); } . { return(LEX_ERROR_TAG_START); } -------- equivalent flex definition -------- */ case LEX_STATE_TAG_START: if(namestart[(int)*buffer_ptr]) { START_TOKEN; NEXT_CHAR; while(namechar[(int)*buffer_ptr]) NEXT_CHAR; saved_buffer_ptr=*buffer_ptr; *buffer_ptr=0; NEXT(LEX_STATE_TAG); BEGIN(LEX_FUNC_TAG_BEGIN); } BEGIN(LEX_ERROR_TAG_START); /* -------- equivalent flex definition -------- {name} { BEGIN(END_TAG2); return(LEX_TAG_POP); } {N} { return(LEX_ERROR_END_TAG); } . { return(LEX_ERROR_END_TAG); } -------- equivalent flex definition -------- */ case LEX_STATE_END_TAG1: if(namestart[(int)*buffer_ptr]) { START_TOKEN; NEXT_CHAR; while(namechar[(int)*buffer_ptr]) NEXT_CHAR; saved_buffer_ptr=*buffer_ptr; *buffer_ptr=0; NEXT(LEX_STATE_END_TAG2); BEGIN(LEX_FUNC_TAG_POP); } BEGIN(LEX_ERROR_END_TAG); /* -------- equivalent flex definition -------- ">" { BEGIN(INITIAL); } {N} { return(LEX_ERROR_END_TAG); } . { return(LEX_ERROR_END_TAG); } -------- equivalent flex definition -------- */ case LEX_STATE_END_TAG2: if(*buffer_ptr=='>') { NEXT_CHAR; BEGIN(LEX_STATE_INITIAL); } BEGIN(LEX_ERROR_END_TAG); /* -------- equivalent flex definition -------- "/>" { BEGIN(INITIAL); return(LEX_TAG_FINISH); } ">" { BEGIN(INITIAL); return(LEX_TAG_PUSH); } {S}+ { } {N} { lineno++; } {name} { after_attr=TAG; BEGIN(ATTR_KEY); return(LEX_ATTR_KEY); } . { return(LEX_ERROR_TAG); } -------- equivalent flex definition -------- */ case LEX_STATE_TAG: while(1) { while(whitespace[(int)*buffer_ptr]) NEXT_CHAR; if(namestart[(int)*buffer_ptr]) { START_TOKEN; NEXT_CHAR; while(namechar[(int)*buffer_ptr]) NEXT_CHAR; saved_buffer_ptr=*buffer_ptr; *buffer_ptr=0; after_attr=LEX_STATE_TAG; NEXT(LEX_STATE_ATTR_KEY); BEGIN(LEX_FUNC_ATTR_KEY); } else if(*buffer_ptr=='/') { NEXT_CHAR; if(*buffer_ptr=='>') { NEXT_CHAR; NEXT(LEX_STATE_INITIAL); BEGIN(LEX_FUNC_TAG_FINISH); } BEGIN(LEX_ERROR_TAG); } else if(*buffer_ptr=='>') { NEXT_CHAR; NEXT(LEX_STATE_INITIAL); BEGIN(LEX_FUNC_TAG_PUSH); } else if(*buffer_ptr=='\n') { NEXT_CHAR; lineno++; } else BEGIN(LEX_ERROR_TAG); } break; /* -------- equivalent flex definition -------- = { BEGIN(ATTR_VAL); } {N} { return(LEX_ERROR_ATTR); } . { return(LEX_ERROR_ATTR); } -------- equivalent flex definition -------- */ case LEX_STATE_ATTR_KEY: if(*buffer_ptr=='=') { NEXT_CHAR; BEGIN(LEX_STATE_ATTR_VAL); } BEGIN(LEX_ERROR_ATTR); /* -------- equivalent flex definition -------- \" { BEGIN(DQUOTED); } \' { BEGIN(SQUOTED); } {N} { return(LEX_ERROR_ATTR); } . { return(LEX_ERROR_ATTR); } -------- equivalent flex definition -------- */ case LEX_STATE_ATTR_VAL: if(*buffer_ptr=='"') { NEXT_CHAR; BEGIN(LEX_STATE_DQUOTED); } else if(*buffer_ptr=='\'') { NEXT_CHAR; BEGIN(LEX_STATE_SQUOTED); } BEGIN(LEX_ERROR_ATTR); /* -------- equivalent flex definition -------- \" { BEGIN(after_attr); return(LEX_ATTR_VAL); } {entityref} { if(options&XMLPARSE_RETURN_ATTR_ENCODED) {append_string(yytext);} else { const char *str=ParseXML_Decode_Entity_Ref(yytext); if(str) {append_string(str);} else {return(LEX_ERROR_ENTITY_REF);} } } {charref} { if(options&XMLPARSE_RETURN_ATTR_ENCODED) {append_string(yytext);} else { const char *str=ParseXML_Decode_Char_Ref(yytext); if(str) {append_string(str);} else {return(LEX_ERROR_CHAR_REF);} } } {UquotedD} { } [<>&] { return(LEX_ERROR_ATTR_VAL); } . { return(LEX_ERROR_ATTR_VAL); } \' { BEGIN(after_attr); return(LEX_ATTR_VAL); } {entityref} { if(options&XMLPARSE_RETURN_ATTR_ENCODED) {append_string(yytext);} else { const char *str=ParseXML_Decode_Entity_Ref(yytext); if(str) {append_string(str);} else {return(LEX_ERROR_ENTITY_REF);} } } {charref} { if(options&XMLPARSE_RETURN_ATTR_ENCODED) {append_string(yytext);} else { const char *str=ParseXML_Decode_Char_Ref(yytext); if(str) {append_string(str);} else {return(LEX_ERROR_CHAR_REF);} } } {UquotedS} { append_string(yytext); } [<>&] { return(LEX_ERROR_ATTR_VAL); } . { return(LEX_ERROR_ATTR_VAL); } -------- equivalent flex definition -------- */ case LEX_STATE_DQUOTED: case LEX_STATE_SQUOTED: if(state==LEX_STATE_DQUOTED) quoted=quotedD; else quoted=quotedS; START_TOKEN; while(1) { switch(quoted[(int)*buffer_ptr]) { case 10: /* U1 - used by all tag keys and many values */ do { NEXT_CHAR; } while(quoted[(int)*buffer_ptr]==10); break; case 20: /* U2 */ NEXT_CHAR; if(!U2[0][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; break; case 31: /* U3a */ NEXT_CHAR; if(!U3a[0][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; if(!U3a[1][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; break; case 32: /* U3b */ NEXT_CHAR; if(!U3b[0][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; if(!U3b[1][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; break; case 33: /* U3c */ NEXT_CHAR; if(!U3c[0][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; if(!U3c[1][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; break; case 34: /* U3d */ NEXT_CHAR; if(!U3d[0][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; if(!U3d[1][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; break; case 41: /* U4a */ NEXT_CHAR; if(!U4a[0][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; if(!U4a[1][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; if(!U4a[2][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; break; case 42: /* U4b */ NEXT_CHAR; if(!U4b[0][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; if(!U4b[1][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; if(!U4b[2][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; break; case 43: /* U4c */ NEXT_CHAR; if(!U4c[0][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; if(!U4c[1][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; if(!U4c[2][(int)*buffer_ptr]) BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; break; case 50: /* entityref or charref */ NEXT_CHAR; if(*buffer_ptr=='#') /* charref */ { int charref_len=3; NEXT_CHAR; if(digit[(int)*buffer_ptr]) /* decimal */ { NEXT_CHAR; charref_len++; while(digit[(int)*buffer_ptr]) { NEXT_CHAR; charref_len++; } if(*buffer_ptr!=';') BEGIN(LEX_ERROR_ATTR_VAL); } else if(*buffer_ptr=='x') /* hex */ { NEXT_CHAR; charref_len++; while(xdigit[(int)*buffer_ptr]) { NEXT_CHAR; charref_len++; } if(*buffer_ptr!=';') BEGIN(LEX_ERROR_ATTR_VAL); } else /* other */ BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; if(!(options&XMLPARSE_RETURN_ATTR_ENCODED)) { const char *str; saved_buffer_ptr=*buffer_ptr; *buffer_ptr=0; str=ParseXML_Decode_Char_Ref((char*)(buffer_ptr-charref_len)); if(!str) { buffer_ptr-=charref_len; BEGIN(LEX_ERROR_CHAR_REF); } buffer_token=memmove(buffer_token+(charref_len-strlen(str)),buffer_token,buffer_ptr-buffer_token-charref_len); memcpy(buffer_ptr-strlen(str),str,strlen(str)); *buffer_ptr=saved_buffer_ptr; } } else if(namestart[(int)*buffer_ptr]) /* entityref */ { int entityref_len=3; NEXT_CHAR; while(namechar[(int)*buffer_ptr]) { NEXT_CHAR; entityref_len++; } if(*buffer_ptr!=';') BEGIN(LEX_ERROR_ATTR_VAL); NEXT_CHAR; if(!(options&XMLPARSE_RETURN_ATTR_ENCODED)) { const char *str; saved_buffer_ptr=*buffer_ptr; *buffer_ptr=0; str=ParseXML_Decode_Entity_Ref((char*)(buffer_ptr-entityref_len)); if(!str) { buffer_ptr-=entityref_len; BEGIN(LEX_ERROR_ENTITY_REF); } buffer_token=memmove(buffer_token+(entityref_len-strlen(str)),buffer_token,buffer_ptr-buffer_token-entityref_len); memcpy(buffer_ptr-strlen(str),str,strlen(str)); *buffer_ptr=saved_buffer_ptr; } } else /* other */ BEGIN(LEX_ERROR_ATTR_VAL); break; case 99: /* quote */ *buffer_ptr=0; NEXT_CHAR; NEXT(after_attr); BEGIN(LEX_FUNC_ATTR_VAL); default: /* other */ BEGIN(LEX_ERROR_ATTR_VAL); } } break; /* ================ Functional states ================ */ /* The start of a tag for an XML declaration */ case LEX_FUNC_XML_DECL_BEGIN: if(tag_stack) BEGIN(LEX_ERROR_XML_NOT_FIRST); /* The start of a tag for an element */ case LEX_FUNC_TAG_BEGIN: tag=NULL; for(i=0;tags[i];i++) if(buffer_token[0]==tags[i]->name[0] || tolower(buffer_token[0])==tags[i]->name[0]) if(!strcasecmp((char*)buffer_token+1,tags[i]->name+1)) { tag=tags[i]; for(i=0;inattributes;i++) attributes[i]=NULL; break; } if(tag==NULL) BEGIN(LEX_ERROR_UNEXP_TAG); END_TOKEN; *buffer_ptr=saved_buffer_ptr; BEGIN(next_state); /* The end of the start-tag for an element */ case LEX_FUNC_TAG_PUSH: if(stackused==stackdepth) { tag_stack =realloc(tag_stack ,(stackdepth+=8)*sizeof(xmltag*)); tags_stack=realloc(tags_stack,(stackdepth+=8)*sizeof(xmltag**)); } tag_stack [stackused]=tag; tags_stack[stackused]=tags; stackused++; if(tag->callback) if(call_callback(tag->name,tag->callback,XMLPARSE_TAG_START,tag->nattributes,attributes)) BEGIN(LEX_ERROR_CALLBACK); tags=tag->subtags; BEGIN(next_state); /* The end of the empty-element-tag for an XML declaration */ case LEX_FUNC_XML_DECL_FINISH: /* The end of the empty-element-tag for an element */ case LEX_FUNC_TAG_FINISH: if(tag->callback) if(call_callback(tag->name,tag->callback,XMLPARSE_TAG_START|XMLPARSE_TAG_END,tag->nattributes,attributes)) BEGIN(LEX_ERROR_CALLBACK); if(stackused>0) tag=tag_stack[stackused-1]; else tag=NULL; BEGIN(next_state); /* The end of the end-tag for an element */ case LEX_FUNC_TAG_POP: stackused--; if(stackused<0) BEGIN(LEX_ERROR_NO_START); tags=tags_stack[stackused]; tag =tag_stack [stackused]; if(strcmp((char*)buffer_token,tag->name)) BEGIN(LEX_ERROR_UNBALANCED); for(i=0;inattributes;i++) attributes[i]=NULL; if(tag->callback) if(call_callback(tag->name,tag->callback,XMLPARSE_TAG_END,tag->nattributes,attributes)) BEGIN(LEX_ERROR_CALLBACK); if(stackused>0) tag=tag_stack[stackused-1]; else tag=NULL; END_TOKEN; *buffer_ptr=saved_buffer_ptr; BEGIN(next_state); /* An attribute key */ case LEX_FUNC_ATTR_KEY: attribute=-1; for(i=0;inattributes;i++) if(buffer_token[0]==tag->attributes[i][0] || tolower(buffer_token[0])==tag->attributes[i][0]) if(!strcasecmp((char*)buffer_token+1,tag->attributes[i]+1)) { attribute=i; break; } if(attribute==-1) { if((options&XMLPARSE_UNKNOWN_ATTRIBUTES)==XMLPARSE_UNKNOWN_ATTR_ERROR || ((options&XMLPARSE_UNKNOWN_ATTRIBUTES)==XMLPARSE_UNKNOWN_ATTR_ERRNONAME && !strchr((char*)buffer_token,':'))) BEGIN(LEX_ERROR_UNEXP_ATT); #ifndef LIBROUTINO else if((options&XMLPARSE_UNKNOWN_ATTRIBUTES)==XMLPARSE_UNKNOWN_ATTR_WARN) ParseXML_SetError("Warning on line %"PRIu64": unexpected attribute '%s' for tag '%s'.",lineno,buffer_token,tag->name); #endif } END_TOKEN; *buffer_ptr=saved_buffer_ptr; BEGIN(next_state); /* An attribute value */ case LEX_FUNC_ATTR_VAL: if(tag->callback && attribute!=-1) attributes[attribute]=buffer_token; END_TOKEN; BEGIN(next_state); /* End of file */ case LEX_EOF: if(tag) BEGIN(LEX_ERROR_UNEXP_EOF); break; /* ================ Error states ================ */ case LEX_ERROR_TAG_START: ParseXML_SetError("Character '<' seen not at start of tag."); break; case LEX_ERROR_XML_DECL_START: ParseXML_SetError("Characters ''.",tag->name); break; case LEX_ERROR_XML_DECL: ParseXML_SetError("Invalid character seen inside XML declaration ''."); break; case LEX_ERROR_ATTR: ParseXML_SetError("Invalid attribute definition seen in tag."); break; case LEX_ERROR_END_TAG: ParseXML_SetError("Invalid character seen in end-tag."); break; case LEX_ERROR_COMMENT: ParseXML_SetError("Invalid comment seen."); break; case LEX_ERROR_CLOSE: ParseXML_SetError("Character '>' seen not at end of tag."); break; case LEX_ERROR_ATTR_VAL: ParseXML_SetError("Invalid character '%c' seen in attribute value.",*buffer_ptr); break; case LEX_ERROR_ENTITY_REF: ParseXML_SetError("Invalid entity reference '%s' seen in attribute value.",buffer_ptr); break; case LEX_ERROR_CHAR_REF: ParseXML_SetError("Invalid character reference '%s' seen in attribute value.",buffer_ptr); break; case LEX_ERROR_TEXT_OUTSIDE: ParseXML_SetError("Non-whitespace '%c' seen outside tag.",*buffer_ptr); break; case LEX_ERROR_UNEXP_TAG: ParseXML_SetError("Unexpected tag '%s'.",buffer_token); break; case LEX_ERROR_UNBALANCED: ParseXML_SetError("End tag '' doesn't match start tag '<%s ...>'.",buffer_token,tag->name); break; case LEX_ERROR_NO_START: ParseXML_SetError("End tag '' seen but there was no start tag '<%s ...>'.",buffer_token,buffer_token); break; case LEX_ERROR_UNEXP_ATT: ParseXML_SetError("Unexpected attribute '%s' for tag '%s'.",buffer_token,tag->name); break; case LEX_ERROR_UNEXP_EOF: ParseXML_SetError("End of file seen without end tag ''.",tag->name); break; case LEX_ERROR_XML_NOT_FIRST: ParseXML_SetError("XML declaration '' not before all other tags."); break; case LEX_ERROR_CALLBACK: /* The error message should have been set by the callback function, have a fallback just in case */ if(!stored_message) ParseXML_SetError("Unknown error from tag callback function."); break; } /* Print the error message */ #ifndef LIBROUTINO if(state) fprintf(stderr,"XML Parser: %s\n",stored_message); #endif /* Delete the tagdata */ if(stackdepth) { free(tag_stack); free(tags_stack); } return(state); } /*++++++++++++++++++++++++++++++++++++++ Return the current parser line number. uint64_t ParseXML_LineNumber Returns the line number. ++++++++++++++++++++++++++++++++++++++*/ uint64_t ParseXML_LineNumber(void) { return(lineno); } /*++++++++++++++++++++++++++++++++++++++ Store an error message for later. const char *format The format string. ... The other arguments. ++++++++++++++++++++++++++++++++++++++*/ void ParseXML_SetError(const char *format, ...) { va_list ap; char temp[2]; int line_length,error_length; line_length=snprintf(temp,1,"Error on line %" PRIu64 ": ",lineno); va_start(ap,format); error_length=vsnprintf(temp,1,format,ap); va_end(ap); if(stored_message) free(stored_message); stored_message=malloc(error_length+line_length+1); line_length=sprintf(stored_message,"Error on line %" PRIu64 ": ",lineno); va_start(ap,format); vsprintf(stored_message+line_length,format,ap); va_end(ap); } /*++++++++++++++++++++++++++++++++++++++ Return a stored error message. char *ParseXML_GetError Returns the most recent stored error. ++++++++++++++++++++++++++++++++++++++*/ char *ParseXML_GetError(void) { return(stored_message); } /*++++++++++++++++++++++++++++++++++++++ Convert an XML entity reference into an ASCII string. char *ParseXML_Decode_Entity_Ref Returns a pointer to the replacement decoded string. const char *string The entity reference string. ++++++++++++++++++++++++++++++++++++++*/ char *ParseXML_Decode_Entity_Ref(const char *string) { if(!strcmp(string,"&")) return("&"); if(!strcmp(string,"<")) return("<"); if(!strcmp(string,">")) return(">"); if(!strcmp(string,"'")) return("'"); if(!strcmp(string,""")) return("\""); return(NULL); } /*++++++++++++++++++++++++++++++++++++++ Convert an XML character reference into an ASCII string. char *ParseXML_Decode_Char_Ref Returns a pointer to the replacement decoded string. const char *string The character reference string. ++++++++++++++++++++++++++++++++++++++*/ char *ParseXML_Decode_Char_Ref(const char *string) { static char result[5]=""; /* static allocation of return value (set each call) */ long int unicode; if(string[2]=='x') unicode=strtol(string+3,NULL,16); else unicode=strtol(string+2,NULL,10); if(unicode<0x80) { /* 0000 0000-0000 007F => 0xxxxxxx */ result[0]=(char)unicode; result[1]=0; } else if(unicode<0x07FF) { /* 0000 0080-0000 07FF => 110xxxxx 10xxxxxx */ result[0]=(char)(0xC0+((unicode&0x07C0)>>6)); result[1]=(char)(0x80+ (unicode&0x003F)); result[2]=0; } else if(unicode<0xFFFF) { /* 0000 0800-0000 FFFF => 1110xxxx 10xxxxxx 10xxxxxx */ result[0]=(char)(0xE0+((unicode&0xF000)>>12)); result[1]=(char)(0x80+((unicode&0x0FC0)>>6)); result[2]=(char)(0x80+ (unicode&0x003F)); result[3]=0; } else if(unicode<0x1FFFFF) { /* 0001 0000-001F FFFF => 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ result[0]=(char)(0xF0+((unicode&0x1C0000)>>18)); result[1]=(char)(0x80+((unicode&0x03F000)>>12)); result[2]=(char)(0x80+((unicode&0x000FC0)>>6)); result[3]=(char)(0x80+ (unicode&0x00003F)); result[4]=0; } else { result[0]=(char)0xFF; result[1]=(char)0xFD; result[2]=0; } return(result); } /*++++++++++++++++++++++++++++++++++++++ Convert a string into something that is safe to output in an XML file. char *ParseXML_Encode_Safe_XML Returns a pointer to a static replacement encoded string (or the original if no change needed). const char *string The string to convert. ++++++++++++++++++++++++++++++++++++++*/ char *ParseXML_Encode_Safe_XML(const char *string) { static const char hexstring[17]="0123456789ABCDEF"; /* local lookup table */ static char *result=NULL; /* static allocation of return value */ int i=0,j=0,len; for(i=0;string[i];i++) if(string[i]=='<' || string[i]=='>' || string[i]=='&' || string[i]=='\'' || string[i]=='"' || string[i]<32 || (unsigned char)string[i]>127) break; if(!string[i]) return((char*)string); len=i+256-6; result=(char*)realloc((void*)result,len+7); strncpy(result,string,j=i); do { for(;j') { result[j++]='&'; result[j++]='g'; result[j++]='t'; result[j++]=';'; } else if(string[i]>=32 && (unsigned char)string[i]<=127) result[j++]=string[i]; else { unsigned int unicode; /* Decode the UTF-8 */ if((string[i]&0x80)==0) { /* 0000 0000-0000 007F => 0xxxxxxx */ unicode=string[i]; } else if((string[i]&0xE0)==0xC0 && (string[i]&0x1F)>=2 && (string[i+1]&0xC0)==0x80) { /* 0000 0080-0000 07FF => 110xxxxx 10xxxxxx */ unicode =(string[i++]&0x1F)<<6; unicode|= string[i ]&0x3F; } else if((string[i]&0xF0)==0xE0 && (string[i+1]&0xC0)==0x80 && (string[i+2]&0xC0)==0x80) { /* 0000 0800-0000 FFFF => 1110xxxx 10xxxxxx 10xxxxxx */ unicode =(string[i++]&0x0F)<<12; unicode|=(string[i++]&0x3F)<<6; unicode|= string[i ]&0x3F; } else if((string[i]&0xF8)==0xF0 && (string[i+1]&0xC0)==0x80 && (string[i+2]&0xC0)==0x80 && (string[i+3]&0xC0)==0x80) { /* 0001 0000-001F FFFF => 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ unicode =(string[i++]&0x07)<<18; unicode|=(string[i++]&0x3F)<<12; unicode|=(string[i++]&0x3F)<<6; unicode|= string[i ]&0x3F; } else unicode=0xFFFD; /* Output the character entity */ result[j++]='&'; result[j++]='#'; result[j++]='x'; if(unicode&0x00FF0000) { result[j++]=hexstring[((unicode>>16)&0xf0)>>4]; result[j++]=hexstring[((unicode>>16)&0x0f) ]; } if(unicode&0x00FFFF00) { result[j++]=hexstring[((unicode>>8)&0xf0)>>4]; result[j++]=hexstring[((unicode>>8)&0x0f) ]; } result[j++]=hexstring[(unicode&0xf0)>>4]; result[j++]=hexstring[(unicode&0x0f) ]; result[j++]=';'; } if(string[i]) /* Not finished */ { len+=256; result=(char*)realloc((void*)result,len+7); } } while(string[i]); result[j]=0; return(result); } /*++++++++++++++++++++++++++++++++++++++ Check that a string really is an integer. int ParseXML_IsInteger Returns 1 if an integer could be found or 0 otherwise. const char *string The string to be parsed. ++++++++++++++++++++++++++++++++++++++*/ int ParseXML_IsInteger(const char *string) { const unsigned char *p=(unsigned char*)string; if(*p=='-' || *p=='+') p++; while(digit[(int)*p]) p++; if(*p) return(0); else return(1); } /*++++++++++++++++++++++++++++++++++++++ Check that a string really is a floating point number. int ParseXML_IsFloating Returns 1 if a floating point number could be found or 0 otherwise. const char *string The string to be parsed. ++++++++++++++++++++++++++++++++++++++*/ int ParseXML_IsFloating(const char *string) { const unsigned char *p=(unsigned char*)string; if(*p=='-' || *p=='+') p++; while(digit[(int)*p] || *p=='.') p++; if(*p=='e' || *p=='E') { p++; if(*p=='-' || *p=='+') p++; while(digit[*p]) p++; } if(*p) return(0); else return(1); } /* Table for checking for double-quoted characters. */ static const unsigned char quotedD[256]={ 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0,10, 0, 0, /* 0x00-0x0f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10-0x1f " " */ 10,10,99,10,10,10,50,10,10,10,10,10,10,10,10,10, /* 0x20-0x2f " !"#$%&'()*+,-./" */ 10,10,10,10,10,10,10,10,10,10,10,10, 0,10, 0,10, /* 0x30-0x3f "0123456789:;<=>?" */ 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, /* 0x40-0x4f "@ABCDEFGHIJKLMNO" */ 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, /* 0x50-0x5f "PQRSTUVWXYZ[\]^_" */ 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, /* 0x60-0x6f "`abcdefghijklmno" */ 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, /* 0x70-0x7f "pqrstuvwxyz{|}~ " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80-0x8f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90-0x9f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0-0xaf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0-0xbf " " */ 0, 0,20,20,20,20,20,20,20,20,20,20,20,20,20,20, /* 0xc0-0xcf " " */ 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, /* 0xd0-0xdf " " */ 31,32,32,32,32,32,32,32,32,32,32,32,32,33,34,34, /* 0xe0-0xef " " */ 41,42,42,42,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* 0xf0-0xff " " */ /* Table for checking for single-quoted characters. */ static const unsigned char quotedS[256]={ 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0,10, 0, 0, /* 0x00-0x0f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10-0x1f " " */ 10,10,10,10,10,10,50,99,10,10,10,10,10,10,10,10, /* 0x20-0x2f " !"#$%&'()*+,-./" */ 10,10,10,10,10,10,10,10,10,10,10,10, 0,10, 0,10, /* 0x30-0x3f "0123456789:;<=>?" */ 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, /* 0x40-0x4f "@ABCDEFGHIJKLMNO" */ 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, /* 0x50-0x5f "PQRSTUVWXYZ[\]^_" */ 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, /* 0x60-0x6f "`abcdefghijklmno" */ 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, /* 0x70-0x7f "pqrstuvwxyz{|}~ " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80-0x8f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90-0x9f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0-0xaf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0-0xbf " " */ 0, 0,20,20,20,20,20,20,20,20,20,20,20,20,20,20, /* 0xc0-0xcf " " */ 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, /* 0xd0-0xdf " " */ 31,32,32,32,32,32,32,32,32,32,32,32,32,33,34,34, /* 0xe0-0xef " " */ 41,42,42,42,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* 0xf0-0xff " " */ /* Table for checking for characters between 0x80 and 0x8f. */ static const unsigned char U_80_8F[256]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00-0x0f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10-0x1f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20-0x2f " !"#$%&'()*+,-./" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30-0x3f "0123456789:;<=>?" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40-0x4f "@ABCDEFGHIJKLMNO" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50-0x5f "PQRSTUVWXYZ[\]^_" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60-0x6f "`abcdefghijklmno" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70-0x7f "pqrstuvwxyz{|}~ " */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x80-0x8f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90-0x9f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0-0xaf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0-0xbf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0-0xcf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0-0xdf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0-0xef " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* 0xf0-0xff " " */ /* Table for checking for characters between 0x80 and 0x9f. */ static const unsigned char U_80_9F[256]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00-0x0f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10-0x1f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20-0x2f " !"#$%&'()*+,-./" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30-0x3f "0123456789:;<=>?" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40-0x4f "@ABCDEFGHIJKLMNO" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50-0x5f "PQRSTUVWXYZ[\]^_" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60-0x6f "`abcdefghijklmno" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70-0x7f "pqrstuvwxyz{|}~ " */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x80-0x8f " " */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x90-0x9f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0-0xaf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0-0xbf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0-0xcf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0-0xdf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0-0xef " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* 0xf0-0xff " " */ /* Table for checking for characters between 0x80 and 0xbf. */ static const unsigned char U_80_BF[256]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00-0x0f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10-0x1f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20-0x2f " !"#$%&'()*+,-./" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30-0x3f "0123456789:;<=>?" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40-0x4f "@ABCDEFGHIJKLMNO" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50-0x5f "PQRSTUVWXYZ[\]^_" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60-0x6f "`abcdefghijklmno" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70-0x7f "pqrstuvwxyz{|}~ " */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x80-0x8f " " */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x90-0x9f " " */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xa0-0xaf " " */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xb0-0xbf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0-0xcf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0-0xdf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0-0xef " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* 0xf0-0xff " " */ /* Table for checking for characters between 0x90 and 0xbf. */ static const unsigned char U_90_BF[256]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00-0x0f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10-0x1f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20-0x2f " !"#$%&'()*+,-./" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30-0x3f "0123456789:;<=>?" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40-0x4f "@ABCDEFGHIJKLMNO" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50-0x5f "PQRSTUVWXYZ[\]^_" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60-0x6f "`abcdefghijklmno" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70-0x7f "pqrstuvwxyz{|}~ " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80-0x8f " " */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x90-0x9f " " */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xa0-0xaf " " */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xb0-0xbf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0-0xcf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0-0xdf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0-0xef " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* 0xf0-0xff " " */ /* Table for checking for characters between 0xa0 and 0xbf. */ static const unsigned char U_A0_BF[256]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00-0x0f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10-0x1f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20-0x2f " !"#$%&'()*+,-./" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30-0x3f "0123456789:;<=>?" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40-0x4f "@ABCDEFGHIJKLMNO" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50-0x5f "PQRSTUVWXYZ[\]^_" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60-0x6f "`abcdefghijklmno" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70-0x7f "pqrstuvwxyz{|}~ " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80-0x8f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90-0x9f " " */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xa0-0xaf " " */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xb0-0xbf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0-0xcf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0-0xdf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0-0xef " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* 0xf0-0xff " " */ /* Table for checking for U2 characters = C2-DF,80-BF = U+0080-U+07FF. */ static const unsigned char *U2[1]={ U_80_BF }; /* Table for checking for U3a characters = E0,A0-BF,80-BF = U+0800-U+0FFF. */ static const unsigned char *U3a[2]={ U_A0_BF, U_80_BF }; /* Table for checking for U3b characters = E1-EC,80-BF,80-BF = U+1000-U+CFFF. */ static const unsigned char *U3b[2]={ U_80_BF, U_80_BF }; /* Table for checking for U3c characters = ED,80-9F,80-BF = U+D000-U+D7FF (U+D800-U+DFFF are not legal in XML). */ static const unsigned char *U3c[2]={ U_80_9F, U_80_BF }; /* Table for checking for U3d characters = EE-EF,80-BF,80-BF = U+E000-U+FFFF (U+FFFE-U+FFFF are not legal in XML but handled). */ static const unsigned char *U3d[2]={ U_80_BF, U_80_BF }; /* Table for checking for U4a characters = F0,90-BF,80-BF,80-BF = U+10000-U+3FFFF. */ static const unsigned char *U4a[3]={ U_90_BF, U_80_BF, U_80_BF }; /* Table for checking for U4b characters = F1-F3,80-BF,80-BF,80-BF = U+40000-U+FFFFF. */ static const unsigned char *U4b[3]={ U_80_BF, U_80_BF, U_80_BF }; /* Table for checking for U4c characters = F4,80-8F,80-BF,80-BF = U+100000-U+10FFFF (U+110000- are not legal in XML). */ static const unsigned char *U4c[3]={ U_80_8F, U_80_BF, U_80_BF }; /* Table for checking for namestart characters. */ static const unsigned char namestart[256]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00-0x0f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10-0x1f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20-0x2f " !"#$%&'()*+,-./" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, /* 0x30-0x3f "0123456789:;<=>?" */ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x40-0x4f "@ABCDEFGHIJKLMNO" */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 0x50-0x5f "PQRSTUVWXYZ[\]^_" */ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x60-0x6f "`abcdefghijklmno" */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 0x70-0x7f "pqrstuvwxyz{|}~ " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80-0x8f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90-0x9f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0-0xaf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0-0xbf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0-0xcf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0-0xdf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0-0xef " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* 0xf0-0xff " " */ /* Table for checking for namechar characters. */ static const unsigned char namechar[256] ={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00-0x0f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10-0x1f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, /* 0x20-0x2f " !"#$%&'()*+,-./" */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 0x30-0x3f "0123456789:;<=>?" */ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x40-0x4f "@ABCDEFGHIJKLMNO" */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 0x50-0x5f "PQRSTUVWXYZ[\]^_" */ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x60-0x6f "`abcdefghijklmno" */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 0x70-0x7f "pqrstuvwxyz{|}~ " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80-0x8f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90-0x9f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0-0xaf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0-0xbf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0-0xcf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0-0xdf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0-0xef " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* 0xf0-0xff " " */ /* Table for checking for whitespace characters. */ static const unsigned char whitespace[256]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, /* 0x00-0x0f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10-0x1f " " */ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20-0x2f " !"#$%&'()*+,-./" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30-0x3f "0123456789:;<=>?" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40-0x4f "@ABCDEFGHIJKLMNO" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50-0x5f "PQRSTUVWXYZ[\]^_" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60-0x6f "`abcdefghijklmno" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70-0x7f "pqrstuvwxyz{|}~ " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80-0x8f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90-0x9f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0-0xaf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0-0xbf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0-0xcf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0-0xdf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0-0xef " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* 0xf0-0xff " " */ /* Table for checking for digit characters. */ static const unsigned char digit[256]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00-0x0f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10-0x1f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20-0x2f " !"#$%&'()*+,-./" */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 0x30-0x3f "0123456789:;<=>?" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40-0x4f "@ABCDEFGHIJKLMNO" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50-0x5f "PQRSTUVWXYZ[\]^_" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60-0x6f "`abcdefghijklmno" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70-0x7f "pqrstuvwxyz{|}~ " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80-0x8f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90-0x9f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0-0xaf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0-0xbf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0-0xcf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0-0xdf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0-0xef " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* 0xf0-0xff " " */ /* Table for checking for xdigit characters. */ static const unsigned char xdigit[256]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00-0x0f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10-0x1f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20-0x2f " !"#$%&'()*+,-./" */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 0x30-0x3f "0123456789:;<=>?" */ 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40-0x4f "@ABCDEFGHIJKLMNO" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50-0x5f "PQRSTUVWXYZ[\]^_" */ 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60-0x6f "`abcdefghijklmno" */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x70-0x7f "pqrstuvwxyz{|}~ " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x80-0x8f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x90-0x9f " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xa0-0xaf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xb0-0xbf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xc0-0xcf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xd0-0xdf " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xe0-0xef " " */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* 0xf0-0xff " " */ routino-3.2/src/filedumperx.c 644 233 144 22354 12756102024 11531 0/*************************************** Memory file dumper for the intermediate files containing parsed data. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2016 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include #include "version.h" #include "typesx.h" #include "nodesx.h" #include "waysx.h" #include "relationsx.h" #include "files.h" #include "sorting.h" /* Local functions */ static void print_nodes(const char *filename); static void print_ways(const char *filename); static void print_route_relations(const char *filename); static void print_turn_relations(const char *filename); static void print_usage(int detail,const char *argerr,const char *err); /*++++++++++++++++++++++++++++++++++++++ The main program for the file dumper. ++++++++++++++++++++++++++++++++++++++*/ int main(int argc,char** argv) { int arg; char *dirname=NULL,*prefix=NULL; char *nodes_filename,*ways_filename,*route_relations_filename,*turn_relations_filename; int option_dump; /* Parse the command line arguments */ for(arg=1;arg=0) { fprintf(stderr, "Usage: filedumperx [--version]\n" " [--help]\n" " [--dir=] [--prefix=]\n" " [--dump [--nodes]\n" " [--ways]\n" " [--route-relations]\n" " [--turn-relations]]\n"); if(argerr) fprintf(stderr, "\n" "Error with command line parameter: %s\n",argerr); if(err) fprintf(stderr, "\n" "Error: %s\n",err); } if(detail==1) fprintf(stderr, "\n" "--version Print the version of Routino.\n" "\n" "--help Prints this information.\n" "\n" "--dir= The directory containing the routing database.\n" "--prefix= The filename prefix for the routing database.\n" "\n" "--dump Dump the intermediate files after parsing.\n" " --nodes * all of the nodes.\n" " --ways * all of the ways.\n" " --route-relations * all of the route relations.\n" " --turn-relations * all of the turn relations.\n"); exit(!detail); } routino-3.2/src/results.c 644 233 144 16673 12563633052 10723 0/*************************************** Result data type functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include "results.h" #include "logging.h" #define HASH_NODE_SEGMENT(node,segment) ((node)^(segment<<4)) /*++++++++++++++++++++++++++++++++++++++ Allocate a new results list. Results *NewResultsList Returns the results list. uint8_t log2bins The base 2 logarithm of the initial number of bins in the results array. ++++++++++++++++++++++++++++++++++++++*/ Results *NewResultsList(uint8_t log2bins) { Results *results; results=(Results*)malloc(sizeof(Results)); results->nbins=1<mask=results->nbins-1; results->ncollisions=log2bins-4; results->number=0; results->count=(uint8_t*)calloc(results->nbins,sizeof(uint8_t)); results->point=(Result**)calloc(results->nbins,sizeof(Result*)); #ifndef LIBROUTINO log_malloc(results->count,results->nbins*sizeof(uint8_t)); log_malloc(results->point,results->nbins*sizeof(Result*)); #endif results->ndata1=0; results->nallocdata1=0; results->ndata2=results->nbins>>2; results->data=NULL; results->start_node=NO_NODE; results->prev_segment=NO_SEGMENT; results->finish_node=NO_NODE; results->last_segment=NO_SEGMENT; results->start_waypoint=NO_WAYPOINT; results->finish_waypoint=NO_WAYPOINT; return(results); } /*++++++++++++++++++++++++++++++++++++++ Allocate a new results list. Results *results The results list to be reset. ++++++++++++++++++++++++++++++++++++++*/ void ResetResultsList(Results *results) { uint32_t i; results->number=0; results->ndata1=0; for(i=0;inbins;i++) { results->point[i]=NULL; results->count[i]=0; } results->start_node=NO_NODE; results->prev_segment=NO_SEGMENT; results->finish_node=NO_NODE; results->last_segment=NO_SEGMENT; } /*++++++++++++++++++++++++++++++++++++++ Free a results list. Results *results The results list to be destroyed. ++++++++++++++++++++++++++++++++++++++*/ void FreeResultsList(Results *results) { uint32_t i; for(i=0;inallocdata1;i++) { #ifndef LIBROUTINO log_free(results->data[i]); #endif free(results->data[i]); } free(results->data); #ifndef LIBROUTINO log_free(results->point); #endif free(results->point); #ifndef LIBROUTINO log_free(results->count); #endif free(results->count); free(results); } /*++++++++++++++++++++++++++++++++++++++ Insert a new result into the results data structure in the right order. Result *InsertResult Returns the result that has been inserted. Results *results The results structure to insert into. index_t node The node that is to be inserted into the results. index_t segment The segment that is to be inserted into the results. ++++++++++++++++++++++++++++++++++++++*/ Result *InsertResult(Results *results,index_t node,index_t segment) { Result *result; uint32_t bin=HASH_NODE_SEGMENT(node,segment)&results->mask; /* Check if we have hit the limit on the number of collisions per bin */ if(results->count[bin]==results->ncollisions) { uint32_t i; results->nbins<<=1; results->mask=results->nbins-1; results->ncollisions++; results->count=(uint8_t*)realloc((void*)results->count,results->nbins*sizeof(uint8_t)); results->point=(Result**)realloc((void*)results->point,results->nbins*sizeof(Result*)); #ifndef LIBROUTINO log_malloc(results->count,results->nbins*sizeof(uint8_t)); log_malloc(results->point,results->nbins*sizeof(Result*)); #endif for(i=0;inbins/2;i++) { Result *r=results->point[i]; Result **bin1,**bin2; results->count[i] =0; results->count[i+results->nbins/2]=0; bin1=&results->point[i]; bin2=&results->point[i+results->nbins/2]; *bin1=NULL; *bin2=NULL; while(r) { Result *rh=r->hashnext; uint32_t newbin=HASH_NODE_SEGMENT(r->node,r->segment)&results->mask; r->hashnext=NULL; if(newbin==i) { *bin1=r; bin1=&r->hashnext; } else { *bin2=r; bin2=&r->hashnext; } results->count[newbin]++; r=rh; } } bin=HASH_NODE_SEGMENT(node,segment)&results->mask; } /* Check if we need more data space allocated */ if((results->number%results->ndata2)==0) { results->ndata1++; if(results->ndata1>=results->nallocdata1) { results->nallocdata1++; results->data=(Result**)realloc((void*)results->data,results->nallocdata1*sizeof(Result*)); results->data[results->nallocdata1-1]=(Result*)malloc(results->ndata2*sizeof(Result)); #ifndef LIBROUTINO log_malloc(results->data[results->nallocdata1-1],results->ndata2*sizeof(Result)); #endif } } /* Insert the new entry */ result=&results->data[results->ndata1-1][results->number%results->ndata2]; result->hashnext=results->point[bin]; results->point[bin]=result; results->count[bin]++; results->number++; /* Initialise the result */ result->node=node; result->segment=segment; result->prev=NULL; result->next=NULL; result->score=0; result->sortby=0; result->queued=NOT_QUEUED; return(result); } /*++++++++++++++++++++++++++++++++++++++ Find a result; search by node and segment. Result *FindResult Returns the result that has been found. Results *results The results structure to search. index_t node The node that is to be found. index_t segment The segment that was used to reach this node. ++++++++++++++++++++++++++++++++++++++*/ Result *FindResult(Results *results,index_t node,index_t segment) { Result *r; uint32_t bin=HASH_NODE_SEGMENT(node,segment)&results->mask; r=results->point[bin]; while(r) { if(r->segment==segment && r->node==node) break; r=r->hashnext; } return(r); } /*++++++++++++++++++++++++++++++++++++++ Find the first result from a set of results. Result *FirstResult Returns the first result. Results *results The set of results. ++++++++++++++++++++++++++++++++++++++*/ Result *FirstResult(Results *results) { return(&results->data[0][0]); } /*++++++++++++++++++++++++++++++++++++++ Find the next result from a set of results. Result *NextResult Returns the next result. Results *results The set of results. Result *result The previous result. ++++++++++++++++++++++++++++++++++++++*/ Result *NextResult(Results *results,Result *result) { uint32_t i; size_t j=0; for(i=0;indata1;i++) if(result>=results->data[i]) { j=result-results->data[i]; if(jndata2) break; } if(++j>=results->ndata2) {i++;j=0;} if((i*results->ndata2+j)>=results->number) return(NULL); return(&results->data[i][j]); } routino-3.2/src/logging.c 644 233 144 32423 12531126220 10624 0/*************************************** Functions to handle logging functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include #include #if defined(_MSC_VER) #include #include static const uint64_t EPOCH = ((uint64_t) 116444736000000000ULL); int gettimeofday(struct timeval * tp, struct timezone * tzp) { FILETIME file_time; SYSTEMTIME system_time; ULARGE_INTEGER ularge; GetSystemTime(&system_time); SystemTimeToFileTime(&system_time, &file_time); ularge.LowPart = file_time.dwLowDateTime; ularge.HighPart = file_time.dwHighDateTime; tp->tv_sec = (long) ((ularge.QuadPart - EPOCH) / 10000000L); tp->tv_usec = (long) (system_time.wMilliseconds * 1000); return 0; } #else #include #endif #include "logging.h" /* Global variables */ /*+ The option to print the output in a way that allows logging to a file. +*/ int option_loggable=0; /*+ The option to print elapsed time with the output. +*/ int option_logtime=0; /*+ The option to print memory usage with the output. +*/ int option_logmemory=0; /* Local data types */ /*+ A structure to contain the list of allocated memory. +*/ struct mallocinfo { void *address; /*+ The address of the allocated memory. +*/ size_t size; /*+ The size of the allocated memory. +*/ }; /* Local functions */ static void vfprintf_first(FILE *file,const char *format,va_list ap); static void vfprintf_middle(FILE *file,const char *format,va_list ap); static void vfprintf_last(FILE *file,const char *format,va_list ap); static void fprintf_elapsed_time(FILE *file,struct timeval *start); static void fprintf_max_memory(FILE *file,size_t max_alloc,size_t max_mmap); /* Local variables */ /*+ The time that program_start() was called. +*/ static struct timeval program_start_time; /*+ The time that printf_first() was called. +*/ static struct timeval function_start_time; /*+ The list of allocated memory. +*/ static struct mallocinfo *mallocedmem; /*+ The number of allocated memory blocks. +*/ static int nmallocedmem=0; /*+ The length of the string printed out last time. +*/ static int printed_length=0; /*+ The maximum amount of memory allocated and memory mapped since starting the program. +*/ static size_t program_max_alloc=0,program_max_mmap=0; /*+ The maximum amount of memory allocated and memory mapped since starting the function. +*/ static size_t function_max_alloc=0,function_max_mmap=0; /*+ The current amount of memory allocated and memory mapped. +*/ static size_t current_alloc=0,current_mmap=0; /*++++++++++++++++++++++++++++++++++++++ Record the time that the program started. ++++++++++++++++++++++++++++++++++++++*/ void printf_program_start(void) { gettimeofday(&program_start_time,NULL); program_max_alloc=program_max_mmap=0; } /*++++++++++++++++++++++++++++++++++++++ Record the time that the program started. ++++++++++++++++++++++++++++++++++++++*/ void printf_program_end(void) { if(option_logtime || option_logmemory) { if(option_logtime) fprintf_elapsed_time(stdout,&program_start_time); if(option_logmemory) fprintf_max_memory(stdout,program_max_alloc,program_max_mmap); printf("Finish Program\n"); if(option_logtime==2) printf("[ m:ss.micros] "); else if(option_logtime==1) printf("[ m:ss.mil] "); if(option_logmemory) printf("[RAM,FILE MB] "); if(option_logtime) printf("elapsed time"); if(option_logmemory) { if(option_logtime) printf(", "); printf("maximum memory"); } printf("\n"); fflush(stdout); } } /*++++++++++++++++++++++++++++++++++++++ Print the first message in an overwriting sequence (to stdout). const char *format The format string. ... The other arguments. ++++++++++++++++++++++++++++++++++++++*/ void printf_first(const char *format, ...) { va_list ap; if(option_logtime) gettimeofday(&function_start_time,NULL); if(option_logmemory) { function_max_alloc=current_alloc; function_max_mmap=current_mmap; } if(option_loggable) return; va_start(ap,format); vfprintf_first(stdout,format,ap); va_end(ap); } /*++++++++++++++++++++++++++++++++++++++ Print the middle message in an overwriting sequence (to stdout). const char *format The format string. ... The other arguments. ++++++++++++++++++++++++++++++++++++++*/ void printf_middle(const char *format, ...) { va_list ap; if(option_loggable) return; va_start(ap,format); vfprintf_middle(stdout,format,ap); va_end(ap); } /*++++++++++++++++++++++++++++++++++++++ Print the last message in an overwriting sequence (to stdout). const char *format The format string. ... The other arguments. ++++++++++++++++++++++++++++++++++++++*/ void printf_last(const char *format, ...) { va_list ap; va_start(ap,format); vfprintf_last(stdout,format,ap); va_end(ap); } /*++++++++++++++++++++++++++++++++++++++ Print the first message in an overwriting sequence to a specified file. FILE *file The file to write to. const char *format The format string. ... The other arguments. ++++++++++++++++++++++++++++++++++++++*/ void fprintf_first(FILE *file,const char *format, ...) { va_list ap; if(option_logtime) gettimeofday(&function_start_time,NULL); if(option_logmemory) { function_max_alloc=current_alloc; function_max_mmap=current_mmap; } if(option_loggable) return; va_start(ap,format); vfprintf_first(file,format,ap); va_end(ap); } /*++++++++++++++++++++++++++++++++++++++ Print the middle message in an overwriting sequence to a specified file. FILE *file The file to write to. const char *format The format string. ... The other arguments. ++++++++++++++++++++++++++++++++++++++*/ void fprintf_middle(FILE *file,const char *format, ...) { va_list ap; if(option_loggable) return; va_start(ap,format); vfprintf_middle(file,format,ap); va_end(ap); } /*++++++++++++++++++++++++++++++++++++++ Print the last message in an overwriting sequence to a specified file. FILE *file The file to write to. const char *format The format string. ... The other arguments. ++++++++++++++++++++++++++++++++++++++*/ void fprintf_last(FILE *file,const char *format, ...) { va_list ap; va_start(ap,format); vfprintf_last(file,format,ap); va_end(ap); } /*++++++++++++++++++++++++++++++++++++++ Record the memory allocations (record the amount in use). void *address The address that has been allocated. size_t size The size of the memory that has been allocated. ++++++++++++++++++++++++++++++++++++++*/ void log_malloc(void *address,size_t size) { int i; if(!option_logmemory) return; /* Store the information about the allocated memory */ for(i=0;ifunction_max_alloc) function_max_alloc=current_alloc; if(current_alloc>program_max_alloc) program_max_alloc=current_alloc; } /*++++++++++++++++++++++++++++++++++++++ Record the memory de-allocations. void *address The address that has been freed. ++++++++++++++++++++++++++++++++++++++*/ void log_free(void *address) { size_t size=0; int i; if(!option_logmemory) return; /* Remove the information about the allocated memory */ for(i=0;ii) memmove(&mallocedmem[i],&mallocedmem[i+1],(nmallocedmem-i)*sizeof(struct mallocinfo)); /* Reduce the sum of allocated memory */ current_alloc-=size; } /*++++++++++++++++++++++++++++++++++++++ Record the amount of memory that has been mapped into files. size_t size The size of the file that has been mapped. ++++++++++++++++++++++++++++++++++++++*/ void log_mmap(size_t size) { if(!option_logmemory) return; current_mmap+=size; if(current_mmap>function_max_mmap) function_max_mmap=current_mmap; if(current_mmap>program_max_mmap) program_max_mmap=current_mmap; } /*++++++++++++++++++++++++++++++++++++++ Record the amount of memory that has been unmapped from files. size_t size The size of the file that has been unmapped. ++++++++++++++++++++++++++++++++++++++*/ void log_munmap(size_t size) { if(!option_logmemory) return; current_mmap-=size; } /*++++++++++++++++++++++++++++++++++++++ Do the work to print the first message in an overwriting sequence. FILE *file The file to write to. const char *format The format string. va_list ap The other arguments. ++++++++++++++++++++++++++++++++++++++*/ static void vfprintf_first(FILE *file,const char *format,va_list ap) { int retval; if(option_logtime) fprintf_elapsed_time(file,&function_start_time); if(option_logmemory) fprintf_max_memory(file,function_max_alloc,function_max_mmap); retval=vfprintf(file,format,ap); fflush(file); if(retval>0) printed_length=retval; } /*++++++++++++++++++++++++++++++++++++++ Do the work to print the middle message in an overwriting sequence. FILE *file The file to write to. const char *format The format string. va_list ap The other arguments. ++++++++++++++++++++++++++++++++++++++*/ static void vfprintf_middle(FILE *file,const char *format,va_list ap) { int retval; fputc('\r',file); if(option_logtime) fprintf_elapsed_time(file,&function_start_time); if(option_logmemory) fprintf_max_memory(file,function_max_alloc,function_max_mmap); retval=vfprintf(file,format,ap); fflush(file); if(retval>0) { int new_printed_length=retval; while(retval++0) while(retval++tv_sec; elapsed.tv_usec=finish.tv_usec-start->tv_usec; if(elapsed.tv_usec<0) { elapsed.tv_sec -=1; elapsed.tv_usec+=1000000; } if(option_logtime==2) fprintf(file,"[%2ld:%02ld.%06ld] ",elapsed.tv_sec/60,elapsed.tv_sec%60,elapsed.tv_usec); else fprintf(file,"[%2ld:%02ld.%03ld] ",elapsed.tv_sec/60,elapsed.tv_sec%60,elapsed.tv_usec/1000); } /*++++++++++++++++++++++++++++++++++++++ Print the maximum used memory without a following newline. FILE *file The file to print to. size_t max_alloc The maximum amount of allocated memory. size_t max_mmap The maximum amount of memory mapped memory. ++++++++++++++++++++++++++++++++++++++*/ static void fprintf_max_memory(FILE *file,size_t max_alloc,size_t max_mmap) { fprintf(file,"[%3zu, %3zu MB] ",max_alloc/(1024*1024),max_mmap/(1024*1024)); } /*++++++++++++++++++++++++++++++++++++++ Log a fatal error and exit const char *message The error message. const char *file The file in which the error occured. int line The line number in the file at which the error occured. ++++++++++++++++++++++++++++++++++++++*/ void _logassert(const char *message,const char *file,int line) { fprintf(stderr,"Routino Fatal Error (%s:%d): %s\n",file,line,message); exit(EXIT_FAILURE); } routino-3.2/src/cache.h 644 233 144 21730 12550223461 10253 0/*************************************** Functions to maintain an in-RAM cache of on-disk data for slim mode. Part of the Routino routing software. ******************/ /****************** This file Copyright 2013-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #if SLIM #ifndef CACHE_H #define CACHE_H /*+ To stop multiple inclusions. +*/ #include #include "types.h" /* Macros for constants */ #define CACHEWIDTH 8192 /*+ The width of the cache. +*/ #define CACHEDEPTH 16 /*+ The depth of the cache. +*/ /* Macro for structure forward declaration */ #define CACHE_STRUCTURE_FWD(type) typedef struct _##type##Cache type##Cache; /* Macro for structure declaration */ /*+ A macro to create a cache structure. +*/ #define CACHE_STRUCTURE(type) \ \ struct _##type##Cache \ { \ int first [CACHEWIDTH]; /*+ The first entry to fill +*/ \ \ type data [CACHEWIDTH][CACHEDEPTH]; /*+ The array of type##s. +*/ \ index_t indices[CACHEWIDTH][CACHEDEPTH]; /*+ The array of indexes. +*/ \ }; /* Macros for function prototypes */ #define CACHE_NEWCACHE_PROTO(type) static inline type##Cache *New##type##Cache(void); #define CACHE_DELETECACHE_PROTO(type) static inline void Delete##type##Cache(type##Cache *cache); #define CACHE_FETCHCACHE_PROTO(type) static inline type *FetchCached##type(type##Cache *cache,index_t index,int fd,offset_t offset); #define CACHE_REPLACECACHE_PROTO(type) static inline void ReplaceCached##type(type##Cache *cache,type *value,index_t index,int fd,offset_t offset); #define CACHE_INVALIDATECACHE_PROTO(type) static inline void Invalidate##type##Cache(type##Cache *cache); /* Macros for function definitions */ /*+ A macro to create a function that creates a new cache data structure. +*/ #define CACHE_NEWCACHE(type) \ \ static inline type##Cache *New##type##Cache(void) \ { \ type##Cache *cache; \ \ cache=(type##Cache*)malloc(sizeof(type##Cache)); \ \ Invalidate##type##Cache(cache); \ \ return(cache); \ } /*+ A macro to create a function that deletes a cache data structure. +*/ #define CACHE_DELETECACHE(type) \ \ static inline void Delete##type##Cache(type##Cache *cache) \ { \ free(cache); \ } /*+ A macro to create a function that fetches an item from a cache data structure or reads from file. +*/ #define CACHE_FETCHCACHE(type) \ \ static inline type *FetchCached##type(type##Cache *cache,index_t index,int fd,offset_t offset) \ { \ int row=index%CACHEWIDTH; \ int col; \ \ for(col=0;colindices[row][col]==index) \ return(&cache->data[row][col]); \ \ col=cache->first[row]; \ \ cache->first[row]=(cache->first[row]+1)%CACHEDEPTH; \ \ SlimFetch(fd,&cache->data[row][col],sizeof(type),offset+(offset_t)index*sizeof(type)); \ \ cache->indices[row][col]=index; \ \ return(&cache->data[row][col]); \ } /*+ A macro to create a function that replaces an item in a cache data structure and writes to file. +*/ #define CACHE_REPLACECACHE(type) \ \ static inline void ReplaceCached##type(type##Cache *cache,type *value,index_t index,int fd,offset_t offset) \ { \ int row=index%CACHEWIDTH; \ int col; \ \ for(col=0;colindices[row][col]==index) \ break; \ \ if(col==CACHEDEPTH) \ { \ col=cache->first[row]; \ \ cache->first[row]=(cache->first[row]+1)%CACHEDEPTH; \ } \ \ cache->indices[row][col]=index; \ \ cache->data[row][col]=*value; \ \ SlimReplace(fd,&cache->data[row][col],sizeof(type),offset+(offset_t)index*sizeof(type)); \ } /*+ A macro to create a function that invalidates the contents of a cache data structure. +*/ #define CACHE_INVALIDATECACHE(type) \ \ static inline void Invalidate##type##Cache(type##Cache *cache) \ { \ int row,col; \ \ for(row=0;rowfirst[row]=0; \ \ for(col=0;colindices[row][col]=NO_NODE; \ } \ } /*+ Cache data structure forward declarations (for planetsplitter). +*/ CACHE_STRUCTURE_FWD(NodeX) CACHE_STRUCTURE_FWD(SegmentX) CACHE_STRUCTURE_FWD(WayX) /*+ Cache data structure forward declarations (for router). +*/ CACHE_STRUCTURE_FWD(Node) CACHE_STRUCTURE_FWD(Segment) CACHE_STRUCTURE_FWD(Way) CACHE_STRUCTURE_FWD(TurnRelation) #endif /* CACHE_H */ #endif /* SLIM */ routino-3.2/src/prunex.c 644 233 144 124362 12731266071 10556 0/*************************************** Data pruning functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2011-2014 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include "types.h" #include "segments.h" #include "typesx.h" #include "nodesx.h" #include "segmentsx.h" #include "waysx.h" #include "prunex.h" #include "files.h" #include "logging.h" /* Global variables */ /*+ The command line '--tmpdir' option or its default value. +*/ extern char *option_tmpdirname; /* Local functions */ static void prune_segment(SegmentsX *segmentsx,SegmentX *segmentx); static void modify_segment(SegmentsX *segmentsx,SegmentX *segmentx,index_t newnode1,index_t newnode2); static void unlink_segment_node1_refs(SegmentsX *segmentsx,SegmentX *segmentx); static void unlink_segment_node2_refs(SegmentsX *segmentsx,SegmentX *segmentx); static double distance(double lat1,double lon1,double lat2,double lon2); /*++++++++++++++++++++++++++++++++++++++ Initialise the data structures needed for pruning. NodesX *nodesx The set of nodes to use. SegmentsX *segmentsx The set of segments to use. WaysX *waysx The set of ways to use. ++++++++++++++++++++++++++++++++++++++*/ void StartPruning(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx) { SegmentX segmentx; index_t index=0,lastnode1=NO_NODE; if(segmentsx->number==0) return; /* Print the start message */ printf_first("Adding Extra Segment Indexes: Segments=0"); /* Allocate the array of next segment */ segmentsx->next1=(index_t*)calloc(segmentsx->number,sizeof(index_t)); log_malloc(segmentsx->next1,segmentsx->number*sizeof(index_t)); logassert(segmentsx->next1,"Failed to allocate memory (try using slim mode?)"); /* Check calloc() worked */ /* Open the file read-only */ segmentsx->fd=ReOpenFileBuffered(segmentsx->filename_tmp); /* Read the on-disk image */ while(!ReadFileBuffered(segmentsx->fd,&segmentx,sizeof(SegmentX))) { index_t node1=segmentx.node1; if(index==0) ; else if(lastnode1==node1) segmentsx->next1[index-1]=index; else segmentsx->next1[index-1]=NO_SEGMENT; lastnode1=node1; index++; if(!(index%10000)) printf_middle("Added Extra Segment Indexes: Segments=%"Pindex_t,index); } segmentsx->next1[index-1]=NO_SEGMENT; /* Close the file */ segmentsx->fd=CloseFileBuffered(segmentsx->fd); /* Print the final message */ printf_last("Added Extra Segment Indexes: Segments=%"Pindex_t,segmentsx->number); } /*++++++++++++++++++++++++++++++++++++++ Delete the data structures needed for pruning. NodesX *nodesx The set of nodes to use. SegmentsX *segmentsx The set of segments to use. WaysX *waysx The set of ways to use. ++++++++++++++++++++++++++++++++++++++*/ void FinishPruning(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx) { if(segmentsx->next1) { log_free(segmentsx->next1); free(segmentsx->next1); segmentsx->next1=NULL; } } /*++++++++++++++++++++++++++++++++++++++ Prune out any groups of nodes and segments whose total length is less than a specified minimum. NodesX *nodesx The set of nodes to use. SegmentsX *segmentsx The set of segments to use. WaysX *waysx The set of ways to use. distance_t minimum The minimum distance to keep. ++++++++++++++++++++++++++++++++++++++*/ void PruneIsolatedRegions(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx,distance_t minimum) { WaysX *newwaysx; WayX tmpwayx; transport_t transport; BitMask *connected,*region; index_t *regionsegments,*othersegments; index_t nallocregionsegments,nallocothersegments; if(nodesx->number==0 || segmentsx->number==0) return; /* Map into memory / open the files */ #if !SLIM nodesx->data=MapFile(nodesx->filename_tmp); segmentsx->data=MapFileWriteable(segmentsx->filename_tmp); waysx->data=MapFile(waysx->filename_tmp); #else nodesx->fd=SlimMapFile(nodesx->filename_tmp); segmentsx->fd=SlimMapFileWriteable(segmentsx->filename_tmp); waysx->fd=SlimMapFile(waysx->filename_tmp); InvalidateNodeXCache(nodesx->cache); InvalidateSegmentXCache(segmentsx->cache); InvalidateWayXCache(waysx->cache); #endif newwaysx=NewWayList(0,0); CloseFileBuffered(newwaysx->fd); newwaysx->fd=SlimMapFileWriteable(newwaysx->filename_tmp); connected=AllocBitMask(segmentsx->number); region =AllocBitMask(segmentsx->number); log_malloc(connected,LengthBitMask(segmentsx->number)*sizeof(BitMask)); log_malloc(region ,LengthBitMask(segmentsx->number)*sizeof(BitMask)); logassert(connected,"Failed to allocate memory (try using slim mode?)"); /* Check AllocBitMask() worked */ logassert(region ,"Failed to allocate memory (try using slim mode?)"); /* Check AllocBitMask() worked */ regionsegments=(index_t*)malloc((nallocregionsegments=1024)*sizeof(index_t)); othersegments =(index_t*)malloc((nallocothersegments =1024)*sizeof(index_t)); logassert(regionsegments,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ logassert(othersegments ,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ /* Loop through the transport types */ for(transport=Transport_None+1;transportallow&transports)) continue; /* Print the start message */ printf_first("Pruning Isolated Regions (%s): Segments=0 Adjusted=0 Pruned=0",transport_str); /* Loop through the segments and find the disconnected ones */ ClearAllBits(connected,segmentsx->number); ClearAllBits(region ,segmentsx->number); for(i=0;inumber;i++) { index_t nregionsegments=0,nothersegments=0; distance_t total=0; SegmentX *segmentx; WayX *wayx; if(IsBitSet(connected,i)) goto endloop; segmentx=LookupSegmentX(segmentsx,i,1); if(IsPrunedSegmentX(segmentx)) goto endloop; if(segmentx->waynumber) wayx=LookupWayX(waysx,segmentx->way,1); else SlimFetch(newwaysx->fd,(wayx=&tmpwayx),sizeof(WayX),(segmentx->way-waysx->number)*sizeof(WayX)); if(!(wayx->way.allow&transports)) goto endloop; othersegments[nothersegments++]=i; SetBit(region,i); do { index_t thissegment,nodes[2]; thissegment=othersegments[--nothersegments]; if(nregionsegments==nallocregionsegments) regionsegments=(index_t*)realloc(regionsegments,(nallocregionsegments+=1024)*sizeof(index_t)); regionsegments[nregionsegments++]=thissegment; segmentx=LookupSegmentX(segmentsx,thissegment,1); nodes[0]=segmentx->node1; nodes[1]=segmentx->node2; total+=DISTANCE(segmentx->distance); for(j=0;j<2;j++) { NodeX *nodex=LookupNodeX(nodesx,nodes[j],1); if(!(nodex->allow&transports)) continue; segmentx=FirstSegmentX(segmentsx,nodes[j],1); while(segmentx) { index_t segment=IndexSegmentX(segmentsx,segmentx); if(segment!=thissegment) { if(segmentx->waynumber) wayx=LookupWayX(waysx,segmentx->way,1); else SlimFetch(newwaysx->fd,(wayx=&tmpwayx),sizeof(WayX),(segmentx->way-waysx->number)*sizeof(WayX)); if(wayx->way.allow&transports) { /* Already connected - finish */ if(IsBitSet(connected,segment)) { total=minimum; goto foundconnection; } /* Not in region - add to list */ if(!IsBitSet(region,segment)) { if(nothersegments==nallocothersegments) othersegments=(index_t*)realloc(othersegments,(nallocothersegments+=1024)*sizeof(index_t)); othersegments[nothersegments++]=segment; SetBit(region,segment); } } } segmentx=NextSegmentX(segmentsx,segmentx,nodes[j]); } } } while(nothersegments>0 && totalwaynumber) wayx=LookupWayX(waysx,segmentx->way,1); else SlimFetch(newwaysx->fd,(wayx=&tmpwayx),sizeof(WayX),(segmentx->way-waysx->number)*sizeof(WayX)); if(wayx->way.allow==transports) { prune_segment(segmentsx,segmentx); npruned++; } else { if(segmentx->waynumber) /* create a new way */ { tmpwayx=*wayx; tmpwayx.way.allow&=~transports; segmentx->way=waysx->number+newwaysx->number; SlimReplace(newwaysx->fd,&tmpwayx,sizeof(WayX),(segmentx->way-waysx->number)*sizeof(WayX)); newwaysx->number++; PutBackSegmentX(segmentsx,segmentx); } else /* modify the existing one */ { tmpwayx.way.allow&=~transports; SlimReplace(newwaysx->fd,&tmpwayx,sizeof(WayX),(segmentx->way-waysx->number)*sizeof(WayX)); } nadjusted++; } } } else /* connected - mark as part of the main region */ { for(j=0;jnumber,nadjusted,npruned,nregions); } /* Unmap from memory / close the files */ log_free(region); log_free(connected); free(region); free(connected); free(regionsegments); free(othersegments); #if !SLIM nodesx->data=UnmapFile(nodesx->data); segmentsx->data=UnmapFile(segmentsx->data); waysx->data=UnmapFile(waysx->data); #else nodesx->fd=SlimUnmapFile(nodesx->fd); segmentsx->fd=SlimUnmapFile(segmentsx->fd); waysx->fd=SlimUnmapFile(waysx->fd); #endif SlimUnmapFile(newwaysx->fd); waysx->number+=newwaysx->number; waysx->fd=OpenFileBufferedAppend(waysx->filename_tmp); newwaysx->fd=ReOpenFileBuffered(newwaysx->filename_tmp); while(!ReadFileBuffered(newwaysx->fd,&tmpwayx,sizeof(WayX))) WriteFileBuffered(waysx->fd,&tmpwayx,sizeof(WayX)); CloseFileBuffered(waysx->fd); CloseFileBuffered(newwaysx->fd); FreeWayList(newwaysx,0); } /*++++++++++++++++++++++++++++++++++++++ Prune out any segments that are shorter than a specified minimum. NodesX *nodesx The set of nodes to use. SegmentsX *segmentsx The set of segments to use. WaysX *waysx The set of ways to use. distance_t minimum The maximum length to remove or one less than the minimum length to keep. ++++++++++++++++++++++++++++++++++++++*/ void PruneShortSegments(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx,distance_t minimum) { index_t i; index_t nshort=0,npruned=0; if(nodesx->number==0 || segmentsx->number==0 || waysx->number==0) return; /* Print the start message */ printf_first("Pruning Short Segments: Segments=0 Short=0 Pruned=0"); /* Map into memory / open the files */ #if !SLIM nodesx->data=MapFileWriteable(nodesx->filename_tmp); segmentsx->data=MapFileWriteable(segmentsx->filename_tmp); waysx->data=MapFile(waysx->filename_tmp); #else nodesx->fd=SlimMapFileWriteable(nodesx->filename_tmp); segmentsx->fd=SlimMapFileWriteable(segmentsx->filename_tmp); waysx->fd=SlimMapFile(waysx->filename_tmp); InvalidateNodeXCache(nodesx->cache); InvalidateSegmentXCache(segmentsx->cache); InvalidateWayXCache(waysx->cache); #endif /* Loop through the segments and find the short ones for possible modification */ for(i=0;inumber;i++) { SegmentX *segmentx2=LookupSegmentX(segmentsx,i,2); if(IsPrunedSegmentX(segmentx2)) goto endloop; /* : Initial state: ..N3 -------- N2 : S2 : Final state: ..N3 : = OR = : : Initial state: ..N1 -------- N2 ---- N3 -------- N4.. : S1 S2 S3 : : : Final state: ..N1 ------------ N3 ------------ N4.. : S1 S3 : Not if N1 is the same as N4. Must not delete N2 (or N3) if S2 (or S3) has different one-way properties from S1. Must not delete N2 (or N3) if S2 (or S3) has different highway properties from S1. Must combine N2, S2 and N3 disallowed transports into new N3. Must not delete N2 (or N3) if it is a mini-roundabout. Must not delete N2 (or N3) if it is involved in a turn restriction. = OR = : : Initial state: ..N1 -------- N2 ---- N3.. : S1 S2 : : : Final state: ..N1 ------------ N3.. : S1 : Not if N1 is the same as N3. Not if S1 has different one-way properties from S2. Not if S1 has different highway properties from S2. Not if N2 disallows transports allowed on S1 and S2. Not if N2 is a mini-roundabout. Not if N2 is involved in a turn restriction. */ if(DISTANCE(segmentx2->distance)<=minimum) { index_t node1=NO_NODE,node2,node3,node4=NO_NODE; index_t segment1=NO_SEGMENT,segment2=i,segment3=NO_SEGMENT; SegmentX *segmentx; int segcount2=0,segcount3=0; nshort++; node2=segmentx2->node1; node3=segmentx2->node2; /* Count the segments connected to N2 */ segmentx=FirstSegmentX(segmentsx,node2,4); while(segmentx) { segcount2++; if(segment1==NO_SEGMENT) { index_t segment=IndexSegmentX(segmentsx,segmentx); if(segment!=segment2) { segment1=segment; node1=OtherNode(segmentx,node2); } } else if(segcount2>2) break; segmentx=NextSegmentX(segmentsx,segmentx,node2); } /* Count the segments connected to N3 */ segmentx=FirstSegmentX(segmentsx,node3,4); while(segmentx) { segcount3++; if(segment3==NO_SEGMENT) { index_t segment=IndexSegmentX(segmentsx,segmentx); if(segment!=segment2) { segment3=segment; node4=OtherNode(segmentx,node3); } } else if(segcount3>2) break; segmentx=NextSegmentX(segmentsx,segmentx,node3); } /* Check which case we are handling (and canonicalise) */ if(segcount2>2 && segcount3>2) /* none of the cases in diagram - too complicated */ { goto endloop; } else if(segcount2==1 || segcount3==1) /* first case in diagram - prune segment */ { prune_segment(segmentsx,segmentx2); } else if(segcount2==2 && segcount3==2) /* second case in diagram - modify one segment and prune segment */ { SegmentX *segmentx1,*segmentx3; WayX *wayx1,*wayx2,*wayx3; NodeX *nodex2,*nodex3,*newnodex; index_t newnode; int join12=1,join23=1,same13=1; /* Check if pruning would collapse a loop */ if(node1==node4) goto endloop; /* Check if allowed due to one-way properties */ segmentx1=LookupSegmentX(segmentsx,segment1,1); segmentx3=LookupSegmentX(segmentsx,segment3,3); if(!IsOneway(segmentx1) && !IsOneway(segmentx2)) ; else if(IsOneway(segmentx1) && IsOneway(segmentx2)) { if(IsOnewayTo(segmentx1,node2) && !IsOnewayFrom(segmentx2,node2)) /* S1 is one-way but S2 doesn't continue */ join12=0; if(IsOnewayFrom(segmentx1,node2) && !IsOnewayTo(segmentx2,node2)) /* S1 is one-way but S2 doesn't continue */ join12=0; } else join12=0; if(!IsOneway(segmentx3) && !IsOneway(segmentx2)) ; else if(IsOneway(segmentx3) && IsOneway(segmentx2)) { if(IsOnewayTo(segmentx3,node3) && !IsOnewayFrom(segmentx2,node3)) /* S3 is one-way but S2 doesn't continue */ join23=0; if(IsOnewayFrom(segmentx3,node3) && !IsOnewayTo(segmentx2,node3)) /* S3 is one-way but S2 doesn't continue */ join23=0; } else join23=0; if(!join12 && !join23) goto endloop; /* Check if allowed due to highway properties */ wayx1=LookupWayX(waysx,segmentx1->way,1); wayx2=LookupWayX(waysx,segmentx2->way,2); wayx3=LookupWayX(waysx,segmentx3->way,3); if(WaysCompare(&wayx1->way,&wayx2->way)) join12=0; if(WaysCompare(&wayx3->way,&wayx2->way)) join23=0; if(!join12 && !join23) goto endloop; /* Check if allowed due to mini-roundabout and turn restriction */ nodex2=LookupNodeX(nodesx,node2,2); nodex3=LookupNodeX(nodesx,node3,3); if(nodex2->flags&NODE_MINIRNDBT) join12=0; if(nodex3->flags&NODE_MINIRNDBT) join23=0; if(!join12 && !join23) goto endloop; if(nodex2->flags&NODE_TURNRSTRCT2 || nodex2->flags&NODE_TURNRSTRCT) join12=0; if(nodex3->flags&NODE_TURNRSTRCT2 || nodex3->flags&NODE_TURNRSTRCT) join23=0; if(!join12 && !join23) goto endloop; /* New node properties */ if(join12) { newnode=node3; newnodex=nodex3; } else /* if(join23) */ { newnode=node2; newnodex=nodex2; } newnodex->allow=nodex2->allow&nodex3->allow; /* combine the restrictions of the two nodes */ newnodex->allow&=~((~wayx2->way.allow)&wayx3->way.allow); /* disallow anything blocked by segment2 */ newnodex->allow&=~((~wayx2->way.allow)&wayx1->way.allow); /* disallow anything blocked by segment2 */ newnodex->latitude =(nodex2->latitude +nodex3->latitude )/2; newnodex->longitude=(nodex2->longitude+nodex3->longitude)/2; PutBackNodeX(nodesx,newnodex); /* Modify segments - update the distances */ if(!IsOneway(segmentx1) && !IsOneway(segmentx3)) ; else if(IsOneway(segmentx1) && IsOneway(segmentx3)) { if(IsOnewayTo(segmentx1,node3) && !IsOnewayFrom(segmentx3,node3)) /* S1 is one-way but S3 doesn't continue */ same13=0; if(IsOnewayFrom(segmentx1,node3) && !IsOnewayTo(segmentx3,node3)) /* S1 is one-way but S3 doesn't continue */ same13=0; } else same13=0; if(WaysCompare(&wayx1->way,&wayx3->way)) same13=0; if(same13) { segmentx1->distance+=DISTANCE(segmentx2->distance)/2; segmentx3->distance+=DISTANCE(segmentx2->distance)-DISTANCE(segmentx2->distance)/2; } else if(join12) segmentx1->distance+=DISTANCE(segmentx2->distance); else /* if(join23) */ segmentx3->distance+=DISTANCE(segmentx2->distance); /* Modify segments - update the segments */ if(segmentx1->node1==node1) { if(segmentx1->node2!=newnode) modify_segment(segmentsx,segmentx1,node1,newnode); else PutBackSegmentX(segmentsx,segmentx1); } else /* if(segmentx1->node2==node1) */ { if(segmentx1->node1!=newnode) modify_segment(segmentsx,segmentx1,newnode,node1); else PutBackSegmentX(segmentsx,segmentx1); } if(segmentx3->node1==node4) { if(segmentx3->node2!=newnode) modify_segment(segmentsx,segmentx3,node4,newnode); else PutBackSegmentX(segmentsx,segmentx3); } else /* if(segmentx3->node2==node4) */ { if(segmentx3->node1!=newnode) modify_segment(segmentsx,segmentx3,newnode,node4); else PutBackSegmentX(segmentsx,segmentx3); } ReLookupSegmentX(segmentsx,segmentx2); prune_segment(segmentsx,segmentx2); } else /* third case in diagram - prune one segment */ { SegmentX *segmentx1; WayX *wayx1,*wayx2; NodeX *nodex2; if(segcount3==2) /* not as in diagram, shuffle things round */ { index_t temp; temp=segment1; segment1=segment3; segment3=temp; temp=node1; node1=node4; node4=temp; temp=node2; node2=node3; node3=temp; } /* Check if pruning would collapse a loop */ if(node1==node3) goto endloop; /* Check if allowed due to one-way properties */ segmentx1=LookupSegmentX(segmentsx,segment1,1); if(!IsOneway(segmentx1) && !IsOneway(segmentx2)) ; else if(IsOneway(segmentx1) && IsOneway(segmentx2)) { if(IsOnewayTo(segmentx1,node2) && !IsOnewayFrom(segmentx2,node2)) /* S1 is one-way but S2 doesn't continue */ goto endloop; if(IsOnewayFrom(segmentx1,node2) && !IsOnewayTo(segmentx2,node2)) /* S1 is one-way but S2 doesn't continue */ goto endloop; } else goto endloop; /* Check if allowed due to highway properties */ wayx1=LookupWayX(waysx,segmentx1->way,1); wayx2=LookupWayX(waysx,segmentx2->way,2); if(WaysCompare(&wayx1->way,&wayx2->way)) goto endloop; /* Check if allowed due to mini-roundabout and turn restriction */ nodex2=LookupNodeX(nodesx,node2,2); if(nodex2->flags&NODE_MINIRNDBT) goto endloop; if(nodex2->flags&NODE_TURNRSTRCT2 || nodex2->flags&NODE_TURNRSTRCT) goto endloop; /* Check if allowed due to node restrictions */ if((nodex2->allow&wayx1->way.allow)!=wayx1->way.allow) goto endloop; if((nodex2->allow&wayx2->way.allow)!=wayx2->way.allow) goto endloop; /* Modify segments */ segmentx1->distance+=DISTANCE(segmentx2->distance); if(segmentx1->node1==node1) modify_segment(segmentsx,segmentx1,node1,node3); else /* if(segmentx1->node2==node1) */ modify_segment(segmentsx,segmentx1,node3,node1); ReLookupSegmentX(segmentsx,segmentx2); prune_segment(segmentsx,segmentx2); } npruned++; } endloop: if(!((i+1)%10000)) printf_middle("Pruning Short Segments: Segments=%"Pindex_t" Short=%"Pindex_t" Pruned=%"Pindex_t,i+1,nshort,npruned); } /* Unmap from memory / close the files */ #if !SLIM nodesx->data=UnmapFile(nodesx->data); segmentsx->data=UnmapFile(segmentsx->data); waysx->data=UnmapFile(waysx->data); #else nodesx->fd=SlimUnmapFile(nodesx->fd); segmentsx->fd=SlimUnmapFile(segmentsx->fd); waysx->fd=SlimUnmapFile(waysx->fd); #endif /* Print the final message */ printf_last("Pruned Short Segments: Segments=%"Pindex_t" Short=%"Pindex_t" Pruned=%"Pindex_t,segmentsx->number,nshort,npruned); } /*++++++++++++++++++++++++++++++++++++++ Prune out any nodes from straight highways where the introduced error is smaller than a specified maximum. NodesX *nodesx The set of nodes to use. SegmentsX *segmentsx The set of segments to use. WaysX *waysx The set of ways to use. distance_t maximum The maximum error to introduce. ++++++++++++++++++++++++++++++++++++++*/ void PruneStraightHighwayNodes(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx,distance_t maximum) { index_t i; index_t npruned=0; index_t nalloc; BitMask *checked; index_t *nodes,*segments; double *lats,*lons; double maximumf; if(nodesx->number==0 || segmentsx->number==0 || waysx->number==0) return; /* Print the start message */ printf_first("Pruning Straight Highway Nodes: Nodes=0 Pruned=0"); /* Map into memory / open the files */ #if !SLIM nodesx->data=MapFile(nodesx->filename_tmp); segmentsx->data=MapFileWriteable(segmentsx->filename_tmp); waysx->data=MapFile(waysx->filename_tmp); #else nodesx->fd=SlimMapFile(nodesx->filename_tmp); segmentsx->fd=SlimMapFileWriteable(segmentsx->filename_tmp); waysx->fd=SlimMapFile(waysx->filename_tmp); InvalidateNodeXCache(nodesx->cache); InvalidateSegmentXCache(segmentsx->cache); InvalidateWayXCache(waysx->cache); #endif checked=AllocBitMask(nodesx->number); log_malloc(checked,LengthBitMask(nodesx->number)*sizeof(BitMask)); logassert(checked,"Failed to allocate memory (try using slim mode?)"); /* Check AllocBitMask() worked */ nodes =(index_t*)malloc((nalloc=1024)*sizeof(index_t)); segments=(index_t*)malloc( nalloc *sizeof(index_t)); logassert(nodes ,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ logassert(segments,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ lats=(double*)malloc(nalloc*sizeof(double)); lons=(double*)malloc(nalloc*sizeof(double)); logassert(lats,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ logassert(lons,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ /* Loop through the nodes and find stretches of simple highway for possible modification */ maximumf=distance_to_km(maximum); for(i=0;inumber;i++) { int lowerbounded=0,upperbounded=0; index_t lower=nalloc/2,current=nalloc/2,upper=nalloc/2; if(IsBitSet(checked,i)) goto endloop; if(segmentsx->firstnode[i]==NO_SEGMENT) goto endloop; /* Find all connected nodes */ nodes[current]=i; do { index_t node1=NO_NODE,node2=NO_NODE; index_t segment1=NO_SEGMENT,segment2=NO_SEGMENT; index_t way1=NO_WAY,way2=NO_WAY; int segcount=0; NodeX *nodex; /* Get the node data */ nodex=LookupNodeX(nodesx,nodes[current],1); lats[current]=latlong_to_radians(nodex->latitude); lons[current]=latlong_to_radians(nodex->longitude); /* Count the segments at the node if not forced to be an end node */ if(IsBitSet(checked,nodes[current])) ; else if(nodex->flags&NODE_MINIRNDBT) ; else if(nodex->flags&NODE_TURNRSTRCT2 || nodex->flags&NODE_TURNRSTRCT) ; else { SegmentX *segmentx; /* Count the segments connected to the node */ segmentx=FirstSegmentX(segmentsx,nodes[current],3); while(segmentx) { segcount++; if(node1==NO_NODE) { segment1=IndexSegmentX(segmentsx,segmentx); node1=OtherNode(segmentx,nodes[current]); way1=segmentx->way; } else if(node2==NO_NODE) { segment2=IndexSegmentX(segmentsx,segmentx); node2=OtherNode(segmentx,nodes[current]); way2=segmentx->way; } else break; segmentx=NextSegmentX(segmentsx,segmentx,nodes[current]); } } /* Check if allowed due to one-way properties */ if(segcount==2) { SegmentX *segmentx1,*segmentx2; segmentx1=LookupSegmentX(segmentsx,segment1,1); segmentx2=LookupSegmentX(segmentsx,segment2,2); if(!IsOneway(segmentx1) && !IsOneway(segmentx2)) ; else if(IsOneway(segmentx1) && IsOneway(segmentx2)) { if(IsOnewayTo(segmentx1,nodes[current]) && !IsOnewayFrom(segmentx2,nodes[current])) /* S1 is one-way but S2 doesn't continue */ segcount=0; if(IsOnewayFrom(segmentx1,nodes[current]) && !IsOnewayTo(segmentx2,nodes[current])) /* S1 is one-way but S2 doesn't continue */ segcount=0; } else segcount=0; } /* Check if allowed due to highway properties and node restrictions */ if(segcount==2) { WayX *wayx1,*wayx2; wayx1=LookupWayX(waysx,way1,1); wayx2=LookupWayX(waysx,way2,2); if(WaysCompare(&wayx1->way,&wayx2->way)) segcount=0; if(wayx1->way.name!=wayx2->way.name) segcount=0; if((nodex->allow&wayx1->way.allow)!=wayx1->way.allow) segcount=0; if((nodex->allow&wayx2->way.allow)!=wayx2->way.allow) segcount=0; } /* Update the lists */ if(segcount==2) { /* Make space in the lists */ if(upper==(nalloc-1)) { nodes =(index_t*)realloc(nodes ,(nalloc+=1024)*sizeof(index_t)); segments=(index_t*)realloc(segments, nalloc *sizeof(index_t)); lats=(double*)realloc(lats,nalloc*sizeof(double)); lons=(double*)realloc(lons,nalloc*sizeof(double)); } if(lower==0) /* move everything up by one */ { memmove(nodes+1 ,nodes ,(1+upper-lower)*sizeof(index_t)); memmove(segments+1,segments,(1+upper-lower)*sizeof(index_t)); memmove(lats+1,lats,(1+upper-lower)*sizeof(double)); memmove(lons+1,lons,(1+upper-lower)*sizeof(double)); current++; lower++; upper++; } if(lower==upper) /* first */ { lower--; nodes[lower]=node1; segments[lower]=segment1; upper++; nodes[upper]=node2; segments[upper-1]=segment2; segments[upper]=NO_SEGMENT; current--; } else if(current==lower) { lower--; if(nodes[current+1]==node2) { nodes[lower]=node1; segments[lower]=segment1; } else /* if(nodes[current+1]==node1) */ { nodes[lower]=node2; segments[lower]=segment2; } current--; } else /* if(current==upper) */ { upper++; if(nodes[current-1]==node2) { nodes[upper]=node1; segments[upper-1]=segment1; } else /* if(nodes[current-1]==node1) */ { nodes[upper]=node2; segments[upper-1]=segment2; } segments[upper]=NO_SEGMENT; current++; } if(nodes[upper]==nodes[lower]) { if(!lowerbounded && !upperbounded) { nodex=LookupNodeX(nodesx,nodes[lower],1); lats[lower]=latlong_to_radians(nodex->latitude); lons[lower]=latlong_to_radians(nodex->longitude); } lats[upper]=lats[lower]; lons[upper]=lons[lower]; lowerbounded=1; upperbounded=1; } } else /* if(segment!=2) */ { if(current==upper) upperbounded=1; if(current==lower) { lowerbounded=1; current=upper; } } } while(!(lowerbounded && upperbounded)); /* Mark the nodes */ for(current=lower;current<=upper;current++) SetBit(checked,nodes[current]); /* Check for straight highway */ for(;lower<(upper-1);lower++) { for(current=upper;current>(lower+1);current--) { SegmentX *segmentx; distance_t dist=0; double dist1,dist2,dist3,distp; index_t c; dist3=distance(lats[lower],lons[lower],lats[current],lons[current]); for(c=lower+1;c=0 && dist3b>=0) distp=sqrt(dist1*dist1-dist3a*dist3a); else if(dist3a>0) distp=dist2; else /* if(dist3b>0) */ distp=dist1; } if(distp>maximumf) /* gone too far */ break; } if(cdistance); prune_segment(segmentsx,segmentx); npruned++; } segmentx=LookupSegmentX(segmentsx,segments[lower],1); if(nodes[lower]==nodes[current]) /* loop; all within maximum distance */ { prune_segment(segmentsx,segmentx); npruned++; } else { segmentx->distance+=dist; if(segmentx->node1==nodes[lower]) modify_segment(segmentsx,segmentx,nodes[lower],nodes[current]); else /* if(segmentx->node2==nodes[lower]) */ modify_segment(segmentsx,segmentx,nodes[current],nodes[lower]); } lower=current-1; break; } } endloop: if(!((i+1)%10000)) printf_middle("Pruning Straight Highway Nodes: Nodes=%"Pindex_t" Pruned=%"Pindex_t,i+1,npruned); } /* Unmap from memory / close the files */ log_free(checked); free(checked); free(nodes); free(segments); free(lats); free(lons); #if !SLIM nodesx->data=UnmapFile(nodesx->data); segmentsx->data=UnmapFile(segmentsx->data); waysx->data=UnmapFile(waysx->data); #else nodesx->fd=SlimUnmapFile(nodesx->fd); segmentsx->fd=SlimUnmapFile(segmentsx->fd); waysx->fd=SlimUnmapFile(waysx->fd); #endif /* Print the final message */ printf_last("Pruned Straight Highway Nodes: Nodes=%"Pindex_t" Pruned=%"Pindex_t,nodesx->number,npruned); } /*++++++++++++++++++++++++++++++++++++++ Prune a segment; unused nodes and ways will get marked for pruning later. SegmentsX *segmentsx The set of segments to use. SegmentX *segmentx The segment to be pruned. ++++++++++++++++++++++++++++++++++++++*/ static void prune_segment(SegmentsX *segmentsx,SegmentX *segmentx) { unlink_segment_node1_refs(segmentsx,segmentx); unlink_segment_node2_refs(segmentsx,segmentx); segmentx->node1=NO_NODE; segmentx->node2=NO_NODE; segmentx->next2=NO_SEGMENT; PutBackSegmentX(segmentsx,segmentx); } /*++++++++++++++++++++++++++++++++++++++ Modify a segment's nodes; unused nodes will get marked for pruning later. SegmentsX *segmentsx The set of segments to use. SegmentX *segmentx The segment to be modified. index_t newnode1 The new value of node1. index_t newnode2 The new value of node2. ++++++++++++++++++++++++++++++++++++++*/ static void modify_segment(SegmentsX *segmentsx,SegmentX *segmentx,index_t newnode1,index_t newnode2) { index_t thissegment=IndexSegmentX(segmentsx,segmentx); if(newnode1>newnode2) /* rotate the segment around */ { index_t temp; if(segmentx->distance&(ONEWAY_2TO1|ONEWAY_1TO2)) segmentx->distance^=ONEWAY_2TO1|ONEWAY_1TO2; temp=newnode1; newnode1=newnode2; newnode2=temp; } if(newnode1!=segmentx->node1) unlink_segment_node1_refs(segmentsx,segmentx); if(newnode2!=segmentx->node2) unlink_segment_node2_refs(segmentsx,segmentx); if(newnode1!=segmentx->node1) /* only modify it if the node has changed */ { segmentx->node1=newnode1; segmentsx->next1[thissegment]=segmentsx->firstnode[newnode1]; segmentsx->firstnode[newnode1]=thissegment; } if(newnode2!=segmentx->node2) /* only modify it if the node has changed */ { segmentx->node2=newnode2; segmentx->next2=segmentsx->firstnode[newnode2]; segmentsx->firstnode[newnode2]=thissegment; } PutBackSegmentX(segmentsx,segmentx); } /*++++++++++++++++++++++++++++++++++++++ Unlink a node1 from a segment by modifying the linked list type arrangement of node references. SegmentsX *segmentsx The set of segments to use. SegmentX *segmentx The segment to be modified. ++++++++++++++++++++++++++++++++++++++*/ static void unlink_segment_node1_refs(SegmentsX *segmentsx,SegmentX *segmentx) { index_t segment,thissegment; thissegment=IndexSegmentX(segmentsx,segmentx); segment=segmentsx->firstnode[segmentx->node1]; if(segment==thissegment) segmentsx->firstnode[segmentx->node1]=segmentsx->next1[thissegment]; else { do { index_t nextsegment; SegmentX *segx=LookupSegmentX(segmentsx,segment,4); if(segx->node1==segmentx->node1) { nextsegment=segmentsx->next1[segment]; if(nextsegment==thissegment) segmentsx->next1[segment]=segmentsx->next1[thissegment]; } else /* if(segx->node2==segmentx->node1) */ { nextsegment=segx->next2; if(nextsegment==thissegment) { segx->next2=segmentsx->next1[thissegment]; PutBackSegmentX(segmentsx,segx); } } segment=nextsegment; } while(segment!=thissegment && segment!=NO_SEGMENT); } } /*++++++++++++++++++++++++++++++++++++++ Unlink a node2 from a segment by modifying the linked list type arrangement of node references. SegmentsX *segmentsx The set of segments to use. SegmentX *segmentx The segment to be modified. ++++++++++++++++++++++++++++++++++++++*/ static void unlink_segment_node2_refs(SegmentsX *segmentsx,SegmentX *segmentx) { index_t segment,thissegment; thissegment=IndexSegmentX(segmentsx,segmentx); segment=segmentsx->firstnode[segmentx->node2]; if(segment==thissegment) segmentsx->firstnode[segmentx->node2]=segmentx->next2; else { do { index_t nextsegment; SegmentX *segx=LookupSegmentX(segmentsx,segment,4); if(segx->node1==segmentx->node2) { nextsegment=segmentsx->next1[segment]; if(nextsegment==thissegment) segmentsx->next1[segment]=segmentx->next2; } else /* if(segx->node2==segmentx->node2) */ { nextsegment=segx->next2; if(nextsegment==thissegment) { segx->next2=segmentx->next2; PutBackSegmentX(segmentsx,segx); } } segment=nextsegment; } while(segment!=thissegment && segment!=NO_SEGMENT); } } /*++++++++++++++++++++++++++++++++++++++ Calculate the distance between two locations. double distance Returns the distance between the locations. double lat1 The latitude of the first location. double lon1 The longitude of the first location. double lat2 The latitude of the second location. double lon2 The longitude of the second location. ++++++++++++++++++++++++++++++++++++++*/ static double distance(double lat1,double lon1,double lat2,double lon2) { double dlon = lon1 - lon2; double dlat = lat1 - lat2; double a1,a2,a,sa,c,d; if(dlon==0 && dlat==0) return 0; a1 = sin (dlat / 2); a2 = sin (dlon / 2); a = (a1 * a1) + cos (lat1) * cos (lat2) * a2 * a2; sa = sqrt (a); if (sa <= 1.0) {c = 2 * asin (sa);} else {c = 2 * asin (1.0);} d = 6378.137 * c; return(d); } routino-3.2/src/test/ 40755 233 144 0 12777457353 10003 5routino-3.2/src/test/a-b-c.sh 755 233 144 5213 12563633052 11217 0#!/bin/sh # Exit on error set -e # Test name name=`basename $0 .sh` # Slim or non-slim if [ "$1" = "slim" ]; then slim="-slim" dir="slim" else slim="" dir="fat" fi # Libroutino or not libroutino LD_LIBRARY_PATH=$PWD/..:$LD_LIBRARY_PATH export LD_LIBRARY_PATH if [ "$2" = "lib" ]; then lib="+lib" else lib="" fi # Pruned or non-pruned if [ "$2" = "prune" ]; then prune="" pruned="-pruned" else prune="--prune-none" pruned="" fi # Create the output directory dir="$dir$lib$pruned" [ -d $dir ] || mkdir $dir # Run the programs under a run-time debugger debugger=valgrind debugger= # Name related options osm=$name.osm log=$name$lib$slim$pruned.log option_prefix="--prefix=$name" option_dir="--dir=$dir" # Generic program options option_planetsplitter="--loggable --tagging=../../xml/routino-tagging.xml --errorlog $prune" option_filedumper="--dump-osm" option_router="--profile=motorcar --profiles=../../xml/routino-profiles.xml --translations=copyright.xml" if [ ! "$2" = "lib" ]; then option_router="$option_router --loggable" fi # Run planetsplitter echo "Running planetsplitter" echo ../planetsplitter$slim $option_dir $option_prefix $option_planetsplitter $osm > $log $debugger ../planetsplitter$slim $option_dir $option_prefix $option_planetsplitter $osm >> $log # Run filedumper echo "Running filedumper" echo ../filedumper$slim $option_dir $option_prefix $option_filedumper >> $log $debugger ../filedumper$slim $option_dir $option_prefix $option_filedumper > $dir/$osm # Waypoints waypoints=`perl waypoints.pl $osm list` # Run the router for each waypoint for waypoint in $waypoints; do case $waypoint in *a) waypoint=`echo $waypoint | sed -e 's%a$%%'` ;; *) continue ;; esac echo "Running router : $waypoint" waypoint_a=`perl waypoints.pl $osm ${waypoint}a 1` waypoint_b=`perl waypoints.pl $osm ${waypoint}b 2` waypoint_c=`perl waypoints.pl $osm ${waypoint}c 3` [ -d $dir/$name-$waypoint ] || mkdir $dir/$name-$waypoint echo ../router$lib$slim $option_dir $option_prefix $option_osm $option_router $waypoint_a $waypoint_b $waypoint_c >> $log $debugger ../router$lib$slim $option_dir $option_prefix $option_osm $option_router $waypoint_a $waypoint_b $waypoint_c >> $log mv shortest* $dir/$name-$waypoint echo diff -u expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt >> $log if ./is-fast-math; then diff -U 0 expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt | 2>&1 egrep '^[-+] ' || true else diff -u expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt >> $log fi done routino-3.2/src/test/oneway-loop.sh 777 233 144 0 12064636362 15632 2start-1-finish.shroutino-3.2/src/test/loops.osm 644 233 144 16247 12064636362 11711 0 routino-3.2/src/test/invalid-turn-relations.osm 644 233 144 22476 12105426741 15162 0 routino-3.2/src/test/loop-and-reverse.sh 755 233 144 5463 12610443743 13530 0#!/bin/sh # Exit on error set -e # Test name name=`basename $0 .sh` # Slim or non-slim if [ "$1" = "slim" ]; then slim="-slim" dir="slim" else slim="" dir="fat" fi # Libroutino or not libroutino LD_LIBRARY_PATH=$PWD/..:$LD_LIBRARY_PATH export LD_LIBRARY_PATH if [ "$2" = "lib" ]; then lib="+lib" else lib="" fi # Pruned or non-pruned if [ "$2" = "prune" ]; then prune="" pruned="-pruned" else prune="--prune-none" pruned="" fi # Create the output directory dir=$dir$lib$pruned [ -d $dir ] || mkdir $dir # Run the programs under a run-time debugger debugger=valgrind debugger= # Name related options osm=$name.osm log=$name$lib$slim$pruned.log option_prefix="--prefix=$name" option_dir="--dir=$dir" # Generic program options option_planetsplitter="--loggable --tagging=../../xml/routino-tagging.xml --errorlog $prune" option_filedumper="--dump-osm" option_router="--profile=motorcar --profiles=../../xml/routino-profiles.xml --translations=copyright.xml" if [ ! "$2" = "lib" ]; then option_router="$option_router --loggable" fi # Run planetsplitter echo "Running planetsplitter" echo ../planetsplitter$slim $option_dir $option_prefix $option_planetsplitter $osm > $log $debugger ../planetsplitter$slim $option_dir $option_prefix $option_planetsplitter $osm >> $log # Run filedumper echo "Running filedumper" echo ../filedumper$slim $option_dir $option_prefix $option_filedumper >> $log $debugger ../filedumper$slim $option_dir $option_prefix $option_filedumper > $dir/$osm # Waypoints waypoints=`perl waypoints.pl $osm list` waypoint_start=`perl waypoints.pl $osm WPstart 1` waypoint_middle=`perl waypoints.pl $osm WPmiddle 2` waypoint_finish=`perl waypoints.pl $osm WPfinish 3` # Run the router for each loop and reverse option for waypoint in WP WP-L WP-R WP-LR; do echo "Running router : $waypoint" [ -d $dir/$name-$waypoint ] || mkdir $dir/$name-$waypoint option_loop="" option_reverse="" case $waypoint in *L*) option_loop="--loop" ;; esac case $waypoint in *R*) option_reverse="--reverse" ;; esac echo ../router$lib$slim $option_dir $option_prefix $option_osm $option_router $option_loop $option_reverse $waypoint_start $waypoint_middle $waypoint_finish >> $log $debugger ../router$lib$slim $option_dir $option_prefix $option_osm $option_router $option_loop $option_reverse $waypoint_start $waypoint_middle $waypoint_finish >> $log mv shortest* $dir/$name-$waypoint echo diff -u expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt >> $log if ./is-fast-math; then diff -U 0 expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt | 2>&1 egrep '^[-+] ' || true else diff -u expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt >> $log fi done routino-3.2/src/test/super-or-not.sh 777 233 144 0 12064636362 13621 2a-b.shroutino-3.2/src/test/loop-and-reverse.osm 644 233 144 7304 12606772336 13715 0 routino-3.2/src/test/waypoints.pl 755 233 144 3443 12306670127 12400 0#!/usr/bin/perl # # Routing test case generator tool. # # Part of the Routino routing software. # # This file Copyright 2011-2014 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use strict; # Command line if($#ARGV<1 || $ARGV>2 || ! -f $ARGV[0]) { die "Usage: waypoints.pl list\n". " waypoints.pl \n"; } # Parse the file open(FILE,"<$ARGV[0]") || die "Cannot open '$ARGV[0]'\n"; my %waypoints=(); my @waypoints=(); my @waypoint_lat=(); my @waypoint_lon=(); my $innode=0; while() { if($innode) { if(m%%); } elsif(m%%) { $innode=1; push(@waypoint_lat,$1); push(@waypoint_lon,$2); } } close(FILE); # Perform the action if($ARGV[1] eq "list") { print join(" ",sort @waypoints)."\n"; exit 0; } if($waypoints{$ARGV[1]} ne "") { print "--lat$ARGV[2]=$waypoint_lat[$waypoints{$ARGV[1]}] --lon$ARGV[2]=$waypoint_lon[$waypoints{$ARGV[1]}]\n"; exit 0; } exit 1; routino-3.2/src/test/node-restrictions.osm 644 233 144 16636 12114366273 14227 0 routino-3.2/src/test/node-restrictions.sh 777 233 144 0 12064636362 17034 2start-1-finish.shroutino-3.2/src/test/cycle-both-ways.sh 777 233 144 0 12327512664 16030 2cycle-drive.shroutino-3.2/src/test/coincident-waypoint.sh 777 233 144 0 12333356554 15700 2a-b-c-d.shroutino-3.2/src/test/dead-ends.sh 777 233 144 0 12064636362 15205 2start-1-finish.shroutino-3.2/src/test/loops.sh 777 233 144 0 12064636362 14515 2start-1-finish.shroutino-3.2/src/test/run-tests.sh 755 233 144 3205 12563633052 12303 0#!/bin/sh status=true run_a_test () { script=$1 shift if ./$script $@ ; then echo "... passed" else echo "... FAILED" status=false fi } compare_results () { if diff -q -r $1 $2; then echo "... matched" else echo "... match FAILED" status=false fi } # Initial informational message echo "" ./is-fast-math message # Loop round the different test types for type in 1 2 3; do case $type in 1) suffix="" arg="" description="" ;; 2) suffix="+lib" arg="lib" description="libroutino" ;; 3) suffix="-pruned" arg="prune" description="pruned" ;; esac # Normal mode for script in $@; do echo "" echo "Testing: $script (non-slim, $description) ... " run_a_test $script fat $arg done # Normal mode for script in $@; do echo "" echo "Testing: $script (slim, $description) ... " run_a_test $script slim $arg done # Check results if $status; then echo "Success: all tests passed" else echo "Warning: Some tests FAILED" exit 1 fi # Compare normal/slim results echo "" echo "Comparing: slim and non-slim results ($description) ... " compare_results fat$suffix slim$suffix # Check comparison if $status; then echo "Success: slim and non-slim results match" else echo "Warning: slim and non-slim results are different" exit 1 fi done exit 0 routino-3.2/src/test/prune-short.sh 777 233 144 0 12114364765 15211 2only-split.shroutino-3.2/src/test/prune-short.osm 644 233 144 65656 12114416166 13045 0 routino-3.2/src/test/super-or-not.osm 644 233 144 7676 12635017361 13111 0 routino-3.2/src/test/prune-straight.osm 644 233 144 20500 12327506436 13514 0 routino-3.2/src/test/cycle-drive.sh 755 233 144 5151 12563633052 12547 0#!/bin/sh # Exit on error set -e # Test name name=`basename $0 .sh` # Slim or non-slim if [ "$1" = "slim" ]; then slim="-slim" dir="slim" else slim="" dir="fat" fi # Libroutino or not libroutino LD_LIBRARY_PATH=$PWD/..:$LD_LIBRARY_PATH export LD_LIBRARY_PATH if [ "$2" = "lib" ]; then lib="+lib" else lib="" fi # Pruned or non-pruned if [ "$2" = "prune" ]; then prune="" pruned="-pruned" else prune="--prune-none" pruned="" fi # Create the output directory dir=$dir$lib$pruned [ -d $dir ] || mkdir $dir # Run the programs under a run-time debugger debugger=valgrind debugger= # Name related options osm=$name.osm log=$name$lib$slim$pruned.log option_prefix="--prefix=$name" option_dir="--dir=$dir" # Generic program options option_planetsplitter="--loggable --tagging=../../xml/routino-tagging.xml --errorlog $prune" option_filedumper="--dump-osm" option_router="--profiles=../../xml/routino-profiles.xml --translations=copyright.xml" if [ ! "$2" = "lib" ]; then option_router="$option_router --loggable" fi # Run planetsplitter echo "Running planetsplitter" echo ../planetsplitter$slim $option_dir $option_prefix $option_planetsplitter $osm > $log $debugger ../planetsplitter$slim $option_dir $option_prefix $option_planetsplitter $osm >> $log # Run filedumper echo "Running filedumper" echo ../filedumper$slim $option_dir $option_prefix $option_filedumper >> $log $debugger ../filedumper$slim $option_dir $option_prefix $option_filedumper > $dir/$osm # Waypoints waypoints=`perl waypoints.pl $osm list` waypoint_start=`perl waypoints.pl $osm WPstart 1` waypoint_finish=`perl waypoints.pl $osm WPfinish 2` # Run the router for each profile type profiles="motorcar bicycle" for profile in $profiles; do case $profile in motorcar) waypoint=WP01 ;; *) waypoint=WP02 ;; esac echo "Running router : $waypoint" [ -d $dir/$name-$waypoint ] || mkdir $dir/$name-$waypoint echo ../router$lib$slim $option_dir $option_prefix $option_osm $option_router --profile=$profile $waypoint_start $waypoint_finish >> $log $debugger ../router$lib$slim $option_dir $option_prefix $option_osm $option_router --profile=$profile $waypoint_start $waypoint_finish >> $log mv shortest* $dir/$name-$waypoint echo diff -u expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt >> $log if ./is-fast-math; then diff -U 0 expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt | 2>&1 egrep '^[-+] ' || true else diff -u expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt >> $log fi done routino-3.2/src/test/a-b-c-d.sh 755 233 144 5330 12563633052 11440 0#!/bin/sh # Exit on error set -e # Test name name=`basename $0 .sh` # Slim or non-slim if [ "$1" = "slim" ]; then slim="-slim" dir="slim" else slim="" dir="fat" fi # Libroutino or not libroutino LD_LIBRARY_PATH=$PWD/..:$LD_LIBRARY_PATH export LD_LIBRARY_PATH if [ "$2" = "lib" ]; then lib="+lib" else lib="" fi # Pruned or non-pruned if [ "$2" = "prune" ]; then prune="" pruned="-pruned" else prune="--prune-none" pruned="" fi # Create the output directory dir=$dir$lib$pruned [ -d $dir ] || mkdir $dir # Run the programs under a run-time debugger debugger=valgrind debugger= # Name related options osm=$name.osm log=$name$slim$lib$pruned.log option_prefix="--prefix=$name" option_dir="--dir=$dir" # Generic program options option_planetsplitter="--loggable --tagging=../../xml/routino-tagging.xml --errorlog $prune" option_filedumper="--dump-osm" option_router="--profile=motorcar --profiles=../../xml/routino-profiles.xml --translations=copyright.xml" if [ ! "$2" = "lib" ]; then option_router="$option_router --loggable" fi # Run planetsplitter echo "Running planetsplitter" echo ../planetsplitter$slim $option_dir $option_prefix $option_planetsplitter $osm > $log $debugger ../planetsplitter$slim $option_dir $option_prefix $option_planetsplitter $osm >> $log # Run filedumper echo "Running filedumper" echo ../filedumper$slim $option_dir $option_prefix $option_filedumper >> $log $debugger ../filedumper$slim $option_dir $option_prefix $option_filedumper > $dir/$osm # Waypoints waypoints=`perl waypoints.pl $osm list` # Run the router for each waypoint for waypoint in $waypoints; do case $waypoint in *a) waypoint=`echo $waypoint | sed -e 's%a$%%'` ;; *) continue ;; esac echo "Running router : $waypoint" waypoint_a=`perl waypoints.pl $osm ${waypoint}a 1` waypoint_b=`perl waypoints.pl $osm ${waypoint}b 2` waypoint_c=`perl waypoints.pl $osm ${waypoint}c 3` waypoint_d=`perl waypoints.pl $osm ${waypoint}d 4` [ -d $dir/$name-$waypoint ] || mkdir $dir/$name-$waypoint echo ../router$lib$slim $option_dir $option_prefix $option_osm $option_router $waypoint_a $waypoint_b $waypoint_c $waypoint_d >> $log $debugger ../router$lib$slim $option_dir $option_prefix $option_osm $option_router $waypoint_a $waypoint_b $waypoint_c $waypoint_d >> $log mv shortest* $dir/$name-$waypoint echo diff -u expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt >> $log if ./is-fast-math; then diff -U 0 expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt | 2>&1 egrep '^[-+] ' || true else diff -u expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt >> $log fi done routino-3.2/src/test/dead-ends.osm 644 233 144 16570 12326256227 12377 0 routino-3.2/src/test/fake-node-with-loop.osm 644 233 144 10546 12327506445 14322 0 routino-3.2/src/test/is-fast-math.c 644 233 144 450 12154147145 12417 0#include int main(int argc,char **argv) { #ifdef __FAST_MATH__ if(argc>1) printf("Compiled with -ffast-math => results may differ slightly.\n"); return 0; #else if(argc>1) printf("Not compiled with -ffast-math => results should match exactly.\n"); return 1; #endif } routino-3.2/src/test/a-b.sh 755 233 144 5074 12563633052 11004 0#!/bin/sh # Exit on error set -e # Test name name=`basename $0 .sh` # Slim or non-slim if [ "$1" = "slim" ]; then slim="-slim" dir="slim" else slim="" dir="fat" fi # Libroutino or not libroutino LD_LIBRARY_PATH=$PWD/..:$LD_LIBRARY_PATH export LD_LIBRARY_PATH if [ "$2" = "lib" ]; then lib="+lib" else lib="" fi # Pruned or non-pruned if [ "$2" = "prune" ]; then prune="" pruned="-pruned" else prune="--prune-none" pruned="" fi # Create the output directory dir="$dir$lib$pruned" [ -d $dir ] || mkdir $dir # Run the programs under a run-time debugger debugger=valgrind debugger= # Name related options osm=$name.osm log=$name$lib$slim$pruned.log option_prefix="--prefix=$name" option_dir="--dir=$dir" # Generic program options option_planetsplitter="--loggable --tagging=../../xml/routino-tagging.xml --errorlog $prune" option_filedumper="--dump-osm" option_router="--profile=motorcar --profiles=../../xml/routino-profiles.xml --translations=copyright.xml" if [ ! "$2" = "lib" ]; then option_router="$option_router --loggable" fi # Run planetsplitter echo "Running planetsplitter" echo ../planetsplitter$slim $option_dir $option_prefix $option_planetsplitter $osm > $log $debugger ../planetsplitter$slim $option_dir $option_prefix $option_planetsplitter $osm >> $log # Run filedumper echo "Running filedumper" echo ../filedumper$slim $option_dir $option_prefix $option_filedumper >> $log $debugger ../filedumper$slim $option_dir $option_prefix $option_filedumper > $dir/$osm # Waypoints waypoints=`perl waypoints.pl $osm list` # Run the router for each waypoint for waypoint in $waypoints; do case $waypoint in *a) waypoint=`echo $waypoint | sed -e 's%a$%%'` ;; *) continue ;; esac echo "Running router : $waypoint" waypoint_a=`perl waypoints.pl $osm ${waypoint}a 1` waypoint_b=`perl waypoints.pl $osm ${waypoint}b 2` [ -d $dir/$name-$waypoint ] || mkdir $dir/$name-$waypoint echo ../router$lib$slim $option_dir $option_prefix $option_osm $option_router $waypoint_a $waypoint_b >> $log $debugger ../router$lib$slim $option_dir $option_prefix $option_osm $option_router $waypoint_a $waypoint_b >> $log mv shortest* $dir/$name-$waypoint echo diff -u expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt >> $log if ./is-fast-math; then diff -U 0 expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt | 2>&1 egrep '^[-+] ' || true else diff -u expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt >> $log fi done routino-3.2/src/test/prune-straight.sh 777 233 144 0 12114436047 15670 2only-split.shroutino-3.2/src/test/Makefile 644 233 144 3070 12601523460 11432 0# Test cases Makefile # # Part of the Routino routing software. # # This file Copyright 2011-2015 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # All configuration is in the top-level Makefile.conf include ../../Makefile.conf # executables EXE=is-fast-math$(.EXE) # Compilation targets O=$(notdir $(wildcard *.osm)) S=$(foreach f,$(O),$(addsuffix .sh,$(basename $f))) ######## all : ######## test : test-exe $(EXE) @./run-tests.sh $(S) ######## test-exe : cd .. && $(MAKE) all-exe all-lib is-fast-math$(.EXE) : is-fast-math.o $(LD) $< -o $@ $(LDFLAGS) is-fast-math.o : is-fast-math.c $(CC) -c $(CFLAGS) $< -o $@ ######## install: ######## clean: rm -rf fat rm -rf slim rm -rf fat+lib rm -rf slim+lib rm -rf fat-pruned rm -rf slim-pruned rm -f *.log rm -f *~ rm -f *.o rm -f $(EXE) rm -f core rm -f *.gcda *.gcno *.gcov gmon.out ######## distclean: clean ######## .PHONY:: all test install clean distclean .PHONY:: test-exe routino-3.2/src/test/copyright.xml 644 233 144 2406 12563645242 12540 0 routino-3.2/src/test/start-1-finish.sh 755 233 144 5203 12563633052 13110 0#!/bin/sh # Exit on error set -e # Test name name=`basename $0 .sh` # Slim or non-slim if [ "$1" = "slim" ]; then slim="-slim" dir="slim" else slim="" dir="fat" fi # Libroutino or not libroutino LD_LIBRARY_PATH=$PWD/..:$LD_LIBRARY_PATH export LD_LIBRARY_PATH if [ "$2" = "lib" ]; then lib="+lib" else lib="" fi # Pruned or non-pruned if [ "$2" = "prune" ]; then prune="" pruned="-pruned" else prune="--prune-none" pruned="" fi # Create the output directory dir=$dir$lib$pruned [ -d $dir ] || mkdir $dir # Run the programs under a run-time debugger debugger=valgrind debugger= # Name related options osm=$name.osm log=$name$lib$slim$pruned.log option_prefix="--prefix=$name" option_dir="--dir=$dir" # Generic program options option_planetsplitter="--loggable --tagging=../../xml/routino-tagging.xml --errorlog $prune" option_filedumper="--dump-osm" option_router="--profile=motorcar --profiles=../../xml/routino-profiles.xml --translations=copyright.xml" if [ ! "$2" = "lib" ]; then option_router="$option_router --loggable" fi # Run planetsplitter echo "Running planetsplitter" echo ../planetsplitter$slim $option_dir $option_prefix $option_planetsplitter $osm > $log $debugger ../planetsplitter$slim $option_dir $option_prefix $option_planetsplitter $osm >> $log # Run filedumper echo "Running filedumper" echo ../filedumper$slim $option_dir $option_prefix $option_filedumper >> $log $debugger ../filedumper$slim $option_dir $option_prefix $option_filedumper > $dir/$osm # Waypoints waypoints=`perl waypoints.pl $osm list` waypoint_start=`perl waypoints.pl $osm WPstart 1` waypoint_finish=`perl waypoints.pl $osm WPfinish 3` # Run the router for each waypoint for waypoint in $waypoints; do [ ! $waypoint = "WPstart" ] || continue [ ! $waypoint = "WPfinish" ] || continue echo "Running router : $waypoint" waypoint_test=`perl waypoints.pl $osm $waypoint 2` [ -d $dir/$name-$waypoint ] || mkdir $dir/$name-$waypoint echo ../router$lib$slim $option_dir $option_prefix $option_osm $option_router $waypoint_start $waypoint_test $waypoint_finish >> $log $debugger ../router$lib$slim $option_dir $option_prefix $option_osm $option_router $waypoint_start $waypoint_test $waypoint_finish >> $log mv shortest* $dir/$name-$waypoint echo diff -u expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt >> $log if ./is-fast-math; then diff -U 0 expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt | 2>&1 egrep '^[-+] ' || true else diff -u expected/$name-$waypoint.txt $dir/$name-$waypoint/shortest-all.txt >> $log fi done routino-3.2/src/test/cycle-both-ways.osm 644 233 144 10655 12327513605 13560 0 routino-3.2/src/test/only-split.sh 755 233 144 3111 12563633052 12445 0#!/bin/sh # Exit on error set -e # Test name name=`basename $0 .sh` # Slim or non-slim if [ "$1" = "slim" ]; then slim="-slim" dir="slim" else slim="" dir="fat" fi # Libroutino or not libroutino LD_LIBRARY_PATH=$PWD/..:$LD_LIBRARY_PATH export LD_LIBRARY_PATH if [ "$2" = "lib" ]; then lib="+lib" else lib="" fi # Pruned or non-pruned if [ "$2" = "prune" ]; then case $name in prune-isolated) prune="--prune-none --prune-isolated=100";; prune-short) prune="--prune-none --prune-short=5";; prune-straight) prune="--prune-none --prune-straight=5";; *) prune="";; esac pruned="-pruned" else prune="--prune-none" pruned="" fi # Create the output directory dir=$dir$lib$pruned [ -d $dir ] || mkdir $dir # Run the programs under a run-time debugger debugger=valgrind debugger= # Name related options osm=$name.osm log=$name$lib$slim$pruned.log option_prefix="--prefix=$name" option_dir="--dir=$dir" # Generic program options option_planetsplitter="--loggable --tagging=../../xml/routino-tagging.xml --errorlog $prune" option_filedumper="--dump-osm" # Run planetsplitter echo "Running planetsplitter" echo ../planetsplitter$slim $option_dir $option_prefix $option_planetsplitter $osm > $log $debugger ../planetsplitter$slim $option_dir $option_prefix $option_planetsplitter $osm >> $log # Run filedumper echo "Running filedumper" echo ../filedumper$slim $option_dir $option_prefix $option_filedumper >> $log $debugger ../filedumper$slim $option_dir $option_prefix $option_filedumper > $dir/$osm routino-3.2/src/test/oneway-loop.osm 644 233 144 10263 12114366272 13012 0 routino-3.2/src/test/coincident-waypoint.osm 644 233 144 10700 12333376606 14531 0 routino-3.2/src/test/no-super.sh 777 233 144 0 12064636362 13237 2a-b-c.shroutino-3.2/src/test/expected/ 40755 233 144 0 12725336336 11572 5routino-3.2/src/test/expected/dead-ends-WP10.txt 644 233 144 3025 12601522415 14644 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219535 -0.521016 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.521052 5* Junct- 0.076 0.05 0.08 0.0 96 182 main 1 -0.220666 -0.521060 4* Junct 0.049 0.03 0.12 0.1 96 180 main 1 -0.220702 -0.519478 12* Junct 0.176 0.22 0.30 0.3 48 91 high street -0.220739 -0.517804 18* Junct 0.186 0.23 0.49 0.5 48 91 high street -0.220782 -0.516137 24* Junct 0.185 0.23 0.67 0.8 48 91 high street -0.220361 -0.515961 25* Junct- 0.050 0.06 0.72 0.8 48 22 dead-end 3 -0.220019 -0.515847 26 Inter 0.040 0.05 0.76 0.9 48 18 dead-end 3 -0.219672 -0.516031 -2 Waypt#2 0.043 0.05 0.81 0.9 48 332 dead-end 3 -0.220019 -0.515847 26 Inter 0.043 0.05 0.85 1.0 48 152 dead-end 3 -0.220361 -0.515961 25* Junct- 0.040 0.05 0.89 1.0 48 198 dead-end 3 -0.220782 -0.516137 24* Junct 0.050 0.06 0.94 1.1 48 202 dead-end 3 -0.220817 -0.514062 32* Junct 0.230 0.29 1.17 1.4 48 90 high street -0.220344 -0.514042 33* Junct- 0.052 0.03 1.22 1.4 96 2 main 2 -0.219539 -0.514007 -3 Waypt#3 0.089 0.06 1.31 1.5 96 2 main 2 routino-3.2/src/test/expected/turns-WP02.txt 644 233 144 2411 12725335500 14176 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct- 0.072 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 5* Junct 0.173 0.11 0.24 0.2 96 182 main 1 -0.220671 -0.520223 11* Inter 0.074 0.09 0.32 0.2 48 90 high street -0.220691 -0.519461 19* Junct 0.084 0.10 0.40 0.3 48 91 high street -0.220111 -0.519553 17 Inter 0.065 0.08 0.47 0.4 48 351 loop 1 -0.219817 -0.519807 15 Inter 0.043 0.05 0.51 0.5 48 319 loop 1 -0.220067 -0.520109 13* Waypt#2 0.043 0.05 0.55 0.5 48 230 loop 1 -0.220671 -0.520223 11* Junct 0.068 0.09 0.62 0.6 48 190 loop 1 -0.220666 -0.520893 5* Junct 0.074 0.09 0.70 0.7 48 270 high street -0.221308 -0.520914 4* Junct- 0.071 0.04 0.77 0.8 96 181 main 1 -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 0.79 0.8 96 181 main 1 routino-3.2/src/test/expected/loop-and-reverse-WP-LR.txt 644 233 144 1713 12606772160 16367 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219526 -0.521010 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.218820 -0.520980 5* Junct 0.078 0.05 0.08 0.0 96 2 main 1 -0.218970 -0.513986 15* Junct 0.778 0.97 0.86 1.0 48 91 high street -0.219540 -0.514010 -3 Waypt#3 0.063 0.04 0.92 1.1 96 182 main 2 -0.220817 -0.514062 14* Junct 0.141 0.09 1.06 1.1 96 182 main 2 -0.220749 -0.517228 -2 Waypt#2 0.352 0.44 1.41 1.6 48 271 low street -0.220666 -0.521060 4* Junct 0.426 0.53 1.84 2.1 48 271 low street -0.219526 -0.521010 -1 Waypt#1 0.126 0.08 1.96 2.2 96 2 main 1 routino-3.2/src/test/expected/loops-WP05.txt 644 233 144 3345 12601522414 14164 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219562 -0.520851 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.520885 5* Junct- 0.073 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 4* Junct 0.049 0.03 0.12 0.1 96 181 main 1 -0.220695 -0.519489 11* Junct 0.156 0.20 0.28 0.3 48 91 high street -0.220280 -0.519256 15* Junct- 0.052 0.07 0.33 0.3 48 29 loop 1 -0.219910 -0.519112 17 Inter 0.044 0.06 0.37 0.4 48 21 loop 1 -0.219237 -0.519286 13* Junct 0.077 0.10 0.45 0.5 48 345 loop 1 -0.218764 -0.519471 12 Inter 0.056 0.07 0.51 0.6 48 338 loop 1 -0.218380 -0.519134 16 Waypt#2 0.056 0.07 0.56 0.6 48 41 loop 1 -0.218776 -0.518838 18 Inter 0.055 0.07 0.62 0.7 48 143 loop 1 -0.219237 -0.519286 13* Junct 0.071 0.09 0.69 0.8 48 224 loop 1 -0.219910 -0.519112 17 Inter 0.077 0.10 0.77 0.9 48 165 loop 1 -0.220280 -0.519256 15* Junct- 0.044 0.06 0.81 0.9 48 201 loop 1 -0.220695 -0.519489 11* Junct 0.052 0.07 0.86 1.0 48 209 loop 1 -0.220739 -0.517801 19* Junct 0.187 0.23 1.05 1.2 48 91 high street -0.220784 -0.516035 30* Junct 0.196 0.24 1.25 1.5 48 91 high street -0.220311 -0.516015 31* Junct- 0.052 0.03 1.30 1.5 96 2 main 2 -0.219596 -0.515984 -3 Waypt#3 0.079 0.05 1.38 1.6 96 2 main 2 routino-3.2/src/test/expected/dead-ends-WP11.txt 644 233 144 3273 12601522415 14652 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219535 -0.521016 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.521052 5* Junct- 0.076 0.05 0.08 0.0 96 182 main 1 -0.220666 -0.521060 4* Junct 0.049 0.03 0.12 0.1 96 180 main 1 -0.220702 -0.519478 12* Junct 0.176 0.22 0.30 0.3 48 91 high street -0.220739 -0.517804 18* Junct 0.186 0.23 0.49 0.5 48 91 high street -0.220782 -0.516137 24* Junct 0.185 0.23 0.67 0.8 48 91 high street -0.220361 -0.515961 25* Junct- 0.050 0.06 0.72 0.8 48 22 dead-end 3 -0.220019 -0.515847 26 Inter 0.040 0.05 0.76 0.9 48 18 dead-end 3 -0.219341 -0.516206 23 Inter 0.085 0.10 0.85 1.0 48 332 dead-end 3 -0.218493 -0.515789 27* Waypt#2 0.105 0.13 0.95 1.1 48 26 dead-end 3 -0.219341 -0.516206 23 Inter 0.105 0.13 1.06 1.2 48 206 dead-end 3 -0.220019 -0.515847 26 Inter 0.085 0.10 1.14 1.3 48 152 dead-end 3 -0.220361 -0.515961 25* Junct- 0.040 0.05 1.18 1.4 48 198 dead-end 3 -0.220782 -0.516137 24* Junct 0.050 0.06 1.23 1.5 48 202 dead-end 3 -0.220817 -0.514062 32* Junct 0.230 0.29 1.46 1.7 48 90 high street -0.220344 -0.514042 33* Junct- 0.052 0.03 1.51 1.8 96 2 main 2 -0.219539 -0.514007 -3 Waypt#3 0.089 0.06 1.60 1.8 96 2 main 2 routino-3.2/src/test/expected/fake-node-with-loop-WP02.txt 644 233 144 2426 12601522415 16576 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.216959 -0.520771 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.217286 -0.520780 10 Junct- 0.036 0.02 0.04 0.0 96 181 main 1 -0.218523 -0.520806 9 Junct- 0.137 0.09 0.17 0.1 96 181 main 1 -0.219171 -0.520827 -2 Waypt#2 0.071 0.04 0.24 0.1 96 181 main 1 -0.219482 -0.520837 8* Junct 0.034 0.02 0.28 0.2 96 181 main 1 -0.219692 -0.520509 14 Junct- 0.043 0.03 0.32 0.2 96 122 roundabout -0.220082 -0.520522 13 Junct- 0.043 0.03 0.36 0.2 96 181 roundabout -0.220268 -0.520863 7 Inter 0.043 0.03 0.41 0.2 96 241 roundabout -0.220062 -0.521204 4 Junct- 0.044 0.03 0.45 0.3 96 301 roundabout -0.219665 -0.521190 5 Junct- 0.044 0.03 0.49 0.3 96 1 roundabout -0.219482 -0.520837 8* Junct 0.044 0.03 0.54 0.3 96 62 roundabout -0.218842 -0.520816 -3 Waypt#3 0.070 0.04 0.61 0.4 96 1 main 1 routino-3.2/src/test/expected/dead-ends-WP01.txt 644 233 144 2307 12601522417 14650 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219535 -0.521016 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.521052 5* Junct- 0.076 0.05 0.08 0.0 96 182 main 1 -0.220666 -0.521060 4* Junct 0.049 0.03 0.12 0.1 96 180 main 1 -0.220702 -0.519478 12* Junct 0.176 0.22 0.30 0.3 48 91 high street -0.220263 -0.519309 13* Waypt#2 0.052 0.07 0.35 0.4 48 21 dead-end 1 -0.220702 -0.519478 12* Junct 0.052 0.07 0.41 0.4 48 201 dead-end 1 -0.220739 -0.517804 18* Junct 0.186 0.23 0.59 0.7 48 91 high street -0.220782 -0.516137 24* Junct 0.185 0.23 0.78 0.9 48 91 high street -0.220817 -0.514062 32* Junct 0.230 0.29 1.01 1.2 48 90 high street -0.220344 -0.514042 33* Junct- 0.052 0.03 1.06 1.2 96 2 main 2 -0.219539 -0.514007 -3 Waypt#3 0.089 0.06 1.15 1.3 96 2 main 2 routino-3.2/src/test/expected/coincident-waypoint-WP04.txt 644 233 144 1202 12601522420 17001 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.217286 -0.520780 7 Waypt#1 0.000 0.00 0.00 0.0 -0.217286 -0.520780 7 Waypt#2 0.000 0.00 0.00 0.0 96 270 main 1 -0.218523 -0.520806 6 Waypt#3 0.137 0.09 0.14 0.1 96 181 main 1 -0.218523 -0.520806 6 Waypt#4 0.000 0.00 0.14 0.1 96 270 main 1 routino-3.2/src/test/expected/node-restrictions-WP02.txt 644 233 144 3426 12601522411 16475 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219564 -0.520846 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220666 -0.520893 4* Junct 0.122 0.07 0.12 0.1 96 182 main 1 -0.220682 -0.520141 9* Junct 0.083 0.08 0.20 0.2 64 91 high street -0.220695 -0.519489 12* Change 0.072 0.07 0.28 0.2 64 91 high street -0.221123 -0.519360 13 Inter 0.049 0.06 0.33 0.3 48 163 somepass road -0.221154 -0.518671 -2 Waypt#2 0.075 0.09 0.40 0.4 48 92 somepass road -0.221123 -0.519360 13 Inter 0.075 0.09 0.48 0.5 48 272 somepass road -0.220695 -0.519489 12* Junct 0.049 0.06 0.53 0.5 48 343 somepass road -0.220694 -0.519227 15 Inter 0.029 0.04 0.55 0.6 48 89 long road -0.220386 -0.519076 16 Inter 0.038 0.05 0.59 0.6 48 26 long road -0.220961 -0.518928 17 Inter 0.066 0.08 0.66 0.7 48 165 long road -0.220427 -0.518622 18 Inter 0.068 0.09 0.73 0.8 48 29 long road -0.220949 -0.518422 21 Inter 0.062 0.08 0.79 0.8 48 159 long road -0.220455 -0.518238 22 Inter 0.058 0.07 0.85 0.9 48 20 long road -0.220746 -0.518070 23 Inter 0.037 0.04 0.88 1.0 48 149 long road -0.220739 -0.517801 26* Junct 0.029 0.04 0.91 1.0 48 88 long road -0.220784 -0.516035 31* Junct 0.196 0.18 1.11 1.2 64 91 high street -0.219593 -0.515985 -3 Waypt#3 0.132 0.08 1.24 1.3 96 2 main 2 routino-3.2/src/test/expected/dead-ends-WP09.txt 644 233 144 2557 12601522415 14665 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219535 -0.521016 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.521052 5* Junct- 0.076 0.05 0.08 0.0 96 182 main 1 -0.220666 -0.521060 4* Junct 0.049 0.03 0.12 0.1 96 180 main 1 -0.220702 -0.519478 12* Junct 0.176 0.22 0.30 0.3 48 91 high street -0.220739 -0.517804 18* Junct 0.186 0.23 0.49 0.5 48 91 high street -0.220782 -0.516137 24* Junct 0.185 0.23 0.67 0.8 48 91 high street -0.220361 -0.515961 25* Junct- 0.050 0.06 0.72 0.8 48 22 dead-end 3 -0.220019 -0.515847 26 Waypt#2 0.040 0.05 0.76 0.9 48 18 dead-end 3 -0.220361 -0.515961 25* Junct- 0.040 0.05 0.80 0.9 48 198 dead-end 3 -0.220782 -0.516137 24* Junct 0.050 0.06 0.85 1.0 48 202 dead-end 3 -0.220817 -0.514062 32* Junct 0.230 0.29 1.08 1.3 48 90 high street -0.220344 -0.514042 33* Junct- 0.052 0.03 1.13 1.3 96 2 main 2 -0.219539 -0.514007 -3 Waypt#3 0.089 0.06 1.22 1.4 96 2 main 2 routino-3.2/src/test/expected/node-restrictions-WP01.txt 644 233 144 3426 12601522411 16474 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219564 -0.520846 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220666 -0.520893 4* Junct 0.122 0.07 0.12 0.1 96 182 main 1 -0.220682 -0.520141 9* Junct 0.083 0.08 0.20 0.2 64 91 high street -0.220695 -0.519489 12* Change 0.072 0.07 0.28 0.2 64 91 high street -0.221123 -0.519360 13 Inter 0.049 0.06 0.33 0.3 48 163 somepass road -0.221156 -0.518615 19* Waypt#2 0.082 0.10 0.41 0.4 48 92 somepass road -0.221123 -0.519360 13 Inter 0.082 0.10 0.49 0.5 48 272 somepass road -0.220695 -0.519489 12* Junct 0.049 0.06 0.54 0.5 48 343 somepass road -0.220694 -0.519227 15 Inter 0.029 0.04 0.57 0.6 48 89 long road -0.220386 -0.519076 16 Inter 0.038 0.05 0.61 0.6 48 26 long road -0.220961 -0.518928 17 Inter 0.066 0.08 0.67 0.7 48 165 long road -0.220427 -0.518622 18 Inter 0.068 0.09 0.74 0.8 48 29 long road -0.220949 -0.518422 21 Inter 0.062 0.08 0.80 0.9 48 159 long road -0.220455 -0.518238 22 Inter 0.058 0.07 0.86 0.9 48 20 long road -0.220746 -0.518070 23 Inter 0.037 0.04 0.90 1.0 48 149 long road -0.220739 -0.517801 26* Junct 0.029 0.04 0.93 1.0 48 88 long road -0.220784 -0.516035 31* Junct 0.196 0.18 1.12 1.2 64 91 high street -0.219593 -0.515985 -3 Waypt#3 0.132 0.08 1.25 1.3 96 2 main 2 routino-3.2/src/test/expected/loops-WP02.txt 644 233 144 3345 12601522414 14161 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219562 -0.520851 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.520885 5* Junct- 0.073 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 4* Junct 0.049 0.03 0.12 0.1 96 181 main 1 -0.220695 -0.519489 11* Junct 0.156 0.20 0.28 0.3 48 91 high street -0.220280 -0.519256 15* Junct- 0.052 0.07 0.33 0.3 48 29 loop 1 -0.219910 -0.519112 17 Waypt#2 0.044 0.06 0.37 0.4 48 21 loop 1 -0.219237 -0.519286 13* Junct 0.077 0.10 0.45 0.5 48 345 loop 1 -0.218764 -0.519471 12 Inter 0.056 0.07 0.51 0.6 48 338 loop 1 -0.218380 -0.519134 16 Inter 0.056 0.07 0.56 0.6 48 41 loop 1 -0.218776 -0.518838 18 Inter 0.055 0.07 0.62 0.7 48 143 loop 1 -0.219237 -0.519286 13* Junct 0.071 0.09 0.69 0.8 48 224 loop 1 -0.219910 -0.519112 17 Inter 0.077 0.10 0.77 0.9 48 165 loop 1 -0.220280 -0.519256 15* Junct- 0.044 0.06 0.81 0.9 48 201 loop 1 -0.220695 -0.519489 11* Junct 0.052 0.07 0.86 1.0 48 209 loop 1 -0.220739 -0.517801 19* Junct 0.187 0.23 1.05 1.2 48 91 high street -0.220784 -0.516035 30* Junct 0.196 0.24 1.25 1.5 48 91 high street -0.220311 -0.516015 31* Junct- 0.052 0.03 1.30 1.5 96 2 main 2 -0.219596 -0.515984 -3 Waypt#3 0.079 0.05 1.38 1.6 96 2 main 2 routino-3.2/src/test/expected/turns-WP12.txt 644 233 144 4601 12725336204 14204 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct 0.072 0.04 0.07 0.0 96 182 main 1 -0.219123 -0.520207 12* Inter 0.069 0.09 0.14 0.1 48 91 top road -0.219131 -0.519426 20* Inter 0.086 0.11 0.23 0.2 48 90 top road -0.219135 -0.518823 23* Inter 0.067 0.08 0.29 0.3 48 90 top road -0.219145 -0.517626 33* Inter 0.133 0.17 0.43 0.5 48 90 top road -0.219144 -0.517257 36* Junct 0.041 0.05 0.47 0.5 48 89 top road -0.219291 -0.517193 38 Inter 0.017 0.02 0.48 0.6 48 156 roundabout -0.219352 -0.517060 42 Junct- 0.016 0.02 0.50 0.6 48 114 roundabout -0.219304 -0.516904 45 Inter 0.018 0.02 0.52 0.6 48 72 roundabout -0.219153 -0.516826 46* Junct- 0.018 0.02 0.54 0.6 48 27 roundabout -0.218966 -0.516910 44 Inter 0.022 0.03 0.56 0.6 48 335 roundabout -0.218923 -0.517072 39 Junct- 0.018 0.02 0.58 0.7 48 284 roundabout -0.218998 -0.517207 37 Inter 0.017 0.02 0.59 0.7 48 240 roundabout -0.219144 -0.517257 36* Junct 0.017 0.02 0.61 0.7 48 199 roundabout -0.219145 -0.517626 33* Junct 0.041 0.05 0.65 0.8 48 269 top road -0.219135 -0.518823 23* Junct 0.133 0.17 0.79 0.9 48 270 top road -0.219131 -0.519426 20* Junct 0.067 0.08 0.85 1.0 48 270 top road -0.218482 -0.519542 18* Inter 0.073 0.09 0.93 1.1 48 349 loop 4 -0.218258 -0.519789 16 Waypt#2 0.037 0.04 0.96 1.1 48 312 loop 4 -0.218474 -0.520060 14* Inter 0.038 0.05 1.00 1.2 48 231 loop 4 -0.219123 -0.520207 12* Junct 0.074 0.09 1.07 1.3 48 192 loop 4 -0.219107 -0.520828 6* Junct 0.069 0.09 1.14 1.4 48 271 top road -0.220666 -0.520893 5* Junct- 0.173 0.11 1.32 1.5 96 182 main 1 -0.221308 -0.520914 4* Junct- 0.071 0.04 1.39 1.5 96 181 main 1 -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 1.41 1.5 96 181 main 1 routino-3.2/src/test/expected/loops-WP09.txt 644 233 144 3465 12601522413 14172 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219562 -0.520851 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.520885 5* Junct- 0.073 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 4* Junct 0.049 0.03 0.12 0.1 96 181 main 1 -0.220695 -0.519489 11* Junct 0.156 0.20 0.28 0.3 48 91 high street -0.220739 -0.517801 19* Junct 0.187 0.23 0.47 0.5 48 91 high street -0.220301 -0.517576 22* Junct- 0.054 0.07 0.52 0.6 48 27 loop 2 -0.219946 -0.517397 24 Inter 0.044 0.06 0.56 0.6 48 26 loop 2 -0.219266 -0.517579 21* Junct 0.078 0.10 0.64 0.7 48 345 loop 2 -0.219013 -0.517333 -2 Waypt#2 0.039 0.05 0.68 0.8 48 44 loop 2 -0.218805 -0.517131 25 Inter 0.032 0.04 0.71 0.8 48 44 loop 2 -0.218417 -0.517462 23* Junct- 0.056 0.07 0.77 0.9 48 319 loop 2 -0.218794 -0.517763 20 Inter 0.053 0.07 0.82 0.9 48 218 loop 2 -0.219266 -0.517579 21* Junct 0.056 0.07 0.88 1.0 48 158 loop 2 -0.219946 -0.517397 24 Inter 0.078 0.10 0.95 1.1 48 165 loop 2 -0.220301 -0.517576 22* Junct- 0.044 0.06 1.00 1.2 48 206 loop 2 -0.220739 -0.517801 19* Junct 0.054 0.07 1.05 1.2 48 207 loop 2 -0.220784 -0.516035 30* Junct 0.196 0.24 1.25 1.5 48 91 high street -0.220311 -0.516015 31* Junct- 0.052 0.03 1.30 1.5 96 2 main 2 -0.219596 -0.515984 -3 Waypt#3 0.079 0.05 1.38 1.6 96 2 main 2 routino-3.2/src/test/expected/turns-WP14.txt 644 233 144 6540 12725336307 14216 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct 0.072 0.04 0.07 0.0 96 182 main 1 -0.219123 -0.520207 12* Inter 0.069 0.09 0.14 0.1 48 91 top road -0.219131 -0.519426 20* Inter 0.086 0.11 0.23 0.2 48 90 top road -0.219135 -0.518823 23* Inter 0.067 0.08 0.29 0.3 48 90 top road -0.219145 -0.517626 33* Inter 0.133 0.17 0.43 0.5 48 90 top road -0.219144 -0.517257 36* Junct 0.041 0.05 0.47 0.5 48 89 top road -0.219291 -0.517193 38 Inter 0.017 0.02 0.48 0.6 48 156 roundabout -0.219352 -0.517060 42 Junct- 0.016 0.02 0.50 0.6 48 114 roundabout -0.219304 -0.516904 45 Inter 0.018 0.02 0.52 0.6 48 72 roundabout -0.219153 -0.516826 46* Junct- 0.018 0.02 0.54 0.6 48 27 roundabout -0.218966 -0.516910 44 Inter 0.022 0.03 0.56 0.6 48 335 roundabout -0.218923 -0.517072 39 Junct- 0.018 0.02 0.58 0.7 48 284 roundabout -0.218998 -0.517207 37 Inter 0.017 0.02 0.59 0.7 48 240 roundabout -0.219144 -0.517257 36* Junct 0.017 0.02 0.61 0.7 48 199 roundabout -0.219145 -0.517626 33* Junct 0.041 0.05 0.65 0.8 48 269 top road -0.218619 -0.517921 32* Inter 0.067 0.08 0.72 0.8 48 330 loop 5 -0.218431 -0.518243 28 Inter 0.041 0.05 0.76 0.9 48 300 loop 5 -0.218600 -0.518557 25* Waypt#2 0.039 0.05 0.80 0.9 48 241 loop 5 -0.219135 -0.518823 23* Inter 0.066 0.08 0.86 1.0 48 206 loop 5 -0.219145 -0.517626 33* Inter 0.133 0.17 1.00 1.2 48 90 top road -0.219144 -0.517257 36* Junct 0.041 0.05 1.04 1.2 48 89 top road -0.219291 -0.517193 38 Inter 0.017 0.02 1.06 1.3 48 156 roundabout -0.219352 -0.517060 42 Junct- 0.016 0.02 1.07 1.3 48 114 roundabout -0.219304 -0.516904 45 Inter 0.018 0.02 1.09 1.3 48 72 roundabout -0.219153 -0.516826 46* Junct- 0.018 0.02 1.11 1.3 48 27 roundabout -0.218966 -0.516910 44 Inter 0.022 0.03 1.13 1.3 48 335 roundabout -0.218923 -0.517072 39 Junct- 0.018 0.02 1.15 1.4 48 284 roundabout -0.218998 -0.517207 37 Inter 0.017 0.02 1.17 1.4 48 240 roundabout -0.219144 -0.517257 36* Junct 0.017 0.02 1.18 1.4 48 199 roundabout -0.219145 -0.517626 33* Junct 0.041 0.05 1.22 1.5 48 269 top road -0.219135 -0.518823 23* Junct 0.133 0.17 1.36 1.6 48 270 top road -0.219131 -0.519426 20* Junct 0.067 0.08 1.42 1.7 48 270 top road -0.219123 -0.520207 12* Junct 0.086 0.11 1.51 1.8 48 270 top road -0.219107 -0.520828 6* Junct 0.069 0.09 1.58 1.9 48 271 top road -0.220666 -0.520893 5* Junct- 0.173 0.11 1.75 2.0 96 182 main 1 -0.221308 -0.520914 4* Junct- 0.071 0.04 1.82 2.0 96 181 main 1 -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 1.85 2.1 96 181 main 1 routino-3.2/src/test/expected/oneway-loop-WP01.txt 644 233 144 2325 12601522410 15266 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219564 -0.520846 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220666 -0.520893 4* Junct 0.122 0.07 0.12 0.1 96 182 main 1 -0.220695 -0.519489 9* Inter 0.156 0.20 0.28 0.3 48 91 high street -0.220739 -0.517801 12* Junct 0.187 0.23 0.47 0.5 48 91 high street -0.220405 -0.517799 13 Inter 0.037 0.04 0.50 0.5 48 0 reverse loop -0.220210 -0.518605 11 Waypt#2 0.092 0.12 0.59 0.7 48 283 reverse loop -0.220333 -0.519485 10 Inter 0.098 0.12 0.69 0.8 48 262 reverse loop -0.220695 -0.519489 9* Inter 0.040 0.05 0.73 0.8 48 180 reverse loop -0.220739 -0.517801 12* Junct 0.187 0.23 0.92 1.1 48 91 high street -0.220784 -0.516035 18* Junct 0.196 0.24 1.11 1.3 48 91 high street -0.219593 -0.515985 -3 Waypt#3 0.132 0.08 1.25 1.4 96 2 main 2 routino-3.2/src/test/expected/node-restrictions-WP04.txt 644 233 144 3416 12601522522 16501 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219564 -0.520846 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220666 -0.520893 4* Junct 0.122 0.07 0.12 0.1 96 182 main 1 -0.220682 -0.520141 9* Junct 0.083 0.08 0.20 0.2 64 91 high street -0.220695 -0.519489 12* Change 0.072 0.07 0.28 0.2 64 91 high street -0.220140 -0.519342 14 Inter 0.063 0.08 0.34 0.3 48 14 nopass road -0.220173 -0.518597 20 Waypt#2 0.082 0.10 0.42 0.4 48 92 nopass road -0.220140 -0.519342 14 Inter 0.082 0.10 0.50 0.5 48 272 nopass road -0.220695 -0.519489 12* Junct 0.063 0.08 0.57 0.6 48 194 nopass road -0.220694 -0.519227 15 Inter 0.029 0.04 0.60 0.6 48 89 long road -0.220386 -0.519076 16 Inter 0.038 0.05 0.63 0.7 48 26 long road -0.220961 -0.518928 17 Inter 0.066 0.08 0.70 0.7 48 165 long road -0.220427 -0.518622 18 Inter 0.068 0.09 0.77 0.8 48 29 long road -0.220949 -0.518422 21 Inter 0.062 0.08 0.83 0.9 48 159 long road -0.220455 -0.518238 22 Inter 0.058 0.07 0.89 1.0 48 20 long road -0.220746 -0.518070 23 Inter 0.037 0.04 0.93 1.0 48 149 long road -0.220739 -0.517801 26* Junct 0.029 0.04 0.95 1.1 48 88 long road -0.220784 -0.516035 31* Junct 0.196 0.18 1.15 1.2 64 91 high street -0.219593 -0.515985 -3 Waypt#3 0.132 0.08 1.28 1.3 96 2 main 2 routino-3.2/src/test/expected/turns-WP08.txt 644 233 144 4467 12725336077 14233 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct 0.072 0.04 0.07 0.0 96 182 main 1 -0.219123 -0.520207 12* Inter 0.069 0.09 0.14 0.1 48 91 top road -0.219131 -0.519426 20* Inter 0.086 0.11 0.23 0.2 48 90 top road -0.219135 -0.518823 23* Inter 0.067 0.08 0.29 0.3 48 90 top road -0.219145 -0.517626 33* Inter 0.133 0.17 0.43 0.5 48 90 top road -0.219144 -0.517257 36* Junct 0.041 0.05 0.47 0.5 48 89 top road -0.219291 -0.517193 38 Inter 0.017 0.02 0.48 0.6 48 156 roundabout -0.219352 -0.517060 42 Junct- 0.016 0.02 0.50 0.6 48 114 roundabout -0.219304 -0.516904 45 Inter 0.018 0.02 0.52 0.6 48 72 roundabout -0.219153 -0.516826 46* Junct 0.018 0.02 0.54 0.6 48 27 roundabout -0.219184 -0.515968 55* Junct 0.095 0.12 0.63 0.7 48 92 top road -0.220784 -0.516035 54* Junct 0.178 0.11 0.81 0.8 96 182 main 2 -0.220760 -0.516647 48* Junct 0.068 0.09 0.88 0.9 48 272 high street -0.220097 -0.516762 47* Inter 0.074 0.09 0.95 1.0 48 350 loop 3 -0.219872 -0.517009 43 Inter 0.037 0.04 0.99 1.1 48 312 loop 3 -0.220089 -0.517279 35* Waypt#2 0.038 0.05 1.03 1.1 48 231 loop 3 -0.220739 -0.517425 34* Junct 0.074 0.09 1.10 1.2 48 192 loop 3 -0.220724 -0.518071 31* Junct 0.071 0.09 1.17 1.3 48 271 high street -0.220708 -0.518842 22* Junct 0.085 0.10 1.26 1.4 48 271 high street -0.220691 -0.519461 19* Junct 0.069 0.09 1.33 1.5 48 271 high street -0.220671 -0.520223 11* Junct 0.084 0.10 1.41 1.6 48 271 high street -0.220666 -0.520893 5* Junct 0.074 0.09 1.48 1.7 48 270 high street -0.221308 -0.520914 4* Junct- 0.071 0.04 1.55 1.7 96 181 main 1 -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 1.58 1.7 96 181 main 1 routino-3.2/src/test/expected/super-or-not-WP02.txt 644 233 144 1211 12635016670 15376 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.216828 -0.519457 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.217245 -0.519637 11* Junct 0.050 0.06 0.05 0.1 48 203 Local road -0.217248 -0.515206 19* Junct 0.493 0.31 0.54 0.4 96 90 Main road -0.216919 -0.515308 -2 Waypt#2 0.038 0.05 0.58 0.4 48 342 Local road routino-3.2/src/test/expected/roundabout-waypoints-WP01.txt 644 233 144 1454 12601522407 17242 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218454 -0.520798 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219482 -0.520837 9* Waypt#2 0.113 0.07 0.11 0.1 96 182 main 1 -0.219692 -0.520509 15 Junct- 0.043 0.03 0.16 0.1 96 122 roundabout -0.220082 -0.520522 14 Junct- 0.043 0.03 0.20 0.1 96 181 roundabout -0.220268 -0.520863 8* Junct 0.043 0.03 0.24 0.1 96 241 roundabout -0.221566 -0.520921 -3 Waypt#3 0.143 0.09 0.39 0.2 96 182 main 2 routino-3.2/src/test/expected/loops-WP01.txt 644 233 144 3344 12601522414 14157 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219562 -0.520851 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.520885 5* Junct- 0.073 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 4* Junct 0.049 0.03 0.12 0.1 96 181 main 1 -0.220695 -0.519489 11* Junct 0.156 0.20 0.28 0.3 48 91 high street -0.220280 -0.519256 15* Waypt#2 0.052 0.07 0.33 0.3 48 29 loop 1 -0.219910 -0.519112 17 Inter 0.044 0.06 0.37 0.4 48 21 loop 1 -0.219237 -0.519286 13* Junct 0.077 0.10 0.45 0.5 48 345 loop 1 -0.218764 -0.519471 12 Inter 0.056 0.07 0.51 0.6 48 338 loop 1 -0.218380 -0.519134 16 Inter 0.056 0.07 0.56 0.6 48 41 loop 1 -0.218776 -0.518838 18 Inter 0.055 0.07 0.62 0.7 48 143 loop 1 -0.219237 -0.519286 13* Junct 0.071 0.09 0.69 0.8 48 224 loop 1 -0.219910 -0.519112 17 Inter 0.077 0.10 0.77 0.9 48 165 loop 1 -0.220280 -0.519256 15* Junct- 0.044 0.06 0.81 0.9 48 201 loop 1 -0.220695 -0.519489 11* Junct 0.052 0.07 0.86 1.0 48 209 loop 1 -0.220739 -0.517801 19* Junct 0.187 0.23 1.05 1.2 48 91 high street -0.220784 -0.516035 30* Junct 0.196 0.24 1.25 1.5 48 91 high street -0.220311 -0.516015 31* Junct- 0.052 0.03 1.30 1.5 96 2 main 2 -0.219596 -0.515984 -3 Waypt#3 0.079 0.05 1.38 1.6 96 2 main 2 routino-3.2/src/test/expected/roundabout-waypoints-WP07.txt 644 233 144 1454 12601522406 17247 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218454 -0.520798 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219482 -0.520837 9* Junct 0.113 0.07 0.11 0.1 96 182 main 1 -0.219692 -0.520509 15 Junct- 0.043 0.03 0.16 0.1 96 122 roundabout -0.220082 -0.520522 14 Junct- 0.043 0.03 0.20 0.1 96 181 roundabout -0.220268 -0.520863 8* Waypt#2 0.043 0.03 0.24 0.1 96 241 roundabout -0.221566 -0.520921 -3 Waypt#3 0.143 0.09 0.39 0.2 96 182 main 2 routino-3.2/src/test/expected/cycle-both-ways-WP02.txt 644 233 144 2203 12601522417 16032 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.221402 -0.520913 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220268 -0.520863 8* Junct 0.125 0.38 0.12 0.4 20 2 main 2 -0.220062 -0.521204 2 Inter 0.044 0.13 0.17 0.5 20 301 roundabout -0.219665 -0.521190 3 Junct- 0.044 0.13 0.21 0.6 20 1 roundabout -0.219482 -0.520837 9* Junct- 0.044 0.13 0.26 0.8 20 62 roundabout -0.219692 -0.520509 15* Junct- 0.043 0.13 0.30 0.9 20 122 roundabout -0.220082 -0.520522 14* Junct 0.043 0.13 0.34 1.0 20 181 roundabout -0.220768 -0.519742 16 Inter 0.115 0.34 0.46 1.4 20 131 residential road -0.220811 -0.518939 19* Junct 0.089 0.27 0.55 1.6 20 93 residential road -0.221319 -0.518949 -2 Waypt#2 0.056 0.17 0.60 1.8 20 181 main 3 routino-3.2/src/test/expected/loops-WP06.txt 644 233 144 3345 12601522413 14164 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219562 -0.520851 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.520885 5* Junct- 0.073 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 4* Junct 0.049 0.03 0.12 0.1 96 181 main 1 -0.220695 -0.519489 11* Junct 0.156 0.20 0.28 0.3 48 91 high street -0.220739 -0.517801 19* Junct 0.187 0.23 0.47 0.5 48 91 high street -0.220301 -0.517576 22* Waypt#2 0.054 0.07 0.52 0.6 48 27 loop 2 -0.219946 -0.517397 24 Inter 0.044 0.06 0.56 0.6 48 26 loop 2 -0.219266 -0.517579 21* Junct 0.078 0.10 0.64 0.7 48 345 loop 2 -0.218794 -0.517763 20 Inter 0.056 0.07 0.70 0.8 48 338 loop 2 -0.218417 -0.517462 23* Junct- 0.053 0.07 0.75 0.9 48 38 loop 2 -0.218805 -0.517131 25 Inter 0.056 0.07 0.81 0.9 48 139 loop 2 -0.219266 -0.517579 21* Junct 0.071 0.09 0.88 1.0 48 224 loop 2 -0.219946 -0.517397 24 Inter 0.078 0.10 0.95 1.1 48 165 loop 2 -0.220301 -0.517576 22* Junct- 0.044 0.06 1.00 1.2 48 206 loop 2 -0.220739 -0.517801 19* Junct 0.054 0.07 1.05 1.2 48 207 loop 2 -0.220784 -0.516035 30* Junct 0.196 0.24 1.25 1.5 48 91 high street -0.220311 -0.516015 31* Junct- 0.052 0.03 1.30 1.5 96 2 main 2 -0.219596 -0.515984 -3 Waypt#3 0.079 0.05 1.38 1.6 96 2 main 2 routino-3.2/src/test/expected/no-super-WP02.txt 644 233 144 1057 12601522412 14571 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.216472 -0.519026 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.216671 -0.515660 -2 Waypt#2 0.374 0.47 0.37 0.5 48 93 road2 -0.216579 -0.517212 -3 Waypt#3 0.172 0.21 0.55 0.7 48 273 road2 routino-3.2/src/test/expected/coincident-waypoint-WP03.txt 644 233 144 1442 12601522420 17006 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.217022 -0.520773 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.217022 -0.520773 -2 Waypt#2 0.000 0.00 0.00 0.0 96 270 main 1 -0.217286 -0.520780 7 Junct- 0.029 0.02 0.03 0.0 96 181 main 1 -0.218523 -0.520806 6 Junct- 0.137 0.09 0.17 0.1 96 181 main 1 -0.219153 -0.520826 -3 Waypt#3 0.069 0.04 0.23 0.1 96 181 main 1 -0.219153 -0.520826 -4 Waypt#4 0.000 0.00 0.23 0.1 96 270 main 1 routino-3.2/src/test/expected/node-restrictions-WP05.txt 644 233 144 3416 12601522410 16476 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219564 -0.520846 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220666 -0.520893 4* Junct 0.122 0.07 0.12 0.1 96 182 main 1 -0.220682 -0.520141 9* Junct 0.083 0.08 0.20 0.2 64 91 high street -0.220695 -0.519489 12* Change 0.072 0.07 0.28 0.2 64 91 high street -0.220140 -0.519342 14 Inter 0.063 0.08 0.34 0.3 48 14 nopass road -0.220170 -0.518653 -2 Waypt#2 0.075 0.09 0.41 0.4 48 92 nopass road -0.220140 -0.519342 14 Inter 0.075 0.09 0.49 0.5 48 272 nopass road -0.220695 -0.519489 12* Junct 0.063 0.08 0.55 0.6 48 194 nopass road -0.220694 -0.519227 15 Inter 0.029 0.04 0.58 0.6 48 89 long road -0.220386 -0.519076 16 Inter 0.038 0.05 0.62 0.6 48 26 long road -0.220961 -0.518928 17 Inter 0.066 0.08 0.69 0.7 48 165 long road -0.220427 -0.518622 18 Inter 0.068 0.09 0.75 0.8 48 29 long road -0.220949 -0.518422 21 Inter 0.062 0.08 0.82 0.9 48 159 long road -0.220455 -0.518238 22 Inter 0.058 0.07 0.87 1.0 48 20 long road -0.220746 -0.518070 23 Inter 0.037 0.04 0.91 1.0 48 149 long road -0.220739 -0.517801 26* Junct 0.029 0.04 0.94 1.0 48 88 long road -0.220784 -0.516035 31* Junct 0.196 0.18 1.14 1.2 64 91 high street -0.219593 -0.515985 -3 Waypt#3 0.132 0.08 1.27 1.3 96 2 main 2 routino-3.2/src/test/expected/turns-WP06.txt 644 233 144 3650 12725335772 14223 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct- 0.072 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 5* Junct 0.173 0.11 0.24 0.2 96 182 main 1 -0.220671 -0.520223 11* Inter 0.074 0.09 0.32 0.2 48 90 high street -0.220691 -0.519461 19* Junct 0.084 0.10 0.40 0.3 48 91 high street -0.220708 -0.518842 22* Inter 0.069 0.09 0.47 0.4 48 91 high street -0.220724 -0.518071 31* Junct 0.085 0.10 0.56 0.5 48 91 high street -0.220143 -0.518162 30 Inter 0.065 0.08 0.62 0.6 48 351 loop 2 -0.219850 -0.518416 27 Waypt#2 0.043 0.05 0.67 0.7 48 319 loop 2 -0.220100 -0.518718 24* Inter 0.043 0.05 0.71 0.7 48 230 loop 2 -0.220708 -0.518842 22* Inter 0.069 0.09 0.78 0.8 48 191 loop 2 -0.220724 -0.518071 31* Junct 0.085 0.10 0.86 0.9 48 91 high street -0.220739 -0.517425 34* Inter 0.071 0.09 0.93 1.0 48 91 high street -0.220760 -0.516647 48* Inter 0.086 0.11 1.02 1.1 48 91 high street -0.220784 -0.516035 54* Junct 0.068 0.09 1.09 1.2 48 92 high street -0.221431 -0.516056 53* Junct 0.072 0.04 1.16 1.2 96 181 main 2 -0.221376 -0.518235 29* Junct 0.242 0.30 1.40 1.5 48 271 bottom road -0.221360 -0.518860 21* Junct 0.069 0.09 1.47 1.6 48 271 bottom road -0.221308 -0.520914 4* Junct 0.228 0.28 1.70 1.9 48 271 bottom road -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 1.73 1.9 96 181 main 1 routino-3.2/src/test/expected/cycle-both-ways-WP01.txt 644 233 144 2176 12601522420 16034 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.221402 -0.520913 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220268 -0.520863 8* Junct 0.125 0.08 0.12 0.1 96 2 main 2 -0.220062 -0.521204 2 Inter 0.044 0.03 0.17 0.1 96 301 roundabout -0.219665 -0.521190 3 Inter 0.044 0.03 0.21 0.1 96 1 roundabout -0.219482 -0.520837 9* Junct- 0.044 0.03 0.26 0.2 96 62 roundabout -0.219692 -0.520509 15* Junct 0.043 0.03 0.30 0.2 96 122 roundabout -0.219271 -0.519532 17 Inter 0.118 0.15 0.42 0.3 48 66 residential road -0.219302 -0.518908 20* Junct 0.069 0.09 0.49 0.4 48 92 residential road -0.220811 -0.518939 19* Junct- 0.167 0.10 0.65 0.5 96 181 main 3 -0.221319 -0.518949 -2 Waypt#2 0.056 0.04 0.71 0.6 96 181 main 3 routino-3.2/src/test/expected/no-super-WP03.txt 644 233 144 1547 12601522412 14576 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.217185 -0.519054 5 Waypt#1 0.000 0.00 0.00 0.0 -0.217382 -0.518273 8 Inter 0.089 0.11 0.09 0.1 48 104 road3 -0.217219 -0.517733 11 Inter 0.062 0.08 0.15 0.2 48 73 road3 -0.217399 -0.516857 14 Inter 0.099 0.12 0.25 0.3 48 101 road3 -0.217202 -0.515964 17 Waypt#2 0.101 0.12 0.35 0.4 48 77 road3 -0.217399 -0.516857 14 Inter 0.101 0.12 0.45 0.6 48 257 road3 -0.217219 -0.517733 11 Waypt#3 0.099 0.12 0.55 0.7 48 281 road3 routino-3.2/src/test/expected/loop-and-reverse-WP-L.txt 644 233 144 1713 12606772160 16245 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219526 -0.521010 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220666 -0.521060 4* Junct 0.126 0.08 0.13 0.1 96 182 main 1 -0.220749 -0.517228 -2 Waypt#2 0.426 0.53 0.55 0.6 48 91 low street -0.220817 -0.514062 14* Junct 0.352 0.44 0.90 1.1 48 91 low street -0.219540 -0.514010 -3 Waypt#3 0.141 0.09 1.04 1.1 96 2 main 2 -0.218970 -0.513986 15* Junct 0.063 0.04 1.11 1.2 96 2 main 2 -0.218820 -0.520980 5* Junct 0.778 0.97 1.89 2.1 48 271 high street -0.219526 -0.521010 -1 Waypt#1 0.078 0.05 1.96 2.2 96 182 main 1 routino-3.2/src/test/expected/no-super-WP04.txt 644 233 144 2237 12601522412 14574 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.217903 -0.519035 6 Waypt#1 0.000 0.00 0.00 0.0 -0.218100 -0.518253 9 Inter 0.089 0.11 0.09 0.1 48 104 road4 -0.217937 -0.517713 12 Inter 0.062 0.08 0.15 0.2 48 73 road4 -0.218117 -0.516837 16 Inter 0.099 0.12 0.25 0.3 48 101 road4 -0.217920 -0.515945 18 Inter 0.101 0.12 0.35 0.4 48 77 road4 -0.218143 -0.515189 21 Inter 0.087 0.11 0.44 0.5 48 106 road4 -0.217911 -0.514640 26 Waypt#2 0.066 0.08 0.50 0.6 48 67 road4 -0.218143 -0.515189 21 Inter 0.066 0.08 0.57 0.7 48 247 road4 -0.217920 -0.515945 18 Inter 0.087 0.11 0.66 0.8 48 286 road4 -0.218117 -0.516837 16 Inter 0.101 0.12 0.76 0.9 48 257 road4 -0.217937 -0.517713 12 Waypt#3 0.099 0.12 0.86 1.1 48 281 road4 routino-3.2/src/test/expected/dead-ends-WP03.txt 644 233 144 3025 12601522417 14650 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219535 -0.521016 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.521052 5* Junct- 0.076 0.05 0.08 0.0 96 182 main 1 -0.220666 -0.521060 4* Junct 0.049 0.03 0.12 0.1 96 180 main 1 -0.220702 -0.519478 12* Junct 0.176 0.22 0.30 0.3 48 91 high street -0.220263 -0.519309 13* Junct- 0.052 0.07 0.35 0.4 48 21 dead-end 1 -0.219924 -0.519179 14 Inter 0.040 0.05 0.39 0.4 48 20 dead-end 1 -0.219567 -0.519373 -2 Waypt#2 0.045 0.06 0.44 0.5 48 331 dead-end 1 -0.219924 -0.519179 14 Inter 0.045 0.06 0.48 0.5 48 151 dead-end 1 -0.220263 -0.519309 13* Junct- 0.040 0.05 0.52 0.6 48 200 dead-end 1 -0.220702 -0.519478 12* Junct 0.052 0.07 0.57 0.6 48 201 dead-end 1 -0.220739 -0.517804 18* Junct 0.186 0.23 0.76 0.9 48 91 high street -0.220782 -0.516137 24* Junct 0.185 0.23 0.95 1.1 48 91 high street -0.220817 -0.514062 32* Junct 0.230 0.29 1.18 1.4 48 90 high street -0.220344 -0.514042 33* Junct- 0.052 0.03 1.23 1.4 96 2 main 2 -0.219539 -0.514007 -3 Waypt#3 0.089 0.06 1.32 1.5 96 2 main 2 routino-3.2/src/test/expected/node-restrictions-WP07.txt 644 233 144 3152 12601522410 16475 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219564 -0.520846 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220666 -0.520893 4* Junct 0.122 0.07 0.12 0.1 96 182 main 1 -0.220682 -0.520141 9* Junct 0.083 0.08 0.20 0.2 64 91 high street -0.219009 -0.520075 10* Waypt#2 0.186 0.17 0.39 0.3 64 2 dead end road -0.220682 -0.520141 9* Junct 0.186 0.17 0.58 0.5 64 182 dead end road -0.220695 -0.519489 12* Change 0.072 0.07 0.65 0.6 64 91 high street -0.220694 -0.519227 15 Inter 0.029 0.04 0.68 0.6 48 89 long road -0.220386 -0.519076 16 Inter 0.038 0.05 0.72 0.6 48 26 long road -0.220961 -0.518928 17 Inter 0.066 0.08 0.78 0.7 48 165 long road -0.220427 -0.518622 18 Inter 0.068 0.09 0.85 0.8 48 29 long road -0.220949 -0.518422 21 Inter 0.062 0.08 0.91 0.9 48 159 long road -0.220455 -0.518238 22 Inter 0.058 0.07 0.97 1.0 48 20 long road -0.220746 -0.518070 23 Inter 0.037 0.04 1.01 1.0 48 149 long road -0.220739 -0.517801 26* Junct 0.029 0.04 1.04 1.0 48 88 long road -0.220784 -0.516035 31* Junct 0.196 0.18 1.23 1.2 64 91 high street -0.219593 -0.515985 -3 Waypt#3 0.132 0.08 1.36 1.3 96 2 main 2 routino-3.2/src/test/expected/turns-WP07.txt 644 233 144 5056 12725336032 14214 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct 0.072 0.04 0.07 0.0 96 182 main 1 -0.219123 -0.520207 12* Inter 0.069 0.09 0.14 0.1 48 91 top road -0.219131 -0.519426 20* Inter 0.086 0.11 0.23 0.2 48 90 top road -0.219135 -0.518823 23* Inter 0.067 0.08 0.29 0.3 48 90 top road -0.219145 -0.517626 33* Inter 0.133 0.17 0.43 0.5 48 90 top road -0.219144 -0.517257 36* Junct 0.041 0.05 0.47 0.5 48 89 top road -0.219291 -0.517193 38 Inter 0.017 0.02 0.48 0.6 48 156 roundabout -0.219352 -0.517060 42 Junct- 0.016 0.02 0.50 0.6 48 114 roundabout -0.219304 -0.516904 45 Inter 0.018 0.02 0.52 0.6 48 72 roundabout -0.219153 -0.516826 46* Junct 0.018 0.02 0.54 0.6 48 27 roundabout -0.219184 -0.515968 55* Junct 0.095 0.12 0.63 0.7 48 92 top road -0.220784 -0.516035 54* Junct 0.178 0.11 0.81 0.8 96 182 main 2 -0.220760 -0.516647 48* Junct 0.068 0.09 0.88 0.9 48 272 high street -0.220739 -0.517425 34* Junct 0.086 0.11 0.96 1.0 48 271 high street -0.220238 -0.517313 -2 Waypt#2 0.057 0.07 1.02 1.1 48 12 loop 3 -0.220089 -0.517279 35* Inter 0.017 0.02 1.04 1.1 48 12 loop 3 -0.219872 -0.517009 43 Inter 0.038 0.05 1.08 1.2 48 51 loop 3 -0.220097 -0.516762 47* Inter 0.037 0.04 1.11 1.2 48 132 loop 3 -0.220760 -0.516647 48* Junct 0.074 0.09 1.19 1.3 48 170 loop 3 -0.220739 -0.517425 34* Junct 0.086 0.11 1.27 1.4 48 271 high street -0.220724 -0.518071 31* Junct 0.071 0.09 1.34 1.5 48 271 high street -0.220708 -0.518842 22* Junct 0.085 0.10 1.43 1.6 48 271 high street -0.220691 -0.519461 19* Junct 0.069 0.09 1.50 1.7 48 271 high street -0.220671 -0.520223 11* Junct 0.084 0.10 1.58 1.8 48 271 high street -0.220666 -0.520893 5* Junct 0.074 0.09 1.66 1.9 48 270 high street -0.221308 -0.520914 4* Junct- 0.071 0.04 1.73 1.9 96 181 main 1 -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 1.75 2.0 96 181 main 1 routino-3.2/src/test/expected/turns-WP16.txt 644 233 144 2153 12601522402 14176 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct- 0.072 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 5* Junct- 0.173 0.11 0.24 0.2 96 182 main 1 -0.221308 -0.520914 4* Junct 0.071 0.04 0.32 0.2 96 181 main 1 -0.221360 -0.518860 21* Junct 0.228 0.28 0.54 0.5 48 91 bottom road -0.221711 -0.518511 26* Waypt#2 0.055 0.07 0.60 0.5 48 135 loop 6 -0.221376 -0.518235 29* Junct 0.048 0.06 0.65 0.6 48 39 loop 6 -0.221360 -0.518860 21* Junct 0.069 0.09 0.72 0.7 48 271 bottom road -0.221308 -0.520914 4* Junct 0.228 0.28 0.94 1.0 48 271 bottom road -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 0.97 1.0 96 181 main 1 routino-3.2/src/test/expected/fake-node-with-loop-WP01.txt 644 233 144 2546 12601522415 16600 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.216904 -0.520770 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.217286 -0.520780 10 Junct- 0.042 0.03 0.04 0.0 96 181 main 1 -0.218086 -0.520797 -2 Waypt#2 0.088 0.06 0.13 0.1 96 181 main 1 -0.218523 -0.520806 9 Junct- 0.048 0.03 0.18 0.1 96 181 main 1 -0.219482 -0.520837 8* Junct 0.106 0.07 0.28 0.2 96 181 main 1 -0.219692 -0.520509 14 Junct- 0.043 0.03 0.33 0.2 96 122 roundabout -0.220082 -0.520522 13 Junct- 0.043 0.03 0.37 0.2 96 181 roundabout -0.220268 -0.520863 7 Inter 0.043 0.03 0.41 0.3 96 241 roundabout -0.220062 -0.521204 4 Junct- 0.044 0.03 0.46 0.3 96 301 roundabout -0.219665 -0.521190 5 Junct- 0.044 0.03 0.50 0.3 96 1 roundabout -0.219482 -0.520837 8* Junct 0.044 0.03 0.55 0.3 96 62 roundabout -0.218523 -0.520806 9 Junct- 0.106 0.07 0.65 0.4 96 1 main 1 -0.217741 -0.520789 -3 Waypt#3 0.086 0.05 0.74 0.5 96 1 main 1 routino-3.2/src/test/expected/loops-WP07.txt 644 233 144 3346 12601522413 14166 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219562 -0.520851 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.520885 5* Junct- 0.073 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 4* Junct 0.049 0.03 0.12 0.1 96 181 main 1 -0.220695 -0.519489 11* Junct 0.156 0.20 0.28 0.3 48 91 high street -0.220739 -0.517801 19* Junct 0.187 0.23 0.47 0.5 48 91 high street -0.220301 -0.517576 22* Junct- 0.054 0.07 0.52 0.6 48 27 loop 2 -0.219946 -0.517397 24 Waypt#2 0.044 0.06 0.56 0.6 48 26 loop 2 -0.219266 -0.517579 21* Junct 0.078 0.10 0.64 0.7 48 345 loop 2 -0.218794 -0.517763 20 Inter 0.056 0.07 0.70 0.8 48 338 loop 2 -0.218417 -0.517462 23* Junct- 0.053 0.07 0.75 0.9 48 38 loop 2 -0.218805 -0.517131 25 Inter 0.056 0.07 0.81 0.9 48 139 loop 2 -0.219266 -0.517579 21* Junct 0.071 0.09 0.88 1.0 48 224 loop 2 -0.219946 -0.517397 24 Inter 0.078 0.10 0.95 1.1 48 165 loop 2 -0.220301 -0.517576 22* Junct- 0.044 0.06 1.00 1.2 48 206 loop 2 -0.220739 -0.517801 19* Junct 0.054 0.07 1.05 1.2 48 207 loop 2 -0.220784 -0.516035 30* Junct 0.196 0.24 1.25 1.5 48 91 high street -0.220311 -0.516015 31* Junct- 0.052 0.03 1.30 1.5 96 2 main 2 -0.219596 -0.515984 -3 Waypt#3 0.079 0.05 1.38 1.6 96 2 main 2 routino-3.2/src/test/expected/loops-WP10.txt 644 233 144 3346 12601522413 14160 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219562 -0.520851 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.520885 5* Junct- 0.073 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 4* Junct 0.049 0.03 0.12 0.1 96 181 main 1 -0.220695 -0.519489 11* Junct 0.156 0.20 0.28 0.3 48 91 high street -0.220739 -0.517801 19* Junct 0.187 0.23 0.47 0.5 48 91 high street -0.220301 -0.517576 22* Junct- 0.054 0.07 0.52 0.6 48 27 loop 2 -0.219946 -0.517397 24 Inter 0.044 0.06 0.56 0.6 48 26 loop 2 -0.219266 -0.517579 21* Junct 0.078 0.10 0.64 0.7 48 345 loop 2 -0.218805 -0.517131 25 Waypt#2 0.071 0.09 0.71 0.8 48 44 loop 2 -0.218417 -0.517462 23* Junct- 0.056 0.07 0.77 0.9 48 319 loop 2 -0.218794 -0.517763 20 Inter 0.053 0.07 0.82 0.9 48 218 loop 2 -0.219266 -0.517579 21* Junct 0.056 0.07 0.88 1.0 48 158 loop 2 -0.219946 -0.517397 24 Inter 0.078 0.10 0.95 1.1 48 165 loop 2 -0.220301 -0.517576 22* Junct- 0.044 0.06 1.00 1.2 48 206 loop 2 -0.220739 -0.517801 19* Junct 0.054 0.07 1.05 1.2 48 207 loop 2 -0.220784 -0.516035 30* Junct 0.196 0.24 1.25 1.5 48 91 high street -0.220311 -0.516015 31* Junct- 0.052 0.03 1.30 1.5 96 2 main 2 -0.219596 -0.515984 -3 Waypt#3 0.079 0.05 1.38 1.6 96 2 main 2 routino-3.2/src/test/expected/turns-WP10.txt 644 233 144 5162 12725336146 14212 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct 0.072 0.04 0.07 0.0 96 182 main 1 -0.219123 -0.520207 12* Inter 0.069 0.09 0.14 0.1 48 91 top road -0.219131 -0.519426 20* Inter 0.086 0.11 0.23 0.2 48 90 top road -0.219135 -0.518823 23* Inter 0.067 0.08 0.29 0.3 48 90 top road -0.219145 -0.517626 33* Inter 0.133 0.17 0.43 0.5 48 90 top road -0.219144 -0.517257 36* Junct 0.041 0.05 0.47 0.5 48 89 top road -0.219291 -0.517193 38 Inter 0.017 0.02 0.48 0.6 48 156 roundabout -0.219352 -0.517060 42 Junct- 0.016 0.02 0.50 0.6 48 114 roundabout -0.219304 -0.516904 45 Inter 0.018 0.02 0.52 0.6 48 72 roundabout -0.219153 -0.516826 46* Junct- 0.018 0.02 0.54 0.6 48 27 roundabout -0.218966 -0.516910 44 Inter 0.022 0.03 0.56 0.6 48 335 roundabout -0.218923 -0.517072 39 Junct- 0.018 0.02 0.58 0.7 48 284 roundabout -0.218998 -0.517207 37 Inter 0.017 0.02 0.59 0.7 48 240 roundabout -0.219144 -0.517257 36* Junct 0.017 0.02 0.61 0.7 48 199 roundabout -0.219145 -0.517626 33* Junct 0.041 0.05 0.65 0.8 48 269 top road -0.219135 -0.518823 23* Junct 0.133 0.17 0.79 0.9 48 270 top road -0.219131 -0.519426 20* Junct 0.067 0.08 0.85 1.0 48 270 top road -0.219123 -0.520207 12* Junct 0.086 0.11 0.94 1.1 48 270 top road -0.218605 -0.520090 -2 Waypt#2 0.059 0.07 1.00 1.2 48 12 loop 4 -0.218474 -0.520060 14* Inter 0.015 0.02 1.01 1.2 48 12 loop 4 -0.218258 -0.519789 16 Inter 0.038 0.05 1.05 1.2 48 51 loop 4 -0.218482 -0.519542 18* Inter 0.037 0.04 1.09 1.3 48 132 loop 4 -0.219131 -0.519426 20* Junct 0.073 0.09 1.16 1.4 48 169 loop 4 -0.219123 -0.520207 12* Junct 0.086 0.11 1.25 1.5 48 270 top road -0.219107 -0.520828 6* Junct 0.069 0.09 1.31 1.6 48 271 top road -0.220666 -0.520893 5* Junct- 0.173 0.11 1.49 1.7 96 182 main 1 -0.221308 -0.520914 4* Junct- 0.071 0.04 1.56 1.7 96 181 main 1 -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 1.59 1.7 96 181 main 1 routino-3.2/src/test/expected/super-or-not-WP05.txt 644 233 144 1602 12635017465 15410 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.216144 -0.515853 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.215941 -0.515611 18 Inter 0.035 0.04 0.04 0.0 48 50 Local road -0.217248 -0.515206 19* Junct 0.152 0.19 0.19 0.2 48 162 Local road -0.217245 -0.519637 11* Junct- 0.493 0.31 0.68 0.5 96 270 Main road -0.217216 -0.523210 8* Junct- 0.397 0.25 1.08 0.8 96 270 Main road -0.217197 -0.525552 5* Junct- 0.260 0.16 1.34 0.9 96 270 Main road -0.217182 -0.527397 -2 Waypt#2 0.204 0.13 1.54 1.1 96 270 Main road routino-3.2/src/test/expected/turns-WP15.txt 644 233 144 6540 12725336336 14221 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct 0.072 0.04 0.07 0.0 96 182 main 1 -0.219123 -0.520207 12* Inter 0.069 0.09 0.14 0.1 48 91 top road -0.219131 -0.519426 20* Inter 0.086 0.11 0.23 0.2 48 90 top road -0.219135 -0.518823 23* Inter 0.067 0.08 0.29 0.3 48 90 top road -0.219145 -0.517626 33* Inter 0.133 0.17 0.43 0.5 48 90 top road -0.219144 -0.517257 36* Junct 0.041 0.05 0.47 0.5 48 89 top road -0.219291 -0.517193 38 Inter 0.017 0.02 0.48 0.6 48 156 roundabout -0.219352 -0.517060 42 Junct- 0.016 0.02 0.50 0.6 48 114 roundabout -0.219304 -0.516904 45 Inter 0.018 0.02 0.52 0.6 48 72 roundabout -0.219153 -0.516826 46* Junct- 0.018 0.02 0.54 0.6 48 27 roundabout -0.218966 -0.516910 44 Inter 0.022 0.03 0.56 0.6 48 335 roundabout -0.218923 -0.517072 39 Junct- 0.018 0.02 0.58 0.7 48 284 roundabout -0.218998 -0.517207 37 Inter 0.017 0.02 0.59 0.7 48 240 roundabout -0.219144 -0.517257 36* Junct 0.017 0.02 0.61 0.7 48 199 roundabout -0.219145 -0.517626 33* Junct 0.041 0.05 0.65 0.8 48 269 top road -0.218619 -0.517921 32* Inter 0.067 0.08 0.72 0.8 48 330 loop 5 -0.218431 -0.518243 28 Waypt#2 0.041 0.05 0.76 0.9 48 300 loop 5 -0.218600 -0.518557 25* Inter 0.039 0.05 0.80 0.9 48 241 loop 5 -0.219135 -0.518823 23* Inter 0.066 0.08 0.86 1.0 48 206 loop 5 -0.219145 -0.517626 33* Inter 0.133 0.17 1.00 1.2 48 90 top road -0.219144 -0.517257 36* Junct 0.041 0.05 1.04 1.2 48 89 top road -0.219291 -0.517193 38 Inter 0.017 0.02 1.06 1.3 48 156 roundabout -0.219352 -0.517060 42 Junct- 0.016 0.02 1.07 1.3 48 114 roundabout -0.219304 -0.516904 45 Inter 0.018 0.02 1.09 1.3 48 72 roundabout -0.219153 -0.516826 46* Junct- 0.018 0.02 1.11 1.3 48 27 roundabout -0.218966 -0.516910 44 Inter 0.022 0.03 1.13 1.3 48 335 roundabout -0.218923 -0.517072 39 Junct- 0.018 0.02 1.15 1.4 48 284 roundabout -0.218998 -0.517207 37 Inter 0.017 0.02 1.17 1.4 48 240 roundabout -0.219144 -0.517257 36* Junct 0.017 0.02 1.18 1.4 48 199 roundabout -0.219145 -0.517626 33* Junct 0.041 0.05 1.22 1.5 48 269 top road -0.219135 -0.518823 23* Junct 0.133 0.17 1.36 1.6 48 270 top road -0.219131 -0.519426 20* Junct 0.067 0.08 1.42 1.7 48 270 top road -0.219123 -0.520207 12* Junct 0.086 0.11 1.51 1.8 48 270 top road -0.219107 -0.520828 6* Junct 0.069 0.09 1.58 1.9 48 271 top road -0.220666 -0.520893 5* Junct- 0.173 0.11 1.75 2.0 96 182 main 1 -0.221308 -0.520914 4* Junct- 0.071 0.04 1.82 2.0 96 181 main 1 -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 1.85 2.1 96 181 main 1 routino-3.2/src/test/expected/node-restrictions-WP03.txt 644 233 144 3426 12601522411 16476 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219564 -0.520846 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220666 -0.520893 4* Junct 0.122 0.07 0.12 0.1 96 182 main 1 -0.220682 -0.520141 9* Junct 0.083 0.08 0.20 0.2 64 91 high street -0.220695 -0.519489 12* Change 0.072 0.07 0.28 0.2 64 91 high street -0.220694 -0.519227 15 Inter 0.029 0.04 0.31 0.3 48 89 long road -0.220386 -0.519076 16 Inter 0.038 0.05 0.34 0.3 48 26 long road -0.220961 -0.518928 17 Inter 0.066 0.08 0.41 0.4 48 165 long road -0.220427 -0.518622 18 Inter 0.068 0.09 0.48 0.5 48 29 long road -0.220949 -0.518422 21 Inter 0.062 0.08 0.54 0.5 48 159 long road -0.220455 -0.518238 22 Inter 0.058 0.07 0.60 0.6 48 20 long road -0.220746 -0.518070 23 Inter 0.037 0.04 0.64 0.7 48 149 long road -0.220739 -0.517801 26* Junct 0.029 0.04 0.66 0.7 48 88 long road -0.221166 -0.517916 24 Inter 0.049 0.06 0.71 0.8 48 195 somepass road -0.221157 -0.518560 -2 Waypt#2 0.070 0.09 0.78 0.8 48 270 somepass road -0.221166 -0.517916 24 Inter 0.070 0.09 0.85 0.9 48 90 somepass road -0.220739 -0.517801 26* Junct 0.049 0.06 0.90 1.0 48 15 somepass road -0.220784 -0.516035 31* Junct 0.196 0.18 1.10 1.2 64 91 high street -0.219593 -0.515985 -3 Waypt#3 0.132 0.08 1.23 1.3 96 2 main 2 routino-3.2/src/test/expected/loop-and-reverse-WP.txt 644 233 144 1327 12606772160 16055 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219526 -0.521010 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220666 -0.521060 4* Junct 0.126 0.08 0.13 0.1 96 182 main 1 -0.220749 -0.517228 -2 Waypt#2 0.426 0.53 0.55 0.6 48 91 low street -0.220817 -0.514062 14* Junct 0.352 0.44 0.90 1.1 48 91 low street -0.219540 -0.514010 -3 Waypt#3 0.141 0.09 1.04 1.1 96 2 main 2 routino-3.2/src/test/expected/node-restrictions-WP08.txt 644 233 144 3152 12601522410 16476 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219564 -0.520846 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220666 -0.520893 4* Junct 0.122 0.07 0.12 0.1 96 182 main 1 -0.220682 -0.520141 9* Junct 0.083 0.08 0.20 0.2 64 91 high street -0.219009 -0.520075 10* Waypt#2 0.186 0.17 0.39 0.3 64 2 dead end road -0.220682 -0.520141 9* Junct 0.186 0.17 0.58 0.5 64 182 dead end road -0.220695 -0.519489 12* Change 0.072 0.07 0.65 0.6 64 91 high street -0.220694 -0.519227 15 Inter 0.029 0.04 0.68 0.6 48 89 long road -0.220386 -0.519076 16 Inter 0.038 0.05 0.72 0.6 48 26 long road -0.220961 -0.518928 17 Inter 0.066 0.08 0.78 0.7 48 165 long road -0.220427 -0.518622 18 Inter 0.068 0.09 0.85 0.8 48 29 long road -0.220949 -0.518422 21 Inter 0.062 0.08 0.91 0.9 48 159 long road -0.220455 -0.518238 22 Inter 0.058 0.07 0.97 1.0 48 20 long road -0.220746 -0.518070 23 Inter 0.037 0.04 1.01 1.0 48 149 long road -0.220739 -0.517801 26* Junct 0.029 0.04 1.04 1.0 48 88 long road -0.220784 -0.516035 31* Junct 0.196 0.18 1.23 1.2 64 91 high street -0.219593 -0.515985 -3 Waypt#3 0.132 0.08 1.36 1.3 96 2 main 2 routino-3.2/src/test/expected/loops-WP08.txt 644 233 144 3465 12601522413 14171 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219562 -0.520851 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.520885 5* Junct- 0.073 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 4* Junct 0.049 0.03 0.12 0.1 96 181 main 1 -0.220695 -0.519489 11* Junct 0.156 0.20 0.28 0.3 48 91 high street -0.220739 -0.517801 19* Junct 0.187 0.23 0.47 0.5 48 91 high street -0.220301 -0.517576 22* Junct- 0.054 0.07 0.52 0.6 48 27 loop 2 -0.219946 -0.517397 24 Inter 0.044 0.06 0.56 0.6 48 26 loop 2 -0.219597 -0.517490 -2 Waypt#2 0.040 0.05 0.60 0.7 48 345 loop 2 -0.219266 -0.517579 21* Junct 0.038 0.05 0.64 0.7 48 345 loop 2 -0.218794 -0.517763 20 Inter 0.056 0.07 0.70 0.8 48 338 loop 2 -0.218417 -0.517462 23* Junct- 0.053 0.07 0.75 0.9 48 38 loop 2 -0.218805 -0.517131 25 Inter 0.056 0.07 0.81 0.9 48 139 loop 2 -0.219266 -0.517579 21* Junct 0.071 0.09 0.88 1.0 48 224 loop 2 -0.219946 -0.517397 24 Inter 0.078 0.10 0.95 1.1 48 165 loop 2 -0.220301 -0.517576 22* Junct- 0.044 0.06 1.00 1.2 48 206 loop 2 -0.220739 -0.517801 19* Junct 0.054 0.07 1.05 1.2 48 207 loop 2 -0.220784 -0.516035 30* Junct 0.196 0.24 1.25 1.5 48 91 high street -0.220311 -0.516015 31* Junct- 0.052 0.03 1.30 1.5 96 2 main 2 -0.219596 -0.515984 -3 Waypt#3 0.079 0.05 1.38 1.6 96 2 main 2 routino-3.2/src/test/expected/loops-WP11.txt 644 233 144 3345 12601522564 14167 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219562 -0.520851 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.520885 5* Junct- 0.073 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 4* Junct 0.049 0.03 0.12 0.1 96 181 main 1 -0.220695 -0.519489 11* Junct 0.156 0.20 0.28 0.3 48 91 high street -0.220739 -0.517801 19* Junct 0.187 0.23 0.47 0.5 48 91 high street -0.220301 -0.517576 22* Junct- 0.054 0.07 0.52 0.6 48 27 loop 2 -0.219946 -0.517397 24 Inter 0.044 0.06 0.56 0.6 48 26 loop 2 -0.219266 -0.517579 21* Junct 0.078 0.10 0.64 0.7 48 345 loop 2 -0.218794 -0.517763 20 Inter 0.056 0.07 0.70 0.8 48 338 loop 2 -0.218417 -0.517462 23* Waypt#2 0.053 0.07 0.75 0.9 48 38 loop 2 -0.218805 -0.517131 25 Inter 0.056 0.07 0.81 0.9 48 139 loop 2 -0.219266 -0.517579 21* Junct 0.071 0.09 0.88 1.0 48 224 loop 2 -0.219946 -0.517397 24 Inter 0.078 0.10 0.95 1.1 48 165 loop 2 -0.220301 -0.517576 22* Junct- 0.044 0.06 1.00 1.2 48 206 loop 2 -0.220739 -0.517801 19* Junct 0.054 0.07 1.05 1.2 48 207 loop 2 -0.220784 -0.516035 30* Junct 0.196 0.24 1.25 1.5 48 91 high street -0.220311 -0.516015 31* Junct- 0.052 0.03 1.30 1.5 96 2 main 2 -0.219596 -0.515984 -3 Waypt#3 0.079 0.05 1.38 1.6 96 2 main 2 routino-3.2/src/test/expected/loop-and-reverse-WP-R.txt 644 233 144 1327 12606772160 16254 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219540 -0.514010 -3 Waypt#3 0.000 0.00 0.00 0.0 -0.220817 -0.514062 14* Junct 0.141 0.09 0.14 0.1 96 182 main 2 -0.220749 -0.517228 -2 Waypt#2 0.352 0.44 0.49 0.5 48 271 low street -0.220666 -0.521060 4* Junct 0.426 0.53 0.92 1.1 48 271 low street -0.219526 -0.521010 -1 Waypt#1 0.126 0.08 1.04 1.1 96 2 main 1 routino-3.2/src/test/expected/coincident-waypoint-WP02.txt 644 233 144 1322 12601522420 17002 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.216959 -0.520771 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.217286 -0.520780 7 Junct- 0.036 0.02 0.04 0.0 96 181 main 1 -0.218523 -0.520806 6 Waypt#2 0.137 0.09 0.17 0.1 96 181 main 1 -0.218523 -0.520806 6 Waypt#3 0.000 0.00 0.17 0.1 96 270 main 1 -0.219117 -0.520825 -4 Waypt#4 0.065 0.04 0.24 0.1 96 181 main 1 routino-3.2/src/test/expected/coincident-waypoint-WP01.txt 644 233 144 1442 12601522420 17004 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.216904 -0.520770 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.217286 -0.520780 7 Junct- 0.042 0.03 0.04 0.0 96 181 main 1 -0.217741 -0.520789 -2 Waypt#2 0.050 0.03 0.09 0.1 96 181 main 1 -0.217741 -0.520789 -3 Waypt#3 0.000 0.00 0.09 0.1 96 270 main 1 -0.218523 -0.520806 6 Junct- 0.086 0.05 0.18 0.1 96 181 main 1 -0.219080 -0.520824 -4 Waypt#4 0.061 0.04 0.24 0.1 96 181 main 1 routino-3.2/src/test/expected/super-or-not-WP04.txt 644 233 144 1602 12635017000 15370 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.217183 -0.527270 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.217197 -0.525552 5* Junct- 0.190 0.12 0.19 0.1 96 90 Main road -0.217216 -0.523210 8* Junct- 0.260 0.16 0.45 0.3 96 90 Main road -0.217245 -0.519637 11* Junct- 0.397 0.25 0.85 0.5 96 90 Main road -0.217248 -0.515206 19* Junct 0.493 0.31 1.34 0.8 96 90 Main road -0.215941 -0.515611 18 Inter 0.152 0.19 1.49 1.0 48 342 Local road -0.216087 -0.515786 -2 Waypt#2 0.025 0.03 1.52 1.1 48 230 Local road routino-3.2/src/test/expected/roundabout-waypoints-WP04.txt 644 233 144 1577 12601522407 17253 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218454 -0.520798 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219482 -0.520837 9* Junct 0.113 0.07 0.11 0.1 96 182 main 1 -0.219692 -0.520509 15 Junct- 0.043 0.03 0.16 0.1 96 122 roundabout -0.219878 -0.520515 -2 Waypt#2 0.020 0.01 0.18 0.1 96 181 roundabout -0.220082 -0.520522 14 Junct- 0.022 0.01 0.20 0.1 96 181 roundabout -0.220268 -0.520863 8* Junct 0.043 0.03 0.24 0.1 96 241 roundabout -0.221566 -0.520921 -3 Waypt#3 0.143 0.09 0.38 0.2 96 182 main 2 routino-3.2/src/test/expected/no-super-WP01.txt 644 233 144 2121 12601522412 14561 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.215814 -0.519419 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.215737 -0.519035 7 Inter 0.043 0.05 0.04 0.1 48 78 road1 -0.215935 -0.518253 10 Inter 0.089 0.11 0.13 0.2 48 104 road1 -0.215772 -0.517713 13 Inter 0.062 0.08 0.19 0.2 48 73 road1 -0.215952 -0.516838 15 Inter 0.099 0.12 0.29 0.4 48 101 road1 -0.215755 -0.515945 19 Inter 0.101 0.12 0.39 0.5 48 77 road1 -0.215897 -0.515462 -2 Waypt#2 0.055 0.07 0.45 0.6 48 106 road1 -0.215755 -0.515945 19 Inter 0.055 0.07 0.50 0.6 48 286 road1 -0.215952 -0.516838 15 Inter 0.101 0.12 0.60 0.8 48 257 road1 -0.215868 -0.517244 -3 Waypt#3 0.046 0.06 0.65 0.8 48 281 road1 routino-3.2/src/test/expected/super-or-not-WP01.txt 644 233 144 1603 12635016647 15406 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.216158 -0.518809 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.216435 -0.518515 13 Inter 0.044 0.06 0.04 0.1 48 133 Local road -0.215866 -0.517931 14 Inter 0.090 0.11 0.13 0.2 48 45 Local road -0.216470 -0.517412 15 Inter 0.088 0.11 0.22 0.3 48 139 Local road -0.215930 -0.516823 16 Inter 0.088 0.11 0.31 0.4 48 47 Local road -0.216451 -0.516221 17 Inter 0.088 0.11 0.40 0.5 48 130 Local road -0.216158 -0.515870 -2 Waypt#2 0.050 0.06 0.45 0.6 48 50 Local road routino-3.2/src/test/expected/turns-WP01.txt 644 233 144 2530 12725335423 14203 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct- 0.072 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 5* Junct 0.173 0.11 0.24 0.2 96 182 main 1 -0.220671 -0.520223 11* Inter 0.074 0.09 0.32 0.2 48 90 high street -0.220691 -0.519461 19* Junct 0.084 0.10 0.40 0.3 48 91 high street -0.220111 -0.519553 17 Inter 0.065 0.08 0.47 0.4 48 351 loop 1 -0.219817 -0.519807 15 Inter 0.043 0.05 0.51 0.5 48 319 loop 1 -0.220067 -0.520109 13* Inter 0.043 0.05 0.55 0.5 48 230 loop 1 -0.220191 -0.520132 -2 Waypt#2 0.014 0.02 0.57 0.6 48 190 loop 1 -0.220671 -0.520223 11* Junct 0.054 0.07 0.62 0.6 48 190 loop 1 -0.220666 -0.520893 5* Junct 0.074 0.09 0.70 0.7 48 270 high street -0.221308 -0.520914 4* Junct- 0.071 0.04 0.77 0.8 96 181 main 1 -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 0.79 0.8 96 181 main 1 routino-3.2/src/test/expected/loops-WP03.txt 644 233 144 3464 12601522541 14165 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219562 -0.520851 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.520885 5* Junct- 0.073 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 4* Junct 0.049 0.03 0.12 0.1 96 181 main 1 -0.220695 -0.519489 11* Junct 0.156 0.20 0.28 0.3 48 91 high street -0.220280 -0.519256 15* Junct- 0.052 0.07 0.33 0.3 48 29 loop 1 -0.219910 -0.519112 17 Inter 0.044 0.06 0.37 0.4 48 21 loop 1 -0.219578 -0.519198 -2 Waypt#2 0.038 0.05 0.41 0.4 48 345 loop 1 -0.219237 -0.519286 13* Junct 0.039 0.05 0.45 0.5 48 345 loop 1 -0.218764 -0.519471 12 Inter 0.056 0.07 0.51 0.6 48 338 loop 1 -0.218380 -0.519134 16 Inter 0.056 0.07 0.56 0.6 48 41 loop 1 -0.218776 -0.518838 18 Inter 0.055 0.07 0.62 0.7 48 143 loop 1 -0.219237 -0.519286 13* Junct 0.071 0.09 0.69 0.8 48 224 loop 1 -0.219910 -0.519112 17 Inter 0.077 0.10 0.77 0.9 48 165 loop 1 -0.220280 -0.519256 15* Junct- 0.044 0.06 0.81 0.9 48 201 loop 1 -0.220695 -0.519489 11* Junct 0.052 0.07 0.86 1.0 48 209 loop 1 -0.220739 -0.517801 19* Junct 0.187 0.23 1.05 1.2 48 91 high street -0.220784 -0.516035 30* Junct 0.196 0.24 1.25 1.5 48 91 high street -0.220311 -0.516015 31* Junct- 0.052 0.03 1.30 1.5 96 2 main 2 -0.219596 -0.515984 -3 Waypt#3 0.079 0.05 1.38 1.6 96 2 main 2 routino-3.2/src/test/expected/turns-WP11.txt 644 233 144 4601 12725336173 14210 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct 0.072 0.04 0.07 0.0 96 182 main 1 -0.219123 -0.520207 12* Inter 0.069 0.09 0.14 0.1 48 91 top road -0.219131 -0.519426 20* Inter 0.086 0.11 0.23 0.2 48 90 top road -0.219135 -0.518823 23* Inter 0.067 0.08 0.29 0.3 48 90 top road -0.219145 -0.517626 33* Inter 0.133 0.17 0.43 0.5 48 90 top road -0.219144 -0.517257 36* Junct 0.041 0.05 0.47 0.5 48 89 top road -0.219291 -0.517193 38 Inter 0.017 0.02 0.48 0.6 48 156 roundabout -0.219352 -0.517060 42 Junct- 0.016 0.02 0.50 0.6 48 114 roundabout -0.219304 -0.516904 45 Inter 0.018 0.02 0.52 0.6 48 72 roundabout -0.219153 -0.516826 46* Junct- 0.018 0.02 0.54 0.6 48 27 roundabout -0.218966 -0.516910 44 Inter 0.022 0.03 0.56 0.6 48 335 roundabout -0.218923 -0.517072 39 Junct- 0.018 0.02 0.58 0.7 48 284 roundabout -0.218998 -0.517207 37 Inter 0.017 0.02 0.59 0.7 48 240 roundabout -0.219144 -0.517257 36* Junct 0.017 0.02 0.61 0.7 48 199 roundabout -0.219145 -0.517626 33* Junct 0.041 0.05 0.65 0.8 48 269 top road -0.219135 -0.518823 23* Junct 0.133 0.17 0.79 0.9 48 270 top road -0.219131 -0.519426 20* Junct 0.067 0.08 0.85 1.0 48 270 top road -0.218482 -0.519542 18* Inter 0.073 0.09 0.93 1.1 48 349 loop 4 -0.218258 -0.519789 16 Inter 0.037 0.04 0.96 1.1 48 312 loop 4 -0.218474 -0.520060 14* Waypt#2 0.038 0.05 1.00 1.2 48 231 loop 4 -0.219123 -0.520207 12* Junct 0.074 0.09 1.07 1.3 48 192 loop 4 -0.219107 -0.520828 6* Junct 0.069 0.09 1.14 1.4 48 271 top road -0.220666 -0.520893 5* Junct- 0.173 0.11 1.32 1.5 96 182 main 1 -0.221308 -0.520914 4* Junct- 0.071 0.04 1.39 1.5 96 181 main 1 -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 1.41 1.5 96 181 main 1 routino-3.2/src/test/expected/roundabout-waypoints-WP06.txt 644 233 144 1577 12601522406 17254 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218454 -0.520798 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219482 -0.520837 9* Junct 0.113 0.07 0.11 0.1 96 182 main 1 -0.219692 -0.520509 15 Junct- 0.043 0.03 0.16 0.1 96 122 roundabout -0.220082 -0.520522 14 Junct- 0.043 0.03 0.20 0.1 96 181 roundabout -0.220171 -0.520685 -2 Waypt#2 0.020 0.01 0.22 0.1 96 241 roundabout -0.220268 -0.520863 8* Junct 0.022 0.01 0.24 0.1 96 241 roundabout -0.221566 -0.520921 -3 Waypt#3 0.143 0.09 0.38 0.2 96 182 main 2 routino-3.2/src/test/expected/turns-WP04.txt 644 233 144 3767 12725335624 14226 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct- 0.072 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 5* Junct 0.173 0.11 0.24 0.2 96 182 main 1 -0.220671 -0.520223 11* Inter 0.074 0.09 0.32 0.2 48 90 high street -0.220691 -0.519461 19* Junct 0.084 0.10 0.40 0.3 48 91 high street -0.220708 -0.518842 22* Inter 0.069 0.09 0.47 0.4 48 91 high street -0.220724 -0.518071 31* Junct 0.085 0.10 0.56 0.5 48 91 high street -0.220143 -0.518162 30 Inter 0.065 0.08 0.62 0.6 48 351 loop 2 -0.219850 -0.518416 27 Inter 0.043 0.05 0.67 0.7 48 319 loop 2 -0.220100 -0.518718 24* Inter 0.043 0.05 0.71 0.7 48 230 loop 2 -0.220206 -0.518739 -2 Waypt#2 0.012 0.01 0.72 0.7 48 191 loop 2 -0.220708 -0.518842 22* Inter 0.057 0.07 0.78 0.8 48 191 loop 2 -0.220724 -0.518071 31* Junct 0.085 0.10 0.86 0.9 48 91 high street -0.220739 -0.517425 34* Inter 0.071 0.09 0.93 1.0 48 91 high street -0.220760 -0.516647 48* Inter 0.086 0.11 1.02 1.1 48 91 high street -0.220784 -0.516035 54* Junct 0.068 0.09 1.09 1.2 48 92 high street -0.221431 -0.516056 53* Junct 0.072 0.04 1.16 1.2 96 181 main 2 -0.221376 -0.518235 29* Junct 0.242 0.30 1.40 1.5 48 271 bottom road -0.221360 -0.518860 21* Junct 0.069 0.09 1.47 1.6 48 271 bottom road -0.221308 -0.520914 4* Junct 0.228 0.28 1.70 1.9 48 271 bottom road -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 1.73 1.9 96 181 main 1 routino-3.2/src/test/expected/node-restrictions-WP06.txt 644 233 144 3416 12601522410 16477 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219564 -0.520846 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220666 -0.520893 4* Junct 0.122 0.07 0.12 0.1 96 182 main 1 -0.220682 -0.520141 9* Junct 0.083 0.08 0.20 0.2 64 91 high street -0.220695 -0.519489 12* Change 0.072 0.07 0.28 0.2 64 91 high street -0.220694 -0.519227 15 Inter 0.029 0.04 0.31 0.3 48 89 long road -0.220386 -0.519076 16 Inter 0.038 0.05 0.34 0.3 48 26 long road -0.220961 -0.518928 17 Inter 0.066 0.08 0.41 0.4 48 165 long road -0.220427 -0.518622 18 Inter 0.068 0.09 0.48 0.5 48 29 long road -0.220949 -0.518422 21 Inter 0.062 0.08 0.54 0.5 48 159 long road -0.220455 -0.518238 22 Inter 0.058 0.07 0.60 0.6 48 20 long road -0.220746 -0.518070 23 Inter 0.037 0.04 0.64 0.7 48 149 long road -0.220739 -0.517801 26* Junct 0.029 0.04 0.66 0.7 48 88 long road -0.220212 -0.517903 25 Inter 0.059 0.07 0.72 0.8 48 349 nopass road -0.220176 -0.518543 -2 Waypt#2 0.070 0.09 0.79 0.9 48 273 nopass road -0.220212 -0.517903 25 Inter 0.070 0.09 0.86 0.9 48 93 nopass road -0.220739 -0.517801 26* Junct 0.059 0.07 0.92 1.0 48 169 nopass road -0.220784 -0.516035 31* Junct 0.196 0.18 1.12 1.2 64 91 high street -0.219593 -0.515985 -3 Waypt#3 0.132 0.08 1.25 1.3 96 2 main 2 routino-3.2/src/test/expected/turns-WP05.txt 644 233 144 3650 12725335745 14222 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct- 0.072 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 5* Junct 0.173 0.11 0.24 0.2 96 182 main 1 -0.220671 -0.520223 11* Inter 0.074 0.09 0.32 0.2 48 90 high street -0.220691 -0.519461 19* Junct 0.084 0.10 0.40 0.3 48 91 high street -0.220708 -0.518842 22* Inter 0.069 0.09 0.47 0.4 48 91 high street -0.220724 -0.518071 31* Junct 0.085 0.10 0.56 0.5 48 91 high street -0.220143 -0.518162 30 Inter 0.065 0.08 0.62 0.6 48 351 loop 2 -0.219850 -0.518416 27 Inter 0.043 0.05 0.67 0.7 48 319 loop 2 -0.220100 -0.518718 24* Waypt#2 0.043 0.05 0.71 0.7 48 230 loop 2 -0.220708 -0.518842 22* Inter 0.069 0.09 0.78 0.8 48 191 loop 2 -0.220724 -0.518071 31* Junct 0.085 0.10 0.86 0.9 48 91 high street -0.220739 -0.517425 34* Inter 0.071 0.09 0.93 1.0 48 91 high street -0.220760 -0.516647 48* Inter 0.086 0.11 1.02 1.1 48 91 high street -0.220784 -0.516035 54* Junct 0.068 0.09 1.09 1.2 48 92 high street -0.221431 -0.516056 53* Junct 0.072 0.04 1.16 1.2 96 181 main 2 -0.221376 -0.518235 29* Junct 0.242 0.30 1.40 1.5 48 271 bottom road -0.221360 -0.518860 21* Junct 0.069 0.09 1.47 1.6 48 271 bottom road -0.221308 -0.520914 4* Junct 0.228 0.28 1.70 1.9 48 271 bottom road -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 1.73 1.9 96 181 main 1 routino-3.2/src/test/expected/dead-ends-WP05.txt 644 233 144 2307 12601522416 14653 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219535 -0.521016 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.521052 5* Junct- 0.076 0.05 0.08 0.0 96 182 main 1 -0.220666 -0.521060 4* Junct 0.049 0.03 0.12 0.1 96 180 main 1 -0.220702 -0.519478 12* Junct 0.176 0.22 0.30 0.3 48 91 high street -0.220739 -0.517804 18* Junct 0.186 0.23 0.49 0.5 48 91 high street -0.220296 -0.517634 20* Waypt#2 0.052 0.07 0.54 0.6 48 21 dead-end 2 -0.220739 -0.517804 18* Junct 0.052 0.07 0.59 0.7 48 201 dead-end 2 -0.220782 -0.516137 24* Junct 0.185 0.23 0.78 0.9 48 91 high street -0.220817 -0.514062 32* Junct 0.230 0.29 1.01 1.2 48 90 high street -0.220344 -0.514042 33* Junct- 0.052 0.03 1.06 1.2 96 2 main 2 -0.219539 -0.514007 -3 Waypt#3 0.089 0.06 1.15 1.3 96 2 main 2 routino-3.2/src/test/expected/dead-ends-WP02.txt 644 233 144 2557 12601522417 14660 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219535 -0.521016 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.521052 5* Junct- 0.076 0.05 0.08 0.0 96 182 main 1 -0.220666 -0.521060 4* Junct 0.049 0.03 0.12 0.1 96 180 main 1 -0.220702 -0.519478 12* Junct 0.176 0.22 0.30 0.3 48 91 high street -0.220263 -0.519309 13* Junct- 0.052 0.07 0.35 0.4 48 21 dead-end 1 -0.219924 -0.519179 14 Waypt#2 0.040 0.05 0.39 0.4 48 20 dead-end 1 -0.220263 -0.519309 13* Junct- 0.040 0.05 0.43 0.5 48 200 dead-end 1 -0.220702 -0.519478 12* Junct 0.052 0.07 0.48 0.5 48 201 dead-end 1 -0.220739 -0.517804 18* Junct 0.186 0.23 0.67 0.8 48 91 high street -0.220782 -0.516137 24* Junct 0.185 0.23 0.86 1.0 48 91 high street -0.220817 -0.514062 32* Junct 0.230 0.29 1.09 1.3 48 90 high street -0.220344 -0.514042 33* Junct- 0.052 0.03 1.14 1.3 96 2 main 2 -0.219539 -0.514007 -3 Waypt#3 0.089 0.06 1.23 1.4 96 2 main 2 routino-3.2/src/test/expected/loops-WP04.txt 644 233 144 3464 12601522414 14165 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219562 -0.520851 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.520885 5* Junct- 0.073 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 4* Junct 0.049 0.03 0.12 0.1 96 181 main 1 -0.220695 -0.519489 11* Junct 0.156 0.20 0.28 0.3 48 91 high street -0.220280 -0.519256 15* Junct- 0.052 0.07 0.33 0.3 48 29 loop 1 -0.219910 -0.519112 17 Inter 0.044 0.06 0.37 0.4 48 21 loop 1 -0.219237 -0.519286 13* Junct 0.077 0.10 0.45 0.5 48 345 loop 1 -0.218997 -0.519053 -2 Waypt#2 0.037 0.04 0.49 0.5 48 44 loop 1 -0.218776 -0.518838 18 Inter 0.034 0.04 0.52 0.6 48 44 loop 1 -0.218380 -0.519134 16 Inter 0.055 0.07 0.58 0.6 48 323 loop 1 -0.218764 -0.519471 12 Inter 0.056 0.07 0.63 0.7 48 221 loop 1 -0.219237 -0.519286 13* Junct 0.056 0.07 0.69 0.8 48 158 loop 1 -0.219910 -0.519112 17 Inter 0.077 0.10 0.77 0.9 48 165 loop 1 -0.220280 -0.519256 15* Junct- 0.044 0.06 0.81 0.9 48 201 loop 1 -0.220695 -0.519489 11* Junct 0.052 0.07 0.86 1.0 48 209 loop 1 -0.220739 -0.517801 19* Junct 0.187 0.23 1.05 1.2 48 91 high street -0.220784 -0.516035 30* Junct 0.196 0.24 1.25 1.5 48 91 high street -0.220311 -0.516015 31* Junct- 0.052 0.03 1.30 1.5 96 2 main 2 -0.219596 -0.515984 -3 Waypt#3 0.079 0.05 1.38 1.6 96 2 main 2 routino-3.2/src/test/expected/turns-WP13.txt 644 233 144 6657 12725336245 14227 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct 0.072 0.04 0.07 0.0 96 182 main 1 -0.219123 -0.520207 12* Inter 0.069 0.09 0.14 0.1 48 91 top road -0.219131 -0.519426 20* Inter 0.086 0.11 0.23 0.2 48 90 top road -0.219135 -0.518823 23* Inter 0.067 0.08 0.29 0.3 48 90 top road -0.219145 -0.517626 33* Inter 0.133 0.17 0.43 0.5 48 90 top road -0.219144 -0.517257 36* Junct 0.041 0.05 0.47 0.5 48 89 top road -0.219291 -0.517193 38 Inter 0.017 0.02 0.48 0.6 48 156 roundabout -0.219352 -0.517060 42 Junct- 0.016 0.02 0.50 0.6 48 114 roundabout -0.219304 -0.516904 45 Inter 0.018 0.02 0.52 0.6 48 72 roundabout -0.219153 -0.516826 46* Junct- 0.018 0.02 0.54 0.6 48 27 roundabout -0.218966 -0.516910 44 Inter 0.022 0.03 0.56 0.6 48 335 roundabout -0.218923 -0.517072 39 Junct- 0.018 0.02 0.58 0.7 48 284 roundabout -0.218998 -0.517207 37 Inter 0.017 0.02 0.59 0.7 48 240 roundabout -0.219144 -0.517257 36* Junct 0.017 0.02 0.61 0.7 48 199 roundabout -0.219145 -0.517626 33* Junct 0.041 0.05 0.65 0.8 48 269 top road -0.218619 -0.517921 32* Inter 0.067 0.08 0.72 0.8 48 330 loop 5 -0.218431 -0.518243 28 Inter 0.041 0.05 0.76 0.9 48 300 loop 5 -0.218600 -0.518557 25* Inter 0.039 0.05 0.80 0.9 48 241 loop 5 -0.218691 -0.518602 -2 Waypt#2 0.011 0.01 0.81 1.0 48 206 loop 5 -0.219135 -0.518823 23* Inter 0.054 0.07 0.86 1.0 48 206 loop 5 -0.219145 -0.517626 33* Inter 0.133 0.17 1.00 1.2 48 90 top road -0.219144 -0.517257 36* Junct 0.041 0.05 1.04 1.2 48 89 top road -0.219291 -0.517193 38 Inter 0.017 0.02 1.05 1.3 48 156 roundabout -0.219352 -0.517060 42 Junct- 0.016 0.02 1.07 1.3 48 114 roundabout -0.219304 -0.516904 45 Inter 0.018 0.02 1.09 1.3 48 72 roundabout -0.219153 -0.516826 46* Junct- 0.018 0.02 1.11 1.3 48 27 roundabout -0.218966 -0.516910 44 Inter 0.022 0.03 1.13 1.3 48 335 roundabout -0.218923 -0.517072 39 Junct- 0.018 0.02 1.15 1.4 48 284 roundabout -0.218998 -0.517207 37 Inter 0.017 0.02 1.16 1.4 48 240 roundabout -0.219144 -0.517257 36* Junct 0.017 0.02 1.18 1.4 48 199 roundabout -0.219145 -0.517626 33* Junct 0.041 0.05 1.22 1.5 48 269 top road -0.219135 -0.518823 23* Junct 0.133 0.17 1.35 1.6 48 270 top road -0.219131 -0.519426 20* Junct 0.067 0.08 1.42 1.7 48 270 top road -0.219123 -0.520207 12* Junct 0.086 0.11 1.51 1.8 48 270 top road -0.219107 -0.520828 6* Junct 0.069 0.09 1.58 1.9 48 271 top road -0.220666 -0.520893 5* Junct- 0.173 0.11 1.75 2.0 96 182 main 1 -0.221308 -0.520914 4* Junct- 0.071 0.04 1.82 2.0 96 181 main 1 -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 1.85 2.1 96 181 main 1 routino-3.2/src/test/expected/roundabout-waypoints-WP02.txt 644 233 144 1577 12601522407 17251 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218454 -0.520798 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219482 -0.520837 9* Junct 0.113 0.07 0.11 0.1 96 182 main 1 -0.219577 -0.520689 -2 Waypt#2 0.019 0.01 0.13 0.1 96 122 roundabout -0.219692 -0.520509 15 Junct- 0.023 0.01 0.15 0.1 96 122 roundabout -0.220082 -0.520522 14 Junct- 0.043 0.03 0.20 0.1 96 181 roundabout -0.220268 -0.520863 8* Junct 0.043 0.03 0.24 0.1 96 241 roundabout -0.221566 -0.520921 -3 Waypt#3 0.143 0.09 0.38 0.2 96 182 main 2 routino-3.2/src/test/expected/dead-ends-WP04.txt 644 233 144 3273 12601522416 14655 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219535 -0.521016 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.521052 5* Junct- 0.076 0.05 0.08 0.0 96 182 main 1 -0.220666 -0.521060 4* Junct 0.049 0.03 0.12 0.1 96 180 main 1 -0.220702 -0.519478 12* Junct 0.176 0.22 0.30 0.3 48 91 high street -0.220263 -0.519309 13* Junct- 0.052 0.07 0.35 0.4 48 21 dead-end 1 -0.219924 -0.519179 14 Inter 0.040 0.05 0.39 0.4 48 20 dead-end 1 -0.219235 -0.519555 11 Inter 0.087 0.11 0.48 0.5 48 331 dead-end 1 -0.218387 -0.519137 15 Waypt#2 0.105 0.13 0.58 0.7 48 26 dead-end 1 -0.219235 -0.519555 11 Inter 0.105 0.13 0.69 0.8 48 206 dead-end 1 -0.219924 -0.519179 14 Inter 0.087 0.11 0.78 0.9 48 151 dead-end 1 -0.220263 -0.519309 13* Junct- 0.040 0.05 0.82 0.9 48 200 dead-end 1 -0.220702 -0.519478 12* Junct 0.052 0.07 0.87 1.0 48 201 dead-end 1 -0.220739 -0.517804 18* Junct 0.186 0.23 1.05 1.2 48 91 high street -0.220782 -0.516137 24* Junct 0.185 0.23 1.24 1.5 48 91 high street -0.220817 -0.514062 32* Junct 0.230 0.29 1.47 1.8 48 90 high street -0.220344 -0.514042 33* Junct- 0.052 0.03 1.52 1.8 96 2 main 2 -0.219539 -0.514007 -3 Waypt#3 0.089 0.06 1.61 1.8 96 2 main 2 routino-3.2/src/test/expected/dead-ends-WP08.txt 644 233 144 2307 12601522416 14656 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219535 -0.521016 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.521052 5* Junct- 0.076 0.05 0.08 0.0 96 182 main 1 -0.220666 -0.521060 4* Junct 0.049 0.03 0.12 0.1 96 180 main 1 -0.220702 -0.519478 12* Junct 0.176 0.22 0.30 0.3 48 91 high street -0.220739 -0.517804 18* Junct 0.186 0.23 0.49 0.5 48 91 high street -0.220782 -0.516137 24* Junct 0.185 0.23 0.67 0.8 48 91 high street -0.220361 -0.515961 25* Waypt#2 0.050 0.06 0.72 0.8 48 22 dead-end 3 -0.220782 -0.516137 24* Junct 0.050 0.06 0.77 0.9 48 202 dead-end 3 -0.220817 -0.514062 32* Junct 0.230 0.29 1.00 1.2 48 90 high street -0.220344 -0.514042 33* Junct- 0.052 0.03 1.05 1.2 96 2 main 2 -0.219539 -0.514007 -3 Waypt#3 0.089 0.06 1.14 1.3 96 2 main 2 routino-3.2/src/test/expected/roundabout-waypoints-WP03.txt 644 233 144 1453 12601522407 17243 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218454 -0.520798 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219482 -0.520837 9* Junct 0.113 0.07 0.11 0.1 96 182 main 1 -0.219692 -0.520509 15 Waypt#2 0.043 0.03 0.16 0.1 96 122 roundabout -0.220082 -0.520522 14 Junct- 0.043 0.03 0.20 0.1 96 181 roundabout -0.220268 -0.520863 8* Junct 0.043 0.03 0.24 0.1 96 241 roundabout -0.221566 -0.520921 -3 Waypt#3 0.143 0.09 0.39 0.2 96 182 main 2 routino-3.2/src/test/expected/super-or-not-WP03.txt 644 233 144 1212 12635016730 15375 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.217245 -0.519637 11* Waypt#1 0.000 0.00 0.00 0.0 -0.215919 -0.519064 12 Inter 0.160 0.20 0.16 0.2 48 23 Local road -0.216435 -0.518515 13 Inter 0.083 0.10 0.24 0.3 48 133 Local road -0.215866 -0.517931 14 Waypt#2 0.090 0.11 0.33 0.4 48 45 Local road routino-3.2/src/test/expected/dead-ends-WP07.txt 644 233 144 3025 12601522416 14653 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219535 -0.521016 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.521052 5* Junct- 0.076 0.05 0.08 0.0 96 182 main 1 -0.220666 -0.521060 4* Junct 0.049 0.03 0.12 0.1 96 180 main 1 -0.220702 -0.519478 12* Junct 0.176 0.22 0.30 0.3 48 91 high street -0.220739 -0.517804 18* Junct 0.186 0.23 0.49 0.5 48 91 high street -0.220296 -0.517634 20* Junct- 0.052 0.07 0.54 0.6 48 21 dead-end 2 -0.219991 -0.517512 21 Inter 0.036 0.04 0.57 0.6 48 21 dead-end 2 -0.219635 -0.517707 -2 Waypt#2 0.045 0.06 0.62 0.7 48 331 dead-end 2 -0.219991 -0.517512 21 Inter 0.045 0.06 0.67 0.7 48 151 dead-end 2 -0.220296 -0.517634 20* Junct- 0.036 0.04 0.70 0.8 48 201 dead-end 2 -0.220739 -0.517804 18* Junct 0.052 0.07 0.75 0.9 48 201 dead-end 2 -0.220782 -0.516137 24* Junct 0.185 0.23 0.94 1.1 48 91 high street -0.220817 -0.514062 32* Junct 0.230 0.29 1.17 1.4 48 90 high street -0.220344 -0.514042 33* Junct- 0.052 0.03 1.22 1.4 96 2 main 2 -0.219539 -0.514007 -3 Waypt#3 0.089 0.06 1.31 1.5 96 2 main 2 routino-3.2/src/test/expected/turns-WP09.txt 644 233 144 4467 12725336134 14226 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct 0.072 0.04 0.07 0.0 96 182 main 1 -0.219123 -0.520207 12* Inter 0.069 0.09 0.14 0.1 48 91 top road -0.219131 -0.519426 20* Inter 0.086 0.11 0.23 0.2 48 90 top road -0.219135 -0.518823 23* Inter 0.067 0.08 0.29 0.3 48 90 top road -0.219145 -0.517626 33* Inter 0.133 0.17 0.43 0.5 48 90 top road -0.219144 -0.517257 36* Junct 0.041 0.05 0.47 0.5 48 89 top road -0.219291 -0.517193 38 Inter 0.017 0.02 0.48 0.6 48 156 roundabout -0.219352 -0.517060 42 Junct- 0.016 0.02 0.50 0.6 48 114 roundabout -0.219304 -0.516904 45 Inter 0.018 0.02 0.52 0.6 48 72 roundabout -0.219153 -0.516826 46* Junct 0.018 0.02 0.54 0.6 48 27 roundabout -0.219184 -0.515968 55* Junct 0.095 0.12 0.63 0.7 48 92 top road -0.220784 -0.516035 54* Junct 0.178 0.11 0.81 0.8 96 182 main 2 -0.220760 -0.516647 48* Junct 0.068 0.09 0.88 0.9 48 272 high street -0.220097 -0.516762 47* Inter 0.074 0.09 0.95 1.0 48 350 loop 3 -0.219872 -0.517009 43 Waypt#2 0.037 0.04 0.99 1.1 48 312 loop 3 -0.220089 -0.517279 35* Inter 0.038 0.05 1.03 1.1 48 231 loop 3 -0.220739 -0.517425 34* Junct 0.074 0.09 1.10 1.2 48 192 loop 3 -0.220724 -0.518071 31* Junct 0.071 0.09 1.17 1.3 48 271 high street -0.220708 -0.518842 22* Junct 0.085 0.10 1.26 1.4 48 271 high street -0.220691 -0.519461 19* Junct 0.069 0.09 1.33 1.5 48 271 high street -0.220671 -0.520223 11* Junct 0.084 0.10 1.41 1.6 48 271 high street -0.220666 -0.520893 5* Junct 0.074 0.09 1.48 1.7 48 270 high street -0.221308 -0.520914 4* Junct- 0.071 0.04 1.55 1.7 96 181 main 1 -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 1.58 1.7 96 181 main 1 routino-3.2/src/test/expected/dead-ends-WP06.txt 644 233 144 2557 12601522416 14663 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.219535 -0.521016 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.220223 -0.521052 5* Junct- 0.076 0.05 0.08 0.0 96 182 main 1 -0.220666 -0.521060 4* Junct 0.049 0.03 0.12 0.1 96 180 main 1 -0.220702 -0.519478 12* Junct 0.176 0.22 0.30 0.3 48 91 high street -0.220739 -0.517804 18* Junct 0.186 0.23 0.49 0.5 48 91 high street -0.220296 -0.517634 20* Junct- 0.052 0.07 0.54 0.6 48 21 dead-end 2 -0.219991 -0.517512 21 Waypt#2 0.036 0.04 0.57 0.6 48 21 dead-end 2 -0.220296 -0.517634 20* Junct- 0.036 0.04 0.61 0.7 48 201 dead-end 2 -0.220739 -0.517804 18* Junct 0.052 0.07 0.66 0.7 48 201 dead-end 2 -0.220782 -0.516137 24* Junct 0.185 0.23 0.85 1.0 48 91 high street -0.220817 -0.514062 32* Junct 0.230 0.29 1.08 1.3 48 90 high street -0.220344 -0.514042 33* Junct- 0.052 0.03 1.13 1.3 96 2 main 2 -0.219539 -0.514007 -3 Waypt#3 0.089 0.06 1.22 1.4 96 2 main 2 routino-3.2/src/test/expected/roundabout-waypoints-WP05.txt 644 233 144 1453 12601522407 17245 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218454 -0.520798 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219482 -0.520837 9* Junct 0.113 0.07 0.11 0.1 96 182 main 1 -0.219692 -0.520509 15 Junct- 0.043 0.03 0.16 0.1 96 122 roundabout -0.220082 -0.520522 14 Waypt#2 0.043 0.03 0.20 0.1 96 181 roundabout -0.220268 -0.520863 8* Junct 0.043 0.03 0.24 0.1 96 241 roundabout -0.221566 -0.520921 -3 Waypt#3 0.143 0.09 0.39 0.2 96 182 main 2 routino-3.2/src/test/expected/turns-WP03.txt 644 233 144 2411 12725335533 14205 0# Creator : Routino - http://www.routino.org/ # Source : Routino test cases - (c) Andrew M. Bishop # License : GNU Affero General Public License v3 or later # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n -0.218453 -0.520799 -1 Waypt#1 0.000 0.00 0.00 0.0 -0.219107 -0.520828 6* Junct- 0.072 0.04 0.07 0.0 96 182 main 1 -0.220666 -0.520893 5* Junct 0.173 0.11 0.24 0.2 96 182 main 1 -0.220671 -0.520223 11* Inter 0.074 0.09 0.32 0.2 48 90 high street -0.220691 -0.519461 19* Junct 0.084 0.10 0.40 0.3 48 91 high street -0.220111 -0.519553 17 Inter 0.065 0.08 0.47 0.4 48 351 loop 1 -0.219817 -0.519807 15 Waypt#2 0.043 0.05 0.51 0.5 48 319 loop 1 -0.220067 -0.520109 13* Inter 0.043 0.05 0.55 0.5 48 230 loop 1 -0.220671 -0.520223 11* Junct 0.068 0.09 0.62 0.6 48 190 loop 1 -0.220666 -0.520893 5* Junct 0.074 0.09 0.70 0.7 48 270 high street -0.221308 -0.520914 4* Junct- 0.071 0.04 0.77 0.8 96 181 main 1 -0.221561 -0.520922 -3 Waypt#3 0.027 0.02 0.79 0.8 96 181 main 1 routino-3.2/src/test/invalid-turn-relations.sh 777 233 144 0 12064636362 17334 2only-split.shroutino-3.2/src/test/roundabout-waypoints.osm 644 233 144 10276 12327506431 14761 0 routino-3.2/src/test/roundabout-waypoints.sh 777 233 144 0 12317323573 17574 2start-1-finish.shroutino-3.2/src/test/turns.sh 777 233 144 0 12064636362 14534 2start-1-finish.shroutino-3.2/src/test/fake-node-with-loop.sh 777 233 144 0 12326742550 15236 2a-b-c.shroutino-3.2/src/test/no-super.osm 644 233 144 11616 12064636362 12320 0 routino-3.2/src/test/turns.osm 644 233 144 43517 12064636362 11730 0 routino-3.2/src/types.c 644 233 144 32536 12563633052 10362 0/*************************************** Functions for handling the data types. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include "types.h" /*++++++++++++++++++++++++++++++++++++++ Decide on the type of a way given the "highway" parameter. Highway HighwayType Returns the highway type of the way. const char *highway The string containing the type of the way. ++++++++++++++++++++++++++++++++++++++*/ Highway HighwayType(const char *highway) { switch(*highway) { case 'c': if(!strcmp(highway,"cycleway")) return(Highway_Cycleway); break; case 'f': if(!strcmp(highway,"ferry")) return(Highway_Ferry); break; case 'm': if(!strcmp(highway,"motorway")) return(Highway_Motorway); break; case 'p': if(!strcmp(highway,"primary")) return(Highway_Primary); if(!strcmp(highway,"path")) return(Highway_Path); break; case 'r': if(!strcmp(highway,"residential")) return(Highway_Residential); break; case 's': if(!strcmp(highway,"secondary")) return(Highway_Secondary); if(!strcmp(highway,"service")) return(Highway_Service); if(!strcmp(highway,"steps")) return(Highway_Steps); break; case 't': if(!strcmp(highway,"trunk")) return(Highway_Trunk); if(!strcmp(highway,"tertiary")) return(Highway_Tertiary); if(!strcmp(highway,"track")) return(Highway_Track); break; case 'u': if(!strcmp(highway,"unclassified")) return(Highway_Unclassified); break; default: ; } return(Highway_None); } /*++++++++++++++++++++++++++++++++++++++ Decide on the type of transport given the name of it. Transport TransportType Returns the type of the transport. const char *transport The string containing the method of transport. ++++++++++++++++++++++++++++++++++++++*/ Transport TransportType(const char *transport) { switch(*transport) { case 'b': if(!strcmp(transport,"bicycle")) return(Transport_Bicycle); break; case 'f': if(!strcmp(transport,"foot")) return(Transport_Foot); break; case 'g': if(!strcmp(transport,"goods")) return(Transport_Goods); break; case 'h': if(!strcmp(transport,"horse")) return(Transport_Horse); if(!strcmp(transport,"hgv")) return(Transport_HGV); break; case 'm': if(!strcmp(transport,"moped")) return(Transport_Moped); if(!strcmp(transport,"motorcycle")) return(Transport_Motorcycle); if(!strcmp(transport,"motorcar")) return(Transport_Motorcar); break; case 'p': if(!strcmp(transport,"psv")) return(Transport_PSV); break; case 'w': if(!strcmp(transport,"wheelchair")) return(Transport_Wheelchair); break; default: return(Transport_None); } return(Transport_None); } /*++++++++++++++++++++++++++++++++++++++ Decide on the type of property given the name of it. Property PropertyType Returns the type of the property. const char *property The string containing the method of property. ++++++++++++++++++++++++++++++++++++++*/ Property PropertyType(const char *property) { switch(*property) { case 'b': if(!strcmp(property,"bicycleroute")) return(Property_BicycleRoute); if(!strcmp(property,"bridge")) return(Property_Bridge); break; case 'f': if(!strcmp(property,"footroute")) return(Property_FootRoute); break; case 'm': if(!strcmp(property,"multilane")) return(Property_Multilane); break; case 'p': if(!strcmp(property,"paved")) return(Property_Paved); break; case 't': if(!strcmp(property,"tunnel")) return(Property_Tunnel); break; default: return(Property_None); } return(Property_None); } /*++++++++++++++++++++++++++++++++++++++ A string containing the name of a type of highway. const char *HighwayName Returns the name. Highway highway The highway type. ++++++++++++++++++++++++++++++++++++++*/ const char *HighwayName(Highway highway) { switch(highway) { case Highway_None: return("NONE"); case Highway_Motorway: return("motorway"); case Highway_Trunk: return("trunk"); case Highway_Primary: return("primary"); case Highway_Secondary: return("secondary"); case Highway_Tertiary: return("tertiary"); case Highway_Unclassified: return("unclassified"); case Highway_Residential: return("residential"); case Highway_Service: return("service"); case Highway_Track: return("track"); case Highway_Cycleway: return("cycleway"); case Highway_Path: return("path"); case Highway_Steps: return("steps"); case Highway_Ferry: return("ferry"); case Highway_Count: ; case Highway_CycleBothWays: ; case Highway_OneWay: ; case Highway_Roundabout: ; case Highway_Area: ; } return(NULL); } /*++++++++++++++++++++++++++++++++++++++ A string containing the name of a type of transport. const char *TransportName Returns the name. Transport transport The transport type. ++++++++++++++++++++++++++++++++++++++*/ const char *TransportName(Transport transport) { switch(transport) { case Transport_None: return("NONE"); case Transport_Foot: return("foot"); case Transport_Horse: return("horse"); case Transport_Wheelchair: return("wheelchair"); case Transport_Bicycle: return("bicycle"); case Transport_Moped: return("moped"); case Transport_Motorcycle: return("motorcycle"); case Transport_Motorcar: return("motorcar"); case Transport_Goods: return("goods"); case Transport_HGV: return("hgv"); case Transport_PSV: return("psv"); case Transport_Count: ; } return(NULL); } /*++++++++++++++++++++++++++++++++++++++ A string containing the name of a highway property. const char *PropertyName Returns the name. Property property The property type. ++++++++++++++++++++++++++++++++++++++*/ const char *PropertyName(Property property) { switch(property) { case Property_None: return("NONE"); case Property_Paved: return("paved"); case Property_Multilane: return("multilane"); case Property_Bridge: return("bridge"); case Property_Tunnel: return("tunnel"); case Property_FootRoute: return("footroute"); case Property_BicycleRoute: return("bicycleroute"); case Property_Count: ; } return(NULL); } /*++++++++++++++++++++++++++++++++++++++ A string containing the names of highways. const char *HighwaysNameList Returns the list of names. highways_t highways The highways type. ++++++++++++++++++++++++++++++++++++++*/ const char *HighwaysNameList(highways_t highways) { static char string[256]; /* static allocation of return value (set each call) */ string[0]=0; if(highways & Highways_Motorway) strcat(string,"motorway"); if(highways & Highways_Trunk) { if(*string) strcat(string,", "); strcat(string,"trunk"); } if(highways & Highways_Primary) { if(*string) strcat(string,", "); strcat(string,"primary"); } if(highways & Highways_Tertiary) { if(*string) strcat(string,", "); strcat(string,"tertiary"); } if(highways & Highways_Unclassified) { if(*string) strcat(string,", "); strcat(string,"unclassified"); } if(highways & Highways_Residential) { if(*string) strcat(string,", "); strcat(string,"residential"); } if(highways & Highways_Service) { if(*string) strcat(string,", "); strcat(string,"service"); } if(highways & Highways_Track) { if(*string) strcat(string,", "); strcat(string,"track"); } if(highways & Highways_Cycleway) { if(*string) strcat(string,", "); strcat(string,"cycleway"); } if(highways & Highways_Path) { if(*string) strcat(string,", "); strcat(string,"path"); } if(highways & Highways_Steps) { if(*string) strcat(string,", "); strcat(string,"steps"); } if(highways & Highways_Ferry) { if(*string) strcat(string,", "); strcat(string,"ferry"); } return(string); } /*++++++++++++++++++++++++++++++++++++++ A string containing the names of allowed transports on a way. const char *AllowedNameList Returns the list of names. transports_t allowed The allowed type. ++++++++++++++++++++++++++++++++++++++*/ const char *AllowedNameList(transports_t allowed) { static char string[256]; /* static allocation of return value (set each call) */ string[0]=0; if(allowed & Transports_Foot) strcat(string,"foot"); if(allowed & Transports_Horse) { if(*string) strcat(string,", "); strcat(string,"horse"); } if(allowed & Transports_Wheelchair) { if(*string) strcat(string,", "); strcat(string,"wheelchair"); } if(allowed & Transports_Bicycle) { if(*string) strcat(string,", "); strcat(string,"bicycle"); } if(allowed & Transports_Moped) { if(*string) strcat(string,", "); strcat(string,"moped"); } if(allowed & Transports_Motorcycle) { if(*string) strcat(string,", "); strcat(string,"motorcycle"); } if(allowed & Transports_Motorcar) { if(*string) strcat(string,", "); strcat(string,"motorcar"); } if(allowed & Transports_Goods) { if(*string) strcat(string,", "); strcat(string,"goods"); } if(allowed & Transports_HGV) { if(*string) strcat(string,", "); strcat(string,"hgv"); } if(allowed & Transports_PSV) { if(*string) strcat(string,", "); strcat(string,"psv"); } return(string); } /*++++++++++++++++++++++++++++++++++++++ A string containing the names of the properties of a way. const char *PropertiesNameList Returns the list of names. properties_t properties The properties of the way. ++++++++++++++++++++++++++++++++++++++*/ const char *PropertiesNameList(properties_t properties) { static char string[256]; /* static allocation of return value (set each call) */ string[0]=0; if(properties & Properties_Paved) { if(*string) strcat(string,", "); strcat(string,"paved"); } if(properties & Properties_Multilane) { if(*string) strcat(string,", "); strcat(string,"multilane"); } if(properties & Properties_Bridge) { if(*string) strcat(string,", "); strcat(string,"bridge"); } if(properties & Properties_Tunnel) { if(*string) strcat(string,", "); strcat(string,"tunnel"); } if(properties & Properties_FootRoute) { if(*string) strcat(string,", "); strcat(string,"footroute"); } if(properties & Properties_BicycleRoute) { if(*string) strcat(string,", "); strcat(string,"bicycleroute"); } return(string); } /*++++++++++++++++++++++++++++++++++++++ Returns a list of all the highway types. const char *HighwayList Return a list of all the highway types. ++++++++++++++++++++++++++++++++++++++*/ const char *HighwayList(void) { return " motorway = Motorway\n" " trunk = Trunk\n" " primary = Primary\n" " secondary = Secondary\n" " tertiary = Tertiary\n" " unclassified = Unclassified\n" " residential = Residential\n" " service = Service\n" " track = Track\n" " cycleway = Cycleway\n" " path = Path\n" " steps = Steps\n" " ferry = Ferry\n" ; } /*++++++++++++++++++++++++++++++++++++++ Returns a list of all the transport types. const char *TransportList Return a list of all the transport types. ++++++++++++++++++++++++++++++++++++++*/ const char *TransportList(void) { return " foot = Foot\n" " bicycle = Bicycle\n" " wheelchair = Wheelchair\n" " horse = Horse\n" " moped = Moped (Small motorcycle, limited speed)\n" " motorcycle = Motorcycle\n" " motorcar = Motorcar\n" " goods = Goods (Small lorry, van)\n" " hgv = HGV (Heavy Goods Vehicle - large lorry)\n" " psv = PSV (Public Service Vehicle - bus, coach)\n" ; } /*++++++++++++++++++++++++++++++++++++++ Returns a list of all the property types. const char *PropertyList Return a list of all the highway proprties. ++++++++++++++++++++++++++++++++++++++*/ const char *PropertyList(void) { return " paved = Paved (suitable for normal wheels)\n" " multilane = Multiple lanes\n" " bridge = Bridge\n" " tunnel = Tunnel\n" " footroute = A route marked for foot travel\n" " bicycleroute = A route marked for bicycle travel\n" ; } routino-3.2/src/files.h 644 233 144 11413 12563634111 10311 0/*************************************** Header file for file function prototypes Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef FILES_H #define FILES_H /*+ To stop multiple inclusions. +*/ /* If your system does not have the pread() and pwrite() system calls then you * will need to change this line to the value 0 so that seek() and * read()/write() are used instead of pread()/pwrite(). */ #if defined(_MSC_VER) || defined(__MINGW32__) #define HAVE_PREAD_PWRITE 0 #else #define HAVE_PREAD_PWRITE 1 #endif #if defined(_MSC_VER) #include #include #define read(fd,address,length) _read(fd,address,(unsigned int)(length)) #define write(fd,address,length) _write(fd,address,(unsigned int)(length)) #define ssize_t SSIZE_T #else #include #endif #if defined(_MSC_VER) || defined(__MINGW32__) #undef lseek #define lseek _lseeki64 #endif #include #include #include "logging.h" /* Types */ /*+ A 64-bit file offset since a 32-bit off_t (which is signed) is smaller than a 32-bit size_t (which is unsigned) that can be writtento or read from a file. +*/ typedef int64_t offset_t; /* Functions in files.c */ char *FileName(const char *dirname,const char *prefix, const char *name); void *MapFile(const char *filename); void *MapFileWriteable(const char *filename); void *UnmapFile(const void *address); int SlimMapFile(const char *filename); int SlimMapFileWriteable(const char *filename); int SlimUnmapFile(int fd); int OpenFileBufferedNew(const char *filename); int OpenFileBufferedAppend(const char *filename); int ReOpenFileBuffered(const char *filename); int ReplaceFileBuffered(const char *filename,int *oldfd); int WriteFileBuffered(int fd,const void *address,size_t length); int ReadFileBuffered(int fd,void *address,size_t length); int SeekFileBuffered(int fd,offset_t position); int SkipFileBuffered(int fd,offset_t skip); int CloseFileBuffered(int fd); int OpenFile(const char *filename); void CloseFile(int fd); offset_t SizeFile(const char *filename); offset_t SizeFileFD(int fd); int ExistsFile(const char *filename); int DeleteFile(const char *filename); int RenameFile(const char *oldfilename,const char *newfilename); /* Functions in files.h */ static inline int SlimReplace(int fd,const void *address,size_t length,offset_t position); static inline int SlimFetch(int fd,void *address,size_t length,offset_t position); /* Inline the frequently called functions */ /*++++++++++++++++++++++++++++++++++++++ Write data to a file that has been opened for slim mode access. int SlimReplace Returns 0 if OK or something else in case of an error. int fd The file descriptor to write to. const void *address The address of the data to be written. size_t length The length of data to write. offset_t position The position in the file to seek to. ++++++++++++++++++++++++++++++++++++++*/ static inline int SlimReplace(int fd,const void *address,size_t length,offset_t position) { /* Seek and write the data */ #if HAVE_PREAD_PWRITE if(pwrite(fd,address,length,position)!=(ssize_t)length) return(-1); #else if(lseek(fd,position,SEEK_SET)!=position) return(-1); if(write(fd,address,length)!=(ssize_t)length) return(-1); #endif return(0); } /*++++++++++++++++++++++++++++++++++++++ Read data from a file that has been opened for slim mode access. int SlimFetch Returns 0 if OK or something else in case of an error. int fd The file descriptor to read from. void *address The address the data is to be read into. size_t length The length of data to read. offset_t position The position in the file to seek to. ++++++++++++++++++++++++++++++++++++++*/ static inline int SlimFetch(int fd,void *address,size_t length,offset_t position) { /* Seek and read the data */ #if HAVE_PREAD_PWRITE if(pread(fd,address,length,position)!=(ssize_t)length) return(-1); #else if(lseek(fd,position,SEEK_SET)!=position) return(-1); if(read(fd,address,length)!=(ssize_t)length) return(-1); #endif return(0); } #endif /* FILES_H */ routino-3.2/src/fakes.h 644 233 144 3742 12563633051 10270 0/*************************************** Header file for fake node and segment function prototypes Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef FAKES_H #define FAKES_H /*+ To stop multiple inclusions. +*/ #include "types.h" /* Macros */ /*+ Return true if this is a fake node. +*/ #define IsFakeNode(xxx) ((xxx)>=NODE_FAKE && (xxx)!=NO_NODE) /*+ Return true if this is a fake segment. +*/ #define IsFakeSegment(xxx) ((xxx)>=SEGMENT_FAKE && (xxx)!=NO_SEGMENT) /* Functions in fakes.c */ index_t CreateFakes(Nodes *nodes,Segments *segments,int point,Segment *segmentp,index_t node1,index_t node2,distance_t dist1,distance_t dist2); index_t CreateFakeNullSegment(Segments *segments,index_t node,index_t segment,int point); void DeleteFakeNodes(void); void GetFakeLatLong(index_t fakenode, double *latitude,double *longitude); Segment *FirstFakeSegment(index_t fakenode); Segment *NextFakeSegment(Segment *fakesegmentp,index_t fakenode); Segment *ExtraFakeSegment(index_t realnode,index_t fakenode); Segment *LookupFakeSegment(index_t index); index_t IndexFakeSegment(Segment *fakesegmentp); index_t IndexRealSegment(index_t fakesegment); int IsFakeUTurn(index_t fakesegment1,index_t fakesegment2); #endif /* FAKES_H */ routino-3.2/src/fakes.c 644 233 144 27550 12563633051 10306 0/*************************************** Fake node and segment generation. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include "types.h" #include "nodes.h" #include "segments.h" #include "fakes.h" /*+ The minimum distance along a segment from a node to insert a fake node. (in km). +*/ #define MINSEGMENT 0.005 /* Local variables (re-initialised by DeleteFakeNodes() function) */ /*+ A set of fake segments to allow start/finish in the middle of a segment. +*/ static Segment fake_segments[4*NWAYPOINTS+1]; /*+ A set of pointers to the real segments underlying the fake segments. +*/ static index_t real_segments[4*NWAYPOINTS+1]; /*+ A set of fake node latitudes and longitudes. +*/ static double fake_lon[NWAYPOINTS+1],fake_lat[NWAYPOINTS+1]; /*+ The previous waypoint. +*/ static int prevpoint=0; /*++++++++++++++++++++++++++++++++++++++ Create a pair of fake segments corresponding to the given segment split in two (and will create an extra two fake segments if adjacent waypoints are on the same segment). index_t CreateFakes Returns the fake node index (or a real one in special cases). Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. int point Which of the waypoints this is. Segment *segmentp The segment to split. index_t node1 The first node at the end of this segment. index_t node2 The second node at the end of this segment. distance_t dist1 The distance to the first node. distance_t dist2 The distance to the second node. ++++++++++++++++++++++++++++++++++++++*/ index_t CreateFakes(Nodes *nodes,Segments *segments,int point,Segment *segmentp,index_t node1,index_t node2,distance_t dist1,distance_t dist2) { index_t fakenode; double lat1,lon1,lat2,lon2; /* Initialise all the connecting segments to fake values */ fake_segments[4*point-4].node1=NO_NODE; fake_segments[4*point-4].node2=NO_NODE; fake_segments[4*point-3].node1=NO_NODE; fake_segments[4*point-3].node2=NO_NODE; fake_segments[4*point-2].node1=NO_NODE; fake_segments[4*point-2].node2=NO_NODE; fake_segments[4*point-1].node1=NO_NODE; fake_segments[4*point-1].node2=NO_NODE; /* Check if we are actually close enough to an existing node */ if(dist1<=km_to_distance(MINSEGMENT) && dist2>km_to_distance(MINSEGMENT)) { prevpoint=point; return(node1); } if(dist2<=km_to_distance(MINSEGMENT) && dist1>km_to_distance(MINSEGMENT)) { prevpoint=point; return(node2); } if(dist1<=km_to_distance(MINSEGMENT) && dist2<=km_to_distance(MINSEGMENT)) { prevpoint=point; if(dist13 && lat2<-3) lat2+=2*M_PI; else if(lat1<-3 && lat2>3) lat1+=2*M_PI; fake_lat[point]=lat1+(lat2-lat1)*(double)dist1/(double)(dist1+dist2); /* (dist1+dist2) must be > 0 */ fake_lon[point]=lon1+(lon2-lon1)*(double)dist1/(double)(dist1+dist2); /* (dist1+dist2) must be > 0 */ if(fake_lat[point]>M_PI) fake_lat[point]-=2*M_PI; /* * node1 fakenode node2 * #----------*----------------------------# real_segments[4*point-{4,3}] * * #----------* fake_segments[4*point-4] * *----------------------------# fake_segments[4*point-3] * * * node1 fakenode[prevpoint] node2 * #----------*------------------%---------# real_segments[4*prevpoint-{4,3,1}], real_segments[4*point-{4,3,2}] * fakenode[point] * #----------* fake_segments[4*prevpoint-4] * *----------------------------# fake_segments[4*prevpoint-3] * *------------------% fake_segments[4*prevpoint-1] * #-----------------------------% fake_segments[4*point-4] * %---------# fake_segments[4*point-3] * *------------------% fake_segments[4*point-2] */ /* Create the first fake segment */ fake_segments[4*point-4]=*segmentp; fake_segments[4*point-4].node2=fakenode; fake_segments[4*point-4].distance=DISTANCE(dist1)|DISTFLAG(segmentp->distance); real_segments[4*point-4]=IndexSegment(segments,segmentp); /* Create the second fake segment */ fake_segments[4*point-3]=*segmentp; fake_segments[4*point-3].node1=fakenode; fake_segments[4*point-3].distance=DISTANCE(dist2)|DISTFLAG(segmentp->distance); real_segments[4*point-3]=IndexSegment(segments,segmentp); /* Create a third fake segment to join adjacent points if both are fake and on the same real segment */ if(prevpoint>0 && fake_segments[4*prevpoint-4].node1==node1 && fake_segments[4*prevpoint-3].node2==node2) { if(DISTANCE(dist1)>DISTANCE(fake_segments[4*prevpoint-4].distance)) /* point is further from node1 than prevpoint */ { fake_segments[4*point-2]=fake_segments[4*prevpoint-3]; fake_segments[4*point-2].node2=fakenode; fake_segments[4*point-2].distance=(DISTANCE(dist1)-DISTANCE(fake_segments[4*prevpoint-4].distance))|DISTFLAG(segmentp->distance); } else { fake_segments[4*point-2]=fake_segments[4*prevpoint-4]; fake_segments[4*point-2].node1=fakenode; fake_segments[4*point-2].distance=(DISTANCE(fake_segments[4*prevpoint-4].distance)-DISTANCE(dist1))|DISTFLAG(segmentp->distance); } real_segments[4*point-2]=IndexSegment(segments,segmentp); fake_segments[4*prevpoint-1]=fake_segments[4*point-2]; real_segments[4*prevpoint-1]=real_segments[4*point-2]; } /* Return the fake node */ prevpoint=point; return(fakenode); } /*++++++++++++++++++++++++++++++++++++++ Create a fake segment connecting a node to itself. index_t CreateFakeNullSegment Returns the index of a fake segment. Segments *segments The list of segments to use. index_t node The node that is to be linked. index_t segment The segment that is to be emulated. int point The waypoint number. ++++++++++++++++++++++++++++++++++++++*/ index_t CreateFakeNullSegment(Segments *segments,index_t node,index_t segment,int point) { Segment *segmentp=LookupSegment(segments,segment,1); fake_segments[4*point-2].node1=node; fake_segments[4*point-2].node2=node; fake_segments[4*point-2].way=segmentp->way; fake_segments[4*point-2].distance=0; return(4*point-2+SEGMENT_FAKE); } /*++++++++++++++++++++++++++++++++++++++ Re-initialise the fake node data storage. ++++++++++++++++++++++++++++++++++++++*/ void DeleteFakeNodes(void) { unsigned int i; for(i=0;i. ***************************************/ #ifndef ROUTINO_H #define ROUTINO_H /*+ To stop multiple inclusions. +*/ /* Limit the exported symbols in the library */ #if defined(_MSC_VER) #ifdef LIBROUTINO #define DLL_PUBLIC __declspec(dllexport) #else #define DLL_PUBLIC __declspec(dllimport) #endif #endif #if defined(__GNUC__) && __GNUC__ >= 4 #if defined(__MINGW32__) || defined(__CYGWIN__) #ifdef LIBROUTINO #define DLL_PUBLIC __attribute__ ((dllexport)) #else #define DLL_PUBLIC __attribute__ ((dllimport)) #endif #else #ifdef LIBROUTINO #define DLL_PUBLIC __attribute__ ((visibility ("default"))) #endif #endif #endif #ifndef DLL_PUBLIC #define DLL_PUBLIC #endif /* Handle compilation with a C++ compiler */ #ifdef __cplusplus extern "C" { #endif /* Routino library API version */ #define ROUTINO_API_VERSION 8 /*+ A version number for the Routino API. +*/ /* Routino error constants */ #define ROUTINO_ERROR_NONE 0 /*+ No error. +*/ #define ROUTINO_ERROR_NO_DATABASE 1 /*+ A function was called without the database variable set. +*/ #define ROUTINO_ERROR_NO_PROFILE 2 /*+ A function was called without the profile variable set. +*/ #define ROUTINO_ERROR_NO_TRANSLATION 3 /*+ A function was called without the translation variable set. +*/ #define ROUTINO_ERROR_NO_DATABASE_FILES 11 /*+ The specified database to load did not exist. +*/ #define ROUTINO_ERROR_BAD_DATABASE_FILES 12 /*+ The specified database could not be loaded. +*/ #define ROUTINO_ERROR_NO_PROFILES_XML 13 /*+ The specified profiles XML file did not exist. +*/ #define ROUTINO_ERROR_BAD_PROFILES_XML 14 /*+ The specified profiles XML file could not be loaded. +*/ #define ROUTINO_ERROR_NO_TRANSLATIONS_XML 15 /*+ The specified translations XML file did not exist. +*/ #define ROUTINO_ERROR_BAD_TRANSLATIONS_XML 16 /*+ The specified translations XML file could not be loaded. +*/ #define ROUTINO_ERROR_NO_SUCH_PROFILE 21 /*+ The requested profile name does not exist in the loaded XML file. +*/ #define ROUTINO_ERROR_NO_SUCH_TRANSLATION 22 /*+ The requested translation language does not exist in the loaded XML file. +*/ #define ROUTINO_ERROR_NO_NEARBY_HIGHWAY 31 /*+ There is no highway near the coordinates to place a waypoint. +*/ #define ROUTINO_ERROR_PROFILE_DATABASE_ERR 41 /*+ The profile and database do not work together. +*/ #define ROUTINO_ERROR_NOTVALID_PROFILE 42 /*+ The profile being used has not been validated. +*/ #define ROUTINO_ERROR_BAD_USER_PROFILE 43 /*+ The user specified profile contained invalid data. +*/ #define ROUTINO_ERROR_BAD_OPTIONS 51 /*+ The routing options specified are not consistent with each other. +*/ #define ROUTINO_ERROR_WRONG_API_VERSION 61 /*+ There is a mismatch between the library and caller API version. +*/ #define ROUTINO_ERROR_PROGRESS_ABORTED 71 /*+ The progress function returned false. +*/ #define ROUTINO_ERROR_NO_ROUTE_1 1001 /*+ A route could not be found to waypoint 1. +*/ #define ROUTINO_ERROR_NO_ROUTE_2 1002 /*+ A route could not be found to waypoint 2. +*/ #define ROUTINO_ERROR_NO_ROUTE_3 1003 /*+ A route could not be found to waypoint 3. +*/ /* Higher values of the error number refer to later waypoints. */ /* Routino routing option constants */ #define ROUTINO_ROUTE_SHORTEST 0 /*+ Calculate the shortest route. +*/ #define ROUTINO_ROUTE_QUICKEST 1 /*+ Calculate the quickest route. +*/ #define ROUTINO_ROUTE_FILE_HTML 2 /*+ Output an HTML route file. +*/ #define ROUTINO_ROUTE_FILE_GPX_TRACK 4 /*+ Output a GPX track file. +*/ #define ROUTINO_ROUTE_FILE_GPX_ROUTE 8 /*+ Output a GPX route file. +*/ #define ROUTINO_ROUTE_FILE_TEXT 16 /*+ Output a text file with important junctions. +*/ #define ROUTINO_ROUTE_FILE_TEXT_ALL 32 /*+ Output a text file with all nodes and segments. +*/ #define ROUTINO_ROUTE_FILE_STDOUT 64 /*+ Output a single file type to stdout. +*/ #define ROUTINO_ROUTE_LIST_HTML 128 /*+ Output a linked list of points containing the HTML file information but as plain text. +*/ #define ROUTINO_ROUTE_LIST_HTML_ALL 256 /*+ Output a linked list of points containing the HTML file information as plain text and with all points. +*/ #define ROUTINO_ROUTE_LIST_TEXT 512 /*+ Output a linked list of points containing the text file information. +*/ #define ROUTINO_ROUTE_LIST_TEXT_ALL 1024 /*+ Output a linked list of points containing the text all file information. +*/ #define ROUTINO_ROUTE_LOOP 2048 /*+ Route between the points in a loop returning to the first point. +*/ #define ROUTINO_ROUTE_REVERSE 4096 /*+ Route between the points in reverse order. +*/ /* Routino output point types */ #define ROUTINO_POINT_UNIMPORTANT 0 /*+ An unimportant, intermediate, node. +*/ #define ROUTINO_POINT_RB_NOT_EXIT 1 /*+ A roundabout exit that is not taken. +*/ #define ROUTINO_POINT_JUNCT_CONT 2 /*+ An un-interesting junction where the route continues without comment. +*/ #define ROUTINO_POINT_CHANGE 3 /*+ The highway changes type but nothing else happens. +*/ #define ROUTINO_POINT_JUNCT_IMPORT 4 /*+ An interesting junction to be described. +*/ #define ROUTINO_POINT_RB_ENTRY 5 /*+ The entrance to a roundabout. +*/ #define ROUTINO_POINT_RB_EXIT 6 /*+ The exit from a roundabout. +*/ #define ROUTINO_POINT_MINI_RB 7 /*+ The location of a mini-roundabout. +*/ #define ROUTINO_POINT_UTURN 8 /*+ The location of a U-turn. +*/ #define ROUTINO_POINT_WAYPOINT 9 /*+ A waypoint. +*/ /* Routino user profile array indexes */ #define ROUTINO_HIGHWAY_MOTORWAY 1 /*+ A Motorway highway. +*/ #define ROUTINO_HIGHWAY_TRUNK 2 /*+ A Trunk highway. +*/ #define ROUTINO_HIGHWAY_PRIMARY 3 /*+ A Primary highway. +*/ #define ROUTINO_HIGHWAY_SECONDARY 4 /*+ A Secondary highway. +*/ #define ROUTINO_HIGHWAY_TERTIARY 5 /*+ A Tertiary highway. +*/ #define ROUTINO_HIGHWAY_UNCLASSIFIED 6 /*+ A Unclassified highway. +*/ #define ROUTINO_HIGHWAY_RESIDENTIAL 7 /*+ A Residential highway. +*/ #define ROUTINO_HIGHWAY_SERVICE 8 /*+ A Service highway. +*/ #define ROUTINO_HIGHWAY_TRACK 9 /*+ A Track highway. +*/ #define ROUTINO_HIGHWAY_CYCLEWAY 10 /*+ A Cycleway highway. +*/ #define ROUTINO_HIGHWAY_PATH 11 /*+ A Path highway. +*/ #define ROUTINO_HIGHWAY_STEPS 12 /*+ A Steps highway. +*/ #define ROUTINO_HIGHWAY_FERRY 13 /*+ A Ferry highway. +*/ #define ROUTINO_PROPERTY_PAVED 1 /*+ A Paved highway. +*/ #define ROUTINO_PROPERTY_MULTILANE 2 /*+ A Multilane highway. +*/ #define ROUTINO_PROPERTY_BRIDGE 3 /*+ A Bridge highway. +*/ #define ROUTINO_PROPERTY_TUNNEL 4 /*+ A Tunnel highway. +*/ #define ROUTINO_PROPERTY_FOOTROUTE 5 /*+ A Footroute highway. +*/ #define ROUTINO_PROPERTY_BICYCLEROUTE 6 /*+ A Bicycleroute highway. +*/ /* Routino types */ /*+ A data structure to hold a Routino database loaded from a file (the contents are private). +*/ typedef struct _Routino_Database Routino_Database; /*+ A data structure to hold a Routino waypoint found within the database (the contents are private). +*/ typedef struct _Routino_Waypoint Routino_Waypoint; /*+ A data structure to hold a Routino routing profile (the contents are private). +*/ #ifdef LIBROUTINO typedef struct _Profile Routino_Profile; #else typedef struct _Routino_Profile Routino_Profile; #endif /*+ A data structure to hold a Routino translation (the contents are private). +*/ #ifdef LIBROUTINO typedef struct _Translation Routino_Translation; #else typedef struct _Routino_Translation Routino_Translation; #endif /*+ A data structure to hold a routing profile that can be defined by the user. +*/ typedef struct _Routino_UserProfile { int transport; /*+ The type of transport. +*/ float highway[14]; /*+ A floating point preference for travel on the highway (range 0 to 1). +*/ float speed[14]; /*+ The maximum speed on each type of highway (km/hour). +*/ float props[7]; /*+ A floating point preference for ways with this attribute (range 0 to 1). +*/ int oneway; /*+ A flag to indicate if one-way restrictions apply. +*/ int turns; /*+ A flag to indicate if turn restrictions apply. +*/ float weight; /*+ The weight of the vehicle (in tonnes). +*/ float height; /*+ The height of the vehicle (in metres). +*/ float width; /*+ The width of vehicle (in metres). +*/ float length; /*+ The length of vehicle (in metres). +*/ } Routino_UserProfile; /*+ Forward declaration of the Routino_Output data type. +*/ typedef struct _Routino_Output Routino_Output; /*+ A linked list output of the calculated route whose contents depend on the ROUTINO_ROUTE_LIST_* options selected. +*/ struct _Routino_Output { Routino_Output *next; /*+ A pointer to the next route section. +*/ float lon; /*+ The longitude of the point (radians). +*/ float lat; /*+ The latitude of the point (radians). +*/ float dist; /*+ The total distance travelled (kilometres) up to the point. +*/ float time; /*+ The total journey time (seconds) up to the point. +*/ float speed; /*+ The speed (km/hr) for this section of the route (ROUTINO_ROUTE_LIST_TEXT_ALL format only). +*/ int type; /*+ The type of point (one of the ROUTINO_POINT_* values). +*/ int turn; /*+ The amount to turn (degrees) for the next section of the route (ROUTINO_ROUTE_LIST_TEXT or ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML_ALL format). +*/ int bearing; /*+ The compass direction (degrees) for the next section of the route. +*/ char *name; /*+ The name of the next section of the route (ROUTINO_ROUTE_LIST_TEXT or ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML_ALL format) or previous section of the route (ROUTINO_ROUTE_LIST_TEXT_ALL format). +*/ char *desc1; /*+ The first part of the description of the next section of route (ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML format). +*/ char *desc2; /*+ The second part of the description of the next section of route (ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML format). +*/ char *desc3; /*+ The third part of the description, the total distance and time at the end of the next section of route (ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML format). +*/ }; /*+ A type of function that can be used as a callback to indicate routing progress, if it returns false the router stops. +*/ typedef int (*Routino_ProgressFunc)(double complete); /* Routino error number variable */ /*+ Contains the libroutino API version number. +*/ DLL_PUBLIC extern const int Routino_APIVersion; /*+ Contains the Routino version number. +*/ DLL_PUBLIC extern const char *Routino_Version; /*+ Contains the error number of the most recent Routino function (one of the ROUTINO_ERROR_* values). +*/ DLL_PUBLIC extern int Routino_errno; /* Routino library functions */ #define Routino_CheckAPIVersion() Routino_Check_API_Version(ROUTINO_API_VERSION) /*+ A wrapper function to simplify the API version check. +*/ DLL_PUBLIC int Routino_Check_API_Version(int caller_version); DLL_PUBLIC Routino_Database *Routino_LoadDatabase(const char *dirname,const char *prefix); DLL_PUBLIC void Routino_UnloadDatabase(Routino_Database *database); DLL_PUBLIC int Routino_ParseXMLProfiles(const char *filename); DLL_PUBLIC char **Routino_GetProfileNames(void); DLL_PUBLIC Routino_Profile *Routino_GetProfile(const char *name); DLL_PUBLIC void Routino_FreeXMLProfiles(void); DLL_PUBLIC int Routino_ParseXMLTranslations(const char *filename); DLL_PUBLIC char **Routino_GetTranslationLanguages(void); DLL_PUBLIC char **Routino_GetTranslationLanguageFullNames(void); DLL_PUBLIC Routino_Translation *Routino_GetTranslation(const char *language); DLL_PUBLIC void Routino_FreeXMLTranslations(void); DLL_PUBLIC Routino_Profile *Routino_CreateProfileFromUserProfile(Routino_UserProfile *profile); DLL_PUBLIC Routino_UserProfile *Routino_CreateUserProfileFromProfile(Routino_Profile *profile); DLL_PUBLIC int Routino_ValidateProfile(Routino_Database *database,Routino_Profile *profile); DLL_PUBLIC Routino_Waypoint *Routino_FindWaypoint(Routino_Database *database,Routino_Profile *profile,double latitude,double longitude); DLL_PUBLIC Routino_Output *Routino_CalculateRoute(Routino_Database *database,Routino_Profile *profile,Routino_Translation *translation, Routino_Waypoint **waypoints,int nwaypoints,int options,Routino_ProgressFunc progress); DLL_PUBLIC void Routino_DeleteRoute(Routino_Output *output); /* Handle compilation with a C++ compiler */ #ifdef __cplusplus } #endif #endif /* ROUTINO_H */ routino-3.2/src/translations.h 644 233 144 4646 12601525105 11715 0/*************************************** Load the translations from a file and the functions for handling them. Part of the Routino routing software. ******************/ /****************** This file Copyright 2010-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef TRANSLATIONS_H #define TRANSLATIONS_H /*+ To stop multiple inclusions. +*/ #include "types.h" /* Type declarations */ typedef struct _Translation { char *lang; char *language; char *raw_copyright_creator[2]; char *raw_copyright_source[2]; char *raw_copyright_license[2]; char *xml_copyright_creator[2]; char *xml_copyright_source[2]; char *xml_copyright_license[2]; char *xml_heading[9]; char *xml_turn[9]; char *xml_ordinal[10]; char *notxml_heading[9]; char *notxml_turn[9]; char *notxml_ordinal[10]; char *raw_highway[Highway_Count]; char *xml_route_shortest; char *xml_route_quickest; char *html_waypoint; char *html_junction; char *html_roundabout; char *html_title; char *html_start; char *html_segment; char *html_node; char *html_rbnode; char *html_stop; char *html_total; char *html_subtotal; char *nothtml_waypoint; char *nothtml_junction; char *nothtml_roundabout; char *nothtml_title; char *nothtml_start; char *nothtml_segment; char *nothtml_node; char *nothtml_rbnode; char *nothtml_stop; char *nothtml_total; char *nothtml_subtotal; char *gpx_desc; char *gpx_name; char *gpx_step; char *gpx_final; char *gpx_waypt; char *gpx_trip; } Translation; /* Functions in translations.c */ int ParseXMLTranslations(const char *filename,const char *lang,int all); char **GetTranslationLanguages(void); char **GetTranslationLanguageFullNames(void); Translation *GetTranslation(const char *lang); void FreeXMLTranslations(void); #endif /* TRANSLATIONS_H */ routino-3.2/src/functions.h 644 233 144 3117 12725333236 11205 0/*************************************** Header file for miscellaneous function prototypes Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2016 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef FUNCTIONS_H #define FUNCTIONS_H /*+ To stop multiple inclusions. +*/ #include "types.h" #include "profiles.h" #include "translations.h" #include "results.h" #include "routino.h" /* Functions in optimiser.c */ Results *CalculateRoute(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile, index_t start_node,index_t prev_segment,index_t finish_node, int start_waypoint,int finish_waypoint); /* Functions in output.c */ Routino_Output *PrintRoute(Results **results,int nresults,Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,Translation *translation); #endif /* FUNCTIONS_H */ routino-3.2/src/superx.c 644 233 144 37501 12563633051 10540 0/*************************************** Super-Segment data type functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include "types.h" #include "segments.h" #include "ways.h" #include "typesx.h" #include "nodesx.h" #include "segmentsx.h" #include "waysx.h" #include "superx.h" #include "files.h" #include "logging.h" #include "results.h" /* Local functions */ static Results *FindSuperRoutes(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx,node_t start,Way *match); /*++++++++++++++++++++++++++++++++++++++ Select the super-nodes from the list of nodes. NodesX *nodesx The set of nodes to use. SegmentsX *segmentsx The set of segments to use. WaysX *waysx The set of ways to use. ++++++++++++++++++++++++++++++++++++++*/ void ChooseSuperNodes(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx) { index_t i; index_t nnodes=0; if(nodesx->number==0 || segmentsx->number==0 || waysx->number==0) return; /* Print the start message */ printf_first("Finding Super-Nodes: Nodes=0 Super-Nodes=0"); /* Allocate and set the super-node markers */ if(!nodesx->super) { nodesx->super=AllocBitMask(nodesx->number); log_malloc(nodesx->super,LengthBitMask(nodesx->number)*sizeof(BitMask)); logassert(nodesx->super,"Failed to allocate memory (try using slim mode?)"); /* Check AllocBitMask() worked */ SetAllBits(nodesx->super,nodesx->number); } /* Map into memory / open the files */ nodesx->fd=ReOpenFileBuffered(nodesx->filename_tmp); #if !SLIM segmentsx->data=MapFile(segmentsx->filename_tmp); waysx->data=MapFile(waysx->filename_tmp); #else segmentsx->fd=SlimMapFile(segmentsx->filename_tmp); waysx->fd=SlimMapFile(waysx->filename_tmp); InvalidateSegmentXCache(segmentsx->cache); InvalidateWayXCache(waysx->cache); #endif /* Find super-nodes */ for(i=0;inumber;i++) { NodeX nodex; ReadFileBuffered(nodesx->fd,&nodex,sizeof(NodeX)); if(IsBitSet(nodesx->super,i)) { int issuper=0; if(nodex.flags&(NODE_TURNRSTRCT|NODE_TURNRSTRCT2)) issuper=1; else { int count=0,j; Way segmentway[MAX_SEG_PER_NODE]; int segmentweight[MAX_SEG_PER_NODE]; SegmentX *segmentx=FirstSegmentX(segmentsx,i,1); while(segmentx) { WayX *wayx=LookupWayX(waysx,segmentx->way,1); int nsegments; /* Segments that are loops count twice */ logassert(countnode1==segmentx->node2) segmentweight[count]=2; else segmentweight[count]=1; segmentway[count]=wayx->way; /* If the node allows less traffic types than any connecting way then it is super if it allows anything */ if((wayx->way.allow&nodex.allow)!=wayx->way.allow && nodex.allow!=Transports_None) { issuper=1; break; } nsegments=segmentweight[count]; for(j=0;jway.allow & segmentway[j].allow) { /* If two ways are different in any attribute and there is a type of traffic that can use both then it is super */ if(WaysCompare(&segmentway[j],&wayx->way)) { issuper=1; break; } /* If there are two other segments that can be used by the same types of traffic as this one then it is super */ nsegments+=segmentweight[j]; if(nsegments>2) { issuper=1; break; } } if(issuper) break; segmentx=NextSegmentX(segmentsx,segmentx,i); count++; } } /* Mark the node as super if it is. */ if(issuper) nnodes++; else ClearBit(nodesx->super,i); } if(!((i+1)%10000)) printf_middle("Finding Super-Nodes: Nodes=%"Pindex_t" Super-Nodes=%"Pindex_t,i+1,nnodes); } /* Unmap from memory / close the files */ #if !SLIM segmentsx->data=UnmapFile(segmentsx->data); waysx->data=UnmapFile(waysx->data); #else segmentsx->fd=SlimUnmapFile(segmentsx->fd); waysx->fd=SlimUnmapFile(waysx->fd); #endif nodesx->fd=CloseFileBuffered(nodesx->fd); /* Print the final message */ printf_last("Found Super-Nodes: Nodes=%"Pindex_t" Super-Nodes=%"Pindex_t,nodesx->number,nnodes); } /*++++++++++++++++++++++++++++++++++++++ Create the super-segments from the existing segments. SegmentsX *CreateSuperSegments Returns the new super segments. NodesX *nodesx The set of nodes to use. SegmentsX *segmentsx The set of segments to use. WaysX *waysx The set of ways to use. ++++++++++++++++++++++++++++++++++++++*/ SegmentsX *CreateSuperSegments(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx) { index_t i; SegmentsX *supersegmentsx; index_t sn=0,ss=0; supersegmentsx=NewSegmentList(); if(segmentsx->number==0 || waysx->number==0) { FinishSegmentList(supersegmentsx); return(supersegmentsx); } /* Print the start message */ printf_first("Creating Super-Segments: Super-Nodes=0 Super-Segments=0"); /* Map into memory / open the files */ #if !SLIM nodesx->data=MapFile(nodesx->filename_tmp); segmentsx->data=MapFile(segmentsx->filename_tmp); waysx->data=MapFile(waysx->filename_tmp); #else nodesx->fd=SlimMapFile(nodesx->filename_tmp); segmentsx->fd=SlimMapFile(segmentsx->filename_tmp); waysx->fd=SlimMapFile(waysx->filename_tmp); InvalidateNodeXCache(nodesx->cache); InvalidateSegmentXCache(segmentsx->cache); InvalidateWayXCache(waysx->cache); #endif /* Create super-segments for each super-node. */ for(i=0;inumber;i++) { if(IsBitSet(nodesx->super,i)) { SegmentX *segmentx; int count=0,match; Way prevway[MAX_SEG_PER_NODE]; segmentx=FirstSegmentX(segmentsx,i,1); while(segmentx) { WayX *wayx=LookupWayX(waysx,segmentx->way,1); /* Check that this type of way hasn't already been routed */ match=0; if(count>0) { int j; for(j=0;jway)) { match=1; break; } } logassert(countway; /* Route the way and store the super-segments. */ if(!match) { Results *results=FindSuperRoutes(nodesx,segmentsx,waysx,i,&wayx->way); Result *result=FirstResult(results); while(result) { if(IsBitSet(nodesx->super,result->node) && result->segment!=NO_SEGMENT) { if(wayx->way.type&Highway_OneWay && result->node!=i) AppendSegmentList(supersegmentsx,segmentx->way,i,result->node,DISTANCE((distance_t)result->score)|ONEWAY_1TO2); else AppendSegmentList(supersegmentsx,segmentx->way,i,result->node,DISTANCE((distance_t)result->score)); ss++; } result=NextResult(results,result); } } segmentx=NextSegmentX(segmentsx,segmentx,i); } sn++; if(!(sn%10000)) printf_middle("Creating Super-Segments: Super-Nodes=%"Pindex_t" Super-Segments=%"Pindex_t,sn,ss); } } FinishSegmentList(supersegmentsx); /* Unmap from memory / close the files */ #if !SLIM nodesx->data=UnmapFile(nodesx->data); segmentsx->data=UnmapFile(segmentsx->data); waysx->data=UnmapFile(waysx->data); #else nodesx->fd=SlimUnmapFile(nodesx->fd); segmentsx->fd=SlimUnmapFile(segmentsx->fd); waysx->fd=SlimUnmapFile(waysx->fd); #endif /* Free the no-longer required memory */ if(segmentsx->firstnode) { log_free(segmentsx->firstnode); free(segmentsx->firstnode); segmentsx->firstnode=NULL; } /* Print the final message */ printf_last("Created Super-Segments: Super-Nodes=%"Pindex_t" Super-Segments=%"Pindex_t,sn,ss); return(supersegmentsx); } /*++++++++++++++++++++++++++++++++++++++ Merge the segments and super-segments into a new segment list. SegmentsX *MergeSuperSegments Returns a new set of merged segments. SegmentsX *segmentsx The set of segments to use. SegmentsX *supersegmentsx The set of super-segments to use. ++++++++++++++++++++++++++++++++++++++*/ SegmentsX *MergeSuperSegments(SegmentsX *segmentsx,SegmentsX *supersegmentsx) { index_t i,j,lastj; index_t merged=0,added=0; SegmentsX *mergedsegmentsx; SegmentX supersegmentx; mergedsegmentsx=NewSegmentList(); if(segmentsx->number==0) { FinishSegmentList(mergedsegmentsx); return(mergedsegmentsx); } /* Print the start message */ printf_first("Merging Segments: Segments=0 Super=0 Merged=0 Added=0"); /* Open the files */ segmentsx->fd=ReOpenFileBuffered(segmentsx->filename_tmp); if(supersegmentsx->number>0) supersegmentsx->fd=ReOpenFileBuffered(supersegmentsx->filename_tmp); /* Loop through and create a new list of combined segments */ lastj=-1; j=0; for(i=0;inumber;i++) { int super=0; SegmentX segmentx; ReadFileBuffered(segmentsx->fd,&segmentx,sizeof(SegmentX)); while(jnumber) { if(j!=lastj) { ReadFileBuffered(supersegmentsx->fd,&supersegmentx,sizeof(SegmentX)); lastj=j; } if(segmentx.node1 ==supersegmentx.node1 && segmentx.node2 ==supersegmentx.node2 && segmentx.distance==supersegmentx.distance) { merged++; j++; /* mark as super-segment and normal segment */ super=1; break; } else if((segmentx.node1==supersegmentx.node1 && segmentx.node2==supersegmentx.node2) || (segmentx.node1==supersegmentx.node1 && segmentx.node2>supersegmentx.node2) || (segmentx.node1>supersegmentx.node1)) { /* mark as super-segment */ AppendSegmentList(mergedsegmentsx,supersegmentx.way,supersegmentx.node1,supersegmentx.node2,supersegmentx.distance|SEGMENT_SUPER); added++; j++; } else { /* mark as normal segment */ break; } } if(super) AppendSegmentList(mergedsegmentsx,segmentx.way,segmentx.node1,segmentx.node2,segmentx.distance|SEGMENT_SUPER|SEGMENT_NORMAL); else AppendSegmentList(mergedsegmentsx,segmentx.way,segmentx.node1,segmentx.node2,segmentx.distance|SEGMENT_NORMAL); if(!((i+1)%10000)) printf_middle("Merging Segments: Segments=%"Pindex_t" Super=%"Pindex_t" Merged=%"Pindex_t" Added=%"Pindex_t,i+1,j,merged,added); } if(jnumber) { if(j==lastj) { AppendSegmentList(mergedsegmentsx,supersegmentx.way,supersegmentx.node1,supersegmentx.node2,supersegmentx.distance|SEGMENT_SUPER); j++; } while(jnumber) { ReadFileBuffered(supersegmentsx->fd,&supersegmentx,sizeof(SegmentX)); AppendSegmentList(mergedsegmentsx,supersegmentx.way,supersegmentx.node1,supersegmentx.node2,supersegmentx.distance|SEGMENT_SUPER); added++; j++; } } FinishSegmentList(mergedsegmentsx); /* Close the files */ segmentsx->fd=CloseFileBuffered(segmentsx->fd); if(supersegmentsx->number>0) supersegmentsx->fd=CloseFileBuffered(supersegmentsx->fd); /* Print the final message */ printf_last("Merged Segments: Segments=%"Pindex_t" Super=%"Pindex_t" Merged=%"Pindex_t" Added=%"Pindex_t,segmentsx->number,supersegmentsx->number,merged,added); return(mergedsegmentsx); } /*++++++++++++++++++++++++++++++++++++++ Find all routes from a specified super-node to any other super-node that follows a certain type of way. Results *FindSuperRoutes Returns a set of results. NodesX *nodesx The set of nodes to use. SegmentsX *segmentsx The set of segments to use. WaysX *waysx The set of ways to use. node_t start The start node. Way *match A template for the type of way that the route must follow. ++++++++++++++++++++++++++++++++++++++*/ static Results *FindSuperRoutes(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx,node_t start,Way *match) { static Results *results=NULL; /* static allocation of return value (reset each call) */ static Queue *queue=NULL; /* static allocation of internal value (reset each call) */ Result *result1,*result2; WayX *wayx; /* Insert the first node into the queue */ if(!results) results=NewResultsList(8); else ResetResultsList(results); if(!queue) queue=NewQueueList(8); else ResetQueueList(queue); result1=InsertResult(results,start,NO_SEGMENT); InsertInQueue(queue,result1,0); /* Loop across all nodes in the queue */ while((result1=PopFromQueue(queue))) { index_t node1; SegmentX *segmentx; node1=result1->node; segmentx=FirstSegmentX(segmentsx,node1,2); /* position 1 is already used */ while(segmentx) { NodeX *node2x; index_t node2,seg2; distance_t cumulative_distance; /* must not be one-way against the direction of travel */ if(IsOnewayTo(segmentx,node1)) goto endloop; seg2=IndexSegmentX(segmentsx,segmentx); /* must not be a u-turn */ if(result1->segment==seg2) goto endloop; wayx=LookupWayX(waysx,segmentx->way,2); /* position 1 is already used */ /* must be the right type of way */ if(WaysCompare(&wayx->way,match)) goto endloop; node2=OtherNode(segmentx,node1); node2x=LookupNodeX(nodesx,node2,2); /* position 1 is already used */ /* Don't route beyond a node with no access */ if(node2x->allow==Transports_None) goto endloop; cumulative_distance=(distance_t)result1->score+DISTANCE(segmentx->distance); result2=FindResult(results,node2,seg2); if(!result2) /* New end node */ { result2=InsertResult(results,node2,seg2); result2->prev=result1; result2->score=cumulative_distance; /* don't route beyond a super-node. */ if(!IsBitSet(nodesx->super,node2)) InsertInQueue(queue,result2,cumulative_distance); } else if(cumulative_distancescore) { result2->prev=result1; result2->score=cumulative_distance; /* don't route beyond a super-node. */ if(!IsBitSet(nodesx->super,node2)) InsertInQueue(queue,result2,cumulative_distance); } endloop: segmentx=NextSegmentX(segmentsx,segmentx,node1); } } return(results); } routino-3.2/src/version.h 644 233 144 2045 13061250100 10637 0/*************************************** Routino version. Part of the Routino routing software. ******************/ /****************** This file Copyright 2016, 2017 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef VERSION_H #define VERSION_H /*+ To stop multiple inclusions. +*/ #define ROUTINO_VERSION "3.2" #define ROUTINO_URL "" #endif /* VERSION_H */ routino-3.2/src/visualiser.h 644 233 144 6117 12327765765 11404 0/*************************************** Header file for visualiser functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2014 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef VISUALISER_H #define VISUALISER_H /*+ To stop multiple inclusions. +*/ #include "types.h" #include "errorlog.h" /* Functions in visualiser.c */ void OutputJunctions(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax); void OutputSuper(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax); void OutputWaytype(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax,highway_t mask); void OutputHighway(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax,Highway highway); void OutputTransport(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax,Transport transport); void OutputBarrier(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax,Transport transport); void OutputTurnRestrictions(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax); void OutputSpeedLimits(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax); void OutputWeightLimits(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax); void OutputHeightLimits(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax); void OutputWidthLimits(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax); void OutputLengthLimits(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax); void OutputProperty(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax,Property property); void OutputErrorLog(ErrorLogs *errorlogs,double latmin,double latmax,double lonmin,double lonmax); #endif /* VISUALISER_H */ routino-3.2/src/relations.c 644 233 144 24050 12563633052 11206 0/*************************************** Relation data type functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include "types.h" #include "relations.h" #include "fakes.h" #include "files.h" /*++++++++++++++++++++++++++++++++++++++ Load in a relation list from a file. Relations *LoadRelationList Returns the relation list. const char *filename The name of the file to load. ++++++++++++++++++++++++++++++++++++++*/ Relations *LoadRelationList(const char *filename) { Relations *relations; relations=(Relations*)malloc(sizeof(Relations)); #if !SLIM relations->data=MapFile(filename); /* Copy the RelationsFile header structure from the loaded data */ relations->file=*((RelationsFile*)relations->data); /* Set the pointers in the Relations structure. */ relations->turnrelations=(TurnRelation*)(relations->data+sizeof(RelationsFile)); #else relations->fd=SlimMapFile(filename); /* Copy the RelationsFile header structure from the loaded data */ SlimFetch(relations->fd,&relations->file,sizeof(RelationsFile),0); relations->troffset=sizeof(RelationsFile); relations->cache=NewTurnRelationCache(); #ifndef LIBROUTINO log_malloc(relations->cache,sizeof(*relations->cache)); #endif #endif if(relations->file.trnumber>0) { TurnRelation *relation; relation=LookupTurnRelation(relations,0,1); relations->via_start =relation->via; relation=LookupTurnRelation(relations,relations->file.trnumber-1,1); relations->via_end =relation->via; } return(relations); } /*++++++++++++++++++++++++++++++++++++++ Destroy the relation list. Relations *relations The relation list to destroy. ++++++++++++++++++++++++++++++++++++++*/ void DestroyRelationList(Relations *relations) { #if !SLIM relations->data=UnmapFile(relations->data); #else relations->fd=SlimUnmapFile(relations->fd); #ifndef LIBROUTINO log_free(relations->cache); #endif DeleteTurnRelationCache(relations->cache); #endif free(relations); } /*++++++++++++++++++++++++++++++++++++++ Find the first turn relation in the file whose 'via' matches a specific node. index_t FindFirstTurnRelation1 Returns the index of the first turn relation matching. Relations *relations The set of relations to use. index_t via The node that the route is going via. ++++++++++++++++++++++++++++++++++++++*/ index_t FindFirstTurnRelation1(Relations *relations,index_t via) { TurnRelation *relation; index_t start=0; index_t end=relations->file.trnumber-1; index_t mid; index_t match=NO_RELATION; /* Binary search - search key any exact match is required. * * # <- start | Check mid and move start or end if it doesn't match * # | * # | Since an exact match is wanted we can set end=mid-1 * # <- mid | or start=mid+1 because we know that mid doesn't match. * # | * # | Eventually either end=start or end=start+1 and one of * # <- end | start or end matches (but may not be the first). */ do { mid=(start+end)/2; /* Choose mid point */ relation=LookupTurnRelation(relations,mid,1); if(relation->viavia>via) /* Mid point is too high for 'via' */ end=mid?(mid-1):mid; else /* Mid point is correct for 'from' */ { match=mid; break; } } while((end-start)>1); if(match==NO_RELATION) /* Check if start matches */ { relation=LookupTurnRelation(relations,start,1); if(relation->via==via) match=start; } if(match==NO_RELATION) /* Check if end matches */ { relation=LookupTurnRelation(relations,end,1); if(relation->via==via) match=end; } if(match==NO_RELATION) return(match); while(match>0) /* Search backwards for the first match */ { relation=LookupTurnRelation(relations,match-1,1); if(relation->via==via) match--; else break; } return(match); } /*++++++++++++++++++++++++++++++++++++++ Find the next turn relation in the file whose 'via' matches a specific node. index_t FindNextTurnRelation1 Returns the index of the next turn relation matching. Relations *relations The set of relations to use. index_t current The current index of a relation that matches. ++++++++++++++++++++++++++++++++++++++*/ index_t FindNextTurnRelation1(Relations *relations,index_t current) { TurnRelation *relation; index_t via; relation=LookupTurnRelation(relations,current,1); via=relation->via; current++; if(current==relations->file.trnumber) return(NO_RELATION); relation=LookupTurnRelation(relations,current,1); if(relation->via==via) return(current); else return(NO_RELATION); } /*++++++++++++++++++++++++++++++++++++++ Find the first turn relation in the file whose 'via' and 'from' match a specific node and segment. index_t FindFirstTurnRelation2 Returns the index of the first turn relation matching. Relations *relations The set of relations to use. index_t via The node that the route is going via. index_t from The segment that the route is coming from. ++++++++++++++++++++++++++++++++++++++*/ index_t FindFirstTurnRelation2(Relations *relations,index_t via,index_t from) { TurnRelation *relation; index_t start=0; index_t end=relations->file.trnumber-1; index_t mid; index_t match=NO_RELATION; if(IsFakeSegment(from)) from=IndexRealSegment(from); /* Binary search - search key first match is required. * * # <- start | Check mid and move start or end if it doesn't match * # | * # | Since an exact match is wanted we can set end=mid-1 * # <- mid | or start=mid+1 because we know that mid doesn't match. * # | * # | Eventually either end=start or end=start+1 and one of * # <- end | start or end matches (but may not be the first). */ do { mid=(start+end)/2; /* Choose mid point */ relation=LookupTurnRelation(relations,mid,1); if(relation->viavia>via) /* Mid point is too high for 'via' */ end=mid?(mid-1):mid; else /* Mid point is correct for 'via' */ { if(relation->fromfrom>from) /* Mid point is too high for 'from' */ end=mid?(mid-1):mid; else /* Mid point is correct for 'from' */ { match=mid; break; } } } while((end-start)>1); if(match==NO_RELATION) /* Check if start matches */ { relation=LookupTurnRelation(relations,start,1); if(relation->via==via && relation->from==from) match=start; } if(match==NO_RELATION) /* Check if end matches */ { relation=LookupTurnRelation(relations,end,1); if(relation->via==via && relation->from==from) match=end; } if(match==NO_RELATION) return(match); while(match>0) /* Search backwards for the first match */ { relation=LookupTurnRelation(relations,match-1,1); if(relation->via==via && relation->from==from) match--; else break; } return(match); } /*++++++++++++++++++++++++++++++++++++++ Find the next turn relation in the file whose 'via' and 'from' match a specific node and segment. index_t FindNextTurnRelation2 Returns the index of the next turn relation matching. Relations *relations The set of relations to use. index_t current The current index of a relation that matches. ++++++++++++++++++++++++++++++++++++++*/ index_t FindNextTurnRelation2(Relations *relations,index_t current) { TurnRelation *relation; index_t via,from; relation=LookupTurnRelation(relations,current,1); via=relation->via; from=relation->from; current++; if(current==relations->file.trnumber) return(NO_RELATION); relation=LookupTurnRelation(relations,current,1); if(relation->via==via && relation->from==from) return(current); else return(NO_RELATION); } /*++++++++++++++++++++++++++++++++++++++ Determine if a turn is allowed between the nodes 'from', 'via' and 'to' for a particular transport type. int IsTurnAllowed Return 1 if the turn is allowed or 0 if not. Relations *relations The set of relations to use. index_t index The index of the first turn relation containing 'via' and 'from'. index_t via The via node. index_t from The from segment. index_t to The to segment. transports_t transport The type of transport that is being routed. ++++++++++++++++++++++++++++++++++++++*/ int IsTurnAllowed(Relations *relations,index_t index,index_t via,index_t from,index_t to,transports_t transport) { if(IsFakeSegment(from)) from=IndexRealSegment(from); if(IsFakeSegment(to)) to=IndexRealSegment(to); while(indexfile.trnumber) { TurnRelation *relation=LookupTurnRelation(relations,index,1); if(relation->via!=via) return(1); if(relation->from!=from) return(1); if(relation->to>to) return(1); if(relation->to==to) if(!(relation->except & transport)) return(0); index++; } return(1); } routino-3.2/src/router.c 644 233 144 64057 12741233764 10545 0/*************************************** OSM router. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2016 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include #include "version.h" #include "types.h" #include "nodes.h" #include "segments.h" #include "ways.h" #include "relations.h" #include "files.h" #include "logging.h" #include "functions.h" #include "fakes.h" #include "translations.h" #include "profiles.h" /*+ The maximum distance from the specified point to search for a node or segment (in km). +*/ #define MAXSEARCH 1 /* Global variables */ /*+ The option not to print any progress information. +*/ int option_quiet=0; /*+ The option to calculate the quickest route insted of the shortest. +*/ extern int option_quickest; /*+ The options to select the format of the file output. +*/ extern int option_file_html,option_file_gpx_track,option_file_gpx_route,option_file_text,option_file_text_all,option_file_stdout; int option_file_none=0; /* Local functions */ static void print_usage(int detail,const char *argerr,const char *err); /*++++++++++++++++++++++++++++++++++++++ The main program for the router. ++++++++++++++++++++++++++++++++++++++*/ int main(int argc,char** argv) { Nodes *OSMNodes; Segments *OSMSegments; Ways *OSMWays; Relations *OSMRelations; Results *results[NWAYPOINTS+1]={NULL}; int point_used[NWAYPOINTS+1]={0}; double point_lon[NWAYPOINTS+1],point_lat[NWAYPOINTS+1]; index_t point_node[NWAYPOINTS+1]={NO_NODE}; double heading=-999; int help_profile=0,help_profile_xml=0,help_profile_json=0,help_profile_pl=0; char *dirname=NULL,*prefix=NULL; char *profiles=NULL,*profilename=NULL; char *translations=NULL,*language=NULL; int exactnodes=0,reverse=0,loop=0; Transport transport=Transport_None; Profile *profile=NULL; Translation *translation=NULL; index_t start_node,finish_node=NO_NODE; index_t join_segment=NO_SEGMENT; int arg,nresults=0; waypoint_t start_waypoint,finish_waypoint=NO_WAYPOINT; waypoint_t first_waypoint=NWAYPOINTS,last_waypoint=1,waypoint; int inc_dec_waypoint=1; printf_program_start(); /* Parse the command line arguments */ if(argc<2) print_usage(0,NULL,NULL); /* Get the non-routing, general program options */ for(arg=1;argNWAYPOINTS || point_used[point]&1) print_usage(0,argv[arg],NULL); point_lon[point]=degrees_to_radians(atof(p)); point_used[point]+=1; if(pointlast_waypoint) last_waypoint=point; } else if(!strncmp(argv[arg],"--lat",5) && isdigit(argv[arg][5])) { int point; char *p=&argv[arg][6]; while(isdigit(*p)) p++; if(*p++!='=') print_usage(0,argv[arg],NULL); point=atoi(&argv[arg][5]); if(point>NWAYPOINTS || point_used[point]&2) print_usage(0,argv[arg],NULL); point_lat[point]=degrees_to_radians(atof(p)); point_used[point]+=2; if(pointlast_waypoint) last_waypoint=point; } else if(!strncmp(argv[arg],"--heading=",10)) { double h=atof(&argv[arg][10]); if(h>=-360 && h<=360) { heading=h; if(heading<0) heading+=360; } } else if(!strncmp(argv[arg],"--transport=",12)) { transport=TransportType(&argv[arg][12]); if(transport==Transport_None) print_usage(0,argv[arg],NULL); } else continue; argv[arg]=NULL; } /* Check the specified command line options */ if(option_file_stdout && (option_file_html+option_file_gpx_track+option_file_gpx_route+option_file_text+option_file_text_all)!=1) { fprintf(stderr,"Error: The '--output-stdout' option requires exactly one other output option (but not '--output-none').\n"); exit(EXIT_FAILURE); } if(option_file_html==0 && option_file_gpx_track==0 && option_file_gpx_route==0 && option_file_text==0 && option_file_text_all==0 && option_file_none==0) option_file_html=option_file_gpx_track=option_file_gpx_route=option_file_text=option_file_text_all=1; /* Load in the selected profiles */ if(transport==Transport_None) transport=Transport_Motorcar; if(profiles) { if(!ExistsFile(profiles)) { fprintf(stderr,"Error: The '--profiles' option specifies a file '%s' that does not exist.\n",profiles); exit(EXIT_FAILURE); } } else { profiles=FileName(dirname,prefix,"profiles.xml"); if(!ExistsFile(profiles)) { char *defaultprofiles=FileName(ROUTINO_DATADIR,NULL,"profiles.xml"); if(!ExistsFile(defaultprofiles)) { fprintf(stderr,"Error: The '--profiles' option was not used and the files '%s' and '%s' do not exist.\n",profiles,defaultprofiles); exit(EXIT_FAILURE); } free(profiles); profiles=defaultprofiles; } } if(!profilename) profilename=(char*)TransportName(transport); if(ParseXMLProfiles(profiles,profilename,(help_profile_xml|help_profile_json|help_profile_pl))) { fprintf(stderr,"Error: Cannot read the profiles in the file '%s'.\n",profiles); exit(EXIT_FAILURE); } profile=GetProfile(profilename); if(!profile) { fprintf(stderr,"Error: Cannot find a profile called '%s' in the file '%s'.\n",profilename,profiles); profile=(Profile*)calloc(1,sizeof(Profile)); profile->transport=transport; } /* Parse the other command line arguments that modify the profile */ for(arg=1;arg100) print_usage(0,argv[arg],NULL); profile->highway[highway]=(score_t)(p/100); free(string); } else if(!strncmp(argv[arg],"--speed-",8)) { Highway highway; char *equal=strchr(argv[arg],'='); char *string; double s; if(!equal) print_usage(0,argv[arg],NULL); string=strcpy((char*)malloc(strlen(argv[arg])),argv[arg]+8); string[equal-argv[arg]-8]=0; highway=HighwayType(string); if(highway==Highway_None) print_usage(0,argv[arg],NULL); s=atof(equal+1); if(s<0) print_usage(0,argv[arg],NULL); profile->speed[highway]=kph_to_speed(s); free(string); } else if(!strncmp(argv[arg],"--property-",11)) { Property property; char *equal=strchr(argv[arg],'='); char *string; double p; if(!equal) print_usage(0,argv[arg],NULL); string=strcpy((char*)malloc(strlen(argv[arg])),argv[arg]+11); string[equal-argv[arg]-11]=0; property=PropertyType(string); if(property==Property_None) print_usage(0,argv[arg],NULL); p=atof(equal+1); if(p<0 || p>100) print_usage(0,argv[arg],NULL); profile->props[property]=(score_t)(p/100); free(string); } else if(!strncmp(argv[arg],"--oneway=",9)) profile->oneway=!!atoi(&argv[arg][9]); else if(!strncmp(argv[arg],"--turns=",8)) profile->turns=!!atoi(&argv[arg][8]); else if(!strncmp(argv[arg],"--weight=",9)) profile->weight=tonnes_to_weight(atof(&argv[arg][9])); else if(!strncmp(argv[arg],"--height=",9)) profile->height=metres_to_height(atof(&argv[arg][9])); else if(!strncmp(argv[arg],"--width=",8)) profile->width=metres_to_width(atof(&argv[arg][8])); else if(!strncmp(argv[arg],"--length=",9)) profile->length=metres_to_length(atof(&argv[arg][9])); else print_usage(0,argv[arg],NULL); } /* Print one of the profiles if requested */ if(help_profile) { PrintProfile(profile); exit(EXIT_SUCCESS); } else if(help_profile_xml) { PrintProfilesXML(); exit(EXIT_SUCCESS); } else if(help_profile_json) { PrintProfilesJSON(); exit(EXIT_SUCCESS); } else if(help_profile_pl) { PrintProfilesPerl(); exit(EXIT_SUCCESS); } /* Load in the selected translation */ if(option_file_html || option_file_gpx_route || option_file_gpx_track || option_file_text || option_file_text_all) { if(translations) { if(!ExistsFile(translations)) { fprintf(stderr,"Error: The '--translations' option specifies a file '%s' that does not exist.\n",translations); exit(EXIT_FAILURE); } } else { translations=FileName(dirname,prefix,"translations.xml"); if(!ExistsFile(translations)) { char *defaulttranslations=FileName(ROUTINO_DATADIR,NULL,"translations.xml"); if(!ExistsFile(defaulttranslations)) { fprintf(stderr,"Error: The '--translations' option was not used and the files '%s' and '%s' do not exist.\n",translations,defaulttranslations); exit(EXIT_FAILURE); } free(translations); translations=defaulttranslations; } } if(ParseXMLTranslations(translations,language,0)) { fprintf(stderr,"Error: Cannot read the translations in the file '%s'.\n",translations); exit(EXIT_FAILURE); } if(language) { translation=GetTranslation(language); if(!translation) { fprintf(stderr,"Warning: Cannot find a translation called '%s' in the file '%s'.\n",language,translations); exit(EXIT_FAILURE); } } else { translation=GetTranslation(""); if(!translation) { fprintf(stderr,"Warning: No translations in '%s'.\n",translations); exit(EXIT_FAILURE); } } } /* Check the waypoints are valid */ for(waypoint=1;waypoint<=NWAYPOINTS;waypoint++) if(point_used[waypoint]==1 || point_used[waypoint]==2) print_usage(0,NULL,"All waypoints must have latitude and longitude."); if(first_waypoint>=last_waypoint) print_usage(0,NULL,"At least two waypoints must be specified."); /* Load in the data - Note: No error checking because Load*List() will call exit() in case of an error. */ if(!option_quiet) printf_first("Loading Files:"); OSMNodes=LoadNodeList(FileName(dirname,prefix,"nodes.mem")); OSMSegments=LoadSegmentList(FileName(dirname,prefix,"segments.mem")); OSMWays=LoadWayList(FileName(dirname,prefix,"ways.mem")); OSMRelations=LoadRelationList(FileName(dirname,prefix,"relations.mem")); if(!option_quiet) printf_last("Loaded Files: nodes, segments, ways & relations"); /* Check the profile is valid for use with this database */ if(UpdateProfile(profile,OSMWays)) { fprintf(stderr,"Error: Profile is invalid or not compatible with database.\n"); exit(EXIT_FAILURE); } /* Find all waypoints */ for(waypoint=first_waypoint;waypoint<=last_waypoint;waypoint++) { distance_t distmax=km_to_distance(MAXSEARCH); distance_t distmin; index_t segment=NO_SEGMENT; index_t node1,node2,node=NO_NODE; if(point_used[waypoint]!=3) continue; /* Find the closest point */ if(!option_quiet) printf_first("Finding Closest Point: Waypoint %d",waypoint); if(exactnodes) node=FindClosestNode(OSMNodes,OSMSegments,OSMWays,point_lat[waypoint],point_lon[waypoint],distmax,profile,&distmin); else { distance_t dist1,dist2; segment=FindClosestSegment(OSMNodes,OSMSegments,OSMWays,point_lat[waypoint],point_lon[waypoint],distmax,profile,&distmin,&node1,&node2,&dist1,&dist2); if(segment!=NO_SEGMENT) node=CreateFakes(OSMNodes,OSMSegments,waypoint,LookupSegment(OSMSegments,segment,1),node1,node2,dist1,dist2); } if(!option_quiet) printf_last("Found Closest Point: Waypoint %d",waypoint); if(node==NO_NODE) { fprintf(stderr,"Error: Cannot find node close to specified point %d.\n",waypoint); exit(EXIT_FAILURE); } if(!option_quiet) { double lat,lon; if(IsFakeNode(node)) GetFakeLatLong(node,&lat,&lon); else GetLatLong(OSMNodes,node,NULL,&lat,&lon); if(IsFakeNode(node)) printf("Waypoint %d is segment %"Pindex_t" (node %"Pindex_t" -> %"Pindex_t"): %3.6f %4.6f = %2.3f km\n",waypoint,segment,node1,node2, radians_to_degrees(lon),radians_to_degrees(lat),distance_to_km(distmin)); else printf("Waypoint %d is node %"Pindex_t": %3.6f %4.6f = %2.3f km\n",waypoint,node, radians_to_degrees(lon),radians_to_degrees(lat),distance_to_km(distmin)); } point_node[waypoint]=node; } /* Check for reverse direction */ if(reverse) { waypoint_t temp; temp=first_waypoint; first_waypoint=last_waypoint; last_waypoint=temp; inc_dec_waypoint=-1; } /* Loop through all pairs of waypoints */ if(loop && reverse) { finish_node=point_node[last_waypoint]; finish_waypoint=last_waypoint; } for(waypoint=first_waypoint;waypoint!=(last_waypoint+inc_dec_waypoint);waypoint+=inc_dec_waypoint) { if(point_used[waypoint]!=3) continue; start_node=finish_node; finish_node=point_node[waypoint]; start_waypoint=finish_waypoint; finish_waypoint=waypoint; if(start_node==NO_NODE) continue; if(heading!=-999 && join_segment==NO_SEGMENT) join_segment=FindClosestSegmentHeading(OSMNodes,OSMSegments,OSMWays,start_node,heading,profile); /* Calculate the route */ if(!option_quiet) printf("Routing from waypoint %d to waypoint %d\n",start_waypoint,finish_waypoint); results[nresults]=CalculateRoute(OSMNodes,OSMSegments,OSMWays,OSMRelations,profile,start_node,join_segment,finish_node,start_waypoint,finish_waypoint); if(!results[nresults]) exit(EXIT_FAILURE); join_segment=results[nresults]->last_segment; nresults++; } if(loop && !reverse) { start_node=finish_node; finish_node=point_node[first_waypoint]; start_waypoint=finish_waypoint; finish_waypoint=first_waypoint; /* Calculate the route */ if(!option_quiet) printf("Routing from waypoint %d to waypoint %d\n",start_waypoint,finish_waypoint); results[nresults]=CalculateRoute(OSMNodes,OSMSegments,OSMWays,OSMRelations,profile,start_node,join_segment,finish_node,start_waypoint,finish_waypoint); if(!results[nresults]) exit(EXIT_FAILURE); nresults++; } if(!option_quiet) { printf("Routed OK\n"); fflush(stdout); } /* Print out the combined route */ if(!option_quiet) printf_first("Generating Result Outputs"); if(!option_file_none) PrintRoute(results,nresults,OSMNodes,OSMSegments,OSMWays,OSMRelations,profile,translation); if(!option_quiet) printf_last("Generated Result Outputs"); /* Destroy the remaining results lists and data structures */ #ifdef DEBUG_MEMORY_LEAK for(waypoint=0;waypoint=0) { fprintf(stderr, "Usage: router [--version]\n" " [--help | --help-profile | --help-profile-xml |\n" " --help-profile-json | --help-profile-perl ]\n" " [--dir=] [--prefix=]\n" " [--profiles=] [--translations=]\n" " [--exact-nodes-only]\n" " [--quiet | [--loggable] [--logtime] [--logmemory]]\n" " [--language=]\n" " [--output-html]\n" " [--output-gpx-track] [--output-gpx-route]\n" " [--output-text] [--output-text-all]\n" " [--output-none] [--output-stdout]\n" " [--profile=]\n" " [--transport=]\n" " [--shortest | --quickest]\n" " --lon1= --lat1=\n" " --lon2= --lon2=\n" " [ ... --lon99= --lon99=]\n" " [--reverse] [--loop]\n" " [--highway-= ...]\n" " [--speed-= ...]\n" " [--property-= ...]\n" " [--oneway=(0|1)] [--turns=(0|1)]\n" " [--weight=]\n" " [--height=] [--width=] [--length=]\n"); if(argerr) fprintf(stderr, "\n" "Error with command line parameter: %s\n",argerr); if(err) fprintf(stderr, "\n" "Error: %s\n",err); } if(detail==1) fprintf(stderr, "\n" "--version Print the version of Routino.\n" "\n" "--help Prints this information.\n" "--help-profile Prints the information about the selected profile.\n" "--help-profile-xml Prints all loaded profiles in XML format.\n" "--help-profile-json Prints all loaded profiles in JSON format.\n" "--help-profile-perl Prints all loaded profiles in Perl format.\n" "\n" "--dir= The directory containing the routing database.\n" "--prefix= The filename prefix for the routing database.\n" "--profiles= The name of the XML file containing the profiles\n" " (defaults to 'profiles.xml' with '--dir' and\n" " '--prefix' options or the file installed in\n" " '" ROUTINO_DATADIR "').\n" "--translations= The name of the XML file containing the translations\n" " (defaults to 'translations.xml' with '--dir' and\n" " '--prefix' options or the file installed in\n" " '" ROUTINO_DATADIR "').\n" "\n" "--exact-nodes-only Only route between nodes (don't find closest segment).\n" "\n" "--quiet Don't print any screen output when running.\n" "--loggable Print progress messages suitable for logging to file.\n" "--logtime Print the elapsed time for each processing step.\n" "--logmemory Print the max allocated/mapped memory for each step.\n" "\n" "--language= Use the translations for specified language.\n" "--output-html Write an HTML description of the route.\n" "--output-gpx-track Write a GPX track file with all route points.\n" "--output-gpx-route Write a GPX route file with interesting junctions.\n" "--output-text Write a plain text file with interesting junctions.\n" "--output-text-all Write a plain text file with all route points.\n" "--output-none Don't write any output files or read any translations.\n" " (If no output option is given then all are written.)\n" "--output-stdout Write to stdout instead of a file (requires exactly\n" " one output format option, implies '--quiet').\n" "\n" "--profile= Select the loaded profile with this name.\n" "--transport= Select the transport to use (selects the profile\n" " named after the transport if '--profile' is not used.)\n" "\n" "--shortest Find the shortest route between the waypoints.\n" "--quickest Find the quickest route between the waypoints.\n" "\n" "--lon= Specify the longitude of the n'th waypoint.\n" "--lat= Specify the latitude of the n'th waypoint.\n" "\n" "--reverse Find a route between the waypoints in reverse order.\n" "--loop Find a route that returns to the first waypoint.\n" "\n" "--heading= Initial compass bearing at lowest numbered waypoint.\n" "\n" " Routing preference options\n" "--highway-= * preference for highway type (%%).\n" "--speed-= * speed for highway type (km/h).\n" "--property-= * preference for proprty type (%%).\n" "--oneway=(0|1) * oneway restrictions are to be obeyed.\n" "--turns=(0|1) * turn restrictions are to be obeyed.\n" "--weight= * maximum weight limit (tonnes).\n" "--height= * maximum height limit (metres).\n" "--width= * maximum width limit (metres).\n" "--length= * maximum length limit (metres).\n" "\n" " defaults to motorcar but can be set to:\n" "%s" "\n" " can be selected from:\n" "%s" "\n" " can be selected from:\n" "%s", TransportList(),HighwayList(),PropertyList()); exit(!detail); } routino-3.2/src/waysx.h 644 233 144 12100 12550223461 10352 0/*************************************** A header file for the extended Ways structure. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef WAYSX_H #define WAYSX_H /*+ To stop multiple inclusions. +*/ #include #include "types.h" #include "ways.h" #include "typesx.h" #include "cache.h" #include "files.h" /* Data structures */ /*+ An extended structure containing a single way. +*/ struct _WayX { way_t id; /*+ The way identifier; initially the OSM value, later the Way index. +*/ Way way; /*+ The real way data. +*/ }; /*+ A structure containing a set of ways (memory format). +*/ struct _WaysX { char *filename; /*+ The name of the intermediate file (for the WaysX). +*/ char *filename_tmp; /*+ The name of the temporary file (for the WaysX). +*/ int fd; /*+ The file descriptor of the open file (for the WaysX). +*/ index_t number; /*+ The number of extended ways still being considered. +*/ index_t knumber; /*+ The number of extended ways kept for next time. +*/ transports_t allow; /*+ The types of traffic that were seen when parsing. +*/ #if !SLIM WayX *data; /*+ The extended ways data (when mapped into memory). +*/ #else WayX cached[3]; /*+ Three cached extended ways read from the file in slim mode. +*/ index_t incache[3]; /*+ The indexes of the cached extended ways. +*/ WayXCache *cache; /*+ A RAM cache of extended ways read from the file. +*/ #endif way_t *idata; /*+ The extended way IDs (sorted by ID). +*/ offset_t *odata; /*+ The offset of the way in the file (used for error log). +*/ index_t *cdata; /*+ The compacted way IDs (same order as sorted ways). +*/ char *nfilename_tmp; /*+ The name of the temporary file (for the WaysX names). +*/ int nfd; /*+ The file descriptor of the temporary file (for the WaysX names). +*/ uint32_t nlength; /*+ The length of the string of name entries. +*/ }; /* Functions in waysx.c */ WaysX *NewWayList(int append,int readonly); void FreeWayList(WaysX *waysx,int keep); void AppendWayList(WaysX *waysx,way_t id,Way *way,node_t *nodes,int nnodes,const char *name); void FinishWayList(WaysX *waysx); index_t IndexWayX(WaysX *waysx,way_t id); void SortWayList(WaysX *waysx); SegmentsX *SplitWays(WaysX *waysx,NodesX *nodesx,int keep); void SortWayNames(WaysX *waysx); void CompactWayList(WaysX *waysx,SegmentsX *segmentsx); void SaveWayList(WaysX *waysx,const char *filename); /* Macros / inline functions */ #if !SLIM #define LookupWayX(waysx,index,position) &(waysx)->data[index] #define PutBackWayX(waysx,wayx) while(0) { /* nop */ } #else /* Prototypes */ static inline WayX *LookupWayX(WaysX *waysx,index_t index,int position); static inline void PutBackWayX(WaysX *waysx,WayX *wayx); CACHE_NEWCACHE_PROTO(WayX) CACHE_DELETECACHE_PROTO(WayX) CACHE_FETCHCACHE_PROTO(WayX) CACHE_REPLACECACHE_PROTO(WayX) CACHE_INVALIDATECACHE_PROTO(WayX) /* Data type */ CACHE_STRUCTURE(WayX) /* Inline functions */ CACHE_NEWCACHE(WayX) CACHE_DELETECACHE(WayX) CACHE_FETCHCACHE(WayX) CACHE_REPLACECACHE(WayX) CACHE_INVALIDATECACHE(WayX) /*++++++++++++++++++++++++++++++++++++++ Lookup a particular extended way with the specified id from the file on disk. WayX *LookupWayX Returns a pointer to a cached copy of the extended way. WaysX *waysx The set of ways to use. index_t index The way index to look for. int position The position in the cache to use. ++++++++++++++++++++++++++++++++++++++*/ static inline WayX *LookupWayX(WaysX *waysx,index_t index,int position) { waysx->cached[position-1]=*FetchCachedWayX(waysx->cache,index,waysx->fd,0); waysx->incache[position-1]=index; return(&waysx->cached[position-1]); } /*++++++++++++++++++++++++++++++++++++++ Put back an extended way's data into the file on disk. WaysX *waysx The set of ways to use. WayX *wayx The extended way to be put back. ++++++++++++++++++++++++++++++++++++++*/ static inline void PutBackWayX(WaysX *waysx,WayX *wayx) { int position1=wayx-&waysx->cached[0]; ReplaceCachedWayX(waysx->cache,wayx,waysx->incache[position1],waysx->fd,0); } #endif /* SLIM */ #endif /* WAYSX_H */ routino-3.2/src/router+lib.c 644 233 144 45311 12741233763 11276 0/*************************************** OSM router using libroutino library. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2016 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include #include #include #include "version.h" #include "routino.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif /*+ The maximum number of waypoints +*/ #define NWAYPOINTS 99 /* Local functions */ static char *FileName(const char *dirname,const char *prefix, const char *name); static void print_usage(int detail,const char *argerr,const char *err); /*++++++++++++++++++++++++++++++++++++++ The main program for the router. ++++++++++++++++++++++++++++++++++++++*/ int main(int argc,char** argv) { Routino_Database *database; Routino_Profile *profile; Routino_Translation *translation; Routino_Waypoint **waypoints; Routino_Output *route; int point_used[NWAYPOINTS+1]={0}; double point_lon[NWAYPOINTS+1],point_lat[NWAYPOINTS+1]; char *dirname=NULL,*prefix=NULL; char *profiles=NULL,*profilename="motorcar"; char *translations=NULL,*language="en"; int reverse=0,loop=0; int quickest=0; int html=0,gpx_track=0,gpx_route=0,text=0,text_all=0,none=0,use_stdout=0; int list_html=0,list_html_all=0,list_text=0,list_text_all=0; int arg; int first_waypoint=NWAYPOINTS,last_waypoint=1,waypoint,nwaypoints=0; int routing_options; /* Check the libroutino API version */ if(Routino_CheckAPIVersion()!=ROUTINO_ERROR_NONE) { fprintf(stderr,"Error: Executable version (%d) and library version (%d) do not match.\n",ROUTINO_API_VERSION,Routino_APIVersion); exit(EXIT_FAILURE); } /* Parse the command line arguments */ if(argc<2) print_usage(0,NULL,NULL); /* Get the non-routing, general program options */ for(arg=1;argNWAYPOINTS || point_used[point]&1) print_usage(0,argv[arg],NULL); point_lon[point]=atof(p); point_used[point]+=1; if(pointlast_waypoint) last_waypoint=point; } else if(!strncmp(argv[arg],"--lat",5) && isdigit(argv[arg][5])) { int point; char *p=&argv[arg][6]; while(isdigit(*p)) p++; if(*p++!='=') print_usage(0,argv[arg],NULL); point=atoi(&argv[arg][5]); if(point>NWAYPOINTS || point_used[point]&2) print_usage(0,argv[arg],NULL); point_lat[point]=atof(p); point_used[point]+=2; if(pointlast_waypoint) last_waypoint=point; } else print_usage(0,argv[arg],NULL); argv[arg]=NULL; } /* Check the specified command line options */ if(use_stdout && (html+gpx_track+gpx_route+text+text_all)!=1) { fprintf(stderr,"Error: The '--output-stdout' option requires exactly one other output option (but not '--output-none').\n"); exit(EXIT_FAILURE); } if(html==0 && gpx_track==0 && gpx_route==0 && text==0 && text_all==0 && none==0) html=gpx_track=gpx_route=text=text_all=1; /* Load in the selected profiles */ if(profiles) { if(access(profiles,F_OK)) { fprintf(stderr,"Error: The '--profiles' option specifies a file '%s' that does not exist.\n",profiles); exit(EXIT_FAILURE); } } else { profiles=FileName(dirname,prefix,"profiles.xml"); if(access(profiles,F_OK)) { char *defaultprofiles=FileName(ROUTINO_DATADIR,NULL,"profiles.xml"); if(access(defaultprofiles,F_OK)) { fprintf(stderr,"Error: The '--profiles' option was not used and the files '%s' and '%s' do not exist.\n",profiles,defaultprofiles); exit(EXIT_FAILURE); } free(profiles); profiles=defaultprofiles; } } if(!profilename) { fprintf(stderr,"Error: A profile name must be specified.\n"); exit(EXIT_FAILURE); } if(Routino_ParseXMLProfiles(profiles)) { fprintf(stderr,"Error: Cannot read the profiles in the file '%s'.\n",profiles); exit(EXIT_FAILURE); } profile=Routino_GetProfile(profilename); if(!profile) { char **list=Routino_GetProfileNames(); fprintf(stderr,"Error: Cannot find a profile called '%s' in the file '%s'.\n",profilename,profiles); fprintf(stderr,"Profiles available are: %s",*list++); while(*list) fprintf(stderr,", %s",*list++); fprintf(stderr,"\n"); exit(EXIT_FAILURE); } /* Load in the selected translation */ if(translations) { if(access(translations,F_OK)) { fprintf(stderr,"Error: The '--translations' option specifies a file that does not exist.\n"); exit(EXIT_FAILURE); } } else { translations=FileName(dirname,prefix,"translations.xml"); if(access(translations,F_OK)) { char *defaulttranslations=FileName(ROUTINO_DATADIR,NULL,"translations.xml"); if(access(defaulttranslations,F_OK)) { fprintf(stderr,"Error: The '--translations' option was not used and the files '%s' and '%s' do not exist.\n",translations,defaulttranslations); exit(EXIT_FAILURE); } free(translations); translations=defaulttranslations; } } if(Routino_ParseXMLTranslations(translations)) { fprintf(stderr,"Error: Cannot read the translations in the file '%s'.\n",translations); exit(EXIT_FAILURE); } if(language) { translation=Routino_GetTranslation(language); if(!translation) { char **list1=Routino_GetTranslationLanguages(); char **list2=Routino_GetTranslationLanguageFullNames(); fprintf(stderr,"Warning: Cannot find a translation called '%s' in the file '%s'.\n",language,translations); fprintf(stderr,"Languages available are: %s (%s)",*list1++,*list2++); while(*list1) fprintf(stderr,", %s (%s)",*list1++,*list2++); fprintf(stderr,"\n"); exit(EXIT_FAILURE); } } else { translation=Routino_GetTranslation(""); /* first in file */ if(!translation) { fprintf(stderr,"Warning: No translations in '%s'.\n",translations); exit(EXIT_FAILURE); } } /* Check the waypoints are valid */ for(waypoint=first_waypoint;waypoint<=last_waypoint;waypoint++) if(point_used[waypoint]==1 || point_used[waypoint]==2) print_usage(0,NULL,"All waypoints must have latitude and longitude."); else if(point_used[waypoint]==3) nwaypoints++; if(first_waypoint>=last_waypoint) { fprintf(stderr,"Error: At least two waypoints must be specified.\n"); exit(EXIT_FAILURE); } waypoints=calloc(sizeof(Routino_Waypoint*),nwaypoints+2); /* Load in the routing database */ database=Routino_LoadDatabase(dirname,prefix); /* Check the profile is valid for use with this database */ if(Routino_ValidateProfile(database,profile)!=ROUTINO_ERROR_NONE) { fprintf(stderr,"Error: Profile is invalid or not compatible with database.\n"); exit(EXIT_FAILURE); } /* Loop through all waypoints */ nwaypoints=0; for(waypoint=first_waypoint;waypoint<=last_waypoint;waypoint++) { if(point_used[waypoint]!=3) continue; waypoints[nwaypoints]=Routino_FindWaypoint(database,profile,point_lat[waypoint],point_lon[waypoint]); if(!waypoints[nwaypoints]) { fprintf(stderr,"Error: Cannot find node close to specified point %d.\n",waypoint); exit(EXIT_FAILURE); } nwaypoints++; } /* Create the route */ routing_options=0; if(quickest) routing_options|=ROUTINO_ROUTE_QUICKEST; else routing_options|=ROUTINO_ROUTE_SHORTEST; if(html ) routing_options|=ROUTINO_ROUTE_FILE_HTML; if(gpx_track) routing_options|=ROUTINO_ROUTE_FILE_GPX_TRACK; if(gpx_route) routing_options|=ROUTINO_ROUTE_FILE_GPX_ROUTE; if(text ) routing_options|=ROUTINO_ROUTE_FILE_TEXT; if(text_all ) routing_options|=ROUTINO_ROUTE_FILE_TEXT_ALL; if(list_html) routing_options|=ROUTINO_ROUTE_LIST_HTML; if(list_html_all) routing_options|=ROUTINO_ROUTE_LIST_HTML_ALL; if(list_text) routing_options|=ROUTINO_ROUTE_LIST_TEXT; if(list_text_all) routing_options|=ROUTINO_ROUTE_LIST_TEXT_ALL; if(reverse) routing_options|=ROUTINO_ROUTE_REVERSE; if(loop) routing_options|=ROUTINO_ROUTE_LOOP; route=Routino_CalculateRoute(database,profile,translation,waypoints,nwaypoints,routing_options,NULL); if(Routino_errno>=ROUTINO_ERROR_NO_ROUTE_1) { fprintf(stderr,"Error: Cannot find a route between specified waypoints.\n"); exit(EXIT_FAILURE); } else if(Routino_errno!=ROUTINO_ERROR_NONE) { fprintf(stderr,"Error: Internal error (%d).\n",Routino_errno); exit(EXIT_FAILURE); } /* Print the list output */ if(list_html || list_html_all || list_text || list_text_all) { Routino_Output *list=route; int first=1,last; while(list) { last=list->next?0:1; printf("----------------\n"); printf("Lon,Lat: %.5f, %.5f\n",(180.0/M_PI)*list->lon,(180.0/M_PI)*list->lat); if(list_html || list_html_all || list_text || list_text_all) printf("Dist,Time: %.3f km, %.1f minutes\n",list->dist,list->time); if(list_text_all && !first) printf("Speed: %.0f km/hr\n",list->speed); printf("Point type: %d\n",list->type); if((list_html || list_html_all || list_text) && !first && !last) printf("Turn: %d degrees\n",list->turn); if(((list_html || list_html_all || list_text) && !last) || (list_text_all && !first)) printf("Bearing: %d degrees\n",list->bearing); if(((list_html || list_text) && !last) || (list_html_all && list->name) || (list_text_all && !first)) printf("Name: %s\n",list->name); if(list_html || (list_html_all && list->name)) { printf("Desc1: %s\n",list->desc1); printf("Desc2: %s\n",list->desc2); if(!last) printf("Desc3: %s\n",list->desc3); } list=list->next; first=0; } } /* Tidy up and exit */ Routino_DeleteRoute(route); Routino_UnloadDatabase(database); Routino_FreeXMLProfiles(); Routino_FreeXMLTranslations(); for(waypoint=0;waypoint=0) { fprintf(stderr, "Usage: router [--version]\n" " [--help ]\n" " [--dir=] [--prefix=]\n" " [--profiles=] [--translations=]\n" " [--language=]\n" " [--output-html]\n" " [--output-gpx-track] [--output-gpx-route]\n" " [--output-text] [--output-text-all]\n" " [--output-none] [--output-stdout]\n" " [--list-html | --list-html-all |\n" " --list-text | --list-text-all]\n" " [--profile=]\n" " [--shortest | --quickest]\n" " --lon1= --lat1=\n" " --lon2= --lon2=\n" " [ ... --lon99= --lon99=]\n" " [--reverse] [--loop]\n"); if(argerr) fprintf(stderr, "\n" "Error with command line parameter: %s\n",argerr); if(err) fprintf(stderr, "\n" "Error: %s\n",err); } if(detail==1) fprintf(stderr, "\n" "--version Print the version of Routino.\n" "\n" "--help Prints this information.\n" "\n" "--dir= The directory containing the routing database.\n" "--prefix= The filename prefix for the routing database.\n" "--profiles= The name of the XML file containing the profiles\n" " (defaults to 'profiles.xml' with '--dir' and\n" " '--prefix' options or the file installed in\n" " '" ROUTINO_DATADIR "').\n" "--translations= The name of the XML file containing the translations\n" " (defaults to 'translations.xml' with '--dir' and\n" " '--prefix' options or the file installed in\n" " '" ROUTINO_DATADIR "').\n" "\n" "--language= Use the translations for specified language.\n" "--output-html Write an HTML description of the route.\n" "--output-gpx-track Write a GPX track file with all route points.\n" "--output-gpx-route Write a GPX route file with interesting junctions.\n" "--output-text Write a plain text file with interesting junctions.\n" "--output-text-all Write a plain text file with all route points.\n" "--output-none Don't write any output files or read any translations.\n" " (If no output option is given then all are written.)\n" "--output-stdout Write to stdout instead of a file (requires exactly\n" " one output format option, implies '--quiet').\n" "\n" "--list-html Create an HTML list of the route.\n" "--list-html-all Create an HTML list of the route with all points.\n" "--list-text Create a plain text list with interesting junctions.\n" "--list-text-all Create a plain text list with all route points.\n" "\n" "--profile= Select the loaded profile with this name.\n" "\n" "--shortest Find the shortest route between the waypoints.\n" "--quickest Find the quickest route between the waypoints.\n" "\n" "--lon= Specify the longitude of the n'th waypoint.\n" "--lat= Specify the latitude of the n'th waypoint.\n" "\n" "--reverse Find a route between the waypoints in reverse order.\n" "--loop Find a route that returns to the first waypoint.\n" "\n"); exit(!detail); } routino-3.2/src/translations.c 644 233 144 157440 12764317614 11767 0/*************************************** Load the translations from a file and the functions for handling them. Part of the Routino routing software. ******************/ /****************** This file Copyright 2010-2016 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include "files.h" #include "translations.h" #include "xmlparse.h" /* Default English translations - Must not require any UTF-8 encoding */ static Translation default_translation= { .lang = "--", .language = "English (built-in)", .raw_copyright_creator = {"Creator","Routino - http://www.routino.org/"}, .raw_copyright_source = {NULL,NULL}, .raw_copyright_license = {NULL,NULL}, .xml_copyright_creator = {"Creator","Routino - http://www.routino.org/"}, .xml_copyright_source = {NULL,NULL}, .xml_copyright_license = {NULL,NULL}, .xml_heading = {"South","South-West","West","North-West","North","North-East","East","South-East","South"}, .xml_turn = {"Very sharp left","Sharp left","Left","Slight left","Straight on","Slight right","Right","Sharp right","Very sharp right"}, .xml_ordinal = {"First","Second","Third","Fourth","Fifth","Sixth","Seventh","Eighth","Ninth","Tenth"}, .notxml_heading = {"South","South-West","West","North-West","North","North-East","East","South-East","South"}, .notxml_turn = {"Very sharp left","Sharp left","Left","Slight left","Straight on","Slight right","Right","Sharp right","Very sharp right"}, .notxml_ordinal = {"First","Second","Third","Fourth","Fifth","Sixth","Seventh","Eighth","Ninth","Tenth"}, .raw_highway = {"","motorway","trunk road","primary road","secondary road","tertiary road","unclassified road","residential road","service road","track","cycleway","path","steps","ferry"}, .xml_route_shortest = "Shortest", .xml_route_quickest = "Quickest", .html_waypoint = "Waypoint", .html_junction = "Junction", .html_roundabout = "Roundabout", .html_title = "%s Route", .html_start = "Start at %s, head %s\n", /* span tags added when reading XML translations file */ .html_node = "At %s, go %s heading %s\n", /* span tags added when reading XML translations file */ .html_rbnode = "Leave %s, take the %s exit heading %s\n", /* span tags added when reading XML translations file */ .html_segment = "Follow %s for %.3f km, %.1f min", /* span tags added when reading XML translations file */ .html_stop = "Stop at %s\n", .html_total = "Total %.1f km, %.0f minutes\n",/* span tags added when reading XML translations file */ .html_subtotal= "%.1f km, %.0f minutes\n",/* span tag added when reading XML translations file */ .nothtml_waypoint = "Waypoint", .nothtml_junction = "Junction", .nothtml_roundabout = "Roundabout", .nothtml_title = "%s Route", .nothtml_start = "Start at %s, head %s", .nothtml_node = "At %s, go %s heading %s", .nothtml_rbnode = "Leave %s, take the %s exit heading %s", .nothtml_segment = "Follow %s for %.3f km, %.1f min", .nothtml_stop = "Stop at %s", .nothtml_total = "Total %.1f km, %.0f minutes", .nothtml_subtotal= "%.1f km, %.0f minutes", .gpx_desc = "%s route between 'start' and 'finish' waypoints", .gpx_name = "%s route", .gpx_step = "%s on '%s' for %.3f km, %.1f min", .gpx_final = "Total Journey %.1f km, %.0f minutes", .gpx_waypt = "WAYPT", .gpx_trip = "TRIP", }; /* Local variables (re-intialised by FreeXMLTranslations() function) */ /*+ The translations that have been loaded from file. +*/ static Translation **loaded_translations=NULL; /*+ The number of translations that have been loaded from file. +*/ static int nloaded_translations=0; /* Local variables (re-initialised for each file) */ /*+ Store all of the translations. +*/ static int store_all; /*+ The translation language that is to be stored. +*/ static const char *store_lang; /*+ This current language is to be stored. +*/ static int store; /*+ The chosen language has been stored. +*/ static int stored; /* The XML tag processing function prototypes */ //static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding); //static int RoutinoTranslationsType_function(const char *_tag_,int _type_); static int LanguageType_function(const char *_tag_,int _type_,const char *lang,const char *language); //static int CopyrightType_function(const char *_tag_,int _type_); static int TurnType_function(const char *_tag_,int _type_,const char *direction,const char *string); static int HeadingType_function(const char *_tag_,int _type_,const char *direction,const char *string); static int OrdinalType_function(const char *_tag_,int _type_,const char *number,const char *string); static int HighwayType_function(const char *_tag_,int _type_,const char *type,const char *string); static int RouteType_function(const char *_tag_,int _type_,const char *type,const char *string); //static int HTMLType_function(const char *_tag_,int _type_); //static int GPXType_function(const char *_tag_,int _type_); static int CopyrightCreatorType_function(const char *_tag_,int _type_,const char *string,const char *text); static int CopyrightSourceType_function(const char *_tag_,int _type_,const char *string,const char *text); static int CopyrightLicenseType_function(const char *_tag_,int _type_,const char *string,const char *text); static int HTMLWaypointType_function(const char *_tag_,int _type_,const char *type,const char *string); static int HTMLTitleType_function(const char *_tag_,int _type_,const char *text); static int HTMLStartType_function(const char *_tag_,int _type_,const char *text); static int HTMLNodeType_function(const char *_tag_,int _type_,const char *text); static int HTMLRBNodeType_function(const char *_tag_,int _type_,const char *text); static int HTMLSegmentType_function(const char *_tag_,int _type_,const char *text); static int HTMLStopType_function(const char *_tag_,int _type_,const char *text); static int HTMLTotalType_function(const char *_tag_,int _type_,const char *text); static int HTMLSubtotalType_function(const char *_tag_,int _type_,const char *text); static int GPXWaypointType_function(const char *_tag_,int _type_,const char *type,const char *string); static int GPXDescType_function(const char *_tag_,int _type_,const char *text); static int GPXNameType_function(const char *_tag_,int _type_,const char *text); static int GPXStepType_function(const char *_tag_,int _type_,const char *text); static int GPXFinalType_function(const char *_tag_,int _type_,const char *text); /* The XML tag definitions (forward declarations) */ static const xmltag xmlDeclaration_tag; static const xmltag RoutinoTranslationsType_tag; static const xmltag LanguageType_tag; static const xmltag CopyrightType_tag; static const xmltag TurnType_tag; static const xmltag HeadingType_tag; static const xmltag OrdinalType_tag; static const xmltag HighwayType_tag; static const xmltag RouteType_tag; static const xmltag HTMLType_tag; static const xmltag GPXType_tag; static const xmltag CopyrightCreatorType_tag; static const xmltag CopyrightSourceType_tag; static const xmltag CopyrightLicenseType_tag; static const xmltag HTMLWaypointType_tag; static const xmltag HTMLTitleType_tag; static const xmltag HTMLStartType_tag; static const xmltag HTMLNodeType_tag; static const xmltag HTMLRBNodeType_tag; static const xmltag HTMLSegmentType_tag; static const xmltag HTMLStopType_tag; static const xmltag HTMLTotalType_tag; static const xmltag HTMLSubtotalType_tag; static const xmltag GPXWaypointType_tag; static const xmltag GPXDescType_tag; static const xmltag GPXNameType_tag; static const xmltag GPXStepType_tag; static const xmltag GPXFinalType_tag; /* The XML tag definition values */ /*+ The complete set of tags at the top level. +*/ static const xmltag * const xml_toplevel_tags[]={&xmlDeclaration_tag,&RoutinoTranslationsType_tag,NULL}; /*+ The xmlDeclaration type tag. +*/ static const xmltag xmlDeclaration_tag= {"xml", 2, {"version","encoding"}, NULL, {NULL}}; /*+ The RoutinoTranslationsType type tag. +*/ static const xmltag RoutinoTranslationsType_tag= {"routino-translations", 0, {NULL}, NULL, {&LanguageType_tag,NULL}}; /*+ The LanguageType type tag. +*/ static const xmltag LanguageType_tag= {"language", 2, {"lang","language"}, LanguageType_function, {&CopyrightType_tag,&TurnType_tag,&HeadingType_tag,&OrdinalType_tag,&HighwayType_tag,&RouteType_tag,&HTMLType_tag,&GPXType_tag,NULL}}; /*+ The CopyrightType type tag. +*/ static const xmltag CopyrightType_tag= {"copyright", 0, {NULL}, NULL, {&CopyrightCreatorType_tag,&CopyrightSourceType_tag,&CopyrightLicenseType_tag,NULL}}; /*+ The TurnType type tag. +*/ static const xmltag TurnType_tag= {"turn", 2, {"direction","string"}, TurnType_function, {NULL}}; /*+ The HeadingType type tag. +*/ static const xmltag HeadingType_tag= {"heading", 2, {"direction","string"}, HeadingType_function, {NULL}}; /*+ The OrdinalType type tag. +*/ static const xmltag OrdinalType_tag= {"ordinal", 2, {"number","string"}, OrdinalType_function, {NULL}}; /*+ The HighwayType type tag. +*/ static const xmltag HighwayType_tag= {"highway", 2, {"type","string"}, HighwayType_function, {NULL}}; /*+ The RouteType type tag. +*/ static const xmltag RouteType_tag= {"route", 2, {"type","string"}, RouteType_function, {NULL}}; /*+ The HTMLType type tag. +*/ static const xmltag HTMLType_tag= {"output-html", 0, {NULL}, NULL, {&HTMLWaypointType_tag,&HTMLTitleType_tag,&HTMLStartType_tag,&HTMLNodeType_tag,&HTMLRBNodeType_tag,&HTMLSegmentType_tag,&HTMLStopType_tag,&HTMLTotalType_tag,&HTMLSubtotalType_tag,NULL}}; /*+ The GPXType type tag. +*/ static const xmltag GPXType_tag= {"output-gpx", 0, {NULL}, NULL, {&GPXWaypointType_tag,&GPXDescType_tag,&GPXNameType_tag,&GPXStepType_tag,&GPXFinalType_tag,NULL}}; /*+ The CopyrightCreatorType type tag. +*/ static const xmltag CopyrightCreatorType_tag= {"creator", 2, {"string","text"}, CopyrightCreatorType_function, {NULL}}; /*+ The CopyrightSourceType type tag. +*/ static const xmltag CopyrightSourceType_tag= {"source", 2, {"string","text"}, CopyrightSourceType_function, {NULL}}; /*+ The CopyrightLicenseType type tag. +*/ static const xmltag CopyrightLicenseType_tag= {"license", 2, {"string","text"}, CopyrightLicenseType_function, {NULL}}; /*+ The HTMLWaypointType type tag. +*/ static const xmltag HTMLWaypointType_tag= {"waypoint", 2, {"type","string"}, HTMLWaypointType_function, {NULL}}; /*+ The HTMLTitleType type tag. +*/ static const xmltag HTMLTitleType_tag= {"title", 1, {"text"}, HTMLTitleType_function, {NULL}}; /*+ The HTMLStartType type tag. +*/ static const xmltag HTMLStartType_tag= {"start", 1, {"text"}, HTMLStartType_function, {NULL}}; /*+ The HTMLNodeType type tag. +*/ static const xmltag HTMLNodeType_tag= {"node", 1, {"text"}, HTMLNodeType_function, {NULL}}; /*+ The HTMLRBNodeType type tag. +*/ static const xmltag HTMLRBNodeType_tag= {"rbnode", 1, {"text"}, HTMLRBNodeType_function, {NULL}}; /*+ The HTMLSegmentType type tag. +*/ static const xmltag HTMLSegmentType_tag= {"segment", 1, {"text"}, HTMLSegmentType_function, {NULL}}; /*+ The HTMLStopType type tag. +*/ static const xmltag HTMLStopType_tag= {"stop", 1, {"text"}, HTMLStopType_function, {NULL}}; /*+ The HTMLTotalType type tag. +*/ static const xmltag HTMLTotalType_tag= {"total", 1, {"text"}, HTMLTotalType_function, {NULL}}; /*+ The HTMLSubtotalType type tag. +*/ static const xmltag HTMLSubtotalType_tag= {"subtotal", 1, {"text"}, HTMLSubtotalType_function, {NULL}}; /*+ The GPXWaypointType type tag. +*/ static const xmltag GPXWaypointType_tag= {"waypoint", 2, {"type","string"}, GPXWaypointType_function, {NULL}}; /*+ The GPXDescType type tag. +*/ static const xmltag GPXDescType_tag= {"desc", 1, {"text"}, GPXDescType_function, {NULL}}; /*+ The GPXNameType type tag. +*/ static const xmltag GPXNameType_tag= {"name", 1, {"text"}, GPXNameType_function, {NULL}}; /*+ The GPXStepType type tag. +*/ static const xmltag GPXStepType_tag= {"step", 1, {"text"}, GPXStepType_function, {NULL}}; /*+ The GPXFinalType type tag. +*/ static const xmltag GPXFinalType_tag= {"final", 1, {"text"}, GPXFinalType_function, {NULL}}; /* The XML tag processing functions */ /*++++++++++++++++++++++++++++++++++++++ The function that is called when the XML declaration is seen int xmlDeclaration_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *version The contents of the 'version' attribute (or NULL if not defined). const char *encoding The contents of the 'encoding' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ //static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the RoutinoTranslationsType XSD type is seen int RoutinoTranslationsType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ //static int RoutinoTranslationsType_function(const char *_tag_,int _type_) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the LanguageType XSD type is seen int LanguageType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *lang The contents of the 'lang' attribute (or NULL if not defined). const char *language The contents of the 'language' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int LanguageType_function(const char *_tag_,int _type_,const char *lang,const char *language) { if(_type_&XMLPARSE_TAG_START) { XMLPARSE_ASSERT_STRING(_tag_,lang); XMLPARSE_ASSERT_STRING(_tag_,language); if(store_all) store=1; else if(!store_lang && !stored) store=1; else if(store_lang && !strcmp(store_lang,lang)) store=1; else store=0; if(store) { int i; for(i=0;ilang)) XMLPARSE_MESSAGE(_tag_,"translation name must be unique"); if((nloaded_translations%16)==0) loaded_translations=(Translation**)realloc((void*)loaded_translations,(nloaded_translations+16)*sizeof(Translation*)); nloaded_translations++; loaded_translations[nloaded_translations-1]=(Translation*)calloc(1,sizeof(Translation)); *loaded_translations[nloaded_translations-1]=default_translation; loaded_translations[nloaded_translations-1]->lang =strcpy(malloc(strlen(lang )+1),lang ); loaded_translations[nloaded_translations-1]->language=strcpy(malloc(strlen(language)+1),language); } } if(_type_&XMLPARSE_TAG_END && store) { store=0; stored=1; } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the CopyrightType XSD type is seen int CopyrightType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ //static int CopyrightType_function(const char *_tag_,int _type_) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the TurnType XSD type is seen int TurnType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *direction The contents of the 'direction' attribute (or NULL if not defined). const char *string The contents of the 'string' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int TurnType_function(const char *_tag_,int _type_,const char *direction,const char *string) { if(_type_&XMLPARSE_TAG_START && store) { char *xmlstring; int d; XMLPARSE_ASSERT_INTEGER(_tag_,direction); d=atoi(direction); XMLPARSE_ASSERT_STRING(_tag_,string); d+=4; if(d<0 || d>8) XMLPARSE_INVALID(_tag_,direction); loaded_translations[nloaded_translations-1]->notxml_turn[d]=strcpy(malloc(strlen(string)+1),string); xmlstring=ParseXML_Encode_Safe_XML(string); loaded_translations[nloaded_translations-1]->xml_turn[d]=strcpy(malloc(strlen(xmlstring)+1),xmlstring); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the HeadingType XSD type is seen int HeadingType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *direction The contents of the 'direction' attribute (or NULL if not defined). const char *string The contents of the 'string' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int HeadingType_function(const char *_tag_,int _type_,const char *direction,const char *string) { if(_type_&XMLPARSE_TAG_START && store) { char *xmlstring; int d; XMLPARSE_ASSERT_INTEGER(_tag_,direction); d=atoi(direction); XMLPARSE_ASSERT_STRING(_tag_,string); d+=4; if(d<0 || d>8) XMLPARSE_INVALID(_tag_,direction); loaded_translations[nloaded_translations-1]->notxml_heading[d]=strcpy(malloc(strlen(string)+1),string); xmlstring=ParseXML_Encode_Safe_XML(string); loaded_translations[nloaded_translations-1]->xml_heading[d]=strcpy(malloc(strlen(xmlstring)+1),xmlstring); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the OrdinalType XSD type is seen int OrdinalType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *number The contents of the 'number' attribute (or NULL if not defined). const char *string The contents of the 'string' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int OrdinalType_function(const char *_tag_,int _type_,const char *number,const char *string) { if(_type_&XMLPARSE_TAG_START && store) { char *xmlstring; int n; XMLPARSE_ASSERT_INTEGER(_tag_,number); n=atoi(number); XMLPARSE_ASSERT_STRING(_tag_,string); if(n<1 || n>10) XMLPARSE_INVALID(_tag_,number); loaded_translations[nloaded_translations-1]->notxml_ordinal[n-1]=strcpy(malloc(strlen(string)+1),string); xmlstring=ParseXML_Encode_Safe_XML(string); loaded_translations[nloaded_translations-1]->xml_ordinal[n-1]=strcpy(malloc(strlen(xmlstring)+1),xmlstring); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the HighwayType XSD type is seen int HighwayType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *type The contents of the 'type' attribute (or NULL if not defined). const char *string The contents of the 'string' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int HighwayType_function(const char *_tag_,int _type_,const char *type,const char *string) { if(_type_&XMLPARSE_TAG_START && store) { Highway highway; XMLPARSE_ASSERT_STRING(_tag_,type); XMLPARSE_ASSERT_STRING(_tag_,string); highway=HighwayType(type); if(highway==Highway_None) XMLPARSE_INVALID(_tag_,type); loaded_translations[nloaded_translations-1]->raw_highway[highway]=strcpy(malloc(strlen(string)+1),string); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the RouteType XSD type is seen int RouteType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *type The contents of the 'type' attribute (or NULL if not defined). const char *string The contents of the 'string' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int RouteType_function(const char *_tag_,int _type_,const char *type,const char *string) { if(_type_&XMLPARSE_TAG_START && store) { char *xmlstring; XMLPARSE_ASSERT_STRING(_tag_,type); XMLPARSE_ASSERT_STRING(_tag_,string); xmlstring=ParseXML_Encode_Safe_XML(string); if(!strcmp(type,"shortest")) loaded_translations[nloaded_translations-1]->xml_route_shortest=strcpy(malloc(strlen(xmlstring)+1),xmlstring); else if(!strcmp(type,"quickest")) loaded_translations[nloaded_translations-1]->xml_route_quickest=strcpy(malloc(strlen(xmlstring)+1),xmlstring); else XMLPARSE_INVALID(_tag_,type); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the HTMLType XSD type is seen int HTMLType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ //static int HTMLType_function(const char *_tag_,int _type_) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the GPXType XSD type is seen int GPXType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ //static int GPXType_function(const char *_tag_,int _type_) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the CopyrightCreatorType XSD type is seen int CopyrightCreatorType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *string The contents of the 'string' attribute (or NULL if not defined). const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int CopyrightCreatorType_function(const char *_tag_,int _type_,const char *string,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmlstring,*xmltext; XMLPARSE_ASSERT_STRING(_tag_,string); XMLPARSE_ASSERT_STRING(_tag_,text); loaded_translations[nloaded_translations-1]->raw_copyright_creator[0]=strcpy(malloc(strlen(string)+1),string); loaded_translations[nloaded_translations-1]->raw_copyright_creator[1]=strcpy(malloc(strlen(text)+1) ,text); xmlstring=ParseXML_Encode_Safe_XML(string); loaded_translations[nloaded_translations-1]->xml_copyright_creator[0]=strcpy(malloc(strlen(xmlstring)+1),xmlstring); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->xml_copyright_creator[1]=strcpy(malloc(strlen(xmltext)+1),xmltext); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the CopyrightSourceType XSD type is seen int CopyrightSourceType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *string The contents of the 'string' attribute (or NULL if not defined). const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int CopyrightSourceType_function(const char *_tag_,int _type_,const char *string,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmlstring,*xmltext; XMLPARSE_ASSERT_STRING(_tag_,string); XMLPARSE_ASSERT_STRING(_tag_,text); loaded_translations[nloaded_translations-1]->raw_copyright_source[0]=strcpy(malloc(strlen(string)+1),string); loaded_translations[nloaded_translations-1]->raw_copyright_source[1]=strcpy(malloc(strlen(text)+1) ,text); xmlstring=ParseXML_Encode_Safe_XML(string); loaded_translations[nloaded_translations-1]->xml_copyright_source[0]=strcpy(malloc(strlen(xmlstring)+1),xmlstring); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->xml_copyright_source[1]=strcpy(malloc(strlen(xmltext)+1),xmltext); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the CopyrightLicenseType XSD type is seen int CopyrightLicenseType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *string The contents of the 'string' attribute (or NULL if not defined). const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int CopyrightLicenseType_function(const char *_tag_,int _type_,const char *string,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmlstring,*xmltext; XMLPARSE_ASSERT_STRING(_tag_,string); XMLPARSE_ASSERT_STRING(_tag_,text); loaded_translations[nloaded_translations-1]->raw_copyright_license[0]=strcpy(malloc(strlen(string)+1),string); loaded_translations[nloaded_translations-1]->raw_copyright_license[1]=strcpy(malloc(strlen(text)+1) ,text); xmlstring=ParseXML_Encode_Safe_XML(string); loaded_translations[nloaded_translations-1]->xml_copyright_license[0]=strcpy(malloc(strlen(xmlstring)+1),xmlstring); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->xml_copyright_license[1]=strcpy(malloc(strlen(xmltext)+1),xmltext); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the HTMLWaypointType XSD type is seen int HTMLWaypointType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *type The contents of the 'type' attribute (or NULL if not defined). const char *string The contents of the 'string' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int HTMLWaypointType_function(const char *_tag_,int _type_,const char *type,const char *string) { if(_type_&XMLPARSE_TAG_START && store) { char *xmlstring; XMLPARSE_ASSERT_STRING(_tag_,type); XMLPARSE_ASSERT_STRING(_tag_,string); xmlstring=ParseXML_Encode_Safe_XML(string); if(!strcmp(type,"waypoint")) { loaded_translations[nloaded_translations-1]->nothtml_waypoint=strcpy(malloc(strlen(string)+1),string); loaded_translations[nloaded_translations-1]->html_waypoint=strcpy(malloc(strlen(xmlstring)+1),xmlstring); } else if(!strcmp(type,"junction")) { loaded_translations[nloaded_translations-1]->nothtml_junction=strcpy(malloc(strlen(string)+1),string); loaded_translations[nloaded_translations-1]->html_junction=strcpy(malloc(strlen(xmlstring)+1),xmlstring); } else if(!strcmp(type,"roundabout")) { loaded_translations[nloaded_translations-1]->nothtml_roundabout=strcpy(malloc(strlen(string)+1),string); loaded_translations[nloaded_translations-1]->html_roundabout=strcpy(malloc(strlen(xmlstring)+1),xmlstring); } else XMLPARSE_INVALID(_tag_,type); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the HTMLTitleType XSD type is seen int HTMLTitleType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int HTMLTitleType_function(const char *_tag_,int _type_,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmltext; XMLPARSE_ASSERT_STRING(_tag_,text); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->nothtml_title=strcpy(malloc(strlen(text)+1),text); loaded_translations[nloaded_translations-1]->html_title=strcpy(malloc(strlen(xmltext)+1),xmltext); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the HTMLStartType XSD type is seen int HTMLStartType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int HTMLStartType_function(const char *_tag_,int _type_,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmltext; const char *p; char *q; XMLPARSE_ASSERT_STRING(_tag_,text); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->nothtml_start=strcpy(malloc(strlen(text)+1),text); loaded_translations[nloaded_translations-1]->html_start=malloc(sizeof("")+strlen(xmltext)+sizeof("")+sizeof("")+1+1); p=xmltext; q=loaded_translations[nloaded_translations-1]->html_start; strcpy(q,""); q+=sizeof("")-1; while(*p!='%') *q++=*p++; *q++=*p++; while(*p!='%') *q++=*p++; p+=2; strcpy(q,"%s"); q+=sizeof("%s")-1; strcpy(q,p); strcat(q,"\n"); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the HTMLNodeType XSD type is seen int HTMLNodeType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int HTMLNodeType_function(const char *_tag_,int _type_,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmltext; const char *p; char *q; XMLPARSE_ASSERT_STRING(_tag_,text); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->nothtml_node=strcpy(malloc(strlen(text)+1),text); loaded_translations[nloaded_translations-1]->html_node=malloc(sizeof("")+strlen(xmltext)+2*sizeof("")+2*sizeof("")+1+1); p=xmltext; q=loaded_translations[nloaded_translations-1]->html_node; strcpy(q,""); q+=sizeof("")-1; while(*p!='%') *q++=*p++; *q++=*p++; while(*p!='%') *q++=*p++; p+=2; strcpy(q,"%s"); q+=sizeof("%s")-1; while(*p!='%') *q++=*p++; p+=2; strcpy(q,"%s"); q+=sizeof("%s")-1; strcpy(q,p); strcat(q,"\n"); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the HTMLRBNodeType XSD type is seen int HTMLRBNodeType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int HTMLRBNodeType_function(const char *_tag_,int _type_,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmltext; const char *p; char *q; XMLPARSE_ASSERT_STRING(_tag_,text); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->nothtml_rbnode=strcpy(malloc(strlen(text)+1),text); loaded_translations[nloaded_translations-1]->html_rbnode=malloc(sizeof("")+strlen(xmltext)+2*sizeof("")+2*sizeof("")+1+1); p=xmltext; q=loaded_translations[nloaded_translations-1]->html_rbnode; strcpy(q,""); q+=sizeof("")-1; while(*p!='%') *q++=*p++; *q++=*p++; while(*p!='%') *q++=*p++; p+=2; strcpy(q,"%s"); q+=sizeof("%s")-1; while(*p!='%') *q++=*p++; p+=2; strcpy(q,"%s"); q+=sizeof("%s")-1; strcpy(q,p); strcat(q,"\n"); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the HTMLSegmentType XSD type is seen int HTMLSegmentType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int HTMLSegmentType_function(const char *_tag_,int _type_,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmltext; const char *p; char *q; XMLPARSE_ASSERT_STRING(_tag_,text); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->nothtml_segment=strcpy(malloc(strlen(text)+1),text); loaded_translations[nloaded_translations-1]->html_segment=malloc(sizeof("")+strlen(xmltext)+2*sizeof("")+2*sizeof("")+1); p=xmltext; q=loaded_translations[nloaded_translations-1]->html_segment; strcpy(q,""); q+=sizeof("")-1; while(*p!='%') *q++=*p++; p+=2; strcpy(q,"%s"); q+=sizeof("%s")-1; while(*p!='%') *q++=*p++; strcpy(q,""); q+=sizeof("")-1; strcpy(q,p); strcat(q,""); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the HTMLStopType XSD type is seen int HTMLStopType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int HTMLStopType_function(const char *_tag_,int _type_,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmltext; XMLPARSE_ASSERT_STRING(_tag_,text); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->nothtml_stop=strcpy(malloc(strlen(text)+1),text); loaded_translations[nloaded_translations-1]->html_stop=malloc(sizeof("")+strlen(xmltext)+1+1); strcpy(loaded_translations[nloaded_translations-1]->html_stop,""); strcat(loaded_translations[nloaded_translations-1]->html_stop,xmltext); strcat(loaded_translations[nloaded_translations-1]->html_stop,"\n"); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the HTMLTotalType XSD type is seen int HTMLTotalType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int HTMLTotalType_function(const char *_tag_,int _type_,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmltext; XMLPARSE_ASSERT_STRING(_tag_,text); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->nothtml_total=strcpy(malloc(strlen(text)+1),text); loaded_translations[nloaded_translations-1]->html_total=malloc(sizeof("")+strlen(xmltext)+sizeof("")+sizeof("")+1+1); strcpy(loaded_translations[nloaded_translations-1]->html_total,""); strcat(loaded_translations[nloaded_translations-1]->html_total,""); strcat(loaded_translations[nloaded_translations-1]->html_total,xmltext); strcat(loaded_translations[nloaded_translations-1]->html_total,""); strcat(loaded_translations[nloaded_translations-1]->html_total,"\n"); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the HTMLSubtotalType XSD type is seen int HTMLSubtotalType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int HTMLSubtotalType_function(const char *_tag_,int _type_,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmltext; XMLPARSE_ASSERT_STRING(_tag_,text); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->nothtml_subtotal=strcpy(malloc(strlen(text)+1),text); loaded_translations[nloaded_translations-1]->html_subtotal=malloc(sizeof(" [")+strlen(xmltext)+sizeof("]")+1+1); strcpy(loaded_translations[nloaded_translations-1]->html_subtotal," ["); strcat(loaded_translations[nloaded_translations-1]->html_subtotal,xmltext); strcat(loaded_translations[nloaded_translations-1]->html_subtotal,"]"); strcat(loaded_translations[nloaded_translations-1]->html_subtotal,"\n"); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the GPXWaypointType XSD type is seen int GPXWaypointType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *type The contents of the 'type' attribute (or NULL if not defined). const char *string The contents of the 'string' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int GPXWaypointType_function(const char *_tag_,int _type_,const char *type,const char *string) { if(_type_&XMLPARSE_TAG_START && store) { char *xmlstring; XMLPARSE_ASSERT_STRING(_tag_,type); XMLPARSE_ASSERT_STRING(_tag_,string); xmlstring=ParseXML_Encode_Safe_XML(string); if(!strcmp(type,"waypt")) loaded_translations[nloaded_translations-1]->gpx_waypt=strcpy(malloc(strlen(xmlstring)+1),xmlstring); else if(!strcmp(type,"trip")) loaded_translations[nloaded_translations-1]->gpx_trip=strcpy(malloc(strlen(xmlstring)+1),xmlstring); else XMLPARSE_INVALID(_tag_,type); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the GPXDescType XSD type is seen int GPXDescType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int GPXDescType_function(const char *_tag_,int _type_,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmltext; XMLPARSE_ASSERT_STRING(_tag_,text); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->gpx_desc=strcpy(malloc(strlen(xmltext)+1),xmltext); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the GPXNameType XSD type is seen int GPXNameType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int GPXNameType_function(const char *_tag_,int _type_,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmltext; XMLPARSE_ASSERT_STRING(_tag_,text); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->gpx_name=strcpy(malloc(strlen(xmltext)+1),xmltext); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the GPXStepType XSD type is seen int GPXStepType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int GPXStepType_function(const char *_tag_,int _type_,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmltext; XMLPARSE_ASSERT_STRING(_tag_,text); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->gpx_step=strcpy(malloc(strlen(xmltext)+1),xmltext); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the GPXFinalType XSD type is seen int GPXFinalType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *text The contents of the 'text' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int GPXFinalType_function(const char *_tag_,int _type_,const char *text) { if(_type_&XMLPARSE_TAG_START && store) { char *xmltext; XMLPARSE_ASSERT_STRING(_tag_,text); xmltext=ParseXML_Encode_Safe_XML(text); loaded_translations[nloaded_translations-1]->gpx_final=strcpy(malloc(strlen(xmltext)+1),xmltext); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The XML translation parser. int ParseXMLTranslations Returns 0 if OK or something else in case of an error. const char *filename The name of the file to read. const char *lang The abbreviated language name to search for (NULL means first in file). int all Set to true to load all the translations. ++++++++++++++++++++++++++++++++++++++*/ int ParseXMLTranslations(const char *filename,const char *lang,int all) { int fd; int retval; if(!ExistsFile(filename)) return(1); fd=OpenFile(filename); /* Delete the existing translations */ if(nloaded_translations) FreeXMLTranslations(); /* Initialise variables used for parsing */ store_all=all; store_lang=lang; store=0; stored=0; /* Parse the file */ retval=ParseXML(fd,xml_toplevel_tags,XMLPARSE_UNKNOWN_ATTR_ERRNONAME|XMLPARSE_RETURN_ATTR_ENCODED); CloseFile(fd); if(retval) { FreeXMLTranslations(); return(2); } return(0); } /*++++++++++++++++++++++++++++++++++++++ Return a list of the languages that have been loaded from the XML file. char **GetTranslationLanguages Returns a NULL terminated list of strings - all allocated. ++++++++++++++++++++++++++++++++++++++*/ char **GetTranslationLanguages(void) { char **list=calloc(1+nloaded_translations,sizeof(char*)); int i; for(i=0;ilang)+1),loaded_translations[i]->lang); return(list); } /*++++++++++++++++++++++++++++++++++++++ Return a list of the full names of the languages that have been loaded from the XML file. char **GetTranslationLanguageFullNames Returns a NULL terminated list of strings - all allocated. ++++++++++++++++++++++++++++++++++++++*/ char **GetTranslationLanguageFullNames(void) { char **list=calloc(1+nloaded_translations,sizeof(char*)); int i; for(i=0;ilanguage)+1),loaded_translations[i]->language); return(list); } /*++++++++++++++++++++++++++++++++++++++ Get a named translation. Translation *GetTranslation Returns a pointer to the translation. const char *lang The abbreviated name of the language of the translation or NULL to get the default or an empty string to get the first one. ++++++++++++++++++++++++++++++++++++++*/ Translation *GetTranslation(const char *lang) { int i; if(!lang) return(&default_translation); if(!*lang && nloaded_translations>0) return(loaded_translations[0]); for(i=0;ilang,lang)) return(loaded_translations[i]); return(NULL); } /*++++++++++++++++++++++++++++++++++++++ Free the memory that has been allocated for the translations. ++++++++++++++++++++++++++++++++++++++*/ void FreeXMLTranslations() { int i,j; if(!loaded_translations) return; for(i=0;ilang); for(j=0;j<2;j++) { if(loaded_translations[i]->raw_copyright_creator[j] != default_translation.raw_copyright_creator[j]) free(loaded_translations[i]->raw_copyright_creator[j]); if(loaded_translations[i]->raw_copyright_source[j] != default_translation.raw_copyright_source[j]) free(loaded_translations[i]->raw_copyright_source[j]); if(loaded_translations[i]->raw_copyright_license[j] != default_translation.raw_copyright_license[j]) free(loaded_translations[i]->raw_copyright_license[j]); if(loaded_translations[i]->xml_copyright_creator[j] != default_translation.xml_copyright_creator[j]) free(loaded_translations[i]->xml_copyright_creator[j]); if(loaded_translations[i]->xml_copyright_source[j] != default_translation.xml_copyright_source[j]) free(loaded_translations[i]->xml_copyright_source[j]); if(loaded_translations[i]->xml_copyright_license[j] != default_translation.xml_copyright_license[j]) free(loaded_translations[i]->xml_copyright_license[j]); } for(j=0;j<9;j++) { if(loaded_translations[i]->xml_heading[j] != default_translation.xml_heading[j]) free(loaded_translations[i]->xml_heading[j]); if(loaded_translations[i]->xml_turn[j] != default_translation.xml_turn[j]) free(loaded_translations[i]->xml_turn[j]); } for(j=0;j<10;j++) if(loaded_translations[i]->xml_ordinal[j] != default_translation.xml_ordinal[j]) free(loaded_translations[i]->xml_ordinal[j]); for(j=0;j<9;j++) { if(loaded_translations[i]->notxml_heading[j] != default_translation.notxml_heading[j]) free(loaded_translations[i]->notxml_heading[j]); if(loaded_translations[i]->notxml_turn[j] != default_translation.notxml_turn[j]) free(loaded_translations[i]->notxml_turn[j]); } for(j=0;j<10;j++) if(loaded_translations[i]->notxml_ordinal[j] != default_translation.notxml_ordinal[j]) free(loaded_translations[i]->notxml_ordinal[j]); for(j=0;jraw_highway[j] != default_translation.raw_highway[j]) free(loaded_translations[i]->raw_highway[j]); if(loaded_translations[i]->xml_route_shortest != default_translation.xml_route_shortest) free(loaded_translations[i]->xml_route_shortest); if(loaded_translations[i]->xml_route_quickest != default_translation.xml_route_quickest) free(loaded_translations[i]->xml_route_quickest); if(loaded_translations[i]->html_waypoint != default_translation.html_waypoint) free(loaded_translations[i]->html_waypoint); if(loaded_translations[i]->html_junction != default_translation.html_junction) free(loaded_translations[i]->html_junction); if(loaded_translations[i]->html_roundabout != default_translation.html_roundabout) free(loaded_translations[i]->html_roundabout); if(loaded_translations[i]->html_title != default_translation.html_title) free(loaded_translations[i]->html_title); if(loaded_translations[i]->html_start != default_translation.html_start) free(loaded_translations[i]->html_start); if(loaded_translations[i]->html_node != default_translation.html_node) free(loaded_translations[i]->html_node); if(loaded_translations[i]->html_rbnode != default_translation.html_rbnode) free(loaded_translations[i]->html_rbnode); if(loaded_translations[i]->html_segment != default_translation.html_segment) free(loaded_translations[i]->html_segment); if(loaded_translations[i]->html_stop != default_translation.html_stop) free(loaded_translations[i]->html_stop); if(loaded_translations[i]->html_total != default_translation.html_total) free(loaded_translations[i]->html_total); if(loaded_translations[i]->html_subtotal!= default_translation.html_subtotal)free(loaded_translations[i]->html_subtotal); if(loaded_translations[i]->nothtml_waypoint != default_translation.nothtml_waypoint) free(loaded_translations[i]->nothtml_waypoint); if(loaded_translations[i]->nothtml_junction != default_translation.nothtml_junction) free(loaded_translations[i]->nothtml_junction); if(loaded_translations[i]->nothtml_roundabout != default_translation.nothtml_roundabout) free(loaded_translations[i]->nothtml_roundabout); if(loaded_translations[i]->nothtml_title != default_translation.nothtml_title) free(loaded_translations[i]->nothtml_title); if(loaded_translations[i]->nothtml_start != default_translation.nothtml_start) free(loaded_translations[i]->nothtml_start); if(loaded_translations[i]->nothtml_node != default_translation.nothtml_node) free(loaded_translations[i]->nothtml_node); if(loaded_translations[i]->nothtml_rbnode != default_translation.nothtml_rbnode) free(loaded_translations[i]->nothtml_rbnode); if(loaded_translations[i]->nothtml_segment != default_translation.nothtml_segment) free(loaded_translations[i]->nothtml_segment); if(loaded_translations[i]->nothtml_stop != default_translation.nothtml_stop) free(loaded_translations[i]->nothtml_stop); if(loaded_translations[i]->nothtml_total != default_translation.nothtml_total) free(loaded_translations[i]->nothtml_total); if(loaded_translations[i]->nothtml_subtotal!= default_translation.nothtml_subtotal)free(loaded_translations[i]->nothtml_subtotal); if(loaded_translations[i]->gpx_desc != default_translation.gpx_desc) free(loaded_translations[i]->gpx_desc); if(loaded_translations[i]->gpx_name != default_translation.gpx_name) free(loaded_translations[i]->gpx_name); if(loaded_translations[i]->gpx_step != default_translation.gpx_step) free(loaded_translations[i]->gpx_step); if(loaded_translations[i]->gpx_final != default_translation.gpx_final) free(loaded_translations[i]->gpx_final); if(loaded_translations[i]->gpx_waypt != default_translation.gpx_waypt) free(loaded_translations[i]->gpx_waypt); if(loaded_translations[i]->gpx_trip != default_translation.gpx_trip) free(loaded_translations[i]->gpx_trip); free(loaded_translations[i]); } free(loaded_translations); loaded_translations=NULL; nloaded_translations=0; } routino-3.2/src/waysx.c 644 233 144 52003 12563633051 10357 0/*************************************** Extended Way data type functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include "types.h" #include "ways.h" #include "typesx.h" #include "nodesx.h" #include "segmentsx.h" #include "waysx.h" #include "files.h" #include "logging.h" #include "sorting.h" /* Global variables */ /*+ The command line '--tmpdir' option or its default value. +*/ extern char *option_tmpdirname; /* Local variables */ /*+ Temporary file-local variables for use by the sort functions (re-initialised for each sort). +*/ static WaysX *sortwaysx; static SegmentsX *sortsegmentsx; /* Local functions */ static int sort_by_id(WayX *a,WayX *b); static int deduplicate_and_index_by_id(WayX *wayx,index_t index); static int sort_by_name(char *a,char *b); static int delete_unused(WayX *wayx,index_t index); static int sort_by_name_and_prop_and_id(WayX *a,WayX *b); static int deduplicate_and_index_by_compact_id(WayX *wayx,index_t index); /*++++++++++++++++++++++++++++++++++++++ Allocate a new way list (create a new file or open an existing one). WaysX *NewWayList Returns the way list. int append Set to 1 if the file is to be opened for appending. int readonly Set to 1 if the file is to be opened for reading. ++++++++++++++++++++++++++++++++++++++*/ WaysX *NewWayList(int append,int readonly) { WaysX *waysx; waysx=(WaysX*)calloc(1,sizeof(WaysX)); logassert(waysx,"Failed to allocate memory (try using slim mode?)"); /* Check calloc() worked */ waysx->filename =(char*)malloc(strlen(option_tmpdirname)+32); waysx->filename_tmp=(char*)malloc(strlen(option_tmpdirname)+32); /* allow %p to be up to 20 bytes */ sprintf(waysx->filename ,"%s/waysx.parsed.mem",option_tmpdirname); sprintf(waysx->filename_tmp,"%s/waysx.%p.tmp" ,option_tmpdirname,(void*)waysx); if(append || readonly) if(ExistsFile(waysx->filename)) { FILESORT_VARINT waysize; int fd; fd=ReOpenFileBuffered(waysx->filename); while(!ReadFileBuffered(fd,&waysize,FILESORT_VARSIZE)) { SkipFileBuffered(fd,waysize); waysx->number++; } CloseFileBuffered(fd); RenameFile(waysx->filename,waysx->filename_tmp); } if(append) waysx->fd=OpenFileBufferedAppend(waysx->filename_tmp); else if(!readonly) waysx->fd=OpenFileBufferedNew(waysx->filename_tmp); else waysx->fd=-1; #if SLIM waysx->cache=NewWayXCache(); log_malloc(waysx->cache,sizeof(*waysx->cache)); #endif waysx->nfilename_tmp=(char*)malloc(strlen(option_tmpdirname)+40); /* allow %p to be up to 20 bytes */ sprintf(waysx->nfilename_tmp,"%s/waynames.%p.tmp",option_tmpdirname,(void*)waysx); return(waysx); } /*++++++++++++++++++++++++++++++++++++++ Free a way list. WaysX *waysx The set of ways to be freed. int keep If set then the results file is to be kept. ++++++++++++++++++++++++++++++++++++++*/ void FreeWayList(WaysX *waysx,int keep) { if(keep) RenameFile(waysx->filename_tmp,waysx->filename); else DeleteFile(waysx->filename_tmp); free(waysx->filename); free(waysx->filename_tmp); if(waysx->idata) { log_free(waysx->idata); free(waysx->idata); } if(waysx->odata) { log_free(waysx->odata); free(waysx->odata); } if(waysx->cdata) { log_free(waysx->cdata); free(waysx->cdata); } DeleteFile(waysx->nfilename_tmp); free(waysx->nfilename_tmp); #if SLIM log_free(waysx->cache); DeleteWayXCache(waysx->cache); #endif free(waysx); } /*++++++++++++++++++++++++++++++++++++++ Append a single way to an unsorted way list. WaysX *waysx The set of ways to process. way_t id The ID of the way. Way *way The way data itself. node_t *nodes The list of nodes for this way. int nnodes The number of nodes for this way. const char *name The name or reference of the way. ++++++++++++++++++++++++++++++++++++++*/ void AppendWayList(WaysX *waysx,way_t id,Way *way,node_t *nodes,int nnodes,const char *name) { WayX wayx; FILESORT_VARINT size; node_t nonode=NO_NODE_ID; wayx.id=id; wayx.way=*way; size=sizeof(WayX)+(nnodes+1)*sizeof(node_t)+strlen(name)+1; WriteFileBuffered(waysx->fd,&size,FILESORT_VARSIZE); WriteFileBuffered(waysx->fd,&wayx,sizeof(WayX)); WriteFileBuffered(waysx->fd,nodes ,nnodes*sizeof(node_t)); WriteFileBuffered(waysx->fd,&nonode, sizeof(node_t)); WriteFileBuffered(waysx->fd,name,strlen(name)+1); waysx->number++; logassert(waysx->number!=0,"Too many ways (change index_t to 64-bits?)"); /* Zero marks the high-water mark for ways. */ } /*++++++++++++++++++++++++++++++++++++++ Finish appending ways and change the filename over. WaysX *waysx The ways that have been appended. ++++++++++++++++++++++++++++++++++++++*/ void FinishWayList(WaysX *waysx) { if(waysx->fd!=-1) waysx->fd=CloseFileBuffered(waysx->fd); } /*++++++++++++++++++++++++++++++++++++++ Find a particular way index. index_t IndexWayX Returns the index of the extended way with the specified id. WaysX *waysx The set of ways to process. way_t id The way id to look for. ++++++++++++++++++++++++++++++++++++++*/ index_t IndexWayX(WaysX *waysx,way_t id) { index_t start=0; index_t end=waysx->number-1; index_t mid; if(waysx->number==0) /* There are no ways */ return(NO_WAY); if(ididata[start]) /* Key is before start */ return(NO_WAY); if(id>waysx->idata[end]) /* Key is after end */ return(NO_WAY); /* Binary search - search key exact match only is required. * * # <- start | Check mid and move start or end if it doesn't match * # | * # | Since an exact match is wanted we can set end=mid-1 * # <- mid | or start=mid+1 because we know that mid doesn't match. * # | * # | Eventually either end=start or end=start+1 and one of * # <- end | start or end is the wanted one. */ do { mid=(start+end)/2; /* Choose mid point */ if(waysx->idata[mid]idata[mid]>id) /* Mid point is too high */ end=mid?(mid-1):mid; else /* Mid point is correct */ return(mid); } while((end-start)>1); if(waysx->idata[start]==id) /* Start is correct */ return(start); if(waysx->idata[end]==id) /* End is correct */ return(end); return(NO_WAY); } /*++++++++++++++++++++++++++++++++++++++ Sort the list of ways. WaysX *waysx The set of ways to process. ++++++++++++++++++++++++++++++++++++++*/ void SortWayList(WaysX *waysx) { index_t xnumber; int fd; /* Print the start message */ printf_first("Sorting Ways"); /* Re-open the file read-only and a new file writeable */ fd=ReplaceFileBuffered(waysx->filename_tmp,&waysx->fd); /* Allocate the array of indexes */ waysx->idata=(way_t*)malloc(waysx->number*sizeof(way_t)); log_malloc(waysx->idata,waysx->number*sizeof(way_t)); logassert(waysx->idata,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ /* Sort the ways by ID and index them */ sortwaysx=waysx; xnumber=waysx->number; waysx->number=filesort_vary(waysx->fd,fd,NULL, (int (*)(const void*,const void*))sort_by_id, (int (*)(void*,index_t))deduplicate_and_index_by_id); waysx->knumber=waysx->number; /* Close the files */ waysx->fd=CloseFileBuffered(waysx->fd); CloseFileBuffered(fd); /* Print the final message */ printf_last("Sorted Ways: Ways=%"Pindex_t" Duplicates=%"Pindex_t,xnumber,xnumber-waysx->number); } /*++++++++++++++++++++++++++++++++++++++ Sort the ways into id order. int sort_by_id Returns the comparison of the id fields. WayX *a The first extended way. WayX *b The second extended way. ++++++++++++++++++++++++++++++++++++++*/ static int sort_by_id(WayX *a,WayX *b) { way_t a_id=a->id; way_t b_id=b->id; if(a_idb_id) return(1); else return(-FILESORT_PRESERVE_ORDER(a,b)); /* latest version first */ } /*++++++++++++++++++++++++++++++++++++++ Discard duplicate ways and create and index of ids. int deduplicate_and_index_by_id Return 1 if the value is to be kept, otherwise 0. WayX *wayx The extended way. index_t index The number of sorted ways that have already been written to the output file. ++++++++++++++++++++++++++++++++++++++*/ static int deduplicate_and_index_by_id(WayX *wayx,index_t index) { static way_t previd; /* internal variable (reset by first call in each sort; index==0) */ if(index==0 || wayx->id!=previd) { previd=wayx->id; if(wayx->way.type==WAY_DELETED) return(0); else { sortwaysx->idata[index]=wayx->id; return(1); } } else return(0); } /*++++++++++++++++++++++++++++++++++++++ Split the ways into segments and way names. SegmentsX *SplitWays Returns the set of segments that have been created. WaysX *waysx The set of ways to process. NodesX *nodesx The set of nodes to use. int keep If set to 1 then keep the old data file otherwise delete it. ++++++++++++++++++++++++++++++++++++++*/ SegmentsX *SplitWays(WaysX *waysx,NodesX *nodesx,int keep) { SegmentsX *segmentsx; index_t i; int fd,nfd; char *name=NULL; int namelen=0; /* Print the start message */ printf_first("Splitting Ways: Ways=0 Segments=0"); segmentsx=NewSegmentList(); /* Re-open the file read-only and a new file writeable */ if(keep) { RenameFile(waysx->filename_tmp,waysx->filename); waysx->fd=ReOpenFileBuffered(waysx->filename); fd=OpenFileBufferedNew(waysx->filename_tmp); } else fd=ReplaceFileBuffered(waysx->filename_tmp,&waysx->fd); nfd=OpenFileBufferedNew(waysx->nfilename_tmp); /* Loop through the ways and create the segments and way names */ for(i=0;inumber;i++) { WayX wayx; FILESORT_VARINT size; node_t node,prevnode=NO_NODE_ID; index_t index,previndex=NO_NODE; ReadFileBuffered(waysx->fd,&size,FILESORT_VARSIZE); ReadFileBuffered(waysx->fd,&wayx,sizeof(WayX)); waysx->allow|=wayx.way.allow; while(!ReadFileBuffered(waysx->fd,&node,sizeof(node_t)) && node!=NO_NODE_ID) { index=IndexNodeX(nodesx,node); if(prevnode==node) { logerror("Way %"Pway_t" contains node %"Pnode_t" that is connected to itself.\n",logerror_way(waysx->idata[i]),logerror_node(node)); } else if(index==NO_NODE) { logerror("Way %"Pway_t" contains node %"Pnode_t" that does not exist in the Routino database.\n",logerror_way(waysx->idata[i]),logerror_node(node)); } else if(previndex==NO_NODE) ; else { distance_t segment_flags=0; if(wayx.way.type&Highway_OneWay) segment_flags|=ONEWAY_1TO2; if(wayx.way.type&Highway_Area) segment_flags|=SEGMENT_AREA; AppendSegmentList(segmentsx,i,previndex,index,segment_flags); } prevnode=node; previndex=index; size-=sizeof(node_t); } size-=sizeof(node_t)+sizeof(WayX); if(namelenfd,name,size); WriteFileBuffered(fd,&wayx,sizeof(WayX)); size+=sizeof(index_t); WriteFileBuffered(nfd,&size,FILESORT_VARSIZE); WriteFileBuffered(nfd,&i,sizeof(index_t)); WriteFileBuffered(nfd,name,size-sizeof(index_t)); if(!((i+1)%1000)) printf_middle("Splitting Ways: Ways=%"Pindex_t" Segments=%"Pindex_t,i+1,segmentsx->number); } FinishSegmentList(segmentsx); if(name) free(name); /* Close the files */ waysx->fd=CloseFileBuffered(waysx->fd); CloseFileBuffered(fd); CloseFileBuffered(nfd); /* Print the final message */ printf_last("Split Ways: Ways=%"Pindex_t" Segments=%"Pindex_t,waysx->number,segmentsx->number); return(segmentsx); } /*++++++++++++++++++++++++++++++++++++++ Sort the way names and assign the offsets to the ways. WaysX *waysx The set of ways to process. ++++++++++++++++++++++++++++++++++++++*/ void SortWayNames(WaysX *waysx) { index_t i; int nfd; char *names[2]={NULL,NULL}; int namelen[2]={0,0}; int nnames=0; uint32_t lastlength=0; /* Print the start message */ printf_first("Sorting Way Names"); /* Re-open the file read-only and new file writeable */ nfd=ReplaceFileBuffered(waysx->nfilename_tmp,&waysx->nfd); /* Sort the way names */ waysx->nlength=0; filesort_vary(waysx->nfd,nfd,NULL, (int (*)(const void*,const void*))sort_by_name, NULL); /* Close the files */ waysx->nfd=CloseFileBuffered(waysx->nfd); CloseFileBuffered(nfd); /* Print the final message */ printf_last("Sorted Way Names: Ways=%"Pindex_t,waysx->number); /* Print the start message */ printf_first("Updating Ways with Names: Ways=0 Names=0"); /* Map into memory / open the file */ #if !SLIM waysx->data=MapFileWriteable(waysx->filename_tmp); #else waysx->fd=SlimMapFileWriteable(waysx->filename_tmp); #endif /* Re-open the file read-only and new file writeable */ nfd=ReplaceFileBuffered(waysx->nfilename_tmp,&waysx->nfd); /* Update the ways and de-duplicate the names */ for(i=0;inumber;i++) { WayX *wayx; index_t index; FILESORT_VARINT size; ReadFileBuffered(waysx->nfd,&size,FILESORT_VARSIZE); if(namelen[nnames%2]nfd,&index,sizeof(index_t)); ReadFileBuffered(waysx->nfd,names[nnames%2],size-sizeof(index_t)); if(nnames==0 || strcmp(names[0],names[1])) { WriteFileBuffered(nfd,names[nnames%2],size-sizeof(index_t)); lastlength=waysx->nlength; waysx->nlength+=size-sizeof(index_t); nnames++; } wayx=LookupWayX(waysx,index,1); wayx->way.name=lastlength; PutBackWayX(waysx,wayx); if(!((i+1)%1000)) printf_middle("Updating Ways with Names: Ways=%"Pindex_t" Names=%"Pindex_t,i+1,nnames); } if(names[0]) free(names[0]); if(names[1]) free(names[1]); /* Close the files */ waysx->nfd=CloseFileBuffered(waysx->nfd); CloseFileBuffered(nfd); /* Unmap from memory / close the files */ #if !SLIM waysx->data=UnmapFile(waysx->data); #else waysx->fd=SlimUnmapFile(waysx->fd); #endif /* Print the final message */ printf_last("Updated Ways with Names: Ways=%"Pindex_t" Names=%"Pindex_t,waysx->number,nnames); } /*++++++++++++++++++++++++++++++++++++++ Sort the ways into name order. int sort_by_name Returns the comparison of the name fields. char *a The first way name. char *b The second way name. ++++++++++++++++++++++++++++++++++++++*/ static int sort_by_name(char *a,char *b) { int compare; char *a_name=a+sizeof(index_t); char *b_name=b+sizeof(index_t); compare=strcmp(a_name,b_name); if(compare) return(compare); else return(FILESORT_PRESERVE_ORDER(a,b)); } /*++++++++++++++++++++++++++++++++++++++ Compact the way list, removing duplicated ways and unused ways. WaysX *waysx The set of ways to process. SegmentsX *segmentsx The set of segments to check. ++++++++++++++++++++++++++++++++++++++*/ void CompactWayList(WaysX *waysx,SegmentsX *segmentsx) { int fd; index_t cnumber; if(waysx->number==0) return; /* Print the start message */ printf_first("Sorting Ways and Compacting"); /* Allocate the array of indexes */ waysx->cdata=(index_t*)malloc(waysx->number*sizeof(index_t)); log_malloc(waysx->cdata,waysx->number*sizeof(index_t)); logassert(waysx->cdata,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ /* Re-open the file read-only and a new file writeable */ fd=ReplaceFileBuffered(waysx->filename_tmp,&waysx->fd); /* Sort the ways to allow compacting according to the properties */ sortwaysx=waysx; sortsegmentsx=segmentsx; cnumber=filesort_fixed(waysx->fd,fd,sizeof(WayX),(int (*)(void*,index_t))delete_unused, (int (*)(const void*,const void*))sort_by_name_and_prop_and_id, (int (*)(void*,index_t))deduplicate_and_index_by_compact_id); /* Close the files */ waysx->fd=CloseFileBuffered(waysx->fd); CloseFileBuffered(fd); /* Free the data */ log_free(segmentsx->usedway); free(segmentsx->usedway); segmentsx->usedway=NULL; /* Print the final message */ printf_last("Sorted and Compacted Ways: Ways=%"Pindex_t" Unique=%"Pindex_t,waysx->number,cnumber); waysx->number=cnumber; } /*++++++++++++++++++++++++++++++++++++++ Delete the ways that are no longer being used. int delete_unused Return 1 if the value is to be kept, otherwise 0. WayX *wayx The extended way. index_t index The number of unsorted ways that have been read from the input file. ++++++++++++++++++++++++++++++++++++++*/ static int delete_unused(WayX *wayx,index_t index) { if(sortsegmentsx && !IsBitSet(sortsegmentsx->usedway,index)) { sortwaysx->cdata[index]=NO_WAY; return(0); } else { wayx->id=index; return(1); } } /*++++++++++++++++++++++++++++++++++++++ Sort the ways into name, properties and id order. int sort_by_name_and_prop_and_id Returns the comparison of the name, properties and id fields. WayX *a The first extended Way. WayX *b The second extended Way. ++++++++++++++++++++++++++++++++++++++*/ static int sort_by_name_and_prop_and_id(WayX *a,WayX *b) { int compare; index_t a_name=a->way.name; index_t b_name=b->way.name; if(a_nameb_name) return(1); compare=WaysCompare(&a->way,&b->way); if(compare) return(compare); return(sort_by_id(a,b)); } /*++++++++++++++++++++++++++++++++++++++ Create the index of compacted Way identifiers and ignore Ways with duplicated properties. int deduplicate_and_index_by_compact_id Return 1 if the value is to be kept, otherwise 0. WayX *wayx The extended way. index_t index The number of sorted ways that have already been written to the output file. ++++++++++++++++++++++++++++++++++++++*/ static int deduplicate_and_index_by_compact_id(WayX *wayx,index_t index) { static Way lastway; /* internal variable (reset by first call in each sort; index==0) */ if(index==0 || wayx->way.name!=lastway.name || WaysCompare(&lastway,&wayx->way)) { lastway=wayx->way; sortwaysx->cdata[wayx->id]=index; wayx->id=index; return(1); } else { sortwaysx->cdata[wayx->id]=index-1; return(0); } } /*++++++++++++++++++++++++++++++++++++++ Save the way list to a file. WaysX *waysx The set of ways to save. const char *filename The name of the file to save. ++++++++++++++++++++++++++++++++++++++*/ void SaveWayList(WaysX *waysx,const char *filename) { index_t i; int fd; index_t position=0; WayX wayx; WaysFile waysfile={0}; highways_t highways=0; transports_t allow=0; properties_t props=0; /* Print the start message */ printf_first("Writing Ways: Ways=0"); /* Re-open the files */ waysx->fd=ReOpenFileBuffered(waysx->filename_tmp); waysx->nfd=ReOpenFileBuffered(waysx->nfilename_tmp); /* Write out the ways data */ fd=OpenFileBufferedNew(filename); SeekFileBuffered(fd,sizeof(WaysFile)); for(i=0;inumber;i++) { ReadFileBuffered(waysx->fd,&wayx,sizeof(WayX)); highways|=HIGHWAYS(wayx.way.type); allow |=wayx.way.allow; props |=wayx.way.props; WriteFileBuffered(fd,&wayx.way,sizeof(Way)); if(!((i+1)%1000)) printf_middle("Writing Ways: Ways=%"Pindex_t,i+1); } /* Write out the ways names */ SeekFileBuffered(fd,sizeof(WaysFile)+(offset_t)waysx->number*sizeof(Way)); while(positionnlength) { size_t len=1024; char temp[1024]; if((waysx->nlength-position)<1024) len=waysx->nlength-position; ReadFileBuffered(waysx->nfd,temp,len); WriteFileBuffered(fd,temp,len); position+=len; } /* Close the files */ waysx->fd=CloseFileBuffered(waysx->fd); waysx->nfd=CloseFileBuffered(waysx->nfd); /* Write out the header structure */ waysfile.number =waysx->number; waysfile.highways=highways; waysfile.allow =allow; waysfile.props =props; SeekFileBuffered(fd,0); WriteFileBuffered(fd,&waysfile,sizeof(WaysFile)); CloseFileBuffered(fd); /* Print the final message */ printf_last("Wrote Ways: Ways=%"Pindex_t,waysx->number); } routino-3.2/src/segments.h 644 233 144 17360 12663133501 11041 0/*************************************** $Header: /home/amb/CVS/routino/src/segments.h,v 1.38 2010-12-21 17:18:41 amb Exp $ A header file for the segments. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2016 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef SEGMENTS_H #define SEGMENTS_H /*+ To stop multiple inclusions. +*/ #include #include "types.h" #include "cache.h" #include "files.h" #include "profiles.h" /* Data structures */ /*+ A structure containing a single segment. +*/ struct _Segment { index_t node1; /*+ The index of the starting node. +*/ index_t node2; /*+ The index of the finishing node. +*/ index_t next2; /*+ The index of the next segment sharing node2. +*/ index_t way; /*+ The index of the way associated with the segment. +*/ distance_t distance; /*+ The distance between the nodes. +*/ }; /*+ A structure containing the header from the file. +*/ typedef struct _SegmentsFile { index_t number; /*+ The number of segments in total. +*/ index_t snumber; /*+ The number of super-segments. +*/ index_t nnumber; /*+ The number of normal segments. +*/ } SegmentsFile; /*+ A structure containing a set of segments (and pointers to mmap file). +*/ struct _Segments { SegmentsFile file; /*+ The header data from the file. +*/ #if !SLIM char *data; /*+ The memory mapped data. +*/ Segment *segments; /*+ An array of segments. +*/ #else int fd; /*+ The file descriptor for the file. +*/ Segment cached[4]; /*+ Three cached segments read from the file in slim mode. +*/ index_t incache[4]; /*+ The indexes of the cached segments. +*/ SegmentCache *cache; /*+ A RAM cache of segments read from the file. +*/ #endif }; /* Functions in segments.c */ Segments *LoadSegmentList(const char *filename); void DestroySegmentList(Segments *segments); index_t FindClosestSegmentHeading(Nodes *nodes,Segments *segments,Ways *ways,index_t node1,double heading,Profile *profile); distance_t Distance(double lat1,double lon1,double lat2,double lon2); double DeltaLat(double lon,distance_t distance); double DeltaLon(double lat,distance_t distance); duration_t Duration(Segment *segmentp,Way *wayp,Profile *profile); double TurnAngle(Nodes *nodes,Segment *segment1p,Segment *segment2p,index_t node); double BearingAngle(Nodes *nodes,Segment *segmentp,index_t node); static inline Segment *NextSegment(Segments *segments,Segment *segmentp,index_t node); /* Macros and inline functions */ /*+ Return true if this is a normal segment. +*/ #define IsNormalSegment(xxx) (((xxx)->distance)&SEGMENT_NORMAL) /*+ Return true if this is a super-segment. +*/ #define IsSuperSegment(xxx) (((xxx)->distance)&SEGMENT_SUPER) /*+ Return true if the segment is oneway. +*/ #define IsOneway(xxx) ((xxx)->distance&(ONEWAY_2TO1|ONEWAY_1TO2)) /*+ Return true if the segment is oneway towards the specified node. +*/ #define IsOnewayTo(xxx,yyy) ((xxx)->node1==(yyy)?((xxx)->distance&ONEWAY_2TO1):((xxx)->distance&ONEWAY_1TO2)) /*+ Return true if the segment is oneway from the specified node. +*/ #define IsOnewayFrom(xxx,yyy) ((xxx)->node2==(yyy)?((xxx)->distance&ONEWAY_2TO1):((xxx)->distance&ONEWAY_1TO2)) /*+ Return the other node in the segment that is not the specified node. +*/ #define OtherNode(xxx,yyy) ((xxx)->node1==(yyy)?(xxx)->node2:(xxx)->node1) #if !SLIM /*+ Return a segment pointer given a set of segments and an index. +*/ #define LookupSegment(xxx,yyy,ppp) (&(xxx)->segments[yyy]) /*+ Return a segment index given a set of segments and a pointer. +*/ #define IndexSegment(xxx,yyy) (index_t)((yyy)-&(xxx)->segments[0]) /*++++++++++++++++++++++++++++++++++++++ Find the next segment with a particular starting node. Segment *NextSegment Returns a pointer to the next segment. Segments *segments The set of segments to use. Segment *segmentp The current segment. index_t node The wanted node. ++++++++++++++++++++++++++++++++++++++*/ static inline Segment *NextSegment(Segments *segments,Segment *segmentp,index_t node) { if(segmentp->node1==node) { segmentp++; if(IndexSegment(segments,segmentp)>=segments->file.number || segmentp->node1!=node) return(NULL); else return(segmentp); } else { if(segmentp->next2==NO_SEGMENT) return(NULL); else return(LookupSegment(segments,segmentp->next2,1)); } } #else /* Prototypes */ static inline Segment *LookupSegment(Segments *segments,index_t index,int position); static inline index_t IndexSegment(Segments *segments,Segment *segmentp); CACHE_NEWCACHE_PROTO(Segment) CACHE_DELETECACHE_PROTO(Segment) CACHE_FETCHCACHE_PROTO(Segment) CACHE_INVALIDATECACHE_PROTO(Segment) /* Data type */ CACHE_STRUCTURE(Segment) /* Inline functions */ CACHE_NEWCACHE(Segment) CACHE_DELETECACHE(Segment) CACHE_FETCHCACHE(Segment) CACHE_INVALIDATECACHE(Segment) /*++++++++++++++++++++++++++++++++++++++ Find the Segment information for a particular segment. Segment *LookupSegment Returns a pointer to the cached segment information. Segments *segments The set of segments to use. index_t index The index of the segment. int position The position in the cache to store the value. ++++++++++++++++++++++++++++++++++++++*/ static inline Segment *LookupSegment(Segments *segments,index_t index,int position) { segments->cached[position-1]=*FetchCachedSegment(segments->cache,index,segments->fd,sizeof(SegmentsFile)); segments->incache[position-1]=index; return(&segments->cached[position-1]); } /*++++++++++++++++++++++++++++++++++++++ Find the segment index for a particular segment pointer. index_t IndexSegment Returns the index of the segment in the list. Segments *segments The set of segments to use. Segment *segmentp The segment whose index is to be found. ++++++++++++++++++++++++++++++++++++++*/ static inline index_t IndexSegment(Segments *segments,Segment *segmentp) { int position1=(int)(segmentp-&segments->cached[0]); return(segments->incache[position1]); } /*++++++++++++++++++++++++++++++++++++++ Find the next segment with a particular starting node. Segment *NextSegment Returns a pointer to the next segment. Segments *segments The set of segments to use. Segment *segmentp The current segment. index_t node The wanted node. ++++++++++++++++++++++++++++++++++++++*/ static inline Segment *NextSegment(Segments *segments,Segment *segmentp,index_t node) { int position=(int)(segmentp-segments->cached)+1; if(segmentp->node1==node) { index_t index=IndexSegment(segments,segmentp); index++; if(index>=segments->file.number) return(NULL); segmentp=LookupSegment(segments,index,position); if(segmentp->node1!=node) return(NULL); else return(segmentp); } else { if(segmentp->next2==NO_SEGMENT) return(NULL); else return(LookupSegment(segments,segmentp->next2,position)); } } #endif #endif /* SEGMENTS_H */ routino-3.2/src/tagging.c 644 233 144 66152 12563633051 10636 0/*************************************** Load the tagging rules from a file and the functions for handling them. Part of the Routino routing software. ******************/ /****************** This file Copyright 2010-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include #include #include "files.h" #include "tagging.h" #include "xmlparse.h" #include "logging.h" /* Constants */ #define TAGACTION_IF 1 #define TAGACTION_IFNOT 2 #define TAGACTION_INHERIT 3 /* Not a real action, just a marker */ #define TAGACTION_SET 4 #define TAGACTION_UNSET 5 #define TAGACTION_OUTPUT 6 #define TAGACTION_LOGERROR 7 static const char* const default_logerror_message="ignoring it"; /* Local variable (intialised before each use) */ static int64_t current_id; /* Local parsing variables (re-initialised by DeleteXMLTaggingRules() function) */ static TaggingRuleList NodeRules={NULL,0}; static TaggingRuleList WayRules={NULL,0}; static TaggingRuleList RelationRules={NULL,0}; static int current_list_stack_depth=0; static TaggingRuleList **current_list_stack=NULL; static TaggingRuleList *current_list=NULL; /* Local parsing functions */ static TaggingRuleList *AppendTaggingRule(TaggingRuleList *rules,const char *k,const char *v,int action); static void AppendTaggingAction(TaggingRuleList *rules,const char *k,const char *v,int action,const char *message); static void DeleteTaggingRuleList(TaggingRuleList *rules); static void ApplyRules(TaggingRuleList *rules,TagList *input,TagList *output,const char *match_k,const char *match_v); /* The XML tag processing function prototypes */ //static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding); //static int RoutinoTaggingType_function(const char *_tag_,int _type_); static int NodeType_function(const char *_tag_,int _type_); static int WayType_function(const char *_tag_,int _type_); static int RelationType_function(const char *_tag_,int _type_); static int IfType_function(const char *_tag_,int _type_,const char *k,const char *v); static int IfNotType_function(const char *_tag_,int _type_,const char *k,const char *v); static int SetType_function(const char *_tag_,int _type_,const char *k,const char *v); static int UnsetType_function(const char *_tag_,int _type_,const char *k); static int OutputType_function(const char *_tag_,int _type_,const char *k,const char *v); static int LogErrorType_function(const char *_tag_,int _type_,const char *k,const char *v,const char *message); /* The XML tag definitions (forward declarations) */ static const xmltag xmlDeclaration_tag; static const xmltag RoutinoTaggingType_tag; static const xmltag NodeType_tag; static const xmltag WayType_tag; static const xmltag RelationType_tag; static const xmltag IfType_tag; static const xmltag IfNotType_tag; static const xmltag SetType_tag; static const xmltag UnsetType_tag; static const xmltag OutputType_tag; static const xmltag LogErrorType_tag; /* The XML tag definition values */ /*+ The complete set of tags at the top level. +*/ static const xmltag * const xml_toplevel_tags[]={&xmlDeclaration_tag,&RoutinoTaggingType_tag,NULL}; /*+ The xmlDeclaration type tag. +*/ static const xmltag xmlDeclaration_tag= {"xml", 2, {"version","encoding"}, NULL, {NULL}}; /*+ The RoutinoTaggingType type tag. +*/ static const xmltag RoutinoTaggingType_tag= {"routino-tagging", 0, {NULL}, NULL, {&NodeType_tag,&WayType_tag,&RelationType_tag,NULL}}; /*+ The NodeType type tag. +*/ static const xmltag NodeType_tag= {"node", 0, {NULL}, NodeType_function, {&IfType_tag,&IfNotType_tag,NULL}}; /*+ The WayType type tag. +*/ static const xmltag WayType_tag= {"way", 0, {NULL}, WayType_function, {&IfType_tag,&IfNotType_tag,NULL}}; /*+ The RelationType type tag. +*/ static const xmltag RelationType_tag= {"relation", 0, {NULL}, RelationType_function, {&IfType_tag,&IfNotType_tag,NULL}}; /*+ The IfType type tag. +*/ static const xmltag IfType_tag= {"if", 2, {"k","v"}, IfType_function, {&IfType_tag,&IfNotType_tag,&SetType_tag,&UnsetType_tag,&OutputType_tag,&LogErrorType_tag,NULL}}; /*+ The IfNotType type tag. +*/ static const xmltag IfNotType_tag= {"ifnot", 2, {"k","v"}, IfNotType_function, {&IfType_tag,&IfNotType_tag,&SetType_tag,&UnsetType_tag,&OutputType_tag,&LogErrorType_tag,NULL}}; /*+ The SetType type tag. +*/ static const xmltag SetType_tag= {"set", 2, {"k","v"}, SetType_function, {NULL}}; /*+ The UnsetType type tag. +*/ static const xmltag UnsetType_tag= {"unset", 1, {"k"}, UnsetType_function, {NULL}}; /*+ The OutputType type tag. +*/ static const xmltag OutputType_tag= {"output", 2, {"k","v"}, OutputType_function, {NULL}}; /*+ The LogErrorType type tag. +*/ static const xmltag LogErrorType_tag= {"logerror", 3, {"k","v","message"}, LogErrorType_function, {NULL}}; /* The XML tag processing functions */ /*++++++++++++++++++++++++++++++++++++++ The function that is called when the XML declaration is seen int xmlDeclaration_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *version The contents of the 'version' attribute (or NULL if not defined). const char *encoding The contents of the 'encoding' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ //static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the RoutinoTaggingType XSD type is seen int RoutinoTaggingType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ //static int RoutinoTaggingType_function(const char *_tag_,int _type_) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the NodeType XSD type is seen int NodeType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ static int NodeType_function(const char *_tag_,int _type_) { if(_type_&XMLPARSE_TAG_START) { current_list_stack_depth=0; current_list=&NodeRules; } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the WayType XSD type is seen int WayType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ static int WayType_function(const char *_tag_,int _type_) { if(_type_&XMLPARSE_TAG_START) { current_list_stack_depth=0; current_list=&WayRules; } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the RelationType XSD type is seen int RelationType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ static int RelationType_function(const char *_tag_,int _type_) { if(_type_&XMLPARSE_TAG_START) { current_list_stack_depth=0; current_list=&RelationRules; } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the IfType XSD type is seen int IfType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *k The contents of the 'k' attribute (or NULL if not defined). const char *v The contents of the 'v' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int IfType_function(const char *_tag_,int _type_,const char *k,const char *v) { if(_type_&XMLPARSE_TAG_START) { if(!current_list_stack || (current_list_stack_depth%8)==7) current_list_stack=(TaggingRuleList**)realloc((void*)current_list_stack,(current_list_stack_depth+8)*sizeof(TaggingRuleList*)); current_list_stack[current_list_stack_depth++]=current_list; current_list=AppendTaggingRule(current_list,k,v,TAGACTION_IF); } if(_type_&XMLPARSE_TAG_END) current_list=current_list_stack[--current_list_stack_depth]; return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the IfNotType XSD type is seen int IfNotType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *k The contents of the 'k' attribute (or NULL if not defined). const char *v The contents of the 'v' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int IfNotType_function(const char *_tag_,int _type_,const char *k,const char *v) { if(_type_&XMLPARSE_TAG_START) { if(!current_list_stack || (current_list_stack_depth%8)==7) current_list_stack=(TaggingRuleList**)realloc((void*)current_list_stack,(current_list_stack_depth+8)*sizeof(TaggingRuleList*)); current_list_stack[current_list_stack_depth++]=current_list; current_list=AppendTaggingRule(current_list,k,v,TAGACTION_IFNOT); } if(_type_&XMLPARSE_TAG_END) current_list=current_list_stack[--current_list_stack_depth]; return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the SetType XSD type is seen int SetType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *k The contents of the 'k' attribute (or NULL if not defined). const char *v The contents of the 'v' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int SetType_function(const char *_tag_,int _type_,const char *k,const char *v) { if(_type_&XMLPARSE_TAG_START) AppendTaggingAction(current_list,k,v,TAGACTION_SET,NULL); return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the UnsetType XSD type is seen int UnsetType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *k The contents of the 'k' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int UnsetType_function(const char *_tag_,int _type_,const char *k) { if(_type_&XMLPARSE_TAG_START) AppendTaggingAction(current_list,k,NULL,TAGACTION_UNSET,NULL); return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the OutputType XSD type is seen int OutputType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *k The contents of the 'k' attribute (or NULL if not defined). const char *v The contents of the 'v' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int OutputType_function(const char *_tag_,int _type_,const char *k,const char *v) { if(_type_&XMLPARSE_TAG_START) AppendTaggingAction(current_list,k,v,TAGACTION_OUTPUT,NULL); return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the LogErrorType XSD type is seen int LogErrorType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *k The contents of the 'k' attribute (or NULL if not defined). const char *v The contents of the 'v' attribute (or NULL if not defined). const char *message The contents of the 'message' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int LogErrorType_function(const char *_tag_,int _type_,const char *k,const char *v,const char *message) { if(_type_&XMLPARSE_TAG_START) AppendTaggingAction(current_list,k,v,TAGACTION_LOGERROR,message); return(0); } /*++++++++++++++++++++++++++++++++++++++ The XML tagging rules parser. int ParseXMLTaggingRules Returns 0 if OK or something else in case of an error. const char *filename The name of the file to read. ++++++++++++++++++++++++++++++++++++++*/ int ParseXMLTaggingRules(const char *filename) { int fd; int retval; if(!ExistsFile(filename)) { fprintf(stderr,"Error: Specified tagging rules file '%s' does not exist.\n",filename); return(1); } fd=OpenFile(filename); /* Initialise variables used for parsing */ retval=ParseXML(fd,xml_toplevel_tags,XMLPARSE_UNKNOWN_ATTR_ERRNONAME); CloseFile(fd); if(current_list_stack) free(current_list_stack); if(retval) return(1); return(0); } /*++++++++++++++++++++++++++++++++++++++ Delete the tagging rules loaded from the XML file. ++++++++++++++++++++++++++++++++++++++*/ void DeleteXMLTaggingRules(void) { current_list_stack_depth=0; current_list_stack=NULL; current_list=NULL; DeleteTaggingRuleList(&NodeRules); DeleteTaggingRuleList(&WayRules); DeleteTaggingRuleList(&RelationRules); } /*++++++++++++++++++++++++++++++++++++++ Append a tagging rule to the list of rules. TaggingRuleList *AppendTaggingRule Returns the new TaggingRuleList inside the new TaggingRule. TaggingRuleList *rules The list of rules to add to. const char *k The tag key. const char *v The tag value. int action Set to the type of action. ++++++++++++++++++++++++++++++++++++++*/ TaggingRuleList *AppendTaggingRule(TaggingRuleList *rules,const char *k,const char *v,int action) { if((rules->nrules%16)==0) rules->rules=(TaggingRule*)realloc((void*)rules->rules,(rules->nrules+16)*sizeof(TaggingRule)); rules->nrules++; rules->rules[rules->nrules-1].action=action; if(k) rules->rules[rules->nrules-1].k=strcpy(malloc(strlen(k)+1),k); else rules->rules[rules->nrules-1].k=NULL; if(v) rules->rules[rules->nrules-1].v=strcpy(malloc(strlen(v)+1),v); else rules->rules[rules->nrules-1].v=NULL; rules->rules[rules->nrules-1].message=NULL; rules->rules[rules->nrules-1].rulelist=(TaggingRuleList*)calloc(sizeof(TaggingRuleList),1); return(rules->rules[rules->nrules-1].rulelist); } /*++++++++++++++++++++++++++++++++++++++ Append a tagging action to the list of rules. TaggingRuleList *rules The list of rules to add to. const char *k The tag key. const char *v The tag value. int action Set to the type of action. const char *message The message to use for the logerror action. ++++++++++++++++++++++++++++++++++++++*/ static void AppendTaggingAction(TaggingRuleList *rules,const char *k,const char *v,int action,const char *message) { if((rules->nrules%16)==0) rules->rules=(TaggingRule*)realloc((void*)rules->rules,(rules->nrules+16)*sizeof(TaggingRule)); rules->nrules++; rules->rules[rules->nrules-1].action=action; if(k) rules->rules[rules->nrules-1].k=strcpy(malloc(strlen(k)+1),k); else rules->rules[rules->nrules-1].k=NULL; if(v) rules->rules[rules->nrules-1].v=strcpy(malloc(strlen(v)+1),v); else rules->rules[rules->nrules-1].v=NULL; if(message) rules->rules[rules->nrules-1].message=strcpy(malloc(strlen(message)+1),message); else rules->rules[rules->nrules-1].message=(char*)default_logerror_message; rules->rules[rules->nrules-1].rulelist=NULL; } /*++++++++++++++++++++++++++++++++++++++ Delete a tagging rule. TaggingRuleList *rules The list of rules to be deleted. ++++++++++++++++++++++++++++++++++++++*/ void DeleteTaggingRuleList(TaggingRuleList *rules) { int i; for(i=0;inrules;i++) { if(rules->rules[i].k) free(rules->rules[i].k); if(rules->rules[i].v) free(rules->rules[i].v); if(rules->rules[i].message && rules->rules[i].message!=default_logerror_message) free(rules->rules[i].message); if(rules->rules[i].rulelist) { DeleteTaggingRuleList(rules->rules[i].rulelist); free(rules->rules[i].rulelist); } } if(rules->rules) free(rules->rules); rules->rules=NULL; rules->nrules=0; } /*++++++++++++++++++++++++++++++++++++++ Create a new TagList structure. TagList *NewTagList Returns the new allocated TagList. ++++++++++++++++++++++++++++++++++++++*/ TagList *NewTagList(void) { return((TagList*)calloc(sizeof(TagList),1)); } /*++++++++++++++++++++++++++++++++++++++ Delete a tag list and the contents. TagList *tags The list of tags to delete. ++++++++++++++++++++++++++++++++++++++*/ void DeleteTagList(TagList *tags) { int i; for(i=0;intags;i++) { if(tags->k[i]) free(tags->k[i]); if(tags->v[i]) free(tags->v[i]); } if(tags->k) free(tags->k); if(tags->v) free(tags->v); free(tags); } /*++++++++++++++++++++++++++++++++++++++ Append a tag to the list of tags. TagList *tags The list of tags to add to. const char *k The tag key. const char *v The tag value. ++++++++++++++++++++++++++++++++++++++*/ void AppendTag(TagList *tags,const char *k,const char *v) { if((tags->ntags%8)==0) { int i; tags->k=(char**)realloc((void*)tags->k,(tags->ntags+8)*sizeof(char*)); tags->v=(char**)realloc((void*)tags->v,(tags->ntags+8)*sizeof(char*)); for(i=tags->ntags;i<(tags->ntags+8);i++) tags->k[i]=tags->v[i]=NULL; } tags->k[tags->ntags]=strcpy(realloc(tags->k[tags->ntags],strlen(k)+1),k); tags->v[tags->ntags]=strcpy(realloc(tags->v[tags->ntags],strlen(v)+1),v); tags->ntags++; } /*++++++++++++++++++++++++++++++++++++++ Modify an existing tag or append a new tag to the list of tags. TagList *tags The list of tags to modify. const char *k The tag key. const char *v The tag value. ++++++++++++++++++++++++++++++++++++++*/ void ModifyTag(TagList *tags,const char *k,const char *v) { int i; for(i=0;intags;i++) if(!strcmp(tags->k[i],k)) { tags->v[i]=strcpy(realloc(tags->v[i],strlen(v)+1),v); return; } AppendTag(tags,k,v); } /*++++++++++++++++++++++++++++++++++++++ Delete an existing tag from the list of tags. TagList *tags The list of tags to modify. const char *k The tag key. ++++++++++++++++++++++++++++++++++++++*/ void DeleteTag(TagList *tags,const char *k) { int i,j; for(i=0;intags;i++) if(!strcmp(tags->k[i],k)) { if(tags->k[i]) free(tags->k[i]); if(tags->v[i]) free(tags->v[i]); for(j=i+1;jntags;j++) { tags->k[j-1]=tags->k[j]; tags->v[j-1]=tags->v[j]; } tags->ntags--; tags->k[tags->ntags]=NULL; tags->v[tags->ntags]=NULL; return; } } /*++++++++++++++++++++++++++++++++++++++ Create a string containing all of the tags formatted as if HTML. char *StringifyTag Returns a static pointer to the created string. TagList *tags The list of tags to convert. ++++++++++++++++++++++++++++++++++++++*/ char *StringifyTag(TagList *tags) { static char *string=NULL; /* static allocation of return value */ int i,length=0,used=0; for(i=0;intags;i++) { length+=strlen(tags->k[i]); length+=strlen(tags->v[i]); length+=16; } string=realloc((char*)string,length); for(i=0;intags;i++) used+=sprintf(string+used,"",tags->k[i],tags->v[i]); return(string); } /*++++++++++++++++++++++++++++++++++++++ Apply a set of tagging rules to a set of node tags. TagList *ApplyNodeTaggingRules Returns the list of output tags after modification. TagList *tags The tags to be modified. int64_t id The ID of the node. ++++++++++++++++++++++++++++++++++++++*/ TagList *ApplyNodeTaggingRules(TagList *tags,int64_t id) { TagList *result=NewTagList(); current_id=id; current_list=&NodeRules; ApplyRules(current_list,tags,result,NULL,NULL); return(result); } /*++++++++++++++++++++++++++++++++++++++ Apply a set of tagging rules to a set of way tags. TagList *ApplyWayTaggingRules Returns the list of output tags after modification. TagList *tags The tags to be modified. int64_t id The ID of the way. ++++++++++++++++++++++++++++++++++++++*/ TagList *ApplyWayTaggingRules(TagList *tags,int64_t id) { TagList *result=NewTagList(); current_id=id; current_list=&WayRules; ApplyRules(current_list,tags,result,NULL,NULL); return(result); } /*++++++++++++++++++++++++++++++++++++++ Apply a set of tagging rules to a set of relation tags. TagList *ApplyRelationTaggingRules Returns the list of output tags after modification. TagList *tags The tags to be modified. int64_t id The ID of the relation. ++++++++++++++++++++++++++++++++++++++*/ TagList *ApplyRelationTaggingRules(TagList *tags,int64_t id) { TagList *result=NewTagList(); current_id=id; current_list=&RelationRules; ApplyRules(current_list,tags,result,NULL,NULL); return(result); } /*++++++++++++++++++++++++++++++++++++++ Apply a set of rules to a matching tag. TaggingRuleList *rules The rules that are to be matched. TagList *input The input tags. TagList *output The output tags. const char *match_k The key matched at the higher level rule. const char *match_v The value matched at the higher level rule. ++++++++++++++++++++++++++++++++++++++*/ static void ApplyRules(TaggingRuleList *rules,TagList *input,TagList *output,const char *match_k,const char *match_v) { int i,j; char *match_k_copy=NULL,*match_v_copy=NULL; if(match_k) match_k_copy=strcpy(malloc(strlen(match_k)+1),match_k); if(match_v) match_v_copy=strcpy(malloc(strlen(match_v)+1),match_v); for(i=0;inrules;i++) { const char *k,*v; k=rules->rules[i].k; if(!k && rules->rules[i].action >= TAGACTION_INHERIT) k=match_k_copy; v=rules->rules[i].v; if(!v && rules->rules[i].action >= TAGACTION_INHERIT) v=match_v_copy; switch(rules->rules[i].action) { case TAGACTION_IF: if(k && v) { for(j=0;jntags;j++) if(!strcmp(input->k[j],k) && !strcmp(input->v[j],v)) ApplyRules(rules->rules[i].rulelist,input,output,input->k[j],input->v[j]); } else if(k && !v) { for(j=0;jntags;j++) if(!strcmp(input->k[j],k)) ApplyRules(rules->rules[i].rulelist,input,output,input->k[j],input->v[j]); } else if(!k && v) { for(j=0;jntags;j++) if(!strcmp(input->v[j],v)) ApplyRules(rules->rules[i].rulelist,input,output,input->k[j],input->v[j]); } else /* if(!k && !v) */ { if(!input->ntags) ApplyRules(rules->rules[i].rulelist,input,output,"",""); else for(j=0;jntags;j++) ApplyRules(rules->rules[i].rulelist,input,output,input->k[j],input->v[j]); } break; case TAGACTION_IFNOT: if(k && v) { for(j=0;jntags;j++) if(!strcmp(input->k[j],k) && !strcmp(input->v[j],v)) break; if(j!=input->ntags) break; } else if(k && !v) { for(j=0;jntags;j++) if(!strcmp(input->k[j],k)) break; if(j!=input->ntags) break; } else if(!k && v) { for(j=0;jntags;j++) if(!strcmp(input->v[j],v)) break; if(j!=input->ntags) break; } else /* if(!k && !v) */ { break; } ApplyRules(rules->rules[i].rulelist,input,output,k,v); break; case TAGACTION_SET: ModifyTag(input,k,v); break; case TAGACTION_UNSET: DeleteTag(input,k); break; case TAGACTION_OUTPUT: ModifyTag(output,k,v); break; case TAGACTION_LOGERROR: if(rules->rules[i].k && !rules->rules[i].v) for(j=0;jntags;j++) if(!strcmp(input->k[j],rules->rules[i].k)) { v=input->v[j]; break; } if(current_list==&NodeRules) logerror("Node %"Pnode_t" has an unrecognised tag '%s' = '%s' (in tagging rules); %s.\n",logerror_node(current_id),k,v,rules->rules[i].message); if(current_list==&WayRules) logerror("Way %"Pway_t" has an unrecognised tag '%s' = '%s' (in tagging rules); %s.\n",logerror_way(current_id),k,v,rules->rules[i].message); if(current_list==&RelationRules) logerror("Relation %"Prelation_t" has an unrecognised tag '%s' = '%s' (in tagging rules); %s.\n",logerror_relation(current_id),k,v,rules->rules[i].message); } } if(match_k_copy) free(match_k_copy); if(match_v_copy) free(match_v_copy); } routino-3.2/src/filedumper.c 644 233 144 133566 12574074473 11407 0/*************************************** Memory file dumper. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include #include #include #include "version.h" #include "types.h" #include "nodes.h" #include "segments.h" #include "ways.h" #include "relations.h" #include "errorlog.h" #include "files.h" #include "visualiser.h" #include "xmlparse.h" /* Local functions */ static void print_node(Nodes *nodes,index_t item); static void print_segment(Segments *segments,index_t item); static void print_way(Ways *ways,index_t item); static void print_turn_relation(Relations *relations,index_t item,Segments *segments,Nodes *nodes); static void print_errorlog(ErrorLogs *errorlogs,index_t item); static void print_head_osm(int coordcount,double latmin,double latmax,double lonmin,double lonmax); static void print_region_osm(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations, double latmin,double latmax,double lonmin,double lonmax,int option_no_super); static void print_node_osm(Nodes *nodes,index_t item); static void print_segment_osm(Segments *segments,index_t item,Ways *ways); static void print_turn_relation_osm(Relations *relations,index_t item,Segments *segments,Nodes *nodes); static void print_tail_osm(void); static void print_node_visualiser(Nodes *nodes,index_t item); static void print_segment_visualiser(Segments *segments,index_t item,Ways *ways); static void print_turn_relation_visualiser(Relations *relations,index_t item,Segments *segments,Nodes *nodes); static void print_errorlog_visualiser(ErrorLogs *errorlogs,index_t item); static char *RFC822Date(time_t t); static void print_usage(int detail,const char *argerr,const char *err); /*++++++++++++++++++++++++++++++++++++++ The main program for the file dumper. ++++++++++++++++++++++++++++++++++++++*/ int main(int argc,char** argv) { Nodes *OSMNodes; Segments *OSMSegments; Ways *OSMWays; Relations*OSMRelations; ErrorLogs*OSMErrorLogs=NULL; int arg; char *dirname=NULL,*prefix=NULL; char *nodes_filename,*segments_filename,*ways_filename,*relations_filename,*errorlogs_filename; int option_statistics=0; int option_visualiser=0,coordcount=0; double latmin=0,latmax=0,lonmin=0,lonmax=0; char *option_data=NULL; int option_dump=0; int option_dump_osm=0,option_no_super=0; int option_dump_visualiser=0; /* Parse the command line arguments */ for(arg=1;argfile.number); printf("Number(super)=%9"Pindex_t"\n",OSMNodes->file.snumber); printf("\n"); printf("Lat bins= %4d\n",(int)OSMNodes->file.latbins); printf("Lon bins= %4d\n",(int)OSMNodes->file.lonbins); printf("\n"); printf("Lat zero=%5d (%8.4f deg)\n",(int)OSMNodes->file.latzero,radians_to_degrees(latlong_to_radians(bin_to_latlong(OSMNodes->file.latzero)))); printf("Lon zero=%5d (%8.4f deg)\n",(int)OSMNodes->file.lonzero,radians_to_degrees(latlong_to_radians(bin_to_latlong(OSMNodes->file.lonzero)))); /* Examine the segments */ printf("\n"); printf("Segments\n"); printf("--------\n"); printf("\n"); printf("sizeof(Segment)=%9zu Bytes\n",sizeof(Segment)); printf("Number(total) =%9"Pindex_t"\n",OSMSegments->file.number); printf("Number(super) =%9"Pindex_t"\n",OSMSegments->file.snumber); printf("Number(normal) =%9"Pindex_t"\n",OSMSegments->file.nnumber); /* Examine the ways */ printf("\n"); printf("Ways\n"); printf("----\n"); printf("\n"); printf("sizeof(Way)=%9zu Bytes\n",sizeof(Way)); printf("Number =%9"Pindex_t"\n",OSMWays->file.number); printf("\n"); stat(ways_filename,&buf); printf("Total names=%9zu Bytes\n",(size_t)buf.st_size-sizeof(Ways)-OSMWays->file.number*sizeof(Way)); printf("\n"); printf("Included highways : %s\n",HighwaysNameList(OSMWays->file.highways)); printf("Included transports: %s\n",AllowedNameList(OSMWays->file.allow)); printf("Included properties: %s\n",PropertiesNameList(OSMWays->file.props)); /* Examine the relations */ printf("\n"); printf("Relations\n"); printf("---------\n"); printf("\n"); printf("sizeof(TurnRelation)=%9zu Bytes\n",sizeof(TurnRelation)); printf("Number =%9"Pindex_t"\n",OSMRelations->file.trnumber); if(errorlogs_filename) { printf("\n"); printf("Error Logs\n"); printf("----------\n"); printf("\n"); printf("Number(total) =%9"Pindex_t"\n",OSMErrorLogs->file.number); printf("Number(geographical) =%9"Pindex_t"\n",OSMErrorLogs->file.number_geo); printf("Number(non-geographical)=%9"Pindex_t"\n",OSMErrorLogs->file.number_nongeo); printf("\n"); stat(errorlogs_filename,&buf); #if !SLIM printf("Total strings=%9zu Bytes\n",(size_t)buf.st_size-(OSMErrorLogs->strings-(char*)OSMErrorLogs->data)); #else printf("Total strings=%9zu Bytes\n",(size_t)buf.st_size-(size_t)OSMErrorLogs->stringsoffset); #endif } } /* Print out internal data (in plain text format) */ if(option_dump) { index_t item; for(arg=1;argfile.number;item++) print_node(OSMNodes,item); } else if(!strncmp(argv[arg],"--node=",7)) { item=atoi(&argv[arg][7]); if(itemfile.number) print_node(OSMNodes,item); else printf("Invalid node number; minimum=0, maximum=%"Pindex_t".\n",OSMNodes->file.number-1); } else if(!strcmp(argv[arg],"--segment=all")) { for(item=0;itemfile.number;item++) print_segment(OSMSegments,item); } else if(!strncmp(argv[arg],"--segment=",10)) { item=atoi(&argv[arg][10]); if(itemfile.number) print_segment(OSMSegments,item); else printf("Invalid segment number; minimum=0, maximum=%"Pindex_t".\n",OSMSegments->file.number-1); } else if(!strcmp(argv[arg],"--way=all")) { for(item=0;itemfile.number;item++) print_way(OSMWays,item); } else if(!strncmp(argv[arg],"--way=",6)) { item=atoi(&argv[arg][6]); if(itemfile.number) print_way(OSMWays,item); else printf("Invalid way number; minimum=0, maximum=%"Pindex_t".\n",OSMWays->file.number-1); } else if(!strcmp(argv[arg],"--turn-relation=all")) { for(item=0;itemfile.trnumber;item++) print_turn_relation(OSMRelations,item,OSMSegments,OSMNodes); } else if(!strncmp(argv[arg],"--turn-relation=",16)) { item=atoi(&argv[arg][16]); if(itemfile.trnumber) print_turn_relation(OSMRelations,item,OSMSegments,OSMNodes); else printf("Invalid turn relation number; minimum=0, maximum=%"Pindex_t".\n",OSMRelations->file.trnumber-1); } else if(!strcmp(argv[arg],"--errorlog=all")) { for(item=0;itemfile.number;item++) print_errorlog(OSMErrorLogs,item); } else if(!strncmp(argv[arg],"--errorlog=",11)) { item=atoi(&argv[arg][11]); if(itemfile.number) print_errorlog(OSMErrorLogs,item); else printf("Invalid error log number; minimum=0, maximum=%"Pindex_t".\n",OSMErrorLogs->file.number-1); } } /* Print out internal data (in OSM XML format) */ if(option_dump_osm) { if(coordcount>0 && coordcount!=4) print_usage(0,NULL,"The --dump-osm option must have all of --latmin, --latmax, --lonmin, --lonmax or none.\n"); print_head_osm(coordcount,latmin,latmax,lonmin,lonmax); if(coordcount) print_region_osm(OSMNodes,OSMSegments,OSMWays,OSMRelations,latmin,latmax,lonmin,lonmax,option_no_super); else { index_t item; for(item=0;itemfile.number;item++) print_node_osm(OSMNodes,item); for(item=0;itemfile.number;item++) if(!option_no_super || IsNormalSegment(LookupSegment(OSMSegments,item,1))) print_segment_osm(OSMSegments,item,OSMWays); for(item=0;itemfile.trnumber;item++) print_turn_relation_osm(OSMRelations,item,OSMSegments,OSMNodes); } print_tail_osm(); } /* Print out internal data (in HTML format for the visualiser) */ if(option_dump_visualiser) { index_t item; if(!option_data) print_usage(0,NULL,"The --dump-visualiser option must have --data.\n"); for(arg=1;argfile.number) print_node_visualiser(OSMNodes,item); else printf("Invalid node number; minimum=0, maximum=%"Pindex_t".\n",OSMNodes->file.number-1); } else if(!strncmp(argv[arg],"--data=segment",14)) { item=atoi(&argv[arg][14]); if(itemfile.number) print_segment_visualiser(OSMSegments,item,OSMWays); else printf("Invalid segment number; minimum=0, maximum=%"Pindex_t".\n",OSMSegments->file.number-1); } else if(!strncmp(argv[arg],"--data=turn-relation",20)) { item=atoi(&argv[arg][20]); if(itemfile.trnumber) print_turn_relation_visualiser(OSMRelations,item,OSMSegments,OSMNodes); else printf("Invalid turn relation number; minimum=0, maximum=%"Pindex_t".\n",OSMRelations->file.trnumber-1); } else if(!strncmp(argv[arg],"--data=errorlog",15)) { item=atoi(&argv[arg][15]); if(itemfile.number) print_errorlog_visualiser(OSMErrorLogs,item); else printf("Invalid error log number; minimum=0, maximum=%"Pindex_t".\n",OSMErrorLogs->file.number-1); } } exit(EXIT_SUCCESS); } /*++++++++++++++++++++++++++++++++++++++ Print out the contents of a node from the routing database (as plain text). Nodes *nodes The set of nodes to use. index_t item The node index to print. ++++++++++++++++++++++++++++++++++++++*/ static void print_node(Nodes *nodes,index_t item) { Node *nodep=LookupNode(nodes,item,1); double latitude,longitude; GetLatLong(nodes,item,nodep,&latitude,&longitude); printf("Node %"Pindex_t"\n",item); printf(" firstseg=%"Pindex_t"\n",nodep->firstseg); printf(" latoffset=%d lonoffset=%d (latitude=%.6f longitude=%.6f)\n",nodep->latoffset,nodep->lonoffset,radians_to_degrees(latitude),radians_to_degrees(longitude)); printf(" allow=%02x (%s)\n",nodep->allow,AllowedNameList(nodep->allow)); if(IsSuperNode(nodep)) printf(" Super-Node\n"); if(nodep->flags & NODE_MINIRNDBT) printf(" Mini-roundabout\n"); } /*++++++++++++++++++++++++++++++++++++++ Print out the contents of a segment from the routing database (as plain text). Segments *segments The set of segments to use. index_t item The segment index to print. ++++++++++++++++++++++++++++++++++++++*/ static void print_segment(Segments *segments,index_t item) { Segment *segmentp=LookupSegment(segments,item,1); printf("Segment %"Pindex_t"\n",item); printf(" node1=%"Pindex_t" node2=%"Pindex_t"\n",segmentp->node1,segmentp->node2); printf(" next2=%"Pindex_t"\n",segmentp->next2); printf(" way=%"Pindex_t"\n",segmentp->way); printf(" distance=%d (%.3f km)\n",DISTANCE(segmentp->distance),distance_to_km(DISTANCE(segmentp->distance))); if(IsSuperSegment(segmentp) && IsNormalSegment(segmentp)) printf(" Super-Segment AND normal Segment\n"); else if(IsSuperSegment(segmentp) && !IsNormalSegment(segmentp)) printf(" Super-Segment\n"); if(IsOnewayTo(segmentp,segmentp->node1)) printf(" One-Way from node2 to node1\n"); if(IsOnewayTo(segmentp,segmentp->node2)) printf(" One-Way from node1 to node2\n"); } /*++++++++++++++++++++++++++++++++++++++ Print out the contents of a way from the routing database (as plain text). Ways *ways The set of ways to use. index_t item The way index to print. ++++++++++++++++++++++++++++++++++++++*/ static void print_way(Ways *ways,index_t item) { Way *wayp=LookupWay(ways,item,1); char *name=WayName(ways,wayp); printf("Way %"Pindex_t"\n",item); if(*name) printf(" name=%s\n",name); printf(" type=%02x (%s%s%s%s)\n",wayp->type, HighwayName(HIGHWAY(wayp->type)), wayp->type&Highway_OneWay?",One-Way":"", wayp->type&Highway_CycleBothWays?",Cycle-Both-Ways":"", wayp->type&Highway_Roundabout?",Roundabout":""); printf(" allow=%02x (%s)\n",wayp->allow,AllowedNameList(wayp->allow)); if(wayp->props) printf(" props=%02x (%s)\n",wayp->props,PropertiesNameList(wayp->props)); if(wayp->speed) printf(" speed=%d (%d km/hr)\n",wayp->speed,speed_to_kph(wayp->speed)); if(wayp->weight) printf(" weight=%d (%.1f tonnes)\n",wayp->weight,weight_to_tonnes(wayp->weight)); if(wayp->height) printf(" height=%d (%.1f m)\n",wayp->height,height_to_metres(wayp->height)); if(wayp->width) printf(" width=%d (%.1f m)\n",wayp->width,width_to_metres(wayp->width)); if(wayp->length) printf(" length=%d (%.1f m)\n",wayp->length,length_to_metres(wayp->length)); } /*++++++++++++++++++++++++++++++++++++++ Print out the contents of a turn relation from the routing database (as plain text). Relations *relations The set of relations to use. index_t item The turn relation index to print. Segments *segments The set of segments to use. Nodes *nodes The set of nodes to use. ++++++++++++++++++++++++++++++++++++++*/ static void print_turn_relation(Relations *relations,index_t item,Segments *segments,Nodes *nodes) { Segment *segmentp; TurnRelation *relationp=LookupTurnRelation(relations,item,1); Node *nodep=LookupNode(nodes,relationp->via,1); index_t from_way=NO_WAY,to_way=NO_WAY; index_t from_node=NO_NODE,to_node=NO_NODE; segmentp=FirstSegment(segments,nodep,1); do { index_t seg=IndexSegment(segments,segmentp); if(seg==relationp->from) { from_node=OtherNode(segmentp,relationp->from); from_way=segmentp->way; } if(seg==relationp->to) { to_node=OtherNode(segmentp,relationp->to); to_way=segmentp->way; } segmentp=NextSegment(segments,segmentp,relationp->via); } while(segmentp); printf("Relation %"Pindex_t"\n",item); printf(" from=%"Pindex_t" (segment) = %"Pindex_t" (way) = %"Pindex_t" (node)\n",relationp->from,from_way,from_node); printf(" via=%"Pindex_t" (node)\n",relationp->via); printf(" to=%"Pindex_t" (segment) = %"Pindex_t" (way) = %"Pindex_t" (node)\n",relationp->to,to_way,to_node); if(relationp->except) printf(" except=%02x (%s)\n",relationp->except,AllowedNameList(relationp->except)); } /*++++++++++++++++++++++++++++++++++++++ Print out the contents of an error log from the routing database (as plain text). ErrorLogs *errorlogs The set of error logs to use. index_t item The error log index to print. ++++++++++++++++++++++++++++++++++++++*/ static void print_errorlog(ErrorLogs *errorlogs,index_t item) { ErrorLog *errorlogp=LookupErrorLog(errorlogs,item,1); printf("Error Log %"Pindex_t"\n",item); if(itemfile.number_geo) { double latitude,longitude; GetErrorLogLatLong(errorlogs,item,errorlogp,&latitude,&longitude); printf(" latoffset=%d lonoffset=%d (latitude=%.6f longitude=%.6f)\n",errorlogp->latoffset,errorlogp->lonoffset,radians_to_degrees(latitude),radians_to_degrees(longitude)); } else printf(" No geographical information\n"); printf(" '%s'\n",LookupErrorLogString(errorlogs,item)); } /*++++++++++++++++++++++++++++++++++++++ Print out a header in OSM XML format. int coordcount If true then include a bounding box. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. ++++++++++++++++++++++++++++++++++++++*/ static void print_head_osm(int coordcount,double latmin,double latmax,double lonmin,double lonmax) { printf("\n"); printf("\n"); if(coordcount) printf(" \n", radians_to_degrees(latmin),radians_to_degrees(latmax),radians_to_degrees(lonmin),radians_to_degrees(lonmax)); } /*++++++++++++++++++++++++++++++++++++++ Print a region of the database in OSM XML format. Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. int option_no_super The option to print no super-segments. ++++++++++++++++++++++++++++++++++++++*/ static void print_region_osm(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations, double latmin,double latmax,double lonmin,double lonmax,int option_no_super) { ll_bin_t latminbin=latlong_to_bin(radians_to_latlong(latmin))-nodes->file.latzero; ll_bin_t latmaxbin=latlong_to_bin(radians_to_latlong(latmax))-nodes->file.latzero; ll_bin_t lonminbin=latlong_to_bin(radians_to_latlong(lonmin))-nodes->file.lonzero; ll_bin_t lonmaxbin=latlong_to_bin(radians_to_latlong(lonmax))-nodes->file.lonzero; ll_bin_t latb,lonb; index_t item,index1,index2; if(latminbin<0) latminbin=0; if(latmaxbin>nodes->file.latbins) latmaxbin=nodes->file.latbins-1; if(lonminbin<0) lonminbin=0; if(lonmaxbin>nodes->file.lonbins) lonmaxbin=nodes->file.lonbins-1; /* Loop through all of the nodes. */ for(latb=latminbin;latb<=latmaxbin;latb++) for(lonb=lonminbin;lonb<=lonmaxbin;lonb++) { ll_bin2_t llbin=lonb*nodes->file.latbins+latb; if(llbin<0 || llbin>(nodes->file.latbins*nodes->file.lonbins)) continue; index1=LookupNodeOffset(nodes,llbin); index2=LookupNodeOffset(nodes,llbin+1); for(item=index1;itemfile.latzero+latb)+off_to_latlong(nodep->latoffset)); double lon=latlong_to_radians(bin_to_latlong(nodes->file.lonzero+lonb)+off_to_latlong(nodep->lonoffset)); if(lat>latmin && latlonmin && lonlatmin && olatlonmin && olonoitem) if(!option_no_super || IsNormalSegment(segmentp)) print_segment_osm(segments,IndexSegment(segments,segmentp),ways); segmentp=NextSegment(segments,segmentp,item); } if(IsTurnRestrictedNode(nodep)) { index_t relindex=FindFirstTurnRelation1(relations,item); while(relindex!=NO_RELATION) { print_turn_relation_osm(relations,relindex,segments,nodes); relindex=FindNextTurnRelation1(relations,relindex); } } } } } } /*++++++++++++++++++++++++++++++++++++++ Print out the contents of a node from the routing database (in OSM XML format). Nodes *nodes The set of nodes to use. index_t item The node index to print. ++++++++++++++++++++++++++++++++++++++*/ static void print_node_osm(Nodes *nodes,index_t item) { Node *nodep=LookupNode(nodes,item,1); double latitude,longitude; int i; GetLatLong(nodes,item,nodep,&latitude,&longitude); if(nodep->allow==Transports_ALL && nodep->flags==0) printf(" \n",item+1,radians_to_degrees(latitude),radians_to_degrees(longitude)); else { printf(" \n",item+1,radians_to_degrees(latitude),radians_to_degrees(longitude)); if(nodep->flags & NODE_SUPER) printf(" \n"); if(nodep->flags & NODE_UTURN) printf(" \n"); if(nodep->flags & NODE_MINIRNDBT) printf(" \n"); if(nodep->flags & NODE_TURNRSTRCT) printf(" \n"); for(i=1;iallow & TRANSPORTS(i))) printf(" \n",TransportName(i)); printf(" \n"); } } /*++++++++++++++++++++++++++++++++++++++ Print out the contents of a segment from the routing database (as a way in OSM XML format). Segments *segments The set of segments to use. index_t item The segment index to print. Ways *ways The set of ways to use. ++++++++++++++++++++++++++++++++++++++*/ static void print_segment_osm(Segments *segments,index_t item,Ways *ways) { Segment *segmentp=LookupSegment(segments,item,1); Way *wayp=LookupWay(ways,segmentp->way,1); char *name=WayName(ways,wayp); int i; printf(" \n",item+1); if(IsOnewayTo(segmentp,segmentp->node1)) { printf(" \n",segmentp->node2+1); printf(" \n",segmentp->node1+1); } else { printf(" \n",segmentp->node1+1); printf(" \n",segmentp->node2+1); } if(IsSuperSegment(segmentp)) printf(" \n"); if(IsNormalSegment(segmentp)) printf(" \n"); printf(" \n",distance_to_km(DISTANCE(segmentp->distance))); if(wayp->type & Highway_OneWay) printf(" \n"); if(wayp->type & Highway_CycleBothWays) printf(" \n"); if(wayp->type & Highway_Roundabout) printf(" \n"); printf(" \n",HighwayName(HIGHWAY(wayp->type))); if(IsNormalSegment(segmentp) && *name) printf(" \n",ParseXML_Encode_Safe_XML(name)); for(i=1;iallow & TRANSPORTS(i)) printf(" \n",TransportName(i)); for(i=1;iprops & PROPERTIES(i)) printf(" \n",PropertyName(i)); if(wayp->speed) printf(" \n",speed_to_kph(wayp->speed)); if(wayp->weight) printf(" \n",weight_to_tonnes(wayp->weight)); if(wayp->height) printf(" \n",height_to_metres(wayp->height)); if(wayp->width) printf(" \n",width_to_metres(wayp->width)); if(wayp->length) printf(" \n",length_to_metres(wayp->length)); printf(" \n"); } /*++++++++++++++++++++++++++++++++++++++ Print out the contents of a turn relation from the routing database (in OSM XML format). Relations *relations The set of relations to use. index_t item The relation index to print. Segments *segments The set of segments to use. Nodes *nodes The set of nodes to use. ++++++++++++++++++++++++++++++++++++++*/ static void print_turn_relation_osm(Relations *relations,index_t item,Segments *segments,Nodes *nodes) { TurnRelation *relationp=LookupTurnRelation(relations,item,1); Segment *segmentp_from=LookupSegment(segments,relationp->from,1); Segment *segmentp_to =LookupSegment(segments,relationp->to ,2); double angle=TurnAngle(nodes,segmentp_from,segmentp_to,relationp->via); char *restriction; if(angle>150 || angle<-150) restriction="no_u_turn"; else if(angle>30) restriction="no_right_turn"; else if(angle<-30) restriction="no_left_turn"; else restriction="no_straight_on"; printf(" \n",item+1); printf(" \n"); printf(" \n",restriction); if(relationp->except) printf(" \n",AllowedNameList(relationp->except)); printf(" \n",relationp->from+1); printf(" \n",relationp->via+1); printf(" \n",relationp->to+1); printf(" \n"); } /*++++++++++++++++++++++++++++++++++++++ Print out a tail in OSM XML format. ++++++++++++++++++++++++++++++++++++++*/ static void print_tail_osm(void) { printf("\n"); } /*++++++++++++++++++++++++++++++++++++++ Print out the contents of a node from the routing database (in visualiser format). Nodes *nodes The set of nodes to use. index_t item The node index to print. ++++++++++++++++++++++++++++++++++++++*/ static void print_node_visualiser(Nodes *nodes,index_t item) { Node *nodep=LookupNode(nodes,item,1); double latitude,longitude; int i; GetLatLong(nodes,item,nodep,&latitude,&longitude); if(nodep->allow==Transports_ALL && nodep->flags==0) printf("<routino:node id='%"Pindex_t"' lat='%.7f' lon='%.7f' />\n",item+1,radians_to_degrees(latitude),radians_to_degrees(longitude)); else { printf("<routino:node id='%"Pindex_t"' lat='%.7f' lon='%.7f'>\n",item+1,radians_to_degrees(latitude),radians_to_degrees(longitude)); if(nodep->flags & NODE_SUPER) printf("   <tag k='routino:super' v='yes' />\n"); if(nodep->flags & NODE_UTURN) printf("   <tag k='routino:uturn' v='yes' />\n"); if(nodep->flags & NODE_MINIRNDBT) printf("   <tag k='junction' v='roundabout' />\n"); if(nodep->flags & NODE_TURNRSTRCT) printf("   <tag k='routino:turnrestriction' v='yes' />\n"); for(i=1;iallow & TRANSPORTS(i))) printf("   <tag k='%s' v='no' />\n",TransportName(i)); printf("</routino:node>\n"); } } /*++++++++++++++++++++++++++++++++++++++ Print out the contents of a segment from the routing database (as a way in visualiser format). Segments *segments The set of segments to use. index_t item The segment index to print. Ways *ways The set of ways to use. ++++++++++++++++++++++++++++++++++++++*/ static void print_segment_visualiser(Segments *segments,index_t item,Ways *ways) { Segment *segmentp=LookupSegment(segments,item,1); Way *wayp=LookupWay(ways,segmentp->way,1); char *name=WayName(ways,wayp); int i; printf("<routino:way id='%"Pindex_t"'>\n",item+1); if(IsOnewayTo(segmentp,segmentp->node1)) { printf("   <nd ref='%"Pindex_t"' />\n",segmentp->node2+1); printf("   <nd ref='%"Pindex_t"' />\n",segmentp->node1+1); } else { printf("   <nd ref='%"Pindex_t"' />\n",segmentp->node1+1); printf("   <nd ref='%"Pindex_t"' />\n",segmentp->node2+1); } if(IsSuperSegment(segmentp)) printf("   <tag k='routino:super' v='yes' />\n"); if(IsNormalSegment(segmentp)) printf("   <tag k='routino:normal' v='yes' />\n"); printf("   <tag k='routino:distance' v='%.3f km' />\n",distance_to_km(DISTANCE(segmentp->distance))); if(wayp->type & Highway_OneWay) printf("   <tag k='oneway' v='yes' />\n"); if(wayp->type & Highway_CycleBothWays) printf("   <tag k='cyclebothways' v='yes' />\n"); if(wayp->type & Highway_Roundabout) printf("   <tag k='roundabout' v='yes' />\n"); printf("   <tag k='highway' v='%s' />\n",HighwayName(HIGHWAY(wayp->type))); if(IsNormalSegment(segmentp) && *name) printf("   <tag k='name' v='%s' />\n",ParseXML_Encode_Safe_XML(name)); for(i=1;iallow & TRANSPORTS(i)) printf("   <tag k='%s' v='yes' />\n",TransportName(i)); for(i=1;iprops & PROPERTIES(i)) printf("   <tag k='%s' v='yes' />\n",PropertyName(i)); if(wayp->speed) printf("   <tag k='maxspeed' v='%d kph' />\n",speed_to_kph(wayp->speed)); if(wayp->weight) printf("   <tag k='maxweight' v='%.1f t' />\n",weight_to_tonnes(wayp->weight)); if(wayp->height) printf("   <tag k='maxheight' v='%.1f m' />\n",height_to_metres(wayp->height)); if(wayp->width) printf("   <tag k='maxwidth' v='%.1f m' />\n",width_to_metres(wayp->width)); if(wayp->length) printf("   <tag k='maxlength' v='%.1f m' />\n",length_to_metres(wayp->length)); printf("</routino:way>\n"); } /*++++++++++++++++++++++++++++++++++++++ Print out the contents of a turn relation from the routing database (in visualiser format). Relations *relations The set of relations to use. index_t item The relation index to print. Segments *segments The set of segments to use. Nodes *nodes The set of nodes to use. ++++++++++++++++++++++++++++++++++++++*/ static void print_turn_relation_visualiser(Relations *relations,index_t item,Segments *segments,Nodes *nodes) { TurnRelation *relationp=LookupTurnRelation(relations,item,1); Segment *segmentp_from=LookupSegment(segments,relationp->from,1); Segment *segmentp_to =LookupSegment(segments,relationp->to ,2); double angle=TurnAngle(nodes,segmentp_from,segmentp_to,relationp->via); char *restriction; if(angle>150 || angle<-150) restriction="no_u_turn"; else if(angle>30) restriction="no_right_turn"; else if(angle<-30) restriction="no_left_turn"; else restriction="no_straight_on"; printf("<routino:relation id='%"Pindex_t"'>\n",item+1); printf("   <tag k='type' v='restriction' />\n"); printf("   <tag k='restriction' v='%s'/>\n",restriction); if(relationp->except) printf("   <tag k='except' v='%s' />\n",AllowedNameList(relationp->except)); printf("   <member type='way' ref='%"Pindex_t"' role='from' />\n",relationp->from+1); printf("   <member type='node' ref='%"Pindex_t"' role='via' />\n",relationp->via+1); printf("   <member type='way' ref='%"Pindex_t"' role='to' />\n",relationp->to+1); printf("</routino:relation>\n"); } /*++++++++++++++++++++++++++++++++++++++ Print out an error log entry from the database (in visualiser format). ErrorLogs *errorlogs The set of error logs to use. index_t item The error log index to print. ++++++++++++++++++++++++++++++++++++++*/ static void print_errorlog_visualiser(ErrorLogs *errorlogs,index_t item) { char *string=LookupErrorLogString(errorlogs,item); printf("%s\n",ParseXML_Encode_Safe_XML(string)); } /*+ Conversion from time_t to date string (day of week). +*/ static const char* const weekdays[7]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; /*+ Conversion from time_t to date string (month of year). +*/ static const char* const months[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; /*++++++++++++++++++++++++++++++++++++++ Convert the time into an RFC 822 compliant date. char *RFC822Date Returns a pointer to a fixed string containing the date. time_t t The time. ++++++++++++++++++++++++++++++++++++++*/ static char *RFC822Date(time_t t) { static char value[32]; /* static allocation of return value */ char weekday[4]; char month[4]; struct tm *tim; tim=gmtime(&t); strcpy(weekday,weekdays[tim->tm_wday]); strcpy(month,months[tim->tm_mon]); /* Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 */ sprintf(value,"%3s, %02d %3s %4d %02d:%02d:%02d %s", weekday, tim->tm_mday, month, tim->tm_year+1900, tim->tm_hour, tim->tm_min, tim->tm_sec, "GMT" ); return(value); } /*++++++++++++++++++++++++++++++++++++++ Print out the usage information. int detail The level of detail to use: -1 = just version number, 0 = low detail, 1 = full details. const char *argerr The argument that gave the error (if there is one). const char *err Other error message (if there is one). ++++++++++++++++++++++++++++++++++++++*/ static void print_usage(int detail,const char *argerr,const char *err) { if(detail<0) { fprintf(stderr, "Routino version " ROUTINO_VERSION " " ROUTINO_URL ".\n" ); } if(detail>=0) { fprintf(stderr, "Usage: filedumper [--version]\n" " [--help]\n" " [--dir=] [--prefix=]\n" " [--statistics]\n" " [--visualiser --latmin= --latmax=\n" " --lonmin= --lonmax=\n" " --data=]\n" " [--dump [--node= ...]\n" " [--segment= ...]\n" " [--way= ...]\n" " [--turn-relation= ...]\n" " [--errorlog= ...]]\n" " [--dump-osm [--no-super]\n" " [--latmin= --latmax=\n" " --lonmin= --lonmax=]]\n" " [--dump-visualiser [--data=node]\n" " [--data=segment]\n" " [--data=turn-relation]\n" " [--data=errorlog]]\n"); if(argerr) fprintf(stderr, "\n" "Error with command line parameter: %s\n",argerr); if(err) fprintf(stderr, "\n" "Error: %s\n",err); } if(detail==1) fprintf(stderr, "\n" "--version Print the version of Routino.\n" "\n" "--help Prints this information.\n" "\n" "--dir= The directory containing the routing database.\n" "--prefix= The filename prefix for the routing database.\n" "\n" "--statistics Print statistics about the routing database.\n" "\n" "--visualiser Extract selected data from the routing database:\n" " --latmin= * the minimum latitude (degrees N).\n" " --latmax= * the maximum latitude (degrees N).\n" " --lonmin= * the minimum longitude (degrees E).\n" " --lonmax= * the maximum longitude (degrees E).\n" " --data= * the type of data to select.\n" "\n" " can be selected from:\n" " junctions = segment count at each junction.\n" " super = super-node and super-segments.\n" " waytype-* = segments of oneway, cyclebothways or roundabout type.\n" " highway-* = segments of the specified highway type.\n" " transport-* = segments allowing the specified transport type.\n" " barrier-* = nodes disallowing the specified transport type.\n" " turns = turn restrictions.\n" " speed = speed limits.\n" " weight = weight limits.\n" " height = height limits.\n" " width = width limits.\n" " length = length limits.\n" " property-* = segments with the specified property.\n" " errorlogs = errors logged during parsing.\n" "\n" "--dump Dump selected contents of the database.\n" " --node= * the node with the selected index.\n" " --segment= * the segment with the selected index.\n" " --way= * the way with the selected index.\n" " --turn-relation= * the turn relation with the selected index.\n" " --errorlog= * the error log with the selected index.\n" " Use 'all' instead of a number to get all of them.\n" "\n" "--dump-osm Dump all or part of the database as an XML file.\n" " --no-super * exclude the super-segments.\n" " --latmin= * the minimum latitude (degrees N).\n" " --latmax= * the maximum latitude (degrees N).\n" " --lonmin= * the minimum longitude (degrees E).\n" " --lonmax= * the maximum longitude (degrees E).\n" "\n" "--dump-visualiser Dump selected contents of the database in HTML.\n" " --data=node * the node with the selected index.\n" " --data=segment * the segment with the selected index.\n" " --data=turn-relation * the turn relation with the selected index.\n" " --data=errorlog * the error log with the selected index.\n"); exit(!detail); } routino-3.2/src/relationsx.h 644 233 144 11114 12563633052 11400 0/*************************************** A header file for the extended Relations structure. Part of the Routino routing software. ******************/ /****************** This file Copyright 2010-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef RELATIONSX_H #define RELATIONSX_H /*+ To stop multiple inclusions. +*/ #include #include "types.h" #include "typesx.h" /* Data structures */ /*+ An extended structure containing a single route relation. +*/ struct _RouteRelX { relation_t id; /*+ The relation identifier. +*/ transports_t routes; /*+ The types of transports that that this relation is for. +*/ }; /*+ An extended structure containing a single turn restriction relation. +*/ struct _TurnRelX { relation_t id; /*+ The relation identifier. +*/ way_t from; /*+ The id of the starting way; initially the OSM value, later the SegmentX index. +*/ node_t via; /*+ The id of the via node; initially the OSM value, later the NodeX index. +*/ way_t to; /*+ The id of the ending way; initially the OSM value, later the SegmentX index. +*/ TurnRestriction restriction; /*+ The type of restriction. +*/ transports_t except; /*+ The types of transports that that this relation does not apply to. +*/ }; /*+ A structure containing a set of relations. +*/ struct _RelationsX { /* Route relations */ char *rrfilename; /*+ The name of the intermediate file (for the RouteRelX). +*/ char *rrfilename_tmp; /*+ The name of the temporary file (for the RouteRelX). +*/ int rrfd; /*+ The file descriptor of the open file (for the RouteRelX). +*/ index_t rrnumber; /*+ The number of extended route relations. +*/ index_t rrknumber; /*+ The number of extended route relations kept for next time. +*/ relation_t *rridata; /*+ The extended relation IDs (sorted by ID). +*/ offset_t *rrodata; /*+ The offset of the route relation in the file (used for error log). +*/ /* Turn restriction relations */ char *trfilename; /*+ The name of the intermediate file (for the TurnRelX). +*/ char *trfilename_tmp; /*+ The name of the temporary file (for the TurnRelX). +*/ int trfd; /*+ The file descriptor of the temporary file (for the TurnRelX). +*/ index_t trnumber; /*+ The number of extended turn restriction relations. +*/ index_t trknumber; /*+ The number of extended turn relations kept for next time. +*/ relation_t *tridata; /*+ The extended relation IDs (sorted by ID). +*/ }; /* Functions in relationsx.c */ RelationsX *NewRelationList(int append,int readonly); void FreeRelationList(RelationsX *relationsx,int keep); void AppendRouteRelationList(RelationsX* relationsx,relation_t id, transports_t routes, node_t *nodes,int nnodes, way_t *ways,int nways, relation_t *relations,int nrelations); void AppendTurnRelationList(RelationsX* relationsx,relation_t id, way_t from,way_t to,node_t via, TurnRestriction restriction,transports_t except); void FinishRelationList(RelationsX *relationsx); index_t IndexRouteRelX(RelationsX *relationsx,relation_t id); index_t IndexTurnRelX(RelationsX *relationsx,relation_t id); void SortRelationList(RelationsX *relationsx); void ProcessRouteRelations(RelationsX *relationsx,WaysX *waysx,int keep); void ProcessTurnRelations(RelationsX *relationsx,NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx,int keep); void RemovePrunedTurnRelations(RelationsX *relationsx,NodesX *nodesx); void SortTurnRelationListGeographically(RelationsX *relationsx,NodesX *nodesx,SegmentsX *segmentsx,int convert); void SaveRelationList(RelationsX* relationsx,const char *filename); #endif /* RELATIONSX_H */ routino-3.2/src/profiles.h 644 233 144 6050 12563633051 11015 0/*************************************** A header file for the profiles. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef PROFILES_H #define PROFILES_H /*+ To stop multiple inclusions. +*/ #include "types.h" /* Data structures */ /*+ A data structure to hold a transport type profile. +*/ typedef struct _Profile { char *name; /*+ The name of the profile. +*/ /* The parts that are read from the XML file */ Transport transport; /*+ The type of transport. +*/ score_t highway[Highway_Count]; /*+ A floating point preference for travel on the highway. +*/ speed_t speed[Highway_Count]; /*+ The maximum speed on each type of highway. +*/ score_t props[Property_Count]; /*+ A floating point preference for ways with this attribute. +*/ int oneway; /*+ A flag to indicate if one-way restrictions apply. +*/ int turns; /*+ A flag to indicate if turn restrictions apply. +*/ weight_t weight; /*+ The minimum weight of the route. +*/ height_t height; /*+ The minimum height of vehicles on the route. +*/ width_t width; /*+ The minimum width of vehicles on the route. +*/ length_t length; /*+ The minimum length of vehicles on the route. +*/ /* The derived parts */ transports_t allow; /*+ The type of transport expressed as a bitmask. +*/ score_t props_yes[Property_Count]; /*+ A floating point preference for ways with this attribute. +*/ score_t props_no [Property_Count]; /*+ A floating point preference for ways without this attribute. +*/ score_t max_pref; /*+ The maximum preference for any highway type. +*/ speed_t max_speed; /*+ The maximum speed for any highway type. +*/ } Profile; /* Functions in profiles.c */ int ParseXMLProfiles(const char *filename,const char *name,int all); char **GetProfileNames(void); Profile *GetProfile(const char *name); void FreeXMLProfiles(void); int UpdateProfile(Profile *profile,Ways *ways); void PrintProfile(const Profile *profile); void PrintProfilesXML(void); void PrintProfilesJSON(void); void PrintProfilesPerl(void); #endif /* PROFILES_H */ routino-3.2/src/results.h 644 233 144 11002 12633543133 10703 0/*************************************** A header file for the results. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef RESULTS_H #define RESULTS_H /*+ To stop multiple inclusions. +*/ #include #include "types.h" /* Constants */ /* A fake result pointer. */ #define NO_RESULT ((Result*)~0) /*+ A result is not currently queued. +*/ #define NOT_QUEUED ((uint32_t)0) /* Data structures */ typedef struct _Result Result; /*+ The result for a node. +*/ struct _Result { index_t node; /*+ The node for which this result applies. +*/ index_t segment; /*+ The segmemt used to get to the node for which this result applies. +*/ Result *prev; /*+ The previous result following the best path to get to this node via the segment. +*/ Result *next; /*+ The next result following the best path from this node that was reached via the segment. +*/ score_t score; /*+ The best actual weighted distance or duration score from the start to the node. +*/ score_t sortby; /*+ The best possible weighted distance or duration score from the start to the finish. +*/ uint32_t queued; /*+ The position of this result in the queue. +*/ Result *hashnext; /*+ The next result in the linked list for this hash bin. +*/ }; /*+ A list of results. +*/ typedef struct _Results { uint32_t nbins; /*+ The number of bins in the has table. +*/ uint32_t mask; /*+ A bit mask to select the bottom log2(nbins) bits. +*/ uint32_t number; /*+ The total number of occupied results. +*/ uint8_t ncollisions; /*+ The number of results allowed in each hash bin. +*/ uint8_t *count; /*+ An array of nbins counters of results in each hash bin. +*/ Result **point; /*+ An array of nbins linked lists of results for one hash bin. +*/ uint32_t ndata1; /*+ The size of the first dimension of the 'data' array. +*/ uint32_t ndata2; /*+ The size of the second dimension of the 'data' array. +*/ uint32_t nallocdata1; /*+ The amount of allocated space in the first dimension of the 'data' array. +*/ Result **data; /*+ An array of arrays containing the actual results, the first dimension is reallocated but the second dimension is not. Most importantly pointers into the real data don't change as more space is allocated (since realloc is not being used). +*/ index_t start_node; /*+ The start node. +*/ index_t prev_segment; /*+ The previous segment to get to the start node (if any). +*/ index_t finish_node; /*+ The finish node. +*/ index_t last_segment; /*+ The last segment (to arrive at the finish node). +*/ waypoint_t start_waypoint; /*+ The number of the starting waypoint. +*/ waypoint_t finish_waypoint; /*+ The number of the finish waypoint. +*/ } Results; /* Forward definition for opaque type */ typedef struct _Queue Queue; /* Results functions in results.c */ Results *NewResultsList(uint8_t log2bins); void ResetResultsList(Results *results); void FreeResultsList(Results *results); Result *InsertResult(Results *results,index_t node,index_t segment); Result *FindResult(Results *results,index_t node,index_t segment); Result *FirstResult(Results *results); Result *NextResult(Results *results,Result *result); /* Queue functions in queue.c */ Queue *NewQueueList(uint8_t log2bins); void ResetQueueList(Queue *queue); void FreeQueueList(Queue *queue); void InsertInQueue(Queue *queue,Result *result,score_t score); Result *PopFromQueue(Queue *queue); #endif /* RESULTS_H */ routino-3.2/src/Makefile 644 233 144 21017 12602551767 10510 0# Source code Makefile # # Part of the Routino routing software. # # This file Copyright 2008-2015 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # All configuration is in the top-level Makefile.conf include ../Makefile.conf # Sub-directories and sub-makefiles SUBDIRS=xml test # Compilation targets DEPDIR=.deps C=$(wildcard *.c) D=$(wildcard $(DEPDIR)/*.d) EXE=planetsplitter$(.EXE) planetsplitter-slim$(.EXE) router$(.EXE) router-slim$(.EXE) \ filedumperx$(.EXE) filedumper$(.EXE) filedumper-slim$(.EXE) \ router+lib$(.EXE) router+lib-slim$(.EXE) ifneq ($(HOST),MINGW) LIB =libroutino.so libroutino-slim.so LIB+=libroutino.so.$(SOVERSION) libroutino-slim.so.$(SOVERSION) LIB+=libroutino.so.$(LIBVERSION) libroutino-slim.so.$(LIBVERSION) else LIB =routino.dll routino-slim.dll LIB+=routino.def routino-slim.def LIB+=routino.lib routino-slim.lib endif INC=routino.h ifneq ($(HOST),MINGW) LINK_LIB=libroutino.so LINK_SLIM_LIB=libroutino-slim.so else LINK_LIB=routino.dll LINK_SLIM_LIB=routino-slim.dll endif ######## all: all-local for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done all-local: all-exe all-lib all-exe : $(EXE) all-lib : $(LIB) ######## PLANETSPLITTER_OBJ=planetsplitter.o \ nodesx.o segmentsx.o waysx.o relationsx.o superx.o prunex.o \ ways.o types.o \ files.o logging.o logerror.o errorlogx.o \ results.o queue.o sorting.o \ xmlparse.o tagging.o \ uncompress.o osmxmlparse.o osmpbfparse.o osmo5mparse.o osmparser.o ifeq ($(HOST),MINGW) PLANETSPLITTER_OBJ+=mman-win32.o endif planetsplitter$(.EXE) : $(PLANETSPLITTER_OBJ) $(LD) $^ -o $@ $(LDFLAGS) ######## PLANETSPLITTER_SLIM_OBJ=planetsplitter-slim.o \ nodesx-slim.o segmentsx-slim.o waysx-slim.o relationsx-slim.o superx-slim.o prunex-slim.o \ ways.o types.o \ files.o logging.o logerror-slim.o errorlogx-slim.o \ results.o queue.o sorting.o \ xmlparse.o tagging.o \ uncompress.o osmxmlparse.o osmpbfparse.o osmo5mparse.o osmparser.o ifeq ($(HOST),MINGW) PLANETSPLITTER_SLIM_OBJ+=mman-win32.o endif planetsplitter-slim$(.EXE) : $(PLANETSPLITTER_SLIM_OBJ) $(LD) $^ -o $@ $(LDFLAGS) ######## ROUTER_OBJ=router.o \ nodes.o segments.o ways.o relations.o types.o fakes.o \ optimiser.o output.o \ files.o logging.o profiles.o xmlparse.o \ results.o queue.o translations.o ifeq ($(HOST),MINGW) ROUTER_OBJ+=mman-win32.o endif router$(.EXE) : $(ROUTER_OBJ) $(LD) $^ -o $@ $(LDFLAGS) ######## ROUTER_SLIM_OBJ=router-slim.o \ nodes-slim.o segments-slim.o ways-slim.o relations-slim.o types.o fakes-slim.o \ optimiser-slim.o output-slim.o \ files.o logging.o profiles.o xmlparse.o \ results.o queue.o translations.o ifeq ($(HOST),MINGW) ROUTER_SLIM_OBJ+=mman-win32.o endif router-slim$(.EXE) : $(ROUTER_SLIM_OBJ) $(LD) $^ -o $@ $(LDFLAGS) ######## FILEDUMPERX_OBJ=filedumperx.o \ files.o logging.o ifeq ($(HOST),MINGW) FILEDUMPERX_OBJ+=mman-win32.o endif filedumperx$(.EXE) : $(FILEDUMPERX_OBJ) $(LD) $^ -o $@ $(LDFLAGS) ######## FILEDUMPER_OBJ=filedumper.o \ nodes.o segments.o ways.o relations.o types.o fakes.o errorlog.o \ visualiser.o \ files.o logging.o xmlparse.o ifeq ($(HOST),MINGW) FILEDUMPER_OBJ+=mman-win32.o endif filedumper$(.EXE) : $(FILEDUMPER_OBJ) $(LD) $^ -o $@ $(LDFLAGS) ######## FILEDUMPER_SLIM_OBJ=filedumper-slim.o \ nodes-slim.o segments-slim.o ways-slim.o relations-slim.o types.o fakes-slim.o errorlog-slim.o \ visualiser-slim.o \ files.o logging.o xmlparse.o ifeq ($(HOST),MINGW) FILEDUMPER_SLIM_OBJ+=mman-win32.o endif filedumper-slim$(.EXE) : $(FILEDUMPER_SLIM_OBJ) $(LD) $^ -o $@ $(LDFLAGS) ######## %.o : %.c -@[ -d $(DEPDIR) ] || mkdir $(DEPDIR) $(CC) -c $(CFLAGS) -DSLIM=0 -DROUTINO_DATADIR=\"$(datadir)\" $< -o $@ -MMD -MP -MF $(addprefix $(DEPDIR)/,$(addsuffix .d,$(basename $@))) %-slim.o : %.c -@[ -d $(DEPDIR) ] || mkdir $(DEPDIR) $(CC) -c $(CFLAGS) -DSLIM=1 -DROUTINO_DATADIR=\"$(datadir)\" $< -o $@ -MMD -MP -MF $(addprefix $(DEPDIR)/,$(addsuffix .d,$(basename $@))) ######## ROUTER_LIB_OBJ=router+lib.o router+lib$(.EXE) : $(ROUTER_LIB_OBJ) $(LINK_LIB) $(LD) $^ -o $@ $(LDFLAGS) $(LDFLAGS_LDSO) router+lib-slim$(.EXE) : $(ROUTER_LIB_OBJ) $(LINK_SLIM_LIB) $(LD) $^ -o $@ $(LDFLAGS) $(LDFLAGS_LDSO) ######## LIBROUTINO_OBJ=routino-lib.o \ nodes-lib.o segments-lib.o ways-lib.o relations-lib.o types-lib.o fakes-lib.o \ optimiser-lib.o output-lib.o \ files-lib.o profiles-lib.o xmlparse-lib.o \ results-lib.o queue-lib.o translations-lib.o ifeq ($(HOST),MINGW) LIBROUTINO_OBJ+=mman-win32.o endif libroutino.so.$(LIBVERSION) : $(LIBROUTINO_OBJ) $(LD) $^ -o $@ $(LDFLAGS) $(LDFLAGS_LIB) $(LDFLAGS_SONAME) libroutino.so.$(SOVERSION) : libroutino.so.$(LIBVERSION) ln -sf $< $@ libroutino.so : libroutino.so.$(LIBVERSION) ln -sf $< $@ routino.dll : $(LIBROUTINO_OBJ) $(LD) $^ -o $@ $(LDFLAGS) $(LDFLAGS_LIB) routino.def : routino-lib.o dlltool -v --output-def $@ $< routino.lib : routino.dll routino.def dlltool -v --dllname routino.dll --def routino.def --output-lib $@ ######## LIBROUTINO_SLIM_OBJ=routino-slim-lib.o \ nodes-slim-lib.o segments-slim-lib.o ways-slim-lib.o relations-slim-lib.o types-lib.o fakes-slim-lib.o \ optimiser-slim-lib.o output-slim-lib.o \ files-lib.o profiles-lib.o xmlparse-lib.o \ results-lib.o queue-lib.o translations-lib.o ifeq ($(HOST),MINGW) LIBROUTINO_SLIM_OBJ+=mman-win32.o endif libroutino-slim.so.$(LIBVERSION) : $(LIBROUTINO_SLIM_OBJ) $(LD) $^ -o $@ $(LDFLAGS) $(LDFLAGS_LIB) $(LDFLAGS_SLIM_SONAME) libroutino-slim.so.$(SOVERSION) : libroutino-slim.so.$(LIBVERSION) ln -sf $< $@ libroutino-slim.so : libroutino-slim.so.$(LIBVERSION) ln -sf $< $@ routino-slim.dll : $(LIBROUTINO_SLIM_OBJ) $(LD) $^ -o $@ $(LDFLAGS) $(LDFLAGS_LIB) routino-slim.def : routino-slim-lib.o dlltool -v --output-def $@ $< routino-slim.lib : routino-slim.dll routino-slim.def dlltool -v --dllname routino-slim.dll --def routino-slim.def --output-lib $@ ######## %-lib.o : %.c -@[ -d $(DEPDIR) ] || mkdir $(DEPDIR) $(CC) -c $(CFLAGS) $(CFLAGS_LIB) -DSLIM=0 -DLIBROUTINO $< -o $@ -MMD -MP -MF $(addprefix $(DEPDIR)/,$(addsuffix .d,$(basename $@))) %-slim-lib.o : %.c -@[ -d $(DEPDIR) ] || mkdir $(DEPDIR) $(CC) -c $(CFLAGS) $(CFLAGS_LIB) -DSLIM=1 -DLIBROUTINO $< -o $@ -MMD -MP -MF $(addprefix $(DEPDIR)/,$(addsuffix .d,$(basename $@))) ######## test: test-local for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done test-local: ######## install: install-local for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done install-local: all-local @[ -d $(DESTDIR)$(bindir) ] || mkdir -p $(DESTDIR)$(bindir) @for file in $(EXE); do \ if [ -f $$file ]; then \ echo cp $$file $(DESTDIR)$(bindir) ;\ cp -f $$file $(DESTDIR)$(bindir) ;\ fi ;\ done @[ -d $(DESTDIR)$(incdir) ] || mkdir -p $(DESTDIR)$(incdir) @for file in $(INC); do \ if [ -f $$file ]; then \ echo cp $$file $(DESTDIR)$(incdir) ;\ cp -f $$file $(DESTDIR)$(incdir) ;\ fi ;\ done @[ -d $(DESTDIR)$(libdir) ] || mkdir -p $(DESTDIR)$(libdir) @for file in $(LIB); do \ if [ -f $$file ]; then \ echo cp $$file $(DESTDIR)$(libdir) ;\ cp -df $$file $(DESTDIR)$(libdir) ;\ fi ;\ done ######## clean: clean-local for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done clean-local: rm -f *~ rm -f *.o rm -f $(EXE) rm -f $(LIB) rm -f $(D) rm -fr $(DEPDIR) rm -f core rm -f *.gcda *.gcno *.gcov gmon.out ######## distclean: distclean-local for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done distclean-local: clean-local ######## include $(D) ######## .PHONY:: all test install clean distclean .PHONY:: all-local test-local install-local clean-local distclean-local routino-3.2/src/relations.h 644 233 144 10517 12550223461 11211 0/*************************************** A header file for the relations. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef RELATIONS_H #define RELATIONS_H /*+ To stop multiple inclusions. +*/ #include #include #include "types.h" #include "cache.h" #include "files.h" #include "profiles.h" /* Data structures */ /*+ A structure containing a single relation. +*/ struct _TurnRelation { index_t from; /*+ The segment that the path comes from. +*/ index_t via; /*+ The node that the path goes via. +*/ index_t to; /*+ The segment that the path goes to. +*/ transports_t except; /*+ The types of transports that that this relation does not apply to. +*/ }; /*+ A structure containing the header from the file. +*/ typedef struct _RelationsFile { index_t trnumber; /*+ The number of turn relations in total. +*/ } RelationsFile; /*+ A structure containing a set of relations (and pointers to mmap file). +*/ struct _Relations { RelationsFile file; /*+ The header data from the file. +*/ #if !SLIM char *data; /*+ The memory mapped data. +*/ TurnRelation *turnrelations; /*+ An array of nodes. +*/ #else int fd; /*+ The file descriptor for the file. +*/ offset_t troffset; /*+ The offset of the turn relations in the file. +*/ TurnRelation cached[2]; /*+ Two cached relations read from the file in slim mode. +*/ TurnRelationCache *cache; /*+ A RAM cache of turn relations read from the file. +*/ #endif index_t via_start; /*+ The first via node in the file. +*/ index_t via_end; /*+ The last via node in the file. +*/ }; /* Functions in relations.c */ Relations *LoadRelationList(const char *filename); void DestroyRelationList(Relations *relations); index_t FindFirstTurnRelation1(Relations *relations,index_t via); index_t FindNextTurnRelation1(Relations *relations,index_t current); index_t FindFirstTurnRelation2(Relations *relations,index_t via,index_t from); index_t FindNextTurnRelation2(Relations *relations,index_t current); int IsTurnAllowed(Relations *relations,index_t index,index_t via,index_t from,index_t to,transports_t transport); /* Macros and inline functions */ #if !SLIM /*+ Return a Relation pointer given a set of relations and an index. +*/ #define LookupTurnRelation(xxx,yyy,ppp) (&(xxx)->turnrelations[yyy]) #else /* Prototypes */ static inline TurnRelation *LookupTurnRelation(Relations *relations,index_t index,int position); CACHE_NEWCACHE_PROTO(TurnRelation) CACHE_DELETECACHE_PROTO(TurnRelation) CACHE_FETCHCACHE_PROTO(TurnRelation) CACHE_INVALIDATECACHE_PROTO(TurnRelation) /* Data type */ CACHE_STRUCTURE(TurnRelation) /* Inline functions */ CACHE_NEWCACHE(TurnRelation) CACHE_DELETECACHE(TurnRelation) CACHE_FETCHCACHE(TurnRelation) CACHE_INVALIDATECACHE(TurnRelation) /*++++++++++++++++++++++++++++++++++++++ Find the Relation information for a particular relation. TurnRelation *LookupTurnRelation Returns a pointer to the cached relation information. Relations *relations The set of relations to use. index_t index The index of the relation. int position The position in the cache to store this result. ++++++++++++++++++++++++++++++++++++++*/ static inline TurnRelation *LookupTurnRelation(Relations *relations,index_t index,int position) { relations->cached[position-1]=*FetchCachedTurnRelation(relations->cache,index,relations->fd,relations->troffset); return(&relations->cached[position-1]); } #endif #endif /* RELATIONS_H */ routino-3.2/src/errorlog.c 644 233 144 12674 12420524666 11054 0/*************************************** Error log data type functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2013 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include "types.h" #include "errorlog.h" #include "files.h" /*++++++++++++++++++++++++++++++++++++++ Load in an error log list from a file. ErrorLogs *LoadErrorLogs Returns the error log list. const char *filename The name of the file to load. ++++++++++++++++++++++++++++++++++++++*/ ErrorLogs *LoadErrorLogs(const char *filename) { ErrorLogs *errorlogs; errorlogs=(ErrorLogs*)malloc(sizeof(ErrorLogs)); #if !SLIM errorlogs->data=MapFile(filename); /* Copy the ErrorLogsFile header structure from the loaded data */ errorlogs->file=*((ErrorLogsFile*)errorlogs->data); /* Set the pointers in the ErrorLogs structure. */ errorlogs->offsets =(index_t* )(errorlogs->data+sizeof(ErrorLogsFile)); errorlogs->errorlogs_geo =(ErrorLog*)(errorlogs->data+sizeof(ErrorLogsFile)+(errorlogs->file.latbins*errorlogs->file.lonbins+1)*sizeof(index_t)); errorlogs->errorlogs_nongeo=(ErrorLog*)(errorlogs->data+sizeof(ErrorLogsFile)+(errorlogs->file.latbins*errorlogs->file.lonbins+1)*sizeof(index_t)+errorlogs->file.number_geo*sizeof(ErrorLog)); errorlogs->strings =(char* )(errorlogs->data+sizeof(ErrorLogsFile)+(errorlogs->file.latbins*errorlogs->file.lonbins+1)*sizeof(index_t)+errorlogs->file.number*sizeof(ErrorLog)); #else errorlogs->fd=SlimMapFile(filename); /* Copy the ErrorLogsFile header structure from the loaded data */ SlimFetch(errorlogs->fd,&errorlogs->file,sizeof(ErrorLogsFile),0); errorlogs->offsetsoffset =sizeof(ErrorLogsFile); errorlogs->errorlogsoffset_geo =sizeof(ErrorLogsFile)+(errorlogs->file.latbins*errorlogs->file.lonbins+1)*sizeof(index_t); errorlogs->errorlogsoffset_nongeo=sizeof(ErrorLogsFile)+(errorlogs->file.latbins*errorlogs->file.lonbins+1)*sizeof(index_t)+errorlogs->file.number_geo*sizeof(ErrorLog); errorlogs->stringsoffset =sizeof(ErrorLogsFile)+(errorlogs->file.latbins*errorlogs->file.lonbins+1)*sizeof(index_t)+errorlogs->file.number*sizeof(ErrorLog); #endif return(errorlogs); } /*++++++++++++++++++++++++++++++++++++++ Destroy the node list. ErrorLogs *errorlogs The node list to destroy. ++++++++++++++++++++++++++++++++++++++*/ void DestroyErrorLogs(ErrorLogs *errorlogs) { #if !SLIM errorlogs->data=UnmapFile(errorlogs->data); #else errorlogs->fd=SlimUnmapFile(errorlogs->fd); #endif free(errorlogs); } /*++++++++++++++++++++++++++++++++++++++ Get the latitude and longitude associated with an error log. ErrorLogs *errorlogs The set of error logs to use. index_t index The errorlog index. ErrorLog *errorlogp A pointer to the error log. double *latitude Returns the latitude. double *longitude Returns the logitude. ++++++++++++++++++++++++++++++++++++++*/ void GetErrorLogLatLong(ErrorLogs *errorlogs,index_t index,ErrorLog *errorlogp,double *latitude,double *longitude) { ll_bin_t latbin,lonbin; ll_bin2_t bin=-1; ll_bin2_t start,end,mid; index_t offset; /* Binary search - search key nearest match below is required. * * # <- start | Check mid and move start or end if it doesn't match * # | * # | A lower bound match is wanted we can set end=mid-1 or * # <- mid | start=mid because we know that mid doesn't match. * # | * # | Eventually either end=start or end=start+1 and one of * # <- end | start or end is the wanted one. */ /* Search for offset */ start=0; end=errorlogs->file.lonbins*errorlogs->file.latbins; do { mid=(start+end)/2; /* Choose mid point */ offset=LookupErrorLogOffset(errorlogs,mid); if(offsetindex) /* Mid point is too high */ end=mid?(mid-1):mid; else /* Mid point is correct */ {bin=mid;break;} } while((end-start)>1); if(bin==-1) { offset=LookupErrorLogOffset(errorlogs,end); if(offset>index) bin=start; else bin=end; } while(bin<=(errorlogs->file.lonbins*errorlogs->file.latbins) && LookupErrorLogOffset(errorlogs,bin)==LookupErrorLogOffset(errorlogs,bin+1)) bin++; latbin=bin%errorlogs->file.latbins; lonbin=bin/errorlogs->file.latbins; /* Return the values */ if(errorlogp==NULL) errorlogp=LookupErrorLog(errorlogs,index,2); *latitude =latlong_to_radians(bin_to_latlong(errorlogs->file.latzero+latbin)+off_to_latlong(errorlogp->latoffset)); *longitude=latlong_to_radians(bin_to_latlong(errorlogs->file.lonzero+lonbin)+off_to_latlong(errorlogp->lonoffset)); } routino-3.2/src/osmpbfparse.c 644 233 144 75300 12563633051 11532 0/*************************************** A simple osm-specific PBF parser where the structure is hard-coded. Part of the Routino routing software. ******************/ /****************** This file Copyright 2012-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #if defined(_MSC_VER) #include #include #define read(fd,address,length) _read(fd,address,(unsigned int)(length)) #define ssize_t SSIZE_T #else #include #endif #include #include #include #if defined(USE_GZIP) && USE_GZIP #include #endif #include "osmparser.h" #include "tagging.h" #include "logging.h" /* Inside a BlobHeader message */ #define PBF_VAL_BLOBHEADER_TYPE 1 #define PBF_VAL_BLOBHEADER_SIZE 3 /* Inside a Blob message */ #define PBF_VAL_BLOB_RAW_DATA 1 #define PBF_VAL_BLOB_RAW_SIZE 2 #define PBF_VAL_BLOB_ZLIB_DATA 3 /* Inside a HeaderBlock message */ #define PBF_VAL_REQUIRED_FEATURES 4 #define PBF_VAL_OPTIONAL_FEATURES 5 /* Inside a PrimitiveBlock message */ #define PBF_VAL_STRING_TABLE 1 #define PBF_VAL_PRIMITIVE_GROUP 2 #define PBF_VAL_GRANULARITY 17 #define PBF_VAL_LAT_OFFSET 19 #define PBF_VAL_LON_OFFSET 20 /* Inside a PrimitiveGroup message */ #define PBF_VAL_NODES 1 #define PBF_VAL_DENSE_NODES 2 #define PBF_VAL_WAYS 3 #define PBF_VAL_RELATIONS 4 /* Inside a StringTable message */ #define PBF_VAL_STRING 1 /* Inside a Node message */ #define PBF_VAL_NODE_ID 1 #define PBF_VAL_NODE_KEYS 2 #define PBF_VAL_NODE_VALS 3 #define PBF_VAL_NODE_LAT 8 #define PBF_VAL_NODE_LON 9 /* Inside a DenseNode message */ #define PBF_VAL_DENSE_NODE_ID 1 #define PBF_VAL_DENSE_NODE_LAT 8 #define PBF_VAL_DENSE_NODE_LON 9 #define PBF_VAL_DENSE_NODE_KEYS_VALS 10 /* Inside a Way message */ #define PBF_VAL_WAY_ID 1 #define PBF_VAL_WAY_KEYS 2 #define PBF_VAL_WAY_VALS 3 #define PBF_VAL_WAY_REFS 8 /* Inside a Relation message */ #define PBF_VAL_RELATION_ID 1 #define PBF_VAL_RELATION_KEYS 2 #define PBF_VAL_RELATION_VALS 3 #define PBF_VAL_RELATION_ROLES 8 #define PBF_VAL_RELATION_MEMIDS 9 #define PBF_VAL_RELATION_TYPES 10 /* Errors */ #define PBF_EOF 0 #define PBF_ERROR_UNEXP_EOF 100 #define PBF_ERROR_BLOB_HEADER_LEN 101 #define PBF_ERROR_BLOB_LEN 102 #define PBF_ERROR_NOT_OSM 103 #define PBF_ERROR_BLOB_BOTH 104 #define PBF_ERROR_BLOB_NEITHER 105 #define PBF_ERROR_NO_GZIP 106 #define PBF_ERROR_GZIP_INIT 107 #define PBF_ERROR_GZIP_INFLATE 108 #define PBF_ERROR_GZIP_WRONG_LEN 109 #define PBF_ERROR_GZIP_END 110 #define PBF_ERROR_UNSUPPORTED 111 #define PBF_ERROR_TOO_MANY_GROUPS 112 /* Local parsing variables (re-initialised for each file) */ static uint64_t byteno; static uint64_t nnodes,nways,nrelations; static uint32_t buffer_allocated,zbuffer_allocated; static unsigned char *buffer=NULL,*zbuffer=NULL; static unsigned char *buffer_ptr,*buffer_end; static int string_table_length=0,string_table_allocated=0; static unsigned char **string_table=NULL; static uint32_t *string_table_string_lengths=NULL; static int32_t granularity=100; static int64_t lat_offset=0,lon_offset=0; #define LENGTH_32M (32*1024*1024) /*++++++++++++++++++++++++++++++++++++++ Refill the data buffer and set the pointers. int buffer_refill Return 0 if everything is OK or 1 for EOF. int fd The file descriptor to read from. uint32_t bytes The number of bytes to read. ++++++++++++++++++++++++++++++++++++++*/ static inline int buffer_refill(int fd,uint32_t bytes) { ssize_t n; if(bytes>buffer_allocated) buffer=(unsigned char *)realloc(buffer,buffer_allocated=bytes); byteno+=bytes; buffer_ptr=buffer; buffer_end=buffer; do { n=read(fd,buffer_end,bytes); if(n<=0) return(1); buffer_end+=n; bytes-=n; } while(bytes>0); return(0); } #if defined(USE_GZIP) && USE_GZIP static int uncompress_pbf(unsigned char *data,uint32_t compressed,uint32_t uncompressed); #endif /* USE_GZIP */ static void process_string_table(unsigned char *data,uint32_t length); static void process_primitive_group(unsigned char *data,uint32_t length); static void process_nodes(unsigned char *data,uint32_t length); static void process_dense_nodes(unsigned char *data,uint32_t length); static void process_ways(unsigned char *data,uint32_t length); static void process_relations(unsigned char *data,uint32_t length); /* Macros to simplify the parser (and make it look more like the XML parser) */ #define BEGIN(xx) do{ state=(xx); goto finish_parsing; } while(0) #define BUFFER_CHARS_EOF(xx) do{ if(buffer_refill(fd,(xx))) BEGIN(PBF_EOF); } while(0) #define BUFFER_CHARS(xx) do{ if(buffer_refill(fd,(xx))) BEGIN(PBF_ERROR_UNEXP_EOF); } while(0) /* PBF decoding */ #define PBF_FIELD(xx) (int)(((xx)&0xFFF8)>>3) #define PBF_TYPE(xx) (int)((xx)&0x0007) #define PBF_LATITUDE(xx) (double)(1E-9*(granularity*(xx)+lat_offset)) #define PBF_LONGITUDE(xx) (double)(1E-9*(granularity*(xx)+lon_offset)) /*++++++++++++++++++++++++++++++++++++++ Parse a PBF int32 data value. uint32_t pbf_int32 Returns the integer value. unsigned char **ptr The pointer to read the data from. ++++++++++++++++++++++++++++++++++++++*/ static inline uint32_t pbf_int32(unsigned char **ptr) { uint32_t result=(**ptr)&0x7F; if((**ptr)&0x80) result+=((*++(*ptr))&0x7F)<<7; if((**ptr)&0x80) result+=((*++(*ptr))&0x7F)<<14; if((**ptr)&0x80) result+=((*++(*ptr))&0x7F)<<21; if((**ptr)&0x80) result+=((*++(*ptr))&0x7F)<<28; (*ptr)++; return(result); } /*++++++++++++++++++++++++++++++++++++++ Parse a PBF int64 data value. int64_t pbf_int64 Returns the integer value. unsigned char **ptr The pointer to read the data from. ++++++++++++++++++++++++++++++++++++++*/ static inline int64_t pbf_int64(unsigned char **ptr) { uint64_t result=(**ptr)&0x7F; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<7; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<14; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<21; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<28; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<35; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<42; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<49; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<56; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<63; (*ptr)++; return(result); } /*++++++++++++++++++++++++++++++++++++++ Parse a PBF sint64 data value. int64_t pbf_sint64 Returns the integer value. unsigned char **ptr The pointer to read the data from. ++++++++++++++++++++++++++++++++++++++*/ static inline int64_t pbf_sint64(unsigned char **ptr) { int64_t result=((**ptr)&0x7E)>>1; int sign=(**ptr)&0x01; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<6; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<13; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<20; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<27; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<34; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<41; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<48; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<55; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<62; (*ptr)++; if(sign) result=-result-1; return(result); } /*++++++++++++++++++++++++++++++++++++++ Parse a PBF length delimited data value. unsigned char *pbf_length_delimited Returns a pointer to the start of the data. unsigned char **ptr The pointer to read the data from. uint32_t *length Returns the length of the data. ++++++++++++++++++++++++++++++++++++++*/ static inline unsigned char *pbf_length_delimited(unsigned char **ptr,uint32_t *length) { uint32_t len=pbf_int32(ptr); if(length) *length=len; *ptr+=len; return(*ptr-len); } /*++++++++++++++++++++++++++++++++++++++ Skip any pbf field from a message. unsigned char **ptr The pointer to read the data from. int type The type of the data. ++++++++++++++++++++++++++++++++++++++*/ static inline void pbf_skip(unsigned char **ptr,int type) { uint32_t length; switch(type) { case 0: /* varint */ while((**ptr)&0x80) (*ptr)++; (*ptr)++; break; case 1: /* 64-bit */ *ptr+=8; break; case 2: /* length delimited */ length=pbf_int32(ptr); *ptr+=length; break; case 3: /* deprecated */ break; case 4: /* deprecated */ break; case 5: /* 32-bit */ *ptr+=4; break; } } /*++++++++++++++++++++++++++++++++++++++ Parse the PBF and call the functions for each OSM item as seen. int ParsePBF Returns 0 if OK or something else in case of an error. int fd The file descriptor of the file to parse. ++++++++++++++++++++++++++++++++++++++*/ static int ParsePBF(int fd) { int state; unsigned char *error=NULL; /* Print the initial message */ printf_first("Reading: Bytes=0 Nodes=0 Ways=0 Relations=0"); /* The actual parser. */ byteno=0; nnodes=0,nways=0,nrelations=0; string_table_allocated=16384; string_table_length=0; string_table=(unsigned char **)malloc(string_table_allocated*sizeof(unsigned char *)); string_table_string_lengths=(uint32_t *)malloc(string_table_allocated*sizeof(uint32_t)); zbuffer_allocated=0; zbuffer=NULL; buffer_allocated=65536; buffer=(unsigned char*)malloc(buffer_allocated); buffer_ptr=buffer_end=buffer; while(1) { int32_t blob_header_length=0; int osm_data=0,osm_header=0; int32_t blob_length=0; uint32_t raw_size=0,compressed_size=0,uncompressed_size=0; unsigned char *raw_data=NULL,*zlib_data=NULL; uint32_t length; unsigned char *data; /* ================ Parsing states ================ */ BUFFER_CHARS_EOF(4); blob_header_length=(256*(256*(256*(int)buffer_ptr[0])+(int)buffer_ptr[1])+(int)buffer_ptr[2])+buffer_ptr[3]; buffer_ptr+=4; if(blob_header_length==0 || blob_header_length>LENGTH_32M) BEGIN(PBF_ERROR_BLOB_HEADER_LEN); BUFFER_CHARS(blob_header_length); osm_header=0; osm_data=0; while(buffer_ptrLENGTH_32M) BEGIN(PBF_ERROR_BLOB_LEN); if(!osm_data && !osm_header) BEGIN(PBF_ERROR_NOT_OSM); BUFFER_CHARS(blob_length); while(buffer_ptr(sizeof(primitive_group)/sizeof(primitive_group[0]))) BEGIN(PBF_ERROR_TOO_MANY_GROUPS); break; case PBF_VAL_GRANULARITY: /* int32 */ granularity=pbf_int32(&buffer_ptr); break; case PBF_VAL_LAT_OFFSET: /* int64 */ lat_offset=pbf_int64(&buffer_ptr); break; case PBF_VAL_LON_OFFSET: /* int64 */ lon_offset=pbf_int64(&buffer_ptr); break; default: pbf_skip(&buffer_ptr,PBF_TYPE(fieldtype)); } } if(nprimitive_groups) for(i=0;izbuffer_allocated) zbuffer=(unsigned char *)realloc(zbuffer,zbuffer_allocated=uncompressed); if(inflateInit2(&z,15+32)!=Z_OK) return(PBF_ERROR_GZIP_INIT); z.next_in=data; z.avail_in=compressed; z.next_out=zbuffer; z.avail_out=uncompressed; if(inflate(&z,Z_FINISH)!=Z_STREAM_END) return(PBF_ERROR_GZIP_INFLATE); if(z.avail_out!=0) return(PBF_ERROR_GZIP_WRONG_LEN); if(inflateEnd(&z)!=Z_OK) return(PBF_ERROR_GZIP_END); buffer_ptr=zbuffer; buffer_end=zbuffer+uncompressed; return(0); } #endif /* USE_GZIP */ /*++++++++++++++++++++++++++++++++++++++ Parse a PBF format OSM file (from planet download). int ParsePBFFile Returns 0 if OK or something else in case of an error. int fd The file descriptor of the file to read from. NodesX *OSMNodes The data structure of nodes to fill in. WaysX *OSMWays The data structure of ways to fill in. RelationsX *OSMRelations The data structure of relations to fill in. ++++++++++++++++++++++++++++++++++++++*/ int ParsePBFFile(int fd,NodesX *OSMNodes,WaysX *OSMWays,RelationsX *OSMRelations) { int retval; /* Initialise the parser */ InitialiseParser(OSMNodes,OSMWays,OSMRelations); /* Parse the file */ retval=ParsePBF(fd); /* Cleanup the parser */ CleanupParser(); return(retval); } routino-3.2/src/osmxmlparse.c 644 233 144 53263 12563633053 11571 0/*************************************** OSM XML file parser (either JOSM or planet) Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include #include "osmparser.h" #include "xmlparse.h" #include "tagging.h" #include "logging.h" /* Local parsing variables (re-initialised for each file) */ static int current_mode=MODE_NORMAL; static uint64_t nnodes,nways,nrelations; static TagList *current_tags; /* The XML tag processing function prototypes */ //static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding); static int osmType_function(const char *_tag_,int _type_,const char *version); static int osmChangeType_function(const char *_tag_,int _type_,const char *version); //static int boundsType_function(const char *_tag_,int _type_); //static int boundType_function(const char *_tag_,int _type_); static int changesetType_function(const char *_tag_,int _type_); static int modifyType_function(const char *_tag_,int _type_); static int createType_function(const char *_tag_,int _type_); static int deleteType_function(const char *_tag_,int _type_); static int nodeType_function(const char *_tag_,int _type_,const char *id,const char *lat,const char *lon); static int wayType_function(const char *_tag_,int _type_,const char *id); static int relationType_function(const char *_tag_,int _type_,const char *id); static int tagType_function(const char *_tag_,int _type_,const char *k,const char *v); static int ndType_function(const char *_tag_,int _type_,const char *ref); static int memberType_function(const char *_tag_,int _type_,const char *type,const char *ref,const char *role); /* The XML tag definitions (forward declarations) */ static const xmltag xmlDeclaration_tag; static const xmltag osmType_tag; static const xmltag osmChangeType_tag; static const xmltag boundsType_tag; static const xmltag boundType_tag; static const xmltag changesetType_tag; static const xmltag modifyType_tag; static const xmltag createType_tag; static const xmltag deleteType_tag; static const xmltag nodeType_tag; static const xmltag wayType_tag; static const xmltag relationType_tag; static const xmltag tagType_tag; static const xmltag ndType_tag; static const xmltag memberType_tag; /* The XML tag definition values */ /*+ The complete set of tags at the top level for OSM. +*/ static const xmltag * const xml_osm_toplevel_tags[]={&xmlDeclaration_tag,&osmType_tag,NULL}; /*+ The complete set of tags at the top level for OSC. +*/ static const xmltag * const xml_osc_toplevel_tags[]={&xmlDeclaration_tag,&osmChangeType_tag,NULL}; /*+ The xmlDeclaration type tag. +*/ static const xmltag xmlDeclaration_tag= {"xml", 2, {"version","encoding"}, NULL, {NULL}}; /*+ The osmType type tag. +*/ static const xmltag osmType_tag= {"osm", 1, {"version"}, osmType_function, {&boundsType_tag,&boundType_tag,&changesetType_tag,&nodeType_tag,&wayType_tag,&relationType_tag,NULL}}; /*+ The osmChangeType type tag. +*/ static const xmltag osmChangeType_tag= {"osmChange", 1, {"version"}, osmChangeType_function, {&boundsType_tag,&modifyType_tag,&createType_tag,&deleteType_tag,NULL}}; /*+ The boundsType type tag. +*/ static const xmltag boundsType_tag= {"bounds", 0, {NULL}, NULL, {NULL}}; /*+ The boundType type tag. +*/ static const xmltag boundType_tag= {"bound", 0, {NULL}, NULL, {NULL}}; /*+ The changesetType type tag. +*/ static const xmltag changesetType_tag= {"changeset", 0, {NULL}, changesetType_function, {&tagType_tag,NULL}}; /*+ The modifyType type tag. +*/ static const xmltag modifyType_tag= {"modify", 0, {NULL}, modifyType_function, {&nodeType_tag,&wayType_tag,&relationType_tag,NULL}}; /*+ The createType type tag. +*/ static const xmltag createType_tag= {"create", 0, {NULL}, createType_function, {&nodeType_tag,&wayType_tag,&relationType_tag,NULL}}; /*+ The deleteType type tag. +*/ static const xmltag deleteType_tag= {"delete", 0, {NULL}, deleteType_function, {&nodeType_tag,&wayType_tag,&relationType_tag,NULL}}; /*+ The nodeType type tag. +*/ static const xmltag nodeType_tag= {"node", 3, {"id","lat","lon"}, nodeType_function, {&tagType_tag,NULL}}; /*+ The wayType type tag. +*/ static const xmltag wayType_tag= {"way", 1, {"id"}, wayType_function, {&ndType_tag,&tagType_tag,NULL}}; /*+ The relationType type tag. +*/ static const xmltag relationType_tag= {"relation", 1, {"id"}, relationType_function, {&memberType_tag,&tagType_tag,NULL}}; /*+ The tagType type tag. +*/ static const xmltag tagType_tag= {"tag", 2, {"k","v"}, tagType_function, {NULL}}; /*+ The ndType type tag. +*/ static const xmltag ndType_tag= {"nd", 1, {"ref"}, ndType_function, {NULL}}; /*+ The memberType type tag. +*/ static const xmltag memberType_tag= {"member", 3, {"type","ref","role"}, memberType_function, {NULL}}; /* The XML tag processing functions */ /*++++++++++++++++++++++++++++++++++++++ The function that is called when the XML declaration is seen int xmlDeclaration_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *version The contents of the 'version' attribute (or NULL if not defined). const char *encoding The contents of the 'encoding' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ //static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the osmType XSD type is seen int osmType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *version The contents of the 'version' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int osmType_function(const char *_tag_,int _type_,const char *version) { /* Print the initial message */ if(_type_&XMLPARSE_TAG_START) printf_first("Read: Lines=%"PRIu64" Nodes=%"PRIu64" Ways=%"PRIu64" Relations=%"PRIu64,ParseXML_LineNumber(),nnodes=0,nways=0,nrelations=0); /* Check the tag values */ if(_type_&XMLPARSE_TAG_START) { current_mode=MODE_NORMAL; if(!version || strcmp(version,"0.6")) XMLPARSE_MESSAGE(_tag_,"Invalid value for 'version' (only '0.6' accepted)"); } /* Print the final message */ if(_type_&XMLPARSE_TAG_END) printf_last("Read: Lines=%"PRIu64" Nodes=%"PRIu64" Ways=%"PRIu64" Relations=%"PRIu64,ParseXML_LineNumber(),nnodes,nways,nrelations); return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the osmChangeType XSD type is seen int osmChangeType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *version The contents of the 'version' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int osmChangeType_function(const char *_tag_,int _type_,const char *version) { /* Print the initial message */ if(_type_&XMLPARSE_TAG_START) printf_first("Read: Lines=%"PRIu64" Nodes=%"PRIu64" Ways=%"PRIu64" Relations=%"PRIu64,ParseXML_LineNumber(),nnodes=0,nways=0,nrelations=0); /* Check the tag values */ if(_type_&XMLPARSE_TAG_START) { if(!version || strcmp(version,"0.6")) XMLPARSE_MESSAGE(_tag_,"Invalid value for 'version' (only '0.6' accepted)"); } /* Print the final message */ if(_type_&XMLPARSE_TAG_END) printf_last("Read: Lines=%"PRIu64" Nodes=%"PRIu64" Ways=%"PRIu64" Relations=%"PRIu64,ParseXML_LineNumber(),nnodes,nways,nrelations); return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the boundsType XSD type is seen int boundsType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ //static int boundsType_function(const char *_tag_,int _type_) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the boundType XSD type is seen int boundType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ //static int boundType_function(const char *_tag_,int _type_) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the changesetType XSD type is seen int changesetType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ static int changesetType_function(const char *_tag_,int _type_) { current_tags=NULL; return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the modifyType XSD type is seen int modifyType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ static int modifyType_function(const char *_tag_,int _type_) { if(_type_&XMLPARSE_TAG_START) current_mode=MODE_MODIFY; return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the createType XSD type is seen int createType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ static int createType_function(const char *_tag_,int _type_) { if(_type_&XMLPARSE_TAG_START) current_mode=MODE_CREATE; return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the deleteType XSD type is seen int deleteType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ static int deleteType_function(const char *_tag_,int _type_) { if(_type_&XMLPARSE_TAG_START) current_mode=MODE_DELETE; return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the nodeType XSD type is seen int nodeType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *id The contents of the 'id' attribute (or NULL if not defined). const char *lat The contents of the 'lat' attribute (or NULL if not defined). const char *lon The contents of the 'lon' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int nodeType_function(const char *_tag_,int _type_,const char *id,const char *lat,const char *lon) { static int64_t llid; /* static variable to store attributes from tag until tag */ static double latitude,longitude; /* static variable to store attributes from tag until tag */ if(_type_&XMLPARSE_TAG_START) { nnodes++; if(!(nnodes%10000)) printf_middle("Reading: Lines=%"PRIu64" Nodes=%"PRIu64" Ways=%"PRIu64" Relations=%"PRIu64,ParseXML_LineNumber(),nnodes,nways,nrelations); current_tags=NewTagList(); /* Handle the node information */ XMLPARSE_ASSERT_INTEGER(_tag_,id); llid=atoll(id); /* need int64_t conversion */ if(current_mode!=MODE_DELETE) { XMLPARSE_ASSERT_FLOATING(_tag_,lat); latitude =atof(lat); XMLPARSE_ASSERT_FLOATING(_tag_,lon); longitude=atof(lon); } } if(_type_&XMLPARSE_TAG_END) { TagList *result=ApplyNodeTaggingRules(current_tags,llid); ProcessNodeTags(result,llid,latitude,longitude,current_mode); DeleteTagList(current_tags); current_tags=NULL; DeleteTagList(result); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the wayType XSD type is seen int wayType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *id The contents of the 'id' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int wayType_function(const char *_tag_,int _type_,const char *id) { static int64_t llid; /* static variable to store attributes from tag until tag */ if(_type_&XMLPARSE_TAG_START) { nways++; if(!(nways%1000)) printf_middle("Reading: Lines=%"PRIu64" Nodes=%"PRIu64" Ways=%"PRIu64" Relations=%"PRIu64,ParseXML_LineNumber(),nnodes,nways,nrelations); current_tags=NewTagList(); AddWayRefs(0); /* Handle the way information */ XMLPARSE_ASSERT_INTEGER(_tag_,id); llid=atoll(id); /* need int64_t conversion */ } if(_type_&XMLPARSE_TAG_END) { TagList *result=ApplyWayTaggingRules(current_tags,llid); ProcessWayTags(result,llid,current_mode); DeleteTagList(current_tags); current_tags=NULL; DeleteTagList(result); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the relationType XSD type is seen int relationType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *id The contents of the 'id' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int relationType_function(const char *_tag_,int _type_,const char *id) { static int64_t llid; /* static variable to store attributes from tag until tag */ if(_type_&XMLPARSE_TAG_START) { nrelations++; if(!(nrelations%1000)) printf_middle("Reading: Lines=%"PRIu64" Nodes=%"PRIu64" Ways=%"PRIu64" Relations=%"PRIu64,ParseXML_LineNumber(),nnodes,nways,nrelations); current_tags=NewTagList(); AddRelationRefs(0,0,0,NULL); /* Handle the relation information */ XMLPARSE_ASSERT_INTEGER(_tag_,id); llid=atoll(id); /* need int64_t conversion */ } if(_type_&XMLPARSE_TAG_END) { TagList *result=ApplyRelationTaggingRules(current_tags,llid); ProcessRelationTags(result,llid,current_mode); DeleteTagList(current_tags); current_tags=NULL; DeleteTagList(result); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the tagType XSD type is seen int tagType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *k The contents of the 'k' attribute (or NULL if not defined). const char *v The contents of the 'v' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int tagType_function(const char *_tag_,int _type_,const char *k,const char *v) { if(_type_&XMLPARSE_TAG_START && current_tags) { XMLPARSE_ASSERT_STRING(_tag_,k); XMLPARSE_ASSERT_STRING(_tag_,v); AppendTag(current_tags,k,v); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the ndType XSD type is seen int ndType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *ref The contents of the 'ref' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int ndType_function(const char *_tag_,int _type_,const char *ref) { if(_type_&XMLPARSE_TAG_START) { int64_t llid; XMLPARSE_ASSERT_INTEGER(_tag_,ref); llid=atoll(ref); /* need int64_t conversion */ AddWayRefs(llid); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the memberType XSD type is seen int memberType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *type The contents of the 'type' attribute (or NULL if not defined). const char *ref The contents of the 'ref' attribute (or NULL if not defined). const char *role The contents of the 'role' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int memberType_function(const char *_tag_,int _type_,const char *type,const char *ref,const char *role) { if(_type_&XMLPARSE_TAG_START) { int64_t llid; XMLPARSE_ASSERT_STRING(_tag_,type); XMLPARSE_ASSERT_INTEGER(_tag_,ref); llid=atoll(ref); /* need int64_t conversion */ if(!strcmp(type,"node")) AddRelationRefs(llid,0,0,role); else if(!strcmp(type,"way")) AddRelationRefs(0,llid,0,role); else if(!strcmp(type,"relation")) AddRelationRefs(0,0,llid,role); } return(0); } /*++++++++++++++++++++++++++++++++++++++ Parse an OSM XML file (from JOSM or planet download). int ParseOSMFile Returns 0 if OK or something else in case of an error. int fd The file descriptor of the file to read from. NodesX *OSMNodes The data structure of nodes to fill in. WaysX *OSMWays The data structure of ways to fill in. RelationsX *OSMRelations The data structure of relations to fill in. ++++++++++++++++++++++++++++++++++++++*/ int ParseOSMFile(int fd,NodesX *OSMNodes,WaysX *OSMWays,RelationsX *OSMRelations) { int retval; /* Initialise the parser */ InitialiseParser(OSMNodes,OSMWays,OSMRelations); /* Parse the file */ nnodes=0,nways=0,nrelations=0; current_tags=NULL; retval=ParseXML(fd,xml_osm_toplevel_tags,XMLPARSE_UNKNOWN_ATTR_IGNORE); /* Cleanup the parser */ CleanupParser(); return(retval); } /*++++++++++++++++++++++++++++++++++++++ Parse an OSC XML file (from planet download). int ParseOSCFile Returns 0 if OK or something else in case of an error. int fd The file descriptor of the file to read from. NodesX *OSMNodes The data structure of nodes to fill in. WaysX *OSMWays The data structure of ways to fill in. RelationsX *OSMRelations The data structure of relations to fill in. ++++++++++++++++++++++++++++++++++++++*/ int ParseOSCFile(int fd,NodesX *OSMNodes,WaysX *OSMWays,RelationsX *OSMRelations) { int retval; /* Initialise the parser */ InitialiseParser(OSMNodes,OSMWays,OSMRelations); /* Parse the file */ nnodes=0,nways=0,nrelations=0; current_tags=NULL; retval=ParseXML(fd,xml_osc_toplevel_tags,XMLPARSE_UNKNOWN_ATTR_IGNORE); /* Cleanup the parser */ CleanupParser(); return(retval); } routino-3.2/src/optimiser.c 644 233 144 202506 12731270734 11246 0/*************************************** Routing optimiser. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2016 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include "types.h" #include "nodes.h" #include "segments.h" #include "ways.h" #include "relations.h" #include "logging.h" #include "functions.h" #include "fakes.h" #include "results.h" #ifdef LIBROUTINO #include "routino.h" /*+ The function to be called to report on the routing progress. +*/ extern Routino_ProgressFunc progress_func; /*+ The current state of the routing progress. +*/ extern double progress_value; /*+ Set when the progress callback returns false in the routing function. +*/ extern int progress_abort; #endif /*+ To help when debugging +*/ #define DEBUG 0 /* Global variables */ /*+ The option not to print any progress information. +*/ extern int option_quiet; /*+ The option to calculate the quickest route insted of the shortest. +*/ extern int option_quickest; /* Local functions */ static Results *FindNormalRoute(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,index_t start_node,index_t prev_segment,index_t finish_node); static Results *FindMiddleRoute(Nodes *supernodes,Segments *supersegments,Ways *superways,Relations *relations,Profile *profile,Results *begin,Results *end); static index_t FindSuperSegment(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,index_t finish_node,index_t finish_segment); static Results *FindSuperRoute(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,index_t start_node,index_t finish_node); static Results *FindStartRoutes(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,index_t start_node,index_t prev_segment,index_t finish_node); static Results *FindFinishRoutes(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,index_t finish_node); static Results *CombineRoutes(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,Results *begin,Results *middle,Results *end); static void FixForwardRoute(Results *results,Result *finish_result); #if DEBUG static void print_debug_route(Nodes *nodes,Segments *segments,Results *results,Result *first,int indent,int direction); #endif /*++++++++++++++++++++++++++++++++++++++ Find a complete route from a specified node to another node. Results *CalculateRoute Returns a set of results. Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. Profile *profile The profile containing the transport type, speeds and allowed highways. index_t start_node The start node. index_t prev_segment The previous segment before the start node. index_t finish_node The finish node. int start_waypoint The starting waypoint. int finish_waypoint The finish waypoint. ++++++++++++++++++++++++++++++++++++++*/ Results *CalculateRoute(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile, index_t start_node,index_t prev_segment,index_t finish_node, int start_waypoint,int finish_waypoint) { Results *complete=NULL; /* A special case if the first and last nodes are the same */ if(start_node==finish_node) { index_t fake_segment; Result *result1,*result2; complete=NewResultsList(8); if(prev_segment==NO_SEGMENT) { double lat,lon; distance_t distmin,dist1,dist2; index_t node1,node2; GetLatLong(nodes,start_node,NULL,&lat,&lon); prev_segment=FindClosestSegment(nodes,segments,ways,lat,lon,1,profile,&distmin,&node1,&node2,&dist1,&dist2); } if(IsFakeSegment(prev_segment)) prev_segment=IndexRealSegment(prev_segment); fake_segment=CreateFakeNullSegment(segments,start_node,prev_segment,finish_waypoint); result1=InsertResult(complete,start_node,prev_segment); result2=InsertResult(complete,finish_node,fake_segment); result1->next=result2; complete->start_node=start_node; complete->prev_segment=prev_segment; complete->finish_node=finish_node; complete->last_segment=fake_segment; } else { Results *begin; /* Calculate the beginning of the route */ begin=FindStartRoutes(nodes,segments,ways,relations,profile,start_node,prev_segment,finish_node); if(begin) { /* Check if the end of the route was reached */ if(begin->finish_node!=NO_NODE) complete=begin; } else { if(prev_segment!=NO_SEGMENT) { /* Try again but allow a U-turn at the start waypoint - this solves the problem of facing a dead-end that contains no super-nodes. */ prev_segment=NO_SEGMENT; begin=FindStartRoutes(nodes,segments,ways,relations,profile,start_node,prev_segment,finish_node); } if(begin) { /* Check if the end of the route was reached */ if(begin->finish_node!=NO_NODE) complete=begin; } else { #ifndef LIBROUTINO fprintf(stderr,"Error: Cannot find initial section of route compatible with profile.\n"); #endif return(NULL); } } /* Calculate the rest of the route */ if(!complete) { Results *middle,*end; /* Calculate the end of the route */ end=FindFinishRoutes(nodes,segments,ways,relations,profile,finish_node); if(!end) { #ifndef LIBROUTINO fprintf(stderr,"Error: Cannot find final section of route compatible with profile.\n"); #endif return(NULL); } /* Calculate the middle of the route */ middle=FindMiddleRoute(nodes,segments,ways,relations,profile,begin,end); if(!middle && prev_segment!=NO_SEGMENT) { /* Try again but allow a U-turn at the start waypoint - this solves the problem of facing a dead-end that contains some super-nodes. */ FreeResultsList(begin); begin=FindStartRoutes(nodes,segments,ways,relations,profile,start_node,NO_SEGMENT,finish_node); if(begin) middle=FindMiddleRoute(nodes,segments,ways,relations,profile,begin,end); } if(!middle) { #ifndef LIBROUTINO fprintf(stderr,"Error: Cannot find super-route compatible with profile.\n"); #endif return(NULL); } complete=CombineRoutes(nodes,segments,ways,relations,profile,begin,middle,end); if(!complete) { #ifndef LIBROUTINO fprintf(stderr,"Error: Cannot create combined route following super-route.\n"); #endif return(NULL); } FreeResultsList(begin); FreeResultsList(middle); FreeResultsList(end); } } complete->start_waypoint=start_waypoint; complete->finish_waypoint=finish_waypoint; #if DEBUG printf("The final route is:\n"); print_debug_route(nodes,segments,complete,NULL,2,+1); #endif return(complete); } /*++++++++++++++++++++++++++++++++++++++ Find the optimum route between two nodes not passing through a super-node. Results *FindNormalRoute Returns a set of results. Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. Profile *profile The profile containing the transport type, speeds and allowed highways. index_t start_node The start node. index_t prev_segment The previous segment before the start node. index_t finish_node The finish node. ++++++++++++++++++++++++++++++++++++++*/ static Results *FindNormalRoute(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,index_t start_node,index_t prev_segment,index_t finish_node) { Results *results; Queue *queue; score_t total_score; double finish_lat,finish_lon; Result *start_result,*finish_result; Result *result1,*result2; int force_uturn=0; #if DEBUG printf(" FindNormalRoute(...,start_node=%"Pindex_t" prev_segment=%"Pindex_t" finish_node=%"Pindex_t")\n",start_node,prev_segment,finish_node); #endif /* Set up the finish conditions */ total_score=INF_SCORE; finish_result=NULL; if(IsFakeNode(finish_node)) GetFakeLatLong(finish_node,&finish_lat,&finish_lon); else GetLatLong(nodes,finish_node,NULL,&finish_lat,&finish_lon); /* Create the list of results and insert the first node into the queue */ results=NewResultsList(8); queue=NewQueueList(8); start_result=InsertResult(results,start_node,prev_segment); InsertInQueue(queue,start_result,0); /* Check for barrier at start waypoint - must perform U-turn */ if(prev_segment!=NO_SEGMENT && !IsFakeNode(start_node)) { Node *startp=LookupNode(nodes,start_node,1); if(!(startp->allow&profile->allow)) force_uturn=1; } /* Loop across all nodes in the queue */ while((result1=PopFromQueue(queue))) { Node *node1p=NULL; Segment *segment2p; index_t node1,seg1,seg1r; index_t turnrelation=NO_RELATION; /* score must be better than current best score */ if(result1->score>=total_score) continue; node1=result1->node; seg1=result1->segment; if(IsFakeSegment(seg1)) seg1r=IndexRealSegment(seg1); else seg1r=seg1; if(!IsFakeNode(node1)) node1p=LookupNode(nodes,node1,1); /* lookup if a turn restriction applies */ if(profile->turns && node1p && IsTurnRestrictedNode(node1p)) turnrelation=FindFirstTurnRelation2(relations,node1,seg1r); /* Loop across all segments */ if(IsFakeNode(node1)) segment2p=FirstFakeSegment(node1); else segment2p=FirstSegment(segments,node1p,1); while(segment2p) { Node *node2p=NULL; Way *way2p; index_t node2,seg2,seg2r; score_t segment_pref,segment_score,cumulative_score; int i; node2=OtherNode(segment2p,node1); /* need this here because we use node2 at the end of the loop */ /* must be a normal segment */ if(!IsNormalSegment(segment2p)) goto endloop; /* must obey one-way restrictions (unless profile allows) */ if(profile->oneway && IsOnewayTo(segment2p,node1)) { if(profile->allow!=Transports_Bicycle) goto endloop; way2p=LookupWay(ways,segment2p->way,1); if(!(way2p->type&Highway_CycleBothWays)) goto endloop; } if(IsFakeNode(node1) || IsFakeNode(node2)) { seg2 =IndexFakeSegment(segment2p); seg2r=IndexRealSegment(seg2); } else { seg2 =IndexSegment(segments,segment2p); seg2r=seg2; } /* must perform U-turn in special cases */ if(force_uturn && node1==start_node) { if(seg2r!=result1->segment) goto endloop; } else /* must not perform U-turn (unless profile allows) */ if(profile->turns && (seg1==seg2 || seg1==seg2r || seg1r==seg2 || (seg1r==seg2r && IsFakeUTurn(seg1,seg2)))) goto endloop; /* must obey turn relations */ if(turnrelation!=NO_RELATION && !IsTurnAllowed(relations,turnrelation,node1,seg1r,seg2r,profile->allow)) goto endloop; if(!IsFakeNode(node2)) node2p=LookupNode(nodes,node2,2); /* must not pass over super-node */ if(node2!=finish_node && node2p && IsSuperNode(node2p)) goto endloop; way2p=LookupWay(ways,segment2p->way,1); /* mode of transport must be allowed on the highway */ if(!(way2p->allow&profile->allow)) goto endloop; /* must obey weight restriction (if exists) */ if(way2p->weight && way2p->weightweight) goto endloop; /* must obey height/width/length restriction (if exist) */ if((way2p->height && way2p->heightheight) || (way2p->width && way2p->width width ) || (way2p->length && way2p->lengthlength)) goto endloop; segment_pref=profile->highway[HIGHWAY(way2p->type)]; /* highway preferences must allow this highway */ if(segment_pref==0) goto endloop; for(i=1;ifile.props & PROPERTIES(i)) { if(way2p->props & PROPERTIES(i)) segment_pref*=profile->props_yes[i]; else segment_pref*=profile->props_no[i]; } /* profile preferences must allow this highway */ if(segment_pref==0) goto endloop; /* mode of transport must be allowed through node2 unless it is the final node */ if(node2p && node2!=finish_node && !(node2p->allow&profile->allow)) goto endloop; /* calculate the score for the segment and cumulative */ if(option_quickest==0) segment_score=(score_t)DISTANCE(segment2p->distance)/segment_pref; else segment_score=(score_t)Duration(segment2p,way2p,profile)/segment_pref; cumulative_score=result1->score+segment_score; /* score must be better than current best score */ if(cumulative_score>=total_score) goto endloop; /* find whether the node/segment combination already exists */ result2=FindResult(results,node2,seg2); if(!result2) /* New end node/segment combination */ { result2=InsertResult(results,node2,seg2); result2->prev=result1; result2->score=cumulative_score; } else if(cumulative_scorescore) /* New score for end node/segment combination is better */ { result2->prev=result1; result2->score=cumulative_score; result2->segment=seg2; } else goto endloop; if(node2==finish_node) { total_score=cumulative_score; finish_result=result2; } else InsertInQueue(queue,result2,result2->score); endloop: if(IsFakeNode(node1)) segment2p=NextFakeSegment(segment2p,node1); else if(IsFakeNode(node2)) segment2p=NULL; /* cannot call NextSegment() with a fake segment */ else { segment2p=NextSegment(segments,segment2p,node1); if(!segment2p && IsFakeNode(finish_node)) segment2p=ExtraFakeSegment(node1,finish_node); } } } FreeQueueList(queue); /* Check it worked */ if(!finish_result) { #if DEBUG printf(" Failed\n"); #endif FreeResultsList(results); return(NULL); } /* Turn the route round and fill in the start and finish information */ FixForwardRoute(results,finish_result); results->start_node =start_result->node; results->prev_segment=start_result->segment; results->finish_node =finish_result->node; results->last_segment=finish_result->segment; #if DEBUG printf(" -------- normal route (between super-nodes)\n"); print_debug_route(nodes,segments,results,NULL,6,+1); #endif return(results); } /*++++++++++++++++++++++++++++++++++++++ Find the optimum route between two nodes where the start and end are a set of pre/post-routed super-nodes. Results *FindMiddleRoute Returns a set of results. Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. Profile *profile The profile containing the transport type, speeds and allowed highways. Results *begin The initial portion of the route. Results *end The final portion of the route. ++++++++++++++++++++++++++++++++++++++*/ static Results *FindMiddleRoute(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,Results *begin,Results *end) { Results *results; Queue *fwd_queue,*rev_queue; Result *start_result,*finish_result; score_t total_score; double start_lat,start_lon; double finish_lat,finish_lon; Result *result1,*result2; int force_uturn=0; #ifdef LIBROUTINO int loopcount=0; #endif #if DEBUG printf(" FindMiddleRoute(...,[begin has %d nodes],[end has %d nodes])\n",begin->number,end->number); #endif #if !DEBUG && !defined(LIBROUTINO) if(!option_quiet) printf_first("Finding Middle Route: Super-Nodes checked = 0"); #endif /* Set up the finish conditions */ total_score=INF_SCORE; start_result=NULL; finish_result=NULL; if(IsFakeNode(begin->start_node)) GetFakeLatLong(begin->start_node,&start_lat,&start_lon); else GetLatLong(nodes,begin->start_node,NULL,&start_lat,&start_lon); if(IsFakeNode(end->finish_node)) GetFakeLatLong(end->finish_node,&finish_lat,&finish_lon); else GetLatLong(nodes,end->finish_node,NULL,&finish_lat,&finish_lon); /* Create the list of results and queues */ results=NewResultsList(20); fwd_queue=NewQueueList(12); rev_queue=NewQueueList(12); /* Insert the finish points of the beginning part of the path into the results, translating the segments into super-segments. */ if(begin->number==1) { index_t superseg=NO_SEGMENT; if(begin->prev_segment!=NO_SEGMENT) superseg=FindSuperSegment(nodes,segments,ways,relations,profile,begin->start_node,begin->prev_segment); start_result=InsertResult(results,begin->start_node,superseg); InsertInQueue(fwd_queue,start_result,0); /* Check for barrier at start waypoint - must perform U-turn */ if(superseg!=NO_SEGMENT) { Node *startp=LookupNode(nodes,begin->start_node,1); if(!(startp->allow&profile->allow)) force_uturn=1; } } else { Result *begin_result=FirstResult(begin); Result *end_result; while((begin_result=NextResult(begin,begin_result))) { if(!IsFakeNode(begin_result->node) && IsSuperNode(LookupNode(nodes,begin_result->node,3))) { index_t superseg=FindSuperSegment(nodes,segments,ways,relations,profile,begin_result->node,begin_result->segment); if(superseg!=begin_result->segment) { result1=InsertResult(results,begin_result->node,begin_result->segment); result1->score=begin_result->score; } else result1=NO_RESULT; result2=FindResult(results,begin_result->node,superseg); if(!result2) /* New end node/super-segment pair */ { result2=InsertResult(results,begin_result->node,superseg); result2->prev=result1; result2->score=begin_result->score; } else if(begin_result->scorescore) /* New end node/super-segment pair is better */ { result2->prev=result1; result2->score=begin_result->score; } else continue; if((end_result=FindResult(end,result2->node,result2->segment))) { if((result2->score+end_result->score)score+end_result->score; start_result=finish_result=result2; } } } } /* Insert the start points of the beginning part of the path into the queue */ if(!finish_result) { Result *result=FirstResult(results); while(result) { if(result->prev) InsertInQueue(fwd_queue,result,result->score); result=NextResult(results,result); } } /* Insert the start points of the end part of the path into the queue */ if(!finish_result) { end_result=FirstResult(end); while(end_result) { if(!IsFakeNode(end_result->node) && IsSuperNode(LookupNode(nodes,end_result->node,3))) { result1=InsertResult(results,end_result->node,end_result->segment); result1->next=NO_RESULT; result1->score=end_result->score; InsertInQueue(rev_queue,result1,0); } end_result=NextResult(end,end_result); } } } /* Loop across all nodes in the two queues, alternating between them */ while(1) { /* Forward queue */ if((result1=PopFromQueue(fwd_queue))) { Node *node1p; Segment *segment2p; index_t node1,seg1; index_t turnrelation=NO_RELATION; /* score must be better than current best score */ if(result1->score>=total_score) continue; node1=result1->node; seg1=result1->segment; node1p=LookupNode(nodes,node1,1); /* node1 cannot be a fake node (must be a super-node) */ /* lookup if a turn restriction applies */ if(profile->turns && IsTurnRestrictedNode(node1p)) /* node1 cannot be a fake node (must be a super-node) */ turnrelation=FindFirstTurnRelation2(relations,node1,seg1); /* Loop across all segments */ segment2p=FirstSegment(segments,node1p,1); /* node1 cannot be a fake node (must be a super-node) */ while(segment2p) { Node *node2p; Way *way2p; index_t node2,seg2; score_t segment_pref,segment_score,cumulative_score,potential_score; double lat,lon; distance_t direct; int i; /* must be a super segment */ if(!IsSuperSegment(segment2p)) goto endloop_fwd; /* must obey one-way restrictions (unless profile allows) */ if(profile->oneway && IsOnewayTo(segment2p,node1)) { if(profile->allow!=Transports_Bicycle) goto endloop_fwd; way2p=LookupWay(ways,segment2p->way,1); if(!(way2p->type&Highway_CycleBothWays)) goto endloop_fwd; } seg2=IndexSegment(segments,segment2p); /* segment cannot be a fake segment (must be a super-segment) */ /* must perform U-turn in special cases */ if(force_uturn && node1==begin->start_node) { if(seg2!=result1->segment) goto endloop_fwd; } else /* must not perform U-turn */ if(seg1==seg2) /* No fake segments, applies to all profiles */ goto endloop_fwd; /* must obey turn relations */ if(turnrelation!=NO_RELATION && !IsTurnAllowed(relations,turnrelation,node1,seg1,seg2,profile->allow)) goto endloop_fwd; way2p=LookupWay(ways,segment2p->way,1); /* mode of transport must be allowed on the highway */ if(!(way2p->allow&profile->allow)) goto endloop_fwd; /* must obey weight restriction (if exists) */ if(way2p->weight && way2p->weightweight) goto endloop_fwd; /* must obey height/width/length restriction (if exist) */ if((way2p->height && way2p->heightheight) || (way2p->width && way2p->width width ) || (way2p->length && way2p->lengthlength)) goto endloop_fwd; segment_pref=profile->highway[HIGHWAY(way2p->type)]; /* highway preferences must allow this highway */ if(segment_pref==0) goto endloop_fwd; for(i=1;ifile.props & PROPERTIES(i)) { if(way2p->props & PROPERTIES(i)) segment_pref*=profile->props_yes[i]; else segment_pref*=profile->props_no[i]; } /* profile preferences must allow this highway */ if(segment_pref==0) goto endloop_fwd; node2=OtherNode(segment2p,node1); node2p=LookupNode(nodes,node2,2); /* node2 cannot be a fake node (must be a super-node) */ /* mode of transport must be allowed through node2 unless it is the final node */ if(node2!=end->finish_node && !(node2p->allow&profile->allow)) goto endloop_fwd; /* calculate the score for the segment and cumulative */ if(option_quickest==0) segment_score=(score_t)DISTANCE(segment2p->distance)/segment_pref; else segment_score=(score_t)Duration(segment2p,way2p,profile)/segment_pref; cumulative_score=result1->score+segment_score; /* score must be better than current best score */ if(cumulative_score>=total_score) goto endloop_fwd; /* find whether the node/segment combination already exists */ result2=FindResult(results,node2,seg2); if(result2 && result2->next) { if((cumulative_score+result2->score)prev) { result2->prev=result1; total_score=cumulative_score+result2->score; finish_result=start_result=result2; } goto endloop_fwd; } if(!result2) /* New end node/segment pair */ { result2=InsertResult(results,node2,seg2); result2->prev=result1; result2->score=cumulative_score; } else if(cumulative_scorescore) /* New end node/segment pair is better */ { result2->prev=result1; result2->score=cumulative_score; } else goto endloop_fwd; /* Insert a new node into the queue */ GetLatLong(nodes,node2,node2p,&lat,&lon); /* node2 cannot be a fake node (must be a super-node) */ direct=Distance(lat,lon,finish_lat,finish_lon); if(option_quickest==0) potential_score=result2->score+(score_t)direct/profile->max_pref; else potential_score=result2->score+(score_t)distance_speed_to_duration(direct,profile->max_speed)/profile->max_pref; if(potential_scorescore>=total_score) continue; real_node1=result1->node; seg1=result1->segment; segment1p=LookupSegment(segments,seg1,1); node1=OtherNode(segment1p,real_node1); node1p=LookupNode(nodes,node1,1); /* mode of transport must be allowed through node1 */ if(!(node1p->allow&profile->allow)) continue; way1p=LookupWay(ways,segment1p->way,1); segment1_pref=profile->highway[HIGHWAY(way1p->type)]; for(i=1;ifile.props & PROPERTIES(i)) { if(way1p->props & PROPERTIES(i)) segment1_pref*=profile->props_yes[i]; else segment1_pref*=profile->props_no[i]; } /* calculate the score for the segment */ if(option_quickest==0) segment1_score=(score_t)DISTANCE(segment1p->distance)/segment1_pref; else segment1_score=(score_t)Duration(segment1p,way1p,profile)/segment1_pref; /* Loop across all segments */ segment2p=FirstSegment(segments,node1p,1); /* node1 cannot be a fake node (must be a super-node) */ while(segment2p) { Node *node2p; Way *way2p; index_t node2,seg2; score_t segment_pref,cumulative_score,potential_score; double lat,lon; distance_t direct; seg2=IndexSegment(segments,segment2p); /* segment cannot be a fake segment (must be a super-segment) */ /* must not perform U-turn */ if(seg1==seg2) /* No fake segments, applies to all profiles */ goto endloop_rev; /* find whether the node/segment combination already exists */ result2=FindResult(results,node1,seg2); /* must be a super segment */ if(!IsSuperSegment(segment2p) && !(result2 && result2->prev)) goto endloop_rev; /* must obey turn relations */ if(profile->turns && IsTurnRestrictedNode(node1p)) /* node1 cannot be a fake node (must be a super-node) */ { index_t turnrelation2=FindFirstTurnRelation2(relations,node1,seg2); if(turnrelation2!=NO_RELATION && !IsTurnAllowed(relations,turnrelation2,node1,seg2,seg1,profile->allow)) goto endloop_rev; } if(result2 && result2->prev) goto endloop_rev; /* must obey one-way restrictions (unless profile allows) */ if(profile->oneway && IsOnewayFrom(segment2p,node1)) /* working backwards => disallow oneway *from* node1 */ { if(profile->allow!=Transports_Bicycle) goto endloop_rev; way2p=LookupWay(ways,segment2p->way,1); if(!(way2p->type&Highway_CycleBothWays)) goto endloop_rev; } way2p=LookupWay(ways,segment2p->way,1); /* mode of transport must be allowed on the highway */ if(!(way2p->allow&profile->allow)) goto endloop_rev; /* must obey weight restriction (if exists) */ if(way2p->weight && way2p->weightweight) goto endloop_rev; /* must obey height/width/length restriction (if exist) */ if((way2p->height && way2p->heightheight) || (way2p->width && way2p->width width ) || (way2p->length && way2p->lengthlength)) goto endloop_rev; segment_pref=profile->highway[HIGHWAY(way2p->type)]; /* highway preferences must allow this highway */ if(segment_pref==0) goto endloop_rev; for(i=1;ifile.props & PROPERTIES(i)) { if(way2p->props & PROPERTIES(i)) segment_pref*=profile->props_yes[i]; else segment_pref*=profile->props_no[i]; } /* profile preferences must allow this highway */ if(segment_pref==0) goto endloop_rev; node2=OtherNode(segment2p,node1); node2p=LookupNode(nodes,node2,2); /* node2 cannot be a fake node (must be a super-node) */ cumulative_score=result1->score+segment1_score; /* score must be better than current best score */ if(cumulative_score>=total_score) goto endloop_rev; if(!result2) /* New end node/segment pair */ { result2=InsertResult(results,node1,seg2); /* adding in reverse => node1,seg2 */ result2->next=result1; /* working backwards */ result2->score=cumulative_score; } else if(cumulative_scorescore) /* New end node/segment pair is better */ { result2->next=result1; /* working backwards */ result2->score=cumulative_score; } else goto endloop_rev; /* Insert a new node into the queue */ GetLatLong(nodes,node2,node2p,&lat,&lon); /* node2 cannot be a fake node (must be a super-node) */ direct=Distance(lat,lon,start_lat,start_lon); if(option_quickest==0) potential_score=result2->score+(score_t)direct/profile->max_pref; else potential_score=result2->score+(score_t)distance_speed_to_duration(direct,profile->max_speed)/profile->max_pref; if(potential_scorenumber); #endif FreeResultsList(results); return(NULL); } /* Turn the route round and fill in the start and finish information */ result1=FirstResult(results); while(result1) result1=NextResult(results,result1); while(start_result->prev && start_result->prev!=NO_RESULT) start_result=start_result->prev; FixForwardRoute(results,finish_result); if(!start_result->prev && start_result->next) start_result=start_result->next; while(finish_result->next && finish_result->next!=NO_RESULT) finish_result=finish_result->next; results->start_node=start_result->node; results->prev_segment=start_result->segment; results->finish_node=finish_result->node; results->last_segment=finish_result->segment; #if DEBUG printf(" -------- middle route (via super-nodes/segments)\n"); print_debug_route(nodes,segments,results,NULL,4,+1); #endif #if !DEBUG && !defined(LIBROUTINO) if(!option_quiet) printf_last("Found Middle Route: Super-Nodes checked = %d",results->number); #endif return(results); } /*++++++++++++++++++++++++++++++++++++++ Find the super-segment that represents the route that contains a particular segment. index_t FindSuperSegment Returns the index of the super-segment. Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. Profile *profile The profile containing the transport type, speeds and allowed highways. index_t finish_node The super-node that the route ends at. index_t finish_segment The segment that the route ends with. ++++++++++++++++++++++++++++++++++++++*/ static index_t FindSuperSegment(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,index_t finish_node,index_t finish_segment) { Node *supernodep; Segment *supersegmentp; #if DEBUG printf(" FindSuperSegment(...,finish_node=%"Pindex_t",finish_segment=%"Pindex_t")\n",finish_node,finish_segment); #endif if(IsFakeSegment(finish_segment)) finish_segment=IndexRealSegment(finish_segment); supernodep=LookupNode(nodes,finish_node,3); /* finish_node cannot be a fake node (must be a super-node) */ supersegmentp=LookupSegment(segments,finish_segment,3); /* finish_segment cannot be a fake segment. */ if(IsSuperSegment(supersegmentp)) { #if DEBUG printf(" -- already super-segment = %"Pindex_t"\n",finish_segment); #endif return(finish_segment); } /* Loop across all segments */ supersegmentp=FirstSegment(segments,supernodep,3); /* supernode cannot be a fake node (must be a super-node) */ while(supersegmentp) { if(IsSuperSegment(supersegmentp)) { Results *results; Result *result; index_t start_node; start_node=OtherNode(supersegmentp,finish_node); results=FindSuperRoute(nodes,segments,ways,relations,profile,start_node,finish_node); if(!results) continue; result=FindResult(results,finish_node,finish_segment); if(result && (distance_t)result->score==DISTANCE(supersegmentp->distance)) { FreeResultsList(results); #if DEBUG printf(" -- found super-segment = %"Pindex_t"\n",IndexSegment(segments,supersegmentp)); #endif return(IndexSegment(segments,supersegmentp)); } if(results) FreeResultsList(results); } supersegmentp=NextSegment(segments,supersegmentp,finish_node); /* finish_node cannot be a fake node (must be a super-node) */ } #if DEBUG printf(" -- no super-segment = %"Pindex_t"\n",finish_segment); #endif return(finish_segment); } /*++++++++++++++++++++++++++++++++++++++ Find the shortest route between two super-nodes using only normal nodes. This is effectively the same function as is used in superx.c when finding super-segments initially. Results *FindSuperRoute Returns a set of results. Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. Profile *profile The profile containing the transport type, speeds and allowed highways. index_t start_node The start node. index_t finish_node The finish node. ++++++++++++++++++++++++++++++++++++++*/ static Results *FindSuperRoute(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,index_t start_node,index_t finish_node) { Results *results; Queue *queue; Result *result1,*result2; #if DEBUG printf(" FindSuperRoute(...,start_node=%"Pindex_t" finish_node=%"Pindex_t")\n",start_node,finish_node); #endif /* Create the list of results and insert the first node into the queue */ results=NewResultsList(8); queue=NewQueueList(8); result1=InsertResult(results,start_node,NO_SEGMENT); InsertInQueue(queue,result1,0); /* Loop across all nodes in the queue */ while((result1=PopFromQueue(queue))) { Node *node1p=NULL; Segment *segment2p; index_t node1,seg1; node1=result1->node; seg1=result1->segment; node1p=LookupNode(nodes,node1,4); /* node1 cannot be a fake node */ /* Loop across all segments */ segment2p=FirstSegment(segments,node1p,4); /* node1 cannot be a fake node */ while(segment2p) { Node *node2p=NULL; index_t node2,seg2; score_t cumulative_score; /* must be a normal segment */ if(!IsNormalSegment(segment2p)) goto endloop; /* must obey one-way restrictions */ if(IsOnewayTo(segment2p,node1)) { Way *way2p; if(profile->allow!=Transports_Bicycle) goto endloop; way2p=LookupWay(ways,segment2p->way,2); if(!(way2p->type&Highway_CycleBothWays)) goto endloop; } seg2=IndexSegment(segments,segment2p); /* must not perform U-turn */ if(seg1==seg2) goto endloop; node2=OtherNode(segment2p,node1); node2p=LookupNode(nodes,node2,4); /* node2 cannot be a fake node */ /* must not pass over super-node */ if(node2!=finish_node && IsSuperNode(node2p)) goto endloop; /* Specifically looking for the shortest route to emulate superx.c */ cumulative_score=result1->score+(score_t)DISTANCE(segment2p->distance); result2=FindResult(results,node2,seg2); if(!result2) /* New end node/segment combination */ { result2=InsertResult(results,node2,seg2); result2->prev=result1; result2->score=cumulative_score; } else if(cumulative_scorescore) /* New score for end node/segment combination is better */ { result2->prev=result1; result2->segment=seg2; result2->score=cumulative_score; } else goto endloop; /* don't route beyond a super-node. */ if(!IsSuperNode(node2p)) InsertInQueue(queue,result2,result2->score); endloop: segment2p=NextSegment(segments,segment2p,node1); } } FreeQueueList(queue); #if DEBUG Result *s=FirstResult(results); while(s) { if(s->node==finish_node) { printf(" -------- super-route\n"); print_debug_route(nodes,segments,results,FindResult(results,s->node,s->segment),8,-1); } s=NextResult(results,s); } #endif return(results); } /*++++++++++++++++++++++++++++++++++++++ Find all routes from a specified node to any super-node. Results *FindStartRoutes Returns a set of results. Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. Profile *profile The profile containing the transport type, speeds and allowed highways. index_t start_node The start node. index_t prev_segment The previous segment before the start node. index_t finish_node The finish node. ++++++++++++++++++++++++++++++++++++++*/ static Results *FindStartRoutes(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,index_t start_node,index_t prev_segment,index_t finish_node) { Results *results; Queue *queue,*superqueue; Result *result1,*result2; Result *start_result,*finish_result=NULL; score_t total_score=INF_SCORE; int nsuper=0,force_uturn=0; #if DEBUG printf(" FindStartRoutes(...,start_node=%"Pindex_t" prev_segment=%"Pindex_t" finish_node=%"Pindex_t")\n",start_node,prev_segment,finish_node); #endif #if !DEBUG && !defined(LIBROUTINO) if(!option_quiet) printf_first("Finding Start Route: Nodes checked = 0"); #endif /* Create the list of results and insert the first node into the queue */ results=NewResultsList(8); queue=NewQueueList(8); superqueue=NewQueueList(8); start_result=InsertResult(results,start_node,prev_segment); InsertInQueue(queue,start_result,0); /* Check for barrier at start waypoint - must perform U-turn */ if(prev_segment!=NO_SEGMENT && !IsFakeNode(start_node)) { Node *startp=LookupNode(nodes,start_node,1); if(!(startp->allow&profile->allow)) force_uturn=1; } /* Loop across all nodes in the queue */ while((result1=PopFromQueue(queue))) { Node *node1p=NULL; Segment *segment2p; index_t node1,seg1,seg1r; index_t turnrelation=NO_RELATION; /* score must be better than current best score */ if(result1->score>=total_score) continue; node1=result1->node; seg1=result1->segment; if(IsFakeSegment(seg1)) seg1r=IndexRealSegment(seg1); else seg1r=seg1; if(!IsFakeNode(node1)) node1p=LookupNode(nodes,node1,1); /* lookup if a turn restriction applies */ if(profile->turns && node1p && IsTurnRestrictedNode(node1p)) turnrelation=FindFirstTurnRelation2(relations,node1,seg1r); /* Loop across all segments */ if(IsFakeNode(node1)) segment2p=FirstFakeSegment(node1); else segment2p=FirstSegment(segments,node1p,1); while(segment2p) { Node *node2p=NULL; Way *way2p; index_t node2,seg2,seg2r; score_t segment_pref,segment_score,cumulative_score; int i; node2=OtherNode(segment2p,node1); /* need this here because we use node2 at the end of the loop */ /* must be a normal segment */ if(!IsNormalSegment(segment2p)) goto endloop; /* must obey one-way restrictions (unless profile allows) */ if(profile->oneway && IsOnewayTo(segment2p,node1)) { if(profile->allow!=Transports_Bicycle) goto endloop; way2p=LookupWay(ways,segment2p->way,1); if(!(way2p->type&Highway_CycleBothWays)) goto endloop; } if(IsFakeNode(node1) || IsFakeNode(node2)) { seg2 =IndexFakeSegment(segment2p); seg2r=IndexRealSegment(seg2); } else { seg2 =IndexSegment(segments,segment2p); seg2r=seg2; } /* must perform U-turn in special cases */ if(node1==start_node && force_uturn) { if(seg2r!=result1->segment) goto endloop; } else /* must not perform U-turn (unless profile allows) */ if(profile->turns && (seg1==seg2 || seg1==seg2r || seg1r==seg2 || (seg1r==seg2r && IsFakeUTurn(seg1,seg2)))) goto endloop; /* must obey turn relations */ if(turnrelation!=NO_RELATION && !IsTurnAllowed(relations,turnrelation,node1,seg1r,seg2r,profile->allow)) goto endloop; way2p=LookupWay(ways,segment2p->way,1); /* mode of transport must be allowed on the highway */ if(!(way2p->allow&profile->allow)) goto endloop; /* must obey weight restriction (if exists) */ if(way2p->weight && way2p->weightweight) goto endloop; /* must obey height/width/length restriction (if exists) */ if((way2p->height && way2p->heightheight) || (way2p->width && way2p->width width ) || (way2p->length && way2p->lengthlength)) goto endloop; segment_pref=profile->highway[HIGHWAY(way2p->type)]; /* highway preferences must allow this highway */ if(segment_pref==0) goto endloop; for(i=1;ifile.props & PROPERTIES(i)) { if(way2p->props & PROPERTIES(i)) segment_pref*=profile->props_yes[i]; else segment_pref*=profile->props_no[i]; } /* profile preferences must allow this highway */ if(segment_pref==0) goto endloop; if(!IsFakeNode(node2)) node2p=LookupNode(nodes,node2,2); /* mode of transport must be allowed through node2 unless it is the final node */ if(node2p && node2!=finish_node && !(node2p->allow&profile->allow)) goto endloop; /* calculate the score for the segment and cumulative */ if(option_quickest==0) segment_score=(score_t)DISTANCE(segment2p->distance)/segment_pref; else segment_score=(score_t)Duration(segment2p,way2p,profile)/segment_pref; /* prefer not to follow two fake segments when one would do (special case) */ if(IsFakeSegment(seg2)) segment_score*=1.01f; cumulative_score=result1->score+segment_score; /* score must be better than current best score (if finish node already found) */ if(cumulative_score>=total_score) goto endloop; /* find whether the node/segment combination already exists */ result2=FindResult(results,node2,seg2); if(!result2) /* New end node/segment combination */ { result2=InsertResult(results,node2,seg2); result2->prev=result1; result2->score=cumulative_score; if(node2p && IsSuperNode(node2p)) nsuper++; } else if(cumulative_scorescore) /* New score for end node/segment combination is better */ { result2->prev=result1; result2->score=cumulative_score; } else goto endloop; if(node2==finish_node) { if(!finish_result) { Result *result3; while((result3=PopFromQueue(superqueue))) InsertInQueue(queue,result3,result3->score); } if(cumulative_scorescore); else if(node2p && IsSuperNode(node2p)) InsertInQueue(superqueue,result2,result2->score); endloop: if(IsFakeNode(node1)) segment2p=NextFakeSegment(segment2p,node1); else if(IsFakeNode(node2)) segment2p=NULL; /* cannot call NextSegment() with a fake segment */ else { segment2p=NextSegment(segments,segment2p,node1); if(!segment2p && IsFakeNode(finish_node)) segment2p=ExtraFakeSegment(node1,finish_node); } } } FreeQueueList(queue); FreeQueueList(superqueue); /* Check it worked */ if(results->number==1 || (nsuper==0 && !finish_result)) { #if DEBUG printf(" Failed (%d results, %d super)\n",results->number,nsuper); #endif #if !DEBUG && !defined(LIBROUTINO) if(!option_quiet) printf_last("Found Start Route: Nodes checked = %d - Fail",results->number); #endif FreeResultsList(results); return(NULL); } /* Turn the route round and fill in the start and finish information */ results->start_node =start_result->node; results->prev_segment=start_result->segment; if(finish_result) { FixForwardRoute(results,finish_result); results->finish_node =finish_result->node; results->last_segment=finish_result->segment; } #if DEBUG Result *s=FirstResult(results); while(s) { if(s->node==finish_node || (!IsFakeNode(s->node) && IsSuperNode(LookupNode(nodes,s->node,1)))) { printf(" -------- possible start route\n"); print_debug_route(nodes,segments,results,FindResult(results,s->node,s->segment),4,-1); } s=NextResult(results,s); } #endif #if !DEBUG && !defined(LIBROUTINO) if(!option_quiet) printf_last("Found Start Route: Nodes checked = %d",results->number); #endif return(results); } /*++++++++++++++++++++++++++++++++++++++ Find all routes from any super-node to a specific node (by working backwards from the specific node to all super-nodes). Results *FindFinishRoutes Returns a set of results. Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. Profile *profile The profile containing the transport type, speeds and allowed highways. index_t finish_node The finishing node. ++++++++++++++++++++++++++++++++++++++*/ static Results *FindFinishRoutes(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,index_t finish_node) { Results *results,*finish_results; Queue *queue; Result *result1,*result2; Result *finish_result; #if DEBUG printf(" FindFinishRoutes(...,finish_node=%"Pindex_t")\n",finish_node); #endif #if !DEBUG && !defined(LIBROUTINO) if(!option_quiet) printf_first("Finding Finish Route: Nodes checked = 0"); #endif /* Create the results and insert the finish node into the queue */ finish_results=NewResultsList(2); results=NewResultsList(8); queue=NewQueueList(8); finish_result=InsertResult(finish_results,finish_node,NO_SEGMENT); InsertInQueue(queue,finish_result,0); /* Loop across all nodes in the queue */ while((result1=PopFromQueue(queue))) { Node *node1p=NULL; Segment *segment1p,*segment2p; Way *way1p; index_t real_node1,node1,seg1,seg1r; index_t turnrelation=NO_RELATION; score_t segment1_pref,segment1_score=0; int i; real_node1=result1->node; seg1=result1->segment; if(seg1!=NO_SEGMENT && IsFakeSegment(seg1)) seg1r=IndexRealSegment(seg1); else seg1r=seg1; if(seg1!=NO_SEGMENT) { if(IsFakeSegment(seg1)) segment1p=LookupFakeSegment(seg1); else segment1p=LookupSegment(segments,seg1,1); } if(seg1==NO_SEGMENT) node1=real_node1; else node1=OtherNode(segment1p,real_node1); if(!IsFakeNode(node1)) node1p=LookupNode(nodes,node1,1); /* mode of transport must be allowed through node1 */ if(seg1!=NO_SEGMENT) if(node1p && !(node1p->allow&profile->allow)) continue; if(seg1!=NO_SEGMENT) { way1p=LookupWay(ways,segment1p->way,1); segment1_pref=profile->highway[HIGHWAY(way1p->type)]; for(i=1;ifile.props & PROPERTIES(i)) { if(way1p->props & PROPERTIES(i)) segment1_pref*=profile->props_yes[i]; else segment1_pref*=profile->props_no[i]; } /* calculate the score for the segment */ if(option_quickest==0) segment1_score=(score_t)DISTANCE(segment1p->distance)/segment1_pref; else segment1_score=(score_t)Duration(segment1p,way1p,profile)/segment1_pref; /* prefer not to follow two fake segments when one would do (special case) */ if(IsFakeSegment(seg1)) segment1_score*=1.01f; } /* Loop across all segments */ if(IsFakeNode(node1)) segment2p=FirstFakeSegment(node1); else segment2p=FirstSegment(segments,node1p,1); while(segment2p) { Node *node2p=NULL; Way *way2p; index_t node2,seg2,seg2r; score_t segment_pref,cumulative_score; /* must be a normal segment unless node1 is a super-node (see below). */ if((IsFakeNode(node1) || !IsSuperNode(node1p)) && !IsNormalSegment(segment2p)) goto endloop; /* must be a super segment if node1 is a super-node to give starting super-segment for finding middle route. */ if((!IsFakeNode(node1) && IsSuperNode(node1p)) && !IsSuperSegment(segment2p)) goto endloop; /* must obey one-way restrictions (unless profile allows) */ if(profile->oneway && IsOnewayFrom(segment2p,node1)) /* working backwards => disallow oneway *from* node1 */ { if(profile->allow!=Transports_Bicycle) goto endloop; way2p=LookupWay(ways,segment2p->way,1); if(!(way2p->type&Highway_CycleBothWays)) goto endloop; } node2=OtherNode(segment2p,node1); if(IsFakeNode(node1) || IsFakeNode(node2)) { seg2 =IndexFakeSegment(segment2p); seg2r=IndexRealSegment(seg2); } else { seg2 =IndexSegment(segments,segment2p); seg2r=seg2; } if(seg1!=NO_SEGMENT) { /* must not perform U-turn (unless profile allows) */ if(profile->turns) { if(IsFakeNode(node1) || !IsSuperNode(node1p)) { if(seg1==seg2 || seg1==seg2r || seg1r==seg2 || (seg1r==seg2r && IsFakeUTurn(seg1,seg2))) goto endloop; } else { index_t superseg=FindSuperSegment(nodes,segments,ways,relations,profile,node1,seg1); if(seg2==superseg) goto endloop; } } /* lookup if a turn restriction applies */ if(profile->turns && node1p && IsTurnRestrictedNode(node1p)) turnrelation=FindFirstTurnRelation2(relations,node1,seg2r); /* must obey turn relations */ if(turnrelation!=NO_RELATION && !IsTurnAllowed(relations,turnrelation,node1,seg2r,seg1r,profile->allow)) goto endloop; } way2p=LookupWay(ways,segment2p->way,1); /* mode of transport must be allowed on the highway */ if(!(way2p->allow&profile->allow)) goto endloop; /* must obey weight restriction (if exists) */ if(way2p->weight && way2p->weightweight) goto endloop; /* must obey height/width/length restriction (if exist) */ if((way2p->height && way2p->heightheight) || (way2p->width && way2p->width width ) || (way2p->length && way2p->lengthlength)) goto endloop; segment_pref=profile->highway[HIGHWAY(way2p->type)]; /* highway preferences must allow this highway */ if(segment_pref==0) goto endloop; for(i=1;ifile.props & PROPERTIES(i)) { if(way2p->props & PROPERTIES(i)) segment_pref*=profile->props_yes[i]; else segment_pref*=profile->props_no[i]; } /* profile preferences must allow this highway */ if(segment_pref==0) goto endloop; if(!IsFakeNode(node2)) node2p=LookupNode(nodes,node2,2); /* mode of transport must be allowed through node2 */ if(node2p && !(node2p->allow&profile->allow)) goto endloop; cumulative_score=result1->score+segment1_score; /* find whether the node/segment combination already exists */ result2=FindResult(results,node1,seg2); /* adding in reverse => node1,seg2 */ if(!result2) /* New end node */ { result2=InsertResult(results,node1,seg2); /* adding in reverse => node1,seg2 */ if(result1!=finish_result) result2->next=result1; /* working backwards */ result2->score=cumulative_score; } else if(cumulative_scorescore) /* New end node is better */ { if(result1!=finish_result) result2->next=result1; /* working backwards */ result2->score=cumulative_score; } else goto endloop; if(IsFakeNode(node1) || !IsSuperNode(node1p)) InsertInQueue(queue,result2,result2->score); endloop: if(IsFakeNode(node1)) segment2p=NextFakeSegment(segment2p,node1); else segment2p=NextSegment(segments,segment2p,node1); } } FreeQueueList(queue); FreeResultsList(finish_results); /* Check it worked */ if(results->number==0) { #if DEBUG printf(" Failed\n"); #endif #if !DEBUG && !defined(LIBROUTINO) if(!option_quiet) printf_last("Found Finish Route: Nodes checked = %d - Fail",results->number); #endif FreeResultsList(results); return(NULL); } /* Update the results */ results->finish_node=finish_node; #if DEBUG Result *s=FirstResult(results); while(s) { if(!IsFakeNode(s->node) && IsSuperNode(LookupNode(nodes,s->node,1))) { printf(" -------- possible finish route\n"); print_debug_route(nodes,segments,results,FindResult(results,s->node,s->segment),4,+1); } s=NextResult(results,s); } #endif #if !DEBUG && !defined(LIBROUTINO) if(!option_quiet) printf_last("Found Finish Route: Nodes checked = %d",results->number); #endif return(results); } /*++++++++++++++++++++++++++++++++++++++ Create an optimum route given the set of super-nodes to follow. Results *CombineRoutes Returns the results from joining the super-nodes. Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. Profile *profile The profile containing the transport type, speeds and allowed highways. Results *begin The set of results for the start of the route. Results *middle The set of results from the super-node route. Results *end The set of results for the end of the route. ++++++++++++++++++++++++++++++++++++++*/ static Results *CombineRoutes(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,Results *begin,Results *middle,Results *end) { Result *midres,*comres; Results *combined; #if DEBUG printf(" CombineRoutes(...,[begin has %d nodes],[middle has %d nodes],[end has %d nodes])\n",begin->number,middle->number,end->number); #endif #if !DEBUG && !defined(LIBROUTINO) if(!option_quiet) printf_first("Finding Combined Route: Nodes = 0"); #endif combined=NewResultsList(10); /* Insert the start point */ midres=FindResult(middle,middle->start_node,middle->prev_segment); comres=InsertResult(combined,begin->start_node,begin->prev_segment); /* Insert the start of the route */ if(begin->number>1) { Result *begres; if(midres->prev==NO_RESULT) begres=FindResult(begin,midres->node,midres->segment); else begres=FindResult(begin,midres->prev->node,midres->prev->segment); FixForwardRoute(begin,begres); begres=FindResult(begin,begin->start_node,begin->prev_segment); begres=begres->next; do { Result *comres2; comres2=InsertResult(combined,begres->node,begres->segment); comres2->score=begres->score; comres2->prev=comres; begres=begres->next; comres=comres2; } while(begres); } /* Sort out the combined route */ while(midres->next && midres->next!=NO_RESULT) { Results *results=FindNormalRoute(nodes,segments,ways,relations,profile,comres->node,comres->segment,midres->next->node); Result *result; if(!results) { #if !DEBUG && !defined(LIBROUTINO) if(!option_quiet) printf_last("Found Combined Route: Nodes = %d - Fail",combined->number); #endif FreeResultsList(combined); return(NULL); } result=FindResult(results,midres->node,comres->segment); result=result->next; /* * midres midres->next * = = * ---*----------------------------------* = middle * * ---*----.----.----.----.----.----.----* = results * = * result * * ---*----.----.----.----.----.----.----* = combined * = = * comres comres2 */ do { Result *comres2; comres2=InsertResult(combined,result->node,result->segment); comres2->score=midres->score+result->score; comres2->prev=comres; result=result->next; comres=comres2; } while(result); FreeResultsList(results); midres=midres->next; midres->score=comres->score; } /* Insert the end of the route */ if(end->number>0) { Result *endres=FindResult(end,midres->node,midres->segment); while(endres->next) { Result *comres2; comres2=InsertResult(combined,endres->next->node,endres->next->segment); comres2->score=comres->score+(endres->score-endres->next->score); comres2->prev=comres; endres=endres->next; comres=comres2; } } /* Turn the route round and fill in the start and finish information */ FixForwardRoute(combined,comres); combined->start_node=begin->start_node; combined->prev_segment=begin->prev_segment; combined->finish_node=comres->node; combined->last_segment=comres->segment; #if DEBUG printf(" -------- combined route (end-to-end)\n"); print_debug_route(nodes,segments,combined,NULL,4,+1); #endif #if !DEBUG && !defined(LIBROUTINO) if(!option_quiet) printf_last("Found Combined Route: Nodes = %d",combined->number); #endif return(combined); } /*++++++++++++++++++++++++++++++++++++++ Fix the forward route (i.e. setup next pointers for forward path from prev nodes on reverse path). Results *results The set of results to update. Result *finish_result The result for the finish point. ++++++++++++++++++++++++++++++++++++++*/ static void FixForwardRoute(Results *results,Result *finish_result) { Result *current_result=finish_result; do { Result *result; if(current_result->prev && current_result->prev!=NO_RESULT) { result=current_result->prev; result->next=current_result; current_result=result; } else current_result=NULL; } while(current_result); } #if DEBUG /*++++++++++++++++++++++++++++++++++++++ Print a debug message about a route. Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Results *results The set of results to print. Result *first The result to start with or NULL for the first result. int indent The number of spaces of indentation at the beginning. int direction The direction of travel, -1 = backwards (prev) or +1 = forwards (next). ++++++++++++++++++++++++++++++++++++++*/ static void print_debug_route(Nodes *nodes,Segments *segments,Results *results,Result *first,int indent,int direction) { Result *r; char *spaces=" "; if(first) r=first; else r=FindResult(results,results->start_node,results->prev_segment); while(r && r!=NO_RESULT) { int is_fake_node=IsFakeNode(r->node); int is_super_node=is_fake_node?0:IsSuperNode(LookupNode(nodes,r->node,4)); int is_no_segment=(r->segment==NO_SEGMENT); int is_fake_segment=is_no_segment?0:IsFakeSegment(r->segment); int is_super_segment=is_no_segment||is_fake_segment?0:IsSuperSegment(LookupSegment(segments,r->segment,4)); int is_normal_segment=is_no_segment||is_fake_segment?0:IsNormalSegment(LookupSegment(segments,r->segment,4)); int is_start=r->node==results->start_node&&r->segment==results->prev_segment; int is_finish=r->node==results->finish_node; printf("%s %s node=%10"Pindex_t" segment=%10"Pindex_t" score=%8.3f (%s-node,%s-segment)%s%s\n", &spaces[8-indent], (is_start||is_finish?"*":(direction==-1?"^":"v")), r->node,r->segment,r->score, (is_fake_node?" fake":(is_super_node?" super":"normal")), (is_no_segment?" no":(is_fake_segment?" fake":(is_super_segment&&is_normal_segment?" both":(is_super_segment?" super":"normal")))), (is_start?" [start]":""), (is_finish?" [finish]":"")); if(direction==-1) r=r->prev; else r=r->next; } } #endif routino-3.2/src/sorting.h 644 233 144 4227 12524714232 10661 0/*************************************** Header file for sorting function prototypes Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2012 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef SORTING_H #define SORTING_H /*+ To stop multiple inclusions. +*/ #include #include "types.h" /* Constants */ /*+ The type, size and alignment of variable to store the variable length +*/ #define FILESORT_VARINT unsigned short #define FILESORT_VARSIZE sizeof(FILESORT_VARINT) #define FILESORT_VARALIGN sizeof(void*) /* Macros */ /*+ A macro to use as a last resort in the comparison function to preserve on the output the input order of items that compare equally. +*/ #define FILESORT_PRESERVE_ORDER(a,b) ( ((a)<(b)) ? -1 : +1) /* Functions in sorting.c */ index_t filesort_fixed(int fd_in,int fd_out,size_t itemsize,int (*pre_sort_function)(void*,index_t), int (*compare_function)(const void*,const void*), int (*post_sort_function)(void*,index_t)); index_t filesort_vary(int fd_in,int fd_out,int (*pre_sort_function)(void*,index_t), int (*compare_function)(const void*,const void*), int (*post_sort_function)(void*,index_t)); void filesort_heapsort(void **datap,size_t nitems,int(*compare)(const void*, const void*)); #endif /* SORTING_H */ routino-3.2/src/segments.c 644 233 144 24067 12563633052 11043 0/*************************************** Segment data type functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include "types.h" #include "nodes.h" #include "segments.h" #include "ways.h" #include "fakes.h" #include "files.h" #include "profiles.h" /*++++++++++++++++++++++++++++++++++++++ Load in a segment list from a file. Segments *LoadSegmentList Returns the segment list that has just been loaded. const char *filename The name of the file to load. ++++++++++++++++++++++++++++++++++++++*/ Segments *LoadSegmentList(const char *filename) { Segments *segments; segments=(Segments*)malloc(sizeof(Segments)); #if !SLIM segments->data=MapFile(filename); /* Copy the SegmentsFile structure from the loaded data */ segments->file=*((SegmentsFile*)segments->data); /* Set the pointers in the Segments structure. */ segments->segments=(Segment*)(segments->data+sizeof(SegmentsFile)); #else segments->fd=SlimMapFile(filename); /* Copy the SegmentsFile header structure from the loaded data */ SlimFetch(segments->fd,&segments->file,sizeof(SegmentsFile),0); segments->cache=NewSegmentCache(); #ifndef LIBROUTINO log_malloc(segments->cache,sizeof(*segments->cache)); #endif #endif return(segments); } /*++++++++++++++++++++++++++++++++++++++ Destroy the segment list. Segments *segments The segment list to destroy. ++++++++++++++++++++++++++++++++++++++*/ void DestroySegmentList(Segments *segments) { #if !SLIM segments->data=UnmapFile(segments->data); #else segments->fd=SlimUnmapFile(segments->fd); #ifndef LIBROUTINO log_free(segments->cache); #endif DeleteSegmentCache(segments->cache); #endif free(segments); } /*++++++++++++++++++++++++++++++++++++++ Find the closest segment from a specified node heading in a particular direction and optionally profile. index_t FindClosestSegmentHeading Returns the closest heading segment index. Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. index_t node1 The node to start from. double heading The desired heading from the node. Profile *profile The profile of the mode of transport (or NULL). ++++++++++++++++++++++++++++++++++++++*/ index_t FindClosestSegmentHeading(Nodes *nodes,Segments *segments,Ways *ways,index_t node1,double heading,Profile *profile) { Segment *segmentp; index_t best_seg=NO_SEGMENT; double best_difference=360; if(IsFakeNode(node1)) segmentp=FirstFakeSegment(node1); else { Node *nodep=LookupNode(nodes,node1,3); segmentp=FirstSegment(segments,nodep,1); } while(segmentp) { Way *wayp; index_t node2,seg2; double bearing,difference; node2=OtherNode(segmentp,node1); /* need this here because we use node2 at the end of the loop */ if(!IsNormalSegment(segmentp)) goto endloop; if(IsFakeNode(node1) || IsFakeNode(node2)) seg2=IndexFakeSegment(segmentp); else seg2=IndexSegment(segments,segmentp); wayp=LookupWay(ways,segmentp->way,1); if(!(wayp->allow&profile->allow)) goto endloop; if(profile->oneway && IsOnewayFrom(segmentp,node1)) { if(profile->allow!=Transports_Bicycle) goto endloop; if(!(wayp->type&Highway_CycleBothWays)) goto endloop; } bearing=BearingAngle(nodes,segmentp,node1); difference=(heading-bearing); if(difference<-180) difference+=360; if(difference> 180) difference-=360; if(difference<0) difference=-difference; if(differencespeed; speed_t speed2=profile->speed[HIGHWAY(wayp->type)]; distance_t distance=DISTANCE(segmentp->distance); if(speed1==0) { if(speed2==0) return(hours_to_duration(10)); else return distance_speed_to_duration(distance,speed2); } else /* if(speed1!=0) */ { if(speed2==0) return distance_speed_to_duration(distance,speed1); else if(speed1<=speed2) return distance_speed_to_duration(distance,speed1); else return distance_speed_to_duration(distance,speed2); } } /*++++++++++++++++++++++++++++++++++++++ Calculate the angle to turn at a junction from segment1 to segment2 at node. double TurnAngle Returns a value in the range -180 to +180 indicating the angle to turn. Nodes *nodes The set of nodes to use. Segment *segment1p The current segment. Segment *segment2p The next segment. index_t node The node at which they join. Straight ahead is zero, turning to the right is positive (e.g. +90 degrees) and turning to the left is negative (e.g. -90 degrees). Angles are calculated using flat Cartesian lat/long grid approximation (after scaling longitude due to latitude). ++++++++++++++++++++++++++++++++++++++*/ double TurnAngle(Nodes *nodes,Segment *segment1p,Segment *segment2p,index_t node) { double lat1,latm,lat2; double lon1,lonm,lon2; double angle1,angle2,angle; index_t node1,node2; node1=OtherNode(segment1p,node); node2=OtherNode(segment2p,node); if(IsFakeNode(node1)) GetFakeLatLong(node1,&lat1,&lon1); else GetLatLong(nodes,node1,NULL,&lat1,&lon1); if(IsFakeNode(node)) GetFakeLatLong(node,&latm,&lonm); else GetLatLong(nodes,node,NULL,&latm,&lonm); if(IsFakeNode(node2)) GetFakeLatLong(node2,&lat2,&lon2); else GetLatLong(nodes,node2,NULL,&lat2,&lon2); angle1=atan2((lonm-lon1)*cos(latm),(latm-lat1)); angle2=atan2((lon2-lonm)*cos(latm),(lat2-latm)); angle=angle2-angle1; angle=radians_to_degrees(angle); if(angle<-180) angle+=360; if(angle> 180) angle-=360; return(angle); } /*++++++++++++++++++++++++++++++++++++++ Calculate the bearing of a segment when heading to the given node. double BearingAngle Returns a value in the range 0 to 359 indicating the bearing. Nodes *nodes The set of nodes to use. Segment *segmentp The segment. index_t node The node to finish. Angles are calculated using flat Cartesian lat/long grid approximation (after scaling longitude due to latitude). ++++++++++++++++++++++++++++++++++++++*/ double BearingAngle(Nodes *nodes,Segment *segmentp,index_t node) { double lat1,lat2; double lon1,lon2; double angle; index_t node1,node2; node1=node; node2=OtherNode(segmentp,node); if(IsFakeNode(node1)) GetFakeLatLong(node1,&lat1,&lon1); else GetLatLong(nodes,node1,NULL,&lat1,&lon1); if(IsFakeNode(node2)) GetFakeLatLong(node2,&lat2,&lon2); else GetLatLong(nodes,node2,NULL,&lat2,&lon2); angle=atan2((lat2-lat1),(lon2-lon1)*cos(lat1)); angle=radians_to_degrees(angle); angle=270-angle; if(angle< 0) angle+=360; if(angle>360) angle-=360; return(angle); } routino-3.2/src/osmparser.h 644 233 144 4264 12311642544 11210 0/*************************************** Header file for OSM parser function prototype. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2014 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef OSMPARSER_H #define OSMPARSER_H /*+ To stop multiple inclusions. +*/ #include #include "typesx.h" #include "xmlparse.h" #include "tagging.h" /* Constants */ #define MODE_NORMAL 3 #define MODE_CREATE 2 #define MODE_MODIFY 1 #define MODE_DELETE -1 /* Functions in osmxmlparse.c */ int ParseOSMFile(int fd,NodesX *OSMNodes,WaysX *OSMWays,RelationsX *OSMRelations); int ParseOSCFile(int fd,NodesX *OSMNodes,WaysX *OSMWays,RelationsX *OSMRelations); /* Functions in osmpbfparse.c */ int ParsePBFFile(int fd,NodesX *OSMNodes,WaysX *OSMWays,RelationsX *OSMRelations); /* Functions in osmo5mparse.c */ int ParseO5MFile(int fd,NodesX *OSMNodes,WaysX *OSMWays,RelationsX *OSMRelations); int ParseO5CFile(int fd,NodesX *OSMNodes,WaysX *OSMWays,RelationsX *OSMRelations); /* Functions in osmparser.c */ void InitialiseParser(NodesX *OSMNodes,WaysX *OSMWays,RelationsX *OSMRelations); void CleanupParser(void); void AddWayRefs(int64_t node_id); void AddRelationRefs(int64_t node_id,int64_t way_id,int64_t relation_id,const char *role); void ProcessNodeTags(TagList *tags,int64_t node_id,double latitude,double longitude,int mode); void ProcessWayTags(TagList *tags,int64_t way_id, int mode); void ProcessRelationTags(TagList *tags,int64_t relation_id,int mode); #endif /* OSMPARSER_H */ routino-3.2/src/output.c 644 233 144 136704 12725335177 10607 0/*************************************** Routing output generator. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2016 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include #include #include #include "types.h" #include "nodes.h" #include "segments.h" #include "ways.h" #include "relations.h" #include "functions.h" #include "fakes.h" #include "translations.h" #include "results.h" #include "xmlparse.h" #include "routino.h" /*+ To help when debugging +*/ #define DEBUG 0 /* Constants */ #define ROUTINO_POINT_IGNORE -1 /*+ Ignore this point. +*/ /* Global variables */ /*+ The option to calculate the quickest route insted of the shortest. +*/ int option_quickest=0; /*+ The options to select the format of the file output. +*/ int option_file_html=0,option_file_gpx_track=0,option_file_gpx_route=0,option_file_text=0,option_file_text_all=0,option_file_stdout=0; /*+ The options to select the format of the linked list output. +*/ int option_list_html=0,option_list_html_all=0,option_list_text=0,option_list_text_all=0; /* Local variables */ /*+ Heuristics for determining if a junction is important. +*/ static const char junction_other_way[Highway_Count][Highway_Count]= { /* M, T, P, S, T, U, R, S, T, C, P, S, F = Way type of route not taken */ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, /* Motorway */ { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, /* Trunk */ { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, /* Primary */ { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, /* Secondary */ { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1 }, /* Tertiary */ { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1 }, /* Unclassified */ { 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1 }, /* Residential */ { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1 }, /* Service */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1 }, /* Track */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1 }, /* Cycleway */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, /* Path */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, /* Steps */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, /* Ferry */ }; /*++++++++++++++++++++++++++++++++++++++ Print the optimum route between two nodes. Routino_Output *PrintRoute Returns a linked list of data structures representing the route if required. Results **results The set of results to print (consecutive in array even if not consecutive waypoints). int nresults The number of results in the list. Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. Profile *profile The profile containing the transport type, speeds and allowed highways. Translation *translation The set of translated strings. ++++++++++++++++++++++++++++++++++++++*/ Routino_Output *PrintRoute(Results **results,int nresults,Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,Profile *profile,Translation *translation) { FILE *htmlfile=NULL,*gpxtrackfile=NULL,*gpxroutefile=NULL,*textfile=NULL,*textallfile=NULL; Routino_Output *listhead=NULL,*htmllist=NULL, *textlist=NULL,*textalllist=NULL,*htmlalllist=NULL; char *prev_bearing=NULL,*prev_wayname=NULL,*prev_waynameraw=NULL; index_t prev_node=NO_NODE; distance_t cum_distance=0; duration_t cum_duration=0; int point=0; int point_count=0; int roundabout=0; /* Open the files */ if(option_file_stdout) { if(option_file_html) htmlfile =stdout; if(option_file_gpx_track) gpxtrackfile=stdout; if(option_file_gpx_route) gpxroutefile=stdout; if(option_file_text) textfile =stdout; if(option_file_text_all) textallfile =stdout; } else { #if defined(_MSC_VER) || defined(__MINGW32__) const char *open_mode="wb"; #else const char *open_mode="w"; #endif if(option_quickest==0) { /* Print the result for the shortest route */ if(option_file_html) htmlfile =fopen("shortest.html",open_mode); if(option_file_gpx_track) gpxtrackfile=fopen("shortest-track.gpx",open_mode); if(option_file_gpx_route) gpxroutefile=fopen("shortest-route.gpx",open_mode); if(option_file_text) textfile =fopen("shortest.txt",open_mode); if(option_file_text_all) textallfile =fopen("shortest-all.txt",open_mode); #ifndef LIBROUTINO if(option_file_html && !htmlfile) fprintf(stderr,"Warning: Cannot open file 'shortest.html' for writing [%s].\n",strerror(errno)); if(option_file_gpx_track && !gpxtrackfile) fprintf(stderr,"Warning: Cannot open file 'shortest-track.gpx' for writing [%s].\n",strerror(errno)); if(option_file_gpx_route && !gpxroutefile) fprintf(stderr,"Warning: Cannot open file 'shortest-route.gpx' for writing [%s].\n",strerror(errno)); if(option_file_text && !textfile) fprintf(stderr,"Warning: Cannot open file 'shortest.txt' for writing [%s].\n",strerror(errno)); if(option_file_text_all && !textallfile) fprintf(stderr,"Warning: Cannot open file 'shortest-all.txt' for writing [%s].\n",strerror(errno)); #endif } else { /* Print the result for the quickest route */ if(option_file_html) htmlfile =fopen("quickest.html",open_mode); if(option_file_gpx_track) gpxtrackfile=fopen("quickest-track.gpx",open_mode); if(option_file_gpx_route) gpxroutefile=fopen("quickest-route.gpx",open_mode); if(option_file_text) textfile =fopen("quickest.txt",open_mode); if(option_file_text_all) textallfile =fopen("quickest-all.txt",open_mode); #ifndef LIBROUTINO if(option_file_html && !htmlfile) fprintf(stderr,"Warning: Cannot open file 'quickest.html' for writing [%s].\n",strerror(errno)); if(option_file_gpx_track && !gpxtrackfile) fprintf(stderr,"Warning: Cannot open file 'quickest-track.gpx' for writing [%s].\n",strerror(errno)); if(option_file_gpx_route && !gpxroutefile) fprintf(stderr,"Warning: Cannot open file 'quickest-route.gpx' for writing [%s].\n",strerror(errno)); if(option_file_text && !textfile) fprintf(stderr,"Warning: Cannot open file 'quickest.txt' for writing [%s].\n",strerror(errno)); if(option_file_text_all && !textallfile) fprintf(stderr,"Warning: Cannot open file 'quickest-all.txt' for writing [%s].\n",strerror(errno)); #endif } } /* Print the head of the files */ if(htmlfile) { fprintf(htmlfile,"\n"); fprintf(htmlfile,"\n"); if(translation->xml_copyright_creator[0] && translation->xml_copyright_creator[1]) fprintf(htmlfile,"\n",translation->xml_copyright_creator[0],translation->xml_copyright_creator[1]); if(translation->xml_copyright_source[0] && translation->xml_copyright_source[1]) fprintf(htmlfile,"\n",translation->xml_copyright_source[0],translation->xml_copyright_source[1]); if(translation->xml_copyright_license[0] && translation->xml_copyright_license[1]) fprintf(htmlfile,"\n",translation->xml_copyright_license[0],translation->xml_copyright_license[1]); fprintf(htmlfile,"\n"); fprintf(htmlfile,""); fprintf(htmlfile,translation->html_title,option_quickest?translation->xml_route_quickest:translation->xml_route_shortest); fprintf(htmlfile,"\n"); fprintf(htmlfile,"\n"); fprintf(htmlfile,"\n"); fprintf(htmlfile,"\n"); fprintf(htmlfile,"\n"); fprintf(htmlfile,"

"); fprintf(htmlfile,translation->html_title,option_quickest?translation->xml_route_quickest:translation->xml_route_shortest); fprintf(htmlfile,"

\n"); fprintf(htmlfile,"\n"); } if(gpxtrackfile) { fprintf(gpxtrackfile,"\n"); fprintf(gpxtrackfile,"\n"); fprintf(gpxtrackfile,"\n"); fprintf(gpxtrackfile,"%s : %s\n",translation->xml_copyright_creator[0],translation->xml_copyright_creator[1]); if(translation->xml_copyright_source[1]) { fprintf(gpxtrackfile,"\n",translation->xml_copyright_source[1]); if(translation->xml_copyright_license[1]) fprintf(gpxtrackfile,"%s\n",translation->xml_copyright_license[1]); fprintf(gpxtrackfile,"\n"); } fprintf(gpxtrackfile,"\n"); fprintf(gpxtrackfile,"\n"); fprintf(gpxtrackfile,""); fprintf(gpxtrackfile,translation->gpx_name,option_quickest?translation->xml_route_quickest:translation->xml_route_shortest); fprintf(gpxtrackfile,"\n"); fprintf(gpxtrackfile,""); fprintf(gpxtrackfile,translation->gpx_desc,option_quickest?translation->xml_route_quickest:translation->xml_route_shortest); fprintf(gpxtrackfile,"\n"); } if(gpxroutefile) { fprintf(gpxroutefile,"\n"); fprintf(gpxroutefile,"\n"); fprintf(gpxroutefile,"\n"); fprintf(gpxroutefile,"%s : %s\n",translation->xml_copyright_creator[0],translation->xml_copyright_creator[1]); if(translation->xml_copyright_source[1]) { fprintf(gpxroutefile,"\n",translation->xml_copyright_source[1]); if(translation->xml_copyright_license[1]) fprintf(gpxroutefile,"%s\n",translation->xml_copyright_license[1]); fprintf(gpxroutefile,"\n"); } fprintf(gpxroutefile,"\n"); fprintf(gpxroutefile,"\n"); fprintf(gpxroutefile,""); fprintf(gpxroutefile,translation->gpx_name,option_quickest?translation->xml_route_quickest:translation->xml_route_shortest); fprintf(gpxroutefile,"\n"); fprintf(gpxroutefile,""); fprintf(gpxroutefile,translation->gpx_desc,option_quickest?translation->xml_route_quickest:translation->xml_route_shortest); fprintf(gpxroutefile,"\n"); } if(textfile) { if(translation->raw_copyright_creator[0] && translation->raw_copyright_creator[1]) fprintf(textfile,"# %s : %s\n",translation->raw_copyright_creator[0],translation->raw_copyright_creator[1]); if(translation->raw_copyright_source[0] && translation->raw_copyright_source[1]) fprintf(textfile,"# %s : %s\n",translation->raw_copyright_source[0],translation->raw_copyright_source[1]); if(translation->raw_copyright_license[0] && translation->raw_copyright_license[1]) fprintf(textfile,"# %s : %s\n",translation->raw_copyright_license[0],translation->raw_copyright_license[1]); if((translation->raw_copyright_creator[0] && translation->raw_copyright_creator[1]) || (translation->raw_copyright_source[0] && translation->raw_copyright_source[1]) || (translation->raw_copyright_license[0] && translation->raw_copyright_license[1])) fprintf(textfile,"#\n"); fprintf(textfile,"#Latitude\tLongitude\tSection \tSection \tTotal \tTotal \tPoint\tTurn\tBearing\tHighway\n"); fprintf(textfile,"# \t \tDistance\tDuration\tDistance\tDuration\tType \t \t \t \n"); /* "%10.6f\t%11.6f\t%6.3f km\t%4.1f min\t%5.1f km\t%4.0f min\t%s\t %+d\t %+d\t%s\n" */ } if(textallfile) { if(translation->raw_copyright_creator[0] && translation->raw_copyright_creator[1]) fprintf(textallfile,"# %s : %s\n",translation->raw_copyright_creator[0],translation->raw_copyright_creator[1]); if(translation->raw_copyright_source[0] && translation->raw_copyright_source[1]) fprintf(textallfile,"# %s : %s\n",translation->raw_copyright_source[0],translation->raw_copyright_source[1]); if(translation->raw_copyright_license[0] && translation->raw_copyright_license[1]) fprintf(textallfile,"# %s : %s\n",translation->raw_copyright_license[0],translation->raw_copyright_license[1]); if((translation->raw_copyright_creator[0] && translation->raw_copyright_creator[1]) || (translation->raw_copyright_source[0] && translation->raw_copyright_source[1]) || (translation->raw_copyright_license[0] && translation->raw_copyright_license[1])) fprintf(textallfile,"#\n"); fprintf(textallfile,"#Latitude\tLongitude\t Node\tType\tSegment\tSegment\tTotal\tTotal \tSpeed\tBearing\tHighway\n"); fprintf(textallfile,"# \t \t \t \tDist \tDurat'n\tDist \tDurat'n\t \t \t \n"); /* "%10.6f\t%11.6f\t%8d%c\t%s\t%5.3f\t%5.2f\t%5.2f\t%5.1f\t%3d\t%4d\t%s\n" */ } /* Create the head of the linked list */ if(option_list_html) listhead=htmllist=calloc(sizeof(Routino_Output),1); if(option_list_html_all) listhead=htmlalllist=htmllist=calloc(sizeof(Routino_Output),1); if(option_list_text) listhead=textlist=calloc(sizeof(Routino_Output),1); if(option_list_text_all) listhead=textalllist=calloc(sizeof(Routino_Output),1); /* Loop through all the sections of the route and print them */ do { int first=1; int next_point=point; distance_t junc_distance=0; duration_t junc_duration=0; Result *result; #if DEBUG printf("Route section %d - waypoint %d to waypoint %d\n",point,results[point]->start_waypoint,results[point]->finish_waypoint); printf(" start_node=%"Pindex_t" prev_segment=%"Pindex_t"\n",results[point]->start_node,results[point]->prev_segment); printf(" finish_node=%"Pindex_t" last_segment=%"Pindex_t"\n",results[point]->finish_node,results[point]->last_segment); Result *r=FindResult(results[point],results[point]->start_node,results[point]->prev_segment); while(r) { printf(" node=%"Pindex_t" segment=%"Pindex_t" score=%f\n",r->node,r->segment,r->score); r=r->next; } #endif result=FindResult(results[point],results[point]->start_node,results[point]->prev_segment); /* Print the start of the segment */ if(gpxtrackfile) fprintf(gpxtrackfile,"\n"); /* Loop through all the points within a section of the route and print them */ do { double latitude,longitude; Node *resultnodep=NULL; index_t realsegment=NO_SEGMENT,next_realsegment=NO_SEGMENT; Segment *resultsegmentp=NULL,*next_resultsegmentp=NULL; Way *resultwayp=NULL,*next_resultwayp=NULL; Result *next_result; int important=ROUTINO_POINT_UNIMPORTANT; distance_t seg_distance=0; duration_t seg_duration=0; speed_t seg_speed=0; char *waynameraw=NULL,*wayname=NULL,*next_waynameraw=NULL,*next_wayname=NULL; int bearing_int=0,turn_int=0,next_bearing_int=0; char *turn=NULL,*turnraw=NULL,*next_bearing=NULL,*next_bearingraw=NULL; /* Calculate the information about this point */ if(IsFakeNode(result->node)) GetFakeLatLong(result->node,&latitude,&longitude); else { resultnodep=LookupNode(nodes,result->node,6); GetLatLong(nodes,result->node,resultnodep,&latitude,&longitude); } /* Calculate the next result */ next_result=result->next; if(!next_result) { next_point++; if(next_pointstart_node,results[next_point]->prev_segment); next_result=next_result->next; } } /* Calculate the information about this segment */ if(!first) /* not first point of a section of the route */ { if(IsFakeSegment(result->segment)) { resultsegmentp=LookupFakeSegment(result->segment); realsegment=IndexRealSegment(result->segment); } else { resultsegmentp=LookupSegment(segments,result->segment,2); realsegment=result->segment; } resultwayp=LookupWay(ways,resultsegmentp->way,1); seg_distance+=DISTANCE(resultsegmentp->distance); seg_duration+=Duration(resultsegmentp,resultwayp,profile); /* Calculate the cumulative distance/duration */ junc_distance+=seg_distance; junc_duration+=seg_duration; cum_distance+=seg_distance; cum_duration+=seg_duration; } /* Calculate the information about the next segment */ if(next_result) { if(IsFakeSegment(next_result->segment)) { next_resultsegmentp=LookupFakeSegment(next_result->segment); next_realsegment=IndexRealSegment(next_result->segment); } else { next_resultsegmentp=LookupSegment(segments,next_result->segment,1); next_realsegment=next_result->segment; } } /* Decide if this is a roundabout */ if(next_result) { next_resultwayp=LookupWay(ways,next_resultsegmentp->way,2); if(next_resultwayp->type&Highway_Roundabout) { if(roundabout==0) { roundabout++; important=ROUTINO_POINT_RB_ENTRY; } else { Segment *segmentp; if(resultnodep) segmentp=FirstSegment(segments,resultnodep,3); else segmentp=FirstFakeSegment(result->node); do { index_t othernode=OtherNode(segmentp,result->node); index_t thissegment; if(IsFakeNode(result->node)) thissegment=IndexFakeSegment(segmentp); else thissegment=IndexSegment(segments,segmentp); if(othernode!=prev_node && othernode!=next_result->node && thissegment!=realsegment && IsNormalSegment(segmentp)) { int canexit=1; if(profile->oneway && IsOnewayTo(segmentp,result->node)) { if(profile->allow!=Transports_Bicycle) canexit=0; else { Way *wayp=LookupWay(ways,segmentp->way,3); if(!(wayp->type&Highway_CycleBothWays)) canexit=0; } } if(canexit) { Way *wayp=LookupWay(ways,segmentp->way,3); if(!(wayp->type&Highway_Roundabout)) { roundabout++; important=ROUTINO_POINT_RB_NOT_EXIT; } } } if(resultnodep) segmentp=NextSegment(segments,segmentp,result->node); else segmentp=NextFakeSegment(segmentp,result->node); } while(segmentp); } } else if(roundabout) { roundabout++; important=ROUTINO_POINT_RB_EXIT; } } /* Decide if this is an important junction */ if(point_count==0) /* first point overall = Waypoint */ important=ROUTINO_POINT_WAYPOINT; else if(result->next==NULL) /* Waypoint */ important=ROUTINO_POINT_WAYPOINT; else if(first) /* first point of a section of the route */ important=ROUTINO_POINT_IGNORE; else if(roundabout) /* roundabout */ ; else if(realsegment==next_realsegment) /* U-turn */ important=ROUTINO_POINT_UTURN; else if(resultnodep && (resultnodep->flags&NODE_MINIRNDBT)) important=ROUTINO_POINT_MINI_RB; /* mini-roundabout */ else { Segment *segmentp=FirstSegment(segments,resultnodep,3); do { index_t seg=IndexSegment(segments,segmentp); if(seg!=realsegment && IsNormalSegment(segmentp)) { int cango=1; if(profile->oneway && IsOnewayTo(segmentp,result->node)) { if(profile->allow!=Transports_Bicycle) cango=0; else { Way *wayp=LookupWay(ways,segmentp->way,3); if(!(wayp->type&Highway_CycleBothWays)) cango=0; } } if(profile->turns && IsSuperNode(resultnodep) && IsTurnRestrictedNode(resultnodep)) { index_t turnrelation=FindFirstTurnRelation2(relations,result->node,realsegment); if(turnrelation!=NO_RELATION && !IsTurnAllowed(relations,turnrelation,result->node,realsegment,seg,profile->allow)) cango=0; } if(cango) { Way *wayp=LookupWay(ways,segmentp->way,3); if(seg==next_realsegment) /* the next segment that we follow */ { if(HIGHWAY(wayp->type)!=HIGHWAY(resultwayp->type)) if(importanttype)-1][HIGHWAY(wayp->type)-1]) if(importantnode); } while(segmentp); } /* Calculate the strings to be used */ if(!first && (textallfile || textalllist)) { waynameraw=WayName(ways,resultwayp); if(!*waynameraw) waynameraw=translation->raw_highway[HIGHWAY(resultwayp->type)]; bearing_int=(int)BearingAngle(nodes,resultsegmentp,result->node); seg_speed=profile->speed[HIGHWAY(resultwayp->type)]; } if(next_result && (important>ROUTINO_POINT_JUNCT_CONT || htmlalllist)) { if(!first && (htmlfile || htmllist || textfile || textlist)) { if(DISTANCE(resultsegmentp->distance)==0 || DISTANCE(next_resultsegmentp->distance)==0) turn_int=0; else turn_int=(int)TurnAngle(nodes,resultsegmentp,next_resultsegmentp,result->node); turn =translation->xml_turn[((202+turn_int)/45)%8]; turnraw=translation->notxml_turn[((202+turn_int)/45)%8]; } if(gpxroutefile || htmlfile || htmllist) { next_waynameraw=WayName(ways,next_resultwayp); if(!*next_waynameraw) next_waynameraw=translation->raw_highway[HIGHWAY(next_resultwayp->type)]; next_wayname=ParseXML_Encode_Safe_XML(next_waynameraw); } if(htmlfile || htmllist || gpxroutefile || textfile || textlist) { if(!first && DISTANCE(next_resultsegmentp->distance)==0) next_bearing_int=(int)BearingAngle(nodes,resultsegmentp,result->node); else next_bearing_int=(int)BearingAngle(nodes,next_resultsegmentp,next_result->node); next_bearing =translation->xml_heading[(4+(22+next_bearing_int)/45)%8]; next_bearingraw=translation->notxml_heading[(4+(22+next_bearing_int)/45)%8]; } } /* Print out the important points (junctions / waypoints) */ if(important>ROUTINO_POINT_JUNCT_CONT) { if(htmlfile) { char *type; if(important==ROUTINO_POINT_WAYPOINT) { type=malloc(sizeof("")+strlen(translation->html_waypoint)+1+4+sizeof("")+1); sprintf(type,"%s#%d",translation->html_waypoint, (point_count==0?results[point]->start_waypoint:results[point]->finish_waypoint)); } else if(important==ROUTINO_POINT_MINI_RB) type=translation->html_roundabout; else type=translation->html_junction; if(point_count>0) /* not the first point */ { /* *N*: *latitude* *longitude* */ fprintf(htmlfile,"
Follow *highway name* for *distance* km, *time* min [*distance* km, *time* minutes] */ fprintf(htmlfile,translation->html_segment, (roundabout>1?translation->html_roundabout:prev_wayname), distance_to_km(junc_distance),duration_to_minutes(junc_duration)); fprintf(htmlfile,translation->html_subtotal, distance_to_km(cum_distance),duration_to_minutes(cum_duration)); } /*
%d: %.6f %.6f\n", point_count+1, radians_to_degrees(latitude),radians_to_degrees(longitude)); if(point_count==0) /* first point */ { /*
Start at Waypoint, head *heading* */ fprintf(htmlfile,translation->html_start, type, next_bearing); } else if(next_result) /* middle point */ { if(roundabout>1 && important!=ROUTINO_POINT_WAYPOINT) { /*
leave roundabout, take the *Nth* exit heading *heading* */ fprintf(htmlfile,translation->html_rbnode, translation->html_roundabout, translation->xml_ordinal[roundabout-2], next_bearing); } else { /*
At *waypoint/roundabout/junction*, go *direction* heading *heading* */ fprintf(htmlfile,translation->html_node, type, turn, next_bearing); } } else /* end point */ { /*
Stop at Waypoint */ fprintf(htmlfile,translation->html_stop, type); /*
Total *distance* km, *time* minutes */ fprintf(htmlfile,translation->html_total, distance_to_km(cum_distance),duration_to_minutes(cum_duration)); } if(important==ROUTINO_POINT_WAYPOINT) free(type); } if(htmllist) { int strl; char *type; if(important==ROUTINO_POINT_WAYPOINT) { type=malloc(strlen(translation->nothtml_waypoint)+1+4+1); sprintf(type,"%s#%d",translation->nothtml_waypoint, (point_count==0?results[point]->start_waypoint:results[point]->finish_waypoint)); } else if(important==ROUTINO_POINT_MINI_RB) type=translation->nothtml_roundabout; else type=translation->nothtml_junction; if(point_count>0) /* not the first point */ { /* Follow: *highway name* for *distance* km, *time* min */ strl=strlen(translation->nothtml_segment)+ strlen(roundabout>1?translation->nothtml_roundabout:prev_waynameraw)+8+8+1; htmllist->desc2=malloc(strl); sprintf(htmllist->desc2,translation->nothtml_segment, (roundabout>1?translation->nothtml_roundabout:prev_waynameraw), distance_to_km(junc_distance),duration_to_minutes(junc_duration)); /* *distance* km, *time* minutes */ strl=strlen(translation->nothtml_subtotal)+8+8+1; htmllist->desc3=malloc(strl); sprintf(htmllist->desc3,translation->nothtml_subtotal, distance_to_km(cum_distance),duration_to_minutes(cum_duration)); if(htmlalllist) htmllist=htmlalllist; htmllist->next=calloc(sizeof(Routino_Output),1); htmllist=htmllist->next; if(htmlalllist) htmlalllist=htmllist; } htmllist->lon=longitude; htmllist->lat=latitude; htmllist->type=important; htmllist->dist=distance_to_km(cum_distance); htmllist->time=duration_to_minutes(cum_duration); if(point_count==0) /* first point */ { /* Start: At Waypoint, head *heading* */ strl=strlen(translation->nothtml_start)+ strlen(type)+strlen(next_bearingraw)+1; htmllist->desc1=malloc(strl); sprintf(htmllist->desc1,translation->nothtml_start, type, next_bearingraw); htmllist->name=strcpy(malloc(strlen(next_waynameraw)+1),next_waynameraw); } else if(next_result) /* middle point */ { if(roundabout>1 && important!=ROUTINO_POINT_WAYPOINT) { /* At: Roundabout, take the *Nth* exit heading *heading* */ strl=strlen(translation->nothtml_rbnode)+ strlen(translation->nothtml_roundabout)+strlen(translation->notxml_ordinal[roundabout-2])+strlen(next_bearingraw)+1; htmllist->desc1=malloc(strl); sprintf(htmllist->desc1,translation->nothtml_rbnode, translation->nothtml_roundabout, translation->notxml_ordinal[roundabout-2], next_bearingraw); } else { /* At: Waypoint/Roundabout/Junction, go *direction* heading *heading* */ strl=strlen(translation->nothtml_node)+ strlen(type)+strlen(turnraw)+strlen(next_bearingraw)+1; htmllist->desc1=malloc(strl); sprintf(htmllist->desc1,translation->nothtml_node, type, turnraw, next_bearingraw); } htmllist->turn=turn_int; htmllist->name=strcpy(malloc(strlen(next_waynameraw)+1),next_waynameraw); } else /* end point */ { /* Stop: At Waypoint */ strl=strlen(translation->nothtml_stop)+ strlen(type)+1; htmllist->desc1=malloc(strl); sprintf(htmllist->desc1,translation->nothtml_stop, type); /* Total: *distance* km, *time* minutes */ strl=strlen(translation->nothtml_total)+8+8+1; htmllist->desc2=malloc(strl); sprintf(htmllist->desc2,translation->nothtml_total, distance_to_km(cum_distance),duration_to_minutes(cum_duration)); htmllist->turn=turn_int; } htmllist->bearing=next_bearing_int; if(important==ROUTINO_POINT_WAYPOINT) free(type); } if(gpxroutefile) { if(point_count>0) /* not first point */ { fprintf(gpxroutefile,""); fprintf(gpxroutefile,translation->gpx_step, prev_bearing, prev_wayname, distance_to_km(junc_distance),duration_to_minutes(junc_duration)); fprintf(gpxroutefile,"\n"); } if(point_count==0) /* first point */ { fprintf(gpxroutefile,"%s%02d\n", radians_to_degrees(latitude),radians_to_degrees(longitude), translation->gpx_waypt,results[point]->start_waypoint); } else if(!next_result) /* end point */ { fprintf(gpxroutefile,"%s%02d\n", radians_to_degrees(latitude),radians_to_degrees(longitude), translation->gpx_waypt,results[point]->finish_waypoint); fprintf(gpxroutefile,""); fprintf(gpxroutefile,translation->gpx_final, distance_to_km(cum_distance),duration_to_minutes(cum_duration)); fprintf(gpxroutefile,"\n"); } else /* middle point */ { if(important==ROUTINO_POINT_WAYPOINT) fprintf(gpxroutefile,"%s%02d\n", radians_to_degrees(latitude),radians_to_degrees(longitude), translation->gpx_waypt,results[point]->finish_waypoint); else fprintf(gpxroutefile,"%s%03d\n", radians_to_degrees(latitude),radians_to_degrees(longitude), translation->gpx_trip,point_count); } } if(textfile) { char *type; if(important==ROUTINO_POINT_WAYPOINT) { type=malloc(sizeof("Waypt")+1+4+1); sprintf(type,"Waypt#%d",(point_count==0?results[point]->start_waypoint:results[point]->finish_waypoint)); } else if(important==ROUTINO_POINT_MINI_RB) type="Mini-RB"; else type="Junct"; if(point_count==0) /* first point */ { fprintf(textfile,"%10.6f\t%11.6f\t%6.3f km\t%4.1f min\t%5.1f km\t%4.0f min\t%s\t\t %+d\t%s\n", radians_to_degrees(latitude),radians_to_degrees(longitude), 0.0,0.0,0.0,0.0, type, ((22+next_bearing_int)/45+4)%8-4, next_waynameraw); } else if(!next_result) /* end point */ { fprintf(textfile,"%10.6f\t%11.6f\t%6.3f km\t%4.1f min\t%5.1f km\t%4.0f min\t%s\t\t\t\n", radians_to_degrees(latitude),radians_to_degrees(longitude), distance_to_km(junc_distance),duration_to_minutes(junc_duration), distance_to_km(cum_distance),duration_to_minutes(cum_duration), type); } else /* middle point */ { fprintf(textfile,"%10.6f\t%11.6f\t%6.3f km\t%4.1f min\t%5.1f km\t%4.0f min\t%s\t %+d\t %+d\t%s\n", radians_to_degrees(latitude),radians_to_degrees(longitude), distance_to_km(junc_distance),duration_to_minutes(junc_duration), distance_to_km(cum_distance),duration_to_minutes(cum_duration), type, (22+turn_int)/45, ((22+next_bearing_int)/45+4)%8-4, next_waynameraw); } if(important==ROUTINO_POINT_WAYPOINT) free(type); } if(textlist) { textlist->lon=longitude; textlist->lat=latitude; textlist->type=important; if(point_count==0) /* first point */ { textlist->next=calloc(sizeof(Routino_Output),1); textlist->bearing=next_bearing_int; textlist->name=strcpy(malloc(strlen(next_waynameraw)+1),next_waynameraw); } else if(!next_result) /* end point */ { textlist->next=NULL; textlist->dist=distance_to_km(cum_distance); textlist->time=duration_to_minutes(cum_duration); } else /* middle point */ { textlist->next=calloc(sizeof(Routino_Output),1); textlist->dist=distance_to_km(cum_distance); textlist->time=duration_to_minutes(cum_duration); textlist->turn=turn_int; textlist->bearing=next_bearing_int; textlist->name=strcpy(malloc(strlen(next_waynameraw)+1),next_waynameraw); } textlist=textlist->next; } junc_distance=0; junc_duration=0; if(htmlfile || htmllist || gpxroutefile) { if(prev_wayname) free(prev_wayname); if(next_wayname) prev_wayname=strcpy((char*)malloc(strlen(next_wayname)+1),next_wayname); else prev_wayname=NULL; if(prev_waynameraw) free(prev_waynameraw); if(next_waynameraw) prev_waynameraw=strcpy((char*)malloc(strlen(next_waynameraw)+1),next_waynameraw); else prev_waynameraw=NULL; } if(gpxroutefile) prev_bearing=next_bearing; if(roundabout>1) roundabout=0; } else { if(htmlalllist) { htmlalllist->next=calloc(sizeof(Routino_Output),1); htmlalllist=htmlalllist->next; htmlalllist->lon=longitude; htmlalllist->lat=latitude; htmlalllist->type=important; htmlalllist->dist=distance_to_km(cum_distance); htmlalllist->time=duration_to_minutes(cum_duration); htmlalllist->turn=turn_int; htmlalllist->bearing=next_bearing_int; } } /* Print out all of the results */ if(gpxtrackfile) fprintf(gpxtrackfile,"\n", radians_to_degrees(latitude),radians_to_degrees(longitude)); if(important>ROUTINO_POINT_IGNORE) { if(textallfile) { char *type; if(important==ROUTINO_POINT_WAYPOINT) { type=malloc(sizeof("Waypt")+1+4+1); sprintf(type,"Waypt#%d",(point_count==0?results[point]->start_waypoint:results[point]->finish_waypoint)); } else if(important==ROUTINO_POINT_UTURN) type="U-turn"; else if(important==ROUTINO_POINT_MINI_RB) type="Mini-RB"; else if(important==ROUTINO_POINT_CHANGE) type="Change"; else if(important==ROUTINO_POINT_JUNCT_CONT || important==ROUTINO_POINT_RB_NOT_EXIT) type="Junct-"; else if(important==ROUTINO_POINT_UNIMPORTANT) type="Inter"; else type="Junct"; if(point_count==0) /* first point */ { fprintf(textallfile,"%10.6f\t%11.6f\t%8d%c\t%s\t%5.3f\t%5.2f\t%5.2f\t%5.1f\t\t\t\n", radians_to_degrees(latitude),radians_to_degrees(longitude), IsFakeNode(result->node)?(NODE_FAKE-result->node):result->node, (resultnodep && IsSuperNode(resultnodep))?'*':' ',type, 0.0,0.0,0.0,0.0); } else /* not the first point */ { fprintf(textallfile,"%10.6f\t%11.6f\t%8d%c\t%s\t%5.3f\t%5.2f\t%5.2f\t%5.1f\t%3d\t%4d\t%s\n", radians_to_degrees(latitude),radians_to_degrees(longitude), IsFakeNode(result->node)?(NODE_FAKE-result->node):result->node, (resultnodep && IsSuperNode(resultnodep))?'*':' ',type, distance_to_km(seg_distance),duration_to_minutes(seg_duration), distance_to_km(cum_distance),duration_to_minutes(cum_duration), speed_to_kph(seg_speed), bearing_int, waynameraw); } if(important==ROUTINO_POINT_WAYPOINT) free(type); } if(textalllist) { if(point_count==0) /* first point */ ; else /* not the first point */ { textalllist->next=calloc(sizeof(Routino_Output),1); textalllist=textalllist->next; textalllist->dist=distance_to_km(cum_distance); textalllist->time=duration_to_minutes(cum_duration); textalllist->speed=speed_to_kph(seg_speed); textalllist->bearing=next_bearing_int; textalllist->name=strcpy(malloc(strlen(waynameraw)+1),waynameraw); } textalllist->lon=longitude; textalllist->lat=latitude; textalllist->type=important; } } if(wayname && wayname!=waynameraw) free(wayname); result=next_result; if(important>ROUTINO_POINT_JUNCT_CONT) point_count++; first=0; } while(point==next_point); /* Print the end of the segment */ if(gpxtrackfile) fprintf(gpxtrackfile,"\n"); point=next_point; if(result) prev_node=result->node; else prev_node=NO_NODE; } while(point\n"); if((translation->xml_copyright_creator[0] && translation->xml_copyright_creator[1]) || (translation->xml_copyright_source[0] && translation->xml_copyright_source[1]) || (translation->xml_copyright_license[0] && translation->xml_copyright_license[1])) { fprintf(htmlfile,"

\n"); fprintf(htmlfile,"\n"); if(translation->xml_copyright_creator[0] && translation->xml_copyright_creator[1]) fprintf(htmlfile,"
%s:%s\n",translation->xml_copyright_creator[0],translation->xml_copyright_creator[1]); if(translation->xml_copyright_source[0] && translation->xml_copyright_source[1]) fprintf(htmlfile,"
%s:%s\n",translation->xml_copyright_source[0],translation->xml_copyright_source[1]); if(translation->xml_copyright_license[0] && translation->xml_copyright_license[1]) fprintf(htmlfile,"
%s:%s\n",translation->xml_copyright_license[0],translation->xml_copyright_license[1]); fprintf(htmlfile,"
\n"); } fprintf(htmlfile,"\n"); fprintf(htmlfile,"\n"); } if(gpxtrackfile) { fprintf(gpxtrackfile,"\n"); fprintf(gpxtrackfile,"\n"); } if(gpxroutefile) { fprintf(gpxroutefile,"\n"); fprintf(gpxroutefile,"\n"); } /* Close the files */ if(!option_file_stdout) { if(htmlfile) fclose(htmlfile); if(gpxtrackfile) fclose(gpxtrackfile); if(gpxroutefile) fclose(gpxroutefile); if(textfile) fclose(textfile); if(textallfile) fclose(textallfile); } return(listhead); } routino-3.2/src/tagging.h 644 233 144 5110 12153161715 10604 0/*************************************** The data types for the tagging rules. Part of the Routino routing software. ******************/ /****************** This file Copyright 2010-2013 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef TAGGING_H #define TAGGING_H /*+ To stop multiple inclusions. +*/ #include /* Data types */ typedef struct _TaggingRuleList TaggingRuleList; /*+ A structure to contain the tagging rule/action. +*/ typedef struct _TaggingRule { int action; /*+ A flag to indicate the type of action. +*/ char *k; /*+ The tag key (or NULL). +*/ char *v; /*+ The tag value (or NULL). +*/ char *message; /*+ The message string for logerror (or NULL). +*/ TaggingRuleList *rulelist; /*+ The sub-rules belonging to this rule. +*/ } TaggingRule; /*+ A structure to contain the list of rules and associated information. +*/ struct _TaggingRuleList { TaggingRule *rules; /*+ The array of rules. +*/ int nrules; /*+ The number of rules. +*/ }; /*+ A structure to hold a list of tags to be processed. +*/ typedef struct _TagList { int ntags; /*+ The number of tags. +*/ char **k; /*+ The list of tag keys. +*/ char **v; /*+ The list of tag values. +*/ } TagList; /* Functions in tagging.c */ int ParseXMLTaggingRules(const char *filename); void DeleteXMLTaggingRules(void); TagList *NewTagList(void); void DeleteTagList(TagList *tags); void AppendTag(TagList *tags,const char *k,const char *v); void ModifyTag(TagList *tags,const char *k,const char *v); void DeleteTag(TagList *tags,const char *k); char *StringifyTag(TagList *tags); TagList *ApplyNodeTaggingRules(TagList *tags,int64_t id); TagList *ApplyWayTaggingRules(TagList *tags,int64_t id); TagList *ApplyRelationTaggingRules(TagList *tags,int64_t id); #endif /* TAGGING_H */ routino-3.2/src/xmlparse.h 644 233 144 10145 12563633052 11046 0/*************************************** A simple XML parser Part of the Routino routing software. ******************/ /****************** This file Copyright 2010-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef XMLPARSE_H #define XMLPARSE_H /*+ To stop multiple inclusions. +*/ #include #include /*+ The maximum number of attributes per tag. +*/ #define XMLPARSE_MAX_ATTRS 16 /*+ The maximum number of subtags per tag. +*/ #define XMLPARSE_MAX_SUBTAGS 16 /*+ A flag to indicate the start and/or end of a tag. +*/ #define XMLPARSE_TAG_START 1 #define XMLPARSE_TAG_END 2 /*+ A forward definition of the xmltag +*/ typedef struct _xmltag xmltag; /*+ A structure to hold the definition of a tag. +*/ struct _xmltag { const char * const name; /*+ The name of the tag - must be in lower case. +*/ const int nattributes; /*+ The number of valid attributes for the tag. +*/ const char * const attributes[XMLPARSE_MAX_ATTRS]; /*+ The valid attributes for the tag. +*/ int (*callback)(); /*+ The callback function when the tag is seen. +*/ const xmltag * const subtags[XMLPARSE_MAX_SUBTAGS]; /*+ The list of valid tags contained within this one (null terminated). +*/ }; /* XML Parser options */ #define XMLPARSE_UNKNOWN_ATTRIBUTES 0x0003 #define XMLPARSE_UNKNOWN_ATTR_ERROR 0x0000 /* Flag an error and exit. */ #define XMLPARSE_UNKNOWN_ATTR_ERRNONAME 0x0001 /* Flag an error and exit unless a namespace is specified. */ #define XMLPARSE_UNKNOWN_ATTR_WARN 0x0002 /* Warn about the problem and continue. */ #define XMLPARSE_UNKNOWN_ATTR_IGNORE 0x0003 /* Ignore the potential problem. */ #define XMLPARSE_RETURN_ATTR_ENCODED 0x0004 /* Return the XML attribute strings without decoding them. */ /* XML parser functions */ int ParseXML(int fd,const xmltag * const *tags,int options); uint64_t ParseXML_LineNumber(void); void ParseXML_SetError(const char *format, ...); char *ParseXML_GetError(void); char *ParseXML_Decode_Entity_Ref(const char *string); char *ParseXML_Decode_Char_Ref(const char *string); char *ParseXML_Encode_Safe_XML(const char *string); int ParseXML_IsInteger(const char *string); int ParseXML_IsFloating(const char *string); /* Macros to simplify the callback functions */ #define XMLPARSE_MESSAGE(tag,message) \ do \ { \ ParseXML_SetError(message " in <%s> tag.",tag); \ return(1); \ } \ while(0) #define XMLPARSE_INVALID(tag,attribute) \ do \ { \ ParseXML_SetError("Invalid value for '" #attribute "' attribute in <%s> tag.",tag); \ return(1); \ } \ while(0) #define XMLPARSE_ASSERT_STRING(tag,attribute) \ do \ { \ if(!attribute) \ { \ ParseXML_SetError("'" #attribute "' attribute must be specified in <%s> tag.",tag); \ return(1); \ } \ } \ while(0) #define XMLPARSE_ASSERT_INTEGER(tag,attribute) \ do \ { \ if(!attribute || !*attribute || !ParseXML_IsInteger(attribute)) \ { \ ParseXML_SetError("'" #attribute "' attribute must be a integer in <%s> tag.",tag); \ return(1); \ } \ } \ while(0) #define XMLPARSE_ASSERT_FLOATING(tag,attribute) \ do \ { \ if(!attribute || !*attribute || !ParseXML_IsFloating(attribute)) \ { \ ParseXML_SetError("'" #attribute "' attribute must be a number in <%s> tag.",tag); \ return(1); \ } \ } \ while(0) #endif /* XMLPARSE_H */ routino-3.2/src/routino.c 644 233 144 52607 12725333320 10711 0/*************************************** Routino library functions file. Part of the Routino routing software. ******************/ /****************** This file Copyright 2015-2016 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include "routino.h" #include "types.h" #include "nodes.h" #include "segments.h" #include "ways.h" #include "relations.h" #include "fakes.h" #include "results.h" #include "functions.h" #include "profiles.h" #include "translations.h" #include "version.h" /* Global variables */ /*+ Contains the libroutino API version number. +*/ DLL_PUBLIC const int Routino_APIVersion=ROUTINO_API_VERSION; /*+ Contains the Routino version number. +*/ DLL_PUBLIC const char *Routino_Version=ROUTINO_VERSION; /*+ Contains the error number of the most recent Routino function (one of the ROUTINO_ERROR_* values). +*/ DLL_PUBLIC int Routino_errno=ROUTINO_ERROR_NONE; /*+ The function to be called to report on the routing progress. +*/ Routino_ProgressFunc progress_func=NULL; /*+ The current state of the routing progress. +*/ double progress_value=0; /*+ Set when the progress callback returns false in the routing function. +*/ int progress_abort=0; /*+ The option to calculate the quickest route insted of the shortest. +*/ extern int option_quickest; /*+ The options to select the format of the file output. +*/ extern int option_file_html,option_file_gpx_track,option_file_gpx_route,option_file_text,option_file_text_all,option_file_stdout; /*+ The options to select the format of the linked list output. +*/ extern int option_list_html,option_list_html_all,option_list_text,option_list_text_all; /* Static variables */ static distance_t distmax=km_to_distance(1); /* Local types */ struct _Routino_Database { Nodes *nodes; Segments *segments; Ways *ways; Relations *relations; }; struct _Routino_Waypoint { index_t segment; index_t node1,node2; distance_t dist1,dist2; }; /*++++++++++++++++++++++++++++++++++++++ Check the version of the library used by the caller against the library version int Routino_Check_API_Version Returns ROUTINO_ERROR_NONE if OK or ROUTINO_ERROR_WRONG_VERSION if there is an error. int caller_version The version of the API used in the caller. This function should not be called directly, use the macro Routino_CheckAPIVersion() which takes no arguments. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC int Routino_Check_API_Version(int caller_version) { if(caller_version==Routino_APIVersion) return(ROUTINO_ERROR_NONE); else return(ROUTINO_ERROR_WRONG_API_VERSION); } /*++++++++++++++++++++++++++++++++++++++ Load a database of files for Routino to use for routing. Routino_Database *Routino_LoadDatabase Returns a pointer to the database. const char *dirname The pathname of the directory containing the database files. const char *prefix The prefix of the database files. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC Routino_Database *Routino_LoadDatabase(const char *dirname,const char *prefix) { char *nodes_filename; char *segments_filename; char *ways_filename; char *relations_filename; Routino_Database *database=NULL; nodes_filename =FileName(dirname,prefix,"nodes.mem"); segments_filename =FileName(dirname,prefix,"segments.mem"); ways_filename =FileName(dirname,prefix,"ways.mem"); relations_filename=FileName(dirname,prefix,"relations.mem"); if(!ExistsFile(nodes_filename) || !ExistsFile(nodes_filename) || !ExistsFile(nodes_filename) || !ExistsFile(nodes_filename)) Routino_errno=ROUTINO_ERROR_NO_DATABASE_FILES; else { database=calloc(sizeof(Routino_Database),1); database->nodes =LoadNodeList (nodes_filename); database->segments =LoadSegmentList (segments_filename); database->ways =LoadWayList (ways_filename); database->relations=LoadRelationList(relations_filename); } free(nodes_filename); free(segments_filename); free(ways_filename); free(relations_filename); if(!database->nodes || !database->segments || !database->ways || !database->relations) { Routino_UnloadDatabase(database); database=NULL; Routino_errno=ROUTINO_ERROR_BAD_DATABASE_FILES; } if(database) { Routino_errno=ROUTINO_ERROR_NONE; return(database); } else return(NULL); } /*++++++++++++++++++++++++++++++++++++++ Close the database files that were opened by a call to Routino_LoadDatabase(). Routino_Database *database The database to close. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC void Routino_UnloadDatabase(Routino_Database *database) { if(!database) Routino_errno=ROUTINO_ERROR_NO_DATABASE; else { if(database->nodes) DestroyNodeList (database->nodes); if(database->segments) DestroySegmentList (database->segments); if(database->ways) DestroyWayList (database->ways); if(database->relations) DestroyRelationList(database->relations); free(database); Routino_errno=ROUTINO_ERROR_NONE; } } /*++++++++++++++++++++++++++++++++++++++ Parse a Routino XML file containing profiles, must be called before selecting a profile. int Routino_ParseXMLProfiles Returns non-zero in case of an error or zero if there was no error. const char *filename The full pathname of the file to read. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC int Routino_ParseXMLProfiles(const char *filename) { int retval; retval=ParseXMLProfiles(filename,NULL,1); if(retval==1) retval=ROUTINO_ERROR_NO_PROFILES_XML; else if(retval==2) retval=ROUTINO_ERROR_BAD_PROFILES_XML; Routino_errno=retval; return(retval); } /*++++++++++++++++++++++++++++++++++++++ Return a list of the profile names that have been loaded from the XML file. char **Routino_GetProfileNames Returns a NULL terminated list of strings - all allocated. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC char **Routino_GetProfileNames(void) { Routino_errno=ROUTINO_ERROR_NONE; return(GetProfileNames()); } /*++++++++++++++++++++++++++++++++++++++ Select a specific routing profile from the set of Routino profiles that have been loaded from the XML file or NULL in case of an error. Routino_Profile *Routino_GetProfile Returns a pointer to an internal data structure - do not free. const char *name The name of the profile to select. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC Routino_Profile *Routino_GetProfile(const char *name) { Profile *profile=GetProfile(name); if(profile) Routino_errno=ROUTINO_ERROR_NONE; else Routino_errno=ROUTINO_ERROR_NO_SUCH_PROFILE; return(profile); } /*++++++++++++++++++++++++++++++++++++++ Free the internal memory that was allocated for the Routino profiles loaded from the XML file. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC void Routino_FreeXMLProfiles(void) { Routino_errno=ROUTINO_ERROR_NONE; FreeXMLProfiles(); } /*++++++++++++++++++++++++++++++++++++++ Parse a Routino XML file containing translations, must be called before selecting a translation. int Routino_ParseXMLTranslations Returns non-zero in case of an error or zero if there was no error. const char *filename The full pathname of the file to read. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC int Routino_ParseXMLTranslations(const char *filename) { int retval; retval=ParseXMLTranslations(filename,NULL,1); if(retval==1) retval=ROUTINO_ERROR_NO_TRANSLATIONS_XML; else if(retval==2) retval=ROUTINO_ERROR_BAD_TRANSLATIONS_XML; Routino_errno=retval; return(retval); } /*++++++++++++++++++++++++++++++++++++++ Return a list of the translation languages that have been loaded from the XML file. char **Routino_GetTranslationLanguages Returns a NULL terminated list of strings - all allocated. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC char **Routino_GetTranslationLanguages(void) { Routino_errno=ROUTINO_ERROR_NONE; return(GetTranslationLanguages()); } /*++++++++++++++++++++++++++++++++++++++ Return a list of the full names of the translation languages that have been loaded from the XML file. char **Routino_GetTranslationLanguageFullNames Returns a NULL terminated list of strings - all allocated. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC char **Routino_GetTranslationLanguageFullNames(void) { Routino_errno=ROUTINO_ERROR_NONE; return(GetTranslationLanguageFullNames()); } /*++++++++++++++++++++++++++++++++++++++ Select a specific translation from the set of Routino translations that have been loaded from the XML file or NULL in case of an error. Routino_Translation *Routino_GetTranslation Returns a pointer to an internal data structure - do not free. const char *language The language to select (as a country code, e.g. 'en', 'de') or an empty string for the first in the file or NULL for the built-in English version. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC Routino_Translation *Routino_GetTranslation(const char *language) { Translation *translation=GetTranslation(language); if(translation) Routino_errno=ROUTINO_ERROR_NONE; else Routino_errno=ROUTINO_ERROR_NO_SUCH_TRANSLATION; return(translation); } /*++++++++++++++++++++++++++++++++++++++ Free the internal memory that was allocated for the Routino translations loaded from the XML file. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC void Routino_FreeXMLTranslations(void) { Routino_errno=ROUTINO_ERROR_NONE; FreeXMLTranslations(); } /*++++++++++++++++++++++++++++++++++++++ Create a fully formed Routino Profile from a Routino User Profile. Routino_Profile *Routino_CreateProfileFromUserProfile Returns an allocated Routino Profile. Routino_UserProfile *profile The user specified profile to convert (not modified by this). ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC Routino_Profile *Routino_CreateProfileFromUserProfile(Routino_UserProfile *profile) { Routino_Profile *rprofile=calloc(1,sizeof(Routino_Profile)); int i; Routino_errno=ROUTINO_ERROR_NONE; if(profile->transport<=0 || profile->transport>=Transport_Count) Routino_errno=ROUTINO_ERROR_BAD_USER_PROFILE; else rprofile->transport=profile->transport; for(i=1;ihighway[i]<0 || profile->highway[i]>1) Routino_errno=ROUTINO_ERROR_BAD_USER_PROFILE; else rprofile->highway[i]=profile->highway[i]; if(profile->speed[i]<=0) Routino_errno=ROUTINO_ERROR_BAD_USER_PROFILE; else rprofile->speed[i]=kph_to_speed(profile->speed[i]); } for(i=1;iprops[i]<0 || profile->props[i]>1) Routino_errno=ROUTINO_ERROR_BAD_USER_PROFILE; else rprofile->props[i]=profile->props[i]; } if(profile->weight<=0) Routino_errno=ROUTINO_ERROR_BAD_USER_PROFILE; else rprofile->weight=tonnes_to_weight(profile->weight); if(profile->height<=0) Routino_errno=ROUTINO_ERROR_BAD_USER_PROFILE; else rprofile->height=metres_to_height(profile->height); if(profile->width<=0) Routino_errno=ROUTINO_ERROR_BAD_USER_PROFILE; else rprofile->width=metres_to_width(profile->width); if(profile->length<=0) Routino_errno=ROUTINO_ERROR_BAD_USER_PROFILE; else rprofile->length=metres_to_length(profile->length); if(Routino_errno==ROUTINO_ERROR_NONE) return(rprofile); free(rprofile); return(NULL); } /*++++++++++++++++++++++++++++++++++++++ Create a Routino User Profile from a Routino Profile loaded from an XML file. Routino_UserProfile *Routino_CreateUserProfileFromProfile Returns an allocated Routino User Profile. Routino_Profile *profile The Routino Profile to convert (not modified by this). ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC Routino_UserProfile *Routino_CreateUserProfileFromProfile(Routino_Profile *profile) { Routino_UserProfile *uprofile=calloc(1,sizeof(Routino_UserProfile)); int i; Routino_errno=ROUTINO_ERROR_NONE; uprofile->transport=profile->transport; for(i=1;ihighway[i]=profile->highway[i]; uprofile->speed[i]=speed_to_kph(profile->speed[i]); } for(i=1;iprops[i]=profile->props[i]; uprofile->weight=weight_to_tonnes(profile->weight); uprofile->height=height_to_metres(profile->height); uprofile->width=width_to_metres(profile->width); uprofile->length=length_to_metres(profile->length); return(uprofile); } /*++++++++++++++++++++++++++++++++++++++ Validates that a selected routing profile is valid for use with the selected routing database. int Routino_ValidateProfile Returns zero if OK or something else in case of an error. Routino_Database *database The Routino database to use. Routino_Profile *profile The Routino profile to validate. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC int Routino_ValidateProfile(Routino_Database *database,Routino_Profile *profile) { Routino_errno=ROUTINO_ERROR_NONE; if(UpdateProfile(profile,database->ways)) Routino_errno=ROUTINO_ERROR_PROFILE_DATABASE_ERR; return(Routino_errno); } /*++++++++++++++++++++++++++++++++++++++ Finds the nearest point in the database to the specified latitude and longitude. Routino_Waypoint *Routino_FindWaypoint Returns a pointer to a newly allocated Routino waypoint or NULL if none could be found. Routino_Database *database The Routino database to use. Routino_Profile *profile The Routino profile to use. double latitude The latitude in degrees of the point. double longitude The longitude in degrees of the point. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC Routino_Waypoint *Routino_FindWaypoint(Routino_Database *database,Routino_Profile *profile,double latitude,double longitude) { distance_t dist; Routino_Waypoint *waypoint; if(!database) { Routino_errno=ROUTINO_ERROR_NO_DATABASE; return(NULL); } if(!profile) { Routino_errno=ROUTINO_ERROR_NO_PROFILE; return(NULL); } if(!profile->allow) { Routino_errno=ROUTINO_ERROR_NOTVALID_PROFILE; return(NULL); } waypoint=calloc(sizeof(Routino_Waypoint),1); waypoint->segment=FindClosestSegment(database->nodes,database->segments,database->ways, degrees_to_radians(latitude),degrees_to_radians(longitude),distmax,profile, &dist,&waypoint->node1,&waypoint->node2,&waypoint->dist1,&waypoint->dist2); if(waypoint->segment==NO_SEGMENT) { free(waypoint); Routino_errno=ROUTINO_ERROR_NO_NEARBY_HIGHWAY; return(NULL); } Routino_errno=ROUTINO_ERROR_NONE; return(waypoint); } /*++++++++++++++++++++++++++++++++++++++ Calculate a route using a loaded database, chosen profile, chosen translation and set of waypoints. Routino_Output *Routino_CalculateRoute Returns the head of a linked list of route data (if requested) or NULL. Routino_Database *database The loaded database to use. Routino_Profile *profile The chosen routing profile to use. Routino_Translation *translation The chosen translation information to use. Routino_Waypoint **waypoints The set of waypoints. int nwaypoints The number of waypoints. int options The set of routing options (ROUTINO_ROUTE_*) ORed together. Routino_ProgressFunc progress A function to be called occasionally to report progress or NULL. ++++++++++++++++++++++++++++++++++++++*/ DLL_PUBLIC Routino_Output *Routino_CalculateRoute(Routino_Database *database,Routino_Profile *profile,Routino_Translation *translation, Routino_Waypoint **waypoints,int nwaypoints,int options,Routino_ProgressFunc progress) { int first_waypoint,last_waypoint,this_waypoint,nwaypoints_routed,inc_dec_waypoint,start_waypoint,finish_waypoint=-1; index_t start_node,finish_node=NO_NODE; index_t join_segment=NO_SEGMENT; Results **results; Routino_Output *output=NULL; /* Check the input data */ if(!database) { Routino_errno=ROUTINO_ERROR_NO_DATABASE; return(NULL); } if(!profile) { Routino_errno=ROUTINO_ERROR_NO_PROFILE; return(NULL); } if(!profile->allow) { Routino_errno=ROUTINO_ERROR_NOTVALID_PROFILE; return(NULL); } if(!translation) { Routino_errno=ROUTINO_ERROR_NO_TRANSLATION; return(NULL); } /* Extract the options */ if(options&ROUTINO_ROUTE_QUICKEST) option_quickest=1; else option_quickest=0; if(options&ROUTINO_ROUTE_FILE_HTML) option_file_html=1; else option_file_html=0; if(options&ROUTINO_ROUTE_FILE_GPX_TRACK) option_file_gpx_track=1; else option_file_gpx_track=0; if(options&ROUTINO_ROUTE_FILE_GPX_ROUTE) option_file_gpx_route=1; else option_file_gpx_route=0; if(options&ROUTINO_ROUTE_FILE_TEXT) option_file_text=1; else option_file_text=0; if(options&ROUTINO_ROUTE_FILE_TEXT_ALL) option_file_text_all=1; else option_file_text_all=0; if(options&ROUTINO_ROUTE_FILE_STDOUT) option_file_stdout=1; else option_file_stdout=0; if(option_file_stdout && (option_file_html+option_file_gpx_track+option_file_gpx_route+option_file_text+option_file_text_all)!=1) { Routino_errno=ROUTINO_ERROR_BAD_OPTIONS; return(NULL); } if(options&ROUTINO_ROUTE_LIST_HTML) option_list_html=1; else option_list_html=0; if(options&ROUTINO_ROUTE_LIST_HTML_ALL) option_list_html_all=1; else option_list_html_all=0; if(options&ROUTINO_ROUTE_LIST_TEXT) option_list_text=1; else option_list_text=0; if(options&ROUTINO_ROUTE_LIST_TEXT_ALL) option_list_text_all=1; else option_list_text_all=0; if((option_list_html+option_list_html_all+option_list_text+option_list_text_all)>1) { Routino_errno=ROUTINO_ERROR_BAD_OPTIONS; return(NULL); } /* Set up the progress callback */ progress_func=progress; progress_value=0.0; progress_abort=0; /* Check for loop and reverse options */ if(options&ROUTINO_ROUTE_LOOP) nwaypoints_routed=nwaypoints+1; else nwaypoints_routed=nwaypoints; if(options&ROUTINO_ROUTE_REVERSE) { first_waypoint=nwaypoints_routed-1; last_waypoint=0; inc_dec_waypoint=-1; } else { first_waypoint=0; last_waypoint=nwaypoints_routed-1; inc_dec_waypoint=1; } /* Loop through all pairs of waypoints */ results=calloc(sizeof(Results*),nwaypoints); for(this_waypoint=first_waypoint;this_waypoint!=(last_waypoint+inc_dec_waypoint);this_waypoint+=inc_dec_waypoint) { int waypoint=this_waypoint%nwaypoints; int waypoint_count=(this_waypoint-first_waypoint)*inc_dec_waypoint; if(progress_func) { progress_value=(double)waypoint_count/(double)(nwaypoints_routed+1); if(!progress_func(progress_value)) { Routino_errno=ROUTINO_ERROR_PROGRESS_ABORTED; goto tidy_and_exit; } } start_waypoint=finish_waypoint; start_node=finish_node; finish_waypoint=waypoint+1; finish_node=CreateFakes(database->nodes,database->segments,finish_waypoint, LookupSegment(database->segments,waypoints[waypoint]->segment,1), waypoints[waypoint]->node1,waypoints[waypoint]->node2,waypoints[waypoint]->dist1,waypoints[waypoint]->dist2); if(waypoint_count==0) continue; results[waypoint_count-1]=CalculateRoute(database->nodes,database->segments,database->ways,database->relations, profile,start_node,join_segment,finish_node,start_waypoint,finish_waypoint); if(!results[waypoint_count-1]) { if(progress_func && progress_abort) Routino_errno=ROUTINO_ERROR_PROGRESS_ABORTED; else Routino_errno=ROUTINO_ERROR_NO_ROUTE_1-1+start_waypoint; goto tidy_and_exit; } join_segment=results[waypoint_count-1]->last_segment; } if(progress_func) { progress_value=(double)this_waypoint/(double)(nwaypoints_routed+1); if(!progress_func(progress_value)) { Routino_errno=ROUTINO_ERROR_PROGRESS_ABORTED; goto tidy_and_exit; } } /* Print the route */ output=PrintRoute(results,nwaypoints_routed-1,database->nodes,database->segments,database->ways,database->relations,profile,translation); if(progress_func && !progress_func(1.0)) { Routino_errno=ROUTINO_ERROR_PROGRESS_ABORTED; goto tidy_and_exit; } /* Tidy up and exit */ tidy_and_exit: DeleteFakeNodes(); for(this_waypoint=0;this_waypointnext; if(output->name) free(output->name); if(output->desc1) free(output->desc1); if(output->desc2) free(output->desc2); if(output->desc3) free(output->desc3); free(output); output=next; } } routino-3.2/src/ways.c 644 233 144 6601 12563633051 10152 0/*************************************** Way data type functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include "ways.h" #include "files.h" /*++++++++++++++++++++++++++++++++++++++ Load in a way list from a file. Ways *LoadWayList Returns the way list. const char *filename The name of the file to load. ++++++++++++++++++++++++++++++++++++++*/ Ways *LoadWayList(const char *filename) { Ways *ways; ways=(Ways*)malloc(sizeof(Ways)); #if !SLIM ways->data=MapFile(filename); /* Copy the WaysFile structure from the loaded data */ ways->file=*((WaysFile*)ways->data); /* Set the pointers in the Ways structure. */ ways->ways =(Way *)(ways->data+sizeof(WaysFile)); ways->names=(char*)(ways->data+sizeof(WaysFile)+ways->file.number*sizeof(Way)); #else ways->fd=SlimMapFile(filename); /* Copy the WaysFile header structure from the loaded data */ SlimFetch(ways->fd,&ways->file,sizeof(WaysFile),0); ways->namesoffset=sizeof(WaysFile)+ways->file.number*sizeof(Way); memset(ways->ncached,0,sizeof(ways->ncached)); ways->cache=NewWayCache(); #ifndef LIBROUTINO log_malloc(ways->cache,sizeof(*ways->cache)); #endif #endif return(ways); } /*++++++++++++++++++++++++++++++++++++++ Destroy the way list. Ways *ways The way list to destroy. ++++++++++++++++++++++++++++++++++++++*/ void DestroyWayList(Ways *ways) { #if !SLIM ways->data=UnmapFile(ways->data); #else ways->fd=SlimUnmapFile(ways->fd); #ifndef LIBROUTINO log_free(ways->cache); #endif DeleteWayCache(ways->cache); #endif free(ways); } /*++++++++++++++++++++++++++++++++++++++ Return 0 if the two ways are the same (in respect of their types and limits), otherwise return positive or negative to allow sorting. int WaysCompare Returns a comparison. Way *way1p The first way. Way *way2p The second way. ++++++++++++++++++++++++++++++++++++++*/ int WaysCompare(Way *way1p,Way *way2p) { if(way1p==way2p) return(0); if(way1p->type!=way2p->type) return((int)way1p->type - (int)way2p->type); if(way1p->allow!=way2p->allow) return((int)way1p->allow - (int)way2p->allow); if(way1p->props!=way2p->props) return((int)way1p->props - (int)way2p->props); if(way1p->speed!=way2p->speed) return((int)way1p->speed - (int)way2p->speed); if(way1p->weight!=way2p->weight) return((int)way1p->weight - (int)way2p->weight); if(way1p->height!=way2p->height) return((int)way1p->height - (int)way2p->height); if(way1p->width!=way2p->width) return((int)way1p->width - (int)way2p->width); if(way1p->length!=way2p->length) return((int)way1p->length - (int)way2p->length); return(0); } routino-3.2/src/errorlogx.h 644 233 144 4555 12152346535 11227 0/*************************************** Header file for error log file data types and processing function prototypes. Part of the Routino routing software. ******************/ /****************** This file Copyright 2013 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef ERRORLOGX_H #define ERRORLOGX_H /*+ To stop multiple inclusions. +*/ #include #include "types.h" #include "typesx.h" /*+ A structure containing information for an error message during processing. +*/ typedef struct _ErrorLogX { latlong_t latitude; /*+ The error message latitude. +*/ latlong_t longitude; /*+ The error message longitude. +*/ uint32_t offset; /*+ The offset of the error message from the beginning of the text file. +*/ uint32_t length; /*+ The length of the error message in the text file. +*/ } ErrorLogX; /*+ A structure containing a set of error logs (memory format). +*/ typedef struct _ErrorLogsX { index_t number; /*+ The number of error logs. +*/ index_t latbins; /*+ The number of bins containing latitude. +*/ index_t lonbins; /*+ The number of bins containing longitude. +*/ ll_bin_t latzero; /*+ The bin number of the furthest south bin. +*/ ll_bin_t lonzero; /*+ The bin number of the furthest west bin. +*/ } ErrorLogsX; /* Error log processing functions in errorlogx.c */ ErrorLogsX *NewErrorLogList(void); void FreeErrorLogList(ErrorLogsX *errorlogsx); void ProcessErrorLogs(ErrorLogsX *errorlogsx,NodesX *nodesx,WaysX *waysx,RelationsX *relationsx); void SortErrorLogsGeographically(ErrorLogsX *errorlogsx); void SaveErrorLogs(ErrorLogsX *errorlogsx,char *filename); #endif /* ERRORLOGX_H */ routino-3.2/src/typesx.h 644 233 144 6725 12663652406 10545 0/*************************************** Type definitions for eXtended types. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2016 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef TYPESX_H #define TYPESX_H /*+ To stop multiple inclusions. +*/ #include #include #include #include /* Constants and macros for handling them */ /*+ An undefined node ID. +*/ #define NO_NODE_ID ((node_t)~0) /*+ An undefined way ID. +*/ #define NO_WAY_ID ((way_t)~0) /*+ An undefined relation ID. +*/ #define NO_RELATION_ID ((relation_t)~0) /*+ The maximum number of segments per node (used to size temporary storage). +*/ #define MAX_SEG_PER_NODE 64 /* Bit mask macro types and functions */ #define BitMask uint32_t #define LengthBitMask(xx) (1+(xx)/32) #define AllocBitMask(xx) (BitMask*)calloc(LengthBitMask(xx),sizeof(BitMask)) #define ClearAllBits(xx,yy) memset((xx), 0,(1+(yy)/32)*sizeof(BitMask)) #define SetAllBits(xx,yy) memset((xx),~0,(1+(yy)/32)*sizeof(BitMask)) #define ClearBit(xx,yy) (xx)[(yy)/32]&=~(((BitMask)1)<<((yy)%32)) #define SetBit(xx,yy) (xx)[(yy)/32]|= (((BitMask)1)<<((yy)%32)) #define IsBitSet(xx,yy) ((xx)[(yy)/32]& (((BitMask)1)<<((yy)%32))) /* Simple Types */ /*+ A node identifier - must be at least as large as index_t. +*/ typedef uint64_t node_t; /*+ A way identifier - must be at least as large as index_t. +*/ typedef uint32_t way_t; /*+ A relation identifier - must be at least as large as index_t. +*/ typedef uint32_t relation_t; /*+ A printf formatting string for a node_t type (this should match the node_t definition above). +*/ #define Pnode_t PRIu64 /* PRIu32 and PRIu64 are defined in intypes.h */ /*+ A printf formatting string for a way_t type (this should match the way_t definition above). +*/ #define Pway_t PRIu32 /* PRIu32 and PRIu64 are defined in intypes.h */ /*+ A printf formatting string for a relation_t type (this should match the relation_t definition above). +*/ #define Prelation_t PRIu32 /* PRIu32 and PRIu64 are defined in intypes.h */ /* Enumerated types */ /*+ Turn restrictions. +*/ typedef enum _TurnRestriction { TurnRestrict_None =0, TurnRestrict_no_right_turn, TurnRestrict_no_left_turn, TurnRestrict_no_u_turn, TurnRestrict_no_straight_on, TurnRestrict_only_right_turn, TurnRestrict_only_left_turn, TurnRestrict_only_straight_on } TurnRestriction; /* Data structures */ typedef struct _NodeX NodeX; typedef struct _NodesX NodesX; typedef struct _SegmentX SegmentX; typedef struct _SegmentsX SegmentsX; typedef struct _WayX WayX; typedef struct _WaysX WaysX; typedef struct _RouteRelX RouteRelX; typedef struct _TurnRelX TurnRelX; typedef struct _RelationsX RelationsX; #endif /* TYPESX_H */ routino-3.2/src/ways.h 644 233 144 12344 12663133354 10202 0/*************************************** A header file for the ways. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2016 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef WAYS_H #define WAYS_H /*+ To stop multiple inclusions. +*/ #include #include #include "types.h" #include "cache.h" #include "files.h" /* Data structures */ /*+ A structure containing a single way (members ordered to minimise overall size). +*/ struct _Way { index_t name; /*+ The offset of the name of the way in the names array. +*/ transports_t allow; /*+ The type of traffic allowed on the way. +*/ highway_t type; /*+ The highway type of the way. +*/ properties_t props; /*+ The properties of the way. +*/ speed_t speed; /*+ The defined maximum speed limit of the way. +*/ weight_t weight; /*+ The defined maximum weight of traffic on the way. +*/ height_t height; /*+ The defined maximum height of traffic on the way. +*/ width_t width; /*+ The defined maximum width of traffic on the way. +*/ length_t length; /*+ The defined maximum length of traffic on the way. +*/ }; /*+ A structure containing the header from the file. +*/ typedef struct _WaysFile { index_t number; /*+ The number of ways. +*/ highways_t highways; /*+ The types of highways that were seen when parsing. +*/ transports_t allow; /*+ The types of traffic that were seen when parsing. +*/ properties_t props; /*+ The properties that were seen when parsing. +*/ } WaysFile; /*+ A structure containing a set of ways (and pointers to mmap file). +*/ struct _Ways { WaysFile file; /*+ The header data from the file. +*/ #if !SLIM char *data; /*+ The memory mapped data. +*/ Way *ways; /*+ An array of ways. +*/ char *names; /*+ An array of characters containing the names. +*/ #else int fd; /*+ The file descriptor for the file. +*/ offset_t namesoffset; /*+ The offset of the names within the file. +*/ Way cached[3]; /*+ Two cached nodes read from the file in slim mode. +*/ char *ncached[3]; /*+ The cached way name. +*/ WayCache *cache; /*+ A RAM cache of ways read from the file. +*/ #endif }; /* Functions in ways.c */ Ways *LoadWayList(const char *filename); void DestroyWayList(Ways *ways); int WaysCompare(Way *way1p,Way *way2p); /* Macros and inline functions */ #if !SLIM /*+ Return a Way* pointer given a set of ways and an index. +*/ #define LookupWay(xxx,yyy,zzz) (&(xxx)->ways[yyy]) /*+ Return the name of a way given the Way pointer and a set of ways. +*/ #define WayName(xxx,yyy) (&(xxx)->names[(yyy)->name]) #else static inline Way *LookupWay(Ways *ways,index_t index,int position); static inline char *WayName(Ways *ways,Way *wayp); CACHE_NEWCACHE_PROTO(Way) CACHE_DELETECACHE_PROTO(Way) CACHE_FETCHCACHE_PROTO(Way) CACHE_INVALIDATECACHE_PROTO(Way) /* Data type */ CACHE_STRUCTURE(Way) /* Inline functions */ CACHE_NEWCACHE(Way) CACHE_DELETECACHE(Way) CACHE_FETCHCACHE(Way) CACHE_INVALIDATECACHE(Way) /*++++++++++++++++++++++++++++++++++++++ Find the Way information for a particular way. Way *LookupWay Returns a pointer to the cached way information. Ways *ways The set of ways to use. index_t index The index of the way. int position The position in the cache to store the value. ++++++++++++++++++++++++++++++++++++++*/ static inline Way *LookupWay(Ways *ways,index_t index,int position) { ways->cached[position-1]=*FetchCachedWay(ways->cache,index,ways->fd,sizeof(WaysFile)); return(&ways->cached[position-1]); } /*++++++++++++++++++++++++++++++++++++++ Find the name of a way. char *WayName Returns a pointer to the name of the way. Ways *ways The set of ways to use. Way *wayp The Way pointer. ++++++++++++++++++++++++++++++++++++++*/ static inline char *WayName(Ways *ways,Way *wayp) { int position=(int)(wayp-ways->cached); int n=0; if(!ways->ncached[position]) ways->ncached[position]=(char*)malloc(64); while(!SlimFetch(ways->fd,ways->ncached[position]+n,64,ways->namesoffset+wayp->name+n)) { int i; for(i=n;incached[position][i]==0) goto exitloop; n+=64; ways->ncached[position]=(char*)realloc((void*)ways->ncached[position],n+64); } exitloop: return(ways->ncached[position]); } #endif #endif /* WAYS_H */ routino-3.2/src/logerror.c 644 233 144 11432 12563633053 11042 0/*************************************** Error logging functions Part of the Routino routing software. ******************/ /****************** This file Copyright 2013, 2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include "typesx.h" #include "files.h" #include "logging.h" /* Global variables */ /*+ The name of the error log file. +*/ char *errorlogfilename=NULL; /*+ The name of the binary error log file. +*/ char *errorbinfilename=NULL; /* Local variables (re-initialised by open_errorlog() function) */ /*+ The file handle for the error log file. +*/ static FILE *errorlogfile=NULL; /*+ The file descriptor for the binary error log file. +*/ static int errorbinfile=-1; /*+ The offset of the error message in the error log file. +*/ static offset_t errorfileoffset=0; /*++++++++++++++++++++++++++++++++++++++ Create the error log file. const char *filename The name of the file to create. int append The option to append to an existing file. int bin The option to enable a binary log file. ++++++++++++++++++++++++++++++++++++++*/ void open_errorlog(const char *filename,int append,int bin) { /* Text log file */ errorlogfilename=(char*)malloc(strlen(filename)+8); strcpy(errorlogfilename,filename); #if defined(_MSC_VER) || defined(__MINGW32__) errorlogfile=fopen(errorlogfilename,append?"ab":"wb"); #else errorlogfile=fopen(errorlogfilename,append?"a" :"w" ); #endif if(!errorlogfile) { fprintf(stderr,"Cannot open file '%s' for writing [%s].\n",errorlogfilename,strerror(errno)); exit(EXIT_FAILURE); } /* Binary log file */ if(bin) { errorbinfilename=(char*)malloc(strlen(filename)+8); sprintf(errorbinfilename,"%s.tmp",filename); errorfileoffset=0; if(append) { if(ExistsFile(filename)) errorfileoffset=SizeFile(filename); errorbinfile=OpenFileBufferedAppend(errorbinfilename); } else errorbinfile=OpenFileBufferedNew(errorbinfilename); } else errorbinfile=-1; } /*++++++++++++++++++++++++++++++++++++++ Close the error log file. ++++++++++++++++++++++++++++++++++++++*/ void close_errorlog(void) { if(errorlogfile) { fclose(errorlogfile); if(errorbinfile!=-1) CloseFileBuffered(errorbinfile); } } /*++++++++++++++++++++++++++++++++++++++ Log a message to the error log file. const char *format The format string. ... The other arguments. ++++++++++++++++++++++++++++++++++++++*/ void logerror(const char *format, ...) { va_list ap; if(!errorlogfile) return; va_start(ap,format); errorfileoffset+=vfprintf(errorlogfile,format,ap); va_end(ap); } /*++++++++++++++++++++++++++++++++++++++ Store the node information in the binary log file for this message. node_t logerror_node Returns the node identifier. node_t id The node identifier. ++++++++++++++++++++++++++++++++++++++*/ node_t logerror_node(node_t id) { if(errorbinfile!=-1) { ErrorLogObject error={0}; error.id=id; error.type='N'; error.offset=errorfileoffset; WriteFileBuffered(errorbinfile,&error,sizeof(ErrorLogObject)); } return(id); } /*++++++++++++++++++++++++++++++++++++++ Store the way information in the binary log file for this message. way_t logerror_way Returns the way identifier. way_t id The way identifier. ++++++++++++++++++++++++++++++++++++++*/ way_t logerror_way(way_t id) { if(errorbinfile!=-1) { ErrorLogObject error={0}; error.id=id; error.type='W'; error.offset=errorfileoffset; WriteFileBuffered(errorbinfile,&error,sizeof(ErrorLogObject)); } return(id); } /*++++++++++++++++++++++++++++++++++++++ Store the relation information in the binary log file for this message. relation_t logerror_relation Returns the relation identifier. relation_t id The relation identifier. ++++++++++++++++++++++++++++++++++++++*/ relation_t logerror_relation(relation_t id) { if(errorbinfile!=-1) { ErrorLogObject error={0}; error.id=id; error.type='R'; error.offset=errorfileoffset; WriteFileBuffered(errorbinfile,&error,sizeof(ErrorLogObject)); } return(id); } routino-3.2/src/nodesx.c 644 233 144 53131 12563633051 10507 0/*************************************** Extented Node data type functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include "types.h" #include "nodes.h" #include "typesx.h" #include "nodesx.h" #include "segmentsx.h" #include "waysx.h" #include "files.h" #include "logging.h" #include "sorting.h" /* Global variables */ /*+ The command line '--tmpdir' option or its default value. +*/ extern char *option_tmpdirname; /* Local variables */ /*+ Temporary file-local variables for use by the sort functions (re-initialised for each sort). +*/ static NodesX *sortnodesx; static latlong_t lat_min,lat_max,lon_min,lon_max; /* Local functions */ static int sort_by_id(NodeX *a,NodeX *b); static int deduplicate_and_index_by_id(NodeX *nodex,index_t index); static int update_id(NodeX *nodex,index_t index); static int sort_by_lat_long(NodeX *a,NodeX *b); static int index_by_lat_long(NodeX *nodex,index_t index); /*++++++++++++++++++++++++++++++++++++++ Allocate a new node list (create a new file or open an existing one). NodesX *NewNodeList Returns a pointer to the node list. int append Set to 1 if the file is to be opened for appending. int readonly Set to 1 if the file is to be opened for reading. ++++++++++++++++++++++++++++++++++++++*/ NodesX *NewNodeList(int append,int readonly) { NodesX *nodesx; nodesx=(NodesX*)calloc(1,sizeof(NodesX)); logassert(nodesx,"Failed to allocate memory (try using slim mode?)"); /* Check calloc() worked */ nodesx->filename =(char*)malloc(strlen(option_tmpdirname)+32); nodesx->filename_tmp=(char*)malloc(strlen(option_tmpdirname)+40); /* allow %p to be up to 20 bytes */ sprintf(nodesx->filename ,"%s/nodesx.parsed.mem",option_tmpdirname); sprintf(nodesx->filename_tmp,"%s/nodesx.%p.tmp" ,option_tmpdirname,(void*)nodesx); if(append || readonly) if(ExistsFile(nodesx->filename)) { offset_t size; size=SizeFile(nodesx->filename); nodesx->number=size/sizeof(NodeX); RenameFile(nodesx->filename,nodesx->filename_tmp); } if(append) nodesx->fd=OpenFileBufferedAppend(nodesx->filename_tmp); else if(!readonly) nodesx->fd=OpenFileBufferedNew(nodesx->filename_tmp); else nodesx->fd=-1; #if SLIM nodesx->cache=NewNodeXCache(); log_malloc(nodesx->cache,sizeof(*nodesx->cache)); #endif return(nodesx); } /*++++++++++++++++++++++++++++++++++++++ Free a node list. NodesX *nodesx The set of nodes to be freed. int keep If set then the results file is to be kept. ++++++++++++++++++++++++++++++++++++++*/ void FreeNodeList(NodesX *nodesx,int keep) { if(keep) RenameFile(nodesx->filename_tmp,nodesx->filename); else DeleteFile(nodesx->filename_tmp); free(nodesx->filename); free(nodesx->filename_tmp); if(nodesx->idata) { log_free(nodesx->idata); free(nodesx->idata); } if(nodesx->gdata) { log_free(nodesx->gdata); free(nodesx->gdata); } if(nodesx->pdata) { log_free(nodesx->pdata); free(nodesx->pdata); } if(nodesx->super) { log_free(nodesx->super); free(nodesx->super); } #if SLIM log_free(nodesx->cache); DeleteNodeXCache(nodesx->cache); #endif free(nodesx); } /*++++++++++++++++++++++++++++++++++++++ Append a single node to an unsorted node list. NodesX *nodesx The set of nodes to modify. node_t id The node identifier from the original OSM data. double latitude The latitude of the node. double longitude The longitude of the node. transports_t allow The allowed traffic types through the node. nodeflags_t flags The flags to set for this node. ++++++++++++++++++++++++++++++++++++++*/ void AppendNodeList(NodesX *nodesx,node_t id,double latitude,double longitude,transports_t allow,nodeflags_t flags) { NodeX nodex; nodex.id=id; nodex.latitude =radians_to_latlong(latitude); nodex.longitude=radians_to_latlong(longitude); nodex.allow=allow; nodex.flags=flags; WriteFileBuffered(nodesx->fd,&nodex,sizeof(NodeX)); nodesx->number++; logassert(nodesx->numberfd!=-1) nodesx->fd=CloseFileBuffered(nodesx->fd); } /*++++++++++++++++++++++++++++++++++++++ Find a particular node index. index_t IndexNodeX Returns the index of the extended node with the specified id. NodesX *nodesx The set of nodes to use. node_t id The node id to look for. ++++++++++++++++++++++++++++++++++++++*/ index_t IndexNodeX(NodesX *nodesx,node_t id) { index_t start=0; index_t end=nodesx->number-1; index_t mid; if(nodesx->number==0) /* No nodes */ return(NO_NODE); if(ididata[start]) /* Key is before start */ return(NO_NODE); if(id>nodesx->idata[end]) /* Key is after end */ return(NO_NODE); /* Binary search - search key exact match only is required. * * # <- start | Check mid and move start or end if it doesn't match * # | * # | Since an exact match is wanted we can set end=mid-1 * # <- mid | or start=mid+1 because we know that mid doesn't match. * # | * # | Eventually either end=start or end=start+1 and one of * # <- end | start or end is the wanted one. */ do { mid=(start+end)/2; /* Choose mid point */ if(nodesx->idata[mid]idata[mid]>id) /* Mid point is too high */ end=mid?(mid-1):mid; else /* Mid point is correct */ return(mid); } while((end-start)>1); if(nodesx->idata[start]==id) /* Start is correct */ return(start); if(nodesx->idata[end]==id) /* End is correct */ return(end); return(NO_NODE); } /*++++++++++++++++++++++++++++++++++++++ Sort the node list. NodesX *nodesx The set of nodes to modify. ++++++++++++++++++++++++++++++++++++++*/ void SortNodeList(NodesX *nodesx) { int fd; index_t xnumber; /* Print the start message */ printf_first("Sorting Nodes"); /* Re-open the file read-only and a new file writeable */ fd=ReplaceFileBuffered(nodesx->filename_tmp,&nodesx->fd); /* Allocate the array of indexes */ nodesx->idata=(node_t*)malloc(nodesx->number*sizeof(node_t)); log_malloc(nodesx->idata,nodesx->number*sizeof(node_t)); logassert(nodesx->idata,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ /* Sort the nodes by ID and index them */ xnumber=nodesx->number; sortnodesx=nodesx; nodesx->number=filesort_fixed(nodesx->fd,fd,sizeof(NodeX),NULL, (int (*)(const void*,const void*))sort_by_id, (int (*)(void*,index_t))deduplicate_and_index_by_id); nodesx->knumber=nodesx->number; /* Close the files */ nodesx->fd=CloseFileBuffered(nodesx->fd); CloseFileBuffered(fd); /* Print the final message */ printf_last("Sorted Nodes: Nodes=%"Pindex_t" Duplicates=%"Pindex_t,xnumber,xnumber-nodesx->number); } /*++++++++++++++++++++++++++++++++++++++ Sort the nodes into id order. int sort_by_id Returns the comparison of the id fields. NodeX *a The first extended node. NodeX *b The second extended node. ++++++++++++++++++++++++++++++++++++++*/ static int sort_by_id(NodeX *a,NodeX *b) { node_t a_id=a->id; node_t b_id=b->id; if(a_idb_id) return(1); else return(-FILESORT_PRESERVE_ORDER(a,b)); /* latest version first */ } /*++++++++++++++++++++++++++++++++++++++ Create the index of identifiers and discard duplicate nodes. int deduplicate_and_index_by_id Return 1 if the value is to be kept, otherwise 0. NodeX *nodex The extended node. index_t index The number of sorted nodes that have already been written to the output file. ++++++++++++++++++++++++++++++++++++++*/ static int deduplicate_and_index_by_id(NodeX *nodex,index_t index) { static node_t previd; /* internal variable (reset by first call in each sort; index==0) */ if(index==0 || nodex->id!=previd) { previd=nodex->id; if(nodex->flags&NODE_DELETED) return(0); else { sortnodesx->idata[index]=nodex->id; return(1); } } else return(0); } /*++++++++++++++++++++++++++++++++++++++ Remove any nodes that are not part of a highway. NodesX *nodesx The set of nodes to modify. WaysX *waysx The set of ways to use. int keep If set to 1 then keep the old data file otherwise delete it. ++++++++++++++++++++++++++++++++++++++*/ void RemoveNonHighwayNodes(NodesX *nodesx,WaysX *waysx,int keep) { BitMask *usednode; NodeX nodex; index_t i,total=0,highway=0,nothighway=0; int fd; /* Print the start message */ printf_first("Checking Ways for unused Nodes: Ways=0 Highway Nodes=0"); /* Allocate the node usage bitmask */ usednode=AllocBitMask(nodesx->number); log_malloc(usednode,LengthBitMask(nodesx->number)*sizeof(BitMask)); logassert(usednode,"Failed to allocate memory (try using slim mode?)"); /* Check AllocBitMask() worked */ /* Re-open the file read-only */ waysx->fd=ReOpenFileBuffered(waysx->filename_tmp); /* Loop through the ways and mark the used nodes */ for(i=0;inumber;i++) { WayX wayx; FILESORT_VARINT waysize; node_t node; ReadFileBuffered(waysx->fd,&waysize,FILESORT_VARSIZE); ReadFileBuffered(waysx->fd,&wayx,sizeof(WayX)); while(!ReadFileBuffered(waysx->fd,&node,sizeof(node_t)) && node!=NO_NODE_ID) { index_t index=IndexNodeX(nodesx,node); waysize-=sizeof(node_t); if(index!=NO_NODE) { if(!IsBitSet(usednode,index)) highway++; SetBit(usednode,index); } } waysize-=sizeof(node_t)+sizeof(WayX); SkipFileBuffered(waysx->fd,waysize); if(!((i+1)%1000)) printf_middle("Checking Ways for unused Nodes: Ways=%"Pindex_t" Highway Nodes=%"Pindex_t,i+1,highway); } /* Free the now-unneeded index */ log_free(nodesx->idata); free(nodesx->idata); nodesx->idata=NULL; /* Close the file */ waysx->fd=CloseFileBuffered(waysx->fd); /* Print the final message */ printf_last("Checked Ways for unused Nodes: Ways=%"Pindex_t" Highway Nodes=%"Pindex_t,waysx->number,highway); /* Print the start message */ printf_first("Removing unused Nodes: Nodes=0"); /* Allocate the array of indexes */ nodesx->idata=(node_t*)malloc(highway*sizeof(node_t)); log_malloc(nodesx->idata,highway*sizeof(node_t)); logassert(nodesx->idata,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ highway=0; /* Re-open the file read-only and a new file writeable */ if(keep) { RenameFile(nodesx->filename_tmp,nodesx->filename); nodesx->fd=ReOpenFileBuffered(nodesx->filename); fd=OpenFileBufferedNew(nodesx->filename_tmp); } else fd=ReplaceFileBuffered(nodesx->filename_tmp,&nodesx->fd); /* Modify the on-disk image */ while(!ReadFileBuffered(nodesx->fd,&nodex,sizeof(NodeX))) { if(!IsBitSet(usednode,total)) nothighway++; else { nodesx->idata[highway]=nodex.id; WriteFileBuffered(fd,&nodex,sizeof(NodeX)); highway++; } total++; if(!(total%10000)) printf_middle("Removing unused Nodes: Nodes=%"Pindex_t" Highway=%"Pindex_t" not-Highway=%"Pindex_t,total,highway,nothighway); } nodesx->number=highway; /* Close the files */ nodesx->fd=CloseFileBuffered(nodesx->fd); CloseFileBuffered(fd); /* Free the now-unneeded index */ log_free(usednode); free(usednode); /* Print the final message */ printf_last("Removed unused Nodes: Nodes=%"Pindex_t" Highway=%"Pindex_t" not-Highway=%"Pindex_t,total,highway,nothighway); } /*++++++++++++++++++++++++++++++++++++++ Remove any nodes that have been pruned. NodesX *nodesx The set of nodes to prune. SegmentsX *segmentsx The set of segments to use. ++++++++++++++++++++++++++++++++++++++*/ void RemovePrunedNodes(NodesX *nodesx,SegmentsX *segmentsx) { NodeX nodex; index_t total=0,pruned=0,notpruned=0; int fd; if(nodesx->number==0) return; /* Print the start message */ printf_first("Deleting Pruned Nodes: Nodes=0 Pruned=0"); /* Allocate the array of indexes */ nodesx->pdata=(index_t*)malloc(nodesx->number*sizeof(index_t)); log_malloc(nodesx->pdata,nodesx->number*sizeof(index_t)); logassert(nodesx->pdata,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ /* Re-open the file read-only and a new file writeable */ fd=ReplaceFileBuffered(nodesx->filename_tmp,&nodesx->fd); /* Modify the on-disk image */ while(!ReadFileBuffered(nodesx->fd,&nodex,sizeof(NodeX))) { if(segmentsx->firstnode[total]==NO_SEGMENT) { pruned++; nodesx->pdata[total]=NO_NODE; } else { nodesx->pdata[total]=notpruned; WriteFileBuffered(fd,&nodex,sizeof(NodeX)); notpruned++; } total++; if(!(total%10000)) printf_middle("Deleting Pruned Nodes: Nodes=%"Pindex_t" Pruned=%"Pindex_t,total,pruned); } nodesx->number=notpruned; /* Close the files */ nodesx->fd=CloseFileBuffered(nodesx->fd); CloseFileBuffered(fd); /* Free the no-longer required memory */ if(segmentsx->firstnode) { log_free(segmentsx->firstnode); free(segmentsx->firstnode); segmentsx->firstnode=NULL; } /* Print the final message */ printf_last("Deleted Pruned Nodes: Nodes=%"Pindex_t" Pruned=%"Pindex_t,total,pruned); } /*++++++++++++++++++++++++++++++++++++++ Sort the node list geographically. NodesX *nodesx The set of nodes to modify. ++++++++++++++++++++++++++++++++++++++*/ void SortNodeListGeographically(NodesX *nodesx) { int fd; ll_bin_t lat_min_bin,lat_max_bin,lon_min_bin,lon_max_bin; if(nodesx->number==0) return; /* Print the start message */ printf_first("Sorting Nodes Geographically"); /* Work out the range of data */ lat_min=radians_to_latlong( 2); lat_max=radians_to_latlong(-2); lon_min=radians_to_latlong( 4); lon_max=radians_to_latlong(-4); /* Allocate the memory for the geographical index array */ nodesx->gdata=(index_t*)malloc(nodesx->number*sizeof(index_t)); log_malloc(nodesx->gdata,nodesx->number*sizeof(index_t)); logassert(nodesx->gdata,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ /* Re-open the file read-only and a new file writeable */ fd=ReplaceFileBuffered(nodesx->filename_tmp,&nodesx->fd); /* Sort nodes geographically and index them */ sortnodesx=nodesx; filesort_fixed(nodesx->fd,fd,sizeof(NodeX),(int (*)(void*,index_t))update_id, (int (*)(const void*,const void*))sort_by_lat_long, (int (*)(void*,index_t))index_by_lat_long); /* Close the files */ nodesx->fd=CloseFileBuffered(nodesx->fd); CloseFileBuffered(fd); /* Work out the number of bins */ if(nodesx->super) { lat_min_bin=latlong_to_bin(lat_min); lon_min_bin=latlong_to_bin(lon_min); lat_max_bin=latlong_to_bin(lat_max); lon_max_bin=latlong_to_bin(lon_max); nodesx->latzero=lat_min_bin; nodesx->lonzero=lon_min_bin; nodesx->latbins=(lat_max_bin-lat_min_bin)+1; nodesx->lonbins=(lon_max_bin-lon_min_bin)+1; } /* Free the memory */ if(nodesx->super) { log_free(nodesx->super); free(nodesx->super); nodesx->super=NULL; } /* Print the final message */ printf_last("Sorted Nodes Geographically: Nodes=%"Pindex_t,nodesx->number); } /*++++++++++++++++++++++++++++++++++++++ Update the node ids. int update_id Return 1 if the value is to be kept, otherwise 0. NodeX *nodex The extended node. index_t index The number of unsorted nodes that have been read from the input file. ++++++++++++++++++++++++++++++++++++++*/ static int update_id(NodeX *nodex,index_t index) { nodex->id=index; if(sortnodesx->super && IsBitSet(sortnodesx->super,index)) nodex->flags|=NODE_SUPER; return(1); } /*++++++++++++++++++++++++++++++++++++++ Sort the nodes into latitude and longitude order (first by longitude bin number, then by latitude bin number and then by exact longitude and then by exact latitude). int sort_by_lat_long Returns the comparison of the latitude and longitude fields. NodeX *a The first extended node. NodeX *b The second extended node. ++++++++++++++++++++++++++++++++++++++*/ static int sort_by_lat_long(NodeX *a,NodeX *b) { ll_bin_t a_lon=latlong_to_bin(a->longitude); ll_bin_t b_lon=latlong_to_bin(b->longitude); if(a_lonb_lon) return(1); else { ll_bin_t a_lat=latlong_to_bin(a->latitude); ll_bin_t b_lat=latlong_to_bin(b->latitude); if(a_latb_lat) return(1); else { if(a->longitudelongitude) return(-1); else if(a->longitude>b->longitude) return(1); else { if(a->latitudelatitude) return(-1); else if(a->latitude>b->latitude) return(1); } return(FILESORT_PRESERVE_ORDER(a,b)); } } } /*++++++++++++++++++++++++++++++++++++++ Create the index between the sorted and unsorted nodes. int index_by_lat_long Return 1 if the value is to be kept, otherwise 0. NodeX *nodex The extended node. index_t index The number of sorted nodes that have already been written to the output file. ++++++++++++++++++++++++++++++++++++++*/ static int index_by_lat_long(NodeX *nodex,index_t index) { sortnodesx->gdata[nodex->id]=index; if(sortnodesx->super) { if(nodex->latitudelatitude; if(nodex->latitude>lat_max) lat_max=nodex->latitude; if(nodex->longitudelongitude; if(nodex->longitude>lon_max) lon_max=nodex->longitude; } return(1); } /*++++++++++++++++++++++++++++++++++++++ Save the final node list database to a file. NodesX *nodesx The set of nodes to save. const char *filename The name of the file to save. SegmentsX *segmentsx The set of segments to use. ++++++++++++++++++++++++++++++++++++++*/ void SaveNodeList(NodesX *nodesx,const char *filename,SegmentsX *segmentsx) { index_t i; int fd; NodesFile nodesfile={0}; index_t super_number=0; ll_bin2_t latlonbin=0,maxlatlonbins; index_t *offsets; /* Print the start message */ printf_first("Writing Nodes: Nodes=0"); /* Allocate the memory for the geographical offsets array */ offsets=(index_t*)malloc((nodesx->latbins*nodesx->lonbins+1)*sizeof(index_t)); logassert(offsets,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ latlonbin=0; /* Re-open the file */ nodesx->fd=ReOpenFileBuffered(nodesx->filename_tmp); /* Write out the nodes data */ fd=OpenFileBufferedNew(filename); SeekFileBuffered(fd,sizeof(NodesFile)+(nodesx->latbins*nodesx->lonbins+1)*sizeof(index_t)); for(i=0;inumber;i++) { NodeX nodex; Node node={0}; ll_bin_t latbin,lonbin; ll_bin2_t llbin; ReadFileBuffered(nodesx->fd,&nodex,sizeof(NodeX)); /* Create the Node */ node.latoffset=latlong_to_off(nodex.latitude); node.lonoffset=latlong_to_off(nodex.longitude); node.firstseg=segmentsx->firstnode[i]; node.allow=nodex.allow; node.flags=nodex.flags; if(node.flags&NODE_SUPER) super_number++; /* Work out the offsets */ latbin=latlong_to_bin(nodex.latitude )-nodesx->latzero; lonbin=latlong_to_bin(nodex.longitude)-nodesx->lonzero; llbin=lonbin*nodesx->latbins+latbin; for(;latlonbin<=llbin;latlonbin++) offsets[latlonbin]=i; /* Write the data */ WriteFileBuffered(fd,&node,sizeof(Node)); if(!((i+1)%10000)) printf_middle("Writing Nodes: Nodes=%"Pindex_t,i+1); } /* Close the file */ nodesx->fd=CloseFileBuffered(nodesx->fd); /* Finish off the offset indexing and write them out */ maxlatlonbins=nodesx->latbins*nodesx->lonbins; for(;latlonbin<=maxlatlonbins;latlonbin++) offsets[latlonbin]=nodesx->number; SeekFileBuffered(fd,sizeof(NodesFile)); WriteFileBuffered(fd,offsets,(nodesx->latbins*nodesx->lonbins+1)*sizeof(index_t)); free(offsets); /* Write out the header structure */ nodesfile.number=nodesx->number; nodesfile.snumber=super_number; nodesfile.latbins=nodesx->latbins; nodesfile.lonbins=nodesx->lonbins; nodesfile.latzero=nodesx->latzero; nodesfile.lonzero=nodesx->lonzero; SeekFileBuffered(fd,0); WriteFileBuffered(fd,&nodesfile,sizeof(NodesFile)); CloseFileBuffered(fd); /* Free the memory in the segments */ log_free(segmentsx->firstnode); free(segmentsx->firstnode); segmentsx->firstnode=NULL; /* Print the final message */ printf_last("Wrote Nodes: Nodes=%"Pindex_t,nodesx->number); } routino-3.2/src/errorlog.h 644 233 144 14565 12550223461 11053 0/*************************************** Header file for error log file data types and associated function prototypes. Part of the Routino routing software. ******************/ /****************** This file Copyright 2013-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef ERRORLOG_H #define ERRORLOG_H /*+ To stop multiple inclusions. +*/ #include #include #include "types.h" #include "typesx.h" #include "files.h" /*+ A structure containing information for an error message in the file. +*/ typedef struct _ErrorLog { ll_off_t latoffset; /*+ The error message latitude offset within its bin. +*/ ll_off_t lonoffset; /*+ The error message longitude offset within its bin. +*/ uint32_t offset; /*+ The offset of the error message from the beginning of the text section. +*/ uint32_t length; /*+ The length of the error message in the text section. +*/ } ErrorLog; /*+ A structure containing the header from the error log file. +*/ typedef struct _ErrorLogsFile { index_t number; /*+ The total number of error messages. +*/ index_t number_geo; /*+ The number of error messages with a geographical location. +*/ index_t number_nongeo; /*+ The number of error messages without a geographical location. +*/ ll_bin_t latbins; /*+ The number of bins containing latitude. +*/ ll_bin_t lonbins; /*+ The number of bins containing longitude. +*/ ll_bin_t latzero; /*+ The bin number of the furthest south bin. +*/ ll_bin_t lonzero; /*+ The bin number of the furthest west bin. +*/ } ErrorLogsFile; /*+ A structure containing a set of error log messages read from the file. +*/ typedef struct _ErrorLogs { ErrorLogsFile file; /*+ The header data from the file. +*/ #if !SLIM char *data; /*+ The memory mapped data in the file. +*/ index_t *offsets; /*+ A pointer to the array of offsets in the file. +*/ ErrorLog *errorlogs_geo; /*+ A pointer to the array of geographical error logs in the file. +*/ ErrorLog *errorlogs_nongeo; /*+ A pointer to the array of non-geographical error logs in the file. +*/ char *strings; /*+ A pointer to the array of error strings in the file. +*/ #else int fd; /*+ The file descriptor for the file. +*/ offset_t offsetsoffset; /*+ An allocated array with a copy of the file offsets. +*/ offset_t errorlogsoffset_geo; /*+ The offset of the geographical error logs within the file. +*/ offset_t errorlogsoffset_nongeo; /*+ The offset of the non-geographical error logs within the file. +*/ offset_t stringsoffset; /*+ The offset of the error strings within the file. +*/ ErrorLog cached[2]; /*+ Some cached error logs read from the file in slim mode. +*/ char cachestring[1024]; /*+ A cached copy of the error string read from the file in slim mode. +*/ #endif } ErrorLogs; /* Error log functions in errorlog.c */ ErrorLogs *LoadErrorLogs(const char *filename); void DestroyErrorLogs(ErrorLogs *errorlogs); void GetErrorLogLatLong(ErrorLogs *errorlogs,index_t index,ErrorLog *errorlogp,double *latitude,double *longitude); /* Macros and inline functions */ #if !SLIM /*+ Return an ErrorLog pointer given a set of errorlogs and an index. +*/ #define LookupErrorLog(xxx,yyy,ppp) (&(xxx)->errorlogs_geo[yyy]) /*+ Return the offset of a geographical region given a set of errorlogs. +*/ #define LookupErrorLogOffset(xxx,yyy) ((xxx)->offsets[yyy]) /*+ Return the string for an error log. +*/ #define LookupErrorLogString(xxx,yyy) (&(xxx)->strings[(xxx)->errorlogs_geo[yyy].offset]) #else /* Prototypes */ static inline ErrorLog *LookupErrorLog(ErrorLogs *errorlogs,index_t index,int position); static inline index_t LookupErrorLogOffset(ErrorLogs *errorlogs,index_t index); static inline char *LookupErrorLogString(ErrorLogs *errorlogs,index_t index); /* Inline functions */ /*++++++++++++++++++++++++++++++++++++++ Find the ErrorLog information for a particular error log. ErrorLog *LookupErrorLog Returns a pointer to the cached error log information. ErrorLogs *errorlogs The set of errorlogs to use. index_t index The index of the error log. int position The position in the cache to store the value. ++++++++++++++++++++++++++++++++++++++*/ static inline ErrorLog *LookupErrorLog(ErrorLogs *errorlogs,index_t index,int position) { SlimFetch(errorlogs->fd,&errorlogs->cached[position-1],sizeof(ErrorLog),errorlogs->errorlogsoffset_geo+(offset_t)index*sizeof(ErrorLog)); return(&errorlogs->cached[position-1]); } /*++++++++++++++++++++++++++++++++++++++ Find the offset of error logs in a geographical region. index_t LookupErrorLogOffset Returns the index offset. ErrorLogs *errorlogs The set of error logs to use. index_t index The index of the offset. ++++++++++++++++++++++++++++++++++++++*/ static inline index_t LookupErrorLogOffset(ErrorLogs *errorlogs,index_t index) { index_t offset; SlimFetch(errorlogs->fd,&offset,sizeof(index_t),errorlogs->offsetsoffset+(offset_t)index*sizeof(index_t)); return(offset); } /*++++++++++++++++++++++++++++++++++++++ Find the string associated with a particular error log. char *LookupErrorLogString Returns the error string. ErrorLogs *errorlogs The set of error logs to use. index_t index The index of the string. ++++++++++++++++++++++++++++++++++++++*/ static inline char *LookupErrorLogString(ErrorLogs *errorlogs,index_t index) { ErrorLog *errorlog=LookupErrorLog(errorlogs,index,2); SlimFetch(errorlogs->fd,errorlogs->cachestring,errorlog->length,errorlogs->stringsoffset+errorlog->offset); return(errorlogs->cachestring); } #endif #endif /* ERRORLOG_H */ routino-3.2/src/mman-win32.c 644 233 144 12565 12531126220 11073 0/*************************************** Windows 32 memory management functions from https://code.google.com/p/mman-win32 File header comment created by Andrew M. Bishop, all source code unchanged from original. ******************/ /****************** Copyright (c) 2010,2012 Viktor Kutuzov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ***************************************/ #include #include #include #include "mman-win32.h" #ifndef FILE_MAP_EXECUTE #define FILE_MAP_EXECUTE 0x0020 #endif /* FILE_MAP_EXECUTE */ static int __map_mman_error(const DWORD err, const int deferr) { if (err == 0) return 0; //TODO: implement return err; } static DWORD __map_mmap_prot_page(const int prot) { DWORD protect = 0; if (prot == PROT_NONE) return protect; if ((prot & PROT_EXEC) != 0) { protect = ((prot & PROT_WRITE) != 0) ? PAGE_EXECUTE_READWRITE : PAGE_EXECUTE_READ; } else { protect = ((prot & PROT_WRITE) != 0) ? PAGE_READWRITE : PAGE_READONLY; } return protect; } static DWORD __map_mmap_prot_file(const int prot) { DWORD desiredAccess = 0; if (prot == PROT_NONE) return desiredAccess; if ((prot & PROT_READ) != 0) desiredAccess |= FILE_MAP_READ; if ((prot & PROT_WRITE) != 0) desiredAccess |= FILE_MAP_WRITE; if ((prot & PROT_EXEC) != 0) desiredAccess |= FILE_MAP_EXECUTE; return desiredAccess; } void* mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off) { HANDLE fm, h; void * map = MAP_FAILED; #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4293) #endif const DWORD dwFileOffsetLow = (sizeof(off_t) <= sizeof(DWORD)) ? (DWORD)off : (DWORD)(off & 0xFFFFFFFFL); const DWORD dwFileOffsetHigh = (sizeof(off_t) <= sizeof(DWORD)) ? (DWORD)0 : (DWORD)((off >> 32) & 0xFFFFFFFFL); const DWORD protect = __map_mmap_prot_page(prot); const DWORD desiredAccess = __map_mmap_prot_file(prot); const off_t maxSize = off + (off_t)len; const DWORD dwMaxSizeLow = (sizeof(off_t) <= sizeof(DWORD)) ? (DWORD)maxSize : (DWORD)(maxSize & 0xFFFFFFFFL); const DWORD dwMaxSizeHigh = (sizeof(off_t) <= sizeof(DWORD)) ? (DWORD)0 : (DWORD)((maxSize >> 32) & 0xFFFFFFFFL); #ifdef _MSC_VER #pragma warning(pop) #endif errno = 0; if (len == 0 /* Unsupported flag combinations */ || (flags & MAP_FIXED) != 0 /* Usupported protection combinations */ || prot == PROT_EXEC) { errno = EINVAL; return MAP_FAILED; } h = ((flags & MAP_ANONYMOUS) == 0) ? (HANDLE)_get_osfhandle(fildes) : INVALID_HANDLE_VALUE; if ((flags & MAP_ANONYMOUS) == 0 && h == INVALID_HANDLE_VALUE) { errno = EBADF; return MAP_FAILED; } fm = CreateFileMapping(h, NULL, protect, dwMaxSizeHigh, dwMaxSizeLow, NULL); if (fm == NULL) { errno = __map_mman_error(GetLastError(), EPERM); return MAP_FAILED; } map = MapViewOfFile(fm, desiredAccess, dwFileOffsetHigh, dwFileOffsetLow, len); CloseHandle(fm); if (map == NULL) { errno = __map_mman_error(GetLastError(), EPERM); return MAP_FAILED; } return map; } int munmap(void *addr, size_t len) { if (UnmapViewOfFile(addr)) return 0; errno = __map_mman_error(GetLastError(), EPERM); return -1; } int mprotect(void *addr, size_t len, int prot) { DWORD newProtect = __map_mmap_prot_page(prot); DWORD oldProtect = 0; if (VirtualProtect(addr, len, newProtect, &oldProtect)) return 0; errno = __map_mman_error(GetLastError(), EPERM); return -1; } int msync(void *addr, size_t len, int flags) { if (FlushViewOfFile(addr, len)) return 0; errno = __map_mman_error(GetLastError(), EPERM); return -1; } int mlock(const void *addr, size_t len) { if (VirtualLock((LPVOID)addr, len)) return 0; errno = __map_mman_error(GetLastError(), EPERM); return -1; } int munlock(const void *addr, size_t len) { if (VirtualUnlock((LPVOID)addr, len)) return 0; errno = __map_mman_error(GetLastError(), EPERM); return -1; } routino-3.2/src/errorlogx.c 644 233 144 62403 12563633053 11236 0/*************************************** Error log processing functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2013-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include "typesx.h" #include "nodesx.h" #include "waysx.h" #include "relationsx.h" #include "errorlogx.h" #include "errorlog.h" #include "files.h" #include "sorting.h" /* Global variables */ /*+ The name of the error log file. +*/ extern char *errorlogfilename; /*+ The name of the binary error log file. +*/ extern char *errorbinfilename; /* Local variables */ /*+ Temporary file-local variables for use by the sort functions (re-initialised for each sort). +*/ static latlong_t lat_min,lat_max,lon_min,lon_max; /* Local functions */ static void reindex_nodes(NodesX *nodesx); static void reindex_ways(WaysX *waysx); static void reindex_relations(RelationsX *relationsx); static int lookup_lat_long_node(NodesX *nodesx,node_t node,latlong_t *latitude,latlong_t *longitude); static int lookup_lat_long_way(WaysX *waysx,NodesX *nodesx,way_t way,latlong_t *latitude,latlong_t *longitude,index_t error); static int lookup_lat_long_relation(RelationsX *relationsx,WaysX *waysx,NodesX *nodesx,relation_t relation,latlong_t *latitude,latlong_t *longitude,index_t error); static int sort_by_lat_long(ErrorLogX *a,ErrorLogX *b); static int measure_lat_long(ErrorLogX *errorlogx,index_t index); /*++++++++++++++++++++++++++++++++++++++ Allocate a new error log list (create a new file). ErrorLogsX *NewErrorLogList Returns a pointer to the error log list. ++++++++++++++++++++++++++++++++++++++*/ ErrorLogsX *NewErrorLogList(void) { ErrorLogsX *errorlogsx; errorlogsx=(ErrorLogsX*)calloc(1,sizeof(ErrorLogsX)); logassert(errorlogsx,"Failed to allocate memory (try using slim mode?)"); /* Check calloc() worked */ return(errorlogsx); } /*++++++++++++++++++++++++++++++++++++++ Free an error log list. ErrorLogsX *errorlogsx The set of error logs to be freed. ++++++++++++++++++++++++++++++++++++++*/ void FreeErrorLogList(ErrorLogsX *errorlogsx) { free(errorlogsx); } /*++++++++++++++++++++++++++++++++++++++ Process the binary error log. ErrorLogsX *errorlogsx The set of error logs to update. NodesX *nodesx The set of nodes. WaysX *waysx The set of ways. RelationsX *relationsx The set of relations. ++++++++++++++++++++++++++++++++++++++*/ void ProcessErrorLogs(ErrorLogsX *errorlogsx,NodesX *nodesx,WaysX *waysx,RelationsX *relationsx) { int oldfd,newfd; uint32_t offset=0; int nerrorlogobjects=0; int finished; ErrorLogObject errorlogobjects[8]; /* Re-index the nodes, ways and relations */ printf_first("Re-indexing the Data: Nodes=0 Ways=0 Route-Relations=0 Turn-Relations=0"); reindex_nodes(nodesx); printf_middle("Re-indexing the Data: Nodes=%"Pindex_t" Ways=0 Route-Relations=0 Turn-Relations=0",nodesx->number); reindex_ways(waysx); printf_middle("Re-indexing the Data: Nodes=%"Pindex_t" Ways=%"Pindex_t" Route-Relations=0 Turn-Relations=0",nodesx->number,waysx->number); reindex_relations(relationsx); printf_last("Re-indexed the Data: Nodes=%"Pindex_t" Ways=%"Pindex_t" Route-Relations=%"Pindex_t" Turn-Relations=%"Pindex_t,nodesx->number,waysx->number,relationsx->rrnumber,relationsx->trnumber); /* Print the start message */ printf_first("Calculating Coordinates: Errors=0"); /* Map into memory / open the files */ #if !SLIM nodesx->data=MapFile(nodesx->filename); #else nodesx->fd=SlimMapFile(nodesx->filename); InvalidateNodeXCache(nodesx->cache); #endif waysx->fd=ReOpenFileBuffered(waysx->filename); relationsx->rrfd=ReOpenFileBuffered(relationsx->rrfilename); relationsx->trfd=ReOpenFileBuffered(relationsx->trfilename); /* Open the binary log file read-only and a new file writeable */ newfd=ReplaceFileBuffered(errorbinfilename,&oldfd); /* Loop through the file and merge the raw data into coordinates */ errorlogsx->number=0; do { ErrorLogObject errorlogobject; finished=ReadFileBuffered(oldfd,&errorlogobject,sizeof(ErrorLogObject)); if(finished) errorlogobject.offset=SizeFile(errorlogfilename); if(offset!=errorlogobject.offset) { ErrorLogX errorlogx; latlong_t errorlat=NO_LATLONG,errorlon=NO_LATLONG; /* Calculate suitable coordinates */ if(nerrorlogobjects==1) { if(errorlogobjects[0].type=='N') { node_t node=(node_t)errorlogobjects[0].id; lookup_lat_long_node(nodesx,node,&errorlat,&errorlon); } else if(errorlogobjects[0].type=='W') { way_t way=(way_t)errorlogobjects[0].id; lookup_lat_long_way(waysx,nodesx,way,&errorlat,&errorlon,errorlogsx->number); } else if(errorlogobjects[0].type=='R') { relation_t relation=(relation_t)errorlogobjects[0].type; lookup_lat_long_relation(relationsx,waysx,nodesx,relation,&errorlat,&errorlon,errorlogsx->number); } } else { latlong_t latitude[8],longitude[8]; int i; int ncoords=0,nnodes=0,nways=0,nrelations=0; for(i=0;inumber)) ncoords++; } } if(nrelations==0) /* only nodes and/or ways */ ; else if(ncoords) /* some good nodes and/or ways, possibly relations */ ; else /* if(nrelations) */ { for(i=0;inumber)) ncoords++; } } if(ncoords) { errorlat=0; errorlon=0; for(i=0;inumber++; offset=errorlogobject.offset; nerrorlogobjects=0; if(!(errorlogsx->number%10000)) printf_middle("Calculating Coordinates: Errors=%"Pindex_t,errorlogsx->number); } /* Store for later */ logassert(nerrorlogobjects<8,"Too many error log objects for one error message."); /* Only a limited amount of information stored. */ errorlogobjects[nerrorlogobjects]=errorlogobject; nerrorlogobjects++; } while(!finished); /* Unmap from memory / close the files */ #if !SLIM nodesx->data=UnmapFile(nodesx->data); #else nodesx->fd=SlimUnmapFile(nodesx->fd); #endif waysx->fd=CloseFileBuffered(waysx->fd); relationsx->rrfd=CloseFileBuffered(relationsx->rrfd); relationsx->trfd=CloseFileBuffered(relationsx->trfd); CloseFileBuffered(oldfd); CloseFileBuffered(newfd); /* Print the final message */ printf_last("Calculated Coordinates: Errors=%"Pindex_t,errorlogsx->number); } /*++++++++++++++++++++++++++++++++++++++ Re-index the nodes that were kept. NodesX *nodesx The set of nodes to process (contains the filename and number of nodes). ++++++++++++++++++++++++++++++++++++++*/ static void reindex_nodes(NodesX *nodesx) { int fd; index_t index=0; NodeX nodex; nodesx->number=nodesx->knumber; nodesx->idata=(node_t*)malloc(nodesx->number*sizeof(node_t)); log_malloc(nodesx->idata,nodesx->number*sizeof(node_t)); /* Get the node id for each node in the file. */ fd=ReOpenFileBuffered(nodesx->filename); while(!ReadFileBuffered(fd,&nodex,sizeof(NodeX))) { nodesx->idata[index]=nodex.id; index++; } CloseFileBuffered(fd); } /*++++++++++++++++++++++++++++++++++++++ Re-index the ways that were kept. WaysX *waysx The set of ways to process (contains the filename and number of ways). ++++++++++++++++++++++++++++++++++++++*/ static void reindex_ways(WaysX *waysx) { FILESORT_VARINT waysize; int fd; offset_t position=0; index_t index=0; waysx->number=waysx->knumber; waysx->idata=(way_t*)malloc(waysx->number*sizeof(way_t)); waysx->odata=(offset_t*)malloc(waysx->number*sizeof(offset_t)); log_malloc(waysx->idata,waysx->number*sizeof(way_t)); log_malloc(waysx->odata,waysx->number*sizeof(offset_t)); /* Get the way id and the offset for each way in the file */ fd=ReOpenFileBuffered(waysx->filename); while(!ReadFileBuffered(fd,&waysize,FILESORT_VARSIZE)) { WayX wayx; ReadFileBuffered(fd,&wayx,sizeof(WayX)); waysx->idata[index]=wayx.id; waysx->odata[index]=position+FILESORT_VARSIZE+sizeof(WayX); index++; SkipFileBuffered(fd,waysize-sizeof(WayX)); position+=waysize+FILESORT_VARSIZE; } CloseFileBuffered(fd); } /*++++++++++++++++++++++++++++++++++++++ Re-index the relations that were kept. RelationsX *relationsx The set of relations to process (contains the filenames and numbers of relations). ++++++++++++++++++++++++++++++++++++++*/ static void reindex_relations(RelationsX *relationsx) { FILESORT_VARINT relationsize; int fd; offset_t position=0; index_t index; TurnRelX turnrelx; /* Route relations */ relationsx->rrnumber=relationsx->rrknumber; relationsx->rridata=(relation_t*)malloc(relationsx->rrnumber*sizeof(relation_t)); relationsx->rrodata=(offset_t*)malloc(relationsx->rrnumber*sizeof(offset_t)); log_malloc(relationsx->rridata,relationsx->rrnumber*sizeof(relation_t)); log_malloc(relationsx->rrodata,relationsx->rrnumber*sizeof(offset_t)); /* Get the relation id and the offset for each relation in the file */ fd=ReOpenFileBuffered(relationsx->rrfilename); index=0; while(!ReadFileBuffered(fd,&relationsize,FILESORT_VARSIZE)) { RouteRelX routerelx; ReadFileBuffered(fd,&routerelx,sizeof(RouteRelX)); relationsx->rridata[index]=routerelx.id; relationsx->rrodata[index]=position+FILESORT_VARSIZE+sizeof(RouteRelX); index++; SkipFileBuffered(fd,relationsize-sizeof(RouteRelX)); position+=relationsize+FILESORT_VARSIZE; } CloseFileBuffered(fd); /* Turn relations */ relationsx->trnumber=relationsx->trknumber; relationsx->tridata=(relation_t*)malloc(relationsx->trnumber*sizeof(relation_t)); log_malloc(relationsx->tridata,relationsx->trnumber*sizeof(relation_t)); /* Get the relation id and the offset for each relation in the file */ fd=ReOpenFileBuffered(relationsx->trfilename); index=0; while(!ReadFileBuffered(fd,&turnrelx,sizeof(TurnRelX))) { relationsx->tridata[index]=turnrelx.id; index++; } CloseFileBuffered(fd); } /*++++++++++++++++++++++++++++++++++++++ Lookup a node's latitude and longitude. int lookup_lat_long_node Returns 1 if a node was found. NodesX *nodesx The set of nodes to use. node_t node The node number. latlong_t *latitude Returns the latitude. latlong_t *longitude Returns the longitude. ++++++++++++++++++++++++++++++++++++++*/ static int lookup_lat_long_node(NodesX *nodesx,node_t node,latlong_t *latitude,latlong_t *longitude) { index_t index=IndexNodeX(nodesx,node); if(index==NO_NODE) return 0; else { NodeX *nodex=LookupNodeX(nodesx,index,1); *latitude =nodex->latitude; *longitude=nodex->longitude; return 1; } } /*++++++++++++++++++++++++++++++++++++++ Lookup a way's latitude and longitude. int lookup_lat_long_way Returns 1 if a way was found. WaysX *waysx The set of ways to use. NodesX *nodesx The set of nodes to use. way_t way The way number. latlong_t *latitude Returns the latitude. latlong_t *longitude Returns the longitude. index_t error The index of the error in the complete set of errors. ++++++++++++++++++++++++++++++++++++++*/ static int lookup_lat_long_way(WaysX *waysx,NodesX *nodesx,way_t way,latlong_t *latitude,latlong_t *longitude,index_t error) { index_t index=IndexWayX(waysx,way); if(index==NO_WAY) return 0; else { int count=1; offset_t offset=waysx->odata[index]; node_t node1,node2,prevnode,node; latlong_t latitude1,longitude1,latitude2,longitude2; SeekFileBuffered(waysx->fd,offset); /* Choose a random pair of adjacent nodes */ if(ReadFileBuffered(waysx->fd,&node1,sizeof(node_t)) || node1==NO_NODE_ID) return 0; if(ReadFileBuffered(waysx->fd,&node2,sizeof(node_t)) || node2==NO_NODE_ID) return lookup_lat_long_node(nodesx,node1,latitude,longitude); prevnode=node2; while(!ReadFileBuffered(waysx->fd,&node,sizeof(node_t)) && node!=NO_NODE_ID) { count++; if((error%count)==0) /* A 1/count chance */ { node1=prevnode; node2=node; } prevnode=node; } if(!lookup_lat_long_node(nodesx,node1,&latitude1,&longitude1)) return lookup_lat_long_node(nodesx,node2,latitude,longitude); if(!lookup_lat_long_node(nodesx,node2,&latitude2,&longitude2)) return lookup_lat_long_node(nodesx,node1,latitude,longitude); *latitude =(latitude1 +latitude2 )/2; *longitude=(longitude1+longitude2)/2; return 1; } } /*++++++++++++++++++++++++++++++++++++++ Lookup a relation's latitude and longitude. int lookup_lat_long_relation Returns 1 if a relation was found. RelationsX *relationsx The set of relations to use. WaysX *waysx The set of ways to use. NodesX *nodesx The set of nodes to use. relation_t relation The relation number. latlong_t *latitude Returns the latitude. latlong_t *longitude Returns the longitude. index_t error The index of the error in the complete set of errors. ++++++++++++++++++++++++++++++++++++++*/ static int lookup_lat_long_relation(RelationsX *relationsx,WaysX *waysx,NodesX *nodesx,relation_t relation,latlong_t *latitude,latlong_t *longitude,index_t error) { index_t index=IndexRouteRelX(relationsx,relation); if(index==NO_RELATION) { index=IndexTurnRelX(relationsx,relation); if(index==NO_RELATION) return 0; else { TurnRelX turnrelx; SeekFileBuffered(relationsx->trfd,index*sizeof(TurnRelX)); ReadFileBuffered(relationsx->trfd,&turnrelx,sizeof(TurnRelX)); if(lookup_lat_long_node(nodesx,turnrelx.via,latitude,longitude)) return 1; if(lookup_lat_long_way(waysx,nodesx,turnrelx.from,latitude,longitude,error)) return 1; if(lookup_lat_long_way(waysx,nodesx,turnrelx.to,latitude,longitude,error)) return 1; return 0; } } else { int count; offset_t offset=relationsx->rrodata[index]; node_t node=NO_NODE_ID,tempnode; way_t way=NO_WAY_ID,tempway; relation_t relation=NO_RELATION_ID,temprelation; SeekFileBuffered(relationsx->rrfd,offset); /* Choose a random node */ count=0; while(!ReadFileBuffered(relationsx->rrfd,&tempnode,sizeof(node_t)) && tempnode!=NO_NODE_ID) { count++; if((error%count)==0) /* A 1/count chance */ node=tempnode; } if(lookup_lat_long_node(nodesx,node,latitude,longitude)) return 1; /* Choose a random way */ count=0; while(!ReadFileBuffered(relationsx->rrfd,&tempway,sizeof(way_t)) && tempway!=NO_WAY_ID) { count++; if((error%count)==0) /* A 1/count chance */ way=tempway; } if(lookup_lat_long_way(waysx,nodesx,way,latitude,longitude,error)) return 1; /* Choose a random relation */ count=0; while(!ReadFileBuffered(relationsx->rrfd,&temprelation,sizeof(relation_t)) && temprelation!=NO_RELATION_ID) { count++; if((error%count)==0) /* A 1/count chance */ relation=temprelation; } return lookup_lat_long_relation(relationsx,waysx,nodesx,relation,latitude,longitude,error); } } /*++++++++++++++++++++++++++++++++++++++ Sort the error logs geographically. ErrorLogsX *errorlogsx The set of error logs to sort. ++++++++++++++++++++++++++++++++++++++*/ void SortErrorLogsGeographically(ErrorLogsX *errorlogsx) { int oldfd,newfd; ll_bin_t lat_min_bin,lat_max_bin,lon_min_bin,lon_max_bin; /* Print the start message */ printf_first("Sorting Errors Geographically"); /* Work out the range of data */ lat_min=radians_to_latlong( 2); lat_max=radians_to_latlong(-2); lon_min=radians_to_latlong( 4); lon_max=radians_to_latlong(-4); /* Re-open the file read-only and a new file writeable */ newfd=ReplaceFileBuffered(errorbinfilename,&oldfd); /* Sort errors geographically */ filesort_fixed(oldfd,newfd,sizeof(ErrorLogX),NULL, (int (*)(const void*,const void*))sort_by_lat_long, (int (*)(void*,index_t))measure_lat_long); /* Close the files */ CloseFileBuffered(oldfd); CloseFileBuffered(newfd); /* Work out the number of bins */ lat_min_bin=latlong_to_bin(lat_min); lon_min_bin=latlong_to_bin(lon_min); lat_max_bin=latlong_to_bin(lat_max); lon_max_bin=latlong_to_bin(lon_max); errorlogsx->latzero=lat_min_bin; errorlogsx->lonzero=lon_min_bin; errorlogsx->latbins=(lat_max_bin-lat_min_bin)+1; errorlogsx->lonbins=(lon_max_bin-lon_min_bin)+1; /* Print the final message */ printf_last("Sorted Errors Geographically: Errors=%"Pindex_t,errorlogsx->number); } /*++++++++++++++++++++++++++++++++++++++ Sort the errors into latitude and longitude order (first by longitude bin number, then by latitude bin number and then by exact longitude and then by exact latitude). int sort_by_lat_long Returns the comparison of the latitude and longitude fields. ErrorLogX *a The first error location. ErrorLogX *b The second error location. ++++++++++++++++++++++++++++++++++++++*/ static int sort_by_lat_long(ErrorLogX *a,ErrorLogX *b) { ll_bin_t a_lon=latlong_to_bin(a->longitude); ll_bin_t b_lon=latlong_to_bin(b->longitude); if(a_lonb_lon) return(1); else { ll_bin_t a_lat=latlong_to_bin(a->latitude); ll_bin_t b_lat=latlong_to_bin(b->latitude); if(a_latb_lat) return(1); else { if(a->longitudelongitude) return(-1); else if(a->longitude>b->longitude) return(1); else { if(a->latitudelatitude) return(-1); else if(a->latitude>b->latitude) return(1); } return(FILESORT_PRESERVE_ORDER(a,b)); } } } /*++++++++++++++++++++++++++++++++++++++ Measure the extent of the data. int measure_lat_long Return 1 if the value is to be kept, otherwise 0. ErrorLogX *errorlogx The error location. index_t index The number of sorted error locations that have already been written to the output file. ++++++++++++++++++++++++++++++++++++++*/ static int measure_lat_long(ErrorLogX *errorlogx,index_t index) { if(errorlogx->latitude!=NO_LATLONG) { if(errorlogx->latitudelatitude; if(errorlogx->latitude>lat_max) lat_max=errorlogx->latitude; if(errorlogx->longitudelongitude; if(errorlogx->longitude>lon_max) lon_max=errorlogx->longitude; } return(1); } /*++++++++++++++++++++++++++++++++++++++ Save the binary error log. ErrorLogsX *errorlogsx The set of error logs to write. char *filename The name of the final file to write. ++++++++++++++++++++++++++++++++++++++*/ void SaveErrorLogs(ErrorLogsX *errorlogsx,char *filename) { ErrorLogsFile errorlogsfile; ErrorLogX errorlogx; int oldfd,newfd; ll_bin2_t latlonbin=0,maxlatlonbins; index_t *offsets; index_t number=0,number_geo=0,number_nongeo=0; offset_t size; /* Print the start message */ printf_first("Writing Errors: Geographical=0 Non-geographical=0"); /* Allocate the memory for the geographical offsets array */ offsets=(index_t*)malloc((errorlogsx->latbins*errorlogsx->lonbins+1)*sizeof(index_t)); logassert(offsets,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ latlonbin=0; /* Re-open the file */ oldfd=ReOpenFileBuffered(errorbinfilename); newfd=OpenFileBufferedNew(filename); /* Write out the geographical errors */ SeekFileBuffered(newfd,sizeof(ErrorLogsFile)+(errorlogsx->latbins*errorlogsx->lonbins+1)*sizeof(index_t)); while(!ReadFileBuffered(oldfd,&errorlogx,sizeof(ErrorLogX))) { ErrorLog errorlog={0}; ll_bin_t latbin,lonbin; ll_bin2_t llbin; if(errorlogx.latitude==NO_LATLONG) continue; /* Create the ErrorLog */ errorlog.latoffset=latlong_to_off(errorlogx.latitude); errorlog.lonoffset=latlong_to_off(errorlogx.longitude); errorlog.offset=errorlogx.offset; errorlog.length=errorlogx.length; /* Work out the offsets */ latbin=latlong_to_bin(errorlogx.latitude )-errorlogsx->latzero; lonbin=latlong_to_bin(errorlogx.longitude)-errorlogsx->lonzero; llbin=lonbin*errorlogsx->latbins+latbin; for(;latlonbin<=llbin;latlonbin++) offsets[latlonbin]=number_geo; /* Write the data */ WriteFileBuffered(newfd,&errorlog,sizeof(ErrorLog)); number_geo++; number++; if(!(number%10000)) printf_middle("Writing Errors: Geographical=%"Pindex_t" Non-geographical=%"Pindex_t,number_geo,number_nongeo); } /* Write out the non-geographical errors */ SeekFileBuffered(oldfd,0); while(!ReadFileBuffered(oldfd,&errorlogx,sizeof(ErrorLogX))) { ErrorLog errorlog={0}; if(errorlogx.latitude!=NO_LATLONG) continue; /* Create the ErrorLog */ errorlog.latoffset=0; errorlog.lonoffset=0; errorlog.offset=errorlogx.offset; errorlog.length=errorlogx.length; /* Write the data */ WriteFileBuffered(newfd,&errorlog,sizeof(ErrorLog)); number_nongeo++; number++; if(!(number%10000)) printf_middle("Writing Errors: Geographical=%"Pindex_t" Non-geographical=%"Pindex_t,number_geo,number_nongeo); } /* Close the input file */ CloseFileBuffered(oldfd); DeleteFile(errorbinfilename); /* Append the text from the log file */ size=SizeFile(errorlogfilename); oldfd=ReOpenFileBuffered(errorlogfilename); while(size) { int i; char buffer[4096]; offset_t chunksize=(size>(offset_t)sizeof(buffer)?(offset_t)sizeof(buffer):size); ReadFileBuffered(oldfd,buffer,chunksize); for(i=0;ilatbins*errorlogsx->lonbins; for(;latlonbin<=maxlatlonbins;latlonbin++) offsets[latlonbin]=number_geo; SeekFileBuffered(newfd,sizeof(ErrorLogsFile)); WriteFileBuffered(newfd,offsets,(errorlogsx->latbins*errorlogsx->lonbins+1)*sizeof(index_t)); free(offsets); /* Write out the header structure */ errorlogsfile.number =number; errorlogsfile.number_geo =number_geo; errorlogsfile.number_nongeo=number_nongeo; errorlogsfile.latbins=errorlogsx->latbins; errorlogsfile.lonbins=errorlogsx->lonbins; errorlogsfile.latzero=errorlogsx->latzero; errorlogsfile.lonzero=errorlogsx->lonzero; SeekFileBuffered(newfd,0); WriteFileBuffered(newfd,&errorlogsfile,sizeof(ErrorLogsFile)); CloseFileBuffered(newfd); /* Print the final message */ printf_last("Wrote Errors: Geographical=%"Pindex_t" Non-geographical=%"Pindex_t,number_geo,number_nongeo); } routino-3.2/src/superx.h 644 233 144 2420 12064636364 10523 0/*************************************** Header for super-node and super-segment functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2011 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef SUPERX_H #define SUPERX_H /*+ To stop multiple inclusions. +*/ #include "typesx.h" /* Functions in superx.c */ void ChooseSuperNodes(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx); SegmentsX *CreateSuperSegments(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx); SegmentsX *MergeSuperSegments(SegmentsX *segmentsx,SegmentsX *supersegmentsx); #endif /* SUPERX_H */ routino-3.2/src/segmentsx.c 644 233 144 62556 12563633051 11237 0/*************************************** Extended Segment data type functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include "types.h" #include "segments.h" #include "ways.h" #include "typesx.h" #include "nodesx.h" #include "segmentsx.h" #include "waysx.h" #include "files.h" #include "logging.h" #include "sorting.h" /* Global variables */ /*+ The command line '--tmpdir' option or its default value. +*/ extern char *option_tmpdirname; /* Local variables */ /*+ Temporary file-local variables for use by the sort functions (re-initialised for each sort). +*/ static NodesX *sortnodesx; static SegmentsX *sortsegmentsx; static WaysX *sortwaysx; /* Local functions */ static int sort_by_id(SegmentX *a,SegmentX *b); static int delete_pruned(SegmentX *segmentx,index_t index); static int deduplicate_super(SegmentX *segmentx,index_t index); static int geographically_index(SegmentX *segmentx,index_t index); static distance_t DistanceX(NodeX *nodex1,NodeX *nodex2); /*++++++++++++++++++++++++++++++++++++++ Allocate a new segment list (create a new file or open an existing one). SegmentsX *NewSegmentList Returns the segment list. ++++++++++++++++++++++++++++++++++++++*/ SegmentsX *NewSegmentList(void) { SegmentsX *segmentsx; segmentsx=(SegmentsX*)calloc(1,sizeof(SegmentsX)); logassert(segmentsx,"Failed to allocate memory (try using slim mode?)"); /* Check calloc() worked */ segmentsx->filename_tmp=(char*)malloc(strlen(option_tmpdirname)+40); /* allow %p to be up to 20 bytes */ sprintf(segmentsx->filename_tmp,"%s/segmentsx.%p.tmp",option_tmpdirname,(void*)segmentsx); segmentsx->fd=OpenFileBufferedNew(segmentsx->filename_tmp); #if SLIM segmentsx->cache=NewSegmentXCache(); log_malloc(segmentsx->cache,sizeof(*segmentsx->cache)); #endif return(segmentsx); } /*++++++++++++++++++++++++++++++++++++++ Free a segment list. SegmentsX *segmentsx The set of segments to be freed. ++++++++++++++++++++++++++++++++++++++*/ void FreeSegmentList(SegmentsX *segmentsx) { DeleteFile(segmentsx->filename_tmp); free(segmentsx->filename_tmp); if(segmentsx->usedway) { log_free(segmentsx->usedway); free(segmentsx->usedway); } if(segmentsx->firstnode) { log_free(segmentsx->firstnode); free(segmentsx->firstnode); } if(segmentsx->next1) { log_free(segmentsx->next1); free(segmentsx->next1); } #if SLIM log_free(segmentsx->cache); DeleteSegmentXCache(segmentsx->cache); #endif free(segmentsx); } /*++++++++++++++++++++++++++++++++++++++ Append a single segment to an unsorted segment list. SegmentsX *segmentsx The set of segments to modify. index_t way The index of the way that the segment belongs to. index_t node1 The index of the first node in the segment. index_t node2 The index of the second node in the segment. distance_t distance The distance between the nodes (or just the flags). ++++++++++++++++++++++++++++++++++++++*/ void AppendSegmentList(SegmentsX *segmentsx,index_t way,index_t node1,index_t node2,distance_t distance) { SegmentX segmentx; if(node1>node2) { index_t temp; temp=node1; node1=node2; node2=temp; if(distance&(ONEWAY_2TO1|ONEWAY_1TO2)) distance^=ONEWAY_2TO1|ONEWAY_1TO2; } segmentx.node1=node1; segmentx.node2=node2; segmentx.next2=NO_SEGMENT; segmentx.way=way; segmentx.distance=distance; WriteFileBuffered(segmentsx->fd,&segmentx,sizeof(SegmentX)); segmentsx->number++; logassert(segmentsx->numberfd!=-1) segmentsx->fd=CloseFileBuffered(segmentsx->fd); } /*++++++++++++++++++++++++++++++++++++++ Find the first extended segment with a particular starting node index. SegmentX *FirstSegmentX Returns a pointer to the first extended segment with the specified id. SegmentsX *segmentsx The set of segments to use. index_t nodeindex The node index to look for. int position A flag to pass through. ++++++++++++++++++++++++++++++++++++++*/ SegmentX *FirstSegmentX(SegmentsX *segmentsx,index_t nodeindex,int position) { index_t index=segmentsx->firstnode[nodeindex]; SegmentX *segmentx; if(index==NO_SEGMENT) return(NULL); segmentx=LookupSegmentX(segmentsx,index,position); return(segmentx); } /*++++++++++++++++++++++++++++++++++++++ Find the next segment with a particular starting node index. SegmentX *NextSegmentX Returns a pointer to the next segment with the same id. SegmentsX *segmentsx The set of segments to use. SegmentX *segmentx The current segment. index_t nodeindex The node index. ++++++++++++++++++++++++++++++++++++++*/ SegmentX *NextSegmentX(SegmentsX *segmentsx,SegmentX *segmentx,index_t nodeindex) { #if SLIM int position=1+(segmentx-&segmentsx->cached[0]); #endif if(segmentx->node1==nodeindex) { if(segmentsx->next1) { index_t index=IndexSegmentX(segmentsx,segmentx); if(segmentsx->next1[index]==NO_SEGMENT) return(NULL); segmentx=LookupSegmentX(segmentsx,segmentsx->next1[index],position); return(segmentx); } else { #if SLIM index_t index=IndexSegmentX(segmentsx,segmentx); index++; if(index>=segmentsx->number) return(NULL); segmentx=LookupSegmentX(segmentsx,index,position); #else segmentx++; if(IndexSegmentX(segmentsx,segmentx)>=segmentsx->number) return(NULL); #endif if(segmentx->node1!=nodeindex) return(NULL); return(segmentx); } } else { if(segmentx->next2==NO_SEGMENT) return(NULL); return(LookupSegmentX(segmentsx,segmentx->next2,position)); } } /*++++++++++++++++++++++++++++++++++++++ Sort the segment list. SegmentsX *segmentsx The set of segments to sort. ++++++++++++++++++++++++++++++++++++++*/ void SortSegmentList(SegmentsX *segmentsx) { int fd; /* Print the start message */ printf_first("Sorting Segments"); /* Re-open the file read-only and a new file writeable */ fd=ReplaceFileBuffered(segmentsx->filename_tmp,&segmentsx->fd); /* Sort by node indexes */ segmentsx->number=filesort_fixed(segmentsx->fd,fd,sizeof(SegmentX),NULL, (int (*)(const void*,const void*))sort_by_id, NULL); /* Close the files */ segmentsx->fd=CloseFileBuffered(segmentsx->fd); CloseFileBuffered(fd); /* Print the final message */ printf_last("Sorted Segments: Segments=%"Pindex_t,segmentsx->number); } /*++++++++++++++++++++++++++++++++++++++ Sort the segments into id order, first by node1 then by node2, finally by distance. int sort_by_id Returns the comparison of the node fields. SegmentX *a The first segment. SegmentX *b The second segment. ++++++++++++++++++++++++++++++++++++++*/ static int sort_by_id(SegmentX *a,SegmentX *b) { index_t a_id1=a->node1; index_t b_id1=b->node1; if(a_id1b_id1) return(1); else /* if(a_id1==b_id1) */ { index_t a_id2=a->node2; index_t b_id2=b->node2; if(a_id2b_id2) return(1); else { distance_t a_distance=DISTANCE(a->distance); distance_t b_distance=DISTANCE(b->distance); if(a_distanceb_distance) return(1); else { distance_t a_distflag=DISTFLAG(a->distance); distance_t b_distflag=DISTFLAG(b->distance); if(a_distflagb_distflag) return(1); else return(FILESORT_PRESERVE_ORDER(a,b)); /* preserve order */ } } } } /*++++++++++++++++++++++++++++++++++++++ Process segments (non-trivial duplicates). SegmentsX *segmentsx The set of segments to modify. NodesX *nodesx The set of nodes to use. WaysX *waysx The set of ways to use. ++++++++++++++++++++++++++++++++++++++*/ void ProcessSegments(SegmentsX *segmentsx,NodesX *nodesx,WaysX *waysx) { index_t duplicate=0,good=0,total=0; index_t prevnode1=NO_NODE,prevnode2=NO_NODE; index_t prevway=NO_WAY; distance_t prevdist=0; SegmentX segmentx; int fd; /* Print the start message */ printf_first("Processing Segments: Segments=0 Duplicates=0"); /* Map into memory / open the file */ #if !SLIM nodesx->data=MapFile(nodesx->filename_tmp); #else nodesx->fd=SlimMapFile(nodesx->filename_tmp); InvalidateNodeXCache(nodesx->cache); #endif /* Allocate the way usage bitmask */ segmentsx->usedway=AllocBitMask(waysx->number); log_malloc(segmentsx->usedway,LengthBitMask(waysx->number)*sizeof(BitMask)); logassert(segmentsx->usedway,"Failed to allocate memory (try using slim mode?)"); /* Check AllocBitMask() worked */ /* Re-open the file read-only and a new file writeable */ fd=ReplaceFileBuffered(segmentsx->filename_tmp,&segmentsx->fd); /* Modify the on-disk image */ while(!ReadFileBuffered(segmentsx->fd,&segmentx,sizeof(SegmentX))) { if(prevnode1==segmentx.node1 && prevnode2==segmentx.node2) { node_t id1=nodesx->idata[segmentx.node1]; node_t id2=nodesx->idata[segmentx.node2]; if(prevway==segmentx.way) { way_t id=waysx->idata[segmentx.way]; logerror("Segment connecting nodes %"Pnode_t" and %"Pnode_t" in way %"Pway_t" is duplicated.\n",logerror_node(id1),logerror_node(id2),logerror_way(id)); } else { if(!(prevdist&SEGMENT_AREA) && !(segmentx.distance&SEGMENT_AREA)) logerror("Segment connecting nodes %"Pnode_t" and %"Pnode_t" is duplicated.\n",logerror_node(id1),logerror_node(id2)); if(!(prevdist&SEGMENT_AREA) && (segmentx.distance&SEGMENT_AREA)) logerror("Segment connecting nodes %"Pnode_t" and %"Pnode_t" is duplicated (discarded the area).\n",logerror_node(id1),logerror_node(id2)); if((prevdist&SEGMENT_AREA) && !(segmentx.distance&SEGMENT_AREA)) logerror("Segment connecting nodes %"Pnode_t" and %"Pnode_t" is duplicated (discarded the non-area).\n",logerror_node(id1),logerror_node(id2)); if((prevdist&SEGMENT_AREA) && (segmentx.distance&SEGMENT_AREA)) logerror("Segment connecting nodes %"Pnode_t" and %"Pnode_t" is duplicated (both are areas).\n",logerror_node(id1),logerror_node(id2)); } duplicate++; } else { NodeX *nodex1=LookupNodeX(nodesx,segmentx.node1,1); NodeX *nodex2=LookupNodeX(nodesx,segmentx.node2,2); prevnode1=segmentx.node1; prevnode2=segmentx.node2; prevway=segmentx.way; prevdist=DISTANCE(segmentx.distance); /* Mark the ways which are used */ SetBit(segmentsx->usedway,segmentx.way); /* Set the distance but keep the other flags except for area */ segmentx.distance=DISTANCE(DistanceX(nodex1,nodex2))|DISTFLAG(segmentx.distance); segmentx.distance&=~SEGMENT_AREA; /* Write the modified segment */ WriteFileBuffered(fd,&segmentx,sizeof(SegmentX)); good++; } total++; if(!(total%10000)) printf_middle("Processing Segments: Segments=%"Pindex_t" Duplicates=%"Pindex_t,total,duplicate); } segmentsx->number=good; /* Close the files */ segmentsx->fd=CloseFileBuffered(segmentsx->fd); CloseFileBuffered(fd); /* Unmap from memory / close the file */ #if !SLIM nodesx->data=UnmapFile(nodesx->data); #else nodesx->fd=SlimUnmapFile(nodesx->fd); #endif /* Print the final message */ printf_last("Processed Segments: Segments=%"Pindex_t" Duplicates=%"Pindex_t,total,duplicate); } /*++++++++++++++++++++++++++++++++++++++ Index the segments by creating the firstnode index and filling in the segment next2 parameter. SegmentsX *segmentsx The set of segments to modify. NodesX *nodesx The set of nodes to use. WaysX *waysx The set of ways to use. ++++++++++++++++++++++++++++++++++++++*/ void IndexSegments(SegmentsX *segmentsx,NodesX *nodesx,WaysX *waysx) { index_t index,start=0,i; SegmentX *segmentx_list=NULL; #if SLIM index_t length=0; #endif if(segmentsx->number==0) return; /* Print the start message */ printf_first("Indexing Segments: Segments=0"); /* Allocate the array of indexes */ segmentsx->firstnode=(index_t*)malloc(nodesx->number*sizeof(index_t)); log_malloc(segmentsx->firstnode,nodesx->number*sizeof(index_t)); logassert(segmentsx->firstnode,"Failed to allocate memory (try using slim mode?)"); /* Check malloc() worked */ for(i=0;inumber;i++) segmentsx->firstnode[i]=NO_SEGMENT; /* Map into memory / open the files */ #if !SLIM segmentsx->data=MapFileWriteable(segmentsx->filename_tmp); #else segmentsx->fd=SlimMapFileWriteable(segmentsx->filename_tmp); segmentx_list=(SegmentX*)malloc(1024*sizeof(SegmentX)); #endif /* Read through the segments in reverse order (in chunks to help slim mode) */ for(index=segmentsx->number-1;index!=NO_SEGMENT;index--) { SegmentX *segmentx; if((index%1024)==1023 || index==(segmentsx->number-1)) { start=1024*(index/1024); #if !SLIM segmentx_list=LookupSegmentX(segmentsx,start,1); #else length=index-start+1; SlimFetch(segmentsx->fd,segmentx_list,length*sizeof(SegmentX),start*sizeof(SegmentX)); #endif } segmentx=segmentx_list+(index-start); if(nodesx->pdata) { segmentx->node1=nodesx->pdata[segmentx->node1]; segmentx->node2=nodesx->pdata[segmentx->node2]; } if(waysx->cdata) segmentx->way=waysx->cdata[segmentx->way]; segmentx->next2=segmentsx->firstnode[segmentx->node2]; segmentsx->firstnode[segmentx->node1]=index; segmentsx->firstnode[segmentx->node2]=index; if(!(index%10000)) printf_middle("Indexing Segments: Segments=%"Pindex_t,segmentsx->number-index); #if SLIM if(index==start) SlimReplace(segmentsx->fd,segmentx_list,length*sizeof(SegmentX),start*sizeof(SegmentX)); #endif } /* Unmap from memory / close the files */ #if !SLIM segmentsx->data=UnmapFile(segmentsx->data); #else segmentsx->fd=SlimUnmapFile(segmentsx->fd); free(segmentx_list); #endif /* Free the memory */ if(nodesx->pdata) { log_free(nodesx->pdata); free(nodesx->pdata); nodesx->pdata=NULL; } if(waysx->cdata) { log_free(waysx->cdata); free(waysx->cdata); waysx->cdata=NULL; } /* Print the final message */ printf_last("Indexed Segments: Segments=%"Pindex_t,segmentsx->number); } /*++++++++++++++++++++++++++++++++++++++ Prune the deleted segments while resorting the list. SegmentsX *segmentsx The set of segments to sort and modify. WaysX *waysx The set of ways to check. ++++++++++++++++++++++++++++++++++++++*/ void RemovePrunedSegments(SegmentsX *segmentsx,WaysX *waysx) { int fd; index_t xnumber; if(segmentsx->number==0) return; /* Print the start message */ printf_first("Sorting and Pruning Segments"); /* Allocate the way usage bitmask */ segmentsx->usedway=AllocBitMask(waysx->number); log_malloc(segmentsx->usedway,LengthBitMask(waysx->number)*sizeof(BitMask)); logassert(segmentsx->usedway,"Failed to allocate memory (try using slim mode?)"); /* Check AllocBitMask() worked */ /* Re-open the file read-only and a new file writeable */ fd=ReplaceFileBuffered(segmentsx->filename_tmp,&segmentsx->fd); /* Sort by node indexes */ xnumber=segmentsx->number; sortsegmentsx=segmentsx; segmentsx->number=filesort_fixed(segmentsx->fd,fd,sizeof(SegmentX),(int (*)(void*,index_t))delete_pruned, (int (*)(const void*,const void*))sort_by_id, NULL); /* Close the files */ segmentsx->fd=CloseFileBuffered(segmentsx->fd); CloseFileBuffered(fd); /* Print the final message */ printf_last("Sorted and Pruned Segments: Segments=%"Pindex_t" Deleted=%"Pindex_t,xnumber,xnumber-segmentsx->number); } /*++++++++++++++++++++++++++++++++++++++ Delete the pruned segments. int delete_pruned Return 1 if the value is to be kept, otherwise 0. SegmentX *segmentx The extended segment. index_t index The number of unsorted segments that have been read from the input file. ++++++++++++++++++++++++++++++++++++++*/ static int delete_pruned(SegmentX *segmentx,index_t index) { if(IsPrunedSegmentX(segmentx)) return(0); SetBit(sortsegmentsx->usedway,segmentx->way); return(1); } /*++++++++++++++++++++++++++++++++++++++ Remove the duplicate super-segments. SegmentsX *segmentsx The set of super-segments to modify. WaysX *waysx The set of ways to use. ++++++++++++++++++++++++++++++++++++++*/ void DeduplicateSuperSegments(SegmentsX *segmentsx,WaysX *waysx) { int fd; index_t xnumber; if(waysx->number==0) return; /* Print the start message */ printf_first("Sorting and Deduplicating Super-Segments"); /* Map into memory / open the file */ #if !SLIM waysx->data=MapFile(waysx->filename_tmp); #else waysx->fd=SlimMapFile(waysx->filename_tmp); InvalidateWayXCache(waysx->cache); #endif /* Re-open the file read-only and a new file writeable */ fd=ReplaceFileBuffered(segmentsx->filename_tmp,&segmentsx->fd); /* Sort by node indexes */ xnumber=segmentsx->number; sortsegmentsx=segmentsx; sortwaysx=waysx; segmentsx->number=filesort_fixed(segmentsx->fd,fd,sizeof(SegmentX),NULL, (int (*)(const void*,const void*))sort_by_id, (int (*)(void*,index_t))deduplicate_super); /* Close the files */ segmentsx->fd=CloseFileBuffered(segmentsx->fd); CloseFileBuffered(fd); /* Unmap from memory / close the file */ #if !SLIM waysx->data=UnmapFile(waysx->data); #else waysx->fd=SlimUnmapFile(waysx->fd); #endif /* Print the final message */ printf_last("Sorted and Deduplicated Super-Segments: Super-Segments=%"Pindex_t" Duplicate=%"Pindex_t,xnumber,xnumber-segmentsx->number); } /*++++++++++++++++++++++++++++++++++++++ De-duplicate super-segments. int deduplicate_super Return 1 if the value is to be kept, otherwise 0. SegmentX *segmentx The extended super-segment. index_t index The number of sorted super-segments that have already been written to the output file. ++++++++++++++++++++++++++++++++++++++*/ static int deduplicate_super(SegmentX *segmentx,index_t index) { static int nprev; /* internal variable (reset by first call in each sort; index==0) */ static index_t prevnode1,prevnode2; /* internal variable (reset by first call in each sort; index==0) */ static SegmentX prevsegx[MAX_SEG_PER_NODE]; /* internal variable (reset by first call in each sort; index==0) */ static Way prevway[MAX_SEG_PER_NODE]; /* internal variable (reset by first call in each sort; index==0) */ WayX *wayx=LookupWayX(sortwaysx,segmentx->way,1); int isduplicate=0; if(index==0 || segmentx->node1!=prevnode1 || segmentx->node2!=prevnode2) { nprev=1; prevnode1=segmentx->node1; prevnode2=segmentx->node2; prevsegx[0]=*segmentx; prevway[0] =wayx->way; } else { int offset; for(offset=0;offsetdistance)==DISTFLAG(prevsegx[offset].distance)) if(!WaysCompare(&prevway[offset],&wayx->way)) { isduplicate=1; break; } } if(isduplicate) { nprev--; for(;offsetway; nprev++; } } return(!isduplicate); } /*++++++++++++++++++++++++++++++++++++++ Sort the segments geographically after updating the node indexes. SegmentsX *segmentsx The set of segments to modify. NodesX *nodesx The set of nodes to use. ++++++++++++++++++++++++++++++++++++++*/ void SortSegmentListGeographically(SegmentsX *segmentsx,NodesX *nodesx) { int fd; if(segmentsx->number==0) return; /* Print the start message */ printf_first("Sorting Segments Geographically"); /* Re-open the file read-only and a new file writeable */ fd=ReplaceFileBuffered(segmentsx->filename_tmp,&segmentsx->fd); /* Update the segments with geographically sorted node indexes and sort them */ sortnodesx=nodesx; filesort_fixed(segmentsx->fd,fd,sizeof(SegmentX),(int (*)(void*,index_t))geographically_index, (int (*)(const void*,const void*))sort_by_id, NULL); /* Close the files */ segmentsx->fd=CloseFileBuffered(segmentsx->fd); CloseFileBuffered(fd); /* Print the final message */ printf_last("Sorted Segments Geographically: Segments=%"Pindex_t,segmentsx->number); } /*++++++++++++++++++++++++++++++++++++++ Update the segment indexes. int geographically_index Return 1 if the value is to be kept, otherwise 0. SegmentX *segmentx The extended segment. index_t index The number of unsorted segments that have been read from the input file. ++++++++++++++++++++++++++++++++++++++*/ static int geographically_index(SegmentX *segmentx,index_t index) { segmentx->node1=sortnodesx->gdata[segmentx->node1]; segmentx->node2=sortnodesx->gdata[segmentx->node2]; if(segmentx->node1>segmentx->node2) { index_t temp; temp=segmentx->node1; segmentx->node1=segmentx->node2; segmentx->node2=temp; if(segmentx->distance&(ONEWAY_2TO1|ONEWAY_1TO2)) segmentx->distance^=ONEWAY_2TO1|ONEWAY_1TO2; } return(1); } /*++++++++++++++++++++++++++++++++++++++ Save the segment list to a file. SegmentsX *segmentsx The set of segments to save. const char *filename The name of the file to save. ++++++++++++++++++++++++++++++++++++++*/ void SaveSegmentList(SegmentsX *segmentsx,const char *filename) { index_t i; int fd; SegmentsFile segmentsfile={0}; index_t super_number=0,normal_number=0; /* Print the start message */ printf_first("Writing Segments: Segments=0"); /* Re-open the file */ segmentsx->fd=ReOpenFileBuffered(segmentsx->filename_tmp); /* Write out the segments data */ fd=OpenFileBufferedNew(filename); SeekFileBuffered(fd,sizeof(SegmentsFile)); for(i=0;inumber;i++) { SegmentX segmentx; Segment segment={0}; ReadFileBuffered(segmentsx->fd,&segmentx,sizeof(SegmentX)); segment.node1 =segmentx.node1; segment.node2 =segmentx.node2; segment.next2 =segmentx.next2; segment.way =segmentx.way; segment.distance=segmentx.distance; if(IsSuperSegment(&segment)) super_number++; if(IsNormalSegment(&segment)) normal_number++; WriteFileBuffered(fd,&segment,sizeof(Segment)); if(!((i+1)%10000)) printf_middle("Writing Segments: Segments=%"Pindex_t,i+1); } /* Write out the header structure */ segmentsfile.number=segmentsx->number; segmentsfile.snumber=super_number; segmentsfile.nnumber=normal_number; SeekFileBuffered(fd,0); WriteFileBuffered(fd,&segmentsfile,sizeof(SegmentsFile)); CloseFileBuffered(fd); /* Close the file */ segmentsx->fd=CloseFileBuffered(segmentsx->fd); /* Print the final message */ printf_last("Wrote Segments: Segments=%"Pindex_t,segmentsx->number); } /*++++++++++++++++++++++++++++++++++++++ Calculate the distance between two nodes. distance_t DistanceX Returns the distance between the extended nodes. NodeX *nodex1 The starting node. NodeX *nodex2 The end node. ++++++++++++++++++++++++++++++++++++++*/ static distance_t DistanceX(NodeX *nodex1,NodeX *nodex2) { double dlon = latlong_to_radians(nodex1->longitude) - latlong_to_radians(nodex2->longitude); double dlat = latlong_to_radians(nodex1->latitude) - latlong_to_radians(nodex2->latitude); double lat1 = latlong_to_radians(nodex1->latitude); double lat2 = latlong_to_radians(nodex2->latitude); double a1,a2,a,sa,c,d; if(dlon==0 && dlat==0) return 0; a1 = sin (dlat / 2); a2 = sin (dlon / 2); a = a1 * a1 + cos (lat1) * cos (lat2) * a2 * a2; sa = sqrt (a); if (sa <= 1.0) {c = 2 * asin (sa);} else {c = 2 * asin (1.0);} d = 6378.137 * c; return km_to_distance(d); } routino-3.2/src/types.h 644 233 144 34323 12416231346 10360 0/*************************************** Type definitions Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2014 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef TYPES_H #define TYPES_H /*+ To stop multiple inclusions. +*/ #include #include #include #ifndef M_PI #define M_PI 3.14159265358979323846 #endif /* Constants and macros for handling them */ /*+ The number of waypoints allowed to be specified. +*/ #define NWAYPOINTS 99 /*+ An undefined waypoint index. +*/ #define NO_WAYPOINT ((waypoint_t)~0) /*+ An undefined node index. +*/ #define NO_NODE ((index_t)~0) /*+ An undefined segment index. +*/ #define NO_SEGMENT ((index_t)~0) /*+ An undefined way index. +*/ #define NO_WAY ((index_t)~0) /*+ An undefined relation index. +*/ #define NO_RELATION ((index_t)~0) /*+ An undefined location. +*/ #define NO_LATLONG ((latlong_t)0x80000000) /*+ The lowest number allowed for a fake node. +*/ #define NODE_FAKE ((index_t)0xffff0000) /*+ The lowest number allowed for a fake segment. +*/ #define SEGMENT_FAKE ((index_t)0xffff0000) /*+ The latitude and longitude conversion factor from floating point (radians) to integer. +*/ #define LAT_LONG_SCALE (1024*65536) /*+ The latitude and longitude integer range within each bin. +*/ #define LAT_LONG_BIN 65536 /*+ A flag to mark a node as a super-node. +*/ #define NODE_SUPER ((nodeflags_t)0x8000) /*+ A flag to mark a node as suitable for a U-turn. +*/ #define NODE_UTURN ((nodeflags_t)0x4000) /*+ A flag to mark a node as a mini-roundabout. +*/ #define NODE_MINIRNDBT ((nodeflags_t)0x2000) /*+ A flag to mark a node as a turn relation via node. +*/ #define NODE_TURNRSTRCT ((nodeflags_t)0x1000) /*+ A flag to mark a node as adjacent to a turn relation via node. +*/ #define NODE_TURNRSTRCT2 ((nodeflags_t)0x0800) /*+ A flag to mark a node as deleted. +*/ #define NODE_DELETED ((nodeflags_t)0x0400) /*+ A flag to mark a segment as being part of an area (must be the highest valued flag). +*/ #define SEGMENT_AREA ((distance_t)0x80000000) /*+ A flag to mark a segment as one-way from node1 to node2. +*/ #define ONEWAY_1TO2 ((distance_t)0x40000000) /*+ A flag to mark a segment as one-way from node2 to node1. +*/ #define ONEWAY_2TO1 ((distance_t)0x20000000) /*+ A flag to mark a segment as a super-segment. +*/ #define SEGMENT_SUPER ((distance_t)0x10000000) /*+ A flag to mark a segment as a normal segment. +*/ #define SEGMENT_NORMAL ((distance_t)0x08000000) /*+ The real distance ignoring the other flags. +*/ #define DISTANCE(xx) ((distance_t)((xx)&(~(SEGMENT_AREA|ONEWAY_1TO2|ONEWAY_2TO1|SEGMENT_SUPER|SEGMENT_NORMAL)))) /*+ The distance flags selecting only the flags. +*/ #define DISTFLAG(xx) ((distance_t)((xx)&(SEGMENT_AREA|ONEWAY_1TO2|ONEWAY_2TO1|SEGMENT_SUPER|SEGMENT_NORMAL))) /*+ A very large almost infinite distance. +*/ #define INF_DISTANCE DISTANCE(~0) /*+ A very large almost infinite score. +*/ #define INF_SCORE (score_t)1E30 /*+ A flag to mark a deleted way. +*/ #define WAY_DELETED ((highway_t)~0) /*+ A flag to mark a deleted relation. +*/ #define RELATION_DELETED ((transports_t)~0) /* Simple Types */ /*+ A waypoint index. +*/ typedef uint16_t waypoint_t; /*+ A node, segment, way or relation index. +*/ typedef uint32_t index_t; /*+ A printf formatting string for an index_t type (this should match the index_t definition above). +*/ #define Pindex_t PRIu32 /* PRIu32 and PRIu64 are defined in intypes.h */ /*+ A node latitude or longitude (range: +/-pi*LAT_LONG_SCALE = +/-3.14*1024*65536 = ~29 bits). +*/ typedef int32_t latlong_t; /*+ A node latitude or longitude bin number (range: +/-pi*LAT_LONG_SCALE/LAT_LONG_BIN = +/-3.14*1024 = ~13 bits). +*/ typedef int16_t ll_bin_t; /*+ A node latitude and longitude bin number (range: +/-(pi*LAT_LONG_SCALE/LAT_LONG_BIN)^2 = +/-(3.14*1024)^2 = ~26 bits). +*/ typedef int32_t ll_bin2_t; /*+ A node latitude or longitude offset (range: 0 -> LAT_LONG_BIN-1 = 0 -> 65535 = 16 bits). +*/ typedef uint16_t ll_off_t; /*+ Conversion from a latlong (integer latitude or longitude) to a bin number. +*/ #define latlong_to_bin(xxx) (ll_bin_t)((latlong_t)((xxx)&~(LAT_LONG_BIN-1))/LAT_LONG_BIN) /*+ Conversion from a bin number to a latlong (integer latitude or longitude). +*/ #define bin_to_latlong(xxx) ((latlong_t)(xxx)*LAT_LONG_BIN) /*+ Conversion from a latlong (integer latitude or longitude) to a bin offset. +*/ #define latlong_to_off(xxx) (ll_off_t)((latlong_t)(xxx)&(LAT_LONG_BIN-1)) /*+ Conversion from a bin offset to a latlong (integer latitude or longitude). +*/ #define off_to_latlong(xxx) ((latlong_t)(xxx)) /*+ Conversion from a latitude or longitude in radians to a latlong (integer latitude or longitude). +*/ #define radians_to_latlong(xxx) ((latlong_t)floor((xxx)*LAT_LONG_SCALE+0.5)) /*+ Conversion from a latlong (integer latitude or longitude) to a latitude or longitude in radians. +*/ #define latlong_to_radians(xxx) ((double)(xxx)/LAT_LONG_SCALE) /*+ Conversion from radians to degrees. +*/ #define radians_to_degrees(xxx) ((xxx)*(180.0/M_PI)) /*+ Conversion from degrees to radians. +*/ #define degrees_to_radians(xxx) ((xxx)*(M_PI/180.0)) /*+ Node flags. +*/ typedef uint16_t nodeflags_t; /*+ A distance, measured in metres (will not overflow for any earth-based distance). +*/ typedef uint32_t distance_t; /*+ A duration, measured in 1/10th seconds (will not overflow for 13 years). +*/ typedef uint32_t duration_t; /*+ A routing optimisation score. +*/ typedef float score_t; /*+ Conversion from distance_t to kilometres. +*/ #define distance_to_km(xx) ((double)(xx)/1000.0) /*+ Conversion from kilometres to distance_t. +*/ #define km_to_distance(xx) ((distance_t)((double)(xx)*1000.0)) /*+ Conversion from duration_t to minutes. +*/ #define duration_to_minutes(xx) ((double)(xx)/600.0) /*+ Conversion from duration_t to hours. +*/ #define duration_to_hours(xx) ((double)(xx)/36000.0) /*+ Conversion from hours to duration_t. +*/ #define hours_to_duration(xx) ((duration_t)((double)(xx)*36000.0)) /*+ Conversion from distance_t and speed_t to duration_t. +*/ #define distance_speed_to_duration(xx,yy) ((duration_t)(((double)(xx)/(double)(yy))*(36000.0/1000.0))) /*+ The type of a highway. +*/ typedef uint8_t highway_t; /*+ The different types of a highway. +*/ typedef enum _Highway { Highway_None = 0, Highway_Motorway = 1, Highway_Trunk = 2, Highway_Primary = 3, Highway_Secondary = 4, Highway_Tertiary = 5, Highway_Unclassified = 6, Highway_Residential = 7, Highway_Service = 8, Highway_Track = 9, Highway_Cycleway = 10, Highway_Path = 11, Highway_Steps = 12, Highway_Ferry = 13, Highway_Count = 14, /* One more than the number of highway types. */ Highway_CycleBothWays = 16, Highway_OneWay = 32, Highway_Roundabout = 64, Highway_Area = 128 } Highway; #define HIGHWAY(xx) ((xx)&0x0f) /*+ A bitmask of multiple highway types. +*/ typedef uint16_t highways_t; #define HIGHWAYS(xx) (1<<(HIGHWAY(xx)-1)) /*+ The different types of a highway as a bitmask. +*/ typedef enum _Highways { Highways_None = 0, Highways_Motorway = HIGHWAYS(Highway_Motorway ), Highways_Trunk = HIGHWAYS(Highway_Trunk ), Highways_Primary = HIGHWAYS(Highway_Primary ), Highways_Secondary = HIGHWAYS(Highway_Secondary ), Highways_Tertiary = HIGHWAYS(Highway_Tertiary ), Highways_Unclassified = HIGHWAYS(Highway_Unclassified), Highways_Residential = HIGHWAYS(Highway_Residential ), Highways_Service = HIGHWAYS(Highway_Service ), Highways_Track = HIGHWAYS(Highway_Track ), Highways_Cycleway = HIGHWAYS(Highway_Cycleway ), Highways_Path = HIGHWAYS(Highway_Path ), Highways_Steps = HIGHWAYS(Highway_Steps ), Highways_Ferry = HIGHWAYS(Highway_Ferry ) } Highways; /*+ The type of a transport. +*/ typedef uint8_t transport_t; /*+ The different types of transport. +*/ typedef enum _Transport { Transport_None = 0, Transport_Foot = 1, Transport_Horse = 2, Transport_Wheelchair = 3, Transport_Bicycle = 4, Transport_Moped = 5, Transport_Motorcycle = 6, Transport_Motorcar = 7, Transport_Goods = 8, Transport_HGV = 9, Transport_PSV = 10, Transport_Count = 11 /*+ One more than the number of transport types. +*/ } Transport; /*+ A bitmask of multiple transport types. +*/ typedef uint16_t transports_t; #define TRANSPORTS(xx) (1<<((xx)-1)) /*+ The different types of transport as a bitmask. +*/ typedef enum _Transports { Transports_None = 0, Transports_Foot = TRANSPORTS(Transport_Foot ), Transports_Horse = TRANSPORTS(Transport_Horse ), Transports_Wheelchair = TRANSPORTS(Transport_Wheelchair), Transports_Bicycle = TRANSPORTS(Transport_Bicycle ), Transports_Moped = TRANSPORTS(Transport_Moped ), Transports_Motorcycle = TRANSPORTS(Transport_Motorcycle), Transports_Motorcar = TRANSPORTS(Transport_Motorcar ), Transports_Goods = TRANSPORTS(Transport_Goods ), Transports_HGV = TRANSPORTS(Transport_HGV ), Transports_PSV = TRANSPORTS(Transport_PSV ), Transports_ALL = TRANSPORTS(Transport_Count )-1 } Transports; /*+ The type of a property. +*/ typedef uint8_t property_t; /*+ The different types of property. +*/ typedef enum _Property { Property_None = 0, Property_Paved = 1, Property_Multilane = 2, Property_Bridge = 3, Property_Tunnel = 4, Property_FootRoute = 5, Property_BicycleRoute = 6, Property_Count = 7 /* One more than the number of property types. */ } Property; /*+ A bitmask of multiple properties. +*/ typedef uint8_t properties_t; #define PROPERTIES(xx) (1<<((xx)-1)) /*+ The different properties as a bitmask. +*/ typedef enum _Properties { Properties_None = 0, Properties_Paved = PROPERTIES(Property_Paved ), Properties_Multilane = PROPERTIES(Property_Multilane ), Properties_Bridge = PROPERTIES(Property_Bridge ), Properties_Tunnel = PROPERTIES(Property_Tunnel ), Properties_FootRoute = PROPERTIES(Property_FootRoute ), Properties_BicycleRoute = PROPERTIES(Property_BicycleRoute ), Properties_ALL = PROPERTIES(Property_Count )-1 } Properties; /*+ The speed limit of a way, measured in km/hour. +*/ typedef uint8_t speed_t; /*+ The maximum weight of a way, measured in multiples of 0.2 tonnes. +*/ typedef uint8_t weight_t; /*+ The maximum height of a way, measured in multiples of 0.1 metres. +*/ typedef uint8_t height_t; /*+ The maximum width of a way, measured in multiples of 0.1 metres. +*/ typedef uint8_t width_t; /*+ The maximum length of a way, measured in multiples of 0.1 metres. +*/ typedef uint8_t length_t; /*+ Conversion of km/hr to speed_t - simple inline function with error checking. +*/ inline static speed_t kph_to_speed(double xxx); inline static speed_t kph_to_speed(double xxx) { if(xxx>255) return(255); if(xxx<0) return(0); return((speed_t)xxx); } /*+ Conversion of speed_t to km/hr. +*/ #define speed_to_kph(xxx) (int)(xxx) /*+ Conversion of tonnes to weight_t - simple inline function with error checking. +*/ inline static weight_t tonnes_to_weight(double xxx); inline static weight_t tonnes_to_weight(double xxx) { if(xxx>51) return(255); if(xxx<0) return(0); return((weight_t)(xxx*5)); } /*+ Conversion of weight_t to tonnes. +*/ #define weight_to_tonnes(xxx) ((double)(xxx)/5.0) /*+ Conversion of metres to height_t - simple inline function with error checking. +*/ inline static height_t metres_to_height(double xxx); inline static height_t metres_to_height(double xxx) { if(xxx>25.5) return(255); if(xxx<0) return(0); return((height_t)(xxx*10)); } /*+ Conversion of height_t to metres. +*/ #define height_to_metres(xxx) ((double)(xxx)/10.0) /*+ Conversion of metres to width_t - simple inline function with error checking. +*/ inline static width_t metres_to_width(double xxx); inline static width_t metres_to_width(double xxx) { if(xxx>25.5) return(255); if(xxx<0) return(0); return((width_t)(xxx*10)); } /*+ Conversion of width_t to metres. +*/ #define width_to_metres(xxx) ((double)(xxx)/10.0) /*+ Conversion of metres to length_t - simple inline function with error checking. +*/ inline static length_t metres_to_length(double xxx); inline static length_t metres_to_length(double xxx) { if(xxx>25.5) return(255); if(xxx<0) return(0); return((length_t)(xxx*10)); } /*+ Conversion of length_t to metres. +*/ #define length_to_metres(xxx) ((double)(xxx)/10.0) /* Data structures */ typedef struct _Node Node; typedef struct _Nodes Nodes; typedef struct _Segment Segment; typedef struct _Segments Segments; typedef struct _Way Way; typedef struct _Ways Ways; typedef struct _TurnRelation TurnRelation; typedef struct _Relations Relations; /* Functions in types.c */ Highway HighwayType(const char *highway); Transport TransportType(const char *transport); Property PropertyType(const char *property); const char *HighwayName(Highway highway); const char *TransportName(Transport transport); const char *PropertyName(Property property); const char *HighwaysNameList(highways_t highways); const char *AllowedNameList(transports_t allowed); const char *PropertiesNameList(properties_t properties); const char *HighwayList(void); const char *TransportList(void); const char *PropertyList(void); #endif /* TYPES_H */ routino-3.2/src/nodes.c 644 233 144 44017 12563633052 10323 0/*************************************** Node data type functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include "types.h" #include "nodes.h" #include "segments.h" #include "ways.h" #include "files.h" #include "profiles.h" /* Local functions */ static int valid_segment_for_profile(Ways *ways,Segment *segmentp,Profile *profile); /*++++++++++++++++++++++++++++++++++++++ Load in a node list from a file. Nodes *LoadNodeList Returns the node list. const char *filename The name of the file to load. ++++++++++++++++++++++++++++++++++++++*/ Nodes *LoadNodeList(const char *filename) { Nodes *nodes; #if SLIM size_t sizeoffsets; #endif nodes=(Nodes*)malloc(sizeof(Nodes)); #if !SLIM nodes->data=MapFile(filename); /* Copy the NodesFile header structure from the loaded data */ nodes->file=*((NodesFile*)nodes->data); /* Set the pointers in the Nodes structure. */ nodes->offsets=(index_t*)(nodes->data+sizeof(NodesFile)); nodes->nodes =(Node* )(nodes->data+sizeof(NodesFile)+(nodes->file.latbins*nodes->file.lonbins+1)*sizeof(index_t)); #else nodes->fd=SlimMapFile(filename); /* Copy the NodesFile header structure from the loaded data */ SlimFetch(nodes->fd,&nodes->file,sizeof(NodesFile),0); sizeoffsets=(nodes->file.latbins*nodes->file.lonbins+1)*sizeof(index_t); nodes->offsets=(index_t*)malloc(sizeoffsets); #ifndef LIBROUTINO log_malloc(nodes->offsets,sizeoffsets); #endif SlimFetch(nodes->fd,nodes->offsets,sizeoffsets,sizeof(NodesFile)); nodes->nodesoffset=(offset_t)(sizeof(NodesFile)+sizeoffsets); nodes->cache=NewNodeCache(); #ifndef LIBROUTINO log_malloc(nodes->cache,sizeof(*nodes->cache)); #endif #endif return(nodes); } /*++++++++++++++++++++++++++++++++++++++ Destroy the node list. Nodes *nodes The node list to destroy. ++++++++++++++++++++++++++++++++++++++*/ void DestroyNodeList(Nodes *nodes) { #if !SLIM nodes->data=UnmapFile(nodes->data); #else nodes->fd=SlimUnmapFile(nodes->fd); #ifndef LIBROUTINO log_free(nodes->offsets); #endif free(nodes->offsets); #ifndef LIBROUTINO log_free(nodes->cache); #endif DeleteNodeCache(nodes->cache); #endif free(nodes); } /*++++++++++++++++++++++++++++++++++++++ Find the closest node given its latitude, longitude and the profile of the mode of transport that must be able to move to/from this node. index_t FindClosestNode Returns the closest node. Nodes *nodes The set of nodes to search. Segments *segments The set of segments to use. Ways *ways The set of ways to use. double latitude The latitude to look for. double longitude The longitude to look for. distance_t distance The maximum distance to look from the specified coordinates. Profile *profile The profile of the mode of transport. distance_t *bestdist Returns the distance to the best node. ++++++++++++++++++++++++++++++++++++++*/ index_t FindClosestNode(Nodes *nodes,Segments *segments,Ways *ways,double latitude,double longitude, distance_t distance,Profile *profile,distance_t *bestdist) { ll_bin_t latbin=latlong_to_bin(radians_to_latlong(latitude ))-nodes->file.latzero; ll_bin_t lonbin=latlong_to_bin(radians_to_latlong(longitude))-nodes->file.lonzero; int delta=0,count; index_t i,index1,index2; index_t bestn=NO_NODE; distance_t bestd=INF_DISTANCE; /* Find the maximum distance to search */ double dlat=DeltaLat(longitude,distance); double dlon=DeltaLon(latitude ,distance); double minlat=latitude -dlat; double maxlat=latitude +dlat; double minlon=longitude-dlon; double maxlon=longitude+dlon; ll_bin_t minlatbin=latlong_to_bin(radians_to_latlong(minlat))-nodes->file.latzero; ll_bin_t maxlatbin=latlong_to_bin(radians_to_latlong(maxlat))-nodes->file.latzero; ll_bin_t minlonbin=latlong_to_bin(radians_to_latlong(minlon))-nodes->file.lonzero; ll_bin_t maxlonbin=latlong_to_bin(radians_to_latlong(maxlon))-nodes->file.lonzero; ll_off_t minlatoff=latlong_to_off(radians_to_latlong(minlat)); ll_off_t maxlatoff=latlong_to_off(radians_to_latlong(maxlat)); ll_off_t minlonoff=latlong_to_off(radians_to_latlong(minlon)); ll_off_t maxlonoff=latlong_to_off(radians_to_latlong(maxlon)); /* Start with the bin containing the location, then spiral outwards. */ do { ll_bin_t latb,lonb; ll_bin2_t llbin; count=0; for(latb=latbin-delta;latb<=latbin+delta;latb++) { if(latb<0 || latb>=nodes->file.latbins || latbmaxlatbin) continue; for(lonb=lonbin-delta;lonb<=lonbin+delta;lonb++) { if(lonb<0 || lonb>=nodes->file.lonbins || lonbmaxlonbin) continue; if(abs(latb-latbin)file.latbins+latb; index1=LookupNodeOffset(nodes,llbin); index2=LookupNodeOffset(nodes,llbin+1); for(i=index1;ilatoffsetlatoffset>maxlatoff) continue; if(lonb==minlonbin && nodep->lonoffsetlonoffset>maxlonoff) continue; lat=latlong_to_radians(bin_to_latlong(nodes->file.latzero+latb)+off_to_latlong(nodep->latoffset)); lon=latlong_to_radians(bin_to_latlong(nodes->file.lonzero+lonb)+off_to_latlong(nodep->lonoffset)); dist=Distance(lat,lon,latitude,longitude); if(distfile.latzero; ll_bin_t lonbin=latlong_to_bin(radians_to_latlong(longitude))-nodes->file.lonzero; int delta=0,count; index_t i,index1,index2; index_t bestn1=NO_NODE,bestn2=NO_NODE; distance_t bestd=INF_DISTANCE,bestd1=INF_DISTANCE,bestd2=INF_DISTANCE; index_t bests=NO_SEGMENT; /* Find the maximum distance to search */ double dlat=DeltaLat(longitude,distance); double dlon=DeltaLon(latitude ,distance); double minlat=latitude -dlat; double maxlat=latitude +dlat; double minlon=longitude-dlon; double maxlon=longitude+dlon; ll_bin_t minlatbin=latlong_to_bin(radians_to_latlong(minlat))-nodes->file.latzero; ll_bin_t maxlatbin=latlong_to_bin(radians_to_latlong(maxlat))-nodes->file.latzero; ll_bin_t minlonbin=latlong_to_bin(radians_to_latlong(minlon))-nodes->file.lonzero; ll_bin_t maxlonbin=latlong_to_bin(radians_to_latlong(maxlon))-nodes->file.lonzero; ll_off_t minlatoff=latlong_to_off(radians_to_latlong(minlat)); ll_off_t maxlatoff=latlong_to_off(radians_to_latlong(maxlat)); ll_off_t minlonoff=latlong_to_off(radians_to_latlong(minlon)); ll_off_t maxlonoff=latlong_to_off(radians_to_latlong(maxlon)); /* Start with the bin containing the location, then spiral outwards. */ do { ll_bin_t latb,lonb; ll_bin2_t llbin; count=0; for(latb=latbin-delta;latb<=latbin+delta;latb++) { if(latb<0 || latb>=nodes->file.latbins || latbmaxlatbin) continue; for(lonb=lonbin-delta;lonb<=lonbin+delta;lonb++) { if(lonb<0 || lonb>=nodes->file.lonbins || lonbmaxlonbin) continue; if(abs(latb-latbin)file.latbins+latb; index1=LookupNodeOffset(nodes,llbin); index2=LookupNodeOffset(nodes,llbin+1); for(i=index1;ilatoffsetlatoffset>maxlatoff) continue; if(lonb==minlonbin && nodep->lonoffsetlonoffset>maxlonoff) continue; lat1=latlong_to_radians(bin_to_latlong(nodes->file.latzero+latb)+off_to_latlong(nodep->latoffset)); lon1=latlong_to_radians(bin_to_latlong(nodes->file.lonzero+lonb)+off_to_latlong(nodep->lonoffset)); dist1=Distance(lat1,lon1,latitude,longitude); if(dist1=0 && dist3b>=0) distp=sqrt((double)dist1*(double)dist1-dist3a*dist3a); else if(dist3a>0) { distp=dist2; dist3a=dist3; dist3b=0; } else /* if(dist3b>0) */ { distp=dist1; dist3a=0; dist3b=dist3; } } if(distp<(double)bestd) { bests=IndexSegment(segments,segmentp); if(segmentp->node1==i) { bestn1=i; bestn2=OtherNode(segmentp,i); bestd1=(distance_t)dist3a; bestd2=(distance_t)dist3b; } else { bestn1=OtherNode(segmentp,i); bestn2=i; bestd1=(distance_t)dist3b; bestd2=(distance_t)dist3a; } bestd=(distance_t)distp; } } segmentp=NextSegment(segments,segmentp,i); } while(segmentp); } /* dist1 < distance */ } count++; } } delta++; } while(count); *bestdist=bestd; *bestnode1=bestn1; *bestnode2=bestn2; *bestdist1=bestd1; *bestdist2=bestd2; return(bests); } /*++++++++++++++++++++++++++++++++++++++ Check if the transport defined by the profile is allowed on the segment. int valid_segment_for_profile Return 1 if it is or 0 if not. Ways *ways The set of ways to use. Segment *segmentp The segment to check. Profile *profile The profile to check. ++++++++++++++++++++++++++++++++++++++*/ static int valid_segment_for_profile(Ways *ways,Segment *segmentp,Profile *profile) { Way *wayp=LookupWay(ways,segmentp->way,1); score_t segment_pref; int i; /* mode of transport must be allowed on the highway */ if(!(wayp->allow&profile->allow)) return(0); /* must obey weight restriction (if exists) */ if(wayp->weight && wayp->weightweight) return(0); /* must obey height/width/length restriction (if exists) */ if((wayp->height && wayp->heightheight) || (wayp->width && wayp->width width ) || (wayp->length && wayp->lengthlength)) return(0); segment_pref=profile->highway[HIGHWAY(wayp->type)]; for(i=1;ifile.props & PROPERTIES(i)) { if(wayp->props & PROPERTIES(i)) segment_pref*=profile->props_yes[i]; else segment_pref*=profile->props_no[i]; } /* profile preferences must allow this highway */ if(segment_pref==0) return(0); /* Must be OK */ return(1); } /*++++++++++++++++++++++++++++++++++++++ Get the latitude and longitude associated with a node. Nodes *nodes The set of nodes to use. index_t index The node index. Node *nodep A pointer to the node if already available. double *latitude Returns the latitude. double *longitude Returns the logitude. ++++++++++++++++++++++++++++++++++++++*/ void GetLatLong(Nodes *nodes,index_t index,Node *nodep,double *latitude,double *longitude) { ll_bin_t latbin,lonbin; ll_bin2_t bin=-1; ll_bin2_t start,end,mid; index_t offset; /* Binary search - search key nearest match below is required. * * # <- start | Check mid and move start or end if it doesn't match * # | * # | A lower bound match is wanted we can set end=mid-1 or * # <- mid | start=mid because we know that mid doesn't match. * # | * # | Eventually either end=start or end=start+1 and one of * # <- end | start or end is the wanted one. */ /* Search for offset */ start=0; end=nodes->file.lonbins*nodes->file.latbins; do { mid=(start+end)/2; /* Choose mid point */ offset=LookupNodeOffset(nodes,mid); if(offsetindex) /* Mid point is too high */ end=mid?(mid-1):mid; else /* Mid point is correct */ {bin=mid;break;} } while((end-start)>1); if(bin==-1) { offset=LookupNodeOffset(nodes,end); if(offset>index) bin=start; else bin=end; } while(bin<=(nodes->file.lonbins*nodes->file.latbins) && LookupNodeOffset(nodes,bin)==LookupNodeOffset(nodes,bin+1)) bin++; latbin=bin%nodes->file.latbins; lonbin=bin/nodes->file.latbins; /* Return the values */ if(nodep==NULL) nodep=LookupNode(nodes,index,4); *latitude =latlong_to_radians(bin_to_latlong(nodes->file.latzero+latbin)+off_to_latlong(nodep->latoffset)); *longitude=latlong_to_radians(bin_to_latlong(nodes->file.lonzero+lonbin)+off_to_latlong(nodep->lonoffset)); } routino-3.2/src/segmentsx.h 644 233 144 15576 12550012612 11232 0/*************************************** A header file for the extended segments. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef SEGMENTSX_H #define SEGMENTSX_H /*+ To stop multiple inclusions. +*/ #include #include "types.h" #include "typesx.h" #include "cache.h" #include "files.h" /* Data structures */ /*+ An extended structure used for processing. +*/ struct _SegmentX { index_t node1; /*+ The NodeX index of the starting node. +*/ index_t node2; /*+ The NodeX index of the finishing node. +*/ index_t next2; /*+ The index of the next segment with the same node2. +*/ index_t way; /*+ The WayX index of the way. +*/ distance_t distance; /*+ The distance between the nodes. +*/ }; /*+ A structure containing a set of segments (memory format). +*/ struct _SegmentsX { char *filename_tmp; /*+ The name of the temporary file (for the SegmentsX). +*/ int fd; /*+ The file descriptor of the open file (for the SegmentsX). +*/ index_t number; /*+ The number of extended segments still being considered. +*/ #if !SLIM SegmentX *data; /*+ The extended segment data (when mapped into memory). +*/ #else SegmentX cached[4]; /*+ Four cached extended segments read from the file in slim mode. +*/ index_t incache[4]; /*+ The indexes of the cached extended segments. +*/ SegmentXCache *cache; /*+ A RAM cache of extended segments read from the file. +*/ #endif index_t *firstnode; /*+ The first segment index for each node. +*/ index_t *next1; /*+ The index of the next segment with the same node1 (used while pruning). +*/ BitMask *usedway; /*+ A flag to indicate if a way is used (used for removing pruned ways). +*/ }; /* Functions in segmentsx.c */ SegmentsX *NewSegmentList(void); void FreeSegmentList(SegmentsX *segmentsx); void AppendSegmentList(SegmentsX *segmentsx,index_t way,index_t node1,index_t node2,distance_t distance); void FinishSegmentList(SegmentsX *segmentsx); SegmentX *FirstSegmentX(SegmentsX *segmentsx,index_t nodeindex,int position); SegmentX *NextSegmentX(SegmentsX *segmentsx,SegmentX *segmentx,index_t nodeindex); void SortSegmentList(SegmentsX *segmentsx); void IndexSegments(SegmentsX *segmentsx,NodesX *nodesx,WaysX *waysx); void ProcessSegments(SegmentsX *segmentsx,NodesX *nodesx,WaysX *waysx); void RemovePrunedSegments(SegmentsX *segmentsx,WaysX *waysx); void DeduplicateSuperSegments(SegmentsX *segmentsx,WaysX *waysx); void SortSegmentListGeographically(SegmentsX *segmentsx,NodesX *nodesx); void SaveSegmentList(SegmentsX *segmentsx,const char *filename); /* Macros / inline functions */ /*+ Return true if this is a pruned segment. +*/ #define IsPrunedSegmentX(xxx) ((xxx)->node1==NO_NODE) #if !SLIM #define LookupSegmentX(segmentsx,index,position) &(segmentsx)->data[index] #define IndexSegmentX(segmentsx,segmentx) (index_t)((segmentx)-&(segmentsx)->data[0]) #define PutBackSegmentX(segmentsx,segmentx) while(0) { /* nop */ } #define ReLookupSegmentX(segmentsx,segmentx) while(0) { /* nop */ } #else /* Prototypes */ static inline SegmentX *LookupSegmentX(SegmentsX *segmentsx,index_t index,int position); static inline index_t IndexSegmentX(SegmentsX *segmentsx,SegmentX *segmentx); static inline void PutBackSegmentX(SegmentsX *segmentsx,SegmentX *segmentx); static inline void ReLookupSegmentX(SegmentsX *segmentsx,SegmentX *segmentx); CACHE_NEWCACHE_PROTO(SegmentX) CACHE_DELETECACHE_PROTO(SegmentX) CACHE_FETCHCACHE_PROTO(SegmentX) CACHE_REPLACECACHE_PROTO(SegmentX) CACHE_INVALIDATECACHE_PROTO(SegmentX) /* Data type */ CACHE_STRUCTURE(SegmentX) /* Inline functions */ CACHE_NEWCACHE(SegmentX) CACHE_DELETECACHE(SegmentX) CACHE_FETCHCACHE(SegmentX) CACHE_REPLACECACHE(SegmentX) CACHE_INVALIDATECACHE(SegmentX) /*++++++++++++++++++++++++++++++++++++++ Lookup a particular extended segment with the specified id from the file on disk. SegmentX *LookupSegmentX Returns a pointer to a cached copy of the extended segment. SegmentsX *segmentsx The set of segments to use. index_t index The segment index to look for. int position The position in the cache to use. ++++++++++++++++++++++++++++++++++++++*/ static inline SegmentX *LookupSegmentX(SegmentsX *segmentsx,index_t index,int position) { segmentsx->cached[position-1]=*FetchCachedSegmentX(segmentsx->cache,index,segmentsx->fd,0); segmentsx->incache[position-1]=index; return(&segmentsx->cached[position-1]); } /*++++++++++++++++++++++++++++++++++++++ Find the extended segment index for a particular extended segment pointer. index_t IndexSegmentX Returns the index of the extended segment. SegmentsX *segmentsx The set of segments to use. SegmentX *segmentx The extended segment whose index is to be found. ++++++++++++++++++++++++++++++++++++++*/ static inline index_t IndexSegmentX(SegmentsX *segmentsx,SegmentX *segmentx) { int position1=segmentx-&segmentsx->cached[0]; return(segmentsx->incache[position1]); } /*++++++++++++++++++++++++++++++++++++++ Put back an extended segment's data into the file on disk. SegmentsX *segmentsx The set of segments to use. SegmentX *segmentx The extended segment to be put back. ++++++++++++++++++++++++++++++++++++++*/ static inline void PutBackSegmentX(SegmentsX *segmentsx,SegmentX *segmentx) { int position1=segmentx-&segmentsx->cached[0]; ReplaceCachedSegmentX(segmentsx->cache,segmentx,segmentsx->incache[position1],segmentsx->fd,0); } /*++++++++++++++++++++++++++++++++++++++ Lookup an extended segment's data from the disk into file again after the disk was updated. SegmentsX *segmentsx The set of segments to use. SegmentX *segmentx The extended segment to refresh. ++++++++++++++++++++++++++++++++++++++*/ static inline void ReLookupSegmentX(SegmentsX *segmentsx,SegmentX *segmentx) { int position1=segmentx-&segmentsx->cached[0]; segmentsx->cached[position1]=*FetchCachedSegmentX(segmentsx->cache,segmentsx->incache[position1],segmentsx->fd,0); } #endif /* SLIM */ #endif /* SEGMENTSX_H */ routino-3.2/src/planetsplitter.c 644 233 144 54533 13015115407 12261 0/*************************************** OSM planet file splitter. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2016 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include #include "version.h" #include "types.h" #include "ways.h" #include "typesx.h" #include "nodesx.h" #include "segmentsx.h" #include "waysx.h" #include "relationsx.h" #include "superx.h" #include "prunex.h" #include "files.h" #include "logging.h" #include "errorlogx.h" #include "functions.h" #include "osmparser.h" #include "tagging.h" #include "uncompress.h" /* Global variables */ /*+ The name of the temporary directory. +*/ char *option_tmpdirname=NULL; /*+ The amount of RAM to use for filesorting. +*/ size_t option_filesort_ramsize=0; /*+ The number of threads to use for filesorting. +*/ int option_filesort_threads=1; /* Local functions */ static void print_usage(int detail,const char *argerr,const char *err); /*++++++++++++++++++++++++++++++++++++++ The main program for the planetsplitter. ++++++++++++++++++++++++++++++++++++++*/ int main(int argc,char** argv) { NodesX *OSMNodes; SegmentsX *OSMSegments,*SuperSegments=NULL,*MergedSegments=NULL; WaysX *OSMWays; RelationsX *OSMRelations; int iteration=0,quit=0; int max_iterations=5; char *dirname=NULL,*prefix=NULL,*tagging=NULL,*errorlog=NULL; int option_parse_only=0,option_process_only=0; int option_append=0,option_keep=0,option_changes=0; int option_filenames=0; int option_prune_isolated=500,option_prune_short=5,option_prune_straight=3; int arg; printf_program_start(); /* Parse the command line arguments */ for(arg=1;arg9?"=":""); fflush(stdout); if(iteration==0) { /* Select the super-nodes */ ChooseSuperNodes(OSMNodes,OSMSegments,OSMWays); /* Select the super-segments */ SuperSegments=CreateSuperSegments(OSMNodes,OSMSegments,OSMWays); nsuper=OSMSegments->number; } else { SegmentsX *SuperSegments2; /* Index the super-segments */ IndexSegments(SuperSegments,OSMNodes,OSMWays); /* Select the super-nodes */ ChooseSuperNodes(OSMNodes,SuperSegments,OSMWays); /* Select the super-segments */ SuperSegments2=CreateSuperSegments(OSMNodes,SuperSegments,OSMWays); nsuper=SuperSegments->number; FreeSegmentList(SuperSegments); SuperSegments=SuperSegments2; } /* Sort the super-segments and remove duplicates */ DeduplicateSuperSegments(SuperSegments,OSMWays); /* Check for end condition */ if(SuperSegments->number==nsuper) quit=1; iteration++; if(iteration>max_iterations) quit=1; } while(!quit); /* Combine the super-segments */ printf("\nCombine Segments and Super-Segments\n===================================\n\n"); fflush(stdout); /* Merge the super-segments */ MergedSegments=MergeSuperSegments(OSMSegments,SuperSegments); FreeSegmentList(OSMSegments); FreeSegmentList(SuperSegments); OSMSegments=MergedSegments; /* Cross reference the nodes and segments */ printf("\nCross-Reference Nodes and Segments\n==================================\n\n"); fflush(stdout); /* Sort the nodes and segments geographically */ SortNodeListGeographically(OSMNodes); SortSegmentListGeographically(OSMSegments,OSMNodes); /* Re-index the segments */ IndexSegments(OSMSegments,OSMNodes,OSMWays); /* Sort the turn relations geographically */ SortTurnRelationListGeographically(OSMRelations,OSMNodes,OSMSegments,1); /* Output the results */ printf("\nWrite Out Database Files\n========================\n\n"); fflush(stdout); /* Write out the nodes */ SaveNodeList(OSMNodes,FileName(dirname,prefix,"nodes.mem"),OSMSegments); /* Write out the segments */ SaveSegmentList(OSMSegments,FileName(dirname,prefix,"segments.mem")); /* Write out the ways */ SaveWayList(OSMWays,FileName(dirname,prefix,"ways.mem")); /* Write out the relations */ SaveRelationList(OSMRelations,FileName(dirname,prefix,"relations.mem")); /* Free the memory (delete the temporary files) */ FreeSegmentList(OSMSegments); /* Close the error log file and process the data */ if(errorlog) { close_errorlog(); if(option_keep) { ErrorLogsX *OSMErrorLogs; printf("\nCreate Error Log\n================\n\n"); fflush(stdout); OSMErrorLogs=NewErrorLogList(); ProcessErrorLogs(OSMErrorLogs,OSMNodes,OSMWays,OSMRelations); SortErrorLogsGeographically(OSMErrorLogs); SaveErrorLogs(OSMErrorLogs,FileName(dirname,prefix,"errorlogs.mem")); FreeErrorLogList(OSMErrorLogs); } } /* Free the memory (delete the temporary files) */ FreeNodeList(OSMNodes,0); FreeWayList(OSMWays,0); FreeRelationList(OSMRelations,0); printf("\n"); fflush(stdout); printf_program_end(); exit(EXIT_SUCCESS); } /*++++++++++++++++++++++++++++++++++++++ Print out the usage information. int detail The level of detail to use: -1 = just version number, 0 = low detail, 1 = full details. const char *argerr The argument that gave the error (if there is one). const char *err Other error message (if there is one). ++++++++++++++++++++++++++++++++++++++*/ static void print_usage(int detail,const char *argerr,const char *err) { if(detail<0) { fprintf(stderr, "Routino version " ROUTINO_VERSION " " ROUTINO_URL ".\n" ); } if(detail>=0) { fprintf(stderr, "Usage: planetsplitter [--version]\n" " [--help]\n" " [--dir=] [--prefix=]\n" #if defined(USE_PTHREADS) && USE_PTHREADS " [--sort-ram-size=] [--sort-threads=]\n" #else " [--sort-ram-size=]\n" #endif " [--tmpdir=]\n" " [--tagging=]\n" " [--loggable] [--logtime] [--logmemory]\n" " [--errorlog[=]]\n" " [--parse-only | --process-only]\n" " [--append] [--keep] [--changes]\n" " [--max-iterations=]\n" " [--prune-none]\n" " [--prune-isolated=]\n" " [--prune-short=]\n" " [--prune-straight=]\n" " [ ... | ...\n" " | ...\n" " | ... | ..." #if defined(USE_BZIP2) && USE_BZIP2 "\n | ..." #endif #if defined(USE_GZIP) && USE_GZIP "\n | ..." #endif #if defined(USE_XZ) && USE_XZ "\n | ..." #endif "]\n"); if(argerr) fprintf(stderr, "\n" "Error with command line parameter: %s\n",argerr); if(err) fprintf(stderr, "\n" "Error: %s\n",err); } if(detail==1) fprintf(stderr, "\n" "--version Print the version of Routino.\n" "\n" "--help Prints this information.\n" "\n" "--dir= The directory containing the routing database.\n" "--prefix= The filename prefix for the routing database.\n" "\n" "--sort-ram-size= The amount of RAM (in MB) to use for data sorting\n" #if SLIM " (defaults to 64MB otherwise.)\n" #else " (defaults to 256MB otherwise.)\n" #endif #if defined(USE_PTHREADS) && USE_PTHREADS "--sort-threads= The number of threads to use for data sorting.\n" #endif "\n" "--tmpdir= The directory name for temporary files.\n" " (defaults to the '--dir' option directory.)\n" "\n" "--tagging= The name of the XML file containing the tagging rules\n" " (defaults to 'tagging.xml' with '--dir' and\n" " '--prefix' options or the file installed in\n" " '" ROUTINO_DATADIR "').\n" "\n" "--loggable Print progress messages suitable for logging to file.\n" "--logtime Print the elapsed time for each processing step.\n" "--logmemory Print the max allocated/mapped memory for each step.\n" "--errorlog[=] Log parsing errors to 'error.log' or the given name\n" " (the '--dir' and '--prefix' options are applied).\n" "\n" "--parse-only Parse the OSM/OSC file(s) and store the results.\n" "--process-only Process the stored results from previous option.\n" "--append Parse the OSM file(s) and append to existing results.\n" "--keep Keep the intermediate files after parsing & sorting.\n" "--changes Parse the data as an OSC file and apply the changes.\n" "\n" "--max-iterations= The number of iterations for finding super-nodes\n" " (defaults to 5).\n" "\n" "--prune-none Disable the prune options below, they are re-enabled\n" " by adding them to the command line after this option.\n" "--prune-isolated= Remove access from small disconnected segment groups\n" " (defaults to removing groups under 500m).\n" "--prune-short= Remove short segments (defaults to removing segments\n" " up to a maximum length of 5m).\n" "--prune-straight= Remove nodes in almost straight highways (defaults to\n" " removing nodes up to 3m offset from a straight line).\n" "\n" ", , , , \n" " The name(s) of the file(s) to read and parse.\n" " Filenames ending '.pbf' read as PBF, filenames ending\n" " '.o5m' or '.o5c' read as O5M/O5C, others as XML.\n" #if defined(USE_BZIP2) && USE_BZIP2 " Filenames ending '.bz2' will be bzip2 uncompressed.\n" #endif #if defined(USE_GZIP) && USE_GZIP " Filenames ending '.gz' will be gzip uncompressed.\n" #endif #if defined(USE_XZ) && USE_XZ " Filenames ending '.xz' will be xz uncompressed.\n" #endif "\n" " defaults to all but can be set to:\n" "%s" "\n" " can be selected from:\n" "%s" "\n" " can be selected from:\n" "%s", TransportList(),HighwayList(),PropertyList()); exit(!detail); } routino-3.2/src/mman-win32.h 644 233 144 5064 12531126220 11054 0/*************************************** Windows 32 memory management functions from https://code.google.com/p/mman-win32 File header comment created by Andrew M. Bishop, all source code unchanged from original. ******************/ /****************** Copyright (c) 2010,2012 Viktor Kutuzov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ***************************************/ #ifndef _SYS_MMAN_H_ #define _SYS_MMAN_H_ #ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows. #endif /* All the headers include this file. */ #ifndef _MSC_VER #include <_mingw.h> #endif #include #ifdef __cplusplus extern "C" { #endif #define PROT_NONE 0 #define PROT_READ 1 #define PROT_WRITE 2 #define PROT_EXEC 4 #define MAP_FILE 0 #define MAP_SHARED 1 #define MAP_PRIVATE 2 #define MAP_TYPE 0xf #define MAP_FIXED 0x10 #define MAP_ANONYMOUS 0x20 #define MAP_ANON MAP_ANONYMOUS #define MAP_FAILED ((void *)-1) /* Flags for msync. */ #define MS_ASYNC 1 #define MS_SYNC 2 #define MS_INVALIDATE 4 void* mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off); int munmap(void *addr, size_t len); int mprotect(void *addr, size_t len, int prot); int msync(void *addr, size_t len, int flags); int mlock(const void *addr, size_t len); int munlock(const void *addr, size_t len); #ifdef __cplusplus }; #endif #endif /* _SYS_MMAN_H_ */ routino-3.2/src/profiles.c 644 233 144 106721 12643007751 11057 0/*************************************** Load the profiles from a file and the functions for handling them. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include #include "types.h" #include "ways.h" #include "files.h" #include "profiles.h" #include "xmlparse.h" /* Local variables (re-intialised by FreeXMLProfiles() function) */ /*+ The profiles that have been loaded from file. +*/ static Profile **loaded_profiles=NULL; /*+ The number of profiles that have been loaded from file. +*/ static int nloaded_profiles=0; /* Local variables (re-initialised for each file) */ /*+ Store all of the profiles. +*/ static int store_all; /*+ The profile name that is to be stored. +*/ static const char *store_name; /*+ This current profile is to be stored. +*/ static int store; /* The XML tag processing function prototypes */ //static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding); //static int RoutinoProfilesType_function(const char *_tag_,int _type_); static int profileType_function(const char *_tag_,int _type_,const char *name,const char *transport); //static int speedsType_function(const char *_tag_,int _type_); //static int preferencesType_function(const char *_tag_,int _type_); //static int propertiesType_function(const char *_tag_,int _type_); //static int restrictionsType_function(const char *_tag_,int _type_); static int speedType_function(const char *_tag_,int _type_,const char *highway,const char *kph); static int preferenceType_function(const char *_tag_,int _type_,const char *highway,const char *percent); static int propertyType_function(const char *_tag_,int _type_,const char *type,const char *percent); static int onewayType_function(const char *_tag_,int _type_,const char *obey); static int turnsType_function(const char *_tag_,int _type_,const char *obey); static int weightType_function(const char *_tag_,int _type_,const char *limit); static int heightType_function(const char *_tag_,int _type_,const char *limit); static int widthType_function(const char *_tag_,int _type_,const char *limit); static int lengthType_function(const char *_tag_,int _type_,const char *limit); /* The XML tag definitions (forward declarations) */ static const xmltag xmlDeclaration_tag; static const xmltag RoutinoProfilesType_tag; static const xmltag profileType_tag; static const xmltag speedsType_tag; static const xmltag preferencesType_tag; static const xmltag propertiesType_tag; static const xmltag restrictionsType_tag; static const xmltag speedType_tag; static const xmltag preferenceType_tag; static const xmltag propertyType_tag; static const xmltag onewayType_tag; static const xmltag turnsType_tag; static const xmltag weightType_tag; static const xmltag heightType_tag; static const xmltag widthType_tag; static const xmltag lengthType_tag; /* The XML tag definition values */ /*+ The complete set of tags at the top level. +*/ static const xmltag * const xml_toplevel_tags[]={&xmlDeclaration_tag,&RoutinoProfilesType_tag,NULL}; /*+ The xmlDeclaration type tag. +*/ static const xmltag xmlDeclaration_tag= {"xml", 2, {"version","encoding"}, NULL, {NULL}}; /*+ The RoutinoProfilesType type tag. +*/ static const xmltag RoutinoProfilesType_tag= {"routino-profiles", 0, {NULL}, NULL, {&profileType_tag,NULL}}; /*+ The profileType type tag. +*/ static const xmltag profileType_tag= {"profile", 2, {"name","transport"}, profileType_function, {&speedsType_tag,&preferencesType_tag,&propertiesType_tag,&restrictionsType_tag,NULL}}; /*+ The speedsType type tag. +*/ static const xmltag speedsType_tag= {"speeds", 0, {NULL}, NULL, {&speedType_tag,NULL}}; /*+ The preferencesType type tag. +*/ static const xmltag preferencesType_tag= {"preferences", 0, {NULL}, NULL, {&preferenceType_tag,NULL}}; /*+ The propertiesType type tag. +*/ static const xmltag propertiesType_tag= {"properties", 0, {NULL}, NULL, {&propertyType_tag,NULL}}; /*+ The restrictionsType type tag. +*/ static const xmltag restrictionsType_tag= {"restrictions", 0, {NULL}, NULL, {&onewayType_tag,&turnsType_tag,&weightType_tag,&heightType_tag,&widthType_tag,&lengthType_tag,NULL}}; /*+ The speedType type tag. +*/ static const xmltag speedType_tag= {"speed", 2, {"highway","kph"}, speedType_function, {NULL}}; /*+ The preferenceType type tag. +*/ static const xmltag preferenceType_tag= {"preference", 2, {"highway","percent"}, preferenceType_function, {NULL}}; /*+ The propertyType type tag. +*/ static const xmltag propertyType_tag= {"property", 2, {"type","percent"}, propertyType_function, {NULL}}; /*+ The onewayType type tag. +*/ static const xmltag onewayType_tag= {"oneway", 1, {"obey"}, onewayType_function, {NULL}}; /*+ The turnsType type tag. +*/ static const xmltag turnsType_tag= {"turns", 1, {"obey"}, turnsType_function, {NULL}}; /*+ The weightType type tag. +*/ static const xmltag weightType_tag= {"weight", 1, {"limit"}, weightType_function, {NULL}}; /*+ The heightType type tag. +*/ static const xmltag heightType_tag= {"height", 1, {"limit"}, heightType_function, {NULL}}; /*+ The widthType type tag. +*/ static const xmltag widthType_tag= {"width", 1, {"limit"}, widthType_function, {NULL}}; /*+ The lengthType type tag. +*/ static const xmltag lengthType_tag= {"length", 1, {"limit"}, lengthType_function, {NULL}}; /* The XML tag processing functions */ /*++++++++++++++++++++++++++++++++++++++ The function that is called when the XML declaration is seen int xmlDeclaration_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *version The contents of the 'version' attribute (or NULL if not defined). const char *encoding The contents of the 'encoding' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ //static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the RoutinoProfilesType XSD type is seen int RoutinoProfilesType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ //static int RoutinoProfilesType_function(const char *_tag_,int _type_) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the profileType XSD type is seen int profileType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *name The contents of the 'name' attribute (or NULL if not defined). const char *transport The contents of the 'transport' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int profileType_function(const char *_tag_,int _type_,const char *name,const char *transport) { if(_type_&XMLPARSE_TAG_START) { Transport transporttype; int i; XMLPARSE_ASSERT_STRING(_tag_,name); if(store_all) store=1; else if(store_name && !strcmp(store_name,name)) store=1; else store=0; if(store) { for(i=0;iname)) XMLPARSE_MESSAGE(_tag_,"profile name must be unique"); XMLPARSE_ASSERT_STRING(_tag_,transport); transporttype=TransportType(transport); if(transporttype==Transport_None) XMLPARSE_INVALID(_tag_,transport); if((nloaded_profiles%16)==0) loaded_profiles=(Profile**)realloc((void*)loaded_profiles,(nloaded_profiles+16)*sizeof(Profile*)); nloaded_profiles++; loaded_profiles[nloaded_profiles-1]=(Profile*)calloc(1,sizeof(Profile)); loaded_profiles[nloaded_profiles-1]->name=strcpy(malloc(strlen(name)+1),name); loaded_profiles[nloaded_profiles-1]->transport=transporttype; } } if(_type_&XMLPARSE_TAG_END && store) store=0; return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the speedsType XSD type is seen int speedsType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ //static int speedsType_function(const char *_tag_,int _type_) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the preferencesType XSD type is seen int preferencesType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ //static int preferencesType_function(const char *_tag_,int _type_) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the propertiesType XSD type is seen int propertiesType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ //static int propertiesType_function(const char *_tag_,int _type_) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the restrictionsType XSD type is seen int restrictionsType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ //static int restrictionsType_function(const char *_tag_,int _type_) //{ // return(0); //} /*++++++++++++++++++++++++++++++++++++++ The function that is called when the speedType XSD type is seen int speedType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *highway The contents of the 'highway' attribute (or NULL if not defined). const char *kph The contents of the 'kph' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int speedType_function(const char *_tag_,int _type_,const char *highway,const char *kph) { if(_type_&XMLPARSE_TAG_START && store) { double speed; Highway highwaytype; XMLPARSE_ASSERT_STRING(_tag_,highway); highwaytype=HighwayType(highway); if(highwaytype==Highway_None) XMLPARSE_INVALID(_tag_,highway); XMLPARSE_ASSERT_FLOATING(_tag_,kph); speed=atof(kph); if(speed<0) XMLPARSE_INVALID(_tag_,kph); loaded_profiles[nloaded_profiles-1]->speed[highwaytype]=kph_to_speed(speed); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the preferenceType XSD type is seen int preferenceType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *highway The contents of the 'highway' attribute (or NULL if not defined). const char *percent The contents of the 'percent' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int preferenceType_function(const char *_tag_,int _type_,const char *highway,const char *percent) { if(_type_&XMLPARSE_TAG_START && store) { Highway highwaytype; double p; XMLPARSE_ASSERT_STRING(_tag_,highway); highwaytype=HighwayType(highway); if(highwaytype==Highway_None) XMLPARSE_INVALID(_tag_,highway); XMLPARSE_ASSERT_FLOATING(_tag_,percent); p=atof(percent); if(p<0 || p>100) XMLPARSE_INVALID(_tag_,percent); loaded_profiles[nloaded_profiles-1]->highway[highwaytype]=(score_t)(p/100); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the propertyType XSD type is seen int propertyType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *type The contents of the 'type' attribute (or NULL if not defined). const char *percent The contents of the 'percent' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int propertyType_function(const char *_tag_,int _type_,const char *type,const char *percent) { if(_type_&XMLPARSE_TAG_START && store) { Property property; double p; XMLPARSE_ASSERT_STRING(_tag_,type); property=PropertyType(type); if(property==Property_None) XMLPARSE_INVALID(_tag_,type); XMLPARSE_ASSERT_FLOATING(_tag_,percent); p=atof(percent); if(p<0 || p>100) XMLPARSE_INVALID(_tag_,percent); loaded_profiles[nloaded_profiles-1]->props[property]=(score_t)(p/100); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the onewayType XSD type is seen int onewayType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *obey The contents of the 'obey' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int onewayType_function(const char *_tag_,int _type_,const char *obey) { if(_type_&XMLPARSE_TAG_START && store) { int o; XMLPARSE_ASSERT_INTEGER(_tag_,obey); o=atoi(obey); loaded_profiles[nloaded_profiles-1]->oneway=!!o; } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the turnsType XSD type is seen int turnsType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *obey The contents of the 'obey' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int turnsType_function(const char *_tag_,int _type_,const char *obey) { if(_type_&XMLPARSE_TAG_START && store) { int o; XMLPARSE_ASSERT_INTEGER(_tag_,obey); o=atoi(obey); loaded_profiles[nloaded_profiles-1]->turns=!!o; } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the weightType XSD type is seen int weightType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *limit The contents of the 'limit' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int weightType_function(const char *_tag_,int _type_,const char *limit) { if(_type_&XMLPARSE_TAG_START && store) { double l; XMLPARSE_ASSERT_FLOATING(_tag_,limit); l=atof(limit); if(l<0) XMLPARSE_INVALID(_tag_,limit); loaded_profiles[nloaded_profiles-1]->weight=tonnes_to_weight(l); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the heightType XSD type is seen int heightType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *limit The contents of the 'limit' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int heightType_function(const char *_tag_,int _type_,const char *limit) { if(_type_&XMLPARSE_TAG_START && store) { double l; XMLPARSE_ASSERT_FLOATING(_tag_,limit); l=atof(limit); if(l<0) XMLPARSE_INVALID(_tag_,limit); loaded_profiles[nloaded_profiles-1]->height=metres_to_height(l); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the widthType XSD type is seen int widthType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *limit The contents of the 'limit' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int widthType_function(const char *_tag_,int _type_,const char *limit) { if(_type_&XMLPARSE_TAG_START && store) { double l; XMLPARSE_ASSERT_FLOATING(_tag_,limit); l=atof(limit); if(l<0) XMLPARSE_INVALID(_tag_,limit); loaded_profiles[nloaded_profiles-1]->width=metres_to_width(l); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the lengthType XSD type is seen int lengthType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *limit The contents of the 'limit' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int lengthType_function(const char *_tag_,int _type_,const char *limit) { if(_type_&XMLPARSE_TAG_START && store) { double l; XMLPARSE_ASSERT_FLOATING(_tag_,limit); l=atof(limit); if(l<0) XMLPARSE_INVALID(_tag_,limit); loaded_profiles[nloaded_profiles-1]->length=metres_to_length(l); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The XML profile parser. int ParseXMLProfiles Returns 0 if OK or something else in case of an error. const char *filename The name of the file to read. const char *name The name of the profile to read. int all Set to true to load all the profiles. ++++++++++++++++++++++++++++++++++++++*/ int ParseXMLProfiles(const char *filename,const char *name,int all) { int fd; int retval; if(!ExistsFile(filename)) return(1); fd=OpenFile(filename); /* Delete the existing profiles */ if(nloaded_profiles) FreeXMLProfiles(); /* Initialise variables used for parsing */ store_all=all; store_name=name; store=0; /* Parse the file */ retval=ParseXML(fd,xml_toplevel_tags,XMLPARSE_UNKNOWN_ATTR_ERRNONAME); CloseFile(fd); if(retval) { FreeXMLProfiles(); return(2); } return(0); } /*++++++++++++++++++++++++++++++++++++++ Return a list of the profile names that have been loaded from the XML file. char **GetProfileNames Returns a NULL terminated list of strings - all allocated. ++++++++++++++++++++++++++++++++++++++*/ char **GetProfileNames(void) { char **list=calloc(1+nloaded_profiles,sizeof(char*)); int i; for(i=0;iname)+1),loaded_profiles[i]->name); return(list); } /*++++++++++++++++++++++++++++++++++++++ Get a named profile. Profile *GetProfile Returns a pointer to the profile. const char *name The name of the profile. ++++++++++++++++++++++++++++++++++++++*/ Profile *GetProfile(const char *name) { int i; for(i=0;iname,name)) return(loaded_profiles[i]); return(NULL); } /*++++++++++++++++++++++++++++++++++++++ Free the memory allocated when reading the profiles. ++++++++++++++++++++++++++++++++++++++*/ void FreeXMLProfiles(void) { int i; if(!loaded_profiles) return; for(i=0;iname) free(loaded_profiles[i]->name); free(loaded_profiles[i]); } free(loaded_profiles); loaded_profiles=NULL; nloaded_profiles=0; } /*++++++++++++++++++++++++++++++++++++++ Update a profile with the highway preference scaling factors. int UpdateProfile Returns 1 in case of a problem. Profile *profile The profile to be updated. Ways *ways The set of ways to use. ++++++++++++++++++++++++++++++++++++++*/ int UpdateProfile(Profile *profile,Ways *ways) { int i; /* Check the allowed transport type */ profile->allow=TRANSPORTS(profile->transport); if(!(profile->allow & ways->file.allow)) return(1); /* Normalise the highway preferences into the range ~0 -> 1 */ profile->max_pref=0; for(i=1;ihighway[i]<0) profile->highway[i]=0; if(profile->highway[i]>1) profile->highway[i]=1; if(profile->highway[i]>profile->max_pref) profile->max_pref=profile->highway[i]; } if(profile->max_pref==0) return(1); /* Normalise the property preferences into the range ~0 -> 1 */ for(i=1;iprops[i]<0) profile->props[i]=0; if(profile->props[i]>1) profile->props[i]=1; profile->props_yes[i]=profile->props[i]; profile->props_no [i]=1-profile->props_yes[i]; /* Squash the properties; selecting 60% preference without the sqrt() allows routes 50% longer on highways with the property compared to ones without. With the sqrt() function the ratio is only 22% allowing finer control. */ profile->props_yes[i]=(score_t)sqrt(profile->props_yes[i]); profile->props_no [i]=(score_t)sqrt(profile->props_no[i] ); if(profile->props_yes[i]<0.01f) profile->props_yes[i]=0.01f; if(profile->props_no[i]<0.01f) profile->props_no[i]=0.01f; } /* Find the fastest preferred speed */ profile->max_speed=0; for(i=1;ispeed[i]>profile->max_speed) profile->max_speed=profile->speed[i]; if(profile->max_speed==0) return(1); /* Find the most preferred property combination */ for(i=1;ifile.props & PROPERTIES(i)) { if(profile->props_yes[i]>profile->props_no[i]) profile->max_pref*=profile->props_yes[i]; else profile->max_pref*=profile->props_no[i]; } return(0); } /*++++++++++++++++++++++++++++++++++++++ Print out a profile. const Profile *profile The profile to print. ++++++++++++++++++++++++++++++++++++++*/ void PrintProfile(const Profile *profile) { int i; printf("Profile\n=======\n"); printf("\n"); printf("Transport: %s\n",TransportName(profile->transport)); printf("\n"); for(i=1;ihighway[i]*100)); printf("\n"); for(i=1;ihighway[i]) printf("Speed on %-12s: %3d km/h / %2.0f mph\n",HighwayName(i),profile->speed[i],(double)profile->speed[i]/1.6); printf("\n"); for(i=1;iprops[i]*100)); printf("\n"); printf("Obey one-way : %s\n",profile->oneway?"yes":"no"); printf("Obey turns : %s\n",profile->turns?"yes":"no"); printf("Minimum weight: %.1f tonnes\n",weight_to_tonnes(profile->weight)); printf("Minimum height: %.1f metres\n",height_to_metres(profile->height)); printf("Minimum width : %.1f metres\n",width_to_metres(profile->width)); printf("Minimum length: %.1f metres\n",length_to_metres(profile->length)); } /*++++++++++++++++++++++++++++++++++++++ Print out all of the loaded profiles as XML for use as program input. ++++++++++++++++++++++++++++++++++++++*/ void PrintProfilesXML(void) { int i,j; char *padding=" "; printf("\n"); printf("\n"); printf("\n"); printf("\n"); for(j=0;j\n",loaded_profiles[j]->name,TransportName(loaded_profiles[j]->transport)); printf(" \n"); for(i=1;i\n",HighwayName(i),padding+8+strlen(HighwayName(i)),loaded_profiles[j]->speed[i]); printf(" \n"); printf(" \n"); for(i=1;i\n",HighwayName(i),padding+8+strlen(HighwayName(i)),loaded_profiles[j]->highway[i]*100); printf(" \n"); printf(" \n"); for(i=1;i\n",PropertyName(i),padding+8+strlen(PropertyName(i)),loaded_profiles[j]->props[i]*100); printf(" \n"); printf(" \n"); printf(" \n",loaded_profiles[j]->oneway); printf(" \n",loaded_profiles[j]->turns); printf(" \n",weight_to_tonnes(loaded_profiles[j]->weight)); printf(" \n",height_to_metres(loaded_profiles[j]->height)); printf(" \n",width_to_metres(loaded_profiles[j]->width)); printf(" \n",length_to_metres(loaded_profiles[j]->length)); printf(" \n"); printf(" \n"); printf("\n"); } printf("\n"); } /*++++++++++++++++++++++++++++++++++++++ Print out all of the loaded profiles as JavaScript Object Notation for use in a web page. ++++++++++++++++++++++++++++++++++++++*/ void PrintProfilesJSON(void) { int i,j; printf("var routino={ // contains all default Routino options (generated using \"--help-profile-json\").\n"); printf("\n"); printf(" // Default transport type\n"); printf(" transport: \"motorcar\",\n"); printf("\n"); printf(" // Transport types\n"); printf(" transports: { "); for(j=0;jtransport),j+1); printf(" },\n"); printf("\n"); printf(" // Highway types\n"); printf(" highways: { "); for(i=1;itransport),(int)(0.5+loaded_profiles[j]->highway[i]*100)); printf(" }%s\n",i==(Highway_Count-1)?"":","); } printf(" },\n"); printf("\n"); printf(" // Speed limits\n"); printf(" profile_speed: {\n"); for(i=1;itransport),loaded_profiles[j]->speed[i]); printf(" }%s\n",i==(Highway_Count-1)?"":","); } printf(" },\n"); printf("\n"); printf(" // Highway properties\n"); printf(" profile_property: {\n"); for(i=1;itransport),(int)(0.5+loaded_profiles[j]->props[i]*100)); printf(" }%s\n",i==(Property_Count-1)?"":","); } printf(" },\n"); printf("\n"); printf(" // Restrictions\n"); printf(" profile_restrictions: {\n"); printf(" %12s: { ","oneway"); for(j=0;jtransport),loaded_profiles[j]->oneway); printf(" },\n"); printf(" %12s: { ","turns"); for(j=0;jtransport),loaded_profiles[j]->turns); printf(" },\n"); printf(" %12s: { ","weight"); for(j=0;jtransport),weight_to_tonnes(loaded_profiles[j]->weight)); printf(" },\n"); printf(" %12s: { ","height"); for(j=0;jtransport),height_to_metres(loaded_profiles[j]->height)); printf(" },\n"); printf(" %12s: { ","width"); for(j=0;jtransport),width_to_metres(loaded_profiles[j]->width)); printf(" },\n"); printf(" %12s: { ","length"); for(j=0;jtransport),length_to_metres(loaded_profiles[j]->length)); printf(" }\n"); printf(" }\n"); printf("\n"); printf("}; // end of routino variable\n"); } /*++++++++++++++++++++++++++++++++++++++ Print out all of the loaded profiles as Perl for use in a web CGI. ++++++++++++++++++++++++++++++++++++++*/ void PrintProfilesPerl(void) { int i,j; printf("$routino={ # contains all default Routino options (generated using \"--help-profile-perl\").\n"); printf("\n"); printf(" # Default transport type\n"); printf(" transport => \"motorcar\",\n"); printf("\n"); printf(" # Transport types\n"); printf(" transports => { "); for(j=0;j %d",j==0?"":", ",TransportName(loaded_profiles[j]->transport),j+1); printf(" },\n"); printf("\n"); printf(" # Highway types\n"); printf(" highways => { "); for(i=1;i %d",i==1?"":", ",HighwayName(i),i); printf(" },\n"); printf("\n"); printf(" # Property types\n"); printf(" properties => { "); for(i=1;i %d",i==1?"":", ",PropertyName(i),i); printf(" },\n"); printf("\n"); printf(" # Restriction types\n"); printf(" restrictions => { oneway => 1, turns => 2, weight => 3, height => 4, width => 5, length => 6 },\n"); printf("\n"); printf(" # Allowed highways\n"); printf(" profile_highway => {\n"); for(i=1;i {",HighwayName(i)); for(j=0;j %3d",j==0?"":", ",TransportName(loaded_profiles[j]->transport),(int)(0.5+loaded_profiles[j]->highway[i]*100)); printf(" }%s\n",i==(Highway_Count-1)?"":","); } printf(" },\n"); printf("\n"); printf(" # Speed limits\n"); printf(" profile_speed => {\n"); for(i=1;i {",HighwayName(i)); for(j=0;j %3d",j==0?"":", ",TransportName(loaded_profiles[j]->transport),loaded_profiles[j]->speed[i]); printf(" }%s\n",i==(Highway_Count-1)?"":","); } printf(" },\n"); printf("\n"); printf(" # Highway properties\n"); printf(" profile_property => {\n"); for(i=1;i {",PropertyName(i)); for(j=0;j %3d",j==0?"":", ",TransportName(loaded_profiles[j]->transport),(int)(0.5+loaded_profiles[j]->props[i]*100)); printf(" }%s\n",i==(Property_Count-1)?"":","); } printf(" },\n"); printf("\n"); printf(" # Restrictions\n"); printf(" profile_restrictions => {\n"); printf(" %12s => {","oneway"); for(j=0;j %4d",j==0?"":", ",TransportName(loaded_profiles[j]->transport),loaded_profiles[j]->oneway); printf(" },\n"); printf(" %12s => {","turns"); for(j=0;j %4d",j==0?"":", ",TransportName(loaded_profiles[j]->transport),loaded_profiles[j]->turns); printf(" },\n"); printf(" %12s => {","weight"); for(j=0;j %4.1f",j==0?"":", ",TransportName(loaded_profiles[j]->transport),weight_to_tonnes(loaded_profiles[j]->weight)); printf(" },\n"); printf(" %12s => {","height"); for(j=0;j %4.1f",j==0?"":", ",TransportName(loaded_profiles[j]->transport),height_to_metres(loaded_profiles[j]->height)); printf(" },\n"); printf(" %12s => {","width"); for(j=0;j %4.1f",j==0?"":", ",TransportName(loaded_profiles[j]->transport),width_to_metres(loaded_profiles[j]->width)); printf(" },\n"); printf(" %12s => {","length"); for(j=0;j %4.1f",j==0?"":", ",TransportName(loaded_profiles[j]->transport),length_to_metres(loaded_profiles[j]->length)); printf(" }\n"); printf(" }\n"); printf("\n"); printf("}; # end of routino variable\n"); } routino-3.2/src/osmo5mparse.c 644 233 144 44632 12563633053 11471 0/*************************************** A simple o5m/o5c parser. Part of the Routino routing software. ******************/ /****************** This file Copyright 2012-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #if defined(_MSC_VER) #include #include #define read(fd,address,length) _read(fd,address,(unsigned int)(length)) #define ssize_t SSIZE_T #else #include #endif #include #include #include #include #include "osmparser.h" #include "tagging.h" #include "logging.h" /* At the top level */ #define O5M_FILE_NODE 0x10 #define O5M_FILE_WAY 0x11 #define O5M_FILE_RELATION 0x12 #define O5M_FILE_BOUNDING_BOX 0xdb #define O5M_FILE_TIMESTAMP 0xdc #define O5M_FILE_HEADER 0xe0 #define O5M_FILE_SYNC 0xee #define O5M_FILE_JUMP 0xef #define O5M_FILE_END 0xfe #define O5M_FILE_RESET 0xff /* Errors */ #define O5M_EOF 0 #define O5M_ERROR_UNEXP_EOF 100 #define O5M_ERROR_RESET_NOT_FIRST 101 #define O5M_ERROR_HEADER_NOT_FIRST 102 #define O5M_ERROR_EXPECTED_O5M 103 #define O5M_ERROR_EXPECTED_O5C 104 #define O5M_ERROR_FILE_LEVEL 105 /* Local parsing variables (re-initialised for each file) */ static uint64_t byteno=0; static uint64_t nnodes=0,nways=0,nrelations=0; static int64_t id=0; static int32_t lat=0; static int32_t lon=0; static int64_t timestamp=0; static int64_t node_refid=0,way_refid=0,relation_refid=0; static int mode_change=MODE_NORMAL; static uint32_t buffer_allocated; static unsigned char *buffer=NULL; static unsigned char *buffer_ptr,*buffer_end; static int string_table_start=0; static unsigned char **string_table=NULL; #define STRING_TABLE_ALLOCATED 15000 /*++++++++++++++++++++++++++++++++++++++ Refill the data buffer and set the pointers. int buffer_refill Return 0 if everything is OK or 1 for EOF. int fd The file descriptor to read from. uint32_t bytes The number of bytes to read. ++++++++++++++++++++++++++++++++++++++*/ static inline int buffer_refill(int fd,uint32_t bytes) { ssize_t n,m; uint32_t totalbytes; m=buffer_end-buffer_ptr; if(m) memmove(buffer,buffer_ptr,m); totalbytes=bytes+m; if(totalbytes>buffer_allocated) buffer=(unsigned char *)realloc(buffer,buffer_allocated=totalbytes); byteno+=bytes; buffer_ptr=buffer; buffer_end=buffer+m; do { n=read(fd,buffer_end,bytes); if(n<=0) return(1); buffer_end+=n; bytes-=n; } while(bytes>0); return(0); } static void process_node(void); static void process_way(void); static void process_relation(void); static void process_info(void); static unsigned char *process_string(int pair,unsigned char **buf_ptr,unsigned char **string1,unsigned char **string2); /* Macros to simplify the parser (and make it look more like the XML parser) */ #define BEGIN(xx) do{ state=(xx); goto finish_parsing; } while(0) #define BUFFER_CHARS(xx) do{ if(buffer_refill(fd,(xx))) BEGIN(O5M_ERROR_UNEXP_EOF); } while(0) /* O5M decoding */ #define O5M_LATITUDE(xx) (double)(1E-7*(xx)) #define O5M_LONGITUDE(xx) (double)(1E-7*(xx)) /*++++++++++++++++++++++++++++++++++++++ Parse an O5M int32 data value. uint32_t o5m_int32 Returns the integer value. unsigned char **ptr The pointer to read the data from. ++++++++++++++++++++++++++++++++++++++*/ static inline uint32_t o5m_int32(unsigned char **ptr) { uint32_t result=(**ptr)&0x7F; if((**ptr)&0x80) result+=((*++(*ptr))&0x7F)<<7; if((**ptr)&0x80) result+=((*++(*ptr))&0x7F)<<14; if((**ptr)&0x80) result+=((*++(*ptr))&0x7F)<<21; if((**ptr)&0x80) result+=((*++(*ptr))&0x7F)<<28; (*ptr)++; return(result); } /*++++++++++++++++++++++++++++++++++++++ Parse an O5M int32 data value. int32_t o5m_sint32 Returns the integer value. unsigned char **ptr The pointer to read the data from. ++++++++++++++++++++++++++++++++++++++*/ static inline int32_t o5m_sint32(unsigned char **ptr) { int64_t result=((**ptr)&0x7E)>>1; int sign=(**ptr)&0x01; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<6; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<13; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<20; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<27; (*ptr)++; if(sign) result=-result-1; return(result); } /*++++++++++++++++++++++++++++++++++++++ Parse an O5M int64 data value. int64_t o5m_int64 Returns the integer value. unsigned char **ptr The pointer to read the data from. ++++++++++++++++++++++++++++++++++++++*/ static inline int64_t o5m_int64(unsigned char **ptr) { uint64_t result=(**ptr)&0x7F; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<7; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<14; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<21; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<28; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<35; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<42; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<49; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<56; if((**ptr)&0x80) result+=(uint64_t)((*++(*ptr))&0x7F)<<63; (*ptr)++; return(result); } /*++++++++++++++++++++++++++++++++++++++ Parse an O5M sint64 data value. int64_t o5m_sint64 Returns the integer value. unsigned char **ptr The pointer to read the data from. ++++++++++++++++++++++++++++++++++++++*/ static inline int64_t o5m_sint64(unsigned char **ptr) { int64_t result=((**ptr)&0x7E)>>1; int sign=(**ptr)&0x01; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<6; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<13; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<20; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<27; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<34; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<41; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<48; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<55; if((**ptr)&0x80) result+=(int64_t)((*++(*ptr))&0x7F)<<62; (*ptr)++; if(sign) result=-result-1; return(result); } /*++++++++++++++++++++++++++++++++++++++ Parse the O5M and call the functions for each OSM item as seen. int ParseO5M Returns 0 if OK or something else in case of an error. int fd The file descriptor of the file to parse. int changes Set to 1 if this is expected to be a changes file, otherwise zero. ++++++++++++++++++++++++++++++++++++++*/ static int ParseO5M(int fd,int changes) { int i; int state; int number_reset=0; int error; /* Print the initial message */ printf_first("Reading: Bytes=0 Nodes=0 Ways=0 Relations=0"); /* The actual parser. */ nnodes=0,nways=0,nrelations=0; if(changes) mode_change=MODE_MODIFY; string_table_start=0; string_table=(unsigned char **)malloc(STRING_TABLE_ALLOCATED*sizeof(unsigned char *)); for(i=0;i. ***************************************/ #include #include #include #if defined(USE_PTHREADS) && USE_PTHREADS #include #endif #include "types.h" #include "logging.h" #include "files.h" #include "sorting.h" /* Global variables */ /*+ The command line '--tmpdir' option or its default value. +*/ extern char *option_tmpdirname; /*+ The amount of RAM to use for filesorting. +*/ extern size_t option_filesort_ramsize; /*+ The number of filesorting threads allowed. +*/ extern int option_filesort_threads; /* Thread data type definitions */ /*+ A data type for holding data for a thread. +*/ typedef struct _thread_data { #if defined(USE_PTHREADS) && USE_PTHREADS pthread_t thread; /*+ The thread identifier. +*/ int running; /*+ A flag indicating the current state of the thread. +*/ #endif char *data; /*+ The main data array. +*/ void **datap; /*+ An array of pointers to the data objects. +*/ size_t n; /*+ The number of pointers. +*/ char *filename; /*+ The name of the file to write the results to. +*/ size_t itemsize; /*+ The size of each item. +*/ int (*compare)(const void*,const void*); /*+ The comparison function. +*/ } thread_data; /* Thread variables */ #if defined(USE_PTHREADS) && USE_PTHREADS static pthread_mutex_t running_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t running_cond = PTHREAD_COND_INITIALIZER; #endif /* Thread helper functions */ static void *filesort_fixed_heapsort_thread(thread_data *thread); static void *filesort_vary_heapsort_thread(thread_data *thread); /*++++++++++++++++++++++++++++++++++++++ A function to sort the contents of a file of fixed length objects using a limited amount of RAM. The data is sorted using a "Merge sort" http://en.wikipedia.org/wiki/Merge_sort and in particular an "external sort" http://en.wikipedia.org/wiki/External_sorting. The individual sort steps and the merge step both use a "Heap sort" http://en.wikipedia.org/wiki/Heapsort. The combination of the two should work well if the data is already partially sorted. index_t filesort_fixed Returns the number of objects kept. int fd_in The file descriptor of the input file (opened for reading and at the beginning). int fd_out The file descriptor of the output file (opened for writing and empty). size_t itemsize The size of each item in the file that needs sorting. int (*pre_sort_function)(void *,index_t) If non-NULL then this function is called for each item before they have been sorted. The second parameter is the number of objects previously read from the input file. If the function returns 1 then the object is kept and it is sorted, otherwise it is ignored. int (*compare_function)(const void*, const void*) The comparison function. This is identical to qsort if the data to be sorted is an array of things not pointers. int (*post_sort_function)(void *,index_t) If non-NULL then this function is called for each item after they have been sorted. The second parameter is the number of objects already written to the output file. If the function returns 1 then the object is written to the output file., otherwise it is ignored. ++++++++++++++++++++++++++++++++++++++*/ index_t filesort_fixed(int fd_in,int fd_out,size_t itemsize,int (*pre_sort_function)(void*,index_t), int (*compare_function)(const void*,const void*), int (*post_sort_function)(void*,index_t)) { int *fds=NULL,*heap=NULL; int nfiles=0,ndata=0; index_t count_out=0,count_in=0,total=0; size_t nitems; char *data; void **datap; thread_data *threads; size_t item; int i,more=1; #if defined(USE_PTHREADS) && USE_PTHREADS int nthreads=0; #endif /* Allocate the RAM buffer and other bits */ nitems=SizeFileFD(fd_in)/itemsize; if(nitems==0) return(0); if((nitems*(itemsize+sizeof(void*)))1) { /* Find a spare slot (one *must* be unused at all times) */ pthread_mutex_lock(&running_mutex); for(thread=0;thread1) { pthread_mutex_lock(&running_mutex); while(nthreads==(option_filesort_threads-1)) { for(i=0;i1 && nthreads) { pthread_mutex_lock(&running_mutex); pthread_cond_wait(&running_cond,&running_mutex); for(i=0;i1) { int newindex; int temp; newindex=index/2; if(compare_function(datap[heap[index]],datap[heap[newindex]])>=0) break; temp=heap[index]; heap[index]=heap[newindex]; heap[newindex]=temp; index=newindex; } } /* Repeatedly pull out the root of the heap and refill from the same file */ ndata=nfiles; do { int index=1; if(!post_sort_function || post_sort_function(datap[heap[index]],count_out)) { WriteFileBuffered(fd_out,datap[heap[index]],itemsize); count_out++; } if(ReadFileBuffered(fds[heap[index]],datap[heap[index]],itemsize)) { heap[index]=heap[ndata]; ndata--; } /* Bubble down the new value */ while((2*index)=0) newindex=newindex+1; if(compare_function(datap[heap[index]],datap[heap[newindex]])<=0) break; temp=heap[newindex]; heap[newindex]=heap[index]; heap[index]=temp; index=newindex; } if((2*index)==ndata) { int newindex; int temp; newindex=2*index; if(compare_function(datap[heap[index]],datap[heap[newindex]])<=0) ; /* break */ else { temp=heap[newindex]; heap[newindex]=heap[index]; heap[index]=temp; } } } while(ndata>0); /* Tidy up */ tidy_and_exit: if(fds) { for(i=0;i1) { /* Find a spare slot (one *must* be unused at all times) */ pthread_mutex_lock(&running_mutex); for(thread=0;threadlargestitemsize) largestitemsize=itemsize; ramused+=itemsize; ramused =FILESORT_VARALIGN*((ramused+FILESORT_VARSIZE-1)/FILESORT_VARALIGN); ramused+=FILESORT_VARALIGN-FILESORT_VARSIZE; total++; threads[thread].n++; } else ramused-=FILESORT_VARSIZE; count_in++; if(ReadFileBuffered(fd_in,&nextitemsize,FILESORT_VARSIZE)) { more=0; break; } } /* No new data read in this time round */ if(threads[thread].n==0) break; /* Sort the data pointers using a heap sort (potentially in a thread) */ if(more==0 && nfiles==0) threads[thread].filename[0]=0; else sprintf(threads[thread].filename,"%s/filesort.%d.tmp",option_tmpdirname,nfiles); #if defined(USE_PTHREADS) && USE_PTHREADS /* Shortcut if only one file, don't write to disk */ if(more==0 && nfiles==0) filesort_heapsort(threads[thread].datap,threads[thread].n,threads[thread].compare); else if(option_filesort_threads>1) { pthread_mutex_lock(&running_mutex); while(nthreads==(option_filesort_threads-1)) { for(i=0;i1 && nthreads) { pthread_mutex_lock(&running_mutex); pthread_cond_wait(&running_cond,&running_mutex); for(i=0;i1) { int newindex; int temp; newindex=index/2; if(compare_function(datap[heap[index]],datap[heap[newindex]])>=0) break; temp=heap[index]; heap[index]=heap[newindex]; heap[newindex]=temp; index=newindex; } } /* Repeatedly pull out the root of the heap and refill from the same file */ ndata=nfiles; do { int index=1; FILESORT_VARINT itemsize; if(!post_sort_function || post_sort_function(datap[heap[index]],count_out)) { itemsize=*(FILESORT_VARINT*)((char*)datap[heap[index]]-FILESORT_VARSIZE); WriteFileBuffered(fd_out,(char*)datap[heap[index]]-FILESORT_VARSIZE,itemsize+FILESORT_VARSIZE); count_out++; } if(ReadFileBuffered(fds[heap[index]],&itemsize,FILESORT_VARSIZE)) { heap[index]=heap[ndata]; ndata--; } else { *(FILESORT_VARINT*)((char*)datap[heap[index]]-FILESORT_VARSIZE)=itemsize; ReadFileBuffered(fds[heap[index]],datap[heap[index]],itemsize); } /* Bubble down the new value */ while((2*index)=0) newindex=newindex+1; if(compare_function(datap[heap[index]],datap[heap[newindex]])<=0) break; temp=heap[newindex]; heap[newindex]=heap[index]; heap[index]=temp; index=newindex; } if((2*index)==ndata) { int newindex; int temp; newindex=2*index; if(compare_function(datap[heap[index]],datap[heap[newindex]])<=0) ; /* break */ else { temp=heap[newindex]; heap[newindex]=heap[index]; heap[index]=temp; } } } while(ndata>0); /* Tidy up */ tidy_and_exit: if(fds) { for(i=0;idatap,thread->n,thread->compare); /* Create a temporary file and write the result */ fd=OpenFileBufferedNew(thread->filename); for(item=0;itemn;item++) WriteFileBuffered(fd,thread->datap[item],thread->itemsize); CloseFileBuffered(fd); #if defined(USE_PTHREADS) && USE_PTHREADS if(option_filesort_threads>1) { pthread_mutex_lock(&running_mutex); thread->running=2; pthread_cond_signal(&running_cond); pthread_mutex_unlock(&running_mutex); } #endif return(NULL); } /*++++++++++++++++++++++++++++++++++++++ A wrapper function that can be run in a thread for variable data. void *filesort_vary_heapsort_thread Returns NULL (required to return void*). thread_data *thread The data to be processed in this thread. ++++++++++++++++++++++++++++++++++++++*/ static void *filesort_vary_heapsort_thread(thread_data *thread) { int fd; size_t item; /* Sort the data pointers using a heap sort */ filesort_heapsort(thread->datap,thread->n,thread->compare); /* Create a temporary file and write the result */ fd=OpenFileBufferedNew(thread->filename); for(item=0;itemn;item++) { FILESORT_VARINT itemsize=*(FILESORT_VARINT*)((char*)thread->datap[item]-FILESORT_VARSIZE); WriteFileBuffered(fd,(char*)thread->datap[item]-FILESORT_VARSIZE,itemsize+FILESORT_VARSIZE); } CloseFileBuffered(fd); #if defined(USE_PTHREADS) && USE_PTHREADS if(option_filesort_threads>1) { pthread_mutex_lock(&running_mutex); thread->running=2; pthread_cond_signal(&running_cond); pthread_mutex_unlock(&running_mutex); } #endif return(NULL); } /*++++++++++++++++++++++++++++++++++++++ A function to sort an array of pointers efficiently. The data is sorted using a "Heap sort" http://en.wikipedia.org/wiki/Heapsort, in particular, this is good because it can operate in-place and doesn't allocate more memory like using qsort() does. void **datap A pointer to the array of pointers to sort. size_t nitems The number of items of data to sort. int (*compare_function)(const void*, const void*) The comparison function. This is identical to qsort if the data to be sorted is an array of things not pointers. ++++++++++++++++++++++++++++++++++++++*/ void filesort_heapsort(void **datap,size_t nitems,int(*compare_function)(const void*, const void*)) { void **datap1=&datap[-1]; size_t item; /* Fill the heap by pretending to insert the data that is already there */ for(item=2;item<=nitems;item++) { size_t index=item; /* Bubble up the new value (upside-down, put largest at top) */ while(index>1) { int newindex; void *temp; newindex=index/2; if(compare_function(datap1[index],datap1[newindex])<=0) /* reversed comparison to filesort_fixed() above */ break; temp=datap1[index]; datap1[index]=datap1[newindex]; datap1[newindex]=temp; index=newindex; } } /* Repeatedly pull out the root of the heap and swap with the bottom item */ for(item=nitems;item>1;item--) { size_t index=1; void *temp; temp=datap1[index]; datap1[index]=datap1[item]; datap1[item]=temp; /* Bubble down the new value (upside-down, put largest at top) */ while((2*index)<(item-1)) { int newindex; void *temp; newindex=2*index; if(compare_function(datap1[newindex],datap1[newindex+1])<=0) /* reversed comparison to filesort_fixed() above */ newindex=newindex+1; if(compare_function(datap1[index],datap1[newindex])>=0) /* reversed comparison to filesort_fixed() above */ break; temp=datap1[newindex]; datap1[newindex]=datap1[index]; datap1[index]=temp; index=newindex; } if((2*index)==(item-1)) { int newindex; void *temp; newindex=2*index; if(compare_function(datap1[index],datap1[newindex])>=0) /* reversed comparison to filesort_fixed() above */ ; /* break */ else { temp=datap1[newindex]; datap1[newindex]=datap1[index]; datap1[index]=temp; } } } } routino-3.2/src/xml/ 40755 233 144 0 13061252060 7573 5routino-3.2/src/xml/test/ 40755 233 144 0 12531652211 10555 5routino-3.2/src/xml/test/bad-unexpected-right-angle.xml 644 233 144 213 12064636364 16372 0 > routino-3.2/src/xml/test/bad-xml-header-at-end.xml 644 233 144 202 12064636364 15221 0 routino-3.2/src/xml/test/bad-tag-attr-space-before-equal.xml 644 233 144 222 12064636364 17210 0 routino-3.2/src/xml/test/bad-tag-attr-space-after-equal.xml 644 233 144 222 12064636364 17047 0 routino-3.2/src/xml/test/bad-tag-attr-no-quotes.xml 644 233 144 217 12064636364 15506 0 routino-3.2/src/xml/test/bad-comment-extra-double-dash.xml 644 233 144 205 12064636364 17000 0 routino-3.2/src/xml/test/bad-tag-level-nesting.xml 644 233 144 203 12064636364 15353 0 routino-3.2/src/xml/test/bad-end-tag-space-at-end.xml 644 233 144 204 12064636364 15605 0 routino-3.2/src/xml/test/bad-double-quote-attr-left-angle.xml 644 233 144 233 12064636364 17422 0 routino-3.2/src/xml/test/bad-xml-header-at-begin.xml 644 233 144 204 12064636364 15541 0 routino-3.2/src/xml/test/bad-attr-entity-ref.xml 644 233 144 252 12064636364 15070 0 routino-3.2/src/xml/test/bad-unbalanced-tag-start-end.xml 644 233 144 203 12064636364 16572 0 routino-3.2/src/xml/test/bad-single-quote-attr-invalid-utf8.xml 644 233 144 233 12064636364 17725 0 routino-3.2/src/xml/test/bad-unexpected-end-tag.xml 644 233 144 204 12064636364 15510 0 routino-3.2/src/xml/test/bad-double-quote-attr-right-angle.xml 644 233 144 233 12064636364 17605 0 routino-3.2/src/xml/test/bad-unexpected-attribute-name.xml 644 233 144 225 12064636364 17115 0 routino-3.2/src/xml/test/test.xsd 644 233 144 2512 12064636364 12304 0 routino-3.2/src/xml/test/bad-end-tag-space-at-begin1.xml 644 233 144 204 12064636364 16204 0 routino-3.2/src/xml/test/bad-double-quote-attr-invalid-ascii.xml 644 233 144 233 12064636364 20120 0 routino-3.2/src/xml/test/bad-xml-header-not-first.xml 644 233 144 203 12064636364 15777 0 routino-3.2/src/xml/test/bad-start-tag-space-at-begin.xml 644 233 144 204 12064636364 16512 0 < level1> routino-3.2/src/xml/test/bad-double-quote-attr-invalid-utf8.xml 644 233 144 233 12064636364 17716 0 routino-3.2/src/xml/test/bad-end-tag-with-attr.xml 644 233 144 221 12064636364 15266 0 routino-3.2/src/xml/test/bad-text-outside.xml 644 233 144 235 12064636364 14471 0 text routino-3.2/src/xml/test/bad-single-quote-attr-invalid-ascii.xml 644 233 144 233 12064636364 20127 0 routino-3.2/src/xml/test/bad-comment-ends-triple-dash.xml 644 233 144 203 12064636364 16631 0 routino-3.2/src/xml/test/bad-end-tag-space-at-begin2.xml 644 233 144 204 12064636364 16205 0 < /level1> routino-3.2/src/xml/test/bad-unexpected-left-angle.xml 644 233 144 213 12064636364 16207 0 < routino-3.2/src/xml/test/bad-single-quote-attr-left-angle.xml 644 233 144 233 12064636364 17431 0 routino-3.2/src/xml/test/bad-single-quote-attr-right-angle.xml 644 233 144 233 12064636364 17614 0 routino-3.2/src/xml/test/good.xml 644 233 144 252 12064636364 12236 0 routino-3.2/src/xml/test/bad-early-end-of-file.xml 644 233 144 173 12064636364 15233 0 routino-3.2/src/xml/test/bad-double-quote-attr-amp.xml 644 233 144 233 12064636364 16161 0 routino-3.2/src/xml/test/bad-single-quote-attr-amp.xml 644 233 144 233 12064636364 16170 0 routino-3.2/src/xml/Makefile 644 233 144 5573 12602557132 11271 0# XML test programs Makefile # # Part of the Routino routing software. # # This file Copyright 2010-2015 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # All configuration is in the top-level Makefile.conf include ../../Makefile.conf # Compilation targets DEPDIR=.deps XMLDIR=../../xml X=$(notdir $(wildcard $(XMLDIR)/*.xsd)) C=$(foreach f,$(X),$(addsuffix -skeleton.c,$(basename $f))) D=$(wildcard $(DEPDIR)/*.d) O=$(foreach f,$(C),$(addsuffix .o,$(basename $f))) E=$(foreach f,$(C),$(addsuffix $(.EXE),$(basename $f))) EXE=xsd-to-xmlparser$(.EXE) ######## all: $(EXE) $(C) $(E) ######## xsd-to-xmlparser$(.EXE) : xsd-to-xmlparser.o ../xmlparse.o $(LD) $^ -o $@ $(LDFLAGS) ######## %-skeleton.c : $(XMLDIR)/%.xsd xsd-to-xmlparser$(.EXE) -./xsd-to-xmlparser < $< > $@ @test -s $@ || rm $@ %-skeleton$(.EXE) : %-skeleton.o ../xmlparse.o $(LD) $^ -o $@ $(LDFLAGS) .SECONDARY : $(O) ######## ../xmlparse.o : ../xmlparse.c ../xmlparse.h cd .. && $(MAKE) xmlparse.o ######## %.o : %.c -@[ -d $(DEPDIR) ] || mkdir $(DEPDIR) $(CC) -c $(CFLAGS) -I.. $< -o $@ -MMD -MP -MF $(addprefix $(DEPDIR)/,$(addsuffix .d,$(basename $@))) ######## test: test-skeleton$(.EXE) @status=true ;\ echo "" ;\ for good in test/good*.xml; do \ echo "Testing: $$good ... " ;\ if ./test-skeleton < $$good > /dev/null; then echo "... passed"; else echo "... FAILED"; status=false; fi ;\ echo "" ;\ done ;\ for bad in test/bad*.xml; do \ echo "Testing: $$bad ... " ;\ if ./test-skeleton < $$bad > /dev/null; then echo "... FAILED"; status=false; else echo "... passed"; fi ;\ echo "" ;\ done ;\ if $$status; then echo "Success: all tests passed"; else echo "Warning: Some tests FAILED"; fi ;\ $$status test-skeleton$(.EXE) : test-skeleton.o ../xmlparse.o $(LD) $^ -o $@ $(LDFLAGS) test-skeleton.c : test/test.xsd xsd-to-xmlparser$(.EXE) ./xsd-to-xmlparser < $< | sed -e 's/XMLPARSE_UNKNOWN_ATTR_WARN/XMLPARSE_UNKNOWN_ATTR_ERROR/' > $@ ######## install: ######## clean: rm -f *~ rm -f *.o rm -f $(EXE) rm -f $(E) test-skeleton$(.EXE) rm -f $(D) $(DEPDIR)/test-skeleton.d rm -f $(C) test-skeleton.c rm -fr $(DEPDIR) rm -f core rm -f *.gcda *.gcno *.gcov gmon.out ######## distclean: clean ######## include $(D) ######## .PHONY:: all test install clean distclean routino-3.2/src/xml/xsd-to-xmlparser.c 644 233 144 40276 12563633053 13250 0/*************************************** $Header: /home/amb/CVS/routino/src/xml/xsd-to-xmlparser.c,v 1.10 2010-04-23 18:41:20 amb Exp $ An XML parser for simplified XML Schema Definitions to create XML parser skeletons. Part of the Routino routing software. ******************/ /****************** This file Copyright 2010-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #if !defined(_MSC_VER) #include #endif #include #include #include #include "xmlparse.h" /*+ A forward definition of the xmltagx +*/ typedef struct _xmltagx xmltagx; /*+ A structure to hold the extended definition of a tag. +*/ struct _xmltagx { char *name; /*+ The name of the tag. +*/ char *type; /*+ The type of the tag. +*/ int nattributes; /*+ The number of valid attributes for the tag. +*/ char *attributes[XMLPARSE_MAX_ATTRS]; /*+ The valid attributes for the tag. +*/ int nsubtagsx; /*+ The number of valid attributes for the tag. +*/ xmltagx *subtagsx[XMLPARSE_MAX_SUBTAGS]; /*+ The list of types for the subtags contained within this one. +*/ }; /* The local variables and functions */ int ntagsx=0; xmltagx **tagsx=NULL; char *currenttype=NULL; static char *safe(const char *name); /* The XML tag processing function prototypes */ static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding); static int schemaType_function(const char *_tag_,int _type_,const char *elementFormDefault,const char *xmlns_xsd); static int elementType_function(const char *_tag_,int _type_,const char *name,const char *type,const char *minOccurs,const char *maxOccurs); static int complexType_function(const char *_tag_,int _type_,const char *name); static int sequenceType_function(const char *_tag_,int _type_); static int attributeType_function(const char *_tag_,int _type_,const char *name,const char *type); /* The XML tag definitions (forward declarations) */ static const xmltag xmlDeclaration_tag; static const xmltag schemaType_tag; static const xmltag elementType_tag; static const xmltag complexType_tag; static const xmltag sequenceType_tag; static const xmltag attributeType_tag; /* The XML tag definition values */ /*+ The complete set of tags at the top level. +*/ static const xmltag * const xml_toplevel_tags[]={&xmlDeclaration_tag,&schemaType_tag,NULL}; /*+ The xmlDeclaration type tag. +*/ static const xmltag xmlDeclaration_tag= {"xml", 2, {"version","encoding"}, xmlDeclaration_function, {NULL}}; /*+ The schemaType type tag. +*/ static const xmltag schemaType_tag= {"xsd:schema", 2, {"elementFormDefault","xmlns:xsd"}, schemaType_function, {&elementType_tag,&complexType_tag,NULL}}; /*+ The elementType type tag. +*/ static const xmltag elementType_tag= {"xsd:element", 4, {"name","type","minOccurs","maxOccurs"}, elementType_function, {NULL}}; /*+ The complexType type tag. +*/ static const xmltag complexType_tag= {"xsd:complexType", 1, {"name"}, complexType_function, {&sequenceType_tag,&attributeType_tag,NULL}}; /*+ The sequenceType type tag. +*/ static const xmltag sequenceType_tag= {"xsd:sequence", 0, {NULL}, sequenceType_function, {&elementType_tag,NULL}}; /*+ The attributeType type tag. +*/ static const xmltag attributeType_tag= {"xsd:attribute", 2, {"name","type"}, attributeType_function, {NULL}}; /* The XML tag processing functions */ /*++++++++++++++++++++++++++++++++++++++ The function that is called when the XML declaration is seen int xmlDeclaration_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *version The contents of the 'version' attribute (or NULL if not defined). const char *encoding The contents of the 'encoding' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding) { /* Add the XML declaration as a tag. */ currenttype=NULL; elementType_function("xsd:element",XMLPARSE_TAG_START|XMLPARSE_TAG_END,"xml","xmlDeclaration",NULL,NULL); complexType_function("xsd:complexType",XMLPARSE_TAG_START,"xmlDeclaration"); attributeType_function("xsd:attribute",XMLPARSE_TAG_START|XMLPARSE_TAG_END,"version",NULL); attributeType_function("xsd:attribute",XMLPARSE_TAG_START|XMLPARSE_TAG_END,"encoding",NULL); complexType_function("xsd:complexType",XMLPARSE_TAG_END,NULL); currenttype=NULL; return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the schemaType XSD type is seen int schemaType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *elementFormDefault The contents of the 'elementFormDefault' attribute (or NULL if not defined). const char *xmlns_xsd The contents of the 'xmlns:xsd' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int schemaType_function(const char *_tag_,int _type_,const char *elementFormDefault,const char *xmlns_xsd) { return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the elementType XSD type is seen int elementType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *name The contents of the 'name' attribute (or NULL if not defined). const char *type The contents of the 'type' attribute (or NULL if not defined). const char *minOccurs The contents of the 'minOccurs' attribute (or NULL if not defined). const char *maxOccurs The contents of the 'maxOccurs' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int elementType_function(const char *_tag_,int _type_,const char *name,const char *type,const char *minOccurs,const char *maxOccurs) { xmltagx *tagx=NULL; int i; if(_type_==XMLPARSE_TAG_END) return(0); for(i=0;itype) && !strcmp(name,tagsx[i]->name)) tagx=tagsx[i]; if(!tagx) { ntagsx++; tagsx=(xmltagx**)realloc((void*)tagsx,ntagsx*sizeof(xmltagx*)); tagsx[ntagsx-1]=(xmltagx*)calloc(1,sizeof(xmltagx)); tagsx[ntagsx-1]->name=strcpy(malloc(strlen(name)+1),name); tagsx[ntagsx-1]->type=strcpy(malloc(strlen(type)+1),type); tagx=tagsx[ntagsx-1]; } if(!currenttype) return(0); for(i=0;itype,currenttype)) { tagsx[i]->subtagsx[tagsx[i]->nsubtagsx]=tagx; tagsx[i]->nsubtagsx++; if(tagsx[i]->nsubtagsx==XMLPARSE_MAX_SUBTAGS) {fprintf(stderr,"Too many subtags seen for type '%s'.\n",currenttype); exit(1);} } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the complexType XSD type is seen int complexType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *name The contents of the 'name' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int complexType_function(const char *_tag_,int _type_,const char *name) { if(_type_==XMLPARSE_TAG_END) return(0); currenttype=strcpy(realloc(currenttype,strlen(name)+1),name); return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the sequenceType XSD type is seen int sequenceType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. ++++++++++++++++++++++++++++++++++++++*/ static int sequenceType_function(const char *_tag_,int _type_) { return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the attributeType XSD type is seen int attributeType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *name The contents of the 'name' attribute (or NULL if not defined). const char *type The contents of the 'type' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int attributeType_function(const char *_tag_,int _type_,const char *name,const char *type) { int i; if(_type_==XMLPARSE_TAG_END) return(0); for(i=0;itype,currenttype)) { tagsx[i]->attributes[tagsx[i]->nattributes]=strcpy(malloc(strlen(name)+1),name); tagsx[i]->nattributes++; if(tagsx[i]->nattributes==XMLPARSE_MAX_ATTRS) {fprintf(stderr,"Too many attributes seen for type '%s'.\n",currenttype); exit(1);} } return(0); } /*++++++++++++++++++++++++++++++++++++++ The XML Schema Definition XML parser and C program generator. ++++++++++++++++++++++++++++++++++++++*/ int main(int argc,char **argv) { int i,j; /* Parse the XSD file */ if(ParseXML(STDIN_FILENO,xml_toplevel_tags,XMLPARSE_UNKNOWN_ATTR_IGNORE)) { fprintf(stderr,"Cannot parse XML file - exiting.\n"); exit(1); } /* Print the header */ printf("/***************************************\n"); printf(" An automatically generated skeleton XML parser.\n"); printf("\n"); printf(" Automatically generated by xsd-to-xmlparser.\n"); printf(" ***************************************/\n"); printf("\n"); printf("\n"); printf("#include \n"); printf("#if !defined(_MSC_VER)\n"); printf("#include \n"); printf("#endif\n"); printf("\n"); printf("#include \"xmlparse.h\"\n"); /* Print the function prototypes */ printf("\n"); printf("\n"); printf("/* The XML tag processing function prototypes */\n"); printf("\n"); for(i=0;itype)); for(j=0;jnattributes;j++) printf(",const char *%s",safe(tagsx[i]->attributes[j])); printf(");\n"); } /* Print the xmltag variables */ printf("\n"); printf("\n"); printf("/* The XML tag definitions (forward declarations) */\n"); printf("\n"); for(i=0;itype)); printf("\n"); printf("\n"); printf("/* The XML tag definition values */\n"); printf("\n"); printf("/*+ The complete set of tags at the top level. +*/\n"); printf("static const xmltag * const xml_toplevel_tags[]={"); printf("&%s_tag,",safe(tagsx[0]->type)); printf("&%s_tag,",safe(tagsx[1]->type)); printf("NULL};\n"); for(i=0;itype); printf("static const xmltag %s_tag=\n",safe(tagsx[i]->type)); printf(" {\"%s\",\n",tagsx[i]->name); printf(" %d, {",tagsx[i]->nattributes); for(j=0;jnattributes;j++) printf("%s\"%s\"",(j?",":""),tagsx[i]->attributes[j]); printf("%s},\n",(tagsx[i]->nattributes?"":"NULL")); printf(" %s_function,\n",safe(tagsx[i]->type)); printf(" {"); for(j=0;jnsubtagsx;j++) printf("&%s_tag,",safe(tagsx[i]->subtagsx[j]->type)); printf("NULL}};\n"); } /* Print the functions */ printf("\n"); printf("\n"); printf("/* The XML tag processing functions */\n"); for(i=0;itype); printf("\n"); printf(" int %s_function Returns 0 if no error occured or something else otherwise.\n",safe(tagsx[i]->type)); printf("\n"); printf(" const char *_tag_ Set to the name of the element tag that triggered this function call.\n"); printf("\n"); printf(" int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.\n"); for(j=0;jnattributes;j++) { printf("\n"); printf(" const char *%s The contents of the '%s' attribute (or NULL if not defined).\n",safe(tagsx[i]->attributes[j]),tagsx[i]->attributes[j]); } printf(" ++++++++++++++++++++++++++++++++++++++*/\n"); printf("\n"); printf("static int %s_function(const char *_tag_,int _type_",safe(tagsx[i]->type)); for(j=0;jnattributes;j++) printf(",const char *%s",safe(tagsx[i]->attributes[j])); printf(")\n"); printf("{\n"); if(i==(ntagsx-1)) /* XML tag */ { printf(" printf(\"nattributes;j++) { char *safename=safe(tagsx[i]->attributes[j]); printf(" if(%s) printf(\" %s=\\\"%%s\\\"\",ParseXML_Encode_Safe_XML(%s));\n",safename,tagsx[i]->attributes[j],safename); } printf(" printf(\" ?>\\n\");\n"); } else { printf(" printf(\"<%%s%%s\",(_type_==XMLPARSE_TAG_END)?\"/\":\"\",_tag_);\n"); for(j=0;jnattributes;j++) { char *safename=safe(tagsx[i]->attributes[j]); printf(" if(%s) printf(\" %s=\\\"%%s\\\"\",ParseXML_Encode_Safe_XML(%s));\n",safename,tagsx[i]->attributes[j],safename); } printf(" printf(\"%%s>\\n\",(_type_==(XMLPARSE_TAG_START|XMLPARSE_TAG_END))?\" /\":\"\");\n"); } printf(" return(0);\n"); printf("}\n"); } /* Print the main function */ printf("\n"); printf("\n"); printf("/*++++++++++++++++++++++++++++++++++++++\n"); printf(" A skeleton XML parser.\n"); printf(" ++++++++++++++++++++++++++++++++++++++*/\n"); printf("\n"); printf("int main(int argc,char **argv)\n"); printf("{\n"); printf(" if(ParseXML(STDIN_FILENO,xml_toplevel_tags,XMLPARSE_UNKNOWN_ATTR_WARN))\n"); printf(" return(1);\n"); printf(" else\n"); printf(" return(0);\n"); printf("}\n"); return(0); } /*++++++++++++++++++++++++++++++++++++++ A function to return a safe C identifier from an XML tag or attribute name. char *safe Returns the safe name in a private string (only use once). const char *name The name to convert. ++++++++++++++++++++++++++++++++++++++*/ static char *safe(const char *name) { static char *safe=NULL; /* static allocation of return value */ int i; safe=realloc(safe,strlen(name)+1); for(i=0;name[i];i++) if(isalnum(name[i])) safe[i]=name[i]; else safe[i]='_'; safe[i]=0; return(safe); } routino-3.2/src/visualiser.c 644 233 144 76764 12563633052 11417 0/*************************************** Extract data from Routino. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include "types.h" #include "nodes.h" #include "segments.h" #include "ways.h" #include "relations.h" #include "errorlog.h" #include "typesx.h" #include "visualiser.h" /* Limit types */ #define SPEED_LIMIT 1 #define WEIGHT_LIMIT 2 #define HEIGHT_LIMIT 3 #define WIDTH_LIMIT 4 #define LENGTH_LIMIT 5 /* Local types */ typedef void (*callback_t)(index_t node,double latitude,double longitude); /* Local variables (intialised by entry-point function before later use) */ static Nodes *OSMNodes; static Segments *OSMSegments; static Ways *OSMWays; static Relations *OSMRelations; static double LatMin; static double LatMax; static double LonMin; static double LonMax; static int limit_type=0; static Highway highways=Highway_None; static Transports transports=Transports_None; static Properties properties=Properties_None; static highway_t waytype=0; /* Local functions */ static void find_all_nodes(Nodes *nodes,callback_t callback); static void output_junctions(index_t node,double latitude,double longitude); static void output_super(index_t node,double latitude,double longitude); static void output_waytype(index_t node,double latitude,double longitude); static void output_highway(index_t node,double latitude,double longitude); static void output_transport(index_t node,double latitude,double longitude); static void output_barrier(index_t node,double latitude,double longitude); static void output_turnrestriction(index_t node,double latitude,double longitude); static void output_limits(index_t node,double latitude,double longitude); static void output_property(index_t node,double latitude,double longitude); /*++++++++++++++++++++++++++++++++++++++ Output the data for junctions (--data=junctions). Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. ++++++++++++++++++++++++++++++++++++++*/ void OutputJunctions(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax) { /* Use local variables so that the callback doesn't need to pass them backwards and forwards */ OSMNodes=nodes; OSMSegments=segments; OSMWays=ways; OSMRelations=relations; LatMin=latmin; LatMax=latmax; LonMin=lonmin; LonMax=lonmax; /* Iterate through the nodes and process them */ find_all_nodes(nodes,(callback_t)output_junctions); } /*++++++++++++++++++++++++++++++++++++++ Process a single node and output all those that are junctions (called as a callback). index_t node The node to output. double latitude The latitude of the node. double longitude The longitude of the node. ++++++++++++++++++++++++++++++++++++++*/ static void output_junctions(index_t node,double latitude,double longitude) { Node *nodep=LookupNode(OSMNodes,node,1); Segment *segmentp; Way *firstwayp; int count=0,difference=0; segmentp=FirstSegment(OSMSegments,nodep,1); firstwayp=LookupWay(OSMWays,segmentp->way,1); do { Way *wayp=LookupWay(OSMWays,segmentp->way,2); if(IsNormalSegment(segmentp)) count++; if(WaysCompare(firstwayp,wayp)) difference=1; segmentp=NextSegment(OSMSegments,segmentp,node); } while(segmentp); if(count!=2 || difference) printf("node%"Pindex_t" %.6f %.6f %d\n",node,radians_to_degrees(latitude),radians_to_degrees(longitude),count); } /*++++++++++++++++++++++++++++++++++++++ Output the data for super-nodes and super-segments (--data=super). Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. ++++++++++++++++++++++++++++++++++++++*/ void OutputSuper(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax) { /* Use local variables so that the callback doesn't need to pass them backwards and forwards */ OSMNodes=nodes; OSMSegments=segments; OSMWays=ways; OSMRelations=relations; LatMin=latmin; LatMax=latmax; LonMin=lonmin; LonMax=lonmax; /* Iterate through the nodes and process them */ find_all_nodes(nodes,(callback_t)output_super); } /*++++++++++++++++++++++++++++++++++++++ Process a single node and output all that are super-nodes and all connected super-segments (called as a callback). index_t node The node to output. double latitude The latitude of the node. double longitude The longitude of the node. ++++++++++++++++++++++++++++++++++++++*/ static void output_super(index_t node,double latitude,double longitude) { Node *nodep=LookupNode(OSMNodes,node,1); Segment *segmentp; if(!IsSuperNode(nodep)) return; printf("node%"Pindex_t" %.6f %.6f\n",node,radians_to_degrees(latitude),radians_to_degrees(longitude)); segmentp=FirstSegment(OSMSegments,nodep,1); do { if(IsSuperSegment(segmentp)) { index_t othernode=OtherNode(segmentp,node); double lat,lon; GetLatLong(OSMNodes,othernode,NULL,&lat,&lon); if(node>othernode || (latLatMax || lonLonMax)) printf("segment%"Pindex_t" %.6f %.6f\n",IndexSegment(OSMSegments,segmentp),radians_to_degrees(lat),radians_to_degrees(lon)); } segmentp=NextSegment(OSMSegments,segmentp,node); } while(segmentp); } /*++++++++++++++++++++++++++++++++++++++ Output the data for segments of special highway types (--data=waytype-oneway etc). Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. highway_t mask A bit mask that must match the highway type. ++++++++++++++++++++++++++++++++++++++*/ void OutputWaytype(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax,highway_t mask) { /* Use local variables so that the callback doesn't need to pass them backwards and forwards */ OSMNodes=nodes; OSMSegments=segments; OSMWays=ways; OSMRelations=relations; LatMin=latmin; LatMax=latmax; LonMin=lonmin; LonMax=lonmax; /* Iterate through the nodes and process them */ waytype=mask; find_all_nodes(nodes,(callback_t)output_waytype); } /*++++++++++++++++++++++++++++++++++++++ Process a single node and output all connected segments of a particular special highway type (called as a callback). index_t node The node to output. double latitude The latitude of the node. double longitude The longitude of the node. ++++++++++++++++++++++++++++++++++++++*/ static void output_waytype(index_t node,double latitude,double longitude) { Node *nodep=LookupNode(OSMNodes,node,1); Segment *segmentp; segmentp=FirstSegment(OSMSegments,nodep,1); do { if(IsNormalSegment(segmentp)) { Way *wayp=LookupWay(OSMWays,segmentp->way,1); if(wayp->type&waytype) { index_t othernode=OtherNode(segmentp,node); double lat,lon; GetLatLong(OSMNodes,othernode,NULL,&lat,&lon); if(node>othernode || (latLatMax || lonLonMax)) { if(IsOnewayFrom(segmentp,node)) printf("segment%"Pindex_t" %.6f %.6f %.6f %.6f\n",IndexSegment(OSMSegments,segmentp),radians_to_degrees(latitude),radians_to_degrees(longitude),radians_to_degrees(lat),radians_to_degrees(lon)); else if(IsOnewayFrom(segmentp,othernode)) printf("segment%"Pindex_t" %.6f %.6f %.6f %.6f\n",IndexSegment(OSMSegments,segmentp),radians_to_degrees(lat),radians_to_degrees(lon),radians_to_degrees(latitude),radians_to_degrees(longitude)); } } } segmentp=NextSegment(OSMSegments,segmentp,node); } while(segmentp); } /*++++++++++++++++++++++++++++++++++++++ Output the data for segments of a particular highway type (--data=highway-primary etc). Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. Highway highway The type of highway. ++++++++++++++++++++++++++++++++++++++*/ void OutputHighway(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax,Highway highway) { /* Use local variables so that the callback doesn't need to pass them backwards and forwards */ OSMNodes=nodes; OSMSegments=segments; OSMWays=ways; OSMRelations=relations; LatMin=latmin; LatMax=latmax; LonMin=lonmin; LonMax=lonmax; /* Iterate through the nodes and process them */ highways=highway; find_all_nodes(nodes,(callback_t)output_highway); } /*++++++++++++++++++++++++++++++++++++++ Process a single node and output all connected segments that are of a particular highway type (called as a callback). index_t node The node to output. double latitude The latitude of the node. double longitude The longitude of the node. ++++++++++++++++++++++++++++++++++++++*/ static void output_highway(index_t node,double latitude,double longitude) { Node *nodep=LookupNode(OSMNodes,node,1); Segment *segmentp; segmentp=FirstSegment(OSMSegments,nodep,1); do { if(IsNormalSegment(segmentp)) { Way *wayp=LookupWay(OSMWays,segmentp->way,1); if(HIGHWAY(wayp->type)==highways) { index_t othernode=OtherNode(segmentp,node); double lat,lon; GetLatLong(OSMNodes,othernode,NULL,&lat,&lon); if(node>othernode || (latLatMax || lonLonMax)) printf("segment%"Pindex_t" %.6f %.6f %.6f %.6f\n",IndexSegment(OSMSegments,segmentp),radians_to_degrees(latitude),radians_to_degrees(longitude),radians_to_degrees(lat),radians_to_degrees(lon)); } } segmentp=NextSegment(OSMSegments,segmentp,node); } while(segmentp); } /*++++++++++++++++++++++++++++++++++++++ Output the data for segments allowed for a particular type of traffic (--data=transport-motorcar etc). Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. Transport transport The type of transport. ++++++++++++++++++++++++++++++++++++++*/ void OutputTransport(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax,Transport transport) { /* Use local variables so that the callback doesn't need to pass them backwards and forwards */ OSMNodes=nodes; OSMSegments=segments; OSMWays=ways; OSMRelations=relations; LatMin=latmin; LatMax=latmax; LonMin=lonmin; LonMax=lonmax; /* Iterate through the nodes and process them */ transports=TRANSPORTS(transport); find_all_nodes(nodes,(callback_t)output_transport); } /*++++++++++++++++++++++++++++++++++++++ Process a single node and output all connected segments for a particular traffic type (called as a callback). index_t node The node to output. double latitude The latitude of the node. double longitude The longitude of the node. ++++++++++++++++++++++++++++++++++++++*/ static void output_transport(index_t node,double latitude,double longitude) { Node *nodep=LookupNode(OSMNodes,node,1); Segment *segmentp; segmentp=FirstSegment(OSMSegments,nodep,1); do { if(IsNormalSegment(segmentp)) { Way *wayp=LookupWay(OSMWays,segmentp->way,1); if(wayp->allow&transports) { index_t othernode=OtherNode(segmentp,node); double lat,lon; GetLatLong(OSMNodes,othernode,NULL,&lat,&lon); if(node>othernode || (latLatMax || lonLonMax)) printf("segment%"Pindex_t" %.6f %.6f %.6f %.6f\n",IndexSegment(OSMSegments,segmentp),radians_to_degrees(latitude),radians_to_degrees(longitude),radians_to_degrees(lat),radians_to_degrees(lon)); } } segmentp=NextSegment(OSMSegments,segmentp,node); } while(segmentp); } /*++++++++++++++++++++++++++++++++++++++ Output the data for nodes disallowed for a particular type of traffic (--data=barrier). Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. Transport transport The type of transport. ++++++++++++++++++++++++++++++++++++++*/ void OutputBarrier(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax,Transport transport) { /* Use local variables so that the callback doesn't need to pass them backwards and forwards */ OSMNodes=nodes; OSMSegments=segments; OSMWays=ways; OSMRelations=relations; LatMin=latmin; LatMax=latmax; LonMin=lonmin; LonMax=lonmax; /* Iterate through the nodes and process them */ transports=TRANSPORTS(transport); find_all_nodes(nodes,(callback_t)output_barrier); } /*++++++++++++++++++++++++++++++++++++++ Process a single node and output those that are barriers (called as a callback). index_t node The node to output. double latitude The latitude of the node. double longitude The longitude of the node. ++++++++++++++++++++++++++++++++++++++*/ static void output_barrier(index_t node,double latitude,double longitude) { Node *nodep=LookupNode(OSMNodes,node,1); if(!(nodep->allow&transports)) printf("node%"Pindex_t" %.6f %.6f\n",node,radians_to_degrees(latitude),radians_to_degrees(longitude)); } /*++++++++++++++++++++++++++++++++++++++ Output the data for turn restrictions (--data=turns). Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. ++++++++++++++++++++++++++++++++++++++*/ void OutputTurnRestrictions(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax) { /* Use local variables so that the callback doesn't need to pass them backwards and forwards */ OSMNodes=nodes; OSMSegments=segments; OSMWays=ways; OSMRelations=relations; LatMin=latmin; LatMax=latmax; LonMin=lonmin; LonMax=lonmax; /* Iterate through the nodes and process them */ find_all_nodes(nodes,(callback_t)output_turnrestriction); } /*++++++++++++++++++++++++++++++++++++++ Process a single node and output those that are 'via' nodes for a turn restriction and the associated segments (called as a callback). index_t node The node to output. double latitude The latitude of the node. double longitude The longitude of the node. ++++++++++++++++++++++++++++++++++++++*/ static void output_turnrestriction(index_t node,double latitude,double longitude) { Node *nodep=LookupNode(OSMNodes,node,1); index_t turnrelation=NO_RELATION; if(!IsTurnRestrictedNode(nodep)) return; turnrelation=FindFirstTurnRelation1(OSMRelations,node); do { TurnRelation *relation; Segment *from_segmentp,*to_segmentp; index_t from_node,to_node; double from_lat,from_lon,to_lat,to_lon; relation=LookupTurnRelation(OSMRelations,turnrelation,1); from_segmentp=LookupSegment(OSMSegments,relation->from,1); to_segmentp =LookupSegment(OSMSegments,relation->to ,2); from_node=OtherNode(from_segmentp,node); to_node =OtherNode(to_segmentp ,node); GetLatLong(OSMNodes,from_node,NULL,&from_lat,&from_lon); GetLatLong(OSMNodes,to_node ,NULL,&to_lat ,&to_lon); printf("turn-relation%"Pindex_t" %.6f %.6f %.6f %.6f %.6f %.6f\n", turnrelation, radians_to_degrees(from_lat),radians_to_degrees(from_lon), radians_to_degrees(latitude),radians_to_degrees(longitude), radians_to_degrees(to_lat),radians_to_degrees(to_lon)); turnrelation=FindNextTurnRelation1(OSMRelations,turnrelation); } while(turnrelation!=NO_RELATION); } /*++++++++++++++++++++++++++++++++++++++ Output the data for speed limits (--data=speed). Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. ++++++++++++++++++++++++++++++++++++++*/ void OutputSpeedLimits(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax) { /* Use local variables so that the callback doesn't need to pass them backwards and forwards */ OSMNodes=nodes; OSMSegments=segments; OSMWays=ways; OSMRelations=relations; LatMin=latmin; LatMax=latmax; LonMin=lonmin; LonMax=lonmax; /* Iterate through the nodes and process them */ limit_type=SPEED_LIMIT; find_all_nodes(nodes,(callback_t)output_limits); } /*++++++++++++++++++++++++++++++++++++++ Output the data for weight limits (--data=weight). Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. ++++++++++++++++++++++++++++++++++++++*/ void OutputWeightLimits(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax) { /* Use local variables so that the callback doesn't need to pass them backwards and forwards */ OSMNodes=nodes; OSMSegments=segments; OSMWays=ways; OSMRelations=relations; LatMin=latmin; LatMax=latmax; LonMin=lonmin; LonMax=lonmax; /* Iterate through the nodes and process them */ limit_type=WEIGHT_LIMIT; find_all_nodes(nodes,(callback_t)output_limits); } /*++++++++++++++++++++++++++++++++++++++ Output the data for height limits (--data=height). Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. ++++++++++++++++++++++++++++++++++++++*/ void OutputHeightLimits(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax) { /* Use local variables so that the callback doesn't need to pass them backwards and forwards */ OSMNodes=nodes; OSMSegments=segments; OSMWays=ways; OSMRelations=relations; LatMin=latmin; LatMax=latmax; LonMin=lonmin; LonMax=lonmax; /* Iterate through the nodes and process them */ limit_type=HEIGHT_LIMIT; find_all_nodes(nodes,(callback_t)output_limits); } /*++++++++++++++++++++++++++++++++++++++ Output the data for width limits (--data=width). Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. ++++++++++++++++++++++++++++++++++++++*/ void OutputWidthLimits(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax) { /* Use local variables so that the callback doesn't need to pass them backwards and forwards */ OSMNodes=nodes; OSMSegments=segments; OSMWays=ways; OSMRelations=relations; LatMin=latmin; LatMax=latmax; LonMin=lonmin; LonMax=lonmax; /* Iterate through the nodes and process them */ limit_type=WIDTH_LIMIT; find_all_nodes(nodes,(callback_t)output_limits); } /*++++++++++++++++++++++++++++++++++++++ Output the data for length limits (--data=length). Nodes *nodes The set of nodes to use. Segments *segments The set of segments to use. Ways *ways The set of ways to use. Relations *relations The set of relations to use. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. ++++++++++++++++++++++++++++++++++++++*/ void OutputLengthLimits(Nodes *nodes,Segments *segments,Ways *ways,Relations *relations,double latmin,double latmax,double lonmin,double lonmax) { /* Use local variables so that the callback doesn't need to pass them backwards and forwards */ OSMNodes=nodes; OSMSegments=segments; OSMWays=ways; OSMRelations=relations; LatMin=latmin; LatMax=latmax; LonMin=lonmin; LonMax=lonmax; /* Iterate through the nodes and process them */ limit_type=LENGTH_LIMIT; find_all_nodes(nodes,(callback_t)output_limits); } /*++++++++++++++++++++++++++++++++++++++ Process a single node and output those and connected segments that have a speed, weight, height, width or length limit change (called as a callback). index_t node The node to output. double latitude The latitude of the node. double longitude The longitude of the node. ++++++++++++++++++++++++++++++++++++++*/ static void output_limits(index_t node,double latitude,double longitude) { Node *nodep=LookupNode(OSMNodes,node,1); Segment *segmentp,segmentps[MAX_SEG_PER_NODE]; index_t segments[MAX_SEG_PER_NODE]; int limits[MAX_SEG_PER_NODE]; int count=0; int i,j,same=0; segmentp=FirstSegment(OSMSegments,nodep,1); do { if(IsNormalSegment(segmentp) && countway,1); segmentps[count]=*segmentp; segments [count]=IndexSegment(OSMSegments,segmentp); switch(limit_type) { case SPEED_LIMIT: limits[count]=wayp->speed; break; case WEIGHT_LIMIT: limits[count]=wayp->weight; break; case HEIGHT_LIMIT: limits[count]=wayp->height; break; case WIDTH_LIMIT: limits[count]=wayp->width; break; case LENGTH_LIMIT: limits[count]=wayp->length; break; } if(limits[count] || HIGHWAY(wayp->type)way,1); if(wayp->props&properties) { index_t othernode=OtherNode(segmentp,node); double lat,lon; GetLatLong(OSMNodes,othernode,NULL,&lat,&lon); if(node>othernode || (latLatMax || lonLonMax)) printf("segment%"Pindex_t" %.6f %.6f %.6f %.6f\n",IndexSegment(OSMSegments,segmentp),radians_to_degrees(latitude),radians_to_degrees(longitude),radians_to_degrees(lat),radians_to_degrees(lon)); } } segmentp=NextSegment(OSMSegments,segmentp,node); } while(segmentp); } /*++++++++++++++++++++++++++++++++++++++ A function to iterate through all nodes and call a callback function for each one. Nodes *nodes The set of nodes to use. callback_t callback The callback function for each node. ++++++++++++++++++++++++++++++++++++++*/ static void find_all_nodes(Nodes *nodes,callback_t callback) { ll_bin_t latminbin=latlong_to_bin(radians_to_latlong(LatMin))-nodes->file.latzero; ll_bin_t latmaxbin=latlong_to_bin(radians_to_latlong(LatMax))-nodes->file.latzero; ll_bin_t lonminbin=latlong_to_bin(radians_to_latlong(LonMin))-nodes->file.lonzero; ll_bin_t lonmaxbin=latlong_to_bin(radians_to_latlong(LonMax))-nodes->file.lonzero; ll_bin_t latb,lonb; index_t i,index1,index2; /* Loop through all of the nodes. */ if(latminbin<0) latminbin=0; if(latmaxbin>nodes->file.latbins) latmaxbin=nodes->file.latbins-1; if(lonminbin<0) lonminbin=0; if(lonmaxbin>nodes->file.lonbins) lonmaxbin=nodes->file.lonbins-1; for(latb=latminbin;latb<=latmaxbin;latb++) for(lonb=lonminbin;lonb<=lonmaxbin;lonb++) { ll_bin2_t llbin=lonb*nodes->file.latbins+latb; if(llbin<0 || llbin>(nodes->file.latbins*nodes->file.lonbins)) continue; index1=LookupNodeOffset(nodes,llbin); index2=LookupNodeOffset(nodes,llbin+1); for(i=index1;ifile.latzero+latb)+off_to_latlong(nodep->latoffset)); double lon=latlong_to_radians(bin_to_latlong(nodes->file.lonzero+lonb)+off_to_latlong(nodep->lonoffset)); if(lat>LatMin && latLonMin && lonfile.latzero; ll_bin_t latmaxbin=latlong_to_bin(radians_to_latlong(latmax))-errorlogs->file.latzero; ll_bin_t lonminbin=latlong_to_bin(radians_to_latlong(lonmin))-errorlogs->file.lonzero; ll_bin_t lonmaxbin=latlong_to_bin(radians_to_latlong(lonmax))-errorlogs->file.lonzero; ll_bin_t latb,lonb; index_t i,index1,index2; /* Loop through all of the error logs. */ for(latb=latminbin;latb<=latmaxbin;latb++) for(lonb=lonminbin;lonb<=lonmaxbin;lonb++) { ll_bin2_t llbin=lonb*errorlogs->file.latbins+latb; if(llbin<0 || llbin>(errorlogs->file.latbins*errorlogs->file.lonbins)) continue; index1=LookupErrorLogOffset(errorlogs,llbin); index2=LookupErrorLogOffset(errorlogs,llbin+1); if(index2>errorlogs->file.number_geo) index2=errorlogs->file.number_geo; for(i=index1;ifile.latzero+latb)+off_to_latlong(errorlogp->latoffset)); double lon=latlong_to_radians(bin_to_latlong(errorlogs->file.lonzero+lonb)+off_to_latlong(errorlogp->lonoffset)); if(lat>latmin && latlonmin && lon. ***************************************/ #ifndef PRUNEX_H #define PRUNEX_H /*+ To stop multiple inclusions. +*/ #include "types.h" #include "typesx.h" /* Functions in prunex.c */ void StartPruning(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx); void FinishPruning(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx); void PruneIsolatedRegions(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx,distance_t minimum); void PruneShortSegments(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx,distance_t minimum); void PruneStraightHighwayNodes(NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx,distance_t maximum); #endif /* PRUNEX_H */ routino-3.2/src/files.c 644 233 144 57621 12563634053 10324 0/*************************************** Functions to handle files. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #if defined(_MSC_VER) #include #include #define read(fd,address,length) _read(fd,address,(unsigned int)(length)) #define write(fd,address,length) _write(fd,address,(unsigned int)(length)) #define open _open #define close _close #define unlink _unlink #define ssize_t SSIZE_T #else #include #endif #include #include #include #include #include #include #if defined(_MSC_VER) || defined(__MINGW32__) #undef lseek #undef stat #undef fstat #define lseek _lseeki64 #define stat _stati64 #define fstat _fstati64 #endif #if defined(_MSC_VER) || defined(__MINGW32__) #include "mman-win32.h" #else #include #endif #include #include "files.h" /*+ A structure to contain the list of memory mapped files. +*/ struct mmapinfo { const char *filename; /*+ The name of the file (the index of the list). +*/ int fd; /*+ The file descriptor used when it was opened. +*/ char *address; /*+ The address the file was mapped to. +*/ size_t length; /*+ The length of the file. +*/ }; /*+ The list of memory mapped files. +*/ static struct mmapinfo *mappedfiles; /*+ The number of mapped files. +*/ static int nmappedfiles=0; #define BUFFLEN 4096 /*+ A structure to contain the list of file buffers. +*/ struct filebuffer { char buffer[BUFFLEN]; /*+ The data buffer. +*/ size_t pointer; /*+ The read/write pointer for the file buffer. +*/ size_t length; /*+ The read pointer for the file buffer. +*/ int reading; /*+ A flag to indicate if the file is for reading. +*/ }; /*+ The list of file buffers. +*/ static struct filebuffer **filebuffers=NULL; /*+ The number of allocated file buffer pointers. +*/ static int nfilebuffers=0; #if defined(_MSC_VER) || defined(__MINGW32__) /*+ A structure to contain the list of opened files to record which are to be deleted when closed. +*/ struct openedfile { const char *filename; /*+ The name of the file. +*/ int delete; /*+ Set to non-zero value if the file is to be deleted when closed. +*/ }; /*+ The list of opened files. +*/ static struct openedfile **openedfiles=NULL; /*+ The number of allocated opened file buffer pointers. +*/ static int nopenedfiles=0; #endif /* Local functions */ static void CreateFileBuffer(int fd,int read_write); #if defined(_MSC_VER) || defined(__MINGW32__) static void CreateOpenedFile(int fd,const char *filename); #endif /*++++++++++++++++++++++++++++++++++++++ Return a filename composed of the dirname, prefix and name. char *FileName Returns a pointer to memory allocated to the filename. const char *dirname The directory name. const char *prefix The file prefix. const char *name The main part of the name. ++++++++++++++++++++++++++++++++++++++*/ char *FileName(const char *dirname,const char *prefix, const char *name) { char *filename=(char*)malloc((dirname?strlen(dirname):0)+1+(prefix?strlen(prefix):0)+1+strlen(name)+1); sprintf(filename,"%s%s%s%s%s",dirname?dirname:"",dirname?"/":"",prefix?prefix:"",prefix?"-":"",name); return(filename); } /*++++++++++++++++++++++++++++++++++++++ Open a file read-only and map it into memory. void *MapFile Returns the address of the file or exits in case of an error. const char *filename The name of the file to open. ++++++++++++++++++++++++++++++++++++++*/ void *MapFile(const char *filename) { int fd; struct stat buf; offset_t size; void *address; /* Open the file */ #if defined(_MSC_VER) || defined(__MINGW32__) fd=open(filename,O_RDONLY|O_BINARY|O_RANDOM); #else fd=open(filename,O_RDONLY); #endif if(fd<0) { #ifdef LIBROUTINO return(NULL); #else fprintf(stderr,"Cannot open file '%s' for reading [%s].\n",filename,strerror(errno)); exit(EXIT_FAILURE); #endif } /* Get its size */ if(stat(filename,&buf)) { #ifdef LIBROUTINO return(NULL); #else fprintf(stderr,"Cannot stat file '%s' [%s].\n",filename,strerror(errno)); exit(EXIT_FAILURE); #endif } size=buf.st_size; /* Map the file */ address=mmap(NULL,size,PROT_READ,MAP_SHARED,fd,0); if(address==MAP_FAILED) { close(fd); #ifdef LIBROUTINO return(NULL); #else fprintf(stderr,"Cannot mmap file '%s' for reading [%s].\n",filename,strerror(errno)); exit(EXIT_FAILURE); #endif } #ifndef LIBROUTINO log_mmap(size); #endif /* Store the information about the mapped file */ mappedfiles=(struct mmapinfo*)realloc((void*)mappedfiles,(nmappedfiles+1)*sizeof(struct mmapinfo)); mappedfiles[nmappedfiles].filename=filename; mappedfiles[nmappedfiles].fd=fd; mappedfiles[nmappedfiles].address=address; mappedfiles[nmappedfiles].length=size; nmappedfiles++; return(address); } /*++++++++++++++++++++++++++++++++++++++ Open a file read-write and map it into memory. void *MapFileWriteable Returns the address of the file or exits in case of an error. const char *filename The name of the file to open. ++++++++++++++++++++++++++++++++++++++*/ void *MapFileWriteable(const char *filename) { int fd; struct stat buf; offset_t size; void *address; /* Open the file */ #if defined(_MSC_VER) || defined(__MINGW32__) fd=open(filename,O_RDWR|O_BINARY|O_RANDOM); #else fd=open(filename,O_RDWR); #endif if(fd<0) { #ifdef LIBROUTINO return(NULL); #else fprintf(stderr,"Cannot open file '%s' for reading and writing [%s].\n",filename,strerror(errno)); exit(EXIT_FAILURE); #endif } /* Get its size */ if(stat(filename,&buf)) { #ifdef LIBROUTINO return(NULL); #else fprintf(stderr,"Cannot stat file '%s' [%s].\n",filename,strerror(errno)); exit(EXIT_FAILURE); #endif } size=buf.st_size; /* Map the file */ address=mmap(NULL,size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); if(address==MAP_FAILED) { close(fd); #ifdef LIBROUTINO return(NULL); #else fprintf(stderr,"Cannot mmap file '%s' for reading and writing [%s].\n",filename,strerror(errno)); exit(EXIT_FAILURE); #endif } #ifndef LIBROUTINO log_mmap(size); #endif /* Store the information about the mapped file */ mappedfiles=(struct mmapinfo*)realloc((void*)mappedfiles,(nmappedfiles+1)*sizeof(struct mmapinfo)); mappedfiles[nmappedfiles].filename=filename; mappedfiles[nmappedfiles].fd=fd; mappedfiles[nmappedfiles].address=address; mappedfiles[nmappedfiles].length=size; nmappedfiles++; return(address); } /*++++++++++++++++++++++++++++++++++++++ Unmap a file and close it. void *UnmapFile Returns NULL (for similarity to the MapFile function). const void *address The address of the mapped file in memory. ++++++++++++++++++++++++++++++++++++++*/ void *UnmapFile(const void *address) { int i; for(i=0;ii) memmove(&mappedfiles[i],&mappedfiles[i+1],(nmappedfiles-i)*sizeof(struct mmapinfo)); return(NULL); } /*++++++++++++++++++++++++++++++++++++++ Open an existing file on disk for reading. int SlimMapFile Returns the file descriptor if OK or exits in case of an error. const char *filename The name of the file to open. ++++++++++++++++++++++++++++++++++++++*/ int SlimMapFile(const char *filename) { int fd; /* Open the file */ #if defined(_MSC_VER) || defined(__MINGW32__) fd=open(filename,O_RDONLY|O_BINARY|O_RANDOM); #else fd=open(filename,O_RDONLY); #endif if(fd<0) { #ifdef LIBROUTINO return(-1); #else fprintf(stderr,"Cannot open file '%s' for reading [%s].\n",filename,strerror(errno)); exit(EXIT_FAILURE); #endif } CreateFileBuffer(fd,0); return(fd); } /*++++++++++++++++++++++++++++++++++++++ Open an existing file on disk for reading or writing. int SlimMapFileWriteable Returns the file descriptor if OK or exits in case of an error. const char *filename The name of the file to open. ++++++++++++++++++++++++++++++++++++++*/ int SlimMapFileWriteable(const char *filename) { int fd; /* Open the file */ #if defined(_MSC_VER) || defined(__MINGW32__) fd=open(filename,O_RDWR|O_BINARY|O_RANDOM); #else fd=open(filename,O_RDWR); #endif if(fd<0) { #ifdef LIBROUTINO return(-1); #else fprintf(stderr,"Cannot open file '%s' for reading and writing [%s].\n",filename,strerror(errno)); exit(EXIT_FAILURE); #endif } CreateFileBuffer(fd,0); return(fd); } /*++++++++++++++++++++++++++++++++++++++ Close a file on disk. int SlimUnmapFile returns -1 (for similarity to the UnmapFile function). int fd The file descriptor to close. ++++++++++++++++++++++++++++++++++++++*/ int SlimUnmapFile(int fd) { close(fd); return(-1); } /*++++++++++++++++++++++++++++++++++++++ Open a new file on disk for writing (with buffering). int OpenFileBufferedNew Returns the file descriptor if OK or exits in case of an error. const char *filename The name of the file to create. ++++++++++++++++++++++++++++++++++++++*/ int OpenFileBufferedNew(const char *filename) { int fd; /* Open the file */ #if defined(_MSC_VER) || defined(__MINGW32__) fd=open(filename,O_WRONLY|O_CREAT|O_TRUNC|O_BINARY|O_RANDOM,S_IREAD|S_IWRITE); #else fd=open(filename,O_WRONLY|O_CREAT|O_TRUNC ,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH); #endif if(fd<0) { #ifdef LIBROUTINO return(-1); #else fprintf(stderr,"Cannot open file '%s' for writing [%s].\n",filename,strerror(errno)); exit(EXIT_FAILURE); #endif } CreateFileBuffer(fd,-1); #if defined(_MSC_VER) || defined(__MINGW32__) CreateOpenedFile(fd,filename); #endif return(fd); } /*++++++++++++++++++++++++++++++++++++++ Open a new or existing file on disk for appending (with buffering). int OpenFileBufferedAppend Returns the file descriptor if OK or exits in case of an error. const char *filename The name of the file to create or open. ++++++++++++++++++++++++++++++++++++++*/ int OpenFileBufferedAppend(const char *filename) { int fd; /* Open the file */ #if defined(_MSC_VER) || defined(__MINGW32__) fd=open(filename,O_WRONLY|O_CREAT|O_APPEND|O_BINARY|O_RANDOM,S_IREAD|S_IWRITE); #else fd=open(filename,O_WRONLY|O_CREAT|O_APPEND ,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH); #endif if(fd<0) { #ifdef LIBROUTINO return(-1); #else fprintf(stderr,"Cannot open file '%s' for appending [%s].\n",filename,strerror(errno)); exit(EXIT_FAILURE); #endif } CreateFileBuffer(fd,-1); #if defined(_MSC_VER) || defined(__MINGW32__) CreateOpenedFile(fd,filename); #endif return(fd); } /*++++++++++++++++++++++++++++++++++++++ Open an existing file on disk for reading (with buffering). int ReOpenFileBuffered Returns the file descriptor if OK or exits in case of an error. const char *filename The name of the file to open. ++++++++++++++++++++++++++++++++++++++*/ int ReOpenFileBuffered(const char *filename) { int fd; /* Open the file */ #if defined(_MSC_VER) || defined(__MINGW32__) fd=open(filename,O_RDONLY|O_BINARY|O_RANDOM); #else fd=open(filename,O_RDONLY); #endif if(fd<0) { #ifdef LIBROUTINO return(-1); #else fprintf(stderr,"Cannot open file '%s' for reading [%s].\n",filename,strerror(errno)); exit(EXIT_FAILURE); #endif } CreateFileBuffer(fd,1); #if defined(_MSC_VER) || defined(__MINGW32__) CreateOpenedFile(fd,filename); #endif return(fd); } /*++++++++++++++++++++++++++++++++++++++ Open an existing file on disk for reading (with buffering), delete it and open a new file on disk for writing (with buffering). int ReplaceFileBuffered Returns the file descriptor of the new writable file. const char *filename The name of the file to open, delete and replace. int *oldfd Returns the file descriptor of the old, readable file. ++++++++++++++++++++++++++++++++++++++*/ int ReplaceFileBuffered(const char *filename,int *oldfd) { int newfd; #if defined(_MSC_VER) || defined(__MINGW32__) char *filename2; filename2=strcpy(malloc(strlen(filename)+2),filename); strcat(filename2,"2"); RenameFile(filename,filename2); *oldfd=ReOpenFileBuffered(filename2); DeleteFile(filename2); #else *oldfd=ReOpenFileBuffered(filename); DeleteFile(filename); #endif newfd=OpenFileBufferedNew(filename); return(newfd); } /*++++++++++++++++++++++++++++++++++++++ Write data to a file descriptor (via a buffer). int WriteFileBuffered Returns 0 if OK or something else in case of an error. int fd The file descriptor to write to. const void *address The address of the data to be written. size_t length The length of data to write. ++++++++++++++++++++++++++++++++++++++*/ int WriteFileBuffered(int fd,const void *address,size_t length) { #ifndef LIBROUTINO logassert(fd!=-1,"File descriptor is in error - report a bug"); logassert(fdreading,"File descriptor was not opened for writing - report a bug"); #endif /* Write the data */ if((filebuffers[fd]->pointer+length)>BUFFLEN) { if(write(fd,filebuffers[fd]->buffer,filebuffers[fd]->pointer)!=(ssize_t)filebuffers[fd]->pointer) return(-1); filebuffers[fd]->pointer=0; } if(length>=BUFFLEN) { if(write(fd,address,length)!=(ssize_t)length) return(-1); return(0); } memcpy(filebuffers[fd]->buffer+filebuffers[fd]->pointer,address,length); filebuffers[fd]->pointer+=length; return(0); } /*++++++++++++++++++++++++++++++++++++++ Read data from a file descriptor (via a buffer). int ReadFileBuffered Returns 0 if OK or something else in case of an error. int fd The file descriptor to read from. void *address The address the data is to be read into. size_t length The length of data to read. ++++++++++++++++++++++++++++++++++++++*/ int ReadFileBuffered(int fd,void *address,size_t length) { #ifndef LIBROUTINO logassert(fd!=-1,"File descriptor is in error - report a bug"); logassert(fdreading,"File descriptor was not opened for reading - report a bug"); #endif /* Read the data */ if((filebuffers[fd]->pointer+length)>filebuffers[fd]->length) if(filebuffers[fd]->pointerlength) { memcpy(address,filebuffers[fd]->buffer+filebuffers[fd]->pointer,filebuffers[fd]->length-filebuffers[fd]->pointer); address=(char*)address+filebuffers[fd]->length-filebuffers[fd]->pointer; length-=filebuffers[fd]->length-filebuffers[fd]->pointer; filebuffers[fd]->pointer=0; filebuffers[fd]->length=0; } if(length>=BUFFLEN) { if(read(fd,address,length)!=(ssize_t)length) return(-1); return(0); } if(filebuffers[fd]->pointer==filebuffers[fd]->length) { ssize_t len=read(fd,filebuffers[fd]->buffer,BUFFLEN); if(len<=0) return(-1); filebuffers[fd]->length=len; filebuffers[fd]->pointer=0; } if(filebuffers[fd]->length==0) return(-1); memcpy(address,filebuffers[fd]->buffer+filebuffers[fd]->pointer,length); filebuffers[fd]->pointer+=length; return(0); } /*++++++++++++++++++++++++++++++++++++++ Seek to a position in a file descriptor that uses a buffer. int SeekFileBuffered Returns 0 if OK or something else in case of an error. int fd The file descriptor to seek within. offset_t position The position to seek to. ++++++++++++++++++++++++++++++++++++++*/ int SeekFileBuffered(int fd,offset_t position) { #ifndef LIBROUTINO logassert(fd!=-1,"File descriptor is in error - report a bug"); logassert(fdreading) if(write(fd,filebuffers[fd]->buffer,filebuffers[fd]->pointer)!=(ssize_t)filebuffers[fd]->pointer) return(-1); filebuffers[fd]->pointer=0; filebuffers[fd]->length=0; if(lseek(fd,position,SEEK_SET)!=position) return(-1); return(0); } /*++++++++++++++++++++++++++++++++++++++ Skip forward by an offset in a file descriptor that uses a buffer. int SkipFileBuffered Returns 0 if OK or something else in case of an error. int fd The file descriptor to skip within. offset_t skip The amount to skip forward. ++++++++++++++++++++++++++++++++++++++*/ int SkipFileBuffered(int fd,offset_t skip) { #ifndef LIBROUTINO logassert(fd!=-1,"File descriptor is in error - report a bug"); logassert(fdreading,"File descriptor was not opened for reading - report a bug"); #endif /* Skip the data - needs to be optimised */ if((filebuffers[fd]->pointer+skip)>filebuffers[fd]->length) { skip-=(offset_t)(filebuffers[fd]->length-filebuffers[fd]->pointer); filebuffers[fd]->pointer=0; filebuffers[fd]->length=0; if(lseek(fd,skip,SEEK_CUR)==-1) return(-1); } else filebuffers[fd]->pointer+=skip; return(0); } /*++++++++++++++++++++++++++++++++++++++ Get the size of a file. offset_t SizeFile Returns the file size if OK or exits in case of an error. const char *filename The name of the file to check. ++++++++++++++++++++++++++++++++++++++*/ offset_t SizeFile(const char *filename) { struct stat buf; if(stat(filename,&buf)) { #ifdef LIBROUTINO return(-1); #else fprintf(stderr,"Cannot stat file '%s' [%s].\n",filename,strerror(errno)); exit(EXIT_FAILURE); #endif } return(buf.st_size); } /*++++++++++++++++++++++++++++++++++++++ Get the size of a file from a file descriptor. offset_t SizeFileFD Returns the file size if OK or exits in case of an error. int fd The file descriptor to check. ++++++++++++++++++++++++++++++++++++++*/ offset_t SizeFileFD(int fd) { struct stat buf; if(fstat(fd,&buf)) { #ifdef LIBROUTINO return(-1); #else fprintf(stderr,"Cannot stat file descriptor '%d' [%s].\n",fd,strerror(errno)); exit(EXIT_FAILURE); #endif } return(buf.st_size); } /*++++++++++++++++++++++++++++++++++++++ Check if a file exists. int ExistsFile Returns 1 if the file exists and 0 if not. const char *filename The name of the file to check. ++++++++++++++++++++++++++++++++++++++*/ int ExistsFile(const char *filename) { struct stat buf; if(stat(filename,&buf)) return(0); else return(1); } /*++++++++++++++++++++++++++++++++++++++ Close a file on disk (and flush the buffer). int CloseFileBuffered returns -1 (for similarity to the *OpenFileBuffered* functions). int fd The file descriptor to close. ++++++++++++++++++++++++++++++++++++++*/ int CloseFileBuffered(int fd) { #ifndef LIBROUTINO logassert(fdreading) if(write(fd,filebuffers[fd]->buffer,filebuffers[fd]->pointer)!=(ssize_t)filebuffers[fd]->pointer) return(-1); close(fd); free(filebuffers[fd]); filebuffers[fd]=NULL; #if defined(_MSC_VER) || defined(__MINGW32__) #ifndef LIBROUTINO logassert(fddelete) unlink(openedfiles[fd]->filename); free(openedfiles[fd]); openedfiles[fd]=NULL; #endif return(-1); } /*++++++++++++++++++++++++++++++++++++++ Open an existing file on disk for reading (in a simple mode). int OpenFile Returns the file descriptor if OK or exits in case of an error. const char *filename The name of the file to open. ++++++++++++++++++++++++++++++++++++++*/ int OpenFile(const char *filename) { int fd; /* Open the file */ #if defined(_MSC_VER) || defined(__MINGW32__) fd=open(filename,O_RDONLY|O_BINARY|O_RANDOM); #else fd=open(filename,O_RDONLY); #endif if(fd<0) { #ifdef LIBROUTINO return(-1); #else fprintf(stderr,"Cannot open file '%s' for reading [%s].\n",filename,strerror(errno)); exit(EXIT_FAILURE); #endif } #if defined(_MSC_VER) || defined(__MINGW32__) CreateOpenedFile(fd,filename); #endif return(fd); } /*++++++++++++++++++++++++++++++++++++++ Close a file on disk (that was opened in simple mode). int fd The file descriptor to close. ++++++++++++++++++++++++++++++++++++++*/ void CloseFile(int fd) { close(fd); #if defined(_MSC_VER) || defined(__MINGW32__) #ifndef LIBROUTINO logassert(fddelete) unlink(openedfiles[fd]->filename); free(openedfiles[fd]); openedfiles[fd]=NULL; #endif } /*++++++++++++++++++++++++++++++++++++++ Delete a file from disk. int DeleteFile Returns 0 if OK. const char *filename The name of the file to delete. ++++++++++++++++++++++++++++++++++++++*/ int DeleteFile(const char *filename) { #if defined(_MSC_VER) || defined(__MINGW32__) int fd; for(fd=0;fdfilename,filename)) { openedfiles[fd]->delete=1; return(0); } #endif unlink(filename); return(0); } /*++++++++++++++++++++++++++++++++++++++ Rename a file on disk. int RenameFile Returns 0 if OK. const char *oldfilename The old name of the file before renaming. const char *newfilename The new name of the file after renaming. ++++++++++++++++++++++++++++++++++++++*/ int RenameFile(const char *oldfilename,const char *newfilename) { rename(oldfilename,newfilename); return(0); } /*++++++++++++++++++++++++++++++++++++++ Create a file buffer. int fd The file descriptor. int read_write A flag set to 1 for reading, -1 for writing and 0 for unbuffered. ++++++++++++++++++++++++++++++++++++++*/ static void CreateFileBuffer(int fd,int read_write) { if(nfilebuffers<=fd) { int i; filebuffers=(struct filebuffer**)realloc((void*)filebuffers,(fd+1)*sizeof(struct filebuffer*)); for(i=nfilebuffers;i<=fd;i++) filebuffers[i]=NULL; nfilebuffers=fd+1; } if(read_write) { filebuffers[fd]=(struct filebuffer*)calloc(sizeof(struct filebuffer),1); filebuffers[fd]->reading=(read_write==1); } } #if defined(_MSC_VER) || defined(__MINGW32__) /*++++++++++++++++++++++++++++++++++++++ Create an opened file record. int fd The file descriptor. const char *filename The name of the file. ++++++++++++++++++++++++++++++++++++++*/ static void CreateOpenedFile(int fd,const char *filename) { if(nopenedfiles<=fd) { int i; openedfiles=(struct openedfile**)realloc((void*)openedfiles,(fd+1)*sizeof(struct openedfile*)); for(i=nopenedfiles;i<=fd;i++) openedfiles[i]=NULL; nopenedfiles=fd+1; } openedfiles[fd]=(struct openedfile*)calloc(sizeof(struct openedfile),1); openedfiles[fd]->filename=strcpy(malloc(strlen(filename)+1),filename); openedfiles[fd]->delete=0; } #endif routino-3.2/src/osmparser.c 644 233 144 101702 12563633051 11240 0/*************************************** OSM file parser (either JOSM or planet) Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include #include "types.h" #include "typesx.h" #include "nodesx.h" #include "waysx.h" #include "relationsx.h" #include "osmparser.h" #include "tagging.h" #include "logging.h" /* Macros */ /*+ Checks if a value in the XML is one of the allowed values for true. +*/ #define ISTRUE(xx) (!strcmp(xx,"true") || !strcmp(xx,"yes") || !strcmp(xx,"1")) /*+ Checks if a value in the XML is one of the allowed values for false. +*/ #define ISFALSE(xx) (!strcmp(xx,"false") || !strcmp(xx,"no") || !strcmp(xx,"0")) /* Local parsing variables (re-initialised for each file) */ static NodesX *nodes; static WaysX *ways; static RelationsX *relations; static node_t *way_nodes; static int way_nnodes; static node_t *relation_nodes; static int relation_nnodes; static way_t *relation_ways; static int relation_nways; static relation_t *relation_relations; static int relation_nrelations; static way_t relation_from; static way_t relation_to; static node_t relation_via; /* Local parsing functions */ static double parse_speed(way_t id,const char *k,const char *v); static double parse_weight(way_t id,const char *k,const char *v); static double parse_length(way_t id,const char *k,const char *v); /*++++++++++++++++++++++++++++++++++++++ Initialise the OSM parser by initialising the local variables. NodesX *OSMNodes The data structure of nodes to fill in. WaysX *OSMWays The data structure of ways to fill in. RelationsX *OSMRelations The data structure of relations to fill in. ++++++++++++++++++++++++++++++++++++++*/ void InitialiseParser(NodesX *OSMNodes,WaysX *OSMWays,RelationsX *OSMRelations) { /* Copy the function parameters and initialise the variables */ nodes=OSMNodes; ways=OSMWays; relations=OSMRelations; way_nodes=(node_t*)malloc(256*sizeof(node_t)); relation_nodes =(node_t *)malloc(256*sizeof(node_t)); relation_ways =(way_t *)malloc(256*sizeof(way_t)); relation_relations=(relation_t*)malloc(256*sizeof(relation_t)); } /*++++++++++++++++++++++++++++++++++++++ Clean up the memory after parsing. ++++++++++++++++++++++++++++++++++++++*/ void CleanupParser(void) { /* Free the variables */ free(way_nodes); free(relation_nodes); free(relation_ways); free(relation_relations); } /*++++++++++++++++++++++++++++++++++++++ Add node references to a way. int64_t node_id The node ID to add or zero to clear the list. ++++++++++++++++++++++++++++++++++++++*/ void AddWayRefs(int64_t node_id) { if(node_id==0) way_nnodes=0; else { node_t id; if(way_nnodes && (way_nnodes%256)==0) way_nodes=(node_t*)realloc((void*)way_nodes,(way_nnodes+256)*sizeof(node_t)); id=(node_t)node_id; logassert((int64_t)id==node_id,"Node ID too large (change node_t to 64-bits?)"); /* check node id can be stored in node_t data type. */ way_nodes[way_nnodes++]=id; } } /*++++++++++++++++++++++++++++++++++++++ Add node, way or relation references to a relation. int64_t node_id The node ID to add or zero if it is not a node. int64_t way_id The way ID to add or zero if it is not a way. int64_t relation_id The relation ID to add or zero if it is not a relation. const char *role The role played by this referenced item or NULL. If all of node_id, way_id and relation_id are zero then the list is cleared. ++++++++++++++++++++++++++++++++++++++*/ void AddRelationRefs(int64_t node_id,int64_t way_id,int64_t relation_id,const char *role) { if(node_id==0 && way_id==0 && relation_id==0) { relation_nnodes=0; relation_nways=0; relation_nrelations=0; relation_from=NO_WAY_ID; relation_via=NO_NODE_ID; relation_to=NO_WAY_ID; } else if(node_id!=0) { node_t id; id=(node_t)node_id; logassert((int64_t)id==node_id,"Node ID too large (change node_t to 64-bits?)"); /* check node id can be stored in node_t data type. */ if(relation_nnodes && (relation_nnodes%256)==0) relation_nodes=(node_t*)realloc((void*)relation_nodes,(relation_nnodes+256)*sizeof(node_t)); relation_nodes[relation_nnodes++]=id; if(role) { if(!strcmp(role,"via")) relation_via=id; } } else if(way_id!=0) { way_t id; id=(way_t)way_id; logassert((int64_t)id==way_id,"Way ID too large (change way_t to 64-bits?)"); /* check way id can be stored in way_t data type. */ if(relation_nways && (relation_nways%256)==0) relation_ways=(way_t*)realloc((void*)relation_ways,(relation_nways+256)*sizeof(way_t)); relation_ways[relation_nways++]=id; if(role) { if(!strcmp(role,"from")) relation_from=id; else if(!strcmp(role,"to")) relation_to=id; } } else /* if(relation_id!=0) */ { relation_t id; id=(relation_t)relation_id; logassert((int64_t)id==relation_id,"Relation ID too large (change relation_t to 64-bits?)"); /* check relation id can be stored in relation_t data type. */ if(relation_nrelations && (relation_nrelations%256)==0) relation_relations=(relation_t*)realloc((void*)relation_relations,(relation_nrelations+256)*sizeof(relation_t)); relation_relations[relation_nrelations++]=relation_id; } } /*++++++++++++++++++++++++++++++++++++++ Process the tags associated with a node. TagList *tags The list of node tags. int64_t node_id The id of the node. double latitude The latitude of the node. double longitude The longitude of the node. int mode The mode of operation to take (create, modify, delete). ++++++++++++++++++++++++++++++++++++++*/ void ProcessNodeTags(TagList *tags,int64_t node_id,double latitude,double longitude,int mode) { transports_t allow=Transports_ALL; nodeflags_t flags=0; node_t id; int i; /* Convert id */ id=(node_t)node_id; logassert((int64_t)id==node_id,"Node ID too large (change node_t to 64-bits?)"); /* check node id can be stored in node_t data type. */ /* Delete */ if(mode==MODE_DELETE) { AppendNodeList(nodes,id,degrees_to_radians(latitude),degrees_to_radians(longitude),allow,NODE_DELETED); return; } /* Parse the tags */ for(i=0;intags;i++) { int recognised=0; char *k=tags->k[i]; char *v=tags->v[i]; switch(*k) { case 'b': if(!strcmp(k,"bicycle")) { if(ISFALSE(v)) allow&=~Transports_Bicycle; else if(!ISTRUE(v)) logerror("Node %"Pnode_t" has an unrecognised tag 'bicycle' = '%s' (after tagging rules); using 'yes'.\n",logerror_node(id),v); recognised=1; break; } break; case 'f': if(!strcmp(k,"foot")) { if(ISFALSE(v)) allow&=~Transports_Foot; else if(!ISTRUE(v)) logerror("Node %"Pnode_t" has an unrecognised tag 'foot' = '%s' (after tagging rules); using 'yes'.\n",logerror_node(id),v); recognised=1; break; } break; case 'g': if(!strcmp(k,"goods")) { if(ISFALSE(v)) allow&=~Transports_Goods; else if(!ISTRUE(v)) logerror("Node %"Pnode_t" has an unrecognised tag 'goods' = '%s' (after tagging rules); using 'yes'.\n",logerror_node(id),v); recognised=1; break; } break; case 'h': if(!strcmp(k,"horse")) { if(ISFALSE(v)) allow&=~Transports_Horse; else if(!ISTRUE(v)) logerror("Node %"Pnode_t" has an unrecognised tag 'horse' = '%s' (after tagging rules); using 'yes'.\n",logerror_node(id),v); recognised=1; break; } if(!strcmp(k,"hgv")) { if(ISFALSE(v)) allow&=~Transports_HGV; else if(!ISTRUE(v)) logerror("Node %"Pnode_t" has an unrecognised tag 'hgv' = '%s' (after tagging rules); using 'yes'.\n",logerror_node(id),v); recognised=1; break; } break; case 'm': if(!strcmp(k,"moped")) { if(ISFALSE(v)) allow&=~Transports_Moped; else if(!ISTRUE(v)) logerror("Node %"Pnode_t" has an unrecognised tag 'moped' = '%s' (after tagging rules); using 'yes'.\n",logerror_node(id),v); recognised=1; break; } if(!strcmp(k,"motorcycle")) { if(ISFALSE(v)) allow&=~Transports_Motorcycle; else if(!ISTRUE(v)) logerror("Node %"Pnode_t" has an unrecognised tag 'motorcycle' = '%s' (after tagging rules); using 'yes'.\n",logerror_node(id),v); recognised=1; break; } if(!strcmp(k,"motorcar")) { if(ISFALSE(v)) allow&=~Transports_Motorcar; else if(!ISTRUE(v)) logerror("Node %"Pnode_t" has an unrecognised tag 'motorcar' = '%s' (after tagging rules); using 'yes'.\n",logerror_node(id),v); recognised=1; break; } break; case 'p': if(!strcmp(k,"psv")) { if(ISFALSE(v)) allow&=~Transports_PSV; else if(!ISTRUE(v)) logerror("Node %"Pnode_t" has an unrecognised tag 'psv' = '%s' (after tagging rules); using 'yes'.\n",logerror_node(id),v); recognised=1; break; } break; case 'r': if(!strcmp(k,"roundabout")) { if(ISTRUE(v)) flags|=NODE_MINIRNDBT; else logerror("Node %"Pnode_t" has an unrecognised tag 'roundabout' = '%s' (after tagging rules); using 'no'.\n",id,v); recognised=1; break; } break; case 'w': if(!strcmp(k,"wheelchair")) { if(ISFALSE(v)) allow&=~Transports_Wheelchair; else if(!ISTRUE(v)) logerror("Node %"Pnode_t" has an unrecognised tag 'wheelchair' = '%s' (after tagging rules); using 'yes'.\n",logerror_node(id),v); recognised=1; break; } break; default: break; } if(!recognised) logerror("Node %"Pnode_t" has an unrecognised tag '%s' = '%s' (after tagging rules); ignoring it.\n",logerror_node(id),k,v); } /* Create the node */ AppendNodeList(nodes,id,degrees_to_radians(latitude),degrees_to_radians(longitude),allow,flags); } /*++++++++++++++++++++++++++++++++++++++ Process the tags associated with a way. TagList *tags The list of way tags. int64_t way_id The id of the way. int mode The mode of operation to take (create, modify, delete). ++++++++++++++++++++++++++++++++++++++*/ void ProcessWayTags(TagList *tags,int64_t way_id,int mode) { Way way={0}; int oneway=0,area=0; int roundabout=0,lanes=0,cyclebothways=0; char *name=NULL,*ref=NULL,*refname=NULL; way_t id; int i; /* Convert id */ id=(way_t)way_id; logassert((int64_t)id==way_id,"Way ID too large (change way_t to 64-bits?)"); /* check way id can be stored in way_t data type. */ /* Delete */ if(mode==MODE_DELETE || mode==MODE_MODIFY) { way.type=WAY_DELETED; AppendWayList(ways,id,&way,way_nodes,way_nnodes,""); } if(mode==MODE_DELETE) return; /* Sanity check */ if(way_nnodes==0) { logerror("Way %"Pway_t" has no nodes.\n",logerror_way(id)); return; } if(way_nnodes==1) { logerror_node(way_nodes[0]); /* Extra logerror information since way isn't stored */ logerror("Way %"Pway_t" has only one node.\n",logerror_way(id)); return; } /* Parse the tags - just look for highway */ for(i=0;intags;i++) { char *k=tags->k[i]; char *v=tags->v[i]; if(!strcmp(k,"highway")) { way.type=HighwayType(v); if(way.type==Highway_None) logerror("Way %"Pway_t" has an unrecognised highway type '%s' (after tagging rules); ignoring it.\n",logerror_way(id),v); break; } } /* Don't continue if this is not a highway (bypass error logging) */ if(way.type==Highway_None) return; /* Parse the tags - look for the others */ for(i=0;intags;i++) { int recognised=0; char *k=tags->k[i]; char *v=tags->v[i]; switch(*k) { case 'a': if(!strcmp(k,"area")) { if(ISTRUE(v)) area=1; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'area' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } break; case 'b': if(!strcmp(k,"bicycle")) { if(ISTRUE(v)) way.allow|=Transports_Bicycle; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'bicycle' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } if(!strcmp(k,"bicycleroute")) { if(ISTRUE(v)) way.props|=Properties_BicycleRoute; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'bicycleroute' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } if(!strcmp(k,"bridge")) { if(ISTRUE(v)) way.props|=Properties_Bridge; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'bridge' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } break; case 'c': if(!strcmp(k,"cyclebothways")) { if(ISTRUE(v)) cyclebothways=1; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'cyclebothways' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } break; case 'f': if(!strcmp(k,"foot")) { if(ISTRUE(v)) way.allow|=Transports_Foot; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'foot' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } if(!strcmp(k,"footroute")) { if(ISTRUE(v)) way.props|=Properties_FootRoute; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'footroute' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } break; case 'g': if(!strcmp(k,"goods")) { if(ISTRUE(v)) way.allow|=Transports_Goods; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'goods' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } break; case 'h': if(!strcmp(k,"highway")) {recognised=1; break;} if(!strcmp(k,"horse")) { if(ISTRUE(v)) way.allow|=Transports_Horse; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'horse' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } if(!strcmp(k,"hgv")) { if(ISTRUE(v)) way.allow|=Transports_HGV; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'hgv' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } break; case 'l': if(!strcmp(k,"lanes")) { int en=0; float lanesf; if(sscanf(v,"%f%n",&lanesf,&en)==1 && en && !v[en]) lanes=(int)lanesf; else logerror("Way %"Pway_t" has an unrecognised tag 'lanes' = '%s' (after tagging rules); ignoring it.\n",logerror_way(id),v); recognised=1; break; } break; case 'm': if(!strncmp(k,"max",3)) { if(!strcmp(k+3,"speed")) { way.speed=kph_to_speed(parse_speed(id,k,v)); recognised=1; break; } if(!strcmp(k+3,"weight")) { way.weight=tonnes_to_weight(parse_weight(id,k,v)); recognised=1; break; } if(!strcmp(k+3,"height")) { way.height=metres_to_height(parse_length(id,k,v)); recognised=1; break; } if(!strcmp(k+3,"width")) { way.width=metres_to_height(parse_length(id,k,v)); recognised=1; break; } if(!strcmp(k+3,"length")) { way.length=metres_to_height(parse_length(id,k,v)); recognised=1; break; } } if(!strcmp(k,"moped")) { if(ISTRUE(v)) way.allow|=Transports_Moped; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'moped' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } if(!strcmp(k,"motorcycle")) { if(ISTRUE(v)) way.allow|=Transports_Motorcycle; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'motorcycle' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } if(!strcmp(k,"motorcar")) { if(ISTRUE(v)) way.allow|=Transports_Motorcar; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'motorcar' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } if(!strcmp(k,"multilane")) { if(ISTRUE(v)) way.props|=Properties_Multilane; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'multilane' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } break; case 'n': if(!strcmp(k,"name")) { name=v; recognised=1; break; } break; case 'o': if(!strcmp(k,"oneway")) { if(ISTRUE(v)) oneway=1; else if(!strcmp(v,"-1")) oneway=-1; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'oneway' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } break; case 'p': if(!strcmp(k,"paved")) { if(ISTRUE(v)) way.props|=Properties_Paved; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'paved' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } if(!strcmp(k,"psv")) { if(ISTRUE(v)) way.allow|=Transports_PSV; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'psv' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } break; case 'r': if(!strcmp(k,"ref")) { ref=v; recognised=1; break; } if(!strcmp(k,"roundabout")) { if(ISTRUE(v)) roundabout=1; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'roundabout' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } break; case 't': if(!strcmp(k,"tunnel")) { if(ISTRUE(v)) way.props|=Properties_Tunnel; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'tunnel' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } break; case 'w': if(!strcmp(k,"wheelchair")) { if(ISTRUE(v)) way.allow|=Transports_Wheelchair; else if(!ISFALSE(v)) logerror("Way %"Pway_t" has an unrecognised tag 'wheelchair' = '%s' (after tagging rules); using 'no'.\n",logerror_way(id),v); recognised=1; break; } break; default: break; } if(!recognised) logerror("Way %"Pway_t" has an unrecognised tag '%s' = '%s' (after tagging rules); ignoring it.\n",logerror_way(id),k,v); } /* Create the way */ if(area && oneway) { logerror("Way %"Pway_t" is an area and oneway; ignoring area tag.\n",logerror_way(id)); area=0; } if(cyclebothways && !oneway) { logerror("Way %"Pway_t" is cyclebothways but not oneway; ignoring cyclebothways tag.\n",logerror_way(id)); cyclebothways=0; } if(roundabout && !oneway) { logerror("Way %"Pway_t" is roundabout but not oneway; adding oneway tag.\n",logerror_way(id)); oneway=1; } if(!way.allow) return; if(cyclebothways) way.type|=Highway_CycleBothWays; if(oneway) { way.type|=Highway_OneWay; if(oneway==-1) for(i=0;i1) way.props|=Properties_Multilane; if(oneway && lanes==1) way.props&=~Properties_Multilane; } if(ref && name) { refname=(char*)malloc(strlen(ref)+strlen(name)+4); sprintf(refname,"%s (%s)",name,ref); } else if(ref && !name) refname=ref; else if(!ref && name) refname=name; else /* if(!ref && !name) */ refname=""; AppendWayList(ways,id,&way,way_nodes,way_nnodes,refname); if(ref && name) free(refname); } /*++++++++++++++++++++++++++++++++++++++ Process the tags associated with a relation. TagList *tags The list of relation tags. int64_t relation_id The id of the relation. int mode The mode of operation to take (create, modify, delete). ++++++++++++++++++++++++++++++++++++++*/ void ProcessRelationTags(TagList *tags,int64_t relation_id,int mode) { transports_t routes=Transports_None; transports_t except=Transports_None; int relation_turn_restriction=0; TurnRestriction restriction=TurnRestrict_None; relation_t id; int i; /* Convert id */ id=(relation_t)relation_id; logassert((int64_t)id==relation_id,"Relation ID too large (change relation_t to 64-bits?)"); /* check relation id can be stored in relation_t data type. */ /* Delete */ if(mode==MODE_DELETE || mode==MODE_MODIFY) { AppendRouteRelationList(relations,id,RELATION_DELETED, relation_nodes,relation_nnodes, relation_ways,relation_nways, relation_relations,relation_nrelations); AppendTurnRelationList(relations,id, relation_from,relation_to,relation_via, restriction,RELATION_DELETED); } if(mode==MODE_DELETE) return; /* Sanity check */ if(relation_nnodes==0 && relation_nways==0 && relation_nrelations==0) { logerror("Relation %"Prelation_t" has no nodes, ways or relations.\n",logerror_relation(id)); return; } /* Parse the tags */ for(i=0;intags;i++) { int recognised=0; char *k=tags->k[i]; char *v=tags->v[i]; switch(*k) { case 'b': if(!strcmp(k,"bicycleroute")) { if(ISTRUE(v)) routes|=Transports_Bicycle; else if(!ISFALSE(v)) logerror("Relation %"Prelation_t" has an unrecognised tag 'bicycleroute' = '%s' (after tagging rules); using 'no'.\n",logerror_relation(id),v); recognised=1; break; } break; case 'e': if(!strcmp(k,"except")) { for(i=1;i. ***************************************/ #ifndef LOGGING_H #define LOGGING_H /*+ To stop multiple inclusions. +*/ #include #include "typesx.h" /* Data structures */ /*+ A structure containing a single object as written by the logerror_*() functions. +*/ typedef struct _ErrorLogObject { char type; /*+ The type of the object. +*/ uint64_t id; /*+ The id of the object. +*/ uint32_t offset; /*+ The offset of the error message from the beginning of the text file. +*/ } ErrorLogObject; /* Variables */ extern int option_loggable; extern int option_logtime; extern int option_logmemory; /* Runtime progress logging functions in logging.c */ void printf_program_start(void); void printf_program_end(void); #ifdef __GNUC__ void printf_first(const char *format, ...) __attribute__ ((format (printf, 1, 2))); void printf_middle(const char *format, ...) __attribute__ ((format (printf, 1, 2))); void printf_last(const char *format, ...) __attribute__ ((format (printf, 1, 2))); void fprintf_first(FILE *file,const char *format, ...) __attribute__ ((format (printf, 2, 3))); void fprintf_middle(FILE *file,const char *format, ...) __attribute__ ((format (printf, 2, 3))); void fprintf_last(FILE *file,const char *format, ...) __attribute__ ((format (printf, 2, 3))); #else void printf_first(const char *format, ...); void printf_middle(const char *format, ...); void printf_last(const char *format, ...); void fprintf_first(FILE *file,const char *format, ...); void fprintf_middle(FILE *file,const char *format, ...); void fprintf_last(FILE *file,const char *format, ...); #endif void log_malloc(void *address,size_t size); void log_free(void *address); void log_mmap(size_t size); void log_munmap(size_t size); /* Error logging functions in logerror.c */ void open_errorlog(const char *filename,int append,int bin); void close_errorlog(void); #ifdef __GNUC__ void logerror(const char *format, ...) __attribute__ ((format (printf, 1, 2))); #else void logerror(const char *format, ...); #endif node_t logerror_node (node_t id); way_t logerror_way (way_t id); relation_t logerror_relation(relation_t id); /* Runtime fatal error assertion in logging.c */ #define logassert(xx,yy) do { if(!(xx)) _logassert(yy,__FILE__,__LINE__); } while(0) void _logassert(const char *message,const char *file,int line); #endif /* LOGGING_H */ routino-3.2/src/relationsx.c 644 233 144 124157 12563633052 11427 0/*************************************** Extended Relation data type functions. Part of the Routino routing software. ******************/ /****************** This file Copyright 2010-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include "types.h" #include "segments.h" #include "relations.h" #include "nodesx.h" #include "segmentsx.h" #include "waysx.h" #include "relationsx.h" #include "files.h" #include "logging.h" #include "sorting.h" /* Global variables */ /*+ The command line '--tmpdir' option or its default value. +*/ extern char *option_tmpdirname; /* Local variables */ /*+ Temporary file-local variables for use by the sort functions (re-initialised for each sort). +*/ static SegmentsX *sortsegmentsx; static NodesX *sortnodesx; /* Local functions */ static int sort_route_by_id(RouteRelX *a,RouteRelX *b); static int deduplicate_route_by_id(RouteRelX *relationx,index_t index); static int sort_turn_by_id(TurnRelX *a,TurnRelX *b); static int deduplicate_turn_by_id(TurnRelX *relationx,index_t index); static int geographically_index(TurnRelX *relationx,index_t index); static int geographically_index_convert_segments(TurnRelX *relationx,index_t index); static int sort_by_via(TurnRelX *a,TurnRelX *b); /*++++++++++++++++++++++++++++++++++++++ Allocate a new relation list (create a new file or open an existing one). RelationsX *NewRelationList Returns the relation list. int append Set to 1 if the file is to be opened for appending. int readonly Set to 1 if the file is to be opened for reading. ++++++++++++++++++++++++++++++++++++++*/ RelationsX *NewRelationList(int append,int readonly) { RelationsX *relationsx; relationsx=(RelationsX*)calloc(1,sizeof(RelationsX)); logassert(relationsx,"Failed to allocate memory (try using slim mode?)"); /* Check calloc() worked */ /* Route Relations */ relationsx->rrfilename =(char*)malloc(strlen(option_tmpdirname)+32); relationsx->rrfilename_tmp=(char*)malloc(strlen(option_tmpdirname)+48); /* allow %p to be up to 20 bytes */ sprintf(relationsx->rrfilename ,"%s/relationsx.route.parsed.mem",option_tmpdirname); sprintf(relationsx->rrfilename_tmp,"%s/relationsx.route.%p.tmp" ,option_tmpdirname,(void*)relationsx); if(append || readonly) if(ExistsFile(relationsx->rrfilename)) { FILESORT_VARINT relationsize; int rrfd; rrfd=ReOpenFileBuffered(relationsx->rrfilename); while(!ReadFileBuffered(rrfd,&relationsize,FILESORT_VARSIZE)) { SkipFileBuffered(rrfd,relationsize); relationsx->rrnumber++; } CloseFileBuffered(rrfd); RenameFile(relationsx->rrfilename,relationsx->rrfilename_tmp); } if(append) relationsx->rrfd=OpenFileBufferedAppend(relationsx->rrfilename_tmp); else if(!readonly) relationsx->rrfd=OpenFileBufferedNew(relationsx->rrfilename_tmp); else relationsx->rrfd=-1; /* Turn Restriction Relations */ relationsx->trfilename =(char*)malloc(strlen(option_tmpdirname)+32); relationsx->trfilename_tmp=(char*)malloc(strlen(option_tmpdirname)+48); /* allow %p to be up to 20 bytes */ sprintf(relationsx->trfilename ,"%s/relationsx.turn.parsed.mem",option_tmpdirname); sprintf(relationsx->trfilename_tmp,"%s/relationsx.turn.%p.tmp" ,option_tmpdirname,(void*)relationsx); if(append || readonly) if(ExistsFile(relationsx->trfilename)) { offset_t size; size=SizeFile(relationsx->trfilename); relationsx->trnumber=size/sizeof(TurnRelX); RenameFile(relationsx->trfilename,relationsx->trfilename_tmp); } if(append) relationsx->trfd=OpenFileBufferedAppend(relationsx->trfilename_tmp); else if(!readonly) relationsx->trfd=OpenFileBufferedNew(relationsx->trfilename_tmp); else relationsx->trfd=-1; return(relationsx); } /*++++++++++++++++++++++++++++++++++++++ Free a relation list. RelationsX *relationsx The set of relations to be freed. int keep If set then the results file is to be kept. ++++++++++++++++++++++++++++++++++++++*/ void FreeRelationList(RelationsX *relationsx,int keep) { /* Route relations */ if(keep) RenameFile(relationsx->rrfilename_tmp,relationsx->rrfilename); else DeleteFile(relationsx->rrfilename_tmp); free(relationsx->rrfilename); free(relationsx->rrfilename_tmp); if(relationsx->rridata) { log_free(relationsx->rridata); free(relationsx->rridata); } if(relationsx->rrodata) { log_free(relationsx->rrodata); free(relationsx->rrodata); } /* Turn Restriction relations */ if(keep) RenameFile(relationsx->trfilename_tmp,relationsx->trfilename); else DeleteFile(relationsx->trfilename_tmp); free(relationsx->trfilename); free(relationsx->trfilename_tmp); if(relationsx->tridata) { log_free(relationsx->tridata); free(relationsx->tridata); } free(relationsx); } /*++++++++++++++++++++++++++++++++++++++ Append a single relation to an unsorted route relation list. RelationsX* relationsx The set of relations to process. relation_t id The ID of the relation. transports_t routes The types of routes that this relation is for. node_t *nodes The array of nodes that are members of the relation. int nnodes The number of nodes that are members of the relation. way_t *ways The array of ways that are members of the relation. int nways The number of ways that are members of the relation. relation_t *relations The array of relations that are members of the relation. int nrelations The number of relations that are members of the relation. ++++++++++++++++++++++++++++++++++++++*/ void AppendRouteRelationList(RelationsX* relationsx,relation_t id, transports_t routes, node_t *nodes,int nnodes, way_t *ways,int nways, relation_t *relations,int nrelations) { RouteRelX relationx={0}; FILESORT_VARINT size; node_t nonode=NO_NODE_ID; way_t noway=NO_WAY_ID; relation_t norelation=NO_RELATION_ID; relationx.id=id; relationx.routes=routes; size=sizeof(RouteRelX)+(nnodes+1)*sizeof(node_t)+(nways+1)*sizeof(way_t)+(nrelations+1)*sizeof(relation_t); WriteFileBuffered(relationsx->rrfd,&size,FILESORT_VARSIZE); WriteFileBuffered(relationsx->rrfd,&relationx,sizeof(RouteRelX)); WriteFileBuffered(relationsx->rrfd,nodes ,nnodes*sizeof(node_t)); WriteFileBuffered(relationsx->rrfd,&nonode, sizeof(node_t)); WriteFileBuffered(relationsx->rrfd,ways ,nways*sizeof(way_t)); WriteFileBuffered(relationsx->rrfd,&noway, sizeof(way_t)); WriteFileBuffered(relationsx->rrfd,relations ,nrelations*sizeof(relation_t)); WriteFileBuffered(relationsx->rrfd,&norelation, sizeof(relation_t)); relationsx->rrnumber++; logassert(relationsx->rrnumber!=0,"Too many route relations (change index_t to 64-bits?)"); /* Zero marks the high-water mark for relations. */ } /*++++++++++++++++++++++++++++++++++++++ Append a single relation to an unsorted turn restriction relation list. RelationsX* relationsx The set of relations to process. relation_t id The ID of the relation. way_t from The way that the turn restriction starts from. way_t to The way that the restriction finished on. node_t via The node that the turn restriction passes through. TurnRestriction restriction The type of restriction. transports_t except The set of transports allowed to bypass the restriction. ++++++++++++++++++++++++++++++++++++++*/ void AppendTurnRelationList(RelationsX* relationsx,relation_t id, way_t from,way_t to,node_t via, TurnRestriction restriction,transports_t except) { TurnRelX relationx={0}; relationx.id=id; relationx.from=from; relationx.to=to; relationx.via=via; relationx.restriction=restriction; relationx.except=except; WriteFileBuffered(relationsx->trfd,&relationx,sizeof(TurnRelX)); relationsx->trnumber++; logassert(relationsx->trnumber!=0,"Too many turn relations (change index_t to 64-bits?)"); /* Zero marks the high-water mark for relations. */ } /*++++++++++++++++++++++++++++++++++++++ Finish appending relations and change the filename over. RelationsX *relationsx The relations that have been appended. ++++++++++++++++++++++++++++++++++++++*/ void FinishRelationList(RelationsX *relationsx) { if(relationsx->rrfd!=-1) relationsx->rrfd =CloseFileBuffered(relationsx->rrfd); if(relationsx->trfd!=-1) relationsx->trfd=CloseFileBuffered(relationsx->trfd); } /*++++++++++++++++++++++++++++++++++++++ Find a particular route relation index. index_t IndexRouteRelX Returns the index of the route relation with the specified id. RelationsX *relationsx The set of relations to process. relation_t id The relation id to look for. ++++++++++++++++++++++++++++++++++++++*/ index_t IndexRouteRelX(RelationsX *relationsx,relation_t id) { index_t start=0; index_t end=relationsx->rrnumber-1; index_t mid; if(relationsx->rrnumber==0) /* There are no route relations */ return(NO_RELATION); if(idrridata[start]) /* Key is before start */ return(NO_RELATION); if(id>relationsx->rridata[end]) /* Key is after end */ return(NO_RELATION); /* Binary search - search key exact match only is required. * * # <- start | Check mid and move start or end if it doesn't match * # | * # | Since an exact match is wanted we can set end=mid-1 * # <- mid | or start=mid+1 because we know that mid doesn't match. * # | * # | Eventually either end=start or end=start+1 and one of * # <- end | start or end is the wanted one. */ do { mid=(start+end)/2; /* Choose mid point */ if(relationsx->rridata[mid]rridata[mid]>id) /* Mid point is too high */ end=mid?(mid-1):mid; else /* Mid point is correct */ return(mid); } while((end-start)>1); if(relationsx->rridata[start]==id) /* Start is correct */ return(start); if(relationsx->rridata[end]==id) /* End is correct */ return(end); return(NO_RELATION); } /*++++++++++++++++++++++++++++++++++++++ Find a particular route relation index. index_t IndexTurnRelX Returns the index of the turn relation with the specified id. RelationsX *relationsx The set of relations to process. relation_t id The relation id to look for. ++++++++++++++++++++++++++++++++++++++*/ index_t IndexTurnRelX(RelationsX *relationsx,relation_t id) { index_t start=0; index_t end=relationsx->trnumber-1; index_t mid; if(relationsx->trnumber==0) /* There are no route relations */ return(NO_RELATION); if(idtridata[start]) /* Key is before start */ return(NO_RELATION); if(id>relationsx->tridata[end]) /* Key is after end */ return(NO_RELATION); /* Binary search - search key exact match only is required. * * # <- start | Check mid and move start or end if it doesn't match * # | * # | Since an exact match is wanted we can set end=mid-1 * # <- mid | or start=mid+1 because we know that mid doesn't match. * # | * # | Eventually either end=start or end=start+1 and one of * # <- end | start or end is the wanted one. */ do { mid=(start+end)/2; /* Choose mid point */ if(relationsx->tridata[mid]tridata[mid]>id) /* Mid point is too high */ end=mid?(mid-1):mid; else /* Mid point is correct */ return(mid); } while((end-start)>1); if(relationsx->tridata[start]==id) /* Start is correct */ return(start); if(relationsx->tridata[end]==id) /* End is correct */ return(end); return(NO_RELATION); } /*++++++++++++++++++++++++++++++++++++++ Sort the list of relations. RelationsX* relationsx The set of relations to process. ++++++++++++++++++++++++++++++++++++++*/ void SortRelationList(RelationsX* relationsx) { /* Route Relations */ if(relationsx->rrnumber) { index_t rrxnumber; int rrfd; /* Print the start message */ printf_first("Sorting Route Relations"); /* Re-open the file read-only and a new file writeable */ rrfd=ReplaceFileBuffered(relationsx->rrfilename_tmp,&relationsx->rrfd); /* Sort the relations */ rrxnumber=relationsx->rrnumber; relationsx->rrnumber=filesort_vary(relationsx->rrfd,rrfd,NULL, (int (*)(const void*,const void*))sort_route_by_id, (int (*)(void*,index_t))deduplicate_route_by_id); relationsx->rrknumber=relationsx->rrnumber; /* Close the files */ relationsx->rrfd=CloseFileBuffered(relationsx->rrfd); CloseFileBuffered(rrfd); /* Print the final message */ printf_last("Sorted Route Relations: Relations=%"Pindex_t" Duplicates=%"Pindex_t,rrxnumber,rrxnumber-relationsx->rrnumber); } /* Turn Restriction Relations. */ if(relationsx->trnumber) { index_t trxnumber; int trfd; /* Print the start message */ printf_first("Sorting Turn Relations"); /* Re-open the file read-only and a new file writeable */ trfd=ReplaceFileBuffered(relationsx->trfilename_tmp,&relationsx->trfd); /* Sort the relations */ trxnumber=relationsx->trnumber; relationsx->trnumber=filesort_fixed(relationsx->trfd,trfd,sizeof(TurnRelX),NULL, (int (*)(const void*,const void*))sort_turn_by_id, (int (*)(void*,index_t))deduplicate_turn_by_id); relationsx->trknumber=relationsx->trnumber; /* Close the files */ relationsx->trfd=CloseFileBuffered(relationsx->trfd); CloseFileBuffered(trfd); /* Print the final message */ printf_last("Sorted Turn Relations: Relations=%"Pindex_t" Duplicates=%"Pindex_t,trxnumber,trxnumber-relationsx->trnumber); } } /*++++++++++++++++++++++++++++++++++++++ Sort the route relations into id order. int sort_route_by_id Returns the comparison of the id fields. RouteRelX *a The first extended relation. RouteRelX *b The second extended relation. ++++++++++++++++++++++++++++++++++++++*/ static int sort_route_by_id(RouteRelX *a,RouteRelX *b) { relation_t a_id=a->id; relation_t b_id=b->id; if(a_idb_id) return(1); else return(-FILESORT_PRESERVE_ORDER(a,b)); /* latest version first */ } /*++++++++++++++++++++++++++++++++++++++ Deduplicate the route relations using the id after sorting. int deduplicate_route_by_id Return 1 if the value is to be kept, otherwise 0. RouteRelX *relationx The extended relation. index_t index The number of sorted relations that have already been written to the output file. ++++++++++++++++++++++++++++++++++++++*/ static int deduplicate_route_by_id(RouteRelX *relationx,index_t index) { static relation_t previd; /* internal variable (reset by first call in each sort; index==0) */ if(index==0 || relationx->id!=previd) { previd=relationx->id; if(relationx->routes==RELATION_DELETED) return(0); else return(1); } else return(0); } /*++++++++++++++++++++++++++++++++++++++ Sort the turn restriction relations into id order. int sort_turn_by_id Returns the comparison of the id fields. TurnRelX *a The first extended relation. TurnRelX *b The second extended relation. ++++++++++++++++++++++++++++++++++++++*/ static int sort_turn_by_id(TurnRelX *a,TurnRelX *b) { relation_t a_id=a->id; relation_t b_id=b->id; if(a_idb_id) return(1); else return(-FILESORT_PRESERVE_ORDER(a,b)); /* latest version first */ } /*++++++++++++++++++++++++++++++++++++++ Deduplicate the turn restriction relations using the id after sorting. int deduplicate_turn_by_id Return 1 if the value is to be kept, otherwise 0. TurnRelX *relationx The extended relation. index_t index The number of sorted relations that have already been written to the output file. ++++++++++++++++++++++++++++++++++++++*/ static int deduplicate_turn_by_id(TurnRelX *relationx,index_t index) { static relation_t previd; /* internal variable (reset by first call in each sort; index==0) */ if(index==0 || relationx->id!=previd) { previd=relationx->id; if(relationx->except==RELATION_DELETED) return(0); else return(1); } else return(0); } /*++++++++++++++++++++++++++++++++++++++ Process the route relations and apply the information to the ways. RelationsX *relationsx The set of relations to use. WaysX *waysx The set of ways to modify. int keep If set to 1 then keep the old data file otherwise delete it. ++++++++++++++++++++++++++++++++++++++*/ void ProcessRouteRelations(RelationsX *relationsx,WaysX *waysx,int keep) { RouteRelX *unmatched=NULL,*lastunmatched=NULL; int nunmatched=0,lastnunmatched=0,iteration=1; if(waysx->number==0) return; /* Map into memory / open the files */ #if !SLIM waysx->data=MapFileWriteable(waysx->filename_tmp); #else waysx->fd=SlimMapFileWriteable(waysx->filename_tmp); InvalidateWayXCache(waysx->cache); #endif /* Re-open the file read-only */ relationsx->rrfd=ReOpenFileBuffered(relationsx->rrfilename_tmp); /* Read through the file. */ do { int ways=0,relations=0; index_t i; /* Print the start message */ printf_first("Processing Route Relations (%d): Relations=0 Modified Ways=0",iteration); SeekFileBuffered(relationsx->rrfd,0); for(i=0;irrnumber;i++) { FILESORT_VARINT size; RouteRelX relationx; way_t wayid; node_t nodeid; relation_t relationid; transports_t routes=Transports_None; /* Read each route relation */ ReadFileBuffered(relationsx->rrfd,&size,FILESORT_VARSIZE); ReadFileBuffered(relationsx->rrfd,&relationx,sizeof(RouteRelX)); /* Decide what type of route it is */ if(iteration==1) { relations++; routes=relationx.routes; } else { int j; for(j=0;jrrfd,&nodeid,sizeof(node_t)) && nodeid!=NO_NODE_ID) ; /* Loop through the ways */ while(!ReadFileBuffered(relationsx->rrfd,&wayid,sizeof(way_t)) && wayid!=NO_WAY_ID) { /* Update the ways that are listed for the relation */ if(routes) { index_t way=IndexWayX(waysx,wayid); if(way!=NO_WAY) { WayX *wayx=LookupWayX(waysx,way,1); if(routes&Transports_Foot) { if(!(wayx->way.allow&Transports_Foot)) { logerror("Route Relation %"Prelation_t" for Foot contains Way %"Pway_t" that does not allow Foot transport; overriding.\n",logerror_relation(relationx.id),logerror_way(wayid)); wayx->way.allow|=Transports_Foot; } wayx->way.props|=Properties_FootRoute; } if(routes&Transports_Bicycle) { if(!(wayx->way.allow&Transports_Bicycle)) { logerror("Route Relation %"Prelation_t" for Bicycle contains Way %"Pway_t" that does not allow Bicycle transport; overriding.\n",logerror_relation(relationx.id),logerror_way(wayid)); wayx->way.allow|=Transports_Bicycle; } wayx->way.props|=Properties_BicycleRoute; } PutBackWayX(waysx,wayx); ways++; } else logerror("Route Relation %"Prelation_t" contains Way %"Pway_t" that does not exist in the Routino database (not a highway?).\n",logerror_relation(relationx.id),logerror_way(wayid)); } } /* Loop through the relations */ while(!ReadFileBuffered(relationsx->rrfd,&relationid,sizeof(relation_t)) && relationid!=NO_RELATION_ID) { /* Add the relations that are listed for this relation to the list for next time */ if(relationid==relationx.id) logerror("Relation %"Prelation_t" contains itself.\n",logerror_relation(relationx.id)); else if(routes) { if(nunmatched%256==0) unmatched=(RouteRelX*)realloc((void*)unmatched,(nunmatched+256)*sizeof(RouteRelX)); unmatched[nunmatched].id=relationid; unmatched[nunmatched].routes=routes; nunmatched++; } } if(!((i+1)%1000)) printf_middle("Processing Route Relations (%d): Relations=%"Pindex_t" Modified Ways=%"Pindex_t,iteration,relations,ways); } if(lastunmatched) free(lastunmatched); lastunmatched=unmatched; lastnunmatched=nunmatched; unmatched=NULL; nunmatched=0; /* Print the final message */ printf_last("Processed Route Relations (%d): Relations=%"Pindex_t" Modified Ways=%"Pindex_t,iteration,relations,ways); } while(lastnunmatched && iteration++<8); if(lastunmatched) free(lastunmatched); /* Close the file */ relationsx->rrfd=CloseFileBuffered(relationsx->rrfd); if(keep) RenameFile(relationsx->rrfilename_tmp,relationsx->rrfilename); /* Unmap from memory / close the files */ #if !SLIM waysx->data=UnmapFile(waysx->data); #else waysx->fd=SlimUnmapFile(waysx->fd); #endif } /*++++++++++++++++++++++++++++++++++++++ Process the turn relations to update them with node/segment information. RelationsX *relationsx The set of relations to modify. NodesX *nodesx The set of nodes to use. SegmentsX *segmentsx The set of segments to use. WaysX *waysx The set of ways to use. int keep If set to 1 then keep the old data file otherwise delete it. ++++++++++++++++++++++++++++++++++++++*/ void ProcessTurnRelations(RelationsX *relationsx,NodesX *nodesx,SegmentsX *segmentsx,WaysX *waysx,int keep) { int trfd; index_t i,total=0,deleted=0; if(nodesx->number==0 || segmentsx->number==0) return; /* Print the start message */ printf_first("Processing Turn Relations: Relations=0 Deleted=0 Added=0"); /* Map into memory / open the files */ #if !SLIM nodesx->data=MapFileWriteable(nodesx->filename_tmp); segmentsx->data=MapFile(segmentsx->filename_tmp); waysx->data=MapFile(waysx->filename_tmp); #else nodesx->fd=SlimMapFileWriteable(nodesx->filename_tmp); segmentsx->fd=SlimMapFile(segmentsx->filename_tmp); waysx->fd=SlimMapFile(waysx->filename_tmp); InvalidateNodeXCache(nodesx->cache); InvalidateSegmentXCache(segmentsx->cache); InvalidateWayXCache(waysx->cache); #endif /* Re-open the file read-only and a new file writeable */ if(keep) { RenameFile(relationsx->trfilename_tmp,relationsx->trfilename); relationsx->trfd=ReOpenFileBuffered(relationsx->trfilename); trfd=OpenFileBufferedNew(relationsx->trfilename_tmp); } else trfd=ReplaceFileBuffered(relationsx->trfilename_tmp,&relationsx->trfd); /* Process all of the relations */ for(i=0;itrnumber;i++) { TurnRelX relationx; NodeX *nodex; SegmentX *segmentx; index_t via,from,to; ReadFileBuffered(relationsx->trfd,&relationx,sizeof(TurnRelX)); via =IndexNodeX(nodesx,relationx.via); from=IndexWayX(waysx,relationx.from); to =IndexWayX(waysx,relationx.to); if(via==NO_NODE) { logerror("Turn Relation %"Prelation_t" contains Node %"Pnode_t" that does not exist in the Routino database (not a highway node?).\n",logerror_relation(relationx.id),logerror_node(relationx.via)); deleted++; goto endloop; } if(from==NO_WAY) { logerror("Turn Relation %"Prelation_t" contains Way %"Pway_t" that does not exist in the Routino database (not a highway?).\n",logerror_relation(relationx.id),logerror_way(relationx.from)); deleted++; goto endloop; } if(to==NO_WAY) { logerror("Turn Relation %"Prelation_t" contains Way %"Pway_t" that does not exist in the Routino database (not a highway?).\n",logerror_relation(relationx.id),logerror_way(relationx.to)); deleted++; goto endloop; } relationx.via =via; relationx.from=from; relationx.to =to; if(relationx.restriction==TurnRestrict_no_right_turn || relationx.restriction==TurnRestrict_no_left_turn || relationx.restriction==TurnRestrict_no_u_turn || relationx.restriction==TurnRestrict_no_straight_on) { index_t node_from=NO_NODE,node_to=NO_NODE; int oneway_from=0,oneway_to=0,vehicles_from=1,vehicles_to=1; /* Find the segments that join the node 'via' */ segmentx=FirstSegmentX(segmentsx,relationx.via,1); while(segmentx) { if(segmentx->way==relationx.from) { WayX *wayx=LookupWayX(waysx,segmentx->way,1); if(node_from!=NO_NODE) /* Only one segment can be on the 'from' way */ { logerror("Turn Relation %"Prelation_t" is not stored because the 'via' node is not at the end of the 'from' way.\n",logerror_relation(relationx.id)); deleted++; goto endloop; } node_from=OtherNode(segmentx,relationx.via); if(IsOnewayFrom(segmentx,relationx.via)) oneway_from=1; /* not allowed */ if(!(wayx->way.allow&(Transports_Bicycle|Transports_Moped|Transports_Motorcycle|Transports_Motorcar|Transports_Goods|Transports_HGV|Transports_PSV))) vehicles_from=0; /* not allowed */ } if(segmentx->way==relationx.to) { WayX *wayx=LookupWayX(waysx,segmentx->way,1); if(node_to!=NO_NODE) /* Only one segment can be on the 'to' way */ { logerror("Turn Relation %"Prelation_t" is not stored because the 'via' node is not at the end of the 'to' way.\n",logerror_relation(relationx.id)); deleted++; goto endloop; } node_to=OtherNode(segmentx,relationx.via); if(IsOnewayTo(segmentx,relationx.via)) oneway_to=1; /* not allowed */ if(!(wayx->way.allow&(Transports_Bicycle|Transports_Moped|Transports_Motorcycle|Transports_Motorcar|Transports_Goods|Transports_HGV|Transports_PSV))) vehicles_to=0; /* not allowed */ } segmentx=NextSegmentX(segmentsx,segmentx,relationx.via); } if(node_from==NO_NODE) logerror("Turn Relation %"Prelation_t" is not stored because the 'via' node is not part of the 'from' way.\n",logerror_relation(relationx.id)); if(node_to==NO_NODE) logerror("Turn Relation %"Prelation_t" is not stored because the 'via' node is not part of the 'to' way.\n",logerror_relation(relationx.id)); if(oneway_from) logerror("Turn Relation %"Prelation_t" is not needed because the 'from' way is oneway away from the 'via' node.\n",logerror_relation(relationx.id)); if(oneway_to) logerror("Turn Relation %"Prelation_t" is not needed because the 'to' way is oneway towards the 'via' node.\n",logerror_relation(relationx.id)); if(!vehicles_from) logerror("Turn Relation %"Prelation_t" is not needed because the 'from' way does not allow vehicles.\n",logerror_relation(relationx.id)); if(!vehicles_to) logerror("Turn Relation %"Prelation_t" is not needed because the 'to' way does not allow vehicles.\n",logerror_relation(relationx.id)); if(oneway_from || oneway_to || !vehicles_from || !vehicles_to || node_from==NO_NODE || node_to==NO_NODE) { deleted++; goto endloop; } /* Write the results */ relationx.from=node_from; relationx.to =node_to; WriteFileBuffered(trfd,&relationx,sizeof(TurnRelX)); total++; } else { index_t node_from=NO_NODE,node_to=NO_NODE,node_other[MAX_SEG_PER_NODE]; int nnodes_other=0,i; int oneway_from=0,vehicles_from=1; /* Find the segments that join the node 'via' */ segmentx=FirstSegmentX(segmentsx,relationx.via,1); while(segmentx) { if(segmentx->way==relationx.from) { WayX *wayx=LookupWayX(waysx,segmentx->way,1); if(node_from!=NO_NODE) /* Only one segment can be on the 'from' way */ { logerror("Turn Relation %"Prelation_t" is not stored because the 'via' node is not at the end of the 'from' way.\n",logerror_relation(relationx.id)); deleted++; goto endloop; } node_from=OtherNode(segmentx,relationx.via); if(IsOnewayFrom(segmentx,relationx.via)) oneway_from=1; /* not allowed */ if(!(wayx->way.allow&(Transports_Bicycle|Transports_Moped|Transports_Motorcycle|Transports_Motorcar|Transports_Goods|Transports_HGV|Transports_PSV))) vehicles_from=0; /* not allowed */ } if(segmentx->way==relationx.to) { if(node_to!=NO_NODE) /* Only one segment can be on the 'to' way */ { logerror("Turn Relation %"Prelation_t" is not stored because the 'via' node is not at the end of the 'to' way.\n",logerror_relation(relationx.id)); deleted++; goto endloop; } node_to=OtherNode(segmentx,relationx.via); } if(segmentx->way!=relationx.from && segmentx->way!=relationx.to) { WayX *wayx=LookupWayX(waysx,segmentx->way,1); if(IsOnewayTo(segmentx,relationx.via)) ; /* not allowed */ else if(!(wayx->way.allow&(Transports_Bicycle|Transports_Moped|Transports_Motorcycle|Transports_Motorcar|Transports_Goods|Transports_HGV|Transports_PSV))) ; /* not allowed */ else { logassert(nnodes_otherflags|=NODE_TURNRSTRCT; PutBackNodeX(nodesx,nodex); segmentx=FirstSegmentX(segmentsx,relationx.via,1); while(segmentx) { index_t othernode=OtherNode(segmentx,relationx.via); nodex=LookupNodeX(nodesx,othernode,1); nodex->flags|=NODE_TURNRSTRCT2; PutBackNodeX(nodesx,nodex); segmentx=NextSegmentX(segmentsx,segmentx,relationx.via); } endloop: if(!((i+1)%1000)) printf_middle("Processing Turn Relations: Relations=%"Pindex_t" Deleted=%"Pindex_t" Added=%"Pindex_t,i+1,deleted,total-relationsx->trnumber+deleted); } /* Close the files */ relationsx->trfd=CloseFileBuffered(relationsx->trfd); CloseFileBuffered(trfd); /* Free the now-unneeded indexes */ log_free(nodesx->idata); free(nodesx->idata); nodesx->idata=NULL; log_free(waysx->idata); free(waysx->idata); waysx->idata=NULL; log_free(segmentsx->firstnode); free(segmentsx->firstnode); segmentsx->firstnode=NULL; /* Unmap from memory / close the files */ #if !SLIM nodesx->data=UnmapFile(nodesx->data); segmentsx->data=UnmapFile(segmentsx->data); waysx->data=UnmapFile(waysx->data); #else nodesx->fd=SlimUnmapFile(nodesx->fd); segmentsx->fd=SlimUnmapFile(segmentsx->fd); waysx->fd=SlimUnmapFile(waysx->fd); #endif /* Print the final message */ printf_last("Processed Turn Relations: Relations=%"Pindex_t" Deleted=%"Pindex_t" Added=%"Pindex_t,total,deleted,total-relationsx->trnumber+deleted); relationsx->trnumber=total; } /*++++++++++++++++++++++++++++++++++++++ Remove pruned turn relations and update the node indexes after pruning nodes. RelationsX *relationsx The set of relations to modify. NodesX *nodesx The set of nodes to use. ++++++++++++++++++++++++++++++++++++++*/ void RemovePrunedTurnRelations(RelationsX *relationsx,NodesX *nodesx) { TurnRelX relationx; index_t total=0,pruned=0,notpruned=0; int trfd; if(relationsx->trnumber==0) return; /* Print the start message */ printf_first("Deleting Pruned Turn Relations: Relations=0 Pruned=0"); /* Re-open the file read-only and a new file writeable */ trfd=ReplaceFileBuffered(relationsx->trfilename_tmp,&relationsx->trfd); /* Process all of the relations */ while(!ReadFileBuffered(relationsx->trfd,&relationx,sizeof(TurnRelX))) { relationx.from=nodesx->pdata[relationx.from]; relationx.via =nodesx->pdata[relationx.via]; relationx.to =nodesx->pdata[relationx.to]; if(relationx.from==NO_NODE || relationx.via==NO_NODE || relationx.to==NO_NODE) pruned++; else { WriteFileBuffered(trfd,&relationx,sizeof(TurnRelX)); notpruned++; } total++; if(!(total%1000)) printf_middle("Deleting Pruned Turn Relations: Relations=%"Pindex_t" Pruned=%"Pindex_t,total,pruned); } relationsx->trnumber=notpruned; /* Close the files */ relationsx->trfd=CloseFileBuffered(relationsx->trfd); CloseFileBuffered(trfd); /* Print the final message */ printf_last("Deleted Pruned Turn Relations: Relations=%"Pindex_t" Pruned=%"Pindex_t,total,pruned); } /*++++++++++++++++++++++++++++++++++++++ Sort the turn relations geographically after updating the node indexes. RelationsX *relationsx The set of relations to modify. NodesX *nodesx The set of nodes to use. SegmentsX *segmentsx The set of segments to use. int convert Set to 1 to convert the segments as well as sorting them (the second time it is called). ++++++++++++++++++++++++++++++++++++++*/ void SortTurnRelationListGeographically(RelationsX *relationsx,NodesX *nodesx,SegmentsX *segmentsx,int convert) { int trfd; if(segmentsx->number==0) return; /* Print the start message */ printf_first("Sorting Turn Relations Geographically"); /* Map into memory / open the files */ #if !SLIM segmentsx->data=MapFile(segmentsx->filename_tmp); #else segmentsx->fd=SlimMapFile(segmentsx->filename_tmp); InvalidateSegmentXCache(segmentsx->cache); #endif /* Re-open the file read-only and a new file writeable */ trfd=ReplaceFileBuffered(relationsx->trfilename_tmp,&relationsx->trfd); /* Update the segments with geographically sorted node indexes and sort them */ sortnodesx=nodesx; sortsegmentsx=segmentsx; if(!convert) filesort_fixed(relationsx->trfd,trfd,sizeof(TurnRelX),(int (*)(void*,index_t))geographically_index, (int (*)(const void*,const void*))sort_by_via, NULL); else filesort_fixed(relationsx->trfd,trfd,sizeof(TurnRelX),(int (*)(void*,index_t))geographically_index_convert_segments, (int (*)(const void*,const void*))sort_by_via, NULL); /* Close the files */ relationsx->trfd=CloseFileBuffered(relationsx->trfd); CloseFileBuffered(trfd); /* Unmap from memory / close the files */ #if !SLIM segmentsx->data=UnmapFile(segmentsx->data); #else segmentsx->fd=SlimUnmapFile(segmentsx->fd); #endif /* Free the memory */ if(nodesx->gdata) { log_free(nodesx->gdata); free(nodesx->gdata); nodesx->gdata=NULL; } /* Print the final message */ printf_last("Sorted Turn Relations Geographically: Turn Relations=%"Pindex_t,relationsx->trnumber); } /*++++++++++++++++++++++++++++++++++++++ Update the turn relation indexes. int geographically_index Return 1 if the value is to be kept, otherwise 0. TurnRelX *relationx The extended turn relation. index_t index The number of unsorted turn relations that have been read from the input file. ++++++++++++++++++++++++++++++++++++++*/ static int geographically_index(TurnRelX *relationx,index_t index) { relationx->from=sortnodesx->gdata[relationx->from]; relationx->via =sortnodesx->gdata[relationx->via]; relationx->to =sortnodesx->gdata[relationx->to]; return(1); } /*++++++++++++++++++++++++++++++++++++++ Update the turn relation indexes and replace them with segments. int geographically_index_convert_segments Return 1 if the value is to be kept, otherwise 0. TurnRelX *relationx The extended turn relation. index_t index The number of unsorted turn relations that have been read from the input file. ++++++++++++++++++++++++++++++++++++++*/ static int geographically_index_convert_segments(TurnRelX *relationx,index_t index) { SegmentX *segmentx; index_t from_node,via_node,to_node; from_node=sortnodesx->gdata[relationx->from]; via_node =sortnodesx->gdata[relationx->via]; to_node =sortnodesx->gdata[relationx->to]; segmentx=FirstSegmentX(sortsegmentsx,via_node,1); do { if(OtherNode(segmentx,via_node)==from_node) relationx->from=IndexSegmentX(sortsegmentsx,segmentx); if(OtherNode(segmentx,via_node)==to_node) relationx->to=IndexSegmentX(sortsegmentsx,segmentx); segmentx=NextSegmentX(sortsegmentsx,segmentx,via_node); } while(segmentx); relationx->via=via_node; return(1); } /*++++++++++++++++++++++++++++++++++++++ Sort the turn restriction relations into via index order (then by from and to segments). int sort_by_via Returns the comparison of the via, from and to fields. TurnRelX *a The first extended relation. TurnRelX *b The second extended relation. ++++++++++++++++++++++++++++++++++++++*/ static int sort_by_via(TurnRelX *a,TurnRelX *b) { index_t a_id=a->via; index_t b_id=b->via; if(a_idb_id) return(1); else { index_t a_id=a->from; index_t b_id=b->from; if(a_idb_id) return(1); else { index_t a_id=a->to; index_t b_id=b->to; if(a_idb_id) return(1); else return(FILESORT_PRESERVE_ORDER(a,b)); } } } /*++++++++++++++++++++++++++++++++++++++ Save the relation list to a file. RelationsX* relationsx The set of relations to save. const char *filename The name of the file to save. ++++++++++++++++++++++++++++++++++++++*/ void SaveRelationList(RelationsX* relationsx,const char *filename) { index_t i; int fd; RelationsFile relationsfile={0}; /* Print the start message */ printf_first("Writing Relations: Turn Relations=0"); /* Re-open the file read-only */ relationsx->trfd=ReOpenFileBuffered(relationsx->trfilename_tmp); /* Write out the relations data */ fd=OpenFileBufferedNew(filename); SeekFileBuffered(fd,sizeof(RelationsFile)); for(i=0;itrnumber;i++) { TurnRelX relationx; TurnRelation relation={0}; ReadFileBuffered(relationsx->trfd,&relationx,sizeof(TurnRelX)); relation.from=relationx.from; relation.via=relationx.via; relation.to=relationx.to; relation.except=relationx.except; WriteFileBuffered(fd,&relation,sizeof(TurnRelation)); if(!((i+1)%1000)) printf_middle("Writing Relations: Turn Relations=%"Pindex_t,i+1); } /* Write out the header structure */ relationsfile.trnumber=relationsx->trnumber; SeekFileBuffered(fd,0); WriteFileBuffered(fd,&relationsfile,sizeof(RelationsFile)); CloseFileBuffered(fd); /* Close the file */ relationsx->trfd=CloseFileBuffered(relationsx->trfd); /* Print the final message */ printf_last("Wrote Relations: Turn Relations=%"Pindex_t,relationsx->trnumber); } routino-3.2/src/uncompress.h 644 233 144 2131 12302106364 11355 0/*************************************** Function prototypes for file uncompression. Part of the Routino routing software. ******************/ /****************** This file Copyright 2012-2014 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #ifndef UNCOMPRESS_H #define UNCOMPRESS_H /*+ To stop multiple inclusions. +*/ int Uncompress_Bzip2(int filefd); int Uncompress_Gzip(int filefd); int Uncompress_Xz(int filefd); #endif /* UNCOMPRESS_H */ routino-3.2/doc/ 40755 233 144 0 13061247703 6761 5routino-3.2/doc/USAGE.txt 644 233 144 64255 12574076067 10451 0 Routino : Usage =============== There are five programs that make up this software. The first one takes the planet.osm datafile from OpenStreetMap (or other source of data using the same formats) and converts it into a local database. The second program uses the database to determine an optimum route between two points. The third program allows visualisation of the data and statistics to be extracted. The fourth program allows dumping the raw parsed data for test purposes and the fifth is a test program for the tag transformations. planetsplitter -------------- This program reads in the OSM format XML file and splits it up to create the database that is used for routing. Usage: planetsplitter [--version] [--help] [--dir=] [--prefix=] [--sort-ram-size=] [--sort-threads=] [--tmpdir=] [--tagging=] [--loggable] [--logtime] [--logmemory] [--errorlog[=]] [--parse-only | --process-only] [--append] [--keep] [--changes] [--max-iterations=] [--prune-none] [--prune-isolated=] [--prune-short=] [--prune-straight=] [ ... | ... | ... | ... | ... | ... | ... | ...] --version Print the version of Routino. --help Prints out the help information. --dir= Sets the directory name in which to save the results. Defaults to the current directory. --prefix= Sets the filename prefix for the files that are created. Defaults to no prefix. --sort-ram-size= Specifies the amount of RAM (in MB) to use for sorting the data. If not specified then 64 MB will be used in slim mode or 256 MB otherwise. --sort-threads= The number of threads to use for data sorting (the sorting memory is shared between the threads - too many threads and not enough memory will reduce the performance). --tmpdir= Specifies the name of the directory to store the temporary disk files. If not specified then it defaults to either the value of the --dir option or the current directory. --tagging= Sets the filename containing the list of tagging rules in XML format for the parsing the input files. If the file doesn't exist then dirname, prefix and "profiles.xml" will be combined and used, if that doesn't exist then the file '/usr/local/share/routino/profiles.xml' (or custom installation location) will be used. --loggable Print progress messages that are suitable for logging to a file; normally an incrementing counter is printed which is more suitable for real-time display than logging. --logtime Print the elapsed time for each processing step (minutes, seconds and milliseconds). --logmemory Print the maximum allocated and mapped memory for each processing step (MBytes). --errorlog[=] Log OSM parsing and processing errors to 'error.log' or the specified file name (the '--dir' and '--prefix' options are applied). If the --append option is used then the existing log file will be appended, otherwise a new one will be created. If the --keep option is also used a geographically searchable database of error logs is created for use in the visualiser. --parse-only Parse the input files and store the data in intermediate files but don't process the data into a routing database. This option must be used with the --append option for all except the first file. --process-only Don't read in any files but process the existing intermediate files created by using the --parse-only option. --append Parse the input file and append the result to the existing intermediate files; the appended file can be either an OSM file or an OSC change file. --keep Store a set of intermediate files after parsing the OSM files, sorting and removing duplicates; this allows appending an OSC file and re-processing later. --changes This option indicates that the data being processed contains one or more OSC (OSM changes) files, they must be applied in time sequence if more than one is used. This option implies --append when parsing data files and --keep when processing data. --max-iterations= The maximum number of iterations to use when generating super-nodes and super-segments. Defaults to 5 which is normally enough. --prune-none Disable the prune options below, they can be re-enabled by adding them to the command line after this option. --prune-isolated= Remove the access permissions for a transport type from small disconnected groups of segments and remove the segments if they end up with no access permission (defaults to removing groups under 500m). --prune-short= Remove short segments (defaults to removing segments up to a maximum length of 5m). --prune-straight= Remove nodes in almost straight highways (defaults to removing nodes up to 3m offset from a straight line). , , , , Specifies the filename(s) to read data from. Filenames ending '.pbf' will be read as PBF, filenames ending in '.o5m' or '.o5c' will be read as O5M/O5C, otherwise as XML. Filenames ending '.bz2' will be bzip2 uncompressed (if bzip2 support compiled in). Filenames ending '.gz' will be gzip uncompressed (if gzip support compiled in). Filenames ending '.xz' will be xz uncompressed (if xz support compiled in). Note: In version 2.5 of Routino the ability to read data from the standard input has been removed. This is because there is now the ability to read compressed files (bzip2, gzip, xz) and PBF files directly. Also using standard input the file type cannot be auto-detected from the filename. Example usage 1: planetsplitter --dir=data --prefix=gb great_britain.osm This will generate the output files 'data/gb-nodes.mem', 'data/gb-segments.mem' and 'data/gb-ways.mem'. Multiple filenames can be specified on the command line and they will all be read in, combined and processed together. Example usage 2: planetsplitter --dir=data --prefix=gb --parse-only great_britain_part1.osm planetsplitter --dir=data --prefix=gb --parse-only --append great_britain_part2.osm planetsplitter --dir=data --prefix=gb --parse-only --append ... planetsplitter --dir=data --prefix=gb --process-only This will generate the same output files as the first example but parsing the input files is performed separately from the data processing. The first file read in must not use the --append option but the later ones must. Example usage 3: planetsplitter --dir=data --prefix=gb --keep great_britain.osm planetsplitter --dir=data --prefix=gb --changes great_britain.osc This will generate the same output files as the first example. The first command will process the complete file and keep some intermediate data for later. The second command will apply a set of changes to the stored intermediate data and keep the updated intermediate files for repeating this step later with more change data. The parsing and processing can be split into multiple commands as it was in example 2 with the --keep option used with --process-only for the initial OSM file(s) and the --changes option used with --parse-only or --process-only for every OSC file. router ------ This program performs the calculation of the optimum routes using the database generated by the planetsplitter program. Usage: router [--version] [--help | --help-profile | --help-profile-xml | --help-profile-json | --help-profile-perl ] [--dir=] [--prefix=] [--profiles=] [--translations=] [--exact-nodes-only] [--quiet | [--loggable] [--logtime] [--logmemory]] [--output-html] [--output-gpx-track] [--output-gpx-route] [--output-text] [--output-text-all] [--output-none] [--output-stdout] [--profile=] [--transport=] [--shortest | --quickest] --lon1= --lat1= --lon2= --lon2= [ ... --lon99= --lon99=] [--reverse] [--loop] [--heading=] [--highway-= ...] [--speed-= ...] [--property-= ...] [--oneway=(0|1)] [--turns=(0|1)] [--weight=] [--height=] [--width=] [--length=] --version Print the version of Routino. --help Prints out the help information. --help-profile Prints out the selected transport profile (type, speed limits, highway preferences etc.) --help-profile-xml Prints out all the loaded profiles as an XML file in the same format that can be loaded in. --help-profile-json Prints out all the loaded profiles in JavaScript Object Notation (JSON) format for use in the interactive webpage. --help-profile-perl Prints out all the loaded profiles as a Perl object for use in the router CGI. --dir= Sets the directory name in which to read the local database. Defaults to the current directory. --prefix= Sets the filename prefix for the files in the local database. Defaults to no prefix. --profiles= Sets the filename containing the list of routing profiles in XML format. If the file doesn't exist then dirname, prefix and "profiles.xml" will be combined and used, if that doesn't exist then the file '/usr/local/share/routino/profiles.xml' (or custom installation location) will be used. --translations= Sets the filename containing the list of translations in XML format for the output files. If the file doesn't exist then dirname, prefix and "translations.xml" will be combined and used, if that doesn't exist then the file '/usr/local/share/routino/translations.xml' (or custom installation location) will be used. --exact-nodes-only When processing the specified latitude and longitude points only select the nearest node instead of finding the nearest point within a segment (quicker but less accurate unless the points are already near nodes). --quiet Don't generate any screen output while running (useful for running in a script). --loggable Print progress messages that are suitable for logging to a file; normally an incrementing counter is printed which is more suitable for real-time display than logging. --logtime Print the elapsed time for each processing step (minutes, seconds and milliseconds). --logmemory Print the maximum allocated and mapped memory for each processing step (MBytes). --language= Select the language specified from the file of translations. If this option is not given and the file exists then the first language in the file will be used. If this option is not given and no file exists the compiled-in default language (English) will be used. --output-html --output-gpx-track --output-gpx-route --output-text --output-text-all Generate the selected output file formats (HTML, GPX track file, GPX route file, plain text route and/or plain text with all nodes). If no output is specified then all are generated, specifying any automatically disables those not specified. --output-none Do not generate any output or read in any translations files. --output-stdout Write to stdout instead of a file (requires exactly one output format option, implies '--quiet'). --profile= Specifies the name of the profile to use. --transport= Select the type of transport to use, can be set to: + foot = Foot + horse = Horse + wheelchair = Wheelchair + bicycle = Bicycle + moped = Moped (Small motorcycle, limited speed) + motorcycle = Motorcycle + motorcar = Motorcar + goods = Goods (Small lorry, van) + hgv = HGV (Heavy Goods Vehicle - large lorry) + psv = PSV (Public Service Vehicle - bus, coach) Defaults to 'motorcar', this option also selects the default profile information if the '--profile' option is not given and a profile matching the transport name is found. --shortest Find the shortest route between the waypoints. --quickest Find the quickest route between the waypoints. --lon1=, --lat1= --lon2=, --lat2= ... --lon99=, --lat99= The location of the waypoints that make up the start, middle and end points of the route. Up to 99 waypoints can be specified and the route will pass through each of the specified ones in sequence. The algorithm will use the closest node or point within a segment that allows the specified traffic type. --reverse Find a route between the waypoints in reverse order. --loop Find a route that returns to the first waypoint after the last one. --heading= Specifies the initial direction of travel at the start of the route (from the lowest numbered waypoint) as a compass bearing from 0 to 360 degrees. --highway-= Selects the percentage preference for using each particular type of highway. The value of can be selected from: + motorway = Motorway + trunk = Trunk + primary = Primary + secondary = Secondary + tertiary = Tertiary + unclassified = Unclassified + residential = Residential + service = Service + track = Track + cycleway = Cycleway + path = Path + steps = Steps + ferry = Ferry Default value depends on the profile selected by the --transport option. --speed-= Selects the speed limit in km/hour for each type of highway. Default value depends on the profile selected by the --transport option. --property-= Selects the percentage preference for using each particular highway property The value of can be selected from: + paved = Paved (suitable for normal wheels) + multilane = Multiple lanes + bridge = Bridge + tunnel = Tunnel + footroute = A route marked for foot travel + bicycleroute = A route marked for bicycle travel Default value depends on the profile selected by the --transport option. --oneway=[0|1] Selects if the direction of oneway streets are to be obeyed (useful to not obey them when walking). Default value depends on the profile selected by the --transport option. --turns=[0|1] Selects if turn restrictions are to be obeyed (useful to not obey them when walking). Default value depends on the profile selected by the --transport option. --weight= Specifies the weight of the mode of transport in tonnes; ensures that the weight limit on the highway is not exceeded. Default value depends on the profile selected by the --transport option. --height= Specifies the height of the mode of transport in metres; ensures that the height limit on the highway is not exceeded. Default value depends on the profile selected by the --transport option. --width= Specifies the width of the mode of transport in metres; ensures that the width limit on the highway is not exceeded. Default value depends on the profile selected by the --transport option. --length= Specifies the length of the mode of transport in metres; ensures that the length limit on the highway is not exceeded. Default value depends on the profile selected by the --transport option. The meaning of the parameter in the command line options is slightly different for the highway preferences and the property preferences. For the highway preference consider the choice between two possible highways between the start and finish when looking for the shortest route. If highway A has a preference of 100% and highway B has a preference of 90% then highway A will be chosen even if it is up to 11% longer (100/90 = 111%). For the highway properties each highway either has a particular property or not. If the preference for the property is 60% then a highway with the property has a preference of 77% (sqrt(60%)) and one without has a preference of 63% (sqrt(100-60%)). A highway with the property will be chosen even if it is up to 22% longer than one without the property (77/63 = 122%). The overall preference for each highway segment is the product of the preference for the highway type and all of the preferences for the highway properties. Example usage (motorcycle journey, scenic route, not very fast): router --dir=data --prefix=gb --transport=motorcycle --highway-motorway=0 \ --highway-trunk=0 --speed-primary=80 --speed-secondary=80 --quickest This will use the files 'data/gb-nodes.mem', 'data/gb-segments.mem' and 'data/gb-ways.mem' to find the quickest route by motorcycle not using motorways or trunk roads and not exceeding 80 km/hr. filedumper ---------- This program is used to extract statistics from the database, extract particular information for visualisation purposes or for dumping the database contents. Usage: filedumper [--version] [--help] [--dir=] [--prefix=] [--statistics] [--visualiser --latmin= --latmax= --lonmin= --lonmax= --data=] [--dump [--node= ...] [--segment= ...] [--way= ...] [--turn-relation= ...] [--errorlog= ...]] [--dump-osm [--no-super] [--latmin= --latmax= --lonmin= --lonmax=]] [--dump-visualiser [--data=node] [--data=segment] [--data=turn-relation] [--data=errorlog]] --version Print the version of Routino. --help Prints out the help information. --dir= Sets the directory name in which to read the local database. Defaults to the current directory. --prefix= Sets the filename prefix for the files in the local database. --statistics Prints out statistics about the database files. --visualiser Selects a data visualiser mode which will output a set of data according to the other parameters below. --latmin= --latmax= The range of latitudes to print the data for. --lonmin= --lonmax= The range of longitudes to print the data for. --data= The type of data to output, can be selected from: o junctions = segment count at each junction. o super = super-node and super-segments. o waytype-* = segments of oneway, cyclebothways or roundabout type. o highway-* = segments of the specified highway type (e.g. highway-primary to display segments ofprimary roads). o transport-* = segments allowing the specified transport type (e.g. transport-foot to display segments accessible on foot). o turns = turn restrictions. o speed = speed limits. o weight = weight limits. o height = height limits. o width = width limits. o length = length limits. o property-* = segments having the specified property (e.g. property-paved to display segments of paved highway). o errorlogs = errors logged during parsing. --dump Selects a data dumping mode which allows looking at individual items in the databases (specifying 'all' instead of a number dumps all of them). More than one of the following parameters can be specified on the command line. --node= Prints the information about the selected node number (internal number, not the node id number in the original source file). --segment= Prints the information about the selected segment number. --way= Prints the information about the selected way number (internal number, not the way id number in the original source file). --turn-relation= Prints the information about the selected turn relation number (internal number, not the relation id number in the original source file). --errorlog= Prints the information about the selected error log that was stored when the data was parsed. --osm-dump Dumps the contents of the database as an OSM format XML file, the whole database will be dumped unless the latitude and longitude ranges are specified. --no-super The super segments will not be output. --latmin= --latmax= The range of latitudes to dump the data for. --lonmin= --lonmax= The range of longitudes to dump the data for. --dump-visualiser Dumps the contents of the database as HTML formatted items for display in the visualiser web page. --data=node Prints the information about the selected node number (internal node number, not from the original source file). --data=segment Prints the information about the selected segment number as if it was a way (internal segment number, unrelated to original source file). --data=turn-relation Prints the information about the selected turn relation number (internal turn relation number, not from the original source file). --data=errorlog Prints the information about the selected error log that was stored when the data was parsed. filedumperx ----------- This program is a modified version of filedumper that will dump out the contents of the intermediate data that is saved by planetsplitter after processing using the --keep or --changes option. This is intended for test purposes only and gives no useful information about the routing database. Usage: filedumperx [--version] [--help] [--dir=] [--prefix=] [--dump [--nodes] [--ways] [--route-relations] [--turn-relations]] --version Print the version of Routino. --help Prints out the help information. --dir= Sets the directory name in which to read the local database. Defaults to the current directory. --prefix= Sets the filename prefix for the files in the local database. --dump Dumps the complete set of data in the intermediate files that are written by planetsplitter using the --keep or --changes options. --nodes Dumps the node data. --ways Dumps the way data. --route-relations Dumps the route relation data. --turn-relations Dumps the turn relation data. -------- Copyright 2008-2015 Andrew M. Bishop. routino-3.2/doc/NEWS.txt 644 233 144 107440 13061246431 10355 0Version 3.2 of Routino released : Sun Mar 12 2017 ------------------------------------------------- Bug fixes: Don't crash if the start & finish of a route are the same point (some cases). Update installation instructions in case Apache root is not '/var/www'. Improve messages if default profiles, translations or tagging files not found. Fix an error in filedumperx detected by gcc-6 indentation checker. Ensure that selecting a language web-page defaults to that language output. Ensure that a language that is missing some translations still get valid HTML. Fix Perl scripts that include others (current directory not on include path). Web pages: Update to use the latest version of Leaflet (0.7.7). Move the route buttons to be above the waypoints so they stay on screen. Remove MapQuest as an optional tile source (no longer available). Adjust some CSS and HTML so that the layout is preserved when zooming. Translations: Updated French, German, Polish & Russian translations. OSM tagging: Handle more tags like access:foot=* by translating them to foot=*. router: Ignore junctions forbidden by turn restrictions when describing route. Extras: Don't crash in the statistics dumper if some ways are *very* long. Note: This version is compatible with databases from versions 2.7.1 - 3.1.1. Version 3.1.1 of Routino released : Sun Mar 6 2016 -------------------------------------------------- Bug fixes: Updated the version number in the executables to "3.1.1". There are no other changes compared to version 3.1. Version 3.1 of Routino released : Sat Mar 5 2016 ------------------------------------------------ Bug fixes: Make the whole of the highlighted entry on the webpage clickable. Fix Makefiles so that 'make -j 4' works. Fix Makefiles so that 'make test' works from a clean directory. Fix bug on webpage with 'oneway' or 'turns' in the URL arguments. Print error message on webpage if geolocation function unavailable. Fix bug where the optimum end of the route was not being found. Reduce the preference for service roads in the default routing profile. Remove literal type conversion error when validating profile values. Library: Add a version number to the shared library (SONAME). Include the version number of Routino into the library as a string variable. Add loop and reverse route as options to the library. planetsplitter: Use 64-bit numbers for the node ID when processing an OSM file. router: Change file output formats so that waypoint numbers are included. When calculating a route with loop and reverse start route from waypoint 1. Calculate the route from both ends towards the middle. Translations: Change the names of the GPX route waypoints in translations.xml. Updated French and German translations. Documentation Updated the instructions for setting up on Apache (version 2.4.x). Web pages: Add a loop & reverse checkbox, replace loop & reverse buttons with icons. Extras: Add scripts to process the database and create maps of highway statistics. Note: This version is compatible with databases from versions 2.7.1 - 3.0. Version 3.0 of Routino released : Sat Sep 12 2015 ------------------------------------------------- Bug fixes: Use a single definition of MAX_SEG_PER_NODE to avoid confusion. Fix bug with built-in translation strings if no XML translations available. Fix bug with makefiles related to creating new translations. Remove some pthread code that was still there when compiling without pthreads. Fix a use-after-free memory error and use of uninitialised allocated memory. Ensure that allocated strings are long enough for temporary filenames. Programs: Add a '--version' option to all of the programs. Source Code: Various C language cleanups including using '-pedantic' compiler option. Various changes to allow compiling with Microsoft Visual Studio C compiler. Various changes to allow compiling with MinGW or Cygwin on Microsoft Windows. Makefile updates: 'make clean' = release, 'make distclean' = SVN repository. API: Create a library API that can perform routing functions. OSM tagging: Remove cycle_barrier and bicycle_barrier since they do not block bicycles. Translations: Updated Dutch and German translations. Added Hungarian and Polish translations provided through translation web page. Documentation: Add meta tags to HTML to help mobile devices, tidy up the CSS. Create instructions for compiling on Microsoft Windows. Create API description for Routino library usage. Web pages: Allow drag-and-drop of waypoints within the list and onto the map. Note: This version is compatible with databases from versions 2.7.1 - 2.7.3. Version 2.7.3 of Routino released : Sat Nov 8 2014 -------------------------------------------------- Bug fixes: Limit the property preference ratio to 100 instead of 10000. Don't allocate memory for sorting that won't be used. planetsplitter: Added an option to print out the allocated/mapped memory at each step. Speed up database generation by compacting results after each pruning step. Speed up database generation by sorting nodes geographically before pruning. Reduce memory use while generating the database. router: Added the options to print out time and allocated/mapped memory at each step. Translations: Updated German translations. Note: This version is compatible with databases from versions 2.7.1 & 2.7.2. Version 2.7.2 of Routino released : Thu June 26 2014 ---------------------------------------------------- Bug fixes: Make the visualiser display all segments including those crossing the border. Fix two errors that cause crashes only on 64-bit systems. planetsplitter / router: Increase the size of the caches for the slim programs by a factor of four. Translations: Updated Russian translations. Updated German translations. Note: This version is compatible with databases from version 2.7.1. Version 2.7.1 of Routino released : Sat May 17 2014 --------------------------------------------------- Bug fixes: Fix typo in documentation for command to get SVN version. Fix router crash when waypoint is on roundabout. Don't duplicate super-segments when merging them with normal segments. Change routing instructions for bicycle if highways allow cycling both ways. Make translation script work with older versions of Perl. Fix router crash if fewer than two waypoints are specified. Revert router speed decrease with special-case tagging rules. Fix web page search function when it returns non-ASCII text. Fix router failure due to invalid assumption about allowed U-turn. Fix bug with updating XML files in web/data directory (Makefile error). Fix router web page error due to absence of cyclebothways property entry. Fix results error if a waypoint node was passed again on way to next waypoint. Fix router crash when route contains consecutive coincident waypoints. Fix bug with slightly incorrect distances when pruning short segments. Test cases: Create new test case for roundabout waypoint bug fixed in this version. Create new test case for invalid U-turn assumption bug fixed in this version. Create new test case for cycling both ways. Create new test case for consecutive coincident waypoints. router: Remove cyclebothways as a property that can be used as a routing preference. Web pages: Disallow route calculation if fewer than two waypoints are selected. Update visualiser for change of cyclebothways handling. Translations: Updated Russian translations. Updated German translations. Note: This version is not compatible with databases from previous versions. Version 2.7 of Routino released : Sat Mar 22 2014 ------------------------------------------------- Bug fixes: Fix web-page CGI bug that did not allow more than 9 waypoints to be routed. Fix typo in documentation strings in filedumper program. Fix error in function prototype that stopped 64-bit node type being used. Don't lose super-segments when merging them with normal segments. Don't exceed the database lat/long limits when searching for visualiser data. planetsplitter: Don't overflow (and wrap-around) conversions of lengths, weights etc. Add some new formats of length, weight and speed parsing. Add .xz uncompression as a compile-time option (default is disabled). router: Remove ancient undocumented option to specify lat/lon without --lat/--lon. Add a '--output-stdout' option to output the route in a selected format. Add a '--reverse' option to calculate a route in the reverse order. Add a '--loop' option to calculate a route that returns to the first waypoint. Output valid HTML4 (use strict DTD and use numeric entity for apostrophe). OSM tagging: Allow bicycles both ways on certain oneway roads if tagging allows. Handle "access=bus" like "access=psv". Configuration Files: Updated Dutch translations. Updates to the XML parser tagging rules. Added French translations for the routing output. Documentation: Update the algorithm documentation for finding the shortest path. Update documentation HTML to strict 4.01 DTD. Web pages: Some changes to HTML, CSS formatting and Javascript to improve usability. Added a French translation of the router web page. Add the option to choose between OpenLayers and Leaflet for map rendering. Check compatible with OpenLayers v2.13.1 and make this the default. Create the router and visualiser pages from templates and translated phrases. Note: This version has removed specific support for IE6 and IE7 browsers. Note: This version is compatible with databases from version 2.6 (although cycling both ways on one-way highways requires a database update). Version 2.6 of Routino released : Sat Jul 6 2013 ------------------------------------------------ Bug fixes: Force '...' in tagging rules to match even with no input tags. Built-in translations for GPX-route file gave nonsense durations. Handle some cases that potentially caused divide by zero (not crashes). Compilation: All configuration is now contained in the top level file Makefile.conf. Default to using -ffast-math option for faster maths and glibc workaround. Code improvements: Improve router internal data structures to increase performance. Add another layer of caching to significantly speed up slim mode operation. Add a layer of file buffering to significantly speed up reading/writing. Enable more compile-time warnings and fix them. planetsplitter: Create a binary log file to allow searching for errors geographically. Simplify processing for changes (segment files not kept). Don't prune isolated regions for transport types we don't have. Web pages (visualiser): Allow displaying the error logs on the map. Allow selecting any item displayed and showing more information about it. Extras: Create a separate directory to put extra (non-essential) programs and scripts. * tagmodifier - a tagging rule testing program. * errorlog - a script to summarise the planetsplitter error log. * plot-time - a script to plot a graph of the planetsplitter execution time. * find-fixme - search an OSM file for "fixme" tags and display them on a map. Note: This version is not compatible with databases from previous versions. Version 2.5.1 of Routino released : Sat Apr 20 2013 --------------------------------------------------- Bug fixes: Stop contradictory log error messages about 'access=foot' etc. Move the HTML charset definition to within the first 1024 bytes of file. Don't prune short segments in some cases that would change routing. Fix bug with pruning straight highways around loops. Fix some bugs with installation documents and scripts. Fix Javascript to work with OpenLayers v2.11 again. Fix XML character quoting for special characters in 7-bit ASCII range. Fix bug with parsing XML containing UTF-8 characters four bytes long. Fix two bugs for simple routes with the option of not passing a super-node. planetsplitter: Improve the pruning of straight highways (detect larger straight sections). Configuration Files: Accept some more tag values for OSM file parsing. Handle alternate forms of mini roundabouts (junction=roundabout). Note: This version is compatible with databases from version 2.4 / 2.4.1 / 2.5. Version 2.5 of Routino released : Sun Feb 9 2013 ------------------------------------------------ General: Replace 'motorbike' with 'motorcycle' everywhere. planetsplitter/tagmodifier: Major changes to file reading: Faster XML parser. Reads PBF files natively (not for changes, not tagmodifier). Reads o5m/o5c files natively (not tagmodifier). Reads bzip2 or gzip compressed files natively (if compiled for them). Data can no longer be read from standard input. planetsplitter: Report errors with self-intersecting ways, clarify some other error messages. Configuration Files: Tagging configuration can now use an rule. The tagging configuration and rules can be nested. Change the way that the multilane property is derived from the lanes tag. Accept some more tag values for OSM file parsing. German translation now supports roundabouts. Documentation: Describe numerical limits (OSM identifiers and maximum database size). Web pages: Allow different data and tile attributions for each map source. Include MapQuest as an optional tile source. Web pages (visualiser): Allow plotting segments of highways that have a particular property. Note: Starting with this version the planetsplitter and tagmodifier programs will no longer read data from standard input. Note: Existing mapprops.js files need to be updated for this version. Note: This version is compatible with databases from version 2.4 / 2.4.1. Version 2.4.1 of Routino released : Mon Dec 17 2012 --------------------------------------------------- Bug fixes: Fix error with finding routes with low preference values (router). Fix error when searching for default profiles.xml (router). Fix bug with printing log messages when output is not stdout (tagmodifier). Stop various crashes if trying to process file with no data (planetsplitter). Note: This version is compatible with databases from version 2.4. Version 2.4 of Routino released : Sat Dec 8 2012 ------------------------------------------------ Bug fixes: Fix pruning short segments in slim mode (gave different results to non-slim). Fix error with segment lengths for some segments from ways that are areas. Fix latent bug with route relations when compiled for 64-bit way/relation IDs. router/planetsplitter: Replace all debugging "assert" statements with fatal error messages. planetsplitter: Delete ways that are not used from the output files (names remain though). Delete turn relations that are not used from the output files. Speed up the processing, mainly by reducing the number of I/O operations. Change the pruning of isolated regions to look at each transport type. Slim and normal mode now give identical results (sorting preserves order). Log some more error cases, clarify some existing ones. Added a --append option which must be used to append files to existing data. Added a --keep option which can be used to keep parsed, sorted data. Added a --changes option to allow appending OSM change files (.osc files). Configuration Files: Accept some more tag values for OSM file parsing. summarise-log.pl Can now generate an HTML version with links to OSM information for each item. Deleted obsoleted files: The CGI scripts customrouter.cgi and customvisualiser.cgi have been removed. The noscript.cgi and noscript.html web pages have been removed. Note: Files deprecated in version 2.3 have been removed in version 2.4. Note: This version is not compatible with databases from previous versions. Version 2.3.2 of Routino released : Sat Oct 6 2012 -------------------------------------------------- Bug fixes: Fix for highway type visualiser (was missing one-way segments). Fix a real-life routing problem with oneway streets and super-segments. Find a route even if an end waypoint forbids the specified transport. Include the final junction in the HTML output (was missed in some cases). Test cases: Create new test cases for two bugs fixed in this version. router: Improve the error message for some cases of failing to route. planetsplitter: Log an error if a foot/bicycle way doesn't allow foot/bicycle transport. Do not mark nodes as super-nodes if they allow no transport types through. Web pages (visualiser): Allow plotting nodes that block each transport type. Configuration Files: Change the default license/copyright notice in the translations.xml file. Note: This version is compatible with databases from versions 2.2 or 2.3/2.3.1. Version 2.3.1 of Routino released : Sat Aug 11 2012 --------------------------------------------------- Bug fixes: Create marker-XXX-grey.png icon which gets used before Javascript removes it. Provide full set of 99 marker icons instead of just 19. Add more limit icons (0.0-0.9, 20.0-40.0 and 161-200). Fix router web page problem with placing initial marker (coords not updated). Hide waypoints so that they are not visible when Javascript adds them to HTML. Fix web page font problems by choosing an explicit font pixel-size in the CSS. Fix potential crash in XML files containing lots of key/value pairs in a tag. Web pages (router): Unused waypoints show as blank rather than 0,0. Add a button to insert a waypoint to close the loop. Write the command line and execution time to the log file. Note: This version is compatible with databases from versions 2.2 or 2.3. Version 2.3 of Routino released : Sat Jul 21 2012 ------------------------------------------------- Bug fixes: Handle OSM files that contain changesets (don't raise an error). Force bicyle/foot routes to allow bicycle/foot transport. Fix problem running CGIs on Macs (md5 program name). Fix bug with pruning straight highways (uninitialised data). Fix bug with XML parsing error log (could miss some unrecognised tags). Web pages (all): Make compatible with OpenLayers v2.12 (but don't change the install script). Make all HTML files standards compliant. Allow the HTML files to parse the query string instead of using a CGI. Move all user-editable parameters to paths.pl and mapprops.js. Web pages (router): Add a button to put a marker at the current location (Javascript geolocation). Add a button to centre the map on a given marker. Automatically insert the waypoints in the HTML from the JavaScript. Added a German language router web page translation. Add buttons to switch between lat/long and placename with Nominatim lookups. Web pages (visualiser): Allow plotting segments of each highway type. Allow plotting segments accessible to each transport type. planetsplitter: Add a new '--logtime' option that prints the elapsed time of each step. Make the sort functions multi-threaded (run-time option). Improve the XML parsing speed slightly. Note: This version is compatible with databases from versions 2.2. Note: Existing mapprops.js and paths.pl files need to be updated to include new items for this version. Note: Existing OpenLayers installations must be updated if they were installed with older Routino provided script (the old OpenLayers.js will not work). Note: The CGI scripts customrouter.cgi and customvisualiser.cgi are deprecated and will be removed in version 2.4 Note: The noscript.cgi and noscript.html web pages are deprecated and will be removed in version 2.4 Version 2.2 of Routino released : Sat Mar 3 2012 ------------------------------------------------ Bug fixes: Fix some Makefile bugs. Fix XML parsing (previously it allowed invalid XML comments). Fix errors in HTML and GPX output files (highway names and bearings). Fix errors in visualiser CGI related to oneway streets and in slim mode. Ensure that no non-initialised memory is written to disk. OSM tagging: Parse information about roundabouts and store it in the database. Documentation: Update documentation to reflect changes in program usage and function. Web pages: Change to OpenLayers v2.11. Move the map preferences (ranges and URLs) to a separate file. Prepare the visualiser.html web page for translation. The customrouter script should now pick up the preferred language. planetsplitter: When discarding duplicate segments prefer to discard those that are areas. Ensure that XML file is OSM version 0.6 format. Add a new option to prune nodes and/or segments (enabled by default) - that form a small isolated sub-network. - that are very short. - that are not needed to represent a straight highway. router: Change the format of the text file output (not the all points text file). Output better HTML directions for roundabouts (e.g. take second exit). Describe mini-roundabouts as "roundabout" rather than "junction". filedumper: Ensure that all nodes needed for segments are included when dumping a region. Include a bounding box when dumping a region. *** Important Note: The tagging.xml files from Routino v2.1.1 or earlier *** *** contain invalid XML that will not be allowed by Routino v2.2 or later. *** Note: The format of the text file output has changed in this version. Note: This version is not compatible with databases from earlier versions. Version 2.1.2 of Routino released : Sat Nov 12 2011 --------------------------------------------------- Bug fixes: Speed up the routing by a factor of 3 for slim mode by copying data to RAM. Speed up routing & reduce memory use by a factor of 2.5 by stopping earlier. Delete profiles.js and profiles.pl when cleaning up (make clean). Improve output for translated versions (highway type names and text files). Fix the summarise-log.pl script for segments which are loops. Fix invalid XML syntax in tagging.xml file. Configuration Files: Add extra tagging rules to handle problems found in the error log for UK. Added Russian translations for output files. Documentation: Improve the documentation for the tagging rule configuration file. Note: This version is compatible with databases from version 2.1 or 2.1.1. Version 2.1.1 of Routino released : Sun Oct 23 2011 --------------------------------------------------- Bug fixes: Speed up the routing by a factor of 5 by improving data handling functions. Speed up database generation by reducing the default number of iterations. Fix the handling of the 'except' tag on turn restrictions. Fix the 'make install' option for the XML files. Add some more typecasts when printing data from filedumper program. Make the CGI script more robust if shortest/fastest is not passed in. Note: This version is compatible with databases from version 2.1. Version 2.1 of Routino released : Mon Oct 3 2011 ------------------------------------------------ Bug fixes: Fix bug in pathological cases with binary search (don't crash). Make stricter checks for closest nodes just like in v2.0.3 for segments. Fix routing bug where start node is a super-node and finish is close by. OSM tagging: More testing of turn relations; invalid or useless ones are discarded. An error log file can be generated to record parsing and processing errors. Configuration Files: Add new options in the tagging rules XML file. Add extra tagging rules to handle many problems found in the error log for UK. Create special-use tagging rule files for walking, riding and driving. Test cases: Create new test case for bug fixed in v2.0.3. Save expected results to allow future regressions to be found. Note: This version is not compatible with databases from earlier versions. Version 2.0.3 of Routino released : Thu Aug 4 2011 -------------------------------------------------- Bug fixes: Handle start node being a super-node with no previous segment (don't crash). Make stricter checks against the profile when finding the closest segment. Find a valid route if the start and end point are the same location. Choose the better route if one with and one without super-nodes are available. Note: This version is compatible with databases from versions 2.0, 2.0.x. Version 2.0.2 of Routino released : Sun June 26 2011 ---------------------------------------------------- Bug fixes: Fix error with handling ferry routes (were ignored). Force roundabouts to be one-way (was present in v1.5.1). Handle super-nodes with no segments when processing (don't crash). Code improvements: Use C99 standard by default and fix related warnings. More code tidy-up for 32/64 bit node and index types. Free some memory in various places (not serious leaks). Note: This version is compatible with databases from versions 2.0, 2.0.1. Version 2.0.1 of Routino released : Tue June 7 2011 --------------------------------------------------- Bug fixes: Turn relations that specify missing nodes/ways are deleted (don't crash). Shorten the messages printed by planetsplitter to keep below 80 characters. Code improvements: Various code tidy-ups and 32/64 bit node and index improvements. OSM Tagging: Check whether node/way/relation IDs fit in 32-bits (code ready for 64-bits). Note: This version is compatible with databases from version 2.0. Version 2.0 of Routino released : Mon May 30 2011 ------------------------------------------------- Bug fixes: Fix mis-spelling with surface=asphalt tag Routes between two waypoints on the same segment now work. Fix reading of numeric entities from XML files (store as UTF-8 internally). Fix turn description in HTML file (angles were biased to the right). Fix possibility of occasionally missing turn information from output files. Test cases: Added test cases for routing in slim and non-slim modes. Documentation: Update documentation to reflect changes in program usage and function. Install the license file in the documentation directory. OSM tagging: Process the tags associated with turn restriction relations. Remove the roundabout type from the parsing. Add parsing of mini-roundabouts. Configuration Files: Update profiles with new options related to turn restrictions. Web pages: Change to OpenLayers v2.10. Visualiser can display turn restrictions. Put the profile information into separate files and auto-generate them. planetsplitter: Store information about turn restriction relations. Quite a large code re-organisation - now faster and uses less memory. router: Take turn restriction relations into account when routing. Continue same direction of travel at each waypoint (unless dead-end). Add a new option to specify an initial direction to start travel. filedumper: Print out statistics about what highways are included in the database. Version 1.5.1 of Routino released : Sat Nov 13 2010 --------------------------------------------------- Bug fixes: Ensure that enough memory is allocated for filenames. Fix bug that sometimes causes crash when processing route relations. Documentation: Update documentation to reflect changes in program usage and function. Programs: Add an option to make the output more suitable for a log file. Documentation: Update documentation to reflect changes in program usage. Version 1.5 of Routino released : Sat Oct 30 2010 ------------------------------------------------- Bug fixes: Check that number of nodes/segments/ways doesn't exceed numerical limits. Allow 32-bit systems to seek within files larger than 4GB. Allow nearly 4G nodes to be stored instead of 2G before. Added rules to makefile for installation (paths specified in top-level). Stricter checking of UTF-8 in XML files and better UTF-8 output. Improve error message if parsing of command line options fail. Fix bugs in router's --help-profile-json and --help-profile-perl options. Rename heapsort function to allow compilation on Mac OS with no change. Reduce impact of property preferences close to 50% by using sqrt(). Documentation: Update documentation to reflect changes in program usage and function. OSM tagging: Traffic restrictions on nodes are now included in default tagging file. Added processing for ferry routes (as pseudo-highway type 'ferry'). Process foot and bicycle route relations to create new properties. Configuration Files: Added Dutch output translations. Added ferry information to profiles. Added foot and bicycle route relation processing. planetsplitter: The slim mode now includes the output data as well as the temporary data. The slim mode is now a separate executable and not a command line option. Traffic restrictions on nodes are now understood when parsing OSM files. Falls back to installed tagging.xml configuration file as last resort. router: Added a slim mode (as a separate executable and not a command line option). Traffic will not be routed through a node that does not allow it. Falls back to installed profiles.xml & translations.xml files as last resort. filedumper: Added a slim mode (as a separate executable and not a command line option). Web pages: Added Dutch translation of router.html. Version 1.4.1 of Routino released : Sat Jul 10 2010 --------------------------------------------------- Bug fixes: Don't crash if start and finish are the same point. Don't crash if several translations but --language option not used. Don't crash if middle part of route cannot be found. Don't allocate so much memory for intermediate nodes; routes much faster. Fix problem with finding closest segment to the specified point. Documentation: Provide HTML versions of the documentation (copy to web directory at install). Change URL for website to http://www.routino.org/. Configuration Files: Added German output translations. planetsplitter Slight change to algorithm for finding super-nodes. Web pages: Provide HTML versions of the documentation. Change URL for website to http://www.routino.org/. Provide updated HTML files, the same as on the website. Change to OpenLayers v2.9.1 and build custom version if Python available. Version 1.4 of Routino released : Mon May 31 2010 ------------------------------------------------- Bug fixes: Speed up start/via/stop point within segment search algorithm. If no segment is found don't try routing but exit with error. Improve the error messages by adding operating system error info to them. Rewrite of tagging rules fixes bug with wheelchair access allow/deny. Files greater than 2GB can be read/written on 32-bit systems. Fix bug with profile preferences when optimising a route. Stricter check on profile validity before starting routing. planetsplitter: Add --parse-only and --process-only options (for incremental parsing). Allow filenames to be specified on command line (default is still stdin). Improved the '--help' information to describe all options. Remove --transport, --not-highway, --not-property options (use config file). Use tag transformation rules in configuration file not hard-coded. router: Removed compiled-in profiles and use profiles loaded from XML file. Improved the '--help' information to describe all options. Change the name of the --profile-json and --profile-perl options. Allow selection of the outputs to generate (or none). Added HTML route instructions output. GPX route file contains instructions at each waypoint. Read in XML file of translated words/phrases for outputs. Added options to specify file of translations and language to use. Remove copyright.txt file and put information into translations file. filedumper: Improved the '--help' information to describe all options. Added the option to dump an OSM file containing database contents. Web Pages: Combined generic map CSS into one file (not copied in two). Much better support for IE6/7/8 with browser detection but not perfect. Re-organised and tidied up the Javascript. Added button next to waypoints to centre it on map. Added button next to waypoints to set as home location (uses browsser cookie). Create shorter URLs for custom map (ignore default values). Reduced and clarified the amount of editing to customise the Javascript. Made it easier to translate by moving text out of Javascript (not visualiser). Prepared for translated versions of web page (Apache Multiviews). Added option to select language of output. Use HTML output from router to get translated instructions. Version 1.3 of Routino released : Thu Jan 21 2010 ------------------------------------------------- Bug fixes: Ensure output even if the distance between two adjacent route points is small. Correct the determination of waypoints for abbreviated output. Check the command line values for filedumper --dump options. Made the verbose output consistent between different places. OSM tagging: Recognise "designation" tag to determine designated paths. Recognise "steps" tag to determine the highway type. Recognise "wheelchair" tag to determine if wheelchairs are allowed on highway. Recognise "moped" tag to determine if mopeds are allowed on a highway. Recognise "surface" and "paved" tags to determine if a highway is paved. Recognise "lanes" tag to determine if a highway has multiple lanes. Recognise "bridge" tag to determine if a highway is a bridge. Recognise "tunnel" tag to determine if a highway is a tunnel. New Features: Remove "bridleway" and "footway" highway types and use "path" highway instead. Added "steps" as a new highway type separate from the "path" type. Added "wheelchair" and "moped" to the list of possible transports. Added "paved", "multilane", "bridge", "tunnel" to list of highway properties. Web Pages: Updated for new features listed above. Added popup to display instructions for each step in route on mouse-over. Added buttons next to waypoints for: add / remove / move up / move down. Highlight user selectable parts of form in yellow on mouse-over. A few small changes, improved CSS, improved Javascript. router: For each waypoint choose closest point on a segment and not just closest node. Added the ability to set preferences based on highway properties. Changed the text output formats to include bearing and turn information. Version 1.2 of Routino released : Wed Oct 21 2009 ------------------------------------------------- OSM tagging: Recognise tags "vehicle" and "motor_vehicle". Handle duplicate ways in the input OSM file (e.g. concatenation of 2 files). Database: Identical ways are combined to reduce database size (~80% fewer ways stored). Routing: Fix weight, height, width, length restriction routing. Allow up to 99 waypoints to be specified instead of 9. Visualiser: Don't display speed limits for tracks and paths unless a value is set. Draw all super-segments that cross the selected boundary. Web Pages: A few small changes, improved CSS, improved Javascript. Changed marker colour when waypoint not selected. planetsplitter: Optional slim mode uses minimal memory at the expense of temporary files. router: Less CPU time for routing (~30% less). filedumper: Allow dumping individual nodes, segments and ways (for debug). Version 1.1 of Routino released : Sat Jun 13 2009 ------------------------------------------------- Inputs: Improve parsing of OSM file (imperial units). Ignore nodes that are missing from the input OSM file. Outputs: Create GPX route files as well as GPX track files. Read in an optional copyright.txt file and include contents in output. Make better choices about what to output in the abbreviated text file. Routing: Allow generating a route with intermediate waypoints. Use preferences for highway types instead of yes/no choice. Choice of closest node to start/finish points ensures transport allowed. Visualiser: Added data extraction function for viewing routing database data. Web Pages: Include full set of web pages for creating customised online router. Documentation: Included NEWS.txt file. Included documentation for installation of web pages. Version 1.0 of Routino released : Wed Apr 08 2009 ------------------------------------------------- First version. routino-3.2/doc/INSTALL-MS-WIN.txt 644 233 144 13422 12572106465 11643 0 Routino : Installation on MS Windows ==================================== Using Cygwin ------------ Cygwin is a large collection of GNU and Open Source tools which provide functionality similar to a Linux distribution on Windows. A Cygwin DLL provides substantial POSIX API functionality therefore providing direct compatibility for most UNIX source code. Since Cygwin aims to replicate a Linux-like system on Windows it is the simplest method of compiling Routino. The disadvantage is that all programs compiled with Cygwin require a number of runtime Cygwin libraries which may introduce a runtime speed penalty. The installer for Cygwin can be downloaded from http://cygwin.org/; there are 32-bit and 64-bit versions available. For compiling Routino the Cygwin installer should be run and the following packages selected (any dependencies will be automatically be selected at the next step): * base packages * gcc-core (in 'Devel' menu) * make (in 'Devel' menu) * libbz2-devel (in 'Libs' menu) * zlib-devel (in 'Libs' menu) * perl (in 'Perl' menu) To compile Routino open the "Cygwin Terminal" change to the Routino source directory and compile using the make command. The programs that are compiled 'planetsplitter', 'router' will require the Cygwin runtime to be able to run them. The library 'libroutino.so' should be usable with other Cygwin compiled programs. Native Compilation ------------------ Routino has limited support in the source code for compiling on Microsoft Windows. This includes a set of functions that can replace the mmap() and munmap() UNIX functions which are not available on Microsoft Windows. The source code should be downloaded, either as a release version file or from subversion - no instructions are provided for this step. The release versions include some files (mainly the web icons) which are not included in the subversion source (and which may be difficult to create on Windows). Using Microsoft Visual C - - - - - - - - - - - - The Routino source code (for the router at least) has been modified so that it will compile with the Microsoft Visual C compiler. Compiling Routino with MSVC is not supported directly since there is only support for using Makefiles in Routino. The files that need to be compiled for the Routino router can be found from the Makefile in the src directory listed in the 'ROUTER_OBJ' variable. To compile the router in slim mode the pre-processor definition 'SLIM=0' must be set and for non-slim mode 'SLIM=1' must be set. The default directory for the Routino data files must be set in the 'ROUTINO_DATADIR' pre-processor variable. If the router command line '--data' option is going to be used then this variable can be set to any value. Since Microsoft Visual C does not fully support the C99 standard it is necessary to tell the compiler how to handle the inline functions. This can be done by passing in the command line option '-Dinline=__inline' to the C compiler. Using MinGW - - - - - - MinGW is the "Minimalist GNU for Windows" which includes some of the common GNU programs; principally gcc and related programs for software development. The installer for MinGW can be downloaded from 'http://mingw.org/'. For compiling Routino the MinGW installer should be run and the following packages selected: * mingw-base * msys-base * mingw32-pthreads-w32 * mingw32-libz (dev package) * msys-perl To compile Routino open a DOS command window and set the path to the installed MinGW and MSYS software. For example if MinGW was installed in the 'C:/MinGW' directory then the path needs to be set to 'C:\MinGW\bin;C:\MinGW\MSYS\1.0\bin'. From within this DOS command window change to the Routino source directory and compile using the MinGW version of make with this command 'mingw32-make'. After compiling Routino a set of library files are created ('routino.dll', 'routino.def' and 'routino.lib'). These should be usable for linking with programs compiled with MSVC. Using MinGW-W64 - - - - - - - - MinGW-w64 is an alernative implementation of the same concept as MinGW but allows for compilation to 32-bit or 64-bit executables. The website for MinGW-w64 is 'http://mingw-w64.org/' but the downloads are available from 'http://win-builds.org/'. Installation of MinGW-w64 is slightly different from that for MinGW but a similar set of packages will be required. The compilation method for MinGW-w64 is the same as for MinGW and the same files will be compiled, the only difference is that by default a 64-bit version will be created. Limitations - - - - - - A native Microsoft Windows compilation of Routino is more complicated than compiling on Linux, other UNIX system or Cygwin. This is probably not an option if you are unfamiliar with software development on Microsoft Windows. The size of files that can be accessed with an MSVC or MinGW (32-bit) compiled version of Routino is limited to 32-bits (less than 4 GB). The MinGW-w64 compiler on 64-bit is able to handle larger files (bigger than 4 GB). The Windows operating system does not have a function equivalent to the 'fork()' function on UNIX. This means that it is not possible to use the planetsplitter program's built-in file decompression with an MSVC or MinGW compiled version of Routino. Example Web Pages ----------------- No instructions are available for using the Routino example web pages with the Microsoft Web server (IIS). For information on setting up Apache see the "Example Web Pages" section of the main installation instructions. -------- Copyright 2008-2015 Andrew M. Bishop. routino-3.2/doc/html/ 40755 233 144 0 13061247717 7732 5routino-3.2/doc/html/data.html 644 233 144 14225 12520734766 11575 0 Routino : Data

Routino : Data

Data

A router relies on data to be able to find a route.

OpenStreetMap Data

The data that is collected by the OpenStreetMap project consists of nodes, ways and relations.
Node
A node is a point that has a latitude and longitude and attributes that describe what type of point it is (part of a way or a place of interest for example).
Way
A way is a collection of nodes that when joined together define something (for example a road, a railway, a boundary, a building, a lake etc). The ways also have attributes that define them (speed limits, type of road and restrictions for example).
Relation
A relation is a collection of items (usually ways) that are related to each other for some reason (highways that make up a route for example).
The OpenStreetMap Wiki explains the data much better than I can.

Router Data

The information that is needed by a routing algorithm is only a subset of the information that is collected by the OpenStreetMap project. For routing what is required is information about the location of roads (or other highways), the connections between the highways and the properties of those highways.
Location of highways (nodes)
The locations of things is provided by the nodes from the OpenStreetMap data. The nodes are the only things that have coordinates in OpenStreetMap and everything else is made up by reference to them. Not all of the nodes are useful, only the ones that are part of highways. The location of the nodes is stored but none of the other attributes are currently used by the router.
Location of highways (ways)
The location of the highways is defined in the OpenStreetMap data by the ways. Only the highway ways are useful and the other ways are discarded. What remains is lists of nodes that join together to form a section of highway. This is further split into segments which are individual parts of a way connected by two nodes.
Properties of highways (tags)
The ways that belong to highways are extracted from the data in the previous step and for each way the useful information for routing is stored. For the router the useful information is the type of highway, the speed limit, the allowed types of transport and other restrictions (one-way, minimum height, maximum weight etc).
Connections between highways
The connections between highways are defined in the OpenStreetMap data by ways that share nodes. Since the ways may join in the middle and not just the ends it is the segments defined above that are not part of the OpenStreetMap data that are most important.
The information that is extracted from the OpenStreetMap data is stored in an optimised way that allows the routing to be performed quickly.

Interpreting Data Tags

The tags are the information that is attached to the nodes and ways in OpenStreetMap. The router needs to interpret these tags and use them when deciding what type of traffic can use a highway (for example).

There are no well defined rules in OpenStreetMap about tagging, but there is guidance on the OpenStreetMap Wiki "Map_Features" page. This describes a set of recommended tags but these are not universally used so it is up to each application how to interpret them.

The tagging rules that the router uses are very important in controlling how the router works. With Routino the data tags can be modified when the data is imported to allow customisation of the information used for routing.

Problems With OpenStreetMap Data

The route that can be found is only as good as the data that is available. This is not intended as a criticism of the OpenStreetMap data; it is generally good.

There are some problems that are well known and which affect the router. For example highways might be missing because nobody has mapped them. A highway may be wrongly tagged with incorrect properties, or a highway might be missing important tags for routing (e.g. speed limits). There can also be problems with highways that should join but don't because they do not share nodes.

A lot of these problems can be found using the interactive data visualiser that uses the same Routino routing database.

routino-3.2/doc/html/output.html 644 233 144 37671 12520735062 12224 0 Routino : Output

Routino : Output

Router Output

There are three different formats of output from the router, HTML, GPX (GPS eXchange) XML format and plain text with a total of five possible output files:
  • HTML route instructions for each interesting junction.
  • GPX track file containing every node.
  • GPX route file with waypoints at interesting junctions.
  • Plain text description with the interesting junctions.
  • Plain text file with every node.
The "interesting junctions" referred to above are junctions where the route changes to a different type of highway, more than two highways of the same type meet, or where the route meets but does not take a more major highway. When the route follows a major road this definition eliminates all junctions with minor roads.

The output files are written to the current directory and are named depending on the selection of shortest or quickest route. For the shortest route the file names are "shortest.html", "shortest-track.gpx", "shortest-route.gpx", "shortest.txt" and "shortest-all.txt", for the quickest route the names are "quickest.html", "quickest-track.gpx", "quickest-route.gpx", "quickest.txt" and "quickest-all.txt".

The HTML file and GPX files are written out according to the selected language using the translations contained in the translations.xml configuration file. The text files contains untranslated header lines (in English) but the data is translated.

HTML Route Instructions

The HTML route instructions file contains one line for the description of each of the interesting junctions in the route and one line for each of the highways that connect them. The coordinates are also included in the file but are not visible because of the style definitions.

An example HTML file output is below (some parts are missing, for example the style definitions):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<!-- Creator : Routino - http://www.routino.org/ -->
<!-- Source : Based on OpenStreetMap data from http://www.openstreetmap.org/ -->
<!-- License : http://www.openstreetmap.org/copyright -->
<HEAD>
<TITLE>Shortest Route</TITLE>
...
</HEAD>
<BODY>
<H1>Shortest Route</H1>
<table>
<tr class='c'><td class='l'>1:<td class='r'>51.524658 -0.127877
<tr class='n'><td class='l'>Start:<td class='r'>At <span class='w'>Waypoint</span>, head <span class='b'>South-East</span>
<tr class='s'><td class='l'>Follow:<td class='r'><span class='h'>Woburn Place (A4200)</span> for <span class='d'>0.251 km, 0.3 min</span> [<span class='j'>0.3 km, 0 minutes</span>]
<tr class='c'><td class='l'>2:<td class='r'>51.522811 -0.125781
<tr class='n'><td class='l'>At:<td class='r'>Junction, go <span class='t'>Straight on</span> heading <span class='b'>South-East</span>
<tr class='s'><td class='l'>Follow:<td class='r'><span class='h'>Russell Square (A4200)</span> for <span class='d'>0.186 km, 0.2 min</span> [<span class='j'>0.4 km, 1 minutes</span>]
<tr class='c'><td class='l'>3:<td class='r'>51.521482 -0.124123
<tr class='n'><td class='l'>At:<td class='r'>Junction, go <span class='t'>Straight on</span> heading <span class='b'>South-East</span>
<tr class='s'><td class='l'>Follow:<td class='r'><span class='h'>Southampton Row (A4200)</span> for <span class='d'>0.351 km, 0.4 min</span> [<span class='j'>0.8 km, 1 minutes</span>]
...
<tr class='c'><td class='l'>21:<td class='r'>51.477678 -0.106792
<tr class='n'><td class='l'>At:<td class='r'>Junction, go <span class='t'>Slight left</span> heading <span class='b'>South-East</span>
<tr class='s'><td class='l'>Follow:<td class='r'><span class='h'>Vassall Road</span> for <span class='d'>0.138 km, 0.2 min</span> [<span class='j'>6.3 km, 6 minutes</span>]
<tr class='c'><td class='l'>22:<td class='r'>51.478015 -0.104870
<tr class='n'><td class='l'>At:<td class='r'>Junction, go <span class='t'>Straight on</span> heading <span class='b'>East</span>
<tr class='s'><td class='l'>Follow:<td class='r'><span class='h'>Vassall Road</span> for <span class='d'>0.087 km, 0.1 min</span> [<span class='j'>6.4 km, 6 minutes</span>]
<tr class='c'><td class='l'>23:<td class='r'>51.478244 -0.103651
<tr class='n'><td class='l'>Stop:<td class='r'>At <span class='w'>Waypoint</span>
<tr class='t'><td class='l'>Total:<td class='r'><span class='j'>6.4 km, 6 minutes</span>
</table>
</BODY>
</HTML>

GPX Track File

The GPX track file contains a track with all of the individual nodes that the route passes through.

An example GPX track file output is below:

<?xml version="1.0" encoding="UTF-8"?>
<gpx version="1.1" creator="Routino" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
<metadata>
<desc>Creator : Routino - http://www.routino.org/</desc>
<copyright author="Based on OpenStreetMap data from http://www.openstreetmap.org/">
<license>http://www.openstreetmap.org/copyright</license>
</copyright>
</metadata>
<trk>
<name>Shortest route</name>
<desc>Shortest route between 'start' and 'finish' waypoints</desc>
<trkpt lat="51.524658" lon="-0.127877"/>
<trkpt lat="51.523768" lon="-0.126918"/>
<trkpt lat="51.522811" lon="-0.125781"/>
...
<trkpt lat="51.478015" lon="-0.104870"/>
<trkpt lat="51.478127" lon="-0.104174"/>
<trkpt lat="51.478244" lon="-0.103651"/>
</trkseg>
</trk>
</gpx>

GPX Route File

The GPX route file contains a route (ordered set of waypoints) with all of the interesting junctions that the route passes through and a description of the route to take from that point.

An example GPX route file output is below:

<?xml version="1.0" encoding="UTF-8"?>
<gpx version="1.1" creator="Routino" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
<metadata>
<desc>Creator : Routino - http://www.routino.org/</desc>
<copyright author="Based on OpenStreetMap data from http://www.openstreetmap.org/">
<license>http://www.openstreetmap.org/copyright</license>
</copyright>
</metadata>
<rte>
<name>Shortest route</name>
<desc>Shortest route between 'start' and 'finish' waypoints</desc>
<rtept lat="51.524658" lon="-0.127877">
  <name>START</name>
  <desc>South-East on 'Woburn Place (A4200)' for 0.251 km, 0.3 min</desc>
</rtept>
<rtept lat="51.522811" lon="-0.125781">
  <name>TRIP001</name>
  <desc>South-East on 'Russell Square (A4200)' for 0.186 km, 0.2 min</desc>
</rtept>
<rtept lat="51.521482" lon="-0.124123">
  <name>TRIP002</name>
  <desc>South-East on 'Southampton Row (A4200)' for 0.351 km, 0.4 min</desc>
</rtept>
...
<rtept lat="51.477678" lon="-0.106792">
  <name>TRIP020</name>
  <desc>South-East on 'Vassall Road' for 0.138 km, 0.2 min</desc>
</rtept>
<rtept lat="51.478015" lon="-0.104870">
  <name>TRIP021</name>
  <desc>East on 'Vassall Road' for 0.087 km, 0.1 min</desc>
</rtept>
<rtept lat="51.478244" lon="-0.103651">
  <name>FINISH</name>
  <desc>Total Journey 6.4 km, 6 minutes</desc>
</rtept>
</rte>
</gpx>

Text File

The text file format contains one entry for all of the interesting junctions in the route and is intended to be easy to interpret, for example for creating other output formats.

An example text file output is below:

# Creator : Routino - http://www.routino.org/
# Source : Based on OpenStreetMap data from http://www.openstreetmap.org/
# License : http://www.openstreetmap.org/copyright
#
#Latitude   Longitude  Section   Section  Total    Total    Point Turn Bearing Highway
#                      Distance  Duration Distance Duration Type
 51.524658  -0.127877  0.000 km  0.0 min  0.0 km   0 min    Waypt  +3          Woburn Place (A4200)
 51.522811  -0.125781  0.251 km  0.3 min  0.3 km   0 min    Junct  +0  +3      Russell Square (A4200)
 51.521482  -0.124123  0.186 km  0.2 min  0.4 km   1 min    Junct  +0  +3      Southampton Row (A4200)
...
 51.477678  -0.106792  0.204 km  0.2 min  6.1 km   5 min    Junct  +0  +3      Vassall Road
 51.478015  -0.104870  0.138 km  0.2 min  6.3 km   6 min    Junct  +0  +2      Vassall Road
 51.478244  -0.103651  0.087 km  0.1 min  6.4 km   6 min    Waypt

The text file output contains a header (indicated by the lines starting with '#') and then one line for each waypoint or junction. Each line contains the information for the current node and the next segment to be followed. For each of the lines the individual fields contain the following:
Item Description
Latitude Location of the node (degrees)
Longitude Location of the node (degrees)
Section Distance The distance travelled on the section of the journey that ends at this node.
Section Duration The duration of travel on the section of the journey that ends at this node.
Total Distance The total distance travelled up to this point.
Total Duration The total duration of travel up to this point.
Point Type The type of point; either a waypoint Waypt or junction Junct.
Turn The direction to turn at this point (missing for the first line since the journey has not started yet and for the last line because it has finished). This can take one of nine values between -4 and +4 defined by: 0 = Straight, +2 = Right, -2 = Left and +/-4 = Reverse.
Bearing The direction to head from this point (missing for the last line since the journey has finished). This can take one of nine values between -4 and +4 defined by: 0 = North, +2 = East, -2 = West and +/-4 = South.
Highway The name (or description) of the highway to follow from this point (missing on the last line since the journey has finished).

The individual items are separated by tabs but some of the items contain spaces as well.

All Nodes Text File

The all nodes text file format contains one entry for each of the nodes on the route.

An example all nodes text file output is below:

# Creator : Routino - http://www.routino.org/
# Source : Based on OpenStreetMap data from http://www.openstreetmap.org/
# License : http://www.openstreetmap.org/copyright
#
#Latitude   Longitude  Node      Type   Segment Segment Total Total   Speed Bearing Highway
#                                       Dist    Durat'n Dist  Durat'n
 51.524658  -0.127877  8439703*  Waypt   0.000  0.00    0.00   0.0   
 51.523768  -0.126918  8439948*  Junct-  0.119  0.15    0.12   0.1     96    146    Woburn Place (A4200)
 51.522811  -0.125781  8440207*  Junct   0.132  0.17    0.25   0.3     96    143    Woburn Place (A4200)
...
 51.478015  -0.104870  8529638*  Change  0.138  0.17    6.26   5.6     48     74    Vassall Road
 51.478127  -0.104174  8529849*  Junct-  0.049  0.04    6.31   5.7     64     75    Vassall Road
 51.478244  -0.103651  8530008   Waypt   0.038  0.04    6.35   5.7     64     70    Vassall Road

The all nodes text file output contains a header (indicated by the lines starting with '#') and then one line for each node and the segment that was used to reach it. This file therefore contains exactly the same model as is used internally to define a route (a series of results each of which is a node and the segment leading to it). For each of the lines the individual fields contain the following:
Item Description
Latitude Location of the node in degrees.
Longitude Location of the node in degrees.
Node The internal node number and an indicator "*" if the node is a super-node.
Type The type of point; a waypoint Waypt, important junction Junct, unimportant junction Junct-, change of highway Change or intermediate node Inter.
Segment Distance The distance travelled on the segment defined on this line.
Segment Duration The duration of travel on the segment defined on this line.
Total Distance The total distance travelled up to this point.
Total Duration The total duration of travel up to this point.
Speed The speed of travel on the segment defined on this line (missing on the first line).
Bearing The direction that the segment defined on this line travels in degrees (missing on the first line).
Highway The name (or description) of the highway segment (missing on the first line).

routino-3.2/doc/html/installation.html 644 233 144 35761 12737751177 13402 0 Routino : Installation

Routino : Installation

Quick Start Guide

The instructions below are a complete list of the minimum required to get Routino installed and running under Apache on Debian Linux. Other Linux versions will be similar and other UNIX based systems will also be similar although may have distinct differences. There is some support in Routino for compiling on Microsoft Windows which has its own installation instructions.

These instructions should not be considered as complete or a secure installation for the reasons given in more detail in the Configuration of Web Files section below.

The starting point for the installation is in the Routino source code directory after it has been uncompressed. Most of the steps will need to be run as the root user.

The first thing to do is to install the packages which are required for compilation of Routino as described in the Pre-Requisites section below.

apt-get install gcc make libc6-dev libz-dev libbz2-dev
After this the programs can be compiled:
make
The files for the web interface can now be copied to the web server directory. On Debian this is /var/www (or more recently /var/www/html) and the files changed to be owned by the user Apache runs as. The instructions below are based on the assumption that the files are placed in /var/www, replace this with the chosen installation location if different.
cp -a web /var/www/routino
chown -R www-data:www-data /var/www/routino
To be able to use Routino some data will need to be processed and a script is provided for this. This will download the data for the UK which may take a while and then process it.
cd /var/www/routino/data
sh -x create.sh
The routino web pages also requires either the OpenLayers or Leaflet Javascript library to be downloaded and installed and scripts are provided for this.
cd /var/www/routino/www/openlayers
sh -x install.sh
cd /var/www/routino/www/leaflet
sh -x install.sh
To make full use of the location search feature on the Routino web page you will need to install some extra perl packages.
apt-get install libwww-perl liburi-perl libjson-pp-perl
Finally to make the web pages work you will need to add the extra lines to the Apache configuration file as described in the Configuration of Web Server section below. You don't have to use vi and can use any text editor.
vi /etc/apache2/sites-enabled/000-default
apache2ctl restart
Now everything should be set up and the web page should work if accessed at http://localhost/routino/www/routino/router.html.

When everything is working you should read the rest of this document carefully and make the following changes:

  • Download your choice of OSM data - edit the file data/create.sh and run it again.
  • Edit the www/routino/mapprops.js file to match the downloaded data and personal map preferences.
  • Move the files in the web server directory so that only the contents of the www directory are accessible by the web server.
  • Edit the file www/routino/paths.pl to reference the new file locations.

Pre-Requisites

The programs are written in standard C language with minimal external requirements so only a small set of development tools are required (gcc, make). The compilation tools to use and the command line options are defined in the file Makefile.conf.

There is some support for multi-threading that uses pthreads and additional development libraries for this may be required (on Linux this might be part of the standard C language development files). The multi-threading is enabled by default but can be disabled at compile time by commenting out two lines in the file Makefile.conf.

To use the built-in gzip file decompression function and to process all PBF format files the zlib (or libz) development library is required (on Linux this might be in a package called libz-dev). The gzip function is enabled by default but can be disabled by commenting out two lines in the file Makefile.conf.

To use the built-in bzip2 file decompression functions the bzip2 (or libbz2) development library is required (on Linux this might be in a package called libbz2-dev). The bzip2 function is enabled by default but can be disabled by commenting out two lines in the file Makefile.conf.

To use the built-in xz file decompression functions the liblzma development library is required (on Linux this might be in a package called liblzma-dev). The xz function is not enabled by default but can be enabled by uncommenting two lines in the file Makefile.conf.

To compile the source code from subversion requires the Perl Graphics::Magick module to generate the web page icons (on Linux this might be in a package called libgraphics-magick-perl). The released source code packages contains the icons so this package is not required for compilation.

To use the web page interface an http server is required. Instructions below are for Apache but any server that supports CGIs should work.

The web pages use the Perl scripting language and a number of the default Perl modules. To use the search function on the router web page the Perl module JSON::PP must be installed (on Linux this might be in a package called libjson-pp-perl if not part of the standard Perl installation).

Compilation

To compile the programs just type make at the top level of the source tree.

This program has been written to run on Linux, no cross-platform compatibility has been specifically included but on the other hand other platforms have not knowingly been excluded either.

Any information on improving the compilation process on anything other than x86 Linux is welcome.

Installation

After compilation the executable files are copied into the directory web/bin and the default XML configuration files are copied into the directory web/data. This is in preparation for using the supplied example web pages but is also a useful location to copy the files from for normal use.

The required executable files are planetsplitter, router and filedumper and the *-slim versions of the same files. They can be copied to any location and need no special installation environment. The filedumperx executable is for debugging and not required.

The configuration files are called profiles.xml, tagging.xml and translations.xml. The names of the configuration files can be specified on the command line but by default are also looked for in the directory that contains the routing database with these names.

Example Web Page

The directory web contains a set of files that can be used to create a working set of web pages with interfaces to the routing algorithm.

The files in the web directory will require copying to a location that is accessible by a web server. After copying the files some of them need to be edited; search through the files for lines that contain the words "EDIT THIS" and make appropriate edits (more details below).

Configuration of Web Files

The assumption in this description is that the whole of the directory called web is copied into a directory that is accessible by an Apache web server.

This is not a secure configuration but an easy one to configure.
Only the directory www should be accessible by the web server. Do not use this configuration unmodified in a public web server.

The directory structure is as follows:

   web/
    |
    + /bin/                    <- The Routino executable files (when compiled).
    |
    + /data/                   <- The Routino database and default configuration
    |                             files.
    |
    + /results/                <- An empty directory to store the results.
    |
    + /www/                    <- The files that must be available to the web
        |                         server are below this level.
        |
        + /openlayers/         <- A directory to hold the OpenLayers library
        |                         (optional; leaflet can be used instead).
        |
        + /leaflet/            <- A directory to hold the Leaflet library.
        |                         (optional; openlayers can be used instead).
        |
        + /routino/            <- The main HTML, Javascript, CSS and CGI files.
            |
            + /documentation/  <- The HTML version of the Routino documentation.
The directory bin will be filled by running the compilation process. For a secure installation the bin directory should be outside of the web server, the file www/routino/paths.pl contains the path to the bin directory.

The directory data must contain the Routino database and is also the default location for the configuration files. The routing database is created by downloading the OSM files for the region of interest and running the planetsplitter program. There is a script in the directory that will download the OSM files and create the required database. The script should be edited to set the names of the files to be downloaded. For a secure installation the data directory should be outside of the web server, the file www/routino/paths.pl contains the path to the data directory.

The directory results is a temporary directory that it used to hold the GPX and text files generated by the Routino router. The directory must be writable by the web server process since it is the CGI scripts that are run by the web server that writes the results here. For a secure installation the results directory should be outside of the web server, the file www/routino/paths.pl contains the path to the results directory.

The directory www and its sub-directories are the only ones that need to be within the web server accessible directory.

A Javascript map drawing library is required and either OpenLayers or Leaflet can be used. The library is loaded dynamically when the HTML is opened based on the value that is selected in mapprops.js.

The directory www/openlayers is for the OpenLayers Javascript library that can be downloaded from http://www.openlayers.org/. (This version of Routino has been tested with OpenLayers library versions 2.12 and 2.13.1). The file www/openlayers/OpenLayers.js and the directories www/openlayers/img/ and www/openlayers/theme/ must all exist. There is a script in the www/openlayers directory that will automatically download the files, create an optimised OpenLayers.js and copy the files to the required locations.

The directory www/leaflet is for the Leaflet Javascript library that can be downloaded from http://leafletjs.com/. (This version of Routino has been tested with Leaflet library versions 0.7.1 and 0.7.2). The files www/leaflet/leaflet.js and www/leaflet/leaflet.css and the directory www/leaflet/images/ must all exist. There is a script in the www/leaflet directory that will automatically download the files.

The directory www/routino contains the main HTML, Javascript and CSS files as well as the CGI scripts that perform the server-side routing functions. The description below lists all of the files that contain editable information.

paths.pl
This contains the names of the directories that contain the executable files, router database and temporary results; the prefix for the routing database; and the names of the executables.
mapprops.js
The parameters in this file control the Javascript map library (defaults to OpenLayers), the boundary of the visible map (defaults to UK), the minimum and maximum zoom levels (defaults to between 4 and 15 inclusive), the source of map tiles (defaults to the main OpenStreetMap tile server), the data editing and browsing URLs (default to the OpenStreetMap website) and the number of waypoints allowed (defaults to 9).

The directory www/routino/documentation contains the HTML version of the Routino documentation.

Configuration of Web Server

The file www/routino/.htaccess contains all of the Apache configuration options that are required to get the example web pages running. The only problem is that some of the configuration options in that file will not work unless they are allowed by the AllowOverride option in the main Apache server configuration file.

If you have copied the routino web directory into /var/www and named it routino then the entry that you need in your Apache configuration file is this one:

     <Directory /var/www/routino>
         AllowOverride Options=MultiViews,ExecCGI FileInfo Limit
     </Directory>
This can be placed anywhere between the <VirtualHost *:80> and </VirtualHost> tags which should be at the start and end of the file.
routino-3.2/doc/html/style.css 644 233 144 15022 12520735320 11627 0/* // Routino web page style sheet. // // Part of the Routino routing software. // // This file Copyright 2008-2015 Andrew M. Bishop // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . */ /*----------------------------------*/ /* Body HTML formatting */ /*----------------------------------*/ BODY { /* fonts and text styles */ font-family: sans-serif; font-size: medium; /* margins, borders, padding and sizes */ padding: 0; margin: 0; } A.ext { /* fonts and text styles */ text-decoration: underline; } PRE { /* fonts and text styles */ font-family: monospace; } PRE.boxed { /* margins, borders, padding and sizes */ padding: 0.5em; border: solid; border-width: thin; } /*-----------------------------------*/ /* Header HTML formatting */ /*-----------------------------------*/ DIV.header { /* margins, borders, padding and sizes */ padding: 0; padding-top: 0.5em; padding-bottom: 0.5em; border-width: 0; border-bottom: solid; border-bottom-width: thin; margin: 0; /* text alignment */ text-align: center; /* floats */ clear: left; } DIV.header H1 { /* fonts and text styles */ font-size: 150%; font-weight: bold; text-decoration: underline; /* margins, borders, padding and sizes */ padding: 0.25em; border: 0; margin: 0; } /*-----------------------------------*/ /* Footer HTML formatting */ /*-----------------------------------*/ DIV.footer { /* fonts and text styles */ font-size: 80%; /* margins, borders, padding and sizes */ padding: 0; padding-top: 0.5em; padding-bottom: 0.5em; border-width: 0; border-top: solid; border-top-width: thin; margin: 0; /* text alignment */ text-align: center; /* floats */ clear: left; } /*-----------------------------------*/ /* Content HTML formatting */ /*-----------------------------------*/ DIV.content { /* margins, borders, padding and sizes */ padding: 0.5em; border-width: 0; } DIV.content H1 { /* fonts and text styles */ font-size: 150%; font-weight: bold; /* margins, borders, padding and sizes */ padding: 0; margin-top: 1em; margin-bottom: 0.25em; } DIV.content H2 { /* fonts and text styles */ font-size: 140%; font-weight: bold; /* margins, borders, padding and sizes */ padding: 0; margin-top: 0.75em; margin-bottom: 0.25em; } DIV.content H3 { /* fonts and text styles */ font-size: 120%; font-weight: bold; /* margins, borders, padding and sizes */ padding: 0; margin-top: 0.75em; margin-bottom: 0.25em; } DIV.content H4 { /* fonts and text styles */ font-size: 110%; font-weight: bold; /* margins, borders, padding and sizes */ padding: 0; margin-top: 0.5em; margin-bottom: 0.125em; } DIV.content P.center { /* text alignment */ text-align: center; } DIV.content OL, DIV.content UL, DIV.content DIR, DIV.content MENU, DIV.content DL { /* margins, borders, padding and sizes */ padding-top: 0; padding-bottom: 0; margin-top: 0.25em; margin-bottom: 0.25em; } DIV.content UL UL, DIV.content UL OL, DIV.content UL DL, DIV.content OL UL, DIV.content OL OL, DIV.content OL DL, DIV.content DL UL, DIV.content DL OL, DIV.content DL DL { /* margins, borders, padding and sizes */ padding-top: 0; padding-bottom: 0; margin-top: 0; margin-bottom: 0; } DIV.content FORM { /* margins, borders, padding and sizes */ padding: 0.5em; margin: 0.5em; } DIV.content INPUT { /* margins, borders, padding and sizes */ padding: 0; border: 1px solid; margin: 1px; } DIV.content BUTTON { /* margins, borders, padding and sizes */ padding: 0; border: 1px solid; margin: 1px; } DIV.content INPUT.left { /* text alignment */ text-align: left; } DIV.content INPUT.center { /* text alignment */ text-align: center; } DIV.content INPUT.right { /* text alignment */ text-align: right; } DIV.content TABLE { /* margins, borders, padding and sizes */ padding: 0; border: 2px solid; margin: 0; margin-left: auto; margin-right: auto; border-collapse: collapse; } DIV.content TABLE.center { /* text alignment */ text-align: center; } DIV.content TABLE.noborder { /* margins, borders, padding and sizes */ margin-left: auto; margin-right: auto; border: 0; } DIV.content TABLE.noborder-left { /* margins, borders, padding and sizes */ margin-left: 0; margin-right: auto; border: 0; } DIV.content CAPTION { /* position */ caption-side: bottom; /* text alignment */ text-align: center; /* fonts and text styles */ font-weight: bold; } DIV.content TD, DIV.content TH { /* margins, borders, padding and sizes */ border: 1px solid; } DIV.content TABLE.noborder TD, DIV.content TABLE.noborder TH { /* margins, borders, padding and sizes */ border: 0; } DIV.content TABLE.noborder-left TD, DIV.content TABLE.noborder-left TH { /* margins, borders, padding and sizes */ border: 0; } DIV.content TD.left, DIV.content TH.left, DIV.content TR.left { /* text alignment */ text-align: left; } DIV.content TD.center, DIV.content TH.center, DIV.content TR.center { /* text alignment */ text-align: center; } DIV.content TD.right, DIV.content TH.right, DIV.content TR.right { /* text alignment */ text-align: right; } DIV.content IMG.center { display: block; /* margins, borders, padding and sizes */ margin-left: auto; margin-right: auto; } DIV.content IMG { /* margins, borders, padding and sizes */ border: 0px; } /*------------------------------------------------*/ /* */ /* Special case layout for narrow screens */ /* */ /*------------------------------------------------*/ @media screen and (max-width:640px) { /*----------------------------------*/ /* Body HTML formatting */ /*----------------------------------*/ BODY { /* fonts and text styles */ font-size: small; } } routino-3.2/doc/html/index.html 644 233 144 10252 12563643544 11767 0 Routino : Documentation

Routino : Documentation

Data

A good router relies on good data and the OpenStreetMap data is a good source. There are however a number of things that need to be considered about the data used.

Tagging

In addition to the raw data the way that are tags are used is also important. With Routino the tagging rules are contained in a configuration file and can easily be customised to change the interpretation of each tag.

Program Usage

There are four programs that make up this software, two create the routing database and use the information in it and the other two perform additional functions. Full instructions for using the four programs are provided.

Configuration Files

When the programs are run they read in one or more configuration files. These files contain information about the routing preferences (types of highways, preferred speeds etc), tagging rules and translation information for the outputs.

Output Files

The final result of running the router is one or more output files that contain the calculated route.

Numerical Limits

When processing data there are numerical limits for the range of data identifiers that can be handled and the size of the database.

Algorithm

The algorithm that is used by Routino takes the OpenStreetMap data and creates a local database of the important information for rapid routing.

Installation

The Routino source code comes with a set of files that can be used to create a working server very easily. The full information about installation describes how to compile the programs and install them on UNIX-like systems such as Linux.

MS Windows Installation

Routino can also be compiled and used on Microsoft Windows systems (with some limitations). There are specific MS Windows installation instructions describing how to compile the programs.

Library

The Routino routing algorithm is also available as a shared library that can be linked with other programs to allow routing from within them.
routino-3.2/doc/html/example0.png 644 233 144 351656 11541143677 12250 0‰PNG  IHDRôA^#X oFFs6È *8 pHYs  ÒÝ~ü vpAgŽÌdKž€IDATxÚìÝuTÉú7ðou1‚k„AâBÜÝ]‰»+qwÙdã¾wwWbDˆ$ „·ƺëýc&{É{w×ïÝ„úp§Ó]tÏ<ÓÝ©©®zŠ€a†a¦°êÆ~¼D¼¬_„+Ò[ŤÍÇvªþ°”"pg‘JNË°×ØÎôÈx^¸(ÎC#TC)éa‰žÏXæ£.•.ysÇó™ÇG J(‡Ñ¸Ü`R_h º—é# ÄϘp<”žùW†a†a )_8@ƒ÷È€“G”¦¡Í^²rÓü'MœY«UégÎ{m—)_Cež&l×W7Å Š+²FÀ<Œ8±îõ›øéëÝ·Zs%ù}ÿdWËŽIlÃxR‚¬Ç8q/}OHÀƒ jýÍ0ÿ Vqg†a¦ð)Ø .Â-'­¡GÓ“[Šøöw˜ ‘N([³Wie·eŠŸà ±ûIgŒÏ×ЉGémZLfÓRžm˜¢÷1–:úó«ƒRŽ»ÑýYÇ×?§Ì–Yµ‚<#=…ºŒ&£?Žã2‘#Ì!² <ó÷cw†a†a +b©¸Ã" Ç'âÚ‘ƒd–EÇÑhKÁ g<†;¹Œ.U­Tð˜Þ å_úãêHóaú£zѨàsȯ¤Œ´Ÿì®´YþX½ÜØ~WÌSMlõ•/#ʽr}“SײΖ¨pŸž¡oñÖAQtµ¾„µÄ3ë„e†a†a V+£(œ‰?aiAa®8ž‚µ½Ö:ï7nv7Öz^º^ë‰A¾ÞgIþW^Ÿk7næCI’ =c“%ßý©kºŽã¶£ª¾í´ÞáAèæŸÓòÎç[«æ’Î\urÈ\QTÑ%˜Š+x xp–¯ìaþ«¸3 Ã0 Ãü$ࡇW‘CA%FÐx[Š´Yäè6©C­eŠÕôñqw×8‡óº†ƕʕҟ$žäûñs?_Èn’7hùô;¥^5ÝõìTìÏùyŸô–ý<ˆ¸Bï¡–¡vâ¢õiemðÌ_ð, Ã0 Ã0¿Ã rHÀÓÈÄZ:•pƒBjª…žoÖ§}̹¸óæ“ɱŠ÷º ¿ÜDÿ•Õ›Š>q¼c{¢-’¯7–7?³Û­8"mÒôXIWŸ´Z¿òE‡JŽrHâcr^ÚÒAt(váÞñ;ÈÒ›—‘h¤!Çò °ñ…kqg†a†ùûXºÓX:´¸C ®1 ÂñWzE-EìŽÉ ÒØ>öFû¿Z½K©5>Ÿ]c컡±i£9_;Îf~­j¡h(«pÅÉÃÈŒø)foº–öøØå¦ï}ziÏÐ6\sR‰4„®ÇQº­1_‡|Ö‘¦0cw†a†a˜\ÁþèY˜Žž|R¤ÇhkzÉRÄµšª“¢úÈ*Ukû ýP91pˆËI‡Í$“"?ÄÐ^ð ¨ ˆ“&J:¤6ézvZ´wB½5;ïŽy~éÓ»vŸvX•¹èÃ-#X+>¡‰(ƒãxx–!¾°aw†a†a˜VÁ!­ž°…‘‚V\y²Å/4•-z9-µ]7òEµŸƒÓ}¨d¨¦ÈTT‘¥™7åæõ&;¡¯(³ U®—û™ƒ ÄtýÄܨ6ñg–:ߎ~¹!²aÒ¦´uÖÆ0âJSÚ…~Àh¬ƒRH ƒ föüØXÅa†aæß§@5šTÇvLàNr‰Zp:ÇR¤ÂHÞŽk&Ù×*WÆ¡cRÉ:>ý¥ÛäÞR—ü.ù{ Ò'ü .S#£’‘ÆÑSêÞ-Ïsß;®¬ñâÕºá_Ì™_,û!Â!tŽP3° ‰ÈŽ%—üQ±Š;Ã0 Ã0Ì¿[ÁN,Ap†-çLìIèr¥'ÑÓ,t+þѣµÞ”îܼb`†— À@:R¿ÃXÅ|…Ë!_ÈÙhÅtÙØ¬Á¹tô×Òû¼UýüúÎâ—ËS6k/ê·YöCnq•à@*ãºÑ¢Ôi:ýˆ÷°…-8ä ‡õŒÿþ±Š;Ã0 Ã0Ì’¥¶%Î’b’LÀuüL.’Þh"Þ¡±–Žà~%Ùm&U-æ:õUeVjá9Ôå5@š¡†öNþLã.åisI6é!="ÙŸ˜¾>[¿mÿ½uïêì*÷$çýåÍtõ³¯­m=îTE]ÌÁ}ܰ&—K/ù#œJ Ã0 Ã0Ìž¥ún‚½Qþ|ÙB* 3h=d)ÂÇ“4òÓ a!õ4#–V½¬)]ʳ»Ë $˜˜ÞÍ)â\YMîžäÓ›ÇÒlj®4I¨?nÏ›§/Þ¿'ud1;¶Vtc1/õ—”â"‰-w€TˆTÛ´Sm}£î½j™Î.~Ò/aÝÔ¥a> _?>Ó­]Îý…Á=WGGí>Y¯L§-2íÂ}¸–Ò÷Æ_$ŸÈ04†ß×ä•Ö ñÌw‚G\`4è gíï Ã0 Ã0ÿU<8œÅ$ÂyHâ’IK<’–äÇqʜц1¦¦·ÞÇoû²éŜ܊٣¦Ö÷.^ÏþB9_»÷«²>'_®ï[,³ÊU•DzÙùqò´Ï/3½Ë,VoQÚ®è\¥|ZoÃ)íª3eÚýÆÆB'ñ>A‹\‰/8ŽCŠ•ˆÀ+˜ B´lemñJD#YÖ±‰a†aæ?ˆP@ïÄu"]…Öb5‹ãi8[ÄûgÝb_eÄævÝËè¤lX9ÀX$Íy«zzJHshŠAkŠÔ¹Kó3¨‹Ñ¨eÎ2t®™'•ÙàåºôBm(ïäÄ©¿,øuÑÃkoïžqïê ¨3mo}9ùœœÌ$âl)æb§µ%Þ3öqýyù|þ)÷Î0S(/ú¡\aWHù­*Ï0 Ã0 Ãü»È Ê‚ñ&јÍå’)ä©pFœO7ZŠ”›áçσ´(s¸s‘znã]]Ûª3¡/] ȼøû9’´6º5—oí>ý ø´"ÛÕ¿HfŽÒæY½M¾¹«5Ï_QBê·Ç<¶ØÈ¼Ë¦rÚ‘êÆ6J„²bFdîG×ÔÊ+nD|õæÌ¸7©‰©y±ÆDóËѹQ¤6ÒÄDš†Š¸x|Aòa´ke¼ÿS‡*6òSŸ‘‡|` *!ãp÷Yh†a†aþ%rHÁÃÌDoTãús‰JÜ(V yt)}!è|Š#Jyìø¢åøÒŸ»oot,ð¹|¾J#?ˆ£in¤lþj-5$ :÷6fÈêÕGŸ¸'I©‹‹ëðzÛ¶Š–¶ÞòMï7½ Nouö—ŽQÍB[•kŸ›æ|ƾ…ú²é\~ñU Yåòž“]Ò÷·ê¶¶Áµ·ó?glœø 3êó!ÅKÏ k…[¢³åås/È8â@:¤åáŒv,;Íÿ–Ä^PäÈ´ÖŠ{”…«¸3 Ã0 ÃüKd€³TÙ¹²¹ˆCшÅÅ^üJTs¹=á}ן+o}º¦«oYM¼ÃxåÀl/nЦ™+3kêüȯï|;q[‘³å_µ{ØìMù/ÖYT—ØVŠ›ž\)‹ ì³Ü³tu0Ì\bæÚˆ‰O®½uÿîë´¾nsJœöSå÷‡ge<~2ËÍMµÃóý µjTö q­^l€Û‚Q¥«f¥œ^7à~ѨÑF¿hwËTF”‹O¬D;I_®&9dn/£›Ðûp 6B‚|6cëÄþ¤Â,³†›ô@Yø²¯O Ã0 Ã0ò[jbm…¾õèB´äF¢!*ÁK”оÐà-@ò.ˆ¸•áÒ~W¹…Ý’, ø¬PùÈ}a¼x <–'WMÝš×äÐÈkžo>®zp¸ò“×|¾˜3ÞrnyCpÑ4#û^^ cÇw{>ÈÜ$¸¬»gÑŽ;U¾¥ì=+;n˜øÊ5ùÜt\Á#ìÝõ,,vêˆ>U•Á+:¼*i,ï®qd[Äœ—ïa¬/”¯‹Ã«Ä{põÞï&®ÓF¾«šºî×û£ê^Š‹m™4ëË"­ZHÂAÌÆ5<¥‰ƒux‡ ä~3íóŸÐ¬ˆÿý¢Û­gܼÄv†a†a˜¿A 8ëò@´DiþCýuÁªCK÷©;#§µhj¯}pq爧”F˜Ço¦ôÖ¯ãNPa¿-ƒœ^7´ÚO[†\¯Õ:¸¢÷%‡·÷@4x‰i\or—(ˆ‘˜Dz¬}âWŸEëæQ]dB…pï1íUµ]ýÎrMH ÞɈÄû¹àÞJz¸L²û<ïXƒ‹~é>Ù«[+J es—õ-™¿oVµ^G(ß¼ßxJ—4äüòéÈCí.L(^³té ¶ãä}¥C î¿MRIù ÷°ÞºJÁRLþÇt«V:±¸õã$ápƒÅ„ù†¥7ž]„ Ã0L!gi_WA)Ú¡6üÈÒÈSÒ‘Ö"Mp }+t/ÑÃååÞ×3§7‹Ê¥kŽø•Ò»''€Òˆ ãC(½_b‚ñË´“†ø­3âEõÅíÜcl—<‘{F¶î`<¡rÈÀ£(œ¡–´åD£'líšS©2ýòðÅ$JidµIõ‡Ù·m_¶C"‰à劒V8„™ü¯ä éYð(þµÇhn®{ÝÊ·Ú¤Ï×&]ì*Pº¸ÜÀÞ”ÎÛÜ7;ïüŒ#=—Pºàqÿ•”.<> YLؘ·ƒÇºU,¹Ùe”ò‹¢zÁ½qÙd)†Y¨‡2ð4Öä’„¥ÿ7r<äK@†5Ü]H|`1a €â·K,‘p'ÃÉp#«È*4à £u«Rv12ßœ9_ÛŸÞâ-É:²Í œ9NìÌaæ;c`jÝèë¸Ö¤Ë_l9¨Z~ñRGVÌ_ݪ~ÝåÃ#Ó(4¾¥·‡õ¢ô^« ýß>Ü;«oóy_ú?ª¾ÑNÑ>vÚ‚{àìÈ*|â$R²íÖð¿Ý]-+6ð“9ëÖ²F¯ã)½ó0ì}úÐÒžE SÍfÖ}n$ÙÄmQ ~p„ äÜRÒ :®)ƒ÷÷é÷Þ±½fÀü„†}*%®šP²ËJë&˜–ÍiÔ'$?bV÷^×éàyõúî§tѹäÍÎÑy6Œm]½FÉyξÊfòãß¼—F$1ärqκªà„SÌ?gr½ZÆ2kˆ“>„µª2€ËâP`•=‹ ówœ9íØ™Ã0Ìw†ûÿÛˆ¹=„’@lÆxÔ³®!d ^6®ÒÏû§‹~¶k?Ö\éÚæÑ)½ç6¡5¥wž‡)½Ó1ìX²Ãn&ŽÏéú¬’OÑÎ{Ô6ßì¹9‘ãæ£ jÂ×zlîÚ© ð“¸-d¡eEƒÎŒ^~Zï µFøS¹}RóݶÓÛ7ýˆÙ‰¨‰’pÇ.LG3ë>-¿›ÀEI)lÆ8n i„ì‚ñ©d?WÝbiµ&é!{3í§fwGéÂŒ)?¡ßfmß™>=£(?µßBJw¸":xtÅö'f×*V:Ùv–¼Ÿ´kÁ½I¶s=È |Æ$t¶®RC ;Ñþa‹k4vªäjYæÕd `1)Ô,³Žá‚á¸:žv<-âNÝ)à~Ìý HQ¤kù‚m¨ ³{ámYtèèÐQ"wÙî²pßî¾P|Q|!ÉìÌaæOç¯+Ê 8„$…„!šÌ'ø¦çz“•ݽ?Ÿ=òÓÓv¥ÅÅáÇÆè)X4¾/¥·VÛMé½Á&¾¾÷zßž3:÷ÒU9n¯SGʧ܃d#?…“7d žXWYÚõÿîN%Üòš8XZ⃪z÷rØŸy(|@J#'‘›Ñk²:ÿ¤ª¨(±öªE8Æþï¤iË'¯…üò€t(XÐWïð@Óú§^M‚BºÅu óìIé’ŠƒJ˜+ÍÙÜg¦nÊÌýjQ:ÿm¿XJäö?þ.ll|'Œ®R­|ðM¹ú¦Í–o{ﱇŒÃU,G}‡»uÏ:Ôü6Žjí_Ýϱä2iÊ‚Æpí¹önY®&­&•;²óÈÎyk»®íÚc‹s¢s"I€=ìÉg2ˆ B}1Æzæ´áÚ`†õÌiW­ÔxÔí¨ÛÂá붬ÛÒ3Þ9Æ9†$@ 5ùD†!hÈ"Æ0ÌÿXj+–b(jñ·¹h²ÿ¯ 6é]¹÷ɳE—Üj»˜¶ ?6–£4Â4~'¥·3ÃFSz'6LÿÁá`µþƒ'TèQɱˆÔi–ê›AœäˆÇä é‡p…=”Ö Ü?Sa%µ‘‰¥–e%'_%éô˜üº¸{OJ¬™x6©Þ‘ô'Üò]•›,ƒhI¢Â–?Üî·×PÞp#¹ ¸FáÒ×£Xøl³¿¬ë_?»‚WÆç©qÝ{QºÈuÀbziÞ¾÷uÑ3ãz#ç¦ö@éûAN¯U£üÛÌð¨[ºl´Ë2e¦<ë›ÃÖ#GH}Ž#2ܲ®’Y_ «þ¾}i«×­h ÿd‘±,&…Zk´Fk Æ`Øä†âY•Ô*©|ÀÙf¯·îͺ7Cû8p:`ÄÌÙ¡d(«¸3_‘Ïäó×ñ¥u¥uÀ‘›Gnn8³!kCÖðIŽk×ZÏœî¤/é‹,b ÃüXZµí ‚ }Ñ%9/² é¤<’¿VR¥%ùõ\‰g«µö9^jµºÓVý/W‡Ž)½;~|"¥SÆ·¦ôv£0åÓ [7õXÚÿYËÚ¥Ž8¶Ð¼Rh ŠÀ½#‡ð† ÔÖ¼çÿ_oõR-”AÞ‹ëAú[V\)½‚ï0‚Ò£'nÝÃûu¨êùØ>Ïú¦’F¸úìßRVA qÇ çß™X°Hñ]>ê Kl¯ªö!/ìyç0JŸxœÒù-ûMÌ[5ãdÏ™”.Ú¿¥‹n 0¾WŽ ìä6)³Öõ2-<[ÙVF~+²‰TÀNt@-”€lØÊüŹ =?6ÊE 8BÃÇ3™ 5d²ÈR×q×­×l1Y1eµ×F\ëä¼¼Ùòf=r;è<  šíDÛ‰Üs2†Œ!uqgPœ…±àb¸’eYnö²ÙË %×Zwj@¯aS†M©ÑÚv¦íLî9‘^"±hÎ"Æ0Ì)Ы۲¢.²°Œ£\#Ò鯋·\WÝ¿x¹³Å—:·ëGé­ñãNSz§sØaJï¬ {NéÝnã“"Wþò¡»û V«JCÚÿ¦‹KåBHS’F&àu•¥²þhG–ã½ÉSÔC%xîLÑ5éBÓïš&Ô ô¶)lb“:•=½­ùÔÉÒ7ÿál‰·¼»’ÄÏ9±Á‚ëÝ_ªïÛLÕ¹ÞÚr'>D輊Òűƒ¤‚ý\UŸ›ù‡gµëuSl?w_ß*”.®>°RÔÄš]ÛÎY_,ŸäÓÔ¾…ºô7G)K¼ðœkIJ!jÈ~¤ËÚâ¯9÷55³ °±P‰]é…ôþD‚Hxð *^Å+[m;½íô®—ÏóŸçÇŒ«Y­fµ†Ö4RÜsî9÷†EŒ)ˆOä%jËrß­}·¼–™™Ñxú–é[æ‡[ÏœÁÜ`nê¢.BYĆù*Ø¶Ý •áÃ/á’o2šó¹Çäx·² ¶l¸;wÃæ® ¯¤ŒºCé½ÚzQñö”Þ¢ãÞ=í»ur›K¶¼TÚס–:Y¾¦à~H:™Œ·ø€ƒ€òð‡‹uî¢ié+áÄu ¡–YZ§ïìU»JMJo%Ž‹¦ w~ ‹²¾Í„2Ö1iä2ióOTÜÿêˆÖßÍPžÄ «1’ëMª ©`A¯wv U}¦—®ëZöЧÁ7u­Hé )]P¢€¶Ä mÏS⎹Q}ÛRºäæ ŸZOØÖeÅÜI +”sô·©!ÿ6N®9@\ð3†ZWYž\NK5nYK¦â‹pƒ¬«ò0½Ùõ^8‘Ùd6™mYv~èüÐY»7}oúžŒ+3¯Ì¼´¯¬´¬´t%¬ÅZ%‰$‘$B9{ˆÅ|Å_à/ðÇ,Ë=ô|Ð#2ê—¨_^ÝšL'ÓIe,gWƒ«ÁÕ@(BÑ‘EŒa˜®@Û°+ì¡$~ˆÁl¢'3[° âª¬-¿©M›šjßRW§­œÕñ$¥7¿ŒkOiÄ®ñ£(h3¾¥wF„Œ´ß<¢›qÄÝö[ʵPdÊnóßT|%Ãø.$ gðÚ[W)!ÿïV(¹fä±¾ën}¼ Ћͮ§Œù™ÒˆSã§üÜiØ…Ú›áG(ÉÒ 7þÍ]OäIXIÆá*~–¸q.dUÁ".Nʇ åŒÙu§•sxë5VÞ1Ò%û-£ó<ú®×þbÍNãÞ¯¥ ðH(6>¬³qJFíƒenúÝp,£ù¥àÞÈ.Da;YHl@ƒo¶r…¤6ò¤Ü°um&;èlle±–þLd8.|;)<ÈKò’¼´,{íñÚãµçŒéŒéŒé\õsÕÏU÷ºçuÏëäCNz“Þ„}Ác¾Áoç·óÖÙ—CÅP1TŒ.]*ºÔôäéÉÓ­ùdÈur\Ç0 Ã01†aþ dɳNê ?ño¸ÏähÁ"|(7‘,ïOš'–oc}É.S)½qzìAJ#RÆo¢ôöݰ.”Þ¾Öæá¦_%¡½+7m¦š¡¸-1ÜçDV!™Œ!®Øe]õ57ùÿ¤ÚH:€be¹œ¿ß¯Î{ôQ—?Œ*CéÝW|ÏvYò¡ím8òôÀýÿÈ‹(øTÁŽP“xèpžœE¾æ[$V³ÝæÓĵKOûÐ"¬w§”.5à¥óŽ÷C¾Ë,ÒkžPq®}Ÿë”þ´~p‘íøÄ.n‹»7æ*… én“ðÍgÚšœ&89QüÖi§0 l5êCûãž«l7ª¾žo‘ƒ³ì>P8q]¹®œ5÷j°"X¬¸'½'½'=RåH•#U”­”­”­¬E᱈1ñ5ø¼uÈiÛ~mûµí÷¼ÞózÏë-Œ]»0ÖÚÒSUQqYĆù—œ)GëJPÍTÌîÆ7h°îÑÑ_+ww ôV‹qÓ(0ßCéݱã(½AÇž{òf«mî{åÕUíWÜ’* î‡ïÉ-#SѵáÈ!ù· 0ý×­ÁhÔµ,Ú ªz²FÙÍÏUMé½¶F5Úµ¼÷HtF%x_Ä`:üà»ÿø«’€$àq¡hÀ?!Ùߦ?qÞ­\+¿<%©vB™KïãÇì4ƒÒEqKP:_Û_’ûlFóž!”ÎoÛo4¥‹’–ýÜÒò®yóš6ØSa„·Áî’ê›ö|)²„à!†¢*¡œÔ­ÅiC¾†ê” ’ÀC2Ô@ Ên… ã3¤²Að ÃüÓ,U2L°SÑ®èˆMînö×T‡:GÕ¸¨UõÒcËšƒ¸VÄç´%@Þc< ¡¡á~%LÜf{nÙË{‡Þ^ïã`Й4ÂeËîùÙÜn²HŒ¦ý¨½°GœH‡[’* "þ<•¤»x…Ï–hè*é?›Ö&4ù2(7ª4œ–«ÚjҕβN£m¯)®¤αӗ"vxŒ©¨ˆÅÿÁWe†"(:ã® "ÝO¯‘\P\&OÈPÒ9­Žn”¡ñÜõ[í=x{}`»Jö£úרÔ! ¯ÿ ÷ŽÉ”7 35ô0Õ3Ìs¹«ú¬x>3¦q½JºÁ¥BŠÖüåýÃÓoÆoïóØ+Æ3îVVù¼qr Ÿp\!]Ñ@ÜAÀ90@°VåÿLŸÞ?³i*iÊ'ª"¤«~ë¹55H »':J(¡¤éDjMöä°Éa“Ã&òš¼&¯³d5Èj€EX„EäyFžá Þ€ Ne¾%‡rË¢åÌ!“Éd2™V¥UiU¤! i@ L0ÁÄÆ0Ì?‰ŽHp c8xLvœ¢ZÞhh#ÍYÿ•e«šGß|›øùù<@¨-”§åÅ~ÔtçÊþcãŽ{¦¥Ÿòj1yò¤Þ»Ÿ^š]Ì 3í.“÷d$^âæ¡•°QEЃԌáÖ–[ÌÂJ_r¡·¼*ó¡w*ùlvQ-HˆÒGñT2Å'Ó£ŽíËSâGbÿkn–hY~j Å1ô儉èʵ%åð!5KWÅPñŽ[/ÜêÛêtnÉ„ÌÓ¥#6'FçÖNWì’÷-àb$fÞ&¿ˆÎÉpÂe„ê‹}è:†ŽI;v íò‡³F~œqÔ»7ƒžO®ßpk‡ó‹û{~y#÷é¦OÅÒMÊ`…·LÈm¬5Ô2¸‹(=ä#gðMòBb®wèŸÞüØâýKW (ºJ“«ìCG¡†Ò(^Ü6Ò\Eâ…×ÖÎOpßæûÿs’È.Ijñ¥Ume‹$j¤¸AÆ“(Öǽ°QC µ¥3 ‚Œ`ÇÁŽƒ‹¹b®˜›y-óZæ5$æo°…-l-‹dF†‘z¤©G-ZÑVÔ:¸™ê©žêÙœx ÃüÃä‚'§¸¦äšØSäèÆJ_Ç»ž­Ó§Â@ÏvZ‹÷\O^7-e_гÔNŒEÆÅ­Ð@,K;‹Ý {kÿx‹ï·ßs ² #H:YŠƒÔ@ÍïÏ|rÊ–áȾ éDŸâî¥lÝ‘-Dr›IW¨p„J¡…þÞe±`äã‰<Ú >è ØÎ¨ÃËÈR˜Þ1¿¸á×íx‚؇†¼Úýa]×^¥¹âGË«ÅÏ+w»È:ç39F*j{æ®×Ù{ìÑtPú‡+Èú^«ÐÂÍ6ÏGƘ~[ü}zçå“gÉlV’!»HUá<}E}Ñ{q‘HBDôÏvfHÀIêóåUi²ÅËDåÛ0ÕPÓqŠÝ ;Ø}iÎ)9%§tÙî²Ýe»øX|,>NU§ªS¿>düÓÆÌŸF.r‘k=M¶Ñmt›eˆ*iBš&$ŠD‘(ËV¢ ¢`§Ã0ÿËW}O¸@-Rq:-Ž‡èƒ›½6õ.Ù‡›/o*±·í%)ô¢F¦"óM–Þ¼F2ŸoDŒæVBej a‚ðÃ<1 ‚Ò8‡ç–L]ic³«ë/’²‡éÊÕílú-áâ©[T…Òì#:‹-1 ³´ÁÔ?a]Ï2°ÕÒòŠÃ¸)€¦7ɼÁvî(yGöh9c óÈmxŒì¡Ïº¾«×§jùSþჄ(£+ï)¶ÖM˜™3 -õ Áe‰ò˜âÒ´ÄFÅ+þ4¸XÈýÀ¸­òÇ­Þ®ÞFçŤ½}˜Þ;g>\Ü'›ð›IC2ÝÄíô><ð yÐý‰¶RãÏžCÌCM•WZ'º—ÚqëI*»?:ÍÑük9ÉrÉrÉòÃ6‡mÛDž‹<y®TR©¤RÖyÑH{Òž´gcþW•«ÊUµ,‡´ iÒæV‰[%n•ØÞt{ÓíMízÛõ¶³æþ'-IKÒ’EŒa˜€% £—1?a(jy~r9¥¾Ÿå~æá0:0¢Ìø€¤Gö ¬å˜iÛZÑG°åˆ¢~ôh\i²yPÃ2_Þc¹í§÷Uöoè7Ò‡'½¹5yí…ÎÇÔCl¦JûYÊ“aÄÛ¾›·gy2ky:ë ”8‰îhÈqDŽ[ Ú…̵—¹\¤ßáçÕG„´=Jéü›ýSºpÝ€¢ºÒ3'öò6GÍÉês„Ò%§û´hbr×5+v7;^ÅÏ+ÍÎ_Õ«àÞølNFf“ZØ)ÖU6þ¯¶r¢5©¦9$%}fYEkàœFh dw‰B¤8Š£¸eQ¦–©ejÛÛÛs¸9Üž±!cCÆkÉ)ÿæÉH†u¢%aˆ0D".—‹Ë¹±ÜXn,YCÖ¯“„xÂÃ0 ó7XÚÚÍ òvÜjò“± ·‡NoXv˜]²ÃI›ÃøPãÔ‚ˆSïËg8äœÖ'öäÖÑDcþÝ1¶ÄTœ@òaL£Ù~ú É´E¬Ç…¢ \Æ©k»ÖrX¦L„=Ô“{X‡ÐïçíâkîdäB‡®8„pQ¤ÔF$£µ¤W›Ì¢ú|cÊnɳÊï:‡dlŠ:}pÈý“k"ê=¬ž û’`ó¦«\ËI\¸vù~ÚHýyµfºM©q=k¿,“÷T5¼vÛ{‹tÎUªÔßy‰]ÁN4Ò¹ô6úb ™…;XMŽ#{0•ñ5û"ÿß>¯8@œAßÛ•çH«XV‰‡h[Ì@\`Ïî…È,€5ã‡K+—V.­dkdkdkÒÖ¥­K[g˜j˜j˜j-y÷pŒùJ(¿~á'2"#2Keª¨ŠªÐýÑßZÒ#Œ,` Ãü](((ù…TÅi±‰xŠÖvÈ×l—?m;º–Öw5Š2ä²~¦vœñêÆ1'ýž·Gº ð9Öüë?tÏÒȱ=GÔµ3~I*–º4O`9úx¤;%¨^:¾ÓlU¢è#1æ¯Ñ=tÝcYΙ?2¤ñ ñ ñ ÙÆlc–=”=”Y·¡j ‹Ã0l åÊ“=DGO‚èÖúu|?–zðÙµ>q‹È—kûíMhõZúÁ/cš¢ üh)Ú{¬ù×lã°7øÕÜ n Ê¢\RÆd]È_ŒDÚ«nvýl’Ü;:¶U6³'-PþÖ¯4߯¿ú*Fw¢5¦‹é4 ÕPnp䛒änÞec¬¹ùÎ~O;Æ>©wu[Þù&½•¸•þôzRZÚVùB©œ?/É–†J¤ÚÃyyùÅݧi–Ù„U®³©\·HóÐS­.kÐÔ½2|+9ôR â8zD,A—Ñt.–Œ'EH+ÂL4…?Šþ§Ûà9€¾¢>¶µäOdîȇ fúC° pb² •©˜ k›ºÓ§)NSdf™YfNß¾;}·¡¸¡¸¡¸õQãC<ÄC0æwxcô7úý…ËÂeá²lŽlŽl¿œ_Î/·–ôƒüXÀ†ù,• ¬GWaŽJ'I÷Jjp#º»7Ì üDzóm¸Pã0Cys©W.T|ÝÞ\M"Æò®逺C…"J‰H…qOñ)ÈŒ+ùi@ödxÍïq2ïnc5h „ŒfÒrt1œ` ›*–Á£(DD# ÙÂEÚ™Þ ýp‹ùä©§3˜> U·&>îs¿j×Íü™=}ÝuÓãáÚ„5_bT•õPœ¬$“ ×ô‚Qê0GÑWV~ÂÕz(WíÞ²ÁÝZ×ÞoY±jnÕ¾ž/‹ÅèRšDÏ  æc(j¢Ì É)I¹µÍU M›Ð˜j0"°ƒ÷#‡©È…FqAgó×;öÅÒo€ÁRa¦ÛÑS…'´'½íhZœ„ÈqÓ˜*JÄ+»Bžî|çß8oç’KzÎ>°ìZ¿‡üÇ©+äÕ$ç¸'¼NvYRW¤‹6ÔqÜn#ȬRgN¹ök÷ mÊí;¯½¿ì%·óÐÛqFäè4Ç5%äy…L·Î¸+·ÎØú/Vá9€>§Áš¥òXi’t"ã!¬«L¡aiGŸ˜aYáòÑå£ËG™D&‘I2ªfTÍ¨Š¡Š¡¤!iHâu•a~O RbYo‰·Ä[4œ†Óp®W„+Âõàzp=¬% d|g†ù8a‚€ý¸†w4 Þ˜9<½²ÜIÉuÅ]é>ì[С‡‚oì‹ ÍÙ¦kf¼Ãoâò‰?]G3Ñ¿ÍAAšN+a¡%qaÂʔṓò–苚‚ÇFz×o³ÇQû’pÊù8 w8üðiH v¦IFò1§qW4Sêà:ú¢©¤=BveMÓ/5Æî÷|Êûq•ƒ6O>S»÷œ£·¶Ý[·ês’"Z¾GªæwI.ñwu;òFëÖiÎÊÎHªõ"ç¬x bjýø×„v65ëVY´–s؉î£ZZ hOšã f‘ÏÐã"V *[_Ï?5c«¥â^Ѷ‘üä¤4™û‰»#ˆ$NаûF¡¹à)ÙH6’¨Šª¨ê\Ò¹¤sIù ù ùŠÔ²©eSËZZR¹/Üî "6æwüŠ_ñ«eQÛAÛAÛÁ¨2ªŒ*¥L)SÊdSdSd_“jÕC=Ôccæ‰AI4Œ't)݇HßæZ;u›§5ùÞ¦F1–ÞÕVÈÓÔÛ?ëô*PÂU±¥ÖÄ‘…l¢z‰*èXKw‘ØÁIyYÕµ)ù£L"@·ànÀLïúö’ýü=n¿µÊh …î¼2X¶@ìÀEóqñ!íMáqîÄ‘àaq÷²g¡ïÆ×ß»½ù…ES÷]ºêv¯z|¹/­•}mdÜQ>61”1%A@<. ôªV§¤æÚ¢~¥š•Úy¯ÃÒÚ +Ùqsr£çÑó¨$hDL˜a\™K<á %äÖW%ÿ÷7à/FQoRv[ê/Mà—péÖ-¬«L¡ÑmÐF+ŽÇâ>îã¾½Â^a¯0›Ì&³)«CV‡¬ÐB -Æb,Æâ ¾à ó; ¶¸ŸÏŠgÅ âñÈrÜ@n 7в•hˆ†°¦†aþ˜rH¸(Ò—<‚3Ú`cè Fgû;ÞuŠUe?—ã¾¼±=fûÇõ©3òn 2‚áŠFÃqKâÈÂ0êNØB€›˜šþkvKý©Ì¹DÀ¯¸WdƒÓpU€]¼Ê_VÒ2m: | éÙE ü¶,nEKLSh&ª iÈãÕd Ö?4' yÇ\_ŸŠRôö'®‡>=À]¿vûLÜÙÏMä¤Nüy=…£L¦;¤É_hóD2‡ï×»jåƒÞ78·ÈÛ¹²Ã’ÚÅ*ìôèíxŠNB5ôÕt6ýÈ 5‘Aúá,¡=‚Qì›®4ÔOé¼kýì>Ä„ÝîlãrZåª(c-߇1›Ý7 …§xЧA™ÄIâ$qÚ|uóÕÍWÛ=¶{lWëi­§µžZ ò| ÈÆüâH‰ef¸u9êrô”ý)ûSöWdWdWdÅSЧ·Vë9žã9žEŒa˜?BN’f¸'(ÀÙ½R%È^>^ÿëÆîèÏÂø³ºQ×ÈèZµ5etE~ÁŒA#îçAªÂrH uÜ‘ž¸oY>å»hh›Ñ”Þ]>Þd”_¹ÌÉÉÉÉNξŸ}?ûª%S)íM{ÓÞ,bÌ¡+è ºÂ²œçççmècècè£ R©‚­E›¢)š²ˆ1 ó;l¡‚ŒèÉ%2ýÐ5ëêÊ/ò\]þcÉuîý1žó$«ïëž=Ojü eôþ/a†:T|DÛ ˜ iÜ,#ÖR = †<®B²Sö`€æc€”J2¸îþ‹Š~´ÿZü%v>ìtû†¥{• DëÀÖ{臥Â&ZŸžÅ*4G¢%×°ÍPa׃§Â»-¤éöCÊ. õšW *RÍivàÞ ëh}zš<Çtâ”Dë+±ùm`+á„4’z¨É¥ÒFÒñ|'n}é¬â^x,ÅR¬¶œ¬šhM´f¡&FcÛ8¯V^-ݾœ9r)©Mj“Räù@²HmR›Ô&ăxX§Ñy€x€8€˜‰™˜‰vh‡vB‚X€ ‘¤ Ѳ( Q.Ê…{œgGr¹'ܲzèá 5ÔPCY¡<Æ0Ìßfê'(ÅŸDšŒŸ±·Mh%-F‘šd§àb¼.D”„wx;ØpÀ4@xÂwã“ ô)Š`z¡Žže’)<2‘Ãë/ñ3úâ1M¤Ý`¤ð­ý&ÙlÅà[ò„lAOË`Vvêýn<ÿò;F˜0—ñˆª(Ex‰7çIVkóL?™SOÏ~3!qx]Ÿ­ÇÏ¿ì¹üˆíÍ›×*¼µûè,¿-”Ü‘5–%Hºå·×rúÊ_¤#ù~µåÂ|ßû<8¡Õ½ÝÎ#ë´­WÑçû@º 0FÔÑ<Ô nX‰á$×ÑhÏѦ´8í&=-u”ƒŠt<ŽB+éÇ­ Ìð^ïPñøŒ¢!1Ùšûœù{è l‚ËxhN?Ò1¤,~Áx®8qÅcº¡¸³÷øóÑï5Iß)^êÜ »»^V†{ƶúôÜæ¸,@rŠ/ÁŸæ/›!æÃæD±‹8³gjH~À˜«aý65;w¬_7±~b ÞN®MéŒÃÊS3ê"«qŒëÍÞÖû¼ôgiGI^õÁ›^Ÿ¾{ïñÇê©+Èy|À>Ú>èÎ>©ÖS<…Æc<.Øm´ÛHL“FLáwÖ~©ýRÿ‡ÆáÆá†3Ç,;Øþ`{æ¬Y3øºæÃæÃ†c&ÞÄ›Ï {…½Â^ã>ã>ã>!DB(¥”þgnk°k¸T.•KERŸ·x‹·–a‘ô}E_!ш¶T:ƒÄà^ᕵü;¼Ã;E£hâ‡8d#ÙÈCò¬ËÈ@rƒd! YÈüÿ~Ò‘†4ä£ š >ðùÈ5Ô ˆD$¤¸‹»p†Ü`[ØÂÁZ9v€`Øüá²ì`g]v‚œ€Àö°'¾Ä—øÂ npCAxÃÞÖ’%P% ”DI”„J(IIR’”„+\áŠ`#ØúÕ«<Ê£¼%b¢RTŠJüŒŸñó¿òq©GªGkƒÖÍ|ï:Úu´[ÈêÍ«7¯jû¸ùãæqsÓ•éJñ3]MWÓf˜‹¹È`—#Ãj–Ê&¸d®"i*zˆéÅ_N8ÝðÈ +;–7t4-¼³úý—“ÝÜñv,ù•TÁ:ˆ>@+Bk ÷“º¸DCé 4 Øêåeíµvç«>3ùQ*QæyûãƒÌ?×þ4*âð"âJîb<=BôÅDlÄm½RÁ/vƒçud>ñ t"}kY-SóE¹Ín•°÷<:úfµ´àþõw—ºÏàÉ:I7äOו6“ÜæÌd®ô†|°l¦¾£Amt½äs8)ã§·ðB{7úcû”ÕäÂ*‘@xÙ?Wì]þíb~|ð€Wq•sg‰³D§b‘Å"kt.þ¹øçñ÷± ñ$ªsTç…Ux.ð¬QÓf´ÍèàˆÜ„Ü„´éù½ó{ë í í í´´´ô·õ·õ·u)º]Šn½n½n½î˜î˜î˜~Š~Š~о‚¾‚¾‚!ÓiÈÌ7å›òMú™ú™ú™ú^ú^ú^ú}€>ÀpÅpÅpECCC¯Ñkô]¼.^Ÿ?"Dþa´0Zm™êùÀ>÷{÷ø‡#ÖýÑŸÜ$7É|Áì¤*ª¢€³<¡š´Ð\BúÑ,š…º´?íO;á.àvc7vÿ+åQ‘øµkÊ?ðW–/'–¯4GpG –$)$…¤Øl¶Ùl³YÒKÒKÒKþFþFþF.—Ëår›6lÈ—É—É—Ùt³éfÓëÃõáú(‡*‡*nÉKÉKÙM êÔ5æ²Ø[ìýdeº:]íu¼Ä7ÄÙ®S\§HïIß“n¨Àõàz ßa˜BÇRew +ðYl!n¤å=BˆÊ£QÉJg½÷¡”x†.Ï·×Ý7MÚrvÅË©X‡q8B)$à`‚¹ðe’ùg8KL²šæ‡’¦×ÉÛìU‡ Ž6¶ƒ—+ömœR§g­Ë÷'çHkÜ  @]¼’å©…¥æ¬ƒÔRe'æc7T'©Æ_„FâÖS¢“p ÑHXÑ.,Hô®1¸LHbàÚæ/?x¾H™a´Ñ F Cº¡QÏR5}Þ·XÄsÔÉ+Qâ¾ymï¨pi¾&sc -´áGâI§Ð)€‘ y#Ý$ݤ¤ß¥ßeØÓ1§£á£C3‡fü[ÕÕõ!Í8Í8YI$Hê!™.™.™.Y'Y'YÇ—àKð%¤·¥·¥·¥nR7©›d¶d¶d¶¤„¤„¤„±˜±˜±˜I0 &ÁxÄxÄxÄXÆXÆXÆXÞXÞXÞXÉXÉXÉTÝTÝTÝ8Ó8Ó8ÓÔÐÔÐÔÐ0Í0Í0Íàdp28™“ÌIæ$ÃcÃcÃcí í í } } }¼éyÓó¦777äÏž;\ÛCÛCÛC_F_F_F[R[R[2·En‹Ü†–†–†–ÚCÚCÚCyùyùyù:ª£:*žOŠ'Eƒh âqƒ¸Að<Oñ®xW¼+¬ÖkÄÑâhq4¶a¶Y«¿*¨ÐDz@zàðDë„uØ'™*™ ššâvq;fö ù:ÒßÚj>‘L$ùëüuþ:™L&“Éü~¿ƒ„‘0ÆÏåçòsÉX2–Œå³ùl>[=N=N=NrLrLrLù\ù\ù\~U~U~UqLqLqL‘¦HS¤ÉÉÉ©ÒTiª4É]É]É]uWuWuWþ%ÿ’©ž¡ž¡ž!   .¡.¡.ÁãñÇ4n7×’kɵ”?—?—?çs‹¹Å²j²j²j–nNRµT-UKR…T![#[#[#›$›$›$k'k'kG6 dƒtœtg²o;Þ‹<yfZŽÃ;‡w†û^õ½Ú4së°­Ã^„¨Ô È8œÃ9ªg"Ã0p…lÈDŽ`8¡ŸÛŒ¯ÙÜw¶OÇbsý0ƒ;DΟö¾íüNö®KÒ•ìUpÆPІX3n±*ûoŽÓ[ˆ… Õ êîëk›F~l•º8o›¼Ï9¦9¬T+Q/Ubê‚,y¾„äÓdeýeþu–ÈOEÌÄVa•R f¢Ê“fØéxT˜N Šæ:yñvrbRƒÅçxܘT«öä2­ëÍóiåÞ÷” ’¶1\Ö'¥àb‡Æåt~‡¾©¸Û­W“¹¡3‹}¡QE A2IJѲÑä…>Bõ!Î.ÎnÇð¸½q{?¤YõeÕ­u»³vgEvÏðÏð·yo»Ãv‡ÍA› 6”ͯ¯¯T5T5T5ä ¹B®Py«¼UÞêÇêÇêÇ6{möÚ쵉³‰³‰““““––V”W”W”WœTœTœ”—‘—‘—Q¼S¼S¼“½–½–½V$+’Éš»š»š»®+\W¸®°1ÚmŒ‰ƒÄA¹T¹T¹Tô=EO±ØFl#îw‰»èsúœ>¨@*‡ŠCé\:—ΈĂ`'ØYnLb±‡ØC˜.L¦S_êK}óä/È_ ÷Ñûè}t¥t¥t¥òüóüóüóóóuº]„V¦•iey¯ò^å½ÒnÐnÈÝ£ýEû MñJóJ»=Ûw¢ïD"^/j¦b¥º¾¾ñúFšGJ—”.Õf©Õbº2^¯é/Ý'Ý'ݧT‚JN‘N‘NQßQßQß‘ý,ûYö³*R©Š”í—í—íW6T6T6”š¥f©Y3D3D3„Sp NAê’º¤.I%©$•ÛÍíæv““ä$9ÉMã¦qÓˆ±#v\9®WŽ|&ŸÉgKurŠœ"§¸.‚‹ [Ȳ…ïÄwâ;aV`˜?̦ãè8:.~þüüùBM¡¦PSŸ¥ÏÒg™ÏšÏšÏ———¶¶¶Zb’Y&³Lf™ümùÛò·QUQ•>Tª}c°1ؼpÍóÈóxï¡x®x®›hšašaøì¶Öm­K;ãuãu¾"ôÐ ðR‰Lv12L¡e=è+”ûÒ©R“ägnG÷mfV'v`¶ÉÏ 17Ùßýj7aâXjCGJd¼ Ùn6 ù´ aAôWœÃ ,Cq¸æ•È2Ýx_ê“WÖºê1!‚7ò4ä=4N骕/òßÒ>á‚zÄêîÿ¾¡À²&˜±·ð‚·:£ ‚P”MòÈ$sIQM‹^»Ÿ>áÞáÚ*ã%›QyDÐäf fz&ÜY.Rß'Œáå·-îum|eEX´ ‘.è‚Ï$‡ä`SÞÖ¼­èsyûåí™Bu¡:s¦rªrª$)B!5,xÚôiÓŒTGuÖ¿*e݃¥uA‘ˆD¤u¹j Æ_–xOâ)k/k/k/SÈ2…<\.—•••­”­”­”ieZ™V>M>M>M1C1C1Câ+ñ•øÊÏËÏËϫʩʩÊ)æ+æ+æ«*ª*ª*ZÚ€5•5•5•UíUíUí±ŠXE¬r‰r‰r‰ººº"\®Wª”*¥J=I=I=IYZYZYÚæµÍk›×ª+ª+ª+.¶.¶.¶üD~"?‘ûÈ}ä>rœçÀ ç†sÃ-#c¹õÜz\Vx)¼nÜXvcÙÈs>|. +o×Í®[‰—9a9aË©sÕ¹g×Ôˆ¬¹8 ouÞêO#q¸ ´-AKˆÅ‹âEZŒ£Å„•ÂJa%¦Ñ4ZÌsÄñ²xY¼,&ˆ b‚e(°¸CÜ!îÈnœÝ8»±y‚y‚y‚.M—¦K3º]Œ.z½¿ÞßÒUɸӸӸS7P7P7ÐÜÉÜÉÜ)/>/>/^Ø l6äÅåÅåÅwwwçÍÍ››7W(æ†æ†æ†ŠËÅåâr}{}{}{ËCgCgCgá´pZ8mL6&“Má¦pS¸q€q€q€å)ŠÁh0Œ´íA{éBº1+ß=ßÝX¥Y£f¤·CCÄiÓ:^.àà½ç½ë{Wy$défÃ>¨‡hD³‹‘a 1 wd/úÑ¥t8âªÏ(õÌC^;¬üP¯–¨˜øêBLÝ”¢—×=äâë“îD!BxB/"Ák,þÆ>\Æn!÷…ËŠ]éá„~_ÆänÃ>•EkæË—ë²YU-ÑH3b$«AÁ‚øŸe€Áº|oðI8EÕt)ò1 ½¹¢d†S{º‡Ou‹‘ÈBôÔD4ë^¢HÑãæW¿Sªl“ýþ}Št$ÆJ³7ö>%}(›+q]Ò3<ïiÈÔ½—óKÈ|À>ÚŒ Nýññ2^Æ; FÁ(¤— +V­ÖöÛwî¸E¢Hé]ºwé^1\ ÏÛÂuçºsQÔ‡úP5ú Ú“f¤ifÉ$c©¦“ž¤'é‰>–íhÿµŒ¸@\ . —éez™^¥WéÕÿôû² Ää&s“¹É|ŸÄ'q7¸Ü ®;×ëÎky-¯åªsÕ¹ê6Î6Î6Î6^6^6^ʪʪʪêjêjêj6ƒlÙ RµQµQµQ Q Q Ѩ5jZSESE=V1B1®¢rˆrÈ…ÀúêOXš$+%+婺|=ø×(}}}ý;!DiñK^l^ì—™ÚòÚòùûŒ&£ÉhҞממ7O5O5OÍy—ó.çÉÁä`rÐúh}´>†††ÚUÚUÚU¦¦¦¹ rä.Û‹íÅöôýD? …‹ÂE:…N¡SÄzb=±ž¥«½F¯ÑkÂa°ÑÿûgçÉy’’’88¸üàò¡¡’PIèÜCÕU?ä±¹óæÎ{jéSõ©4çqËqGñ–]‰ SèX†ô‰  dqº–¦£ïQçy›Z©;¤6,ð»YK7Ë?yWÅûŸx;® ²Åt? áï €ä=Œ 0—BÅ÷>·ÜP*u‹fap{/@ž#óS©å7®þ:åõ–E7ßð~\o2X(*>¢q¯ÏBøßÿ¼Àƒ€ƒ"DîéMdânú€ºá8¢‘È¿#ùdq7ß  X*î”.tïo£Wë²Õ¿Îu°Åó'„ëÇõãú¡=ÚCUúHé#%]yvåÙ¥¤Ñ¢÷¥¹¹¹X¶’d™aù«øXÐ0 ³0 áG8áG8Ò˜4&ÉR²”,%—Éer™PB åêqõ¸zÜRn)·”‹â¢¸(Žr”£|[¾-ß–;ÂáŽpÕ¸j\5²’¬$+IRTÀLÁ”ÿfû7êßHse_‰}%zÎÞÜms·¾CôÐÓaYs±¹ÈWøS|Ê0,YbH#Òˆ4"»È.²‹ëÌuæ:sÓ¹éÜt¾_‡¯Ã·æ[ó­9gà \"—È%r[¹­ÜVK'®×€kÀ©8§"È#òˆ¬"«È*Ò”4%MIR…TA"‘MÒHçe9xè­Ð[½ƒ^¸¾pZ>õÀÔ³¾ÆÄî(‚â(Ž2ìBd˜ÂŒÈ Ä¡ÊÂ#¨®wC‡;™sÎôzW̺}/¬{j‡“ý†Ø{ùº©Ó°³Ðy¸ˆA6ûòïDâÇ'Ïa[HCw4x4ýŽvÛ‰6mu[|¹êš)Ÿ†– \%¿/A†¢7°¥YðþÇÎê8„¡3ß—\ - ù¶{´ÂWæ žã‹^¡`†ÔRFâ Õ_Ð_0ö1565+++KËJËÊËâ8Žã-fb&:``Á?|¬+~æaæY‡Â\.ðS€u«åµMÂ$Lúfo7p7 ‚ *k–wPàá‘õ €e«%©¢#áhI‰h]cI¼h [Ø¢8Š£¸%" $ePeà?øY“0Z’*–Gy”'±$–ŒÇxŒGþ¹Mç6™¶5}ßô}é4ÏPÏPõÚ¯w¾¾è÷ÚëµWN1¾ߣMhºƒv¤é3KÚJ¼Æk¼¶&–|ЧxjM@ù/ñÉHF2}KßÒ·HE*RñÏñÜš˜Ò ÖT•ùÈG>´ÐBkMg©‡zkÞL0á#>â#>à>ÐLšI3±‹±Øº|×qÝztKÊKÂÊÿ[%TB¥ßYïØ¡ZѶh†fHÏišÓ4m”©¨©¨.Èa¶ÃlU^ã5^ $Jb j ¼‡8v12L¡biü±R¾Ð£©Íu%hU1‹êXÍäõCs”ÂÅçâìÂm8÷*Öı²¹¿¸ë˦ÑÙϳÖÞӊ ¹.ÜO¨/NhØA…v,xž«ÃÊR•Ã< À<(8%µ;¦(&sCuxÃÕÚ\Ï.ŒÂàü‚_,ÕDÝ$Ý$ݤüÏùŸó?+)))w*w*wZKŽÃ8Œcƒ¼¾¦“ÚKíIe³Ú¬Î½d 4æÔµYn³œvÂu\G¤#éC^¨fF(0kÖ”¬)YS¨šª©Ú.Ö.Ö.ÖÒµÉú É2ýÃ0…+ $3чTÇ\ôGµFB%w¯.Á¶%nºÔB7Ik’~Ý#r\ÂÒ'bž¥Ì"M‰+E{ñ'L¬­ýwIÁƒ#9ä<†‹qtœÞØ•Um׬¶­ï£Æ•KM-ƒÏ»3ósçmÖÈ~7‰ÜRœ¬&åp °_Xÿü¸ßªæÞc}‹©Ozå>ðL“÷ÜnÚCó©„ÖÇeÜÇ}Vëû>. 8 c±Vîλpí$k¸Áä½…>X‚1¨Ž’,L?6zžž§çÑMÑÔ` 06þlüYž(O”'Ê×Ë×Ë×[J’¶¤-iË"Æü Qˆ‚¥kL}L}L}²Ó²Ó²Ó¤õ¥õ¥õF9Œre-9#0‚Œa K™yÄ8T.µÆ£o½>Fzv§!⯴XB¥äg9Ž%Ý*[{1 ­‰xƒž áï°Ìo8"€öÀN®9E<Üiá_ê:Æ¢+™, ÉÙ­Ý· Ç¾ºw{¡!6Q'’D2!bVáxð…êÉðwK‚ ¸À”Ö¦ %—ù&Ü.õYyéö¬;ú‡Æ·HÇ4ôÀjÜÅk¬Ö%\Â%r‰\"—,VVVÊ·É·É·)î+î+¾Î÷ÙmÐñYؘ?Bch ± 652525ÊqÉqÉqñ°ó°ó°³mdÛȶ‘¥$éFº‘nlÆ>†) $äî’nä®°ö£ovmåZÚƒÿY±FzÀ8ï~pI%͹¤M5Î#kÈ)œ¢Aô)Ú°þ!ÌùÚÜ82ZøU¬Dç4]]9±JÉ}E§¨94æõõ¯3î_®Y3Á ù ©(£åàìFü}\FÁp†ú`‰¬6·‰Ë±í-÷‘vµö”š‹º(ÏÂôƒ;„C8DâH‰³dP1Î2Î2Î’{˽åÞòòò¯m¢–ìì ó³äÉáÁƒ7ž1ž1žÉ(—Q.£œlllã-Ç[Ž·¬%Gc4F³€1L¡`©²ï$f,¼·Ñíþ+Šn·lÞ»òŠbPVäi\Ÿ}!¿ÝÎöZ¿n‰ý˜àA@­-ÊÌ…(O7à^‘k¤;b»l¨Q¢—ÜE3Q^1œ;7bç… u_Ë„Òâ{M“¸Šh$ DVeÿ~p‚ ìO{ÓÅ¿–Ëд“'KKZ{JÍD}Vqÿá%  dY@à-Þâm~Éü’ù%-=Ú™ŠLÅ×Që±ë­)æXºÊ 777åÔÉ©“SG2F2F2Æ6ß6ß6ßZ²+º¢+ à P®d<é†ò8Ûˆí8¾Ž“¿Îã‹g’½žKûó;Ž>ºù%vZœ!Ù'ç*¹O6£5ÐX3Ì_S0ß À•"{ˆVt#é齊.°×·~^£‘¯?šš«ˆO¿8|ŽÍ~âÉ­ªïîáR‘Nîbé‚8$#‡…ðûÂ!ΰƒúc±”ã–r¶såQ²ëù0ƒ°÷ÂpÙìÄNX³Çhƒ´AÚ s+s+s+å$å$¥5‡:UR%U ^ðbacþ%K}0‚,”Ê å³FeÊ%ÍfH3f9Ìr˜e=õ“Ád0 Ãüà8p $‡Ð_ð_ÓëÊ,EˆäV—1õU%®£·8Œ.3¦h{n¨uµÍ›QâXêJc¸vä:!ÃzÜd-ÂÈ ®ÐТèDE&ò o7¡öd¿4ç3îå4Ýq‘Oå._Ô> ñßÕþô,ûg$s'JélêÃú´— ".ÄNÖ÷Ú{a\ÔôÄb\'r‰ŒÂ,lÇ=öuè{Ä!ΰ¥ioºRÖ˜_Kk&Ès¤±–Ídê³ É Ë\¤ÝEÝEÝEá“ðIø¤ŒWÆ+ã-Ých ¢A¬âÎü шF4é@:–žî9¥rJå”’Ö”Ö”Ö´]b»Äv‰e~V²,$ ­3¶2 óã± |TBæÒ¸…ËØ‚>ãÛe”3a,¹LDl7—“w»x,êƒñ±¹–è…ÍdiŒÖ˜‚ã`£×ÿˆF˜¹@²‹ä /‘ÔœTmàãÜ¿ø,Ç·ô(F£ÊcúvcjåŽÏ–}ìJ*!sAÏAÂòó|¯,w;úý°˜ßÊ-åÒ5eo¥Ö®2˜Æ§×p ×,‹ÚPm¨6Tx!¼^(¥J©Rj£´.ê¢.Š а€1(±ˆ%Ä8Xzºgzfzfz’&¤ iâÐÜ¡¹Cs˼ô0=L³ÎW óà ‚r§8)M³P ?WR2ƽ{õ¡%·yôÁ#šA‰ó“sfê^úmš¡*Š‹ÛÅJTgmQfþš%?ÏHt@”#~p–ôç‡pö—¶z_:$Cøî„'ËÈì_Ÿyúb¨OÐ=ØB&¡Þ"0C`Í%ßë‡ ØÓ«´]Lüøµ\†mªî"DмŽyóªhõáZ_ÍvÍv;_Í#Í#ÍEë$Û˰ ëXÀæGBÚ~² £¬áYvŠû£K5cÞ˜._^=uâ²½·Oˆ—nDnŸLœÅp!ZÜJa3¤þ!Kßô2(gô¢ qŸÈ-'G5ìШÜuôBCø¢µ¹±¼;çR™¨b_4o/8Œëˆµ&åd¾s\–«ÞÑhÇ}$Ùä,@/Sµ:LvFÒ)ÈC¾H)¥uÑ,çÃŽFÓh4†š†šÆ™ÒÕÒÕ*££££Ç\ÆaÉ@KIHI‹ó7Ψ0FÃà/”ÎÙ™³37('7'7û¡$[’-ü…Fb+ZçòýGg?˜Ä4“‹id‹ØÚ¯e‘Uv*¨`iN´d%›%õwxÁ:‹é|Fò;ܨóÀÇÊ¢Oì¶áޤ?üb¯{渾±=?vÎJâ–s™ÄW|FC©šÍ;ûã‘d¹ë‰1”ä“aøU<¤]‹rë.ÿ™ßKäd-é¾ýÃù³¯ŒÂkq]€¹èêx8¤±I¬~ØS#ë¥^g4$œBÅCêkÒM’ 6-%Å$®ÖRíLXÅýGW°\:Ò!P5Uc#Æ`­Oëíð3ÌìvÀüDˆ€5w»À„3ÌRZ«a„ Br»´£Ú›ïë|^žý ‹~狱{éqÝi§ê. œ¨È}2‘ÅÍòµ‡âH=ñ­Có+ø—¨ãz°Ú¦’[Ý«£Ønê&h3&V‡Ÿ}ûQÅ0ˆ.ÃÈ aý\\öL}š1 9Ä‘<ºÒm4_’';)m¤p•Tå+Y ‘Öd-î Ã0 Ãü#¨Ú`³„ã%ä¾I+”_DŽÌ\oPUl·» èçµÑÁÁ¼ÁØBY¡\Ô†?­@a7>"¹'Ö[PÂß>Üõˆf?Â%÷8ÿ#n7"cÃÒ2²“ôU¹2 O©+Úâaf #?..k´>ÈX ¶Xˆâú„A¸´9o’ûð«¸ÖRmŒb,X Ãü°8pàà8€ÏÚ«æßâ bŠ@xC‰¨ÿgëcÓSU´§n¸©;Ž£1*WQâ¦Kd z±„¸‘–ƒÜa[H#&Ždã<†‹¯iOjï|ÑnMp—"õN”˜‹ò¦qB›\!㤶ÿÑ:7~ÙxŽ/¤I#˱—ÅNº§e¾/DуÆÚæcüm2†8¡}oûû6A2ëd(t(N┲ÿ̆ùaÈ!ÿmy1Ö\%W‘ÉphKª’ª¨fݪ†šÍ;È0ÿD¬*BuÃMľ–ÆïÏHʬ[hLAk‡ö•:ôqGbÈTz¸Ñu±Ý*UªÌÆ2ÿÚ£ŠºXYòÀ„ îhM§à(ïÁ'ÓFضO/w~¤¿Ðb8*ĉÎ;«^¨öº¯y°0^L†3lÁa>vâ%Úì¤û±qù]Í'…»y.ÆÁ¦Çü®@ýigT6Iêh)DÒ[x H a!cæŽpt¶Ù¶Ùüʱ•c%{*-½‡x‘9YºÐ@ˆÊ,` óOš€ ¸IF'ìÐß4>¾ïþicÖç­,*Ÿ')ܧX/'˰TJ²ÉyŒ,t­ÇDPî gOBh°¨öŒ²Šz•æ/sñ"=QÅ£<ß¿M«}òÄíRï¼ÑÕP\üLGPÈXŸˆÂ‚ÓŸ66_Ñu2 2‡óI¤Q4Vt8esH>ÕZjŽãT±Š;Ã0? r„ pGd>2¡ÛØbc‹Mœ¹òÂÊ GRÝž»=7 °L#E\‰+*±ˆ1Ì?É2‘P4ƨ"“?àh_HÛÊ ™_ãQé•#QåàIz9Ùdm}/ ,ï² ÇÁòû2 ¿LôÓóÈÅEŒ(‘ñ€Txˆ(šl iž[µšÜ3ÏÓè à„$Ž«{eè#1!ó­<±a¦+W‡œ&¼h¦Ó¨'›h©°áòç›Ï áÚãPóup¤;á!¡¶´³mmE©#Œ!"˜XV™<ºòP!rlÁxb¶Á ÑvÖ­Í' HRaÃ*ZŒ££ÑíèS4DC4¦ù4wp $ ßåÀMKdDˆe¾2_™¯ãÇ!ŽC,_Z’C’C’C~»G²ûÃü{¤" zZ•ÄV,@?$½þ~^z@žSº§v˜z€Ë~õ½ óÞmpåÉa‚Y«Jƒ$ =Ì{ >ŠÃëpÑ,p—0„á:£³èì´Ói§ýÉäâÉÅŸ”y{äí‘[{µµ´µäöè†n†f4„† ðà{{‹$‚D -MKÃů—_/©¡“¡“!äcjÔ:©u‚ÁÆf—+Ö®X;´´.^Ÿ±›KàøÞßûK¦? RéAéAÛïû½ï· MÑcEuì®Ø¤Øä=˺ÓÇÄ áv‹ñIã“FÜÕwÖwNqÈ={ZדºPêBŠ’¢¤(b!ê3ôú ÎGçCJ‘R¤”¥5Ý,7ËÍò\>—ÏåqçqÞRé'uHRGwNwNwÎò·ä9FޡРu¥®Ô5×3×3×ÓÜÄÜÄÜ„Ü 7È ´Fk´_Š/Å—¹ƒr嫉ÕÄj8ŒÃ8Œ8€ĸ÷üëù×u­¹Æ\¡BV³¬f‰M¿„| ù 2µQ–pîïAŠ‘b¥ 3]ʺ” (ÛcA[—Ý]rwID×¥O–>é’Eª“êÄ‘N èïòMºÁ ™@è«é«™J4ŽmÖ4mjÚÔ4¤Ú¤Ú¼Øà–ç–çq.oTÞ(®1çÉyJö8H$’‘±ë““*[/O”'z+55ýhk~©Ø«Øk<7xnÉÝúúNs¹4.Mšfm „Gx„ld#›\"—È%’NÒI:áa7vc7:¢#:{bOì!ƒ 2K =®á®‘äù@’ƒä Í¡94Ä™8gbKl‰­õåf! YØ€ Ø€²(‹²d-YKÖb=Öc=b‹XÔDMÔÄ|Áqµ¸Z(kûØö±Û§SEN™¢ä†sÃéEz1»Ì¼UóV HuJuÂM¢"*:‹‚â»Ël°k±§q§ÝmÝmÝmåwäwäwÒíÒíÒí ­OEâ!²»ÃüÛÌÄVDp£‰ž$ #¨‚^{õ%î^ú¼ªª‘>¯Tõ5ƒÓ+Û5qð!ÿ³!ÇŒ`xÃÏ€ï` *Äš>›Ê™¹9äw€ÔÇU±:݇êb=ñ=,‚ޱ¾™–ÍhåÐâC‚—ô(š€ûBGF$<¬œ¸çVÿç’úq#È ²GˆwÑÖ/â>d—ù?X+î¹å ¦÷„Ù¢¹Mú“朑„!ZsOÖQ à€V€V± ýÝâ‡;"L&›×åWͯšÙÁ\Ò\R[iHCz£7>À6àüßòÐüùYòrœÅYx½ï2Ée’Ë£òòu³g/ΚrS~Sžôdé…¥Ζ ›è&á1M§éö½°ÜRn)ÞÓpÎÝióS›Ÿô+… ²Eç¡óì/þ øYžíÛ=ZùO׺Þn‰&B6ªª¶;­ôOø„O´-mKÛ***ªF¨F¨FÐxOãéz€È$2‰L¤ Ò‘æ¤9iné™M¯Ñkôšr„r„r„âââ•S9•[öIî“û侯Vc«±•DH"$´6­Mkã$Nâ$Â…p!šÛšÛšÛü6~¿v¤iGÒž´'íÅâGñ£ÜQî(Ûá|ÝùºçÙ÷ô=-Y©Q¥F‚ÌÌ’ö „GâPd#›ûHè÷6Ô˜€€åd9Ynùå¶Òm¥ÛJÙ Ù Ù‹´i/Ò^>>>Y{ÿG"‘ìfÆ0ÿ6ðàè|šˆî°ƒ ò§Ûc¦hGc¨°¼ð®åÇúp©p8:\ã5l ùUTU°¾ð€ŠÂj´Du#jò“Iu’B–q­‰ «ÌׄGt˜8YL¦D`4X ’üÎÅ×Ü•7r}h_Gi {Ø}JY¿˜ûñ×m5‡äF¹Ïþ:W—Gï1^5yîW™4 ü:¶ŠaÐûFùþ~çÄ£óôýÅÜyÎÑ>óÅg/ï}ª^Ÿ÷–2äâñ}¶ ÿpǹãÜqËr¥•Tjð:åuÊë”]®»\w¹Z£ÚŽ´#í¾Ë·W¥Qš[Æ-ã6YVôÜwp¿¾oï½½ã51kbÖ¤F…áS®üKå_¤“Úä´É‘6i2¯É<.¥}íöµeaÁ݃»ó¿÷w×ar‡ÉÕ&¯ª°ªBØ^q½âJu²Ûe·‹3‘ed„;¸ÿïòÚLâ’¸$8Á NcÆŒ xõáÕ‡WÆ6Û`lk¡hD#½Ð ½ Ñm‹aþ+ˆ0ÉR‰÷»U´‚Ý!ý¨Ë3FfSzê^Õ®¬Ü±•µäTâ…#Aò_ÈHVð*( ÅlBwr´ÂM\#Òž{Î'uðûÐÿïÙeù6þa.6=¼] ü°°úÀ5úŸ¨·°të‰ÖœÒ߇Ò[Ã:O/?&Ï×qÓ£ǪìV²¿Á]oS]>Œï =fàê¢:ì¡€ŒÍ¥Ãü¥Å=ÜhJ4Û ]DOn6©FŠpR"!jçáJ£b¯õ|žLj¡ {:ÃXY’:ÀÁ:d™7Ï1Ï1…bfP#¿ßÀ­‡F<–¬”¬”Ä1BŒðH ûîßû-ÜB.£1ü"G6ÍÃ` ¶ns£õd Cæ`vá!£1”É?JiI¬YÐߟR€áÓALiYß=Ñ“Kâ’8‰xG¼#.*³¯Ì¾–‘[un5Üù¡ô¡tò´ìÞÙ½_I%®WIsŠ9Åüé;ûìÜà7Kˬ¨nÜ*¸UPø)ü~É1É1É1–E|K¾%ßRÐ :AÇ.w†ù÷¢í1 §° Ä„Ý_Þæ.O Ê:ïë MÅ$ÿ„¢Ïì'){ÈWIzèÎú˜Gãf£:`&ÎÿÛ^„eò#ËÌ£5Qîd3©‚sÜ)Ò˜\%5I6Yb6 ŢÍèÔ,Íþe­Ý7I%|Ä[¥j•,½tjñQN³BJ:»»WÚȹöòûX4Ìnߊ"&;µÛI·U¶]é'þ3 ô‡¸…P€ &—]æØWT®R±}Ûf WÕ:0íxýü_ ÑŸï’hF^P-2©zÙ€Tæ/÷{óHS5q5)îIÊ“|Âa$é«.%o/„«¡9J (ž± X‡ëíÂ.ìÒ­Ò­Ò4œ†Ó{æ†æ†æV¸ƒ;¸#æ‹ùb>µ¡6tèòÞ5ЀÃ*¬‚ȹqnhAôD_z^€Žt#Ý —ŠKñv¥]éØÃáП¼+Ôs<Çsú޾£¯é ú‚ ú¹ú¹¹ sÞç¼ÿÌ‘™dfþ¬Æj¡nÔ®@ôA¨5'ü÷" a_‹¯Åׂ!¢¹¡¹¡¹aîdîdî”s"çDÎ ä!y–ð¨ú¨Ï.w†ù7KBt¨Œ@¸š|ÌõEÍ—ã>•îúÙ»‹c?»…ª3²Àråü?ºÄßÝû*6ùwŠ4#Ù"¡³(ù[i³|;ÇH/4Aæ¢?ª“¤ª /𣔵*ìG(©‘ÖÆzZšCEt›e÷Öƒw}áPWé[ü½ÇcÛö>F÷±¶6•ÇŽwûTqtÀW¿²>~Ýœ;Ø*USåÎÒéî ë-ÙüI®6 Ľ)AÜú‘n7ŸÖ–4þ’0 e|Nû¤©éñù7ï yZ5%öl…ˆÊ+Pw± yÂ¥qe±[,"V ýQ>,§óÕ×Á©] ÁÆdÓKa‚XÆæÄoIºŽÜ´m*.­‡5˜ 3J/,Á5ÖæÎð…/|éSú”>µ¬P‡©ÃÔaæsæsæs¹$—ä~må=8ñC½÷\ä~­‚‹_Ä/8g]_Õ+Ó][ÎBÖw1z¡6j£¶8Z-ŽF]ÔE]ÕKÕKõSA"H¨D©‹ÔGb;¶ãz£7Î}gUvÙMv“Ýt2L'«_«_«_k¦i¦i¦eÚeÚeÚeöÌì™ÙÓR’V¢•h%v¡ÿéX¦ÎÒAñ%¸Z\­¯Wžx[¼»¨ˆŠˆù¦$óg‹$d‘_Heœ¡éN4xÔôÍ¢”~];´,Š]¶ëÔíåWËžö;䬹;íUÏd#w‹Š}"èÿ×=¯`«yÁ•L"žØÏÍ%>d?DìÈ6q…,Fо´4ØŽ}8õW¯hX¬’c…²å}—:;—úT|®“¤ŒŸoó}Ÿ îemi™¾?;…ñÔeåöè$Ö££<Æ€jA£É½„R€¹ºØ8#7Õ=/$®srÃìôG%Þä¥x<«ÿî@jN‚/{rÅ—Í↥·þöyCNÂðwìþíÕ8¿uÒûSE3ÿ1_[ÜóÕLɦ¢\,B¶‚&ØK~ÅLÍMù#™µÇ'iƒ “}&û²ngÝκ}0û`öAtAta}Y_ÖÛ° ÛÄ¡ññ Ïàš¨‰·[,¶p,ÏZžÕÙ õ‰³’³’%c2§fNÕ&¡-Ú"UPoEµç§C -x6„-Çe,ÀQðïç$?ÎÙ˜bûõb޵Ý~—敊Ür¬|ºÉ_I¶)·h†éú?œÅ@{ÌÄ\E ľ¿ý¼6~æ• §”«ï¼ÝbŸÛTÇ!¦ª©ÊúÚ<­ôÜm‰U¿J+Ý­¾:eØw4k{Xõ4”¬H?r[ЮxØô:‘boa¶¦ï»Í_ç<‰Yó17#ë}­ä5¹KcvˆÉèíñú4’€IDATN‘ñâùã7SÒ‹lÔRà `÷ï#ö*΢W0JÄ…Òý¬1Ç‚X v˜ÕâsØæ‡4cê‚…ºßì‰cWä;¨¡ŸsR­Ù§Y¯;Í+ˆ¤9$DAúšm”?‘½†7Jè‰ÊpÃq‰\àÔG}ÔN¥¥¥ë6è6è6XXXê[^Ã5\Vh„Fh$¨ìÒ Ò Ò †Ã ‡Wg«³ÕÙ… 7n²}lÛOx³du‘œ%g‰>דÙ³+fWÌ^˜½0{ñ!èCЇ ,Ï,Ï,Oý¦ º ‹8(~6hcÚÞ<Çs¤Še’eë¾tïÒ½ &HçHçHfNñšâ5«yæÔÌ©$†ž 'Øžñ ÓÀ§×ùi`Iðb‹Ã’ž¤MÍO‹¯úùYNg›EŽgÍ*xî*uËâŠÙ"E°ìc¡UFHáYLÃx¤HkIlé(›5æå Ë×[Z‘Ú·©X~¹}׊šÒq–“Ê™»Ü²v¸ciolgn`YÃh& ¤ÇèYø25Æ"&°ø‹ì8 â;é6i‚”{ÔtÒX“w2÷D?~W*}ô£Å/­¾4}½ðã®Ì_d,+Ø÷¾irnnñä Aŧr–´À-d#J¸Áæx„—øŒì^²5X›Ú¥ºÃ¼…X€öú”;‹]ã÷Tv‘ÿƒsÐU «GjÓ4+ù|'HÈ"(šG^š”½ÑÊñ¤*‚‰:»H1„Ç¡PÈæ0×g¿ÎB–P˜ m]%âJ\‰+#Œ0ÂÕáêpu¤o¤o¤otµuµuµÕ¯Ô¯Ô¯ô ¶D½%!“Ìr,ÇrøÁ~æÍš?4=czÆôL^ã¼Æy §N+œ&”¬b«Ø*¶J¨n+ŽŸtÈr"Ñ´©ñ~Ìû1jÖj_«}UiªYªÙçùó¦oÇc»¯×Ækãõ-“…°1‘Ÿžª¨Šªx‰—x)9!9!9!“‡ÉôW´W´W”••q‡p¨D*µ Ð Ð=ÑSZFZFZÆö íAÛƒê£ê£ê£©ƒR¥ÒçJš€ ˜ Úe♇"ñxI’†ˆ#¦ÄT7öÜås—1±4±”~?güœñ]†©‡©‡iRÎ¥œK9w¯Ó½N÷:‘£ä(9ʶ²­l«þj¢ÛÌ[˜Ã5fpqh„L.“>!ÊÚh/éj†Êz¼ã¥÷dcPnÙìǧ¾¬’ŸùåÙ¥77SÞÕÿò"§<æã2êßw]±ÆúãÙôµ#u(ÈB’ÈZ±`ÖˆÁž±öüAÞƒ-D(6a;ìÁa'´X-ú—‹”~H韭LVç(gè˜ëjpLò’{oœ$'­€·ÈB!Æ¡NI GùP\¡IB’p'pNp‚“Pƒóû(£bñˆPQU``“1“‘-d ÙBDA¾=‹-ÛJ ð€‡à$•H%R‰É'“O&ŸÔóÕóÕóS¤4Hi Ú3Ø 6CTÙR„t„=d1ŽË…=UPUI8’pdé)÷Sî§`½Ñz£õÆ©§>žú¸Œwï2Þ̃y02ˆ "ƒô*»àõ.òß"‡0P{W÷”wã(OB\–Øí7ñì(­U¡ÖfÅ0y‘túÞwÙç¹ìi¦<Ùùî·–ïv Ï)ÂÄá #½&†’ ¤î¾D†ø‚3Î/áÝXª¶n$Ÿ¬ËçƒY[þ ?NâÞ꿃*R¢ÿ#§·ò£ú%®’Ú¤86€Í5:,;.)eÖÙàtPUõ(²•t€·ø< 0é‡Q;I;I;E)E)E)m%m%m¥’ä#±[°eÃü ó7ÌwØâ°ÅaK“¨&QM¢ægÍÏšŸ5Ùe²Ëd—Ô=©{R÷ Ñ “2)“ê¯#ì·ˆü…Ðjä3–òIl,l2+<ë¸Ö·¨à~Îy»CªÙ(ÞÏØõSÂǤGQ\&Í!ég:„koë"øR,œÙb:«ËŽ¡.$¿I¤xä79¡DÅEäã®)þGv7ågõh•àŽk,“U7,%ÙÀ(¦É|¤Áz_®h‚ê¢àDŠ—U">ćøH–H–H–°Ïì3û¬íªíªíªo™‚¤ˆ+TFeT% % % åZ¹V®ÕÆiã´qªµªµªµú–%1Åg4AáP>W>W>×¾Ÿ}?û~ª‰ª‰ª‰©Ñ©Ñ©Ñ«l*›Ê¦ŠÃ¡ ¨ÚBV«j¨†jô=GÏ)”NJ§¥—>\úðÅØc_Œ­êZÕµªë¤+“®Lº"K‘¥ÈRô{ƒOðOô×ÃèÿJ@ìÈ 2¥aS×8»¦íJ­p™oqœ¹ªÏj†O#}I_Ò7UªNU/Ö,Ö,Ö|êü©ó§Î-ÛâîÄkL¬ÁÖ³õl=)CÊ2úpU!•­8?ü5¸Â¦ü"öžõÀ|En]yÅýö\yY{ÉDò ÎØú’70cŒ&GûŠÙrÞt4‰šŽc¢í\äWæGÅ]¡|¯~  \xOfÀÚè$®œÜ8MzPâ!´!P^¢àDà g8 ‡’ý’ý’ýF­ZµÖ=Ô=Ô=,hZд ©¾åmÜÆíÿÂ7,þø5 (©NªÃ™ô'ýQ…T%UQ÷û} úà@ÔAáP6V6V6ÖÀßÀßÀ_C5TC‹EŠ¢o>î'q'KXïŠ-5Ÿ;?w~N2HÉÈÕåêruÚ«Ú«Ú«ú¥]*R‘*‡†šV9ä‚“^ è…7Kß,}³tEé¥W”Î[Ÿ·>o}—‚.] zŒè1¢ÇfŬ˜•Q•¡ú O±ÙCTßÿ“”‡+,Xv‰9¢1»É¹jjç^¸¥[Æ/ÔœÏÏTÅ>Ÿòv[ê=´C}¸³ÌƒÍE õéED~Q~PWr(Ô©Â Å*1sÖÖ྄ãdFçd3%núFðwBlaU¦•iey%y%y%Þœ7çÍÕëÔëÔßì—qˆCÜá20ý£×yÈÏž±gèβƒ\#Å¢¦ß àÁ‹[ä©H*’ŠÂ±¤·¤·¤·ü¦ü¦ü¦–i™–©^ª^ª^ê›ÞÄMÜ, ],À ¡·ä89ŽæÞæÞ¦«É<2wMm”Ú(y+`ºŠzå!_%Áú®…Z>˜æƒéú~xð àAÀ–s[Îm9Çæó‡Çì³o̾Æ3Ïh<ƒÉäGÒ2´ Õ§¸… ` Šó?H xÀ(¨aiy¬¤b­NÙ¹£\aœÙ Ï^µëɨ˜g_;ážá#ŸÊÆ3Gq9%"òCpjÖ[%§¦ÊÀU÷žÝ`5¤ù²]Ò^&GdC¥–®di‚ªbÉ/ý¶2€ gÃÙpÞ7ä ÉJ²’¬¤ 4&è[Ãø{z®¿#¡EP{bµR)m¡ª¥ª¥«ÌçÎSyªeª%o C" Ÿðé×þIYËa9‚§/ÁF°ºãºãºãÄŠX+®W«§oê8à#>âãŸü%*¢"*¢*¡’>ZÈ#ì¸Â®Ä“xO}ËÒ(Òz×<ä!O¨{ªÿ—|ä³ì>“Ëä2éÏ÷â{±>vcìÆx´2¡&ÔÑ1aFÂŒô=º ]{ŠX€E˜‡yØ'Þâ%sëì;±;ù\>—Ï%;ÉN²ód¥“•NV*õ¦Ô›Roúš÷5ïkÈY KÛž¶=m{ŒŒŒ?9AN¬'ëÉzêw`„åœÈŸ!ä1&2f„AU:•ù`oUÁÄH> ÏÈTh>D}•çžK,J[ŸßŒøsì`YÆ‚‰áÃ"â TŒœÊ$u.‘Êpã§± LgÙ6IuSµ¼Št¨¾Ñ ôDSQp"Ä‘8GáX2B2B2ÂhŸÑ>£}:•N¥Sæææ ¯ ™Ýÿ _±éKD}æÒ¸4L골Ϣêölß³}Ã!¿Õ~«:! iH#„|S!ïŠp,í,í,ílàcàcà£qÔ8j‹êÕ+Ò+îì;ÅNýøæb¶0¡ØÖ@ Ä@ÜÃ=Ü#H#Òˆ<'ÏÉsjKm©-ÝIwÒœ3çÌ9sk¸5Ü.•KåR麅n!„Bð ¯ð C1Cõ³f0ƒû¾°/ì&»Én²Ýl7ÛÍÖ±ulþø;ÅNé_ e¡,¥PŠ%ò£øQ|ŸŠí+¶çž—Xj`¨óÃÃOÍ2cþæzv=M=A3d ïÈ2áwJ­ˆ”ôUÄ …ÇqÇáø'âDœ¶)·)·)ï¸wàÞggg›¹És“ç&Ûï¶ßm¿[PÙ Oxò­2´sFäÏ‚F‘^$ÕQNM‡×˜ì2NÒC¶Sò‹yCöáñµ—Ò/ƒÑ PÐUPÕ7S‘ˆÈ¯Œ¤ø¶SÖ1eúlÑþŒ±18•$_ÁÉŒ%+«°!xKBŽL}Ïú,ò[„I_Ìô‚Ò‰H¬E:ÒÙ)tA´†%,¿/Ÿŧ¤„ÝXÃVHG:Òéz‡.“×’×’yê¶ë¶ëÎ+µJ­2}ÐK…(DéýÈÿJËÕlÌÆl\Ã5Œ²ÚhµÑ<@õQõ‘w‘½“½+µ §qšZü-\•T~á$aìyÀåˆDDËJÉJIÉ}å¾Ò½Ú—Ú—ê$õ1õ1åfÒt Õˆñ##Y&Ëdɤ iBü0 £0 ­Ð ­‹8Ïó<ϳƬ1k¬w/¯¨¡?¡ÿôÉÅþýº’®¤+åÇäÇäǸÜîÌIæ$s’.’.’.’œ‘œ‘œ1ijÒÔ¤©¡³¡³¡³U€U€U€eeeb§b§b§IªIªQ«H«ÈÒ=¥ÎRçó'*´ªÐÊ×^ñUñµJè½÷Z¬íå>É}’nwè¦ÐM¨Aú‘~P‹ño%aW‚‚ i@IwÒt/¨RP¥ Êò·Ëß.këcëcëãÙÖ³­gÛ@Ã@Ã@ÃÙíf·›ÝN9V9V9VŸËv°Ó»Õ‰›þ}I”,,09é9µ±¿ÒOéÇ"€©ØsXÂzE\PÜ‹s‡pˆËä2¹LÅ%Å%Å%Ó{¦÷LïÉOÈOÈO(f+f+f+F)F)Fï2Þe¼Ëð´áiÃÓfkÌÖ˜­1]gºÎt±¥±¥±¥â±â±â±Å,‹Y³Œ^½0zaòÅä‹ÉÓE¦‹LÈëÈëÈë ±ˆ%³È,2‹ô$=IOÚ–¶¥mÙGöQ;è¯Q_ëÇŠÇŠHcrŸÜwí4ÅiJ#×ÏÃ?ßùùMìÁò§qš‰áÊÿ+A}_ÏÖ³õÔŸúSÿ¯_=¾z,+»¬ì²²Ëë/¯¿¼¾¯¹¯¹¯ùØÀ±cWq«¸Uq&ÎÄYï6#˜ëéþ»33Èpb‚ݺIütÖÅr¹I‘¢t7ûS¦†P²wØšÙ%cTáâ—–ï2ÓA…•è[xŽDQâ""¼F²…?4ãù¼wî%ÕÍ<“«òáÒ!;Ë M³äS¤Õa)Îó·Ù ¶³°DÅý¬ì/ñ‡± aÍuä:ª“ 2 2’ª* •†ÉréNéNMM•Ì7JJõnŸ.p ·–[«9Sô¨èQòVŽqŒó4 5 …CfÌàóø<äÁîâÞýÛ Œhˆ†X03fÆ,Êœ,s²l§vÛ=žër²áɆ§ÞGeFe>øæìñŸÑ~YÅÝ ^ñÖ¼5ïÍùsþ˜Ö-5ïéø§ã§~(l^Ø\éë?Ïžbþ맯ŸÚå»ò]ªZZ÷0^m¼ZqÅú¹õsëç&ƒM› 6¹erËä–Q°Q°Q°A€A€A€‘»‘»‘»qeãÊÆú f#fÄŒ˜ÑU£«FWž=7znmmMf“Ùd¶æ¸æ¸æ¸®Š®Š®Š&Q“¨IT«ÕjµZ{\{\{\{J{J{J{W{W{7¿F~ü™Ÿ3?g~Îß–¿-[þÁüƒù3·gnÏÜžÕ3«gVϱ…có÷gìËØ§VÙ¾³}~É;Ê;ªüýôké×^޲Ûi·“¯;¨;(‹Bjû¡#:â‚X6ì AÕRFnç·óÛ©u ÑñÑñÑñkÜ׸¯qŸ7lÞ°yúõëÖ¯[¿ä²Ée“Ëžyxæá™t]F—ñUùª|UÌÃ<Ì+á#ò/þ  HwòXgÁ>2yÅ:¥c-:»Û4R8á I"3Ÿž‹»’Âeì̵UîÆ006Š­Åm,GQ€""€1HGŽð‡æ†n3ÎuPíÑX˜‡ô“ ß‘©L–È?JË£4вgŽ5(k˜ŠâûCê  øÅüb¾ 7“› Ó¶Ú¶Úܰ§ÕžV[S é¤éÄ.¯Øºb«×ÎÍn4Ó}Èœ5ØÊ 31SSƒ1ÆÈÒÐÇ#8‚Ò苾øà»ÌwYrF²c²ãáù‡òiÓ:ÄvˆÕt qq—— íÚ]µ•®£ëГËý jR 6þQ…ᘃ9˜é4ÝiºcE]–.« o‚[‚[´ ©Aj°lA"¨Š?Åïú¥G¬à²5#i{¾ ߆7­Y1²LFy¾<P@7ÓÍ=V8­8fâçîçî²­ÔÑRG»¶× Ñ Éu—””M’ì“ì“ì“ô—ô—ô—¼¼¼`çØ9v®ÐªÐªÐªpuáêÂÕ…× ¯^/p.p.pN M M -r)r)rÉ_”¿(‘ò…ò…òEQFQFQFÞž¼=y{òçæÏÍŸ›_?¿~~ýÌüÌüÌüìñÙã³Ç$$$¸¸¸¦K–>,×*×*׊ËåÇò:^ÇëØ ¶‚­Ð÷næ}ëh25ÊH*8Œrü$3,3,<³TF©Œ”caÑaÑÒ<ŒÅX­;óa>ø"*îÿS°bÿäCÎ7ç›óÍ9 ΂³¸Ýäv“ÛMlfÙ̲™5ùêä«“¯úËýåþò¯V_­¾ZÝœqsÆÍ´­Gëñ^ÃSÙEëû¿Š Rp¤Q’¸ˆBÆ{n-uÜÒØÌ×:C1 N´ iôÌ)îiŠJõE³Yw“ž£Æ¤.ïϯe%!‡•ˆÈ_‚`qÿ¦¸süxÞÈ|¯ùÞ2ªV¨ZaÙDI´$Ú0åÝ›wo¶gN¸0á‚ã3•+ûÌPÕTÕL/Gª*ÜÐÇØ‰d Á4½›z75 UeÓʦ {¤ìIÙ“|xïá½í[˜š²9HC<õ^¢ ó0óøx>žOòŠ8´shçØ qˆ#[¿ò_ùÔ¾ì{[@ÈX,Â",ú¥G¬`?´‚F0oæíê§ê§ò“&ýMú»»¨¨è¶f¼Éx£ë¬½ ½ð9'õrêå§s^ä¼øü8¯e^Ë‚«¹&¹&¹&¹7soæÞÌ©”S)§RaNaNaN¡K¡K¡K¡i¡i¡iQÕ¢ªEUóeù²|™*K•¥ÊR^R^R^Êšÿ4ÿ©6V«ýßÓþðÿáÌ9œÃ¹Î4@4ÐûÀ>°€ZÐÁt0µ~Þéy'í¨¦#›Žl9³cHÇ¡3¾_ø~ñ»Ûnwz]…”'åɶ™mf9â4ö?‹2òán”n”n¹@. ASƒ¦MutwtwtïW¾_ù~å'¦LL™˜’‘‘J»Ð.´ †?Ãÿª»sÿ³Ðutût“øNX-N×lRžØ@ Ù‚þ¬©²¦fVÔÏ´;˜ 4 çHy\ᯠ–¢ðDD$ˆ+fq·ÑMãËæ]Qei4¸LÆñXˆ…Ü ´l„ü$wƒVTIuçù`Tƒƒx#ý Œ Ø!±ʇ’÷²æ²æFV97sn,‹ïßáCÓå¦Ë §$¤$Ü« ñÑøä¶ÆŒ!% ‡4iIZ’žl/ÛË6ää©ì$ ƒ‰4ª‡j™–!ŠßÇïÃS´@ Pd"ó¯ ê")$…¤°z¬«g©´TZ*­ÎX±:“––––––L’I2ÂjYMV“Õ7¾!ƒ @2X @ð€[Æ-˪šÝ"»E(ß?Ü0ÜðTâ›îoºëò"æGÌßû‘McÓ´Ô7Õ7µgP„"ý 4ÿ–Ã8üÇû-Ä›xoú𾦝á ox³ Ä‚ôªù,Á¶mcÛpqÁF0›Íf³Ùú+ç 9úòõ…(D!’„$d »Ùv†5%“È$ÔUöVöÎ(SÔ´¨if-sosoI4yL£K` lVaà^ˆ®€ÿ“s›Á6lÃ6æÏü™?ú¡úm ݺ%Ôþý!ûC­¹Ö\kn27™›ÌM¼?ñþÄûi>i>i>¤)iJš²Ûì6»-­þóSX€¶,6˜ffe¼DÒàn¥sŽwÄSv7y}ÊÒ<ÙËÅï|2^â9,Ê÷â£l æ Ñ#aqHC.<@A5fü¾MÞÕmt¢CÈJñN,ÙÜÁÐHvFvƒ›J›©4:Ï“*°ƒ¹xý!RHA|¶“›ËÍEoÝEÝŤ»o Þl,xßâ}‹Ä¬÷ Þ7¸¸õéS͵×__ݲGqÀDL„¬ÄôTd3n͸å˜p&áÌÖ¸ôméÛ Ãë·ªßJÒ8Ö5ÖUí¬w‡÷ ÿš/E>“Ïä33fÆÌØ.Å.Å.ÅfœÍ8›qéÒ;¤wH}”ú(õ‘àNÃ,™%— @2’A‰LVž|&ŸÑ Z­É-cÓÖ¦ííÖyÑyÑŸœ³i6-Z·/nŸ*HUAU9üp…hD#š#bDëÓú´>¶` ¶`6`Ûζ³í8‚#8²…l!Îã<ÎãŽá›Çæ±yì;Äé>ê>ê>â2.ã²>;{qW„&h‚&?|nôGÿªð@;È",ß'ß§p¡uWd*2ͱú¬>Bá|…r±øÎÿ<¼¾ðšRTEUT 0©Ôj‡5µÖÔZSË®]»U'VXuâü·óßÎ;寔Sní/Ú_´ŸT'ÕIuÁ"X„0êmù"Ä2u1’™@nh9Ñx¿ç•Òƒ¬: Æh–8+mt^…·û>?É~ENKä}ÙYv ÀQQx""Ä"9Ѐ¯¹©ëÏçæVP™¨ïÁˆ "Ñl?”×™$ÈR#É=®MÐ{¶—…Ì) ðˆD$TTJ¥xίæWcôµe×–ñ]¦}˜ö¡ŒÖë¬×d×ã™g|,õ±=J*“Êü2ˆ B2ÛÄ6¡ðçï"©@*/ì5{Í/Ÿ¾|Z[Õ{¹÷r·¶,:ä7 ­ZCÕ4¾(¾Hís8‡&|… Ñws Ä(@Ã<‡yóìÚÚµµkûnû ï6¤nOÝžºžð„'3d†Ìðç–ô_Â'|¥Ýh7:…¿Íßæ¯¾½÷ö^ÙЙa3Ö;e®Ë\w©Ê…ä É·|03È4œÇyÜÁ%\Â3˜Ã©Xˆ…XÈ>±Oì“N«Óê´è†nè¦÷ö‚×÷ŠËK±?FqœÂ)œúoõóÎn’Ý$» †°!ŠcŠcŠch‹¶h‹$ ÕQÕÅAñK ì¶qàÀñ |Ÿ@Æ1dLê¤ÔI©“­^´zÑêÕMW7]Ý´þåú—ë_§§§]ydå‘•GØ3öŒ=C(BŠ1ƒ1¢×û" #È!AE”‚UíNØesŸdO9-À^3·¨— Šô·#í¾ ÷‚&‘óº*Ì™‰*»ˆÈÿ¹™W™Uh‹š,#±,Ï\Å4}2€ÈøYì S™¼“·’zÈÌéú@å` SQqÿCr‘ ±ˆ%ÖÌ“y²ÇiÒ™›¸sÖµeÊÑ”£!=_Í~5{]S ^Àõs}#4*}ìÞÅŽ±cl[²M²ÌÉ¥À¥ ý”ŒnÝ2´‘6‘6Ë€ÝAôAôB/Üý+¡¢ç\ÀØÂ¶666Æ Œ7Hýšú5õ«ÆTcª1åŒ9cÎXç­óÖy‹RHÁ†0<€3œ!‘%Ë’Uæ…|!Ÿ|™oÈ7ÌþÈ=çž#…å°dòùŽð…Œ@PˆÂ¿£¦ü”JLþ˜ü1ùcø[ü-þ–É“&HÒ„4Ê6郛E~GP°Il›Dƒh J¨”P)¡ÒRÏ¥žK=—Ÿ[~nù¹{<ìñ0sLæ˜Ì1»k»&W…«ÂUÑ-×-×-ÇtLÇtQ}ÿ´ÐGU”… á*¾4\Se™Óy<&H.KVµ×žyT7Úå‹3: eÙn–‹Áà@A /JRDä±HC6鉓X Bžk£6Ñ„t1Ò5`‡˜Ú4Y.µ—ºpkiªþ}åa3Q|ˆœ܇9ÌA¥ÒíZå`åà̽:syÞRò˜g¼A¬A,1Ä\€ƒ~û؆Aï: :è¦é¦é¦!©Huñsñsñ+Œ)Œ)ŒùôôÓÓOO…mq¶—íe{õžÙ"RH!×û”'! ZC¹¡Üx"‰ ’^…Ʌɪ~º]6°†¬!ÒŠù@Íýû!÷;ÎŽ³ã¦ÏLŸ™>£¥h)ZJÿ²¨¸ÿš ú”‘Gø#üÚ‹ö¢½žÆ>}»©ú¦ê›ª«©© ,5°ÔÀR­LZ™´2ѽнн •ieZYo8+­þ–h…Šì ³ÃtÉ n)5©_ª’£ÃÔ'UÈå"U[í»{"ý’ãžâ¿}`=Á‹‹‘ÿ Åk¤#‡z“½d*²PUn3•…æ@¹Î‰_À>š3¸({,%tÍÐ¿Ï ¶0Å÷‡“ðøÏF6xfÎÌÉ8bLŒéL2žŒ§/X}V÷°ð-U u š¤È·‡Ë`ð@,biGr\§Ž¬ kƒXt@$ëíOE(ú z× ½ÐKÈ="¿#¿#¿SºwéÞ¥{FFF¿oý¾õûÖxxÁJ³Ò¬´þ»‰ž¾‚g9Àà‰Áƒ'¬kÄ)m”6J›ÿ¥îæFäFäFð3ù™üLÓ$Ó$Ó$½â%`#‰ƒâ—C°‘ ¾ïçqçykÞš·¢XÏÕË>Ë>«`lÁØ‚±Ÿo¾ýù¶¾øy/Ö‹õ¦GP/vb'v 'Œ_¿6~ÍrY.Ë-à ø¾Ä÷1 ißœ|twtwtw”þJ¥?ÝJ·Ò­ÉÉÉú–bpªH± UÔFmÔRj¶i¶i¶­ [¶2ìy©ç¥ž—*s»Ìí2·çv›Ûmn7 g g g>ˆâƒôŽ7*¨ ú¥g: Ü™/›Œsxˆ—ø\Û¿Âp{_úÔÐ^Ú]èBžÖ~=ük>Þá32hYº—äá ’)C‘ßB76§q_8U0I3[›kM3í$êJH4¬YÒ,ºØÈÌE‘‰üÔ³o¹Þs½çzOvNvNvî“Ë'—O.Õ ªT×[„\"RH!eWØvE/È“ò“ò“Ì—ù2_e-e-e­ßÇ7xƒ7¡¦œ¦œ¦\®.W—«“l’l’l2;lvØì[Žù¾è‹¾â Ñ­ Ký l›@¦)dJ†:C¡^ôpÑÃEß{¼÷xïQûhí£µNÞ;yïä½Ü*n·ŠÜ$7ÉMD! QúÚ¿‚c^ñ>ÖByØQs²†¤ð˜?34©fD¥—++em¹`C1½° ëUÑã¸I‰1ÙcˆTÀ ÈCá/^[CDä ‚ÝœmÆS¼NLP{kN2™6C—CSI¹à5>™4pw‘ŸáQ,r)‡R¥(G9Ê%™$™$™°Sì;…²(‹²ÈCòD±ý€7Àv±]lq'îÄ]¿õ_ÂRU ÇZ;­Ö®À´À´ÀT2Y2Y2Ùx–ñ,ãYú¡äGüˆŸ8D¾ ¿lb«Ùj¶š6§ÍiówYï²Þe­º´êÒªKÙ ³f/lÖ2¬eذ#ÃŽ ;Â:²Ž¬#B§Ð)XÕXý?hw/®¦»Á&$† CwŸÆ’Ü º,áǰ¬ ÛÊR0Âe…-oê_^åZÕü_–=Ò-Q-árZÃwö_¬s„ljŒfEl”8èDDþˆo“Èöqª…™š]5õ-m?]çG×Ñ6â1Âüž‘ÙŠ"ùI®ö°‡=z£7z»Wv¯ì^™kÄ5⽟ö~ÚûiÂc†x/âÅRY*KŦGðè=†c8&œ0œi8Óp&»À.° … ;vÂ&l¦ÜÇ/ø‚/¡îˆîˆîHÑ›¢7Eo¸<.Ë3:etÊè[.ù†hˆ†ˆG<âÅ¡!¢Ÿ[Š©ï¼;ïλsžœ'çùØÿ±ÿcÿŠŠŠiEÓŠ¦ .=¸ôàÒI™I™I™—,/Y^²¤Ôƒzð^Ãkô¥šWœ’cã (Ð Q P Ž$ÇPâC²ÈJÒµá¥óäw±j:°]ߺ%Ÿ-Êõ´idqG~»Û“Þ%î7k%= ¦}ÿá4{_°_70ÏÓÄÝÊLë–½;¿Q³°}Ä”š""¿‡>‹ Ä™o®2ÙÞÊTUR>Ô6Úåô*BBðÊ<ÍÀUvN™ÈOŠP u[ÁV h©Š¥*–ª(á$œ„{¿÷ýÞ÷{'Ò4$ ‹{<‹è]ŒÎâ,ÎêŹÉp“á&V‘Ud‹Úµ)jSâûøïñ^ðZÖ¾Ò¾Ò¾Ê×åëòu’I¤Àô¥éKÓ—ú–ÝÑÝÅA!ò;ªäNìÄNT'ÕIÉX2–Œ=—.ÿ\þñ¯Ç¿ÿ*í$í$í```QWQWQWÁoå·ò[éºnÐï þœ*)÷Í}ÀVLFS*%Ëħ[Éz–’ÊØ‚³ˆB,Â6‡½E7¾1ŸÎžèrù lŸËÛ‘&níêx¯w»5wèÀÕu´BÇJ×ÒÖ®îø®ò˜R•ì“{^­šê—ß»QÅþ-V•]`y¡lEí6–£k‹»¸KlHQãœ^>0k‹ˆüÈ7‹ûÞ³ßÛmÛ¼íì½Ç´~ÜøLÙ)¥–êm±@¦S„É›´#©¨’´£bÏ|lžõY×Nzº0òAë‰/z‡vÈ+Èqúú"ÏúmÌäýÇß$$u™Ž¦£ÉRAe'¤€ü°;!¦jùåùæ*³Ž=B48PÐkÍ`Í]åWíK]$DMnì5ûhÞÄ ”ÌJ™ÈÏ ù@>‚%Ì®±]c»Æ¦á¦á¦á_;š}5Ëê˜Õ1«£ð˜d£Ø(1øéÿ ¸Ê¼Æk¼”x“Ö&­MZ³çì9{ž·$oIÞ’ßÇOø„O$†ÄAU*0)0)0á¦qÓ¸iÆ[Œ·oÑ·l…Vh% ‘€°ƒ'­eGÙQjKm©mÖ´¬iYÓ–í[¶oÙ¾wƒß ~7¸W‹«ÅMÓMÓMÓIßHßHß°ú¬>«ýØýZΙâŽ.I8…áô­DšIrÕÉG4Àhœ`ÃÙ´ãSÙ8X³ìúÀm±MqÀð„4°y^­j®Óæù Œ¯zvÁâãí+Ý0^3©ËžÛË×)º–ÝFf7jeÒɧ9Ê:x9t5]EöÊ!IðŒLÔNº5WÒÖô?cy=!ÖxºËZÉííLó:;·½ëÔÁm–/Ý÷ÎiL•MÏnôÓe†jáÙsµÏ*^Ô±SÚÕ¯S4nó¸Í#{Ípžá<ƒ)v*v*v2cfÌŒé+úо‚<àQ\æâù5ù¶Êߌ0ÄB |A¼ºöšrªö‰Î „¼Â9€Å"Ñ\i`&SÀpЂÓO3â~²ÈO± ÄPœ}}}Íš˜51kò¥å—–_ZjjjÒEt]ÄàðD‰ý€ð T *1—˜KÌÙN¶“íÔ¾×¾×¾/ñ}ÌAr° °s0sÔCÕCÕC©Žê¨Îà¨ÁQƒ£ú–•Q•ÅA!òO!¨’†0„!ŸÊ§ò©´­GëŇƇƇ.òZäµÈkÅõ×W\o½¾õúÖë“ë'×O®¿ùÓæO›?qï¸wÜ;Ý5Ý5Ý5ýrQ¸ë§%(äÂ9K˜ÂÍQ®h‰Úp%k0>„’˜Hœ]Å0¬ÄMá¿ ˜‹W R¥d =[=Á#Á¶oý•åÙõŽVléhUshùݶµÜû»¬²Ø€þÔŸTÇj2›,#P, :¨æj—¾¹ò±0ÓéU÷36¾¨˜à’v'ôfì’¯¯^&¾k”á’žv#ß]/u˜YLoÎö"ƒð;Ðy³³¬ê“ë…ÜxoÌç_ísµÏeû/»¾ìJº5µûÔîS½êß«¯~£uo×½]÷vMÜš¸5q÷Ëß/¿¼LÖ“õd½Y_TßE~5¾YÜp¡œ}@ÚkÍx+fZ8Pã¡ëFd4˜ŽãŠtižô!a|Ñûp•` s¼D*²EQŠü· A$ˆ±–ÂR Í Í ÍF8Œp‘­ÊVe«¾<ÿòüËs!k; ca,ìmZ¿2Ų7d'Ù©x£x£xâX‹Ê¿š5ÿj‰ïc@œ‰3qNäMÌ›˜7Q2]2]2]ñZñZñmq"TÊüˆø¨÷fùgPB ¥PÜM7X7X7˜^§×éõ /,¼°Ðî½Ý{»÷Ãö Û7lßH»‘v#퉊DÃããcêL]©#ŸÅ§ñjâ‹|¬¦=é="G”ƒ®*ï̺êÀÞ3à.}û@ÃÍroI×¶vLùȪ¼vªÜ$¾zç”ÊCݺXŸq¬b}ÕøªÕjÛ“@€3&ÞÚÃÐÌÐUû*?jâ3‡ç–R. —™röΜ$„ ‰ôuá‡á_+äº|ÎOwÎOÄ3`ªÿèI cð”ø¡<Ø0¬ÂMleçð‚ÍÇ>„èÖó'Y0aŽúùö íÕA‡GèþèON¤Ý‹ž/z¾h6þÚøkã»Íx<ãñŒÇM§4ÒtÊ"—E.‹\öxíñÚãu0ú`ôÁh}1¬;ä¹#‰ÓÖç#ùâ0ùßæ›âžŠ(1UàˆƒAn^ õl €”²’ý4ì32”J%ó •šéÚ;Xþh‰¶8„ë¢(EþkÅQE7tC7Ë]–»,w9-qZâ´$çKΗœ/‰;w$î@/ôB/¦aVÒr'ÿ5R %¡$TÚCÚCÚ#1#5‰šDMb‰ï£†/™ßJ©ž/<_x^µ[µ[µÛÈÈÈÈÈH(AÅwæ;óõ2F—ˆÈ¿z7íÃ>ìãwð;ød/ÙKöî6ÝmºÛÔa—Ã.‡]]*u©Ô¥úŒ~3úΨ1Ñ}b¹Iw&xÇß§it%ÍæmxŽ7×óß'*³íƲär­\^Zœ¨¸¶´¿eo'¯²¶VršPnŸK¸Å9I¸t.G©+’JZd+ÜZ“>ÔæÅ&\ùü §A|•Ïw³;†ËãN¦ÈïsQÞŸ‹žÎ{]5e{~|Ñ'Íi¬ÇŽï}9 np„©$Ó‘ÇÌ›À¾ ;ñ6ìZ±xlAf‚‚€G0 ù»òÂåá;ıCô=BdöÍì›ÙwúÄé§Oz~èù¡çtvÐÙqÆ=÷¨l˲-˶\ï³Þg½O¦o¦o¦/ÑѱҬ4+­WÜE¼Èÿ4ßwÂæ²ÛxŽƒ0rü•ê|`¬p¤¹|JMÈS¤U ‰†h‘¹hŒª ¢â.òß„\%WÉU–ŲX–y†y†y†“½“½“ý;ù;ù;yb÷Äî‰ÝõŠ{&Ëd™¢ÄþшF´Á.p ±!6ÄáGx‰ïÝ\ÁáPSMSMSM¢ Ñ„HfHfHf`!b! gá,Þð†·¨¸‹üËŠ©+f$Fb$’„$v‰]b—6FlŒØøÌ¹†s §ÔºUêÖ¨ï6cÐŒ&SON-=uД•™6™SsÍË•sñ´èÐ\V#Ê¥Bݵ^NöÓ<Ç»¾´Œ.ŸäzØ¢“ékÅ<€ ÄLeýYRTtíøH@+åãóåWQ¯w.ÅýZúÓñÎ>ÛgžÚ'¦Ì‡Rw?K(~ÿ¾§¿ÙÁÆd)ƒcÄ¡$yc;δ¬!Öi»êæ°†¸ˆEÈF0Öÿ`êÿyŠ´”l¾/ß—ïK2I&ÉÔYê,u–;±;ñ^û^û^```Ö©q§Æ;õtêéÔs…Û ·no¸7ÜކÒPʧñi|Ú£=ÚÃF0B! Q(I‘ÿ%$?ÜBAˆÁáDv¥ºÕfcÛÒ[\)JL–Ê9i©¯òYÑ#ÌEcTÓ¦ý¢è ÓgÕ¥xŒÇ8ÈRY*ϱ–ÃKȲ!4•¦Ò¨‚*°œUôï’ ¾b¯Ø+"#2"c‘,’E"ÉH† *¨†0„éó-¤"©zÅQpêˆE,bY*Ke‰ˆF4Ô¤©ÞYê,u:nÐÜ ¹Ü)=-=-íŠz¹z¹š#Ȳ“…³pv -Ñ-‘ d YÈB6²‘­?þùíñ‚¥Êæ0×+&0‰>3Œ1Œa,„ÊéÿËÎ3˜ÁLŸ=Z8/ȳ-Ú¢­ sJ)¥LÑXÑX!áKñ¥x¯¼‚¼‚<ŠA„ð¿_q § ¯ª¼¦¼¦¼¦Z¡Z¡ZaðÅà‹ÁySySySUUU B…x»‹üËssfÎÌ™b­ÌVf+7]Ütõ„™A3wû¨1Öh¯Ê¦Ou¨t“¨•ËSHsn£rXÀú¼O˜Tjbdô±l&ÛÀÒ“dóçTò£¬„·ISgåmxöêtòÕÛŸž¯Jì¾åufJë .—Sš©¼5·t¥ôß*ÒóÔˆT!6ˆÀ ÞƒídÕÙ–Š8†[ˆc³Ù[ôd™2%x0T°ëÿôîÏšŠÛÅYY2Kf‰1ƒ1ô"½H/ÞÜÜ|ž÷yÞçyQQQ5Ï×<_óüšñkƯ¿YºYºYz­Þµz×êaæaž~>fHÑúþóPÜIµ ºÀåQNˆF4âpW‘-´â/õø1wìD!A8̹©¬¤vcÙ¬ºàK»Ñ5´šéhùHi}ÀQ2‹ø¢šèuð‹b SØxÒt Ær¥\i’/%R¢R([*[j?õ¯ dUæÿª¨Šªÿòw0†1,‹ÏÉnžnžåóHCÒPÞ.neÜÊΰ€>±j¬HDBæD! Qä¹F®‘ëä:¹Nn’›ä&»Ãî°;Â67‚Œ`v‚`'p‡qX&ˆ± }ÑÝØÝˆÔ_üà?ÁV†hˆ†ú2"UQUI]R—ÔÕç~n†fh{ØÃíÐíô¹q„<â°€…^¥.‡r(G:’ŽD¿PfYGÖÏñÏÙ6†Á%\Â%¶”-eK…BB8‚#8",rþ$—b)– ‡ºçºçºPooCkI $P®Sû©ý´Áú–rÈ¿/J l7ÛÍvc b`Ñš¢5EkŠ&M,šhccc8ÕpªáTQ!½IoÒ[ô«ù·¬ïB]ç"VÄŠ¨õ#]>]ût-aÜæ…›Í×zξ`LÀhÛӎ͆?«Ú™Î½wöΫç3ÖŒCm®2ˆH~¬Ó'ÈŸV-êPB™ô€ˆæo4© ž¼ÎI _þÙ:»Ö÷û²f莽A-H]’‹Æû²s¬¿€ÇzaÊ£·>‰¤î_´—ÿçd%ƒ 2lÁláÛóíùöÜWî+÷5fAÌ‚˜S§„O Ÿ9`怙|‰/ñ%sræäÌÉqë4ÖiìAõAõAµÖ\k®5§Ïésúœ¯Á×àkè¯ÿ7ßz1j寥øòIx®Á|Z ø~€­ 0C‘(¶?âÅÁ+|DyÈ­«Š×\e†ØÊb»+uà h“÷²šjè†Ãâƒíƒ‡J(‘-´(„’3kï6M`<ŽàÊçgäg¤•?•{*wì`¥V©UºôñîãíU­«Äú¥(+çíË{•÷*ÿ‹pë*]•®Jט˜ÂÒ„4!M Þ¼)x£&j¢&üH~$?2Ï4Ï4ÏTPjÕ[Õ[Õ[óÓòÓòÓh0 ¦Á…# GŽPöPö( S¨ H‡úûêïË_èVÉ­RÈ¢»Çhc`cx®alÃXCóøxÍRfÌŒµ­ø¦|SÔìÓ û§Çpø¡«‚ ^'8Á yÈ#Ö$¤±ú¸Š«à` S8âCN±ìälÛÀæaa^nÂg ŠþœÁ™¤*¼z Ç„G.€­ØŠ­¿ó•®á®éw`G1Uz¼:èèizšž–(Ô:P2’Œ$#I"I$¹~\?®t–t–ôxQFQFö‰ô&éM¾Òutz5à6>àBJð(,i………EO‹ž=5:ltØè°‘ÔHj$ÍfÙ,›a4Fc4.à.ˆ˜È¿…+F¸Ç²ƒ,RðdAښ̶ªoi< ˱0L4¸Éx—6UËÓ…Kvªøôȳ=¯Ö§ÛÅ=K\’œØ9uEÞå5t*\‡Ó7Uò˜ô@$Yq¤ëŽùì2f³ÝxÄ6ã ¢øüNöáhˆá¿“ÄùgPÙ‹#Ä¢ÖÙ˸ŒË:N§Ó‘ä9‘Q+£VF­Ùíf·›ÝnDíµGÔîeÝ˺—õ˜1!cBÜ2Ý2Ý2×ô\ÓsMÏìÙ5²kÐÏô3ýÌ×áëðuðŸñYLNð_@PÙ½árAÞÈ“äIt &ÁüNmmmm„h´F Oxb38p ÐA'þF¿Ç÷ŸǢŽi ü•ø¯l9óbkؼ‘N¦ÉIÓ)òXi¡9™‰Æ¨à0¢DQþ]äHF2rÉ:²Ž0|À²¦0Űܧ(D .\™üîùÝU~¯-^»x×1ªc42ðþÂû —júNé;¥ßžVÀ²0žñ(#L—|Y¾,_–Oæ“ùdØÁvüAþ ?ßáÏ^Å:‡Îó1óÙUv•]ÕõÔõÔõ$‘$’DêÚéÚéÚñ&¼‰vºäŽäŽé°W/_½œe_:­tڀײ/²/N‹Ó§?#†O Ÿ\·ê1­Ç´ÞFYÓ²¦}è˜_7¿nQÝ«««Ü#¹Grä}Èû÷!w~îüÜùªçªçªç…Ç WSSSîWîWî/r.r.rœ+”éÊt¥Bk¢5ÑZ10à`Á7Á000˜ÃüÛ’NÒIºttt´­´­´­ÄOâ'ñ“͔͔ͤ>Ô‡út5èjЕ"‡È!ƒÓ§ NÓÝt7Ý-¯-¯-¯-‰–DK¢å“å“å“iÍ  …ÂG$ ’Ÿ5>k|Vê/õ—ú^7¼nx]¾D¾D¾D¾Z¾Z¾ÚHg¤3Ò Ž@B®n%·’[itÍèšÑ5¹ŸÜOîGoÐt§é#ÓGæÍ`Íàü·Ïß>¿ ºk×6•‡VØXac¶ÇKï—Þ;ÅN1¸ÂSKâ°e›Ø&¶IÈSWWW\\lxÂð„á £›F7n U0É2†ŒŸï"‚Êh#0˜À„w7xaø†žUx<™Ÿ›7ìÿj(çÉ¥ä+åù+ì>ÿê9à¢þ ç0ç$Õ¹ $/€Ïº÷ü(fÅz³;hÆ¡Sã(Z€‡Züö(!ùXjZÁ©õd=YO2ƒÌ 3Š–-+Z¶!xCð†à>OàÇÆŽÛ>¸}pû`çgÎÏœŸ­±bÄŠ¯^;½v"íH;ÒN˜Y!+d…z'CÁIä?¼àG8â9MN“Ókw¬mÛ£še5Ëúgã+ÄWx¾oûýí?tåMyS´‚+\Ñ/ñRŒOø=~´¸ïÁs¼Å!Èî¬<ª¾Í¯b„y‹8…»R·™Ú™L”/“ÖÂ"Á˜ _TÅ@TÜÿ@ºÈ*ò†¼A8_…¯¢¥š÷š÷JÁk¶/$@U"{gXŸ(o o@^&·Kn‡&MÖ*^¯y½æÍ¢‰º‰º‰¸Æ\cÎô€é³Ë£K>I>I>ÉHn$7’³PÊB ež2O™'YMV“Õ&SL¦˜L!ÉGòQê#õ‘ú(º*º*ºò}ø>|Ã+†W ¯Ì4˜);!y.yÎÚç·Èo¡‰QÖRÖ2ò•“³x…@Zœ3363¶®Zçh£Mšª—©—¥ß–äKòe׸ýÜ~n?¢Q4ŠÛÉíäv’¹d.™«¥¥•¿?þþ¢]E»ŠvŒ-[0¶ © © ©0¡0¡0¡`QÁ¢üÚÚÄæa͇5woJŠLŠŒî%1—˜Ks|R}RÇì5Ùm²Û–“ÆKã¹xY'Y'Y'Y¨,T*k"k"k"‰‘ÄHb ëÖ3¬GÇÒ±t¬‘‡‘‡‘ÝB·Ð-F·nݦÖÔšZJ %†Iº$]’n´Ùh³ÑfÒœ4'ÍùYü,~ËÆ²±ü$~?‰1#fÄÞ°7ì ß’oÉ·|’ŸØâ¡wyÝl>ŸÃâ]ãzJwr¹4 R4C9Åî3+¶…1KÌ×]{V:h†ÒØþßýùrÅðËØ2¶LPèIÒŸô¦Á4˜~zóéͧ7AAA5GÕUsÔÚ̵™k3×Y?fý˜ë[®o¹®¯‹,Xî…e€¨¾ÿENJã0!0…)äŠ Š f‡:ìè°cUÓ½»÷îî_—?ÍŸþàˆhAÇã>ñ%S/úKøÑâ~Œ½@€J@NMeu]ì$«KÛ‘£äW–®¡MM;ËÓ¤µõ7À\ÒÕEù[Ømv›˜÷¥ÿ—þ¯ºÖÖ&¹#¹c`^Ͷš­üudxd¸Š‘Oäz2WæŠ%¦{#1€éŠ-ÂŽ‘##7é:è:D‚L#ÓÝ$ݤø=ð„çÿyo”A™ÎøÀ>ÂZœøâϵçÚsíq:˜¦ƒ¹Ê\e®2ʆ²¡Üdn27Y2N2ŽŽàóø|.ø¬™¬™¬™\d\d\d¬\¨\¨\¨j¥j¥jU8£pFá !T+O•§ÊS  # # #UUUuv:;—× ¯AþSÌÇ|]׊òŠòœµ‘«#WûŽJ–þ,OõÊb­Ykö÷p¯„Þ–ÏñÏ!œ¶“¶“¶³ff¦’äºä:wHúQúQê  ¨†j¨&Ö‡ù“鉞H!+Èr0Ï$o ÏRŒãï—÷Îïý²Æm,’]”t ){瓪”.÷‹·Áf±QØ…q°Ã'¼G*>»ÿËŒMÁú.xK J¼óa>ô}D½(÷¢Ü‹rkÖ¬ œ8?p~‹û-î·¸?7qnâÜÄrÊU(WaÇÓOw<ÕôÔôÔô$$‚DWЧCÐ@1Yð†x¨‡zxÎ ˜ó¥É—&éNM>5Ù¿šö‹ö‹º´‡´·\  ÐAT€=¾ˆ¿ÈoùÁÇš4ÇQÌb7ÑK*}²ýhQêißvÛ¸¡äi)5—w“›–¹MXý•&G½,#ÙM{“[Úaü1ÖLåï·é€*ì»À)MW™®Ò½Ùî³Ýgi‡Õ«kMœ¼zòê–ž—z^  ÕiuŒà#øì, r䀰±EC€?L£i4m‘‰=¬ «ÂÊ o`sÙ\6½Ñ½a kXã4NKJöÿAÕȪ‘ÒùŽ+ÕÕÝ1OOnlœSœ“¶fBÕ„ªü?瘴Û±]á¢pQ¸Ÿ7>o|Þ˜7æyã0ã0ã0…ŸÂOágÌŒ™Ñ“ç&ÏÍ/KJ†%Õ[w¬_Û¯a_âV'¸$¸˜íä¬9këQë Öç…h6k6kÜÔ1êuŒ*N§ŠÓlÔlÔl,ò)ò)òÑ©t*ªÈ±È±ÈQ÷D÷D÷¤páþÂý|4ÍG6-lZØT“§ÉÓäaVa•xgý[Ä#ñ(‹²(+µ•ÚJ¥Ûúlë³ý`­Žµ:Ö©;¦Ý˜v£Ç>*xTðà2W«ÀÕÖ½Ö½Ö=Å&ò§azŒ2R‰çùÃ,£y¿š]\¾œY³¸C»ÆÍ/–ºróÞšø—íïO|ÁŽÝ‡æ  ¼á†ËÁ{Q„¿õS§Óè4:_Á¯àWpœç0ôøÐãCÜ3pÏÀ=ò\y®<÷¶ä¶ä¶DðXL>–|,ùu§îÔWð ^¡W.Å,4ÿ (((a„ cŒ1µiÓ:Wt<Ðq¿§½“½“£ÿ˜ûcî¬ö\ö\öü1'æÄ•-gËÙ2Qx¿åGW™£xw°€œx•¿º™Å³²ÜMr”ÜB0ÝH3L[ÊÈôÙ?ÈB4C à{Ȥ"& &ï$ïÄéTxPá@«ÏêYÄ[ñVrPPU»Án Ö‚ëI áo–È\˜Á a\AAy†Ïø Ž÷å}ùkP@¡ßŽÌÕ¿w`la [½e8†c¸>ó®°­fØè§Q!­¡ â íûïK¼„>ðmTµ¨jšQóÚ ð=yN†“åøŒÏÐa&¡®é…8'â$ØVÙ#öˆ=bÕYuV=?.?.?îwÊðE#ÑÅþ®=ÅlŠ™ÿÕ*)UR¼ÏÝÛyogìÇ m.´¹õ0 ¿{§þHt@‡ß9_5Qó‡3‚Û†¼àE©#uD=ÔC=Ä!qúJŸð ŸX6ËfÙú”šBM!åe"‘¨Ô j«Û8 IHÒ·QB‰"$ ŸP€–ˆÆhŒùè„NXÂÆ²±h ‚ ú2+%u;^H ý_«©©©©Y’=({PÚíÅP® Wä9…úöB^ßÿû}“½°0˜Š©˜Š\ä"— $É@!–6¦icz“Þ¤7eee—¹`.˜{±zÎê9ë&'oIÞ’q¢ÃÞ{»Î¡þÔŸ¾”«åj+n 7ÁÕãêqõ¨’*©’ž¥géYº.¤ iZV †Ô’Ãä09LÖ5d )CÊ2DADã8ŽãD ÈÈNÄQóÿ…%,aI‘ABàqn±¢Å Sÿe5–Õ蜠 ÐT®fgG6B ±Á!‚«(6‘?™îh‚²ØŒ ðåìhkâùÎðØÎÁS aS|òw^½0¦»…Òd¦kûE\dI8€l¥àé(ЦD"…ôûTr7I/Ú‹öââ9žã$Þâ-Túì颧äφðîþØT0H¯›^W¥X2bÉ?³Ù!³¯Es͹æä? ±ˆ…R›ÈŸŒPö(ñHƒìaòÊê}ߌ `ì=ë)UH¸Ñe{82wÓÛ$E±ýŠç€ß€ ØÀ옳£žÔ“z¦|Jù”ò)pPà ÀAN8uà”$A’ ISoL½1õ–Ÿ]~vùY›4›4›4¾?ߟïOrI.É…#á¨wΡ¢)æß…1Æ£nÔºÝ)ºStç©ëS×§®œgÇÙ5:Ðè@£ô½Gïñ½ø^|/,Á,åVœ³ÊBóÍ£Kw†a¥s®)§¨ is¢&7v„éãdj‰/ÂÑY-8£/²0}1DæßE -r#Ölù/"¤ä;ÊŽâ–p"Ì,̬Ð* aßR÷ÿ¡ýlÌFŽ(6‘?¡ì‘äà=¾"/ÆóãÝŒã¸Àž³ÛH‘^£ +x¹F[öDCT3É'W1„,ólü3÷¸^}—B )ËÇò±BŒ¶¦¶¦¶æ&lÂ&¼/z_ô¾h\Ô¸¨qQ~9~9~9¥ K–2\4|ÑðEÃc c c õµë±z¬žÞYQˆÅ"…DþU„Œ@7ÙMvSˆ8ºmwÛî¶]R=Jõ(åýÈû‘÷#ÿ”²)eSÊ’íd;ÙÎ$LÂĨ=?®Å‚€ð‡Ù æš³HYO]…˜¹ðG˜Ö8Q$õ1ô“´àš@J:ÀS´¸‹ˆˆ” „Ío$$¡*9@ ‡´'í1 åQ^ï/+ZØDþ“п9`¼ xç’±Ù.<…Š[NíKW´g:ñIä,Y‚΢Êþ/ ÈJ°ÁSPPþ ÿ…ÿ‚8´­GëŽ 8òÕâW‹_-öÜê¹Õs몪«ª®ªÚBÛBÛBËš³æ¬¹ ²ë㎕]`ùWU­˜³ÂŒÀˆ·o-ÞZÄÖ‹­[Ïúµõkë×>[|¶ølÁS<ÅS´A´Uö§âŠ;ÆÖ !¦æ8*[¨Ý !jÜÏ‚˜ÆØV¶EÒÈÀ@¢à,¡À£#Ê‹Š»ˆˆH B õwÈΈbÙ@˜±‹ì"Ö"qЀ˜Nä?Êg¤£@PÝR§äï×D«vh•“X2Þµ²Ýy;º‘Öºf|6‹F0–££(¶á>|Ö{¢'zò^ÂK89'çä/ª½¨ö¢Ú„ÞzOè}©ÿ¥þ—ú;D9D9DÍ«2¯Ê¼*£jª5ª–l”l”lËgù,Ÿ6¤ iCÈ…ß ‰ü3 ªÏøŒÏd ™B¦`6fcöÝ»!wC$žO‰gsŸæ>Í}èz^`“Ø$6I_ûE4¤ø­â®†Uà H@A²Ï+m5«Á!çvˆYËd'% L$e¹WúµxÂY¥ˆˆˆˆˆÈ¿ÀnŒ—0†¤ùº¢/êÓïŽIÉy …vï,FY8§ÚTP¸²LƒAt 1*‘µ>~„K‚ ÍC<ÄCÑ!é$¤§/J_”¾hA¹å”; 9 9 ¡ hÚ`蘡c†Ž™SNý9õ-[Z¶´lÉ?äòiÍ¢Yð€<~(%òÏð_ñ•ì&»ÉnÜÇ}Üw w wüâñÅ㋇{s÷æîÍËW,_±|E!Ïý@?Т!EàÇAV ´Ø‹Žh(XÞ³½•óU7Aˆ)yÌ.ò™Ô¸@zL"7HÜ9}NnÒT€‹(J‘¶ÁˆF> ¡É5,œ£ŽM(ý%&{@êâ†E¨¢¿¼¦Ãh«÷ÆŒa)Q’«d¬(·Oèÿ×݈Y3kfM<ˆñP¨ Ô¶mضaÛ⽋÷.Þ›f™f™fÙ!¢CD‡ˆU«W– +V.Œ—ñ2^¦Wß¯à ®èÕJQ}ÿ§á§òSù©ÄžØû)R>¤„œ 9rÒõ³ëg×ÏM4YÐd>!²¢ZåQ^”ÛëhÉ´F5áDö:¥¿:…Ï%k¡À.ð' ®ÈŽsŸ ËË"8cØÂ£4ÄTI""""""ÿÛpQ$Øã„¦Žv??&^—šxZv0!ÆdZ뎦Á†»P%4øˆ“*ŠíOC(`'ö–½eo†0„ ¾ì—u—u—uŠ@E "Z­ŽV×^V{YíekW®]¹ve«Ò­J·*ͧóé|:Z£5Z“ dÙ ªïÿ313©”J©T(ª¦ S†)skäÖÈ­Q'¬NX0Ón¦ÝL»ñÓùéütRÔ#õD±ýÖÇ]G® :$ùwU^ZJMÉE£Ò÷l™Á;{Sé}“B2G³Xr©H…Ñš4CfDDDDDDþã:b9mIºÁ 0‹ÿùxvW”e­Yi¬i_ÃNn5¬M£ÊÃŽ‘E¤Laü½ØÈ¿ø(¨ÚePeXÖ…u!™$“d¾lö²ÙËf7nܸ’x%ñJ¢C˜C˜CØÜ‚¹s üWù¯ò_E,‰%±d,€Ъ´*­ªWßM`1üBAAu[t[t[PuQ÷aÛ‡m¶ýpéÃ¥—ª¬¬²²ÊJÏîžÝ=»£º¡ !!$ä‡è‚_TlÅ)„Zö–´C˜0œ“¶)åF]¡U_O{М=öd·<éªÌœÊgY® ŽKŒb![ Ø‹S‰ˆˆˆˆˆÈ?I&r¡Â#DâÞ#9_Ö¦›³m…eÔ¾¸NV ™G¾s¢ùh„#)º—ün~ Â^¢ðþdŠûOÄAd–Ì’YÒkô½–——7³ì̲3Ëî1ÝcºÇ”ä#ùÈaÑâ‡E/t_è¾ÐÝb­ÅZ‹µ|ÅG‘ ’A2PQQïœ#°þ‘Ì; :GâHózåõÊëõÒç¥ÏKî9÷œ{Þ´ZÓjM«áNá_¯ÎWG)”úµ‹~þ^V™nè‚ñ€ ˆºÊ‘Ÿcß/¦!Ÿ‡È!W¶“$²³œq›%~£¾: Òm± fd (Œ¡9¿öJHDDDDD䟂{Âl0 60‡aR³´Ìü+™esÊõ@Kþ2kZv«ó!‹F2*™G/±­,C1]¾¹³þ„=ú›uÙ6°üà÷;¯þœÏàýx?ÞD‘(¥{«{«{»5fkÌÖ˜Å[oY¼%#'#'#§½W{¯ö^ëÊ­+·®\Íõ5××\/¤;¤.Ô…ºà.á’>€U¬ú[„Äš‚ägc6f_¼tñÒÅKªþªþªþõ.Õ»Tï’éZÓµ¦k…btB'tú•Óqþ¨¸+¡…GPM…!œ÷X}‚oí%Åg¾Ž7{T‘«½€uð¼gÜGÙÀØRnbPŸ^d3Y:»Kî.¸ŽläC¥ôâÖˆˆˆˆˆÈÁ€Ë<Ø|¤!E¥¨s'¦ßË1WÖXÆ”ïëòÂüšYÅfùE(`) @ןPqžú‚ú%ƒ 2ìÁ¤Á N¸Fš&ðNïTûsëÅXøª¬*«*؆©õ W—^]zuét¯é^Ó½^mµýÕöêgªŸ©~f‰Û·%nm®µ¹ÖæŠ?ÅŸB,bK<‰'ñDŠP¤wËõ$-´Ð²mlÛ†ÅXŒÅ¯Û½n÷º]\ã¸ÆqÚ:´uhÛ„4!MˆD’FÐñ+gvÿ½à‰lpúz`©l#Y ¨º“3šš©—º3ªy{Ã't摊s¶\ä|Ýz¦b'+ÇV¡¥¤W|ü>è ˆ¾°³ˆˆˆˆˆˆÈo`·™1È2¯S}²Æù¤ŸËYRø UðÜn®Å£Ty¦´—‡|Aƒæ¤ÖO˜ÉMxî[Âvú²GÐk°{Icv—ÝÅvRT nB  $%b^P¿êµX‹µ|¾߀®¦«éꈥK#–N|1ñÅÄ—C.‡\±©cSǦΌf3šÍh6ríȵ#×JÞKÞKÞ³XËbéGú‘~üa‘#ºÐ^ì÷È=r¯ðYá³Âg÷ªÞ«z¯ªicÓÆ¦}àÍd3ÙÌ*³Ê¬²_\üè!ïÉC}pª‹Û÷Ž’”Cî+w¸ï:â;ßÙ3àˆßü\·Ž]r±t7ÆBÖO´ _´³BŸ¥§Ú=2Y%\&Ð ¤Éå*ò¿7›ÀMŽ—%/K^–üÞô½é{Óg;œípVß&™Kæ’EY‰ˆˆü3HríI¶p|bÞ<¾Í –èÈ?¸Ÿ3Ñ·VRù$;{áUr™´ÁÝŸ®Ö°†5c0@8®Ùáf‡Í*÷ éR*·õ‘ÖGÌ¢ô-ã1)­?6‚ŒJÌ$¨‰Å2Ƈä!y(K'I'I'›2nʸ)!¶!¶!¶áÞáÞáÞË´Ë´Ë´¶¶¶BKDƒhÊ¢,Êþpå_NÃi¸P§Ö ^ð­ӷNß:}éÖ¥[—n•‘–‘–‘ ‹(:œ§ÃQ)ýÎÈì‹XH¤{² ÷4¸“X½l÷5\\íó»kûÕ¨=ê¬ãn¿¦|=Õm~^ÍÙ^#ìg\½nP×üªmÊL¶î×á_³»ô Ñ/ô€/Êê7¤üÏ$H*¾“°ÃàMÚA ¨ØüN‘ßÂe_™æ¡ Üa¿ósÍìP˜iúéZ’†Ü r¦Ê½2/­mõíeþ„OÒú¨úð‚6Ò7ô }ã¾ß}¿Ó—…Ž CÕ\{p]¹©ÒTi|õQŸ} ¯È+r…(Da‰Iž(ØÈ…JcØ5d YCrŽœ#ç4k5k5k7­Þ´zÓêEW]Yt%­kZ×´®­ýZûµöÛä·Éo“ŸW¶W¶W6߃ïÁ÷ VÄŠX;bGìôWþ…ý¶…1ÀÇñq|¡„(þPü¡ØÕ±«cç»å¸å”~P¯W½^u¡‚ *RÔìÂ*ÔÖ_A é/«q‘gHÃYB©]¬ÂÓPí9Æ»“3c‹{ÉdKçÇ .÷ðù¸WíÒ¿¶9Wgx!c6M¼ÀØÃ+“ú¦» ¹¿ÁÛJ/­õ3RÝJ–¢ œ`¦ÿ ¸ª¾ +b ¿åÏ!©d>ýÐæ=© ÚÁô{%¢úþ¿…hqù‹(ö¼ ƒ‰¶Ó…ä qÄÌA«ß¶)¹ÐÎäÑ?Yú´lîSþ .ÿ ØÂRo˜<|­×˜ú>•ôr&­qGï#ý³¡‡„îgºž±™ºT²TÒ%g‚ÏŸ*åÖ¯ ^±ÜªºUu«Ýú^ר `ƒ’ö³ëÀ+¼Â+rˆ"z Tö«ìWÙïКCk­‰\¹,rÙÕÞW{_íÝúVë[­o¿ YB–%ßÇ󯫾 B]O×ÓMÂq?Òôk98rpÌ•½‘{# “|’|2i_¬ù¹_N>¿sn®#EÐB“ë¯\­^‘žWØPÙdé‚’Xb›:<%§`@ûÊÓ.t|;öÓåÌŠIÅ*Û^æÆ†Õƒû®°éÔ~k}âöR·Ífr…´i‡4\ÀHh¡_b¦ÚâXrH!Á ôC:€„fËv•sÅmšîzÏz“yy¸±â€`#}Ð^ÐB+æ¸ù—àÀ蟱]Ù>V~.sd_Ћp•&ÒJ¤%•“åøDf%–ˆÀ Å´FG4D˜Ëuö›P˜ Z³-ÂqláÇò™:m²n7¯-)ON{y»ÅZybÚÀ îp€)øŸ¬zŠ ÂJ!Eò‘|$/Ž»8.-zÏÊ=+fÖM®›<ñA³qÍÆµú:¥û”îSì V¬6X+¯IeR™TÖ—C*Y>ßÅË-yÁ ^l=[ÏÖs”£¾}-úÚDˉ–-¯;_w¾îlãaãaã1+bVĬˆ‘‰‘’’b³Ø,6‹< ÈÁQD¯¾ÿ …œŠkY Ñ Y( e7Èv² ¿½øöâ[_âWǯ¾I­ºYuûR±æìš³åeÊ-*·HÖIÞ_ÞŸëß; þL9ž`$Úá:£¾pâô«^û|2¶ìð8~û‚ ƒšEùYÞQ¿:,ïôÌÜñù ]§û\fìqðämüÝ·< nß¶¿¸Ÿ‹'ô%šÉ℃Ä‘˜®ÿ,CÈÚ•eñ¥Å4ôFmÎö%ý‹7qaŸc^­O“vÇ\}ôŒuZVׯÎ&£òò~äöc:ª¢+º~ßmùŸ@´¸‹ˆü)nKð·œåΑÖ;L–ÕíçimŸn8Cf)­ð÷/Cv‘:8Ï=¥ïÉ CËÆd9ñÄ)ôF³ï…ÓéOãиãÐXø>¦WŒ2¿ô3îøË ³™òöµå¡²>èûUñX˜ÿ¤öébÏt²p­öÛÚoë†\Q]Q]É‹°Ž°Ž0^ºg鞥» ®\1¸¢o;’Œ$#õo,‰!›¿ñS§ýiª×deeG5bÔˆGæÌ™‡ËÂeá²å+—¯\¾Òî–Ý-;½ ž¶¤-iK´A´)ÁÒøûR*¾ 9‡s8GwÑ]tB†!¿}Óü›óoº4<úæè›1dEΊœ.ƒG;Œv0Z™V¦r!FBJ²Hšÿª“æÔ@Y®9CšÃ (ö×î¼£ac+¢GtÐ|™?}`¯&wŸb°K*焌ï°]nžn˜{cöº2]ý ³òR}ôŽ6`¶zòÝÜ e&×èSã þWSà9f#AòÓMÂmg ƒïÎ0‹IY§Þä¼>Ó ˾J¸Ñ‡;»Ui—Üî¼ã¨ðõÏæq•¾&ç\<0XqrÉU}©…¡@*#‰ìÀ \EÿÍÁF¤¤#*î""ÿÉ (x<†?2Œ1îYNœéú¡Ú~¯&Nu¬ôúQCu9|³Üš¾]ËNŽï¹ºF׺ã=¿Ú/´»e‘f4N:KR†üáåmiwÒK iä­FŽ¡·±]PŽ0ƒ=,a9¤±ªÔ>ðé-êHÚ=;±kpŸŒ… ¬”xò䛡Ÿ¬\LûLb€Lùé~;á*…RTGu€Ö¥uI–ðbƒüù r®Û^·½nééé97wnîÜ\î*w•» ;ØÁYÈ‚¾}‰t!ú|zßUmÒ•t%]á—o¹€Z7mÝ´uÓk#®¸6"ê^Ô½¨{GN9qäDI5&Õ˜¤›è&º Û° ÛôW¤Zr2óX–¸†k¸FÒ‡ô¡þw/†ñLã™Æc½•Þʆç6ŸÛ<0pGÕU;ö‹™3ósÚŽ¶;ÚžîÕ¼aó†–Ý«\¯r]²_/ç'ä ÿÒ3§t}A!²æd«öµ1åÊÛ#eªøy£¬ÍËŸ=¶_Ó¹ò6Ò Ô–œAªð.ó@…›Üè”ÝÂQm70Ö+°’öÍíÓãÃ{d;iéݰËõÏÜE+²€ÔÆ%ÚŸ„Å÷[”û¯xíÑïë?ý'“úHÇrò™ŒÃ«â [8Ö²t­zoÇñÞÝ{h3±cOkOÏ_öxz­ תoqó›²(=ðr¹É»¶K÷øÖ¯„ žøß Ïý…w‘ÿÅl–ôõ&õ„ãÙM5¯™´gã²I5_0ö¬ñ¬Âµóæ´ôJc,d×ä,Æ„L eìþî‰öÙ»/]uâê©U£:»/?8²VÃ2ϵò¬¨¨Ö¶ì`›öæÑòAÿà;¤ãüiS žÎ'‰Ä‘!p{0 -~x>ý¹Ïªf¨ W˜Ârx£"lƒjÏÑfca'kf]j8j@½UÛëMH´yL ê\$‚¢Y•Q™óå|9_át£4pÇøŽñãgãŸ6~¦ÙL³™f$…¤bF̈™>hU äÚ›‹«Úˆ@™Ef‘Y‰êÕ«îsßç¾Ï=Ò7Ò7Ò÷ÊÉ+'¯œl}¶õÙÖúçj£6j“éd:™^bz]ü÷j‚&hBüˆñÓ;  üp’:¤©S%ºJt•è!‡‡røØÅc- w wpŒ‰yÐ|õ©Õ§š¿9ãæŒ0·«‘W#Ÿ”Y8fá˜öŸ<ŽzÕ_Å’¼$/áû+L“’ß:°68È®at¨œå]4D½ rÝÝ|’¹@ÓÉL²Äj¨‘Nþ:w¡ª‹Æ†«NË“žÙ«òãT'ú[\îjÕ¯73§ÆiÞkHÍÚ²…—ÕƒgÆN¬§±p2 7¸6öÃzËÛ½ùC¬.Ë'…d˜[‚2zå]÷—xï}û, N°‚wFúJ¼5ë'L¯ÐÓµ¿Å´9G¦ÖÛÝ­WãÞeË| ¯J]fÀÌåu¡Ã9Ù1û]!ªuyß‹žFåû®^OmÛ dfÔòôÞoª'zg=%:²ïÇæÁýWX""""ÿ2 Œ\$­q‡·å§² [7ó÷†—;7èå±èÜú˜ä°ëÏœ•OJ¿™·ªHhš±û½AÒ©Ýa6Ôêœq´|´eSüÐ8¸ì€OdR÷m‘ñ¹sZ¯|凲_W嶉ڞð)íLز˜J_>û×=uIÚ«Ë¢°FlçÁ€í¸o¢Vd1IÆ1É`΂:òù«¬ _Àf0v‰I0‡pq?à+rÈhbŽ=l=‹Ç ¨§ ›Ò%݇˜icÔYv»tVŒì«„Ì&Î8ŠãŒ¡óOúk Уh¡l(É!9$çÙ³f«G¯½zô´Üi¹Ór;ßè|£ó³³³ 9r6ä`;¶c;nán¡š¡™Þ¹Bð)/)h ¦ØþCu6Œ cÃhYZ––X±*bÕäÑ“GO=Íwšï4ßf›ulÖq–f–f–Æ}’û$÷I;wíܵs—æ©æ©æ)}KßÒ·¼ïÁ{è¯)ˆõg‰ð}„þ¶B+´¢†ÔÂö°ç7ó›ùÍ‚•]hn»Ôv©íR_âK|I½võÚÕkWsRÍI5'YÖµ¬kY· º ºà@Ìþ˜ý¯&ܯx¿âu™Íëc‘šHÍŒåŠÁŠÁæÍ™9ûh¡ªJs€G&2øKÏŸ'ê@ÖÇþ;jO,?‹YtnðIÍ»ùöP~œ›< NÝÊÎ2k5ž8Œùä©+ů³ìüH“†`ìÑšI¯Ô»oëÆ3ÆBfMÖžH^Ø©íl³åÆ—dIBKJÈ|пíoUÅþlk‚p]ÁºßMàAöz¸DmÉVä MÌ ƒd{föÍ«í“^éÂÀ‘» ¹6ű‡«&Õaì±ã䚯ÖpìÙõ™ÏÁ²£Ì|šÊuÇoÎÖ¶›ËXdÞìÓŒ…¶ÚÞmR‡¦µI ÀWn=NÖ`º£º˜¯µ¤#ZÜEDþ#ÃR.„& áDßC-êV¨Ç؃ä‰É¹†w´åΔéFYD›U”FwhÛà¸û›%·†ÅÔo}ëùºv]kÇì?è8 tæ¦`sÿ Œ=Ì›4±ð²S¯2¦ìÍX˜Ç”dÆÂ6:3öŸ4]ÅÝÐŽ«›µ 8n”ý#ƒÍ»{TY6Χñì.¯|n”]erë•ví-¶5ø£¯Lj"èTO¬I$ˆp2ØâŠpc± ð…/ªÃùÌû†CBu´)é$œèÚÔ'ªìpÆžxNfì‰Sà„­FîmTEi˜IKshSÈÊÔ?Dï&ÑÐAïh×­]·vÝ8>p|à>1|bøÄ1écÒǤ ¯Òƒô =ˆGx„Gú«•\ëûo|»iÚ„6Ñw«9לkîÏûóþü#úˆ>¢Ïv>Ûùlçš­k¶®Ùj•e•e¥w¢ehZF°Äë¯üß `êãÇp G bC¶-d nâ&nohÑÛ¢·Eïz{êí©·g^çyçu<$xHäþÈý‘û£ËG—.áø…ãŽÏª=«ö¬Ú cÆ4Œ6J0J0ŠÕßó ç ,XVt¹úñêÇ㇣Gmó³-m[ÚJ Cä9@ÿÒó'7ƒ„ŽÂqO«J+J?ÕÌ=°®öÖüOj¶Ïo3зm…rÕœ÷9D†úñ9›”Â⊷РqÊùžj„éúÜ:¡µv×måø|ÆBS§$„vÞÖ¼—‰£Öê‹q°þsgÑýß“"ým¸ÿ{Ë€bn*Ô˜¬@iŠ,¬.Þ°óÃF˼ »º#©woÆBl&cìþ퉕{¼ò”Ä°Ó ‡MÚcxÖ¦]ŒNÉoù…®-hÊú‹ŸF¾åÞŸ9áSîØë_ÆÔZQ>È®2ê¢"lè.RDÊCNTÝKôÝ!*î""ÿ .a:â,–¢#—D¿’˧V,”¶]Â^‡fNyʂ͛¼t°¬•¯×z²¿3´ºÔ_UÉÅaùÐ[mËy]ÿ~܆ƷïÚø¹{ãÌÙyÿ£Œ…T˜üбÇÝ&7f,¤Åä(ÆB®O±`,$JmÆBNLfŒ…ÄLi®¶¹7Ž1tox?߃sf^ò6÷úÀíuot ðq*[ÊåœíA“zÿL·hKrP‰„3$èa“ò¤‘cìa ÃæmMº ǵ·WXi·\™uóñ¸ ~`jö‰¥ó­ÛŒ^%»H=\ÇÌ€_ øe‹›á:¡:‘¥d)Y*œèéÖÓ­§[ˆgˆgˆçÓ‘OG>9øÂà ƒ/èßÚ—ô%}ѽÑû›@Kl®AÅ_’xOâ‹7iö¼Ùófϯž»zî깈+W"®ì?½ÿôþÓBrIý»Z¤!„oR5Ô×ÿÅ¥m c“î¤;éNÓi:Mÿ£7Uó©æSÍg´f´f´æß!¿C~111Q4ŠFÑûíî·»ßnÕÞU{WííÒ¸Kã.]n¸Üp¹ñ;›Gæ‘i€Xi²4ÙÈëHÅ#O ‰xñ2ºOþ û6LÇ$LÂL*¥Rj¢ÏÉókBcÉ$¢/$ÔbE™^Žõæ÷û Ûµ ×@%ßkÁ¹Amö¬6·l3}û‰Ä™?dby€Mè&©Äy}¦óð«áÙHõòæ½qoÙˆ»Ñ  Y79ÿ©ÁΈÞÚÒžv LÖ믖G½I”ƒ , <íÿíÉÂrH¸.t™Z¼Ií” ì¶ÍXœÓÞ]«½s%`c&WcìñÊÉÕ­o¸¥åÄ MÝœÕ6§ã~R$-MqjŽ}<ø|‡AMê90ö¸æäzŒ…¬œ¬9²hf»oŸ˜‡k 8Á²¿<øIäOBTÜEDþd¤€’太íÌ&3›Ì,§sC4DxÀã[÷/õ"Žx)×ÈtH°š–9qƺ>ùµ ^ êÉØ¢2ƒÛLmPÞk¿¾}:™KõoæŠ)ÚCО4™Ö ]„¬ëßp¯’î¼Æ?UWé¾Õ„PÆB<&¿jw¸ÕÀV^¹n-­ôS]EÒ‰ JÃ&߯üóÏ_<¢jÒ$”b(:£ªpÚÕܶ‹"kýàquWÓ¸ßÚ>Þ“±GA“>1öÀib?ƆLx+`mj]Ó‡5º¹Œ*~yî8½Mv‘ÆÈ‚Þ•ˆt#Û ÃmL²]iÑÚ¨îÇkAK†ºñÝôš¸ˆM¾ßmBf›…õ Këƒ(h]„‚ï·‡è8Sâw‘ÿä ÿ-%À²q#V5ÍØãA“[0ö¸ÒäZŽÏj®¿¿¦ÐÝdÁo6…¤Ä ñ˜K5´1i'9ÀÍ¥ršLëvÿs%ÜÚ¶ÊÀ2rë%#º¶¯R™ÛÕ6°As÷[×9vµÿpôÖ ¯Œ=Ø;1š±§nS] Í™rŸ±ÐúS0ZÊ0Æ/œÜŸ±ž‡2vïí„ð÷þǧ!AçŸksÉà‹õÎuxÔ`¢û:¯ƒ¥­`üÌÐ\Úàï+³ÆQ²¯öoÙÚc?öé¨À9ñmv$uÿì]e@VËÖ~Öì—A¤Pl±E,ÄÀnEB0hìÆîîÀÂn±‘î²»»›˜ïÇÞx_¿sνçž{ÂxÿŒÃìy÷ž½föš5k=«¦‰¾v$U%{TgÖ´Ï¡•ïè;"¯\nÂ&l"ÉHªXw`Ýu³²²R¦¦LM™ÚíL·3ÝΈeæÌœ™Ž"Åhˆ¼­„V‚”\L?\?\?|’Ù$³IfÙí³Ûg·O«V;­v Q Q ‘Òm¥ÛJ·¥ahÉZ²–0 L~¥çù1œ‹¹˜KqGqÔ‘:Ò¯DP”[UnU¹U®•\+¹V;&vLì±ÀcÇóZäµÈkq6õlêÙÔÝ3vÏØ=cxÍá5‡×tÝàºÁuƒJ¡J¡Ê¯|Ùköš½¦ãtœŽÃ(Ë,ºE)CÊäFnä†`#¸ ª  Ò&§MN›¼?aÂþGGG˜Â¦â†ð‡"Ðü/Ð9ÈÄ2¨C 2™®‹æ«‡*Q-»]æÃ&¹÷ßÉ?E÷i3MÇC©–t4#ô¤8jþÕÒ!¯d·EX±CL“jˆJ«î7™}×l·‘_sÎSÒÃ:qžR?´¤°ö/¿x·IÕ#Ì*J²§#èÓiÔ@eèË Ù¯-RZP‡²tÿ È{™þº¡_DÛÇN®¥n0 ˜óôþái¼\ÂÙÎÓ’Ãg†ï.ò»<ä¡wG竲æ‚“z»A!8O+©.ÁæÐ‘ºOÄ›2¢%x"–‡|ôžêü‚óÔ·a/¸oª6!õùÍ®cÕCUI¶‘>Ó8\¦6(Æ‚ŸN°~(wøÓ šZF£7j!«ÐSõ–òa÷Õr›.ô;ÆÇ¤5wý{Î;ÖÏY¿ÅÈëv[^÷S4ôäåaùƒÄÚ!m8OkîÊyƾˆÎ3.Dìã<ÊÝ"€IDAT3*RŸóì¥Q­9Onr/gçNß&ÙW\ê1$¦ãȸ™¡%]òk¼nú±ÆCs[͵ÑJ“äïaÇî ëÛzq~úò¸%¥KãcÃxõ¦Ö÷$ « ÄZ–ž3È+‹OðOh3m¦ÍbEðëà×Á¯³§dOÉž’2!eBÊ„‹;,î°Xº´ˆ±"1YÏ2 ~qz@©”J’g¿!D~cýÆúM=–z,õXNåœÊ9•§šzhê!CCC‰ô‚cãØ8ÃƿճT#ÏxsgqV°¬k),X¾ùzZOëæ8Ìq˜3´pháР]6tÙÐ%?-?-?í ¡3”09arÂäù[ço¿µí½¶÷ÚÞ39`rÀäÀ¯<¨*©’*EPE ‰HXónE¤#ébQù‚òå Ëh-£ìÓÙ§³O{Þö¼íy[TÖ™=³gö?ëbzÃÐI,jV¾«Tû¶GØ­.m9Ÿ”8@ó)Ň®Nnÿ¢¡‹¨Ü ÏÊHŽ~!"ÜBš£,džBc’RëTt¬°á✇úÕä<áÉœ' u{±'®aàýŽï7¯(ùÍ Ø{:„L,ûâå&O­XÚPÅ D 9kK ôÕ.Ó壺QÁ)×M:»sž²%¬ çÉÝCçrž6+<ìîønÃÖ/ó ëÚlŽÉ½_y½³õô™ì¿úÅ_nÔ¡ %pœB0Í¡jØ£qLõœ’EÖÚ击ïçÅi Ãkpž2'Ì¥×a`ûîÒ™°nÔKÊê÷ýZÝå§™´¡ŠÉðE}ÒE6Fá#rГìPŠ8ݨ kXCYÃïÖN¢PÜPàOžSéìJY@j·‰M?Ú¶*r;õ1xïÖ=¼é±¥³ï{WÃ,Á@ØÁ:hŠ0ÿƒë¦xÎ)¦ÿS‡ d膦°£µT‡…©lÍ‘™f”ûï»Ñ¨¥!»o¾Ï`’æµîÝ[Ø5\šº¼™vüüyw;»Ñ+öö€ùï­æ.â<ýeÄ@γ'Eµå<óBdKÎ3¯Gvâ<Ó8â%çI¡ÊŸO̺öË®~”¬´¨~—ðQñ}vÖËßýÌãÜÅVºD_*9¨ÙµqO§vY& ’ b„ 6“ž’fb&ô¾K×y«ðNìÄNœÂ)œ¢:T‡êDÔ¨Q7{{ööìí§ªœªrªJK¯–^-¥t÷ì»Ä.Á ^ð’¾Ì?FžQ9oujL©1â‡8±¦fÍ6šqãÇ=>ctÆèŒÑæ¸Íq›ãœ§;Owž.L/Ö‹õÂU\ÅU©OQ6,a KQ5'eR&eJ¤DJüå-˜_7¿n~½SÍN5;Õ\öxÙãe–',OX~Qù¢òEå¬Y²¬-Y[²¶$ s@ç€Î6£lFÙŒæ ó…ù_Mµ9l›Ãš°&¬‰Û mþ[—žJ¨„J,˜—ågè~³ûÍî7/M¹4åÒ”i=¦õ˜Ö‹±‹YGÖ‘uÏ.¾{gªÿ `<Âptg„—8r)kØ|ïr¼t²Ë_ΧÕñí¾Ï®g»d—i2=šm¨üj‚€_ ž ÃÚS7±l}Íxj9­´ÕK »á<½wxZ‰M¢YˆëÛîÇ ‡lôKi›ê$Y È…˜„bœDYrÅF3¡*ûWÆ5€±£ž–†úÂàasÜÚØ}ìÅYœ§. Ëæ<¹mè,ÎSRÃêi9{QÇîÛk©˜ïÿJÔfÒS² ud~Ioñ{ø×E>„±lcY\s·‹ÍjÚŽ(æ)Ê¡ç¹JJxX­3»Ö~èÝEë–úpeF呃Qä„{ˆþ¦3È~õÚä6-á†Jt‘üP ld ´R(Jø+uà+*Ìïx:)wøÓ°ÑðbF´Ïeš‚%ÝØ9x’†ç<Î3U#.sž¡Qµ÷…í÷¡êÁ‚EÑUª=”ûÓó†Ê¯oUa =RB˜Å «ØZÁ’™!5ü=™<©ÐWãv+“ºƒ,·tTíÜê=Q š?˸²lQ÷/ªœ1èçéFá;9OÛÌyz—ðóœ§çGXqžV=4ó¼wã*xººZ’4rœrÜkÃ÷­‹_FGÚÛ÷oÑÿæJ£‹t˜Mc¿Jhø½)¯"? €&Ñ$š$:Ï(P> |`Âû ï'¼Ï˜;0wàqÿãþÇý›¼hò¢IËJWÖ•uýª·C]“WmãxjE­Hr¡q°t°t°\/¬Ö k Ö¬=:ÿèü£3Z©µRkå(ß [Ä!š± xRŸ¯s¿—Aó˜æ1ÍcÞÞÞã6ŒÛ0nÑG^yqzêé©§§æ{æ{æ{8zà裛#6Glvá:Âu„ò åÊ3~Ù«À*° ”I™”‰ú¨ú_æ×ÿè¾Â¢Y4‹ŠìkØ×°¯qÜú¸õq½}‹÷-Þ[ËbšÅ4sµ¦ÖÐ 7Ò•ná-‰å¤³›·^Êùävr>uÉÀÛÉÝnnC‚ú¨J“‘„9XöøíE­ŒJ ‚8±XgJ"ñ:74‡ªØž3»UÇcœg(G´(u**¸ïœâVuxNÏ£µgIÝTÄ=Le³é™Ód²Ç&±^#Hµ‹ìnÀÉöjUOÞ^´=h Œóôiáï9OúÚóôJá»/o²ìW¥gÇæ†vË•£dÛØ.I 2˜5ÄkÄ!ÚPÿbþo—€ ˆA?DçH]él$[x¼îìgpž67¼çé}ŸEÖïžPk°ô,ë©AÙNú+ïüobY+A5a šNöØ!lcÉ´J°b=¾Þ,ÉC/Pk¾ªƒ³Ez¹©]·x¤X/0[g¼T5U¦#ÌÁmRЕP©l±þ¾ PÜPàÏÛÏTIŠ>ª²Í²gùÊO?Ø9ÈŸLË Ÿt­ï–™ý?˜:UÕ¸]hC9Ò†/1Bë‚` #h¡?ZÁ[0­QŠÓsŠÂ¡kGÝX>³¦Æ¿ÕNeMGGë»Æ‹µï´«ÚPݦǤ¥>ëê«6£yû |wq¿V/mã4 ç<#rÔ‰£:ë*ÕòöJ¼µ;Îs]F¹˜·#6ĺ[v÷-)E‘°IXB…’=õû…|¶QeR&éë ’¦’¦’}4úhôÑÜm¹Ûr·3>f|̸Á…\.­#ÔêÀ®pý.ó­þ;©+û×-Ñ’Š¨ˆŠÄ?jïÔÞ©½3zgôÎè9»rvåœO1N1Nž0=`z`®ªƒªƒ^}`ùÀ–€P¢â¢â¢d÷Öî­ÝíaºÃt‡éoY½eõ–Õ9•r*åTºðî» ïŽçÏ;ž·°taéÂRO#O#O#CCC“_¹Áú¬>«[¸…[ð|¾Ê„úgm¢Ä~|àÚE»h/‹bQlì\µ¹js]nm¿µ½P¥G=,”î*Ÿå³|˜ÃŽ?Ój*€@´W±–(Í]²îšúp>9c@>/šbã“™k2h®×n5®¤&\‘ƶÖã÷å÷’s8a³éY‰eÕ ÊšBpLÀ¨Z-žržÑ,«hýÉgÃzsž¾$Bu׮]Øh¦+òu,jSñDö½U>=ý9OÝö”ódÚ‰óôváWŸ‡ÄÕ¼1ùâÀ¨ú›t¬4µÊ˜ã¥ e«(:Ђ´…øƒùM唎’Är½ £ö^9äBÉýdýÐÞOt÷æûß¶N6Õ>ƒÅE3¦JÓpÿû‰ðA8ÒÒÃzMÈ„5§8”b#Fÿ6ݘñ,½ ÍÖ:ja`å•SµÃÚÀÍóìØ3/pèZß)sê¦Í7Û­êû……“œºTxn¨" :T@=¨Û÷™çL¡¸+ ÀŸ+¡ͧje¼(à {d׺ÁyF÷ˆ¾œg®´]æßL²§ z¬+õA ÔÅ7gQ•7»Tƒ *PuBš0í¥y²óB,³§ž,ù÷ÝhC}Ÿ²KmÇ.†©áË»udÓƒF=ªxû°ß|ÿÖ‰ÏÌŽ˜xøÚîLËmicOŽw©ÕË®Èns5Iy¥J¡D"òKšïQ…U‡:Ô¥'Ê¥Ü2‡%Í®š]5»Î,œY8³0wEîŠÜºèz kuVU/#zþ¥óá<ó õ—b‡˜dT¥çôœžûŒô9 19595Í#cFÆŒ“oý¹?¯µÏ©–S-Àa¾Ã|  5!½YK –,¶N K KI;“{&÷ÌѼԼԼԕW~\ùÑ÷¸ïqßã¶%¶%¶%¿r#å©<•LSÁTÞïüï”4Ö”5eµÅrgÎzn^°yÁ´=AùAùîWÍߘ¿‘•ÑbF#ͺu•Žà$.”hW¾~,ç“K|à|òËw/®ú¢c¼Ñ$Íáj‘P†FYx„=¿[¿NpíJûðÙØ† %7á9k²Ô,T¥é~ÎÓ:…÷øœvrÕ°Êœg׊*·Ö*J»¥®ûÖ!–™̦*µÏä<É!$žó”YaÕ8ON -à<Å&ônl¯ñÉm:T»Rѡ ¯^¼+íGnc;ÊMï?ãS ž'”‡T©^•1ÏlÒ]ÒòçioÃwqžaá¾²Iø w‰¯†õ¢,RÁTø¢á_ù:å&¿t¡JqÔI²@¡3½lX_êû›—ÖÀD×¾m÷ØÐ`\ß~®õ‚öyO¹ïu÷ü­˜¥}>|êw¢ÇÐYœgÏêÎy:ïÃù…öb–¿›ô¶f΃‰{Îú˜gælèëÕPI¯Œ ˆôÉ…š¡Ú÷8/Š» üoS „h;±Bù¼’3˽²uSa¿ >7µJت÷8v|ÈT·ÌÖf3ÑMPQ0d]©×wû¼À< Ej÷˜O·(géÂ5êMÊX†×8Œ _^ê–ç>_éèèâáF ç™ö¼Ö¼Á *6Ö[·¢CÐÑG'æ×8VãXõþb{¦Ä”˜‚ô¥·ïQy• ¤ô‚$Ç­­­ˆ%c—Œ]26/6/6/v¯û^÷½îNZNZNÒÇERjEŽ‘ ¿ `Oói>º£;¤Ø9-Úe¬z½êuØÙ•ñ+ã›]?QýDõ¥5N|8ñaá Õ!«Cº¥y¦yž¸rèí¡·G Ÿ9|æð®õ×[\o±¦¹¦¹¦ùW¿8 £0Š:Q'êDÞäMÞ_ÉÕßï’$žÉLÄDô†ܨg¹Áå«gûnöÝ\éÒvÇ펋Æö5èk`ÑA¼72"#<ýéVWyÅ}R@³©5jq]ÇÇŠß›4¯ÿ­»UÂÏu-gïTad¹Ò„JÿÀ0ÉÙ*ˆ! a¨;TkÆÆô}VÏ’—¤Ü [’˜\tyëv»ƒüWÔñ\ð`ÕÍ~ïx`ÒÐÐÎÓ{„¿0aƒCß½*{Ô·ÿŠLèÏfФc º~YdÑr¦ÈØpºNú8ˆhSµ¼uáµÚáРƒ¥«“—‡®uûHÊàiÕý+ÍÕ÷Ek¸À„¦ëdð?Ý•ü$j†š0G<æ¡ÕÁ#L£ ÔG˜­ÀsV‘VãÓ/;ÐÑÓ´U)_užÍ@½7=í›ÙÅ.â®w¡ULVŸ÷–gC¶sžâ&pžù,r0ç™c"õ9ÏÚ™ÊyÖéÈËï¯;6øbîã§þuV/0­þ›qw"VÙ›o;áAUϪ‚m¾öP¨Aåh,õÇ ï óß/W…⮀ÿ3˜3mÁ[$`:·yì²Õê~©]¢àB–ú*\5sçrÕîž°€ô0ýPU`ò¿‹Iæ»°/a²ªP†€XŒGkV‘¶ãŽL}¦«*PîMÇ´ÚiûQS¥Ê[ÓxÓn;½]ô|nÈ™:gꟹwÄàˆÁáÓÍ­›[7·;¦#t„ŽiÑ[ÉwÈ}.Ÿ¨¨7õ¦ÞbY/K/K/kYeu–ÕÉÏÈÏÈÏØ™»3wg®íÛ¶W]¤‹tQÊØÊä\_ È[¸}àAEP) 3­Ò¦Jß{sïÍñÇÓû¥÷»:ò¤öI휕3ÌÐtZë.­»4>¨»Wwoë_v,ôú}h8 §áІ6´%uùÛ=;ØA€#)^¬×w\_·N;Šw¯iÒõn×»†—¥–ïð®Œ^ö'‚¼âÜË%Áa$çÑþ>ÍJNMØ_ïéñgzŒ«3´m…2JÄ4™ÌÿðU.D %Cl mä‰1¬W—Ù5#_:î03Ì1ð…yËísçD»M¾aè,«z¯gu2zlR?ýz–å×i;©JVDÀuY<Ó£:¨ŽJ_%•þoòh;¶ŒÞ”9wèà®® 9O¿áÄyÚ®ð ]O&7m+Q/Ñ*ª‹¨”û]᪂ÜS4G-XPõA¶LSТ 6žn“ñ¿ïÀú£qr¹r‘íôªF¬h~ÈÝ#mÞ’ÝlÞ5>j3x:癎÷8OÐã<=;œóôná78OK ŸÄyÊž°Ö·‚·ùúôÛÙr’©çŽQV½kÕYÙnEæ6Ršªà­êÕ8Ëyö´£9ÏKµ`ŠéÀÏ Âa 3hÑ@RÁT%Ê_óB¡¸+ À„¨@i@»ËœÉS¬Þ¶vüéÖïøšô€ð[œ§µ o<¸w‡ûÕv¡*£ݤ@œùéÇŽ€E}ª`[Á^ÿÐäÇ“M>–½){Sö¡ÄÙ‰³g÷{Ûïm¿·_]VH…Tø¥ïOy•cYaÛÙv&±­6Zm´zCÝ u7Ô-Ð+Ð+ÐÛ6lÛ°mÃ,t-t-t¥öX'Öé;~ö¹s fËl1šFÒH™©iÓþÀž){¦DžÏµÏµ¿x³çÅžûŸë¼´óRÙ9•Ñ*ÿbô‡?ª³MlÛD5©&Õ”ß,}£#fƒ2Çf6ž'3»¾v}…®¶slç•kW®­´SjÙü't”ùZqï^Î)Ï:œóèŸaŸ_ß·ôS«qOú{œ¬¸Á¤½ØFXGW~ÛÝâwAÞeå5#ˆbeYÁ<+44·˜²ìm´gõ:œŸqxôâàU6yNjVÊüª›ITHfh'˜È™þ"Ȉ&âé" £,ëöÑ xp~w_?óÒVIÛB­J³g„Ìk©_烥zË h1žÉM›2”ƒ”a 3èÂ^¨JÛ©NlMz°ô+ÑÊ•ûdQ~ ú¤Víë>³ü0³Ê šV¦U_2£{ðhw _(çI…¡m9ÏÞÕšó,‡ÈÑœgùGnä&nNÜœ¸9ß ß ß`Aà‚À†Û ·JVjV™Uf_'„ÿ¾Ôw¹`i,¥‰eë-Ö[¬·l‹Ü¹-2?7?7?wåÄ•WNÔ]§»NwÔ^›i3m©9ʬkÄ$û²mcÛÆ¶¹IîIî‰/vïÛ½oG¢akÃÖ†NÀ~·pßgnQyyÕƒzFÏЃ™13øÐ1:†Ò_eýŒŠûQÜ.SÜ«V0t-9Ÿâáóø]ÜØv}ˆœiã?q`xͽ•—I£t›¡KÚÏË«ïÐ Nd…4,ü•ûpûÀíóïäßÉ¿³ûØîc»Õ\wp])‹[ÅV±UX‹µX+õóݺ‘°¬k!–«6ªÚ¨j£½÷>Üû0^þ¼üyÑ*Ñ*Ñ*ªµUk«ÖÆ@ Ä@šA3¨,yÐ÷®¾‹üý×qס h Ü?pÿÀ}gŸ|fиá㆓RIÒð½}mø¯A8I¸—j©ªm|td¸A÷ÖŸÆ/ï{„ó»ý«L9Þܵf’˜3•-¦öø€v°‡…bô~e<ÍpcYÝ!e-R»¦´$>f¾©w\ò½ÍõÜê»±®_›þ•ûìÖµn}ʳªÅ¯y§<'¾~qÄyÈKÎ3.EDrž^áÌyzxø]ÎÓ»„_æ<­mx]ÎS'…}¾#Û>~ öÚFÃ7{ œÓ~gµv cœŠMÌÔ/©Ö•]øÍ»2ÄiŒF²µ4“­¥OdK•p¡¯‚T~çC‚$&{)½c~ãìŠYœ§Ú‡-á<Ó&âѾœ©-ÚI;~a6ÛCóah}/ïQ¡¸+ð߈‹œgvv@žíJ4p 8±Ì•\`„ _ ?œW7¦¾ÈË+ÚD˜¸ûóÏ©•8OYV¬Cߤº\zôl ù¯×ŸŸ òÞÉ-Ñ-™'ódRȯùvóíæÛ—ù-ó[æ—w/ï^Þ½c.Ç\޹´vkíÖÚí«÷AT–)\ŽIý›†ü6æ0ecØ6F¬¨1¬Æ°Ã:tèСü¨ü¨ü¨±æcÍÇšËvËvËv# ò!Ÿ/sQåO48þ¨Ú_,èÐ&¯š¼jòª¼£yGóŽv›×m^·y¨ŒÊ¨L^äE^? —¿_MæúX(±¬g®–£â|iò°9Ï”¬žØ¦?8Ÿ.ó}¼ôjÛóõ¥@Cb˜Šþ7TWŒÞ×Cù¯ÓHI%®­¶»ÂÐù«æ:U›¿×sÕUÅ;OmXbs¬ý†­u¯§ˆô^Íù™5ã#9O?®õ)øD»¡áU÷&ø??©?wº÷£1¬OJÝ5;T 6¹k¦W¨1÷·nAXÊÓbBI—àfbÑ®p†éŸ@˨öC ÊY{i‡|°;®9d!/ÊhX0}Ml¯­šãÕÖ)í½öÉï0ï[~_¤BqWà÷Íúa¦”©ìêñªo„ÅíÖ6É4?i«k­­ñøWJ9!Œ-¤EDHD´ e(ÿ£±:ÿ;” #u¤#³WçºÔÜ´cþÀùülšNxÅ7¯O šfh¸Uk\àc¼ÀA~sù¤¿UI#¼BöU~ÍêÚÕµ«O98åà”ƒ9sç4N‰I‰I‰ñâ;Åw ™‘™IWù’/ùJ}~/^àòÎ3õPõ˜3sfR.Þ†6jØèxÉñ’ã%9rå4š¸vâÚ‰ëeÎ2g™­tÕ=Ü+ÛL~‡”™Ò†M¼k!Nˆâb¦ÄL‰™’“ž“ž“îRÏ¥žK=éáäƒtøañãÐ200õéJÝ…w‰}F·.Çùä’ù‡)«šížÜýQ³ÂÚGý¥«’àƒ6ŠÁûhB J(3—°‘m«-(ïq5ã}–ïUÙ^9kRT3Oo¹Ù*-Î~qiÓØÃ–sšwÛ?½R€UÃ~‡5_ñ‘Iÿ 2£¿ù+ïq!²ýÂVN°d½¨/Yã*&ȱëüåI¤‡ü²ºš/Õâ•¶eõX>£û"^”±$bùã){'ùO«yζ«´ °‹¬¹~/Ë¥BqWà?@ž+ËуàæhžVY¦*ÎêÙ¯b³Å|RãjçÛ[á´:j¯“ýì†Ã«Ô0öÕ<š@•±öRKœ‚LÎ5⻊ !,t¥çbÙϨmG§ ¿ä¶¡Ñ|Kz•ð#±åÇÕoÝOj: à‚¨ …(ýWu h@òùf“Ùd6YZ‘ž Ï„gÁ®Á®Á®™2;dvÈöÌöÌöÓeL—1]´|µ|µ$•ue]Y×_Èó·½}ú¥õ=Œ…1)šÂ5Þ5Þ5þØÓcO=Íí™Û3×{Ô¸QãFmQ=¯z^½M¤‰¬c1IR_ßò‡<ñ훼5ykòöÄÃO<<©yR󤦑‘‘x2CU©*UUL”'Ñ­¤y‘N¾d»óf÷ M÷ñSÒ6ä|òô›“Î ìÐ:FÃ\)Væ ‘ôaú)ï7—ªp”þë„4LfŒšá[;$}rÆ“Ô[s‹Ç= \6b×à-Æãš½mÂÊõLüegT×0Æ6Ókk´ˆªc– M¿²Òýýù)ðGC²ÇUŒ's\Ãø•S#¸æ;³ü#WqÝ”Yaíº½oÖÍv#\àcÙLa(ñïà –C90¡·Ð[èM ¨œ¦kOמÒáÚÃk¯Œlÿºýk¯l›€Âiá´pJPRòÿ”3@І:”[ֿ̨1m÷@ÆáûÂîwKÎåT;93ysX—¨=JóO6™õ:"A=üÂükC¯6±1×Ö¿®y@¾KY3Á….c7¦ T%—ûâ›Æ{ÃPZG pPù®RkÁ&.eƉNœgdE¬á<µEØU/ݬÐÍ`Ë2™15’Ì üQ ü—õ½u¢NØ‚-Ø"¦dêbßž‹}üºøuñëò¶æmÍÛ:ßs¾ç|O“&/L¤¥‚¡`(BºÐýeŸßþSc0c0kÆš±fb…{c÷ÆîµììÊçäåäåœ\upU?i3É4™&5AuT‡!Ô¡þ]¨ï"ÁÃDšH’†à2Ôe¨ËдÎiÓ:¯}¿öýÚ÷áááRûk¸†kŠÉñ½ã?-úçð/à‹z¨\ZŸ¯æW^uÿ¨óù bÙ*ªÍ_Ïátj«æ*¿PÚ)¼bVh[ÄqaïA ûÛQŠR”’‘9à­KýÖ:ܲ»©î¯>¨Üœ —´£úem¿Ú)oœ’¥ró™—ÇÔ…бE¹¡ÒÖµd]I^\j\º;òÛ°Ã$Ìâ „)˜Rppp Œxò ÄÚ¿3±9Bkáí.ÞZr„4ºûÄq‰è¤ÒMfí0Ù²eùêÈ@5–âhƒC¨3$¢÷¾¡·&ZOKQ ŽWxUZI-éWç}pŽ?àÓ´mµzi^6Î*:ýùšÊáÒ§¥ ,K“¥ÑS¡Š©ð3AôJ/A)8s£8â%ûKÝøú&Õk˜Î‹Òí[ZG-ê­ò7ÍöµÉ>}íyÞkÏ63=îÕﯢ^GÉ,Ýk×*êÜ£ʌå¦û»œy´Èz—]ÁÇ-ŸG¿·C<2zK£qŸäêAoDãÞàŠ$›+ÿfü¯CŒÝbCèl©_éu¾¤Fp¥{úCÜxÍëæ¹ØÅwðƧ/Ýyt4Ýô< û Úœ¿äê|Þâ +ꢥ(ý¶ù.¾‹ïBô@tB'tÚ±~Çúë_f¼Ìx™Z)´Rh%×Í®›]7¾5|kø6Ú%Ú%Úå|ÆùŒótŽÎÑ9Ëcy,¦` ¦HA±%(ùmÞ³ø©ÅY°K°¤´AiƒÒbØîÉà“Á'ƒMºštµžãÂ]¸N¼0[˜U/ª^½Ø]lËÓ»n~ݼè%R"®ñº¼.ö|C³é—àààtšNÓinÈ ¹¡Õ3«gVÏÔÜÕÜÕÜïm¸·áÞ†ã>Œû0'q'qp@19~ttƒ¬Y[rÄU”ƒ ”¦ô8Vëç3ºø=øœ=þqßwöEÎìfe´Vs–š‡xõÇALQ ÞW—‘¶É†Ù0É».¼_x¿ðuWæ^™s»$*'êâØîÀÄãò;€-x‚Øÿǫ𽸔¬`‡i ô  •fñ5û›{½ozÔzðZ~=ó}¤÷îÂh;/ ÙZ!Š•‘s¥`1º}3ïë« »¬6íÀ'Y‚ðŠ6‰5ÆuMz1ƒé+fx´Þd½%&Ð$¨ÁX‡3©v¢ãt’â1c ©ÿŸr¤ô‰Æá:¢1*š>Ô¯­YåÖŠm3}v½I* ­ÄyöõáÉ+^…÷¨Uw®ÝãµKãC«ºR9Þ`Hçiá•9O]Èyz@ø™ ¹Ÿôë;¤fÇÇÎÇ•ýeœ}•ìLèÆ¦ÒpÌF IUòDºÿ,ìa]Ò@6¤ÀÇi†~zsžQ7Â󌊣‡ <]_Êô)pAF âI…B þ4ȳ¦ŒÀŒ`ŽÌ‘Iç¾NmœÚ8µÙœ°9asBA—‚.]öoÙ¿eÿ–Úk¬ýQ’çæÔœšã ®|‰ÅøöC9åŸz†`q⤲ºšu5uÝö;Ø/æÑ±sÇÎmj¦f¦ #:2;&0}¾ƒ7«5¨ ª‚ª ÑHLdÙDv5ñjâÕÄžk{®í)ñ±xÏâaØ(&Ä÷Žÿ´¸ç£Ïi5ÎÑz¼Æg½|ùñÀçTpfÏÖ–ñJ|µnµ«Ê”²„‰ì–tUMCO1¸_AܦÃt¸´}iûÒ6 *Tv‰s‰sñäûÈï¶û‰N'Z¨Cz¤UºPöXöPpÆ,A ôѳ  Õ/êú·k(à9ÜŸQv­õ½®//ÜßöL÷ÝcØ` œúZ9•ߨå¤þDé¾è¿KcÑuÿá;W2XÃåp»1PVN(O™¥9¼ TŠÝJÊñÞÆË×ÖlÆÃÑP£Eë^º¶.Ÿÿ2¦Ó+Ônëæ4Ki9õG*WASX Ô¡ò°+ðïQ‚RpL’5ŒPŽnâ†-*VÁ­ÄÒß"U×P¦É^PÇ´ 9ö·²Â*.U>’v¹Z¡OP³ygOÖòð¡øàÒs•ß·ï^4 J®RÓ:^ïá¢Üµæ^™KV°U{ s_b×MuœÒ]¡wɶÒQ|YÐ5Ì¢óäƒ<èB *Pƒ dÿØ&_ *­'˜òw¨ƒÙjSTšËºôìÜœÙõELiò"÷ɹ·Þ±ñÎW`;&¢ 7)]È«á5Þã³B þ4£Å’É<ÌüÒ÷¥ïKß³…l![x.î\ܹ¸¨ÃQ‡£§nHݺÁ¼¼yyóòÓ·Nß:}kûôöéíÓù ~‚Ÿ@Ò†×x×ø„OøôM³¿‹O-šÌc1ã-Þò^؃=Å • •_ŽMRNR^ò(Ù#Ùc‰¾±š±šQ.ö`g\›kcÌ`³oúÍÎÃ<Ì+YU²ªdÕ T£Â„ *Lø¸öãÚk   PPâ)žâq7pC1!~ È>³™tW,ûí¬Uh;‘?ž¥Pý]û±½/r>¥‹Ï»*ôÝÊIqÙt·«·¯PåQžå±<–'V´kÚ®i»¦ç=Ï{ž÷\¢²De‰Š²•²•²õ¡>Ô[±[¿»èöÿF¨ #±VÔK¬8š:»UÇNüm–y䨒« ×BtkäT§BtG¡ÝÔ'ÿ^á–㬎¨Íè4iáŽâ«0AëiÆýµOGÍïÙ¡V¥» vÄÞK^¸Ñ»ÙòÓë¶võÖá<³á„<Î?EFÞîd*qû°ñt“L~å·ø‘ ÎRu¨@ÆÓ{ª(V‡¯èæU3‡ót§ð´âå§ö~õ1îEPÛê–s+œ’„¢P8ÈliY—¥ºÑ0¡ªšIë=•£Úžã<Ñ!Äžó´ ðNœ§T -å<åS؈Sžî¢ß6ºþ6ëž_ÝÏ^ÌFgÖ™’I½àñ%ÉÎßn‰g;˜@¨ª0í¡ìÞÚöméáÄs!+ùú´Îáî;c& ó”öѲýòÕ`? æ7 ñ8“e²L±BW¦+Ó•MŽ˜19"‹gñ,žÚ7µoj_///v”e)³d–Ìò³à[}krÖw–ÇòØMlÇvjÖÓ²§e³9ssææ4[{bí‰uSÔ»©wS÷‚=ìQp¾åÍ EQI¼„ B!öEì‹Ø µj'Ô®v ÚjÄ ›Æ¦±iß½F¡€(ÿ«Õì–¢­ñfágã¢3Ðÿ¼­˜³©Ô–>áƒ5,Õ{¨&Kí¿eŸ° 1ˆALiTiTi”²¡²¡²a³Òf¥ÍJ?7üÜðsÃä#ÉG’|¾õùÖç[dGvd‡îèŽîßýH¦à,â>¶¡:¡ *_¹w/B£8ªô«¤4‹m¯uÖvœá8è@ªP‚ ô—sW39~b” ”yS")3=ZD…¥+¸3=´ÄB«GFµ+Ïœ;(³±V|ÐüiÕfëÖÐl˜õÉ öÊO•æRsÙ·O›K;eñ¦Ëçm¯Zè§—?­¼Üq†Õ-½Š¥¹5@)ÅßR,œ?DYåà»ÆìÈ­tWç×kØTÊП>þnG—GÅNŸÜ‹Õ…UK¥¸ N뤷*¸}½ÖÓ¦TLp³Ø¸¤méþž×Ç\ÚL®8”i:ýðàpÇ«cÎtò,^soTJXžÍݪŒH @n¸U©ýÖ"p¯îÁ«÷þÛÓ*´›Vÿ ãQã!è€ì,ÝÉóOl{At<"£T:Sú«Çd(:¢?ÈÕøHÜÃ%Üï¿´U´C19(£ßÍknl},á¢r±=ÐÕa%m-Äxþ:D#Q„¢Òz¥õJëÑÚC{^¿(~QþpßΣwøDy¿w¨n9N¦#¸õµõ视HÃäNîäŽ^è…^jjjâ©ãAãƒÆõzêõÔë‰:¨ƒ:bHÍWi5¾cÑ1Úˆ×bE—+nï*û•?µ*Ø›ßHÛ>bý摵[¬@=8BŸîÑPœû“ïá_ô—e¼Úë1-hÕÂLIW¾¹“¥uo½Žó— -i²èùăVƒNržÖ6¼ç©ËÃ28ϤˆroÊ]½âî¸îußô ï7F}øTÕQ¥V‹b/M¬zé˜Öº—~ÉÆ kw5P™§”,ôbÖƒ÷NFˆ‘~æ;¤óSà+ÈY…©9Þa.5Æ+,Öz§~P¹qÖ¼Çzøqž\úˆóôõáï¶~©ÍP–ÃìÈM0`©;ò°½ 5(IŠ”\.Lç©?³?ppP0Ÿ˜î~óB㘤>oÊ5ÐU^-ÝB <ÀTÅœø ÷­! ² †bMW¿®~]ýN '…“ByyùÂ] w-Ü¥ûP÷¡îCéªô€À Npú%£ü7s˜Ã\rž„\ ¹rõLâ™Ä3‰s[Îm9·%š¡š‘>链äÍÿ­=‘‚°LX&,ƒ>ô¡ß:µujëÔË—=.{Ì~;ûíl)n„ÞÐzƒ¦hЦ aÿ‰ ØÓª.–8›§êßyÙyÔ†ž×‹ßLøÐ/‘óè>íƒý]V:Ha… Åý— ~Ô$ËDT@T@TÀéèÓѧ£G:t)¥Š@¢…ЍˆŠ?Ô³‹IË• €Ulg’Z.äýöc‡˜rž~)ÂöB•˜S}ËØšS°]ákTø~Xž³«ÑS8Ìr)æ— ku·M78°¦rÔ^ª¯„8 ÜÊyzQD#ÎS4BŸsžö(|Ù›àç‚^. oä^»‘àôÚx·|ÖÙ†u^>º'!ð0çiÉí8OW>í¦¿]Ã2·™½Lœàkè}Cრü/h…º°`j4 ·ÅŠ•,ÂÚ=†óŒÈˆÀ’mI/Bû\þ´©}¿YÆ!å‹5*à) ”9Ó&¼,›¿Pš•!û"·G0íÙI¦Kµä›h To¨l2tŠ÷­êý¯ÎÙÞ1çiÃ=8O^ËyÚÖð¨WÍâÎÕœ›;DÅ5Ö¦«‰µö'ù„H¶–&ÓH2ÅF©JÊ¡ïÿ†¦¨ s6‘n“4¯Ç5í7¾ÞHÎ3nElá<ãPDÒD6`¬‹ä,ÄBé2¡êÁR!PÿäÕwFŒ˜è3-Ö4¾ÕøVã[qIqIqI 4Ž)ˆ)ˆ)pXå°Êa•ô{±^¬£ñ. oS}W†2”™13fÆbþÔ*gªœ©r&¡{B÷„îÇgŸu|–ã]Ç»Ž’{0ÓeºL÷›{Š:¨ƒ:òK>1>1>1—]>vùX¤w¤w¤·ØFp…€ÿt` ©]Y¨c¬“NÌý}‘zÝd¼Å¤æýc9næãíᄂ†ÄÿªPÜ%ˆ¾q—q—á _ø–W~\ùq;ãvÆíŒËz—õ.ë]W5^Õx8ÀÕbµX­ï&_ÝïGW¸AbÑ|ØT~¶úº‰½§qž16"úaôžõþæ÷ ´%ùJúØø_«¢Â!Z²õ  UØÁº¬%G7´D©á"ÜÂÂÆ­«YšLÝ4þ|›A/;Ç= ÌyÆíˆãœ§Ü Äy†~D“çwúº¶êt䳿™U—ÚtÑûðÕ¼¨I…Ø);,3¤Ab÷×:­K†'®ÞXlt*(¸yI­„>Á—Ú¯idjóFúõ74ê “®Âëý{„¨jkB JB6“FŠÕ}oµxW¥çi^ὋVÇ?öªÈ÷T§àŠ®9ÎLI—Þ£\’[èßüÊ¿~KPF}8˜mb {ù†ú}ttÕÚŒ=Óoh½»ï}áÿšóô9å8Oív„óô.áéöï=à¿dTAŸáu¡ûJ+P%ÿ+IÞÍT¨¬`í/Ó?¢À –x_–¹|®¶¡jÍëѱ†ÊóAiOÃ>rPgÐuçæ—V¸ ¨€„f,’ÂbõM@^ÕžŒÉ˜ÌbY,“bª/¯¾¼úòØF±bÞ|zóéÍû‡îºhà 4\ u°™mf›1 ³0KNο=ñUX…UäAäA/轘tzÒéI§/¾|øòáÐÏ¡ŸC?#È`cØ6о!ñ5Xƒ5bìœÌ]æ.sŸÆ§ñi<'>'>'¾më¶­Û¶Ï è=½§÷ß¿.è3E‹©¹©v¢†Ã•âàUÞ%œOž=`çÑš>ÂÊâö †J튻OÁSðËm?´ýÐöCÁ¦‚M›nZ¸iá&ÕDÕDÕD‰fëGõ?kŠ0‡ ªÀÕ`½ÍYc-[mç§ÒwD( <¹aX“nÚž¶íÚ°‡‘0›í¤y¿O4åÜ`ÄŠ^¤‚ÌŠVàéW- 0-ÛÔ9dÙbGì¤ žE|D™à7œ§æ‡½á<%.¬çã"–>˜¿»‹ß¨ù·‡Žl2©ÊG˃å—õƒó©5Ù òG-ØÂµ` }6’®‘t¸¼pé°zn¾œg8FŒ+™™äòövòö·CÌè×Ó4Sæ°1tëKЪ"ï{¼+KJ ‰Ïz¿ñíí·ïîÒòÝR\#1*¤/çé7"šL»ê¯ßP:‡dç˜ ¹ÂzÐøƒ©…ÔþÅMDíQŠ%Â<¶‡æË71[©?YséÜ·ƒ¸Þ{8hoOÿIœ§w ÏyRvhmÎÓ_DT½Òpï÷rˆKÇÎ^å 4Î)ÇÉ÷Àö35ª†;Ø )æW'Wÿa±Q2uF*¢Ð 5Û—6`óšóT¯°y|JÚ•ð¹q/gvh@™ä«´Œjã ‚Ñ 5þòÈ~?äUm‘VaÛÄ$\‹Zµ,j-5\j¸Ô0Ï!Ï!Ïá¸Îqã:íF·Ýn´$Ÿ"zPê!·Ê}sŠ#»Ì.³ËbÙí–Û-·[©7Ro¤ÞØg»ÏvŸ­±†±†±Ú¡ÚÑsz^–÷÷›À|€dHÒ¾§}OûÞ¶òÛÊo+Ÿô4éiÒÓ*U«”ªPª¢êŸ䉭ü×56)]‘EåMôhçÂ?Oa>û9Ÿœ3àÌî…= ›¾‡t I»q 1€Ò#=ÒSê¢ÔE©Ë ¯^3¼ÎÝ;wïܽ÷îÞ[løƒf¡<4˜3mÁGXÂÚAU;ØWëÄyV‡ÈXÎ3&GDL~:pRýD±¹ìˆ0ŸiC*ÿF¹‘'X<ˆð–E}è…|6– È }J#›÷‰ê VvStääƒaaœ§?Œ0å<•…Esžº1ìÁ¿Ýj¾ESZû5lpß6¼¼îWüÄtŽüO³È»1½PGúƒœ½œœqÑ4‘*b›–ƒÚK¥óÙW¼ëÊ?¥Ì«ÃyZËpÛ½•§8xõ>ÚtUÐf¨nc;Ê+dßäÔSlÅ8x²æŽ™@C©^ù'sõ‘·³Å`$<ðq$û$¼fGÌî×чó´:áΜ§‰H[ßû®êjå…Â6žREò#m¬ù•Þþ[ȯ«•` ª†ûˆ¦ÇñÅ–°‡y©nèúâQ;ZÎ+ºÇsžêv€ó”GaaœgÔp9cµviïŠ}Z¶8WÅ‘õ¢Ý(–.Ö‡TY!«E­~ó׿šlÿz&ÚEî8!–÷øDï÷rãÓ,Â+ò{I#CÍzUò(gïƒ Ðƒ2ËaæÔè'ü2|WßU &c2&­Tš5?j~œTiR¥I•²×d¯É^“º-u[ê6ÿ&þMü›|5uÖÐ*“|Mh~#y-ħk…Vh…c8†c²Á²Á²ÁkBÖ„¬ 93þÌø3ã{¼ëñ®Ç;é)ÚPj#R+~ RjBMħ0-0-0-H¾—|/ùÞá&‡›n¢5DkˆÖ‰Kg Æ`ŒBœ>L‚;jRî–…I%$ùtk­ÂùÔ?ðÒÉËìH…¯O›!’HÝÆ;ÄýÔ#&@€À*²Š¬¢ÈkWÉ®’]¥D¯D¯D¯ý}÷÷Ýß×8×8×8ë±ë©)5¥7p„Є…ÓQ)l’\]Û̼¤yÊΰ¼ 3%²ÙþúS—µ«Î´h>£à‹«ØŒ2¾y›´Ì¡ŽD„Ò òu0«æµJ[{ø»/´óϺ´âpU%g®…èržÞ‘óÔ¥a™œ§÷ Ï»2hó„þ-&6[ßÄp‡î3uǯ^àvŠ–S*uE†T¥,¥cúÿJ—\ ËefTO,×uµO7œöÖêÈóÁáE~ Uƒ“9O?á\»Ó™êw¤öª4w¿ÈÌ?¿Ñ•W¿Ê#cõežA?ØÁú_ª~–@Û.hŠÊìs%/hÂV3¢ü÷6\Ìyúш %ÏÞ‡˜Ý­°s‘o«Š¯MÛ—“Ò$Q,5-Sdÿä‘ûR‡êïäÎ,&°­´@¾a“îÕ[š¾<5ím‹ƒNÍ nÈyÊþ°œ§¬ëÌyòÛÐü¤ö‹ªt™ÚܳÖ ¨C 2Y+VÖÃ:Ð<”ÝûhóΧ­öÝÌùdíͯ×÷žËbÈ ïp Ð ­P ¦?éˆYÀHA RÄŠ€ë×®Ÿµ?kÖ~‚0A˜ M{jFͨÙWËÙ V‘VC²ˆ[µ3j¥­výà– ýS9ÏÚ™šÿnul¯ªú/uæ«’#‘:!í+«ö~jxÁŸ- hùžÕΩŒ‘¼ªc€s‡Ô¬¥‘ÝfqžärŽóÔÙaœ§L «ÏyÚð±çcâû6:gÔj©ÛAÝê«¥° )aëDI¤‚†pB™+ËïW©0€gºevÄÁï:Nwöç<­Ox­â.§ú×ýhprÊ0íF‰U-MjJ©°–Ô®l˜þ!Ðø—òÇv0%’¶1*Ÿ”ŽÕñ²W2LT PR$oWv“¹’3BÐ e¡ÕßÚ¹ÁŸ¹óaË")”³µ]½ –7?ÕOryöùRü©aùœ§‡mîÔÛuV%é$e3S*;£ø«Ã‘奴ªÂ˜õ£LR'5œÅHù†mšºXYMKv_\·«=ç©%aï8OæÌyªEØ\ÎCºìÕ˜RÎkPÓí52Ì¿ºgV¶á-ëC¤.U‰j·:T $k.Ô')~cÊ|ßì»8ÏX1—óŒ•+g¸„6”¶¬d‰Ë[˜ãÛ ûSà·  UH:)Ò(MžJ¡ý¶öÛÚo;>éø¤ã“ò·äoÉß²`æ‚™ f28d ­ê‚¡`(~ýaøG]hdA&}x;¢#:ê´Õi«Óvûýí÷·ßÏ1 c@‹ A-$V=*¢"*ú‡ß‚µ¦ÖÔ•Q•ûNé;¥ï”ü¢ü¢ü¢Èã‘Ç#K-;¢#:Jl? üœ©2mš XL©÷ÔÆœOí=ðç“–÷rûH¸i—ÚoU6+¥J<@$ºÿ|Ãdèƒ>e “Õ—¨/Q_²»Êî*»«d¦f¦f¦Ö|\óqÍÇ8Š£8*훼€Ô_@úTw†ìT,•FíŽÏñónÎ_g‰¬ÿ©ñÉqCy½qUžy‹¶mÁ‚õ¤>øŒ*ÓÊQš|oågh+©: ÛÝÙ¸úáóÑ1]úâ<5*,Žó´áU8OŸÁ8O1ίˆÑí3!À½ÝܪÊ{j婚µöd3i4öa*¼$¾Ùÿ`ûÕîAhªŒh2nA ¦b£Çlõ’ó´”ðÙœ§Ô Óɳ\“ÙkzyG­•4MØL»Èã+»ìߥ¾Ëù[³>”AÒ‡Ù¦ŠÁ9zAu{µ ‹˜4Ô2ßÿQÿl£·•L­«KI³™'=Anc|¾Èÿn+Oø8€Ô± QÖ/týÔë_½Ñ­ïΓG†.䯶.Œš¶æî¨ ;²“Lê*Ü)¿KÈÛ›G`F0#fČĊ†– -Zî_¾ùþå~~~«õWë¯Ö¯èTÑ©¢¤> Ž‚£àˆj¨†jrsíŸ[7š¢)šR>åS>Üáw?W?W?× ×.\»pm®É\“¹&t‘.ÒEr$GrŸúŸ5´ÑPJRTá¤ÈI‘“"Ï­8·âÜ ï¡ÞC½‡BºÐ¥Ù4›f;î= üÍ2ÂXÊ o±böÖ¯ê4âÅÑ…>k¹Ú$½þÓ‰Z×Ý´bnyS­uPƒZ‹Ó_|:207æÆÜ 5¨µyØæa›‡Ùg²ÏdŸY–³,gYŽŠ®Š®J™)éHÿ)¥ ,¡+k(Ô&‰8o~ƒ!]?sž™YŸól§(½Þ×<>Ø'°Yô„Ì…+ì”ï@¸Ž†Z‹ac:ͬ>ðrú¦uýŽsžV5¼&ç)ËÃêqžò&,‚ó´ áJÉ1K‚ºî °õÚ]µ™ª±2zÈ÷#lfñ´ˆ‘'$¯ú?Í*§ˆÐ)ê€$GØ¥ÿ@g¶Úá³1ëöô^X:$¥X%Î3nGœZÛh¸µ‡•$3ît5P_æÝ_õYøE¿BmTÆc>ß P3=7zmJÏuIÓõê~[ñèÃÀàä kì=«íŸ}Ó]+t±÷ÕZ›¿êA“µ§.p€ôþäQý‡V< £Ñuéá ³§ëdºc×ÄŠžZœ§- Êyʦ°F9ÂJ¥ËÊÇk»«ve†´÷h35Á±oâYä· Ó1 …lvƒ¶Ë7QÚ,«ÅBC{vWcÍ%ڜؿ/çéÉÄyRfh}ÎÓÂO¼ÝtdÖàÞsW Žvlkf6Bç+úYº°’™03Z‰gW6N¯ø†óÔþa{yn&"Î2+«£L¥œ’¯`AÃÈ[PŠ„¯3+ðAÞØ40@PÔ5±Âqšã4ÇiÛ¶mÛ¶m[Þ§¼OyŸöOÝ?uÿÔz•ëU®'¹ZQoêM½ñPæÔ!2¦ÿC`CÙP&©Â•c+ÇVŽ=\|¸øpqÂÔ„© S«ï¯¾¿ú~‘ž¥±4–ö¼ì`‡T¤"•ªRUªºQØ(lÎ):STÓ¢¦EM é‰f³Ùl¶"[êO A›æ‘Dê7rœ+U=ÆùäyV–Ö¸¹çÅ#¯÷œV{ˆÉö e‰…ë“5.ÿD$Ú üáÜÅ]ÜÅ+¼Â«9qsâæÄ]vqØÅaÝ'vŸØ}¢Ô¼%kÉZþx¬íÿ²š‚EUØ ‚_hÛINMJÓ‡ŒáG3ÆG,˜})¨Cã¯RÆTªmZ«Ü‹Eƒ›¸¿˜´¹a¿gœ§õ ÀyêÁ°Çœ§ ŸWêœh”´xaj—^û4™_é³ú•²ŽòýÐ @dõ¯ ³/ô£‹œúÎ0­2n ‡ñF_M?š58§dΩÔàᜧÎ{èÓ¯µ•C§õæLn’{Æ_a,£T‡2Ô AvH˜Ãʉ´›kÞS§$¯Êê螦œ“¶aÁ´—õ#§Üʶ·*Xï8“¶¥u—œçtÙeåªÈþîƒÊwÓê¨"½5a;NK0 ~¨_öÊ¿C¼(Ђ[H’=âX·5‹9ÏPŠð(ÉO˜|ó¹Ç¡MG«kW2®%]*£hÜø¥$|ÿ€?Á~0uš…òML¦èÐ0Öµo׺ûŸúìï0óôÎáç8OšªÊyæíH÷{-w·ñ0îe­z[õÊk‡¨†É÷°[;Zæ9¨83µVh«ÒÕÉE!ÙQígT“Ô5á{KǞ¥\$|HIJÌd¡g¡g¡·jÚªi«¦åëäëä뜨w¢Þ‰Úr:ät¸öU7ƒØ 2·Ò_‘Õ¿c^DÊ,~—ŸážMx=áõ„×Ü/¸_pʈʈÊÀ&lÂ&¼Å[¼ÅP ÅÐ`7¢Fe®˜Æ‘ƑƑW\ypåᛇo¾iÙײ¯e_hA Z_yº+ð“ÎÐ9ä…÷byàÇZ¨|WœdÐZñ“ Ÿú%|2®jŸ9žö¶¾fRòAƒæRåŸn”âY<‹‡ l`ã`ï`ï`?+~Vü¬š4hZØ[Ø[ØÃÎpSIÿLC1cZRFÔX³EåwFÏx1hï–n¾ì´íšc½"œ^X?Ö[8G;èk¥×ºqƒT8O7ßÇyêãpÎ37EVÿþظ!î‡Ì<ÖaZ[õúQÖ½ÙFTUþeZ‚¥#]Q]ªRùÝÄvÿ;ä©“˜ÕËaã»,¬1ŠótÍð˜’f •‚cŸ¬ˆ«˜ï|¾R¥ W¤öy̚ʉþ,åïÞól/S!ÉϾ–jåÎ7R¶åù¬ã<Å'ÌóÔraûž·9xqP=ÏA £,bæóà×pžv.|DIóÄ!ë8O»>óœÞ†Š}u›¤´ƒ«Œ·¬X¼zÂÙ~[‹6OèܯIé©Iý§÷®Ñ¨RW±P@¯)ø' w¸Ã"(‚"Ä ¿§~Oýž^t¿è~Ñ}‚Ò¥ eÌ7é&Ý”<Ï~¶Ø< †+<á;•òJM‹Ûý¶+ $Î3\"]ŠOÆ_ V{kuxÉàÝœgØDØqžR+̈óÔag‹ÆO³aå˜Ñ­:6Ó«ñÞìʯHi«@µÉŸÊRÀH Êß?Êò¬ §0Ù#V“<„LÑâ]n“¦µ•qžnÏk¦Õ¯–±{YT·8­Sêó•J™ -ÁSRG&$YúŸÔw%9›· ªÀH8ÂΔ}œšZÕ¨fõ`óÞ"ÿ[¥3’¶†Vå<åiX१±~ººlsØn,ª²jT›íP­Úúg­ÆÚqžÒ=Ìšó”ea Þu8>aÈõzî¨}“ΠþÒeËh*zÃv_½‘o ò#|³ÑЕ4©]Tš™»lmwK®œü.ôçéG"¬våNÚÐVSEUÉKÐ"ØšNq 㿳ù§V†:CýKwhÎË7¬›TÅÛ°(æè¨š-+ð gCt8OYº–ótŠŠ*Ü7½·÷Ö:‹U«WÞ_…YÝðà 1gë¿›í7ª–ÃLiB8’Ò—¨'…âþ€é1=&9Î)ÏVž­<;¸zpõa72fdÌÈòZ–¶,-´u«­­¶ê·­åYËS%Mh%´¢QÒÅF0ú¹þˆ*x]ÔE]‘ Nè%ôz- Y²,$/9/9/Ùç•Ï+Ÿ2¶¨4€üýò,l¶[à Oxvm×µ]×vö]Øwaßø¡ã‡Ž/Ë¥S‡êP¤ (€”ܸau }ƒÉŸfoÒwx‘êY?çS*ø q­ïîÐWš}XÚòS,Îâ¤-A JÄŠr-ʵ(×bÇÃwXwJ#UT€tmú™h•kugÛ®¡¾KcÇ„ ã<ãpĦù¹Cê»J*5;Át¨ª¡ââÅÿòjYÚ¡ªp½¤£b…g±ËM«/oƵ Ìå<©4Ô‹óT¯°UÊmTí›h;Ì¬ŽŽä…ÌÞ²ÖäJ¡dùbMÕu6úT’ƒ7éRÄyfßHÕ’´D¥:œ§w q`á åö¬_÷Õž+õ°™©PuÂt´—îçÛTßOc-zØ\Š&m$"|Ù€ÐÑM÷qžááÇyrrè©+*[Lúg>-_Q}†ô’§’-¶ÿò‡ëXí©>ÊA¤ TXÇNÐ"ù†Ubª—>skûœg„ŒJKٷٻéÖƒWöqytgS\uýÚ{õºFE {¤gŠ}˜ŽNI1WAþøS@ž>R—tI‰H,‹)ò)çSÎ'(|~øü:§’'Žo3b׈]UQõ¸À…•GUT…Ú?pçÚІ¶¬F©ØF©*ÛHï~¢ñ÷ß>ðO Û¶-lsòsòsòצ¬MY›¢¤¤$QJI¼ªßf"è¿¢÷ðfÄ Ãу¶´Ukboš¿Ãî¹FÉœgiŽP¾vðh›æË|CÖ5¯îØÖZ§ü‘¯zh8#ÙzІ?¼Ê6ß´¥SîÞkQÆ¿ëÝ8±’fÉΤf!ŸŠgÆOv hoR|hÓÎgܨò©=X+ò†´¡*ù½ÿ¨B¹LºHI9Ô£, ºÇT÷*¶™ï¼Žïò¤T+¡Bð&ÎÓk†ŸÎm¹ªnÏޖꆖZ’J*[+L`eKÿ D ¹0ŽÅ’¤Žk¼U“)M;á¿¥áüÏùñÇ-å¾IËBu9OwO½ÛtWmßå]'»½¨ò•1¤Ôº>R‘ŠÔ‚4ýÏ *ð·B J_«š±f¬j ê›W1¯báçÓß§¿MÅ¥³—ÎŽ, êÔßþ4ÅP ú™Â NeÔ“?¤¤Q:ÐNùàòÁ僷ôÙÒgKŸì^Ù½²{µmÚ¶i[)ïŠPN('”û›në!BŠPª§TO©Þ¼'óžÌ{’ãŸãŸãßüXóc͉Kì:»Î®+P`¼á*uSÔô”Sßî“Õ{ý§Yã›ö ã|–R@ÕÅC<¸Ô@u¡¼’[M/`núýå÷Ù¢ ~ —Ê2ÎW™¯2_åìü³óÏÎïü¡ó‡ÎRjbêD¨ô¡ÿ‡m¨?Öa-DZÆîå]uçÉÏyÆÔˆAÅÓ“j†²ì#Öc=ÖµÚÙjgë#{<÷x®®5!`BÀ€ÖöÖöêWɈŒ Œ§xŠcЀÆ?¸™7…)LÙt6M+üMüMüM.Ü»pï½–3,gXÊRd)²)P5yÈû«oŠVÒJZ)êF0‚v²l';nÜþ¸½í<Ûy¶’ƒ(í¥½´WᦀÚe^ª*áBË}˜µ¯»VÑš û5å|ú3¿U±õº´mâ+‰Î ÜÁF¬@û/iÒPÐeºL—á/xU®\9øXб cA‡;v4_`¾À|H ɈSL$ñ õÿò«Ä<ÐBèÊ6Ro¦E«¾$r/óVÿÞŸ] ‚˜‡’M ;T¾\S¥ÊùÉQ‹ëwíÁyJIX8ç©gžñ¹ªÃ2ášP޲hY#SáÿÅÞùËEY^ ]Fµ°Ÿ¢ÈÛàG8D¥õèU»3ç©óÂUЇZìÍyz^„Õ¦¦c¶ Uï¦ ‹”Æß€K}þ2œWž^° &ôesh²XaÝÇ(K{éŽ^¯zÎâ<µ|Xhi“Ä•!“9OQ?uÜÒ–Ýzתl«§/me1CМ2¨Ç— µÒMüÅoZ®oRE"ÙzJæjãUjÈ[;ëIljœ§ú…%pžÖ)¼åÉ7óëuJW[ 2RVò¨?r¨31,ùéf®ÄEÆEÆE¦|Lù˜ò±ª[U·ªn¢O<³d–ÌRþ„á¯ëÇú±~âÊ_eN•9Uædºeºeºí°Üa¹ÃRµ¹jsÕæOèÀ£€莪°…F(fê46çÞ q^ƒyÅI:ýçð’© ?9ß׃˦±F$¹7!æ 臘À„%²D&yïùó;æwìâÛ‹o/¾¨2Qe¢ŠpP8(¤Ctˆa:¦cºB”ä „Nh,¹»ô'U4$qsÈÐõ¿Øbe~Ëœÿ= ¤ÒË•e¦Kt:<š³¯k@çRßÄ€œ§G„ç<Ü+¾Ž”ÞHpdþ4ÍP_õ©Í2÷Ö‡2è+¿ÆéKº7|ÈyÚùðCÅâ;[ÆyFˆ.ËÇ„6Ûªl c’*¨°Ö$—K–ûß²ØÈ;&µB]XZ¬-u‘oV¹k•š¶oøÑ9ƒrž|;´€óÇ0•WGŸ ~5­Ç¬Úöh*×% ŒÑÕ¾d\þëèEOîÙ WVÌ‘§X=å˜oiƒýœgtˆèÏÕŠCì Mw{úµªh`Ò®ÜpiM‹£6_2üœ)„ä¥B@pQœªëÊ-Zã·FmÓЋ½/ö¾‘=´dhÉÐÃ’|ª15¦_øÂ÷N»£ÀßÑ€Èbe±²Ø™ófΛ¹âìÖ³[Ïïþ¤û“n™¸û€°XX,Ìüûû!/™pÄâD݉ºuOß<}óôÍ‘GG)Å a.æb®”1ý¯°skBšÒÜÑ„&4›oh¾¡ù†swÏÝ=ww~àüÀùÒ°™“9™ÿ¤Ž¸ ü ZÃfR9}àz¸^Ÿíõ9Ÿì3`6/žbç“’:ßww›OÚ³Tz+ÅB à ÌùQ‡„‚(ˆ‚à W¸jÐþ ýaýËõ/׿ÌÒÈÒÈÒhbßľ‰½´È)÷ |ÑúîG¨J~–°üRó£õÉ“EªÓLÜË].¹]¯üª´]ÒŠP¥b„¶Áù;¸8ôP³Ìššæ’{Ëe¦Ô@Ú(ÿ«:Bm‘ –•Z E¬ÉÊØÈAÍësžî~ø³ù©èজ§/?íÿᆅ(ÂH ÜäŒ{ØÊÿ —ñíÈ[úÃÉ›h0”²×-©bc¸,×uUËž&œg ‰YZ#qkÈlÎÓö†/Üž=i£çS£´ò5Ô¥ -[AET9X‰ÿõýüÈõÆêÓž²€rÏ—õ»Z·.~“˜’ò¹qBëà%·’ìBÑaP£¥[Lo¿Pܪü+Šà'…&4¿¼—븒͕Í`RT­öµ¼j J•8êTF¼A¼A¼}eûÊöeÉwD[濤HqùÂfÑ,š%– ¦L7˜¾µxkñÖâS'N8u¢¦vMíšÚ’bjÁ,˜Å7tëäK¾ä‹«¸Š«Îsç:ÏMóMóMó=úüèó£Ï³³³ÅTÈ@2þ»» l`ƒ$”­ð§Ïž>{úìÐÆCmŒÆhŒÆÔ“zRO…Ô)PWXÁ QfÛÛ|°ó×Mü}ôZŸ`Î'7às>cÈ«LZhuW{%.Åtpä h@ƒ1Æw×A®ƒ\å¿Ë—ÿnmÓµM×6U¾®|]ù:ò‘|ôAôQìƒø ZP‡bš WØ#Ú%V/î|©©ç­"Z—ŒKZj|iì¦ýN$èÖT·'Àš¢È›ÄöÂ(¶ž¦‰åò#µ«dìíýÎˈóôe៊3dÁ«‹&> 91ôE'µê’3la=ZFµp@ªÑþØÇÅOÛ1m…uì(-+t-5¯©ÌYU)r`ójœ'ݵ-=—¨âÈy†FD›+Ûb× ˜ÚN·ÁFù.Ù:KZ_ýÊÿÂ$Ÿ×Öï1]Ðv¯t#Ô\[²Å´ÿ^®‘x#d;ç–m—U Óhf.]êÇæÓhœÄ}x- $+‘•ÈJððЊû 6ˆ bƒPåPÎ~“ý&ûMŽŽŽ{Tö¨ìQÑY©³Rg¥Ôô&nâæ7$âìÅ^ìEuTGueeeƒn ܸ<,xXð0À;À;@Ê(ÏV³ÕlõW×þY¨/1îÀE\ÄÅ™ÕfV›Y-Ï9Ï9ϹuRë¤ÖIÒ϶¥¶ÔV1§(ƒ3ŒP ˆ"3ôÜó­êöâ|ªúÀRç‰cûW¹ó8¼´ËõJåÇiÍ—DÙªàê8UQU%ÎWÀ”óSÎO9_p¡àBÁ¿M~›ü$¥ŠÂ)œÂâ£À¯@nq¥ë4DX¯ù@-_iWÞ¤ÕÎ=/ñœ”’°Éœg¬Ž˜¶ýá„‘mÊ(cÈÇ7ARà©ñ;=- £Äí Ó»4ä<½oø-Η„LùwbïÐuýÃ[U«"eôdö´/Ié_xâÿ,Ny×%È 0ešŽ»òMº¨»¡Ò•û w…ûærž®¾‹ßLÖ íT|616dãÜ[CF¹k˜©ʤCsYÁ–.£*¡‚Ô…òÿ`ƒÿ€c¢‡…[bEì¹qCZûsž~:†ó“Ð×ùçV{÷Ò(Gõ•£q sÑ…æ’ã¿[Å'ñ×%¹lSdAd!2`+++ï ß¾/<÷NîÜ;;9v*Ë àÊ\YYºÂmæÇƒ.t¡K;hí+ÚÅ´‹isî̹3çÎ,m¿´ýÒ2rØ÷x÷R §o :Ћe±L ^os½Íõ6×O·?Ýþtû˜Ä˜Ä˜DÝzºõtë‘d¡ÿsá OxІ?Y¡¬PV¸ëÙ®g»žeoÈÞ½¡òˆÊ#*fŸ7y“·Bô(CeèA›†à$Õaì€&''s>ÍË×ÿÓâñ^}'~¨6vzŸ 5-ç–—r(²,RæÅûƒ@´š_Á\A ´@ ³`³`³àNt8Ñ!>,>,>ÌÊÆÊÆÊF¤}$'r"§¿:lEïò®& Ô ib¹ÎAû•†ßN?ê9øpqýSã‚[sžÖ>¼êÐyÞœ[Êw`ÞË ¢æÐ¬Y«&õ¬ÆyÚºð‘%•Cj½èyİI'×u•üÄ–2´(áè†ZÒÅÊ™ý¸4¾p9;á¦0{Z…bu‰ñîrú—O/h¿”ó´ÕáƒKŽ%Ä¿å<#&bbzÈò&ÝGW[i\ÁYêá ùã"ó²s ¿Ç/ÚÈ«Â6F‹Õ~“ÚF:ã<µ(Üôsñ©SÁƒßw<ѨOÁ^ßPJD{¨%N~Õ¿Q}·‚¬XÖu«;ºwtïèž«›«›«»GsæM³f ̈tôÒCÅàý€¨…Z¨%1MÂ$Lš 6Am‚Z¾r¾r¾rá!ÍÑÍÿe÷Ïí@ ¤@ÑaFç’Î%Kªo¨¾¡z~~~ë.­»´–"|Ø<6ÍÕý?íçoà$³‹y}óúæõ,,,Þ8xãàò]Ëw-ßUg2$C2TˆžeЇÔX3²ƒ”±Ò¿FmÛsœOßîô.blÕÞ9Ÿº|à5×É–— ׈m„v´‡Ü~³*±‰l"›(–}ý|ý|ýÎ<=óôÌÓq]ÇuוE²H)y¤MÄDLTˆÿrl-,›™“Ä3D«cgOÎSW…=* Mȱ}›bMÈźFv×Ì‚«»Û<5Úu;h»µßÎS߇7-]x7d]añ>}ÿB·ýÕÇ™IÔ™,Œ®‘ú¢¤¸‹¿‰ù^ÞC}‚àÊ2™YÙÓ —Xm~£çÜÚ—ßgײ‰ó”¶aúœ'Ÿ=ÿpÚßAMüN´åN£ä»^°b:GXCï?<‹<Ÿ}.õA–XvJ²QÓ;ýÔö Ã Ø¢S ½‚Ó9OÝö*âD·¤ZR ªÐES$:Á•¿rRà÷à^á³a6ÌFí†Ú µ‹"E.Š<r.ä\ÈØJc+­ÄdLÆdôŽÞÑ; Çp ‡*T`úàŸ ð€‡4›…@!p³ãfÇÍŽ9åsÊç”o5­Õ´VÓ¤„Gß²ƒ‡üwß›y3Éž=èà ƒƒ´+hWÐnñ©Å§ŸR1R1R1‚#áˆã8ŽãÂ100ÚI;i§Xáèè˜QœQœQ¼H‘þ"}•í*ÛUÊÀ‰¿«€Ô ƒŒqšNÅŠNG–Zîàé3Ûùo~Ó|ŒvïòC)üíÃĸ}1ÜàÓzGFÛ5åZ?z:ë舦œ§\ ]\˜¿ÇÓïu_Ç@£BI?²RŠG%˜@û˯üÝ2)þžÇ<-¤ê؇ xÃI¬i¤ZUÍøÕéÊk#{½åj‰<Ö”‘2™áF)Dò½ë2·™u´ŽÖ‰åZ#j¨5â;ÅN±4µ4µ45—F.\¤-EQEý²‡b>ËŸá ö$Nâ¤ø6ví4Úy¼åñ–Ç[¦_H¿~Áú¸õqëã’XTÜ¿eˆ®\×q×áø›l0Ù`²áˆöí#ÚÏ2že<«±¸Æâ‹E«< ¤4ðÏÊWÀv³Ýl7œá gŸ>-|Zœk{®í¹¶a‰a‰a‰h‹¶h‹»¸‹»R˜¬ ÈCL§Ê&XSeëšFë8Ÿ¾ÖoÀÛ)cööžÍùŒr~q|j¯,‘³0rÅ”‡Ú-Oäb/`¬@ÌÿçvÓí¦Ûͧ§§M‰›7%êvÕíªÛÛ±Û©;u§î ™Qà¿€¼ÒB†Ø€e˜J¦Ñêh½Lê³,ÖÓn®÷ìš•‡ÄÌZw¦ÏÖ]Å댗}¢ü•…ÊBeÅ’£À¯MÅrűl¿¸Â±r-y×è^»xÏ„œ~8Ÿ8ðÈŒ¤õjGHÊÇŒG/8Áºßû³SSjJR¼¥£¥cåé‡ÒåïKx—ð.ýykóÖæs€$â>¡XÁ“ Àÿ‘œñ&nšú I*ÛTã˜|}BN7>ÓéþÆ9wÇyží»¬×í·ú¯ŒÖ³N¬'%áàl¤ÄLßþ¶Qj_Èq“…¶l8ˆ5• M t<ãýç—ï”Äyæ¦ÈªÅOOu ¶ã<Ý5üæq‡ùâí–›¯×­*õàM³+Ì–¤ôN†ÕuCÔ=o×Þ®é“Áy’FÈ)Î3FFÌ›Ó/¨‹k=ieËe©Ž`&:Êoœø ƒ 2¶“íd’Ÿn;“v&íL²Ã²Ã²Ãö¿Ûÿnÿ;+5+5+5ÌÄL̤=´‡öH&ï×ð!ºI8êÈA¢Ùp6‚å ËJÓ:uôë-¼Ñ ÑÃ1å~7>1–ÐZB娕›û|îó¹Ï¯$_I¾’ÜiN§9¤ì.Bu¡ºPzÐû¯òí£…(Ä<Áååå’ÙI³“f']м yA3àdÀÉ)œcãØ8)›é è1=¦Çb…¥—¥—¥×þÍû7ïß|`É%–X-°Z`%QîÒ+zE¯†B~M–ŠIÀ)±l¶Y;F}ï¥Òaq_ò“’ò·SL}2×u°l(|£Ì ˜Cÿ»øBb>Œ`£¶m#*­œyoæ½®!#gœÕv)m£m(³kZÁ šŠ)¤ÀŸ€›¸)ÎrЋÕk/l·pÞ‡ë®{ÐûeÀ ÿú6fƒuU_l’cRYö €ðaý=©¼ î=Ñ=á O,–U’U’UªT!ˆÇUë_­_‹§}Ÿö½QC1]àGz hà³x4¬2þ ÄEߟüÉQˆâZÕ2ªY5SózͳÑÓ^E½v3{¶ì¦7[îÔØ^óó”ÂàB»â¦à8j£¾·Ïág¡DR™·á$.•V/½ÉSh9ÕÆ¡w‡>,z;)-§å´œžÆ={ç~ÇýŽûî ܸsWîÊ]©õ Rª¦ïëô²¥(Å ÌÀ TGuìU©§ROö‡GîU‘‡<µ¢ãcýÐâ×ů‹¥dU(BѰaäààÔŽÚQ;‘Ñ<É<É<Él±Ùb³Åw¯Ü½r÷Ê­g·žÝz†[¸…[|)_Ê—~gF.JÖ—¬/YP„"ôä瓟O~¾ªtU骒½—½—½W½õ:Ôë€b£XºJºÿ•ßH(Ù ­Ð v°ƒ‰`"˜:ž:ž:ž…*…*…*Ÿ+|®ð¹ëËú²¾¨†j¨¦Xl~ü÷Ká¤ã"Þ£Åo3?'ù¼ ø¨òÙŸØk ƒ#àŒ+hMU.[Ær©›4u¡ö‡32~ ؃=؃c8†Å)Å)Å)TŸê—L½x70u3QÐçD:NÇ¡‹s8ÇŸC€  SàÄ¿}KÌÄLdº™º™ºéé U“Oûv¹¢0½p*×yÔèÑüâ"žÊ~±¸ÜÅÝ/Œï ¢ÊüQ$²ÐðA<žT1¹Ò~”îm“bx}F£cCŽlWÙ¾áhå‹{ÑBæD.¨YrrÝ<é`Ì“°@³”:£îâÍŽ‡Ægä—¿ï}eoäñ¥–)±ç×ݪú,SØÀ’h9_ÅßÀ_"|,F J¢÷§¿S.úówüÇ옳;?úüèó£wDíˆÚ¥ÝZ»µv뀼€¼€<ÝÛº·uo‹Š-£e´LR…¿}ˆ 1 ð{Å^ÁÆpö²ö²nãÜeB— ýsŸ›?7ç9;pv ¯ëí·gW‚/|áËËñrØðÝ¿kMhB“úR_ê‹—x‰—ÆmŒÛ·ÑSÖSÖS~ÒâI‹'-žë>×}®Kµ©6Õæ*\…«|—F®®èŠ®ôš^ÓëwªïTß©ž¸uâÖ‰[ÅÅÅí£ÚGµ¢[t‹nñÀ$‡™ßÏ3ÓíѾ$´$´$çp笖Y-³Zö¹ÿçþŸûßlw³ÝÍvðƒü$¾üû¸ûŠÅægÀ­¸óHE-F.–|z[\Zï©ù»{ý Â²]%ÍKwsA/C}§Š+í¥{´CšŽÊ߹Ϩhõ©Úè$N¼}»÷í¾e5"jĴܽÅ{‹¯æx#œXá:®ã£B¼øƒYNáNñwü®sWç®Î]'o'oÇMoýßú½¸•›u:Y HÀZ¡¹Ðœ„ÌðHêáÇpöøˆÏ(†ŒçÁ#KÕødX³…ôŠ*Þ{øäÖÛµÝõ'jÆõ?çQ¼QñÚOÛ“}ÿÜå$Ãjåç«¿5ª¨m§Ovj–ºÂR­ÃÁ'no±9ÕãrG¶‹uÃÞ”&ðݸ‹Çxƒ÷øønu¾|Â'|ÂÀ¾œ/ç˱û±«óVç­Îç Ïž/¬1°ÆÀ»Íè6£Û ¾†¯ákDEPLu÷?±sü=(E)Ji$¤‘¥SK§–N5k:×tnO‹ž=ú+/P^ Uûžú=u“¹¥¹¥xxåΕ;Ÿ p7qåQ—¿û·ìø”x•x•x‰ª§Ãg‡ÏŸK”,(Yp-ûZöµìÒ+¥WJ¯Ð1:FÇ00á;{Fq›!ªàÉHF²HÔçççòÄã‰Çûöì?4ß`|ƒñb€)M£i4í+ü¿GwtGw¸Â®ÊEÊEÊEV­¬ZYµzçúÎõë ×®7\± «°Š—ãåx9…k®¿ú0‡¾ÌƒÕ ubʘ•Ùí®5XÀùÌcþï>Ý?¤ï¢7æ£Kz«h QNWÒ®š/™¿oüâ³Á6ý¢Í÷æ‘©À·)jµ„ZB-TGuT÷¨èQÑ£bÖÔ¬©YSWW[]mu5í"í"í"ÔAÔ¡†Ôþƒ"—»”6Sc¥*x€™bMÃzU’Íìg;ÊvBñ±”±ƒÞrž¿9úêm~>Ègc¯ö=>kK\OlšÐ¡uÀPIà‘ù‹Åú_Ê7=¥§ôT,·ŠnÝ*:C+C+CëøÊã+¯¬¢_E¿Š>,a KêFݨ›Ô÷é6#ÞU=ÔC=H 91'æ==zzôôÓ7Nß8ý|á…FHÍ'° ØÍT™*Ò¥Ô¡þ„DŸÅYÉ€uSuSuÓU^«¼Vy¥/L_˜¾Ðí€Û·¢w»‚ü½S8"xƒ7x#ºµD>‰|ùä¢ì¢ì¢lšÍ4›i64œ†ÓpzFÏè™´ýOMz¤GzbŒ‡n®n®nîÖZh°9asÂf‹;w,îHMÅ`Y~ü÷&wñ„ªb)…‚£üù™÷?9á1wAÒpÙ FúzÍÔoª”…¨†£aYš•ïz´J¤I¥Iš¨N­¨Ué2r$GÔ…&4¥ñü Øù*ð?ÁîpçœsÎQ€8¿u~ëüV·¢nEÝŠy1y1y1¯•^+½Vb{ض‡ßáwøŸbd>¡%¢É€÷âÉhÉ!é² ²²KÍ¼ØøÞ¥Ã–Y67®.9šWphó‚í#3í»>]é¼/¶X¥võâ·XÛÆ í±­$7¡Â÷B@©P É Íðï?ëÄ·Š” D ¶ã-yKÞ’ È€ Žn=ºõèÖSýNõ;ÕÏ`–Á,ƒY>j>j>jð„'®ú¸êcóåÞ˽—K <—çÒºÒ¥Q_êá=ÞÿnZRd‚*T¡ªÕA«ƒVëWÖ¯¬_}hþ¡ù‡æ7¼nxÝð:¸3wæÎßÔoa–aËfÙ,[LÏtrÝÉu'×=ªô¨Ò£J5§ÕœVsš]W»®v]¹×ãz¬kÅZý®§n‚&h"žöë Ö¬7ØHÓHÓHóÅÄ_L,ô-ô-ô•¶Á¢ÃŒ? ظ‚@Ü øN|D1J^~¨ûy J"KºÓkŒE_¡€†Ryý»‹TŸK“y,š úw?ZrS¿åoQÀð#Håçùydá-Þ~ù»"¸MÿÔšZSëÒ¼Ò¼Ò<ÝÝÝ’‹j,ª±èqÆãŒÇgûíw¶º¡ºá ÎàŒ”3ïçÁ|B±´=n‡Q8PSJ¼í£z((íû©™ÒѬú…ÂÙš‡Òo›œÒªRïѬ3?º·¤òðq«ˆ}üÄ<+¼Å'ç”%[€æ¨’/ªbþç£E(7¥H@ø9~ŽŸ[«¼Vy­òã…>^ØH»‘v#íæBs¡¹Àçò¹|.»Ì.³2g’oÇ1@tÉ¢,Ê*õ.õ.õ6õ5õ5õõyçóÎçR¤R¤RäF“&M.](ºPÄô™>ÓçÏø3þLR¼¾wåUv°ƒ¸=³õ±õ±õÑÙ£³GgÏÃ÷ß?|_X½°zauéí‡! aßýóTšVšVš†K¸„KùŸó?çÎwÌwÌw´Ì²Ì²ÌrmèÚе!F`F`*¦bª¤”ÿ{ˆ[\VI«’V%-á¤pR8ymüµñׯm-ÚZ´UjóÏñ\±¨(ð dÐs’Ò%ô[R=«•ΙXÒß¿ˆO˜Ôo`Ñ´ ný´Ñª¼ÚLÊ GoP‚xŸ) À€˜à£"«È*жÆzƒë ®78×"×"×"özìõØëjÕªÄ0 Ã0ŒÁŒQd ø X})yÀÿë?µ+u`Äa0qûÿ—31—c \Õž¤þï…¨|·Fk´fJL‰I£;ðêÀ«¯æ—Ë/—_n{Àö€íúÍô›é7“ßÑÚ@¾ ™©*Ç` ư@ÈÅtB#FŒ 8§tNéœÒ’%!KBÔ“Õ“Õ“Å[yÍÀ·)fKíL©³xf8°óÀÎ;ç¯Î_¿zxÅᇗq™{Á ^p„#¨ÐgúL¢½nãÚÆµkúôéöÙ{dï½gzÏôž¡:¡i“6i‹çN¿5/¨ u¡.¢óÕàyƒç žwzÒéI§' z<èñ ‰Ù±ˆEìä‰Wàgƒ CóÉN,{ÆÚ®2 ü°`\“>«KL&êõË/­>qUÿF}÷V”r7²AT㦀ÿâ¼k±V¬:n踡ãÎøŸñ?ã?öæØ›coŠõÒ²®€¹DS{°øŒhŽKè‚•Øœ%g˜ô¢N€à}oÀjð³5çuÍ&“û5EËŸÑêüð@}šú4õiëö¬Û³nÏ™þgúŸé¦¦V–¢K“4IStÆÉ%ÿ»•S¹äýïËËËR‘ŠTÄÅÅU-¬ZXUò?¦´‘6–‰Õ¹Ù&Wr%W±<«Â¬ ³*œ;qîĹÞ^Þ^Þ^¢=žæÑ<š‡ ¨€ ?Èc‹ªÑE~•ƒ*UЦ–\–ËrYÇŒŽ3¤Qò%_òýý#9ÏežË<—óuÎ×9_Çã¼Çyó’‰GÆdL&p+ À¿Gx#–¾²˜aðìUÂèÖ½V”¤L ê¯ÆùdÓaq ;ºHíïÓh2TŒ› ü&Dëct@±By®ò\å¹Ûõ·ëo×Ï6È6È6hTÔ¨¨Q¢hjOí©ýoÚløÿ£ @ž†½ùÿMt7À¤§°:Zÿ"—#r¨þ¢þäÃU=ȃ<Ärã“O6>™Ú>µ}jûSO <5°Æá‡k–Zn§í´½ìeþ3J0õ¢^ÔK´.ëééʼn;$ï}Þû¼÷›l>°¹Ôr2M–b(ð]¦”ú=H@D…R+C+C+cç‚ v.È É É ©Q§FuÄõŠ `Ø€pëRPA¢ÂôÕcTQg#ÎFœX1xÅàƒ•­”­”­ððmÑm…+i ¦`Š8’*L…©°íÊÛ•·+g¾É|“ùÆá¨ÃQ‡£R6b‘Á]Ÿ pÚð–<Ç %Èžj¿/øÔÿÓºb—GªNËŠ"jIïôN©oV‘Ò‰ÓÔƒƒâ㦀¿ ñxÔ…\ÈE$ùªž[=·z®ñã Æ¹?rä~~íùµç×Jî1™ÈD¦ä-ªÀ‚s"Ò°©@© ¨^ô€q`9x¿ 0SIDATÀJ' à€_™¸aÚ/׿ªb ÿD?]‘åÝ»q7¦Í´™vʸ”q)㎮8ºâèŠ Ê”+(÷oÚ¿iÿ¦*^*^*^b{¼À ¼ø[}ÄEuStÚ‰§xŠG?ôC?ÿ¶þmýÛ:Öu¬ëX7§ONŸœ>[nY¸e¡d7g«x­H.ü#At’1!2I?-}-}-}uêÕ=z=æzÌõ˜û÷ îˆë¯Ãëð:?”g¿1wé,ÌÂ,xÃÞ‰²DY¢ì¦ñMã›Æµj9Ôª•R+¥V aCæÅ¼˜—$ÿr +²"+q$-¼,¼,¼tè,ÐYp¯ó½Î÷:?O|žø Å/~øü©á§•%GKgÒ*ôEK(Ñ\r0°Ò0Qí %`X€Ö¨«ØT@ß„âÆˆY¬n°ºÁjÝkº×t¯euÈêÕá•ç+ÏWž˜Žé˜ÎƒxR ÛÀ'¹²p‘¶¶;'àl8„€mÛ ¼Œ› ¦^P,ÚìÛ­PæS¯iýcoå>a4Fc4¿Ëïò»"7KÌݘ»1wo.º¹èæ¢#Œh0¢ÅðÃ[ çíy{ÞžMgÓÙtXÃÖ¹WŽ=†ªQ5ªVZXZXZèâæâæâÖ®g»žíz¾6}múÚt“ß&¿M~>8|p -Ò"-~äØ\Ú"£Î2¶Œ-CUTEÕŠ£*Žª8JßIßIßé¦÷Mï›ÞOv?Ùýd·è±Ím¹-·ýǃƒó¼ïÀœ™3s~°ûÁî»ã_Æ¿ŒipÍàšÁµfg›mv–NÓi:Í=¸÷‚Vå@dA¢˜Å#‹GtÓuÓuÓïñ{üîûÜ÷¹¯È³Ä½¸÷R, ü>4ƒ5Œ ´e¶$CƵÊ! ;µç|r­ý9ŸfçëµgqµÍF‹ÍefÌ”æAJŠ|¢ (ðÿ :Ɉ‰9üáõMê›Ô7­z¹ê媗g›Ÿm~¶yK§–N-%BUÁKð¼þ‹ | ü>È;Òt‘{I7 p-l® g@ÖêÿwÃD¦ yBIEàðïû×?‘]¬î×¶_Û~msæ,ÌY¸?wîþ\³f;Ìv *¡Y’%Y~5›þŠ*b¦aš8®ÞA½ƒz‡µ×^\{1ÿSþ§üO#sGæŽÌ•. §p GMÔDÍ<|\ /îÅz±ÿkï¾ã¢¸ÖÿÎY–Þ;H•. н`¯¨±&kì-ÁÞ»ÆÞ5öÞ vE ˆRD•¦"(i»{~Ìæ^¼I¾77Wï/‘óöõò5޳Ãî™ÙáÌ™ç<Ï׊Yþ³ügùg¤e¤e¤MÔ˜¨1QCyí2™ˆLÐ Ñð ?‘Í©95‡´ åþ³ûÏî?ß|róÉÍ'·»Þîz»«S{§öNí1³1›Pj  z$ ¢QŽ(æ0‡yP¯ ^A½243434gŠfŠf*ƒjèizšžÊ3ñË÷Ÿ\ͲPËÂr¬æ˜ã=²™|É– Œ-¿üáÞšà–]/ÁFÐ#Wñ±]Є·Çýͤ™4S(áá{Ç÷Žï{®÷\ï¹^8záè…£¶Õ¶Õ¶ÕB %U¥ªT•·Øg"übºiÝ€Ï5úþsËð]Z]wþënTÚvÕYŧ´þg„tIHB’Ú0µajÃv¦íLÛ™öxÂã 'Ì[9o引†d+ÙJ¶BzÐûŒÕUÝáwÚŠ¶¢­„!çBÎ…œ‹?2þäÑУ¡GC ì ì ì”4u³Ç|ÙU-‹QŒbaQµ«jWÕ®6:mtz¸àႇ :úvôíè +XÁJ$IEÒ/ü¼nÒt¡ ]bBLˆ éKú’¾kÍÖš­5K|—ø.ñÝDƒ‰™A†0„ Ýt|‡ïðéGú‘~ÂÎï2¿Ëü.Oòžä=É:0t`¨À@´M´M´_$¸ÿ„„œÅ3„-t¡yåÔЇ1¶$2(ŽÉ–5™úpÎØÖ=§«»©ì­R^»|°3xãqÜGüáGâˆr¬.Ø5Ø5Ø5½Ez‹ô+ÍWš¯4Ö+‡íš£9šófû|t”¨xýë&.+`Kl﾿*…B¶Òë¬F_y8Ío«ÓÍ%©$•¤ ˾]}»úv½»õîÖ»[ïM¾7ùÞäV­Z(›t<OÇÿzŸêдUN6mÔ¶QÛFmoùÜò¹åõuÔ×Q_·ÛÔnS»MÊ-Òƒô 2 ÿóÝHüuW6É&ÙÂçµr±r±r ;v:ìtس°gaÏ,¯[^·¼®Ü²+éJºÖŸôµu³Ç4×|\óq151515çÎ9œsÐ:¬uXë0¼á oaæ’‚%l/=-=-=½Ëo—ß.¿ÈÌÈÌÈÌfWš]ivEù0ø€F;víØr¶œ-'nĸ}²î²Ðùþ?ãgvˆb‡T[¨¶Pm´/h_Ð>ccc›ëÙ׳¯gß«½W{¯–úSê/ľ+£ö5õð‹¢¨Åd1Y,$è4O6O6O¶êiÕÓªgQHQHQÈëM¯7½Þ„ ˜€ LÆdLöNKý5D±)l ›OxÂóQþ£üGùÉúÉúÉúÖÄšX“î:Ýuºë ñˆ§Y4‹fá0ã°Ð’ÅÅÅ–Û-·[n/\<¸xpvïìÞÙ½…Öc™,“e~±³&¸Ï‡\E&Ž Ëkgu>ÔXÁØRŸ‘Ö¬tñÁï³×L_Òÿ©sC åc}Büñ–·Ç) Ù„xŽp„£}ª}ª}êýö÷ÛßoCzCzCjqÕâªÅUè@:Ê.;/·ôÿ[@%¢ ôý?×ht€aipÆ&¬Í:ÐÈ; –áo!G =ûMd.™Kæ ËfÅfÅfÅgjÏÔž©{÷,îÙGC y¤Ür%YI”!4ÿÕ<:¯%ƒÉ`2XXÚdh“¡Mx8àá€óÎ8Àâ…Å ‹Ê-MˆÉ?ׇÑP˜À¤nhÇ€ÇxœTžTžT¾àõ‚× ^+£'éIêß4Js˜Ãœ£Çè1aE¿ð~áýÂS¬S¬S¬w­Ýµv×Zõ õ õ ü€ðƒhhhp…÷VõVõVMìŸØ?±ÿa£ÃF‡È÷ä{ò=nâ&n 7üÊÀýÇêvܧüÐl°kcKGŽl#/[4w„cAù÷ã{7n~Ó@çI ÈúÕÉû;b눭#¶ÆyÅyÅym[³mͶ5B¥=å¦Ñy‹ýEÔgà¢áÿº‰1€yßÀ¡èãó«ã? ÈÍ:«êÆÙ×wuKÝ 7È a¹Ïü>óûÌ;0vàÕŒ«W3”a3¤=iOÚ+÷ðŸÞèÖ Ôù@>²½ª½ª½jXlXlXlÌ«˜W1¯zæöÌ홫Üò¹D.)÷ ŒÓ×MÐM  h 5¨Y¦¾L}™ú£ÐG¡B{éôÒé¥#lCú>¤Oýt ÈrAˆz7|oøÞðý‰N':èÓ-¦[L·´m¡l•*+TVËïß¾KÞ•¼+y×’Ú%µK”iÉP2” å†úì“}…Þf—»Wh …[ÏÞjmTuS9ª;K}²ªr¦99…AhÇã”l`åãÔ¯ð¾jJ›Ò¦ÂìSzOïžÞ==D! Q¤ iCÚu%y³ýEÔÔYN¹Ps#tÈ'°d¬ÙÝr`ÿfðŒ¶X y¸„[áøýo • T¡ UVËj™ðïÚ0•0•0•èŠèŠè 3#3#3£‘#Fà[|‹o•…Ì®à ®üÇBçR(‘S€ˆ‚DA¢ ””›J›J›Êðêðêðê0µ0µ05CbH ëÌ:³ÎÊ=A2õ L`‚ø€âæâæâænjnjnjòxy¼<þÙÐgCŸ Å<Àåöõ!H¦.¢L]*£2*{gðÎàAä÷‘ßG~/M‘¦HSº‰»‰»‰UD*"‘l€l€l:£3:;4whîÐ\¶Y¶Y¶ùyÃç Ÿ7&ø*§óç®ÜŸ<'댸wJsp2¯f/—^¹¨êÝüÒa-Yø’>AÁ}ž¹\·Î¶Q1¥&d o7ŽSÉ„“p.d«piäÒȥѕ¤+IW’î¥ÞK½—Úðnû ïÂF0¢igÚ™7ÛßB)­B0ŒJÿݤc_8¸ <‹_MÛ'y€uuVñhxt,KÇ Ës<æx̹5øÖà[ƒ£G ŽÜþ‡ö?´ÿA¹eSÚ”6Ròý¡À•º£ûWÉU¢LÚË«—W/¯EŒ"Fqyäå‘—G:wî¨|¾B®“ëäú/­žMÌE.r…Om½Ùz³õæ;–w,ïX^Ú~iû¥íúOõŸê?UÆÁbPŸÏ[åì‹(D!Ên”Ý(»Q7moÚÞ´ˆŠˆŠˆrnáܹ…UŒ^¥WéÕí±Ûc·ÇÆeÆeÆe¶¨iQÓB9P ä¨á×îÏžˆ×õKÇÝs‘ɽӌ-k;òuEö¼QCõ™lÕÝÑþ#gøx8ú Û¨<¡ß‘dÞn'–î¸oྤiIÓ’¦mÚµiצ]’6’6’6ÊnŸ„ô·;¸u–µ€ ãcuB(h(Œ&¶€Q‰@wÔyí) !uÖ]Ëú8Ú&t‹á gòš¼&ʧO“‚&M Šÿ9þçøŸY²>d­•£•£•CÄDLÄÂxð¿ _©Û᪱LKMKMKχž=·Þ>Þ>Þ*MUšª4M4I4I4©º[u·ê®H[¤-ÒVæ¨æþ>êf)…Ðá®ªŠ°»F;€y[8à]…¹Aý@±h&`6€_"àëþýån_Ó†4Æc WqW?<þðøŒY³2f¹Ív›í6{ðÁ7ßBkH "AÊð•:c꿱çP„"”Σóè<Ú‡ö¡}‚*ƒ*ƒ*í·Ùo³ß!ŠEˆÎœ)8S@HI`,€a<Êjõéü–CN¨u@"‘è\ì\ì\¬½X{±öâg/ž½xöB+•Ç ™v°;°£ž^ „¡ T ‚>¢è#ŒÁŒ¹àzÁõ‚kmNmNmNÛÉm'·l˜g˜g˜g²Ôd©ÉRPPÐÜþ¹ýsû—Ô–Ô–Ô ÙfØev™]®××Vî¿A&â:V Ëæ:ZÕ˜|>(º:wÁ¬aû[õxtÀÒ‰Û|:@jÓŸÈp"B78ÁŠ·WŸQkjM­…eÛ+¶Wl¯\Ÿr}Êõ)7jnÔܨñêáÕë&c2&Ó´mÀ[ì‹QwÐâ!ˆþuwOØ3ö©€÷©ÝF$dèHÿ=Éêæ{ÙIvå8n§¢NEŠ¢k£k£k¯=¾öøÚc‡cÇ”Ù<(¡„þrƒSw|]H):šŽ¦£…ÕmDmDmD÷ß?|ÿðõ·×ß^ëâëâëâ«Ü›õ¢^¿±·úC(4‰L"“èWô+úÕF—.]’ç$ÏIžÓáA‡ )š¢©hŒhŒhL}ÈgÿGSbJLDH¥R©TºÅb‹Å‹'jOÔž¨ ž=xöàÙmŠÚµ)Šÿ þÁòšå5ËkDN"'‘“r»°ë£Ân\½ó߸Ç#…Âbõ*y¤b]áéªi5+TÐK¤+Àú±p=Wõ]ªSP‚jÔ²1¬1 o˜BŸ7=WOé@:,šE³ht@tp v v 6kdÖȬQŽ4Gš#M9•r*åJP‚…¿Â_áÏ m|1„g”•×äB*ɧ@õ 9BÀ¹Nðý}XÞô€\È`â´M= õY¿äs¥ÎØ6̳ÁdÙEvÝÜ}s÷ÍÝ·#oGÞŽ466Y²6d­(X, fsØ6å(GùGg (  *D…¨(V+V+Vë¥ë¥ë¥­[;¶V]K]K]ë誣«Ž®JKK£b*¦bE¶"[‘­üVÖ·06Bz¤ÛÄ6±Mf&f&f&6° ²æeÍËš÷"êEÔ‹(Ä 1ì ;ÃÎ|áùìÿ0–ÇòXu¤ŽÔ±¢¢¢¢¢âvðíàÛÁ²XY¬ì´´ÿÝV7ZÝhuY|I|I|æÕ7¯¾yÕ_x6KÖ“õd=Îâ,Îð–äþ¬Z,Äp¡ŠªÔF|LÅí^jpﮇ[²2è«Zv?¸Åé—ƒŒÚ]¤ùd&QŽUàF  o<®žjˆ†h(TKV,8¶àØ‚cñKâ—Ä/ùÖ÷[ßo•ß”ºÙ‘¹/˜ÐÉV¯³B(ü”ýÏ5*ë`l=Aá@Û×ÙÏC ç(o ”¾ÌqκIcH ‰–ܜܜܮ­¿¶þÚú˜ä˜ä˜äN=;õì¤Ì N“Ãä°ru§¢Ž&£‰r¬}jã©§6NHKHKHÛ;yï体Õ"Õ"Õ"QˆBb5Vÿòœ¹>i‰´DZp€Ç6Žmccc²W¾W¾W®*S•©Ê`3˜!ùÈç-öÑyûïñU¨B•¾ƒ¾ƒ¾ÛéÙ§gŸžpÏùžó½i×L®™\×}´íѶøzEõŠê­vhGÑDÑDÑD¨C½îÕ‚«þ»÷ûÈF¾PEµÊPV&·çZ1¨z.ä´]5ÅKÅ|£Ç%k$?«TŠâ•§l XØ7=W¿m£1£hDë=Ö{¬÷¸IN“œ&9Õ³ªgUϺcuÇêŽ&a&)áñGÌ_:a´¶€2o òÒ\:dÓ`Gw˜ý \·ÀþÞÐÁ „ ÿ,D@šø%Ú^òŵÂfXSÖ”5²m¤§¤§¤§œœsrÎÉ9â â â ÁµÁµÁµZ¡Z¡Z¡ì5{Í^ãŽá˜ðýÂ<Ø.¶‹íòéáÓçGï¸Þq½ãJ'•N*´#tGèŽÐêÕ-ª[$’D’0 ³0«^+í`;¶ícû d8T;T;TëNÓ¦;í•Î+W:5*5*5*´ íB» š¡ÿš+ ^0€m@P‡Â.…] }îÝ)ºÓNüFüFÅTÜYÜ#Þ¯{¿.ïHΚœ5Y7Žp7úÜc»Çvíö§íOÛŸ¦o¡o¡o!d­ù(9ŸmR']¦Ö-­[Z·Ž¤I9’±4biÄR[[[eS’@X/JÕýŒ:ÐÑ#zDn èe;üŠÊU•«¢"Ÿ¶>m›ä °`צåÞ{ l‘<3yæ‹GkÌÖ˜mÖÿFÿ:ý­^Z½¤w•/ËG>xº‚zí¿œú…äG©|ÂA9ŠZÔ~·ÛÜŸöߌHEЉÙ‰P0†ï}*WUå! “Qì9sÒÈ‘ŒP])§:^e&–¸WA‡7=Wã1“1™QXÁ ÇõVè­([‘³9gó…‚œ™93Ù’wï2â­Q€,bOØŸzš³‚û}u»?QÀäÀ/}{Q0”ÀvÀ‰!0ŶùÀqk¸Q'ä†lœösý £Ê§3Oø¾œÄIœdÚL›i³l#ÛxpçÁ7·0naܦõÒÖK[Ïê\Ô¹¨Ë˰ÆaÃÆ8v⸾FÆ>”}(ûPfTFTFTu§îÔ]Q®(W”+§òØb¡……Ö0€ \L]L]L%n7‰[ŒsŒsŒsIRIRIîáîá4N gÖßšpõn?Ú  Ú’BR0ó0313YK` ì+öûJHŸ#É”dJ2MMM}Úù´ói׺¤uIëÇ,Ç,Ç,­¾Z}µúÒ¶´-ñJwNwÎtÞãyiÅÆŠñÕO÷>Ý»gŸn®n®n®ÑwFßUØUÕVÕ²ë0‚½†R”²Wü·C}ö)*½MÀO¸/,–ÙT¿ª=…šÚë2M:´#Å(b[ðÜh|P»ôÉ~"Çý©BùCLÛÔvªíT#ó_ã¿&hHžsžsÞ¨@%|9 P@ŒI#Òˆud`¯Ž÷¿$L9º×"ïb8…V0дF†@?Ø)“ÿ¹Káâ,k @™£FYk´ú/øùëv§Z¡Z‘t’NÒñ/ñ’”‘2R¦â©â©â™3&gLÎÄ}¹ûr÷Ý ‡Šgººw÷3:gtNwFSIS‰Oà“¢'EOZ4;hvp1™AfÁ¬ëÃz*§Ö‡`?Bè&ê@:BI¸†ï¾køNe¶Êl•ÙÏ«ŸW?¯Æe\Æe¬À ¬Àø?þ-?©pÜ…Ä£7p7¨>Õ§úXõX¯¸«¸«¸+ÔÙ69ˆDî–î–î–Í£šG5ò¼áyÃó†gÏþžýuWê®Ô]ù¡Û‡nºå{å{å{]uþÕùQ_G}eê‘êñôë7Ò7ÒWÓ½xPq–¨KÔ7Ž"£HÈsÓ‘¦#»~ocóºgyßò¾¯Þ‘ad&3Á¸Þ•ýâ”§çÿ]ÉÎ#» Ÿªj]ã-û¶F&Û$zFš“žè‡Gxf\(m¥È››«§„îÅ1ƒ:jQ« ŠE¸Û¾ëû®ÏZk^k^c.÷—û‹“ ö"[ËÖâ}Ý©K÷›„»:¿ºÙ@ ÀLâ¸c4 ¦#ôË€%VðóU8fy~@€0ý žÒ”gñ?ÿþ\4¡ M8ÃÎp‚œàG8 Ëd™F¦a*¦b*Æc<Æ“9d™Ã옳cÓØ46 Ѐ†Ðì£q£úFud´šÚÄ÷6¡6¡ O O íøÄŸšï¾*|Õ£³yò&¼?‰þè“T•ªRU!ƹ0悽؋½CÂðð¨ÞwÃÆl.›Ëæ ÇÈÝÛÝÛÝ[ä(r9¦–¦–¦– ™òéVº•nU* …ƒÏ%Œ^7ES4EôA²l'Û‰6Ñ&ÚŠE€" î¹¤Å´˜³žk=×znóƒÍ6?ØR­¥ZK5k-k-k-SSS‡š5;jv<Ÿñ|Æó·ßn|»ñÝÚ»µwkã|ã|ã|‹îÝ/ºåXŽ,À#H !ß<Úðhƒì0~]Cº†ØÿjÞWóúIû¶ëÛîCŸu-×µ\k Ox’pÈ c2e¸Ï‘_Ï|‚I6¢Fäñ•'°á,®y•u#c¯ËÕßÜéøZ3CµBåG‘Ê6ÑÞ±ÓÏÛFŠv®8*í4¹ŠLe]`‹!üpÜï|+ùX;÷ Ï!zu¯¹N0!ZHàÊ@8x´Î6B¶øé xTg½0þ¬øÃïæŸõ…å5Xƒ5ä ¹B®HI"‘Œd$ ™a„VÈ ÙÐíÓî¤ÝI»“Ñ£ FLƒMƒMƒÍΚ5;këiëiµÎª‡U·A•´’ùÉw»ïö Q:!:!¾ë+ÞT¼yùþzåõÊ™ÝããíÇÿÿsL“·Þ>(8ò¥!iH’Cä9$”QcwÙ]vWò¥v¤„¢KDƒh° VÁ*ŒZµ6j½·ÁÞ{hjkjkj‡T‡T‡T¿8þâø‹ãÔ€PÅKÅKÅ˿Ч¨û”FúÐ'^Ä‹x‘ïÈwä;E{E{E{eÌzj³Ôf©Íò9èsÐç ×N¯^;ýŒüŒüŒ\-]-]-Õ{¨÷Pï£8Š£¹7soæÞ| ÿ@ÿ~|e|e|åƒãŽ?8þ6ümøÛðßx;oèšË^²—¬‚½b¯Ø*•H•HZ*O”'*N»t=èòr{ðöàí=>è}ЫÊ''×éeôËè—äGò#9Ä:²ŽŒ'0¨w>ňûD\b±@K«6Ô¦}¸V»AÖEç€ä”8 Ï` £gÒ( ¯–ÊÕoªPA j@0Ó¡I ˆn!©xÊ̘¾Åj¬FY-y÷û3êž7C_ÆÔÙØ"€Ÿö@È$Ø{èÀ½vÀ/ýs-5 E8=[ÿÙ1—(§ìÂ(„d’L’I"I$‰$Ÿä“|<Á<‘ÛÊmå¶l›Áf(‡­à‡>ÃìÁÕ6ªmTÛ¨MS›¦6Í2Þ2Þ2Þòå!ËCV•V•V•V¬6Xm09nrÜ丮LW¦+Ók¢×D¯‰Þ ½z+tGëŽÖ­x£x#›![#[£qáAЃ ›'²OfŸ,Xl0Î`\á;¶m«.±ogßι|ÐôAÓWõJë–Ö-¾×‹s/Îe®~0ðÁÀ–<,yX’]#­‘ÖH™ócÊ"WÔ˜ScÀPÖ9öƒü”uªP…ª¿ýØ<#A$ˆ±l'ÛépÂá„à ý¡úCõ‡>—?—?—N/œ^8»° »X/Ö‹õ–þ?¿s!èEHÚЈœ 'È ÚŸö§ýåáòpy8 gáLÙ±–È$2‰¬a~Ãü†ùm3Úf´Íð2ó2ó2s8âpÄሉµ‰µ‰uqËâ–Å-óå/Ê_ôøÈã#ÜytçÑG)v)v)v¯{½îõºWÝ·@ÑF´ófÞÌ›…°"œÛ {…½Â ð„-e[e[[É2€LKÝ–º-m÷-É-I¸Ã ½AzƒZ÷©èSѧb½d½d½&N†“álÀó:øE¯þø#îTDT©19ZYéxJçß>6âV—›Á†k´{d;™³©Õ}‹äðÉ—S´ä#îÇqÿ_ÔYÑ{ÿsoKdü*°"0˜î¯€)†>ièâ ¾‚ ñC{x vâ Ó bÒ†JÜÅÝ—Ië'­Ÿ´~2\g¸ÎpÁ>ƒ}û ‡3fõÀêÕ‹,>XæXæXæX%Y%Y%i•i•i•‰ŸŠŸŠŸªº¨º¨º¨¥ª¥ª¥*:):):í,ÚY´³àZÁµ‚kïæ¾›ûnîÛ¾oû¾í›{<÷x–ÅË™/g¾]êÔÒ©eŠWqTqTy§²¯Ë¾ÖìÿÌÿ™£Dõ°êá{} }©Zn6n66“¥ ¥ µ(ó-ó-ó­ô©ô©ôy6ïÙ¼gó¢h<Þõx×ã]™a™a™a] º|\ ÜþðnZpqPÈáͲ†¬!Îã<Î4úû×'†bÑ2Ñ2Ñ2ù ù ù‰!Ò!Ò!Òyóçkz¬é±¦‹[,n±¸…Pï™91'椌tÿߨ۞ÍÑÍ•Ù÷CŠPÖŽµcíÐ >N¤¨µNkÖ:§FNœù]÷»îw½e»–íZ¶k0¥Á”S4+5+5+E¢ QEÚÙ´³igSTSTSTccc£&EMŠšôîлCï}ôNæ`æˆJD%¢!XˆeGÙщþŸ7r´m@Ï+ňûv·q } (Ö®\=§|eMZ­jÉ·„B̆°$“ ÍîêYˆÔB…òæ3¢9ŽãþW„.»è²‘Ÿ#ëÀ°fXM â‡òtÔ×ä)1êw‚A6ûäŠõ©ßÊCØšõ` Tö°`»°¯ÎÞƽ_5¶hlÑØnÖĬ‰™¯ù$óIæ“,v[ì¶ØmÑÊ¢•E+£mFÛŒ¶‰ŒDF"Óæ¦ÍM››3g6N:M:M:­¦mMÛš¶µWj¯Ô^©Í¨Í¨Í¨W;¯v^®^®^®^î¸Üq¹ãrUsUsUsOåžÊ=•'Êå‰J.•\*¹ô~ÿûýï÷YYYVXVXVXÖýøn?º¦îîª j²j² T2#2#Rc‹7oP1*:\tx\Pà _8ú¸Ä¸Ä¸,õ¿àÁÿ‚Sc§ÆN=§xNñœÒ,­YZ³´Ê•;*w¤g¥g¥g¥ÞK½—z/azÂô„é±§cOǞγɳɳQöÍú¢/ú ?]¨½J‡Óát¸BG¡£ÐaÇÙqv\™ý¯œ'df`†â”â”ââ‡8ÇÙŽ³g]¢KtŸy=ózæ%LW¥3éL:Sî/÷—ûöwU70i7vc7%”P‚,d!K±H±H±#1#…ÍU*U*U*}Ý|Ý|ÝšD6‰léUíUíUí>Õ}ªûT­6Zm´ÚT˜W˜W˜Ühy£å–QjQjQjO‚ž= Êyžó<çùGïAÈ3@H aCVͪYµ|¥|¥|¥ò½ýñ#+‚"E¶"[‘M숱KÒNÒNÒ¾wðÞÁ{ûxôñèãØ6°m`ÛõG×]”5bX#ex°ï^|ŠŽ»váñE6–ͨi&—VT_­ „˜&“-€¼œÝµ4Ò6‘…7ja#h@»ìÇqŸ…÷à ^ð‚+\á 7¸ÁM*L‚I°Ð#ãÈ82ß¡ß)+†(³r€•3Ñ6gÀÀèt~Øò^õþ˜ôgëtoj”Œ5}$Ö —$£ª»ÕT¿+Û!›ÞFÍîµÝ«Î1ÆÓŒ§iéK¿“~§¥)—ÆKã5·kn×Ü®¹Hs‘æ¢*¿*¿*¿âââÂÓ…§ O§œJ9•rê}Êû”÷)Ù³f?ÌÖËÖËÖËÝ—»/w_ö€ìÙJªKªKª«5ª5ª5dýdýdý”Ÿw@YJ TV‰…PE•N èæÇüXç|q¾X1-ù¨Òa¤v-ÈfÀûÕÑÑïhD÷=Ú÷hߣ}-6Zì§ã§ã§ÓèZ£k®9':':'Úl°Ù`³¡Éµ&ך\ëÕ¿Wÿ^ý r r r²¥ÙÒliT¯¨^Q½¢ý£ý£ýóÜóÜóÜKÄ%âqÝžõ¥¾ÔWH[ÉÜ™;sBMpgpFè"ÿFRÉò„Ëó¡ûëø`aYN–“多T“jE°"X\÷ê|¯ó½Î÷¶Cm‡ÚmÛ:·u®[ÿ¶þm-Ò-Ò-ÒM&šL4™X£Q£Q£‘™˜™˜™xÏëž×=¯ÈŠÈŠÈŠè³Ñg£Ï¾mý¶õÛÖÝz=!OÈr„!Gî w…;&b"&²ì{ð» CÿøÍXÝ“£9š£¹vóøÖã[omÕ6ªmT—í]¶wÙ~fá™…gfågågå ]|–Ì’Y2¿øÕŸ¢œ6Ô Vq¦¶d³,GñŠM¹¼s¨]GÛ®½\ÇØ|…ìgù³Ôêü^ů\569·Ÿ! ËÙiôÁ”¡FY„ã8Žû}uÇ턼+;°;H‰ ä:¹N®ã.îâ.~ÂOøI¡¥ÐRh¡Ú¡ÝÚ½/iF|Oÿh|Ò¸‹ñ)ã.ær+…¹Üx‘Ž›qO {ƒ=ÖýŒ¿s®R‹T–Œùy¶÷DŸÃ+žë=S[d\‘ò¤Ñ†6Ò™RWÓsv ì Ô/s-sÍùîñ»Çï¿Í‘;#wÆ›Ü7¹oró¬ò¬ò¬Þ˜½1{cöÖì­Ù[³¼‚¼‚¼‚W+^­xµ¢¦sMçšÎ¨5b ÒšCsˆŒÈˆŒM`ØÖ’µd-…Ü ¬)kÊšâ0c—GL‘AhD¼ˆ\q7Q w¸£†Mf“a‰X@,ɲ gض“-aKØoÔùÖýN÷;Ýï܈q#n7ÝnºÝô²÷²÷²÷ŒòŒòŒÒ Ó Ó ¢Þ+++ÓµÒµÒµâÇ=Ž{ütËÓ-O·$ÞI¼“x'oeÞʼ•¿q,¤ù‘üH~dØ#öˆ%²D–ˆýØýÿû0Hi â–â–â–S±S±Sñ¾Š}û*Þ]xwáÝ…¾!}Cú¾“¾“¾“u¢NÔY%«d6ç}ÝO§ ]èM¢I4ÉZ²–¬eÙAv]f—ÙGµƒU^ª¼Tyémïmïmï£æ£æ£æŸíŸíŸí¶Ým»Ûvñ3ñ3ñ3Òt#ÝÞ„¿ ———?:~tüèlY¶,û7nè z‚žŠI±9l›ƒÃ8ŒÃŸñ(O„[ë—ä%yI†‘adØÜ¹sçÎ;0`þÀüýUû«öW­)\S¸¦Ü%wÉ]6” eC‘‹\ä~±E¯8寂ODň’5²2E1ûþÐæ~ý[E~âkæ¤d³A™â¢§e=\Žmþù\eÕtÙ:ùA,A|0gþùp•ã8Žû h€â>@d$ɬ!kΰÿî¥t]GשժժÕjÜи¡qü•y+óV¶ílÛÙ¶³žl=Ùz²õ8ëqÖãŒòòòuÃuÃuÃuïëFéÞ7¸kipW#]:Yã¤l´ì ;ð.¿`ö ÿØÖ1!ëÞ[kXËfÈ{–¿«àÅûYïœÜÿºëë…£Ÿ~>X»EÎO9?¥,Û[¶·Ü¡4µ4µ4µ\T.*áŽáØï¾[wêNÝ?ê¤ •³Ãì0nán!©ÎŸ$ AÈEóÉ‚LêŽì~ýÏ?B]La”WñJñJñê£Cd¥a¥aejajajá^ä^ä^ÔôiÓ§MŸzÞö¼íyÛàŽÁƒ;† >,ÿ¡ü‡ò^vÙýe÷Ìî™Ý3»Ç®ˆ]»"zFôŒèyòå=ªŠ©Š©ŠùèME’HIÞ7ä ÃÆ°1LÁLjT£Z9Öû9Âl¤B*$ÇTˆb…8@5@5@u£ûF÷îk#ÖF¬ë>Ö}¬»2çŒð®„)¹\Ý*¤îp‡;™Afô{ú=ý^þRþRþÑ$WÉÉɇB‡B‡Â¶{Úîi»Ç{÷ï=víÛ5¶Øo±ßbqPqPqPÁö‚íÛSæ¤ÌI™s§óÎw:'~Hüø!·Un«ÜV؇}¿{)ë\Æe\f­X+ÖJ¸1Æ)œÂ)£Åÿûp&º”.¥Ksss=u=u=u7EmŠÚUEªHùvÝ·ë¾]÷|÷óÝÏwÓ@„›+~Éü²‘OµÑbK¾’Ïc~ìôz­.KüNL-j9ÉC†Å…ãëš²+7 ß‘ðÓ¢W‹Ë´>,"ýp‹ÙôSÖá8Žã~Ÿ¬`Šä ÈV©Ô@ï‰f¸f¸¤¿ö5ík>— .NÖÔÔ÷hp°ÁÁ-ƒ-ƒ-ƒmŠlŠlŠŒÇ1#m-m-m-^#^#^£š©š©š©æ¦æ¦æVõ¨êQÕ£‚U« V½kù®å»–olÞØ¼±yööjÞ‚×µ¯ß¿5Ì?Pàðr±Ï]ïmiÞ1v1öНJÕKOk{Ûzû¨õˆ00©p{bþÄ\1í÷>„H,‹Ä88Á$LÂ$Ì€0VÌŠY±0R®Ì³ñ׉ù®ûNDAD¤DJ¤$ŠD‘(Ò‘t$å¯å¯å¯ýRƒµk Özž÷<ïyÞ7Ð7Ð7Ð)Ó)Ó)Ó5Ö5Ö5Öè•Ñ+£Weee•—+/W^~>ÿùüçóïÝ/º_”¸*qU⪌!C2†¼£ï軋@ÙÀ6BM!o–` –0cfÌŒ•“bÿûQa!›~?ôC?a²éDÑDÑDQH‡!ŽjÕ<ª¹ªhUѪ"bClˆ û‘ýÈ~üC-é8#ʸ€ ¸ |NRËjÙGÏáÕߨ¿Qãâïâïâï=È{÷ V=ZõhÕÃá©ÃS‡§šK5—j.—‹ËÅåB~›$i’4IúHÿ‘þ#ýˆ%K"–¼ |ø6ð7ÎÆÕ¢Õ¢Õ 3…™ÂLY (øK¤õÚ*$MHÒ„…²Pº(pQà¢Àþ)ýSú§ìf»Ùn¶!cCƆ á9›òWÈ3ÃÇÝ¿PŸ¢Ž©pQÝ‚<V¼W|èZ}"v}ŬØœVó•ŠéMR¿¨¶ÿ-#ö¢7Z(ƒ'9Žã¸ßAš“æðc9,…æ=Í{ªd¹÷wï/õ§!4D1ªý°öþjòU“¯z¯Ò™¥3K£—F•F•T^ãQãQãQSSSSSS[[[•R•R•’}&ûLö™,Ã,Ã,ÃÜ˹—s/ç8ç8ç8¿iý¦õ›Ö…c ÇŽ)¶)¶)¶Éo–ß,¿2†_’ù¶Å;Ì}u27CÜP£™†¶R:˜ê<~ûømY¶s¶3–’½d/ÙAòH‚˜ÓÂNÌÅ\ÌeÛØ6¶M¾F¾F¾F7üwÍÿ:Ó4ë¾9ä³2VÆÊ˜scnp \ƒähM¢…úšŒ1ÆØûïg¼ŸŽp„#<"<"Šw'+È ²‚^ èÜÃ=ÜÊ-)Ëß‹0öoC a…Õ 5j,ÔH:št4éèÌQ3GÍ¥üìnĸ}ôZŽû=´!1C’°Ü·Êµ³ÍeÙñ…O‡Ÿ’Û,2þ¸ºÙÑ0—Þ‘ ¯Z½SžQMÈ!Ò˜·ÇqÜÿJ0ärÑíµk¿Þ²,tYho½¶¡mCÍÏØö¶ííÐJœ'ÎSéôìz#6b#B§Ð)"‰H"’ÐN´íDv“Ýd7®à ®À6°Vno¨ÐÆ´1zÑ@ˆ¾´5mÞô{ú=b?öÃX¹¥ð¡|4Ž+‡XkbM÷Óýt?u¢NÔé÷^ªÙP³¡fÃæ]šwiÞ%(.(.(n³ãfÇÍŽ·NÞ:yëdÂÍ„› 7ÜÜÜbGÅŽŠuÌõ˜ë1×iYÓ²¦euÏêžÕ=˲ȲȲèwß› L`B£i4¦8c&`‚òÅCLf’™d¦°Â?Î?Î?.¢ID“ˆ&§ÂN… ÓUÑUÑUn/©'õ¤ž4Œ†Ñ0eõ_“A™ÏŸ>#‚:uê¼=s{æǫ̈´¨´¨´„Ý »v'X'X'X_Ò½¤{Iw æ.èv®Û¹nçLLL~÷;²†®¡k¨U£ju;¸_HçU jP£b*¦baZ¶»Ä]â.¹'¾'¾'¾šz5õjª]»v=”a…£Éqÿæê´É¿Lòh9Îúб¼z÷‚.Ãæ×V.œ7|8Û½Ä0¨Ù¨Y¾ÑN”ß&U'‹x»qÇýÁ†ž°()•”Ò†ZŽZŽ€Î#€(W”ûñæ4ˆÑ ªI5©&9H’ƒ¤iGÚ!™ÈTNúœŠ©˜ŠŽèˆŽÊpî϶°H‹XÄ’‘d$I[ÑV´Õ¯7—DJ"%‘6 mÚ4ìy¯ç½ž÷½\ôrÑËóçΟ;î碟‹~.JïšÞ5½kâŠÄ‰+η=ßö|ÛMS7MÝ4589898Ùc¥ÇJ•ÒåÒåÒå¿Þ¿Ç†–ÒRZJº‘n¤;Í¢Yô%faÆŒÜ?rÿÈM<>ðxóüKó/Í?LÑGô¡È^d/²ÿõÞTUUíììB>„|ù°+jWÔ®¨ð‡áæïOߟ¾ÿAõƒêÕ—4.i\ÒXriÉ¥%—‚‚‚Me¦2ÓßÈñ"äÂ'[ÉV²U9š>c1VH›øËFun–¾$?àü@“Çä1íF»Ñnó»Ìï2¿KêÂÔ…© §Ÿ>~úxtAt¡Ô€`†ð2—Üÿ4Á>Ì–]×ÝÐm_©5O>tyÍæÑÃR[Ñ-$h.iÓÑS97\å!Fx»qÇýauôS ÇÈCòTc–açG£Œ_j'æKU÷Øå!yô1}LÓZBK~ïEÚǵko~ªù©æ§¦8Lq˜â°uÞÖy[çÝùñÎw~LÓOÓOÓïß-¾Û}Íûš÷5Oã4Nã»îßuÿ®{ˇ-¶|h®m®m®ýë=“’@Â…åe_-ûjù“ç’ç’«¿éøMÇ¡͑Ӛ®5]k†÷@ïÞœpnÀ¹mg¶Ùvæ®û]÷»îñqñqñqI/’^$½83öÌØ3c®X¸báŠîÓºOë>M?F?F?æ7>ØvlÇvÑÑÑ2…L!S` XüF[ÕÔœšSsaÙýû÷7áÃ'†O¼~ëú­ë·ìíí± ˰ŒT‘*R¥œcÀ}A>Ùád3p±oW”«UªÊ/±TÖ€Rl&çP!êF¿Ók >]m^9ޤ€õ¼ÇqÜÿA 1jQ‹Jat‘ š€ýl8ŽÖ˜5fƒ•[Ê!ÿÇÔÀ¿f%Nî÷Ôi3˜)˜‚)˜r l! QHÂH ÃiœÆiæÂ\˜Ké ÒA¥ƒîãŸTÍUÍUÍ{:ötìéÈ™#k´«Ñ®F»66llhqÎâœÅ9§T§T§ÔÁŒÁÈpÌpÌpLß¾!}Cò½ä{É÷ÊÊRžÌy2牶t­t­zK³.f]ôËßY½³zõüÕœWs²w¸d¹d¹^ìð}‡ïžzæ{æ{º¸¸è:è:è:Tίœ_9¿pYá²ÂeW;^íxµãíäÛÉ·“…*F¯B_…¾ U~ÒõXõ˜‚)˜"d‚º›¬ˆ±"ù!ù!ù¡ªþº­ê¡®êkÅkÅkbOì‰}²Y²Y²Ù½%÷–Ü[Òר¯Q_£@Ç@Ç@ÇusÖÍY7G9yZ jPãuU¿$Ÿn$f,üàŒˆEšÚÑ[ú:gûŒ­îêžQ_¢6D¬¢á¦¶êÇ÷CS†Ì8?9ÒY4< }åçYŽÓx‚L~08Žã8î‘@‰rjé|ÌÇ|2‘L$iÚƒößßßøhû«¸Š«Z¥Z¥Z¥.W]®º\meÓʦ•›ª›ª›ªõLë™Ö3­c¬c¬c*s*s>x½xQúcÖܬ¹q×_6}ÙtýCc™±Ìå'v‘]ÄÙ‚… S6]ÙtåÊr§ñNã›;U>¨|Pšù¢ðEáËËOß<}óôÍý;úwô¨>P} Z„"i0 ¦!¼RFÊHÙH6’ […­Âã1ã•™é…?Üï CÈ2„å°–ã¢æ¢æ¢¶Óc§ÇNê˜ê˜ê˜QÙ£²Geg.Î\œ¹˜l![È¡Œo7îcƒá ;á^X¥ u#Û]7º—©bÊ¢°][é2JýdÖÀ†m£”§6V#aŠNõ»á8Žã8î¿PwZÈfS‚”ÐytGGÐtÄtΡsè;;»Ás϶zlõÜîðüÃó‡UïÎÚµhaè’Ð% §öšÓkN¯Vƒ¬Y úÝŸµŽ®£ë„(mCýÊÿå‡ñ„fb&f Ué º‚®˜'''MižÒ<¥ù,×Y®³\•§Æ-r‹ÜB4@ÞÎÜǺÁ –ÊåxLEÏ«#‡t<ÃØÇ á¬r¹ipè-éˆf÷«­Ý¢yÊSÊ{0“7ÇqÇ}Âä㡊¡Bi¡ Ïïå´}+ú–ž¶lnÙܦ_‡¯:|åºjMÄšˆ›»w½~{aÁ‚M¯ÇEŽ‹tÝêÜݹ»¶á¯÷@RI*I%kȲFY\iFat ~@>º€.  „essó;>w|îø\ÛvmÛµm]º:tUnÙ•v¥]y‹qk[˜Bˆ…ÇÌú;·q`²¥ãFvalIqÐÛxýq[zM4Z¡ñAÒC…„á%ŽòÆã8Žã¸ÿ‘ºÓ:…” }hÚG´F´F´MÑô— ·n&ý4é'íþþêÏü~ ñ×ÖMX§9È$ß$“‰ñÃ{•S*§DQä9BŽ(«ºþúgqŸŠðŒ¥z YGÖ‘uÂê…]v]Øõ‰É“'&Ó¦L *Ú’Óä49¯ñ5¾æãîÜ/Áúø ß T!ÝàÑur“çL¾,5¸›B¶ØcÄ™ŒÊ)÷úMµÙªÛ@ú@x5%úˆáÇqÇqÿÔ ³Ñ….t p›ì$;ÉAÕŪ‹©ŽOwŸîª²¦¤)QÓnº¡éµ"ŸDŸDµ%ªVªVä¦b*¢ºAã7öÉ}î8‰L"“0Ã1\(­{ÇëŽ×¯›Ën.»¹Ì6×6×6W(†EH àyf¸_8ÂÚd°LX1ÿtÛÑ(c+4B|kï,0¼Ë»¿ß38Ø5×è­®²²]Fº¢Œ7ÇqÇqÜ@xš!Ô…*3æ?ÿtþÓ¤KI—’.ÍÚ:k묭ÂzâJ\‰ëG¯åþ†>Ýã’T¡–$“o(¬x‹ò9•AéO2…‰b“vc‰DU¤é¨zE¥³òUÓÑ‚xðÃÀqÇq *PùÇxy !¥Ýh7ô¡ÞÔ½”w£ÝÐGøßßx÷¿!¤w¬@*躅nf2œéy¦ç™ž…§ Ož xð&à}GûŽöYËcy$ŽÄ‘8ž’ƒ³NËÈ"¢,ŽÝ_Ï­‹m#övu³ÑÛʦ̵ÿÆŽ±Õ¦£çu´°onî(l#šBî’^üËÎqÇq÷'­Æj¬¦SmªMµçµŸ×~^ûÔ•©+SWΘ5cÖŒY˜ˆ‰˜H¨5B‚Ä›ƒh<¹Mº Ëí4XhšÎØÊˆQóË=æ.þf»µêÊèÆƒŒÜÓ ¶¡Èd¢ M¨þ2¥•ã8Žã8ŽûOQ}ªOõ…e·n/Ü^„KÃ¥áÒ‹o,¾±Ø¾Æ¾Æ¾#1#I))%¥<Þýoy”?ñþvàž ‹\k+äþŠ—Õµ›E3è}ÒíÙZöÖàš†…Úåöí°]ÔxÇã8Žã8îOêª* …ÄŽØ»»»»ðgáÏŸ™t1ébÒeð´ÁÓOÃ>ìÃ>Í¢Y´²®ªbÞûûøÄw¶ 1,UX®ØXÓ¬ötÉ™ªF5Ž*‡h(.0‘ñi¼z#ˆ@@˜?ÛƒKÐæwŽã8Žã¸?¥nÌz34C3tDGtõˆûnÄ!MX¬XV{FV[º½újÍ"Ñ5ò3é‹Zv˜‰Ò¥ïÕ"!c^ØŒ‹Ð‚*XÃqÇq÷§‰ ‚ˆY1+f%dpÏèÑ;£÷–7ZÞhidkdkd;Àa€ÃÜÆm܆%,a‰¾è‹¾<‰çßŧq_Æî bPÐò Õ³dã #*IÍEBEÈjˆ=ÑÚ75ÞÀÐÂjD úЀ?ÇqÇq’0î.Œ¦Ûb#?'?'?w.ý\ú¹ôüEù‹òµ¾Ûúnë»î'ÜO¸Ÿ`Á,˜SsjNÍÁÀÀxþõ}ê÷y¸xÔBEiëjQMzáîÊÕV¨¤nt7î³£Lf0\£R²žÎ']Q(ŸœÊqÇq÷ PPPE–"K‘Eº“î¤{ryryrùýÄû‰÷¿5þÖøÛA‚Ñö´=mÏö±}l–a–ñºª‡ÃûI±CH@¢=<ª÷Èýúe÷«[ÖæBBv?E,û™é¾Õ¨T›)2$k© äP€ñwŽã8Žã¸O@؃=؃îèŽî8‚#8r2îdÜɸi´@Ú®G»ízx¸{¸{¸³1l CI"Iä÷×÷©ï«Öã>RD7ÉH"A> ¤xD•}%•Óùr_Å6Vl|Dj¯>D´€¶#¥ÊWi@ÌcÜ9Žã8Žã> ¨@……²PŠoð ¾I,O,O,¿½øöâÛ‹u.ë\Ö¹<°çÀž{âü€xÄ+;ý¼®ê_اî¸Ác<§ ˆ9I‚"¨” ¨ ­+’¶¢¦«ù©œ¤wôú¨ç¨žP¾j4Ù Žã8Žã¸O@d¨Bªèº‡îêª^8sáÌ…3¥J/”^ð½æ{Í÷šãLÇ™Ž3™˜‰™˜¼ /È ^Wõ¯ìSwÜ«!‡œíD KEj!+ ª,ªiŒ¹BŽè€Æ¢^ämk¹C»Bú½ð"r_¡ ?ÇqÇqŸL5ªQ­Ø­Ø­Ø-ÔUMYž²uÇ›ÈÂ%¬(>Sy°æœb‘¼L~‰D’Q¤‡è,ù†¨†jÔH~qŸNZ Žã8Žã¸OL¨«úRñRñRSOòKòKò»ëz×õî-óÆæ-FêŒÔ§…­Ø*vSœTœdZh‹¶è†Ôð4‘%Ÿ%éóÀ\–ßÚTŒ¬ú¾ê¢ì†<ƒôÆq,"it>Q5š¡i¥vAù‚E žü`pÇqÇ}bucÖÝà7LÇtL>KÏÒsa¹á¹á.FíŒÚUÜo˜Ô0IÃKÃYÙvÁ Ì@LÇtñ&üëø<Ù:Ûb/».,t¨h\õmÕ ™ª¼ mIŽ)“Ö¤P¿¥ú$5e&2~hÈÅpÇqÇ}B]ÕF¬k„]Ø…ëé­Ó[gYï·cÜ÷‰ÙîÙîQ&˜| ßaóæ H+ô@ §?ÐЙ7Þ_ÇçqÿšÆ]¨C¢Â!•ºÕ­jfÉÎ*æá!‡@P²‘x˜,–vTÿ?  šðG1ÇqÇqŸ…0î> ³0‹œ#çà\Ù±²c‰qâÅÄ‹Oš4mÛ´m ·HO¤gIñäÖA)Ô ÆK2ý•|–ìé¬Nà66Bùûþ¤ÕkªjäSåËÁR˜´+ùÖð°ÆqµíЀ H_âŽPe"PÔ@?0ÇqÇqŸÅr,G> (ÿ úAU¼4miÚ·hŒÆlLEIE‰Š9˜L‹904A’x£}É -âݘNt1ÃÒ×NžÒ÷*“/4›±åI!:w/ŒŒë:\Øœ¡—±íáÍã8Žã8î³ ÿMVƒŒÿÏ­y¦¿œÏóø#E(ÃQôGVŒå8øöByÛJ/P„blª"YÃKì¨òLòŠŸ¨9Óƒ*º‘è¶üpÇqÇ} RHAQjä#hH½©7ÆÑF´Æ krå–Ü_Æg •QF®§ãJ`)$¯7—¡²{D€°—°Ð°TuTÑÕÎSk.žS¥"‹“Gc5:Á=ùAá8Žã8Žûl*Pñ°d8à© ài5¿µ%÷ðyî¢``Pƒ Dx‹ T½›ôaf• ­ˆ Ø¤(Ñ,P5UYªë+é¬j9Pãdqç8Žã8Žã¸ß¢ò¿ù1O+üªÚPAkÈ^¢…†¶8YtQËBm—¸§2ŸÌ2t$ž8‚8ž^†ã8Žã8Žã>ö?Š[Ê›_~­²€Vð›±µ,Os¹jSñ)Ým’yª#…mÈi B?$ÇqÇq÷kÿ£Žû«Í¥-?ì@)ì`¡xÂ^3IšÊM•uZ5jëÅÂ6d1áYe8Žã8Žã8î7}ÎŽ{J¨ï:}x_5Úd"úÈ™b6{† j!*±zk$£U{(7º…áè ÇqÇqÇýÚçì¸×BñK5Ôwq—«»Â›õ@(«e³ØÔˆ’E6ÚÔÜTƒ”]üL£ÚPƒ˜Žã8Žã8Ž«ësvÜ“ðEÂbå\ÙuÙÃòëUy5E¢~ô íUÅ;ÅÃ0 µÍBg]áÊtÐþ°ú7å8Žã8Žã8®Þùœ÷Ÿ‘…·ÂbõY/E‹‚«~U*Í©Y(üÙ)½žê'Ôæ¢Õ¨eÙ 7Ì Ï ÇqÇqÇÕõ9;îáx‰×B1¦Êá²Ý²³oåå+ˆ‚EijgmLÒ5Ϫ§ÐÙ¤‘°D„à´G˜ñÃqÇqÇqu}ÆŽ;{Œ< ŘjnÈ£·ŠgU-­Ñ€ŒD‘vP•ç+– •æªý,¹©RLP9h ˜ðÃqÇqÇqu}Î÷‡x…w0ƒÔkÄòbÅÝ÷G>ì©îM&½1‰ fI:M$šªaâ3"P[aŠ*qƒ1tùá8Žã8Žã¸º>gÇ=oðž4ÃÌ@.áf¡]ezµ¡CdR¶ÜÐRCE²MrXôX”«Ì@Ó V0â†ã8Žã8Žãêú¼“S3ñ–ê- ˆ¡òÎçÃ*U€†ÐYs…¡âýVꕪaâ1¢8jª|•Ì`È ÇqÇqÇÕ¥ò÷ý¯P@“H*È+Y-LÞ•o©š‚|rýÙAV­q^í½jº4@,S©T¾Ê&F?÷`£p? Ë¥ªíkÒa\û³Ì€ö#>ä5œC=iGÉOÊ~P8Žã8Žã8î_}þŽûhv÷…å’¢ê!µäú5“dÉ¢­¤7©… áˆ7š+Í•¸ñƒÁqÇqÇq¿ç³wÜ‚‹ˆK²«†Õ4¯XT;IC7“žD1!Íx½´@âËÇqÇqÇýžÏ?â>?!VX.u©¾V[òánÍYYO:¶%/<ÄsÃá%øÁà8Žã8Žã¸ßóùGÜGâ<»Uˆ@KžWu« ©È­í+{AùŠTˆÁSão¥¶’Óü`pÇqÇqÜïùü#îCÙiܪ¢ï­ú±ælùÀÚE¨%#ˆ:À"Y’ñZÍ-’#ÊÈ €‚OQå8Žã8Žã¸ºT>÷`>؉‹d Nc^éîê¯j”©nXk1½Nzrg5Z»™ô!\P]èCjÊbLÇqÇqÇøtÜŠëx(’Ò‡ä+™†BÌDy5²[Ñ!Õ¢‘eÐT£P²w‘bœ@ 2!…*¨@-dü qÇqÇqÜçqJTCbPˆ V¾­ö˜:ë°¸$ñTqÙ¨9‹nÐdŽo°ËÐ<Ï ÇqÇqÇ)ý?¦õnKt}—IEND®B`‚routino-3.2/doc/html/usage.html 644 233 144 66476 12574075650 12006 0 Routino : Usage

Routino : Usage

Program Usage

There are five programs that make up this software. The first one takes the planet.osm datafile from OpenStreetMap (or other source of data using the same formats) and converts it into a local database. The second program uses the database to determine an optimum route between two points. The third program allows visualisation of the data and statistics to be extracted. The fourth program allows dumping the raw parsed data for test purposes and the fifth is a test program for the tag transformations.

planetsplitter

This program reads in the OSM format XML file and splits it up to create the database that is used for routing.
Usage: planetsplitter [--version]
                      [--help]
                      [--dir=<dirname>] [--prefix=<name>]
                      [--sort-ram-size=<size>] [--sort-threads=<number>]
                      [--tmpdir=<dirname>]
                      [--tagging=<filename>]
                      [--loggable] [--logtime] [--logmemory]
                      [--errorlog[=<name>]]
                      [--parse-only | --process-only]
                      [--append] [--keep] [--changes]
                      [--max-iterations=<number>]
                      [--prune-none]
                      [--prune-isolated=<len>]
                      [--prune-short=<len>]
                      [--prune-straight=<len>]
                      [<filename.osm> ... | <filename.osc> ...
                       | <filename.pbf> ...
                       | <filename.o5m> ... | <filename.o5c> ...
                       | <filename.(osm|osc|o5m|o5c).bz2> ...
                       | <filename.(osm|osc|o5m|o5c).gz> ...
                       | <filename.(osm|osc|o5m|o5c).xz> ...]
--version
Print the version of Routino.
--help
Prints out the help information.
--dir=<dirname>
Sets the directory name in which to save the results. Defaults to the current directory.
--prefix=<name>
Sets the filename prefix for the files that are created. Defaults to no prefix.
--sort-ram-size=<size>
Specifies the amount of RAM (in MB) to use for sorting the data. If not specified then 64 MB will be used in slim mode or 256 MB otherwise.
--sort-threads=<number>
The number of threads to use for data sorting (the sorting memory is shared between the threads - too many threads and not enough memory will reduce the performance).
--tmpdir=<dirname>
Specifies the name of the directory to store the temporary disk files. If not specified then it defaults to either the value of the --dir option or the current directory.
--tagging=<filename>
Sets the filename containing the list of tagging rules in XML format for the parsing the input files. If the file doesn't exist then dirname, prefix and "profiles.xml" will be combined and used, if that doesn't exist then the file '/usr/local/share/routino/profiles.xml' (or custom installation location) will be used.
--loggable
Print progress messages that are suitable for logging to a file; normally an incrementing counter is printed which is more suitable for real-time display than logging.
--logtime
Print the elapsed time for each processing step (minutes, seconds and milliseconds).
--logmemory
Print the maximum allocated and mapped memory for each processing step (MBytes).
--errorlog[=<name>]
Log OSM parsing and processing errors to 'error.log' or the specified file name (the '--dir' and '--prefix' options are applied). If the --append option is used then the existing log file will be appended, otherwise a new one will be created. If the --keep option is also used a geographically searchable database of error logs is created for use in the visualiser.
--parse-only
Parse the input files and store the data in intermediate files but don't process the data into a routing database. This option must be used with the --append option for all except the first file.
--process-only
Don't read in any files but process the existing intermediate files created by using the --parse-only option.
--append
Parse the input file and append the result to the existing intermediate files; the appended file can be either an OSM file or an OSC change file.
--keep
Store a set of intermediate files after parsing the OSM files, sorting and removing duplicates; this allows appending an OSC file and re-processing later.
--changes
This option indicates that the data being processed contains one or more OSC (OSM changes) files, they must be applied in time sequence if more than one is used. This option implies --append when parsing data files and --keep when processing data.
--max-iterations=<number>
The maximum number of iterations to use when generating super-nodes and super-segments. Defaults to 5 which is normally enough.
--prune-none
Disable the prune options below, they can be re-enabled by adding them to the command line after this option.
--prune-isolated=<length>
Remove the access permissions for a transport type from small disconnected groups of segments and remove the segments if they end up with no access permission (defaults to removing groups under 500m).
--prune-short=<length>
Remove short segments (defaults to removing segments up to a maximum length of 5m).
--prune-straight=<length>
Remove nodes in almost straight highways (defaults to removing nodes up to 3m offset from a straight line).
<filename.osm>, <filename.osc>, <filename.pbf>, <filename.o5m>, <filename.o5c>
Specifies the filename(s) to read data from. Filenames ending '.pbf' will be read as PBF, filenames ending in '.o5m' or '.o5c' will be read as O5M/O5C, otherwise as XML. Filenames ending '.bz2' will be bzip2 uncompressed (if bzip2 support compiled in). Filenames ending '.gz' will be gzip uncompressed (if gzip support compiled in). Filenames ending '.xz' will be xz uncompressed (if xz support compiled in).

Note: In version 2.5 of Routino the ability to read data from the standard input has been removed. This is because there is now the ability to read compressed files (bzip2, gzip, xz) and PBF files directly. Also using standard input the file type cannot be auto-detected from the filename.

Example usage 1:

planetsplitter --dir=data --prefix=gb great_britain.osm
This will generate the output files 'data/gb-nodes.mem', 'data/gb-segments.mem' and 'data/gb-ways.mem'. Multiple filenames can be specified on the command line and they will all be read in, combined and processed together.

Example usage 2:

planetsplitter --dir=data --prefix=gb --parse-only          great_britain_part1.osm
planetsplitter --dir=data --prefix=gb --parse-only --append great_britain_part2.osm
planetsplitter --dir=data --prefix=gb --parse-only --append ...
planetsplitter --dir=data --prefix=gb --process-only
This will generate the same output files as the first example but parsing the input files is performed separately from the data processing. The first file read in must not use the --append option but the later ones must.

Example usage 3:

planetsplitter --dir=data --prefix=gb --keep    great_britain.osm

planetsplitter --dir=data --prefix=gb --changes great_britain.osc
This will generate the same output files as the first example. The first command will process the complete file and keep some intermediate data for later. The second command will apply a set of changes to the stored intermediate data and keep the updated intermediate files for repeating this step later with more change data.

The parsing and processing can be split into multiple commands as it was in example 2 with the --keep option used with --process-only for the initial OSM file(s) and the --changes option used with --parse-only or --process-only for every OSC file.

router

This program performs the calculation of the optimum routes using the database generated by the planetsplitter program.
Usage: router [--version]
              [--help | --help-profile | --help-profile-xml |
                        --help-profile-json | --help-profile-perl ]
              [--dir=<dirname>] [--prefix=<name>]
              [--profiles=<filename>] [--translations=<filename>]
              [--exact-nodes-only]
              [--quiet | [--loggable] [--logtime] [--logmemory]]
              [--output-html]
              [--output-gpx-track] [--output-gpx-route]
              [--output-text] [--output-text-all]
              [--output-none] [--output-stdout]
              [--profile=<name>]
              [--transport=<transport>]
              [--shortest | --quickest]
              --lon1=<longitude> --lat1=<latitude>
              --lon2=<longitude> --lon2=<latitude>
              [ ... --lon99=<longitude> --lon99=<latitude>]
              [--reverse] [--loop]
              [--heading=<bearing>]
              [--highway-<highway>=<preference> ...]
              [--speed-<highway>=<speed> ...]
              [--property-<property>=<preference> ...]
              [--oneway=(0|1)] [--turns=(0|1)]
              [--weight=<weight>]
              [--height=<height>] [--width=<width>] [--length=<length>]
--version
Print the version of Routino.
--help
Prints out the help information.
--help-profile
Prints out the selected transport profile (type, speed limits, highway preferences etc.)
--help-profile-xml
Prints out all the loaded profiles as an XML file in the same format that can be loaded in.
--help-profile-json
Prints out all the loaded profiles in JavaScript Object Notation (JSON) format for use in the interactive webpage.
--help-profile-perl
Prints out all the loaded profiles as a Perl object for use in the router CGI.
--dir=<dirname>
Sets the directory name in which to read the local database. Defaults to the current directory.
--prefix=<name>
Sets the filename prefix for the files in the local database. Defaults to no prefix.
--profiles=<filename>
Sets the filename containing the list of routing profiles in XML format. If the file doesn't exist then dirname, prefix and "profiles.xml" will be combined and used, if that doesn't exist then the file '/usr/local/share/routino/profiles.xml' (or custom installation location) will be used.
--translations=<filename>
Sets the filename containing the list of translations in XML format for the output files. If the file doesn't exist then dirname, prefix and "translations.xml" will be combined and used, if that doesn't exist then the file '/usr/local/share/routino/translations.xml' (or custom installation location) will be used.
--exact-nodes-only
When processing the specified latitude and longitude points only select the nearest node instead of finding the nearest point within a segment (quicker but less accurate unless the points are already near nodes).
--quiet
Don't generate any screen output while running (useful for running in a script).
--loggable
Print progress messages that are suitable for logging to a file; normally an incrementing counter is printed which is more suitable for real-time display than logging.
--logtime
Print the elapsed time for each processing step (minutes, seconds and milliseconds).
--logmemory
Print the maximum allocated and mapped memory for each processing step (MBytes).
--language=<lang>
Select the language specified from the file of translations. If this option is not given and the file exists then the first language in the file will be used. If this option is not given and no file exists the compiled-in default language (English) will be used.
--output-html
--output-gpx-track
--output-gpx-route
--output-text
--output-text-all
Generate the selected output file formats (HTML, GPX track file, GPX route file, plain text route and/or plain text with all nodes). If no output is specified then all are generated, specifying any automatically disables those not specified.
--output-none
Do not generate any output or read in any translations files.
--output-stdout
Write to stdout instead of a file (requires exactly one output format option, implies '--quiet').
--profile=<name>
Specifies the name of the profile to use.
--transport=<transport>
Select the type of transport to use, <transport> can be set to:
  • foot = Foot
  • horse = Horse
  • wheelchair = Wheelchair
  • bicycle = Bicycle
  • moped = Moped (Small motorcycle, limited speed)
  • motorcycle = Motorcycle
  • motorcar = Motorcar
  • goods = Goods (Small lorry, van)
  • hgv = HGV (Heavy Goods Vehicle - large lorry)
  • psv = PSV (Public Service Vehicle - bus, coach)
Defaults to 'motorcar', this option also selects the default profile information if the '--profile' option is not given and a profile matching the transport name is found.
--shortest
Find the shortest route between the waypoints.
--quickest
Find the quickest route between the waypoints.
--lon1=<longitude>, --lat1=<latitude>
--lon2=<longitude>, --lat2=<latitude>
... --lon99=<longitude>, --lat99=<latitude>
The location of the waypoints that make up the start, middle and end points of the route. Up to 99 waypoints can be specified and the route will pass through each of the specified ones in sequence. The algorithm will use the closest node or point within a segment that allows the specified traffic type.
--reverse
Find a route between the waypoints in reverse order.
--loop
Find a route that returns to the first waypoint after the last one.
--heading=<bearing>
Specifies the initial direction of travel at the start of the route (from the lowest numbered waypoint) as a compass bearing from 0 to 360 degrees.
--highway-<highway>=<preference>
Selects the percentage preference for using each particular type of highway. The value of <highway> can be selected from:
  • motorway = Motorway
  • trunk = Trunk
  • primary = Primary
  • secondary = Secondary
  • tertiary = Tertiary
  • unclassified = Unclassified
  • residential = Residential
  • service = Service
  • track = Track
  • cycleway = Cycleway
  • path = Path
  • steps = Steps
  • ferry = Ferry
Default value depends on the profile selected by the --transport option.
--speed-<highway>=<speed>
Selects the speed limit in km/hour for each type of highway. Default value depends on the profile selected by the --transport option.
--property-<property>=<preference>
Selects the percentage preference for using each particular highway property The value of <property> can be selected from:
  • paved = Paved (suitable for normal wheels)
  • multilane = Multiple lanes
  • bridge = Bridge
  • tunnel = Tunnel
  • footroute = A route marked for foot travel
  • bicycleroute = A route marked for bicycle travel
Default value depends on the profile selected by the --transport option.
--oneway=[0|1]
Selects if the direction of oneway streets are to be obeyed (useful to not obey them when walking). Default value depends on the profile selected by the --transport option.
--turns=[0|1]
Selects if turn restrictions are to be obeyed (useful to not obey them when walking). Default value depends on the profile selected by the --transport option.
--weight=<weight>
Specifies the weight of the mode of transport in tonnes; ensures that the weight limit on the highway is not exceeded. Default value depends on the profile selected by the --transport option.
--height=<height>
Specifies the height of the mode of transport in metres; ensures that the height limit on the highway is not exceeded. Default value depends on the profile selected by the --transport option.
--width=<width>
Specifies the width of the mode of transport in metres; ensures that the width limit on the highway is not exceeded. Default value depends on the profile selected by the --transport option.
--length=<length>
Specifies the length of the mode of transport in metres; ensures that the length limit on the highway is not exceeded. Default value depends on the profile selected by the --transport option.

The meaning of the <preference> parameter in the command line options is slightly different for the highway preferences and the property preferences. For the highway preference consider the choice between two possible highways between the start and finish when looking for the shortest route. If highway A has a preference of 100% and highway B has a preference of 90% then highway A will be chosen even if it is up to 11% longer (100/90 = 111%). For the highway properties each highway either has a particular property or not. If the preference for the property is 60% then a highway with the property has a preference of 77% (sqrt(60%)) and one without has a preference of 63% (sqrt(100-60%)). A highway with the property will be chosen even if it is up to 22% longer than one without the property (77/63 = 122%). The overall preference for each highway segment is the product of the preference for the highway type and all of the preferences for the highway properties.

Example usage (motorcycle journey, scenic route, not very fast):

router --dir=data --prefix=gb --transport=motorcycle --highway-motorway=0 \
       --highway-trunk=0 --speed-primary=80 --speed-secondary=80 --quickest
This will use the files 'data/gb-nodes.mem', 'data/gb-segments.mem' and 'data/gb-ways.mem' to find the quickest route by motorcycle not using motorways or trunk roads and not exceeding 80 km/hr.

filedumper

This program is used to extract statistics from the database, extract particular information for visualisation purposes or for dumping the database contents.
Usage: filedumper [--version]
                  [--help]
                  [--dir=<dirname>] [--prefix=<name>]
                  [--statistics]
                  [--visualiser --latmin=<latmin> --latmax=<latmax>
                                --lonmin=<lonmin> --lonmax=<lonmax>
                                --data=<data-type>]
                  [--dump [--node=<node> ...]
                          [--segment=<segment> ...]
                          [--way=<way> ...]
                          [--turn-relation=<relation> ...]
                          [--errorlog=<number> ...]]
                  [--dump-osm [--no-super]
                              [--latmin=<latmin> --latmax=<latmax>
                               --lonmin=<lonmin> --lonmax=<lonmax>]]
                  [--dump-visualiser [--data=node<node>]
                                     [--data=segment<segment>]
                                     [--data=turn-relation<rel>]
                                     [--data=errorlog<number>]]
--version
Print the version of Routino.
--help
Prints out the help information.
--dir=<dirname>
Sets the directory name in which to read the local database. Defaults to the current directory.
--prefix=<name>
Sets the filename prefix for the files in the local database.
--statistics
Prints out statistics about the database files.
--visualiser
Selects a data visualiser mode which will output a set of data according to the other parameters below.
--latmin=<latmin> --latmax=<latmax>
The range of latitudes to print the data for.
--lonmin=<lonmin> --lonmax=<lonmax>
The range of longitudes to print the data for.
--data=<data-type>
The type of data to output, <data-type> can be selected from:
  • junctions = segment count at each junction.
  • super = super-node and super-segments.
  • waytype-* = segments of oneway, cyclebothways or roundabout type.
  • highway-* = segments of the specified highway type (e.g. highway-primary to display segments ofprimary roads).
  • transport-* = segments allowing the specified transport type (e.g. transport-foot to display segments accessible on foot).
  • turns = turn restrictions.
  • speed = speed limits.
  • weight = weight limits.
  • height = height limits.
  • width = width limits.
  • length = length limits.
  • property-* = segments having the specified property (e.g. property-paved to display segments of paved highway).
  • errorlogs = errors logged during parsing.
--dump
Selects a data dumping mode which allows looking at individual items in the databases (specifying 'all' instead of a number dumps all of them). More than one of the following parameters can be specified on the command line.
--node=<node>
Prints the information about the selected node number (internal number, not the node id number in the original source file).
--segment=<segment>
Prints the information about the selected segment number.
--way=<way>
Prints the information about the selected way number (internal number, not the way id number in the original source file).
--turn-relation=<relation>
Prints the information about the selected turn relation number (internal number, not the relation id number in the original source file).
--errorlog=<number>
Prints the information about the selected error log that was stored when the data was parsed.
--osm-dump
Dumps the contents of the database as an OSM format XML file, the whole database will be dumped unless the latitude and longitude ranges are specified.
--no-super
The super segments will not be output.
--latmin=<latmin> --latmax=<latmax>
The range of latitudes to dump the data for.
--lonmin=<lonmin> --lonmax=<lonmax>
The range of longitudes to dump the data for.
--dump-visualiser
Dumps the contents of the database as HTML formatted items for display in the visualiser web page.
--data=node<node>
Prints the information about the selected node number (internal node number, not from the original source file).
--data=segment<segment>
Prints the information about the selected segment number as if it was a way (internal segment number, unrelated to original source file).
--data=turn-relation<relation>
Prints the information about the selected turn relation number (internal turn relation number, not from the original source file).
--data=errorlog<number>
Prints the information about the selected error log that was stored when the data was parsed.

filedumperx

This program is a modified version of filedumper that will dump out the contents of the intermediate data that is saved by planetsplitter after processing using the --keep or --changes option. This is intended for test purposes only and gives no useful information about the routing database.
Usage: filedumperx [--version]
                   [--help]
                   [--dir=<dirname>] [--prefix=<name>]
                   [--dump [--nodes]
                           [--ways]
                           [--route-relations]
                           [--turn-relations]]
--version
Print the version of Routino.
--help
Prints out the help information.
--dir=<dirname>
Sets the directory name in which to read the local database. Defaults to the current directory.
--prefix=<name>
Sets the filename prefix for the files in the local database.
--dump
Dumps the complete set of data in the intermediate files that are written by planetsplitter using the --keep or --changes options.
--nodes
Dumps the node data.
--ways
Dumps the way data.
--route-relations
Dumps the route relation data.
--turn-relations
Dumps the turn relation data.
routino-3.2/doc/html/example3.png 644 233 144 241144 11541143732 12231 0‰PNG  IHDRôA^#X oFFs6È *8 pHYs  ÒÝ~ü vpAgŽÌdKž€IDATxÚìÝu|KÖ7ð_uÅ•¸'ÁÝÝÝ‚»»»»»^ÜÝÝ!X€B—±®÷ž»ÞÝ}vŸg¯Àå|ù|vûöÔôÌœ™žœ©>UÅ@!„ò³Ú(M¸…'j/Å2…¶×²ÎA—l,¥ ìQ¤¿k–Ýäi=t®º¾RO>’ÃtU4» côéçs¦l½TìqÍÃ'#Ǫrêiké*²[¸†‰0G TæWÑó1q"0!SàɃQ!„ò“r… ,Q Y84Àù¶õRËâ}7”i^¤|¿­¥'z9­r4j¾M_×8I{Æ8ŸP½B)ôfŽŠ‚Š”«I±ÞIÅyÜ za\©ˆ‰6y/ì¡›ËjHxo~É´Ÿ’xò_ ÄB!?Ÿÿ?…3l –êñIü±Üij€“Õµak*5 ¾ÝÃ7¤…Ÿ³M Ë󚣆²¹Mµu ÷$w~UÃÍz«œ ¯õÓ³¯ÌŽ_ü%yú¢Ë“#v]/S*Á˜,~›,ùI빑«0KŽ\h¡ƒFJàÉŽwB!„ü¬4P@D.ô0°ýÈÄuö„DŽ4“B]¹a©d¯Ž.ël*Ó¡p`‡îÅøÖVPø°[y’6^o>±›¬ŸÊM©7t5&ð »ï¿÷z¥Õ£‘oîß‹Ç'飉UpcUQ“»s-J!È‚Œ ÑÛBþõ–B!„``ÀÁQÅP¥c:±šì6]šÉs£Ü°rC¿Rîvã:W­r¢^¬oCçlŒøY8«­¨Ý¢ëË"1 ½U©æ5MÒFfí˳ÛQîéÅwáKn-zî–<:­¨|ñ ûÀŸó±<±Ç „z)}'ÿ %î„B!ÿŒÜŸŒB ÖŒY!—¯ãÓ¥ÓpÆ0Ø`'Þ4Ù[´®ßª1®•Ò‹•¨ìÕ®Àg@Z"is*èjéi+¬Ä‹B9åDEçÔÍ9ãuukn‡GžØ>øQ­èañ)©3öÉ%X0DH¯ø@¬‚'f`# Ü”©Q9 @‰;!„BÈÿD Dha€3Ñ 5„÷ì+H‡ù5Ø# ŠPÑÐÁ1dcÁE£ûTî]|}ÑaNõ¬Ïà¼á°qgî[}3ÃX•‡XTì%6ÒÌV¥ÆtM>™±²Ô]Õ+ËÕÁw>¾¨§­¦/­_.? ÈW¶É8M*Ë÷`*ŽàÌ „B.æ¡7„B!„G®‰·†*øÃ6B8kìò7±­b¶[;Ô®rÃ×ñëGåµKå|Ά^’ä2MÙupÖ›‰Yîp>c~÷ºœÏÙsâ‹è!é­Žwr(ñ¬Ð³ªñʳ¦‡šŽ¹¨ÂnÀˆ;p€9ÔPB„HoÂÏý$„B!ÿ[*ˆ¡ƒFh±ãÄNÌ™]6îç-ù¹‰ÛÛñV(Ë Ò XS¦~¡«67Ì%Õ}Õ¼ººFOi8?§Ù©Ú¬(\(y­lÜÐ/æKöÞªùüÂßçwcÖÈÇaA˜€ælËc÷¤‹<’ûb!Nã À@CZ”¸B!„ü_åÒê;Øà ©P…íÀé C!¹aÐ]çûô+ø«ÚÓ3¤›_ªê*^Ü _ª5Ó¯1ÄJ y’ÙR“ò€s6úDèæ 9‹ÛÜùâÈåúÑsß›r6a48öðþÌe¹O‚Ÿ©_kšÜ’SEü_%î„B!¿ ¨¡D6´Ð³x‚}‚5‹f³ŒKy+þDnR¶ª·ÑuøÈJ•4ÅÐrJᕞJ¦°³y–¹7tµ„6,ƒU›Õ!ªi†m†ãÆÙÛŸ<+ç²r×í3ÏŸã̷ЄïÅ þ á˜h|B2-óôWE‰;!„BÈo-ê\ðбB,ž?ç•y[~£±[nXïRábÞM†¾©0¼XѺáþc]>Ü MË+§½jè!x eT{5‚êUöè<­¾ûžÏ´±V˺Þ~ñ¢ùs]bp²Ü£Ÿ+2ÅPŶ—}`·ŒVÆwÆ8^_z(݇<à$|Àz[~t”¸B!„üžälKž£] "Û„¯¸€ ¸‡“Ü50_U@1HáÑ*"¸l@úȹv¹„-wK°H¶Æ 9¡ÚH½·ÆWœ-6«[¨â¾–ÍÚûvÃü3#Š­ ¾áû<õƒ½1òÿ{Üù¨ˆ ŒÆMDšJzäþw*§!„B!äßPå›f$꣒x‰éØäüMÄ7âq ÎkÏ}Y|Ø©6å8Ÿ3º×!ãªiŽ]eßž´µsiÈÿÎA9¥O/ÙæsïÙ!lÕ„Ï=r¤Ô3~˜Ë0ßöÅ]‹”¦('Ž=Y2³ÇKÓ°|ÿK!„Bù—ò'ÍØŽŽ¨ËâÁq=C—cÖÇ,kLhRãFÉÉ'&8tÚÃùœéáœOšÒ¡ÐƒŒœ›Ù%ïåqÎyÔ;Î9O àœóE†eþ "͇+˜h#M±Q˜ÄRð ÓÑßôæPAIoÈBD¼à‚OHG–ivRB!„òÇ WÎàâ°“± ‹Ñ é‚È&f,È[ª[rýõ»Í‰—÷Z¾8gPX*Å|«Y šYºec«gëë«ÇiÊäÍ»Ÿ×"ÑKÒó¼óÒïÄF‡ï°x™[‡[YXXß¿JÍæé5rjûc .ã>;‹·ØÎÞ¢B¡ÀU !„BÈŸF Dèa€$¸°UH•>ñ°:¬G¯J•¦,Ð×°/ódfÑÏš”W¹¯ËD…ÏݽÌi«xS“<`Så6Åïu,Z4ÐÓÌF%ûô\[D_ØXUzÌËi6(7‰+QHQY¬³åë‘,«7ï4|ùfÏô§Cb.|vÏÐd™jâ |Å6þŽù£ wâ©(bznòuJáÿx¡ë=V:÷5½ .Ø…9B!„ïkÊDlÃ6ô‡›w—;¶E²?œ‹ìlx1f–ó]ǤMï™^9Ð$ÿ}ƒ[¸–wx·rv³Â•¯d՜ܾË.Îg/î©“zO+ÙuuvãI9Ÿ¾´ÛÎçv¿UzØ–ÖÓÆçÔÈ+™n•¦™©vÉ4ÅJ¡/‹B&Vb‚i—”PÐ{ôGƒÔ.MË¿‹L9‘~ ÇB ÇU,ûuQB!„ò‡’‡‡ZÁ 6Âq¡8c¼*?ŠÛ«&{\sYÉòÅ/ºä°ÇÜ+V'žÉ¬Þ{ú‚šdWÊ»¯SˆÍ„06˜½æ'PèÓÕ¬Q¹MN]|•¿õd6hÍ Äd9œ·9d½Èr´Y¼Á\WÔ¬MÑ}ÔWr>`ùÅlM¥ÿ.×íõ!»ü‹Å6âθfisn¥‡çµÔŽÇœÂuv1ØÆ¾ Êá #YÈ¡­¿»Y!;ÇÊÛ,†9 †bB!„òçW Ø~XÃÊûÅýSFÇ‹g†LÔ]»ÔepUÎïŒåÛ3®ÑŹ=Kccgºó44E5a$k#«%è’ÿÈ%"ëbÏâRái»¾É¹0i}g')fÚÞnvœÏíÞóUÏaªÖ}ÇÙUïT¢E1VS,fó²õ¬:k‹ø&‰/üÄe–cùùõT*_=éÅø‡Nq>§Z¯††Sçwm;mÒ«Î%¥'Ó®v+Éùì¸^novXÑvú¨#UCw»Ù6µ:•ÿh‚€¬ìXa$}ûò(…ÿ/LkU׺¬«)ÄŸÙ:V™bB!„ò‡²‚9Tò¦0–%°@æÌJ²²—6-¹Ð¦&7Üø0¼4ïxkõˆ–7¯Ôµ›h>J³Bi5B=Vϰ#þ£Gòõ÷@y³jØÂ,Öžiò7,èQÀÏöæÜ°úŸÊå¦ ™`Ý©ç³5=r>}~·-Ùí&¹wzÎùô݆s>ר;ô­Í§6w¦¸×®[ÆÖÞѯ\ƒ>å¾o6:¹ýiÎçÎ Ÿgì3õF×Î9Å'5íôœó»á|Ö´žUß/Í;xªjÃxµ²÷²Öó°ñëXO\ÆJ„À ¦îcÓÀVò?Ût²åÀªL›ÃÞ²þT‡D!„òa`[Á*à¦&”c í3mBÌï]_µãît3uøÎo 8pÖŒf“MwŰÔTÑnõ9-£"_™M”@ÈŠ"‘ÍÀaŒÏß°`]§êöÅg4¬³¿L•Äsãzu<Íù¬á=+ò;ÓƒºÎùeÒ‚Î*ã¡iv]—s>w]øö7G¬h;abVÍþ¥|=,™oË4q;˪±ÌoL»T¦žrÑnïÃv®5` +X‹±‚’Í¢˜B!„üîäÔTÂuÁ™••w·XëqPCβ1_µÎç— ¡­s-p¸mé:E¼]oã"Ö¡Ÿ%fµ`ͯ6¿1¹2^ â1 Å™ìk“¿‰‹™u5‹MÓ+ÕÉ+£ÿpvô‘öµ8ŸkÞ“óé§»Î::ñZ§ÙœÏ(Û݆ó9z=›9ªS»ÙãÏÔô+ÕÓõ¶õC cþ£‰cY †˜ŠpT„Ü)…ÿ'NÕì”SÛTc$>dïYWØÀ Š !„BÈïÈfPb. 6«…<,2»­±Q>x·jïÖðã”Ë/9¿7zTúöm­¤³šl&Û%l¬"Vc,šÿîÏ0O¼Ìa.tfm˜ ËÆ#ÌÌßÐ#ÕÞÌ:~¶m=ϲ³ßž9©/çs&÷ºo<:­H×ó¹Á“Žwv’vM;ØÍŸóÙozyÇ ]­ý•±›ª= {ïžc×Ñúhþ£±0 E9a%ëÇÜQžp3Ý üôiü•v=«5¨ÏÔìà„ƒ¨‹PlG?à£@!„òsóU–s¡ë)oO¼ÞuW…Kœß~=²³|uðÐò)GNîêÿÉã˜Ó:ëµh €Il²ÿ„çœ`kCG`€0œ5cß$Ó•lYmZ²rhÈž÷ £#Úâ|ö^•9Ÿþ±[ZVìÄ·¶ñ¨iñÝTœÏÝßlÖ¶ËŠ„¦=+—÷…CE›³ß„ê1{ËZ²Qxc¦]æ?ñ<ñ÷|úF7yj~LýXí)ïaqKèœ"„BùýuÙ æÅúˆ NÇí†ZL|[nï©^ {®/6ƒóÛFœ[9mX¥Z3äöì ‡÷¦;«¡ÄŸ½öŽŠ_Ÿ[‹4\;³u¬`þ&Îݬ'XÄÍô¬;¤¬æÝ´‘ÚvnœÏ[Þ»“ôbÚè®Ñ9e&µîô–óéún:Îgi{ÎKÛ51µsêÂZ 'Vè\t¡Ë-‡OùÆá±½ˆÃtCy„šnøy¶>÷<­e/—6c­jÁ ˆì ôx@§!„BÈï¢9ª¡˜Ð‡]@мcÞ ~Êj39xuLœ~ãÅÆƒº%{žì3€;åÚ×°ˆc¡øˆ¹l4óÆ!XÀ컚H19Mu{Ì€;,éØŸ¿¡/"lÇ&W÷+Q>¦þȨvÓ8Ÿõ¨çdΧí–stҼ΂~ÙTÏ.çsöÒ})0~Z§aË®7¾[ñDA'µý7S– 3XF³žÌôK^ìé¯]NóÖ|Ĥ¶üßH°ob D!V• tNB!„üÆ,a›ÈüpÙ8¡~çÜ횥ï93e6öˆIœ?*6vô¨í÷—™Ë&³ÊÈPøˆÞì!  ~€×¨4•10ÜÅxôP@pd+ò7±hþ^óedfµÚ%ÊG?>³ÍXÎç< ¯Èùô}Ýve5œx¬Ó6^mÚ’®w9Ÿó*Ü!%tüÙNêeYM2+W âxÐveþ£‰ƒÙ ÖK05PžØúW“ðz¬m‡ÈÖî¯LëZ [Ø$V‚Î,B!„ßL¾I…©ìó¯%%;KO m¸—óÛö#V]o1¬ê;½ó{5ö\á¼Ê¦5»Ãš`§¶ì‡ËAÿ!uJ²*Ð GX)<ÉßÐaºåHóm“ž×L,_lôúöÓ8Ÿë®’´Ób»5Ïõt¬³‡aîÔm]»s>»_Ïe©O&±.-õi8ª|ZQîz¦€ó7›ŠðâØ2VÃQ•LûÿbeÙËצtN©ÐÕ÷ [ª)ÎìëLç!„BÈoKØ*X³òv©3AJ÷V9æ: ÞÀ¯ÔÎù-i$뺨þ¦àѦö—WVë×;ÿ°}ÈÖ ”†Üñ £ÐAhÍj|»Ø“WˆÝT+CŸØrÓ‹9½4buÛ¦œÏV÷¼Ìù̲ݿd§NjÐ)ÉÐcj½.ÙœÏ+žðùö¸›¬jÜ̳ò-¿Úom‹íÁÐb+; þ·"p ¨ øûâsÊNíÚmy­M{½ºË{ÄÉ,•M£S‹B!ä7 §¬7± }ÅuÂ)6ßl©ú¥²ëáÓ³ 4ýÀùÝ£Úw_«=tê}ïõêŽÁ’`]Ù5ÖwPÅà[XBý—Љ”¿^`ÕqëÅìk–¿‰u†Y3uܘºÕU%–=¿<¤B+Îçv ?ÎùôòݺeßšT©Ógî=íL7‘óY{vÊ85ٲ˩•6M/T*‘â±ÕiÜ7oÂXœÇ\v)8Ž…hê¦~¬­Æ±3{Z5Q´†ïFÓóO¼Øv:Ë!„B~j¨ „pÖ£Ñ!•¶§x–”„ÛúQ'´[ÎE 0r~·Ü¨ó ¤òÆ€þò„K‚ 4ØüU[æOš‹Ã ®,žið@pb 'ó7,PÆj©Åœ¡9•}C*DW1²íÎg íéÏùŒîMsŒ“6vVêFLY×e'çs²zíÏh4Ù¶Ë©µÛ¼¨Ñ'Xåö¥À¾üGc}1 å…Ol«°‡é¹:ÿ{ÆùœáõÚuY0[Þ£h$4dWè,#„Bù¯È“6zÃv¸Œeh ð¼â²Ü§íg¾êúåaµ9¿9rÕÅ£K—´m¯ÊV~Q|d˜v±rÈÆ®Ÿ.br%º\4PM<'hØ7CQm&›Y¨ ˜_±dðÒ—k†niõžó9iá8ŸY£ûͬßu:gœ8uK×âœÏYØëfÆÝI}:?ÛîÚ&ºÆœàGn æ?š°UG"«€˜:„×w=°•¿™Õ;®{õ’>GLÛ% b/è\#„Bù?þÞ—,l”¬ª¼Ý¶LÍáA~œß,5¢„qöå¥C,s–]¼4¤u• ÐE^rÑZèÂ~-óø9W •ç|ýñì8»YUÄåohs×|’&ihŸJ¿ç=‰\½åÎçÜï•ÁùôÝöçÖÕ¹²þÈÔ°®¶œÏ:Þ30S{v[·ÁµE­*Ëî÷)çúMm(¥hÃ~au1 MÿVNóý lå|á´¾Ýúµ+ýµ°»¼Gé$lb™tÆB!„ü7Xo抓ì$kŽ;fCÔG•}¾Ûø±ó`iÇ­–#jr~óÄðE§Þ,¨ÝRkjˆÕÁ5ÓU_Þèçâ߆µ!ð€3n ?š >̱ù:–·ìbþ±ìÉ¢«^M6±uç³¼{æ|æus MêÚ)G÷jÊ’.S8Ÿ^&íÖ¤Å]üw¨Ú†Ô84Ó¥£ÃD@ùhBA<ÁÁ‰•ùÛðÙïažxÎdõ¹2æX‹àMòóT`zÖ¾p„-}Z!„Bþל᱋0ƒ –wô;ÙÜ=ì4ç÷÷Œ¾­;wþåÀÚWÚ ëê\ðˆs³À-ôegX3ÜÉ?q$ù'òlõÇA,T¬º±;ß4骪©\<¤]¥!›#® òo1›ó¹{ÃS9Ÿ~£Û¹ìÏ“ÚuVL½ßµ ç³ö4Ë;3u|·r›w´Š¬–Y¶½×EÿüGc°ã ³Æ}¬CÔ7Ýð‡leœÏwè]m®þ⽈áã œ-u¯¥0Šé±MzÈ0 ‡×ô !„BùØÂæƒÌE0󄹕¼”zÅÃÓ6tÚâ³Äm³åtE[Ë«ê+Cvš?ô|pÙ¤Kk„6ìR¥¥Oü6â@‚Náü—ä~x”P²éx†Ýo(¸34—Ú-²hÆ[¿(Æ}1¤Oyÿ¢k‚ʲ¾ H)RüaºR†ÕB˜Ð•Tuшª“¹´É†ÊoGî‰×®î~ßåµî¶Õ;ׄc¦‡ FØ*6•µ3FñÚüd 馭z!ýޝšó¹Ë•k2›EWÖ™v¥¡l0 P™>„B!ÿ‘|ý¯‚=[Ž/òöä ݇T|Âù]qäGc“+k‡,LypêË€wÁ¯.:Â^ €¿è.ôaã)„¿AüåzôZ(†Bâb–ÎfåobÕ]ý^5®p…UÁ.ÏÛ ~Õòç³ÓzÝä|æ„î Yº‰ºN†Sº<æ|ŽS¯Þ9½¦tìÚu÷ðö…k-(UÝ3Ô) 2½Ë§Y=$³Ñx„­hŒ øþm`ëïÕÏùÿžïwo\k óa½Y¼{ÑMé3@!„òŸcm™Ná F¢„Û…IÖï?Ÿ=Ó7LÚvµùPsÎ﬙¸`bÿÏÕ›Éí^bð߯*¡ø ¬îù'¿``PCüu„[ƒÏ¸(b ˜kþ†æÔÕbÿÛåßKЏ7(½åBÎç| ·å|FµîòöMžÛù¼®Ü”Þ]†s>k_\Ãõé{»?ÜÚ¦u—êÁUÏ4õˆúæqà «³«¬&£)j˜ö+~Ë)&€tŠKÖP?WE‰×Ä]b]ƒ— £ìéÝ'„Bù7ä^ÖøÀUü 8±BR OÅ”îm^–\èdçÞѺ¹±gæ…<–>ñK³ìGóÄÝçïþ‚(ìF?Ãmcï†þˆ†ÙÈ…žÂù_‘‹g´0Â('ñ¼?œQÓèɸ-Ž +ê £Ù]lÌñжԺ¯Æm{M¯wœÏìÓ=!§Ù¤Eý …¦úw‰â|Vµ† Ó{u?¸Åغ_õæ•Júú¹^ÿæƒQ«1€i™ ·°½ÐÌtÃÿi`«ÆãQÝê“j†²µò–0”m“KêYAØÃŠÞ_B!„I%D9 ã£ø#^Aè‰#ãó:}-bµÇ✬ j˜âÕëQO’Ûn½}ÚõEfƒ˜Ë,àŪ!:(<èa0•Ó¨03 ۥ˼›ŠØ+X‚ã$Náfì~÷èäë"µºmézf[Ëî{†].x£úû¯]Ì«-”gÅWŠ‘ŠÙ:mý5C?ƒ“Á§›P"Î?û’}·½õvý²¶}õš™ýü‚܃ømôÇ*®æ:T@(ŽãˆÆn±ž°† lLÏê?^±U@Wò&–ª +ÅDÁWøµ„ßv° ÷—B!äŸ{KuÐÃÈÞ²¡øÀÕ¼$ú”´-¬t]ÚeoÝj…m‘9uõõ„áÊbß5£ŽÌyr)U“±3Ç(¼‹±z’–âÜTÚAþHùc®ƒ:> ÅÐNÒA‰&h€3¸'d°¬‘!Ô0×°çÐÖgyo µ:o}²x«vû¬®™ß,þ~I2S}RUuQGin¨æÄæäå­fO¥óFeÛ>Á¾¾[/;7®Ul߆ŽMj,ÛÂÛÊ¥;ñsy¾IXÊá Š»ØˆÖAAˆù–yú}ñŒ×˜6§ë«Oûòšk„ ZùéÐÙO{2kæg½p+øFTà z !„B¾!ÏÒ­PQb»™VÄ•ÜìÄØyæ-Ê5ô©²ßïÒ»""'Æ„¤U*¡ /¿ã¤¾—Ïðw< {0kq–&}üîÈóÄçBsÄvÌú²@öÜ8“—ã¿ü­•ÄÚ·K ½^0±÷ÝRî;«7õâ207ÕöÕ6¸ GY*»¨LT¹)¦’Œ_yú^õ‹òq_6:<<õéŠñÍñ-LÇ*¢;Íšñ-<c°çL[ ù¦˜4–˜z¾k»Ì[“GtUxܶYjaúð°YxˆôÞB!„ü+âAá>3%s š”ïè__[åF‘áÏu.,T‰ó»Gé[ØU]Th‰Ü†å±)ˆ7Ý™ý©kp’ÿYþwÆfPc <‹€W¡G8Ë7šUS­Wæ6y\t¡_›§û.mÉKÌ0ï~óÙ%zÎÌÝ;Iê\//cò™Îɜϭî–=xJh×úü;.«ý©L‚÷(—Ï.1µéa3p }…^¬+s"¦ .00…TMø³ŠÑbŽxÙ°q¦§èË_g©$„B!&j¨ ÀKìB?©‡äÄo Ù $Ø®téRJ'a$«‡ëf9ÊÙW²î”‰·;ýìŽ"F#4`»‘#}ä*Œ„J( …žªÛ¿[ù¯ƒd ZLÃyÜçã DU B]TTª³ý¹Wt½õfÇÂ^ Çð¢PÌ¢vÂúÒ§@ÉÈ‚_«}ñá²`TæÈî•ç¨Þ'Žc+Z~ Šõ l8Þ£Ü>å«êï‹­z{gv¤çMëwM>®5ÕòlGUø =ØMlâ¾硳˜2·Ë>Îg ê‘W¸cŠÍMù²óˆÃz×!„BLòõ³hÖOåíÎoêÏ ®Ìù>£Üu·/th0 ¹yldãº6emüZËmÅ*,Bø!þý³À|±37f…[H@7Ô3½ãÕ —f/‹Uôë{Í¢š¼ä|fïç9Ÿy¦Ç8mÉk;ŸÈó˜<©óÎgçöbÚÓªt·øe`û5/Ö^]Xô1ûLJP0Ç[¬ÄuǃV[,†™n1ÐP B!„|äšã¶hˆò,pU?TÝQÚŽܾC‰ü’þ€A©,g™§s.ôF‘ÕÅaNÅ6÷ 7Ùrƒ¹ÑÀ+ÑKÆ¿çÉ<1Yú̳Q îØŠ3B6ÛÍš®¢ ŸŽy~3fm­›öžjаwÁµ×Ç_úÒG•¤Z§l ~¯y¢Z™k•Û-ï‹`. 1Žo»"8ÏwóÉ­í"«Ù_± i¼º~­Â[¼34~*kå\²a€8ÃÊ¡–yÍ`#щj®ùXÀÌŒ™13¸Á nü.¿Ëï f03U¥Iþ6¬„BÈH®G×ÃI‘ f±S½q4·ëɹ¿_hyÁÍŽVÒôœ½Ú‡ð0¬æ®o9zû„ÁÉ8RªÃÖ±j¸‹ó¸…ÁÈ¿ ¹®ENåÍ „B²àø1fƒ­˜.ta¾ì‰ÎÎPÕpð0žáÍ»Ãxvðíù¶CBf,êm(]«uL¿$—Q€Ô×8J7-7]·Õ`„¢ê]ïA&V…ϱZwϵxk“Ø÷›ß|öC-†š ¤øò¿ldódžÌ“ùSþ”?5¥ì2JÙ !䯃ƒ UØEæ`¬/Åòý.§ZæŒÐ~c©ÆЗ3p±šemõêýþW»Ä´}äôjdb$ašóÁü&*˜zëÉ_[®ižx<Ý0Ù¸•×ã'0 µPš=ט3¶rÍÞeOTÑí†n—Ζk³½ÿù2çëÇÄ&E 'D¡²jžæ“JÒmÒÕ¿Î[¦uÐÕ¬s(à£kkEþDz;nVY]Àzœ£Èò/™ÃæÈArðÏñ¼ÀÆ l¬+ÁÊpÖpÖp6å^ʽ”{(„B(„×x×6Bù!)Lk\ `ðƒ-Œ|Cï.¡uwû<ö±´í¡–a‘û59QÆ„i‘›Ío¶cµ˜ ÙM6„­–DIä´ÐCOáü)ä/6ÏD.´X€«xÌg@*¦­‡…Jlc^¸î†¾Æi¼º‡ÓxÕ% J¹çëׯsé•¿4J,8ÃÝ „(«Uç½×]ýæ—ŸÝs³ÓªCmBþ(€ò¦pM¸&\+>­ø´âÓJ¼)ñ¦Ä›B7 Ý,dä–h‰–0Bù`„Äna¢TޝâÜé…}9K‹Igº,/;Áø*csÞ:Õk'³{»œO xþ*9Þ=¥¡PšídéÒTÉ‹¿Gò(eÿÉåå›Ah5Îá–áƒtƒ×`nØŠ©‚Óà&«ŽmuêÑË2ïbïÜ~ê¬sí˜ísÎw=e½/ñŒjƒb "ù›w›-š0ÕlÂnŠ/!ÿ ;ý.â".êVèVèVðkü¿†R(…R¦[³…, !„üäžv#$,FÂÞqéOŸú®»Y…–Î6£U{ùÝyû¯ª¤^Ù'VXêýd/sÆlÔà+ùC C&^!‡I¾‘`k"ºa*Wqfà2ºÂ(Ìc™TžïäªDOyKßNª^ñ{é6è›w›Ójg%ý"$äßÉ¿d†¬`Å겺¬®Ð[è-ôN˜œ09a²éV!ßòÅ„B~,FHàbWa=[/-’üøûÖ…œ\âÚ/ªË ­0ÌÍ+oP±†ªåðEï÷.yäôæÍ‡V)óñ€Ä/R&ïÃs „"’üKr¯…FÓÀÖ1|%…½ÑMÀRIi¹´çòˆ75>ßô¸[÷SUÆPŠ"!ÿw 6 6 6BùáÍF_Ô–¼ùBþ…˃,[8‡³]aßÈ,Ñp;óQÞöDÏOÕ³¬Ö®>²!" 9pB?tFœ†ÔP"Z*’!ÿ¡|[Qó±Õ¨â‹¹sЙcÐßwnã­Ò*òLÿm„nº3ÍçNÈLYYYYY95 !„Œ"Vˆ½ÅD¾›£Q‰>…ʸ†uM¯Ÿ[d‚nYªEÎÕ[½¹qqáuîw²¾>ÍX•{\!¤1f4“¼ø1ä"šRvò?ëÖÁÆá$nrà$n~Óãn9K™+¦âÊ V0ƒš¢GÈÿúŒ“¸Äi HBù1YÃjd Z¦g×Ù8~ŒçñÌ™=bËOcïÅCÐ*}Ì.+ƒ¢Ÿ½Þð%zSíSnÏ¡ fb­Ôœ¿ç'QѰ¦@’ßÃßw¢ÕrÅfa)žÀᨆÄS_;!„B~"ȆVüExÍnÛI…x…Ú—ËÄû}ªý²üŸ逶¨¡—kö\5gQëkŸ¼L“‘››+$²,@ZÊ}¹500H´=ùí ( w8<ÍÕQŠ—¢½ê„b®˜ÉO¡&bZ¢…‰B!q `­˜vc~ÁIÛÍV%5g&uì<§ô=Åye2{ÁN*Š ¬z®þ\uÓ¹ã"4,¯1RÊäC¸54PAA);ùý( 8CÇýy#åÅ ñ‰ÍG³ë/g3Çfç°—h‡z8ˆ ,B!„üeYÁ*6¹²ÍÆ¢Ò~¡î—2¥}ÞUN¨á»PÛ(yHæeE›Êæw&ÔßðìæuÃ@£¥”+,.±«¼®”ËŸÀ F $ùýœ âEy+•¥ØW¼j7Ø,TÓ `XV¨Ma"„BÈ_–*ˆh‰ê(*¤1Ü^¹]qUÜ:·xoC¥÷’UÆŽÜcêv)æÁçl¯oŒ9yù壸xsá´`Ï*óúÒuÞ óÏÎMÈïCbÌ•9 9wUŽx_˜o}جŽJB%HhÍæ²Æ¬§O"!„BþzDŒÂR!—•”l¤p¾qðØVJÚú¬÷¬kc&ùió ¡Ùs3éºLQmîv+QßÚPÄ"脺¬0×! ch>òÇXœ`Çï¢%§,'^­]ÕCUL·OGm”¡0B!ä/È ’МÝg¼–´¹ZFˆn±"äž´]:, cÕŇB/¹GO¹7âe‘Dö•G¢¤’Îò ¦ºvJÙÉB@œ`+ä-1KYX¼"äZ[kú*Ê7³é¨…0 !„Bþ‚* ¾˜Æj@ÏïÃÃûŒhr!ä¨ïÿ4ûK†¹“ôò¼rûoM¬·iÿ͵Ì7ÐGq/` ÈƒŽ–í  ÂV<’à+”Þ¢J\o•¤2*˜` «ˆÂ¸B?$ !„òb+hX(ûˆ9| Ïä™n‡÷ZÅ *ßò|èq½{Ú„œ/ªûn–Ïç>^ä–êÇ$ûŒÑÂ8!–åKà - E%,þ°…ÿ„‰ØÁ* ®l’¥¨Ú§PÉ7³¡(…‚&B!„üE¨ „ˆTd"Åã ëÉs |œk'ór›œ1Ó‰!ʳ"K</µõæI§2_\‘Ü¥p~Œëx#À1\ÇkÐ@ò‡;Xòh>»‘)8 ƒ¬V*׉¯M·D)øS˜!„ò¡ƒFa"Kc¥¼*Ï.1¥PŒkD© ĤW¹Ÿô á”2Ra¹æÉQŸç_¢×¼_™’%¾²:Ò4nËoC„`ŽJÈJDˆXϯÂJˆf‹,Z*¹ø +=P.è ÐïJB!„üðú¢5*’0–=d;P‰­Ô¡EÁkæ‚}ó9Æ_2Ÿæ&Ç‹N¤OX¸cËÝɬ²amäROþ ¬aµ¼º*’üñìj!€E?ÜØ–j^Ha+dÈ7³(ÇÀÁ)g'„BÈÍ æP „[Lell<$õ/·¬X)ñmw×Ûä¥OuÎ^¤Ìµ=b¾jVŸ%›®Eæ¾Ò2ˆB.«€Wü>?†aÈB. E%AC åv†'\(aUY™®ìŒ('†1|> ÃŽ,B!„üÔPA!Ïÿ"ÙI³¸OGY,žªî¾©ü4³NŠ ¨©X`^L±ìù×ϯ~I¸¸ôÕK†$,æñNÈDôT×Nþ\BFývã{!}`ë)Nje5ج‡ø‚/H’ºI=ù/苪(IÁ"„BÈFƒ:„æì6sBqtÃæºÇÊNñW«héÏ–Rívƒ¹±/ˆÇsCw&Ý«q2{M^œ°TÈcex_ {00ªk'úÇ9sµ~¥a±p÷°à½ùi+_uUŽÐZØ,Ü’:¡?Ž¡#J!ˆ‚E!„ŒΊ"뉷ÿS”7Y…S¢«.­ç…y4 TC¾wBJÇœ¹øÈòX¤d…PL@Œ˜È6h†‹6B¶©UQXAI+†B!ä»#@C+ÔFiÈâØl Ãc¶zvP¯âÕj{a™ (Š+â4ïJ¥V^»éؤ§ l/+¥Rã'þÀtêk'ßÿ‡]o|Á?ÀÝxU*)4d¹Ø?~˜kíßXN4Ÿnú$7Âr¾ –PCE!#„BÈwD‚.öV°™R)?¨™]j¸·YƒQU‡ø—Ö§æøë>°âjs¥~rÑͽîŒú²&õTÖF´D3´áw`¦ÔŸïž …ä%Ê;JgÅ:Œ³ýãökÍÃ4uM­:ð­8 ¨(q'„BÈwB.c%ºIó%? ÉÃÞ·~Z²¿¦·ê¥PU< œ.ÚDÚEN¾}¸âµ·¯ß²9¬0ŽÁ‡·Çv˜C%Í!C~‚ö¸ÑRòËyk("-ú0+v^ÁÅ>ļަ…܆·Æ6ƒ%ÔPRÈ!„ò'“Ëw 0BbÖìñKðÃúæbÕu…K5VÅxϼú±á)Š\㊇æDôÂ,ÅR¾ƒwƒ?¦Á·)äG'à87“ædši{êîÂQÖ‰—áe0Ú²¡ò³¨òØ36ÛÔVC‰;!€d"SÞ”Â%½¤—êIo¥·|™¤’TÆ_Œ Œ ð÷pÏta—RvBùo!A¦²tVÞ%5àÜ/Ød]¥cdí„B»Œtk ñl­ºrÿª‡½ž^y¦}»òóHæÈ¾à4Ûò«PAIUäÇ'@5Ô™ãsOk]Á ¬‘Êð’|¬eSårqnÁœ¿þ[[ÆA~v"Dˆ(/xÉ;T‘êÚêÚ*­f’f’R­þªþjVÖ|šù4q ¢ž¢ 0À?!ˆ‚G!ÿG}ÑåøHŒäSàÞ8;:¯Ct™ŠžE½»Û]â} IR“¤_¼³ã–­Þ“˜€kŒ1X‹K0ƒ 訮üȃÚì›úlÀ_‚_€Ã8¡¶w±‡V×Õ+ÕMm¢8 RÈÈO‡™&W¸ÂU¡P¾Q¾A?tG÷9'÷ßW|™î„ó ç±×öÌÙ3çæü{?ì|užÿ<|À¼QÔQ¶R¶ú'G#„ò?3‡ V„Åb2¿Â}°Ìo¡{€Ý…Þ[š,(š­;šž=CáeSܼò ÷­eï.ü¼èë´ìËbSq&Çq } - Hò×`*}É^o°’îó`žÀ&Áì«Ï 9v²Ü`6KnÃF¢6ÊSÈÈOGž2ìNáüáÃsý ý ¬Ál±ÖØV´­¨1h^j^j^šß0¿akQÁ¢‚ò˜z˜zã4N³óì{€fh†f¦£É=÷„Bþsh Dò``÷±™õ@#LÀé)»êË/Ðì3+¥Øªl` 5¥ìä¯Ç”¬dŽÓ½Óoâm¤3¼+V  ÅYûj«5[¯>%·aÝP’¡‘¿”ü³¾lÃ6lC4¢èBŒ#Äøºøºøº„Ö ­ZÇ“y2O¦¬;®;þÞìãˆ#¦Ôî1¹ÇäÏú‡o¾ÆF%G%÷Kê´¦Óšá Î/8oktdŽÌo²ÏjŸÕ!;Bv„ì°··GGtDG\À\ÀvlÇvÓ˜ü?!!äçdk˜ ¥…Ýì«LJs¯ S‹}qû¥é’šMkéf¥ÉýÌDåEÛ‰¶›¦ÞÒøŠW,”½gS‡D|E:² ¥@’¿ž_KeêévRôÎÆÒ$ÑÀJA/„°~ì­BÓMUÀT\BW”@öâ"(p䇧†jSŸw8ÂŽæhŽæX…UXåôÉé“Ó'ïýÞû½÷Û–±-c[F –‚¥àÄÞ‰½{ÇvŽ;.3%S©Î­˜s2çdÞ±/U¿TU¯Ö:i.=9ÒåH—Œ¥Ù–Ù–ž‹½šx5ñjîYÒ³¤£Ñ±¦cM«JV•¬*ň={àý‹÷/Þ¿à]xÞÅ”¾ÏÃ<Ìà ¼À ºÈKù騡‚#$@º'µàJ¬Á4™mî]éƒâ“‘·ÀÒæ…Yɳ‹®™½ûrÜæÆþ7…Ù[6¯yynÍÏ" YL$U¦Ä=ÃV¯ß¢ÿ$µ—(®=ÑÎL€™Í&Í(åI¹ k‡â¦)ð"(pä#5Â#j¡ja36c3¼à/yà©ÕW«¯V_½[{·öníœëœëœ+4š ÍÒ&§MN›———’‘‘ù_QxÀÃi‚Û8·qŠ$u%u%©³ X—´_i¿2óPκœuï…ø>ñ}R£¿fÍö+áçççW`[m¶äyAn›i›i›ù®Í»6ïÚdvÉì’ÙÅôl÷c?ö£5Z£µ©žçûG!=0h¡ƒQÎb™T—»ñmö׸^¤DùŒà².3¤9úÖÆ$m®~ŽnÁ<³Ýíî;ó²º6•À=ã9i"mZb‰¾+É_šDµòrµûõ£zãÅfb0{…•Öê>Ša¦¶­w ù®ýãÏ阎éèƒ>è#¢°'ì {âZ̵˜k±’SKN-9Õ·Šoß*ŠMŠMŠM ‹%,ŠØ±1bclhlhl¨¡¡¡ r‘‹\Ä#ññä Qa3˜!yÈ3U̧! i܇ûpÜÄMÜä#ø>â½ð^x/÷ÒXi¬4V…†RhH±‘ÅFi¾Ï|Ÿù>”A”AB‚5Xƒ5ÿæ•BÈÈŽp„Ì Q|/‰é¼‰O’›Ø„للù4öiìÓ¸@ë­ ´FTA•´[i·Òn½kú®é»¦É·“o'ß–ZÂlÁìÃ>샬`eZ Õ¶°5¥òÿ39¡—“ûb(†bò‰Ì™-2[<«ó¬Î³:ž×<¯y^óêëÕ׫¯ke×Ê®•­ó¬ó¬ób>Å|Šù”è’è’èbê}—ݰ€Zh©žòÃKC2’Y¦Âfý>C cëÖÊóÀø>­cŠ„s÷ŒŽ_[+¬Zš_Ëöu|¾ñµu|ᔂ$\dŸ¥KR  (äg À$TCHæ…ÜYZ®kh`jàû`±Îr©r­8ZÆÇº£<Áñ‰RòÈŸ¶ú¾è€è€˜ònu²:YìýÈû‘÷#×h×h×hu¼:^Ÿ=6{löØ„Þ ½zÇÏŸ?_RKjI øÀ+°+ÐÝÑýŸ$Çù{»ƒŒ`¹ÙÈF¶©,G–ÿ^‘ˆD$Z Z`+¶b«TB*!•ˆCâ>2}dúH¿5~küÖ8Œví0ºÈ¢"‹Š,²ãvÜŽÇ”)S6O‘§ÈS`F`’‘ŒdìÁì:èèã@ù±*l1[ -³}ZUxR·{-FVõuj^rU‰‹Yo´‚!)Å.U‘¾cu§#åw¯6Þ•Ìy–+X²(,Ál¥’Ÿé„I†çåíÈ€AË›Oàú£º¯ä|Ί^«Ï¡Ëû:c% 0cœ ‡laEq#ÞGöJDvb'vÊkšÊ; ÁB°poêÞÔ½i¹­å¶–ÛZû`탵VŸW}^õyEöÙ[d¯Ån‹Ý»¿9ÎìÀ”EY”5íù“32sfÎÌåí‚õ Ö/Xÿ‚î‚î‚îvÈíÛ!nÜ:¹u2µlıFßÜ9ÿ1ë¡êa–a™¼C¬"V«ø)ý”~ʪ¨Šª¨#Ôêå+•¯T¾’ó5çkÎ×¾9Ú]ÜÅ]8ÃÎÿós&„ïŽLñZU@å*ï˜*ny»åæ§Oœs~ÅVׂóȃœs¾øþy\‰—ÛˆgW7MG!Ò7ù¹NšçHB*‚à×ÌšúšÆP 8>”Ÿ3›§²Vº! élŽá<æ°шGþù{¾ÝáwÄ 1è„Nè$÷@Ûž·=o{>¤tHéÒE6ÙPdƒe¶e¶evêÂÔ…© Ÿ> |ø²í˶/ÛfwÈîÝ_ð_L½õ]Ñ]ME)2¹ðæµC;´“7­OXŸ°>!n7‰› ‡ ‡ ‡¹ÈE.šZÊUïùå?æyœÇy Á ÁR,ÅRã5ã5ãµ}Œ>Fÿ´øÓâO‹§lNÙœ²Ùò‘å#ËGE}TôQ‘±EÆ«j¨j¨jhú™±K°Ä´t”||ª€'„|ÿ$Hà¸Ç×ñùh 7Xf®M’.fµ1Î2¤ªîÞd¯QÌãýYš:ÒÚ¼Þ¬)Sb7r›°€Jå©# ùYÐ@‘ø€ÄÌkúåÆ…Ê¢8ôÒu.™¯R Qt7Û î©l†Jx†x6P™Gþ°Oèßûå$õ2.ã2€øÁ~æÌ/˜_(²¯È¾"ûÂÆ† ëXϱžc½œàœàœà¨SQ§¢N=Â#K}‘‘‘3/f^Ìâ#>¢š¡Ùÿ±gZ ^H/¤ü¿ÇïÉ“E~S¸òŸ?¹<ƒ»¼®êB,ÄBãã〷ƒÞz;èi‰§%ž–H÷N÷N÷¶ŽµŽµŽ-6½ØôbÓ;vì ¸¨¸¨¸húy#/)%ÏX/ŸÒwBÈw†%á&éãÍv³Óã¿Áu¡µ¯¾‘t@_Li÷éžäÎ;˜{3/7''' p‡-žánÒ |ò³ž6wðåí-9m×xÅù̺=*ócÓ}º•Žë5ê`»ä‚ל¸CE¹Ðеe(nä·þ æKpP@¨X‹µXkÚ_eQÖþ¶ýmûÛ%”xPâA­[µnÕºU«f­šµj–ØYbg‰õê;ÔÿæÈŸð ŸL“*š>Äÿm ËŽ²£ì¨¼]ݾº}uûk¸†k¸ÒçJŸ+}\»4viljY‘Udÿ× ÿh‘É¥î·q·Máy x xP°HÁ"‹ToT½QõFµ+Õ®T»RéK¥/•¾äðÖá­ÃÛo޶+±Np‚Ó?‰6!„üI„A,ž•· †zL³¿úñÁÑÎ÷Kµo¥úðqÈq6xL±=–î¯'•\U@hÅ1_x£ QôÈÏI‘ÿ?Ò?iÇé%ø"|½t‚gš-T®Qܰz¡>ª”O’›˜Ú(Ø‹S>òÈ_¹€˜ªÌía{\Â%\²ð¶ð¶ðö)çSΧœóQç£ÎGÅGâ#ñQVtVtVt¼.^¯Kä‰<‘K§¥ÓÒiTFeTF}ÔG}Ó Uy¾ù±þUåú÷C.¡‘ŸíU\ÅUÓõƒ8ˆƒ†R†R†RшF4¾nüºñëFÿTÿTÿT[[[ÿà.Á]‚»¼ÿåý/ï‰]»2v¥a a a <‡=â!š&¸Ì¿š,!„ü‘TPBd›X_øÂ›û"&ð³gmŒkI§µêR8‡ëÆž'D6ˆ_øjÿ›í÷IŒAna04xIBòsú¦ß1}b^eýp‘|áÅkf*nˆÌ›+Å&r6e~»ƒÿòÓ'@0­ *O¼(µ‡=ìmmm½_z¿ô~á^ƽŒ{ãEãEãÅ÷!ïCÞ‡<ê÷¨ß£~ Rg©³ÔÙ´P‘\í=1Ñ”²Ë~«K«ùûì›  šÀv°3 –ÍÿˆÿüÏVDÛ-ÑÒô³daQJÅ”Š)Ï{<ïñ¼ø=ñ{â÷ȃt}Oùžò=Ú?´hÛŶ‹m›V•Sö9˜ƒ9ßü< „?’Ü`/Õ•¶qwÄáÒJÕ*áf(‹ù€r¢Ò*²lܳ¯†C’Ÿ¬ì¤($Ì‚0 Œ ÿÈÏë›~ªMn¼ö%€‚p•ªp_ôМQœvXtWº(6˜ `¥QGþ×X¾2y6•A„A¦¥ŽÎã<Î;µtjéÔ2¬~Xý°ú/¼Pð‚f¸f¸føg»ÏvŸíž>{úìé³W ^-xµ@;Z;Z;oðoL}ÒýÐýL)éï׳žoÈ©ÔBj!µà;ùN¾“]`ØyQ§¿a¿Í˜üuð×q×1ó1_^J]]ýõØ×c_}Þîy»çí2eÊ8dgcgcgr6älÈY;;;q–8Kœ…q‡qXõXæhŽæ¿ñ³%„ÿ™œaÅ£–ã,ö`EV\åÑ ý$i¥±\V]૘âiŽè‚&(/õ’nò¶¦¿ü»¿jJÈïæ›R™Ô{9òưÂ'Þ‰WãUy¢™PÆ,GÙMTa°^(o)xä?”¿FTLÇtLÇ—ð%|‰ÜÄBi¡´PúÔó©çSϹ¼syçòâ`q°88«UV«¬VqÇâŽÅK\•¸*qÏãy<°pgqÖ´"©<ñâS ÓmÐmÑm­«YW³®&>ˆrîçÜϹ/í”vJ;M-å…™~+ùûà?ã3>›Vfm…Vh%ø2ê˨/£ÒcÓcÓcbbb]Â]Â]Âý²ü²ü²l&ÛL¶™“““œæ˜æ˜æh:šOyH+­ÆJù½µAMÁeÎv€YR÷âÏ(l„|38µ±_ÐgßHÎgêzœÍ­9éfçPž:·AøóŽãB—˜ÖeTL:±{7òï>XùzÖ=á OSáJmÔFmy·ÊMå¦róíìÛÙ·så©•§VžZ;¶vlíØª}ªö©Ú'`IÀ’€%Ê(e”2ê›#ßÀ Üø—õ‡ª U…ªòv»Éí&·›|[s[s[s2õdêÉTÇÇÇÓSóa>Ìçг¼C`û¦×Üy¤óHç‘å:”ëP®CºuêÖ©[uBÕ U'øúú O…§ÂSSSùºGþ%¨¨†òÛ!@ÀV0þð„Scmå‘…Î\Þ6$’ó[É#&<¼±±R§‘rsvˆÕ !²ozÜSJg?Ì}†¬3<%-ÿÈgÃ\"˜YD(¢År¦Sh *¡€<òOåò81_ñ_131Snâ²Ûe·Ën¯#^G¼ŽØô±écÓǨ5jÚÏ.Ÿ]>»Ä5ˆk× ½izÓô¦†afJ(åúìJ¨„Jßô ÿñ}Ã:è`ú)ËÓxOã·ùm~›d#ÙH¬À ¬0µü½ßü¯q‰K\2ýLºû¸ÿyáç…Ÿf8g8g8ûŽóç;ÎÅÏÅÏÅ/àUÀ«€W¶ãlÇÙŽ{;öíØ·c3»gvÏìn:Ú\ÀÓ„’ù_ õÄBþFHØ`fØÌߣS©ˆBñÎ\©«h„A¼¯z7ýUåä €–([¡–Ó}S $!?1Eþ¤"9=++Ç¥PùR|Æ}¨P –;Õ³•…áà1ïŠUØC°†>#ã7„G~tòr?*¨ B2­ØŠ­¨‡z¨'7±c9ÆrŒïA߃¾ øð-à+ŠÓ¯§_O¿———Ç{ð¼ÖaÖa6a“ièjþ$øÏMó?“¢(Š¢¦’ù'J¾´þ%ÇD~nòÏ$ù¹€ ¸[+·Vn­ÈÓ‘§#O§¾L}™úR.žqšà4Ái‚Õ«=V{âÒãÒãÒß?~ÿøýc^WãÕXiVš•ÆK¼ÄK¸Á n¼ /È â$Nâ¤iâN ´ !ä?TåÈa 6`7arÉIo8LÄ6ÅA¶+Œ•øûcu®ŒZÐÀ-Q ”™‰È…^þÝYc)ÕXÈɈQ,‹ù‚K9ü¾]ªyOÍsXâ!Hí¸Èƒ /¸â4žã ‘ ±ˆýfO=ÔC=åRåRåR/£—ÑËèÁ<˜SmUmUmÕî×î×µˆµ's4¬5¬5¬5ÍÚ.Ït(lÈ©°[°[X:KgéòŽÜC¹‡ri;i;i;I¹R®”«{§{§{§sÒ9霴SµSµS¥ŽRG©£éIHB „ÿÈ6LA C7cEÞNqU&¶«âÖÛ»ס™!x~ñWÊBƒ¬„Ö|¬ùXëÖ%¬KÀþðG]ÔE]„"¡¦ éqÂAyæÙLÁ¹"Ÿûsî#8‚#¦[¿·º|ù]k€hØÀ†_â—ø%«,«,«¬°›a7ÃnzõóêçÕO¥T)UJƒÆAã ¹¦¹¦¹f6ÅlŠÙ1P MÇÌwåBþglºè†Õxc{Ð2^]¢\^‘S.}QBJ—¶~9ûeD6^nŽ;––‚çˆG¦Toå5iRZBò¸œ¸‹`¨cÜÌGdÚjç" gíY,D>†ëm®ir”mUwÅ A''!¬8œ`Cáû©™Ãæò¦RTŠJQe®2W™«z©z©z‰-Äb ‡¥K––èT¢S‰N…S §NÕ|Ñ|Ñ|AT@$#É8Žã88üí§àõ5-¥•çÒ)ƒ2(G8Âñ»xnù#)?+yøì)œÂ)¸Â®…< y 9r,ä˜Ã ‡72ögìÏØ#[³8fqŒwŒwŒwôùèóÑçsVæ¬ÌYi:æ,ÌÂ,:!ÿ‘ö¨ OX@ Ñ©·íeóYOœ,ÍÆ#I¬%ž|Y5¾YŠñyÕ˜I/ØiV§¥D© ×Ò´„ä§@$’#¦k+…J‰éõµÅu ¡ ÌI:¦¿#eXSÍUWÙ-/q~°ƒ%¢(€?±ØùëlþO‡?þt¸øIü$~âá<œ‡3+fŬ_9¾r|å~ÇýŽû¯™^3½fÚ-³[f·,~UüªøU A A A¨Žê¨Ž;¸ƒ;‚!‚»¸‹»ßÌÿ½É—³¦¬)kjêeߎíØþÍ;ÖŸœüs®Ë+ËÎÃ<ÌC!B!åTåTåÔ‚u Ö-X×u™ë2×eÂ4aš0íóñÏÇ?=ýõô×Óó–æ-Í[j:š<Û¬Ú¡i{:¦c: „C D¨ ‚£*#¤ú¨’}ß §j¡€Š˜õ¦a¢̊ÆSÆþÆhEÌ‚ ‘ÆIœªÛ ù†‘ø„”ƒn(mlb\q9/V7åØdÖDšÇßsgËVJkÑBÑ[x-Ô€/l`Fáû©}À˜ª·3Ûf¶ÍlkÚ/'߀´‚iÓ ¦ø¥ø¥øy›y›y›9v<ìx¸ðŒÂ3 Ïpttttt|·åÝ–w[2Êe”Ë0-ò%OYˆÍØŒÍx…WxõÝ-ý£…ZySz =`&`›È&²‰(Ò(p„#<ÿH€?”ü³G.ã‘N4DC4´Ï¶Ï¶Ï.\0¸`°µƒµƒµƒ\Åþþæû›ïoÆŽ={XZ*-•–²…l![ˆOø„O¦ë D Å_ñW؈Ø%”Pš&$„EŒEœp+ñ¨v™R‰žñ’Ug7ÐTÛÀØøÆçºOj´E—B¥ch‰hx@4Ý—Pà)>!…P6¼1ßÀ[§7ʵ+AbÅŒ«xne9N¹[¼®˜É>3oÌoà +JÜrù“éc8†c@Ló¨È=åÇp ÇRg¦ÎL™¶1mcÚF÷ëî×ݯ{/ò^ä½Èé‰Ó§'¶glÏØžùÐøCãc—Ç.]nô5ú}á Oxb/öb/Ú¢-Ú~G¯=Á–75]5]5]…­ÂVak^á¼Ây…ÌÌÃL-åÄ÷÷–ž{¹$æîáüà?ÖŠµb­|júÔô©é¥öR{©UUTUTU2×e®Ë\%EIQÒWǯŽ_-ïY‹µXËûò¾¼ï¿y\JÙ !ÿ‰1èŠêüwÆXu••bNñŸÉ¶SQ„™ãEÆšì]±³uïlxS¯CÒ ~÷ÂRp‡‚GH~ ŸˆO²Ó²Ó²Ó I†$Cæb.æ" Hø=ŸJ¾Ùxä ûq‡qrÊn>Ñ|¢ùÄ€ 68q:ãtFZ/­—ÖLø˜ð1!zSô¦èMº²º²º²xŽçxnšç§/ú¢ïww•ƒò# € 'X{ö^šÇëñ7Åæù—q>à ±63[ -Äß¾ž|>§ÿ'¤tÌúˆ\Ì€±)x„ü³Sêâ‘(,`)ì´ÈFVêðœW¹+!’•ñ¶|!S ;ñʾ¼ù³_ë\­  QÞä '|rÁÆp ÇpÔFmÔÆœÁ™ÜÀÜÀÜÀÈr‘å"Ë=ôüÑóGiMÓš¦5µ±±±±± š4'hNÑ5E×]cÑÇ¢EÓê¤rÊ.WÃ{ÃÞûÿÁ‹q7pÓŠ¡¼ïÇû!ˆ`;ÙN¶“U`XSÓßc mþcª¡†ÚôÃFîeoŽæhîìì69lrØdçêÎÕ«çIyRžôz×ë]¯w½8÷âÜ‹s¦”= iH3%ýñ)e'„üf$HàÂpá³DUu¥ÑÅsÜ|lÞÙ^23à›ßkûžLüEªÍWðâØ‚(Ž$¤ÿZŽHÉO¤!“åa†è‰ ™mµ·ô=LÍ*#ëð·ï`°¬nöëÊeôü'ò-•—[º‰›¸‰®èŠ®òL2I‹“'-N M M õZéµÒk¥ÇC‡Ý=Ý=Ý=m›Ú6µmú!àCÀ‡€øàøàø`^Ž—ãå°˱·p ·ð ~Á/ß”‹üÎcŒýš:;Á N¦udåyÍó÷ëjÄ¿õçK©å’yÉ*'8ÁI\$.ùÏòŸå?˽œ{9÷rb„!F$OKž–<íMÍ75ßÔÌüù!óƒé ‰ l`[ØÂö›G¡”ò[©r(ăy5ÞW13Š·ö9bçƒý*gA»°Vç&ÜÕ¼uGwTÄá£PˆÕúIQœæn'äŸäT€Ã¼wåu5ö“îã«ä&5`GØ~ÖÖHEŽÃgó½f4¾›üwä øm؆mX‡uXÇLÁúnúnúno¼}ðöÁ“ãOŽ?9ž””dhhXðBÁ /”8RâH‰#vÍìšÙ5Ã` Æ`Sʾû°%Q%MòGN(i kX›z¾ßã=Þ#9Èù]KN©'c2&›êìà'OOϰÓa§ÃN{5ñjâÕ„Y3kf×*®U\«ˆW¯"^™Rvù§Å#<Â#ìÀìøã¯WB~¬9Ó`Ÿ±´T’ϰoe3Îbmp¿‚Ówà¾1ÜX0míW}^‹7U|Ò]‘„Tˆ88X#Z?CÈ?#˜R_ð_ä]9Þ†ÏRØËI•„lú<©öMÌ/kNPÈÈ%on6²‘m*;éþè/Ï'“Ö(­QZ£§ê§ê§ê—[_n}¹5§}Nûœöö•í+ÛW   Ö¸iÜ4n¦uLïã>îã®ášéQ~·””K\â¿öëŸÁœ‘gs—KePQñogØÿý9äÿù!÷‹Á|1MÂx —pÉ3À3À3 ø—à_‚±[i·ÒneŽeŽeŽå‹/¼Ï›ò¦¼©i–/xÁË4#еZ-!äÄú1K¶B¾ªçSÃé„ùð•oUÛ«(m¸l¸÷nB`êŒOÝ¿¶Ë.0ò^”O¢¸òoˆÏg¶IÞn˜äãóÎxÆþµñ“_w~ÇùÌÇ=6O˜P«EiSrÏÎ »)nä7“?I]ˆ…X˜ÿF³gfÏÌž5 jÔ´Ú­j·ªÝª}°öÁÚË/+¿¬ü2×E®‹\±¾¬/ûu”wx‡wòMSêü›öÁ‹!bˆ"oOÑLÑLÑ<Ë}–û,wžç<ÏyžŠEŒ"ÆÔtva× yrIùÚ@µBµBµ¢è颧‹ž®9®æ¸šãj©k©k©ƒcƒcƒcÍëš×5¯kºï4LôüsàЄ„ßüÛ ½Žéè…ŠêÏfõ4O‹±‘1ƒ#5ºZiçé³ò¾ìx}8ó^J™ª†UUB Â^±¦XBHÈ¿>½dýù<”73êhsõéÙ{õÑÆFâ ¡4{ à1¢mÇk¨«RÈÈï"ÿ`Ö‘‰‘h„Fh$/Æ”[<·xnñÈ£‘G#>w~îüÜ9-/-/-Ï¢‘E#‹FAfAfAfÅ“‹'O¶fÖÌšÁ¾ðE bƒË¸ŒËòÂCûÔÿ·=ñö°‡½é`W„+Âa…°BX¡ýªýªý* ‘†H¦™ìM«Ãþ'ò§Ôò3<‡s8gº’ÐíÐÎ~‘ý"ûEa×®…]ssssss3\2\2\Š^½$zɳ³ÏÎ>;›s6çlÎYÓ0Ó­ØŠ­xЧxJCN !¿;ÁtƒCKØ¢9ÊÀÅPÊX„«íê{Tñ*ÛQyÞ¦¶¶ f¥cEcËÒöwUÕÍÕÓ1‹°ˆ­ÀÜ0Mþ‹@ÉÇ´4 _‰»ˆ–{å²ûè6ç5Ä{Y†«’ÅM&Am[H³XiO!#¿£üƒYOâ$Nâ.ມºÉEÉþÉþÉþéËÓ—§/÷°ô°ô°ôŒ÷Œ÷Œwѹè\t6Î6Î6Î #F$Œˆs‹s‹s3V5V5VÅP ÅPÓì4[°[þ«Á¬ùï%— ¤#é¦yoäg~Çqü?ú‘?¥–k呈Dùç'ä y~3ýfúÍôØá±Ãc‡’)™’¥mHÛ¶áM‡7ÞtHíŸÚ?µ¿éhã1ãMÿòó¤”òÇSö¯h+t`ÃÅ¥RÜuˆW«ç¥VZZᢔž›)Å E0ŰH»XwTÚ+¼WR•R½EQLÆFîÇËñ²¨‹º¨‹³8‹³ô FH~¿¦sqOäͬºDýؼцÆ#ìª`ÁnxŽXk3õvÅ ùƒÈ_Óò¥rÏñÁy~°~°~ð;çwÎ<{òìɳ¤âIœЫޫޫŽû]ô»èw1,3,3,Óq‹ãÇ-XŠ¥XjJÙåU?+£2*ÿÏÓ®p5Õ ŸÀ œ@ Rò¿è×—_©üÓB®×·‡=ì-oXÞ°¼ÂCx÷¹àsÁç‚°YØ,l~¿÷ýÞ÷{#¼#¼#¼S‡¤I‚¯øŠ¯((Ù˜Ùÿäø„òûQA Q^MYØ(蘟q­TŠ»VYrÏsÍä[½îV(lh.>Q¼ÙK‹³êš¡¢òžÊ³hëb¬˜Êq‡Ÿ…‘eJÙ÷`ö|ó(TìG~z¿ö¸ÏÅeþ‡ Â3»Ÿî¸Þ.w˜¾‹¡ÌØfusÏ`}ZµK9¨Da#9锿¬3 SŸtOôDOøÃþéãÓǧð4ài€Ë—).S|Þú¼õyk§±ÓØi¬×X¯±^ó±âÇŠ+ÆÎ;7¯r^å¼_Sv¹E®#—ý'½;ùo}€x ÷¸3sfÎÌQ •PÉÔÛýŸ¤ïòêª.p‹¼Ãµ›k7×nþJ¥¿Òl‰Ù³%9µrjåÔzûèí£·>õúÔëS/Ó}â(ŽšfµÏD&2iÈ)!䥀:èadeðK¥Ò’=dÿÜÆÆìåÚŽ#üjM²éoÖTjªÜò¢ÑÅÐÜ}f›,SïfÒÍë× ×vçK=zºØà:Áu’F~ÁD•ŒÊ‰Ê1´7´7´7}³É]$YÈBõÁ“Ÿû„“Íåqy( žõFÛYÿ8¯‡†JøÈ|ÙG€㯭««BÅ·°€ó`€‘.Á“?Ì?~Æä¾s9=]€X ’FI£>â#>"E›¢MÑú ñâ7Ä9Æ9Æ9ÆËàeð2Øs{nÏãîÅÝ‹»—˜œ˜œ˜,•–JK¥ñ/ñÐLÕáÿ3%”PÊ›,‚E°ù^Æcˆ1{±{á g835dþ󥊡˜6>6>6vkíÖÚ­-\ªp©Â¥ Ô*P«@­˜O1Ÿb>e¸d¸d˜z»M‹:…#áxxñOþ<È“*ʧPKEKEKE”"J•|9ùròe©°TX*Ì\™+så÷ù}~ßt/ùrZßmÑVž8ÒfŠÍ›)Xp Ýz»õvëõõõßµ}×ö]Û¸kq×â®I¥‹ÒEÓõyù*yé¥?pÙ)Bù†Ü×^ Að ñL4ÆI‰üÒÀÝ­P2®cÍbárR…ì«Zí<©£pÿ¾Ã‡1ÆÖ…·…V)sÎëêýÄÉŠjŠÏ_*$wHî k÷¤Þ“z…Ux”£«cÇfÞfÞfÞ¯3_g¾ÎL¶J¶J¶‚ì`g꼘€ ˜@é;ùY¹ÃVbË`áò޳§»Ü«Óó9ë{máé3ìºW¾0Ô¹e%¤a;áz¡ÊÂî<ò'Ë_õ(¯`Ú-Ñk°käÝ /…—ÂË·§oOßž•ÛVn[¹m›:6ulª´ªÒªJ«€ºuê*Ê(Ê(ʘŽÓ=ÐÃ0 ÃL{òÍo ö{‰¦b•Ùïg¿Ÿý>ªATƒ¨ý½ú{õ÷’‹yXÖ‡õ1Í#÷ÐËõúòS>ÅN±S>Ö>Ö>ÖU4U4U4µ µ µ e^–yYæ¥Ã`‡Áƒ¿y1MϪ< !.ñïWù„úì*³‘·Ã®^q—åöõ [ºaWFéÂùíù#1éf÷Z•öÌ+·`Çâ]ý{TªÆýkô”°˜ÀÓwšÊCå¡òîÜ%¸K­uµÖÕZWmOµ=Õöx÷òîåÝ뛫‹«° «LÛ (þVA@ÈÏC1JhÁ.à Îp>ìÐaHÍÜÏÙØë*?:ݻ۰ؔ+ÛTµžc¶QÓÔt‡ÌÆ`ŠùŽäOjå4W^+4«fVͬšO-žZ<µÆ¥—j\ªU+ªVTç2Îeœ ذ/ðíìI ° P`š]ø›ÄýÁì³D…F…F…ößÙgÿ¦'ÒŒ5cÍLýërÏÀü¢ùEó‹¡½C{‡ö®Õ³VÏZ=k.«¹¬æ² CA‡‚©æªæªæšW˜UUPÅ´‡V9%„ü¹äu1d§±}Y)|ÁÕ}¥QñþÁ‚ oº8r~£Ð°mœßZ9bñíÌÄfmÕíÕfª);œwì¨÷ ïÁÙ}Jù”ò)å#†ÕcõX=Ä#ñ¦=,úùùÕ(R£H"5u5u5uEûíS´ªªê×é}啳ÍasÓêÚ ñSð×ÿg`|n"IøŒÏ™›õÆ"¯¥\Á{ò1jg±·pÎÖѬ z€Üž-E Ô¤ ’ïHþ ¦r‰œàdꃅQ•y$óHæ‘g‡žzv(²{d÷ÈîÙc³Çfµ)lSئp±ýÅöÛT7¨nP]ó2æeÌ˘Jqä¹@%ÿ´•š|ÿÞà ÞÈ»gœqSIÌ,ÌÂ,ç·Îo߆õ ëÖ¯@vìÙy5ójæÕ|µøÕâW‹#¯F^¼ª««‹+¸‚+ŽánZ –†œB¾$pŒ@GTû gÙcþ0jú‹ž«+ªKŽ,Ö²Àv@šÍÊ&>ÊZ5À¸øØ…Û† CGã ‡KAöm¥©Ò]©HÊ•”+)WLÇ4ƒÌL%ˆ»° »xâQ1‘1‘1‘/о(ú¢¨ÖLk¦5s?æ~ÌýXððàáÁÃ-ßZ¾µ|kš‰ë=Þã½ib€ü«‚ò—#üíTäà8Ç?"MÞ‘yO̸@G¾‰Ûòž§<¢(/®µ 7;©–Lí—²æ¨NA$ß©üI¼<•¤Üw.¯':0àSܧ¸OqS¦n½TQª(Uôôô :/tž§ÊSå©f 3…™B‚Øcö˜=6ý™‘/ÑÊxäé »£;ºKG¥£ÒQñ”xJ<8&pLà˜ /A_‚¾˜ûšûšû¦(R)Šÿÿÿ„¸„¸„8SoS4@TC5T3Í6ó¯…BþxrE»%,`&žœX}c¬tœßmº°òêÀëcœ:F•jc˜’7^oÔ¹\1§ß¼%.ÿlþµOV¼½»ý#»žÊ"ª›ê%9or"r®dÍþšýÕtä$ ÁÔ=ÑÑ@€¼&ÆçŸ|>ð´ðÓÂO § ©Bª`÷Ñî£ÝÇ÷÷wyú8ÀHE*RÑ ÍÐÌÔ½B½ïä/çÛËî‡Dy3c´îƒáry Œæa˜Î×*+‹qBëJšÇ*g¹ ›z¬<‘üò‰OÁLA)”B)<Á<Ñ]Õ]Õ]*U(ªÐ³»Ïî>»›²'eOÊ‹¾}-ú*U¨T¡RÁyÁyÁy¶*[s[sC„!Â5,“e2oáªp•/D7t;*|>0²3ìŒuë6ÖmB³BsBs¼*xUðª€9˜ƒ9qRœ'=õêÿÔ?«lVÙ¬²ˆF4¢MºNáN™úŠ(Y'„|ÔPB!Ïö³Zxh|--áã|Ǹ²K]¶ep‹j ®®˜fq_3viïý^O²ŽW¿Q#ª'ÛÏ"ª°Õdëe…—‚§õL Oëcègègèg:¾|%SþÆ“ å«—áG8˜À„Œ/2^<™üdò“ÉIK’–$-1{cöÆìMÐÆ A}û<öyÌZ°¬…©›FNâó‹ROþ¾ÌqÑø(ofÙiÏê—ÁÈOñxóŽØ¥ru­{«?©VâÎlj£€%xA¡$?€ü³ÂßÀ Ü0-ZTuP½Ð ½¾VýZõkÕ E†"CáâçâçâçõÑë£×G§"NEœŠX²îbÝåËÅ/þ_ü_6|9êå(ýð\Û\[eC6˜ þ0êÝÔwSÕfÂTaj‰ˆ’ÅJS•UžRžÊ*U9«ò›eo–½Y–˜˜ˆó8óƒ1ƒ‚(ˆ‚ß<Ïü¥8„òg‘]-ô0àv¢:swôfj¦dc×­9½ÖrïLU1€gðZ·µO˜9½ÙÖæ7m…’‚'ë*5‘NòPËú–̲¹xD<&žÊ~šý,û™á«á«ÁÔãÎãx3õšç/LD"9çœs,Æb,ÖõÑõÑõyîúÜõ¹«_¿>~}<;yvòìp*àTÀ)‹¶m-ÚFeGeGeëíôvz;ä"¹ò’v¦mB~pßô¸óÙ¸ök þeuÎígôà˸‚ÏÇU¼R~§ ¬‚Õ¯”KMwª¢ ’Ì?ÖÁŸÃ9œ3ÕJ~À|0 ƒáý÷>Ü{ó(æQL¼w¼w¼·òˆÒMéæþÖÕÅÕ¥Zɺ ê6(˜TÊ·”oN+³úfõ+ôiìר¯]Ûþ†þeqq°8øÓ”O>ˆ¸q3â¦)e—+æåÚ÷y˜‡yT‹IùN‰!`ÂQWLª±pêø4ÍØ£r¥µ3+8ø,5dä Ñ{'HÙš‡ÞýæO:¿>;,÷¾î ›ƒûÌ[>Œ ³1Úä*;+»(»dŽÈ‘9B_S_S_Óôí'_uüGòwµ\Ž(ù™„I˜dL4&£oFߌ¾ùÒá¥ÃK­R«Ô*ÝÖ¸­q[º"tEè «±Vc­ÆšŠ{£7z£=Ú£½éÈÔûNþ„²¬Ú¯ Mëþ¡¿27Ö™–Öí½>pÊ„.Í9Ÿ9»§O¯Úe—­g:£3…bìÅüEäÿ*oÖh-“ÊßÄÕÖ-Ì-¬ÈÜ€£Gg §oœÆ9ç·=ŌŢÛsÎùumæÌ;îÃ]û»öv÷„{¦;À0Õnþã#BÈ÷èäMaÓ³’òvýsåÊ}9o˜½®×¥3ƒ‹s~«ÉÈÊžÔ^Ì4Y…)³æ‚F°lå=ÍŠ7+Þ¬øÃ¬‡Y³f ³…Ù‚-D ¿&ëù¦îý—þñûy$Fb¤¼Ãf³Íf›Íe•TfPÂu ×)\éA¥•8sç<î›ã,Æb,þ'Ç$äGÄ^1 DÊÛµŠõ ÖÛN=Û5U·nJÝ.¥yÚìͽV ÝS¹nH-¹¢·ÐQ‘ ù+Ê?ñ¢ÜO3ƒ0ö¬+ LŠ E»O½~ôúh£±¾±þíky ó>Yhèlè|Pó2ûe¶é¾˜‚ýÚWôG&„ïM¾ Ùh懓ò¶‡S{ë#qm„öÞÈùµiCçs~·ïÈäõÊQ×ë>’ÛˆÕ…!¬ ¾âÆÃ…aÂPy— ]*t©ð´ÊÓ*O«Œ-8¶àØ_‹åøù¿!ÿgùSí(€HF2’åªUˆ*¤¸¢¸¢¸¢VíZµkÕ®¾¬ú²êËÂÂÂØ=výÚ²°ÁÔ—OßÉä;Aó[Ão BÞüÚ,ǘ÷Õ8…/篱 _X Y1K£’‰ Líû£<è÷*ù Ê¿2«<ŸúYœÅYe®RP Òdé…ô"»}N‹œjá”pŠÏc7ÙMÕ\q»¸]5Ȭ¯Y_´Aô`ÌŸù›úxh•SBÈ÷Ož7.—0M8Ʋ»ŠeŠÁ ¶bÓP󚟽~q;`•°ìÀ½ÓO¶|.=*}íºk‰¬7³Æ&)NÇ›Âu0Ð]äCÚºÛºÛºË+Ñ}½ñõÆ×¦…ꦲ©l*"ñkîñoä/tü‚/øG8ÂÏð ÏtOtOtOž+ž+ž+bô1ú=Ê£<Êû$ù$ù$oQ¼Eñššš¦µ±áŽÁ V°2“úàÉwïÿKÜqåÍÔ™9fy)Ò!i3æ{ ‡=D¶€%ZŒT8 MŸð~(ÊÜhÞ ò—•?ÉŽB¢¤GÒ é£úéÊä9å9åÚä^ν, 3.6.ÎxžÙ&³Mꇤ¥IK¡Bò0ä#ivBÈÀ j(Qað» 7Y®ñ•´‚Oôªå•°Ô¦Æêþ7ŒmuM ˳ûå67‡÷œoy®fºyæÎ܆˜‰¾¨Ícà‚žr=›Çæ±yð„'<í[Ø·°o¡z§z§z—Þ$½Iz衇^-ŒFã9žãùõÌ‹£8ŠcÆa¯Ê«òª1Wb®Ä\‰*U&ªŒN¯ÓëôÎ÷ï;ßÉÉɶ‰µ‰µ‰5M¿+÷ÙûÃþßL`@È`!À4½£µJ½^ù9#sbNÅ´G§4é2–ó5ú´_®j0«l;˜ÃÊ)ÂCÁÁt¡‰Ÿ¢8X,FÔC½¹~sËÎ-#½ó~çÝTÓ´`Ó‚…åX.~?ˆè!ä ‚â×!òBIv„iäíJ·CúzÏ™u!oH¼áñå僷ŸßÒŒøÒw_³ó%L½ébsa6›„( X *”EY”ê u…ºr›…O>Yø$Ú1Ú1Ú±A»í´3Ý÷²xY¼ü<ÿüå.eQeM«vìfÙͲ›U6¬lXÙ°ÚfµÍj›UZyhå¡.Ÿ\>¹üºVFtALÄDL¤ùž}›p¿BLÓ3åå ó²Îé«k ¯X4[H¤¥V35ÅÔW‘ƒldK‡ù2麢B)”ä§ OÔ(_ñ½…38çóV¼óãoø^‹\Ä Æ`¨ ‚Šæb'„|×äÎ 0²ÒÈÁV)œ_ä>ö“lz™Y«ѯf®Ùxµ=ÅP›jõ®B§Æ¿nºáÑñ}OnŠ …l•q†Tkñ¯ðYÈ…s1s¥x)^ŠˈeÄ2–-ZÌ Ì Ì Ìh˜Ñ0£¡éÑå’•ÿ^þâÆ»¸‹»XõXØ©R'¤Nˆ˜13bfÒ­¤[I·Ô‘êHud‘E9àÓ˧—O/lÇvlÇLÌÄLÄ!q¦£Q<ùÎ|ûqÌ7s4£HÈl¤d<+œÁC,¤V|¯ÕsÍx•#¶ànIÙ<ÅÑ¥Q”BI~ ò9 0À ¶°E3 Æ`$1gæŒñ؆mpƒ|Lm!äû$_ ”;Œ¸ÉÂ$á9ËFOôÄÆ+úέZ¦hX`}‡¥ØÄŸàÄë¢1]¾º=¿îÃ5 ã\ãã[I' ç(†Ö˜ÿÍÖÉl2›Œ—x‰—],ºXt±xfñÌâYNíœÚ9µsnæÜ̹)·ä«ùj¾ú7{EùËå)&;£3:Ë#”´ µ µ ŸÞzÿéýØò±åc˳¬kp1àbÀÅâK‹/-¾TÝDÝDÝÞð†·iV1yBÉ_#FWPÉŸîÛ˜ò`øõCÏKðX’ÝA_Ú8ž]d—Øx€â­Ê©Ç©,•W••õoõZ}&ë‚N(JŠä§¿2iHC&¾â+0À€d|ÄG|D,bé+žò]3‡”ÐÁo„îìµ±‰ôŠOïs¸YÕóz¤65mkTæXjÛ*‹í”úk¹Ì>6ø2'#GˆJ²–’Ÿ$òn0‡Jä zÓ‘Gc4Fã6nã¶EU‹ªUÍCÍCÍC³c³c³c³¬³¬³¬M-§c:¦ÿޝQî/¯‹º¨‹ã8Žã¼1oÌË ³fÉ.’]$à`ÀÁ€ƒ.}\ú¸ô1¿m~ÛüöËÀ—/3Úg´Ïh•X‰•¸ˆ‹¸ˆÃ8ŒÃ¦¹çi™<ò'ù¶Ç=†_?ˆÆ—ÜŠ·Ê(¡›eg‘ì#öÒXþØòµz·²¢™ZñU| ­òÿ­ûH!„ï“ ˆÈF.ôl/k€'R!éß[jW‘ån¯ í{¾âƒNë¦+(êÍGhϵغåÞKã6}'Þ>±Ò&)”gB„öMÊ`3ÙL6S¾êhUÖª¬UYËÕ–«-Wg½ÏzŸõ>óFæÌrJÍGð|ÄïøJå>x¹¥1£1Ê¡Êɉxb»Äv‰íž>|úðéÃôééÓÓ§[ϱžc='8<8<8ܹ•s+çVˆhJÙ; :˜Rvêš!’ÿ?q×ÿzqŸ¯æFÞ$ãŠ6M_EYûàK¥O–çT>Ê š ÊŠ‘ÐAG+V ~JB!ä»&§šz`ÜØV¦à•yÔ´ ´\® Ûì0&º¶»U/ËÁŠ •Æ]™t¢çÕø·;§Ù:çæ{ÂMÔ3¾’Vó…˜…M8gš8òÀ˜ÒqóÏæŸÍ?›[š[š[æ 9È®•]+»–)¥^‚%Xò»¿jùJ©Üû~wpG^»š L`Bzxzxzx„g„g„g¢w¢w¢·¦¶¦¶¦vMM¿¿¿à/ø þØÿÇÞy‡E‘l}øWÝ3ä,Y@rFAÌ"‚bÀ0'Ì PÌ9ç0çœsŽHPA$((9g˜éúþèq/~»{ïî½›Üí×çá)kjª»OWõœ>u꜓~€€IDAT8‰Gx„Gßd¼”x?o]e*!ùáÝt)<Ѻ$º:¶ö.8r’4A­ô>=¬$‡‹ª|E;ØrÙˆí +4¤À{AœY4¡ E„`.z{ÒË™}d-³{köô®^[:Ûèæn×Õ™¦¥éX>p²Öfㇱ´ ÝOOÂ!Ž g`/³Ù×ýk•¾>d%YIVòeÕ­ª[U·ªW9®r¼üEù‹òåƒË—†-laKçÒ¹t.žâ)žþî×^ß>ùȧ,e)‹ã8ŽãµŽµŽµŽ âq‚¸Æ¤Æ¤ÆÄ˜Scjfifif©p^á¼Âùd÷d÷d÷Úµj;ÈzSƒÔPŽr”Ët'! ÀïÌ·÷JÔA‚u0…rx[º¼fn­ RŽ{Ü*zê(½—›Î>V(Õ0eßò…-i(ˆR@@@@@à/ ð±e¨bæ•:rÊÔzhaç«^ÃKºÙÚºÔnªlY3ˆ(±œèjÀ“­™?|ÚTÜ“µa–’=´ ½ˆ&ós*»ŒýØý|Q­™Z3µfªcTǨŽ)‹/‹/‹ç^s¯¹×L„`<ÆcüŸ,™¡Š¡…QÅ1Ã1É)É)É) kÖ&¬­‘«‘«‘3,2,2,j¼ ñ‚Æ T U U eö{~k[´E[!¼ÀÃÿWÜkPGB0^¨C-ꊬªFÖnÄ@¶±hƒ4ˆ™\% ¹wr:ŠÇä›É†9ìa0€–2I@@@@@à/ó¯€ÌRRFZr©täíl}Ñ^²nÖ„Ëm䥳jÞÖEË)©ÉïØ¦v6îõ“ë#Ãî%wbæ‘\â mÈ…ÓS N¦°ÿ|"9À½Ñ½ù Õ Õ Õ >P#GçÑy ·¾ª}7qáG8ïBSª[ª[ª»=v{ìö¬#YG²Ž(x)x)xÙKí¥öRó$ó$ó$ Á Á<ÌÃ<ÜÃ=Ü“õ)‚èÿ9$ üÏü”Å}1&mùŠ 1§œPv¯YfÇ‹¹+šîUšØâ²×D½ÃgŒ|ÆÙÑP— 欹*  öalH:'Œ¹OTÈjÒaXÉèüÃ1áMT@@@@@àw¢¾:\)8’‰ýèÀùS}¾xÞˆ¤–ŸÛ.húÐð¸Ä¹ÎU*)Ð)Y-+]änUõ²šuHI&ס¬ƒÄ`‘÷¶9ÌaNÓi:MGò§²Te©ÊR©“ÔIêTVVVVV&ky7pã/ä^ÿLøL¼ MrS{°ö`íÁ¸Qq£âF¥‰ÒDi"ºî£ûÌ;™w2ïä0Êa”Ã(ñ{ñ{ñ{xÃÞ¼Ò/ó€ÿ×4ß%ÈAÌ´bG± ùŠN¤s黎r”R6ˆRJ#(¥ôÝpJ)é6\·½®c±«û|ÔH„-¢ÝìJÆ’ÙÆÈ“Þøˆk˜#û˜•-å |°lÀ—Wg­ÎZ•¦–¦–¦ÖãRK=.ÉÚd±Yl– +?ö_2&™q#£ù²_Œ—³}·-´p†äËÖS+%U¡s‚îúå{Û:„ËÚ§3Τ ô¡M™Gû/g'vb§¬Ÿ &ˆ ZÙee—•]^e¾Ê|•Ù#¹GrdÙ§Œ£ñÝÈsöaT ¾BßVßVß¶mXÛ°¶aÞÁÞÁÞÁÍ·5ßÖ|›¦³¦³¦³ì[ˆ@Ú  Úüp_þ‹F@à¿âÿ[ÜkQ‡°‚_Qò®t[Yq„´Lª'V¬q®n-ž$-•T\«y_¹|ýŠñî-–FîÞñ¨ß¾x×£ G¾;6~‘mÑ»»nwJ±Ú(¿ÁísÉÊyT‘žB€d¢t>÷›ÆÕÐKh_¬a"Ò‰¤d ¤b9qã0½Ðü—A±ø÷ðf0)8Pf©!îÜH®ˆ²w5Û¡ÛfËéO:´Â&i”Ä‘5P¼-¿t—êyƒ7’ÓÚ÷ã[±Ì2››ÂiÒd#EÿÁ£ýǸ®C ±ü'ùOòŸ´.h]кPgVgVgV°¨`QÁ"¾!]C×Ð5ߌd#vÓŠÝE°,›#Ý͸°j('j(•ÛΪ)›9ÊÞj×äGÚÏQ_¡ l S­Š¡è¢f•_y ls]Rrå熥Z/'ÎÍòˆ'nÎÑŠéžÜ;¿öÍú¾9n5-k×-° F6°ì/Àîa%ä1FÑ}HåÒ-Ôš†ÐLtF!JP!s¹ù¹8²ÿx•E"NcN!šÎ`F3nDq½ãÄílõÜT*tçL¥Þ\òÛÛI¢¼óò÷ õGA›ÀQ-\‡9¢Á‚é¯TÜ­`+Ô¡uâ‹â‹â‹j Ô¨5¨ ¯ ¯ /]Qº¢t…¬åœÁ™ï@ªõcÀ¿Ç{¼ÇDLÄD$! IÅ6Å6Å6±{b÷Äî±ö´ö´öÔÛ©·So§Ý»)vS”V*­TZ™VžVžVNWÓÕt5øPöÊP†²¬!ˆ¤À¯ä§÷2<ÄM¾È¹Ôí¨•#ËJÅr¯$Ûë^ˆO‹Ä'Š—U¨¼t>öqƒ´åÍ Íß©˜èŸhÐBe£üÅQâx€õg•^¨º‰†6uŽæì&p(ÑɃº³T\X4¨Ò;WZ8·Âñu@jÿ"ýÛ]¢ö||ùhû«Ñi[Š_–¿®yW:¾âZÍ éx)¨€±?œî4v0)¡å´3ns K5éÊ` JPZ”¡µ¨BÍ·YÜþæð‘݈¡ÂD1CI,·”“P‹1õº×Õ¹†i?êZs¢v@ÅlÉJ¸MÞ´yñ£äò{•Kj¾0“Hqà¾Pº@fûµ*;€8âÀk¡âhq´8Z£ŸF?~uÎuÎuÎEŠ6mÀ\Áº—î¥{eŠþ_Ÿú1àyxØÀ»±»kÆ×Œ¯÷:îuÜëªsUçªÎ™(š(š(šo6ßl¾YÙCÙCÙãýÞ÷{ßï­QªQªQB&2‘ÉG²—Å€øÅü”⾃+å.òÅ’¤øäØ£JïWzN47M”ßÊ–1ëÅ "f§Ò‹&fO©º2"TUÎUÉú´[Òtœ©[¼m/½Ve KÔ]|¬,toÛU5ŠÖ,W#¾Œ,€¹BƒèjõPÐn€óì6[ÎÓðƒ',–IŸH¶q)©sºW4»/ÿÊ0ã]ØØ×£>uü4"oe…Ö›')Šyþ%ÛÊNV©8ùÿÎù‚áÈ #ª8‰±èKºP]ô£'h)mŒùØŽ3,ôCxOt ¤à˜ Æ‹ 改;t¯7Ó<ÃÜyþª‘'›Gs…ÕUµÉÌ+¹+ó˜í¢GcžÑן>³S™#d³ô׃®ç-åÿÓ™ðŠx6²‘-Z&Z&Z¦zXõ°êáš·5okÞ–¾-}[úVÖò{±¸ÿ˜úcxëûlÁÚ„6¡M>à> ¼¨¼¨¼ÈÊÃÊÃÊC______9T9T94ádÂÉ„“¥F¥F¥F˜€ ˜€ T Çp Çë»À/›î?æ4ég€~U©ä™Ô²|t©4TßG1Hn84ÅKí±*.ŠKÑ —°·ÖOÒB:î¾oRnßG”nŠ,}±¶XãªÊ»iZj¾pà̲Œh¶Ýv”¡gKG‡×ú‹¬[7´V±)ˆß²‰€HÑfWŠËm+˜4S²‚™‚£ÑÄ»ý'7Wå]Z^ò.ûã­‚¢×‰îç}Œ.üYxýñŠ˜ Ÿ ân¦Dåœ@_¬G 4Æ>,’yæyŠÏŒãÎxstmA¸êNSa(Kú@¾™Šß ¼AJ)8RKV¡œ âP#m]Kµ¥{»éh.×™]{ÆO¬"plùeïŽï ϾúÌhÅx.}Ê­¤}‘ˆøò(Ž:Ð_TqWqWqWÌUÌUÌ-hWЮ ]¥E¥E¥…¬%rñûE $2‰ èŒÎèÌG•ÉÖÌÖÌÖ¬Ò¯Ò¯Ò·Ñ·Ñ·ÑW×S×S×kòªÉ«&¯’w&ïLÞ™=9{rödYo˰ ˰‹°HPßþ=?¡¸Óeô!b±f•™Ö “J«’kʰ@³“Ò}H¹Ý”ÓÓRñUŒ'mÉ8ÒŸö§ÞÔiO.Sfc‡£!/óK‹{”wÝXŒr6tãkdÀþØ`¥T…ëbõFõUÔŸty×2Úò‹ËK‘v¾ãjÓ‰hä¥ßM½­¦¶Ö¥õÛ%Š÷”#Ø¢¦pÖ;ÓN‰}G¡¦Rz¼â}åôšóïò×WV=ßÿ.,oò=ßÒÊ^oþÐ=GïË‘‚€ª¶…%: ¹­ø%0ÀA&±!>A7à í€Éô]J!‡qÉØŒSˆÀ{|B¾0…þrðÛù5ä¹ð‡® IÌlæ2sb·óŒ¡Þµ¦cŒtÕBn07å­ÂûÝ…7f^ßÕéÉ~ò””Á…fá9Xø!™²Þþ÷_:~ó%@§ŸN?~ä¹Cîä™å™å™ÑF´m$ûU­E-j¿û»P?üÜÁD! Q„BHIvIvIvìÐØ¡±CmÚ´¨ë£ë£ëcWdWdW¤4@i€Ò€´õiëÓÖË$³ »° Ó1Óe/õ" à§-îÛð ¯Q:HÊÏ×t«-,N¬×.F5ãËDÑùÒ[’+:Šåº‰Ú13HM]ª4šÆsJ´=•r•ÒOh€Æ°‚YL#•¹H:’»8…c8$5æ"èúJóêîuëß!ùàÿÊžB¹Ìf²ûû% §º$X¶×vp3-׊mbÝ^ÿk¬•£¶£¢‡ 5ØÁðQNVﯰßjq ¯l7˜ëjîomÔ<®x$)ˆ›”~¶èÔKûw_²|_«¥HòŦl)H‰šVšw³T¿|Õm¾^è‡uèøU¬Óƒxà&îaBŸ£/×—^¢VØKˆª¿() ?^•3…!°w5éjîu3g¨‰ûÆî«Ûw1³•VN¯m[5Iš€Hÿäµ»ï¬Ê5)<_®Àj1ÃÉ i!w”nüHëÅKQ?¦~Lýs‡¹ÃÜád¤‡¥‡¥‡Ñ]ÐEæ"ò÷¹_¥W„"É*¢…¨ZÓZÓZÓ8Ó8Ó8S³cfÇÌŽ™l6Ùl²Ù|‘ù"óEÊNÊNÊNïsßç¾Ï­Ñ­Ñ­ÑÅS<ÅS Ä@ D²%êóS÷Q8ŽkÌ¢ˆkuÇ%ޝÜëeï*¦`2›Æ˜I{ÖÆÁ]³\î’HÊ|Á¼… 9à‡!õÉÈ¢ýh2Ì¥”^ €1ô /ô„+|Ñfd5Æ£‰ H9„¡Ò‹Üengä“8½Œ‘ˆã-ôTƒ•×)l5ÜÑ࢒¹ë ÛFŒwëæWÍ<Ý÷ØÓ7ú¬³HÙRõ¾ò\ùH@a3M~±òAQgW8,Õ6rEãzÃIJŠžùUY~(«2ü0÷ó´ÒÌðU rgß=µ,uy’áÇéù·KoT¬[/]%Ý'½‹®¸ŠÇü90+]ò‘l&JH§¦Ü^4åÑ+Ô׊÷²M±E(Cµ0µ~GêEa¶0ÒVÚ‹ÛO϶êëtÖ¸ïÂ{#fº•nªê[»™­Q¼/'¿úæî¸pß(“„ó_L˜Æä<IßpýèF>£*ê ù}ŒPš 4h6 ÇÉqr¼èaÑâ‡2•]ªPý[)î?†WµÝà7"\Â…¤T¥T¥TUÜ­¸[q×ê…Õ «ú&ú&ú&J¾J¾J¾I±I±I±ÅÎÅÎÅÎàå` ш–E¶©¿MVàÉOYÜWã6ÂÙ)ä>3˜kB;reEÛ+?U‡c2cÔr„jÒaj{ålØ•¢Õ,aÖÔHÁúP…â7ýÔW_3ƒÀ¼âÿR`ÎS1QuT‚]ÀF gŽ1·HCæ&iOŽq ¸1ÜÓ²f†ÕæI¨@5’.|Š,ÄIÜE<¬;Z,Ö‹l¯ê|Å8ÍEÅb„Ö§r‹e:³l"LÆh%«;j¥²M'i¶Ó-ÏjBËMa¤EkS­ÃÑb—IÄÒ~#:4}ôåeNõñ¨YIó ž´Œi”þ¾ðmâ™ ÍbÝOúYL °@! @¢uD¹ä0íå4ŒfQ{,†;Fb'jQ'‹Û A©ø/©·ÞK† \âܸô²ú(ME×]ÆAc=ûÊ/”7 ½˜&¢¢ð›7Ÿ…§«lX{Ê>ÊõgÖ“ÙÒ%œ˜Và ؉ TÿàŒñ; qXã°Æa&Љb¢JRJRJR E(b%Vb%¶a¶ýmïTý ’›±›eU[¢%Zf/Ë^–½¬Z³Z³ZÓj³Õf«Í#5FjŒtšè4Ñibò–ä-É[²-³-³-¡-ha!b!–c9– “@à§÷HÀá!*Áá-XÈ—wô–ÎD)EŸ¡)Æâ³‡\'3u½U•¥¡àE °=ÐËñ±¿âøu|õ‡CÌÄQŽr”‚“ÃÊbb0˜´A5“äÓH¼@4Õ§=°Æðù¸)KsZÄ!9@9^ª[•#?Û5y¦9Ïb‡!£v°ý—×.¶.wmØÉÔL/Qi¤j ÒDq2úŠú°7ù7¢K†Íô›+õìý‰âzuïØÇ\Ÿó¯ì#1K úÒ«ôò»fé5ùã^NU,ºªõöÒ›gޱ·>V9ÖhÖ=§ i.fQ@ãh¢%ˆ96šéÌ- ¹4˜‹¢=h½KkÑ[¶4É+ñ‚…^@@@@à—À»hŽBw4!ÇÑ”GÙ¬:¥Öcp“RÛë:Û©C]œiJ™·KÛŒŸ³~Ô½ÕµOëÚI2˜*rlƒ|QõÇä*×i¯Ó^§=SΔ3åyzyzyz¨BªÈsòœ<§e´Œ–ýÍïoçÕ÷{¸‡{2;ú-Ü­â.Å]Š»¼¶xmñÚÂf®Í\›¹zÓõ¦ëM·Ó³Ó³ÓS~­üZùujjjjj*íM{ÓÞ²DNüzß'­÷Oàƒèç> Ýq‹Æ!µ0+èR}Uòj\:›l„5,ÄWÙEL[“£š£Õ&¥¹¼( &·0)ˆ­ÿå¹Ôz¼•z."’ ˆ¤ ÀH˜Br8 P…ÙHÚ œQ'[I)yO6µlzE‹*Åx‡ª§/ھÜÆ$.S ’ß&n¥¬ð\´Ó]Ëá‚ѯAÍZ4ªj:ÝÒO«Òb—aªÆ$Ã!Ú_”S˜Î╤-“­ð–I´‚éqõV°PÔúÒíë¸'µC«:Ô-T*­îðZ!­Wñõ‡JÑ#2î=}ùñýgi~›Š° «œË¥¹u6åZa€;üe1÷-Ò èVúŒÆ\ÁzQt/n! kq¡HD:òŸ6¼ªÝî°e˘.$HZÇM¦}¦ìï;±™ö¨1=íI¬ªúÖ¶€<á˜ÆÅ$ã3ûå¶+yÀ¨‘D™{A}iXYŒöß>,2¯Jò[*µ¡ mrrr2’Œ$#‹ŠŠp —p [±[a3˜ý#î]}ç–t¤#]æ2ôñ¸Ö£Ö£Ö#Î5Î5ε"»"»"»Ñ…F]0»evËì–ÊY•³*gßxwâ݉ZÕZÕZUÜÄMÜÄ ÁÞŸ^Ðþiü¼â>wñŠ_–)jUݸ¶쥶Ò,¢…6Çô`–“‘z&ªZJ øöd=éNZÿî#‡·Ðó+P::“棉”RWJa=¨“©Ä™ÒŒÜÄ.Œ@Ci·N¯ÚP3­.¼jS êÂo"üFòª›G2pÇóÇFÑ N¹´ÖÑ=à lúRÓÒ=Ó>¢a§¦5Ö=uêŽhp]1 ô¡Üq¥%âeúÇ•ÄTúi*JÑJlÜ*´RMÛÿefYXôª¤øœ;¯:%õÍö“>±hs„mÜðÏÅm‹—Wæ‡%¯–FëÀô!žC–Ó~4½8_z–šc/.â¹°)V@@@à‡<ä B j!a,È1"‘îå¬èˆf'íÆ>Z2N­¥f݈jßÚËâdE©Üú%Æ{GGF݉nŸ2šÉgšoÎŽ›Aà +K«ôûüHóê©.t¡‹|ä#_½T½T½”1d Ãûû{øÃþd;ÙN¶ÓJZI+ÿqw“W’X°`áxàáEGÑQ©$•¤’ò½å{Ë÷Ú(Ø(Ø(è*ë*ë*ËåÊåÊå¾×¯ÿ^¿¤kI×’®˜‚)˜‚\ä"gqge}Ö‹ê#ðwågwxÐCx ïU¹®æ]ÍN‰-·\tŽ,Ç`¦9Ë´Ó{¯’ ØÀykÐnhxþ'LžLä „n§€‡4•¸9tG4ÆQ,D#¸Ãº$†ÃDâ@>“uØKÒé™Í ”R‘‰œ; òÝå^ˆÏêÒz¨äj± ¡§FšWUóÎæÏÛÝpò7pµnn£ê¤ùXUWÁV”¡ä&÷?¥úfþFËU‚ÍÐh„šq_t>o£Sm_êW³9ûAEy›÷Å™kK®F¬L˜˜7ëΚ¨±)I Û)u©hW;P/u’NGk\ÄCþ‚˜éŒ©!˃djÇBsn$½Eme›b‹QŽ •ÂÛ¶€€€Àß Þ’ZƒZH‚ ˜Ji8½¡´N!Rnâ~ÃY½¼‡häqÀï»Ëªú ý@?ÐL“Ƥ)×(×(×TVVV˜W˜W˜ËZŠ!†ø­bò×ÎßßQ…Qp‚œp'q2×)×)ש¦CM‡šÖ·­o[ßÖiˆ4Dõë5ÖûÐäC“M²²²d½ÁŒÁÀÁúþ†YD¦k¾ÜºÔ¢Ñ¨’ÐtØ ië%ëFPº¢jŒêÒ–$îr|¶ #ÿ›Ëã­×Aí(è4c(¥ûfjPúlWP_JŸjÔ|év©Å„­—“Ötèû$¨éÀaÍæu>áÞÚ¼_£µšüûs ‹ˆV19Ò”T’U¨D<Î"rƒýÚè÷÷düçÁ°l_^µ:kuVšZšZšZK=.õ6‹Íb³Y üjT¡ M¾HbmRËJDì) Å›ƒ¦7õŽ£4rHðYéÔǺÓÕ ì¯¿™|Úq·Eg½Æü·;r•èËzûc~’‘Œd¾¨¾K}—ú®‹[/n½¸õɤ'“žL²º`uÁê‚ìÜ, ÆB¸ÉõîÎ×û£u¨}¢ÿõÞÉ[Ë[Ë[; wî0¼cXǰŽažšžšžš   ¤’T’¯«|I~ûï{øñó®2ãpŽ>ˆѨxIer\­“t7žT‰w2K !#Ñ\ý¶Âtñ]¨X‰°…1¾“·½ú'¡ˆEU ”H8)58ÁúÈÁ ¬ ‰äOØA‘6§#°›ÃZ<Éë\´¤üÉy“Ø‘Ü^î"-Âs(ã)JPš?æ"È2²Œ,£R*¥Rµ…j Õ*è+è+èç?Íšÿ´zbõÄê‰20¿EUàçà½Õ'þë£q4.Í!Í!Í¡êRÕ¥ªK–ù–ù–ù†ê†ê†êÊÍ”›)7KLLLLL,±-±-±Ås<Çs,Á,á#Ø.4'~Þǽ=6âr0~%F•ÕoªÇ×5–ÞB7òˆHL@õ\¹­¬òQŒT ÑЀPŒÊ¿Ù{?Ü+Q:Y)z` Çp %‡”"g1ƒ "GI8ñ$¹˜Å™Ò`úYâ(•—N)šQ©¿ö&‘¼ÊÐÔôUŒ]š;Û>0ð·?Ùh«ºv3»G©nwlK ²lUŒWª=ƒ¿œ³B®¥bžX^Ê£ä´õSô«té„VŒw’”V=Òž|)/[sâ}¯œùÑo’êrº¿Y–îR4=âT\Ýçëù#‹Äå7J˜/»‚&z‰"­±ŠÍf܉?·“Ö`!gÍm£FPA[,ü£ü3ù—åÍFŒ?I%N8ˆ-t1÷€›Lµ€zN9·Âgékƒ!zÃ'+pY@Ù\fú¤¸¼qŽ9»däþk³=˜ 泃FÑíœ"–Â#Á|ŒvOOOù òä/”/._\¾¸fEÍŠš²È3|\Ÿ£¾ünìÆn´G{´ÇTLÅÔìÞÙ½³{W*U*U*Ùô°éaÓCÃUÃUõ±¨±¨±è½ô½ô½4‡Íasd iCÚÈÒ]U¢•4“fÒLY Ðÿ Ÿ-é(¯ð!"u‚¸Ç@*]~wÔKJWfŒi¶`lRw7²“1a& íဧÆHAn2šÃFX´G$B0”Ü#~xǼdlI?v)sŽ„üÌ7ûê¾Ñj¡2¢ñ1‹ë:‹''õC³¸‹/V é³$5ëô»1½ËÃ﬘RFé³}3¦Sú¢xÖJŸ_™‘LiÔÚ™§(}þ$¸¶jÍ}¹éÓǵñW½7zÓ±þ–ÆûKÛ‡µÓx¼q‹;Ôí÷ˆß‹ÛˆüîôECØ~ aî3–d*ð‹á +èÂЀÄÿæÅïoàã. ð_"1X¨@r˜x±¬I­ßÄz»éV½ÙG>«·ïò.øÃŒÃc$v½(‡ÊÈä@ŽJö>¾róßžý Jåɾ̛ZþpXEV‘•yWwíݵw×Þ1Sb¦ÄLYw`ÝuH9)'岦ˆ@„0~¤Þ?}èCgpgøE™¢LQ¦c+ÇVŽ­¼\½\½\;Ìî0»Ãls}s}s}aeãïÊÏ+^üäA `è¥Ô —¸À Ía Ž6çN¨´•O3ê}ÞÈï.ž\©QOæâVS`= ÂÅ $ Söw ö”P‚”PBýqž´‡3ŒsœˆÉb¢AÖHR¥'¹ ¹ O—#…ÝËñ)È[ºçO¼{-f‚[mpZ`2µå'‡}› £ µ ×ö¶· n9,3å´LDÇ”•Eçf«¶k•>ê:`Ü]£³ÜG/Ú?ü|S‹,§‚«UŸbO¤8^z“ÿ¡$gÉËÔÄÏÙÇ“k>k”*½]•ò>·¹ä„ÔCz'Ðþ‡ëŠÅ:¸0—H?òi¨€­DKº•r´9à"!N¶øË vz0|üuî_M@áúÀêN÷£»t¥ÔÜ*Ÿ¼Áù±­|›;õ¢gµódµ)òÞÏ>ÏPn+ŸP²ƒÝÀá5ÀÞâr˜.rfrçåÚ“Öx‰!ˆÅE„*” ‡2T¢ö½F^­œŒÉ˜Œ Ø€ *7Tn¨Ü{-÷ZîuEXEXEU¡*T…cbLïÒ»ô®04~õmáÙÈF6b " YÈ’H $q'âNÄ(ïYÞ³¼§i¼i¼i¼ùBó…æ ß)¾S|WТ EA lÄFl¤‡éaz8gIÎ’œ%hˆ†he(CYf}øNøyÅwP„"¤ ¹…_ªÕZä:i †;ÏíSö“{&NPÛ¬è+¬xj¥¨Š%[Hox k.ÿaÖ ƒÒg(p"Êàc YF1ŽìÂ$¸Òµ8€ÛE×ážÔ[Ú‘[ŠØéE,Òc,žºÕZT7ØF˜LÔo™Ú0[Ý©UEã8ã6™ixÏô‘ÞIe1+jÅÎÄÍØ ƒ·†Á*Ôú#•‹» ­’I34à†‘•9ù¹ý+´“3Ê ãDig ="5ß)åy¸à•4-*cmNDÉS8c¦q ³d—Ág¿ëÅÎcº“!Ä…Ô‘8Žá–Q.€†ÒƆÅ8+Ä¡ø¡yˆP…HpÛá/ e“˜“’ÕÒœÖâ :QY,ÿhz¯þ^ÍºŽ¿Ûã­£ªQ¶á Õû€$ƒNêF’ýuÙuŸ$j´íE‡“4QxEoR®öt­Eí(ÚͰ0&‚ÊÎCAAÉqrœç+Ô-Ô-Ô-¿(~QüRšXšXš h@ƒéÍôfzKII äÂ0À*¬Â*ÌÅ\ÌM’>$}HÅÒŠ¥K­/Y_²¾¤ßI¿“~'Æ' Ou¢NÔ¥6R©MÞµ¼ky×dY¡´¡ mAqÿ¾ø®9 Ë?Uט‰æô2íOoª6•¿+wX«Dñ‚üÜO5è„@<ÃXÒm0MPÝ!õU 8 ÅBœ¡ À L0b°£ €®è{æ $eL3ÉXoÔæ*v(SËE!ÊðÔ"vrâÞöUÚ¥°[¬iÓ½Qö›Žþ®ÛMã›õ²Ž×.´7mä§9Úܼa£ÊJê-FŒ6g£§­ÓYAQo•þ,ã•mÐì£ñ±ñsª;IZ•I+;µ*I¹œu­œ ÝñöBvó ^^JÝ—œ˜YX¼?Ó7o|ù¶²f=«™.ʉ ‘éG‰: Àvú+èDÐkˆD&Öá^b5ã)ÊQ…™×§ðæ' ð}QßWXJPÀL„éCì¥t*Lx«EƒSêw”’†wï2ßqwPvçr#KýÙªþ7M*h*¾Rv²†=¯û8ôSå*§“ý­5 &™«îŽÜi¸cdÆîòve]·9¸,æÎM—î–îúÓ®Ý&0¡Á4˜c–a™òåÊ#È:²Ž¬«H­H­HE1ŠQL®‘käÒ†4aÈüãmæa¡âC|òç-Î[Œ-Ø‚-M†7ÞdxµWµWµ“Éd2™Ò i…´zЃž¬>Ó­ÀwůPÜ ’+ëjäÐN0á®ÐƒÔKÑ[|‚½£zM~«¨l,­€'àk !߀ZÔý¨â!céSÊpR© X…h‘pâfiJ.à$NâŒÔ€{FïVNª¾Y‡$! 1Hr˲ÂPê§!—Ûj–Ó5c+›‹FUªE-ä‡6¼Òô±µ¿^+WÃÛªEâŠóØZ²FÜy§Í;ŠV.ùCgºÀî‘ö©i8¬ñØâÆE‹«×ǹ¥é®zýèƒvŽý«Ïï§çç¾jö^-wKÂøÔö¹×%ç¥ÎÒÓ8 )€SÄu鲦$šªÒ.¸Í ¥h;z™V ’‘Ba대€À_1D`eù¼w`ú°…Œ+i+Ì ¤t2LäBÄ1¢w#.tiëxt’EŸiM>8«ØtÑy KÉÉ4€ZÓ!4…Ÿs›îÞLž°QçLÊ«»QKú}–ýFÙ—6¬åÝÎ~ž=Qc®ÆJµæ«LŠM¼RÚ¿Wy¯‚•XŠ¥hŽèø'$6‚!ÂÝänr7‘‡<ä©…ª…ª…VùUùUù•ĔĔÄðQÞéH:’Ž”E;žê¿ŠP„"µ¢VÔŠ"‡È!Ý:Ý:Ý:ÎóãüD{D{D{Èj²š¬Æ ¼À <Æc<–}—ß.,ð]ñ+÷,Q™eoÁ8(Æ=£&Ê¥âQ”úGù(1ÁS\°ŸtCs ³ñwFZÏá$_PH[ÓýГòÑ8u¡´†Ñ ®0"wÈv #*ˆ&ˈ!‰A`åÊê–µº÷Ï¿@ îãÀìÄ%ÄžÒFŒrHƒ¶êN +=‡»^6Óõéí>¼Ñr[=£ joôÏiWz£ºYmœâ@LW7Z%òm yJQ¸6Œª|¤qù[ŠÅUoòû—L­œ뙲µhÈ]·——>½8ìÅ•ÔVÅ*ºÔn(9W^}BR"M§ vXl&SHna2Žá §BS]ú‘š`JP:d ¥(F™¡V@@àO7(ÈÉÖBY0Œ*ÙO”©–Sén ”[$n%êä{¬µ·åàÙ-§7Km>Þ±¹þa@zSz %ÔLZ+u€4¼8.+kï2ŸÃ·#çßÿðòJúXCédö3«Á(p&ÒtîjåËê¦ÕS3’ô’½ßyõ>jWn_f_v/õ~æýLbC‰#ŠñOÆ$LÂ$jL©±(E”"JÑÐÑÐÑЩ̬̬Ì,Ô.Ô.ÔÆ6lÃ6:”¥C±‹±XDÿük¯ý(Žâ(àóBóBóBgg纕u+ëVÖd×d×d“§ä)y*õ–zK½ùû%ëG°¸‡ü Å=/¶Ü¤râ  Î˜Ãèˆ:²EÊvâJ‘»€LGc˜€à# ¼KÿÁÓø_ä¢å8‹ûˆãÿRPà6U@c*B5­ÅÒiØÁ aÞ âO¤dä¤t17(oI±KòV£‰øØ¢ o×±‹xÙ€Ý;t4zêÜt»ñ›æ /©2ŽR _½¸ÆGÍÕ|–»¥jÁnDJÚÚS3´¡“¨”a ‹ÙÚüà¥bq¿2¢rUÛÜgs *›Eqï ³õŸ\‹þð1 ¡É§%ÅŸí>®)ØUbTÎTéü¿ë+þZ`Dd."qƒ„Ù´’¶§!T‰vÀZtÃtþ&Sœ`Ïø­àÕt~ýsF“ùL¦“·\wzŠqèHÁ¶ôúÔn£MóÉN}ÊœÛx»Nix Óéz@Z' ØR‘ᓦ¯gØoŸ|!þuéÿÇ:‰~²£´…“™KLg m/ÍæBf³µV©&µ&)nmܦ¸-=Rz<éñÄ|¯ù^ó½l›Ä&qg¸ÓÜiÌÁÌÁ¬Áš?R0¤éFºQB % ;v*ìTñQñQñ©1­1­1-ŸY>³|¦¬é~nCø—Æh€¸ˆ‹¸È»Ê¾3|gø®QÛFmµ•>—>—>OòMòMòÍVÈVÈVøÙÞ²!úÙwÆRÜ녕ʽ.͆# DGne¨V‰4˜ZÕ¢ÛLkš8Îh 1® ¢ý RÚ¯ïÖô3Ì0EºŽ6¥ Žc9‘©¤C°þpÆ%ÜÃsL§Ûñ”jÂ[£FÆ?ÈÔŠB<2ÀÐÚ¯¾Jy¡­µÉQÍývGµÓ*ò¬pÕ6+o¹Øþ½®–ñ Vñ®h¶¸5;dz”,UÝ™Z»yJcDì`1V={zÚ:xEç=¯ôù¸5ûFÉ•÷ã2NuQýþeþÅ;3£.§±ñE©Ú¹+¸öÜsº˜“ÐÕhn2­ü2ìˆ>zA…-dÙÎ\ ¦Ž\97ŽÖ¢9F`»,ªƒ-V@@à¿CrñÏO¦‰!¶¢®áŽRgÚGäzkZn¦¤6à€‹¡¯q«I¦PÌ>¥öçG;$‚”'¬Ls/ž¹~ù)ó—%'Âî)¼ÛW׬NG2‹œ MqÎpESšL­°†ÓæfÑ-|l7bL HgØÂ¶i¾i¾i¾%—J.•\2ô4ô4ôÔo¥ßJ¿ÕgÏÏžŸ=Écò˜<¦kéZºö}Ú Æ` æ·H*ª(ª(ª¨5¢Fª/T_¨¾P¢S¢S¢ƒ$$!‰Ò@ˆ}؇}°úÕðn-ü®Ò؉¼Ê®‘¯‘¯‘o™b™b™B¶‘md[ŠmŠmŠmvÓì¦ÙMqp@;ÿÞᑈDY?ß!ÿIqÏGÍWo¹’Uçkp!ÒºyA& ô… ¸jöÔ‡…s_ë!Š“†öê×øÃ^E6Ï”ª”CE_éx. Ñ˜üÉ#7¤jÛN÷KsŸG/¸Ûø]£/‡ò4K²p˜Ë !¦t:—Nƒ¤Ï¸Ftª,%S êdK¿Qª¸Ü îñ'þÄÿóëϯ?¿þþ%üK¸ýûöLUMUMUÃ*Ã*Ã*é:ºŽ®ÃLÌÄL¤ )ðdoâWl¦ØL±™Úµ7jo ,.X\RZRZRÊ+‹tAg`ö`0è~õUmÞÑè)žâ©è°è°è°Ýy»óvçUUU‹Æ+—t#éFÒ Ä 1èŽîè.¨ì?þ“âƒ\”ðÅšáR5®¼hhÍÀºÛÚ¹r÷šrN´‹î)ª8—¸Ì{ºƒZr/pþè­Bd™¿õT’ñ ytÍ@c)¥(ÐZPÁø  Üa rk1t# Gˆ ‰Å´ò• ªCL1]vÜšzqÃ~Œ¼àE>’äczzú‡ 6|ØÐŽ´#툚š[ÉV²•Ò@i 4õþý1ð)Vb%VÊŸ—?/^¥»Jw•îYáYáYáå­Ë[—·† l`÷ݯ€WµáGœÆiœæ×^¬|¬|¬|´|´|´|ÊO”Ÿ(?ñnÁ»ïÔJk¥µRÌÇ|ÌçCs~ÓÀßä¡õïy‡|”‚€º³Òœsɽš¥u¦ÄE}™b!j9îŒf¤¢Š|™\­h>û¥†«q,œamA¸ÿê[¤sPˆrœÀm¼Æ Ü(ÁV< OùL±”Ã3Òµ8Å4d¥D‹¬“dI/q1…ÍKNUö)D‰†,”à Bñ^Ö±ÅI£ zµÛÑ$ÒxŸ3,ä5‡4±¶ÔÑ5sØdf©}_û²Îq¥ ½Ç¥ªNWm'« õþò‹ÌGšJ4U»ŽlÑÇX oË[ŸIž^UÛg;Þ–e=}1÷Æç}Iw>%W¿–l“;%+0/§”  4~êBÉvÒk˜©Ä…D1˜ÇÄ@ê!]ŽÎü‡²½ ä›Í±-H½9Ê‚’aD—ˆn’ž\u£¡ÒîõÖ Òz§º`ÜÕÓ§뻳Iûñ –+®ê:KméPéÛBŸÒ¢:¿£îž~[¸cÙÅG±÷Sò2 âБaC˜sd6çBÑÙ\snÕ‚"ÞC„jÔ@ò+VòDADÒ†´!¦` ¦|˜ýaö‡ÙeÓʦ•MsüäøÉñ“š¹š¹šyQzQzQ:™Oæ“ù‹; ,Ô 5¾B¹»rwåîŠ†Š†Š†FFFÒÒÒÄø?z„¡G„aø+°‚¬d4û¡ú™ 7n6Üp›á6Ãmu±u±u±Il›ÄVH+¤R¼Á¼Ac4Fc!˜òß•ÿ ¸Óp|Bl!‚¨º½Ô\Ú+SÅ–ìg“y.‘û¬ÝIiœÂyù¢ÁÌášquø‘–0¶0R~"Sl$ä0ˆOË‹+`)ƒ=˜‡¾¤7‘C,ÂP8Ae؈Sˆ¢;éUÄ¥Ègv*NA& €pŒ‚“üt¹¹V ‚5ÓÍÛ(¨vlË9{™lôÜÑTÙø­¶ÑÕŠ>r»EÇ/¯.²ˆ:6ì¥÷Z±ËÀJƒ7m¢±¹ÕJOÉêDO¶E—Þ§}Z]ð,iifbÙþ;r/N |³,£k•]ͤº©t*Çl)èG iO’‹ˆ “ f*{Ž=A·â±¥¢lQ›/ú"ú‚Ï4—æBJPB5*Q) ?ú™›­`ŽFì&–Ü”ºpjÔn*k”ºËožÜ¿oÓË#UºÚ•Øêš_вC|í§ºýBp³¸)?ç{Ÿ¤,\Uttxd§7Nžåøó!÷H/<Á!ÜC¦t7—#°,0²,ª¿)¤Ò×ô5}„ $útôéèÓåÊ/”_0Üe¸Ëp—f•f•fU‘¨HT$BGtDG\ÅU\ýÝ¥ÊG 4³1³ÕO«ŸV?Í…p!\HIjIjIª,þIªP%¨’¿p¬Š ‚ä G*H© ýh?ÚOO]O]OÝ´“i'ÓN”RJiŠ~Š~Š~á´Âi…Ó‹\äÂö°—õ#Èùo;@þ=¯‘…|è@Ií!É©vÑ—ªÊšBÈ3÷H.[²‘Vªµ’—ˆ¢Åí˜f%8t`m¨!W¯À¿…ÿƒå¸@A ¸„ƒøº9Œ·ŠGw°d 1Ä}Æœ%"bE^>Õ¾5µ«ßHÙšƒ·HA®à>“;!nÏÞÒú¨ÚTA¾ýÞ¦Uf¯¼k›õ4žl—f¼^}“ÕTãšótî6¸¢|à^SÌe—Ò‰¶0?¨io ëHm=’$q!kû¶qºSÂTD×NóN)¹rkäs¹t»çLüìŒíÙŠÔ½IÒOo”TWz¹Ô)—”^(žŸ˜M:\2F2JÜR$]“ÖWÙùëâø·ß¦Þ Ø:L7ñ eØ‚'¸Š}¼Ê®î®â«¨Ð}Më'~sw yÑü¹ÃlË@­7—›pm¹€U»ñ9L=Ýv 9Ñ÷…øY»×>•üÙÇLYÍ…ÑI´õ¦—á %(@Œ*¤ Nvtéÿà¨À«_D u;ksÖæ¬Í9å9å9åZ·´niÝrmäÚȵQªAªAªA½§ÍïïÓ¬%(a&`_¡á£á£áC—Óåtyñ¹âsÅçP€*û/‚—[}6aF§Ñi-5Zj´´Þi½Óz§h–h–hÖ§ÈO‘Ÿ"3Ë3Ë3ËeqÜ}àä#ù‚ ÿÙL@;4%—± ÝùŠMŸºå´R¥tÍα65Òņ;ä¿™~Xà µOÊûec/aØõÏšÀoS/0i¨C™4EŽ0W]Ò“ά'sQ‰°û÷ݸô¶ieØqhNçWV7¯×vN„bȱ¡wKân‹§úQÖ+h ¥a$¨=¥á/fô¦4,%è*¥aJ_(žáOidé¬;9_.JüwïOßx`Òüsã¢L£ÚÅe-)œòðòÊËóFܘã>g@A´˜}Êl!§HO|ïQËN5¿|èFžÁ莖ìdæ9úã†;™¹Ï`˜'¥£gî¤ôé½€õ”>³ Ü@ièÜ ÷ûom=ðsãö¶Žþ5eo`Ü™5¤˜4†+`úOªß–¦hЦð„'<hD/軠1b&ÄLX½gõžÕ²íždF†ýAÒ6ƒÌð¯ñ P€Âؼ±ycó^×¾®}];mÿ´ýÓ¾j½H/ÒKž?K}7ËC8ÄodN*œT8éîëîëîë=É{’÷$§§§Vž•gåùœµð€<~¢¿)ÿ9ªL >3í‰ K¨U.SaUÙwÙRæ©ô w—6W•“›Ãöµ!ÇÐàh@I®ÀoF}+uJPA  Š´' Ècn Ž0Â< G+ A'Ø1MH!ö‘YDæÒ)ôMÌä¤ð/[b.%…yÀw¦¯ûâCƒ!ªäõ› ´;gxÁsªëÖFk\/XÝmpÒjxÃÑjí5T>)l&[”º3Û® ­Ñ5ÐhA϶¢ßƒ&jë¥5RÉb·µ“ZÏy=§;úzvï0ã‚ÆÖn Ë—Vµ«ãçB{”‰%¥uÜyº ³±·QŒrTËVþøIÕ¨…„ø1Î=L„t3×6!Ƥ‰éâÛò³åŒYMYºöh§Ö8Ç@4u!éH逞}Óé}`þ§eŽG×GÕÞÈ KüP^Q«^‡0LH"IÂK:•®GG.“Φ岔L?~Rý¶$! IŒ˜3b®)×”kq+âVÄ­A}ôÁ Ô Ô ”4%MISêFݨ›,b÷K¼ÄËßQæŠP„¢l#l5ªQ­~Nýœú9ZI+ie‰]‰]‰00ÿõ×"üá>êŽÈJd%²² ¶ ¶ V›©6SmfqâÅ=’Ò“Ò“Ò¥5Òi La SœÀ œÖ4¾A,fv‘"¾<. Ùyošµþêø„ §eC¯SºÒcôGUÝYš²÷Û{ùŠžû) Õ Z@iØè Ñ”>]Л҈3ý^î6¢oï¥M×ÈŸ­ýæA¢Â6$©Ø‡Å$«âaþø‹žÄLb&A ZÐâ™ÃLJKÿ–þ-}ûTûTûTÙ&Œ„‘0™ÃÌï‡;Üá.+oÇvl_“»&wMnôÖè­Ñ[»©vSí¦*;Áâþcê[Ç`#¬ÅZ¬åÓ*Ùζm;Û+Ò+Ò+²ÕÌV3[ÍTUPUPýš•ß„úã~þˆ~I#ºÏ‘‚ÅPyRâÀ}Áfé)ÎŒ¡DôA.½Žú¦jRåÂø·¹ëŠ4…÷=¿õ-Ù‹‚;ÃJ8[(E7´-ID&¶a @k((ÇäÞ«ÊßÐÿŒÒ«^Gƒo;Ä»–¬jÏ„¤’Iˆ£bêƒCcij±X *S*QýƒÿúoÉF! Q˜õ ëAÖƒ¤§IO“ž6~Ùøeã—vÖvÖvÖ ‹%,b¢˜(&JÊI9é﹚§ e(óŠ#cËØ2¶šyšyšyœ7çÍyv-ìZØUEà'n'((L`¼Ç{¼çÝ97rnäÜк¡uCkÉqÉqÉñ¤¨¤¨¤¨²ê²ê²jY|>nLý~þ1ü2Å}þ¿÷Òuã$þt¤=À´#EØ]dà£a¼z´Jª P¿4õ•àx†D a¼(ðÕÚÍ·P‚7Äd'é€×LYA ɃÊêJÛªsq'ÓÃ+"”?ßÞ¹Ùj°SÕ£M{$Á5æ‘h™(¿9«\lªÆ Ë]²¿dî¢é²¥-&N>Ðk¯“æŽu—RÞÚéð`æ»^eN.\ÍŸÓ™< JÔ~ôÕ§½±‹±@!!”À?ú[º`¼À^ f\HÖs[è0RP “8íFSÍûïlzkä«NM­u•7¨‰åËZoÉ@´õø2:'¡Â%DáJt܈§D¿(Š-ͨê…XŒDÚ¬ )“ôÚÓÎÔœî‚#ÄØË‡CþaÞý©óšPjB܈q+êXÔ±¨cÚî´Ýi»Û¤·Io“n°Í`›Á6ÞÝ‚¾¢¯è+X–ø€?ì±ùmá]e(((cÁX0 5j4¤›éfº¹¸¸¸¸¸XÂ?o#W€ðð€/ë¼Òy¥óÊì’Ù%³KÔúQ¿‹‹ £Ų¸1|ä~«À?Œ_¤¸c}Šxº@W[!¹_5E²C*•»GŽ’{â¡ « ¢¡tAy'ð#­çŸZŽJÔÒiô œ¥RÚšRØ¢t0ŽÔŽ1$¹Dãù°[º×CüžÜšz=ä‡>vBƒ¹ §«<úÚ²c’º¿tœÜÕÙ]j’Hª¬?¦ÁKEå˜hÙ²bò¨^süÏÑÇÕÉØ¿ö†Rüó·ª:fó‰Ëb3²v/AîJ‹¸3tfa3.Ë–éÿ$›Ÿ€ÀD½qNv¼f¶“$XªÀu 9P`£áFj›3Üp½2²Ög¾“öNí5Š¡@Ýi@;Ó•¥¦•w¥}Ž4¼Ô?æåކLc¤ïeX4Än`“ýH£°™’ÒªŠ#Hþ!Þ{ýìÑ–a–1™‡ÌC©ŸÔOê÷!íCÚ‡´*ƒ*ƒ*‡‡‡ågÊÏ”ŸU¸V¸V¸[bKlGƒ,êÀçòT›¬6Ym²´´´AéÒ;¥wd-“§~´Ÿã8ŽãüŠ„º¢º¢º¢ÍT›©6SEA¢ QPÆÄŒ‰3j3j3jq ·p ]Ð]ð_ðE¤ÀiádñäËÎ÷Œ®ë­Ê3÷ýP nÇRës)]0zÈFE߃múòmÈmÁÇ]àoŠt¡+ç3H,‰eŸˆºŠº²"C‘)»T4BäÒ—‘ù¿Š§‹.‰Œ=´\ m¸µ6©ïùŠë÷šO-¡4rÈÌm”†~8AéóNÁ[ ÝnLv>²pÛ-«©ºšAK~ÂÉŽBT0œq ×H4„T  EÈ Þ+xûº M¨A™©cú’àúMôX¨D¯t¿Í£cf× “ÇM¥ôyÿà[”>Y;}=¥Y3}*ŽÜ»7q7ù¢nœnœnÜ›6lîÞ-¼[¨3Wg®Î\Ù̆Øa€Ë‹±ËåÆÈ‘ãâââ}Àû€÷&êMÔ›¨3ÑL4 cØϞ+û®ðÌøEÏ BìQ EÈAdœ¥õX½\¢4üØŒ`éÇ'-BmvÎܺÏðö96ùj½•Ÿ)<øæ€ed 2‰Ò°ÍaÙBÊ'?—úáY§a Zä‘]¤–ðÕJF óä¶÷,jc½'ìånÍ!)}¶>è6¥¡Õ;) Ó |FéÓñAB³wŽ´»ëãV½¬úb–}Úä±ÂTf)%dUbˆþf£Ÿ – &ƒÉ`œÂ)œ3wÌÜ1s_^|yñåÅÝSvOÙ=…qa\Yûú z~ÛÇÛGò‘|äËwnܹñ‹/v¼Ø±á؆cމÅŽbGYÓ38ƒ3ÿБϻ»<ÅS<å+LLL<ó<ó<ó<==”6(mP*k·qû«ˆ…ç¶À‡2ä µa,Èf¾âfð°iÞ«)]}Ìÿ¥Ë;ŽŸ0íL™qÂzŒ€.T¡,O@@¿4ϳSЕ¹Åè“Îx…5°¯ßÐÌÈp‘V¯yQÃÛµ<êpfþØk”†+Îp¥ôÙ• –Òg½‡R¶yFeDÜžü¡Ž¦ô:ãR&ç$^-z\¿V‹é@œ˜~$ž8`~8º-^àáGjóŠiLFWD¡kýú^»Ú­±yöT´c¶Ÿ„Òpß™ƒ(}fØ‚ÒÐ3c(P›QÆ„è×ggûb[GxEF回o0ªÄ‡°dUõ³¨þí¤Jz’ž¤'_ѬºYu³ê¨Œ¨Œ¨Œ­n´ºÑJ>J>J>Jæ$3ƒ~ˆ@ÿ›Âtgº3²¬ê~üøˆ}û6öíü²ùeóËx?{Yì”X€ÿ ‘ÏK^ JPBŠ Ë„£3Tg¨ÎÐöÒöÒöÒŽÞ½;z›Œ3g2Nö­\ä"0€ÁÏÍ _¶\XZÔ!JÐ…<”¡Rܦö¥d€éxŒ,ªLí6‹EéªqŠòÑ4Á8‚G˜‚ˆdÔÔ˰8;p“ëÉÐûðÇA‚(,gw2OÉÙ´Ì/Ë /¯r;ú4bŒûš »Ofóõ§s’¥Û{äc“tm Çgº¥»·Ï¬öœÓö@ñк™óŸk¯3N£Vyª´{Dßrç©e2ÈaPDaLa¿­Z#ðç«üèj}¨# ’cÕÈsΕ{CÒWpÃM·&ö3n¼á·.´oÜùYË»j[çòÙp )—<ØÏ¬qœyŠfÑAÿÌUé};m Ä9Ë‹“Ÿh$ÆÁœ6äÊ ²ˆá{rƒ8޾Ãh,ýa-«µËH&¼¿x2Áû²gvÌì˜Ù±Ü½Ü½Ü]¹L¹L¹Ìf‚Í› ¼W4ùD>‘O¿‹ 8C0„/ª'ª'ª'Šgˆgˆg”F•F•F¡ e(#FĈñ™_ÿãŸ÷Dç£èLÅTL…&4¡©¢¢b-²Y‹äÖÈ­‘[ó9ùsòçäOŽŸ?9âîà†c8†# YÈúæ^ üj{‘T“e|ÅN—^­Ú®¤Ü*ë1iÜÝ¥G<Ï.c:(ßÒH§Zk(ÿ rx.O@à?ÀüÿˆŒ)9GtY}Æ›4®ßPQNþŽœýƒ¾›\†mÚ}zðJÃOÏșҧ~”F^Ÿù9ååÙÂq mvpSS¼«ÐTnEýØ\¦ŽD!‡0UV%þGîèˆF4¢eO†¾Š}û†¼yòþå™—g^ži2Òd¤ \àf³Ùð× äYyVž 9ëÓ¬O³>%½OzŸô~xÕðªáUƒä˜9Ìfœà§¿ù©ÿ߈ØÈ¯9ÈyÊyÊy6Ëh–Ñ,Ãûˆ÷ï#.^.^.^ìzv=»žWëÑ­Ñú'úø_`»’d _^¾ÇÇÐ=ŽV¯Ôc%½°$b„gщù†f¸™™Â°?èÒ—h røÔ÷Åm&0#P…ò’ CTý†ÊT©¡üÃ>'ÛÚ<f·«ûEÎèqBÀSJÃ÷ÌXEihmÀKJ#½gæe,½¸züÉ­´¼–š^6l¦¹÷›*±ØÌ,$å_C¾Ö{‘~<~}Ø/’8¦3XT-¾(¾Èfˆ•ĦõÚÍ0¸¥½K5l£Æ”+žóoXNžCiDÑLeJC[\§4bÌÌFY.;Mx|xðG÷R“}w Ïú‡"ud%>ã ®bÚ71RþÉ£Ô>ð!‡È!r:ÐÎDµ‰jÕø,›+,WX®°”Mè=Ìf¢!þ¶§ÀN`'°²³oV¼Yñ&uiêÒÔ¥½Ïõ>×ûœ¬ÍEö"{ò‡ü?â¾tFgtÆ\ÌÅ\²Š¬"«Î8œq8ã=ß{¾÷üî-Ü[¸+±&'‰'ávb¤ìƒGËø'ðãû½càIš¡;I[Y75ŠÒð~3ÆÖ¤?ØÐt[EÀc¯—v“L_è¼ûf˜g’á¸NêÈÔ ?¨éŒ°ú'Ÿ „q`¾Âê•Õ+«W×Ú^k{­íÓ-O·<ÝâÖÔ­©[S~‹$“Τ3é¿ÙÁEDDdwG!D!D!äàȃ#ŽŒ94r¨[°[°›,Žþo{Ü¿(ŠP„¢l×ÀðŠáÃ+ž¦ž¦ž¦žÆžÆžÆ; v|µ¬ŸÅÙo£Š ü>O‰·Dq|Ù+Éf{£ÒÚ’%F|®]¾Øc¸3¥«"ý/æ·}Ôd+ßFÀø“w‚Ü~ë©XO…Ñ„á KèJ²uŒY†Kõ7lÚÅÆDÿËQ¯÷»w.öº5pò9J#낃(}ºxz¥‘z3g•ÅÞ5ŸÚáÎê_ú¯éðÁuŒés6šÉv®Xf6É%nð@S˜ÁÚPýnòM üúhUx¢Ì‚`t!ɤ±k˜[ä¹OܰúÇ_Ò QKQRo¢c½ÔP!è@ŸNŽKCÇ„ö<ÑðÓeJ)ýC)¥/¦PJi4­Íª4«(¼3iÂÒCÖó2ºÅ8êšÏ×Z¿7‘«G2ð»àèC]öò Œ«_z¡z)-RZ¤´hß›}oö½I8˜p0á`—;]ît¹Ã7d÷±ûØ}¿Õ|%³È,2‹£­¢­¢­rzñéŧ?œõpÖÃYÛ¶;l—=7‚˜ &èo(ù…úe†0„ñÕW5®j\m›Û6·m®×v¯í^ÛÍŸ›?7ÿºß/9È5¬a-8Æüþ£´na_v²5ÈÔþ\õ`ѳákÊ; oEËÖ³\ºÖ«±ë0P€’HÊ&RáÑ+ ð»Sß…`$z£5{€‰"waøÿ:÷°v2è´íJ€[ÇÜ\_4y0¥‘»fö¡4ta ¥a}ƒ¦SúôaP÷«ÌZÓ¾zý›tXdÛU¼T¬+ЬߣKVâ%yH†!õ›Ñâÿj°õ¶6 ÈaÒo™¦5Æt'‘ùï;h²ßªÀ`æà³Þãí쎟¹¿ÓÛ„ÈãóÆìäôŸúÌØGéããôòŽ'7;×àѶ*×*×·ŠCe›_]—ô«v;×ÿSaûáMîÖï“\&ŽXÂÌ#Ť­¬J$¨êÿêP‡:óšyͼæ+–8-qZâ”Ø%±Kb—éÓ ¦àáq!.ă1ƒÿ÷Ã’R@ ør#ÛF¶l¯]-ºZt]îºÜu9S?S?S?YØÊZRKjÿV2¯¯p¯Çz¬ç‹ é é é-Þ¶xÛâ­W•W•W•ãÇ+ŽW{Æž±Ç¬ÁøÂ¾Â°ø£X/¸òE•Ýr§Å†¥I󋆊kò¾†ÒõJã=7ÍëºõçÕq“Ä bøC©¯:Äô"!ÄwI-YŠOõÚ70}­Ã¬ ›à±$˵«“†RÞeÆvJC?úP¾:è0¥a£göŽÜrepåPù·Ä¢wì›úýˆž²‡2˜hCfÛƒ2!'ÜŠ?ú9ABêä2ˆL¶ŠÕ"…" Ö„ýÌ7ƒÕǩȗu–w/·´Û4%·c³ž›÷ËÍireþÄS”†åͼBiÔЙO)h´‰Ò¨^³ÏQúÐs쌂%qÍ&á2¥”Æß¥”Ò¸"J)=ß5ù퇗²SÌödž‘Áb¦Ám¾ z¯ÿݤÁŒ`Fð1d÷Üop¿¨—Q/£^L8˜p0A©B©BIæqŽT¤þ¿—íÿ˜AŒ,6¼]s»ævÍïw¼ßñ~dzWÏ^={Uw”î(ÝQ²`”›Éæ¯`þVxžü¦[v0;˜ì2Þe¼ËxïæÞͽ›7ŸÛ|nó¹rqrqr2?LÇtL—•…uJÿ_³Ñ' E_¶×BZ(=UšQ·]¢¥'çË@Žãúë6Q t_À`“4”¶äl±¾X‹¸†'‚¸~w¸zqý±W(C\Á<e È ¢E‚H5F&§7ÉÛ4¯u/Ùfq®Í˘éýƒ›]𪃩¥¾ùèFšÙ@m—Ú ÷iK ,ܧÙ7Ôk>oÑÐâævÚ^Ê~½ä|Æã3IãrÚŽ*çmûI F2&`SEêƒ8‰Ûˆ•)gHÁ ·è‚ÿÉç£;‹ ‹ãXŠ~$ŠìÆ@t€#4d.Lóè.Ü¢½¨)Œ¤þ0(Tj)1KÒﯶÅ%ÆzžîˆNVn­ÌI›ëƒust55ö*Lf6Ê5Q@t’|8SN `g£¨c°þKŸœ%•YéE9ÛJݶ¸¥ F/.Þ>/ä^ˆ?*ïRÒq¹ÚxN“Õ÷RMIŠÁ½ Ý3Ys.ä! É>2ãèiúLvB¨øŸÇ½J¯Ò«(F1Š_‰^‰^‰*ü*ü*ü,Ì,Ì,Ì4?k~Öü\©R©R©B†‘adØo|+¶b+Ÿ·U­N­N­Nõ£êGÕÙìG¶ôtééÒÓ¼B§Ð)D ÿ&ó®z ¶a¶á žà‰Õ«+VW´kµkµk+++ßå¼Ëy—SëXëXëˆÓ8Óðƒüø¬·BúCNß‘áp…lœØ—mÍœ+pêO¸þKƒFTSºªÃ˜>·#FuëR#Rõɶ²=Ç*Ax2õ³¥z£¬™@ò‰Ø“¨ÅÌú ÖéÙhh-ð3vS}ŸzÊÇÿ8¥a£ƒ¾Púì@CéÓê€U”FÚÍŒ}+=ª;2iÎÉa.-7…éuÕp®ßÓ@(ó™é@¦AòPªw&‚…õ—Qß2Ç‚C|‰"®²ý™r\t‘ÝÈü‡»¶ïLŸèvÛ¿Ç1—«[Œ§†uXíàòðUãî›Nϧ42cæJÃ×-¥4ÂoÆ2JÃ_ÏX@iØË “u—M?S}hŨ{ÚÏRèÜiÐY¯L»/öŸÌ7èñOø~?1ÐÖÀÞÐÝλc+^-|µ0828;8› "~ÄÑcô=ìÃ>ì||3º  ºð£E4[4[4û̬3³ÎÌz©óR祎OœOœÌîKz¤Çÿnñe° XY&ÔŽ:>êø(¾M|›ø6Ûô¶émÓûfð!w¨@ñ²`ަò¦ò¦òž™ž™ž™666Úô‡i“µA bd¡0+»Àoᱏ—¢u|¼É)n3•æÇV­¨ùHŽj5WNG ÷ž›£ñLá€üK•Wò}Å£Š[Iä% €¶pÆ\AÔ*Rp?Ùî!ï¹GÔŒ20²p ›0„U`ú’)™Þ9Š[nÂiDáHÆ­~q—ûßòÜo7zŠg¯¹NýNYD7È8[®Ü‘1¿§é¹zÐä÷mZN[ßG¾ñ¨£WïV¾× }Ù=fNú¬1ÅmÑ‚‚=ÊÜ%k¸D:•6§w(Á¼E òP[/›¬-L¡wØA“Ñ͘¥¤ '“ˆ26K»qv´«tÎh É2دm­\j~ÆÑ¸Úy¾{˜åuŸóÍ}n±ð6ÐQ;¯•¡¾]ñ ßÕ¤®Òg³†dì F;P-–¦±ÍïX–w/}YÑ­ÇbO™Ý7¬üý¤Ïvù=*TŠÓʪ«îâ Œ~Ø9AqN¬sšt¤]Ш‹BEEGkg׎¨r"ôŒÇ/û„Ƥ1ñMö½æ{íÑØGã{yêåé—§‰%±$–”£å¾±e üwä!y¼ %5’IM’Q’Q’‘Õi«ÓV§›Nl:±éÄÛ;n︽/ð/þ'™óá ½à/¬À ¬PéªÒU¥«Â}…û ÷+NWœ®8(D!ŠQ`iˆ4DòÝK˜—ØnìÆnÞIFç¬ÎY³¦M;›Ê6ñ§T¦T¦TæË?– ÷p÷ÐíÐ5¨A0Hþ ¼aÙvÇZ¼º<±ËXJ—GŒ:Hé²É#'¿KRÖ0LSC­•l´—‘†ø(O@à/ ï_ÏϘT“M„a'0«¿ú,·Vœ)z<ö\|—ÆOîïØå—Gé³Û3¶QúÌ2ÐÒP“@]JÕ‚2‹>ÞÜ8åêÇÉ+:hº†ÛÞ1ü6ðY8Ì;ÆžtÅ}ì„,­Û?È×¹~pÃKØ€aŒ9O´XofYH¶#,ÿ¹¯ª.S^¯¨Õî™KßFt¬¼¯zc‹“.‹'úzd÷¾Òp’!¥¡¹Av”†9 4¢ëŒ«”†ß ª£4|ZÐbJ£:®Z|ß)€<^°­ÊÏmãÉÛï:ÓGÉ)Yû¼¦’rüÏž³û¡+òcû1,³aHO\ÂF|µ,*Aò°‚¬ÈH2’Œä«‹‹‹bÆŒ9¸÷öÞÛ{o˽—{/÷Ó0 Ó01Q˜‚¿ Ñ ‰ ±!6P…*T‡Æ óvùÛåo—ï<³óÌÎ3²Ù͆üo³Ì6°a.2™‹PƒÔ†J†J†JÞ¿zÿêý«9’9’9¾!kÊš²¦ß±Ty·žXÄ"–/ªø¨ø¨ø´~ÖúYëg^!^!^!Ök‰µçpçp7pã›L±‚­]àOà `€áP•ý_eÏì¾£<$Tº²ÝèÓÒ©K–Ž0ÌÚ9·t¨½ÍÝ$-G¾3–ô% ‚ð¾ê»Ó8ÀD1XL¢Ép¼ªßPñœ‚‘ÜÂ^ží”¬£ŸŒØ^6¨£tÔã«( /Ÿq„Þ}¼zZ¥Q¦ÁÛ ƒo6žüáØ†…mº£ùû¡ ¿Éí@šâlY{f¦lûÚןÉzëÿRýz-]Ð6LrŸX‰:³ÝE2ihñã/‰\ØÅÌ!ƒv 2TN¾ÞyPcûý“fWùHÞì=ì<|oé¼Û¦¾¦ôùåY ”FfÌx@iø¹ Q”>w˜™@iØ¡sk’îgNsKÝp¦¹ÿ³£7nô½<ìuç‡+®‹lë¿Wj¨*ïóãã’Wd(^sÄwÈ^Ò·‰>b–`:~³õ¹¾2RO5!nĸ!!1Ê2Ê2ʺs5æjÌËO/?½ü4üÐðCÃñ-™¦LS¦éRb…üÿ5 0Ì$f3‰3ÓÔ¶©mSÛWñ¯â_Å_|~ñùÅç:q:q:qü§DžÈ“ÿÖy£?ú£?1&ÆDÑê©7¦Þˆoß*¾ÕøãŒ—¹Ð0'˜̉ïRm­ïÄ5 £ 3aÈ;!w­‰[·&Þ©Þ©Þ©ÎãœÇ9c^2/™—è†nèÆ§¦úñ¼ø3°‡´‰FÀ,ä€Ué]Ú´d)]µ~Ì©ÏEg‡½¬é»ǫ̂-ÍtvêÊÇL YK Âø.Q‚IJòŒG‘ÛšùF¥&{É2¾Ëà–VìÝ>›ŒúërñOziP‘8ã ¥OÉôrJ#ÔgdÖ9?ì5}Á ÇŇ}ï´ÔtlÕð›trŒ8c/ %ý <Â\ÈCÿ•럛+ì`„lÜÂlBZày@zà1 !MqÍ óS˜~1ì§ù®mT_£ ó7Œpnµðž}_†//r[yò#*ÿøsÀ)J#üg 4"fF ¥á#‚T(J îDihÎŒS©gvûswælxÜk '¾î0»ùmûå ˆO‰¦2_~îÄE¥ì¦ {ƒùDÞ%Äc£ìƒÿ.’:¯î˜ÃæL_¦/Ó—¯îÿ¸ÿãþ£Õ¢Õ¢Õ®7¿Þüzs³]f»Ìvñvb¦5Óši-Lµß`¾ /È ¾l(1”J.1—˜K̳uÏÖ=[×±Çþûó«"L8΄ÿ—‡YÕ?D÷OA Rs‹¹Å\̦˜M1›úù÷óïç/õ_̾Gaa†`³YÈ,tZç´Îi÷ ïÞ3Ü·ºouߪ ® ® KL‰áŽáßÁóJà„!Ô¡Â°ÈÆ^~`NeZ•; t²\åÈ…c‡–Sºª£ÿ¨Ö7­×Ëç¿Ä6#‰— <ïžzöxâ:e–’DëGíBº¤·4·xtDwG·Yu+~8DiØÔ E”>MÈ 4üNPh혇 Z_J_Õ§W·‡ÚÛ¨ÿø€"MÖ€$e¼ûšAŠÿ‹$½¯ŸÅÖ›0¸Èæ°ò$ÝÌ$£ÿÍ÷&àž»£ŠñŠõãšï<·cÙ)ßk)»Îô›Iièö)|2SÒpàÁ”F,™q›Òð~3¬) ë´¬òÄ=L›ÙeÏÝa7žžêÖ!§ß*›Ofꆵ ~ö¨ZÀì 9D…yÇ4&ý‰'(NC jP”µùM³“ ¢A4ø *)*)*);ôvèíÐ{“÷&ïMÞ„… H© L¦Ó‹±‹e(þ;®ã:®#™È---\•¾*}UzÒº¤uIëüÏúŸõ—9­±Ø ìÈAî¿ÛÊ;„0`Àˆg‹g‹gotÜè¸ÑñÅÄ_Lìt¨Ó¡N²’BRHÊw&C^ávƒÜŽpÈ^o¬T­T­T½z{õöêÝÖ®­][;u]u]u]Ù·êmW¶\ üÞüšŸÀT£id™  JsΗm¬(D yËŒšÓ ˆU2c”o‰ˆ¾Ú•œ¡ ¢A@¾ T' ð}Áoo%@Ÿ@#h U¦òh è0ïÉ RDGÐôì-Óˆ)o!"5eØÖ#ç†ÄͶRìVìõÅÕ£a3­Àœòñ~v¸Ô£<çZí~«•ºéó'=cÞ4ñØœ{nM4ûØ3Æ £iÅʪ5öìæcFrG9[š€‡ˆÆ'd"¥²sûý¶6Š!‹Æ°‚>šÂ :Ø„éèÄL!FäYH °[jÉ©Ñ6R=i €Ñ€|œÜñiÝTŠÛÃòîÞ}=ÛØNoÙÏŽèœÖû ™¥ä©¥vWAˆYBé(® Àž":µ%;*”Ê4ëNe+8—³ñŸÖ”œ¼18âKºßí HËäW…ïÊ>Õ>*תŒªÑþ¥ê2I6ªI‰&×¹ÔŸÊÓ ê€ÙHCʹÔ’æb -Ã9ç¾¹R®Þöåÿ>@a1-¦ÅŠ¡ZnQnQnq8äpÈá§ýNûöû˜ù˜ù˜=Î~œý8;ôjèÕЫD›hmZE«h•Lõás‚ ür|á _ö0{˜=,Y.Y.Yž¼2yeòJn·‹ÛeóÈæ‘Í#ñ>ñ>ñ¾ºðºðºp™ß¶=ìaÿ+Žb [ØòwGÜBÜBÜBm‘Ú"µEuÑuÑuÑ%K&–|Ý·pGp仑^ýQÇ»l‰–hÙк¡uCkãÆ;ŒwHs¤9Òœäˆäˆäˆ’]%»Jv¡E(’eBý×<Æ­À_ 6€„‘>|¹ƒ«Ù&J×çPî¹`éÐ1”®m3öþ0o—ÍV%²¹p€x"P„¼ =¿!¼j˳ÁèËÆ2E$þ?lÎ’aomvUwã³i—:z:ݘ59›ÒÈ.3í(}z+à¥Ï*‚ô)}¶d†\˜âî§Câíòžb_&÷InŒøbý~5²Ñä#™ƒ"䇣ÿ/y[ëû÷C¸3êd?‘g=™Y$ˆèãÚÿÜWUƒ”'+jøm3ݪnÁ©-jn—lb¼*ª½¹iÊbJæm¦4,&è¥kf¼¡4Ü;襃g4 4,n†$#øÂõ Ko´^oÒ·Ý➣LZÍóã*g–(W!¦¢·?w\RBü°EäÁzÆœ\"FŽn_ÓäAô§îP†2”ù$$‚D¾:èsÐç Ï±Å±Å±ÅÇŽ;~ì¸ÚaµÃj‡‰˜ˆ‰ŸñŸ…)õ¿À¼eÞ2oÑÑÙËßËßË?L>L>Lþ» ï.¼kعa熲((äy@üêÔ‹‘¢««{Vî¬ÜY¹§öOíŸÚÛγg;OÖ¿± ß™ø¢…(¾¨5HkÖ vsÛÍm7×ËÝËÝËÝ|ùsY¨k¬Â*¬â· £Nà/ «M™?bË"©Þš°"uÌúª¡ ã‡yPºz¤·¹z"]`@ÈœÀ˜A‚ôþæÔw·ØˆéèBfœa&’wİ~C»Õ¦kµ/Ú:zh›ÝÒ CÆëS~tÆJŸÉަôÙ–Àþ”†aÆ«ç%{ÅC$“ÆôIm6\ÅB1VîPý~D[ÙÙŒ Lü·•÷Ïþ%çÉ«ù-ш„l#Ê"¶£Âj0͈ٿ$ZÉF01ºëïS0VÜ£ºé– ™v‹yÓæÐÞá“$  \KiTaðJ#¼‚¶RÑ+(ŸÒ磃{SúÔ?ðfyÝvStß*±y—Æ IçÚÎ9î–f7-ý"h’f-û¯$—ÌÀ{r•øàYL,p<ÇŒ€ïjú_Ó£–ÏFÂH QˆBýTýTýÔ åÊ/”GwîÝuÜÀqÇ ”5_È,d¢/ú¢¯0™~5„,"‹È"¾Â¼ƒyó×Ï_?ý|ÄÀˆíûÚ÷µïË«›Ìxf<3þWÄŽØ;¾¬c¦c¦cvoì½±÷Æ>Xú`郥ºCu‡ê•5½†k¸ö×—˜¬ÌGƒ¨ˆUÄ*âV†­ [zŸ÷>ï}Þ1Ô1Ô1”wÃ&lÂ&øÀ>?Ñ€À_ æ $|PH4V2È×W\½Èz„{]§Å;‡O§tåÑ…;=z÷l$ó[#¸Âú‚ôþAð?fõÔhRDV°ã˜…¤[ý†Úƒ”»/Y0ư­Íû1§Ž9Li„ÇÌhJŸ™äQ6,h3¥¡»‚ÓgžÓ×išsífC Vj/VûFA'Ñd$^‘9Ä—0ýÑRö´ ‚;ØŽQäi‡Çä 釧d11ÁQ †T~|úÆñz]ºiyμjuîI‡Ï%{_ {Q¾åŽöd ¥OÕ{S©;ó0¥‘½g\¡4ü~PJ_ œÕ¨®ë#íÀ »Žõ%¾øxÅ“™“õ=Þ¼£i…¡žfv6“ĨüœØDoÙóŒ;ó€±%° Ð_öÁ÷i§žBÃj°¬_ö ò ò Š*‹*‹*»y/ò^¤£¯£¯£/Üáwr‹Ü"·dqf•è×b cãî|}•ÝŸ²?eJœOœOœO¯„^ ½ -h‘Íd3Ù mhCûWÜÒÞ¤7éÍ—M4L4L4¢.D]ˆºp£Ùf7šÉµ•k+×VÖ´z¡×_db<Æc¼Ìkß[ì-öv½àzÁõ‚wï6Þmšé5Ók¦'¿I~“ü&YûX€?Ñ€À_Æ•´F_6ï¥=T# ýƬõƒ^P»¥þ#îÐê~£åNÛiÝiS|}ónK Òø‡R_éì‚6pdüH 1"K‰î·™• úiŸWKWÛÓÞ9úu×Ã~#;S®=ÉÒ0½ 1”>å6Rá8sÜ;ÑñW£»,±=·Í4“ëúW4=¿9bs™Ý*òw·bŠžŠÊL Ë~æüÔš~°ÝÝpBPK¿.nyGªæ{úD'…œÔs‚Òˆ…Á®”F6˜1ŸÒð#A($3Í) イ”>;äP<úæá)ïlÚtd ÑÜŒa¬{`—-›XÝÓZñªQ?+“æ=cEÚ1ÈcÒexŠ¥‡Ü+'¥` ¦` o¯•¯¯¯Ø¬°Ya³Ḃ˜16¥oJß”ŽP„"”Ì!sÈYò(@(ü«!£È(2 :ÐÎì³wÎÞ=/z^ô¼•ýWö_Ù;±;ùÐhŽæhþ+zîEz‘^|ÙIËIËIëÅž{^ì99ùää““EgDgD²˜ñ芮èú—ïßÏGƒÉF6²ÜÜܼ]¼]¼]ܓܓܓ===díy[û¿æ¦ ² |ƒ$¢ŠD~À©ŸWíç`Ú6¥ËÊGFRºÜlT“û–c|û’©d*™&[8ï{˜ Ò!1D0‚.ÔpËàÇîa"ÈúMÔv+¯•ÏmÔ}©³ßó”=CiÃ'ƒC( Ïœ¡Eé3ý@BiDf°bnä•/N.çïܦƒ´Õå—þø€¢á`»<ã,¥Q9ÁÇ)\=£9¥Q~3«(LJöß:EçmÅá³ÃÏrÑíJ¿ubìn7ŒÖ™¦ºDž‘³ýÄæN6žI%—˜¦™ˆj„b|Ñ–h+èC®Þ¿+õ£¼&£¿FݱoißÒ¾åãi§=ž¾.|]øºngºéö5UÐKò’¼ü*D!Êû¯“6éIz’žüNƒŽK:.é¸ä¥ÒK¥—Jçžxþ¡ø¼ø¼ø¼¬ý¯´‹×WÜÛ¸¶qmãúÊô•é+ÓÝkv¯Ù½†iÉ´d¾®tyÀQ)¹Â®ü–h¾Â´Ì´Ì´ÌËÞËÞ˾ݑvGÚÑØ¢±Ec‹¬ý<ÁYYˆ#ð§òë«­¢ñ €;ز)5>u©…Á•-jLP¦c¬º‹$É\#-c…=rŠì'âGˆ„£Û) ùâ1 Ô |FJ1KpF*åÑÓ$…ÌC s“4%+K'Vô«1>ˆëˆÅA‹ë‹cù%z+9¤ú—tr´ì¨Þô½Ñ@z_Btܵº+}^ì>òMã)#îŒlÙ{õ>ˆ5¥Ÿ>^ÿì›OÅÖr·å*[~0}¥xª¿œÑÓœDÍã:qjmî—?Æ”ôðór%@Ý2®iÊ„Œ¬Rë¨ï|9Û$y{¾ú³7qM³ë•ßXüê¾òêÿ]Õ¶Dú`–`)—A'P-i7® uD:¾ íþëTóß/üõÊCò´ˆÑ"Æ›ñf¼’’’ϧO;Ÿ6¶|lùØòÁÝwÜ-Â/Â/¯h`ÑÀ¢ä yBžÐö´=m/Lš_!íLd"RH!ÿÿ1þc©g©g©§ö2íeÚËlÙ²9ÇÄ1q ùL>“Ï”PBõÈÔy¥óJçcÁX0ù«óWç¯æt9]NWö¢U†2”ýE¥´k±–zQ/ê¥?A‚þ³>f}Ìúp‹¹ÅÜâä^ɽ’{ËËËó¹fi_Ú—öâ üøÕŠ;Ýp¼ÁpV¨Ö>©«.µ®.­™…ät0ýHïi'(¨ˆ/’md$,qå‡ã ¾…W¤  üvQjAWA^jLõ¨&êðsÈrþC§bÞiÛ{æñg/–?©}ïÛÊËáƒáÙ€Õì]'t=ÖÒÏ,\¼$W—ËmqÈnsjðâÖ­\Õ®¡¨‰e)älÓÌàߘg¬:P«$Ý_ÞªR¹æn|ৃ¥¦÷z¿Ôûtð‘Ë«#i "¿t,mûI%{[ñ~€Ìø8&À–ô'ú¸‡kx†d\ÇsdÒ@º‘Ò‘ÜrzÎØ'™¥¹¾2ôOSÙëÃG#¹„K¸DKh -á•§S–§,OY¶voíÞÚÝÞÐÞÐÞp¤ÒH¥‘J›R6¥lJ!ÉF²#0#p'qu¨C0uþÃĺMoÓÛ¼«LEMEMEÍçÇŸ~líeíeíe÷ÚîµÝë¸Þq½ãz“T’JR)CÊðŠþ/?ŠFFF‰'ñ$¾èDщ¢؃=؃žè‰žHB’þâ¨?y7!/xÁKý úAõƒV%V%V%l[ÇÖ¥ßM¿›~7k`ÖÀ¬|Äz:N§Óñ_ðEWß'Óá wæ3iH¾âÈÀ¾×ÛeQºvÊØ7µ‹RöiÁð¡=Ն˟çɾµ]*­·€€€ÀÏ‚ýaIÚ60eC™\òæGílÛ=j*±ð:·yn¼§Ilæ;Í;ŸÃgÖt¨.—”se¢gEÕóªÇÇ.M{ø:o¥”Òè”RšZD)¥gªV¿R[7 O4ègeèËä2ÍIF‘ì"{1ÿ‡Ð„¿inÑ4bˆ!† \àBX™ª·füšñkÆÇ\¹s}·înÝݺr·änÉÝ"¦Ä”˜Êl¥¿U¨B•ucÝX7¾¢çžwzÞIÔLÔLÔÜÝjw«Ý­äÊ?” $à1ãñè“îÙ…t!]øX4K7-Ý´tÓÛmo·½ÝÖ·cߎ};Êæ’R:ÐùÓ$P_eï†nèS˜Â”½È^d/º4qiâÒÄû®÷]ï»Íû4ïÓ¼ø¾ø¾ø¾¬ý œÀ‰ož?~½Ý¢RHqù"µ–-­½'ÍA7‰Ú“æÈ ¯Dó9愾·Z™²¯ì[[Ñ^‚¸~5üw$_ýJi2 0‘ʾÃc¤‚Wˇ²ÇÙäiŠEÒëd›ø®ï޽;öNýõ…ØQ‰ãß]yw"®ßíNoKgµ<-9¥5ûòGX¹­.ñbK’LŽ’)èÓp¥ò8€çœ÷ŠÞáªè$J1+qAv&¿UnQÞÝå5^ã5>á>ñÛ(÷®Þ»zïê<…<…<…fƒš j6ȷзз¦ÓtšÎè2ºŒ®,å Ný{ÊP†2z‚ž '`CföÏìŸÙ?Û&Û&Û¦QûFíµ7«2«2«â×@˜-ÌfËè“÷í¶‚¬|äk<Òx¤ñˆ]Ë®e×o.Þ\¼™oH’ƒä *Q‰Ê?MüÙ¶ø¿öî;>ŠjýøçÌlOï$!’B€PB“¡Jï"Mz) BD¥÷@@0T)†H€T„aÉgñAÔIDAT@zÛ:ç÷Ç,¿^îï^¯Êóޯװ™™Ýœ³»yöÌsžƒÆhŒ¾è‹¾8Žã8^=¸zpõ`×®7\o”•”•”•$×L®™\ÓaŠ0E` ¦` "‰È‘êFÈßÅëBvI¾cbßfáµçs¾¨Á[Œçy¾é`iø~êø>¾a1ÖmBk#5!䫸në°p»°×ÔïD9«§iöÏߢÙ/Ì® ÖkP'P…õO"FýÑýÙ.¶‹í’ïY<²xdñ•1WÆ\Ó1¦cLG¯N^¼:ÉùÓ,–Ų؊)7äym˰ÌZêÑ~¶ýlûÙ뷬߲~Kb\b\b\;C;C;ƒuz±¸X\üÿ9gB"Wˆ—Ëzn,ßX¾±<ñDâ‰Äõ‚êÕ ²¾Ë ‹„Eÿ³/WòãÊõì¯ã:¬kû†ø†ø†´ÝvtÛÑ-g´œÑr†«ÆUãú¬Øh’d=–ª‘q¯`þ”·ÅÖüÔja½aa¦ªó¦½Ù¯^9´|ô…×vÕÞf}ïd³YMj7BÈKaóËÂãÌ d­Ð_èÏ® …¶Ì$ôú±qBMö#ÀZ?;ˆu”ÿ=ûo…-ןÿ×Pì†h)èÐò5J دö's`ÌÈ@†®£®£®ã†È ‘"¯Å^‹½;ë³îZ÷ìÌ:³ÎÖDØÀ†Zï¹áGaº0]˜.ßñ~—÷»¼ß%µ^j½Ôzœ'8Op¶¶j]V—Õýÿ¬Y»›±YÞÔÎÓÎÓÎÛ•¼+yWòùŒóç3‚÷ï–‹Q@è,tþÜ+~‹G<âåM—~.ý\úµ\ÞryËåmë¶­Û¶®Ïk>¯ù¼fÝ3ùȇ?üáO/ò%ªÙa6XÞî¼·F¬ßÜòy×?2ÛÍ{òæ—œGvκˆŒ·î_•a}¨Ý!ÿ¿ÙjjG°>­ÿdÓÿ-«[¸²p… Jëêп>?ùoUœ®Ú•ueÖËæËš/k¾ì§ðŸÂ ?=õôÔÓSÙ6²md]q–•²RVúsŸÑtÕCH’„$ùzÅèî~µçÕžW{.Ï^ž½<[õDõDõ¬ŒÄaÆá羉BY( •ËzVšZij¥©ßÿnüwã®8ºâ芪㫎¯jý‹ÏŠX+ú“ßῌî¯Çz¬·¾e§ÚNµÚt_Ó}M÷Eܸq?0)0)0ɺ§¼ê_a-!ÿù;ú÷Æûa+~€ ,¦úÙ†–QRSß~yr¤\å½oÄ ­„VB«ssÎÍ97çð¶ÃÛosÚî´Ýiûˆ#ZŒhápÌá˜Ã1a„‘µd-YKª«ý\<–ÇòXŒÆhŒ¾ùàæƒ›JZ•´*im›g›g›'¯PËF°lÄsÏ6³1[.ëiwÎîœÝ9uwuwu÷’Ì’Ì’L½›ÞMÿl*êAÄÁ?éw¬˜‰¾k°FÎSWwUwUw îÜ3¸§®‹®‹®KÎÔœ©9So]ºuéÖ%LÆdL¶¦Çȳ,(>!›·õïÂ{ñ ü0Ìàà¹Æ²Cúbƒ`®kQ0=ûïC-ôai•*kWªjC رoX;Ô¡I„ÿ¡_>}Lxž`ž€ÃRá'€ ÿ6pÀ 8°®÷ÝXW呹”G´½–új{ }¼ }PjÞ‹RÜÁAÜzÂåàýþ.r•wyôîàŽä!yH[zoé½¥÷Ýð»áwÃëw¯ß½~÷×=_÷|Ý“;q'îÄ^g¯³×QµQ›ÆÝÿ $žÍ³y¶\ÉçêW¼úcQtQtQ´[¹[¹[yÕ²ªeUŸM!m€h𼓱Ùl6›-oÛ%Ø%Ø%¨ÕêÀC‰¡Ä ïªïªïj½~rpà¥ÿvCöÎèŒÎ8„C8$x Þ‚wàòÀåËlll 'N(œZ)µRj%i°4X tÐa/öb/MB%/¿7p/ÃH,@+¸B“Õ¹`Eñè² FÉä(lfQ,ÀøÛÏTmÛ£¥(†ˆ\Ü…-Ô..BÈ_Qoˆ¸°¯àb˜~L4L/í¬(•Z´”Zë¶­;®Û¦ÆïU ÂD!LD1bP odà±ß?@„Qº+Ý•î ­…ÖBëÛ‰·o'nÿtû§Û?5Ï3Ï3Ï‹\¹ rAÕ¡U‡V*½/½/½ÏÌÌÌÌÖqw7ý-¹Ô£FK=J=J=n×¼]óvMñ©øT|ÚÐÔÐÔÐoxÃÛZ¦óyv`¬WÑv8ípÚ¡KÓ¥éÒòÇåËWª.U—ªåë'|5_ÍW¿ôßKµ=à´Fk´Æ>ìÃ>ÿîþÝý»{lðØà±¡,©,©,)¹erËä–†•†•†•ˆE,b±‹°ˆBvòwô{Ç'"ñ-bXgìÁ‚ò>Æs¦Ý¥ûLçÌ•0޵`Z€âkíªªÇªr1žE±s–é5~0=¨Ñ !i j0Üæ…¸ _ö|¥e¦li™a› Ê™^>Xœ:Pœ©ÉßzV“ÏÂ4 Cv¡ : ‡Žšðw’Wîd``’JRI*¹däîÜݹ»s¯º>êú(ï+ÞW¼¯Œ>bøˆáÖ…~>ÆÇøØ:¹ÆÝK^õ³(àż˜Ç;Ç;Ç;+k)k)k…®]º^žŒGx„GÏkCÍ¢Y´¼mß̾™}3Mš&M“V¼±xcñFS¨)Ô*/ù$¯9ú#ù ÌȌ̈阎é>N>N>N>!>!>!ò׿tÏtÏtÏâÅŠX¿À´C;´£¼zäRSgð{0ÑüÌä‘“ºNàÆ…yC˸)ºÉÐ[ êñ»z¦Ø_× Õö·4)ØOGù`Ðý~åø•ãWfÍ<šytlÛ±mǶ•ÓlŠ@EàK©ƒ^1dÿ Ÿá3yÓ¶ªmUÛªMÕMÕMÕc#ÆFŒ ½z%ôŠÐNh'´ÃGø!´$ùǼ—çqòÅ%ñ—o®ÃJ6è=´A=žÀ§òk¶CÔ›•ŽNg´’úô0ÁŒ}x³BÕdBùëûåRº€÷¸/îAÄnˆ¨Š‡¨ %*C ¸uœžC g08 Û|$aûV÷#ûq–ˆC™Øe¨ÂTOˆ?ý4Jü 9g}"&b"¿Ê¯ò«æs‰¹dcÌÆ˜1éÝÓ»§w¯Y;²v䀸qâ$½¤—ô¸‚+¸"çsÓ"M¿zÛq;n{ØÃ>{~öüìùé³Òg¥ÏòèèÑÑ£c@h@h@(r‘‹\¶ƒí`;¬iK²ÁŒÁ–U–U–UÈD&2:.t\¨¯¯Ÿ¿4iþRy5\þ.—¿û«cÿ¸Ši-ïâ]¼+¿*õõõ‚Þ z7è]ÝÝÝ}¾@Ÿ–˜–˜–(ÅJ±R,.ã2.ãŽá]‡!ÿ /l¬çQiI?}sµQE:ÉïóÖÚ~Êb=»›ª9 kÅw¶¨ENùã0ƒÃ‚{° ^È„ Y0Y*ÀÕa혵ÉÚ1Šýsû­Eh @…ºP£”‹ŸÉe"UPAųxÏb ¦`ŠƒÙ³fÇõŽë×»’]%»Jv£ÂG… g3ÙL6~ðƒR‚ªòn•€$°oØ7ì´E[´½ãyÇóŽgþ‚üù ‚7oÞà<ßy¾ó|îÃ}¸sfÎìÙºªíY{Ö^¾‚¡î¡î¡îaãiãiãiœcœcœSR§¤NIë£THbyäPÛ ^ðÂûxïc<Æc|µ«Õ®V»êiçiçigœdœdœ”´(iQÒ¢Ò/J¿(ý303¬¯gïÊy€¿/v™Ø*o÷Q;«ºÈG?¶Go7×)jçjFx÷×Ô¾`Í5T¼.tf'i,‰òöË'œ D€5ûùž}HÀ>Íܨ՚¹¶M~aÛD1óm„°Îé¡°U‹*ðe ZÇñù„­ÂVÁúw'l@Ø€°'Ÿl|²ñ…¥–^XÚqBÇ 'X÷”§«:ÂŽ4î.·[ıEòŠE€âà™ƒgž9v>ì|X¨&Tª‘'° }…¾B_ëKz4ÍFËãßÎ:ÜtoÓ½M÷N95æÔ˜°‘a#ìcóòLƒöœ]á W\ÅU\•ïðÜé¹Ósg륭—¶^Ú¦W›^mzy{{[÷¿‹»¸ ;ØÁŽcÈ?÷­üGTxSdŸ.Š+ wÖ¡–¹šÁ…›0Ó6S™.œ·î´íQ‹Æ’!ÿ`rº‹ èagp@%¡*¡ÂÐC¿`Óý‚ò摵˛óDãBž(Þpj%ÞÀ]¸à.ªàªà×_œ ‚AõŠ"r™Èh)ZŠ–«Í$lOØž°ý€p@8 (•ÎJçÁ6ƒmÛ8Îpœá8Cª&U“ª±bVÌŠ)Œ³.Æ´‰oâ›äÑ÷ŒS§2NåÏÊŸ•?ËÁÁÁÁÁÁËÝËÝË].i]ýÔ¶°EWtEWyü[³_³_³ß¶È¶È¶ÈðÐðÐðÐZlQ|_Äý¡çYqb«œ›^uQ×±©cSǦMš4·‰ÛÄm÷¯Ü¿rÿʃ¥–>Xj½2…(D¡Å(¦"Bþ¶ ·°EÞö_å<ß.Ÿ‡/Ü2Ì¡tÛ{aƒîp¾4vÔæ©™MûÔœ t°QD !l*Á¶Ôz„W„\R€€fÂD4ûûÉõãŸÑþ¼e =lQ_˜‚úpÄ98B§Ÿ‹N¾šSZó‘|ÌÃ<Ìsupupuصc׎];â#â#â#¦äLÉ™’cmÔ‰l"›h=êß/0ôʰÖÞ,Þ²xËâ-×v_Û}m÷—).S\0µÂ-¡µÖ™xxxžlu²ÕÉVûtûtûtN&'“Ó³9…(Dáï}Z¾\ÆhŒ¶¾öi÷i÷5~§ñ;ßiw´ÝÑvGk•Õ*«Uf},8ÀÁº!¯€?6➈Ügåõ̲D:T8ܸÁÜJqœÅ~€%CZà“⤱/ƒe(µ´•ñïÑ uDMOyEHx6¥•C޳Òg8‹Úl jCžB Àadz*ïå?_ JpEZŽ+(@SÀ,܆þÌþx6Ư~Ex¹VŒœàÄü™?óZø´ðiáúðõáëÃÍMÌMÌMºLí2µËÔ°]a»ÂvñÏøgü3a‚0A˜ W>y¥Gßåñì;¸ƒ;x ¯áµ„N :™Ì æ„Úŵ‹k³Ãì0;ŒeX†erš_…Ñ_i¿Ò~å°Üa¹ÃòòúåõËë999ãu¼Ž×1 Ã0ì¿~V'¡.Çr,—¯(¶*¶*¶†L ™2ÅNi§´S\,¸Xp1µrjåÔÊÖ}FaNâ$NRByü±—x2 ž’ ¿R´ÎèiÛ£a¤ËR{Ѷ‘ºDp¶åòi˜X´‚?*SÓB^9e?' &òH„(…C„Î JZ wÐJþ¯êx—kªã¶kVŒµ]#tðúNèHN2x2Ð\XŠæ?ýr}ørð"׊‘ÄHŒdŸ²OÙ§GöÙwdßé}§÷Þç~Èýû¡¡[†nºEÍÔLÍxwÞwg®Ì•¹¾Ò¯ÀŠÓ4/à.\nv¹Ùåf¦Ã¦Ã¦Ã•;UîT¹Så•wTÞa ñ·b+¶Ê_“䃴´´4ç5ç5çËg”Ï(Ÿa)¶[Š­KeíÁìùï Žh€Ö{²‘ì€à€à€`çýÎû÷—¶-m[Ú6ùLò™ä3ÆB>ÔéG§~”úJ}¥¾ùú|}¾5P5ä)­¿óùè ƒoá-¼…)˜‚)¾|øð>ì}Øû°é†é†éFª_ª_ª_É%?”ü`„:1ñç÷ •z$¯ˆ?¸ó‚à3äµ!¯ y͵ƒk×¼9oΛ#ÉH¶ŽÜ¿’i3üCþ!ÿPN•)~¯ø½â÷®ï½¾÷ú^»L»L»Ìê«w®ÞYgN̉9YÓQ§N9œâ+ø ¾¢P, E$! IÖE¯þsrZ‹ \à´LË´ò£TšZij¥©þ›ü7ùoâ:®ãº § § §\Ÿ\Ÿ\ÁATAkâ!¯˜?6â~·-̰èÍuÍuÇ•D–¿³Ø[øICx†}?uUe’²­¸^¸h½@7ØSÓBÈ¿!0 Ø@€ ê‹#Pß<7ó¬ynù£™åŒÞÖ0z+,ÃÊeVó7•YÐph `Úߌ%Ë벊ÿ° U¾UPA…õXõlÛÄ6mí·µßÖ~IO’ž$=©\5¸jð°ÁÃ̾cß±ï„ËÂeá2"ˆWt¤v Ö`0I˜$L’êKõ¥ú·Jn•Ü*QµWµWµ¯â_Å¿Š¿pO¸'Ü“ì%{ÉÞš6#@€àXîXîX.Í‘æHs â â â~~½þ§ùåòžrZËB,ÄBžËsy®}ª}ª}juKuKu‹ÂFa£°Éú6ëÛ¬o³:euÊê„k¸†kòþT#ˆ¼ÊþXàþÒp}€9hÅ;K¤ÝÙ#‹>*m …0YÈ5;òæü¸s æŽr„Z)ú ¡Ö£êÃŽÔô„òoÈé.€R(E¼e âÑ£!V Z¬4¦ÇåÓË?ê[þ‘郳×L@ÐÃÀ/Ãy«Ì™°EMÑ5ጰ.¬ó)1i‚ &®åZ®e'Ø v¢è\ѹ¢s뎮;ºîh™±ÌXf|}ÙëË^_Ö0¬aXÃ0)JŠ’¢„ !HzE§3ÞÆmÜfûØ>¶OÎ,ÏB²PPPPPPP¹Få•kø&ú&ú&òDžÈY"Kd‰ò¡_9|åðŸÍgóÙAAÿM©‰Š™èoãm¼±‹±ê«ê«ê«Ákƒ×¯ÕlÒlÒlÊqÎqÎq¾uñÖÅ[11ï༃s8‡s”CÈïU¾ð£ÙN;ØÀfÎöVÙuÌœ/¹6ò~¹÷{×£ºBçßò†¯£Ãuë4V¶ 7°ŽBþ+r€)×  ‡ ^¬#¼ôúÍ>ý¦ü¡Ø @sBˆõŽREš¥XŠ¥Â a…°Bñ±âcÅÇÑ£G?N|=±sb篲¾zøÕCm’6U›Ê’YKCîàÜþ@~ößci,¥ÉwøøøÈ3K/nº¸éâ¦=[ôlÑÑ…r¡\°V9Švvv½ª½ª½ªí^Þ½¼»õ~Öƒõ`=þ£GïÞèžè‰žì}ö>{¿ö'µ?©ýI»‚ví Îo8¿á|Z£Ö‹Ï¶[„-®¥®¥®¥r%™§Gžyzä?êY(Bj-øƒÄø5ðkà×À]pÜ…²è²è²èäFÉ’é zƒÞ _ÀJ¬ÄJkºµ“WÞ ¸DÈ— Yòv©§9CÚgË^WÈa'ØDò$dWzÍaŽíjnBy8,?‡/yØŽ<”âÒ³â¼ëÒØ¢llX.ã,WsmèÍ5m£¯Çh)bV)bðˆ{ã²ùdC'$A‡gUáÝþâ¡{Åõ5gb&f²l[!l6 …öB{¡½òmåÛÊ·3g~—ùÝÆ;ó6æ±{ìcöñÎo¬c½ÿ&ÿJþ•ø7|5_r,Ã2±¯ØRlÉv°­l+j£6j[ÏÿOM§‘3ÝåŒÿª¨Šªã3ÆgŒ/ßU¾«|Wh¿Ð~¡ý”’RRJüSþ)ÿTŒcħûN÷îóXËcóRòRòR¬g{ÞX¸j«¡†_á+|_øÂ×ÛÖÛÖÛ¶J¿*ýªô³<µ<µ›}6[÷OG:Ò­"iA%B~ãT±å³øiÜÀ8Å—yæ#úLsŒå±²%kÃÀpî‹l{kO¡+=[R„BÈK$A„à€G(Â#´´Ø£¥ß@±þ¶ŸÄúÊØY—•±vK7åÛ--sYæSæbÎÕšs,ìA0R¤ÞHyϤb7¸Á qÙö€=`1,†Å°­l+ÛÊÛñv¼$J¢$âK|‰/+žÆš%ÑÐÁº=c1Vþ©×W^_y}åèèèrÈåË!777ϯ ¯ QNÚ·wÎqα´P6R6²ïä:Àu€Ý6LÅÔ:‡7 oÒ^Œ°‹°K3g<¾ÓòŽîŽÎú(å(G9fafá4Nã´ T‚ mÐm¤eÒ2iÆ` ÆXkÃW\"ê¯Ì ,¼:¯Î«Ë½“ªKÕ¥êÊÃÊÃÊÃÜ›¹7soæ¥óÒyéò7åoÊßäéé©R¨*EѺ¢uE댟?1~‚+¸‚+¸…[¸e=³|=D#ßÝØvh‡vví6Úm ŽŽŽVRRzü øApÖŽ¬Y;¬ÕååŒö2”Y×$ „üÊ‹Üûa~Â(X­?o_ÒÉh6qÔ£E#€ HñzÓ>WG‹.BÈŸGN,`8C€ C Bû A–+¥jËKÛ÷`ikžR{¡y räØ@âÓ!áY¦; Â"ð…:<†µÀ$ÀÞ6à Ì0£3:£3 gá,Ü ?dÙCTFeT¶4²4²4âøåfµ[°EÞ[‹­ÅÖª•ª•ª•:/—Î«Š±Š±Š±Ú§Õ>­ö©ä#ùH^]¼ºxu‘S³ç:ÏužëâââàêàêàjßÒ¾¥}KÉžñ bMî‰Ü¦;v‘v‘z'S/S/´“ʤ²Ü–Ër½ÍžÎžÎ,_¶0,ë‹Ç.]2×Ý9{çlêØÔ±©cÏß9çü´Ei‹Òé[ê[ê[þjNøÀGtÝD7ÉIr’œx1/æÅ(@ ¬ÕÍÿÊiS0SäÊ<Â…? Ïþ:ûëì¯Cf†Ì ™Y·¨nQÝ¢›š›š›‹ƒÅÁ¢è®è®èž¿5kþVS S S ëyR‘ŠTkÂŒüûvDGt”Cvå0å0å°àÍÁ›ƒ7kjjÊuÙÓN¦L;É—óå|9ŠP„"k¥vBÈs¼ˆuãc5ß5°}šUV¢W©ÿÖ8Úm·fŒî€±˜áùµÝ.mô¥'„? Á ì„ |=„ëÂq1ÇÍHlYa€X ×µÞ”`A!,°à:,0Ðÿ‹GjަhŠÇx‚'ØŽíØÎåÛoæ !BˆâÞѽ£{G§ANƒœ9Ts¨æPͽĽĽÄÏÆÏÆÏÆ{‹÷ï-¾÷|ïùÞsÞë¼×y¯V«ÕjµÊ!Ê!Ê!ªƒªƒªƒêBu¡ºecÙØ¢ø¢ø¢ø'•ŸT~RùnöÝì»Ù93sfæÌÌíŸ7:oôí{i ÒtùrRФ Î[¼özí-Z{xÐÐà`pH)I J ªY»n§º‚|}}›}Ñì‹f_ <1ðÄÀw•w•w•q>q>q>‰$ȺŸu?ëþ.wºÜébÌŸà žÍæJD"Ù%v‰]ÂE\ÄEnÃm¸ –a–ýê*ÄÿVò'§'Ië¤uÒº·nܺq«–w-ïZÞµ–ïÆq,A,…‡Ê:”¶4Šæ0 o± ây‚“QýTYÀS­£ò÷rš!N!Ž2pë2L©¨…TØZjÀ^¬^¸‹Æ¸ ¿ *øB#’aÄ Ñ “á%~L6¾…iÿâügpçäMuGuu‡ê£«©>ÆçkŸ¯}¾öòöòöòv9írÚå´Ç '¼B½B½Bݲܲܲ\Ç»Žw¯ ÐhLsLsLsLî&w“»±™±™±™åcËÇ–K——./]ž}"ûDö‰GxtàvüíøÛñ÷ªß«~¯úÓ[Oo=½•¿={þö¼&yMòšäíÈÛ‘·ò píøív·ÛÅx…. ]ZÖΜ`NP«aаì÷²}³}oÛ\íyµg`lðÜà¹Aû[¶n¹¥å––[üŽúõ;hhhW·[Ýnu»™;˜;˜;d^ϼžy=%9%9%ùzâõÄë‰qåqåqåC2†d ‘§·VüÇTLÅTÂNa§°“ä#ùH©žTOª'gðÿÏÖ d Cx,<K\â¿y)òRä èAу¢+'WN®œŒp„#Ü®«]W»®ŠSŠSŠSÅAÅAÅA¦‰¦‰¦‰8ƒ38cÍMD ñÞÀhЦhZ­Iµ&ÕšTò¨äQÉCoÒ›ô¦¤ÍI›“6—5(kPÖÀ:N‚„PÈNÈâEÔ ø‰ÖHÁ \cC„ô³KÞÚØé\Ó=UTš.í—Þ¹ÐãÁöÜ K¿L9ð [‚ñ1¯t§ „ÿ¹Š%  š³½hŒÇü:òD;ŸbáÇ^ J]f¬×wθ¤Õ.å'4Ì¥s’Qy]8)¨ÒNÛ|l³²{éžÒ=.¡g=ÎÚž³©bSÅÖhk´5Ú²d;H»[»[»ÛÒÃÒÃÒ£pEáŠÂáááyòå5Êÿ<ÿóüÏsûäöÉíó ïƒ¾úÞ7Ý7Ý7¥ìLÙ™²óÉÉ''Ÿœ4ƒÁƉƉƉ–S–S–SÏý­r‘‹\qŽ8BÁ{ðn¼›ÔA" ùÏ›EóPóPó°’W%¯J^94rca,Œù%ø%ø%T›RmJµ)Î:,>X|°øà“½Oö>Ùû¨Ú£jª] ¼x5ð‚ß¿ ~·kÝ®u»VŽ#äüjª%뺰.ì8;ÎŽs×q_—ð%8€8€C8„CNƼPG¨#Ô‘R¤)Åÿ¤ÿIÿ“kš¬i²¦‰tYº,]usÔÍQ7CòCòCò?8ûÁÙÎÆøÆøÆøÎÿhþGó?‚J(± °ð€FaFy®ò\å¹*¸_p¿à~òߤ÷’ÞKz/{nöÜì¹xˆ‡xˆ €2Ú ùs9B ¢ªàÄÞ—ïø¾uÔ•v8ÿðë·¶p¾°ëÐÉÉqßìådý¨ŠÀ—Gè ¡Æ#„¿´¹¬VÉ›¶í;]LåÜ2ø†7çœ'ÌâœóDGÎ9¿Zr»íí¶Wo^y|üÀ«nWÝNhOhOh7ïÚ¼kó®ßûø½ß›TcRI5úÏë?¯ÿ¼ö÷Úßk¯ÎÊ:+ë¬tÎwÎwÎÿoŸscnÌM8-œN YB–% ÁB0›Æ¦±iøŸà8À®òþBea“°I,W¬P¬—(Æ+Æ‹7++„Ûâbq1›ÉÞbo‰¶¢£èÈÞeï²wŸ÷¸n5ÝjºÕì˜×1¯cÞè;£ïŒ¾³Ú~µýjûm~´ùÑæê㫯>Žˆˆˆçñ<žÇLŽ™3yÆ’Kf,éß-¾[|HëÖ!­Ÿû‹yÃÞ¢(Š¢(¸ n‚>ÀøÀúÓŠ¥0_Ö—õeÖdV'''‡µí×¶_ÛþÚäk“¯MîаCà {‡ôé’”“”“”3mÁ´ÓXþ_à‹Š 09Þp¼áx£EÍ5[ÔŒhÑ6¢­ÿ2ÿeþˬûïÂ.ì‚-laKo/Bþ[/"ǽåÐÃ5Œ<¤Á¾àˆ1Ç` z¡˜·àuµë”§Å‘¶4ª*%õ£6ø31 MñÖR7BÈ_ƒ 7¸‰Ða ´ÆF·MÆ*e] æ_Ãc‡öKS€¥ÌR®½,ÚŠÚÃ!ßÍúnÖù¤Ã-·ÈŒÊ²dYJ>*~·øÝ’Ó%§KN—d•d•d“ŒIÆ$¼_á&›€ ˜Àn±[ìÀ°|3ßÌ7[k’,Æb,æGø~iHC’„$ÇãxïÆ»ñn(D! ­gKAÊ¿ª‡#eIQR´r1füê÷e`nán­#.×B¢ØZ¶–­•«ß<9ÿäü“óGœ8q–µùÞæ{›ï=Â=Â=·iܦq›†® ]ºVíVµ[Õn®\;¸vÞ|xóáÍ — — —²…,Ü ¿~+<íQÚ£´G'“N&LÊìŸÙ?³é‘Ò#¥G*æÍ³¯Ù×ìk¡ÐFh#Õ’jIµøI~’Ÿ”]`€†?26ÏkñZ¼ e¡,´À¡À¡À!Ó=Ó=Ó½U¿VýZõ«U%ªJò‘|e]e]eÝ‚õë ÖC 4B¸.„Kã¤qÒ8íXíXíØ`e°2X©®¯®¯®Ÿ½;{wök3ÖZŸíAÄA” %”4KÈÿæÃ‰ß1#[(ß±ªN­Í¯piQýá¤Ä÷§¾‘ýÎÌŒ7¾÷»êátU>†­B>ÎRãBÈ_Ú[Xø¬Jºæm›½ºè¤\Î9¿{„sÎÓöqÎyaUÎ9oҸ㤎“þýÉ_ÁWðKÅR±Tl.6› QB”Å겺¬®¼4u׿Îâöò3‘K=Êw4aMX±ŸØOì' ‡žw¨]k»Öv­[¥¶Jm•:=ezÊô”5±kb×Äž>púÀéI’$ˆ¯_/¾Þ™“gNž9¹Ç}û÷é1Óc¦Ç´ kÖ*̯½_{¿öÏ}n§p §Øì ö…õ:ÃflÆæß׆âYñ¬hý»y;òväí¤ýIû“öXôaчE;|ì𱃼LRÿ«ý¯ö¿jíÓÏ…Ï…Ï…“ÂIádØÁ°ƒaÛjwªÝ©Ÿ6ø´Á§Ê»Ê»Ê»ÖŒÁü—ë_BþV^Ĉ»ü]y=nâ¾|G~ŠÞÏ #7ã¿ÃÀIýH‘ ÎpùD×JSù¶€ãàl̺Ð×lBùK;†ÍØ%oëê×.N¼ß¿_¥b…ØMì&]’ÚIíÔ%B¬›^~móµÍl$30‹N §y¼´\Z.§¬ð/øü iº4]š./èc Ýä©¿õ×ùó ?“ ãÙü¿À/X~²üdù wqw™Žé˜ÎZ‰| b \C¦ødñÉâ“§‚N :…S8»$»$»$¿î~Ýýº‡†††††6¨× ^ƒz¡¾¡¾¡¾Þ ½z/ŒjÕ:ªõþCú韑‘‘t9érÒåtKº%Ýráý ï_xÿfäÍÈ›‘Ü»q·ß6•x\<.çÑ<šGKjI-©­e+VX¯H€Ïåsù\ØÃöé,¥³'Ÿ>ùôɧçÎœÖ ë„uz½^¯×RüIñ'ø?àìÄNì¬~¹úåê—ÝSÜSÜSJÒKÒKÒ“—'/O^nªbªbª‚åXŽåÖÒ“4ÊNÈ_Ä>gMåíÉ­ZüP·ç “‡µ71?äÍseó~|­ÓÝ ýÚY÷çì ‹¢v#„”ƪ¢„œ½í¸È…ÁGðƒÅ`1ø·»+>P| øÀýk÷¯Ý¿îø¨ã£Žæ=œ÷pÞÃM­6µÚÔêtêéÔÓ©·:Þêx«c®„] »Ž½yìÍcon|gã;ß™*N§ŠMÖ4YÓdÇ={÷XÖ†µ©x~æÏü™¿`'Ø vÌù1?ìÁìA$" -´ÐZw•Sƒ"Ý Ý Ý]É»’w%ŸrfÈ™!Ç=Ž{÷8óù™ÏÏ|ÞÌÐÌÐÌ T­[µnÕºµÓvNÛ9- [¶,tä2ÈeõœÙÈF¶õz­„JȦxagúçŸåæŽ)ï`hÈGó…<‹æëqZUM¼+´s<§áÊ·±l%:£`u!„üEU,Ò燨!öV+‚Q5PYÈAÂî–Ê–ã–ãPòŸøO°ƒ#!/Côª)©p[‚%X"I’$Ið‚¼XcÖ˜5f#Ø6‚ó`lnjnjnšƒäX‡Åå›nnnAÛun×¹¨ÔêÃê…Õ «WoL½1õÆÔÚVk[­m5GÕUsTd“È&‘Mîuº×é^§Ä}‰û÷]›zm굩·”·”·”×W__}}µu€»Å(FoôFok÷& IB&c2&Kž’§äɼ™7ó.«YV³¬æ‚;w *¬|°òAK´%ÚmH0$Š‹‹í ì ì üzøõðë!Ï ÈPf(3”¹›s7çnÆ ÜÀ kݘ¿Ëj²„üå½° 3–ÎìÌ«ób„´¯Ü¡êüC¥f·œÁóý| RPMR]šPó𘠙Ÿß8~²Eü Å9á#–gn*ÍäÎÔ „Bȯ®o$#É‚^Ð zÃbXŒeeeÁo²ígÛ϶_cŸÆ>}Bî…Ü ¹WÓ¹¦sMçêÕ#ªGxõê9TßWßW߷̳̳Ìói·§Ýžv»˜|1ùbr\Y\Y\YÖ;Yïd½“®Mצk¥ÇÒcé±|æÆÿÔø§åë–/Z¾È¼À¼Ð¼ðñ®Ç»ïZkY‹µ(ßR~´üháÕÂë…×ÝÝÝÌ­ÍmÌm¬‰1k±k)£ë…¥Êð&X‚uØwŽ<íSb®$u•Ž #ÅB7¸ŠqÂz—)šÑŠ.¸NM;5íÔ4¹<¥.]—®K¯{¿îýº÷«7®Þ¸zãúËë/­¿´F—à‚à‚*#«^ªzIj¥ñÑøp-VcµÂFlnh}´>¦“—É £`€eàà²ò÷Ñ5á'/Ã,ø³;ìÐéìQÉÝÛñìï ùŽ—D†õû1äþnµlÕšu€±7qñç¥"!„òÇU\ÞH^Öj4Fc´\yõgýY!Bˆ"~{¨n«Î¢³øú¬òY5 ËàÈÁ‘ñUïßýi®ÁÇàóS5ý)ý©«ƒŒžFÏÊïú/ö_,׆gƒØAvž¿öBëF;¬EÆþ+ƒÓ:¥p¾ðã¡38_1TymòDmï<÷yöµlC …ÆN‚ã 5!„ò'©° ¬\õEHR…T±½Ø^üÕ*­žÊª÷«ÞÔŽsÎ3:rÎyFÎ9˜Ã9çUf½ô†¼'‹fÙCjZB^þÛ÷E)„Fô†{0 Yê«á ³ãÇÍõ,+œ¾Ñ¼§²ØÎP]WDå”ã:Þe3XS„ÒÌB!äOR±ªz5TC5kš/|áËF³ElšÁž…sgæÎâÖod¿‘?LÀyÕU1«°*ç›gX Vò¾ï£¦%äï#žpe ôC D¨€Å:£ÉZε>ÕtcÞ¥7?ºnN¯¨ôPïJ_»Œ—³áÌ•B!„äã#L€vbÒÉ…OJãö€µ²Låƒø[To+¿Ô5Qƈs àsŒD-øb€§Ô„BÈÿ˜ h`„z¼‡oñ­è¥ø^ñ=Ò`€ÁºO ÔP[š;™;a!†cø¯Ž"„ü ØB •ȆÂ"ß1 EíéþQÜòÑþ‘.% æ¼=¨/繎thíPíKÏyqû‘õ Æ#„B!äß^Ø™J`€‘­Å[¬|GÎÃ’¥e" ù\G.°\ttœ©­¡na=jNã4P¾À±B!„Bþq„|¾]¸ý,éEßÙRCš 'ó&ËLчõch$Aš^9Îi²Ý{Æ‹ùp>ÎÐACA!„BÈó¼àÀ†Ü—·KÞ5U·d¿f˜e¾®Ø,|Ã\)†]ÛÚôÑÚC„àíð¶À¨©3!„Byž=âþ .òTy³ÄÃø–YÌmègúXá.d±7aâ“ø¥JírlªÁ38wÁ—øÐ@EA!„BÈó¼è÷­¸Ž»òvùsOKrÉ4צ=lÛÂ|¡”&ðÇ^«í¦kÇ`*’m(ƒî„B!„ü;/zÄ}1?‰«P@„Xò½a’IÌ÷)/6ø¢Xp>Å ~…8ÏÓ.U ¯ ]™"8l¡¦É©„B!„<ß‹qÿç3,°”.3®2Ý+| ßhŒ‚ÃæKjžÄk¹æi¢U‡Å2Ö”]†€U•!„B!äßyÑ#îsð~61OÄHK¹e{îúÒ7Ê»â![ÚÊ èâÐWí$®ÂY[h=J Å &„B!„üƒ¼èpyŽã‚x˜}+ôD%(Ÿ2?½ò„R ¿ÏCí:)ç)>p©¡Û¡Ùm=jZ >u!„B!Ïó¢÷r˜`Â9 ÆcHŠö›YæÁ,áÁç·pFL²ÙNﱎ6öUäƒØf Awê B!„BžçEî ø`ã7À!A*cŒ7×BÚ(-bß³ZЉO… Âë®…¶¾štëQ3X[„SgB!„òÀèÙèÙÄÖ¤.ïÃV£MN%„B!äù^NànÏçò¯ …â#碼ÒGå“LçÌ™Â&²dh˜ž­qᕲ3†²@T‚AΑ'„B!„üÚË Ü#°ÛQ3,9»K~,óÒÏ5m7¿ÃÞaI,`wñ}Õ8Q…úð„ ‹A4ƒ’œ#O!„Bùµ—“ãÞc«‹5˜VäWîmihlf®,œ)Þ¦¨O*Wâ2â©”À÷ñG†&¨C]B!„BÈo)^ÊYoâž }Ñ’ðü“‚Ú†R³rð>,’älûHÓ]]C­QPŽ3|mêfêÎ|1K9ð®QÇB!„RÑËq—³ÕÓð…ð‡Ü {Ì- °ö¬ ”R¦ôºã,m;õx£]€Í¨ „’e±E]B!„BÈo½œÀ]ÎVWCxŒ'OÒË7h‹ú¼€¿ÇSlÕÓ•Žƒµ?¨¶ÁLØHÖº„B!„ßþœ‡ÉCÔ4 @mT‘âù]ÞB7@qQln—ª^ªœ OIe µ©K!„Bù­?)pôFñàr@JoH±¼’ÍZÕ8E¦Ã<õeëNëYW4¢.!„B!ä·þ¤Àý~õ‚ÁÅ'Tƒ‡äŽ˜"W oÙÎRªÅaò>l2ê  Ur'„B!ä·þ¤À=' 8°l®18Z¾å|<+œÅYvze®˜jÝi3"P“*¹B!„ò[Öˆûö‚ÊEUQáÇ]ù<„;³C¤}mu™Ò ØÀ«ñ¾‡+l¡£Ž!„B!¤¢—¸?y³tá„É]ªgéÃ?Û1'vÌb/­¯<Ýéºý%èQŠKwiÿ=PAÔ1„B!„Tô2÷x¹X¾Î𞢊ÎzÁ Õãß8}¤Uª=”þb¤˜{¡@¼àJC!„BHE/3p¿Ç(„˜i°%TªT0[ßÌÏì„­¬*Ô¤U®Ótó4ó5WYâaˆ°ÀÌ^ƒܨc!„B©è%îü²ðH€¾¦ÙËÒ&7ªì®a/ôì©0˜åSy¾Ã'ê¶Ê‡ªÞânáš5>n°§Ž!„B!¤¢—9â~÷qp7²œ°hž~S:¬|4‚À–›ÛJ}ùUçBÍmåDÕÑU¨n=ªÜáHC!„BHE/3pßë¸%4fÀŒã7ùš,§Â±%Ñ€xJ¬aÙÇçs³½BuL1[!±ál¯õ¨8AKC!„BHE/3pÿé¸'رÌØÂ>§AqNiXÄ~,ËÒ\:ÏkªßV~.¬×1åqµõ(ØACC!„BHE/3p/‚ø!AУEŹÆBóEÜ’ ©àˆ¢¡Ò³‘Ã8Û4ëQŒ:…B!„ÿë寜:?"EÞ,écªa CÙϲSèÆ²Ù'`ü&yV±Ÿc{œ:ƒB!„çyé;g‘,oM2f˜›¦™W[ò„öLþ‡ɸïál·V§ Î „B!äy^~àÞŠoÀ)y;oIYŽ1¹¨¦!ÒÚT`}1à¶ Routino : Library

Routino : Library

Library Usage

This page describes the libroutino shared library that can be compiled from the Routino source code and used in other programs.

Compilation

The libroutino shared library is compiled by default when the Routino source code is compiled. There are two versions; a normal version and a 'slim' version that uses less memory but is slower. The names of the libraries are libroutino.so and libroutino-slim.so

Including

To use the Routino library in another program the source code for that program should include the routino.h file. The functions that are available in the library (both versions) are listed in this file along with all of the constants and data types that are required.

Linking

After compiling the program that uses the library it needs to be linked to the library. For gcc this requires adding -lroutino or -lroutino-slim to the linker command line, possibly with a -L... parameter to specify the location of the library.

Example Library Interface Code

An example of a program that can link to the libroutino library is provided in the Routino source code called router+lib.c. This is an almost exact re-implementation of the standard Routino router program using the libroutino library.

Library License

The source code for the libroutino and libroutino-slim libraries is the GNU Affero General Public License v3 the same as for the rest of the Routino software.

Linking with AGPLv3 Source Code

If libroutino is linked with other APGLv3 code then the same license applies to the combination as to the two parts.

Linking with GPLv3 Source Code

The AGPLv3 license is almost identical to the GNU General Public License v3 except that network interaction with an AGPLv3 program requires the same source code access as distributing compiled GPLv3 programs. This means that libroutino can be linked or combined with code that is released under the GPLv3 without changing the license of that code.

If there is no network interaction with the resulting program then the Routino source code can be treated as if it was GPLv3 code for the purposes of distribution and use.

If there is network interaction with the resulting program then the AGPLv3 license will apply since this is required by section 13 of the GPLv3.
The Software Freedom Law Center description of the GPLv3 and AGPLv3 licenses describes combining GPLv3 and APGLv3.
My understanding is that only when modified Routino code is linked with GPLv3 code does network interaction require the modified Routino code to be released.

Linking with Other Source Code

Linking libroutino with code released under any other license must preserve the terms of the Routino license on the combination if the software is distributed or interacted with over a network.

Routino Library API

Preprocessor Definitions

A version number for the Routino API.
#define ROUTINO_API_VERSION 8

Error Definitions

No error.
#define ROUTINO_ERROR_NONE 0

A function was called without the database variable set.
#define ROUTINO_ERROR_NO_DATABASE 1

A function was called without the profile variable set.
#define ROUTINO_ERROR_NO_PROFILE 2

A function was called without the translation variable set.
#define ROUTINO_ERROR_NO_TRANSLATION 3

The specified database to load did not exist.
#define ROUTINO_ERROR_NO_DATABASE_FILES 11

The specified database could not be loaded.
#define ROUTINO_ERROR_BAD_DATABASE_FILES 12

The specified profiles XML file did not exist.
#define ROUTINO_ERROR_NO_PROFILES_XML 13

The specified profiles XML file could not be loaded.
#define ROUTINO_ERROR_BAD_PROFILES_XML 14

The specified translations XML file did not exist.
#define ROUTINO_ERROR_NO_TRANSLATIONS_XML 15

The specified translations XML file could not be loaded.
#define ROUTINO_ERROR_BAD_TRANSLATIONS_XML 16

The requested profile name does not exist in the loaded XML file.
#define ROUTINO_ERROR_NO_SUCH_PROFILE 21

The requested translation language does not exist in the loaded XML file.
#define ROUTINO_ERROR_NO_SUCH_TRANSLATION 22

There is no highway near the coordinates to place a waypoint.
#define ROUTINO_ERROR_NO_NEARBY_HIGHWAY 31

The profile and database do not work together.
#define ROUTINO_ERROR_PROFILE_DATABASE_ERR 41

The profile being used has not been validated.
#define ROUTINO_ERROR_NOTVALID_PROFILE 42

The user specified profile contained invalid data.
#define ROUTINO_ERROR_BAD_USER_PROFILE 43

The routing options specified are not consistent with each other.
#define ROUTINO_ERROR_BAD_OPTIONS 51

There is a mismatch between the library and caller API version.
#define ROUTINO_ERROR_WRONG_API_VERSION 61

The progress function returned false.
#define ROUTINO_ERROR_PROGRESS_ABORTED 71

A route could not be found to waypoint 1.
#define ROUTINO_ERROR_NO_ROUTE_1 1001

A route could not be found to waypoint 2.
#define ROUTINO_ERROR_NO_ROUTE_2 1002

A route could not be found to waypoint 3.
#define ROUTINO_ERROR_NO_ROUTE_3 1003

Routino Option Definitions

Calculate the shortest route.
#define ROUTINO_ROUTE_SHORTEST 0

Calculate the quickest route.
#define ROUTINO_ROUTE_QUICKEST 1

Output an HTML route file.
#define ROUTINO_ROUTE_FILE_HTML 2

Output a GPX track file.
#define ROUTINO_ROUTE_FILE_GPX_TRACK 4

Output a GPX route file.
#define ROUTINO_ROUTE_FILE_GPX_ROUTE 8

Output a text file with important junctions.
#define ROUTINO_ROUTE_FILE_TEXT 16

Output a text file with all nodes and segments.
#define ROUTINO_ROUTE_FILE_TEXT_ALL 32

Output a single file type to stdout.
#define ROUTINO_ROUTE_FILE_STDOUT 64

Output a linked list of points containing the HTML file information but as plain text.
#define ROUTINO_ROUTE_LIST_HTML 128

Output a linked list of points containing the HTML file information as plain text and with all points.
#define ROUTINO_ROUTE_LIST_HTML_ALL 256

Output a linked list of points containing the text file information.
#define ROUTINO_ROUTE_LIST_TEXT 512

Output a linked list of points containing the text all file information.
#define ROUTINO_ROUTE_LIST_TEXT_ALL 1024

Route between the points in a loop returning to the first point.
#define ROUTINO_ROUTE_LOOP 2048

Route between the points in reverse order.
#define ROUTINO_ROUTE_REVERSE 4096

Linked List Output Point Definitions

An unimportant, intermediate, node.
#define ROUTINO_POINT_UNIMPORTANT 0

A roundabout exit that is not taken.
#define ROUTINO_POINT_RB_NOT_EXIT 1

An un-interesting junction where the route continues without comment.
#define ROUTINO_POINT_JUNCT_CONT 2

The highway changes type but nothing else happens.
#define ROUTINO_POINT_CHANGE 3

An interesting junction to be described.
#define ROUTINO_POINT_JUNCT_IMPORT 4

The entrance to a roundabout.
#define ROUTINO_POINT_RB_ENTRY 5

The exit from a roundabout.
#define ROUTINO_POINT_RB_EXIT 6

The location of a mini-roundabout.
#define ROUTINO_POINT_MINI_RB 7

The location of a U-turn.
#define ROUTINO_POINT_UTURN 8

A waypoint.
#define ROUTINO_POINT_WAYPOINT 9

Profile Definitions

A Motorway highway.
#define ROUTINO_HIGHWAY_MOTORWAY 1

A Trunk highway.
#define ROUTINO_HIGHWAY_TRUNK 2

A Primary highway.
#define ROUTINO_HIGHWAY_PRIMARY 3

A Secondary highway.
#define ROUTINO_HIGHWAY_SECONDARY 4

A Tertiary highway.
#define ROUTINO_HIGHWAY_TERTIARY 5

A Unclassified highway.
#define ROUTINO_HIGHWAY_UNCLASSIFIED 6

A Residential highway.
#define ROUTINO_HIGHWAY_RESIDENTIAL 7

A Service highway.
#define ROUTINO_HIGHWAY_SERVICE 8

A Track highway.
#define ROUTINO_HIGHWAY_TRACK 9

A Cycleway highway.
#define ROUTINO_HIGHWAY_CYCLEWAY 10

A Path highway.
#define ROUTINO_HIGHWAY_PATH 11

A Steps highway.
#define ROUTINO_HIGHWAY_STEPS 12

A Ferry highway.
#define ROUTINO_HIGHWAY_FERRY 13

A Paved highway.
#define ROUTINO_PROPERTY_PAVED 1

A Multilane highway.
#define ROUTINO_PROPERTY_MULTILANE 2

A Bridge highway.
#define ROUTINO_PROPERTY_BRIDGE 3

A Tunnel highway.
#define ROUTINO_PROPERTY_TUNNEL 4

A Footroute highway.
#define ROUTINO_PROPERTY_FOOTROUTE 5

A Bicycleroute highway.
#define ROUTINO_PROPERTY_BICYCLEROUTE 6

Type Definitions

Typedef Routino_Database

A data structure to hold a Routino database loaded from a file (the contents are private).
typedef struct _Routino_Database Routino_Database

Typedef Routino_Waypoint

A data structure to hold a Routino waypoint found within the database (the contents are private).
typedef struct _Routino_Waypoint Routino_Waypoint

Typedef Routino_Profile

A data structure to hold a Routino routing profile (the contents are private).
typedef struct _Routino_Profile Routino_Profile

Typedef Routino_Translation

A data structure to hold a Routino translation (the contents are private).
typedef struct _Routino_Translation Routino_Translation

Typedef Routino_UserProfile

A data structure to hold a routing profile that can be defined by the user.
typedef struct _Routino_UserProfile Routino_UserProfile
struct _Routino_UserProfile  
   {  
      int transport; The type of transport.
      float highway[14]; A floating point preference for travel on the highway (range 0 to 1).
      float speed[14]; The maximum speed on each type of highway (km/hour).
      float props[7]; A floating point preference for ways with this attribute (range 0 to 1).
      int oneway; A flag to indicate if one-way restrictions apply.
      int turns; A flag to indicate if turn restrictions apply.
      float weight; The weight of the vehicle (in tonnes).
      float height; The height of the vehicle (in metres).
      float width; The width of vehicle (in metres).
      float length; The length of vehicle (in metres).
   }  

Typedef Routino_Output

Forward declaration of the Routino_Output data type.
typedef struct _Routino_Output Routino_Output

Type struct _Routino_Output

A linked list output of the calculated route whose contents depend on the ROUTINO_ROUTE_LIST_* options selected.
struct _Routino_Output
struct _Routino_Output  
   {  
      Routino_Output* next; A pointer to the next route section.
      float lon; The longitude of the point (radians).
      float lat; The latitude of the point (radians).
      float dist; The total distance travelled (kilometres) up to the point.
      float time; The total journey time (seconds) up to the point.
      float speed; The speed (km/hr) for this section of the route (ROUTINO_ROUTE_LIST_TEXT_ALL format only).
      int type; The type of point (one of the ROUTINO_POINT_* values).
      int turn; The amount to turn (degrees) for the next section of the route (ROUTINO_ROUTE_LIST_TEXT or ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML_ALL format).
      int bearing; The compass direction (degrees) for the next section of the route.
      char* name; The name of the next section of the route (ROUTINO_ROUTE_LIST_TEXT or ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML_ALL format) or previous section of the route (ROUTINO_ROUTE_LIST_TEXT_ALL format).
      char* desc1; The first part of the description of the next section of route (ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML format).
      char* desc2; The second part of the description of the next section of route (ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML format).
      char* desc3; The third part of the description, the total distance and time at the end of the next section of route (ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML format).
   }  

Typedef Routino_ProgressFunc

A type of function that can be used as a callback to indicate routing progress, if it returns false the router stops.
typedef int (*Routino_ProgressFunc)(double complete)

Variable Definitions

Global Variable Routino_APIVersion

Contains the libroutino API version number.
const int Routino_APIVersion

Global Variable Routino_Version

Contains the Routino version number.
const char* Routino_Version

Global Variable Routino_errno

Contains the error number of the most recent Routino function (one of the ROUTINO_ERROR_* values).
int Routino_errno

Function Definitions

Global Function Routino_CalculateRoute()

Calculate a route using a loaded database, chosen profile, chosen translation and set of waypoints.
Routino_Output* Routino_CalculateRoute ( Routino_Database* database, Routino_Profile* profile, Routino_Translation* translation, Routino_Waypoint** waypoints, int nwaypoints, int options, Routino_ProgressFunc progress )

Routino_Output* Routino_CalculateRoute
Returns the head of a linked list of route data (if requested) or NULL.
Routino_Database* database
The loaded database to use.
Routino_Profile* profile
The chosen routing profile to use.
Routino_Translation* translation
The chosen translation information to use.
Routino_Waypoint** waypoints
The set of waypoints.
int nwaypoints
The number of waypoints.
int options
The set of routing options (ROUTINO_ROUTE_*) ORed together.
Routino_ProgressFunc progress
A function to be called occasionally to report progress or NULL.

Global Function Routino_Check_API_Version()

Check the version of the library used by the caller against the library version
int Routino_Check_API_Version ( int caller_version )

int Routino_Check_API_Version
Returns ROUTINO_ERROR_NONE if OK or ROUTINO_ERROR_WRONG_VERSION if there is an error.
int caller_version
The version of the API used in the caller.

This function should not be called directly, use the macro Routino_CheckAPIVersion() which takes no arguments.

A wrapper function to simplify the API version check.
#define Routino_CheckAPIVersion()

Global Function Routino_CreateProfileFromUserProfile()

Create a fully formed Routino Profile from a Routino User Profile.
Routino_Profile* Routino_CreateProfileFromUserProfile ( Routino_UserProfile* profile )

Routino_Profile* Routino_CreateProfileFromUserProfile
Returns an allocated Routino Profile.
Routino_UserProfile* profile
The user specified profile to convert (not modified by this).

Global Function Routino_CreateUserProfileFromProfile()

Create a Routino User Profile from a Routino Profile loaded from an XML file.
Routino_UserProfile* Routino_CreateUserProfileFromProfile ( Routino_Profile* profile )

Routino_UserProfile* Routino_CreateUserProfileFromProfile
Returns an allocated Routino User Profile.
Routino_Profile* profile
The Routino Profile to convert (not modified by this).

Global Function Routino_DeleteRoute()

Delete the linked list created by Routino_CalculateRoute.
void Routino_DeleteRoute ( Routino_Output* output )

Routino_Output* output
The output to be deleted.

Global Function Routino_FindWaypoint()

Finds the nearest point in the database to the specified latitude and longitude.
Routino_Waypoint* Routino_FindWaypoint ( Routino_Database* database, Routino_Profile* profile, double latitude, double longitude )

Routino_Waypoint* Routino_FindWaypoint
Returns a pointer to a newly allocated Routino waypoint or NULL if none could be found.
Routino_Database* database
The Routino database to use.
Routino_Profile* profile
The Routino profile to use.
double latitude
The latitude in degrees of the point.
double longitude
The longitude in degrees of the point.

Global Function Routino_FreeXMLProfiles()

Free the internal memory that was allocated for the Routino profiles loaded from the XML file.
void Routino_FreeXMLProfiles ( void )

Global Function Routino_FreeXMLTranslations()

Free the internal memory that was allocated for the Routino translations loaded from the XML file.
void Routino_FreeXMLTranslations ( void )

Global Function Routino_GetProfile()

Select a specific routing profile from the set of Routino profiles that have been loaded from the XML file or NULL in case of an error.
Routino_Profile* Routino_GetProfile ( const char* name )

Routino_Profile* Routino_GetProfile
Returns a pointer to an internal data structure - do not free.
const char* name
The name of the profile to select.

Global Function Routino_GetProfileNames()

Return a list of the profile names that have been loaded from the XML file.
char** Routino_GetProfileNames ( void )

char** Routino_GetProfileNames
Returns a NULL terminated list of strings - all allocated.

Global Function Routino_GetTranslation()

Select a specific translation from the set of Routino translations that have been loaded from the XML file or NULL in case of an error.
Routino_Translation* Routino_GetTranslation ( const char* language )

Routino_Translation* Routino_GetTranslation
Returns a pointer to an internal data structure - do not free.
const char* language
The language to select (as a country code, e.g. 'en', 'de') or an empty string for the first in the file or NULL for the built-in English version.

Global Function Routino_GetTranslationLanguageFullNames()

Return a list of the full names of the translation languages that have been loaded from the XML file.
char** Routino_GetTranslationLanguageFullNames ( void )

char** Routino_GetTranslationLanguageFullNames
Returns a NULL terminated list of strings - all allocated.

Global Function Routino_GetTranslationLanguages()

Return a list of the translation languages that have been loaded from the XML file.
char** Routino_GetTranslationLanguages ( void )

char** Routino_GetTranslationLanguages
Returns a NULL terminated list of strings - all allocated.

Global Function Routino_LoadDatabase()

Load a database of files for Routino to use for routing.
Routino_Database* Routino_LoadDatabase ( const char* dirname, const char* prefix )

Routino_Database* Routino_LoadDatabase
Returns a pointer to the database.
const char* dirname
The pathname of the directory containing the database files.
const char* prefix
The prefix of the database files.

Global Function Routino_ParseXMLProfiles()

Parse a Routino XML file containing profiles, must be called before selecting a profile.
int Routino_ParseXMLProfiles ( const char* filename )

int Routino_ParseXMLProfiles
Returns non-zero in case of an error or zero if there was no error.
const char* filename
The full pathname of the file to read.

Global Function Routino_ParseXMLTranslations()

Parse a Routino XML file containing translations, must be called before selecting a translation.
int Routino_ParseXMLTranslations ( const char* filename )

int Routino_ParseXMLTranslations
Returns non-zero in case of an error or zero if there was no error.
const char* filename
The full pathname of the file to read.

Global Function Routino_UnloadDatabase()

Close the database files that were opened by a call to Routino_LoadDatabase().
void Routino_UnloadDatabase ( Routino_Database* database )

Routino_Database* database
The database to close.

Global Function Routino_ValidateProfile()

Validates that a selected routing profile is valid for use with the selected routing database.
int Routino_ValidateProfile ( Routino_Database* database, Routino_Profile* profile )

int Routino_ValidateProfile
Returns zero if OK or something else in case of an error.
Routino_Database* database
The Routino database to use.
Routino_Profile* profile
The Routino profile to validate.
routino-3.2/doc/html/installation-ms-windows.html 644 233 144 16500 12563643607 15470 0 Routino : Installation on MS Windows

Routino : Installation on MS Windows

Using Cygwin

Cygwin is a large collection of GNU and Open Source tools which provide functionality similar to a Linux distribution on Windows. A Cygwin DLL provides substantial POSIX API functionality therefore providing direct compatibility for most UNIX source code.

Since Cygwin aims to replicate a Linux-like system on Windows it is the simplest method of compiling Routino. The disadvantage is that all programs compiled with Cygwin require a number of runtime Cygwin libraries which may introduce a runtime speed penalty.

The installer for Cygwin can be downloaded from http://cygwin.org/; there are 32-bit and 64-bit versions available. For compiling Routino the Cygwin installer should be run and the following packages selected (any dependencies will be automatically be selected at the next step):

  • base packages
  • gcc-core (in 'Devel' menu)
  • make (in 'Devel' menu)
  • libbz2-devel (in 'Libs' menu)
  • zlib-devel (in 'Libs' menu)
  • perl (in 'Perl' menu)

To compile Routino open the "Cygwin Terminal" change to the Routino source directory and compile using the make command.

The programs that are compiled planetsplitter, router will require the Cygwin runtime to be able to run them. The library libroutino.so should be usable with other Cygwin compiled programs.

Native Compilation

Routino has limited support in the source code for compiling on Microsoft Windows. This includes a set of functions that can replace the mmap() and munmap() UNIX functions which are not available on Microsoft Windows.

The source code should be downloaded, either as a release version file or from subversion - no instructions are provided for this step. The release versions include some files (mainly the web icons) which are not included in the subversion source (and which may be difficult to create on Windows).

Using Microsoft Visual C

The Routino source code (for the router at least) has been modified so that it will compile with the Microsoft Visual C compiler.

Compiling Routino with MSVC is not supported directly since there is only support for using Makefiles in Routino. The files that need to be compiled for the Routino router can be found from the Makefile in the src directory listed in the ROUTER_OBJ variable.

To compile the router in slim mode the pre-processor definition SLIM=0 must be set and for non-slim mode SLIM=1 must be set.

The default directory for the Routino data files must be set in the ROUTINO_DATADIR pre-processor variable. If the router command line --data option is going to be used then this variable can be set to any value.

Since Microsoft Visual C does not fully support the C99 standard it is necessary to tell the compiler how to handle the inline functions. This can be done by passing in the command line option -Dinline=__inline to the C compiler.

Using MinGW

MinGW is the "Minimalist GNU for Windows" which includes some of the common GNU programs; principally gcc and related programs for software development.

The installer for MinGW can be downloaded from http://mingw.org/. For compiling Routino the MinGW installer should be run and the following packages selected:

  • mingw-base
  • msys-base
  • mingw32-pthreads-w32
  • mingw32-libz (dev package)
  • msys-perl

To compile Routino open a DOS command window and set the path to the installed MinGW and MSYS software. For example if MinGW was installed in the C:/MinGW directory then the path needs to be set to C:\MinGW\bin;C:\MinGW\MSYS\1.0\bin.

From within this DOS command window change to the Routino source directory and compile using the MinGW version of make with this command mingw32-make.

After compiling Routino a set of library files are created (routino.dll, routino.def and routino.lib). These should be usable for linking with programs compiled with MSVC.

Using MinGW-W64

MinGW-w64 is an alernative implementation of the same concept as MinGW but allows for compilation to 32-bit or 64-bit executables.

The website for MinGW-w64 is http://mingw-w64.org/ but the downloads are available from http://win-builds.org/. Installation of MinGW-w64 is slightly different from that for MinGW but a similar set of packages will be required.

The compilation method for MinGW-w64 is the same as for MinGW and the same files will be compiled, the only difference is that by default a 64-bit version will be created.

Limitations

A native Microsoft Windows compilation of Routino is more complicated than compiling on Linux, other UNIX system or Cygwin. This is probably not an option if you are unfamiliar with software development on Microsoft Windows.

The size of files that can be accessed with an MSVC or MinGW (32-bit) compiled version of Routino is limited to 32-bits (less than 4 GB). The MinGW-w64 compiler on 64-bit is able to handle larger files (bigger than 4 GB).

The Windows operating system does not have a function equivalent to the fork() function on UNIX. This means that it is not possible to use the planetsplitter program's built-in file decompression with an MSVC or MinGW compiled version of Routino.

Example Web Pages

No instructions are available for using the Routino example web pages with the Microsoft Web server (IIS).

For information on setting up Apache see the "Example Web Pages" section of the main installation instructions.

routino-3.2/doc/html/example1.png 644 233 144 413161 11541143712 12225 0‰PNG  IHDRôA^#X oFFs6È *8 pHYs  ÒÝ~ü vpAgŽÌdKž€IDATxÚì½u`ÕØöþýì$GëNÝ X¡)§ÅÝ¥¸»»»»0¸»»;-îÅ+´Ô&ûý#™ûë¼ß;÷ÎF`úO8g““³’³³²öZÏ"`0 ƒÁøÞ…Ú¨€q ·5#„d¡iW¯2= ;õV•ìr½@ã<Ç xjzm~nž!M¥ËÉ AK¡?šÛúÒš¶)ÇvüŒ³®wB÷ö8óõ9ÃóË XЏ!^B'ÌEìÆiðà@ Be†gü3ƒÁ`0Œï_8ú"DPüˆñ|¢'Ä4†Þ–‡xQÇ'ö>½w•v+¸¡WéR‰ù;8úÚ4W‹–c”y€h/u¢Û´§Ô»„È5?ßáÍø$Ï.|´ïúÃÁ¯«Èû!艊d Q“§Òiú„aŽã*pàX$þû9î ƒÁ`0¿¹¤U…œáˆ胆\y²#¥ô òË -öØë|²OŲþ¡‘û…m *¥>§~Æ/´Ì6q–…ÖRc𡛝P_èdj>TúÙ¤ùçθ²éaü¹¨ßiÜX¢ÇÚfxÑâÔŠ’ÐB&E\’eÆ3 ƒÁ`0¿h –7I7<Ä~ÙGJäRzB@EÏ»Z¯¨®–Œ“—wBé4—ÎþõØwm˜FKjk¥tªµs'ËΉ':d®1757ÜÇ;Õ=(÷~%z\!µ±Ó‘pUÞÅ%ßì¤2 ƒÁ`üÑäÖe/‡r…H>òšÞ§åi z #±]X‹à¿°¿¥ìÌÐè|°}ž1€”-22_³öäJr ˆ—zƒæºjmöTSQëò- ï{¿.:ßëò’N«¥VbÇóÂ`~ ÙJÞ‹¢øZ|KkI7¥8¸Ã>HÂ{¼g§åŸsÜ ƒÁ`0¾&²·¥NnöDÖ" gQ'°™BCü Ž •›n/j—÷êIJ|¡‘᥽.;Ÿ¤£b—œJ&ÞRWëÏOçër4ùUGR–fº›¯jz©Åmº´å%íóïÏIgÿŸ; åP£p””9‰†¥ÓüÃ/%ƒÁ`0 Æ×G <̰BÄpÔE%¾ÙE*ˆU©–N‘‡G…qBóž‘¥[*ÕëLj€©»O´/M‹›ËZWG‰÷¥4m1ÓºÆ.e¼ªn|Ð*Ç[Z¸êzì̇6ÒLËs±ñ™5§‚N}=íþ•ûáB#~6_\œ'WÐ@jA)%FvÞ™Ï`0 ƒÁ`ü"¹§8ð؈֨IÞ‚âbîžZØ~ë\uF©IÍGl)Oéäá#)ó¢Õ”›69†ìšq"¥”>{J)¥)½)¥tNýùCfÐíæßpÉ€ròÞ„Ù\ògÑ-”ÐC ;!ÿÂá‡<ÿºŒ‹Á3 ƒÁ`üiÈÞ—¬ ãƒà:N §¸ƒ\¾Ü Ööùì9vëòÎwæ|Þ:4¥E±û’v~ðŒK²:šßƶɾ’µå|Š1Áø8±Éá|ëg¾,Þ=¨æÕ>Þå„-ôœdÁ&þg{ ñØLÊb+Æ#.pPÞ`…­ ƒÁ`0 †BîP)<â‡8D¢ Êä¨ß£KÔÉ· -ʼ/[!rrá}*´ÜÕkÄ’Fâ«K≌ÄKó(¥ônMJ)}B)¥ï¼tÚÔÒaW‰”ÎÐ3èqñþIMËñ­¶ÄÁ¨ëªšûSø›$…ô%kñ‡”—ä^­Œ¿¼®…j“°ÏúPÚ#mCáHC&3 ƒÁ`0 Æ ìa{4DC4ÄvlÇvC1Ã{¼Ç{[­­ÖVëÿÁÿƒÿ‡¼kóŽÏ»ÂÕÑm¦k6.¡ Ÿé]Âqº_瘺[<’ò>žE|²^rH-•¸&y¹t.KÈÞ›_øtüi9>âíÊ˳›IwH¯+v»µ « yæÓ«YZᦄ»B¶`ûÒ”Ú,ãyÖsK3ìÇ\lá}ÈRƒ¶Á;¨‘ˆl˜‘#ÌËËøë!~yœ}íSÞ&¤¾ËpÁô@s4ÆØÁLÃ`0 ƒñ»Ýt $øÃþX…UX…nè†nˆG<âåö—í/Û_öªîUÝ«ºûq÷ãîÇ…ÃÂ!á DÓ!üi>ŠÛšÖ/ó™!´ãÝÊ3ÝõÊÓ°yÐ É&Gg,¢Mßh²ïµüÇ=/êrmÒt9¶U׸ªZ´íÞ)K­AÁ½°|4ÆZ®‰%ŽöÒþ¨ZÃ/…0Fñ²Ìç´Œú‹&]S?^¾Õýžúe“äð,ßœ9Êáç#œ¤×ሠêH¬|/’«¼•ñ'"8OÒ×~Û-µOH/T@8sÜ ƒÁ`0~Dé¨*AÂlÌÆl8À¨Žê¨.±ímÛÛ¶·oß¾\oºÞt½©öP{¨=$^â%¾ðƒ¿uµµ‘%ãmËwªž‹ý²Îµ:U>»ÈºÇÔT2rÙz;íµýyÎnúÜ7þÑ—z¤™$‰Ñìh{Hs}åâ7±ÙOC»ýXºeÁ쎛Âf=·9§k¦I -ç-× w ëŒóƒo8>л,Dý eÄÞ¥#¦æ·®}rçÙËûK‹\=ó°UæsSs58"sÝÉSk[© ]G ÀLè †̰²þç 8ŸÐ«´?UwC$Šb3 ƒÁ`0 Æo¢8Š£8*¢"*ÂŽpÄP …’Sn×Í®›]7ïFÞ¼¹óî¼;/<ž Ïè ú‚¾@S4ESSiS„©TÒõ¤I7>¶øhø0*' g°aû*nÈè¨-N¢{ {V4½·Ôx}âMÇ´Z뜬÷"Í®¬Ms§…Ò1‹·&ÖÑÖ¦Šnê}ÿ÷”n}±—ì\sSõ,¡gŸˆSG6/Y(Ûo­ÓjÛ3:w«`xbR[†d·3 ‰u µ»0Õú/Û=_I.dÑBzuõ£Ó;¹‡¯âÛè›653?ú9ŽX‡exŠÏôºbã#’~ÖvŠñ×éôìt ¥P“˜­ ƒÁ`0þ#DiiDAá Oxâ9žã9la [ÜÂ-Ü’Ú«íÕöj¯4¯4¯4÷²îeÝË µ„ZB-ÅY@,--?.ü¸ðãÂ„Ú õšäË9œ³ý ÔÎ<ž5·ÔH+<Øê—³ÍüFx«k¢rò£ï¥½/§¾6.Zx©Ëss–ä—NªmÕÜzÒžØáš`ÈÝNïë'åé÷_’°òÎuà6¯ÂzßéÚ¶¸6o ÛÚµšêÔÖÚÃ:ÒxÚÜËêîÛÎW7g¾ºÞÍ2½zzET)ØiÝŽ;£_$ÿØò†×ÓÐä™y³;Èߎ?Fn‘ú’"é4IMU [°ÀÊø?Áé¨îz`éˆâ$N2+3þÃôÄ`0 Æ÷Œ¬ã'8¡: ƒòŠì²—A”±­j[Õ¶ªßL¿™~3]m\m\m„l![ÈFy”Gyr’œ$'M¦@S`âÔÄ©‰Sß¿~l,c,cTTeøC¼WJt—Hå;ç¯-îiïæ”©;Že†–m·½d~ª½ëóÙgÃ]÷æ9êsˆž¥¡x*d —;õFõ#uU©?ÝH³IYò”!½p;9 yGæÝ*ö®Nâ¥[x—’xiù´ØÏ컾\Ã"Ï[,xÂ÷²ki{è½QÈ<Þ<3ûhÖ`CBÈGç»6u§¡ZZñ½ö–BÈÍÅ$.þÙçõ¾7o>­ŸX3³xöÀ>/9Bš‹Ýérú«‡'x‰$¤BÀ:¶þ ʪV¼¤¼Í-#ƒH³ j¨¡V¶`Qq$ŽÄ1w~L.Šño¯œ¥XХą¸vå0Œ0r©L"+¸‚+ÿw ‹ÞEï¢Õ†jCµßW|_ñ}Ôè¨ÑQ£«dVɬ’XºKé.¥»èÂuáºðŸíb:¦c׈|"íåÏ,^5ß7ƒeØÙ£ý‹[>œ.ÑO°6¸Òn°w³ˆÊÃò5ÁTôG+ï^^­=ITͨšQ5«ö¨Ú£j     Ÿ<º]Øíp…+\á7¸rÈJR…ôÅLÔÍýáËæùâºqV•Ú%#Ë$ Õ·MsJ§ûw©e->aPûò†~c¯´ žM¼Ñ¡"¥Ó^vq¹rÈŒ–Ç9Vš®ñ*äXßîÈÏÌÆá~àœH$ýì;2mšß™Ø´†}iÏñ»ŽgÄ~âÉ RAò ÝéEfƒÁ`0 …؉‡q‡ÇxŒÇŒÁì¤vR;©}ûúöõíë”î”î”.D ‘B$-OËÓò¸‹»¸k7„ÂßÛ¾·}o›8#qFâ ³ŸÙÏì§ìya.ãÎ`;va?ךÄ­´™–¦–c#g•lx¤Æ´ru‚<°—4$»ÎÇÆµoPóÖ°2ûìQæ§bu§7N§ÌСSBkkkÐ~Ð~Ð>~ùøåã—HE*Rá oxã)žà‰õn&o1 ­H5²‡L“FÒÍ4[>¨¼o\?:ÎêšSzk!—.^ÅHPˆ³½Í`­)ÌigÙf­¯ß  Fêmê믓CÓvn°¹W,¾úbóåý÷^§~ÎÑå½ ë¸þä½µžL—Àý06PC…l˜aa×ÿÀüWõŽ•;!oóÉ9Ò’Ù„A„Aò¦M¼M¼M¼{¤{¤{¤kªkªkªª‹ª‹ª‹22w •Á€ \9½lzÙôrórórórMtMtMTuVuVufWƒÁø›’»)R$"‰1ƒ1èŒÎèœ{ Ó9§sNçŠúõ)êSyaå…•FMš5µÊœ*sªÌ‰‰‰)=±ôÄÒýûø÷ñï#T* •~öQ…H!RÃ1Ãs¿Î_å^EÙ¯–¡4 Xm)vaò@OÉ÷l÷þ%)½p}`­JŸŠð9¬üˆÞMï«/Y)²Rd¥ªšªšªšðÆáÃs¹ÇÜcedTA•ÿß÷Õÿë“ÊéH1xÒÙ¹úv~ã`i­S¨ìÀwó‡ëZ= tƸ®“ÄÈ ËÚ‡å”Û¼ÍsJ'çëXˆÒ©;Wz·pñF*ÃgùÅ8çuøY„ìÄ],#ÝpË|ðÿéË³Ž­ÿÁþ±ú°_ùW-øÂY6ów?w“`LuTGu¾…} ûjÔ,¨™t_º/Ý«W%®JêúÔõ©ë±»±v°ƒ³ƒxoâ-O¾'|OøžêÔ7¨/­J«Òª±Cc‡ÆU®œ=؃=J>(ƒÁ`üUä®à D q÷pO™®â*®Ê®:]uºê#ø>‚ËY—³.g¹¥ÜRn)­KëÒºhŒÆhlhehehõ!âCćˆDc¢1Ñh^b^b^¢|ÖŒÀˆ!Òt]€™˜‰™ò1Äh>4ÃZGÞ¶’&hLãvšƒ°EèΕBAa2×t›ùX‰G—Ï{Þy÷¾¹D:á5-O× Ð8ÊØÅØÜ²À²È²”>£Ïè3­·Ö[ë-x‚‡™˜‰™(å³¹‘½< $PàÀIz:”œšäÇ;ÚœŽÅìwuRýÓ…á8Œ+øqáõùOôíë†{ç»Øåx‰Œ|g=ìl )Ž«"'65¼0 æ¹^!6Þª•3¥ZÓK:t;[²ZHƒõõïš_Nù¡GìŒÇç’›e†e÷’ïJf'i?–ÓêI_Ãjðà”£b¾èÿA°Í£ÚÍoƒ-ì`V¤¼1’23}¿xÁ ^4”†ÒP`€AŽŒòòòñ'ù“üI²l `–Ÿeþ1¯ñ¯åMëëë£h"¿•ßÊo••`…V63Œ¿¹ÒFÎüˆ¨¸é¶°…-)KÊ’²N;v:íô»äwÉï’Ã6‡mÛøž|O¾§|¤ŽÔ‘:fÞ˼—yïÃÓO?:ÈÄRŒáW’(òîyÿ¤‚©SÇà8b±lRìŽÇ^½êF†Ö!½H“€3Þm§ØNÌ- Ùç²Â ¦à*Žsô‡'!ºYøÉ.yÂ3òYyñÖ«—k¯Þô¸ÃÇUéòÆc~0yBúˆ}隉VØ‚ˆÃ[$0þg—­Ý0á%Ÿ,èaA }‡gp@´H‡Ff ïŽ„ UQU130CÕGÕGÕ‡wâx§ÏC>ù<$§zNõœêp‡;Ü1 Ó0™¡ gR¤¶R[©­PT(*MÓÅtѰɰɰ -Ð-äÒUf0ƒñÐÐHI ­€ ¨;eÅÅÓÅÓÅÓÛ×Û×Û×e•Ë*—Ud-YKÖ npCGtDÇô–é-Ó[~Œýû16 H}BŸÐ'ò»8“ëÏ6°ùEe6[è BWÔAQ:TZB›©ßªJòÂÔ¤ÎWÊV¦å²]-Ô—íDíàÕív^½=íŽó‹âÉ&n"yCJs¤WÔ™,#UHêD¨“I4‰&aC'r"'jÏhÏhÏÈQ8E÷æ×cQŽÄý1EÔSÕsíIKâD§Ñ®´ËGï´èŒÙcæÅÕI+ZÄ|T§ÇÞR•ó7jU­èËàˆÀçË6 ¥Mæ/–æq9%1¾ãl¡m3eLôÙ¢—º-iÍ—üCÑ뻟–ßXønó—«ßµM)¶s€ÔÂt4 óÈk+-¥©„gø„$pJ[«ï×?ײsåÚµˆ†¼àܱ5P Ð Øïú;%W&ŸÆ§ñi%BJ„”‰:u"ê„c-ÇZ޵”‘éHG:3#7rŒJÞöâ7ÄoH-R‹Ô"ùÎå;—ïœ2ènà†r3c0Œ¯Gîœug8Ãð~6& YÈroëÞÖ½mñáŇ^©j¥ª•ªF{D{D{DµŽjպʮ*»ªì*y±äÅ’=›x6ñl"Ôê ?ÓcQŠVåÌø_“˜+Ÿ›ûÌ•&ʽuhPË–%ŽRzõÈ(©ÄùW|v?è×czžCÎñ6Î8ˆùhCÎ?)Ä+«Ä¿ÿU6WÙ\esTDTDT„Wi¯Ò^¥•‘¹j~#œbQ‚z(Š¢Á" Ⓠägkï>×ÚÚ‡Vypñ¤÷=†7Ž §tÚÁ.ù)”Ò!'+eLZ›CtÛÄ}íïS:£o× ñLJÎk¹jÑêúÞå2üû8m±Ïû3S½!_HWÒ÷°SyI„ï3^Ð_S­fêvª3Uurꛎ›î|؃öXƒ½ìWÿÝá _øÊ?KÙq– K…¥âñøðÐ]Ðû°û ‚ *%m†ÁÐB ­¼I>’ä#ÝL7ÓͼšWójåÊÉ@2”›\©5 ƒñ»ÈÕ–ïMÕP ÕP ¥P 1ee. äö8íqÚã[Ü·¸oq§BN…œ OâI<Žp„Óôý®O×§ëÖ'¬OXÿ)íSÚ§4é¢tQR”÷ˆñ#~Ô:PLÂ$LRÒG¥\i'¿„ ”Ó“H ïèsúÂm‹c^]ínkêg$³–Wò7Ô/„Ý|î~T:¡nj@v*y@Ú£ ¥ëQjà”P5HÉ Ñ-t ÝBÚ“ö¤½.C—¡ËÀmÜÆí? Ù$wœû îáÕbÒ¹ÔJ%ò#²q…{HŽ‘!ïK}i’qe.Îá–û¦w·¤gû†FN(|¨u‹"QcÝÆÙç§žÆ/¦™ÆrÙVC^ÿËv¥´´/J?.° wÑAA•W¿™þ|Ïúq·'œ†3Ú’VÒº‘&)î»üxñ­¦Ó¼ÔÛ¢nðK·ÎõCä'•»¡~¯\Ã5\“7ívÛí¶Ûµ+jWÔ®Èî‘Ý#»óýùþ|e¤¼ È`䂸Wâ*o{ óæ5¬º[u·ên¡kC׆®UÉ ÖePe˜Å Æïâÿ¶FÊß–oË·urr*©/©/©¯2¨Ê *ƒ¢vFíŒÚõ0êaÔÃ*¤ ©BJ®+¹®ä:{{{.•KåRö)Ïð Ï”2VùÉïh"dT¤qÅ:ˆ¸€þ~‡=JÙ5Iq9øªÇpó™Ó/ûu¢ôÆýa7œmú,¼( ÅsL|x/r~ð€ýÏö–ùOù¾ù‹üÅ öì+ØG—.]>bDĈˆJ ­j¡tÐA÷ÕÏ‹ <8Ù¡ÇMŒEWpndIî!.klÝõ¾ÃNDq% /Î×"¥Óã»Ö§tÒÆë²êŽ9Ðfm;qgû”NÓÕç³iÔ¤Öw¤ÔK/_>oc×…Ž#~v®{“{¤,˜~¨‚|ðUœøo.†ÓÞV-ægÙŽPg ?*¯@Ec³Áw‡< åÊÌSµPµPµ‚…`!Øa°Fˆ'Äâ eÙQN›a0r#B„¨lŸÁœ¡/è úQ¡a„‘EÜ Æ€á.€(€8Ä!Nv^=÷yîóܶ*lUتP)T •ìMö&{¹An´2­L+§îKÝ—ºïцGm¸|3øfpbFbFb†ä,9KÎx‡wx§Ó˲ )HAʿфùõh¡l`!"ΑàQ ÇÕn×­ô%çÏ®ÃmÚ§Õj~ÄóOÜ“jnÿpöÚ³(\&kÐDÜ/U¥¼E"2~¶Ï\õfR}©¾Tß8Ä8Ä8D.Qå+òùŠÂGá£ðGqGQåQþ«Ÿ Deå¢$&c••JÉ´W‚T„™Û@Bp)¥SVRλYÕÏH7ueF¯å»ÛÀ!A?Kýý9âF˜!r]È=b/-¥¡4­hhð0× -®W /PµÌÃĶ䳠ånŒ]³¦Ü•ŸÚ¤<ˮ­"Fr@êJµôÕ¿ÑT‘våt§îÔÝ8Ç8Ç8Ç~˜ý0ûaüj~5¿Z£‹ÑÅd’L’I”¸ûIœÄɯ~Žrgœé½ – Þx…QèÀ&×±ê³sf@–jNáFßuê›ÏPOSèTà¥Áó#U+&;°éHiRfÎ'C¤)Äî©pŸû<¸o¥äPKÛ­a¡A;= xóyîÈK•ï|­M›^TÝEÁ&5JkÐtܦÍá€h衆,Š0ñ? A› <à7ëë«ü„ÛXèRÈ‹IlVøÎ³ßNáNÉ?0m6HD#i$4Î4Î4ÎTâ¦YÈBÖ/Š[1¾cè'ú‰~’¯%q´8Z-EHRW«ÎU'‹È"²ˆ> è8ÀÌb ã7BAAI‰#q4›fÓl7ƒ›ÁÍà\ع°saë0ë0ë0¹p3#<#<#üý­÷·ÞßJ®“\'¹NîÝ{bOì_Î_ÿõ¦¿ù޹ ãQ‡I2jh…|ܘ¬6y"¬¶¥?è*KÏÌáÖ|×Þzñ¾ÄŽø3;žU#gÈ\”úÓ‚´`5Ò‘ óÏöl†fB!Â#<Â#Ã'Ã'Ã'Ym†óçü9uuu¥T÷ω¸ÿÂùR¶ãð ïQ³°Q2R+Ö‘†¸Ží\g²åm½/¥2ö/Åeܽ´ùåíÛÏòõèVƾi[®H| w¡öžsœLXb¾héŸs6Ëhâ~^;V%ö¾ñ%¿v­‹f‘õï©_ YãúÓR·¢?„%;pÈPÃT4@Âè%´Ç ŒÀA\úg¶rš*ü ~´þ‘j_Ny­; C ›¾;äVrŽ;UŪbU±tEG™ç™ç™ç)Oöò¤Æ\vÆÿå#>⣼)•‘ÊHeè :ˆ’£>d/ÙK~Òª’s. ã·QµQ›¶¤-iKîwŽ;çêêJ³hÍ"„BhDß›{oî½¹Éc“Ç&UŠãçb.æ¢.ê¢.Í 4÷q÷•=õ@ Tàù^Ü=¢S¥£t{x©|%Üw4ìPm]þ¢–]™“Œ%9gáç>áÑúž×:Ò{(‰yÄ™Ü"Ãñ ïñå߸ì2²ãÞÐA¾;¢ Q†(9©•×òZ^«Û«Û«Û+¯ˆ’¤iñ·8ƒÿ¯°•Ð}(…âhÚ”^'oˆ×9-2±5m^N¸aíŒUg^Ü,SeÞÚåÇö xzhblôóGéq†Sú*Úzš&¸Íõ#ÑF­1Ù|DÀ¥¢AŸó‘¾zœÖiy­®ëŽ6­YéYh3Ïò.f:51š–‡3êê!ˆ{D’ÒJF¾Ìß>†ã¦ u¸rúT¡Ÿ$¿Dº£üØœðÝ!;îña{Ø«ƒÔAê tGwt7W2W2WbFbüª«HFnîhDc>æc¾’a)“;žÁ`0~=rôºú¡Ÿ¬ckkë¤vR;©å¿Ì´Ì´Ì´¸ qâ6ˆuźb]%\vЇb(†â0ãðW?Z5Tàá[hÄ R)šƒ˜ƒKGtl_ÆM‚Ñd¢ª©íM‰c½/L~yìÌÁ[+ß•!5‘ù4RÚDËÃ˘-ådžh€ò#‡¡­¡­¡-¾à ¾ðKø%ü­½Ö^k¯<”@ ”øŸ›1}=rǹïá >Ò`jAiÉ {Ä`Ú¡s$Ë’îe λ°À%ñÞûRs—ÆïÓô™äèõOê¦xfVÔõ¡Úºª©ªí¼öŬÆ[¶yøa¤]ûš%ÚçS_1t¾X{àºÚÍl++²×³Ë\:ݰA*DûÓXî)E‚H¶a¢ÿî…­^rÛÈ ]¼P»­¼Ö ApÃ!67|gäv¹ö`öhâ5ñšxZV£ÕLLL˜‘ÿ…\Ù–˜…Y˜¥´ûîþ蚨‰šÊ»ŸÛƒÁøg!—¹Ë 2‘‰Ì<çòœËsŽ¿Æ_ã¯IÅ¥âRñ„؄؄Xƒ` É $ƒºRWꪄ þœcÙõ3Ñ‹!W‰^ªCóÓC ]ËžVýfä½À;ÒIk11Ò4Ò°ÔrfÂìõ×®m H#iî.H*KaÒkzNqéxåïò ŸðI~Áâbq±¸XŠXŠXЍÃÕáêpÍ#Í#Í#ØÁvTEUT¥¤Öä^gøû`…I±Þ lÄ^Q’(ÝK®‘LÔ‚_z £“Év).ã^ŸMEn½}V¿cSCzu¦ )šhM´&Ú­©[S·¦´mF›™šš&š͉fÄ 14ˆÑŸÊLÿÌ$O ”A<&ÐPt¤Ô „…\‘1­Ç•zE/r¥‰WM]GØr|uìÙø¬Ø¨GûòM¤Ž).» ¸_u¼7q7åû¸…Xˆ…˜K™K™KÁ.pQçUçUçå]yWÞ[±[QEÿ¥µò÷D.À•£ñ„–£’†ÐkÄEôDC.€ãMú}ƒŸñÀ‚§—VÜ«ÝzÝÑ©Ý>íK¾ºùéä/þÙ-µ'´ÕÔIBiaïgð37­:á˜4 +-=¶€û‰Çí"«Ç¬ïÙlq¿‚Û<Æ;¯E+ÜE¦h¢è9Î|ÁNb%>x¥¸ìB.9п ƒiû¯Z.Gå(¥í0p…#›%¾#rµ —7YB–E—Ñet™ù…ù…ùÅ¿~NL„ñï‘u‡òÍR~ðÃÜÁ¥ðKæk´a0ß6²Û=30/ñ/½¢½¢½¢Õ Õ Õ å‚Ÿ}nô¹‘UoÕ[õJ€ w’ÞŸ‰l á:sˆ íD¯ VÛ95ö\±°D_Gq²a¹y¡¡hÎ~söèô¯^YEJà ¦B ¥Å’Ö_y·•áDˆ-)–KŠé˜é˜é˜LÑähr49ªõªõªõÊ꺜0óÏ:ïòÌ}|D2ªãG’âéKø_lÅ4a)׎\þ|5ksÎêU^±uö ¹ôʾ´:zõƈ»;¦UÖ½µ‰ÑéU|Q®TΓìU†áöT­¹Ví–CÓí;=OÖkµº@“á•–DÌõM÷h!£÷‘— ô=‚HKlÅ0Ž-.a šã§ ”œTó'ÂÔŸNp¬©»§uƒœÀKýáDË£|àÁf‰ïˆP„"TÞÔxi¼4^Ü3î÷Ìn 7…K÷¥ûÒO j©HE*3ãß;áJÖ?.†b(&'_)­¹eØãƒÁø_éŽîè.×ÌÓ…éÂtWÑUtÑ]ÑÕ:Æ:Æ:æÃÌ3?Ì„/|á«HÐ’?=>j=ÔÄ70LJ£C©íÝÕÚ›…Ÿ&3´³äN8øé&.ï»gÑÝË|⇤tã$nyNwRŠÞ0Àô¯´Ã_ƒqo…Vh%ŽGŠ#ÍEÌEÌEd5wu]u]u]Õ,Õ,Õ,%¡Q.Òýç"‹9Ê‘øwh…QÖþÒVZ™LÃì$" ØkXo>m´pÛ%Ÿ»ª\_SëèÈî÷.¿üñQ—Ô˜ì>úÚ™šá\+n9ã`cM³Ž„SÞéqI‡|ÏöîÔ¹f±õ÷š9V^‘è÷:O5º ­0KiÊ’ý°Å>Œ\&a ûµÄÊ]äúÕài½ìhÒIššHÇX¤>4=Q^l!û»BÎxh.k.k.s6œ gc~`~`~ ÝnH?¹\ÌqgüoðoäMñ–xK¼%kËð”§<ýY?B¸À…ŒÁ`ü*ädÎy˜‡y؉Øé:Ãu†ë »3vgìÎÉd2™üåÀ—_ä´Èi‘ÓBéЇ8Äý©é1rEr`&éä0zÒ ô1Zõj× LÑ«…ë(àáÎ5Â[¤'—øx9½í‡_>ˆ€I°Òƒ¸†·Ø†Óxú3¥ö_à ¼À ò‘|$åõsó"ó"ó"\À\P¨Tj/µ—ÚK/ÏÀäÞY”þLÏÞ ‹BhN5°ATE(òósI:™òepöYy1öÄ£|eÞ,_³?´wïúëéÛ%WÊðÔÎÕ™5ƒÔÍU¥ùÙ_²;›i¶Ƶ+R¼UÞ|g7u¸U½÷¦«-EåÏëíâúÇj<ïÒrt5·•”Æ 2qXZ(€€¯]ØÊt‘ôÊᜮ‰f5 ÝHŠâÒQyàÌæŠï¹ó@=V=V=–£å¨yŽyŽyŽxD<"Q~ä_ð_˜Áÿ†\u’d'ÙÑ$šD“¸‡ÜCî! #a$L™«G/ƒÁ`üŠ£8ŠÃ~ð#}I_Ò×}¨ûP÷¡ä"¹H.ЧÅÓâéûû{z‡Þ¡wpçq·q·ÿÔã” ’¼xÉÒmꎑnGßèXÝlyøDúÀ<ÚÚˆŒW—¬,¾Ê=ûÇÕÞtK½Ä[¹Z¤‰ä#Ý¥g ü¦¨­¼¶ˆD$ÊÝ©ÃÃÃÅõâzQîÑÍ(Í(Í(åèNàÄ7˜²(kÔÈåÇñ/ÄÁÔŽ!Ë‘ˆÓ|2‡xgž2•5oZ¶ìJ¡{[#¬X~УwƒÝ¯­½ç˜t;ƒØ8Ùdéjðíù«\ˆi¡A0}R}$™°¶.S´y`å¸×Ý׋\[¥i­Ê^•Zñ%Õ¦ÇáFç!Ž÷xÅW$gI ŒGcTUŽJø##ñ ¡’=4ÔÏø üf¾†ÕÏJ¬àÆ÷ï ya ÚªÚªÚÊ]à.p,•-•-•iÚvPžn3‘‰Lf0Æ¿!Wª éD:‘N$“d’LE[Fnÿ!ÃRe ƯA.,‡r('ç¬Û¶-l[Ø©½S{§ö´-D e7ÈnÝ uHêÔ!È‹¼È‹ÞèÞê<#¶<àÞ†¯Kê‹>RGê<¸^óÂÅßyöòupÚ*¦eŸ4[Sò¦¬IŸSm{ß[Ó1EÐ^Ü.¢3”¼ölÿÕ«õ„¦‡éa#ÁÆÕÆÕÆÕÒi€4€ ₸ }}}EWg Ö` ÔPC­(ÁKÈ¾Š "D9öM{ÁÑ¢/u¡ŽØ‹v¨Å #±X•ÓÔ4Ëì³ WñÛÇÞ3½ª\;¦À¿½½ó—®Ppgi³ç9Ǫ˜ÃµáÊdzÍÎG$âÔáLÉð|ù›蟱¿Ò3›CN¼ròáÑØÊoj~j'‚V¢Ã¹¸Žp#ñØ+%Ó[°ƒ<8X )E·¿qH¥§©‹½^;HÕE=—×rW­œ•‚¢ÜY_Ã(ˆ‚ò¦Æ 1h Çqg>i>i>‰ä }Ð}°{±—Œño0£¼I+ÓÊ´2­EkÑZʲµ|“ØÝØý³lxƒÁø¿È®°ì|'! I²òºwqïâÞÅùÅüb~1-GËÑrIç“Î'}E_ÑWÉöþkŠ/)w‚s$aÖ`q]ÜÀËÞ¡D׸ƥšˆ÷³–›Šó‘¶jÍ­ ) æÖ"KmšÍ…“íÈ‘žÓÕpø=.»‚G˜j™j™j‰[Ä-âa¿°_د»¬»¬»ŒJ¨„JÊŠ„œ0#wCÿVÉí ¿E ÒÐ [qR2R |`ÄbŒ†qgHµ”ÉÙšœ*qOêntº•ÿiõÖÚâ>ù“»Õ*±!$¹âÄ€(÷G˜(ÍÏjf×3vÕ¸òwɆVçBkùû5^°…oÇMâƒÖob,}ýøã‹—n¼.õ©@$ËÐçÈ´¦ûiGÌBsüˆ}¿­c+BߢŠ]‚z²ª™ê 7€¬—ŸNI>8ÃŽÍßÑ Y‚” %dKs\s\sœ ã¸0“ƒÉÁä »Yd#ÙH6Ê"\ÌbŒÃ+¼Â+yÓ:Ð:Ð:P$A„–BK¡%W€+À)éXL’Á`üä¸ép Çp¼Å[¼ÕnÑnÑnqç:Ïu­CëÐ:V“Õd5%ÔL¨™PS™Uú¢/úþ©ÙÛ²h#:YzI›Â5°tx‹˜´’áζŽz}=RSm:>ìõðÀ§Ò›‡Ÿ¼õÄŒLœ@_º Gñ9ÿc)ê/!Ë ƒÅ`ó‰ùÄ|x×x­?¯?¯?OÒHISìó}PŒÿ¯°ZôÅ4ëré ­F&âvp6pÃi½¸ùÓÍÓO«Í_;ïè¦õ¶V?k¾Ì½üÒ@wL㡺ÈÇ …ÎfÞn^a³Ž±NiÏ…Ÿ º{Æ©Ãöš›·­nU#ÚX.0¨w!z½°”j¨eQ °/A®‘®p‚ó¿r[T¿¶· ‡ ª¢õm3Ô»;a ÈMUÞ †ÓO‌o/xÁ‹Ž¢£è(9GYÕRÕRÕ’n§Ûévóóó¥=ò!_î¨*ƒñ3äš´!mHa—°KØeii)v»‰Ý”‘OñO™Á¿Hî(WB¢ÄÀ^â%^" HPÞý3o« 㟈œœéw¸ ¼À ¼Ûe·Ën—åjñ˜xL<öiò§ÉŸ&+A%9L«›ÄWGÖ©…Rð%‡1‹4D(Z`ÑÄ»&—yÍ÷ÔöPíà>«ò—îyðéÓæU§F?¨Cn‘ö¸&î–ÆÐÙJÙâ5ÊÕD%Q%e/ãJãJãJzžž§ç¹n\7®›>]Ÿ®OWÆË• ù®d… Zp’š6¥»Höc1?„œ# M…,§¬-w¼üôMù–+qÐ?fÀŸ¯öfÐçöz{ÝSmᣗw652d™xH¦ÞͺÊï+\ZÙ¹E­±›Þ·˜V¹tÞÉ>冷ô6 Óy(‰N¸[xÊW!§H3,AG4R®‰ÿ#1ÉIi´$&Ø>S­á“„~Ü}¢(y#vбóø]P ¥PJ¾dUÞ*o•·°VX+¬µ6¶6¶6¶¤YÒ,ʲ£q4ŽŒñ‹<Çs<—7­:«Îª“â¤8)N8&ŽÉ· e¤g¦_-ö±Í—[š’*•j²*^³[•fÜaœii'ÚXc¬®­½Ãw·=Ü´õÑ軎¶ ©>¶ôÒ€|ž+ðY¤‚xŠV¡ÛI|ð†ë@ZWX þ¼c« E¢>]¥ë- ãsø‹ÄŒTݶP³3ø]†â(®8î—U¢JT‹j«Ú*Öo‰·¬³Å brˆŒ!cH[Òt Ýh7ÚM‰¡¾Á¼¡·émz[qÚnán!±ˆU¤¸äR!aýÈ¥N@ch ¡ÞÔ›z“dY@ ’‚¤ FaF)7fY˜LV9`0 yÕN.dè(ë˜yõõêëÕ]Ð]ä¾"III4Ò@eám–ð€*ð¸„Åh!=£Ói 7‹<$ƒ‹4ÿX⣺­ª_÷3Ÿ÷äéË#^–9½ûfù·§¹2¤WT…aPCó¯îú¿ÚÐ +¬919191ÐB -9EN‘S:•N¥Sɯ(±yÆ/‘ÛgÉ@Œˆ£Ã©%1ÍPS(Ä¥“ñ9L“Í!û‡<À+ìÇÃ*¯ÇÄø?•\×ná{óž­¼2hjž‘€ôBL5ôÍîiôÔlàIMÒ 6õ oØ(d‡w÷ç?|·xyLì¹Ç'.VUùÃ0Åi:ƒÖ¨ÈÕ&»1…‚ÎÅa˜mÆÏh·ƒÒ©}; ÔvMq¸¬œ÷“xƒ­ì¬}ÜÇ\AOôDOÛ;»2"æFÌ-ö°hí¢µQë7ÍÃÈ02Œ»ÃÝáîå„rB9A#h ‡¿Ãßágñ³øY|y¾<_ž3rFÎÈíävr;¹\®§æÔœšì&»ÉnR™T&•qWqÓ1ÓÿÔ©ù{@~Š—‘»çnÂ&lB2’‘Lj“Ú¤6IF’‘ä5yM^Ëg‡ëÏõçúsó¸yÜ<.KãÒx5¯æÕ|¾?ߟŸÊOç§óùíüö²ÉåÞ–{[ý‡ûjì³ë°ÀaòY÷p÷˜ù Æ¿AN’©Šª¨jWÜ®¸]ñŠï+¾¯ø>Ê>Ê>Ê>rxäðÈáB^!¯WIÆ“có¹2ÉcÒù'øfWªô ¢ôŠeðËëÓÓú…š^X<@Œ² §¾ŠÔ‡àÌ»’+_ý`È›NÙNÙNÙUrªäTɉnÝ"ºE¡‹….º¨¿q#ßkŽûï'W )€˜Åå!6¸ˆ£(¥Ñ•pQØ.¬j¤í´òBÿtJ§NG)rºÓ8“Û¸Ú2úŒÛö.¥Ó.v¾i›äÓ1aGþ˜›Õ†VÓåé?öß\€æŠãWµ;¤Z£î&h*xÿ8ûØèKº×C>Æ‘£ˆÇZ ˆag盥º¡n€§®¤Ö©uU=kŽ«9ÎíˆgÏÖJÒ:i©yV›¬6·Äöˆía°ÝŒnÖbV‹Õb]c]c]cÝbÝbÝbéoéoéo}g}g}g9f9f9öUŽ–žÁàF(ZòÉHF²¬6 ´þy†gxFŸÑgô>â#>*yùr¹’<òá½AoÐx€x ˆ]Ê™‘²0V:Ò‘®lg ÊþåæS)HE*Þã5^c6b#"H9RiÔDMp%¢Ánº™nÆjŒÂ(ø"Áp„”8‡,¨‡z8ÀÐ@ ìa{¥ÄJtÊùÝp„#œ¸wâ®4Ìòƒüˆ@*Yžù‘ù•ý„ !ÄžØ{eŒœà$/=+B`òžƒŒ`Z„¡EÇ?ˆ¢7 ](tAs[SKSëɶÇG±^@ä1¬1^7^Ç",ÀÄán°Ÿ#ƒÁP8Ó8hD#:¿o~ßü¾Þ‹½{/–×oãÄ7ˆoðªä«’¯J¢z ‡’$óç kÈ”Dx’3¤!.^ünØ­*+Õ­f‡ÞÉ·Ôý^ª–ð3Œ=5ýÉÔÆ7ÆÝ<| P.âT©-Gxƒ$¹¤õ«¡¬a¿K±TwNwNw.¢bDňŠrõZêëÔש¯oï¾½ûönùÑÛ±Û•UtÆoƒSÖ9DP€'d?i)RZŸn‘‡htÂ%¡\½…ß ð,s³Àµ Eý¹å¸ÒÓànð4-Wi8WKx§Y VYœÍO¬q—»|èûùÃŒNÒïÍ9gx5ãÓÙ°BB0<`çRUßKÛÀ´ùG7ÁeüZd±)ÉOò›G™»™»•^V{_í}íwÕýUÆy0=xk}k͘ðèÆ£7r‘\4Däæfff˜žšžšžf{f{f{oood}Êú”õ)kkÖÖ¬­Ùo²ßd¿É6f³–U–U–UÞÂ[xS˜)ÌfìoìoìožižižiÜaÜaÜaÚjÚjÚjhahahalmlmlÝ=»{v÷¬ÒY¥³J›÷š÷š÷JS¤)Ò”ÿò½‚Œàÿ2Fv—0£‰éOúÓÖ4‚FüK*–÷¯íæhN“{ä}DÒƒŠÑýûOš²|v#×߯ŸK¨QI^ú„ÖBk¡µ&U“ªIÕÕÖÕÖÕVÍPÍPÍKšøsü9þœ¾ˆ¾ˆ¾ˆ t‚N×N×N׎óçü9ÝÝݾ>?šíãéM½i€Oi»ÒvRYOÖ«çªÞªÞnÏ·¨í¢¶7Ú\{ý-iN:’Ž4ŽÞ Ìqg0À4LÃ44DC4TwUwUwu:ætÌéæc>æ[W[W[WZöiÙ§eJùû¿2A¾zB¦ü)X! /ùT²Ûª§Ðàöuk¬.Ô¼`«ümóTšXÖJU͉Ö£g¯Ysõ„8EZG'“‚$Öãn®ý¯‡,ÙL@@¬öV{«½¹·¹·¹· ô‚^µGµGµGÕHÕHÕÈ2Í2Í2M–¦PJ{¿Ÿ*QPè ‚ h}º…¸b¦s-‰¹nZb-oݳ§æ=<ÇÜÛý¢T‹~aãóÎë&–ª–ß>*)èMž6€ôQ\hnoh Á0AŠWá?ѽbe´íXÍrüÐËÅŸ ?Óït`3@×§Ùøn3’à Wùúž6¥Myàû€©ŸÉÍäf6Xâ-ñš)¶}lûèítº áœpN8'ŒF £…YÂ,a?ŸÇÏS5Q5Q5Ö ë„uÂáŠpEx&<žYÆZÆZÆZ—Z—Z—š{™{™{™ š š ZzZzZzšýÌ~f?KKKósósósó*ó*ó*Ó'Ó'Ó'c¨1Ôj ¶[ƒ Œ Œ ŒÎFg£³¥»¥»¥»AmPÔæCæCæCÙ¯²_e¿ÊNÌNÌN4u2u2uÊZœµ8kq†O†O†±°±°±pfÌ™=Ò—§/O_žq=ãzÆuÚ“ö¤=¥‰ÒDi¢ä.¹KîÒfi³´YÖ —ŽHG¤#bE±¢XQúAúAú0Så{„>;°}a]­V«çSŽr¼@$"e•Ëœ‘9ÃTÇPÔPôg6ohÁßæoó·Ét2LçÇòcù±Ä‘8G®)×”kÊé9=§çúr}¹¾ä 9HÑÇ;wÔ1êuŒí Û¶/t6:~¥~¥~¥MšMšMší~Ûý¶ûÁGð±I·I·Ij µ…Úº~º~º~*•ÊF;V;V;VÕ[Õ[Õ[ÝSÝSÝS}H}H}ˆïÂwá»hzhzhz¨æ©æ©æ©ï«ï«ïó ù†|CM¬&V+§6iŒ£ÆÈ{óÞ¼·æ°æ°æ0YN–“åêüêüêü‚¨*©*‰žb>1w"ìIØ¡ò!ŸulsXd¿È1hŒÆp€7¼Ù‘Á`(yíÑåJ×'®O\ŸèèèȳåçgŸŸ}~fˆ4D"q ÇpLi$ôçÔPQPP.Y†dqº´ŽÆ¹s,¤7ìmk”ìÇ5¦Z‰'f›#šÚëS÷V½ûüË«R>“0Äc]Aó£³¢!#ë–|=>ã3>ËG+u—ºKÝM¦@S >R©^ ¯„WêÂêÂêÂÎÂY8%ш9îE'ýŒ6)®§:ªÁ8TC)Ò Ç±UÑ€¶Ý¾èn“ç­öÿø¸Bü®¨IÁÞó^/úªrg¿•®Th¨ZÁï50zš¥’h c¦ù{Žþ™ãîtPWA`åO·ß8rÄ}­D+ñ&ÞÄ›RF¿Ÿû~îYÓëN¯#…H+Òêވ˵/×Þ“õþÕûõ/íœíœmblÎڜխխխՕӕӕӟ՟՟U«ƒÕÁúp}¸>\÷E÷E÷EŽÚªó©ó©óé ´+µ+µ+u—t—t—´µµuuuµiÚ4mš:V«ŽÕlÔlÔlt´:Z­ÚóÚóÚóÚþÚþÚþ|,ËÇjGhGhGH¯¤WÒ+©©ÔTj*ívH;¤GÒ#é‘4Iš$M’NK§¥ÓÒXi¬4Vº.]—®K}¥¾R_é”tJ:%…H!RˆTZ*-•¦÷é}zßTÝTÝTÝìcö1ûŒNF'Ã^Ã^Ã^Ã]Ã]Ã]ƒ“ÁÉà”½'{Oöž¬©YS³¦fUÌ.˜]0µeb¯Ä^ÏI“œ¯U¡ÄB‰ÙvÖÖöQB[¡íµÌÓO?<µjå“•O\'yõôê©ÒùéüTÍTÍTÍl?Ù~²ý¤¾¥¾¥¾¥Ÿ¯Ÿ¯Ÿ¯j¯j¯j¯+ + + ë¥ë¥ë¥vP;¨d×Y¯ŠWÅ+çïÈ;òŽ»À]à.Ƥ1iÌ œÀ \<ÏÅsµ¸Z\-r•\%W¹Â\a®0yH’‡²¢‹\3À¥p)\ ñ!>ćKä¹D¹K®8Yœ,N633³Œ°Œ°Œ022o‰·Ä[ƥƥƥ¢‡è!zdgg‹•ÄJb¥œ9=rzH—¥ËÒeC C C ÓSS’) ¤ )¨ü’"ÑE¢U/¹ÓÜi<’L‘CJ1ëŸÊ`0äHvi”Fi9ýL&“Éd÷ŽîÝ;b=Öc½xP<(Lšœ49i2–a–QµP µ|õ#”;\òàÀ¡"B‰íHã¨Ô:±ZûËò¹ç-çvÈ|4k¯©@zzúdãìiW6V›MqùIâDÖÓ¡”R|u—]FNµ…-lEI”DÉf3„9Å8Å8ÅÈ“®º™º™ºYvçìÎÙeÝwvþÁä~Ì„&ÌÂ9ܦ“À¡ú¢Ê {¹òäGcóEKÔ%iHV†ù–yÕDb j£ÙXß¼üçŽûÝQµÜsË–Ùü»`va†@ -ÒÑ=ö•_Wv]Ù«WûöÏykð0x$ÔJ,X:õyÚ‰´*o¥„17òr›ÌR,ÅÒ_úX•YeV™µÕµÕµÕ5šM„Æ 1h ªëªëªëênênênª•ª•ª•ê–ê–ê–êPu¨:”ŸÆOã§©¶ª¶ª¶:Tu¨êPU¦ Ó…Ù¯·_o¿^3V3V3ÖnŠÝ»)¶õlëÙÖÓÆiã´qz¢'zb³Ìf™Í2ÍDÍDÍD­N«Óê´{´{´{´ÍµÍµÍ544tsususҜҜҸ)Ün 7ƒ›ÁÍàtœŽÓq¸ Ü~0?˜ÌUà ð¸ò"D˜MþÏýŸÏ€°ƒ¯ÄWÊ ¸µøûâï#Œš5j–t\8&“nˆÛÅí4ƒfÐ I”DI¤ èº@¬-ÖkÓsô='‹'Jë¥õÒze GÊ‘r¨;u§îÆSÆSÆS²KmJ0%˜ÌïÌïÌïäu Ã!Ã!áœ}9ûröYÛYÛYÛeÌþ˜ýÑòÒòÒòRN:2™Mf“9§^N½œz†^†^†^ƑƑƑ™ã3ÇgŽçŠsŹVUcÕXí¬vV;kkkqª8Uœj¾a¾a¾!í“öIûLZ“Ö¤•_7f3ŒRO©§ÔÓ<Ï<Ï<Ï8ÖÔÁÔÁ'ÌÛÆÛæEÛ”Ç)¹#|'¾×Ųö·Ü´ÜT¸ïá.°"ƒÁP÷/ø‚/öÍì›Ù7sªíTÛ©6Fb$Ff É’5$u~êüÔùòú…~¡_”¸û×Fv°Ý% M§p^cßH[jüÍö3Êœ•ze}2ÍUï²Û§-¾níö3·:¿XüA“¶ŸoÁiÈ0q¦4&ÁóÒõ׈D$*÷è†hˆ†ÆÆÆ¤©@*¨º«º«ºkÐþ ý%P%HÒ„4¡„J˜þÛWDîØ*³ 'pÅ*J”FO¬Åx’Iú & §‹°ãо‡y^Î?´ïÑ€×þÕn†œò>0­Ü—Ðn5ŸÞt÷‡¹ÄøåíP:5O§k‹ž6œ]q”¼Or ñØÂìü=@TDOôò¶ç0Ôahµ¡ÕVoX& R©F"iCÚ žð$É$¤‘»ä.¹Ë…r¡\(7”Ê å®pW¸+œ…³p¾6_›¯Í/ã—ñËø»ü]þ®@"Εså\å)ø«£äyÁïå÷ò{ÕjµZ­Ön×n×nׇêCõ¡¶:[­Î¾©}Sû¦W®8\ñ^ç½Î{]HÅŠ!‹.~¸øá*õªÔ«R¯Î…:ê\h¾«ù®æ»:¹vríäÚoV¿Yýfvmmssäê‘«¶xáñÂãÎ#I”ĸ(‹£ÅñNo"v͈ÍSbDÏ=G½ƒ1èß¾ûþí{è} ÷öíÛ·oß>fjÌÔ˜©õ.Ô»PïBͤšI5“ÊÝ/w¿ÜýðÐðÐðÐ|7òÝÈwÃ{¦÷Lï™r’Œ};ûvöíìüíüíüm:Út´é¨wÐ;è´Í´Í´ÍÔÔÔxoà ¼-oËÛbaÐ_u] >B%¡’ï0¯¯²úˆ%K¼oåñÎãÍàëðu2?øÀ‡ý Ú  ÚÈ›…ã ÇŽ‹ŠŽŠŽŠŽªU=ªº¬¬¬2RÖûscíî$çDJÉÛóý{ÿP1žÒ«uçH‡ÏŸ06ñõ~×î~ÝoÙ­ ?Hì%wI[Üú«ÌIÊ“ò¤¼"ñ\î¹ÜsyôÅè‹Ñ«î¨º£ê¿v~íüÚ)CåZ)Yñœ*ê\WÚ*2ŽG.E¾:—Ä=Œ~–߯¿ÎÏ÷õ ZlˆV:§2Çý»@Žz^Çu\—UJ¢¢¢+Õ©T§R2Ël,³Që¡õÐz(&ã1ã& øk/J‚–h‰–Ø€ Ø k¶ÈOÿd™Af(„#ᢹh.šÇãÆq§¸SÜ)9¯š÷à=x¾>_Ÿ¯ÏâFq£HI rÊö`öüù&\YîüÖó[_L¤”ÒËEM3M3“ÞPJ鈕ËS–§üεÜ6ü-Þâ-MF“Ñœ-gËÙrã¹ñÜx¾ߌoÆWà+ðx=¯çõÜGî#÷‘;Ìæs+¹•ÜJ.†‹áb¸(.Š‹"b Y ’Ì&³Él2œ 'ÃåsAZ‘Ö¤µü±þík 5ïÕ¼WhMáa…‡)Ç#«ëÈš9 ã{f&`áG}Q}Q}ÑòƒË.?¸Ê—*_ª|)7´ÜÐrC555•>ßPþç;Ñï€äÚvh„ )TÐåPÊž#?ô*cÙy®zÿs”^Ó 4øh ÷žòxò‘ôÅ#å? ÿÿΗÄŽØ;Y7ÌÍÓÍÓͳJµ*ÕªT«²ºÊê*«K¾-ù¶ä[a¥°RX©´Ã«Ú¨Í.Æ¿TÿJ}€ÉèËw"çI“ÜC~–*cßS³_µ÷'õOÆw€ÜaNU|‚'x">Ÿ‹Ï%ÉCòàzr=¹ž¤iAZ(e+Þð†÷ÿÜ—N^zÛ–ë/×˸ˆ‹¸ˆÊ+§sýý_àà ®àŠ²7OxÂS9Â&h‚&Šè¡ l`£#ʯÈùu9¿_v £0 “ü$?É"(‚"J7YYZQ~h)„B(DŠ’¢¤(ñ!µImêE_Ò—3‡õØk`^aÕõU×mÛNµÚ¢ý0·an½ù<òá›ñUùª8 t”§q4N—”së‰IYªRÞ¾ƒ;¸£HX>ÆcaŠDè~Ô(27ð•ËúÎ+ëm*ÒÜÒ0í¦a¦ê•]/íˆ9ñÛ6ÞX˜¾0«ƒiÿ»I´b¼Ô‘NüË\ö<ȃ<´:­N«#ñˆ×WÒWÒW¢É4™&“"¤)"„!Bˆ@‘a³ñ߇Ü^· X0 ppágË7¶SUþ !a°ƒf½ïÙñ•5_ïYïYï‰FÑ(ù2|¾ ?›ŸÍÏVFʺ¹ŒpTB%yS­ý¨ýÈe©Š¨ŠÐ‹ü&~“MûVö­Ha2Œ Sôtå¸ÿw‰eœeœeÝC÷Ð=ª,U–* S1S•·‰’ÝÇ`0¾/TPA¥4† B‚œœœl;Øv°í 'Ý¥¶OmŸÚ>kNÖœ¬9hЦhЉ˜ˆ‰_=Ön=Ô0à ‘|ÄÒ ³±·'Íéh¹R¨¬n)h„ÂÚyª¸G›MHÜXÿxøc¹„Eh"•¡ÛhE¼À¤ýV•gTYÞq(†b¨ª°ª°ª°»«»«»«´BZ!­°ÆXc¬1xøÃÃÌ1æs º¢+ºþU馌ÿ•ÿç¸óàí k¸Ø‹8ÜÅm¼Â[kÿ.xŒÇx,ÇJ­­­­+¬+¬+xwÞwŠ Å…âÊÈ !ˆ Fd#[Þ¤+h9Z;iZz:—ΕœÄSâ)ú΢³”F62ñÙG–zXj[j[jÓj´­&ìö ûå²fe¤œ°Ä`0¾7äžÍ}Ð}äAOµ§ÚS7xƒ7â@q 809;9;9›Î¢³è,¥ÂêÖBÿ`2‘3ß‘[@ÆIC¨+}[1=ì½wbí×C‚{ÒQæ3Öúd*÷ˆ„Îü¼uËÈôûÙ͉‰%#i?zõþ²„¼”™+Äæ¶Ãm‡ÛÝbÝbÝb¹Cj†&C“¡yßõ}×÷]•©ZÖ†g²d/ãï ‡Âð†;@‹¢‘æ™ð˜wVfð™ôc f¢ ª23}ã$  Êâšµ£vÒSé©ô”¯Ã×áëpÓ¹éÜty ñ"^Ä‹Œñ_Èø*R€ XL“ÅÄçÎsçÕ·Õ·Õ·•‘¿>eˆÁ`|KtB't’µÆí·Ùo³ßæææFçÐ9tŽq¾q¾q~r…ä É”Ük9Šü§8Ä$ɘ׈Çû|úêrãç·ŸSú¡z‘f»ª/Z 5¸—çÜ:óδ©ÃÉþ—“†°`¡d¢Ã¨?´PCø DeËÈU[±ˆE,æ`æx=žF<Çs<—J¥ƒ‡þq8.á.)’вËþ'û2~ŠÁ0Ó`ZWuLèËßuÈÔUÖ^Ãq$"‡,EKÔdfúÆ‘5_+¢"*ÒšCs¤gÒ3éWƒ«ÁÕàWð+øÊÈÿ\°È`Èd"™ò&íM{ÓÞ–A–A–A¤éAz¨.«.«.+#ÿYü ãBÎVO@¼:yuòêÄ¿æ_ó¯É|2ŸÌO•0*a”ØDl"6A9”C9Ä!q_Ý!¶‡j²‘+ON‹ç¤tqÕ¼%wûÎŒ_!oÞ¦ã™yŒã¤ý\&WjÜÖÕ³¯þ 9JwáDFrÞd3â âÿT½öÜÈ–¹‡{¸‡“8‰“Î Î Î ¶ílÛÙ¶“3ݳÏfŸÍ>›r å@ÊTB%TB{´G{ÅéÿsŠ}¿að‚;Ô´0mª¶å{ðçúéŠi»A‚ehŠjÌLß8ïðï°k±VN]J¥‡\{®=מ 悹`edÀ Æø/ÈÊ6Dú$}’>™Ìfî÷ˆ{¤þ¬þ¬þIÁF.8c0ßrAd ”@ ]]]§·NoÞÒÆ´1mlIµ¤ZRlllåUÅ­üÚ±v4P¥à/©¥‰Ô¯Ë "ë§—è:°üféDvóM §Îºþ‡]Îy6úÜæ;éク‰øK.Òã>ã>E–W–þzÎ¥ÜbÉ¬Ü îqC ZbuÏôæ¢N!“ƒ›¸æà*ÆÓÓY\Zªaû„žë®^Û!•¡!ô5Š’¸ /Ú`Ý_lÛ¹˜‹¹ˆB¢t‘ºH]¤Ë,—Y.³è!zˆ2f3™É§“O'ŸVD„K J(Ž;ãG ÁN4MèHUþ<bï© ¾¡¼? ÕÁÌô]xÄË›ÖÎÖÎÖÎô½D/ñcù±¼Ò¿KÖaýÕÿÙq·‡=ìé z‚ž°Ü±Ü±Ü!›Éf²Y=^=^=^ÉÊŒï9^‰HD¢ª¡w•»Ê]u{êöÔí)õ¤žÔÓ:Ð:Ð:0icÒÆ¤JÃ>¹Ë„0úzˆ@9 ™Ž4F:O«¹®uX¤ûÍoÖ%¼’´^êMrãÕû„ëÛKþäÁmò|òr‘ÔÅ)BJ¤· ê/R”›ÙÉÝd­°ÂêZݵºkuí5í5í5B!$5>5>5ÞXÌXÌXLQæ‘‹}ÿ@8‚;¥Ã´ ¦ª ðç8ƒ½½¶‡ªŽò[›„ªgfú Ÿégª$0ˆ=ÅžbOšI3i&ßïÇ÷S¦Ýƒ8ˆƒ¬Û%ã¿ ;î}Ñ}aËgËgËg¹ÐYUKUKUKé?ø1QHãGŽ—‡! aòüàœêœêœjÝþºýu´C;´K÷H÷H÷øÒàKƒ/ —]vô¿6E7LÞÑô5B0±kÇ:=Š´ÍW"ÿqÒlc€ehfræ cØxa}ðÕñ¤8’0 çp` T0Áò“ŽÖŸŠ\N*7\‹µXKî;äŽgÏž è^º—îµ,¶,¶,–›Œã!â¡Òwö5^ã5»0ÿ‰pÈØÑG´7]¥òå:p+í’Ô=U•÷‡“r(ÀÌô]« “u±u±u15P5u…ºB] àŽá‹¸3þ rqê@ Ä@Ù)·tµtµtåNs§¹Óª'ª'ª'ò-GIÐb– Æ·ŠüX. ãÊëºÅP ż‹xñ.B–’¥d)=@ЉíÛ%¶£ýiÚ_4¼û¸ÿÍ6Тä¦HÅéZÊã–“E?«?šõ c9œîe8ÍÓÇ-ع}ýM¿Oe>ïÏ àzq÷IºŸôF6Œ°üe¶•ËIgc6fËC.C]†º µ¹ks׿®Üó;kHÖ¬!i®i®i®Jv{¢ÅÂ%ÿ\8Ã64c°‘”ç<ÉX[^½CP+¿¸(ÉJǾ’„$yS,ÓtšNÓù| ¾…7Å9œÃ9æ¸3þ YÈBiMZ“Ö²Snigigi'ÇàÕÕÕå×é;ú޾ck8 Æ7‹üX.7÷9‰“8i¯µ×Úkísìsìsèºn066NjžÔ<©9œá gtC7tûŠ…jà‘Žl˜È[ìDgº‰æ ÷/-–XìA=/Ø» m„ÆüÜwâë×)'×ö?šðȆž§ž´+ÝC ºâ4náý_r Rma [âK|‰¯çÏ1žcÈD2‘LD(Bú±ëÇ®»¢2*£²ìÊËUm,\òÏ…Cœ`KŸÓqØ‚LΕëk·Dµ‚ª¼?%ÌÌô]🡤ÊX÷[÷[÷Ó/ô ý",– ËIR€ü´öÂÜ,Ư!W´ÌZßZßZßÚÖÚÖÚ–ïÈwä;ÂîpWâjòí„Á`|{¸À.J¸'éH÷HðHðHPy©¼T^Ü`n078auÂê„ÕŠøc Ô@ |Â'|úŠ…fX!rQäDÉ‘Îoè½ H—£Ý$ÙH·§Z/ª‰Üº%%v—¾=éµõÓ¾ 7.[EÒ¤#4Šš”’Ö¿–S8…Sh‚&hb»Þv½ízÇ…Ž âü€r–å,ËY–b—b—b§´º“ÓcX¬ý¿°Sº’É(Cò²“ü]+â.>Š© µ¡6¼oÇÛâB\”‘r ;ƒñŸ¹…[¸%oZº[º[º[6[6[6«~Pý úAUPUPUPY @S¯b0¾1dá`9vž‚¤8wrîäÜI{U{U{•;ÅâN}^öyÙçeY-³ZfµÄ,Á Ã0 ûŠGe T\wî&±oˆóéÊâ6!aî¤Å”Z% w±´OO3ãÌúêw“£6ZbŸ™&Xºˆˆ¹A†`7.à92‘ó_fU9^.÷‘m‡vh'L¦ Ó<y4òhD·Ò­t«©³©³©sÒ¨¤QI£”@[MÔDÍÜá9Æ?ÎrI*FP¾È@…;vT骶pƒÜi8†ÓY(¸2c}ãäN•9n=n=N9ÊQŽ/Âá‹?âGü”‘,âÎø5<Çs<—o3b/±—ØKÜ#î÷ðõøz|=a¾0_˜¯Œdm˜Œo7¸Á £1£É²†¬ñŠðŠðŠ@AëMëMëÍļ‰yó¢ ª Šâ\>Æc<þ*Ç£† Ö:š²qÁC¤IFu¨8ÐúDì=]»ÉîzëWc‚µ ׎‹#:C/¡æ_ìöÊ–± lððð|6ølðÙ€<ȃ<´;íN»'nHܸAI:’KQåX;K’ù&2—Y–Xç9Tßâïc íJ›ÚjFªs¸f\uGê%UDkôG_ Àg&ûf‘ÛÔĽâ^q/M¡)4…çãùxéôNz§Œd©2Œ_ÃÜÁYñÀ2Ë2Ë2ËzËzËzKh.4š«««Ë7FÂH˜¼ÂóËÑ ÆŸ‰œ*C@@È[ò–¼¥14†ÆÈwi²4YšLý¨õÃHŒÄH\Â%\ú*G"‚" GÑyñ ÙB1>ŒÜšr©Ó첓y{Íz ²*/¼yþm}ù.m|y›ì"Ñ8%¶—:ÑšPA ¬áì$»ÝržzI”DI§t§t§tÛxÛxÛx¹CjÎîœÝ9»Sò¥äKɇ»¸‹»˜‚)˜¢8ýÌqÿ&à2º˜ó‹ÉYò€,¤nÒ)» Õn^µWðÁb|€•´BqdÆúÆÉ]œÚZl-¶¦ 4&ð£ùÑüh‡6*#™ª ã×ðOð;±;Ñ ½ÐK¬/ÖëÓ~´íWhQ¡E…ióióióQ‘ŠTTà Æ·Á.ìÂ.y3ãsÆçŒÏ´ mB›À ^ðâæps¸9d@`aÑW죬ÂÏç2Hˆ”@{Ã¥™¥R\¾‘ƒKÄùÖ·$d¯45BEbOî(u¹aA\‘ ¬±Ë.ãG8žðD0‚ìÚÚµµkk¡ˆPD(Â%r‰\âÇäÉ“¥R©` ‰Hd.û·—^ÏôÜü˜‹'‰d7²èTúÜf¦•*CgTÖC MP”‰B~óÈ%Dk¨5Ô*ý ý ýÀy#oÌoÌoÌÿS?Ëqgü>ã3>“Id™$/ïÊÍ·¥cÒ1éÙF¶‘mœçÀ9(õ²`ƒÁø6ø€ø tr(m)m)mŒ‚QµPäž~6emÊÚ”E6²‘îèŽîð1ØA5qÂ-Œ’è`¨ßªunŽzÝæmÄm©ºe˜´DÕЮŠfÉ^Û3‰ÏFßÜú,2q8W’ìÃzú`Œkÿ;° °D 6@  p[í¶Úm5Í¢Y4ËxÐxÐxð³÷gïÏފ挬Öe†ù/,¥e|¸ôãXk>¢%éØ[i!ýb{Xí¦úA;\èÃÇÀ MHa2c}ãÈ-–tÝEwi h h `#6b£¬é®Œ4À3ãW‹XÄÊ7fS)Èd 4yyy%ÉArP–qS‘ŠTf0ãÁLJdžò(òé“Ò'¥O"SÉT2•ÿÀà?èÖëÖëÖ+}U›¢)šþaŸ.g£gÂ3Þ‘]èJÓ÷hÔaÍŠ…f…f‡Vðl‹)bIisæåŒ¥Æ»³¼·N¾¹Ãâg"u$Ùä‚fC‹X»h”5L3Ì0»r=äzH§Ö©ujÒô#ýR¢S¢S¢ g g g° Û° ƒ1ƒÙeøíÁ¥©Œ)f79wº“zÙUÍà÷j ¶üåú¯‹üðbÆúÆ‘cÚ™v¦ß¶}ÛömÛO¾Ÿ|?ù&Ož8\ù ¯ðŠŒñk •¨rÛ{\ðqÁǯ8^q¼âxmëµ­×¶———*˸«±«™ÅŒo9Ä31Q?È•9*svc7v )BŠb[ж mAy IGÒñë–*'†Äa%Ú æà¤S¤]YMöˆM1åJí¡‘†c–L¾š>]»ÃÙYÏ»^{ö¨Ü§×‚ïHΊW¥Ùtðy¬]jÈ«‘‹±‹‰žè‰>ORž¤½Oï[ZZ&e'e'e+ðòÃ’¼âÁøæà¾1œ5ž‚DìÉmq&¥z[Õsa¶§0—ŸªŒª‰`âÉŒõ“+ÞIÇÐ1tÌó€çÏ_||ññÅס¯C_ÿÔ"GîÖÆ`ürkDȲr·Ô €ÕK0ß,VXaE)”B)Ù5ÏiœÓ8§±´IÚ$m"×ÉurÝf¿Í~›ýò<@]©+u•Å"×çæšs„LÞÊ á´ö¨ZßRÔÙ·Ž?ç\DrëJ²¢RÏjO2oH‹½9èòb€ø€ÆþëøÅ¿<Ö.5FaFÉÁ5çQΣœGÙž³=g{NÖãÊzžõ<ëyjXjXj˜Üè ‘ˆD$üVá¾lËišŽ8“ûÒDzôcUÛùJšî|®ƒ2ª&áÁŒõ“ûGn;Ø‘¦¤)iJ†!d)FŠ‘b?]5PD„ñ=»(êE®¿·x‹·ŠTƒÁøVûr ‡€€úúúäXr,9¹Uœ*£î¯î¯î=؃=¨ƒ:¨óû?—›JI€ØH,)µ÷‹ð0Ùë7½ùâ#$³á“y>Ô^¥­¹xáÞ~wf<_÷~Rš#É&GЋ>AFýÞ<ȃ”Œ%Û`²'.êëüŽ±Ù«^MNkš5ÎÔ**jD9Ìþ61j9^.—ò§#éÎÎÎ6?Úühó#º  º¤WJ¯”^)ómæÛÌ·X‡uX÷»RŒÿ(8$?©¨µŒØZ:Î×&*² ·¨Þ¥­AÿS3”&tvÂZæ¸3Œo†\½ d‚®£ëè::N ”ö%rôË#ŒÌ` Æod&fb&|àŸ¬ñYã³Æ›¯š¯š¯ÒdšL“í2ì2ì2„ÍÂfa³2^n!ôkEwb"êJÁt5-ŒÊð€Susø]]q}˜úš0Kõ”opGû þ§M‡ _½úº#™Lòb;òÐFX -Ô ý ¢í¹Åïáîá:®ãºw˜w˜wfc6fÓtšNÓ„!A écúX @¼Á¼aÚ÷g:(ÚJA9/­¥E\g¢%ûšˆN“t+4òOˆ£m°Gaõ¿¢S ƒñOGV˜èèè„t éÒ)¤hHÑ¢®C]‡ºUn¥r)ƒñÛx‰—x‰6hƒ6RŽ”#åËËË  HàÇðcø1úúúÊx9Qä?#§³Y!B"¾äÆÐštªÕª^F°£ñå¨÷!c­33Û¯J“‰=Ù:9bC÷Ø×Ùe-787òI &Db.Œ0Ãú·°’kßýØ£8Š£Ž :.´u±u±u‘ËO³Wf¯Ì^ùùåç—Ÿ_Â.pÁŒÀ¦ööýÀûXûHÃrªZZZðóH ¼¤7Ôßéˆ~–vmµ8ÆwƒñM1 Ã0LÞԯЯЯž<5xjpXpXp˜K´K´K´ü.9MN“ÓÌ` ÆoD~–ePœà§ôNéÒ;¡1£1§å´œÖá¸Ãq‡ãŠô¡¬GþŸ«M4Pƒ—ËXI4BQ2œT¾‰ Ûo,3óÐË…á6ñšçl¯~Í|rùý«<üXn#+æH{é>H +m+¹q’ì‚AqoìÞØ½±ê”ê”ê”lŒDÛDÛD[i°4XŒh€HB’˜N×÷gÌcuå¶¼'sA¤&ùÐZÔqœî•† !ý‡4Ø@ýª¼ ãY±;°Cya°GØc¼`¼`¼`.e.e.…8€ÊíP„‘™ÁøÈ±då´ÏiŸÓ^I%ƒ1Ã.«ï Îàc©emÕÒôØZn „†Ú¢‘ýDM¨ÊLŠ“r< T,âþ?‘ûiÞÞðF/ôB/ôFoôFY”EÙŸÎËNc0þDdÇ]vDˆ5Ã5Ã5Ãå|Zù´òiåsÌ|(GÜUTT´>Z­Nã4N£9š£ùÏö ßSÕP''0›Ô•ŽÐšµê”éP¤hd¨Ÿg¨¥ƒ1ËR'£núcÏ Öf_½€—؉d ÉC¶( –þ>.»ì'ØÂ¶ŠûtLÇtO“§ÉÓDm¨ µ‹‹ÅÅÉ­’[%·B)”B)TDETÄs<ÇsvY}op†Ý–çV)»–¹Ÿù!tdŽ.ð¥1ökÔíUc¸’D¶(—·žEÜÿGr/ó}À|À2,Ã2Å ¸‚+¸¢¼Ë²ÓŒ?Ùq‡wx‡fh†fÚFÚFÚFô=}Oß[3¬Ö ÌÃ<ÌSb„¹…# Æoã^ᢅ(©‹ÔEê’µ0kaÖB9åCÓIÓIÓI¿C¿C¿CvdÉP2” ýÙl … ‹ÑQ4ŽzÐq6¯´×U='Mé˜?Ò*-Ͼg¾®úlÿ@›µ±ÑÑÎ?êÿ>Õ‡ÏÇ­"éÒAZ•JÈñoRŠ*#û 0äyƉwâx»vì:À~ðËÌÌü¼ùóæÏ›ÑÐaCë8ñ}"–ÆÖÀÌÍ&Ë.€›K"¤ÑÖ¼´³ýµ$ìát$+Dè þŸð…/|e瀫ÈUä*ª‡«‡«‡ËBWV£Õh5Z+Y+Y+)?»¸‹»ÿà難z¥´èÛÎ –Ϭ œáL¬DOô(ˆ2(ƒ˜aæb¸v\;\ÀMÜÄrÌÆlxÃ>0 9ÿfoR®¿Ü±<¡ÿÒCüú/å€þgûÿçwÿóç~#3²µÉ]r—ÜÕš´&­I–ƒ4æsŒ9rë冚[8’Á`ü6>á>#1#u¦ÎÔ9çrÎåœË´mE[©¶¨¶¨¶Øœ´9is2%+%+%KÎí–‹Ya‚dÁ ß{FD“$Ð>C½Zå+ñ2ð‡À9.*ÚÝ8ÄÚ"õcâ›ÌˆE…öÔ¸S€Ô!À0šE{ÑA8ކCF Èîø8ŒÃ8Ï2že<Ëp¸ \¬À ¬HP'¨Ô´m@(Qù½Ø‹½ì‚ú>pê¤é™}LæúçFÚÓPZ½í êÆüf.‚|"M•±Zqÿ¹Û¸-»éŽqŽqŽq%[•lU²º¡º½®öºÚëjÏÉsòœª¤*©JïÒ»ôŸì¸çäúû¶‘c±s+35SêHWÒ•dbckt1º "J P…ñïñþ7~–üà÷3‡^v»å‡¹D‰æú“Ë¿ò"/ò*Ý s»ér&e0‚¬4ÊýÀ ôÌõ'ïS~]nÁÝ ÑPi¬-Ö?ñ!M¶ ål8ÎF}S}S}ð G G GP…Q˜Å´Œ? 3Ì0Óô½øÃ?{jöÔì©æ’æ’æ’I#i$%«{faÊ¡ÊÉêïrš W‰ì'ÔR-ZÚs¸ËJߎ»k(\V\k©'âWh„6 ï¬]uƳ²ïÞ}q'OHg,’ ІࠂXÿV! ¹Ò¦J¡”“““Ó§)NSè:…N±$[’-ɉ«W%®’{M(ë„rz-[«ÿ.`šÌQ†£&Oœåb¸eR-IGÚrBu~yŒÙ0¸€Ãß§³Ø?ƒ\M[h?Úö­¢U´r'¸Ü î"w‘»¨8Fp€Ã?ò;ÊQvÙYE,b¹J\%®¥±4Vq¾%TPAEL„ŠHêFÝ Ø\Vp™ºŠv¾v¾õ¢ôDzSújé«w|nn>?ŠEÎ+Ä’ÚHM¥¦ÈF6²•iWî¸[°E‘ôú¿¼Å[¼ý7¯¿ÿÿÜu•(€ò½z¯z¯z/ß–oË·µ†YìaâVq«¸Uù=<ˆ2&ë±ëe§Ó0È0È0Èn7‡«Õ‰êD»vvíìÚ …‹ÂEkŠ5Åš‚º¨‹º‡l„xºj Ыé°ð¥~Ë‚:ºt’Úeí2}ú J.œõ|i‹}9wy¢Æ ÄTÄU¥ÅÒßG¯]Æö°WîNp‚“kŠkŠkŠÖ¢µh-òÌŸô0éaÒCó>ó>ó> Ä@ ”cðÌeÿž`„ ¦ìË–lël€žAºqJÎ!l š êÝFµÕÏ0 õP!øqx ÷«È«ËD&2Él2›Ì¶t´t´tÌZŸµ>k=>â#>bæ`Î?ò+– %H z‘^¤=ƒ<ƒ<ƒ Ù²/doŒ‚Q „òS×ÉÜQáÖÌÛ -IKÒRHSÝQÝI«“3üÌpÛ±6161|¾ ßEê-õ–zËÑ\~?‚Áoå·ò[± «°JNƒ!-H ÒBè$t:OâI<嫈.¡Kèùu9NŒÝØÝòR‘ŠTUŒ*F£¸àgqg•µ“8‰“ª(U”*Ф“t’N¯Ð+ô ñ&ÞÄ›n èþ„?Âgò™|¦*B¡Šà§óÓùéÂá‚pA9BùZ•mõOD.hŸkŸkŸsá\8nll,Õ“êIõ”ÅèT¤"•M` Ɔ<Ó®Ã:¬“ËÄ3wgîÎÜ-”NJ'9Îs°miÛÒ¶eòªä Éù(n4&®–êRUéÈBó¬kw´vváN4ÉœfAT~ü‘©ë7ó×wvJ_o\ÉUâv“B´¾”…vʪ÷»Î+Ï{rEHɪ¨Šªr7SÒŒ4#Íh:M§érª²ØÜMÑ”„"t: U^*/•WðƒàÁhZ‡Ö‘3û“Þ&½MzK3i&ÍTæð'xÂòÿ¢{õ2 ¡e):ºó=KñSÛµ±œ˜èÑ¡tí#…ö)Å©$‡øüÛ\[Æ/!K@œÜÜÜkl¬±±ÆÆM„&B£Œ‘5+þ‰Èyùðäüù/òsKÕÜ€IDAT_T3®f\͸ü¡ùCó‡~K'3Ðh4J•6*íòî+;®ì¸ÞôŠáŠáñ(z|Õ‚RJ_ܤ”Ò—#(¥ô®9ýKú—“  j¿¨Ã7ÔõÕõÕõÿYß:dJÈ”)Õ«V¯Z½jÉS%O•<¥¯­¯­¯­tø›†i˜ö<òCŽj¨óÙå³ËgW£vÚ5jçë¯w¾ÞÊ˜š¨‰šr ›ÌŒ?9 €€Èé1ïT¼SñN´*Z­*¦-¦-¦•ò¹Gä´P—ïN®n]6vWÍ8škÚKZ|!g`ÔN+ž¶,$õ`ÆBä‡/œa¨×ʺ5—ÓZäÎGqGñÿ±wžQdÙÛnUwÓÝdEI 0!bÀ¨`ÎcÎ9acs¨ã˜sœsÎYEÁ$‡¦SÕ}?Ürßö?3»3»3»:S?¾EuÑ}úÖ­Sçžóœª¨Šª¿å46UmªÚTuststsôÞç½Ï{_Ù9eç”S5¯j^Õ¼:·ëÜ®s»Nã:ë4®ý²öËÚ/k†× ¯®¨ ¨ ¨ ­W{ÃÞr¿†qÏg|iZKÛ‰'iGÌÆ 4à;Ž$ßñ¦ö¦Zr=I_T'å)°S®P•Ág9BÖ6‚ñ~À¬q)MJ“ÒL¯—Ø;b'¥s|=XÆ×ãx¦."¶Û‹íÑMÐDã¤qÒ8uØÛao‡½-O·<Ýò´g1ÏbžÅ>Ú~lù±åÚ [ ¶<œÿýúï×+—ªÇ«Ç‹cÄ|1Ÿ{ÊepÍ‘Ç#×Þ]ej•©C‹ Y7d]•OÁGƒ.߸|ãòº>êú¨+‹Ðp…¸B\!Ñ,šE³4A3ñAK™È_³ÿ?—ƒdý5‰IË¿²mOx“,&‹ÉbÚ”6¥M9wÎsç/ðø Éí’Û%·ÓÕÕ%ÎÄ™8ÓÍt3Ýü[!cŸÚ#ŒV§¬NYâR¹T.U¿^¿^¿žEÉer™\þêÆ­ŒÌ_ƒxÄ#žÍ<úÆúÆúƦ»¦»¦»Ê:Ê:Ê:šLÍ'ÍÅ…3ßJ/D y5ž—YX$±ÅóúWJÍ7ÙäVÑS¼³rRV˜°®Ù5=¶C %©DÞ“™ôM§yÈî_®`[Î~,Õ}ÑC0CHsÒœ4§„JcñcIS4ES¶&i]ܺ¸uq»’v%íJÚØØh®i®i®©—¨—¨—¨÷©÷©÷qý¸~\?êI=©'ë‡ÊÒeÙ6Wž+Ï•7o6o6oWˆ+ĈCâ$]¹ UÀÿO•ihÜbN7¹ ›Ä ¼T‚‘$’hò£C õ|å<À5t@ ¼°;åŒO|VÂfÙŠ2” %C±K°Dì'öû1Ç T ÂW‘Va9M3!E¦„Sž+Ï•sÄ1‡ô&½Iïzcë­7¶³ogßξåK•/U¾”é•é•éÕ¡3‡Î:³¡ð†«®&~Jì›Ø^¿ü¯®¬=VõXÕV…Z½jõªûØîIÝ“B»…¦‡¦—<\òpÉÛøMü&~GÍ5wÔ4O6O6O&Èò®¡kèV¶õ?ü*†b(F÷Ò½t¯TÒúoð†Î£óèéŠÛbzŸ®ÅèðÓÿË np“Â",†ÍªŒØìÊRUY:ÊÜÿÿcQÞPÞPÞдѴѴQû¨}Ô>¶¥lKÙ–²}hûÐö¡µ›µ›µ›b‚b‚b§ãtœŽËår¹\bE¬ˆCÇÐ1Lš¾¤/éKó1ó1ó1CCC}°>X,¹òû±ûÅâq‡” ÏÄ ˜­ddüÃqÏq0¼1­7}Û‹QŠK\o´‚1Ac7Õª¾rã@Ú¡,ŠîɆ“‘²öY¦>L~ ?…]B—Ð%fYcÖHGZ¤ ýÏÐ@” q ·p‹{Æ=㞉ޢ·èÍfïR·JÝ*u«£ÐQè(DGG[e[e[eߟxâý‰›¯m¾¶ùÚéøÓñ§ãÙ)É82€ QÜkî5J ZH¶p€ƒh+ü$ü´'zׯøèø‘ñ#{UéU¥W•ºo꾩ûf(?”Ê—O*ŸT>i-·–[Ë=)ò¤È“"ìÌáG$mæ³úŸíijrÕ©˜Š©ì!‡¯ÈWä+ŠUŪbUs¼9Þ/)B°›ß·Ø–¨ ª  Ö` Ö(***&+&+&;;;ooo°é)zŠž’{¦~u°5æÊÌÇ|Ì'OÈ"åþÒ@0#1ò‹#e¾6ØlÜýÐK±KsSrSr?ºWt¯éÞÄJe¦ª/Ö&ËTc?¯ZγZèÊçŠ‡Š“Mu„’úz7SÕ9-¶5»å;ŒÂ®6É$³„,ÚœîÁ` Æ`VúI:¤íI{Òž…QeY—õs´´´lÙ²9¤}¨}¨}hÓÕ¦«MWõõõëDëDëD¥µÒZiMŸÐ'ô‰T¼î7¸ÑGô}„ld#[\ .˜¢LQ¦¨‚è‚è‚è\ß\ß\ß<«<«<+ÃjÃjÃê|u¾:_­¯¤¯¤¯$ýû¦hŠÏé”÷VYÛJæ¨(U¸zÆÕïÃ:u^ýð©kw*ÎhٳɬÈÈÄj’^ß$¹4õ÷ð×Îq/Š¢(*M‘€eJ”)Q¦AõÕT÷IõIõIý¹þ«°ø:[`;˜Ø¢v÷íîÛÝrgÈ!wN–:Yêd©øåñËã—~}øõá×=¢{D÷ˆ¶mEÛÏîò+¼Â+HI ´Ç¢çI) Ñ ¹QÜ(Nj٭خخØÞÞÔÞÔÞtäÑ‘GGÅ·ŒoßòpÜá¸Ãq­·~Üú1ÓäaÇs¹Î\gÉ™¶üD¬Ý‰…Æ| c c căˆÜÍîfw)i„Ø{òmv`ªù8pÚÚÚ5JÔ(Q£D­•µVÖZi×É®“]'éÈ;¸ƒ;ò4&#ó§Àf³›¸‰›lÛiÓ:§õa'Â&„•ç‹•\\Ò­Ä¥k±Ëæ·îOK]¯0ò¥W{³µç„ú ·²Ópä<©Ÿ° §ññàWÿ!%”P¥YiVš4‡ÂCá¡(Ý©t§Òª¼®òºÊë j,¨± vLí˜Ú1a%ÃJ†• W†+Õa/Ã^†½ Ë Ë Ë {ö0ìaÝBu Õ-T³vÍÚ5k‡˜BL!¦2æ2æ2f¯ë^×½®;z;z;z[•°*aU‚Ç¿ã½çÆz¬ÇzâE¼ˆ)NŠ“âÄ…¸—¿`™?TàÁå„ë »LFÁ$!“TÓù8x’'p²s¶ê£X ˜Š6ðCQl&೪ K™p \—@·Ò­t+u¥®ÔU:’ þw°L/aòˆ3È 2ƒé®°DåååˆúŽõë;vœÒqJÇ)¥*—ª\ª²þ‘þ‘þÑÞн¡{C·zmõÚê•´8iqÒb,Æb,æÞro¹·âFq£¸‘ÆÓxÿ«ñ÷L=‹³8Ëvð[ø-üú”>¥O͕̕̕pwq)HAÊŸþ~,%5'`&ð‡øCü!aŒ0Fà \¸4pi·kÝ®u»V'¹Nrdr\ âZĵˆk±>}}úúôKn—Ü.¹Ñ(E£È ò‚¼`å‰b€ H}OÙôúkKð–EŸD<(2%n&7“›ù¤ï“¾OúŽ8nà¸m굩צ^'ÛN¶l#F<°1`cÀÆ5ÇÖ[sìPä¡ÈC‘ì”\—Çå‰>¢è#uZýcÝwÝ×A9NŽ“ã¼ïÃûˆÅÄbb1a°NX'}ÄWô}ÅòS¿­aËšU1{*k*k*k*³•ÙÊìüwùïòß1÷]ÒŽ¸‚+¸"_è_Ý7˜HI"+tÚé´ÓigÙ^e{•íÅMæ&s“ï¹?æþ˜üáùÃó‡“BB¤›•ì}ÇqG>²‘m|hXj¨“R<å‡4êZ¤°ÓË.µ«5·Ë õùùä­«Ö{EÞfáþ«ç‰:d{jFi6«ÏÛt²±µI²Uص«¡]«]§]§]©]©]©Z®Z®Z®z z zÀÍàfp3躃îúZ,Æb,‰‡ÄC¢“è$:‰GÅ£âQÝZÝZÝÚ¼y+òVäøæøæøæÇçÇçÇë7ê7ê7JÎÃ<Ì“ö°õgÖýƒ…?²‘lIŠ7 IH¢¯ékúúWðäñ)óP`"ê |îé‚jl$ €z8Kvd VÚ,V®àG³È"鎲(ŠòÀ’ù–½E™ë̦žÿŽ&½¥ÛÚ=Ѓ8â@§Óét:K w»ìvÙírç~ûuîU:ªtTi—x—x—øWý^õ{ÕoÏÖ=[÷lݶ#lG˜¾³¾³¾3º¢+º’ä9A}¨õ‘â¯ìtŒß2½ZvŠeVš†i˜&Dƒh`z½Þ‡¥2Æ/Œ_¿°oǾûv¬Ú«j¯ª½ÆÇŽd2™Wl]±uÅÖ6m>Úö¤=i«¸Š«4‡æÐ)Ïò?wMØÃûbˆqâÖqë¸uTKµT+Öë‹õqGpä›lKÄìÃÚ*]ÄE\TÖUÖUÖUVWVWV7w5w5w¦ Ó…éhŽæh.§Ê|ÕXŒsÒ‡ô!}òKä—È/á4Ôi¨ÓÐ÷Ü{î=GÒƒô Z¢%Zb/öb¯ì¾uœÂ)œ"ç9{ÎÞ\G(+Lw0‰÷XÞòEë³µ®:.3ÀéBžšöàÒ*dTÊ\xªg¼ÞöÀ”ò]‚œWØÙi§ƒ#»¸@ÎÀ½ãrÈ2²Œ,“Ú^Ã5\#EHR„¦ƒé`}”>Jelmlmlmèkèk蛳*gUΪÜ{¹÷rïåË+–W̰ааð‹EËsZh¡•RYR‚º”.¥K±‹°ˆEèå1&óg£ Cq óM…¥a(a^"|!d+šA_mROyWøÁ즧pEà[|@reóý­±tL™SË"”>ðj¢&jJ*ïlf6sÖ-d I:I'ét@'ÐÙt6­òQù¨|Ýlt³ÑÍïr¿Ëý.7 ) ) )÷yîóÜç±?Æþûã6Ý6Ý6Ý ò‚¼ÞùH>’ô =CÏдmð‡©¦°wË"ô*¨ ’ ‘ˆDò”<%OãÇ5Žk<KT@ª§zª'ûÉ~²¿ ¢ ¢ bVaî̺3ëά¾íû¶ïÛ>¸Vp­àZ?,ùaÉK‚}ƒ}ƒ}—[>nù¸ŒâÅ3Š“\’Kréz„‘òzÙ*Á?×zÿ9LɘYæGîGîGn$7’)ŽÇ‹ã¥F2’‘üX&Ú-Ђ© ©ß©ß©ß Ë…åÂr}¾@_ b2½ kÈ|E0ÅØÀ&]þºüu,­ RA¥‚J¥³Kg—ÎöÜè¹Ñs£Þ¨7êïTïTïTl‰– %h <Ã3<“ ù‘DwÐUGô*x›žŸPÐJ¬)UÅÌ· 7ùÚ|«¹V¥Ä&Åèv1IøPпÀGßß0Q?HŸ˜S<Ç;§D^í¼Úyµ³dÈ`p28œÌuÍuÍuŹâ\qîÿ‹Í½p$u¬]Ø…]’kÎÆ ²0M÷oQ;Kæ¯ ¹ŽìaÛ§KõìÛh¥Ó»¿§ÆéW{4½S|@·f¹šÕVíU¥ãƒq Ëe»ý&þÚª2}ãÈr…\)—^.½\zXbXbX¢Û^·½n{¥#YkëË\ÀXÄ"–«ÅÕâjYâUÙ«²Wå‰e'–XöÒÊK+/­Œ[·"nÅÞ¨½Q{£:¼éð¦ÃÕnÕn•TÌÄ U9GΑsüòbø“5[~Ëg¤  œçƹ±Ú3Ú3Ú3N 81àĹá熟W#®F\­Y[³¶fÕÕÕÕÕÕYžŒëÀuà:°Ä¡_8ÿ?gF@êA¨Ü®Ü®Üü)øSð§:‹ê,ª³Èa‘Ã"‡EÒ‘‡q‡¿±[ ÕPMúª’£äh¹ýåö—Û~ ü@øbßû¾Ø÷Ò‘pás¡›ÌW+ gÀ ãÈ82Žíðœé9ÓsfØÍ°›a7k5©Õ¤V—.5\>—t¯Ã:¬û (™ÿp…¿IY\Ù‘í—ñÓäåÙÏ)¥ôJ}}CÃÄ”Rº^{ùäå£v±6ílÚXŸ±Ùe³[RgÿçÁ!Á$˜KkÂ]Ð]¤"Ti:G‚Ì·Ä‹Ý9õß™{¤" €’.¤MÔÏ•¥‹m}«"ªù*oä0 P ßXãv™?¦ÈË–¡à'Gq—þú{§Ev<»=롇žÌ"³È,ÖB¼%Þo)s”9ÊœvëÚ­k·®•m+ÛV¶%J$”HHÛ˜¶1m㮥»–îZº~èú¡ë‡~(þ¡øéÈäz€ ÄL1SÌü¹ ÍÿÀz,¢Ãb䬘Õ_ôýÉ|2ŸÌ×…éÂta˱ËqC{C{C½ zAô‚²Ên(»aZæ´Ìi™ûìöÙí³[]fu™Õer¶ålËÙF–’¥d)½EoÑ[F0‚SÚåjÓTÉB²$%Öºh†aØWÑNë÷ÂÖˆ·›ÛÍíVf(3”âºúè꣫ % % %™ÄI"I$Iì'öû±ÆIÒ{þï(Þü'°²'f™0„!Œ)ºpVœg•³6gmÎÚÄ ·Ü~pûAÿ»ýïö¿[aV…YfÍ.2»Èì";õ;õ;õëϬ?³þL^X^X^YCÖ58ó8OE*Rñ‹n² ‹¬n¶:Á½áÞpoÄ®bW±«$$ Ih‚&h‚øˆo­pÓbqœÿÿÿA]E]E]Eˆâ„8ÖËP:òüz™¯I'8©œú â ¨5¢æq»Çí·SÝUÝUÝuxíðÚáµ_Œ_Œ_Ì£ÌG™2ÅÃâañ0»¾ØãñŸÒAæ×PAŽì"£PžÔ/K´òøÑ¾•{I×T«}8ƒ¡p\çÇŽo·>Ñ=OûpÄœ/ܧ?·P ? ca$ÈÈü à,Éž ¯iZ   ‹Þ(N‡¨§+.óµ-”~¼”C¢ |eÃÉ|Ar#•ô1mïR(…RÒ_ž*Ãö°È·-laK|‰/ñe™ÙÌe·UÚ*m•]§wÞuú’¡K†.Úbk‹­-¶êªéªéªí\¸sáÎ…k¬=°ö¾ýûöïÛop1¸\ÈUr•\E[´E[:‚Ž #XôZú¿ßÖäÎfçp瘔¤ôX²ƒì ;®¼rðÊÁk®¸fkþÖü­ù,úØÓ«§WO¯˜Ð˜Ð˜Ðбc+ÆÒ^´íE)¥”J¢iÌe·HÑù"êGq ° H8 'ád<OÆKýíyó_ï™?ÇŸãÏq¡\(*ŒÆ ã   ¤#ã1Ë—õ7sµÙfMãG`Fb ±†Ø„؄؄X]Q]Q]Q·T·T·Ô’}Jö)Ù‡éj£;º£; 7È.û/…“XG\Eñ/‘]¥Yé§E=0ž(c”> ñ¯†fœ3ÿ ¼§Í”a ;n x„`‚$A,#ó·ä‹ˆ{¦}ÁÃc5%Ö¢Þè¡î¯8Ém¶î®\¡X 4£$Nɶ{X¼ÀJƒƒƒiM£iæAæAæA˜Š©˜úE« “qlL“Æ,—iѰÛg=C=C=C—ä.É]’“““„vB;¡Ýiñ´xZÜ¢Û¢Û¢»“r'åN 6a6q˸eÜ2±£ØQìH©#u”\4æø2g½[–»\EPDêØÇ²·¿þH›e|C4DCA#h÷Ž{ǽËöÈöÈö`mønκ9ëæ¬ÞÖ½­{[W.W¹\åróÌ?2ÿÈî ÝA»ƒ6vÚØic'Ý Ý Ý r—Ü%wi  Rz’E±ÇÅqqÜ]î.wW\'®× g„3Âéý|ã²zÚpm¸6œéH˜\M®&WIùŸ·Ö’ùš±Œ¾/ÄB,doòŠäÉ+òdæ“™Of–YvfÙ™ƒ‡!?6?6?ö]Ëw-ßµÄ ¼À ÔAÔ‘¥þKx£0ìéN8`!â"j.רã2¬Äb˜P?o¼ñ@ÜÑ ™[0-PCì)®§£pøQ6žÌß™/÷›ºú±lñ‘v¢u蕞×pU4:e7^…@z¡,<¹1Éß‹Lqr’œ$'9{Ξ³§uhZGL“Ä$éHVBÄÜbG8‘Ïä3ùLa¯°W”g¼í¼í¼íº%uKê–TWý]õw©g©g©g=7<7<7lrÙä²ÉåXì±Øc±&O“§É“< ÈZŠ–¢¥DÑCôÔšÙmûç%˜,º\%Pâ‹ý–“_?,"ÎÞó)œÂ)é³›a†™l![È–óÝÎw;ßíᆇn´aІA–oX¾aù>{ûìí³7°]`»Àvk.¯¹¼æòÝJw+Ý­$™Ùó$=IOJ{Fd_‹¯Å×2kÍZ³VØ'ìö¡2*£ò©î‚å:Ë~fßò}ÜÇ}U„ª¾ª>YMÖ5¬ {üÂù“ù±¼–CŠP6ÿ¤Y§Y§Y?[ólͳ5~ù~ù~ù%^•xUâ•!À`øäóÉç“á¡ Ê Ì/´]“ùci†Pøà,îà¥ýk«*÷U9VÂâHø´±YÛó?^Ø—ÿö!öã š¨?}!ç²ËÈ|á¸gdêÜô®aCi#ŒAÇU¶ž«¨ÇÅ8ú¢Ü1CvÜÿöXÞ oã6n3Õ¦CBV“ÕäsÆðwøßWâJ\iÚv* …ŠNMš:5my«å­–·Z÷iݧu÷ãîÇݧ/O_ž¾|ÛÔmS·MÝòjË«-¯2GdŽÈOx“kÌ5æ‹åÄrb9éü?‹åKÛL—†e´ÿ€ðƒ“«“«“+ë³hŽ7Ç›ã³C²C²C¤N{,þëÇò¦ÅÜ P°Ý¼šWóê´niÝÒºý€ð®v¾ÚùjçžzvêÙ)ôNèÐ;«V¬Þ4|ÓðMÃw(v(v(ôåôåôå¸ÕÜjnµ¸[Ü-î¦-h Ú‚î§ûé~tDGt$oÈò9É\á?¦ÃÄFýà? ABˆñ ð…/|¥V_l•€Õ°ãéHG:2 ä!y¬a YB–%´<-OË+w)ß)ßñãùiü´ÜÀ\E®‚è.ÉicœÌ·‹£³ñ3³1û]¯w½ÞõÒæjsµ¹ž=;zvôwðwðw0‚ A9erÊä”aéa’4ªì&þðà@H7₃tuC±š/*Ü-¾Ý±±MKÕzsÉú÷oÒüóŸ¼ÿ1%ÓHÖ ì¢½èÔ“'#ó…Ž{õvžG ÇÒ[3œ{\Í`èt”æèû¼OdåeþRdN©åVlÙn¿‰¿¶Ž{'tB'¶©ê©ê©êʇò¡|íKµ/Õ¾¤y¤y¤yDj¤é@:–/ÌÌÌݬجج¸u?ê~Ôõ*׫\¯2?u~êüÔòNåÊ;}1J_ä…”“Êø-r„L¾žÃçð9õÖÔ[SoMÃZ k5¬U}põÁÕKGŽÅØÿSêô]Æ –6añrKYâE#ŠFLÞ7yßä}×]¯»^w½m¼m¼m\üjñ«Å¯úô ègyJû0û0û°:‰uë$V«‰ÕDÅEÅEÅEéϬ¤ïçïÁ“&`&@td:™N¦s¾œ/çË är¹d.™KæÛóíùöü^~/¿—Ïæ³ùl®×놭؊­†©k:6rlT¥G°{°{Í’5vר]1¦‚w.-º%Q%±û°OžÀ¾y,éÛ¢-Ú2 o6Ò*”«P®B¹ˆ#~Œø±j骥«–VWVWVW–Žß‰Øù c[æ‚æ¶“mpLõîµ·¶¥—u#ÊÒþW‡w^Þ{dû†%ÐP†œ'-q8ù[‘–BZv^žN‹Ê¨Ž’t1Rp *„à½Í«™Ê8¸G»âGlÆ^ØÁ)ÈA¾lÄ_…ÅiؤÏòªYÖ5ËÀö†7¼¥ÜbÆ·ݱhƒBjÖ¤5בÉD;tC7âM¼‰7½B¯PÖôâJÉ~%û•ì×CÑCÑCQ·gÝžu{jêhêhê<ˆzõ jó–Í[6o9›y6ól¦9ÜaÎ ·È-r‹&К@}¨õùÂYÿ-KØ¥Q¥‘ˆD$ªýÔ~j?S¢)Ñ”(Рť¬zS+ÿÖG³ ]HÒ…¬õW™«ÌU~êý©÷§¦ÄL‰™s;âvÄíˆ>¡}Bû„† 6Ì¿’жèmC¶ Ùî°½Èö"^ú4}šê’Õz«õFS¸)œ¤s±\,çÀ5æÓMtG"IÒÕPUÐíÑÕQÕ‰±"VB3¡™ÐŒpŠÿÿƒ-~Û±ýÿtbÞ€ Ø@z’ž¤§Ò 4( VqVqVq|o¾7ß[Ñ_Ñ_Ñ_¹P¹P¹ëÍõæz;Ìt˜é0ӯ߯߯ßõ•ë+×W…¶ÚZh«mcÛÆ¶m·Øn±Ýb{ÝÎÅÎÅÑ×ÞÙÞÙ{EÃÍ 7c‚ª™ªW„L%S¿iQ¯E½÷Oß~?˜\&OÈ9ÌúÍcY´Êñññ‚½`/Ø?‰|ù$ÒêºÕu«ëvz;½ÞŸ÷çýù‡îݺ ÷„{Â=©Ôõ â }ÿè‹Êð¦S°û°¾ø®R‹’£>"YaG–b¹Ð€^;TíòЧsq®(ŽŽˆ„ Q¶¼Œ  @2 >gO.b¦à/$Ð(>‰äoPQGo9fj{ªÂw°[üŽò´^¡8Üq åÆÑÿ l`#Mô÷¡‚ŠïÎx¡Üî ²È ²‚{Fj“Ú€!=ò÷E_À¯Òž|G¾£¯iM…EÂ"á®"¤p‰áˆÎV·C·ÃAmÔþh‡÷vlØúTëM­79ouÞã¼'U“ªIÕ¬Z´>h[ü¶ømñ¹×s¯ç^g1r.†‹ábÄAâ qnànü¦æA?§:ª£:kË¢¹¨¹¨¹¨­­m\k\k\ûá퇷Þb=Öc=r‘‹Ü¿È¨³LÊF6²ÅÛâmñ6¹L.“ËÌ¡?²õÈÖ#[=|ôðÑÃÞÍz7ëÝ,|døˆðÑâ§DO)QÖ¹¬slƒ­§¶žÊ^š68mpÁЂ*UL1ÆÕÆÏéOEq‡%æîáVb%V~ñN‚Œ`M &Ph;Ûv¶ílû`û`û`«EV‹¬Ù<²ydóÈú•õ+ëWV÷¬îYÝS™T&•ɹ±scçÆŽ¯_;¾¶q±q±q±½a{Ãö†ãyÇóŽçµAÚ mµ³µ³µ³µ¿µ¿µ¿ú´ú´ú´ê½ê½ê½$¸+±’9ý\ Ȳo™kŽà^˜Ï‡‡+†WWðíIÉ3¿SWó<ó<Œ)HGº<ýE°tµgb&fâ.î⮾’¾’¾Ò›'6Ol'NœìÒÁ¥ƒK‡CK -14qVâ¬ÄYRyý=Üýo½ û«€µ?»KO¢½Øƒîò\ä>Öql™q^ŸœÓà., ´Ó% Ÿâ›>™Ú·!€âÞ OvÚed ¼Dôìóô0mœï`*ÜR? öd=@»ˆñM_uä!F:Žz£B‘ÙqÿUXlæ ®ã: ÐâTqjnç¬Yu|vRvDºž®A×Óõßð'õ„ü¬ïØ ¶‚õ[?[?±ÕQ]ëem_µ}Õ$¼±ucëòåÅ@1?R—ªK=RùHå#•×{­÷Zïõ´ëÓ®O»Jcnåz^£Åh1ú‹ÛíïuÙQˆB‹±Y§Z§Z§*f+f+f'Nœ<øµûk÷ן•æïàÎ_²jƒ­ð°|( ¥¡è†nèÆÙr¶œí«²¯Ê¾*;qÌÄ1ÇÜzxëÍ­7=«öìÞ³{ã§Mú5ébÕ±LÇ2‹¤O-.ÌŽ ÇM5òöäí9ê¶iò¦ÉY+Þœ{sÎ%½†{ mˆfŸfŸc)ÇRŽ¥´Í´Í´Í´iÚ4mš6_›¯Í×(4 º‰uë&Ö‰Ö‰Ö‰V~V~V~ÚkÚkÚkš M&H½]½]½]Õ\Õ\Õœ„’Pj®d®d®dîdîdîdždždždªaªaªazjzjzjÖ™uf9ÙœlNÎÍËÍËÍ3©L*“ª ZAµ‚jú(}”>*kHÖ¬!Y'²NdÐÖÖÎ,”Y4³¨kN2'µõ˜rrÊIë'öZ{-€×x­˜§ðPxH«níÐeþz33Ó’:„C8”Ý$»Iv“¤#IG’Ž”~\úqéÇû=ö{ì/8Zp´à蛨7Qo¢$ª6hƒ6Rýƒ,ùïAAAI7Ï"”AHéV^»œÆzüäšeÛÀV<½7óYjÆÌ¬vù•Œ0C„Ãè ÜPE6 Œ  Àsä|n¿bž-V Oòö›ê ¶Ú0«Bü)@D/;Ô׬¶JÆ#‘ô;ºöCtAcÙ|¿ KŒYƒ—xIÚ‘v¤]ÕF5ÛÕlWrU`©ÀR¦!b::²rdåİ{¥ï•ΠóÓùaB´̿þHDÒ–´߈œÈM½£ÍŽ6Eí‹Y³6TJ ¥5ë­<­<ù€”B)…nxïk¿¯ý†¶¹ls¹\ôÒäK“Ù¸Š\E®¢¸IÜ$n¢4J‘õÿ|1š%Õ0 L0ir49šþ‰¿d¸c¸c¸Clˆ ±¡[éVºõ[±ù¿‰¥“± Û°M4ŠFÑH¶‘md›ØDl"6Ùo»ßv¿mü½<ì÷x j *Âv¸Ûp7—¢E=Æn˜ÊÚPæqÑîE» ·S¤PÌÓLÖLVDñíùöŠñŠñŠñŠÇŠÇŠÇŠ@E "J(Ñóz^Ϭ)XS°F_M_M_-ÿRþ¥üKŸ}zôéQA±‚bÅr/ä^ȽPð}Á÷ßç¿Ì™ÿR÷D÷D÷¤àfÁÍ‚›ºººY‘Y‘Y‘Y§²NeÊ»žw=ïz®_®_®_ÊŠ”)+2‚3‚3‚OÁSð¤èºA̳ÅlÔDMÔ´4†s¬ó3çgIGžÇ?WìV(Š‚ú³ú³ŸBR´)Z6fhWE£0c0FžÌþRXª  "%H R"õ|êùÔóV)V)V)~=ýzúõô=ä{È÷þŒþŒþLj@j@j€Ô¤éçÕ2¿;XCMZ ™¸‹«xåYxªíE¢Íe=¢³h×swG¾ž›wG'r1ä1^Чh4ÂaÙ|22sܳ?ç©›æŠùty1M47sÿIsY‘€%Ô“fØ®´«ŒWôåöq:s¼ À.Ÿ[£Ëü„$sùᴇX Ï-uµÔÕ‘OfV›Y-‡UÆ'åFæFòÓ_”|Q’»¢õÓúa¥ØFlóÍ8‘hˆ†P ~‚_Á›âÍ‹7/ó÷ùûŠ–\#®‘: éHßþfÏê=«c<ÇE‹Î*šó&ç ¾Ç÷øžt%]IWq€8@€@"PRù÷"ë?‡e·G"‘hh¡éªéªéJŸÓçôy¦@S ¡³él:›5¢™4“fþ-F¦E¹}A_Ð|<Ïdz@ó;ß÷µß×N;œÖ$­‰é'£ƒÑ¡`®â*]$†‰a\ ¼ÄËßõx×#½ñÓ6OÛèCÍ/Í/³eoÍÞšÝ>»}vû¬Y²d„g„g„ç…ç…ç…Ü n7ýýý¶ç›ç›çk¸a¸a¸QRR’³3ggÎ΂ׯ ^ÿ›RŒ¬’â×(†b(FPwRwRwò<îyÜó¸ßQ¿£~GíŒíŒí²Â²Â²ÂpWqUJÓù½¬ÇD43!‹vPð±¼¶æíòB±æ¸cn'¬G:‰¬{äôriÚC”EqØp„ÛÎU —Äo­O³ŒÌŸ†IHÿœÝkj*»æU0¾0/ ¤-‰‚ zÐKNm5Ï­¬Ugßó—Í¥AQîp–Í÷/ÐH…§(@IÔC=Ò(P( --«LV™ÄŸ®Å^‹åz«‹¨‹ ƒž¤'éSú”>ýú?iB¶’­tØRlé×Þ½­{[õ»mvÛŒK׌×Ô?Y9Y9Å=»—x/1‹æ¼Éy£r±jnÕܸаа.  èI¨‘aÙ%ô?‡•”ÍÀ ÌPµRµRµR-V-V-61ý.ý.ý.ößéizšž–ä ÿª‹=ôÐK2yñˆG¼P]¨.T/õºT~©üè5Cã‡Æ‡­žY=Óæ½ª¡ª¡Ù Äpo“¬W­º\ñ°ûawô IgÃ÷úd}²ðPx(<”ä›±›áýXt`}^¥íé˜Žé¬Ø”|O¾'ß³œu–@Å\+,Çr,§{èº;°;XGX°îS¬È˜=…°OÊZ)Úœ¶ -¤,gR’”„Žã¸f°f¨f(Þb:¦£Z¢%ë6€Ldâïñ8÷÷„]ÏñÏqGp„5lz~ôùÑçGÕ+Ô+Ô+ÜÛº·uoë·Ío›ß¶û)÷SªªK]#–a–ÉE«¿ÃäÛÉ$4¢»©]úØ.µšZ­z™ÛEv ’¸Ml•¦HO5Œ~,¼Ñf­A&Þ O¬HwÓŽ X)ÛWFæ3a8ÓêÐú«’UåÎ{÷Ù߬05N{Ø}8¥SíºEÞ6tQët‡ÚRêÖÒåç‡M˜,ïW)Žâ(ŽÕ  ¤©Ejµ­ßYßY¿¤SìÙØ³KîÇšcÍ#SfT™Q…·±ûf9™ªJU½ô§”Òx¥”>®E)¥›®Ÿ0ž0ºn+VHZ\&9$‡äH/cQö?ƒk¸†kìü¶:[­®Vt­èZÑÕ+W¯\½²¦¥¦¥¦¥tä ¬ÀŠ¿ì8´Ôá©Ú¨ÍÍãæqó¤=&˜`j=ºõè֣誎ªÔ¸ÿéþ§mc¶OÝ>õûË_,±øÔN_µ¡Þ†zã­X/°ööMöMþ…ÿå _ø’N¤éÄ}à>pøCü!þßïÆwã ñ…øBÜ%îw‰kÂ5áš#1#YGÖ‘uDETD%}L].¨ Ÿ…ôªW ¯^5"†D ‰âÆÿŒÿ现6° ì`;yû[`¹ÂsGq…P…¬[ ¶<%xJð”ˆ-"ZT̪˜U1‹µ$c=%Ð}ÐçÎ#ó+=$ç` 5¥ç{Íu¾&Œ¿à6LIS®Oéz©ö²ß)9E¬b0YM±Çð#Év“‘±D¤" bl'V“³# ÆFPpfâ*4]slʪf+•Ã9?rÀcì†aóMm™ÿ ë+™‡É˜Lch ¹xõdÓ“MßL~üðñÜÓ9Ž9ޝ>¾vxí X«î¨î(ú..¢ ª¢ª¤£òÕCv’óäzüÿLŒP›j㫯p0ðZàµÒEü’ü’öZᄎûêýÊ÷Ý_4ÀüèùÑZ•V¥U! H`ùåÒ‹îÆý{¨¡†šXkbÍ„5‹E‹(¹7roäÞ2¦2¦2R=QQü¦FNß –ñikXÚÌ%sÉ\ Á a»«¾ªúªê«­ý·ößÚ?îD܉¸g¶žÙzfk¿ýnö»©UWUWeG¹[4¹hrT¹F-µÊ vvV¤+(ÝÄL>'59  }3ö±ˆ¸»Þp½áz#|UøªðUªW¨^ásò£Ð7õ¹dþ(,×-Ä;w<^»ríʵ+‡{…{…{yóç=Nºìì‰=±—ë"~Óõ– ÂC¶½7oFj‹"4ájèGyáæ°ÈžÍ›TúPU¹‰$D@ …¼Ž!#ó%à#Ò‰a°Gºš¶É¾ª?kp3HYáGšMÚœTnãs­Èeâ)½Î¶ÐÈæû¤à=Þ3W’kÇ©9µ¹Š)Â!6Ú mñ ¯ðê­g(è7æD:¢0 ³Mk{ëµÖk5^6µmj;Î)T¨P¡„I~I~“ëL¹5åÖ;ëw›Þm »rìʱ+¹ÍÜfn3  4‹°‹¤|÷ÿ8~püàø:âuÄën7·›Ûíêêêhíhíh-¸ÅXŒý"ýF†Âí#­ÉK´ÂD.{Ï猛ҹ¿] MhÞŒüT^g÷áé'ÿœ(€¢±dãÉÈüÒ%uoÌÍ#éä* ÈG^æpÝ“‚e—@ÆŠ h;:Ÿ¨¸-xâTM»Zó¹ŒÏ yJ’ù?°UT@±®XW¬K‘GäÑõi×§]Ÿ6çÅœs^äÎ;wú»ßÕø®F×n]»uí&‰Ç¸þ\®?&b"&J7Î/úÎnŸm[Ú¶´mÜ=îwOÜ*n·ÒV´mÅNL£h‚œàDŽ’£äÛȱp¤ÌÏÍÏÍÏY^¾ÂKá¥ð"mHÒæçGÊüMaÄÏð Ϥ®ÀÃ1Ã_L|1ñÅÄÔw©ïRßY·o5>`CÀ†€ šbšbšb˜ŒÉ˜,å»[jÆÿ!‚rã¸§Ä ¡ðƒ6ôY¹NEfÚ^h=‡¡°½˜ò -9Y¬MR¬Á”A*²a‡¡ŒÌÏáðYÈ% ˜þ9û3·áª©€d(© iÈÁU¼q6ÛÔÕT–^'Ë2Éüv£bNO,bË´Ò¹¡ÜPnè‰â'ŠŸ(¾‹±ÂkáµðºWá^…{n³»Íî6»Å5âq S#‘Zœü{Ñw¶¦!@€ |ª|ª|ª6©Mj“y¼y¼y|AjAjAªtÎ븎ëßÜõÊ“,ÃRb¶qÛ¸mb¬+Æj·i·i· ¯2¼Êð*“·OÞ>y{ÑáE‡~eÚ•iW¦ Ë–9,s_Ó}M÷5EÒF “¤°XQ¬(V”V2 ö¯kkk±[±ÕÜÚÜÚÜú›Ÿlí‹ ÕTšJS…±ÂXa,™Ef‘YÜ&n·I:R.N•±Œš³Bvg8ÙV¢•h¥Ä•‰+WfuËê–ÕÍ&Õ&Õ&µ´GiÒÊÃÊÃÊè†j¨†–h‰–rô Qeh1Z†â2’  ¼æç8KTÍ87„p«¹’§‡ÞÚ÷ÒÛq “¹FÜIÂá>ž"E†22?‡“އá<±]ú®Bñ2Ä"bÙOv‘>°C&tÎ)ÚXÍVÙd2ÿæ¾ÛÃöLÉ[ÌsÄÒ–´%m÷…ï ß¾þÆúëo(÷)÷)÷ .3¸Ìà2 ß5|×ð¸V\+®å|9_ÎíÑíwÔÊâHí'í'í'î=÷ž{ÏšÞ›ûšûšûJçLG:Ò¿{ZÞòEˆÉ82ŽŒÃÌÁ1L ÃÛ¶ l»Ä‰ÿÿŽ©S;¦òeù²|Ùæææè9Ñs¢ç$îNܸ›;ÇãΡ?ú£?ýH?ÒRY0û/L†r·ˆ[DÏÓóô¼ÐWè+ôýæGfò'²‡ØCìancncnCf’™d¦òòòt$û“‘± F|ïñ=&`&www$ÔM¨›P7ß&ß&߯qãÇþsýçúÏ%åH9RµP µPõQÿo¤òn9_…¢¼¹ŽÜRN4Ò%´“ÓûÖ©åû”X^ø(n™Ì²³²f_>«úÞ-Ë‘O   tÐÿ£Ë‡ŒŒŒœ4¡ìÀK|b»tžæ±œ„ªb(·†lÇ€¾G¦SSí9µÜtXæ·ÁâL,Wx/öb/àpݸn\·ÕuV×Y]gûÖí[·oÕ–Ò–Ò–õrÔËQ/Cφž =+®W‰«¸~\?®Üà·ßµ²•ÔvÑvÑv!»È.²«`_Á¾‚}¬QÒêþc[>ý0ë±+´<Ê£ Ëá{Í)Õ=Ùd2¿Vnk;ØÑ'ô }"FˆbKÇÒ±1ÏbžÅ<;`<`<`t\ç¸ÎqÝ8Ÿq>ã|ÊèÊèÊèÄÚbm±6éEz‘Ï:¾¿%j¥†jV¢jÓ˦—M/âGüˆ_~~~~~>²‘l)–Ïzj~0—Yo6`¹In’›¬rÀù„ó çÓJL+1­Äq„8Bt¾ê|Õùê©Â§ Ÿ*sJÞà ¤¨3ÀðÌÁn 7…›ßüh,@ ¤¡ô–¾¥oY·Wb&fbæ«óÕùÏMìe9H™Ÿcé¾wGwt'vÄŽØ¥M›>ö©óSç§Îô}DyEyEyE¹7soæÞLŠ»¯Çz¬—®¸o×}¯€’pÃxtE(Žc>Z‘ $·yÂ5'ƒ¸d+y+fÓ®4Ó|M8'Bè/ö ë4Ô ªš~¢÷wn™³qk޳ŵ Og_±Ü„UÖÛµZëy®¼så“(²(KDNÏ÷–ëLdd~ÏÓÇzwØfN}C);?ÖôThÌOã‚És÷ðÔa¼z·UmÙd2¿vó‚¬ÐÑ‘é‹Ó$šD“ [0lÁ°S÷OÝ?uߣ‘G#FÓºNë:­«ÞG3è :ƒ»ËÝåîJ¢‡Ö°†õ/üæì&"‰ÌÕÚií´v„BH~p~p~ðçÑŽðÕ9î–J&*¨ â¹@.ÝРݨµ¢V!ÛB¶…l[Ú`iƒ¥ š6kÚ¬i³Üê¹Õs«/Ù»dï’½cK-=¶ô›²oʾ)Ë á†pC$ÉËÑÑÒùm9ïñ亮óŒÆ?cZ+‚»à.¸óã5W" ¬¦ÂLÍÔL¹\ ®…rrrt¤<à!_¸2¿:›½À ¼ „J0ã1þC‹->´x[ð¶àmw•»Ê]-©*©*©rjïÔÞ©½Ô¤é)žâéÛlîƒ9É ðÿð ®aúpÍÈ=À¯âΓíä(©Žõ˜‰¸Œ†‰=´ =‰ Šûé2q õ£FŸ,žÎËÛ½ûTºÒt®—)tð!ó¬±ÍoßtZY´cf‘Å>y½Ë›¢¼oßY?ÌêH¡îÊt›aÎ*®˜"HÑ «°»I5Òƒ •ìÌä5edd,øq_†xʶóû×CôÌvB/.id-€D$;ø«*d“Éü›0GYô6½Mo“<’Gòt?ê~Ôý8uØÔaS‡]lx±áņ¾|7ønø!ꇨ¢ŠÔ)R§H±’XI¬ÄŠ%÷ëçz=ÔC=ÄAT$)’IªwªwªwÆWÆWÆWb †Ïý;YÜýë¹}ZÆ×™JÌyîïíàjÓÚªo„]•¾µvœ^âìÚÅçÛL=¿lñ½–½wxON|ù½Ðwbu„Í­âQdœ}¦RÑY_L?'ÿ;ª5…ãÄfÆáº¹ú ææ&ÁÓdz¥gC„  á°_jÇVÉXÈFFFþq“ž ¸Ï6óZ“McõÍÌó„Åä‚z˜" @}xÙi¬Þ*ŽldÃÉü›°ˆ/<LÓÁd*™J¦æwÎïœßy¦ÛL·™n¶¶¶ÖVX[aíÔSOL=1¢ëˆ®#ºfwÏîžÝ˜ˆ‰˜¨’*©Rr4Ù9»£;ºãNá”uoëÞÖ½•M•M•MuututuLMLMLM¤Ûä9œÃ¹ÿ±ØŸ=H æ¤9iδnÄ1D ñkâ×įÉPq¨8T ©R5¤ªù¬ù¬ùì.ß]¾»|—w]Þuy׬¦YM³šr7¸Ü ñ®xW¼KûÓþ´ÿ-™~{aœ…î Fb$FJ+ó0ó¾ù±—‹\ä²²išA3h†é‚é‚éQQ)ë+ë+ëKGA‘/V™_Å2m†u„(…R(Å®¾¤'IO’žhfhfhf888øO÷Ÿî?ýþÊû+ï¯4«Ì*³ #0#° °à‹ÙàϘaÜà ;Üà Ézt$Q …i/LÅ:Œþ„k(„VX!B…L§Àn%z r¾çõÁ­¤!ÄX:ÙýpøÉÊ‚wtàrホ#ô¶›UHGåÞà? LKØ-h*w“€wó2yý¤BÃÔ³¬)©1º)¡ª`êCDˆîaZ¼.^ßôfëO[2™M»M»9'ΉsQé1É2Ì!#ó·DrÜélœ£w±<Šå÷729 3u1÷€†¬³jà!JØSmUÎA „Êf“ùaÓ®J(Y®W‡«“|>ù|òù Á‚'ϯ<¿òüÊAë‚Ö­›Üxrãɧì²wÊÞì™Ù3³g’EdYD‡Ñat˜”×ÞЈݮ¬Î[·:¯ P(²êgÕϪoŒ6F£¥¤‘;¸ó91ìÀÏnÒÜqî8w\l(6²=}û4ö`?À~€}‘=EöÙóæÕ›Wo^ý4à§? 8x,ð˜Ô\]º±u»ˆ]$'›=̰–L¿v;ÌD&2¥©¡°¢°¢0s/L¹¦\Sî7ŸuÊ¢w Ñ YÔSè t:xOâ¥Ô G8J=åâT™…¥ûÎ\ðƒ8ˆƒ¦S€)à‰Í›'6åJ”+Q®„S[§¶Nmúôèÿ(÷Qî£\Z‹Ö¢µŒ`ãnáÖð~xp  ‚’Ú0c ׌»B\IY‹ræ"B$u£ Àl ì00­§$ûʺ¸Ü)Ï:Á—üc\²+–°r^(ú&¸Âóˆ{Š­(+’f€¹£p EI-€4!3ÁƒNLëÅ”¬¹SM¯o§%½þTãB佘7!qÝŸîMÝôâãÇ%ùë¼"v;gº)ÕJW¥“hÓÄ9ï>¶ªQ3¢f¿;ž xâ3­äÈ’#çåÍË›——e“e“eÃRÄ‘âHq¤Ôƒ…`¾Î¤#™?™DÜéÜ„e@óž:›îé{˜`ÅâM>ô M´««ªÀ?‡5¬0fÿPùøû]Éü±0ç’^¼-Þosœçñ®Â» ï*LN˜œ09a®a®a®¡îµº×ê^ÓQÕÑÉÖ“­'[ …‰ÂDÉB‚HGÒ‘t¤¶Ô–Új]µ®ZW¥‹ÒE颢¢BÏÑsô€ÔE]Ôý|^Ë›ÍtLÇt)RÞPl(6´É°É°ÉÜvpÛÁm›Ø4±ibc5Ìj˜Õ°Ë£.ºÉ'ù’qñŸ^¡îµî([´@m >‚P”$sÑŽP\#“‰ ¹…AÂ\‘§…óâ?nΊ Å-Ål÷™Îßi{»„;ÕŽ©çW>w»Tòõ¨øÎ{=-TÛ¾¥6Wõ£6Jyàvã0`¾&„|_È'2N\mª)ë2*æ {Úò}LöÉ«U²½ø4.ùõð»+ž,Iž96Oa\k,aªfîóO°Hxú›åÈ@*Ûyh,ÔP?m}­òµÊs 4¸QÅFsÍuvvžo;ßv¾mBõ„ê Õ‰‘‰‘¡Gè´@ ´=™¿'Ÿ#îݰ ‡áOð9o õaym ÕLÓRœ» Ð[b¬M”b ¿+QF¸Ã6ò#óÀ¢ïyÈCž˜'æ‰yÜhn47:±tbéÄÒ3‹Í,6³Ø”‡SNy™™™Þ6½mzÛ˜21ebÊ0Íi‘:„†ÐÆaÖ\Ò\Ò\¢óé|:¿àZÁµ‚kLÙ†D“hMSh ýoµö°¼µ0v313UPU0¾Ü¤r“ÊMŠ~ý(úQ¥¨JQ•¢²Êg•Ï*¿^µ^µ^µ)~Sü¦xCUCUCU®׃ë!¦‰ibš«c*ì–’Žÿ9, ü=AOH%Å,Jý­Ãä YûI˜„Iæ4sš9´$-IKE¾"_‘™˜‰™¤)FŠÉÓ›ÌïžÇ˜ûÞmІ(‰’(³g Îü¬ü³òÏÊ´ hЮø„âŠOлëÝõîïZ¿ký®5ë«€+¸‚+çau)"ª£¼É8€ ÜRR–Äâ$Žb·°\ÜCo`9öàöS @!ö66³4E«¦–]^ä`ùå>í§†>)?°X\ål¿û®ÛܲÑ츧˜‡K¤7Ză,èuÚÀZ 0¥"øãô´ùúô;öI;R§Ý]ŸØúc»„õ¯çf=»>(¡xò–W×?¤dôÐC²Â5´îGòi¤çGÞÓÅÔ ‹HEn9_ VÐÂÅàOq»¸[ܳò¹æ~(›uuh9Jo^Ý…Òkõ†_§ôÊ›a/(½Y{T¥×+Ô ƒÏ튶ûøzÿľcÎ¥,-Û>vfdß9µŸ†U¶òì绳hŠã …§"Hô —T9²‰\ ÙEx²‘ÔÂR¯0'ƒN¨òð²˜áinœ€ ˜@Ž‘cäÛáVÇ­Ž[%Âa‰pÇæŽÍ›Ë»/ï¾¼»Ï‡>ú|`+«Ò)sI.É•Îc;ØÉƒNæïÀçT™÷ÈB.™Lº¡\©ê:™· õ‘†@8á<µ£”¡ü(þ®ÝO£úbθ‚5úóx™ŒÇÙ”2ÿeš¬U“¸T\*.å‹ðEø"犜+r®ˆ£¿£¿£ÿp«áVíúlé³¥ÏCWCWC×m·mܶ‘8â`µÆjÕõ%õ%õ%ÓÓÓÝlÝlÝllÃ6lÃìÀŽ?ñS0WÏBÅ…ØbÃTYDWÑUtõªêUÕ«ê0Ó0Ó0Sh~h~h¾°FX#¬Ùç¶ÏmŸÛÒEK-]”~,ýXú1iý*½J¯ÒA#¤’Ó?#¶d餆! aLÙñˆG<EGÑQßücv³Xb„!Fx!¼^( …B!©EÓhÄ ÆRÛ^Fæw\M¯ð ¯˜Ú z¢'z¾Ü÷rßË}š·š·š·EÇ_t|€G€W€W\‡ûÝî÷ÎWç5Ì‹ŽÙ"h:VÌ-üá¸x8ηyå[씃siÏiN6õ£ªÜóY^£LÙh·n –«WpÕá\w@™ÉïhCÚ ÝÅ¢@ûˆåšÄ½~Ë%7ÊyŸð*;-ø™ÿû9ó.$ßOýÐ÷ôð[_ôÏÜ“;Mï`Ì?>K[¸aÛT,å’w´ VCoˆ­¨ZìOÇ!JtA8Dx¢Á/ÎðŸaó¼EC+ª¢*ªââ¸8..¥BJ…” #;òî€i¦ ˜ÖnA»íôéÔ§SŸN¾±¾±¾± ·/ܾp{ŠmŠmŠ-§àœBô=D)R.`•ùKóÙqç@@è,\Aæ!)¹L%„RÀ8ª èOVn|ÎÑá'Í5« 9\Ñ$‹Ña²ã.ó‡Âß˸ŒËB9¡œPŽã8Žãö&îMÜ›¨‰ÖDk¢¿übð‹ùòäçÔÍ©›S÷ð¹Ã石ªcUÇªŽ¶³¶³¶s^ï¼Þy½ FŒ(!y+¶bëŸøž™k(@€À-ç–sËÅâqs,o°¼ÁòÏ<ðÌsƒçÏ ï_¾ùþåšÁk¯¼?lØþ0Ú—ö¥}¹º\]®®ØFl#¶‘4+þ½’Ó¦Þ°k°5P5Ð}Ð+±+¿ùÑ•Œd$³M±·Ø[ìMëÑz´™H&’‰˜‚)˜‚UX…Up†3œeÇ]æwcY´Êêp†`†°yàé”§“žNÒLÒLÑLq*å¤sÒùg—4—Œ¿àAäƒK¸.& =«ëxô¬Q¿|ÛbœßÇ¢ì–VÊ÷,\'À¶¸«c5«@Û]ÊÒxg.,è;Êü5® ÞB3ÀxC(¤£Ÿoþéñ‘7Ssvžok_Ö½ž÷è~rxBû7£²ž'–z½îS €Î_¼oI9Šxà::‘Τ09…X\Eº˜@=é$s ¡%-Á0";þO~¹ø;sËØk-ú7‹Ä b·óá|ŒÁÆ`cðb,Æb<}ûjëâ­‹·.Öþ ýAûCߦ}[ôm1jë¨%£–änÈ+“WænüÝõw׫ÆYU²ªd¾œÝ=»;í3̘ˆ»¸‹õØŽíð‡?>÷µüIE*Rwå»=3—½1£1{Ì`.»ö‰ö‰öIÿ…ýö_ØòbË‹-/j'k'k'_Ûum×µ]‹ú/꿨Ò¶¤mIÛ$±ÂOø„O¢è#ú|¡ªþó’S–ÝÎþ;;’ÿ•Ëó°˜=³¹å«Üáw¤#éä¹An(*****bV`…¹±¹±¹ñ_d”Z$°‰µÄZb-aš0M˜Æoâ7ñ›¸¹¹Åâ@q Tw÷ wŒ–ùýXºï]Ñ]ñ¾Ãw¦Á¦s¦s÷nß;uïÔw{ì=ræÜXŸØi~ºït¸Óü[n›SmqEÊQÕ odº¹2 hÄJLX (îxÂ%ä¸åt)p~yêcxöû›=žtO¯sŠ»ð:ðòŽû§ÞÜ͹¬«d,’µ Ψ•ÞÕ6à’U8Âypç¸f¢‹¸ŒVKÑZÓ±i>šàG3h¾$D¡0é>ÝŽåú¡ (Äâ ñë÷LH 8ÔôPÓCMß5×ü]óQ¥G•UºÔ¶RÛJm›7gÞœys–·YÞfy›ƒÜAî ÇDl‰ q!.ôýD?Ióû/rÙÊÿËŠ¯ !Np‚“t¯¿‹»¸+×*ü_ü¶O?Ç¢rFß™¡€F`4­ˆ©t…ÒÄ¿æìBÕ÷TÀe ÓÐT£ÀcùZø›Ã.6&¥w ×pM8'œÎ!øÏO/åÑŽ GÙžÕ?¬þaõv'ívÙíjŸØ>°}à˜1#mGÚ®Þ¿rØÊaîP|P$«ß×}_—^+ŠTB¥/Nʦø§ä)yJÔDMÔĉ8'Ö´\Šs_À\`ot3ÝL7ã<.ã2mECi(±ã&p¸Xî÷ àÁ ˆ ăâÁÒõJ×(]#:<:":¢r‰Ê¾•}uDGtdKç-·t^•¸*qUb®6W›«å½x/ÞKl'¶ÛÑö´=mû¸ûÒ s©ma [R„!’¾8½B¯Ð+ҔǜKK~ŒÇxŒçxŽçR´˜= ýsثؙ‡Ð!téFº‘nL¬S¸(\.âáз>T™NË?’„$!Iðü?n·ÛÆã‡ñä{GqGqùâ–ù&/æ>îÀìà=øÇüc¡²PJ(õÖø¾åû–.]Ï9¦ò%áÞ³q€íUÒi},ªà št¯ö³gi“®Ny8ú}ðãö¯ÛfNz°àÅé´2WË?øø¶/€RìÞ ÀŸ×AJ˜Ç÷äÒÉwbwñÚŠöt]*N¶‹f(°7%ý O0yßÑÑtDñ޼#ïxoÿ½ý÷öpá>Â}Bâ„Ä ‰UGTQuĘmc¶ÙæñÊã•Ç«u3ÖÍX7C¿Z¿Z¿šÓq:N' ‰…¤Ât˾2ÿM,]vrúߊ2ÿ•à “C¤%Ûþž {Sù5¥ÓWô¸k.>9·Ëº‚*“t}µ¦ôIŸqÒñ*r”t•íö«üZqªºŠºŠZšÊÿÅ©Ʀކzêm¨}¸öáÚ‡+¬¬°²ÂÊÒçKŸ/}¾ôöÒÛKo/yïÿÿø–ó-ç[Îó–ç-Ï[^Á^Á^Á“<&yL*2¹Èä"“Ýuî:wËV—­.[]¾sùÎå;çùÎóçÛ³f?ÌÑÖÑÖÑÖ¶ŠmÛ*¶JÛS¶§fŸnœn¼Ÿ’ñ*ãÕE!­pZáXë{3îÍ8\á®î®®kíÑá£Ã•­f…YÕÆªªUUIðO£-iy½åõcùÇ /ü`þƒfì‹Ø±/"Ü!Ü!ÜáðMYFÖ“‘ŒdâGüˆI$‰$‘kÎ5çšsk¹µÜZ¾/ß—ï«´RZ)­ª~¨ú¡ê‡°eaË–9ò޼#ÿóïý›ä Î@*Bµ9nsÜæxÍ‹5/Ö¼X][][]«>¦>¦–Šä°K±TžÆdþX¸8~*?-…ºÁ[Ãj‡ÕNczhÌ»ÑÆ )(};VØlJ¸™¢ï“_y?ó@›ž½6Ž-{´|ãÍ]­©Ýqíà_8éIŒGIn0yJŠ“C¤ n’¼Á,<ÀfôEsÔF©o¬ÔÚR®€í¸CîÉÕ³Ùh³Ñfãè¬ÑY£³®ë®ë®ën_½}õöÕù׿_›ÍÅ×Å×ÅW²öCî!÷PZeµ<³Ì‹ŽÔ B§Ð©­ÕÖjkÅ4Å4Å4„#áŸ/’ÿQGáo„/"ît&.âvú´\·Þ‚tUÓ¹ðÀåH~—k[Ϊ–r±ô‚ñ¨ÒøA6ã¿5%ý•¦&È"»"Dˆ…‚  R|R|R|ÂP ÅPjGí¨TõOÒt Ôý”ÅqË¡ÊÑEt]Ä2A™"»äd³=ÞÔ›zKY×303̽…ŽBdzÎ8; p×w¡ß…zÎöMöMvpq†3Ô] {S§KN—B&ÝRtKAM!FˆÉqÊ^—½.«wVï¬ÞYáYáYáYϳžg=ÏÐeè2t¦Û¦Û¦ÛÁ c¾1ߘ¯Ÿ¡Ÿ¡ŸQ@ H1&š*˜*dÕN>ºÈaßš¾5ËŽ¨P©B¥‚ÝBI¡dÝ”º'ëžlԢẆëŒ9i•Ó*Û|ìÚ±kK«.õYêóîÔ»SïN)++“3ä 9à jñOñ”Àà°¥ü"~¿ˆÌ!sÈ®/×—ëKê“ú¤>?‘ŸÈOÄlÁE!E!E!®W«Æ/æó‹¹;ÜîŸÂ§ð)Ün 7…/Ï—çËó­ùÖ|k–¯X§X§XG¦‘idoÇÛñvü%þ‰œ$'ÉI…›ÂMá†Øˆ Q!*DêNÝ©{Éå%——\~³ï;7û~óãöžáÛÖ k…µB¤)Dò>¼ï£èªèªøŒ((!OW2ðô….肘„IêšQšQÚzŠ2Jë”~h¨|deB'€S[uRÜj?iʎöæ(Cû‚µÿ¸wìÇR¾174%u‰ y,–¥ëieñ´ø–¾—Ò’ô~ª0£8D”ûfÍd)W`;ØÑ DƒØL•W?¯~^ý¹˜‹¹xazazaêW±_Å~ë¬7²ÞH÷ŸÜrÿiNðœà9Á8>p$ÕIuRUQUéuz^—Shþ«0Í?øÁ­u999[ϲže=ËXÍXÍXí*w•»Ê‰§ÅÓâi©wõ;¼Ã;Ùx?çËT™•¸EŸ°é!óA¿±Žø^¼F1 óð”ËUâvÚÖW ŠÚ€ãABàäÿ›§!-´ÐÒ­t+ÝŠ–h‰–ß°dùÎY:GMÔDMÞÌ›ysΊœ9+ÞÌx3ãÍ eaeaeaÅ{Å{Å{©¹çÀ9ðn¼ïƲ¨¼‚Wð\O®'ד9å ?…ŸÂ4"H#ržœ'ç0 £0ŠoÎ7盫.Xm¶ÚüqÞÇ 7|ÚøqüÇñE‹Šò>š~2ý”לïÈw´ R´U´­WyråÉü,M’&‰_ÍÝänr¸ Ü~ ?È_ä/òÉmr›Ü633ÓMÔMÔMÔŸÑŸÑŸÑM×M×MÏ“ÿ&ÿžÚÚ¥Ù¸÷áž—wÍk5¯UI ¡!TwLg g¹QoÔç6mÙ´å€Û¡c‡ŽÙÖ¶¥¶4¨^P½ zdÙEv‘¤©Á_ç¯ó×ÙÒ°â¨â¨â(ú¢/ú*((¤.Œ¼ oÃÛp˸eÜ2¾=ßžob(†b, ‰Þ£÷è=–AK÷Ò½t/“W£…iaZ˜YRR‰& ’:Í,À:˜¦ƒ¡)¤6j£6ÓÀ!óÈ<2õåjr5¹šÒwÍú~»X§ «…ÕÂjq”8J¥¬®¬®¬Î¹p.œ‹d76ªedþPÄLq 8oÏÍ'Ógܹ}çá¥53¢Â'×êÓ—oŠÁ0m,vDLPÑ#æ¶Æñ¼/טì¡?! ôí.<ŸÐhŒÀô)8px›ÿáz~ I/,ÕP´>­O듲¤,)‹J¨„J»•»•»•o›½mö¶Ùð›Ão¿YfV™YefÍ žÓnŸ?m×´]Åžø˜}Ì+µ•ÚÊ®¡]C»†ZƒÖ 5XŸ´>i}Rs[s[s[Í–»¨»¨»¨#Õ‘êHMMM—Ö.­]Z[ÕV×S×+ÛÆo¥ßJúɽ¯{ßצá¦ádº$©N(†+†g]ÿ4üÓð3Ï|wæ;{—.=H#Ò€4ö{„=’¼c- "‰HhWÚ•v•¶ïÒ»ô®¡Œ¡Œ¡ ©HEñ°xX¤…ÝÂna·XX,,¦hÚÁÔÔÔÔÔ”Ëãò¸¼’×J^+yå|h 4é›bYõß.ìý3' šFÓhq®8WœË4¡¹Î\g®³”eë8ÈÓ˜Ì|[( GèÒƒûŽËM‹HÞ‘|ñü¡v×§ôž¾ Ǹ·âz±í£àû? 7…åÂxÜÄø¢á8à%¶HúÇéXÄøï‹Ž³+÷!}H²÷š{ͽ¾áyÃó†çÐjC« ­6*yTò¨äÚûkﯽtÑuF×)¹«ä®’»–` –Ààjp5¸’4’FÒhiZš––t´˜f—\ùgÀ,ÌC}Ð}ò&æMÌ›¨ñÒxi¼¤™v&`6a6É©2¿2÷XÍ9ô¼ØóÂúE“u¹n,=¹R—`jž=°÷… [ê5¬´£ˆãl9[ìWa*%ÇŽ?FtŽèѹÇêó{ã÷ÆO’™#“È$2é/8¢DA8‰“8‰±?MÐM$gý·´gú5–bÃ6‡wÜuptÙi§¦ê½v²ýdûnÓNM;Uíj$"Ç)•!ÊeˆS¢S¢S¢çJÏ•ž+Ë®,»²ìÊ*[«l­²5|DÄÔˆ©‘q æ7˜?+oÕ:«¤Â”Rz½½ÉÓä™àL)¥Ç¼+÷®\‘†î­Ý[­YtEÑ®fW³«Ù¥¸Kq—âNGœŽ8q¬áXñ†]s»ævÍm›Ú6µmª%Z¢%špM¸&\yOyOyOéªtUº’’@¾ÈÑ”ùOˆÄ?9H’ƒAƒ6m   s:étÒé¤ôW[bKleƒÉüÁØÂ޼ ׋Ì!Ö$’4h¶¢Ž™†¯Ï ¶Ž»6c”ý™²KÝ;ùd²‡‘^ÅòÔe¤‹Ób½W 5ÔÜDn"7‘íP…ªBU¡ÑÚhm´öêOWºúÓmÇÛŽ·c´1Ú­g5ÏjžÕØ‘œgÅY¡j¡–t6ËæP2ì÷Õ­ÑZ2s¾_§Ú”jSªM©#Ôê‡9ba;ɉ—ù¾L•ù —? ŸeN×iôéâ+q}A¶sµ‰x2$[Tôç˜öëpÒeHPÈéa¿L RÂ6i8 §á†µ†µ†µb¼/Æ›{š{š{Jš©ˆ|‹—¢E ê¢.êJÏÊŸð Ÿèmz›Þ–dõX<ƒ‰²=ì >ð4i²3³¿Z–(±jtËÊôÁô2½Œ ”Gùç7.ݸ¬¤°§ô"ê@¢IÒp×ñ#öc?ñ'þÄ_êZ¥QšŽ§ãéxSSSƒ ÿ ÿ ÿ d ã—>ûr?8h5ë»sßÃiGñ<® mAÛÔ^œ>8}h“¼;y7€ÝØ ú¡ŸôÚFh„F¿jÕÓ8Ó¨ˆŠ¨(í)Ò(-å².ŒLB‹ÉG²E^¦™À"Fz‹Ölˆý•Y’ q²%K–ôÂŽaçaçdŬL»m³V2íÑí¿øÞ¿E^à^ : mGÛÑvÂUáªp•kÈ5äZ+bEp §pŠ5®g©Dß|‚Ì×C.2‘) y´mFaLBôó³)µr_æ‰wÔo´í­ Ï+4QmË_抒×f^à(*ÙtÿÀRj“iÀO§‰ÓÈJ²’¬4¾0¾0¾X|yñåÅ—?Mù4åÓ”Á=‚{×Pk@­EBŠ„ ™ÿiþ§ùŸn”»QîF9n·‹Û%®׊k1ã1^ºCýwúfü}¾¯›¸‰›l½]¨,T*§M;švÔç‚ÏŸ n…Ü ¹bõfh€hÀzxËß¿b>¢ =‰Ú)¬~R~Èy;AÙÉÃppr³.ã)W·ïwKTQ3B¾ƒÖ°VNæîpÎPÈ‹¿‚eT€5ƒD YgÐ/2hå:÷$È7Vx*<ñÊ]Ê]ŠîÊñÊñŠtå.å.n=߀ÿÜǯ¼þÑ‚›a¹$ç ox³¥:HI ÙKö’½\%®W‰[Å­âVqfNàUœê˜ê× ™u}vÈì—./«¼¬ÒÔܬd³’؈s8§´R ø’¤q&ÎÄYrŽ™ÖëðwÇq{±{1ó1Ÿõ”R‰˜£\UQUЏ[*²Ëü{¨ ‚JZ ”‹)S.&lWØ®°]ucëÆÖU?P?P?®Ê¡Š¡²Ùdþ`z¢‚° Ѩ«XÁ¿áÞ>{¾Ý¦û$J¯åtÈñ>V|`aç<û‘šÏ‰¨û1 ­d³ýóëZÚ¾‡{¸ÇÔÜÙŽÛkl¯±}—ë.×]®wZÝiu§Õ釧ž~Øò~Ëû-?‡Ì¶c;¶“Cb¾8³|wþc±HFrŽvŽvŽ+V*¬THóæ!Í•qÊ8e“?Æ8ŒÃ8Ù`ÿŠ^¨üy9ÞÊ–¿Ïe'{Œ¹Ôþ…iÒž]U”ΙÜûÓú¹-Ô’ÜM¾é‚×è‰Ðÿ£-#ó—†Áà%•äY[fÍ›5ï¥× Ó SÓȦM%Ýz>•OåSe[}BBØc[Åë¯W¼¶$lIØ’:Öu¬ëXkkkK‡ŽÆhŒ–-&ó§ŒÃ7d âÙö¹ÑKÜÛ= ôZ§§MµÏ$ ¹[':ˆx·‘Ž­Å[Œ“ù¶°¬Ž·…ÐC0©Ä¸a<6b£×—Û||ÅÐCô=Äb?yyyL¸"·GnÜ‚I0 ŸgeI2™?æ Æá>¡"J¡ØÓ…ï¹õ ÐS´šb¥²²Ô2O'çDiâÉ$ÇÈP9öû/0Àƒ4KÆ` ¦Õh5ZëÇõãú½_ÿ~ýûõÑk¢×D¯Ùua×…]ø| ¾F¯1½Æô³Èq‘ã"Ç¢AEƒŠ‰!bˆ"iLUFeT¶,•Íü±;±“µ8R…T!5£kF׌®L|¢ÐÜBs Íe©¶’~ZY”EYÙl–|¹ì®‡ù³(õ åð}Þ “^˜Gn[d@'Ór¶U­Æ¨l””M”MLÏMS.é‚N(#g¹ÿ ,s‘e¾],s+s‘…,ä"R?¾4|À|À+¼’X¿j\á W¶ù´îÓºOëþê‘Û°ísɾŒÌ†"4°‚÷ðo-{U/½6nŠGÐÕS¹Õþf>Ùè†a°&fLÄ •q@6Þ¿Àr–V@…¸B\!®`î»>X¬fðÏMÏMÏM 80à@¨c¨c¨c±êŪ«>õÕÔWS_Åuëו“`Ì’i"M¤‰RèM¾›ÿ{°ïe–a‚„ T·T·T·bÚbÚbZgƒ³ÁÙ`uÕêªÕUƒÑ`4Ù1R‚±¬¸àÿFÜ `þœ{$æS:07Îäc&ä%y‚U€ø=½oóÌj‡²–F£ÈâïC@”GIÙ”222ß –Õ+°+ðð·q·™ä¨ôWùLæ¿ÂýÓIK’O¡ÚãÌ|Gn¡×p7XoÀìÇ5òi WÙmù0'¥[pàÀ1÷WpWÈò†¼Ù£Ü£Ü£56jlÔsëçÖÏ­½Ô^j/õœ¡s†ÎÚ¤e“–MZ²þÌe'uHRGrÙ劣ÿä{9€8€;¸ƒ;yûóöçíÏqÎqÎq¶ZgµÎjË3—g.ÏÀÔ!X5 ì²[ðsÇ]Џ‹Ó¨ír̆@óX”&É&€.£é6»TNÊ=êaÊþŠ0BEKRÞ²)edd¾,™ú¡úI=zÙ²øk¼Æké¯ò CæÏãR¡g†/B>Lϲ6äë7 •¡ yôT‘¬B³¬s•Û·ùqæBGÚ¹8‰²Ù~7,Ñ…°Ö@ Ô ãè8:Ž·çíyû[Ú[Ú[Úh·h·h·saçÂÎ…:^èx¡ãcŒ=2öȈ A#‚4³4³4³èyzžžçZq­¸V’"CÎÃþ½0.&ûøðèSú§ôOé¤'éIzºs;çvNZ¿ŽCâ$y9Œàÿ:î:˜þq3 Z"ûƒ¾´Ñ"¡ä,ôâV*j;©v)BÔË%yiÈ’( ¸lJ™ßÁfz¯a-”º†#æÇ¯'¦.Ì_ P'ñ„ko'+›â^ó‹ôtì…pÌÄS®;)LŽÊfû7aÒ·,O}+¶b«@*Pb bøÐîC»í&ÔœPsBÍØŸbŠý‰×òZ^ÛþUûWí_M³Ÿf?ÍÞ-Ê-Ê-JÜ#î÷pW¹«ÜU„ !R*¬œÿÛa‚Å,Pò Ÿð)£KF—Œ.= zô°vµvµvµµ³µ³µ“’d6`6ÈaÆÿ¸›`Æ,¸PASÙþzã>pĈ‹âlz–zY¯VVàP_VÜâI¯jŒ’¤ˆlJ™ßÝŒ“H„:˜rkéjš:½ZýÑ.w@f‘ê…Ùå¨=Š®+4ßæTP€;r£ä¨ã„eoTL0Q+jE­H+ÒŠ´*8Vp¬àØÜs7ÎÝ87enÊÜ”ÌR™¥2K…ÏŸ>~™ùeæ—)ç_οœ¿è#úˆ>\—À%Hò¾rëïe"&b":£3:ë6ë6ë6§¿M›þV[ -и–q-ãZ†uO—JT™Läßž/‡W>Œ0‘Ñ¡0 díÔ¿3:¡菱($[.G£QV™4‹¬¼¬À¥Q!p‡£šmÏJž•<+ù¥ÝK»—vM÷5Ý×tŸtL2ŸÌ'˶’‘‘ùUÀ»rȆ´Õ¾œXÜ;cÖ‘éƒ:Rz}ôˆÒç›.=С…敺‡j±ô*.`Â7ðéXÓÂ(ŒÂߨ÷ò³D—Ÿg¾4OožÞ<ýTî©ÜS¹wwßÝ}w÷övÛÛmoWíSµOÕ>I_/sß™: ÃÖ°–þÏ®‚hD#¥P ¥ôz}XdXdXdò5Ê×(¯HR$)’$—¥Íü×1þ¯ªŒfl…/TlGNrΦÜÞÊëB®à¦ô5Ñ—ã ™‚«9Ò8B—·×yêØÆû"¶m,f¯>«šÈŸ7ßîÓ’¨ˆ^ˆå<È*dà(æ 9*¢$\äH¼ŒŒŒŒŒŒÄg´&ã#2 {ž²4§jš}v‰‚âáì%î`³Ý¶¿¦”R+(@H'ö•÷Na~î<ÌÃ<4Gs4Ç5\Ã5É•ÿú±LýUB ¥´c –` ÙAvû÷;ïwž0j¨ £^||ññÅÇc€1À8Ý}ºût÷–}[ömÙ—¢…h!A!ÍH3Ò ùÈG¾d9…æÿ_ÏñÏññ8wHîÜ!¹çsÏçžWUUumëÚÖµ­T“° «°JV˜ùòŠ{Ưå×³íª¡õõ ÜŸ-¦”Òkùb'j}ó¥”Þ«H©¸ŠÒ^ã@éÅÀ¡WÎô[<²uÙŽ‡#šÔRQ:s›¾8çxòŠæÔdÞI–Á[lËÈ|#Èw™?Œ™Œ&\i²︅Ü|ní…JKf¶DéÙ#ï˜ìÎýíçSÈ=ÑNê²B¶“º8ý•~–Þ–¨ Á7鶪¡–jÿÀi¸ ÜNZ÷ð8æqÌãØ¢‹,Zp{ýíõ·×_ñ¹âsÅ'úVô­è[êåêåêåìH&1ù…¼ÜȉÁlò#~Äl‡waïÂÞ…ªªªË%•K*—„™˜‰™’ú{1C1ùáG‚‹ã;ñmØv•)u7Ô zá’û »È].«xZrœ!otvç[Y>E e/ŽéCé¥ä¡Ý(½î?ò%¥Ë s}ÐjÝ­N ûžlº!ð£]aí*ËóózŽ’³Ä·0Fºx­ ”s¿d¾dÇ]FFæE1˜ïD¤(ïæ ž7ªNu×oŽò¢ôJ½á=ëM ²*žÈþJÎ’æ¸ôÕ}MB¢ÐmѶìݲwËÞ ©èRÑ¥¢‹ÔÚŒe~³´‡o+ó›Xü°)$…¤°mu :P8rËÈ-#·\_}ýõõ·zßê}«wŒsŒsŒsQSQSQ;’[Î-ç–#üâÌ2™ÈD&{˜±kcׯ®Mí굫׮º,tYè2ëÝÖ»­wK~wpwþžFú¥ìóåbž¸Ÿmf+©îßѺÌl1À³BóÅŠáÃË«4rýÕòѧúL™{eìËì‡×‰º<ÀxÙ\ ›éÁÀÝþùn7WDŒù®þ´Û7V/iÿxTïïÆ•òéâ`)¨EBëÑ<ciGTø‰ó%ëEŒ:Ò{P~õ™ñ–—™7¼áÖhÖR/ùR”‘‘‘‘ù-¨ O·S f£JÃïéÇ‹r;Cc¾&¾Áq¨áܳԻ¢ZéxL¾º»‹3œáŒ7xƒ7$ä‘<;G;G;G»1vcìÆ8´uhëÐV=S=S=p°[°Ej]ô­Ü+-Ó3l`êFݨ131ëãõñúøùæwšßinݹuçÖÍ—5.k\ͨšQ5£–6\ÚpiÃJÉ•’+%‹Äâ&=)¥Ð°3³èûßÓs`Ÿº!¢!{ðË É É É©˜S1§¢uyëòÖå‹:u.*‰on![ÈÔB-Ô’Îð·‘àü¥¹ ô-Û,8ažgNÍu20"‘œÈ¥Ü ’À©»Œ6Û¦¿÷¾ãˆ„M7^ü8eal»—{âº=ÿ)7SwÓs€ˆK÷š_(rêògSc’Úœq«×›ê‡Š¯pk`»‚n§ôhgØòãy-ׄ´ƒ ÔŸó쿺t!`—Ù À´C;´ÃnìÆnR˜&…„ IÇÈz®2222ÿ–NL{´G{lÂ&lb7ï_8æ[Ä3Ú•ÎÂ1<@’^WLIÊCß ³D%²ªdŒÇAÇd´F=”…#laõÕeø²Ì&h‚&ô(=Jš™™ ±B¬ -´Ð–r)åRÊEå§òSù¡Z¡vav}cº+ìÝæ!y’ˆ¤‚*¨B Åo"›È¦½^{½öz<~ðøÁO O O Þ7¼oxߘSkN­9µZµoÕ¾U{z‡Þ¡wèz€ ÉErÑR˜òow¥3«ÞÀ ÜÀLÁq¤8R™^:½tziÑ™ö¤=Ý v)ìÂRtRt¢‹è"ºq¥9ào#Jþ ƒƒN¦gp(¡ÈÕª˜ò3>ì0¸¢çO~‚o:Ç’€IDATHK‡;ÊÅ\ô;÷›§¤]ÍtÈ>^çþÃìKÃU:=s5o³áE›Ë¦#R¿×]É[_`œ*¹Ñ«¿SÓñ•{”¬ÖùÞª5¯;n[ôbp³ÚkK7÷rpÚG#éqÔtâ!˵%W‰‚l&¡8޵ƒúp„í?2ÌþW“4»œ<á O¬Æj¬Ær,ÇrÌÆlÌæ›ðMø&ô}FŸI‹8npƒ›¬p/###ó»a~»WC5TÃvlÇv&‡D$"ÇqÇ1Ó1]Ñ]DHn=ËšýFrˆé#¸ÑÁlûî»Dsr+c!“Ƽ m𺴿ç‡سxˆÓ¸ƒ÷PBñU=®°ïkakP·ÊÝ*w«Ü{ïý½÷†Ö†Ö†Ö…  ð/ð/ð/àžpO¸'hƒ6hƒ^è…^ßXôÁîï|øðáãkE׊®¥®§®§®GkÑZ´I$‰$QÒáQB å߉·üÆÙõ[…Q˜Œ$=IÏ´"ii¹¦ì®Ù]‰›ÙÖlk5š[Æ-³ª¨®®ì¢¼ª¼ æöWDETü»Î–nØ€)l[QS¡Px¿Úí|d{j˜Ù«ç÷â€)}º¾zÔ<:µm%b@cðšcšýšvULÁæÊoê «w LQu\õœZ•«Î«¦«qí»á =+-Üþý°úôËN lEéµ #}(½1\Kéµ*#®çÅ¿7påš»£§†k‡–¿UôñÏßß“[DÆgÜÃgJÕŸœo9˜Š£8Šãná–å!Vj+µ•ºdvÉì’ÙoU¼UñV‰‰%&–˜¨Ø Ø Ø ‰±[ŽÌ_9Ç]Fæ¿„…˜ ²™²™²™Í>›}6ûX¸ä_¼¶?ú£¿¤Dq Çp =Ñ=á W¸JÇ|=nâXtFuð €¶¹º¹rBÊ”åúÙSz}ìÈŽ¯FÇöêÑEÙSQŽK@ |á†iè…šßÊ×èèëèëè[³mͶ5ÛFh#´Ú²/˾,û’Kæ’¹äX`,Æ~ußËoÇò=sàÀI͘Z…V¡U =<új端v¾e¼e¼e\T°¨`QA±ÖÅZk-½´ W†+#UÆ_IžYÉòä%^â%÷{È=D2’ñ ÷ÍÊîÁ݃clÏÞž³tûàíƒGøOí>µ»uŠf§f'W¸Jk S&! Õ¹>ÄÇ››·^^»¥s\{o1û!²«ÿûGßh¯°º©˜Áo–¦T“2Ny¾‚_ÛòiÊð¹a)õbêª;<¨^•µ5¬ §!EëVœ[âJ¡‰k‹ŽQE”Ê:xäxÿe”^ÕXLé¿á“(½>~ä輩' RÙ='´Ùýˆ6•;­j¬˜Èí·|ƒ|n1™ŒöG´PCñ;ñ–Iô@&%]T͹æ\ó¢3ŠÎ(:£jNÕœª9a1a1a1õ¦×›^ozC·†n Ý´3µ3µ3ÑÑßã{|/7_ø+!;î22"ìÖÞMÐÕQÕµe´e´eB6†l Ù\%´Jh•ÐróËÍ/7¿Ø°bÊ ³5ÛšmÍ*NÅ©8Ò—ô%}õü×q×a‚ &,À,@T@©\RTÿƒHg;ÔC)6yðÓ¸g\é»ëÖ ]RzmÙˆÁiΓûå—íä“àº@2R&™ ÝWú 2ë±ugx†gl·³à,8 µ¬jYÕ²ŠèÑ3¢g鿥›—nNj’𤦤ÜÂä#-G·8z-îød2™L&[Ò2¦eL˘ÓÞ§½O{ÇyÅyÅyí*»«ì®²Õ Õ Õ ’ {q½¸^8ÓÿPb#óÛ…]_lì#>â#¯âUü/|"Û~¶ýlûÕ}\ou½ÕsZμ0óÂéG·nܺñh¥”¾zD)¥«û*rª_FzI Y}Åßa‚ü¥ÄY8Žkü÷ä6×K ¡µÄ¬ŒÅº—úËÀÙˆTE[Ù½T â+¯p±ÜNàÂt“ÒTÁTç¡æ¡ú‘ʉ¿ƒÿÊÂN…gvrhã©k?  ŽÿÞLJ?Ý3ŽñÔ´ù¶;NÞyÕÿe³ªå‚[M­3»dá"ë‹ì´O´žh=B¥ŒBèd_§¨VÕ.û\8ç}7ïíÙ-ØÞ¿µ·ÅÅϘ; Ñ¢´&@ž“¾¸x¼BF_á;ÜA"R f¿1MÅrY–9ÜePe$ù!€ãHÇ‘Ž#}xÞ‡·³³£;èºCd?ÅâGCˆ!äÿ±÷•áQ%[׫N{:îNÜ=„xw'¸Ëàî0h`ðÁÝ]†ÁÝœÁ! !$„„qïîú~œÃ¼Í73÷½÷½wæ"Yý<<‡Nõ‘:%»v­½vM°©©©©©é›SoN½9ÅñÝ57ëõGëQzÔãÏÀŽs0sX“Úâ•Å+‹W:÷tîéÜS.U.U.ú ý…þÚT›jS£=F{Œö !©{_÷¾î}é«ÒW¥¯Ê­Ë­Ë­+T©ô¡Ïñn/á.!©HýKž:%¨AH¡R­W·SÏxQüîyéÿ~C7ê5“š‰Ú»ß·³1ÒKæ¥3y„MÌÉ!¡„~~s K aë*$¦Ä”˜ò y…¼”ñ)ãSÆ{†z†z†Z&Z&Z&ª©©¥–§–§–s{#ÐpGqô ›7Ùûdg|!„ÒYtÅñ×ëP‡º£’£’£’ìUÙ«²WÜ;rïȽîsÝçºÏm3Ûf¶ÍzóõæëÍn9ºåèlÁl!?‘ŸÈOtDqWùœë„]´°5РЉ4 H¶‡Ò™t&ÉE‰‚DA¢ïß ¾‚öí Úd=ȺŸu?ÑZ~~ƒšÒÆÒÆô!öc?Ù d&a~Â(ŒBOß°æ=dÔ 8Žl|À#TCP1Z¹[êKôüчxI<™i:Hwµ4¾|fÁ´âiä'âJ„ÊAÊçÊÚgkŸ­z¶´¶km—Úïl±Ýn{E=A¥Pz>s uq×m«=Arþ™ìùòMGaõò«XwëXRÒ¾.Wä.ÆCW´Qø8[üb¾MçÀ´$ö²×A²‡d\as-ÞûÑ€¬ì}ÂKc^lïx.#%¿Â±ºY/×ZŽ0·ÈFu)@íh?fC>ªQ å<©fÓgײ%(A ·î?8¡¢¢bw×î®Ý]“““^6/›—MoÓÛô6}M_Ó×¥V¥V¥VÚµ;ks2šVYVYVY¹É¹É¹ÉUáUáUᘩñ©G=êQzüFaFa&`‚ © © ©Q¨Q¨Q¨ºD]¢.¡‹ébºXuGuGu‡ÔRÃÌaæ0sX¯­(R)Š4igÒΤÉ|“ù&óY³»úLõ™ê3565656Õ†Õ†Õ†åíÊÛ•·+Í(Í(Í(“”IÊ$u§êNÕâ°³M Ä@ $H#Òˆ®¦«éjNOú0ã0r‘‹ÜËœzB”-\@kúèòr]Ö᳑O;áïå7´q4‰×΀.ZÀ„’\2;Aéçjβæ{ JPÂUÉ^ìÅÞ‚îÝ º¿p|áøÂÑu¿ë~×ýVŽVŽVŽªAªAªAiGÒŽ¤/|áË G²*4_¢Û«µ¨å¬ Ö¬œƒ9˜Ã˜3æŒùíÑ·Gß><}xúði/§½œö²ñ™ÆgŸo3Þf¼}ûþöý×;®w\ïX5¨jPÕ ^4/š­º®º®ºÎŸ|6A™ì3²Ï;ƒ1˜‰f¢™hÚ”6¥M©>Õ§úšÅmÌlÌlÌÃÃÃ===[¶l­k¥k¥kÅêɼyúæø›ãWc¯|¸ò¡ªr—r—®ÜÊËʋ٦þ^ýý‡Öù“ó'K:K—H—”÷¬˜S1‡»ú7€?]Ðf8E“ðJ¸l®VÕéBW¥§"á„]|^ æµMsý:é³ P èÒxz Ã0ÇÔÔÔÒ¦§ý˜6C5G5G5Çn¹Ýi»ÓʧªyÊ·V»­žX?ža¡/~}®ó<ô­oQ·ÙØ;X_rüÖcù°%mçûÌèù¶I¨ßeµ£¹q<ÀL'¿†= ²ÿ$§‘“;ñ=ºbð¡Æžlr«8½EvǂР?öþ™SŒ”øÒêÛ´U`Ž`/.â9·ñÆv}˜À„‹mgCNÅCÌËçåóò­ž[=·zn#²ÙˆDŽ"G‘#ͧù4ŸÝZ-—–KË¥oâÞĽ‰+˜\0¹`²3ãÌ836+mVÚ¬‰‹ÄE6I6I6I/¾ñý‹ï¹à›Ÿñ3~Æ[¼ÅÛo|j®G=êQÿ¬¯Žå¯kA Z†v†v†vÒ™Ò™Ò™$›d“ìÂ…… ¦Å¦Å¦Åj÷Ðî¡ÝC7I7I7I/P/P/P%ŒF s„9¡@( ˜AÌ føˆøˆøˆøœøœøœž³ž³ž³éÓ)¦S”•ÊJe¥z³z³zsÅòŠåËËž•=+{Vܬ¸Yq³ª‡U«ÖÚÕÚÕÚÕ™×™×™svã.ìGE[´E[´G{´ÇS<ÅS–Ài–³œÝ|ä#Å(FñŸ>û[ä¡„\aÚ“7´‘šRAòàWkrS0€ðÈPd “˜vÌšjgá$ ‘/袶0‡2ñ%Ÿõ›eÉ3ã1ãÙ%VΜ97Ø€c·õnëÝÖ7°i`ÓÀF]£®Q×¼½½á Þà GX½ŒË¸ü›ïìOÇtLg-mf³€Y79orÞäñ)ãSƧŒpá<¹sxçðÎáÝFuÕm”C ‡-æöœÛsnÏœ œ œ &Œ cÂÔ&jµ Žã8Žsuû÷˜ïšõÏR_Øeö` Æ`’D’HOçÓù¬ÈþÈ´“i'ÓN®ž®ž®ž­Ú·jߪ½÷}ïûÞ÷-[¶<ÌßËßËß›1,cXư‹ô"½Hã·Çoß~+ä–Û-·²eeåeåø B¥“DDÊù9ç真UñªxU§ñ4ž]袕ÿñÈMê‹ `@déFº‘nj]µ®Z‹°‹8ì ¦‚©¶¶¶:*t”³µ³µ³5~Äø±²¦²¦²æÆä“oLŽÏÏÏ}°êÁª«^wõ)Ì#Rªy?ºÚÏEË»U¸¹ºß6ÞÒÕ@9ýJõèÕ”&¼ïBéÍKãÚRšpo¼vFÆÁ­\–}Ñ1Òι›µ¿~ïOžëGæ49†æÿóÎNí:?{-ðZà5?ºitÓè¦ò®ò®ò®ò…ò…ò…Që£ÖG­wV9«œU¢(Q”(ê“j:ƒ38CÂ.ŒÉ.Â.Â.B>B>B>Bþ\þ\þÜËÒËÒË’+Ï& `שõúî_nï¨N­G=þ³`çVICºÐ•\\\`åÙòlyvMM ' ™‚¤pæï3<ó?í³ýxýxýħŧŧ fÌ6˜m'°Ø ¼oÆ› „B†††ÑÛ¢·EoSìPìPìPÜRÜRÜRœUœUœ±Ž±Ž±ŽiÓ(¦QTHTHTHãI'5žÔ0¹arÃd7¾ßoîfîf_{¿ö~~8?œÎ1õÿì¡u‰.ÑåÂ7gaf1cò¤Ð‚–ãÐÙÔ¤`÷ÉW#æRšp`ÜÝGs·­è+4ygÈ×NçÎpƒôGÖö–YxÁ ^¿éph0¦Á˜cäÉòdy²|¾|¾|¾­½­½­=÷S ‘ ÷«¯š’Û° Û˜&„á¢/^ox½áõý§÷ŸÞú‘Õ#«GVw\ÜqqGçé§wžþI¥ö!}Hî?ÿ)ž7kŸèBºp \ȲlàéòtyºŸìÀt`:Øm„6¾ïû¾ïû~Ë´-Ó¶L»–t-éZÒó>Ïû<ï“ð<áyÂó}ê}ê}êq‡ÇwØó çAσ#‰‘Äè“gI"I$‰¬&«ÉjÌÃ<ÌãDÙ>pXî°Üaylululµ[¼[¼ÛGJöª™ó[3ƒŒ!®ìq¸®£¯õô’ÓµzW…Ï\ÜÇ’Ò¹y03³Éî fJcrƒôüƒÎÉŠy±a=£_~5ú5|EøŠð2±L,Ë/É/É/ ƒ…ÁBi©”3sI%ÙM‚ùÃy]>5âYtxëdpJ´àV›WuäÒ€Q ¥·wŽÿ‰Ò›=Ç™Qg\AYôÙýÃãWî97êšßX§½&£¸¿ä œ»9Û8Ý‘m”!:JÑL!”—õ”õ’õ‘UÉ*e¾Y¾Y¾Yúïôßé¿ûä¬{G3òý;|‡ï ƒ 2Á5Á5ÁµÆÎ;Ë&È&È&Èle¶2[ÃÃî<»¬®Ç—;ÞÖîõ¨Ç_Vƒ àÐÞ¡½C{ùDùDùDù`ù`ù`g{g{gÎŒãHŸtKðÀCs4Gs–M¼ˆñÂ\Á•|Y–¹.=(=(=hñÞâ½Å{×V®­\[ùfûfûf'''ËÖÈÖÈÖÄèÇèÇè+¾S|§øNaþ?ÖД ” ” Œ...™25dª§ÈSä)²;fwÌî˜Q™Q™Q™T HL-SËü—ˆq2öØp‡Þ!é„»/¶ö~I—Ü.¯Ðétû‘ó|ÄNåæWHãÏx1+I- ƒ:ÐùbÞ²¦…Œ`s¡À{C{C{CÅDÅDÅDÙlÙlÙl›&6MlšpåOáNÁ†0üƒ³}‰ÐÔŠi†fhÆÉÉãý­Î[·:¿(wQî¢Ü{sî͹7çÖž[{ní‰333—ttt`K2]™®LWnÏŠÅ?oÄkºÁ/ø…$“d’L,ˆ±ø}qÓA¦ƒL±Ëéyç]œwñRÂ¥„K ‰ïß%¾KMM=™|2ùdò´–ÓZNkÙ¬¸Yq³béuéuéõ?¸x&“Éd2ºŒ.£ 8Àá“ûgïmF`œá gC:‡tɽä^r¯°õaëÃÖ   r.Qvi÷UgŸýsªL?죿b p(W¬Y^{L™®zMó#”¤Ìõ÷‰Z ûs?è WØà¶Æ[q,Û5máŽÆÆÆ>iû¤í“¶žžž¢ Q(Hë’Ö%­K¾|?ø~H™š2%eJ±VqÏâ;*µ!±&íƒ-XŒþð§¿RL<:â†ÍË‹Gq/£æù¦ZŶj;ÝçYÇêˆJÇ—¢B)_tYûŠ.‘l^‚öö|»Î­Á¥%zf>·í‰eåãt§Âi仪å5YJž$\ôš¨ÊU®³õ2ýþësÙ²›d÷¤Õ´ŠVqÓ k²ÛÀ6܆Û¤â b`A]T]T]TæÎÌ™;]O»žv=ÍÖ@Ïž <‹÷ï/Þ¯NU§ªSÙhk.°©õ¨G=¾M°3;®žÇyœg˜&À¤Ø¤Ø¤5¨Aržržr^ÎΜ9;¹’¬æ·&e‚ÝÊ?û?ŽIÁRYqI6ä‘õÉ=ÆcÓ™þËô_²ŽfÍ:Úýp÷ÃÝwéÓ5Æú¦õMë›ËN,;±ìDVÛ¬¶Ym™nL7¦›šª©šrûQ¿gÀ³×bÍâ:Ô¡Žè¢Ãôbz1½TmTmTm4YH¼¼¼~3üføÍm”m”m hÐ2 ¥gµgµg5ÝQl_l_lÿ ûAöƒìóÖç­Ï[?==½Îÿ:ŸSgb‘ld“•d%YIÇÐ1tŒ:TªE)JQú‰»&Ý…ÝOKCÒ*¶Tl©ØRìQìQìaÐÝ »AwãÓÆ§OçTçTçT³­ˆ]}­CæŸî¶t6¶ C ÌžXúºüaUMRYN~¼^Ÿ‘wÓZ†BWC)diPú?o[óÍ¡Elˆ 1!&ĤäDɉ’Ig“Î&õL÷L÷L×þ ýAûƒh½h½h½÷{ï\ïÜg›žmz¶©`HÁ‚!ä$aÈ šM“h ž!˜J&”´V?W¥ú×ü“ÜÞ…]CÞa‘ÃãócL:·ö?Ù$!ø…íwVN¦ÃtVÍ0<©e÷šíòðïp>ªsÝÒë“s?l>U÷`à‡ÕçßÖz9+%ñÙÅÔ@œÆ6t$OHÜ"«È34¢è*h¡P~²ŽÓÈšÆN9„A”Ó)§SN'óÕæ«ÍWëõ×ë¯×_¿P¿P¿Ðd“É&“M¹Wr¯ä^á,6œâëàc±™ÞØi•MYe kX³mÈB²¸çeCµ~ßNêQz|k`Gvb–B ©±—±—±—ÄTb*1eÍ‹’ö%íKÚ—{—{—{s lÎÔfô`õ^Nj|XhzÙ”L¬á4LÃ4âJ\‰+íL;ÓÎÕøŸæ–=΄3á‚A @ï©ÞS½§úûô÷éïÓrÔrÔrˆ ÄÂa‚0ApGpGp‡WË«åÕjùiùiùi¹h¹h¹è¯×_¯¿^¨¾§¾«V©ÕjuÝ÷u]ê"”¨Ó®™ýÒðµ×»Šw÷T‹ŒÆTÿd`ç^ T¨V«e²Æ-o·˜Qxà₤ož?³L‚tb@VÀÑÏ;Dõ÷ï5"Á/ø…›¢…¨4Ó4Ó4S6Ùf Í@›ÎOŸ:?e?¹$—䔡 ep…+\?IÜó%Î)š÷,…RêC}¨‰#q$®vpíàÚÁkÞ¯y¿æý» ï6¼Û0´ûÐîC»Ë¬eÖ2kV“gÙÉe'—¼ÓúNë;­™¾L_¦¯ú‘ú‘úçÑgë™M 931“Œ #È–ªD=¨õP­U­U­%È#òÈî¸Ýq»ãa†a†a†òžòžòžoÞ:¼5M0M0M¨\W¹®r]Rû¤öIíT>¨|PyÞë¼×y¯— _.|¹°n`ÝÀº\±f¬kLÄDLT§¨SÔ)°ƒì(¥”R,Æb,þ¤þ,Äö.îâ.â!ªýÕþjÿümùÛò·™†›†›†———äøåøåøA:Ðô Çé~Cˆ€  Ñ•éJ È//.ÎìØÒ9Ò~a”.X0pËiß^ b9ò _ÂÉdèC âêü HGÏÏÏ X°4`©ü‘ü‘üQôÉè“Ñ'#EŠýÐý Æ‚áxçFƒŒ Zúa釥[%†&†ÞZqëÉ­'£Fl;²-sóO)¹,Ù Ùà3Üg¢ÏĉeK&–hw Ýv÷U÷U÷UÏ ž<3¸¸ê⪋«6wØÜas‡Ž5k:ÖXšYšYšýÁ f3ƒYJFb$Frûí¿§ÿ>ìa{,Çr,g©n¾Í}›û6oæ×̯™ŸeKË––-¹’¬ôê7“’é#x`ÀcHÃN¸Àg†ôslÑÒ9Åý*©j®e¿GIY#];ˆõ›J½$ÜÖ!™Š×ÿœ7â“×Éšàl#à1<†çVëVëV«°QØ(l¢vDíˆÚ!++ëøÌñ™ã3.º\Æ{Œ÷ïihÒФ¡‰\.—É£e1²–²Ž±Ícv(îF <ñØzµ­Ÿ] R½SÒ,áÃñU]WnMüqó¡n)½%§¤ôÖò¸¡”ÆgŽSSzóɸïîŸûé‡îò¾-”žOÌ×ÕúdeO: 61~d/*±ƒÎý!ã0–=ÔÕÖÕÖÕŽ|ù4ò©¬§¬§¬g˜|:øtôˆèÑ#dQ²(YT“#MŽ49booÏ Clüר9ê ÷zÔãßkÆ` f¿°µµµµµU8(ŠÕŠÕŠÕ.]\º¸pG/4€ >»gù½·~,Æb,;Ê‘0FBÑÐ ÿø¶Ñ¦½µMçF ìæWØøô¢ï‡QzyÈ€±Y½rœnv½}RJﵬ;_+y¶•RJ·ÅLJćˆV …B!´P ÎÆRG~W_ 4µVXe߆o÷ñiíÓÚ§u̘…1 ÃÂÂô‰>ÑÿøŒ,êÏÞË— òÿïí3ÙL6“ÍÕL ?…Ÿ2Ò`äÀ‘o„^«½VûH÷i‡§–Ø9wçÜÖ û:ôuhݹ+úk×lëŠmM¶5‰÷¸Yv³,©URç¤ÎÖ>Zûhíö%Û—l_2^à-r>øU=¬m pâF}D½JÚQЀZw£¸§hYñÕ ~¬$í!ÿ§èeš¯¼z VaV©¨¨<ïò¼Ëó.ª‡ª‡ª‡6Km–Ú,Uå¨rT9öKí—Ú/eV0+˜ï]Þ»¼w±e;Ëv–é2Óe¦ËpWq•&К€°…Í»šlUNqfÛŒ ËrUÅ£Š3DŒe@I« ëZÿ¥ØûØvJ7YÒʳñ}{§áÞí£|K?óºcéŒüÎLÇ€¦ž ¯¶4õ,±xœZY`¹Ëã\—”ºõ¦ÇKO(ö(o[3„Ý1„yCâ 6 ‚Ĩ‡Q)]N舎¥‡K”É?œ8ÿ°E;‹víÄCÄCÄClÙ.²]ôb‹ /&p¡9ìjò5^ãõ_þæYÞÛ0 Ã0rŒ#Çè1zŒcÓSc7vc÷'åÛ¢-ÚêÔéÔéÔn7Ün¸]§R§R§R+H+H+H¢%Ñ’h \®WšM³i6ÙMv“ݪªª*ª¢*Ê_È_È_ˆØˆ­žÝ^z|›` –‡º›±™œ'çÉy‹õë-ÖÓ«ô*½ª¬SÖ)ëòÌòÌòÌ8O*;b°SŸ4G36¾u=Öb5«!FÐA4”ÿ÷žìVTr‚Z«Å¾ü÷#f¶›ç»t˜qûU¾7ì5(7ü¨HPӲƵΤN¤|@QSêDŠpV*sª¦jqªÈNdç^à’ï’ÿ¶2§4§´pXá°ÂaœàKb|…Wxõ…©ž³AƬs‡]ÔíÁìQöPöPöHé“Ò'¥¯5¯5¯µ‘ޑޑŽÇU«W“?$HþPÚ¬´Yi3ŽXâG8jÒK¾`pé`À°õÃæ4 —È%rIé¡ôPz°~¶oRSÇ͘7eÞ”Ãzö l÷¶×Ô^SÉ>PíÇŒ)Š~pèÁ¡ÂWyCò†\̼ôàÒƒ ]/´½ÐöÙ¡g‡žú0áĸë¶@ ´ ¤‚T°ûKÔ†ÚPÕÕÕÎN`[WêP÷70XñÇüù òØ·;ow^7D7D7Äe¬ËX—±\Ä2ëvdã¿"ü ›¹+#«¿0Uô8íK¯éðEÇ„ë K¾MȬÁeœÁ%ô'­ŽQÿÒøÀ¾ŒÑÑ,‰‚^¤éÅ4ã4ã4ãÚ÷µïkß;88(]•®JWë9Ös¬çX\²¸dq‰ššZ}O}O}‘0FR~¡üBù…Œ—/3^æ>È}û€»Ê[d #Ͱ“`Ã_Ã;C6Ç—?®qÙÿ«wê“÷®tzñc3» ÅvOF“Ž&~Nï|í­Ú -ulD†nbû½F5ó¢†&G´õ¸£§¿ñÖçg‡?³}æ™iO¿{±/˲ØÃ0‰‚¹É˜‘ô£ãQ«N§}é”Ìõ™W2?'''ò'ð'ð'˜9™9™9eGeGeG•O*ŸT>‰ÛbÓWýûƒ,ë—b3Âj†Š²ß°CÀLÀîRD _Ÿ¯Ï×MMM—6”6”6Ô/Ö/Ö/Ö_­¿Zµ¸Ÿ¸Ÿ¸/‰—ÄKbŠ™b¦˜Ëš6C1”J©”J•~J?¥_ùôòéåÓ…O…O…OER‘T$¥ëè:ºŽqa\Ž«ÊzÜÿάoõ¨G=>°ƒÎø?°û{aaa’»’»’»¬÷®|Tù¨òQÅ‚bA±€ hã矧ª™“[!ø˜‰~hLš’*,§Át¢”5ªj*Ö[&].<Ú½yì"·Ý?xtmXjG­S ~È%t¨w zÆ—‰÷Ç\LH3^dtàT[;£ «ÎE›ê6.]ÿ.gI© ,a·z¥l¥Ì°‡©™©™nˆa_þ©?¦žI=“×"¯E^ n¿”åïÅ^ìýÂZˆ¦ðëÚñ¯œ«œ«œûÔæ©ÍS¯^¼½4ziôÒ³‹gÏ.OÒž¤=I+·,·,·äò” âZË—î*Òœ%@@TAlT/?‡?çüºKÃ. £Sõ·ëo_s`õÕÙ©5-jZð‡òOñO©VÉT²Õ-–9/sþ5ô¼è¼¨Ð§ðUá+n§ÀÄĤî¡î¡îÁgÓôý€¸0SÿµÊ^‹ÍI\€ÔÒZZKÅOÄOÄOêÂëÂëÂUö*{•=›òì3]äÿÛø ÷Â„ŠœšRàlÕ'èV#i#8Î;¯sV´Šß 0Ì…œKŽpù_~¬Çjî²É5t¡ Ý ó ó se­²VYëäâäâäBý©?õg¥ŽTZ*-•–úŠúŠúÊ›9oæ¼™“u*ëTÖ)eKeKeKnÍÍÄîð„¸ÐKðR©R©¨ YLÜp˜´%”¬¯sUVÏ>‰[‡Óq·~¬ùÁãí¾ë>!¶ÆÍ¸ûE‚«”é)Jç—›ù˜4ÐÖ™Œþ / ZÓÒÀ‹wbtüðW/7ÏÿeÍ“ê»á©¼\/88Yõ¾Š_ñ:G³'gªmm¸í‚ƒ‚ý‚½ Î78ßàÜSñSñS 7ȲÛÇ,c웳šk¦À `“ÐUt]ÅÕä#<£ߟ@¼]¼]¼Ýp£áFÃÚs´çhÏÑž®=]{ºöíÚ éBº.ä¦ÌçxŽç\dwkukuë*—*—*—²e;Êv”u.ë\Ö¹âLÅ™Š3…΅΅Ζk-×Z®u{íöÚí5MGÓÑ:³tféÌ*Š Elæ<îyÿŠ|oõ¨G=>7°£;Ú³âŒqˆCœù{ó÷æï™vL;¦>à>ä:ç:ç:sÑ5ÝÐ ÝXÉÝÏî‰àƒA”PãtECÃ4%íTÕýè4:‘ʸ‹žbžºñFLïxÛowÐ8ï1–TI;dy¬ZUg´·âbFê¶åú?(Mêø*¢À…½HÉár’:?Û1sìÛdcc;c§²SÅï‹ó³wçœÍ9koo¯k¯ë‘ä‘ä‘$QJ”e?ƒŸñq~߉ØÉÍ_Xï;k¾³± oñokmjmjmR¦4Liè“î“î“®g¡g¡gáõÆë×›ÇÂÇÂÇÂÊ•*p´ŠP„"ô«êG¬‡[D˜˜ž° ™FF‘QÅ KâKâ*ÞÞ¾¯èèôWÞ.Þ®ªkj…Z±ßd߃}ZL‹Y8f 3—™KïÓûô¾j»j»j;~ÂOøé3]$³Â‘,b ¦Ú§Ú§ÚóºòºòºÖ¦Õ¦Õ¦qý‡IÙ¾Þ1öÞ|\©÷û)¨‡'(û¨ÿÖš?>º:ç^ÿÚVÃ<ÚØq[$¼,¦ÙõÖYD ¸ŒË—fÚfÚfÚ±±±Mµ›j7ÕŽ’EÉ¢dRc©±Ôø“ó°,mv+ö]ëãMa F |ÉK2 ™Žä:‘jiè1Ó|ïîêi—›]*rÖ~øJž£ôVß8¥·{^¼í¬xxŸ½Ë§×4ï¶×ÛËr±pÿýG.šèŽè™¨8bMøÃ°‡²Y”¬qô›èôè—†C±áÇèì?›œØ0 6üÈ–°äR°‰H^à^üÁ# È¡ÐGècØÑ°£aG‡×¯^888†Ž:Zöì;Ùw1á1á1áŠ+Š+Š+ŠÇŠÇŠÇŠ5Š5Š5QO¢žD= ïÞ-¼›_Ž_Ž_Ž­™­™­™ž©ž©ž©ð„ð„ðg‚k–°ÔÏÖÏÖÏŽ12b¤¢¢¢çõg¡™Jã A=ǽõø·ÀÒ9à6{bã·ß6~+""¶ lAØá]á]áÇðwÖ#øùð•ÙûA¤@@“¾xÀ¸’]åçxO˜±äÇ–­BØÝ½Q»&½ó{Jol;‹Òø¤qjJæÇeÕ¾¼~Tʯ{–è0:â°Ï4ËOBZyÙE¨ÂfœÄºŽªàCcqÚðŽ0 dê‘z]}{NÊÌ÷Ýo‹Spþܧ›ë׳ùUÏ¢Ž’¨yÎñ–?Yÿ¤Ÿ¡×W×\<¸šy,îVÓØÕä¢a¢(³ßú…ÇÏ=æoycýKýÇö)FiO/úóºÎkÌl&íÒíF6xUü 8¤øŠú­ºP]ƒïð:C Z¿I’}À|àÌz–÷Nã(JR·P·P·Pç¥ÎK—ºR]©®Tw¼îxÝñ‰@"(E¢HÉ!9Üòfæaýþ@¨º[u·êneJeJeJEMEMEMéƒÒ¥J¼K¼K¼«-ª-ª?Í£ÖmÑ–=Lˆ 1a™ú¬Jkù°òaåÔ‹”‹”‹„›…›…›µµµ™öL{¦½z­z­z-ÈÅ>]=êQ¯lg£zÒ‘Žt£r£r£rÉ+É+É+Ò„4!MòÃóÃóÃkÕ6ªmÄ™ì7q7ÿËž?MÏz?4‡ó–ŒÄcõzZ†ÁÔ™~‡ lZô Ûº¥]µïÅÖ'C_Ú»Lf.@ÒÑ EP\w+ýõ‹•C_|øþt`›×*À*dã2W˜Nä–ÊG%T—0G˜«L¥ª£ª£*ðùåç—Ÿ_ÖÒÒÊ×Ê÷4ñ¬õ¬%OÉSò4%?%?%¿üTù©òSAAA¶ […­B2V2V2öYÖ³¬gY5Ö5Ö5֜⠛_öK;§³ó`! QXiTiTi”¼;ywònï&ÞM¼›è%è%è%x†{†{†?îû¸ïã¾uvuvuvœ~Q{´Gû¯Š¢Éö‹óÔˆ!yÈ+ÓÎÎ.šñhÈ£!ùyó95¤zHuNÈûÒ÷¥¤Œœ"§€y˜÷E>¯æ>€t CDA¡î.á}BŸÐ'ß(—œGÆG»ï ‹¦F½)×¼VÅÐ颞¿ÒÂ%ß ùeஆ— ¶ ¿–YCþsæ—æÊ˜M¡/¯ 6~ŸMxûûßþßÀï·3ÀL´$ ¤+î£$¿jtyj#Ö/˜Éô3 Ù”1ï çsJã#Ʀ4~ø¸s”Þ’Å5¡ôºÁzý‡Õ»:Ýì±46Ç=«‘KßkCjʢ·¯Œ£(³ØdYcÆ›Ë_ËŸ#°Z ±ûðÝŒ]!L0¤›©›©›i›l›l›ì5Ñk¢×Ä « « «èwÑï¢ßÅtŠéÓI1B1B1BÑYÑYÑY®–«åj™£ÌQæõ>ê}Ôû A3‚f8¼sxçðÎx”ñ(ãQZUZUZUdYAVüA4B#4â†XµÝ¡Š¡\H«æª]ƒ3ç7Úo´ßhyŽ6WŸ,y¢ÝñP”µó¡Úõ>Ýè·¯• žñC|áÔÍ`‘/\¦­¼uTØhà“‘Õ33³–gOcz¨TªýéÝîŒWvÎJÎî­N–>©V;HyBÝ–&PË*ï:_ú +kO+¯ã=îÓU1U'«tжõ)úPfZ¦*+¨hWq²Â¸vIõ÷Ç1€@÷<&D¿BÑ1¶HÅZJ=Ò„ñ%Ë0ȉ9Ž…ØGéz IX‹#xH×ã8cÝŽÛt ~¦ñÀŽÈp€ ½Ë„e-KGAFfÀ0Œ—¾P_ Ï«|«z«† l`Ãy빬âõ¨ÇWM³€ÍzO㣉38ƒ3hÖhÍ…å}MF<;>³=ý^à…ùó æÈh2šŒ¦.Ô…ºŒ*U0Š |G2’‘ÌÕØßóŽà J¨É â…cäNaêxêH—Ñîmt7 Ýn¨OIO·&Üë[¤kéªóêwý^ÜȘUøÓú»Çú?^°§ðW§ÔĂڒ.U)øÀæcCÂÕ>ê­Ô_-RÇÒ5W¾uPýþÖ8Ý6¤ iSp·ànÁÝ÷÷Þß{ÏÏÚÏÚÏڡʡʡêÞó{Ïï=çŒÑ×x×%ö%ö%öIo“Þ&½u÷r÷r÷2œi8Óp¦—•—•—Õ‹/F¼ñÞþ½ý{{î2Ó0 Ó¸Œ",žm_JÏb»“‘Œä¯¯¯”Ù)³Sf{õ÷êïÕßbÅ:‹uªUª&uTê¨ÔQt ]C×pºF‹±‹¿`Zë&ÑM†’¡d¨C”C”C”’Q2JæÕ¡W‡^âÌxƒ7õJn_:þ7Ãý!ò?zÍk¦ª<Õ†EÓk¦×e%¶‰\@ÕÕž¦Ë´“%¶H'‹ÈrêO'Ò@lF_´Á\û*묪ߚûS¼Æu  ñ°C,ÃpD0®ÌvRVÒªbsmÜÖ«gð‡¼ú6íGyQ`g›Ž#¯vXà×1r˜OŒÅ!þ{Ý=ºUÒ_'µs#€Ð¡˜ƒ:s$ƒPm!vûflm{þ8骈š×ʼ2AÕ4UvéÛʜڥ…GJTä6ø°º¼[~ć֪vï¢òÌDfeÅ*¥YImÅs^ë"AÙCqãR¿Êšº}µÝ”ÇU]ê”Pï©ë¬l¯ºR— ÔUo¯¢Zª®­S*›©ÓàŠ¶˜L9§g3HØ \Î~p„Ïo¹Ñð1EìÌØm8®ä¼ò%åƒ+–S õtÕU¾Hp„ßHëÉ8±½ð’à ¿TµPuRµ1+i:‹± i"ŒÍ¸…ƒôRé÷X…«Ø‚ÓxŠjÔBÅ-¢jP j¡„Š;®B-”¨EÔ¿•©ûí¯êzåøzüí`»ë_?‹³8ËïÂïÂïbæoæoæ_y½òzåõânÅÝŠ»Ñ´m\ä"—ÛпŽë¸ÎáËhY‹%ÉÅQe£qŒæÍ3šÇJ(w)w)w½ïû¾ïû¾ìv?GÃû«—.<ÎÏM@Ð Á°çI™–¤£j¬z mOG óM†ë´ë×ÎØwþpQÛ³Þ»›Aw òVÿ4ÊË)̯ˆßàxbóãšukŽÉ“¶å/ÞXµ“½³Š”Gõ#Ú™JÔMÔ7é=”  â9ûŸ˜ìØlwÈr§.¸.¸.ø™Î3g:²S²S²S94Âz¬ÇzÕ^Õ^Õ^NEíà@•M•M•Íã /<¾à¶Ùm³ÛfsÆœ1gÜíÜíÜí$³%³%³_¿zýêõ+ÎdgÕßa}æf«`õÚ£…(\À\(nRܤ¸É³+Ï®<»â9ÇsŽç«>V}¬ú0vŒc—Ò4¥iJSº˜.¦‹¹=‡ƒ8ˆƒ_dÿbãFøàƒÏ+âñŠl¯Ú^µ½J¢?ÑŸ^ľˆ}‹ýØý,áªÞdÿÒñ¿îÉÈEËî«k£ªQ?)¾PTëBtψMQ«ª»VhµCäÀOä;Ö Ž©ã£!l`öMÔåþUƒ"¯Q€)Ø‚[êu-U‘n„õ<¦3éW:»Ò¦Vr|ö ¼º~7n¿ZÓ¡qöÍû´Šón;Æ{YÅÉ*]R$X*g定ä3*h¨P¥–ÔZiKm¾µ4 Jõ#€úг­D]ÐVˆG:š“Õi@æ$ŒLDˆúuCwÊ£1JFSK=+-jF–(ïV[Uú¢²emp±u9­É(ý¹bbMVñäŠiµ}ÊøWjJƒ*gÕf–~_1¶æE™º²EâC§²‹Õ+’ªw×ÙU«.R¶®ØZý¡®EåÙê6Ê9åk«.×®+Uv©íR)­Ù¡|TaQ5µîUUתæÕ#ßåÎ,JÔQë© öÕ®Qöa&׎VnåÙÔ_YÃÕç•J0ÄîHÀ¥ø´ ÓÑ È&ŒC âH;ø’uˆC ¦ iD&’nhHŸ!…8Cïà öâM¥'q ¯p‰x‹«xˆL¬£Çñ˜^D"2ñ+îá öá2Òð ïPüÕéÔ㯦¹ÉF€ôFoô&wÉ]r×]ß]ß]ßÌÍÌÍÌÓbZ\(.Š_F¾Œ|YnVnVþqü€ÀiI­ÅZ¬ý"½ï”¼$/ÉKšA3h†ñ^ã½Æ{Ååârq9S¸¶pmáÚš53jfp4HVÄö?û¼šJbj¨AI0ò±ˆÄ ²\=›ÚÒW*¨ãébƒeÚ•¢ŸZµ:åõÓØþMýÍ-[8ëÅ@­ÔWX÷sóz—ßÚ¡wnnÊûµ¦GÃmϪÊÏ.?ƒÈxñL*Ù­Ž§©T=šjÓöWžu=üóàÍ¥¹4—%¥ÎOŸ:¿¬eY˲–>Ï}žû<×Ý®»]w{éÍÒ›¥7Yú('˜‚¤° zž¶}ÚöiÛRCjˆíJÛ•¶+8p8 .‰‹Ò~Hû!íVH€&nŒÆhüíùsîq…(D!'™„$$úúú¦ä¥ä¥äy„z„z„Z¸[¸[¸«Z©Z©Z½(~Qü¢X½O½O½ó[‰ù¼Wb%V²É†Ìû˜÷1ïÃ*ÈUÍ®š]5û列#^ŽÀ$LÂ$®~êñ…ã3BR1à†EØ!ì PòãKz®h:°ùÏŽŒY*Dêëêïï·Éû¡ì ¼ÝÏ=O-/T•VÓ…ã'L¦yôjîþ}ƒÈGÕø`ˆžãGœ#KÐ÷! >ô;º†‚lâ×_ÞV'¬q”|¤ _¨p¹óòvz½r&Vê{1: ¢üëä")ÀÒ‡±gö¢œ3Ÿ¼"ÇÈϤ`:“‰!»2 Oæò kI1À´'·Èà` $‚¸h or¸h€°Çì¿¶0H9Y¨„êÞ@íh¥·²oÍU¿êìÚ“ÊÕUµjÕŒÊÖ57ëâ+Ó«'(×UÔš¨VUï®­t®Î®MRNä7úKNÐ`²Að¡Ø©rвîuÓ·‚÷Ír–æU(-®Lª]WVñ¡vv‘yYßêÆâqõ´²>•Fµ~ùMŠ®[â]‘S{@£MÕ÷Ô­i9Í„æü%o0›Ð“9Gº’;Ls””ÕdšÐ¾t-îóÞñ®1WU—ÕétÕ<óùXvvêlÛÙ4N'®$®æÅ/Š_xGói¾*XÕXÕÕõ*õß$XÊÁÜÁ4DC4´a3Âf„óBç…Î UkUkUk‰ q!.Ìff3³¹¶Em‹Ú¹L.“ËdÞμy»fOÍžš=Ü bBLˆ 5£fÔŒ£‘|)[Þ,[Ýžð$]HÒÅ»§wOïž&Þ&Þ&Þô}FŸ% H4 pMášÂ5ØŠ­ØÊ™_ÿ)Â<0PB5t¡o*³‹,RMTw¤cØ"â7Â=¼÷C&µ™å5`m«éÞ3¼œÃLöê[ôÀœ'J¥¬Z¦\³‡^2~^³°f÷Ô»ÝSog>)ν£k¤3naÝŠú.˜×ÈA ç×g÷üþoø¿àtB't2­1­1­ÙÕwWß]}õžé=Ó{ÖåH—#]Žd8d8d8¦¤)iJOÓÓô4gj³â ¬¢¹#áh-±–XKÝÝÝ]]] ‚ ‚ ‚S3R3R3ª…ÕÂj!1S5US5jQ‹Ú/Æ|gïÐ NpâÒ0E! Q¦#MGšŽô8âqÄã¿)¿)¿iÆ–Œ-[^ñ^ñ^ñØ4ŽˆE,b9ÿ=›Mås!‰$‘$Ò@HcÇ=>K9K9K™1!cBÆ„!¯†¼òªTP*(pÊ{ÚІvýðüåâó¸'!0ÊÚmÊM*ã¢ìªÊš1Hgõ{å2Z¡&Rò "˜Ì<¨¡àcè"ï®WÍ­J¨i:œ1 ŽT™ØŒ#ô8O›É"' V4Õ-x6ðÞô{Jž’§Ë++zT\Pœ©»›—Â{³xÄTÛ«_¬y wÿºà´` ÀZë‚h3ÇP¬s@<]¯‡¶©h¶Á:&"‰ÁfEâ‡úÖÚ.¢xƒ3ÚýDí é®OÓŸ§&ºk°Jç¹øµþmoáñná`þÑ5„÷JÔN8‹÷JÒPèÉ?(ŠŽá¹Šátþ‘ ÏQd#Îsã7vçÙ‚¼h@ æ$žÂÑüí’PäjƒÞÃ!m ‘fÈÄÃ`лŒƒ|·°PñT€ú´z@3‘ „ø›X#\Ý€vÔ~t§ºTíCmT|u<«šªê¦^ ¢a´Z¡òP7R™«_ÑÊ¢õ¥j®t-y_UW2£âjMvɈŠîµ¾E1eëªß,*9]•Vr¨BQ{½@»duÕ»âóe'kªŠš”O©¹\ޠʤŽWósídåÍJÝšvÊ5ÕOk+ÛU/ª¦zYëV—¥Ê-?T5»ÎPå¥ÓvjÐ!êÿ‰RÞ]èvöç|¢ÕòÒ!¥û˜Iª£ª§%' Öªº( •…üX~,?¶Þdÿæ i:°Ù+¢!ê¯Ð_¡¿ÂÞÂÞÂÞB}V}V}–5 jkkÅgÅgÅgÇÇÇl^Ú¼´yivÑì¢ÙÅwï2Þe¼kõ®Õ»VµOjŸÔ>A>ò‘Ï¥\aõ4R‚”Ï”‘ÌÖÆTLÅTÖ[¬³Ug«ÎVý<ý<ý<ú†¾¡oJß–¾-}[ú}é÷¥ßs‰ä.â".þžH3Øs*z#ˆ„’,F(¼`¬ÒQw¤Z·DYüm-®‡”Ú/œÜ³§g£î7<öšoP‡EãBN«’êòÔNôº¢›öaaÍž°{=ï½xn”ûà&¯ŽÇ'WÕ­Ueô¢„B‚_ÀG5j ä®þï˜ì,Xv-jQ›ß5¿k~×Ì^™½2{ùøøxNñœâ9%Ã:Ã:Ú[ÎÏ ¬À ΃n+Xe-ÉZ’µ¤Î¡Î¡ÎÁ¹sç6ƙƙƙ¾u¾u¾uφ>úlhéÆÒ¥±[°˰ ˸t6Ÿ³ù®yW/ñ/¹ÐÕ4¤!-Ï9Ï9ÏYP'¨Ô9p:átÂò¦åMË›63lfØÌxVø¬ðYaNENENiH’†4&ЄÏz´a÷²RI*I¥nÔºÙ]¶»lwYËRËRËòͨ7£ÞŒª´­´­´åzÓ—Kª‡þ7Ãý ^â-ù ËÑŠêÑ!Ô17³,·R`„Ì}¥)mJù†-ÄË„]DV¼ ¦÷«@˜Bï+e¸ÿ_ÁÜìj ˆª\}Œþl8Ùà;ëycšŽ~þ:*}æë…Y¹ï§½Ÿ¦ñË8tÂr  µP¡@Ü{|èS tÖ(5ä“«5ÚOþßâ·#g4Àv@X"°g2µ%ÁºŒÖ=¡J{«ÄP®c¦• |+-Ž0ÚÛ$G"íV’–séÉQA•¾»¶ƒèƒno-¹¯ó^ËTðTû„V{áuu’aÂz~ÒÂíú¯µÛ‰íÙZ „[t’$Ù›:Wµêgt¥§D³Èw‚…ÄP¤/Œ¦–oo+ÀˆŒ. ‡ tÇ,Á è‘Æ1…+€nаSMÚß;0`müŠòÀ`"|a @=«a„`èÁ@3èâaõunÎUÝêV”¯ø±vkyUÕ»Z¯ŠAÕo•*j×.ºU&¨ÙSQPýCÝúÊ êUuÚeÅ•!uKË+~¨}Wܸ²CíóòêâüÒÅL¨íßÞÓÛ´n3¢L×ðª¡ä;Ãq×Ú6;ìjØÕi §-œ†8‡´ê;ÁWMƒf&fb&+™*²Y‹¬ÝBÜBÜBx7y7y7™3ÌæL†$C’!É9s ç€Åa‹Ã‡-c,c,cø»ù»ù»ýýýí+ì+ì+L~5ùÕä×w‹ß-~·8; ; ;€ö¤=)'·Êå3nhWx…WŸ‘iÅJô²F'5ö0ö0ö8 œNì7… ¨{S÷¦î á>áÓµt-]û¼¢ðP‹:¨_Xñ>0 I3UŽºÞ¡MéID8 ´s ßêøý8YW×ÀuÕþ ­·a" D$€Ýx„_•WÕ“NϾòúê†îÇëœ~’Püúà'”â&1“ŸlP¹¨šÒ6x J9ƒ¹JÃdÿOÍt1 “0‰n¥[é֔ДДÐFûío´¿áˆ/¾<óúÌë3¯†0„}²ö–Ã&?ó8ŸÛ4·inÓª¼ª¼ª<÷!îC܇èèèx;{;{;§ìOÙŸ²¿¨kQ×¢®øßã{ŽÂÄ*Áþ»=šä™æhŽæD‡èw‚w‚wq¸@\`ÇØ1v ¯¯¯s¹Æ\ã„§á g®Æ>g°‚ž ( @ô@k;k;k;­%ZK´–¤õLë™ÖS™¥ÌRf1ÆŒ1c¬Þ¨Þ¨ÞX?TùSÍ?†¬`Æ›Lv;U?Ú’&Oˆæû…ͽв4øzUVé…ÊF¼ þ$^çnËwêù°Ä³ÂˆlÂSl§Cà‰¾õUü X–ê¬ÁQ¨(Tp5àvÀm­³Ò¥?>šühÒ£IE‹Žaæ1í™öªëÊJoÚœªiÌ` + ´IOÄÂmIÑ Ñp"Ý €:"‚8 3‰‚ é…&pG „Á}О¨@5Ôê%Ԗн´ê?÷v_rµÂ%‚7¼¢O)èÏòº ‹Gxïfü$FO;Vë­¸±ïïžW¬Þ˜xè6 “ë* ûç%¾{©=G<š7Â`´Îñí=¢%&ïõ÷J^é´ÑúAèhöÂ0\KW»ô¤è¦ ˜œÉ ä;ófó­x.$™ßšļÜçÿÄØ —ñmyÃùe¼2rñüæ¼Sð†1uq$[Ü¥oXC€ÑPMKXS¦ÐˆŒH`>ÉT÷h ÊCPö¡ ¥¼ç˜Nï^.´xÐìZÝx«{›ŒÃfg†uñÕâ²Äà ú{²Ž.¡îÔ å¨Dm}'øÊá8p¹nâ&nz]óºæuÍô²éeÓËÔ•ºR×’ô’ô’ô¤õIë“Ö«6«6«¸àn©·Ô[êmûÚöµík“““A– K¥¾¤¾¤¾DÆ1dLi«ÒV¥­2y™¼Lëy¥|ʧ|ŒÄHŒä eÖÃÊúØþ[¦k6±‰–Þã=Þ3ÙáÌð •A+ƒVjÖ­5ºöMí›Ú7/=¼ôðR…s…s…3—8åãþ«r ’TPG¼À,rŽiB.ªÔ¯é ¶ˆü@À6³&é¾§áC¹EÀ-ÛSü•b=þvqPnQç%öä}“™’íƒo?9ß÷î÷w•>ª)êL2ˆ°0„.=BÈDÊ8úÍ_ 1Ä3ÁL0¬NQ§¨S¢îFݺ»¡Ë†.º$ôJè•Ðk@Í€š5œÛÒöQ-ž{#¬ÁÍjû°QÎp†³ÄUâ*quKqKqK1Ž6Ž6Ž®ÙU³«f×Ës/Ͻ<—=4{höPNÆÔÖ°æ’}QªG¤%iIZR•Q™é/¦¿˜þâèèÈ„3áLø‹U/V½X•y=ózæuN¤Õ°àh3Ÿ'ؼò[±[ù Ÿá3k³æN”8J%3wÌÜ1s/ ½0ôÂPÞÞÞUwUwU÷úAúKÇÿæqŒwÈez“gHUÕÑJä{–®¢x!д1M>æë2Þ:/E;„ÆPØA a}å~!„²kbÖ{aTdTdT¤ËÓåéòòžæ ó„E>|(POVïWïWßTY©¬p›p—ÿÿ“qcä# ³P`+€d€³( `nà6˜ À:a ˆA7ŒÃdÒÁd1†"Sу4"óÉ@„b2º£!&‘žhD¾G'`6ú‘ÆHCJéšE»«÷Òj:˜î£å A›AXÝä£Ü‹ ¿¥—þˆR(}[ç'zašù¨¨#i¢ÒQÙ*;ßµº;õù•q]Dõÿ (­Ñˆ;Ú€}g‘’þÂJÞ%Óº'Äïu\´ÄÂtÝÇÒΆúûµ/‹>úèü(ž­S¥µ_Øß°½î*q½R?Ñ`½(©p‹ž@;P8_(Ìäëè´—¶KkÅ­)Òïʼn‚i}Ñyþý+Ò\‘…ÄTt˜G2C¤ÇÛÂo+RðÜæ H:ï ºÄܪ¾P¾¨ôVÙ™::Iž«”='ËySòøï²Þ=§¯±'™ ²ˆäÑrZIkÁJüõøšÀ2ÚÙœŽ]Ð]lllL™3=¦£££²RY©¬^œzqêÅ)U¥ªRUI"I$‰¤NÔ‰:Ul­ØZ±•å#dgegegÙxØxØx¿4~iü’8'â¤c©c©céÕÌ«™W³¢uEëŠÖevÉì’Ù…c‡³ðƒü¸œÓ¬ïŸUªù;Í,ö*¬«b b qãÆ Ä•âJq%«ƒQ4£hFÑŒŠ³g+Î"ÁæLöæ>Y:ˆjPøÁ ÆLƒº¿"•ö Îˆ¤NjP4.õœj!®Û~‡oiÏ~1¦®q¨Vòmusu%@õéÜ[¹IYï’·8ùþÉ ÏÏ}ÖL­§Î¦yXŽ)/‰yKލv©  °û DàÿM&; V*W8¦rNeNeNeÁ€‚Ì:˜u0ë`_l_l_üÚùµókgòùü@—Ò¥t)·xcë“]ÎU \BÃB¢°Ê¨Ê¨Ê(ùXò±äc.k]Öº¬5¿k~×ü®k€k€k€ØRl)¶L?™~2ý$Äy§q-Ñ-¿€¾I@@8Þÿj¬Æê¼ñyãóÆ¿,|Yø²ÐåµËk—צ>¦>¦>ï¾kø®¡ÊBe¡²àb3.à.|v‹–ÝîA<ˆÝMwÓÝVc¬ÆX111ÉŸ“?'Nanana. P€jBM¨ÉW›#¢¿Ó‡pŠì=Mýž9{RºðÇAUU^Ó/ôr£¹sËûŸV„:©¬¹üväÞ|Ì·ZáG8ëbÄŒ˜û™ø™ø™ÄzÅzÅzÙ¬³Yg³Ž+É2V?¯â#Œ  1€ Æ ü±‹Û؈®Pá F“FÈÅÒH°™,&n8ÄœaZ+$“ Ç#—×.ýœ/+òäéŠ- Oùf+S˃– È~"Ã%¢$›‰5™Ll°‡ô"bl"-Q‹UÄï0àÁÿÁ÷'Xò*_ÝÖZï…­ÍêkÝh 7;¡kånnÛZÿ°–³» ‰I ÒuP {ÙuµÜufâˆ+íV.ӛгó¹Õ—Fïlj{vë¥æ{×¥¤”ÒGZ”RzWH)¥7Î?øpÇOà(3¾ÈU!%«‰ÖÔg=¾thf^ü¿~Ì©¬ÝM»›v·ˆÙ³#fGO‰ž=E^"/‘—XïµÞkýqlds³°…-l1#0‚æÓ€á[÷†oýø?ð »!»!»!+’ÉŠää䢊¢Š¢Š¼£½£½£u×ê®Õý”drWp…Õxæ¾ÑLT÷×Õ‰¬`Ź*>/}^ú¼”'Êå‰r\ ûûû²1\"¶&“¥´>:†H( °—ȼ!§4‹8UY]Óo¿S<¥]ÓØ2Ãó¡#~¢4áǸJo{†Òøuãr^îÞ;³°ik¾×Xé.ñþGÏ´3l`IRÉ <Ä=lF÷ϧ粡Ìì±4]š.Mßh¾Ñ|£yâÐÄ¡‰C[Ìl1³ÅLV¥‡À àü §f•IØ«´"­H+ÇrÇrÇrù ù ù E´"ZíêêÊÎÎç‚qÿ Áçß[€ÃÆBg¡³Ð9,.,.,ŽÍ/n2ÅdŠÉN`‘ÇüŒÁðô0 S1U£Þ÷/«É  Vc$"ˆr0ì!2\`ÈV3G!ñáµe~$ãy×™d²—ߟ׎ñsx§7Áw|Ó7ÙCVŸI3$ÿé-‡ðŽ X¬Šìò™éŸ`dÖ¬a~ȱˆ%JÙÁØ©^+=/ú »½¡û}]±—«/Wrylr;åÅ…ŠÃéé9¿~ùð̵«¾ïô‹øšÈAhLrHs'Ó‰ÎR3õøÒÛ6 6®=Ú£=oooQà¸ÀqãdGeGeGå¹ò\y®ÇmÛ·9‚†Î ç§×+X°Ê*šéÙó‡<ó±æcÍÇ6Êh”Ñ(CÞAÞAÞA–!ËeÈ·È·È·DmŠÚµÉÃÌÃÌÃL'“Æ}rÏì9eAÆ‘jþ:°Ì{)¤jkkkkk‡{†{†{Ê“äIò¤      ÞcÞcÞc®<›vêÇÏõìKè!¿`0cJ6~*lçpÏÒ\Ïh‰ïðï#^'œ¾0l ¥·Tq‡)½Q0ö%¥wæN°Ïwè†㓻v §k¬µBh­y^"óš‚ø˜IšÕ¢ù|ÐýÑŸ<#ÏÈ3ö‹)7¦Ü˜r#M¦NSMš:4•{cž1Ϙ[>ý33‹>èƒ>‘`hhE¢H‰íÛ'¶_–_–_– ZP-ø˜,o'vb'«ÇÿŒo¬¸*;Ïœ·9osÞÖ$ºIt“hß‘¾#}GrL÷žè‰žŸû~>`UÛðŽðްä¥Ö“ZOj=éEÍ‹š5+Æ­·b÷*ú‘~¤',[o¼H™ÎËö9Ø´¬Èž©×·YÝ®¿ôžFéÜÃýçŽï"#[¸†Ro¸ÿ0ØC×I®“\'Å>‹}ûÌmÛ ·A\vãòë“jŠA bØÕ Ž9(r¼J^%¯ jÔ0¨!W’LYoÇ¿Í )AhDZ†Ä ë1Ÿø¢t/è6×9ëþĽ­ÛÞ¨¥‘ï#Mc?ÄÅ´Š)‹qUØ7i;<&:zoTrä-·–®?¹<08f0_ÿ•æOÎ|vàdÏ“—&^Né¿ ; $wänç%ã@|á G˜BáoæZ=¾\°‹m6c%À%Ë%Ë%Ká£ðQøÈÚÊÚÊÚ  ˆà4:þ š&‚|àÃIj€777ÐêŠÕ«+ÁW‚¯_‘O–O–O–-”-”-”¯•¯•¯GÈ#äN~N~N~âóâóâóŸ\%Èà µß÷—¬2 kÌÔ6¨mP«è¨è¨è¨ˆQÄ(bìvØí°ÛÁ•߆mØ#Áè“ó°t¶Jz16ñú2ËÈ Í"&öz™‡¹>n…òßéY;ð¥w˜ññ”^¯ÛÒ„qgò8=$bñî¡·Â?Ø1ï¦ó I€éNn-Ò™0ø¸SÁÿ-)Óg Þ<Þ<Þ<–ËÞ©S§N:%Õ%Õ%Õ­ ]º*T#ŽÇpciå?­j¥ùöÙ„DlœÀx»ñvãíááá±Ãc‡ÇoTܨ¸Q±nC݆ºGov9j cÿAKþ|À>éIœÄI6"E§D§D§$Ú&Ú&Ú&rnäÜȹº;uwêr­'p'>»§h‡vhGHáæ²7FÜq#uSê¦ÔM“c&ÇLŽaû¯5¯5¯uýPý͹CÖ‘XöØ_jÃ7KÉýyŠIÏê¹³ÌûŒ tî¸þ½–­lãþ‚ë­õ†;W \ÆD{ØÃ^è!ôz4^ÝxuãÕŠ}Š}Š}ú{õ÷êïå2²[í_‡¯]¬÷‚EÒÖhv£Ùf+¼Þ ïДДÐÑFÑFÑÇhwÖÏñï€Ýy½o™p¦‘°«p `;ŽÝøMFøŒ¥4~Ü„;u/ûŒ|¡ò¸6ply»%Qzn»¸Þ$%?íßî“ÿ•½ëo¬§ü^€÷ÌÍÍY:ª2ª2ª2ºAtƒèzÅzÅzÅܯ¦jì)ýóf |ð¹QâáÐ'½¯ ¯ oƒìÙ ²ÃÚ†µ k+ÏgÈ3ä¶r[¹­üüüAXpXpXpƒ. º4èŸßÃÿ4ûÁÁM?ë¿vÿ½ñËüËüË!LÂÈwÉwÉw…÷ ïÞKª”*¥J®Ÿà žp¿e}›Ágcr˜_#ÒHóôÆFzâ›S§÷ª :ôZuÀ¶¿¥ ã»Pz#ol¥ ›âjKï³^¾òƨ¨²ÍJtJ?yuFLGÒcÐ ~0†$Ÿ¥OõÀ2›kH áôÅ}m}m}m/>¿øüâó¿œøåÄ/V[­¶ZmåŠ?!OÈ“õüÜ1äúoñ–ýB?P?P?](ÆfÆfÆf†M ›6Å(Í(Íè#Ñ(™È„/|áû/·ó¿lZ4v'|ö`çOž?yþÔlu³ÕÍV;«ÕÎjN­…Í™ ¹ ùpçpŽ=‰D"‘hUäªÈU‘‰9‰9‰9]c»Æveg@&„ aB>ÙÙ«Ç·F›4‚ŠLmËð^¶ˆkÒ%šÒÙÇûn¢t®_¯=/»m‰á|õ†»&ˆ± ì±Å~‹ýûc—Æ.]ê—á—á—Áä3ùL>«pŒÎèü‰Äã×}èCŸ3;t ÷b÷b÷bù;ù;ù»¨5Qk¢Ö˜:š:š:râVÙÈFöÿñZ,µ€MÙ­ W¸ÂÕPl(6{Þ÷¼ïy?zgôÎèò¦ò¦ò¦²|Y¾,_¨T†öíÚßi¯Ó^§½ZË´–i}ê„A„‡xˆ‡C üá Kf¹‡¶Èª¼1F1‡)½}dü~Õë#ÇtɬËÿÛ$ªyuv¬ÈAr4‹ˆ¢EÑ¢h'''ÿ0‡0‡0ù]ù]ù]YSYSYS¹J®’«‚;w îdÕÓª§UOž’§ä}*\È’y4³fþó®ÖD‡qÇÒ݌݌ݸ%ÄnùnùnŸPŸPŸP.p–ýØ¡l¹˜à&2Û‰’¸  ÁQYti ž_ßn«ÏÖ—V{—ö=Fé­Š¸µ”Þx36…Ò[¹qKëL.-E¶;M¶n"odìf6ö“Ê›@RˆcNÖü–“]|‰¤56}}"¡í®í®í~0ã`ÆÁŒ=ô|Ð3 6 6 &0 Ó‹éÅôú—Û›f°² ¬9Ð2Ð2Ð2ˆÄ1çcÎÇœìÙ#²‡¥»¥»¥;÷+ÖgÏÆ-üþœŸÊP†2öÐd»Év“í²rY¹¬k¦~=þš&2/q†=Ö3Òº,¹”õ}yZ=×­ß]Jç÷«>s­_Ñ$Ð&Ç‘†Ÿ÷fãß‚hD#šõ“’@¼ã½ã½ã›T6©lRi3Þf¼Íx®†u‰.Ñýjëú—c9–³^=Ë»–w-ï*î)î)î)Šû^ö½ì{qµÁnÿýãÉFÓ˜ð†7¼‰=±'öŸ”Ù‚-Øbìjìjìê—è—è—µ/j_Ô>y¼F^ÆÇÉˡvíÚÁþ¥ýKû—’3’3’3Ÿœ‡ QˆÈ²àýÏ=?c ™FqTû¶V‰xéÝ.?mìG—ßô;‡Òø+q¼Ó7–Œë”&¬êòÏò"™ïÉá<ÆC ñÿªïôwB³n=àV‡:äøîÝnpƒ›‹‘t&Ig_=_=_=ùHùHùHyг}ŸxØ>Ë&Bú³«ÿX/&Àkœ×8¯qòòò2™‹ÌÅÌÒÌÒÌRhA‚“8 .¨”çÂô!Ÿpp §1¦‡OìP·>Ä?ìÞÒ½¸Ó”ÞäͦôÖ¸Eu¹—Fß¿xf»·#ü|Â,?¹[¦¹J2™Xa/º!®=÷‹o½l’ öxá“…O>y’ù$óIf/‹^½8Wq$ŽÄñŸbºÿã–ÆŽ ‡q‡Ù/øùù=ûyöóì§x­x­x-{+{+{ë`â`â`òÉyXîgà&cût¬BN$"I&“Édré §6œÚÄ£‰G¥Òæã²vFa·ðþn?–Ä~äAصµkk×6>%>%>åÌŠ3+άÐÒÒâÞÚ?&æÕã«Å> DGâ~ÃØ“Å7ÂnlÙ˜ÒùNFPÕœƒý®ÞY2ôJ›Ëò8óM×;(°>6 $èhëhëhGŽ=:lBØ„° âÍâÍâÍœ2.«&ñuã1ã1;”èÛèÛèÛÈÞËÞËÞ+¶*¶*¶zkykykq\á`f}²` 0l€ÝLÁÍ‹ðüx~>>r¹¾\¿ñ³ÆÏ§ðµøZ|-ôD,\ÈIÒI!™.ÔRpÍtoÞ?Xf'ºtg…wÇÁtïþc—Szs÷8¥ úq×U&WÈhçK¯Wôì¸J~! …Í'ü]FAN¢Žñ%û~ÓÞf i_Ó2“xì¢Ó0 Óºïr¼ËñûSïO½?uÙ¹eç–#ZDë7%«P„"ôߺ¢æèǾeÎp†³ƒ¾ƒ¾ƒ¾|¥|¥|e̦˜M1›ÜŸ»?wΫæUó>Ž«ë°ë>ÓúÔØ°ìdÙɲSL`L`L`ðäàÉÁ“™ÅÌbf1yeØ|n Òt !-æLÌ™˜3‰‰‰Û¥Û¥Û¥Lc¦1ó±ÿ²¢–õøæ …B~8ãH8ƒãÌä^ãb—Pº`ïÀ”α듪ݨC€ö¸Žè‡fp‚,¾ÑÓ4.Û¶9lk2 É€&<{öàüß„ÉÎb –` {(öû‹ýƒsƒsƒsYŠ,EVÃY g5œ%X.X.XΕ‹±ûÉÉú<ØÜ`&1“˜IVr+¹•<`HÀ€!2[™­ÌVî+÷•ûÊÒdi²4V8 „µl=Øz° ^/ˆÿ仡ºqˆU!áþNxæL;ÂßïïÙð¥ =Æ·¨ë|¹á(I•õï1Ï£ßûW7à¶2y#˜]äc Þ‹6£iüic‘d’L’µUÚ*mÕ'n¬fˆæþÃ×›ñûçb³N GŽ0!“ʤ2iT~T~T¾\(Ê…š–-§uýÏ·¢šçg[ïflÆf4A4Ñ,høÐð¡áCÿ­þ[ý·Ê{È{È{È’dI²$¹¶\[®}6úlôY¯U^«¼VéÔ?¨ÿi‚tvßl6aÓ'õÀCLˆ áÞþ¾ý}ûûŠE„"B¬V;¬tØà°ñ'«OJÉ"ò Ÿ¾Ù» §v†¿ö_Ö¬ýJo´Û•Òø’8¥7‡Žs¤ôV縨KÍW>îÔ e|c'û>ŸÜU DÑù…Ñ">˜ƒ¿©"¾^^/iOÚ“öì±ïß!¾Cî ¾7øÞà“sOÎ=9Wä%òyqo¦ º Ëx”؈ب)¥`¹Ür¹åòÈY‘³"gÅÇÇûÍõ›ë7W´Z´Z´š»g1úÞÿËF0{u–xf+X F F F‡T…T…TÉïÉïÉï™M6›l6™+pà¿üâùàƒO𓿤9+3=Âe„Ë–¿9Óe¦ËLŽØÃî'°lþz|›à»2ÞdDB{ï‰.¡²W”.08޾œíÝwTÆüñâïëÒRHœ¹dbÙç­ú Ð ¸±nooA¨n¨n¨®B¦)dúÕúÕúÕÜ:x Æ`ÌWkôh‚åñ›Â¦äyDùv÷íîÛ]±A±A±!jQÔ¢¨EºFºFºF\mÜÅ]Üå B"$Ÿ¤ôâçç·¶µ¶µ¶ ÒÒÒ—{È=äòáòáòáòòò²Ó²Ó²ÓÔÔÔ–m,ÛX¶áïàïàïøä®ØàBoxÛó©ü; ›b© Z"”T“¨ÂTd{¥3ƶù‘Ò„Uqå”Þ83¶ùSÝËúO7»iÔQ§ ùèa9¹Fz"…»öß9™iNÆ¿†_ïñyëóÖçmľˆ}û†‡ nXeXeøÑ—ɲ!AÈ'íÿkêË,X¢‹ L`"x,x,xt%èJÐÙLÙLÙLE#E#E#—B—B—…¬ð¢#áø_ëÝìý³Úì¢WÀc1‡˜C¦6¦6¦6té4Ò‘»ÉÝänòyˆ ›ttt²ª´ª´ª vvv½‘½‘½‘)eJ™R>P>P>0À$À$ÀÄRÏRÏR¨ˆŠ¨>¹“ à“”4ÿ©iCÃ_NÞ“‰È!^8?Óõ¹Ò‹ÏŽïîÓß_5üFôØhJvÇß9{Z£–Å"­È<ÜD Ü?äý­“뮈ÒEé¢tÿþ'üO(F*F*FF¯Œ^½R¾Q¾Q¾1<8<8<Øü¦ùM󛟜ánáÖ'Rž_‡Ï.Â'c2&³ O?O?O?ù"ù"ù"YŽ,G–¸9psàfþyþyþy,ÄB,Äp ÇðÏâþ5— l”Âï$É2‚Œ°>n}ÜúxðªàUÁ«ä¥òRy©,F#‹‘_”_”_Œxñ:ⵓÔIê$•¬•¬•|’扄`„X€EÆ'ŒQìP8ÊgÆ”ÆÌTzNõêäÍžFv³ŒÂ×N$ó­JûÕêûË”Æ_÷žÒcŸPz[g|TJÞîÁ}– Ím+ò~*xÁoÏìÒ¼ïó†ÃLømäü6Õ™4DB;;;VD¬ˆX‘¸>q}âúNuê:Õ! acš1͘fa»²ƒìðçЭ;[wvȲe!ËbÔ1êuØì°Ùa³ ûö7ìÏýj<Æc<«ñõçüû¡1j/Ó^¦½,¢SD§ˆNÑÞÑÞÑÞúaúaúaÜ^:K¤üoÍÿxÄ3[™­ÌÖ]»2ve<)}Rú¤40.0.0ŽQaV1«˜Uõ9C¾iðZ{ƒ‡æljfœL«çY pS­šy¸K±Á´½:7µwµšÎ6¦#éMl¿¡ b»;5²ábíÐí|#|#|#š>lú°éC›Y6³l>æJ¼Žë¸þª¶ÿãJÒ'úDŸ}j‹',NDˆþýAá§ðSø9.r\äø‰ŒÄFb#±qîìÜÙ¹sp‡àÁX¹=9‹òòÑ¢/D_ð÷÷7icÒÆ¤ 7`i‚M¥ÎJsj¦žù+5 Uæ1ãK¸Äh×€ÞvòJ“ËÎc´T].ŸEé­“ãÖ·ÝÁŽPÁ³b“!‚tÿÂá–e¨³ôâO¸D$’,I–$«QËF-µ”—ÉËäeÑnÑnÑnÑw¢ïDß‘---yÈ—‰‚Ä0fŒžï¿_ü"ìd1Á×§ËúúÚ¹W9ZÎ^Ùß3¸*g剿C~¦ôv×ñq”Æ ÇÍ¢ôÖ¸y™Ãi øi”´c ¿“´¤Ÿ8’Jò#Ò‘ŒíèùI~Ë&Ic4Fc’M² §Á5à΀;úbê‹©3GÏ=“sL0G˜#Ì‘?PÊÿOõî2`À`v[hi µ„ZÂÀgÏŸÅ b±‚È+‘W"¯X¾·|oùQÛÇîp'3ÉL2óOÏü÷€Õ=cçå¶h‹¶J¥‡²éˆ¦#šŽpÝèºÑu#‚„ NðÔ Npú/ NóÈ< Ûoµßj¿õŒõë3Ö—6^Úxi£“ÄIâÄÎpÆœ1gÌ¿ÙþQ`’•„ wíéá—Néœ{ý#•^3 z¯­¾?ófß=m½Û9qÓÏ›Ü'c¿¹jÊCòX¿£®Ž®Ž®NÔܨ¹QsÃŽ… ;¦¥«¥«¥Ëmjò_¿,À,`µ÷jïÕÞÞ!¼CxVyºa^ü†yÒ¥Ò¥Ò¥Ž)Ž)Ž)¬Âºüœüœüœ¼£¼£¼£bbb]d\d\dœÏ Ÿ>3ŒZµ6j£8Š£Ÿ p,ÁÆÖ¿ù°ÿNŽð7~-Ÿ¹Ç8’Vì×3öÛ¾šÒ:¾ZÕüJŨŒ‚g÷Ž˜ºî³äô ˜#ŒÁob‘]îFÓ>¯}^û|HyHyH¹ììì¬@V +ˆ7ë`ÖÁ¬ƒ›®›®›®ü†ü†üFtftft¦|¿|¿|P· nAÝô*õ*õ>úq٤⬗úËÒÖ4XÑ=€nsÝæºÍ£ì£ì£ì£%Ñ’h‰ü¾ü¾ü¾Åe‹Ë—¹ò—p —¸ãÏÿ©5ŸÔö°ÿ=!M,ËÅrç5Îkœ×D´ŽhÑZ¨°”×ÈwÊ{ÉùŠ gù®p¯p§°EÆy†+  {ø˜zw™ÞT?ÄigóÉ•-ýr—??Ä›ÒøµãöSzsÝ8?JÊÇÇd>4pú¢%CmÂW›HõÊ$­4¯Î7æé“[˜…~¿…É~Õœõÿx½y½y½ÙxªÈÔÈÔÈÔOàûµà¤à¤à¤×B¯…^ c&ÇLŽ™,çÉyržÝs»çvÏ9y¬?û¿ <ß³ fÌ’5‘5‘5a½ïâtqº8›Áû¡úý­ Âf3‡Ùe†|’|’|Ò-õ-õ-õÎ;ì|`xÒð¤!G[Ò¤ÓÔãk¿¢ ±ñHa ?T¢¦œÆÒ}T›¾Cv‰nó%¼\ãB­BÑGÉ­3¤¢`CßD]²<9V8¯¨0ª1ª1ªßßß~›ÿ6ÿm~eieie)¶c;¶k¦)ù†À2 `ƒ ‹ ‹ eOeOeOá„?°&»¿£¿£¿£¨•¨•¨•z­z­z-›¶FµSµSµ3/9/9/9Ç6Ç6Ƕ¸uqëâš,Ï’Ý>ÞØAÐ#ôÈ' j¨¡þ›ž´JîZT-RϤ–L QáѼµ;sn-h8Àm²©¼•<ü;S#s!Ðm]£±edïFw:x¯æ\ͺºÇD‚,Ì UÄ,Ž„£†ô_¾vj¡  œR>['ºÐ…®þ ýú3<·{n÷Ü.üQø£ðGÜÀ ܨò¨ò¨òHÉIÉIÉ)­(­(­`)Í¥¤””‡sçÎ |>é"é"é"ß§¾O}Ÿ¾øfà›™E™E™EÜ"-éHçTJØShÞÏçÍ»bÓÇ|ïñ=¯ ¯ ¯‰ÓT§©NS™wÌ;æ+Ä–û6÷mîÛ÷úïõßësYH‡a†qçQAÕgÝÙ'eïö5^ã5%”P‚©˜‚IxÕóªçUÏK»œv9ír¡MnÞó•~–g 3ŒüL’èrŠÉ¬6­ª«û¹µcO“ÞFAþ‘ã§ִB9½tÙešþýÆoÔ?êé¾t:“0ë˜Ó•çJM«­¿tü@R‹ ©'DŸ¤›f¿-9@`¬ÉzÒãH@º²¡jm„؆$´Ô}æµú··XõêÔ?°É’^¯~½úõê7Ò7Ò7Ò’’__ßÇ9sçdYAÇÒ±ô¯q¨i¶y6£ð œÀ‰ºÖu­ëZ§ø¦ø¦øÖðkø5|SSSCCCÝûº÷uïW¬¨XQ±"Ý.Ý.ÝŽ¶§íi{.ûG1ŠQü·Žó1óYuñÏÅ?ÿ\Ò«¤WI/ñ†c Çšë™ë™ë½)ySò¦„SXú;Ç1 ÊÉ%»À.–-/Z^4èaÐàGÆžŒ={Š´Š´Š´ðOñ”Þ¡wèúŽòõá_ðäÑñ8I9Vëûƒe-*‰òº±z3퇇xá¼=$Eß_Ô\`Àõ‚5ÁûªË(D!ŠÝz˜ ÌfæÌ;™wª[R·¤nIî›Ü7¹o8…–½]ƒÔ|s-î%^â%$GeTFe夜”vÔբ¸\.0ƒÌêÎÖ­;›Ý0»avÃû{ïソ÷Y—g]žuáLvV!˜%'°‰ÖÙå› Rc°û/<éÿF€za3lB:+ËUãÕÆk­}cÔû…]ª›ÓžÊiª!}|»[ez#ôd}èO0ƒ79É´" h¸ÿLv6;êBºFFFÞ[½·zoÖ ë„uì¶{ÅáŠÃ‡“Z$µHjÁšì\îÀ8Ä!.;<;<;ü᫇¯¾*.).).aÖ2k™µL&“Éd:té4Ò{÷ï5âiâiâim†Õ ð|>1?°wÅòGY½ê Àñ¶ãmÇÛìÔÈr[+NWœ®8žžNh àZàœÁ™ÏnAòa]ˆoXb †"œ˜’3hÌ{ÉH eÆ’|Î8X €IDATü𶨴¤EJÇ”ëÏÚg8¾ºõÌÙZf Åt+ÎÕ+,éÖ+dS̆ŽË:ök¶¢ã¦Nûû½mb\Ó«ŒÝ#²ÊEåw*wlh{_ù‡,ßÓ|ÂÒ ×oœI7Íþµä8ï “EŽc;&£©ZM§Ã–6¦ûüIûø¿µÿ¯”–ÓrZΊ´¾½½åuÎëœ×Ù¬•Y+³Væ±æ±æ±¬´î'‘5ؽͶh‹¶èè¡6P¨ Òî§ÝO»Ÿ>&}Lúu²:Yl²Ðd¡ÉBÛÛÛ’OòI>÷[–¸ò÷¥(E)ëw§™4“ffee1-˜L SjJM)φgóáfØEþß3šµFk´¦½ioÚ‰HD¢¥‰¥‰¥‰à´à´àtæèÌÑ™£é:‡ÎáñŠxEŸQ¤M=þ[ ÍñëÇLÞW-§™L¯zôcjïá5¯g˜öv¦å‹z2['ædCgð¡©@ÌbÄßPMÀL`7Íú›õ7ëÛ° aAÃò€< ¸’ìJýÛ aŸšÕ͵…-lmBlBlB† C…¡l‚l‚lBx—ð.á][:¶tl)í(í(íøÉØyÖÇ©/ÿ9×§†F;Ï—™H²Ç]†)šy Q5½Ñ|ÜM•Íe÷‘/T{nN‰óïñàDBÍ—™/3_&«•ÕÊj£J£J£J£øQü(¾Þ3½gzœî¸fþÔÏTJ3?€3¬¡G†le®1Æ$ˆ™EÞ ¸Àú7}ßÁ5Î&Þ e‘ì‘Ë£•«GnŠz|÷ÃÆí].Ö\î?ú4¥WÎ ›÷úÅ胭¯~¨–U+n7¯ü¥|烉ÊÝugoâý® ¯àt·Æ&£>ižd+J™ rµÜWßf€é¿)¤2Ï™çÌsö‹©ë§®Ÿº>õCê‡ÔC3‡få2ž’±d,Ë©{ý=Ðì¬`ƒt # ”JÃ¥áÒpi¢Q4ªIT“¨&L“Çäqå5¥fÿ~°.!…ÎBg6ï‡âŽâŽâŽÅ‹œˆ3—Áôo±$–Ä’=Ö²Ô²Ô²\ï¾Þ}½û·nÜZm}´õQVå‰Ä âÕwŽzKÑœ÷EW_l/\Sæ0-¤g›šŒ=zO§tqÁç‹[„9☓¤<ð!øjë„h|4D?ÆñcšÌo2¿É|ëÖ¬?RbXmòÏ&ûÚ êõRT DEDEDEÈ:É:É:y˽åÞòOʳۗl‚tÖ|Ô¬ÿ/¡Å"ðÀg‚È.¼eÿ¸ÒnÔE2¥·ûï_Wtõñèùëé=ÜÇ5¹ÁÆ+Ù2ŒYÿ[B™¬õ®9Y²þcÖpXÖYÖYÖEÕEÕEÕEOˆž= =ô5õ5õ5Ä âS”k¦YÑØú»ÔWFÓ¦MoÜ©q§Æä‰òDybtZtZtšì‚ì‚삳®³®³.ãÏø3\ ,G›ùï.½4¯È&ˆˆˆ„E†E†EF'E'E')–*–*–Ú=±{b÷Q)+©HåX?“]ÓL7$d1ÁNÞnæ ù‰Ë '9öShI¹àAD‘O¹•ÛÜaÞ†úœ¿·´yû¸·ž‡& ØMéõ¾c)MÜ>QHéÝMr)½×aÒJ/™lVPüfÌ/RîPJéÓ£”RšœB)¥‡—¼4z¥ÃÝZ^æi†L@o4ƒ×o-ŠWo²ÿ{`Ì3ÆŒ —ls±ÍÅ6ïî½»÷îÞuãÖ[7N4J4Jôqát7pã¿p‹,‘&A2»mvÛì¶|¡|¡|apfpfp¦ñã9Æs0ó0óÓ‹!ÆÏñdžw²}à v;ˆ›îhº£éïÓÞ§½O“ dÙ€öhöšcì_8\=&ÉcÖ~`³ºžœœ\r½äzÉÕoŸß>¿}\{3bF\¯'S`?LÂc¼#Lê»TÝÚÔ½œÙµO¥ Ï ÚëüÝSÙ!ý±Ž±Ä#ŒÇrtE‹¯¼fXÍfKXÂR{Šöí)‘N‘N‘Nººº’4Iš$óêÂ!ªoJ¿Ï»ÉŒfF3£™Ìf9L“ÃDDDD„Ÿð~ú8n}ÃðÈ<âƒËÌSƆø„ê¶Ðjv»ró©^Ã(ïfÛk‡ý+ú•_ËZSÞe^ÜÎvån.Ѷϰ-¿žO<Ÿ¸}ÍÍÖ7î%ýZZTZt> µ4õŒÅ³‹¦eð…üÈ6²•l©ÿ£íp¢ 0vqvqvq—+.W\®¸ÜüróËÍ-Ü-Ü-ÜYò Çþ;!bGìˆ×é—8-qZÒüIó'ÍŸx óæ1Œ+ÉfËf•[>lÁla³|H÷K÷K÷‡?þX¶_¶_¶_ÏDÏDÏ„có³Rñž™ÂLa¦°oÜ3Õ3Õ351"1"1âЕCW]Ñ–hK´%\l€†Th=¾môF 8aAS^#fwrλNê~³~ì˧êùÚlÏ'öo×BÍÏø 8áHÒ‡°ü«­v]ž|ä³_ØçÚçÚç6U6U6Uzò:*tTè(ñ ñ ñG?%›Ìèïi™ÿ³£Çµb†'˜Êc˜XÒž¿ƒ7“a& éŸÀÞ×ÂRwOϱûÝÎ- –±öÖþõº4-™|&p˜šÒ;£'ØPz{Ñø9”Þ?˜Ò[åqÛ(½µ"nhuÚ¯…#Mã·¯óúîâjïÑÓ£/tª‰näì°Ï²ƒ^û?»"ï*üÔvÃÅ “ß¿vÿÚ„»ò&äá QÈØ06Œ G1úÏý=Ððøòññíïïß'÷É}mmmÆ5¨v¤i÷·Ž¨1ˆA ëB–‘ed™§§g“Ò&¥MJmmmmmmYú "Aäó0Ù5ëGc/ÝSè)ôÆVÄVÄV¸­q[ãöqaÌ2Ýÿ:U=èA<#ÏÈ3ÖãÞü\ósÍÏ%/J^”¼hݯë~]÷+wã|Â'|.íZ=¾Rü+ª2¥¨’ãRU¯§ü‚ÇUók‹É&C?¤¡Jm¥NÐ+n!š¤c$´"ݺ6u<|0ø`ÂWZlÞSxÀƒ¯â«ø*ãýÆû÷+O)O)OåIó¤yRz“Þ¤7q Çpì“)¿,ÊP†2ØÀ6ÜpY…*TqË¡ÏSäßbÁWU«ÐUŒ#ÙKø,Óœsùqákö\+ýyÂÔë±yʆ•jL=ÑÛ³ÑÊ[·“GäxžïtgÀ«kLÓžLP Ô|º€š wf[ã ÁÒt'Ý]ô]ô]ô­¬¬Ô£Õ£Õ£y'x'x'^ǾŽ}›~7ýnú]ÎlmÖhÍi{³uþx4ß›?5¡eƒäØßf9d9d9”Ü.¹]rÛ5Ö5Ö5VÏ\Ï\Ïœ^¡Wè§3NgœÎèëë§ÉÒdi²Úµj?p{,‹°‹p÷qÿ?Ü4Ÿn$Fb$+¥gjjÚÀ§OU'U'U'Ò—ô%}_4{ÑìE³êˆêˆêìÃ>ìC7tC7Îèü+tŠ` =Á æè–ð`ÚÖ‘ÅÄ“ST{Ó*6V³~åªä¼™©A-S;˜wÓÕŠîî¿ÛzM›a®ŽÃ›XóõçFëˆDWx»µj„:‰"kÐ…yOìªK×Ö¾+³¬©~¿âƒnÅ÷_LÎw¼Tò`CæÐ‹H¬Í\•U/+¿^þ¤jNÝìß(~÷²’â éMÒHs ÂâÅOãàŸ®®í]Ûc·Å~ïýÞî}zùôj}¼µWk¯ËÅ—«/Wß{ÿíý·löª¦jªþ ûøß÷x÷lcÕ,Õ,Õ¬'FOŒžy®÷\ï¹Þ§È§È§èjÒÕ¤«I\É¿³ÎYÙ†‹¸ˆ‹Â a…°BË]Ë]˽¦ª¦ª¦êÿ±wÞaUíßÿΞơ÷Þ¤ ¢ *¨ ì½GE½÷Þ{ï±Æco±¡±wl"@š4)ÒÛ9pvÞ?vÍCÞ$¿'E󘸯äÚk™-gfvöÞ™ûþÞ¥K7–näŒcz†ž¡gÐíÐî\Ÿuè¹z’¹1scæF“& L%%%¤IÓ¤iÒêåÕË«—óÚY܈úqGs˜Ãœn¡[èNÖÂÅÂÅÂÅ¢V§V§V'ãlÆÙŒ³ü 7™¸û±_x,€P8óÁ"ÞX‰è¦F4h3”ÒÅO¢tQÈÀ×ë'ÝïµÐ²£ÞNm~vŠ(ˆ-²ÿ…µQ×õÅF02Œ6Œ6ŒíÚ5´k“[Mn5¹Å´aÚ0mø¹.ÿ¢às&P.Iû ,EÑqæ 9DÆ}$rÿÙ‡Ûµ¡ôAÙTÚY·:¿‘”v$a¨q¾þ ­~h€¬'>ˆâÏ“Ìóâ=â=â= ö5Ø×`_ÐÛ ·Aozô èÀ°¬Å‹ø£¸ù!Ω¦n¯þ+O‡ÜàVw%J$9‡9‡9‡v ìØ5àDÀ‰€ÁÁÁ>v>v>vÇ ŽûÙ99ñÐEݧS2†1Œ%±’XI¬÷yïóÞçÊÊÊ‚ ‚ ‚ œ|œ|œ|øòœ’<àñæ‰ëF)lÂ82/E ˜¡dÉ&ã?ïþ5]©¶è›f×ê·7©ô¨ÍK×Ü=Ó…öI;ytÆài”Þ9<1›Ò{G'½¦4jûP•1řҭ§ô¦ô‘ršvÉþÈÐQf?f¯Ôeߪ'#žøÞéÖ¤Õ#‡]:ý4.K—þfåí%Á¸&n$r#‰L3rÕØ„ñàÿ,‡¤Ü(G“Á„ÏŽ9/r^ä¼È˜;1wbîìì½³÷ÎÞÒi´€w7ªÛ÷þ Æ0†1™AfœWz=êõ¨¿+~Wü® 7 Ü0oGKbI,ÿÖ{{ЧxÊÍk­ÑZ£µ&èÇ ƒ~lÑ«E¯½$+%+%’îµEÛÏб–›ÎÐ….t#cd£=F{Œ=z ô€ÝD»‰vä5S‘ŠÔOrÜÇׂù$Ÿäoi±¥Å–ѾѾѾÝÇuן$íH;ÒN°4>Ð 60Ãð¡FÐÜ1½Û €ZªZ4ø„ªÏ‚ñj9³Úö[ä¼×ÄL WˆNzÿuJ…O· Ï9 ìn°»ÁîÐÝ¡»Cw×{[ïm=>–s0s„î#ð+Ô^r•è¢\½1Zåò©¯¬ìLµï2ÇQuhrÆéKt¾`<‘’–ˆA{âJŒPÃA:D:D:„Ë ô4èiÐS.<Ô¿•+ÿV¦õMë›Öç¯Ë% B‚~y'ëñÛ‹±‹ë1šm4Ûhv —.-\‚N:øUàW_q9tú8ôqèÃ|Ë|ËðžÐD›híŸåþ+wÛ ­Ð ó1ó¹®Ý]»»v* * * ¼x)ðR“QMF5%z(z(zOxÂC1Cÿä댶@˜’2ñ"•ˆŒ>Yw¿<ˆ¹ÁhwãFºÏåÛ;%ùηïøã„ ?>=ðíɯL :Ÿ<ü0¥Qû'+(}ì?͌҇>S )}2¥ˆÒ»ê3«UW5ÇHÀcÍ·MœÔ6hLŸžÁ_97m´Ó>Ù°ZÒPTÊôû•|Lúâ!9IBp…l!ž8C$¸‡I‹®ðøY½“_owâM¼‰7.â".ZYXYXYœó;çwÎïIÒ“¤'Iý³úgõçó*0¡L(ó!¤Op›ùËÏ3€À àLÌF"E<Žyó8æd‡“NvÐuÖuÖuæåYŸáž}ò»’B )ÖaÝwYófæÍÌ›…‡‡76olÞ˜×Há?¤?Ï´eܯÈ@ƇÉÓrÓrÓòÐ{¡÷Bï5Íošß4_rMrMr ýÑý1 Ó0í#ß· Á€#é"é"éòCæ™?d>}ú8Ôe»Ëv—í|GèJº’//?ŒÀoâ 3}D DËÒÚø6Qºlý×'îó¾é©Ø¾H¢ÉPËLãÜALYC<þUõPWCÆ&0‘Ï’Ï’Ïju¿ÕýV÷ýçøÏñŸ£©©ÉË>Á ^K¿‰â¯+RBV|X`m5ÈcÍÒªŒ«ïÆŸª¹z}â8 J£¾Ÿj=áJ¯IÞ÷€4bî0­‰§Z’ÜInÔ¤g“AM-Z´€›Ïö{æ÷Ìï™a­a­a-~.ä—sLâÑOÖ3ëzÞs/Nd  ¶AmƒÚ÷x÷x÷ø o‚¾ ú&`UÀª€UÁ~Á~Á~K—4.ÑX¡±Bƒ—Îäó°F øN¸ßÈEMpsç³f;ÌvEEEøùùi}­õµ¥Ã»ÓüßuUל­èã1v /YN\p‚Ü!=pŸì&>¸€™è ¿_žÀ<ÆÐOãfK÷gÍJ&_é5®ñÕÛš›zv/+QF¡:{cÃøn”Þï7¹¥ûL©¡ôaø”rJŸL–ÁNºIÆßL0=ð.¢cäž•Yçhí}¯á û†NâÑ)Æù7›¨Jt›i"Š`V“9HÂa ¨Ó'™?üqT'r€ f‚™`nwÏq=Çõ]]]}Þý¼ûyw;;;.¾…iÌ4fþÞpÉ)dÙ@6pÛ† C…¡âpòáäÃÉ·GÜq{„O©O©O)÷Îb†1ØaŸü†¸ø%îé7¸¹žr=åz*” eBÇcŽÇq÷ƒé˜ŽéŸuåÎÀ Ì@´AÉÉÉžfºÍt›é†ö íÚÏt’é$ÓI|I.XŸ3÷?VËÖbì[Ø·°oq#êFÔ¨ó~Ìû1Ï ß ß Ÿo‰q"N³ ðsè@“ávr}i,Ó¢Üý ¥+ô†$VÏmÝï5¥Ë¢‡øšÚ˜òù,EÞä iý/¬—xùa9»ÞôzÓëMëÖ)¬“«¥«¥«%â‡8^sƒsø¿‘CÊ Fæ-ãAÚp»'_ìS¯™ŠÒG¦ŽW^{ ìûËÞ#zÏqžmä $Ï«Æ3ÎÓ:44¸2èH˜VHAp„¿¬•ƒ/kÐT¶ÞZî<ä(N 1}ÑŠ¿âßó1ù³wìaÏ+0p¡EÖ­;[wnu¨Õ¡V‡>|¸'pOà___³{f÷ÌîýÊ)OørÝßXG»F£F>¾]}»úv ˜0%`JPpPpP°Õ`«ÁV¼›€þóû—s’ÿˆ]Dc¦h?sƒl½frȱÿ»JJ톇Wvìà>÷ržvómö3ý·²MnÄC飖SQU>Å‹Ò(Õ”¦”Þ_5¹¥÷¢&3¥Ï/ÖµõZÆúnÝú,ß6|ª¯sg'ßqö}ÌÆh´ÿÍKNC_x1×ÒŒ9è‘FÄÏ0ÚPÿ)ˆù˜ËëÄ„˜.m–Ž–Ž–Î–ò-å[ÊãrãrãrçOž?yþd& dÆŸñÇB,ÄBÞCWàϱ뱞„‘0ÆX3ÖŒõ"ŸE>‹|æ$ÌI˜3pÍÀ5×pE‡E‡E‡?ù 7g”sýÁžØ{oooiˆ4Djênênê·QŽÇxŒÿÔp|»»»œÐ ¡B'x~ãùç7L¦?ÓŸOÅ­ìýu0`øÔT€v™í2Ûe>4{höÐìÛÍßnþv³Æ øò¯ð ¯„GáßÍ N-A5H%‹ÈhXSPš{¢lmE!ä)ÓGD{C„Xq¦Æ(©ø!æTáñ_HØþ¹1ƒ1˜Ëý)Ök‹µ Ïž7ÎÈþ%\ˆ§µ|Çqœ3%]¢]¢]¢¥õ¤õ¤õ¸ähïV½[õnUÆáŒÃ‡±[°…%/@>òá†z0Dc8Á 0ÞL(©ÀF²x‘3ª0ÖƒPEügxk‹ŒÉ[“ezW4Z¸n·§ïÕe²_?ûµ®ž~V•&_éåªßÒ“k7PKä“$G‰ìÈ’ ÔlPù—x ¬ÌÍ{UÔ­²õÓ‰ƒòj/T=ØžÚÿF`L@æÞ÷’Ò‹ÕoªÖ)NÖr¿:ädŠ™¤-éƒ8±åìtjN-лqÑÈd·±U´e¨†@£ÿÏY‚ý˜á¿Üxˆ1ƒ1e‘e‘e‘û_íµÿ•û.÷]î»Âz…õ ëu#ýFúôÛ'nŸ¸}‚Ô'õI}ZE«hÕ' üý¨û1ùqãDLÄDf'³“Ù©¦¦–èèèÀå(uÒtÒtÒ$$ƒd¨"U‘ªH>÷gwtG÷OòK]à.cƒÌXf,3–µ•µ•µe=XÖ£lÙþ²ý|`ýç75°K°„s7ÊVf+³•yyyz+õVê­Ô.Õ.Õ.-.(.(.àä8Õü¿Ì‚Ë­”Òö´=mo{Öö¬íY k k 딇)SVL¨˜P1¿––*ðKDȽT^õÖ™©Qº²÷0·òÎsÖ÷›HéJ ]±Ðë±KC~ŒZAÜ=¨ÿ æQ¸ù .i<ŒÑ^£½F{CtBtBtšå5Ëk–'‰’DI¢¸è~>?¨€Àï§®¯ð&€—ø×qÕò¸a¢f·Ä¡ºÌ~݇RJŸ†RJéó©”Rúü)¥”îõ[·a|ã1]&zF„^m2ÓZ«ÙéúMçZ4^§e*m+>Á<üK·¦(Le‚ɰ¢y̲JÔ›YNf1G7FJ–#ƒ $؉ËXN°‚ñO^éugsë.œÍs<ŸØH¼F¼F¼Æi°Ó`§ÁoÞ¼ Ô Ô Ô ŠŠŠöÑöÑöÑÖ·Ö·ÖÿyVÅC8„C?ÛÃ]¥ŽéÀí¶O·O·O* * * È È Èô>î}Üû¸t·t·ôƒ¾ø~¬ÅDò˜ôÂmQ 3…L$óˆ ¾ÿ­šQÓ”JDÇÂŽ4jCfùÊ¡IÍéþKÆuhž×ñ‡·ÃžSzïö¤,JïwšìOiTÎOJ£NN‘Sú°ÍT†Ò;7'æ&ɆÔ?ÝléÚ'f]ë·¦in³³õ»›ºŠ1ñäÈo]—™AÞs±®H<"ÏÉ D£=š£ÿçÿmb#n=Ddä&¹Inr»'WL®˜\›››p â@ÄíáÚõ‡}¢Oôë:2ýK¨ÛÛ9ÿrî#“ë“œÚØ‡öÿ¡©´ßºà8f3õQõ›W4¯h^q;ávÂí„C+­8´ÂÈÞÈÞÈž¢“Ådñ'Ç8ïv-hAËÈÛÈÛÈ;¨uPë ÖMÇ5×tœ(^/ŠçËJ2¿nEÈ®påvÔoT¿QýF¡‘¡‘¡‘ Œ50âKÖÍóðWbrà¦Ó‡éÃíXºéþ¥û/%^J¼Ô³_Ï~=ùH&ŸÉgò9ý™Õ$ð×’}¤%·Ý¼ÈZer†¾\’òõêªAs“ú‡Rº¼ýf3‹‚ö{U`@ÈìÁW°ƒá¯juÿ³h€h€¦hЦHB’8½põpõpu.³_òGüˆ…Þ"ð'©“þT3Œ ·º)x¿èEºŽÍ~´³öMížÇ÷TU-öe°ó)1YÚÒ;½Ç\®2¹Òeì¥ü™gÎ ÷NºH6pΓ;—öy~3mã7ݯÜ?×¾æêò‘ý<Ç5íæè1¡}u‹vzžŽƒ¾3º£Û]î¨f.um}Ï\#;ÿèí/`‹¸@t‰i(ÑÅ3¾b‰HNî‹Ì˜¤cGö ˆ¸ 0}à dbÖÿ<çƒ5¢F´E`‹Àœ+Kà„À 4h\oY½eõ–ñÜu9 cCÂ?ÅIœÄInÓ@Ë@Ë@+`FÀŒ€S¦L xð"à…þ.ý ú ñ=Zâ=¢ï™Á¢9Ì~ò+Ù'DLÒÃb¤á%ľ!&Î?ìy3=/tÇÓ­»ÊûÞ­Œ¿N«;Žláçâë5ÍZnl µê7ë3‹ŒÃ ò Çu2•˜á{äà†¢3ü`ÿ¡Ðg©"!‚"rƒÜ 78•!.®àdæÉÌ“™OG=õtÔÐNC; íÄgv0;˜ÿ3î<Ñÿ—®öÇrY! |p0À|€ùógkÎÖœ­¹“s'çNŽóçÎ8l&œ gÂ?ᯮ3›î¸Àqã‚ðfáÍ›9·wnïÜžw"å‚¿¹DlŸ?ÜgØyœÇy΃_w»îvÝíA;‚víð½â{Å÷ŠÆ4iÓ¸§_fÕøÃMjLŒ‰1w- 7 7 ·½º{u÷êÆhÆhÆhú¥û¥û¥sÎ9¢á¢á"A£é‹àßÓx† |5Eª %…ÊÖµÏ42™qÄ`{²K-mtfi¶†,(U`Ž@ê0úÇ×§Òº »°K–%Ë’e-4Zh´°²seçÊÎ9r:åtâÅs« O,ðç¨A-Xè@jB'Ñ-d$y„üg ß\È]ÀÚá"qFù†‘IÄßC½PHGKë²iÒ£jïäÖ’J5èêÈe† Oh?›pÀ”a+¥]U(;T­ikv˜ê$ëT;HÕ’-¬µQi°óž'VMÊ\žw­lbZËw¦¥ç³N,®‘ñ ïH™n†"O»Ì§d]ù4ņÂeeû^Eʾ®^U\¿|¼bYyt•a͘ZÃÿϦrø¼ÁÇš½~ ¤/‘bâ1,R0*rˆì![óI>É'•¡1Mãœ_9§Ü4` Šk›Ö.¬fÇÚ}m7G‡èˆu:&”'$¤WiVVÙð _¸¬±áG¸¤LR$ÉušçÔÏ©SĬ%ºÌf32½AZ^z×Âô …׸۩…ê>»‡Û65Õ÷P_í!wð1rmv®þ|ÓÖA©wY-óêêôÌx›ædù]é ØË:ˆ¾ÇHæ<³€+²ršlª¼]8¡bÉ›ò¬Œ’+‰3,Šº\ø.ê}êú«ÚÑ3ÞÞΞ]гâ{–N¦‰î°0 G°íÄ:"m&–=ÆúÑbÖšn¦îÔ‚n‚?ƒÎ¹'­Æÿ¯ñyŽ2*¨ ¢42µL-S›3ÿ/ €,$ ÉBjCm¨ÍógÏŸ=ÖlT³QÍFyLñ˜â1%2;2;2›§Ãép^cêãîÃ0 Ã8%(ÙCÙCÙCùùùEŒ"FSYTYTYÄ9SÑlšM³?aÎÑOÁ9œÃ9n}­ekÙÚR@ ˆÑ£F#ŒõŒõŒõ²äYò,¹Â]á®pÇflÆf.Þã\…‚‚M¢I4¹UD£fFÍŒš=ñ|ÄóîîîÜÊ}KßÒ·‚Õñ%ðÇgÜ!i¨T=ªi¯Š+©œT $h¦ÈúÔœZ®W_+H,²“Χs)  Ù?:/7krqK/¢Ë겺¬r’r’rg¦3*FŨTPAõ!µÍ{¼Ç{¡“ üI¸ ?Oã¹Ù)Åõ²íeúóÜûŸê߸„–t)éò|aüÅøÄ.¤3³ìÓV§Ý©sü-qQòBý°ì¬d‹|¯š™¸Fý‚¬ƒ¸µå÷Fo5¿5«1Ô¬owÔ ÚÏêÉͦi÷6NÒ› >ÚÎǼ½ÎK­ùêÒ]jï¥Ñ♉j>âcòβ41‘4‘u—8²™âž€Æi‰¡§º\ºÄp«E']• Ð •Ri šÀ›ˆ•¯ê.f*"U†ŠûŠþµÖÕ;”—kí*ãýj§Õ<¨…*¡¥¬¢eªaNrÉWi÷ÞM.­—æ”Û­4þ­í»¥=rf½ßS¹ª ¬$»Ê¥¬c©FîµÌái»•Ä´Êb¡u˜"®¦ž$RY«òg<Œõ¬•ÎWhGºSBmsó»¹ÈEnLï˜Þ1½UýUýUýÝç¹ÏsŸ'>">">R;¤vHí´G{´¯gòàTbæaæ©oUߪ¾UÞAÞAÞ¡R¯R¯R¯¢¢¢¢¢‚O¯¶+°âŸØ©iÚ„6A! Q˜{$÷HVc­Æê<×y®ó\‚þý 9Ës–ç,çûç.õû[™Ó³ŠG<â¹1///íkÚ×´¯eŸÏ>Ÿ}¾¼yyóòæL¦Ó};f_ ¯Í/?> ¾œÞ@ X4S6SÙ¿¦¬hi¥R¡ƒ2#=­­Sûˆµ48"Ÿ ó #§É¨Z–Ρ€¤ÿhÃ= YÈâfèVº•n%{É^²W¼L¼L¼ U¨Bÿ=Í- yËþ:Üpÿwq— hÓOÕ» ™ß!Ó&Ó&&xýàõƒ×E­ŠZµ"÷É}rŸ¶ -h‹À/åF~5¨A˜v‡;ÜÍG˜0aâbâbâR¡ªPU¨Þßzëý­ò§åOËŸrŽ%tD'¡ú¡ßG¨í×xלOvRpRpRpa^a^ažY³þfýë5¯×¼^ó$q’8IL®“ëäúG›¨åÔÄm‰-±¥5´†Ö¨U«6Væ-ó–y=+zVôL™¡ÌPfðysÿŠkÐÿ–x€\º%•H%R‰rÏçžÏ=¯ÕN«V;ó@ó@óÀççgŒÆhŒæWì‹P„¢ß5/>ƒ0HU *P º¡›ãÇ)ŽSZ -…Vöœì9Ùsð¾ÂW¼Õ!„¥~1üñ÷u¸ŽGˆ ¶bEu‘Ò¾¸ªjKu´+¦“ª?ÍSM40’Mç‘©¤-j°…¿ùG¿ª¸™žHD"’šãÆ5Œk(™)™)™Éú±~¬ŸŠU±ª ÙuT,þ0ÜëŸKs}‘ˆ”ì—ì—ì×®»Hw‘ÈU|R|²¢²Ê¾Êž´$«È*’N^‘WªD6]Œ$ ¥qè¶ðÂu´ƒioÔCšÁ^Ä Fp5ôaÈa ch Ð &Ѓ:}4äVÛ)—©¼8ÿ'CøÀÈ:wú-:‘`¢‹:4*eu†iÈeot/kÖ—Iµ5zI Ýu:©)¬sM&k}g³Ý¤ƒö^ë6&QZ§mŠM6kß4Þ§7G}ž¯ÖJ™½dµHÊ4•4‡3ïDß‹o1[ñ‘ *'·Äo´§¨5³öJµ.6Aö†Œ¦Úµ+Q+ âAÁ´üÞ¶]ìÞgëzyŠ—Â !Ê•Öéø±™9Æ9¶,n 03Ä^ô몽ÕÑeßVþP÷ôMRÇ<×+£7K7¿gø¼GvûDÛLÿâæ9Ëß?ªà2&î—Ú¼?`“û‰Kx„tœÀ-¼¡_Ó•¸¬šÈ¥3ðoQľ×}EÉËØ ( à 5ZFËh–a–Ž?8¾enËÜ–¹®†®†®†Òi„t}üúøõñd)YJ–ò9)àŽ|´™éOgÍÃ<ÌãLv¹‡ÜCîa“b“b“B½¨õJ{–ö,íYÎ…œ 9²pZ%Ýd¯{#‡è!zˆ ý,3,3,3L5N5N5öHöHöHv˜à0ÁaBRTRTRÿ^ãfþúš÷¢NÕ©:gÄk³Ú¬6K=©'õ,/,/,/äÒA %”7QÑÿ`”.@ ¸lµïF¼ñn„ÕV?Xý ÝU»«vWƒE‹ ½¯x_ñ¾‚_qúý3\Ÿw‡;ÜÕç«ÏWŸoWbWbWR1µbjÅÔôféÍÒ›qW§{é^ºWðnøm†¡‰LÈhTq;öÙuïw–ҕLJé)mæoYöjN÷~!ÚýdG$Œ×µh ¡ò~?Dè=î•`¢a¢a¢¼(xQð¢&:MtšèˆY1+f¡}èc$FþÌœþ«³ÍÅ^Æjt&GI~dÎ2êÄ]´ƒ¹@6Šçˆ¾&Õ’Yb{f„h3Ivÿ¹ 2Žd7Tâ¢iŒ¦ÁÚ·Ôü½4Î{u~æçd?f|ón7=Ê×DŽêã§ú¾`ÎŽÖk~œ¿ZÕ¥ß#«í«{ÏH´ýþAÄþ¼Ógl‡Û)_?n/¥×ÎìNéÀQ³Vd¾=þÖ EEÿ‡«ª—ß¹E«¸c‘27vÐãõ+´Ú/Ùí>Ó;üP¿ÅáM]v›u5pÕè„…ŽÀ_¹Ï•$—X‰×‰&–iH¢!ð‚%ÿgÑŸÈ/úeSGô”’R†¿ þöAà 4¼žt=éz’çpÏáž¼JCÆæÎç™…š3›¸ç‘“ü?âÇ 4lÐ0´0´0´Ð“xOÂe »È.²‹4%MISþ 2È ûh÷3 £0ŠÿÔ±ƒì¦î˜ºcꎗҗҗÒñ>ã}Æóodæ=óžùx.aCÿp   ðºëu×ënв eAËŒ6m4ÚÈK…nÀløÇ¯NsIå¸L¦0…©s'çNÎÂO„Ÿ?á®á®á®¹˜‹¹øßã{>)ÕïøÕ\Ê*ÎÁÆ`²ÁdƒÉ—¢.E]ŠºÙòfË›-G9ŽrÅ—Ô"ZDKZ~ ™ÎÄ1–0…Ô7tjó¬Y¥«†÷®.ž÷|€nåáyŽý_8®5Z®×ƒïX¦Ø9ÿøß^÷aãf)¸„2OðOøåQ¿Ž1ŒaŒ+¸òÁ™Åé¬ÓY§³m|Úø´ñ±ßi¿ÓþƒD#ç¦õw†vÕ}áô€?ìQ„ A;aôÉzä2ßJ\EÌ2œ‰alI+ò„ôÃ$á{ ú+—›JŸ‰n[e¢§åçõÈ©Âø~k³fýln ðh³Ü½×ˆ‰mÇ8·9ÿÕ=ýsI—(¥ô™¥”¦. ”Ò#Ó+º=4PëÙù·G"=2•hà;&‡iLÂÈ 2ј?M:0‚™þ‘àÌwNZ· U¨"ÓÉt2}eÔʨ•Q1ûböÅìÛš¶5mkšD!QHÄ…¸¬ÅZ¬ýì~KÝ÷'0ÝcºÇtO°n°n°n«>­ú´ê£M´‰ö‡’us…~ ãUêPuuuå> ÚOm?µýÔW_m|µqËî-»·ì[‰­ÄV¼à §‡öׂ!ÂÅ$Ȟʞʞ¶ºÑêF«þ»ýwûïæ*îÓ«-Ú¢í¿¤?ç!yœzŒn‚n‚nB€V€V€–_†_†_†ÖN­ZFìD$rÉÒþk·êBº.ܶ³®³®³îcõÇêÕϼ:óêÌ+É9É9É9Þo¾#:¢£0¨ü$Ìa†hÈbƒè&z´dåa½æÝ쟥´Yà1Ý/Î~–åw|<ŠÜêM@àwÁåçãž5*¡êÝÜ»¹wóÀØÀØÀXá†C ‡òKÛ9ÈAÎgý[Ô …&Ѓ:a ]43L/X£=ZÀDZmÈ,bƒƒŒ?9‡Z‘ŒiMzˆ®2qä x¤¨)a(F~—#A„çŒÊYÁW:¼üîåw/ÄnŠéÙäåé—æEþÐso#`ÃYÕ³;ýRgŽômcÉ”Ÿ|ØèCOˆTùäpéÜÓHIãv84rhäÐèŠáÃ+†?6îú´ëÓ®Où♃ÌA~¾öskN"ÐŽp”דד×kÚ<´yhÈÛ·!omÙ ²ùðÉzgq–Ï6ð‰³ˆYÄ,â¶Ý,Ý,Ý,¯ä]É»’wæô™ÓgNÛšÙšÙšq%J¢$Êpɉ˜ˆ‰\Ëî0Üa¸#¤SH§NÞ;¼wxï WÈò!²Æ°ø—ôd.Ç —ƒv!ba£ûî7ºßÚ©µSk';‘ÈNÄ'ƒ;ƒ38ÞþŸN¤éÄ}âv½ÒõJ×+ÑvÑvÑvßÌýfî7s Æ‚ùP{œ¨€Ào÷&·aº> ãXUË7 ](]f2ÄMÙy¾ícUÓ…¯>ínÝè´S?|4"Í¡üR«L@àwég\ÄE\„Ì`¦?S¦þ̈ˆï ï ï ‘¯ÈWäË™|š«‰Yw†»á@¼‘‡eŒÙŒwL ãMÚ‰®0±ä{ñQ{òL%:@òÿïS’€0’-}Õ$ët[®h¤ÛÒfŸM…Í>é~ééÏS…siÔê†| ¦üÇ…«Ï¯ð¾â¾¹ÝÇ'OŒ^½$zÉé°Óa§Ã̃̓̓ñ ¾Á7ä*¹J®~¬<£áiåžÁ§xЧð€<\f¸Ìp™v2ìdØIÏXÏXÏXÑVÑVÑVÇqçtÍÿ¦ºåd4ƒŒ`yžÜsÊ­‰q¦ª l`cw×î®Ý]á:Ãu†M)šR4å­Ç[·ü 4÷´rÇþi¤0`èSú”>åB{_†¾ }Z®_®_®_¿Yýfõ›i-ÔZ¨µ[Á È2áOÖ —#– VÝNÝNÝNºYºYº¹¼Yy³òfU²*Y•Œo©«¸Š«ÿBáBNð”K¼e Xä3ùL>S¡V¡V¡¦­§­§­§¨¨Èå^ÅÜÁŸÕç$Ó™t&¹³9¼vxíðZÿžþ=ý{ï|Þù¼ó)é\Ò¹¤3Ÿžïkú5ýZB~ßsúŠp›Û¶7²Ò‹xÇNÏê³—5ZØ0â¥ËÛ Ù~D­WlP0äЀ–؃ñ$G…zø/$  ܦãÇ#ŽGÂÞ„½ {ãÚܵ¹ks^C†{1¸Áí'ç ?gpp³€œ’Ï/¿«½ S{¡ÞåÇÓê]ä/Vï¿ÁR§Î„© €þØþР "(ÏüUsÆœ1‡-lak/µ—ÚKÏí8·ãÜŽ˜Á1ƒc÷èÑ7‚/¹‰ÙÄl⟈O=ï^w≠EèWêWêW®\¸:ð›Ào¿1|gøÎð_ò.îâîÿ¸BÇb,Ær÷¯££s6êlÔÙ¨Gk­}´Ö}¤ûH÷‘œž:o2þ¹êq"Nĉó\7_k¾Ö|m˜K˜K˜‹û÷'îOxaJN.³Z¡Õ¿¶ûÀx‰—xÉÕ†ã|ÇùŽó[Ïk=¯õ¼ú~õýêûavaöb/öòA«u™‰ÌDfІ6´Û¯h¿¢ýŠèFÑ¢m{´íѶGÇ5ŽkÿY |i#äŸ;Œ–cà+xÀ>+®Ø´¬°òŒ2«¦šl%_“FF žötéw¢0T¡eá=Ò¡ Ù?4Õ‚€À§†S$hƒ6h#Z#Z#Z£ÝM»›v7Níøý‚÷ Þ/àµ÷ä=yÏ¿þ Ü\7 ˜|äóÞ¢ß`¾È^ Úíòåj·êÛí4ªo×.,<_»P-swkµLÙ’±ž²%"OÆ]䉈Àã8бÛ°çgF¤°ÒøûaÀ€a³Ùl6›iÈ4d&+“•ÉÊãÛo?¾½öAíƒÚ_õÿªÿWýmÓmÓmÓÙ ìva KX¾?]ms½…ûHX€X š š š`WkWkW+~ ~ ~#É‘äH L L L1s0‡wŠøßö.Ç'­¼Uy«òÖ+¿W~¯üÄ7Å7Å7o4¾Ñx.q9ðG1…)Léz€@ JP¢•¤•¤•$š&š&šVµ¦jMÕôFoô&•¤’T"±ˆý×öanu%ÉHF*P‘;&wLî˜Ê)•S*§{{{j:j:j:bVaŸ˜‰©óËz[ŠR”šÊLe¦2…: u¦mLÛ˜¶±¢GEŠÜÓA]©+ÂRþä[Äá[n;>c¬a—&”.>5è¥Ë ¾îwgï7í¦a éOî+ô†/Nbz õ& ð+T¢•Ü+P/@/@/ àRÀ¥€K-½[z·ôVgÕYu–Ï2x'qR¨°OÂKÀ€ÖøY`=ÓÂÞ€i!£[Öʨæ£5oèn0í¯»€éO§Ñ'úDNp‡ù0!áÂy?Çs˜RLÄä­ô÷Œ!Ü'—ýt"&bbÃs Ï5<Ö)¬SX'‡~ý>ˆÛú¾|ö\n%‡S(ŠA b \4pÑÀׯ5^kôïÚ¿kÿ®hŒÆh,ŠE‹¢…ABàÀ€€ÈÀ ‡¼î,¶¤Ã"Z³øý  Z³¤ù 7ÏdcŽwy­ý\}¼ߟÇá5Ε' ð3¸¥Õ:aaõ´ëi×Ón}½õõÖ×ݸpÀ—äää¸òŸõŸÌs,†9ìÄaW·ˆtžKštž£¾K’£¾“ÄÑÞI¢Y¨Y¥Yø³ó4#õÑ :Ðøé?!¤õ·kþ'Ñä‘<’ÇWä™fgš¹»ã;î ¼3ðÎÀ€peú1ý˜~¿<ÃGãná·©k¬k¬kì¯ç¯ç¯4%hJУ7FoŒÞð%Ó‘ŽtþâsXoáç0s˜9œ³JcÓÆ¦Mce±²XÙ±ècÑÇ¢5¬5¬5¬ù©Ã8ŒÃàüû°û¸«È/É/É/ù®ó]ç»Îwïß=ò-ò-r^ƒã0ã¾ 5¨:ê13 fÌ îÜ-¸[‹A-µ$^#^#^ïòÕG}Ô'_“¯ ï³®7Jo”Þ¨ýû=ö{D½‰zõ&ø‡à‚à[ós¹&¬æ}™üÙ nѰµPaî ºP½ú«šLˆ‰ñ„˜ý†¦j¨K­$¯uãä×eÙPƒb²‹ôDˆPé?à ^ðÂ0 Ã0æ-ó–y«ßR¿¥~ËÚ®µ]k»–h–h–hòó1œ_;·+𩡨äƒNlÌE6Òj½‘’8㜕‹^Û*%¾vL*,Hxÿ² Árœå ËqõÞÔ˨÷F,~ Æ#ú PBøˆúÂVPÁ BZE«÷5OAùÀÊSô=ÅüÈüÈüøtäÓ‘OG^¸xáâ…‹:‘:‘:‘;ì8°£n ݺ-èvºn'#ÉH2ò£©¼sÆw È™ãŒ!cÈÚ®²]e»J6P6P60wîþÜýÝ ºtÃu\Çu´G{´çƒP?‡L,X:ŽŽ£ãPˆB¾W½W½We{g{g{ë<Ñy¢óĺ§uOëžPB %¿^ô{Öˆ¸2œÎ•"ˆä%òy‰ú=õ{ê÷”vJ;¥]•G•G•¿rGqô_–úK8“šs ÒtŠ:u(êP"-‘–HÕ‰:Q'f3‰™„«Ù‡}ØGŽ“ãä8'(©o¯o¯oo±Ãb‡ÅޢܢܢܴçiÏÓžó­OãiüQ“¿òØýÙ•Ô~úÚ{׫âau€ 4¦Ïè$«9Pö½DW•½A5jP‹0€´*]@àg8ÃΜ‚»\O®'×Ó‰Ö‰Ö‰V¶Q¶Q¶ÉÏÏç•7Æ` Ƴ,3ÿy1²XäQWä!c‘OTÂW«…v…²B»DDßDJEel¥Âù{G8oÔÆc¿QÆLß1Ã=Õ!ÜC†Hp%Úp…¦@a¾.œÏúŒÀšD“hRmvmvmöw®ß¹~çúFçÎÎý —f/Í^šT“jRM>¼»5¨ùKæ{]˜ÆhŒÆœjŠkÅZ±†s çÎ-ŸP>¡|BJÓ”¦)Mé3úŒ>ãà Ÿã9žvÝXNåTŽhïv½ÛõnWÒ£¤GILOšž4=é<Ây„óÎé…‰ab˜˜ß¥ÕÃÍÐÄAäê\=\=\=œ‹Ø)[þ¶ü-ï ÒíйÈEî2jPPÜÆmÜæúÛ‚mÁ¶ÈÙ˜³1g£èˆèˆèˆq™q™q™ÈVd+²Åp Çp¼À ¼àDt^ê¼ÔyirÀä€ÉBƒBƒBƒÔ#©GR`¶a=AOР!ðÇG¶KHÃ!n{Á̰ÝÞ‹(]²sðôÚõ ì<)‰šç: Ô×Ïn‡Å ®ŒÈÄQB½ üŒ:º¿¶mÛ624dhãF5nÄ'õàЃô„ û,¨;É¥ÍâBÊê ½D*¤— ò¨äkdÎÐÈ’{´½.÷ E)úPŠäè‚ltùé@¹P½ÿ©DH?HXKb¹ín#ºè6âѳGÏ=»ÜÿrÿËýŽ G_²;éþSæ¿]PÇiDã¤ÆI“¾Û}·ûnîÜ!¸ƒY•Y•Y_r#6bãG¸â§Ãö°Yˆ,D|¦ˆ1c<Æx¼¹øæâ›‹Ój¦ÕL«áo_›Ñf´Ñ Ð鿜“S‰áÖ%º¡º5èÝ wƒÞ!ÏCž‡<7—˜KÌ%|.ïÄ—9é°°óz—*¥J©ÒgŒÏŸ1Á¦Á¦Á¦Ç Žð*1L[¦-Ó–ÛîÍôfz3Ïo<¿ñüÆê]«w­ÞÅ÷íd _2mp)xXq»Ê@8ª³7¨¹ædI_ñ Þ²®?¾Ð^ÒÍ„Jàáò>Æ 1œ®ßS¿§~O†0„!ù_å•ÿïéAs Ì>êÎG–£圗*aGŒE"Æ*[SMeë÷FßU¾7ªž±ôZõ fÇÀ5Ìõš}™ê52 —t™ÖR¬Åi˜ã4^  / CÕO%…Õ%”Præ;Í¡94‡Hˆ„HÎõ<×ó\ÏGšL0™`2aØìa³‡Í&·Émr›O…“‚¤üa•w®Î;¢#:rZÚ¤©GêÙ}k÷­Ý·êÝÕ»«wÏëš×5¯k“Ãä0|@!7·ú˾ñùÀ霡E\¦ˆ„ ;vn)ÜR¸Åq—ã.Ç]š•š•š•l)[Ê–þ,ÅÕo¡5¨q뜓’voíÞÚ½i1-¦ÅeË–=äœsøò_¦k÷ÑrGqT)UJ•Ò‚yó æ‰v‹v‹v›4;iv’L!SÈ–eY–ÅhŒÆhç!ÎCœ‡ÔN¨P;!}~úüôùüÚ,ׂB°ûÌGkøqé°Š¶Èƒ)ô¨%asO¼DÔ]s¢¤R̵“ñha1X@€7Vc5VsyµöjíÕÚ«q]ãºÆuåZåZåÚbÍbÍbMÞèÞèÍë¸ |žpFI2ÒŒÍpÂft† :c¹qªOªTx÷Ô­ðVÒ+Í•T´jC©h•VÊì;Z)¢cQ Ü ‡Øfc6fÃv?…Ã~ÉF´BÊP& ´¶7Çä¶í›ëÛkm¦^‹Ö®8<·Q¿TJW_~hÒó–á †B9ÔÅW² ¦Ð†¦P{_4AB/v‹Ü"·Ü‹Ý‹Ý‹Ã3Â3Â3êm¬·±ï/KäDNä21ŠÀçg0þ'L²3-êéIâez¶›y¶’úF.ªúFúSôgèOùÙYº1ÇÐ 2Ü‚ ´Áütæ/шçÜ“&a&¾2|eøêÄ‘GNyjÿÔþ©ýÄØ‰±cù'hGÆñGýßÏ—Ã’s]»‡{¸çrÀå€Ë°¾a}Ãúz,öX챘éÉôdzò™/¹§øè´@F“Ñd4·=?~~üüøgûŸí¶ØÄa‡Mä]ø8ùK{ØÃþ7Ï£A4ˆ·íôØé±ÓãÖwZßi}Çv®í\Û¹|¡k¸†kB| ‰HDr+izcôÆè ¾|5øªïTß©¾S™sÌ9æœg3ÏfžÍî<ºóèΣÓe§ËN—éæèæèæpTuë\àËä¯ 7qx n³zšŠ².%Õß׆ˆÏ‘ÃÄ P‰Ù#–Eº6ZÚP  •ª¾ìdz ÑŽBÕ |ÑpÉe^á^ÉåÎrg½fzÍôšUݯº_u¿Ð«Ð«Ð Žp„#=IOÒ“¼J†À?nI»÷Ù-¸²&piÃQQTÓ@Q”V“¾(­æ­4Ãö­Ôè‰Ñ%£'γ9ÏÖš£.Õšƒ“lOœ„þP@]TuØ9lñAVRö…ðœñ­ Mh7âFÜ êÔ/¨¿O±O±OQÛ®¶]m»öÛwlß±aiÃÒ†¥tÝD71ÙáÌpþ9ª;;ÎmsF§Žâ Oxùùùšo1ßb¾¥º¬º¬º,¹yróäæì1ö{ ¶°…-/þøÏrZà~i*R‘Ê0\B«Ú‡µkzLô˜è1‘üᆿrg8Ã™Ž§ãéxÜÇ}ÜWß®¾]};«Çê±z•+'VNä]n†’¡d(/zø%íráÎ6°MiPiPiPáw…ß~§9UsªæTÃ"Ã"Ã"{•½Ê^¥n¢n¢n’®HW¤+*õ+õ+õ¹'AOFà¯î¯PüÁp¯1fËè©ÒuJµZkQ(3œ(6žílì¦i­þ N^d'Œ¯q­` ¡ê¾P8³ƒ 95 L´¦iMÓš¦6Tm¨ÚÐJQ¥¨RTšYšYšÉ#0#„jû—@Qõ“6|.ƒ\$«´‘ /„à K±K+²*2*²n&ä'Ü,œ’ûuáík½Bµ¯i´]wG£-Yh–H¢\EQŽ4Z4ø2«à (uøW‡­Õýˆ„I˜D¦’©dêÅÇ_||kö­Ù·f¥¥¥^1xÅàÒiŽ4‡v¤iGbDŒˆÑÿ×"½Ð ½°‹±XR&)“”Ù±v¬+‹Ä"ñÛ„· oÊBÊBÊBp'p‚7ü'™ÜÇÆ[¼ÅÛøþñýãû+2™ŠL‡®]ºš63mfÚŒ÷¥^Xñ+çñeX†eòþòþòþê=Õ{ª÷¬|Qù¢òEÅöŠíÛ¹°Tºn ÅqÎaæ".⢪«ª«ªkžCžCžVbVé:éÖ×­ï4ÒiŒÓ¹¾ÜPn˜<8yHòeseses^O†[íøs[ìÃî¡S"¿.«ˆÉ7¬[ýf‘ÞÀN´zÉöÁ²È«ƒî´ë.,ÑÇ` FfcˆP{_(ZЂ/‘p]ëºÖumhƒÐ¡ ì¯Ú_µ¿Ê—œˆ‰˜(TØA]w‹y˜‡yhe?¹Ó<“šá™Zܤ µ8Ž—Ökt”­.[ËXJ™R¡ Ñ 1m0ZB‹ßÿo i­›]µ˜“bþiJwMwM¿œp9árÂcÃdž ;ì<°ó@¾ä]r—ÜåÏP×mff€—-v¼êxÕñjèžÐ=¡{šÌj2«É,f³ÙÆË#6DC4üÇ×^=uÍ–š-5[°8`qÀ"Ê/Ê/Ê/Ø+Ø+Ø Np‚¹An¿tâ´}¸u½z;ôv«««59ÖäX“cLw¦;Ó÷çôyêÂõ¥nè†nRs©¹Ô¼E^‹÷-Þ·ÜÕòhË£»òwÕîª}‘ý¢êEU‡ ötØ d‰F‹F‹FÿfÔ€Àï¢Ë1€"ùbérÉëñCtˆ£tqÚ Í”.Ú8pûc·1>]¯i7S+‘-ã2ìø0D |Ap¦†<àÁíKŠ%žK|—ø. bƒØ V{‚öí Üö­|ü%÷g˜Á«ð«êß¶#¾­qcu…Æ MgÆkl’F¶ë&ê¸kÄ¢±è€èÀïù·ŠÇÕI±TW»}ä„‘FNˆŽŽ>]xºðt¡ÁdƒÉ“ù£žážñÛQˆB·©{W÷®îÝ@HÀí€Û·õªõªõ>°nÅVlý•–ú'2ã0ŽSÂ!á$œ„O;mì´±ñëâ×ů3tÌÐ1CùŽ“Æ¤1i?;VÐ@&2‘Éí°ÚfµÍj[ëÅ­·^ìÖ×­¯[_¾äc<Æc>ËGÝÏÅZ(¡$ä-yk/¶ËµËm7´m^Û¼'—/¿›q×õ®k“CM¤Mø<LSŪbq(¿‰Tä@ŽZ¨ªíkªäí/oZݵ"f;ufGÐlí2I¼$P´‡y(€ú0‚¶Põ_Übñ$LÂ$ÎVï†Þ ½Ò@i 4°ìzÙõ²ëo+ÞV¼E’„7xƒ7Âó×C8‹LCSLƒ6DÐF€h$j[¥-©mUa;U£ÂVi¶ÌEi&î:¨¸«Ù¦nÃÍ6i~¯ž­ù=< †ÎáÎñê4ú0€>7yò/‚Ë(Ì%iâÌÐ]dÙuðÚÁk¯½ˆxñ"¢^Ûzmëµ|óÍnÖ¯Ò|ŽöI™\2wš·øÒˆF4¢¹MçíÎÛ··¶imÓÚÆî¦ÝM»›|™Y˜…Yœ¼Pa_8ÿ¿"©€@ò^ÌpŠñaÃ)nߺ–¸}[¯A½¦õˆsÅ…âÿ¤—wà!2‚ à~/ô_`ÊsóßjPƒ§Ííò ò ò»ïzßõ¾ëÍ37ÏÜ<ã­á­áÍ+r0QLÃϵ۵´ki×242424²éž¦{šî‘Ê¥r©~ðƒú¡úýûº–ÈPd(2„¬`ÕÍÑQ[£¶Fm=Úõh×£]M{˜ö0íÁWð²‡ìá뙓ËäºåññïpïpïðÀ… ê^н {¿À—³fXwE‹Ó~éBº.Ìeæ2sùÈGþ¯tÛ ÆŸñorË+Å+eBÀôSÓOů¦”Ò'c)¥ôq ¥”¾~D)¥Vø£Æ“Çä±00 üYÃf¢%äq‚4 1çp@އ’ÒU±Ã2ª,æ>ïßAá¶àÅÀ>Öº:Ï5ø0V²ñØ+TžÀÇJ¬ÄJ˜Ãæj†j†j†>ó|æùÌ ºt!肇‡7SEÔ‰:Q*Làÿƒ3 DÔá uØö°A\F®€h†h‹h†y„ùó×x×K®ñ&=Lf›ô`£øpQO-‰=Zò;Ôþ5¦Õ ¬À f#³‘Ù(ž"ž"ž²$nIÜ’¸¸aqCã†îøfǶÛÔƒÔCÕCI8iKÚê´Õé ÓÁÿ¸ÿ)ÿS>4ð7ð7ðçÏÆÅ|¨¥J@@Èj²š¬æv÷1îcÜçÈÄ#LŒRE©¢T>O}žú<åä Ez"=Ñ1Ç1ƒ1Üäååß¾|ï›î›î›.1’IŒøºúwÄüœÓ —„«=Ú£=yCÞ7¢¯E_‹¾þeqµujëÔÖ¹†»†»†O0š`4Áh{ØöÝÛw_ÿîê¡«‡^5HñIñ‰ê¬¸¡¸ñ`–R¤=è©HQ¤Äö¯‘ÖH-Ù¯µ_Ë­`$’D ƒá—Œø/ýo‘ÃÄwˆSQZ£üüŠ6UGPH’PVBÍéPµx‰7c«1[:JÒËvÐü)¡·€À—÷š¼In’›4›fÓlƒñã Ækºiºiºáᑬž¬ž¬b‹X^š›øÀ¼Ø«ðUH§*¤#HÇK¼T¹ªÆ¨\³‘läuÎÏël¥nám¥n;½¹¦íô·aZí߆Õθ|¤v‚Á€¤Àj 5äÒ›ÈE-jºÎ?É„3g`fP{jOík“k“k“¿÷íÄo'z%x%z%zuõêéÕ³óûÎ¥K=;ôðÐCûÇö±ö±²U²•²•é²tQºè}ÜûçïŸãGüˆy#•sùàôXþPPPz‡Þ¡wÈäòC^ç¼Îy3¼3¼3¼½‚½‚½‚íoÙß²¿õ€> (=JÒ£üJ WRH!Õ>«}Vû¬ÈEä"r)¤…´Öè×è×èósÌÈ@Æ?¾®¸Ùô:ɹH )!%h‹¶hKûÑ~´Ì`3zžž§ç¹n¢sKç–Î-ûKö—ì/5Ðd@“þëü×ù¯³8fqÌâ˜îÝ-º[dcÔ"Õ"SR“'-¾µ÷öôÛÓÛhFD¨6¡µÊg ‡ &Q à?,á ga0ü’ÿõSÐUˆC&¦@…Ym2{úªT:É#¯‰JèKì4m¡£«™ÿ ù_¸«À §'ÀÜaÎ0gˆ)1%¦ÕúÕúÕú¢.¢.¢.8Ó8 X’©ÿ”‚› p¥€+Z£5Zà np«íR³¶¶K*Òž¦BÞ2ycÙ­±ód·¤Ñ=Š¥ÑµÇW·­=®ì‘h§äÝ!"2A2T¹È@4U?™,Ÿué1ƒ1Äœ˜s¢Oô‰>yH’‡L;¦Ó.Í:Í"Íâ»iß-þnñÔsSûMí×#¡û’îKÒZ¥ÎI#>(™,™\º²Ô«Ô+cdÆ•Œ+ä,9MNS9Õ |´É¿5´÷,Îâ,'¦IÑF´Ñ«>¯ú¼ê–––äëë+j&j&j¦ÚªÚªÚÊKÓrŠ4RH!Õê¤ÕI«aC˜r¶œ-g‘Žt¤ÃîpGÒö¬.虋 (BŠD E E ÙìNv'5¦ÆÔ7p70S1Uz^z^z¾Q\£¸FqMãšÆ5kìÒØ¥±‹[µ[µ[µÖn­ÝZ»«nUݪºUô èAуH«H«H«;êw·ÞÝúF3©oR߬uï’Þ%—\}}õ5S_â q°‡ÝK»—ÒHqqƒ —¢Œ¢ 4Gô Ý¨ÕÃr!JàÏöp)ãNøtι©—Âf-‰ùz¯¢Õ¼oúŸ§ì’ÄÁßåÚø;g~®‚\B õ&ð¥AtˆÑá¶jŒjŒj¼õ½õ½õ›Z4µhjaìaìaìÁ—Ô"ZDK¨1? gbrsÏ6І îKÜáÿºA4d¾Ö’uÐýQ¬*ï6û¸¼³ß(‹ÙÿÓ9Rt‡ ºóú!§‹Ô‚„`8†c8Öc=ÖsóßÄ›xor‰\"—KÆ’±d¶2[™­ø?à‡ÿrâbÝou¿=vêÞˆ{#â.)›(›ÜîR¨*T=>þÞî½Ý²–‡“'ÿìi"Q$Š‘0FÂ} ðŠæœ×û¿#“1çz1–Œ%c9SÕ»‹wï.wîÝ5:6ëØ¬c³´{h÷Ðþàé."""â?^“½&{M‹‹‹7v4v4väMÞó8óu5þO ײk±k‰ñ!>LW¦+Óõ—Å Ú´5hë¹Âs…犱‡Ç{øÐ¢C‹-ºÞàzƒë âçÇÏŸÿ\ù\ù\yþÜùsçÏ­?¸þàúƒÝ»'vO4²6²6²æFÿO¬Ï›Ÿ7?ßb¦·Ì[æpß¡‰ï‡Nÿ©AsLàÏ>ûóH!YÀmÍtÜaµ±rÝ‚¯ή™7߀ ”.9=xÙÄþ"Ï'|O wO @ #HŸŸ§ñ"Yê3I–´íÂ+Ò¶Z×"j]“g´Ý*ÏÅd¡q¦Ì_ºº3ÖzЃîáä 9Èôcú1ýD"‘H$bF0#˜ŒÁüG/b6ßl¾Ùü&ý›ôoÒ?ü@øðýbûÅö‹ÞtÆðÃ×[¿2þnj׭^·ŠC)¥³ËØe¯žRJé¯l^Ù„ËBõBõloÔ;]ïôo^æ®áÇÄ1qüÏZ‡uXÇÿõŸbªÖ…SC ±ñ;ãwÆï.×\®¹\åååâTãTãTÃ}¨ýd?á?ðdF2#™QËi-§µœæ?Ë–ÿ,34fðŸ4p>»_Z·šÀ&¤?éOú3·™ÛÌm\Æe\þåAšššcÇŽë=Ö{¬÷aßþ‡}?2~dütÓÓMO7ÅŒŽ3úFĈë'¯Ÿ¼~rŸÐ>¡}BÓÓÓóvò˜|&ŸiÉ4f=âE¼Ä3$$D=Äâ½úSô§? Ù²Å/Ùõc5,5,5,¡ ]èb ¶`‹0Ä}™| W™>8…GXÅYÕ5?–›+›Öö0|&í'º`6ŠÍîjiª¯P"T¹Àü´ýgùµz æ`æ ¥(ÅflÆfÃ1ûYI? P ‚jì¤Ç±j5ؒͰ¥•ZÔB¹oþrå¾Ú×[µÆê–GŒÕm³ÇÚfeGæOÊŽ,i[\¯¤-&c2&Ñ%"ªI¨&(R!†bˆÁ‚‚@À¢5`¡‚ }Ð}ˆq $ƒd ’CrH—Ç@ÕRÕRÕ’â?ÿx¶c;¶s›"‘ƒÈAºSºSºS~P~P~Ð6É6É6©^R½¤zIVVVæ‹Ì™/Ò Ñ Ñ Ñ_¥¿J•AOƒž=uZê´Ôi©3Jg”Î(Ö’Pƒ² ïG½USOk°Öàê´šö5í1е`-Šú»ä®Õ&óvæí–¤.ª¿¨~¦Ó»ÀwiÓ¦ |5çÕœWsîYݳºg•¼7yoòÞêàêàêàŸyõE_ô---g嬜•Ó*ZE«xD%”P~Öþñ«° «¸Ñ&_+_+_ë­ä­ä­Ä#Û#Û#»¾¨¾¨¾(Ñ:Ñ:ÑšÌ'óÉ|*¢"*ÒôÑôÑô‘VJ+¥•åýËû—÷WÆ)ã”q|^[Îäs€ûàFÔæhŽæÌ=æsè]¢«: : :@ÐôW\þPþPþ°ajÃÔ†©ÁEÁEÁE.C]†º µ`ÿÀþáÃ7†oJ»—v/í^p®à\Á¹¤¡IC“†^]yuåÕ•qAqAqA9Osžæ!Þ<}M—#g¯…r3î´5lÑWh¿ uPT‚Â`‰L‘™€ª€Ž:jÓüZ㘥…ù"K‹š»µù5wß%½+|÷¦²cePe‡ÿrþ@øÃYÈA‘ˆÄß¼‘«ä*¹jœfœfœ¦ï¡ï¡ï¡c®c®cnlmlmlm÷½Ý÷vß[ì¶Øm±ÛÚÔÚÔÚTßRßRßRn#·‘ÛHGKGKGK^H^H^¨ùªùªùâk|¯ËV—­.[o‘o‘o‘ÿ,ÿYþ³¼…y ó¾Z¨Q¨‘ü}‚w‚w× ßNø¶]M«³­Îõ¹²Z•µ,kùZrÜú¸uƒãž O…¼Z_µ¾………UWª®T]Iï”Þ)½Óƒüðà‡gMž5yÖ$³0³0³0muÚê´Õ¿ò#Ÿã9ž“çä9yŽ›¸‰›TNåTŽØˆ? yüßâ'8a†`—djLî˜Ü1¹C}‡úõ=Ùúdë“­M^4yÑdf3‡™Ãnd7²­Õ¬Õ¬Õêß«¯þ½Œ#2F¼¼þòúËë¼âûE\ÄE¼Æk¼þ›~EÝú CÂøÒD ‚6¡Mh^O½ºËu—ë.wºët×énÓM;4íà÷ÚïµßkË*Ë*Ë*¶m5ÚJÇHÇHǤJ?”~è¹â¹â¹"þdüÉø“·Ko—Þ.M?˜~0ýà/oG´E´E´…íÉöd{RêB]PˆBþ®@çHD"’ ~Õé¢ÓE§‹çYϳžgY«bUÑ“£'GO®¸\q¹â2.Ü}ÑWðwÿrø3îÃèú#à ¡%ݪlYÕÊ«5fP2ûÔ@Jóètýµj‡¥'œøÙ"„Vüp&;'(™ dBMUjÐ!ÐA †"¥B­|w…Zw'Àh¨Q„ÑP›Î6I6*"«¬¸˜ñ(;.ã] ˜J—üÊùoànq›òzr[¹­ý û™ö3-ƒ,ƒ,ƒ,Â,Â,Âô/ë_Ö¿lºÍt›é6³Ûf·Ínûûû®4\i¸R®%×’k)o(o(oÔ4¨iPÓ@ÙIÙIÙ©¶Um«ÚVÏ+žW)|Rø¤pcáÆÂü½ÙÀ³û©S;žnãfãfS©¨¯—±ââ¹3Þù¾óM©Š wÜìÜÓ¹gý§õÕ_äçåçåçeÕþªýUçkÎל¯y¾ð|áù¢Ö¥Ö¥Ö%Õ6Õ6Õöuòëä×Éñ©ñ©ñ©QÑQÑQÑ)ÓS¦§Lç4ë¾âˆ±"VÌ æs‚íÆvc»Ñæ´9mŽx€ÿ3Sþ-Þâ-óóó[ÉV²•q3âfÄÍ­­­²_f¿Ì~™ÈCä!òPù¨|T>X‚%X¢9Qs¢æDòùŠ|UUUu¨CÄ‘8G_Ó×ôÓ›ìuW&à0žŒ'ãɲl,ËÆâ!â!W\:@:@: éЦ+š®hÊ4eš2 û7ìß°¿›–›–›–£Áh0•¾•¾•¾¥þ¥þ¥þýû?ö¿9àæ€›†& Múúõëׯþ»¸8v¤i‡X€Ô”šRS•£ÊQåÈ«ÕuÑù¿MvÎ.j‡vh‡A„A%{Kö–ìÍ_¿:µ…Ž…Ž…ŽÅh‹Ñ£kkkøl¾u?›ê àc„5\ÀXôE0ð'‰¹twóãmŸ¶ŒªgºTuŒô0"ëÒûŸìíÏ®%«pk¨ ÐIh ç  ]èB»Î?nO=ÔC=8ÃΜJ7êÃõáW¸ýÖ)õ¯ºÐ÷ÝœV+avç¶þîB=6‘¯ÝË®aßI2™»ŒV‚ç›+6Ò«••†·Mû˜öÑðUߦ¾M³D³D³Dsæ:Íuò›ò›ò›*/•—Ê«ähÉÑ’£Å3‹gÏ|ÿôýÓ÷O‹G*õþàûƒïf É’1$#'#'#'áL™„3Ý ºtSj(5” …‡ÂƒíÂva»üf=¢…¢é¢A¢A´#mGÛ±Øaì°ß_‘r‘\$™´4iiÒÒ§›O7ŸnîcÜǸqèèÐÑ¡£í+ÛW¶¯ôÍõÍõÍ˺•u+ë–7!oBÞ„w›ßm~·ùiû§íŸ¶ÐíA·ÝÒN¤H;‘gŸgŸg_÷üd.™Kæ’åd9YN5©&Õ¤kèºgpgøyë¿ÅeŽÿjPgÕYu›M6›l6í°Ùa³Ã•¨Då÷1îcÜߨ½±{c'•ÆJcy7ònä­Y©Y©YùüÂó Ï/t.è\Ð/ð/à W¸~#Ò>ðÁWø _‘dYÀý³)l ›R· Þ!½Cz‡l;Ûv¶íø*ðU૦M›6mÚÔ¬‹Y³.ÆEÆEÆEªTUª*5Ý5Ý5Ý5éXÒ±¤c³g=κ9ëæ¬›³òÚæµÍk[;¸vp퇈‹Ld"“QgÔuVÆÊXÿ4UÔù÷±˜‚)˜‚=؃=ÜãÛø}ã÷ß³ÍÙæló'®O\Ÿ¸VÆWÆWÆózùßâ[|+ ~_Ãp×…:ÔĺŒŒÌ¬Mc‹èü‹aýãBŸ¶þÑ5Êæ%P{^õäõý|í’=õ[n:xª”„`;FÒ'˜„½(F%ª…føpÒ¢^ð‚ˆ@´B+´B€ä ‡_@¿‰›¸ù»Î9#0B¶Z¶Z¶ZÍSÍSÍS>Nþ•|œô¹ìœ4_Òš~/Ù¦÷M#{›í±g¥†É¶dûÈP¦vHí€w… Ñ®ÌtfzqJ±}±}ö¨ìQÙ£r¤9ÒiFuFuFu®*W•«*šP4¡hBîæÜ͹›ß|{ðíÁ¢”¢”¢”ß_ $˜“`>¯'7ï‚„Ðv´mGÍ©95Ç",Çr” Œ%s€9@’˜÷Ì{lÁ¼A[8ÀªSUÐoÙ46ÙÈf³Ù¶l[zˆ¢¿"¥`¤0R)¼œ¼œ¼œl_ؾ°}á¡ï¡ï¡ïzÊõ”ë)---^á{f`FZxZxZxÔƒ¨Qýýý_ïz½ëõ®„ˆ„ˆ„ˆ_ùažð„§(F#Š¡ÚT›j³“ÙÉìdÌÇ|ÌÿºòÄ’XKšI3i¦zŠzŠzÊ«5Vk¬šMj6©Ù¤yæM˜7!rnäÜȹº·uoëÞö\æ¹Ìs™Â_á¯ðbñÄ≅R¬+Å\lã0ÿÉ[©»ò  hðŸûÈ>²v¡]hZJKii݃$·%·%·›²MÙ¦¬GµGµGuó’æ%ÍKœkkkÅïÄïÄïH/Ò‹ô*\8¸pð·'nOÜžÜyrçÉgáÏŸ…'.M\š¸ôWng43šld#›mÁ¶`[pŸPÝŸ›wç>­Û¢-ÚrWt­ïZßµ¾UµUµUu›Æ¦± Êe‚’Ÿwç ý*T¡J˜wø]ˆ½/rÚЂöaE¯‹AN”.w2ƒ–. “…6h½5¬_Ûñ·¿/aK#ú+¶*¶Ý»\y¤òøÓ,Å6ŶÅU·lÜÒ¦*Œ c]Ÿ¹-v[lýÎúõ;ýú+ôWH^K^Kþ‹ûç—Ì4f3I<‰'ñd™Gæ‘îàîð3‹œ/µ7¼á MhBó#×9ç½;°ƒ›u&»Én²›iÁ´`Zü²¸¦Ÿ¦Ÿ¦Ÿ}GûŽöû<ìó°ÏÃõ%ëKÖ—œ±9csÆæ®ÿ]ÿ»þ '<Ž›7?nþ· nÜ6¦lLÙ˜2êÙ¨g£ž¹*\® G G Ç_©OâIïpåeF‹ž{†_2MñÌ¿ZÔ˜lEîÐQЃ¯Ð ÿ9äó3j›±›¥6R©Ô@j 5æKó¥ùRW©«ÔU#M#M#M}ºútõéêÕ;«w–ÍÍÍd˜&©d*™JækækækU¨*Tªx­x­x­¥¥Uu¾ê|ÕyÅ*Å1ÅJ³Š•ßRuÑ=2ïòãÔ6i“Õ»€ÂL†@k£6cÛŒz|i˥ߪcš0M˜&ä¹En!á§&Ô„šÐ'ô }Bkh ­áf7?£8(Rç , $$Ñb´-:„¡CØŽlG¶ã/Õ©;Rw¤—¦—¦—¦WªWªWªSo§ÞN½RRR {ö4ìYeXeXeX]]{5÷jîÕ/¼xðâñŽÇ;ïx{êí©·§R‡¥Ký5'ŸÛ¸Û$™$“dÄ#ñÔ™:Sg Ã0 û£uÈ…TªÆ¨Æ¨Æô¸ÕãV[sé\:—^p}ÀõSý¦úMõ³še5Ëj–C²C²CrºaºaºaBç„Î 11רù¿k’»7¸Áä’\’‹ýØý|'ç¾Uõ,õ,õ,—Ù.³]f7qiâÒÄ%`GÀŽ€Vç¬ÎYÓ,Ò,Ò,’xJ<%žiýÓú§õ“ÄIâ$q§âNź=íö´ÛÓ²—e/Ë^ö+¿÷˜è˜èÛžm϶§õi}ZŸO õùèzqÉø¸œó0óÜ,Ü,Ü,,Ã,Ã,ÃRz¤ôHé‘´7ioÒ^øÂ¾¼x+—³V˜wÿ—ò1g¹Î±/>$7.z]mW³JZ‹,šJ{CO–#~&šf°V=@Í2…Á5PrœDöB¿ø/¼Â+¼âcôÎéÓ;g=Âz„õΈ”uuuP­6Zm´,P( g³Ùl6› ‚dØ6€u`X‡Êù•ó+çWæWæWæWnªÜT¹©jBÕ„ª U}«úVõUÚ)í”v555жжж¼ã °Ð·ÆÞêéßs¤x¸¿¸?{ aCdÌUæjRUìÁ؃d™Ï\c®ÑXv»«±«éFº‘nd§³ÓÙé?Kíô[¯Ïçõð ÝJz‹Þ¢·T¬ŠU±\&Q>½§‰Þ}Ñ—ªSuª^¼­x[ñ¶køÏ?íéÚÓµ§×3¬gXÏÐí™Û3·gÍf4›Ñl†Üà˹–s-çF<ŒxñpàöÛnOVOVOVyé套—’ž%=Kzö0úaôÃèÛ^l{± 0€ÁÏªŠ›J»&º&ºF'Ò‰t"kÌ³Æ¸Š«¸ú›„íÌvf;s!•¯b_žŠå”yì’ì’ì’LmMmMmåååÑѸءءØ%(A P@ñ+µÇE\p2‘+°+Æ…qáÜXkÖšµæÃ1ŒcÅXyÔxÔxÔøøø¸ßu¿ë~×ã¸ÇqãÚ#µGj¬hZÑ´¢iqLqLqÌ}§ûN÷îÝ1ºcôZóµækÍ7ùoòßäóW_†eX¸À…8'ℱ‹±\Dª•ª•ªougÓ?)Þ,d!‹µ„%,3<2<2<ŒŒŒ̲ͲͲ³¾Êú*ë«Ê¹•s+ç¢=Ú£=¶a¶ ç¿•¶èü$[HKÖ•Ž¡÷&´ºìÙjýP+O5ÕVU×ÚùÊÖt#Ñè&>þðδ‹6/ç¦\f(9Oú³„¶ÿ Ÿ* ð3êhVгô,=keeåÞÒ½¥{ËŠŠŠŠŠ ò ù†|£l«l«l[“Y“Y“©LR&)“*]+]+]+Õ*Õ*Õ*µ*µ*µªŽT©:Rc]c]cÍ®dW²+i2M¦É¿yuBD„Bk¨’*a1ÄxûÞ³RHySãKƒ3þ¸ÏÎÁi.æb.³ŸÙÏì'/ÉKòR¥P)T?3pÅ‘âHq¤þý;úw¼ÆzõëÓܧ¹Os{Öžµg­[?¶~l¦c¦c¦SiSiSi“Ïæ³ùlv«ìVÙ­bücücü￾ÿúþë´±icÓÆæ¶Ëm—Û©HE*S>ćøp®GÔ‚ZP ºŒ.£ËøŒ³'p'ø•œi˜†ixЧx*”FJ#÷÷Úßk/—6.m\ÚŒM›>6½jmÕÚªµúúú÷Ø{ì=¶òrååÊËñ Ø€ œZ?'Ó‰ÑÑŒˆ1"–²”ýÙǘ–––åCˇ–ƒ¬ƒ¬ƒ¬½­¼­¼­¬$V+‰ñã Æh M¡)ɧ’O%ŸJz‘ô"éEÔ¤¨IQ“î¶¼ÛònËüfùÍò›±bVÌò‘¤1iL“ä9À2,Ã2h‰–h‰jT£šs|ú‡õ(‚¬ðoð†‹¦°LµLµLMÿ&ý›ôoRRRxYOÎLÐîû×3 féK Øíô}ßÿtS5×Yû/u˜ëª© Q5$ E©¢Àþ×x~?ñpÈÓ¥ D›KÖ©ÆQ†NšA@@@à·àò;rib,û[ö·ìï6Ðm ÛÀÚµ/j_¼-[þ¶Ñ}¢ûÐpNÃKKKkÖÖ¬­YKV’•d% $€ž§çéyº˜.¦‹ë^KÔ@Ô@Ô ÉÒ&K›,mеA×]}}}Ý©;u§2=™žLÐ ò™|&Ÿy$~$~$~Úéi§§¢í£í£íÓI:Iÿ»…™ÀL`&à.áÛíÎvçd+?aéßß‹¸ô|1µ7hoÐÞÀ5¾ªDU¢*y÷4îi\ŶŠmÛøÏ§Q…QÂø)ð›D¢…WÜv˜Ø¥íÐÝ×#J•5ó'èDéÒ‚!cBZmhÄ•û1È#¡Þþ ÁF0·)Y(Y(Y¨-Ñ–hK´µµEq¢8Q_’›“{ŒÇxŒÓ8Óœ› 7ëÉ;$4ES4åCM`¨A jB5ÿMÔuɨú¨Ï§Ñy†gxFfdÀ0¿ÿúüëó¯×Z¯µ^kÝ>«}Vû,ËBËBËBCbHÌÏ*/†Är$ùÏKn¦ßÆ0þ•þ7Ñл° »¸@mWSWSWÓðá/Â_8Ítšé4¦0…)/'j kX œÀoE=q»øÞõÊâ„ñ¤ªÊy•–)‡Ío; ”殈z{ö± ׯ›¹2âÌZR*Ô›€€€ÀG€óåu€þµ†Ë—@Ýd=ïðï˜4&°ó`ªÉIDATIµµµû­ƒ´.i]Òºr9ärÈåq>ã|ÆùìØ´cÓŽM7¾ºñÕ¯^¹¼ryåÂ9ÕÜ[zoé½¥gÞywæÝœsn̹Ü+¸Wp/'O'O'O.Ôµî™k<¸ñàG}µzÔ*R™™Òát‡-¶XXVYVýìÒ´Ò´Ò¼†z õ:Ðm Û@·}¹ûr÷åÞÞs{Ïí=1ëcÖǬ_¿4~鹡熞º8yqòâäîA݃º™ØšØšØþÖ¯==="—Éer™ÿ4åÿð§lþépqíjíjíjÿÿÿ˜Vþ­ü[ùk\Ô¸¨q Ð pGpD þ}ˆ?Ö‰¨?6à Ž@ÚÍÂ~%iµVìh–a†Š$LC2{˜i*™¸1L`SrH#“ç+ÿƒºËýáG8`Çÿu36c3?kË•¼Zÿ¹ÔÍœj3˜ñ~á6° ŠQŒbò„d~Þܼ¹y~ìlØÙж…m Û¿u-f$3’ɘ2¦Œ)†b(†òø2^þJ[syU¹®¯ñ¯ëŸªªþ©pƒpƒp篿vþš/¿[°åg¬<ÑöÜ£Ç8’trñVÞð„NáôÝ¢Ù/Ðò%…ƒÛÝqö®ãPMµWj6\$ñ‡„ÊøhÔ5Ѹ ENcä.áéAzL„üòPu'õ¹ês­eVÇ­Ž÷:7àÖ€[O­•S”S¢f)Ìæ÷Kª7Tox:W‘¥ÈòôõiëÓö—g`3ƒ™ÁdÙGöñ=¹ðhCÂðWîPàÏÁexè¨é¨é¨èèèú½ñ{ã÷FÓTÓTÓ”/ÉeøapoŽ#{|&:"±ÍkJo´ˆÒŲQ϶÷ìalÒSG¢ÈÁ€("ûÐí>9\fPŽ—x‰—L ÃĈº‰º‰ºÕ-hZaoŸN)¥É­)¥4¹¥”æ˜PJ©ys;S;SRH%.’U’Uä¹GîñI—8ê†Û |\Ì`3^øàzÇõŽëðþáýÃû;;;óm×aÖñ‘Â'Ó?þñýX”@%ºA'1Þ¹Û+¬«gBÅ =ZkÅ^ÔÍÝ—„iÌ—œÍÅ1ô€3™o8Rü<Ž]@@@@@@àQ73¨ÜàÆ‡ÀZ–äk²,Dl`Sªz¿êýªWzî9Xe±Ë8ŠJ±[Š/æ‡ä‡à8Z EMr jÀ§:ªkÖ ·ø¸pY¹”R¶°…m†{†{†»ñ9ãsÆçL£L£L£2m3m3m+›T6©lÂçUÝŠ­Ø*Tžà31z "HámÑ|¥ËÚ~=«æàü݆½_3×sÀ·[f†üb³ŽŒ"fBå üêæUå23\[»¶vm¶1lcØFçåÎË—óå¹\¶uøòñ°ŠQаc¡‚Lö¸’üЧYC¼UKédú^g›´\\¥1@܃Iâן4Yþ·Hë$äš‹ÝØ-Ú&î.î.š(î îÀÿ›¸»¸;÷×_9Jàï“wäÖO¸L6°M¦Y¦Y¦™2C™¡Ì0î`ÜÁ¸ƒÆmÛ·qp;°;iÈ.ÓU¦ ’JaÆæ­,[UQ‚ÖŒ3¤VDýd/¤çÅã4H&‰¦`!Ipƒ‰Ð ŸÊ:RŒ‹ñ5¾VÕñ¬ùÿ8¿r”Àß çŒ´‹°ó0óJõKõKõsõsõsõ­ÅÖbk±…®…®…n¢u¢u¢5ïo [Ø" iHªðŸÅÇ›q/‡J²CHwnG^vùêJŠ‘/zÙ¨Ä|‹*ý>šr[® Ý‚Sˆ„ÒŸY~?qˆC¯ÛÓ]Ð%+%+%+¥úUõ«êW¦§MO›žÖHÔHÔHÄxŒÇx~†^p˜ùò±c½#Üfu•;; úµ‡U³Eú¤yŽ&¬»Ï¢¯£©Ë]‚N¤ë ua‰M@@@@@@@àOÀ™àÐ ø¼ªƒJ•Êß“¿'ÚmµÛj·­çXϱžƒT¤"Û±Ûy}AùçÅGn*ºñÈâ¶+îÖŒS¹•}§L®m.Þ¬& @÷Ó£2M±úuˆ! ¬ÂnhA 2¡1þ0u}Ö `˜À&ç2ÎeœS®U®U®5žj<Õxª¶H[¤-âÒ6aæ`Ž üóÏâcc­G4Mæ6ˇ֜Su)~^}§¦J¬"HjèBšbRO³·ú:Ô¢æÔ¨A*4†€€€€€€€ÀŸ„›w?ó8Ï)¸—[”[”[äææÊ4d2 ËHËHËHä!yP‡:Ôa X•÷OácϸïG xý²[Mzíð²$[kHæ2÷H+HØô­ùn­™òqXƒb¢Â”@rÁpøÓpóîÜlz"A³hÍÊ*Ë*Ë*SÌWÌWÌ7Ê7Ê7Ê×ÎÐÎÐÎÀ4LÃ4ÞÐø‡ð±gÜ—Ñkˆ†"ˆÊ)š×D=¯:V ÆžÙ‡KôµÑ_'ß%e˜þLQA MH>¢¾€€€€€€€À— 7ïÞíÐã0ãJ»–v-íúþÛ÷ß¾ÿVæ s9XM³šf5 7q7± «° Ð „pÕÏŸïã~ÏP T;”j KªªÏ*ÇAÉ"³Y%M£>KÕ,%Dy¤îA @ˆ„ÆøKpóî\*'þøoñ6#$#$#D!Rˆ"ã»Æwïêèèèèè шFÂ&TÞçÏÇžqŸƒs¸Í f8ÍV«*T‡ßï®èUÕD4„ÉaOQ:ëzHóÅã5r’ôà’C$D4 |¸¹óy˜‡y°†5¬K—.9œ× ¯A^IŽ$G’ceneneŽD$"Å(F1oô óîŸ1Û\Þ€kx(Š$»™.0…EE¨´«–L³—M¦ùÔKó©D*Ò0ÈÕ!Í5ÁðC@@@@@@@à#À™à*¨ âal`›ìõÙë³××l¬ÙX³QïÞ;½wšs4çhÎÁ œÀ ìÅ^ìòª~Î|lý 5¨Á=( C.X0¥'•¾ªù¨eGÒúhH_Ы¢rFybY ·N{?w9Œ¯ÑUh 'õ¸+°­Ñ­K•.*]”¿1cþFõêÔXì±Øc±¥(E)t¡ ]ØÃöBå}ž|lÃÀU lñPå£Ú³ûØ¥äq#2QsŒt7ôÕ)wæšIBÑLh Ì=ÜÃ=.=­¦Õ´:Ã*Ã*ÃJ1K1K1Ëä‚É“ Zƒµk FÒ†Ä †?V ± ò9ñ± w tná%·£d¡â]vª&ÒXOXˆ»’³¤½i3MW9AV¡ ñC@@@@@@@à#Ãù¬·E[´ÅP ÅÐ’k%×J®å·ÎoßZm¹ÚrµåÖ­/Z_ÄDLÄDhCÚ0†1ŒQ‹ZÔ UøùðiBB{Ñ“¸Ãm¾?]U¢XV³IuBµ—(1 =Ë ¥®ê&²]a2|á*4†€€€€€€€ÀG¦®Ï:g”[À™G3fUnVnVn6´4´4´4e:Êt”´‡´‡´œà'tDGtªðóá“î´vãGnû}¿ŠÖŠVÕójuUŽ$ŸlÅ$T‘iDij¡‘,ëÅ•!ë7¡1> ܼû\Á¸Â®¥¦¥¦¥¦ùSó§æO% ÉB²Ð£›G7nÆ.Æ.Æ.¸‹»¸Kt‰.Ñ*ïóáÓîFt)Ý9Äå$•]ªø¡êJ®ÊÙNŠÈmÈ !‡ djÚÒ®`À@Œa¤¬ÀòCŸnÞ=qˆ#šD“hÒLšI3Kû•ö+í§¬¬\•R•R•B†!doèK D¨¼Ï‡Oc¸a¡ µPå-)ßYYV=¾fGíh²¤ÛyЉ:ßK/ŠºÂ:¨%[Ñö`ù!O ]DÑE\z¦2¦Œ)cÞx;àí€üù3òg”%–%–%r†>EGÑQBýÛqƒŒˆ'va2yCBIýD­ñ½º^¤tq›A)]vé넛΃ŸµyhƸã¦cÂà+Tž€€€€€€€€€À/ù4?/ƒ|¼BøS:”®-vW”×Ê¡Bƒeãh¸¦ŽÚ Ù{µ 2 éõê ŠúJsBq ;)pw…†ø$È ƒ ( ÀVlÅV’CrH?ËnNÍ©9FaFý¬¤ÀgÀ§1ÜE`@ˆ”À&0*6VžW…BDæKˆØkì1.jÖÒïŒ"4öÊ%Ûí•Rò‚LD/ F@@@@@@@à“P×…Qõ›ÉR“ý3ãÓÈAªÀ‚B1DHF.òó¯UíV,‚&´˜N£Ï4Ê6K´õÉ“e1PB %Nbi-4‰€€€€€€€€€À/aþžËÞ©²S>Ð6ìSú–ú«wßykÅÉ–H†qyd)‚ÑPh_ò7î9)eY•+4…Û‡½BM5öHG‹ÓtæËFJÚó…ö‘ðšD@@@@@@@@@à—üM†{Æ7Å1å Ôƒ k WLõma†hN—HEƒ¹2d<`#(¹ ü’¿ÉpÏ—I+Ö –XAWµ›êÐ1È뉦kÕHŠEI|¡ï‚‚’»€€€€€€€€€À/ù› ÷Ì.EwËÀÍ`Cè%dØh£Ÿ¶“¬H"‡rh`;Îá2 ¡ u¡aêò) ÷|( â6+kµ]Ø–ªº_Ô‚ÈÈyÖ‹½g±M·\ë=”¨B…j(;^G'¸ÃQhº|JÃý)òQÆm*ØËôDQ¢bÍ0Ñ-æ0±TÙV&1š3Ô“±˜¸4í°p€¥Ð0uù”†û]d£Û¬6PÍR­Ë/®º§< ¶`ÒHO(XÐQú×5Zªµ— í5ÆkˆÑ–0F@@@@@@@@@ .ŸÒpC.Š!¢ôU©±ÅÖU)Ê Dƒ‰dAÆÖ°ë «¯WÛ¨–*.EA  –´„5Œ„†¨Ë'4Üéd  ° ÕæµrÖ£À©ò¸b:ª™r2’ž£i‘Î Y+Iš´³è(ZPõam¡aêò)gÜá-r1ú`kG×ÞRi¾\¹¡:jL YQÌö¤±ú¥j©’ñÒ,‘!ó! µ1Œ¡+4Œ€€€€€€€€€@]>¥áþžã Ó…˜ã&ÎÂ’¾ÍH*nZÖ`Š×{u9¸S®^¾)î§a4ù›}Í=ÔÎ|;‰Ñh/Õ;³#,‰§ Ùǯ?z¯ò¾#Oï½Õ¤Õ0U1—fWqcà€B(Ë/ =f¢?öà D`P ‚SàɃQ!„òƒò…+œ †œBà}Íe¾SÞ«Š5ÌU²çú¢cƒ³x+Îi:-ß`©®Œ5WÆ+³µ‹Ä!B7–AÊ!Å^ˆy›5&tŽÿ•ÜO<YžJ¯ìGÞ@¨Ä¦³JjFÞŸµï§$žü(q'„BÈçÿO Eá8›Äò©5øX~ÏÖ$sFw/ç‹—•©ïZ§Àü²y»r:¥;`-n¨oªf½©úñ :®ï¦ñ¶¾°LT¦žŸúnî—¯çœwË¥ŒE>ZãÄ8±qj6u%W¸ƒ0‰0À3¬P('¿%î„BùQ100è A„XÙ.$ã{Àr MÌ?£º­a‘¯YZû¬è½¦X«œÁ­:æÝXU“Q `WªéE>³+¬§&“üTêjm¯|ä§·ÞzÒ'òÅbçëž¾¾uó>›í/øO±™XyTæ~Ü„"HDR B€*T:-äç?°„B!Dƒ ŽE–ˆ±hÃ*³íl¢:™ï㊭aÙÚÙŠø¹l[¾bþÃ5ÞÖöÞ͆‹Ñ SiÓ:söa覉w¸£«—0$e§Ñ}S‰‡gÞtŸýêœÇ¾¿KÈc;Žxž}`}”Ç|‡>ØŒƒ!B€ ¥ïä_¡ÄB!ä_±õÄa…"4b ˜3 |Ÿ¨ƒ7›ñºÞŽ<Õ³-î[&1´P©|YZdŒÔyª)­”¹Š¥Žn®ä,žJÈc¤¶ñkÓF™«ÍÕ]ëúôðÆ~w«¼ø.6¾nÒNÛK ŽÌ÷Õç¼– 3&a5Üž©Q9 @‰;!„BÈÿE "L°BÁd4@%á=‹Ãnu¿Ä€ä)­­2ä_cΰîe»å]™g W —ã8eݧl6„[XGhüÅ¢ý×#É÷¹¡yî´4ßõOOj˜*XŠZÚ^Pä‚/[£„©Åù6LÀ~œ†2$[1B!„Bþ[M¼ tÐ žpº²fÌ9}·rú­Ú·ÜËÖÎÿâÝÊ¡ÆñœO[ÕEU}ÂäöýR^IisóI3;Vç|ÊÎcž¼êŸØäPÏBB>èokFÉ'ì/5ÓQŽ]†‚ëð„´!B¤“ðc !„Bȯ¥f(P`ÂRŒÛ0ovNÙÅóë¶&™Ö¹r>Ý[.Þ7·¹÷²b5C.¸^vP5Û,åÕ̓•Ìê ~R·Y³VÊ\(|±xä€/óv\­üøôþÀÇ7"–ÙŽÃrc4²9ÌÈnªgøSˆÙ8†Ë @€•†´þ((q'„BùO¥Òš îpÅmôF}¡Û„Ñêk‰[ÃÜ7¼?z$ö©[*(´|çÌù;d‹×ÜÖ¼WYæ›ô–eÖ·jm£Ÿ¯ó’·œ³a‡;½jø1mn³«Cžì?WóÕô÷öœMŽm¼óFqÀcÍ^‹o²OnÉ©"þï‹wB!„ÿGh!#&XX'<ÀNÁ…½bS”ù¼ `kR¼|VÅwÐ2et¡h<>çâÌ2“ÅYì„ÑÉpÙ\EhÆ¢ÐO³V›_fÝ`=¤LÝøàQñHŸÅ[®üà^ÌÇ_òÙŽÃ8sÀUÔã;p™?GWÌÄ+|ÆWZæéïŠwB!„ÿµô©si#Pe!ìÌËòæü †a«­a³9C³ÖðºÔ Ð<Õ»ðùp«f,aº`í$dŠ1hvèÍóÔaF“¥ã¶BLo´¿öäIÃÇæ¨|_m=ú‘I¤elûÀ®*ÎÊ%’×T嘆àø#ðNË_%î„B!¿%[¶e›£] "[ƒ8œF)ÜÄîJ˜©É(õ•ü›ÜÏW<{âé¥6åö)¸0ÓG׀ꦜN+`zjɪ §Šµ…}ÚFšÈ¸â)« á«f^ž|?tq¾Ëã?x(Oÿ¿×‰ÒÈa¸‚§ö’[ÿ;•ÓB!„òohÒÍ 35QF<ËÌl\ú&âkq“8ºoÛÒ•óžåx´Y Χ ë²WY–¡ýÞÔkc×·m¦öÔ6wZÑcó6Ü|´ëu]g2Díün Ï@ŸÀ–y}óî±M*!3³¯ÌÏì/ÀÒýK!„BùYé“flDkTgïÀq)}CŸƒ.*®WéráI_öl³ói»ús>v|«ÛIiWR ß4rÎùË7œs›sÎçXÍzê0Hb¢#`¸íhÒja,‹Å#LD/û 8@™NÈ_…ˆ‚È|F"R쳓B!„߇­på8ž#³0k0-QKJD6&i–q¾yÞ¥oÖFÛáôäT¤Ur’>J¡œÝó¤âo+¦ZjjGꊥå1Þ26ŠÊ¢Z¸±ÒŒÄëo_uÝäøÌP;;::+ïŸ'¾M剕 L½° çp‹@86²p”BH¸€‡ˆG* öê|*¦!„B!äg¥ïB!Cf'‘Š‹ì¢°#}Ã¥½;U,½á} ®7 ¼”›sξãœó›[8çü݃£>›ý8vµ¡•óYz\y¾k`禇†n,ß¿ ¯ûCÇ úÆé&gÏXsvVÜ´ïÒA†Dݹºˆ¾¹¼YÚoØaicm€b„nâ >Rh!„Bþ0¶¤Y„A¨Çn°L¨‚T˜|dï¼ø|«Å9e-ÕÇŽlmî8Ó³ü‡VNÄ:Ë¥%ºàÒüÑè3^ÒÀó'¬KÝ­¯åÔÒq£4MøˆAbîˆå±ã“‚—å¸ÝîÕÅú»_1¥“_¥õ·½¬˜‡dÍ•| }x‚·ˆD,íK<ÑÀÖ?öC‘ÅÇ#³Kì»Ïqï“<±=Ð °;)4„B!DX`…*ø°%ˆW?óÞp›0°S—2eÆÏíi)Õú3ùHržh]ìsËb/»NߺÀk½xE÷µ÷š²ÍòÞl³@žàÌzW ì´pS.KN¥¼z—Э’׈‹"•KE¬‹ÛŸâ¼èÊõÚÏ^o›ø°Äéh¿$]н&^pD6ð7,ŸG.û{³Ý þ÷W`¥ÿbïö³àƒ-˜F1!„Bù3`õ™ˆ Ø€^È”µ•Ïu·\©N¾êçm}&¢¯‰óÛí‡'LìÚ9±lW@½ôÏÍ×È·¤ç›ÅSä,{>¥ò¸–í¶p>ung³Ú-¬pû¥©uÇ·‰â|âüó8ŸÞ±ë­—E®k6*­’±p¢s‚n²Ö'ýѤÅBöÉXŒÑö]zÈèýžÄÜZŸúJ¾y{8ñ&„Ù„ XðmQB!„ò»² u†3\…CB^Æxy~×–Œx¯ò‚Â%óžñIc÷x}\u<¹b·‰³:®—ZÆxË,‰ „‚¬{Á#äó…”¡†zGÏ<ÿúnýÃëFQ®hÊ ¼ÍžâyÊu¯Ë§aúwVsk>S¬ù“¥Œ÷n§/ú]•å -¾ƒ[Zòo ª+†J®âæÈ ŸÒ®&v566Â4Å%v ØÀ¾ J€á<î!)H£­¿¹F)ù7°m³æ‰Š !„BÈK\*œf»àWx–*ºÝïsRë3Çû1_<Û®_yίØ9²Î™üž¶ö, G¤ýÉa¨ ÂV «Šyh—þÈ…îgvó.5ïKÝÒ¥'%Ÿ7·½Àù”3óª9ÃZ·vzìʶ^jDØŽîœOoßµóóÎ5M{Œt¯Ø¦P£ŒÃÇ;Nýî}^f/Y+viñؾKO[3w•hjn¡<«ÊDŠ !„BÈ@€† èŒòB_vqÐÀÚ#B«ßçüv­a畳s (ñ¨ø†IN9yèÏhv³Ì{™^`ôÐþ4/»$è Ad]q[žì +–þ³Wΰíå×z;ËÌùÒadZëIœOKíZŽg ëÖþxʧ1qmŽp>éiÇiœO=ßeÀûiÃʵôš«üž‚k¼õÎåö§?š˜fM0 uQÁð†'DûL94áøÿÆ ” ù ±Z–²A,Å„B!äÂŽ±º¸bÛ.164Ô¿œºà¢yÐóÙSúlæìFöaY[>¬êÛž‚K:Ñ•=¶/äôÏdˆ?í÷CFd>±•¬"kŽÁø.‰ÏùÀgJ†’3kÖ*S²bÌ“QwÚå|Z….½­µ'ÌlßÔ6öyÛÂꃰ  s>5²K¦×[/j>qèþòÁ¶fÊíVßùhú£ >b¹àÎr"æûoRøÿBX“ê.Å}í!Žf+XYŠ !„BÈïÊÐØ6…ì# fÞ¬0+~vͼÓÍ*së僊òÖW—n|¥îbs‹1Cu‹dEÔ 5Xe<ÂN þE¯"¤ëÿî„’ÈÇ*`& SXK¦Kß0‡ÆlnW¦¬ù¹„!¶ÿh—6•8Ÿªë|€ó‰3;¬Km1Ö¯ÍcÎ'vê0ˆóéJ·ᮃ½š]ïWµz17 F]\ú£I+…ž,0ì»iÅÖÿȼˆºÇKŸ´m‹åØyÖ‚bB!„ò;I×ÿ,¹ˆÁ,Ù¶Ý`k¹/!Ó•Ê—ƒç(ÏÏŽï׌óËs¬^¶„gÐ2[!;ÛÁ´?‡ý¯+ÿ£Ÿ^Y(’Ŭ¬ŒéúÕvá¼pF‰ZÝKîyß`Ø×–Ç8Ÿ>¹ë ¥û„ËíÛ¦å[¿ÍcÎ'å蘋ó)aË¿_0Œ·Ê:L(o*8+K,.–ï^vcëŒsXŒüÈ{÷±}`+ù¿­9Ò¸OùÞöˆMcá¬Õ!B!„üNÀ±R¸"$%Xmd×ünæYY¾õîu%~Ðmίfô~_ð”I ÆÙŸ4”yb¾½¢]í9-£”®Ì¦ !·Ìò ŠMÂ>ŒJß0Gu¯Šy'Õ®¶«X¹¨“#»´>Æù”AKóësw–¶}쬶eo˜{û…œO_ÑuãëOƒ5=&¥r¯"ü:lH4q;Á*°'̯í»4öžrÑmǾ•<ág¸ˆo™M¡˜B!„üæl©©HÂ%Á›·ín٧ʽܵ9¿Ã†Ç™¼O-è3ØTíbð ·¢Õreõ½†3XžÂK!'«è¾ØüÙ*ãµ!ঠ8™ÝeÍÒ7ñÑ»Tp\3±L5c1ˇÃö·¬Âùt§®9Ÿx¬Ã¾”c.¶™Êù¤â]9ŸVªËÃÈÉCÛ´˜:êxålE:û^s¹ã¨¤?š8‚E°ø„ èŠÒÈ?Jáÿ…£•Û¤Uµ×‰wØ{Ö®ÐCG‘!„Bù 9AÓÑUY1GMç*ß~³dÇú®Ù•ñçžõS8¿9lhâÆ c\j%²Êl2Û"¬$VK1 ów˜¾'ÞpÚ²fÌ•¥â.&§oèï¡wy7Õ­FæâSÃOÛ"óiãºÜR„åjÊoì¡¶^ê–°=‚8ŸúºKÖÈþÃ*´ñS‡„”·cÂÛlà/ÃÞuÐp>}W7¼90¤Aóv‹>Öï\¶d ca·6ê“°aí_¥Û´M8ç-ÌœO1už‘°eL|ÛøÙUj)Õ6ÏlŸ«žŸÓÍÁeÌa;‰Ý耒(`àÇØúØ¿_Xã.>\G8WD¶ܦˉB!ä7Ñ*tg§kÛ1£oO¹ÂdÎï\iY}¦nß_3éÞ›{<*9F²ø„élËŠ½p„þO5‘búršŠÈ…lì®3±+}Ã@xÞwóñµb¶B%#jyÙ"Œó)w;ã|âÓŒÑV°,˜¹ÊùôÚ]Ì_2Ž k3pÁ¥º7JÎä¥õønÊraˈ=Â0Ö™ùÛwÙ{ú{—Ó„; Û¼NPxÆõìaå™@×!„BÈÿ˜ acX6ìE*Na@¶“~Áî ·ß7Àôöôà>1œß 1l視»ŠMgãXY$IbVv9ÿߣl/b`¸Qè$AÈÀ¥oâÑÇá½îËä U •|õpÐäf#8Ÿv·kiÎ'îì°%¥ö˜ƒm6ð aóÚßà|Ú󮞱Fh£]R/¹l™ìý3ìq[œþhb?ö„õÇ< B%ä@柶þÝ||1­ÕÓüMý^xÙ×µÖ±±¬]Y„B!ÿ3é&m&°èo%%›‹Ž-P{ç×</R^j4°üÿ3»ÔͼÈ{‰kSvÕÃflÁ_.ý§ÔY(ÌÊÁ,ìgEð }CωNC6Œ}\9ªH×w¡ÃV¶ ã|z`Wj {Û¡¡!pìÁ¶þÖé6´ïÈùÔžÄ?ËÚ5šÓ½öÐ’ y¸ïñŒÞß½n±6Ì[X ¤bË1[%º­(h<ê ‚xRбºŽÓ;jëôžYºp¾ùÏ– X×ä=çÓºŽæ|r¥ŽWRnyÓæ¤2fºöy9Ÿ6»Ë•¤c»·}´Ñ·Ù«JÓòÝÍT+ÞôG6²Šˆb¥°SQ ÁÈò§ØÊ_ÏxÙ-²cÅÂÁûíÛ"ôeOèZ#„Bù ÿèKÖ 2+oÛn^¬ò ÜÙ8¿Rdp!eê¹ùýÒœ9Û¿i¹Üæd¹ok#ºíØ·2s¥P[✮?žÇma++Èô ]o8ŒÕÅ è^f{>ト~?à|Ú­.IœOìÝa—¡úØ—mËZöO(ØÞó)‡:0¡s‡«|U)7¦ø®€¾ß%ñ؀Ȣ+ÛΪc,êÿTNóçØÊùì°z¶(—Ó϶GöÖ°dºâ!„Bþ¬óÅv„5Äu}í¹û7«?µí§nºÚxpeί4çèëYU›ìí÷²j¸h²æËýØAüiX+þðÆeôBC!€ámú†J:µsèÚõSñ#y–<Ÿ8pLÓ4Χd휓óÉ—;UO Û¾MšùùøyíÆs>½k×b WÇÎm´IÓ<¥S¹'û´ö(f;š0^ðbÅ~>ûg˜'žóY)ÝÏ?XÎ1ßÛû”22 ë…@d€}Z!„B~5oxÂUl'Lbýl;zièWðç·¶ »f>yêYŸÃ¦Ûç› l_À;Ç~ï戫èÁ޳¸ž~âHò/¤Ø„=˜--:°ëß5i¯©,Ïíߢ̇ükï_ìÔh*çÓwtç|âå'S£Ç¶h++½'Üjߎó)}:ëÇ'ŒêPbí¦&O+$o™åŒOPú£±6؉‘‚޹àV jÚøÝ¶2Îgzv«0ÝrææýA#3ž(r³±0”Y°A½Ã³# ûp/èB!„ò‹¸Á :€LG>–Î’Cí¢;ÇV­j³.`^¦µN¥æN´}çßìp'[¿= Æž]&4c»¯U?óGXƒ¸ *8…ógÙúá988$ÈÙD<ÂV GVH\„ m Ýç8öÑó¦OBy úw/”gYîbs»œÔXµ¶q ¹ˆu©PPèÀ kÚéDÍÃmÓWkÙ=מn{gZÚñ–Ï ó5ç7¾Ú_6jÁUа ¬…ò’WåÛ‘„D$Ú¶Z @ý ¿kΧ/è*/Knðª¬Ù¾+¡pÅ8ÔBYúTB!„ü"éú_¶_lÛãFwì_úç7Ä!Ÿ”zç—÷Ÿ{ûè—Þoò½È~Æ{(v 7‚D?¡;E!üÄßV^¡ç²D6%}çŽÚ÷š‘½ò•Z’Ïçq³~Ïïå|jB—+œOÝñcŠyŒ¹Í}kï ÙÛÝã|šW—ni]Æ·nß~ë –9«Ì*R1s¯$€Æ~–±øÊ†á.Ö£.r#ð§­¿U?<çÓ‚:¿ßz¨e¾*ËXëÆ°PŸ>„B!¿kÎúÄþˆÕ pàüúâ!Q³ÆôŠ®ØÀÖ^Ê"æûil¡ éo°ºç|ÀÀ …øm„[†hœCØ,曾¡Ãí­ØëZÉðИû7û&6žÍù´O]Ý8ŸT¡cãÎqÓÛž2—ß­Ý Î§ììd°^š¸£ãõÍš¶«˜¯ü‰ìõý_~÷ºs‘+² ¬Æ¡>*Ù÷KÿË)&%@=ÊUhk^ŠÅ-buk+³2äDFxÐÙ'„Bù7l½¬Ù_ñƒàÅBÔ`ñƒýš=+<ÛËݯµKC¥sòi#Kó¥AêÝâÖS7¶ã%¶¢§õšò’w@/¼‚ŒT`¡pþWlÅ3&(PlI<ïoTV2sOî†ýhšÂ0v«ÓüMM~Kq ½v4}ø$ÜR3.ävÏÞõŠçÏõ DD¦UîYpM4 Ì8Å0Å\ƒ5f—p°ýŽÂIÙc›¶ÊÝ*Ë«ý×_Tù ,z{Ýï™×õo}*­€—çÛ…<ÁDx²wاÆò{p…Ö^H£‚Cÿ‹ ¸:yiÇ”‹gzèê?qè¯uÓ”°ÿU`  ³O!„òo10!Q¨ÄÚà)Ö Aðë,<û'µ8Óÿ¾eÇ™1}p~kû°… 6¯\ôŒý)V6àd àïD÷­0c ÆH]„êìèÿ×j1µ ,T;äÙù]}ëç|ê².o8ŸÜ½ãÇ´cç´ ²†Lj÷’ó):%YOOìÒqÏ:¥iÏŠ ËÌæ{é»FI,Eofb\ÅNtAûÿÑÀVŒ¿CEçÏšIrSùª0€m°•Ô³ð€3_B!„Ÿ¥ Ñ–„ñ¡ü.¯ŠÜèŒý£ŒmâŠåwÞæxRË¡(=±è僯Í×_;æû¤sÅLgŽÈÂ*À3¬È߉Xíå4ôÆdëFõoÀ&à vNà8‚£8ŒI[ßÜ=ò"W•ëÚßиã¶çr\®ø>\;ý>­£|B|. ‘¦š}L­,­=­^Ö€B¡È Ô³vÔØ²}yËŠ•“KgË–Û/7¿†^Xµ܌R(€CØ/dWYg¸À®öwõ‹WlÄe^Ï)I³[r–Æ·þ ¸Ã‘Î/!„BÈ¿`ë-5Ã……³øÀµ¼0ºvË)ûÎo·£z…œnÊÓ´ê– y°ØcÙÐýÓœ×%mNS„×b(«¡šx_Îí¥ä÷”>æf˜aæaE Õ õP ÇqSHb›Ykëtë¶½ëíUÚ®v$o“;/:\Éû~ÞW¦ù¬9¡i§}©»¬™ö6Íh\ʪ§¹y÷|ëO+mëV ݹªu½ªŸŠ7ÊêìÓÁˆÆtå/Å×ËX(°¸ÕhŠüÈ1Ý2O?ÓÏx¥°iíŸÞi¬§T*Øwñç½'>oK®œ–—uÁy,â«Q}éüB!„|Ç6sH4Ai!7ÛÊLj_.sýá3•¨PnW¶ƒ<·%“õþÓ1ùÊ’»–ÜtÄÒÅÊ”ãü /ˆmƒå8A“>þ騿‰7À+Ë€˜,ô`Áì±2™—àÛj¥²–-¢ \ÊÕíF¿àÍëgëï3 P)yL=,û¬~ÂÏÎÈQšLÒkŒÇwhŸ”Œü²ÚóΗŸÏ+¯}hd?V!Ù1Ö@©Ã×ñ4 ÇNœ´lµ¦›bR)4áTûÉWÇ n/ù_sïhÿð°)¸ƒÕtî!„B~ޏG¸ÅìÉ\­z%[Õ4•»œkÐcs›Ó û–áüÆ™¡–Fîåç„̳µaF6ïìOfèœäÿ–þ̸@-¦¡J²û°à,(oÛƒú š•²¡Þ½<³³e¼r¬ÇüúOy¡Ior>µPçɆcÕ¶5ŒI㎷ýÊùôr]3¥ö_ }ÍÝA­Tý\ìcÖ¡>ÑÎ2­ýe“p=„.¬=ó’}‚K LRK¢_¥ï- ÓÄKÌ•´¿Å,pú6K%!„B±ÓB ϰ=ÕNª¿*”f“3´O‹¢E‹È^ÂV—ôiòÔó)׋½s?ö躡j±­HS?q †@ L°PuûŸVúû I0À„0œÂ->2Ê£/ª£´”C¨ÈvΛ»Yô >AâIHÄœw Î ùÒ=cá§9â*|É6Øg B‘ ½S»3hwŠ#Ù¢Æ_r¿ÍÜ wð(ÿ;åç߇. ¿>õiæ+.oê}Zn¯åÙˆò:±+XÃu|1NÁì8~z»œOéÛɘ³V†X×+¶wÈN!Ûè¬B!„Ø¥ë!g¯X7<´m·}]sz¾²œ_ï>ÔÏ|ít‡>Vkÿ+‡Ô­îZÜ5[S[©´XŽ%Rÿ&Ä|X 6c’‰9ã*>¢jØÏx)Xòið,´t¶»£Þ3Î'wëtŠóÉÇ;4e·¼ía£ÿ¸±mp>ÕÐ…™…•ë踽OËŒ•ÏT]šS ÐÿóË ( O8 ‹q)ÃçuŽíXi¨!„BH:¶šã樒,7²ÃW{Gs]vu¯e«BƒùYËn«,—p2ꆟ,p9W„æÌÀÛGß6w WØB«ƒbåeh‰¥¿ åy2‹¶§FóT”Öã¸Ê¶²zÖóÖ—ÖÏûs=¾±¼Ê‡5;ŽÖjdÝ1ëâæK÷ÞýÒ]£Y!×Ò¾×=Ð,68:¿jeTóEùŒk¬oñ´‚Çy÷®u—Ö¬’s]Ö$]6‹<]B*¬Po8{Vqè¥ë`ÚPÍ!„Bˆ­Ý+T飘ŽZ-Ê0îÞ™ÕñÉ{+da޵œÕ‰i;Lwào]Ê}ÇÜ[wàÚa«—2D­ÆV° ¸S¸Š~È¿![]‹-•×C†¤:òVü sÅzLÚ±@öÀìn-oݳðúÍ><Ú~ªyÿü“³Ïéf-Z%Ä¥Rr¶Ÿ¡€ÚCj3$š—£Håodí›qLy¬rãd£pרßýÍç1Àq€¾ÅŸB!ä;\(ÇÎ0O¥¦ú–ïò9ê¹Ç)mhï–«‹ÔEvK ++8UÕ.Ýt¡]Dó»^χDUC V¡!ïǯ ”½·žü½ìóÄà‰è€qÊz^ƒÆXTAQöV\dÞXÏu;<мjY»ÀFõD‰Z{*vªfÄÛ˜WÂaÑG(«™¡û¬QÍkÌ#,/Œ LžæÊÕöfÿäÛô»û!}Ym1Š9!„Bˆ-á–!CD6¸Aá£y$ºµU}Kî‡Wvºu²¸Z(q±ˆiúötmÑ+-X&a»pEèÏbí 4¥ŸÔü½¥/6O†&ÌÂÜãù!¡o3|%¡ ;kìj¾liz,èy»ÈžÕޝu_ü~»f›œIvÖõ×ö–‹›´Ææ 0¿¬ÝAΧøtº>©TV%Rl¯ÂŽã-¶Rä !„B˜·0ËÑ ®^Oþ¡oeë³3Ö~žœßz2lÞ¯~Õ*ݱµG ÛÙ äGNRôÈwÒlÍ„õ˜ è™WXElÀПZåÅë*9Â27?âÚ¡RÍꆉQo|—¸/|Ñ`V¹QöQâN!„™Áž`‰Â¡kgÛ½ôÍ`}µFœ_k5Ø¢¾±ÿËØð##{Ï͞ݷç0–·QIpf+˜…ü¶Ï—DÛaëÃpnßšw„~BËŠs²ŸõW¥ôÏu=¦õ–-CB!„(PÁÅöÂJ¶R™£^ä› ¹„¼ö‰l9§zRˆdõ3–´j¤ºYrí9vÝlñúõcì fbaˆQµ|<÷‚ ",°B¡p’ÁVTc‚Š}`ëp¾˜¿Å5 C±7kÂ,Jaµ˜ºå^/ü°í»ÄÝ¥§ö€¼(Š„BùáMETU³òÙ<­ñçú:5ò.xÒm‘G}”õZò]ãÆ¨ÌŸ+¦8/_ºÕý—Hƒz¢-êáôÐB†&P—(ùeÒ lEIÌÄzEÃçr ÓP¥™#æ¢ï?wîšUc’Œö¯¨àö'Ó|î„BùqÈ!°Ž1|w@BÝCŠùlŸXÓk´yA¼cÚpM7‹ƒ27ç ¿ë)q“–‰ƒ…Æ½š…„¯(e'ÿôY·VX1Gp…Gpå»w§)²AŒÇaC~8C-EB!?8B‹$¤ÂÄ,ìÉr#OžìßémÉ0ö^Ü “ ?'ç~õèŪ/¯ÖT=šéQÔÃd,Wò÷üòà\(ä·ðÄ]„è¼PZ+ÌÇdEWT@ÞQ_;!„B~ IH…IÜ.¼`W•j/Uõ\±wÙ>W}Vòt@~u·)µ‹ðVÿX3mNÓÝË<‹žd0„(ÖˆeWçó@î *­@Oþ÷伞 µ/¥g¢‡æ°4]LæGÑc0Q…ÂD!„¿9°&L­Ø‚í8â¶Ö¹°îøØÖm§½)’¿²'숔Gh}{Écmtù5'ݽ¯cðCÔdÞŸ»@ $JÙÉoGBøÃfÄëÈÇ¥¾â×OúM:—/'’G¤¦±gh؃Ó,B!„üm9ÃÆ|ÙZ%:žŸ®þ¥XÑ€7e?–º8ÛTçkÿäÛriײ×G×\õèÊ%kÅI5s„³ì¯®ø(Piöò[™à ÏÛhœÄâ÷~úºn €a)š *…‰B![:h ¢1*"jU‡sy£tA\?=o7k™÷ªsÒ&ÃAía÷X‡|'Ý.­Ž8rîÙÝÈwÂ1Áƒ•å5ÕK¼ ¬P PO;ù­Ie¾Ì ùøiÒÄ[ÂL—}úje ¢)›Îê²2œ>‰„Bùû!@€f(Â|ÁÀ «®jW¾ºßˆ&½ »¬Ì\ÝU¯f3­R§'4·¯YÛáj”¥©5—5V0 ÕYNnFA §YøÈïC`¹áw~ùH¹„xAvñÕÐܶ?>UQŒÂD!„¿!*T¡!»Å²ó*êNžÛÇêÙÇéiïWå¿©nT÷©ÁÂíqõÞgý^¿9øY®(WÇF!JÕ¨'ø*{];¥ìäw! 7¼à¦á1EÎ)ž ..ºrmÛÃl"ª  …‰B!C¥c•`á·à‰AÝ×;ÿ@àî ³ÖF†±–»Æ,†ÊÕ15Ö캲œ9á2ºá.á  ƒ#̰R ÉïCBx™?å½ù"9«¨W:Çhy?€0ÃYiäÄyúC’B!#îp†Ž`Ÿ0çÉ<9Ó¾ ;œ#û–l|ªÀ!‹_Âè´/šœO¿·rÿU͇1IÄ‘Â[–¦ìSÁ{à E%¿/Apƒ#ÿŒ1ØÄʾl¬“¨Ù)il³(‚&B!„üMh CD<’adï°‡uæû8Ðu¤o‡k<½3l×›Åüò ‘Eyw3¾éÚ±G“ŸœWýÔ®ü 7ó:؃¸„ !€äw' îpâ¯ø8lE²Aèë¼X^!¾°?>EDa"„BÈß„(–ÀJ«‡yyžZh|H„ïýNj‰9{«Ï Ÿ-’pT~*9-{p àñ—WËÞ/ŽM q¬šÆÝø5ˆìÃQ ù]I BäÀJ~ÎÂ+6DZ±ÌÅçX è„ø @WB!ä/¯𢔠 #ض eØ¢¾­åÈÑAð¨ç0MÙžüÐðõøápâèÙ›¶ùÜÇ*!. W;óíp#´¶ÕU)ä÷'±Ó¨‚ì<=q`X¼Cˆä&$Ùf“P‚e§œB!iÎp€Fh%\e¥®²WíUbAhÿQÍ·ÖØ’;‹¥k¼wêÙà¶ßaÉ”îóÖ\|jxn ±Š‚•Âs~‹Ä@¤À@CQÉG°\V pwäCføqß¹¬œ(·EFd„/ˆá|&rÂ(X„BùKÒBÉ6ÿ‹ê®NáÙx"ŠcîmÇ5%Ãôm¤R¨,ÍrÕß_ð8.úùögæ?Æ "sù|€’‘ Õµ“?–T˲Qy/Ù¶P#Õ&Îýô´À|AŒÚAíÌ·£Ê£0‹B!1L0Ã*4dטò¢ÖV?X||¶‘UòöwRk™6Z”J<îM/°9æf©¤#©ËŒ‘Â|ÁÈŠñì|.<ÀÀ¨®üáç䥖ÅÖ¹ÂÜÄ€wãÇœµ4iBSa­pUmƒ^8ˆÖ(‚Ü,B!„üŨàà,¾bž"œGhjêI±“ v¾XjŽðH~$äÜä`1ùö“G5?gØùôlíçNl++ƒ#J{µ$o êk'BRsˆ’‹cÙ@í¦žvž õ”÷hä}’?á#¬¬% !‹B!1Žp€N¨!lcÉêCÞ šc*Êy¹ˆœ?Àw«¹BJ”i ¶J¥ûÃN/oz©ïŇðf(‰üÄ[|D4,°B¥@’?)±®é•ù™ð–E;e„?_Ä›9®Õše‹~š%m0hL‚™¡1ò!§)\„Bù‹p#´ÌO¦ÞP®uôÓÝ–[ÌÕúZÑ·Š›éºÅ¬Ñ:O×=8²óÂÛðB7Æ=}óéšpŽ-E„ú†«oŸñÝ -´Dþ„Ä4ãXk¦c‰Ø'uw:¢É(/× —úˆ­`† ŽÆ,)X„Bù °Õ¢Û&m|ÄÖ ¿ŒÌèÛ=Oƒ»Ÿ†löÊP·­ÙÕUijjËÜ™í¶-»lö·ŒTš±¢ÌÌö¢ú`¥ìäÏFJ±æŒ`zv^ê.µcˆ<]ܧË*]WØ?ÿu‚LøB#„BÈŸœ­=—1 -x1ìȸÜ=³“óà"MO矩®4¤ZHÝ3h3íulÈóeM÷Ÿ¿Û,eýÙë.e8/o_bIJuíäÏDˆÏk8g< •¹°{Ê ~ƒ88ɯ¤AºžÒqнU 1_ !„BþÔÒÍý"YDY¸Ìâ62÷,Sÿu>]¦ÂY.¸G«zk²2×àž¤˜bÃ:lhu}&¡=Š(¥ÔXþ˜•Rvòg$ÄoOi ƒÀ<Ø#5Œ?@N‡±ò±¼¶»ØCè`oUð¦`B!äOƒƒ ›=+gÕ+_TŸl~ÏÝ£úžlV§P.e^JˆÑ,µu¥ß¾B{(îI¿§!o~aì(†¡,ßÏÍhjOý)i'JBܼ´CÆ#óF¸²RMäÕtç%U\¡-* ‚ÑÖˆU?Ü)X„Bù“²-±¤‘{óZ|!t¨ƒ Ãf¶ô/z$Ã@@Ý(µ`eEßÖ|×/açŒM[žßÈŪÀŒ,/Ùa{O=MûHþÄ„Ø\)ËÒV³2Ì žåZÞA%ö¬U¨ÅjØ[UD&¸Q°!„ò'e‚V6—Á9^•ïAsÖñªv ªÓ$Ï'åAê:“»è¥³vòÁ­g~®û:¥®pTôdÕ•<'+•Ç?;!¶uZFƒ#>1#{ª:£F#BŒb«tƒDW!ÕÞ*œ!ÓŠa„BùÓ €¡ ª¢( f‘l*â[:5w—¼¥·‹Z­‡°@¤>â¢HÝ›"ñe—¯98öáG¶ƒÂ|µœò™ß¶‡úÚÉŸÿÃn~§<áà§\P µ™«ïã&×Nc&Ú?Éu°o´ÐPÈ!„ò'¢B»‹ØdµššÀoWN-2(«¾ÖÐòýƒŠZâÓ‚ÌX^­ƒl—gm—ëC¿,‹?š²ÑÍøu8¢•=õ'äOO0A͢泖PZ«'ÄjŒ³]äþË êªÛ[µâëqŽÐPâN!„? "œÃbtPgª¾€_¾oú°p/]7Í3¡¼¸[ž(º>uyìëµ}¥/†¿gÓXNDo‰p€2Í!Cþ*Ó!ÅIÍ–nÍ¥.º3gvPŸÃÇ#¿C5]#[ÞpNÐB¦B!äf+ßµBÊ\Øuôåg‘ +ŠåWä,RûhÙ;ƒ,3’?›°Éò'yü¤KÍ7š'/JëivœÙ|öžE(Æ! FX(œä¯B2ö±öQ‡¥¶¸Z:ÍÒ>1‰áÜëè´9PylÂqœ¡wB!„ü h!C‚'2‹AVIè"ÞgkÇ o·±¨²)e”r„S¼®Å…ƒ7EÎÜqÁýEYqˆ°Š1%«úœß‡&˜)ä¯E2úX=•†iG,o•IB]iÀ­¼ŒkŒ¾Žv\ "Cpáp„/2QÈ!„ò‡±õµa†Uú$šÙëG¥ÏÑîKµ~¡…òòœ5¼ÕL¦z–á쾺 9ÇY×—»±Ã<ÐÒAéÉ¢Ù8|…7&"ÃOóµÓ€Tò"íIjÔ^–cÖ¡xÉê²H˜¸•×v›¥+®9'TÀpƒ zH)d„BùÃpp€Å³0$¨eÔ…ÜÉk—s¼=âCë¤"^b%ž‹W.ëÎËþ‡®~Wäbã{"Ï#kÑŒòð…2DJÙÉ_‘`ð·Ô´ÖOiazf̓0Œ@ËÝÐÌ¥¹V”î±B,€]„€C…ŒB![¹ "[„Î,—z‰·„oõ%÷ËU §£W7ó`ãE‹>Å7m µÂØR«J^Ö0W¼Æ|á‚Ð}„ &X P8É_‘dØcyeUSš7˜Ÿ ŠM ¢ ü•V.šóò!–f[…ƒÔãN!„?ˆ´°3Ð’ïG!^ÞUçTB÷æóM¼‚7\£@’¿:‡¸^–¬7u6ß„¬ /Æ‹a˜Sm9Z4 FöˆMµ·ÕQâNÈ?‰G<â…(D!ш¶oÛRvJÙ !ä¿¡@…*L`‰¬¤òR­Å?øÍ¸Æ¥\ë§U?†lQF›—Yß±åÚò®%÷eyxþ‘)|qô–}Ám5Œ»ñ Ð@¦ªò×'À-´É£ ÇL¾€`–©Åxa>©¾¼Pœ‚«pà/~jKÉ!ìýëÖŠµb­˜™™™™Ýf·ÙmAdAfžÌ“yÚÛ;ÂŽ6Bùõ@#”àC0„‡?ºáÄ0c«WÅJgΓµ£ûYÞÝ£Ö‹Ùü%kjä‚¥»p{,pý0Ëqzh!ÁLuíäï@€&˜R¯XR­³~z> ûpXë"nawœ/ikKÛÛÖF^ä Âܘs³mç©§Bž *V¨X¡b©¥”Pai…¥–fk—­]¶vöö YCÖâF!¿štX.öãøy€Ùfûew?Ým]½YyRÍ⻦N’²¸æu(;Éo}ñ³£çÄ…¥žë‹“ÙH¾—«èL°R É߃½ô%u¥ÕY½ Îóñl,\ÄN²š,$C§Uú)¶6lª¢$…Œ{];@¼$^/IzI/éÅ]â.q— HB!¡PÈÞÞ ^ð¢°Bȯàd¤Á+»…µ¬ê`4ŽßÓÞRr–n§¾ˆ´^Þ§¿¥™ô2ö™í²ëöù¤—á(+‚EJ ÕÊcðñH¦@’¿{âžÒÀZ]QaV›ðdt€RŽl‚PÄCuÖ•²·íƒ²(H!#`°mª#Ôê~—ßåw‘YE½­ÞVoó3ü ?c¨š‚¤PØ!äWHƒ1¿0–ÍW7óüsÙð Y{µìU­mÈ >ÓÔϪ°õÂHÖtæõ%îíˆç›2SÙHÖ…wçg‘ß>1!#ßzÜ››( U3ªGØ0dƒ“ÐHhÂÜÝÂõÓtKím»°’ÈK!#™éÛ*Âr_¹¯Üðø*¾Š¯ÒdÕdÕd•NI§¤Söyf²#;²SØ!äW8‰%舖(IóDNêô߸rþ¹Ã<©/Ž µY¡GO^NŒ _SçPÝû™Y9|Á|µ¹šÂoÁNÐÒÄäïÇž¸'4¿±¬áÍÔã¼=¡r yY~çfÒ¯ÔµµaP˜å¢ÂCy(µm¿^ðzÁë–Ñ–Ñ–ÑRE©¢Tñ~§ûîwzWÿ]ýwõÑ Ñ¿æ¯ùkŠ!„ü"îp^(*leqj$ij”šú%Óöúó*× ®bž’8ÜÍDy–Ô|ŒÛš W-âðœ`ïÙD" qHD LHò÷ó­T¦†y³5ÖrCÙ¤ŽeËY „&Ì^»Iºšoå1íQˆz ððȶi*m*m*ÍÏóóü¼ÐLh&4‹‰‰‰O[š¶4m)‚Œ`¬ÄJ¬¤°BÈ¿¡…"¨€zSmÄe¾ŒG¢ÞÔ£]³–I6+LY§íúDoÜÀ Ü o•·Ê[1Ó1ݾ “ 2…B~– &˜¡½ÙK€êŒÝÍvUº”«PÉ…ùŠûLR§Y%5Æ0(ešyÖ ýÖ§·Âxq^@&ôd>ìAvô£ªvòw¿P‰QÆœægæóЧz÷0–ug¯Ù*—=šIòV{ÛF?…Œ˜aþ¶h6Oà <ñmýë<„‡ðŒÀŒ°NµÀ …B~– œUeÀ^mùx¦¿œaôÀ6‹ÞGoa+ó¦hÄAGÛ]Yööì¹OwoF‚Í`…pS9©ŽáÃìK,QU;ù[ !©ŠÑ`Úe¦X”uì%›Œ~`ì9»xj»Kím›"~2B¾ã OxB„ (4ŠB~7d@8B-žyIþ–kSªFÐqùÞçU2M·LO;oYbYhiÁs+½fì•*øŒh€Á4i‰%ò#`†5~†á i¬y¸õ¼úž‰¬óp‘Å:ç–o‰›\ÀDTgþpã ŒRB!„ü$à+¾²fLƒµ–ÖJJ'—¦ò)`T÷¦¹ºr¿¤ÖqMåÎF-g;[?^ýÂå]ÎØ'‚*œaÑêY5?3¬P)äG `,* òiÃ67×Vz+@%œeÛ¶MœæË=ÅaÐB -ëˆPd¦”ï¸Â®öw+¬°Ò5B!¿+Çæ²¹0qRå”sì ›C‡t_ëS8Où´”×™óǼuO•¼6-m³¿äƒ‘Š·êÇ‹À'c¶áš­Ì†"I~ëS˜mÉ ÈJUSvëBe4ú±-¨ A0;ÅH¯D/#LØÍOá2ÁÎø„ZŒü°l³³Û¬Ã:¬ãq<ŽÇ¡;º£»í] !„ü0q•­õ®Íó]¯#?í´Ö¶0óu37òNˆÄ ¼ ’Ó÷‰ûcYË*Ùá£" ï§›,]{;4”ƒÅz¶6¬7Š!ˆG~h,Ý¢Ú¶ò 4Ð )H¡ºvBù7 juu÷C$Þ ¡H•\÷3y`Šc& ‘Ÿ|—ݺWõäãä6Rˆ0:”ÂX0ßg/„ü8¾ûèǻޙžÈ_µD'Ýq餰ɱ£ì#­²7êÍŠ"ŽüÐÒ§æC1C‰HD¢*¡¼à/û£éS|B!6ð†3߇ŒXˆ؆]¥Y^ôT}ÔÅJ‰”jæàÎy2 ꡤÚE½Â›Ûžòtòòƒù>q¿™ÖÛ8@Vxñ6¼# ÅôK墯ֆuA(²RàÈÍþð·mJ ¥…ÒB&2‘‰ê õ†zƒWäyE{K[í;!„ôš¡2rA†Ám•SIÝæBæì7Ü÷Éy1‡¯ñž©MÏW½Û2r$Žâî«syþˆÂFÈw‰{\|š·Ñ €ÜÕ2¼6æ#AÔ o'K•„öFÝ‘ ¾8òCó†7¼m›Òi‡´ƒ]b—Ø%u¼:^Ï'ò‰|¢½%•ÍBHz"B–‰Cø"CÙ-gíí^Ø©¹Æ@?6áã¾ØCi[>(1mǰ•¬(ñƒ< ià?!ß%î±ESïá6ó…³jâEøT8ˆý½ã}IKØÚ°y(ƒ ù¡¥_9u7vc7b‹X„"¡p…+\)H„ò/(P¡²~Ì÷ˆ)r?ä7†Èµ¥:èËsñO7V<÷úº½ÑEà'hmé>!}ýí×Ä””4A)äàó @ƒâøè´Y»KÎ `¼=–`¼áG !p†3œ!B„L0A…C!ÿB5”D0ï‹ñXê`\á±9.{ŽÁgi›‹E(ƒB?_ÚóòÖâ0îÛŸ¥P];! Xl_˜O(Õx%DyÊk‰EX [¨Ÿy{÷x‡ÎºUp‚dµy>B*˜!€'<á 2d$#ÉTC!ÿ±þ,AÍ¡¾æ–eªéágg`Á iðQF)’asZvkåÇ–ˆY_Üa†à)Þ#•‚Gˆ€7H‚Ñö…u?Ìë¤ö¶ôWJ™+; ðÞêY7½^§«‹¤ÀÌGò@tA^ø"#…ü Ò¯œº™oæ›ñŸñåPåXF–‘ÑÕA!ßãààÂa^£(ò"[îSY=<ÞøïÌXÁi)€x}ÿMøÃ¸— S¯™@V ä+p‹‚Gˆ€p$Á`ûÂ:]-ÀŸ§ä´4Rœ…,Nj~Ù­š~½6 O˜À–ódìÃKä/<)|äå8Ø/¡yÂ!ŽWCl¡àb#!‰ßnBYfª©|i ³ŒµÖ÷]¦¿,=ÅBž•Ç9¯ÐŽIÝ…}Bšõ‘â ôB2ÂÂG~P馃”wÊ;åì;Ä)3•™ÊL.q‰Kö–¾ýaL!?´ FÖx%‚·Â$AlQ.¢`·¬-pÇ:Kðhööq…7Yb§£,LpŒÂ:¡ zD¹¢FRð±‘ð±H¶}a©§PÛ§0GXç°8֌Ղ¢úóKÍôáZGÍYi´xÙš[Q©ÇüÀÒ/«”yð€Žâ(ޢРˆýQNÓ—B°MlªóÝÜŒ-nýœ<µÝJäÊõÎ'3 ©KÔ_N|lij'‘Mbñ¹¬æàëyS00¬£Ÿ¥„ØÜ–¸‹`­¦¬åƒ“ÝL3¬÷aa-Ù[ˆ|8·¸^Ô¥ÉÍ57Ä$Ál»íÏò‹&¼#°HµÀ‹=}×@ †B¾Ó呎ÐBôêævÎaŠÿ/'ý(ĈUÄ#ÏÊ¿k«<.±:æ ;Æj☥¶ã&JÙ IOÀSÄ  fn®P£·š›k@ú0/õ zû91Í=9¯äC>{ËôE5„òc²À ^؃Ӹ[5¶ÈêÌÕðŒUd6ÍTê^^÷Øü9P yÕjêI4¶§û„t<ÄgÄ2+*Ãuù*Þ4ñªñ¬i La¡ÊžÈk8”·ŠÉRcv™eµ?/Δ¸“VºµQÅb ±{Êž²§Êå‹ò…âŸø'{K#Œß¦[%„Ôp´GE~“{c„¶žÆYš–×%`œÛnäb½p&iYj}sê‰ê×c_—Æ ÜÇSµ3?ÍóÛÓ}BH:â#bØ8ö û¡…#œŒiWMaÛ&4P'ó/¨­? ­÷H×…8l^68CGá#?&æÎÜ™}V%ñ†xC¼ÁY"KTN+§•Óü)ÊŸÚ›¦! i1BÈJ€&f-Ù{4ÆX-”Ë{ g]½Þ &~—‡¿üuvZ¯Ïˆ­“"Â3ŒÁrœ¡àò¯.©»x‡(a‹eWaB*Râ¥=7,„§l„:‡7ç³™FØŒç%Vé—ÛŸç ‰ È+Ý`)ÎÃy8€TFeT†|àcoI¥2„™ \$É£‰ëHÇåùzæ˜è½ ·”®JŽ„åqc£×å?$ú"ñq ‘p&X(z„ü3Á~Ó;Þà‹mWZVk´Ú J µŒ°šmC/€D¼G=‡sºÃ2B8眻ëhDÛgs/Žâ(Ž È€ öG©T†òc=™[7¨äuØaP~M`y· (j=g½ùf×ÇàøIŸ;ƵHÍ Px,ÏÃÇRÜù9ö…Ùùv¼Âg„€¡¯Ò]Ù¯ÞVf©Z6ù`ð çÜFëOiîa €Œ8ò#³ NµýÍ+ŽÇŠcY}VŸÕ·ÈÙ"«…ÕÂja{Ó$$!‰"FùØîå7BWtQ'©*ª}¡¯¡û4%Ó©¹7¦‡Ë™úyä4&™,ãå$,Î’¶iÇ»_w]Ô_œÂt‚(àToHÈÏ^^6½øqܱm&U3,‰©;,¯”:â$¡( p¯ÜFévkËSÈI¿6*û¾°/l›Æ¦©[Ô-ễy°½¥ &bEùAØRvœà††(k%׺×ô/—¥¨¡µ|ʵª)¯nU†nR§¢7´ôÇôß*ÚK£-zR ùù‹ Àã^Ù¶S»›W+ýŒm¬.Já>¾²5^ Ê-D7Wö òÝÜoðoxÄ£j¡2!2Ù¥RBÈÖ²çG.ŠnB+6yÑ {ú³&‹˜œ‘IMTãÕpž«¬;Œ;-%ÍFó¥€ÒQin?Â;<Á# $!?ç[ût\ÀÛfJ#s”e„q˜u–²Ÿ]Ù5ñÖE¯Ý(§òtÐÙûà?á>Á 3Ì”²B~ Èmƒõ…Õ‚™eS–«E¸o¹%ùof^6îZ—›¥rY›‰äÞð‚Ø+]víe]]ßNÓZÓYç¢ó´†5Aoô¦pòs¾õ¸OÇ9~:ˆ`©=͇,vÖNÐ3/¼ðá.Ç4Kå2B¾c–šˆD$Ú{Üà'{¯<¥ï„¿7 "˜a "sÕ¢j8?ãñØÕUÿlùŠÁUN»fÒUÊ[ŸÎT°ê"4oOÞ޶׸·^'¿Ž³;Î~!Ýs¸ç`;˜š¦Q‡PP ùù Îf:?ƒ›0"xÊkS[Ë=c' ¬eð‰²O?È_¸TÔÃá-fÀ ª=)I_6@È }:^QжÉò‡ü!\á W衇ž¦†$„üÍÙò…f,Ÿ‡í²ìlÍÂè~c+;äzÒ,ƒ¨ôI˜Êf%–z¹U™ãØÝñüã/g®Ÿ^²gÏú¡ë³`Ï?Æcùv¾‚JÈÏùÖãÞqcbR6ƒ»±rÊS-Ë,€Í*¸…ÇNµ¤ÕâL¤Â3|áúSŸ"!?[R`íX;ÖŽÕd5YMóTóTóTÔAÔAs4GsÄ!q0BÈß­¯½ò"«8GxÇDµ‚ÅÏö,Òðu¡©­+ÕÒä4ª.©3MOÌ|™¸ïAæ/q‚\Q×Ds4å­¹±9Z ®K×…¦ÂráÛºì.p‡;…–Ÿó­Æ½!V`—8Š=bøF^•‡¤›žšá!‡$´Àp‡¦r[ñ °s¸7F`>Š#~Dò^7Bºk§!"¡å¥x)^Êþ¨7¼á *T !äoE„ÁÖ×.¸³Å,A‰T·òm/Ÿ÷9}l×%7Y†šžXf Iú.òˆ»¶-¼ÿñËäx-Oàñ9ktë[k k náÇù·tIˆG<˜Ÿó-ùøˆ$³ñ¬ZÁ ÞðNkcÝ¢T Îs^@.(ŽE—ez³î"ü±ç± ]ј‚H~h H@Œ0ˆ`#Øž¬S‘ !äïG€*TÃbôà_xn>FsKV¤÷«n õ¯¶Êñµc=é•é¼´´¶ðÐÆ7êTîý±XÔÍ”y½³Î}}:ÑÚÈ:ÉçZÚu«Ëõ…š‡EGEGEGÙI?- ùÅ„Ÿ.EŽ“ül;’oZ*›´æk¸ò~©¤¸Ü­«þˆVµ·ŸÏ¢"‘üÐl¿rdȉHDÚ÷‹!Rx!¶Šv'8B/¼XMå­zˆß¨?»ìÒàKýZ¿,ÒÌ:Þ8Ê¢˜3Y}1­çæyÃÎ-‰öŠ˜òÕ+*ãÊŒù¥dižÜÌôÈtÍt,ycòÆäMö#ÓX B~1ữöáì' 3°>Â0^ùr¹¬)”s)£»§ñ¶µa“Pƒ•¤ ’ˆ¼à ,°°þì»%&H#¤B²xU¼*]‘ÆKã…/âVq+bƒhÿ1Œ•Bþ’´!Ù*ÚÙFVw”ê<>2px¦½îñ ÖõkTaµ´âkåR˜ã-݈ùÝveyr(ärΗµØ.V ÷ÜóyLöH‘'Ë}äzÉs“ç'/T’•då[©L"Aa&ä—¾ûê^á“m3ÅÝt² ?Êc‘•·ÆÐ[¨îÒMûY³—q `SPEÌà %ù!Ä!1ȉR(Åð¢¼hâ±Ø;±wÜ:Ws®ö¹ÝÇ«¯ª•ƒÊAÈY Ãßð76BÈ_’­€Å ¬x„Í艶Üݘ–ÉlÄŠ%C&VY˜5Ùßì ð$^åZÔÝ–'Ol°¾á7¡­PMW³«GyA—L.™]²‰/ħâvÃTÃTÃTå°rX9l•(D}ë4$„üß¾ëqçSqñ[ þeiÚ:S4:ñ\â3qÏåOâDa·s>ísy¾ý £P¹)ˆäÇÁÚ°CìŸÅgñYþm‚ ®~£é¦¦› Ï©V-¬zí–oZ¾)y Fæ™ù ~ƒßÀ,ÀŠ!ä/I„cÑÕůBÖ•ßGE|S:•-Óªjr)Ï€ùÖ$cKÖ¯»c×Ñ­ç̱§V¦4Ü2gëÙ§o÷äÝJºuË/7–ËS¥J9d9i9i9i+5¤B~¹ï{ÜWà`ñ !æ êGõq˜…Wâ{¡°Ó¹šF‘ÊŽc0+ŽL ©ÜÉB ‘¤kiK]KÝJ¬QX£°é%gŽ›9îÝð<…Þèýê`‚s‚sÅËî^î^l2ûÄ>qðþ¼?Eò—á4H…fÁ‹-e_•ŠªÌ ÕgÆ\Ï/ž_=cå-òyKÜö¸íqÛÍçÌçÌçìc„îã>îSÈ ù%¾ïq߀[xfÛN2”0eWoò܉Æm|@¢àÆ:uÒ—ì“ܱÁ(ŠDò™‰¾èk[€)­[ R;ÚÚÔÚ4ùhª9ÕüeåœåÜ×QK£–ÂpÀ ÜÅ] !ä/Ã6ác*Œ0³a,ލ}¹ÌïøxµtÙ¿|ÍàO•âô3Ä|„¼Êq¿æÜ*;¡lÍrîã3bE¡?«§úª³yº =ZÙéïï/7“›ÉÍããã-×,×,×ì“ç>óo¹!äß] é-ã—¿ýÕ× M1Æ)ãùBþ ð€“p‡…:)2kÙÛ÷B(üi'ò)€Ò(  0Hïå×òkù†´KÚ%DË9ä:W¹¢\Q÷ÙáÃ;¤! ipCFd¤°Bþ2lóÆ}ÅY„ YmvCZ õ“Ø¢5*GgÙži·óG€}`»o{°.ºèÐÄå+.F±nÌkÔHu$¯wTÃtÔE=Ô³õ©;Ïvží<[v‘]d—¯S¾Nù:…/â‹ø"ÛX ÜÄMܤÀòK|_*³ —q϶?9MoŒU_«kù+¶M¨Â< ²Y,ÊqˆÔSh Äz"ËP± ù1ðe|‡0ÁdŸÚ>µ½±™áœáœ0ã0.iar³äfñÝbæÇÌG]ÜÀ ¼Æc<¦¸BþôÐBFäFf±£p…”çê">}àó¦ù &ÔÏU1$¨¯ÒÜTßrÔèažÅv=0sïI$F%o6Ôf1lÞñ•ðA[wΆ³(Žâ(îÒÏ¥ŸK?ù¶|[¾»4viìRÛ}Köœ=gÏyvžg§ðòëÍF-؇’¸h´+åè¤ä1Û„šŒ¯×nç³*uo¹PSkJñp€#åñÂÁÓ¾ø !?"D±ŸØOì‡R¨Ó³M/>½x„ú&뛬õuõsÔÏ¡Xˆ…âñƒø!„üh }[wB(Ìö3m»Ìµü=²œJ›rÚØÿõÞ¹…ýÖ+¯êé±³Á©BílmĆÂT6…þp‚Ô@ Ô`ÙcfﶘspÎÁ9_]yuåÕ•Ú»j諾ËþÜ{â=ñ…Ÿ_îû„û9b¾-‚`4XCcÊIK¥Šðœ½b+µ”:ßy².T{iHEªº/Pï¢=J¡…’ü(PìË-]ÅqçyÞ„eã¯ùk^‘‹\Ä,ôC?h œnHBþ´l fX¡°¢HÃzµ+?Ã<ƺvqø²\;¸geƒ~”Öƒ‰b]&ÍÒ-!GG½¨¿êî¡®ˆµ…Yl‰2IÍÁM¸‹çø€`Æ.ìÂ.ÊCy¨æ‹æ‹æ‹ËF—.Ój¦ÕL«™–+-WZ.û«ÏÀ Ì “@È/÷}â®üc“¿Ç|L®c¹«œŽãæj¾Ãù±n”&Öá$®ª©ü+ò¢5Š"…’ül¿ä¬°Â g¸Á Ðýü™7Fa6 `oC!N¶{¶Î×0N+Öð8ü"OD»8¿§V|¸è¨LWV)áªYÄЦ˜iÒj;ð"¶ˆ-²ø•t+éVÒIpœC€!À`nnnkÉ·ñm| B~¹ïkܰBµ_N…x%ÌKme)ªŒbgØY6 àCyçÚ‘'ù‚\W®k ·˜,ɬÚ u*’‚í—œ-}OFŒ8ÄA‚V|Å'|Â'¼Å[*’!„ü©9@f(€ðZèÈ^(õÔç|b÷} ÊšÑ)¾¾’§¹"§9™š[ËŠ-äR½tsûŸcŸj}™–”&D…Yc5›*òp€2Ò`„Åv`6Žcã¸Â®8îrÜå¸Ë±¹csÇæiÒ>¤}HíŸÚ?µ?ŽàŽ`æa B~¹ï{Ü °~ëuWžqgÞ$©yе+{Ê>a Žà÷œ^h·Ê¥õZ)N¼ MŸ&…$„BþdH‘ ,l«…jˆúœï(²%×ÂLÏg èqªô<«Ù”ÉœC´8 Öõ›î¸~ÝÍþgGÞ©ÿ&R¼!|f—Õ5jž Xú”Ýn*¦bª­›ÃyŒóç1އ;N±¤XR,ɉɉɉö–C0Cè„òËýÿ‰»åÛÍ}¾”+¼^ÒyS‚¥ò°¶àóÕÏN'5òiÝhy°4f¨àhÂB‘BI!„ü©ÙîZ`…"dbë™ÄËòr¨ìì´PWp­çðWUýœ»8õ“NKŸs¸ó…wá›ÃޝŸvå=Bp5”çêR>S°'íGþ³nè†n¶M‡ãÇŽ;tvèìÐ9µmjÛÔ¶)A)A)Aö5S'ò‰|"B~¹ï÷4X¡Úoñ‡¡J'06ï„ʾ²=0ª§‘ÑÁ*×–žêêJoDû²2¬:rÀBI!„ü©¹ÃzìÄT4g'YS<V B‹Ÿû«ò oõœK2®Wc•£ê›ð·ï’š÷ö˜çyö>ÏÏÏò-,šÝÄ&´ÇDì·÷ÙÿL,ëÏú3ûZÑÍš94sèïÐß¡²w²w²wblblb¬­?žwá]x:-„ürÿân3á M>UäCå½1“‹®¯|3éy‰ýUzVXÙnp‡Ëj.î Wk+5X5 fX…aoY'\ª°Ó̉Mc…pÓÐÕzM.TB!ä7’>¶@Ê>`5*ª]¸ÄoŒÕþEÉeÇ:›i³µ€¥°bÍ×Á¨tUfm8i0N4-¶deöŠFFÔÀLh CüEËÉ#Á¶¾vœÁœq©æRÍ¥š’[É­äNõKõKõ³¯qqq‘–¨#ä¿ã d¡”ØQkÛQ5*аÐs çœ_iÉ9çןrÎù³vœs>¤X;¯ò^¡ A¢W÷ó3ÄÀZb¾´Lœ"d ZÖ‘8„ö‡Eû­¶ÊÝ*w«ÜöWi$4щ"ä×ú~¦4˜aÁ䀸,iarS9UIV¼å%Ö²–ìb/频úÀúÙÔkÖŽîÅK„MXÖrhžÞ‘…¿œJ{v·Èë]q•ϸÝûÍ¥Wž´ütùKýÄxc­¯ú„©ӕƽF?Ô„kBVûò&|-ªð>XÇã:Þcvâ6ãîÃ,öÄžþ6'„B~Ž­L .Ìe&V\í †òu¹ .ö*3ÿHÿ¶KaµrÍ:@ì«?® [$o_¿üvë©çOJ‰y„>l¸ÒG}ÂOá3î#þW¿zADA[Œf’f’f’‡¯‡¯‡¯%Ðh üêùÕó«§­!ŸÄ'ñIØ‹½ØK'_NúûøÀß¶Éz¥Ä¥¼™(ŠÑÊ2¡ è‚æ‚$Í"ÑÅa ª »QϱªË!m‡Ü#\'ës#(À#µ jºäøš¶&yžåÅ«´~I·Ï?Uá¦ü|^´Ç½:¯~5?œõºnt1SIs+Ë8sá`.€œ€¨ ˆ+D+;Ž|"T?>Ÿóåüª#‰Hµ—ÜüÜ<²„BÈÖ²«ààxŽíè…m¸Ë „bL?+´g‰r9½‹y¦éê¨JUõÕ£ã/¤/ÍF}]ÕñR\CK¸¨=ÔA܇‘ w!B„åÿŠúOX dœsι\M®&Wspp°\µ\µ\Mx—ð.á¡a#6b#4B~­•¸'ã,ŽÚ6Õ‚–Åf ë™’7IÖܱ.²Ü’·ËOå- SפíÛ}ÿ¼ç›IEã²=sÊâ³Å³„Óí}Gù v®:Ür.&µÉàh÷áù‘'1ctgXvr9öy|Ë´ª1JÜÈÔÐ"šÆû¯ysEäís‹îtz3?ávÊÓ³¤î©‡LG”î x]z»ýÄV,‘§ðê8® |$w縀æHD*ÌHFÌözB!äÇa›ÙM€ 'á¦Ð†ÝWÃT+s¯Ý¹R§j(ãЄ6m17Kn‚b½çÎîUÊ©´ ¦OB/ö”åQ?ñ>ÆÞ)ö+Sv»ìÈŽìxx!½“ÞI:wuîjycycy;(vPì {˘tÒùµþUâ¾XMRí·®_†í/9k K×Åå&ê«Ø“œ ¼#s$û%º ,X#G×ñ\†¬w=ZiLò~DÂ>ÔÓË£ž.ƒ'<+ë¿äš—}T†-P A• Ö…jxÄœè:©ENkïdzÿìJ×ßU~×þË”T‡Âõ_º$.LÞjp°õÿ{Ï{0¡B[æŒ­èŠÆ¬&÷B¾…'ñ|EØ+ÔCO!äoÈV‰n…UHª°Vª£z‚¯¬*}Ÿ­Àè©¶½«Æ æWÂ] ÍQÂ"é\çËüÁ€wžÂ6O9¥Öã³`å¿ìöòƒül‰»pG¸#Üq¨ëPס®aaa]ì¡ØC±‡PP€Ïçóù| À  Hȯ¹ÜÿÙv<ç>†$ëe%{J'K€rɧ†~¦TÂí ] êÃP û°ÒÜÂZBévºîM„?›^áól‡É »tjŸ«_Ö’î·ò¨Ÿ=ÛY”³c¦J%Có<ð\Ú/Ø)HÒÉÄç€ä"d§ÈÉB†ÈRÄùfêBý{žlÚ;_7CÕ¤óògŸ#ÅÆ?xþúô—È»q¯¯Ç>?ùÞìw±†ßŒÞ‚Ƙ…Ç*8«0Ξ™Wް‹ø(Š UU7¾—àÔk¼8@&ØÔ~KcÛ !„üµØ:¤¬P 23›Šuº†;ùgðÊî¶²ÎÐΕ³iª‹ã[h!;ÉÍ6M:2ñÙæÅ|ïÎ;767”‹êÞÏñŸì“3þ7¿ Ýà7Û¦KˆKˆKˆv¢v¢vbÜǸqS ¤H-`oy'p‚N !¿Ö¿HÜùD~÷1’Lm­™âÃ+S2ƸWs8 E]ÆUo§ºú'¬,ëÆšò¦¼*Ï#”gûY€0LÈ…Û_“ê¥T¿4')â¥9ðVßê¡;,»f=ëãäz¡æ³’w³*¸8»”ákè´€žnÈZŧ¶kY÷ ³fb#$êO9^ã !ÏPï…÷¹oãŽ0¥)›S_¦õ7í~ÿìë¬4ÃÕÏ®|é}ªî­×o’Ì{]'Úûӆ؆²qn‰SýÔÜñ{ Àk…§B«ö|6.ðŠèÍ7ñ0¾W±'ñ ó° ×ðïðõðƒŒBùß²MØ`»‡<]Pp /„áÂ~a˲ƒÛT5tö÷rY¨­Ô>t/—Årxiµ «ÙE–Œ‚< 7 ¢^áCºéþ»ßt*Ôo¿ný+úWô¯ˆ¸ Û¶%lãgùY~Gqô[9.!ä×úW=î q ¬)»MµÍq Ï ²y<ŒB]á&­³ȘGŸOS[*' f&K„r—?Qxy®¨iÊ;x"rÀ—gù!ìe•ÙIlÃ&¬S2«×ø¬´lÆ:–YÏð_aû×þS(FØ#ô.>?÷¿¾Ÿf/Ÿ!OM@ŠÇýü˃Ëû<,|?Gh†P}'&ùb+Ôp|åÚT·:'\ëîäœÍË}]{ÔyÒÌt>õœ5öq¯·;ã·ÝÎýìSTÝ.áÖ¯-ïÇ…Ï rñMÒ—£I>)« ÇÔp @ÌDåosõXÅ)Œã­ù 4Vó}<Vcn¦¿)I B![Š€LðO `.Ê4õ/è-¾•úæÇ(Ù')Â'|ÂCp ~ºìâ¢xþ ÙÎ÷p 3¼áŠ*¨Â¨‹’dÓÐåØ56†=eëÐFÙ«îW—\¿ðØûý’ëxlë¡à<Ôq¦nA¦Åž{²¾•3«¯Pµtу•НÙ”áªÿÇŒã³;Ÿv©½èz ý´ã×JÕ #OXÿÂÈ×Ì»-`-ÃYüÅø† ¸×I ™^üØ/éÃÕ©O{Ä ?¹ûæÄˆI/2Eöÿz<éHÚZË,eª²J9‰Z8ˆó¶÷ L¼X$›Çð–¨+QHmÉð Â%¼´ŠG2ŒÔ7O!ä7”nöa¾`ee•êj¾³Tã¼;37{ªýb•¹†Ææy¢IZ£vtÙã«uofyºûS!ÛÍ$å¡Ú„ϱ­¨ ¬¿M'”g˜g˜g ca,,!%!%!Eí¡öP{@…wBþ3ÿªÇ}ŽãªØ‡Z©ùye59~QÚ;ãUôB„$•qwÞÖe¥&Dœ"M™0Ý4@ øÀú>}}h$b àŽí_ŒÀn.s‰‹°p+–bæ °I8Æü„£¬<Û¤zªÕ‹ÉER3³½@*Œx±çÝõ8lÅI<€@hå ñÞ×Ë;8ùMA§ ö=ò¦MÌ8,äZ–ί\C="Äæ»Ë{¹—sï¤ÝáQL×!¨t@ õÕQbi–kaMÚW,tîÓíØŒÆÍ7‡½È÷Å÷BÉ{¥ßÞ}:èí˸GÏw¼wOðzçõ2¾& @‹ÄÁ€ dn˜É¼ÃÖóz˜Ä¯ð(žãQ°fX Ð<ô„Bþ+éî÷²6Ì ûÔbê¾ßµ£“»¾ðÒ̃ºVj¬«õe „üÒéêÑ£—¯¾uš=c[î›-Ä.Â,6\™ Ê܈è°©0ÂúÛ½Y×P×P×Pa–0K˜•°2aeÂJ„#á¶Á©”¸òŸþøg&X¡â,Ò âDhS*Z*C¤Þä—Q]qLXÁ³!^U:nzƒØ[‰@ê¡<&áîÿŠ×·À žÝC°Qå*çP5¸ÀEtÄ=´be`Äzɶ ¿Ž[¸Ë}x=,@f´À®ÇgÂâKèSƒ¤ýÏŠ¼5}íö S„>þô%Gû>…\½,2Îjr·Üàcy †q@ÇnÜQdU¼+TWÇð>T½Éëñd~’›ÑÐ~kÒ–ÄS=!„_ÂV¢ÙuŸmFVp¾M±ažss…Vù“rθˆç±<¶âÇãIeº˜ÕñÔ4óEK9ë{ÁÀ±…ðG]~ŸµÊ=3xfðÌ ”Êe¢££mE2ì{Á^ð <Ï@§”_Kú¹xãqfÆÖ4´ž‹Z“gsŒ ù 8N(›e£{'—^o ÆÞJÊŽ¡šs` ü‡ï%}kë¥^½¸Î®sp  A„ë!À Îб9¬ ® ®lKb/ÙNîŸZ ¿…g0\¼Uö>a;ÎàùDý íB¹”ÃPÝ iIq<{ü§WiY¤DVC¡þÙ[x¤-ÍáÖ+Së ŸÃ…êòVVø¬{$<πͮÍr Hïñ©Ê[Ô æ6†Š–q-“cź7 Ÿu¸Ûþý©‹·ï_|ùQùZ&õÊûÑû“b,P ©¥0ø6v^8%x°RèÁð˼&à¦ó͸ÉWâ^`6âžã-¾Ð XB!v¶T»"Š#§˜,Ôdƒ‹Ú›7곺qÏ":v®Ÿ;Ï8kCcs h™*äë)϶ž}ò¡IL¹Ä3‚ [ÃÕ[¼.O…hŸ£ý?-²¬°ÂŠ¬ÈŠ¬Î›7;o,‚E°Ä­[·Ö^$³û±-Ð-èÄòký|âÞ'q“ ¾”1Ÿ¹r+9•(æ2è&Ô&±ÞYœ=ÆØÚ³Y¬+ý›ç™¶zÛ¿©0‡ð¯È¯p^˜søÃ®¬/ˆóÂrV„ÅR´‡ŸòBËûf›úY®æš`¹zW¼šzWñ ØŽÍ@¶óþw=·^œÑkMÇ€ÛîÙ‹È}ͯZ!SpýŒ~^í=ë¯,?«Ùì0Ažè³Ùq€Ì}àóÆÉ¡:JÉ™ýEWÊùÍêOC’¯ÜúâIô‰;Õ^4þÜåѽ·=ãç]Ëù¸ÝDŽز “R3h Á[%t1ЈUÂ\Á$Þ„_Bµ.ßɳa%öâ Š%„ŽH0Á «Ä61«²RÍÁÛÙš«k¦s“–ws)énio¬kÞ/¿Ò+šY2¯ìtýæ‰'7r‡w¾ EXU5—:˜_Ѿ¬ÒoóKÚ6ŸŒ¼à…HD"ÒáŠÃ‡+ á„p"öhìÑØ£xŒÇxÌŽ±cìOæÉ<™N/!¿ÖÏ&î¨À×á,€RÀ×*i3MÏLK¬9ÕIÒ.6 ­„Úl§PÎû¥ÓS}}»LGMC œÁßõ;Hÿ·ÂD#‘/â@<‚pÔAäÃFŒEVGNx±{lz²<ì#›‰•|-_QáCÑX‡|@,vmmÍ-y§Ï:³…ƒÆøUr{SÅP´z¶åŽäíâ[8¸¨ÿ=ç¼îç½t9¥÷Å4çù"÷ ìâ?Éih ²¶wÉÜÕw‡d4æNjaš÷ùLlPJ™— f$¼6åiÏ/ÃNL¿Ù5|à‹§‘åb7$L-gnn}¢äUú£4öâ¬íú :fb™€W<—ºEÕüÏi›€˜‹D¤Qßá|eäÛ6“›mxe‹Ð™Y‘Ê›«*ߎ¯Ðâ4€ßv”UOôDOþ„?áOäòy€cNÇœŽ9ÍçÍçÍçSN¦œL9io™9ÃÞ7Où•~¾Ç½và4&@ìgÃ&Ó)ÓëW¥±œ(eú"«ÆR2”Ò×ÖÎ0`CP!ð;'îÿ·T`ÆœÂCû¿¶ïNâ"Öq+W¸Š²èŠ[ÌÌ0½è%,D4dDáŒé°¹§¥adÆÏ=‰ÏHÄYÜy ûŒ Ý'8E”Ï[0&ëÇbÞ!^öåC¶}Úçîø6ÖÌÓ};w¤ÞjqÞá©x: ŽãV·—ÈÒÔýpµ™Å7g©<íOì5"6Òh¼ùäÅî/.¶¼×6rÔ“Áo#â^>÷y·5áUdž¨¬qì?ê€væ¸nû.Ø8憩,?“Ùn^“Oà—ùž£Q­±ÅBÈ_’3ÜáŽdÄ#žÝ20³Uè,ìQ ÖuÒ”ÏÝ •ÿ¿|®Ê^Õ~Æ@s—„3‰§ÍþCf-KºdPzªÕyvá;È|ø3Ô㟟ßlÛÅvñ¯ü+ÿê¶Ûm·Ûní@í@íÀTcª1Õh ²Y‚ìMàÐI&ä?óó‰{7ìâç02²&LH{eÒ˜ó*‹ÕîÌ /&ÀÊ: ¨ëq]ù$\LAsäDf\ù‹Tf§/8¹„ûxÃu| gVUQႼÈDc &³çlZ±JÈ=/ÊÛco‹¸ð¥zü„” »qO°g—¢€ö¬epã,_<]—ùtpN-V6·5Óƒ o vÌ"ltßÝßý¸ó4M”‘R„…€¦—tÌ÷°ï§Ùõá{ͱIý;•-Wv¦Œ·¬‹ˆŒŠIÊò|AäôØŠ—G{xñÜ£þŸÄË/î¼–VÞØÖÒ–Oä õS°GÁA C¼/ÔPÇñh>T½Áëò$~‚ÅBÈŸž­$2ñˆG „ŸPs Zô)ïx¯_Dƒ]9Ž«yS\Tx¤»ïx ×øy«Oº=î~"ú¡Pd’z’WãŸ!C„ËïR`yWp¹‘¹½ yò*ä8Ìq˜ã°¤[I·’nÙò|'ß™~UBȯù!ñ3¸7ƒ¥HC/X?ÝLªbˆ·[N°‰zƒ¼’P„Y¼êèC5¯npeËXeçÕt0ýòðŸ! 8Æpp` ·Ý²<ƒ¡ìe,oq#AXÀá>kÂŽX•ýê¶—ÅÞeüºÍ¶èê ÜÄ›+Óæl2]/åœèà)W(Y;ïâÌç+$|›9*øŒß`—ÜÁ3;¸±Ì¼ ¸,ršâ–Ix)6sª+Ë Wn½r ûuû•KV? ½fŒ±¤Æ%%›f=Ìö&{¼ùlÅ»3Þ?»”|ÿsdâ‡E_ÒÖ½óþ\$iJõ8&8nû†„ÕÌÂB1køM> p ³ùvÜå¶•b×ã(`?Îã)%ô„ò»JߥR…( :¶ Ѽ¦÷Í,§Žär ö\09v¸µZDšÑ}“>Rš)Œ±D®2¯®|xÂŽ‰g>ó¢…@ÖL]©îåñ¸G\D"Raú}¾ 6Mgӹ®¸Ôs©çROw\w\w<:6:6:ÖXÕXÕX÷q÷q‡pˆN;!ÿk¥Dc8Z2[É:¼ÜÔÿz㪜OòìX‰óiS»¬:ÒÖ»j7[sI/hØH¸Áº(J¶¸6O°ƒ…A,š• Ø>ö˜ÕÀâÿû.>Nþú‚•k‰Ï6±ï–Æ &mx:ƱVÒ³y›Ó:¿à«.Œ¸†ókºÁ9¿š<¸ç×› ©ÄùµFƒ+s~½×à—œ_®>8kÄù¥»mÞ³eò“ú¯Gok)‘³®©lhȲ ëÝCœjÿßïÝd¥1U*)–`1Â]¡ ëŽ\úið¬˜î{$¶ ˆlÛÓ¢¦EM‹zãòÆåK½}õöÕÛgo%F‰Q+BÈ¿À~úÏNèÂ"X^A`ý°˜}¤ÓÔ]›¯n|s™sίÜV"9¿W•sÎwG=¸qw‡GK‡1bNapYX̱æxýG}CÂ#á‘`ïS¯Ú¶jÛªmo¸ßp¿á¾nìº±ëÆºYÜ,nè ƒŽµ`-Í'CÈèç§^E8>0Æ¢­jáN¼vli“ližCÅ … æâ=Ýšêkóª =¬ÍÔ@õ ž¡Z faý¿ôýôyÐ sT[·É\4DQä†?&  Ê£Š 3Kfç1š¹³ûl,;‚I¨’4>¥©¡Ç™ã·Ý#î9~÷{=ô¨äääóÀ}Œ> ì˂Ƭ‹*'ê‘ewÿl“Üx½qߣßèXÒÑ[;ÐNë–ÏzÁ¹x »ÜjÔªj‰à‡ÆÉ/Íu£#âS¯¾êôaSb³«ƒŸ¶ŠérîÍ^ƒŸŒ¼ôµcRµ4Ë-K°å²u” ø(²7e©µØD`jG~Ÿ·SKªkxJ£ –!)0ã¾"fXh€!„üBZÈ!C‚ˆþhrâ(q'[©8*Ùx6@“àE ¼†®ßt\ΚÅ•Øã×öu+¥³-·Q¢ÌœªÉñÿ½ó‹"ÙÚø[ÕÈ9£HRA$ˆY1æœ0çPÌ9ëšóšsBÅ,FLA•$A@%g˜éúþ˜Ñ‹ßÞ½÷î®nìß<úÝÕÕ=ÕU=§«N½G*ÏxUš{²t…<žKõãme§yÃï(øøQDHU¤5ÇiŽÓ§rYå²ÊåÍÍÍÒ“¥'KO¢å(gÙAv§p §„æ ðKùyÃ]Ñù£‘‰ØÀFy‰Cd.°BC؃g ùã-¤ñbªÝS%Fº+b©NÙK2û±šác¸ÿgž éÊÿ—`À#8Î# àÑgIsð8Mmè1"&‹‰Y#K’ŸàÏ}¨Ÿ{ªÛ¹1HÄÇ¥;pöx$¸[\>õoºÞiÅä&©õ¦™xÛùÕ(Ñ*qkeÝôz½e–¼ž…診º(@e¶fÑÑZÐè©mX 5;ëxµC£Z5£írÖÕ&Ó)çRYê³ã‰õrc>%d/‰LŠÏÈ:ö¶"C§PíŪÄ7ÊŽË=åûqÀa­¾|¯gXHz“$£z¬MØƳ†X€óF¬r.‚ÿ½<þD(ô×ù¹ ’i¤®¢'!cØ>t–¯”ƒY×N¬Y¬vtÓ. z=Þ­¼ÁD­IÒö%2f¨·ÆlçÖs5ðœã®óÙÔGb%9+iEš!¾x†ó8M¨A‚"”¢òwýŽŠ™ƒ~è‡~8‹³8«¶Vm­ÚZ $ xañÂâ…•ó*çUÎÃLÁœÇyœš†€À¯ãç wÅûº*Ä!™øû¾ühe€\!® üY~¯zÉ#qœÖ&Õ.Ò£ù“KEeÙLz à$ý³°/ŸÏB@ÑOþˆN@Ä(b1ú‘eÄcÈNL€[‹ýÂp¶·äíåmùâÙÕ<Ä3¤Âh<ŒÊõ‚5×Û‡YŒ×k›dž¥íÔ´¤~lÍ®­8Ï4»el|B]LŸ‰šr3±;çgúÂÌ_ƒ™Âd˜z¾Z¨Y¸CŸLVfúЧÄàmƒ´¢œé±¢ä3¹žáº¯Ô>޼»à©<9"mmvXÁ4À,LáÁf)¿†B‹·;7v&¾Ä…T‘Xžò˘?=dõ1‹qFСø¡ )D(Cd¸†m%zȽ¦'d«åÛyo¬E 9^], žÚ½O;÷Žcov}á¨Y#Ëì¸æm@–Æ&UÃȾª¬ªT™kͺ³!¤5óGž²kŒ¯:¢5h ™NŠh·X€ö¨ü ’ÛºHërQ„6ÏV û®âE/µ*»ÄºvkåÄ´å¶Íò¥{÷:/ r,kõ×ammî£sD]M»‰Êp€ðvƆ^*ªÆ«LfÕ\Ùîïj;§¼ƒ¬i‘¼´CÓ‚Ä ™—‹ù‡Û_œËjxG?20iïÛøôÜü}é]>Ž-ÞZä^Ò­œ~ùRmÁâioJ´Ù4lcÁXÁ#Œ]F8Ò±'‰Õ8„(F*ñJ¿$Õc]kB *Xƒñð$= ÅfÊ&ÃB1j¡Rû†Úë!}æ;îòËêcÑ ¸†­ÉlÍQ?E.X‹È¿Xt¢‚;ktïajé*§i}ê誘N°ÖܾÃlû°´]Å-‹:nuœæ2Îíp€IDATm±âäüTù.ùÎ?ì»ÛÃöÌ–Ù2[Eˆ%µUj«ÔV¡…(,Q)Q)QQôÄ€<Á<šŒ€À¯ãî9oK«*$h 'XðÙÖNµ½ø8wCó²t‹¨¥òÙµmàŸC |Šì Œ8žcåår9T° 9Ð#¡d²éNâJÎáNà´Ü”Än–N(¿V…h¼F&¢ñÚ#³6ö€Zo•0ɇ¦³œ.׬mw¾F™f^c©ã ó‹®÷êŒ2ö©íf¤™'Þ :«$kÄè+-èÞP­íòIgêLÔ 689ý×_?oqù±Ɇ¹«ž'd;<Íx3õÓ‡§îo´>lŽ›ÔêÃÙYyù)œà à$1@DFœ%‰bšÌAü ÌZ² ¬]ñiÈýêçP@@@àφÂ[]Ï{;f¡'—KÝH ùD¾›Î&2ÀB²[-z5ôœO Ç#lzNqNh açc [ÙiÙ€Õa¾,‘ï€7¯½·ÁðtâÓ›Kãzg(£ó Í+Eƒ²g×™«³Rg­õ*‹|‹v‰­Þh¼ÑÀJ,ÅR´B[´…ò/¿¿303ä2¹L.Ã+¼Â+Ý·ºouß–û”û”û”î+ÝWº¨@[Ê–²¥è„Nè$<Õ~¿ÀpÏ*íÀäSøGÌB½P\!ŠÐ~'<À%ûH'4D ¡7~gäÕNRð¹¬Ûc¹BÓzÐ@3´ƒ#:À 5È ² ƒ‰¢È2bF¢1½tey“J£ÛgŸ ·ñ ;ˆg' ¡­¾[¿…¶“ÊÊ6CÜ.Xy÷h4¤Ör{ãç´bLôŽ©ÅhnÒ£:3ꦣW Öº'M5‡G®y4Pæ-ý´9_\ó©OÁäÒÙÏÚ$nÉó½é˜úæîà'“šæ·.ñ©\_PZ~\V Oa*vø¸tšK®c"Žâ=¯Á3#öŽY` P‚*¤á ‘"” A@@à@1  QÎ…r T“ì#êLË™…|¿ŽM—,7uèr´Y{Û³› LqOj8Ö±¡É!@~M~`ÌJ^)¯yh~lfæžeÞ‡‚ÂçßNˆ¼˜2À 6‘Ëàt¨ o!Oá/•F–»–OŽO{müZµý«öGÚ©[ìPäPt+évúítbG‰£BŠñ¨Œ¹d.™«½¤ºZuµêjý-ú[ô·”©•©•©hhh)³úÃþ‚É. ð[ø†ûÇgÅ¥ó ]hð5`ƒ9ÔPÔ–ËS¯+.ɱ ÈTÔ‡ÞBÇü]©^Û‹bœÁmÄ*þg`@SA}&B9«Ä8bŽdl§¾4†ØQDNÈNÈó>.Éw)ÁÇù(A<Þ5Îù¸óèyDö GCõÚÖxÐÆßu[Íõv Í5©£Ü¦‹qlý#ÖZú’ëš6Ü6@Ä f0Í`’jš ãÕÒìa3Û`´Ó°¹]VºªÅ‡wg>䔺Gð¯Ì²Lî_ŽJx7-Î9uI~F|ÝwkrvÔ(¦e†ÿïûåNP™‹p\%»ÉlVÊZ±ÝLµÆZtÂTª.¯&ü8|3fºbþs†¡ Í SÉ ¾3;Éjð}Ù0…6wOm¹Á®áD§žE š·Ëw›d~ SÙ€¼J6à Ef÷]ŸÖOsØ6ñÜËç…çFÝ3Œÿ,Ø"L¤Ô‹L“·’gñ©7õ¥[*Õ*’*^Ǯݻ¹kb×û]ï[ï±Þc½‡{ͽæ^ó§ùSü)ÌÁÌÁ¬Ášßµfz¢'zâ(Žâ¨j‚j‚j‚ÆF+,+,+,KÚ”´)i£Èȶ²­l+Ú¢-Ú J@à×ñß ÷j Þiò¼ç…Yp$ÓÑ–Ç(ÓÁ*‘­Ô¼* ¢Íèâ¼Pb!¸ÂŸ’rT~–nd°Â$ù: ØŽQÃr “I.|ñF¡q 1•mæ ol‰öòNº^^"¬½}Ú«ÔÚ×±8¢»¯î‘Z-õòÚ”¸X7YìðÆH¯æ CNõ¦h¶¸7¿äö«Ùj6¢•uç©Ý© ›ÑÚYCÑ;^û¼¨K½ßmɺZpñ͘´“yŸ”¿‰ütþÆÌˆ ÉÜ˼$ƒ+øVüc¶˜—±ÕhŒNJ«üêt‡—Ë…R/>›ù3G¾˜Ã*ÑC±M©ê D‹øu¨@‘âùI»’hb9rÙþkÀ„G]‹­Œý´úîw1ëR³éËõÈç0€ïÏÚ$ŒÇ­Ln”?ó‡å'­# އÜRyµ·Ê½ÊP6‹'®8Œpƒ+{Ëjc oÀÏb›Ún¤&1%^ ?òä.É]’»šµ1kcÖÆ¤©IS“¦m2Úd´!÷È=r­ekÙÚßõi×ýÑ{°{T_©¾R}¥å®å®å^~ºütùé¾€/øÑ02áÕèÌÐtÏO/KÚ}Ø—;¬Ø^¦'p@@»’{DmE {Ó¸…ØÏ‚ð†ÍÂÃÁC$ Ÿ„E±JªÇ1õBcÔ&ÑØÁämKòÞ¼ »‰KÖc;ظçâ#Ãù¦]HSŸZœ¸«J)w¨Ú#ÜiÉ–„3©Î¹‘›ƒÎ<¨Ùµ/´J*ÊîVÃ%ל.#Ûä¾ü"6Q(8På•ÈÁƒ±`Ì‚>âiõÓê§ÕOÏIÏIϱèoÑߢ¿åË+–W2jgÔΨMçÑytžœÉ™ü÷}’µFk´V$%ó$ó$óÔlÔlÔl*l*l*lŠJŠJŠJpp€­akØtDGtš€À¯ã¿î¡Èþl|WváW°ý9©å“ª¦é„‰‹iW@.?SÓD·ŽVÊpåò–üv•ˆ…=¶à."„*þ £Xn¥à%’É4ÙlFer¹œ• p »HkÄÐýIJ‹8‡³¼9‡½(3ª¸S…$ {mÌÆd+‹ÑØ¢ÖPÅß½¦}¨iúUO´C®×ÆÌ§± 5îi]Ëôˆ†£f;­@ñ>€îÀAµ­Z¡ÒÁVÐÚ/]n…ÑZWº_oa•%s.m,»öÒä]£üU¯×¥æ~ªxZëõ­M7‹_÷Á6âfÜŽ YÙˆrÏÊs¸ÀæËw²0 ¸½ô4™†>d(&òø©Ìœu`Ga†¼GþOÕ—þ¶(|ÖEà@ê^ä ‡¤,Çg3´bÞ<ôªãkª:aP÷Þõ|·Ë³{¤V¦þPôåý…‰©žv—mÝÑ(pîã°c97뿪õþàGÝ‚Lzbɦò)ÌOþˆ¯Å&+C2U J¹°ô+Á\þ*•¿JF‘QdTÆóŒçÏ߇¾}êÐס¯C_KMKMKÍÒÒR¶Ž­cë031‰HDâïTyÞÄ›x+†øUâTâTâ4;kvÖìœý"ûEö‹Üe¹Ër—aöaa ÍM@à·ðß ÷h|@"Y1D®Åç ªèWdðArKÅŒwb>F'5˜ê\âBè¶ÙòOp £Ð[e™¿ÕTÞ"Ù–†úrÆ‚à =hÀÞpF#ØÃœÇZô#ÈabAžaJq¿Rýò¾÷…dÜC€]¸€g:zO´{«Ð~¦vQܱþ{ÛQÆ—:\ôH³ÞÒØ®®Ô0ÕòœñEzº.ZMTÆ‘Qb'ÒMô\MÊ;Ã~—ž“3ú¬ï ¯su×mÉ?]V÷ã輸R—x’nTètwrÔñô‡÷D{½KJ ËT)˜žUV®-Í·ä7c4€ÍÖ"[Θ„³ç,"ÞmbŽl{æˆD<Þ# PŒ,ä(uëþúˆ”Á F¢šr ©?Y$oÈ{0CÅ[{H£dm³©wûZ»m9ܧqÝEº?¨¹ {Åš*5€“qe¹y!å÷M¼ýªö¦Û§x’™åœ3±ø€Ë}BÈ þ0oÇÞò£ùÛ,9°ÄTåy+ªé†ý”vh‡väyGÞUhWhWh'¬OXŸ°¾%iIZ;-;-;-®”+åJåÓåÓåÓ1­Úç÷Á ^ð ÜÀ ÑÑÑÕæªÍU›W”V”V”¼)xSðv°ƒëÉz²žXÕX-4=_ûÐúϼÂ'‚€ª3ò¾|ƒ‚[K«,‰‹ö2Õ\TòžüiÝpU i‘¤R4Ÿ{_ÁW‰x ` ¡rÿT‘ÎF.ŠqAxŽãÁÜa‘bG¤1*q’šÓd)Ñ#ëd™ò@>:·aÁÉÒž¹(¨$#¸ˆ‡x£,ØæDýúÝ[nw¯¹·l¤º¾Îul ¬êm´²5¸mpÁð˜Ú9€Ýâ“4§j¶”<Ó„vé"ëa–2]ÍŽÃ÷¬)ЫÉõ òѸ¬Å£í/Š2<™ûJ'cï멯óËŸ~k÷aRæôÙ…ÎÐùw_”l#µ°†N&.$‚¶¦÷ˆ©ÜS¾^ŠÊµ ä«Å±.Hµ>ʃ‘ÁDD‚k¤¿›y°‡òÝ|koì§÷JsÁß®åõS¦îµÃ¹•þKýåª?U^r;@>Hþ"×»0¯ªÿ‘õ7O½Èݾì|ð³Û‰ÓãsbáŒpìævÓ2›waÁl6ßßÉô Š7¡ý‚™<D1sfÎÌ1 “0)avÂì„ÙESЦMqLuLuLÕ²Ö²Ö²ÎKÉKÉK!óÉ|2ÿwrqçÀCò§Ø ž¯ž¯ž/—ÆKãKÝKÝKÝ+{UöªìEú“þ¤?[ÍV3ÁdøMüÃ…"aDå­äÖòîŸ6–l®…}”ÐxHùx>àƒÚ•³Ò®¢ôPŘ*ú“&°€àa ðo"ņC‚а¼¸ŽQüˆyèEz ú`Á *`(œDÛÁ.!6QšÞ!Ç?éÈBP'éTÉÜÚ køë¦X·0UÑlÛ‚oÐÎbC›í®ê5_ÙÔ˜¤©¯ê-Ù%:†—Rm‘@ú£­ywãçª>ýJMclš÷C'bwš¥md«ã Síóß$§®Îyôziz|Ѿ’'§Þù…NY–Ö±¬nÅ„ªÉl2{‰Ùr°w òn@jPC9JQ*4?Œê‘›kõ¸Óô¹&wáµX=x0h¬Që,Ý4±OÏ.®†iøäÖ-°7²>§W/+S«žì=ëËÏâ'AÐå6I\¸*ïÈð1N ²G)NBn‘¸…tùv~.óG,°(¨2Šê/E9äì9{Ξc7vcwÔ©¨SQ§ŠÏŸ+>g¶Ól§ÙNÝ2Ý2ݲK¶•j5•ÊDQâ–t7] mÔ…´ðA¨^ÿˆâGt$–ãÎ!ðyq˜bTì:ƒ##‰nÓzä ‘Úä éYÞ¥bzåê}·dã‘‹x„„£’ãâVÜu½wš®*ÒV{\ˬž¶¯tïVsbÝäš?ho¬=¹fcÝy†7õ/ªŸøçÌs¹¥l¼=¬è:Ø£N¸1Ê^ó»§­íÕÜéF-‰ªœÛ>ewÁÅëÃKRê>¦/g§mËj¸*æµIJ­l¿ò… Ñbùù¹‚!Ÿâ?]–‘” 7ÉE—åÕMvÅ÷âo-ßZml&¡=ñ$EØŒû¸„½ “]»‘FU•ÎkšÝ·é?w»ï“†ëͶ®wàçòó¾¿à´Ec®f„h§Ø¯!Ç{=?jùüNj1`wFÕ|›À:°öìÜ ˆQ†DT)Ï.ÿµçú/@aæ*ôXdA–¹)sSæ¦ìâìâìb½ëz×õ®»Õr«åV+É4É4É´ÚÓ†‚ÿ çý_Є&4áø(Œrƒõë Öóóøyü¼¢ëE׋®ã=Þã½`² |+þ›áŒ¤‘½ØˆÎL›e6Ù©EÙ¥š•Ч2#æÅDzU6HúIÍ9ê«<Ê FÐÆ}¡z~ÕM[9*!cYÚËyÖœ1èC›©Wá0YLmÈyrþpïæõØ…Jµª‘rŸ,äÖ,Áé³·‹Ó¸Ø«Ž.=욚ͨ÷Áòžî”zí-÷ê…y¾uÙQË×á‰åÝZõ4;¸ˆyâÙªb=¨è‰†{ÞÔwR쉆Íä'ÿù^-WõrJò~É|íù-¦uW¼H˜^“¾Ký\ýúÖ,kz©©ÉáNk¸5}D‹¹t³ÜžßÀwfØEØ*=j?_ÂâWoK5éFôG'4æti?2^îÇfCPW‘±_Ͷ{&L?ב[|#sÇÞÆ áY5@V ðùÝëAêÜéûô^FøÎðóëŸ{O»ßäõB`ÀUlD#ú‚Œ õå3øfìG<ÅKÌU¾œ—¢ü‹Éþ­(F1ŠÑmІ_ϯç׿^ùzå땎M›:6uuququ 06`,\à—ïn²+PƒÔXwÖuWÌè~Òý¤û‰÷å}yßÂÐÂÐÂPÄ 1BÃøVüwU™DdÐVÄ…ˆå*L©çŒ,©]Ú7¹Bú@þž¿ÉjJ$s¸®¢æä(zFÁ:P*Wà›QÝ”ÏAJX41”uãÁ)æá*’መ‡!h _t@]êLr±—Ì"ÆäoÎ&±˜è‰¯CßoŽ|úþŽ¢0Í—êÏž$èûj&HMÜûÕ 0;×f²Û–ZkÜÎÕ¾©¢öóZ­t¦i¤ªl"›Õ:ÓmïÌ*ŒLu³3ëúšteñÆÉ ï—rXÁoé Õm^·©Ž]Útn=ãœÎ–Nr‹—–µ¬Rô…iÜúŒÜ“WñgÙVÌÆ6!Å(WÎ<ü’ÊQ éBÄ8CŒ1vòM|'æLj’ž$Ú§K“ Û³\غum©U?ÛÔ˜˜‹|È9@>L¾à|¹31ÞLÿ”ºÌñÈ•WÓCâŠËÓ*µ«b‚q‰'¯É&³ЖOg³Y±2$ÓOŸTß–×x×TLÅTÌ»ò®¼kØõ°ëa×$ H`úÐô¡éCâJ\‰+ó`̯𠯉HD~Ç:WƒÔ°{±U¨B•ö íÚ+ØB¶-,D¡ - ðÇ ÓD¹ôdÌ4÷³víYæ—ÆÆ•8-(t…±•ž#ÞÕÓ4š¥«œ”$7‚B½ üÁˆª)"/Ã8xÑÓÔˆ Íç¦Q#Ž£ÎÄò?`ÿÖr¯á…¡+;.röØÖkZÍ6îíÞžçk—SçlÇÁý>¥&Ì9ë÷`b¥Ce½ÈZ•ÃËMCj•—•—EÈoŸ^ÙåÇõÈHÚź³þuÉêÅÕK&'‰;öQr–¨Ã M?*Çãþ3´ZOiÔ¦ÍÈ5¢Jæ+쨞ÑSÛåb­Ùgz,_Ñmcõü02Âoc–MëÁX˜þÌþ‘fûüÏߥÇR×5’Ñâ³¢µ_=H48s’„½XŒÊM g˜ßÿKO èèAzp€BÇ†Ž {ÝäºÉu‡$‡$‡$å&„„¥ÃÌ÷£Z …òŒ»Én²{ëë­¯·¾~úãÓŸþØgoŸ½}ö*÷v'ÝIw¡Ù üNˆ–Ò¡DùÖ>ȨÁ«Úõ[³htY™ã›ƒíYöŠâWÛ:ÙÔP÷$H0Üþ”T÷yí„æ°'6HÇVr›ôÆSBzã>™EŒ°¨"“~Z€ú¦êëZÚè5YžºÅiÅë÷!Œ1§Éc¯¼c,Qƒ±² ÆL™xŸ±°Õþ™/»Y:,pA£aÍ.ê·Ò^®öcõ2¹etA­H1Vn’@ô•§¿€€Àg´ ©"I¦ks«é>2£z–zõ­*ŒÖžž±ôz×€rŸ;ë§æ0úƒ_cO[ÅXˆ|F·Ô·gƒÆ6›Ò OM÷t6iRýʹ“$‘ ˆE.AQòçžø‡öH2Œ #ÃiÝ;ºwtï\|pñÁÅOÓŸ¦?Mï¥ÖK­—aq›¸Mܦï~A !HÂñÏñ‡_~uøU¤a¤a¤a›am†µQ^­`¸ |+DÿK&6‘ˆÅP¸½jŒl[ kÅO£-I~„ÒðÎì¥v”F’P¡jªû”_Å#Ä3 ¦ ð•÷¹ÚCLvÖxN«È ’K.’i0--/µ/ ˆ=‘Z¦ž´-|SíNeÁs~”ùË´h°h™è“¾5§^îo ¦Åí`Ä:Z»èº,‡Maãñ÷wß㤻}]`⋺§[ß™ùª{¢ô‰¹J‰4êEî5fƒþì 3a=°‹±w@! ”À?êKºP¦x‚=H]ÈGüÀof}Aå`£ì¼-b jM¶î³Ãõú°§\멯×K‹Êö²9€h+çù~Dv\‰Ën•‹Q±C·{žŸõ$ïYaZYw<Ã0@dÀÙ‘"YW¹óbÖl'!Æ…ò—~÷‡ö?fÁ,˜ñ Ä#¯m^Û¼¶É»’w%ïjžÒ<¥yŠéVÓ­¦[1 £0Š=eOÙSØÂ¶H@¾ËI D±ä”§ÃépÍ0Í0Í0VÁ*XÅÇ¥—~\ŠC8„CBCøVüO†;æ±x À(â+Kd·Ë&ɶËå’[ä¹à%TŒT4tÔÎ ’waäÕüS‹QŠJ6…ÝG¹œ5c ö¨Cô…#«KÍÈ¢óxðu£+»ûß¿>ùÊî/e쀽§Ê<{Ùs#_wŽtœØ±A#¹E&@™ºÉHýHUõoÛ¤dâðîsF°{åo±oíUµ—_h&´ÍR.ë‡Mȸ=4ŒÜ”çñ§ÙNÌÂ&\PNÓpªµs²xâ9ÝFô‰¿\…oÍ6ð`À³ †]µ6NOë{Õíâ°Jïùu v¬Q}T–GÌ‹­,´,½)ïyØ<°Otävós–Ñò7Ólṟ h}²ɬ/v ]¶@Í4qo¿è½Wýg`–a½KïÒ»òþòþòþ É É Ée¦e¦e¦õ êÔ+P¤þHýQ‰[‰[‰±'öÄþ;J¹ÀàsÌÑ}Ñ}Ñ}5 5 5 >“Ïä3s?ä~Èý¬.÷û,–P@CÉVÒF‘np«ÆãUÙ#群Ão_Zgè\ÆVLá»AµËæ½yW¿-z0‚‘²Ï ÏÈ3£¨#ç)2YrKECEý¡AzQ¥ÿ«xª(PTÓSÏ%§ÖúËk_÷:[råVÃÉŒ…ûÎÜÊØÃŒiÇ{ÜÁs®Çµi^¸€ë”éªm§eÚDÑá”çÚM40„Ö#—‰>Ìa ¨C!ä“Àß ÅøºT .´ N«h/â_=‹‰ª¾FÔÊc·z¶Mïxnâ˜ÉŒ=îã±ûk§þÀXXæLï’÷.LYõã¬Yǽ‡Ù.«®÷¸z \Wº‘ìÀL‚7L jÑSÿüõCiÚŸöW\o“M>6ùìì줤¤kefefemhC›ªRUªú¯§šbŒy€y€yÀÓ;¦wLïæßÍ¿›oTnTnT®|‚¹7â&4pßëYAˆ ¡ D53õîi¿]á·´ï<Æ–% gl…ýˆÚÇåî¶S¾O †»À? DÊ)uà"6b„È’s$Å?ÍØ"¢AT­ÛGç.´íÔ£hÞÞ“3 -aÁØÃÓÓ[0ºb†¸üæí€©}Èç‰:6hwªáP«°Ó+×t¢K&¸þy“Ò¡F0åþJˆÀ}n±¤Êqˆî"Ĭzc½éÚÝÔu¦õ+kX–¦wÎv¬c¡É32öPoº”±þÓ«ø”ûc¦¿=Q¹8·‹a ƒ-k}eî“ 2;h/El”›¤1ØÿZ¼ÄK¼T¸Áè,ÒY¤³è¬çYϳžÑ§£OGŸnÖ0¬aÔ¡uêK}©¯"öê÷¸âM¼‰·"]?·~nýÜû÷î\–^–^–ê;ë;ë;+sê}¢/4vß 2 q¸ HkmPk¬ÚèY⤭=±ò­†¿clyÎðÒkAÃ{vôPæ¿„D ^Wùb:æ 0…<"ýAk’}(ªžÝeQ&-v$Ïxé¥?ðšÏÄSŒ…î›q±G§c,¼ÍŒ•ÓïÖ¶îúˆõ½õ»µ(±[ȹÐ\º¤z9¢î\oª‰õ˜å¬×W/6ÄÕÚ§ô ÏͤgÉ…êYèºîy´KtƒÐ¹‡ëÀXx¨ÿ$ÆîÇM½ÎXè´äy÷šL»~ñÂZÇ^GÛúº¶|ÿU IÑ%?úÂDôEåî;k­ü>+bE¬éMi›Ò6¥Åœ‹9snÌ1CÆ QfRÈAZÃÖßåN’“ä¤"ÝrCË -7„¼ yòêäú“ëO®×Ö×Ö×þl¬+tè~'Na z' GxOrúa¯Qº3¶ªÖÈ1L¾üÄðÛŒ‹ë‡&°‰FîïlY@àÏâõµštõ'¹¤%õ «q¦zFëæõt³6 šØ&â]›€w£“ Ÿï/fì‘hZ c¡GgøËßÝ?0Ýæ¡ÝŽ›õÒ*Ûî“VõG*w¾:aY‚tbƒd¬AC8ÀB¹CШøc©.Ï:ýИ"-Lv’ZX¢Ø¬VCežd[·¼Ñu~ ‰Ü¥ëÛ±G?ø1ö°|úÆBô¦?bìÁX¿õ³v °«ã½¦Ýk÷‚/–}}¹Jjc2G Ikå&1D³ÖÏG’d Nâ$NŽœ;rîȹ‘ç#ÏGžß5iפ]“¨ u¡.Êüžð„ç÷¸jM­©ò• ç²žËz.{²ãÉŽ';vð;ø¼J™J™J™âj‚„@@à÷BˆEÍ© QÊK]ó<¥ýjÆVuޱåm‡Ÿ6åtÏvŠ½Ä ?`(Œ  u¡ò”(¦æ¬Ä$t¤×© ñÂS¬CõŒV5ÌéuŸ1¤e“ýIõNÏ}™±PÕnŒ=ºèÇ1ö¨ûôAŒ…lšQûã§AŽã&u?íR$q¯Ý«^§G['Ú›¼$ Ð/gÔâ~~2ïJŸÒúdqC:VßÞ}gË5vˆ¶Ïî/c,´ËÌŒ=r˜Þ˜±‡§§d,LkFYÝmâ;¦çŽVùöŽhOT©ÆW%_¥šÄ±}•›QTÿ¦µJº‘n¤›bƒ{¹{¹{yDZDZDÚÕ¦W›^m*FH#”N20à‹ý7…®¡kèEz„l„l„ìYì³Øg±+V¬X±b]DÑEʬ;°ãk}}ïŽÈŽ:‘ãB'.ökÚ:‘±Õz£&³÷˺ÛœÂf,ík««ª#R¦x‰%˜ Ô›€ÀÏ¢ˆõè‚:0!XÎí ÈW#ñ†—uõÔ½¦¬îs§a@üÂcoGx3"ž1±Ð†~‹ ¹àgÁØ£Ã3Ƽœpdö°[3ç hüÒpŒN¥úäêåpGh09 †¬€ Ì¡û·5kþX†º¢uYÂ:x‹s˜&’pZä«E¢Î3Ì7\í¿îa¯X™ÆýaÓG22Èo(cZO3a,L{fŸV‡n##Ӻ亴Sߦj"Y§ÙÖ0,פ8‚A  •' ð_ ÿ_Ñ‚Z’bÄ™Ðö¤~õŒªé ‰Ã$Ó^Ýî†lÜujàaÆBOÍ<ÊØ£QÓ;1¢â×™±Ðó3Z$ç96ºpÖ¾¤ÑƒÚõj^5þÕŸcÜéQ*"Ø€éèªÜ^}N@@৺Œô M9²•¤Ò1®zÆuÆšZí-}Õû|Õ“`i ‘ú5`ìAÿižŒ…_™™‘y&wŒþt»~­=´Toª¸JVT/û@«HBqŸ_MÅÿÈQˆB”òÉÐKµ—j¯Ýov¿Ùý&òtäéÈÓÃ,†Y ³€ \àB×Óõtý7>»Â*¨ÃÕáê ê ÎüÔù©óS_'¼Nx0Ò|¤ùHsåÓL‹jQ-4A“/k ~¸Žä ©H/ÿÑÛ¬Q,+_i<²¶üÜ’°¡mòŽÏO”æae ³Þ „z“^Ä@¨7_@u_Üfp†i2ì&‘d0"ªgTgjæÒ»=O´Êµ{ü¨îÎξª|{qÓ0úãŒUŒ=¬œÉXxû™Ó–ž_=öÄ–„izí–Z^0s×ÝóÕ UÈhl¢ IñgÉ×j/‚;ÀÏc‚š¨©H’XÚ›•‹Ï‹Ïsib5±eµ|3L¯ìÔ Ù 3éb›óŸ\µ8‡±°¼™êŒ=l:í ca#gÖÊ\ÁiÜ]ÿCß5*´ØmÒH§MõS‘*²xK˜ò•FÊ?¹•zÃÞä 9H†0¯5^k¼Öëˆ×¯#VØ®°]a«ìÐ?Òé0‡9Ì¿í%pøaÜ0Ezåž•{VîIòOòOòïÙ¾gûžíÞíÜîwªP…ê_ª~þúÐh²™(ߘ§Z·thÄØòðÍežKÈSåS—LÖ³KŽãt›cÊ.]›„ajL@à·Q]f.FÂKÔ‘ëþµw/×’ÆÓno5M©C¯¼Z7º—oų;EÓŒ 7ÉØCÿiÑŒ…M˜Y3§ÿ•æívòõîç`ßÍtîW}|9ùDê¤ ‚Œ¦ÜñSµ?½ß 1mˆ;r±ƒ´@0ZÒñ³æXujß6°ãn­ÿqTtÃÌœ+W’&ve,tÞŒåŒ=85­ cáÖ3g¼Ï¾Øt¼ææÈ©íÚÞ0½kpBó«(A¢z\]’„cXAÊM‚s×Oà–rK¹¥Ð€4ÚvnÛ¹mçgYϲže=yôäÑ“úúúЃôÈp2œ ÿf'Þ…]Ø…d$#™N¥SéÔí“·OÞ>9îxÜñ¸ãÄÄ”±,¸#Üîˆp§þèÒ›h+ÒƒTÝmê>á=—MîUe·xήlñ ­!Ã×z´wP.—áÞP«ÏBQ¿ …ѬÐÇPlF q…Þ¤jÄî§ÙÛÿаÊZï„ÍÕ.óªúÝ]4­+c¡6~w{xhz[ÆBÃüòËE·÷M½}èà|³Ž›Ö«O-Ô~ZŽÈ“kCd¨@”KД~ùW$_-¡ž/zƒZ“ᢙܪMjâìçQöê8hêÑ,l©ÝÖ½[÷Î ÛºjË܇랙Þp/õÁõö-Æî¯›ÁXhï£+RîìœæºµdÚ½v‘u'X>1|õU3O'Cp…T‘õ¨@¾˜éTXNýoŸ „Ö£õh=ņÚOk?­ýôr‹Ë-.·x°ùÁæ›=\=\=\¡5¨ÑšBS¾ÙÉÛ“ö¤½"­ÝZ»µvëÃe‡Ë—=yÿäý“÷Íùæ|se\Î’³ä,…<?â)ñ‚¨"V‘n÷Ún[­ÂÊ‚%ç†fT._ì9¤c«ÂGNÿÔ"Øy‹"hE^ õ& ð­»bµ@]hA ` CRJÖ¢Š:‘e¬–ÙÜÕÇÎÂäý‘v nwöÊow½ßÄÆÂ«üý{°xj&cáÆ3g=»i=¹õÕÞ÷YÓ:Ám¤åc.Š›ÉyU?-M>xÂV0…4ÿ2ñ&~èCmà+ì†?|È=2ÉÜzÛÄ«zÞn­D5mgÃ:KÍTüö÷ìà¸ôáȇݎ›§^`Œ±„lÆ{2‰1Æ¢Xef©UIî ã–¬3/­S´£‘õ|£¯–M‹$œ1IÃìÄ(XÀÚÊ—¡]ý/ðàÁ£;º£»Ú"µEj‹öÆìÙw î@ÜŸ>7|n(2r{¹½ÜÞoÕ_ÉCò-3d c?¨m³qžçÑGa.ˆwÓ×´†Pm¿+ÕMçX€îd7i„›¤’,EjõŒú–Ï éªqqžK>m¾|i ÆB}flcìá»éÞŒ…®ö;ÄXȈ™=·ì¾8°tÔëÓ4q˜èS½Ñî ­G(Çö UH„[ñP=&¨9 ¡M.~HçÊ8=’+²áÌÈÏÁñ×£a*-ò’6*¶­»ÁoÒ‡¶îwÚlº×ûC¶óÅùãO2òqæEÆ"Í|ÀXXK¿ŒEtŸÀØÝ6£gä,y‡ËvqcìåMÆ‹ÍcŒ±³ß¾HˆT^Ú@®}DBŽU˜‚þhþ¹U{µøu~(J‡*4döØ{`ïˆÈˆÈˆÈqâÄ©•¨•¨•(³&!éÿ½lÿº3ž¦§éiEÚÅÙÅÙÅùÞ¾{ûîí TTT·èoÑߢ¿RŒ2…¤á |+~ÉBŸdä}Ø^ y®üdaZÕ6™ž±\üI:ú<Ï÷1rÖè«v ïA±Qþ5áí±]° p÷…êøîð`ø¼ÈoVâ"£Œâ"Æá15%ljñ#åçŸâüqã¼f»qoÉV›€æ‘ÑS=ûø»_êû´µ¥­‰õˆZiºY@¥O¥_£)õ MmMq07n8oÑ ü†ãvØf=_r6íÞé×c²[æ/VŒí{‘lâ·‡õ¸ÇT™7và‚ðLiœÉ /ܢ߄ÂÕA8ÃRô&dú¡5¡£tašÇvâ:ëÎ,QCù—F¡_ªã§þÞêµI­Í.Ñuæ íPÛ£©5i~¥Þ@£l#]=*鉳ˆ¢$à-y5€›R Šâ‡÷=³—”f¦äeo- rx8;~sN…q:L]Ú{?‘<¿Sß©fèr©þç Í7r]Y¢éPc?£Ó™w³Ï}ð% É^2cØ)öHyAB«øÍí]b—Ø%ä#ùOEOEOE%ýKú—ô·±²±²±ÒÍÐÍÐÍ(Õ(Õ(Õ ƒÉ`2˜U{HüÊÓ.&‹ÉbEZÃQÃQÃQ#U#U#õÚ;µwjù™ù™ù™¨D%*¿_ø'ÿƸA¹ NÜ…kFÏÄOsêCø>Ký†–3¶ªõÈžAaÃ;ùTˆTD}DÊ¥lÄǰJ¨<?˜êÑRÛ£1êÐé$•8~¨ÄÌêk¬3¶ÓÑñ[п¦‡æ›¤“Þ£Ž12Âï=cöûQÆ”O[ÅXxÝ™Ï^È {=çÄ`—&j„wÔiP½Ú‰ìÇCšA[“)B µjW"Œ°þoT÷Hæ@AI¢ŠK\º›ç6Ðÿ"¹kÿÊò¾QçÑ}ºu¹´¹æäÖ‹¢Fí¿0d{Ù˜Û–S?1ž6s3c¡kü–2ÖÆ2ÆBŸÏXÀXH¤ß‰ªéw—M ˆ.?¸b¸þ­f©xup¦]zÝ÷©ÖëOøÞÿ¦¡­€=w5ØÕàYÉÓ…Oú‡ûgùg‘¤?éO©15Æ^ìÅ^P¡%|#|àEkÍÍÍ>=ëô¬Ó³" # # ½c½c½•ëÓHWÒ•týížîÜ~n?·_‘îÑ!¢CD\^\^\Þ¶ËÛ.o»Œ±‹±X…UX…-Ø‚-Â-øVü’÷BT J¡7 ;ÉobòOÏÊVT¼#Gôª§ €ÃÏÑy¤²_©ñTÚK<<¿©L*[ˆih˜+Tµ€ÀŠü—A¶[Ç>˜Y1 #—±¾œ íE&¥·Ï®•ßd#N!‡Ó®÷޽Ðçz›}uGLjÓ}®Sïz'm¢ô?¼=_ìH­oé¶Y=`â›æM¦üÐSZø‘K7Kßíq¡Qôœ”«™#ó[Àœ;Bo’5|<›Ì²ŒÀ/ˆ¨DäÂÍù {XÂP&˜ˆÞp§K‰3 %ˆ:6É;ñuYG9Ø8 hÉ4ÝgPG½Ðú´Õ¹ä5¿Qˆíï³ »˜o¶ioj¨uV/M{›j íÄér7ù#€®!™7ƒjóûËÅò”÷öŸÚ%ÇÞJY–wý^­g§ÞÏ¿Ò%¤øÍ„ŒºŸº–hä'•—ÝÄ}Ôø²r‚á0œ¸ºôiË|Лh‹Šú‰ŽTήZé{üáiÏÓíâê“ú¤ËÛ.—»\<&xLäÉÈS‘§ˆ-±%¶Œg<㿚Cøu|ÄG|TÔ¡¬BV!«x]ãu×5jŸª}ªö)×ñ®ã]ÇmÚ´OðO~S+tô-` Å«—êkÕת¯¥ÖRk©uq‡âÅÐ]Ð…«ÇÕãêÉSå©òTá ü´‡,°O/øuôÍØò°á[6qØÄWq~j}CÌCtu´š*"EÄï„Êø“¢ð‰¯ægLÊÉFB¹qtõתϒµâtѽÑ]?¹Ô¿{ûÎþ{4c+cl§×cì¡Åt#ÆBÕüÒóÞ]Û0éÒzlj+Z뺅Úß0;óÕ}Р¯¨éˆÛØeX·¯suqÃ@¬Ç`jCÎ=®=]D’m¤–ÿÜ¡šËÔPÕkùÈ¥W-6ZÚE»¾Í —Åã»xfõ¸h>ÁŒ±‡üê2ÒÀo(cag\b,ôš_c¡Sü3ÑÁ`ÙâÛNÓȽ[Ëú{lØ?ñ@«ƒfz«9½58««¦þòg¯YŽ}0õçzSŽ®§”tC 6`°r¯T!EmÔFm2Œ #Û‹‹‹¢Dˆ>°'hOО ÉÉÉLÁLÁxŒÇx¡ ~ÌasbGìˆ4¡ ÍAу¢E¿Xþbù‹å;Nï8½CéN(¡ä·õ2E4Ö^´í¥ðb¶lزaËÞ„¼ y²°ÓÂN ;AúÐçZq­¸VÂÍøãð@-˜b4•kü8»×pO“¯l9â”|ò’¥CÍ2wÌ-ä`7Ô赞£"Mz¡òþTw§©˜ Dc1‰"Cð´zFÕ•’…ÝÛ´T«uè¶¢måÃï]¶Š±Ðâ‡ÙÍ{«§ä0aé¿5×ÿZý‰ G×/lÞ ™Û¸"öœI6)¯@A5Åú¿E­~þ.>h;êLn“Ú"/®U%#ŒÆ?=HäÂ-¦M[ê§iœxÅk@}‡}f—yËböj0dOá¼ õ“Ÿ3öøÂ,ÆÂÓfÜa,4Ào8cëÍŒc,äàŒ¹¯o§OñHZºá¨GG®.ÜÐåÂàç^qõ.º-²»gòFÍ\%IêýÓó’§džÒ7ÈÒAÄ ï°K0m¿Zú\ÝÙ¢šëñ Ä»±»kdÖȬ‘y)úRô¥èÈÔÈÔÈÔ!‡rP‘“ºRWêú¥–8!>À¯†‚‚Ò t Ð™qµwµwµúòé˧/Ï?>ÿøücÃXÃXÃXÅ^"%R"ý•300s?Ï¤Ï ™23äeË—-_¶œ&™&™¦\˜N_Ò—ô¥ + ðÇáS= …#8H€U)>Í›pŒ­úaäÉŠ6‹Î ެèµôôðÍîF5v)Ç4‘¬%õ…ÊøK¢(# bÆÂGTkF¿2©É²€ŒõØdZmîfÏ5úñ/ïwóÓa,,~Æ}ƩŌ…iÏH¯jp·ûÔÇêr£‰®cSóÝ_•s”4ÀòôAJŒ¹BòåìæŸÿê׿†º¨,\Çl²›4Ær‡tÅ=²›¸âÜaøï °|oÖ[÷U‹ç.5ÖÏ_?´AÓ…Oöî}?dy‘oúÄ`&½—1í$ca£föe,,zÆtÆB‡úi0ïß±‡Ù3N&…Þ5Š¿1gý½^Xk6þyëÙ ƒ–›/ŸM¦ïîÂE…ÜêÌ]¥©$†¨á%6(wü:%u…Ϻ5¬a­‘ô¹×ç^Ÿ{QZQZQZW^ix¥¡ÕN«V;ãÄ´mF› ]í4Ã'ä y¢H›ÉÌdf²@Hé£uÖ=Z×¶OÛ>mû(fEh( ¥¡¿ò4‡q‡•íGW¤+Ò][sm͵5£7EoŠÞ4têЩC§*›ƒõ£~Â}øã0ƒ64(‡,ìQ<%&Ó¦ÅNÇ[£>*¶tØÂуŠ[ÕvÔðf×jý`üIqçNΓvBå üå©6Ocá÷gª0jæ7±°%3‚ í=£c!^~ËJß”Iá>?Þ|wéÉ­³{_ô,³KµÒ6{§—ó³gÕºd úŠÖ'}H0œ‚´ ªÌóM£“¢Ctè:€ÐHÔHÔHÜn¼Ýx»qÌǘ1Æ-Œ[GJH )Qê|/Æb,†*T¿\À/å ®à Ò‘ŽtÑBÑBÑÂU)«RV¥¼^÷zÝëu£ÎŒ:3Jé´ÆãÎqçŽ.¿ø,aCÄC¬ÚLµ™j³;w>™ðd“ =m{Úö´U6(KjI-…Û" ðmù%?(G’É22 ŒeŸ-ÚP’‹ ò‚•[³~ ˆ•Ò‘ê×ŇEŸÇ•@"D€|%T' ð×B±¼•» †²h¦Î¤¨Ò7dÉcCY?væºe˜~âÝëKJ¼åpÀÓØÙ6¾ùùíÞ»yš»ëM×çÕçˆ÷qCäžÝÑf®í Î×›j[>¾ß-:ÆÙsÓ‡€5Qܽ6Ѧi®%+Ë6T8¨ Ð;ÔŠôãðö,w…T¤ã •×öý–6Š!‡ú¨ ¸¢6 ±SÑN"5Èu²˜b—Ü–×bÍåÆò #i¬$A|Ê(IG_uk}ؾ2ÚÓ·W›æöS›ô®K O'èfªµÑŠÐº©"Ä!€|8ï p'‰!ÀìÉöµ"ݪ“Yª9 й—ž©k N\ö>¥_¸íÛ§¹¯ŠR+ƒ‹õJ#*Œ™ºôÉB9É$Qä ÿŽbRVÂêa6’‘b~³e0‰!AÀWß”¯¶|ù· (Ìgù,ƒ0ƒŠmŠmŠmí>´ûÐn§}Nûœöy[y[y[Ý˺—u/ë᥇—^"Ä€°2VÆÊ”#÷Š˜ ÿ;Š%¡‡¸CÜ!ÙrÙrÙò·+ß®|»’ßÉïäwÚÛÛ‹÷Š÷Š÷V…V…V…âžáà‡_p–Ú¨Ú¨BªÄ‰âDq¢–Ž–Ž–NÕÀªUóÆäɃh€l/ÛËö¢=Ú£½psþ0¸i$„ôT¤[»Ym4Ualí€1õŠÛ,X:h$ck›¾=¸½Ë¦ÚŠŒ…`ÆÓÇ{ľ² #{&¹ѰQ}&9X½Ñn6Õ ‰þ—¸­ ÿìÿå:f~ÔG-"#[‰ºÈ›ëJ58êN¬~zh%F£ku6Ù«}g´¸k¹ëæãú‹,;EÇ4?¸gÈ™~ð™ék‹Èõa,¬ßÆÂºû}bìñÿŒ=5ýZqÕ–“Œ^¨¶v{§Î ™W¥Wv#[«k¶£j„éë’ ºöß©pdÞKÄÁd1±Á9BðK0]¾˜éΔ„‚\ä"×$É$É$é\ñ¹âsÅQ£:FuÓoL¿1ý”ÙÒ…t!z¡z éC@@È"²ˆ,Rl°nmÝÚºõ•³WÎ^9Ö/¬_X?‡^½z)”gèX:–ŽýÅ'q#nDÙêŒ|||ƒu‚u‚uîôºÓëN/³`³`³`eÖHD"R¸-0ô8™N¢¨¯fúÉ`L~ù¢:CUuX¼cÈTÆVóG·V~Jß¹å¨7XÀD¨= øšMòÈjn ]H:UÏh`ª3@½ó’#ÍZؽyráÈCŒ…yÎŒbì‘å´Œ… öÛÄØÃ~ª)3 Æt˜Ò û Ó•‹µ¾2ÐI†§d±D &¢š(wC¸mN’–¸Gî“Þx@ Á@x@ã§—_ó¥qŽŽO§‘M¬ËV'k­ÿX¶çÉà'Å›oL”1ö@{zÆÂfb,¼ÇŒ‹Œ…ÞöëÃØ“~³jUu 6˜>.nçÑnÃÅçï­¸ß5}â€^Ƕµ,13ÖmÍͦ¯©ÆÏU›èw–6¢w¨=‡½X€>ÊE¥jËv9N‡ÓQ¤»øuñëâQQQt+üVø­pÇ.Ž]» ¡¹N®“ëJA“ä—R5Q7pãó«ì¾Ä}‰ûc½c½c½»Çuë=èAl"›È&À¿à–ö =HEÚâ½Å{‹÷ #F,¼¦rM嚊¤™¤™äóRãîèŽî ø¶üòe^Á^T‹;TM“©åß)]¹];M=Z’‹ V ý,µOÒ%¨„%a!Rp ­`û'YR& ðû ð;W„XCÊtÙ\ÆË}Xs¼£ýI4©Áê‹Mø´8ÿdɼ%+öã!~ì}Ñùyã.UÍÎY—NìÞ£qƒAõ¯Ö¹®ÿ 7ÙÀZ?PsØ¿úž¯Ç‹»u­ßát»•ojØx­ñËØT׬nyŸG _ÓÍÜQ*WL kÀæ²›r/Ù ùFö€yþ¿+M…–k‚ý.óqžƒ\2_î|צB/­ñázõÌ_ÕÙg5Z¯9@Æñã~#KÅTšCûr9ÿáëŒ,,¯t|ìŸñ1ì^Ÿè³)}žõJpÌÙüTýõªìÇá>ýÒ{j0È`Á ’FÒHZIÛ’¶%m™.ÓeºAB ‡\¯& ð­ùÅÆ4;¼ƒ=PYÕ]WœP9Svq±Òsbu dj™Ò§d2MÌÙ¶šÕdÝþiT7:¯ãby)ó`"<‚.Öà0–¡?WNÛ“á™c?5)´ßsö"žáÔ®ÛC_¥õ®Ùºn]ÿ±÷»Lr|ìÑÒÞ×°!ÒY;k_eé®·£#›Ü›ð¸uÜ¿sÌå¯î*º¾4ÅîS÷Š©2ð—q¢!`*7î¬Ý¢‘žƒYZç¦MÛœix½Nº~ªù;ÃãǵCµÆª’&´cùü€>gyoªV¸¿àV™Aê€ìÓ…;#[¾yœsåj¿0»¤ a“b¦‡r/¸QvªÂ¯R.#žêÁƒ{I“H SÁ ÜäÍùµÌ}0'°‘(æ§óÉ,•ð„šUoåüŠQóíØŽíQ¡^¡^¡¾·ÉÞ&{›¸luÙê²µqÆ5×èT«S­Nµ®®¹ºæêI"I$sgîÌ]9ú.‚ÿ{mç"¹(E)J#?F~ŒüØgsŸÍ}6Û]±»bwEœ+ÎçVTT(D9•U!zõê$þÄŸøûûûòÉ|2ŸŒc8†cÂë–€À÷à—‚¯bwñ@#pE“*¼«’rýKWX È°¦æ^,’½åkéÕTùQ¢Ê¥’þ„Èx¶Z †»€€À*P2ð…%8-—ó‹Ø)’Hæ¡‚^#®deáø’Þ5à žá€Í•ÅÏõo¯V/iTAçGÛ¶Ú®ojŒä·eİ‘^gµŒÅ†ÅÔŸ4ôư&=Vï5 [S˜úîJF—OL\G$)m’`ùTõdIÙñºÇ cµZüe>ý©%é ór @Õ2Þ5q\Zfaˆ¯î¼?ðÌùí¶OÚbb]³ªBÕcê¼ûì¾òôÿ}«%\oêGzb–`)ŸÆÆ1=y'¾9sD Þ#-u¨ù¿.Šï+…R–ÇòXmOÛÓöqoãÞÆ½=›|6ùlòèâÑÅ£‹vØi`§°þaýÃúçõËë—×Ü'÷É}ÖŠµbB Î_RÛéHGºâUçå»—ï^¾+lSئ°Á2ƒeËìÚ´;Kci,%$ƒd0ÂûÅ-Ó¤I“T›jSí\›\›\ù<ù<ùÄGa”¯ëµ®×º^1ÏbžÅ<ó]ç»Îw²¹â3˜ÁL¸ß–_>nQ 9丄Oã*!/ZZyKž"~s ‘ÆžŠæS =nÒ^«H½‹ò¨-èvBu übî%Õ–·²·0Åx~ö ÷N\.9$~ÈãZ“‰6¯Ÿ¿µ{ÙñÕÑWG_i??÷lxüØW_íÔáEƒÂYMNÉNê;ðNç™d‹ËK±-yKŽIèƒSpcRìÇcÞ”Ênðelcƒ•8§¼’o[T@áîòÏñ©HEªb¤vÏê=«÷¬þ¨òQ壊û÷îºävÉí’ËRX K¡FÔˆ)1™ÈÿLŠPÄŽ³ãì¸Â€Nï“Þ'½O–]–]–]­VµZÕjeUfUfU¦˜¡›éfºù¿”©p¤QŒ£¿Å[¼ÕH×H×Hç¸. çiÎÓœÏk>îàî Å(n…€À Q'Ú›(W OéÓܽþÆV5åS齨tˆ¶ÜcéëaQ½-œë´Qä¡Î¤ *…ÊøÆTÛú?n§uÒT:w°žt†ÊÅ%ÇU.ÒÅôU¬A-ÜE-¡R'Æw?ôC?@H€bó˜¢1EcŠžŽ:þéø@ï@ï@o333üˆñ#¹En‘[Õ]n~®nICÒ4TlК¯5_kþ¡ã‡Ž:Þ¾¢}Eû X–Ün ·æ¿”éw¸+âé:…N9q4âhÄ‹m/¶½Øææçæçæ§ìekéZºVpjøÁ§êd·"=è–Û{û˼çr×ÎU–‹g ñb»–û/÷¸i@}¥j1=CæG¡Þ¾ êÿZG É@2ªÒ~´yF½i[RE{Ò¾d"u$ÒúóAÄ[ñïóŸÕR_þòàzÁ­¨ZA1GI òU~ß Ñ&ÚD‰HD¢š·š·š÷aßþ‡}ŸÝzvëÙ­9ïæ¼›óN™³#éH:*B…GµÀÏ¡èPêOý–v^Úyiç×®¯]_»NÖ›¬7YOY« ç–ÿ³V1CàókÀÙgoœ½18bpÄàzëê­«§t•ùu1Y¾#œ”\#CéŽçnY/*«»øÅÐL™æâCv3¶"hDÚ‚ƒín6œ¤ÌoI‚Ho¡ÞþþedKHaKƒ` Þt”ÿT!üÿ#º¤4`@¼` ÄÊèÐ_—/ðK©¾\µ éB”–-6¶ØØbc˜{˜{˜û}¿û~÷ýi4Òh¤Œ8KJH )ùrÏ„‘Ýÿ£q4N1_1®Û¸nãºE÷ˆîÝcSÖ¦¬MY’’’Ï2×p ×~¶ù?â§õ´m9ÚrôUr•\%ÁÖÁÖÁÖµ­k[×¶Vž±­E…™+ïÓ£Ýa¬/Nà&D ¹7K›•ϯ(Ë7ÃG²Ì@iK’ º¨-—žV0î¨-x% ü!(<Ó € xÇÄ;²0D8|•Ó–¶†- i9PPPv‹Ýb·0ã0îeÆËŒ—ŞŞŞuVÔYQg…F®F®F.T 2šŒ&£¶´5Xƒ5 YO---éFéFéÆ’Ô’Ô’ÔŠŒŠŒ ¥FòŒߥ[ÿ*XOv˜]ƒ ,§²ôjyQ•¹ÈE¤œìÀRHioòƤ†ê6I}¨Bšdiÿh c?š=}ª*|Äf|ƒ¼Ú@­…:´1 Ú¤Kš!é"Zä#Ríùƒ…jOÚÛü*íÙy” W Mô€&ÊÀaì÷W¡Py_€X€d$#™7æyã㽎÷:Þëû;÷wînÝܺ¹uëdÚÉ´“)ÓeºL—t"H'ÔG}ÔÆÝÿ ®ä«tè12˜Ô06Z³%G¸(C ŠÀ!ï iµÉe?#Ï™žCŸüý ÿÛ\…Ù­Ž¢²[|ëüV|kµ“﨔ÒI祔N!íè!E0GÌaì÷7ÀÇ¿ãßñïhkÚš¶NŠIŠIŠ9µåÔ–S[d‹e‹e‹}—ù.ó]f9Ür¸åp~)¿”_JdDFdÊqwa^÷§(¤+Q‰Êããã$Ç$Ç$Gî÷‰ûäQåQåQs˜Ã\)Óù3ƒä 9¨HëlÓÙ¦³MíˆÚµ#y§óNç.9Sr¦äŒ2ëflÆf¡â¾¿v|ÂûH:â–•õ® ©:[r¡*Df‚‰¤%QØ v@ÓR:A’ƒId0 ‘à›²K8Œáè.Tº€€ÀŸ)’X’`AšÂ‚ßX•Åo¬˜¼òhÅ䲡ãýˆr³ë äf«äx¤’GœUxâŒR j 5¡ % ÁAÂKx /Q,ˆ<›s6çl΋±/ƾkþÔü©ùÓÑ#G=R¡þŽõXõ° l„q÷Ã{¼Ç{ä#ù¬ˆ±¢(½(½(=±“ØIìTïP½Cõ)–#™Èü7u¨xš‰™˜©Ø é¯é¯é/].].]^0¶`lÁØÒf¥ÍJ›)æÕÙav˜*^@àÏ„Bjê!2qÓá§™Úe2«\ž;¼”U­h2<á¹tR@x­jÃUû)š‚x\*O@@à/Ú—±[K¬…%ÔE×¾Ö0­®“-Z[¢•øìÑ+‚9Dø¬?˜-˜Ã˜¨Àø‹ §<ƒÀ¿¯ù/£æ¤’BEºáކ;îxtæÑ™GgÚ=´{h×*½Uz«tÅ^Ú“ö¤=Z‚€Â§ éBºÆ0†±»¥»¥»åséséséYû³ögíuúêôÕé $ qˆûi1"±H,+¼áGŽ9v䨄~ ýú͉Ÿ?'^y*+jE­00@¨x?ÈU$á˜bÃEùЮÞ/[á0¢cË¢†ÝJÐõ ï{Áâ¸~-P"ªJê£D¨<¿ÿ2U¨ yZü~’Oü%ïÏÉE6æÚ 1Ô€j£òÂøð¿G1î»[±•Þ¦·ém‘†HC¤1§ÇœszÄèÆèÆèZ~hù¡å:Kt–è,¡*T…ª‰d"™¨4@ªW§5£Ê8¦¶b[±­ø6¹Mn“[n}¸õÁm“Û&·MЇ>ô•®8p_"$hA Z\>—Ïå+6Ln:¹éä¦)©)©)©U'ªNTUäÕÕÕTö¾c_þ•Ç)–rqÿšPËv.>\n   \ÙsæÇži “ëè>Tå¥ (Gd¸€!ÕT“þüükáj9€r¤2 ¤‚ÃYp°Ä{XBŒƒ¡ L9NÏ ƒôèÉš<=Iö«= û.¿‹p”rÝQŠZ„¢8˜‚ûbô £ÄÿBá³>S0…E³h-+–ËŠ <ø¶ÛÛno»Õ÷­ï[ß·xÿðþá|9_Ηã)žâ©ÂŸ[0¿jÆšL“i*Ìë¬%YK²–¼óvÎÛ9ÆÞÆÞÆÞ¶õlëÙÖCrCN“Óä´ÒmIÁ\ÌÅ\ÞŠ·â­`˜èÑ£7¦¢UE«ŠVEoŠÞ½A! QÈX P* |¾ÙXOfIqßòê£ÌÒXkվ⻜«æKÉ‘Rñ¬@[8 •. ð†A9R!G Ì‚*¤£J¹—B¦¤LaC•%¼T–¨_;±Eýš¤›÷I7@~À;Æãä4r˜!fø,+©.ð_PÈDú3æO¢H‰R8l[tlѱE2s™¹Ì¼glÏØž±¶1¶1¶1,œ…³pÒ™t&•æ£àõ®h¶*L…©Ðûô>½_<¿x~ñüxq¼8^¬æªæªæjsÀæ€ÍÌÃ<Ìãmy[Þc0c”ÏÄLÌdy,åIR$)’½Íz›õ6—Í,›Y6³È¬È¬H9–¯0ñW%ïÇ7{œ}š_2³,€;jËGðÁÌLc†x è¥viOq e¦ƒ¤3<„JøÛ"ÇÈQÊ£©èŽÔÒÑgo•Ž.·Z9¸ÜJrmÄÉ5Õñ^©Ž]¬³@tQ)B“îÈ€.€¡DÍý‚B&R $,¥³t""""º’u%ëJVx¯ð^á½L4M4M4ǺuëNf“Ùd6¬a kÄ#ñ‚Ê»’çxŽçdÙGö¡-Ú¢m²i²i²iÞ²¼eyËìÛ¶?¬·Do‰ÞV“Õd5‰Ñ#Ÿãª*cI Du¸êpÕáiii•W+¯V^-í[Ú·´¯"';À°‚ô³€À÷ãÛ¸?.¬Wªƒ0.«gÌ¢!¢\oâ2QeçŸ gÔÞÃþÆ؉T"•˜Išc¦lý“î²õÅ}—0Ãà{ÌPeÍöl•5ªífïSmGê¾§aŠÛ0…ÁB¨Æ¯P¸¾tEWt%GÈr¤ªiUÓª¦û5ökì×ÈÑÎÑÎÑn¹²åÊ–+½J½J½JÙV¶•m¥óè<::ÐŽ0Þœ7çÍqwp'nrÜä¸Éىىى¶¶¶¦Z¦Z¦ZЬ$‘$’D届Ŧ•¨D¥jªjªjªæ Íš/ÊõÊõÊõ M M M”9çaæ V@à{våßB5<ë~axñ‘Ψ'_ͤl<>Š élñ[ªÌtà$¼‡ üQ¸»ˆA G9äÐfÚ0¡>0Aw8£{ù²£ãË—•µð­_Ö‚ÅT.g1\¬®'‹wÐÇ;ÔÂmÔBõç+]p üÇ=2‘+øü …ÚÌóSÏO=?u‰^¢—¨XO¬'Öª>T}¨ºÎ,Y:³>Ù¤ˆ‘"ÁyCŒé(;ÊŽ*Fßï%ÞK¼—7'oNÞmmmmmm3#3#3#…p$®à ®@Ѐ¼à¥(Fê!õzhøjøjøVÜ®¸]q»pnáܹŠÅ¬l1[Ì ?)$ 8®HÛìÔ[¢™ÇÜ—¡]rr¡ó dÆ~¸5ö˜_J³ÞŽ3 5¨‹Óºd#L  ¡öþ!(¤!E  (šÓ)hþoò)ôã?£ú%¥rhÀN‡tˆ ûEtòŸ¹¤5yÈÃb,Æbmmí€Ó§NGµ‹jÕnú‡é¦PVê2…LQõ ýsPjïÖ_s|ÍñggŸ}vvºþtýéúð«ö©‡z¨G[Ò–´¥"¿} ûö-Ù<²ydsqÊÅ)§˜š˜š˜*G܉3q&ÎB |?~Ûˆ{ r>Ë;–ù:þjÁÈÊÃ2OÑH­y"¿¬f¼®ŠV)ÊQŠy[~»Žžh;¡êþ!ðø¼¤•A ø­x„úd/ꃣŸÀ`¨Ãg•÷²/ÇCÅxÊoÂSä£ò!£IÁ†hÀŸÇø¥ÿ^¡£ ]èbCl>|*øTpÈýû!wYYY“Î~ý:û988(Ýf&ÓÉt2ªP…ªôè»Bä1ÉHFS4EÓç>Ï}žûȞ˞˞×/ª_T¿ˆ\#×È5lÄFlT¨Ð z@éò*•J¥R©Æ%K—J[•¶*mõÉæ“Í'8Ãά%kÉZ ]^@àûñÛ ÷WÈÿl¸WyðúìiáÁJS™3׆ŽC%ÀGòŒÇiøªÅ€‘S$‡ÍÀ|Ü‚'lPC¨z ¥_œcØhÄ€ãÝÁA½jÂ…<Oš OÅŸ’;ŸIîhìÝüøðãR"%Rº±n¬1 ÄàÝ«‹<>Æc<ŽlÙ<²yÕµªkU×jøÔð©áSãtÓ5N+Mü“8‰“ʵ•y*óTæIÎHÎHΔ·(oQÞ¢*¤*¤*„ð„'<¶a¶ ]@àûñÛïQÈBž¢ŒÊþ²—|Pn³²í•U\"¹B[ ‚oÌéìSU—šJæ‹&q‘Dp†) …ª@%RP ²ªé^3Ïøñ RxBZex«Y•¡|bêbùDU¯&ª^ÒGãIÑ9’étòþxl!P ÿÂÊY9+Ç Â ù ù ùŒƒåË–gÎ<œy¸ÙófÏ›=÷‰ò‰ò‰bíX;ÖD Ró䟬ò~ ×pMaĨó¡Î‡:é¹é¹é¹ZZZ./\^¸¼€;ÜáN]©+ueMYSÖTq¨Q{£öFíùD>‘O,++ShÔ(œj„- ð½ùM†;{Žl䃇\E°¼”¯Ê_~»rÐ[ÄRžñ; §¨ûKǪÜäÞrgÁAi ü³Ç<þ3ùXƒ|™«_QÂê—Un4.«¬(7½¢˜>°jI¨m ˜¥¶U²¤S ÉøÑÛðˆ)< ý›×O5ã›é3}¦O†‘adXÜÛ¸·qoÏ»w;ïFkÒš´æ°¦ÃškjàeàeàÅZ°¬^á^)Gîÿ‘n3l5[ÍV+\eŠ-,Zøâü‹ó/Îk¦h¦h¦ÔîX»c펊ñxåE'tB'űºáºáºá¼ïÅ{7)nRÜD¡QƒR”¢TX, ð½ùm#îw‘€t¨ByyŒÌEÖ ;¼Ø·l!d\/z“ÙñÃX¢V_©¥8NÜ–;D#”tua-¡êþ@^£ê P‡7n²E)d‹Ê2g·+ˬ4_íPi.’(ÉÅé-†ˆÓ¡Âl QýÉX²".+÷73ªÆ·Hp‡pˆ%GÉÑ}Oô=Ñ7îcÜǸ–ö–ö–ö#†Ž:b(¹L.“Ë4’FÒH´C;´û‡*ŽïÅ^ì¥SéT:•wãÝx·„â„â„bIII‡Z6µljÙÐTšJSy-^‹×bE¬ˆ)‚aé]Ô»¨w‘ïÆwã»,BòEu)§…wµ?üáÏ,™%³”¥ÈRd)ûîï¾ë0ס®CÝNºr;Õð‡iÓÃN 81€Œ"ãÉxö‘e³ìPKb``ìöû4#ÍH³444w:ïtÞé8¥9¥9¥YZZ>À<cŒ1F“hMҳѳѳá›ñÍøfÙ%Ù%Ù%BÇø=ùS„lb®H—˜ÊùãГ'3úÜ%SPÀâeÒT{ÆG¡º¾ ò/Fu.N!÷‹Éþy? žÐp 9„‘•gÃ'«×|®0å³geÏÊž¥,MX–* ð»ð-Fóñ‰Šd‘¤òˆl'K—™ÉWQw’íÐB>˜ÍÕÚ­%T·€€€ÀïD>Ô‘`-À?Δó‹ ÚT¼ˆ=Ž ì±ôàŽÙÒƒª›æg«n" *ÉEñ(‚=!Ç?d´ÝF0R.‡q‡Í،͸‹»¸Kš&¤ ¹AnÔ„šPº“î¤;ñPÙT6•Må‡ðCø!ò=ò=ò=Uë«ÖW­W|çAР!Iž]+ºZñZêµtïûðšá5Cneºdº,;sìÚ±kòù}ù}Ö dÉ6²l£ªT•ªcbLŒ±k°ÍÑÍ•ËaÿêpàÀñGù£üQd"™¯Þ¿zÿê}Qã¢ÆEíÚ5´k¨1\c¸Æp¨Bªâ“â“â“êÝÕ»«w—¯¯¯ÈÍÏÍÏÍW–V]__@@à»ñ TlÙv±X= (²2WTž" ”g‹[‘6ä9^ÂØh•F/Õ{è‚AŸCŠ|GxpàÄÈD!2ÑJ®…V娇rpn'Ã87ñ­9‘â[š?ÍÓü¡TcÍR}YÎ-UYìé9Ø#žï…øop%ŠkîS •P Ú  ÚðùüFŒÇxŒWjÃÿULX9ä³Ú¬6«­¸;¯Õ^«½V+s.s.s6jnÔܨ¹™­™­™mÞ¡¼Cy‡ôFëÖ-¾'¾'¾Wú©ôSé§*·*·*7eiÈ@†Ðí¾7ßÂpï‹„aäï*­šTìS)“7 Òq\%€Éˆ7¢•£&]øýPøªz `$°#?ÂNþ´D**o»ò¶²éõ—˦#GTÇð̼òX…ó mpÁb¨!šJI€}IË ƒ2ÈÐÑ‘¸wâ®4Ðß“÷ä=j jÈÉÉ1üë£ä8Žã¸"ɵæZs­%Û$Û$ÛÔÌÔÌÔÌjUÖª¬UiµÅj‹Õ–š|M¾&oÖÙ¬³Yg…k¶Þ"½Ez‹ôëê×Õ¯«m m m ÕJ«•V+^‹Ù1»"•œ»9w«’5}5}Ëu«zVõD{¾”/Í©KrH޹ÌTÏToå¦åÎËÓwdëgë§L~”üèõ„×^OMMM~³êͪ7«Ê[•·*o¥xQR5Q“3ä 9C^—×åu•â‰ùÈG>*Q‰Ê¯â•þÙ˜Žé˜®PæÉtÏtÏtÏÚ“µ'kOÝÙug×íbåbåbõ’{ɽäô·éoÓß&,,\¸»pwány±¼X^¬,'©H:€À÷æ[ÄkŒ]ì¤AãSziqùÄBßòý•ã ϪŒWK0³L÷h¨6@¡Â~W2ð¨ÀTà9;„ç°Ã Øá—‹;2Ä´ª6@,ð†5ÀåßbPÈQ9äx9*”ÿ›3µ@34C6>â#NáN1Åç'ÒÞ´.­KëyyyëÒ¤;HÛJÛJÛʨببØZÝZÝZÝü¸ùqóã©©©zçõÎëWUUUUU“\‘\‘\‘H ¤d™@&FFF}¬ñ±ÆÇï²Þe½Ëú0ûÃì³súåŽË—”úfÙ›ewOµ›j×ñ¸Ùy³óùã@U 2<*´+´ã‹ãìâìë»ø¸øØYÔ±¨cÑ|GóÍw ¼;ðîÀ»ïÄïÄïÄá5Ãk†×ŒéÓ?¦zZzZzZrçäÎÉ•–ùG|ÄçÕ\1ˆA yBž'ˆ@"˜:SgêØˆØøÕ,ÄK.r‘«pOâòùƒ± ± ± NæNæNæNnNnNnŠ™½Ûz·õn‹ʼnâÄ¢§EO‹žV-¬ZXµPùíXK€t¹gïÉ·qŸÀÎâÖÁò‚«eË*¼JZUr²–¨¤£ÈMHX{®[)ý$Î`?åèƒb!‹¬A@@@à÷¡L†é5œðrhÀŒÁ ïÐïPÁ^¢€: , A%^¡³8CLƒ·51­rfü›ò"!ФÔ[ê%õª=®öøÚãk§æ3s3s3sýûú÷õïß5¾k|׬žY=³z†é†é†é“ &LR±U±U±­ZPµ jA•Q•Q•QeóÊæ•ÍåëåëåëK6•l*Ù”u7ënÖÝÌK™—2/%E%E%E¥ÖN­ZûS§„O y§òNåÊm’Û$·IîéÜÓ¹§¡øžÝIjŸÔ>ЬÞõ~(m/{.{.•ˆœEÎY ³,²,’Ô£{D÷¨sË~‘ý"»‹uZ×iÝêx«ã­Ž[ß°¾a}£ŽfÍ:š.]]ººt•yɼd^)/R^¤¼ˆÿ*þÕ‹˜1/bÂËÂË¡%K¦XÞZý'ŽHˆ„Hèz†žacØ6†wå]yW…ÿfÊ'"‰4›fÓlžñŒgO|Ÿø>ñ´bЊA+jšÔ4©i‚"¡Hs„æÍ¢•¢•¢•E“‹&M–í•í•íU.NB’„N& ð½ùkÀ¯c |ÑñˆÅ32Œ¾}´nÔŸfç,/™Ìã/òswÏ8•ó¸qÉîøKûÈ:<Àzæ}tn€€€€À©öÿ¿ÌÆÆä<#›½@.§Y³ˆîÓ鹬DÖ¡òމOTU`wU¼dïù¾Rü‚SÉ›û·Ý>&îVr®äœ~=ãGÆ4BÔk©×Ò¨Ô¨Ô¨Ô¤1HcêYÕ³ªgåÝåÝåÝ 6l.ØœïžïžïžÛ(·Qn£¼íyÛó¶çôÎéÓ;£OFŸŒ>iUiUiUñgâÏÄŸùü1øcp¥}¥}¥}å”Ê)•Sä÷ä÷ä÷~ö[å 9Ün47šug]YWÞ‹Æûß«Eå½Ê{•÷&f&f&f´i7Òv&ÎÄ™X?·~nýÜjºÕt«ézWô®è])ºRt¥èÊÇóÏ<Ÿi•i•i]'ºNtÇÖ­['9%9%9} 臯!HgÒ™t&wÈr‡©15¦ÆÖ±ul.á.á*®âêïã1OдÏÇóñ6Á6Á6Á{›ìm²·‰b–`ôÊÑ+G¯lÖ0¬aØ<ù<ù?}~ºì¡ì¡ì!ŽàŽ`†`ˆÐ¡þÜè@*"KªK–*6\o=øiûÇŒ­Þ3ê8cË» Ÿö*|ÊžºŠ½¤vcØ©Hjô¯££åñš1ùÐXsÆ{>‡1Æbtc,º8©mRÛè—‘“"'E Œ6Œ6¼«zWõ®ê±€cÇÖ/\¿pý©S¦:ô[Üoq¿ÅR;¤vHm°­Á¶Ûôòôòôò~é¥CbH é}zŸÞ§é4¦S{jOíÉ 2ƒÌÀlÀhÊü´=Jre¢Í¢ÍÜ:Ñ$Ñ$î¥h³h3MâÖpkÈl2ŠŒâ48N‡Ì#óȼŸ;¯¡£¡£¡£w®w®wî¸äqÉã’wiíÒÚ¥õ@ýúõèìèìèì(Û(Û(Û(Å¢Xà´ÀiÓf­›µnÖº®Q]£ºFÕm]·uÝÖ?ûÅÌasŽã8Ž£†Ôb%Vb¥rou)ÌoéCú¥3«®¶®¶®ö:èðìijÏNtèÛ¡o‡¾ƒ6 Ú4hSÜǸqç{Í÷šï…]Ø…]p„#1ó1_è.ß›oáãž2”ðG.Þ@+?¨òƒ|0€uè‰"Ö’¹¨ßçÆh4RÑ–Ô*Ž(W©Žë˜h†µ8 Ü?bÄ29b †P­l”TUY«´Kþâ¢gÈV3VÝ]e+/•—©Frœêµº—ç\žw­åµ–)ƒÓåéòâµEóŠæß/¾_|¿8½8½8½2®2®2K«}LÆdL& $$þ¤?éÏŽ±cìÎâ,Î*¤Y bAxƒ7xƒ8Ä!Ž…³pκ²®¬+ P€eiñˆÿwz8|:?˜ ÕjÞ(³¾ú¾DÎäLÎp7p?âGüˆÁŒÁä9@(Ôo>†~ ý¤¤¤§8TýºúuõëÆîÆîÆîÛ4nÓ¸‡‡‡eWË®–] ¼ ¼ ¼F¶Ùbd‹Š'O*ž¤#éHpOpOp“ù&óMfp\p\p\J¿”~)ýJ‚J‚J‚ªûÍ“=dÙCÛÐ6´ ïÄ;ñN,˜³`…£ *PŠß26Ïœ˜s"õH=R/_;_;_;Å(Å(ŨõÜÖs[Ï­u¤Ö‘ZG¤ÑÒhi´¸™¸™¸YNlNlN¬B“,!KÈ…Ö»Ðiþ î2©$Ëv6è~¢ÅSƯr™ÉÇ,õ›5wvâ€ëÖцítá‘ Ù‰<<*O@@@àOÍ(,ÇERe¦úyµq9Œ1ö.ˆ1ÆÞ\`Œ±KÆkÒØ{ª÷Ôÿ\µ Ô‚+áJ¸®ׂkAÓÁt0q!.İ€…2ëŸ' âJRŠ MHÒ„ëËõåúÒ«ô*½ús‡j¶Öl­ÙÚóµçkÏ×þñþñþñ{oí½µ÷ÖýK÷/Ý¿w)îRÜ¥(×(×(ׇÁƒŸ3:gtÎÈ?Ð?Ð?ÐÓÙÓÙÓÙºƒuë?{m÷p÷ȲƒìPÎ3Ã1ûuuÈ=âqÊßeß$ß$ߤ¸»qwã¹úæê›ûl쳱ϛ1oƼ3`Á€(ôݹZ\-®La S¡»üeàz‘h2F‘^©âÞ¸+_é<ÒC~qÉÓ¡^yÃæŸt§á Z+L?‚‚´5éJt„zøSc ;Ø)’ô8וëÚîY_Q_‘·÷€žzvÐï·«ß®.Ò=ô406)5)%cÈ82Ž~àêruI "A¤=iOÚ+GÊ»¡Û—ÕMÝX›Õc©6B#4"jD¨‘{ä¹G̈1CmÔFퟪ§§ç\Û¹¶síÝvØ}Ó¨M£6º™x3ñfbøá?†ÿ“““ÿRòRòRriÆ¥—f¬Ñ[£·Fo¤öHí‘ÚŽ›7;n&ÉGò³ñȹ;ÜîmM[ÓÖð†7¼?ïø7 ªч´ å‘ì‘ì‘|ßó¾ç}Ï€µkÖž³8gqÎâEì‹Ø±ü:ùuòSùŠ{Ž:Š€À_í9G¶“fŠô4Ï–7]Z2¶üÕˆ²Kê )M\|sè3ŸwË­Û+ó3r… êM@@@àoÅß#ªèoAЀ>ô¡¯ÛDkÒš´&gÏÙsö?Í®Ði1Úc´Çhw¦w¦wæâ÷‹ß/~Ôó¨çQÏû¯ï¿¾ÿ:Á;Á;ÁûyÀó€ç·‡Ür{È‘¹Gæ™ëÇùq~\“½Mö6ÙkœjœjœJÚ6¤Mõò‰ ±!6T“jRMbM¬‰5ÎáÎÁ¾ðUŒš+³*\ƒÚ¡کŪŪż xðê᪇«®ºívÛí¶[ؾ°}aûZ¿ký®õ;ÅA\K®%×ò/ü& ð—BôÍJÚ‚ÐÏ>…9ã˼*<Ø8¶œ¥³qìîK¬¸w´½Nˆ Ü"ÛЮ€£Âmø“R]¦Ðpàz‰ìEöp„Žø€0‚‘¼†üŽüÄ,Œ…A:Ð" Ñ?âjŸuX‡u<Ïó<3˜ÁŒ4&Ic2šŒ&£™=³gö²f²f²fðTí£¶Lm™Ú²I ’$Õ)¯S^§ÜÙÕÙÕÙÕu¼ëx×ñN'N:të8Öq¬oß&¾MR}R}R}b.Ä\ˆ¹ðÌï™ß3¿q‚8Aüb׋]/v)…)‹P„"ôB/ôRÞÞ8Gã0 Ó07åMySbN̉y©c©c©cr~r~r~{5îÕ¸'k+k+k[Ѱ¢aEòü²ü2åe,€ÀÆ0º‹€À÷曽“·D¯XmV„ºjÙ{Y.¹ZÒ~«Y,›]dÅT2Uòd²ãµñS¶¿ ¹úB,jN»‘DzGüEÖH¸ ÿªÇ0±‡=ìÑÝÑ0È1rŒ#a$Œ„ñøGüW+ÁT¦ªLU™j¼Æxñ§áNÆ·Ü×r_Ë}6Ûl¶Ùl3V7V7V×sÖsÖs–;ÊåŽÅÅÅIW’®$]I(N(N(V,}»çíž·{Š¥ÅÒbéO/P%ŠEÉuäÚríqGÇw|pÒà´ÁiU%U¥U¥e†eeþ¹þ¹þ¹/ν8õâL'ÑIü&~¿I¸½ßÿò­ ê…`üÈΡ5Æ:ûš70, _7òªÏn™±¿ê;iÇo¬}ºyåà–Q±¢º–äÊšñ³™žp¾šßx…WxEËi9-'$Ê—É—É—ýô ¾}5ú6®Ù¸fãšuSë¦ÖMuÔsÔsÔ«Ý®v»ÚíL‡›7^Þ§¼OyŸRÓRÓRÓO]?uýÔ5âUÄ«ˆWá¥á¥á¥ésÓç¦Ï}«úVõ­*ŸÍgóÙŠ’G4k¶iÓ¦Ù›fW-®Z\µ8Ï'Ï'ÏgzâôwÓß%Ñ$Ó$S…_ÄñE øÞ|3WÖëpç 9èSïüx™ ß…¿CÇp´+ ¸pzHºÊ8QgÄŸÈ#ô îf S€¯"§:ÀŠh¦0 LŽt¤“xOâ±;°ƒqŒc\ñ™â3Ågnã_ O O OË0Ë0Ë0û*û*û*w{w{wû 2d½2zeôªß¢~‹ú-P4 h@QêÙÔ³©g_Oz=éõ¤·åoËß–‡œ  HÙ’²5ekîŒÜ•¹+õ§êÏÕŸ[¢VbZbZÈ 5 5—É&±IlVc5V 7P@à{óí–’ ‡jã žâ­d>÷íÝypTU¾ðï¹··4ÝÙY‚$‘€D ›‚"qMAFV– 0aMÁ0¢ŒŒ2ãÃ2 ‚;£€Š "È$ì„,„@ötßî{ïytû*<*Ö«÷ÒL1õýüuªëœî®ó­îúÕ©sΧl¸Ð}ú¸!£œpöµ…[&†¥Ùίy°Çé»Óßù¨õÞKj’ŽóFwy±ûp„aý¯•Žg"™J¶’­d »° »±ÝØnÜpI¥²DY¢,‰ðGø#üm'¶Øvbª'Õ“êI.L.L.L—8.q\\J\J\жN+×ʯô-è[зr­GÇõî–Ð-A}βŲÅÑŸëÏÕ£«VV­òíèÿ§ —/\÷ŠbüTfÈ †Ct;HGû_® ³.V‡)»sžºcÐÓÆ¹?¶O; åŸÛlëÐÏõŠÏ‹#¢«à^D&'ˆˆèÿ¨æ..¸àÉ"Y$+ó”yÊ<%R‰T"kê<ë<ë<›š”š”š”>+}Vú¬¥«–V-­ú2oWÞ®¼#çlÍÙzh£”R~¿CJ)¿Ÿ$¥”§>•RÊøe͵æZð+LÀDty­¸Vi&.ˆí_Ž;Ù¿§,|qNúDzò%môà½%ÛúµvÙ[ìÕ_ºxÙÿý¨"""úÿ«YÊk5ã1Ÿãs|.†ˆ!bˆÒCé¡ô¸y¨ó=§á4âËâ—Ç/Ú7mxÚðɾ9¾9²´-á@ï.ï®#ÉÚ%íR“Ôf}šõ |–!>Ÿpâ‰n½ŒÄàFO¬Åùm‡ÒÎyXò°@Oñ’ÈùœZ¢Ðÿ|ëJ4øðœØŒÑèxeeU‚w åªpË/õûŒ×£Ö8æÙ ×LÛqËÈ"Žã91S¤"E‚T‰ˆˆn :ô`»)š¢iðl Æ‹…b!º qe}®Íº6+½þàŒÁF&a 0Ô,Çò¢5yûò‚VÊJ¹UnåÔÝ>R‡XaÁ`´€ ðJï>è´VÊ…ÝÆLóÿ˜õÝ3ËŠßœûÛ‘gSîhô˜‰AÊ+bŒˆåäýºº[q/…J°“àÆFLÉŸ\vµê0 òÄoŒir„Üñ®íYëJg'ëu.î° hÌPÌ0ˆˆˆþÍlpÀ¼ðbÞÀjcËNËNœ†àQT´€v#_L 0cnED·ì°)ÇÄ(†vm3£ÙHi,Ú–SyÿÜgG ’rQlFD·ˆ¦+ãšú¨ãÄ^ñ$'ˆˆˆˆè×)uöN•Ðàk1V ¼P”_ùjµ2äâ¹ÇqÅ5<9+¬¥½kpÔûøဵ×þ‰ˆˆˆˆþã(uü~â§_6½xû-Í©ˆÒß6f©ñb°8Ž&ÌMþ5Õ= d…#ç#N8Qmê¸p—Kp—íÊçüw¹µÙúqË;ʘ[¤/¶{½aáPadO,Á»pÃ;à """"ªM]¯¸/F¶<hV6ôÕÕ’ñÚ`ÿk–Êeñ ürŠü®Ñ'î¢zMa@‡”1X‰½ˆ€6†ADDDDT›º^qÇq1Ðö|£0NVN×Vú7‹¡â]‘«9I^i¼Â=#l¦!%x¥ˆbáNDDDDôkêzÅý¹G` µr§6ů–Ä{*´T(±Êßð•<$›Gg…½j«PWžTH¸`çáT""""¢ÚÕõŠûß±G¡Ã€QõßrÿÏeyÞ·|#áVоºR£IDATÄ|Ó.sdëØëŽ—l;Ôj‘*¾‡ ÀÍ[eˆˆˆˆˆ~M]¯¸ÏÅÇØ«¼-â°ÅÔ ñÁµuUÃ<ýõwJ¡ùžÔÐ7b=J]®tgÄ‚à¨0Xêü›ý©ërùu|‰ƒêñ†2`AI ª“¼V@¹®¼ež’—dŠû1k–å嘖ΠŽMÁQ™èŠö ƒˆˆˆˆ¨6u]¸{à‡û¡ÁŽ+0¡”oöu1² ›äÝè Ïáõ¨R(6ÞñûÈzá‰A⤣?à """"ªM]îd¾?B„Y:ÁwXo‹ù–¹Pì­áT‹•õÊã±e®ÇÙਙ¢;:0 """"¢ÚÔuá.@ÎÀ×8x¡l¬ö¿ 32ä½x­Pß2S…»Ug| xýÄC ƒˆˆˆˆ¨6¡9:BnÿÍëí<Ó|Vÿׯ9ã(ÇdôCž2@äÅ|öOûª`ÿ©èŒd†ADDDDT›îò ¼‰]vñšêEÞ,ï ýnóaqF¼ŒtxÅzÑ"®“Ë6#ÐG¬@oN%""""ª]h ÷pù‚\…0X D—_¯*ðLñï×s•ÍB'á^±:F:lÖ>%Z T(=òDDDDDt£Ðî=°ÀFѦʽս/ø?Ðçˆ9"GìÄE¼>Ä–©ÚÐqˆ[0]`À ì‘'""""¢…f{W¼†õâ^¬Æôò$ÏZ†ö >Zo¡¢ƒ°²'úƒ}·u)¾G>ŠÍ£r«,ÀhtB;FBDDDDt3KHÞõ p'1Ëæòwrqi­JwÂDþÃt›Ñ®G{K»ÃúOk¦ö?‘€©xUðƒ!""""ª)4+îÝêgPŒ24CCÔ/ômÖ»B½D'XÍ\óñÈÙa=íúÜÍë­‡ VXÅeñ"Æ1""""¢›…¦pìV·ÃçqW¯žõ|á[ ;ÚËR9OžrEÚgXK#ÓÂ>·½?üðc†‹ÞŒ„ˆˆˆˆèfÊ­ù˜’aÞÏüã´A¢yX^”]C-ÙêCîÓöW­“GRÅËè6Œ„ˆˆˆˆèf·¨p/V‘æQÜæ0s—lTo­-Ó’‘eŸ`íì´N<ŽŒ„ˆˆˆˆèf·¨p¿tWiZÅWš¢¡Ù-ñõiu©2Ö5ÛjWGúˆ©h‡DÞäNDDDDt³[T¸5¯hQý!~ñˆ4Þr"®X¢ÕÙn¯õšz:Øéô@+ÞäNDDDDt³[µâþAi“ò;Ñ"IÆÊO‘ÂáámìÕÖ(8P.¬ÀÇØ‰X¸àd0DDDDD5…²p¿ F Yõ¦ö•¿yŸ1P.S{Š(±Â7×5™u<ü;xQ…J£¿™.wâI´C2ƒ!""""ª)”…ûa£2Ðôõ4‹ä¹’žšK?¦nSV `n2ïmØÊãìŒãb–øLÀhl@w4G<ƒ!""""ª)”…û>äãZ éU æ W³=ojó,‰ÊYñ[hæ}rMÔ¢0«½¡µ™:\-ÁÏPaA[4F,ƒ!""""ª)”…û¸‚2Ø¡@øÓŒ³QéóÞ.þí¼'î„Ý„¹‚W+iò39M–D,¶w·æÛžR7)?÷Ã߃úg0DDDDD5…rÅý ~F!2QÒ?ÎøÊp¯©íY‡¢ˆ¿êÝÍAòHt™ã'ëd[ž«Üu ’ÁÕÊÂ}Žãœò 6 Sž«/G•ý¾ò%@Ý£¶4¶ÊùR·Ø¾° Routino : Algorithm

Routino : Algorithm

Algorithms

This page describes the development of the algorithm that is used in Routino for finding routes.

Simplest Algorithm

The algorithm to find a route is fundamentally simple: Start at the beginning, follow all possible routes and keep going until you reach the end.

While this method does work, it isn't fast. To be able to find a route quickly needs a different algorithm, one that can find the correct answer without wasting time on routes that lead nowhere.

Improved Algorithm

The simplest way to do this is to follow all possible segments from the starting node to the next nearest node (an intermediate node in the complete journey). For each node that is reached store the shortest route from the starting node and the length of that route. The list of intermediate nodes needs to be maintained in order of shortest overall route on the assumption that there is a straight line route from here to the end node.
At each point the intermediate node that has the shortest potential overall journey time is processed before any other node. From the first node in the list follow all possible segments and place the newly discovered nodes into the same list ordered in the same way. This will tend to constrain the list of nodes examined to be the ones that are between the start and end nodes. If at any point you reach a node that has already been reached by a longer route then you can discard that route since the newly discovered route is shorter. Conversely if the previously discovered route is shorter then discard the new route.
At some point the end node will be reached and then any routes with potential lengths longer than this actual route can be immediately discarded. The few remaining potential routes must be continued until they are found to be shorter or have no possibility of being shorter. The shortest possible route is then found.

At all times when looking at a node only those segments that are possible by the chosen means of transport are followed. This allows the type of transport to be handled easily. When finding the quickest route the same rules apply except that the criterion for sorting is the shortest potential route (assuming that from each node to the end is the fastest possible type of highway).

This method also works, but again it isn't very fast. The problem is that the complexity is proportional to the number of nodes or segments in all routes examined between the start and end nodes. Maintaining the list of intermediate nodes in order is the most complex part.

Final Algorithm

The final algorithm that is implemented in the router is basically the one above but with an important difference. Instead of finding a long route among a data set of 8,000,000 nodes (number of highway nodes in UK at beginning of 2010) it finds one long route in a data set of 1,000,000 nodes and a few hundred very short routes in the full data set. Since the time taken to find a route is proportional to the number of nodes that need to be considered the main route takes 1/10th of the time and the very short routes take almost no time at all.

The solution to making the algorithm fast is therefore to discard most of the nodes and only keep the interesting ones. In this case a node is deemed to be interesting if it is the junction of three or more segments or the junction of two segments with different properties or has a routing restriction different from the connecting segments. In the algorithm and following description these are classed as super-nodes. Starting at each super-node a super-segment is generated that finishes on another super-node and contains the shortest path along segments with identical properties (and these properties are inherited by the super-segment). The point of choosing the shortest route is that since all segments considered have identical properties they will be treated identically when properties are taken into account. This decision making process can be repeated until the only the most important and interesting nodes remain.

Original data
Original Highways

Iteration 1
First Iteration

Iteration 2
Second Iteration

Iteration 3
Third Iteration

Iteration 4
Fourth Iteration

To find a route between a start and finish point now comprises the following steps (assuming a shortest route is required):

  1. Find all shortest routes from the start point along normal segments and stopping when super-nodes are reached.
  2. Find all shortest routes from the end point backwards along normal segments and stopping when super-nodes are reached.
  3. Find the shortest route along super-segments from the set of super-nodes in step 1 to the set of super-nodes in step 2 (taking into account the lengths found in steps 1 and 2 between the start/finish super-nodes and the ultimate start/finish point).
  4. For each super-segment in step 3 find the shortest route between the two end-point super-nodes.
This multi-step process is considerably quicker than using all nodes but gives a result that still contains the full list of nodes that are visited. There are some special cases though, for example very short routes that do not pass through any super-nodes, or routes that start or finish on a super-node. In these cases one or more of the steps listed can be removed or simplified.

When the first route reaches the final node the length of that route is retained as a benchmark. Any shorter complete route that is calculated later would replace this benchmark. As routes are tested any partial routes that are longer than the benchmark can be immediately discarded. Other partial routes have the length of a perfect straight highway to the final node added to them and if the total exceeds the benchmark they can also be discarded. Very quickly the number of possible routes is reduced until the absolute shortest is found.

For routes that do not start or finish on a node in the original data set a fake node is added to an existing segment. This requires special handling in the algorithm but it gives mode flexibility for the start, finish and intermediate points in a route.

Algorithm Evolution

In Routino versions 1.0 to 1.4 the algorithm used to select a super-node was the same as above except that node properties were not included. Routino versions 1.4.1 to 1.5.1 used a slightly different algorithm which only chose nodes that were junctions between segments with different properties (or has a routing restriction that is different from connecting segments in versions 1.5 and 1.5.1). The addition of turn restrictions (described in more detail below) requires the original algorithm since the super-segments more accurately reflect the underlying topology.

Algorithm Implementation

The algorithm that is used for finding the route between the super-nodes using super-segments is the A* algorithm (or a slight variation of it). This was not a deliberate design decision, but evolved into it during development. This algorithm relies on calculating the lowest score (shortest distance or quickest time) to each node from the starting node. The remaining score for the path to the destination node is estimated (based on a straight line using the fastest type of highway) and added to the current score and the result recorded. At each step the unvisited node that has the lowest current score is examined and all nodes connected to it have their scores calculated. When the destination node has been reached all remaining unvisited nodes with scores higher than the destination node's score can be discarded and the few remaining nodes examined.

The algorithm used to find the route between super-nodes using normal segments is Dijkstra's algorithm (although it is implemented as the same algorithm as above but with no estimated cost). Since these routes tend to be short and the CPU time for calculating the heuristic cost function is relatively large this tends to give a quicker solution.

Routing Preferences

One of the important features of Routino is the ability to select a route that is optimum for a set of criteria such as preferences for each type of highway, speed limits and other restrictions and highway properties.

All of these features are handled by assigning a score to each segment while calculating the route and trying to minimise the score rather than simply minimising the length.

Segment length
When calculating the shortest route the length of the segment is the starting point for the score.
Speed preference
When calculating the quickest route the time taken calculated from the length of the segment and the lower of the highway's own speed limit and the user's speed preference for the type of highway is the starting point for the score.
One-way restriction
If a highway has the one-way property in the opposite direction to the desired travel and the user's preference is to obey one-way restrictions then the segment is ignored.
Weight, height, width & length limits
If a highway has one of these limits and its value is less than the user's specified requirement then the segment is ignored.
Highway preference
The highway preference specified by the user is a percentage, these are scaled so that the most preferred highway type has a weighted preference of 1.0 (0% always has a weighted preference of 0.0). The calculated score for a segment is divided by this weighted preference.
Highway properties
The other highway properties are specified by the user as a percentage and each highway either has that property or not. The user's property preference is scaled into the range 0.0 (for 0%) to 1.0 (for 100%) to give a weighted preference, a second "non-property" weighted preference is calculated in the same way after subtracting the user's preference from 100%. If a segment has a particular property then the calculated score is divided by the weighted preference for that property, if not then it is divided by the non-property weighted preference. A non-linear transformation is applied so that changing property preferences close to 50% do not cause large variations in routes.

Data Pruning

From version 2.2 there are options to "prune" nodes and segments from the input data which means to remove nodes and/or segments without significantly changing the routing results.

The pruning options must meet a number of conditions to be useful:

  • The topology relevant to routing must remain unchanged. The instructions that are produced from the reduced set of nodes and segments must be sufficiently accurate for anybody trying to follow them on the ground.
  • Any restrictions belonging to nodes or segments that stop certain types of traffic from following a particular highway must be preserved.
  • The total length must be calculated using the original data and not the simplified data which by its nature will typically be shorter.
  • The location of the remaining nodes and segments must be a good representation of the original nodes and segments. Since the calculated route may be displayed on a map the remaining nodes and segments must clearly indicate the route to take.

The prune options all have user-controllable parameters which allow the geographical accuracy to be controlled. This means that although the topology is the same the geographical accuracy can be sacrificed slightly to minimise the number of nodes and segments.

The pruning options that are available are:

  • Removing the access permissions for a transport type from segments if it is not possible to route that transport type from those segments to a significant number of other places. The limit on the pruning is set by the total length of the isolated group of segments. This significantly increases the chance that a route will be found by not putting waypoints in inaccessible places.
  • Removing short segments, the limit is set by the length of the segment. This removes a number of redundant segments (and associated nodes) but rules are applied to ensure that removing the segments does not alter junction topology or remove node access permissions or changes in way properties.
  • Removing nodes from almost straight highways, the limit is set by the distance between the remaining segments and the original nodes. This removes a large number of redundant nodes (and therefore segments) but again care is taken not to remove node access permissions or changes in way properties.

Turn Restrictions

The addition of turn restrictions in version 2.0 adds a set of further complications because it introduces a set of constraints that are far more complex than one-way streets.

A turn restriction in the simplest case is a combination of a segment, node and segment such that routes are not allowed to go from the first segment to the second one through the specified node. Exceptions for certain types of traffic can also be specified. Currently only this simplest type of turn restriction is handled by the algorithm.

The first complication of turn restrictions is that the algorithm above requires that super-segments are composed of segments with identical properties. A turn restriction is not the same in both directions so a super-segment cannot include any route through that turn restriction. The node at the centre of the turn restriction must therefore be a super-node to avoid this. In addition to this all nodes connected to the turn restriction node by a single segment must also be super-nodes to avoid any long-distance super-segments starting at the restricted node.

The second complication of a turn restriction is that the optimum route may require passing through the same node more than once. This can happen where the route needs to work around a turn restriction by driving past it, turning round (on a roundabout perhaps) and coming back along the same highway. Without turn restrictions a route could be defined purely by the set of nodes that were passed; no node would exist more than once along a route between two points. With turn restrictions the route is defined by a node and the segment used to get there; no route between two points will ever need to follow the same segment in the same direction more than once. This means that the optimisation algorithm calculates scores for directed segments (indexed by segment and end node) rather than for nodes.

A side-effect of this is that a route that works around a turn restriction must be calculable using the super-segments that are stored in the database. This puts a limit on the amount of database optimisation that can be performed because if too many super-segments are removed the optimum work-around may also be removed. The solution to this is to ensure that the database preserves all loops that can be used to turn around and reverse direction, previously super-segments that started and finished on the same super-node were disallowed.

Another side-effect of having the route composed of a set of locations (nodes) as well as the direction of travel (segments used to reach them) is that via points in the route can be forced to continue in the original direction. If the chosen method of transport obeys turn restrictions then it will not reverse direction at a via point but will find an optimum route continuing in the same direction. The only exception to this is when the route ahead at a waypoint is into a dead-end and an immediate U-turn is allowed.

A side-effect of having the starting direction at a via point defined by the previous part of the route is that overall non-optimal routes may be found even though each section between via points is optimal. For a route with a start, middle and end point defined it can be the case that the shortest route from the start to the middle arrives in the opposite direction to that required for the optimal route from the middle to the end. The calculation of the route in separate sections therefore may give a non-optimum result even though each section is itself optimum based on the start conditions.

Overall the presence of turn restrictions in the database makes the routing slower even for regions of the map that have no turn restrictions.

Data Implementation

The hardest part of implementing this router is the data organisation. The arrangement of the data to minimise the number of operations required to follow a route from one node to another is much harder than designing the algorithm itself.

The final implementation uses a separate table for nodes, segments and ways. Each table individually is implemented as a C-language data structure that is written to disk by a program which parses the OpenStreetMap XML data file. In the router these data structures are memory mapped so that the operating system handles the problems of loading the needed data blocks from disk.

Each node contains a latitude and longitude and they are sorted geographically so that converting a latitude and longitude coordinate to a node is fast as well as looking up the coordinate of a node. The node also contains the location in the array of segments for the first segment that uses that node.
Each segment contains the location of the two nodes as well as the way that the segment came from. The location of the next segment that uses one of the two nodes is also stored; the next segment for the other node is the following one in the array. The length of the segment is also pre-computed and stored.
Each way has a name, a highway type, a list of allowed types of traffic, a speed limit, any weight, height, width or length restrictions and the highway properties.

The super-nodes are mixed in with the nodes and the super-segments are mixed in with the segments. For the nodes they are the same as the normal nodes, so just a flag is needed to indicate that they are super. The super-segments are in addition to the normal segments so they increase the database size (by about 10%) and are also marked with a flag. Some segments are therefore flagged as both normal segments and super-segments if they both have the same end nodes.

The relations are stored separately from the nodes, segments and ways. For the turn restriction relations the initial and final segments are stored along with the restricted node itself. Each node that has a turn restriction is marked in the main node storage with a flag to indicate this information.

routino-3.2/doc/html/example2.png 644 233 144 272260 11541143722 12232 0‰PNG  IHDRôA^#X oFFs6È *8 pHYs  ÒÝ~ü vpAgŽÌdKž€IDATxÚìÝu|Ëú?ðÏÌn¤nT N)еh§¸·´Š»sÐâîîîîRÜJ[ÚRÜÝ)ÖRI²;¿?6çÜð»÷~¯Aæ×ëÞ=“Élú$žLF8Žã8Žã~6ƒ†¬À\Ѹ‹sļN •½OöX^AU,¦dw×,»xäæйêºÊÙ@rÃ%6¢éôúOÇrŠŒ^}Â'5dשÔÙuòBuUÉœÁ˜ÃÕÙiDa*ú`ŽCŒžû_Žã8Žã~R®°%|@…cø8_´žmYºë²JMJt[]qd1wgÉ*[«akôµ¥‘y‡¥ÑÒtÍÿ-ÐÃd)#×a#YªR¥ £“Õ™~‹ªÕ/s1ÆË·i!g?ËcÚ=†Ê9òjåüì´–™uV;nëÇJOM|2óí»±3NŽJÛpÖñA…çÀ(á=%d”\H^Ê$¦FÌÂ'ä : ñžû÷ñÄã8Žã¸Ÿ"ä@Ù†Lœ%WHQdËãÙ+ÔV*VxçÞÎeI•Ú–(Ö¶Céí^ajGÑ“\È•óžè%úŠœ'ÝÔnªb¬!JzÎâ7&]ïùøö|«„=7î%%>Á+ñ„wp àFj"„ågy¨€OøŒ,   Cæ/ ÷Ïß°ÇqÇq †:ðAQò #ABÈf2VÏv1I©X½~¡ ùí†EÖ òÝ_ç‘W}çídˆðšÉ«š·JוÜ@:«?˜_Ö†˜µ5×núñ‡±³‹\˜qÍõA¹wƒ?–RÚN‘g¤§t eOÐë±* ÐCâé;÷ðÄã8Žã8îQzâsa€D›’ÆÄ 9l +‚3úÁëq/|K©Ú… q­öÉǯJ÷ÖŽ¯y–œ—]Eªo )Z Ç©¿j„ùaeö/ºZ3µcoì_Û;%ôn¿'~ÞªœŠZ¤É·XO,@AŒÃr2˜1SãÃi8h6ºÄü‚*¢¦‘#¹–9çt¡´%y‰Þê•_uœaaŸ4qí•«•»Ìßpñðµ+©ožG¿-£´C1Ç„³-8Çn!Sq¯ðŽoóô£â‰;ÇqÇqÜïÍ4u®Šbð¢>¤8y®±ê¬;ÁبT¬s¢„Gxß{Uúû”ª[x¨Ë €ä¸\ÿ¼Ó†êA+¨·h©úÖ—Á¹yú›ü®æ=²šuñúõ&×t/˼Szôs"ö‘-ä¹ YI¥Ç¬®|YN‚  Þàžñ—å{ÇwŽã8Žã¸?’’m)k´k @ +ðñ¨‚D`Œ©jG±—X yZ™ÊE> œ\e·K¹¹nÏíï²­Ÿ]6ï†ÞCë%LêÓ]š¦êÇï+g-˹¿lê¹ñi>óËœóºöᙽtãÿ;ïTT…7ãéçÒÏÅ«Mi×Ò;”ÖDaP¼#ö¸i<1ù_Žã8Žã8Žãþ)Ó¤™‚‚b-Ú¡6y†³¦]öZïµ |®ü¸wû‡;DlblÒØØŒݶxòçìó_Ê'æ2ÆØ‡Œ1–Q„1Æfæžvü¿H À¥5q9I2pcÑÝxs¨¡â/È÷B@9¸Ã¯ð YÆÕI9Žã8Žã¸?‡2på0ná1¦aV`&Ú žø‰ dÄçi¹³u³ÎÞ~¸òåÉ-–×=6ˆ–âsÑÇ+Њj'èÆU~ôE_W3L[)»TnRnӗåOù”ðènì:‹›9µ˜•……•ôôÖ§G_اàœ=yݱ'‘DŽà>Ö’û¨‚²qéø€/È1ŽÎçƒi8Žã8Žã8îŸ2íB ‚ŠÅœ!/ð[L+.ìTuÍSf–Óï¬7cŒ¥?aŒ±Ä Œ1öäÊA—õù|¡‰±iùºž¿µ­_Çû­­Ù§œ«]ºE Y3ÓÖ„Ãä&iEöÀDc‘*ˆ¼;÷›{ƒ˜µR­wçlÑG£¼‰xˆç<4ÇqÇq%i@Ai8¹DÜŠ/ÈsÝ“o´ÕüSmç—hšO¥¯=rX»œ!Sj>kûìH†•ꚸ@[¬*»:ü¸“ØïÔÑ«¾l7«gÙÆb­8‰>„‚÷ƒÅ£?[T4¹ýÝ3kÍR:Þ¦oªfÞÍV(EŽ’VR6ÝÆ.\Ç#·xâ[ÿÚ7…»‹}AëŒ'¯Þ?ýì€èŠ–hŠÅØÊCÃqÇq÷—QA„= © Y€ò+Ö¶cúÅtªVmôÌnú*] [3d–z­Í¸•s»ÒØÉç8­ÎkßõXQ½eéÄv%Ê–*VÐÌFMéV=Ë+©/!Õ”S™¿v™j…0ÅÅêB•«Þïβšw>¡þÍ{›Æ¦÷yÿ:ÿgm–qL<µÀ{¬aIaTbNìJŸ›ò»Oáÿ|e—˜ïÜÕø*¸`&ñ˜pÇqÇ} H#"` Ö ;Ü<Úº$Ø–üòìèÝÞΆ§ÇôÊc,9jÈDZ±?U„›>¶LSׇ‡ó'6.QýTVȨ6í706qfGÜ9®|ÔÂ/ G‹xÉØØÙѳ›Ü!6éNÅ~«ZÄý’œ[þ“ÕGíx‹ikâ|Ú•ÜA&æc¸±È *ˆü5ú3 Þ—FùÞÈØÿ)‘ôÇtôÇiÌùuSŽã8Žã8îO¥Lµ‚lè>ZšV“íÁÅ#ú¥†Ì)Pú¸K6Iež˜÷|áËÙAÇN‹‰ÿR-7I' i9Ò›ÜfûQüÕé¬A9áßz÷dõœ{M_Ú }T$Ëá˜ÍN떃͞Ìu¥ eò2t/ôÕœ·[¾5Û¢*¼Áu@½ï†Â ÑFXÿ¸ñÇÙ>Åæ6Ëû“pgÉ1<ÀòÁðÁ)¤"YÈæ[ÿpM³|ת“ÄxL8Žã8ŽãþZÂBO¶Á6p¨âï³9ÿ«ÏíŽî3BwæDûÞ5K8È«ããÇ}”úä#‚ÇÆÇ¡é@‰„aÚ›¶ì—VÐֹʬ· «V—ydÔÌ(ÊØ„ãKË%âÚEÝËŽ¹4ÒI~·%ÚŽ±ÉQ±ouì§nÑu˜]P„_SÇ!V£-&~õ<Ï‘;¤-¹H4¸f,2ã[ÿ0·ù·òQ¦€Ö$aDà1á8Žã8Žû PPŒAGÔ¤½HÞà VNêS;±äzƒOI'ÎíëµòšqÑÇ,íÍŽ«·“¾Ä;‰ ncÌ ùm]v-DˆÐB„@bq…^d/©dzÂ"!ù¶Ø¶™c¾µÚŒ·ÑòÛclÒ—ØÌ-®sÔá¬#ÞG`lÜ“›xªSß§“×hã0¨dÍåV8›YÕ4ßmÚšPˆì'Í1 QÅà Æ•rø‚ã¿þY¾~Œï–…¤?)ÄcÂqÇq÷W!‡HCœWŽýGúø¨!Ï9£ë?TwâØ³žë¹Td°G›ô0goc .jr͸‘ÓßSAø­éÎÇ!qÇqÇýI@æ‘*8O?RRß>ÓÆ×<_b©¥5Û]aNç?ôOfìB‘þOw›0®ñ(ãƒÌ6Žh7ƒæ\–Q4f?xÓb¤^’qØ…_L+­íd_z\ýZÛ*ÕxytX§v‡›Ð¿cU–0Ö;zpöæ‘Ó"ÕÒÎ8»¨¹ŒM^»öÞ‹óZ ‘Ò½‚g¾–{Íט¶&Ì#GH ¹NlpÏX¤6&ð<ýǶ\níìKXÁZxDUd ÇqÇqÜNIMµPC¤g©3©¬·éšê]Ÿ±ËdÈû<çcszÈ«u¦XÛŠµJz¸^Äq,A7z‡– ¡0‡ö×6¿3ed¼(ž`z ãI iiZÅÅÌ:ÐbÅØjµr+韼»M(c“-c;26öPô®¬=#ÎDLdl\å6ŒMªÒ)ýñøA­'þr8¤P…Ž®­/[H¦­ CÉÒ/0±¨ŠBÈÏSøà`HDv˜qŒ‘p™<%Q°´<2ÇqÇq K˜A…Éè0Š\Ì0»¨µQ%?\°euliôÉ›½%Æú´vÍëzŸHO6ÐÕT$U±CÑ䆦=ñ0‡9$-‰ ù‚Œ7­Xàƒ½™õ“‰¶u VžxÿèÀ‘­½›4ªS’´'®dÔ±œ2#÷E:ÉâvDflâ½Nû lsjèŠÀôrOógÛµ³ÞcÚ)‡¾ð§óI7’%QnÆ;èOŸÆŸjÝ1°^]¢!÷¨v 6Êb-bþ„·ÇqÇqÜÏI0YÎh=ÒQ9q6jC•Œ]¼=0R.sºw߀ŒÝ6tU`¯ÓëÅhO€Èd¾üÏÙtbk}”FLCÚŸ4&_%ÓªÙ¦X­è[¾zYßMOŸNk³“±‰ ª36öEôǬG#îG¬awâžD«›¼­3îظUûyÏu¬à‡ª6G¾ U*¹Oš‘A¸½Æ"óŸxøDÏ®wÃÓÍ÷jR5•R;1‹_SÇqÇqZ›œ#î¤+$ wÚg××bÄ}ÿ-;E6Ûoc{ 8:?®_µÐqJ}ò– ÃSãƒ5Pá¯Þ{G ñ×ç@ã#N ‘d )jZÅ9Úz¸Åãñk÷©¬}70¯µcSævŽ¯Ç Žº›]id‹ˆûŒÕGë›×qÊÇ #>D~˜ZD•ÈRÓ].8¼2mÌÀ9Ì [ðÛ”5ÞñóLl½V w\³N.16C­BaÙ=’ùåÄqÇq÷‡h‚@øÐ.$JÁ”^ÝTã»|zÈcýòã {E¿+x Kæ”clñ˜”Å L&ƒ‰vÂfßÔBЦÃi‚P…H*H>a›iE/8¤Ù:}TÈ/àAÝwZÇ16!¥ã(ÆÆî‰~ž½gä”HªŸ3¦`{™±Éõ;éÞ:þÑoÎÙ†—ªî/ZØIcÿÕ’åtqÄ:˜t$ŒEÊfO?öpšûæF¶jPø¾ãsûpc Š“š„òkŠã8Žã8îwf s¨ÉR;ñÇзÐÑüÅìÚtxt/ϼGñz¾a,ÅgèàAëÚl«4™Œ"ÕñYô<Èe…;¿ƒ¿Qe D@p ¿ FÍGæ™V±ïiþTûv`f`˜_ÀÝôþã[elRJlUÆÆnÞUÄÞˆ5,0nVÔ%Æ&ÝŠuÈ(ûˑ͜¬ðÌêÕŠôÉ·Ãv¾ikBortÃ,ôG0Š¢ào[4Ïoµm{÷EþÛNÆ}­è*2’øñ+‹ã8Žã8îwc²h#C^ÿ:¤d}Å‘eëoaì¢ý€yÒÞ³MûÕ|X`ËÔN Îs^`Ó‚$p¬§ s¾»ôïRgZžÔ€Žî&pÅ´¢ÃXËækF^ yY!ö‰Ïà¥mâ›ì«–óâE7Éñ¹7²€aò˜5Q›Ø­ãœWF’öMgt©?(àc)æzØÑù«ó~@=xÐÇd©„þ¨‹jÆrñŸì,û}yßhÄ´ÈŒ*Q^;Ü>ãì@Ž’H~}qÇqÇý¾èjjMê)Ç{«ò7Ï6oÛ{s>U«O,cä$jFÝe럤®$ô×·}È›Ö T„'òã¡-mA‚¿ÞìÉÝ×nŒ•¡Ë#ÿ±>N÷GXتc5O26¾r‡·_>Œ¬ñÆ3¦Nû/ŒM)ûüõÅaãÚ…/hظ`õ …ÂîÛ–þ*Ú½‘‡ÕäØoƒÀ- †ø÷ÅgW=7tE±-î”aù@âø¥ÅqÇq÷;PRÖóX®ÂzL5›­¹©ŠÚuh‚c£gŒ]º>¨µ´ñLXß1IK5í Ô’ì'Qä iƒT†LGSïø¾&¶JCǽìh> T°×rãóNÝÉZ~•qÇqÇý4PCŠÐX҃ѾÕV—É(X^¦õƒöç­:z§‡ÄØ%ÿAÇêÉR‘îʃè jCŠØü¨“-M“æÒp‡+yB´H¦N„à€iEÇJV³-&õÍ®îå[ånÕ[ÍblBߎ…çÛ¡Q¶4ry¤J7`ô’öë›”ÕiÛç£lÛ\Öòzp—2j··Ž[M[#]1ôYGêÂö°3Þ¡ŒÎÿ–16É/¶Në¾³ŠLTJÄ´>9ů2Žã8Žã¸ÿ‰²h£\a‡“˜ƒV€‚§\æz¶zÍœ=Ù/Œ±„ß3{V«6ê/ª·â A¬°øã 6ütSF¢+ƒ‚F£…£TK¾šŠj3ÊÌBÓ ÇÔªåË̾¹¨ïªæO›ô1v8cãƒ;œÏJñ0â¨4b̪¨ÒŒMšÞéüçK#»D^]ëÚònð¤2)nõòí0m®%AxIª`;&¢ŠÁý›žØÊîM¹Óùq‡ òžÅv#¶ö"×ùµÆqÇq÷_¢ëK¦+©ŠÔTŽ[U éï]ˆ±óøIOÎîc™=çø‰>-jx—ឦÔ¬i{òë0Ÿs§P%q6é'ñ`H¦IM<6­hsÉ|¤öMß.Õ6—ɽò wP³+ŒMJêô™±±=¢·åÔy'²º~÷˜rQ¶ŒMØ×±XÆtŒ^²Ìµih•·yú»~•Äc ŠC%ØÍ¤6F¢ÑoÃi¾‰­ŒMëÝ­uÅ÷%ò+%*'º‚dò+Žã8Žã8îA:W H$˜õÑìQu¹üpù‹ÈÞòº Í„0v~ÿïM k–g¬¿“ÔÂãƒÕÛÞèçâoÓZ_€3Ρ;šPORL+æ °loû¢òR ní7¢E6c<:–`lü¹˜ÚÙÅGFEdënžÕ~4c“cc+}¼0rfûÂëÔ­|ƒywiç0PIiÅŒ¦N¤ÒoÓg¿…uâ›–ÕåÔ½5,ʬPž§èHô¤;¼¶üÝÂqÇq÷s†l„öté­t;Ð$¹CŒ%m|QwôØÍžûó’OµìUÖ¹ènçÄЕ&‘`ºp$÷˜Nl-Œ˜..¢Ñ$á«*QêÕÌ>­«=ó]™v¦Wᦛ¼%öccÏEýòzdëH•ÔcLRT{Æ&ôìh–{xÌ/Ñþ+×5¿˜Y¹ûq—¦­‘lÅ0ª%ÖH´E]ãúÄVÂØT‡Î“õÇÓúsHåWì*–c/’!Cãáü§”~x*¨ÈX\ÅF D&À M”Šv3,zš±×}˜út (\j‘w%Goë“€œ!×Ïí§«`XHËÑhR^Ý^+¨ä$ç½3TßqñƦ'y ;$¹ÜÖ]´zèú|¯ñ´eP6TMÆÖÒÆ6ã3>á“qb«ä?ð¯flòœXÕ¢ÌÆw«ëŒEáŒB=Tçï Žã8Žã¸‹Iÿ+µ'sñV95¼CŸªW»$ |!…ŸZÜgzFòÁ·=–¹]ä¸ó lAòÓ.äÂß!þÊxôPø ¸0“|"L«XuÐ`ô€ü-o–Ÿîd—¿u©cf|.ù4âmã/)S„Ç.mÆlD7ÃEé‹FwÜ… _=çÿD<“ ’’ijîpFˆT90[ìFêÒÁä–gÈk–—!.âšÓ–é×ïëë¾/žìîÐ#¼²oÉ+þܖٹ㢠£$wBÎ]ÒŒœÅÞ¨-å?ÉhÑÖ»­ûÝÝ ·CŸIó%ä¿é”ÐúQÓU%°šl3ýˆë ò»ä – hŒid0È`ÿõ (&_Ø!ëÌñ®ÚF×ÍûhlÕþÆoy˜¾üÕç8Žã8Žû—ýDƒIn`»çÞסÏçÖñoú¤é·ÑkcI›ÏíW®UHÅãÆ‡È œ†´PñþI´›Ø `„؉Ö&ÿ¿Z󱯭—_ýâ7Oõump˜±‰‹:=dl|—ϳœYØP|Láöw›óÙ?¶S‡«¤Ý‚šT+ïUÈõìWoŒ,D’GÔ¸€­è„ÆÆ;þ«‰­„=AÕ+õ8U ÕÚ—¬Q†Ô“¢°‡}9Žã8Žãþ)5T”$Œ b), ÞèˆÝ¿äF¼¯äkµÉâ¨RTÝO¼u{Þ+ïZ­¾xÈõz-bƒë˜L,àN‘ <’\èa0§Q£ÆÖÊ'Yc2×±…Z‚áb?Æm|˜ràvÉÐèUQ‡×4ë°©ßɢ炞ú¾oo¶Kc¡:"ÜŠu.ymõg Ý NÏhê÷¸ð—öÑ[êlؼ¸MPHfÕB…¼ó{³‹èŽLÃt¨‚²Ø‡ÝB9rt„5l`c|VÿöŽ­Ÿ™Š…[~Vo­ÄÔ‹þ:„¿0ì`Á__Žã8Žã¸@é-ÕA‰Ü'}ñŒiXyt)o[Bå:»ý–Ú%l¥ÙµõuhÕ¡ë¢A»']9ñAûy}¶Dï >¤ŽœÇz1fÚÁý™Lc®ƒ:´–uP!õp‰ô3YOÊ&6í\}5÷¾!4råज़·ÞjuÆü|é§³Þõ+õu{Íí9õôìGÙ¹¹ Iº|LRµêRÆËku¼Ù0Ôgë²váa/*7õ°ré€bxÉR*«ÂVÐEÄWH_\Âr´€/ŠB0ÙæéŸôÅ7)êÖ«­¹áRp¹^ó_í<òjSfHviÒ §0-G zñ×—ã8Žã8î+ÊÊ!]ÑU©7ÙHòä^LÅÌöbÞÔ¿¾gm…ö2o½›!íÆˆ¾«ù©bÖÐw2é0{ÈÊaF`1ŽðE¿9Ê:ñ9ÐÃ@òa-ÆÓ®¤¹&gþlóoµdÒ¦õ˲g‹¾ì|©Bþbëƒêã2úK¥òºêwòÓ=ä9®z©vÇÞHïÙ§-šëß.w¸¼çΫSÒ½}ÏšÛòÁ‚"¥lËÆlÅQãÄVƒÉ“’ߘcQ­3/Œ%¸h3ÛÂøæ!pËùkÇqÇq÷Ï;h1&sõÂÚ®›Wã\Éþ×tñs{UcìÒñAú¦v5gŸ¥Ô!¹d4žLþÒ=8¹ÿ›é+c 3h0 õ@Ò ÇièQÎÊfꥪœðÔRÓ 9ž?Ôuv£Ìoœy‡DÆ&úuŸ³e¤Y'÷ó¨Ã‘ï›\#ÖíKïÑe£ên/ÜnNØ«JÏ=¹¼p‚hŒ§ýŒ½èJ;‘(âDã—D”Ζ™õ ÙÂYbC†Ÿ¢;,]¥’ûÑ?u @€ j£6j£/ú¢/>à> ÙÈÆ ¼À ä 9øŒÏøŒLd"_ð_ðñÑx¬Üû Ÿð髚Çq÷cÐ@ 7±ÝäÙ‰] UÉ8¼Ô³uÅŠTNt ©ƒ³fÙª‰§²*=±;t5A| ¥õÈFdË/˜¡ "ò ç£Û¿Y¦¿ƒ|Fò‡cHbàBMôBmT‹Ò ²-ç”®³Þlo¹ëx€½¸^üÁŒÖ)åfÛűü¢ïßà2!©rz|é”›O³UFæ5{ëýȽXcïb¿ðߪºôÔgÁý„‰7 ž·~þb±q,ÏZÔ„!籂iÙ|#:‹Ñ“ÛoUe©Ÿ‹á%ëϳãò­ƒï>U%Çð›X<І¿vÜ j¡º¡º‘ö¤=iHD"Ò˜ú¿ÄK¼Äc<Æcö”=eOåÏñÏ÷>ÅS<5–<Â#<ÂC<ÄCã‰x€|DàïÆtç9kXÃîp‡;œà'¸Â®ÆrxÀf0ƒ ¡ A -´(ŒÂ( 4ÐOâIY°¼à/ÔDMÔD34Fc´@k´Æ~2›Ì&}ÐíXm„"GÙuvGx¬Â ¬À\Áã/ ÊíÛÔ Ð€zQ/êEGÑQt ¥¡4TÐ ZAK‘Gä‘ÐLh&4#»Én²[è,t:““ä$9)8‚=OÏÓóô½Ao¨««“Ú¤6©-W“«ÉÕžÖ{Zïi=–ÆÒXšñk†ò%Šã8î[¦$gz ‹Ï…,rР—3»Ž¤Ké¤âs‹®Ìg%ÍÞ’w ™ëˆÔU{.î78IåZd Ä%Ãôæü))”¦LlURvbƒÕKÛ/rEgg¨iر Wqïá.\ÝqÿX«>¾ã‹Ìèl¨ZÜ:8³Ð—A€ÜU¤‹Ëù¤[Œ@Hk^òèå8¢&<÷†^:Úô¾ÍË®¢éyíûZô5ë‰ãüøÉh qJ¦c:¦“}dÙGÐôá¦á¦á&ÛÇö±}¢§è)zª'ª'ª'’æ¤9iNf‘YdD'ÑI$™$“d2•L%Sé3úŒ>#×ÉurZQ+j%Èä¶r[¹­üL~&?“óä<9O>&“ÉÝåîrw¹¤\R.)¿‘ßÈo˜sbNJÊ.o—·ËÛY:KgéÒ2i™´Lò•|%_©«ÔUêjð6x¼å{ò=ùž!ÅbH1¸Ü îR¬+ÅJ¥ŽRGýYýYýY¹ÜGîc˜i˜i˜i ’A’¶J[¥­¬*«Êª¢š¡óc~Ì™13fÆBX aeYYVEQE=èÊm36c3½KÒƒrQ¹ž\}Ñ €v¡Óét¹–*‡þƒ˜W@TÀxŒÇxr“Ü$7Ñ ½Ð‹< È¥„,'ËÉrr†œ!g”×E¼(^/’Ùd6™-ú‹þ¢?£q4Nx-¼^ …†BCÑItÈ ò‚¼PUQUQU!HR@¼#ÞïEdY$„ aB˜PS¨)Ô¤éD:Qy,I%©$•ºQ7êF§Óét:mF›Ñf$ä‘<êM½©7ÎáÎ ]„.B\ÄE\ ƒ„AXƒ5X#Tª UIyRž”§ûè>ºOy]”a6Òi‹´åYijˆgÆÄݶ°å‰;ÇqßFkãÄAª-ǰm.¿8ì°ÌÔ£¦B!”ÐûN –š…› Úu§UŠÓ­Æ/ká –¡ +Ⱥ£Ê?X!„ûñä׉À>!£¤ÕÌŒi0¡¨Hšã0f š°è-s®4»Ûfϲ›Õm zP¨»Û»~=ª4ó¹ôÎÃűº˜¤º,žÕ­Èšw[ÎÂyªµ³È ×_%îvû̪k*XŠ£<ò?ÑgÑ6„ ÁJ¬ÄÊ/i_Ò¾¤=éò¤Ë“.ˆE,b_žŠ}ûiò§ÉŸ&k>j>j>Òƒô =(º‰n¢ýL?ÓÏâq‡¸ƒ¶¦­ikq‰¸D\"~?ˆ„‹ÂEá¢!D´ íB»!BˆB—Ñet™0G˜#Ì¡h'ÚIX#¬ÖÐyt§ ‹…ÅÂbÍzÍzÍzAdA&{ȲGtEgÅ¢XëÃú°>ʨz¶ˆ-b‹ØP6” E0‚Ì^³×ì5®ã:®³`Ì‚ÙX6–UÆ^³’¬$+ɲƒì /ÅKñÊ× ÃÃÕÁÊ`eìï_,-–¶¶¶jjjKë¥íÒvÝV]]Ÿæo¼°¶î¡º‡HÌÅ\}‚n†nÆÙûö%¼{öž¾§ê¡ª¶ª¶‚…`!XÐ%t ]"Ìf ³hZ€Wˆ+Ät Cdz…ÙÂl±ØGìCÇÓñt¼ 4Œ†Ñ0²“ì$;q§qš'ÅIqxždÙEv¡+º¢+I $¥Q¥É²…lA%TB%rœ'ÇI8 'áXÕXM^‘Wä’„$²—ì%{åIò$y’ÜHn$7’‰Ldbüb“ÆÒXšTB*!•P†ëèžèžèž Ú¡”&¥IilÇÆ)¿“°“ì$;i8j8j8šoK¾-ù¶¨[«[«[³¥l)[Š]Ø…]üºã8î»!÷¸¤ ([Hl8{ŒÎíËÖÞà]Æ3ÕÓÒ6F×ï³EÎûLdß‘žÇÝXi~¾5 %"ê“ó¤Y( ²À(ò ‡ž‡ó§`:o+9ÈÃ4œF*5Œ[wÑjdyn¬îœ>øn{ŒC¸Õþ1êù•Lô*Ô-²âüb›¼,:.¿âiTÎÓä>Õ&ºò£µß«JVljN㫞 ¾á3òÂá –ä0a#«ÃǸs€(D!Šæ§ùi~Z¤iyZž–§³è,:‹–¥eiYjA-¨ 4B-ŒF“PJB…¹Â\a®pT8*â„8!NŒãÅxšæ£ùDåv^)·’[É­d;ÙN¶c*¦b*y£¼QÞÈš²¦¬©ÔSê)õÄP ÅP)RŠ”"ѽÑ[š+Í•æ25S3µ2wÂ>Ú>Ú>ZuVuVuVº+Ý•î¾K—þ.eQe£ó••‹8Žã¾aD$Œfs±³ªÛß°4Üwظ½ƒ¿Ù• IJXßÖŽ˜ë¼®_r>oæ=Q^F7“%ÒAy ›Œ+¸…‡<†œ‘éÄV7¬ÆòtEógK°›D¦({¡^E›Þï}ÕÓ>UêÎ-´ÁÅÿ«Ä}Þ¤÷öö.¾{Й‰H¤L)SÊ” K…¥Âr7¹›Ü± „!‚!,”…²Pão-Ñ-•¤ŸÙ3{f¯ô£ã6nãö_ö¾Z‰•X‰Ä †_dÇ}—”žv 2(}F«vrù[»ðá³ZM»y6oRz ; ;fxø¡dV'Ãþʵ»”ßüê¾Ù3ÏŒdòˆ\& r&ëÂxÇ÷Ï)sJÕ! Ht éI<å¶ž=B |èeÚ›¶©yªPc· _%îkç¤O}¼#ªï–öǧñÄû9ÃÎJroLýMoʽv°ƒÝWå®»kbM¬•/ ,‘%²Dcbš€$(KLâ Îà náný9VÅæ•B*…Ì.·©Ã¦ª/b¶˜}nÍÏ3žsgÐŽÐ>jñ¸ÆãYÌ•*ãÈ€cœ•Þne¢mAâGüˆŸ²qˆ‘²øæ;¼Ã;ãÚ;¯ð ¯Œ_ð”5s”ÕuL•I·Jú}ÜÇ}ÜÀ Ü åH9RNYî“陞éy/;Çqß !Š.%+${ù [ï·¢øQ—ÕÇÛÏûÜB´Ì¯šF ˆCµMUõ‡Ÿ^Tø|ë‰ks/F<‡7LÃFà *ˆ ‡$÷/˜ìØŠ‹Œha=iNôÒV‰mPª|5ÆÝº›fjúòÈq€×&·¸ÿiÆÅ¾•ÔPI:•…• M—VT~0½×tùEÓÓå•aÊ’‹ÊòˆÊ±²¢²þ‰-laKydΆ³áw[Þö¹í“Yífù›åm‚m:Ûtžõqð¥Á—^»eÌȘAIIb¥™óÁNìÄN㢓ʖUJ¬LÍT_ÓE*MoÊB–Êr“ÊVY†¿»™.^©KiSY söadÈÿ¾f`öë& ¦“•!3˜ñ…Ú9Žû.MDW„Él:{v¸ƒ“½,›:—;j;ϾÙKÃÅ̔ܵ/ ¾ ʲZ¼p÷²´;Ȇº!á83h Bòø¸vîßd2±˜ŠÕ’šÍd"&¡>ª ÌD¯¿%î ÌÆC'þºr³Ìø`þ/.÷­1MR•¤öOÄê°º¬.ê£!fÉÙfÙf¨¦ Q…oµZ­VJ çéyÝB­Î–D“h­Lå/ÇqÜwC”'÷1‚­aæhà×¥x%×rQŸêæ”®›óÁ"{ˆº­Þ\šYbIþ„¬÷éŸäìЄHf²;Û‹Üå);÷_0ͺu0À€a8€ó 8€ó_õ¸[NPå°•à +˜ý޽n÷#±… ŒûÞ óèd:ÅX*Ke=äÎrg"‚ÁWqUÙ+ÔØ÷¯ô‹sÇqß2kX@ƒÏø‚<¢'gÉ0¶—å²ÌñbÄ‘§ÂNä©<ÍNª¼ï^½½ìíÝaÝ®6@8Æc±Ü„=eP waÍÉýèoG«¹âJ:»ˆ+HÅ<á}í÷(ƒL³1³#­`+Ö™ufc”Á9çäˆt iJ^±Rl6¬;hrÜ€¢òà `eÐDsG¼)Ø«÷‹“…LvM1SÐ ¡­‡û£ˆ(‹p†Žf T‡Å^›fë´Öodý’Mn¢5ê0`ây°8Žã8ŽûaYÁjG\ÉJ©”<šÅ×~[©¢çÃêÏ«¤yMÏkð®Of²ªªMuó„áu—]=ÖÐS²”sè z‚œfµåvd¾z ÷G¢ð…œ f¥Xsµ¥ÐU8m×Û¬¬¶3DP,Ds„ñ0qÇq÷ÃÒB Í„R²AÂìUkÅÓÂêÉ¥;ª=•­>¯ËÙ«Ùo—a^æ¨íÙ圼™òø‰9=DíIuVW>ËšÃIÙP‡“û#‰ð!®ÄMØuäWg Itªõ.³ZjÕ £™L’j|)7Žã8Žã~@((r¡ƒDgÓR^¶‘cÙòÞC›÷(oë¹´`m3¹P^®¡ì—É™{uíG«WF_x©oa(iÈ :Z›”`:”þ ÷ç ÄN°c—ÐŒ Sù §i1kWM_u²ñþ±C%&Žã8Žã~@dÈ´ I"EX¨¼•y»zZÞèq·é<ßDy­¼K.F‡jFËw–=‘ÿîèÄ7K¾´!ïÉ/x)«å#l™q\;OÙ¹?…7œ`+`Í0AUB8Es¬­µ]Uõ•»ÉX„¢ÇqÇq? *(/Ä‘`èYпˀðxß=^Û ´?ahš3RŸ’ëžÓUº0¢ÎŠmçKœCgìÁY\‡9´‘ _7Œû³ˆ( X±¬›§òÔÂR«7jIµ@€!¤*Jàÿ"ÉqÇqÜÄVÐ’²ä&±Ñ,“eºíÊ·Åêq¯€fÇÊîÓçÿ8<û­ú¹}´åµÉ©Kw_P?{öÆþó`:Œ>"ÙÒ.¬rǧ¢r.ŠÂ°…{…XGªQW2ÒRPoÕÊݤ/* (ÇqÇq?5Tð™È%O°ƒtd»;Ì5ÂÜ…ƒs¾Íf:ÁWuD /}Ý&—K£H0¾ÀZbrG¶Ö°€FÙ]•’ûó‰$¡(ÂÞ£Îäù`^\´¥Ÿ•»É8ø“"``êbis®½}kóóã³oÝ$åð3Ùq<ƒ2‘ =×ÎýµèçzúµÒSšKž‘¥€üXnnÕÛ,F¼Å[¼‘£åŽl3º¢&Êó`qÇq÷¡ ȃÚ„\$N(h¬¬½·òèBÃBKU|]ÀR®—·Ö`.³¢H\vý›Ä*Ÿ|Y”û˜Î¦¹¤+Âf„kçþò·sæBý|ÃLz‰˜°Îì•—&FM[Еô‚îØ‹v¨o,Žã8Žã¾32)…wX‚¸ÏhªÃÅŒqå:ž©2ƒ^U]¥¾ÔVULÈL¾~µî«|[oœ¨Ë’l$Õp@Š’X3¨ ‚ò¾vî[@?wÒ—J’“äYÈåx«1Õ¹j—XóðÒ~(ɃÅqÇqÜwÆæÐÒ:tÉ”ÓYK¨[yQâ\•¯§ëF]`Ö˼Ø(>ÓÇ/nq6˜ugYKÀ^x„çx = y ¹oø©aÞ]ÝMúˆ¼¶tD6µ´X©Ñ©ôf“T/Å59ê<ª#h†2(Œx.Žã8Žã¾Ö°€†¸ââäK2e‹üÚdU»a%Û]¬øH²ÍKÐëÔ«ÉÚ+¶ž~tßïÒ¨_\¤'ÉB<2£+¾ë ç-qßú);w¤¡(Ñ’OXKyû`y@í¨Z¬"öÚB ÍH)xñ`qÇq÷PÆ¢+‹6^%+Ð’CAôêRªqJ¹Å×sÊWɆ"ò²lùKYýÌ©í7-JÎÔГZ’ŠDGv"=±Ž§ìÜ·Fü¨ÊÍÐ9“˜‘}p’·ÉÅU“…]ZñŒ°Äøþo€âpcÀ[0Žã8Žã¾qÊXô,œÃ8´f•°Åq±]AK«ZÄûN•—æ|Ñ7;[äÓ¸íüåÐÀ[‹Îä¥Ýz²^t ˆmÒVӸŒ™kç¾%ôC霓¹ñ‰5I•¦°KÌÓÜRuWì¯í&Î&kÕAaâʃÅqÇqÜ7ÍdíQ/¨è96É(Ø­Z£{e´nåÝOÛ½–Í ™ÒÌ»ÏR^F\ôš¶ ë0Q¨ U‘3Ø#葇,Ȫû¤÷Ç­SÖm¸u©$ …KHi"ýÆžz¾ì#÷ £%³e/#ÕHŽ|‚iX4ýEèA j™Ö#uŒµ‚à[,Žã8Žã¾QyÐÁ@f’ 8ÉÂØ”-®ó/¬SáÍK½®|Y•g§ò2©™±rüÞצ¾ª•q/«!=(8 y)+ÁîÂÀ‡Çpß:šÑ.Û1Ç/H.¹![¡,†ãð’,Óölèc­R°‚ŠïÆqÇqÜ7‡‚‚ 9ÂP‘#ÉDôC*Y8Ñ»S骛ƞΡTì)Ì{¬}XáCõÅ+öŽLN¶?Ì–kH¯X²±Þ×Î}ûovÝé:{†üÒi¹<­Or° …Ø.–gÏr„ùXã;¹æ² °„j2Žã8Žã¾!2d0¡GÆËµä,9äK…þfõÕìS¸¢þCvaÝ3RZc®Ò*µ²S ·‹>ÌZŽfhŒ–,hkLý9î›Gó »Ëe þR;ùˆP‹0² `YûÅæå´µµÚ²ÕØ ¨yâÎqÇqÜ7B„Š“˜hyª¬f;äà]¿§-ÒËw×vVߤ5…íª±‚Í »;‡Þ]ÜUõÌýÛ÷É$R{áÉÚ`-Ì¡…Н!Ã}/hÞ>ÉR.”}ßPRžK»+roÁÅÞ×¼–¶©R‡µÀì…%4PñqÇq÷S†ï A&Ö$½Ø ÂÒ&BÍ%%*Ô?Xý²Wý”Ìg¹ÍÉxÕ Õèqg×ê.µÊœ—ÝMgG­Èlò”½ƒF!¹Ðóprß 1·§¡§<8{¿Þư×ršæªà…qì-+k×ÀÌSS…Ì:aã8ïqç8Žã8î  "à'2H0í$¤‘•£†´_[Ñ…¤jÒ3ÕËÚÖ§÷&z8|”«És™¥Ó6{b‘<ôY»Ïœ„`V’…ÑsÚSªû=ö?©p¦YjôãSx•hɼظBž²sß#šS@_×Ð(«uÞMCäÐÁÄf‹–Ö­4‚˜Jüˆ'9ƒTyÈ8Žã8Žû (}ä*ˆÈj€ûþQè¡&ó—œCy®5ÐEr%Vž µl¤š+LÀ˜³Û¿ÕåÓ8¸Ÿ9ÌaKØÀ+0Õ¥´KµK©§pF8ƒô<=¯™hvÅìŠÐS¬#ÖA&2‘‰Bð†7ÇqÜ©+šÂŸ Ä@6ÐGç¶½[©jÁRìN°.†7rø›õo=¾<ž³p’GŠ3è!XŒ0ƒ"t|\;÷# ÈEò¾œ×1LØ ˜±iØ…ýka¹luV3_SÕX·>J£(÷^%èÒ-ÐBu]¬NFGü‚_ÆZ[fmÛÁí‚Ûl¼¯{_?p÷ší5ÛÞ>SfN™ ‚äˆ#TSTSŒÓªø°Žã¸Ÿ9´IIò£Ø)æ‰9…¦ç/bßyUø´R_t{>Ä~'ºÛ”6¯>.ÿêÊ—¦¿žñ>îËI¡‘0ž c;™Œ.ÈA <ÜÁ˜@|Yj°’ÁXöœŒ„5>“£¤.)ž/Âr™Ù¥ˆ0ðq?É•ñ·ôš€€ÐCcðñQŸ®»£»c&¨©ìã¾Ö}­\O‚I¸PE¨bÙÖ¼›y7ÁUuKu‹agÙYR–„’PâI<‰§qØŒÒsÏqÇý3æÐB…läÂ@’°’Ä †ãÐèQú€iÚ­fÄÕª]fIêqw2nJ¯­·%Ÿú|GO’ ˜'Õ‘ ì Þâ2y ¹‰15Éjl¨-ÉÐÉÍY&¢aŽ/ÂN2†V°—Í‹i«ëöDu”ã!ã~p*¨ ‚j¨1S1•.¢‹è"y¥¼R^I=¨õ¨¿ö¥Ú—ÚÏ7Ÿoî¾Ó½‡{L­¡Š¡ ¹Ã|˜OF‚þ³þs@qÿâþÅËÅ•_z¼ÞOg¦3cÙCöl#ÛÈ6d#ÙÆðĸÇq÷7ÙÈ…^ð¥#Ély=+Ë^U¿_ö£G÷6ÝkE¿Ä¦æõ6Hd5FZLMØâŸºåõà÷®Y31‘ #Xv¾üÓ•ûau©åÿʧ cFtL×=®}[ý™8èšõÞ{¿(4]©CrHA<å±â~@h 1'#Éä 9CΘVñ¾ë}×ûî÷ îÜ/MôMôMÖ%ìOØˉ1ÆT`Œ±{cì~AÆ»’û)ãSÆÉð#Ÿ|î^ªGL+­•ÖJk¼š’I2IÆ'|Â'ã Dˆ|ŸŽã¸ßÅt&Ód¾úºê£Ø`û©qåÃë0–h1h¤xúcßêé×VŸˆn À%H ¼Ålø¢(Ü`Ëß>Õ9îbL2‡éêW°–òaÖó0 Mhi’D®Úæš-ÕTêh”'%ð”ÏPå~Ää–‡<äÑ´-!W+È” õ,?Z~´üååå>8|pø`×d×d×äw×Þ9¼sØÞ`[ñmÅ/7VdXÑ ÕÆÊ]ä×òkÑ^ü$~já×(ªQTå‰eÞ–yÛqNŒ_Œ_¹Ïe•=¶Èz‘õ"ë” )R*(O„úR_ê+_‘¯ÈWŒ=ýzè¡ç»úq÷“²ƒ5ÌhEº‘¼—w±g̽úŸx·Ít!áÅëÎ}j”sG-XLÓ¶a»âì…ãÞã)Kž’1l-{Érñ YÈãä~<ÆÄ=«Žn½!Cï,­“G RzêKº‘{¶¢6Z] Àœ@üP[°ie¯´Ì“xŽã~TyÐA¢ýÉ#â)×fnl{ËmÁgKú|.SÙeœ=øôàÓñâÄHŸœ>9}òáÙ‡gžÝãB =.Øw³ïfßÍø€@"´%mI[c‰Òþß/õØ ­ÐŠ è¥@ýTýTý´ã´ŽÓ:N;RüHñ#ůœ¼ròÊÉ# 4<Ò0¢mDÛˆ¶êéêéjã¬:›Î¦³QEPä«¿ˆã8îE°…\$!جuQ÷Qå»R`e±ö”i/Ü0бóƒûOÚž:nP£MÆúûH}$Ì·Xâ~ j …ƒ{Ú=]mh6L>×'*•±‰Þ/ˆh\³ú(¥¢p€È0î›fš:[Àä 9HGâH•b³]f»Ìv5š Í„í‰Û·'¦H)RàÒ•KW.]™3%fJL™ee–•YöUÃWèz;°;ŒEZh¡ýÏáïÒkº„.¡_}aðã;ÆwÌ¢ž‹z.꙼(yQò¢Ä1‰cÇÌy6çÙœgE'Pô×k­<Ê£¼ñÏ2DË׃ç8îÇ`‹|È ˜A«*#ž–(Lºtj¾ªÜ\Æ’ ª›¿¨·ƒnΩ”~{¼Í=?ç{‹WØ‚&di€óÐBÍSvî§bŸdénó4xàƒVaìøXûèvŒM¼Ö©ÎÚ‰-V¾SêêBò>?îešÔ®Çz¬J ¥„R¦U*®8¸âàX€¸|ÿòýË÷/»_v¿ì¾Ñ{£÷FïZÛkm¯µ]ÌsÅ\¥>y@ÆÝOía{cCÿÎUð÷}ð˱Ë•)°Je Ë–5b£c£c£ãoÆßŒ¿™v:ítÚéý÷?Üÿ°ÅZ0m’¾¡oèx›ìê ¤á8ŽûΑ–D•ʱu Õ1àAüº%mce·ã£:eìÒ›¾3a@XXCÁšö"é êMª Ú À8̆ã~"F"¾™ñ9ò˜®¾ÔC‚q‚lÈr,±œ­Z, VR"Ò>(†W|ä÷0¾ÙýÐØ[bË"X‹ ABöÚhÝ3ºgtÏÐG¡BÙéìtvº³^Ìz1kOøžð=áë3Ög¬ÏÈjžÕ<«¹±aUQ•\H.$úiú¿³Þ 3¹)-tGwt—u²NÖÑ´-u&ëLÖ™eg–Yvæêƒ«®>èü©ó§ÎŸÊ• *4 m@Ú€´òûËï/¿¾ã|ÇùŽÏœž9=s"®Ä•¸¢ª¡»Çî±{x…WxõÕÔ[Žã¸ï©Af’™Èc}ØϦ%•Øt`M/§&åøϺ—G o2ì>ˆŸÖ-ŒØ°q¡tI6gY4‡Z’;˜…MXÍcÈýLÌ;èqL9¾Q¤×Ü&Ù~Ü ó›4¯Ó£hÿ´ÖPƒ Í#ýá[Xñ¸q™¿"B}¨õ1-1onÞܼy[‡¶mvµÜÕrWËÔe©ËR—]˜taÒ…Iãë¯?¾~Ɇ%–løÕµp‹Ü"·p —pÉX¤lÆôû2ýe@‚‰L&“Éd¥ÀÖ°Fï”Þ)½SNyžò<å™––¶;wwîîÜFà o4ü«¿½­Gë¡3:£ó?hŸã8î[FAAÄÛjGµ«R0FXuÕùW¯cì”­®)c7v0ÆØÌ¤c8õD©#O‰ç-ø Aîçºh®á >Ààš¢‘zBDiX_vÔlŠÚZå†;øD&ޱ2l;¡ðÀq*Óa'JÿzôGšL“i²|M¾&_£7éMz3àiÀÓ€§sìçØÏ±40h`»§»§»çÕä«ÉW“GÞyäý‘±#cGÆÞÜwsßÍ}4¦ÓtŒÇxŒg¾Ì—ù¢*ª¢ªñ¼Êz꿯<ä!ÏøYÁ Vl$ÉF*ËA~Æg|Æ\¿¹~sý†÷Þwxß+¯|¼òѽƒ{÷Ã<‡yó5>j|”K¢K¢K¢|P>($HRIHB’±}¾'+Çqß>2Ù6 áËÌÅŸ®|²ZJ Ô †{_‰SXw)K[K^œÛ™4"*lDÒpÐBIY:’ã~$¯l_²c—úw»Ãs¦!&ü²{÷èF™fË4mÔ7õ+âò¸qeC"E RB+ÓÊ´²i•b Š5(Ö`Bâ„Ä ‰çGœq~DÊç”Ï)Ÿ÷UØWa_…˜Ô˜Ô˜T‹ñã-ÆP…Pˆ6¥MiÓ¯/†¿(Í5é×'eHR†'ÇÉq¥Äú£õGëžx>àùÍÍMJLJLJÌö¦Û›noZ¯t½ÒõJ›6F;ÑN´F`Fü}ûÇqßp‚µ°Vå®2®Ó5,{Ñä…y÷ícì¼6çyî«»cláÓøyñ³•:Âq™¸œwLp?§¯¶Xÿ\K×ÚÐ åH ¨ØLÖP{_e¦r´ª¥qSOÏQç :Š‘¨„óÐqåãXò‘‹\ä’Kä¹Äü˜óS:Üͨ5£íµ;ÔîP#ËF–,Ý˹—s/÷qÈÇ!‡Ì8˜q0cyÑåE—}TîQ¹GåŒ /!KÈv]g×å¹ò\yîW½øÕèp¥__€¥³t–ŽÁŒÁ$‘$’Ä϶Ÿm?ÛÎÀ ÌÀ…ð áÂûêwªß)e•Èᵆ×^ËÏÃÏÃÏcѧEŸ}ÊXž±dVȬY_]ãé$¤£¡Ñ?ˆ6ÇqÜ_„ö"OˆŸr\´l8ûÓ/’÷DöÜ&‡]ø4èÙ‹>ûHï!>›ŠYæ¿%P1µ#mNRˆûA£:Õo06~HL¹Á}Tó7·~™±ÛoGÁÝ.1ÆËìYNêñ¸q¿“ ’0s0‡ž¡gèÓ*% —(\¢ðÔaS‡MvÉâ’Å%‹”Ž)S:î^¹{åî•­Ÿµ~Öú™•ÖJkõëªêРȲ‡ìAY”EYcù÷µx¢é—HD"’æ£ùh>Ó*!ƒB… Ú2qËÄ-Sߦ¾M}{~óùÍç7î<¸óàÎvÛì¶Ùm3^é$âOüVv“å8Žûó©¡‚ ˜Óz¤<àÛú®Û ­bì¢ë€«Œ]Üß¿ö_¦Ôo|UlJ3ÈXã£rqãx𸟚iâ×¶öÿ~Œ_3ÌÐkŒkû3Ÿ#FµŒÊ_M.t#ÿn¥ŽFÒI/7î{Û™ †q€HsÒœ4GTA¥ŠM¦M¦Mf×]]wuÝuH<$Ó§O?~rÈÉ!'‡Œ->¶øØâj¨] ¶iÃTKµT«´iL|Œq¦cýŸâ)ž’CŒ_§óåË—/_¾Ñæ£ÍG›Ÿïq¾Çù©êTuªz}þõù×çèÐ; ÷Wá¿H.’‹ÆÿàÓX9ŽûóƒI¼…ñÓitdÌðj{ØÔ‹D2–\vHói{º»×ÈQîUEˆÅé¯ÛÒþ›!÷3MÜûv«Ñ¥\ÆÆŸŠ™«Û6ºJû"º|cm;œ¨Uü½G}¥Ž°›jÈ\7î?F[dü– ’_È/äRˆ"…Œufc6f×{Xïa½‡›&nš¸ibò›ä7Éo’4Iš$Í‚Ý v/Ø]åU•WU^}ÕpwÚvWFu‹~Ô阦¿(}ð/è ú´Jíûµï×¾¿5akÂÖ„Ôã©ÇSŸZwjÝ©uýökد¡Íl›Ù6³ñßAv_Å_ùõƒ'ñÇýÑj¡~ýä9‚MØv´ý¬¸ÖV,ó|×~Ÿ •O î÷Kĉ:õËX = œ¢ïÈ=þÙÄq_%îQå+¤—<ÅØø‡1›ó4£~‰\ÍØ„ŽY¿ø„j¢ÔóÑòd÷0Qí _ø aB˜fZ¥øâ7Šß˜’9%sJfÂÇ„ /_¿|ýòõ=–{,÷X¶šÙjf«™f™f™f™Æ÷í2²Œ,S¶[‚<àñÎõ3Ä“‚‚GâHI "AJ±Ko—Þ.½'?Ÿü|òó„b ÅŠ¥\L¹˜rqE=Vô¨jSÕ¦ªÍWMæ§ùiþŸ(†Çýµ–cêCÔ¶¹å#m£w­÷Õëvœ± £úë_9îšÒ9µ€à´Þf<òÁf$œ˜cOÜ9î«UeÞÈvÎu`‡<¹«!ø(¤Ñ SÅ`ºÀ^¨Ñ%አ¸ÌƒÇýLWkéŒÎèL<ˆñ`ñ,žÅKǤcÒ1§§§„–Z~hù¡ÑŠF+­p|êøÔñéÇ '|œ°+tWè®ÐÕÚÕÚÕÚ×ý_÷Ý߸vûbº˜.–cåX9Öx®Ld˜ÐÏøc3ý)(({ËÞ²·¸Žë¸.´Z ­^Í}5÷Õܡφ>ú¬‘ª‘ª‘*Jˆ¢„ /*¼¨ð¢°aÿÂþ[“¶&mMZ[gmµu²6fmÌÚ¨LceïØ;öÁFð_°«²• l` XÀ–°„¥qʲ2.ßÚä¦ÔQ~+0Àƒqåe­ƒÉM)Q6ÔÍE.rgTJöb/ö9Žûã  ´q#‡äÂ̕嫾¡Ü|vs-[©]Ô'cžïÊhœ÷¬Ú›sŸ¦“¥$ñ¬)‹G(Ç}Õã^¥•ÇA—-,i‚CÌ…/ÕFäEdyÓŽt¹ß¹n…ùÅó¾Uæt1ùÄãÆý£7´ÐÂ8I”Œ%cÉX,Ã2,3­Ød|“ñMÆoú¸éã¦i÷Òî¥ÝK“0&aÌü¹óçΟ[qHÅ!‡|Õðer™\þjïþûÈ›CZN–“勱0Nêò2ó2ó2›¸sâΉ;/Ù\²¹d“ü:ùuòëE—]ZtÉ÷©ïSß§¦MÒ~´í÷ÕYþý˜+5=á O"èŽî莥XŠ¥ÆYY5ÈŒ˜3âK|‰/ 'á$oðo”/ipƒÜøËËq?¡7Ý@ÖÃâ.ujYãcçÞ (ÄzžwìßaaäÀ¦u ¢š¡9A㬒îó¸qÈ¥¿%îÅê8lµÞÇØ„†1o³’G<‰8ÈØ´]ÎôϨZÓGÙˆÝhi2ΰ†ÞÏýÖ1É£;c Æ`0fc6ê£+ºÒX:–Ž5­^êT©Ó¥NÏÌš™53ëRä¥ÈK‘i]Òº¤uÙô|èù°h¹¢åŠ–óê=Ô{héÌÒ™¥3+I•¤J’ÿ1ÿcþÇ*ž©x¦âjGí¨ñŒ.p +qÜ¢PŒÞ¥EHMäCŒÚ_kŠ[“ŠìeÂ’»;ߤÿ¼:a•Y¡,˜Aј¸sñ9¿nê®;"9ʤâÒ VO¸C²ˆ˜œÍ’ì>˜wÔ^ƒ%.c»Üš ¬ Á®8„k¸ÇƒøO))”òã{B¢¬æÁ^±WìÕWË ~ò‹\dá=Þ£ Š ˆéÊh§!NÅœŠE6ŒÜ¹3übø®ð]Öç¬ÏZŸýPäC‘E6íß´ÓþµákÃ׆¿¿ýþöûÛñOãi<——ÈKä%¨Šª¨Ê7ú˜öxЧx*¯“×Éë¨@*È5äríØŽíHgé,u^ÜyqçÅ5’k$ÕH꺪뮮»|GúÖ÷­¿Ôia̘«ån¶¸ÙÂØÚ*ãÿŸÁ¯‹unÄ~ìÿû§`Y3Ó14"H#ñ¥øR|).Š Á_ð½EoÑ[Y›_˜"L¦Ï„gÂ3•¯ÊW嫚 š š î÷ˆ{Ä 1H R]S]S]Û‹íÅöâZq­¸VÕPÕPÕPØ$l6 qBœg4Õ ÍÐLé³'½IoÒƒ0ƒPõPl![ÈÉYr–œQµQ[z"=‘ž 'z¢'ÆaÆñ½f9îA@@èUÒ‡|”‹Ê­ÙÏmnýì[– óbù²a#ý"‰9ë³c¤kúÓÞÚA À <Å<ŽSˆxˆÏ¿Žõ4ŒaûYƒ/¶ú>R’6ØUk/_µ53ë¢mˆ,dAdž1/tB5dÁ‘'îÿ‚i uÇqܘÐ(cs Ú ó~æýèÚ–¶E* !!¢y6ò Ïk˜Þ0½Dv±Å>dgd7ÍnzòíÉ‹'/®8¹â䊓ד®']OB’Dž’§ä)ÛÏö³ýr-¹–\ë«‘Ü„ ÂaƒqÙûì>»Ïž³çì¹¼F^#¯‘ÏÊgå³,“e²LÙ[ö–½Y VƒÕ0Øl ¶ºµºµºµ†[†[†[†J†J†Jºººú}‚>Áàhp48666ålÏÙž³ÝƒzPªMצkÓ ‘†HC$ò!òýƒ+—ã¸ß £oiÜ“+J¥QÖû˜‡½ýÃ-"þHM{xÿÜ{ÃÇ /溾8¦¡[‚$x9qŸa\'Õ0Y.ËneíÖIVæ!š|Â1@îÉÎÙÖ2[¦y‰ë„’Ŭ5Ûź¢Ú£ß¿‚„()»ª˜ª˜ª˜M%›J6•äªrU¹ªq­ñ8€_õÍ'H52ŸÌ—K}¥¾+K%ŒOï9Ðk­×Ú\+iŸ´Ï¼®Y ³¾×ë_¯OÓ,p°À:qK»-íŽn>b~ÄñˆGpƒä[`=ñ0aã1‡c˜lÇlG«$;½ž9ÈMå¦Ä™8gêA=¨ùH>’Ê+kØcØcØ#—ÆKã¥×ÒkéµÁÍàfpËÝ—»/wŸd.™Kæ­AkÐÊ·ä[ò-i€4@ _¯_¯_o˜i˜i˜ixdxdx¤3è :ƒ¾™¾™¾™!ÛmÈ–öKû¥ýy~y~y~ú}„>EPEØ|6ŸÍG7tC7ã_}×qÝx¬š×ï^¿{ýŽ0ÂC[´E[6McÓŒu^â%^ò7ÇýÎla3”…#îà®àWC?Ë 1Ö²‹jv³pvùÄî˧mÎJÉÎËkL×x/oe-Pxø8P÷O¿þ¥Ÿ*a ³ˆ~¤¡‘ë"³sâ Ìeì½ÕÍPÕU± ÝE³ W%s©;ŠÃv<|ÿÂnìÆnXÁ VV­Z ¬h]Ѻ¢užœ'çÉB%¡’PI#ŒÆ'ä9Á NßËG’ádxÞ9G¶n“e“¥º­îªîj¨#Ý”njK"ñ[:îš¿kþô÷µµ™›¿\ørd ’çxŽçl›Áf×úP'ðžõ?þŠ!*1gçÙyv^%ŒFIÛ¥íÒö§§žÞ{z/ã]Æ©ŒSº+:?ß—Hùº|].nØdؤ¯%®×}Úñ±ÉÇ&|ØòaKN®>KŸ•7&·Wn/ƒh ¢~¾~¾~¾ÞFo£·‘<$ÉÃPØPØPXÊ/å—òKáR¸n j rc¹±ÜX –‚¥`Ã{Ã{Ã{åùŸg ”@‰ë/êjrS˜¦ìŽp„# ¢  ^ð2®–“ùïŸ.–óg®¢Ãq?5¦†ÒÖZŒ©ÐºÆƒr=Zã²aš4f¯É£kÝ3&£:ò`Esé*ZN> —óàqœBÄdüº”ž>\Þ#Ge•Õ=0Ì ïIKR’\€µoiv_c¡>!μ%I’Q®pàáûLWá(Š¢(ª¤ ÔžÚSû\ë\ë\ëœÑ9£sF“v¤iǰlÁ÷òÇJÛÒ¶ú«¹9¹9yës{äöз18œ + Û Ûò£:ªpÍ?)ÿ¤Â½ í(´#­Ý5ÇkŽÌ90Ú„6¡MŒË*QâƒþÀ—Ê䖃䑈DTú˜¥T)UJ-»¶ìÁ²ûÝíëÝ×»tzÙø²ñ6_Ô)êò ŽàT MÑôéÊg‡Ÿ¾uwÜÝqB%UŒ*ÆPZ_Z_Úø š&ÍŠÿ{¢çe\þmiٮ芮d%YIV*¿G±§ì){ª|ÍÃMÜÄMãØxÆ~ñk¸†kx‚'xbü¨ü <Ÿld#·p ·p7p{°{Œ‹K*_c”úÈ@OÙ9îü(ZG~Am¶é°Á¶·¥ƒ¦³É’O\ ÂO^ û¿=òn@.n^Üâc®¡$2å¢l5k‚UüÚä8…È”Ä] †ZÒJ6 Ó6ï’á ô¤ñ†ŠUaz›3Ú8U+õyá3=‘-) 'Øðkè_˜‚)˜¢æ¼ÎyóúÞ¶{Ûîm#ÉF²1£TF©ŒRç3ÎgüÚËØ ­Ðê»û+ÕPk›Y޳çXK!ŽÈ™ ŽÇË®Pa@%©’´à¼7óÞìŸvôÖÑ[kÒVÏX=ãEÙe_”UN д€ì%{É^8‹³8û=úV¯o“ÕÍ›¡šÑj´­&÷•ûÊ}…ƒÂAá`Ûm7¶Ý±1buÄj§•N5j>8ü ߃|FŸ¨r¢ŠÔ•%²D9OZ&-³X(ôz= ¸¹óæN– 7¸I×  ð‡qµP µÐmІt#ÝH7”C9”Ã]ÜÅ]ö€=`ðñؘ@+É·’p+CYNâ$N2 L0&åÜî÷x÷ü Âqª6¨‰‚8„3œ:Ûž4ŸP`¾“¥Ù#¼. nÖ|Ò8£úµ|ʼ¹N‘º8$¿”«°õ`ÉSvŽû•ˆxƒ]+¹¬üòSݼҺú©8É{õ ògKõdUiUZŒ\pÛQv°ÄÀÿ“É*Ú9­sZç´¾‹»¸ûë½ÊB‡ ± •䯨+ÿ½hMz“ÞXÁƲ±}Š×·®omvÒ¬ŸY?v€l"›Š-.:¶èØò¤ôôÒÓý^–jTªQëy­Ž´:R¡Kùªå«n¸·áÞ†{»[în¹»¥œ"§È)´:­N«Ëä ò´C;´3®oºQ÷ï3]‡gva)MJ“Òr¹ˆ\$ßÅ|ó]8vàØcƒ{÷î!VË‹å/¬¼~!}ÚÙiý¦õ{ôåÑ‹G/àll/1¿µ]µQ ÅPŒ]gÃÙpGq7¦ã0˜Ìd&ã".â¢ñ1?Ü„lŽãþ*ˆ ††:¨ß Aå{=¥E m  *&Ü«ÿ|FfUé Ô]º+z eHà i$ÛÀƒÇq_Û‚hö‘X²mÝÄVa!®ŒM<Ñq§¾Êè#íW½žùKψ>®Ã¬+[—ü#ÝpóyðþÓEå:¡:‘ñd<O&“Éd²ñ'~…ɦE?ÈŸ¾‡ž£ç* ¬è[Ñ7æXŒ#­œ²ò—•¿$M›46Ñ5Ñ5ÑuV“YMf5)•^*½TºécÉ*²Š¬Â0 Ã0cßnéßaºÂ½-laKV“Õdµi• ÙA³ƒfo5l5l5¤š§š§šŸ*yªä©’} }¥¾’eËPKãÞ„b’ê™ê™¸A• J©æ©æ‰ªª¤&™Ifþv–¿­ÄÂq÷"OIÏ_ÿÕÛ]iR©¦íØ ux°¢§çõsèðºÁìrnD%”¦}É+âoL÷9ŽûÊpÔE5Rµ`£ÌoÐH¨6±É!î䦎ÚùòKÑöQ1“mô–!ÆËo*R±‚ï§&B­ ±hezžž§;„*B ë„uPc36Û®´}fû¬r`e¿Ê~Á9Áº`Ý€»î¸»·ìÞ²{Ë^1¿b~ÅüÄ/'~9ñK·«Ý®v»j±Òb¥ÅJcû­Ð ­ˆˆá«óò ˜þžhŒÇˆ@]G×ÑuJÖ^k¯µïé×Ó¯§ß™œ39grRú§ôOé¿ýØöcÛÕXVcY¯öµU–æä1ç8îw3QÂŒCM¸ÚJœt?tÓ– c÷ ¸÷)þà“Z·²ùFZµ€ÔpëÑ…‡ãþ‘†(ƒbt/ñÁIh`Ëñ¡a—*æclÊ›ÎÞÙÍF.ˆô“óÆm‹±ñšo×ÌÒ¸p$ÙŽ{à?`qÿÜ9œÃ9å0_õ|ÕóU¯™\3¹fr•éU¦W™4=hzÐôQ3GÍ5óâ닯/¾¾’ÿJþ+ù×Û¬·Yoö"ìEØ r€ ÆÀhKÚ’¶4®¢$‘¼^‰ƒé>©§p §ÈQr”U ŠêŠêŠêæzÏõžë}9óræåÌ‹º‹º‹º©·§ÞžzÛµ¿k×þÆסuhÃ13¶ö½oÆqÜ·€‚‚ÐRä01þb_~JÉJùs?Î9°·‡3˽×ÿȵÙk{wèOË’K¤µñQPíëMý8ŽSˆHÁ¼¤Óˆ¹ ç±/,ëCÿì[9ËšCtò ÖŠ jÚ%íÌW™-~ˆ;²+ˆ¼Žû?4B#4R6«Wü]ñwÅo_º}éö%ïºÞu½ë­x°âÁЧntºQÌÓ˜§1OËö(Û£l1sÇÌ3·šªšªšjM…5ÖTx°õÁÖ[•†iÚ†¶‘µ²VÖbVa•±¿9yÈû)b« ÁRVP)(AëÒº´®(ÊÊÒ U U U=nö¸Ùã¦S¦S¦Sæ»6ïÚ¼k³ÚfµÍj›ÍG7Ý|T~+¿•ßÒÛô6½-GÊ‘r$†°¯¦´rÇý/dÈ`´?½N,åµRIf]mpél7O›~¶'Ì ¸JæË^g¶¦;¿Ü,‡±÷¬ú '®c)Nã#ÇýS*º‚WsïlU¡KqsƦé»Ú})8âMÄVöi‚cÌ¥Z—ŠûºŸUêÃx„_û|íóµ“w&ïLÞ¹¢ÐŠB+ •Y\fq™ÅÆÇöFoô&$€üÓö9ŽãþwaðGq!‰^&#•‚åÍï®U†±¤‹ƒ+0–2¨LãÕo­'ØÔ@ýI0´ÐüðŸç÷_" âxI•‚ö=Ë¥½Î2¦8vn—}yä‚H[Æ&ˆ1'Ûì-w«¸q‹ž¸sÿÎûÊx¬l,Õýa˜Q(´Ph¡ÐÿÿÿP1T GÁÑ8äÃù1?6‡Î¡shʼ”y)ó’¯'_O¾¾´êÒªK«–ÿXþcù_J¯ô¾+~¤Ô4’"DˆÆ)§£1£•â 3+̬0sݬu³ÖÍJ&É$™\r¾ä|ÉyðñÁÇ7koÖÞ¬½10[éVºõ«‰¿¦ãã9Žã~/–°„%I&ƒˆ1ˆEû66£-V&[æy…%&ø hóaÑÁK½ÆødÊv ôu%yð8î_}hµ_Ç7ŸVúHa_Æ&6ì´(·Û¨j‘¿06þuÌΨºÈ·€R‡'îÜ¿Å4èˆD$"]Ð]Š®-º¶èÚœœœÀ#G8Þw¼ïx_©®Y Y YÐtTÓQMGíz¶ëÙ®giŸÓ>§}>;õìÔ³SûOí?µÿT—p—p—ð¯NFÃh˜ñ?”>øïwb¥é(ó:¨ƒ:ô*½J¯K¾à ¾D¿Œ~ý2¾c|ÇøŽ©íSÛ§¶ßßi§ý7hÜ qÓÆŒ{Öš.9j:>žã8î?eúéjØ(4D0z„Zã.È~CŠZç{›w9¾_¯¹Œ{Ó§PJð²B¾¶áÃM®'¡¿mÊÆqÜ?#\£ÎĸJLý\oOχRÒ¸m1/òžŒºù±ñ©1+‡mZñ­ñÒâ‰;÷ß©ŒÊ¨Œ ‹°‹JÊ%å’rhjhjhjµiÕ¦U›fëiëiëiú ‚] v)ØeÔûQïG½?ÓìL³3Í®h®h®h¶ïÙ¾gûž›lj°I DãÀº‚® +‹XÄW4W¾B|/I¼iÊ~'p‚$‘$’¤¸¦¸¦¸¦L0uÂÔ Iš$M’&Y“¬IÖÌWÍWÍWM/š^Ô¸¼&)AJ؉ØilígPÄqÜÁ°@@”Fi”F4¢C8„C؆mØö÷"õˆ#>ÛÛ®µ­y¨ïãFî^¢«õñh*Íbo·Þ^™˜Q©|ïšÇj΂/|àC7 ABe¾’Çý B ’Jº+ÇÕkvΟöyਉQ~†Ø1Öíã¿2fØ´/ äjÞÆK‘'îÜÊ´÷½ º  *¢"* Äa°ÒÇJ+},ìtØé°ÓU V)X¥ åBË…– •mƒL›©±´ÆÒKWXýaõ‡”Å)‹S'žM<›xvª˜?ø¼yïÊ9+;ŽÏih•¥â=µâ”ý ‹/_¹|&iJb½Äz,'DMˆ²Í²Í²5vÒ ô½ðÕ§ÿ‘ãHw\ÿuúšM5ó­f ¯¸öÜÚ$±ñÕ:Öóé#Üïñæ1ö íÇ~ìWŠ­j[Õ¶ª]5¬jXÕ°° ° ° 777R–”%eÓ¤* *ydùªÞù­ó[ç·#FŒ8UýTõSÕÓË¥—K/·;lwØî°f훵oÖ^ë¥õÒz)õé$:‰NÂ,Àãó1½ý^Lÿ±Ù†mØF»ÓîÔ8·Ä.Ö.Ö.vl…±ÆV¸ðì³ Ï.¾\ør᥹Ks—æúŒñã3Æ07âFÜld[ãK:rÜÏCùrî¸G¢·@ ´ÀLÌÄLÜÁÜùªˆŠ¨¨^ª^ª^j‘d‘d‘äåååãìãìã0'`NÀœQ5¢jD .\0$>$>$>¤]H»v!/B^„¼2:dtÍü5ó×ÌÐ! C@ß{¾÷|ïy8{¸x¸Ù…Ú•´Sk«i¨OR†ÅGûÅ6dìüÁþ-;û¾ßñ«K|§;†kÝ¿~j;4ªÑ(àXä±5ÇÖ¤UO+•Vje§•Vvò¶ò¶ò¶RêÑvavÆ3î§–ˆ!ˆÁx@ íÉ1rûüœØ¬‘ŒMHèèÅØ¸#¯téq´q¤ñz¹ŒwØÍÃÆý!Ò‘ãº(öQöQöQÕ7TßP}ChththtÑÇE}l袌’Wöû|xA[ÓÖ´µicUTUTUTKË/-¿´üeëËÖ—­·&nMÜ:wÐÜAsùò9äsÈ´>mB›Ð&¦xþ§i÷O µ£vÔδ¤âãŠ+>^_{}íõµS;§vNí¬ŒeïÓ;¦wŒÅd‹É“¿znk°kŒæ);ÇýxL?7”NŠöhöH@‚¤üß Ð©t*j[Û¶¶mí‚æÍ š—r,åXÊÑ?Ê?Ê?*poàÞÀ½Á˃—/Þ¼=x{pFpFpFpZpZpZHéÒ!¥ƒZµjá¿Ë—ÿ®ROK=-õÔ#Ù#Ù#9_ç|óuVÛ©íÔ_}Ž‚¿wjUq©µŒ]8`—Üöä—>‡rUñÚ^q• {çå·rKuF]Cµt¤í©q˜J>• V*¸µÜÖŠ[+^±¸bqÅâ@äÈ‘µßÕ~WûÝWçJ#i$í×?•÷¾s?§ü°…•M>“X¥àÈ¡ö‰µº16ii§UìÓ8»Awãû:7«†X‹x†NDex!?÷»Qþ¹RF4>ÅSð* •„JJö¨ö¨öh×ö]Ûwm¼ûñîÇ»§uHëÖaË©-§¶œ ~ü0øáWYD‘EÆ)§Ê`ÞÛÄqß;å*VzЕëZùS¶HÓA± ÄâŸ5 8 ΂³euËê–ÕÝD7ÑMôŽ÷Ž÷ޝxµâÕŠW«7¨Þ zƒI!“B&…Ì ™2/¤rHåÊ¡¡¡Ákƒ×¯­y°æÁš«4¨Ò Jƒ2…Ë.SØc»Çví¶‹lÙ.Òdk²5ÙÿôùÏÀļ{hI2ž¨Wúv¡ëùfÌàY·kúq§WõÌØÅ'ÜläwMyFÞÿ¶HÀŒÆ(rˆ"Æç@ç@çÀ¹Ò\i®tÙò²åeËsÛÏm?·½ó‹Î/:¿ íH;ÒμL’I2í(Ÿ÷³Ѧä$œà ç]mû„ìblÒòN§Ùž±Ñýe ˜ß²¦õ$³åÚFÆ<ÀDôæqãþùùˆ–h‰V)Èß1ÇüƒbƒbƒbƒGíîéîéîi¬¿k±Ö¸Æ°B -´ô$=IOš6\üSñOÅ?MI’:%5¡JB•„*)³Rf¥ÌZ¶6lmXÍÊ5+׬lZŸ¬"«È*ìÀìøµèŸ ¤QJLz€ˆ7ñ&Þ``0ŽJ/v¤Ø‘bGŸ_|~ñùä¥ÉK“—&¹&¹&¹N>1ùÄä.\:¹Wr ‹Éb²È@†±}>å”ã~$Êm{Ø+Ÿxÿ¬¢°_Ø/ì·zmõÚêµË)—S.§J-q´ÄQÿgþÏüŸzzz999¿ ~ü2Ä/Ä/ÄÏxœ’’äääSyJå)•§”)U¦T™REÚi[¤­C]‡ºu…-ÂaË?}ž6° ©H*’Šxƒ7xºG3ÌAo‘Òx†ñ¢ €,:g7¯{‹µŒW÷cìBƒµ6¹¡® ™O°—®#) †3è5T¿Í&RC 5M£i4ÍX¤NR'õÕwVßY.\ HÖ&k“µSöLÙ3e3u¦ÎÆÏX*R‘Šð†7¼ ŸÀÊý (ˆ` ÎdR°vO‹y·›ø¸Sù@ÜØ¨W/ÅÁºÖyîËìOÛUê“Þ¸…=Ü}¸ûðàKÁ—‚/õ êÔ×ÕÓÕÓÕÓXÿ ¾à ò#?òõñ‹\ä’ö¤=io<Émr›Ü®Q'¢NĶìmÙÛ²SO¤žH=qÞÿ¼ÿyÿQ7FÝuÃ}û:÷u_](céX:ö«g«œåï~®¥/è ú´$<><><þà°­¥r€IDATƒÃK±M±M±=²ÿÈþ#ûÛŒm3¶ÍXq­¸V\k|lSÚ”65nn¢àSN9îgðÿØ;ë€(¶öÏÌ.Kw‡  H#H *vw·bQvwa]»»»»¥;Q @®Ý9¿?f½ïú»÷¾ï}ã¦óÙgÏžΜ9óÌsžØ‹½Ø«µNkÖ:Ë8Ë8Ë8###/‰—ÄK43hfÐ̰waïÂÞ…‘0F¤¥¥¥¹Ò\i®4X, u u u jÔ4¨©‡½‡½‡}Ý ºAuƒ .\2¸¤ê¥ê¥êõ‹Gç×Þnè†n|ØGÌÄLÌäíã¿ÙEì8³ý˜%d<_1«ÎQã!”&©Ç® ôVbôƒ7«öid§s]­ ¦¡/É+2÷¿9ÖOWN[Æ–±U®is Í6Î{ž÷<ï™.M—¦K÷tßÓ}Owwwwůâ™x&ïðï?Ó„&4… %ð7‡=Käd_^3¥}Ó )”ÎT(O˜™Õo@þéÉ^½VºÂb¼ñyÅ}ÇG”ã&ð›ãx •¨ä+ꞯ{¾îùð†á Æ4iÒØØÄØÄØD13‡!däCŽØˆ||t˜Á fdÙ@6(Lkú7õoêߌ‹‹‹¿–s-çZΣæš?j~<èxÐñ nÝ ºHâ%ñ’x¾=3˜Ì V¼N(‹Ô‘ˆD$3ŠÅŒâ+´çkÏמ?MmšÚ4µÄé‰Ó§ß ¹r/d›É6“m&.&.&.ŠsFWtEW"!òÕf]Öþ~(Y¨ë\Õ¹ªs5¸upëàÖ7>Þø¸ÿþ ‚nݺ:'tN蜰Åa‹Ã‡5kÖ ¬]X»°vaaa¡¡¡õëÖ÷óó³ogßξ®®®Š†Š†ŠSŸ©ÏÔÿ™s8‡s8G ˆ1À ¬À >Z—"á¿ðÓEX0¼¦œÉaܾæ~i^ããdݽvŵõcGÈúßjUYçRêèЦü#ë´äÛ«¤#ýH”tíßöÿƒÅXŒÅä$9INòí=Ú{´ß;yï体ïÙܳ¹gsþÀùç´åÚrm9ånˆ1"FŠ?ÃB¿7ìòœ(ŽÅ-ýÚÓŠyc –UÌÖ·º¸xšaŸûvM-oÌÌ,Mœ…qø Q^p½á otFgtF‚T?«~Vý¬ðÀðÀðÀ`ƒ`ƒ`½{z÷ôîýªŽUˆ QaY–e¿y„øùùùùùm4Øh°Ñ Ý+Ý+Ýën“»Mî6Y™»2we®›ÜqÿV?TÀÞdo²ñ¢þ¢þà vn7Ü.¸]Ø»=n{\ZUZUZUBJBJBÊäüÉù“óõ«õ«õ«=La¦0SŠT¤*:ýwíéþ*|Æg(â”ó62ÍÝš»5w yò0äahFhFhF¨z¨z¨:¯A   N N NõXè±Ðc¡}û:öuLMMµ ­uD>j;¯Èà#Ïð{’<¿F¨U諨Mf{ä˾†Ë5¼äöÔôŸ-;y£"ê(¥)ÓÇyÎ|: ¼ñ¾ »‚9AV¢'ÂÑZPÿ—Æ~ªP…Â<£0 £X=VU8š0a6bMõšê5ÕwGÝuwTB»„v í"3#3#3U‡¨QUøé1LSñÍZ*døûÁš’S_]ñ¦0aï½ßQ:wýÀ{²:3Jûn­ô™ñ°_VËÍNm')Ú«³¤Ÿ0n¿9Ê^p·…-lÉx2žŒwÞá¼ÃyG¸G¸G¸G`·ÀnÝx½O'ŸN>¬[¶:Ì?´H3ÒŒ4û5TÝ®º]u{‡äÉ’Ï8<ãðŒ‡'žxxârÅå÷—ß3æÆ˜ÚœÖp­áßüì0ôÍïu²×É‹.Û_lŸÞ"=4=ôTö©ìSÙmüÚøµñSŽWCf“Ùdö7:!A3$ ð÷æ-Þâ-JO_O_O?Ü/Ü/Ü/8#8#8#Ä:Ä:Ä:øeðËà—Žû÷;î7½hzÑô¢ÆX±cÙ(6Šú™>ù$Jë°ëi•Z ZÀîpW¼ü÷kË%Ä£¹M:! QˆF³Snó“ÛšQš”çOi’Jì–ëW&t^ª~_Õ[ô‰B}²žxÿ&µüÙ*™;’»ä.¹Ë—5whîÐÜ1þËø/ã¿$W$W$W¤%¦%¦%Æ'Å'Å'ÙÙÙñ-™ÇÌcæ1à‡ozø{Àl%ãˆbr]ï7Ëå0ÇqÀÃÚý3N÷/³œÝyÀÊnw<~pPãÛ°3I9Y$Œ›Àï5A•¬!çaæñºñ)ñ)ñ©F²F²F²°aÂ:H/J/J/65njÜÔ8pyàòÀ宕®•®•¼ˆï`à`à``kjkjkjµÏjŸÕ>3©™ÔLj8ÆpŒáÃs†ç Ïi^Õ¼ªyU|F|F|Æ®]»3NÎ89ãäÍ‹·ôoéß+»;ûîì}MŽv=Úµ3 Ó€NaŽ&vš¸8t“t“ô^ì뷯ߦi¦F§F¯œ±r÷ÊÝöùöùö_Ùå!y$„„E ¿=- ð=PƒÔðE++«ˆÙ³#f¯^¼"ävÈíÛ¡ö¡ö¡öd"™H&þL9ÈA1!&ÄÛ° Û`s˜+¾ýß ¦¼yÌ´€3;žÙôÕ˜v’yÏãÞy”&ž+˽!Šª—=ôèô!ãëUZê^TœH[pøšaƒWNüg(EŒ!ÉErQùËεk;×^®¼\y¹òÞÈ{#ïÜsqÏÅ=]‹\‹\‹¿ò'þÄŸ4&Ic¥óLhþ’|»m´©ô9?Ï‹V:Ô„pY\}éX‚WìÆ“9¨ÕLE.j8Xâ ̤Â8 üpàÀ)–Ú)˜‚)$ŽÄ‘¸Ú6µmjÛTž¨nán‘•d%YI>’ä#ÙJ¶’­ä=yOÞóº|y•¼J^%7’ɸ.…K)¿Y~³üæIד®']óêiÆ<`ê’Îcèhå~þÃ3)A JxÅ mF›Ñf¤!iHžð<,>,>,þÐîC»íbîÄ܉¹ã¼Àyó‚%–4ZÒhddäxâñÄã‰|g$ä‘>d|Èøz‡êªwèü€Pm\m\mLòI>ɧNÔ‰:¡Å(æ³(Ž" ðWŒÅ}ìåË^V¦–UËg´ê›\ã4óo#*[8rÈ©»¥žËø6¢tf))6šþ0x›N€©†©†©†“““õ{ë÷Öïí-ì-ì-ômômômþ>§a¦‰ÜDn"7Iª$U’ª‘ ‘ ‘ ³Jg•Î*S¹¹¦¹¦v”fC͆ƒOONšœôö1¥”&¦W¯­^ûÌRJOÖ¾}ÿö=Æ` ¦0s˜Œ"”…]@@@á"yGqÐ ôÞë½×{t+èVЭ0Û0Û0[—–.-]Z"ˆPüŠ·Sÿ=¹Ð…)e“âK °o;íBD¥‰9±ñ”ÞvÁõ+¿tQÓ¡úPÜ !ZØŒ"œE¤¢‡ßÎ EÙÄ…Ï×1™ÆLã+TUU£Ô£Ô£Ô×%®K\—¦—¦—¦·R}¥úJuk?k?k?¾%#a$ŒÁþ1ë«^à/°„(³·¿ÆX-š[¡VUÀ½æ¶ÒWdNôÁ’%$G#N4‚éˆ!#àLÌAÁXFàwÃ|*ÿTþ©OñOQuPç›–1ˆAŒbË•wØâ#Äóöå|¶Â÷x÷ˆ(ƒ 2ÈÉÉU£Š0(~VÒ¯¤ÖÒtGn½œ97jžUVVV2æ(FqÉÉÒ®¥]¿ÄæÉ?'¬Æjzœž§ç%ÛVï~q9òO…¤BR!‘7–7–7æERµ×j¯Õ^ã^à…·ç÷‰ˆ¢ °p‚5 ØL>±’Ÿç’é²—Û-qwÛÛ"Úy ׬6RÞ²4¼|bM×áñˬ¯¨•®*®ÝA^!ð†Zb°Â2^ùo¤½æ÷]yñ½5¨áæps¸9|¨ßš75ojÞ¬¸½âöŠÛŸg}žõyÖÀF liîkîkîÿ9þsüç××Wæsˆ9Ämá¶p[0“1YŠ—×Á ü©‰GK(ÞDµU$Ź%¥Sz7¬>1£m߉”.‘ëñƒJËy¾Ý¡ hˆg0wˆþß %6Q#jDÌ!sÈÒŸô'ýI<‰'ñxˆ‡x¨h¯hì§ðB<Ÿ¯=Ú£=ÆaÆ)Ü¿®ã:®# ÙÈy‹,DÈF9ÊŠú.ô}+z[ÿmývªí굫‡qø?°ÙìGÁùI@@àgàó¤ÖG}Ôç³>û®ó]ç».Ì2Ì2Ì2ˆ b‚Ñ<Ñ<‘Âô›Ì ¿bˆ¾>ÇS² gz'MÅ%ÎçÇŽì!?Ã&ÊU6ÿv»þ³#¶:Iù6l+f&™XAêPýCB.*ïgÞÇ}ÜWŽæ°/`_À¾CƇŒßít·ÓÝN—_~|ùqÇt| øÕ>ìÃ>Þꛞ…5\àOÍ`x ™¤"go0ï²LèÒ#ªvÑLÇ~z”.š:$wÛâŽ'‚Í·«+é‹w„@x ƒ'ðýÀƲ±l,_^°{Á’KÞÚ¼©}SÛ¶EÛmIØ<6ÍÆJ@@àáõ»×í®Û]·Ks¤9Òœ&M<šxhUiUiU)ZÄ@ üMÎAI,%š¸‹ ¸ŠUh«õF=E¥ÝÝ›6öœBém³èrJ“übomˆµ‘>GŽc,«Á´"]°3ÐòO1žHð5Ý*¬Â*’D’H_a1Àb€Å€õnëÝÖ»¥Æ¤Æ¤Æ$&$&$& £Ãè0Êp Ç(ö˜&…IQ(z~!7¶€ÀÅ·QÉMŽ~À d•¶®½'¿ÀœÇ],¸Îô€ÖcÕÉ*†Ø†‹HäÊi>\Ð ¤aø>àµ/üf·t¡‹öƒ1È#&Ä“±;`Ø(Úü~%)CÊx±<´<´<[°[xUõËê—Õ/+ÚûÁïë~øÿ>Í+ìFæ,£E\q÷ Yx`è¼€FžC\&˜_àD´¥=×ÈMž6uËÚ¤«Ø‚u8Ç™s?PgôÀ,œU¸´þ±ðvüØŽÆhŒ¦~Ôú1ÙáÌð¬mYÛ²¶EmŽÚµùÐC7Ý`Ø6`ð„ÁOX®·\o¹ž…—…—…çËùr¾ŒcÄ)ÿ)¹Æ “WàåÛ-­*ȾZ¤QO*Åòòžµä“Ér•Lè8ZO«±d’Цø†¸¸MmFmum)é‹Þp¬Ü¾ ”m+Kñ_PŠBBdÈG6²‘Ld ¬¿¿’ð‚`ªPU1³bfÅL\À\`j˜¦FÃAÃAÃAá–ʧXúߢ5ˆQŽJÔ2*Ì|òQÌ=¥½ú.hnì8`DßN}Üåç*'ÔæVMãšrû†§,mwE=¯êKËJc¦/cHq[9;:óðñ·[~A·ž[Ï­çÅ÷ªFUª-Æb,FFmFmFmä‰È‘'õõõ¬ü­ü­üggÎΜ™Þ/½_z?Òˆ4"øNô}A_(²±V ÂDøýùöݱ²¯Zwù3ªE;—xÖÌ“ !OI6ÜDz_ó…d¯8@M"*dïC €ÎpC=a(þ3Ê•/*_D/Ð ôCÆ1êOÕŸª?E! QH<ˆñøŸŒ·h/G%jÉ|ÒÇ8kî)½ìn'5\´¼íèÍMÆRoy{Ú‹m¡ÚBÔtÎúÍ­ÍE÷å³Ë˜#d·ƒkD+Á‚ù8òO7 ¼øÎ;˜2`Àðâ;€>wÇñññÄ–[Nl™¡‘¡‘¡a£j£j£ºh좱‹Æ¶éئc›Žô(=Jò"»"q/²ÿ>îÂ?áÿ îµ_o?º–ÊiÛ’ëÕ_jýáL¾ý]Á}Ò¼¨b#¾¬:E+ŠC 8Pt& a+ ¥€€€€€À¿A9ÊQÎ놫U/ª^$“‡ÉÃà7¸©ÌR™¥2‹7ÿ þÔŸú+Ì6þ{j!G>“<…b¨j;«oP غo‚~ÓúNzÔs˜lÕÕ¢GV\êûÜfQ£}‡îª3<Æd9Ç]¦'± çð¸¿DP9ÞÐ…w` @è$:‰NbuXV'U=U=U=Ê$Ê$ÊäZص°ka†ç ÏžŸxf♉gb½b½b½Ô¨-P[À'Îc:1˜N ÷b!ˆ¤ÀïÈ·‚{d?f¦œ)Š£ªN×GòÉTq—a¤.·=Um#zËÞãDš£,„¡ø7ÈB²xݰü„ü„üDÅœŠ9s„ ‰“ÅÉâdÉ É É œÇyœG[´EÛÿꈺЄ«…Pfñ&§éq*ÇðE놿 Œö2t)5ç¸R¹Œ«÷l쫟sFÝ_azí)¦aš`&éÄa:û¿–,—7OÚƒ=Ø#§r*§¤šT“êìnÙݲ»M š45èÀºë¬cÕYuV½GfÌ™stæèÌÑ1iiÒÒ¤%w„;Âa™D&¾ð…¯"•ž`/ð»ðÿ÷ZȰf CJæTOªÑCÊp‰›OOQ#õ—*cÙ몥¢jæªâWmЀ‚»€€€€€À¿CrÃÇB‘¨ì[Ù·²/ $$Pü@ü@ü@â(q”8*„Âfh†fÿá±xQû ÊPÍÌ!ö8"ŸÊõ¤ã»¦‡Ü®×ixP§§îïj÷VÅÉÖ+z³Ææ¯t»æðigáÔŠîìv¦šXÒa4 ­æ1µÿðˆû‹¡œµµ¨¥*¡Ò‰t"*ÏUž«<·xÇâ‹w,Î]œ»8·È±È±È1<><><>Þ9Þ9ÞÙÕÁÕÁÕ³ål9[æ)ó”yªÈ"8° ü.üÁ½µd=z µ¨AmQ½Êþ5KÑuÅËŸ1“§n§òLÅHm—Ä[Ò¶p‚à úÂdø7à5î+±+i5­¦Õ¼àˆ>èƒ>â8qœ8Nu©êRÕ¥¼PHz’ž¤ç¿}~½2pL9*.—Ž‚™}¨…žÎá¥÷Fâ¦Ö.ææ‰{ª.6Ù³2uÖ¥½iµïç3Ém"–7á>Ó»ŠÞäó˜_C%*QÉ[«Ó#ô=BTˆ QáõñGUŽªU™8}âô‰ÓŸ§?OžîÒÓ¥§KÏE›m^´¹}aûÂö…\)WÊ•òQöÉ=rÜÄwßšŸšÊȰvó¥ÊÏV$â@Å¥Gæn©ê—öÚÕùåƒk—ÙôcF’I˜Ê¼!¸]¨0€6T!Š`ï% ðOÈG>òÉZ²–¬å-°+#*#*#¨)5¥¦l›Ä&IîJîJîB ZÐB&2‘©H÷ëC†t! Ö¡“†’âClØZÛ˜™a;-Ìßëž`æŠ Sp¥ áú­©7¶Ø%u%+‰'ÎqSé Ú »q Ïÿ¶q²øÐ½ 0´†ÖÐ^ƒN(¡„Þmv·ÙÝfc¹±ÜXîÆCn 1J7J7JŸP4¡hBQÔʨ•Q+EN"'‘õ¤žÔ“Ä b)Äwþª Æþ§üœÆ½±"A|E®˜ÓxZzÉûcØÑ¼yv„Ý)yÜøxøˆ}§ôOãbiô”ýÀõ¥nà`;ÜÇfôb2g² %¤c¢Ñ?“&±€€€€Àw}@мvMHMHMˆ¬@V +€4 ¡Z¢Z¢Z‚R”¢”6¥MiSÃÆÿ¢gþËÇV¯A-äįÈLn5¡¯§äöÛhJÓÍþóꎔ‡Ê^r»>UçÍ/³<´¢ÿµs23¹/—F¢ÑNpÇ ìþÑ¢ýï÷™µy!{æaoBÃ0LA®n®n®î¸öãÚk¿ÅþûWpù\>—ß»¦wMïšù]çwßÕ8Â8Â8‚ÛÂmá¶|’OòÑMÐDßFp`øMP‡ ÄŒ?;€ÆW4#Ý;x>W¡”Ò„.”Rš\D)¥ÏÜ(¥4rOçyæÕ»fñB'ðŸwÌ,&ÄNÔ‹mA>1~ä(ªpKÐAñ5+ˆò%Ø(6ŠâË rä,Èy«ýVû­vÛcmµ=¦h“Ãæ°9ÂX ü NàNðwÍΚ5;ûÿàÿƒÿáîáîáî® ]º6$+È ²BÑžwˆüç(=U™-¤ŠØñåö‡­lÏË,®OûL¾ñÚš±jú\¯‰òk4°Øn©¢ý;Æ´€:$Aö;4ùø‰¡ËO-_Ú´/h_p©ôRé¥Ò{‡ï¾wx_·}Ýöuóûì÷Ùï3ßF!¾óÙ=x4  aÊ üwÓS™ Ô {P*|Eñ³’J»ˆ“ä¥r±fµ[•¿¸›¼DnVþ²úaÅ”Uec…TÞë¸éIS÷Ó·˜öŠ\—sDº­Ç«°ç¶õçXè&ë,׸®’Χ4C¶G~ŽšrI´#TÑãpŒ9ʨrtD©ƒç˜Ž;XîèŠPÔ‡âßPÁ^@@@@àïÇ9œÃ9^ã^Õ¤ªIU“Z‡Z‡Z¼Æk¼Vm§ÚNµÁF° ùѦ0ýÅÞx-»(3Œ<"º\ íFÕìîX8é<^5:Æ6l#s™C²˜!ª·DK–YïUM­>Þñ¶NF,«Á´&ݸV\1½ƒ TCäQ'ÔÿeV1Ä+*~Àøì'ûÉþãÇ ŽL7uÜÔqo>½ùôæSƒš5 jæšÍ5›kÖqXÇa‡QCjH as˜“v¤i§Ê(,ÿ€Ÿ{“–Ö|‘ güÙµ4…ÕbsåëT¢Áô0üé{4Àlø`8ö“—Ø…¾"Ë’›l¦'éCBQ†¥Ð‚ú×— ÁäF@@@@à/¯q_…UX%--];¬vXí0šL“i²ZZZèèèB 4‡9̦^ä@A‘€Õ膤7¼ˆ1ÉÁÚ%aÃ_³Ì1 Ñ^‹ýl£ž&zXœ¥3gÉΉ)WÉ¢­¸´ã- „p| 'U¨Bc0chÍ ÌTf*35e}Êú”õQvQvQvׯ^ÔÙ¤³IgSì¥ØK±—¢R£R£RUת®U]KOÐôbR‘ —7¡9 ü÷0÷ÙÞl¾ìº"Ô.ƒ–^)Ý}\T›ÿüaPYZñ¦[ïòú|R?¿vuöàå¹6'nGæV2_ŒÖ¡ôúë±Ö”&ÄF›Pšx%¦;¥I÷b«)Mý<žRzË"úè§1Ç–Õ}¼}ûÒ>ÑÛÂ':6Íïâ2¸^OËH£1š«4djb±Û/›h,Û‹”°zL{Ò¸#óa sèÀ:Pœb~Sÿ-Äœ˜sÞ”¢J•*Ò*i•´JÚZÚZÚZç±ÎcÇŠ¦ÑˆFôÏt!þ‡Y 3‡d…pëÑÕÓÓÒ£˜-ÜæëO£HA۳̈·Þ§ M&7Lo’D¾špJ±_¼HJ¾"—ä’\¾¬ê¢ê¢ê·;nwÜîämÉÛ’·¥I’:d¥ÁJƒ•µµµŠ^ˬeÖÂ.pù¦g_ÁÏ½ç­æJ¸£|±øÅ“Wé;Õ_Î“Ž°µÉ”¬gYæ¦ø¨lÍÝ4IF»i=¿=fÍš ŠQŒâo 9x¾ÆV—ƒcž0 HsΙ³ ‚#ÜêYÄÌ=´g€%µ“äE„ŠƒÙ}®¯~vs^Z›ú¹)lE†ÈÏs-ènEo•|¨¿?¼Žœ²5¡ MjBM¨ ‘‘U‰ªDU¢øÞñ½ã{¿É|“ù&sD“MF4 ª ª ª²Š°Š°Š˜›37gnÎ=³{f÷̈ñ"^h‡vhÇëãÚw>d•Ÿ  Mh¢ U¨RÄú.ù9Á}?žÓ,€ie‰ì¶Ü¾l`­ü–i3µ*ÃÑMðÜð´FcÕ¬¢™ŸÇ|Ú—z%ÿm^½õ2ß¹i˜Ü5ë¦ë¥›®·ÌÌHo€$Î2ß L<¥nW£q’wvN¦Ôo;޳8¡Vc?ÎÔR­ŸØME`˜è£%ê«þY²Á¥¯ÓNÓ|4lhvà<é‰/1ù!域~T¸çѧŒŠ|¯äŽO|2¸UóP”5ìUÚÇ7_V°™6ã ¾Îö1¬3– 'È6¹Rn̹õ´ˆöƒ6ZbƒÒ;®p‹üðÏŸx¼ÐVݵºkuWJ(¡„,'ËÉrµ7joÔÞ(L,”+”,ÚÉs2÷h(7šž0Õ?©¾~Ó½q'ÂO¨‹$ᢄŠ3Ø­›V¿o¸y÷Y‡'›™fä,¨ü 7˜ê"_P©x& ÏÃ_s½ÊP†2EIQ‘B Ø‰ØyÔæ¨ÍQ›­>´úÐ*N#N#N£~Jý”ú)‹‚/ ^ßc}õ=Žì;²ïÈ>ÜÅ]Ü%7ÉMr“Ó`¬ˆ?Ëïß3¼'ÿšzGq”L&“Éd„ !4’FÒH¸Â® C&^ ÿøÁΦW‘Žé¨ Q©Mu™y¡¼òUu)¦ëE¨_…œ[D‹Mdš­Õ®1Û˜˜¸0®.7¦EÈ_YÞª¤Wá½1z¶zöÕ3ÌžX².ºªmŸ.Îü,ÞÂÆ2 Ô:‰Û“‹FþÚ†â ]LÚ²ž¶'Œº‹ã<µì£1Üâ³ažFo³e&ãtBÕFâMºnÆ 4'7†q¹æþÆð(·ªìP•W»¢l`e÷Z’)þ„’‘7uøe½¾q2=äcÏÇšo“ VlñÙ¬,«´nÅÜšõH°ÀQ{l`Rsâ‡Vt"=N;c:ÎйtR°§ð›p ð¹(UˆöÂ2& ðÛqq‘/–5+kVÖŒëÃõáú°íÙöl{-5-5-5” %ø‚/øòXÓapÀ'¡œîÄk¼ýáì˜E!›ë_µl˜pUôfªÓƒø¬Fo˜r»!É%ÑxEwaŽc<>¡DPaý‡ðãÏ‚KåTN娂-ØÂz°¬Gê™Ô3©g¢Ó£Ó£Ó'<˜ð`ƒÀˆÀˆÀˆ˜Þ1½cz[eYeYe­­­UWW“äyA¥TJ¥ÈCòâûO÷Xþ®ð¯¦p€ŸÖ ½Ñ½ŠP„*¦çs<Çs¬Çz¬W¼Ä~7"û/B¬±‹ø²XUôLTx!sÀë–ãhå|ÇAM¸˜Yãû?ÞÐežØŽõ`Ž£ :£ñ%š?wÆLÒßðó{§Ì&ùM®4Y:^j!ýX/èL“+~í’ƒe®¹žË}ÕÛW¿aýYÁ±žŸìEU[ìrÂÒ+‘+ƒÄß¶C£’ÙçGêQšnQi·s§"OÞr^Õ­ËîÕÆc…jjØò™óh··ö ´Õr$ƒDêÿ|Ø!Ì22“Åì&‹ÈÒ wÐÁ°ýúµ`ÿ÷½#ظ ü±€,x7£Ëè2ºþíüÛù· kÖ>¬}ã´ÆiÓˆ±#v ƒkXÃÆÐ…:Û–™Eâønb|»šz†Pšt'N"·¼n:ö@ñÞó]FJ<ìì—Yñm˜çŒ=i¬8®`Ñþ¿BÙNF‘Œ  .R©‹b¢b¢b¢û$öIì“Z“Z“Z³¼ryåòJ«ÎV­:+~êÌ83΄APüöo^y¬€¼Á¼ÁxŒÇøŸ6×:§uNëœ}©}©}©}[û¶öm , , , \Æe\þ~&ÚÏiÜ`7N1¯‰NÕî–5”…ç.}V> #Ù·L]y»šÇðÑ+S9*’3ÙÈÁCdÀíéê‡†ÈÆGX¡:  `ƒü3 gä_+XP¸XË[ËZKdac¡oktÞ(ÓxŠÆUµÁ*þšíÕzŠ¥ô½ÞiÍzÅëÊò*—^Xðìbþ”W“ïML"uk^˜\×å$c< òMuC'{ܵêìášiq¥Ž‹‰¿VœV´º±ÊP¦™:«R¨¹ß`–†<œFu çÔm TªÕ^ÎûP8´|Iñ²ÁÕ-Ÿç½ŸR´ùF؃zÝ®—ßOû˜–Q’ݬxÅ—ñe}«[ÊÇs1t¦b8fÛ’™D&á£gE×RWº‚æ¢7®á>²P‚rÔ ¨ôÿ65¨A ¯óæ“øTv¬ìXÙQ­ƒZµl$ÉFª>T}¨ú°R£R£R}уIvÊWpN4Þk]ýBãu3 ¼mÜLž_]*sg?¨´­Ÿ±¦èæ¦û¯£?÷eôÉ |âpQÔT‘V©²ï0àão²<Q$cšAf³*fUÌZ¶bÙŠe+2Wf®Ì\éééJCi(µÔ´Ô´Ô\^½¼zyu¢$Q’(aü?Æ»Ì]æ.#áç#ý+æÉ_~ˆ×‘7Fc4æ `` KX¶_Õ£ìöû@ÇAÇAÇÁ¬Ð¬Ð¬PïžÞ=½{’Ç’Ç’Ç-‰–D+ãPÆ¡ŒCþþþ$•¤’Ôïg»èçlÜà<ÙQä2Ó“s£a\iѪŠ÷U‰É80%¡z´öFvžhK˜…ÕQrp€!T!F²ÅÇ:…ô ‡÷x÷üE*M+}Wšý<í9^¨¼7xÿðÃ0‹MŸ,–Í220Z¤æ¤vHí¬ÎM+Õzrí :»Û…Xêå%}6/°x³ Óç½Ý‘N7 ^ûYqcËkÅÉÖ³µœ¦» p³ Ìwûª953ržd3HWýõVõŽ74ÍÔ ¨í6¶2¬c¼C±¢ì¼ ·y¬n÷ÿ@_gvËéXü)ñäãQ9ç“Ö>=”Óçqÿ7I7žxg^X'·G©ˆÂY,øcÕÁ°'É66“WØKQô¦Ûh)õÁtà œF-ä ?nD üªQj†èŒÎè\á[á[᫬¬Ìö`{°=Ô/¨ŸW?[I*I%aÖ‘–$›+¡ïi/õɪA¢Àµ¶Ñ·¤Ë´Œ´–K†’7¬*óà¨û¥Ï­¸t¤KúvÓŠ,•wåd4Pƒe¨D­0ðÿcxù‘7qQ Tè,:‹ÎR8SÖ¢µGÕŽªUË^™½2{åè½£÷ŽÞë8×q®ãÜÙV³­f[­5]kºÖôèæ£›nÆflÆf²‰l"›è:„QåÏì |nF0‚º£;ºÃŽpÄb,ÆbÜÄMÜTÌöáŽá:Þ:Þ:ÞzMõšê55Ñ1Ñ1ÑÑ<¦yLó{”=Ê•_”_”_„¼à¥‡šŠT¤*Žøý˜øyÁ½2p¸Š px’²PYyJ¸;ô6<1ç˜ ä4‰3nª­±ë- R‹Yh‹&˜ƒkHWôÃÛáÕAÔQ8 Ä@ D&2‘Y±¡bCņWx…Wø8ðc¿½Mìù²ñ‹Õ—)¹»?½ÈµÎyõÉôÓˆW·>Îùâÿ ñÛÃS¨öTé,rv¶bt¨ËÊKï~ãÓÎffCŠÌpH¶Ú¦×Zwæm ‹S¢ULS@’κÛ°é`pÖuÆõD;'W—ªWEÆ‘¯¿d½ùöjÌÇ‹_tSû?—ä^¼iõðb–GZÉó©¹gªíjÕä×é1 „P@[qSÌÄDöëÍ| t'uåJ¸ñÔœ~;*¶&éï>^xWtEWlÅVl­*«*«*ヲ§ÙÓìiÕªÙªyüsƒŒ!uÈ-hцôS|ÏAº>¥îE–÷Ð@vPžû*þíúB‡ÈãËÛ]‹‘s ]Ä“UÈÃ|ŒF¬|ðw‚׎óšr^Ó<s0‡1eLÓä±Éc“Ǿ‰|ù&rê멯§¾ö;ëwÖïlœUœUœUÝuÖ¸Ön­ÝZ»Ê!•C*‡°!l"¿)¿)¿©èŸ(båýñb«²ÇŸ Œ×¦ón£ð€‡rsÉlÉlÉlãCƇŒé/Ò_¤¿HïÞ½*¥*¥*¥r¹‹Ü¥t{éöÒí¹+rWä®(é_Ò¿¤¿è±è±è1ŸE¸¢wEïŠÞ|o´”–ÒRaºA4MÞò娸àóîk(]`3D³&~F³¾n5Á3¥ýV4¹o¿Îj‰bþœA%Õ¥å€€ÏøŒÏÊMÄÍÅÍÅÍ­¯[_·¾îËú²¾¬ô¼ô¼ô¼TUª*U•n“n•n Í Í ýèóÄç¾O¢Ål óDuU5?U÷îœ ™&ÞÂ6ÕߨũºH¥žFVsêîwèÊ¢åVÞÚí_2€«zéíhJï<÷„Ò;Ïǽ¥4eË8GJïÔ·ŒÒ[7¢*Ç\̵ýãÁÃk?²cvnk‹Q¯:NrWñ™áhjrÁô‹~²zñ/ÀFL\²ïI41ÁNTã2F#‘† Ì ­tC üIlÜþÇðvÌ—p —ø £^F½Œz… 6*\5\.±?gÜ~Öa<ÚðmÝnyÞy¥·cbêÉz\+»°2ôÒÞÑ*Á©n^ ù6ä.éó£nRðÑú£øÉ˳€YÀ(vñUžª }úDº]º]ºÝ7Ù7Ù7Ùæ´ÍQ›½ª½Tõ$Ç  Œ?éwÒèâÚ??) CÃiÕmÒýOØjNß÷‚¯î1Ñ\ÇÖ¯ß×?xl ¥ =cSšT'ö¥I-cÓ)MJŠ3£4)66‡ÒäÍq[)½QõñÉ™!}.ïõž–Ù"x¼Iâu,Ìßó²ÕjmõL•¦ÿbÌÇ0kÈ\v9s”,'HÜEG4°àþéîApø-¸‹»¸Ëµ[j·Ôn2‘LF ’1ÿg®Bcf$‰f÷37ÈFr—ôE¡œPfд tóÀÝ!î¿°x]¦Z¡Z¡Z¡_¹_µ ß>:ÜÓ}µ‡†Ç~MmõÆ’W)Ö=éöŒÒ„º1ç)Mž7éÄ®y7Ûìf2_Ò“ a&’hÒo1KÑ³ð¤ø³¡+f¶aÓ˜iÌ(¢ýxßô¾é}sÿ™ýgöŸI·H·H·¸¼ãòŽË;ºLë2­Ë4ånH?ÒôSü¡ãÿ¿ÖùÞxk bCÄDLÄ?m®Ú[µ·joËDËDËDÏsžç<Ï5©hRѤ"¢wDïˆÞÒiŒ4Æg‡ÏŸ¶}mûÚöåÅ=2ŸÌ'ßJ>û°û01Q! ê@:ÂdùU0ÓÉXRŸ/”ØX(¾5•öÙ#˜¹¸Ÿ¥s+iÍòk&óU¼å°$ôý_XiÓ§ º  ±$–Äò§ ¯^7¼î2Ûe¶Ëì&Ó›Lo2=Ì'Ì'Ì'ônèÝÐ»ÒæÒæÒæA³‚fͲßb¿Å~‹¦³¦³¦ó7]ð ‡Óp'H YHÀÞdžÝ¢æly÷ÏOSÏ]³J²¾%ãûÁfÆÜÁƒŠü™ÓÖ Eí,_îߣÝ/Ò¹Q{(½S6.ŸÒäqë)M7‘Ò¤)±_(½Ý1F—Ò5Q™o?ï1Ðk¯Ë´5- Çèvòwï&äQme`:]‡zÑ/Þ0&çI+\gö1 I2éŽdœÂB´ƒìK´°Tÿë­ ¸ üô@ô1ļ\ç9Õó’çÆæ§›ŸkîòØÓÂçÊò¡cç4«Giˆ˜sÜ®7¢Îçè½5dSýÖVbݾò™Äâ…¢OAdÿ3£¬-Ž@"ØÑìhv4_aqÁâ‚Å…E¹‹rå¦ÎI“:'qOâžÄ=±¦±¦±¦jÕ:ªuä[2Ý™îLw8Ã_åœ_/Ä+ëÔÝà7Eˆ‘(D!ê§ÍÅÞbo±·áYó†g—:.u\lll~3üføÍfëš­k¶ÎßÕßÕßÕá’Ã%‡K†ï ß¾cv2;™?stÞ»c5Vcµ"¼ãOÏJàW]ÇÄYP‡"ç³B£aŸ·MZÕK“óœeÝ/žÖÎËtcEqÛSøöì*R@¦ü&ͯ^Ñæ4|p~%t5t5t5œú;õwꜜœ **ÊkâÃ:„uëð$àIÀ§h§h§hí%ÚK´—ü̱x‡Z¸À/±ýÉ%Ò·² E$Šc®c%ºüÒÉÚX›†h‡Ïò:jÅOé‘èvòÕ|YÛáyýW½Gý¯¿‹2§ô¶]t-¥ÉFq-)½³yÜ JS—¡4ÍküÊG­|T»½A»c׿žkã3¥[ï<Iµë ÕÛ*{Ù½¿xÕ$¸(Q{ñ`m˜^¤/ÑCúHŒ"Ëžp+ü·SRÜ~ ¼á /å Çt‡™õ77ê×èQãmSÛ<ÛÔ˜ë%øjîÁÕ ‘]9÷›^ÑIØÀ»Ö|{&ÿÑ€ø(ðçç'Ofò<$ù²ÊI•“*'G{Œöí‘”‘”‘”‘Ú;µwjïå6Ëm–ÛXž° ¾ëþäºv-*I=êu7Ê6p½aq¹a¶­Žáš§êë×5¯g¸K£‡¾›¡“F}Õ!5.5„~±zTÃçf3Û‡4Ya´*¿êy­má’÷U*)·ž&|Út}xú‰\ÊÍgg?Ý|_•Û¥”äX4)_!Ó“u1¿`À¬ EĆŽÂ z3° w°˜îC]‹ãx€ƒ¸†—¸Œ»x/D¹ø]ùGœ1Àj¨b7³ÓY†>åZË«4n­19èâ§ßhT®Å`“Ïå»ô¼%{ÙpF¯vÍêðÕSDK¿­q­Ãt%äÞÜÚ ”¢â/óû{C9œ4 A]©+u%±$–ÄÖ ­Z3tÕ§UŸV}ÊZ—µ.kÝðžÃ{ïjjjiagaga·ôÔÒSKO¥´Ii“Ò†éÏôgúsé\:—®Ðèó/¼|4@ÔC=ÔC‚„‘‰‘ŠS¸‹»¸«V¦V¦V¦Ÿ¤Ÿ¤ŸdòÉä“É'mV›Õf%êu‰º¬§¬§¬gÑ¢¢EE‹ c c cs5s5s5+NVœ¬8IûÑ~ô«éÎK¼ÄKd#Ùè…^è…ƒ8ˆƒJQõ‰ãˆ?ì`‰\L@wFL6’þ/wMîÔ”Ò9¤”.˜?xÓ‡>&M‡òÍEjŒ ™]¨ÿoNÊï¦üÛ¡’C2êÇÔ©³]n»Üvy€M€M€ô’ô’ôRèÃЇ¡¥[¥[¥[C;…v íäúÄõ‰ëÃDÃDß‹ó Ÿðé÷Yþ”FO`>Ú2.d7ÊØ Ìy²šñ%‡ÿU^Õ'*/Ù"ÿ¹ ÍnDZ·«qµI2nlx—{u7-è)w¹¦5ÖÒd³¸Ž”&]ŠÓ¡4ùZÜaJ“÷Ä­¥4E6n$¥7ëEÉŸ”ìÝçÙ¾ÖÓO·¸4á\Oïaás¼N×±×®Ô˜®²ã_<5ÂÉYBDV¬%¹ËÌ$ˆR±=¾y¨(!hÜþ+þ‘¦G3˜¼!. !£qÈ!¾~nÀÎfÛƒ²ïPJiÂ(ùlJÓ](¥ô@ð=;ùÚsTöÌz&¹J& ì†öo‚²¡ /øV¢•|…;çιs{<÷xîñ¼ßï~¿ûý.§]¾ù~‡;.u¸ôcçqž­e‹²Ùç¢QÛ]. ÿ™C‹‚EÁ&–&–&–N>N>N>A{‚öíiú¬é³¦Ïšš55kjð)àSÀ§úï뿯ÿÞð‘á#ÃGŒ+ãʸþÌ™ó>Šë±ëùDœßÌyß|mÉDÎðå¤7ÃÅm»Qùœ‹Ò(÷aP£„©C^´ö!k˜:Ìp|F8ã&Æ¡ÿp¢¼Þ&0A´Aä!yÊM$·$·$·¬3­3­3ol¼±ñF©ÔGê#í.í.í.夜”kò²ÉË&/=k¼êÊÕȯÿàrNýœ Í}•)~,Äû;Á(}`0fŒcÆi0Ä`ˆÁøÂøÂøÂ´Öiþiþ‰Ë%>3vt»Ñí˜Û?ß%)#i$Mk¼Öl­Ùö‡ìØð]ä»ÈwQ¸f¸f¸fó}Í÷5ß¼1xcðF>üº™ª™ª™ªä”ä”äÔÏtwWq-Ñ-r‘`úò‡Á‚!Çð ;a3Ÿ½4`BË…”Î)PFåsí¼|pa”¬Ãk] õ/j±Š 1 ¯qò>se1z6a.â".*7Ù‹ìEöV{¬öXíñzèõÐë¡´´´tžtžtž´­´­´mhEhEh…·¾·¾·¾™™™™™™Š¥Š¥Ê·n²¼#Ñ2,Ã2儽¿(ÊóµJ:l¢ŠŒcELsÒQ”Ìnb¬É b…_¶bÏ#“±Ë«Ä!ÆDc´oǦng7™Ó 7Kù¸¾C÷Íå»/ÌYLiªýøF”¦î߉Ò;7–Ò¤Ô¸º”Þ.IéÍëÑß~Þÿb ÿ¡¾³&·j<{ÇÀ ~-:4êl·«ožzÿBCO,ðS˜Õ¤”ÔeüÈT¼Ål„à V?.7ãwkApøUüd%$ˆ=ΓÒ§•ëëeX•^léB‹_XIéõÎC´>~Ê9~ûCòTJ)½S[;´úÌ‹¯(èÜ|eÑçšï<¨É…zZfVúeÿüôÙL9Éæ0%ä,É$‘x‚¥åæo¢¡w$?š:œÅ* MbG1ßDÚÖ¡!–\›z¡‹µëŽ& »@iò½¸K”Þ>û”Òk¹CUÞ¦¿O½^œt…kÇõI ª¹]íðB;Ã^yøìгƒø~Ø•¢I¢IÂÿÍù‰›)¹B®+Ê5Íç…} ûrabò¹äsÏ (¥ôÍiJ)}×™RJ_Ô£”ÒG[]muÕ¿µßV¿­ ê6ðkà§¿@þ‘ºH]ôm$xÞ>Zéc;Ø —âO²à¾ôrYàJçF ìÅ›U¯ß„ܰIo{›¸/±¼h²\1¯n“ˆô/0é¢!]¢Kt¿ùÇ“ñd¼AŠAŠAŠÛ:·unëšø7ñoâ6 l@Øi¨4Tú2ôeèKÿ\ÿ\ÿ\Ûž¶=m{ªQ;£væ›cÂ)œÂ  EÐI刭ÿ.¼Q ¿Á*…',Ès2؇Ì;rHt•]ËÿÒOÕ‚TŠYι¸î,ƒaÃ϶³ruÛi2¹Qó†÷¯m~ØË¤HzzîðJ“¤±9”¦6ßÒ”¢q])½siÜ}J“Ôb÷Ë"®ÆŽ9úåð™+#v%NY“Öµzþð!³ÔZnjÜÞ&¡ÞxËPÝAªÇTV±™?sxGØÁ” 'gÀ‘Ó¤%®‘&(Fÿ)åÓÝIºótÙίó¥NxF“—š/51³0 M†0E6¿7Ê’W-? ? 6a'°B;…Z„ZÈ^±lº¦4 ’¤"Ñ.Ñ®ì:9s&Ê.ɳåÙ‹X€ôDOÞj€n¡[èÌÁ̆ùÏÉ¿!¸çˆJWt0[åc¸Û´ŽF‰¸ZtGç䎘à&NØLZ¡,ÿôR–r¢-Ø‚-Ø…]Ø XÀ}Ñ}a kX/^8¼…(D–W–W–—E‹ ÇŽ3'Îg‹³%S%S%S-OZž´â3Ê„0g¼Rb°ƒÃh‘ÍDƒêc­#Å-¦Ñ*ÓÅþ¢fmv4µï9Á¯g¦÷›FÃ62ÝÈÏÊ´˜Ö•×È!Oüò8'gãìˆíç“§\~v"s€Þt$›Åê2ª\y&w²"­Ê³jôó/L^¨5}ÖtgÓŽeN¥N¥—Þ\þxù#q IC*§r*ˆìßüëÙlÀÞÞ›Å9rŽƒš8hbıfÍ›5/[V[[2¾X­Xãää*Z—_/¿Îx0ƒ™ÁPEC4DŠQ¬p*ýwå?éê¤d*Óz¤Ó¤º“飹ï¬Ì›.êÓ‰Ò͇H»åºÙ7áÛˆ:1mÈ¿ð¦Šò–ô ^fç§µšó4çiΫ§WO¯žž„„DØü°ùaó¥šRM©¦´—´—´WHbHbH¢ÛB·…n gÎ0œÝØÝßq+¶b«"?™²/öo±9ÅÛð↳L7Ò[t‹]ÏX‘ `á?ïÀUÛö„a¯(t¾äÑa«û„ÁMÛÞ^¹z@×¥£ÏˆÓœDÁnðbZ1­˜Vü—ýõ_ÔÑ˼—y/óVÌ]1wÅ\¶Û‡íCV“Õdµ"Q¼Àß•¯A¨Y°ð‡?ü•s‘¶¿ÞþvûÛ‰‰Á‰Á·:ßÒ¸¥#Šª‰ªiÔÜ;Ä;DäÇú³_ýÍ|á Wa8ÿºü+»RX©ò¢%ŸÐD#ŒNª‹ù"]¦FëŒè<€@ûÑ®ãÔ_t<”5ñ|U}èC_‘F8±ˆE5ªQ]6¥lJÙ”Wx…Wø8áã„LRLRLRÌDf"3‘ÚeµËj—™;ÌæŽA+ƒV­ô¦êMÕ›Z<µxjñÔ¬ì¬ì¬ì¼5ykòÖ` b â®lL“Æð„'f.5—šKMýMýMý³¤YÒ,)¹N®“ët]D ëÝßÞâ¼5¨á¯5§Â©p*ž ž ž £{î5ºéOzÇŽ«p¡4Cο.ÿJpÏGõWQ¯¸kåáê®Üzùgºl† †a=aŽîµ–’Pƒ*Tˆéˆ‡%ô (BÉ_xl”¾'x‚'x†gx¦ØNšŒÉ˜Œ¹˜‹¹•L%SÉd"™øØôcÓM̢̢͢Ì>˜}0û y\ó¸æqf$3’©×@¯^]©®TWj9Ér’å¤Aƒ>}Éø’ñ%£&¹&¹&üç§4Gs4çmñ±äù3©A jø×‰oÊÊ5U¨BÕ7åÊŸ|và¾ÐJ¸a-¼h–A†ZÔ ž¨  rœ4Ã5¦ s•0$Hײ€ÊAµóSñ¹HÅsäNßó!Ï zDe6›VWËlÎò&uÝVY, >à¦iéëlX÷˜­åQ£‡š9ú±†4Õö™o"3ÏÐ 1E{Ýåà^eÙ¬g“ðY •שL¨=žu3ß±ì~êýçÃso^Ú—öä]ßô¯Z}>ünk®géÎ/ ÊšU{É ßÆÀ(ÅxgÂÈpt)àN! o°šÁ:«pëpñy(,é(ç1mŽÆ¨Gîc úãL¹ÅEpô"Nhä:Ô¾IÇ;pþÇÚÿÖ¬¸­j»¨Ý(ì••¯¾w+L[qþð¡ÙÛÎn}¤]^]yµº Þ(Ø@f6Y%ïÅM§ý@p£}K”^£×è5~=ÿàúÁõƒëÇ‚ êt¯Ó½Nw›Ó6§mNgÕ˪—U™ÌLf&Ë©œÊ…•ìï¯eçEöýd?ÙOU¨ U±r³r³r›òfÊ›)oô·èoÑßr¾çùžç{9|äÈ‘#õKê—Ö/-èUи 1NÂ~˜JgШÀ,Ìõ¯Ë¿Ü‘ûUø®iÃÍ¥[ ÞWªÒM—1my²ü •©^}í;¨Ä9TɃ¹¡ô"jð °Wqço5Z¼ Ìk»çc>æc%Vb%6c36ób½l©l©lé‡K.}¸”ý"ûEö £¡FC†Z„Z„Z„êXèXèX3bFÌtwêîÔÝ©ç¢ç¢çRr³äfÉÍ¢9EsŠæpŸ¸OÜ'ö û…ý’{<÷xîñ’½%{Kö¢=Ú£=.à.üæÿ©=ìa¯HeÅ¿0´Fk´†7¼ˆ7ˆÓÁ;0ˆ¢%LcòÄ‘eL=²E4æÊYî,]WQÓ]îý ïPˆgoßu*t\ïs ‰'°ÖÇêIŒ¦º–Û 6´õêãÐÖ¤Ü%¹îÃf9u"õêǬÖHÄF¬–Æ{•ó¢:õ¡óQ­s}»;†Wzù·)n¨QôÅ·²ùƒy)ùë3d/)–Þ}ú""ïz‚ÅãÙ÷µ_eçµ®í.kÅ1pÿæ?s°Ö0d/3ÉN¼ÆGs™t(Õ£sè;tÇ' Rå¾#øUÈ[ 8’J†ã3é„:xÊåR'4¡(Ü;Õïe¦Ù»}g××½ö„9ÜV¯Ô¸%Êäøq½‡‘ïCòÖWþ°Æ÷ؤ”¤Ý]ŸYgoû¬WœƒmÀg±¡c¹L#¿ÍYÓÑ #F~GTù·vÆÜî w† &ƒÉà¬Y²d'f'f':uuêêÔÕFËFËF+¡"¡"¡‚.¦‹ébÄ!qÈ@­ê_¨@E!²o ÈNÃi¸Ö[­·Zo'wžÜyrgûrûrûò´óiçÓÎ/y¹äå’—ÆÆÆ¤éAz”¾.}Uú êP…*ŠQ„¢ÿpÇ^àOÿÜï#Å|±º¯\›++ê]Ý­ö¼ažÊ%UoPÎ…¶0Þ§IÕ&òšyIWS{.»1°òOYæòtç5ßC0C u¨+¢œÆ#ñr¹ƒÜá>á>oÿ¼ýóv½'zOôžX>²|dùHç²ÎeË"o‘·È[ë™Ö3­gº}tûèöA(BJ‘F¤‘I“.&]jœjœjœ0#1RþBþBþ¢¶ymóÚæ²7²7²7²«²«²«µ›k7×n–Ê e…²N²N²Nµµµ²Å²Å²Åµåµåµå2™¿ÌŸ èš@h÷˜{Ì=¦géYz–¾¦¯ékzŠž¢§p÷q«•>?ù×5Ÿa…xøËùzíÿòò#¶  s•‰%†Ìc2ŸØWß®= oœóôà§ äOñ ˜qêúcèt×ð”êÝÔ28­°Y®ââÞß²:ø€[ªå0»3:ýtWjl”ô%j^S9®vK¿†ScèÍV¿Ódqè…Úõr¿¢&Ë{²¥/«š?tÉx?àÂ¥Ôòwú)ŸV~ZöÞ0·Ké•“¥ «råœ)íðÍÍÎ6&¹tÝ}œ!]FÒ T‚±HG>+tóù(þštZ@@à/H‘i”€`:ÀŸmÄŒ#Óå8jįv–iÆouÌÇ^íjëµjЀ§ë.Q÷@ûê…µê+c+ %TÝÚ<òìýgõ–_>°$5ç“[ÁȲ+NL*ãBzs;8úŠÂ]¦QŒUWÙˆñ§„#áäyGÞUëTëT뼎ÿ:>˜“`â í í ÍV°l…%‘FÉ{2™E–‘ùÀV±þ.N±ÿDÉíŸ%}ˆŽœ%í¸õÔ‡Þ’¯çѦ&1úÏ´¦íÕ¶Ê5slŸNkÜš<1˜£¶¨m.wä½å #JŠj»ïŒ¿¸ÿQáêÙG¯¥_ÎøüñyÁc¸!ëÙõÌ!2ó ×è®·–êC /!Bª!û7'þ‰`A-¨FaF½žðzÂë ¥cJÇ”Žiø¾áû†ïµmµmµm‹2‹2‹2É2…Ld³¿<ü%ŒB¢˜Ì f'ãdœl°é`ÓÁ¦m*ÚT´©(S4¦hÌ’K:,éù óAæuKuKuKñSñSñSYSYSYÓÊ Ê Ê Å¼ç eþâü Á&â=>£DU5‘ÛÊÛç/+_Q=›Â<‡„{Îe6SªzXÒVÔ“Ù^=´V†îÄu`ø.Ê•àPB %h‰–h 7¸Á‡.hUЪ UAEAEAEè§ÐO¡ŸØ-ìv ͦÙ4›YÈ,d–Õ/«_VŸÞ 7è ±X,‹É²‡ì!$€àÞáÙB¶-¼éù@>xƒ7x÷ÄtLÇt2ŸÌ'óùÝv7»›Ý­R_¥¾J}bH ‰!ÌasÃÆ0ƒÌpçqmÑm[®#1#éh:šŽæÒ¹t.+ä ¹Bn·ÛÇùp>œw…»Â]‘ï’ï’ïâÜ9wÎKâ’¸d.Œ ã¸*®Š«âîq÷¸{5Kj–Ô,‘Ý—Ý—Ý•ÛËwÈ&É^Ɏ˧ʟËÏÊÊ2deIµjN×>“…ËûËfgÔTùìtí«䃸váXæ$¹loa¡¡;Ëþ¢Å|>ŽMM7HÝ=wYÎp?i£MªkŶl=Ñs•[l)ÀödLëVY¯×Ë« »ƒ†Î;— Óþ2³rͳ°wž…þoZå4+Öyà÷zå箎¥vxgvOú²cžeÕ’šòfÔ‰n…7¿–ràÈf!Ã1ãØÓì:º»±…-勊Ù|Q¶(Y4æAêPG*P!,7¼f]98Ôƒ-¬ÙL:9+÷à´©3|(4ª·–,Ù¥cÏãý5[:70¶=¢ïˆ'5ïkSšM»rã¹Qjs™dL›_´³or³‡.¯oçæB.‘ö¸m¸„òÕÜ$:ñ‹À‚ƒJTCöoŸ¹rÈéú€>à4÷ößÛoÙ‘²#eGÌך¯5_«W©W©WY$*‰†0„á$Nâ¤pÙÿ’hBš0€ Ø·ì[ö­\&—ÉeM]›º6uíµÿÕþWyO†õ©ëS×§¦Lr$YV‡Õa Kدú+>âÍ(ŒÂ(ÅÎ_ÃÓä#ᔢ¥ô1}LScjLùØù4’.¦§éêJã1 Ѓ†ÒÚ„¶£i]ŒÂi¨àÝFW%äæÉëÈä­+žWæU‘²mªu¸~ÚZ]ôØ;·ï绫nõÿ|D[O=F´Ú½žíBÝsÒD‹× =ê^ÔaúRgx³Ñm™x9¯Òšy%*QíÈVºÀ)Ü4ß.ÏÌuÛ!¤g½µzMh¤U|©|zµ4uÙsÍÜÙæßiøÎäþûWÝ>GgëÆTîÊhõqb!S•Z²²d7c%ß/¿WÜ>ÿNþyÙY±(G´E®,²óòœ  ø]`”öÀcš’RЏ“ØÄ‹ì:¾šmÔT[/ ¸a×}Òê^©Rœ'ØG럸IÜ€ âÖ¬Žh虬Ì ÉžN©âÛÁ®¼/ f¯3wÈ.FÒf´)=/¨CbT"µŠ£Ëÿ‹Ùü„O8/ƒ ²œå9Ës–ç–å–å–éŸÓ?§ÎËÚËÚËúÙ³7f?þï¿6ÁŸÀŸ~G½ e(#Èr@ÞJÞJÞÊýû!÷Cq×ã®Ç]×ÈÔÈÔÈÜÛmo·½ÝeÊ8”Áì`v0;8KÎ’³Ô¡1Bc;ˆÄ*¯,¯,¯”ϑϑÏ6´¡ø€Â0ÿÕùWûà Oö0§íƒÓËÞ·Êõ׊¶ :ìl^ÃU.®•>‘-¥Æ®v«|ŽöÊÖ(©S>˜Ä ké2 Râ?é…?FŽ‘c¬kÀˆz‰z‰z±rVÎÊÙ!ìvû™ýÌ~fKÙR¶TQŸÃæ°9"M‘¦H“íÌvf;³ÍØfl3QkQkQk¶[‡­#z+z+z+Òé‹ôYSÖ”5eÛ±íØvl(ʆŠˆˆ0˜FL#ÜÆmÜVì?ð:~^ëÏ—-a KØÂ¶Ä˜cÔG=Ôƒ La 3A—PrÈTbC‘2rÑœgyw‰;ÉÕå^Òûµïå\³—Ú.TôšÉ@';]*™d[e"W;`ßÄÌ_=Ëy‚U·v#M ê§›£õB|Àr `Ò }ÈA€8‘FkÏx4ÜüÐémeÎÓË3}%“ºHÛýÁñrýíön_¹Qp3?É895ÙcGÀ EKÙtæ‘ü5Ê®£E¨°¨åh ûÙÿ[”B7¢'ZÃÕcº‘ò5\ÚW¹a7«°MN‘ÑIݧ{=÷µhØÂ¤PÛCV0£ h¢v¥ë½›Yí×&Ðüè‡~/Î`|™Gd ©äÑZ‚»x‚LEDN)AÞÿ >L°.t¡ËûPM7uÞÔyŒ:u2:ïqÞã¼Ç¤a“†MFú>¤ÝEwÑ]ÂtøË ô¢E^“×ä5µ§öÔެĬĬ$¾"¾"¾Â¹›s7çnz\èq¡ÇÌi3§ÍœÆocãá•R)•:^q¼âxŦ›M7›nO<=òôÈ»&ïš¼k‚ÇxŒÇ|ôw” ä/ñï»ç_G•É@Ó„x±\•ªS‚Aåõ*üp‘-anʳ¹‹´‘–ŠÊD¶­(ìïê7Ð…º0¸¿ u¨CT“jR -hAKa…f S˜ÒBCp ·p H Ql¢ñf-FJc¥_c˜À†0ä{SD,„AD;дƒ ÿø(˜õ+E©ÿ©¿+º¢+óùÀ| §È)rŠéÂtaºm¢M´™@& $£Éh2šÉb²˜,•‡*UŠ‹‹‹>ˆ>ˆ>ˆ>Š>Š>Š>‰>‰>‰f‰f‰f©˜¨˜¨˜°ÓØiì4•k*×T®‰²DY¢,bM¬‰5DRC4IoR‡Ê `º1–d?Ù@J˜L WËP fŸkÆ©vE&Bê|¬üÒ™½ÞgW6âÒáÇmKê×X(ÊÔš©v˜}iÿÉ´¥Z KQ—êmœ$–úêÕuô ·IF¨ÏVQg6‹—«:0bËε:brY¥r@¼´ ËãgbcÝFs*ŠPÈ-iæÝnN»eιÒU¡Þ—ÝZ|¢2¶ÆkÄÛ‹YL&˸çô*–ãÒQ‚ Ôü4Ž„€€À¿ Ÿ © 5‘6DŒƒÄ#à _ε¢nÄŠt$÷[´ñ˲ïÙÃÞ«m°¶k®™ ±µ Gyy<Àöb>lö2:ÿýì†;—Ü©9ó1áù벪5:µ‘€áyN^ ަKÆ}¤hj”\K ‘ç^à¿;ÊyržœgÒ¹¤sIçz¼îñºÇk³[f·ÌnOâI<©õ¡>ŠàÅiHCš05þÔ(‹ìÎÄ™8ÓTšJS5£5£5£'˜<`òçÎ=œ{<èþ ûƒîK¶-Ù¶d[åçÊÏ•ŸÉ.²‹ì¢Ãè0:Œ7ÇU-R-R-’ߔߔ߬wl*PAwÐtöc?öcöaøLT¿Ï*מiÏ´­­­õõõeg²3Ù™¢Q¨@|B|B|‚ `ØñQññaö8{Š=/®'V}7%ŠDµ¢IÌ}6ƒ­#šÀÍÀ&•Â…¤U21_Ï»‰ÄìDæn]Æ´±F+Ƕ–×5÷»ä[ÏÕr³¦ÆKÔ-m+´îTn©iî|ºåÎg'¬µ;«~‘\Ýš4ÌWõ®ôûœWž»C>êÚ† gÙ—›NäÝšýZVêR1¡æ‹âÆË$#ñˆÔ…)´9oº>|üßPc' ðwBùN‘Âõ˜j2“|¤ÁIãéú#ù†!:'¬'DJ;>r¯×åhÈ2»L€il@nÃâ•"É]‹'sí¶xÑ|¢µÅô´óCR³©¶³l‚báÔd-ÈÙrù`:C0 ûÆ0¨úÑæ÷ù§#™H&’ÛÏíçö;::n¶yØæaÅ'ŠOŸˆMŒMŒM|jûÔö©-I $Ñ $Ìü‰çðWs¦.è‚.¤iFšÑ[ô½5I2I2IÒ¥¬KY—²wäyG&^Ÿx}âõÙ/²_d3ã™ñÌxN‹Óâ´0 Ó0MR")‘”xºxºxº¨”ª”ª”ÞvØýa% K–,Ä]ÜÅ]žÀ_ѯiD§"˜{eÎ\6–Ë÷quJTIGäÑÓXjj£-×(|ò(oq‘ž rüIáU믕>ÿüºóvï•>|æ¶ Ѐ†bÀ ^ðRìð¶tÊß*—ù¨´|ʧÚ_ø(§‘âÏ™/W¡ UÜqî8w¼†ÿ 5€RH¿9õÝØÝŠ²Ô V”÷ákÒçdAº°GØÌIö(Ó…mÌ3ç‚ gÌF¦ÉÃÏo‘¶G^P}2—Ì$3Ù&.ÅZœ^È«2¨W̸5Ε=W {&®)* ºD¥J¯ŸÇzoÃ:Zð^d—›žü¬ù'ÃÝ—Ö>;±ÙúôÈÇEÅ6åãk\ø…ÝÌ|$'9U:“ZQºЏÎ5),â…;J@à+ÚЀ%(G5‰"¶¸Æ˜¡ä´|×’.E€‘ήu«MoÚÿjcÛvOŸÔ•JŽªIXm@6š[`:[ðáuÞ¥Êüø.Ôï¶ß9î¼óŸ/Ñ¥ý+›ð!oH$S1À6™•¼-µÃÌU(»~w‘]±&WÐ ZÁûå\ɹ’såÅÍ7_ÜtMsMsMs¬ïXß±þÓéO§?Îçí–srN.ˆìVx‘½z ³ŒYÆ,ãÌ83άÏò>Ëû,ïТC‹-JG•Ž*µ¸Ïâ>‹û¼Øûbä¹Cîð!e303Ô©=R{¤¡¡QÞ»¼wyïÊØÊØÊXÅdv`‡0ä߬Œi@ð嶃ê.ç¦Ì:hXuäô}nP:÷ÙÀ}¯= î*–¼óÈÄ^aÜþ+È/|”“CÄHŒÄb,ÆbÁQl—¢¥Ä’XK‡;îIz’ž לˆÿñyíÄ-¾Ðøh+¶Í³ýƒ®V\­Ø¼ûƈÌëôìÏ íΆòðË "Ršø æ¥‰×b“)½Ý*Æøý¥CAƒ¢bçtëè¹Õ:Òd·VªrçŒ79‚jÒ°X‡ht‡Â½ŽBM |—ðšuÔƒªp ±Œ#9ø­Ù!¢ÎcCëÕ‘±#š=-ó½à<*ŸÒ$÷ØLJoŒ;„Ò;’q{²ËvnÚˆþ©Yz´íÕŽ+÷ 2dH)¢Ã/øbˆþ_nŠ?>J˜ñ!>ŠŠuÓ×M_÷êö«Û¯nÚ¿†Éô&ž0J¹šrÙåÊQ²Õr¹Ê%²“\ðªÆªšºêG„wÿ3~IÓüïî|ÄG|Tý—q—žˆ@„€¯á£ýð¦D¼o€La ÃêJ‰ž`¹ÌèßäFgŠN9vÇõSÀpiåâôÌú&Z§n;Sqø††©ZA¡'è_fΨvQÙhn>G';><ºôÙ¨Õz¹_8T~Ýý•hó†Ó¦ž½ŒùhøEÂ[¥'¬Â<¦ãNšÉõ¹4zkq éß¸ß ü]Q2G!«I0«ˆ'WåBéRXj¾Ô¨­ö²è]Ïxè_1ÅÑÅpáBµ[@íù€6§óJl*.Ê;î°8Öå~Új‹#6÷å/·}°+°À:`\Éf¼¥]±eSå÷©vàÕj‚ZÈþIj¤ßŸÙ˜ÙÌUæ*sUÞ]Þ]ÞýõÛ×o_¿­4«4«4s.v.v.Ö¸­q[ãv¹W¹W¹i@¦ݟ¥L¨L“ÇäqÑ\4íbábábÛ,¶Yl3­nZÝ´ºíß³Ïþ=û öì/`Æ{Žâ^)}šÀ&´7íM{#)HQ V V ægH¥A¥A¥B¸OÆ“ñ´œ–Óraø¿#˜DòQ˜"¸_²‰>‘ŽLCÆÃ¸Òä¦ÉîP;id˜e£¶‹‚¶ú!èJËg':pžÔB§äËù²‘'(Mzg@ibFìVJ“Åqí?«:<|äú±±a]¶¯ÛÖ`Ê7o@6£€”Éx SèCj@$èáþvw:T¡=hCƒ©e:‘qÊMLÕ ì4ïÍsöCHØÇ–GFMiJ—qç(½±hìJ“râ"Êw\:>fþ†ñã÷Dô·Ÿm™¬Ÿ¢ÜÛ–YFÖ`!F!¦0€¦RöÔ¿À*Ätgº3Ýùóõûì÷Ùïó5ïkÞ×¼Ïë×;¯W×¼®y]sè@:Œ£Æ¨ ÓêOÒü"ăxðe''§]I»’v%¥?K–þliÃ¥ —6T®:\u8øwpw”ç¡aH Ò‚´piíÒÚ¥uxhxhx¨Ù,³Yf³-y?´¿ÂìøŸ®„8¡jPÈ*GÿºNÙ«¹1³ºN¦tö›þÉ”Îm0°Þy«áŠKApøŽàSI_Åe\â+l3l/Ù.k6¡é„p÷Ð ¡C_ºñxä½ÈÉFé ž˜ÜÜrnB¦³ žœÚ7<€Òd‡¸v”Þ¾Ó‡Ò¤¡±Ùe«ÎÏé¾nXÌhéÆ`×[ÎßÑÖ0b6 bO‚ñK¾Þ¨áC@@Øš Ta;³Žsèþ£‰~´N; ÝèÒn•*?è±ÖœÒÄ·±Ó(½¥-¡4¡{t-—ychô«½53 Ûº[#î“jÒk˜Nä±STñž$E#´'x‚'¼ŒîtÝéºÓ‡9rÿÀý÷4Jj”Ô(‰÷,bz1½˜^ à ? Þ7ŒŸ‡IgÒ™O•¨®®®®®¾´biÅÒŠ#Œx0bß´}ÓöM3n<Üx¸¢}) ?ÎX $Šr;´C;~½MMM÷màÛÀ·Aè”Ð)¡StzëôÖé­h9£1Z¸ßdžâ8_Ö^ªÞXÍ7=cÔnÓª¹M¼£tNÁ€Š³çtl©°º#'‘]‚!ðÁg+ìƒ>èC²I6ÉòÐñÐõ0Þ”þ íö:l¬ô½Ë#—Ž (ÿ¨á;[Æ`GüÑÈÓAEù NOi¢V¬¥ %±ª”¦¬çXnu¡ÅÈC'zÍ7j«Þ´²‘g‹D)è­ÜHÕ"IŠ6pQT‰!#\?)ʶãúЇÇ&Ç•›0k˜¥ÌºA»ÚÜwO|T¸c[ÿf”&'ŽEé§cÏQšë+/ºîuîÄñE ;í ëå=Ä&û›z’{D,!®8‘è ?Å|Ó¿8¤.©Kêòåå–XþáᑇGÚwhß¡_#Öóá ma [aÒý0J3­3:£3™B¦Ånj̇˜1î ¸7àÞ€3©gRϤ:ntÜè¸Qq}Ÿ‘gä™â·?}õŠD$"y)KÝUÝUÝ5txèðÐá~~~¢U¢U¢U ŒÏ™*ðݱCÑ™¸`¤ˆ !äÀ­NƒµjOé|ëAC©|ÎÞ—SvÚö)ü`‡:ä> …dËß!k±kù¢z¶z¶zvÀ³€gOC¾„| )’ÊÃÄaºVÖ–ë->áîÿw³êeÌj^š;uP‰_ùë&{ßöCi’NìJŸÇÎ¥4qCì(YÏë’±ñ—ì—FuôkuÜÏ¿®¿Ú^‰¡H[Ñ…=¬ MrÈ8<'ú¸‡‰p„5ôß /Ò,"°? 1cÐ ÉvŒkd-±ÆLÅ]c©:YeU»¢ ûõ7$¤­ÓëÕÒÛKbÎSz«*z ¥ úÑ·)½9,&þÖ§5z¬kyÝ¿}½Nè…Ù_§69Cêa43™”PEÿûwšý,X° ‡û}؇}ƒ& š4hRÚÑ´£iG×Z7jÝ(ƃñ`ÆAB„ ø‡Ñ]Ð…iÊ4ešò=Ízšõ4K¾ž|=ùúuóëæ×Íž< Pˆé|vsÅo™_xÉä3é õ õ õÃ÷‡ïßï9Ûs¶çlôGôW´ä}·¾;4 ±(±# ßç³ãúŒiº€Ò»¡tNØ€aÏ£ÆèÎK\°ý` -hƒ'ðÝñð€/š…š…š…J‡H‡H‡„8‡8†8ß ¾|S[¦ýNû*ãHã)!GH{åÌ iôŠu›èùüéüíú.¤4ác¬6¥ ƒcÎPš¨kAéͪèþ×¹UÎ]Fm1Ý)™YCŠˆ£r?l/f1Ïh%Èùæ •#uüvüäu‘¹Ë¸’Ä wÐR¹¾ýÚà…·oŠVOè.£4±M\Jo;E7¦ôÖèA”&iÇV&0ëM{ í¸¦É— Ñ”¨1šßô|†Ñ"؆™èª¨âݸÿ¦£JÚ‘v¤_á]å]å]uçÃw>œñ?ãÆ_rGrGrG¡©íè!LÆß>ü±¬`Ť1iŒ" VˆAˆAˆÁµªkUתRî¥ÜK¹×Ë»—w/ožÊ\e®¢Z Å×iýÁ¿§Æ` ÆðG±N·N·NoÚ±iǦë×/®_¬0ª±€,xoá‚|§ˆ²h@sï‰nþ¡”.Ð<šfÏnÛE&ÕÕ^뱚®äžÂšë f"R7ï~IåãÙóA*õsëçÖÏ•fJ3¥™¡¥¡¥¡¥Þ»½w{ïíííÄ,Á4At‘Êöb’‰Ê]êßÐVQ r¤uzë3·õ>HéÍѺ”&=г¢4i~l9¥7¸¨[÷å[Ôzµ‰ä:tu›¡W¨5J’ Ü»„9@âñû160…¶"Ó¤€Àÿú.¾ Í60ƒ.^á¢D*¬6ùÆIÔÇÍ)Öbé™î‹ouz,Ó¼Ñ?z¥ ½cúQz34Ê”Ò$¸.ên¿ØŸ úЦÐ#\c•š©ŠâžÂ0ØŒ.ÙDÄðÌ¡ ¨~?ûJ|žTÞ–Ý4À4À4àªùUó«æ×]®»\wqõtõtõäc˜@„=·ß e‹ö¡d(Q„e¬—\/¹^òɺ'랬›¾,}Yú²‰ý'öŸØŸœ'çÉyÆ™qfœñÏñüÇûèŸ]¯É˜ŒÉ|Ñy¤óHç‘Í2še4˰Xb±Äb‰âæb.æ~c/ðA@@Ø£¤ŠÌæ+Öx´÷šG¹ùõ½å.ÎÑ/åSÉD›ùö–FUú½ù_(GŠ0xß)±ˆE,â‡8QŽ(G”ãëëz2ôdèÉ0Ó0Ó0ÓúUõ«êW)ÚoÃV>¨$D䈻ì f%™¤Ü¥8€-dú žÜª°akV6ïBémµ1¥‰-cÝ)MX“Fi’zì†çvïK£˜Î#<œê˜¯Ñ ý憮ƒ·˜Ã,$¹ÄÑè /Å‚(/ðŸ¡lc}è0,YÒ1\¹¡{Výafu7UL8q´6õšfÔqJ$1î”ÞìBiò鸬Œ´ƒ…C ¢º…úh«]TõT™«Ü›ÇÔ’;HĶ]îþlÑÖîáîñEµNjÔ:­¹þåú—iÒ¤è_§þuàx0ñL</LÒß%í8ÙGö‘}p \ô“ô“ô“¶îݺwëÞô÷éïÓ߯J]•º*U}§úNõð†7¼q'pâëûOæ3¯âÓÆ` öééÓÓ§g³ÎÍ:7ë¬{B÷„î×~^à^—廆mIRÉ ¾?†Hzˆ§²Ö­û[Õ­ºt™¨ã ÙÓkýǶ¦4q`l;Jׯ§4ñcì〉ã®^´zXn` kÃ]šªÊý0kI11g<ÈT~½Õÿ¢±6~_La+Å”ÌtfzŠªÄGÅGÙbu±R»X³s†kµ–êŽ:!=šï~Æ~äDJ“Šâ4(½åušÒ¤AqÖ9ñÇ]†_·½ç;ß’:ëM}u¿É…LjÉž>ž>žP‡:Ô™L&“Ɇí7Á°`0EÀßöí Ú$öKì—Ø/±{b÷Äî­¯¶¾ÚúªâÒɉœü‡y‰/ñ%¾0ƒÌ,o[Þ¶¼Ý|EóÍW8Mvšì¤°zÇ0 Ã08ÂŽÂÅù¾W‰GD ùrø ‡UÖ%5Å3ô˪™3#¤¯;¥ó“‹Îºæ¶’o#Šb“g¸ (XX]èBWu¨êPÕ¡~[ý¶úm u u u’ÆKã¥ñvjvjv_3ÀPlž*ëu”mh@¨#r“tE³‹T‘zʇu‘Ô}m°kýûØ]a®]Ow~Ò¤§qm)M‰ÙOiRtìƒ/GÎMÜr²ûü m{7ÜbÎâb ^†h'&€C-á Cê?¦|ø«b hA oÔÅzŒC rôÃ[v!sŽ"—‰üôGúëµ3ÔuÜŒêÏ2WÙÒ±YÃY·Ýj·ÇâýqJ)}K)¥©£(¥ô­É©¨[^x!rø¬mõ'hu¿¡±íãoÒÁˆTXòW°ƒQ¦ÐQ¼<3ë×À‡öhöêÓÕ§«OßôpÓÃMŸn}ºõéÖZ\hqoÈnb7±›„½³ÿ¼9ŠH˜¶L[¦-_íiìiìi|áò…Ë.ß½p÷ÂÝ Ãû ï3¼ÿ-s¹À\ÀXŒÅXÞuøß¸"|`Ç—x‰—|Eýµõ×Ö_Û¢E‹-ZØ<·ynóÚІ6 'á$üßÐâ ü]!Íp?ðe—f ³*¯L¿Ý·[uÙ ç¾þ´t‘åPûY‹Â]½v€*ÔErf;‘ K„€À7Kó\Á¾hðÑà£ÁÇ~!ýBú…†††š„š„šô6èmðÕ<à1}aþÅ%^¢¤% ‡7¬ÙžÌ2IØÊ \©³Yïtü¬HIÐåì5Gw ™NiÊ’qÍ)½½;&˜Ò„O±b.ìšlìâå³&´Ó^5°»=éŽlS’“‘ÄõG3 þÌAþÏ«ä6ê†z0#ÛIs8ùàä{Y÷²îeÍן¯?__e†Ê •dÙ@6 9?çýw_¢Ú  Ú(~z…\!WܪݪݪÃmÃmÃmsssŽ­å(G¹p¡€9ÿ}BsÊ~±yÉ‹)E½ÅÕù3†ö]HéõaÒe“[°>]`âõÌ ÆR6ÊËôFl„"C^ݼºyuó¬ììCJBJBJü²ý²ý²UóTóTóà7¸a6fcö¯:вè¼ÃHG&%d ^)7¬·ÄÒCwàtÿþ}«~j~løPJfǤRš³›ÒäñqË)½q!jßÍŠU&]zwÌ ^e?XÁz“wÊýˆ±cK<Ç E•:T[ä?圠0‚9Nºá#[Éê“B‘kN~á—ãt†jšIJ›K|Ëì—ÆŒÊ ó¾"]~½s^®Û‰)#öQšð9î¥wzÇݤ4)8f¥wÚO8DéU騂™ïpÊáéqJ)}r‘RJQJéá–¯½VD°f{²í˜Û¤'ä˜1èŽÀ¯HéÕBà?‚éÇôcúñ&y=;÷ìܳó´;iwÒ¶>ÝútëSõrõrõ¯bܼÁaÄþC”×ð$$!‰w V×R×R×Zí³ÚgµÏým÷·Ýß¶}äö‘ÛGN3œf8MñÓ6¤ ióõ‚ýGºðEX„Eü9¨Bªðëê×Õ¯kðÀàÁ5_i¾ÒüºÂó»»Sþ‡ë[¡”/Ö@^(ßWò¡v•LßD.ΗôƒÇq]ŒÝ4»ªïG6,“ߢ~\ÌE,ÂTœÂ a¸¾k((¨bɾöÏ{ÿ÷þïýußë¾×}¯7Lo˜Þ0µ®j]ÕºÚÛÛ?ñxâñÄe(Co×øÎæ§p øêä7 ‘@Ê ã1y@úâ£B“ÒWŽM¿„ÍÆöûÉXSsÌ0}ë¨^¼Ý[÷ˆ OqhëÐÈv¡À¾`N©ym¨ãøÌõ†EÆýW^ŸíWÇãÒŽí½ÙýµEá„ÒñÕ6~À,òDá)Ó¸DY„b9ÎâÿÚ»ï¸(Žÿ௙½½ƒÒD@ÅŠ-öÞ{7*bì½wc‰5–Ø+öQì…"¨Ø+( ÒÛÝÎï=óÁ_â盢ù˜8OŸïws·»·7;»Ì;ç=—‘¢ËS£…Æ+Â_"5¤º$ƒ 6c Z“«dÚ¡*ÂDWÚcÙ8Êš3'”ÑBûKÁ›ç›D¼t¾kÓÆhqå·±VÝê—¯Z½ 9T¡£Õ++S“ÕªAt¢’Œ²­ä :‰ú€0 ù@ ż—-_MÎOMÉ|µ$ûô1¯s£î,~[dý¶•ë5¸¦¸&bðƒ¾eå>£+ÞÓšjÚv³Ž°Ú‘ýjÏëNdYCF¡/ÛÎÎëH-D~bÿJ}`Øvïðïâdq²8Y^û¼öyí]œ]œ]œM_˜¾0}‘¯ÎWç«IÒ…ta¥nÜï"Ý·¥À¤t¤#¢‡è!ÏâYü·fßš}k¬ V+Ÿ¹?sæ>C>C>CþæÎ›;oîBRH ™Š©˜ÔÞV¡…(üÃÇ ¥€d``ò{ò{ò{ú!ú!ú!ù¹ù¹ù¹ùÝò»åwÓ u]õ>#å¾V]áwiQþLwÞÌæÝ†ˆm¦Dt+dlf­^-]êѸa‘L%k#›­»«Xc3fòÂã¸ßpGqTZ4¨`PÁ Bȶm!ÛÂÆ‡_'°N`À²[Ên)»E·¾Ý(åñý£Jïóƒ,h89F@6ºïCw$Vv&'õ6vlq®Ò¡¤§ët~ÍØù¬ˆï»P/b'cç¯Etaìâ³óâÜÖœí8sø¨6wü̬ÒM{ê‡~ðg¨9 ¤ëH1qÿè‘pÿ]é>”|Côp@hCW’Ͳ½Âú¤Üõ¸ícÕ¤O›¦›*Xì0äB­‰ñ½Ü×uYAߟ†¾aìò³ÈÅŒ]œ1…±KíGLeìbâˆñŒ]ˆØZ2÷|éõ´Ü|kéßúן(Ì€ÕçVø®ð½ž7!nÂÈË#ÓF¦‘¤=iO­©5µÆ¬ÁƒûÉHsmÙ(Ù(Ù¨ßíønÇw±–±–±– n6¸Ù@nG𒦤)tÿ“× +\áJi Õ%sìnÕݪ»Õå]—w]ÞufÄ™gF„Z‡Z‡ZënuCè:°€ÅïJõø1R<ý^ìÅ^iÙê‰Õ«'õóëç×Ï÷uñuñuÑ­Ù ÝПß·?Òãž"”H‘´šmâ"¦}s½`zÑò“Yƒd‰÷ÄÑ&çU?*cÕqÊVòïªk”š †Pøb /jŽ+Ej²Hn§` ¦äMÊ›”7éžé=Ó{¦ZUhU¡•ö¡ö¡ö¡óCç‡Î³²²Þ¹½s{ç†}؇}Òp´ú_ÿ;±Tow<îá(°ÆŒâ6ÌÑ«‰ÚÂ3êKÂ_O{W¯ ó2D!›GŸìz'¬éºà’r[†n“QùJå–ný¬&B™—ßÝ slüàµÎöÝpï6ã*—üˆ#æ·Ü~lxøíMŸçaéërwPÂÏô&ùI\"z°wì)<0 ·‚·(†÷¶þ<àKTƒ'l0­@§Jä"H °HÛXôd´`ý° `@(4$Õv­…›Av¹vÔä@ø¸j\5Ø]åûÅ.õl-v›=3^ª÷P6Ì­¿ö<@g“T@AÅ åÚ”—oêä<¾y2ejæÑ3Ž×·¿wè› ¹÷¾ð|Ó4OýîqNaÁ Ä Œ €a#¼OºÔa ÑšËÎÉÚÉ~*UÜ­¸Ó–s;ÂvÔõJö!>ä›ûßüæàé>§ûžî»-v{ìvâJ\‰+™ÈÄ?P‡¹IG:Ò¥2ÔiŠ4EwËÜ-s·Lùíå·—ßî7Ào€ß€cËŽ-;¶ ×p ×x™ÿR)  ä¹ Z‹Ö¢u˜&L¦éy§çžw¤uVì^±{Åîs¯Î½:÷ŠúR_ê+žOˆ'ðoðæ/ƒ4ûé,Áh F=_=_=ŸMgÓÙôÜðÜðÜp]Ö2éG?³œN=¸£,€ æ nßÈnöalÚ¥ë›:¨û ÛÉúm/Ø_051ª.mDrˆ=žðÂã¸ß $r‡;ÜuznInInIu¼êxÕñªT+¨VPU÷ªîUÝeÁ²`Y0áÇ™ý•þiÛRqÆäiŒ3ÂRz,øà`­épòM—#õó<OŽZX»å*Æb~6ž±‹ŠjÆÎÝ~±‹ßôºÍ¾â~Ž36ö.®>³bºóuó3|âRL@z–Z’*XƒH¼Ÿjçë‰u.ýÌ! óÑ…ºÝÄL¨G'’ d))ƒiÛÔpªÁ<=³ç+·rd}”ßû¸l­ÁñH£›ÙD6‘MAÅAÅAÅuRê¤ÔIQOPOPë†Àb8†c8?Ü{^°…1C7T„03¥aHÀØÌy½¶Õž¸³KlQ«);z,°*³ÜJw;¦Éâà ã>ªôŸÏa†aÒ¢áNÆ;C¯‡^½V?¬~XýÚåj—«]ÎöºíuÛëºMõ‰>Ñ×e(Ý+ó©þ$—ž«²êÂM¸OÓÉÖiò0 »ï›Yfê!õ¬ûMoW:Õô[cÆ.gGÞgì\üð³Œ]ü~DŸ"½“š!žkjR¯ou¯h5ïƒb¸Oú#‘ÄV¸ˆGØŽž üf3ñK>ƒþðD¤á(F‘•$§È)ÒgÈJâ‡}€åoíÀé¥]kÓÛ¡W+}Sfþ¸ùÝ|«O¸¶fÍË®Ór:3tš)ϼ¶±K½#Û2v)aÄpÆ.v‹P3võÎÈúŒ{5bÛ£K;Vôž¦æØ H¬5ªÊ1¯iöãåÛdCè˸,[8E+ ‡éS’Dôq ü¹LêR3¥Ê¡mE[ÑVÒËmδ9ÓæL¼Q¼Q¼Ñ¡*‡ªªâüƒóÎ?覭 ¦Á4˜ß>A5¼F®‘kÒ²ÆNc§‰¢Q4ŠžŸ{~îù¹uÚÔiS§ôT„^¤éE^bÿýZ&zDè3bFÌ”£”£”£f¯›½nöºë¯w¼ÞqëÁ­·´ñ¶ñ¶ñÖ­oOì‰ýûK ²O˜Y«¡‘´¨­­¦¦¦Ò(¤QH#…ƒÂAá ;ò.èòËs0ŽƒŒ¡¦ÒtiìÈZ=×{ c³ zßÌï>¡Oç\ÆfÖéÝ#øˆã÷EøÃö胦ðENá;ÚÜ%ÞšMÎÿz#åMÅùv‡V™FÕ¨~ÑõæFùxڤν[ôè•UåHΠ-Œß3b#cWöEbìâþsÆ®´ô`ìòÉ‘ksõŽWRçÙÖ}=Nîo9[Õ2¶ïîf~®e­­Í ³Ôúk•û~ý¹tIC¡0ƒ!»I_b‡ƒè„zðBuø ,L`ˆÏ¸XºÏò09LKË+V¬Œ™3+fÖ…í¶_Øú~øž¤ç/?xx¶™¿PòÂFa£°Qz¡íA{ÐÛ+o¯¼½rÞ€yæ ¯‘¯‘¯ÑÚ%#ɼØÞ_´ÿip—~^ÔbD‹-F\ö¾ì}Ùû|Úù´ói C†6ÔeТq4ŽÆ!¡ýŒõö^à…4ë¶ÓY§³Ng럯¾þy·ZnµÜjéîÒMÐMà g8ó“ùo¿Ðÿ a¹@Zj³`¶·–¿óB[Utlÿk߸äÕÉñÈ48exR¯C×úÛ[©²édÂðûÆôGRÏÅì\ð(â…Îq¿K´A¤ )ò†ò†ò†~™~™~™ú©ú©ú©Ò ¬dGÆÑ tÝð¨ê£ªªæ·Êo•ߪx{ñöâí%UJª”T)N+N+N+6.6.6f£Ø(6êOO]ÔE]4+õ¯(À$ã„›‡”B ­Bª‰ Å\ö3ËCEL—vP.Ýn´qË~ ¾iî­×upƒ]žólºÛ61>hêhä"¡€6—µ=Õ=.æiÓ{£$>ŒêyÎàa¼ø=3fºÉƒhMr€ Åö3kÉN¢î/÷³?Ÿ+£t¦ù¾h‰jtiD®rƒÄd±‹ciÿ­ù( # 附ùV–•I¯$w9d.†4ªô¸ìÍjzó­˜È+Lô„/@s€b ±$€8¯ž—–’7#éâ£é§®Z$#5$Æ")-µëÅ%IEÏJŠ JˆÆû7nßY¤= Íh >‡ÂE ak™5~ÂaÄA(4ÿ£¼=0€ŠP„"rŽœ#çX bA/"^D¼èjÐÕ «ÁC7Ý84H3H3H“Ó'§ON–ÂRXŠBÃo½AoÐb¤)FÖu¨ëP×aʦ)›¦lJ»žv=íú·Ã¾öí°Ç_q\š}“ÕauX^nºÒëF»ÑnâFq£¸±šºšºšzzé=¦÷0 2 2 Z“µ&kMÖª«¬@¾'ß“ïÙ2¶Œ-Ã}ÜÇýÏ’«Gz•ˆD$J#š*Ì«0¯Â<‡@‡@‡À†7 o¾ð}áûÂW ›dZ¦eZéºãgóßê7Ü-Ȭ}ú³ A™eµÖû/¦ö}Òä^áÌ¢‚âêMúó”cmNôO¸9ëÕéêqOÉ2lBO¶C±ñïx¡sÜÿy]þçÀr,Çr  2«aVì†ïXß±¾cµW´W´WPõQgqgå³ä³ä³¤dšššZ­ÖFC4DC4Þo·V¦•ieE>E>E>Ŏ/Z8´phá†Â …Š”EÊ"eQqQqQ±vvvøH|$>Òõ¸ÿ~-Ð-HÒ˜¸’rd+†WíV1PÔÍàX¾o™&³[œ ê:³¿[Ó[Þ휔­o¶@c6 ÃÈ= „jõ.´¸qüå󵇳nŽÝq:úÞ]Ï‚IE‰Z]Ï–lš0€ˆÚµCÙ–LÑÅg£Ú¡"•p ¼áHΑÞäЄþL»Ì^2Kí;1–=.½‘l†p‰&Ø_²¼i˜QÿxÕ..7ÂŒ|=lkz{:5_ãuÛÉÄÜQxcPWÖж՞ F'€š }€"ªé“§)¸WÒý±IÚËÜ­çäIwRkì¿{ÞãÞÏǽؔÝéáò—gßù0¥8JûÁÏòšŒÀ=\Æ-¼@î#SÙVÜ`]1±§ëåþÒ’ÀQPP]ÃÝ“y2O›w6ïlÞ-·ZnµÜʹ­s[ç¶+ W®4\½cõŽÕ;è:N“Åd1{°{øÍàÞ7È2L`SÙT6µ\­rµÊÕZ2hÉ %ƒÌw™ï2ßÕKÓKÓK“|"ùDò Ú‘v¤ÅUâ*qÕWZbR$ºhhYZ––ŸŠOŧ®Æ®Æ®ÆsÃæ†Í s9ârÄåÈẇë®;!uBê„Tq¬8VË|˜ó<àñÁôLŸ–Ý‹XÄJs øûû›Ü7¹or?þyüóøçRD>Ëe¹,—_ ÿöjû±ï‘ˆgèyö%™ÚÃYÅ 4‰¯éPˆ¡â¤2ž&³ÔÓ‘  Y&FaÌ k<æÎq¿ç2ûOæ`ÜÁÜ‘nßy­òZåµÂxŒÇxÝ ÝÞðÖ…¾¨¡†šÞ¦·émÅÅÅ)Ú•%²D–¨ë’2 ;ÂŽÌ‹y1/Ö‡õaºžNfÁ,˜“1“o+ÞV¼­hqÑâ¢Å…- [¶,jZÔ´¨iÑ¢¢EE‹ £ £ £´îZw­{ÉÂ’…% 5?k~Öü¬9¡9¡9¡ÒFi£X‹Òu>Ͱå}‹’¬Å!à~ïçMÞž‹mQ±Xm}pì UŸ¦5½ßt‰lÐÓë²WW—ÕÅ]Á28ÊÏÚar0*™Û?;·StÕ†óÏí8ûfïÔ³s\|3!kE!° ñ¤'â±»‘ÀrX(æ`¢qÖ0ƒ?a Ú—dº¡¬@«Ha÷™ ™Œ}Ëò4ÿ™a4×á–õ[“†> ËE›í ™U©…c™Úf~ e4–9Ž1ªipP/R± P(GY8 b›2€ü i\x5¼ßäyð;Û;^Oº½}|jU³Ôn‡×^:ø Â³Áig³škçˆ21º©Z`-€Ù a7­&¾fãYeñ‘Øš½eVl:ÜtQõï3ßW°ñÿ«3_hMfÁ,˜ &‚‰`’ö.í]Ú» "6DLØ1aÇ„mnµ¹ÕæÖÅü‹ùóož¸yâæ 2™L&“Ù>¶íÓ5†x^êß_ÚëÙz¶ÇqÇ…? ž¶6mmÚZ§µNkÖº-t[è¶0ùtòéäÓ̃y0]æï¿žküŸ¥T“T#ÕH51ALŒãããGŽ èÜǹsŸky×ò®å-ÇâÚ¶Ú¶Ú¶ä*¹J®¢-Ú¢ígl²K: :àŽàˆªƒªƒªƒÒAé t(h^м ya^a^a´ÐBËV³Õlõi‚¹måý£â*» ÐË­_2L£ÿîTaŸâeÆÏ (b¹°1OÓ£œŒb8¡3& ›Q®Ÿp„5Ç} ´ÐB«@vGp„¥CéP)þR÷G7™È¤ñ4žÆß?wÿÜýsì{ö=û^¯¹^s½æò`y°Y½² ‹+^©xçEú¥3mv§´¹ÞêAÅ·‹ã îÎ|uåuXF…œ2ºOÚ¦ûÿî–£Ô´%~èÇÖà¡x€QÖWc¡­+NEŠqä—\ÐøGNVUªÁ­í¬í¬í,…gœ˜vbÚ‰iµÍk›×6»v3ìfÏ¥=—ö\ñ,âYÄ3ÆaF0‚,Õ·?9Eü×éžáÙN¶“íÌ’Y2ËûÇî»ÌÏÏÏÏϯʤ*“ªLÚ7mß´}ÓØX6–Õ¥”ýzîÒóL 4Ðè:AÖaÖуô =‘‘‘° `AÀ‚;·ïܾs{Ò¸Iã&{]ëu­×µÈ6²lcXÖá³7Ù¥ƒíNº“îŒ2ʨÊOå§òS½T½T½ÌšŸ5?k~ajajaª.ßüìÀ^ý¿¼Ç}+’ð @AlIsmrîƒâHÍn$«o*[Ì›yZhôS•qdéCìÙr¶Œ†PüéÉ~9îk&M(^8¼pøùÎç;Ÿï¬û“#Å2.Á,)t.t.ü`X±&ÖÄš®¢«è*¡“ÐIèDch Q2%S2E/E/E/½ zô*¨ìUö*{Å2Å2Å2ÕÕÕYYYú>¤…‰ÂDa"íJ»Ò®R¦ÁB°,„©ÂTaªÞ+½Wz¯ô*êUÔ«¨kìÇ~ì—“±hÍ¢Å1FŒÑ^Ö^Ö^¯ŠWÅ«bœ!¦1vœÝ*yWr½dkÉwÅç‹R²ä9yyfQ¸Ú÷­Þé7·¦Ô°c•SeöéÑXß««ï¥r.&ZÙDeÚ¿ÒÏcmŽT‚GY›…CÅV±¾Í[ì1¹ž²%æð¸„šÏ+¼©¹¯¸ƒ8 YW°ÕZ71­fæÕÐîY“êÕ»¸ì¬rÔí¹ùSû'–[Ô[Œ/õSA´ýÄuâ÷MdçmkªŸýcÖÉ‹§^íÈþ!¶Æ½+onwÉýÑ‚Kƒo®~ùM@Öñ‚íEÅZ ¨€ªÂ-úˆD1:ã„h/Îa–hƒÑØŠÕˆE®8\|Ì. aÐÂÀ¤o¸ÿŠ~f©©´ ˰ =Ñ=‹ Š Š Ö­ ZTyIå%•—– ,X¦±ccÇÆŽ‡gž}x6‰%±$–° {ú$ý”å~Oig ÈG>òcÓcÓcÓÛ,n³¸Íb÷Cî‡ÜÉ3äòŒ’¬’¬’,݈iFÕ¯¡d$«±«¥¼Ú—Ú—Ú—={8öpl|®ñ¹ÆçÞô{ÓïM¿¹±scçÆ¾¨õ¢Ö‹Z´­CëˆÄbÝ0ÖÏG.uÙX–ÈE.rõvëíÖÛ-ß.ß.ß^èTèTè$¦‹éb:nàn *ª¢*¯þ_Ç%þG7è†kØÂ~B5tUÏRe«œŒìú®~Xhž£·ÃDÍ}1=!ñͪ£ªFËÛG™kö‹.â÷èˆÊpÃV$à/tŽû,.â".ê²ÁH7ñ—x‰—ng´<-OË+ú)ú)ú)Í”fJ3E]E]E]eeeÅjÅjÅjù4ù4ù4ùAùAùAÅ"Å"Å"ÅrÅrÅrùùù¹ÜGîC‰#qÔå®)F1Šu}{ÒL±YÈBá°ãìgC9™BÑNdo‘¬dŸæRÑÂK±%YÊšj„†yg´Ì `]¹Êr—7†3éMùbz n€d•ì½w¾èf™Vkâ.íÈ)I]žîš•,·PlQ<"NõŽ´Q”9ûêŽéiK3#W@ ÝêDZ‰€h h§ÂïaÿgG²^~{ÛËê×+Ý_úfÜù¤›~i¸h‘äöäÝÇÊMhM#HKŒÇdLŸ±þÌŒ agP)x‰Ì¯zªy©¹ÓЈæÒ\š+Þï‹÷{öìÝDzeË›#nޏ9bÈ´!Ó†L˼–y-óšÔÊj²šŒ'¹ûˆ?ñ'þì»ÅnÙt°é`ÓakúÖô­éRÉ^?xýàõ7]nºÜtÑ­ËbYì¿¶fþj^ @h€xM¼&^kØ0°aàØcWŒ]!ó–y˼gfÌ̘™qÐê ÕA+A!(…¶Š¶Š¶Šîùšø¹9Á Nº,1§q§Ëß,³üMç7ÎoœßÜzèý¡sç<ÎA b8À×ü¯Áïq_‹HÂFˆÐæÇ”f»f}‡ä)¶#{ÂNZ$«Ôò½d éWìÿåsx„"Çýq¥›zF0‚‘.ŠQzÔûþ:–A††hˆ†º×­a k]bGib&S˜ÂT—ÒQúЇrÈuY¥þå!yâ,q–8«0²0²0ò7â¤ÈKÉŒÀÙ}Ù}Ù}™™ÌLf&‹”EÊ"…%Âa‰ÔˆW]W]W]W]R]R]RîWîWîW=P=P=PLTLTL”5’5’5"KÉ"2ŸŒ&-IÚ“>¢eæ‚)}¬ˆ”í—½ÅFrgî&æ«âœS:=ÙèÕ¬Lœ¾ªYfsEp‰g¸é:• ÎV/ôÍ®½¥Ç®Z&þá†Sð(Ê`oP ÇW Lß\'èyÁ(Ö׮ͭžoPtâÖð§ë²N¶ˆµ~ºîtå¸U.¿¬“úT¶ä]íX6£?÷|îùÜš84qh¢~ýú6 d9xûà탷)¥”RmCmCmCÝSÄ¿“Ô?Ó8M[ÓÖ´µÁ9ƒsç´KµKµKs/ä^Ƚ »«ïÃ>ìãužû¸¡¨jô Æeé…íZª‘ÊØœÁ}’Š+Lú©kLÎÓñ];73êªÜ)O×mµ~kZoŽã¾8ÒÏøÀGÊfƒ½Ø‹½x…WxE\ˆ q!½H/ÒKzåO~Ê|ÌÇ|âI<‰§,C–!ËP¿P¿P¿°ˆ´ˆ´ˆ,S±LÅ2]ö»ìs‰òŒö<ãyÎ'×'Ó'­j•*uôªÕ­ömµ þ‡ªŽ­®v ‰¯i0Ä §¼e³³Ok“~Ëó~›hÏ }‹ô _ª‘–Sÿ|FáØÂ~×§<ŽN¼x}Áü~-2˜èÝd^¿n-MýG;œ´^b|”,$‘¤Ù¯“Ü'Á*»$ì¤tÑ’Æhº¨¨{[øÏ¤Tܨ]RÙ¾ /È i¹ÞËz/ë½¼\õrÕËU££¢£¢£*«|¬ò1ÝšCÈ2D·žåý÷¦]›€ ˜@ÓÁtð„À o ¾5øÖà‘·FÞyKWœ"é?mìÄï'uOHµèyEt÷+›$›$›¤m¶ Ø6 aIÂ’„%s¼æxÍñR¹©ÜTn¤3éL:—žïPë:£3:KAbòLy¦<3ø\ð¹àsaÕª…UÓo¢ßD¿‰nÍoð ¾áUžû8ò¾ô Õƒ”-ÞÚȽZcóŒúÕ*Ì›x§«Eþ–‰.]n”_`9˴ÁÏ ãþU¤øË„ =Ð=031»° »€$HÃj1#1ük?ài%@ƒUU^Ê»ÆÖFC W˜«Ì.™EX8Yo·;aØÐ0ÞäöÂj»VïØôl.cŒ%4aŒ±G™Œ1¶3¹`Öµ£¹mÓe>¶â†ShE_Ó*¤!Õ#?‚Õ‡Vï?þSÎ-úU“šS•Q•‰@"HÏyf÷›Ýov¿„C ‡­°ZaµÂJqTqTq”8'â¤KÊý†0„¡PU¨*èâž›ov¼Ùñ;¦wL¨¾¢úŠêÊhe´2Z÷Œî ÎàÌ¿°ŽIR‚é¹ÁÒK,]X)±Rb¥õë Ö˜V5­jª++ò޼#ïtÛ–ú©ù·Žá.-ªÍÕæjó:—ê\ªs©zÏê=«÷$gÉYrV÷$Áv°ãUþëñÇ«c1´ÐâÞ@‹7(†6gJñIí+4`õI ž± ²|ª +lå|séÈÜ…ïÑuѽÞOÅÂqÜ?^z©çq¿1‡¨®§Júã' 1”Âudº ‚((l`TAT‘sð‡?ü¥^R‘T$ÙV¶•mCÄ1¤0±Eî…(L.€ïøã2öcüððF«„>‰ç+¶­ òÞ”Þ¨X(:fÚOa ltóæÝú7|³“ƒ¶kšêøÄäz®Ý”ܼÖ%®Çi°±LÁ.±;øW˜­Ç^B‹k`è ü’M\JLÈýuR¸‹4­Ì3<Ã3i¦Õ«3VgøÅûÅûÅtèÐᛌo2¾ÉØ“²'eO µ¢VÔJ4 ECi¸OùQ9ÈAÛ¶°-¨‰š¨ù¼Íó6ÏÛ¤y¥y¥y9Öt¬éXÓ¹À¹À¹àŽìŽìŽLtþ™S¤ü]¤æ¬TǶc;¶K/ D‚†ºuê2!dBÈ„§xЧ˜9mæ´™Ó2¯f^ͼJZ“Ö¤53a&ÌDw¿*”øw’NQËÔ2µLzbë•ë•ëŲ…l¡®þKc‡8î¿\dik¢þm›ŸÉŒÍ¬Ò»aqƒI¶]µU§Üíߺl¥(·ÚÒ:´ â‹ã¸?¤ô2+XÁ MÑMuýú§q§‘‡\ä Oðš´%.ÿW»ƒz¤ºrL3åÕþÉ[Tûé$zƒNÔ½íˆh8ò‚ÿ[Ïo;´C;²‹ì"»¤—ûæôÍé›7 n@Ü€¨Q ¢Ø5´kh׫° «ÈIr’œüŸõƒþ£Ê–T!UHé£qFãŒÆmزaˆ-I—“.']®WT¯¨^‘4R˜-ÌfÿK¾»T7Ú£=ÚÓQtÕÍÝqlDZÇ^ ¼x50º{t÷èî!6!6!6º;ÃT:•NÕu%H#þ·") ¯Ë}—û.÷ë%×K®—\®°\a¹÷CŽª¡ªéf)æ¸ÿNØK ÈJi¹óIÿ—Űi~=+•8MÑ5œ­˜Ö©GAÿ+Õwùè²Ód©ÈËã¸ÏBj¨¥ER–ô"½¨’¶£íÈuÚÖ%%´%mKÑŠä,@j½ßˆ4þ÷þ?K-Yüò_U…V¨ŠšT5P*€Í|JĘc<ÄC<Ôo ß@¿ÁÆN;mìtýäõ“×OŽ~2úÉè'º5‘F¤‘®Å›,ÿ L`BGÒ‘t¤ô”&SšLir×ï®ß]¿!fC̆èfD–ff@+´ú%0ìŸHýŸû@ÐÒruRT'Ñ»£wGï¾²ìʲ+ËÚEµ‹j¥[3–ÆÒXôGôÿå@þç×÷@ Ä@i±Ò©J§* 7 7 7³··×Õ)[ÿËý‚’!ݤåF{½N–›Xà9éF·Tá¤ô®+›~¬ç³ñë램2X·¾9FZórã8îâ?„•”p¥Çà ÖLtÿ“”€öÿÿ1T_¨aAÂaäPüÆþ¹?ªôpÕoÈ7D7Ì.taèÂÐ…—.\ ˆ‰ˆ‰ˆ‰¨¦®¦®öþçYÉ#y¿œ3>\õ¿ É4™&KÏ+ú7ë߬³„ -Z,J[”¶(M‘®HW¼O#!HùG~ÉÿÔò„Ó1†Ñ0Fõ©>ÕŸpÂý ÷“ì’ì’ìÖ6ZÛhm#ãŸ6þ™d’L’Ij’š„çwÿ8 J¾'ߓ勵¿¡¡¡ç¾?÷ý¹ï><øð`³»fwÍîJÁ!ÄžØûØw,ýÃ/‘$’D –/-_Z¾\×p]Ãu sssæaæAù\ù\ùœ´ -H i‚ª_ïçl>æc¾´¨ªªZÿ† ÿ ³AgƒÎªzAŸá_,¢,˜ˆD$*c•±ÊØu“ÖMZ7éºëu×ë®3ÎÏ8?C—~”!GÈ©éYºéÏé8ÂŽx‡wx'½Ð£UV=Z%OŸ4~éÀ¥—êA’BBþÏ.¤íC0C„!@^nÐ. ]À¥ŒK—2.Ù]²»dW7¸npÝ`é]Z‹Ö¢ï‡¦™õÄð(ÁÝËÆËÆË&ü§ðŸÂrðpðpðà?âGüxÕæþ)ÕÔ9¤b†£BÏ ë;ô›!¬xZF|V2=¨ÇƒDåà]-îÝÐï¡×N·Ñ·¸ó7OÌq÷çèÿÒ|wÂ8Á@väÃ&²Yn¯d³pR6ã—e°‡ ïóÏöÄö°&*Xÿ’FÐ}÷Û%ÿK*É&Ù$[Z®²¼Êò*ËÏï<¿óüÎsîçÜϹ×|^óyÍçÒ»´%mI[þzœn˜ã:N€5¬aààà”¨LT&*w{ìöØíaÒÖ¤­I[( €ÉHFòú]JE¢SJ)ÕýÀ©R?¤~ôúèõÑëã,â,â,Y ²d¥[s8N‡ë&ð’¾ã—©z¡—´(<ž Ïýûù÷óïW+¯V^­<óPóPóP]ÝŽE,byÕæþä0a³ôÂ~m·¦ n16Ý«§cS㻟|`q¹í¾²[ÌMB¡‚2ªG|Ç ã¸ÿ4UTp$/á âWëÉY÷cé"…Ú„>PªWžÇeÿ6©ßw –` ý™þL–©ej™zt‹Ñ-F·H2M2M2Ý0mô ÓL&›L6™LUTEUdD}ѳÿUqÚQ;ª›_ÓUî*w•ÿL~&?““¯O¾>ùÚ‘ÿ"ÿE0‡9Ì¥‰®¾¸>éRÇCŽ’£ä¨î»tsíæÚm¿Õ~«ýVq5âjÄÕ˜ÖoZ¿iý‰ŠDE"YKÖ’µ4s¿äu±¥oª  ’’’Ò?¤H=ªGõÞß-c0óZÍýaäR°UZ^]±UfXcÓ÷l/^ŸÖm^Úð1ƒ;©Ô¿Œƒµ­îÆqœÌ'¡¼Ü8Žû#@@YpÂK8AŽ2¿L®þ¾Ÿ^ À ft›ƒH·‘õÏ’ßïBhÀ‘P8B€=„_ý¼—ø·‹|™GæIËÒüî{ºïé¾§{ü£øGñú7èß ¿.? $$P·Ïo]º ݉;q‡Œ`¤ž¡ž¡ž±bÌŠ1+Æ$ù%ù%ùµ;ÑîD»ºÚyZ8-œþ‚½tªÇoÉ·D7ªD½R½R½ruÜê¸Õq×®\øÑãG=L˜<0y ÛV -´ÿ˜úp÷pOZ4igÒΤ]}‡úõªî¯º¿ê~LÀL@ Ô@ ÃƼV>Y_Oj^nÛÂP>pO³g¬–^[y´àgxK1^¦ËøN¦£¼y¡s÷Æ ƒO¡E ì‚)OÏ6#U[S1¡14&w\î¸Üqwäwäwäú~ú~ú~.ë\Ö¹¬ÃXŒÅXÑUt]Ñ}Ñ÷|ÐRS[„‡q‡ÑÍÑ\* •…FDDøøø=½õôÖÓ[3ìgØÏ°çúÎõ+]MWÓÕº~zi&Ô/'oÌGê9öaöéòÉü¤ÿ“þOˆA bò¾Éû&ïLÃ4LCUTEUd! Y¼VsXé÷!kCŽWÊalz|ϵEYŸvy©­>mzÏK—{¦;–ÖP{²—ÇqÿrÆcè¡9ô0À|Yd•}²Hµ|gSµ\oÀºÛzdûÝÆË>ó£@eàñ›¤Ð—8€DFdD&¿(¿(¿¸¤É’&Kš$y&y&yÎSÌSÌSQd¥ë—½ƒ;¸Ã ¯4a0H„:¨ƒ:MW4]Ñtŵ—×^^{ùSÑOE?™››Kk’Ñd4ýEt34C3H©îYJß]}wõÝuíðµÃ×G7nÝ´Êê*««¬ÖyÒƒôÐmûOí`#Á¶°…)LaêvÔí¨ÛÑz}êõ©×ÇIí¤vRë’WÅP å£8¾fŸ®ÇýJv…|¼† LYTÂwô‚lºÐZ=B^ k¡»‚†¢yeã8î_ŒÈÂÈB1Ž¡‘$‘šùךkæçîj;-w³<}†Yªf/{¥š­WwÔZ½ºt½éKº¶ø¶(Kdæ±áPŒb£)𢩔ø¯¤zIõ’ê?ªTÿ¨~küÖø­q5fÔ˜žžžÏ–°%l KÇÒ±0 Lx¿»T¢½h/ÚãNáTòä!ÉC^=|õðÕCת®U]«ÚÙÙIXÉCò<üß­B©#u/‹—ÅËMÄ&b±k~×ü®ù%µKj—Ô^¾`ù‚å ®õ½Ö÷Z_úý‰þÄ.±Kì’®¯ýŸ2{ŒôÓ4©HÅHŒÄHuŠ:E‚Y0 ÎÉÎÉÎÉÖM%• Ÿ竾”ÿŠRMð´˜ì˹}aEš ‚vS²H—YÒQêù}zQ·ÒVÔ‡7¯lÇý‹Iá.rhQ-Œ1lhCØ 9*¡yáÔM §„vò)eIÅÓX’pÓ4L¸‰'0Ç8âg8¢ôýU€)(¾òn"N§‹Ó¥l3‰Û·'n?@ÐTn&7“›u3èfÐÍÀä;“ïL¾EgÑ™ä’Ã{(u“1mb›Ø&)ÉæÃ3Ï<<“9:stæhcccccc;+;+;+]âÈC8„CRòÁ¿õ8¥~e"DêOý©¿¸D\".ñÝï»ßwÿ¨!QC¢Tyª¦ù˜æîFîFîF ݺ'tŸÓjN«9­DoÑ[ô&UHR¡E¨nˆç?«¯]ªõPõ¤ã7Xi°Ò`¥ d‚,/%/%/E[[[[[[—!ç)žâ)¿©r¶¾µÆq,’–­â ô‡?­:ª[ljš­“ëw-alfï^ƒ·:µ?Z7Œl'oa؉žhÆKã8 8AlJ%ª#Âèc„éV9Õäºâ”zÍâê54Üî ÿ`¡tþ“fWÊÿ•DsQùž|O¾ „ó¼çyÏó¾azÃô†éâæ‹›/n®$J¢$DJZnA,ˆ›!H#ÒHj.—÷*ïUÞë’ÿ%ÿKþ'›lv²™C¢C¢C¢®1ýñ9#ÝKŸ‹õXõdÙCö éH;pìÀ±ãGÅŠµ¯î¾ºûêº&º&º&ê6=OÎÝì¹ÿôÔŸ„JtW­k‘k‘kQ·n ÜÊÕ(W£\ ÝJ«±«a+X}͵—ûkU­6b¢ô'¤¼^¶ÊóúðosZaÓ¦wd…Ó×öTù¹ÇÙÆ­cå²;º‹ë.ƽ$ÄqÇýŒ† ”ƒ’$) H’ž"╞Â`á±k •çûOTž§£Ãéû¼2¸~U9ËKÏ®ú–¼%o¥e¯ò^å½ÊŸ8pâÀ‰ל¯9_snžÐ<¡¹.>˜œ#çȹ_Jì«Íò^ºµlÜܸ¹qó]λœw9_êr©Ë¥.M77ÝÜt3ª¡ªéf'ýÜ“19À$–ÄÝ4I²;ewʾºàê‚« ¢³¢³¢³‚·o Þ&½K7ÑMtÓ¿$—¹”Ifö`üáŸlŸlŸìðwáïÂßÙ|góÍwÒ7%žÄ“xòaÖÜ_“ƒ¹ø€ ‚ÞsEšÂõô½¾QMo36ípŒM]Óý§k^ƒ«µ½}zûô,Â-Â-Þ?©¸Û¸­[þ:{ßgafI¡24ŽÆÑ¸‰ &&Ü ½z3tDƈŒÒŠ‚JP ªÏr R• !H‚…`éå†m¶mØöÜýs÷ÏÝ¿´ûÒîK»Ûºµukë&½KÝ©;ý0ÔöŸuK­ l`CH À&lÂ&™£ÌQæXõMÕ7Uß„í Û¶ÓXn,7~?*ƒÉpÒUð—¶ŽÆ<‡4Ð&i*k|_]ÎíT0¡=ÁÜÅîì¡Q[¥“¥OéSQ-ªE5c1²O—†£Åd.™Kæj/h/h/TœSqNÅ9C † -P—S—S—Ûu{×í]·wÞÛyoç=ÝÑÎç‰ó>xðåŸAéÉ€<à†hˆ†º‰–ŽáޱXËbeZ™V¦ zô2è¥^s½æzÍÙ=vÝó‘ùÈ|d*w•»Ê¾ð…/ú úðÛ#÷g BÈBŒ‹¹XÕdiõåŒÍÝǤ¸ê¤À®!é[ÇUíœo7ÞhÁi2çñ/<Žã¸ÿ“Ô¹"Ãû¦wU’ƒªý%ç QDÇ‚ë^’Á2 ÔdNj<Þ‚ ¼a†0{¿ñ¿"Ťԋ©=èÑ´ÕM¾Sûií§µŸ^¬p±ÂÅ 111ÕžV{ZM×gIÑAtÐ×x t:PUP¥Æ¹çjœ»:âꈫ#öï ÞìtÈéÓ!]g‘,’õ ú¶KçéL:“ÎÒ²õ`ëÁÖƒ7õÙÔgSŸ„* Uª,¬´°ÒÂJªUŠ*…˜b‚{¸‡{œñ/¹6vFgtÆ]ÜÅ]D"‘[Ýh˜Ñ0£a.Z­‹¶ŽW¯:^a¦a¦a¦5Ój¦ÕL«k^×¼®¹^K½–zï3ÉŒÀŒà7ƯÙ_‹ð»„GxAmÉ@b¨5dÌàÍšÜ6ùýšFšj_ˆØ@£r*ë%{AD¬Ì‚;LJ%:ã8Žã>Füåÿ2P0\e&¸ « ,ˆ,ØK¦Ï^ÂY»Îú䕚Ú] ŽÈÅ -pLxЦðÄm–‰ÛºŒ4ïsÚüóH}®(@è%z‰^t1]LŸÝyvçÙÑÑÑÑÑÑM{6íÑ´GOÚSÖS–”œt7én!)$…ˆD$ˆ@¤ã^}µJʈ?Eœ"NÜàöØû±÷cïg¡ÏBŸ…:lrØä°©ìe,ûcJÕ”ª)UiwÚv×2-Óþµ"åE)F1ŠY1+fŲò²ò²ò‘î‘î‘î>ž>ž>žIû’ö%í›»lî²¹Ë HÒ€4޳tþ™/¡ uÿÌas Æ` &kÉZ²–mf›ÙfHÿ4ˆÑ ½<½<½<«AVƒ¬™¬3Yg²Î0Û0Û0[ÏBÏBÏ¢ ¬ ¬ Gpº¬>š;š;š;ì {ÃÞ Qˆâyܹ¿ÖÓ§H¥H. yÈK× `+2ˆœÈD9+Ãú(nÊ[Ð1§äï/–ƒú+‰¿ä8Žût¤F¼@ P‚—ì^ ˜ÁU`ðË:€› P^62ÒK6¢þ!ÙìÔÀN]“Ý–¼€-¬IUXC€”ˆ’ü²‡© 5#1’-f‹ÙbM¤&R¹¶ÇÚÞk{?ïö¼ÛónþÛü·ûooqµE|‹xæÉܘ™Eæ’¹_Q“]ÂÀÀØ<6Í#Á$˜?3yfòÌä‰É“'&&ÏLž™W_W_W_«V;¬vhµZ­Vûzâ뉯'ª&©&©&)”J¥›ÒMé¦:¤:¤:DŒ‰11Öý@5„! ùÍûKdóho¢³ßyWeÃòáŒÍ>Ôצ@ž.NìÝtMϵ¹ªËøé®‚cHÁV^nÇqŸ‘ò``@›Û ´¹ºÎ6gu½'«è=‘E¹þ ‹ú`}CšüKƒ€Àê oº—nŽÂ(Œ’’BJ“Þ }…¾B_y¤ƒÌ 3ŒŒŒœ­­­ý¦ûM÷›^«L­2µÊ„›†›†›Ö-S·LÝ2¡$”„ÏížÛ=·[Ï·žo=_³þfýÍ´mF›Ù˜Ù˜Ù˜YW³®f]ÍÚËÚËÚËÆËÆËÆKh,4ë>Ìžðä·7î/‘)¨7Ù--7Û_!Êù¡ølz|¯uE5&þÐå§ßë¹¹“·ßf÷Uœ7Ü9Žã>7ªû_E¶l#ìCŒjgïªM4Õ[4î•Þ"²ß¢˜ì×m¥@ËR±ñ7)Gµ4l´?ú£¿nXd4¢M‚H "ÇÉqrœÚS{jO ?Ð0ã1þ¿ïز±IžIÞ®=û_ìäørñåè9éUÒ«\8™Z9µòÔ›ën®[z}CbH Õ£zTØ[b‹Ù˜ÙABtÃaÿéÈN²“씦þ©Ý³vÏÚ=Ï8?àü€ýóöÏÛ?Ï$ß$ß$_·¦)1%¦`ÿRó×Þð¦¶Ô–ÚJ/‡¶mÚþT¿SýNõ»ÖöZÛkmÛ¿mÿ¶½.¡']B—Ð%p„#ÿÖr6 Lt3ÅJ}ê'p'~½¢,_–/Ë767676w:ãtÆéLUTEUÔH¯‘^#½þ™úg꟩?´þÐúCƒc‚c‚c|ü}ü}üm«ÙV³­¦Q„(BøÍ‰û+>A[6šÅà&¦Â ȉ-ÎÐ+LÑDi_Ék’Ú$·`m5SÝJï ¾Aç÷ÃX9Žã¸ÏH„ÀM©ÈF*jjP³kQÁÛ%Á_~rt¬ü¤á¼M™†óòÍ:ä›kÞžÔÓ¼…ÝÜ[áÎ'8©ÇZ„–°„%á‘äyA¢H‰"[ÉV²•ÕcõX=QQÀJ¬ÄÊһѥ G8ÂuË1¥wíVÙ­²[eŸdŸdŸd~Øü°ùaKKKÛ\;w;wë~¦/M_Õ7{möZ[C^M^ͨ¡E{‹ö†ÛßùAAõ…º†u ï _=|õ¸æcýÇúºO)@ 0£11ˆA UPU 6j£¶¸P\(.Ä À]zJ)×Í—O -´¬<+ÏÊKgç®þ]ý»ú• *T² ± ± ±{e÷ÊîÕ;ö޽cRêF]ö§}è#ùȧ2*£21ULS=R=R=RGÍ5oÔÓ4ÃñVV„·¶ÙHˆxéÎ0†ÊB}¼‚¡.Ë À~YÖ@-4Р¡‘”£Z×@I^’—(ƒ2(£­¦­¦­ÆðŸ:[°[¤E¡–PK¨¥XªXªXªo§o§oçXìXìXìü½ó÷Îß;ˆ¢ƒh×Ä®‰])4Ûl¢ÙD³‰æžæžæžÆÆÆF5jÕ˜;sÏQ½~]òذ“a§BÓ’–%-QOÌóßz’·ä­½ÆÖÌÖlÆ¢i•¦Uz¾ü•ù+ó”õÏ?>wàÝw^||ññÅÇ÷fÞ›yofaÍš…5?h59À‚¥`)XЦ¢©hÊrXËÑWHC ¿„Á”3Ã1%(AIj@j@j@Úê´Õi«=GyŽòåûØ÷±ïãä*ÉU’«Hy{>hþþš”|äãîàŽè!zˆ&åMÊ›”•>*}Tz™9eæ”™sùñåÇ—/ ]º0TsAsAsxâw¸Ãýÿø”ßOÚÔØ5‚Œ00L&“Éd¶‰mb›¤êÒêôGú#ýѰ’a%ÃJVVV&£LF™Œ2Xg°Î`ÊGå£ò)ù±äÇ’‹ÔEê"uÖ ¬AYƒ^+^+^+²ke×Ê®U8©pRá$v™]f—uÃI¥O_à^à,Îâ,R‚ö”=eOÑmк íw|]Þdÿê}Šy㱂íƒ2¨ß<ÏÏ-”Ý©ðÇâþ–»UôˆïlWîÒó}_99Žã¸¿  BE؉"$² H„;nÀ§„ œÒ ©f©b€{Ì·Tê=9(´È‚ZÜ€E ã“BŒ`¼B:Ò±Û±Iÿ~Õ¡žÔ“zZ5°j`ÕÀ´³igÓÎÆÎÆÎÆÎV¹V¹V¹å Ê”3°ßb¿Å~KÙ§eŸ–}j¶×l¯Ù^======ywywywÅ!Å!Å!e–2K™E’d`v|v|v|z™ô2éež¤=I{’özÔëQ¯G½m—Ñ?£ÿ£§÷¦Þ›ÚdåP÷¡î¶ØíµÛûnèÀ‹ªEÆEÆwr“Ý“Ý+úTnX¹¡{Y·²neC–‡,YÞ1ºctÇè'ò'ò'òË—.;$µOjŸÔþù³çÏž?{Üäq“ÇMt-si¢$ IH"×È5rM7ÄÓ€0)[ÈÔoš dHáIâzq½¸þ惛n>ð¶÷¶÷¶÷¾è}Ñû"®à ®À0øhëRúFZh¡%õI}RŸT$IEy´w|îøÌ2™e2Ë$ïBÞ…¼ ¤/éKú²Õl5[-í E(ú“ßÈ f0“žÌ 2*£²îø¥ÙI#éKn‚›àflllÒפ¯I_Ëi–Ó,§©“ÔIê$™…ÌBfAoÑ[ôVîæÜ͹›ßÈßÈßÈßõ~×û]ï7 ß,|³°°waïÂߘ žx/âÅz±^¬—”mF÷îSý á¾bŸà!ùpˆÍ…+šïÑ¿«wøì‹ževóégãk| vŽl}ø&í]ãN\ŽZ“xˆM¬\Ñ•W_Žã¸¿•4 ƒ jxA ;rvx‚@¯¾`àhà¨.V«‹ÕÕÕõvëíÖÛ­m®m®mžµ8kqÖâwïÞdT˨–Q-sYæ²Ìeo[¿mý¶õ‹6/Ú¼hó¬äYɳ’;;ïì¼³3ýtúéôÓÅÅÅÅß[ü­öŒöŒöÌG¿Õ[¼Å[a¼ÐGèÚ³¦¬©.v»ÿþbQ½T½T½´±³±³±«f\͸šq%R‰T"åË%–Ktî<Üy¸Ù!³Cf‡råÊ9”¾7}oúÞTçTçTç···+å®”»Rî‘÷#ïGÞ¯ékúúƒì4¤ iBšSä9Åô™>ÓgsÙ\6W×ø;ŒÃ8ü÷DÌS_êK}Å;âñŽËi—Ó.§×­ Z¤ùQó£æÇÈ¥‘K#—&]Oºžt¤“t’ά™5³ÖýÌ(Õ€–ž0°*¬ «Òäl“³MÎŽÆcÒˆ4"¦ž6zÚè£cŽŽ9:† èq8H„gx†g¿ë@¥YHË¢,Ê¢<Ê£<Ú¡Úa,Æb,â!J+ÊÜeî2wýýý + + +‹"‹"‹"½z;ôv¨©©±l[ç‘ç‘ç‘ó$çIΓ7ƒÞ z3è­Í[›·6E&E&E&hŒÆxŸÑe"&b¢nîҞ艞ºÐ.HŒ7Ó¹èA%s¢¦dŠôÂÑZ]âê]alÖêÞ[›öMa·/Ûµ¥n4:©‹•èCÅ ã8î‹6‘4|?×µº½›‰QëwÓv»iÏc‰£c,É„1ÆrÕyT'áVìàØÁñ,,£õ¢õ¢õ6ïÚ¼kó®ùæO˜?a¨×P¯¡^í&µ›ÔnRý§õŸÖê»Ôw©ïR³L³L³Ì?zhÄ’XKCch }NŸÓçÔƒzP2‚Œ #° °Æ°€…´>-C7ÑMBl±l±0W6X6X¸%[,[L ³…ÙdéMz jÁD0!cÉX2öcŸkYѲ¢eÅ 2dôÜÿqÿÇ+ŒV­0:kpÖà¬A«„W ¯â]ã]ã]ãY<‹gQâ†E ûnîws¿›Û4¾i|ÓxÏZžµ84GâH© u¡.¢·è-z³Óì4;­ëc–"ÂÿJßüTLÅT"‘ˆR¯öË –,»ë:¬ë°ÕVT[QmÁᇦÛévº]\)®WJ!d)YJ–²!lR&´Lh™Ð…M6]ØÔí{·ïݾ?ª8ª8ª7yÜäq“Ùz¶ž­—ŽY74SjÅKe.-K?a‘5d Y£ì[ CçÐ9úuôëèױееŠ5Ýkº×t¯:R©ŽÔ3Õ3Õ3-‰.‰.‰.lWØ®°]Ö7Yßd}“˜˜˜]”]”]Tp à@ÁÝbÉ:¬Ã:¤"©8Ó8'x‚'xЧxú—bî9î ¼¹á )&Ó¤~ðm¾54މ3ý{¥ŠISFv»™6fÔÃGË%XÖ5•¦r ädâæëÅ~iuã>¡I }¥åª—[°Â•zUÕîŸ×-<³û¸½OUéì8Ý6 µHSbÂËã8î‹æw¸K‹t‹ÐThZ÷z[Y[YƒZvhY߼݊v+¾QvhÙ¡¥…µM¾M>éKú“þôµà)x’cä9Fê‘z¤ž®§¼šý2ºéŸÛ<*=—j5TC5¢Oô‰>9CÎ3ÄŽØ»Â*J1L6L6L®T¾RùJå;6ïØ¼cóE½õ^ÔûÄÃO<¼¼êòªË«’Þ%½KzwKqKqKq`ÄFÌ6›m6Û¬—q/ã^ÆW\\q±kþ±N §„S´­Ek¡ Áû7>f#…»Ô¦µim)mbÕΉU£ ¢ ¢ Ž8~àøçUΫœWéÖ¼J¯Ò«dDI;øÎá;‡ï¶%lKض+hWЮ ò©åS˧êNu‰"Qº3~—q™#bô±ãW¿T¿T¿të4Öi¬ïHß‘¾#ÃÒÂÒÂÒÂG† Y'ºNtèÌÌL/o/o/oë%ÖK¬—èõÑë£×ç7vç8è"Ôçb.æBš3‰7й¯M&ËH°´<,¬Æ‰Ê5›v»g}ÍòÉž]/ä?œt¢Ûõ†O¼¦•«§[Ÿ‘C¤ /7Žã¸•Ǭ¢…Ô—ls˜KÓ6Qê@ÁCðøõê²²²V«­V[­nÚ µAꤗ“^Nz¹)lSئ°˜»1wcî>hð Áƒ‰»w%îú¹ëÏ]îúÓ˜ŸÆü4&Bˆ"„ 5Ak‚ÖX?µ~jý”Ô&µIíÒû'.Ä…¸PCjH I9RŽ”Ó%Fì„Nè¤ËÎ.Y…UX%¥†ÔÕÕÝ~jû©í§·%nKÜ41hbÐD)FöBöBöBÚ¨cPÇ ŽAWG^yuäé§oœ¾Qݹºsugé]A)(¥.ä),}lÒUõêÕ?:>t|èøPJý_³gÍž5{†»‡»‡»×_TQýEÕ›Wo^½yňŠ#¬£¬£¬£§§§£ü7b#6ê&Qª†j¨¦«“ŸalÇýƒÑ~¤#1—–»ì¨B¼"Å~S§÷h_’0éJ×™qêÎ×:œó›ê®ž",!"YÄËã8î‹Vºw¹¼à%Œ”µ”µ6ÊÆËÆ 3d}e}…Dzñ²ñ(!A$H·¦!L` ïƒÒ³ƒìH $ÒD?ä¹@.|lSý©úSõ§V?Zýhõ£Ýú‡u[ôpÑÃEc,b,b,N&œL8ŸŸŸgggõ<êyÔó)ÙS²§d·èÝ¢w‹ÞÞ¼xø?0™&ÓdZŸÖ§õ¥l6¤éFºIïÎŽ›7;.ñxâñÄãƒâÅŠ'5H RCz·‘I#“F&1šMŒæÊ¹+箜kÛ­m·¶ºmII"I¿þD)ý¢c ÇŽ-|3|3|3jí©µ§ÖžzsëÍ­7·Þˆz#ê©R)¤’W°W°W°¾¾¾Š¨ˆêã½ãñuqê_fÀÇ}iÈ}bˆÛÒr}Gp§É%“ÏvË/ÖNѵ9c3žö¶\!¸±w‰´Ž,„6#Wx¹qÇq_‘ÒMIxÀCê•G"‘HF’‘d$ ¡!4ä×›ª†ª†ª†:884iߤ}“össçæÎÍÝ3kϬ=³Î/9¿äü’ä˜ä˜ä˜oo¼½ñöØ“cOŽ=ùaùËX1'bNÄœÊÝ*w«ÜM]¤.Rt¨¥,^/‹'ÉCò°¿þýû÷MŠMZµlÕêU«¥u| |µ¾Ú•Oøð‹ïß=¾ûȵ#׎\[z?tD'”””8‡8‡8‡øôé?²¦²¦²¦²Áµ×\««_W¿®~pfpfpf…é¦W˜nímímí­§§÷·[±“0 “P5QŽp„#äCÎ+÷uÜB>ÕŽZá4V±=¨…~•:ÙûZæ_žÛëpÃÉÂ"2ä#õž(ïx|NÜâ§N׈¿)»@ç M°8Š™ñÓÀqÇqLÃt·q›ÒBZ(ňk§j§j§þz#u[u[uÛ@‡@‡@ϧžO=ŸV4«hVѬ|ÝòuË×µíaÛöGa›Â6…mòmómómß4}ÓôMÓ«·¯Þ¾zûrþåüËùÏÇ<ó|Ì}½ûz÷õÄWâ+ñ•´çÀ!,;¹ló²Í/¿yÙäe“‘ûGy`lå±c|J|Œ}Œ£Y´,Z6¡`Bþ„|…\!WÈ-Œ-Œ-̃̃̃Œž=3z&/////O‘GäQΤœI9“²ŽeË:–a•a•aõöÅÛo_”4-iZÒôƒ/æw¸KÑð¬«Ãêèæå³r_±O÷i>"‘8ŠËFæÊéòøÝGîm×GÑWð¢M®ê-z'öL‰èuôíÕ òzŽê—ŒÝÄGü4pÇqÜJ7Lm`Ä"±ä¹Cî`9–c9˜À]y)ê0u˜:Ì)Ã)Ã)Ãã®Ç]»S¦Lõ}áûÂ÷…qeãÊÆ• &L4˜HshÍyºóéΧ;ï¾;øîàû¯î¿ºÿêÂÎ ».ìzµøÕÂW 7 ÞÐkC/ùDùxùøTšJS©Û2·En‹žŒ{2÷ÉÜ…>Zø({Jö”ì)ÖÖÖrs¹¹Ü\ã§ñÓøÏ,žY<ó­Ñ[£·FoF¿ýftŽwŽwŽwArArAòß×îpGk´Fk]z¢%=‹àÕãÞß>•ðGy¬Gî+Æ èŽÇuFôk×Ãê–~…‘l°^7ÅÃ]®Ô½ëÑ}ó^ï³Ï„r¤jë°'h58~28Žã8îw‘•JÃ.aé2½(‰’(µ‡µ‡µ$©¤KèºÄ¸Ä¸Ä¸¤ÒàJƒ+ ...pOsOsOsìçØÏ±ŸmÛ ¶Š6ee¿j’Ú$µIîY…ÆÂ¶V-ÛZ¶ÂlÙ)Ù)Fj’šd¾Ø@l°¤Õ¹Cæ>Ü|«õ­Öz•Ô>jŸìô¬UY«rbrbrb^—{]îu¹wÏÞ={÷¬xzñôâé(D!ÞOutçq¦0…©”)_—_šTzæÀqÜgÔþïS†ÉèéäšÃŽ´é¨}0Å¿Û%ÆfÕîí²¯}ç±õÍÉ8’@r± Ž`*ñÂã8Žã¸?©tܼj¨‰;q'ît@'PjBM>¶©þ}ýûú÷ƒË— .×}T÷QÝG-]µ4oiÞ©'_œ|‘Ð(9*9*ncŒÅždŒ±«÷Ä;â¤ÙŒ1ÖÄ¥Õ¬V³Êº¨]Ô¶•mØ.PUUýèqÞÅ]ÜÅZ¬ÅZØÂ¶¿qüÇýMš£"ÊI©–¨ yLǤõ»Ý¬K›:¦ûA–;½¨gÛ³™}÷7õV+UQÊ|éb%]qõ—©"8Žã8ŽûëJ7…¥,+ýÑýq'p‚´#íH;Z—Ö¥u½©þV}­¾Ö!Ëá‡Ú7éÖ©[§xçâqÅã..².²¾ä[˜P˜°³xqñâr—<“=“ãÓ¥TŒc1cQ5PCw |)Ç}AêÃŽºF=¬ÃÃýqÝî5¼ÃØ´ù=¾clZÝòëþÕk•a5ÉÈ[í =Pr q¼ð8Žã8îoRjX¤ )ô.½Kï õ…ú³´ÚÊž9=K­Çc0ÆØÃ¶Œ1ö21ƴ唀‘˜ùt› 'èa Æ`ŒncÞÎqŸåòýT²P„b´‚>ö 'ª½Z™W¶p ´4²S?íbÓµª ­ú;Å Y—׸±ä;Œ |H8ÇqÇýM4Ð@£[v†3œE&2‘Iýâ¤?™If"¶°ÍjôvÔÛQÝ-ÛömÛW[C0DŠ?Ê`9–¿%©Ñ©Ñ0ÄZ¬©vvæ` êöÌó½pÜ­laAdh 7P³Ã!hc3kõŠ(¹9éZ×eoÖoÙå~{›Õ惥èlÒ‹XðÂã8Žã8Žã¸ÿîÓõ¸¿CЉ9CìÄЗßf¥çÅä ÓF°Îì¬ñE¤|¥~uûlv A€{´hh‰éPST9Ô‚~hÇ\Í&éÍSäÐÆô¢…5”|p*ÇqÇqÇ}ܧîq_Ž H„ZhóÿPò4ëEáOÅ]`H_“É¢’%3o‹ ÕtÅ!Ÿ“XhÁò¬2ÇqÇq÷ß|ê÷ñ8ˆ³t±E”X¤-Ðn»!¯CAS@èCÓÄ­¬MŒÛ(M…h¹G¦é¶Òƒì“ ÇqÇqÇý‹|êæòbœÂáù‘¶€ dÈÌD~¹B9@3èOâöŒU0l(Ÿ$›aCµ[·Õ Ô€??ÇqÇq÷1Ÿºá^€”àŠ Ä+ˆ Ù{ŠC´“ 0°8'$Ò4²Ó~ ‰‘£´ÙŒîhÆOÇqÇqÇ}̧n¸`Ýð3» â»Åñ_ÈÄŸÄ™ä(ñ†¾ð†n¤-²ÔeU÷u[}Gê €Ÿ Žã8Žã8Žû˜OÝpgÀF"·¤²z]+ÉÃ÷Ú¾¬2f£",eß‘D2ØÆÈPÐwÖ!‹Ñ”„ò“ÁqÇqÇqóy†„vfûqYZÌð-ˆ(–—ÄhhãH6¾ES¼ -È ó‹z”«tëCu¸ó“ÁqÇqÇqóYîì¬ÇIiùÍÚü9…“ Wh<Äšä™î($‰›mºDo¤´Yp>8•ã8Žã8Žã>îó4ÜØD¶ zAH5ËÎÈK-ZrA“B÷܆Š’5æL¥7Aâ RŒ<ÇqÇqÇqú< ÷ºXŠí(€Ú×»sÏæÛN,Ù®CÆdr O0èb €?laN¢Ð!ÐB”bä9Žã8Žã8ŽûÐç‰q¯ùØH*c Fd—+°/ê[¨é©ñG{@d«‡¦Ã•§åK‹—x#&²},=_~J8Žã8Žã8î×dŸe¯·ŠtÜFÔd®¬[ðΧ(O£¯1ZÑP4S§ªš)½”*ùù ¢Õ%MK𑲆y ¸„ëüÄpÇqÇq\iŸ§Ç]ŠV¿‡7È‚ ¬aùΤx¦(©O‚ SÄÆ&£õê)[ºl„rÈÉs2ýø)á8Žã8Žã¸_û< w)Z] <Ä+¤§ß/ø¹x#€:ðgïØvGm¢)gÒMï„bJP‚ìF'ÎO ÇqÇqÇýý{>&³Cáñ’~|à(Ƴ'¬†~{ÙU!Ôð®rž|ˆ4$•Ì@]øðSÂqÇqÇq¿ö75ÜS;ät+T›ØA<Él Ö)ÉRŒ')È›èVÚ@¾A5~J8Žã8Žã8î×þ¦†û³òïºåDp†µh/ : Kioõh¹Rè)­C†ÁŽ<“;ÇqÇqÇýÚßÔpíšã–¿ ׉L´?2c6¯dfÂhÃBù[á®n¥Í¨‹Š<“;ÇqÇqÇýÚßÕã¾ý]™l'ø"å˜;†—°"†èdä£Ì—›B¨±qPCŸŸŽã8Žã8Ž+ís6ÜÓQ­´˜·¾(ºÄJôÓ¶fË„zÄ”œÑ‰ÊŒ4½at …ÈC®¶™ØEsøÂŸŽã8Žã8Ž+ís6Üãñ¹Òbq=ñ5{Y¯H­IöÓUD ˆ»ÅÊÖ “õ«ãE޳艨W8ðÃqÇqÇq¥}Άûy¼Ä[i±PÐ'¦_-X_4AæHï“–(ýØZÓ9zr¥µÜEè$dâ)ÈP v°à'†ã8Žã8ŽãJûœ ÷›x…,(AAJºi+ˆ6ïÆ†”ÄCº•8A)BüÁb„þ$ÕdU‚ì¹p´Ðêp€%?1ÇqÇqWÚgl¸³+xŽ7(‚VÔØik¿í’ÿ¤h/ ÉÚg,Óx²Žü¥¢•°›^×ÅÃ{ÂFüÄpÇqÇq\iŸ³Çý ž" ƒ` VÒO­U½Y›×³`#T”’Eš:b–`–¥z$ÿVñB° åu[ùÁ &üÄpÇqÇq\iŸ³á¾7ð€`±[lÍsÓ¬¹ÓáŒà¥ÝÇ&3‘Lñ³lœL$½È^ÝVž0…?1ÇqÇqWÚçl¸ŸÅ}<¥†$œ˜C5Œ^WÉy­Ð–<׆ŠYEe¤|Ý Oä…º­\`?1ÇqÇqWÚçl¸g£E(7¸£¹ÈÎy[œ¥¹Šb{Ó²¤¼aä¶ÕŒ©ïé¶"ü¤pÇqÇqÜÿïóÏœ:gqGZÌm]⥭wM9íNÚ”¤‘ ìRmÆ«Oñ“ÁqÇqÇqóÙîl Îã¶´œ=´ø¡æHÉÍ m­OTä(d¸gÖf†ëôeüdpÇqÇqÜÇ|þ†{Ûˆ3ÒrÆÜü×Å·³+uÒLª…ÄÀÜ´=lØQ/ŠŸ Žã8Žã8Žû˜Ï*Ó {qu§P¿Ø*/¿¸BÉ.êM»À%$Û…¾Ò¯ÎOÇqÇqÇ}Ìçïqï=ì4ȳ†Ù'åU+vÔô%]‰€‹H2 Q½”OÒmP-´ |˜*ÇqÇqǽ÷ù{Ük±eØ”¼½“—WPœs¬htñ€^%ßì$»bÖFÙ]¾ÁpG9ØÂF```üôpÇqÇqœäó÷¸·À ì¤WI#<ÖìÖdk s&Ö.ºBÓÁ~Â~ÓVÊnÂq\À]<Â\ÁA%?=ÇqÇq'ùü=îQHÄ]º‡“48à æo’ ú—ø¤ FLÍ*¨†ÊæÈfê×P$É_³óè…EØ„^hÁOÇqÇqÇIþ,¿²ßÔªƒœIEND®B`‚routino-3.2/doc/html/tagging.html 644 233 144 73414 12520735115 12276 0 Routino : Tagging Rules

Routino : Tagging Rules

Tags And Attributes

The different tags and attributes in the
OSM format XML that are used by Routino are described below.

Routino handles the tags in the input file after they have been processed according to a set of rules defined in a configuration file. The first half of this file describes the tags that are recognised by Routino after being processed; the second half of the file describes the transformations that are in the default tagging configuration file.

Tags Recognised After Processing

This section describes the tags that are recognised by Routino after the tag transformations have been applied. This is therefore a much reduced set of tags compared to the original OSM data and also includes tags which are specific to Routino.

In all cases of tag processing values of true, yes, 1 are recognised as being affirmative and any other value is negative.

Node Tags And Attributes

The node attributes id, latitude and longitude are used. The id attribute is required to associate the node with the ways and the position attributes are required to locate the node.

Transport Specific Tags

One tag is recognised for each of the different modes of transport: foot, horse, bicycle, wheelchair, moped, motorcycle, motorcar, goods, hgv and psv. These indicate whether the specific type of transport is allowed to pass through the node or not.

By default for nodes all types of transport are allowed to pass through a node and specific tags must be used to remove the permissions for the transport.

The roundabout Tag

The roundabout tag for mini-roundabouts is recognised and used to improve the description of the route.

Way Tags And Attributes

The tags from the ways in the data are the ones that provide most of the information for routing. The id attribute is used only so that the many segments associated with a way can share a set of tags taken from the way. The nd information is used to identify the nodes that make up the way.

The highway Tag

The most important tag that is used from a way is the highway tag. This defines the type of highway that the way represents. Any way that does not have a highway tag is discarded.

There are more highway types defined than are used by the router. The subset that the router uses are:

  • motorway
  • trunk
  • primary
  • secondary
  • tertiary
  • unclassified
  • residential
  • service
  • track
  • cycleway
  • path (1)
  • steps (2)

Note 1: This changed in version 1.3 of Routino - the bridleway and footway types were included within the path highway type.
Note 2: This changed in version 1.3 of Routino - the steps type was separated from the footway type.

Transport Specific Tags

One tag is recognised for each of the different modes of transport: foot, horse, bicycle, wheelchair, moped, motorcycle, motorcar, goods, hgv and psv. These indicate whether the specific type of transport is allowed on the highway or not.

By default for ways no types of transport are allowed to pass along a highway and specific tags must be used to add the permissions for the transport.

The name Tag

The name tag is used to provide the label for the highway when printing the results.

The ref Tag

The ref tag is used to provide the label for the highway when printing the results.

The lanes Tag

The lanes tag is used to identify whether a highway has multiple lanes for traffic and this is used to derive the multilane highway properties.

The paved Tag

The paved tag is used to identify whether a highway is paved or not, this is one of the available highway properties. A paved tag may exist in the original data but normally the surface tag needs to be transformed into the paved tag.

The multilane Tag

The multilane tag is used to indicate that a highway has multiple lanes for traffic.

The bridge Tag

The bridge tag is used to identify whether a highway is a bridge and therefore set one of the available properties.

The tunnel Tag

The tunnel tag is used to identify whether a highway is a tunnel and therefore set one of the available properties.

The footroute Tag

The footroute tag is used to identify whether a highway is part of a walking route and therefore set one of the available properties. This is not a standard OSM tag and is normally added to the individual highways by looking for route relations that are designated for foot access.

The bicycleroute Tag

The bicycleroute tag is used to identify whether a highway is part of a bicycle route and therefore set one of the available properties. This is not a standard OSM tag and is normally added to the individual highways by looking for route relations that are designated for bicycle access.

The cyclebothways Tag

The cyclebothways tag is used to identify whether a highway allows cycling in the opposite direction to a signposted oneway restriction.

The oneway Tag

The oneway tag is used to specify that traffic is only allowed to travel in one direction.

The roundabout Tag

The roundabout tag is used to specify that a highway is part of a roundabout to improve the description of the calculated route.

The maxspeed Tag

The maxspeed tag is used to specify the maximum speed limit on the highway; this is always measured in km/hr in OpenStreetMap data. If the tag value contains "mph" then it is assumed to be a value in those units and converted to km/hr.

The maxweight Tag

The maxweight tag is used to specify the maximum weight of any traffic on the highway. In other words this must be set to the heaviest weight allowed on the highway (for example a bridge) in tonnes. If the tag value contains "kg" then it is assumed that the value is in these units and converted to tonnes.

The maxheight Tag

The maxheight tag is used to specify the maximum height of any traffic on the highway. In other words this must be set to the lowest height of anything above the highway (like a bridge) in metres. If the tag value contains a measurement in feet or feet and inches then attempts are made to convert this to metres.

The maxwidth Tag

The maxwidth tag is used to specify the maximum width of any traffic on the highway. This must be set to the minimum width of the constraints at the wayside in metres. If the tag value contains a measurement in feet or feet and inches then attempts are made to convert this to metres.

The maxlength Tag

The maxlength tag is used to specify the maximum length of any traffic on the highway (usually from a traffic sign) in metres. If the tag value contains a measurement in feet or feet and inches then attempts are made to convert this to metres.

The area Tag

The area tag is used to specify that a way defines an area. This is used only so that in the case of duplicated segments those belonging to an area can be discarded in preference to those that are not.

Relation Tags And Attributes

The tags from the relations are used to associate more properties with the highways that are part of that relation. The id attribute is used so that relations that are members of other relations can be identified. The member information is used to identify the nodes and ways that make up the relation.

The footroute Tag

The footroute tag is used to identify whether a relation defines a walking route and therefore should be applied to the individual member highways.

The bicycleroute Tag

The bicycleroute tag is used to identify whether a relation defines a bicycle route and therefore should be applied to the individual member highways.

The type, restriction & except Tags

For turn relations the information about the allowed or disallowed turns are stored in the type, restriction and except tags. For a turn restriction the type must be equal to "restriction", the restriction must define the type of turn relation and except defines transport types which are exempt from the restriction.

Tag Transformations

This section describes the set of tag transformations that are contained in the default configuration file. The configuration file tagging rules are applied in sequence and this section of the document is arranged in the same order.

Node Tag Transformations

Barrier Defaults

The first part of the tag transformations is to decide on defaults for each type of node. This uses the barrier tag in the OSM file and converts it into a default set of disallowed transport types.

Transport types through different barrier types
Barrier foot horse wheelchair bicycle moped motorcycle motorcar goods hgv psv
kissing_gate, footgate, stile, v_stile, turnstile, squeeze, squeeze_stile, cycle_barrier, bicycle_barrier yes no no no no no no no no no
horse_stile, horse_jump, step_over yes yes no no no no no no no no
horse_barrier, cattle_grid yes no yes yes yes yes yes yes yes yes
motorcyle_barrier yes yes yes yes no no no no no no
bollard, car_barrier, car_trap yes yes yes yes yes yes no no no no

Generic Access Permissions

The access tag is used to specify the default access restrictions through the node. If the tag value is no or private or a selection of other values then all transport types are denied access (later tag transformation rules may add specific transport types back again).

Other Access Permissions

A tag named vehicle means any of the bicycle, moped, motorcycle, motorcar, goods, hgv and psv transport types. A tag named motor_vehicle is transformed to mean any vehicle except a bicycle.

Specific Access Permissions

The final part of the access permissions is to use the specific transport type tags.

One tag is recognised for each of the different modes of transport: foot, horse, bicycle, wheelchair, moped, motorcycle, motorcar, goods, hgv and psv. These indicate whether the specific type of transport is allowed through the node or not; the values listed for the access tag are also accepted here.

Mini-roundabouts

If the highway tag has the value mini_roundabout or the junction tag has the value roundabout then a junction tag with value roundaboutis passed through.

Way Tag Transformations

Highway Defaults

The first part of the tag transformations is to decide on defaults for each type of highway. This uses the highway tag in the OSM file and maps it into one of the highway tags that are recognised by Routino, defining the default allowed transport types and adding a number of properties.

The first part of the highway tag checking is to ignore the highway tag if it has a value that indicates a non-highway. These are the proposed and construction values for future highways, the no, abandoned and disused values for previous highways and a small number of other values.

The second part of the highway transformation is to convert the highway tag into one that is recognised by Routino.

Mapping of equivalent highway types
Original tag Transformed tag
motorway_link motorway
trunk_link trunk
primary_link primary
secondary_link secondary
tertiary_link tertiary
minor, road unclassified
living_street residential
access, services, layby service
byway, unsurfaced, unpaved track
footway, bridleway, pedestrian, walkway path
route=ferry ferry (1)
Note 1: A ferry route is converted into a highway of type "ferry" so that routes using a ferry can be calculated.

The type of highway also determines the defaults for the types of transport allowed on the highway. The default assumptions are as shown in the table below.

Transport types on different highway types
Highway foot horse wheelchair bicycle moped motorcycle motorcar goods hgv psv
motorway no no no no no yes yes yes yes yes
trunk no (1) no (1) no (1) yes yes yes yes yes yes yes
primary yes yes yes yes yes yes yes yes yes yes
secondary yes yes yes yes yes yes yes yes yes yes
tertiary yes yes yes yes yes yes yes yes yes yes
unclassified yes yes yes yes yes yes yes yes yes yes
residential yes yes yes yes yes yes yes yes yes yes
service yes yes yes yes yes yes yes yes yes yes
track yes yes yes yes no no no no no no
cycleway yes no yes yes no no no no no no
path yes yes (2) yes yes (2) no no no no no no
steps yes no no no no no no no no no
ferry (3) no no no no no no no no no no

Note 1: A trunk road may legally allow foot, horse or wheelchair access but in the absence of other tags is considered to be too dangerous.
Note 2: A path allows bicycle or horse access by default only if actually labelled as a highway of type "bridleway".
Note 3: Ferry routes must be explicitly tagged with the allowed transport types, it is not sensible to try to guess.

Finally for the highway tag a number of default properties are added depending on the highway type.

Default properties on different highway types
Highway Properties
motorway paved, oneway, multilane
trunk paved, multilane (1)
primary paved, multilane (1)
secondary paved
tertiary paved
unclassified paved
residential paved
service paved
track paved (2)
cycleway paved
path paved (3)
steps
ferry

Note 1: A highway of this type has the multilane property by default if it is oneway.
Note 2: A track is paved only if it is tagged as tracktype=grade1.
Note 3: A path is paved only if it was originally tagged as highway=walkway or highway=pedestrian.

Generic Access Permissions

The access tag is used to specify the default access restrictions on the highway. If the tag value is no or private or a selection of other values then all transport types are denied access (later tag transformation rules may add specific transport types back again).

Other Access Permissions

A tag named vehicle means any of the bicycle, moped, motorcycle, motorcar, goods, hgv and psv transport types. A tag named motor_vehicle is transformed to mean any vehicle except a bicycle.

The designation tag is used as an alternative method of identifying the legal right of way on a path (in the UK at least). The tag transformations convert these tags into a set of allowed transport types as shown below.

Aliasing of designation types
Designation tag Equivalent access permissions
restricted_byway foot=yes, wheelchair=yes, horse=yes, bicycle=yes
public_byway, byway, byway_open_to_all_traffic foot=yes, wheelchair=yes, horse=yes, bicycle=yes, moped=yes, motorcycle=yes, motorcar=yes
permissive_bridleway, public_bridleway, bridleway foot=yes, wheelchair=yes, horse=yes, bicycle=yes
public_cycleway foot=yes, wheelchair=yes, bicycle=yes
permissive_footpath, public_footpath, footpath foot=yes, wheelchair=yes

In addition to these there are some other tags and values that will modify the transport permissions on the highway.

A highway that is tagged as motorroad with a value of yes will deny access to foot, horse, wheelchair, bicycle and moped transport.

A highway that is tagged with footway or sidewalk and one of a set of popular values will allow foot and wheelchair access even if the road type would not normally do so.

A highway that is tagged as cycleway with one of several values will allow bicycle access. If the value of the cycleway tag is opposite_lane, opposite_track or opposite then the cyclebothways tag is set.

A highway that is tagged as oneway:bicycle with the value no will also cause the cyclebothways tag to be set.

Specific Access Permissions

The final part of the access permissions is to use the specific transport type tags.

One tag is recognised for each of the different modes of transport: foot, horse, bicycle, wheelchair, moped, motorcycle, motorcar, goods, hgv and psv. These indicate whether the specific type of transport is allowed on the highway or not.

Highway Properties

If there is a surface tag then the highway is assumed to be unpaved unless the tag value matches one of the following: paved, asphalt, concrete or many other values listed in the configuration file.

Support for the obsolete paved tag is also provided and the highway is paved if this is set to a true value.

The lanes tag is passed through to be used to set the multilane highway property.

The bridge and tunnel tags are copied directly from the input to the output.

Highway Restrictions

The oneway, maxspeed, maxweight, maxheight, maxwidth and maxlength are copied directly from the input to the output without modification.

Roundabouts

If a highway is tagged as junction=roundabout then a roundabout=yes tag created on the output.

Highway Names and References

The name and ref tags are copied directly from the input to the output.

Highway Areas

The area tag is copied directly from the input to the output.

Relation Tag Transformations

The type tag is passed through without change.

Routes

The route tag can be used to determine whether a relation is part of a walking or bicycle route so that the footroute or bicycleroute properties can be applied to the highways that make up that relation.

The tag transformations that are applied for route relations are defined in the table below.

Route properties from different route types
Relation Tag footroute Property bicycleroute Property
foot, walking, hiking yes no
bicycle no yes
bicycle;foot, foot;bicycle yes yes

Turn Restrictions

No tag transformations are defined for turn restriction relations but the restriction and except tags are passed through without change.
routino-3.2/doc/html/limits.html 644 233 144 17142 12520735050 12151 0 Routino : Numerical Limits

Routino : Numerical Limits

32/64-bit Data IDs

The OpenStreetMap data uses a numerical identifier for each node, way and relation. These identifiers started at 1 and increase for every new item of each type that is added. When an object is deleted the identifier is not re-used so the highest identifier will always be higher than the number of objects.

The identifier needs to be handled carefully to ensure that it does not overflow the data type allocated for it. Depending on the data type used to store the identifier there are are a number of numerical limits as described below:

  1. If a signed 32-bit integer is used to store the identifier then the maximum value that can be handled is 2147483647 (231-1) before overflow.
  2. If an unsigned 32-bit integer is used to store the identifier then the maximum value that can be handled is 4294967295 (232-1) before overflow.
  3. If a signed 64-bit integer is used to store the identifier then the maximum value that can be handled is 9223372036854775807 (263-1) before overflow.
For the purposes of this document the possibility of overflow of a 64-bit integer is ignored.

The part of Routino that handles the node, way and relation identifiers is the planetsplitter program.

ID Above 31-bits

The first identifier exceeding 31-bits (for a node) is predicted to be created in the OpenStreetMap database in February 2013.

All versions of Routino use unsigned 32-bit integers to store the identifier. Therefore all versions of Routino will continue working correctly when node number 2147483648 (231) or higher is present.

ID Above 32-bits

The ability of Routino to handle identifiers larger than 32-bits does not depend on having a 64-bit operating system.

Before version 2.0.1 of Routino there was no check that the identifier read from the input data would fit within an unsigned 32-bit integer. Earlier versions of Routino will therefore fail to report an error and will process data incorrectly when node number 4294967296 (232) or higher is present.

From version 2.0.2 the code is written to allow the node, way and relation identifier data type to be changed to 64-bits. This means that a consistent data type is used for handling identifiers and the format used for printing them is consistent with the variable type.

From version 2.0.2 onwards it is possible to make a simple change to the code to process data with node identifiers above 4294967296 (232) without error. The binary format of the database will be unchanged by the use of 64-bit identifiers (since the identifiers are not stored in the database).

To recompile with 64-bit node identifiers the file src/typesx.h should be edited and the two lines below changed from:

typedef uint32_t node_t;

#define Pnode_t PRIu32
to:
typedef uint64_t node_t;

#define Pnode_t PRIu64

A similar change can also be made for way or relation identifiers although since there are currently fewer of these the limit is not as close to being reached.

Between version 2.0.2 and version 2.4 a bug means that route relations will ignore the way or relation identifier if it is equal to 4294967295 (232-1).

From version 2.4 onwards when a numerical limit is reached the planetsplitter program will exit with an error message that describes which limit was reached and which data type needs to be changed.

Database Format

The other limitation in Routino is the number of objects stored in the database that is generated by the planetsplitter data processing. This number may be significantly different from the highest identifier in the input data set for two reasons. Firstly any nodes, ways or relations that have been deleted will not be present in the data. Secondly when a partial planet database (continent, country or smaller) is processed there will be only a fraction of the total number of nodes, ways and relations.

The limiting factor is the largest of the following.

  1. The number of nodes in the input data files.
  2. The number of segments in the input data files.
  3. The number of highways in the input data files.
  4. The number of relations in the input data files.
Normally the number of nodes will be the limiting factor.

32-bit Indexes

Before version 1.2 the database could hold up to 4294967295 (232-1) items of each type (node, segment, way) since an unsigned 32-bit integer is used.

Versions 1.3 to 1.4.1 have a limit of 2147483647 (231-1) items since half of the 32-bit integer range is reserved for fake nodes and segments that are inserted if a waypoint is not close to a node.

From version 1.5 the limit is 4294901760 (232-216) for the number of items of each type that can be stored. The small remaining part of the 32-bit unsigned integer range is reserved for fake nodes and segments.

64-bit Indexes

When using a 32-bit operating system it is not possible to create a database that exceeds about 2GB in total. This will be fewer than 232 objects in the database in total. The use of 64-bit indexes will require a 64-bit operating system.

From version 2.0.2 onwards it is possible to make a simple change to the code to index the database objects with 64-bit integers insted of 32-bit integers.

To recompile with 64-bit index integers the file src/types.h should be edited and the two lines below changed from:

typedef uint32_t index_t;

#define Pindex_t PRIu32
to:
typedef uint64_t index_t;

#define Pindex_t PRIu64
This change will affect nodes, segments, ways and relations together. The database that is generated will no longer be compatible with Routino that has been compiled with 32-bit indexes. The size of the database will also grow by about 50% when this change is made.
routino-3.2/doc/html/readme.html 644 233 144 25545 13061247717 12124 0 Routino : Software

Routino : Software

Routino Introduction

Routino is an application for finding a route between two points using the dataset of topographical information collected by http://www.OpenStreetMap.org.

Starting from the raw OpenStreetMap data (in the form of the '.osm' XML files available on the internet) a custom database is generated that contains the information useful for routing. With this database and two points specified by latitude and longitude an optimum route (either shortest or quickest) is determined. The route is calculated for OpenStreetMap highways (roads, paths etc) using one of the common forms of transport defined in OpenStreetMap (foot, bicycle, horse, motorcar, motorcycle etc).

When processing the OpenStreetMap data the types of highways are recorded and these set default limits on the types of traffic allowed. More specific information about permissions for different types of transport are also recorded as are maximum speed limits. Further restrictions like one-way streets, weight, height, width and length limits are also included where specified. Additionally a set of properties of each highway are also recorded. The processing of the input file is controlled by a configuration file which determines the information that is used.

When calculating a route the type of transport to be used is taken into account to ensure that the known restrictions are followed. Each of the different highway types can further be allowed or disallowed depending on preferences. For each type of highway a default speed limit is defined (although the actual speed used will be the lowest of the default and any specified in the original data). To make use of the information about restrictions the weight, height, width and length of the transport can also be specified. Further preferences about road properties (e.g. paved or not) can also be selected. The simplest type of turn restrictions (those formed from an initial way, a node and a second way) are also obeyed.

The result of calculating the route can be presented in several different ways. An HTML file can be produced that contains a description of the route to take with instructions for each of the important junctions. The contents of the file are created based on a set of translations specified in a configuration file. The route is also available in a GPX (GPS eXchange) XML format. format file containing either every point and highway segment (a track file) or just a waypoint and translated instructions for the important junctions (a route file). Additionally there are two plain text files that contain all data points or just the important ones (intended for debugging and further processing).

One of the design aims of Routino was to make the software are flexible as possible in selecting routing preferences but also have a sensible set of default values. Another design aim was that finding the optimum route should be very fast and most of the speed increases come from the carefully chosen and optimised data format.

Disclaimer

The route that is calculated by this software is only as good as the input data.

Routino comes with ABSOLUTELY NO WARRANTY for the software itself or the route that is calculated by it.

Demonstration

A live demonstration of the router for the UK is available on the internet in both OpenLayers and Leaflet versions:
http://www.routino.org/uk-leaflet/
http://www.routino.org/uk-openlayers/

The source code download available below also includes a set of files that can be used to create your own interactive map.

The interactive map is made possible by use of the OpenLayers or Leaflet Javascript library from http://www.openlayers.org/ or http://leafletjs.com/.

Documentation

A full set of documentation is available that describes how to install and use the programs as well as what should go in the configuration files and how it works.

Status

Version 1.0 of Routino was released on 8th April 2009.
Version 1.1 of Routino was released on 13th June 2009.
Version 1.2 of Routino was released on 21st October 2009.
Version 1.3 of Routino was released on 21st January 2010.
Version 1.4 of Routino was released on 31st May 2010.
Version 1.4.1 of Routino was released on 10th July 2010.
Version 1.5 of Routino was released on 30th October 2010.
Version 1.5.1 of Routino was released on 13th November 2010.
Version 2.0 of Routino was released on 30th May 2011.
Version 2.0.1 of Routino was released on 7th June 2011.
Version 2.0.2 of Routino was released on 26th June 2011.
Version 2.0.3 of Routino was released on 4th August 2011.
Version 2.1 of Routino was released on 3rd October 2011.
Version 2.1.1 of Routino was released on 23rd October 2011.
Version 2.1.2 of Routino was released on 12th November 2011.
Version 2.2 of Routino was released on 3rd March 2012.
Version 2.3 of Routino was released on 21st July 2012.
Version 2.3.1 of Routino was released on 11th August 2012.
Version 2.3.2 of Routino was released on 6th October 2012.
Version 2.4 of Routino was released on 8th December 2012.
Version 2.4.1 of Routino was released on 17th December 2012.
Version 2.5 of Routino was released on 9th February 2013.
Version 2.5.1 of Routino was released on 20th April 2013.
Version 2.6 of Routino was released on 6th July 2013.
Version 2.7 of Routino was released on 22nd March 2014.
Version 2.7.1 of Routino was released on 17th May 2014.
Version 2.7.2 of Routino was released on 26th June 2014.
Version 2.7.3 of Routino was released on 8th November 2014.
Version 3.0 of Routino was released on 12th September 2015.
Version 3.1 of Routino was released on 5th March 2016.
Version 3.1.1 of Routino was released on 6th March 2016.
Version 3.2 of Routino was released on 12th March 2017.

The full version history is available in the NEWS.txt file.

Changes in Version 3.2

Bug fixes:
Don't crash if the start & finish of a route are the same point (some cases).
Update installation instructions in case Apache root is not '/var/www'.
Improve messages if default profiles, translations or tagging files not found.
Fix an error in filedumperx detected by gcc-6 indentation checker.
Ensure that selecting a language web-page defaults to that language output.
Ensure that a language that is missing some translations still get valid HTML.
Fix Perl scripts that include others (current directory not on include path).
Web pages:
Update to use the latest version of Leaflet (0.7.7).
Move the route buttons to be above the waypoints so they stay on screen.
Remove MapQuest as an optional tile source (no longer available).
Adjust some CSS and HTML so that the layout is preserved when zooming.
Translations:
Updated French, German, Polish & Russian translations.
OSM tagging:
Handle more tags like access:foot=* by translating them to foot=*.
router:
Ignore junctions forbidden by turn restrictions when describing route.
Extras:
Don't crash in the statistics dumper if some ways are *very* long.

Note: This version is compatible with databases from versions 2.7.1 - 3.1.1.

License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

It is important to note that for this program I have decided to use the Affero GPLv3 instead of just using the GPL. This license adds additional requirements to anybody who provides a networked service using this software.

Copyright

Routino is copyright Andrew M. Bishop 2008-2017.

Homepage

The Routino homepage has the latest news about the program.

Download

The download directory contains the latest version of the source code.

Subversion

The source code can also be downloaded from the Subversion repository with a command like the following:
svn co http://routino.org/svn/trunk routino

The source code can also be browsed in the Subversion viewer which also has a list of the latest changes.

routino-3.2/doc/html/configuration.html 644 233 144 24522 12520734744 13530 0 Routino : Configuration

Routino : Configuration

XML Configuration Files

New in version 1.4 of Routino is the use of configuration files to allow more information to be provided to the programs at run-time. The configuration files that are used are:
  • Tagging transformation rules for the planetsplitter program.
  • Routing profiles for the router program.
  • Output translations for the router program.
In keeping with the nature of the input and output files the configuration files are also XML files. Each of the files uses a custom defined XML schema and an XSD file is provided for each of them.

Tag Transformation Rules

The default name of the tagging transformation rules XML configuration file is tagging.xml in the same directory as the generated database files. Other filenames can be specified on the command line using the --tagging option. When processing the input it is possible to have a different set of tagging rules for each file; for example different rules for different countries.

The tagging rules allow modifying the highway tags in the source file so that the routing can be performed on a simpler set of tags. This removes the special case tagging rules from the source code into the configuration file where they can be easily modified. Part of the provided tagging.xml file showing the rules for motorway_link and motorway highway types.

<?xml version="1.0" encoding="utf-8"?>
<routino-tagging>

  <way>

    <if k="highway" v="motorway_link">
      <set v="motorway"/>
    </if>

    <if k="highway" v="motorway">
      <output k="highway"/>

      <output k="motorcycle" v="yes"/>
      <output k="motorcar"   v="yes"/>
      <output k="goods"      v="yes"/>
      <output k="hgv"        v="yes"/>
      <output k="psv"        v="yes"/>

      <output k="paved"      v="yes"/>
      <output k="multilane"  v="yes"/>
      <output k="oneway"     v="yes"/>

      <unset k="highway"/>
    </if>
...
  <way>

</routino-tagging>
The rules all have the same format; an if or ifnot element at the top level for matching the input and some other elements inside to be used if there was a match.

Within the if and ifnot rules any of the rules can be used. These are if, ifnot, set, unset, output or logerror elements.

The rules for matching the if or ifnot elements are the following:

  • An if rule that has both k and v specified is only matched if a tag exists in the input that matches both.
  • An if rule that has only the k attribute is matched if a tag with that key exists.
  • An if rule that has only the v attribute is matched for each tag with that value (i.e. the contents may be used more than once).
  • An if rule that has neither attribute specified always matches.
  • An ifnot rule that has both k and v specified is only matched if no tag exists in the input that matches both.
  • An ifnot rule that has only the k attribute is matched only if no tag with that key exists.
  • An ifnot rule that has only the v attribute is only matched if no tag with that value exists.
  • An ifnot rule that has neither attribute specified never matches.

For set, unset, output or logerror elements inside of an if rule an unspecified value for the k or v attribute is replaced by the values from the tag that matched the outer if rule. This makes it simple to delete tags that match a particular rule without having to specify the parameters more than once. For elements inside of an ifnot element an unspecified value for the k or v attribute is replaced by the values from the outer ifnot rule. This means that either the outer ifnot element or the inner element must specify both k and v attributes between them. For nested if or ifnot elements the outer k and v attributes are not inherited by the inner elements.

The set and unset elements either create or delete a tag from the input data that was read from the file. If the set element is used and the tag already exists then it is modified. The output element adds a tag to the set that will be used by Routino to determine the data properties.

The logerror element will cause an error message to be added to the error log file that reports that the key and attribute combination are not recognised. If the k attribute is specified but not the v attribute then the tag value that matches the specified key is looked up and used. An additional message attribute can be specified to be printed at the end of the logged error.

The default logged error message is:

Node XXX has an unrecognised tag 'key' = 'value' (in tagging rules); ignoring it.

The specified message attribute will replace the final part of the logged error.

Routing Profiles

The default name of the routing profiles XML configuration file is profiles.xml in the same directory as the database files. Other filenames can be specified on the command line using the --tagging option.

The purpose of this configuration file is to allow easy modification of the routing parameters so that they do not all need to be specified on the command line. In versions of Routino before version 1.4 the default routing parameters (preferred highways, preferred speeds etc) were contained in the source code, now they are in a configuration file. When calculating a route the --profile option selects the named profile from the configuration file.

Part of the provided profiles.xml file showing the parameters for transport on foot is shown below:

<?xml version="1.0" encoding="UTF-8" ?>
<routino-profiles>

  <profile name="foot" transport="foot">
    <speeds>
...
      <speed highway="cycleway"      kph="4" />
      <speed highway="path"          kph="4" />
      <speed highway="steps"         kph="4" />
    </speeds>
    <preferences>
...
      <preference highway="cycleway"      percent="95" />
      <preference highway="path"          percent="100" />
      <preference highway="steps"         percent="80" />
    </preferences>
    <properties>
      <property type="paved"        percent="50" />
      <property type="multilane"    percent="25" />
      <property type="bridge"       percent="50" />
      <property type="tunnel"       percent="50" />
...
    </properties>
    <restrictions>
      <oneway obey="0" /> 
      <weight limit="0.0" />
      <height limit="0.0" />
      <width  limit="0.0" />
      <length limit="0.0" />
    </restrictions>
  </profile>
  <profile name="horse" transport="horse">
...
  </profile>
...
</routino-profiles>

Output Translations

The default name of the output translations XML configuration file is translations.xml in the same directory as the database files. Other filenames can be specified on the command line using the --translations option.

The generated HTML and GPX output files (described in the next section) are created using the fragments of text that are defined in this file. Additional languages can be added to the file and are selected using the --language option to the router. If no language is specified the first one in the file is used.

Part of the provided translations.xml file showing some of the English language (en) translations is shown below:

<?xml version="1.0" encoding="utf-8"?>
<routino-translations>

  <language lang="en">
...
    <turn direction="-4" string="Very sharp left" />
    <turn direction="-3" string="Sharp left" />
    <turn direction="-2" string="Left" />
...
    <heading direction="-4" string="South" />
    <heading direction="-3" string="South-West" />
    <heading direction="-2" string="West" />
...
    <route type="shortest" string="Shortest" />
    <route type="quickest" string="Quickest" />
    <output-html>
...
    </output-html>
    <output-gpx>
...
    </output-gpx>
  </language>
</routino-translations>
routino-3.2/doc/INSTALL.txt 644 233 144 33152 12737751367 10707 0 Routino : Installation ====================== Quick Start Guide ----------------- The instructions below are a complete list of the minimum required to get Routino installed and running under Apache on Debian Linux. Other Linux versions will be similar and other UNIX based systems will also be similar although may have distinct differences. There is some support in Routino for compiling on Microsoft Windows which has its own installation instructions. *********************************************************************** *** These instructions should not be considered as complete or a *** *** secure installation for the reasons given in more detail below. *** *********************************************************************** The starting point for the installation is in the Routino source code directory after it has been uncompressed. Most of the steps will need to be run as the root user. The first thing to do is to install the packages which are required for compilation of Routino as described in the Pre-Requisites section below. apt-get install gcc make libc6-dev libz-dev libbz2-dev After this the programs can be compiled: make The files for the web interface can now be copied to the web server directory. On Debian this is '/var/www' (or more recently '/var/www/html') and the files changed to be owned by the user Apache runs as. The instructions below are based on the assumption that the files are placed in '/var/www', replace this with the chosen installation location if different. cp -a web /var/www/routino chown -R www-data:www-data /var/www/routino To be able to use Routino some data will need to be processed and a script is provided for this. This will download the data for the UK which may take a while and then process it. cd /var/www/routino/data sh -x create.sh The routino web pages also requires either the OpenLayers or Leaflet Javascript library to be downloaded and installed and scripts are provided for this. cd /var/www/routino/www/openlayers sh -x install.sh cd /var/www/routino/www/leaflet sh -x install.sh To make full use of the location search feature on the Routino web page you will need to install some extra perl packages. apt-get install libwww-perl liburi-perl libjson-pp-perl Finally to make the web pages work you will need to add the extra lines to the Apache configuration file as described in the Configuration of Web Server section below. You don't have to use 'vi' and can use any text editor. vi /etc/apache2/sites-enabled/000-default apache2ctl restart Now everything should be set up and the web page should work if accessed at 'http://localhost/routino/www/routino/router.html'. When everything is working you should read the rest of this document carefully and make the following changes: * Download your choice of OSM data - edit the file data/create.sh and run it again. * Edit the www/routino/mapprops.js file to match the downloaded data and personal map preferences. * Move the files in the web server directory so that only the contents of the www directory are accessible by the web server. * Edit the file www/routino/paths.pl to reference the new file locations. Pre-Requisites -------------- The programs are written in standard C language with minimal external requirements so only a small set of development tools are required (gcc, make). The compilation tools to use and the command line options are defined in the file 'Makefile.conf'. There is some support for multi-threading that uses pthreads and additional development libraries for this may be required (on Linux this might be part of the standard C language development files). The multi-threading is enabled by default but can be disabled at compile time by commenting out two lines in the file 'Makefile.conf'. To use the built-in gzip file decompression function and to process all PBF format files the zlib (or libz) development library is required (on Linux this might be in a package called libz-dev). The gzip function is enabled by default but can be disabled by commenting out two lines in the file 'Makefile.conf'. To use the built-in bzip2 file decompression functions the bzip2 (or libbz2) development library is required (on Linux this might be in a package called libbz2-dev). The bzip2 function is enabled by default but can be disabled by commenting out two lines in the file 'Makefile.conf'. To use the built-in xz file decompression functions the liblzma development library is required (on Linux this might be in a package called liblzma-dev). The xz function is not enabled by default but can be enabled by uncommenting two lines in the file 'Makefile.conf'. To compile the source code from subversion requires the Perl Graphics::Magick module to generate the web page icons (on Linux this might be in a package called libgraphics-magick-perl). The released source code packages contains the icons so this package is not required for compilation. To use the web page interface an http server is required. Instructions below are for Apache but any server that supports CGIs should work. The web pages use the Perl scripting language and a number of the default Perl modules. To use the search function on the router web page the Perl module JSON::PP must be installed (on Linux this might be in a package called libjson-pp-perl if not part of the standard Perl installation). Compilation ----------- To compile the programs just type 'make' at the top level of the source tree. This program has been written to run on Linux, no cross-platform compatibility has been specifically included but on the other hand other platforms have not knowingly been excluded either. Any information on improving the compilation process on anything other than x86 Linux is welcome. Installation ------------ After compilation the executable files are copied into the directory web/bin and the default XML configuration files are copied into the directory web/data. This is in preparation for using the supplied example web pages but is also a useful location to copy the files from for normal use. The required executable files are 'planetsplitter', 'router' and 'filedumper' and the '*-slim' versions of the same files. They can be copied to any location and need no special installation environment. The 'filedumperx' executable is for debugging and not required. The configuration files are called 'profiles.xml', 'tagging.xml' and 'translations.xml'. The names of the configuration files can be specified on the command line but by default are also looked for in the directory that contains the routing database with these names. Example Web Page ---------------- The directory 'web' contains a set of files that can be used to create a working set of web pages with interfaces to the routing algorithm. The files in the 'web' directory will require copying to a location that is accessible by a web server. After copying the files some of them need to be edited; search through the files for lines that contain the words "EDIT THIS" and make appropriate edits. The files that need editing are 'paths.pl' (to set the directory paths) and 'mapprops.js' (to set the map properties). Configuration of web files -------------------------- The assumption in this description is that the whole of the directory called web is copied into a directory that is accessible by an Apache web server. ************************************************************************** **** This is not a secure configuration but an easy one to configure. **** **** Only the directory 'www' should be accessible by the web server. **** **** Do not use this configuration unmodified in a public web server. **** ************************************************************************** The directory structure is as follows: web/ | + /bin/ <- The Routino executable files (when compiled). | + /data/ <- The Routino database and default configuration | files. | + /results/ <- An empty directory to store the results. | + /www/ <- The files that must be available to the web | server are below this level. | + /openlayers/ <- A directory to hold the OpenLayers library | (optional; leaflet can be used instead). | + /leaflet/ <- A directory to hold the Leaflet library. | (optional; openlayers can be used instead). | + /routino/ <- The main HTML, Javascript, CSS and CGI files. | + /documentation/ <- The HTML version of the Routino documentation. The directory 'bin' will be filled by running the compilation process. For a secure installation the 'bin' directory should be outside of the web server, the file 'www/routino/paths.pl' contains the path to the 'bin' directory. The directory 'data' must contain the Routino database and is also the default location for the configuration files. The routing database is created by downloading the OSM files for the region of interest and running the 'planetsplitter' program. There is a script in the directory that will download the OSM files and create the required database. The script should be edited to set the names of the files to be downloaded. For a secure installation the 'data' directory should be outside of the web server, the file 'www/routino/paths.pl' contains the path to the 'data' directory. The directory 'results' is a temporary directory that it used to hold the GPX and text files generated by the Routino router. The directory must be writable by the web server process since it is the CGI scripts that are run by the web server that writes the results here. For a secure installation the results directory should be outside of the web server, the file 'www/routino/paths.pl' contains the path to the results directory. The directory 'www' and its sub-directories are the only ones that need to be within the web server accessible directory. A Javascript map drawing library is required and either OpenLayers or Leaflet can be used. The library is loaded dynamically when the HTML is opened based on the value that is selected in 'mapprops.js'. The directory 'www/openlayers' is for the OpenLayers Javascript library that can be downloaded from 'http://www.openlayers.org/'. (This version of Routino has been tested with OpenLayers library versions 2.12 and 2.13.1). The file 'www/openlayers/OpenLayers.js' and the directories 'www/openlayers/img/' and 'www/openlayers/theme/' must all exist. There is a script in the 'www/openlayers' directory that will automatically download the files, create an optimised 'OpenLayers.js' and copy the files to the required locations. The directory 'www/leaflet' is for the Leaflet Javascript library that can be downloaded from 'http://leafletjs.com/'. (This version of Routino has been tested with Leaflet library versions 0.7.1 and 0.7.2). The files 'www/leaflet/leaflet.js' and 'www/leaflet/leaflet.css' and the directory 'www/leaflet/images/' must all exist. There is a script in the 'www/leaflet' directory that will automatically download the files. The directory 'www/routino' contains the main HTML, Javascript and CSS files as well as the CGI scripts that perform the server-side routing functions. The description below lists all of the files that contain editable information. paths.pl This contains the names of the directories that contain the executable files, router database and temporary results; the prefix for the routing database; and the names of the executables. mapprops.js The parameters in this file control the Javascript map library (defaults to OpenLayers), the boundary of the visible map (defaults to UK), the minimum and maximum zoom levels (defaults to between 4 and 15 inclusive), the source of map tiles (defaults to the main OpenStreetMap tile server), the data editing and browsing URLs (default to the OpenStreetMap website) and the number of waypoints allowed (defaults to 9). The directory www/routino/documentation contains the HTML version of the Routino documentation. Configuration of Web Server --------------------------- The file 'www/routino/.htaccess' contains all of the Apache configuration options that are required to get the example web pages running. The only problem is that some of the configuration options in that file will not work unless they are allowed by the 'AllowOverride' option in the main Apache server configuration file. If you have copied the routino 'web' directory into '/var/www' and named it 'routino' then the entry that you need in your Apache configuration file is this one: AllowOverride Options=MultiViews,ExecCGI FileInfo Limit This can be placed anywhere between the and tags which should be at the start and end of the file. -------- Copyright 2008-2016 Andrew M. Bishop. routino-3.2/doc/OUTPUT.txt 644 233 144 30700 12561371522 10617 0 Routino : Output ================ There are three different formats of output from the router, HTML, GPX (GPS eXchange) XML format and plain text with a total of five possible output files: * HTML route instructions for each interesting junction. * GPX track file containing every node. * GPX route file with waypoints at interesting junctions. * Plain text description with the interesting junctions. * Plain text file with every node. The "interesting junctions" referred to above are junctions where the route changes to a different type of highway, more than two highways of the same type meet, or where the route meets but does not take a more major highway. When the route follows a major road this definition eliminates all junctions with minor roads. The output files are written to the current directory and are named depending on the selection of shortest or quickest route. For the shortest route the file names are "shortest.html", "shortest-track.gpx", "shortest-route.gpx", "shortest.txt" and "shortest-all.txt", for the quickest route the names are "quickest.html", "quickest-track.gpx", "quickest-route.gpx", "quickest.txt" and "quickest-all.txt". The HTML file and GPX files are written out according to the selected language using the translations contained in the translations.xml configuration file. The text files contains untranslated header lines (in English) but the data is translated. HTML Route Instructions ----------------------- The HTML route instructions file contains one line for the description of each of the interesting junctions in the route and one line for each of the highways that connect them. The coordinates are also included in the file but are not visible because of the style definitions. An example HTML file output is below (some parts are missing, for example the style definitions): Shortest Route ...

Shortest Route

1:51.524658 -0.127877
Start:At Waypoint, head South-East
Follow:Woburn Place (A4200) for 0.251 km, 0.3 min [0.3 km, 0 minutes]
2:51.522811 -0.125781
At:Junction, go Straight on heading South-East
Follow:Russell Square (A4200) for 0.186 km, 0.2 min [0.4 km, 1 minutes]
3:51.521482 -0.124123
At:Junction, go Straight on heading South-East
Follow:Southampton Row (A4200) for 0.351 km, 0.4 min [0.8 km, 1 minutes] ...
21:51.477678 -0.106792
At:Junction, go Slight left heading South-East
Follow:Vassall Road for 0.138 km, 0.2 min [6.3 km, 6 minutes]
22:51.478015 -0.104870
At:Junction, go Straight on heading East
Follow:Vassall Road for 0.087 km, 0.1 min [6.4 km, 6 minutes]
23:51.478244 -0.103651
Stop:At Waypoint
Total:6.4 km, 6 minutes
GPX Track File -------------- The GPX track file contains a track with all of the individual nodes that the route passes through. An example GPX track file output is below: Creator : Routino - http://www.routino.org/ http://www.openstreetmap.org/copyright Shortest route Shortest route between 'start' and 'finish' waypoints ... GPX Route File -------------- The GPX route file contains a route (ordered set of waypoints) with all of the interesting junctions that the route passes through and a description of the route to take from that point. An example GPX route file output is below: Creator : Routino - http://www.routino.org/ http://www.openstreetmap.org/copyright Shortest route Shortest route between 'start' and 'finish' waypoints START South-East on 'Woburn Place (A4200)' for 0.251 km, 0.3 min TRIP001 South-East on 'Russell Square (A4200)' for 0.186 km, 0.2 min TRIP002 South-East on 'Southampton Row (A4200)' for 0.351 km, 0.4 min ... TRIP020 South-East on 'Vassall Road' for 0.138 km, 0.2 min TRIP021 East on 'Vassall Road' for 0.087 km, 0.1 min FINISH Total Journey 6.4 km, 6 minutes Text File --------- The text file format contains one entry for all of the interesting junctions in the route and is intended to be easy to interpret, for example for creating other output formats. An example text file output is below: # Creator : Routino - http://www.routino.org/ # Source : Based on OpenStreetMap data from http://www.openstreetmap.org/ # License : http://www.openstreetmap.org/copyright # #Latitude Longitude Section Section Total Total Point Turn Bearing Highway # Distance Duration Distance Duration Type 51.524658 -0.127877 0.000 km 0.0 min 0.0 km 0 min Waypt +3 Woburn Place (A4200) 51.522811 -0.125781 0.251 km 0.3 min 0.3 km 0 min Junct +0 +3 Russell Square (A4200) 51.521482 -0.124123 0.186 km 0.2 min 0.4 km 1 min Junct +0 +3 Southampton Row (A4200) ... 51.477678 -0.106792 0.204 km 0.2 min 6.1 km 5 min Junct +0 +3 Vassall Road 51.478015 -0.104870 0.138 km 0.2 min 6.3 km 6 min Junct +0 +2 Vassall Road 51.478244 -0.103651 0.087 km 0.1 min 6.4 km 6 min Waypt The text file output contains a header (indicated by the lines starting with '#') and then one line for each waypoint or junction. Each line contains the information for the current node and the next segment to be followed. For each of the lines the individual fields contain the following: Latitude - Location of the node (degrees) Longitude - Location of the node (degrees) Section Distance - The distance travelled on the section of the journey that ends at this node. Section Duration - The duration of travel on the section of the journey that ends at this node. Total Distance - The total distance travelled up to this point. Total Duration - The total duration of travel up to this point. Point Type - The type of point; either a waypoint Waypt or junction Junct. Turn - The direction to turn at this point (missing for the first line since the journey has not started yet and for the last line because it has finished). This can take one of nine values between -4 and +4 defined by: 0 = Straight, +2 = Right, -2 = Left and +/-4 = Reverse. Bearing - The direction to head from this point (missing for the last line since the journey has finished). This can take one of nine values between -4 and +4 defined by: 0 = North, +2 = East, -2 = West and +/-4 = South. Highway - The name (or description) of the highway to follow from this point (missing on the last line since the journey has finished). The individual items are separated by tabs but some of the items contain spaces as well. All Nodes Text File ------------------- The all nodes text file format contains one entry for each of the nodes on the route. An example all nodes text file output is below: # Creator : Routino - http://www.routino.org/ # Source : Based on OpenStreetMap data from http://www.openstreetmap.org/ # License : http://www.openstreetmap.org/copyright # #Latitude Longitude Node Type Segment Segment Total Total Speed Bearing Highway # Dist Durat'n Dist Durat'n 51.524658 -0.127877 8439703* Waypt 0.000 0.00 0.00 0.0 51.523768 -0.126918 8439948* Junct- 0.119 0.15 0.12 0.1 96 146 Woburn Place (A4200) 51.522811 -0.125781 8440207* Junct 0.132 0.17 0.25 0.3 96 143 Woburn Place (A4200) ... 51.478015 -0.104870 8529638* Change 0.138 0.17 6.26 5.6 48 74 Vassall Road 51.478127 -0.104174 8529849* Junct- 0.049 0.04 6.31 5.7 64 75 Vassall Road 51.478244 -0.103651 8530008 Waypt 0.038 0.04 6.35 5.7 64 70 Vassall Road The all nodes text file output contains a header (indicated by the lines starting with '#') and then one line for each node and the segment that was used to reach it. This file therefore contains exactly the same model as is used internally to define a route (a series of results each of which is a node and the segment leading to it). For each of the lines the individual fields contain the following: Latitude - Location of the node in degrees. Longitude - Location of the node in degrees. Node - The internal node number and an indicator "*" if the node is a super-node. Type - The type of point; a waypoint Waypt, important junction Junct, unimportant junction Junct-, change of highway Change or intermediate node Inter. Segment Distance - The distance travelled on the segment defined on this line. Segment Duration - The duration of travel on the segment defined on this line. Total Distance - The total distance travelled up to this point. Total Duration - The total duration of travel up to this point. Speed - The speed of travel on the segment defined on this line (missing on the first line). Bearing - The direction that the segment defined on this line travels in degrees (missing on the first line). Highway - The name (or description) of the highway segment (missing on the first line). -------- Copyright 2008-2011 Andrew M. Bishop. routino-3.2/doc/DATALIFE.txt 644 233 144 21262 12422721567 10737 0 Planetsplitter Data Lifetime ============================ Key (memory mapping): nswr = Mapped into memory read-only NSWR = Mapped into memory read/write Key (structure parameter usage): C = Created (allocated then written; write-only) D = Destroyed (read then de-allocated; read-only) U = Used (read; read-only) W = Written (written; write-only) M = Modified (read then written; read/write) T = Temporary (written then read; read/write) | = Preserved unmodified for later * = In this loop the current iteration of (super-)segments are in uppercase, the next iteration are in lowercase. ............................. : Nodes \ : |Segments | Mapped into : ||Ways | memory : |||Relations / : |||| ........................... : vvvv : nodesx->idata : : | . nodesx->gdata : : | . | . nodesx->pdata : : | . | . | . nodesx->super : : | . | . | . | . nodex->id : : | . | . | . | . | ................................... : : v . v . v . v . v : segmentsx->firstnode : : . . . . : | . segmentsx->next1 : : . . . . : | . | . segmentsx->usedway : : . . . . : | . | . | . segmentx->node1,2 : : . . . . : | . | . | . | . segmentx->next2 : : . . . . : | . | . | . | . | . segmentx->way : : . . . . : | . | . | . | . | . | .................. : : . . . . : v . v . v . v . v . v : waysx->idata : : . . . . : . . . . . : | . waysx->cdata : : . . . . : . . . . . : | . | . wayx->id : : . . . . : . . . . . : | . | . | ............... Function name (in order) : : . . . . : . . . . . : v . v . v : relationx->id | : : . . . . : . . . . . : . . : | ........... v : : . . . . : . . . . . : . . : v : :......:...................:.......................:...........:...: (Parse XML etc) : : . . . . W : . . . . . : . . W : W : :......:...................:.......................:...........:...: SortNodeList : : C . . . . U : . . . . . : . . | : | : SortWayList : : | . . . . | : . . . . . : C . . U : | : SortRelationList : : | . . . . | : . . . . . : | . . : U : RemoveNonHighwayNodes : : M . . . . U : . . . . . : | . . : | : SplitWays : : U . . . . : . . . W . . W : U . . : | : SortWayNames : W : | . . . . : . . . | . . | : | . . : | : SortSegmentList : : | . . . . : . . . U . . | : | . . : | : ProcessSegments : n : U . . . . : . . C . U . . U : U . . : | : IndexSegments : S : | . . . . : C . . | . U . W . | : | . . : | : ProcessRouteRelations : W : | . . . . : | . . | . | . | . | : U . . : U : ProcessTurnRelations : Nsw : D . . . . : D . . | . U . U . | : D . . : U : CompactWayList : : . . . . : . . D . | . . | : . C . T : : :......:...................:.......................:...........:...: SortNodeListGeographically : : . C . . . T : . . . | . . | : . | . : : SortSegmentListGeographically : : . U . . . : . . . M . . | : . | . : : IndexSegments : S : . | . . . : C . . . U . W . | : . D . : : SortTurnRelationListGeogra... : s : . D . . . : U . . . U . U . | : . . : : :......:...................:.......................:...........:...: StartPruning : : . . . . : | . C . . U . U . | : . . : : <---+ PruneStraightHighwayNodes : nSw : . . . . : U . U . . U . U . | : . . : : \ o | PruneIsolatedRegions : nSw : . . . . : U . U . . U . U . | : . . : : | n | PruneShortSegments : NSw : . . . . : U . U . . U . U . | : . . : : / e | L FinishPruning : : . . . . : | . D . . | . . | : . . : : | o RemovePrunedNodes : : . . C . . : D . . . | . . | : . . : : | o RemovePrunedSegments : : . . | . . : . . C . U . . | : . . : : | p CompactWayList : : . . | . . : . . D . | . . | : . C . T : : | RemovePrunedTurnRelations : : . . U . . : . . . | . . | : . | . : : | IndexSegments : S : . . D . . : C . . . M . W . | : . D . : : | :......:...................:.......................:...........:...: ----+ ChooseSuperNodes : sw : . . . M . : U . . . | . U . | : . . : : CreateSuperSegments : nsw : . . . U . : D . . .*Uw. U . | : . . : : DeduplicateSuperSegments : w : . . . | . : . . .*Uu. . | : . . : : :......:...................:.......................:...........:...: IndexSegments : S : . . . | . : C . . . U . W . | : . . : : <-+ ChooseSuperNodes : sw : . . . M . : U . . . | . U . | : . . : : | L CreateSuperSegments : nsw : . . . U . : D . . .*Uw. U . | : . . : : | o DeduplicateSuperSegments : w : . . . | . : . . .*Uu. . | : . . : : | o :......:...................:.......................:...........:...: --+ p MergeSuperSegments : : . . . | . : . . . U . . | : . . : : :......:...................:.......................:...........:...: SortNodeListGeographically : : . C . . D . T : . . . | . . | : . . : : SortSegmentListGeographically : : . U . . . : . . . M . . | : . . : : IndexSegments : S : . | . . . : C . . . U . W . | : . . : : SortTurnRelationListGeogra... : s : . D . . . : U . . . U . U . | : . . : : :......:...................:.......................:...........:...: SaveNodeList : : . . . . : D . . . | . | . | : . . : : SaveSegmentList : : . . . . : . . . U . U . U : . . : : SaveWayList : : . . . . : . . . . . : . . : : SaveRelationList : : . . . . : . . . . . : . . : : :......:...................:.......................:...........:...: : m . m . m . m . m : m . m . m . m . m . m : m . m . m : m : : a . a . a . a . m : a . a . a . m . m . m : a . a . m : m : : l . l . l . l . a : l . l . l . a . a . a : l . l . a : a : : l . l . l . l . p : l . l . l . p . p . p : l . l . p : p : : o . o . o . o . : o . o . o . . . : o . o . : : : c . c . c . c . : c . c . c . . . : c . c . : : Note: waysx->odata, relationsx->rridata, relationsx->rrodata and relationsx->tridata are only used by the error log creation functions which are optional (all use malloc and not mmap). routino-3.2/doc/Makefile 644 233 144 3410 12313271732 10431 0# Documentation directory Makefile # # Part of the Routino routing software. # # This file Copyright 2010-2014 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # All configuration is in the top-level Makefile.conf include ../Makefile.conf # Files to install HTML_FILES=$(notdir $(wildcard html/*.html)) $(notdir $(wildcard html/*.css)) TXT_FILES=*.txt TOP_FILES=../agpl-3.0.txt ######## all: ######## test: ######## install: install-txt install-html install-txt: @[ -d $(DESTDIR)$(docdir) ] || mkdir -p $(DESTDIR)$(docdir) @for file in $(TOP_FILES); do \ echo cp $$file $(DESTDIR)$(docdir) ;\ cp -f $$file $(DESTDIR)$(docdir) ;\ done @for file in $(TXT_FILES); do \ echo cp $$file $(DESTDIR)$(docdir) ;\ cp -f $$file $(DESTDIR)$(docdir) ;\ done install-html: @[ -d $(DESTDIR)$(docdir)/html ] || mkdir -p $(DESTDIR)$(docdir)/html @for file in $(HTML_FILES); do \ echo cp html/$$file $(DESTDIR)$(docdir)/html ;\ cp -f html/$$file $(DESTDIR)$(docdir)/html ;\ done ######## clean: rm -f *~ rm -f html/*~ ######## distclean: clean ######## .PHONY:: all test install clean distclean .PHONY:: install-txt install-html routino-3.2/doc/README.txt 644 233 144 17175 13061247703 10526 0 Routino : OpenStreetMap Routing Software ======================================== Routino is an application for finding a route between two points using the dataset of topographical information collected by http://www.OpenStreetMap.org. Starting from the raw OpenStreetMap data (in the form of the '.osm' XML files available on the internet) a custom database is generated that contains the information useful for routing. With this database and two points specified by latitude and longitude an optimum route (either shortest or quickest) is determined. The route is calculated for OpenStreetMap highways (roads, paths etc) using one of the common forms of transport defined in OpenStreetMap (foot, bicycle, horse, motorcar, motorcycle etc). When processing the OpenStreetMap data the types of highways are recorded and these set default limits on the types of traffic allowed. More specific information about permissions for different types of transport are also recorded as are maximum speed limits. Further restrictions like one-way streets, weight, height, width and length limits are also included where specified. Additionally a set of properties of each highway are also recorded. The processing of the input file is controlled by a configuration file which determines the information that is used. When calculating a route the type of transport to be used is taken into account to ensure that the known restrictions are followed. Each of the different highway types can further be allowed or disallowed depending on preferences. For each type of highway a default speed limit is defined (although the actual speed used will be the lowest of the default and any specified in the original data). To make use of the information about restrictions the weight, height, width and length of the transport can also be specified. Further preferences about road properties (e.g. paved or not) can also be selected. The simplest type of turn restrictions (those formed from an initial way, a node and a second way) are also obeyed. The result of calculating the route can be presented in several different ways. An HTML file can be produced that contains a description of the route to take with instructions for each of the important junctions. The contents of the file are created based on a set of translations specified in a configuration file. The route is also available in a GPX (GPS eXchange) XML format. format file containing either every point and highway segment (a track file) or just a waypoint and translated instructions for the important junctions (a route file). Additionally there are two plain text files that contain all data points or just the important ones (intended for debugging and further processing). One of the design aims of Routino was to make the software are flexible as possible in selecting routing preferences but also have a sensible set of default values. Another design aim was that finding the optimum route should be very fast and most of the speed increases come from the carefully chosen and optimised data format. Disclaimer ---------- The route that is calculated by this software is only as good as the input data. Routino comes with ABSOLUTELY NO WARRANTY for the software itself or the route that is calculated by it. Demonstration ------------- A live demonstration of the router for the UK is available on the internet in both OpenLayers and Leaflet versions: http://www.routino.org/uk-leaflet/ http://www.routino.org/uk-openlayers/ The source code download available below also includes a set of files that can be used to create your own interactive map. The interactive map is made possible by use of the OpenLayers or Leaflet Javascript library from http://www.openlayers.org/ or http://leafletjs.com/. Documentation ------------- The algorithm used is described in the file ALGORITHM.txt with some notes about the input data in DATA.txt and numerical limitations in LIMITS.txt. The configuration files and in particular the default set of rules for processing the OpenStreetMap data tags are described in detail in CONFIGURATION.txt and TAGGING.txt. The format of the output files generated are described in OUTPUT.txt. Detailed information about how to use the programs is available in the file USAGE.txt and how to install it is in INSTALL.txt. Status ------ Version 1.0 of Routino was released on 8th April 2009. Version 1.1 of Routino was released on 13th June 2009. Version 1.2 of Routino was released on 21st October 2009. Version 1.3 of Routino was released on 21st January 2010. Version 1.4 of Routino was released on 31st May 2010. Version 1.4.1 of Routino was released on 10th July 2010. Version 1.5 of Routino was released on 30th October 2010. Version 1.5.1 of Routino was released on 13th November 2010. Version 2.0 of Routino was released on 30th May 2011. Version 2.0.1 of Routino was released on 7th June 2011. Version 2.0.2 of Routino was released on 26th June 2011. Version 2.0.3 of Routino was released on 4th August 2011. Version 2.1 of Routino was released on 3rd October 2011. Version 2.1.1 of Routino was released on 23rd October 2011. Version 2.1.2 of Routino was released on 12th November 2011. Version 2.2 of Routino was released on 3rd March 2012. Version 2.3 of Routino was released on 21st July 2012. Version 2.3.1 of Routino was released on 11th August 2012. Version 2.3.2 of Routino was released on 6th October 2012. Version 2.4 of Routino was released on 8th December 2012. Version 2.4.1 of Routino was released on 17th December 2012. Version 2.5 of Routino was released on 9th February 2013. Version 2.5.1 of Routino was released on 20th April 2013. Version 2.6 of Routino was released on 6th July 2013. Version 2.7 of Routino was released on 22nd March 2014. Version 2.7.1 of Routino was released on 17th May 2014. Version 2.7.2 of Routino was released on 26th June 2014. Version 2.7.3 of Routino was released on 8th November 2014. Version 3.0 of Routino was released on 12th September 2015. Version 3.1 of Routino was released on 5th March 2016. Version 3.1.1 of Routino was released on 6th March 2016. Version 3.2 of Routino was released on 12th March 2017. The full version history is available in the NEWS.txt file. License ------- This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. It is important to note that for this program I have decided to use the Affero GPLv3 instead of just using the GPL. This license adds additional requirements to anybody who provides a networked service using this software. Copyright --------- Routino is copyright Andrew M. Bishop 2008-2017. Homepage -------- The Routino homepage has the latest news about the program: http://www.routino.org/ Download -------- The program can be downloaded from: http://www.routino.org/download/ Subversion - - - - - The source code can also be downloaded from the Subversion repository with a command like the following: svn co http://routino.org/svn/trunk routino The source code can also be browsed in the Subversion viewer which also has a list of the latest changes: http://www.routino.org/viewvc/trunk/ http://www.routino.org/viewvc/trunk/?view=log -------- Copyright 2008-2017 Andrew M. Bishop. routino-3.2/doc/ALGORITHM.txt 644 233 144 46204 12572106465 11117 0 Routino : Algorithm =================== This page describes the development of the algorithm that is used in Routino for finding routes. Simplest Algorithm ------------------ The algorithm to find a route is fundamentally simple: Start at the beginning, follow all possible routes and keep going until you reach the end. While this method does work, it isn't fast. To be able to find a route quickly needs a different algorithm, one that can find the correct answer without wasting time on routes that lead nowhere. Improved Algorithm ------------------ The simplest way to do this is to follow all possible segments from the starting node to the next nearest node (an intermediate node in the complete journey). For each node that is reached store the shortest route from the starting node and the length of that route. The list of intermediate nodes needs to be maintained in order of shortest overall route on the assumption that there is a straight line route from here to the end node. At each point the intermediate node that has the shortest potential overall journey time is processed before any other node. From the first node in the list follow all possible segments and place the newly discovered nodes into the same list ordered in the same way. This will tend to constrain the list of nodes examined to be the ones that are between the start and end nodes. If at any point you reach a node that has already been reached by a longer route then you can discard that route since the newly discovered route is shorter. Conversely if the previously discovered route is shorter then discard the new route. At some point the end node will be reached and then any routes with potential lengths longer than this actual route can be immediately discarded. The few remaining potential routes must be continued until they are found to be shorter or have no possibility of being shorter. The shortest possible route is then found. At all times when looking at a node only those segments that are possible by the chosen means of transport are followed. This allows the type of transport to be handled easily. When finding the quickest route the same rules apply except that the criterion for sorting is the shortest potential route (assuming that from each node to the end is the fastest possible type of highway). This method also works, but again it isn't very fast. The problem is that the complexity is proportional to the number of nodes or segments in all routes examined between the start and end nodes. Maintaining the list of intermediate nodes in order is the most complex part. Final Algorithm --------------- The final algorithm that is implemented in the router is basically the one above but with an important difference. Instead of finding a long route among a data set of 8,000,000 nodes (number of highway nodes in UK at beginning of 2010) it finds one long route in a data set of 1,000,000 nodes and a few hundred very short routes in the full data set. Since the time taken to find a route is proportional to the number of nodes that need to be considered the main route takes 1/10th of the time and the very short routes take almost no time at all. The solution to making the algorithm fast is therefore to discard most of the nodes and only keep the interesting ones. In this case a node is deemed to be interesting if it is the junction of three or more segments or the junction of two segments with different properties or has a routing restriction different from the connecting segments. In the algorithm and following description these are classed as super-nodes. Starting at each super-node a super-segment is generated that finishes on another super-node and contains the shortest path along segments with identical properties (and these properties are inherited by the super-segment). The point of choosing the shortest route is that since all segments considered have identical properties they will be treated identically when properties are taken into account. This decision making process can be repeated until the only the most important and interesting nodes remain. To find a route between a start and finish point now comprises the following steps (assuming a shortest route is required): 1. Find all shortest routes from the start point along normal segments and stopping when super-nodes are reached. 2. Find all shortest routes from the end point backwards along normal segments and stopping when super-nodes are reached. 3. Find the shortest route along super-segments from the set of super-nodes in step 1 to the set of super-nodes in step 2 (taking into account the lengths found in steps 1 and 2 between the start/finish super-nodes and the ultimate start/finish point). 4. For each super-segment in step 3 find the shortest route between the two end-point super-nodes. This multi-step process is considerably quicker than using all nodes but gives a result that still contains the full list of nodes that are visited. There are some special cases though, for example very short routes that do not pass through any super-nodes, or routes that start or finish on a super-node. In these cases one or more of the steps listed can be removed or simplified. When the first route reaches the final node the length of that route is retained as a benchmark. Any shorter complete route that is calculated later would replace this benchmark. As routes are tested any partial routes that are longer than the benchmark can be immediately discarded. Other partial routes have the length of a perfect straight highway to the final node added to them and if the total exceeds the benchmark they can also be discarded. Very quickly the number of possible routes is reduced until the absolute shortest is found. For routes that do not start or finish on a node in the original data set a fake node is added to an existing segment. This requires special handling in the algorithm but it gives mode flexibility for the start, finish and intermediate points in a route. Algorithm Evolution - - - - - - - - - - In Routino versions 1.0 to 1.4 the algorithm used to select a super-node was the same as above except that node properties were not included. Routino versions 1.4.1 to 1.5.1 used a slightly different algorithm which only chose nodes that were junctions between segments with different properties (or has a routing restriction that is different from connecting segments in versions 1.5 and 1.5.1). The addition of turn restrictions (described in more detail below) requires the original algorithm since the super-segments more accurately reflect the underlying topology. Algorithm Implementation - - - - - - - - - - - - The algorithm that is used for finding the route between the super-nodes using super-segments is the A* algorithm (or a slight variation of it). This was not a deliberate design decision, but evolved into it during development. This algorithm relies on calculating the lowest score (shortest distance or quickest time) to each node from the starting node. The remaining score for the path to the destination node is estimated (based on a straight line using the fastest type of highway) and added to the current score and the result recorded. At each step the unvisited node that has the lowest current score is examined and all nodes connected to it have their scores calculated. When the destination node has been reached all remaining unvisited nodes with scores higher than the destination node's score can be discarded and the few remaining nodes examined. The algorithm used to find the route between super-nodes using normal segments is Dijkstra's algorithm (although it is implemented as the same algorithm as above but with no estimated cost). Since these routes tend to be short and the CPU time for calculating the heuristic cost function is relatively large this tends to give a quicker solution. Routing Preferences ------------------- One of the important features of Routino is the ability to select a route that is optimum for a set of criteria such as preferences for each type of highway, speed limits and other restrictions and highway properties. All of these features are handled by assigning a score to each segment while calculating the route and trying to minimise the score rather than simply minimising the length. Segment length When calculating the shortest route the length of the segment is the starting point for the score. Speed preference When calculating the quickest route the time taken calculated from the length of the segment and the lower of the highway's own speed limit and the user's speed preference for the type of highway is the starting point for the score. One-way restriction If a highway has the one-way property in the opposite direction to the desired travel and the user's preference is to obey one-way restrictions then the segment is ignored. Weight, height, width & length limits If a highway has one of these limits and its value is less than the user's specified requirement then the segment is ignored. Highway preference The highway preference specified by the user is a percentage, these are scaled so that the most preferred highway type has a weighted preference of 1.0 (0% always has a weighted preference of 0.0). The calculated score for a segment is divided by this weighted preference. Highway properties The other highway properties are specified by the user as a percentage and each highway either has that property or not. The user's property preference is scaled into the range 0.0 (for 0%) to 1.0 (for 100%) to give a weighted preference, a second "non-property" weighted preference is calculated in the same way after subtracting the user's preference from 100%. If a segment has a particular property then the calculated score is divided by the weighted preference for that property, if not then it is divided by the non-property weighted preference. A non-linear transformation is applied so that changing property preferences close to 50% do not cause large variations in routes. Data Pruning ------------ From version 2.2 there are options to "prune" nodes and segments from the input data which means to remove nodes and/or segments without significantly changing the routing results. The pruning options must meet a number of conditions to be useful: * The topology relevant to routing must remain unchanged. The instructions that are produced from the reduced set of nodes and segments must be sufficiently accurate for anybody trying to follow them on the ground. * Any restrictions belonging to nodes or segments that stop certain types of traffic from following a particular highway must be preserved. * The total length must be calculated using the original data and not the simplified data which by its nature will typically be shorter. * The location of the remaining nodes and segments must be a good representation of the original nodes and segments. Since the calculated route may be displayed on a map the remaining nodes and segments must clearly indicate the route to take. The prune options all have user-controllable parameters which allow the geographical accuracy to be controlled. This means that although the topology is the same the geographical accuracy can be sacrificed slightly to minimise the number of nodes and segments. The pruning options that are available are: * Removing the access permissions for a transport type from segments if it is not possible to route that transport type from those segments to a significant number of other places. The limit on the pruning is set by the total length of the isolated group of segments. This significantly increases the chance that a route will be found by not putting waypoints in inaccessible places. * Removing short segments, the limit is set by the length of the segment. This removes a number of redundant segments (and associated nodes) but rules are applied to ensure that removing the segments does not alter junction topology or remove node access permissions or changes in way properties. * Removing nodes from almost straight highways, the limit is set by the distance between the remaining segments and the original nodes. This removes a large number of redundant nodes (and therefore segments) but again care is taken not to remove node access permissions or changes in way properties. Turn Restrictions ----------------- The addition of turn restrictions in version 2.0 adds a set of further complications because it introduces a set of constraints that are far more complex than one-way streets. A turn restriction in the simplest case is a combination of a segment, node and segment such that routes are not allowed to go from the first segment to the second one through the specified node. Exceptions for certain types of traffic can also be specified. Currently only this simplest type of turn restriction is handled by the algorithm. The first complication of turn restrictions is that the algorithm above requires that super-segments are composed of segments with identical properties. A turn restriction is not the same in both directions so a super-segment cannot include any route through that turn restriction. The node at the centre of the turn restriction must therefore be a super-node to avoid this. In addition to this all nodes connected to the turn restriction node by a single segment must also be super-nodes to avoid any long-distance super-segments starting at the restricted node. The second complication of a turn restriction is that the optimum route may require passing through the same node more than once. This can happen where the route needs to work around a turn restriction by driving past it, turning round (on a roundabout perhaps) and coming back along the same highway. Without turn restrictions a route could be defined purely by the set of nodes that were passed; no node would exist more than once along a route between two points. With turn restrictions the route is defined by a node and the segment used to get there; no route between two points will ever need to follow the same segment in the same direction more than once. This means that the optimisation algorithm calculates scores for directed segments (indexed by segment and end node) rather than for nodes. A side-effect of this is that a route that works around a turn restriction must be calculable using the super-segments that are stored in the database. This puts a limit on the amount of database optimisation that can be performed because if too many super-segments are removed the optimum work-around may also be removed. The solution to this is to ensure that the database preserves all loops that can be used to turn around and reverse direction, previously super-segments that started and finished on the same super-node were disallowed. Another side-effect of having the route composed of a set of locations (nodes) as well as the direction of travel (segments used to reach them) is that via points in the route can be forced to continue in the original direction. If the chosen method of transport obeys turn restrictions then it will not reverse direction at a via point but will find an optimum route continuing in the same direction. The only exception to this is when the route ahead at a waypoint is into a dead-end and an immediate U-turn is allowed. A side-effect of having the starting direction at a via point defined by the previous part of the route is that overall non-optimal routes may be found even though each section between via points is optimal. For a route with a start, middle and end point defined it can be the case that the shortest route from the start to the middle arrives in the opposite direction to that required for the optimal route from the middle to the end. The calculation of the route in separate sections therefore may give a non-optimum result even though each section is itself optimum based on the start conditions. Overall the presence of turn restrictions in the database makes the routing slower even for regions of the map that have no turn restrictions. Data Implementation ------------------- The hardest part of implementing this router is the data organisation. The arrangement of the data to minimise the number of operations required to follow a route from one node to another is much harder than designing the algorithm itself. The final implementation uses a separate table for nodes, segments and ways. Each table individually is implemented as a C-language data structure that is written to disk by a program which parses the OpenStreetMap XML data file. In the router these data structures are memory mapped so that the operating system handles the problems of loading the needed data blocks from disk. Each node contains a latitude and longitude and they are sorted geographically so that converting a latitude and longitude coordinate to a node is fast as well as looking up the coordinate of a node. The node also contains the location in the array of segments for the first segment that uses that node. Each segment contains the location of the two nodes as well as the way that the segment came from. The location of the next segment that uses one of the two nodes is also stored; the next segment for the other node is the following one in the array. The length of the segment is also pre-computed and stored. Each way has a name, a highway type, a list of allowed types of traffic, a speed limit, any weight, height, width or length restrictions and the highway properties. The super-nodes are mixed in with the nodes and the super-segments are mixed in with the segments. For the nodes they are the same as the normal nodes, so just a flag is needed to indicate that they are super. The super-segments are in addition to the normal segments so they increase the database size (by about 10%) and are also marked with a flag. Some segments are therefore flagged as both normal segments and super-segments if they both have the same end nodes. The relations are stored separately from the nodes, segments and ways. For the turn restriction relations the initial and final segments are stored along with the restricted node itself. Each node that has a turn restriction is marked in the main node storage with a flag to indicate this information. -------- Copyright 2008-2013 Andrew M. Bishop. routino-3.2/doc/LIMITS.txt 644 233 144 14050 12572106465 10564 0 Routino : Numerical Limits ========================== 32/64-bit Data IDs ------------------ The OpenStreetMap data uses a numerical identifier for each node, way and relation. These identifiers started at 1 and increase for every new item of each type that is added. When an object is deleted the identifier is not re-used so the highest identifier will always be higher than the number of objects. The identifier needs to be handled carefully to ensure that it does not overflow the data type allocated for it. Depending on the data type used to store the identifier there are are a number of numerical limits as described below: 1. If a signed 32-bit integer is used to store the identifier then the maximum value that can be handled is 2147483647 (2^31-1) before overflow. 2. If an unsigned 32-bit integer is used to store the identifier then the maximum value that can be handled is 4294967295 (2^32-1) before overflow. 3. If a signed 64-bit integer is used to store the identifier then the maximum value that can be handled is 9223372036854775807 (2^63-1) before overflow. For the purposes of this document the possibility of overflow of a 64-bit integer is ignored. The part of Routino that handles the node, way and relation identifiers is the planetsplitter program. ID Above 31-bits - - - - - - - - The first identifier exceeding 31-bits (for a node) is predicted to be created in the OpenStreetMap database in February 2013. All versions of Routino use unsigned 32-bit integers to store the identifier. Therefore all versions of Routino will continue working correctly when node number 2147483648 (2^31) or higher is present. ID Above 32-bits - - - - - - - - The ability of Routino to handle identifiers larger than 32-bits does not depend on having a 64-bit operating system. Before version 2.0.1 of Routino there was no check that the identifier read from the input data would fit within an unsigned 32-bit integer. Earlier versions of Routino will therefore fail to report an error and will process data incorrectly when node number 4294967296 (2^32) or higher is present. From version 2.0.2 the code is written to allow the node, way and relation identifier data type to be changed to 64-bits. This means that a consistent data type is used for handling identifiers and the format used for printing them is consistent with the variable type. From version 2.0.2 onwards it is possible to make a simple change to the code to process data with node identifiers above 4294967296 (2^32) without error. The binary format of the database will be unchanged by the use of 64-bit identifiers (since the identifiers are not stored in the database). To recompile with 64-bit node identifiers the file src/typesx.h should be edited and the two lines below changed from: typedef uint32_t node_t; #define Pnode_t PRIu32 to: typedef uint64_t node_t; #define Pnode_t PRIu64 A similar change can also be made for way or relation identifiers although since there are currently fewer of these the limit is not as close to being reached. Between version 2.0.2 and version 2.4 a bug means that route relations will ignore the way or relation identifier if it is equal to 4294967295 (2^32-1). From version 2.4 onwards when a numerical limit is reached the planetsplitter program will exit with an error message that describes which limit was reached and which data type needs to be changed. Database Format --------------- The other limitation in Routino is the number of objects stored in the database that is generated by the planetsplitter data processing. This number may be significantly different from the highest identifier in the input data set for two reasons. Firstly any nodes, ways or relations that have been deleted will not be present in the data. Secondly when a partial planet database (continent, country or smaller) is processed there will be only a fraction of the total number of nodes, ways and relations. The limiting factor is the largest of the following. 1. The number of nodes in the input data files. 2. The number of segments in the input data files. 3. The number of highways in the input data files. 4. The number of relations in the input data files. Normally the number of nodes will be the limiting factor. 32-bit Indexes - - - - - - - Before version 1.2 the database could hold up to 4294967295 (2^32-1) items of each type (node, segment, way) since an unsigned 32-bit integer is used. Versions 1.3 to 1.4.1 have a limit of 2147483647 (2^31-1) items since half of the 32-bit integer range is reserved for fake nodes and segments that are inserted if a waypoint is not close to a node. From version 1.5 the limit is 4294901760 (2^32-2^16) for the number of items of each type that can be stored. The small remaining part of the 32-bit unsigned integer range is reserved for fake nodes and segments. 64-bit Indexes - - - - - - - When using a 32-bit operating system it is not possible to create a database that exceeds about 2GB in total. This will be fewer than 2^32 objects in the database in total. The use of 64-bit indexes will require a 64-bit operating system. From version 2.0.2 onwards it is possible to make a simple change to the code to index the database objects with 64-bit integers insted of 32-bit integers. To recompile with 64-bit index integers the file src/types.h should be edited and the two lines below changed from: typedef uint32_t index_t; #define Pindex_t PRIu32 to: typedef uint64_t index_t; #define Pindex_t PRIu64 This change will affect nodes, segments, ways and relations together. The database that is generated will no longer be compatible with Routino that has been compiled with 32-bit indexes. The size of the database will also grow by about 50% when this change is made. -------- Copyright 2013 Andrew M. Bishop. routino-3.2/doc/CONFIGURATION.txt 644 233 144 17706 12572106465 11605 0 Routino : Configuration ======================= New in version 1.4 of Routino is the use of configuration files to allow more information to be provided to the programs at run-time. The configuration files that are used are: * Tagging transformation rules for the planetsplitter program. * Routing profiles for the router program. * Output translations for the router program. In keeping with the nature of the input and output files the configuration files are also XML files. Each of the files uses a custom defined XML schema and an XSD file is provided for each of them. Tag Transformation Rules ------------------------ The default name of the tagging transformation rules XML configuration file is tagging.xml in the same directory as the generated database files. Other filenames can be specified on the command line using the --tagging option. When processing the input it is possible to have a different set of tagging rules for each file; for example different rules for different countries. The tagging rules allow modifying the highway tags in the source file so that the routing can be performed on a simpler set of tags. This removes the special case tagging rules from the source code into the configuration file where they can be easily modified. Part of the provided tagging.xml file showing the rules for motorway_link and motorway highway types. ... The rules all have the same format; an if or ifnot element at the top level for matching the input and some other elements inside to be used if there was a match. Within the if and ifnot rules any of the rules can be used. These are if, ifnot, set, unset, output or logerror elements. The rules for matching the if or ifnot elements are the following: * An if rule that has both k and v specified is only matched if a tag exists in the input that matches both. * An if rule that has only the k attribute is matched if a tag with that key exists. * An if rule that has only the v attribute is matched for each tag with that value (i.e. the contents may be used more than once). * An if rule that has neither attribute specified always matches. * An ifnot rule that has both k and v specified is only matched if no tag exists in the input that matches both. * An ifnot rule that has only the k attribute is matched only if no tag with that key exists. * An ifnot rule that has only the v attribute is only matched if no tag with that value exists. * An ifnot rule that has neither attribute specified never matches. For set, unset, output or logerror elements inside of an if rule an unspecified value for the k or v attribute is replaced by the values from the tag that matched the outer if rule. This makes it simple to delete tags that match a particular rule without having to specify the parameters more than once. For elements inside of an ifnot element an unspecified value for the k or v attribute is replaced by the values from the outer ifnot rule. This means that either the outer ifnot element or the inner element must specify both k and v attributes between them. For nested if or ifnot elements the outer k and v attributes are not inherited by the inner elements. The set and unset elements either create or delete a tag from the input data that was read from the file. If the set element is used and the tag already exists then it is modified. The output element adds a tag to the set that will be used by Routino to determine the data properties. The logerror element will cause an error message to be added to the error log file that reports that the key and attribute combination are not recognised. If the k attribute is specified but not the v attribute then the tag value that matches the specified key is looked up and used. An additional message attribute can be specified to be printed at the end of the logged error. The default logged error message is: Node XXX has an unrecognised tag 'key' = 'value' (in tagging rules); ignoring it. The specified message attribute will replace the final part of the logged error. Routing Profiles ---------------- The default name of the routing profiles XML configuration file is profiles.xml in the same directory as the database files. Other filenames can be specified on the command line using the --tagging option. The purpose of this configuration file is to allow easy modification of the routing parameters so that they do not all need to be specified on the command line. In versions of Routino before version 1.4 the default routing parameters (preferred highways, preferred speeds etc) were contained in the source code, now they are in a configuration file. When calculating a route the --profile option selects the named profile from the configuration file. Part of the provided profiles.xml file showing the parameters for transport on foot is shown below: ... ... ... ... ... Output Translations ------------------- The default name of the output translations XML configuration file is translations.xml in the same directory as the database files. Other filenames can be specified on the command line using the --translations option. The generated HTML and GPX output files (described in the next section) are created using the fragments of text that are defined in this file. Additional languages can be added to the file and are selected using the --language option to the router. If no language is specified the first one in the file is used. Part of the provided translations.xml file showing some of the English language (en) translations is shown below: ... ... ... ... ... -------- Copyright 2010-2013 Andrew M. Bishop. routino-3.2/doc/TAGGING.txt 644 233 144 47776 12572106465 10670 0 Routino : Tagging Rules ======================= The different tags and attributes in the OSM format XML that are used by Routino are described below. Routino handles the tags in the input file after they have been processed according to a set of rules defined in a configuration file. The first half of this file describes the tags that are recognised by Routino after being processed; the second half of the file describes the transformations that are in the default tagging configuration file. Tags Recognised After Processing -------------------------------- This section describes the tags that are recognised by Routino after the tag transformations have been applied. This is therefore a much reduced set of tags compared to the original OSM data and also includes tags which are specific to Routino. In all cases of tag processing values of true, yes, 1 are recognised as being affirmative and any other value is negative. Node Tags And Attributes ------------------------ The node attributes id, latitude and longitude are used. The id attribute is required to associate the node with the ways and the position attributes are required to locate the node. Transport Specific Tags - - - - - - - - - - - - One tag is recognised for each of the different modes of transport: foot, horse, bicycle, wheelchair, moped, motorcycle, motorcar, goods, hgv and psv. These indicate whether the specific type of transport is allowed to pass through the node or not. By default for nodes all types of transport are allowed to pass through a node and specific tags must be used to remove the permissions for the transport. The roundabout Tag - - - - - - - - - The roundabout tag for mini-roundabouts is recognised and used to improve the description of the route. Way Tags And Attributes ----------------------- The tags from the ways in the data are the ones that provide most of the information for routing. The id attribute is used only so that the many segments associated with a way can share a set of tags taken from the way. The nd information is used to identify the nodes that make up the way. The highway Tag - - - - - - - - The most important tag that is used from a way is the highway tag. This defines the type of highway that the way represents. Any way that does not have a highway tag is discarded. There are more highway types defined than are used by the router. The subset that the router uses are: * motorway * trunk * primary * secondary * tertiary * unclassified * residential * service * track * cycleway * path (1) * steps (2) Note 1: This changed in version 1.3 of Routino - the bridleway and footway types were included within the path highway type. Note 2: This changed in version 1.3 of Routino - the steps type was separated from the footway type. Transport Specific Tags - - - - - - - - - - - - One tag is recognised for each of the different modes of transport: foot, horse, bicycle, wheelchair, moped, motorcycle, motorcar, goods, hgv and psv. These indicate whether the specific type of transport is allowed on the highway or not. By default for ways no types of transport are allowed to pass along a highway and specific tags must be used to add the permissions for the transport. The name Tag - - - - - - The name tag is used to provide the label for the highway when printing the results. The ref Tag - - - - - - The ref tag is used to provide the label for the highway when printing the results. The lanes Tag - - - - - - - The lanes tag is used to identify whether a highway has multiple lanes for traffic and this is used to derive the multilane highway properties. The paved Tag - - - - - - - The paved tag is used to identify whether a highway is paved or not, this is one of the available highway properties. A paved tag may exist in the original data but normally the surface tag needs to be transformed into the paved tag. The multilane Tag - - - - - - - - - The multilane tag is used to indicate that a highway has multiple lanes for traffic. The bridge Tag - - - - - - - The bridge tag is used to identify whether a highway is a bridge and therefore set one of the available properties. The tunnel Tag - - - - - - - The tunnel tag is used to identify whether a highway is a tunnel and therefore set one of the available properties. The footroute Tag - - - - - - - - - The footroute tag is used to identify whether a highway is part of a walking route and therefore set one of the available properties. This is not a standard OSM tag and is normally added to the individual highways by looking for route relations that are designated for foot access. The bicycleroute Tag - - - - - - - - - - The bicycleroute tag is used to identify whether a highway is part of a bicycle route and therefore set one of the available properties. This is not a standard OSM tag and is normally added to the individual highways by looking for route relations that are designated for bicycle access. The cyclebothways Tag - - - - - - - - - - - The cyclebothways tag is used to identify whether a highway allows cycling in the opposite direction to a signposted oneway restriction. The oneway Tag - - - - - - - The oneway tag is used to specify that traffic is only allowed to travel in one direction. The roundabout Tag - - - - - - - - - The roundabout tag is used to specify that a highway is part of a roundabout to improve the description of the calculated route. The maxspeed Tag - - - - - - - - The maxspeed tag is used to specify the maximum speed limit on the highway; this is always measured in km/hr in OpenStreetMap data. If the tag value contains "mph" then it is assumed to be a value in those units and converted to km/hr. The maxweight Tag - - - - - - - - - The maxweight tag is used to specify the maximum weight of any traffic on the highway. In other words this must be set to the heaviest weight allowed on the highway (for example a bridge) in tonnes. If the tag value contains "kg" then it is assumed that the value is in these units and converted to tonnes. The maxheight Tag - - - - - - - - - The maxheight tag is used to specify the maximum height of any traffic on the highway. In other words this must be set to the lowest height of anything above the highway (like a bridge) in metres. If the tag value contains a measurement in feet or feet and inches then attempts are made to convert this to metres. The maxwidth Tag - - - - - - - - The maxwidth tag is used to specify the maximum width of any traffic on the highway. This must be set to the minimum width of the constraints at the wayside in metres. If the tag value contains a measurement in feet or feet and inches then attempts are made to convert this to metres. The maxlength Tag - - - - - - - - - The maxlength tag is used to specify the maximum length of any traffic on the highway (usually from a traffic sign) in metres. If the tag value contains a measurement in feet or feet and inches then attempts are made to convert this to metres. The area Tag - - - - - - The area tag is used to specify that a way defines an area. This is used only so that in the case of duplicated segments those belonging to an area can be discarded in preference to those that are not. Relation Tags And Attributes ---------------------------- The tags from the relations are used to associate more properties with the highways that are part of that relation. The id attribute is used so that relations that are members of other relations can be identified. The member information is used to identify the nodes and ways that make up the relation. The footroute Tag - - - - - - - - - The footroute tag is used to identify whether a relation defines a walking route and therefore should be applied to the individual member highways. The bicycleroute Tag - - - - - - - - - - The bicycleroute tag is used to identify whether a relation defines a bicycle route and therefore should be applied to the individual member highways. The type, restriction & except Tags - - - - - - - - - - - - - - - - - - For turn relations the information about the allowed or disallowed turns are stored in the type, restriction and except tags. For a turn restriction the type must be equal to "restriction", the restriction must define the type of turn relation and except defines transport types which are exempt from the restriction. Tag Transformations ------------------- This section describes the set of tag transformations that are contained in the default configuration file. The configuration file tagging rules are applied in sequence and this section of the document is arranged in the same order. Node Tag Transformations ------------------------ Barrier Defaults - - - - - - - - The first part of the tag transformations is to decide on defaults for each type of node. This uses the barrier tag in the OSM file and converts it into a default set of disallowed transport types. Barrier foot horse wheelchair bicycle moped motorcycle motorcar goods hgv psv ------- ---- ----- ---------- ------- ----- ---------- -------- ----- --- --- kissing_gate, footgate, stile, v_stile, turnstile, squeeze, squeeze_stile, cycle_barrier, bicycle_barrier yes no no no no no no no no no horse_stile, horse_jump, step_over yes yes no no no no no no no no horse_barrier, cattle_grid yes no yes yes yes yes yes yes yes yes motorcyle_barrier yes yes yes yes no no no no no no bollard, car_barrier, car_trap yes yes yes yes yes yes no no no no Generic Access Permissions - - - - - - - - - - - - - The access tag is used to specify the default access restrictions through the node. If the tag value is no or private or a selection of other values then all transport types are denied access (later tag transformation rules may add specific transport types back again). Other Access Permissions - - - - - - - - - - - - A tag named vehicle means any of the bicycle, moped, motorcycle, motorcar, goods, hgv and psv transport types. A tag named motor_vehicle is transformed to mean any vehicle except a bicycle. Specific Access Permissions - - - - - - - - - - - - - - The final part of the access permissions is to use the specific transport type tags. One tag is recognised for each of the different modes of transport: foot, horse, bicycle, wheelchair, moped, motorcycle, motorcar, goods, hgv and psv. These indicate whether the specific type of transport is allowed through the node or not; the values listed for the access tag are also accepted here. Mini-roundabouts - - - - - - - - If the highway tag has the value mini_roundabout or the junction tag has the value roundabout then a junction tag with value roundaboutis passed through. Way Tag Transformations ----------------------- Highway Defaults - - - - - - - - The first part of the tag transformations is to decide on defaults for each type of highway. This uses the highway tag in the OSM file and maps it into one of the highway tags that are recognised by Routino, defining the default allowed transport types and adding a number of properties. The first part of the highway tag checking is to ignore the highway tag if it has a value that indicates a non-highway. These are the proposed and construction values for future highways, the no, abandoned and disused values for previous highways and a small number of other values. The second part of the highway transformation is to convert the highway tag into one that is recognised by Routino. Original tag Transformed tag ------------ --------------- motorway_link motorway trunk_link trunk primary_link primary secondary_link secondary tertiary_link tertiary minor, road unclassified living_street residential access, services, layby service byway, unsurfaced, unpaved track footway, bridleway, pedestrian, walkway path route=ferry ferry (1) Note 1: A ferry route is converted into a highway of type "ferry" so that routes using a ferry can be calculated. The type of highway also determines the defaults for the types of transport allowed on the highway. The default assumptions are as shown in the table below. Highway foot horse wheelchair bicycle moped motorcycle motorcar goods hgv psv ------- ---- ----- ---------- ------- ----- --------- -------- ----- --- --- motorway no no no no no yes yes yes yes yes trunk no(1) no(1) no(1) yes yes yes yes yes yes yes primary yes yes yes yes yes yes yes yes yes yes secondary yes yes yes yes yes yes yes yes yes yes tertiary yes yes yes yes yes yes yes yes yes yes unclassified yes yes yes yes yes yes yes yes yes yes residential yes yes yes yes yes yes yes yes yes yes service yes yes yes yes yes yes yes yes yes yes track yes yes yes yes no no no no no no cycleway yes no yes yes no no no no no no path yes yes(2) yes yes(2) no no no no no no steps yes no no no no no no no no no ferry (3) no no no no no no no no no no Note 1: A trunk road may legally allow foot, horse or wheelchair access but in the absence of other tags is considered to be too dangerous. Note 2: A path allows bicycle or horse access by default only if actually labelled as a highway of type "bridleway". Note 3: Ferry routes must be explicitly tagged with the allowed transport types, it is not sensible to try to guess. Finally for the highway tag a number of default properties are added depending on the highway type. Highway Properties ------- ---------- motorway paved, oneway, multilane trunk paved, multilane (1) primary paved, multilane (1) secondary paved tertiary paved unclassified paved residential paved service paved track paved (2) cycleway paved path paved (3) steps ferry Note 1: A highway of this type has the multilane property by default if it is oneway. Note 2: A track is paved only if it is tagged as tracktype=grade1. Note 3: A path is paved only if it was originally tagged as highway=walkway or highway=pedestrian. Generic Access Permissions - - - - - - - - - - - - - The access tag is used to specify the default access restrictions on the highway. If the tag value is no or private or a selection of other values then all transport types are denied access (later tag transformation rules may add specific transport types back again). Other Access Permissions - - - - - - - - - - - - A tag named vehicle means any of the bicycle, moped, motorcycle, motorcar, goods, hgv and psv transport types. A tag named motor_vehicle is transformed to mean any vehicle except a bicycle. The designation tag is used as an alternative method of identifying the legal right of way on a path (in the UK at least). The tag transformations convert these tags into a set of allowed transport types as shown below. Designation tag Equivalent access permissions --------------- ----------------------------- restricted_byway foot=yes, wheelchair=yes, horse=yes, bicycle=yes public_byway, byway, byway_open_to_all_traffic foot=yes, wheelchair=yes, horse=yes, bicycle=yes, moped=yes, motorcycle=yes, motorcar=yes permissive_bridleway, public_bridleway, bridleway foot=yes, wheelchair=yes, horse=yes, bicycle=yes public_cycleway foot=yes, wheelchair=yes, bicycle=yes permissive_footpath, public_footpath, footpath foot=yes, wheelchair=yes In addition to these there are some other tags and values that will modify the transport permissions on the highway. A highway that is tagged as motorroad with a value of yes will deny access to foot, horse, wheelchair, bicycle and moped transport. A highway that is tagged with footway or sidewalk and one of a set of popular values will allow foot and wheelchair access even if the road type would not normally do so. A highway that is tagged as cycleway with one of several values will allow bicycle access. If the value of the cycleway tag is opposite_lane, opposite_track or opposite then the cyclebothways tag is set. A highway that is tagged as oneway:bicycle with the value no will also cause the cyclebothways tag to be set. Specific Access Permissions - - - - - - - - - - - - - - The final part of the access permissions is to use the specific transport type tags. One tag is recognised for each of the different modes of transport: foot, horse, bicycle, wheelchair, moped, motorcycle, motorcar, goods, hgv and psv. These indicate whether the specific type of transport is allowed on the highway or not. Highway Properties - - - - - - - - - If there is a surface tag then the highway is assumed to be unpaved unless the tag value matches one of the following: paved, asphalt, concrete or many other values listed in the configuration file. Support for the obsolete paved tag is also provided and the highway is paved if this is set to a true value. The lanes tag is passed through to be used to set the multilane highway property. The bridge and tunnel tags are copied directly from the input to the output. Highway Restrictions - - - - - - - - - - The oneway, maxspeed, maxweight, maxheight, maxwidth and maxlength are copied directly from the input to the output without modification. Roundabouts - - - - - - If a highway is tagged as junction=roundabout then a roundabout=yes tag created on the output. Highway Names and References - - - - - - - - - - - - - - The name and ref tags are copied directly from the input to the output. Highway Areas - - - - - - - The area tag is copied directly from the input to the output. Relation Tag Transformations ---------------------------- The type tag is passed through without change. Routes - - - The route tag can be used to determine whether a relation is part of a walking or bicycle route so that the footroute or bicycleroute properties can be applied to the highways that make up that relation. The tag transformations that are applied for route relations are defined in the table below. Relation Tag footroute Property bicycleroute Property ------------ ------------------ --------------------- foot, walking, hiking yes no bicycle no yes bicycle;foot, foot;bicycle yes yes Turn Restrictions - - - - - - - - - No tag transformations are defined for turn restriction relations but the restriction and except tags are passed through without change. -------- Copyright 2008-2015 Andrew M. Bishop. routino-3.2/doc/LIBRARY.txt 644 233 144 51356 12606774417 10707 0 Routino : Library ================= Library Usage ------------- This page describes the libroutino shared library that can be compiled from the Routino source code and used in other programs. Compilation - - - - - - The libroutino shared library is compiled by default when the Routino source code is compiled. There are two versions; a normal version and a 'slim' version that uses less memory but is slower. The names of the libraries are libroutino.so and libroutino-slim.so Including - - - - - To use the Routino library in another program the source code for that program should include the routino.h file. The functions that are available in the library (both versions) are listed in this file along with all of the constants and data types that are required. Linking - - - - After compiling the program that uses the library it needs to be linked to the library. For gcc this requires adding -lroutino or -lroutino-slim to the linker command line, possibly with a -L... parameter to specify the location of the library. Example Library Interface Code - - - - - - - - - - - - - - - An example of a program that can link to the libroutino library is provided in the Routino source code called router+lib.c. This is an almost exact re-implementation of the standard Routino router program using the libroutino library. Library License --------------- The source code for the libroutino and libroutino-slim libraries is the GNU Affero General Public License v3 the same as for the rest of the Routino software. Linking with AGPLv3 Source Code - - - - - - - - - - - - - - - - If libroutino is linked with other APGLv3 code then the same license applies to the combination as to the two parts. Linking with GPLv3 Source Code - - - - - - - - - - - - - - - The AGPLv3 license is almost identical to the GNU General Public License v3 except that network interaction with an AGPLv3 program requires the same source code access as distributing compiled GPLv3 programs. This means that libroutino can be linked or combined with code that is released under the GPLv3 without changing the license of that code. If there is no network interaction with the resulting program then the Routino source code can be treated as if it was GPLv3 code for the purposes of distribution and use. If there is network interaction with the resulting program then the AGPLv3 license will apply since this is required by section 13 of the GPLv3. The Software Freedom Law Center description of the GPLv3 and AGPLv3 licenses describes combining GPLv3 and APGLv3. My understanding is that only when modified Routino code is linked with GPLv3 code does network interaction require the modified Routino code to be released. Linking with Other Source Code - - - - - - - - - - - - - - - Linking libroutino with code released under any other license must preserve the terms of the Routino license on the combination if the software is distributed or interacted with over a network. Routino Library API ------------------- Preprocessor Definitions - - - - - - - - - - - - A version number for the Routino API. #define ROUTINO_API_VERSION 8 Error Definitions No error. #define ROUTINO_ERROR_NONE 0 A function was called without the database variable set. #define ROUTINO_ERROR_NO_DATABASE 1 A function was called without the profile variable set. #define ROUTINO_ERROR_NO_PROFILE 2 A function was called without the translation variable set. #define ROUTINO_ERROR_NO_TRANSLATION 3 The specified database to load did not exist. #define ROUTINO_ERROR_NO_DATABASE_FILES 11 The specified database could not be loaded. #define ROUTINO_ERROR_BAD_DATABASE_FILES 12 The specified profiles XML file did not exist. #define ROUTINO_ERROR_NO_PROFILES_XML 13 The specified profiles XML file could not be loaded. #define ROUTINO_ERROR_BAD_PROFILES_XML 14 The specified translations XML file did not exist. #define ROUTINO_ERROR_NO_TRANSLATIONS_XML 15 The specified translations XML file could not be loaded. #define ROUTINO_ERROR_BAD_TRANSLATIONS_XML 16 The requested profile name does not exist in the loaded XML file. #define ROUTINO_ERROR_NO_SUCH_PROFILE 21 The requested translation language does not exist in the loaded XML file. #define ROUTINO_ERROR_NO_SUCH_TRANSLATION 22 There is no highway near the coordinates to place a waypoint. #define ROUTINO_ERROR_NO_NEARBY_HIGHWAY 31 The profile and database do not work together. #define ROUTINO_ERROR_PROFILE_DATABASE_ERR 41 The profile being used has not been validated. #define ROUTINO_ERROR_NOTVALID_PROFILE 42 The user specified profile contained invalid data. #define ROUTINO_ERROR_BAD_USER_PROFILE 43 The routing options specified are not consistent with each other. #define ROUTINO_ERROR_BAD_OPTIONS 51 There is a mismatch between the library and caller API version. #define ROUTINO_ERROR_WRONG_API_VERSION 61 The progress function returned false. #define ROUTINO_ERROR_PROGRESS_ABORTED 71 A route could not be found to waypoint 1. #define ROUTINO_ERROR_NO_ROUTE_1 1001 A route could not be found to waypoint 2. #define ROUTINO_ERROR_NO_ROUTE_2 1002 A route could not be found to waypoint 3. #define ROUTINO_ERROR_NO_ROUTE_3 1003 Routino Option Definitions Calculate the shortest route. #define ROUTINO_ROUTE_SHORTEST 0 Calculate the quickest route. #define ROUTINO_ROUTE_QUICKEST 1 Output an HTML route file. #define ROUTINO_ROUTE_FILE_HTML 2 Output a GPX track file. #define ROUTINO_ROUTE_FILE_GPX_TRACK 4 Output a GPX route file. #define ROUTINO_ROUTE_FILE_GPX_ROUTE 8 Output a text file with important junctions. #define ROUTINO_ROUTE_FILE_TEXT 16 Output a text file with all nodes and segments. #define ROUTINO_ROUTE_FILE_TEXT_ALL 32 Output a single file type to stdout. #define ROUTINO_ROUTE_FILE_STDOUT 64 Output a linked list of points containing the HTML file information but as plain text. #define ROUTINO_ROUTE_LIST_HTML 128 Output a linked list of points containing the HTML file information as plain text and with all points. #define ROUTINO_ROUTE_LIST_HTML_ALL 256 Output a linked list of points containing the text file information. #define ROUTINO_ROUTE_LIST_TEXT 512 Output a linked list of points containing the text all file information. #define ROUTINO_ROUTE_LIST_TEXT_ALL 1024 Route between the points in a loop returning to the first point. #define ROUTINO_ROUTE_LOOP 2048 Route between the points in reverse order. #define ROUTINO_ROUTE_REVERSE 4096 Linked List Output Point Definitions An unimportant, intermediate, node. #define ROUTINO_POINT_UNIMPORTANT 0 A roundabout exit that is not taken. #define ROUTINO_POINT_RB_NOT_EXIT 1 An un-interesting junction where the route continues without comment. #define ROUTINO_POINT_JUNCT_CONT 2 The highway changes type but nothing else happens. #define ROUTINO_POINT_CHANGE 3 An interesting junction to be described. #define ROUTINO_POINT_JUNCT_IMPORT 4 The entrance to a roundabout. #define ROUTINO_POINT_RB_ENTRY 5 The exit from a roundabout. #define ROUTINO_POINT_RB_EXIT 6 The location of a mini-roundabout. #define ROUTINO_POINT_MINI_RB 7 The location of a U-turn. #define ROUTINO_POINT_UTURN 8 A waypoint. #define ROUTINO_POINT_WAYPOINT 9 Profile Definitions A Motorway highway. #define ROUTINO_HIGHWAY_MOTORWAY 1 A Trunk highway. #define ROUTINO_HIGHWAY_TRUNK 2 A Primary highway. #define ROUTINO_HIGHWAY_PRIMARY 3 A Secondary highway. #define ROUTINO_HIGHWAY_SECONDARY 4 A Tertiary highway. #define ROUTINO_HIGHWAY_TERTIARY 5 A Unclassified highway. #define ROUTINO_HIGHWAY_UNCLASSIFIED 6 A Residential highway. #define ROUTINO_HIGHWAY_RESIDENTIAL 7 A Service highway. #define ROUTINO_HIGHWAY_SERVICE 8 A Track highway. #define ROUTINO_HIGHWAY_TRACK 9 A Cycleway highway. #define ROUTINO_HIGHWAY_CYCLEWAY 10 A Path highway. #define ROUTINO_HIGHWAY_PATH 11 A Steps highway. #define ROUTINO_HIGHWAY_STEPS 12 A Ferry highway. #define ROUTINO_HIGHWAY_FERRY 13 A Paved highway. #define ROUTINO_PROPERTY_PAVED 1 A Multilane highway. #define ROUTINO_PROPERTY_MULTILANE 2 A Bridge highway. #define ROUTINO_PROPERTY_BRIDGE 3 A Tunnel highway. #define ROUTINO_PROPERTY_TUNNEL 4 A Footroute highway. #define ROUTINO_PROPERTY_FOOTROUTE 5 A Bicycleroute highway. #define ROUTINO_PROPERTY_BICYCLEROUTE 6 Type Definitions - - - - - - - - Typedef Routino_Database A data structure to hold a Routino database loaded from a file (the contents are private). typedef struct _Routino_Database Routino_Database Typedef Routino_Waypoint A data structure to hold a Routino waypoint found within the database (the contents are private). typedef struct _Routino_Waypoint Routino_Waypoint Typedef Routino_Profile A data structure to hold a Routino routing profile (the contents are private). typedef struct _Routino_Profile Routino_Profile Typedef Routino_Translation A data structure to hold a Routino translation (the contents are private). typedef struct _Routino_Translation Routino_Translation Typedef Routino_UserProfile A data structure to hold a routing profile that can be defined by the user. typedef struct _Routino_UserProfile Routino_UserProfile struct _Routino_UserProfile { int transport; The type of transport. float highway[14]; A floating point preference for travel on the highway (range 0 to 1). float speed[14]; The maximum speed on each type of highway (km/hour). float props[7]; A floating point preference for ways with this attribute (range 0 to 1). int oneway; A flag to indicate if one-way restrictions apply. int turns; A flag to indicate if turn restrictions apply. float weight; The weight of the vehicle (in tonnes). float height; The height of the vehicle (in metres). float width; The width of vehicle (in metres). float length; The length of vehicle (in metres). } Typedef Routino_Output Forward declaration of the Routino_Output data type. typedef struct _Routino_Output Routino_Output Type struct _Routino_Output A linked list output of the calculated route whose contents depend on the ROUTINO_ROUTE_LIST_* options selected. struct _Routino_Output { Routino_Output* next; A pointer to the next route section. float lon; The longitude of the point (radians). float lat; The latitude of the point (radians). float dist; The total distance travelled (kilometres) up to the point. float time; The total journey time (seconds) up to the point. float speed; The speed (km/hr) for this section of the route (ROUTINO_ROUTE_LIST_TEXT_ALL format only). int type; The type of point (one of the ROUTINO_POINT_* values). int turn; The amount to turn (degrees) for the next section of the route (ROUTINO_ROUTE_LIST_TEXT or ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML_ALL format). int bearing; The compass direction (degrees) for the next section of the route. char* name; The name of the next section of the route (ROUTINO_ROUTE_LIST_TEXT or ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML_ALL format) or previous section of the route (ROUTINO_ROUTE_LIST_TEXT_ALL format). char* desc1; The first part of the description of the next section of route (ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML format). char* desc2; The second part of the description of the next section of route (ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML format). char* desc3; The third part of the description, the total distance and time at the end of the next section of route (ROUTINO_ROUTE_LIST_HTML or ROUTINO_ROUTE_LIST_HTML format). } Typedef Routino_ProgressFunc A type of function that can be used as a callback to indicate routing progress, if it returns false the router stops. typedef int (*Routino_ProgressFunc)(double complete) Variable Definitions - - - - - - - - - - Global Variable Routino_APIVersion Contains the libroutino API version number. const int Routino_APIVersion Global Variable Routino_Version Contains the Routino version number. const char* Routino_Version Global Variable Routino_errno Contains the error number of the most recent Routino function (one of the ROUTINO_ERROR_* values). int Routino_errno Function Definitions - - - - - - - - - - Global Function Routino_CalculateRoute() Calculate a route using a loaded database, chosen profile, chosen translation and set of waypoints. Routino_Output* Routino_CalculateRoute ( Routino_Database* database, Routino_Profile* profile, Routino_Translation* translation, Routino_Waypoint** waypoints, int nwaypoints, int options, Routino_ProgressFunc progress ) Routino_Output* Routino_CalculateRoute Returns the head of a linked list of route data (if requested) or NULL. Routino_Database* database The loaded database to use. Routino_Profile* profile The chosen routing profile to use. Routino_Translation* translation The chosen translation information to use. Routino_Waypoint** waypoints The set of waypoints. int nwaypoints The number of waypoints. int options The set of routing options (ROUTINO_ROUTE_*) ORed together. Routino_ProgressFunc progress A function to be called occasionally to report progress or NULL. Global Function Routino_Check_API_Version() Check the version of the library used by the caller against the library version int Routino_Check_API_Version ( int caller_version ) int Routino_Check_API_Version Returns ROUTINO_ERROR_NONE if OK or ROUTINO_ERROR_WRONG_VERSION if there is an error. int caller_version The version of the API used in the caller. This function should not be called directly, use the macro Routino_CheckAPIVersion() which takes no arguments. A wrapper function to simplify the API version check. #define Routino_CheckAPIVersion() Global Function Routino_CreateProfileFromUserProfile() Create a fully formed Routino Profile from a Routino User Profile. Routino_Profile* Routino_CreateProfileFromUserProfile ( Routino_UserProfile* profile ) Routino_Profile* Routino_CreateProfileFromUserProfile Returns an allocated Routino Profile. Routino_UserProfile* profile The user specified profile to convert (not modified by this). Global Function Routino_CreateUserProfileFromProfile() Create a Routino User Profile from a Routino Profile loaded from an XML file. Routino_UserProfile* Routino_CreateUserProfileFromProfile ( Routino_Profile* profile ) Routino_UserProfile* Routino_CreateUserProfileFromProfile Returns an allocated Routino User Profile. Routino_Profile* profile The Routino Profile to convert (not modified by this). Global Function Routino_DeleteRoute() Delete the linked list created by Routino_CalculateRoute. void Routino_DeleteRoute ( Routino_Output* output ) Routino_Output* output The output to be deleted. Global Function Routino_FindWaypoint() Finds the nearest point in the database to the specified latitude and longitude. Routino_Waypoint* Routino_FindWaypoint ( Routino_Database* database, Routino_Profile* profile, double latitude, double longitude ) Routino_Waypoint* Routino_FindWaypoint Returns a pointer to a newly allocated Routino waypoint or NULL if none could be found. Routino_Database* database The Routino database to use. Routino_Profile* profile The Routino profile to use. double latitude The latitude in degrees of the point. double longitude The longitude in degrees of the point. Global Function Routino_FreeXMLProfiles() Free the internal memory that was allocated for the Routino profiles loaded from the XML file. void Routino_FreeXMLProfiles ( void ) Global Function Routino_FreeXMLTranslations() Free the internal memory that was allocated for the Routino translations loaded from the XML file. void Routino_FreeXMLTranslations ( void ) Global Function Routino_GetProfile() Select a specific routing profile from the set of Routino profiles that have been loaded from the XML file or NULL in case of an error. Routino_Profile* Routino_GetProfile ( const char* name ) Routino_Profile* Routino_GetProfile Returns a pointer to an internal data structure - do not free. const char* name The name of the profile to select. Global Function Routino_GetProfileNames() Return a list of the profile names that have been loaded from the XML file. char** Routino_GetProfileNames ( void ) char** Routino_GetProfileNames Returns a NULL terminated list of strings - all allocated. Global Function Routino_GetTranslation() Select a specific translation from the set of Routino translations that have been loaded from the XML file or NULL in case of an error. Routino_Translation* Routino_GetTranslation ( const char* language ) Routino_Translation* Routino_GetTranslation Returns a pointer to an internal data structure - do not free. const char* language The language to select (as a country code, e.g. 'en', 'de') or an empty string for the first in the file or NULL for the built-in English version. Global Function Routino_GetTranslationLanguageFullNames() Return a list of the full names of the translation languages that have been loaded from the XML file. char** Routino_GetTranslationLanguageFullNames ( void ) char** Routino_GetTranslationLanguageFullNames Returns a NULL terminated list of strings - all allocated. Global Function Routino_GetTranslationLanguages() Return a list of the translation languages that have been loaded from the XML file. char** Routino_GetTranslationLanguages ( void ) char** Routino_GetTranslationLanguages Returns a NULL terminated list of strings - all allocated. Global Function Routino_LoadDatabase() Load a database of files for Routino to use for routing. Routino_Database* Routino_LoadDatabase ( const char* dirname, const char* prefix ) Routino_Database* Routino_LoadDatabase Returns a pointer to the database. const char* dirname The pathname of the directory containing the database files. const char* prefix The prefix of the database files. Global Function Routino_ParseXMLProfiles() Parse a Routino XML file containing profiles, must be called before selecting a profile. int Routino_ParseXMLProfiles ( const char* filename ) int Routino_ParseXMLProfiles Returns non-zero in case of an error or zero if there was no error. const char* filename The full pathname of the file to read. Global Function Routino_ParseXMLTranslations() Parse a Routino XML file containing translations, must be called before selecting a translation. int Routino_ParseXMLTranslations ( const char* filename ) int Routino_ParseXMLTranslations Returns non-zero in case of an error or zero if there was no error. const char* filename The full pathname of the file to read. Global Function Routino_UnloadDatabase() Close the database files that were opened by a call to Routino_LoadDatabase(). void Routino_UnloadDatabase ( Routino_Database* database ) Routino_Database* database The database to close. Global Function Routino_ValidateProfile() Validates that a selected routing profile is valid for use with the selected routing database. int Routino_ValidateProfile ( Routino_Database* database, Routino_Profile* profile ) int Routino_ValidateProfile Returns zero if OK or something else in case of an error. Routino_Database* database The Routino database to use. Routino_Profile* profile The Routino profile to validate. -------- Copyright 2015 Andrew M. Bishop. routino-3.2/doc/DATA.txt 644 233 144 11262 12572106465 10276 0 Routino : Data ============== A router relies on data to be able to find a route. OpenStreetMap Data ------------------ The data that is collected by the OpenStreetMap project consists of nodes, ways and relations. Node A node is a point that has a latitude and longitude and attributes that describe what type of point it is (part of a way or a place of interest for example). Way A way is a collection of nodes that when joined together define something (for example a road, a railway, a boundary, a building, a lake etc). The ways also have attributes that define them (speed limits, type of road and restrictions for example). Relation A relation is a collection of items (usually ways) that are related to each other for some reason (highways that make up a route for example). The OpenStreetMap Wiki explains the data much better than I can. Router Data ----------- The information that is needed by a routing algorithm is only a subset of the information that is collected by the OpenStreetMap project. For routing what is required is information about the location of roads (or other highways), the connections between the highways and the properties of those highways. Location of highways (nodes) The locations of things is provided by the nodes from the OpenStreetMap data. The nodes are the only things that have coordinates in OpenStreetMap and everything else is made up by reference to them. Not all of the nodes are useful, only the ones that are part of highways. The location of the nodes is stored but none of the other attributes are currently used by the router. Location of highways (ways) The location of the highways is defined in the OpenStreetMap data by the ways. Only the highway ways are useful and the other ways are discarded. What remains is lists of nodes that join together to form a section of highway. This is further split into segments which are individual parts of a way connected by two nodes. Properties of highways (tags) The ways that belong to highways are extracted from the data in the previous step and for each way the useful information for routing is stored. For the router the useful information is the type of highway, the speed limit, the allowed types of transport and other restrictions (one-way, minimum height, maximum weight etc). Connections between highways The connections between highways are defined in the OpenStreetMap data by ways that share nodes. Since the ways may join in the middle and not just the ends it is the segments defined above that are not part of the OpenStreetMap data that are most important. The information that is extracted from the OpenStreetMap data is stored in an optimised way that allows the routing to be performed quickly. Interpreting Data Tags ---------------------- The tags are the information that is attached to the nodes and ways in OpenStreetMap. The router needs to interpret these tags and use them when deciding what type of traffic can use a highway (for example). There are no well defined rules in OpenStreetMap about tagging, but there is guidance on the OpenStreetMap Wiki "Map_Features" page. This describes a set of recommended tags but these are not universally used so it is up to each application how to interpret them. The tagging rules that the router uses are very important in controlling how the router works. With Routino the data tags can be modified when the data is imported to allow customisation of the information used for routing. Problems With OpenStreetMap Data -------------------------------- The route that can be found is only as good as the data that is available. This is not intended as a criticism of the OpenStreetMap data; it is generally good. There are some problems that are well known and which affect the router. For example highways might be missing because nobody has mapped them. A highway may be wrongly tagged with incorrect properties, or a highway might be missing important tags for routing (e.g. speed limits). There can also be problems with highways that should join but don't because they do not share nodes. A lot of these problems can be found using the interactive data visualiser that uses the same Routino routing database. -------- Copyright 2008-2010 Andrew M. Bishop. routino-3.2/web/ 40755 233 144 0 12605264262 6773 5routino-3.2/web/translations/ 40755 233 144 0 13061246165 11513 5routino-3.2/web/translations/translation.fr.txt 644 233 144 27134 12736520261 15263 0# # French language translation phrases # # # Router output XML definition # %%copyright_creator_string%% Créateur %%copyright_source_string%% Source %%copyright_source_text%% Basé sur les données OpenStreetMap de http://www.openstreetmap.org/ %%copyright_license_string%% Licence %%turn_-4%% demi-tour à gauche %%turn_-3%% Très à gauche %%turn_-2%% à gauche %%turn_-1%% Légèrement à gauche %%turn_0%% Tout droit %%turn_1%% légèrement à droite %%turn_2%% à droite %%turn_3%% très à droite %%turn_4%% demi-tour à droite %%heading_-4%% Sud %%heading_-3%% Sud-Ouest %%heading_-2%% Ouest %%heading_-1%% Nord-Ouest %%heading_0%% Nord %%heading_1%% Nord-Est %%heading_2%% Est %%heading_3%% Sud-Est %%heading_4%% Sud %%ordinal_1%% Premier %%ordinal_2%% Second %%ordinal_3%% Troisième %%ordinal_4%% Quatrième %%ordinal_5%% Cinquième %%ordinal_6%% Sixième %%ordinal_7%% Septième %%ordinal_8%% Huitième %%ordinal_9%% Neuvième %%ordinal_10%% Dixième %%highway_motorway%% autoroute %%highway_trunk%% route de jonction %%highway_primary%% route nationale %%highway_secondary%% route départementale %%highway_tertiary%% route locale %%highway_unclassified%% route non classifiée %%highway_residential%% rue résidentielle %%highway_service%% rue de service %%highway_track%% piste %%highway_cycleway%% piste cyclable %%highway_path%% sentier %%highway_steps%% escalier %%highway_ferry%% ferry %%route_shortest%% le plus court %%route_quickest%% le plus rapide %%output-html_waypoint_waypoint%% Étape %%output-html_waypoint_junction%% Intersection %%output-html_waypoint_roundabout%% rond-point %%output-html_title%% Itinéraire %s %%output-html_start%% Débute à %s, direction %s %%output-html_node%% à %s, aller %s direction %s %%output-html_rbnode%% Quitter %s, prendre la sortie %s direction %s %%output-html_segment%% Suivre %s pendant %.3f km, %.1f min %%output-html_stop%% S'arrêter à %s %%output-html_total%% Total %.1f km, %.0f minutes %%output-html_subtotal%% %.1f km, %.0f minutes %%output-gpx_waypoint_waypt%% ETAPE %%output-gpx_waypoint_trip%% POINT %%output-gpx_desc%% Itinéraire %s entre les étapes 'début' et 'fin' %%output-gpx_name%% Itinéraire %s %%output-gpx_step%% %s sur '%s' pendant %.3f km, %.1f min %%output-gpx_final%% Trajet total %.1f km, %.0f minutes # # Router (and some shared) translations # @@LANGUAGE@@ Français @@LANGUAGE-WEBPAGE@@ Page web en français @@ROUTER-TITLE@@ Calculateur d'itinéraire pour OpenStreetMap @@OPTION-TAB@@ Options @@OPTION-TAB-HELP@@ définir les options @@RESULTS-TAB@@ Résultats @@RESULTS-TAB-HELP@@ Voir les résultats @@DATA-TAB@@ Données @@DATA-TAB-HELP@@ Voir les informations de la base de données @@ROUTINO-ROUTER@@ Calculateur d'itinéraires Routino pour Openstreetmap @@ROUTINO-WEBSITE@@ site web Routino @@DOCUMENTATION@@ Documentation @@LANGUAGE-BOX@@ Langue @@WAYPOINTS-BOX@@ Étapes de l'itinéraire @@TRANSPORT-TYPE-BOX@@ Mode de déplacement @@HIGHWAY-PREFERENCES-BOX@@ Préférences routières @@SPEED-LIMITS-BOX@@ Limitations de vitesse @@PROPERTY-PREFERENCES-BOX@@ Préférences des propriétés @@OTHER-RESTRICTIONS-BOX@@ Autres Restrictions @@FIND-BOX@@ Rechercher @@LINKS-BOX@@ Liens @@HELP-BOX@@ Aide @@STATUS-BOX@@ État @@SHORTEST-ROUTE@@ Itinéraire le plus court @@QUICKEST-ROUTE@@ Itinéraire le plus rapide @@STATISTICS-BOX@@ Statistiques de Routino @@VISUALISER-BOX@@ Afficheur de Routino @@WAYPOINT-POSITION@@ Étape XXX de l'itinéraire @@WAYPOINT-LONGITUDE@@ Étape XXX Longitude @@WAYPOINT-LATITUDE@@ Étape XXX Latitude @@WAYPOINT-LOCATION@@ position de l'étape XXX @@WAYPOINT-SEARCH@@ Rechercher la position @@WAYPOINT-GET@@ obtenir la position actuelle @@WAYPOINT-CENTRE1@@ Centrer la carte sur cette étape @@WAYPOINT-UP@@ Placer cette étape avant @@WAYPOINT-ADD@@ Ajouter une étape après celle-ci @@WAYPOINT-COORDS@@ Coordonnées de position @@WAYPOINT-HOME@@ Changer en position de départ @@WAYPOINT-CENTRE2@@ Centrer cette étape sur la carte @@WAYPOINT-DOWN@@ Placer cette étape après @@WAYPOINT-REMOVE@@ supprimer cette étape @@WAYPOINT-REVERSE@@ Inverser l'ordre des étapes @@WAYPOINT-REVERSE-BUTTON@@ Inverser l'ordre @@WAYPOINT-LOOP@@ Ajouter une nouvelle étape pour faire une boucle @@WAYPOINT-LOOP-BUTTON@@ Faire une boucle @@TRANSPORT-FOOT@@ À pied @@TRANSPORT-HORSE@@ À cheval @@TRANSPORT-WHEELCHAIR@@ Fauteuil roulant @@TRANSPORT-BICYCLE@@ Bicyclette @@TRANSPORT-MOPED@@ Cyclomoteur @@TRANSPORT-MOTORCYCLE@@ Moto @@TRANSPORT-MOTORCAR@@ Voiture @@TRANSPORT-GOODS@@ Camionette @@TRANSPORT-HGV@@ Camion(15t) @@TRANSPORT-PSV@@ Camion(10t) @@HIGHWAY-MOTORWAY@@ Autoroute @@HIGHWAY-TRUNK@@ Voie rapide @@HIGHWAY-PRIMARY@@ Primaire @@HIGHWAY-SECONDARY@@ Secondaire @@HIGHWAY-TERTIARY@@ Tertiaire @@HIGHWAY-UNCLASSIFIED@@ Non classée @@HIGHWAY-RESIDENTIAL@@ Résidentiel @@HIGHWAY-SERVICE@@ Service @@HIGHWAY-TRACK@@ Piste @@HIGHWAY-CYCLEWAY@@ Piste cyclable @@HIGHWAY-PATH@@ Sentier @@HIGHWAY-STEPS@@ Escaliers @@HIGHWAY-FERRY@@ Ferry @@PROPERTY-PAVED@@ Pavée @@PROPERTY-MULTILANE@@ Voies multiples @@PROPERTY-BRIDGE@@ Pont @@PROPERTY-TUNNEL@@ Tunnel @@PROPERTY-WALKINGROUTE@@ Itinér. piéton @@PROPERTY-BICYCLEROUTE@@ Itinér. cycle @@RESTRICT-ONEWAY@@ Respecter les sens uniques @@RESTRICT-TURNS@@ Respecter les interdictions de tourner @@RESTRICT-WEIGHT@@ Poids @@RESTRICT-HEIGHT@@ Hauteur @@RESTRICT-WIDTH@@ Largeur @@RESTRICT-LENGTH@@ Longueur @@FIND-SHORTEST-ROUTE@@ Chercher l'itinéraire le plus court @@FIND-QUICKEST-ROUTE@@ Chercher l'itinéraire le plus rapide @@MAP-VIEW-LINK@@ Lien vers cet outil de visualisation @@EDIT-OSM-DATA@@ Editer cette donnée OSM @@ROUTER-NOT-RUN@@ Routage non lancé @@ROUTER-RUNNING@@ Routage en cours... @@ROUTER-COMPLETED@@ Routage terminé @@ROUTER-ERROR@@ Erreur de Routage @@ROUTER-FAILED@@ Le routage n'a pas été lancé correctement @@VIEW-DETAILS@@ Voir les détails @@NO-INFORMATION@@ Pas d'information @@HTML-ROUTE@@ Itinéraire HTML @@GPX-TRACK-ROUTE@@ Fichier trace GPX @@GPX-ROUTE@@ Fichier itinéraire GPX @@FULL-TEXT-ROUTE@@ Fichier texte complet @@TEXT-ROUTE@@ Fichier texte @@OPEN-POPUP@@ Ouvrir Popup @@DISPLAY-STATISTICS@@ Afficher les données statistiques @@JAVASCRIPT-REQUIRED@@ Javascript est nécessaire pour afficher la carte interactive. @@ROUTER@@ Routeur @@GEO-DATA@@ Geo Data @@TILES@@ Dalles # # Visualiser specific translations # @@VISUALISER-TITLE@@ Afficheur d'itinéraire @@INSTRUCTIONS-BOX@@ Instructions @@ROUTER-BOX@@ Planificateur de Routino @@NO-DATA-DISPLAYED@@ Aucune donnée affichée @@VISUALISER-FAILED@@ Échec de récupération des données d'affichage! @@VISUALISER-NUM-JUNCTIONS@@ # intersections traitées @@VISUALISER-NUM-SUPER@@ # segments/super-nœuds traités @@VISUALISER-NUM-WAYTYPE@@ # segments de type "way" traités @@VISUALISER-NUM-SEGMENTS@@ # segments traités @@VISUALISER-NUM-NODES@@ # nœuds traités @@VISUALISER-NUM-ERRORS@@ # erreurs de log traitées @@JUNCTIONS-BUTTON@@ Afficher les intersections @@HEIGHT-LIMIT-4@@ Hauteur limitée à 4,0 m @@WIDTH-BUTTON@@ Afficher les limites de largeur @@WIDTH-LIMIT-3@@ Largeur limitée à 3,0 m @@LENGTH-BUTTON@@ Afficher les limites de longueur @@LENGTH-LIMIT-9@@ Longueur limitée à 9,0 m @@ERROR-LOG-BUTTON@@ Afficher le journal des erreurs # # Multi-line descriptive translations (router) # $$ROUTER-INFO$$ Cette page web permet de calculer des itinéraires à l'aide des données collectées par OpenStreetMap. Sélectionner les points de départ et d'arrivée (cliquer sur les icones ci-dessous), sélectionner les préférences, puis rechercher un itinéraire. $$ROUTER-INFO$$ $$ROUTER-OPTIONS-HELP$$ Aide simplifiée
Cliquer sur les icones de balises (ci-dessus) pour les placer sur la carte (droite). Puis les déplacer à la position choisie. Il sera sûrement plus facile de zoomer sur la carte avant de placer les balises. Autre solution, taper la latitude et la longitude dans les cases ci-dessus.

Selectionner le mode de déplacement, les types de voies autorisées, les limitations de vitesse, les propriétés des voies et les autres restrictions dans les options ci-dessus. Selectionner "Le plus court" ou "Le plus rapide" pour calculer l'itinéraire et le visualiser sur la carte.

Etapes
Cliquer sur les balises affichera ou supprimera leur apparition sur la carte. Quand un itinéraire est calculé, il affichera (le plus près possible pour le mode de déplacement sélectionné) chacune des étapes qui ont une balise sur la carte dans l'ordre défini.

Mode de déplacement
Selectionner un mode de déplacement restreindra l'itinéraire choisi aux voies sur lesquelles il est autorisé et définira les valeurs par défaut pour les autres paramètres.

Préferences des voies
La préférence de voies est définie par un pourcentage et des itinéraires sont choisis qui essaient de suivre les voies préferrées. Par exemple, si une voie "Primaire" a une préférence de "110%" et une voie "Secondaire" une préférence de "100%", alors cela signifie qu'un itinéraire sur une voie primaire peut être jusqu'à 10% plus long que sur une voie secondaire et être sélectionné.

Limites de vitesse
Les limites de vitesse choisies ici pour les differents types de voies s'appliquent si la voie n'a pas d'autre limite de vitesse définie ou si celle-ci est supérieure à celle choisie.

Préférences de propriétés
La préférence de propriété est définie par un pourcentage et des itinéraires sont choisis qui essaient de suivre les voies ayant cette propriété préférée. Par exemple, si une voie goudronnée a une préférence de "75%", alors cela signifie que une voie non goudronnée obtient automatiquement une préférence de "25%" ce qui fait que un itinéraire sur une voie goudronnée peut avoir 3 fois la longueur d'une non goudronnée et être sélectionnée.

Autres restrictions
Celles-ci permettent de touver un itinéraire qui respecte les limites définies pour le poids, la hauteur, la largeur ou la longueur. Il est également possible d'ignorer les restrictions de sens unique (e. pour la marche). $$ROUTER-OPTIONS-HELP$$ $$ROUTER-RESULTS-HELP$$ Aide rapide
Après le calcul de l'itinéraire, vous pouvez télécharger le fichier GPX ou la description au format texte (résumé ou version détaillée). Vous pouvez également visualiser la description de l'itinéraire et zoomer sur des tronçons sélectionnés.

Résoudre un problème
Si le calculateur aboutie à une erreur, la cause la plus probable est que il n'est pas possible de trouver un itinéraire entre les points sélectionnés. Por permettre de trouver un itinéraire, déplacer une ou des balises ou changer les options de recherche.

Formats d'affichage

Instructions HTML
une description de l'itinéraire à prendre à chaque intersection importante.
Fichier chemin GPX
La même information qui est affichée sur la carte avec des points pour chaque noeud et des lignes pour tous les sègments.
Fichier route GPX
La même information qui est affichée en texte pour l'itinéraire avec une étape pour chaque intersection importante.
Fichier texte complet
Une liste de tous les noeuds traversés ainsi que la distance entre eux et la distance cumulée pour chaque étape de l'itinéraire.
Fichier texte
La même information qui est affichée en texte pour l'itinéraire.
$$ROUTER-RESULTS-HELP$$ $$ROUTER-VISUALISER-INFO$$ Pour comprendre comment Routino voit les données, il y a un outil de visualisation qui permet d'afficher les données soujacentes de multiples manières. $$ROUTER-VISUALISER-INFO$$ # # Multi-line descriptive translations (visualiser) # routino-3.2/web/translations/translation.nl.txt 644 233 144 21247 12601526116 15260 0# # Dutch language translation phrases # # # Router output XML definition # %%copyright_creator_string%% Creator %%copyright_source_string%% Source %%copyright_source_text%% Gebouwd op OpenStreetMap data van http://www.openstreetmap.org/ %%copyright_license_string%% License %%turn_-4%% Haarspeld naar links %%turn_-3%% Scherp links %%turn_-2%% Links %%turn_-1%% Half links %%turn_0%% Rechtdoor %%turn_1%% Half rechts %%turn_2%% Rechts %%turn_3%% Scherp rechts %%turn_4%% Haarspeld naar rechts %%heading_-4%% Zuid %%heading_-3%% Zuid-West %%heading_-2%% West %%heading_-1%% Noord-West %%heading_0%% Noord %%heading_1%% Noord-Oost %%heading_2%% Oost %%heading_3%% Zuid-Oost %%heading_4%% Zuid %%ordinal_1%% Eerste %%ordinal_2%% Tweede %%ordinal_3%% Derde %%ordinal_4%% Vierde %%ordinal_5%% Vijfde %%ordinal_6%% Zesde %%ordinal_7%% Zevende %%ordinal_8%% Achtste %%ordinal_9%% Negende %%ordinal_10%% Tiende %%highway_motorway%% Autostrade %%highway_trunk%% Autoweg %%highway_primary%% Provinciale weg %%highway_secondary%% Nationale weg %%highway_tertiary%% Doorgangsweg %%highway_unclassified%% Niet geclassificeerd %%highway_residential%% Woongebied %%highway_service%% Toegangsweg %%highway_track%% Veldweg %%highway_cycleway%% Fietspad %%highway_path%% Pad %%highway_steps%% Trap %%highway_ferry%% Veerboot %%route_shortest%% Kortste %%route_quickest%% Snelste %%output-html_waypoint_waypoint%% Punt %%output-html_waypoint_junction%% de splitsing %%output-html_waypoint_roundabout%% rotonde %%output-html_title%% %s Route %%output-html_start%% Start bij %s neemt u de richting %s %%output-html_node%% Bij %s gaat u %s richting %s %%output-html_rbnode%% Leave aan de %s, neem de %s afslag richting %s %%output-html_segment%% Volg u de %s voor %.3f km %.1f min %%output-html_stop%% Stop U bent bij %s aangekomen %%output-html_total%% Totaal %.1f km, %.0f minuten %%output-html_subtotal%% %.1f km, %.0f minuten %%output-gpx_desc%% %s Route tussen 'Start' und 'Finish' %%output-gpx_name%% %s Route %%output-gpx_step%% %s op '%s' voor %.3f km, %.1f min %%output-gpx_final%% Totaal trip %.1f km, %.0f minuten # # Router (and some shared) translations # @@LANGUAGE@@ Nederlands @@LANGUAGE-WEBPAGE@@ Nederlandse web pagina @@OPTION-TAB@@ Opties @@RESULTS-TAB@@ Resultaten @@DATA-TAB@@ Data @@LANGUAGE-BOX@@ Taal @@WAYPOINTS-BOX@@ Coordinaten @@TRANSPORT-TYPE-BOX@@ Transport Type @@HIGHWAY-PREFERENCES-BOX@@ Voorkeur Wegtype @@SPEED-LIMITS-BOX@@ Snelheidslimieten @@PROPERTY-PREFERENCES-BOX@@ Weg Eigenschappen @@OTHER-RESTRICTIONS-BOX@@ Andere Beperkingen @@FIND-BOX@@ Zoek Route @@LINKS-BOX@@ Links @@HELP-BOX@@ Help @@STATUS-BOX@@ Status @@SHORTEST-ROUTE@@ Kortste Route @@QUICKEST-ROUTE@@ Snelste Route @@WAYPOINT-POSITION@@ Waypoint XXX Position @@WAYPOINT-UP@@ Beweeg dit punt naar boven @@WAYPOINT-ADD@@ Voeg hierna punt toe @@WAYPOINT-HOME@@ Toggle als thuis locatie @@WAYPOINT-CENTRE2@@ Centreer dit punt op map @@WAYPOINT-DOWN@@ Beweeg dit punt naar beneden @@WAYPOINT-REMOVE@@ Verwijder dit punt @@WAYPOINT-REVERSE@@ Keer volgorde punten om @@WAYPOINT-REVERSE-BUTTON@@ Keer volgorde punten om @@TRANSPORT-FOOT@@ Te voet @@TRANSPORT-HORSE@@ Paard @@TRANSPORT-WHEELCHAIR@@ Rolstoel @@TRANSPORT-BICYCLE@@ Fiets @@TRANSPORT-MOPED@@ Brommer @@TRANSPORT-MOTORCYCLE@@ Motorfiets @@TRANSPORT-MOTORCAR@@ Auto @@TRANSPORT-GOODS@@ Goederen @@TRANSPORT-HGV@@ Zwaar transport @@TRANSPORT-PSV@@ Publiek transport @@HIGHWAY-MOTORWAY@@ Autostrade @@HIGHWAY-TRUNK@@ Autoweg @@HIGHWAY-PRIMARY@@ Provinciale wegen @@HIGHWAY-SECONDARY@@ Nationale wegen @@HIGHWAY-TERTIARY@@ Doorgangsweg @@HIGHWAY-UNCLASSIFIED@@ Niet geclassificeerd @@HIGHWAY-RESIDENTIAL@@ Woongebied @@HIGHWAY-SERVICE@@ Toegangsweg @@HIGHWAY-TRACK@@ Veldweg @@HIGHWAY-CYCLEWAY@@ Fietspad @@HIGHWAY-PATH@@ Pad @@HIGHWAY-STEPS@@ Trap @@HIGHWAY-FERRY@@ Ferry @@PROPERTY-PAVED@@ Verhard @@PROPERTY-MULTILANE@@ Meerdere Stroken @@PROPERTY-BRIDGE@@ Brug @@PROPERTY-TUNNEL@@ Tunnel @@RESTRICT-ONEWAY@@ Volg Eenrichtingsverkeer @@RESTRICT-WEIGHT@@ Gewicht @@RESTRICT-HEIGHT@@ Hoogte @@RESTRICT-WIDTH@@ Breedte @@RESTRICT-LENGTH@@ Lengte @@FIND-SHORTEST-ROUTE@@ Zoek de kortste route @@FIND-QUICKEST-ROUTE@@ Zoek de snelste route @@EDIT-OSM-DATA@@ Lees hoe je OSM data kan inbrengen @@ROUTER-NOT-RUN@@ Router niet in gebruik @@ROUTER-RUNNING@@ Router werkt... @@ROUTER-COMPLETED@@ Routing voltooid @@ROUTER-ERROR@@ Router error @@ROUTER-FAILED@@ Router werkt niet @@HTML-ROUTE@@ HTML directions @@GPX-TRACK-ROUTE@@ GPX track bestand @@GPX-ROUTE@@ GPX route bestand @@FULL-TEXT-ROUTE@@ Volledig tekst bestand @@TEXT-ROUTE@@ Tekst bestand # # Visualiser specific translations # @@INSTRUCTIONS-BOX@@ Instructies @@NO-DATA-DISPLAYED@@ Geen data getoond @@SPEED-BUTTON@@ Toon snelheidslimieten @@WEIGHT-BUTTON@@ Toon massa limieten @@WEIGHT-LIMIT-8@@ 8.0 ton massa limiet @@HEIGHT-BUTTON@@ Toon hoogte limieten @@HEIGHT-LIMIT-4@@ 4.0 m hoogte limiet @@WIDTH-BUTTON@@ Toon breedte limieten @@WIDTH-LIMIT-3@@ 3.0 m breedte limiet # # Multi-line descriptive translations (router) # $$ROUTER-INFO$$ Zoom naar straatniveau. Selecteer start- and eindpunten onder Coordinaten. (click op het marker icoon links, schuif het op map naar gewenste positie). $$ROUTER-INFO$$ $$ROUTER-OPTIONS-HELP$$ Quick Start
Click op marker-icoontje (Waypoints) om ze op de map te plaatsen (rechts). Sleep ze vervolgens naar de gewenste positie. Het is best om eerst naar straat niveau te zoomen op de kaart. Selecteer het transport type, toegestane weg-types, snelheidslimieten, wegeigenschappen en andere restricties uit de opties. Selecteer "Kortste" of "Snelste" om de route te berekenen en te tekenen op de map.

Coordinaten (Waypoints)
Click op het marker icoontje, nog eens clicken voor aan/uit. Wanneer de route berekend wordt, zal dit nauwkeurig aansluiten bij de volgorde van deze punten. (rekening houdend met transport type)

Transport Type
Wanneer je een bepaald transport type kiest wordt bij berekenen route hiermede rekening gehouden. Het transport type bestaat uit een lijst met default waarden voor ieder wegtype. Deze percentages kunnen ook nog eens manueel aangepast worden.

Voorkeur Wegtype
De voorkeur voor een bepaald type weg wordt uitgedrukt in een percentage. Bijvoorbeeld wanneer u het Transport Type "Fiets" kiest, dan zal er voor Autostrade 0% staan, en voor Fietspad 100%. Wanneer u Autowegen, Nationale wegen wil vermijden of beperken bij het maken van een fietsroute, kan u percentage naar beneden aanpassen.

Snelheid limieten
De snelheidslimieten worden afgeleid van het type weg. Het is mogelijk dat er voor een bepaalde weg andere beperkingen gelden. In dat geval worden die gekoezen. (het geval dat deze lager zijn dan de default)

Weg Eigenschappen
Voor het berekenen van de route, kan de de voorkeur gegeven worden aan een bepaalde wegeigenschap. Wanneer u kiest voor 25% verhard, zal er automatisch de voorkeur aan 75% onverhard worden gegeven. Ook al is het onverharde stuk 3 X langer, toch kan er dan de voorkeur aan gegeven worden.

Andere Beperkingen
Deze zullen toelaten dat er een route berekend wordt die rekening houdt met gewicht, hoogte, breedte of lengte. Het is ook mogelijk geen rekening te houden met eenrichtingsverkeer (bijvoorbeeld als voetganger of fietser) $$ROUTER-OPTIONS-HELP$$ $$ROUTER-RESULTS-HELP$$ Quick Start
Na het berekenen van een route, kan het GPX bestand, of de beschrijving als tekstbestand downloaden. Door met muis over de beschrijving te bewegen, ziet u die ook op de kaart gesitueerd.

Problem Solving
Als de router eindigt met een fout, dan is de meest waarschijnlijke oorzaak, dat er geen route mogelijk is tussen de gekozen punten. Het verplaatsen van de punten, of het aanpassen van weg-eigenschappen of voertuigtype kan een oplossing bieden.

Output Formats

HTML instructies
Een beschrijving van de route, met de te nemen afslag aan iedere splitsing.
GPX track bestand
Dezelfde informatie die op de kaart wordt weergegeven. Met coordinaten voor ieder knooppunt, en een track voor ieder segment.
GPX route bestand
Dezelfde informatie dat is opgenomen in de tekst van de route, met een coordinaat voor iedere belangrijke splitsing.
Full text bestand
Een lijst met alle coordinaten, met de afstand hier tussen. En een cumulatieve afstand voor iedere stap op de route.
Text bestand
Dezelfde informatie als wordt weergegeven in de tekst voor de route.
$$ROUTER-RESULTS-HELP$$ $$ROUTER-VISUALISER-INFO$$ Om te kijken hoe Routino omgaat met de basisdata, is er een tooltje dat de onderliggende data toont op verschillende manieren. $$ROUTER-VISUALISER-INFO$$ # # Multi-line descriptive translations (visualiser) # routino-3.2/web/translations/translation.de.txt 644 233 144 31312 13035744741 15241 0# # German language translation phrases # # # Router output XML definition # %%copyright_creator_string%% Urheber %%copyright_source_string%% Quelle %%copyright_source_text%% Basierend auf OpenStreetMap-Daten, erhältlich via http://www.openstreetmap.org/ %%copyright_license_string%% Lizenz %%turn_-4%% Sehr scharf links %%turn_-3%% Scharf links %%turn_-2%% Links %%turn_-1%% Halb links %%turn_0%% Geradeaus %%turn_1%% Halb rechts %%turn_2%% Rechts %%turn_3%% Scharf rechts %%turn_4%% Sehr scharf rechts %%heading_-4%% Süd %%heading_-3%% Süd-West %%heading_-2%% West %%heading_-1%% Nord-West %%heading_0%% Nord %%heading_1%% Nord-Ost %%heading_2%% Ost %%heading_3%% Süd-Ost %%heading_4%% Süd %%ordinal_1%% Erste %%ordinal_2%% Zweite %%ordinal_3%% Dritte %%ordinal_4%% Vierte %%ordinal_5%% Fünfte %%ordinal_6%% Sechste %%ordinal_7%% Siebte %%ordinal_8%% Achte %%ordinal_9%% Neunte %%ordinal_10%% Zehnte %%highway_motorway%% Autobahn %%highway_trunk%% Schnellstraße %%highway_primary%% Bundesstraße %%highway_secondary%% Landesstraße %%highway_tertiary%% Kreisstraße %%highway_unclassified%% Nebenstraße %%highway_residential%% Wohngebietsstraße %%highway_service%% Erschließungsweg %%highway_track%% Feld-/Waldweg %%highway_cycleway%% Radweg %%highway_path%% Weg/Pfad %%highway_steps%% Treppe %%highway_ferry%% Fähre %%route_shortest%% Kürzeste %%route_quickest%% Schnellste %%output-html_waypoint_waypoint%% Wegpunkt %%output-html_waypoint_junction%% Anschlussstelle %%output-html_waypoint_roundabout%% Kreisverkehr %%output-html_title%% %s Route %%output-html_start%% Start bei %s halten Sie sich Richtung %s %%output-html_node%% Bei %s wenden Sie sich nach %s Richtung %s %%output-html_rbnode%% Verlassen Sie %s, nehmen Sie die %s Ausfahrt Richtung %s %%output-html_segment%% Folgen Sie der %s für %.3f km bzw. %.1f min %%output-html_stop%% Stop Sie sind bei %s angekommen %%output-html_total%% Gesamt %.1f km, %.0f minuten %%output-html_subtotal%% %.1f km, %.0f minuten %%output-gpx_waypoint_waypt%% Wegpunkt %%output-gpx_waypoint_trip%% Reiseroute %%output-gpx_desc%% %s Strecke zwischen 'Start' und 'Ziel' %%output-gpx_name%% %s Strecke %%output-gpx_step%% %s auf '%s' für %.3f km, %.1f min %%output-gpx_final%% Gesamtstrecke %.1f km, %.0f minuten # # Router (and some shared) translations # @@LANGUAGE@@ Deutsch @@LANGUAGE-WEBPAGE@@ Deutsche Webseite @@ROUTER-TITLE@@ Routen Planer für OpenStreetMap Daten @@OPTION-TAB@@ Optionen @@OPTION-TAB-HELP@@ Setze Routing-Optionen @@RESULTS-TAB@@ Ergebnisse @@RESULTS-TAB-HELP@@ Sieh die Ergebnisse @@DATA-TAB@@ Daten @@DATA-TAB-HELP@@ Sieh die Datenbankinformationen @@ROUTINO-ROUTER@@ Routino OpenStreetMap Router @@ROUTINO-WEBSITE@@ Routino Website @@DOCUMENTATION@@ Dokumentation @@LANGUAGE-BOX@@ Sprache @@WAYPOINTS-BOX@@ Wegpunkte @@TRANSPORT-TYPE-BOX@@ Fortbewegungsart @@HIGHWAY-PREFERENCES-BOX@@ Vorgaben zur Wegnutzung @@SPEED-LIMITS-BOX@@ Geschwindigkeitsvorgaben @@PROPERTY-PREFERENCES-BOX@@ Vorgaben zur Wegbeschaffenheit @@OTHER-RESTRICTIONS-BOX@@ andere Vorgaben @@FIND-BOX@@ Suche @@LINKS-BOX@@ Links @@HELP-BOX@@ Hilfe @@STATUS-BOX@@ Status @@SHORTEST-ROUTE@@ kürzester Weg @@QUICKEST-ROUTE@@ schnellste Route @@STATISTICS-BOX@@ Routino Statistik @@VISUALISER-BOX@@ Routino Ansichten @@WAYPOINT-POSITION@@ Wegpunkt XXX Position @@WAYPOINT-LONGITUDE@@ Wegpunkt XXX geografische Länge @@WAYPOINT-LATITUDE@@ Wegpunkt XXX geografische Breite @@WAYPOINT-LOCATION@@ Wegpunkt XXX Ort @@WAYPOINT-SEARCH@@ Nach Ort suchen @@WAYPOINT-GET@@ Aktuellen Ort bestimmen @@WAYPOINT-CENTRE1@@ Karte auf Wegpunkt zentrieren @@WAYPOINT-UP@@ Wegpunkt nach oben verschieben @@WAYPOINT-ADD@@ Neuer Wegpunkt nach diesem @@WAYPOINT-COORDS@@ Koordinaten des Orts @@WAYPOINT-HOME@@ Umschalten auf den Standort des Zuhauses @@WAYPOINT-CENTRE2@@ Wegpunkt auf Karte zentrieren @@WAYPOINT-DOWN@@ Wegpunkt nach unten verschieben @@WAYPOINT-REMOVE@@ Wegpunkt entfernen @@WAYPOINT-REVERSE@@ Rückwärts @@WAYPOINT-REVERSE-BUTTON@@ Rückwärts @@WAYPOINT-LOOP@@ Einen Wegpunkt hinzufügen um eine Schlaufe zu machen @@WAYPOINT-LOOP-BUTTON@@ Schleife schließen @@TRANSPORT-FOOT@@ Fußgänger @@TRANSPORT-HORSE@@ Pferd @@TRANSPORT-WHEELCHAIR@@ Rollstuhl @@TRANSPORT-BICYCLE@@ Fahrrad @@TRANSPORT-MOPED@@ Moped @@TRANSPORT-MOTORCYCLE@@ Motorrad @@TRANSPORT-MOTORCAR@@ Auto @@TRANSPORT-GOODS@@ LKW @@TRANSPORT-HGV@@ Schwertransport/LKW @@TRANSPORT-PSV@@ Öffentlicher Personenverkehr @@HIGHWAY-MOTORWAY@@ Autobahn @@HIGHWAY-TRUNK@@ Schnellstraße @@HIGHWAY-PRIMARY@@ Bundesstraße @@HIGHWAY-SECONDARY@@ Landesstraße @@HIGHWAY-TERTIARY@@ Hauptstraße @@HIGHWAY-UNCLASSIFIED@@ Straße @@HIGHWAY-RESIDENTIAL@@ Wohnstraße @@HIGHWAY-SERVICE@@ Zufahrtsweg @@HIGHWAY-TRACK@@ Feld-(Wald-)weg @@HIGHWAY-CYCLEWAY@@ Fahrradweg @@HIGHWAY-PATH@@ Weg @@HIGHWAY-STEPS@@ Treppe @@HIGHWAY-FERRY@@ Fähre @@PROPERTY-PAVED@@ befestigt @@PROPERTY-MULTILANE@@ mehrspurig @@PROPERTY-BRIDGE@@ Brücken @@PROPERTY-TUNNEL@@ Tunnel @@PROPERTY-WALKINGROUTE@@ Wanderweg @@PROPERTY-BICYCLEROUTE@@ Radweg @@RESTRICT-ONEWAY@@ beachte Einbahnstraßen @@RESTRICT-TURNS@@ beachte Abbiegeverbot @@RESTRICT-WEIGHT@@ Gewicht @@RESTRICT-HEIGHT@@ Höhe @@RESTRICT-WIDTH@@ Breite @@RESTRICT-LENGTH@@ Länge @@FIND-SHORTEST-ROUTE@@ Kürzeste Route finden @@FIND-QUICKEST-ROUTE@@ Schnellste Route finden @@MAP-VIEW-LINK@@ anpassen dieser Kartenansicht @@EDIT-OSM-DATA@@ Bearbeitet die OSM-Daten @@ROUTER-NOT-RUN@@ Router läuft nicht @@ROUTER-RUNNING@@ Router läuft... @@ROUTER-COMPLETED@@ Routing fertig @@ROUTER-ERROR@@ Router Fehler @@ROUTER-FAILED@@ Router funktioniert nicht @@VIEW-DETAILS@@ zeige Details @@NO-INFORMATION@@ keine Information @@HTML-ROUTE@@ HTML @@GPX-TRACK-ROUTE@@ GPX Track-Datei @@GPX-ROUTE@@ GPX Routen-Datei @@FULL-TEXT-ROUTE@@ Volltext-Datei @@TEXT-ROUTE@@ Text-Datei @@OPEN-POPUP@@ öffne Popup @@DISPLAY-STATISTICS@@ zeige die Statistik @@JAVASCRIPT-REQUIRED@@ Um die interaktive Karte zu nutzen iWork Javascript benötigt. @@ROUTER@@ Router @@GEO-DATA@@ Geodaten @@TILES@@ Kacheln # # Visualiser specific translations # @@VISUALISER-TITLE@@ Visualisierung der Routing-Daten @@INSTRUCTIONS-BOX@@ Anweisungen @@ROUTER-BOX@@ Routino Router @@NO-DATA-DISPLAYED@@ Keine Daten angezeigt @@VISUALISER-FAILED@@ Fehler bei der Erstellung der visuellen Daten! @@VISUALISER-NUM-JUNCTIONS@@ # Kreuzungen verarbeitet @@VISUALISER-NUM-SUPER@@ # Super-Knoten/Segmente verarbeitet @@VISUALISER-NUM-WAYTYPE@@ # Wegtypen Segmente verarbeitet @@VISUALISER-NUM-SEGMENTS@@ # Segmente verarbeitet @@VISUALISER-NUM-NODES@@ # Knoten verarbeitet @@VISUALISER-NUM-TURNS@@ # Abbiegebeschrängkungen verarbeitet @@VISUALISER-NUM-LIMITS@@ # Limit-Änderungen verarbeitet @@VISUALISER-NUM-ERRORS@@ # Error Logs erstellt @@JUNCTIONS-BUTTON@@ Kreuzungen anzeigen @@JUNCTIONS-1@@ ein Weg - Sackgasse @@JUNCTIONS-2@@ Aufeinandertreffen zweier Wege unterschiedlichen Typs. @@JUNCTIONS-3@@ Aufeinandertreffen von drei Wegen. @@JUNCTIONS-4@@ Aufeinandertreffen von vier Wegen. @@JUNCTIONS-5@@ Aufeinandertreffen von fünf Wegen. @@JUNCTIONS-6@@ Aufeinandertreffen von sechs Wegen. @@JUNCTIONS-MORE@@ Aufeinandertreffen von sieben oder mehr Wegen. @@SUPER-BUTTON@@ Super-Segments anzeigen @@WAYTYPE-BUTTON@@ Wegart des Abschnittes anzeigen $$WAYTYPE-INFO$$ Spezial-Arten der Abschnitte (Einbahnstraße, beidseitige Fahrradwege und Kreisverkehre) werden angezeigt. Ein koloriertes Dreieck zeigt die erlaubte Fahrtrichtung an. Die Farben der Dreiecke hängen von der jeweiligen Art des Abschnittes ab. $$WAYTYPE-INFO$$ @@WAYTYPE-ONEWAY@@ Einbahnstraßen Segmente @@WAYTYPE-CYCLE-BOTH-WAYS@@ Fahrradweg auf beiden Seiten des Abschnittes @@WAYTYPE-ROUNDABOUT@@ Kreisverkehr Segmente @@HIGHWAY-BUTTON@@ Wegabschnitte anzeigen $$HIGHWAY-INFO$$ Jeder Abschnitt der ausgewählten Wegart ist gezeichnet. $$HIGHWAY-INFO$$ @@TURNS-BUTTON@@ Zeige Abbiegebeschränkungen $$TURNS-INFO$$ Jede Abbiegebeschränkung wird mit einer Linie angezeigt $$TURNS-INFO$$ @@SPEED-BUTTON@@ Zeige Geschwindigkeitsbeschränkungen @@LIMIT-CHANGE@@ Änderung der Beschränkung @@LIMIT-NONE@@ Keine Beschränkung @@SPEED-LIMIT-80@@ 80 km/Stunde Geschwindigkeitsbegrenzung @@WEIGHT-BUTTON@@ Gewichtswegbeschränkungen anzeigen @@WEIGHT-LIMIT-8@@ 8 Tonnen Wegbeschränkung @@HEIGHT-BUTTON@@ Maximale Höhe anzeigen @@HEIGHT-LIMIT-4@@ 4.0 m Höhenbeschränkung @@WIDTH-BUTTON@@ Maximale Breite anzeigen @@WIDTH-LIMIT-3@@ max. 3,0 m Breite @@LENGTH-BUTTON@@ Längenbeschränkung anzeigen @@LENGTH-LIMIT-9@@ 9.0 m Längenbeschränkung @@PROPERTY-BUTTON@@ Anzeigen der Wegeigenschaften @@ERROR-LOG-BUTTON@@ Anzeige Fehlerprotokoll @@CLEAR-DATA-BUTTON@@ Daten zurücksetzen # # Multi-line descriptive translations (router) # $$ROUTER-INFO$$ Diese Website erlaubt Routing mit den Daten, die OpenStreetMap gesammelt hat. Wähle Start- und Endpunkt (klicke auf die Marker-Symbole unten), wähle die Routing-Vorgaben und dann finde den Weg. $$ROUTER-INFO$$ $$ROUTER-OPTIONS-HELP$$ Schnellanleitung
Klicke auf die Marker-Bildchen (oben), um sie in der Mitte der Karte (rechts) zu positionieren. Dann ziehe das Bildchen auf die genaue Position. Das Zoomen der Karte vor der Patzierung ist vermutlich am einfachsten. Alternativ kann man die geografische Breite und Länge in den Kästchen eintragen.

Wähle die Fortbewegungsart, die Vorgaben zur Wegnutzung, die Geschwindigkeitsvorgaben, die Vorgaben zur Wegbeschaffenheit und die anderen Vorgaben von den obigen Auswahlfeldern. Ein Klick auf "kürzeste" oder "schnellste" ermittelt die entsprechende Verbindung und zeigt sie in der Karte an.

Wegpunkte
Ein Klick auf das Marker-Bildchen (oben) schaltet die Sichbarkeit in der Karte ein bzw. aus. Die Berechnung Route erfolgt in der Reihenfolge der Wegpunkte (so gut, wie es für die gewählte Fortbewegungsart möglich ist).

Fortbewegungsart
Die Auswahl der Fortbewegungsart bestimmt die bei der Routenberechnung erlaubten Wegtypen und die Vorgabeeinstellungen aller anderen Parameter.

Vorgaben zur Wegnutzung
Die Vorgaben zur Wegnutzung bestimmen die Priorisierung von Wegarten. Wenn z. B. Schnellstraßen mit 110% und Bundesstraßen mit 100% angegeben werden, wird bei zwei möglichen Wegwahlen die Schnellstraße solange bevorzugt wird, wie der Längen(oder Zeit-)unterschied 10% nicht überschreitet.

Geschwindigkeitsvorgaben
Die hier geannten Geschwindigkeiten werden für den jeweiligen Wegtyp finden Anwendung wenn keine andere Geschwindkeitsbegrenzung mit geringerem Wert bekannt ist.

Vorgaben zur Wegbeschaffenheit
Die Vorgaben zur Wegbeschaffenheit werden als Prozentangaben verwendet, um die Verhältnisse der Wegbenutzung zu steuern. Wenn z. B. befestigte Wege mit 75% angegeben sind, werden unbefestigte automatisch mit 25% angenommen, so werden Wege ausgewählt, die mindestens drei mal länger auf befestigten Wegen verlaufen.

andere Vorgaben
Die Berücksichtigung von Benutzungs-Begrenzungen durch Gewicht, Höhe, Länge und Breite ist möglich. Genauso können Einbahnstraßenbeschräkungen ignoriert werden (z. B. als Fußgänger). $$ROUTER-OPTIONS-HELP$$ $$ROUTER-RESULTS-HELP$$ Schnellanleitung
Nach der Routenberechnung kann man eine GPX oder eine einfache Textdatei (Kurz- oder Langfassung) herunterladen. Ebenso kann man die Routenbeschreibung ansehen und in ausgewälte Bereiche zoomen.

Problemlösung
Wenn der Router einen Fehler meldet liegt es meistens daran, dass kein Weg zwischen den gewälten Punkten unter Beachtung der Vorgaben gefunden werden kann. Das Bewegen eines oder mehrere Punkte oder das verändern von Vorgaben sollte es erlauben eine Route zu finden.

Ausgabe-Formate

HTMLs
Eine Beschreibung der Route mit Anweisungen für jede wichtige Abzweigung.
GPX Track-Datei
Die gleichen Informationen, die in der Karte angezeigt werden mit Punkten für jeden Abzweig und Linien für jedes Teilstück.
GPX Routen-Datei
Die gleichen Informationen, die im Text angezeigt werden mit einem Wegpunkt für jede wichtige Richtungsänderung.
Volltext-Datei
Eine aller Knoten und die Abstände zwischen ihnen, sowie die Gesamtentfernung vom i Startpunkt zum jeweiligen Konten.
Text-Datei
Die gleiche Information, die als Text angezeigt wird.
$$ROUTER-RESULTS-HELP$$ $$ROUTER-VISUALISER-INFO$$ Die Anzeige der Daten kann auf verschiedene Weise angepasst werden. $$ROUTER-VISUALISER-INFO$$ # # Multi-line descriptive translations (visualiser) # $$VISUALISER-INSTRUCTIONS$$ Zoomen Sie in die Karte und nutzen Sie den Knöpfe unten um die Daten herunter zu laden. Der Server liefert nur ein Ergebnis, wenn das ausgewählte Feld klein genug ist. $$VISUALISER-INSTRUCTIONS$$ $$VISUALISER-ROUTER-INFO$$ Um die Routenplanung auf der Karte durchzuführen, verwenden sie den untenstehenden Link. $$VISUALISER-ROUTER-INFO$$ routino-3.2/web/translations/translation.ru.txt 644 233 144 22127 12677011535 15302 0# # Russian language translation phrases # # # Router output XML definition # %%copyright_creator_string%% Ðвтор %%copyright_source_string%% ИÑточник %%copyright_source_text%% ИÑпользованы данные OpenStreetMap http://www.openstreetmap.org/ %%copyright_license_string%% Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ %%turn_-4%% очень крутой поворот налево %%turn_-3%% крутой поворот налево %%turn_-2%% налево %%turn_-1%% плавно налево %%turn_0%% прÑмо %%turn_1%% плавно направо %%turn_2%% направо %%turn_3%% крутой поворот направо %%turn_4%% очень крутой поворот направо %%heading_-4%% юг %%heading_-3%% юго-запад %%heading_-2%% запад %%heading_-1%% Ñеверо-запад %%heading_0%% Ñевер %%heading_1%% Ñеверо-воÑток %%heading_2%% воÑток %%heading_3%% юго-воÑток %%heading_4%% юг %%ordinal_1%% Первый %%ordinal_2%% Второй %%ordinal_3%% Третий %%ordinal_4%% Четвертый %%ordinal_5%% ПÑтый %%ordinal_6%% ШеÑтой %%ordinal_7%% Седьмой %%ordinal_8%% ВоÑьмой %%ordinal_9%% ДевÑтый %%ordinal_10%% ДеÑÑтый %%highway_motorway%% автомагиÑтраль %%highway_trunk%% Ð¼ÐµÐ¶Ð´ÑƒÐ½Ð°Ñ€Ð¾Ð´Ð½Ð°Ñ Ñ‚Ñ€Ð°ÑÑа %%highway_primary%% дорога регионального Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ %%highway_secondary%% дорога облаÑтного Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ %%highway_tertiary%% дорога районного Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ %%highway_unclassified%% дорога меÑтного Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ %%highway_residential%% улица %%highway_service%% проезд %%highway_track%% дорога Ñ/Ñ… Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ %%highway_cycleway%% велодорожка %%highway_path%% тропинка %%highway_steps%% леÑтница %%highway_ferry%% паром %%route_shortest%% Кратчайший %%route_quickest%% БыÑтрый %%output-html_waypoint_waypoint%% Точка %%output-html_waypoint_junction%% перекреÑтке %%output-html_waypoint_roundabout%% круговое движение %%output-html_title%% %s маршрут %%output-html_start%% Старт %s, на %s %%output-html_node%% на %s, %s, на %s %%output-html_segment%% Следуйте по %s %.3f км, %.1f мин %%output-html_stop%% Стоп %s %%output-html_total%% Ð’Ñего %.1f км, %.0f минут %%output-html_subtotal%% %.1f км, %.0f минут %%output-gpx_waypoint_waypt%% ТОЧКР%%output-gpx_desc%% %s маршрут от 'Старта' до 'Финиша' %%output-gpx_name%% %s маршрут %%output-gpx_step%% на %s по '%s' %.3f км, %.1f мин %%output-gpx_final%% Ð’Ñего - %.1f км, продолжительноÑть - %.0f минут # # Router (and some shared) translations # @@LANGUAGE@@ РуÑÑкий @@LANGUAGE-WEBPAGE@@ Страница на РуÑÑком Ñзыке @@OPTION-TAB@@ ÐаÑтройки @@OPTION-TAB-HELP@@ Задать наÑтройки маршрутизации @@RESULTS-TAB@@ Результаты @@RESULTS-TAB-HELP@@ Смотрите результат прокладки маршрута @@DATA-TAB@@ Данные @@ROUTINO-WEBSITE@@ Сайт Routino @@DOCUMENTATION@@ Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ @@LANGUAGE-BOX@@ Язык @@WAYPOINTS-BOX@@ Точки @@TRANSPORT-TYPE-BOX@@ Тип транÑпорта @@HIGHWAY-PREFERENCES-BOX@@ ÐаÑтройки типа дорог @@SPEED-LIMITS-BOX@@ ÐžÐ³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти @@PROPERTY-PREFERENCES-BOX@@ ÐаÑтройки качеÑтва дорог @@OTHER-RESTRICTIONS-BOX@@ Другие Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ @@FIND-BOX@@ Ðайти @@LINKS-BOX@@ СÑылки @@HELP-BOX@@ Помощь @@STATUS-BOX@@ Ð¡Ñ‚Ð°Ñ‚ÑƒÑ @@SHORTEST-ROUTE@@ Кратчайший маршрут @@QUICKEST-ROUTE@@ БыÑтрейший маршрут @@STATISTICS-BOX@@ Routino СтатиÑтика @@WAYPOINT-SEARCH@@ ПоиÑк по адреÑу @@WAYPOINT-GET@@ Текущее меÑтоположение @@WAYPOINT-CENTRE1@@ Центрировать карту на Ñтой точке @@WAYPOINT-UP@@ ПомеÑтить точку выше @@WAYPOINT-ADD@@ Добавить Ñледующую точку @@WAYPOINT-COORDS@@ По координатам @@WAYPOINT-HOME@@ Переключение домашней локации @@WAYPOINT-CENTRE2@@ ПеремеÑтить точку в центр карты @@WAYPOINT-DOWN@@ ПомеÑтить точку ниже @@WAYPOINT-REMOVE@@ Удалить Ñту путевую точку @@WAYPOINT-REVERSE@@ ПереÑтроить в обратном порÑдке @@WAYPOINT-REVERSE-BUTTON@@ Обратный порÑдок @@WAYPOINT-LOOP@@ Добавить точку Ð´Ð»Ñ Ð·Ð°Ñ†Ð¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ @@WAYPOINT-LOOP-BUTTON@@ Зациклить @@TRANSPORT-FOOT@@ Пешком @@TRANSPORT-HORSE@@ Лошадь @@TRANSPORT-WHEELCHAIR@@ Инвалидное креÑло @@TRANSPORT-BICYCLE@@ ВелоÑипед @@TRANSPORT-MOPED@@ Мопед @@TRANSPORT-MOTORCYCLE@@ Мотоцикл @@TRANSPORT-MOTORCAR@@ Машина @@TRANSPORT-GOODS@@ Фургон @@TRANSPORT-HGV@@ Грузовой автомобиль @@TRANSPORT-PSV@@ ÐÐ²Ñ‚Ð¾Ð±ÑƒÑ @@HIGHWAY-MOTORWAY@@ ÐвтомагиÑтраль @@HIGHWAY-TRUNK@@ ÐœÐµÐ¶Ð´ÑƒÐ½Ð°Ñ€Ð¾Ð´Ð½Ð°Ñ Ñ‚Ñ€Ð°ÑÑа @@HIGHWAY-PRIMARY@@ Дорога регионального Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ @@HIGHWAY-SECONDARY@@ Дорога облаÑтного Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ @@HIGHWAY-TERTIARY@@ Дорога районного Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ @@HIGHWAY-UNCLASSIFIED@@ Дорога меÑтного Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ @@HIGHWAY-RESIDENTIAL@@ Улица @@HIGHWAY-SERVICE@@ Проезд @@HIGHWAY-TRACK@@ Дорога Ñ/Ñ… Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ @@HIGHWAY-CYCLEWAY@@ Велодорожка @@HIGHWAY-PATH@@ Тропинка @@HIGHWAY-STEPS@@ ЛеÑтница @@HIGHWAY-FERRY@@ Паром @@PROPERTY-PAVED@@ ÐœÐ¾Ñ‰ÐµÐ½Ð°Ñ @@PROPERTY-MULTILANE@@ МногополоÑÐ½Ð°Ñ @@PROPERTY-BRIDGE@@ МоÑÑ‚ @@PROPERTY-TUNNEL@@ Туннель @@PROPERTY-WALKINGROUTE@@ Пеший маршрут @@PROPERTY-BICYCLEROUTE@@ Велодорожка @@RESTRICT-ONEWAY@@ ОдноÑтороннÑÑ ÑƒÐ»Ð¸Ñ†Ð° @@RESTRICT-TURNS@@ ÐžÐ³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð²Ð¾Ñ€Ð¾Ñ‚Ð° @@RESTRICT-WEIGHT@@ Ð’ÐµÑ @@RESTRICT-HEIGHT@@ Ð’Ñ‹Ñота @@RESTRICT-WIDTH@@ Ширина @@RESTRICT-LENGTH@@ Длина @@FIND-SHORTEST-ROUTE@@ Ðайти кратчайший маршрут @@FIND-QUICKEST-ROUTE@@ Ðайти быÑтрейший маршут @@EDIT-OSM-DATA@@ Редактировать данные OSM @@ROUTER-NOT-RUN@@ Роутер не запущен @@ROUTER-RUNNING@@ Прокладка маршрута... @@ROUTER-COMPLETED@@ Прокладка маршрута завершена @@ROUTER-ERROR@@ Ошибка прокладки маршрута @@ROUTER-FAILED@@ Ошибка при запуÑке @@VIEW-DETAILS@@ Подробнее @@NO-INFORMATION@@ ПуÑто @@HTML-ROUTE@@ HTML навигатор @@GPX-TRACK-ROUTE@@ Трек в формате GPX @@GPX-ROUTE@@ Маршрут в формате GPX @@FULL-TEXT-ROUTE@@ Подробный текÑтовый файл @@TEXT-ROUTE@@ ТекÑтовый файл @@OPEN-POPUP@@ Открыть @@DISPLAY-STATISTICS@@ Показать ÑтатиÑтику данных @@JAVASCRIPT-REQUIRED@@ Javascript обÑзателен Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра данной Ñтраницы, так как на ней иÑпользуетÑÑ Ð¸Ð½Ñ‚ÐµÑ€Ð°ÐºÑ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð°. @@GEO-DATA@@ Гео данные @@TILES@@ Тайлы # # Visualiser specific translations # @@INSTRUCTIONS-BOX@@ ИнÑтрукции @@NO-DATA-DISPLAYED@@ Ðет данных Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ @@VISUALISER-NUM-NODES@@ Обработано # нод @@VISUALISER-NUM-TURNS@@ Обработано # ограничений поворотов @@WAYTYPE-ONEWAY@@ Ñегмент одноÑторонней дороги @@TURNS-BUTTON@@ Показывать Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð²Ð¾Ñ€Ð¾Ñ‚Ð¾Ð² @@SPEED-BUTTON@@ Показывать Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти @@LIMIT-CHANGE@@ Изменить Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ @@LIMIT-NONE@@ Ðет отграничений @@SPEED-LIMIT-80@@ Ограничение ÑкороÑти 80 км/ч @@WEIGHT-BUTTON@@ Показывать Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ веÑу @@WEIGHT-LIMIT-8@@ Ограничение веÑа 8 тонн @@HEIGHT-BUTTON@@ Показывать ограничение по выÑоте @@HEIGHT-LIMIT-4@@ Ограничение выÑоты 4.0 метра @@WIDTH-BUTTON@@ Показывать ограничение ширины @@WIDTH-LIMIT-3@@ Ограничение ширины 3.0 метра @@LENGTH-BUTTON@@ Показать Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ð¸Ð½Ð½Ñ‹ @@LENGTH-LIMIT-9@@ Ограничение длинны 9.0 метров @@ERROR-LOG-BUTTON@@ Показать лог ошибок @@CLEAR-DATA-BUTTON@@ ОчиÑтить данные # # Multi-line descriptive translations (router) # # # Multi-line descriptive translations (visualiser) # $$VISUALISER-ROUTER-INFO$$ Ð”Ð»Ñ Ð¿Ñ€Ð¾ÐºÐ»Ð°Ð´ÐºÐ¸ маршрута на карте иÑпользуйте ÑÑылку ниже. $$VISUALISER-ROUTER-INFO$$ routino-3.2/web/translations/translation.hu.txt 644 233 144 16645 12601526140 15266 0# # Hungarian language translation phrases # # # Router output XML definition # %%copyright_creator_string%% KészítÅ‘ %%copyright_source_string%% Forrás %%copyright_source_text%% Openstreetmap adatok alapján http://www.openstreetmap.org/ %%copyright_license_string%% Liszenc %%turn_-4%% Nagyon élesen balra %%turn_-3%% Élesen balra %%turn_-2%% Balra %%turn_-1%% Balra tarts %%turn_0%% Egyenesen %%turn_1%% Jobbra tarts %%turn_2%% Jobbra %%turn_3%% Élesen jobbra %%turn_4%% Nagyon élesen jobbra %%heading_-4%% dél %%heading_-3%% délnyugat %%heading_-2%% nyugat %%heading_-1%% északnyugat %%heading_0%% észak %%heading_1%% északkelet %%heading_2%% kelet %%heading_3%% délkelet %%heading_4%% dél %%ordinal_1%% elsÅ‘ %%ordinal_2%% második %%ordinal_3%% harmadik %%ordinal_4%% negyedik %%ordinal_5%% ötödik %%ordinal_6%% hatodik %%ordinal_7%% hetedik %%ordinal_8%% nyolcadik %%ordinal_9%% kilencedik %%ordinal_10%% tizedik %%highway_motorway%% autópálya %%highway_trunk%% autóút %%highway_primary%% főút %%highway_secondary%% összekötőút %%highway_tertiary%% bekötőút %%highway_unclassified%% egyéb közút %%highway_residential%% lakóút %%highway_service%% szervízút %%highway_track%% földút %%highway_cycleway%% kerékpárút %%highway_path%% ösvény %%highway_steps%% lépcsÅ‘ %%highway_ferry%% komp %%route_shortest%% Legrövidebb %%route_quickest%% Leggyorsabb %%output-html_waypoint_waypoint%% Útpont %%output-html_waypoint_junction%% KeresztezÅ‘dés %%output-html_waypoint_roundabout%% Körforgalom %%output-html_title%% %s útvonal %%output-html_start%% Indulás %s, %s felé %%output-html_node%% Itt %s, menj %s %s felé %%output-html_rbnode%% Kijárat %s, %s kijárat %s felé %%output-html_segment%% Erre %s, %.3f km, %.1f perc %%output-html_total%% Összesen %.1f km, %.0f perc %%output-html_subtotal%% %.1f km, %.0f perc %%output-gpx_waypoint_trip%% Utazás %%output-gpx_desc%% %s útvonal a kezdÅ‘ és utolsó pont között %%output-gpx_final%% Az egész út %.1f km, %.0f perc # # Router (and some shared) translations # @@LANGUAGE@@ Magyar @@LANGUAGE-WEBPAGE@@ Magyar weblap @@ROUTER-TITLE@@ Openstreetmap alapú útvonaltervezÅ‘ @@OPTION-TAB@@ Beállítások @@OPTION-TAB-HELP@@ ÚtvonaltervezÅ‘ beállítások @@RESULTS-TAB@@ Eredmény @@RESULTS-TAB-HELP@@ ÚtvonaltervezÅ‘ eredmények @@DATA-TAB@@ Adatok @@DATA-TAB-HELP@@ Adatbázis információk @@ROUTINO-ROUTER@@ Routino openstreetmap útvonaltervezÅ‘ @@ROUTINO-WEBSITE@@ Routino weboldal @@DOCUMENTATION@@ Dokumentáció @@LANGUAGE-BOX@@ Nyelv @@WAYPOINTS-BOX@@ Útpontok @@TRANSPORT-TYPE-BOX@@ Közlekedési mód @@HIGHWAY-PREFERENCES-BOX@@ Út preferencia @@SPEED-LIMITS-BOX@@ Sebességkorlát @@PROPERTY-PREFERENCES-BOX@@ Út tulajdonságok @@OTHER-RESTRICTIONS-BOX@@ Kizáró tényezÅ‘k @@LINKS-BOX@@ Linkek @@HELP-BOX@@ Súgó @@STATUS-BOX@@ Ãllapot @@SHORTEST-ROUTE@@ Legrövidebb út @@QUICKEST-ROUTE@@ Leggyorsabb út @@STATISTICS-BOX@@ Routino statisztika @@VISUALISER-BOX@@ Routino vizualizáció @@WAYPOINT-SEARCH@@ Hely keresése @@WAYPOINT-GET@@ Aktuális helyzet @@WAYPOINT-CENTRE1@@ Legyen ez a pont a térkép közepe @@WAYPOINT-UP@@ Mozgasd feljebb ezt a pontot @@WAYPOINT-ADD@@ Új pont ezután a pont után @@WAYPOINT-COORDS@@ Hely koordinátája @@WAYPOINT-CENTRE2@@ Ez legyen a térkép középpontja @@WAYPOINT-DOWN@@ Mozgasd ezt a pontot lejjebb @@WAYPOINT-REMOVE@@ Pont törlése @@WAYPOINT-REVERSE@@ Útirány megfordítása @@WAYPOINT-REVERSE-BUTTON@@ EllenkezÅ‘ irány @@WAYPOINT-LOOP@@ Új pont létrehozása a kezdÅ‘pontban @@WAYPOINT-LOOP-BUTTON@@ Kör bezárása @@TRANSPORT-FOOT@@ Gyalog @@TRANSPORT-HORSE@@ Lovas @@TRANSPORT-WHEELCHAIR@@ Kerekesszékes @@TRANSPORT-BICYCLE@@ Kerékpáros @@TRANSPORT-MOPED@@ Robogós @@TRANSPORT-MOTORCYCLE@@ Motoros @@TRANSPORT-MOTORCAR@@ Autós @@TRANSPORT-GOODS@@ Kisteherautós @@TRANSPORT-HGV@@ Kamionos @@TRANSPORT-PSV@@ Buszos @@HIGHWAY-MOTORWAY@@ Autópálya @@HIGHWAY-TRUNK@@ Autóút @@HIGHWAY-PRIMARY@@ Főút @@HIGHWAY-SECONDARY@@ Összekötőút @@HIGHWAY-TERTIARY@@ Bekötőút @@HIGHWAY-UNCLASSIFIED@@ Egyéb közút @@HIGHWAY-RESIDENTIAL@@ Lakóövezeti út @@HIGHWAY-SERVICE@@ Szervízút @@HIGHWAY-TRACK@@ Földút @@HIGHWAY-CYCLEWAY@@ Kerékpárút @@HIGHWAY-PATH@@ Ösvény @@HIGHWAY-STEPS@@ LépcsÅ‘ @@HIGHWAY-FERRY@@ Komp @@PROPERTY-PAVED@@ Burkolt @@PROPERTY-MULTILANE@@ Többsávos @@PROPERTY-BRIDGE@@ Híd @@PROPERTY-TUNNEL@@ Alagút @@PROPERTY-WALKINGROUTE@@ Gyalogút @@PROPERTY-BICYCLEROUTE@@ Kijelölt kerékpárút @@RESTRICT-ONEWAY@@ Egyirányúsítás mellÅ‘zése @@RESTRICT-TURNS@@ Kanyarodási tilalmak mellÅ‘zése @@RESTRICT-WEIGHT@@ Súly @@RESTRICT-HEIGHT@@ Magasság @@RESTRICT-WIDTH@@ Szélesség @@RESTRICT-LENGTH@@ Hosszúság @@FIND-SHORTEST-ROUTE@@ A legrövidebb út keresése @@FIND-QUICKEST-ROUTE@@ A leggyorsabb út keresése @@MAP-VIEW-LINK@@ Link erre a nézetre @@EDIT-OSM-DATA@@ OSM adatok szerkesztése @@ROUTER-NOT-RUN@@ Az útvonaltervezÅ‘ nem fut @@ROUTER-RUNNING@@ Az útvonaltervezÅ‘ számol ... @@ROUTER-COMPLETED@@ Az útvonaltervezés kész @@ROUTER-ERROR@@ Útvonaltervezési hiba @@ROUTER-FAILED@@ Az útvonaltervezÅ‘t nem sikerült futtatni @@VIEW-DETAILS@@ Részletek @@NO-INFORMATION@@ Nincs információ @@HTML-ROUTE@@ HTML irányok @@GPX-TRACK-ROUTE@@ GPX file @@FULL-TEXT-ROUTE@@ Teljes szöveges file @@TEXT-ROUTE@@ Szöveges file @@OPEN-POPUP@@ Új ablak @@DISPLAY-STATISTICS@@ Statisztika mutatása @@ROUTER@@ ÚtvonaltervezÅ‘ @@TILES@@ Térképszeletek # # Visualiser specific translations # @@VISUALISER-TITLE@@ ÚtvonaltervezÅ‘ adatok vizuálisan @@INSTRUCTIONS-BOX@@ Útmutatók @@ROUTER-BOX@@ Routino ÚtvonaltervezÅ‘ @@NO-DATA-DISPLAYED@@ Nincs megjelenítendÅ‘ adat @@VISUALISER-FAILED@@ Sikertelen az adatok betöltése @@VISUALISER-NUM-JUNCTIONS@@ Feldolgozva # keresztezÅ‘dés @@VISUALISER-NUM-SUPER@@ Feldolgozva # szuper-pont/szegmens @@VISUALISER-NUM-WAYTYPE@@ Feldolgozva # út típus szegmens @@VISUALISER-NUM-SEGMENTS@@ Feldolgozva # szegmens @@VISUALISER-NUM-NODES@@ Feldolgozva # pont @@VISUALISER-NUM-TURNS@@ Feldolgozva # kanyarodási korlátozás @@JUNCTIONS-BUTTON@@ KeresztezÅ‘dések mutatása @@JUNCTIONS-3@@ három út talákozása @@JUNCTIONS-4@@ négy út találkozása @@JUNCTIONS-5@@ öt út találkozása @@JUNCTIONS-6@@ hat út találkozása @@JUNCTIONS-MORE@@ hét, vagy több út találkozása @@SUPER-BUTTON@@ Szuper szegmens mutatása @@WAYTYPE-BUTTON@@ Út típus szakaszok megjelenítese @@WAYTYPE-ONEWAY@@ Egyirányú szakaszok @@WAYTYPE-ROUNDABOUT@@ Körforgalmi szakaszok @@HIGHWAY-BUTTON@@ Út szakaszok megjelenítése @@TURNS-BUTTON@@ Kanyarodási korlátozások @@SPEED-BUTTON@@ Sebességhatárok @@LIMIT-CHANGE@@ Korlátozás változása @@LIMIT-NONE@@ Nincs korlátozás @@SPEED-LIMIT-80@@ 80 km/óra sebességkorlátozás @@WEIGHT-BUTTON@@ Súlykorlátozások @@WEIGHT-LIMIT-8@@ 8 tonnás súlykorlátozás @@HEIGHT-BUTTON@@ Magasságkorlátozások @@HEIGHT-LIMIT-4@@ 4 méter magasságkorlátozás @@WIDTH-BUTTON@@ Szélességkorlátozások @@WIDTH-LIMIT-3@@ 3 méter szélességkorlátozás @@LENGTH-BUTTON@@ Hosszúságkorlátozások @@LENGTH-LIMIT-9@@ 9 méter hosszúságkorlátozás @@PROPERTY-BUTTON@@ Út tulajdonságok megjelenítése @@ERROR-LOG-BUTTON@@ Hiba logok megmutatása $$ERROR-LOG-INFO$$ Lehetséges hibák fordultak elÅ‘ az adatok feldolgozása során $$ERROR-LOG-INFO$$ @@CLEAR-DATA-BUTTON@@ Adatok törlése # # Multi-line descriptive translations (router) # # # Multi-line descriptive translations (visualiser) # routino-3.2/web/translations/router.html 644 233 144 75617 13033512135 13765 0 Routino : @@ROUTER-TITLE@@
@@OPTION-TAB@@ @@RESULTS-TAB@@ @@DATA-TAB@@
@@ROUTINO-ROUTER@@ $$ROUTER-INFO$$
+ - @@LANGUAGE-BOX@@
+ - @@WAYPOINTS-BOX@@
@@WAYPOINT-LOOP-BUTTON@@:
@@WAYPOINT-REVERSE-BUTTON@@:
@@FIND-BOX@@
+ - @@TRANSPORT-TYPE-BOX@@
@@TRANSPORT-FOOT@@:
@@TRANSPORT-HORSE@@:
@@TRANSPORT-WHEELCHAIR@@:
@@TRANSPORT-BICYCLE@@:
@@TRANSPORT-MOPED@@:
@@TRANSPORT-MOTORCYCLE@@:
@@TRANSPORT-MOTORCAR@@:
@@TRANSPORT-GOODS@@:
@@TRANSPORT-HGV@@:
@@TRANSPORT-PSV@@:
+ - @@HIGHWAY-PREFERENCES-BOX@@
+ - @@SPEED-LIMITS-BOX@@
+ - @@PROPERTY-PREFERENCES-BOX@@
+ - @@OTHER-RESTRICTIONS-BOX@@
+ - @@HELP-BOX@@
$$ROUTER-OPTIONS-HELP$$
@@ROUTER@@: Routino | @@GEO-DATA@@: | @@TILES@@:
routino-3.2/web/translations/translations-body.xml 644 233 144 11416 12601526231 15742 0 <!-- %s = [shortest|quickest] --> <start text="%%output-html_start%%" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [heading] --> <node text="%%output-html_node%%" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [turn], 3rd %s = [heading] --> <rbnode text="%%output-html_rbnode%%" /> <!-- 1st %s = [roundabout], 2nd %s = [first|second|...], 3rd %s = [heading] --> <segment text="%%output-html_segment%%" /> <!-- 1st %s = street name --> <stop text="%%output-html_stop%%" /> <!-- 1st %s = [waypoint|junction] --> <total text="%%output-html_total%%" /> <subtotal text="%%output-html_subtotal%%" /> </output-html> <!-- GPX output --> <output-gpx> <waypoint type="waypt" string="%%output-gpx_waypoint_waypt%%" /> <!-- For the route waypoints --> <waypoint type="trip" string="%%output-gpx_waypoint_trip%%" /> <!-- For the other route points --> <desc text="%%output-gpx_desc%%" /> <!-- %s = [shortest|quickest] --> <name text="%%output-gpx_name%%" /> <!-- %s = [shortest|quickest] --> <step text="%%output-gpx_step%%" /> <!-- 1st %s = [turn], 2nd %s = street name --> <final text="%%output-gpx_final%%" /> </output-gpx> </language> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/web/translations/translations-head.xml�������������������������������������������������� 644 � 233 � 144 � 1527 12572574760 15711� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!-- ============================================================ An XML format file containing Routino output translations. Part of the Routino routing software. ============================================================ This file Copyright 2010-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ============================================================ --> <routino-translations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.routino.org/xml/routino-translations.xsd"> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/web/translations/translation.en.txt����������������������������������������������������� 644 � 233 � 144 � 34145 12601525717 15260� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # English language translation phrases # # # Router output XML definition # %%copyright_creator_string%% Creator %%copyright_source_string%% Source %%copyright_source_text%% Based on OpenStreetMap data from http://www.openstreetmap.org/ %%copyright_license_string%% License %%turn_-4%% Very sharp left %%turn_-3%% Sharp left %%turn_-2%% Left %%turn_-1%% Slight left %%turn_0%% Straight on %%turn_1%% Slight right %%turn_2%% Right %%turn_3%% Sharp right %%turn_4%% Very sharp right %%heading_-4%% South %%heading_-3%% South-West %%heading_-2%% West %%heading_-1%% North-West %%heading_0%% North %%heading_1%% North-East %%heading_2%% East %%heading_3%% South-East %%heading_4%% South %%ordinal_1%% First %%ordinal_2%% Second %%ordinal_3%% Third %%ordinal_4%% Fourth %%ordinal_5%% Fifth %%ordinal_6%% Sixth %%ordinal_7%% Seventh %%ordinal_8%% Eighth %%ordinal_9%% Ninth %%ordinal_10%% Tenth %%highway_motorway%% motorway %%highway_trunk%% trunk road %%highway_primary%% primary road %%highway_secondary%% secondary road %%highway_tertiary%% tertiary road %%highway_unclassified%% unclassified road %%highway_residential%% residential road %%highway_service%% service road %%highway_track%% track %%highway_cycleway%% cycleway %%highway_path%% path %%highway_steps%% steps %%highway_ferry%% ferry %%route_shortest%% Shortest %%route_quickest%% Quickest %%output-html_waypoint_waypoint%% Waypoint %%output-html_waypoint_junction%% Junction %%output-html_waypoint_roundabout%% Roundabout %%output-html_title%% %s Route %%output-html_start%% Start at %s, head %s %%output-html_node%% At %s, go %s heading %s %%output-html_rbnode%% Leave %s, take the %s exit heading %s %%output-html_segment%% Follow %s for %.3f km, %.1f min %%output-html_stop%% Stop at %s %%output-html_total%% Total %.1f km, %.0f minutes %%output-html_subtotal%% %.1f km, %.0f minutes %%output-gpx_waypoint_waypt%% WAYPT %%output-gpx_waypoint_trip%% TRIP %%output-gpx_desc%% %s route between 'start' and 'finish' waypoints %%output-gpx_name%% %s route %%output-gpx_step%% %s on '%s' for %.3f km, %.1f min %%output-gpx_final%% Total Journey %.1f km, %.0f minutes # # Router (and some shared) translations # @@LANGUAGE@@ English @@LANGUAGE-WEBPAGE@@ English language webpage @@ROUTER-TITLE@@ Route Planner for OpenStreetMap Data @@OPTION-TAB@@ Options @@OPTION-TAB-HELP@@ Set routing options @@RESULTS-TAB@@ Results @@RESULTS-TAB-HELP@@ See routing results @@DATA-TAB@@ Data @@DATA-TAB-HELP@@ View database information @@ROUTINO-ROUTER@@ Routino OpenStreetMap Router @@ROUTINO-WEBSITE@@ Routino Website @@DOCUMENTATION@@ Documentation @@LANGUAGE-BOX@@ Language @@WAYPOINTS-BOX@@ Waypoints @@TRANSPORT-TYPE-BOX@@ Transport Type @@HIGHWAY-PREFERENCES-BOX@@ Highway Preferences @@SPEED-LIMITS-BOX@@ Speed Limits @@PROPERTY-PREFERENCES-BOX@@ Property Preferences @@OTHER-RESTRICTIONS-BOX@@ Other Restrictions @@FIND-BOX@@ Find @@LINKS-BOX@@ Links @@HELP-BOX@@ Help @@STATUS-BOX@@ Status @@SHORTEST-ROUTE@@ Shortest Route @@QUICKEST-ROUTE@@ Quickest Route @@STATISTICS-BOX@@ Routino Statistics @@VISUALISER-BOX@@ Routino Visualiser @@WAYPOINT-POSITION@@ Waypoint XXX Position @@WAYPOINT-LONGITUDE@@ Waypoint XXX Longitude @@WAYPOINT-LATITUDE@@ Waypoint XXX Latitude @@WAYPOINT-LOCATION@@ Waypoint XXX Location @@WAYPOINT-SEARCH@@ Search for location @@WAYPOINT-GET@@ Get current location @@WAYPOINT-CENTRE1@@ Centre map on this waypoint @@WAYPOINT-UP@@ Move this waypoint up @@WAYPOINT-ADD@@ Add waypoint after this one @@WAYPOINT-COORDS@@ Coordinates for location @@WAYPOINT-HOME@@ Toggle as home location @@WAYPOINT-CENTRE2@@ Centre this waypoint on map @@WAYPOINT-DOWN@@ Move this waypoint down @@WAYPOINT-REMOVE@@ Remove this waypoint @@WAYPOINT-REVERSE@@ Reverse order of waypoints @@WAYPOINT-REVERSE-BUTTON@@ Reverse order @@WAYPOINT-LOOP@@ Add a new waypoint to make a loop @@WAYPOINT-LOOP-BUTTON@@ Close loop @@TRANSPORT-FOOT@@ Foot @@TRANSPORT-HORSE@@ Horse @@TRANSPORT-WHEELCHAIR@@ Wheelchair @@TRANSPORT-BICYCLE@@ Bicycle @@TRANSPORT-MOPED@@ Moped @@TRANSPORT-MOTORCYCLE@@ Motorcycle @@TRANSPORT-MOTORCAR@@ Motorcar @@TRANSPORT-GOODS@@ Goods @@TRANSPORT-HGV@@ HGV @@TRANSPORT-PSV@@ PSV @@HIGHWAY-MOTORWAY@@ Motorway @@HIGHWAY-TRUNK@@ Trunk @@HIGHWAY-PRIMARY@@ Primary @@HIGHWAY-SECONDARY@@ Secondary @@HIGHWAY-TERTIARY@@ Tertiary @@HIGHWAY-UNCLASSIFIED@@ Unclassified @@HIGHWAY-RESIDENTIAL@@ Residential @@HIGHWAY-SERVICE@@ Service @@HIGHWAY-TRACK@@ Track @@HIGHWAY-CYCLEWAY@@ Cycleway @@HIGHWAY-PATH@@ Path @@HIGHWAY-STEPS@@ Steps @@HIGHWAY-FERRY@@ Ferry @@PROPERTY-PAVED@@ Paved @@PROPERTY-MULTILANE@@ Multiple Lanes @@PROPERTY-BRIDGE@@ Bridge @@PROPERTY-TUNNEL@@ Tunnel @@PROPERTY-WALKINGROUTE@@ Walking Route @@PROPERTY-BICYCLEROUTE@@ Bicycle Route @@RESTRICT-ONEWAY@@ Obey oneway streets @@RESTRICT-TURNS@@ Obey turn restrictions @@RESTRICT-WEIGHT@@ Weight @@RESTRICT-HEIGHT@@ Height @@RESTRICT-WIDTH@@ Width @@RESTRICT-LENGTH@@ Length @@FIND-SHORTEST-ROUTE@@ Find shortest route @@FIND-QUICKEST-ROUTE@@ Find quickest route @@MAP-VIEW-LINK@@ Link to this map view @@EDIT-OSM-DATA@@ Edit this OSM data @@ROUTER-NOT-RUN@@ Router not run @@ROUTER-RUNNING@@ Router running... @@ROUTER-COMPLETED@@ Routing completed @@ROUTER-ERROR@@ Router error @@ROUTER-FAILED@@ Router failed to run @@VIEW-DETAILS@@ View Details @@NO-INFORMATION@@ No Information @@HTML-ROUTE@@ HTML directions @@GPX-TRACK-ROUTE@@ GPX track file @@GPX-ROUTE@@ GPX route file @@FULL-TEXT-ROUTE@@ Full text file @@TEXT-ROUTE@@ Text file @@OPEN-POPUP@@ Open Popup @@DISPLAY-STATISTICS@@ Display data statistics @@JAVASCRIPT-REQUIRED@@ Javascript is <em>required</em> to use this web page because of the interactive map. @@ROUTER@@ Router @@GEO-DATA@@ Geo Data @@TILES@@ Tiles # # Visualiser specific translations # @@VISUALISER-TITLE@@ Data Visualiser for Routing Data @@INSTRUCTIONS-BOX@@ Instructions @@ROUTER-BOX@@ Routino Router @@NO-DATA-DISPLAYED@@ No data displayed @@VISUALISER-FAILED@@ Failed to get visualiser data! @@VISUALISER-NUM-JUNCTIONS@@ Processed # junctions @@VISUALISER-NUM-SUPER@@ Processed # super-nodes/segments @@VISUALISER-NUM-WAYTYPE@@ Processed # way type segments @@VISUALISER-NUM-SEGMENTS@@ Processed # segments @@VISUALISER-NUM-NODES@@ Processed # nodes @@VISUALISER-NUM-TURNS@@ Processed # turn restrictions @@VISUALISER-NUM-LIMITS@@ Processed # limit changes @@VISUALISER-NUM-ERRORS@@ Processed # error logs @@JUNCTIONS-BUTTON@@ Display Junctions $$JUNCTIONS-INFO$$ Each node that is a dead-end, a junction of two highways of different types (or different properties) or a junction where more than two segments join are shown colour-coded. $$JUNCTIONS-INFO$$ @@JUNCTIONS-1@@ only one highway - a dead-end. @@JUNCTIONS-2@@ two highways of different types meet. @@JUNCTIONS-3@@ three highways meet. @@JUNCTIONS-4@@ four highways meet. @@JUNCTIONS-5@@ five highways meet. @@JUNCTIONS-6@@ six highways meet. @@JUNCTIONS-MORE@@ seven (or more) highways meet. @@SUPER-BUTTON@@ Display Super Segments $$SUPER-INFO$$ Each super-node and the associated super-segments are shown (see algorithm page for description). $$SUPER-INFO$$ @@WAYTYPE-BUTTON@@ Display Way Type Segments $$WAYTYPE-INFO$$ Each highway segment of special types (one-way, cycle-both-ways and roundabout) are shown. For one-way segments a coloured triangle indicates the allowed direction. The colours of the triangles depend on the bearing of the highway segment. $$WAYTYPE-INFO$$ @@WAYTYPE-ONEWAY@@ One-way segments @@WAYTYPE-CYCLE-BOTH-WAYS@@ Cycle-both-way segments @@WAYTYPE-ROUNDABOUT@@ Roundabout segments @@HIGHWAY-BUTTON@@ Display Highway Segments $$HIGHWAY-INFO$$ Each segment of the chosen type of highway is drawn. $$HIGHWAY-INFO$$ @@TRANSPORT-BUTTON@@ Display Transport Segments $$TRANSPORT-INFO$$ Each segment allowed for the chosen type of transport is drawn. $$TRANSPORT-INFO$$ @@BARRIER-BUTTON@@ Display Barrier Nodes $$BARRIER-INFO$$ Each barrier blocking the chosen type of transport is drawn. $$BARRIER-INFO$$ @@TURNS-BUTTON@@ Display Turn Restrictions $$TURNS-INFO$$ Each turn restrictions is shown with a line indicating the disallowed turn. $$TURNS-INFO$$ @@SPEED-BUTTON@@ Display Speed Limits $$SPEED-INFO$$ Each node that joins segments with different speed limits is shown along with the speed limit on relevant segments. $$SPEED-INFO$$ @@LIMIT-CHANGE@@ Change of limit @@LIMIT-NONE@@ No specified limit @@SPEED-LIMIT-80@@ 80 km/hour speed limit @@WEIGHT-BUTTON@@ Display Weight Limits $$WEIGHT-INFO$$ Each node that joins segments with different weight limits is shown along with the weight limit on relevant segments. $$WEIGHT-INFO$$ @@WEIGHT-LIMIT-8@@ 8.0 tonnes weight limit @@HEIGHT-BUTTON@@ Display Height Limits $$HEIGHT-INFO$$ Each node that joins segments with different height limits is shown along with the height limit on relevant segments. $$HEIGHT-INFO$$ @@HEIGHT-LIMIT-4@@ 4.0 m height limit @@WIDTH-BUTTON@@ Display Width Limits $$WIDTH-INFO$$ Each node that joins segments with different width limits is shown along with the width limit on relevant segments. $$WIDTH-INFO$$ @@WIDTH-LIMIT-3@@ 3.0 m width limit @@LENGTH-BUTTON@@ Display Length Limits $$LENGTH-INFO$$ Each node that joins segments with different length limits is shown along with the length limit on relevant segments. $$LENGTH-INFO$$ @@LENGTH-LIMIT-9@@ 9.0 m length limit @@PROPERTY-BUTTON@@ Display Highway Properties $$PROPERTY-INFO$$ Each segment of the highways with a particular property is drawn. $$PROPERTY-INFO$$ @@ERROR-LOG-BUTTON@@ Display Error Logs $$ERROR-LOG-INFO$$ Potential problems found by Routino when processing the input data. $$ERROR-LOG-INFO$$ @@CLEAR-DATA-BUTTON@@ Clear data # # Multi-line descriptive translations (router) # $$ROUTER-INFO$$ This web page allows routing within the data collected by OpenStreetMap. Select start and end points (click on the marker icons below), select routing preferences then find a route. $$ROUTER-INFO$$ $$ROUTER-OPTIONS-HELP$$ <b>Quick Start</b> <br> Click on marker icons (above) to place them on the map (right). Then drag them to the correct position. Zooming the map before placing the markers is probably easiest. Alternatively type the latitude and longitude into the boxes above. <p> Select the transport type, allowed highway types, speed limits, highway properties and other restrictions from the options above. Select "Shortest" or "Quickest" to calculate the route and display it on the map. <p> <b>Waypoints</b> <br> Clicking on the marker icons will toggle the display of them on the map. When a route is calculated it will visit (as close as possible for the selected transport type) each of the waypoints that have markers on the map in the order given. <p> <b>Transport Type</b> <br> Selecting a transport type will restrict the chosen route to those on which it is allowed and set default values for the other parameters. <p> <b>Highway Preferences</b> <br> The highway preference is selected as a percentage and routes are chosen that try to follow the preferred highways. For example if a "Primary" road is given a "110%" preference and a "Secondary" road is given a "100%" preference then it means that a route on a Primary road can be up to 10% longer than on a secondary road and still be selected. <p> <b>Speed Limits</b> <br> The speed limits chosen here for the different types of highway apply if the highway has no other speed limit marked or it is higher than the chosen one. <p> <b>Property Preferences</b> <br> The property preference is selected as a percentage and routes are chosen that try to follow highways with the preferred property. For example if a "Paved" highway is given a "75%" preference then it means that an unpaved highway is automatically given a "25%" preference so that a route on a paved highway can be 3 times the length of an unpaved one and still be selected. <p> <b>Other Restrictions</b> <br> These allow a route to be found that avoids marked limits on weight, height, width or length. It is also possible to ignore one-way restrictions (e.g. if walking). $$ROUTER-OPTIONS-HELP$$ $$ROUTER-RESULTS-HELP$$ <b>Quick Start</b> <br> After calculating a route you can download the GPX file or plain text route description (summary or detailed version). Also you can view the route description and zoom in to selected parts. <p> <b>Problem Solving</b> <br> If the router completes with an error then the most likely cause is that it is not possible to find a route between the selected points. Moving one or more markers or changing the routing options should allow a route to be found. <p> <b>Output Formats</b> <br> <dl> <dt>HTML instructions <dd>A description of the route to take with directions at each important junction. <dt>GPX track file <dd>The same information that is displayed on the map with points for every node and lines for every segment. <dt>GPX route file <dd>The same information that is displayed in text for the route with a waypoint for each important junction in the route. <dt>Full text file <dd>A list of all of the nodes visited as well as the distance between them and the cumulative distance for each step of the route. <dt>Text file <dd>The same information that is displayed in text for the route. </dl> $$ROUTER-RESULTS-HELP$$ $$ROUTER-VISUALISER-INFO$$ To see Routino's view of the data there is a data visualiser that allows displaying of the underlying data in various ways. $$ROUTER-VISUALISER-INFO$$ # # Multi-line descriptive translations (visualiser) # $$VISUALISER-INFO$$ This web page allows visualisation of the data that Routino uses for routing. Only data relevant for routing is displayed and some will therefore be excluded. $$VISUALISER-INFO$$ $$VISUALISER-INSTRUCTIONS$$ Zoom in and then use the buttons below to download the data. The server will only return data if the selected area is small enough. $$VISUALISER-INSTRUCTIONS$$ $$VISUALISER-HELP$$ <b>Quick Start</b> <br> Zoom to an area and select one of the buttons to display that type of data. <br> More data options can be found by expanding the details below each button. <p> <b>Data Failure</b> <br> If the area selected is too large (depends on the data type) then the status will say "Failed to get visualiser data" - zoom in and try again. $$VISUALISER-HELP$$ $$VISUALISER-ROUTER-INFO$$ To perform routing on the map use the link below. $$VISUALISER-ROUTER-INFO$$ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/web/translations/translate.pl����������������������������������������������������������� 755 � 233 � 144 � 25623 12564147067 14124� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl # # Routino translation replacement Perl script # # Part of the Routino routing software. # # This file Copyright 2014-2015 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # use strict; # Constants my @translation_files=(<translation.*.txt>); my $xml_output_file="../../xml/routino-translations.xml"; my $html_output_dir="../www/routino"; my @html_template_files=(<*.html>); my %languages=(); my %translations=(); # Sort so that English is first @translation_files=sort {if($a eq "translation.en.txt"){return -1;} if($b eq "translation.en.txt"){return 1;} return $a <=> $b;} @translation_files; # Read in the translations foreach my $translation_file (@translation_files) { $translation_file =~ m%translation.([^.]+).txt%; # Add to list of languages my $language=$1; if(! defined $languages{$language}) { $languages{$language}=1; $translations{$language}={}; $translations{$language}->{codes}={}; $translations{$language}->{html}=0; $translations{$language}->{xml}=0; } # Process the file open(FILE,"<$translation_file"); while(<FILE>) { s%\r*\n%%; next if(m%^#%); next if(m%^$%); # Single line HTML entries if(m%\@\@%) { my($code,$text)=split("\t"); if(defined $translations{$language}->{codes}->{$code}) { print STDERR "Language: $language DUPLICATED codeword '$code'\n"; } else { $translations{$language}->{html}++; $translations{$language}->{codes}->{$code}={}; $translations{$language}->{codes}->{$code}->{text}=$text; $translations{$language}->{codes}->{$code}->{usedX}=0; $translations{$language}->{codes}->{$code}->{usedR}=0; $translations{$language}->{codes}->{$code}->{usedV}=0; } } # Multi-line HTML entries if(m%(\$\$[^\$]+\$\$)%) { my($code,$text)=($1,""); while(<FILE>) { last if(m%\$\$%); $text=$text.$_; } $text =~ s%\r*\n$%%; if(defined $translations{$language}->{codes}->{$code}) { print STDERR "Language: $language DUPLICATED codeword '$code'\n"; } else { $translations{$language}->{html}++; $translations{$language}->{codes}->{$code}={}; $translations{$language}->{codes}->{$code}->{text}=$text; $translations{$language}->{codes}->{$code}->{usedX}=0; $translations{$language}->{codes}->{$code}->{usedR}=0; $translations{$language}->{codes}->{$code}->{usedV}=0; } } # Single line XML entries if(m%\%\%%) { my($code,$text)=split("\t"); if(defined $translations{$language}->{codes}->{$code}) { print STDERR "Language: $language DUPLICATED codeword '$code'\n"; } else { $translations{$language}->{xml}++; $translations{$language}->{codes}->{$code}={}; $translations{$language}->{codes}->{$code}->{text}=$text; $translations{$language}->{codes}->{$code}->{usedX}=0; $translations{$language}->{codes}->{$code}->{usedR}=0; $translations{$language}->{codes}->{$code}->{usedV}=0; } my($n_strings_en)=$translations{en}->{codes}->{$code}->{text} =~ s/%s/%s/g; my($n_strings) =$text =~ s/%s/%s/g; if($n_strings != $n_strings_en) { print STDERR "Language: $language WRONG number of '%s' in text '$text' ($translations{en}->{codes}->{$code}->{text})\n"; } } } close(FILE); } # Sort out the languages my @languages=(); push(@languages,"en"); foreach my $language (sort (keys %languages)) { push(@languages,$language) if($language ne "en"); } # Create the HTML files foreach my $html_template_file (@html_template_files) { my $usedtype=""; $usedtype="R" if($html_template_file =~ m%router%); $usedtype="V" if($html_template_file =~ m%visualiser%); foreach my $language (@languages) { next if(!$translations{$language}->{html}); print "Language: $language File: $html_template_file\n"; my $language_meta=0; my $language_meta_string=""; open(HTML_IN ,"<$html_template_file"); open(HTML_OUT,">$html_output_dir/$html_template_file.$language"); while(<HTML_IN>) { my $line=$_; # Language selection - special handling if($line =~ m%\*\*LANGUAGES-META\*\*%) { $language_meta=1-$language_meta; if($language_meta==0) { foreach my $language2 (@languages) { my $LANGUAGE2=$language2; $LANGUAGE2 =~ tr%a-z%A-Z%; $line=$language_meta_string; if($language eq $language2) { $line =~ s%~~CHECKED~~%checked%g; } else { $line =~ s%~~CHECKED~~%%g; } $line =~ s%~~lang~~%$language2%g; $line =~ s%~~LANG~~%$LANGUAGE2%g; if(!$translations{$language2}->{html}) { $line =~ s%<a.+</a>%%; } if(!$translations{$language2}->{xml}) { $line =~ s%<input .+>%%; } foreach my $code (keys %{$translations{$language2}->{codes}}) { if($line =~ s%$code%$translations{$language2}->{codes}->{$code}->{text}%g) {$translations{$language2}->{codes}->{$code}->{"used$usedtype"} = 1;} } if($line =~ m%((\@\@|\$\$|\*\*|\~\~)[^\@\$*~]+(\@\@|\$\$|\*\*|\~\~))%) { print STDERR " Unmatched codeword '$1' in line: $line"; } # Remove un-needed spaces $line =~ s%[\t ]+% %g; $line =~ s%\n %\n%g; $line =~ s%^ %%g; print HTML_OUT $line; } } next; } if($language_meta) { $language_meta_string.=$line; next; } # Replace with translated phrases foreach my $code (keys %{$translations{$language}->{codes}}) { if($line =~ s%\Q$code\E%$translations{$language}->{codes}->{$code}->{text}%g) {$translations{$language}->{codes}->{$code}->{"used$usedtype"} = 1;} } # Replace what is left with English phrases foreach my $code (keys %{$translations{$languages[0]}->{codes}}) { $line =~ s%\Q$code\E%$translations{$languages[0]}->{codes}->{$code}->{text}%g; } if($line =~ m%((\@\@|\$\$|\*\*|\~\~)[^\@\$*~]+(\@\@|\$\$|\*\*|\~\~))%) { print STDERR " Unmatched codeword '$1' in line: $line"; } # Remove un-needed spaces $line =~ s%[\t ]+% %g; $line =~ s%\n %\n%g; $line =~ s%^ %%g; print HTML_OUT $line; } close(HTML_IN); close(HTML_OUT); } } # Create the XML file open(XML_OUT,">$xml_output_file"); open(XML_IN ,"<translations-head.xml"); while(<XML_IN>) { print XML_OUT; } close(XML_IN); foreach my $language (@languages) { next if(!$translations{$language}->{xml}); print "Language: $language File: translations.xml\n"; open(XML_IN ,"<translations-body.xml"); while(<XML_IN>) { my $line=$_; $line =~ s%~~lang~~%$language%g; $line =~ s%~~language~~%$translations{$language}->{codes}->{'@@LANGUAGE@@'}->{text}%g; # Replace with translated phrases foreach my $code (keys %{$translations{$language}->{codes}}) { if($line =~ s%$code%$translations{$language}->{codes}->{$code}->{text}%g) {$translations{$language}->{codes}->{$code}->{usedX} = 1;} } # Replace what is left with a note about missing translations if($line =~ m%\%\%%) { foreach my $code (keys %{$translations{$languages[0]}->{codes}}) { $line =~ s%$code%$translations{$languages[0]}->{codes}->{$code}->{text}%g; } $line =~ s%<%<!-- TRANSLATION REQUIRED: %; $line =~ s%>% -->%; if($line =~ m%((\%\%|\~\~)[^\%~]+(\%\%|\~\~))%) { print STDERR " Unmatched codeword '$1' in line: $line"; } } print XML_OUT $line; } close(XML_IN); } open(XML_IN ,"<translations-tail.xml"); while(<XML_IN>) { print XML_OUT; } close(XML_IN); close(XML_OUT); # Check the languages and usage my %usedX=(); my %usedR=(); my %usedV=(); foreach my $language (@languages) { $usedX{$language}=0; $usedR{$language}=0; $usedV{$language}=0; foreach my $code (keys %{$translations{$language}->{codes}}) { $usedX{$language}+=$translations{$language}->{codes}->{$code}->{usedX}; $usedR{$language}+=$translations{$language}->{codes}->{$code}->{usedR}; $usedV{$language}+=$translations{$language}->{codes}->{$code}->{usedV}; if(! $translations{$language}->{codes}->{$code}->{usedX} && ! $translations{$language}->{codes}->{$code}->{usedR} && ! $translations{$language}->{codes}->{$code}->{usedV}) { print STDERR "Language: $language UNUSED codeword: $code\n"; } } } # Print the translation coverage print "\n"; print "Translation Coverage\n"; print "====================\n"; print "\n"; print " Number Percentage Complete\n"; print "Language XML HTML XML router visualiser\n"; print "-------- --- ---- --- ------ ----------\n"; foreach my $language (@languages) { printf("%-6s %3d %3d %4.0f%% %4.0f%% %4.0f%%\n", $language, $translations{$language}->{xml}, $translations{$language}->{html}, 100.0*$usedX{$language}/$usedX{$languages[0]}, 100.0*$usedR{$language}/$usedR{$languages[0]}, 100.0*$usedV{$language}/$usedV{$languages[0]}) } �������������������������������������������������������������������������������������������������������������routino-3.2/web/translations/translations-tail.xml�������������������������������������������������� 644 � 233 � 144 � 30 12314102416 15640� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������</routino-translations> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/web/translations/translation.pl.txt����������������������������������������������������� 644 � 233 � 144 � 13734 12770263507 15275� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Polish language translation phrases # # # Router output XML definition # %%copyright_creator_string%% Twórca %%copyright_source_string%% Źródło %%copyright_source_text%% Oparte na danych OpenStreetMap ze strony http://www.openstreetmap.org/ %%copyright_license_string%% Licencja %%turn_-4%% Bardzo ostro w lewo %%turn_-3%% Ostro w lewo %%turn_-2%% W lewo %%turn_-1%% Lekko w lewo %%turn_0%% Prosto %%turn_1%% Lekko w prawo %%turn_2%% W prawo %%turn_3%% Ostro w prawo %%turn_4%% Bardzo ostro w prawo %%heading_-4%% Na południe %%heading_-3%% Na południowy zachód %%heading_-2%% Na zachód %%heading_-1%% Na północny zachód %%heading_0%% Na północ %%heading_1%% Na północny wschód %%heading_2%% Na wschód %%heading_3%% Na południowy wschód %%heading_4%% Na południe %%ordinal_1%% Pierwszy %%ordinal_2%% Drugi %%ordinal_3%% Trzeci %%ordinal_4%% Czwarty %%ordinal_5%% Piąty %%ordinal_6%% Szósty %%ordinal_7%% Siódmy %%ordinal_8%% Ósmy %%ordinal_9%% Dziewiąty %%ordinal_10%% Dziesiąty %%highway_motorway%% Autostrada %%highway_trunk%% Droga ekspresowa %%highway_primary%% Droga krajowa %%highway_secondary%% Droga powiatowa %%highway_tertiary%% Droga lokalna %%highway_unclassified%% Droga nieznanego typu %%highway_residential%% Droga osiedlowa %%highway_service%% Droga dojazdowa %%highway_track%% Droga polna %%highway_cycleway%% Droga rowerowa %%highway_path%% Ścieżka %%highway_steps%% Pieszo %%highway_ferry%% Prom %%route_shortest%% Najkrótsza %%route_quickest%% Najszybsza %%output-html_waypoint_waypoint%% Punkt %%output-html_waypoint_junction%% Połączenie %%output-html_waypoint_roundabout%% Rondo %%output-html_title%% %s Trasa %%output-html_start%% Start %s kieruj się na %s %%output-html_segment%% Podążaj %s przez %.3f km, %.1f min. %%output-html_stop%% Stop Na %s %%output-html_total%% Całkowity %.1f km, %.0f min. %%output-html_subtotal%% %.1f km, %.0f min. %%output-gpx_waypoint_waypt%% Punkt %%output-gpx_waypoint_trip%% Podróż %%output-gpx_desc%% %s trasa pomiędzy 'start' a 'koniec' %%output-gpx_name%% %s trasa %%output-gpx_step%% %s na %s przez %.3f km, %.1f min. %%output-gpx_final%% Całkowita podróż %.1f km, %.0f min. # # Router (and some shared) translations # @@LANGUAGE@@ Polski @@LANGUAGE-WEBPAGE@@ Polski webpage @@ROUTER-TITLE@@ Planowanie trasy dla Danych OpenStreetMap @@OPTION-TAB@@ Opcje @@OPTION-TAB-HELP@@ Ustaw punkty trasy @@RESULTS-TAB@@ Wyniki @@RESULTS-TAB-HELP@@ Zobacz wyniki @@DATA-TAB@@ Dane @@DATA-TAB-HELP@@ Zobacz informacje bazy danych @@ROUTINO-ROUTER@@ Routino OpenStreetMap Planowanie Trasy @@ROUTINO-WEBSITE@@ Strona Routino @@DOCUMENTATION@@ Dokumentacja @@LANGUAGE-BOX@@ Język @@WAYPOINTS-BOX@@ Punkty @@TRANSPORT-TYPE-BOX@@ Typ transportu @@HIGHWAY-PREFERENCES-BOX@@ Preferowanie autostrad @@SPEED-LIMITS-BOX@@ Ograniczenia prędkości @@PROPERTY-PREFERENCES-BOX@@ Ustawienia zmiennych @@OTHER-RESTRICTIONS-BOX@@ Inne ograniczenia @@FIND-BOX@@ Znajdź @@LINKS-BOX@@ Połączenia @@HELP-BOX@@ Pomoc @@STATUS-BOX@@ Status @@SHORTEST-ROUTE@@ Najkrótsza trasa @@QUICKEST-ROUTE@@ Najszybsza trasa @@STATISTICS-BOX@@ Statystyki Routino @@VISUALISER-BOX@@ Wizualizer Routino @@WAYPOINT-SEARCH@@ Znajdź miejsce @@WAYPOINT-GET@@ Pobierz aktualna lokalizację @@WAYPOINT-CENTRE1@@ Wycentruj mapę na tym punkcie @@WAYPOINT-UP@@ Przenieś ten punkt wyżej @@WAYPOINT-ADD@@ Dodaj punkt po tym @@WAYPOINT-COORDS@@ Współrzędne dla lokalizacji @@WAYPOINT-HOME@@ Współrzędne lokalizacji @@WAYPOINT-CENTRE2@@ Wyśrodkuj ten punkt na mapie @@TRANSPORT-FOOT@@ Pieszo @@TRANSPORT-HORSE@@ Konno @@TRANSPORT-WHEELCHAIR@@ Wózek inwalidzki @@TRANSPORT-BICYCLE@@ Rower @@TRANSPORT-MOPED@@ Moped @@TRANSPORT-MOTORCYCLE@@ Motocykl @@TRANSPORT-MOTORCAR@@ Samochód @@TRANSPORT-HGV@@ Pojazd ciężarowy @@TRANSPORT-PSV@@ Pojazd użyteczności publicznej @@HIGHWAY-MOTORWAY@@ Autostrada @@HIGHWAY-PRIMARY@@ Droga krajowa @@HIGHWAY-SECONDARY@@ Droga wojewódzka @@HIGHWAY-TERTIARY@@ Droga powiatowa @@HIGHWAY-UNCLASSIFIED@@ Niesklasyfikowana @@HIGHWAY-RESIDENTIAL@@ W obszarze zamieszkania @@HIGHWAY-SERVICE@@ Dojazdowa @@HIGHWAY-CYCLEWAY@@ Rowerowa @@HIGHWAY-PATH@@ Ścieżka @@HIGHWAY-FERRY@@ Przeprawa @@PROPERTY-MULTILANE@@ Wiele pasów @@PROPERTY-BRIDGE@@ Most @@PROPERTY-TUNNEL@@ Tunel @@PROPERTY-WALKINGROUTE@@ Trasa piesza @@PROPERTY-BICYCLEROUTE@@ Trasa rowerowa @@RESTRICT-ONEWAY@@ Respektuj ulice jednokierunkowe @@RESTRICT-TURNS@@ Respektuj ograniczenia skrętu @@RESTRICT-WEIGHT@@ Waga @@RESTRICT-HEIGHT@@ Wysokość @@RESTRICT-WIDTH@@ Szerokość @@RESTRICT-LENGTH@@ Długość @@FIND-SHORTEST-ROUTE@@ Znajdź najkrótsza trasę @@FIND-QUICKEST-ROUTE@@ Znajdź najdłuższą trasę @@ROUTER-NOT-RUN@@ Nie uruchomiono wyznaczania trasy @@ROUTER-RUNNING@@ Wyznaczanie trasy w trakcie... @@ROUTER-COMPLETED@@ Trasa wyznaczona @@ROUTER-ERROR@@ Błąd wyznaczania trasy @@ROUTER-FAILED@@ Błąd uruchomienia wyznaczania trasy @@VIEW-DETAILS@@ Zobacz szczegóły @@NO-INFORMATION@@ Brak informacji @@GPX-TRACK-ROUTE@@ Plik trasy w formacie GPX @@GPX-ROUTE@@ Plik nawigacji w formacie GPX @@TEXT-ROUTE@@ Plik tekstowy @@TILES@@ Kafelki # # Visualiser specific translations # @@INSTRUCTIONS-BOX@@ Instrukcje @@NO-DATA-DISPLAYED@@ Brak danych do wyświetlenia @@TURNS-BUTTON@@ Wyświetlaj zakazy skrętu @@SPEED-BUTTON@@ Wyświetlaj ograniczenia prędkości @@SPEED-LIMIT-80@@ Ograniczenie prędkości do 80 km/h @@WEIGHT-BUTTON@@ Wyświetlaj ograniczenia ciężaru @@WEIGHT-LIMIT-8@@ Ograniczenie ciężaru do 8.0 ton @@HEIGHT-BUTTON@@ Wyświetlaj ograniczenia wysokości @@HEIGHT-LIMIT-4@@ Ograniczenie wysokości do 4.0 m @@WIDTH-BUTTON@@ Wyświetlaj ograniczenia szerokości @@WIDTH-LIMIT-3@@ Ograniczenie szerokości do 3.0 m @@LENGTH-BUTTON@@ Wyświetlaj ograniczenia długości @@LENGTH-LIMIT-9@@ Ograniczenie długości do 9.0 m @@CLEAR-DATA-BUTTON@@ Wyczyść # # Multi-line descriptive translations (router) # # # Multi-line descriptive translations (visualiser) # $$VISUALISER-ROUTER-INFO$$ Aby wyznaczyć trasę na mapie użyj linku poniżej $$VISUALISER-ROUTER-INFO$$ ������������������������������������routino-3.2/web/translations/visualiser.html�������������������������������������������������������� 644 � 233 � 144 � 53565 12603023054 14630� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="keywords" content="openstreetmap routino verifier"> <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no"> <title>Routino : @@VISUALISER-TITLE@@
Visualiser Router Data
@@VISUALISER-BOX@@ $$VISUALISER-INFO$$
+ - @@LANGUAGE-BOX@@
@@INSTRUCTIONS-BOX@@ $$VISUALISER-INSTRUCTIONS$$
@@STATUS-BOX@@
@@NO-DATA-DISPLAYED@@
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ - @@HELP-BOX@@
$$VISUALISER-HELP$$
@@ROUTER@@: Routino | @@GEO-DATA@@: | @@TILES@@:
routino-3.2/web/bin/ 40755 233 144 0 13061252060 7531 5routino-3.2/web/INSTALL.txt 777 233 144 0 12031126065 13411 2../doc/INSTALL.txtroutino-3.2/web/results/ 40755 233 144 0 12216114770 10470 5routino-3.2/web/data/ 40755 233 144 0 13061252060 7672 5routino-3.2/web/data/create.sh 755 233 144 637 12764327167 11522 0#!/bin/sh -x # This script can download from the GeoFabrik server. # EDIT THIS to set the names of the files to download from GeoFabrik. files="europe/great-britain-latest.osm.bz2 europe/ireland-and-northern-ireland-latest.osm.bz2" server="download.geofabrik.de" # Download the files for file in $files; do wget -N http://$server/$file done # Process the data ../bin/planetsplitter --errorlog *.osm.bz2 routino-3.2/web/Makefile 644 233 144 14607 12603024144 10466 0# web directory Makefile # # Part of the Routino routing software. # # This file Copyright 2010-2015 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # All configuration is in the top-level Makefile.conf include ../Makefile.conf # Web file paths and other paths WEBBINDIR=bin WEBDATADIR=data WEBTRANSDIR=translations WEBWWWDIR=www/routino WEBICONDIR=www/routino/icons WEBDOCDIR=www/routino/documentation XMLDIR=../xml DOCDIR=../doc SRCDIR=../src # Files to install STANDARD_XML_FILES=profiles.xml \ translations.xml \ tagging.xml SPECIAL_XML_FILES=tagging-drive.xml \ tagging-ride.xml \ tagging-walk.xml PROFILE_FILES=profiles.pl \ profiles.js TRANS_FILES=$(wildcard $(WEBTRANSDIR)/translation.*.txt) DOC_FILES=$(notdir $(wildcard $(DOCDIR)/html/*.html)) $(notdir $(wildcard $(DOCDIR)/html/*.css)) EXE_FILES=planetsplitter$(.EXE) planetsplitter-slim$(.EXE) router$(.EXE) router-slim$(.EXE) filedumperx$(.EXE) filedumper$(.EXE) filedumper-slim$(.EXE) ######## all: all-bin all-data all-doc all-profiles all-translations all-icons #### all-bin: all-exe @[ -d $(WEBBINDIR) ] || mkdir -p $(WEBBINDIR) @for file in $(EXE_FILES); do \ if [ -f $(SRCDIR)/$$file -a ! -f $(WEBBINDIR)/$$file ] || [ $(SRCDIR)/$$file -nt $(WEBBINDIR)/$$file ]; then \ echo cp $(SRCDIR)/$$file $(WEBBINDIR) ;\ cp -f $(SRCDIR)/$$file $(WEBBINDIR) ;\ fi ;\ done #### all-data: all-xml @[ -d $(WEBDATADIR) ] || mkdir -p $(WEBDATADIR) @for file in $(STANDARD_XML_FILES); do \ if [ ! -f $(WEBDATADIR)/$$file ] || [ $(XMLDIR)/routino-$$file -nt $(WEBDATADIR)/$$file ]; then \ echo cp $(XMLDIR)/routino-$$file $(WEBDATADIR)/$$file ;\ cp -f $(XMLDIR)/routino-$$file $(WEBDATADIR)/$$file ;\ fi ;\ done @for file in $(SPECIAL_XML_FILES); do \ if [ ! -f $(WEBDATADIR)/$$file ] || [ $(XMLDIR)/$$file -nt $(WEBDATADIR)/$$file ]; then \ echo cp $(XMLDIR)/$$file $(WEBDATADIR)/$$file ;\ cp -f $(XMLDIR)/$$file $(WEBDATADIR)/$$file ;\ fi ;\ done #### all-doc: @[ -d $(WEBDOCDIR) ] || mkdir -p $(WEBDOCDIR) @for file in $(DOC_FILES); do \ if [ ! -f $(WEBDOCDIR)/$$file ] || [ $(DOCDIR)/html/$$file -nt $(WEBDOCDIR)/$$file ]; then \ echo cp $(DOCDIR)/html/$$file $(WEBDOCDIR) ;\ cp -f $(DOCDIR)/html/$$file $(WEBDOCDIR) ;\ fi ;\ done #### all-profiles: all-bin all-data @if [ ! -f $(WEBWWWDIR)/profiles.js ] || [ ! -f $(WEBWWWDIR)/profiles.pl ] || \ [ $(WEBDATADIR)/profiles.xml -nt $(WEBWWWDIR)/profiles.pl ] || \ [ $(WEBDATADIR)/profiles.xml -nt $(WEBWWWDIR)/profiles.js ]; then \ echo update-profiles.pl ;\ ( cd $(WEBWWWDIR) ; perl update-profiles.pl ) ;\ fi #### all-translations: $(WEBWWWDIR)/router.html $(WEBWWWDIR)/visualiser.html \ $(WEBWWWDIR)/router.html.en $(WEBWWWDIR)/visualiser.html.en \ $(XMLDIR)/routino-translations.xml ifeq ($(HOST),MINGW) $(WEBWWWDIR)/router.html: $(WEBWWWDIR)/router.html.en @echo cp $< $@ @cp -f $< $@ $(WEBWWWDIR)/visualiser.html: $(WEBWWWDIR)/visualiser.html.en @echo cp $< $@ @cp -f $< $@ else $(WEBWWWDIR)/router.html: $(WEBWWWDIR)/router.html.en @echo ln -s `basename $<` $@ @ln -s -f `basename $<` $@ $(WEBWWWDIR)/visualiser.html: $(WEBWWWDIR)/visualiser.html.en @echo ln -s `basename $<` $@ @ln -s -f `basename $<` $@ endif $(WEBWWWDIR)/router.html.en: $(WEBTRANSDIR)/router.html $(TRANS_FILES) $(WEBTRANSDIR)/translate.pl @echo translate.pl @cd $(WEBTRANSDIR) && perl translate.pl $(WEBWWWDIR)/visualiser.html.en: $(WEBTRANSDIR)/visualiser.html $(TRANS_FILES) $(WEBTRANSDIR)/translate.pl @echo translate.pl @cd $(WEBTRANSDIR) && perl translate.pl $(XMLDIR)/routino-translations.xml: $(WEBTRANSDIR)/translations-head.xml $(WEBTRANSDIR)/translations-body.xml $(WEBTRANSDIR)/translations-tail.xml $(TRANS_FILES) $(WEBTRANSDIR)/translate.pl @echo translate.pl @cd $(WEBTRANSDIR) && perl translate.pl #### all-icons: $(WEBICONDIR)/ball-0.png $(WEBICONDIR)/ball-0.png: $(WEBICONDIR)/create-icons.pl @echo create-icons.pl @cd $(WEBICONDIR) && perl create-icons.pl #### all-exe: cd $(SRCDIR) && $(MAKE) all-exe #### all-xml: $(XMLDIR)/routino-translations.xml cd $(XMLDIR) && $(MAKE) all ######## test: ######## install: all @echo "******************************************************" @echo "* Note: web directory is not installed automatically *" @echo "******************************************************" ######## clean: clean clean-all-bin clean-all-data clean-all-doc clean-all-profiles clean-all-translations clean-all-icons rm -f *~ clean-all-bin: -cd $(WEBBINDIR) && rm -f $(EXE_FILES) clean-all-data: -cd $(WEBDATADIR) && rm -f $(STANDARD_XML_FILES) -cd $(WEBDATADIR) && rm -f $(SPECIAL_XML_FILES) clean-all-doc: -cd $(WEBDOCDIR) && rm -f $(DOC_FILES) clean-all-profiles: clean-all-translations: clean-all-icons: ######## distclean: distclean-all-bin distclean-all-data distclean-all-doc distclean-all-profiles distclean-all-translations distclean-all-icons distclean-all-bin: clean-all-bin distclean-all-data: clean-all-data distclean-all-doc: clean-all-doc distclean-all-profiles: clean-all-profiles -cd $(WEBWWWDIR) && rm -f $(PROFILE_FILES) distclean-all-translations: clean-all-translations -cd $(WEBWWWDIR) && rm -f router.html* -cd $(WEBWWWDIR) && rm -f visualiser.html* distclean-all-icons: clean-all-icons -cd $(WEBICONDIR) && rm -f ball-*.png limit-*.png marker-*.png ######## .PHONY:: all test install clean distclean .PHONY:: all-bin all-data all-doc all-profiles all-icons all-translations all-exe all-xml .PHONY:: clean-all-bin clean-all-data clean-all-doc clean-all-profiles clean-all-translations clean-all-icons .PHONY:: distclean-all-bin distclean-all-data distclean-all-doc distclean-all-profiles distclean-all-translations distclean-all-icons .NOTPARALLEL: routino-3.2/web/www/ 40755 233 144 0 12304345636 7620 5routino-3.2/web/www/leaflet/ 40755 233 144 0 12672056130 11230 5routino-3.2/web/www/leaflet/install.sh 755 233 144 224 12672056100 13224 0#!/bin/sh -x version=0.7.7 # Download the file. wget http://cdn.leafletjs.com/leaflet/v$version/leaflet.zip # Uncompress it. unzip leaflet.zip routino-3.2/web/www/openlayers/ 40755 233 144 0 12672056324 12002 5routino-3.2/web/www/openlayers/install.sh 755 233 144 740 12672056324 14004 0#!/bin/sh -x version=2.13.1 # Download the file. wget http://openlayers.org/download/OpenLayers-$version.tar.gz # Uncompress it. tar -xzf OpenLayers-$version.tar.gz # Create a custom OpenLayers file (cd OpenLayers-$version/build && python build.py ../../routino.cfg && cp OpenLayers.js ..) # Copy the files. cp -p OpenLayers-$version/OpenLayers.js . cp -pr OpenLayers-$version/img . cp -pr OpenLayers-$version/theme . # Delete the remainder rm -rf OpenLayers-$version routino-3.2/web/www/openlayers/routino.cfg 644 233 144 2230 12260565540 14171 0# This is a configuration file to allow building an optimised OpenLayers # Javascript file that contains all of the features required for Routino. [first] OpenLayers/SingleFile.js OpenLayers.js OpenLayers/BaseTypes.js OpenLayers/BaseTypes/Class.js OpenLayers/Util.js [last] [include] OpenLayers/BaseTypes/LonLat.js OpenLayers/BaseTypes/Bounds.js OpenLayers/Control/DragFeature.js OpenLayers/Control/LayerSwitcher.js OpenLayers/Control/Navigation.js OpenLayers/Control/PanZoomBar.js OpenLayers/Control/PinchZoom.js OpenLayers/Control/SelectFeature.js OpenLayers/Control/ScaleLine.js OpenLayers/Feature/Vector.js OpenLayers/Format/GPX.js OpenLayers/Geometry/LineString.js OpenLayers/Geometry/Point.js OpenLayers/Geometry/Polygon.js OpenLayers/Layer/Boxes.js OpenLayers/Layer/SphericalMercator.js OpenLayers/Layer/TMS.js OpenLayers/Layer/Vector.js OpenLayers/Map.js OpenLayers/Marker/Box.js OpenLayers/Projection.js OpenLayers/Protocol/HTTP.js OpenLayers/Renderer/Elements.js OpenLayers/Renderer/Canvas.js OpenLayers/Renderer/SVG.js OpenLayers/Renderer/VML.js OpenLayers/Request/XMLHttpRequest.js OpenLayers/Strategy/Fixed.js OpenLayers/Rule.js OpenLayers/Style.js [exclude] routino-3.2/web/www/routino/ 40755 233 144 0 13061246465 11320 5routino-3.2/web/www/routino/maploader.js 644 233 144 2421 12273230550 13625 0//////////////////////////////////////////////////////////////////////////////// ///////////////////// Map loader (OpenLayers or Leaflet) /////////////////////// //////////////////////////////////////////////////////////////////////////////// function map_load(callbacks) { var pending=1; var head = document.getElementsByTagName("head")[0]; /* Call the callbacks when everything is loaded. */ function call_callbacks() { if(!--pending) eval(callbacks); } /* Javascript loader */ function load_js(url) { var script = document.createElement("script"); script.src = url; script.type = "text/javascript"; script.onload = call_callbacks; pending++; head.appendChild(script); } /* CSS loader */ function load_css(url) { var link = document.createElement("link"); link.href = url; link.type = "text/css"; link.rel = "stylesheet"; head.appendChild(link); } /* Load the external library and local code */ if(mapprops.library == "leaflet") { load_css("../leaflet/leaflet.css"); load_js("../leaflet/leaflet.js"); load_js(location.pathname.replace(/\.html.*/,".leaflet.js")); } else { load_js("../openlayers/OpenLayers.js"); load_js(location.pathname.replace(/\.html.*/,".openlayers.js")); } call_callbacks(); } routino-3.2/web/www/routino/page-elements.css 644 233 144 4616 12261523234 14574 0/* // Style sheet for page elements. // // Part of the Routino routing software. // // This file Copyright 2008-2014 Andrew M. Bishop // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . */ /*-------------*/ /* Tabbed DIVs */ /*-------------*/ DIV.tab_box { padding: 3px; margin-top: 3px; width: 100%; } DIV.tab_box SPAN.tab_selected { border-top: 2px solid; border-left: 2px solid; border-right: 2px solid; border-bottom: 1px solid white; z-index: 5; padding-top: 3px; padding-bottom: 3px; padding-right: 5px; padding-left: 5px; font-weight: bold; font-variant: small-caps; background: #FFF; } DIV.tab_box SPAN.tab_unselected { border-top: 1px solid; border-left: 1px solid; border-right: 1px solid; padding-top: 3px; padding-bottom: 3px; padding-right: 5px; padding-left: 5px; cursor: pointer; font-variant: small-caps; background: #CCC; } DIV.tab_box SPAN.tab_unselected:hover { background: #DDD; } DIV.tab_content { width: auto; padding: 3px; border: thin solid; } /*----------------*/ /* Show/Hide DIVs */ /*----------------*/ DIV.hideshow_box { min-height: 1em; border-top: 2px solid; border-color: #AAA; padding-bottom: 2px; overflow: hidden; } DIV.hideshow_box:first-child { border-top: none; } DIV.hideshow_box SPAN.hideshow_show { float: right; display: block; font-weight: bold; text-align: center; width: 1em; padding-right: 5px; padding-left: 5px; padding-top: 1px; padding-bottom: 1px; cursor: pointer; background: #CCC; } DIV.hideshow_box SPAN.hideshow_show:hover { background: #DDD; } DIV.hideshow_box SPAN.hideshow_hide { display: none; } SPAN.hideshow_title { display: block; font-weight: bold; text-decoration: underline; padding-top: 1px; padding-bottom: 1px; background: #EEE; } routino-3.2/web/www/routino/router.html.de 644 233 144 76501 13061246453 14157 0 Routino : Routen Planer für OpenStreetMap Daten
Optionen Ergebnisse Daten
Routino OpenStreetMap Router Diese Website erlaubt Routing mit den Daten, die OpenStreetMap gesammelt hat. Wähle Start- und Endpunkt (klicke auf die Marker-Symbole unten), wähle die Routing-Vorgaben und dann finde den Weg.
+ - Wegpunkte
Schleife schließen:
Rückwärts:
Suche
+ - Fortbewegungsart
Fußgänger:
Pferd:
Rollstuhl:
Fahrrad:
Moped:
Motorrad:
Auto:
LKW:
Schwertransport/LKW:
Öffentlicher Personenverkehr:
+ - Vorgaben zur Wegnutzung
+ - Geschwindigkeitsvorgaben
+ - Vorgaben zur Wegbeschaffenheit
+ - andere Vorgaben
+ - Hilfe
Schnellanleitung
Klicke auf die Marker-Bildchen (oben), um sie in der Mitte der Karte (rechts) zu positionieren. Dann ziehe das Bildchen auf die genaue Position. Das Zoomen der Karte vor der Patzierung ist vermutlich am einfachsten. Alternativ kann man die geografische Breite und Länge in den Kästchen eintragen.

Wähle die Fortbewegungsart, die Vorgaben zur Wegnutzung, die Geschwindigkeitsvorgaben, die Vorgaben zur Wegbeschaffenheit und die anderen Vorgaben von den obigen Auswahlfeldern. Ein Klick auf "kürzeste" oder "schnellste" ermittelt die entsprechende Verbindung und zeigt sie in der Karte an.

Wegpunkte
Ein Klick auf das Marker-Bildchen (oben) schaltet die Sichbarkeit in der Karte ein bzw. aus. Die Berechnung Route erfolgt in der Reihenfolge der Wegpunkte (so gut, wie es für die gewählte Fortbewegungsart möglich ist).

Fortbewegungsart
Die Auswahl der Fortbewegungsart bestimmt die bei der Routenberechnung erlaubten Wegtypen und die Vorgabeeinstellungen aller anderen Parameter.

Vorgaben zur Wegnutzung
Die Vorgaben zur Wegnutzung bestimmen die Priorisierung von Wegarten. Wenn z. B. Schnellstraßen mit 110% und Bundesstraßen mit 100% angegeben werden, wird bei zwei möglichen Wegwahlen die Schnellstraße solange bevorzugt wird, wie der Längen(oder Zeit-)unterschied 10% nicht überschreitet.

Geschwindigkeitsvorgaben
Die hier geannten Geschwindigkeiten werden für den jeweiligen Wegtyp finden Anwendung wenn keine andere Geschwindkeitsbegrenzung mit geringerem Wert bekannt ist.

Vorgaben zur Wegbeschaffenheit
Die Vorgaben zur Wegbeschaffenheit werden als Prozentangaben verwendet, um die Verhältnisse der Wegbenutzung zu steuern. Wenn z. B. befestigte Wege mit 75% angegeben sind, werden unbefestigte automatisch mit 25% angenommen, so werden Wege ausgewählt, die mindestens drei mal länger auf befestigten Wegen verlaufen.

andere Vorgaben
Die Berücksichtigung von Benutzungs-Begrenzungen durch Gewicht, Höhe, Länge und Breite ist möglich. Genauso können Einbahnstraßenbeschräkungen ignoriert werden (z. B. als Fußgänger).

Router: Routino | Geodaten: | Kacheln:
routino-3.2/web/www/routino/statistics.cgi 755 233 144 2271 12767517356 14233 0#!/usr/bin/perl # # Routino data statistics # # Part of the Routino routing software. # # This file Copyright 2008-2014, 2016 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use strict; # Use the directory paths script require "./paths.pl"; # Use the perl CGI module use CGI ':cgi'; # Print the output print header('text/plain'); # Run the filedumper my $params=""; $params.=" --dir=$main::data_dir" if($main::data_dir); $params.=" --prefix=$main::data_prefix" if($main::data_prefix); $params.=" --statistics"; system "$main::bin_dir/$main::filedumper_exe $params 2>&1"; routino-3.2/web/www/routino/router.html.en 644 233 144 75765 13061246452 14203 0 Routino : Route Planner for OpenStreetMap Data
Options Results Data
Routino OpenStreetMap Router This web page allows routing within the data collected by OpenStreetMap. Select start and end points (click on the marker icons below), select routing preferences then find a route.
+ - Waypoints
Close loop:
Reverse order:
Find
+ - Transport Type
Foot:
Horse:
Wheelchair:
Bicycle:
Moped:
Motorcycle:
Motorcar:
Goods:
HGV:
PSV:
+ - Highway Preferences
+ - Speed Limits
+ - Property Preferences
+ - Other Restrictions
+ - Help
Quick Start
Click on marker icons (above) to place them on the map (right). Then drag them to the correct position. Zooming the map before placing the markers is probably easiest. Alternatively type the latitude and longitude into the boxes above.

Select the transport type, allowed highway types, speed limits, highway properties and other restrictions from the options above. Select "Shortest" or "Quickest" to calculate the route and display it on the map.

Waypoints
Clicking on the marker icons will toggle the display of them on the map. When a route is calculated it will visit (as close as possible for the selected transport type) each of the waypoints that have markers on the map in the order given.

Transport Type
Selecting a transport type will restrict the chosen route to those on which it is allowed and set default values for the other parameters.

Highway Preferences
The highway preference is selected as a percentage and routes are chosen that try to follow the preferred highways. For example if a "Primary" road is given a "110%" preference and a "Secondary" road is given a "100%" preference then it means that a route on a Primary road can be up to 10% longer than on a secondary road and still be selected.

Speed Limits
The speed limits chosen here for the different types of highway apply if the highway has no other speed limit marked or it is higher than the chosen one.

Property Preferences
The property preference is selected as a percentage and routes are chosen that try to follow highways with the preferred property. For example if a "Paved" highway is given a "75%" preference then it means that an unpaved highway is automatically given a "25%" preference so that a route on a paved highway can be 3 times the length of an unpaved one and still be selected.

Other Restrictions
These allow a route to be found that avoids marked limits on weight, height, width or length. It is also possible to ignore one-way restrictions (e.g. if walking).

Router: Routino | Geo Data: | Tiles:
routino-3.2/web/www/routino/visualiser.cgi 755 233 144 7743 12767517352 14234 0#!/usr/bin/perl # # Routino data visualiser CGI # # Part of the Routino routing software. # # This file Copyright 2008-2014, 2016 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use strict; # Use the directory paths script require "./paths.pl"; # Use the perl CGI module use CGI ':cgi'; # Create the query and get the parameters my $query=new CGI; my @rawparams=$query->param; # Legal CGI parameters with regexp validity check my %legalparams=( "latmin" => "[-0-9.]+", "latmax" => "[-0-9.]+", "lonmin" => "[-0-9.]+", "lonmax" => "[-0-9.]+", "data" => "(junctions|super|waytype-.*|highway-.*|transport-.*|barrier-.*|turns|speed|weight|height|width|length|property-.*|errorlogs)", "dump" => "(node|segment|turn-relation|errorlog)[0-9]+" ); # Validate the CGI parameters, ignore invalid ones my %cgiparams=(); foreach my $key (@rawparams) { foreach my $test (keys (%legalparams)) { if($key =~ m%^$test$%) { my $value=$query->param($key); if($value =~ m%^$legalparams{$test}$%) { $cgiparams{$key}=$value; last; } } } } # Data or dump? my $params=""; my $data=$cgiparams{"data"}; my $dump=$cgiparams{"dump"}; if(!defined $data && !defined $dump) { print header(-status => '500 Invalid CGI parameters'); exit; } if(defined $data) { # Parameters to limit range selected my %limits=( "junctions" => 0.2, "super" => 0.2, "waytype" => 0.2, "highway" => 0.2, "transport" => 0.2, "barrier" => 0.3, "turns" => 0.3, "speed" => 0.3, "weight" => 0.3, "height" => 0.3, "width" => 0.3, "length" => 0.3, "property" => 0.3, "errorlogs" => 0.5 ); # Check the parameters my $latmin=$cgiparams{"latmin"}; my $latmax=$cgiparams{"latmax"}; my $lonmin=$cgiparams{"lonmin"}; my $lonmax=$cgiparams{"lonmax"}; if($latmin eq "" || $latmax eq "" || $lonmin eq "" || $lonmax eq "" || $data eq "") { print header(-status => '500 Invalid CGI parameters'); exit; } my $subdata=$data; $subdata="waytype" if($data =~ m%waytype-%); $subdata="highway" if($data =~ m%highway-%); $subdata="transport" if($data =~ m%transport-%); $subdata="barrier" if($data =~ m%barrier-%); $subdata="property" if($data =~ m%property-%); if(($latmax-$latmin)>$limits{$subdata} || ($lonmax-$lonmin)>$limits{$subdata}) { print header(-status => '500 Selected area too large'); exit; } # Print the output print header('text/plain'); print "$latmin $lonmin $latmax $lonmax\n"; # Set the parameters $params.=" --visualiser --data=$data"; $params.=" --latmin=$latmin --latmax=$latmax --lonmin=$lonmin --lonmax=$lonmax"; } else { # Print the output print header('text/plain'); # Set the parameters $params.=" --dump-visualiser --data=$dump"; } # Run the filedumper $params.=" --dir=$main::data_dir" if($main::data_dir); $params.=" --prefix=$main::data_prefix" if($main::data_prefix); system "$main::bin_dir/$main::filedumper_exe $params 2>&1"; routino-3.2/web/www/routino/router.html.ru 644 233 144 102147 13061246457 14235 0 Routino : Route Planner for OpenStreetMap Data
ÐаÑтройки Результаты Данные
Routino OpenStreetMap Router This web page allows routing within the data collected by OpenStreetMap. Select start and end points (click on the marker icons below), select routing preferences then find a route.
+ - Язык
+ - Точки
Зациклить:
Обратный порÑдок:
Ðайти
+ - Тип транÑпорта
Пешком:
Лошадь:
Инвалидное креÑло:
ВелоÑипед:
Мопед:
Мотоцикл:
Машина:
Фургон:
Грузовой автомобиль:
ÐвтобуÑ:
+ - ÐаÑтройки типа дорог
+ - ÐžÐ³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти
+ - ÐаÑтройки качеÑтва дорог
+ - Другие ограничениÑ
+ - Помощь
Quick Start
Click on marker icons (above) to place them on the map (right). Then drag them to the correct position. Zooming the map before placing the markers is probably easiest. Alternatively type the latitude and longitude into the boxes above.

Select the transport type, allowed highway types, speed limits, highway properties and other restrictions from the options above. Select "Shortest" or "Quickest" to calculate the route and display it on the map.

Waypoints
Clicking on the marker icons will toggle the display of them on the map. When a route is calculated it will visit (as close as possible for the selected transport type) each of the waypoints that have markers on the map in the order given.

Transport Type
Selecting a transport type will restrict the chosen route to those on which it is allowed and set default values for the other parameters.

Highway Preferences
The highway preference is selected as a percentage and routes are chosen that try to follow the preferred highways. For example if a "Primary" road is given a "110%" preference and a "Secondary" road is given a "100%" preference then it means that a route on a Primary road can be up to 10% longer than on a secondary road and still be selected.

Speed Limits
The speed limits chosen here for the different types of highway apply if the highway has no other speed limit marked or it is higher than the chosen one.

Property Preferences
The property preference is selected as a percentage and routes are chosen that try to follow highways with the preferred property. For example if a "Paved" highway is given a "75%" preference then it means that an unpaved highway is automatically given a "25%" preference so that a route on a paved highway can be 3 times the length of an unpaved one and still be selected.

Other Restrictions
These allow a route to be found that avoids marked limits on weight, height, width or length. It is also possible to ignore one-way restrictions (e.g. if walking).

Router: Routino | Гео данные: | Тайлы:
routino-3.2/web/www/routino/visualiser.html.fr 644 233 144 52426 13061246461 15043 0 Routino : Afficheur d'itinéraire
Visualiser Router Data
Afficheur de Routino This web page allows visualisation of the data that Routino uses for routing. Only data relevant for routing is displayed and some will therefore be excluded.
Instructions Zoom in and then use the buttons below to download the data. The server will only return data if the selected area is small enough.
État
Aucune donnée affichée
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ - Aide
Quick Start
Zoom to an area and select one of the buttons to display that type of data.
More data options can be found by expanding the details below each button.

Data Failure
If the area selected is too large (depends on the data type) then the status will say "Failed to get visualiser data" - zoom in and try again.

Routeur: Routino | Geo Data: | Dalles:
routino-3.2/web/www/routino/index.html 644 233 144 3240 12520735533 13326 0 Routino : Route Planner for OpenStreetMap Data

Routino : Route Planner for OpenStreetMap Data

routino-3.2/web/www/routino/profiles.pl 644 233 144 20051 13061246451 13525 0################################################################################ ########################### Routino default profile ############################ ################################################################################ $routino={ # contains all default Routino options (generated using "--help-profile-perl"). # Default transport type transport => "motorcar", # Transport types transports => { foot => 1, horse => 2, wheelchair => 3, bicycle => 4, moped => 5, motorcycle => 6, motorcar => 7, goods => 8, hgv => 9, psv => 10 }, # Highway types highways => { motorway => 1, trunk => 2, primary => 3, secondary => 4, tertiary => 5, unclassified => 6, residential => 7, service => 8, track => 9, cycleway => 10, path => 11, steps => 12, ferry => 13 }, # Property types properties => { paved => 1, multilane => 2, bridge => 3, tunnel => 4, footroute => 5, bicycleroute => 6 }, # Restriction types restrictions => { oneway => 1, turns => 2, weight => 3, height => 4, width => 5, length => 6 }, # Allowed highways profile_highway => { motorway => { foot => 0, horse => 0, wheelchair => 0, bicycle => 0, moped => 0, motorcycle => 100, motorcar => 100, goods => 100, hgv => 100, psv => 100 }, trunk => { foot => 40, horse => 25, wheelchair => 40, bicycle => 30, moped => 90, motorcycle => 100, motorcar => 100, goods => 100, hgv => 100, psv => 100 }, primary => { foot => 50, horse => 50, wheelchair => 50, bicycle => 70, moped => 100, motorcycle => 90, motorcar => 90, goods => 90, hgv => 90, psv => 90 }, secondary => { foot => 60, horse => 50, wheelchair => 60, bicycle => 80, moped => 90, motorcycle => 80, motorcar => 80, goods => 80, hgv => 80, psv => 80 }, tertiary => { foot => 70, horse => 75, wheelchair => 70, bicycle => 90, moped => 80, motorcycle => 70, motorcar => 70, goods => 70, hgv => 70, psv => 70 }, unclassified => { foot => 80, horse => 75, wheelchair => 80, bicycle => 90, moped => 70, motorcycle => 60, motorcar => 60, goods => 60, hgv => 60, psv => 60 }, residential => { foot => 90, horse => 75, wheelchair => 90, bicycle => 90, moped => 60, motorcycle => 50, motorcar => 50, goods => 50, hgv => 50, psv => 50 }, service => { foot => 90, horse => 75, wheelchair => 90, bicycle => 90, moped => 50, motorcycle => 40, motorcar => 40, goods => 40, hgv => 40, psv => 40 }, track => { foot => 95, horse => 100, wheelchair => 95, bicycle => 90, moped => 0, motorcycle => 0, motorcar => 0, goods => 0, hgv => 0, psv => 0 }, cycleway => { foot => 95, horse => 90, wheelchair => 95, bicycle => 100, moped => 0, motorcycle => 0, motorcar => 0, goods => 0, hgv => 0, psv => 0 }, path => { foot => 100, horse => 100, wheelchair => 100, bicycle => 90, moped => 0, motorcycle => 0, motorcar => 0, goods => 0, hgv => 0, psv => 0 }, steps => { foot => 80, horse => 0, wheelchair => 0, bicycle => 0, moped => 0, motorcycle => 0, motorcar => 0, goods => 0, hgv => 0, psv => 0 }, ferry => { foot => 20, horse => 20, wheelchair => 20, bicycle => 20, moped => 20, motorcycle => 20, motorcar => 20, goods => 20, hgv => 20, psv => 20 } }, # Speed limits profile_speed => { motorway => { foot => 0, horse => 0, wheelchair => 0, bicycle => 0, moped => 48, motorcycle => 112, motorcar => 112, goods => 96, hgv => 89, psv => 89 }, trunk => { foot => 4, horse => 8, wheelchair => 4, bicycle => 20, moped => 48, motorcycle => 96, motorcar => 96, goods => 96, hgv => 80, psv => 80 }, primary => { foot => 4, horse => 8, wheelchair => 4, bicycle => 20, moped => 48, motorcycle => 96, motorcar => 96, goods => 96, hgv => 80, psv => 80 }, secondary => { foot => 4, horse => 8, wheelchair => 4, bicycle => 20, moped => 48, motorcycle => 88, motorcar => 88, goods => 88, hgv => 80, psv => 80 }, tertiary => { foot => 4, horse => 8, wheelchair => 4, bicycle => 20, moped => 48, motorcycle => 80, motorcar => 80, goods => 80, hgv => 80, psv => 80 }, unclassified => { foot => 4, horse => 8, wheelchair => 4, bicycle => 20, moped => 48, motorcycle => 64, motorcar => 64, goods => 64, hgv => 64, psv => 64 }, residential => { foot => 4, horse => 8, wheelchair => 4, bicycle => 20, moped => 48, motorcycle => 48, motorcar => 48, goods => 48, hgv => 48, psv => 48 }, service => { foot => 4, horse => 8, wheelchair => 4, bicycle => 20, moped => 32, motorcycle => 32, motorcar => 32, goods => 32, hgv => 32, psv => 32 }, track => { foot => 4, horse => 8, wheelchair => 4, bicycle => 20, moped => 16, motorcycle => 16, motorcar => 16, goods => 16, hgv => 16, psv => 16 }, cycleway => { foot => 4, horse => 8, wheelchair => 4, bicycle => 20, moped => 0, motorcycle => 0, motorcar => 0, goods => 0, hgv => 0, psv => 0 }, path => { foot => 4, horse => 8, wheelchair => 4, bicycle => 20, moped => 0, motorcycle => 0, motorcar => 0, goods => 0, hgv => 0, psv => 0 }, steps => { foot => 4, horse => 0, wheelchair => 4, bicycle => 0, moped => 0, motorcycle => 0, motorcar => 0, goods => 0, hgv => 0, psv => 0 }, ferry => { foot => 10, horse => 10, wheelchair => 10, bicycle => 10, moped => 10, motorcycle => 10, motorcar => 10, goods => 10, hgv => 10, psv => 10 } }, # Highway properties profile_property => { paved => { foot => 50, horse => 20, wheelchair => 90, bicycle => 50, moped => 100, motorcycle => 100, motorcar => 100, goods => 100, hgv => 100, psv => 100 }, multilane => { foot => 25, horse => 25, wheelchair => 25, bicycle => 25, moped => 35, motorcycle => 60, motorcar => 60, goods => 60, hgv => 60, psv => 60 }, bridge => { foot => 50, horse => 50, wheelchair => 50, bicycle => 50, moped => 50, motorcycle => 50, motorcar => 50, goods => 50, hgv => 50, psv => 50 }, tunnel => { foot => 50, horse => 50, wheelchair => 50, bicycle => 50, moped => 50, motorcycle => 50, motorcar => 50, goods => 50, hgv => 50, psv => 50 }, footroute => { foot => 55, horse => 50, wheelchair => 55, bicycle => 50, moped => 50, motorcycle => 50, motorcar => 45, goods => 45, hgv => 45, psv => 45 }, bicycleroute => { foot => 55, horse => 50, wheelchair => 55, bicycle => 60, moped => 50, motorcycle => 50, motorcar => 45, goods => 45, hgv => 45, psv => 45 } }, # Restrictions profile_restrictions => { oneway => { foot => 0, horse => 1, wheelchair => 0, bicycle => 1, moped => 1, motorcycle => 1, motorcar => 1, goods => 1, hgv => 1, psv => 1 }, turns => { foot => 0, horse => 1, wheelchair => 0, bicycle => 1, moped => 1, motorcycle => 1, motorcar => 1, goods => 1, hgv => 1, psv => 1 }, weight => { foot => 0.0, horse => 0.0, wheelchair => 0.0, bicycle => 0.0, moped => 0.0, motorcycle => 0.0, motorcar => 0.0, goods => 5.0, hgv => 10.0, psv => 15.0 }, height => { foot => 0.0, horse => 0.0, wheelchair => 0.0, bicycle => 0.0, moped => 0.0, motorcycle => 0.0, motorcar => 0.0, goods => 2.5, hgv => 3.0, psv => 3.0 }, width => { foot => 0.0, horse => 0.0, wheelchair => 0.0, bicycle => 0.0, moped => 0.0, motorcycle => 0.0, motorcar => 0.0, goods => 2.0, hgv => 2.5, psv => 2.5 }, length => { foot => 0.0, horse => 0.0, wheelchair => 0.0, bicycle => 0.0, moped => 0.0, motorcycle => 0.0, motorcar => 0.0, goods => 5.0, hgv => 6.0, psv => 6.0 } } }; # end of routino variable 1; routino-3.2/web/www/routino/router.openlayers.js 644 233 144 156252 12764312673 15451 0// // Routino router web page Javascript // // Part of the Routino routing software. // // This file Copyright 2008-2016 Andrew M. Bishop // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . // var vismarkers, markers, markersmoved, paramschanged; var homelat=null, homelon=null; //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Initialisation ///////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // Make a deep copy of the routino profile. var routino_default={}; for(var l1 in routino) if(typeof(routino[l1])!="object") routino_default[l1]=routino[l1]; else { routino_default[l1]={}; for(var l2 in routino[l1]) if(typeof(routino[l1][l2])!="object") routino_default[l1][l2]=Number(routino[l1][l2]); else { routino_default[l1][l2]={}; for(var l3 in routino[l1][l2]) routino_default[l1][l2][l3]=Number(routino[l1][l2][l3]); } } // Store the latitude and longitude in the routino variable routino.point=[]; for(var marker=1;marker<=mapprops.maxmarkers;marker++) { routino.point[marker]={}; routino.point[marker].lon=""; routino.point[marker].lat=""; routino.point[marker].search=""; routino.point[marker].active=false; routino.point[marker].used=false; routino.point[marker].home=false; } // Process the URL query string and extract the arguments var legal={"^lon" : "^[-0-9.]+$", "^lat" : "^[-0-9.]+$", "^zoom" : "^[0-9]+$", "^lon[1-9]" : "^[-0-9.]+$", "^lat[1-9]" : "^[-0-9.]+$", "^search[1-9]" : "^.+$", "^transport" : "^[a-z]+$", "^highway-[a-z]+" : "^[0-9.]+$", "^speed-[a-z]+" : "^[0-9.]+$", "^property-[a-z]+" : "^[0-9.]+$", "^oneway" : "^(1|0|true|false|on|off)$", "^turns" : "^(1|0|true|false|on|off)$", "^weight" : "^[0-9.]+$", "^height" : "^[0-9.]+$", "^width" : "^[0-9.]+$", "^length" : "^[0-9.]+$", "^language" : "^[-a-zA-Z]+$", "^reverse" : "(1|0|true|false|on|off)", "^loop" : "(1|0|true|false|on|off)"}; var args={}; if(location.search.length>1) { var query,queries; query=location.search.replace(/^\?/,""); query=query.replace(/;/g,"&"); queries=query.split("&"); for(var i=0;i=1;marker--) { var lon=args["lon" + marker]; var lat=args["lat" + marker]; var search=args["search" + marker]; if(lon !== undefined && lat !== undefined && search !== undefined && lon !== "" && lat !== "" && search !== "") { markerAddForm(marker); formSetSearch(marker,search); formSetCoords(marker,lon,lat); markerAddMap(marker); markerSearch(marker); vismarkers++; } else if(lon !== undefined && lat !== undefined && lon !== "" && lat !== "") { markerAddForm(marker); formSetCoords(marker,lon,lat); markerAddMap(marker); markerCoords(marker); vismarkers++; } else if(search !== undefined && search !== "") { markerAddForm(marker); formSetSearch(marker,search); markerSearch(marker); DoSearch(marker); vismarkers++; } else if(vismarkers || marker<=2) { markerAddForm(marker); vismarkers++; } var searchfield=document.forms["form"].elements["search" + marker]; if(searchfield.addEventListener) searchfield.addEventListener("keyup", searchOnReturnKey, false); else if(searchfield.attachEvent) searchfield.attachEvent("keyup", searchOnReturnKey); // Internet Explorer } if(args["loop"] !== undefined) formSetLoopReverse("loop",args["loop"]); else formSetLoopReverse("loop",false); if(args["reverse"] !== undefined) formSetLoopReverse("reverse",args["reverse"]); else formSetLoopReverse("reverse",false); // Update the transport type with the URL settings which updates all HTML forms to defaults. var transport=routino.transport; if(args["transport"] !== undefined) transport=args["transport"]; formSetTransport(transport); // Update the HTML with the URL settings if(args["language"] !== undefined) formSetLanguage(args["language"]); else formSetLanguage(); for(var key in routino.profile_highway) if(args["highway-" + key] !== undefined) formSetHighway(key,args["highway-" + key]); for(var key in routino.profile_speed) if(args["speed-" + key] !== undefined) formSetSpeed(key,args["speed-" + key]); for(var key in routino.profile_property) if(args["property-" + key] !== undefined) formSetProperty(key,args["property-" + key]); for(var key in routino.restrictions) { if(key=="oneway" || key=="turns") { if(args[key] !== undefined) formSetRestriction(key,args[key]); } else { if(args["restrict-" + key] !== undefined) formSetRestriction(key,args["restrict-" + key]); } } // Get the home location cookie and compare to each waypoint var cookies=document.cookie.split("; "); for(var cookie=0;cookie100) value=100; if(value< 0) value= 0; document.forms["form"].elements["highway-" + type].value=value; routino.profile_highway[type][routino.transport]=value; paramschanged=true; updateURLs(); } // // Change of Speed in the form // function formSetSpeed(type,value) // called from router.html (with one argument) { if(value == "+") { value=routino.profile_speed[type][routino.transport]; if(value<10) value=2*Math.floor(value/2)+2; else if(value<30) value=5*Math.floor(value/5)+5; else value=10*Math.floor(value/10)+10; } else if(value == "-") { value=routino.profile_speed[type][routino.transport]; if(value<=10) value=2*Math.ceil(value/2)-2; else if(value<=30) value=5*Math.ceil(value/5)-5; else value=10*Math.ceil(value/10)-10; } else if(value == "=") value=document.forms["form"].elements["speed-" + type].value; value=Number(value); if(isNaN(value)) value= 60; if(value>150) value=150; if(value< 0) value= 0; document.forms["form"].elements["speed-" + type].value=value; routino.profile_speed[type][routino.transport]=value; paramschanged=true; updateURLs(); } // // Change of Property in the form // function formSetProperty(type,value) // called from router.html (with one argument) { if(value == "+") { value=routino.profile_property[type][routino.transport]; if(value>=40 && value<60) value=2*Math.floor(value/2)+2; else value=5*Math.floor(value/5)+5; } else if(value == "-") { value=routino.profile_property[type][routino.transport]; if(value>40 && value<=60) value=2*Math.ceil(value/2)-2; else value=5*Math.ceil(value/5)-5; } else if(value == "=") value=document.forms["form"].elements["property-" + type].value; value=Number(value); if(isNaN(value)) value= 50; if(value>100) value=100; if(value< 0) value= 0; document.forms["form"].elements["property-" + type].value=value; routino.profile_property[type][routino.transport]=value; paramschanged=true; updateURLs(); } // // Change of Restriction rule in the form // function formSetRestriction(type,value) // called from router.html (with one argument) { if(type=="oneway" || type=="turns") { if(value === undefined) value=document.forms["form"].elements["restrict-" + type].checked; document.forms["form"].elements["restrict-" + type].checked=value; routino.profile_restrictions[type][routino.transport]=value; } else if(type=="weight") { if(value == "+") value=routino.profile_restrictions[type][routino.transport]+5; else if(value == "-") value=routino.profile_restrictions[type][routino.transport]-5; else if(value == "=") value=document.forms["form"].elements["restrict-" + type].value; value=Number(value); if(isNaN(value)) value= 0; if(value>50) value=50; if(value< 0) value= 0; document.forms["form"].elements["restrict-" + type].value=value; routino.profile_restrictions[type][routino.transport]=value; } else /* if(type=="height" || type=="width" || type=="length") */ { if(value == "+") value=routino.profile_restrictions[type][routino.transport]+1; else if(value == "-") value=routino.profile_restrictions[type][routino.transport]-1; else if(value == "=") value=document.forms["form"].elements["restrict-" + type].value; value=Number(value); if(isNaN(value)) value= 0; if(value>25) value=25; if(value< 0) value= 0; document.forms["form"].elements["restrict-" + type].value=value; routino.profile_restrictions[type][routino.transport]=value; } paramschanged=true; updateURLs(); } // // Set the feature coordinates from the form when the form changes. // function formSetCoords(marker,lon,lat) // called from router.html (with one argument) { clearSearchResult(marker); if(lon === undefined && lat === undefined) { lon=document.forms["form"].elements["lon" + marker].value; lat=document.forms["form"].elements["lat" + marker].value; } if(lon === "" && lat === "") { document.forms["form"].elements["lon" + marker].value=""; document.forms["form"].elements["lat" + marker].value=""; routino.point[marker].lon=""; routino.point[marker].lat=""; updateURLs(); } else { var lonlat; if(lon==="") { lonlat=map.getCenter().clone(); lonlat.transform(epsg900913,epsg4326); lon=lonlat.lon; } if(lon<-180) lon=-180; if(lon>+180) lon=+180; if(lat==="") { lonlat=map.getCenter().clone(); lonlat.transform(epsg900913,epsg4326); lat=lonlat.lat; } if(lat<-90 ) lat=-90 ; if(lat>+90 ) lat=+90 ; lonlat = new OpenLayers.LonLat(lon,lat); lonlat.transform(epsg4326,epsg900913); markers[marker].move(lonlat); markersmoved=true; document.forms["form"].elements["lon" + marker].value=format5f(lon); document.forms["form"].elements["lat" + marker].value=format5f(lat); routino.point[marker].lon=lon; routino.point[marker].lat=lat; routino.point[marker].used=true; markerCheckHome(marker); } } // // Set the search field from the form when the form changes. // function formSetSearch(marker,search) // called from event handler linked to router.html (with one argument) { clearSearchResult(marker); if(search === undefined) { routino.point[marker].search=document.forms["form"].elements["search" + marker].value; DoSearch(marker); } else { document.forms["form"].elements["search" + marker].value=search; routino.point[marker].search=search; } } // // Change of loop or reverse option in the form // function formSetLoopReverse(type,value) // called from router.html (with one argument) { if(value === undefined) value=document.forms["form"].elements[type].checked; document.forms["form"].elements[type].checked=value; if(type == "loop") routino.loop=value; else routino.reverse=value; updateURLs(); } // // Format a number in printf("%.5f") format. // function format5f(number) { var newnumber=Math.floor(number*100000+0.5); var delta=0; if(newnumber>=0 && newnumber<100000) delta= 100000; if(newnumber<0 && newnumber>-100000) delta=-100000; var string=String(newnumber+delta); var intpart =string.substring(0,string.length-5); var fracpart=string.substring(string.length-5,string.length); if(delta>0) intpart="0"; if(delta<0) intpart="-0"; return(intpart + "." + fracpart); } // // Build a set of URL arguments // function buildURLArguments(lang) { var url= "transport=" + routino.transport; for(var marker=1;marker<=vismarkers;marker++) if(routino.point[marker].active) { url=url + ";lon" + marker + "=" + format5f(routino.point[marker].lon); url=url + ";lat" + marker + "=" + format5f(routino.point[marker].lat); if(routino.point[marker].search !== "") url=url + ";search" + marker + "=" + encodeURIComponent(routino.point[marker].search); } for(var key in routino.profile_highway) if(routino.profile_highway[key][routino.transport]!=routino_default.profile_highway[key][routino.transport]) url=url + ";highway-" + key + "=" + routino.profile_highway[key][routino.transport]; for(var key in routino.profile_speed) if(routino.profile_speed[key][routino.transport]!=routino_default.profile_speed[key][routino.transport]) url=url + ";speed-" + key + "=" + routino.profile_speed[key][routino.transport]; for(var key in routino.profile_property) if(routino.profile_property[key][routino.transport]!=routino_default.profile_property[key][routino.transport]) url=url + ";property-" + key + "=" + routino.profile_property[key][routino.transport]; for(var key in routino.restrictions) if(routino.profile_restrictions[key][routino.transport]!=routino_default.profile_restrictions[key][routino.transport]) url=url + ";" + key + "=" + routino.profile_restrictions[key][routino.transport]; if(routino.loop) url=url + ";loop=true"; if(routino.reverse) url=url + ";reverse=true"; if(lang && routino.language) url=url + ";language=" + routino.language; return(url); } // // Build a set of URL arguments for the map location // function buildMapArguments() { var lonlat = map.getCenter().clone(); lonlat.transform(epsg900913,epsg4326); var zoom = map.getZoom() + map.minZoomLevel; return "lat=" + format5f(lonlat.lat) + ";lon=" + format5f(lonlat.lon) + ";zoom=" + zoom; } // // Update the URLs // function updateURLs() { var urlargs1=buildURLArguments(true); var urlargs2=buildURLArguments(false); var mapargs=buildMapArguments(); var links=document.getElementsByTagName("a"); for(var i=0; i" + data_text + ""; document.getElementById("attribution_tile").innerHTML="" + tile_text + ""; } change_attribution(0); // Define a GPX layer but don't add it yet layerGPX={shortest: null, quickest: null}; gpx_style={shortest: new OpenLayers.Style({},{strokeWidth: 3, strokeColor: "#00FF00"}), quickest: new OpenLayers.Style({},{strokeWidth: 3, strokeColor: "#0000FF"})}; // Add a vectors layer layerVectors = new OpenLayers.Layer.Vector("Markers",{displayInLayerSwitcher: false}); map.addLayer(layerVectors); // A set of markers markers={}; markersmoved=false; paramschanged=false; for(var marker=1;marker<=mapprops.maxmarkers;marker++) { markers[marker] = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(0,0),{}, new OpenLayers.Style({},{externalGraphic: "icons/marker-" + marker + "-red.png", fillColor: "white", graphicYOffset: -25, graphicWidth: 21, graphicHeight: 25, display: "none"})); layerVectors.addFeatures([markers[marker]]); } // A function to drag the markers var drag = new OpenLayers.Control.DragFeature(layerVectors, {onDrag: dragMarkerMove, onComplete: dragMarkerComplete }); map.addControl(drag); drag.activate(); // Markers to highlight a selected point for(var highlight in highlights) { highlights[highlight] = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(0,0),{}, new OpenLayers.Style({},{strokeColor: route_dark_colours[highlight], fillColor: "white", pointRadius: 10, strokeWidth: 4, fillOpacity: 0, display: "none"})); layerVectors.addFeatures([highlights[highlight]]); } // A popup for routing results for(var popup in popups) popups[popup] = createPopup(popup); // Move the map map.events.register("moveend", map, updateURLs); var lon =args["lon"]; var lat =args["lat"]; var zoom=args["zoom"]; if(lon !== undefined && lat !== undefined && zoom !== undefined) { if(lonmapprops.eastedge) lon=mapprops.eastedge; if(latmapprops.northedge) lat=mapprops.northedge; if(zoommapprops.zoomin) zoom=mapprops.zoomin; var lonlat = new OpenLayers.LonLat(lon,lat); lonlat.transform(epsg4326,epsg900913); map.moveTo(lonlat,zoom-map.minZoomLevel); } else { map.setCenter(map.restrictedExtent.getCenterLonLat(), map.getZoomForExtent(map.restrictedExtent,true)); map.maxResolution = map.getResolution(); } // Unhide editing URL if variable set if(mapprops.editurl !== undefined && mapprops.editurl !== "") { var edit_url=document.getElementById("edit_url"); edit_url.style.display=""; edit_url.href=mapprops.editurl; } updateURLs(); } // // Callback for a marker drag occuring on the map. // function dragMarkerMove(feature,pixel) { for(var marker in markers) if(feature==markers[marker]) dragMarkerSetForm(marker); } // // Callback for completing a marker drag on the map. // function dragMarkerComplete(feature,pixel) { for(var marker in markers) if(feature==markers[marker]) dragMarkerSetForm(marker); updateURLs(); } // // Set the feature coordinates in the form after dragging it on the map. // function dragMarkerSetForm(marker) { var lonlat = new OpenLayers.LonLat(markers[marker].geometry.x, markers[marker].geometry.y); lonlat.transform(epsg900913,epsg4326); formSetCoords(marker,lonlat.lon,lonlat.lat); } //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Marker dragging //////////////////////////////// //////////////////////////////////////////////////////////////////////////////// var dragged_waypoint=null,dragged_marker=null; var dragged_waypoint_over=null,dragged_marker_over=null; var dragged_icon_x,dragged_icon_y; // // Drag a waypoint up or down the list. // function dragWaypointStart(e) { var w=e.target; while(w!=null && w.className != "waypoint") w=w.parentElement; if(w===null) return; w.style.opacity = "0.5"; dragged_waypoint=w; dragged_marker=Number.parseInt(dragged_waypoint.id.substring(8)); dragged_icon_x=e.clientX-e.target.offsetLeft; dragged_icon_y=e.clientY-e.target.offsetTop; } function dragWaypointEnd(e) { e.preventDefault(); if(dragged_waypoint===null) return; dragged_waypoint.style.opacity = ""; dragged_waypoint=null; dragged_marker=null; if(dragged_waypoint_over===null) return; dragged_waypoint_over.style.border = ""; dragged_waypoint_over=null; dragged_marker_over=null; } // // Drag a waypoint over another one up or down the list. // function dragWaypointEnter(e) { var w=e.target; while(w!=null && w.className != "waypoint") w=w.parentElement; if(w===null) return; if(dragged_waypoint_over!==null) dragged_waypoint_over.style.border = ""; if(w==dragged_waypoint) return; dragged_waypoint_over=w; dragged_marker_over=Number.parseInt(dragged_waypoint_over.id.substring(8)); if(dragged_marker>dragged_marker_over) w.style.borderTop = "3px solid black"; else w.style.borderBottom = "3px solid black"; } function dragWaypointOver(e) { e.preventDefault(); } function dragWaypointLeave(e) { var w=e.target; while(w!=null && w.className != "waypoint") w=w.parentElement; if(w===null) return; if(w==dragged_waypoint_over) return; w.style.border = ""; } // // Drop the waypoint after dragging up or down the list. // function dragWaypointDrop(e) { e.preventDefault(); if(dragged_marker_over===null) return; if(dragged_marker_over>dragged_marker) for(var m=dragged_marker;mdragged_marker_over;m--) markerSwap(m,m-1); } // // Drag a waypoint over the map. // function dragWaypointMapEnter(e) { e.preventDefault(); if(dragged_waypoint_over!==null) dragged_waypoint_over.style.border = ""; } function dragWaypointMapOver(e) { e.preventDefault(); } function dragWaypointMapLeave(e) { e.preventDefault(); } // // Drop the waypoint after dragging it over the map. // function dragWaypointMapDrop(e) { e.preventDefault(); var rect = document.getElementById("map").getBoundingClientRect(); var lonlat = map.getLonLatFromViewPortPx(new OpenLayers.Pixel(e.clientX-rect.left-window.scrollX-dragged_icon_x+8, e.clientY-rect.top -window.scrollY-dragged_icon_y+21)); lonlat.transform(epsg900913,epsg4326); formSetCoords(dragged_marker,lonlat.lon,lonlat.lat); if(!routino.point[dragged_marker].active) markerToggleMap(dragged_marker); } //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Marker handling //////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // // Toggle a marker on the map. // function markerToggleMap(marker) // called from router.html { if(!routino.point[marker].used) { routino.point[marker].used=true; markerCentre(marker); markerCoords(marker); } markerAddRemoveMap(marker,!routino.point[marker].active); updateSearchButtons(); } // // Show or hide a marker on the map. // function markerAddRemoveMap(marker,active) { if(active) markerAddMap(marker); else markerRemoveMap(marker); } // // Show a marker on the map. // function markerAddMap(marker) { clearSearchResult(marker); markers[marker].style.display = ""; routino.point[marker].active=true; routino.point[marker].used=true; updateIcon(marker); markersmoved=true; updateURLs(); } // // Remove a marker from the map. // function markerRemoveMap(marker) { clearSearchResult(marker); markers[marker].style.display = "none"; routino.point[marker].active=false; updateIcon(marker); markersmoved=true; updateURLs(); } // // Display search string for the marker // function markerSearch(marker) // called from router.html { clearSearchResult(marker); document.getElementById("coords" + marker).style.display="none"; document.getElementById("search" + marker).style.display=""; } // // Display coordinates for the marker // function markerCoords(marker) // called from router.html { clearSearchResult(marker); document.getElementById("search" + marker).style.display="none"; document.getElementById("coords" + marker).style.display=""; } // // Centre the marker on the map // function markerCentre(marker) // called from router.html { if(!routino.point[marker].used) return; clearSearchResult(marker); var lonlat=map.getCenter().clone(); lonlat.transform(epsg900913,epsg4326); formSetCoords(marker,lonlat.lon,lonlat.lat); } // // Centre the map on the marker // function markerRecentre(marker) // called from router.html { if(!routino.point[marker].used) return; clearSearchResult(marker); var lon=routino.point[marker].lon; var lat=routino.point[marker].lat; var lonlat = new OpenLayers.LonLat(lon,lat); lonlat.transform(epsg4326,epsg900913); map.panTo(lonlat); } // // Clear the current marker. // function markerRemove(marker) // called from router.html { clearSearchResult(marker); for(var m=marker;mmarker;m--) markerCopy(m,m-1); markerClearForm(marker-1); } // // Add a marker after the current one. // function markerAddAfter(marker) // called from router.html { if(vismarkers==mapprops.maxmarkers) return false; clearSearchResult(marker); markerAddForm(++vismarkers); for(var m=vismarkers;m>(marker+1);m--) markerCopy(m,m-1); markerClearForm(marker+1); } // // Set this marker as the home location. // function markerHome(marker) // called from router.html { if(!routino.point[marker].used) { markerMoveHome(marker); } else { clearSearchResult(marker); markerSetClearHome(marker,!routino.point[marker].home); } } // // Set this marker as the current location. // function markerLocate(marker) // called from router.html { clearSearchResult(marker); function success(position) { formSetCoords(marker,position.coords.longitude,position.coords.latitude); markerAddMap(marker); } function failure(error) { alert("Error: " + error.message); } if(navigator.geolocation) navigator.geolocation.getCurrentPosition(success,failure); else alert("Error: Geolocation unavailable"); } // // Update the search buttons enable/disable. // function updateSearchButtons() { var markersactive=0; for(var m=1;m<=vismarkers;m++) if(routino.point[m].active) markersactive++; if(markersactive<2) { document.getElementById("shortest1").disabled="disabled"; document.getElementById("quickest1").disabled="disabled"; document.getElementById("shortest2").disabled="disabled"; document.getElementById("quickest2").disabled="disabled"; } else { document.getElementById("shortest1").disabled=""; document.getElementById("quickest1").disabled=""; document.getElementById("shortest2").disabled=""; document.getElementById("quickest2").disabled=""; } } // // Update an icon to set colours and home or normal marker. // function updateIcon(marker) { if(routino.point[marker].home) { if(routino.point[marker].active) document.getElementById("icon" + marker).src="icons/marker-home-red.png"; else document.getElementById("icon" + marker).src="icons/marker-home-grey.png"; markers[marker].style.externalGraphic="icons/marker-home-red.png"; } else { if(routino.point[marker].active) document.getElementById("icon" + marker).src="icons/marker-" + marker + "-red.png"; else document.getElementById("icon" + marker).src="icons/marker-" + marker + "-grey.png"; markers[marker].style.externalGraphic="icons/marker-" + marker + "-red.png"; } layerVectors.drawFeature(markers[marker]); } // // Move the marker to the home location // function markerMoveHome(marker) { if(homelon===null || homelat===null) return; routino.point[marker].home=true; routino.point[marker].used=true; formSetCoords(marker,homelon,homelat); markerAddMap(marker); } // // Set or clear the home marker icon // function markerSetClearHome(marker,home) { var cookie; var date = new Date(); if(home) { homelat=format5f(routino.point[marker].lat); homelon=format5f(routino.point[marker].lon); cookie="Routino-home=lon:" + homelon + ":lat:" + homelat; date.setUTCFullYear(date.getUTCFullYear()+5); routino.point[marker].home=true; } else { homelat=null; homelon=null; cookie="Routino-home=unset"; date.setUTCFullYear(date.getUTCFullYear()-1); routino.point[marker].home=false; } document.cookie=cookie + ";expires=" + date.toGMTString(); updateIcon(marker); for(var m=1;m<=mapprops.maxmarkers;m++) markerCheckHome(m); } // // Check if a marker is the home marker // function markerCheckHome(marker) { var home=routino.point[marker].home; if(routino.point[marker].lon==homelon && routino.point[marker].lat==homelat) routino.point[marker].home=true; else routino.point[marker].home=false; if(home!=routino.point[marker].home) updateIcon(marker); } // // Move this marker up. // function markerMoveUp(marker) // called from router.html { if(marker==1) { for(var m=1;m1;m--) markerSwap(m,m-1); } else markerSwap(marker,marker+1); } // // Copy a marker from one place to another. // function markerCopy(marker1,marker2) { for(var element in routino.point[marker2]) routino.point[marker1][element]=routino.point[marker2][element]; document.getElementById("search" + marker1).style.display=document.getElementById("search" + marker2).style.display; document.getElementById("coords" + marker1).style.display=document.getElementById("coords" + marker2).style.display; document.forms["form"].elements["search" + marker1].value=document.forms["form"].elements["search" + marker2].value; formSetCoords(marker1,routino.point[marker1].lon,routino.point[marker1].lat); markerAddRemoveMap(marker1,routino.point[marker1].active); } // // Swap a pair of markers. // function markerSwap(marker1,marker2) { for(var element in routino.point[marker2]) { var temp=routino.point[marker1][element]; routino.point[marker1][element]=routino.point[marker2][element]; routino.point[marker2][element]=temp; } var search_display=document.getElementById("search" + marker1).style.display; document.getElementById("search" + marker1).style.display=document.getElementById("search" + marker2).style.display; document.getElementById("search" + marker2).style.display=search_display; var coords_display=document.getElementById("coords" + marker1).style.display; document.getElementById("coords" + marker1).style.display=document.getElementById("coords" + marker2).style.display; document.getElementById("coords" + marker2).style.display=coords_display; var search_value=document.forms["form"].elements["search" + marker1].value; document.forms["form"].elements["search" + marker1].value=document.forms["form"].elements["search" + marker2].value; document.forms["form"].elements["search" + marker2].value=search_value; formSetCoords(marker1,routino.point[marker1].lon,routino.point[marker1].lat); formSetCoords(marker2,routino.point[marker2].lon,routino.point[marker2].lat); markerAddRemoveMap(marker1,routino.point[marker1].active); markerAddRemoveMap(marker2,routino.point[marker2].active); } // // Reverse the markers. // function markersReverse() // called from router.html { for(var marker=1;marker<=vismarkers/2;marker++) markerSwap(marker,vismarkers+1-marker); markersmoved=true; updateURLs(); } // // Close the loop. // function markersLoop() // called from router.html { if(vismarkers==mapprops.maxmarkers) return false; if(routino.point[vismarkers].lon==routino.point[1].lon && routino.point[vismarkers].lat==routino.point[1].lat) { if(routino.point[vismarkers].active) return false; else { markerToggleMap(vismarkers); return true; } } if(routino.point[vismarkers].used) markerAddForm(++vismarkers); markerCopy(vismarkers,1); markersmoved=true; updateURLs(); updateSearchButtons(); } // // Display the form for a marker // function markerAddForm(marker) { document.getElementById("waypoint" + marker).style.display=""; } // // Hide the form for a marker // function markerRemoveForm(marker) { document.getElementById("waypoint" + marker).style.display="none"; markerClearForm(marker); } // // Clear the form for a marker // function markerClearForm(marker) { markerRemoveMap(marker); markerCoords(marker); formSetCoords(marker,"",""); formSetSearch(marker,""); updateIcon(marker); routino.point[marker].used=false; routino.point[marker].home=false; routino.point[marker].active=false; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////// Route results handling //////////////////////////// //////////////////////////////////////////////////////////////////////////////// var route_light_colours={shortest: "#60C060", quickest: "#6060C0"}; var route_dark_colours ={shortest: "#408040", quickest: "#404080"}; var highlights={shortest: null, quickest: null}; var popups={shortest: null, quickest: null}; var routepoints={shortest: {}, quickest: {}}; var gpx_style={shortest: null, quickest: null}; // // Highlight a specific item in the route // function highlight(type,line,action) { if(action == "clear") { highlights[type].style.display = "none"; drawPopup(type,null); } else if(action == "zoom") { var lonlat = new OpenLayers.LonLat(routepoints[type][line].lon,routepoints[type][line].lat); lonlat.transform(epsg4326,epsg900913); map.moveTo(lonlat,map.numZoomLevels-2); } else { // Marker var lonlat = new OpenLayers.LonLat(routepoints[type][line].lon,routepoints[type][line].lat); lonlat.transform(epsg4326,epsg900913); highlights[type].move(lonlat); if(highlights[type].style.display == "none") highlights[type].style.display = ""; // Popup drawPopup(type,"" + routepoints[type][line].html + "
"); } layerVectors.drawFeature(highlights[type]); } // // Create a popup - independent of map because want it fixed on screen not fixed on map. // function createPopup(type) { var popup=document.createElement("div"); popup.className = "popup"; popup.innerHTML = ""; popup.style.display = "none"; popup.style.position = "fixed"; popup.style.top = "-4000px"; popup.style.left = "-4000px"; popup.style.zIndex = "100"; popup.style.padding = "5px"; popup.style.opacity=0.85; popup.style.backgroundColor=route_light_colours[type]; popup.style.border="4px solid " + route_dark_colours[type]; document.body.appendChild(popup); return(popup); } // // Draw a popup - independent of map because want it fixed on screen not fixed on map. // function drawPopup(type,html) { var popup=popups[type]; if(html===null) { popup.style.display="none"; return; } if(popup.style.display=="none") { var map_div=document.getElementById("map"); popup.style.left =map_div.offsetParent.offsetLeft+map_div.offsetLeft+60 + "px"; popup.style.top = map_div.offsetTop +30 + "px"; popup.style.width =map_div.clientWidth-120 + "px"; popup.style.display=""; } var close="X"; popup.innerHTML=close+html; } // // Remove a GPX trace // function removeGPXTrace(type) { map.removeLayer(layerGPX[type]); layerGPX[type].destroy(); layerGPX[type]=null; displayStatus(type,"no_info"); document.getElementById(type + "_links").style.display = "none"; document.getElementById(type + "_route").innerHTML = ""; hideshow_hide(type); } //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Server handling //////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // // Define an AJAX request object // function ajaxGET(url,success,failure,state) { var ajaxRequest=new XMLHttpRequest(); function ajaxGOT(options) { if(this.readyState==4) if(this.status==200) { if(typeof(options.success)=="function") options.success(this,options.state); } else { if(typeof(options.failure)=="function") options.failure(this,options.state); } } ajaxRequest.onreadystatechange = function(){ ajaxGOT.call(ajaxRequest,{success: success, failure: failure, state: state}); }; ajaxRequest.open("GET", url, true); ajaxRequest.send(null); } // // Display data statistics // function displayStatistics() // called from router.html { // Use AJAX to get the statistics ajaxGET("statistics.cgi", runStatisticsSuccess); } // // Success in running data statistics generation. // function runStatisticsSuccess(response) { document.getElementById("statistics_data").innerHTML="
" + response.responseText + "
"; document.getElementById("statistics_link").style.display="none"; } // // Submit form - perform the routing // function findRoute(type) // called from router.html { tab_select("results"); hideshow_hide("help_options"); hideshow_hide("shortest"); hideshow_hide("quickest"); displayStatus("result","running"); var url="router.cgi" + "?" + buildURLArguments(true) + ";type=" + type; // Destroy the existing layer(s) highlight("shortest",-1,"clear"); highlight("quickest",-1,"clear"); if(markersmoved || paramschanged) { if(layerGPX.shortest!==null) removeGPXTrace("shortest"); if(layerGPX.quickest!==null) removeGPXTrace("quickest"); markersmoved=false; paramschanged=false; } else if(layerGPX[type]!==null) removeGPXTrace(type); // Use AJAX to run the router routing_type=type; ajaxGET(url, runRouterSuccess, runRouterFailure); } // // Success in running router. // function runRouterSuccess(response) { var lines=response.responseText.split("\n"); var uuid=lines[0]; var success=lines[1]; var link; // Update the status message if(success=="ERROR") { displayStatus("result","error"); hideshow_show("help_route"); link=document.getElementById("router_log_error"); link.href="results.cgi?uuid=" + uuid + ";type=router;format=log"; return; } else { displayStatus("result","complete"); hideshow_hide("help_route"); link=document.getElementById("router_log_complete"); link.href="results.cgi?uuid=" + uuid + ";type=router;format=log"; } // Update the routing result message link=document.getElementById(routing_type + "_html"); link.href="results.cgi?uuid=" + uuid + ";type=" + routing_type + ";format=html"; link=document.getElementById(routing_type + "_gpx_track"); link.href="results.cgi?uuid=" + uuid + ";type=" + routing_type + ";format=gpx-track"; link=document.getElementById(routing_type + "_gpx_route"); link.href="results.cgi?uuid=" + uuid + ";type=" + routing_type + ";format=gpx-route"; link=document.getElementById(routing_type + "_text_all"); link.href="results.cgi?uuid=" + uuid + ";type=" + routing_type + ";format=text-all"; link=document.getElementById(routing_type + "_text"); link.href="results.cgi?uuid=" + uuid + ";type=" + routing_type + ";format=text"; document.getElementById(routing_type + "_links").style.display = ""; // Add a GPX layer var url="results.cgi?uuid=" + uuid + ";type=" + routing_type + ";format=gpx-track"; layerGPX[routing_type] = new OpenLayers.Layer.Vector("GPX (" + routing_type + ")", { displayInLayerSwitcher: false, protocol: new OpenLayers.Protocol.HTTP({url: url, format: new OpenLayers.Format.GPX()}), strategies: [new OpenLayers.Strategy.Fixed()], style: gpx_style[routing_type], projection: map.displayProjection }); map.addLayer(layerGPX[routing_type]); hideshow_show(routing_type); displayResult(routing_type,uuid); } // // Failure in running router. // function runRouterFailure(response) { displayStatus("result","failed"); } // // Display the status // function displayStatus(type,subtype,content) { var child=document.getElementById(type + "_status").firstChild; do { if(child.id !== undefined) child.style.display="none"; child=child.nextSibling; } while(child !== null); var chosen_status=document.getElementById(type + "_status_" + subtype); chosen_status.style.display=""; if(content !== undefined) chosen_status.innerHTML=content; } // // Display the route // function displayResult(type,uuid) { routing_type = type; // Add the route var url="results.cgi?uuid=" + uuid + ";type=" + routing_type + ";format=html"; // Use AJAX to get the route ajaxGET(url, getRouteSuccess, getRouteFailure); } // // Success in getting route. // function getRouteSuccess(response) { var lines=response.responseText.split("\n"); routepoints[routing_type]=[]; var points=routepoints[routing_type]; var table=0; var point=0; var total_table,total_word; for(var line=0;line")) table=1; else continue; } if(thisline.match("
")) break; if(thisline.match("")) { var rowtype=RegExp.$1; if(rowtype=="c") { thisline.match(": *([-0-9.]+) *([-0-9.]+)"); points[point]={lat: Number(RegExp.$1), lon: Number(RegExp.$2), html: "", highway: "", distance: "", total: ""}; point++; } else if(rowtype=="n") { points[point-1].html += thisline; } else if(rowtype=="s") { thisline.match("([^<]+)"); points[point-1].highway = RegExp.$1; thisline.match("([^<]+)"); points[point-1].distance = RegExp.$1; thisline.match("([^<]+)"); points[point-1].total = RegExp.$1; thisline.match("^(.*)."); points[point-1].html += RegExp.$1; } else if(rowtype=="t") { points[point-1].html += thisline; thisline.match("([^<]+)"); points[point-1].total = RegExp.$1; thisline.match("(.*)"); points[point-1].highway = RegExp.$1; } } } displayStatus(routing_type,"info",points[point-1].total.bold()); var result=""; for(var p=0;p" + "
#" + (p+1) + "" + points[p].highway; } result=result + "
"; document.getElementById(routing_type + "_route").innerHTML=result; } // // Failure in getting route. // function getRouteFailure(response) { document.getElementById(routing_type + "_route").innerHTML = ""; } // // Perform a search // function DoSearch(marker) { // Use AJAX to get the search result var search=routino.point[marker].search; var mapbounds=map.getExtent().clone(); mapbounds.transform(epsg900913,epsg4326); var url="search.cgi"; url=url + "?marker=" + marker; url=url + ";lonmin=" + format5f(mapbounds.left); url=url + ";latmin=" + format5f(mapbounds.bottom); url=url + ";lonmax=" + format5f(mapbounds.right); url=url + ";latmax=" + format5f(mapbounds.top); url=url + ";search=" + encodeURIComponent(search); ajaxGET(url,runSearchSuccess); } var searchresults=[]; // // Success in running search. // function runSearchSuccess(response) { var lines=response.responseText.split("\n"); var marker=lines[0]; var cpuinfo=lines[1]; // not used var message=lines[2]; if(message !== "") { alert(message); return; } searchresults[marker]=[]; for(var line=3;line"; for(var n=0;n0) innerHTML+="
"; innerHTML+="" + searchresults[marker][n].name + ""; } results.innerHTML=innerHTML; results.style.display=""; } } // // Display search results. // function choseSearchResult(marker,n) { if(n>=0) { formSetSearch(marker,searchresults[marker][n].name); formSetCoords(marker,searchresults[marker][n].lon,searchresults[marker][n].lat); markerAddMap(marker); } } // // Clear search results. // function clearSearchResult(marker) { document.getElementById("searchresults" + marker).style.display="none"; } routino-3.2/web/www/routino/router.html.nl 644 233 144 76301 13061246455 14200 0 Routino : Route Planner for OpenStreetMap Data
Opties Resultaten Data
Routino OpenStreetMap Router Zoom naar straatniveau. Selecteer start- and eindpunten onder Coordinaten. (click op het marker icoon links, schuif het op map naar gewenste positie).
+ - Coordinaten
Close loop:
Keer volgorde punten om:
Zoek Route
+ - Transport Type
Te voet:
Paard:
Rolstoel:
Fiets:
Brommer:
Motorfiets:
Auto:
Goederen:
Zwaar transport:
Publiek transport:
+ - Voorkeur Wegtype
+ - Snelheidslimieten
+ - Weg Eigenschappen
+ - Andere Beperkingen
+ - Help
Quick Start
Click op marker-icoontje (Waypoints) om ze op de map te plaatsen (rechts). Sleep ze vervolgens naar de gewenste positie. Het is best om eerst naar straat niveau te zoomen op de kaart. Selecteer het transport type, toegestane weg-types, snelheidslimieten, wegeigenschappen en andere restricties uit de opties. Selecteer "Kortste" of "Snelste" om de route te berekenen en te tekenen op de map.

Coordinaten (Waypoints)
Click op het marker icoontje, nog eens clicken voor aan/uit. Wanneer de route berekend wordt, zal dit nauwkeurig aansluiten bij de volgorde van deze punten. (rekening houdend met transport type)

Transport Type
Wanneer je een bepaald transport type kiest wordt bij berekenen route hiermede rekening gehouden. Het transport type bestaat uit een lijst met default waarden voor ieder wegtype. Deze percentages kunnen ook nog eens manueel aangepast worden.

Voorkeur Wegtype
De voorkeur voor een bepaald type weg wordt uitgedrukt in een percentage. Bijvoorbeeld wanneer u het Transport Type "Fiets" kiest, dan zal er voor Autostrade 0% staan, en voor Fietspad 100%. Wanneer u Autowegen, Nationale wegen wil vermijden of beperken bij het maken van een fietsroute, kan u percentage naar beneden aanpassen.

Snelheid limieten
De snelheidslimieten worden afgeleid van het type weg. Het is mogelijk dat er voor een bepaalde weg andere beperkingen gelden. In dat geval worden die gekoezen. (het geval dat deze lager zijn dan de default)

Weg Eigenschappen
Voor het berekenen van de route, kan de de voorkeur gegeven worden aan een bepaalde wegeigenschap. Wanneer u kiest voor 25% verhard, zal er automatisch de voorkeur aan 75% onverhard worden gegeven. Ook al is het onverharde stuk 3 X langer, toch kan er dan de voorkeur aan gegeven worden.

Andere Beperkingen
Deze zullen toelaten dat er een route berekend wordt die rekening houdt met gewicht, hoogte, breedte of lengte. Het is ook mogelijk geen rekening te houden met eenrichtingsverkeer (bijvoorbeeld als voetganger of fietser)

Router: Routino | Geo Data: | Tiles:
routino-3.2/web/www/routino/profiles.js 644 233 144 15601 13061246451 13533 0//////////////////////////////////////////////////////////////////////////////// /////////////////////////// Routino default profile //////////////////////////// //////////////////////////////////////////////////////////////////////////////// var routino={ // contains all default Routino options (generated using "--help-profile-json"). // Default transport type transport: "motorcar", // Transport types transports: { foot: 1, horse: 2, wheelchair: 3, bicycle: 4, moped: 5, motorcycle: 6, motorcar: 7, goods: 8, hgv: 9, psv: 10 }, // Highway types highways: { motorway: 1, trunk: 2, primary: 3, secondary: 4, tertiary: 5, unclassified: 6, residential: 7, service: 8, track: 9, cycleway: 10, path: 11, steps: 12, ferry: 13 }, // Property types properties: { paved: 1, multilane: 2, bridge: 3, tunnel: 4, footroute: 5, bicycleroute: 6 }, // Restriction types restrictions: { oneway: 1, turns: 2, weight: 3, height: 4, width: 5, length: 6 }, // Allowed highways profile_highway: { motorway: { foot: 0, horse: 0, wheelchair: 0, bicycle: 0, moped: 0, motorcycle: 100, motorcar: 100, goods: 100, hgv: 100, psv: 100 }, trunk: { foot: 40, horse: 25, wheelchair: 40, bicycle: 30, moped: 90, motorcycle: 100, motorcar: 100, goods: 100, hgv: 100, psv: 100 }, primary: { foot: 50, horse: 50, wheelchair: 50, bicycle: 70, moped: 100, motorcycle: 90, motorcar: 90, goods: 90, hgv: 90, psv: 90 }, secondary: { foot: 60, horse: 50, wheelchair: 60, bicycle: 80, moped: 90, motorcycle: 80, motorcar: 80, goods: 80, hgv: 80, psv: 80 }, tertiary: { foot: 70, horse: 75, wheelchair: 70, bicycle: 90, moped: 80, motorcycle: 70, motorcar: 70, goods: 70, hgv: 70, psv: 70 }, unclassified: { foot: 80, horse: 75, wheelchair: 80, bicycle: 90, moped: 70, motorcycle: 60, motorcar: 60, goods: 60, hgv: 60, psv: 60 }, residential: { foot: 90, horse: 75, wheelchair: 90, bicycle: 90, moped: 60, motorcycle: 50, motorcar: 50, goods: 50, hgv: 50, psv: 50 }, service: { foot: 90, horse: 75, wheelchair: 90, bicycle: 90, moped: 50, motorcycle: 40, motorcar: 40, goods: 40, hgv: 40, psv: 40 }, track: { foot: 95, horse: 100, wheelchair: 95, bicycle: 90, moped: 0, motorcycle: 0, motorcar: 0, goods: 0, hgv: 0, psv: 0 }, cycleway: { foot: 95, horse: 90, wheelchair: 95, bicycle: 100, moped: 0, motorcycle: 0, motorcar: 0, goods: 0, hgv: 0, psv: 0 }, path: { foot: 100, horse: 100, wheelchair: 100, bicycle: 90, moped: 0, motorcycle: 0, motorcar: 0, goods: 0, hgv: 0, psv: 0 }, steps: { foot: 80, horse: 0, wheelchair: 0, bicycle: 0, moped: 0, motorcycle: 0, motorcar: 0, goods: 0, hgv: 0, psv: 0 }, ferry: { foot: 20, horse: 20, wheelchair: 20, bicycle: 20, moped: 20, motorcycle: 20, motorcar: 20, goods: 20, hgv: 20, psv: 20 } }, // Speed limits profile_speed: { motorway: { foot: 0, horse: 0, wheelchair: 0, bicycle: 0, moped: 48, motorcycle: 112, motorcar: 112, goods: 96, hgv: 89, psv: 89 }, trunk: { foot: 4, horse: 8, wheelchair: 4, bicycle: 20, moped: 48, motorcycle: 96, motorcar: 96, goods: 96, hgv: 80, psv: 80 }, primary: { foot: 4, horse: 8, wheelchair: 4, bicycle: 20, moped: 48, motorcycle: 96, motorcar: 96, goods: 96, hgv: 80, psv: 80 }, secondary: { foot: 4, horse: 8, wheelchair: 4, bicycle: 20, moped: 48, motorcycle: 88, motorcar: 88, goods: 88, hgv: 80, psv: 80 }, tertiary: { foot: 4, horse: 8, wheelchair: 4, bicycle: 20, moped: 48, motorcycle: 80, motorcar: 80, goods: 80, hgv: 80, psv: 80 }, unclassified: { foot: 4, horse: 8, wheelchair: 4, bicycle: 20, moped: 48, motorcycle: 64, motorcar: 64, goods: 64, hgv: 64, psv: 64 }, residential: { foot: 4, horse: 8, wheelchair: 4, bicycle: 20, moped: 48, motorcycle: 48, motorcar: 48, goods: 48, hgv: 48, psv: 48 }, service: { foot: 4, horse: 8, wheelchair: 4, bicycle: 20, moped: 32, motorcycle: 32, motorcar: 32, goods: 32, hgv: 32, psv: 32 }, track: { foot: 4, horse: 8, wheelchair: 4, bicycle: 20, moped: 16, motorcycle: 16, motorcar: 16, goods: 16, hgv: 16, psv: 16 }, cycleway: { foot: 4, horse: 8, wheelchair: 4, bicycle: 20, moped: 0, motorcycle: 0, motorcar: 0, goods: 0, hgv: 0, psv: 0 }, path: { foot: 4, horse: 8, wheelchair: 4, bicycle: 20, moped: 0, motorcycle: 0, motorcar: 0, goods: 0, hgv: 0, psv: 0 }, steps: { foot: 4, horse: 0, wheelchair: 4, bicycle: 0, moped: 0, motorcycle: 0, motorcar: 0, goods: 0, hgv: 0, psv: 0 }, ferry: { foot: 10, horse: 10, wheelchair: 10, bicycle: 10, moped: 10, motorcycle: 10, motorcar: 10, goods: 10, hgv: 10, psv: 10 } }, // Highway properties profile_property: { paved: { foot: 50, horse: 20, wheelchair: 90, bicycle: 50, moped: 100, motorcycle: 100, motorcar: 100, goods: 100, hgv: 100, psv: 100 }, multilane: { foot: 25, horse: 25, wheelchair: 25, bicycle: 25, moped: 35, motorcycle: 60, motorcar: 60, goods: 60, hgv: 60, psv: 60 }, bridge: { foot: 50, horse: 50, wheelchair: 50, bicycle: 50, moped: 50, motorcycle: 50, motorcar: 50, goods: 50, hgv: 50, psv: 50 }, tunnel: { foot: 50, horse: 50, wheelchair: 50, bicycle: 50, moped: 50, motorcycle: 50, motorcar: 50, goods: 50, hgv: 50, psv: 50 }, footroute: { foot: 55, horse: 50, wheelchair: 55, bicycle: 50, moped: 50, motorcycle: 50, motorcar: 45, goods: 45, hgv: 45, psv: 45 }, bicycleroute: { foot: 55, horse: 50, wheelchair: 55, bicycle: 60, moped: 50, motorcycle: 50, motorcar: 45, goods: 45, hgv: 45, psv: 45 } }, // Restrictions profile_restrictions: { oneway: { foot: 0, horse: 1, wheelchair: 0, bicycle: 1, moped: 1, motorcycle: 1, motorcar: 1, goods: 1, hgv: 1, psv: 1 }, turns: { foot: 0, horse: 1, wheelchair: 0, bicycle: 1, moped: 1, motorcycle: 1, motorcar: 1, goods: 1, hgv: 1, psv: 1 }, weight: { foot: 0.0, horse: 0.0, wheelchair: 0.0, bicycle: 0.0, moped: 0.0, motorcycle: 0.0, motorcar: 0.0, goods: 5.0, hgv: 10.0, psv: 15.0 }, height: { foot: 0.0, horse: 0.0, wheelchair: 0.0, bicycle: 0.0, moped: 0.0, motorcycle: 0.0, motorcar: 0.0, goods: 2.5, hgv: 3.0, psv: 3.0 }, width: { foot: 0.0, horse: 0.0, wheelchair: 0.0, bicycle: 0.0, moped: 0.0, motorcycle: 0.0, motorcar: 0.0, goods: 2.0, hgv: 2.5, psv: 2.5 }, length: { foot: 0.0, horse: 0.0, wheelchair: 0.0, bicycle: 0.0, moped: 0.0, motorcycle: 0.0, motorcar: 0.0, goods: 5.0, hgv: 6.0, psv: 6.0 } } }; // end of routino variable routino-3.2/web/www/routino/router.pl 644 233 144 12263 12767517277 13253 0# # Routino generic router Perl script # # Part of the Routino routing software. # # This file Copyright 2008-2016 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use strict; # Use the directory paths script require "./paths.pl"; # Load the profiles variables require "./profiles.pl"; # Use the perl Time::HiRes module use Time::HiRes qw(gettimeofday tv_interval); my $t0 = [gettimeofday]; # # Fill in the default parameters using the ones above (don't use executable compiled in defaults) # sub FillInDefaults { my(%params)=@_; $params{transport}=$main::routino->{transport} if(!defined $params{transport}); my $transport=$params{transport}; foreach my $highway (keys %{$main::routino->{highways}}) { my $key="highway-$highway"; my $value=$main::routino->{profile_highway}->{$highway}->{$transport}; $params{$key}=$value if(!defined $params{$key}); $key="speed-$highway"; $value=$main::routino->{profile_speed}->{$highway}->{$transport}; $params{$key}=$value if(!defined $params{$key}); } foreach my $property (keys %{$main::routino->{properties}}) { my $key="property-$property"; my $value=$main::routino->{profile_property}->{$property}->{$transport}; $params{$key}=$value if(!defined $params{$key}); } $params{oneway} =~ s/(true|on)/1/; $params{oneway} =~ s/(false|off)/0/; $params{turns} =~ s/(true|on)/1/; $params{turns} =~ s/(false|off)/0/; $params{loop} =~ s/(true|on)/1/; $params{loop} =~ s/(false|off)/0/; $params{reverse} =~ s/(true|on)/1/; $params{reverse} =~ s/(false|off)/0/; foreach my $restriction (keys %{$main::routino->{restrictions}}) { my $key="$restriction"; my $value=$main::routino->{profile_restrictions}->{$restriction}->{$transport}; $params{$key}=$value if(!defined $params{$key}); } return %params; } # # Run the router # sub RunRouter { my($optimise,%params)=@_; # Combine all of the parameters together my $params="--$optimise"; foreach my $key (keys %params) { $params.=" --$key=$params{$key}"; } # Change directory mkdir $main::results_dir,0755 if(! -d $main::results_dir); chdir $main::results_dir; # Create a unique output directory my $uuid; if($^O eq "darwin") { chomp($uuid=`echo '$params' $$ | md5 | cut -f1 '-d '`); } else { chomp($uuid=`echo '$params' $$ | md5sum | cut -f1 '-d '`); } mkdir $uuid; chmod 0775, $uuid; chdir $uuid; # Run the router my $safe_params =""; if($main::data_dir) { my @pathparts=split('/',$main::data_dir); $safe_params.=" --dir=".pop(@pathparts); } # This works in newer Perl versions, but not older ones. #$safe_params.=" --dir=".pop([split('/',$main::data_dir)]) if($main::data_dir); $safe_params.=" --prefix=$main::data_prefix" if($main::data_prefix); open(LOG,">router.log"); print LOG "$main::router_exe $params$safe_params\n\n"; # Don't put the full pathnames in the logfile. close(LOG); $params.=" --dir=$main::data_dir" if($main::data_dir); $params.=" --prefix=$main::data_prefix" if($main::data_prefix); $params.=" --loggable"; system "$main::bin_dir/$main::router_exe $params >> router.log 2>&1"; my $status="OK"; $status="ERROR" if($? != 0); my(undef,undef,$cuser,$csystem) = times; open(LOG,">>router.log"); printf LOG "\nTime: %.3f CPU / %.3f elapsed\n",$cuser+$csystem,tv_interval($t0); close(LOG); # Return the results return($uuid,$status); } # # Return the output file # # Possible file formats my %suffixes=( "html" => ".html", "gpx-route" => "-route.gpx", "gpx-track" => "-track.gpx", "text" => ".txt", "text-all" => "-all.txt", "log" => ".log" ); # Possible MIME types my %mimetypes=( "html" => "text/html", "gpx-route" => "text/xml", "gpx-track" => "text/xml", "text" => "text/plain", "text-all" => "text/plain", "log" => "text/plain" ); sub ReturnOutput { my($uuid,$type,$format)=@_; if($type eq "router") { $format="log" } my $suffix=$suffixes{$format}; my $mime =$mimetypes{$format}; my $file="$main::results_dir/$uuid/$type$suffix"; # Return the output if(!$type || !$uuid || !$format || ! -f $file) { print header('text/plain','404 Not found'); print "Not Found!\n"; } else { print header($mime); system "cat $file"; } } 1; routino-3.2/web/www/routino/router.css 644 233 144 11366 13033250176 13406 0/* // Routino router web page style sheet. // // Part of the Routino routing software. // // This file Copyright 2008-2017 Andrew M. Bishop // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . */ /*--------------------------------*/ /* Left panel - override defaults */ /*--------------------------------*/ DIV.hideshow_box { overflow-x: auto; } /*------------------------------*/ /* Left panel - generic options */ /*------------------------------*/ DIV.scrollable { overflow: auto; height: 20em; } /*-----------------------------------*/ /* Left panel - specific tab options */ /*-----------------------------------*/ DIV#tab_options_div DIV.waypoint { clear: both; } DIV#tab_options_div DIV.waypoint SPAN { vertical-align: 50%; } DIV#tab_options_div DIV.waypoint DIV.waypoint-buttons { float: right; } DIV#tab_options_div DIV.waypoint IMG { cursor: pointer; } DIV#tab_options_div DIV.waypoint IMG.waypoint-icon { cursor: move; } DIV#tab_options_div DIV.waypoint IMG:hover { background: #F0F000; } DIV#tab_options_div DIV#waypoints-buttons { clear: both; } DIV#tab_options_div DIV#waypoints-buttons TABLE { float: left; } DIV#tab_options_div DIV#waypoints-buttons DIV.waypoint-buttons { float: right; text-align: center; vertical-align: 50%; } DIV#tab_options_div DIV#waypoints-buttons IMG { cursor: pointer; } DIV#tab_options_div DIV#waypoints-buttons IMG:hover { background: #F0F000; } DIV#tab_options_div TABLE { padding: 0; border: 0 hidden; margin: 0; } DIV#tab_options_div TABLE TD { padding: 0; border: 0; margin: 0; } DIV#tab_options_div DIV.center { text-align: center; } DIV#tab_options_div A:hover { background: #F0F000; } DIV#tab_options_div INPUT, DIV#tab_results_div INPUT { padding: 0; border: 1px solid; margin: 0; } DIV#tab_options_div INPUT[type="text"] { text-align: right; } DIV#tab_options_div INPUT[size="18"] { text-align: left; } DIV#tab_options_div INPUT:hover { background: #F0F0C0; } DIV#tab_options_div INPUT#shortest1, DIV#tab_results_div INPUT#shortest2 { margin: 3px; border: 3px solid; border-color: #00FF00; background: #C0F0C0; text-align: center; } DIV#tab_options_div INPUT#shortest1:hover, DIV#tab_results_div INPUT#shortest2:hover { background: #F0F000; } DIV#tab_options_div INPUT[disabled]#shortest1, DIV#tab_results_div INPUT[disabled]#shortest2 { border-color: #004000; background: #E0F0E0; } DIV#tab_options_div INPUT#quickest1, DIV#tab_results_div INPUT#quickest2 { margin: 3px; border: 3px solid; border-color: #0000FF; background: #C0C0F0; text-align: center; } DIV#tab_options_div INPUT#quickest1:hover, DIV#tab_results_div INPUT#quickest2:hover { background: #F0F000; } DIV#tab_options_div INPUT[disabled]#quickest1, DIV#tab_results_div INPUT[disabled]#quickest2 { border-color: #000040; background: #E0E0F0; } DIV#tab_results_div TABLE { border-collapse: collapse; border: hidden; } DIV#tab_results_div TD.distance { text-align: left; } DIV#tab_results_div TD.highway { text-align: left; padding-left: 10px; } DIV#tab_results_div DIV#shortest_links A:hover { background: #C0F0C0; } DIV#tab_results_div DIV#shortest_route TR:hover { cursor: pointer; background: #C0F0C0; } DIV#tab_results_div DIV#quickest_links A:hover { background: #C0C0F0; } DIV#tab_results_div DIV#quickest_route TR:hover { cursor: pointer; background: #C0C0F0; } /*-------------------------------------------------*/ /* Popup - using the styles defined in HTML output */ /*-------------------------------------------------*/ DIV.popup table {table-layout: fixed; border: none; border-collapse: collapse;} DIV.popup tr {border: 0px;} DIV.popup tr.c {display: none;} /* coords */ DIV.popup tr.n {} /* node */ DIV.popup tr.s {} /* segment */ DIV.popup tr.t {font-weight: bold;} /* total */ DIV.popup td.l {font-weight: bold;} DIV.popup td.r {} DIV.popup span.w {font-weight: bold;} /* waypoint */ DIV.popup span.h {text-decoration: underline;} /* highway */ DIV.popup span.d {} /* segment distance */ DIV.popup span.j {font-style: italic;} /* total journey distance */ DIV.popup span.t {font-variant: small-caps;} /* turn */ DIV.popup span.b {font-variant: small-caps;} /* bearing */ routino-3.2/web/www/routino/router.cgi 755 233 144 5706 12767517350 13361 0#!/usr/bin/perl # # Routino interactive router CGI # # Part of the Routino routing software. # # This file Copyright 2008-2014, 2016 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use strict; # Use the generic router script require "./router.pl"; # Use the perl CGI module use CGI ':cgi'; # Create the query and get the parameters my $query=new CGI; my @rawparams=$query->param; # Legal CGI parameters with regexp validity check my %legalparams=( "lon[1-9][0-9]*" => "[-0-9.]+", "lat[1-9][0-9]*" => "[-0-9.]+", "heading" => "[-0-9.]+", "transport" => "[a-z]+", "highway-[a-z]+" => "[0-9.]+", "speed-[a-z]+" => "[0-9.]+", "property-[a-z]+" => "[0-9.]+", "oneway" => "(1|0|true|false|on|off)", "turns" => "(1|0|true|false|on|off)", "weight" => "[0-9.]+", "height" => "[0-9.]+", "width" => "[0-9.]+", "length" => "[0-9.]+", "length" => "[0-9.]+", "language" => "[-a-zA-Z]+", "type" => "(shortest|quickest)", "format" => "(html|gpx-route|gpx-track|text|text-all)", "reverse" => "(1|0|true|false|on|off)", "loop" => "(1|0|true|false|on|off)" ); # Validate the CGI parameters, ignore invalid ones my %cgiparams=(); foreach my $key (@rawparams) { foreach my $test (keys (%legalparams)) { if($key =~ m%^$test$%) { my $value=$query->param($key); if($value =~ m%^$legalparams{$test}$%) { $cgiparams{$key}=$value; last; } } } } # Get the important parameters my $type; my $format; $type=$cgiparams{type}; delete $cgiparams{type}; $type="shortest" if(!$type); $format=$cgiparams{format}; delete $cgiparams{format}; # Fill in the default parameters my %fullparams=FillInDefaults(%cgiparams); # Run the router my($router_uuid,$router_success)=RunRouter($type,%fullparams); # Return the output if($format) { ReturnOutput($router_uuid,$type,$format); } else { print header('text/plain'); print "$router_uuid\n"; print "$router_success\n"; } routino-3.2/web/www/routino/visualiser.css 644 233 144 3165 12260522707 14235 0/* // Routino visualiser web page style sheet. // // Part of the Routino routing software. // // This file Copyright 2008-2013 Andrew M. Bishop // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . */ /*--------------------------------*/ /* Left panel - override defaults */ /*--------------------------------*/ DIV.hideshow_box { overflow-x: auto; } /*-----------------------------------*/ /* Left panel - specific tab options */ /*-----------------------------------*/ DIV#tab_visualiser_div INPUT { padding: 0; border: 1px solid; margin: 0; text-align: center; } DIV#tab_visualiser_div INPUT:hover { background: #F0F0C0; } DIV#tab_visualiser_div TABLE { padding: 0; border: 0 hidden; margin: 0; } DIV#tab_visualiser_div DIV.center { text-align: center; } DIV#tab_visualiser_div TABLE TD { padding: 0; border: 0; margin: 0; } DIV#tab_visualiser_div INPUT { padding: 0; border: 1px solid; margin: 0; } /*-------*/ /* Popup */ /*-------*/ DIV.popup { font-family: monospace; font-size: 10px; } routino-3.2/web/www/routino/maplayout.css 644 233 144 3634 12270724606 14066 0/* // Routino map layout web page style sheet. // // Part of the Routino routing software. // // This file Copyright 2008-2014 Andrew M. Bishop // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . */ /*----------------------------------*/ /* Body HTML formatting */ /*----------------------------------*/ BODY { /* fonts and text styles */ font-family: sans-serif; font-size: 12px; /* colours */ background-color: white; color: black; } /*------------*/ /* Left panel */ /*------------*/ DIV.left_panel { width: 23em; position: absolute; top: 0; bottom: 0; right: auto; left: 0; padding: 3px; } /*-------------*/ /* Right panel */ /*-------------*/ DIV.right_panel { position: fixed; top: 0; bottom: 0; right: 0; left: 23.5em; } DIV.map { position: absolute; top: 0; bottom: 1.5em; right: 0; left: 0; border: 3px solid; text-align: center; } DIV.attribution { position: absolute; top: auto; bottom: 0; right: 0; left: 0; margin: 0px; border: 0px; padding: 0px; text-align: center; white-space: nowrap; overflow: hidden; } /*-----------------------------*/ /* Leaflet base layer selector */ /*-----------------------------*/ FORM.leaflet-control-layers-list { text-align: left; } routino-3.2/web/www/routino/router.html 777 233 144 0 13061246465 16266 2router.html.enroutino-3.2/web/www/routino/router.html.fr 644 233 144 100453 13061246454 14211 0 Routino : Calculateur d'itinéraire pour OpenStreetMap
Options Résultats Données
Calculateur d'itinéraires Routino pour Openstreetmap Cette page web permet de calculer des itinéraires à l'aide des données collectées par OpenStreetMap. Sélectionner les points de départ et d'arrivée (cliquer sur les icones ci-dessous), sélectionner les préférences, puis rechercher un itinéraire.
+ - Étapes de l'itinéraire
Faire une boucle:
Inverser l'ordre:
Rechercher
+ - Mode de déplacement
À pied:
À cheval:
Fauteuil roulant:
Bicyclette:
Cyclomoteur:
Moto:
Voiture:
Camionette:
Camion(15t):
Camion(10t):
+ - Préférences routières
+ - Limitations de vitesse
+ - Préférences des propriétés
+ - Autres Restrictions
+ - Aide
Aide simplifiée
Cliquer sur les icones de balises (ci-dessus) pour les placer sur la carte (droite). Puis les déplacer à la position choisie. Il sera sûrement plus facile de zoomer sur la carte avant de placer les balises. Autre solution, taper la latitude et la longitude dans les cases ci-dessus.

Selectionner le mode de déplacement, les types de voies autorisées, les limitations de vitesse, les propriétés des voies et les autres restrictions dans les options ci-dessus. Selectionner "Le plus court" ou "Le plus rapide" pour calculer l'itinéraire et le visualiser sur la carte.

Etapes
Cliquer sur les balises affichera ou supprimera leur apparition sur la carte. Quand un itinéraire est calculé, il affichera (le plus près possible pour le mode de déplacement sélectionné) chacune des étapes qui ont une balise sur la carte dans l'ordre défini.

Mode de déplacement
Selectionner un mode de déplacement restreindra l'itinéraire choisi aux voies sur lesquelles il est autorisé et définira les valeurs par défaut pour les autres paramètres.

Préferences des voies
La préférence de voies est définie par un pourcentage et des itinéraires sont choisis qui essaient de suivre les voies préferrées. Par exemple, si une voie "Primaire" a une préférence de "110%" et une voie "Secondaire" une préférence de "100%", alors cela signifie qu'un itinéraire sur une voie primaire peut être jusqu'à 10% plus long que sur une voie secondaire et être sélectionné.

Limites de vitesse
Les limites de vitesse choisies ici pour les differents types de voies s'appliquent si la voie n'a pas d'autre limite de vitesse définie ou si celle-ci est supérieure à celle choisie.

Préférences de propriétés
La préférence de propriété est définie par un pourcentage et des itinéraires sont choisis qui essaient de suivre les voies ayant cette propriété préférée. Par exemple, si une voie goudronnée a une préférence de "75%", alors cela signifie que une voie non goudronnée obtient automatiquement une préférence de "25%" ce qui fait que un itinéraire sur une voie goudronnée peut avoir 3 fois la longueur d'une non goudronnée et être sélectionnée.

Autres restrictions
Celles-ci permettent de touver un itinéraire qui respecte les limites définies pour le poids, la hauteur, la largeur ou la longueur. Il est également possible d'ignorer les restrictions de sens unique (e. pour la marche).

Routeur: Routino | Geo Data: | Dalles:
routino-3.2/web/www/routino/icons/ 40755 233 144 0 13061246474 12433 5routino-3.2/web/www/routino/icons/limit-1.png 644 233 144 1750 13061246467 14436 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–AhWÇÿ3qÜ]V ÙœÁ*‹`!ÐSÂ[1éBT0"ˆÛŠà©ÁS{)&xŠ(¥{XpYe¯ân­„‚â¡TXbâAÈ¡ ‹ºë&ûæý=¼yóÞŠ`›^ò]–ï{ß÷ÿý÷ ïÍ€ìŽ~AºûÜ}nZåî·¦ž<ž<þÙ/*¿-Hç”sê«ä®[»n‘äž;{î„/M®×u¿=}›§ëØ SH”%ÇòYòÌ‘3G’•ÿP'SåTùŸ.y±r±B’÷ïÞ¿ËrõéêS’lúMŸ4¹^×ýz^ëÙú˜ý€^Õ«:¯ÉÄÎÄN€Ülÿ±—UÃÒr²0Y É7}oú¤K’¤ø‹ä¤O2`@[¹^úõ¼ÖÓúš§ùÊÈ¡ÜP Ož=y6µ ^þL^Ù{e¯æm–IÞäMÝ ¤8'αCʺ¬“$:¤Éõºî×óZOëkžæ+?è}¶?~IžNžNƆ~#Åñ„$à ánF ’ë\ãZ¼S sa.Ì‘ò†œ•³¦Îõ¨?ž×zZ_ó4¶¡Ã?‘©ÕÔj°ƒlˆ†ˆe¿"Ãóáy¶Ƶ n®XËb™”eY–eËP?Ò;V]ëÅúš§ùÊOdìö¯ä¥k—®ÅÃG­Gýã^€¬É𬙼>_Ÿ¯Ï“+ƒ+ƒ+ƒí³çe¯~xÔð•ŸÈØóïÈâÛâÛxîkRÜ÷Ø!Ùb‹ä"¹HrŽsœ3àÒpi¸4Lz¯âUÈâxq¼8ní¨/|áÛ;éýˆ§ùÊÏ ý8ýøó/€\>—<Ã3gpº)¤´ÐB À f00É$“Úh£ d ™B¦È¼ÌË8•ñä)QFØ:qŠÌQÓgú è ú‚>ÐíÑÐeºL—A°9ØlÑóˆyÄ<uuu`™«ÍÕö©dÄ0ì)ð‘S™2Çâþwþw)sì'õ\=gΜÕº e€Öé:]ãÇRš¹†j@çè“’ÿ©®ÐÀvÕ®ÚSæXÌ?çŸûè{oò;«€JNfÔî˜yfq= £:ŠæOzè"‰o£×ãz˜#B¸A7ݠ造¹b:M'qPÃj0,þ¤Þÿ'ÿ‚ýV.ØÛÅ‚½-Ìì+šðùTJÏIEND®B`‚routino-3.2/web/www/routino/icons/limit-13.png 644 233 144 2366 13061246467 14525 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü«IDATHÇÍ–]H”YÇŸ¡fT4ú¢"$X/b!”UÚ100 ± Ú5"doܺé]$)a[2‚ØD°”>¼1ÈZ‘¥Ä¥P’Õ¼(l³qXGgæœóÛ‹™wÞ·eƒ.=7ÃóœóüÿóÎ3G@DD²’¿î€;àö%bw÷ðØõ["¾¥ÀuØuøåðßðßÈnÏn×SvlÍ[ëõ"¶¾“gå%KìDFOF«47Bõžê=Þ¼D|m2û2ûþ‰ÃÉ{'ïôvôvPó£ó£‹¥‹¥`ÇÖ¼µÞª·ôœúÒø¾xú=ý®9ÈX—±N¶·wþXð×N¨8XqàMÚ›4㵬g½)„±ÆGlÍ'×[õ–ž¥oñ,~Â@nIn‰T«<–y'Q0Õ g¶Ùfñb}@3ͬ‡x8PÇÕqVÁŒ˜\¸ÀŽ­yk½UoéYúÏâ'üȧgÛú-Ty«¼)C¿ƒzªžKºJWKNýÞ§÷¹`Λó©/†þ[¿Óï þ:>Ÿý§Žê(ô%}‰Q5¨cé[<‹/NCù¿@æ|æ|8¦Õ´4å ku-ËXͪ)5¦Ût›nÛ 4Ð 1Ä#ÿ3-´¹”P ¯è+,±ô“¼?á'iìÖ8uñÔÅÔ¾¿r€1ÃfÀ ؼ‘–‘–‘˜Í™Í™Í±ó“žIϤZ;Z;Z;`|f|f|Æž7 xð`XŠ¿‰¿qò,~ÂOÒØøÐê ¥Ê¿cLV§Y¥«\µ…{6ölìÙiá´pZú û û añòâåÅËà{æ{æ{Õ[«·Vo…-f‹Ùb`lÓØ¦±MŽ#ÿ)¶;¶›Õ/ÅOøIñ ù† ¿)Ù_²_DDžËs×Yvovo‘z9+gEðâÅ+"‰HD$o0o0oPÄÔšZS+¢öª½j¯H“·ÉÛä ”Êå"3×g®Ï\‰ª¨Š*±Ç÷¼{^2ëŽÍOúì Ùô$|xûá­óÚ›³`ïPUPí8˜ÌæÃmïmïm¯…ŠBEpdàÈÀ‘œœœ€ñ¬ñ¬ñ,ÇëWíªÝɳø ?ný@?pMŠÄÅ¥ö“+F¦eÚ±CxÄc‡±›±›±›"999"v<Úñh‡Hq]q]qHoYoYo™HîDîDî„È‹®]/ºìzºi¦ÙÁKñ~Ü"áÒpéÄ"ǧʾ·ym^K4yx"R ¶°ï•ï•ï•HÄñGü"eseses"ÙõÙõÙõ"þJ¥¿R¤ànÁÝ‚»"GCGCGCv}ڔܗûMñRü¤Ÿ/½•ôÓK¯}KÅKÅKŰ2±2±2açcccáýØû±÷c ÚT›js´—,²ˆùTÿ³·òú©>V£kì>¬² Dˆ${Qb¤“N:˜sæœ9çhûM‘)vQA€¾¦¯±ÌÊõ±/èü1]£kìÎOYd9£óÓD#`ÌCóø•QF1 t1âjX ;õ?Ûù×ìåš}]¬Ù÷ØÚ|Áþ øè%ÔÇ. IEND®B`‚routino-3.2/web/www/routino/icons/marker-50-grey.png 644 233 144 6230 13061246466 15626 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü MIDATXÃ…—iPT×¶Çÿûôén^CŠ! ‘.¦QPL ƒJ*„ÄĘ¢‘¹%>J S*AˆK‰ ‚Q#úqxƒïŠZXCxD:`ºm éáôÞïÝp˪TÖ—]ûœ}ÖúµþgïuHfffff&\1cú™[Ãòƒü «Ë<—y.óóÌyœó8çñúELÅTL•ÿŸ‚—à%x-ßn®2W™«Ø!”¢¥$D €ô ÀvlÇvvHºAºAº¤ó#ü?r¿”舎èö—dydydy4tæ&ä&ä&QÁWð|É›3ô–Ë•› G8¹ 4‡æÐzË2e™²L¹¯È©Î©Î©¾0dµŒZFëï———-ÿ/Å1Å1Å1Ô._·|Ýòu$=T*+æ­˜·bà˜;î;Ö;žwø›õoçˆïàqðñö ¾Æ”LÉ”t ÙF¶‘m¾ÇD¾"_‘oÓ©©óSç§Î/œ÷Bý õ/ÔÛR×õ¬ëY×ÃYC:B:B:È[Òtiº4FÀ€FaˆD$x/âEÍ>f³ÞêhîhîhfÖÆÀÆÀÆ@š:33³ùˆÜWî+÷]-³m³m³m[{Œ%±$–4¸…€€€{444hF3š}þƒ¯â«øªæ‹–iË´eza¬:B¡ŽÂ7}¶é³MŸñ\ ®WÔpƒÜ 0æÏüÁ£½èà g8˜Ä$& é#}¤žâ)ž‚×+õJ½—¿½üíåo…-7nÜä[$N'‰Óÿ]6„ ¯Çãu¼Ž×‡'8§V§V§V@ì)ö{~õ/ãuãuãõ…±ê·Õo«ßÞJJHJHJà[\v¹ìrÙ7áŽpG¸Ð,šE³À£ ]èú7 ä¹12FÆ4¡ M£q4¼-Ù–lK\'\'\'àæð¯Þ¨Þ¨Þ(¼åˆïàq𑜺œºœº7WXZ-­–Öë­Ê å„r‚ù%$$V׳®g]Ï‚›‘”Ä@ ÄÀ 3̤B À +¬ÄC að ¾Á7"ÌM  4àÎqç¸s0èwèwèw€žt9érÒ……\ .¢‘„JB%¡±¡< d,0{£UaUX@ÔQ_D}u®?»þìú3$v¿ò‰¶‰¶‰6`Ð0h4œÀ œ°3ì ;Ìì@`P`P` º'º'º<x2ðdx¤|¤|¤Ün»Ýv» ,8·àÜ‚sÝG÷Ñ}Pº»»Ãµ>j}Ôz¬»œ}9ûr6 öûˆ}²7ò‚Ÿà'ø­LVUª*U•8´8rqäâHRŒ-Ø‚-ppè”wÊ;åÀ%·Kn—ÜÕRÕRÕRÀ\k®5×Ò»Ò»Ò»@ÆéŒÓ§AßAßA_à̾3ûÎì¤EÒ"i0¹kr×ä. Z-–111³‰–,^¼8˜7=mzÚô‡¦¢¦¢¦¢V&#íYÚ³´gôÐ…ÕV_XÍ6%ŽGfç¬l¼l¼lœ±Rm©¶T˘å'ËO–Ÿ›ªœªœªdŒ†Ð2·¾D_¢/Ñ3vêëS_ŸúzîzëÅÖ‹­; : : bLgÑYtö¼M9x|¾Ä—ø’r\W1ûfRðàÁÏiŠÝewÙ] ;¦;¦;Èû.ﻼíGÛ¶]m]m]m}DÑGs¥Ž Ž Žó¤ R©þ,–? ïÞ;¼Ï›”û˜û˜ûÀIœÄIȉ¼D^"/vÉf3„¡_xUxUx"Q´(Z æxÒi‹´EËN-;µìoŠ7Å›€ù‰óç'ç³ÎgÏo~¼ùñf@”'Êå’Û’Û’ÛsÇq ±ˆ„­ÂVaë\>ì£hêÁÔƒ©èçÔœšS³Kœ¬@V + û=ú=ú=Ø¥öºöºö:!A¦ 4ÀÆ÷7¾¿ñ} ¾=¾=¾l l l> ý0ôÃP€OäùD@kÔµF@Ñ«èUô¦"S‘©hT8-œNF0‚>…OáSfoOk>×|®ùÐh5Z_Ëúeý²~¡Ã&l¦¬R>“Ïä3IzC~C~C¾Mm¨1Ôj §4€Àp|äøÈñ åÓ–O[> ü{È=äÁ]pÜÿ ÿ ÿ Àëׯ@[v[v[öÜú2dÌ•~aÛ¶…m0³ïÙ÷ì{Èk{j{j{h8Ñ Ñà{b#6b;%á±>±>䆶F[£­{Ì³Ç Ä{Ì{Ì{ ðHôHôH˜Žé˜ *¢"*Ààeð2x}q}q}q€{™{™{0ß4ß4ßãÃí·?ÜŽ”––¢F>-Ÿ–O›b˜ˆ‰˜hù?„ uíà¸R®”+µr‡¹ÃÜaíÚM»i÷6‹¼]Þ.oní¿µÿÖ~ükꯩ¿¦¢Ü;Î;Î;Ó¯ô¿ÒÿJÿ <á O€˜‰™˜¼‡÷ð ,W–+ËÝ+ºWtÏ -†C äµiµiµi‚Zb’˜$&€è‰žè3(YEV‘U];PˆBò>ö6Ï:Ó7òÙä9ANÜØÍ…qa\Xj¾ÂWøŠ+ªyXó°æ¡°S/ÓËô2ÈI I!)0ÐÚB[ aC<à×p ×¶”-eK*£2*ƒÙ.Uåõ‚ë× l{u?è~ÐýÀ—zK½¥Þå¹Gš…,d‘‹èCú„µŽ~T1HèD RBªU-ªZTUø®ìÙ'²OÊsukukukyýåÂË…— mŽOIî“ûä>Ì3˜`‚éßvÄ™.‹q \×éÍÍ ‹¾7roäÞˆ¨P¡T(Êa“¥ÜRn)OËëÌêÌê̘†i˜.v/?:@ö±‚:Sgê —ö?Úÿhÿ°¤XR,)iy •B¥P VôT÷T÷T‹ ë>¨û îMv“Ýd7¤´Œ–Ñ208Á N{Æž±gˆ@L?Ñ<Ñ<Ñ ¼~Iý’ú%pQŒ*F£ £a4,-oFzÃ&»Û·Õ7q¼¸ý—DjŸÚK$*D=êQoÛKÂI8 ~wæ—£éšu§u§u'ýçfº™n¦ÜšÃ!‡CcÃŒÆ!炸 .f!]HÒ!=áÂÿ„¿-`tÕèªÑU¢^ÙÙÙ’ÂÕ3Mj -¦Å´˜?n¯ìGÅrsssssapdö ³²kw¯]»ÇÉ1rŒ»ñ?\ÅE¥V! IH⊪­ÕÖj«°S_¢/Ñ—@n?yž92Ñ0Ý0Ý0MÃÅÃÅÃÅ¢^Y†,C–ÑYkÖšµfmÆ‘Þ7zßè}áqAíèÖ€³'Úó‡ìs äv·íÚ½¶èꢫ‹®¾+K–%Ë’Ësu^:/¯¯Ì¬Ì¬Ì´íµ7Ð.ó:æuÌÃÙæÖæÖæV²EÞ-ï–wTMÕTýÏ[üGüGüGÓ¯ú…ú…ú…rãöxqŽêy.þÂ"#####!اLÂ$LBv¾<úòèË8c[`[`[pWúIý¤~ïý¹öϵ®wUߥïÒw±oÚlÿ±ýGÛk“ÖIë¤U”"^#^#^³Ï‡•°Vòßµ3 ·hãÇ8}ÑQ{¢„çyþÆþB»9¨CêlY¬ŠU±ªÈ>î w…»ò¿~¦wLï˜Þ¡/‹‹ÅÅâb®K”$J%5Þô¿âÅÿÊúHMŸ¦OÓG~¦îÔº³Sv¿Õv@ã_qpø{N»öí–…ÝØÝü}’@H¿üY«cuû^rzÉé%®K4$ i_¢ù4Ÿæïü£;¾;¾;˜„ŸÝŸ£±œþ;ŽÿVœ4P®:IEND®B`‚routino-3.2/web/www/routino/icons/limit-150.png 644 233 144 2664 13061246470 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜiIDATHÇÍ–ÿOÔuÇ_wÀÁñµÜ :ðÙ’Í¡°EÙ²•mEhÓ 6–s(³Ö*´Ûò‡Xëü¡¬­pclêÌðØŽº¡ât±m¶i«¹`§ ÅÉnz÷yÞ~8>÷9«?À÷/Ÿ½¾=ŸÏÏûýú¼>oybõ)à,w–; “¶s¿íÏy%ç•õg’v·ÇŽ7n| E]E]Ož|ò¤9nÛVÜÊO¯±ñÓù,¿ý¿d f :¦!Û•íu/¯{¹ò½d­Jh|­ñ5€;w2´TÈ'_obİÖÝ4ÛŠ¯æ[õž…oñYüI=%/”¼ ;›w6»O$ Æ¿_™¯ÌâKN:É#fÄT‹j!zTàÀ¶mÅ­|«Þ³ð->‹?©G=Û£/ÁîœÝ9À}€Ä˜Ef˜Ï%N&N’Ð_ë!=„¶$«võúT•ªRU šU“j.s‰K ½úý Ú¸µR¿ROB·Ûí©ci—Ú¥mñKº ª¯0ݸÿˆeBÈ ™©£yUM%žM<Ë’þNOè ìu…+\æ™g011Óâ[ÙÊVàj¨IóoW½ª—%“øpsÝÍu@Üv‡c™–žUaÝWà@Ç«ÚܤGççSpzô™ÑšÑ˜öN{§½6Oÿúþõýëá˜÷˜÷˜zœ=Î'¬¬]Y»²&/N^œ¼]»ºº`:.Ø;®o%ùlþ¤žUa×?ägÿþ€.Ý fÔŒxù|È<˜y0ó ôOôOôO€qÚ8mœ†_‰¯Ä;ºwtï膽õ{ë÷ÖÃÍ76ߨ µjÔ>€ê#ÕGªÀ†ø†è†(DÏßõÞõ_•תÿ>:²„]ÿP p¸pXøñÏ{Þ³wBg«ëê:Ì€ (ðD<OËËË`¬e¬e¬\îa×04œh8Ñp†® ]º½‹½‹½‹PW^W^Wnãnùm˯[~…o®žúòÔ—¶_}1;:; –§HFcF#OË‹®E×¢XkA?O+­"^§7Û!²q|ãøÆq‘Xm¬6V+R|´øhñQ‘æ«ÍW›¯Š465656‰´ç¶ç¶çŠƒÁ`0(²æìš³kΦp¥p¶ðNá‘es¹b¹Âæ“k®W‡ˆ¥Ç)bž3Ï9~m¼n¼žJ,‘,™•YPÏè=#âŒ9cΘÈ\h.4©ˆWÄ+â"mymymy"ž O…§B$w>w>w^dÁX0 ‘ðTx*<%Þ® ׈T©j­jµùc§±S$¥'ÕcøïùSG©[•oųâ±zúúú ïxßñ¾ãqE\TTT@Q¨(T‚Cûí?´ß>¢=·÷ÜÞsò&ó&ó&Á§|1_ À|ß|ßî1züŸù?{¤Çþÿ«dÐð~»åîo½_w¿^~xùáe›8¾_Ž/C¤4R)½OïÓûì¸9bŽ˜#°]øká/0ÿÖ:2¢FP«|ÆÃÿ竬ú Üsî¹X&„THÙs Ì·Ì·XJûí$•vêNÝ ºG÷èž4ÿ}A_=¤‡ôè§t±.N‹·#ÆKLͱò›å@Â=ãžùÏûŸÉŸ°&¿šRS@©úH}D‚üøí9Ä;¼ÍÛ ‡õ°Î1À@Ú "„Ö¿¨Mj Õau8mò«ÝY»³¬zdò?¶ÿÊÇövñØÞÇÏì?Ü4 f…‰vIEND®B`‚routino-3.2/web/www/routino/icons/limit-6.png 644 233 144 2127 13061246467 14442 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍ–OHyÇ_’m1µ êAÛ ]ÿ¬`AéÁƒ F¶-T m)Hl-—ѽ[¡‡žVK…Ú--iu)4-¥=Šífs؃îaiEW°ä`4”¬±™ù}ö0óËŒ{Zo¾Kò~ï½Ï÷›ùÍü2""Rá| øOúOúËíÜ?â®çó_?³óû&ø.ù.ýõ#¿wü@å£ÊGÖG7×uÝïqù^=½.â.”ps]×ýz^ó4_ëi}ÛìßÛ©oá²qÙ(ú̸°"V„/ÎÕPºC]WÂba±°–e™–‰ÿ8ýÊ™/ò4_ëi}ñúæg(M–&3_Áйâ‚ûÁ [arì²?h Ô¶ÚVÛžõ—¼ä%0Ê(£žõ=ýÅáùZOëÛ~c÷ƒ›·oÞ.·y¶@_¡7öF{£½ÐbµX-<Øx°ñ`êu‰ºÌŸš?5Êí·º­n«{ß÷òS®¾íÇ/b½¶^û>ˆ ¢£JDVeÕ~>™•Y™-Ö%Øìö‹#ÁH0"2R?R?R/R¯ŽWÇE6§7§7§Ý~Zi¥ÕÃsùŽžÖ·ýøE2¡LèÏ?DÞÍ¿›/b®‹¨5µ&{"²+»"‡‡‡"’—¼äEÇÇÇEF£Ñ)3ÊŒ2C¤}¹}¹}YdÈ2† ×X Èò"šçá;zZßñsЧ’VXñlqÎÌ™9H…R¡T¬f«ÙjöìØ*«¬Bqþ`Oåÿ8ÇöØa„A•©2Uæ¹sjU­ªzè¡ÇÓ_4u sì'¿Y¼‚vüÊs â*®âÀ3žòÔc¨Øà“ÿÐþWÚ·‹Cû>v8ß`ÿ&þV 1ˆ¡ñIEND®B`‚routino-3.2/web/www/routino/icons/limit-1.3.png 644 233 144 2507 13061246471 14573 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜüIDATHÇÍVmH”Y=óåÌDM%cXmH°[ÐþÊÒ’­4Á4ˆ v7c[hëOY¡[¬±-eýh iËK³(‚D¦Y×d q±´2-*¥´h&›gî{Ïþ˜÷Îû¶íÇ_ïŸá<çœ;—û¼$`†þ Ò:Ï:ÏêIbë×FܵڵzÁ…$>%HK™¥ì^59ýøôã$9óì̳Z¿U^Õ›ûƒß¬§â˜#àlr6Y t\CV,©XâÊH⤻ÅÝ2ž ·µnk%Éæ†æî ‡;‡;IòMÁ›ÒÀ*¯êU¿â3ó£æoúé¸î¸n"iÎ4€œ_4¿(û›dÁ£l²dMÉ’|f{f“V’$Å+’S9U 3LµFMXåõzÕ¯ø¿ÒSúI? ½ùÞ|€\¿qýF÷™dCÿ/äî¹»ç*½x ÉC<Ä©d"œ“¤Ø$61FÊ€ $-´VyU¯úŸâWzJ?éžm]!Yî*w¥ ýƸ!n¤Ö¢µ0®åkUZ¥¬•Õ²šÆãÇ ¨E´"ƒÂ)œ”Ú‰¥‰¥Œ“â‰xBrBç—åiåiÊ`]¡é(à“ŸH÷°{8l§Œã)þ/H­J«â{ñXsi.R¶È‹ò¢ÉÐk¾æk>ȃ¢T™@} >PO¦¦¦›þ¡€Ðî/ì/ì/$ëêêÈîî¾î¾TZÊWñøÉÒSúI?º±îïÈÆ·oIÞ!Iù%Oˆåb9cŠ©iVÓ¬¦Y¤£ÕÑêh%‹‹‹ùÑØ3°g`™~$ýHú²"«"«"‹œ#çÈ9’ìÊìòtyRå1­Z×Súº+àñ{üŸ}ä¯Ì_ à=XÎ`‡µÝÚ']tÒ `#2NfœÌ8 Èur\‡–袨µ×Úkí@eqeqe1y,óXæ1`BLØ'ì©r'îèzJ_÷cl%¶æŽŽ 0 Š(¼2WæÉ<`ƒuƒuƒ8=~züô8yyyn2Ô'úD°¨kQ×¢. +šÍŠ[;¶vlíF}£¾Q0ML“Ó¤i'ß*=ÇUÇUxÛbÛbæXíšvÍÒ$J¥’M^ñ€v;„약²°\¶\¶\6â!_ÈòçÚεkò–å-Ë[4¯j^Õ¼ ðöx{¼=@ocï…Þ F}JO××ýXpA¸ çwàvûívVàW€|(b9ÈF¶A4¥~Jý”zÀ½Å½Å½À]ÜÅ] èEÑ‹¢@î­Ü[¹·o©·Ô[ xÊ""âŒý Ø3í™öÕÑØ¾?¾¾rçÊÙÿŠÆ_˜`sÛÜÿ= ¯4¿Ò Ú’Úù![y«>±_$ŽŸÈg­‹Sâ +:VtØvÄâ£ð^Î{9+_‹Æ'F åBÊ…>êù¨ »µ»•ŽGîx¸ⱕ·ê­~ /_Ž>Ã/Ëû–÷Ù°"yE²dfn¬ü¼Þ}çÝwî,»³LÙÀœ8Ô@CÃzî%ÄV>Voõ[x¾ÅgñGõ¤å¦åŠ€ë}×û)ÿŒ6üÐuuŸ~h š¡˜åf9!P#j6ˆÇVÞª·ú-< ßâ³ø£zäé³ý[Z©^ª/ òE~§Ût¨ ÆVF™Í³ÌÍæ›æ›`î7÷›û¿RO=Ï>*ò?}^ŸG7z†ž‘ûQ|(½Szxã_:JMDdÓß!åÇ”µ$ø©à§0 DuóÆ<‹KWd˜a†™Dj Xd1¡R!ŽÒ@€ÊU¹,r,†¯Oø&|)ZЦ%q9ª'¶S_\…êOª?5yÛùíÈΑ¨Àî€;àŽvfwfwfƒw·w·w7œõœõœõÀ¼sÞ9ï|nǸ¹ü¦ý¦N5:qêêæ%ÿ&ÿ&+y[]=v EõED¾ÿ gÚ?oÿ|é=÷v¤µ_l¿H(éPRuR5tŽwŽwŽƒqÎ8gœƒ´º´º´:p]w]w]‡òÖòÖòV˜®®® óùÆ|à;ÂŽ0d¼^ð:dýaÝܺ9B×/þRÿK½Ú =•=•y5ªGè_ýéêOU+ƒ• –G;"_û¾öAúlúLú ôeôeôe€¯ÜWî+‡ä+ÉW’¯€+Ï•çʃó5çkÎ×<¿S]½]½]½pØ{Ø{Ø_ë›ßØü´¬þjíWkBáPÌU/}÷ÒwªC õåÔ—#·àÞÔ½)0s—Æ€¼á¼á¼ahw·»ÛÝ0~wüîø]¨h¬h¬h„–ΖΖNXszÍé5§¡¿»¿»¿ûy£ÛG·n‡œ­9[s¶B¥Q1]1 ê‹ï~ãýF`¯ó ó`ä–]T¤'Òc»%b¸ ·ˆ$‹ˆHZl6DÝV±kvÍ®‰'‚Á ‘ ¡ ¡ !‘*O•§Ê#’y#óFæ ‘àPp(8$b ƀȵõ×Ö_[/R˜[˜[˜+²çÕ=©{RE¼ö{‹E"_Z|úœ>'"µ*KeÙnÙÅ®åkùþ1‘áÁáAùˆûbºÂŽdD(£Œ2‘œ¢œ¢œ"‘¶“m'ÛNŠ8‹œEÎ"‘ü-ù[ò·ˆ”l+ÙV²M¤øRñ¥âK"þÿ€_D²$K²Dºt}Øõ¡Èºîµk%Ü›9üëð¯ìñOú'EÌívÈ?–8•Gª½ÖTFš"Mðè÷Ê•¡ž =éÒ?šÐãÐãÐc˜µÏÚgí &Õ¤šU¥ªT<8þàøƒã°˜¾˜¾˜3—g¾™ù¦º¦¾ú5ýåí¦ÛMðd¯Å÷±þ±|`M%K>L jI0aN˜Kü%hWÄw&Õ >SŸ:£Î¨3 ~Õ¬šU3°‹]ìJøs… ~Êk7ªKx%ðŒñ”%8¿áYæYw~^3&Œ àˆ0qççOìc¨!uY]cÆ;ÇC‚ «µx8Æ1”ú·¡:ºú¹Ê\ª-†ï-­/­‡%þøGü…ýV¾°·‹ö>öbÞ`ÿ3ü„ë_ÖIEND®B`‚routino-3.2/web/www/routino/icons/limit-10.5.png 644 233 144 3043 13061246471 14651 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜØIDATHÇÍVíOSg=·¥­] ¼Ä%,Æ´†™XqC# ÎMÄØ1 :ãËF@‰‘½$ÃÅ~Xæ>0˜–3ï’œ'œ®™hY5„AˆÔBâµZÛ{ïsö¡\Z·ÀçËÍïíœsï“çÜ$ iæ Òðšá5ƒ-vEósJ甾þS$>ª’ÒFiã__’‰M‰M$™üCòÚÝh¬×õþØy Š˧瑄hÂrÚrZrÎÄÉŠÅ‹ç¤EâozHëyëù€B~tñ£‹$yîÇs?r79ñûÄï$9íœv’ÑX¯ëýú¼Ž‹ƒÿáHS‡©C!-f‹ 3×d®Éú$ÒàÍ"ËÞ-{—$ÇŒcFa IRõ‘Œg¼p’”)S_bb½>Ó¯Ïëx:¾Î§óGô€L-L-ÈòÊòJk[dàîqrÆþ /|žä!b<©ÈŠL’j•ZÅç¤è=$I‰õºÞ¯Ïëx:¾Î§óGôàŽ=\LySxSxVÐ5­0l ›Hñ©âQ<Ô+B¼)ˆ¤ò2ªŒ’¢NÔ‰:þõ0Ä…z ÔjbX]® ×’jyŸ‡7½·é=]àáâèVÊ`o$­«GŽ#ÿ.þ»˜T½$Éuâ¤2­Lóé,Ñ.â"’ùÌg~Œ€–°„äz®çú˜ü8@r’“œ$I±P,äSŠ>9|møIZe«,ÇE„Ùg¾ÔÑ^²º¾ºž]$©-™}áï{Ž÷§¸õ~÷ýî(Ÿ§ÉÓäi"›Mͦf9"È#2ÿ·”-Êe yvÇÙª³UdóûÍuÍu­•GÖYGÊt¾ÚåµËIq5¢Ç€Nx»­«ÓV§R1HKϤì<Ù‰PÑxÑÍ¢›neÝZpk jD¨\[][][ÖË­—[/kÍkÍkÍÀtýtýt=f×Ô¼©ySó€=î¹·çÐýE·«Û©§¨÷IþÞÞ)-œ½Î^Ç"z 0Ø>³}æÈÃÇ…C…CÍ µaÒ˜hL„%ÅžâHq © © ©@GzGzG:`é·ô[ú·Óít;„±„±„1 ÝÝînwG…]÷^÷^÷r©\*—Ø4ë¯oðmðÁ2o¹ÍÜ&µ±+?¤Ïm-¶GžkGŒG˜˜™b%Àÿ¾¡beÅJ 矜±œ1 Øì ö⎸#îñƒñƒñƒQ6ÍcóASÐ4EóÉ’$*oTÞ¨¼”Õ”Õ–Õ{ßÚ»yïfà×»ùÛMø¥5sKæ–Ú3³˜9í¢vQ”ÊFf@ªÌGôфհVLw¦;Ó <Ì~˜ý0ÏÏÏFÍ£æQ3]–]–]„¡@(Œ?0þÈêÏêÏê¶»¶»¶»€ ‘áÍðýgüg ˆt‘ VËÐ2¤! r‘\t{¸Úuµ ÀÀ3ºB¶~ÛÛ Øl ¶¯Ãëð¹É¹É¹É€}™}™}P‘S‘S‘ä^ʽ”{ púœ>§˜oŸoŸoNì;±ïÄ> ©$© ©Xýêª'«ž TUóÁ×|ÍÀ…VÆWžYžYnĞʆê’¿è§DûVû–|œÿØõØEñ<.¨µèiÓµF­‘ôù‡üC¤Ø&¶‰m¤(¢€ô—ûËýå$ñ‘¡ÎPg¨“ô&“ ñ±’¢¤Ì¢-áxµ£Ú¡ûÙÑ^è¾AZ'¬r9¬«³üëÖ*µÊÛÇÝÜMj²&k1ö vˆbÉ]ÜÅ]1ùƒâ+ñ)ZD»h'I±X,æSñÝ þ;ÃÞa/IZ§¬Srï¼àc1ί¸Œ.cÔù™¦ +Ã$Ôu$êü<ÏS-/QâKµµér—âj(ÝTº)8Î×^ŽŽy¼÷í{ß|ÓüM3ïÃäàä Àlîl.øb­®õkóÞr|©~Š_Vô¬èÑÝ À @HÌKÌ{þ·Þ†ñçáÍíon¸ïß_ù€û°’•*°aC[—ÅZ}©_›×ð4|Oã÷êˆÍ‰Í"c‘1¤Ñ;pó¯p(þP¼Æçì>åSV‚Ëæ²¸MnvPWÔtèÀku­_›×ð4|Oã÷êñm傈HÝ«P¾‘š‘š‘¨5ךkÍp#ýFúôe‚ ®RW©«Ú+ÚMí&8QrââÎOž,Ûc/T¾Tù¨Ë^=âéù×ï ãhÇQ¸;s澪Ðÿ1ò…Ȱ¯+^[¼’¯%_K¾Õ Õ Õ 8’8’8å–rK¹âûãûãûaxÿðþáý>}SÛ¦¶Mmƒ5ikÒÖ¤AÑHÑ@јþbÌ6fcŸªwT8*T|íüÚ ê×^=~ºsáqáq©[ErrDÜñseseºÆcRóbÍ‹T–[VXV(b8g8g8'²Ð³Ð³Ð#666*RRR"b6 †Eæ»ç»ç»åç5ô`èÁÐ[¾-ß–/"‡äcùXä¾õè­G´æƒÀÆÀF]#ÿȘϘÑý>âtÄéÔ­º“þþ¤Èçž*O•NÖ&}–ô™L¯]|çÞ;÷$öíä]Ù»²ED\—Áe‰™‹™‹™iîjîjœ‰¹s!æ‚O˜¾D_¢/1ƒ"Y•Y•Y•"øñÀ"‘»â,q™.hyeß+û$Öóo¾â+RÄýZX`X j{Ž=Îîh3µ™ u׿u›×ù¶$ïpÞá¼Ã>;>Òw¤ïHŸ¯¾ñâÆ‹/™†3 g@SÇÔ1h9ßr¾å<Ô××ûúÓO¤™ÒLÐòÁ—}ù€}»};¸3B¡ÕæçWºà\pŽ~/ÒÕÞÕ.òÆû%gKβ;*-"<"\á»ÃËÃËEW%®J\%bɰdX2D:3;3;3E¢G£G£GE2Wg®Î\-R¸¡pCá‘ls¶9Û,’t=ézÒu‘Öƒ­[ŠD½••%òKCö“ì'â0í+;^vœÝ"/w¾,âúSÐOA£ß/ùØ)3Ã{c÷ÆúþJ×ÖÅÙÅY°^µ~gýå.p¸ |o¼8´8´8Ö)ë”u T“jRM ºU·ê†é-Ó[¦·­´Ò Ž^G¯£ùYç­ó(µÇ¥wé}|LìMÝ›ªùÙ)³`~ÊÇVx}Eýág+P,¨ãªA5€Çä1yL n©[êÖ2wU¡*ˆ'žøeùOT•ªuZu©.µImbAýy ÿWcãcã!3!3¶nh>¦}5vÍywì j¼Î¬þîšqÍ_¸'Ü>ççmŒA]V—Ô% —^zyžðÔÕ¸ìKý‡Üýî~œªÏ5éšÎ/9?;ýwúާÿÙ=+ŸÙÛÅ3{{6o°ÿÙÊÇX¼ß\UIEND®B`‚routino-3.2/web/www/routino/icons/limit-8.1.png 644 233 144 2473 13061246471 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜðIDATHÇÍV]hSg~Nº4M*mMëOE؆UptàE)4Ä`Z¡V¢¨óѹ«é]…)x•"L2ÐZ6PhI« ü£®`i§6»Î–H·6š˜&1çœïÙEòåœÍ vÙ÷æð|ßû>ÏÃ÷óž$ ¦øiYkYk©*`Ë!c¼b[ŶO®ðeTv*;Ÿu’Õª/äòîåÝúsËy™o® ~³žG Œ[Ÿ­Oññirצ]›*ÜŒ’öû@Z%GGH²¿§¿‡_’ñÑø(I&< i`9/óe½ä3óãô?ôÒzÓzSù´•ÛÊroï㯠¿|L¶ooßN’3e3eÂB’¤öÉe\&<$SLQÆŸ&,ç‹ù²^òI~©'õ ~@ºZ\-Ù±»c·ýj¡àù÷ä‰úõR/?@ò,Ïr©¦ÔIj{µ½Ì‘"*¢$I… i`9/óe½ä“üROêüàï{Ûµ•"P('™'Éü¤6¥M‘ú¬êS}Ì«¿kÍA!Ê…"‘cŽ9’où†oŒa½E?¦£gÔYu–yR¯ÑkH&% "P! vm5m%|ú-iÛ㩸KÅŒ­iª¶GÛÃEža?ûMFºØÅ.’N:é䡽Ô^j/I1 Â"lšHéz%?ÓbYÒ/ú)»|Ÿ>ùø¤É`FdD†ì[Ñ·¢oiX#ÖÙëïõ÷úM+êɽʽb®Xu@êK? j¸jø³-@‹·Å Påjq§mzTÓÇ{½ÇÞøúú«­z´êÍŒfFQ ݧût $•¤’Ü—Ü—Ü—á^á5òPUÖXÖ[(W¥¾ôcÊÚËÚÙX­ƒ€r0/ëêV.¬Üv·Ým®y¯y¯yD<OÄÚ5µkj×zT¨P¹@.Ò é†4Id™„ÉX«±º„楾ôcô!}HùPw¨;þ pÉŠpmØvM›66mîVÞ­¼[ ØÚlm¶6`lrlrlH^L^L^Ôãêqõ¸¡/žŠ§â)€bˆ™Œix%ä’úÒHyRžñ1`äÞÈ=À2óbD̉9 þÀA’Lóß‘bVÌŠY’¯8Íi“›ÙLÁo´m†ùBë5ÿYþ³ó/Ùå’}],Ù÷XáŸÔ^°ÙàšaOVðnIEND®B`‚routino-3.2/web/www/routino/icons/limit-145.png 644 233 144 2621 13061246470 14577 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜFIDATHÇÍ–h”uÇ?wÎm‡žÞàTVé6„1Û!ÈÜ&'¹jcѱBYØh1pB]bõOm*i˹ÙÒMç™Ëþ1®s A á`+—Ø5Ó¶]Nîyîy¾¯þ¸}÷\­þ÷ûÇs|~½ßïû~¾Ïçù ˆˆˆoþWÀý˜û1÷ŠŒí~Õñç?ÿôú¯2öQ \Ï»žÿé¬l[ÙPðeÁ—öˆcë¸ÎÏ®qð³ù´_|â8òzóz]ÕóvJJóWeìãàé÷ô?HCs´9 p®ó\'¯ÃÄ?üYýg58¶Žë|]¯ñ²ñ%ò/~X:°tÀõ+äåæåŠÀÛŸØ^ôF&áç"¨{¶îY€ß–ü¶D¹Àº,g¹ª’$Ñk2ËÖñù|]¯ñ4¾æÓü=þ*•Ô¿Tÿ’§#S0Ò û ÷j>³øYéd: `í²v‘Wq\¸À±u\çëz§ñ5ŸæÏè‘öö“ „òCùÀ,€9öJ{%ØUf—Ù…©ÞW}ªÅ¿–Ú 6¨ `WÛUv•ã·öY_[_£¬#d„0­WÍæàÿ‚ù‚ <Ðü’-¨äSlO“HæÀ¨=j/à>cÝ2·˜[˜SýjT²x•PB ¨a5¬†³üC 1Üã÷²ÿZ§Ö1§ñathtÀ“ô$“9Zϼ°£Wàµw^{GWÛ›ÔæEó¢ÿ4þQü#///_¬olÙØ²±eoŒ7Æ_m_m_-´×·×´×À±Ð±–c-¨¿ŸöMû>^ ß ßÔ­=zÅÙ·§.ÈµÊŠÊ iq•»*—lY²EŒ¾5}Þ>¯¸‚àÚàZ‘«-W[®¶ÈÂJLL© Ôj"‡Æ1FŒcDdojojoJäòË—›/7‹ÄŸ‹Ç‹ÅõàÒ\x.,FÅUλ•³•³õ© +b+bª—ïŸù}&kÇó¬ëÖuèµ{­^ 3™À œòŸòŸò;y-‰–DK¾€/àƒðµðµð5,,,†ÜXn,7õÁú`}N¿rz÷éÝY<º+¿Lø&| õx ¼öM˜LL&œ×ÞÚž.K—9Û ¶l+€3‡Ï>sºººÁ_ê/õ—ÂÎéÓ;§¡¬¹¬¹¬ºÏvŸí> áX8ŽAǦŽM›`Í‘5GÖï.\úâÒŸ½êó´·ˆýý릨tmºv¡C~Y*wäŽÓ2ÕªZU«ˆ}Þ>oŸqº Ý…"åF¹QnˆÜˆßˆßˆ‹$úý‰~‘ÁÔ`j0%R-‰–DEš†›†›†E U¡]h‹L®´&-‡VóŠyEdAOæ°]o…ž™ž…Vª&k¿±ÚXMJ{ê:ë:ë:áÄñÇO_|ø;º:º:º ádÃɆ“0˜ L È[ä-ò‚/è ú‚°/º¯g_Ø?›Ì_5ñVÏžž=úð_oýß·’tOºÇ9 ³OÎnœÝ©ŠTEªˆ% v›Ýf·ÁÃÍ7?Ü ÓíÓíÓíŽ`c«±ÕØ ÷½÷sïç‚ «ˆŠ À Y!àÎ<ßF3ÇðLx&’90jZλÑn\˜;ÆüÓ¦˜b ¸Ë]îfꈊ¨¨ÏÕgê³,[z6=Ë;4þØú±õ@ÊsÛs{ÑûÉoBf2[·¬[À*ëMëMLÞ£—ÞÅ“Ÿ"€—åúÃÀÚhC©˜µÎZ‡É·ÖÛÖÛ:ha…rB9z§þ1ùÙoå#{»xdïcæ öo3p2¬øÝ»IEND®B`‚routino-3.2/web/www/routino/icons/marker-64-grey.png 644 233 144 6222 13061246466 15634 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü GIDATXÃ…—{PS×·Ç¿{Ÿ“„$Šòðˆ"ˆoðÕ€Xª½Vç÷£ŽJ‡© ·R´ã轎ø(C¯ÚñW:Ðvôú ø…´`­ m­T°e”GÐb•§’!ädŸû9ø»étý³çœì³Ö'k}×>ë´´´´´4h0fæ±…®äòù‡buÚi_¤}!zgôfôfô® =DÑãÄ >‚à³0ÉVn+·•‹Çq§qš¤"ÁЊV´HB’ÄãŠ Š Š $•ïæ»ùî;§‰‰˜ˆé@AúÔô©éSkïe&d&d&!@ÈÚ1vÃÅ¥¡ã€‘ˆD$-f,ƒe°öaû°}xÊ¢ C†!ÃPÜiï±÷Ø{jnYç[ç[ç/üouŽ:GƒÊ…1 cÆÔŲŲÅ2`‘ç"ÏEž€t-ý.í—ž—üûwÅ“âK<ïÊà Ñ]tÝY<ÙAv9\À|wfø«á¯†¿ò÷œT3©fRs_LkLkL+u„6‡6‡6“שŠTE*¬8ˆƒ8¬°Â à-¼…·øÂ¾°Ú¦Ù¦Ù¦áµæúæúæzÑq5øjðÕ`¶ïÙ+Ï^yöÊÖUªUÀ27çççŽÕ9b¢˜(&>Œ'  +È‘Ñ#£GFÔ£õÓ^âËùr¾¼þ¬}Ä>bñ_§}Yû²öe!2nWÜ®¸]|±Æ¢±h,Ðb2&c2Q'êDx´¡ m&`&†ÌÂ,ÌH;i'íðOñ¼ÙÝìnvǃ‹Ÿ\üäâ'BüƒºuêøŸäJ¹R®ü½JØ l6¬ÚŒUX…UŸSeƒ²AÙȼeÞ2ïÿ¹n­²VY«ü×iã´qÚ8áµÄ„Ä„Äþ'ŸÆOã‡Él[À,™%³dððƒüRA*H@:I'éHé#}¹In’›ãæ:§Î©&nš¸iâ&L–ük×k×k× ¯Iñ%‰ CÂ0´v‘ý²ý²ýr‚Iq“â&ʼnAqEqEqE¼¤ [Ζ³åp§)4…¦4‹fÑ,€\ ÈpÜÄMÜÀ‡qãÅx1àÚ¸6® pUÄ]òWWWÊKñ%‰ŠÁb°|ô½CïÐQw¢îDÝAŒækÍך¯!g±,–Åž¡gè`X>,–M¶&[“ hkjkjkX=«gõV`VhA Z€±¦È"²ˆ,ŒÅÆbc1`ÞeÞeÞ5þ?Ü5Eš"MäQQQˆ‘x$>* ABÐÒ·=žz<õxŠãaQaQaQ$Ïå@N¿¥ßÒoþÜþÜþ\ ß’oÉ·•••@á…?þœUžUžU¾È s0sø?ãgà·í¿mÿm;cË±åØ€ÎÎÎû±›±ò0}˜>LOò$‰Úl¶üïÌf~0ó¤*))ÁÊxÆ3¼ä§2¼2¼2ðªõªõª=;ôìÐ3 飤’>zzz€ââb€†Ñ0të>Ö} ¸~9ür8 ^¦^¦^pu\W÷‚Ó¹Ô¹Ô¹¼_â‘ø(ÞÇûxŸÓsô=7þœ‚ T `ÛgÛgÛt?è~Ðý07šÍ@–1˘eJß)}§ô :6:6:ðŒ÷Œ÷Œl»m»m»’ë%×K®!òyˆP¦þLýà;äù¿e´}èû·øoÒ7é›ò‘|L9·óÏ[–X–X– ÃñÄñÄñd¼ D”¡ e€0, ÃÀHÃHÃH°Þ°Þ°Þx÷{÷{÷çëÏן¯žg?Ï~ž TùTùTù^¡^¡^¡ÀÆ£n< ØwÛwÛw²ó²ó²ó/8É7äò D×%7Ü8Ü8܈ª¥ZªÏsk~]óëš_×öMí›Ú7•~5Ù6Ù6ÙFVúê}õ¾zŒaB˜YÝþºýuûW_ |5Xxjá©…§]Š.E—Ü*¾U|«p5~Éú%ë—,€åGùQ mKÛ–¶-€©ÆTcªºCºCºCdddÀ«Á«Á«#²Y‡ ²«^W½®záB£Ð(4 Š8Ä!.ý4ŸÆ§ñi$µöpíáÚÃN­IgÒ™tP¹Å¸Å¸ÅÀâ]ç]ç]´l9ØrðE&šÍŽf .ˆ ÿ¥þKý—áÅáÅáÅÀK¼ôÇKÎ÷œï9ß8wÎs0s1 ]´‹vÁær§2´Z ­,’‰‘qŠ8‰“8ÏÈÉ©¹§æžš ôÖõÖõÖ}ùÇðÎáÃ;ßœ¦SëÔ:µsoRaRaR!—ý(áQ£Ø ïÞ)¼…`Ì‚óÅ|1XµmÕ¶UÛ€ØþØþØ~@ì;Ä€’@ØSí©öTàHÿ‘þ#ý@|O|O|ÄùWæ_™äBÙ…² eÌz{Îí9·çP•ªCÕ¡êøm³Ãà08 “#Ž<:òÀmÜÆm¿\Y¯¬WÖ{C9T5T5TåŸ*F¯[¾nùºåäš)Ün ‡øû™ßÏü~dÊÔ)S§Lü¦ûM÷›`ö`Àö²½l/@ž’§ä)À¶³íl;Ð<Ø<Ø<666ÁÚ™Ö™Ö™†ME–"K‘WT'U'U'G_9‘¹…›0³1ûþNžž¦§éi®5¨AÍ“Å,’E²ÈŸª¾W}¯úþ;Ü»v#Lœ;}Íô5Ó×’Pk¨5ÔŠ š\M®&*ò.y—¼ á—º þÔŸú˜˜pÇqþ(üQø#Xž«ž«ž«à^aª0U˜­¼_Þ/ïçA,ÄB,‡Öb-ÖÞß)f‹Ùb6?Í5æ9ÍüQ’CrH媧zªßWŽm؆môcÃVÃVÃV!Ù¼Ö¼Ö¼vÐÂαsì€k¸†k"6Ø`ЈF4ŽKZÒ¢û•’+%WJœ{M¦SŸ+÷•ûÊ}K2gŸu|Öñ¿C:Ò‘N΢íhVKó¨èD§po¬t¤<äRÈ¥KÙÝ’Ü’Ü’J2M¦@S o¾¸ñâÆ‹{¥€®ÒÚÐ….tÁF( €#Ä1"šÐ„&(~0þ`üÁ(F7k8ÖpŒËVªÕƒG———ö»—~/ý^: E£hÄDWœÏ%P«k=Ç&° l&ÞíºÛu· °ï±ï±ïÙLí¡öP{<<×jh5´¸ìê7ªß¨~CŒ&)$…¤@Á¾d_²/!B %”€8(Šƒˆ@ŒôûýF”ÔÌ«™W3Õ=êuÀ–°%lÉþcô$=IO>uI1×uŒ¯•^Dª‰ë“DñÿKÄei×¹—D’H½qì“ã»KŽdG²#™íÞʶ²­Œ® =z2ô$6°ÖÂZ ¢³él:6!UHR¡øT÷©îSsVODODO׿6ÏmžÛ¼ìecM³ï'–ÇòXŸëªì»RÅ233333a‘2 ×q ¹´»×¥Ý\—v/Ó(E£ö•#‰H¤‡Á!$› Ìæ¨(¥”R J™¨©©aÖÇyóçqmn‡Ý»¾Wi{b{b{røÃ¶Ø¶Ø¶XÀ¨•ÎS Pâý°´AårpÓ¥ÝK!e!e!eÙÝÞv{Ûíí’L“ÉÇäÛ/¤]H»æÜëšè'6{6{6{¢¨¾¡¾¡¾Ä«ZT-ª€i™–iwßà·ð[ø-#˃-ZL\ñþõŽü™‹Ã_˜^¯×ëõ¤(墜¼Ó3§gNÏ:g8g8gÜAŠ EÐ??î[Ý·ºoµg™ù¾ù¾ù¾ø¯»ŸßýüîçÎCŽ!ǃÛ#[)[)[ù_Óı@,øºr¬Ù¸À˜¯TW¢„?óüý…v3PjT;ÓÅr±\,×·ÓRZJK¿}}ôõÑ×ÙYž,O–Gïs‰\"—xµNWª+Õ•®ÑÛíÆvò ›Â¦°)â—_ƒ ÐúWcÒ®ë¸p¦#)Háï’@®ëÄj±Z¬>ð–r¦r¦r&½Ïur\ç“™ì;ÁN$wµlnÙܲDËŸ4XŽüÇÿNÍçð´IEND®B`‚routino-3.2/web/www/routino/icons/limit-22.0.png 644 233 144 3051 13061246472 14647 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÞIDATHÇÍ–LÓgÇ?´h[ÛAQb˜×ânaPF–š`†GÀ‘ºeÉ#z2“yî¬ä2â-¹ƒ’…„£#Y\& 8À±È¶ŠŠx"1 ‹@sb½Ú"´ý>¯û£ýZnÝŸ>ÿ4ïÏ÷û“>ßçý<""bOü ÖÖÒâØð§dÜüžù½uâ¸5)U)U¿ü Ò›Ó›^?ÿúym<‰õ¼^¿´_$É¿TO‹]’S‡©#Å•ÀÇàÃüóÍ«âøÔ5°tYºBQØÿíþo:Û;Ûùü7ý7æ\s.Hb=¯×ëý:ßR~9ö}XvyÙ唇`ZnZ.ŽíŽíÙŽÜφÊòÊr€)ã”Q 6 ذ)$ˆ¾ž,Áz>Q¯÷ë|:¿®§ëÇçÈ(É(÷?zÿ#˹xÃøWPûFíº^¤ 8Îql Fƒ±c³êšº@ )Äz^¯×ûu>_×Óõãó$·2,"ÒX nŸÛÚ(@d0ú âˆ8@ûOÔ5ILª´»Úˆ6ÑÑÉè$h/´Ú Xòßùñ¿DJG?ˆ~@$ú(b‹Ø@ˆóƒ;èÿÖõõ­üQDäíÓ` Z‚ÁTµèô Çø#¨BUH˜n¾ã;Ðæµym¸Ä%.-¤žzêAUP—Ä7³™ÍÀVJ(PeªŒ0Ûü;z }~‰Ï#øEDZ¯“^S]S­³iÇLÃG†@Óß›¾hú5úãhÿhRo¤o¤o¤šN6l: cýcýcKòÚnm·¶;‰}c¾1ß´¤6‡šC¨‡Ï':&:’zêiÍÖš­úÖ¶^—Ø‘;G ûP÷!øçÁ‰â‰bµ×öÜÒbiaÁõƒ«ÛÕ ¹¹¹ÐÖÞÖÞÖ«ï­¾·ú¸žºžºž‚Ãíp;Ü0l6“=Î}œû86vmìÚØN¯ó²ó2ü!˜Ó’ÓÂÂÜqµ:®t\u4>A^³¶YÛ6m)­.­yT8~xüpʹ¿´z~òü$&o©·Ò[)bÚƒö Ho}o}o½HÝ­º[u·D¼v¯Ýk±fZ3­™"C‡.]”—«gMÏšž5"¦¦¦"£®ÑòÑr‘צÓbêøæà7SΉTNVNЍ+Ô µi‹Áøû凖âjÂGÃGEÜ»+vUì’ÀŽ®£;FEœN§ÓéÉÉÊÉÊÉé™ì™ì™)ÚV´­h›H~{~{~»HáéÂÓ…§Eö,îYܳ˜Œ,²È±Ý¶Ý¶ÝNÆÓ¥™ÒL"ó³áÊp¥DL…¦B¹n´í¼#Ú)[¹­\uÀ³ÏŸ}?¸ë¹ëK§¹Ö\ 'rN¬;±4ŸæÓ|0d2™ãŸª% ™ ™ ™*‡Ša~ÕüªùUh4 ïLß™¾3·!oCÞ˜Ú2U4UÙþ7;ßì„«©7Ón¦<_û|-h¿³>°>P]©cß_ ̓š/4«½Ë: ; ;Y(<)xŽõŽõŽõPVWVWVPà.p¸a¥a¥a¥Îr–³@IcIcI#f3Ø—³/g_X?µV[«¡vñpÛá6n²¾ækO|áTâTrÀsÀóñSòxÇÌ»3ïÂô?¦¿œþå?ïoõ·ÂÜÀÜÀÜÌÞŸ½?{¦«¦«¦«Ào÷Ûýv{ÃÞ°æòæòæò@›ÕfµYPUªBU@`<0˜Fiÿмy ˆÅõˆ}âùļHœÊøñLúè¾òÒDzU6aþß!òÒ†<|Æg UšJP+Ô Âª:ÁïñýêûÀ°‚©<Ô}ìnõÆRjÝûÝûA}wf53ÅL ®ÆÌ13ŒlbJ]UýªÔõø¤ºU·êþJ-µ UH…€gñ½âŠfÖÌDÔh(zuçß•º+Xü­ó¿ºwå+ûºxeßc¯æ ö¿ˆà¼|#k\IEND®B`‚routino-3.2/web/www/routino/icons/limit-8.png 644 233 144 2150 13061246467 14440 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–OhgÆŸí&Ù(þa7ˆ¬b± DÈbÅP!*ˆ(*ñzªà¥}0žÏAÛu›oë­^\_§þ× u;u;1µ5µ5,ߺ|ëŠoü„g+ u{ëv€7É7Iã€û'0Ÿù&”)cÇ_±Ø®ù¶ÞêY}˳|ß Ûœm–`çÞ{Óý‚áàxãñFË›éÎp†ùP-WËî~w?Ó`Ц@‚D±]·ù¶ÞêY}˳|ßfŸmç—°»nw]hègpÜÀx‡½ÃÌ0€±ÞÞkï5T_U_U_©1)“"ÓA¾ñÚ¼6fB½Pßò,_qCŸ}éÑôhùxê>uCÙ¯À;èd’If ã׸ÀiNs:¶ÐI'@–,ÙØ|%¼_/Ô·<Ë÷ýÆÎýÇN;¯Çc¼å-"ElGÏž<ùÇùÇùÇðdÓ O6Änஹkîïg=‹f¶¾·>âû~c¿~ WJWJaÝp»Ýn¦Áß-¯Þ«÷ê#àá;Ãw†!»9»9»´h9Ðð°ð°ð°å{×¼kÞ5°z1ý€gù¾GZз ï‹&©yKó–à|•¸(9+•ª•”VZREU¯è½¢”îJw¥»¤–Ž–Ž–iiÿÒþ¥ýR¥R©Tbù*¨ ‚êEúÏò}?Ž”lM¶ò¹”º™ºÊü-i•VùUJHjW»Ú#ÎØ’±%cK¤†tCº!-]Î]Î]ÎIã¥ñÒxIÊôfz3½1cÝêVwL/Òx–ïûq$¯×ëMü.UwTw„‰YIÏôÌ?„Ä ^ð"â\Í\Í\ÍH›ÖnZ»i­toÞ½y÷æI5'jNÔœM<šx4åÓFm‘^L?àY¾ïǑʹrnð©ÿ~ÿýPækÉ<7Ïõ^Ò”¦$gÈr†"P~(?”’ú^ö½ì{)e.d.d.HMN“ÓäHû&öMì‹K–’¥dI²z1ý€gùŸ~+ašià·¸=ÔS“S“S“ðŽw¼Ìj³Ú¬Žµ‰F :ÚôG¿•ÐÇÊÌf£Ùh6‚é1=¦'6_oêM=°†5¬‰Lý¯>öŸ s»áú£Cò?D¦Ü ‡˜Ñ(ÿ£;ÿœýVÎÙ¿‹9û?&iþÁþ žä~¾GÚIEND®B`‚routino-3.2/web/www/routino/icons/limit-14.8.png 644 233 144 2764 13061246472 14672 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü©IDATHÇÍ–ÿOTgÆŸ¹|`¡T&f-n5×¶ô²)“…0’Úé’¦D²Ýl˜f³©”¸I·ii´ÚØ&«$]"بµtSdÝJŒK ¨•Š+d—V è +8Pœf澟ýaæ2Sý<¿Ü<ï9çyžÜû¾ç¾IÒãñ§ÀzÊzÊÊŽaëw‰õÌ3_Üp*†[£àÚéÚùï?ANsN3@n{n»ým;y§>¹_Jð'ë9ëz\‰…Œ/2¾py㸠jŸ­}6ÓÇûÁÝåîZˆÀÝot|yüËã¼ S_O} 0çóB;y§Þéwø’ùÕô€¾i_¥}åºé鬫XWñôïcãOCÍöší·Sn§ ¢3À*V/$ˆ÷’°“×;ýŸÃïè9ú1?‚¼²¼2 ^zõ¥WÝÇb ßž€·óßÎwôÂ]À° "ÁH Z­#¦ßôà ìäz§ßásø=G?æG?ý¶—ô…}áCWì²pZ8 Ì‘;‘;8ãT˜BS` À.²‹ì"1Ç]î® cß ‡Ãa‘ïÃùá|°£1~ðMú&`\åS%©ð¸o¸oSa¬|¬¢ãT›®Èbd‘EŒB )3l†ÍpÒú 3Ì$ ‰š¨‰ð!˜2SÆ"ÇøñŒ^½àºƒÁT.ÅüÄßTë%ð7úÁüÀÞâ÷ÿ¹¿½¿s³øæs7Ÿ{Ècþ1ÿ˜úÖö­í[›X·çíy{>¯ÿåzËõ89óäŒ2–Êî½sï×1ɻŻEry³¦²¦Š¶YªLiIia³”v í€dJ%I_[µ¥µ¥Ò¦ŸoÚ°iƒ”Ö”Ö”Ö$;yî乓ҩªSU§ª$¯íµ½¶4X=X=X-M L L $Œú}>É#<’:~ÕQÞQ.ÍÍÏyæ<ÒêËO"´¼ÉÑû¼öóZ`UÌOò©|×ÿ.ðçTÚŸØŸÀý¢û;îïÀ„~ÚÚ tÓM7ØÍv³Ý Kë—Ö/­‡yß¼oÞ&Ûd›lììì:é¤B{B{B{`úÓßM‡1á[á[‰SÉ÷þÍþÍÎÀm½7VxÜSî©`*ŒFG£+/¤ì]ö®¤9¶ÿåX`0 0Ë,³Isl›)1%`ºÌUsÀp1ÂMá¦p“Õå|žóyÎçlJÞݼ»ywŸÓ1/æÅ¼öÿè#úˆ>3^±UÛªmÕlJQŠR’ !@;ÚÑ༂WØ>érérér’-ÜîwþSJÈÈ:šëëëýíüMù›ò7‘^Ñ_ôýÉÒqúƒ“KÅ=ŒF4¢¹ã4æÑ<úƒÝb·Ø-OÌ̫ɫɫ9Þcïµ÷Ú{ —¬ÖkÄŒ7”…ÊBe!jg,œ±pÆB’%‰’DI€™ê™ê™jÀ5wí»Î»žwù{èßÏßÅã✜Ç<˜ó É$…¤ÿBÞŸ÷çý¿ÿÄRn)·”OUO4L4L48v.l_ؾ° m m m!ÏK³¥ÙÒlXñÞÂ[PÀ +¬6c36ð…/|aµùÙül~x¾¥±¥±¥‘}ô]ÐwAtçýE÷Ý_´áC…¿Â_á?WæHq¤8R Y*Ke©7“ ¸yd÷ƒÝv?ЈF4úMª…j¡ºñ¤}Ô>jºL³@³@³@Œ^õêªWW½*W™Uf•LÂ$L‚ÈX €€t €;Üá`#ˆ@¤“t’Nˆ¸‡{¸aÐcÐcÐÝg=tö˜ÜÝÐÝÐÝ \t“»ÉÝä·Î‰ËÅåâòùë0ó1ÿö0'o’7É›ÉÉÉ”½ÿ¶ž³ž³ž›ºL“¤IÒ$‰Ï§nJÝ”ºI¸¨R«Ô*5&9ªUŽ*€&Ñ$šÁ™1JRI*r•\%Wh¡…@+ZÑ Ð\šKs!ˆÄ âÀs›ç6Ïm˜äò¯yQó¢æEñyW|‹äÕåÕåÕ-io²7Ù›Î5y˜=Ìf¦M3¥™ÒL¤IU¦*S•£ èºÜyîˆ\=WÏÕ?'üœðsðEñÅ_VOX=a50´~hýÐz ¬2¬2¬Hšž4=i:Pe¯²WÙËËË@HÒ„4€Œ’Q2 ÜO¾Ÿ|?ØÚ¿µk? †jÀ-TªU}ý½ú{õ÷°Ïg‰³ÄÍNCæPæPæÝw|îñ¹Çç2—Yh-­¥µçloøÞð½áŒžszÎé9ÖM¥¦RS)co ¼1ðÆc7&Þ˜xcâ£}kŒ5Æóh~úÜés§Ï1vÌý˜û1÷Gët.K‹ïâqñqxïá=ÄâNq§*HJö“ýd?àèwô;úÐOC? ý˜=yöäÙ“IMè:„@Ú-í–vüb~1¿øÑ¾¼QÞ(oŒ/_0¾téºt]:`E÷ŠîÝÎ1S1Õ£øÜFn#·@ JPB‚8Þ‡÷á}Øió,ó,ó,t‰¯‹¯‹¯ƒÇ!Â!0>›Ïæ³ÄÈÄÈÄHÀÏÇÏÇϸà~Áý‚;P’X’X’<ðlÀ³@àñÀãǬÀ ¬xòÍÁo~s///Ô“Õ“Õ“¦c:¦¸f®™ksç-?Y~²ü„.NÃi8 ;ÍÉ>} û@,èòîòîòf§¯—\/¹^ !Áèø/ú›ú›ú›}‰¾D_ü˜òcÊ)@âºÄu‰ë€eîËÜ—¹lÛÃö¨Bª€vßvßv_ ¯¬¯¬¯ ˆ¢…há±L.aKØ&˜`Âhwbwbw"`4MFþ!ë’uɺÄ«° «rK…x!^ˆßûwÃÃÇÆÿ+ÿ¯ü¿â»½½½a>y*òT$<"¾¾¾€Ü$7ÉM€=ÓžiÏ8pà ¸š5ÿj>à·Áoƒß@¥T)UJ€u²NÖ pÛ¸mÜ6ØÄd1YL†âkãׯ¯4šˆD$"w‘Ä’XûÉ 9r$äHp·ánÃ݆²_G*G*G*7úé"u‘ºHÇŽ5†5†5¾à]Û»¶wm°Iš%Í’fH…,!KÈÄ)âq 0:2:2:l¦›éf „†„†„†9ú}ŽX4oѼEó€ù¡óCç‡T À8‘9¤¢»¢»¢›Z/ _¾4Ì)···^7V3V3V3§˜ìþe÷/»pWpåÉ"I©¤TRúƒÜ2l¶ OM)Œ)Œ)dñaYaYaY¤þÞÁ{ïãOò'ù“ d=YOÖâeñ²xÐÖÖ<{<{<{€k#×F®S_žúòÔ—U‘ªHUô°òÖëY׳®gaMyQyQy¾–ß’ß’ßz°ˆñŒgüŒ5˜†i˜ÖºUàJ¹R®”o‚LQt'ÝIw¦–Id™ä{\^{yíåµ,$ðHà‘À#äÄLÝLÝL–³Á"  Á$˜F0‚kFœ7W‰ `]¬‹u=4{ { {Á£öNíÚ;¢Fòšä5Ékˆ™˜‰yÅR,ÅÒÖ­¬€°ÁÏÙæ9¢ÆûFár„!Gê3xoà ;«éº‡îáŠÏÖœ­9[#¦lØ8° ²’¬$+a¦>Ô‡úL`»Bm°ÁÐ[ô½`valNPÚôÚôÚtÇŽ7ÞxS(’H¤'ò÷î Ü÷á÷ÈE.rÉIt¢b‚«U¢=èo á'Õºté>*X!ûXö±ìãùC“‡&M+b*b*b;\ÉÛämò6lä¹F®ÐC=dDK´D FN䤌ŒŒ,þÊù+ç¯œç ”ÞJo¥÷íör{¹½<óý¹7roäÌÈŒÌOgœÏ\ VçxŠºSwêÏæßškþ °o·o·oÏ|_é¥ôRzÝ<Õ^Ó^Ó^ÃÔ­®[]·šÅ“ ’A2 ¥e´Œ–A9äbCl{1Úgì3öqÂf3„ÁSÙ«ìUötEge¾Ïàpn?pJÑ©b¶ôáäó“Dêœ:KÄŒk×±ƒD“h¿bü“ãûʱô±ô±tú· tÝ@¹˜Ð¡B`9m£m´ n7››˜-f‹Ù8p8ÀØ;§wNï¾C& “…Ìiv^¤zª§z¡ÈYÙ×\ËÏÏÏÏχٕQ8jÈ©ÝNí‘BRH 뫸8.Ž‹ÛYT¤"•+®««Ó< ÇqÇaÈ•‰oG¿ýv”ZoëoëoëùÙ.Ù.Ù®µ6“Íd3íú°cqÇâŽÅ€Pã|Nátñ=ý°ë€Âéàÿ±Û±Tê¾Ô}©û²`…,M–&K;‘?à3à3à# žÉ9“s&DZÃÙÑ{¶¨[Ô-jü³±©±©±‰$+ÚmŠ6€j¨†jþöƒ°^X/¬}V¥ÒFqýÎx/8ÇÑ?rñø‹…蜶07æÆÜȶÞàÞàÞ`üŸã)ÇSާ.‰R­T+Õ&ÿžð{Âï ê/[[[Ùÿ6ÖüYógŽy#c#c#cüvIŒ$Fóº;ÊŽ²£_ÔB )¤|7úÑ~ê몀3QâyþÂþD»y¨C깬šU³êØN®‚«à*Îk$>H|Hƒ%z‰^¢çZùT>•Oý®! " " â¹Xc§±ÓØIþEŸ OÐ'Ø'N¿5N@ëŸqpø ûƒvŽ\d ÂÈ&²‰lúw«cu¬.k³üiùÓò§¹V¾‡ïá{LOÓýt?ÝŸþ[Ûº¶umë€q@hþ\åè_qüŸŒêV§R¡IEND®B`‚routino-3.2/web/www/routino/icons/limit-1.5.png 644 233 144 2506 13061246471 14574 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜûIDATHÇÍ–]H”YÇÿ﫳3#‘&Z^L¹¸µíF$A¥Ò‡²2“Å‚}[‹àz™P$]l7KÚ'…°ìbb’Þ¹:K.±}-S¤°£:©ÍÇû>ÿ½˜93³ë~Üzn†çœçùÿþ¼gÎsH@N⤾Z_­/ÇúñÔ¼­ÜVþÙOñøªAjûµý¿7“Ù—³/“äŠÛ+n›£©X­«üôz ¥ŸÎSóÈAjÂÚiíÔÊñ9òàÆƒmùñø{/iï¶wÏÅÈ='zHònÇÝž"'N<$É÷eïËÈT¬ÖU¾ªWzéú8÷7>@Zî[îkã¤õë'Y¸§pOÑ·ñ„7E¤«ÒUI’þ †è$I“$—q™”‘ 1D5¦ÒbµžÈWõJOé+žâÇý€Ì+Í+Ȫšªû­xÁèd“£É¡xÑn’­lå22Š…HÒ¨5j&Å+^’¤FLÅj]å«z¥§ôOñã~ð×½½´›tÛܶ¤¡œ5úŒ>’4»ÍnFÍR³Þ¬§Èyi–f.^qˆ4ZŒÓÆiÒXg0PŒã‘G‘GŒò¢QiT¦éGÜš[S/íNÛJX÷iŸ°O„2iú¢¾hóiÖ›õœ7Þš6ÓFJ·Ü‘;iFf8Ù´ø9Ÿó9É ƒ ’$…BRT‚yØ<Ìù”¾Ïðd’Ÿð“0võòäÙ“g“Å_¨-!y#oR²Þvo»·ËËË]üÁb‡b‡b‡È®º®º®:²­º­º­š¼á¾á¼á$?¬þ°íÃ6 )£2J²Rñ?î'aì·ïHÏŒg†ä#’”:¶[­ +`çÊΕ+IK¥ÇÒCz*<žŠÅƂׂׂ×Ȃ͛ 6“UO«žV=%k;j;j;ÈÀHàIàI2=,<ÅOøÑåƒË¿,Jw•î0Ú-œÒôXi£•Vò¯ä_É¿ˆSœâÄ¢1\<\<\ „ÊCå¡rMhBàô:½N/PðyÁ–‚-û¥YšaÕV%xŠŸð“ d¸2\ÜX^Y^iÀnÀ4€øˆ<Ù)%RTëÕzµÜœ»9wsXx·ðnáÝbc¹}¹}¹}@ÍpÍpÍ0°½~{ýöz aªaªa ÈîÍîÍî*\*.b‰óô˜åžåò€Œõë¹AÌ^³Wbûbû À[¼`A&2S`y)/å% ui]ZWj>˜ÌæþQÿ¨(z\ô¸è1pÌ}Ì}Ì 8Ä!¦>*œ*LÕ±Qñü„•…Êžý Ѐ_òZ^#‚ (BQJ(«=«=«°±±8Æ1Ž®M®M®MÀÿÿ?àiô4zœ½9{sö%ŽG‰¨ÍªÕj5²‘Œ¨â%øÊÏÿJÞç3>KÊÙµ³kg×’á–pK¸…¤>úÈiÛ´mÚFÒC=d¤?Òé''õI}R'å9*G“z᱑ØH:ïOeZKö•dKï;$NÕÄ”º’(­Ò*­¤\—ër=mþ² Ê É ÃcxÒúXÄ7ï›ÿ×>ö?j ƒ$iž1Ï0Ê<îà /ò<ϧ¨ŒË¸Œ“ s $›ØÀR~–€(ì3W™«%Æ ’FB?É[Ôù—ì]¹d_Kö=¶4_°e8˜ˆN¥5IEND®B`‚routino-3.2/web/www/routino/icons/limit-32.8.png 644 233 144 3073 13061246473 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜðIDATHÇÍ–ÿOTWÆÏŒ_Æ+à QÃJ—Z›uëFƒ™‰ºmÒVÇ A+Æl%º!j+i6u£e…M…±¡Zºv‹¬k!’ÅšUµnR˜‚ECÑâNè ÎÎt†¹sÏg®—í_àùåæ9ïû>Ï“ûå¹G€BËÌU€1Õ˜j\ÃÆßéû džá“Q0l2lºu>Nø ñóÄÏÕÛ:ÖêZÿìy!tþÙzÚ¾°}ÃÔjj5Øgð‡°õå­//HŽá'˜;ÌÞ¹ð΀ö/Ú¿à÷àùÚó5À”}Ê:ÖêZ¿6¯ñÍæþL_˜×5¯Ë0¦ù¦ùB@úÆô屆á xýµ×_Ÿ3>G :,d¡´~ühkrÖê3ýڼƧñkzš~Ì€$[’Mx³øÍbóéØÀíf8h=hÕô"@U,ůø¢Û¢ÛƒtJ'  c­®õkóŸÆ¯éiú1?ú£ !Díp 9†@ˆÜPF#i‘4P¿‰Ü‹Ü#2ãTªwÔu”»Êˆ2jH ©!ôåLJï)’êƒH$!¢ÜX#VP£1~p|ïøðkúÚ£¼+„Ùõ`ö›ýþ¹º1t¸ ÀoA¾"_!Èzè™ dÐFm³ŒTRI%ÈGò‘|¤oK¿ôK?PI5ÕÒ&m©áOžÑÓô¯Åü~Bˆ“×X´{çîšs{ã@ç@'ÔÖ×ÖÕÖ!ûîö ÷ ë‚ýû÷?†ºÃu‡ëÃ@÷@÷@·^W/ªÕ‹:vêþÄý Ôô׸j\ÈoÕßÔߤëÉïNßb~„Ú!„®÷ ãHÇIòûÆå®_ü)áù„ç ;þáhq´@V8+œ†ù'òOäÃÒcK-=ösösösîHw¤; oC߆¾ º¡KÍ—š/5CR~R~R>l/ܾnû:°^^Vº¬”poúÈÔÈ”Ü+;WBô?1?Fù璟KÎ]-„­ÁÖ DÔú¤èI‘át¥8úÂÑ„©èzQ_QŸ©©©B ggg qÀyÀyÀ)Ä•â+ÅWŠ…ˆ_¿$~‰n‹Ûⶈ§KY®,W– an1·˜[„(ÜSøná»B,»™2‘2!L?Ù&?˜üÀpZ{Ž=Gƒ=ÞïÉ]-˜´L[¦ÕAŽOVLVèŸýòß÷߇Í]›»6wAJOJOJÜj¿Õ~«Ü.·Ë킞ž(UJ•R§âTœúk¶6[›­çÉóäy`}`}`}2ßËØ‘±¾Í:>tœI\\Õ½htѨ:(¢¿‰Ÿ?_¶BضÁß6µnkݹ;r²r²tµMk›Ö6Á¾½ûöîÛ Ök‰µªÎT©:555L ¦ÓÀ¿ß¿ß¿   ¡|¤|¤|Dç{q"ûBöøë½³g' áˆ&Ç Æ ÊV!ÿ¢½c-?¶üOþ wÙ¯Ë[—G8ú¸z(++ƒšÞšÞš^0u›ºMݰjtÕèªQXl\l\l„ÆC‡AaCaCa\u]u]uAî`î`î $~–XŸX;¾ýÑÛž~1¦_nýr+°0æg&ÇN^㛲¤²$ý+QV‡¦BSàý³÷}ïûHõ”zJ=¡êPu¨¼V¯Õk…çœp<ÅcàõàõàuðûÆ}ã@ %”@xOxOxxðÞñÞAÊ_FÆ"cº÷Ë^*{I ܓׄ–Osd^,WäžæØ[ò-‚r½|C¾d’Iæ¬ü âÿƒuö/ ùkùª|d‡¼)oÈ•r%A¹`†ÅÐwCߘ}fŸ.½ZŽiÉÖ’wËÜ-s£±d–]ÊCå!ÐF£Dø#m´!åße“lù¯˜ ì”²¨à ANË€ Obþ(‹~ýŠˆìQ¼ŠèÐ’Ëœ-s€éŸ'ÿ³û¯|fOÏìyìÙ<ÁþfL-ÒŒÎ:åIEND®B`‚routino-3.2/web/www/routino/icons/limit-32.1.png 644 233 144 2757 13061246473 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܤIDATHÇÍ–olTUÆß)ÓR˜–¥…&Ú„ZÓ@ $CЙ`5Ñ …‚m¨Yü³‚ÔB¤k4î‚Ý–M€XÁ`A‹ô aJKË6qÓÚti3X"KZTÈ@·Ú0ݙν÷üöÃÌåNP¿s¾LÞsÞ÷yž9ç¼Ï=""’ü°Ø ìÎDlÿ“5Ÿþlú³EÿHÄ:ØVÛV_z²>Îú`öç³?7.[±¹næ§Ö‹Xø©|æ¼d‹5áð9|6o2þ^zì¥ÇÒsñ?dtftÞÕà®7º:š;šy B_…¾˜ðNxÁŠÍu3߬7ñRñåƒûøE ­'­Çv ÓÓE °´°tþ–DBp>¼ðü Ï\èúCÊú™ÌT^ BsŒ§Äæz2߬7ñL|“ÏäOèÈñäxD ¬²¬2ãp¢àrlwmw™|ñN žzf‚Ñ"z•^E ”_ù°a+6×Í|³ÞÄ3ñM>“?¡Ç:ÊI‘½OCùpù0ãñóÚHüáøÃ`|ÿ!þñ¤ReüÇ2†@Õ®jWÁˆQ#Š5¢É»ÈãUãUâ†G«ÕjA½—À‡µékÓÉo娈HÉ>ȈdD"ÓØ9|~ø<ÐÀs žPO0Éúé•¥²TÐN;í)Bj©¥TTEUªÀäÐGô}T§þ­þ-“Ééçˆ 9ü%Üã'¡G¸)"ÒxçÆW6¾b‹.—uuÃÞ}{ö6 F‚A‹èâí‹·/Þ†† ;vÀPïPïP¯µ®Nª“ê$¨Óê´:mÍûø»ü]¨Ñ9ß§}Ÿfñ©¡eËÌ£m<+F§ˆÈàÛй³s'\Íùåú/×Õkø[Ö#Y+ÿgùñòãP+ŽÇ`ÿŠý+ö¯€¼Ýy»óvƒ÷˜÷˜÷–––CÀ°ì)[•Gyà›ë›ë› i]iGÓŽÂÑgZo¶Þ$–ü¯éoµ½Üö²)lðm»íجÜY¹‹—‰xxˆè®pE¸Âv¸Vê­{Tç**D j j jD‚%Á’`‰È6ÿ6ÿ6¿È™Ê3•g*E2çeÎËœ'pœ§ÜZ¾–¯å‹ØÂ¶°-,’ûIî‘Ü#"ªÔVm«G"ËvXî<µô©¥""Î>gßâeÂxöTö”ñ׌×Xmç‘#?šž5=kz ¿?¿?¿.u\ê¸ÔÁÀ``„„„`ƒ¶AÛ ªRUªÊÚ0í”vJ;eÅ¥îRw©>}÷Ðë‡^·øôu·Ü·Ü³gÍže|'ú3™Ó3§+Ä<1|±ÚWå«‚Å\T¼¨Ø\Þ²¼ey l­ÞZ½µ\ë]ë]롾µ¾µ¾îºïºïº!ŒcA---©¢©¢©" gåÌ•™+3áÓ5‡òå¥4GÙOu?Õ8ûœ}Ê'ªÉ¼cÇ>þ3„O'ÎÜûÑ“?ù8±ŸÍØ7cl¹¶åÚ–k°çž {.€£×Ñëè…%#KF–ŒÀûû;4mnÚÜ´Œ¢F‰‚à²Þ^m¯¶W³ý(BŠÈN":щNë±ëÙ~Õ*Õ*Õ*²“ÿ•ÿ•ÿõj± ±ì(ÌôÎôÎô®¿žmÌ6fÉ€à'ø ~dù8‡ÔàâÒÑ'€‘ˆD$­²¤,)KjpŒ9ÆcφfÕdÕdÕTô:ŽºÿZçYçYç…lwËuËuËÅéÄÄD²3tqèâÐÅ@°,K@¨)ÔjB^ y-ä5²ÓíÛ!·C8m}Áú‚õ…í²Þ}W>9¿Ì#óñ® ¾È<˜óÖ’D’Hýs~œçw¾x싱/ƾxN?¡nBÝ„:qÛ’Î%K:©sNÛœ¶9md…jjj ¬X‹µX -¬°Â iHƒäÀjŸjŸjŸŠm m m Ìy.ð\à¹@iÛÐÒ¡¥CK×|¤õÓúiý¨ÅD1QLŒ9Ì’XKºµ–€€€¾H¥]Ò.i—ôfc6f›üÎsçÜÏžkžñòŒ—g¼,D&Û’mÉ6nS¨>Tª'cŠ)Š)Š)‰LdB;´ihÓÐ& |^ù¼òy@KGKGK ÿ®Ü®Ü®ÜA¾?Ù™ìLvr›d}9Ÿœ_æ‘ù¨¦IÓ¤i“““>¸d=c=c=óÜËþqþqþqŠ$c’1ÉÈÿ  ×…ëÂ1QäDNäêGý¨ø‘ž‘ž‘ äƒ’J>šÍŽfP™[™[™ ´V´V´VäGò#ù¼°NX'¬tœŽÓq˜(ëËùäü2ÌG…QaT]êøÆñãcð„¸ qâ˜!®$®$®„—{䡸X\,.†'r"'#–ˈ("E¤ˆ÷ýîûÝ÷t•ºJ]% ¨TT**/ï}yïË{@knknk.ÀÆÆfÁ,˜á!ëÇUÄUÄUð^Ÿðú„×™Aæ‘ù( d,pÏ?œQÎ(g}-úZô5,Ñ™t& JÑ!:D<¸,.‹ËFªFªFª€âÃŇ‹–KŠ%Ð^Ò^Ò^Ä1BŒ¸õÜzn= >¢>¢>˜V™V™V­ï´¾ÓúÀ‡óá|8 –Š¥b)j¶Û‡ñïi¦˜v;5»4»4»`ÓÅt1¼¬p±ïbßÅ> ïlßÙ¾³€ïißÓ¾§°ª°ª°* ˜ æ‚9 ¤>¤>¤·„[Â-À‚­ ¶.Ø 666LÉ”L ˜KÌ%æÀ™îLw¦°ÁxÍ>Í>Í>Xe™Ç>ìÃ>HÑcôØ“'S%Qå“c,ûiÙOË~®ù\ó¹æxÇ{Ç{Çñ©ñ©ñ©óe¾Ì ý¤Ÿô,†Å°˜ßÛ Ú Ú €Öy­óZçk﬽³ö Ø§Ø§ØˆUb•Xpñ\<}“¾Ißð)>ŧ$r>œçþzþ0üa8º…4!MHGi#m“Aù¾o|äÔ›zSoÀëˆuÄW2¯d^É©ŽTG*`ò5ùš|½›÷nÞ»°7ÚíÙ@6 _Ê—ò¥¿‚ì%{ÉÞ'ù¸±kcׯ®¡›úSêϾ¢êêêB^·w·w·7ûªµ°µ°µ€f˜a“…v—ÝewÕIÕIÕIàÎØ±;cÀ'âÜö¾í}Û  fuvÖY€¦ÓtšÀ 'œ[Ζ³å¿ƒÒfÚL›aëy¥ç•žW€®þ®þ®~䪻ÕÝên!"qˆË,â3ø >ƒì¬××ëëõ¢¿¥ÔRj)…V¶衇ò¥|)ü%Éàʹr®ОўўÄ`1X "º#º#º¸Ž¸Ž¸@­ˆVD a…°ÀR,ÅÒ'œvÇfÇfÇfhk{j{j{¤HÒEºH>!"‰X¬¤“.Lº0éBNº2Z­Œþ¢o(t(t(”ë9n:n:n·º„<šÍÆf#ìÊTeª2¸Wv¯ì^ШmÔ6jgzžéy¦¸šp5ájpj墳§öÕƒÕƒÕƒÀUþ*•&câ õbëÅÖ‹O¶ZU;¥vJíÉڗЗЗ@PRRúù g¯³×Ù»ÍIvÿ²û—Ý¿¸‚+¸â›¯T *4£{F÷Œîy.iIÐ’ %Aì¥Øý±ûc÷“ Öo­ßZ¿#GÈrDx_x_xP«‹ÕÅ€v؈½b¯Ø @„àÖqë¸u¯çõ¼àßåßåß…õºöºöº ¡¡¡¨ÕÔjj5µ—2wæÎÜC031³ýŸ<-¢E´ˆkBêP×&EJ‘RdâQ­MkÓÚÎ㻈ï"¾‹`ÏOîŸÜ?¹Ÿ˜žßõü®çwaÕø¸-I!)$@ R(¡Äÿ™Åï± ±Àe\Æe<   €‡Ùh6š‚¿¢@Q (àADAéæc>æ·ÿ“å±<–ÇOvù¤6>7ò{H2I&É6’XKb·ùŽ|ôñ©ÀS§ïdßɾ“ùÕºººxÈrXËyD‘Gø¿’ŽW?ãgü °–À`Ÿ†àQÓRÓRÓ"nNNNãóÝ—¹/s_fÊ6tº ÝïÌìÌìÌ$•¸‰›¸)Ôʆî†^ô¢W¸Ž-Ø‚-¤zöÙfÈ[ÕÓÓ‘eÙmÙmÙ½zä¸×q¯ã^âÖ$$! \<á Oر+±* 4Ð@0žñŒ#çÈ9rªË]—».w±—šŒMÆ&#wÁãUW=^í{ì(s”9ÊÞ˹î¸î¸îhí¢]ðtñ•Ƀ³Õµ“Ü%wÉž-w[î¶Ü[[[ÞËqóróróºu¬³¦³¦³†Ë3Ç›ãÍñì%²‘l$¡’>—>—>{ø€=`"°ýÖõ[×o]0ÕÕÕÁÓmÀmÀmÂ¥p)ü½z¤û»Z1ßeв©ˆÜB®O•l.ßÍï]q+‰$‘$ò¥¿rœ?éLq¦8S¤Mk¤5Ò‰.šspÎÁ9±Jê:¤héL:“΄]Ø)ìvButúÑéG§‹3æÌ˜ÏÝP©ƒÔAy Ç8ÆmûA* ¤>ßµ³©²Ûdgggggã¡\Q¸NØå \½»ÕÕ»ùä09L_ø†FÓh½­IHBý¸ÆYã¬q )#…#…#…ÐRJ)¥x W¢ÞVo«·IÖ¾‚¾‚¾î†:]®N¿~ÚÞoï·÷§t#öFìXÀèïºO+>y!<ýç|ê­Kà?®Þ=9ûëÙ_Ïþ:ïïêdu²:Ù”mñ±øX|ø‘ªŒªŒª q+f`fÀ³MߦoÓ£ôû¦ï›¾o"kµÚm‡ü¢ØÔÀ¯æWó«m a†0Cvå{ŵڞæâðÁuØ6>õwf ̘…qª8Uœú_AePT†×?¾s/æ^Œþë‘ö‘ö‘vö¯–²–²–2ñÅQç¨sÔÉmQ,R,R,J›Ì Y!+üò4TPAÅõ`Öþ*PÂÓ<лYã³€˜ÉªY5«ŽºIOÐôÄEÃã•W>^)Í÷EÚÎ%qI\ҹ烈˜~bú‰¿EuÝìºÙu“|+=+=+=ËŠ]º5.@ëqPüI<Õ».»3±±‘¿JŒÄHŒ—¦3333óŽ·5Ó4Ó4Óh;×Ëõr½ýÓ¤¥¥Sîv¼ÑñFÇÀ8 .=y°´ýÇÿ”.þ K€ÝIEND®B`‚routino-3.2/web/www/routino/icons/marker-14-red.png 644 233 144 4103 13061246465 15426 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜøIDATXí—LTWÇÏû1E‚Kj@Y£¸þeý•ÈÏêŽ&Ú´.&P£Õ˜UÔÑ4! "mª¥!Ö¦ Î`LÈbëƒ[-I7ºY­»†4¦Î›â˜œáýøîóî›Y5›Ýóœ{ï9çóîýÞs3Da›E1Æç%¸\ .î…>üV÷[Ýou—®Q•{(‡r(OkM$’H"óX_kbëY<ËÇòÇÖãóby¢ùj¨†jxgì|ú±[ì»Ï¹CÜ!î’š6ž6ž6Žë[m}´õPñ¤âIÅ <¿<¿å'ø ~“Ãvh^õ¼êyÕÊ‘¶þ¶þ¶~-ÉÿÌÿÌÿ €˜Ä$&xà0|}ž­gñ,Ë[oÁ§¯ç#óÛ¼—÷ò^Ï_X‚üÛù·óoËëÜÓîi÷4ÜÐMËÒ²´,ÈJ½R¯ÔÊ*e•² PìŠ]±Gùú<[ÏâY>–ߎ©o~Û@㜜“s‰'Å“âÉŽû,ÀÖdk²5Év옶WÛ ¿Ü!Ê£€æQ‹Õb!ÕªZ1~øÃ!Є C46¤ rGðÃà‡€vLMQSô•lM¶Z[­lgõã#Ó iÐ4ø»ß²æsƒ¹AË”F¤!icz¿Ò¬lQ¶€vJ;À¯Õiuˆ¶ðQ3Àxó«íj»þ)* 4+SÊTdV‘F¤Œ±úŒÇàˆÄwN²‰óUç«ÎWi{õÙ);e'h#Ú€ Ë-UHp{ÑíEÑDÚ 6ã;4G”ì]Ø»¤eÒ2 œÛ°«oìl i¾4kš5ÍŠ¦ç¥ÏKŸ—2,xˆ‡ü¡ÆP#Œ4þ¦¦@™¹Ì]KV†@ùLù,z¼³®³÷ þËÞË^ãƒÆµqȬ>ãa| ôÔ–Ó[No9ù2Ū Õ𱡯÷½RrSr£ ¢¼¢¼"h:w:7Úÿqó›à(Žsžqž‰äWÜ¡¡‘úŒ‡ññú•Zb*1•˜JŒ;–@{øü "šÍ†6¬Û°ŽˆèñýÇ÷‰ˆòZòZˆˆÆÜcîèÎaºgºGD4Ù<ÙLDô^â{‰DDöL{&QâƒÄDDS%S%D4CûŠh RßÔeê2uW~‰Š«Þ~o¿·ŸÜA>Èy„ý¢(ŠÚM»i7M¤œK9GD4³AD”Ø›ØKD¤^T/Ò°}7öÝ "²~iý’ˆè‚õ‚•ˆèåÊ—+‰(””—”GD?벇«ájHßA|ŸÇç!7ã#ÞÎÛyûô°¾ÅMk.Ö\¬‰’À e©²äòƒèËTÚSÚk ÖFõÃóÏ€øƒøäŒäŒÀÆæÍdvô ~Yð  \é9Ôs(Rï¯-}|o¼€û¸l.›Ëž&aµ°ZX]ÛÈn™e¾e¾e¾²@Ú&m“¶EÚ‡V4ýÉô'Ñ—y£ºQ€âcÅÇ¢A¥•ÒJø éƒ$°Ï²Ï€¢÷‹Þ0™ÆlZ¸fḾéú&z´µvéðÒaÕx„t!]Hÿ|Œ’K’K’KˆÄ[â-ñV§×høå¶r[¹r˜•W¡oBß ûö²wËÞ€Bw¡;T¹«Üí'í§¨aÿäàä €±p~õóËí—Û#·úï;¿Ýù­0÷{„=ÿÚö}kóΙ²MÙ¦lÏ,ÀQï¨wÔkEF¿úUx?ï*¾«à¿™y33T³jVŸÊOÕKê% ”ªöýíû`¨k¨ ËWï^½‹MÆÚÈ7ò/K¹9Ünβ¶8@áÆýÚÉíäv·r\'×É´¢þÁÕçêsõEöS9¬Žì7€ ‚ý†?%¿HÛ­íŽì¯·ÓÛêm,3,3-3åÆNŽ Ç6ÍNv²‹ækPxœœä$'‘à|‚ïHñ´¶šO™OÉ©ÒÇR¿Ô­]Ù!;b'0 €\hC m×.i—P‡:à÷wwäîÈU/Ф(‰’ëDÆÁŒƒ‰xoãmÜ®ŠaÎÔÿn …Ç̣ܵ™G3™ªMÕ¦j× C»¶[A´vU‡ê@.¸à0ŠQŒF)v±²XYÙß³kή9»F+bùL©¦TSª÷eØ7Ï ãzã›ç~ë›g„µ+]y¥vSåT95¤©CêP¤í `€+q q q@Ûjh2™Oæ“wü1NŠçâøèõÂÙ8ín}“vå>¹Oî‹(w*c*c*X>¾||ù¸òC‹]B—Ðuf=“š.½xÀzƒE°¯Òn‹¹ÅÜ"§JR§Ôi\ªqFê¸æ¸æ¸i;b«Ø*¶è?IÿWW§¤7Æ Ø¡k÷ϯÒnáæÂÍ…›#Úu­w­w­ÇWáyÍ8 ®’«ä*‹kcËð£qu9ú/íMÚÍ…F¡Ñ³ŠW6T6T6hÊ e…²Bò?£ö >Áç˜GÔA¤·AŠ«—@ÿ£Åk÷D¬_ø3·‹ÛÅí¨ŒÊ¨L]ÊÏåçòsŽ8âèæ÷–€%`  w„;Â=îäþo–jüWB%T"Þþ¸Š×x×®—ëåzŸþ:<¾Èw2o<ê§yMùœ 4íIEND®B`‚routino-3.2/web/www/routino/icons/limit-146.png 644 233 144 2665 13061246470 14610 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜjIDATHÇÍV]L“W~ZZi#4ãRãÓ¡‹NHæ ØIÍtv*QŽЌs¦¢&Ncgô¹ Ã…‰Q#ŒSƒbÔ¤‚ÂEÍ`e.­AԚΠØ¡_¿sž]”C«n÷ž‹ïËûž÷}žçœ/çùH@öä¤qŽqŽ13¿Kæ-ßX¾Éó&âó:iØlØüÇdV]VIθ<ã²x’ŒÕ¼ªOí’ø©|*l$é¾tŸÁ9{È­K·.µä$âŸÛIëuëõÑ8YÝZÝJ’ÍWš¯ð{2Òé$É!ç“LÆj^Õ«~…—ŠÏ;üi¾e¾eè'Ó§¥Oȹkæ®YðC¢àé²l}Ùz’ §…Ó¤‘$Iý’ÌN’QF©Æ@J¬æ'ëU¿ÂSøŠOñ'ô€´•ÚJrSÕ¦*ë¥DÓ_Ƀöƒvŧ]'yЧ˜AÆ£ñ(Iê;ôœ e»l'Ih “±šWõª_á)|ŧøzðö·=û5Ya©°|C’Z)²D)Jµ­šüI^“×(ùÎù2_æ“â‘'òRò[¥Gz(ã¿ÅÅQBÔ§ÜÁñ-Ú¤TüH”ŽÂúÊú*j"ƒ"(¦p¿Õû´­„còº Ê ßùÌg>)2 )ùÙœÍÙ¤”¯åë”|‹¨Uã¾>Ê e’ŒY_Z_FMJϤ°óÉšc5ÇT·X.Û´›ÚÍäÂÛϵŸi?C>+|Vø¬ð}}¡šPM¨†ôûý~¿?™Zò´äi y¶åìÕ³WÉîÊîÝ’;žXŒXÎñw[}Úó'…u¹hº×tdIÊݤCœðåú2|¤Ùgö™}¤·Þ[ï­Ok§µÓÚi2¯<¯<¯œ\XX Å~±_ì'‹z‹z‹zI—ßåwùÉ•ƒ+Ã+Ãäóæ¾²¾2NLÊÛ-Oxx(a]n#ù óAÁ—]µbÕ ûÀp‰ö³éø#lkmkmkºé¦S£vWí®Ú]ÀØÑ±£cGy–y–yà~ñýâûÅ@¨1Ôjlå¶r[9à°8²Ù€­'w¶0´ä„µßÚÿžý‡ókÊùõ>½dŽ~X?L'è£ï}秇zH~Ä õã!I6²›Ý”ò‘¾P_HMú>}_Šóë¦ “Ú©·œÿƒýW~°·‹ö>öaÞ`ÿ‡›¹(ÃLÅIEND®B`‚routino-3.2/web/www/routino/icons/limit-9.6.png 644 233 144 2611 13061246471 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü>IDATHÇÍ–ßK”YÇŸ±mœÉ¬&FÁ- D ((Ñ k…–•d‘ºEiQ»±F]l… t±³kAQÛÐ-£-ºûe¸PmæªYƒ–…ÎZ;¨Ù¼ï{>{1óÎûîÖйžç<çûùÎ9sž9""2+ú)——7#ÇUYy×*ת¬ó‘ø¤Ž Ž O~„™Çgðœñœ1žZ±9oÖÛ׋Xúvž™—Yb%â›â›EѸ6ålÊq%EâŸnû²ûò˜ÕWª¯\:{é,ßÁPûP;ÀhÑhX±9oÖ›ëM=»¾Ôþ/S¯M½æxñÎx§¤¯H_‘¹7RЗ ëÖ®[ 08epŠŠ}˜ÎtU„aŽ[lÎGëÍõ¦ž©oòL~Ä€·Ð[(ëË×—»OG<ýjæÖÌ5yáË@=õL-¤…ôJ½’IP·Ô-8ÀŠÍy³Þ\oê™ú&ÏäGüÈÏÖ_Œ*s–90@ø.è/ô`„µÍÚfÂÚßz²žŒRß«j'ÖxÃÞX¡Ú¡¶¨- =Ð&´ ”ah[µ­„AÕG‰¨¾*‹/‹7 ú‹mG)"²àp¹‡B_0Þ걎fÒô ½‚qŽÒL³ÍÈ6¶± XÊR–Úò©¤’ *¨‚*hË·ÐK/°GïÐ;7õùÐ3Ñ31~ÔOÔØÉÛ°ëð®ÃÀ(€‘K’æÒ\Ö<^ð8óq&4,jXÔ°ú{û{û{-®±ÏØgì³âg¥ÏJŸ•‚ÿºÿºÿ:<üæaéÃRKO= ß ß„ˆE#7Æú‰{ð\xwáaµ=*0Ùu¤«¦«²Þf½Íz ååå;?w~î|NNN± '‚Á (h+h+hƒÕÏW?_ý!p9p.p.V>©ö˜¼ßô'2£mF[^¾HáòÂå",qœŽžtü=÷=Ï=HrZrZršÈÝ‹w/Þ½(âô8=NHË£–G-$6nôßè¿Ñ/Ò·¿oß~o®7×›+²ÄµÄµÄ%â}äíñöÄÊã÷M^„óžDO¢Ñ#/G^‚Ú»ö È9s ç”d–d–d‚Óïô;ýÐXÝXÝXmíXã±ÆcÇÀgø Ÿ§§§0§}NûœvhMkMkM³ý¾6y¾é'Nĸj\ut‰h¥Z©ˆ¼¯ù•Þ'¿OzŸ$â«óÕùêD–5/k^Ö,2{ãì³7Šdägägä‹hó´yÚ<‘„# GŽˆ$f'f'f‹T¥W¥W¥‹$ÝIº“tGdðçAÿ ßÚa²M^”õ'* ýù‡ÈÍÖ›­"ŽßDDØ!"Ò(RަL9(*‡ŠEJJJD¶wnïÜÞ)’·0oaÞB‘|òÉG¤¸£¸£¸CÄ—îK÷¥‹LsOsOs‹äuçuçu‹Tº*©DDDµ¨ù0åƒÉ‹ðc~>º•DoÉïÚyí¼u‹&ÿšìœì„ׯ^¿zý XÉJV‚r*§rBðPðPð¨15¦ÆÀØmì6vÈoÄ7âc¾‘adXzôi´6Þ§o¥­MöŒ÷ŒÇÖð•~B?Á¸úVÕ«z[ÍVÙ*¨¥–Z[¿ª ‚ P *A%Øê¿T+Ô  P?£Ÿ±õ±ï“}ÌÖù)s•¹-Öù»õn NÒ‡«v5ªFQtrŸûÀ?¼ã¨5 €qÆZh¢ Ôm5¢FPœ7\†‹0èOô'vý(ïãÎÿÙþW~¶¯‹Ïö=öy¾`ÿúÑÏýSú[hIEND®B`‚routino-3.2/web/www/routino/icons/marker-59-grey.png 644 233 144 6304 13061246466 15641 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü yIDATXÃ…—{PWöÇ¿·»‡*ò0òøñ4âÏ(Äð_Ñ€¦4&¨å¸uSD]+D ,”©¸`A¤1ù1ÍjÀ•‡Ì¯èŠŒD„ #£#303Ý}÷fp˪TÎ?·nß{ÏùÜsNŸ>MRRRRRRàŠ1˜(î÷€{@Õ)§SN§œ¦žiÏÒž¥=[:ºQ7ê–õÞ‹÷â½fï0W˜+Ìô(ŠQŒb’Œ„ À}ÜÇ};°;èQéZéZéZ’Ìõr½\ïbÒOúIÿç'S§¤NIr¹-=!=!=èxÞŸ÷'+Æ8Äë6.WfpæasFLÓÄ4ñºÅh1ZŒsÒªÒªÒªÎ<´è,:‹®ö–i–i–iÖì¿9å:å:åâÒì%³—Ì^B’#$’ 0Ç}ŽûwÀ>·¯Û÷ÛÏÛõë·Ù³Û·óØù8›RUP…¸™l'ÛÉvÿ\ÖŸõgý:eüÞø½ñ{?÷‰µk'Ö û–Ü_rÉ}Æ:£uFëŒV²Jš,M–&Ä/ð¾€&˜`°[±€7¼á “yªyªy*VµÖ·Ö·ÖSk]H]H]ˆ¸¯oYß²¾efËýåþrÿù2a»°]ؾ8—*©’*l& `’ã‡G¨G=ê§Nà*¸ ®¢þŸ–ˈeÄoeÀ;ï¼ÃÏ[¿gýžõ{¸3®Wƒ«˜„I˜žÑ èD'g8ÃÀ0†1 ÁHé"]àñ/ðÜ€b@1 @OÙ‰²e'øÍ=×z®õ\ã¯á×òkùµ‹6baÑ“!ƱѱѱxJ<%žÿ6Õ˜jL5~+Ö¬ XïR&(” \ƒË.—].»0‰¿Éßäobª˜*¦‚C;ÚÑþ_@WÉUr }¤ô¸ˆ‹¸ˆkÄ5âp‚RP JÀeÐeÐe“ìúâââøUvûv;IS§©ÓÔ+æX-–ÆšFÅbH1DwöîìÝÙK]K\K\KÀŒ¥Ä@ ÄÀ 3̤B @€ ,@µTKµÑјƒ9˜ƒq·ˆ[Ä-£bTŒ †ÄÄDˆEŠ"E‘‚F\ .¢qˆpˆpˆXÁÐBCþg¶F[£˜¦˜¦˜&,±:Øô*†îݺ 4š Íà7ãoÆßŒ@KaKaK!Ðv°í`ÛA@P *AâC|}‰¾D_Üaî0wàQÜ£¸Gqã€???ƒÂµÀµÀµ1¿Æüó+–Øyì| Èòoït{áöÂíކG‡G‡G“BlÆflE›¼MÞ&T“T“T“€‹ï^|÷â»Àùøóñçãò¹åsËçL=SÏÔ÷öÜÛso½:{uöj@Ý®nW·mmm€:_¯Î˜ãÌqæø¸£ÂÃÂÃÂÃH¡Ç·ƒ ŠGÏÌ?3ÿÌ|j#ŸÍgóÙãsZú²ôeéKJ‹µÅÚb-¥–JK¥¥’Rc‚1Á˜ðjŸ ‚‚Ò#Žl8²ÒÊŸ+®üùÕz÷ãîÇÝ)ýòٗϾ|F©^©Wê•ôu1Úyì|¾ÂWøŠ„0ç˜s̹ñ›IÁ÷*§è-z‹Þ:öwìïØdúeúeúÜ|n>7x¿þýú÷ë°{a÷ÂîæAó yp»ëv×í.0V—x—x—x€_ůâW½ ½ ½ °‘Wö™˜˜¡E$„a½X/Ö‹ž7D" ‘èæð ø`ÙX6–µŸ¢…h!˜ujÖ©Y§€£G7ŽÓº§uOëJ†J†J†“¯É×ä DUFUFUå«ËW—¯N'œN8|[÷mÝ·u€ù”ù”ù€Ld"ó•?l#kl26›ÐÍ0L=Ï.mYÚ²´åÐåçSžOy>…ù~bÝĺ‰u$Êû ï7¼ßÀ¯á5¼’ÀmÛ·o¹½åö–à‘ë‘ë‘ „´‡´‡´7–ßX~c9àyÍóšç5`¡j¡j¡ ÅËâeñ€!ÃaÈÂUáªp Sè:0#sFæŒL`òÄÉ'OĈ¦HS¤)‚¤î—º_ê~ÁA©«ÔUêÊg1XõXŸZÌ¥p)\ I¾œu9ër–`¨6Tª!ƒÅ`1†¼Þ¼Þ¼^ a[ö†m¯bÔ’Ñ’Ñ’ÐdšL“iW§]v8{ðìÁ³¡Ð¡Ð¡PàãC>È2L$“%“%“www˜Å±@,€üRߥ¾K}â<¢!¢Aˆ@„Sì&ã&ã&ãõŸFÓFÓFÓ‚v² Y†¬ÿýR÷¦îMÝ›ÂÞȲȲÈ2fõ¸õ¸õ8Ìê.u—º Üu¿ë~×ý€±Cì¨Q ¢áo‡¿þö«zziÿ¥ý—öW†¯ _´KµKµKu‘ë"×E‚zûzûzû‚+÷+÷+÷MîîîÌ.Ù"Ù"Ù¢ß6Zo[o[o°‚~tøÑáGnã6nûäItDwÝqøÂð…á ~ÊØïb¿‹ýŽÆ®œºrêʩ䊶Z[­­}FŸÑgħϧϧ˜²uÊÖ)[øÀ>´ÐB èOëOëO»w?î¼õÞzo=àyÂó„ç ˜Z‚Z‚Z‚ðAigigi'ªåz¹^®]FYÊRvöE(BÛ?ac&ÄLˆ™À6’RRJJãà8´¬ÔIê$u[#ïù½ç÷ÚèqÃã†Ç bü4ðÓÀOñ?ž5ž5ž58âü‰ó'ãÍp7qÀ2,Ã2À)Ñ)Ñ)ðÊñÊñÊœËËËa0<5<5<…óåå%ß £`dV±ÖÀ>/A bS™‡£8Š£ÜT[›'DŒõÜßI>É'ùWv3‘L$¹¯È@óMuKuKu Ÿ8  È 'I$‰$Á 6ˆ b€ô €üàg@Ðô R‘Šfû—®æHÍ‘š#ÂÞþ¯û¿îÿšË“úJ}¥¾?¤gggeÿ„T¤"•ü]èB¿ØÞ:á!â!߆$$!‰TL¯˜^1½"gl‹l‹lËéý‹û÷/æÊrÊrÊr„½vƒä¹CîÀ 4ÐÁF^½lˆCâ@™¦i€ô¦æ¦æ¦†ÆÞnºÝt»‰Íqrwrwr2j9k9k9{ ³-µ-µ- ª¡¸Ø´¨ì &ÛxNtEg¸4?m~Úü°$Y’,I2ܜܜÜœ»_u¿ê~›£Þ Þ Þ@cÉn²›ì†T,KÅRP8ÂŽ¤ƒt <á ½F¯ÑkðCíÌÚ™µ3áâ¤sÒ9é1RŒ#d2ǘc̱'£L1S̳y¶²ºÂþ ö‹Û~I¤¶©-DljQ‹Za/™Gæ‘y±ëÆ~9~ú—5ÑšhMÿú¡ø¡ø¡ÈDÍ86ãØŒcX+vˆbäL(Ê„ÂÌ'óÉ|2¤ùAùAùAB°n®n®n.Û)›)›)›™3ì¥Ù× Š…b!—g‹ì§öˆ¥§§§§§Ã`÷(lÆsÈ–»{m¹›GrI.ɽr‘‰ab˜˜}PB %óM•µÊZeåNœ8 9Ã0 Ã`Ðî‰Ë#—G.ˆ¦'…O Ÿ²²C²C²Cm—ÌZ³Ö¬=”ݹ¼syçrÀ`;'·ÚùÆA_¶oÛܰå_˜~aú…œu²²²?¤÷{õ{õ{q?¦ü˜òcа×Ö@»´º·º·º£¤¾±¾±¾‘l–wÈ;ä€ ˆ½Îmâ6q›FFFF0/möVÛÆ‘×¹XüDGGGGGƒ·M[©u d—.L¦ Ãÿ Ó„i´[¼4P( Œÿæùâ狟/v¿0Ð>Ð>ÐNÿѬjV5«„…ÃÖaë°•M’DI¢$Qû§Ò“ô$=yöÒXÃÍöà%^â¥èm€ÍQüë<"»iPC µJ+h­ˆîbÊ™r¦üjàè{£ï¾'†I %…’B¦U²JVYw-¨<¨<¨|i´¦KÓ¥é"ÿ/zˆ¢=eÓ[e4ýƒ?‘×r×V.„TìÆnìæî’@þDÕTMÕŸouôuôuôeÚÙ‡ìCö¡ÖW̳Ĭħ;6vlÆhÓgo,GþŒã?ÿh><âïéIEND®B`‚routino-3.2/web/www/routino/icons/limit-46.png 644 233 144 2423 13061246467 14525 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÈIDATHÇÍ–oH•WÇ÷ºv¯a©u]´þëÐ^¬¨@¦”p%£Z`f*FT8vVcÄ’E^TÔ›Ù‹Q•¢EidÞlNš°Y9ŠòB3L¹MÍv·ëÌç9ç³÷>÷y6°í¥Ï›ËïwÎïûùžó<çw€ˆˆ¤ÅÜ Ü Ü3c±ûs;ï]ï]Ÿu)Ÿ1ÁµÅµå—Cz*õ@ú…ô ê‰[ãÖ|g½ˆ­ïäYyI;á¹ê¹ê*ŒÇG bYÅ2oF,þö$7'7ÿi@àzà:Àµúkõì†ÁÎÁN€×…¯ ÁŽ­qk¾Uoé9õåÈ¿ø"0íæ´›®_Áó¾ç}X´nѺÌ/cB™P¼©x@R’v€ùBŠ."D°ž!GlÇç[õ–ž¥oñ,~Ì€Ïïó‹@IeIeòùXÁ“FØ7ß|‹7Ñ ç8)`DŒ€¹ÝÜÎ8è{ú.\`ÇÖ¸5ߪ·ô,}‹gñc~äŸï¶¶ʼeÞ„¡Àì0;€ßÕVµ•‰ø€ÖKu¦Îõ‘ÊRY‰CWèr]ÆOÆ}ã>(¥³u6T­ªe‚1ó¶yЖ¾Å³øâ4´ô;HLŒ¼ÏÌgf‚ó)©rUN4‘YÊ–€îÒ]ºË6Ä\æ2ô°ÖÃŽ| W¸|ÁiN¨ýj?QÞÆõ<‹ó7væ{¨>\}ØRS+˜0FŒ{#tž^©WÚ¼ÞêÞêÞjƒÁ`зV‡V‡VCmKmKm t—w—w—;v´[¿Ò¯ÐD°vðü˜Ÿ¸±Ÿ¿†Ëo.¿I”Æ[óœyŽq*)¦xÊSž‚.ÒEº²J³J³JaC׆® ] ö¨=jäõäõäõÀÆàÆàÆ ¬^3¼fúšûšûš¿2ÒŒ4Ƽ?æÇ-2óîÌ»+?ñ¯õ¯¿_q—fw»G<²Bò%_Dr$GrDjJjJjJD¢££E{{{EîäßÉ¿“/ÒÛÔÛÔÛ$â+õ•úJE ¼Þ¯ˆï¡ï¡ï¡$×î÷ˆx¼?îÒg¤ÏPaèåÐKûØ›OŒv£Ý^a½¿Þ_ï‡9á9á9aØÖº­u[+ä†sùa8Úx´ñh#,?°üÀòP¨ Ô`^ç¼Îyж°maÛB[O˜9f޳ÍXü˜·ˆº¡n¸‹›Í‰ù\߸Ê\eö Ý>·ÏíYe®2W™"Ž=:öè˜H_C_C_ƒÈ‹Áƒ/EfeÌʘ•!¨ ÔêD2:2:2:DúOöŸì?iëñ1É$Û<›÷3é7†Ù`60D‰‚YcÖ˜5öŠ/f_̾˜ Åg‹ÏŸµó¡ŠPE¦{¦{¦{ jWÕ®ª]`´­F«ã´V™IfÒäߨä§òcÀpœÊtªNõ\=WÏa,o,o,FoÞ½eó̈1#0”;”;” *G娇¡cŒ¡÷]§ò} µSíLôf€`”QFÀJ*©¢StŠãô}¨gëÙ€ŸÝìP'Ô ¢ñ½ú¯>ö?:ÿ„Ú¡vØŸ#â0ƒFh¢‘FкM·—xÀ4¨½j/˜f»ÙîÔŸ´óOÙÿÊ){»˜²÷±©yƒý…fk²Ôï(IEND®B`‚routino-3.2/web/www/routino/icons/limit-35.0.png 644 233 144 3016 13061246474 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÃIDATHÇÍ–ëOÔWÇÏ È€LG»SX@)4bu–ÚRlTÐUT.VÓ³Þ¦²]²1 ‰6ë ›ÊÆìj²Í "„ÍqB•¤1ö/Äd !Òhœ-A· ®Ã€îë0ó›ç³/fNgbÿÏ›Ésû~ŸyÎ9ßßQ ”RjaôW9Óœi¶El³#æO.K.[úˆÝj€i»iû÷ÇasàõÎ×;Ã÷b¶Žëüøz¥bøñ|Ú¯ª˜ÃⲸL¥Qû3Øõö®·“Ó#öŸ¯AŠ;Å=‚û>î¸Øu±‹z˜˜˜..…˜­ã:_×k¼x|õÙKüJÁ¼þyý¦`I²$)Y³6.ù}$á‡%PU^U0–0– f0¼€«”~üè5gëx4_×k<¯ù4¤i%i%JÁ‡}øQJG¤àÞßàHÆ‘ ÍtM4a…?ä0jZ ×ä&L³u\çëz§ñ5ŸæôÛÊY¥”:ýkØéÙéð$@ðfè_Á7‚o@øap68KQÄøÔ8l#ßÈ3òÀpÃü‘&šxy‰¬Õ„j†~ ZƒVßFða§§˜Òüz+G•Rê­/ ÅŸâ÷'rÂsÓsø€­ ÈÌÒF;í ä‘<Š£400A @€@\| kXSB €l–Í̲1Š¿-ʧù¿ô£x¬”R­×±Ü{p¯F ÛïmþrøK8½átÉéd(k(c(#Æw¡âBÅ… h.k.k.ƒöêöêöjxžù<óyæÏ&†gØ3ì†æDçŒsyð|Ä5âŠñÉӃŋõÖ¶^Wa·RJ ÷ ÷ I››“ý¿ø|Aî‚\Õ?Tß©¾Ùg²ÏdŸ¾K}—ú.ÁÒKo,½U;ªvTí€Ú®Ú®Ú.˜è˜è˜èˆ5äÍóæyóÀî¶»ínXñíŠþýïÏmÎm&0Ý ûÁuÅuä‘~”Ô¼–þZº¸`:}:îÛGW®†æÏ[[Áeq%¹’`}öúìõÙÐhj45š`‘}‘}‘*OUžª<çëÏן¯ÿù¤:‡:‡:‡ ¨¡¨¡¨!æ_uçÖwZá¯ûzê{ê-0ÖΗù".³©%a°_lbù2ŸYÙÅoô<ô<Hñ¥øü‰<Ð:¦•? •·:±:8Qf¹š MmƸ1NP÷ÁïpàùV¾‘o€«\å*0ùVÊ¿#d&š%œN&(ƒ¡™Ð pY+”oîeåu¿•¯ìëâ•}½š/Øÿ`šÇ¢Ö6˜IEND®B`‚routino-3.2/web/www/routino/icons/marker-17-grey.png 644 233 144 6142 13061246465 15632 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü IDATXÃ…—TTåºÇ¿ïÞ{~“É ?IMáÄ1“ ñ˜]…®¤ ìÜXj*-]p¡2}d@#ÑðWÃÕp5gv§Ýi^¯]­]­]ÍǦ¾™úfê›Üõ„zB=-æaæ§a4Œ†C7ºÑ `æ`€)La @8ÂÒCzÀã>îã>8‹—ÅËâ…>Ãdž ói}ß÷}ß÷=wMª*¤ŠŸ.ó)| ŸòÜv<‡çðÜà$£hQ´(Z‰¯ÄWâû·Ù.Û.Û.¯×¦jSµ©ü†ŒôŒôŒtîššU³jóÄâñ@Ñcô8lÇvlÈ(%£i ¤x¨Õt óÄ<1ßÄ7ñMÀܬ¹Ys³0Ïã_»I»I»‰ßà‰ïáñð‘üºüºüº¤Îg‹³år‹×¤×¤×$ Ý=´{h÷iQŸVŸVŸCµTKµð"Á$˜p '€«¸Š«Œ¥BŠ?¶eX†e~Àø–XK¬%â©u§ÖZG£'¤Ò )1I£¥ÑÒèõѬî]Ý»ºwËßth‡&`õ†³În8‹Ÿ¬~²úÉj²Ql›ÅfÌa(C  ¨ÆÓÆÓÆÓ€á£ÃG‡êu‚:¾¾¾:/w^î¼ ˜7™7™7÷ïÞ F #†0¬V+ÉÉÉȼÞFo#D®‡ëázÐýcÌ1?Æd‰V¢•hÃF8>”åCÿ´Û[ï­÷֣𩸧➊#%î÷æ™ &ˆ „0!Løëüuþ:`ˆ7ÄâZE«hð:^Çëœ:?t~\ì»Øw±°ê­z«àR¸. vb'v`4m4m4 xcì±7Æ 4ÐÒ(M”&JCJ®Ü¿rÿÊ}ZuVU÷§ÝœcÌ1æÃ?"“"“"“£hR4)š`. —„KP²Él2› ôz ½@/è½LNNO[Ÿ¶>m­¨ì†ì†ìðvÒÛIo'b¢˜(&2A&È@_§¯ÓדÛ&·MnO.ž\< Еt%] NÕ¤jR5Á´2heÐJäÜ»=v{ ÇÅQ%Ì9æsn6ñ'þÄ`Áø‚ñã@öúìõÙëðéðéðiÀ¾Å¾Å¾evÙAv·†[í™4m4m4mz#{#{#Í}›û6÷Í®£jª¦êÙøÌËÌËÌËNáN‘†õcýX?Z533ƒ^~?¿Ÿß–‘3rFŠ‹¸ˆ‹€¬OÖ'ëTÁª`U0ÀeqY\@mÔFml’F4¢ Ÿ‘ÏÈg³·¿>ñõ‰¯OK+–V,­4OhžÐ<ÐHI#¦•ieZAÝÓYëmëmëmô2ZFËhi#ÿ@þü¾¨×§×§×‡VÝ)½Sz§Àb,ÆbØéVº•nè-z‹Þz¨µ¨ˆš¨Él& žÏ‹ç´£í@———?0R>R>RÄr±\,÷H&×Ñut€! aö¾ä¾ä¾dÀ4d2 á¿å½ò^y/_Ä ©HÍ+ãr¹\.—ä4h4 AkYjYjY %qqa;°;)q©"Uy…¼B^yä 0À0;¼Yv³ìfp0à`ÀA@}@}@} =´‡öL“ÅdÁÁ§ñi|”_š¾4}ic‰‰˜ˆ ÿC"áS)ã{Å÷Šï•÷KuRTW18ºbtÅè ¶Ï°ß°ß°_ØëŽçE·Ð-t Ç[Ž·oÓ«§WO¯žc_e_e_ø¾oºotß辄÷‡÷‡÷?’ÉEt]êþrÉjÞ«y¯æ=Ñ6X9X9XÉ\“žžžø¿í®×€k`Ÿ‹ùùÈÏG~ÐŒf4ÿG±dX2,¾ª˜2N§ŒÁñŠxE¼‚>Ÿ¤OÒ'éÉOœþký×ú¯P35S3 }Aû‚ö…Y~’Ÿä'¶–¶–¶ ¸:¸:¸P«‹ÕŧÙîºsèÎ!l«(®(®(Æ—ŠŸ?)~š^KYÊRvù6,ÄB,ìxƒÕ=¦{L÷ÛBÊI9)°J(¡¼“4sïŒé_Û¿¶-mñùÊç+Ÿ¯ÈÄüÄù‰óñ¤z³z³z3$š"M‘¦< €‘2RF ø†ø†ø†²Y„, ¢!LLzOzOzcÎãã#MÈ2„ fke­¬õÐ?¡ƒºKÅ(D! ¹w›'DÏôÜ‘“ä$9ye£ctŒn_ 2 æïF§Ñitò™–s–s–sP’›ä&¹‰ ñ’xI¼€‡G6‰§ïŠwÅ»ã0?”ŽWmfmfm¦°wüàøÁñƒ\±,L& «,/ / /üè[ä!yä,zЃ>ÞÓª0€ ðíÈF6²IMäùÈó‘ç‹6ËwËwËwWŒûŽûŽûrèaÔ0:«]ò ù…üÚІ6vØafJ@HAI%©$•5™šLM&ú|ówÍß5Ç©|T>*ŸÁig…³ÂYqàýö¼ö¼ö<€š¨‰š0×çs¨ç$<'Îçˆs0·õ×Ö_[œÙÎlgö÷UÞ*o•wÿ¹.c—±ËÈÕm­ÛZ·•>Oö=ddb¹X.–ƒB}@Ðá OxØGL#¦*ë—Ô/©_‚¹*³Ê¬2bŒ#ÆxŸ9ÎgŽN3eLSƺUL“~€<•rÿ’È<›Ú½‡‹PzÔ {I,‰%±Ïožùåøö‚+Ó•éÊÿú’ø’ø’ȬŠ:u<ê8RÄN±Sì„’YÈ,dÂÁçð9|dŸ„}öI˜n~ÆüŒù¶[¾D¾D¾¤èÏ3›fß5±D,K¸bweÿÓS±‚‚‚‚‚Lx2 ÷‡rkw¯[»Åní^ü7íºŒ.£‹Ï´”ZJ-¥P2 Ã0 x2Ñ`o°7ØEÛ`É`É` Û-?,?,?Ü^ër 9†ÔØØ¸µîuJ ‡ï!èo€=”nÿëÖî…Ӯ߸߸gÑçêsõ¹Â^÷¹8·MÓ¦iÓàŸ---$MÙ©ìTv¢VÔŠÚ¿^å^ä^ä^´¯ fÆÜñ6º¯ößr±ø‹‹‹‹‹‹ï¶Q)•R)É2/2/2/ÂgÂa°à:/ •…ÊBÿò÷{ñ÷âïÅkÎ[:,–úaëç­Ÿ·~.<;åšrM¹ØlÉ*É*ɪý´”–ÒÒ/j!ƒ 2¶cØèidîDñ¿å!øûíæ£u¨òh ­¡5q=L5SÍT:<<,.’”HJ$%L›Áf°ß|VVV½&ÎÔcê1õ¯Äùâ|q>ýÔí×è´ýƒ?°ßh×}\y؃=ØÃÝ"é$¤ÿ+ŒÖÑ:Zwh§"H¤b:Øv€ ‰ÇÄc™¿vnïÜÞ¹˜D¨ÛŸ§±´ÿÇÿêù¿˜;Æ<IEND®B`‚routino-3.2/web/www/routino/icons/limit-4.3.png 644 233 144 2500 13061246471 14567 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜõIDATHÇÍ–]LÓWÆ¥|%RÝ ÑˆÉ0‘„âÅv'Äú… )–õ¢ ¦1:/$Æ8LL0Bæâ *T—iü¨ºD¶/ªË˜‰³MÄáˆÕ@ˆ "_ÖÒÿùŸß.ÚÓÖ1w͹iŸ÷¼çyžœsÞ÷!„ÈŠþ °Z -¶¶4ÄãéëÒ×ýÁí’ª“ª€ù'æŸÈîÈî0ûâXÏëüÄõBÄùõt\d‰x íRÚ¥¤Š(n†º’º’ô"øØȸšquÚ€í×·_ðy}^vÂp÷p7ÀXÅXıž×ùz½æKäÍÿÒRn¤ÜH @ZjZª°xÍâ5K¿Œ$ü½ª6VmLLV¯€yÌSÀ$“è1’€õ|4_¯×|š_ëiýˆ Ë– ÎÍÎÍg" ú¾‡ÆE‹´^ø*p„#ÌcÒ˜[äB î¨;$‘q¬çu¾^¯ù4¿ÖÓú?âý³mu@MzMzÌЯLÈ.Ù`úLaU¬ªU5Ê´›+ÌÄÇk^ó:Í 9aN€ñT¦É4”ù»Qf”ùL>f¢üª&µ&Ulu$¥B ÃÓVè—ýx@%˜ÇÌc¼¥˜j@ý¡î©{ †Þð†7 ø‡8øñãOˆÃ-n 幇·Ñh%Áþ©þ)ˆëGüDµÿžƒžƒ@À,™#s@}¦\Ê…ÒüO†à’à’àw»Æ] lʦl0êuºU¬b—ËÆexyíåµ—×@~'Ûd[¼*yhtݱýPU¾×ÇŒ~#FPÉŒYoÖó–Ñhdš1Æ…BLDJ>:¬X±‚Ú§ö©}ñ°Z­v«Ý@‘l–Í }ì]ÿtÿôûØÿtþ°ôK?€¹ßÜO˜¯¹ÈE¹ä˜H$¨€ ¨"Hh£…P?«çê9ŠÓRIEd¯ìŒ(LoV石ßÊ9ûº˜³ï±¹ù‚ýÑP³Meª IEND®B`‚routino-3.2/web/www/routino/icons/marker-77-red.png 644 233 144 4052 13061246466 15443 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜßIDATXíWmLTW~ïǃtGH7 Ì¬!®Ö:Öª¨Ñ0)5Q•l¤®¤›tqT4Mhp£Tª•˜ÒØXÅ;ÌEÛõkÃfÖjMcX»¶qÒ¨0Se¢€00pï=Ïþ`νw&®îf÷ý3÷ý~Î{žsN†hJfPœˆ+“”$%IFc†ÔiíÓÚ§µ—äËš¬ÉÚ­´€Ð`ÊÍ’L2É\âuvÇó|^×ï'®ŒÇcÅç#ùÄ@¼?ã¹]n—Û…Âa‡Ä‘>”>”>„Ëë³î°ñÁÆ<<<¦Îý<žçóz¼>ï÷|<$®ˆ×³?ŸŠOŧá|BY•Y•Y•Ú®ã×_?~¥    AB#Á€0†óóxžÏëñúñý²?y>>r¾$öнboøÏ¼€çšçšçšº´g²g²g=ˆ Ëcy,ªV§Õiu€¶P[¨-´R­T+µè1?çù¼¯oŽëï|É€&„€ ’Èäg¾ç ÞƒÞZo­ZjÛ£/Ñ—`X=3î÷,¬ºU7€ mµ¶´—µ—èÌÇ| ]Ñ®˜Ð\š `aõuõuÀÈÕãõy?ÞŸãáøÈvßvßvÿE<ÀYïüÈù›zºº…ÁXaíc½Oïƒ)ÃPÍùü2¯j³ml›é =  ³ÞyÔy”Íáx |rµ\-WwàŽO·4kÍ{7V ¢ƲƲà«U_­mÍiÍ€@Y  ”/•/@ÉV²à®xW€óúy¾øù‹Ÿ-ñÑ6[› Zo·ÞÔÀ½E÷€#Ÿni¶7ÛÙ»ÆdãðëOÏMÏMÏÅÁÇ%î·‘¨Â5X4X`ØÑåè¦Î=“Â$Ø_µ¿jµ~çó;0ûÑìGÏŠOñ¦x Ç쮳?žýÑì÷¸¤¯­¯ àx8>ôÐÚÃk¯=l®LëÑÓô4ý˜‹¹0úõè×0´th©uË–€Â”«}tÛè6 ãâ[Ê[ à§‚ŸôǨУÕkõfއãcGê[±­ØVlœ±$ªÂkxˆ~Iwé.‘}‡}‘£ÓÑIDÔ±³c'Qp"8ADÔ²´e©õIJ""šQ2£$.~ 8@Dtê½SïQr,ü4ËfÙf²­ÍÖfk3Ž<¿_YE~S~S~ºÇ…q'çÐŽv0ü–õ±>Ãl+ÛjŒû†ûì’vIqÇd¦6ØìƒgÆË»dјù–öŽöÀÜl9[Æ£=iž4Oº9>KÅR±t²/f8Øâkñµø,Hž˜>1ÝÒ/zñòÅË`¯³×@hoh¯ú¶ú¶U¿¼´Ä«¡ÚP­eYgUI5¹Òx¥ñJ£ñþNp nÁ=ÙGÒbi±´¸¶Ÿ2×l×l×l-;´)´)´É¼>Ø*þ¹¾z}5æ9â9bÄö²½ ej™VûúªõUàiò4ˆÄÌoêz'à>î#ADè@nmnmn­n<R†”!e|6H©Å©Å©ÅDòUùª|Õßk\øŠÊ‹Êµ¼^3êõ! %5#5@äЇ~ˆ›ä9õœUSÇTHõ¥ú úîÐw¿™õÏ&—OZ¶ºòfåÍÊ›zÄX%UIUÿ(›Òíý/YÍ6·Íms‡Oò„šº=ßîùÖœ§švâÒ‰K`@xMx ,9Ëa9V Q9*ˆž>yú$„W„WÚk "­O[[ñ¦ñ„6ˆ bÃx‰0S˜)ÌüÍñ€ÒßóµYØ,l.:&ø¿àç\ѯ••¡ÜÝ©]Ò.Yq!^˜9/€­Ò¯é×L*õú{ý½~À•ìJv%«ÕÆ$÷Iû¤}5^Z)•R©ì4±PÈû(@ IýRH í:o<­Çœ¢ST¡÷»çwÏ·r—å³ü8€±¥à<ÎPÔ{ê=€•iQ-j.§üoåÁò ¶ÓxFäyDÙŸ¹=s{æv"Ñ+zE¯p6†n ‡9=ö[&uKÝR·paÎî9»çì&²UÚ*m•Ê~ƒ»Þo•»z^ƒ((P<Á<±œêyÚ&“uÅþ’Øo$ôÙ)åE…'¼ãîŸþw ×®)\crWY¦,S–áô”Ÿ;!TBEQm|ñIB_þKywWJ RƒÔ^ÈWÔWÔWÔ³?æMäMäM¨·­î—ú¥þš,:Cgè Å®)”Ð/‰þGIäîþx½ðž°UØ*lh5­¦Õú|q–8Kœ$@ýÆqE\"©Sê”:…¿ÄËvîÿ&ã«˜Š©Xþ>Þýþ‘‰Ld€Ð!tÿüÕ”ý×JÂÎô$Ô}áVÿ ×ê™yóif IEND®B`‚routino-3.2/web/www/routino/icons/marker-2-grey.png 644 233 144 5732 13061246465 15550 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü IDATXÃ…—TTÕÚÇ¿{Ÿ330ãË/ œB&•´F,,VøÛôv/®4\èZN×—¬w¹„,À~˜¥-o°ð.z Ì 3¯LÁš…·4ɤ—dcJ"1L0ÃÌœÙûýƒsà]¶Z=ÿœuÎ>ûù~Î~¾ç9û³Ùl6›‚‰pLh²xK¼%ÞâMæ£æ£æ£|fñ/Å¿ÿ²tå¡*J£ÒèÊEÞzo½·>ëñéÓ3¦gðØŒO2>ÉøDT<âäñ<žÇ#ˆ&Ódš Áˆ–h‰`¥¬”•žvO»§Ü’[rd/ÙKöXÕX Ð9tðù|>Ÿ %¿¢§è+< ŸÈ ÜÀ Eõé|:ŸHÝ“º'uÒCN‡œ9 5»Â®°+ÐÒ¯èWô+303ÜÃ=Üîvßí¾Û X–[–[–ýoö¿Ùÿ& ‹Áb0°Ä¹Ä¹Ä ,‹^½,˜ð@ÊH)äüA!5!5!5p¥®H]‘ºéuoÕ½U÷ ŠTEª"‹þJ¥X)VŠ}b[è½Ð{¡÷°ïÑ”GSM!•ò“ªi+m¥­>ćøp 'òDžë;Öw¬ðº¼.¯ Èôeú2}@rUrUrÐÔÐÔÐÔ|»òÛ•ßÊMø¾…o&óËzŠ¾Â£ða×È®‘]#lß±%Ç–[•c/³—ÙËœóQ>ÊG9ŸèŸ“ã|¸e¸e¸…óÜù¹ósçs~õ½«ï]}ÿ.*Ë*Ë*Ë8?”(ÿPþÔufdFfäœ;¸ƒ;8ŸÔ“õ…b/öb/1Ðô=1ùdÔ£õtÐAà0ãðÔŠè®é®é®&«Éj²sfÏ™=göÔøíêÛÕ·«{ª=Õž ĔƔƔâ÷€¸†k¸6¥O7ÑMt“RIb ‚^Ð zþ/çbçbçbÜ”r¥\)ù’|I¾Ÿ^‰•ø¥SE©¢TQÀܨ¹Qs£€ÀÁÀÁÀA ±¼±¼±¨°TX*,€ágÃφŸ§êŸªª~j>I'é$À¯ø¿¤‡ôpyXû~ìû±ïq“ÆÐÃÿEŠôEú"½÷w¸;Ü.~ô‚ýû v’gtF'\lŒ±1h©Žê¨ÀCxèG?úÁKƒ—/e”ýQ60ž6ž6ž¬©YS³¦x¼óñÎÇ;¡B¨*a„À:¬Ã:€¯à+ø €œ&§Éi¸ìkíkík¡­–ª¥j Ùê4uš:ÍWB‘ dV‹fÑ,šI^KXKXK˜?ƱббpÐÉÏóóüü ¢…(àˆxD<"Ðè0[̳HJJ‹`,ŠP„"«° «Ô¢µ±+±Â#eJ™R&´_ؾ°}acIÄFlĆÿ&~â'þCj:óÜÌs3Ͻ»[ªNU§Öö -Z4´H°×åÖåÖåúwÊ¥bz¦gzx”ÒÝØcÿýÀOÅ?ÿT Œ×Ž×Ž×ÏúxÖdz€ê=Õ{ª÷|PðAp&êLÔ™(*¨ ØìGö#¸|®ix»á톷™«ïxßñ¾ãô’ºL]¦.ûß ¾^_¯¯7ÇGûNõê;øÎûÎûοñ¹n©n©néO‡º?íþ´ûS¡´i}Óú¦õüYÁ 4Jw ÈÈÈžøæ‰ožø2ƒŒ€ôŒôŒô  ¶«íj; œÎ çj¤Fjœò(}‡¾Cßû‡œr~ÈÁšË —.'Pm >P¨_Æ’XKÚ.œN 'Ýá"­¦Õ´ZhC3šÑÜŸ8qÃÖ m«¶UÛz­Ù­Ù­Ù|~äk‘¯E¾FŽ'H8pëf…Î  m–=Ëže A‚@„ÇT‡oCÚ&9¿…þú[(‚ï4Þi¼#ŨrT9ªÄIœÄ¹›M¼¼ÿÉKy)/#åmž?qbß(‘rRNÊÏm§©4•¦æ4ÀLôŸVŸÕgõIÙŽÃŽÃŽÃÐ’ïÈwä;8Ùf¶™mø+üþ À7ñM|À7óÍ|3ÀÃy8Ÿü)Ö jÜÞ¸½q»çðëï¿.ÔÄiâ4qÇKâ÷Åï‹ß÷þY¢…äSô =Rš²Õ¡½è•®cv`i˜÷Ù¼Ïæ}Vú—€mÛ¶/ŽŽŽuãuãuãSÞ% ÉB²b"&bÈArÈQr”x?ïçýà4‚FÐh¾¶}mûÚÆŸ½röÊÙ+g…R]„.BÑ7î­õÖzkw½{½ðzáõB€Û¸Û,ëQ@]òñ›Æ¦±in¿Ý~»ý6àÝáÝáݱë]]¨.TzëD·µÛÚmò.É%¹$fafGÂð>ÂGª¢*ª‚{Ð6h´áxó‚æÍ ¬Ð 趘-f‹w½KÐô@߸lŃò« tn QL#ÿ’(/‹\"¡t»þ$‰$‘¤gÿ2ñËqös_¶/Û—Í^}‘½È^d4Yñ.ëb]¬ Zú}„>”'åIyÐTÄUÄUÄùãžxràIáFÀ‚€ J—p \ȹÄ*Y%«Ê•ý/¥b%%%%%%p*+ ù¤‡dï{Pönýz·ÊQ娂–RJ)ň²-îw‹›¹ú*û*û*…»vì¾Þèé÷ô{úw¿cùå7–2`Œºïçð‘’’’’’I>íàj®æjòòÀܹsñ?þÙþÙþÙ—%M¬&Vû·ÞM»›v7-ì3G§£ÓÑÉÿÑ~¤ýHûÿÓ£¾QߨOØ¡JV%«’s#y¯âUŸ4B 4‚}â[ÏT* /”t?ÁŸÄx·MhB“¿7ðÞÒC-ÔB-çcÇ׎¯_Ëæª*U•ªJÚ)˜“`:óUœ%ÎgYšbë±õØzÈiÎÂY8?$çµÊ€®?â ø“¸Ï»r»ðb;¶c»x•d‘,’u!Ž7ñ&ÞôÆ–À‡|˜v ½B¯ÐÛÿ0ÛÏö³ýÙ·»6tmèÚL"VΧl,ÝÆñ5 ÷øªÙçIEND®B`‚routino-3.2/web/www/routino/icons/limit-6.7.png 644 233 144 2500 13061246471 14575 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜõIDATHÇÍ–]H”YÇŸmk2[üX*Z“0Š¢.¬À±²¬(£Š*mƒ–…"»¨,H¨›õ¦/…Â!R¢/¢ˆ ŠÚ¶Ú s¶q /œQfÅÏyß÷üöbæÌŒ¹{³W›—çœçy~ÿóõ¼G@DD²ã_{½Àž³íµÉ~ÇZÇÚï¯Åìfl[l[Þ×ÃŒ 3.ÌôÌôXÝI[kÿÔx‘dþTžî—lIvdÜȸasÇíÓ°cÁŽŽÜ˜ýË3ȼy{È€ýw÷߸uõÖU~‚^_¯`À=à†¤­Çµ¿Ž×ùRóËé/ø"0åþ”û¶¿ 㛌oD pMáš¹?Çþœ ›6lÚð)íSš²€Ù8q*70È º…Rl=÷×ñ:ŸÎ¯yšÓ#S–S&U;«vf¶Äº[¡nNÝÍ‹ÞÎp'ƒÆ €¹ÛÜͨgê6l´õ¸ö×ñ:ŸÎ¯yšÓ#÷¶q5lËØ–ü }&& ö>ÃGÔxcŒ#(˲Ƭ1&5åUªL»a˜ÕæYó,ʴ׎×U7CơĄ_0¸5º5ª6®NÙJ‘ÎAfofï`:£þ!ÿP‚³ž"³Ál`X…É'?EÁîp8ÈA¦ô3Îø­cL˜€UmU3œÈßô›àÇõÄ…5?‡'œL/R­Ñ¦hSr!>nþ¸îã:h|Ðø ñ¼ÝþvûÛí“W¬g~Ïüžùpþåù—ç_‚ggg´þÑú®õî^^¡‰/ÆxI~LO\Ø›#p=r=ª@íÓ³X4P

zU­ªõMx8ø^~ظbã ý®,Ðïé÷¬^µK¯Ô+%ùLÏ™æ3Íbu·u·w·‹ôŸê?ÕJ$<<\ĽннPäÞ¡{‡îiõ´zZ="ƒû÷î˜3;+2µï%o,‘äŒ9ÙÙRÉÑ®.ý®õþÈá‘ÞQ‘ë½×{“#±Š]ÿNŒý €þÌ¼í£¦GG¬EY‹²Aùòå7 ²¹²¹²FgίGÕcõXP¸¬pYá2(‹ƒ Ç帇KY—Ò/¥Ç«©ž¼(¾á#ÞÞ­; °8°”r:ÿê u† ­:­:­ʋˋˋáä¶“ÛNnKhP¶“ídƒjWíª=®?záè…£ ê`ÕÁªƒ ³ø¹3×™ üj4Q|Ã'Y$©,©ŒwDRî¤Ü±Äº/""Ob#˜9½nzýôz‘ŠÛ·+n‹,ݺtëÒ­";‚;‚;‚"ÞVo«·U¤ô~éýÒû2q‚õÁú`½HãòÆåËE:ÜîwÜ.Ê™""ó ^JgJ§dŠ$$ðŽKÄ9眳DìOìODd4JÈÄnnnŠäÚ¹v®-²É·É·É'’ÓŸÓŸÓ/ò0ãaÆÃ ‘§MO›ž6ÅqÛòÚòÚòDfúgúgúE Š Š ŠDô*½R¯±üÖkˆ$¼¾áóÊŒY“glðÔ`Ë` ä7æ7æ7‚·Ä[â-ÝÇvÛ} ‚eÁ²`,È[· ðâÅ ¾k¾k¾kP×R×R×o¡êQ]ª WMªÉü_ÿuÆDD{á‹}_웘˜…tÙív|Vt¸(\.„ǮǮÇ.Ðwõ]}´_ûµž¬~²úÉj †j`¬p¬p¬ÆsÆsÆs†ö2C ¡qì1{,o?ÊçÕ=z6ô,¾Çt­=bðBÓ}º/axtƒnJ)¥48L˜p‚\Ã.výÿ=öêæÇçö¹;¶™QjØ®n©[Dôeý@?@ó3]tÏ£ßF=¬‡õ0 °±ÌhK©á'Ðàìuö!¢ºU·!éŸÇç1•š´ù_Ûoåk{»xmïc¯ç öoè%ßg9}îIEND®B`‚routino-3.2/web/www/routino/icons/marker-3-red.png 644 233 144 4060 13061246465 15346 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜåIDATXíWmlS×~ï‡IR²E´ `!6¾Á`£I !í’ ‚j %H‰t]¨C+ÑÂ!QYGÕÒ´Ñ@šÒ`“"R@ÝÄ”! HS P•I©Šâ‚¡—Ø™ÁÎ=÷<ûŸ{¯­š¶÷ýÞ÷¼Ïóœsž{ŽM4?¦¤—¦yÒ6ùÎtœé8Óa¬ä朗@*»CÊ"e‘²hG«xËÓÓÓÙ ÿZÿZÿZÓú|ÙXïX¯uçŽçϱzð|Ëù«@mP€9¾9>xùòË—DåJí–vË‹"Š(€¼y;òvèÆ ä(9J·(³,³,³ŒH=«žUÏößYê,u²mIw±nÖ3דm¿ Ä9hxwü-¶LÅ 7À—骮šÓ öŽtGº#]«7Vr·²[Ùí*5¤UPU¨vSk1S±º›Üä&7‘RBJèõ“ÆÕÚiï´wjYþ7ý¯ù_³z—]d€Íaspö.{@”½À^àÑ_Õ_ø:ÞÀÌ鬿¸~pý ÛfÜ@£ê¨:êÙ“ÛÛÛ@$—Ê¥r©Ô›PW+dNL|®S¼ŠWñJ§f6ÍlšÙDd«³ÕÙê<{ ï——[½«»tbðÀ€û¸‰›–­žÅf±YæúX|`ñÅ|™q—gÙ²lYÁG‰_KéÉ;-NÙz’RÒóɹ=}Ü»þÞÇz7KËÒ²LAúmý¶~Ûôâ†0x2†2†2†xµáÉL9SÎ|å)V|?E_=ùr Å»Õ?àÝ~O¿é]­_ë×úÍcçaîÃ܇¹À¼‘y#óFØÏ /UŽ*Gÿ´DX-a½T?¢§„9@<λö{‡–åïñ÷ø{ÄC #B©ë”ë”ë”yì¨j§Ú9”øK’ñÏÞÄszæiSC4¼’ðî‰Çy·¤ª¤ª¤Êô®g‰g‰g þ2^çÆNH5RT³|G2|?…W¢ÿ2žæÝ¥J«Òª´Á5Í5Í5Íüùñüx~\»jluH )!×4ê¦nê¦Ä±£øSøÒèŒTïîIÎK†¥ÒFi#@åTNåúyª»ùì&IŽzG½¤a˸̗õ/ûþÁ™×2¯)ƒdÖ„¬ 9cÁŒŸýLxøé[ì[L’#æ³0‘$©ýE2‡9ÂK2Ê(å÷"Í–ññ|Y/ñ$¾ä“üI= 'ÍŸ4 —­Z¶Êz*YpÿrçÔS%ŸÚJò 2‡LDQ’ÔüšŸïIA’¤B…4l—ù²^âI|É'ù“zðáÞÿš\aYa!ùŠ$Õ¤nÓm¤îQϩ稊zÑ()¤dý¾~W¿K&ž$ž$žz\¯¿OuÂ/‰C‰[ñâx1U]W_ª/S ¾ÁwËÕå*I!ù‘.苟¨[ŸZŸF3È~½_Oá~£ET—êâ[ñ«¸-n§ŽŠQ1Jr?÷s¿ág;ØAŠybž˜G²,H‹_ÖW髸–›’øä@Þ@ɸuØ:ÍzÆ…ì&7Öo¬OõáKÑ¥^U¯:‚‚õÁz229292Ùà Õ„jB5ä±Þc½Çzɾp_¸/lÄæ<Ìy˜C¿|üÒñKdheh[h›ÑqÑ“äã»;6î[{²Û”ì[Ùüîq{Ü~å+Åcv™]ˆ7Ҝۜ Å;Ç[á­h´pkøÖð­a ²¨²¨²è­í­í­|ŸÅg:;;Íu›ë6×þÀP`ØrrËö-Û¡ÈnÉnÉnFFF§Ëérº€¶š¶š¶à‘í‘í‘ °Ù‡ìC€ÛâÎwç“î¾+|‡¬¤å”Ò1_Ÿ¯R 0ûÌ>ÎBå„7ÞHÅx)*¸Žë€•¦•æ•f`Võ¬êYÕÀë¡×C¯‡€±‚±‚±ÀÎÌ<3óÌL`´}´}´È[›·6o-¿'OþÀ³Õ³Õ³8ç|ßù> çlÏÍž›i|¶Œ®Œ.@ê1z»Þ®ÜƒH,I,I%NB&†1œ²¡‡õ°,>‹Ïâ.N¹8åâ ÜYî,wÝÝÝ@æÌ™€°;ì»B[¡­ÐÔ:kµNÀqÝÑíèF~©©3øXßß H=& êzo÷ÀÔÕÙÕ)ó¸3E¦ÈD\zr]¹®\Äñp$x$x$t9º]À^l/¶Å Å Å @s¬9Öì!{Ȳ«²«²«€Ò¥¡ÒàÏZ=²zDâs½yìFË ¥çÿN%¯%Æ©|å~UöªŒŒbXÀ8u±¦XS¬‰|Îç|NR(BŠ×îi÷´{ä ï‹òå¤îÔ+õJ R;ª%90ΗâOê1æ­Ï¬Ï¢d¿Ö¯sŒÔ×èkø6íÚI*+抹¤h­¢5Í_"JD )‹Ãâ0)æŠRQšÿ4±;±›oéIͱ¢"’ï­ƒÖÁͱÿ˜üªœüZD‹th»´]TYÏF¦M~~K?ýÉ‹HIþÆf6§­àC QˆëZ‘VD•Ú&mSÚä×Vd¬Èú`ò´wåGûºøhßcç öo‹“`þ»ëTIEND®B`‚routino-3.2/web/www/routino/icons/limit-10.0.png 644 233 144 2767 13061246471 14660 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܬIDATHÇÍVÏOSY=ýE©"Šq#Câ ÔT D´V64þÀhdD¸0£#˜(Ñ8:d2ã‚3. Æ…ÆÄŒ£M$qa0D¬†b´jM+˜B!F°0òl§ø~Ü3‹öµÕÌàݼœï;ß9_Þ}÷{$`aê ÒXl,6Ú“ØøS&ž[›[ûý_I|Q% õ†ú—§È‚΂N’,¼RxE{Áz^çg×ýl?=Ž…È¬^«×àIá³dÓš¦5¹K’ø÷AÒÖcë‰)äÁÞƒ½$yëê­«¹GÚ#‘œIù§·RÇÒ´%3ùfó›Í¤:B’Ü.þVf•YÆÓ\ÅU$ÝtÓÕÈVnåV’µ¬emV|=×s=I7kXC’b›ØÆ8·$õùCèQèIÚ$›$™ù2ÙOêM]|H¶žl=IŠ~’Ô*tÝÁ?¯ ^£}0zô~Æ/Øì v’]–.K—… Ka)œùÖ¨×Îkç38ô"ô"ô‚ì2wÆ:cáO£ÞQoš]!þiq·¸õ­½ø¼ Oæ¥ë箟K¿ùýÞ¢ëw¯ßå¼ùWóQóQÒñF¼R;¤Ò‘«?®þ¸ú#Y>P>P>@–Í—Í—Í“3§fNÍœÊ44ížvO»ÉŠžŠžŠ²| ¼¯¼,“J»J»8?Û‘ô#½÷¼÷Hñ[²#Œöv{{¥ -5šÀ0\Æ”©ÀTë"Ç¢ÊE•@~Q~Q~з´oißRÀ:d²~ßã÷ùùù@ï™Þ3½g^·Ý·Ý·Ý€ÕgõY}€ßãßáßä‡ L&XïŒÞ8rãˆá2P÷¶î- | ÄQé2b›©ÛÔM'`é°t¢m46U7UΈsÂ9$| _ˆWâ•xä ç ç g°íA{H,N,N,ÎÄÕ!uHú~Änµ[§ãuñ:Dë:ë:M M é4Bh½Z¯!(õJ=€@‘.Àœæ4 «²*«@‰¿Ä_âÞ—¾/}_ Lº&]“.`“’ü±µcc€ãÞªÆU(b»c»Ãwâ¹xna”6I›ž=ô?è°x Õ×gû}À>$.%.%.•#•#•#ÀÚµ…k G•£ÊQ49›œMN ª½ª½ªØàÜàÜàª}Õ¾jàŠ»â®8à¨r8N`÷â]3»fð¹FÙ8·qŽ€;‘;ÀØ__þìIö©<ÝzšäýT&OÕœ{®a®bÞœÐZÖ©» ]Ð.Ñ@4 bŸØ'ö‘Â%\ÂEF»£ÝÑnRx„GxHQ/vŠdôut2:I¡½—WÊ+Iª)?µõxëq’ ýT2=ÇÞÙÞIf2¤†Ô´ÿvÊZ³Öœ5ÇŽó0“š¤IZÖxûÅ~±ŸdÛØ–5ÇÚt¾° ;IŠbãâÇ”þñÐXhŒ$mQ[T23üÅËšüJƒ©Á”™ü\¢„”ÉÓjX g&?{x“7IñT ‹a’ýìg?ÉXò_)ÆÅ¨%Kñïi¹Z.eñT‰)1}gäGdƒ¹ÁLòóדÿÛýW~³·‹oö>ömÞ`ÿýÚ›ëœü€KIEND®B`‚routino-3.2/web/www/routino/icons/limit-27.6.png 644 233 144 3041 13061246473 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÖIDATHÇÍ–íO”WÆïfä­v¡®¨ay –>¬¬â*³Z…¦òbj (ÅjªÍ*lÊÓÄMÚ¤)H‰&¨ tmÚElcBˆ…ÅØhªÔ1qa·ƒÇeÂìŽÌÌ3Ïù퇙§3ÚÀóåÉuÎ}_×}ÎyÎuŽ€ˆˆ¼ù ˜×˜×˜SÂØ| ÚoyÃòFΗa|&¦*SÕä Hý<õs€å=Ë{tGãF|l¾H”?VÏè——$Ú‘ðuÂ×&[Ÿ„· ß.´¤‡ñg£`½h½ø? š.5]è?ßž÷ááõ‡×æmó6ˆbc܈7ò ¾X~9ùœ¾,½¼ô²iââE óõÌ׳†îgÃ[oUü÷sœ2@è1D’²^¼ÍƒñH¼‘oðü†ž¡®G ­,­L*ß©|ÇÚNpôBËê–Õ†^ð"ð1“šWó„jCµøAªQL˜ Šq#ÞÈ7ø ~CÏÐ×ÝJŸˆH›jœ5NÐoǵÛÁ—ƒ/ƒú½V¡UT³¬f5JÓ4ŸæƒP]¨6T !sÈ2ƒú»úF}ÃóM©F­Uk%¨Ý ¦S@÷†ù¡æQÍ#Àcè[9,"òj'X½V¯w‰ 8ÇãÀIÊAmU[ññW>áPPI>|1x‘Ecp.¹ä‚z¢æÕ<€Ú­vãc Âÿ~D/¢3\ðPDäÌ©6lzÑ„[Í·š¡=µ=¹=åÜï|×ù.¸r\9®èlílíl…žºžºž:è½×{¯÷<x0ð`àW+ÆÔΩ7§Þ„¶Ëmßµ}‡ºµ{b|b<ª§¦,þ®GB7EDn6÷|ûL™Ú4µI5&ý×ÚeíÂok²ÕÚjaÝ©u§Ö‚޿޿Žf°¯²¯²¯‚²Á²Á²Ané–nŠŠŠäÎsç¹ó ôjéÕÒ«°ãŸ;~Úñl~´ñÓŸâŸÙã]ë]«¡?«? tw¸³$'žM<[\"bo°7ˆüûOŽ™ºÿ|æø÷Ç¿—„‘³#}#}"L2ɤHâbâbâ¢È××—Hueueu¥ÈþùýóûçE¶¶¶ä—6¼bxÅð ‘ûÇî»L$­(mcÚF‘?&o-ÞZ, i¿µì²ì2u‹”)="bÞ’<—·>·>7f%JÜ%î(°Ø làqŒ8F~½…½›{7÷n†|=_Ï×áÜ̹™s3°êzÆ¥ŒK0üãØ–±-¸!ÈÝ’òJÊ+ú]³êÔ^Ó^3Ý5_¿^äÇÃŽfG³¤Ùÿb¯¶W‹ÔUԕו‹ttututEW¢Ïßçïó‹¤Ç¥Ç¥Ç‰äÛòmù6†?ß!â)òyŠD¬UÖ*k•HrArArÈÌ™2EÒÿ‘þEú"®fWª+UÒD8ÊQ~ººcº+ÚoŒlpÓà&8újâ« Õ¸´ß¼Ó¼ÿ†óNo8 ËËËp-x-x-û|û|û|Ð^Þ^Þ]iænÌݘ»ÅÃÅÃÅÃàÉòdy² ~{ýöúí`µX”EACí^}¯Ž_» áÂÂ… 0\ðYäTrèø¡ãð4=|Jæv̖Ζ‚kÔ5åšBÍšm˜mÿÈ? {ö,ì§£OGŸŽF Ó•®tOZž´áÍ„7—ëÂ`ØaØÑ÷7H©M©Hý&õ›H¿ku­Ž?—OËËBÑæ&s“¡0×@ù+å¯$,ŽÆ§¯B¢3Ñ9‚Z>høáÛ¾å üÑùG'ÀXáX!è±V×úµy o.¾Ô<Ã/ó.Ï»l¸æxs¼¼°å…-9E~ÏÒí¥Û†ŒCFá ‰$U Gsb­ë׿5< _ãÓø£zÒíévxëÝ·ÞM¼èÿ7^zx©Æt'9I„¡@xwx73 ®ª«0€ku­_›×ð4|OãêÑW9-"ræO°ÓµÓ‘GÁŽ;˜Ì‚HWÐôŒ)U‘©ÈxdBþÐHhT•ªRUèLJïÓH©‚PY¨Œ`è~0)˜êÃ(>ì ì £¿¶Ê»""/~ ‰Ä@ÀÄ1W‡«¸À6P¯ªW™æ'~ægP©*U¥4Ò8GH%•T›ØÄ¦9ùu¬c°;vU¬Š™fK ÿÏ1>¿/ªG©»FòþÊý•ZÄÖ¿¥·µ·ÎüóÌé3§Q··Æoë|=i=i=ip6÷lîÙ\p¸Üz=r$r$rD]½®^W/œ3ÕNÕN¡îM6 6é|j|ÿ†ý´ÕÖ]“ˆSDä—OÁyÌy ÓG‡F‡ÔÞEŸ§XS¬Ì8–:9U¬b¸Pw¡îB¬©YS³¦Ö®\?¶\[®-|“¾Iߤ.hÄ:b±‚ÍisÚœ°ú§Õ—W_†Ü€õœõ3c'Ô^hjojUÕgøe±eq^¾ˆý+ûW"á¥ßyüŽáâq9±âÄ 1—ý½¬¶¬V$§9§9§YäŠéŠéŠIdIÉ’’%%"7–ßX~c¹H|j|j|ªHËDËDË„<=­k[×¶®1_7_7_é)ìÙÞ³]Är/ŘbsÛ`CUC•á¢H©»Ô-¢®ÏWóU^~œá_F¯ÑËËòe¤2R)’{;»3»SüŸVÔUÔ‰4|Þp¢á„ˆ{Ø=ìq”;Êå"“'7Nn)ºSt§èŽH·£ÛÑ퉯‰¯‰¯Ñ……=aOØ#’t3éfÒM=Ÿ|?ÙœlùßÈtét©øE̯™_‘kÆ…Æ…¼lŠìYBÃoÆvK¥@V~÷vó{ÍïIú?,_t}Ñ%òkÿíÛ"+ V¬éÊèÊèÊÉ;Ÿw>ï¼H–#Ë‘åékëkëkYf^f^f™ÍžÍžÍÉLËLËL‰®XĻޛïÍñü×ó™ç3‘Û_*{©LÒE¦R¦RD Yª[u~uQûÆ5>‚ÇW£;/¬ãõ7^gÆò¶¥ØR ½½½àËôeú2aÛæm›·m†Œ­[3¶ÂÑ–£-G[`Â5ášpí®í®í.Œ?8þöY÷Y÷YaÁÁ{ìóŸÔRÏLÌMöÂ÷|p(ªG´[@×ôéú- å?{2¾¾}?¢ÂÅáâp±þQÏ\š¹4s † ?~QD(ƒ2(øëýõþzPveWvP;T‰*¿ßë÷¢"ƒ+‚+€p”ðCOb·’kÏøØ¼¨¯¨¿>õ±RUÊ´ú‹ªVÕ v©]j¨Sê”:¥ U«Ô*µ 8ÎqŽÏñ±9ÈAˆT²JPóÕ|¦Õžþ!—ÇåHô'ú&îi>¦9ÿŒæ¼“ÜŒ:³j†F¯ÃCá!Ýù9F5Õ :U‡êzè¡xÌ î«A5LÅúÛ# ‘‚ê—ÐTh hÓœ?Æ7û¬ó?¿ÿ•Ïíëâ¹}=Ÿ/ØÿÓ»ØcY¼ÞIEND®B`‚routino-3.2/web/www/routino/icons/limit-24.png 644 233 144 2350 13061246467 14520 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]hWÇgc7Ù…$&ÕÊ\ÅÍC¢HQÄØ+J„‚?ƒhÅQÁZDM5`êÅEÌ­ dÉE‹>H¢Õ%EhW"Æòàn$ÍúÑ4“™{ﯓٙúÕ>æ¾ÌœsÏùÿÿsî½g®š¦iZÁÔSƒ,–?+ß´³¾¶ýžÕžÕÅ?™ö9®õ®õê`æÙ™g Ã…aÙkÛÖ¼ïÌ×4ßÉgùµÍväDr"®Ê)»6–m,ó|aÚßßo‡·cÌ€ÝWw_ˆ¶D[Ø C±¡À«ÊW•`ÛÖ¼oå[xN|­á~M÷ ÷ × ädçdk,Xµ`U`ŸÐ€ÐÚÐZ€ç3žÏPY þrÉU•À(£XcÄa[óSñV¾…gá[|¿©GƒÙ+g¯Ô4X·iÝ&o³™Ðû#šwhžÅ§wÇ9N.£Æ(€Ø*¶2ꮺ € ض5oÅ[ùž…oñYü¦íßk{2<<€ÐNÑ ëe=ºPÙ*e }FÈ·r\ŽóÞP%*  ¿”[äÈVÙŠÎß⦸™ùàû¾ ¿æTúx‡¼C£ŸAŸè@€*'åIÒj‚bŠŽrÔ¡àÇ8”PB PC 5 ºU·êvÄY/r»Ü>…U¾ ¿©gJع_`OýžúLr9 #¸ðã7ëÐãîq÷¸á̉3'Μ€žþžþžþ÷+öt×Ó]OwÁ¢;EwŠ•!›l“FÊH9ø2ü¦ž)a¿}­oZßdÒwÊsz…^Á„åy ˆr's's'!èúƒ~˜ß>¿}~;ÄgÅgÅgÙåò@9ÛƒíÁvÛ/?—éEƒh°ðÕN›ßÔ£A~W~—ŠÀÐ’¡%€£×èµí¨'ê‰z ®©®©®Éö/^4¼h.¿¸üâò hŒ4F#àëôuú:¡¦¢¦¢¦ÂŽÕ"$B*¦bÎ[ü¦ ó óä0’I8޽®’* ªVÕªZ;=¶<¶<¶{{{à€ï€ï€Â/Ã/Ã/ÁwÚwÚw¶=ÞöxÛc(>U|ªø îÜ1¸Ã±¤ßÉýr¿ƒ/ÃoêùxÅ~u¢Î¶ãÍñæx3x£Þ¨7 ·o7Þ6³™Í®W‡«¡ª´ª´ªÊæ–Í-› î…î…î…p]^—×¥µÈyŸ¬Ø‡÷˜X;‘šHÙ{ìüœósÎÏ1ÛŸû,k[Ö¶¬ ò‹ò‹ò‹ ãJÇ•Ž+6ÍÅàÅàÅ „ZB-¡ÇR~+öŠ½â’¸ôÉ=ö‘SÙe\3®Ù•ÿj|éøR^3¼fx $n%n%nAòaòaò!¤/¤/¤/9ÈAH¤ÒðúÙëg¯Ÿ¿ÓM7 LfŽªwúÀ„]GÇÐÑÑ)RÀcŒŠ·¼ôŒˆZYû¿ûØ:¿fgOÄ`Ÿˆ‹8ºŠ¨GêJýªî©{ "ªMµM4á8­Ôs˜Ã@+XyDAÇ]¢+ó5ŸêüÓö_9moÓö>6=o°ÿP£¯há'¹IEND®B`‚routino-3.2/web/www/routino/icons/limit-31.7.png 644 233 144 2663 13061246473 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜhIDATHÇÍ–oLSWÆß‚RI””S1™Ä%†‘LYdƒ4º!5ËÄm²1—,dÜ–˜Q™aÉø V†1R]Ä%. c«aNHæ¤fEWcPTþ©u®¥½÷üö¡½Ün˜}ö|¹yÞ÷=ïóÜsîyî‘ѧ@\f\f\rǽoÆç­›·ni[7k`yÃòÆÕZHq¤8::õk&6òF}ì|³,Ÿ—b¬§­§-…Q¼¶¾°õ…yiü•;;þ CÕ¹ªs®®|£?þ 0U8U&6òF½1ßèÛ_öý‡_枟{Þr¬ ÖÈ*É*YR)¸¾6mØ´`$~$^Å€6Ìg¾*üø1Æx 6òÑzc¾ÑÏèoðü=¶Wm¯ŠÀëo¾þfbKdµoᓌO2 ¾Pp€̇°?ìжiÛ‚r+7,`b#oÔó~FƒÏàè1·ò‰ˆHC1lñnñ‚>ê ß e…²@ÿ-t't‡PT©2$ë¯èz¨ýj¿ÚϬ¡~RADiqÓéÓé„´í!gÈ áÉHÕSV[Vkl(6·Ò'"ò|#$úýþ9ìõöyû€(õ²z™'4âÀ,f1‹A·êVÝ ªMµ©¶%þmíS†Z¢–ð$ J!ÊgðÑ#Üi¾Hòï~ðîÌ:¬¼Vòûw¿ ÇZZPƒ7½ƒÞÙ4îzw½»|©¾T_êì¼/Ï—ç˃Cý‡Ü‡Üà|ÇYã¬A};||àøüùüä‘É#úJ¨~»úmÐk#zDïÜ{;ö ÛäÈ䈪L­KÉNÉ&h±{í^XäXäXä€þªþªþ*è<Ùy²ó$ÄçÅçÅçAûúöõíëŸ"|µ{µ{5ä¯É_“¿ŠÆ‹nÝùZD„`÷[——_^®*á{ç÷NÿÑ#Êž”–”¦NÃTÚTü±Ò—ïˇÃuŽRG)¸»žs=¹=¹=¹=Лћћ]½]½]½ÞÞÞ­M­M­M¦ Pg¨3Ô Ú€6  ˜ñ¦®¦ Mà½ý•ë+c^DUß>qûПüeò—ê´0¾`zÁ´îáàø§ãŸšÇþñßþ[þ[PÖ]Ö]Ö ™;2wdî€KöKöKv³aу¢Eàèî6ãáêpu¸ÚÄccc°bhÅЊ!¸Öë9å9eò©ÍcycyÀôBëB«î‰Ó·…“ÂI|œt9é²H[Ù™Š3b+ø° ¸ XĵֵֵVÄvÅvÅvEäªëªëªKf†^£×è5"–³–³–³füzÂõ„ë &nËnËnËIs¦K;&²¼0gkÎVU,""6K³6ªŠH¼Þ©wZ<¢Žߨ©‰Sð¨@U,È-È%˜¼9¹$¹*†*†*†àqÆãŒÇæJlôlôlô@k]k]kÏQ9*G-´ÐåååÐøMcscóLYPëŠðh¿×~ϰÁ]Qk¾È¯;m;mæ© ¿˜ LÁý_îwÝïBi‡µÃÚáÙ÷£e–=ZÁ=Á=Á=€˜ÈšÈšÈj©¥æ?|ñá‹È ¬ ¬B¾]ßüáCßY³³ÆÖ|Q¸ø›ñµ{ÆÇìÊÎõšÚ¬6KYÊÒeþÏ·ŒAµÚ°6ü/Ó¼@âhâh¬Î4œ·|Nùà €PŸêO†'cÚ]íîlçÇF*©@=õÔGs ÔM5¬†-³iŸiŸâs­P+œ9»}„ËãË㕊uþg÷_ùÌÞ.žÙûسyƒýIÕùNIEND®B`‚routino-3.2/web/www/routino/icons/marker-75-red.png 644 233 144 4100 13061246466 15433 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜõIDATXíWmLTW>÷ctt„4efõcèà'Zt“¥Ój›Q*Ø@Üý±v´MmØMý ø±•¤44F1‹gÐXêRÜjØ­Ô4†5 v·áY˜‰`cA„u˜aî½çÙ3çÞ;«Ùì¾fÞóž÷}žû¾Ï¹g†¨Í!qÆçM÷L÷L÷pOc ÆimÓÚ¦µ犲(‹rÏY’CrH Óz"‘ˆÌâ}ZÏö³|VÕÇãóâùèùU“jRÍ»ããi¿ÛÄ6±Íýˆ«áj¸•ˆ)ÕŸêOõãÚÖþ­ý[ûmCÛ†¶ Ž|G¾#_óYœígù¬«ÏðžÏ‡ðâýŸñùÇüc_ëPFeFeF¥üÞ™[gn¹EgÆc1â žà |𪋳ý,ŸÕcõãñ|ö|~Ä<‹æ‡ùaß_Xü®ü®ü.ií`d02Á bF³i6͆$×ʵr- ¯WÈ+¹D.‘Kt~,Îö³|VÕW Çá›g©Ô87çæÜ„ˆÇÄcâ± ½,¡°¾ðPá!©D%vPY£¬A@ºr…\õIVÉ `*J &¥I ý™þ 4DC¦¤qi >)OÊÔüX=VŸá1|Ƈñ#†{†{†{¿YÅ6˜˜?1Bzz{¼=˜ˆÕ È'”eš iýy¦5£ù—÷'Ô 0<†Ïø¨üÄ*±J¬ê>ÆŸW4Ê2Ý+”Ü““peÓ•MÂ3/f€»Ô] ­ÆV#¸öºöÀO³~š#=#=Ðrµå*¸¸»l.\I»’HîIqRT ?¯h”%ºGíl?BGS³R³R³Pÿ¨xÌ:fU%X&l6SŸ©ˆž{à"\fØfØôëïv¾ ž/=_êדÖ'­×ù9€eâèÄQ ïQñXÎXÀø0~Œèñ-'·œÜrR{2yPIQRŒb1ÀÓoŸ~ þµþµú —5—5À†¬ Yúu{‹½6œßp‚õÁzxxçá wé]£ÔA€<¨,RiøŒã#Н=ŽG&!Ù&Ûd›XyUyUïSóM ¼TýR5ô¿Ùÿ¦>þFÑEúŽ, ÌÎ@ë­?xü}ä|伆ïXéXéX©¾·¿b-ÏmÈmÈmÀ@ˆ ‘pmhÅoé »è.=ëmëmØß¸¿1îe ŠóŠóÀÞiÃW‡À^d/Ž=@O^@£r£¬H~J~J~ ?—ð%|Id„]uÍÕÍÕÍÕ: $MÍœš©£þúÚ×× ¹6¹¼›½›õ<#«"«`¨c¨Bo‡ÞÖ…%¿¸×¸×ùRËû-ïkx;u£ûF·Úɽœ•³rÖÈV «…Õ‡êØ)³Ì·Ì·Ì—x·{·{·«tûúVÕ[UhþéüÓx†=êzÔFj¤pbljºp°©»©Àëü"~üpã‡cá¬CË^^ö²¢^Bš&¤}1AŒEÆ"c!âMñ¦xÓ5¬¾ð¶2[™¼_U¨óiõÓj„á1¦Óß=~7®“í‘v½_ûií§:„=ÂQ_ùÂ9àÐF]y§byÅr%¨Ü-ìvÿ«4ê'³SÏ,£Ñ`5X Vß9–à¬=øýÁïµ~J)g;Îv€>»Ïhw m¡-€åX®—Jï`ï œ;}î4 Wôföfjý½øøâñ‹Çñºz…Öñu|]¨˜›ËÍåæ.;“@Pø‡z¥îävr;mMœ‹sq.¦åwžNÏQÏQxTíî—;äŽh³¡«à]è@ézº^ãK7Ñwè;š”†]C÷‡î–$óeóe©JíäLJ‡ÎB•Z )!%¢YãZ@ Hø1q7q"Œ ^ÁûÞŸÕ«µÉÌ›yÉäý``éÀR½vi.ÍÕu 3ˆa ð(¯(¯´4r;r[{œ²¿—}Tö‘¼_½žˆãâ¸çpú¾ô}éûá ùB¾»cWÁhÎŒ}– €0Àµ/<°ðÀ„* •†JÏaU»……zí*Nʼn0<ðÀ`ã×xËKä%òM‹ kÖ4¬¡›Ô»Üd0Láد¥¤øIs×FO¸÷»xߜծ÷’¦]g­³V§]“d’L!åò@y i±}è<É}É}É}t«ªI#oä;þ ÅÆ~ÓÉó„†ín}†v;=šv¥N©SêÔŽÒdúdúd:éÏôgúåŪ[…V¡õô:&µ˜ô Î&/0m+ iwTÕi÷”ù”ù”dòº¼.¯ @a„ágLíÎvg»öÚ›Ä&±©/ö—$ùvnlÌxÁDc ;bÚ½úKÚÝhßhßh×´ëYçYçY‡?EãTWΕså¶Cñ0üx.GþK{‘vó„:¡N¨ó­`„Ë”)?Bÿ˜=•=•=%ýSõ¨0*Œ:3Èr\ ±×ŽàMÀ›NþGKÔîáx㿹]Ü.n@6“Íd³²”ŸÇÏãçáGþú%h Z‚„ÝB·ÐÍ݈%–&Lîÿf&õ[)"Ebo|øƒ žò”§w»Î]¿ÿ«èú"OÂdê¾pÔÿsiàQéÀêIEND®B`‚routino-3.2/web/www/routino/icons/limit-39.4.png 644 233 144 3041 13061246474 14664 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÖIDATHÇÍ–ïOTWÇŸA$:àè(/øQ“‚h£”NHk$‚RÖ±%X#mZ)Y·û¢%qq_€k »â¦‹iØDÄ&¶i))4mLÌ¢CB` ¬¬µÔÊ8£8³@§3÷žÏ¾˜¹\¶ûø¼¹y~}¿Oî9ç{Ž€ˆˆ¬Ž~bRcRc"~Ì›f|EñŠâÌO#~›– KÅ?BâÉÄ“ö{‡~Ëô¼Q¿´_ÄÄ_ÊgÄeµ˜¸/â¾°DýFxå¹Wž[±.â¿ ñÝñÝsax«ç­€/?þòc~ ?]ýé*Àã‚Ç`úFÞ¨7ú ¼¥øÒø+~Xþõò¯-w!ÎggŠž)Êø]¤à_P¾»|7Àô²ée*´‡À*V© @üK|#­7ú <ßà3ø#ó8¶;¶‹ÀË•/WÆŸŽ4Ü: 良—bð…º÷yŸU„Ú>mAP—Õe,XÀô¼Qoôx¾ÁgðGæ1—r^D¤¥öLì™Ý O…ÒBi …¾}O(:©ÒçôY}¾ðÃðCP‡Ô!uÓæyÂÀ©ýuýuB*[«ÕjAψàƒ[Üx ~c)ÿ-"’ý7ˆÄ±4L L ý”‚ÊSyÌó.q ”]Ù•褓Î%ƒTSM5°“ìäÿ-›l²AjsÚóÑh)s&.À"?‘y„""mWH8X}°Ú@Ñ·Ü*ûjì+hùkËñ–ã¨áÀðìð¬É3ºvtíèZhÍjÍjÍ‚©É©É©I3¯|ʧ| \Ê¥\f|²fòèäQÔ¥”‹‰M>:xøàaˆ¬\ÛÑ»EDFÞ…î†î¸ãx4ýhZ½±æO‰ÎD'AwŠ{{ 8Å)Nö¶ö¶ö6ØÜ¸¹qs#¸î¸î¸îÀ–¬-Y[²Àëô:½Î%v¨ÕªPªBp¾é¬rVAág%%£UoèyŸ8?qã‘yb,ŸÙÖÙÖånÙþÑöD´ÿ«þW-§Ê±g=+q{ÿ²÷äÞ“"]]]"ý±ý±ý±"ëËÖ—­/ÌÌ̱ڭv«]¤7¡7¡7ALK—tI©«ª«ª« ®Úƒv‘µ­ŽoßH\¤ÈršÛÞÙöŽˆä$ô'ôçn¼«Yý‹>·Þ:oyìÿ³¸¸*6Tl€ÌÖÌÖÌV8ï?ï?ï×J×J×J(º]t»è6X[¬-Ö888cÊíMíMíM4“4“4ûk÷×̇3ÃÝü?ÿñs¼ð¤ìI¨šÄºÄ:}ùç­k“×&EòsòsòsD†’‡’‡’ErOåžÊ=%’æNs§¹EnôÝè»Ñ'’ŸŸ/²Ð³Ð³Ð#"ÅR,Å"yƒyƒyƒ"×û®÷^ïùaù½‘{#"7ÿ<><>,Žtq͸fDèÖšµf˸¨vcuú:}à¿Yó‚·=¿íy‚¶=¶[ ;0v` <©žTO*”î(ÝQº’K’K’K ¾§¾§¾ü…þB!änÌݘ»<}ž>OŸù;Ú;Z;Z¡üÔîw¿hî1íôÙgOº6ònTÇÚ®0Tã¨q˜§$¼õçÇ??Ï ç[Ï·(m—¶KÛeÏÏÏÁƒûî?¸oÊ„ÒCz|7}7}7A«Ô*µJP{ÔKê%XH_xaáÔì”÷š÷0áC«©¯©f¢§’+¿Ò±åSXÔ±rUμú½:¢Ž€ªRUª T³jVÍKNß&µImšh¢é„vžyÀ‡0§’Tó¨(~(ª›¿2tÌPþ ¡¼îXw,p,¢ÌêBøQøðwmZ›6•ŸŽpÔU5 €QFüÅW÷Õ]uøaQùßÖß&Dƒöö°rQù­n+˜ü‹—øS{W>µ¯‹§ö=öt¾`ÿ Óð ø›°§IEND®B`‚routino-3.2/web/www/routino/icons/marker-97-grey.png 644 233 144 6217 13061246467 15647 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü DIDATXÃ…—LT×¶Ç¿{Ÿ3?¡Ã0Ä–ªÌe@ˆUT¼Â«-ƒÜúsŸ½ÑR‰VZªx_Œö©(s!ö•¶¶¸5Åͽ-PTPŠ T°jiÕ‰T˜ˆÀ€` bFœ™sö~0#¦IÓõÏÎ>³ÎZŸ¬õ½×!¹¹¹¹¹¹ÐcÒì“ ]&Þï‰÷x]î×¹_ç~̓óæ=Ì{ø—(ÈyàGïH3¥™ÒÌEo»ª]Õ®j^€ã8Žã$ ˆ@€v´£ÀÛxoóUŠ*E•B²ÄâñÁ­ãd„Œ‘}Ç,3,3,3îä§å§å§‘)T •BɪIö£—KOŸÆ"±´Œå±<–Ç~t»ÇÝãA‹ójòjòjÊzÝî÷@ýœÑÎhgô¢ÿõ+ô+ô+ÄùE‰‹%’¬EŒ"F,6,6,6¾½ïwŸ¿ï}_¼§ñ½ù|ù}<>>Ñ[Á—¹Žë¸Ž¥’­d+ÙZ(„ ¡Bè÷'ÆKÇKÇKç¦ÕO«ŸV/ïNlOlOl§žyÖyÖyV’¤ÊRe©²àÄ~ìÇ~há„N›±›<çñ<œ®Wˆ+IÖFk£µ‘{.E\ЏÁv½6ôÚÐko|¦ Õ†jCãÔòVy«¼uy!Oçé<ý^*}™ä<Éy’ó@#ÑòœX-V‹Õ'Ýî ÷ÄœÕÆW¯_•b×ïX¿cý±LïÐ;ô1Ó17q7AD:ÐÀþð0†1ŒG8ÂÒI:I'$<Â#<‚h×Ùuvº+?¯ü¼òs)µû‡îºo(5JRÓsAJ‘R¤”W6༂WúSM“¦IÓ(‚ÁŠàÿ»ê¼à¼à¼0gµq½q½q½””ž–ž–ž&ÞÐéƒôA˜.''°5l [©HE*@:HéÈur\`‚ &mhCÀ,ÌÂ,¥kÒ5é°=`{ÀvL÷Å7®1®1®‘’|ù}<>>’W—W—W·j±»ÉÝänºÐ¤sè:ËèÏèÏè'Mú}‰¾”™˜‰™ £Í´™6?S9ŸÍÆlÌPzÔOUÀd§,шð3~ÆÏpØcí±öX°£+®<º’Ç8”¥CIlÊeŒ2fu å<‚Gü㯞xO¼'07››ÍÍHô*Ù ¶‚­€ŽvÒNÚ –––·è-z‹÷Ãî‡ÝЋ^ô2“™Ì€;ùwòïä­ºV]«h-m-m-¬«ÅjZ¶.l] oÞ2¼:ý ý ý (ã_ˆ!þ$úx||¢&…Iaά¬¬@ÁKæ—Ì/™I±WK½H/Ò‹@krkrk2ðë×7.À¿Í¿Í¿ x|õñÕÇW„Ÿ~Jø HNNªNT¨:888b†˜!fd‚L `(u(u(xwøÝáw‡ 0Êy†y†yR|ùÑåG—¡`ÜÅøzŠž¢§ž*H…÷ðÞX4‹fÑ€ûˆûˆûØØØ3%µ€6žOŽ'xpéÁ¥—2L#Ó ÕP lɶd[2ÐÕÕ¬ë^×½®{*×s=×Oå§oÒ7雎â(Ž’Q˜)ÌfòÓŽ%Ž%Ž%ä¥Écì‚]°ƒ‹Ld"Yš¸4qi"pöüÙógÏÝiÝiÝiÀ@Ã@Ã@àŠvE»¢” %l°Á6rñðÅà J”.( û û ûÅ£x@Gé(÷º ãÍãÍãÍè¢I4‰&ñÓTý±úcõÇÒ¡®]3ºfðÓ-e-e-e9IN’“˜ð‰'ñ\â¹ÄsÀº”u)ëR’CrH÷EÜq_úúú€â¾â¾âþ`[f[f[&0X2X2XÄŠ±b¬øL%Wò•|%€~ô£Ýk»×v¯lý¶~[?>Qw©»Ô]Ò!ŠõXõ–ãb®˜+æ’¬©AjdãÈô‘é#Ó¡Å0†1 Gyayay!àØâØâØlŠØ±) z¢'z@aQX`ÖØ¬±YcS ÍÍÍ@ÈÞ½!{ýýý€wòNÞ Ðít;Ý—”*¥J©ÐÖÚjmµ6KlÄFlø‚ÈD&ò % ¾|9øò‡ÙJ³Ò¬4—ö %%% Ý•r¥\)Ë»¼ùt‹Zµ,j«quãêÆÕ@öûÙïg¿\YueÕ•U@Ê')Ÿ¤|h•Z¥V x†å «£VG­Ž"—nz¸éá&ðþþþkˆ5Ä ÕÕÕLHNÉ)9ëuëuëu`NÕœª9U€¾H_¤/zêælÙײ¯eþVZTZTZ„ZM¦GÓóä5.p ‹þ†¹˜‹¹mï æçÌÏ™ŸšH )!%£…Zh[V)¾U|«øvó’M¦GÛ‚fÍ šEÆwŒïßÁŸ‚ÛƒÛƒÛ¡ð?ìØÿ0€d$#@’PÕQl 6U„*B1>„YMYMYtCN—Óåtš$Œ ãÂø¾à 3ÌçŠP€ˆ!Þ1OŽ™œÅBRH /gÒxOãwW#éH§ÿ¬Í®Í®Í–¶ÙÃíáöphɲƒì€ƒu°Ö µ¨ˆ@>sÇ?`ØÙÈF6\>)ßv~Ûùmò®‘½#{GöŠE*“ʤ2•燄„|ö=,°ÀBN¢è”–ûæQ¿É+PºƒØ‰¤:ª*ª*ªêÐ:õ[ê·Ôo•çDDD‹öÊ]•»*wMi—4Ò¬°Â `˜‰HDäEò"yœ”“rRÕ5Û5Û5O¸yåæ•›W„C~3üføÍè{â.u—ºK÷|xÇrÇrÇp·q¼y¾ò:½ë)æÏü™?nÿrû—Û¿îîî{>ô ô ô ¼wª½¦½¦½F8T÷zÝëu¯ó’I2I&T¬„•°ph à£|”D"‘01h´ ÚP^?¿~~ý|ø ø ø l [–ìù¤éÁ¾'ô8=N ^óU¾ àé<ãý$Qy·Þ ‡&§!y‰%±$6aÝä'Ç÷Užmžmžmìïo°7ØŒ.›wpÞÁy‘Âî²»ì.´t.KçÂ%eIYRTGLGLGLrøÀÒ¥K…õ|õ|õüCq“šÝ7X1+fÅb‘·³ÿãëX~~~~~>¾ŠÂû੆¼ÚÝåÕn‘W»ßR35Só”vk<5ž´Í~Ì~Ì~ ZJ)¥£¾J4L4L4L0g_q_q_±Ð¡ÎVg«³ïœwõ»ú]ýÙŸu¬èXѱÂ7}IFï{Z ï)èo€}Zo€Ÿ¼Ú­Š:u6êì¡uê u†:£<dæÈÌ‘™¢½"·"·"WÞå=¬«ÁjÀ¿›››Hªö®ö®ö.ÀŒÌÈŒÿQÜ(n7NüWXLXLX öæKö®¿åð;É»µr%Wr%Ù>99‰ɳäYò¬ÿHª0U˜*ì¿ÿùëò_—ÿºÜpÖÞfo³·ñOouû«Û_É/yÆö¼¯ÞBI¿å!øûíæ¡u¨“-¼šWóêøNz†ž¡g®„=Yûd퓵,RQ¬(VÓ6!]HÒ/ý`:c:c:ó—x[§­ÓÖI¾cA,ˆñÞ¸5^@çïqPüýF»ÞãB¶ ™Èo‘4’FÒ®šx¯ãuû6kfkfkfÓ6¡Wèzûg³ØGì£m¿ÜÝpwÃÝ À$ ¼ñ|ƒåÄqü?#Lòü]ÛöIEND®B`‚routino-3.2/web/www/routino/icons/limit-0.4.png 644 233 144 2463 13061246471 14574 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜèIDATHÇÍ–[hTW†Ws#!j5)”„«(jB„˜BÁx!Âht¨!bHP µñE¨P)>µ/%ÇH­ èx‹OE¼ h½ÔØ:âd"¹8M†I:™I&粿>Ìœœ[ß³_kíµþÿßgí½ö‘%™¯@vEvEvIÚÎn·ý[ ¶|þ[Ú>i@VsVóßßÃâ®Å]KýKýæ+Û¶æ­xg¾ˆïä³ü²DlGþÅü‹Y®Œ}¾^óõš‚Ò´ýÓ]( :t\í¸ p¹çraôÁ耘+æÛ¶æ­x+ßÂsâËñøE ·7·7kòóòóD rSå¦ߤÂ+À½Í½ àmÎÛ• ÆPL±rqâXcÜa[ó™x+ß³ð->‹?­G`ùÆåE`GËŽ–ÂÓé„W¿Â‘ò#åŸNp‚bÐãzÀØkì%ꮺ @Y`ÛÖ¼oå[x¾Ågñ§õÈüÚþÜž|O>0 ÝC34P_ê>݇¦EFJ}«ªƒØ#I’$ð“LÚnU­šU3ʬպ´.40 Ì'~†oŽ_œ‚ªÂÑÂÑø"R¡D(1‡ÛÄWÆ)ãIè Ã!d3›Ù ¸qãæ¿£šjªA½PÕc‡?aî4w’œÃ'd„ ˜ãÏèÉ;y¼Ç¼Ç¬l³F]Öz´{á¡¿BOBO ;·;·;ãƒñÁ¸ƒPÔµAm°ÝýÞ~o¿î|vgÙe6ž×Þho€Ù4ŸÍŸÖ“ö¬ÎOžŸu@µeRã­ãžqÔj5X{kí­µ·`ujuju bX p”®Wõª^PªQ5ÂÊö•í+Û¡ñRã¥ÆKvœùÉlïl/)-¾4¿¥G ävÉmuFëFëÀð̯șOÏ”)ƒzo½·ÞkûׇׇׇálÓÙ¦³MaaVaèôwú;ýP~¨üPù!ØÝ°»awƒgl×KõR'SšßÒ“-’ãÎqó…HîµÜk"2)""ÑÌ=¤÷ëý"ÅÁâ`qPæFÉë’×%¯E¦š§š§šm¿ÿŠÿŠÿŠÈ¹¦sMçšD\¦Ët™"O=O=O="Cû‡öíɹºhlј?Z|þŒžlóºy=+(¢o×·‹d¥…-·ˆ*ÿ¨|TùHä]õ»êwÕ"‘úH}¤^d8o8o8OdÕðªáUÃ"3É™äLRDª¤JªDêÖ=¬{(Òw£ïFß ‘‘î‘î‘n‘—§_ú^úì…pÏâKóÏéùpÑ•©ùuÃcxHY?ºÕÕêjuAÑ¢Eàhähähb[c[c[¡v v vÞûÞûÞûìù}~Ÿßîw»ÇQÊ#³e³eþÿî±N¥–9%†Óc€JgšfÐ B4 Fƒ ö©}j¨ujZÑçÑçÑç`ì1ö{@íR»Ô.˜®š®š®‚‰‰àDø“1ÆPú„>é[⣧ÒÑÇ´ÐLhÆÑǾ3úŒ>’f\U¨ Ç&oSmª 8Ìa;û @”(Q A { ™-f˼>¦‡ôö±y¿ÀSéü/ŒÀ ³Ô,ESÏÔ´šFñ;7¹ $Òw£Š¨ˆŠ# 1äú¸€b‰Ñit¢6€ná´ó/Ø»rÁ¾.ì{la¾`ÿ’.0ç/J>ãÈðá7”^22"2 ç®›»nÞ/Á†æ‘›6lÚ@’¯¬¯¬ÂB’¤>D2†1ÂMÒGåú7$–õ‰~9/ñ$¾ä“üA= Ž €Ü²sËNÛÙà@×daba¢ä \!YÊRÆšO󑤾[ßM?)šE3IR¡Bš±¬Ë~9/ñ$¾ä“üA=øôÝž\KnÚEr”$-¤1͘Fš@ ⨨uül‰d‘,’Ic‘±ÐXhægÂ*¬ZŸºZ]Í€ˆ00Y ´Ð¿MÛ¦‘’¡‚œ§hØ^Û^ûÂH¯á5&'Ð_ÖÖð£¸"¼ÂË/—“N:IÑ*ZEkˆÐ1"FHå é?i¬0Vð#ã‚ød÷œî9$Çl=¶_˜Ô3!ìô]ÒsØsxò.Mëë&Oó©æòær²'µ'µ'õK}ݹݹݹdcRcRc’™Tú¨ôQ)Yñ°¢¥¢…|ºìéæ§›Í7ƒ|T=ÅžbùjOßµ÷meÚÒ]é.Õ ¤*éÖ5Ö5Pë¾­‹­‹…²vöÚ¤µI@ëÁÖƒ­1¹´2­L+²geÏÊžTíªÚUµ h+j+j+2f>Ì|<Ùódÿ“ý@NeΜPÚ/?Øü`3Te}O´¹\.—D]Ù`ìöÆ¥iø¾2}%€Ÿ@9Ë(ö²‘ÄFG–#Ë‘°€,0…ååå~ůøÀqÁqÁqËÅr±°=·=·=r*r*r*€ÙM³ïϾŒûü ˆ ¢(gñ{zz? õ(äŒØ±F'Ðý¬û™%p$80ldéKô%pXÿ {öÈœ™93s&à9æ9æ9DÛ£íÑv`oùÞò½å@VMVMV ÐYÝYÝY ä!yjQ‹ZÑñÑñÑñ@¿Ö¯õk@ÃËúöúv`aí¢¦EM¦2404‡B§Óé]À¸f\S:!´ÚÆÉp /ñÒÜQ D`\5®WK¢%Ñ’¤ª©jª tÜê¸Õq ² Ù†l@©µÔZjÜ}î>wp§ìNÙ2 ¢8âPÄ! ý}{G{‡É'<êMõ& õXŸÛçîxKScS£ìã>¤ˆpUfì‰öD{" îPw¨;€õë3Ög·½·½·½@arara2àuºF®]'ºN 4,âÎĉ;¤YÒÔ4Øõ>·#·CâsŸõMËÅ–‹À¤žÿ;•¼¡]Ô.š§rtéhÊh éwù]~ÉzÖ³ž4ªŒ*£Š[5¶jlù®ò]å»JóTŽûÆ}ã>òÍû7Ão†I‘,2E&©çëù${'ø&ùƒzL£mÀ6à #½ºW7}Œ4ö{ø1ÄTªO•ä0‡9Lrƒ ñ±eb™XFŠ«â’¸’ÿFóh~ä÷“>æìv’ÿª}ÅùÒùõú ’ñz±^Ìc-k¿t~–°„%$c#?<$ÉyœÇ)D³>_ŸÏëõB½0ÄùõíaÛÃäN}âüSö[9eoSö>65o°ÿØujƒ ‡ÿOIEND®B`‚routino-3.2/web/www/routino/icons/limit-5.9.png 644 233 144 2543 13061246471 14605 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–kL“WÇO«r1(b˜AjŒ„ Ò‰˜¨¤ Ñ€ÕTC`3“xùÀLL¦’˜9u-™h2124·¨\¦ÆðeSãmј!^h¦ƒ-B!…&mß·ç·íi‹Ä}æ|èÛçúÿ¿Ï9ÏóB!æ…ŸŒÆ ãÜlÜÕ'¬OX¿ä—Ü ƒa‹aË‹o ¹>¹ ¥9¥9èˆÊÊ®ücã…ˆæÅSz1ODñWã¯,aù8lÏÝž›ðIH>q;;'4Ø}m÷5€Ž–ŽªÀõÐõ`Ô2j¨¬ìÊ_Å«|±ùÅñð…€Y7gÝ4ôC|\|œY”YdÚrøÇ¥›J7 Μ! I$I àÁƒZîYÙÃþ*^åSùžÂñ° pA¡`+³•%6…­p ý@ºÂ tµÔ’šGóèz>wå]  *+»òWñ*ŸÊ¯ð~ˆ˜¼·uëÐì3í3#„pO¯ÕkAÿÖ?à  gë[õ­H}—¾Cß|O 5LYÁ@Ðô‚ö¯žª§"åWZ·ÖMô1} ð†óc·Ç+‚uëb¶R!²‚DW¢Ë3“`_ /É¿‘ž`^0/ÃD†%àÅ 5©I 8ÊQŽÆ0ý’œŠõKú¥HÄF|}Þ>/DðÃ|ÂÄîÁÞ#{‚f®®ís­Z«F¶W¶W´WÀ™mg¶Ùçìçìçì0ž4ž4ž4µbϳŸg?φÓ§ NÀë¿_¿xý"Ê_> ÜÜŽÔ×Áó ûëkøuì×1ÈÊp„oøçáSç`áò…Ë.[·­ÛÖ ---àt8NG”ÐËâ—Å/‹aÉØ’±%c°¦lMÙš20/3/3/wŽ{±{qÄÝ'ï)¼¾â#`î¹wäUpå»òAožüæ×ǯ{®{`öþÙûgï›ÕfµYárÕåªËUS+u~íùµçת´Ui«Ò¢ú•y+óVæAÓoMMQ½¾Cý á+>Ræ¤Ì ö‚û­û-¿‹´=÷kî×ܯJk¥µÒ ÍmÍmÍmv6ílÚYèÊêÊêÊŠõ÷÷Cî¡ÜC¹‡`ƒiƒiƒ âêâêâê uQë¢ÖE1Ä ^_ñ1 ¼¼aèBÛ¬mB8…B,÷†põ¸žºž ‘¥eiYš;í;í;íBd<Ëx–ñLˆwîwîwn!ü…þB¡''NNœ"§4§4§Tk»µÝÚ.ÄücóÍ?&„©ÓÔaê‘eøLá…ñŸ)gÌ0ùŒ9Ú`iÃÒ†¥ \”\”\ÕÕÕ0R>R>R{ öìþÃý‡ûCIfIfI&¤§¦§¦§ÂÁG|³ç_hhà£í£g샮T]Ò¥]Ñ®D»Èoñ¯ö¯†ãˆqÄò•|%_¼(/Ê‹ð>ÿ}þû|à·¸þ‰¿†œCÎ!'ÈùX>þä o kã@à»2fŽyúFûF£sLÖjƒÚ ^Ù(È1óª^ÖËzÀ‚KL%̘1ƒ,—å²<ÆÿSY&Ë€t§îŒ™cZŸ¯Ï÷Ñ93ùÕ$Ö 4™õ^½ا÷è=äm9$‡üN]ÀDèÛ(ä€üøð?RK-ȇrTŽ"yÌ æ½[ït•ßž`OP•š4ù§í·rÚÞ.¦í}lzÞ`ÿ™mY¼·–XIEND®B`‚routino-3.2/web/www/routino/icons/limit-23.9.png 644 233 144 3110 13061246473 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜýIDATHÇÍ–ûOÔWÆ_FƵšŠ‹!€‰%-qÁz¢»¦uˆ7ÜÄĵ٠KÔl³˜-Ñ YÄ’e¥!’•.D¤cKRèL™€\´ ‹±\ÄJa¸Íw¾ç³?Ì|¶ç—Éóž÷}ž'sržï‘·|¿¦(S”é7^lÊõ×Cö…ì‹ý·W{ àÀûþ «¯¯¾°æ³5Ÿé?ú±±oô/Ÿñó/×3êò–ø ÁÁ;}ø I<’²Î‹ËÚÀÜlnvi×’×p§îNç`Ì>føeç/;Á}£ß˜7ø–óË•_é‹@Ð×A_ CðÊà•"½7zoÌyoÃ@ :xè ÀO+~Z¡Lày X°¨€'Æúy6ö}ýƼÁgðz†¾×ÀÛ;ÞÞ!ûà˜¹Ö;ðc=FFzîf „, 95'€'Ë“Å"¨6Õ@àÇÆ¾ÑoÌ|¿¡gè{ýørND¤|Xû­ý ÷¸mÚÝÑîhÐg´`-·Ï©Ò§ô }´!mP½[ïÖ»ñ/SL½FJwkë´u¸µIw¸;Ôi/?XV'0ièGù­ˆÈ¦€Ùiv:ÕR¿­ß\à¨T•Êÿ¤–ZP—Ô%u ˜d’ÉeF*¨ %”PYͪY5 üJÔµƒ9²}üû|z>}z¼~„1‘êvVŸÉ9“cÐéïöw]èºÅW|Œêù¦ç~Ï}¿àc×c×c”ß,¿Y~:;;—%Jü¸wSï¦ÞMP™RW‡xzýéu¿ž:&Þ8ÚêvñtŠˆt^€/>úâ#èøÓ`ê`ª:e™5W™«XÜ•»ëÄ®žžM-M-M-™™™Öqë¸u6¨ jƒ{„=Âá7Ôgê3õ™ v:v:vÒŽ¥J;ïn|çûw¾gñ¥ÓÓæiS§ ÉÚd•íõ(«ÂjÂj’·‰ìIÙ“"ò<¥5½5= öÏÕ· n‹üý_Ÿ4Ò,²5wkîÖ\Gœ#Î'R6Q6Q6!br˜&‡ÈðØðØð˜ÈÂú…õ ëåõ²7Øì "á á á "¶¶¶"Û’RæSæ%ø«Ã ÇŽÔžúæÈô‘iõ]èpèpò6Á½&dMˆþDå½<ðò€ÿÚÛg‹±Å@btbtb4d—f—f—ç9ÏypÕºj]µp8þpüáxˆÊ‰Ê‰ÊG±£ØQìÿÇžÝxvãÙ H,J,J,‚ý1ûcöÇÀÊò ¢ "¸u÷ó¨Ï£øt³nM_¶*L"z™å å j„é‹ÓáÑÙ'O À|'¤0¤JæJ\%.¿PÝݺ»uw!¹>¹>¹Þ_ßbÚbÚb‚š™š™šX¼ºxuñ*ôï;ÞwŽÚŽÚŽÚ ´«´³´~k ï ï{©£ÊQ0343ú^K%H5šÔ5×=×½GE~hÿ¡]Äv²{c÷FN{Ä=ॖÿ´ÔµÔ‰¬M]›º6UDb%VbE¢U´ŠV"¡îPw¨[$éAÒƒ¤")))"Û3¶glϱ<·<·<™ÏšÏšÏ©Ü_ù~åû"¼²êd•,¥þå½sïã´äÝ»xé÷.Í¥=z(”ùn%g ÎÀ|£÷–LdŒ¦¦Áˆmdxd5zj4k4 ¯-^[¼žO‡§&2'2'2AÓÃô0P jA-À«ØW±¯bVZi…¥?,e,eÀøèøìø,Juk«´U€Ý«ùEùEàÍÓêv_Àús Œ\ñå̼ŠP̽®H ¨Ë겺¼,v«Ýj7I$‘þ:Ilf3¨ªXè#úsj³ÿjÿLÿ €ù…ù…3#Çþï«^¾‡Bkž5T½7™ÕCÅcu[›Ò¦pSG](nò)Ÿ‚úJ}©¾nq‹[À[Io¼Y°87[.BƉŒÿÕ`kÿÖ~€¾/ú¾àwððÊÃ+3%3%`asßì7çM¾T~ùð)}pø~Û$,J_”.ùò7¼øûDÃø‹ðzÅëÁç‚Ï);èÿ2ÉT%@„æšJÁæ~²ßœ7ùL~SÏÔOøÈYŸ³^6¿½ùíŒ#‰À1ð:½NS/~ø„OÈ-¢Eô½¨‹ê"6l`asßì7çM>“ßÔ3õ~¬G9+"²¿jGkGÁ˜ˆjÿŠ//•­­ÒVWÿ&‡”fhsÚèïè zèvÝ®ÛAW>åã饌¨–©e×&ãùñ|0ü¦ž¥o>Ê ‘Ÿ·CF$#IcÏèàè p€rPåa–Ïh§È!‡œÉ(Q¢)8Nœx ÞÍnv¸ÌeU¨ ™å³$nRÏÔ¿œð#<é¼Dö¶w·½k²®À†['o„–-ù-ù¨á‡?þ‚¥ÁÒ`)´Ÿj?Õ~ ºjºjºjàØÝcwÝ…{=÷zîõüèÄ”J%°ÿèþ#û ¾**·ôÔü¶ŠmÀÄ»úFDä'å‡/l|Aä^î̃™6wñ:ÏNÏN™¿V|­èZ‘Øjýµ_×~-Ò›Õ›Õ›%âwú~§HO^O^OžÈ–«[®n¹*2~vüìøYYXc;ÆvŒí)ÞP¼±x£ÈЮ!ïWlU?­ÚTµIæ¿ùÓhÕh•ÍmK¯ðWøEŒëI?ª.+7+Wù`&w&F\¯L¼>T~¨ú¶ö5õ5û€û€ûœwœwœwX'qÐ8h4 ©¥©¥©åÇ'5âqŒ8 £µ£µ£úšúûÁ} °®°.üóÊÈ•€È@dŒŸ,½½ô¶ò SËæ—Íwh›zê}ëµÜ܇_¯ÆÎ}Î}Î}p³ùfóÍf˜]=»zv5¬Ý»vïÚ½ ,CFÀ ?‰>‰>‰B͹šs5ç ï7Î g\¾õê­W™‚hy´Œ½ÙŸgnܽliúÒtåƒØúØzø[µ¯Á×…¿v½äzÉ".ØS°§`œöžöžöBwgwgw'xnxnxn¤¼ ýÑþh?„W„W„W@÷™î3ÝgÀ½Æ½Æ½Æê+t½}9 G«zßê} ÖkýgKÆ—Œ+Ÿ¨¿Šˆ|»¾šþj~ø€j,i[ç^ç&–]–íÉö@}[}[}›E\®W‡¡m¸m¸mت‡\!WÈEÁ¢`Q&½“ÞI/”5—5—5CÖæ¬²¬2xçfý{õï‹¶&ôàËÉ/'A…~’9Öy‰¡í9ÛbÀpi¿œ›™›Ð`Èò£ôF½Qo´ <>üøðãÃ0çœsÎ9­º¡ e(˜nœnœn*©¤´ãÚqí8„þ::ŠÒ;æ+ç+-=îlÏßžonç%áÒS9æHäŠúÃBŽÕ©:fÕ¯Ô&µ XÉJV¦ü»½xñþŸ\K#4PTŸªOT¥ªd6ù±*gÕèõÑëáŒp$!3ÇÌä™ÉûFÚiÀljdVç´ïµï¿èA=¸Š% Avñ¤¹Ïw|êšP@,ÙߪécÄÕYí‘ö8œà_Ћ=üÏî·ò™½]<³÷±góû?¹@4]ÝyIEND®B`‚routino-3.2/web/www/routino/icons/limit-141.png 644 233 144 2461 13061246470 14575 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜæIDATHÇÍV]h“W~’Ó€M›5eL"J+Z ™š‹N(¥©M+­?uØùƒT/6)î/¢ˆ °NEt&D¥¶¬h‹mÕ^C’ ‹º› £ÅX[¡–¦hª$ß÷óì"9ù¢qì¶ïEÂ{Þ÷yŸ÷œ7çÉ (H}ƒ´.³.³:“¾õs=wcîÆ’ß’þEƒ´|iùò¯cd~{~;Iº®º®Š1ÓWq•Ÿ‰Ìú™|j0ì½ö^KuÊo%wxwxs‹’þÏÒÑïèŸ×ÉýƒûIòfçÍN~GÎ Ï “äëê×դ髸ÊWxU/³>Z?àHÛmÈòœ´/¶/ÈåµËk‹H&Œ“[7mÝD’/r^äH+I’Æ?$—p‰¬&cŒÊ^fø*žÊWxUOÕW|Š?ÙH·ßíÈm»¶ír\IƺÉCžCŧõ“<ÅS\Bê1=F’Æc㤌ÈIÒB iú*®ò^ÕSõŸâOöƒ÷gÛ ›r›rIΑ¤vŸù"Ÿ~­Kë¢&’}²’˜,•¥²”ëÄZ±–Ya¯×éué ßgl»¶]S ¶2F ¥ç)ÓŽéØ"2*¢"]°Á˜Ð*´ ¾•ý2*£Ì¶R–²””#rDŽd‡ cÌ#M¼¸&®ñmjÜ dÔˆ$é˜qÌÄ©~R]üƒl9Þr\•keX»£Ý1w999KNú&}“¾ìž¶8øà Ò¦ŸÖO맆á†á†aàäê“«O®6ã×Ë®—]/ØvàaùC×C,©pBKòUÁª B•ß²Î3´î ÌW•W•ø,W˜Ëç|;þÆ,fw»Î]0È ƒ&ñ὇÷Þ Äe\Æ%P¸ªpUá*3Ž•X‰•@ÑÝ¢»EwY#7ËÍé¨î$à¯ñ×é~HWž+OŒ’/§_N›×Þ¨Õ×èkÌQlpmpmp‘7.ܸpã9Ô=Ô=ÔMº½n¯ÛK6h>Ð|€,9Wr®ä9Þ3Þ3ÞcâkB5¡šyé襣—ŽfüýJf²+ n‹Û–QH}‹¾%½7l˜Â”¹q”AÄ€€ÕcõX=€/áKøÀãñÇãÇ©Ž©Ž©`´k´k´ËÄ‹‰€(žàIƉŠôF½Pý,bÕ±ê‘G°†gó¾¯€ÝØ ~2i“6K‡:r§Çéqz€ÄÎÄÎÄN Þ_ï¯÷õÑúh}è¼Üy¹ó20`° Ø€Æ}û÷™üÎbg±³°-³Ú ÓË |üß ß³\b±‚‘Gÿy+9¤÷èæ(äܺ¹²¹22^¯ŒW’ä IÑ.ÚE;ùný»õïÖ“ož½yöæÉ<ÁæÈÒx{¼8^LIŠ6ÑFòÎÇo¥©ciQº¢tF4‹f¾Í¸ù &RŸ ’¯øŠ¯HÎsžó$%%%IµŒü´½Wïÿtì#ʯ)å7&Œ ’EÆã5þÈ^öf+?[ÙÊV’Ìg~¶ò›x£Ö¨ÍP~½)§)ç£Ê¿`ÿ+ìëbÁ¾Ç’/Æ…ö‚ý‰œIEND®B`‚routino-3.2/web/www/routino/icons/limit-37.0.png 644 233 144 3025 13061246474 14660 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÊIDATHÇÍ–ÝoSçÇv’æ…Ø$sUg”•†R "šˆhDT…&©KQ@@< šP^.˜š Úµ»h&–ŠÝ¢”V fUbZ@”ÑUÕ’4…Yâa«­Sç¥&±Ÿãç³ û` þž›£ïïåûýéyÎùžG@DD ’Os‰¹ÄlM`óoRñœšœše} Ü£ƒ©ÎT÷];,î^Ü PØ[Ø¿•ÂFÞ¨OïIñ§ëq)T »?»ßT•Äï›/½ùRNqw\…Üó¹çç4ØÿÅþ/?ü„CðÃW?|0]5])läz£ßàKç—wÑ,w–Û4ÙOe?%K6/ÙüÜowžƒm¯n{À—áËPfÐ'|òU"„±~NÃF>Yoô|¿¡gè'æ°m²m×ßzý­Ü¿$n…6{›ÝЋ>àòA i!½Qo$ ꪺ € ¤°‘7ê~ƒÏà7ô ýÄ<©£œùc54x<ÿ v]‰Æ AYµR­”˜dž ¥Åµˆ}—Þ¨7‚nÖͺÔ€:§ÎñèRjƒæÔœÄ´û±üX>¨·üÐjS†¾q”÷DD^è‚ÜPn(”ÉQÏuÏuàŸlU¡*˜çOtÑذaK“ &œ†£D‰¦á *¨Ö³‰MªVÕ2Ïæ$ÿö¤ž¡ÿ]báG‘žkXì=°×`‹¯ºµyôâèEèXÚ±¤c jìý±÷ÆÞ_µ¯ÚW ]—º.u]‚ÞúÞúÞz8{ûìí³·áî…»î^xlÇðŒzF=£ðQf÷\÷jâÁxÿxJOÍX`½q´=×Ìê_""ë.Ê/µÏÖ>+r·xÚ?í79^©¬h­h•…›¯Ü\{s­˜Ü _6|)Ògé³ôYDÜv·Ým9Sr¦äL‰Èî»oì¾!rÇqÇqÇ!WÀpœ";ÆwŒï9ý÷‡>S-µ“µ“²0ó“ÃTP}´ú¨íÉy”ÓRl)Vý0]<] ÿ]uoý ðÑï»·vo…Áýƒ®A8Ž9Ž9ŽÁ•¬+YW²R;q<~<~<®W‡«ãñêêê‚òæòæòæT|íÈšž5=ð×}Ÿúì@ôDôè•y*O©þLÓ‰ †Ÿ¥+Þo7Éòÿ,ýpé‡|&²çþžûbÛãÞûõÞ¯E&½“ÞI¯HQkQkQ«Hxyxyx¹Èɦ“M'›DÖ ¬X'-}…¾B_!’ßžßžßžŠ[ï[³­Ù"áÉùmóÛ$(’ýtöÓb“k¼hŽ7jÍbú^[¾±|#ÒWn×¹]b«|»²º²ZdÐ9ètІ Ã…aŸîÓ}ºÈ@ó@ó@³HQMQMQHYUYUY•HÔuE]"S+§VN­±ØGì#""þ—ýåþrïïbïb‘.—9Ëœb™«Ÿ«1ýJ «aÓ÷¢þ,"òm+|ü<¿ü@5UuV:*D­[¬Ö ØÙ¹³sggê(êfëfëf¡s¬s¬s, †ðúÈê#«ÀìÆÙ³ÁUê*u•¢C‹ö-Úm ͧ›O߯j‚Où %1_ÿ>h;øÐâ«´òÈtd×7éMzSj€™S3§fNAıGì©x|!¾_€`O°'Øj‹Ú¢¶€ªS¯©× x+èúQñŸbÏÇžô„úÁ–ƒ-@$1píËJøŠúÝCs*'óê×j»Ú,cËÒÞî6ÚhKÃ1bÄÒp ‡9 ñ²*+€ÊSyÌ«}Iþ×ãÈ æC™L>f8ÔpÞ72ßÈÞO8³º¬MiSÀIݧûJ*òÈ$hçÞIäxñ‚ò« 5Ì%ë/Çsâ9ÄÔ·Úœ6üÍpþ¤Þ£Îÿäþ+ŸØÛÅ{{2o°ÿÿ?ÓÏÀ;MIEND®B`‚routino-3.2/web/www/routino/icons/limit-16.0.png 644 233 144 3024 13061246472 14652 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÉIDATHÇÍVïoSåÿôÇèºõvݬÜô.AÑ-‹dF–-d‹€ ±°±NaɽcL£÷ nøâ _ìâ Ãñ½ËÒàX„J€„0Àe)J ‹íêºá\œqÙ¡åÇ9}ž/ÚÓSý xÞœ|¾?>ŸOÎsžïy@<…'Hë³Ög­î<¶î5ã寕¿öÜÿòøhŽ´´ZZ:HV©:B’Õáê°˜4±‘7êKû“¿TψÃ3àˆ8"––þ˜ìx©ã¥ò§óøÓ1Ò9âÉèd÷h÷(I~óÕ7_ñ}rþûùïIònËÝÒÄFÞ¨7ú ¾R~|ü}€,;SvÆ’&Ë˲vKí–UÿÎL­"ƒ;‚;HòWÛ¯6i%I2w›¤‹.ÙBR¥JcÝ)ÁF¾Poô|¿¡gèçý€ô6{›r×[»ÞrË7Lž {Ÿé}ÆÐÓFHö³Ÿ.RWu•$sïäÞá#RŽÉ1’¤…ÒÄFÞ¨7ú >ƒßÐ3ôó~ðç½=¼™ênm·V4tU4keZ){õI}’FFÊÜ)w’zLŸÐ'H!„‚æºÍßø[I¹Aé!jú-Í¥¹HùnžŸÜ­îVI.ô‹[©@Ýç¤ógçϪLnNn&sS$É×徨/2[”ø;=ôR‘ŠTJŒœâ)ž"ÙÅ.v•Ä}ôÑGr=›ÙL’r›ÜÆ,·äù¹3q5q•$ªSUíü)ï§ð¦Ž^&{úzúHy$E£Á;öÅØ‰±”©ïRߦ¾5õ¦@Fº#Ý‘nShee…Ü>½}zû4PJ@!ÓÒÒ̺…ØBl!F6Ž4Ž4Žk.®9³æ ù¢úüÀó|t·?¯GFÎEΑò?y?VXݹ?zÙ‡}Í7›o\–cX°U٪਩¨©©©\]]óâ¼8/€d_²/Ùx½ÞF`cÍÆš5@µ¿Ú_íGqE;£ÑNÀqÅqÅq¸ÑrcÇÀßÒU¶*§Sà `9 þÈ+²B¾ì³b›mÐ6È ¬¿¬yR%díðwø†TÃtÃ4ð`ôÁèƒQ@Ëa9 xcÞ˜7lŠoŠoŠǯ¿vü0~vüìøYÓ˜fÓlš pM¸&\fÜ}Ëíp;€·³Ál àhr4¸lóظ|˜íœíœíx÷xX©­ÔVjÀÂý…û ÷¹us¾90óÊLÕLPw®>T‚È´eÚË?äòGËM+¬ê«ê«?Œ—.\º`5°«àë±»Ì-ÜÈ&³Él8΀Xí_í_í*Ê+Ê+Ê&¥IiR€ Рֆ׆׆@_ /Ðø²¾¬/ Ô­­k¨kÚžÚµ¸k›õ K–Øœ¾uú`mϮʮúa¼ôTê9Dò´q*Ågâ3riãÒÛKoS>œ}˜|˜4?ê\$ÉEÈ;õwêïÔ“",Â"LʸŒË8©ô*½J/)·Ê­r+)[åò R™Tæ”9Jñ»ö‚öÉ\A/׳¿g?ɇƩdqŽÍ;çU;™È%rEý×ùX¼)Þ,™c{ØÁRVÊJYi•+ä ¹‚¤Ÿ~úKæØû|ï‘B•né&IY!+˜•ÿ,ðïOÌ$fHÒ©8ÕÎôŸæXÉä×Ûmí6sòói=¡'HÊ¥sisòó¿ 3LÊËò’¼Dò$Oò$É,3ÌrV¦dŠd¦PN”‹rj2¦gôŒ±3ÚU²ÝÞn'ùø¯“ÿÉýW>±·‹'ö>ödÞ`ÿ2Zƒ™0IEND®B`‚routino-3.2/web/www/routino/icons/limit-7.5.png 644 233 144 2504 13061246471 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜùIDATHÇÍ–]H”YÇŸ™,?0Ó(ìbÊŽ)(ŠºJèc¤lIÒ1§ˆ$J­ vYж.$‚l/ŠÀÊ¢Hl'éÛ¶2‚ÔÙ²v‰ÚbÓ¢¶]e$G2§-™÷=¿½˜9¾oE{×¹žsÎóÿýç|<ï‘Ìį€sºsº3#;7[ý)+RV|ýs<>n€£ÄQòg5L:2é@VcV£ÙcÅz\Ï·ç‹Xúvžî—L±:’Ï&Ÿu¸ñ^X;g휔©ñø€R/¦^ü7[.o¹ p¡éBßC°+ØðÚýÚ V¬Çõ|¯õìú²÷#¾Œ¿:þªã/HžáY.ôŽë§œ` é¤+7&Œn![¬Çóu¾ÖÓúš§ùq?S–NY*žužu© ñ„žfØéÚéÒ¼èE –ZÒ!Ž…Œ2£ŒQP~åÀ¬Xëù:_ëi}ÍÓü¸ùpo.#\-Žº£:cûbûÀpF6G656ûý(Ã3c&¨uFÁj¿p…+`ÔUF3ÕÆj”±9r7r—(?…F¡¥OÄëð:´ÁƒËl[)"2³Rƒ©ÁpŒ€1†Y æsïlèQFm‘‰‰i‹ñˆGÀ+^ñ …ÔX‚]o¥ÅÓü¸Ÿ„±ã¿ÂÖ=[÷€ª0çi™ ^¿(Fþí°ÿ°75njÜÍO›Ÿ6?…ç¥ÏKŸ—Z¾"#‘‘Èœ¯8_q¾Ž®9ºæè8é=¹êä*x;ýí· Q zTP¨yq¾ö“0öàGð½ñ½3@UèÕñ/ôÏõÏ…¼Ey‹òA~(?”ii€ËXðPðPðL›?mþ´ùàyèyèyeMeMeMÐßÝ¿ÿ¾µúêŽæÅùÚ@FGF‡: ÁÁ¶-Au©.0ÞCÆÕ[ßVßVß•*Tà“ÖzªõTë)H«J«J«O¾'ß“-å-å-å6õkæns7ðlì/%øq?Y³&šÝê õÉk?SMV“-¡ºº:˜ýdö“ÙO §½§½§ýSc·kn×Ü® w…»Â çÏ5žƒìcÙDzA[k[k[«íˆ&é2“à'ü8EÌ+æG·H¬8V,"""2Åœi&™I2ÖN¯?½þôz‘© S¦6ˆÌrÏrÏr‹ŒÖÖÖ‹ Þ¼9xS¤7Ðè ˆäÞ˽—{O¤Ü[î-÷Џ”K¹”Hè«PN(ÇÒeGœ7ÆOøqŠ„Ýa÷¿‹tÞê¼%"£""TÊwª@HD ø•_ù•ˆgžgžgž%<|iøÒð%‘¢ô¢ô¢t‘ÁÁAßßß‘̂̂Ì‘%®%®%.‘²´2G™CDD-V‹%2.šài¾öóñ­$–¸%b±NëH u µµÃˆkÄ5â²m…2•©`°d°d°ðáÑë‘ë‘ë0àp8A}«6ª–ÿĺcÝc*Ÿ»•ÿ£ŽU³‹]¶Cþà“„ªUµªÔ uB°õQªøÆð>[‹ÞÞ}¶ŽÙ*?Þdo²^¹è0F˜hl7¶¥>«\ò7/y ªOõ©>`”÷¼v²m ÚU¿êGqÍÌ6³‰‚ñØx Zß›âMÑ+õAåÿb¿•_ìëâ‹}}™/Øÿçœ;;ôƒ‚ÉIEND®B`‚routino-3.2/web/www/routino/icons/limit-24.3.png 644 233 144 3013 13061246473 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÀIDATHÇÍ–ÿO“×ÇO»2ÚQê°[ ÊRoæ—¸Œš\wãbKa[a vÂÈü¥:ÄdÞy­ü@ܣɮEcKÄ@—L’]¾m.K¦ÁE0ã·¹  ¹M†¸)0hoéÓž×ý¡}|¸óðüòäý9çó~¿ó<ÏyŸ#@!ij‰§ýRýR½%Žõhuã›Æ7—·ÆqctźâþO`Qý¢z€´–´–Ø †ÕyuýÂ~!4þ…zj]<+´Br[r›.'÷CÉË%/ŸãCÀÔeêšS üëò¯:?ïüœá^ï½^€?rþÈ «óêzµ_å[È/öÿI_Hú6é[]’ŸN~ZÈÌÍ̵ÿ=¾àŽ ó óFŸ}Jê ú0c–9À 3¨c|VçëÕ~•OåWõTý¸ϽþÜëBÀÆ÷6¾gjŽ7 ~•K*—¨z‘.à3>à ʌ2}?ú>aätè@Ã꼺^íWùT~UOÕûÑ>eP!|Np¹‡ ö @¤G D^Œ¼±ÿ*©J*‘„S©Z–+äKò%ˆ9bŽ˜mLò;¿?B2RÌŠ™ˆˆdF2!ÖçWõ4}õSžBˆ•GÁ4cš™1Èù¡ž¡`?.Ù2› ³}À V°(¥”R—ä%yi¡)¦˜Z€÷%úÎq‘‹Ò!9’à>¡—ÐçbÜàžB4þÀ¢íží•-–Õ—üÓžŸöÀ‘š#ÕGª‘}wún÷Ýæ±1¼mxÛð68o;o;oÓê±ñØxl\ÃÎÁœÁðù};fäõÿ\q]qizr~{þö|Pýˆèu!„¸¾N}tê#¸²sdýÈz¹Õf/{tÒIbD‰‚ Èa9 „'E]t8:LDžV~S~Ž«Éÿ®á]þsò?¹gå{»xbïcOæ öjvlz6KÔIEND®B`‚routino-3.2/web/www/routino/icons/limit-38.6.png 644 233 144 3054 13061246474 14671 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜáIDATHÇÍ–íO”WÆïAä¥2&;JdQQ"…HJ—íH_¬u4D¡F4Úî²ý`¢ ²‹ÉR&ÛÔÆu£Ñ´[,QZ±ñƒ"/Íšƶ„‚ LÆ0”0ÌÌs~ûaæñ!þž/“ë¾ïs]×ÌyæzŽ€ˆˆ$…?"Ò"Ò"Ö…pÄ1£óVÌ[üo_ ‚i¿iÿ£³°þóõŸ¼víµkÚcë}}~õ~ƒµž^—$1 ÑíÑí¦Ò0n„;ìˆÙÂ-½ÛÛñ{ê¾­ûàfëÍV>„éï§¿ð”zJÁÀz_Ÿ×÷ë|«ù¥ñ%}XÛ½¶Û4ÑQÑQ"^ž^žñ×ÐÀh¼÷ö{oL®™\£" ø@‚*¼xÑ—{Öûáy}¿Î§óëzº~È€¹Ä\"ï|ÿ`ìÕІÇ_ÀÇ©§êzþà<çI€€7àV«ñêU½˜0õ¾>¯ï×ùt~]O×ù1ŽrIDÄþ'¨©Í àüìÝÿ:hÿSÿSüa§J×F´< ŒÆAE©(…±~ãW~}”:88?0ä_ç_š7Ä•3•3Às]_?Êq‘¬Ï ÖëõFrnd`dè T¾Êg‰»Ü㨠jƒÚÜà7V±cÇ:@ýw …R@Í)ò(›²±Ä7aþÃzºþHÈ0#"r©uÇk×êlZîãòŸ:êû¿ì-öÔà³Á‰Á CÏÙälr6AK_K_K ççç}­V«Õj <¶oì±wÀÞmï²w¡œ6Ç€cÀÐSÇsçó!?¢uˆˆ ý :Îuœƒ1óüäü¤:ºáë3×gâ«Ü\™R™Y²d=€Æ´Æ´Æ4Hw¦;ÓphðÐà¡AHíOíOíÇÇÇÃû‰û‰û õõõÀÞñ½Ã{‡a×Lasa3¾§‡¼[½[ÕQ¸¹éæ&ÐÜ!?¦¶Ä‰ó DJ.–\ ¦.Øl¦«—¦-M[$ÚVj«°UˆXÚ,m–6‘¥î¥î¥n‘ø‡ñãŠX³­ÙÖl‹Ãâ°8DËËËäźí¹í¹í­­­1çš Í…"»ßÌ{3O¢Íˆ©Š©2])ú¨è#‘ˆâDW¢+¯ Òôï5Sk¦È–Ï´³ÚY“l}¸é“MŸÈ\Êrͳšgb>œud÷‘Ý"³–YˬE$` X‘ä…ä…ä‘ÖÎÖÎÖNÏ´gÚ3-’ܛܛÜ+"’!"Z½V¯Õ‹$%%‰OOOŠœû±á‡†DöÔTôWôËÜ)˜*˜³š05›šÉ–àŸã£â£T;øJ|%ðåþöêöjÈ;’»9w³q$ågÊÏ”Ÿ1â¸ánÃ݆»Fûíw¶ßË)—S.§õë®ë®ë.عmç¶ÛŒzî?ߨ÷Æ>hÝóÕ»_½ àûÔ÷)³âfãfU»¨«ú3öµûk7,ô¨£¥—‹wï—P›p á»pì± 0X8X8X9+9+9+äLr&9¡n¸n¸n¦Ë¦Ë¦Ë ¿(¿(¿<§<§<§ ÆZc­±BlLŒŠQðAõaí°†/ÐÒƒ¶…¶`GÈO8Ç.õá8a>a6þ%‚eϲ\ÿs}çú´­A«ñ—ï/ß_¾®׌kÔ5uM]Õ¥ºTÌÙæls6P+jE­€vR;©÷6·ÅmAi[W&V& =~>±åÄ=p/õ }/åØÚP®¨Ó/r̪¬,©fuQ]­Z«ÖªA©15fUq*NÅ™d’¹*ÇþBU âUºJP9*‡%e ó—Ž<yû<ö¹7’õÓŸŸž¼U‘U‘ÀùP2«ÛùÀ<ðŸàTpÊH~sƒ î©ÕÜâ·€ßYdÔ/jTKáùo‚Á`¿ê xàK=ùÃz+/'ÿ«û®|eo¯ì}ìÕ¼Áþ¶*óFnIEND®B`‚routino-3.2/web/www/routino/icons/marker-15-red.png 644 233 144 4111 13061246465 15426 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜþIDATXí—mLTgÇÏ}w .iuXce] ÕÕ]ëò:@»”Ó ZÄb´lÌ*Ú±mŠe7•JAÙhS ƨ­¥ãŒÖWën0¸ù`X³Pw le&2&ÄAÁ˜áÞûü÷óÜ;3ñ%›Ýó…9÷<çœß=Ïžg š±¹eböl×l×l—ðïðó¬ŽY³:Š~%«²*«}Ç)‹²( ˜ ³&’I&™û@´ÏšøzžÏëñúÑýÄìhžH¾Zª¥ZÑOþ…Ü!wÈ·Â.a—°KILOOÇ_Öß^{ým |¨|¨|°åØrl9†Ïã|=Ïçõx}Þïé<$þ&Ú_ü©8!Nˆž,>¡…Õ «V«oë9Ös¬‡Íñ?ð?ð? A‚„áðÀ ûá8_Ïóy=^?ºßâOŸÎG–çD¯è½ž¿ò9Ý9Ý9Ýʯ§§§1ˆ°± –Á2 ¨õj½Z¨+Õ•êJ@-QKÔ’?çëy>¯ÇëëÀQý-Ïéh‚Sp N"y¿¼_ÞßÞϬMÖ&k“R¢ƒ½ÃjX üJ»2ªŒÌ£hBZº–Ã4=£“u)ª¢Ì£d+Ù€Ò>å˜rìm¶~¾ÚÚd­³Ö)%¼?çá|dºkºkºûÛ_ò–Kƒ¥-q¸‡Ýà ×ñ«Ô2µ X3kàg°i3[mØIœŒðüPŒyêí¾v߈ºGÜ}î>ŒY,[>fK8Î'ïwÈ;z÷óÀ‘ª#UGªXM¸@@q*NÅ l„òÚîrw9t§u§á1æõx=ð¥ø¥Îaç0€ £ÀQ_' (ÎIyRÖ“GªZ•V…Õè“â#æKJOJOJGÓâ‡E‹ôD©¸…[ü¡ÆP#Œ¿5þä%ç%@±¥Øò8У­G[™sâÖÅ­‹ðýs¥¹€Ô±Æ>2ú=,zõ à<œƒ6—,;XvÐx3u0Tªàã¾ÝþívHX•°*À¶É¶éq ¥#¥#½ {šM0rcä°ïÙ÷|ÌÆl€:¨¥iÆÎ8ç ƒâ¼­ÏÖgë3$¤ð-ç6zjôøÈGÝ’ÝÖyÖy-3—™#_È”jJ€„@BÎÜ:s ÀD¸á¦?›þÌèo[e[e[¥ŸÛçÅð‡sÞo·‡ƒbP Š$IÛeY– ´•¶ÒV"šHhMh%"z/€ˆ(¾3¾“ˆHû\û<êŒ+¥R"¢Éç'Ÿ'"*½VzˆèÜõs׉ˆrÊrʈ(TñRÅKDôã9?ä‰L[L[( F’Ïãóø<4ÈùH,KÄ’éûüª;Y{²ödm„âÔeê2Pn*7#¿LEŠ.@¾9ß9Éàñàqúfè˜zcꈰ2¾k|¯¯êÙ/Þýâ]£ßßZ.÷^îÕ'ù;!SÈ2§ï“´ZZ-­®käß²ÔE©‹R©‹ÝÜÜô~–?ýÉô' ÙkÚk\*¸ êë÷õ€yÔ< *TD„m½m½^ÓÄ4¸yùæeápzÝòyËçiú %KÉRòÑ12š Í…DòUùª|ÕáÕ|›Õfµ©»y}ͺº„ \¼añ«Å¯@Þù¼óÓhýÞú½õK5R €±_;j¿c¿ÆWWߨz¹êe- n“¶IÛþµqÆ÷Q´-l5eš2M™ž<Á^o¯·×³|}ç~:3Oà»òïÊø¯,¿²<Ías"•Ð?Ø?'8¨Uý+úWó==qºùt3^ׯÐF±Qlœ*æ ó…ùËÅJÿЯÔÍÂfasA›à‚ƒkEû½«ËÕåê2æ©îVwóŽÔ.ºÑ €±ul]~>{“½iHÉëº7tH³|eùJÙ¡OòCé}é}»UG+¡*‘-k.åR®ü!9ÉIN"É'ù$ßÛô«µÍÒliVÝï¹{Ü=‘ÚUìŠ=r ˜Ä$€¼ðpi/j/lãôõéëÆëlúû¦½›öª»õè‘<*ºö¥ìLÙ™²“H´ŠVÑ*œ ÓUqÌŸ„ÿn”îHw¤;ÂÅ%{–ìY²‡ÈTmª6U»öéÚ͵æZs#µ«Ù5;‚pÁ€QŒbÔàV—ªKÕ¥†¯9¼æð–¯ß剦DS¢w*ük).z§…Θ­'!ƽí[âf´ë>ûDí&*‰J¢¤ kÃÚ°¡Å `pÅÄİõº&Í¢Y4Wü1FŠ­1|³éé¤Ã1Ú]ÿ,í*]J—Òe(w2e2e2X1¾b|Ÿús]‹g¤3Ò™Ck¹ÔÂÒ‹L g˜±€x’v[,-–%Ñíp;ÜAÄ8'µ_´_´_4޹Mn“ÛÂÿ’Ä_é~Nsžk<¡"¬Ý??I»y¥y¥y¥†v]k]k]kqj&Îô*…J¡² .º8ÓW ÿÒž¥Ýl©Qj”=+9peCeCeûSF(#”Rþ©oµOòI>ûBj§vj§ð±#¹cúͦÿÑbµ»/ÚÏûQØ"l¶TLÅT¬-ˆ Ä€@ tåZj 5 ’z¥^©W¸Nܳsÿ7KÔ?R!ÊýÑá÷ªD&2‘B§Ð)tÞûÙÌó4WÌÎ ÆÔ}æVÿj›©0@ŒGIEND®B`‚routino-3.2/web/www/routino/icons/limit-1.4.png 644 233 144 2360 13061246471 14571 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü¥IDATHÇÍ–]H”YÇŸ±ü‚¾4›HŒ" ¼)v¢‚"c¦b#Ë’b C²öÊö"ú`+‹­‹E%FÖ5L¤ìj/ÔØ6ÜÚ6#sÍÒ°Eûšy?Îo/fμoÛǵçfx¾þÿÿ™çœç=""²(ù+¶îíE”g•g¥ýAÔºeݰ;ì {«]c× Ô9uJÂYQ¢D(ÓL;nU¤ÊTÊþÖ¨7ê1Àβ³€7I|Ê3Ë3µÀ‹>W+EDŠ~ì±ì±™¹ØÆ€‘Âý컆wÖPPu¨«êªKÐL²uøÀ—¿ˆ"Š@ý­î©{.ÿ[{Ÿ½wþ€5`AŠ?©')ìòm¨>]}ZWÛßè¨5¨Q:ÒÛØÛØÛÏrŸå>Ëuý3/Ô õÔµAmpüO«ŸV?­†žüžÅ=‹t5n C@\óiþ„ž¤°¾Zh›n›þPßÓ`­·ÖÓHaoØöBzgzgz'´ílÛÙ¶Ó`6™Mfð„'<åS>åƒÕU««VW¯Ý×îkwòíÜxW¼‹ÃI>ÍŸÔ#° {A· ÃXñX1ð{jSoÔP™*Ce@ØÛaò·çoÏß­­­‘±ÅØblqìÚ`m°6Ç ŽƒŠ+6:qk¹Ä\âj±æOêÈ™Ÿ3ßî‡ñ—ã/Ý×^ET,¿å·üN¹““4h:Ñt‚OV¨$T*¥¯—¾^úGGG ðRá¥ÂK0|høÐð!×8§ù4BOšˆ}þáé1÷˜{DD‰ˆHžˆ Ɉ¤Ë\™+©¥ª‡ê¡ˆ§ÝÓîiwü¯¼¯¼¯¼",cËDŠïß-¾+òàæƒ›nŠŒ4Œ4Œ4ˆ<ºò¨ùQ³SÇmÍ—ä×z>9cèž[-V 1ëGë¨uÔÙáî–Ý-»[ õ|ëùÖóŽݶuÛÖmƒHF$#’áøƒÍÁæ`3”†JC¥!W+ǽq¯>ß=c_¿•tqŸûέŒ®‰®‰®Ø™Ø™Ø >ú`¢n¢n¢¬€° ö«ýj?¼_ù~åû•0õïTÿT?ð"(,sÊœ‚ÄWâ‹·Ò5ÇRsEÏ;`Rs æÜÕϬ8qâÀLo™dR[3ìJ»ò£9f˜ð…9ö•ÉoXÝV7€}Ò>‰A›ÙŒ¢Žs$®BU£já9Ï]Bâ×P,²j­Z °­AÀLâyòÏÚoå¬}]ÌÚ÷Øì|ÁþLÖ€EíIEND®B`‚routino-3.2/web/www/routino/icons/limit-4.7.png 644 233 144 2334 13061246471 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü‘IDATHÇÍ–oHÕWÇ6S©4¥ÍUJ1{!¡±êÍo]Tv/„Óv‰HÖ« VPqË(/šL(´ù¢[Ð ÿŒá\´­Ùl¤A*áurçn©¿ß9ç³÷wîï–+Ø;Ï›Ïsžçûýòœç9¿#@!ÄRç+ µ µ 5+n§ÖºþŒ­[ ¿‹ÛW%¤T¦Tþv²/g_È å„Ô€k›}Ÿœ/„‹ŸÌgüb©pé·Òo¥xûì)ÙS’ñqÜ>× ™·3oÇl8Ðy  £¹£™C0ö`ìÀ¤gÒ®möM¼É7xÉøâÔ;üB@Ú´;)þ0}¡°ª|UùgßÄþü vlß±àå‚— t*Èq`1‹µ˜b ³"I¶ÙwâM¾Á3ø†ÏðÇõXV¶¬Lصw×Þ̦xÂ@+Í?šoø¬ÛÀΰì){ @î“û˜Ý«{H!\Ûì›x“oð ¾á3üq=âí³=ï†?#!èGþ–aPªKéJ]‰VëU±*fÎÒ=º[wƒLµ•­@V˳ò,Z¦ÎÖÎÖbév»Î®KŸòY>Ë<ïM:J!„( BæXæØÔG0(%0 @¨sê¯)Âô/ºO÷%)‰#Æ‡Ö 3ɦªVÕ¼vŒŠ_‚?®Çvõœ œ,õ9È\™ ú íÓ>´}xx€ž=+zVÌU1´nhÝÐ:¸ôðÒÃK!´?´?´ZŸ¶>n} Ï¿Þ÷¼ÏÅÓ†Ïáwô8Â~®‡¶h[˜Ð_±×¶l‹þà@{µW{aMíšÚ5µàm÷¶{Ûç ë]Þ»¼w9”n*ÝTº 6G6G6G@4‰&Ñ÷?½Ÿu?Ë­¦üËá3üŽYÝYÝúŒmÛ´9) z§ÞéÖ7Ö7Ö7BþáüÃù‡¡jKÕ–ª-î¾¶ÂVd¿ì—ý®ÿʽ+÷®ÜƒšÓ5§kN'õâ×Nþd<¿£G@Î’œ%êwˆŒDF@þš{šËšËšË ïUÞ«¼WP}°ú`õA(¼Px¡ð ïÞ=¼{nåÆƒãÁñ ?)~Rüººº’„mUÔsBD ¿Ñ3§bªâm‚þ¾>Ø6²mdÛ”¬,YY²Òbi±´t¾è|ÑùFkFkFkܼ‹á‹á‹aðññIjý/U¹*Fu»nä{+öNaÎ\¶Èfä1yHrC×C×C×Á×àkð5¸þµz­^«&šh¿¿ßßÁ–`K°Å“=ò®¼ LËkòš™×ÿì±w¦òŸÄTÉ"Пèõz=Z ©§ê)¼Yýfõ›ÕõE}QèEz‘^‰ÀD¨£Ž:ˆ–FK£¥0]0]0]t] 2ˆFÙQ;Qˆ÷Nå[÷˜=h'`*˜UUªŠ×L8ž“L,¬øóžu‚cKvü¯{ì7¿%»e7€:®Žcñ-7¹‰&\r…D‚ÖÃzØØÀ2²ÉNÐF:‘ŸÀsð|snþyû¯œ·¯‹yû›Ÿ/ؤ«¿ƒ¿lnIEND®B`‚routino-3.2/web/www/routino/icons/marker-68-red.png 644 233 144 4211 13061246466 15440 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü>IDATXíW{LTg?÷1(AiSQfÖ\QAŒø"Y:@âh‘\âB¡’n·>\•BØŠ,I‹P³¬ZÂÎhLAh5XØhijX³Ú¬†6ÖyD±± ¯æÞ¹¿ýcæ»óhV³Ù=ÿÜ9ßyý¾ïüîùîùd…Ÿ>Ç<Ç<ÇÌ=÷/DE´G´G´çleQ廡µ´–Ö>³RK"‰$2Õ•ZæÏâY>–?´ŸŠ'ßA:HyS¨}Q¢Ø.¶‹í¦Qîwˆ;¤‰‰uÆ:c¸–ÿ0ÿaþC`÷“ÝOv? 2 2 2:³3Ïò±ü¬Þ‹ñÿ›P}ÙÇü?ÁOØ×²Š///•+Îõë;×§¼âq¸F ` “˜Ä$;ì°ªî·3Ïò±ü¡õ–}üb|¤Ïòƒü ý:Kq+ãVÆ-i³ÕcõX=°Â/J²’¬$C’+åJ¹×Éëäu€l ²!H÷Û™?‹gùX~pH}í|gâLœ‰H¬«ÅêÖ{,@_«¯Õ×JØûJ“Ò—Ôê9â9(v)BŠ0+wÊ€38À‹P™õNz'Åî±z¬€ÔêÎuçÊû^Ù+ÃÅÜôµú“ú“’Õgx>Ò<Ö<Ö<Þ¶ž9h«´UÚ*%Á6l³Ùl÷çqÉy<€4¤êVŽ*G×q¼N¯Pú_úËIW¥«ªê² Ûãíñ×Vi?Ð~ $0<*>q¿¸_Üß_Í %o5¾¥¼ãO0%™<=ƒ*¸‡ª‡ªà³èÏ¢à˪/«@òH_ÑPPßßÿþ>´|Ñòw§¾S3=3=€dò¦{ÓUç©Æ’Æ’ÆåõdCð‘âˆMŠMŠMBíhÎhÎhŽ(AÇö ] àÕݯ}+û ò»Èï`ñƒÅà‚å‚%¸V‹¦E|â†nC7¬>¿ú<lªßT`b44‡R¸ µ µ UÛ¼ÿÇ•Á¾Á¾Á>²ºùé‘é„?ø ´Wp…ˆ&ÜóÜóˆˆ\&—‰ˆèìkg_#"JÝ•º‹ˆ¨lyÙr"¢áòár"¢Ÿ Œo"šÐM興ž?&¢Ykµ‡ˆ9?w~NÄwúëùDpØv‡¬ ñÞÀÌò{ߤ~“ 7Ì‘öH;€)Æ=ö4V+ƒOújÂÕˆˆ‰ˆ࢛tÀ¸ÏßÛ¼iÁ¦P€±è±h ôNy^yžwJX.” å÷ }z¤ƒB%þMŠ&E“boaÆÊн{•-jçZ~´ü8ß{¾€ëξ;û‚ªƒß'î§ÇŸ€ÖâÖb@.¹¶ôÚÒÀùþmÂÔ`jÀvõ ­ákøš™n1·˜[¼ê\@áŸê•ZÌsÅ[›¸6®kc\ñî3÷˜†LC`Mœ’{×x×RŠ•b@º(JºâäÍh”-ŠQ pÕ5Øö¤æI  ›??&íWOò¤ð®ð®Q¯B3 ¢6€5“2)S3˜»^£×7Ì0à ` c ˆ+äòŠÀ«×°±acÃFe‹z—Çhb41ƒ3þ¯¥¹¡æºÃZO\˜úu¨®ëã®ír€»ÆJcewc¤)&ÈûÌûÌû,ÀÅ `0GDD(ù*'£ø(>jÏèøI¾9ôâ¡!Œ»ù¿ä®¹ÇÜà®Ô#õH=æNÇMÇMÇ«««ò¯U.^. —þœÆ¨æ§^8Àhz‰X‚w‚#ˆ»uÚ:mck³µÙÚ¸á†N†ÔØeì2vÆŽØ$6‰Mþ¿$‘·Ãêú×é•— °ÇÏÝ«ÿ‰»Y;²vdípלfN3§á¢Ï®¨àЏ"®hë±Ð2üXX]ŽþKywÓ…¡F¨±¯c€‹ªŠªŠª”3ɳɳɳҿÔV;‡à0ÆS+µR+ùÇŽ` «7‡þG çî©P=ëWÆ•qeåR.åzWòKø%ü€#Ž8êýZ7¥›ÒM ýB¿ÐÏÝð†uîÿ&1ê¯lʦlñ^¨ùh ¯ð ¯\7×Íu?ý•o}¹9¬3Ö°¼/mõ¿ Qš—RHQàIEND®B`‚routino-3.2/web/www/routino/icons/marker-70-grey.png 644 233 144 6166 13061246466 15640 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü +IDATXÃ…WkPTǶþºgÏƒÌ Ä ’ ÊE ðuAE+>B®G+>•Q¢äJ¹ÔÁh@ˆ¹QcÄGLxˆQ P”IŽB #‡Bƒ † Ã03{wßÌ`ʪT¾?]ýZýõêo¯µ6ÉÌÌÌÌÌ„0O4t™ðPx(<ä5™E™E™E|jöãìÇÙãfsoîͽíýD?Ñ/b§½Ò^i¯äGQ€ „"¡ÚÑŽv;±;ùQe¼2^O2„>¡OèûW&ÃdøïùY¾Y¾Y¾ÆÖœÄœÄœDÒ/Šb yq‚»å⥣“c1Ó‹,›e³lvËauXÖç"³«²«²«.v;úýŽþÚïÇæÍ›ñ?žg<ÏxžÁµˆU«"V‘Œ(y”n~‚˃K¹†k¸†m';Ȳ#ðŒ,P( ¬+´~aýÂúÅ ŸgkŸ­}¶VÚ¿ª}UûªvêœÓ2§eN Y§ÌPf(30†8€Pc cð^ÃkžÇóxcv»¿ÝëZê[ê[ê¹óFèСlÿÐê¡ÕC«·TªÕKTÒi‡´cåžÄ“xÒÃít)94~hüÐ8€zÔ£Þÿ¡R¨*ë/9l›Ã6c­~¹~¹~¹¸xÓ››ÞÜô¦pQgÑYtè1S0"æÁ<:Ð^ð‚€QŒb@BNÒI:!bƒ„`Ö˜5f \=wõÜÕsâö7Ü|pShTx(<ÿ©ãÅx1>z ¢èžß¨G“G“G Ÿ*Ÿ*Ÿú¿ÿ«««ž±V¿A¿A¿A\—”˜”˜”(4j÷h÷h÷`ŠØ 6ˆ ;ıCððàùcþ $‚Ddˆ ‘!_á+|°õl=[AJ–’¥d@÷›î7Ýo˜â¶¯ß¨ß¨ß(®sŸïæãæG²k²k²k^Œt49šMÕM«Æª±ò äÖäÖäVÒ¤+וëÊA¹…[¸¢!¢ÀÀÀPPPN8á ‡r ° |ˆñ!€åXŽå˜Kd‰, E´ˆÁb~Ãü†ù °óÚóÚóZeÑZ´-1)¢QЍµQå¡<ôðF§§ÓÓé ÄnŒÝ»«tºÝNÉ)9%¨;+:+:+)EJ‘Rä!y11ü6¿ÍoÓnM»5í ÑèF€]»v?oøyÃÏ€)ßNùvÊ·@@Q@Q@ÀÒXKƒFgÐtŒÅÆÅÆÅÆaÕÕÃW_= ÈýåþrÿÃ1H ƒ&{_ñ¾â}GçôÌé™ÓC ®‹‹Òéˆt¨8[q¶â,`-·–[Ë!^ˆâb#6bl¶z?õ~ê}ÀÚfm³¶y9y9y9€G´G´G40ºgtÏè`…r…r…X}cõÕ7&­˜67ln1Ô Ö Ö â¨5Ök]˜Œô‘ô‘ôvôâ’‹K..ánXÙ»ì]ö.çü4?ÍOsîˆwÄ;â9§ãtœN®ã— /^.ä¼ ¹ ¹ ùÉx~A~A~ç…› 7n~2Þt©éRÓ%Îxð>àÍù°cØ1ìàOÃêæãæGñÞÃ{$”–ÒRZ:y3%>Á'øÀ[x oBœ'ÄJI))%À´Þ´Þ´è2v»ŒÀæy›çmž°FÖÈž]=»zva„}öÁmÎôžé=Ó>>>zöõìëÙ‡§¡¤¯ÒWé«Îã<ΓP*ó“ùÉüøeËËËt‰ibš˜1#1‚# iHˆ&àú©ë§®Ÿ   -Ó2-···'¿r(¿Q~£üæÉ>J)¥ÀZ¬ÅZ@LÄ„ÉiîjeÖ»Ö»Ö»è¢zª§z~™ªŽ«Ž«Ž‹¹]¾]¾]¾ürs~s~s>€Y˜…Y°I£Ò¨4  -hÚ}Û}Û}ââb`Éô%Ó—LBd"ò£ò£ò£€ý¤ý¤ýä“yñ‚xA¼ a„T!UHœ¶™Þ6½mz0õšzM½ø@Õ¥êRu‰¹›° ›² „L!SÈ$F£ÑGÒ›ç™ç™çA-3È 2,nKwŠïß)üÓýÓýÓWt«`¬Œ‚Q0ëÖ¬î–ß-¿[þ„è݃wÞ=øäégü8ãÇ?ÂÎóxσúZûµökíl±+šä‰HD*TЩ_Oýzê×ïTÄ*b±_ô EEEÊ\½:zuTr«GãLp&8`ïÈëÈëÈB~ ù)ä§ß©j"…NbÍõ5××\KKKc¥ÇJ•uwêîÔÝbJbJbJÀ½ì^v/;”e Ë–-dc½{{÷öSŠSŠSÿÞâìvv;»÷;eóïÌ¿3ÿÀXkø^¯òUùª|ÿòï¾Ë}—û.û`6fc6¾"ä\ȹs$IsZsZs|æÐÌ¡™C ª5ª5ª5ùŽ|G¾PƒÔϼþÌëϼÌß2Ëü-€Žê¨ŽÑG¢DÂo…ß ¿[óÎæÍ;ñßÕÛ«·Wo'U{«½ÕÞã«yà«7КBSúb(- ´@ÖDOÐôDï^ÖÉ:Yç‡Z¡V¨ÀMÜÄMð°–­-[[¶¢$¢!¢!¢6m·¶[Ûý;^À\p¥â‡8@S¢)Ñ”‘m‘m‘mÀ´ñiãÓÆa±4Z-P_K¿–~-]Ô+ÆãŠq€˜‰™˜2²ˆ,"‹î¿\ä"Wðw•yRÔDÝ(&gÈræëº”.¥K÷WN„'úQUsUsU³¸{xÛð¶ámP“RRJJaüà÷»Ô)B„À#ŒŸËçò¹S1SÁî–RõñêãÕÇ¥}ß:ü©pVù‚òå %9!ÇCއ?Y‡,d!‹\B':Ñ)®t×£žèF7ºÅV¤"©¤rvÕìªÙU¹/«^Q½¢z¥$g8a8a8A0—-/[^¶ü‰vù;üþìî¨0™óݘ¨²85R#5BÙ`j05˜øŠú~èû¡O–ë©ñÔxjzÆ%ŽGIúû­Y­Y­Y7q7Aë²ò¹›è˜«-e^Ì‹yA{ïѽG÷ŽTGª#5ý}OoOoOíUíUíU²ÜšÍ5›k6ó$…¤(Y1+fÅàð€<>ÂGø@D"¶Ó€iÀ„’ÚðÚðÚph=û=û=û¶€-` Òߟ^ϸKŠg]aõEw î‹»~I”®®ë‰d¹¨E-j¥}d1YL¯xyâ—£®Ü¹Û¹Û¹›ýmÛÆ¶1ºlΉ9'æœ@µ›àdF{:É>µ@í2ð­K»å³¿œýåì/s_V%«’UÉ%9Ã~Ã~Ã~‚ùJæ•Ì+™Ò>WE¯mñiñiñÁgõMõMõMd»ºMݦn˜žé™þo·„­ÂVa«í¿‚¢‚¢‚¢è¯®óÖ»3ÔÓ¼døÄÄÄÄÄÄ@tu[¸‚+¸‚ìéŸÕ?«þ!HRÀ÷¢2H¤ úËG¿¬üeå/+}¾4ß7ß7ßçÞûüÞç÷>—–Ž:G£NYª|™|™|Yš?Ïçù<ÿÿ®A %”²ø¿âWö¼û\ŽŸæCð'øífOv)‹WòJ^ÓIËh-û&hü¥ñ—Æ_b³ä¹An ÷eI²$YÒ›ÁeÁeÁeq1¦NS§©“|Åžcϱçx¡Ën•‹àØñ ø<¥]W¸²‚¤ÿ"‰$‘$þ3˜×ð^ó÷×<¦{L÷˜Nï˺eݲîÞéì;ÆŽí~Ô¶¥mKÛ`‚ ‚\öÜ…¥íÏxü?6̪øeIEND®B`‚routino-3.2/web/www/routino/icons/limit-2.5.png 644 233 144 2537 13061246471 14601 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–mH”YÇ#™µŒ ¡¾„`lZl‘ƒÊØŠaÛ‚´‚Øöa‰^vv¡°…"Yb£†")‘–J e[ƒ„|) +]† Éd†±jÔÑ™ç>÷·f®3®Û÷î—yιçœÿÿyÎ=ÿ¹„BdÆ~X×Y×YÓ£¶µ&î·9mÎ Fí«,{-{ÿ©…ŒË—V5®j4Çâ¶Þ×ñ‰ùBÄë'âi¿ÈqGÊí”ÛGÌ>räÚ¾ŠÚ¿÷BêÔ;3j?ÔÐÖÔÖÄàë÷õ|p|p@ÜÖû:^çëz‰õÅ™ÿà Ëï.¿k‡”ä”d! »8»xý‘hÀ‹õ°§tO)À›¤7IÊ r H#M9€ Aôz›`ëýX¼Î×õt}§ñ£|¬)XS ”W”W¤Þˆ&Œýîµîµ/r¨£Ž40‚F@VÊJæAõª^,X në}¯óu=]_ãiü(±¸·ŠP®dW2ˆ<9.ÇÁ|eì2v1Æ¥MÚPæœùÉüÄÒÕK= •'åIåwò;”¬ „ˆð›,•¥ /üˆ°Ëâ²h‚ŠZ)„ë!Õ—ê .cÖôÆ[ó­š—äf9Cm Îr–³ æÔœšKð0À @…”0š™ÕõÁ+½ðc|bÄ®öÁáÓ‡OŸÌ¯±Df"3 pjdù°Vpé⥋—.ÂÈý‘û#÷£g˨0*Œ h­n­n­Ï~Ï~Ï~hp5”5”ÁôºéíÓÛQ ÆÔPÃÓø1>1bC?AóÇæ`Ö¨êÜücù8ø8iá´pZŠ6m(ÚÙû²÷eïƒ!cÈ2âüü5þ dåeåeåAùÓò§åO¡²©²©² ü£þ'þ' áóê‘Æ‹âk>V!Ò»Ó»7#DAaA¡¢V!,7bN™`Â6aâXý±úcõBt½ìzÙõRˆööv!†"C‘¡ˆXXƒ]ƒ]ƒ]BAgÐ)„p ·p QÖ[Ö[Ö+DVNÖ–¬-BЩjU­H±Ø5^ _óU+W­4GáíäÛI}èy«¾7w›»ã_¢[ÿ¶þm›—›—›UF•Qe€ñÚxm¼ŽÇõû‚}A¨vT;ªÐØÒØÒØö+ö+ö+p¯ã^ǽŽx¼¹LËL ?ÆG@zwz·º ¾|_>˜-²g7ž]vRÛRÛRÛà|áùÂó…0³cfÇÌ9CÎÞÙßÙßÙ¡ySó¦æMpÎvÎvί“ïÉ÷ä{àæðÍç7ŸÇýòýÅ×|–œ1éX|Æ<~Ï+Ï«¨ì-¿ [om½µõ¬¶®¶®¶BÃñ†ã Ç¡Ä[â-ñB¯Ç×ボS9§rNAFqFqF1œh?Ñ~¢Ìæ°9 `î4w2ϱÿ?cK§òž’!= BT $à8`²u²u²|™¾L_&Ì>œ}8ûÞûßûßûRJ)…pg¸3Ü SÖ)ë”ÔªJUŧœ cÔ]hèç¦2AÇtEëÌ"ݘg~©L, Ö©:Uꚺ¦®%ø/«nÕ ”ÈfÙœ caï¬wö³:– ü†+É•” ÌGäf¹Ôm¹R®$¢ÕGõ¥:T‹j~ÆTX…U˜Žus”£ (¿ò£øÛ´›v" ‡å0 cõqÙ\6ý¥)ÿû_ùÅÞ.¾ØûØ—yƒý0<\ù¨Ú¾©IEND®B`‚routino-3.2/web/www/routino/icons/limit-13.1.png 644 233 144 2701 13061246472 14651 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜvIDATHÇÍV]HTi~fÆÉÑjü.*‘ŒÀ›(/*$ec#˵¤\-Yˆ­ˆÜHˆw"¤?*SVXÃIܬÍ`k¢¢ñg1šò'Ö03çdŽ3ç|ß³3gÎlËÞ÷Ý Ïûó@nß½}wÂÕpÃËòÈò#Ëu½‡äižæ"RUT…$µ=ÚΓÒ+½$IM¤õ¼^¯÷ë|:¿®§ë‡çÁ¿ïÖ½™ÊÎÐÎPt ÇbS(.GÊêˆ:B=#Å„c¤:¢«Ã¤è}¢Æ r–³$gÂõ¤¨ ‰|µN­#åñ0?Yj+µ‘èG¯R€ì2áUÂ+%Ž|½ùõfR{C’,–¿©3ê ?G` kH>à>ˆäÏñÉT¦2•ÿ9Ú°6¬ “Ò£õkýQ¾b*¾»¾»$™ $(J\x°ì†È—ºüˆ¬>Z}””÷IR¬Õ ½?{/y/Q§Û‡í†Ð uÐ:h%ÝMî&wÙ3Ô3Ô3dä夜”“¤ì”²Óˆ{/z;¼”#i¯­¯­zT¬•¶Ø®_íåG`ôæ•ÖúÖú(íwmé­]­]œ·(– ËéÉñäxrÈé“Ó'§O’ööödÙ²²eeËÈ¥r©\*ɧoŸ¾}ú6fÀ>Ù'ûȶ%mKÚ–Ök«µ•l-l~ßüžóºžVÓ²·e¯>XÏá8˜íÇìÇr6à@þ`þ À`ºŠyK’% püép rŸÜ'÷Ú:m¶¨³ÕÙêl@FQFQF0Ô8Ô8ÔÓ‚iÁ4™ÈD& ÊE¹(L~“ßä—××é2Ý4ÝD<<¦«ø´iý¦õ`¯´Wæl™²8e±$?¾ûøŽÔò£kO’te»²]Ùd£­ÑÖh3¾ÄÌÆ™3É÷vÜÛq̨ȨȨ {’{’{’cv  ƒvåºr]¹dãW*¯T6£};‘;‘Kêó˜!E‡è0 j‰Z` =²] ]]R[R[R[€îÝ+ºWyUyUyU@{a{a{!à¸á¸á¸ôžé=Ó{ð7øü €Ö¥ui]ˆ9 ûe?º`ÄÓ¡†ŠCÅ :E§iÐ ³âTœ½Ï‡÷Þ° XiÚ_Ù{í½À\Ò\Ò\P8Z8Z8 ¤Ô¤Ô¤Ôö{‰½XÓ½¦{M7PT_T_T8N§Ó ̺gݳnc°Ä‹‰îD7`-´dY²ŒxC%¾ñ&z@)P zŸÇnemu-Éßõ­gÅYÒŸç/÷—SzÏÏŒ+ M…¦BSä‡[n}¸EŠ…b¡XHÊ€ È9uhêÐÔ!R¨BªÑç_å/ðPÎÇ }Šú¥XË?ª×W¯ÝJF}lãüj©¥Ôb8?ªOõ‘¬ÕFµQÃùYÇZÖ’ò®¼#ïlf3›IÎñ3?“ò‘#$ÿŽ:ÿAq!¦k»´]$úÂù_:ÿ×û_ùÕ¾.¾Ú÷Ø×ù‚ý4ÄÝ)ÙxIEND®B`‚routino-3.2/web/www/routino/icons/limit-16.7.png 644 233 144 2716 13061246472 14670 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷܃IDATHÇÍ–ïOSWÇŸ–"TXW ?!QqB\f¢&D!¡Âœ:3•™ÎÄIH\|5Çb“-.Y6ö7e‹®sS 4L „8'HfTöB R1š¾€b a{ï=Ÿ½ho[ç?àysó=Ïó|¿ß{Ï9Ï=""âŒ>¬K­K­Ž¶ˆÏ§¾›úîò ܤƒe§eçý:xý‡×ÈðdxŒ¡86ãf~b½Hœ?QÏœ§Ä'R¼)^‹+Š¿„Ê·*ßJÍŠàïzÀ~Ñ~qVƒêËÕ—þ8ûÇY>Ÿ¿à™ë™ âØŒ›ùf½É—È/_þO_’¯%_³<‚”) D ÷Üw–Š$Œ,ƒ÷ß{ÿ=€'IO’”ô tå‚1Çd6ãÑ|³Þä3ùM=S?âG ³$³DÊ?,ÿÐþK¤`è~ãð¦^ø"ð5_“ZP è{õ½<Õ£z°`86ãf¾Yoò™ü¦ž©ñ#/®mCÁ]á]ᘡ^£$œNuXÒ†0#JíQ;ÔÐîiw´;`†a¼4ÔM5¯æQº5”Ê!¬»Ãž°´©¿ú³¢®¢Î4ØP_Ê ˆÈªF°?°?ÚÀWæ+}€mªY›Ò¦˜‹)åàÄ * *àà—¸ä æC„½`u™ZãÛýýö =´EŒ­jŒ~©¦[PóyÍç ®kLšž“=çzΡv<¼òðJœ~Ä9âqBC{C{C;ôïéßÓ¿çå/6V0V0V'þ>Ñs¢<ûãçæo›¿½Õ~ofs{s;ÏmÛ¶Á[í­öVÇ -…–B lÛ:¶u ŠE¢ŒNNNÇón¶Ül¹ÙŠ7o(†M“›oz rJD„ç]ÝÉ¿“¯öÃUÏUhÿFüŽ/_(/ø÷ù÷JŽzÖÞÖ^ÈnÉnÎn†ŽåË;–C—Þ¥wé°¨vQí¢Zp;Ü·ލ#ꈂ٪٪٪¸1ݦÛt[Ÿì<Ùq²>ùjÿ–ý[øÐÓ³OÏ;¾q|£¼¯e¼f ÂäÓɧ —ÄŽ=®ã®ã®ãÐv¿í~Û}è<ßy¾ó<¬,]Yº²NŸ?=Kú–ô-éƒÎÎΗ—t¢q¢q¢V¬X=C ¶¶ÆÛŒÚ1±nbÊHÉH1­¢ŒËÆeË ˆ¶SÛ)" DD$SÌÃñ;¿ñ›ˆò+¿ò‹¤W¤W¤Wˆ¤¹ÓÜin‘¹räŠdŸÊ>•}JdüØø±ñc"S£S£S£V\Xqa…H–'ëLÖ‘|WAeA¥ˆ*‹èYšt¿î‘$£Ýh· ZÅ, –þs[¤ûz÷uÉá“(_È‘ì0†ÈœoÎ7ç)²Ù‹ì"yó6æmY˜º0uaªÈúÀúÀú€Èö¦íMÛ›DJ»J»J»DéËéËéË)»üÍò7c~CŽêet÷w÷‹HR°,XöÏíÄSY_S\5O¥ñ½ñ=ÌÏTÍT¡æÏûæ} {Ç«{u/LæOæOæƒá1<†Ô€PØØØ ÔQGLo˜^;½æ—Î΢ÀpnàFTϨ9ZsÔìgM·Äì`÷ÛýA ëÃzL!ãツ>榒JPi*M¥%lÞÅj±Z ”PBIÂæzÎ 3 ¸N÷é¾úXTÏÔ¡%t~mwÒî$“%ÜK–6¬ õú#ýQ¼ósP·T·êÚh£ ˜c–YPãjDz4?S¯Õk S¯»tWLïÿÿÕýW¾²·‹Wö>öjÞ`ÿb@®N˰IEND®B`‚routino-3.2/web/www/routino/icons/limit-1.2.png 644 233 144 2450 13061246471 14567 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÝIDATHÇÍ–_h“WÆŸD³¤Ú:-Ú'…a0 ΋MG‹ ŠâŸÑê&u Ûì@;æ› u¸]LìF­Šb–uÐÅ®[UpRj˺1¡2¶RëЪµU±ÁÐ4ù¾óÛErúE7¶]ö½ Ïû¾çyžœÃy¿#$ÍÍþ ü‹ü‹üs2Øÿ¾—­ ­*ý&ƒ;à{Ó÷æïûàÅÆæ5Ïkvÿô°­ÛþÜõ’ÇŸ«góš+/l ¶ù*²¸6—m. -Èà/z ¯=¯ýivtìè8÷õ¹¯Ù÷úîõ<®x\¶uÛo×[¾\~Õ?§/Aà|à¼ï_¾ Aq¸8\òa¦a¨Ö¯]¿àÎŒ;3ŒœQ Ÿ|Sĉcc,Ûz¶ß®·|–ßêYýŒÁüòùål|{ãÛy§3 þl=/íyÉê¥ÚC"ÒñtÀ©qjH‚é1=øð‡mÝöÛõ–Ïò[=«Ÿñ£gÏöp%T‡ªCS†~fܹà\pÛÝvRn¹»Ó݉1Í>³/ò‡to¸î¤o9!'„q'Ò[Ò[H3âŒY~S¬Zƒ‡+sŽR’^þ òîåÝ‹ÏÄL ¦¦ø×€»ÓÝI¹á†Ü˜vó­ù6ÇÐ#ŒxÐ$MÒ$zê©Ïé;H;í`&·œ·HLñ'ãƒq˜ÒÏúÉ;Þ ìÿ`ÿÔÿ]bÀ\1Cfc+=M=M=Mp³ðfáÍœêu{Ý^DZ@, GŽ4ØO±ÎX§çß|Ÿ:›: ¤­žÕÏøÉëÿZŸ´>~0ïrÔyÍy¤ej+j+j+‚@G #Э«[W·®æoqÕ¹ê\u 22*K+K+K¡¸ª¸ª¸ ¢Ë£K¢K¦Ú“n_VÏêgýø¥9Ýsº_}]*_Y¾RRB’|§µËßåïRA‚’îë¾îK Ž-8¶à˜dÖ™ufþ·‡nÝ’vŸÚ}j÷)éòõË×/_—fÌ.˜] E߈®Š®šjòYVÏê[?0¯`^ûŒ ç^{3jFÁ ;a'ìíHxyxyx9œÜ{rïɽ^>Õ’jIµx¸oYß²¾eP¶´liÙRØžÞžÞžScjL _ò%Pgõ¬~Æ_rtôý!¥7¤7H2’¤ù’n膤€fj¦·#&fb&&ù"¾ˆ/âåGÇGÇGÇ¥þ–þ–þ)\.—K[ ·n-”ŽÖ­;Z'¹gÜf·Y’ô±>–Tkõ²úY?~)^¯ˆþ&]éºÒ%É/I¼'™kæš&õŠJTâ˜Õ4«iV“”·-o[Þ6É”˜S"Õ\ª¹TsIº8pqà․b«XŠÔFj#µÒÂÎ… ;¥Î§cc’¤„štû­^Vßúù¯[Éy¢D½[9¾x|ñøbHHHNp‚ðhÓ£M6A¢(Q”(‚]ºtÁpd82»'ï6Þm„‰O'ÎLœÁ€{È=œý×[™3ÇtgæØ;î;Ss éÝÕÿÏõ?÷ÆÓûÇ9ö/“?åt;Ýî'î'¤˜Ï V`øœƒRL2™3X«©¢ Ìæ;ó˜_ÍócÚœ§€ N•S•ß®žQ=ÃîÔ3“Ú~+§íëbھǦç ö/º)ï8xÿIEND®B`‚routino-3.2/web/www/routino/icons/marker-87-red.png 644 233 144 4210 13061246467 15441 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü=IDATXí—mL”WÇÏó2 H•˜ˆ:h »êà{£€ Øtj£Iq©` %Ún6‹oX[‰ì©]šbh©h 3°6Z6¬•’Ô°V]ƒ…™‰°©8œGfæyùïæ>ó²®f³{¾Ìœ{î=çwïýß{gˆ¦íWfü†™Ö™Ö™VîI !vFÇŒŽ¹kDY”E¹ÿ4¥Q¥Óaµ†DId>î«5¬?Ïò±üáõø á<¡|{híá-áñyËıCì°Œq{¹½Ü^ DçŠsŹpyë½­÷¶Þ¶ oÞ6 äeäeäe}gýÙx–ågõžÏCüúpɧü?ÁO8ÒØ -,^X¼°XÞßÔÛÔÛԫƸ¹¹ @€“˜Ä$pšˆ³þl<ËÇò‡×[òéóùÈð?Âð#Ž+,AFOFOF´Öæ·ùm~Ø05EMQS Ér…\ÈérºœÈ&Ù$›Bü@œõgãY>–_«oxICã,œ…³‰GÅ£âÑ–ØcñcãÇ’I{_=¡ž€[jñöT‡ßæ·ðÉ_È_ÞÁ;ü„Ÿ@>$à““åd@uH+¤€Ô2ež2êûÊje5Ü,¿±ÆXn,—L¬>ãa|¤»¯»¯»ÿêJÖÁPe¨2T©‰ö_ìÃöa<äq˵þb1À;,¡Må–z °‹ÂS˜ú÷þr­ºSÝ©¹nû/ö³ö³xl¨2|bøDMd<ŸX*–Š¥}GYàTÑ©¢SEê{Éâô†TðÞ½y÷&4Õü\½8 ¾Y¾Y ÇÈ1páó Ÿ@kzk:Xò-ù¼mº6´Þn½ H–Á•ƒ+µìžSE Ñ Ñê{Úʆñ‘êŒKŽKŽKFÍXîXîX.à>îCB›³õ‰õ ÐNÚ ³¿›ý0}€qØ8 £×F¯Àëkhœós~ˆ1Ƹí íwÚïh ÒXîö‡mãa| ôØ–ã[Žo9œ™lóåûò8YÓ+‹_Y i›Ò6…nâÎ;¡@?wütùÑåP¿àLÁÈü1óÇ`~Ù&WÉUÁúŒ‡ñ@љןן×”œí‹óÅ…8Ót¦ HOz0u™º élÒYXsrÍI{kì-<þÞûõ^˜[;·†²‡²L þÉÞ>X?oEÞŠ¼Ú½Ýɾ\ééé%›—Ÿ›#AøƒÐ'ôhg`.C7†n‘›ÜDD  DDOœOœDD¶ë¶ëDD®W=Ã>|óÃ7‰ˆÞ>üöa"ò%~“ø  *%J ÿ¥Ø(6RŒ§Ãép:ÈÆøˆ7ñ&ÞäXâš3{š·7o‘@Ôxíx-ˆ’(ðÖ'Õ'=kÅ–—,/€üÊüÊÐöN¥S€èŠè ’½Ü^ŒÊí’ ÁzWë®Ö]­ÓVò÷\*—Ê¥ú’°JX%¬*¯f§,a±á°á°¼Äþ;G¦#SKàV7Z -ðî²w—PYèÞÉ{'@¿J¿ µj}Ýõº 2ê3êxͯ)}J€éCëõÀ£x ¹<¹<¹\Ñaž0O˜÷ÙcŠÍ‰Í‰Í!¯‰×ÄkæíÂÏË:˜uPÞÇÊ)eç;Ïà «î–îõSè!Z[µ¶ ÆzÆz@:(€YsgÍà>öý±ïv3+Ÿù_ö¿œnñâÅ7¸KØ%ìúGþ´íŒÐÑÂ]ª.U—êhfÊ*ö—î/U7²„Ò‡êP¡-o´¼ÀÝu¥ë ø| ¡+9uzê4ï¹æsÍàXïXÈEazñ´N´>n}Œ×´'´š¯æ«§r¹ùÜ|nþo›"…›Ú“ºƒ+ä ³93gá,L+Ê­Ý–,ÁªiwŸ’¤„jÕ«Ž«ã€öBik* nTz”ž ”FÌ#æ3••%•j+Y)T •eF ÍD&2‰† k&eR¦XI²…Hp £Âèþ/µ§µÑ°Û°[ÒÛ?°ÇÚcCµë¿ë¿ Ø…]!€\ÀViPÔ|Ù+{áe þ^Ð]Ð-ïÓ^ IqRœ´‰ß¿;~7o休kÐ1ÌYÏ|aH†¸K‰$ ÒëŠuÅÖ#šv3™ÆÌPí*eJ¼°Â +€qŒc<äT/•—ÊKƒë[¿º~uýju£ö–ëuz~d*ðk)*|§¹®ÈKŽ‹p¿ ÷ QÓÚµ·µ[VQV¢]½¤—ôA åò@yÔâ0X£¢¢Ô­š&cùX>vûŸ#¤ØÁ7“žß Ô‡hw·#{+gæÌœ9T»ÖnkwP»R·Ô-u•û4þiüÓx É•äJrɿѴØ&´ mYǤ^$àlz;°Aí:gˆvë u†:Io7ÛÍv3/¼ðÂÅHË.•]*»¼vÄF±Qlü%‰¾Q7ÐN1/Œ46`{@»ÿ“v³6gmÎÚÔ®uuuÎMÇUm'¸B®+Ì./ÃGÔåè¿´iwƒP-T ÕŽt\XUXUX¥žHñ¥øR|Òmm«‚Sp–-¤j¡ \;‚=¢ÞLú-R»GÂý¬A®„+áJÚD›h“²œ_À/àqÄÑß¾Mð$xçœ7VœLâî¸]£ŸB~g~'Às½ÏõÚ7ÓØ©;ý™ë¥4¦ž“WÒ ïiïiWm ·Ã¦²Me9EIü§!ðõZðAß}_ÿú8ÛáÞw÷¾ø©ö§ZHc§îô;ë¾L~µ?¡/Aö7Ù߸î€ww/¬}aí‹H6ÜzüëýëîzîzŒ€\rM-!‚ÿÉÀN=Õï¬wø~GÏÑOúÖÖHðæÛo¾í;š\póo°«xW±£? ìg?¹`E¬@âÄ;ÄÀ ™!\¸ ºÓï¬wø~GÏÑOúÑã{ûç:"x >oè²]ÏŽgƒÙkMYS8ãt˜ó²yìr»Ü.'ÿb’ÉydÌo­&«‰¸5Ïç‚ù0ÉH ü7¥?¿•I*éß¾"Y0V7V‰[4˜³ÖŒ5à OF %”€1#f$#&L8¯a k€Jj¨0õ¦žÖ&ùù}èrè2€/â‹D²MúI=©î‹l ¶ù'€ýšÃ;ô—¡Þ¡^ÌíŠÛ¯Þ~õ){ŒÇ‚cA\:¸tpi:o¶Û‡Ó8t=t=tþšÕíŒbî<?=~z¾û5ósses¥³µÝݺ I«þ®#ÕEÕE’«N’\gо¼ðåÍÕ-­s׹庲óJë•V͇uÀ:`ì»Á–öÚwhß¡tÝÝìnv7Káêpu¸ZÚ<¾y|ó¸tä=ƒ=ƒrÕSÿ þæ~þcRÏUP·§nħI?n¹ó>Éû¤|µšknÔÜX I®£ºïÉ÷äË[ø»B¡_¢•V2ŒµmiÛÒ¶EŠåÄrb9ÒâîÅÝ‹»õTôôôHÞKÞKÞKÒHíÈú‘õÒ/îä{ò=òöõÑW¹ŽJþý?JæÒB³Ð”¯v«ÞÓåéâ){ö~ÉTI’ÂMîMU›ª¤Ò_•®(]!e·g·g·K'N œN®;¹îä:©Ö®µkméZõ†k Òø™ñ3ãg2žì^k¯µWʽš{5÷j:Ÿ7™çÍóJ³fü3~…%ïëÞ×%]ôx xÅ-c÷Ù}®’Õh5JZ I*tL«i1-’}Î>gŸ“ÜÅîbw±T1W1W1' Ÿ>?|^š N'ƒÒèŽÑ£;¤ØîØîØniYDzŽeÒýG÷Ý$MýfjõÔjiâ×ùùRÉ·¥M¥M*”¢oEß’\¿4ÃfØu#uø¿o…SÓ§¦!±À¼—:•1ÿq—¿ Žõë9ÖóôáïíéíéíÀÁÀÁÀÁt¾l¶l¶l¦«¦«¦«`ÛÊm+·­„EÛm]´vÍ}|äã#ÄRÓä=8Å)€–¤ŸÌ·ò³àg@¿óVÚ_Ø_ÀÃò‡nÀÄÖÄVÅV}ôÑv§ÝiwÂìòÙå³Ëa:0˜€ñŸñA¸+ÜîSi*M%˜F³Ál€ðÍðTx cÿ;þRü% ‘ÒK[‚-Àÿ’~RÆJ:ÀwÏw/’¡D(1ÿÇÀ~×~7cŽÍ¥>9μŠ%  ˜áñ©×ÂNv‚1y&À,4 ™1[Sü-¡‰Ð€/ì G²¸óØ˘üÖFÏFOzòSd…¬°'q7q÷éÉÏ>çs` KXØ$H€™0·Ì- šêÿÖαsˆ›ï­¨uv&~6fmÌæžœüÏî·ò™½]<³÷±góû’ÛŸPùmC@IEND®B`‚routino-3.2/web/www/routino/icons/limit-3.1.png 644 233 144 2422 13061246471 14567 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÇIDATHÇÍ–oH”YÆïŒé(þI%%*‰’`¿DšË.È “$E1‰˜ÊFP,[\6vb‰•­%L˜²l·U2É–¥Ìek¡I’U3„QIgÜqfÞ?÷·æ½ó¾mìGï—áœ{Îóex Ò1Ÿ›Ï±W‚ `™%–l·Ymž2O!e«Ôƒh`æ›ù@Xá×gÖg*m{W)„ýYsYs‘uhã±ñX wß“Æ$QY`Á!ä2—¹ RH!ï-cÒ˜4&AöÉÙãØˆ˜~ÓO4…ϸ1n@ŠßÒc ëøNž?y’õa–!´ˆf׎Û3V5Vm]m]m]0<1<1Ô>ÔS…SÙSÙv¸|¢ h©s-Kñ[z,aÃ_B÷r÷2ÈÏd³•Ÿ87qzâ4^*¼Tx 67lnØ ›ä&¹I³égÓϦGäˆÞâÞâÞbHïOïOï‡îÚîÚîZljzã3ñâVV³âWzÜBä æ –*Dµ¯Ú'„øX!\ÖM{Œ9cÉX¢UkÕZ5!×®=\+ÄÆÀÆÀÆ€‰‰‰"µÌ#æóˆ®°+ì Qt­èZÑ5!¤Oú¤ÏŽyii“4\)~¥ r rÍ—°\‹VÛÿ [d‹ýWVWVWV¡îaÝú‡PÒTÒTÒÃùÃùÃùŽH$‰„m×TÖTÖTB %Ðpà5ú.}—sÌXü–yƒyƒ²æ*æ*Àh}·ˆïüzgàΔ/?^~ÜöïvïvïvÃŽ7:`ùÊò•å+í‹öEûì8_Ž/Ç—º@] Îy•ºG÷8™’üJÏû5NÕØžÏ„_…_·ÝÛîm‡\®?×M›7=†à¶à¶à6¨­­…Pe¨2TiÓ¸}àöÛpëú­ë·®;„K'Š?\cïw¥ê’?õGú#»¦õOô2½ B÷B÷B÷ÀÌ6³Íl1“1X<³xfñ ˜º©›º- ¼#¼#¼➸ˆ zÞãàûï®ṯÕñ•ñ•À>ÖÍF3Qù•ì–ÝŽîóIŸô¥”R긑1b8W\‹%â˜yìÏ1ÇäW“Xkò¿4^ß!#„&“oä$?ÑI'°J”(È  Ê 0Ã4ŽñÁª¨Bò­1kÌ¢%G/Ž/Ë'ÿšýV®Ù×Åš}­Íì?›seZ/…IEND®B`‚routino-3.2/web/www/routino/icons/marker-42-red.png 644 233 144 4177 13061246466 15443 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü4IDATXíWmL”W>ï0..ë¨]Ä¡µâÒU D·¸¦ è ÆIÄDK+´Y“*HǦÑh\%RVÙ.Ñ* ã ®­‰”5XlYYiÖ”6*ÌDÑ>T‡yß¹Ïþ`î;ïL¶šÍîù3sîùzæœçž›!š’_P„ˆ+cݱîX·ð,tÓÓÓš»LÖdMÖnž¢ Ê  `Ê̪H&™d®‘:«âþ<žçãù#ë‰+#ññ•Q•‰®Hû/ß[åV¹ÕõXØ%ìvé@Ì#æó.åßοØtÓýM÷Y³6f…unçþ<žçãùy½ã!qE¤þúqqTG½¼CsKæ–Ì-Ñ>¬»^w½î:›æö û†H acÃ/¼ðº²sÏóñü‘õ^?þb|d™.ö‹ýb¿÷¯1t¥ÞPlŠM±éw,–¶a)–Ñlñ‚xˆhìÔØ)"¢ ¦ &""{Š=…ˆÈ´Ô´”ˆÈ_ï¯7nÜs¹çˆˆ¶¿ý{ãyâ`Tåò "jˆX?±J³Ò¬4ëWžïWV¸¬fYͲô>&š'šü…y™ [9Ý7Û6Û`ÝèºQð[ýVcG]³\³ŒM f³ ðcàG¨^U½ ¦×N¯à/›_6ÀÍÐÕKg°ÀxtÖŒ¬Y3ÐËñ‘hí¢=0:¨:]vªøT±q·îܺŠ ü2ÀÚ#kΛ3o\é¼Ò ï>¼ é]é]\˜\@mPT`o²7í¬Ö¥u…ë]­¾Z}µZ· éBº…!aHúChhžƒ_|ëà[ÁùÞ‚‡­[išô|æ™7h«7m("¢Ø¤Ì¤L"Âdçd'‘rL9FD$Îg fÁLDô~àý‘iØ4LDÔmï¶Q D.‘‰(ïYê³T"©€½Ê^¥É ò›ü&šVö¤ìJÙ¶<4ê“â€8 œŽ¡x[¼-ÞF$wÈr‡³__ø­™ÖLM¿AkdðÃÍûؽ±{ÆŽ¶Ìn™ ÉÀ$Ä:c ®×ðÅtÄtx*–Š¥@ðs""0àüÀù äFùæòÍÁq^_Ú&m“¶Ý*˜ÒMüÖs™û™’®,Tzëy€c¿cc[¥ïþOýŸ‚þþ|Îg xöxöÀäÑÉ£p6élà _@ü†y€V|º÷t/œûáÜ?3ZP€uúZ)¼-¼ý%AIPúŸOé–¸ÈI mQ£'!Jý:R·Ä)éJº’î9kàî~Ç~wÔ5! (ø(ø(ø(¼vzЃÀmê1õ˜zX¾ÎÉx1^Œ÷@?‹ÂK/>j¢¸›ÿ2îªíj»ÚfîDâDâD"°hdÑÈ¢íW:›¥f©ùÏË9ÕBÔ‹øsz‰„x‚Ÿânµ¥ÚR­&xœ§Ç©_ªŽÔqÑqÑq1¼väZ¹V®í ý%1ý=ªn蜦½ `´ð€wCܽðSÜÍÉËÉËÉ s׽ܽܽ Sv¦OB( …ÂÕ{#ˈO¢ê ô_Ê˸»Rª”*¥J︰¢°¢°‚ý)m2m2mRý—>êAiPtÌ¥&j¢& ­ÉU/–þG‰æî¡H=ç®°EØ"lh ­¡5Á_‹Ib’˜$@û:yͯõ´~Ä|¼¶GVbxÆ{ÆÇ Ýå¶YeVùCèEèa3ÝÜhnD™»Ìíævàgª©GÎúé·¡JWÔ”õu¸&\C¬x+‰òã‰óÄiƒGV:–RD$ýHð'øƒã±ºÂ]áo.mÖbk1ob ýUCïyÏ{N'tPíêzàèµ6Zyã§Ëì2!¦õ5VwŠNX_µÔZ ÆwF¹QŽºPtaÛ…mP»¹vsíf8á9á9á‘Ù#³GfÛºVµUm92ø´øiñÓb¸•rkú­éöÇ©Áðóðs ¤õ¢úQ?îHÞ¾¹"²Ü»Ü+Â""®%"î‡î‡ |H$‹«¬­ìIÙ‘7*nTˆ´®k]׺Nd´e´e´EbÍ•âJq¥ˆC9"¹V®•k‰TþZY_Yo‡ñ%Ox"!ñk½ˆ~ÌL½9õ¦:þ ˜>>jWF®¯aÒÞI{'í…üìüìül8Sz¦ôL©gž2O™§lìõy}^¤–¥–¥–Á–Ì-™[2ñë™ÆL§RD_ûHš’4Åê€Á¾Á>°~Š{îTÞ©¼S EÙEÙEÙà;ï;ï;ÉÇ“'‡æC͇šÙôk×4®ä×ɯ“_CaIaIa ,8ºà肣г£gGÏÇáˆéEôµ·ˆuÕºêê1ÖëEä_™¡“êoó?ò?™gÌ3æ";=;=;="iíiíií"ýûû÷÷ï±2­L+SDV‡Õa‘Œû÷3î‹´]k»ÖvM¤·¶·¶·Väqãã†Ç öÒs[ëEõµŸÈfûË §ßœ~*R‹Š¢ô¡ó|çÉΓ°°naÝÂ:HÌIÌIÌòúòúòz,,,€%%KJ–”@EE…_ƒ¯Á×yMyMyMŽ¥ÜššÅ‡hÞŠ´¾öóé©$zJZŒ³ÆY;㡬вÐ2p¸Ü ºU·êuLSÇ`èúÐõ¡ë`š…f!¨Mj“Úïæ¾›ûn. ww w3À Ó6†!rK|z*?­cÁ®@WÀ®cªÊxi¼ä­ªWwÕ]ÇÞ¨Q5ªXÍjV;öp0z% 1Ä0J€Äj^ØÚjmý¨Ž]Æg똣òëJlèÊlv˜À³Íl#¬þT¯Ô+ÐB 01¢úTŸêzyÁ ‡Ñ9ËYÓL¯é% æ3ó™“ÿ³•ÌÞ•cöu1fßccóû”.‰ðÂÁIEND®B`‚routino-3.2/web/www/routino/icons/marker-63-grey.png 644 233 144 6307 13061246466 15637 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü |IDATXÃ…—kP×¶Çÿ»»çÁ ÁååÆAAB# ‘ƒ%^‚ñLNH)ñuåœXškÄÂðª$Æ\#ÆWD!1>8Šá¸>‰ä)# pðÈf¦»÷ýÀ TY•Êú²kw¯^ë·×^½öÚ$#####*ŒËÐøÀ„s]\×E+2NfœÌ8I½²û³û³ûÿ6‡ºRWêº{ïÍ{óÞÁk-¥–RK)ýùÈG>IÃ,ÌÂ,íhG;€µX‹µô[Yœ,NGÒ¸'ÜîÉý|2HÉàöc™ž™ž™žW[r’r’r’ˆ‘÷ãýx?²|œC¬µs©˜ ÀP„"”)³Ål1[¬µŽXG¬#ó²õÙúl}a·Õh5Z•wÌAæ sPð)÷+÷+÷ãJpTpTpI ‘„HB$À<·ynóÜÇÜñÞ¡ïøÞao¾ݟÿƒÇÁÇÙ#F]¨ uɲ†¬ñÛÏú±~¬ß¯#§GNœöu›Z9µrj¥°5ª=ª=ª±444‘²4Yš, fìÀì€f˜a°«±ÀtLÇt˜->‹V4Õ4Õ4ÕPÛµY×f]›%n}ý"úEtÂ^…ŸÂOá·P.¬Ök–î§)4…¦t%0adçØÎ±cjPƒŸ×¸R®”+­9kµŽZG}c4ïkÞ׼χêRu©ºT®P5¬V Cƒi˜†ià©?õ§þàðñ€3œá ÀLfb&f¤ƒtðxŽçxnÈeÈeÈ]8táŸØYÝYÝYÍÝ–:I¤N”óq|·8‹±‹{þqªsªsª$^/‰×77Ìåærs¹oŒF§ÑitüŠ”¤”¤”$î¶J­R«Ô˜&¾+¾+¾ ˆÅâFpPC 5@JH )H7é&ÝùüF~…(Dâ‡â‡â‡à„ Âa Q¨F0Ía_³J³J³Š_áðïàqðq¼‰7ñ¦åó¬UÖ*kUÒ»SuSuSuT«ûE÷‹î®˱Ë1,.‰‹à„2¡L(€uX‡u˜;R‘ŠTû°ûRMªI5@LÄDL“å¢\”Ã…Ö•èJt%\áÑUGW]EµÃ%Ã%Ã%I„ !…óÕ•Õ•Õuû«/j¾¨ù¢†Ò;Ñw¢ïD‹ë鸌ÑB´M'ÄtÜtÜtœÒú±ú±ú1JÛëÛëÛë):„¡cRO‡Ä!J;§wNïœNi]~]~]>¥Ý»w?žÔ. —…ËÓ‡ƒ ?~0üàÑ3.±.±.±ä@œ2N§$»%‹%‹%‹AHI"I`žxvàÙàgËÏ–Ÿ-@k_k_kp÷þÝûwïý¦~S¿    *7Tn¨ÜÛŠmÅ6 wJï”Þ)@mRmRm@܉;qf$ÌH˜‘0±/Äíw·ßÝ~'+ÜÜÜñ­%Ün W¯Ã¶—Û^n{)~[¸°paáÂÉ• ¬À ìäÊß8~ãø JOÆŒ;G)=BÐ#”ò y† œëëë¯f~5󫙀¼OÞ'ï–ý¸ìÇe?ž¾ž¾ž¾@â¡ÄC‰‡ ÙØll6Íš4?æöÏíŸÛHÓ¥éÒt€ž¥géY€Ä“xó ó ó €£8Š£dÃz³Þ¬7=7<xþð|<²õÚzm½`íÀÅ(F1Àð#ü0Z7Z7ZÄêcõ±zÀ+Ö+Ö+(ºUt«è0pàþÀ} @  PB²,$çîž»{î.ÐÝÝ H²$Y’,Û±Û¼·ñ6¨Ý/;R?R?RGŒ†Ñ0zŽ‘'ÿNþŸûÈó‘ç#Oz®ñ§ÆŸšˆì(ͧù4àwó»ùÝ@äµÈk‘×€ Ö Ö V@7O7O7`YgÖh j j º>ïú¼ës@•¨JT%Y†,C–ØòbË‹-/€:·:·:7 ùÓæO›?H 5d² Ù€¡×ÐkèÅËÉÉñ¹ tÐA—™Ïep\I»š~5ýjº ôôô‡B%’GaثګګhÛѶ£mÇdUz y y 9#g䀛“›“›pÄvÄvÄ4F5F5FMê“ÒBZ®kà™Yf–™a±¿V”IˤeR1”ˆp„D B”ñºîuÝëú®tééé’Ó=ñññlç…° a„-v.+¾\ñåŠ/aéTv*;•@†:C¡.\.¸\„î ݺ ˜m™m™m–^zxéaà’ç%ÏKž@fWfWfPÀ°,ð^Â{ ï%€jÏkÏkÏCv±óbçÅNÑÜ7­oZß4æ¶tŸtŸt߃x[·­ÛÖ½ÕFv>Þùxçc÷p÷Ô$ý’~I­“©ÜTn*÷M‰L‹L‹L£‘1‹bÅ,"×ß|gðÐ? þ(ø£ÄÃÛÃÛÃP+ÕJµÀ œÀ Ÿá3|ô8÷8÷8O¿úýÓï÷T÷T÷TàuþuþuæÆÓ§Oã§"OEžŠD™‚Sp n,𲔥lð?0³1»uÃä3ùL>[Çìaö0{zÿ%vˆbÇ«¢JQ¥¨jËjËjËèÛMŠ&E“g\\\0t+èVÐ-@­V«Õj1ˆA €×ð^ˆ@>&“ Þ¼7xïàðð7Ãß Å\Áð©Jª’ªòœ<'ÏÓE²€, Z7 ¹Èå|ìÝ“2Þ7rYd=YOÖ_ßDbH ‰ÙªF2’‘¼÷ Þ¨7ê¼Êg¹ÏrŸåÜǪ U…ªÃb‘X$Á…Ñ3zF`*¦b*€HD" ©4•¦Ô›zSoXìG¦KyYyYy™°e0b0b0‚;àœìœìœ|&G»Z»Z»zï¯í™í™í™ä,:оÌÑ*Ñntó-ØŒÍØLJç\šsiΥܕòµòµòµgrg ΜÁ ]Xyaå…•“¹;XðOðÀ(F1 À¾ð‡<ä2ULSÙMÃMÃM¼'Þï‰l®R©T*•=cÖ³Ö³Ö³Ûvµd¶d¶dÔ@ Ô€)v?' fûX$:‹Î¢3¦4ô5ô5ôÖÍÖÍÖÍÛv)]•®J×®¢v}»¾]ÏæV|TñQÅG4’l"›È&ÈÄSâ)ñ(œà'€¾¤/éK€ð„'+ÁµÅµåé(8]p ¨½¨ÝŒØ±Þ×xg½6¿SOçE¡°ž«ž«®J+n‚º•u+½eâïC޼쾵ûÀõŽëì…ÁÐ`àuåëJ°c½¯ñº^ó9ùEÓÿô…€Ùwfßq½O®'WX²vÉÚe_fÿ,ƒÍ7o˜50K¹@s™«*8qôqÄzßÂëzͧùµžÖÏø0¿b~…PS_SŸ×–)ˆü X¬õÒ7€Z˜ F܈Èír;S «Ç¸pë}×õšOók=­Ÿñ#¦Ÿmk5ª6·6H¤ÿùB¾3aÔõ¤>é‘”ù·ùÄ|‚½&˜`ÂÍ„9fŽ7F€4È~Ù¤,~­§õí£Bˆ€¼Á¼Áxéh2šÌòÎ7ò¹|Î$AFq9ÉIN…RèÈä  A‚ÓðxÌ—ûå~&³ü‰èxt²ú–ËØÙ?`ÏÑ=G!Óf"OÛ½£"Õ‘5‘5ÐÚÑÚÑÚáX8Ž9¾Ð°9lÛq¤:R©ž†ï ÷Ú|j8KÇ€1KOë[~,cᯠómç[PŸ¨]ÁTìëØÞØ^˜w|ÞñyÇ¡nQÝ¢ºEP¢JT‰‚жжÐ6ÛP4MESÆwwùº|Yø”yDëeôµŸ!|A_Ðÿ©UUBˆOD·èvµY'-ä |#ßÑìk.n.bᆅn"v>v>v^ˆ”7åMyEvÉÙ"[„h.h.h.pàOÅNÅN ‘’©œTNî !„«-«¯ý@Q~Q¾Ù #¯F^£Öµÿ^V‡í/1žOŒ'`ë½­÷¶ÞƒÒ†Ò†Òè6»ÍnÓÆ© ©Ð‡ñáÂpaØÑ“æ¯zÌXú–¾ /¨®ÂàªÁU ›™¶.ݽtûÒmðïôïôï´ówÀpù¥ç–ž[jçÛ‹Û‹Û‹!°"°"°ÂÎûËüeþ2¸øÛÅ»ïÚy™mƒŒ¾öóne{ì˜ûwìÙØ3¨!£Ü(3Ê`èæÐÍ¡›`Î1ç˜s@%UR%atõèêÑÕÀ&6± ŒkÆ5ãš—?Êò„ÍÇS#d„zï¿•Ž9–+֜ɑ»ä.&U£êTŽ^ªRUª (¡„G^*©$¨FÕ¨§á÷©}ÀrÙ$›s,ˆN|pŽ9&?µÞZ/`€5ù{e/ð­’C¤Õïê¥z‰â'ÚhL2 ª_õ«~`Š$IàÇ8Yü©¤" ²Gö8ù-½w'ÿŒý¯œ±¯‹û›™/Øÿ ¹bT0õhIEND®B`‚routino-3.2/web/www/routino/icons/marker-30-grey.png 644 233 144 6273 13061246466 15633 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü pIDATXÃ…WkPTך]{÷n§¡! ­Å+ òP (b)SvÊ”æÁ¤J¯Ï¢Ä!Ô¡’R 7]AMI@3Š2®0Æö ¨ÏFÄ’GôtÓ¯ÓgϺñ–U©»þì³÷ÙçÛ묽η¿C²²²²²²àŠ9LÏ5t7È rƒ¬>«$«$«„-Ìù=ç÷œß739“3ù©ÿàñ‹øEa)¦jSµ©šD1ŠQL2ˆ@èE/z¤ )ì¤X)VŠ•$ƒåF¹Ñ'ÅdŠL‘©¿e{f{f{6vå&å&å&‘1Þ‡÷á}È–9Â]/W:Op Ö` -r„!G¸kÖ›õf½GxNMNMNMéyÌ·Îë¯è¯è¯,usopopo°¦ÅõÆõÆõR˲ÎeË:I‚8Cœ!ÎÀ,2‘‰LH1‹YÌøŸãsï༃Y“¤0)ЩîTwª™¥)°)°)PH›ŒŸŒŸŒÿø©ÔGê%±î²î²îÚXÀ’Y2Kü„€€€F“cÆcÆcFj¨¡Vü WÍUsÕêr³Ál0–nõ}Ï÷=ß÷ø5‰û÷'îçJ]µ®ZW-|ñÞÂ[à™?ógþàЇ>ôX€X@t€€ô“~Ò˜À¸iÙ´lZ†gg+ÎVœå?yvçÙgw¸‡ŽNŽNŽNÏoðJ^É+×ïÀz¬Çú—ÿG¾ºûÕݯî¼ ï»\z¢ß®ß®ßž´2àÛ€o¾å’’’¸:fafVP JA ñ"^Ä «È*² J¢$J ± 1fb&fØn¶›í˜˜‰™‰ŠDEЂAv¾î|Ýù:>¡/µ/µ/•«s®r®r®*yÊÍp3ÜÌ¿‡q¼Ž×ñº-áæÛæÛæÛI+Ý?pÿÀýæ—X•X•Xŵ" H€–¥³t–™è†è†èÆ?(fW0ÁðñÀflÆf€|I¾$_ä"¹H.¾~Á dÐ&^O¼žx+ý~û÷Û¿ßÎü´×µ×µ×“4ˆ@"JÃ) d,ðøvKŒ%ÆĶŶŶ!εȵȵŽÂ+á•ð 2ª¦jª.\<.\þ¸x1übøÅ0€.t¡ ÀAÄA»•€ å„rB <‘=‘=‘/:^t¼èh -¡%€pX8,†ÌµÐµÐµޱObŸÄ>AœÇûñ~¼ßªÝòkòkòk8¹<|yøòpR 0€§nÔº7/ݼtóðË™_Îürid™˜˜˜âBâBâB€MÍ›š75ššš@Éù’ó%çñ¬xV< èöêöêöÄÄÄ@|S|S|ӼЎËC–‡,!…·&nMÜšÀI}¬>V»j7ÒgÒgÒg„“¥Q¥Q¥Q̽ýÂ4`0 0–žšžšžÊغ;uwêæç±ûù÷óïç3–>ž>ž>þzü‚ë× ®ŒóÅ|1ÿz¼µ¼µ¼µœ±Ly¦ x$x$x$Ì+K»Œ]Æ.#èè£ÑG£È---bWµ‘ÚHm$øÃüaþ0Ddˆ ‘!0ª¢*ªB6…l ÙqBœ\m¾Ú|µè^×½®{àPëPëP HI"k©µÔZ ˆ;ÄâŽ×¥”R `+¶b+ÀÆÆö:IØZ‘þ©þ©þ)¨/õ¥¾ì*•äIò$y¼jÀsÀsÀ“]m_Ù¾²}%€„ ÃÃÃà7Ão†ß €B‚ÔýJ‹i1-µÒ|šOó‡ ÝB·Ð½Ë,}&}&}¨CÕ¡êPґّّ‰2ï/¼¿ðþ†•“+'WN …¿ÂÀ,Á¡E(€Ø€ìŠìŠì ÞÞÞ3OP«}¨}¨}i]z]z]:ïëht4:2M¦ÉôQ¬&«Éêî¿@TœÂVæY#æêFî89GΑs?ï£a4Œ†¥Uã Îà =S{³öfíM~ÏÔøÔøÔ8¤$¤‘4h…ËÂeá2€&4¡ @4¢  å(X( e¡€ $‚&›Ue7ònäÝȳšº0uaêwZì%ö{•åäää}s ÙÈF6)G?úÑÏo´×£Î†ø.¤"©¤:ø§àŸ‚R½/ùTò©äӲܩĩĩDnº²¢²¢²ÂzȾ Ñ-ÑÂ4_ÞÍh¯1We1ÚHi#Ä÷5÷5÷5lCËhËh˨Hå,s–9Ë^Íeæ2sYú‰®ì®ì®l€i˜†iàb‹rÉNtÖÖþ(, àÒ>Ò>Ò>˜SÍ©æÔôÎrg¹³|ðÇÞšÞšÞ‘ªþÃúë?dÈ>²ìƒØ¦,ƒœà°6Ãfžð0ü¡ùCó‡e +V4¬€‹ó˜ó˜ó D ‘Bdú‰9ë½4Ú¬xÚ–Vm•>ÄÄþâ¶_±­kÛ"‘ h@ƒõYCÖ5ÞŸûå¸õwËËËáÀÇÂÇÂÇ]·,Yþ²|(…¡Gè”Ñ ŸÁgðçÿÿwþÖ€±Õc«ÇV‹ú$+$+$+TQsMÚC¡P( ¹Ó¶=hß±ÜÜÜÜÜ\híŠÂ60ï!›wÙ¼{šRðóõ¹¼™Vd$#™ž©±ÔXj,üžé¢é¢é"Hm'ÏŒ]‰FC£¡Ñ ̾,|Yø²PÔ'9*9*9ÚUg6 ›†~Ó·¹osßfÀFÐ×öœÔNp>_ã ¼1Aj pÏæÝ¿WWW©Þ—ì–ì–ì.ËZ4µhj7}-ëZÖµ,ë![EïÒéÖéÖ醋êVu«º•|"í‘öH{ÁWð|Üåvr;¹†µ~~~ô•m½³ŸPoòáOÞÖídŽÌ‘9’½c;ö.þۺĺĺä/öû‰ý>83¾q|ãøF·ªéîéîénö·öKí—Ú/Y£uEg¥:¬sXç°î°‚±"Vô?uC ±è^á^ ïØwÀ&ÿ&‚‚?ñnêQzk6«fÕ¬:¦ŸVÒJZyÛϸ͸͸MxסССv‹’EÉ¢ä¦;þ•þ•þ•›b4ýš~M?ù_ÁCð<Øy[ÜÁÙ?ãAñOð†wméš}؇}Ü’D’HÒ/þ¬žÕ³ú¿~îäíäíäM»EC¢!Ñа·pJ8%œÚ3Ò³£gGÏ`Ž ülñ~ü³­~ÿ‚ŠBEÖ¢næIEND®B`‚routino-3.2/web/www/routino/icons/marker-79-red.png 644 233 144 4135 13061246466 15447 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜIDATXí—mL”WÇÏóÆ›tGèP†µ­«U £vMVPivj•&*"¶7¦›TD:Ú&4t[QÀª‘¤[«6[2Ì 1d}[Ù²¾7V·*Õ”6vaPÙÄ‚ ˆ 3Ïsÿûaæ>Ï3W³Ù=_fι÷žó›{þ÷Þ QÈÆS„‰óc=±žXð(HŒiŽiŽi^”-«²*«×Ð šA3€Ð0«#™d’¹Dú¬ŽÏçëy>ž?²ž8?’ÇÌWNåT.º#ÇS^–›åf¹ÙýPØ(l6ê –äÁäÁäAœ*¼]x»ð6°üÞò{ËïËr–å,Ë1|>Îçóõ<ÏÏë=‡ÄßEú/~*‰CâP× ¾Ci¥i¥i¥ê»û/ÿ"Kðõùú|}$H0‚a c@ºÐè~xœÏçëy>ž?²Þ‹Ÿ>¬Ï‰Ýb·ØÝõWž ç|ÎùœóÁ¹Î@gËbY, AµJ­R«u–:K¨Õ¡:L~xœÏçëy>ž_ލo}NGÜ‚[pÉÛämò¶†|½Î^i¯ :t°ÍÚm|Á†Qר `]A[Ð`,¨’*ÐX#k„acZ›Ö°®ÀÀ ØàÿÙÿ3À63;³ÃǧÙëì[í[ƒ^Ÿóp>Rî*w•»¿ÿ-Ÿ`­¶ÖZkÙdïïuïu „óøÔO´­ÇàCÐØŸÆÌ®ö½ö=à |H!S? |øÎÈæ}àÕ¼¬ÕÖ¬±ÉœGç“Ëä2¹ìÊ6>°wÍuÊÞ' º§=N€£ .àoÌhÌw‘»šš ÑÕèo­·ÖŒôCÙepà•¯ð_Zyi¥1t†ú;²wÍÞ•{W²·õà#Ö›œ™œ™œ‰º‡‹úl}6#Òòòø,í–v tî@H°'ØÍñÓòiNÅœŠ1Ç-°Àäûœ•ÎJé|¸èáø‡ãÎÃù8èö¥;–îXºÃøej§–¤%èÅL€Gg€Á¹ƒs͹‹¯_€<[žÍ~Óó›àŸÞùÉ?óÕ™¯ æÍ˜7ôþxçÇ;€Ú<Ây8Ÿ>R/+ùJ¾’¯Ÿ±XZ‡™˜IDgé,%"Š·ÅÛˆˆÄ[â-"¢–Š– "¢Ö ­ˆˆ®]¸vˆˆ}Î>'"((&"z¡ÿ…~óÍ’–‘–AD( ”QÜÍ¡›CD´gú±éLj¨:T_iRš”&ýÈóû••d×g×g×£cT¥QpÍhÃXëàckÙZó¶]¶]€Šð+ŸT>ÉÜú‚¶‚6H5ýUþpüºç%ÏK uƒñÕ9I9I9Ièà|$:D‡èô„u‡Ê•*7I nlÜØ8S}ÿ‰S'N@|U|x?ð~ð$PßߨUjp\r\Üþíöo îDÜ @=Üüeó—F½3;¿žùõLýü£`l‚-ÐCÒli¶4»²†Ÿ²ôIé“Ò'©/zWxWxWUÙBþõ²7ʰœÝ9»Í`êëêëf¿@)P`½²^1«oÇ®»¼–t:é´®yÿ€ÌÊŒ¹s5ýR¤)å³JÌOÌOÌ'’ÏÉçäs®nýÂ_–·*o•ZÁókÎGåÊá‡'1%1ÀÈö¶ímf°1טËì{ =…æSþ¿~üz@ûìHÕ‘*£Õ¥ÿx«ï­>mD\'­“ÖÝ* ùñüÔëBߣØ›bë:È8«6³ùc?ƒIN8 t-îZ ÓE®¿HS1Õ,•ö«íWà`æÁL@]ÓVÙViìoãPã’Æ%xMBkıft‘0A˜ L˜¾? Pº¦Ÿ¯ÕÂjauÞ>Á%¸׊¶ÞÓêÙêÙ ®Ý õ¤zÒ õ21¶’….ö£8 °…ì=öž!¥nW÷’î%@zœõë/Á2}'?–>”>tÚu49È![ Ö\Ê¥\ùcr“›ÜDR¯ä•¼ïÓŸÖ}VÑ*-Þ÷;¦uL3k—e³l3`øiá ÐÊ´2€ÎÎÁϧ­ººêઃj…þ ˃ò gKê†Ô ©ˆD»híÂá0ÝŽ9.üY$uHR‡p|ò¦É›&o"RJ•R¥Ô³E×n®=מkÖ®æÔœðÃ<úÑ~Ó›ªNU§Z¬ŸS?§~[¨¿åÅ¢XºGC¾5.²ÓBKTëIˆr/DúÖ¸v½‡ í:«œU&íZ‚– ÅÒîk÷µû†ÛÑŽvÀßßßÎ uM&ЉbbñŸ¢¤¸'Š/–žꣴ[øí¶zZ í[ƒ­ÁVC¹S§>N233Õ)º›¤&©i÷<.µ°ô¢EÏ0cO`h·Wê5iw§u§ugÐâuy]^?üðc“:;;׎¼OÞ'ïkÿ%‰¿U7§„gF_PÖî_þ“v,^°xÁbC»žyžyžyøshœéJ„¡$¯2²ŒØUW ÿÒž¥ÝùRT#ÕtÍâÀ%Õ%Õ%ÕlWÖXÖXÖXð¦Þê^©Wêu¦Q5P…¯ÉU/–þG‹Öî–HÁ?…µÂZa-@T@Ú4q¢8Qœ$@¿>’>’>B$]‘®HW„¿…Euîÿfý[>åS¾|#røý5"™È¡EhZþõëPü7ž¨ÎtFå}f«ÿ ÔΈ}ü?¿áIEND®B`‚routino-3.2/web/www/routino/icons/marker-80-red.png 644 233 144 4223 13061246467 15436 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜHIDATXí—kLT×Ç×yŒ ¢xi-¨ƒÆø1>.©òpu0…´*L!FÛ[# bkb¡¶¢ˆø"i‰†bMCqs|´÷‚FK¨AŠMµ…ÔèÌ(cÕNyˆÌœ9sþ÷³Ïœ™Û«¹¹w}Ö^k¯õÛ{ÿ÷>hÔ&‘Ÿñ˃ÌAæ 3÷Ô;2¦qLã˜ÆÔ¥¢,Ê¢|½–â(Žâ€Ñ°RA"‰$2ð÷• –Ïæ³z¬¾?~¹?–¯ˆŠ¨ˆ7ùÇÃç‰b£Øhêå¶qÛ¸m*HhXXX?þ‘y+óVæ-`]Ϻžu=ÀÚ„µ k|>‹³|6ŸÕcõY¿çó¿Ìߟù ?Èòƒ¶8¶CÓò§åOË—wÔ´Ö´Ö´*ã<x @€Ã†Ø`ƒ P}oœå³ù¬«ïßoæ'Ïç#ýÞÎÛy»íŸ¬@•„+ WܵHÉ"Á¯)1JŒ·\*—Ê¥€¼P^(/d£l”ßgùl>«Çê«À~ýõT4ÎÄ™8‘¸_Ü/î¯û‘M0T¸*Ø{ÊåÜu®ZW- Ø$‹dà’Oɧ™È࿹<#ž@±IR'à®sÞuÞ”÷”4% ,ÍPaØgØç6²þŒ‡ñ‘îžîžîÞêE,A_¦/Ó—)³¬X{¬=xâ­3 WJùR>À +àk¡.åªrð^å”2º€ñá¿çË•Ò5éšêXÿ°º­n<Ñ—é?Ò¤Ìb<*ŸX ˆíûY :¯:¯:OyÇ[`Øm’nK·5œÝÝpòë“_ÀùUçWÀȱ‘cøëþ¬û3¨M¯MàlËiËñEÝ&É%¹Tw¸:¯:»:[yGÝY?>RaÑaÑaѨèMíMíMÜÃ=¸ÉÖl~j~ ´‰6ÀÄï'~Œ¾°ì×e¿j[6µl~+¿&…O ×äìJÛ•¨õ½Ü½©½á½áãa| ô`Æ¡ŒC‡|+“-®,WZ9cå ˆK‹KÓÖþùàϵÀ—â/Å@Æ·ßÀòW–¿¢Í¯=Q{B“ï° ÚÙâ<Ìxï½Rót)º]ŠzÇ‚h3]¤‹D4™ ½ùÁ›Ýè¸ÑAD”ÞœÞLD”œLDôjã«DD³WÏ^MDÔÌ5sDDëÏ­?§}Y2^ÎxYã_›xm"}á÷üét ºõÊÏó‚âïöV{«½•,N~¤w¤—a‹Ð.´h“7wðNÇ"" "¢ÁÈÁH"¢§÷ŸÞ'"²ÜµÜ%"êßÓ¿‡ˆ«°Šˆh‚n‚NË ÚD¹¼îmW§«“ˆ?? â6‡Ía# ã#ÞÈy£ô»w‹+>/:™}2[#à¾Ê¾JÝ¢€³*ª*êÏ.MtEt¼Þþz;DvGvÀÑGGiUøÛ¸ßÆùŽ^>c®4Wúú]:ÜÜßܯ~ÿÆÅr±\¬ô; ‹…ÅÂâÝåì–EÎЗèKä™Öõ¶D[¢ïùP’õuú:x{ÞÛó(,t«àV„l ÙGæ™9É9ɰè«E_iÕw ð@!€ô`{°Ly0ÎaÈ{ä=@ôî7Üð¨!\ÂO<¡””"ñ²xY¼\oWüµIï'½/ogõ=Åg¿<û%œ0ë~Òý`˜®Óuí%Zj\j€¡•C+àfüÍx_9¾ÀÀdËd €'üt~:à9Q¶½l»o¹ùo}ë¬gXÜ,l6ßÌõÇ:Èߦ}ª‹ÕÅêbm'Ù„âÒ; ”dõäþbSl  îº7 4}Óô Hs¤9€mئÙAgÏÑž£P#ÕH€œ×öKÛ/¾ý==xºãtÒÕOh9_Η¤rS¸)Ü”5€B§z¿6p¹\îŠã\=gâLL+ž­æÓ>Ó>˜Uín÷Dy´Zu*÷•û (Š@QÚ”6@ J%Y)UJ}R²×Û_²¿DëÐÿà.Pwòc¡D()6¨hF2’QÔûX)‘ÅÉD&2 á‘ðhÇyV@\_¨/t‡ZwYC¬!ZíJÝR7à]¼«Ñî°÷×ìyày(YR·Ô '›˜s-§(§HÞ®~†Ä^±×¼7¢0¢0¢ˆ7ðÞÀñÒå1ÌñÞß,áŽpG¸Ã]˜µsÖÎY;‰tùº|]¾y¯ªÝDC¢!Q«]O±§N˜a†@úÐçÛhy® ÏCÏCÏCŸ»Ð….À<¶klר.%SÕd‡dï â§|Aôü¡J£Ý ܆™\=WÏÕkµkn1·ø´ënq·¸[|Ê}ñ,âYÕÕÕ/ÏQµØ 4 Çâ™Ô¼Ò œH/0_+àÓ®Cph´{XXØj­·Ö[ë8á„ýŒ´øBñ…â ¾gG<.wyÿ%{5 ¯wœÆ½0ÐØ„l¯vÏý'í&­IZ“´Æ§]s¼9Þ/FãŠz\.—Ë宨í߆ï èËÑi/Òîr¡\(Êm pnYnYn™r$ÆãŠq¹o¨Gí‚£xÕQÕ‘÷Ù¬ý‚è´@íîõ÷“ns¹ÜF€Ò(Ò<óù©üT~*ÀG]ü.r8r8r˜HhÚ…v®Ù;1+àäþoªþ•B)”"þèÞ•Ç+¼Â+×Ä5qM÷§ŽÏ6œŒ% î ú_Êu<áã ¦ªIEND®B`‚routino-3.2/web/www/routino/icons/limit-41.png 644 233 144 2223 13061246467 14516 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜHIDATHÇÍ–]h“WÇŸ¼®¦퇶+ˆ"Ú o¬x“E!V¬"H¼“RdW3 QaN¼Ú„AÁ¢FÇ"T " Þ¥órX•Öhj‹èüh׺˜œs~»HÎû¾®ssw=7/Ï×ÿÿ?_Ï{DD¤¾òp–9˜ڲí|îù«7Wonù±lŸQØØñë¨;Uw  á|Ãy}ß³mÜæûëE<|?ŸõK½xŽ`°?­ØÇ`÷ºÝ몛Êö·ƒP“­ÉN—`ÿµý×®¦¯¦9w&¾Š‚g۸ͷõÏ/ÇþÆ/U7ªn~ƒàüà|XÞ±¼cåå„üJHlKlx2ïÉ<ã€z,`‰SLaÇ Ÿmã•|[oñ,¾å³üe=‘ƈtîéÜSs®\pÿ8¸ôàRËWÌ'8Á(M•¦Ô^µ—˜A3@€x¶Û|[oñ,¾å³üe=òþÞ~‡®ê®jWÐÏ n«ÛÀ¤Þ©wR¬ŒYcZL è°nÓmÌ:¢7éM`¾1WÌ è¬ÎRdRÝT7ýø–Ïò‹_Кï¡f¢fbêU£ÊÅßÊŸz—ÞÅŒëYà V€¹kîš»³©Gê‘z&k²&ë ¸Û­“:éâmõø,YOEØ™Ÿ ûh÷Q·¸béeé¥ kL» ›°Çó ûA÷ƒnX2°d`Élƒ½ƒ½ƒ½0¶hlÑØ"ÏoLÞä1¾-.ó¹üe=a¿| ™7™7nùg¼S}ª{HFaLÜÄMBkCkCk!GãQørëåÖË­PÕ[Õ[Õ ™-™-™-¾ª j€º¨.Rpù\þ²G¤6W› o‰Ä"±ÊþJàœd{Î= J›l”"²ZVËj‘Tgª3Õ)R0S0"‹W-^µx•x#$! ‰4ÝjºÕtKÄÄLÌÄ|ñZi–f'ä„$èò¹ü=а°a¡†O_<õ®½º_( x3MGÒ‘tšŸ5?k~ÉždO²ZN¶œl9 ùL>“Ïxù±\,ËÁÙCg=ä[±Õ¡:ÌsóÜßf,Y#¢¯ëëa‘ÒöÒvw^¯].o¢N£Óè4ЬWëÕz%2”ÊåEŸ~|úñi‘áK׆/yù:§s:'"£2*£¾SR’’ˆˆä%ïñyü=L‘¢Ê©œÿƒÎþ+çìëbÎ¾Çææ ö/ú‰,áUÁHÐIEND®B`‚routino-3.2/web/www/routino/icons/marker-80-grey.png 644 233 144 6220 13061246467 15631 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü EIDATXÃ…—PS×¶Ç¿ûä„„0 "þ.ʯé´z«ÊÅð¢c þ EKí0Ðk‹…’BŸOj}ÅmAìôA#¢Q.*· åu´Æð$¼¨ PB$ä'gß?Hàw:]ÿœÙg¯³Ögï½ÎZk“ÜÜÜÜÜ\È0+úÙ³–}È>dÒ†ÜrÈý.ÎÉÉùK0•S9•ùçÅyq^)–:K¥Žà4Nã4ÉB @ -´R‚Z Ú,Ú,ÚL²Ø§ìSöéÝÓd‚L‰OÊTž*O•gSW~r~r~2æ|9_Ηl˜åàÛì\2fp5Vc5SÉçñy|ßf5ZV£Gd^}^}^}å uØ:ln¼5ýêô«Ó¯FüUZ$-’áJD\D\DÉŠF £„@äÂÈ…‘ ÇØ1ïÐw|ï°7gßîÏáßÁãàcí;ø:u£nÔ‡ì%{É^ß"¯ÀWà{ý;ãã㟅îîî¶Ì8mœ6NËÌ„v†v†v’DQ–(K”…iÂ!‚Ó˜Æ4€]Ø…]–` –`Ú²Ô²Ô²‰­­­tæZàµÀk|æxüxüxüÛ_K|%¾ß5bÛ^Û^ÛÞ7‹¨’*©òá;Ìë$ÇœcÎ1hE+Z—º²ul[×zÎj²š¬&Ÿ¿7üÞð{ƒ[­ø@ñâ¶Rfdøaa8@hXô =\àS˜Â€—ñ2^H/é%½à0†1ŒÕ»éÝônè¯9Ys²æ$÷NKK {ÓÉÙÉÙÉyà*·™ÛÌm^·ë°놞3Îg³...þïL_¾:}Õ'ÁOá§ðSp‰Êde²2™½)ó”yÊ<±ÈÖfk³µü6~¿ ,äCä9A2H2NÆÉ8€f4£à7òù`m©¶T[* {.{.{ŽEû~I~I~I\¢Ã¿ƒÇÁÇrSÜ7µ!ÒÚlm¶6'ÿ‡»Â]á® þŠ E…¢‚Õ`6` <Ã3<7Aˆ D %(Á¼ìÁì@AAœÅYœHÉ )'å¤|^7ñ&Þ7 À ¸¤¸¤¸ÄVžJ:•t*‰ú...%ë…(DUFâó‡Ÿ?üüáÍÿú¸õãÖ[)½µþÖú[ëùT:+F›Ò¦´)霌ŽŽRz§íNÛ6J»C»C»C)ùiæ§™Ÿè¿É¨Û¨Û¨¥w\ï¸Þq¥t°c°c°c~Þ–iË´eÎ ·ânÅÝŠãS<>–óçü9ÿU©òjyµ¼aÑaÑaѤ“˜Ä$8æ4sš9 tötötöçœ;pî žOˆ'³Æ¬1kŸ,Ÿ,Ÿ,@¯ŒWÆý_õÕÿP__̦'`êý©÷§ÞbE±¢X-þZüµ¹v !¥×Ç®]C1ÆcŒY•Šƒ“'Nò•k*×T®™_÷÷÷ÙüÊKjKjKj)-~Tü¨øÑüû‘³#gGÎRš¹'sOæJûRúRúR(UoWoWo§´¬¹¬¹¬y^_sNsNsŽÒCòCòCrJ'¬Ö ë¿„ÑÁãàcp‡q˜2ç™óÌù¹•‰æbÍ.«’V%­JFCGCGCõ€z@=œ×ž×ž×Áš`M°pwwúÔ}ê>5–––3o'H$’l9[ΖCCCxQD̻̻̻NáN‘@Và%ðxÑ + + +I·•ÛÊmÅŸ@€9T2þdüÉø€_ǯã×–å–å–å€eÂ2a™Œ;;;3gæÌ@ÕTMÕ€“ÊI多'`†a H@À½Ä½Ä½47íð'0Þ3Þ3ÞC“È$2‰ôGF|T|T|”+ìóìóìó¤?¶/n_ܾ ß’oÉ·0™}Ì>f e_˾–}@bUbUb d”Œ’>:þÑñŽÎ2g™³ h26›Œ€k­k­k-`þÐü¡ùÃyPî{î{î{!AÀ¦³élúÜ´I÷©îSݧ€î±î±î1¾÷‰ûÄ}\!P¨N³¹l.›K²š66mlÚhóÓè ôˆÄâ\v»ìvÙ Ÿ>3|fÞñø‘ñ#ãG€ÉâÉâÉbÀWâ+ñ•Þ¹Þ¹Þ¹Àýç÷Ÿß>¯/û^ö½ìù£÷¹ïsßç>,´„–ÐH®h¯h¯hùÕDGtD‡b#6bûΉ”„”„”„#-#-#-ê÷÷÷½»4@  ÐÚ2R:R:R:…Ý[º·to¥ª¨ª¨ª"úý‚~ð2^ÆË€eåËÊ—•»Oî>¹û$ OÓ§éÓ€Ò_J)ýpjwjwjLV“Õdb5±šX hôñèãÑÇAjîÖÜ­¹ËOÿjøÕð«‘HŒ£Äø;fêgêgê_;Arå<Êyà6nã¶w±pD8"isžj˜j˜jðQÆfÇfÇfÓØ„U «V‘Ÿõ7ô7ô7@»»»@¤ ©Bªü¼ý¼ý¼¦†©ajæcÐàmð6x½ ½ ½ €‡ÚCí¡–™—™—™1ݑґґ‚íêBu¡º—%&‰Ib2ÇSPAÄv!Aö b\c\c\¢&j¢žL‚3œáܱAX+¬ÖîZ9 H©ÆÃÛÃÛÛVD¬ˆX?y¶z¶z¶Bèãã12FÆ<Ã3<P T"•H%RKª—T/©ô/è_Ѓá¦á¦á&\*ã*ã*㸛6¡Mh2‰½@/ÐRŽXÄ"öoÅ(@ Ø¥öîÉ5Û7²Ÿ“T’JRN# $$dzã=¼‡÷¾>qùðå×s²eãËÆ—³oÉêdu²:x%¯ä•pc¶2[™­6a6ÍÇ$ÕS=ÕTLÅT ‹½dº]=zõèÕ£¶Œ‰€‰€‰¶Ø¥Ð¥Ð¥°*ß§ÿNÿ__ת´*­ŠœC/zÑË]vô£R bƒ\Ò‘ŽtR|1øbðÅÂ-b¥X)VVåÛ êkjjlŽÌçF"I$‰„¾ð…/L0ý¿Œ8ÛeQ¦‰ibš º¡»¡»¡£±·ŸÞ~zû© Pê&u“º ™­UÖ*kÕÁ#]ª.U—  :ª£:,°[©p€NÛŸçyÞ…wÁ‚ö'íOÚŸÖtkº5ýà©\*—Êž×Ökëµõ‚†m Û¶ÑX’FÒHD¼šWójÐÙÐè$¤“áG8˜Fu£ºQªÃÃñ@:,–üJ~%¿òàæsŒ96dž-Ù‚bûylpâX¸ýJ"²-ö¼[ˆF4¢Ñ–AV“Õduì–Ù+Çõ‹3ûgöÏìç¼Í¿Í¿Í3kC… =†Í|7ßÍwCÂ1AL,\—ÅeAôMÀ7ߨ^~møµá×=âpq¸8¼pÍìO“y“/åKùR¶Ø~²ŽÌë–ŸŸŸŸŸƒcGaaq(Øc7ûŤˆ‘¢Ÿ/11L “Y%”P2'êgêgêg¸ýú2}™¾ {å™tìD“©ÉÔd⧇J‡J‡J=âlq¶8»ëŠå±å±åqö×=ë{Ö÷¬ì€~öï$À¹Šöb‘}AAb7ð‹=v/×××n§ŠSÅ©Uù^^^¬¾:·:·:×–aïèt.ì\عå­šVM«†¼#é–tKºÞ÷ãý´±o±o±o™þìååÅüf÷·ÑQ¡^äàw$:::::œ}ØI¨u"ï¿2üÊð+ø_ÛrÛrÛò[œÈ_ä/òÿÏÏÞ|öæ³7ÖêèèÐÿi¯h¯h¯°½>53535#H®®®ýh)-£e´ììˆ ‚HÐßð~ã—8NÀ¾QÜ‹< ¿»yh@l*ZGëh]t/s¹À\hö7o2o2oâ_– K…¥ÌR (¯µ\¸pá/Ѻ^]¯®—ü÷à=xúÝn½pú÷8ü¼»ötaS! iHcï’d’L’ÿ@hmød—ó çÎ+˜‚AÁ `ðñ þKþKþËýOºwtïèÞÌÂßnÏÑXšþˆã_H-gÂâ9lFIEND®B`‚routino-3.2/web/www/routino/icons/limit-162.png 644 233 144 2722 13061246470 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷܇IDATHÇÍ–oLTWÆßA¦Ã"H« Ò`]$¤i‰‰R±u×’¶IÓÚ(1)¥cM1(¦|èV“ukªÙج+!•ÅìÅš¬’áO¡IB´ RcŠÓ(BêP¸wîùí‡áp§µûÝûåæý÷<Ï9ç¾ï=""’±øHz2éɤô¸ôŽãO)M)ýËâöé¸Þp½1|VžZy ³1³Ñþѱu\ç'Ö‹8ø‰|Ú/â8<†Çpùíà­gÞz&剸ý÷^ð^ô^üÍ‚ê/«¿ø¢é‹&öAøÛð·Óþi?8¶Žë|]¯ññå£?ð‹€û’û’ëxó<&¹;sw®ßO[¯½úÚ«?/ûy™J€Ø= 4å"DÐÏd‚­ã‹ùº^ãi|ͧùãz÷=î×+^¯ðžüxæÌÑ|æE ÒÀŠX€Ø®Ø.æAõª^\¸À±u\çëz§ñ5Ÿæë‘ߟíñ¿ByJy ðÀì{¥½lŸù¹ù9¦:¨U#JKVoª2UÖ€5` €=oÏÙsK;ˆ}ÝÆeý´°ea ¦5§Ì©¥÷3_f•Y€Òü’(èéO±½Þ‰H2ŒÚ£öî+±q³Ø,fVµ¨Ô!kXÃP÷Õ}u?Á?Î8ã ªT•ªþÍg|–ÿ›]`0«æãøz*ô0ë÷ŽG’µžEa§¿@} ~iÏ©³Ýl_‚S½ÿìý¤÷¸yùæå›—ž±Œ±Œ± 8~þøùãça°b°b°Â‰_»~íúµëpâè‰úõ0Ô9424’°ãFœ+ðAà}´§¿Y6XË÷--À)õ6ØÓö4óÆj#ÍHƒäÆäÆäF0ªj£Ú!.r¹Š\PZWZWZ¥áÒpiZV£Õ€¬Ú¬Ú¬Z(9Yr²ä$ä–徜û2\}~ 4b~QÞÛöDóHóˆ6X›$’ÞÞ]¸E~Û¾yûfyODÄu–nqK<ò‹ü*¿Š¬Z¾jùªå"i]i]i]"v§Ýi‹„……‰dµfµfµŠ”L•L•L‰Ì¹çÜsn‘}GöÙwD$¸?¸?¸_$uEêêÔÕ"W·UU‹'þA¹Îòá‹Áƒ"Kz sEæ {&'&'œ¶í´žµžuvÆÔÔ. _¾0 Wš¯4_i†üù;òwÀ™±3cgÆ ;/;/;úúú`¨}¨}¨6Öl¬ÙX{¬=Ö Ô.û%û¥„1óþdùd9h=éÝéÝÊÀ† !±W¬L+Ó±}ù¾|_>F‡Ñ}s}s}sPØTØTØääm]غ°ujv×ì®Ù 999Ðp£áFà ˜ ̼;ó.X¦Ùcö$4ÅpØö€Ö“$ñGüW¿—¤žîžnѽZ%•[¹eA{ÒÝéît·Èlh64ÙæÝæÝæÙP¼¡xC±ˆ§ÌSæ)):Pt è€Èºc뎭;&roï½½÷öŠ´mjÛÔ¶IdmûZc­!ÒilÔøTÙVðëà×"Kzþ_WrÉj±Zœ®|ðƒÍ6CôvôvôvÂÎ1#fÀ¤kÒ5éU  TDÑ@4wóîæÝ̓‰þ‰àDîüëÎWw¾BE?ž©›©Kàûo ?ÿPW>ý)xÃÞp$Fc£1gŽ]iW2Ë¿*©¤TªJU©Ž[e«l• øðáKÈŸg>Þƒj½ZϬƒ?Ú?Úàx#ͱ?™ü¦žü±ñØ8ðDìpì0&õ´ÐâÌ!š9Ç9P]ªKutÐÔs˜Ã Î«5‚RßÅ2c™˜Ê°¦­ià¿|Yù2 úÐädÿ•ìí⑽=š7Øÿ„Ø­=®JIEND®B`‚routino-3.2/web/www/routino/icons/limit-11.png 644 233 144 2125 13061246467 14514 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍVAhWþfâ¸6IJAR…Â"XhÈA²l%‰BTHdAâ¡UÔ˜žª°bSðb{)6˜KD)ÙÚ,1ăÉn­”‚¥Bi ¬›„ÚÌÒ¬ëî›ÿëaöÍLé-ÿeøß÷ÿß÷1oÞ?$ ¡úiî7÷›õnnž÷×í.»ëƒ 7¿«Hã´qú÷/É]wvÝ!ÉÝ÷vßsæý\ãº>ØøüA=½Žø ¡T(eĪùyæð™ÃvÄͿɒµéÚô¿òÂô…i’œº?uŸWÈ¥çKÏIr9¶#ý\ãº^÷k¾ ?FÖé¤5kÍ’¡¡yàØc-Ÿ»¹²÷Dï ’|]óºFL’$Õ_$ëX'1’¨ãï@®ñj½î×|š_ëi}×ȦΦN€<•8•¨wæ ¯î»ºOë•Ó$oñëÈJ¡R IuVe‰”¬dI’ ÒÏ5®ëu¿æÓüZOë»~°vo¿ý„ì³ûlÏÐO¤z¦ž‘\qúœ>–«€8ÎQç()_ˈŒpCð‡òB:i'Í2WÔcõ8ȯõ´>‚†>üެ]ª]*ì Ô‚"é$“Î9çW5•Ê«y5OʤLÊdÀ‰P(¤Ê«¼Ê“’–´¤¸·Ý΀3àñ÷ô<}×OÕØÝÉ‹7.Þðš¶€$E2òDžø:ÙÑìhv”\l\l\lÜøÆ6Ã%#9ÉQÖò;G|}×OÕØ¯_É7É7^û§üY]V—Yâ÷¼ÍÛ>qª9Õœj&­akØ&'òù‰¼'ÉD2AZÓÖ´5M&»“ÝÉnW1Õ¦ÚHR=PXòô<}×Ï ~®~î£6 3Þ¼À c«æ^s/€+¸†kmÚ´QDˆØ;bŒ1Æ€´ 0VUcˆŒEÆ"c€Ä%.qøQ=ØæAó Bî¢1îë»~L ¦·¦—QÀzd=òÚÿA—pÉç“é ßì7ûM Úm¶ÅL1SÌøu‰™ÄLbˆ¢…h(.—‹ËcE¼Å[À! èyú®pfœã r²rÒ+l‚` B ¬€Ñ²”¥ ‡rØ¢D‰°°ŽG¡‚ Píôõ<}× b…Øo¿™§™§ºŽŸÁ”EYÄ»êæQDõùÃCá¡ð`uY]V×FcáÁð`x°z¬«'|¬y䕼Â;OÏÓ¯úÙê©ä,§8åÄ+í+í+íd)T •BO妸,_òå–Oå{æ˜7gÖÌ’,é³´ÅXWÿ¿æØ&ÙpüÉÏØ@ò+ÞäÍ÷ØññSÒ¹î\g™e5§æ‚ü›Nþmû¯Ü¶· ýæ¶Ý} À6¼ÁþåˆÏ~xdIEND®B`‚routino-3.2/web/www/routino/icons/marker-5-red.png 644 233 144 4071 13061246465 15352 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜîIDATXíWmLTW~ï ]ÜQbefI£ë®bÆøµÒ. M4qÐVl FÝÑ"­µA£DÂ*«$…`ìjbΨÛP5îÃZ-i ÚµqM¨1:3UÖF¥3ÀèÀ9sŸýÁ=÷Þ™TÍf÷ý3s>ÞçyÎyŸsÎ ÑxL¦¸ó&z'z'z¥½#uBç„Î Å¿S¹ÊU~ó/4æÑ<`|Xk$•TREˆokb¾Èx?žO΋×cÕWMÕT-{âÇ3~£vªj§ç™´]Ú.m7„ØÒBi¡´þ¶ê«îeË–=Üùî|w¾Ùãb¾Èx_ð½ZÉ¿o¿ù™<$ÉCyb‡²*³*³*ù‡ÇzŽõëÑÞ? ? ? @‚†1ŒaŒ¶>.æ‹|'ðãùÞüìÕúÈ>Iî—ûåþÀß@þÕü«ùWÙߘoÌ7ôÐæjZ¯ãø€Ïg),à¥,—å|>Ë`¯cŸ°Om®–¥e‰|ߘ/ê‹Â'ð ÁqüöI†4É#y$‘z@= hÿN$¸]®FVj«ÕjµZ„Y;kgí€ÐZÀ(jQ 3bР¢ˆÕó˜ƒ9kg­¬Ðjµ]Ú.„EšàüBÐGI’$=xg¡˜`¯·×Ûëµþ'þ'þ'øIÇ óƒü ?hdPŒmÛ !%¤ÀHÙHŒÈ#2 §§³6`¦óƒü}þ¾‰&ø¿ÐcèS«Ô*µª÷€h­h­h­Ðþ D˜‡y˜Ç"0Êxƒ¥ý%ûK€ñcòfy3(1%fí?{ãì QCj¯ð#‚ߨÙ8}¤ÓrÒrÒrÐø¬øYñ³b#‘ÁÂï"wq—UèòsËÏÀÌÕ3WÀ¥k—®€·Î[-ß·|¾|X+¢íÐv¾Î'ø…¡OýÓÊC+­/Ÿ—Ï“.Œ”` È'ô‘\*—Ê¥câ©;Q}¢úDµÅÉ<™'žà‰õ0Œ~;ú-Œž=¥û™@lWl—uçòîäÝ€â[Å·ó&å¼àgøI~Òä»Üt¹ér“±“”œ’SrŽ ²HY¤,ÚÝ N™#Û‘íÈæoú×ø×ø×X¬_È&±IÖÊu=êzd-ñWK¾Zb8ð|à9L-›Zµ«kWˆˆ3ÈF؈19A9»svç쎀’¡d(G¢Ô¢Ô¢Ô""õŠzE½ÒÑo\øn—Ûåæ;R¬†åG…W¬=º3ºœQgÔÕ`yÁòHoMo€ìîìná²~ÈÄÍ;Ên³ÛúÓ òFåʱˆ!p“²IÙt{íx;%Hñ‘Õ’äLr&9ÇEBM]M]MV(Ù”±ì±l“áAÛ  >}ñé xkÓ[› öÝÚwD>2÷™W° lƒYêSC§†N a¹ñ„6È rËbiš4Mš6ûX‚@åŸÆ“º^Z/­_Ö&uHR‡ðJl«·Û{Ñ{ÑÜO¾ƒ}Á¾LÅT«wB°,åŽZa,3–i.¯¿£ÿóþÏG²#ّ̪ŒÜ§ìSöÕ¸ i¥TJ¥ªÝÔZ@T î#yÈC¤• üð¼ñ´¶ÙÛìmÌæÿؿտÕêݘ“€/ä hü0? ÂOóÓ¼±@,hkµ=Ús9뮯»¾î:ßa¼@Ãê°:ìÝŸ¹-s[æ6"Ù%»d—tFWW!dþBÿ\«ÜWî+÷¥ 3vÎØ9c'QReReR¥w¿áÝW«ÀêÝXM¬Qxá…À á‘¥Ô³ø,>ËÜßæÅÍ‹›k…Æ[nK²%Ùú_è¿–’ã+-u%”ž¤„æ×ñm{ò¸wýg^ê]³1›)(ö8ö8öØôbúÐxSúRúRú´U†'SåT9õ½½ VlIÐ7‘^Ý¡4'xwÕÏx·ÛÛmz—u³nÖm^;Ï3Ÿg>Ïæ„æ„æ„ø¯ /žVN+§ä «éÖKøKzM˜À˼Ûdo²71›¿ÃßáïÀø¯Ð(BBiÍ…š 5ÌkGmSÛÔ¶>ý/Iʵ^½ŸÞxÀÄ ïéÞ=÷2ï.]±tÅÒ¦w½¹Þ\o.NŽkF%¤r©\*_¶;žFLà•迌×y7OiP”†À|!¸¼¾¼¾¼^ûóÜѹ£sGÙ¿ŒR• ¬É¢vj§vүşÀ7‘þÇHôîþøöÒ{Òiƒ´ *¡’Øoåéòty: ‘DýãkGÄqDˆ”^¥Wé•.é‰k*÷ ›ñ­ˆŠ¨Hý.~øã Y“5Y¤.©Kêú÷¯Æûgz*ãKÀ}m©ÿÞBº•_Þ-IEND®B`‚routino-3.2/web/www/routino/icons/limit-7.4.png 644 233 144 2335 13061246471 14601 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü’IDATHÇÍ–_HTYÇÓúú§•Á2Ñ{ðAiÅ'• ‰‰À@3cj@ÊØ z0Ø–êÅ &‰^ršJû ‘æ, K¸­Öšm…åŒ8é¶3÷ÜóÙ‡;Ç{ÝÖ‡}ó¼\¾çüÎ÷û½¿{~¿{!„Xz pmpmp­´°«ÞžÏÚµ;ÿg _“VVý{3¬j]Õ Ì š#6Öë:Þ¹_›ß©§çÅjaOdÞμæIá³à+òe­³pK²ïfßýlÀÑûGïÜ Ý ñ=L L L{¦=`c½®ãõ~Íçägÿ¥/¤w§w§CfFf†°qׯ][~°^mÊ=•{Þ-{·L¹@F€å,W`–Yôˆ:°^OÅëýšOók=­où°vÇÚBÀÞÚ½µÙmÖ†‘vhr7¹µ^ò.pžó,cÖ˜åAæ@…U€4ÒÀÆz]ÇëýšOók=­où ¿íE/³5ɚ伡~Õgœ3Ît%êõ$¥_^PÒe˜† ªKuªNìñŽ·¼µ¡*PÕªe'[“­$ÁÌ2³€¿,~ØŸ¹?S¼èu|J!„(@öDöÄì70*GåV·a¢d¢ÄùmÔ€ùIÆdÌž½úðêëáHË‘–#-C>é“>7ƒApww‡¥J”:⫌uÆ:§žÖ·üÈY‘³Â|Ñ÷Ñ÷ÀLªì T®rd"ˆ"(..†‘Þ‘Þ‘Þ¯Z¨¨êðÖÂóãGnq ÅjÙ(I‚|%_9ùíüKö_¹doKö>¶4o°ÿ’ƒÅÉŽÑS^IEND®B`‚routino-3.2/web/www/routino/icons/limit-30.5.png 644 233 144 3070 13061246473 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜíIDATHÇÍ–ÿOÔ÷Ç_w(xÆ;¨ê„‘Àrš%µ1(=6£N=) ,”ƒª£Y$Žš˜,+¦kšnü0wŠºE†®µ(‚4ÚMSi Cf†ñrC¼À¬|M89Êç¾¼ûáøìCì?àû—O^ßžÏgòþ¼Ÿï·€ˆˆ$-Ìiæ4³-›ëüš7×¼ùÃÏcñ©˜v›vÿëèIô¼ÔöR[ôëu½弈¿’OÏK’‰„Ž„“c9>›+6¯I‰Å¿¹–nK÷BÞëy¯àËö/Ûyž|óä€9ÇœŒX¯ëýú¼Ž·_Ž=Ç/«¿Zý•i ââE ½8½8óg±_&”½UöÀxÜxœ2@d XÇ:åÐ×ôŠX¯/÷ëó:žŽ¯óéü1=Éo$¿!ÎJg¥ållàÁŸ )µ)Uç uó1ë "U‘*–@ÝR·0a#Öëz¿>¯ãéø:ŸÎÓclePD¤¥öz÷z!: ê? ¥‡Ò!Úò†¼„–•*•§^Q¯@Ø jTª‘ï¯[hh¨È/5æ!ùQ¨!Ôg Ÿ–½oï}[ØRdlå#‘œã` XU4{û½ýÀMJ@½¦^#ȾækP{Ôµ¨£Žºv±‹]@)¥”®È0À0É$“*[eDéøË|:?1=·""§ncÛÿîþwu´è«Ї{‡{¡å-g[΢îýúÞ'÷>1øÞxxãá ð,z=‹0 ŒøÞ W‡«ÃÕÐåîªêª‚ûN4žhDý¾²µ¤µÓ1>hx½áuPé‘h·ˆÈÐÏ¡»¹»þ“<;>;®Üë?JÌJÌbÉ5îòº¼~:ýtúi¸|äò‘ËG ¿ ¿ ¿6n*ÜTÙKÙKÙK0Û4Û4Ûd{Úô´éilܲqËÆ-àü§³ßÙU¨ÜQ¹ƒ¥o=š[s+7t†:C jczDí³¦XST̥̥ÀÃWm´N|ä)ñ”Àů_¼ÅZ±V¬A½Æ^c‡¢œ¢œ¢C@ž/ϗ烶â¶â¶b#ß]Þ]Þ]k®=ºö(8 §þ\ûEöÙFŸúëÄÜÄ൱QÂt’–¤EGøíôÓÇþÙbÀðC¹¹Ü\n†Üó¹çsÏÃAÓAÓA”——À…}…}…}p²ädÉÉ#sèæÐÍ!p;Ü·Ú:Û:Û:aCëËÍ/7ÃÕŸ\¼>È4„òBy¹oµŽFGÌѪ°5l5È!ë uPäó=ÕÕ’¼óà΢E"=ÑžhOTÄ6o›·Í‹Ìš?4Hd¾`¾`¾@äqëãÖÇ­"þx¼?^$«,«,«LD[д‘‰Ñ‰Ñ‰Q‘Ì»™w3ïŠÔºj]µ.‘T•êKõ‰L'ÎtÎtJ²ˆÚ 6ˆHC45šj1›+‚¡`èþ€HoWo—Héûû>Û÷uI[lV›U4Ûm>›O$-˜L Š´ûÛýí~‘Ìm™Û2·‰Ø-v‹Ý"Ra¯°WØE¶^ÝzuëUÇ”cÊ1%’‘“‘“‘#ráð…Ë$íJÊOÊ)øÁŽg;ž‰VõÓw>}çSêD.m¿´]$níbÂbÂýe;u›H>lœÊð¶ïæ¾›ƒÉ;“}“}¨ÈñÈñÈqc‹¢=Ñžȟ̌̌€ªQ5ªT¾ÊWù0ãœqÎ8sœãhW´+Ú˜2O.L. Ôþðúðzƒ‰¹ru?;u[¸ýœ­ŽùŠ:úÛ­vTõ1U­ªUµ‚ÊP*cÅÏëVnåê©§~Eþ˜úP}êŒêU½j³ÚLPýnÿÇ^Ÿ×`™µÌVñoÝÇtç_Ò׵ʵ øUÌ™Õ_³áYàLd"2a8?—è ÔTƒÀ5®q XˆÝ•ʯ|Ê,-÷7EîDîR ? ?ú–Wœ+Оwþ÷®|a_/ì{ìÅ|Áþ, m&5êSIEND®B`‚routino-3.2/web/www/routino/icons/limit-24.9.png 644 233 144 2766 13061246473 14677 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü«IDATHÇÍ–ïOSWÆh¥•‚&4d+QÑÁÆ•dÃP¢bMçªÓ¸L„™lÓ¤2bæç ™Á_™˜˜@Æ6,®"Že‰&ã…h£FUTŠÍ@A¡Ð z{Ïg/Úëeóð¼¹y¾ç{žçIÎ9Ï=„BÌŒ|D§F§FLJqôV½n\a\‘~:Œ‡ jmÔÚÛ_Ìڵ³f5¨wu¬Íký“× ¡óOÖÓêb¦Ð 1®WÔòÞ f}˜eœÆZÁÔdjS ü×ò_ÎýxîG>ƒÇžÇ€çËŸ/kóZ¿¶^ã›Ì/öþO_0ünø=ªb¦ÅLÒ Ó ­_„º¬P²ºd5À_Sþš"£ 4˜1Ëå€?Úx6 kó‘~m½Æ§ñkzš~Ø€7òßÈÖ¬_³Þô}xÁÝ“P™R™¢é›€}ìà Š_ñ„6†62²U¶EèX›×úµõŸÆ¯éiúa?úV„â  ìöNPÛ‚n¥'øfðMPÿQâ”8‚§R³,çËyr¨9jŽšƒ>†x“—HªAe¶2› 2L &‚, óƒÝo÷Cš¾¶•-B‘ñ˜ü&¿ªœètwº½|_¾O€Ýìa0ŸùÌ8p€¼*¯Ê«“ 0À€¥"©{ØÇ>™/ó ðq„ED/¢O{Øà±B¿ÌŒŠO*>ÑèÔloÌ­·v‘ýGªT#½]ÞûÞû¼2|e¾2_\J¾”|)y’!!…:öfx3¼pôÝ£sÎEvwùj}µºžì®˜W1OÛÚã—Eè¦BÜÜ ÍÛ›·ÃõÏ,{°Ln1šŽ™Ž1nKµ%Ø`NãœÆ9ЖЖЖ  Z³­ÙÖl°5Úm¯ïØÜ±¹c3¤§§CÞú¼’¼È~+óJæÆü¡ÖP«Ügígí ?û!_l]ltA -Ð?ývö·³ðuÍîµ»×ê ž.xºà)œè?Ñ¢ª]Õ®jXZ,-–p8 ¯«/«/«/ƒ¥IK“–&éõÜwà{ÛÉ’“%ïM¼¡´é=Ó{¤KœeœeT;dù@Ñ@‘~í=KÜV·a‡e‡e‡†††ÀrØrØr6ÝÛtoÓ=H?”~(ýt·w·w·ë•?*TYUYUYU°ÒºÒºÒ Óª Upâü™Ô3©<Õ¤š@QãbãbÕ¡0¯6¯–.Þ5¼ Ú¶u8;œ`:g¬4VBuKõÕØÀh(m(m(…¢Œ¢Œ¢ È|‘ù"óÆ c†18¿äü’óK`$v$v$îÜ)¸S·ÃípCÍ­š›57ÁbNô&zÁSsãØc#Ý#Ý š fƒt %A;c–]XµîÓµ§kåùèÒèRÆsÉý!÷ˆOŽOŽO†¦SM§šNMÚªÂúÂúB°ï·ï·ï|øðAN~N~N><Œyó0ŠÓŠÓŠÓ %1Åœb†/ÝÎ gã‘«²…­?¯ûyð]äŒq r+ÙæÜæ„¿]á[òtU_^_ô^ì½Ý{Ù÷gßµ¾k¨ Ôê'Nœð< Û‡íÃvñ2^ÆÃ`ñ`ñ`1ÐL3Í0Q<±jbô÷õö"åŸJœxÂzðiÕ§UÎÓã—#«çh¹ò2ǬÒJàe%H 0È ƒÀcŒ‰FetÒéÏe‹@~$¿‘ߨ½j/ùv„ÿÛΑÎÓÓÿTzµûÏ_ý J{¹½äÉp2Ëk!sÈ Ò¥Œ*£©á"õäg7_ñDI€JˆÈé“>`"ò§¨ u…ºJÒ¯ô×µäÿ`ÊS€àÿ“ÿõýW¾¶¯‹×ö=öz¾`ÿëMæK)#ôIEND®B`‚routino-3.2/web/www/routino/icons/marker-58-grey.png 644 233 144 6264 13061246466 15645 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü iIDATXÃ…—kPTW¶Çÿûôé'Ò<ÂS‰@/;b ÂÈ€‘×hÀW§Œ&hJG%"),ªŒÁë…H‘É !¹F·ÀCaIA€hi ¤ä!ò²ºéîsΞtã”U©¬/»ö9û¬õ;kýÏÞ묬¬¬¬,8cÉæ–f;̳ô>ë묯³¾¦^9Osžæ<ý“šºPê’÷Λóæ¼ÃŽ˜«ÍÕæjúnàn #Á´ÐB àŽàýLºCºCºƒd°ãì8;ÞqƒÌ’Y2{¦$Û3Û3Û³±779797™Lpþœ?çO—8„û6.gf0‘ˆd¾r„!G¸oY°,X<6äÔäÔäÔ|;b™°LX&××ׇýÍ¡À¡À¡wÃÂÂHF¸8\.6¸npÝà Øçöûöõöçíþ–ýÛâÙãÛyì|¬-ƒÑTI•T) ‡ÉarØ¿@ä/òùÿPºðÍÂ7 ßø¹¾ÒðJÃ+ |Z‚6A› e¬k5k5k5d›4Cš!Í€Ÿà|Œ0ÂàပX‰•0š}Ì>flÓ´hZ4-Ôz/ø^ð½`!mzËô–é-û/+üþ ÿ?ÊøÃüaþp|M¡)4eøMÎ.ž]<» -hñqd«Ùj¶ºå“Åd1ù%©6«6«6s‘{>ÜóážÙoõÎzg=TpƒÜÀÑ@HÁâ1ã1€Xæ1yAB@ȇ)La ìœrN9§ÄÐík·¯Ý¾ÆjjjfÛ$r‰\"ÿ¥ŽÛÁíàv¼¹oâM¼ùÄÀÈÛåíòv@ì%ö{}ú/c±ÎXç—¤Ú®Ú®ÚÎmKININIfÛœŽ;w:7®•kåZ![ȲÁ¢}èû &ÒDš2M¦É4€F4¢ö {…½`y/Þ‹÷œ:œ:œ:àf÷¯Ú¥Ú¥ÚÅm³Ç·óØùHN}N}N}âK»¥ÝÒ^×®4( J 8:~tüè8iwþÊù+ç¯À,IJ¢'z¢`†fRH!`…Vbˆ!è8§ã!#dXÒ–M躅n€YǬcÖA?wfîÌÜ×¹ëÜuކë]õ®zW¢“„KÂ%áIá ¦Á4øÜnkŒ5ÆÄvÆvÆv"Á(±ùU~6üløèÒwé»ô@ÏBÏBÏÐ}½ûz÷u 7½7½7àääˆ7ñ&ÞÀ³°gaÏÂ€ŽŸ:~êø Ð¾¦}Mû @€€~A¿ _@éœçœçœI¬&V«A‚ÇÎÇp\ð‡£.S.S.Sø,4&4&4†ãàÀ2(z½Š^PæVæVæT½UõVÕ[À­Ý·vßÚ T&T&T&Ìeæ2sèµôZz-@²@Y êfëfëfòŽòŽò Œ)cÊ€ßÆoã·-'Zª Õ„jH±ÇÎÇšgÌ3æü]¨NT'"CÞ*o•·ÂÈçóù|>"ˆ 0(”Jõ/ê_Ô¿;vì¬Z«Öªd­²VY+@ªI5©Z4-š à©ñÔxj€“'N“͓͓ÍÀEíEíE-099 ¬™\3¹f¬|T>*…Ñ7Ê7Ê7 333Ècqçqž3LS±üfR°`Á¾Ð}@Ð@ÿGýõ\ð»àwÁ7ŠÅÀöøíñÛãP„"@DTDTDPe¬2Vr]¹®\öûØïc¼lRæ=æ=æ=×q×I0#òy‹¼é-}„>BA.Š‹â¢ ʼnâDq ö'ù>†Ö—®/]_ ì[Ü·¸oxõýWßõ} <»<»<˜?2dþ`ð5ø|Þƒ÷à=³¯Ù×ì ˜Mf“ÙL©§ÔSjÀ\b.1—¼È‡m-t.t.tbQ1*FEo±²‹²‹²‹\þ ç ç 'û÷®ú®ú®z’±A¹A¹A §ãtœŠÝ§vŸÚ} PìRìRìØ{ì=öàËùr¾ ;¯;¯;<~4ühh-h-h-’\’\’\€hM¢ \u»êvÕ ¨+­+­+öc?ö&ÝVÝVÝV(t"H'ÂËeƒ²A.ŸÁìÁžìl›Åf‘ŒÆ¼Æ¼Æ<^¥¯Õ×êk¡‚„ !úÂñÂñÂq íƒ¶Ú>xQ£îÞîÞî^€ßÉïäwþ*•¿ ÈGä#ÀÓ“OO>=ùbýtátát!`ØbØbØxlöØì±fÛmEíÊÚ•µ+…H¢#:¢Ã„'<áK%ŒW“W“WÓ…LI¬$VûÍ“™æ™æ™fÑPÅlÅlÅ,Z"H‰eäbäbä"Ì5i5i5iÀ¹Gç{|_ú}é÷¥@´!Úm)~Rü¤XôX–)Ë”eöÞ5šGÍ£™—o}¼õñVÀ¨²ï§v@;ß2èKÀö ›ƒŸlÚý§úŽúŽúNþNÙQÙQÙÑ›¹³Þ³Þ³ÞìÜwYße}—ÅŸ¶5ÐNW«Æ_µ´·´·´“Š~E¿¢T‚JP¼Ï¾Ë¾Ë¾kŠ gflñÞ¶¦—¹Dø ‹‰‰‰‰‰g›j¨„J¨„ŸX3±fb þ—_ͯæW?à¤ÒiÀ}>??ïzg®o®o®þOWYWYW=o·Î[E©âMâMâMùÐZBKþïîRÃ- f0#¬´WÀ–(îe‚ß±ßÐnêQz>›VÓjZ3ÀT2•Lå‹ï,¾³øŽ°F\,.3}¢QŠ(å^s`e`e`åŸbtºÝùÁCðï?\ºƒ´›El”]]…€ºÁ5]A:`»#QL°X±…¸1n"ˆtl›5¥¢(âí’Zâ.…6FMC¬M –5ZM·¬]¥šÐDfªH¬ Ê€àcÞ›ûíÌ}óf¶ÕlvÏ?ùçžï|ïžïžˆ¦-–BL\éŠtEº„‡…˜ˆŽˆŽˆŽÜ¥².ë²~¹‘Ò)Òé0«%™d’¹„ú¬–ïçùã‡Ö—‡ò1ó+§r*ÛBã?Ÿ/wÈrGÛˆ°]Ø.l7ˆXâFãFãFñYþõüëù×u·ÖÝZw (È,È,È ú<Î÷ó|ŽÇñy½Çó!ñ·¡þœ#â˜8&ŽyÒù %–$–$–è¯5\h¸ÐpÍðÞóÞóÞ A‚„ Œcã<ðÀ~ Î÷ó|ŽÇñCëÍ9òx~d}JÄÏiy>ó|æyí7ý¾~_¿ýKe©,š^©Wê•€¾X_¬/t»n×í&?çûy>ÇãøáúÖ§ jB›Ð&´Éûä}ò¾–+<ÁVk«µÕjvƒØëÌÁðj-šSsÌÃî°;¦ô3ú`ûÙ~~„Ú”¿ßß0ïŠï  µ¨7Ô{Ù˜ ^¾ÍVkÛkÛ«Ùy}·ó#å¦rS¹ù»_ó Öjkµµš%»‡ÝÃîa<àxõƒú!ý‰€×ßìoœÄIü€ù¿ñxïAJÓ¦ô}íû:ˆævûÝ~<°V[«¬U,™ó1øÉer™\Ö½ê‹ë‹ë‹Ù–À„Ö¦5iM¦ *+e¥æ’ó;ç@¿Ö¯á¬÷lïYh\Ò¸€zqýÅõÁ¨Öæ÷îD}qýúúõl‹q²!üˆ ťĥĥ v$w$w$7ˆƒ$d! €WoÐÌœo9ߦç´&´&˜ãÍÙÍÙæ¸˜|¯c§c'€¤¯ÒFrGbGb·óãD¬9´æÐš`k'ô~é À?ߟoÆêÉëÉ€g>óÐL¤}°}м/vvìl(-(-0¯Ÿm>Û ¯D¼`èÛï¾ýÐûCOp>œŸ¸Ró•%GÉ1îX$mÆ,!¢Ÿ‰'Å“DDããDDk£×FÙ“íÉDDQ=Q=DDj£Úhž Þo ѳ[žÝb^O\˜¸ˆÈçô9‰(êjùÕr"ú(düD*íJ»Òn\y>_YÑÒº¥uKëÐ÷H˜lŸlp‚y˜ ¿çrß³!V­Õ¦ÚBZ¿¨u‘ùP¶¾´õ%s|eÏÊHz!éj`ý²k®k.ÀÒŒggÎÌœ™9}œ‰vÑ.Ú}w µ”77›$uíÆµ Š@M¿~^<øâA3‘9òN«§UÐçês`oÕÞ*°_´_ øêÀWõiÔ§€~¼ãÃŽƒõÎþ|Ñ狌ðBš&¤ùîŠÂ°0, W5Žø»?ÙýÜîçüs=…ƒƒ4Czôô¥§/Ñž_»qíF"ŠLÈHÈ "LuOu)—•ËDDølúŒÙ³•ˆ¨ ¥ …ˆh‰ˆèôòÓˉÈ'~)~IDyÑr´L$Úl 45IZ¹VN3ÊïWDVD²eVÿU¼+Þï~A191919Dò9ùœ|Î9` ü[†-C¯àŸêw°fÖ .þíã7Ço†´¾®µÎÜúÖw[ß5ßòÀïƒØÒØRÀÿ—•'*ƒ­.¹ôê½Wïù'x}i³´YÚ|­pÚæ·Þú{Jš²@Yàiâ ŽJÇ*Ç*–mÌ™ê;ê;`€ºKÝÀ{ÌvÌ}BŸ€ÿ4•ÏѦ”¦@/îÙÙ³3ØêccÇV[UÆZ#Öˆ5r…YÂ,aÖ‚†0‚Ò?ûµQØ(l|þ¨àœ‚“kÅ_êêru¹º‚ç©WèÁó b c&Ÿ±õlz°Œ–ÍÞ`oQï€s`õÀj )Êú½õ{­Ì8ÉÝÒÛÒÛ›AÍNv²ËÖ ×,Ê¢,y7µQµICÒ4ôÚ'ÆÓzÔzÄzD³¸ßtïwïdÙ¾*_°VÖjº·P¡pùËüe+ôóƒÊ7ücCÓ†&½ÂxÆåQyÔµ'~[ü¶ømD¢M´‰6áx€]1§ù“Ào¡Ô'õI}©äÉ;’w)%J‰RâÚch7Ë–eË2k×ïð; Â\îã>îVŸ§ÏÓçµX—Q—Q—Á²9žbQ,ŠeàÑ´o í´ÐÖzÂÜ/B}k”’¦¤)iîã&íV:*MÚµhÍ$ä¿ã¿ã¿Ôb/zÑ ¸¢{£{£{Y¾¡É1FŒyyW˜ß ãI_ê´›ÿ$íj]Z—ÖTîdüdüd<°ptáèÂQý—†Û¥v©ýÏ˸ÔÒ 'øSz‚7p€ÓîaëaëaÍâvºn'*TŒr¦ŽSŽSŽSÁ±#•ÊG{ÿ’Dÿ=¬n`f<‰`¸ñ„—Ú=ùcÚ]‘·"oE^P»®e®e®eøh:ÎŒNEB‘PôüÎÐ2âý°ºý—ö$í.—j¤©Æ³˜.ª.ª.ªfJJJÒ®­’†¤!G"µP µP`ìHî°z‘ô?Z¸v÷„ú+þ%l6 ›ZI+i¥ÿWb‚˜ & $Ðß¾HšHšHš ’º¥n©[8H, ëÜÿÍ,Æ_9”C9ò•Ðð›Å"™È¡Sè:oÏž^ÿ…+¬3ýa¸Olõ¿ÇðMsÊ~‘IEND®B`‚routino-3.2/web/www/routino/icons/limit-125.png 644 233 144 2725 13061246470 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜŠIDATHÇÍ–]L›×ÇÛ|91R3Õ]k’‹$KÕå†]ø‚: *J*«Õµ"( mÓHÙ„šN•Ê…£uZ•IQF<·%©¸€•6ƒ(RF¹(EjÉ£‚FV¨1”Ì%^Rá÷ãüvaŽ û¸Ï¹yõ|ýÿÿó=Ï9""R½öp>á|¹%o;_-ú+ž«xnû@Þ>g£ÍÑ–xªÎV¨é¯é·¿)Ú:®ó×׋ñ×ói¿TKÑQ>T>ä®Ùaxñ韮¨ÍÛ§càq<0áµO_ûàÒ…K8‹_,~°\BÑÖq¯ë5Þz| ÿ¿”^.½ì¸ åeåe"ðdÓ“Mõ¿Í'Ü©‡Öƒ­æ]ó.å럀 Y²è•YgëøZ¾®×x_óiþ¼ï³ÞgEàù—žÉýQ¾à›¿Â¾7|šÏÞá<`fÍ,€Õnµ³ *¦b8p@ÑÖq¯ë5žÆ×|š?¯G6žíŸöC¨"TÜ0â`WÙU`7c¨·Õ DiÉö-ûkûk0ï˜wÌ; ÊU™*ùŽïÀú5l £¬¹P.„a½j4ÍÀï5þ Æ ð@óËzA;ßÃv§Ýél ÌÚ³váhXI#`x¨.ª[êVÁʨŒÊa„‹~NsšÓ ¦Ô”šZç711¥üÊÏC³ñÙ8€;ëÎfK´ž5açnÀë=¯÷þÃ/Ôuãsãó¢ŽØcáX’Þ¤7é-òÝž¼=y{Îì=³÷Ì^HØ ;QÜÃ[‡·o…Þ_õì=ÑP´+Ú…ú×Ï~¨þ¡ºÈǯNÖG{îÆš°¯ºùrðêàUà,€ê{Ù^fuè'Cž!¸š]Í®f ŽGƒ,K–%ËÀpÜØ7¿o~ß<ìHíHíHÁ•ĕĕÔW×W×WCk´5Ú…ö í}í}ðý?Òo¦ßdumßjz`r`R ûªÛ)²ebËÄÞ_ʃƆÆùˆˆã#*¸Ë])—ïeEVD¼5Þoˆk—k—k—Hª#Õ‘êé:ßu¾ë¼È5ß5ß5ŸHmUmUm•H$‰F¢"æIó¤yRDÊP†HK¬eªeJä§?üÝÇß•r.çùåÁÁ"=PSYSiOC&IÛÞj2Ÿ1Ÿ)ISCSCSDf"3‘™¢?Öë‰õÀîñÝã»Çáxâxâxbs±¹Øt.u.u.Aÿ¶þmýÛ ®¯®¯®ÆGÇ>û°Èg×.Kh=Nû3û3Ç´(³Ål½¼R*)Il1ÇÌ1sLÄ“ñd<‘÷‚{Á-²ÿÄþûOˆòòò‹ôîéÝÓ»G$}*}*}JÄõGýQ‘#‹G,Šø”ÏöÙ"™§2VÆ*òÑmÜ0nˆh=N‘l0¼õ¥8¯O\ŸÐy¼"»U©*•œöl’M²ID<)OÊ“‰âx@ÄØ; 223232#Rç«óÕùDæÏž;,2êõúE*—+—+—E}5>&Ò¾éåôËiÏ+®•ø¥ø%‘‚žÿו\6ÍÁbW®Ø+?®ü¹Í¹Í¹Í°zlõØê1X²—ì%Òñt<‡…¶…¶…6ȵåÚrm`LÓÆ4Üûû½ñ{ã Žª° £À Y! µÆWàßЕ;ß÷¢{1[³Ö¬Uœc`wØ…¹°ª{iÃÊn¸šPQPQï«÷×ùÏš÷Íû<¤Yã»ýÛíÀª{Î=÷_sìL~COf+i%j«ÛêÆàÏL0âùÁªÔEuÔMuSÝ5¨Ôpø8Å'|‚RW-ŸåÃàoÖ[Ö[…«.Ž* •è?µaò?²wå#ûºxdßcæ ößθؑíƒvIEND®B`‚routino-3.2/web/www/routino/icons/marker-4-red.png 644 233 144 3745 13061246465 15360 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜšIDATXíWLTÙ>÷½7 nYGØUAgjŒmm……˜"šT~Í`"º‘lFÌŠ  ±&tcb–T%TjÙÖ´n;Π1¤5i×.5ºî¦AS6i³lb*3«41; 2Àøîܯðî{o&QÓ´çŸ7çÞ{¾ó½s¾{ï¢[B)¦lÎg„3ÂlÆÈzeà•WªJ4®qÿŽŠ¨ˆŠ€…iÑAi¤IHõE‡\/ã%žÄOͧlNåcç×LÍÔ¬„Rç—¯Õ´m 4βƒì IÄ™3™3™3‰?ÕÜ­¹[sØù`çƒ_©¯ÔWjùr^®—ñOâË|/æCÊ/RýÕ*SÊ”2-’Zé_é_éçïž¿uþÖù[âÕøãøãøc*T¨H`Ó˜EQÀôy¹^ÆK<‰Ÿšoõ‡/æG®×”1eL‹þY”Þ,½YzSß8úlôÙè3ŒÂ0Q DtÞÊ[y+À×ó7ù›¯æ~îøz}¿¾à­úý D…¨€.ã%žÄ7 §äw½fRc!b!"í¤vR;Ù÷µ ðtx:<zµIì°8,#®÷é}z ¢"*¢æ1…)X–DŠ@|+¾0oÄGÅ7âÀŒ7ðd˜Ì'óK>’9î;î;îoý¹\àjsµ¹ÚĚȣȣÈ#<1pâü4?ÍOÛÅñÄœ]°÷ñ> =0sbæÌäÎä¥ã§ù)~ÊB“ùd~ÉÇä§5jZãÐI9q®þ\ý¹z±ßHè!=¤‡læ0‡9À,fgpÄF±ÑN¥˜3x{ïÛ{íñ|œ[n~Bæ7+›ÂD,'?'?'ãUãUãUÜpÃ Ž¸Q•ÔVC?¦³û-Z6 çøF}£öyþ%ÿ@ÜØtß“ù%ÉO=µãÌŽ3;ÎXoÆGù(C 1³–ö„>î³û½Ÿ÷~Ë<Ë<àqŽÀ[¾·RÖñ¯øW€ LXøf>#¿ä#ù)Æ–Zëð:¼¯¹Ç2¨¨ˆ–ÒRZjŒeÁ‘zE½BDiŒ45m:KDT™W™GD4Ù2Ù’r´ Ó°qˆ/!¢LÒH#¢^ê¥^+¿£ßÑïè7·¼<_E]IWIWIîͲY6Ë\Æe\†À>ìÃ>qÀÀ#<²W¨äAÉØòÝ–ïìãÞO½Ÿ@ÕUo¤T´’WÚ´>Œa ¢PŠB¹ª4»4»4÷$?Rª•j¥úÙ÷Æ@Ç…æ ÍšmÈä™<x#o¬ö_þøòÇv-Ÿ+>5kkÖ@vSv,._\µŽZ}úØ´MÓü’Ñ#V¾ë×;¯wš7à/Y!+d…Ͼ'µX-V‹¶Ë]æ^å^å^ÅWGj#µ‘Z .*ô!}ÈV1ärÀ¶O¶}ÕŸU[_ßú:,«]V KÎ.9 µÁÚ €Äôøô8€m&Rê0—@ ùGóæMš€º\]®.ïyBYÞ,o–—H»¡ÝÐnÇÌßçñy|üDK’ds#Œ0‰œÞRÓªZ«ZmOyŽ>áëùz Ù“ìIöX­ößñßñßI&L‚ jƒÚðÏ] þ¢¥ÚÊ…ŽBGaô÷2 Ðh ´Š óüÈÖkô@pÁÄõ}æ‡ç‡íD•+0÷Þð{¶q^?Ÿ˜·^0qqêâÄÅ l3¯Ðv¥]iŸ­by,åýì|AõïæþÚÃö°=•Ý,È‚,(µ’üUx0<DØÔî!~Ȫ7ì! «^€¨Öë"> Žw¦;Ó©7š•<®W<&µjª¦jÍeq-£2*ÓŽSˆB"RcjL½ûGójívu»ºugäHäHäˆ]»&:`’K${’=ÂÉ’d v‰ÄÖ«ì¾½ûöîÛüyMkÓÚtøDnSnSn‘âQ<Ї]2ØÕKš?0ž»Ô{ê=õ»º¦eMËš"‡ßáwøÃ'Lí–yÊïû¼ïY@ÁDÁDÁĆæÍ¼™÷±ÿâù@>pE–µÎZg­cG¡’‹p„#À0 YÈbG=6ylòØDr¹ÜîÁ 11ì/Ë_”¿(Që파 ¢çCùP>”¤<æ:œ\rúp Ö` =-BÐa3ÙL6“ÿÊm¶@{zÔ¦·émú–ëæsŒ9fÅÿÈŠeŲb4¬HZ‘´"‰ä®r[å¶Ê Xé³Òg¥àºw½wé]ó]öžØwúsùwñ¸ø8ç®cžÌ“y éd'ÙIv†‹BE¡¢ÐËå¦S¦S¦SÏûø¶ø¶ø¶8ö% $ $ P{ToToT/Ùè‘ë‘ë‘ 3à@ 3Ì0ØØ A‚Ùb ±†`co{o{o;³_ ¿~)\Ø7ýÚôkÓ¯mû\* •†®;v:v:v¾ZÌ2Y&ËI'  ëÈ¡G‡z íhyŽ«ã긺ö³6‹Íb³<ŸªxEñŠâ~ú=õ{ê÷¸Óò9ùœ| øÁ~à™’)™1ˆA ° Ìcó^Ä‹x Cdˆ Ǧ0Îèiô4zbøÜç¾8÷Ÿ>Ü6Ü6ÜÆýâ.q—¸Kî6ò›øMü¦—·âe¼Œ—ïý•tIº$]€[€[€[Àÿ^57šÍϧ*Ô µBÍoÌÌÈÌÈÌà~‘˃åÁðb…X!ö{„=àŒ`ä"¹H.d”Œ’Q€L“i2 HI"Ÿê¡ŽPG(à¥óÒyéà粯xKñ–â-~£Ë¿‹ÇÅGùy~žŸOYiûÑö£íÇŒX_µ¯ÚWÍÂÔߪ¿U˹bdNˆâ…xxÒlšM³z„¡GRCjH €ä À}ÜÇ}±ˆE,/xÁë©^4"¬„•°xºì«›ÔMê&î´ïfß;›Y˜‹ÇÅGY8 gá‡7Ûì ö@uCuCuIòä?È€»,$ Éð¤å´œ–&w“»É¸i½i½i»»»ÖͺY7L0èF7ºS¬)ÖûŒ¾k°k° ¥¤””,‚E°xÊKä%ò¸«nªnªn"ÉÅãâãø0>ŒûÛ.ïïïVE«¢U¤Ô¹Rž6ÓfÚ L–L–L–•¨D%ËEËEËE`~r~r~ˆòòòÒ•éÊt%0¹xrñäb rCå†Ê €El[ÄOõÑÆhc´ØöpÛÃmáîÑ^Ñ^Ñ^¤ôòÔå©ËS8jR™T&ÕßvqÖëŒu_G¤D¤D¤ WrMrMr f8ƒ”ò”§<а¼ayÃr`ág ?[øðÎÆw6¾³><|xø0p¡üBù…rÀÒli¶4ÍEÍEÍE€_‡_‡_111 u~u~u~€aÚ0m˜¼}½}½}ÁIª%Õ’j˜—Ä/‰_Üî™î™î£øãcN«h­z²2 uŸuŸuð`øÁðƒaÀØmì6vGtGtGt@í\í\휞œžœ¸éÝônz`,|,|,˜ÕÌjf5Ïèw×î®Ý $ÞM¼›x÷ „÷…÷…÷Ÿñ¿n§ÛœÄIœ$áT( ²ê¹¸¹¸¹8ܱÛÇíã9'0œÇyœxoâM€¥ËÒeéÞо¡}C Èär ªµªµª˜º2ueê @¾!ßoó„yÂ<ñŒ~QÀ¢€E@µ¦ZS­ ý†~C?@Kh -sú™ºMݦnÜ¡ ª  VMÅŸŠ?ÊÝYtgÑE¬úÖ×·¾¾õõ“•Y˜†i˜àñÇøc@â¥ÄK‰—€˜¾˜¾˜>@]¡®PWÄŸø`tóèæÑÍYJ–’¥€ê¢ê¢êâSý–²-e[ʲ‚¬ +€‘í#ÛG¶?õ§KÕ¥êRݸn\7ŽŠïˆïˆïðEj¨¡Î×py\—Gr[¶l=èP”¥A ©8Iœ$NÂ\@[@[@Рÿ@ÿ'†Ñ+í•öJÇïŽß¿JR£Ôþùþùþù@ÿÊþ•ý+Ÿê-ÿµü×rU¨B˜˜˜«óµ´^S¯©×kˆŽèˆ_qG¹;ù*ò«È¯"‰¶‰¶‰¶ÊßM»M»M»·‡(eJ™RæÈɪȪȪeŒeŒeÀZq£âFÅ xðFÞÈv’d'u±ëb×Å)A)A)AÀXãXãX#Pq¢âDÅ €ïä;ùN€eGÙQ`ýë?XÿØë†× ¯@j×Ö®­]+˜¯tý£ëQ©”J©”þºÕ®µkíÚÕ'È¡±Cc‡Æt¢Á%nnn’ùÆùÆùÆç3sssYbj|j|j<ùɰܰܰìnùÝò»å þAþAþA@pPpPp€HD"Àoø ¿³…³…³…ÀpÚpÚp°0naÜÂ8 Äb ±Á|ëÀ­·àï•û+÷WîG½Ô&µIm^c"&b¢ÇR,ÅҾݔj¨†jD]ô8=N¿/ CÂÐN›ôŠôŠô ÐQßQßQÏ"G|ƻǻǻ–˜Ÿc~ŽùùÀD @=êQ  H¼T^*/›››ýpnîÔÜ©¹S6¤6¤6¤ò w¸Ã™!3dæ @V“Õdußn¡E\ˆ³{r¬zÜ7r‡É.²‹ìú)›¤’T’º/ïâ]¼ûù ­^«×êyyHJHJH ÷¶¼IÞ$oœP%T U𤴃vð|\ÅU\ØCö=˜ŒÉ˜ V x6žn<ÝxÚ‘cˆ6D¢¹’I ’$) Û¶#lÇç—òòòÉY aC|½«•a£åoc/öb/©‹¸q!âBQš8Kœ%Î:ShxÁð‚áÎx.í\Ú¹4GŽsž'™"Sd Ö'5Þ ,O?g›ÇœÎãšîšîšŽ%vÎtÎtΈŠdÏÉž“=wï‘í¬í¬í쇟Üο;`:¦c:x9­|ç5;¯UÂa°^=÷{î÷Ül{m{m{?üDæ-ó–yT h´ZQQÓ–¦-M[X"É&Ù$B¥P)T‚A $›e³l <á ˤnR7©Ã™–e-ËZ–ÁK¦—éez@ˆℸ?yz÷9C±Ä™ÆS\€¸îü%ñpÞ:Ó…¨-hA‹#‡¬!kȚĴǿ—/Ø÷Ø÷Ø÷ÿØ&l¶ t}Ôñ¨ãQDZIèú…~HéRº”.…•Ïåsù\x|©üRù¥Òñ¢~µ~µ~µhP¼L¼L¼¬híãfß/B©P*”r%ΓuÕ(ÏÂÂÂÂÂB̹vή|æl¿9ÎØ-!Ť˜ÿô#UQUí«C&2‘IOhíZ»ÖÎï1–ËŒeRJ)¥˜uíD«¥ÕÒjÌ÷Jï•Þ+ ŠŠŠÞn°Ž[Ç­ã?LLLœ€ W>uºøž€þØ%: üÛ»"ÎGœ8_”&Þ%Þ%Þu¦Ðh4rÆš¼š¼šcŸ±}Öó]Ïw=ß9ÖÍÛçíóvÑ^·õnëÝÖÂÊX+û¡ð€‡h3˜ÁŒä:çFñä!ø‹ñ'±[€&4¡É‘ÏêX«K¢µ´–Ö^ {ôæ£7½)¼äVêVêVJûD™¢LQæ¥6e­²VY»!A7¤Ò ‘ þ‚¿àÏÊvµN@óŸqPüÅøCì:Ó…#ÙÈF6wƒd ’qUÉšXkÚ¿C²D²D²„ö‰FE£¢Ññ%Â1á˜plÏýþ­ý[û·æ´çj,-ÅñÿŸ xmf°õIEND®B`‚routino-3.2/web/www/routino/icons/limit-6.1.png 644 233 144 2456 13061246471 14601 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜãIDATHÇÍ–oHTYÆ_u§uPÛt+„v• ‚¶úƒF´D]°Â•a´l_’"Ø` ú¤‹«A„µNئö÷K…+!” ÆfÖ;¤›Ó”Ã8;Í=÷üöÃÌ{k7Øž/ÃsÎû>Ï3÷œûÜ# ""©_Ìe™Ë2ó’8³Éž÷l÷lÿâç$>§ 㛌ož~ùíùí »v™Ïll­[õÎ~›ß©gÍKØî^woFe Ÿ‚Ý+w¯ô%qëd÷e÷E 88ppàÚÅkù¦‡§‡•áJ°±µnÕ[ýŸ“_N}¤/®[®[‚{{”l-Ùºü»dÁË¡vgíN€É¬É, ê5àÅ«+¬1ãÀÖzªÞê·ø,~KÏÒOú(¬(¬ú=õ{²/$ž]‚–¥-K-½Dp†3xÁˆµWí%zHAØØZ·ê­~‹Ïâ·ô,ý¤ùpoÛ¶@ƒ»Á Ì$~…ô~cØ&a<1bF mšfÜŒc1bÀ;ÞòÖž6+ÌÃæa´>mLS$À,0 œü že°m‹c+ED¾ú²§³§#Ÿñw ˆ¦ywð¥:­N3§C,f±ÃH?ýô‡8Ä!þ5ÔKõR½ݧýÚïXˆ˜õf=si~*  ­Ÿò“2vî!4Ÿl>™þŸ«ô¥Dg¢3M§_Ô½¨zQm·Ûn·Ý†Ñ]£»FwÙzzTêQÐwô}ÇžêêꀉÏ'r'rírý q3qÓÖ³õ“~RÆž…žw=ï@¿ÐûSñðªpY¸ Ö®\?ÕÕÕ°á͆7Þ@ðXðXð˜ã‰Üã÷ ××ëëõkÀ5à€žªžªž*Ç­Œ¿Š¿"uô~Kßò#7˜7¨{azõôjP{?ÜÿOþv;øÊ|e¾2hÌkÌk̃ú„>¡!Z-Š9ÎÔs‰¹®º¯º¯º¡x[ñ¶âmp¹õrëåV‡±:£È(r*%õ-?™"YµYµ”‹¸®»®‹È_""JAQ}ª_õ‹,_4¾h\dÓØ¦±Mc"ݺu?ÉÉÉ–ôPͪY5‹4Äâ q‘òhy´<* DZ°]'1)–â4 ¥õS~2EÌæŒßEŒ:£ND®ˆˆH¡ÕáÝá­öV‹x÷y÷y÷‰4•4•4•ˆø:}¾N‘à‘à‘à‘Ù³³ggÏŠ¨ujZgëë1=¦ÇD$  8Œ)y.ÏÓ¨0­Ÿò“)©ŒTþ6"òàþƒû"YDD8 qó¼y^Þ×­o©o)õ”zJ="9žOŽGdMhMhMH¤¦»¦»¦[dsÍæšÍ5"Ѿh_´ÏÖÏéÈéÈéqU»ª]Õc_ë|/ïSÙpÀÒOûùÔ[IÀxl<¶ß"5§Â* 3+fV̬³Ëì2»@ëq=¡ã¡ã¡ã`¦aöÉ™---…¸;.q±ù¸eø ¿Cï¿ßJG޽Ä1GŽ5ª»ê.s:W¯ÕkñP¬‹u1PAŽ3'Ž3xù›fãÿα’?™Ä RÉÿT=®˜¹f. ýPÏè4¿àÇÌ% zJOé)àA‚…ld#šÔ¤š$‘Œ^ añ2ùçí·rÞÞ.æí}l~Þ`ÿ¦båÝ9SaIEND®B`‚routino-3.2/web/www/routino/icons/marker-28-red.png 644 233 144 4240 13061246466 15436 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜUIDATXí—mL”WÇÏó2‚¥Ùˆ2`,»à …UÖTA$Mõƒ.Uh nˆ¶Å«‰ Y@°‚]Òiñ%5SvM¥JuE#»a­µÙÅibu ÂÈË€Èð¼ý÷sŸyf²«Ùìž/̹çÜs~sïÿÞ;ÍØ< 2~u˜+Ìæâžù"f5ÏjžÕ¼.]TDET~8M©”J©ÀLX«"‘D™ûZËgóY=V?¸¿:˜ÇÈ·—öÒ^Þ_(6‹Íb³s˜ÛÇíãöé æ¨±¨±¨1\Ý|óýÍ÷­}[û¶ö[2¶dlÉø,ÎòÙ|VÕgý^ÌCüª`É'ü8?Î÷¦²Š)Š)Š)Rö7t6t6tj¯xŸzŸzŸ @À$&0 ½èE/ ûþ8ËgóY=V?¸ß’O^ÌG–¹|?ßÏ÷÷þ…ÈèÈèÈèë‘<’G‚~Ó’µd-²R¦”)e€’¦¤)i€’«ä*¹ßgùl>«ÇêëÀAý-su4ÎÉ99'‘xL<&sÜe¬UV»Õ.çê`hGµ£ðÊŽéƒÓ­WúYúÀ´rE¹8ˆƒTÛ´:¡NZ¯ä‘<€ìðåøríUQxYšµÊZa­sYÆÃøÈôÈôÈôhýoX‚別ÒR©Å÷ õ<îyŒQ¯r\:!Èx!A2iåZ9 % 2æjT¤SŽË—äKºëíêéÁ¨åˆåCˇZ<ãÑùÄÝânqw×1¨+¬+¨+Ðvú LÊNé¤tÒÐÁwïã{À™„3 põ««_€” %àߨOÝ?uÀ™oÎ|ÀwÙzÙ SíSí€ìTW««õäɺººBm§¾²A|¤ F%E%E%¡jxÝðºáu7Ü˾scgc'0sî Êe1úë/®¿hlªhª0Æ#¿‹üÎà{3ë3ëÄN};õ­>I^÷´ôi)Àxýã¦êMÕ›ªßLñ¨]j€A6ôÚøkãðÎþwö¾?õý)#Pgyg9ä-Ê[IÝIÝÆüîkÝ× ùƒ_×](c&ããýG*Ñ”mÊ6eëg,ŒŠ¹kÜ5"ú…4*åÊ9DD´ëÑ®GÆ›"<,<,èêð‘ˆ(ï^Þ=""÷ëî׉ˆ6´mh#"z»ïí>"¢ôÒ?"¢ð̶Ì6":T#ÌÔdj25éGžÝ¯Z~zmzmz-NqSÜà.à4ü^ûQûÑx¤ÇÒc¨ÉªÉ€¹•s+ d{Év㢾xø¢q¥W¹W¹ îxÜq¾W׿ºÀÅ£ZỂd³3ægÌϘ‡Œø\>—Ï•üUg÷žÝsvAáìãƒ;îð¥mLÛ±ù±ùðÅÀFÀqǸıjÓjÓ aý&]Z¾´PÎç%æ%ú]¯iëjëÒ_À]\ —Â¥H$,– ËÛÙ)‹]liµ´*Kz~ç©ö4ëÕ²Ò'Ò'àŒ72hC_}iœðMø@î;`ñû‹ß€â¡â!£úî½À†ÈòÈr(ÛW¶¾I8ép¢/ѧꀰ@X ,øl”"²#²#²‰Äâ ñFc¿~áoy³îÍ:¥z6ô Pms®Ì¹\\×`rÖ­Y·€¿Íß6nñeóe3Ü|ró ðŸóŸðÒ º`t&Oý,}^úbÛB¤øi_½x@¨5h·€+X»™kä¹FvÏ©%®vW»«= ]¹]n—ÛÊ}ý<úy4°llÙØ²1åWº›„&¡éO+™ÔüÒ Œ¤—X hwP4h·ÆRc©‘Í===|ðÁ‡1Fjk±µØZ׎X/Ö‹õnÿ¿$³ÿÒ×?N¯¼ 0ÔØ„m~í^úOÚ]³qÍÆ5Úu­t­t­Ä¹™¸¦ï—Ïåsùk·áGBúrô_ÚË´»Z° vÁޛƀóäÉ?¢HžNžNž–ÿ®oõ 0( ÚbÈArÿÚzBú…Ñÿh¡Ú­ ö×<àvp;¸åPå¨KùEü"~ÀG]»;;;I$t ]B׿Ÿ˜²sÿ73럲)›²Å»ÁáC…¼Æk¼p­\+×úϸ™ñ_ºBvÆR÷¥[ý/À=€)w*Æ•IEND®B`‚routino-3.2/web/www/routino/icons/marker-73-red.png 644 233 144 4102 13061246466 15433 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü÷IDATXí—mlS×ÇÏ}1pç%‚&gñÒŒ¤F0‘†óâ€: *R‹5í>8¨RP6ñ–’DDA¡P§(ØFa¤@Òf+/Š¢°.†Ò -¶¡¢I ±&Žï½ç¿ö¹÷Úê@Óö|‰Ÿóœó±R¬+û²À‰-Çåã2}?ž ,¹_d¾È€¶¢¶"‘s Ï-w™» Z­F8ç<çÿ=ÿ==w÷Åî‹ðé¶O·ˆôÔôÔhQÉ-í‘ö¨nøÄ–›Ol¦ï«Mà#t$-'-'-‡ž¬ X-²F‹G‹„L¦ vrQ˜š35G?~Uº*@]v]¶~|Æë3^×ù¡=ûöì•°Ò“•Of?™ 0ÆÇ@ë×^sxÍaí›É^%UI0‚ù˜Ï¿~þ5——ëso¨ßP%™%™yy¤¬÷×ûõó+ÐÅGƦMdop˜ñ0¾8(.:úýŽ~MBr±\,ë×*o*oêýÎ;`úœésÀûÔûToý¬õ3¸×p¯Îwžï€üŽüX]¸ºÀf` ÿQ)WʵúŽ%Ž%Ž%ê½}‘u´<¯1¯1¯ƒãÜ8'. í ø=¦ÃBt+ݪ±ôZz`—¸KÔG×E×éý;¶;6î wuŒ¼³üåâÍ¡¥Gée«¬©ÖTk*áí¼·G‡ÙSw¶êlÕÙ*¦LL›˜¦«ùâÊW ¥6¥¼mÞ6=XàRà\èºÐÁ#Á#zö{ƒ°|¾mfÛL­Þß¾Jû*Míä8 gá,Ña",– KkêØ)Ëš5;k¶<Ç·Þ·Þ·^M¢EìãÛ•oW Ö£Ö£ø{| š7=Ö«ïÖ[7¬fñÎêÎjDÂñpNMvav¡¢>Bº.¤Ÿ%Æc‰±„ñšxM¼Ö2¤^øŽâÅåªB]Ï«žW!1ݘ \»þv–ÿýAï»>q}¢ñïñïMq¥¸åä»óÞ§mµóïÎïß+a°B¨*þYóSØ©g–yÜ`1X ÿ¶ÀU»»gwÖO)õôåÓ—A©¿ÐÞz”Æ:|'õRéíëí€3›Ïlä-=ßô|£õ÷ܘ»Ô]ë/!_Ç×ñuã+¹™ÜLnæ¯O% ÿPŸÔMÜ&nSq×µp-L+Ê6O·ç€ç<ªvwÊ—åØS)CQ‹ŽÏPú}Kã¥EÔAš”†Z{x Èšb®0WH•j'÷ ÕBµË¦¢Ù‰ØE³ÆZ@ H¸—¸‰›¸ FŸàÛuI}Z›Ì¼™—L¾³³õÚ¥y4O×A¶™aô €GöÉ>€–EoGok_gã­E‹äê ôL ˆϾŒíÛ3¶ÂÛxoãÎÇé¶0Ìiñ¿e 0( rs«çVÏ­&Äà48 NÏ>U»¶[^»ŠKq!<ðxЧÐݧòy¼@Óbã²ÆeËh‘ú–› &ƒih<þkiJâNs]I[O¸$÷F¢ožӮF]W­«V§]“d’LòXy¬h§=<€ ž”””ºVÕ¤‘7òÆ J’âñ$¾ÉäåBc’v×þŒv»=Ýšv¥n©[êÖŽÒ‹Œ/2€…Á…Á…Ay¾ªÅV¡Uh=šÏ¤—^2à/È+L›ÀhÚFtÚm07˜$“¯Å×âkAÕKªÃÕáêЮ±Il›âÿ’¤ô&Õ“©¯L6¶`C\»ùOÚ-,-,-,Õ´ëÉ÷ä{òñçXœª;Á•så\yqMbþiR]Žü—ö*í®ê„:¡Î¿˜—ï/ß_¾ŸÉÈÈîª[="Œ#®LÒLšI3‰_;‚/©Þdò?Z²v÷%ú…ÿâ¶r[¹­YEV‘UJ6?‹ŸÅÏ8ÂŽüõFV8+œ&Dèú„>îËøÂ²¤û¿™IýTBJH‰ømbøƒ-<å)O®‹ëâºý*6>Ï“´3Þ¤¼¯Üêræ§Û” &IEND®B`‚routino-3.2/web/www/routino/icons/limit-10.8.png 644 233 144 3032 13061246471 14652 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÏIDATHÇÍVíOSg=}·ê`mŒ‘3°•1DÑ…FplS2§#MÈðY4Ng–["æöá4$snš±@"ÅÅÖˆ2Í‚ÉD[!!€v¥Á¡å¾_×Óõ~@ºKÜ%ùþÎ÷w:Ï%\$eËÖõä6’'y’é¤")Iª»Ô]Œ“¢Gô$M4‘Öóz½Þ¯óéüºž®Ÿðƒÿ¾ÛoJ)m—·Ë †zµÙ&ÛHñ©T‚Ô3Bä‹Ub©Œ)£Ê()Žˆ#â5ÃIN. ¡=–eY¦¬ŒÊÙr6©© ~rûØö1’RRáUJ×@:ƒÎ d%•>*%Õ!’ä»âW%ªD9» QÀ×ù:Éu\Çu)F6s37“,cËŒ°˜³b–äW¬g=IŠQÂY~“à§'Ôê%I§ä”$+o$ü$ŸÔÙdíñÚã¤è"I­@'îù¾çbÏEŠáëÃÝÃ݆`°1Øl$OÛNÛNÛÈiD1¾5jO´'Ú÷7õŸé?Cžºwêî©»÷×ÞûùÞÏ Õâ¯ý9ûsH>Oø¯ÀÝOØÔüuó× ÷YÓên¾Ú|•qëgÖÃÖÃdëXëXë©ÐhÈü™ü™üru`u`u€ÌçÆsãäT`*00 ]»|íòµË¤{£{£{#¹»|÷[»ß"³_Z½´šñ¾œáèpTÔùù¤ú$áÇ ³ë„넯ûKKÚÀt–Å–Åpdåeù²|@†;Ãá:—t.é\8n;n;nþÿ€ÈÏÏ®„¯„¯„±°d¿ì—ý€³ÅÙâlÊ–-? ,½µlrÙ$s%SŸO}n:ø ü€ÉŸN ûŠÌ(·œ±œ¡°´D1 ò¡¹²¸²ðŽyǽã@ìfìfì& î‹ûâ>Þ—Þ—Þgp]AWˆÕÇêcõF|Ú:m¶xàp~ÓùÒó¥@t&ê‰z€—ofåfå"˜?2 Å³Äè5ChíZ»iP¶)ÛØn˜Sœä$ «²*«@Î@Î@ÎðtåÓ•OW‹=.Fí£öQ;°¢lEÙŠ2¨@м¼yyór x®x®xèNëNëNì'ìØ?úwªîTÁ XƒÖ ÀÍj\›Í0K›¤Mý×»®wx ¸'ékÞuÛp€XS¬)Öø†|C¾!`MæšÌ5™@^a^a^!Pé­ôVzÂHa¤0¬ßº~ëú­@Ý…º u€ÞùÞùÞy 뇬ﲾŠÄÚÐÚæ«Þ©òTy¸hïiï,±9ÿÏÔ]YW[Gòо+µoµoÉgëžíx¶ƒ"ni1-e×5h ZŒ FIQ-ªE5)6ˆ bÙÙÙB²ƒì ãããɉ&N<¤¹òˆ’]ìbÉ牥Ãb˜ä\²¾VýMý²¸®L($ÛôÉŸÔ›ÿÿäqÿ•/ìéâ…=½˜'Ø{NV„§OIEND®B`‚routino-3.2/web/www/routino/icons/limit-12.0.png 644 233 144 3045 13061246472 14651 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÚIDATHÇÍVkLSg~ÚS)ÅjÖʼn:^ "Ó&³d5ó™¬`L ÆÍ &:IœÎÓÙ·iŒ·,ñ–8Œd ²DIŒ(2ïg…©µ "Ó³vОžïÙrÚj²ÿ~Nž÷òËȤþ}ýûúÔ(Ö·'–üÙäª(>!u…ºÂûÛÈ´}iûHrÌÑ1GÕq¬ùµøÄ| Ο¨§ÙaAÜ`¬6VëòGp¹|æò™ÉïEñOM¤©ÖTPȵukëHòÌñ3ǹžô_ó_#ÉÁüÁ|2Ž5¿¯åk|‰ü¨xC Gu^×C“ŒI™± cÁ¤o¢“È‚%KHò±ôXz’$#ý$Í4‹|’2ejçyÖü#ñZ¾Æ§ñkzš~´V‡ÕËV,[a:Mxp‚Üœ¾9]Ó ×’¬d%ͤ"+2IFVFVr˜M¢‰$©£ŽŒcͯÅkùŸÆ¯éiúÑzðzovRv…]áXAÍêü°!l Å6¥[馿ê=õ†zƒTz”n¥›T‡Ô!uˆL¸;?ý1$Ä<¥X)fXñ†Ía3)ÖEùI—ì’I¾ѵR€Ì½¤é¡é¡l 99ÉH'Ir±øMy®u>u>v¶ìlÙÙ¬Ÿ¿~þúù@¤3ÒédŸì“}@úìôÙé³¾¶¾¶¾6À÷±/Ï—ôþÞ»µw+y!«8«V HtˆVѪëÐC/*zïp¹ñr#€€kFê ¥ e(e0{Í^³h¶7Û›í€jWíª¨)­)­)2®g\ϸTõWõWõER‘T$s\s\s\@^0/˜2ggNÏœ|ñî²Ë^ äP潚÷Šk€sÞs^@_œœtïFâTn/ÛNòœ6•ê/ê/äKõÕ¸Wã(B£C†^7¼nxùL}¦>SI_¯ÆWCú-~‹ßB///‘ƒ3g Î Õ~µ_í'E¡X*–’|> õYxjx*ÉȈ^¤lSÙ&’CÚT2¶Çü&¿l Ýw$6T‹IµD-‰ï1’ÃæÿŸ0ñ5L’›XÎrR•EªH%I‘"R_Žðor÷º{IÒ4` ìym%l~¥H*Š{¸™¥Cé y 2b˜?°Žu¢JÇIñ§h-¤¨õ¢žäwÜÌͤ‰€|Ý?¼ &«É ‹;J@ h 7“E†"ÉЛ›ÿíýW¾µ¯‹·ö=öv¾`ÿîtpöµoDIEND®B`‚routino-3.2/web/www/routino/icons/limit-17.6.png 644 233 144 2770 13061246472 14670 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü­IDATHÇÍ–_LTWÇsg¸U 6P‘¥™…Uì$S;ú@ÓÅp@bmºi)SC©Ä4>˜Ò´±S“>ЕR£1ZÃêƒ-‚Úh% hR»[þØ)RرÙq™xS:3̽ç³Ãe¦6ûîy¹ùþ~¿óý~ï99¿sDDäÉ寀öŒöŒ–™ÀZc2ž^™^ù—ó |ÚGµ£z¬²>Éú`mçÚNk2‰í¼]Ÿ:_$ÉŸªgÇåIIÒ.¦]t”-ãáµç^{.='ÿ>zÞókÞê{« û³îÏxæoÍßX([(ƒ$¶óv½=ßæKå—ÑU—W]vÌ@š;Í-ž OEá¡DÁT!¼²û•Ý?;v* ÌÿkX£Ê{„R°_®·çÛ|6¿­gë'üd—f—Š@ÕëU¯ë‰ “]Мߜoë-õñk nÄ s¯¹—(¨!5€$±·ëíù6ŸÍoëÙú ?òû½=QޱgiÏÒŠ¡kk,‹€4 ÍB–È ˜bTü×x8sŸYoÖƒ©™š©úB}®>çÑ¡TCüýøû,Å¿]Ê\ÊËHðÞû{îáeý•­4DDžmýýÃ?–ÿXæ/©žøb|‘Å ƒ!þÿˆ!’‚7°  ¨µ jU-‹ô&øy;8Ð Ý0\~–Wêô04½Ûô.¨ë–ßæ\7¸qp#j/羄{®{®{.homomo…Îýû;÷C×®;]w`ºwºwº÷~ïþíîËw_†—OôŸèGÝ®ýfä›;kùÕÌÿ?ðß„ኈȷïpæÂÇ>^Yù†‹Ù®\¸BT3´_´_ ÿxÿñþã0 Œ øXñ±âc°#´#´#Ò!Ò×Ü×Ü×ÜIC¡¢PQ¨Jn–Ü,¹ »~Ú5¾k¶Ý±õÅV¢³uÆ&c“j€î‚î°B ?.Ñ2ßË|oË r t¢tB·ˆˆ£C¢Î,g–HîîÜ7rß1F¹Q.âð øDFeTFEäÔÕSWO])X(X(XÙÛÛ“•1°n`ÝÀ:‘©ÃS‡§‹TþT9]9-⟾ûùnIËÎM¯I¯qtˆ”£~Ë k3ÖfXš ÍYºrì¨ðUø*|pæÜ™sgÎ%Wb~r~r~|ã¾qß8LÞ˜¼1yã[ص­k[×6ðZ^ËkÁÙÙ³³ggáO·òúòú`àŸÃÛ‡·‚Xa¬¬ô̧3Ÿ¶&4QVŸÕ瘉WÇ«EÄ-""Ùö«'”®tK³4KK®ÄùÚóµçkEr:r:r:D¼eÞ2o™H4/šÍ ûÃþ°_D¯Ö«õj‘ _†/Ã'Òèiô4zDr¾Îù4çS‘¹wæ²æ²$[„CáÏæ÷æ÷Ž M4#`¾¼>x]D6Šˆðæ²~luÃêºÕu"îKîKîKIcC[‡¶m©òWù«üɸÑcô="¶@[ M$p2p2pRÄëñz¼‘'t‘-c›{6÷Hloc]]?oŠô6ô6ˆ8Wý–û[îw£©§òhÓQà’}*­6« þõá«_EE&"·#·“[>>>‘üH~$?·”¥,š4?hS1ë uÐ:!oh}h=ÊÚ›‰Í$O%ÓMEMEvÃ==¼lìÙvÐçõyÃA3h®è¼Ö>k_Jƒ(ÑÔB -)8FŒX ÞG=õ V+ò¨Íj3‹jý2Yp,8 ‡õ°áâ_¿ëc)?^ã¬q&;?9ñ`<5gÌì;A¡ãÄ ´ð¤ù7³Ì‚šS3j–IÑkš¦É’Ž/ĀؿÆUãbvþÇ÷®|l_í{ìñ|ÁþrÏÉzjéIEND®B`‚routino-3.2/web/www/routino/icons/marker-home-red.png 644 233 144 4172 13061246467 16142 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü/IDATXí—LTÙÇÏû1 ;-»~8È[«bPñg¢òÛ]ÁÄYwVÌ‚DWW«è¢YÃ$.65¢Áu[ÓdÇjbƒAV–˜†5i#Ù˜™Ed ³¢ÌàÀ ïÍûöÞ{óf¶Õ4íùç͹÷žs>ïÞï;7C4c¿ c×EZ#­‘Væ•<a‹°EØ Vñ"/òâÃ?ÒZBK€™i©‰xâ‰W| Ô—š”õJ¼’OÉZ]ʣ嫢*ªb-¡óq¿ám¼·YƘƒÌAæ  ¢}û·Œýïǽ|øÄ´Í´ 0­7¦SŸ|°ìƒe€±ßøÊø ˆuźpK‰Wò)ù•z¯ç!vm¨ŸÚÂzXëq.QvhNÅœŠ9â§z.ô\è‘¢ÝÏÝÏÝÏpàÀÁ‹ L`€N8Õ—ç•õJ¼’OÉZ/µåõ|d˜Í³Ãì°ó¯J‚õÝë»×w «íÓöIû$ìMZ,ÜîCkg|qYN ¾{ð݃€¸¬­«­ Pæ¥ÅâQñ(%Þ>m—ììJ~8¤¾a¶ŠÆX c!âOð'øm”€¼¦¼¦¼&¡P;"Ý“îÁ-´ùæúæ’Sžð;9'©ß¥~ 0Ð=ºÀßþ^û{ÁõBÛäàä ‘öJ{áVòç5å5æ5 …J}…Gá#ÝnH7´q¹²ÀPo¨7ÔKó?:ì;^ÊyÜâþ·üo!hnÇŽ 5!5˜Q/D|ñ°çÙóšqwûêöÕÁpñ‹)Û”M“íGǨc/ õ†:C4OáQùøýü~~ï eâ\ù¹òsåÒn9W°LGOGk}›Ã))ZÀÈÏ#?n·tźbÐÍÖÍÖ¬óµg´gÓ ™¿Lu½J}ugCøHrŦǦǦ£i¬`¬`¬ ˜IÊ;LL@Ê`Ê 9Ïhwî§Ï&jJ¤Dí_ª½T ¨ùåzccc€Â£ð) '77onÞÜ|3ÑîOö'p)C;zvôhÒ–§-€ÒÂÒB0öûÀtÛtJÒJÒ üQù#X»víZm|B]B׫´Wi€hö*< Ÿ Šë¦‡¦‡¦‡A ‰¹‚^Ðkc]Û]Ûµ…¶,ܲP;/抹¯óm l ´ñ–¥–¥<òêcþ}þ}Á`S¦)Ó”©öíë¬üãÚpÏpÏpÙ}¬õ±Äq{¹®@;åwñDí‹Ú§me| ŸBD4qkâÑ—¿ÜHD4qcâÑÖ=[÷éwêwyÜ·&Ü™™IDr§¼ÁD0$ƒçrºœ.'Ù>b ÙB¶pzTÞ⦋U«.Vi$0Ký0¸ð);RY[Y ßä“¯Ý©Ž‘Žhili€²ceÇÀÜkî (ë®M\›Ä+¡GÞuª«±«QÝÉ=L“ÁdL·‚[Á­¨iP¾²¤ä¤ä¤d1Õ±ÕžcÏ ¶)Ç“æIÓI•×+¯@wIw‰ÔvÒvÿÆäq¯¼®èëÇ_?V'}^xr=¹@zMzMzM@½¸8.Ž‹;ÿ’bòcòcò‰ø»ü]þ®yXmø¦ì«ÙWÅCJ¦@uKtK4|°rvÎÀ›ùUæW`2w€;E«ŠVÀîÇ»ÀÇm·pí(Úà%»]ÎoIÙ’ @+ZŠû•ɕɯ ¸‹ÛÅíúgñŒå¢P›sV—¡ËÐe8ÿ¤T×)=R*åÄ@" ür´r´à:ê: À=Ü0Üž3ž3ðôÎÓ;à8ã8Àçhv4ÀÈê‘Õ€X>V2VÞãÞãðþÙcöš½(R¯Ðö0{xª€I`˜„…¹ꕺÙÎlÏmeÌŒ™1+Z üÖÚyuéÕ¥°ªÚ=XX©9Y_ØIKanŽT#Õ¥4léé’fÍ}{îÛÂ~u'븳ÜÙê<­ ©7Y³(‹²ø:²…,Dœ‹ûžûþÓêÕÚjH3¤ zÇgö.{—V»wï€4%M¤Qi€W’†X¥f©ŠŸ> ¾NéßK©”ÄCê 4ÁñcÖãñâÄ bóØ<6¹"Ó•+˜?“ŸÅÜ 7È 27çžwxÞa"]…®BWa=®j7+/+/K«Ý@u >Xa…À ¼À M7/Îç÷÷ôÊÓ+O¯”rÔ»\¯ÓëôÃS3¾aVèI3aGOL˜ûm¨o˜5£]Ç• v«k«k%µ/zA/èƒ@gggÁ¶Ó‡>ôÖ¨¾¨¾¨>ɨj2†ac¶ý.LŠgÃø"éõÜé0íª]k§µ3¨]¡Sè:ƒÊŒŸŒŸŒ/_4.þZÕâeî2wùk©ÉÒ ü9½Á‚ ”Aíº8—F»§ § §½Ãì0;Ì|ðÁ‡q…´úfõÍê›Á¶Ã·ò­|kŸü—$êoauåqŠ~`¸)Ûdíþå?i7{Sö¦ìMAíZ×X×X×àÒ̼¤žSÆ”1e¹5¡eØauú/íMÚ]Ç5p \ƒs™\V_V_V/ý~±±±_ø‡zÔ.ÎŹªçPµQÉm‡s„Õ‹¤ÿѵ{<ÔÏ`*™J¦  ´6°‰l"›0ÄCw¾Mò&y“¼D\/×Ëõ2·åÀâ°“û¿™^ý•Où”Ï? þ¬œ•X‰•¦ƒé`:žÎÿ•5ìdìayßxÔÿ%©Må¿z*IEND®B`‚routino-3.2/web/www/routino/icons/limit-21.5.png 644 233 144 3024 13061246472 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÉIDATHÇÍV[LWþfѽ”«ŠÚ*…º}Ð> B¬ €vu[R@j U¨-^@£EšÔ¤µiµ1 ÑH‘¨ÄX xI»6åbÁKl]³!)—fWJÈÂ*;³{¾>ìŽKå¥þ/“ÿú}3gÎwH@„ÿ Ró¶æmM˜Ï×|ˆëSõ©ï^ðù§=¤ô©ôéß’á¥á¥$9¥rJ¥×ðÕ¼Z?¾Ì§Æ@@wIwI2ùýäšØ5±úé>ÿhi¸l¸<ªùõùõ$Yw¶î, É[·HrÈ4d"¾šWëÕ~uÞøù8ð >@NnœÜ(õ:­N 1Æ|hÜá+è2’™é™é$ÙÔ$4$Iz$C"L$tRµgã|5ï¯WûÕyê|OÅ÷ñùAä¹zÝêu† _ƒõYU¥âÉ—Iæa†ŠSq’¤'Ç“Ã1R4‰&’¤D‰ øj^­WûÕyê|OÅ÷ñ ,¥ Ž™É,[–ôv’¤ÜªôÈïÈïÞJ¨JÙÏT¨”½Ë½Ë¼ËHqP9Þ<ôl¢›n Ï>w©»”²ç=¹@. =«}óy,+#+C%xÌXJ Ì;Aœ§s’pÛZm­$$ÓH‘"Rèâ!–°„¤–ZjIo°7ØLŠóâ¼8?ŽÎ0‡9<Îï`;HÚi§$Å\1—.ÿ«¥‘~>„——Ç%æ6>6žÜ lP6(¤\%WÉU¥2_4_4_$Ë÷”ï)ß3q)[µj9Dn4m4m4‘•5•5•5äÌS3öÏØO^ÿÂr×r—ÏHy‘¼ˆô<}úÔûH#N(+••Ò#©\;_;èØfÝmÝHó׿ÏÌŸ¹Ks—ä.Êv–í,Û ø~öÀ "A$R­T+Õâöéöéöé@¯µ×ÚkŒmÆ6c——— D‰¨®¨.àYø`Í` "1SÌPàòFI4¢dôêèÕ·¶æ¶f 5·cNÇnò@î’»à®K©[T·˜]?»~v=ÐÓÓ  /Ôê ÃzÃzÃz€Ýìf7¹ sAæ º7º7º¨.ª.ª.">ŠHŽH–¿•2’2wζµß¯ýž›€Ÿ–þ´zã¹î¹îÁmð¨WrkÑÖ"òù%ß.±ÜŸÔŸDöµöõôõPô—÷—ö—’/_$¾H§w†ï ß!ÇöíÛGÒFmä ~P?¨'YÍjV“îkîkîk¤CcµRˆÍÊTåå.ö.dß–¸-qªžn†ªQu奎…‘.þ_sþ爢8,¾ߑ⌸"®¤ˆ±t‰“þùÛºl]$iøÇðsÿTuì?§ú13‹³ò³òIqΧÌâ¶'ÄBŠKʈ2B™?ðo”Ÿá cÉ#<Â#þSA¢G<OHŽùcÅžO eñ«2  lð+?³ƒ²ƒHº_Uþ×÷¬|mo¯í}ìõ¼Áþ ­«VSR•sIEND®B`‚routino-3.2/web/www/routino/icons/marker-20-grey.png 644 233 144 6235 13061246465 15627 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü RIDATXÃ…—kTTG¶ÇÿuÎiºiiT ¾"}¡AD!‚¢#‰<4Q¢FÁD£‹d- Œ’™Å’ £€7Q¼^IP#¯hT|‘¹ÈØ€L0Š5¢<ˆD‘†–nšæœªù@7Ü嬬ì/gÕ©:»~ûqjï"©©©©©©pƨô>¸`¡Cè:Xeê©ÔS©§Ø é¿¥ÿ–þÛr¦b*¦Ê|OtÝD·qÃeÃeÃel P€’/xÁ @ ZÐ qˆcûäkåkåkIŠðHx$<ºS@ôDOô;òÓ¦¦MM›Zu?#:#:#šôˆî¢»èNVŽrÐkV.gn p1c1w†¦ÓtšN¯YŒ£Åè^ž^ž^~¦ÓÒcé±ôhošüMþ&ÿsÈvÈvÈFÅ‚ðá ÂIJ ,P(\\\ÛØ6o[oûÞ¦oL¿u?Ûþ6Ÿ`õàRæÄœ˜ÝLbH ‰qÏæÝywÞ½æ+ãiãiãéÙ.“´“´“´RRxKxKx 7âÛäÛäÛD"ä)òy LØ‰Ø %L0Áà]¼‹wLÃ4LƒixÆðŒáˆhªkªkªc#Õ^Õ^Õ^4é銧+ž®xû Ò]é®t_¢b¤)&,›Å²XÛ±™€€€[Jv›w›w›Ô¡u3&eB™PVwÖ2d² Í^¥~EýŠúqqÔûQïG½/œq68œ Pc2&c2DæÉ<™'´¢­áGƒÄ 4Ф´‘6ˆèE/z!ô;õ;õ;ááÅ#\<"n~øíÃo~+ÔÛÙÛÙÛÙÿ벸V\+®}y#^ÆËx¹ëgß`ß`ßÈ^½ {᳚.›.›.Ï^¥ŽTGª#ňØèØèØh¡ÞÙÅÙÅÙ“¥R©T*h$¤‘030 E¤ˆ¤“t’N€<%OÉSµ¨E-@_§¯Ó×!HñR¼8?s~æü “múÕëÕëÕëÅÛþ6Ÿ ŠƒâàÊK­¥ÖRýÒ¤ÈI‘“"™GÔé¨ÓQ§…¬Â*¬‚΢³è,8ñkø5ü«±«ðàÁ£– Ap‡p É$™$ä9AN`Lè¢CpâÀ Q¥Q¥Q¥Â™¼õyëóÖ3C©¡ÔP­C x&Ÿt|ÒñIGýX÷a݇uŒÝ\~sùÍå4žŠQ ‘B¤6&åååŒÝÞ}{÷íÝŒµÆµÆµÆ1&©$•¤bÿ!Oœž8=qbìö„ÛnO`¬³±³±³q|^J’’¤¤±¡ñføÍð›á4ÞÆcãDÑCôX¯º º º€}óBç…Î %¹x‚'x‘»Ê]å®?†ýöcPt¸èpÑa`† &l I†$C0§sNçœN༃w´·····'ãNÆŒä~r?¹0¸mpÛà6 T*•+ªWT¯¨s´Ý¼¹óæÎ›Krkzkzkz±Ïb 1†,ŠGò@ò@òÝwfÉ™%g–Œ[F+h­·ü3¿Ïü>ócì|Ðù óAãï»3»3»3û àƒ‚ k×¶kÛµŒN+œV8±ü†ü†ü†ñõ gÎ6œel§j§j§Š1½EoÑ[þ#FçøŸ/îwŽ;7f™œd’L’ H}RŸÔø÷=î{X4eÑ”ESÆsP®T®T®LÇLÇLÇ€_¾þåë_¾|ã}ã}ãÇ×{«¼UÞ*@8!œN]Û»¶wmÇó"ç¶p[¸-ò‡<â%ðn¼ïÆÎ’yâfq³¸ÿ%ŽGÀø>…OY“·&oM@ݨu®;^w¼îÔx×x×xKeKeKe€¦XS¬)L{L{L{E"H4NÀqÇq€õ'…8Eœ"ŽÎlöïïà"¸vžSìWìWì³Ú§¶OmŸÊÎ7æ5æ5昋¹˜‹¡Q‹€¾†¾†¾ 7/7/7¸s#æF °:quâêD൯ÝxíÀGð| “…É€ákÃ׆¯ƒŠÇÅãâñ1ý…D!qlzH÷‘î#ÝG€®[×­ëÆÿ(ÚíŠv1‹C¢•V ¤ ©B*IÑvh;´’ZII J«ù—νtî%@ p1ábÂEÀ?Ú?Ú?0ëÍz³àââfaf¸{ôîÑ»GÇAïëî®ñÐÏþaö³À0Ëa9,ÊŠ–Š–Šº˜èˆŽèC$"é+;~“q“q“ñZ9ÝœnN÷Œ(((õû¸Ï«Ï«ÏKÚîyÊó”ç)îKµ—j/ÕbxÐeÐeÐBýáúÃõ‡jZM«)peÝ•uWÖ3ígÚÏ´KKK€××W ¾¥¾¥¾hëjëjëB®„\ ¹¦ùNóæ;%\ WÂQS³³³?·M®W„ÿ¸qäÖÈ­‘[o®$»ÞýóîŸÜÂ-Üš~HV +\³7>3>3>›œœœÍBçcþrµ÷óÞÏ{?ãÏògù³ d#ÙH6Žçšú ú ú  Ú«Ú«Ú lØ:°Љ:Q'®…®…®…ÀLóLóL3Lqqqx³0«0«0 ÿ§R)‡Ì+ÏxÆ/xÞð†÷ƒ? \WÀð ÐB mw M¢I4)æK…L!SÈjðý[ß¿õý[l®&G“£É!Å>>>XËü™?ó‡’øâ`#°{±Àr,Çr`bÚÄ´‰i@À΀;˜a†C½¡ÞP§ŠäŠäŠdQmg¶3Û™~ÒOúwQD þ̲XËfXÛ<)p´o>!9$‡ä\Mർ–×&•Ñ=tÝþX~±üb¹¸U¿E¿E¿J²ž¬'ëa°Ì90ë°ëT¡ UÓ0 ÓTATakª:]ÞyÿåýÒvý1ý1ý1á|º|º|zq†f¿f¿fÿÁ¤! iä,ÚІ61ÌÖ: èïÃ~ð#e>_ø|áóEÖУУУÅS¦ LúK‚K‚K‚%ÛÉçD>&“1Lî;ä€"¡èÿˆÓ1ÓÁ¸*®Š«‚üºîºîºŽ…ÞztëÑ­G|–ƒ“ƒ“ƒS—ÙRl)¶'⦅v?í~ÀtLÇt˜hÕrÒj²>ÏQGêH1ñÞ¯÷~½÷+`I´$Z“÷:¨TªŽs-å-å-å|Vå†Ê •X(I $rZH i!ìa{€ °6‘ˆDÄÐÝÝеóµóµó1ѡǡǡ  éBº0y/w€;Àè2[SñõX]9V€l†[¯$rëÐ">k4w¥íd1YL‡¾1zå¨ùûÈÖ‘­#[é_Þ¦oÓ·)ì{À÷€ï¬¥Í´™6CÉysÞœ7†Å1ELüKÏ/=¿ô”4=A=A=A|«b¾b¾b~Ö’ÑŸ&©žæÒ\š+²Fö¯¶ˆedddddÀ`ó(¬/ÆrÈš»Û­¹{ˆd“l’}µ” áB¸¤2Ä"±Üáò‘ò‘òqk~~>”ÖÊ3`óDÕPÕPÕ5uåvåvåò­Š]Š]Š]÷+†»‡»‡»wl}µõÕÖW+ ÚúÒ8VÑž/²Ï-PZ|‡D$"‘üÝçŸo|¾ÉzC¯ˆWÄgèÝônz7¡ÿBê…Ô ©ÒvkG?±É¥É¥É'êêêÈfe³²YÙ P5USõ_® ›„M¦¡?yzzr}Öý^·U¨ç¹xüŽ,[¶lÙ²e­Ã&fÇì˜ÙÖ3§gNÏ|-Í’fI³nŠr¹‡Ü#òðã°ÇaÃ\¾éÐÿ ÿûß{'ï¼wRZ:82828Â'Ê‚eÁ²àf°|–Ïò‹* ‡rþ!úЇ>:Í«£Äçyþ@~'wÓQ‰JTJi¬Œ•±²em\ W•Ôz˜×˜×˜×Ð9²\Y®,—{ÀÇò±|lõ·ž%ž%ž%Ë—éÚtmº6òêJ]©+ûʪ·Ü hú= Ïå®õ¸Ò€$wH4‰&Ñÿôd•¬’Uîx×þEûí_äð|'ßÙý"ͤ™4së¯Í›76oFáaÕgk,‡þˆãßUåX\«®íIEND®B`‚routino-3.2/web/www/routino/icons/marker-82-grey.png 644 233 144 6245 13061246467 15642 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ZIDATXÃ…—kP×¶Çÿ»»Çy0@DÔCŒ¼_I NŒh‰`M¨$ ¢AOYhÈ!ƒ\OL®‘LBR¨HP(ÅcR€äÇÒA&<†‡àE*2pa`fzzßLk•§RùÙÕÝ{¯õëµÖÞ½šdfffff 2, Ìzîw‡»Cµ™g3Ïfž¥Ë²Æ³Æ³ÆÿêO©#uüb7¿œ_Î/_•dª2U™ªè1¡E$>ð€ô @’DIc¥±ÒX’Îr£Üè¿‹È$™$“/<ârÄåˆKCgvBvBvã=xÞƒlZàZm\ÌcÀp„#œ)²„,!Kh5ÏšgͳKC²ª³ª³ªK‡Ìcæ1óXýuã ÆŒ/¬úÐ.×.×.µ«¢VE­Š"é¡’PI¨Y²8d1 ^‹ÏÅùâzÑÞcû6¢‘Gäãl|‰ª¨Šª„]$‘$’D\Öƒõ`=®ü0{nöÜì9÷ÅNõNõNõÖƒQ=Q=Q=Œ%P¨ Ô‘ÍÒtiº4F|Œñ10Â#€wñ.Þ°+°F“«ÉÕäŠÍº]‹®…Z}}}„ƒ¯M¼6ñÚÎ …‡Âc­ÌšhM´&¾šK5TC5wv0/‘Ãó‡çÏhA Z\Ÿáª¸*®ªå¼yήÔaÚaÚaj,Á,O½¨õ=ôÐPB %€Ì`€7¼á ^ÒKzÁã!â!8ƒÊ 2¨0Pþmù·åßò»ššš¹k‹ä‹ä‹äƒu|,ËǾ¼/ãe¼<üŒ¼MÞ&o$Ë$Ë$ËþñOc±ÎXç­ŽSÇ©ãøÍšM‚&»æàâàâà‚%ÖVk«µâ…x!áG€œ$'ÉI€ ‘!2 2A&\ÄE\„mÂ6a8«Úª¶ª{½Î^‡%¢}õê7Ôoð›Eÿ"ÈÇð3ü ?³)Ä|Ù|Ù|9áE§8§8§8êw&îLÜN¬‘iŠ `Ø€Égò™|€Ô’ZR  h6¸ÀXØ4ó=ó=ó=À°ì@‹i1-†J´×××Ä•:muÚê´•zŠ<">½óéOï\ûïZ>jù¨…Òë¯o¼¾QH¦ šµj¬«†>ÖŸ>|(½Ùz³õf+¥ÝÝÝ”Zê-õ–zúº¯¸¯¸¯ ôæá›‡o¦TŸ¨OÔ'RjõµúZ})ÞÞÞy<}Vô/òˆ| ïÉ{òžaÉŽ:>ı ˆ ˆ R€)La ‹˜"¦ˆ)tz^§¾ÙÿÍþoöu“u“u“@I[I[IpºâtÅé <–.P¨ r¼s¼s¼_ýrè—CÀôGú#JƒJƒJƒžDܦEAÓAÓAÓ¤@äù6•6•6%+][º¶tí“7ã?á?á?y™üÊüÊüJJóîæÝÍ»ûäþxêxêx*¥‡F¡´+¸+¸+˜ÒÚÚZJÏ'ŸO>Ÿüdþ½³÷ÎÞ;K釿øû‡¿SÚ¹¯s_ç¾ÿHĬÈ#òq8Š£8J|˜ ÌæÂã7“‚‚‚>‰PØ›ao†½ \R]R]R%í%í%í€a“a“aà»Ýw»ïvÀu›ë6×m€·›·›·õÄ×Áup€Ô_ê/õØQv”ÅÓ’2o3o3o8…S8E|v9»œ]N/N¯ž^=½ýüüü`™‡ÌCæáÔ‰‘‰‘‰@pœgÀäfr3¹æ×ͯ›_ÈÈÈKš%Í’lñÛâ·ÅpÕ¹ê\uÀUåUåU%p*öTì©X`û:÷uî€w¹w¹w9€ñ"^|ì½5{köú5£fÔô"'ûRö¥ìK>§ß¥ß¥ß…û±}Yû²öe$=äHÈ‘#˜›wŸwŸw‡¢9¸9¸9Ø\¶¹ls°–Yˬe1ò_üu0ИјјÄhc´1Z ¨³¨³¨˜7Ìæ @L|L|L<ð¼ñyãóF€FÓh [ä¹…¹˜˜(úø>¾ÇÿÈúeý²~>‡Câw¤ˆ‹ä"¹ÈüWƒ[ƒ[ƒ›U½òØÊc+±ƒƒƒ˜VV(+”P;7v@(B Lh&4`ÆqÆqÆpÞå¼Ëyp^~^~^p¸ Ü ¥/¥/¥ÊG壀y…y…yÀQŽr&ë uÐ:EMsMsM³N–’¥d)sDñƒäääãÍãÍãÍ%ÿ;»gvÏìž·]½z¼z¼z¬©I·“n'Ýfsº·voíÞ SYnYnY.¤ô3úý °ÆXc¬1€ºAÝ n¶n)ÜRä ä ä „'<áɰdX2 ðμ3ï Ì…Ï…Ï…ƒ&v&v&v‚ f f f Æ+ǯ¿rœQ(›”MʦŽ–jKµ¥zÍIrøîệ︸ñ—<ɸd\2Þ*ŸÑÎhg´îšÈŒÈŒÈ Fš W W WA‡:‡:‡:Aìdv2;°òÔÊS+O|ŸÅgúb}±¾°ì¶ì¶ìЀ4ô6½MoÒÒÒ0> yò(ÛkŠkŠkŠQ#ívH;æ_£E´ˆ­Ú_øÂ·k·pN²m¨G=êï… k„5šÄï¿*~Uüz­¾­¾­¾4ÀUéªtU’² uAë‚Ö!Öþ†ý ûP$’D’ÜÆmÜ$?I~’üœ8p€X|…¯ð€JT¢ÓÆbc±±ªÚÙÚÙÚY^ÍÖ²µl-f†™af2„Ž®=4‡æÐÎÕÖ=YCúFîS’L’IrS ‰&Ñ$úà_°»±ûÄÉš£5GkŽòÏN<;ñì÷–C•C•C¦…÷„÷„÷ bÞgÞgÞ ‚ *€zSoê ÐZCk8Á N01`ÀªË —.7XSïß¾Ìå=#yFòŒ¤,Ûÿÿ='®t,éXÒ±„œG/zÑË׈ý¨†0„!¾pH•ÿ%ÿKþ—r¶Ê42LS–=é5é5éÅʣˣˣ­©¶u*FÂHL6,¤ z¢'z€ø?âjûÂI¯ö]í»ÚG#oößì¿ÙÏæ(ë”uʺáysš9Íœ–öùoñ¿ÅÿÐ>ÚGû`oósF5ÚÆ ‚RP JØ·´´æææiŸÛ9Ú9Ú9Þ¹ÐSÝSÝSÍæhãµñÚxIRH IT(J„PÈ!‡ StŠN=ÞLsúô=èCY}p}p}0ìíÆìÆìÆaµ°ZXö9sœ9Ξ·•bÞÝ$~ˆx Û~I¤¶K“íÜÍY¨]k* 'á$OçÓ!ýÎë;¯ï¼¬ÞckÆÖŒ­aõ²`Y°,8g-e)Kكׄ¡@(àòl™ý›˜±ìììììlL‹…í†Iœ`«ÝT[íæ‘\’Kr›.3˜ ̆ƒUÐ@ s²ÚRm©¶ð{ …†BC! Ã0 ƒ)1 s s s‚q¸`¸`¸€ÕË2d²ŒÎZÓ=Ó=Ó½Œúúú€ Pm[§E¾Ç O‹6ÿ²Õî%ÿJÿJÿÊœ­²dY²,¹,{rùäòÉåœáçÌŸ3δ¦Ú:z{ÝbÝbÝbœnikiki#»ÝŠnE7 ¨µ ÞßʽŽŽ5·Î3Ô3Ô3”ydó·Å6Î=ÍÅâ^ìÚè"ºˆ."Œùùù¡Øêfu³º]神RO©ç¶“÷_½ÿêýWWº ]†.úUû™ö3íg¬/ÍXf,3ö€d½d½dý!WZH iáOµB );€Gx„G 1¶@ñOóü‰þ v³ …ZëZE«hUD/SÁT0¿zÎÇÌÇÌÇ~’I¤€éb5¬†Õ46{UxUxUü5¢¯·¯·¯—ü",– Ké6»Õ6@ãq0ø=U»¶ãÂz)HA ÷o’@HÂ?½¨–j©öïïÊŸ“?'Žéb‡Ø!vèÞsÂÂÂ{GºwtïèÞ,ÂÓfOl,çþŒãÿÚóyØÈtIEND®B`‚routino-3.2/web/www/routino/icons/limit-16.9.png 644 233 144 3043 13061246472 14664 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜØIDATHÇÍ–íO”WÆï†—a‚l¢U²ð•„65ÕR Õi…*¶HjªÈÓOì‡5µ‰º‰‹1E«ÙI[-6#ˆ}aÝH4`!¦mjw¥h™±0›²ÐíŒD†yæ9¿~˜yf¦ý <_ž\ç¾ïëºÏ99×sDD$3ò0/3/3g„±yOl>¥*¥*ÿ“0>ÓVÓÖá¿Â¢“‹Nduduèwc؈ùñõ"1þx=c^2%6‘ìLvš*"ø=Ø^´½(eqÿ}¬—­—ç4hºÒt ûÃîÙ“C“CÓÓÃFÜÈ7ê ¾x~yïú"øeâ—¦qHNJNÜr_È{+œàÎÇKŽ—~Nø9A™ ô+`æ*?~ŒáÃF<’oÔ|¿¡gè‡ûÈ.Ï.Wv¼²Ãz.\p÷<ìjÿS†^ð2p„#Ø@ók~€PC¨Ç Ô&LÃFÜÈ7ê >ƒßÐ3ôÃýÈï϶mþº`]0ÚР^L &‚Ú¯ÝÕîbD”Ú¦^V/ƒöö­ö-躮ë:±1ƒo)=¨-ÖÔs‚9 v‡ù¡Î_çDô£GéYù>X´þè·€k“k„ܼ¨:µÚæ£"“LP>åS¾¸Fzè¡ØÅ.vŦՂZP À»á€*WåÌóF˜ŸªÑÁÑA«ßê÷[øO¸ŸÈN¹ Í-Í- úôbƒxàƒóçQ÷ÿyÿóûŸÇÝ™îLw&´õ¶õ¶õÂím··ÝÞ‹ëú„>ÃwVÞYyg%´¯k/h/@ýävtŒf«Ÿöî-4ŽöÌM¡WDä»·ùGç±ÎcÑu¾éÌîìíìå±¥ÃrÊr œMÎ&gSLh½i½i½ jÆjÆjÆ ÔWê+õÁXÏXÏXO,oxzxzxòæ?Ì%;J%(þóÚ¯Ö~Åã_ý¡Ð€z.Õ]ªõF¸³˜3dxú9Ù[>R>"B’ˆˆéœü?aQÂ"I¶§Úív»ˆí†í†í†È5ýš~Mqµ¸Z\-"ÙÅÙÅÙÅ"eö2{™]Äîµ{í^‰Ž[Ý·ºou‹ä¬ÈY‘³BdðâàgƒŸ‰$¥§<“òŒ$Q{ñøÅã¦s"¯Ã+¢úSÇSÇŸ~N +=+]ï„wBåÑk@ÅáŠÃ‡¡k¸k¸k®^¸záê(¬,¬,¬„³ž³ž³X:´théôè;Ñw"¶cžåžåžåPÔZÔZÔ ÕyÕyÕyÔ–ØšØ ÷|ºìÓexA·êVÐôô´ô4}Ä,J¿¢_1ˆh[µ­"’$""ÙÆŠù˜øHDMªI5)b«µÕÚjEÒÓÓEöäîÉÝ“+’s:çtÎiO½§ÞS/888*2[5[5[%²Ú±Ú±Ú!²±k㥗D쇲vfíÉwçÈ? Ù"s?Ìý b®&HÐ4b³¿Ò_ùý×"ý}ý}"R "ÂîH_ŒÄ =C™wÍ»æ]"¥ÖRk©U¤ ¤ ¤ D$5%5%5EdooOdËæ-›·l)«-«-«±Yl›Ed¡a¡a¡A¤½ºýùöçEÿµóÔÎSøK˳ûžÝÇniê}§÷óæ9mNûþëø[y°ù ð…q+õãúq˜)›ymæ5Ô£ÿ>r=rÅŽ(ä 9CNð®ò®ò®½CïÐ;@ÝS÷Ô=ð­ñ­ñ­®sëØ¨ ÔÀÔÿ¦f§fQêßZº– zÍ­Í­À¼q+‰úؤuÒoÑÐh(ªÿ"½^¯ó±F¶³TšJSiq~µD-QK€ l`Cœ¿³–µ ^W‡Ô!ÃH˜Wk"ü°þbýÅoaâw>çüÚ« ¯&ÄœŸÅÚ¨6  ‡ÆcÎÏ:èuSõ«~ ‹.º€yæ˜åQnå‘üc!wÈMP iSÚðáü½àÿÉýW>±¯‹'ö=öd¾`Í´îM¦IEND®B`‚routino-3.2/web/www/routino/icons/marker-19-red.png 644 233 144 4073 13061246465 15441 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜðIDATXí—LTWÇÏû1]t„fʰFݵ.P¬?1Q~̀ݩQ“‚Z±…h¬›D;¶MHé¶R)TÌÒ´„ƪMKÆ4 Yµ»u‹T«É·[Ôm¨µ C[äÇ ìÈ̼÷îwÿ`î›7d³{þ™9÷Ü{ÎgîýÞs3DS6“¢L\çŽsǹ…‡§uLë˜ÖQ´BVeUV¿9L‹h-¦Â¬d’Iæ>í³>Ÿ¯çùxþèzâêh#_5USµèŠŽ§<&wÈr‡kDØ-ìvë ædo²7Ù‹?o¸¾áú†ë@éÍÒ›¥7’ܒܒ܈Ïã|>_Ïóñü¼ÞƒyH\íÏ}WÇÅñE|‡Ò*Ò*Ò*Ô]8táÐöˆoØ7ì A‚?&0 À ûá8ŸÏ×ó|<t½¹ï>˜,ÓÅAqPø O{>÷|îy%§?Ôê¡acY,‹eAQkÕZµP«‹ÕÅ€jWíªÝà‡ã|>_Ïóñü:pT}ËtMp .ÁE$ï—÷ËûÛzøkƒµÁÚ Øu°—ØN¶>¥MUF6 j…‚Z¦–‰ˆiưÁjýZ?ÀB=¡@i üø`/1+³ÂǧY¬oZßTì¼>çá|dºaºaºñ»¥|‚¥ÎRg©có=w<·=·1ÎãSßV׫ë€5²F>ö*{FÁˆÑÕ®hWà ‚4eêÛ¡¯C_ë®ÏsÇ£y4ŒYê,¯[^gó9Î'WÉUrU÷~h)o)o)g;à üŠKq).`wØžÛSê)€óóÎÏ‹¼¥Ý2ú½]½]pxÉá%7_܉*®ÐDhBwý-å-›[6³úÎFñJÎLÎLÎDÃHÑHÑHQ$Òñ-¾à ÖëÀû¼÷yÈOÉO€bK±÷0ç°s˜ê`†ßç¨qÔHZ¤ŒÌ™ pÎÇA×X`ýÈ/Sûƒ5ÁC|èô §_€Kf,1<Ýðtƒ±ÖäµÉkðh×£]PYRYbŒw}Üõ1L{vÚ³†¾ûñ»µ? ØÏy8Ÿ¾R™l&›É¦ß±8Ú!>.>ND¿äC«rVåõõôõ­nZÝDD4v|츱s( J‘ïšïÑLJ1ž–‘–ADr†œDµúj5}Õ~âLí¦vS»~åyee+šW4¯hFߤ0)L NàN€a;¶c;ŸºT]jüÑŶbL/˜~¯£¯«EãÎ_.¾ ékÒׄǿqÏsÏX6€ñÕ¹I¹I¹Ièã|$ÚE»hýh8Z}´úhµAñêBu!(W”+ÆËTt²è$Ù›ß÷¾ïà-Ó[&°_´_ 4~ÕøÄŸŽ? ¨Ç;>ìø0R¯«éó'>B/d ÙBvèg’–Iˤe5õü–¥ÏIŸ“>GëÙèÙèÙ¨'ð±‚Ð;¡wŒ©OêNÍß;ïü½D¦ S…©Â½O×nž5ÏšgÔ®æÐÀ 7ÜF1ŠÑ·º@] .ˆh±yyóòæå¬@ËÍ&³É<89å[â£OZ8sô$ĸ_Fû–ø)ízŽßW»fŬ˜#@Úmí¶v;¢Å^ô¢p'ô&ô&ô² º&ÅD1ñ™?ÄHñ½¾8zð€Ô£Ý Ó®Ò©t*åÞM½›z7Èðfx3¼êot-¶KíRûWr©…¥ 8ƒb‘ <Áý´Ûdi²4)fÓãô8@^Nê8å8å8i;r«Ü*·ö†ÿ’$ü-¦nxœy`¬ñÏ„µû§ûi7mþÚüµíºWºWºW⣩8ÓOB(Ê„²Âšè2âhL]þK{˜vWKõR½T?°˜—Õ•Õ•Õ±ƒYÁ¬`VP¹ªõ4$ 9Ò¨Ú¨ÂmGòÄÔ‹£ÿÑbµ»/ÚÏÿ—°MØ&l¨˜Š©X[(Îg‹³èì—éþtºŸHê–º¥ná¯á…›bNîÿffý›ld“{¢Ã¯”‹Ld"„3ÂáÌ­_MÿÚs2ý1yzÔÿ[G”ñÍ0 ˜IEND®B`‚routino-3.2/web/www/routino/icons/marker-57-red.png 644 233 144 4105 13061246466 15440 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜúIDATXíWmLTÙ>çÞ; ÈŠQfl ­V!ü º €IÙÉânÆ’X»ÆnR¿€f“Ih£DT¤q6⚊qa˜›€Öl»6ÔÕõ‡¡®˜U–ìaXˆÎ€—æ~<ýÁœ{ïL¶Ú¦}ÿÀ{Þç¹ç}Î9@ȼ-!1Æm_èYèYè¡/£ É ºt/è.ÉdAä¾?‘õd=ẎÕSD ˜Äúê)–ÏêY?Ö?ÛËÇÈï09LsîØø²5B·Ð-t»§èz„ш¤¤R©üu×à®Á]ƒÀîÑÝ£»G{¾=ßž¯û,ÎòY=ëÇú3¼Wó!ܶXÕ9n𛿦GÖ³ʨʨʨ’«/ܹpçÂ5)ø,ø,ø ÒéÐñíìì´{û*ÛÑŠ‡•¯H¼Äëx7›n6ÝlÒvò74‡æÐœÈ8á7ñ›øMŽvÊ,?ÉÌ”Wù~å×ÿ.L—L— ¨.*\Tû÷ú··ïo»Ù°/8ÀrËrë ª»ª»:Û:Û¨¹ûs÷\y®<ن߈7ò ¼Õørî~X{gíÓ$„¯ _'Éo%¿•z20ž Eï½ðø•ǯ¨0ЀH"UàÆ±WÙ†?oäx¾Ágðêˆ{3îMxïƒ÷>°\ $Œ¶ÃéÄÓ‰ŸïPO=‘ ¹57€^¡WàåPL˜ d~#ÞÈ7ð |ƒÏàÔú”+"" P:V:þa߀6îKô%‚ ×’´$|Ì ô³z­^ úkzºžz•^¥W¦žz^\JUjŸjŸâÓú¢}Ñàwð¡ôIé`Ùà7>å""¯} ·Åí^£¼ccÀ9 Aåª\V¸@# Õ \E©¡¡ …žóœç«üi¤‘jI¹” @R‡XáÛ ~M/ÈÏX aNDäR?1ÇlÇlšǣ𡺡:hÌjÌlÌD9ýNŸÓâ»¹áæ†› ¹¤¹¤¹ìeö2{³4[šñì}¼wlï¤M§M§MC³ÇÙã„ÔØÔØÔX(²Ù‹ìPÑVÑVÑs÷æîÍÝ ´äYò,y çnÎÝœ»°ÿŸûÚÿìy²ë‹]_à™:ìNw§«JèLéLÿb ž0‰Š°Gس^)°ØD¦÷Ž~>ú¹éê/ê;Õ'á}‰}[ú¶ˆXc¬1Ö‘{‹½Å.¢ÑÎhgD”Gy”GäÀƒ<IØ“°'aüºzË{Ë{ËEÆkÇkÇkEâvÄíŠÛ%ò‡¨7²ÞÈ’ð¸ßšËÌe¦«"9'rNˆ„åFÍGÍg½.øÖ›×›ý#ªz¡p¡04ö÷?: Ûº·uoë†g³Æ Ž)Ç”c *ŸV>­| ­ ­ ­ °ñâÆ‹/Âmí¶v[ u¬­°­°­¶ú·ú·úáÊÔ•©+S°éþ«]¯vÁ?öçöç²ÞTo*øÍÑñÑñþ‘0õ¥–¯å›FLöu™ë2E~<>Z7Z'qg J JDޤÙ|d³HsFsFs†ÈÌù™ó3çERì)ö»ˆmÎ6g›INN™¿1cþF¨c‡ÅaqˆDeDeDeˆT%W%W%‹XïY¿²~%2S73#q"œä¤›õGú#Óˆh¿1þ±îÝÝ»á¢þõà׃ªrmgØÁ°ƒx²»²;²; ~Sü¦øMPï¨wÔ; »=»=»"\®œm9Ûr¶¦¦¦a§m§m§ \M®&WÝwtßÑ}`1›•Y­âCÿ‡~<ÚuU ×¾þ3°=Pp!8•||êãSðk`Jæ÷ÏæÌæÀÌÀÌäÌ$j¶x¶p¶¼ÅÞbo1øF|#¾˜ï˜ï˜ï5¡&Ô¨kꚺK‡—/åU^åÿqÿqÿqXܺ˜°˜€ò§{'½“¡©ämùh‹!¸—úƒÒ10t%¨3neUVV~UÊÕ¢Z@]V—ÕåU Ú¤šTO>ù«tâ唃ŠPÉ*@eªLVTB?oÌ9æ°,[–Ýk6tìNõ†N—V—Vƒj(³ú»©G‚êЖµe|´1ÄŠó|Æg þ¦zTÐK/½À/³Rý+ÐÁà+)¾Õu]ǧú5—æþb(Ùš²5€÷EåyÏÊ—övñÒÞÇ^Îìb´êäÖS¯IEND®B`‚routino-3.2/web/www/routino/icons/limit-10.4.png 644 233 144 2747 13061246471 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜœIDATHÇÍ–ßO”WÆŸ~I„¡Úi¸±Á¸XèbUb6hl&¡Öb3)‘¥¶¦ªÙײ-Íšl›xÓ]/·Íf»¥‘¤h jŒ-‹ ” Y§(v€ÐÉ,Ž “™÷=Ÿ½^fÚý<7“ï¯çy2çœç=IÒc+¿÷“î'Ýždì~3•_óâšõdü™®WÍ¿þ­­ëÚ×µÛ?¤b§îô§ÏK)üt>'¯Ç”Jätçt»|+ñGpà™Ϭy"ÿir{r{ðÖå·.|ùù—Ÿsî|wç;€ˆ/âƒTìÔ~gÞÁKÇ×G¿à— «/«Ï59Ù9Ù½Pô¦ß&~Üþ}þ}33Æ Ö] <ã¢DqÖ½´Ø©¯ô;óžƒïð9üI=o¥·R‚W¾r0÷|rà‡xoÃ{¾xpšÓäA"šˆX¯Y¯3`pá‚TìÔ~gÞÁsð>‡?©G?ßÛ?WÝß_tÓ®ŒgųÀü>Lq*Æl1O™§ 1%B`M£i$µ–X`¸Ÿìû û â¦ÔzÛzìMI|¨U­€ùþÕ­ŒJRi äsƒÑL˜¨š¨ëGªÍ‰H"ÂÒ*ávžæi`»Ø•&d{ØøñãçÿW)¥”‚³­ÅU¼jÇ¿ÿ 7šf&…•¶¬üSŸýê›ê›ÀôØÛ¼¿ t t`&¿¼>y=Ål ¶[á\Ö¹¬sY0ŠNEÓ„!0;ÍN³3•ž¨ŸøxâcÌ·®\/p²öv?úÁÑ€¥¤qE’FNò×®Oº>qÍ‘noו®+Ä2›3ßÍ|º§»§»§Án°ìز°eaËl½±õÆÖP+‰•Ä Òé‰ô¤„˜>ÓgúÀT™*SÅo××AÕ¾—|/søìÅÅ@ ©Ç-·ç}Ïûå:Z¨ HdK’ë¼æ3 2 ”³¾t}ùúr)ß›ïÍ÷J}…}…}…RÎPÎPÎ4æóù¤ü™ü™ü©·­·­·M©U¢•HMuMuMuRlMl]lôøYïUïUå$›\ç){þçß‘ôkÏ7žoÊ+ÜÚ›ñiƧ”IY§³NKf·$)üªûÀ²é²™²iypypyP2·Íms[ÊÎÎNñ{‚ž '(=¨yPó &•o¿Ô~©ý’ÔYÝYÝY-ùlŸñéûÚ‘æ‘fé?»ºøÓE…3þîé÷ôK4¸®º®Ræ–±/Û—])Q“¨‘”-Iò:ÀÜã.w¥¸·â–T4V4V4&ÍÏÏK³³³R(;”Ê–6‡6‡6‡¤å¥å¥å%IµQ¥C;†v I·zo}uë+iú\¨1Ô(Ýn äòä•\s®9‰ëuëuW`å𜄮…®°Ž'÷|åˆÄü¿ñ—ùËà‚ÿ‚ÿBÚm«»Vw­î¬=¶öØÚcÐ<Û<Û< ‘½‘½‘½P>Y>Y> ómómóm©¹ö¶ö³ígÁÿ·}Ïí{.uƬóg:Î8¾6r2ýVžª?ô:·Ò>cŸû»î×Þ¯ÅÄ2—íe;E`·Ø-v „á@8æ°9lƒÙf¶™m †GÁ:d²Ùo^6/Ãß}ø,æ¿ÿ¾7zoYá³ê?¬ÿ˜sn%«>v'÷N4Æ­qk•¿š¸}Ð>˜æc¿ã8ÇÁŽÚQ;ÍÌsÄNp‚i¶±È"‹@˜0a`ÑšB–0þøÍñ›i>f~æciΟ¨Í¨ÍH9?O$ÆãÀ)kÊšJ9?=\ä"˜3l†~úé“ßJ3k¦Ì0½êü vqþh ZƒÀÚUçÏ®Íb¿tþG÷[ùȾ.Ù÷Ø£ù‚ýý§Ý|@\½IEND®B`‚routino-3.2/web/www/routino/icons/limit-104.png 644 233 144 2625 13061246470 14576 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜJIDATHÇÍ–]lTEÇOw·ì.ÙR,+MŒ¥‰°É©Æjˆ¦¦fâÆ†ÖŒ‰M!õ‹HbxPüHšVxÂŒKÒHÓH“_lÅJX­†¥4¥KS«R––{ïÌχíì]Qß™—›sæœÿÿgΜY¹ôðTx*<+r¶çU׈bk¿ÊÙ(j,jüõ(í*í¸ç‹{¾P¿»¶™7ñ…ù".~!ŸñËJqþ^oQý’½žßøüÆÀ½9ûãaöûlx­ÿµ~€c‡¦ fFfFæêçêÁµÍ¼‰7ù¯_öÝÁ/ÅÅE“à_æ_&•OV>ùÀ¹€ñ þLü€ËÞË^íç/ DH×2˜q¥À6óKñ&ßà|ÃgøszÂuá:xî…ç^Ê%üþ%´ßß~¿á³ú€ùØ;à¼è¼Hô° ˆ"pm3oâM¾Á3ø†ÏðçôÈ?÷ö“h 4€ëÖ JU)¨:ëˆuK¿§{tÚHÖtTGÁNÛi; úmý–~‹;‡Öû#û#,õ Ulçønlµ¶ZFà' [)"éD§ƒÓ¤TJåŸv&¬Ç¬ÇXÔGõ/ú—ª*ª¨6³™Íþj¨:è ØÂS<úgý§þ@MªIYÈáCêFê@p68›ñ=KÂ~­­]Ué!ë¸uÜýãáχ?þ .]º8äê8ßu¾ë|tK·t \*»Tv©ì_+Æ…Ö /_x†îªª.Xñ™VëžÖ=få~¿$lô]~J|›øèÐ- æÔÙÞÕ½¡ÞøöúöúöBoº7Ý›µCíP;`Ãü†ù ó°éĦ›NÀúÆõëaîÜܹ¹s®°µµkk×ÖBÃ× GŽäÝYµ|‰o*‘L$°Ñw="+¾[ñ݃ÊBí#µˆÈë""E‡0ɤøå™—y‘²HY¤,"R. —„EÊÊÊEü§ü§ü§D’±d,)Y^²¼d¹Èàèàèà¨ÈþØþØþ˜ÈbßbßbŸÈªOWXu@ÌðSŸã“5u-u-"FGÄ÷ƉÊË–-ä®êZhiö4{›½"Ñt4M‹Ü:yëä­“"zLé1‘ÐéÐéÐé|žTì®Ø]±[¤»´»´»T$1˜NL‹ÔÔÔˆœi:Ó|¦YäÒ+“[&·ˆxr||ì{Ü÷¸ˆÑãQߨoŠ~m?k?›ÇK±¤%ír…+\±˱‘Êde²2)2»nvÝì:‘©þ©þ©~‘‰ÀD`" ©‰ÔDjD¢ãÑñè¸Hr:9œIw§»Ò]"c‡ÆÞ{ßåãÇÛå·ËEòzò5Fb>1Ÿ/ɧýöêÛ«ÉO¼:^¯†žxO¼'îÖζÁmƒÛ!´3´3´Úv§ÝS1sãzªzªzª ~8~ ~À­1§ÍÔ´áÏéùßSÉ€°¾ùúCׂ¬/ëËú\BÕ©:U'\º:uu ô½F¯Öa5®ÆÕ8Ü|øæÆ›áÚÅkÙkY4gía{p–øn´¾ÓúοNe¤‚3Á™ŒRNÊqû¨—ÔK,bÝqþw±‹] 2*£Ü+ ½]o×Û6Úh+ˆ7»¡Õ›êÍ<ÞÓ²R¸üÿècÿÑù-Óù g¸×ÙãìÁ¢ƒ£uû}ãè³ú¬> pœãÜ94ûœËÎe,VÚ);UÐùí&o“÷?;ÿ]{WÞµ¯‹»ö=vw¾`ÿúëä‘–ê‚\IEND®B`‚routino-3.2/web/www/routino/icons/marker-82-red.png 644 233 144 4263 13061246467 15444 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜhIDATXí—LTWÇÏû1•:Ûi¬¨ƒVTÜ 1¨Ð* ˜m¤© 8&«ÝÍV@ÅÖÄJ¬R)*¦ÄBl­Ø’g0P •¤[µÕµ´±03Q6±ŒòcБaÞ›÷Ý?˜ûæGºšÍîùÎ=çžóy÷~ï½¢qû…¿$Âa°rOüÑZ&´LhÉY$Ê¢,Ê7Q ¥P 0VªI$‘D桾RÍòÙ|VÕíÇ/ å æ+£2*ã-¡ñ)óıEl± p[¸-ÜD«Ö ë†q!ïnÞݼ»Àšûk¬ÎX±:#à³8ËgóY=VŸõ{6ñ‹CýYŸñ#ü?âHa+4½xzñôbyÛÑŽ£G;”\\\ ÀÇxŒÇpÀ¨¾?ÎòÙ|VÕí7ë³gó‘þE¾ïãûß²W3®f\•Òl^›×æ… ~S’”$% ’\!WÈ€<_ž/Ïd£l”A¾?ÎòÙ|VÕWCúë_TÑ8 gá,Dâ>qŸ¸Ïü›`¨6|bøD2ª`ï+‡”CpIæ±ccÇÅáµymÆä¯ä¯yÈàC¨ùnúnŠÃû«÷W@2{Ö{ÖÊûJ”K3TööJFÖŸñ0>ÒÜÓÜÓÜûs*KÐWê+õ•ÊlûCû}û} ùë¸äÞbo1À;h¡~J—Òx¯€’ª¤,°pÁ o [> é$êºì““1¤¯ÔïÒïRf3•O,KÄ’Î},P_T_T_¤üÅ_À-Y¼=Þž ÏÏ7~¾ ß4|ç–Ÿ[£‡Gãwì§/~úââx.œ¼p¼ïxß$‹ü½ü½šìfýÕ• á#Å©KÔ%êQ=33¸‡{˾ÙúÄúh#m€IßMú¿`ñõÅ׃-õ–úà¸N¯Óù®•¥+KÄú|¾€\¤œGgãc ûW\upÕÁÀ—ɶ±ü±|N6´|æò™’›’ tgÆÁ@gÓΦ@êÂÔ…P8T8œÝ|Ý”ïl=ÜzmÁ9p3ÆÇûÔ^ÖPØP$ÈÁƒ@”D €§6¡6á÷MüÅø‹P¼§x ÑÀku¯Õ@¬)Ö@j”%P( ù”|]hÛ}¹ærÍåõü+—Ì%sÉÞ~ „;«Ø)‹©ß¥ß%ϲ¯ud:2ׇ²ToÖ›àÝyïΠ°ÐݹwçÀ¤“v@%*ÆŒÀ¢®E]ððÄÃÜþi+FL#&ðö{ûáqc4r4HÜ™˜›˜ëSaŠ0E˜òùEgGgGg‰WÄ+╦>õÂ_õAÖòV†ã+o=ÑzX5·4·¸é&Ý >D™|&w¾¼ó%hmZÐ pM¸2á €!¾”/|ŸAZû[ûâ®­ë¶®ó¹UÀMÂ&aÓ?óÇý(vê™M¯Ó$k’5ÉŽ6¡¼b[ɶe©z¼äP Àü¶ùm®¶™m3@®’«ÀÝàn€S×N]ài´4Z ñÕÆW¹èxïñ^8ýËé_à>9R£­Ñb…ú„Vqk¹µ£9ÜTn*7õOGÃ…êùZÏ™8Ó²#\gá,L+¾ÍÖvËÇ–aUµ»Õ—à ÖªGT@¹¥Ü –ÜpÊRÅ¢XRêkržqžb#çdÏÉ–JÔ•Ü#¾"¾RnPÑŒd$£¨°fR&eŠ{ÈB² Ná7á·mçÔ§õˆ¾T_*ií;ìÑöè`ízôþˆ€8|¯¸å¹€Uê:%_Š“âà…,`Ý? t:y«ú=í¢Ýº7¦4¦4¦”ˆ7ðÞÀòÓ1̉þ¿ùB¯Ð+ôrçgoŸ½}öv"M±¦XSlÝ«j7ÓiÈ Ö®¯ÜW¬°Â `ƒ ,´/ÇËñõ­]X»°v¡²”ÕÓh5Z¶otÜ×G†î4×¶õÄ…¹×B}}ä¸ví§Ú-¯(¯Ò®VÒJÚïïïA`û»ÑnÀÕÕխ䩚Œæ£ùèÂÝaR¬ ã‹ gµAÚ]Ï­_–Ç5qM\S°v­íÖö€v¥v©]j(÷iÌÓ˜§1@ÂpÂp°à'ˆͯùBo‡ÞfÔ Š(0±‘7ê~ƒÏà7ô ýð<æVDDZ ¡|¼|t/@pXûO0)˜úC-V‹%™Té~ýþ´ûÚ=í¨ZU«j1×óÌÿ)=¨­ÓÖÔ×׃z/Ìåþr?ðÀÐ7¶òŸ""ŽS`õ[ýþ•ji|x|8@)¨,•E€K|Ë· ?ÑŸèO€>úè[6È!qÈ'Ÿ|3¬* À1Np@íR»ðN„¿8¢ÑÇžG¸#"Òy•55ïÖ¼kÐéé7bGëFë ­±í“¶OPÞ1ïuïuSpl|l|lÚ··ooßSSSf^ŸÖ§õißpÜpÜp@{VûËí/£¦&':&:L=5U“R“blmçU ]¹^—>ºôüXûsîϹêpü#ëçÖÏYܳyÏó{žG…£ÂQg¯œ½rö ¸F]£®QÈÙœ³9g3¤oIß’¾î:ï:ï:ÍnÝ,ºYöû‚}òäyò<þRê÷©ß³8ï …†Ôa¸P~¡Ô;áy$4±ê̪3ª?~‚¿w}sá› ÐØüiÙ§e¦@AcAcA#äJ®ä ì³ï³ï³›ùìÙ;²wÀék§¯¾fÆ;G:G:G gCΆœ ËêÓ2™ø¢°ÇÓãX*X*€PÒ3¾g|ªWÚâlqú-U=_:_j^û‘ÃÉÃÉàìvv;»¡ÆYã¬qÂtþtþt>¤%¦%¦%BñÉâ“Å'ÁÒjiµ´BWKWKW‹9€/Å—âKWƒ«ÁÕîdw²;,­1 1 Ðý¯7~½‘{ [u+húêU«Wé·VªSÚ+Ú+Q·¢ÏX\—lûðvÝí:Y[øqá…oˆ|öçcöcv‘úìúìúl‘‰¶‰¶‰6‘­ž­ž­‘ [†-Ã&âÝéÝéÝ)²)eSʦ¿Óïô;E¥Ò@©È6Ï6Ï6HƌʌJ‘±‚јÑûgöí/ÊZ‘Ç%KD¢Ý8pDÝí9ãŒ}—û].t Ÿë8סÇ\Œ~-ú5³.fõdõ€-Á–`K€®ª®ª®*¨tWº+Ý0˜0˜0Gûöí‡÷‚{Á ™ŽLG¦|¾ßìOÚŸ´? ×'Æ'ÆÃÇÃGjŽÔ°¹»‡©:_q¾89c´Dn%ùà<é ß’»%³y³y03<ã›ñ¡f=³Å³Å°\ .!X¬ ÖÂ\ó\ó\3°—½ìeQeûe÷Ëî——¹ÌeXÚ¿T²Ts³sæ¡Ô˜¶Z[ Œ„õàý†÷ ì§W#kú¾ñ™Eõ‚z€yjÉ&ÔAuP\æW©*U¥M4Ñ´Ìß¶“F¨ƒªI5è3ú åŒðÿmüáøCë¯Ö_ý+™1|ìÿþê­…Ô—W—Wƒê ;³ú!Šu^û]û ÝŒ1†â4t€ú—Tƒ€/^à! ,€šV“jX ÏMsh24IPhsÚð£áüo®xsü£ó?½ÿʧöuñԾǞÎìTÔóÔ‡IEND®B`‚routino-3.2/web/www/routino/icons/limit-32.3.png 644 233 144 3074 13061246473 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜñIDATHÇÍ–ÿOÔ÷Ç߇9S7nTI¦KS¥&W*D`Ui«‹vÆjâbŒ¬n®ÁºÁD©ÚÆ/ÌZ\­„ÁFÖI b]—`e¡ÔhNnˆ9î ÷¹Ïû±î>ý\Ü?àû—Ožï×ëõ|>“÷çóü¼!„0…Ÿ¢Ò¢Ò¢æ…pÔ.}nÞܼÅBød › ›‡~IŸ$}0ÿóùŸ«Ã:ÖêZä¼:¤ž¶/LB߈mŠm2XÃøC(}¹ôå¹ Cøx7ĵƵÎ(ð^Û{m-_´|Á¯Àñã;€'Ö'VбV×úµy/’_|øŒ¾ÓÓa‡Ø9±s„ËzËú—ö…ì/Á›o<ˆ~-£ ø_ iܸÑÖdÖêá~m^ãÓø5=M?äG@ʺ”uBÀ¦·7½w640ü(3—™5½@+PI%  ¸7@p[p~ݲбV×úµyOã×ô4ýý(=BQó€: ¸®Ü ¤ÒAí |øž@Ø©Tÿ£ÚT(÷”1e TŸêS}èËÍcÿ€¤êU”ÊxÀ°€z=įééúÚQÞBˆŸÖAœ;Îí6rxäúÈuà[òA¾*_ÅÃUºè™$“dÐL3ÍFŽp„# g䌜‰Ø/§œrà[zè+ä <Ô†ù†õ4ýžÁ#!„8yy»ßÝý®Æ¦.^ok·µCM]MmM-²ÿ^¿½ß®ëÝtÝtÝtAmEmEmØ:m¶N½®¶©mj›Ž‡ß¶[¡æ\ÍÙš³È{½ù½ùºžœÝ]°»p„üµU!~ ­‡[ÃXÊÔƒ©rç‚?$-IZ‚¿øïÅ—Š/A¦?ÓŸé‡úµõkë×¢c‹Ž-:Ö‹Ö‹Ö‹`)¶[ŠaàÐÀ¡Cº¡Që¨uÔ ªT/¨†ÒÔÒù¥óáÇþO¿xÿîÞ)”;¡v ø·ŸèÃ2qaâÂS [êúêú ?›¼øôêÓ«†–ei©i©Â˜mÏf…°ÿÃþý!¢MѦh“y·ònåÝâLÕ™ª3UB4t7t7t ‘Q’Q’Q"DVZVZVšBdÄdÄdı*iUòªd!ïÞ¼#Œ9¬G­G ò£ì¡ì!!Äšú²ú²EO“¦YÓ¬z›'Ë'ËõÏ~Úë¾ï¾EEEÚ•Ú•ÚC-C-C-080808ËË˰CÙ¡ìP@näþoM{§½Ó^(ºRt¥è ¤ýÒ\`.€þ[¶×m¯3 Þ|o>¨Gç}6ï3õ¶æ¾0ç…9² üëüëàËÍMÛš¶ÁŠíË3—gêÄk×4®i„ý{÷ïÝ¿Ì[Í[Í[¡ò|åùÊó0³zfõÌjðìòìòìW…«ÂU'O4ž€¬¥YK³–ê|+–¿â}Å ç~~á­ oøëüuL·ÇÛe“ÖÞ±K/=†§ÿ;­¿–õZþø†øºø:Ø7¾o|ß8ï;Þw¼b;c;c;aåÝ•wWÞ…ä¨ä¨ä(hØÞ°½a;äør|9>KKK‡Üƒ¹sBâ¦ÄÜÄ\øÅÍw¼s¿÷£|=þõ8HWÈO8ÇN^£wOÊžý+Q²}O|OÀù'çûÎ÷‘ê)õ”z |U¾*_8ÍN³Ó /?¼üð28L“ÞO§¦üSþ)?H—tI(ÍJ³Ò ο:Ï9Ï!ƒŸÎÎêzÜÞcÙcÑ÷ä5Áµgr,&”+ò·?äØ¹Ì‘åF`1‹Yñòøð¬^¼x#°#F¿“Õ²@ÊB<áŸU>KFúGúâ\q.·‘^-Ç´ä÷kÉ[b,1 %³ìP&”  =  ðÍ4#åW²Q6‚ü·¼!o€l—í²ø e”œ•Ór˜%?Gƒ£ä?•GÊ#à´–üa=ÿ³Éÿüþ+ŸÛÛÅs{{>o°ÿ.B2h‹_¿•IEND®B`‚routino-3.2/web/www/routino/icons/limit-0.png 644 233 144 1367 13061246474 14437 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܬIDATHÇÍ–?hAÆ¿=5wòǃØ)ØØbÀ69P<D’"¨XˆURš"…•¦V†€ØLLH+zêZh!BÊ9°84&¹ÛýYì¼ÝM1&Žfy3ïý¾™ÙÝH’Žº§ u"u"Õæ©ñxf 3pòi˜?j€WôŠŸîBçTç@n:7í/ǹÍ[}²_ŠùI=×QÅéÙô¬—wù\=}õtæX˜ß/Av.;÷£7Ÿß|ðlæÙ ·¡R®”¾ç¿ç!ÎmÞê­ßxI¾&véKpdéÈ’÷Ò-é º/t_蹬öÀ¥ÁKƒ_}=¤ ±´Ñä5,ª‰Üæ]½õÏø¦gú¡AWW¿—‡.e‡ ËO`ìøØqÓÛžîq6¨×ê5€ÆµÆ56!(%<<ˆs›·zë7žñMÏôC?Ú¹·ÎÕ̕Ldè-4Þ4Þø#þÛn"¶] Ë·£jâ~ãßôL_IC§B¶’­ÔÃJc¥/‚?ìó3!¼É&{‰]õ;xc=Óý8c^íñ[ãQó™ÄØ íÕÐß ;ùþ™X?ô“ ×íÜ‚Ô7Ú7ê–QÞYÉ›÷æµ%iCò$¥•Ö~Âú/â;½¤þ¹AÇËŽ—Á,Tz+½;ŽJ9(ÿñ í7/â»0ýРמk÷?Cõ[õ[TU…`=X?PC»ý%ùÕX?ô“’üEÑû,Õ õB´ì]’Vµ¾âß÷ëÂxÆwz¦úIIµ|-ÿñôêÅ«Qïu)X Ö´%é—~¨1Ç‹øNÏôC?îð¿/H¥ÉÒddìƒD‘¢Ò’ZÕ*$mæ?Ãú/â;½¤þûB³ÇšòËß´ÿʦ½]ØÊ5Ý}LRÞ`Ñ¡•yWàÅIEND®B`‚routino-3.2/web/www/routino/icons/limit-28.2.png 644 233 144 3056 13061246473 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜãIDATHÇÍ–ïOTWÆ¿3E† (Ôa’†NBµ¢Ö®‘! Û`ØFÛºÐl¬bh䅉˙lJÄÔªµÖ "v‹‰ÝBü¶a¦°h´Òª5å…kv€sçžÏ¾®wv÷ð¼¹y¾?žç›{î}Α¥‹Oë*ë*k|[ÿdÆm…¶B×—aÜËvËö6@§ Ÿ,;±ì„~ÛÄFÞ¨ì1ù#õŒ¸,3ÓÓiÉ]ć ,«,Ë–ÆÍ×!¶+¶kFƒÊîÊn€‹'/ždLL<Í}š &6òF½ÑoðEòË¡ÿÑ%ß,ùÆrb¢c¢E ­ ­ co¸à^¼µõ­­^xô‚²@è1àÀ¡rŒõ¯läë~ƒÏà7ô ýð<Î-Î-"PòvÉÛ±Ÿ…nu)u)†^° h¤h-ÚÚÉ<¨ëê:,`b#oÔýŸÁoèúáyÌ­œiɇһ¥wAök?Ó‚i ´-†àâ¤JŸÐoë·A{ Ý×VÑ*søßž!¥ÿœNÔîS‚) ? óCé£ÒGÀ¿ }c+¿Éü+Äb(µp·ÿn?p€bP9*‡Y.ÓCèsúœ>tÓMwÄ -´Ðرc7ÃʯüÊ¢‘FµEma–Ãa~\Ô[Ô§7<0)"Ò~ƒ„ªòªrƒN_;ã­õÖ‚§Áó‰çÔèµÑÞÑ^SÐ[ì-öCóHóHóŒggg›y½OïÓûL<¶dÌ:fO«§ÙÓŒûΗéË4õÔ*g•˜Ï#¡‘‘Z¸üÑåàN¼1ñ†ªpLǶŶ1Ÿ›•ëÊuAÖê¬ÕY«¡i}Óú¦õšœšœš ;œ;œ;œr3åfÊM...0:;tvè,8 ŽÈwå¿”ÿ¤ý>ÙŸìgÞÛóàȃ#ªºwuï=1<„~ŒëˆëP0ë›õÁ…S_Ÿÿú<4üåÀöÛMùó7æCe”kkkpÊrÊrÊ9­9­9­Ðçéóôy̾Î5k:×@C[C[C›wÿñÕW^}NÄŸYyf%ÀüÂü„âìßÛ¿WBp™m™M¿¥*?.6û ýýànw·»ÛaÏèžÑ=£pÚuÚuÚ٭٭٭WžWžW®ZW­«ÆKÆKÆKø¿5°a`ÃÀÈZ—µ.kìÒÞûõ½_Aí0læÉÑ'GŠ¥û–îÓo‰ÞìØêت:aª~ª|»oÕܪ؋¶:[4v7v5v™…Õ…Õ…Õ°·loÙÞ²ˆ7Ðëîu÷BÇÃŽ‡A³jVÍ CÚ6¤½Þ^o¯‡¦ü¦¼¦<˜®¼x ´Yƒarÿä~Àï‰÷¨N«úóLÏLoXdðÆà ‘þw~Hÿ!÷C¼¼' ——¢.E‰,¿³üÎò;"›n>¸ù ˆ÷œ÷œ÷œHBABABȦ›VlZ!R”^”^”.R´­h[Ñ6‘«ƒW¯ŠHš¤IšÈ…ª ï^xW$ùâÊ£+ÊÂßV]ûåÚ/¼/â›ðMˆ„®>|ì¶Ð¼øÔí®Ù]³ûwsçÛ[Û[ÕëÓŸO¾9ù¦Õ§à gK“¥ÚR-ç‹Î—/‹H¦dJ¦ÈTÔTÔT”HRbRbR¢ˆŒË¸Œ‹øãýñþxÛ1Û1Û1‘™¯fNΜÑüZ¢–(Xüú€> –ÄÁÔšÔõºí³´4«Ov>}üæ¢Áš>†¯,úX@%©$ž½pU¡*T¨.Õ¥"¶XÙ•]Ù7nÜ×sÌE~m*Ce<ã+6õ }ÃÇþëToɧ®´²´ÔagVC!GÈê+mJ›"ÈçŒ0‚b?ûØêïê[õ-p…+\ü<å)¨5£f€?p˜Ã(uY jA‚j0Š3ùi+=RzÄ8š"ÿù=+ŸÛÛÅs{{>o°ÿú‰ü^Ç?IEND®B`‚routino-3.2/web/www/routino/icons/limit-4.6.png 644 233 144 2510 13061246471 14573 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜýIDATHÇÍ–]H”YÇŸ™¶|¥4ÓiûÐJJÁB»ÙÅ Œ”¾ íB¦vÁb/„7Ø.‚ %–.¼DÙ ”´pó¢‹ÐjˆUÜ¢ÚÑp‡ ‰u˜\Wg§yßs~{1óÎ;­Û^wn†ÿsžçÿÿ¿çã™# ""ñ_÷÷wz »ëœ¸±Ûؽáz ·Zà:è:øì;X~eù€í+ÚÕ Ûóv~r½ˆÃŸ¬gÇ%Cœ@JwJ·kgŸ‡Ã›o6VÆð¥ûÚ›Ú;gÂÉÛ'oôtôtp¦†¦†B;C;ÁÁö¼o×Û|Éürþ_ú"°øÎâ;®ß!eIÊÈ­È­XÿM,a|=Ø`?Àä¢ÉEÚ ÖÀ2–éÀ,³Øc: Ûóñ|»Þæ³ùm=[?æGÀSæ)ª£UGS¯Æ ^ügWŸ]mëE{ \`˜³æ,€uÌ:Fô}}.p°=oçÛõ6ŸÍoëÙú1?òáÞ6—CQc$ ýÌŸV¿Õ zTQ] êƒhU¢ŠTΘbŠ)ê¯u­®sØ ›a´R¦×ô+d…€pœ_פԤ؛˓¶RD¤àHJšý ü–ßþ`¨KêóPC è_õý$ÉP Á$œO>ù ƒ:¨“ã·c 8e=¶3îã½?샣ó7Öú|ç|ç€(€*+ÓÊý¥®ÖÕh›Ì7æóÁ`Î`Î`Ž£«.«Ë것_U¾ª|U ÍýÍýÍý0rh¤r¤ÒYP=ŒBÌ¢*NèÇýÄ 7À™3À{ýGͨ%ÂoŒ0º\—ërȯ˯˯ƒò›å7Ëo²`„2B¡ Ø6°m`ÛìØ;±w¶··!и¸–HèSq=[?îÇ-’>>Pò…HÙ®²]"Ò#"âº*Å‹-:$)²IJ¤D¤±ª±ª±J$bDŒˆ!’ÕšÕšÕ* ÆÝãwß=.2~füÌøO±§ØS,²ÃØaì0D<£¿ÇŸHOqý׳õm?°"mEšzÓo¦ß€õ4qíè(ë(ë(ƒì·Ùo³ßBm}m}m=lhÙв¡ƻǻǻë|Ôù¨óªBU¨ -Ðh Àª¡UC«†àÞÚ{kï­M:¥¶^LßöãQ}ªÏõ\Ĭ4+E\ߊˆˆÇþ$·ÇåÎÙjmµ¶Z"£}£}£}"¯}¯}¯}"O7>Ýøt£H´)Úm12L#S$­(­(­H¤.·.·.WdåÕW>™l™lžlvV˜"[/¦Ÿð³àŒaï¹Õiu±­ÓÖiç ÛÛÚÛÚÛ úbõÅê‹N|Ké–Ò-¥ðnÝ»uïÖwww¤©Fª'¼'¼'¼`þdv™]ªWõÁûßglá­ü+q+ ¬Пë]‚Vê¥z á¼p^8fªgªgªA§ëtÁ†`C°Áiª^Õ«z˜.œ.œ.µIå©<çV2n›Ã‰ ýØ­ü ™~3A°÷êˆ:Â|¢WÍ"h4˜g>Ñ•j©¥ôR½T/Mj¸9ºBWeV»ÕžÔÇ"þyÿüGûØÿtþ¨5` ¨&ÕD”ïé¢ M6™d t@t˜gŽ9àÝtƒ~ §õ4šëÊPQ°žYÏ3ΟÐ[Ðù?ÙÿÊOöuñɾÇ>Íì?m Ѧ¥ 3IEND®B`‚routino-3.2/web/www/routino/icons/limit-36.5.png 644 233 144 3103 13061246474 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜøIDATHÇÍ–ÿOÔ÷Ç_Z8#_JpBC¤M˜?ZW/§+ ŽHk½â]!Òšr]ÒŒGãH¦ƒ4þÐŒ¶âØ"6Âð(_²ª™a¢§MW¿àµb•ˆô¢Xî>÷y?öÃñÙûøþå“×·çó™Ïûýy~Þ""’¼ô0=gzΔ‰M¿ˆæã‹â‹ž?‰†!æ˜7þû[Hr'¹žm{¶M¿ºÑ¿|^$Š¿œÏÈK²Dq'ãNÆ,ÅMðæ†77ħFâߟs¹g^ƒ÷úÞëøô“O?á¸?r`¶`¶¢±Q7úyo9¾4=Á/+?[ùYÌÄ=÷ŒdmÏÚžýËHƒ7^õõWîÅÞ‹U&¬fµ*0–oYlÔ—úyÏÀ7ø þˆË+–WDÀ^f/3‹ \ÿÔgÖg|¡à‡X Z@ „ËÃå,‚:¯ÎC Dc£nôóžoðü=Ñ­\i.„Ýã»ÇA÷„†µÛ¡¬PèC¡›¡›„–”*õ¶*U¥ i£Ú(躮ë:?\çYd>tÝ„ÂëC5¡Û#ø4ï~m÷k†ÀæÂèVÞùñÁ0+hÎP *_å³À¿8Ç9PVeUV 4Ò– 襗^ šjª—åGe˜fši•£rX@øK|?=”ˆÈÑ!+ß©|Ç@Ó_¼¾ýËþ/û¡ùxó±æc¨Ë—\>åóZ½V¯š;›;›;áŠóŠóŠó‡/L+ÑJ´èvu—w—ÃaçáºÃu¨¿”µ·CÀლ—k^5Ñ#zˆÈ~ ==ðµeæÞÌ=åJù(é…¤Xtš8€¬Œ¬Œ¬ 8µãÔŽS; È^d/²C‘«ÈUä›ßæ·ùa¢v¢v¢6*ìAüƒøñ°fãšk6‚ýŠ}Ø> å-ÛZ¶•Å)wÐt)xBž¨ŠˆQ΄ԄTufSgSáæ‹·­·­pø#w±»º†».t]€ÂœÂœÂ¨êªêªê‚ì©ì©ì)ØãØãØã€Õ <Ôjµ¨°þ¸þ¸þ8XÕ°ªaUØf/°Àß+:s:s¢}êìäìä,0žØšØªN ¾ä`rP¿Æ|ú>Œ~ösß¾…]¦]¦]&ÈÈÈ€º’º’ºÈsç¹óÜÐz¤õHëÈÉɳígÛ϶G ‡‡‡ÀUà*p@›§ÍÓæô–´Æ´F8óöÀØÀ>å…ò |5ᛄoôk&½\KÐb®É¯ÆÆDN”xÞò¼%–mÕÛ ·Šôé}zŸ.’âMñ¦xE&M<šx$bÙoÙoÙ/RYSYSY#’Ö’Ö’Ö"rÇyÇyÇ)ÂArPä®é®é®I$ûböÅì‹"Ž G…C$Sez3½"¾$¿ÇJWé"R£gê™1×L¦Ò…ÐBèêç"ýž~ÈÎ:g»³w“m‰é‰éL¼•øEâ"›36gléšëšëš±¸,.‹KÄl3ÛÌ6‘|¾?ß/²Ó¶Ó¶Ó&bÛkÛkÛ+²îÖº[ën‰tìëØ×±O$ùçɶd›ÈO´unëœËß/ý¸ôcÞéµöZEbW=Ž{wõó%;:Äh•¥Êý*µŸ|?ûý,L_œ>3}® ׆—êð¥ð¥ð%ð­÷­÷­½MoÓÛ@ÝP7Ô ðçúsý¹@t@ðtðtð4|gšžŸžG©J-EK‰ò1YõRÕK†Ÿ†žð±•_Q¿ù¿Ù•U­êU=¨&Õ¤š@mQ[Ô–e‡w­Z«Ö›ØÄ¦eùß©ê¨VÕ¯úÔµõ§%üãÞq/€yÆ<XÁW†οh8¯c…cp(âÌêŸÚŒ6ü9<žŒ:?'8ÎqPCjP ÝtÓ ,0Ï<¨;Ê«¼ÀâR}øBø!õoí¾vøÇ’óãˆuÄÁ'ÿéýW>µ·‹§ö>ötÞ`ÿï¥ü‡±†ßŒIEND®B`‚routino-3.2/web/www/routino/icons/limit-18.6.png 644 233 144 3036 13061246472 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÓIDATHÇÍ–ïO“çǯ¤-Ê/i“˜œí˜1ƒ,^lÚM]Váhd€â¢ÇˆˆÎÄ-Û‹33_l²,fÙÈB„ųAFc MŒ&œ KL † È\‘+”9~<}îÏ^´OËöx¿i¾÷u]ßï·÷ë¹DD$9ü+`~Öü¬91„͇£óÖ7¬oüû»n‚i·i÷à‡ôEÒ)M)Múpq#e½H”¥ž1/ɰ´YÚLaü”å”åX!|Ö ¶[ÇTuVu´Óþ ÇÁû³÷g¿¢ØˆùF½Á·’_>ú‡¾¬ê^ÕmKœ%N2_Ï|ýù¡„±ç¡äÍ’7~ù5F™ ø;°†5ªÀ¾؈‡ózƒÏà7ô ýû6û6ØU±«Âv>T0ü?x7ãÝ Co¹8ÃÖ€ÐÁÊ`%‹ ÜÊ € D±7òzƒÏà7ô ýùûÞÖï °gyÏrÄPŸ¾u9v9Ô‡Ú}í>FDéÃú€>Ú¤6¡M€ŠSq*Žèøßø-‚”:¤} }À²Ö¿œ¸œz Ä{¦öLÃú‘­ ˆˆ¼xlwlw±0ºctÇ(Rßj>ÍÇ“ˆ‚_M©)à4§9½ÂH=õÔ‡6ÐXÒI'ÔŒò+?€*Wå<á‡?ÇGúFúl[ ËHÈOx¥®Aõ{Õﺠç¼îÝçÜçP÷ž¹—z/5ªwsßÍ}7÷ÁÙ³g`(((?×êõƒQ|÷?w‹ïC}w}W}êf¹§ÏÓÉÎUãGräB~„‹""ý'ùºåÓ–O#ër¨ÍÞr±å"‹æ+æÍ?B·½ÛÞm‡“7&oLBò©äSɧ`¿k¿k¿ 2z3z3zÁÓèiô4F ùF}£¾Qpö8{œ=°óþΡCðêÔ¦O6}ÂâÄÞ@V K‚öçÚŸÝòcsâû‰ïç½,G¶ÝÞv[„8Óy™ŽIŠI‹ãsGƒ£A„J*©Ñ×éëôu"ñíñíñí"®W«F$Í“æIóˆÌÎÎJd\ö_ö_ö‹ŒÕŽÕŽÕŠØsí›ì›D^KØš·5O,ög¬¥ÖRÓyç;ÎwDÌ[¦¦ó^6‹+櫘¯ÈYufÕå‘™·ÌeÎ2§HvYvEv…ÈüÄüÄü„ÈìÚÙµ³kE⇈4ooÞÞ¼]Äïõ{ý^‘Twª;Õ5¦×êµz­Hjjj¿È–[[· Š\øåŸþ¹~àzïõ^™Iù2åK5nÊ1åm¥wê¦Û"Únm·ˆÄ‰ˆˆ=B|GÖ‡E¬%Ök‰HkzkzkºÈæ¬ÍY›³D®®¾ºúêjK‘¥ÈR$â©óÔyê¢Æ,–NK§HÂÆ„ EgÎ<œ)âèu4;šEœ|ô Iì"œà„ÿ Þ Þ2Ýþþ“Ð2Û2 Áã¡3>"‹Å?_ü=´V´V´VÀÃG=|Žn8ºá(¤4¦4¦4BÕPÕPÕx ½…ÞBÈwæ;óà?æ?æ?\\\`³Z•UÁ+ßÖßÖYÔZ ½Ö¹Ö9 'ägå­¬«®~2n¥þ™þ̽6·wn/jáÊB÷BwôP/´-´-´ÁôÔôÔô¨&Õ¤š@u©.Õ3å3å3å –Ô’Z½F¯ÑkÀ·Á—æKCéYKãKãÑ[ɽêª_0nõ°±ÏÍkóba$8ŒèÐwé»Vô±WTžÊÕ¡:TGÔ¨ŠWñ*XÏzÖ¯ècoQJ)¨Õ*Se¨—ÔK®KQ66 Dá¡A™LÓ›E`î½ç³/àrg·ÿ€÷ÍÍï÷ýï÷{ιçw€ˆˆ¼¹øp®t®tzbç>;Ÿ^ž^ž×¹·àøÀñÁ¿Â߸u5ëªù“[¸UŸ<^ÄæOÖ³òò¦Ø‰´®´.Géb| öî)LÿÝB|:îkîkÿÑá“îOº~hÿ¡?ÀÏw~¾/—‚[¸Uo·ø’ùåØÿé‹@Êõ”ëŽç–š–*«Þ_õþšƒ £kÀ_é¯w»”Œ—@ªÐаžé¤ØÂë­ñŸÅoéYú ~²}Ù>¨ú°êC÷w ~ê€Ã¹‡s-½Ä5àK¾$tM׌™R!8ÀŽ-ܪ·Æ[|¿¥gé/ø±·ÒiÙI¢&Q“X2tÛ|šˆ%b ?›ß4¿‰„9­rTʪPÕ»ê]УzT‚Ú§TÃÒ ¢ŠÔGê#”÷ÍûH¨F}—¾Ëæg¦Æ¨1µ¨oo¥ˆHþ7̸ŸºŸjË`dõÈjP³TpÌ,0 ˜YRú t‚Ú¬6«Í@€Û9ÈAP-ªEµõìaO¾ËAfð/ò3²jd0玸#Ú2ËÏ¢±Ö>´@c ” `Y1|bø\r\r\rÀ³ögíÏÚ“ðžážá¸”rQ]Tð\‹dF2“V|ÔÒ 4š­­mí[46ð™Ùìv,•ïýgâÞ·÷¾e.c>ã—Œ_ lºlºlòâyñ¼8Üh»Ñv£ ¶´liÙÒÞjoµ·6\ØpaÃY>²|d9‹ƒÅA(¼Rx¥ð ¬Ÿ[_‡øß§ë¦ë˜³ôÔTg¸3løLÀsÓsSu™¹ãUãUöLÿªú>Gÿxôë£_Ûù’‡%KBÉù’ó%ç¡¢¹¢¹¢ÙÆwoÛ½m÷6ðE|_*VT¬¨XaãÅ‹?‚?Ýo?Û~ÖÎgÆBc!°ü,qù]~¼ÎçéCéC¡^DDb5µïÕ¾'Ù+®½ýÅÛ_ˆüZ h"•¡ÊPeHdmÖÚ¬µY"]—».w]–¥ÇÓëéõôмì{Ù÷²O$gÎþœýIø˜gÜ3.òjù«Õ¯V/¥cò¯ÔæÔfÉq ºñ:E̳ÇñDݞ˞ËqtˆˆHö£«ƒû÷‰ìü|çá‡Eê½õÞz¯ÈéþÓý§ûEr¹Ü€ÈÔÝ©»SwE¢‡¢‡¢‡DFëFëFëDÊýåþr¿H45šM‰öD{¢="‘M‘‘"ù§ò÷æï]2–ípèUz•ˆåÇ)¢•j¥ƒøÇ­¦[MV wÊûóúódÞH3”¡DºÛºÛºÛD<ƒžAÏ ˆ1iL“"eÁ²`YP$kþÖü­";;;"§ôSú)]dÝÀºu"^¿×ïõ‹T¿UY)⻾½~{½Ì[zÎíýF¿!bù±Oe_ÀðY;n½úQ i!x±ûEËÔÄ͉މ^˜lll…Ùã³Çg4Ò±3±3±3`Nš“æ$ ££ƒ6Ãfb/bc±10§”K¹Pz\Æâ©ÔGG~s*ó¿·æÖ´e¾¾½ôMV€Z£Ö0C‚ ûc¥‰&šÀÔLÍ´I¨“ê¤: jBM¨ PÙ*Se&á{õ[ú-føt©­Y $ÜQwô7}L„Y«óÖºj]Àï:³êZ˜™ºodY$ÔŸÕõÅw´Ò Üç÷@=PÔàotÓ4n„QêG£È("Áuãˆq$©óµ)µ)ÖJýOçmÿ•¯ííâµ½½ž7ØÿiŠØ–XYŸKIEND®B`‚routino-3.2/web/www/routino/icons/limit-12.8.png 644 233 144 3026 13061246472 14660 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜËIDATHÇÍ–oL”WÆ ÿ(fˆµ¥Ž˜ÕU‹7Ý™0,l›4mhHC’v šÆhZMMZ>`R7ÖVû'TkÖjƒ˜H(´ÔDBâe5Õâ––± -L§Â,²¾™‘™y罿ý0¼ 6Ùïž/“çžsžç™{sÏ{DDĶø+úTêS©y œú·äzVuVuqgŸˆCÊ )/üûXñÉŠOò?ÏÿÜø!‰Í¼Y¿¼_$É¿\Ï\›$2»2»R\‹¸ êJêJ² ø¨¬=Öž¯õ¾Ö ðåÙ/Ïò:¾ | pÏuÏIlæÍz³ßä[Î/m¿Óô¯Ó¿N¹™™"à¨rTíIüTÏ=ûܳӖi‹J€ø,K®rf—a3¿Xoö›|&¿©gê'üØv§<ÿÒó/YO'~è€ý…û M½Xð.ï’ º¦kñ—ã/åQRH$6óf½Ùoò™ü¦ž©Ÿð#Ÿíûn´ÚXmlÉаñçXZ, Ô;úmý6fF^ãšq ô;úmý6 Æ‚±@24æ˜[BÊðÇb±1ý—Xa¬Œx‚j§j§mQé(5‘õuÜ:®¥Á-÷-7ÄàuNêAÂK AåW~ 6Ú–9Ä!šWój>¹¬4¥) 8Äa(§ræý?¾aß0€U³jZW~wêÄh9ÐrÔ€±Ù$öüÝÓîiGMÚ'm“¶¤àèÈèÈè?vüØñcpóÒÍK7/%óF¿Ñoô'±÷3ï§ÞOáèèÑGo ¾/ýbô‹¥êÍê_ÍŽfJøúEDn¼Égçß;ÿÞÒÿ|¥Ë~¾ÿ|?Ke‡eô¹ú\}.˜Ì˜Ì˜Ìk…µÂZîbw±»µŽZG-\w_w_w' ]ì¸Øq±ìÛíÛíÛagÍÎ;w@áàê¦ÕMD¾sLÜ›¸§^¾M}› þkÂOª¤æ½•÷ÖÓ[¥Ù9æ!CD$å´ÌXVXVH¦=ßþ„ý ËËË‘©†©†©‘½göžÙ{Fd`b`b`B$gUΪœU"^›×æµÉRèkõµúZëë둚Ý5oÔ¼!²zäÉÙ'g%ó3øvðí”Ó"®Í®Í")®œ@Nàé­ùå?fŒAÐôCܹtí¨*¯*¯*‡“ã'ÇOŽ'wÂÓêiõ´BIiIiI)4éMz“ºG÷èžd]GaGaG!”J¥¨ U†*CPüfQcQ#|_äûÐ÷!A †ÁðæMæMc‚‘7˜7¨º P(ƒø_x(œÿqA87tnèÜø³üYþ,HŸOŸOŸ‡#•G*TBh[h[h„ׄׄ׀¶OÛ§íƒêSÕ§ªOÁž‰={&’¼f×÷®ï…3?wÎvÎDÚ#í/ÈËS]©’ªUj•Þk"—.ˆÈ:^]<‰h¶d/d/ˆäNåNåN‰ W W WˆF…Q!ÒÝÜÝÜÝ,â¸ê¸ê¸*ÒÙØÙØÙ(R·®n]Ý:‘ƒ[n9¸Ed8:ŽŠ¬üÇÊW~,²U•ùÊ|­ÿk}A}¯Šôzz="–…lô^[~+[[Z¯Ì[i|`|ÿ5î?~ÿqT4'šMƒÈ®È®È.¸kÜ5îàïöwû»!` Ø6…‡ÂC07=7=7 ÔSO=DvGvGvÃÌo3?ÎüˆRˆÝ‰ÝIÞJ~iÙØ²Ñ¸'®,[ÿXÖ€–¾¸/¾´ãÏ€Ñ`4$ç!Âÿí¡OêOª\•ƒêQ#j@mR›«¬Eþ?únùnXç¬sZß=4Ç–M~ýEË‹–ääǦéc@{|!¾@ŒÃôÒ‹Rê¬: êŸ AÕ§úTp€ýìU!î'üÑÿ&þ 1uYŸÑg€sò/êE?ùÝoå#ûºxdßcæ ö²eÞm IEND®B`‚routino-3.2/web/www/routino/icons/limit-53.png 644 233 144 2440 13061246467 14522 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÕIDATHÇÍ–]H”YÇÏXæ©#´(ChÃz³¡u±~¬+jÁ¶à´¸DÐÇebá²e¨°Y‰}ö´]8M£èE’˜+ÊFËf h0µÃªÍ¼ç=¿½˜9¾ïîæ²—ž›áÿœçùÿÿó¾çyÞ#@!„+ñ+ )')')=Ž“¾µâÎrgyÞÍ8n—àØãØó²2.g\ÈìÊì2§,¬÷u¾½^‹ß®§ãÂ%¬@Êí”ÛŽâ> {¿Øû…ó³8n @ê½Ô{p°ÿ`?@ßõ¾ë|¡áÐ0@¸8\ Öû:_×k>;¿8û}! ùQò#Ço².e°©lSYî‘x¯¹PUQU0»fvJ9¬g½*"DÐë ëýD¾®×|š_ëiý¸Š6 »÷íÞ—z5^0uNl<±QëÅîÍ4³Œˆµ²– *€XXïë|]¯ù4¿ÖÓúq?âïïöû¯Àëô: 6rRNs³¹™˜<-{e/J~.se.Èoä~¹覛nP™Ê¥\`LƘãfÔŒ¢ÀÕ<É$£øÃ˜5fmzËúq? ccÇ¡çCχårŸzjÔõ|Ô‘¹Ž¹Ž¹ÈÞš½5{+T»ª]Õ.8pñÀÅa¨b¨b¨²^d½ÈzÞYï¬wÜÊ­Ü F²G²G²-ƒfSÌóh~å³ôã~Ö ‘îO÷~)DQiQ©Bˆçâ¹ãªú]¤ˆ!Ö$^ùhíhíh­‘éÈtdZši¦YˆÊ¾Ê¾Ê>!ÜawØ¢±¡±¡±A·Óít;…x]ùºòu¥Q•Q)¬õ,)”)qà¸jé'ü@fZfšù ¼{ûî­Õöf³<*Zÿ0x>x>x|%¾_ tututu@–'Ë“åÇÁÇÁÇA+¿:P¨@N}N}N=Œ¹Æ\c.Û{$»d—}Ìhý¸éþt¿º ¡m¡m¶ÂY ,|Ë{Ë{Ë M;›v6í´âeá²pYÊ[Ê[Ê[ 4X,µ,,(,(,€k×® Xq¹ßÈ3òìÝ£õã~V>cëb½±^ëŒMÝ™º3u<ížvO;dlÏØž±NŽŸ?9ïß¾„’Â’Â’BH ¤ÒP7Y7Y7 ‹=‹=‹=6ÛŒIcrå3¶rWêÁ8Àñ©-ŽG‹aÞ=ïžwƒÚ¢¶¨-–žá6܆æFæFæF@¶É6Ùf3ô’0a”mðþWW~bŽE–çØMó& ªYÝW÷AuªKê’­ýGÕ¨U¥ªT¨nÕ­ºmû¥j‡ÚäQE€Ùj¶²ÀÒÿšcŸ˜üĆ0äSùÀ¶:o° Ÿ^ò`ÚléIEND®B`‚routino-3.2/web/www/routino/icons/marker-90-red.png 644 233 144 4210 13061246467 15433 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü=IDATXí—LTWÇÏû1òCd\Ô2h UWa1º¸š `Im¤).Q´³¦›T@[SbË/Yp+I¥R‚&† 3È&tk¢hf­ÍF,Kã¶`M™d,¦SQEæÇ›÷Ý?˜ûæÍlV³Ù=ÿÀ¹çÜs>ïÞï½7C4kó)ÌøMQ–(K”…{ˆ›Ó3§gNϖ߉’(‰Ò?Úi ­¡5ÀlXn ‘D™„ûrËgóY=V?¼¿)œGÍWATÁ›Ãã‰+űGì1Op‡¸CÜ!D›0™0™0‰K…÷ ïÞvŽíÛ9ååå„|gùl>«Çê³~/ç!>;Ü_ö)?ÅOñSŽ5l…RJSJSJ¥#m}m}m}r¬û±û±û1LãžápŠŒ³|6ŸÕcõÃû-ûôå|¤›Ç;y'ït\frnäÜȹáß`óÙ|6lšœ!gÈðKUR•THk¥µÒZ@2HÉ òƒq–Ïæ³z¬¾Ö_7OAãÌœ™3‰ubX×1È&ä7äŸÈ?á7(`ïËMrÜþo½·¾Aß o`]` ý7o`&0È߀oðwxF=£€ü¾\ ÀÍÒòòkókýÖŸñ0>Ò<Ð<Ð<Øú[– «ÑUëªå4û/ö‡ö‡x¬ã–}%¾À#<B-”OÙ oŒa äj¹P‹ÚÏ—}ý¾~ÅuÛ±ûí~<ÕÕè>Ò}$§1…O,ËIJÛu,в¯eoË^ùÝ`i¿ÙwÞw^ÕÁ3tyè2´¯k_7÷ÞÜ Å(ÈzY¯Fnn€ömíÛxní¾µ;õ›}^ŸWq§[öµìjÙ%¿«¬lÉ®„ô„ô„t4Ll™Ø2±p÷àG*ûfÓ¤i˜=÷ …jÿõU Ø{µ÷*±B,ÌOœŸ¨ÊwWTJý ÷Ä–‰Ä‰D€ñ0>ú§M;šv4…¾L²! Y\¾ç¾ç°`pÁ ,:X¤®}­üZ9ˆ©b*<¬}X ot¿Ñ 9§sN«óÛ[Û[UÀ.Ç”c laÀÓŒ‡ññÁ#µR£×è5zåŒEѲ’•ˆIéR:‘û÷DDKKê›bñ[‹ß""’œ’“ˆ¨7Ð "<>xœˆèíÞ·{Õù;îX¨r£ûãûã‰è|Øõ¥éÒtiº”#¿R já/Î>gŸ³û'k&e&…Ò¢/̱ϱè1£1£ÄQó{ÑïEQ|¥·ÒKDdýÖú-ѽ£÷ކ51‘‰ˆÈ?ì&"š72oD¢ƒˆ¼A÷Gï€w€ˆÿr„jˆˆHp9\—ƒlŒxoà ¾ŸƒKÜp®â\Ù¹2•¢ål9¦N-à©—ëe0Ü4Ü€{ƒæZçZ ;¯;’[“[àTá©Bµ Šý)6´õÒK£¥1ÔïÚÉ«“W'•ð\&—Éeú~&!KȲŽÕ³S–ºT7¥›’–Ù?²|dyèú7ë·ê·ÀÁøƒñdjú éО×ÎÞwpÞ¼þæuXï\ïT«ïDù‰rÛ¢ÑNOO†gÒqé8~lÕÝUwÊ $ ‰BbëSŠÓÇéãôDâuñºxÝäT.ü¢¼ì¼lé0«0vwÃKðL³Ó>ÿóùŸ@wvw¶ú< $ $@Ü`Ü ÷"Û"€§ü~ h­9\s8ô¹¥wÞùâ/Ó àá€pàŸÅ³~Œ‹Â-å´&S“©ÉtœeŒUGjÔÊ›•ûÕÝâ»Å³©gS¸¿Ký.ìŠ \ \R¹ž±Æ±Fhóµùiß­ïo}ZßΩÎ;w°MyBëùz¾~f —Ì%sÉ«Ú"…å|íáöp{^?Ù¸N®“i%pÐb5bþE»‡•§3$7ËÍ*_–?“?Ô¡7ËUrUHJN“ss­ûF÷¿LYÉ……ù š du!Ö\Ê¥\ñc2“™ÌD‚KÆ|É èÎèJt%~­½Òö•í+µvý7ü7Ô€˜Á €é o ŒÆ¹Ø7솇¥íîß]±»B:¬¼@ÏÄ qÂRTžTžTNÄçóù|>w!H·aÎ þ-F„a„»˜v4íhÚQ"M©¦TSj©V´››Ÿ›Ÿ«ÖnÀ0 ,°x‚'xâ–VH+¤!-6¯o^ß¼^ÞÌêi´­F뜙õuÑá;Í]‰Øzâ"ܯÃ}]ô¬víBÚ5V«TÚÕúµ~m(ð(ð(ð(¤Å! a°Ä Å Å É…Š&ãø8>n×ñ)žŽà‹¢—ÍÚ-äLœ‰3©µk±Z¬!íú­~«?ôæ{^$½Hz‘¬ž\=¹zRZ®h±KèºNmdR J/0ž^a¡V ¤]—àRi÷¤î¤î¤_k7ÙMv<ð`’‘///†®ñŒxF<3üIó÷ˆ¾ÁqŠ}`¤± »‚ÚýëÒnÞö¼íyÛCÚµl´l´lÄùÙ¸¬ìW•p%¯ oÃ?‰èËÑi¯Òî&¡^¨êkpIMIMIüç o†7Ãë¿«lµKp .c uPuPðÚìý¢è´HíV‡ûy?rû¹ýÜ~€ ¨€ ¿æó‹ùÅGqô·¯S§S§S§‰„ÛÂmá6w58±8bçþo¦UþÓ“žôâ`x¸r/ó2/Üî wåá’Ùñ×,;c‹¨ûÊ­þªÞ?—Íc‰hIEND®B`‚routino-3.2/web/www/routino/icons/marker-62-grey.png 644 233 144 6336 13061246466 15640 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü “IDATXÃ…—kP×¶Çÿ»»‡yñÄ ˆ‰0òP"ŠGš0 ñÁôN)1T0ê%Z–x©ƒ¢(”9‰Ä äQ¦0š "*ˆ@Å^ô$xˆBÂcEEP” ÌLÏÞ÷3¦ÊªTÖ—®ÝÝ{­_¯õï½×&™™™™™™PaÊF¦.Ü2ážpO¸Çj2OfžÌ<Éܲžd=Éz²ÂŸ93gæ|øÑ]tÝn6V+Œì¡E$~ðƒ€Nt¢ÀflÆfö‰4V+%é€0 ü§ˆèˆŽèþQx`ÆfÔýš˜˜HE/ÑKô"«§8è +—Š{†0„qßÓ,šE³è “Þ¤7é]eUfUfU~ßg4 škÿmX`X`X°ð”yÊóù› Ÿ)¼^ ¯¿Ê,I–$KRTKfÉ,ùÞÛÜR²orßä¾IhDã,¡B¨*Ϙ&L¦ Ï5ê7Ôo¨ßÃâ>Œû0îCá{Õ˜jL55¦c:¦Cd>̇ù@@ºÐÀö°0ŽqŒð…/|¢%Z¢…ˆgx†gFGGÑ[öeÙ—e_Šo÷6ô6ô6·ìävr;ùýj1VŒc_߀×ñ:^ô'o–7Ë›‰›ÄMâöϪ Õ†jÏ5ê8uœ:NŒNNLNLNn©ÒGúòœ<'Ï”¢¥}‹¾Eß‚`Q[Ô5àÔæÔæÔ†é6ÿêõêõêõb´-¾ÇÆÇ‰ãâ¸8¾z‘©ÜTn*O q‰s‰s‰cÞq'âNÄl£á4œ†Ã‘KáR¸€;Äâä9GÎHCÒ´¢­à€Œ’Q2 p_s_s_|/ßË÷¬˜³b8ÚüÇÕÇÕÇÕ ß»¬sY粎yÛxl|óc~ÌïàßÌJ³Ò¬4ÙšlM6–«®¨®¨®ÀŽ®¤+éJ(¸+Üî  ?¡?¡?hZ£Ö(~Qü¢øðiòiòiOxÂø ¿á7`H1¤Rw?Üýp7àðØá±Ãc`NÓœ¦9MÓ2-ÓÂQuRuRuÍ*Í*Í*,/Û_¶¿l? ™%™%™uðo‚è-z‹ÞÙâ|Îùœó9|¤ ÒiHõKEàPþPþP>p §p ÀÄ¥‰K—€ñ¡ñ¡ñ!  0 0 Øä¿É“?p÷öÝÛwo§ß?ýþé÷‡Ý»vc©c©c©@@P@P@ðŽîÝ;:ØÌ.h,h,hŒ\{víÙµgøD¯Ñkôš¿láŒÃÆaã0¾™3;gvÒå{å{å{a ¨Áæ¡*¸*¸*x¥î•ºWꀽÏ÷>ßûHŽJŽJކ~úqèG`ÔnÔnÔø!ö‡Øb]ˆ.DìQíQíQ;¢vDíˆî¼sðÎA Ý³Ý³Ýó¨ ¿)¿)¿ ƒÇÆ'à#|„ˆw–;Ë}1AʉœÈ‰€1Õ˜jLæÌ˜ططط‡|ùòd%²Y °êÞª{«îN&'““ ˜ËÍåær@ðÃà‡Áñ;I«Ð*´R©¿Ôàø~/›”ÛÄmâ68†c8Fü8ÞwçÝYéØâ±Åc‹Ñcî7÷›ûÁ['0\À\D½¨õÀDóDóD3°¶rmåÚJÀm«ÛV·­À™Œ3g2]‰®DWÄÐCPPP É¾É¾É8{,öX,îîî ø–ù–ù–ABÀ¬qy}‹¾Eß‚NÍ©95+åd9²YŽ˜Û3£gFÏ Vz÷›»ßÜýæÅ—M°"VÄŠñ°xX< D^¼yXо }A;___` Ö` ðpíõד«'WO® >/ø¼àsàfÒͤ›I@L|L|L<ííí°l#Û -hÁDoLoLo ÐÝßÝßÝOe=²Y˜+ qˆ;P$D ‘Bä?÷Ö­¯[_·Þ¢Vû¨}Ô>|¯³ÖYë¬Å˜[ƒ[ƒ[;4š ššš´noÝÞº i$¤î¾î¾î¾@IOIOIÀ_ç¯ó×”„”„”@> ¦™¦™¦™€À&0-÷-÷-÷¡¸Üp¹ár #®Ä•¸r·H‰ ÇG8·z·z·ú3ì4v;Íw†7 oÞÀ÷–--[Z¶Ô²ËšYÇèýÑû£÷ÃØ«ìUö*LLL |EùŠò€Æ¤1iL€ÒGé£ôù}ùê/í/í/>-ý´ôÓR S›©ÍÔÆ c†¬3¯3¯3ÒڜڜÚjx0ð`àÁwËî¨ÝQ»£­Ì}æ>s_ª™ì{°ïÁ¾~ÂOøÉ#_òDòDòä†|¼z¼z¼Ú392=2=2E® _¾&œÔë‚uÁº`°ûÇï¿ĵŵŵðøÀãóbóbób k}×ú®õ€y™y™y€zÔ£`wÙ]v&H¤ 0 /^4¼¿\|¹ør1.K[¥­ÒÖÉ7§$·ð¹˜Û¾UàŠ¸"®ˆoF-jQÛJÃh KúJq]q]qýnݺÄ^]ñêŠWWÓ†@C ±ª|U¾* ²ƒì ;#Á€ä˜ä˜ä°$`IÀÀQÅQÀúsŽРņb8Vé«ôUzQÍWñU|•nœçÆ3(]B—Ð%í[Y.Ëe¹Â,k›g ê…ƒ$䑼ú.‚‹à"R+ðÞÃ{Ü• • • â¶‘Õ#«GV¿£%´„–¸Û¸ €˜ÚñÚC{h@]¨ uÑ&¥òºòºò:Ë®§æ§æ§f!_*‘J¤’ÓÙ[¶lýìà3ÐB ­eëG•èCúÄ_±;±“Tø_ô¿è1wl³l³lóélÝÝÝa¤l]Ùº²u¿kwª†è@€@" ¤“td™GæMUÒ¦î¦î¦ny»çvÏí>×¾Ú¾Ú¾úѤ)Í”fJKûøçøŸãŽX7ëfÝp²ÆùÖj°^ÏR{jOíátçñÇw¦¦¦i+•ÎJç{g;+;+;+ùÜšøšøšxIRH I”ž¢§è)0È!‡`£l”D$"11Ô=Ô=ÔÓµókç×·“rP9¨èbº˜.Nû˜;ÂáŽ<š´J1ߺŒ¯¶mĶ`Z$RëÐZ">wJ»–]$Œ„‘°ÈuSGŽkÍÛÌÛÌÛèöš@(·,ðHà‘À#ˆ¥´ƒv@ÁÍåærsaÓÅt1Ò¯|¾òùÊÇâ;¸dpÉà¾K6_6_6?÷¯Œg<ãSoÑZ@ „|kewØ*–1[Fa½ñBCVíî²j7ߪÝrNÃi8Mj’‘Œdî‹Js¥¹Ò,n)))„‚ã8Žã0jËDÝDÝDÝ5<*xTð¨€ï’eÈ2d¿VûýÆþŒÏºVv­ìZ XÕÖy  ïèKÀ¶VÿgÕîEÿ þü/䮓m‘m‘m9­s×¹ëÜ…‘s™ç2ÏeZvY;z§¶imÓÚ¦áDcscsc3y[Ñ¡èPtTMÕT½ý†°QØ(lœ÷õõ冭ñþ˶#¾ÌÅã,"""""¢uØÆì˜³#ÿ=8opÞà<[^³¼fyíߢÔ[ê-õ~ë‹§QO£žFM»0Ò>Ò>ÒÎþ÷ηw¾½ó­eé¸yÜ™O擯6øœ÷9ïs~ED·¶[Û­%?PWêJ]Ùq«ßJ+ á88ü‰½¤]ëra9€¤ EøI$‰$ñ_>¬†Õ°š¼+Ÿ-Ÿ-ŸÍµó}|ß×?›¦‡éám;6tlèØLÂÛêÏÖXNüÇÿ:Oû»ÖîZ›³Ø¶Ï‡ÁßãïùÛ„ƒßü »³»“£ˆ$"SUSUàÚNÜÉwê¼L|9õ/~ðÞòÞ2þ_¶/[–oY¾¥äs;áq Ôl¯Ù0–5–¥= þrÉÕUÀ4Ó8ãE†íÄSùN½ƒçà;|¿­G`Qå¢Jøt÷§»ýívÁÃo 1Ðpø’=ÀYÎ’ æ´9  êT³ Ã: €®íÄ|§ÞÁsð>‡ßÖ#o¯mó'P›S›h€äI5 ¬“ÖI’Öï:[g£ÍÇfÌŒöél $Hõ¥jRM V«Uꀺ . ùZMªI’ ž¨'Àl ßáKóK¦ Õ-àOøÓóà‘z¤€×TƒÕl5óZϲ’•À)Žswœç<çAëa=œá711Í 3~¬=Öž:T§ùÒü¶ž”°+?ÃᓇO¦‹?ä/sÜ Š)¶çà÷÷.®»¸îâ:ˆZQ+j¹´] »v-„Ö­;[wB¨6Tª…Wů–¼Z’NÓÔ˜•fe_šßÖ“öë1¸ñòÆËt]½u%Yž,·'`X «a¹s¹s¹s°ilÓØ¦1X__‡ÛÑÛÑÛQ(),),)„šPM¨&uuuð,ö,ö,æþ€¾k18øºÞå·õxDòó×}$R¹¹rsj}Åh—¯Œv£]|Ž'Nœ8" - - -"ýþ@@dqÁâ‚Å"m¡¶P[HÄl2›Ì&ÔIÙÞÞYZº´ti©?p‹["Æ¢¬ò¬rßhwùSz`AÞ‚<+/Æ_Œgû¤žÐ ÷ê½z¯û§‘ ‘ ‘ PÚWÚWÚG£G£G£ †G¡þyýóúçб¬cYÇ2(º\t¹è2ôõöõöõfì´œôiMµ‡ßÖ#?˜?¨oB¢,Q–Qø½:¡N¸ö½ö{í÷ÚÁßíïöwù‘s#çFÜøõúëõ×ëáÌé3§Ïœvýe­e­e­píþµû×î»~uåééé) Š"£ûF÷îé]Ñ»¢w…HÞTÞTÞ”HE "P©›_7¿n¾¤GÖ¬5¢>û]þ”žÿ=•ƒf¯éN½~óÛ›»oîÂä¶Ém“Û`|h|h|&‚Á‰ Ìç‚sAHÆ’±d &&&@Ò‡ô¡Œ‰‰£ÑèŒÆû®Sù},ÝgÞê;³Ìb_<îA·é6Ýúª¾ª¯fø/éfÝ l£‘Fë¬u–×̽»éN+vç©Í©Í9ö£˜]3]3fD¼Ö#ë‘w£|!32#&{æyæÉ<ù@^ÊK1ä‰Ä%.b$ Ó0E$.Oå©å¬g½ˆ‘4Ök©Ö-ºE”X ŠW²²*²*̈ÈgþÏüÞ"ßÎ~;{a‹­£ñ§÷ù®|o_ïí{ìý|Áþ_{ô“B ¡ÜIEND®B`‚routino-3.2/web/www/routino/icons/marker-31-grey.png 644 233 144 6217 13061246466 15632 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü DIDATXÃ…—kPT×–Çÿ{ŸÓom¤„T°)  ÄÈE°U4Q¢XÑÜ2J))áz ^‹@£B•‰8NHSQ05ÑèàÛ!€ 8#Ds# !‚4/D»±šî>½÷| ­L¥²¾œÚûì³Ö¯Ök¯Crsssssá‹I™|Ðx±Wì{yMî©ÜS¹§x@þýüûù÷WDð|ŸQø7I'é$]tº£ÂQá¨àPŠR”’`€@:Ð éHçÉŠdE2Éï‰÷Ä{?•+±ë?Kòüóüóüëol)ØR°… KzI/éɪIÖèáò¥S€±ˆE,=ÃòY>ËgÎ1ç˜slæ‚üÊüÊüÊ3ýÎaç°s¸î_ãóÇçÏ~WsXsXsÕщщщ$'F#‹‘ üø-ð¼kï{ïyï÷^}Sú=ö¼ö½<^>ÑãÁÅ\˵\Ë6“mdÙ¦?,è½ ÿöÄØé±Óc§gù=S÷LÝ3uîìÄŽÄŽÄêš×:¯u^+IRä(r9ÇnìÆn¨1ŽqŒHE*R<‡çðÆAŽ G’ZZZ¸ëÃ7†o ,ûáʇ+®Üô±Z¯Ö«õQº·¹·¹·-?ÌÓxOëÝL@@@“½{'öNh@‚¦‹b…XÑpÖiwÚöY«C–„, Y"Ånعaç†â_›¯Í׆<‹gñ,$ÆÃxDt¢¦a¦Å(F„#áé"]¤ ~Ãoø âˆvD;¢EOùÑò£åG¥Í=W{®ö\¿—«ä*¹ªï²”,%KÉ ‘€$ <&û÷7îo$ÉGò9ùÓØkc¯½¶%*üÓðOÃ?•’Ò’Ò’Ò’Äjîâ.î‚%³d– - $$ /‘—ÈKYGÖ‘uüá˜À%”Pü?ÁOì*»Ê®‚Y0 fØð¾ÃwО¨9Qs¢FJêÜÕ¹«s—X­1iLÓ©fñ‘øH|´5šä×ä×ä׬Zàlr69›.7imZ›ÖÆC·[¶[¶[H“o‰o‰o ({›½ÍÞ†–~B?¡Ÿ<å1¯_À x@-jQ @€@¢@=ôшF€Çñ8kä¹ÛHêHêH*ØqÝqÝq±M·M·M'fyŒðo¢Ãâ°8,ø"bUĪˆUÈQ]S]S]ø§-¨=ÎgP_R_R_¬M^›¼6HX°:a5p=òzäõHÀtÝtÝtHD"ôMë›Ö7 8÷ê¹WϽ Ø 6ƒÍDeFeFebJH!)$…×p ×@T}¡úBõƃã‚ã‚ãÓli¶4[PH±û±Ÿè9zŽž›ú^ÁGù(„YÂ,aº&uMêÀÐdh24m›Û6·mÚ>lû°íC r}äúÈõO‚ƒƒÌ£™G3ááá€=ÉždOzr @3šÑüÄ>M¡)4ÀqÇqb ‚NÐ :~޶жжÝÒ;Ò;Ò;H?é'ýà´ˆÑ"`+æ®X"Kd‰ÀùÎÿpþ }eûÊö•€üù/ò_žØ—/”/”/4š M ¾%¾%¾p;·sûS X`™j_ܳ+Œ555£›†ÐÂÏSåAåAåA©¨Û¿Û¿ÛŸŸo‰j‰j‰0s1vûöìmö6{›˜‘>#}F:°Ï¼Ï¼Ï dY³¬YV ÉÕäjrí†vC» a4Œ†=TjT˜Žé˜þ”Cßdo²7§ºˆ½gmÏÚžµ€yÐ÷æî›»oîFYðûÁï¿{Ôè‡Q Ð Ð P€Ì!sÈå(GùSUì†n@Ÿ¥ÏÒgMÚ«««¡¾ìÙÿ²¿"ë–u˺b#6bÛÃÈ"²ˆ,jÿ;ŠP„"1È3æ¹c&çFqùœ|N>¿’A£i4ή@1ŠQL‹«j«j«j¥ÖÖÖP“l’M²ac_±¯ØWjPƒ`2矺b=UͪX«‚ÃrmuAuAu;Ëú®õ]ë»âE¨"TZV~ ü@ø¿EòG΢ ]è’–{çQ úÑ~é2‘‰LRñuÄ×_­S¦(S”)eÖ Ö Ö âÈÅò‹åËÝY^ƒ“€cj¼³Ãû“€ë¸ŽëÀi ¤P\3_3_3óe7Êo”ß(Š4šMÀÀ„óŒóŒóÌ{ÝÊ»•w+àfnæføxìœô‚zo¢sl›Æ¦Á§e¨e¨epf:3™ï}¤™¡™¡™Ñ{®£²£²£R(ªy½æõš×ù2’A2HÏr¨ ‚ àø#þ ‘ˆû¯æ_Í¿šQVYY ͰfX3 °…l![øÞG“©70áIÅ#žZ[彈·ü<¿$ ÏÒ"¡u¨C;‹Ä’X»lÝä/Ç·—\;\;\;Ø?6±Ml£ñóÍ;4ï’Ùmv›Ý†šÎ¦³él8¤)GÊâ³°ÏÂ> s‡/^4¼HèTF*#•‘E™,šìïÙ1vŒx"»Ë±‚‚‚‚‚ؼ…gc*‡<¹›åÉÝ#ä09L_ù/º”.¥K³+†4¤ÑâJW¥«Ò%í)))šRJ)Å#¯'êíõöz;86plà˜Ð©Ü£Ü£Üs«Ú1èt îù¸óåΗ;_<€!Þà 8Õoߘw@íQð'w/E˜"L¦¢uÊíÊíÊíeVUgÕ‰#r/ä^Èugy&zŸV¿V¿V?|ÙÐÔÐÔÐD6«o«o«o,„…°4ŠoˆoˆoØãBcBcBc¨ÅcïUÏÓþ{. F£Ñh4Bò,[¹œË¹œ¼5Ò>ÒÎÿ½ådËÉ–“îÅ£®QרKÈ”ÅËâeñïñ^ÂKþ³ ( z&»{Σ¤ßóü‰üAîæO¶#w¯à¼ÂØE/Ò‹ôâÿ„N¬X;±–Í‘““£íBš&¤}s5ìbØÅ°‹+Œæ.s—¹‹ü7›Éf²™ü„Go¥pü8(þD~—»žváÎC2!þD¶-dËÿ†ñ^Ãkþ™ª V«‚i»Ð/ô ýƒÁ¬²ÂC·7ÞÞx{#0 ˆP>ï`iÿ3ŽÿJàôŽCsÄIEND®B`‚routino-3.2/web/www/routino/icons/marker-6-red.png 644 233 144 4047 13061246465 15356 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜÜIDATXíWmLTg>÷c+í¸4FÔ™5Æuubuu%]l—šJÒQS±…ZÆŠƒ ¦© n‘JXd[ëG0TM _#±¡«ínØÑ’¸aum\~u61•³£÷½ï³?¸ï½3?²Ù=æž÷¼ç<Ï}ÏsÏ›!š°igòŠÉÞÉÞÉ^é߯Bò¤ÎI“: ~£2•©ìê ZD‹h0æu¤’JªðxŸ×‰ý"_Ôõãñäñ|bù¹ÉMn¹=>>cÚ©vªí¤r©\*7‰ØS†S†S†ñç¢ëE׋®ë³îàÊve»²-_ÄÅ~‘/ê‰úïé|Hþm¼?÷ˆ<*Ê£Eâ„f—Î.]Ê*šúšúšúøs#÷GîÜ @‚Â# €€éq±_ä‹z¢~<ÞÜ#OçGŽçå ”ƒ¿ˆÙ³/f_Ô–ûÆ}ã¾qø`Ïài< «bŸ°O¶˜MgÓV¨-×–l±öŠö ÀªØ¶àüeþ24‘/ê‰ú&á8|Çó&5©]j—Ú‰Ôêõ@ó÷"!¯.¯.¯N+4‰íá{øŒhÍÚÚÀ€1¼7€ ±!:F0¸…[Æôwôwà¼Кµo´o¾‡Wð c',¶ÏÂw-q-q-1çöײñp6Øì ö‘/*Gå¨LвCÙ¡ì ÐÚB[ˆh”Ñ£ØQ&%KÉDDè@QØv^{x-ÑîÊÝ•DDî©î©DD-WZ®Qõј>®Ñ ºA7ˆäsò9ùÄH BP€|‚É…r¡\8þ£¸êN¹O¹O¹c$Ä’X`:¦ˆŠPxux5ÈrŸ{|î㤑u)ë¼êxÕX“”eGÖÁZX‹…×ÛÐÛÐÛ`žäv)SÊ”2Ç$e©²TYº·V|eÎ9Î9Î9l®½½½%}¾RÿAÿPŽr@Ì$ Íæ€÷ß{ÿ½X‚CCðâ»/¾ %_–| @Èàu­Gë17G#ˆ  }oúÞô½ºy(3”ÊŒã?Qr~r~r>‘zA½ ^h šß•çÊs±Ý¦ô=ºG÷ /kbM1€h9Ùr°¾îã+Æ 5=5lÛ>02; ˆÉ¬×¶iÛ¬×-½\z¹ô²1 nU¶*[6LøSBo³Ú2m™¶ÌÀI‘à©òTyªøJQPûÙøØø8;ì€u·|uø«ÃS”So÷¼Ý zíìµ³1³ D[¬-¶ZÝ6Ú6Ú6Š×Í+´V®•kH3¥™ÒÌ_5%Tþa~"›¤MÒ¦UR«Ô*µ ­è;½ÝÞno7¼¦vw³*V|€ˆâ®Å óéN|¥ž¢§XR ¶OOÎ$g’3I+3O²Z©Vª=y&µB*¤BÕaqÍ¡ÊQ«©Ú©H )!%TqμZŽFÍîÿÀ_鯌Õ.OãiÀÂ, €³7Ù›"ÌÃ<¼úN}'À7ð ^a}Šÿ¾±c?ÛmÞ@a5¬†½ûSw¥îJÝE$çÉyržÔa°+4§¿”›ÊMå¦t~^å¼Êy•D¶R[©­Ô»ßÔnN^N^Îã´‹38`wq7¦Õ¿d Øë|-;´ìÐ2¾Ò¼Ëí6»Í4Ÿ#)¾ÓRWBëIJp¿‹÷IÚõwL}˜ ¤ § § ³ù¦Ï(g”3Ÿe ©ÒK$ø=ì ¢À“´Ûàhp4hv«¿Õß Š(¢L=ç=ç=ç­±£6ªjã ñ—dÊßpuzîYM$¼eh÷OOÒnîšÜ5¹k,íz³¼YÞ,œžˆs³R±T,¯Ú#%àJô_Ú³´»B©Uj•ÚÀbA¸¸¦¸¦¸†ÿ1c,c,cLû§ÙêRBžÙÔLÍÔLÆØQü x“é´Díî÷soH›¥ÍÒf€VÓjZ­/”gɳäY€DIÔó3âŒ8#DJ¿Ò¯ôK57$tîÿfvó)Ÿò)_ý>>üA‰Ìe.s@ê’º¤®ý|býÞ„Îøê>³Õÿ¢”À{¬Ïâ IEND®B`‚routino-3.2/web/www/routino/icons/limit-147.png 644 233 144 2510 13061246470 14576 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜýIDATHÇÍ–ßK”YÇÏŒ™Ù”4¹FèÞXbíAJd‰e˜¬HôûbY[²èb·%ƒºÈ½Q‘."è•LR¤¢µ” ¤Œ%iXÔ°q pt0sÞyßóÙ çÌ;e€çbÞyžó<ßï÷=ç9Ï{!„X{ °¯³¯³;çmû ËŸº'uÏ÷móöullþùV4®hHoNo6‡-[Í«øÄ|!,üD>å+…åHÑR4[AÌ®…ò¼ò¼ÔÕóv]8:3Q8Ùy²àžûž›Ÿ!ð"ð`²`²,[Í«x•¯ðñEíWüB@rwr·m R–¦,Ö­/Êþe>àßl().)xŸô>IÚÀøH#Ma¨L°Õ|,^å+<…¯øÿ¼®]®]B@iEi…ãæ|°ÎežËT|zp…+¤A4 •F%s ûd6l`Ùj^Å«|…§ðŸâŸ×#¾ÜÛ?wáÔC©À4€þÌæ 0wé·õÛèò²l—íH¾r­\+ׂù«YmVÉDgMÆ&¤Q99‹n$é»õÝ Û~™^¦Å/åÔc:üx øLŸçÛkŒè;ô|’Ò'},9äòµ|-_'øg˜aæñÈl™Í'…¾ç¾çް#^¢ôÄ„]ï‡ÓO_TÉæò™Þ¥wYh}õ}×ú®ÁhþhþhþBº·Þ~xû^ö¿ìÙþr¹¿ê»ê»ê» ù§æ²æ2ð {ž0r¤Óçñyø:NåžÊU[{½?&l°†ïcïc @sÒœdNËÐÒ´4HÖ’µd ÚnµÝj»e Ò¯êWõ«åÍòfy¡4P( ÀÐù¡óCça[é¶Òm¥PøªðUá+7E£h„Ç={2{ïcæw­©­©JØ`çSçS©ñ×ÄÔÄT‚§ƒÆ h¦fh¬™Z3µf Z]­®V—wÆÆÆ™Õ™Õ™Õpxûá퇷/\ѦGMšÁñËÇ/¿”Às"öçï€Pz¤/O_n¾ ?è·Ž½QÝÝl¦¦¦Ãݦ»Mw› ÛÓíéö€+Ï•çʃªÊªÊªJÈîÉîÉîñññ9CÎr+r+r+`¸w¸w¸7AXQ¬ÍD‚£ÁQPzìB˜Ì¶7BF÷G÷ 5\"YŒ‹ñ¸-d¬‘5B˜÷Íûæ}!ì™öL{¦ù‘üH~Dˆ¡àPp((ÄØ“±'cO„˜O„'ÂB´;ÛíN!VÕ­ª[U'Ć‚  „{L§éÂæŽñ%EF ׯ1¼SÞøVÊcƹHF$CÕ”¸KÜ%nh¹Ñr£åÆÂ­jihihi€âÊâÊâJË¿ïȾ#ûŽ@ƒ»ÁÝà¶üƳÈÑÈQæ˜U5­øã5öíSIwÔõZ+>ýãôÆé0·snçÜN “N:Ál4ÍF˜Ý:»uv+„´Ò,¡þP¨>ç|ÎúœeáÑíŒvfŒ/Îÿũ̩GÀ/Ÿá3â{Á¬2«â} B$ö>ò‘X}K"‘€ŽŽžÿw¸_áíµøÿ}ì_‡ùÎlŒ#Àjã‚qKhh ;?µÔR ,gËü¶°ÉÆ;ãz/ŽãcAç_´ßÊE{»X´÷±Åyƒý<Ëj±¿G wIEND®B`‚routino-3.2/web/www/routino/icons/limit-35.3.png 644 233 144 3033 13061246474 14660 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÐIDATHÇÍ–ýOTWÆÏP©€h@2ŠA«Õ%iƒ‰1D`Ú ÊŒd „ÒP7ÔL%Ùuhl#mv£uéFv‡´A$0[Ó)EÓ„µÚ®‰Jluâ,±Bfx `:/÷žÏþ0s½÷ðü2y¾/Ïó½sÏ}Î „"1ü+ jSÔ¦¨„޲éñU…« ·^ á³ J %÷ÿ k×4¬u¬u¨#:ÖòZ}d¿:¤ž‰BÄtÅtLaü”¿\þòªäþ× ˆí‰íY Â;½ïô|ÕñU†©¦~˜7Í›@ÇZ^«×ú5¾H~ñÑSúBÀŠoV|cx1+cV iûÒö½ð—Pó(6›=÷è9Šˆ#Nš´5µ|¸^ë×ø4~MOÓÍ# )?)_°VX+bÛC #ŸÁ{©ï¥jzàc>&‚ž @©T*ñ¼!o`À:ÖòZ½Ö¯ñiüšž¦šG•ËBa ^{} Ô€À`ðA`c`#¨¿–˘@*(Ç”c ìP¶+ÛA±)6ÅüƒZjyzIÕŒ Æ> ¤Ò@ ñkzº¾ö*'„â ë‰õx¢99686\ dŽÌa™ZiùX>–#$@"‘@€ˆü Np¸Î2Sf²Ì'aþä°ž¦?šG0-„gûI8Ru¤JcSwŽì»wéÞ%°¿jÏ·ç#ï¦ÝM½›ªëu[º-Ý8Sx¦ðL!´–µ–µ–ÁbâbâbâÿýcŒ¼6b1ý¼½ÝÞŽš¸Ut«Hדþ#æ#f`*4P{„bèôœì9 ãIsæÉÃëþ¾fÛšmøÊœe?•ý›ë7×o®‡Þ˽—{/ÃÖ­[ ¸´¸´¸*;*;*;`jýÔú©õú@ννν°®n]ݺ:(ßX¾¶|-lð¥œK9‡ï?ûÙò³E†K\”Ë¡y¢ _Ä'Ç'gî%ùMùMB(© ß.|kh?%j·×nbýK)Ù)ÙBÌç7Ìo¢²²Rˆ¥Œ¥Œ¥ !¨ ‚ !Þ>xûàm!Œ.£ËèO–:ªŽª£Bœ²ž²ž² aÜo,1–1Þì¼æ¼&bü%sö9»¡]ÓuÓu! o¯¾¿ú~ænÁL¢?ѯóéÌû3ïëŸý¢×3é™k®5ך é{Ò÷¤ï†C ‡ÁÑÑ££GG¡­ª­ª­ RšSšSš¡ÏÑçèsDìz£4J#,z½‹^(½Rz¥ô lz;Õœj†;ÿ½÷ʽW˜o‘·ÔÓ M Mê°P V¯\½Rv/ß—Ÿ—tUvUBæw¾¸óE] oKÞ–¼-p`áÀÂhr7¹›Üz~Wõ®ê]ÕЖӖӖ£ÇÙŽlG6d¥g¥g¥ëñÌÞ /œ?xñ‹oø|  l|Þù¼Sv Ù¦í±ÎÙÎYøí€}&¦'¦'¦¡ ¦ ¦ â­ññðÖo¾ûæ»ø¼õ!=øòá—A.„æ ûØÙ~nU'U'é_Ip÷ïó¿Ïƒë¦«ÏÕ‡TÌŠY1ëOìOö'û“ÁåŽrG—ãräyA^€ÙÂÙÂÙBÀ‚ »ƒÝÁnp}í:ï:TÎø-~‹®ÇpuZušf¸gûýOùØŠ¯ÈžøØ~¹ŸeùOÙ,›AíT;ÕN7åMy3b/5ÊFÙä‘G^D\JUª ?”u²@Z¤…åðaUͱ;cwbb<ÑÜÒ|Ls~Ÿæ¼eÑeÑrïÀ ¼œ Î-ʯʯO¬Sò'lØ@~/¿“ßW¹ÊU`)tVÊ_¤S:_¸¾^y < ÿœNç4çëùžvþg÷¬|foÏì}ìÙ¼Áþ§›& 1LïIEND®B`‚routino-3.2/web/www/routino/icons/limit-22.8.png 644 233 144 3067 13061246473 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜìIDATHÇÍ–oLTWÆß´3SXfP”¨CÆš¨D&KkHè2+ ÚfÓX Õ,înv5Ù(©u#IkjZ$;+ 1Qщ [@ h´üÓíàNÙ]»K¶P¥ÜŠsçžß~®Cûi?z¾Ü<ïŸçyrϽï9""âš X_²¾dMO`믒q{™½lÕÙnŠƒåMË›= ÎOœŸd|–ñ™1šÄfÞ¬_Ø/’ä_¨gÆÅ%É€í‚í‚Å7Âöüíùöe \ß ŽVGkT‡ÊË•—.6_læw0Ñ?ÑðÈ÷ÈIlæÍz³ßä[È/G¢/‹¯.¾jùØ^°½ î×ݯ{ö& þî­›·nø&å›e€ø$FšòæšZ€Íü|½Ùoò™ü¦ž©Ÿð#Y’Y"o¼ýÆÛŽÓ‰†Ñ¨Î©Î1õb­À‡|Hèš®Ä߉¿Ã¨^Õ € $±™7ëÍ~“Ïä7õLý„ŸäVΊˆœ(…@$ã@¬O¹cn0ft›n#6ïTacÄ}\¿¯ßã‰ñÄxBri<äá3¤ŒÇb±1ý_±œXñ?š©onå""kN‚CshÚ"õ4Ò鎰 T¡*d–m´ñØxl<.q‰K ŒÔRK-¨i5­¦“a¥)Mi@-ñ€*Q%ÌrbžÙ¼Þ¼>×~„ ‘¦ë8÷ìڳˤ3Ößµ : lø áÔ/îtÞéL Ž´´´CÃñ†ã ÇánçÝλ òF›Ñf´%ñðŸ†O Ÿ‚ú‘úÁúAÔW…#Ÿ|žÔSC{Ü{Ü@4áGâƒ""ƒ ´/´nÿ~¬h¬HíNûÁñ©ãSæ|ñ…|!X·eÝ–u[ Øl6Ãò{Ëï-¿¾iß´oÜwÀ€ÒÒÒ¤¡Ž–Ž–ŽÈ,Î,Î,†þ¯í| rºVT¬¨`îK÷Ø£±Gj7„òByÿOÂU~–L ¼*Rº«t—ȃ_Ž=b9½¿©ª«ªKlÝ¥Ý[»·Š¸4—æÒD®Ô^©½R+Rs«æVÍ-‘nW·«Û%’š•š•š%2ìv »äÙÒsõ\=WÄqÞqÞq^Äÿ[•¿JdÅìÉìI±=.™zê}Ëißzßz‹/u"u¢àU!–aϰaU9¹irSò·ïßÐçéó@~~~~~>”ï(ßQ¾#ù&úÇûÇûÇ!ïLÞ™¼3P¡Wè:è½z¯Þ›¬kÉiÉiÉï„wÂ;£££°ê€§ÜS_y"G>f ¢]Ñ.0†Óï§ß7ÂbÔ§mNÛ¬.À÷‡¾?ÿ W…«ÀqÑ^m¯†c/[ul#bD`À>`°'>U‡uYuYuY-ŠE‹`våìÊÙ• í×ökû¡,X, ÂÞ±½c{Ç’†×N®¹¼æ2œùçÙɳ“ss_öbøÅ°º úRóë(ê(‚Sñs·ÏÝV»_´n³ncÎõNy§À½Ú½Ú½ü5þ d^˼–y ¼oÀ€¥Ö¥Ö¥V£¿Ñß=ƒ=ƒ=ƒP.„!ãÏ'3NÂ{ÿ}·îÝ:æž®P»áÜösÛ´„ŸE‹‰ˆÜÞ&ÚÚà•÷V462øyñwÅßYlú(W¹*Xk¬UÖ*±Ø=öµöµ"ñìxv<[$¦b*¦D¬éÖtkºˆ³ÌYæ, är¹"K.9¸ä ÈMçMçM§ÈÌ‘™}3û„e¿È°gØÅfù›ˆCò 'ܶˆü0ï'1Ð’s ̹òlŽy”‡YþߥýèˆBmP¯¨W@µªê€ÊSyÌ*û<ÿºÈב¯µE|iαê'J©T*Aµ$&³ê‹Ûâ6P=q{ÜNŒ (@©Õ©:A]OA*¤B*üjªA=UQfþøu¼=ÞNL]Ó¿Õ¿ZÍÉÿVÊ[)ÀÓŸNþç÷¬|noÏí}ìù¼Áþžüã(WlðIEND®B`‚routino-3.2/web/www/routino/icons/waypoint-recentre.png 644 233 144 222 12002775154 16604 0‰PNG  IHDR Vu\çsRGB®ÎébKGDÿÿÿ ½§“:IDAT(Ïcd üg````b 5`$ätuLd†×†ÿ¤(ÆjíRóŸXÓÉŠ’5° ÎØ [ÚÇIEND®B`‚routino-3.2/web/www/routino/icons/limit-9.8.png 644 233 144 2543 13061246471 14610 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–OLTWÆP†cÐQ@M ,ÐV¡Õ ‰‘±&D’鈅1U!ÕµRÛhjLÔMÕă’5j$ãŸIAD7Jd¨hǪ¤Za 8БÁaÞ›ûëbæòÆj÷ÜͼïÜs¾ïË;ïž¹""27ñ+º8uqjf§~cÅíUöª‚óq|Ò„”š”šß~€9Ççpžqž‰=¶°Þ×ùÉõ"²žŽË\±—3.§¬KàýàYéYiÏŽã#·ÁÑæh›0`»w»àjëÕV¾…Á»ƒw‚ë‚ëÀÂz_çëzÍ—Ì/ûÿ£/é7Óo¦ @†-Ã&K*—TæïŽ'ü‘Õ›ª7¼J{•¦RÀf3[­B„Ðëï$¬÷ùº^ói~­§õã~²Öf­͵›k-ñ‚Çç`oîÞ\­mrÙ`„Œ€YgÖu[Ý …°°Þ×ùº^ói~­§õã~äýÞ]rÛÜ6 ísÀ€XÔ¨7ê‰oÌ3¥v©jÖgœq Æþнˆ½ãOs–9 ¥lF£ÑHÌ!sx—àWî w†6xt}R+ED–ýŽAÇ`èÂþßjÍ—Ê0·š[ óW¸’d¤€5¬aVaVaà8””vÚ,s¹‡°ægÒÿÖÿ¦õ~ÆNvÁÎ};÷A€Xنݰ[z}ËúòûòáXé±Òc¥ðüéó§ÏŸ&½!_ÌóYøá©‡§ž‚#½Gzô£’G+­´øÔ¯Ñ¶h0•ÐÓú ? c=ßÁ…ñ ㋨m ‚Hÿý{û÷BÁXÁXÁ”Õ–Õ–ÕBQaQaQ!J¥RËP{K{K{ d•g•g•C½«ÞUï‚Ü;¹wrïÀý«÷ÏÝ?7‰Ózq}í'U$³#³£ø ‘µk+D¨IiIt:ãžãžóžS$'/'/'O¤ûb÷Åî‹"6§ÍisŠ\÷\÷\÷ÈôЮޮޮq\r\r\q5¹š\M"‹:u.Ꙝœd’éô ¹¦õâúÚOªHZuZ5Ÿ‰¤_K¿&’Z$""£º²jkU]UÈDãDãD£ÈÆ‚ Dzݽî^·ˆ-l Û–±7yoòÞä‰dK¶d‹ÈÙŠ³g+D‚ãÁñà¸ÈüëóoÌ¿aåK«Ö‹ëOûÌŽÌuKK@}Å{Ë?éûÃà™òLy¦àpÏážÃ=°p`áÀ¸¼¼eWve‡Ê²Ê²Ê2Øýl÷³ÝÏ,žå#ËG–@««µªµÊŠ›ný××~>øÆ³hp†3DB߇v…v«ÜUî*‡ÜìÜìÜlhö6{›½0¶elËØXXX€._—¯ËÅýÅýÅýà<í<í< £ £ £0U6U~6ÍA¢ê® ª xüŸøê¥z©^“„ ;ÙÆ6PjX £ðÆæÅæÓgúSó'ô>œü3ö¿rÆÞ.fì}lfÞ`ÿ“i]”B[tIEND®B`‚routino-3.2/web/www/routino/icons/limit-25.5.png 644 233 144 3127 13061246473 14664 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍ–ïOTWÇŸVÀ¢"Ñ“™´Ã¾À5jJm…ÖÎB·' ³- 6Û‚$-º1¦u·º!Ù®¢LP&YâÚì”8”-þ$‡bØj"¸€]¬vP ë¦sçÎùì‹™Ûa»ÿ€Ï››ç×÷ûÜœs¾çˆˆHZì+`I°$,Žú ;âñäד_ÿÅ_£þqL“càcXÒ¸¤`iËÒ–È­¸oäúùý"qüù|F\Ò$H:tÚd‹ùà­5o­I^õù ¥=¥}6 U_U}ðÅÉ/NRãWǯLÙ¦l÷¼QoôxóñåÀÏøEà鯟þÚt’$-ç^{îµÌÚh?ÞÜòæ€ï¿OT  ?RIU6 HÃÎó|¬Þè7ð |ƒÏàÎ#°ìÕe¯Š@qYqYÊŸ£ ·>ƒ=æ=fƒOkê©'ÂÁp@/×Ëù”Où0a‚¸oäz£ßÀ3ð >ƒ?:O|)çDD@épé0Dnh=a¿fÖÌ ’–°q”¾WÿPÿô•z–žú}‡¾ø8@Ü.3à Jÿ]¨1Ôˆ¦ÿR«ÖªA/Žâs¸Ô^j7<\_Ê.‘•G!%˜ >¥BÃ=Ã=/õŠz…9Ñ@¨kꚺ68L˜0 P( B„ȼ|?ýôL0 ²Ts(?Æã¶ò¨0."r¼›%;+vVh‘þ‘tc÷ÝÐݰ¶a-j 2  hq>oº7Ý›®W‰«ÜN·Óí„ /è úâušWój^h«l+o+×o\¸>@¹ËšŠšŠ ø0ÊÕ9Õ9 ®DçIˆü[Dd}‡ügË¢-‹D®×Þͽ›kzqÓd®5×*¡³gÎzÏzÅäs‘‹ƒ/ŠìU{Õ^%r©ðRá¥BŸÝg÷ÙEfggå'›êœêœêÙÕ¿ë»]߉tíërv9ÅäËïžéž‘Ð\«¶]ÛnzQÄÖmë‘¿ÄæÑo?ã~Æ­NÃ\ß\´µŸ¹pæ|ü§9â¾ñÑÆGAqmqmq-Xê-õ–z°³³ƒÖšÖšÖþÏ:Ú:Ú:Ú`á¾…ûîƒâ_ÛŠmÐZñyÖçYñ:uitjt ^ܼ¸Y´¥ÉK“#CªêAу¢ø±¿šÓ“Ù“ «Î¯:¿ê<Ô Ô Ô €oÄ7âÊ@e 2-+ZV´¬€Œ¦Œ¦Œ&èÜй¡sCœðÊ‘+G®J[¥­Ò-Þo‹2šžýäÙOàü;]×»®ó´—´—@ï[twÑÝÈP‚:Î盆Lîk¬éÿÖî[»eYÁo J JD¶Z·>¿õy×j×j×j‘у£GŠXÝV·Õ-R1^1^1.b¹i¹i¹)€9ä#r¿ð~áýB‘ÌÞÌÞÌ^‘ g…³Â)bVf¿Ù/òpɤwÒ+ËDT†Ê‘êˆ9b6 %¨?ÎvÎvö}+ÒÛÝÛ-Òë((c».š_óK¨ýŸí}í}"æ s†YddÛȶ‘m"Ök‡U$u:u:uZ$?;?;?[ľپپY$o]Þº¼u"ÖÛÖÛÖÛ"ž:O§N$í×iyiy"›W¼<óòŒ„ÊßûÓ·?e»È—›¾Ü$’¸ðqÒ㤾o…C±SÉ{uïÕÁãåÑS2ñÆXîX.ŒöŒÞ½‡sŒAÈr„  iCÚLx&<PwÔuÔ)uJ‚Éõ“ë'×Ô+&ZQ‚×(ˆŠQÉCµôEQQJ0˜¥":Ð £¬/6FÅ!42µ^*JÕBLb£ÄÆËÌœ}öׇ™=ç´´>»_ëöÿÿÞ‹½Î‘ÜäWÀWà+ðå$lßן¹(sQð‡„}BµÜZþx|vì³ccÎŒ9ãú<ñÃÔQŒ£Œ2ç s!† ~’/şГvâ.Tï­Þ›Ú÷T>Ø]v`Q@Abüüüpxÿáý‡÷ÃÛo>¼éêx2ødðÉ 4œn8Ýp"/"/"/ܸ~‹?šökûµ‡/şГÙú/¤Z¢«œñ™ñ™D§Cu¨Ù±ìXv æo™¿eþ˜3_Ä©ŸÉgìR(Ž!/˜̪Zç¡þùúç=%)Üï€w`Ù†w®¾s ÿJÿÞ……o¾XªZª¿‰7ù¦^f}9ý¿ä ç gÍ@^n^®<ûò³/—ÿ5ðc9ø_õ¿ pÇ}Ç­]üO¾®¢D1ë— lükñ&ßÔ3õ ŸáOé(>P|@Þhx£Á{9•pãp¼ìx™á³€vÚÉ;jG’MÉ&VA‡t€,²ÀÁÆoâM¾©gê>ßÒ#¿ý·ŸVC­§Ö<°¾µAmµßêµz±t›èÚHV7Ô”š{ÖžµgAçêÃãKëíö'ö'Xj—•c¥ýÖ×ÄY‡,#ðÓêŒ_)"òÜg(ï¼w>š aVé‚IN[/Y/±¢ÿ©'õdÓ’^ÒKÀÎp&CB;í´>|ø€C¼Îë ¿Õ z@ͨVXNÕ‡p,ð.z£ÙFÏš°K_Ak[k[z^Ð×­!kÈÑ:j µÁôæéÍÓ›Ð1Þ1Þ1SµSµSµ¿Û1n½u«ñV#\ÿÓõŠëÎŽ¯‰}«õDë ³s—¾Zö݇ü'ðeàK @·€ZRK¬7óƒùàq¸F`¸x¸x¸ÆfÇfÇf¡ðdáÉ“pØwØwØeeeeee0vnìÜØ9GXyAyAyTÿ»úóêÏÓæUµno6ð}à{#ì»]"££»^”åý»÷ï‘÷DD².ãa†É“Ÿ%"‘’ó%çK΋ÐDM"j«Úª¶Š¬ë_׿®_ä`éÁÒƒ¥"¥‘ÒHiD$Ñ•èJt‰œŠžŠžŠŠÄ¯Å¯Å¯‰lüÛÆ‹/ŠYyT¥ødë–-"FKÄíwûÙ)¾ÜåÜåtÂ=ýgZh©sÕ¹ëÜ";ëwÖ﬉ݎݎ݉EŠ"E"%R"%"Ò}¬ûX÷1uVUgEcƒ±Á˜Ho¢7Ñ›ñuûº}Ý"ãµãuãu"·ßš©™©q§øèȮ̮1z\"ê õEÖ¢í×ì×ÒŠ%Gæd.EÝT7ÕMßã÷øEú¶ôméÛ"²wûÞí{·‹ŒVŒVŒVˆ¸kÜ5î‘IߤoÒ'R¬ VE&öMì›Ø'2÷÷¹Î¹N‘©ËSM}äðñmâéÄÓ"i=é# DÒ-Ù’<žØ”ØÄª±Ô Õ Õ A_C_C_,Þ_¼¿xvÝqtÇQ(ê*ê*ê‚#÷ŽÜ;rVWWë™ï™ï™ÿÿEÿE§Ç’ïšž6ü)=ÿ÷T2lì€s*î{¸ûánˆÄGâ#a<ƃp7v7v7ºY7ëfÐô}Ô¨U£ðhÏ£]vÁƒŸ¬>XE3a‡ì\㋵~ÐúÁïNåsŸwÁ»͆p2œtæ¨fÕÌJƵ“RºGïÑ{@è=a_¯×ëõÀ6¶±-#á¾ Pï«÷YÁJÏ1+lÃÿ›9ö“ß2“?9œJ’'’'°h#@Æäç0M4¥."®2À/Íéää, í°Θüv­»Öý‡“ÿ‰½+ŸØ×Åû{2_°¿ @åFž8ŸŠIEND®B`‚routino-3.2/web/www/routino/icons/limit-47.png 644 233 144 2314 13061246467 14525 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–_h“WÆÏW›¢¦³)£"ín**LEœwT VjÄÚCtÃ2¨e‚:Põ¦Q)LZ#eÔéDEQ¤Ö8qƒÊ°V†-ht]fMÿä;ßùíâËÉ÷íOe°›ž›ð¼ïyŸçùΟ7G€BˆùÙ_žÅžÅŸ=Ÿ:qo¥·ò£omÜ&ÁØblùå ž(<PÔQÔaõ;Xçõ|w½¿[OÇÅ|áò»ó»@†Úµ+¼ïÛ¸å\,¸8fBÃ¥†K¢¢|‰{‰{¯¯à`×óu½æsó‹ÃÓò®æ]5† vþl!`Ɇ%J÷Ú~-…êªê*€³^ÌR¿s™«@ŠzŒ¸°ÎgçëzͧùµžÖ·ýð—ûË…€`}°¾ Ý.èï„}Åûе^æ"p”£Ì3e¦dH†˜uGÝÀÀ뼞¯ë5Ÿæ×zZßö#þº·Ç+ Æ[ãÍúä]yxkmµ¶’É&”úPù•¬/¬F«È#<0ÇÍ´™–u²¤G.—ËQê{Y( É€å±<À[ͯõ´¾p*k…‚DA"õ<•Oenk62am³¶‘ÎEÊ(¡Ô#õH=ÂcŒ1Æ¿I&ÝÐ [áßFGOëÛ~²ÆÚb°çОC¹âɘ£æhŽM©OÔJµÒ¡x5ðjàÜÝÝÁpípíp-´^i½Òz:¶wlïØO:Ÿt>g?<;÷윋ï›ÌñÌq—^Nßö“5öst½éz“«ÛÅ”<-O3I=ÕT 0ªBU¨ (é*é*é‚`"˜& ¯¹¯¹¯Ö××aýÃõ×?Ñ.ÚE;Ü\tsÑÍE·ÉôTÛT›^KµËÑ·ýðÝöÝVÝXXíZñïÔ^µøšcsÂM'›N6„âÆâÆâF¨[W·®nÝ?÷ïÔS7NÝ€ÝGvÙ}ĉ«ÏTƒj~RqWh}Û€¢yEó¬Ç02<2ì\{Ùoöš½NY´!´,hYÐ"ÄÒÀÒÀÒ€¶!!Œ£ÝhB̃bÐÑsô³~¦=cȳò,“@š4ÈfÙ,›/?99ªPU¨*äÄ7íÜ´sÓNˆD#ÑHÔu¦ze¯ì&e\üÓ±inåfÜŒ»nѪP‚5h Zƒ0¾f|ÍøHv'»“ÝŽd,KÆ`¢l¢l¢Ìu„z¸ÎuÀ²ù\÷]·ò} k‡µƒ4SÙÈïĉãô-…B2¹ö p€þ_û?c…­°Óù9ÌAó˜Ã—n^¼ÀWìg¿³âN}–/Ç?m矱ÿ•3öu1cßc3óû'ß䀾S¸ üIEND®B`‚routino-3.2/web/www/routino/icons/limit-0.9.png 644 233 144 2511 13061246471 14573 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜþIDATHÇÍ–MLTWÇÏ@ù ?¢¸ŒL ´ª(±ÚDŒŠ_ƒC0…†” &M« “uašÔnª&,t”¤Ö…•©ZY˜FFŒÑàÇjДL€ÑaÞûëbæòž¶Ý{7oιçœßî»÷¼+ ""sSO´¢´¢´ü¤ö•íϮɮ)þ%iw*pÕ»êsŽÏ90ïô¼Ó‰§¶mæM¼3_Ä®ïä¿ÌÛ‘u>뼫:e†Kw,Í^˜´Þ„ŽÚ‚¶‹mº»º»Ø£wFïLTOTƒm›yoòM=g}9ü_2®d\q BVfV¦¸7¸7xö$W'ÕI¢¬¢6‡ld#°žõ¬·Ý:ª£: ä ñ_r”£ÀFuVMʶ FƒQ˜å§ô¤„uÞ‚öífÿo…îŽwÅ»l^ðQð^ðœÈ8‘q"''í½E"š\!3•>*}T ÇV[ql<ïþøùc»ž¾¿¿nól~ROJØýoá\ä\ômݚʈ55Œ5@…¿Â_á‡òkå×ʯAI¬$VƒpO¸'Üc zÒô¤éIGŠ#ÅXݸºqu#T”T”T”ÀXÙØâ±Å³á1}Ëð’|£G ÿFþ }F—.ÕÀ;ãÌ¢3g  ª½ª½ªÝöWTT€/ä ùB¶¿s¸s¸sV-ZµhÕ"Û¿²|eùÊrðýæóûü¶_5›_I¾Ñ“&’^›^ËÇ"—2.‰HDDD©-(VÐê·úEòy¼€ÌŽügùÏòŸ‰ÌÔÏÔÏÔÛþM5›j6ÕˆL·L·L·ˆl.Þ\¼¹X¤¯¹¯¹¯Y$swæžÌ=v¼ ^ŠŸÒ“&’¸œ¸ì ˆXÛ­í"®¤°&Ï}×Ýëîy]úºôu©H¨*TªÊÊÊYR·¤nIÈ”šRSJ$ê‰z¢‘²Ú²Ú²Z‘uÖ]XwAdþ¡ù‡æñø=Ýžn[—ëSÃKògõ¼¿Ç8žzç—Uƒj fº¹º¹º¹r;r;r;`hhÆ·oß•ý•ý•ý0èô úÀëöº½n(,(,(,€}½ûz÷õ:öÈÄøõ÷Ø{§2ž:%Êš°&öNçÏnÈ”éÌê¡züžX˜XH\ß×oô4ÐC0ü6êú…~Ì#üÀŽ€¾£'ôš{‰¥‰¥ÄA=PœõS¼wþö[ùÁÞ.>Øû؇yƒý¨ê6¶¸IEND®B`‚routino-3.2/web/www/routino/icons/limit-98.png 644 233 144 2450 13061246470 14526 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÝIDATHÇÍ–_HTYÇ3®9³„YV$é*h»¶¸»EHZ›Š‚(–ÚJKÈNËB`BÑêí ¦[=Yn‹ÂF¶½­4º•>ˆÚ¿Ù‚ŒÀÐd’AG{ïùìÃÌ{wÉe=/—ß¿ï÷{î9çwŽ€ˆˆ¤Ä¾Î g†39j;¿µü®RWiVOÔ¾ªƒ£ÚQ=ùl¸²á ÀÆk¯O-ÛŒ›ùöz ßÎgú%E,GÒͤ›Žâ˜}jwÕîrm‰ÚCà¾å¾µ ÷¶÷6@_w_7ßÁôÃé‡Áâ`1X¶7óÍzÏŽ/çÿÅ/‰wï:^AÒº¤u"°ãàŽƒ™ßG^dBeEeÀ›„7 Ê ú,°žõªÂïl¶å›õ&ž‰oò™üQ=›‹6‰@U}U½»+ZðôW8~:Ýä‹Ü|øXZH è zË †Ô`ÙfÜÌ7ëM<ßä3ù£zäŸkÛùrr ò€ˆ~O¿`´­DŒˆÊRY(í6­Mƒ:¡¼Êÿc#Ú”öB{jÊWù(0|†Ëú€>`Ã7ùâüb”û3¸§ÝÓ¡  t`€r0:N•F9Àœå¬%„K\â¨ýj¿ÚôÒK¯-Þ‰°™}ì0ÚŒ6 ›ø1¾8TOLØÕ?áDˉ–ø¼ó jSÚ°…|ò£ó˜ÈÈÈ…ËÙ—³/gÃË©—S/§,ãÞqï¸:u<êx <.°âêõL=C±¢Íis6¾8TOLØXôÎ÷ÎÇË•DnDn°lzž´>i}Ò Yï³Þg½‡Ý»w7BáBáBáôÔ÷Ô÷ÔöÉm“Û&¡!¹!¹!Òï§ßO¿£}£}£}¶%ÿ-R©0ñU£ÅÕãIö'û?ÿR¤è@ÑØúŠ£K;¼¯$™ža÷°{Ø-²Õ³Õ³Õ#2Ò5Ò5Ò%âò¸<.Hÿëþ×ý¯EÒŽ§O;.Râ*q•¸DÒÓÓEÂáp8kô9'œ&¾£ËâêqŠ$T&Tò©Hbb¼lÎù™³ÆYcá”)=RzDdáäÂÉ…“"%í%í%í"cUcUcU"¡s¡s¡s"©™©™©™"׳¯g_Ï Îçƒó"©wRï¤Þ± ûEÈ‹Ïâéd²_Ý„é‚iû^¨32Œ Ë„á@jWjWjW mOÛž¶=W—W—W)3)3)3p&x&x&hÕíœÝ9»sºËºËºË,¿^¯y4íÄù£zVÝc$h=ZµÇBÍ¡æP3”––Âöœí9Ûs Å×âkñA Ön´³È4ÒêkU£jlKÞ¤šT~ÃoøAªQ5j‹¬Tð ‡9 `\4.²ÈÒÿêcèüÄ:³¦ûu?€Ñl4á'úèC©áØÕ3Â0ö?ò G9 jH ¨à6(0N§ˆ ëƒú  õοfïÊ5ûºX³ï±µù‚ý*-“ì ¡IEND®B`‚routino-3.2/web/www/routino/icons/marker-23-red.png 644 233 144 4227 13061246465 15435 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜLIDATXí—LTWÇÏû1" ‹’ZQ«kýA0dMW~8hi4 j+‰[ÔuP ÙˆHØ ]BEYI "ƒTÉ.Á-@©A»ÅjŠÆ C”m­üþ±ÈðæÍýîÌ}ïÍ$«Ù잘sϽç|æÞï¹w š´äaâ›ÍÇ&üË=à7¥fJÍ”šu²*«²úý_h9-§åÀd˜å’L2ÉÜ<}–Ëçóõ<ÏïYO\ãÉcäK£4J+=ã³ß‘k书²_8$i CCC¸¶åñ–Ç[[Ÿm}¶õ™™©û<Îçóõ<ÏÏ뽚‡Äß{úó?GÄq¤k9ß¡à”à”àõÈùæóÍç›Ù´á¾á¾á>$HÃ(F1   ]è4ßçóùzžç÷¬7ÿ³Wó‘Ù_ì»Åó‘‘‘ÎUJ§Ò© nc¡,”…©fª™j& †«áj8 Æ©qjœÁwÇù|¾žçãù5`úf M¨*…J"ù´|Z>]ÞÆXr-9–gœv”e³l ;Ë'ŽMX—ò“ò€ µN­Xaàâ+ЈF.rÀº”‡ÊCÀYîèvtì(‹gñæ“-¹–lK¶3Ž×ç<œLOMOMO7þŽO0Ÿ2g™³Ø{¯ýgûÏtçV?Qò•|€NÃP À`¬ˆ¬€ÂÃø¿ê®ú‰Ò§ôéQ{¯]±+4Ÿ2Ÿ4Ÿd 8Æ'ÈZOó@Ñ΢¤¢$¶Ç`ÌY©œSÎ :~,ü±.,º°®]¹v&†&†Œà®®p“n”ì/ÙÀÑ’Ñ’¡ÏrV:O8OhîXÑ΢ä¢d¶GÛY>b=Ë—.Cnÿºþuýëíh‡!ü;W4W4“}æ@³Ñßx}ãu#è±Òc¥Æø¬7g½ið‡OdÈ´ünîþuýoõ¿pÎÇAÿ´ùÌæ3›ÏèßLítµºZôð¡·GÞ€Ž|tĘûnþÝ|#ÐEËE ÌxoÆ{ó"ç…q~aTa”a~ÏÈ#oj§ðçá|¢»¥Þ1ÅšbM±ZùPªpC¸AD³”Aeˆhýñõljˆö>ÝûÔxSø^õ½jô§]šv‰ˆèrÖå,"¢ømñÛˆˆªë«ë‰ˆlGmG‰ˆ6EoŠ&¢©þ‚¿@De,‰%éõMU¦*S•Öòü~e‰èÆ…q@5ªQ †?°6Öèý©ü¢üy1y1à_ì_ iKÒ–»Ån7çÞÃ{@º/Ý7ì¤ãƒU¬ð½»Ã\-®0¾*rfäÌÈ™èà|$ƉqbœòÂ=[šVz°ô ASùÇ'mOÚ8Â7…o€ÄD( + 3‚ d d@uru2 ååUx{èö¬^¾2çʽÞͼ¯¿Ô^À½B˜&„)/HZ!­Vdäð. yË\o®WçÛ·užéÔ5;Ìb"F#FàÝÈw#°Þ‹½€Ê>et8:FÍ××Õw§éN€M<þUúWépŒ¹ÃË2G/Žvi€4[š-Íþ|übýbýb‰ä[ò-ùVE·vá'l(ÝPªz[z[—uzéôR8`¾¾06å›)߀xV'ŸëºÀX3÷}ºïS4656Ι%}%}`@Ù¼²y†Ë›Ë› äQÉ#°Ï·Ï7ì ãÛÝßî€ É’ugËw-ßéû{i¤2¾2~r‰1GÌsÆ× s„9œ%ç½¥hý•$´ mk‹… ê£>€H\*.uí·5Ô†Õ†Á¦i÷°kkòYP¡phſėÛÀ6è¼,†%°]JÝÏ Ÿ!SÍ©æTçm'OJéRºÕ¢¡ÅQÅÉf5Š¢(J>I•TI•DRtWº{äoÚÓZ,KÎûñ'ãOÆÚUb•XPg©³0VÇêpÑÙÔÔ¶]¹§ÜÓ¿ÎŽ;;bvĨ‡µhTî“ûlYAƒ$-¢E´—Ýt;9æt÷ßíR‡Ô!uµ Ò¤/H'2¥˜RL)¶,M»Q–(K”z˜tY]V—Ø`ƒ À0 ï¤ºH]¤.ÒµX°²`eÁJ£½å¦S@÷ø¤ožêyÒB½×Ñ“àå6yú橦0S˜)Ì~Y×®5ÓšÉb´['Àà Ð\Ï]Ï]Ïu-¶£í€Í·Ý·Ý·mÑ4é'ú‰~þÑKŠg½ø|èÕRA»IBÒÚ-B…P!Tð{εßÖ`k°5èÚu68œ z+½ zô2X:´théú[M‹UR•TõçÕ\jnéyþ†^cúž@×nÔcÐnž9Ïœç °WØ+ìpÀíw”µÖZk­Õ¯¹X.–‹ÛÝÿ’øÞöªë§i¯ô6¾àC·vÿúŸ´¯k×¶Ú¶Ú¶e“q¦„($ ‰k3<ˈ^uú/íuÚ]#åH9RNW8N<•x*ñËpÞ׎ºGê‘z¬ÁTNåTNîkG²{Õó¡ÿѼµ›åéG?v »„]­§õ´ÞµXœ+Îç $Ц±±1"©Uj•Z…ëî…Û½NîÿfÚ§XŠ¥X¹Í3||§ÈD&2@¨ê…úΛ_hó:™N¯¼¯=êU|ÏšžIEND®B`‚routino-3.2/web/www/routino/icons/waypoint-left.png 644 233 144 244 12302414107 15722 0‰PNG  IHDR Vu\çbKGDÿÿÿ ½§“YIDAT(Ïc` üÿÿ/f``XÏÀÀ🠆™P…ÿñj€*|†¦S±k```è" ® ªŸ¬Pb``h ÊIX< ÓøJÿ!6X×£i$3âH–¥‹ŒCÄIEND®B`‚routino-3.2/web/www/routino/icons/marker-88-red.png 644 233 144 4174 13061246467 15453 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü1IDATXíWL”÷Þ'ꨧü#Ê1ãpêBÕèlÐCo¤Òsa˜@¬fs¢ž­Ù6‘‚ iGÚ6"˜•²;ÍR[,.ÚKj™‘¶›á«wWÁÔrÈÉñÃûñþøì»ï{ïÝ:Ͳ=ÿÜ=ïóyžçóý>ž÷ ŠÚbJ0~[Š#Å‘âàfcRçõÌë™×³s³(‹²(Ÿ¥<Ê£< V›H$‘D找ÚÄð,ŸÕcõûñÛùèùÕP ÕðöÄøÒ5bØ#öØ'¹ÃÜaî°FĘ6•6•6…þÒÛ¥·Ko{F÷ŒîÊòËòËòã>‹3<ËgõX}ÖïÉ|ˆßšè¯|‡Ÿæ§ùio»¡ŒªŒªŒ*ùh»³ÝÙîT @Àf0ƒ^xá4?gx–Ïê±ú‰ýV¾ód~dz†ãÇø1ï_Yükù×ò¯I?vGÜwnÄLÍQsÔHr­\+×òzy½¼-²E¶èüXœáY>«Çêk„ú›žÑ¨qvÎÎىıAlèúœ%˜›Ì§Ì§$‹FìUõMõM¤®ðÙðY@õFÜ7€°|N>(E)‰Vf”™8^ê ‡ŠõUEVdÌÜd®3×IÖŸñaüÈpÏpÏpo×F0Õ›êMõj–gÂ3êÅ£X€Ü©ŠT<ðñÚQ>S?ìÂ.P ªÐŒæÇËÍÒE颿<Þ o™êM¯›^W³ŸX-V‹ÕC ,p¦òLå™Jõg±s’=r'rG×!äºéº v|}–> OOà;ÌuËuK‡õ™ûÌ ’]Ù¦lÓÀs¬¿v³ üHõ¥­K[—¶M“;'wNîÜÃ=HÈdgvÌ:f€öÓ~Xôé¢O耭®­.=Á ×/\×Ç“ð‚¶‚6™ÁƒkIÒä·GÆýÝîÓ»Oï>?™ì[ÃV>öè…/¬€¼â¼b=¡[ý·úõ„œ ΰ¾b}Ö9×9ðWn]Ñá}½m½m€ìÖc0Çø0~1¢è-..ŽKHÞN §és;Û;Û€ŒdË€e²ÏeŸ€U«@ŠHx¯ó½Ný’ñ›ßÚü€éÉÒÉR@þM¢„Ë6”m(Û íí^>öå/cÎ1瘓Ü!>8œ$Aø…0$ hì,ÓwoܽADD MgNgͺf]DDî•î•DD""DDÞ3Þ3úÕ§á'f'ˆ(ìtÑ©¦> âû¢Db`Áçõy}^r3~Ä[x o‰ŒÇ®¸©³¦£¼£\'ùþf3ˆ’(µf·f×MÎpÎ0”¨%*¤?›þ,´ØZl:˜¶IמX{/X×X×Äûý­åòÐå!í&Îår¹\ndœç&¸ nâDGl«þª®¯.«.Kù×úuá×…´P.9¾ä8McGº#ÝAD).Å¥èÎN·'oOÝéþKDDJ6”-]µt‘ëy×óº‹|ÕðU•|Cß‘`]½kõ. ?ŽFÖøkž«yNÝCÿ‘çÇùñÎy”Z”Z”ZD$^¯ŠW»Ç´…_VøZákòvTÅÖû~ïûÁaøÒð%€9¦a½7979`/ ÿ|ÿy ú3@€®ÒU¢xå›o^ ð/ò/ªnxñÀ‹Êë/þiú |”hïr ¹†\oK°Õ­>Z­n×&·Ä«zU¨@×Ë]/ |4ðDVEVNá”nÔ¡û'®½]{¹²EÿŠø¨ÿn· b*¦be-¿œ_Î/8∣+ŸdÎeÎeÎ CÂ0Ä]Ž%Z“&÷3£ö­ˆŠ¨Hü<1|¼’Wy•Wn€àî?ú|•#i2Oõ¿®og=×Ñ—IEND®B`‚routino-3.2/web/www/routino/icons/marker-44-red.png 644 233 144 4027 13061246466 15437 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜÌIDATXíWmLTg>÷KDÑYi7‹:l£¬vQ„ê׸‚:£iG!E‰BukwÓø…cÛ¬‘()«XI¬A‰6)t>°M¨št‹a7ZlÀ¬mׄ*ÌT±!€883÷Þ÷ÙÌ{ï‰Ùìž?pÞ÷œó<÷œç}ß Ñ¤ý‚L\•âOñ§ø…'ñ…´)S:¦t¬[.k²&k7ÎRåQ0¹ÍH&™dî‰>kàñ<Ÿ×ãõñÄU‰|¬üvÓnÚ-ú÷õºÜ!wȾ‡Âa°Ç bK¥‡ÒCø¦øVñ­â[À¦{›îmº”””˜>ßçñ<Ÿ×ãõ9Þ‹ùø‡DÞIqLÇ‚y¼Cs«æVÍ­Òö¶\k¹ÖrM}0ú`ô $„1ŽqŒ"ˆ `øñ}Ïóy=^?oÞÉó#û q@‚ã ®\-¸ªþ¾?Öë¡qc9,‡å@Õj´­ЖjKµ¥€æÒ\šËâÇ÷y<Ïçõx}ƒp¾}†AMð >ÁG$‘ÈGÚ¾ç ŽGƒ£AuÄ>`næÆ¨Ú¦zTÀ‚l ˆj—µËÀXg „€(T¨f¼Úy'òÀ>Ðgê31ʃ ŽýŽýª‹ãs>œ)w•»ÊÝ·~Çìuö:{Ë ŒF#x¯3ªÕŽiÇ`Ú¨Þª·.ଦš}{f¼ÐŽjÚ„¹Ëñ8>çcð“wÊ;åÝGøÆ©ÊS•§*ÙŸâªO=§ž³FضÃÊ 3»3úõ~ݺÎzX07s[ó;çw΀@v P} ŸæøFgøN_œ¾8}1®{¸îá:Kw2QˆB£Z‹Öb­é9à9LÞàòY÷#C‘¡Äz¼2 ±TŽÏùp~œè_7Ûxl£9Ú°Ö¯1Ö‹õb+àE?À«O^}b%êûÚ÷õ3Fþüø¾†'£´þè’èŸóáüÄø‘z]q*NÅiœ±ÚŽeXFD¿/ˆˆˆÆÏŽŸ%"*I-I%"re¹²ˆˆRLý‘ˆ(œN·Þ ¡×B¯•è%ú³â'œN"šÿœz©×ÄWÚ•v¥Ý8òü~eåË›–7-oBßSa¢}¢À—,È‚`ø#—ûVçV'lÛ0GÄ‘0z—×eíäæS›O½ >â›á›àF|ð¹±êX5Ï.˜U0«`ú8?]¢Ktņ⠟í>[y¶Ò"©7oß¼ Š "y÷óîÀ›Gßή’Óœÿ[&õI}RŸp)k_Ö¾¬}DJ•R¥TùÚ-t: ­ÚÕݺøá‡À#<Â#³“ÚBm¡¶ÐìoS~S~S>[Ãë)6ŦØžNúö©”`BgÒèIHr¿KôíS•\%WÉ œ·h·Æ]cÑ®Mµ©6“>¨êƒæµÓ‹^ôþÔÞÔÞÔ^Vlh2MLÓ¶L’â§IüRèÅ RS’v‹_¦]µKíR»LåNdLdLd‹B‹B‹BÚC‹íR»Ô~b—Z\zÉgÒKÌ àž§ÝF{£½Qµ<OÀcªgê¾ä¾ä¾d^;r³Ü,7÷Æ’¤þ3 7¾NÓ^F0Ùx–¸v/ªëEVóÑzµ_åSùU=U?2ȌŒB€èú2ú6÷m6MošÞ4 ´[‚-A Í›æMó£gGÏŽžRRR€žó=ç{ÎãÕêµöZ{­€Î©sêœÀHÑHÙH2“ªMÕBw{ê»Sß’nåÓåÓ€pnÄû–í–ÄÓ‰§i¦-P(–PyýÀÝwáù£ucÓÆ&däxsšsš²þ²þ²~À”nJ7¥ŽNG§£36€qÂ8aœÖw¯ï^ß À /¼@h04 ZƒÖ «Ÿ7êŒ:à·å@y @·Q·ЦiÓhÖˆ/••¥1ézbnb.0üÙxãx#2JΖT”TGÍGsŽæ­ÎVg«Ȭˬˬž?zþèù#ÀìNv's‰s‰s‰€©ÚTmªd›l“m@ÖXÖXÖ°´¶´¶´¸óÜ·˜Ý=›:› dß{ïÈ{Gø+ü€´Y ‹aiL#þá¿ë¿;ôþuøíá·ùiò¤<‰—=×zÚ{ÚãqÈ8„C‹¡E øfñÍ⛀IoÒ›ô@•¹Ê\eö4íiÚÓä™óÌyf ÀYà,p–€%` Ù{²ÍÙf âW®àe¡’ïÍ÷òSàöüíy@s8°5°uè1Ø=•ÎÇêy’'ɰO…‘$űQå·»f]³$©÷è=¾Ψ>ö·z[ ÏT¯à’þÈ])æÄ”˜"éÌÍ{á¤peñDñ+~’·Uç?œp8äËß;ÿë{W¾¶¯‹×ö=öz¾`ÿ£úžn;+IEND®B`‚routino-3.2/web/www/routino/icons/limit-20.4.png 644 233 144 3065 13061246472 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜêIDATHÇÍ–ïOTWÇŸ‹u€ðC(4Íl‰B ¨UÖF\lM¡Sª¥ÐRLSiÔB*`w%#HRˆiVH߯j‰¨ÒD6í’€¥Ò6‰EDZ‰ ëB@18–ɬŒŒÌ2wÎg_ ×a»ÿ€Ï››ç×÷ûÜœs¾çˆˆHØâWÀo•ß*¿P¯ï÷±/ðfÀ›kþæõkuв´¬[‡aÅ—+¾ooð ù|#oÔ/íñá/å3â&¾€““–²è÷׿¿>à9¯_Õ --snØ÷ݾnþš?ÃîÝö{ ø|#oÔýÞR|9ò;~XÞ¶¼M“¿I^|ãÅ7VðÜY ™é™éãËÆ—)?Ðÿ¬R ›YâùÅz£ßÀ3ð >ƒß;@äk‘¯‰À»¼ûA`½·aèŠ:eð-´Ÿó9Áàv¸ú‡ú‡¸@uªN44ðùFÞ¨7ú <ßà3ø½óø–Ò)"Rm†ì‘ìð ,\u-D/DƒgÆ­¹5'Uêj½Zn«ûžû(‹²( >sò‡À¬·<¹ž\T¼¾_ßžÕ^|Ø);˜6ø¥¼$"Ç3ê?#WG®Gx Ôµ'§™fPI*I%P°d4ÒH2É$“ÿ·xâ‰5 Ïés8£o17òóÈÏ`ð{‹?!<©½ÂŠüÜü\ųñþ}%}%püØñªãU¨Âü|Ïpåpåp%Ôh5ZcŽ1ǘcÉ ‚ ÞßR[|áÛ·+nW ~‰º´âÒ ŸZÈÿ4ÿSð®\íÑoˆˆÜ(Ö¢Ö"¸þ—ÑäÑd•ü(°&°WêLª5Õ kìkìkìpñôÅÓOCrurur5¬;ºî躣çŠsŹÀÞbo±·øQmªMµ2+³2CÌÇ1919`þ&eGÊ\‹UyžM11À w? :t61IÄœkιŸ:ôÙÐgZ½¥¶¸£¸Cü;";^èxAdåÝ•wWÞ©tUº*]"a³a³a³"·Jo•Þ* ¹Pw¡îBø,Nâ$N¤4§4§4GÄà w…‹DœŒü1òGñ÷iõ¬ÝV´­HDB/‡^NLzfY´©ÈTÄZò©ÎTM²ÏfüñƒØþð§g?yö‰L˜M8œpX$½3½3½S$6<6<6\¤éTÓ©¦S>þÐáÐáÐa‘GY²eùâ çÎ7œiÜÓ¸§qHZoZoZ¯ÈµÝeÝe"÷¶NnœÜ(¶èîÐöÐv‰¤PׯYë§N¸_w¿® jgM/™^¹¹¨d¨D"Í¥æ÷Ìï‰ì^»;aw‚HUWUWU—HTATATÈÔµ©kS×D&‚&‚&‚D¬&«Éj‰µÆZc­"óÎyç¼SD¢%Z¢E6õlêÙÔ#róÂÍïo~/r¿Æj±ZDþi  –HmJ›¡EÿHÿHw„±Ç~Jþ)Néß^ÿöºÊ[Þì÷Žß;¸6oÛüòæ—!¤/¤/¤ZÏ´ži=2dÈ€€ˆ€ˆ€(›(›(›ûvûvûvHMM…éºéºé:ßžk¨k8Ùp2¿J5ýUßÓëÏ;wÌе%BÕ⩤°¸°?ç=%Ó;&·Nn…‰Ëw&î &k'¿˜üæ+æ+æ+ ,`+·•ÛÊAíU{Õ^PÔµlý¶~[?è»ô]ú.PÙêmõ6<Ž~üÊãWPÿ¾;Ó?ÓÜðò¡””S‹§ÒÐ ŸŽ,꘡3 j•ZõDw ˜bŠÁãð8õa:ŠÄ؃ôEB! E†5jàCæ¤VÓCÓLPQñN –6¦ÞsÎþÍýçž3C“?¨G 939SöÞw8æf0áݯPá®p›|‡@-µ,mZ›Ð õBæ@u©.8À²Í¸¹ÞÌ7ñL|“Ïäê‘ïmýPà,p ÐM@ª?0ªjF@y”¥}ÔF´PçU¥ª&™dt¯^®—ƒž®{tèÅú%ýŠ:ý£þ‘èú0Â7ùÂüb”Þ1c1cÓQЧ÷éÀ »À¨7ê™QØüÌ9Îa='8Á …Rl~…BŠYfm~Œ£ÆÑ:ì ó…ùƒzB®ÿ¥U¥Uáä-LjCÚ°’-l ÖàMú›ô7éÐÐ×Ð×ЃiƒiƒiíƒÍ6?Ø W^9xå 444À—´/®/.›ì<-SË´ñ…ùƒzBÂþ(‡»Ÿï~ç) ÜÜÀWí«öUƒç“ç“çlOÝžº=¶¶omßÚo»ßv¿í÷K÷K÷KÈ¿š5ÿ*666ßç÷ù}¶‚¾ÐNj'M|UdñõDˆÄuÆu~÷ƒHfvfvhÅqSe9J%mzzczczcD\«]«]«Ezü=þ¿H²„e ËD*‡*‡*‡DQŽ(G”ˆ‘h$‰"{»övííIÝ”º)u“í´Ò*âHŽÜ¹ÍÄwÜ´øCz 161ÖðÁÄèĨÕöêŒqÄ8b}áðÐðÐðdx3¼^ȹ—s/ç¬(^Q¼¢J÷”î)ÝåíåíåíÐ8Õ8Õ8)×R®¥\ƒ'ž€¿-»¾ìú²ëÀò›Ëo.¿ ä¦ç¦ç¦‡l6ÎüÙ|ÅgùžÌC|Z¸=éc¾Ÿïçû»¦³J,L,L,T6î;¿ïü¾óÚ3}÷úîõÝ @€€A `ºÐ….À°õqæÏæ³x,~x¾I?™lÏòÝ|7ßÝuœH?—~.ýœ<·Sê”:%tBoZŠ–¢¥@VÊ•r¥Pf(3”€âTœŠÓdëãÌŸÍgñX|8,¿íYópÎC$n·‹ÛëÛØG•ãDzÓ{K«ÖªÑ'×UUZ—Ô&µRgª3q€Šð6¤vª!¹>øsðg@{Kshô17G•c›c›ìdùã#Ë Ë ËÅ`¶ ÛVÛVm²ÿ7ÿ-ÿ-<Ðãô)JùR>àî¡ÆRÒ´4ÀU\µ[íìÅÞõW>”.I— ³Ïÿ›_õ«x`«°½g{O›Ìx >±D,KZ·³ÚÕµµÚ›z€AÙ#”š2}Ç}Ç`ÿÌý3 ¥ ¥ÐÕ @[¤-2#ùNøN˜üƒ-+ZV„Fe4 æ`íêÚµ+´7 ã#­'>9>9>U½Ù½Ù½Ù€ŸðdØÙšÝw>÷`…f{ý‘õGÌ€Ÿû|Üüû\e®2Àˆ¯s÷f÷ÆöÆŒ‡ñ1ÐK«—V/­­LéÄ,ÌÐ#=”Àsmϵ@qnq®9öéöÓíýeô—p…®ØE»EK‹–šýÏ|væ3Q0¢@Ï¿üø  t†2ÆÇëGêEK–%Ë’eœ±(ZKÍÔLDc”d%™ˆ¨ïZß5"¢‰®‰.óM‘('ÊDDÁœ`Ñ¥w.½CD44fh Ñ„SN…ù'%&InÉMDÑ—K/—ÑÁ°ë'ÊÒhi´4GžÝ¯Zþœš95sjÐñ˜{t÷Ñ]‡• Êhø+}iTi”¹” Û¶€ý%ûKæþc·Ý€-í[Úÿ­ÿ"û"A½ÿï Þ-uøD²-MKKCã#ÞÉ;y§ô«ÞQu ô@É“¢Ùiî¾ÿyÁJ­Rg‹³v´îh€¨kQ×àØÔcSÍU¬hªh2ùË;¾ÝñmH*Ê¡¦O›> å;³óÔ˧^6^À?s©\*—*ýJÂ,a–0«¬’2ûD[¿­_™äÿcÇ”Ž)¡ëC[µ8k1.m^{uQuĦŦ€:MÎÍÎÍPÔZÔjV_õ®ê]^;wss„´NZ$—%ÍMš«€0V+ŒýäÅdÅdÅd‰gųâYw·qáçf¦e¦)X|ÕÕׇ ¼zÉYIc÷Æî€C¥‡JÍ;Ùànp›O¹þ}[[ ¨Ÿ.?\Znáw¯ß{ýž:h®Ö k¯ä Û#Ù©7„¾Û’jIµ¤vÕ± ®òÛ6nÓ÷GÜå¼ËyЀ:{@ßÕ W'˜µQÚ(“ô}ãûê’ë’eu{Y{Yhúrrðªñ„Vò•|åãln7Ž7m_ ð½q¾Vq«¸U¯ìáÜ\×À´¢{›=y>‚×ÐîãéÔ´ÝÚîáµ@ ioho¾À€¶@Û¬mI©ÛÝÓØ£mwmwåc'ßÞÞu9 4'9É)ÚB¬”Aâûä!yˆ„á¶p{ã_§u-ß–/[ýow~Õù•Y»ò9ùœyCuÐAÝöª%j  åIg¥³2·•WÖ­¬S6/ЀÞ­ ëÖ%¬#⼃wp‡tºÕ s”þÍ:„¡ƒ;:yÓäM“7Y -…–BïVC»Ž G†Y»ªKu!/¼ð¸û¸âV¦*S•©!-ÖÌ®™]3[[`¼åV‹Õbí~æµ-RÜÁEOîj"´»ŒssnÎmÖ®·ÙÛÒ®Ü,7ËÍ!å>Jx”ð(H $’ÊC‹B£Ðø—yLjºô"GÓSZÈi·Gè1iw§m§m§lõ»ýn¿@A`¤®£®£®£¡kGÜ#î÷øô¿$#/DäÕûé™§F66á5]»Gþ“v3—d.É\Ò®wžwžwkF%¸|.ŸË¥,< ?"/Gÿe{švç •B¥PÙ5ƒçWäWäWh»R†R†R†äËF©{„¡Ç•HõTOõ¤_;‚?"_ý-R»[ÃíÌpk¸5Ü€ÒBZ¨þžÏçÇqÄÑé¯íƒöAû ‘Ð*´ ­Üßõ‰y•û¿5«ñ+‹²(Kl ~{5¯ñ¯ÜIî$wòÖ„áþßy#*Ó÷©¥þ'3uç—.=IEND®B`‚routino-3.2/web/www/routino/icons/limit-34.5.png 644 233 144 2756 13061246474 14674 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü£IDATHÇÍ–ýoSUÇÏ6ë’MÆ2 !#aÕ JJ¨Ý$…²Òi QHP‘(FJ` ÑÄ-¼L¶Ð{iÜ$”(”AGˆ %À l]°ì¥÷öö|ü¡½¶²€óËÍsžçù~¿÷žs¿çB16úø\âs‰ÆHœønl>eAÊ‚)ßEâ}$,IXòÇg^^ ðLý3õáë±XÏëõñýBÄðãùôy1VÄ&F5ŒjH°DãmP2³dfJf$þâ <OÞûþ½ïš¿iþ†÷¡û\÷9€>KŸb±ž×ëõ~/_l{‚_H>ž|<á/5rÔH!`RѤ¢¼#7ò`ÑÂE î$ÝI’‰ =F3ZZ€ôÑëùh½Þ¯ãéø:ŸÎÑ# c~Æ|!À^f/3ÔE®†õ9ëst>ÕTRÉhBÍ©9 ‚<#Ï@Äb=¯×ëý:žŽ¯óéü=±¥BˆªBpt8: Ü ¶…þR'©“ |E½§ÞC*•ºd9M¾ _€pA¸ \@üHà RÛ¢T+Õ¨Útuº4{Ÿ*Ç[Ž·tU…±¥¼%„/îCÀŒÀÝÑÖÑü € ¤Yš`'Ÿó9`ÅŠXÊR–‚¼ /È qrÿ[Z¸Â®>|ø¢¯2è«Ù ʧóÑ#¸/„û¼W­XµBG Ϻ^ô{Ëï-PU[µ¿j?òrø²zYeØè\Þ¹¼s9œÎ>}:{x>T* •@“«ÉÙ䄚âšu5ëµe{m{mè‰ðÁš9kæ€<Ñ#Â!„¸ü xÜ7ÜÌðßñß‘®qÛÓ§¦O%X’Y’V’٥٥٥p^9¯œWbĹrä>€Â¦Â¦Â¦áÂ|}}!Ë”eÊ2ý7{›½ œ_—™ËÌïW+.Å%]Ш6ª WFôY<&sL¦l€¾Ì¾LøsÖ­×n½5Û«mÕ6hݜ֜¦,S–) ¼'½'½'Á]ì.vÃ„Ö ­Z¡ÔZj-µÖÒÞÒÞÒ©©©`Ýn±[àèÊ#ÓŽL‹Û?Ýí»ÛtÈAÏXe¬¾Æ—=z6Ä~ûǃÛÛ°x÷âÝ‹wCþ–ü-ù[`mþÚüµù·9osÞfpNtNtN„)»¦ìš² nvßì¾Ù#ô¼¯\—ÅeúÆúÆúF¿÷Y÷³nøñíS—N]¢Ô—Õ—AkÓ5¦+|Mho¤L) 8?8¾]ÒàlpBÁ;³žŸõ|ŒÀœkÎ5ç‚uÐ:h„ò=å{Ê÷ÀôŠéÓ+ ¹?¹?¹<6Ícƒ¡¤¡¤¡$8|èð¡Ã‡`GÊŽ”)1¼—jLN“}pôÓ£Ÿ‚öjª’ªÈ!ê{ìXï±^øç€tY¾œgšg"h\l,2AùÕò«åWáqÎãœÇ91‚ºöºöºvpìtìtìÙ%»d̶ζζB›¹ÍÜf†›flš± Ò‹Òç¦Ï…›?ZôÑ"‚ák>8Ry¤°F÷Xô,órquÆêŒØ_ze¨o¨|?û}Hí¢vQ»²SvÊN·†[í08ypòàdxäxäxäi”Fi„^{¯½×ÔRK-('”Ê x˜èë÷õ#åªÐ¸Ð¸wW¬.ÐýlŸWà}ÂÇ’#¾"+þó±bYÌ€,”virÈ!î‹ÑK/½Q;•€?þ¸M])·Ëí ÈÙ gÊ™ ȯ¢øovÜè¸`ðü\Õ}Lwþ î¼ËF,ìˆ8³<ò‡üÀAí¾v¸óãf+[ñŒg<FCùwäˌ֯×ÎjgQå/¡îP7ðCÔùY–´, Pžtþ§÷¬|joOí}ìé¼Áþ ]VÚ‚GyIEND®B`‚routino-3.2/web/www/routino/icons/limit-31.4.png 644 233 144 2721 13061246473 14657 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷܆IDATHÇÍ–íOTgÆïtF‚e1âÊKÅm0ÂÚh¶-2,T‹à+T‚Ò”¦H±i¿´$ÚlŒE›ù°š´bc‚€$Ž–’ÛT%$&k³ºÉÄÝVŒc«†¥EÔÎÈË0sÎóÛ3‡è?àýer¿^לû<×yDDd^ìWÀžnO·'F}û;V|ÎÚ9k3OFý£Ø6Û6ÿüHjNj˜ß>¿Ý¼nù:¯ëgö‹Xógâé¸Ì+àìrvÙÜ1ÿx#÷Ü9)QÿŸ}ßß=ºoê¾øºãëÞƒ¡‡~xè~èË×y]¯ûõ¼™óå“'ðE`ö™ÙglwÀép:D`qÉâ’Œ÷£¿dÀ†õÖ Æ Æ);÷¹ÌUn Hm#3|Õë~=OÏ×x?ÊGÀUè*MU›ªâÛ¢ ×OÀGi¥i¼p7ð)Ÿ2"ÁHÀØnl'ªOõ`Ö¯óº^÷ëyz¾ÆÓøQ>Ö*ÇEDÃVÿV?˜#áK‘;áÅáÅ`þ'ü{øwÂ1¦JS6טf¨&Õ¤š°,À(£@@×›µf-a•c4 `fDçC…TpOãëUÞÉùâƒñÁà,öù/ù/(õ²z™q>§™f` KX¦ÓtšNP'ÕIur¡`l•“L29#žC9 þkŒcŒÇ¢¥Œù{ý½0O”pWDäèEw¾µó­éç°âzÉOßþô-<~°í`Ê÷«Ïïóó”õyú<}¸|;ùv²Wj@ €Z­V«ÕVüfýͦ›M¨ïÓÎ'O²ðTxçî»!º¹£Åìñ}Ýûº÷Á¯®ƒÕÛÉû“²’²UVú+ý°¨yQó¢f¸\w¹îrœí<Ûy¶âVÆ­Œ[ §ÖZwjE Òi‰´7¸Á PŪXCÖ;YÕYÕPü¥ûu÷ë„bãmó¯Þ,oÐåc·}ù\Ês)y«D ¿(üBÄH l l³µ5ɼ Ϊ‚ªµUkE.[¸lá2‘‰ž‰ž‰ûûûW•«ÊU%¢ÊU¹*—i˯ˆ,•¥²T¤±º±º±Z$4'4?4_äO‡]ç\çÄ­¶µñbÁˆÈ_/$^È[%ŒÌ›š7eöóÙHãH£uìO‚°¥wKï–^H¯M¯M¯…+•W*¯TZO¦èQÑ£¢Gв§eOËž§WÝáîpw¸!u8u8ujjj óPÆîŒÝpço¿uþÖÉüQþG9¨ú¤Æ¤F³_Œ× Õ¡ÂP!x7wmïÚyo®È^‘mäåçåçåC«½ÕÞj·âkv­ÙµfË>–}lFýPÊPÊP ¯>^}¼JO—ž.= ¹i¹Ïç>³—Ä Ç Ãw]½gzÏ^ ¼fJBB¿êժ߱¯F¿…ÀùèÎÝŸääJܘX’X;®í¸¶ãœ|÷þu¯ç^Ê8b1Ž<½ª@v ; ¡½¡½¡½€>õŒzF=`Ô5F ¨­ªL•ÁÄŸ'^™xõèÖÈÕ‘«€/ЇQÿqýÇÀpìTrñ ›Õ1µgZÇ*U%ãêïj£Úd’Iæ fOêÕ“6ÅSÀhLpÇTªJe<&Ñ¥„cº©ñ•Ö1­ü!­¼³*f—ToäAäÐjÜ5î>­ü¸H&ðàÁË)Pƒê–ºüO×›ïšïfŸñƒñŽ XøÓñgö[ùÌÞ.žÙûسyƒý?U 0ò‡ö…IEND®B`‚routino-3.2/web/www/routino/icons/limit-140.png 644 233 144 2575 13061246470 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü2IDATHÇÍ–ïk[UÇŸ$KÛ@Ö)ıAǨSšuëè²¾™´¢•*†IWßKÙdNiÁ½p`÷bþ€‘â†m§I_\q+îGA°.2Ç,‹lˆ£i·Ùvuˆ i—­%¹÷žóñErs3ë°óâ^žç<Ï÷û½ç>ç9G@DD+½¼¼¼µEÛû–ë¯y©æ¥M‰¢ý… ž×<¯ýþ¬‰­‰<>øø ºîÚμ_™/ââWò9~yL\GµQmxÚJö¼ÞôzSÍEû“$NN=° g´gà»áï†yîürç€l[¶ \Û™wâ|¯_þÃ/þ³þ³ž?¡ºªºJ6¾¸ñÅ'¦Ÿ„è+ÑWnûnû´ì€ AÝäÈጻ¶3_Šwò<ßásø‹zB­¡VصgמÀWÅ„ëß@]Ãgž>æc‚`嬀ý†ýyÐIÀƒ\Û™wâ|ÏÁwøþ¢yøß~úì®Ù]Ü0/‚Z£Ö€j5¿6¿ÆÔéoõ·hþ3tX‡uÔÓê)õT…›Þ£÷ ­ÙBk¡S¿kµ[íå¾ÈR§ÝiÚá—JAác¨À|`>· Ò*­Ê¸/Û7ÍgÍgYÒ§tZ§Y9„ ƒžÐz¢Â¿ílž!B¤ÂßnÇí8KD‹ø0µqj#Ìfr«=%a_ü ½‡{;ÙªY_0ϘgÜOKM…[‘[‘[‘•ú¦z§z§zaüòøåñË®r|r|rbÄò±<ü™›Y=³Ú]q=]äsù‹zJÂR}ü:òÃÈ@ @wƒÊª,yc­4‚à7ü†ß€ÄÉÄÉÄI—ØÝ§ûDÔiuZñÖyë¼u"‘B¤)ˆ\»ríʵ+"7Îß8ã¼Èýžû=÷{D¦¦¦EfYcÖ™Ù1™‰ˆ„„»ÃÝ.ŸÇcí²v‰”õ”kŒ‘Å‘ò¯ÔÝvama­SŽG‡aèÄЉ¡+‹¨y¨y¨¢ÑÎh§ëß;¶wlï÷÷÷A¿ÝŸëϨwÔ;nñåÈÑ‘£ÕØÿïJÎZ#Öˆ[r÷¶ßk¼×ùùùÀ(£Œ‚Š©˜ŠÁrËrËr ,¤Ò i EЍ´J«4df3S™)PkŸö¡±­¬•ìŸÕ{¨÷Њ]>;;¹U¶Ó¶ÛÇ@½©Þd©bq JÏ!CXd‘ŠÍÃpÔ}•Q™ŠMÕm]°.°Ä{å>¶aj`f³+úØÿt~³Ô™±oÚ7'ì÷í÷1ùceçg€€Õƒ€ÓL2‰Ö¿ÙÍv3&gíCö¡r³¹ˆ½Û¿Ûï¬ÔCÿ‘=+ÙÛÅ#{{4o°ÿ¶˜%.[•5¹IEND®B`‚routino-3.2/web/www/routino/icons/limit-170.png 644 233 144 2630 13061246470 14575 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜMIDATHÇÍ–mh”W†Ÿy“™dœ$Ö„"i÷‡±¡&~Ж¬ÎºµaKƒ±I-” N·. ­ &H£TÈ‚¸[H,¤6ëf3*!‹“~ÈV·‹›J¦µ&Së[ÇÄ÷ã\ûcrò޵ûßógxžs?÷}ÏùxÞ# ""­ü Œ FE>6~ïåK_,}ñW±|ÜÅ×rõ]X{fí€uëܯ¼XÏk|a½ˆÇ_¨§óò˜x‰’xIÜY‰ßƒWŸyõ™Òê||z‚çƒçïÚðæÈ›#ýè,€Ÿßø ÉFÀ‹õ¼ÆëzÍWÈ/ïýL_ü Â÷”J"°ñ…/<õÇ<àë§ ù¥æ—f‹f‹”ÎPF™Š&&z,Äz~¯ë5Ÿæ×zZ?ïG jgÕNØóڞׂÍ|õèx¢ã ­gzè¡ lÓ6œ××Y5©&ðá/Öó¯ë5Ÿæ×zZ?ïGÜÛ?ÿZK[K;Ögà®uׂ¶>°>ÀRIµ P”SB ØwíŸìŸÀiwÚv°ïÙ9;jV}«¾Õ¥Õ Êþïýðý0–zËÞmï^ýß‘{ÅyŔ֗BCµ½¸ÁL0cô;í®nÍïœëÖóÖóäÔy5­¦ñ†ùÀÂ2Ë,Ä4Ò{½GDû1D̈ù÷b$/&/joÈÓʯür_gBÑP4 ŒÆcž±Éðdx2,Òz°õ`ëA/ßt¸épÓa‘†lC¶!+²9´9´9$²·foùÞr‘‰í;Ú5?o;>u>uDVýü¿[I¶‡½#wç¹; w`ijijiÊ;·Ý>vû,Õ/Õ/Õº \à¸)7å¦àföæüÍypPEª…cgí,à¬èÙ‡ºu=t+k{!x#xÃ,†igÚñú¸ín;¹Ÿu¬‡G'tÄG8ÂpMwÑ],¸TQ;i'ÉñöjÛÚXÁïƒß?ÔÇ~¡ó[ºó;×ë@µÓétbÑÍ0Ã^"H)¥ÀqŽsü ñ ß Ô§Þ©Ç"át9]ßiõ·úõJ=ÐùÙoå#ûºxdßcæ öŠË.)¼bAIEND®B`‚routino-3.2/web/www/routino/icons/limit-22.9.png 644 233 144 3013 13061246473 14657 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÀIDATHÇÍ–]L”WÇCqfê¸bDØ Ìd‡¥1,³iiÙ¬CR¨13-™¶›HÊjÜ].%5mÓêÆG“IE3 ¦Â®±ipU¨­MØ&™¹ia ˜‘Á¡‹åk`æ}ßóÛ‹™·/Û«½ôÜLþÏÇÿÿ¼sžóœ#@!DvúW€i«i«éW)lz×°[öZö\Má  ••÷>„M›6]ÞtY6°î×ã׿ að¯ÕÓí"[s›¹-ÃÆ'à-ç[NË–>Û ÖÖK Ô´×´\o½ÞÊŸ!Ž…fݳn0°î×ãõ|o-¿8ñ }! 뫬¯2‚yy`ßcßãøk*`ÄÞýÞý™™Òê4`Ã&Ý@œ8úz²ëþt¼ž¯óéüºž®ŸªG@ÎΜBÀë_?hý,•0|òòu½ä à§°WâêÛêÛ¬€ì–ÝdÖýz¼ž¯óéüºž®ŸªÇØÊ„BœÛ ¾¨/ Ú @2¤Œ'íI;h ŠY1“LW*µ!m@e\SÆ@[Ö–µeŒç'~úI-©lQ¶Tf’¹É\Jñƒ/î‹3º¾¾•ß !ĶOÁ·ÆãÏÉÕh(NP²T–’ ƒ¯ù´§ÚSí)p“›Ü\SÈINr䜜“s†YÆe\Æ9Å)¹Sî$AUšoZ/­Ï`ªAL!‚wØXûNí;:öbÄܬÿ>|ø9øí`ç`§!8p{àöÀmøþ€"‘ÎÈ¿ÖÂZØÀ‘m‘m‘mp¾ô|áùBäØÈƒ¦M†ž«}¡ö}kƒw„Ú'„}Ç £®£¾ÿ˨kÔ%«m‹Ö Ö ¬¸ÿíîpw@‘§ÈSäæÖæÖæVȽŸ{?÷>¸çÜsî9°ûì>»úÊúÊúÊŒ‚îUÜ«¸WóóóPv°Ì[æ…SÜSÜÃÊt\íV»e5\ó]ó¬JÕ#Ôë›×7Ë6HÜMÜ…ýãËk_^ƒýT~Pi¸v¸v¸v€Çáqxh ´Z ÑÑ¢£EG¡ùbóÅæ‹†=x+x+x ¶çmÏÛžgØÿðûW¯$à³ÝW¼W¼«¯®¾ ªýù‡Ï?”m‚ä&Ë&‹6$k¦+¦+ŒcþcÈr€Óét:pøÐáC‡ÄáñðxxŠ[Š[Š[ J©RªP{Õ^µ×ˆ{ä}ä}äg£³ÑÙåŽrG¹ÖËjÌj„Þübë[yšU³‚¢mX¿a½6$´³¶ý¶ý² æßŸîªªëuKƒ¥NÿötÁéТZT‹B¯¥×ÒkIµª5gòÎäɃ%×’kÉ˥˥˥³Çì1; ÷÷÷ÃÐÐøûý}þ>øµ-7’°ÿ‡ ?\X[m-Ë–%Û„²Yï±o\߸ )tµéj“¬ÎºnzÍô+%K%OJž€½Ð^h/„òãåÇËCNWNWN”øJ|%>ØlÚlÚl‚Ku—ê.ÕÁ®á]û†a´}´}´¯Ï³¸bñõÔ}ôÑWÈQŽrH#´¸øArèã×T¡*d‘£1}2××ÜAw0èäZ¬žå•:ù-Ô½[÷.¨ËæFK·ÿ£þý'P“«'µIÍöIII‚–ΖΖNššš°óæCó¡ùÐÆ£[GËFË åTK{K;jèÞ ß ß {£Š¨

BfµY×ÇœÊT&¨Cê:÷-•«rUd’If\ÜP†2@Rͪ@U©*—V>þ ¸çÝóA'7žècq_¯N¬N´;?z@ Æ”1ew~i ÔÔWê+à4§9 „XdÔj\áeþã®q—¨ú¯þ³þ3Ðjuþjgµÿ¾ó?½ÿʧövñÔÞÇžÎìÿƒ¶E±¦IEND®B`‚routino-3.2/web/www/routino/icons/limit-38.2.png 644 233 144 3106 13061246474 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜûIDATHÇÍ–ýO”WÇÏ 2¼(ˆØ)Ð ¶v ¤D—BHHa;PÛÔ "K|‰n±I³ u›Æ&‚‹i)¸¤©®„¤®&Q²,qyi^–1¬1! ÊÛ¢³u ŒNžgæ~ö‡áqˆ÷—'ß{Îù~Ož{ï÷^Ù´ú0§˜S̱Alþ]h~Ç>|ûoA|Ѧ=¦=ÿ>Øø@\S\Sàaq#m½Hˆ­ž1/›$4ÑÑbÊ_Å5°ï½}ïmØÄõw!²-²í…ŸÝúìÀæÍ|ó?Ïÿ °¿!lÄ|£Þà[Ë/5¯è‹ÀúŽõ¦Ç.¶B[á¶ßþ³ >ùè“fÃfÔüÿ¢‰Vù€Æøe 6â«ùF½Ágðz†~°„¼„<øtÿ§û#¯ þ_%•lèimÀYÎ ºG÷ø+ü,ƒº«î`Â!lÄ|£Þà3ø =C?ØOh)½"" P2^2_´~}R{K{ CÚ”6…¶Ú© < ŒÆAŸÒé@…«pNhxpã~‰T`R{®=GÓkÉZ2žù¡d¶dX2ô¥|$"’ö=Dz"=žuT÷÷=ƒÊRYx馗^Pñ*^Å­´Òº¦‘h,X°„¦Õ¢ZT‹@ g9  òT^Îù•¶ªgèwûžˆˆ\ì#¶òpåaƒ.°ãaáXûX;4ü¹¡¾¡523òxäqHp´v´v´êûêûêûàAÖƒ¬Y¡x ;Ðèá±õcæ134žk¬o¬GýÓ™æL 驾ʄÊ`9ØÚDDþõh«n«†‰÷¬{V‰ÿÓÆw6¾ÃrÉö’¤’$HNN†š”š”š°ÚFm£P>R>R>É÷’ï%߃ÁÂÁÂÁÂPCŽkŽkŽk½½½oX ¬`û8i1i‘åÑLÕNÕª#pëЭCˆöc6]Ù³eg¶HÞ…¼ "þ䥲¥2Ó•3Rûní»Q–_V\V,b½n½n½.âíðvx;D¢œQÎ(§ˆ=ÞaϱY‡¬C"Þbo±·X^Ž™º™º™:‘ªËU—«.‹Ü™¸3g^$jslvl¶DÜ/ï?ßÞtEÄ~É~I„˰exgö:Ó_ÂæÂæÈï§§Lò+gêw©ßɳ$ß¡™C3’p íàûßyj}j}jÑ­ºU·Šl^Ú¼´yI¤¹½¹½¹]da~a~a^$q2q2qRDª¤JªDJï—Þ/½/’”“”“”#’Ù”Ù”Ù$²kpWÏ®‘ÃZÅ›oÊ3÷·îo%!¬,Üî"Cü¿‰ W-°œ·œW÷´T´TÀ΃;¶ïØZ’“…' O†ìøt÷éîÓköPzWzWz\š¾4}it³nÖÍàкCË Ë Ë ¨+¨û îx~Ì“éÉÝk0Ì=ÿ5àŒmŒmT-fó>¯æÕœƒ"í­í­"Qzµô*G7ý:6&6FVbŽÆ”Ç”‹Øm‰¶D‘‘œ‘œ‘‘›¹7soæŠÄ9ãœqN‘Ü­¹[s·Š¥¥¥Ší.Ú]´[äöÀíÛ"b›ØDZ+[´IºñÆ7o|#+OééᨈsÂ9!â¿ëùÒó¥spÕÇ.ö1t,áXBè”èپ߸\?¹~Bùí~»ßúC>‡Ïás€ë‰ë‰ë ¨&Õ¤š@WÇÕqpW»«ÝÕàMô&zÁÕåêtuÂ\ëœcÎúïåésÓçÀw$¨ŸkŸkÀoWO%}¯øØú ¯¨?¾ô1»²ãUuꂺŠ@E Ô„šPküÊ¢,ʤ“Núóá÷£¶©m X ¯ø†»fÙpÞ½ëö®jƒÎ¬nënÝ üÕ?çŸ 9?ØÏ~P½ªGõtÒ ,²À¨õB½ör†3(Õ®kº†¦üQþ(P?®:ÿù’Ú’ZãjZëü¯ï]ùÚ¾.^Û÷Øëù‚ý?<áÐYW¸IEND®B`‚routino-3.2/web/www/routino/icons/limit-36.png 644 233 144 2476 13061246467 14534 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜóIDATHÇÍ–oHUwÇŸ{­y3M׋ÝÊh”{#é %+ð¢aÿµÐl·Em±Vdc± jÅ.Á¹ëE!ÌþJ.*¡Uþk3kűEÊ%gEøçR÷œóûìŽ?ÏÙ¨ímçÍáù÷ý~ÏóãyÎO@DDÒâo÷L÷LwjÌvlû=¥žÒ÷ÏÄì  ®u®u¾„©µSkÒO§Ÿ¶zm[Çu¾³^ÄÆwòi¿¤‰íH¼˜xÑå‹Û5°!gCŽçݘýM$5%5°íò¶Ë—ê/Õ³ÂáN€ç¾ç>°m×ùº^ã9ñ¥æ_ü"0ùÚäk®?!ñÄwD kYÖ²9ŸÅBs`íªµ«”Ì¿€R”aý ;lçëz§ñ5ŸæéÈ,Ê,òå“NÅ z¿‡êÕ34_´ 8ÌaRÀ1FÌ*³Š— :T.\`Û:®óu½ÆÓøšOóÇôÈ?Ï6Pž  ¢?5[ÍVë€u€¨Q³Õl”ñ‡ÑoôƒuÛê°:&:†úHmR›ÀøÕ¸cÜËRóÔ<X+@”ˆyüáÀ×|üâôÁ·N L‚~³ß¢¬«Úªfœ¯h¤hã:×m!´ÐB ¨BU¨ éLgº#þç9|JuÖ~k?ã¼Òøq¾ þ˜ž¸°àmØ~`ûfå2b ƒ€àÅû>€Þ’Þ’ÞÔêõp÷à݃wÚ:B…¡ÂP!ÎÎÎAOeOeO¥££=jH ¡7žO|ü1=qa¿í…³/ξ˜(÷«¢èãèc^jÏÃ}÷=ÜÓŽM;6íT&U&U&A–7Ë›å…æÍ+šW@iyiyi9”úKý¥~XòtÉÓ%OáQÓ£¦GMŸiFšÆW~›?¦Ç-’Ú–Ú–W RT\T?_q’6$lDí1ÃfØ ‹ŠŠŠŠTܬ¸YqSdnÊÜ”¹)"W¶\Ùre‹H( †‚"ccc"K=K=K="™÷3ïgÞ—‰ÇÕí~æ~¦ñ]§lþ¸HŸ’>Åú†‡cÿTõ©>à8Ç9néhd422w™»Ì óoÍ¿5ÿì^¿{ýîõ°°vaíÂZ8Yw²îdx;½ÞNh™Õ2«e–c-5³ÍlçšÑü1=©m©mê"„„Ø…æcµ±Ú¶ššš!osÞæ¼Í¶ßô}A(+.+.+†åÉË“—'ÛñÜ£¹GsB}c}c}£ÿ#×Èu ÉL[dÄ7â»÷‹H{K{‹n4[Ý»d¥¬”WÚ³&gMΚ‘´‚´‚´‘ÔPj(5$âÍ÷æ{óE.Œ^½0*’éÏôgúE’'/N^,’×—×—×'Rå©òTyì£Lxézàz ñÙjóÇõ¼q*õbìb€{*|#ßȇ¡®¡®¡.0w™»Ì]ŽNt›Ýf7 û†}Ã>°²­l+Ûј"(Çâý¯©|Í‹Lì±Ö Æ™D.¹ ¾PÕªÚ1];ÔµTªQ5 ©Ej‘#þžÊP@;Ù `±Ž0ŸÇÿÛc¯ÙüÄ7³a¶™mÖ^k/Q¾æ2—QêGuU]¾#HÐÑ‘34Ðê'ÕªZ3Üã ¬=Ö¢˜f»ÙîÀóækÿ•oííâ­½½7Ø¿9/¢Œ?IEND®B`‚routino-3.2/web/www/routino/icons/limit-23.1.png 644 233 144 3007 13061246473 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܼIDATHÇÍ–íOTgÆï3Jg`V"Í'‘ô ±Ð”n†4• lY'6TYZã&†Z,iCbÕl7«)‰I°i*…–HÜdQ´M»Ä`0¨ºjBlaµÂ8¼ÌËy~ûaæxfÝÀçËÉýv]wÎ}îë<""’ Xr,9–´˜mùÀôÛÞ²½•{"f·EA{G{ç߆u_®û ã댯õÛ¦mÄüÄz?‘ÏðKº˜k¯µW+‰Û‡ *¿*ß–³[† ¹/¹/šþš~€Óݧ»ù\~pà×’_KÀ´¸‘oÔx‰ørè~Hú6é[íX_°¾ Î2g™«.–pÇo{ßöü´æ§5ÊÑyÀC•ç? ¶çõžoðü±~Öo]¿U*Þ«x/¹+Vp»_j|Éà ÷M4á€H ˆîŽîfÔ@CÓ6âF¾QoàøŸÁëÇå’ˆˆ¯vNìœ} <¹v† /F¬+áx§J¬Ïés™ŠLF&AÓÇô1Ì"HXˆåƒ^­WÖ·FGƒ:ÇJ[¥ x`ð£ü—ˆÈË_@r 9X«BÃÃÀ!¶r+7K´ÓE¨ê€:<âi¥•V “L2ù¿ŠNE§@õEÇ£ã,ÅÝÛL|?ñ=ü±Æ^þBb¶]bݾê}ÕŒþÊÖë × õ¯­Ÿµ~†ÿçøùñó&ÑÍàÍàÍ ø:}¾N4ãj^Í«yPgÕYuÖô}5Ô?Ôºû›“~L2ùÔû*öU£m»dÑ)oª7UÄ_7U]ønÔÞª¿Uɧm¶FhZj 6Màî3ÝgºÏ@AOAOAé/´Z -ÐÙÖÙÖÙ GŽ.…¥¾¥¾¥>3ÏãðØ=vèØÑžÝž°ÓŸOv1í¢êµ¨#Áï‚ßݸ*2riä’ÈðŸÆ6mboTÂwÂw$Ôÿþîþn‘Lw¦;Ó-"¹’+¹"NåTN%’N §„E¶\ØraË‘òæòæòfÇãñxD‚¾ /è3G›òUŠ/Å'’ôû5®5.ãc¯lJJ ”Jn\Zâ[Im}m=,÷ƶdî³Å³Å03‹4—5—5—‰ Ä ‘PUèÅЋâŠ_žiši’DJßµš?ø§ýÓsm”5—æçuŸ}óø›Çi'ž£¾P_@Ý£z,‰.‰.‰BŸ·ÏÛç…p}¸>\ÙÁì`vª"U‘ªôÇúcý1è÷Çûãàñy|T/¯^^½ÎþúìÛgßNÓ1]ùw¤ RÆÀ‚y æÙ·arbrÂyíÕæäËÉ—‚ ƒ7 BwMwMw Œ>}8úvÙqdÇè,ë,ë,ƒ’æ’æ’f8 èvßÚ}k÷-èèëèëèƒÂ¶Â¶Â6è¿t¹ór§£g/þÖúÖãÇ-bdäº-:ùZò5s”²H²ä߈oÄ7"ÒXÙXÙX)âÕ^Ûk‹L.ŸT“ÊÑc5d ‰?n‘Xy¬|äŸâ M ò’ÎÒYæÉËÎËÎË¡Ž:êDJ+J+J+DºŽuë:&’_•_•_%²vÕÚUkW‰ÝztëÑ­"­­­­­­"W ®\ñ{ý ý EêR7Q7aøiÈx>>'òÌÏÿ{+éKv'»Gazýôšé5ðôêÓ«O¯:-ž}2ûdö D—F—F—‚.ÒEºÈ‰'| _Âѥхх ›ô!} ªVÕæôžé§ü8s Oĉe˜SÎû-û-fÒ>;)§-ºE·€>©Oê“iûwô}ì{ÄÒŸèOÒâätrš¶þ¯J¾*f=_{¾þÁû‘Éo™É¬îª»Àbõ¾z‹ƒtÓíL~vòïê —¸ÈÅ´ðŽs­ƒªXcñõúÀ­0ª6³6ÓœÔ÷&ÿsû­|noÏí}ìù¼Áþó†â¤e9hgIEND®B`‚routino-3.2/web/www/routino/icons/limit-37.5.png 644 233 144 3041 13061246474 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÖIDATHÇÍ–íOTgÆï¡Šq@êP¿ ±‹VKÌnm;¤³àÒ¥fh4hRaÕ†uc]i"¶1¶cĸ *ËÆ%] by1Åš´+/jÖl–vyÙ [3Ä•Î0ÚÑa˜™sžß~Ž3kÿŸ/'×ýÜ÷u]9/×yDDdéüUÀœiÎ4§Æ°ù7ñú¢‚E+[b¸QS±©øŸAZCZ@zsz³>ÇÆ¾ÑŸ8/çOÔ3ê²Tâ……m ÛLŽyü1¼³öµ‹2b¸ö:¤\J¹ô( ;¾Øñ@çgŸñ[¸;xwÀïð; Ž}£ß˜7øùåã'ôE ¹;¹ÛôXøÌÂgD`ÅÆ³~kÏ‚MonzÀ³À³@™@ûXÂå0–7ûóýƼÁgðz†~Ì€õuëë"P´¹hsÊŸc£ç¡ÊVe3ô"—€jXÑ@4 •ie̺®®`ÂqlìýƼÁgðz†~ÌOüQEDŽçƒÓítƒîˆ D¿¤GÒA¥F_ˆ¾@Dý+VTT†¢!жjeZhfͬ™A]T­ª•øú/^”v0Ün ¢­‰TF*A+ŠñsÜù–ó-Ãàñüø£œy±R)@‡Üîà AÙ•  žzÀŠk‚ð,³Ì&`=1Ä0Í4ÓjµZMeðÏëúÄüÿiì#uç»;ß}̾ntãw]ßuAíÏjWÔ®@ :üÉð'àÉ÷ä{ò¡þrýåúËÐ\Ò\Ò\çÇ΃ ç„sÂ÷…Cát”w”u”Á©ÒSïŸzõ§Íg ÏBÀӃʗ+_õט³º)"òó.ùñçßx^d"Ã?åŸ2å¼–kßgß'á[¯ÝZk½˜œÝÎgH‹¥ÅÒbé¶uÛºm"ç2ÏežËÙvcÛm7DÆŒ?"×LãLãL£Èî¡Ýc»ÇDz«{]½.1]Ïë{Ø÷PÂÁ‹‘ŠH…)GÄÑçè‘¿ÌûQ¥– K†j†?þµnò•ÉWàÔá†Â†BèÜÑYÑY9'rN䜀«ÉW“¯&ÇïÈIý¤~R‡ŠÚŠÚŠZ~²ºÎví: ‹«W/®†¢_9Špq{ëêÖÕñ>ueÊ?åÜ©M©MªMð. / ë#Ôy?ð~ÿìÎîî@I[I[IØŽÙŽÙŽÁÐþ¡ýCû!¸*¸*¸ ²fÍ> £×F¯^û©±þƒýûB¹£ÜQî€æöæöævX~æ¹CÏ‚¯¶õÞî½"ë#ëAû‡eÂ2¡˜õ²¨%j1ÈËmËm‘–’ö­í[Åšû^n~n¾Hgigig©Húlúlú¬ˆGóhM¤coÇÞŽ½"Ë –,+YãXãXã™;=wzî´ˆïŠïŠïŠˆÇíq{Ü"Y7³nfÝÙîÚîÚî±)Û¸m\Ä›æk÷µ‹UD-WËE¤R·é6Óˆ¨³""ߟû>÷Á½ªÜQ—›“›Ã\ê¯Rí©vØR·¥nK]üN?(~Püê†ë†ë†ãõ{y÷òîåÁ†Á ƒaÀ>`°CöìÙ mcÚ«i¯Âï;÷lÚ³‰9}$¦­5­5@^ÌÏ|Ž5öñ·]Ö]c@_ýEÈòÃôÀt÷t7J+×ʵò¸ûM÷›î7AȲ…lñº®t¥+ðûŠ}ÅÀ.pÂ=ážpü`ž~4ý¥vFŸ>×cj×K»^2ò¬±Oè{"Ç’c¹¢ªçX©*%¨òÔÛêm`%+Y™ðUQEUüß/ U£«Ã šT—êPkÕZ‚êä<ÿ¯Ýãîq€”™”™@ÃFŽÉ?g$¯+É•|Kfõut&:üQóh"†‹I" øˆù0Áؾç{PSjRMsóýUZ¿ÖOD]‹ÞÞ¾œO~\ \ €ð“Éÿôþ+ŸÚÓÅS{{:O°ÿâ —|½IEND®B`‚routino-3.2/web/www/routino/icons/marker-42-grey.png 644 233 144 6233 13061246466 15632 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü PIDATXÃ…—{PWöÇ¿÷v3O„A F—â1ÅCE0a†ˆFQ"fÈ·ˆ$”ƨ!k,’Å@ñªÊ&!l(1Icb‚Y º’¡@t!1Ùr”PyIV3ƒ'Ì 3ÓÓwÿ`å¯R9ÿܺÝ}Îùôéï½÷4)-----… 3f™èj~ŒãÇXké‘Ò#¥GØ£–² Ä‚Þ{IX(,&ls6;›Íì]Ô£õ¤1ˆA €A bÀ6lÃ6ö®4Sš)Í$E¼‰7ñ¦Ëõä¹Gîýí`Ù‚²e :®VæUæUæ³!D$}†CüÖË¥¢³€IHBm+Ä ±BüÖesÙ\¶`M…¾B_¡ow™]f—¹ý?öÇìÙK(TÖ*k•µhIXŸ°>a=)Òúiý´~€f®f®f.à›ûîûž÷ùûâÍÆ÷æóå÷ñøøxoŸd,€ˆ¹$Ÿä“üˆZ.‚‹à":l_Ú¾´}>w^û¼öyíž×Ö®\?HÝËú—õ/ë'OK‹¤EÒ"ر{± Øa‡ÀVlÅV‹°‹`w†8Cœ!xº¿»¿»¿›¹ÏÆœ9#¾v7ínÚÝ´-("Šˆ•2O¾'ß“ŸZËtLÇtc¹ôIR2]2]2  Ýè™Ã7óÍ|s÷?]—Ãåߤ^«^«^+$e¿’ýJö+|£Êª²ª¬Pc>æc>Å¢Xx\Ã5\àø˜Â¦D#Ñ"CdîàX,mú¨é£¦„ÜѮѮÑ.þ‰\"—ȯŸ2…L!sMÖ` ÖÜø•Ê rƒÜø=ê÷¨ß£ÿ·ýŒýŒýLø&u¶:[-<­ËÓåéòøTr•\%Ç|ñ¢xQ¼8[1aC@âI<‰È8'ã¹Kî’»Žã8Žâ³â³â³à=jÚ£ûûû1ß_ýŒúõ3ÂÓ¾ü>©h­h­hM׸ .ƒËpÆðkÀ¯¿²Èí¦í¦í&bP}¦úLõ(Ka),ä<9OÎì»Ä.DI”D `1c1f1ƈ‘‰ñAeÁˆ•b¥X ÐRZJKaµZ -…à€i­AÖ k–h%Z‰v“–²ÃbÊÿìNv'»“”ž”ž”¬÷JÄ âñÂ@h¡… ¢!`¸g¸g¸¸wéÞ¥{—€B!Àmímím-p¹ürùår`H7¤Ò8Š£8 °<–Çò ªVU«ª!IéKéKéÃz ‘B¤ùÄö ;Aw‚îàݸä¸ä¸dRçÍ'¡Fj¤F€¥³t–À @ß‹}/ö½Ô:jµ`ìÊØ•±+@{ÓzÓzÓ€š}5ûjöm¯·½Þö:pˆb‡Ð××ÌlS³n’8kœ5ÎJê|<>>êœtN:'q(¬*¬*¬ Eò·äoÉß‚³bV žI˜„IÒJZI+`~Éü’ù%àÔòSËO-”Ê å )’IŠ€êôú ¡>¡>¡ثګګv¥îJÝ• ô–÷–÷–ááá³n¼ü{ù÷òïa÷ñøø(ÞÆÛx›ÄÐcô=6ë eÁ,˜äòyp­t­t­ŽN::,•,•,•ÊO•Ÿ*?Ücî1÷Øи¶¸¶¸6à‰À'Ÿ|pïãûø>@:-–Nœ‰3q&àà‰¡ÜBn!··&Z­‰6 …àè¡#`>ÏæW›_m~V«‚U@VyVyV9àêpu¸:¾Š¯â«dʨɨɨBÂBÂB€ þü/ø2dÈV…¯ _D7E7E7xãñÙ|œ­ÇÖcëÁUS5U³ã¼¬JV%«jFŒ,YÀúñØÇ~²èØÔ±©c p*œ '¼1xcðFàˆúˆúˆpÈ2‡ ÈØœ±9c3°Ü¾Ü¾Ü°MlÛÒCzàÍÍÍ€bX†¼/‘ÈF„ÙÈFvY=¿Ž_ǯûû[g_>ûòÙ—=êeŒ2FÉú¯ò_å¿ VM &PˆWŒ+Æ%B‰Ppé\:—;±;0s’ÇC‡8#gäŒ@ASASA 7ÉMràZäZäZðŒg<ƒÓsÝsÝsŠÓ]§»Nw‰I$˜“`úI&É$¹ÁB>‰ý$ö“X`¢k¢k¢ë‹ÿÚvØvØv<½6zmôZÏÝ.Ý.Ý.®Æ»:½'ÔUä*rÅ9Å9Å9ÀÖ•[Wn] ,É]’»$(ÞP¼¡x ¹-¹-¹ ð‰|"ŸŽ$G’# ,ÿjþÕü« ×+®W\¯íÕÕÕTáÎÿœÿ¹¾·Þ­wëW|HJ~.ù¹ägqÿ°ßÏägò3}+Ÿj›j›j ×¥ÞM½›z—­Kÿ.ý»ôïÈ9O‚'Á“ r¥îJÝ•: tMèšÐ5Àœæ9Ísšc–1˘¸¿qãþ@ºÐ°ŸØOì'@ºEºEºöIͤfRƒ¿œ>|úðéÃ8-í“öIû¦ÓX=«gõ ™9Hvð´žÖÓz΀v´£ý¦VL“Ĥüççç;ѽ³{g÷NRRRH¾ZvyÙåe—‘É4LÃ4PÄkâ5ñVXaÀƒÄÚbm±¶ÿ³Ž÷c?ö8‰“8 «ý°ý°ý0Zl-¶› æZ¸®…¢StªXWˆ+Ä;X «a5|ˆ·ÍóhgúF¾œÔ’ZR{®€¦ÐšòZ3tÐAG?Ô3=Ó3a§å}Ëû–÷¡ —È%r VQ+jE-€|ä#€wõ15S35 ‰Câ Îç‰óàôbœê8ÕqªÃ³ç–û–û–›ß/õ“úIý¾ªŒÝ»#vÇ(CÊÈ?1„! ©\rrrrr2”¸û¸/‘’@È;± ± ± ßgY6[6[6/¦Ö8kœ5.þÌ­À[·={ià$¹$—ä‚÷¶u …¤X€XF Ô@ à/ _¾0ÌÖu6t6t6Уsè:‡Þ˜vg¹³ÜY92§™ÓÌiVtÒA¶y_ì _ãl÷ŽÇDÑ_ôG`ï/½¿ôþ¸v»v»v¿ñŽ2H¤ ;6¨Ô깚ÖÍ­›[7³u¤€HÅ/Ä/Ä/À ‡r€Ýg÷Ù}€D ·‡o߯WíñíñíñTš•f¥ÅD1ñwh5­¦Õ7¦½RÜïmmÒ}ñIÈûK"õN½Ÿˆ«™Ñ®gI"I$i]ÖÌ/Gç¿Ü;Ý;Ý;Å¿n·ˆ[DºzYõ²êeÕÈ¢Q4BAÓÅt1œB‘P$AúqÔÇQGy¢Í+Ì+Ì+¸k²xY¼,¾f%ãǸ×~ëÄ:±ŽßqŒc\Øå“Heeeee%¬¾ŠÂ{aVC^íîñjw¿W»§þŸvÝz·Þ-ì´´´„‚RJ)Å}_%:އh¿Qw£îFwMV,+–_mqÞtÞtÞ,þàÚSמºöàT{ý>@ß,èCÀ¾Þßa7vc7ù×Ò“KO.=Y“%Û.Û.ÛþUå½…÷Þ[È[¾.ýºôëRÏï~Ø?·nÿ\|Ömè6tH®Â¨0*Œ€¨Õ¢ú¯ßòÏñÏñÏ9VEj#µ‘Z:éÍ÷Gïèx˜‹Ão˜w‘ ÞiÿLE^6/1/1/ÁaO¨'ÔúA)”F>ûá­Ô[©·Rçž´ X,콟÷~Þû¹çÉ)÷”{ÊÍíö[í·Úoõë!ì ;ÈmRH¹QLb“â"ßðJx˜‡àwì7´[V´¢ÕSÆšY3kN¢'è zâ|ätÆtÆt†¸Ä¯Î¯Î¯Žp:NÇéÎvEˆ:ubCòðÐðÐðiƒÅ`1˜5xãê½€ößâ ø{H»Þ†ÍS† €¿LòHÉûwke­¬õo[åaò0yàÆ¹qnüf˜øžøžøÞÎ_Œ9Æc0ˆHo<_céø=Žÿ­OÓùÀß-“IEND®B`‚routino-3.2/web/www/routino/icons/limit-21.png 644 233 144 2367 13061246467 14525 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܬIDATHÇÍ–]HUYÇ×½Îõ^¹7Ërè!íBõ0ÂL dB¨¨d}@DÐØDC$L=X ÓPMVŒ (]&¥ Ų^šÊ,/ÍD3]Œ"±)0•Jóãœ}öoÎ=÷œ>fhÞÜ/—µöZÿÿ¯}×:[@DDæ$ü¹þ\¦mû¿sý¡U¡U‹›m»^oƒoÃØ}zöi€¬¦¬&ë±k;ûN¼7_ÄÅ÷ò9~™#®#Ølõ'íC°)oS^èKÛþ¹2Ú3ÚÇMØÕ±« ílÛY¾‡áøpàMñ›bpmg߉wòÕ} žÍ}6÷Ù\ׯoé~Ýö\±Í—â·õ$…ýù´Œ¶Œ¦Ò+­zc…±‚)ÇsOÝS÷D¦#Ó‘i())…/¾\øGGG¡s¼s¼sÒjÒjÒj ¥¼¥¼¥Ü¦ŠÕrµ@ÅTÌÁו.¿­Ç/’Ù•ÙõÍr‘¢’¢’äýНQª}¾F :ž@¤ª®ª®ªNäzöõìëÙ"‘æHs¤YäþôýéûÓ"áh8ŽŠÌË™—3/GD—è‘L™/óEDüKüK|_£ËŸÔY³²fY`dpdÐÓö†ÒC ·ëíz»{âx~—ßÖã++~ð‡È­·n¤`wò‹ªRU2íxâñŠx…ˆ ª  Š´­l[Ù¶RdAÇ‚Ž"ÑÎhgÔå† C…"ÕÕÕaßÊRY*"¢Ÿê§>;]þ¤žíÊ.ó’yÉm¦‰¿&îNÜ…Wå¯Ê_•Ã`Ï`Ï` 5 5 5Àdþdþd¾{e£££0œ N=íz…‰ÏîÊO̱ԜyoîL¹½úYëƒøÿ5Ç>1ù °'³z¢ž{ÔõC·ê‡ú!Zÿ®ïè; [õ}8Æ1Žyøç& üH+­h°Z10T—êr‚þsòÏØoåŒ}]ÌØ÷ØÌ|ÁþFé1b4|ËIEND®B`‚routino-3.2/web/www/routino/icons/limit-138.png 644 233 144 2734 13061246470 14606 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü‘IDATHÇÍ–_L”gÆÏüfVœ)ƒÔL ÁtkvlC²dS­!.íbI›PüSC5Dj¸p½±&&¤†Œ±Í‰I㛕f»c)˜–lB±6Â2i²`Õ툥 :]2‘iaàûóþöbøøÆM÷ÞïfrÎsÎó<ïû}ï™W@DDžXùpV9«œ¾|ì|ËÎ{^ö¼üë¿åãn¯;^ÿ×;à?ë? Pv¾ì¼yÓŽ-ܪ/ì±ù õ¬¼xàãÞ{9³_Î~ gÂ`ÇnÕ[ý_!¿DþG_ІІÓPR\R,Õ Õ OÎüûihzµéU€ï]ß»”ŒRJUÈ’ÅzþS[øJ½ÕoñYü–ž¥Ÿ÷#°îÅu/ŠÀŽ7v¼á=—o¸ùW8Zy´ÒÒÓ€wy—RгzÀh1ZX5ªFpà;¶p«Þê·ø,~KÏÒÏû‘Gßm×a§g§˜Юƒé7ý`Ökh ©wTTEQ–eóyß¼zJOé)0ÿiŽ›ã«;ˆyWy•¥O/¿°üš*ÖÐVQí:KÍz³(K_ …ÞÇôþàý!ë†Ûæmsµó#¥Õiu,¨¿«I5i r„#bĈäGaT@Tèç#>*À»ÌçÍçY <ÏwªîT‹Þ»Þ»Y·ågÅX÷5h?Þ~|u¿UWµOµOWéÔèŸG#£HRTÀÖ™*š*š*‚®3]gºÎ@|&>Ÿ±ñÄÉÄÉÄI8}íôç§?‡ÉßM¾6ùš½ãêy=–Ûµ³^m÷µc_½Íxô³ègÀYuÌŒ™a©ïɾҾRpe]YWjjj!Ó™éÌt‚oÂ7ᛀæÍ›7Bh"4š€HU¤*RÕ‰êDuöÆ÷Æ÷Æ¡ò‹ÊáÊa˜èkkbiÅÞó‹‡>²Œ}õ¶SÄóÅj·ÈÏõ›ë7‹ÈŸDDçð0Í´”È}y(E*Æ+Æ+ÆEÔ~µ_í1Œ£Aä„ç„ç„GdOxOxOX$x1x1xQdahahaHdMrMrMR¤±¦±¦±F$x58YÌ-=µô””ä?(Ç9¹Pÿ]ýw"–·ˆ«ÉÕÄsò‡âoŠ¿qˆˆøÅ/sê÷à€¬ÛåÜõõ®¯Ez÷î9,’¹—¹—¹'R‘«ÈUäDZ·µnkÝ&Ò:Ó:Ó:#ò ø ø (¢õ )Ÿ/Ÿ/ŸéììÉ<Ìd3Y‘òOÊo–ß‘7EDdÎq¾xGñY'ç\!Wˆç|1_LõaÎÖÎÖÚ߆ñŠ^¦—Ùqý•ú+õW ÿRÿ¥þK0¼axÃð¨é­é­éµë:::ì³Þ9Ò9Ò9bã›~ܔޔ†ÞÆ ¾ ¾½ö™ž™°ü8E²ál89.Ϋ±«1±Îj›<«ŠT‘,[ß-ß-ß-‘Eÿ¢Ñ/²}zûôöi‘²Ce‡Ê‰¬m[Û¶¶M¤z}õúêõ"ñ­ñ­ñ­"ƒuƒuƒu"D HˆlqnYÞ²,²÷§ÝÉÝI‹Ÿ6WúzôzTdÕÏÿ;• éQ=jŸÊùmó›ç7C.™Kæ’öJµ9mN›ƒôôô 0F£ÑÆsc¹±Ü¤I/¥—@ýF½¤^BqÐ8L¯è­ê?r*CïƒwÖ;›uÃmã¶aÏ10÷™ûX`‘G7nÜ :T‡ê°Óê”:¥NÙb¶˜- ¾USjªÿ•Þ®·³À¦Õ9ºr¿8Ç~aòkÖä7RF ¨0ŽÇÐ8N”‚ÉÏ "D@ «a5 ü…nº °÷x¥FgŒgиl5ŽL~c§{§ÛÚ©G&ÿcû_ùØÞ.ÛûØãyƒý/…ŠÚ¬Î—Œ™IEND®B`‚routino-3.2/web/www/routino/icons/limit-26.2.png 644 233 144 3040 13061246473 14654 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÕIDATHÇÍ–ÝO”WÇÐò:## K, ´4BBÓ%¤p1†·@³¤–ÒÔ"h­+µ¡à^¸Ñh4+Ä4%’HœÔ”Í&ÓQ- NR Äâ ƒl$qq¡PÁ±”¶3ÏÌs>{1óøÌî_à¹yòý½|¿¿ä9ç{Ž€ˆˆlŒ|b7ÇnŽM ãØf<±2±2÷oaÜ‚˜]1»þÙ ¶olߤ:Rú´‰¼QÝ/bòGëqÙ(f Á™àŒÙÁÇࣂ ÿÆg®AÒå¤ËkAhh¸ôí¥oiGcÆ~ÛùÛN0±‘7ê~ƒ/š_ŽýŸ¾Äý÷CÌ$Ä'Ä‹@vyvyÎápÁLÔ¼WóÀü+ó¯¨X-V¬j'àDZžFa#©7ú >ƒßÐ3ôÃó¤ÙÓì"ðþÇïœt!Ü0ýÉ:’eèi—“œÄ A_ЪÕãuM] †0±‘7ê~ƒÏà7ô ýð<æ¯\é*ƒÚûµ÷A¿  ç´7´7@_ÒÐ@‹LªT½ªSu¼¼¼º®ëºŽ¹VyÊÓHéÿÖžkÏÑ‚sZ––º7̵óµóÀª¡oüÊ«""[¿†$_’Ï÷ª ܽ?  T‘*b†µEmQ[€ 2Ȉä W¸ìcṵ̂ò)ŸòÇ8ÉIeWvÖ9æWZD/¢;<ðHD¤÷:¶æO›?5èôw¦&Ú'Úál÷Ù3gÏ î6Þ­¿[o ÎÈŒÌt v v ÂDÝDÝD™×'õI}ÒÄSqS±S±&ßÔUÏVÏVSO]oNkNüáy$tGDäN; ~9ø%ÜüâÁ»ÞUû­Ï“z’zð—¦–&”&@nknkn+¸[Ü-î(¿P~¡üT:+•N(ñ–xK¼0[1[1[a4Þ2Þ2ÞÖ€5` @YnÙëe¯CöŸ3W2WðO ÿrâ—j? ìØ úkáy$ô/ËyËyå„uϺ\‡¾ú:ÿÚ±«c—)Pì/öû¡"¥"¥"òJòJòJ`wãîÆÝpTUG¬Z=´zÈìsÙ\6— :{:{:{Ìxþ¾¼·òÞGJÿ¦þMþ€?!Kò­ä[Ê)h©‰©‰ú=Õ´\½\mû±¢ÑœÑÈëÈëÈ뀶º¶º¶:¸è¸è¸è€üþüþü~è«é«é«Ì±Ì±Ì1pg¸3ÜÑ{/²ÆŠÆŠÆŠ `[Á¶‚m°7ظظêÃf¼§¼§€ý[7¶ê÷bÕ×ÁÒ`i̽˜óñoÇ¿-2ùùtût»¤•ý¥ìƒ²Dæ6<évv;»"ÉO’Ÿ$?±(‹²(‘ƒ ФŸK?—~Nd666_$¨‚*¨Dnn¸¹áæ‘r{¹½Ü.²çµ=©{REz¾è©ê©ÑûDD$MD[ÑVDä°ÊVÙ1÷bÕéµáµaϸÈë7®‹Œî™|sòM> ‰6£ÍH``zàÎÀ[š-Í–&çóÇùE¶{¶{¶{Dâ‡â‡â‡DvxwxwxEª « « EªW=®z,2âñŒxD$[²%[ÄÕìjp5ˆd^ÚtjÓ) ücóOzÈg"žž"¡k¾¯|_yÆ…3‘SÉÁ¶ƒmðgø”,U-/ÃÂèÂÜÂjñÈâáÅÃà/ôú AV§ÕiXžXžXžÝ¡;t¨^Õ«záYç³Îg°ž¾ž¾žK~„×ÂÏ ?£û~íþµþØÖƒƒÚA ø$r*Æfú¾ñ±€ÊRY¬¿ˆ4Ð@(‹²(K”_e¨ •رcÚ\~üø£w›ÊQ9/øªM=Cßð±ÿ¹Õ»Ê8RÛTÛê»°3«ñ5dõ÷àïÁßÑpp›Û(ÜŒ0Ê­®ª«€ .`•V@ÔšZ>ä8ÇQj0¨54u#d YL~zjOÔž0®¦hçyïÊ—öuñÒ¾Ç^Îì Ë ˜IEND®B`‚routino-3.2/web/www/routino/icons/limit-37.6.png 644 233 144 3025 13061246474 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÊIDATHÇÍ–ÿOTWÆß™BevQâ@";E‚b´IÓM†”,.Ä6µ@)uпÔ4Ö5ЄÆþ°í¶‰ë‚nâwi#KHQD i² ¸‘56m¬"–3¤–gdtfî½ç³?Ì\g¢ÿ€ç—Éóž÷}ž'çÞûÌ‘•±_k¦5ÓêˆbëÎx=¥$¥d]gŸÐÁRf)»ù¬8¾â8@j{j»1Çæ¾ÙŸ8/çOÔ3ë²Râ…eÝ˺-E1ü1¼µù­Í)iQÜr lçlçi°ëü®ó=_ö|É{ðóÈÏ#¾"_ı¹oö›ó&_"¿|ü„¾$÷'÷[¦`ÙóËž¬­Y[³÷E~ʆ×_}ýUïsÞç”ôÿËY®Š€Ì5—€ÍýX¿9oò™ü¦ž©õ#à|ÅùмñöoÛþë€&W“ËÔ‹œ>ã3–ƒÐzµ^ͨKê,Çæ¾ÙoΛ|&¿©gêGýÄePDäH1TŒWŒƒ1Ö~ˆ¤FRA9´-‡ˆšÀ‰¥ZH ^£WëÕ [u«nuVQgxr)U¯5kÍD´ï"ŽˆŒ@”*îUÜü¦¾ù(lh[À$ñçñáñaà?låQ‚ü•6Ú'Nœ ’‹,²˜€C„%àrÈ5¯|Ê ªTAzcüïÅôLýñ¨ឈȉ!»ßÙýŽÉf¸Ç¶Þ¸pã´¬mÉjÉB~:úÉè'à-ö{‹¡­¯­¯­ÚËÛËÛË¡ãvÇíŽÛ0Ù;Ù;ÙûÔ‰1±}ⵉ×àHÿ‘¾#}¨ï«® _Žë©©ÝîÝnà~ÔU]yé‚,”®)]#2™æ›ñÍXò =žF _-¸úâÕÅRÑ_ñuÅ×"öN{§]¤ßÕïêw‰œÎ˜û þÙ?\ Ü Ü…òîòîònpvv†ëÍ×›¯7C07˜Ì…‡6ÚxÆ.Ž]»ø´±Ž‚Ž‚ŽÈ3òŒ<NMŸš>5 ¿É8Ÿq®2áìp6)ŽtGºqËjTkvÍn¹%ûíßÚ¿é,?Ss¦Fœ…ï‹ôTöTöTФ.¦.¦.Šxu¯îÕEÎ8{àì‘U%«JV•ˆäåå‰,e,e,eˆøÝ~·ß-b+³•ÙÊDì›ì›ì›DvfíÌÚ™%’öß´/Ò¾™iœY1³Bœ"ìcŸkôú Ë-Qÿù®¾šÿjT}Qka~a>KŽß;<ìhÝѺ£5~eÊ”=€ÖÑÖÑÖÑx}öÊì•Ù+°e`ËÀ–ð¯õ¯õ¯…ºÒºÒºR°¥¤¨¬®5j –´®¨t-t-›£~b9vbˆk{œ{Ç€áÖ~ò…|0;<Û?ÛÒëõz½>nÀÒÒB®+äŠ× e(CÁ|Ó|Ó|¨° «0{½Æ^˜Ë›[=·e¬O…§âzLîÉÝ“kî‰!aè‰KŽæŠúðqŽUªJ‚êwj»Ú¬cë^¢&šhJÀa„p-5Ô€úµÊRYêõAµ:Æ_4~sü&€Íoó’øÁÌ13ù—Ìä}3éÍ$àÓh2«k÷µûÀßu¯î%b&9¿"‰$à#r0ÁÈ]¦™5£¦ÔŒõ÷꺮QCšOóÿ2“?¦~2ùŸÝÿÊgövñÌÞÇžÍìÿ†åÉ8Ø^pIEND®B`‚routino-3.2/web/www/routino/icons/limit-4.png 644 233 144 2031 13061246467 14432 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÎIDATHÇÍ–MH\WÇϼ4ÑãçTA"Qp6‰›ÎFÉ„@Æ@BL1ˆ„®šÁM³̪E‰…'”fÌBöÑÚ,+J¿Lq$Æñ£ãÌ{÷×Å{wÞS(hWÞÍãœ{Îÿÿ¿ç¼+ ""ÎWÀ8oœ7ÊlÛèvýÅ׊¯5ünÛOMðÝòÝúû'(Rþ òYå3kÖµõ¼Ž÷拸ø^>í— qE/‹^úZ»î\ºs©ø[ÛþyüIr'÷_ß ð*ñ*ÁX}¿úàKë—Vpm=¯ãu¾ÆóâKÿ!~8ýöô[_ ŠÎ W/\½øƒ°pÚn´ÝøtêÓ)e€¹”RªZ ôH{l=ïÄë|§ñ5Ÿæ·õ"ˆ´w´wø‡í„Ùßàṇç4_. <æ1¥Ïä3æ]ó.YPãj>pm=¯ãu¾ÆÓøšOóÛzäàÙþ…ÛÅ·‹ ‚þsœ°îY÷È9Š-6Ø(ì*¨‚*Öe+d…\?ÛN|!_ãi|ͧùÅ+(ø+øWý«™oà£ùÑ,À^«Óêd·àù‡-¶<ÄA‚AM«i5íñï°ÃY²ÿA¼ë.Ÿæ·õ8žþ=z’Cž#°WœcÛY½í«° »ö|Ï|Ï|ŒÕÕÕyâÒ*­ÒÀþ»¨â[!—ßÖãûëGxñõÅ×BÞ÷`>7Ÿ“vÙöÙgè ƒ`Ž9æ@EUTE¡±»±»±¢£ÑÑè¨gª¬*« H‘"<ßáÓü¶C¤ì]Ù»Ë߉D®D®8ç+¾a£Ñh”"ñ‹_D’’”¤ˆ„$$!i’&i‰µÇÚcí"Ù’lI¶D¤:^¯ŽKaÐB -"R/õR/RÀsñ>Íïèʳ•g­þœþì-{µ®ÖÝ•›³æ¬9ëÚ‰H"’ˆ@íZíZítövövöBC¼!Þ‡TWª+Õå9Ò5 ¼wí~Úå·õ"ÖëïƒHþfþfa¡Y{Ñ‚ˆ¯Ï×çëswÂ# Òl6›Í¦ÈÔÒÔÒÔ’ÈÊàÊàÊ ÈÌðÌð̰gç&˜`ÂÅóà;|šßÑsä;vh˜13fÆ\{dhdhdÚm‰¶ÄÇõ޽*·õ­U£jÀZ¶–­eØ ï…÷°¹¸¹¸¹L2É$`bbÒ¤]•Çèc8Õ©«tìû–B¡€9§Ûqn§ýΟ;tÄýôÓTPN¹ÇŸ×;tìÎbÿ•'öuqbßc'óû/# Tf¼»³ãIEND®B`‚routino-3.2/web/www/routino/icons/limit-38.1.png 644 233 144 3006 13061246474 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü»IDATHÇÍ–ïOTgÇÏ~ ÊO;$ek‹&Z!M!ìX´iƒ  ­ýa«MM_µ¾Ø…¬âÒ[ˆIC¨[(©V¡†è®F”ÔeRטÐU0H@Z$ÎÀ0Ó¹÷>Ÿ}1\îÄþ>onÎ9ßs¾ç¹Ï=ßûˆˆÈú•§@DVDVDbÈŽøÀöǼóꟾ Ù' Ðöh{þ[ ëšÖ5$µ&µšwlÛŠ[øð|»~8Ÿå—õb;¢;£;µâ»ö¾¸÷Ř´Ý0±Ý±ÝK:|ØóaÀ÷mß·qf†f†ŠŠÁ¶­¸…·ò­záõ¥î ~ˆê‹êÓ&!ÚílW¶+ç“à9ðÆko¼ð òA¤ŠãW`-kU1àÅ‹µ~ ³­ø ÞÊ·êYõ->‹?Ô@jQj‘”í+ÛÛJ¸s>Ëü,Óâ vŸó9kA÷ê^£Ú¨&j@  ¡m[q oå[õ¬úŸÅêÇ>JŸˆH㟡|¼|Ìß‚7ô{ÁÁ`ïï\éT™æ¸9ú}}BŸåPåÀ^•7÷8„ó=ó=‚f‘~\?êo¡úPSÌXüÖQNˆˆä~ ±ÞX¯w ÇÆoŒßúØ ª@àã*׸*Y%«d ‹.ºÂi¤‘F ™d’ùÃ2î÷Œ{ ºŸŸñ­¸wã¿8~Vù õ#ÌŠˆœ$ñà»ߵʘ[î¸nõÞê…Æ ¨Ñ©ÑÉÑI›h¬~¬~¬ávÁí‚Ûv\]V—ÕeP—Ô%uÉö4ô ô &R~‰ú%ÊæS·–,³Žöä ˜Ý""?} ÝǺÁÝÔG=Pï'ÿcÝsëž#P¾©<£<rGrGrG .«.«. ²Ç²Ç²Ç j´j´j2¯g^ϼ#GFŽŒ kpY-«eèLïLïL‡¨ž¨³QgáìÎog¿%°‚zß8|ú­ÓoYýôi„Öž–¶u»HQsQ³ˆ‘é©ôTj-Ç¥þùúç%º²¸rwång»³ÝÙ.âëóõùúDâÝñîx·Hi~i~i¾ˆsØ9ìYZZ’ÕeºL—éÑ<šGóˆ¤}•öMÚ7"Ê¥}¬},Ñ!”Ö"‹¯l{e›ˆHbbÿÖík´¯"§#§É—/ÍZ³V“ÜÏ~ñì2Ÿágê)I};wÿËû_yè|è|èѺSwФxR<)‘¶Þ¶Þ¶^‘…™…™…‘”Œ”Œ” »1444‘Š@E " rªðTá©B‘å…åËWaóâwt8:$U$²&²†|1vÆ;âªE"8³§³º³¶îß²iË&ûH\5®W-ÇG¯½zôªÏ»’w%ï ´lnÙܲ7=nzܾ_‡¯ÃÆ•¬-‰/‰‡Sùú™¯Ÿ ޲©ú©z€ÄþÄ~Õ±×ôÝ?Šôvõv‰¼~øÍ3ožáÀú—ä÷„ U U"ÙéÙéÙé"£;FwŒî9Wx®ð\¡H’;Éä)ÜP¸¡pƒÈ®»Nì:!RÒSÒSÒ#²Ô¾Ô¾Ôn¿Á¸æ¸Æ¸F‘¨‘9‘9òûÊFÈëqq""Þbo±ûG±¦€áC©‡Rí)Ñ·ûü 0÷ÃÜŹ‹(£Ô(5JíúoúoúoÂÜìÜìÜ,¨VÕªZAWçÕy˜¯¯¯S7uS·ó<›<ÅžbT z1¸´ùø÷¡m‡¶…M%ƒOèXTHÇÔ_Wu¬T•âSÿTͪÌj³Ú¬uWÝUwæ/NÅ©8 <òÂ̸¢©•¦c¬èætÌúj–òV¬©XÔ‡”YýG¤?þeLÓ¶òó6ûØêšêWýÀ.pXb‘EPÓjRMS«Êÿ‘ùARJ£øûÊïRùŸÞåS{»xjïcOç öÿjeʧR§IEND®B`‚routino-3.2/web/www/routino/icons/limit-34.6.png 644 233 144 2771 13061246474 14672 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü®IDATHÇÍ–íOTgÆï¡"C‘‘Ö±*¥â ÅN‚úA£,´º}AËÔ€•5[i×ÄØ&Õ¬VvmB[ 5MCSK£Ù¶†©PKübÚD HÌ$TZ©Æ-4¦;à £à¼œóüöÃÌñý|¾œ\÷ýÜ×uå¼\瑌ÄU 驤§’lqœôw³n}ÑúâÊoâ¸EËfËæ+ÿ„…Ÿ.ü౯ûJ¿jb£oìŸ;/bòÏÕ3ê’!f!œⱔ'pÔ¬®Ym]ÇwCjGjǼyöͳí'ÛOòܼxó"@°ƒßÐ3ôã~ìeö2Øôú¦×S[ãWÿïd½“eèE;€ø€ ÅBZ­VKT·êÀ‚LlôýƼÁgðz†~Üù(gDDš*Á5äÝíD³£Ù DÿŒþI4áT–Õ*•§ò@/Ò‹ô"Ìu“QFï!¥vÆÞ‹½G4ÖµEm ‡âüàsS†¾ñ(yæ8¤†RC¡yêê.ðWP%ª„ùˆ€ *¨¶°…- .©KêÒCæà\rÉPAPnåf†ïüo%ô ý¡¸aLD¤¥Û®ú]õ›^xµê×~ýš¾hú¼ésT¿ÞíòÀÞ6¼mxtevevešu½YoÖ›M|½úúË×_†¦sMM¨ŸÝÞ^o¯©§Fvî*&ã~DïéßG:ŽÀuûäÉjçãÿ^˜»0—pÍâš´š4Ètgº3ÝÐé‹ôELAǸcÜ1•g*ÏTžyÐx0#˜Ì€â ÅŠ/ÀÆß7n„¿Œ­ûp݇„G·…V…V©Ðîhw€îûI²œN_œ¾¸h­HÙgeŸ‰hYÓîi·¥õ_r4ïhž¤¸ïºÅ-"K»—v/íѺ´.­K¤¡¦¡¦¡F$ì {Ã^‘E-‹ZµÈë|ýùúóõ"¾}¾}¾}"öBû:û:‘’ô狞/’ûRëVëVK«HñÛÅo‹$•¦O¤O­ü‘ŒˆþŸøßõ¿k~ö·gC„þ€êæêæêfÈ?œ8ÿ0ìÍß›¿7råÊ9µËk—×.‡•ÇV[y |ŸÇç1ïØ©¾S}§úÀ©;u§'FOŒž…'/fžÍ< ? ô”ö”â‡HN$t«í Ûúo¢½6?m¾ò@¸,\_oöÔzj¡è§ Ÿ6J%ŽTÌVÌVÌBÝñºãuÇÁyÀyÀy’ï$ßI¾ííí999m×Ú®µ]ƒ5Î5Î5N“¯°ñÙêg«ádÅ·¯|û @¸9Ü Ú3Ž?:®<¢¾4Þ±¶@[¦P;Ë?)}®ô9¶j[•­ êëëávÖí¬ÛY¦@ëåÖË­—ÁÕèjt5šõ‚õë ÖÔcÊ1å€vlرR­VeUð·Úíúvpìt\NOŸžVÇý$r¬¥ïnûn»ù•ÄÖÞ Þ ÂÄßM|‡Ò¼šWó‚VÃjôN½Sï„Ù³+fWÀ-×-×-(›²)öööƒ ¨€ €¾Gߣï¿Ó¿Ì¿ ¥¯ŠŒDFL=þ»;owž¸-=BÏ}9–Ïuà^޽¦^cFUªMjEsîØ½ÜR(0à 3súÛ©£TšÊVÙª@0£–%øË‡® ]HJ Íã#ÇŒäÉ»uÞÖyÀÑx2«ó±ÉØ$ð¥6¦=˜üá}Þ–°„%€Ž†jTù”&ßkš¦U=±`,|m$B/rò?¼ÿʇötñОÇÎìÿì†%|u¢ÓIEND®B`‚routino-3.2/web/www/routino/icons/limit-35.4.png 644 233 144 3035 13061246474 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÒIDATHÇÍ–ÿOÔ÷Ç_p (ØvZiT ŠÛˆÊ4êÚ"d8¾Ô !%7hsõÊæú‹¡ÙÖQg6Iªä‰’L‘:LCµÛ“FìDƒuuL¬À!Ãóãø|Þýp÷ásë_àýry}{>_Ÿ÷ëý~¾ß""²<ø/þjø«á±;Üaú—å,ËIîا5Û¶ûŸ¿ƒ¸†¸€Û^lÓo›¶7òCëELüP>Ã/ËÅtDvEv…eí¡4­4mYBÀþÓUˆêŽêö.À»=ïö|ÖþY;¿ï¿þþk€é¬é,0m#näõ^(¾|ø~XÚ»´7ì>DFDFˆÀê]«w%ý6ðm<°<°¨pÐ&bTàÁƒñs‡ØF<˜oÔx¾ÁgðúˆÏŒÏ’²’²(W àöY¨N¬N4øüÝÀG|D ,x<Z¹VŽÔUu€0ÂÀ´¸‘oÔx¾Ágðú1G9+"r<öŽìÝ à¿¶p׿ʿ ôûgý³øù¥Õj´ ­×Öië@shÍü£…ÿ[CP ¿­¿_¥jUZèI|°‰M€ ƒßåw""©' Êåñ,áðȵ‘kÀ_ÈõºzYši¡ÔCõP= !ÖÐÐ…B…øç˜c.ÄN%•TP75¯æe6èÍÇ;Ò7Ò‹üú‰ˆœî'v_å¾JEßt{×7Ÿó9ÿÅñÌ㙨¡ÕC‰C‰&ÏùÂó…ç áTΩœS9Ðbk±µØàéʧ+Ÿ®4óô£úQ=dï:ï¹{õ·Ä+qWâL>åßW³¯“;Ý/z·ˆÈàè>Ü}îÅ?~ðøzç¥ßǥĥà³}k»i» kê×Ô¯©‡ž‹={.Bò@ò@òï)ÞS¼ÊÛËÛËÛáÑУ¡GCf#ª]µ«vPÙ*[eCŠ#å­”· û“¬¼¬<|Á¬wôŸK9— úYöÉ /$lÞ&»33E´Ä™/g¾ s‘ºuuëD~ôSëVëV‘é•Ó¯L¿"Ò?Ú?Ú?*âÝèÝèÝ(Be”‰Ý(ºQtCdEÅŠŠ"z‡Þ¡wˆX*,– ‘jU­ª•ˆï¾Aß ÈË'ã;â;$RÊDDÂ\ü$ãýŒ÷EäDZi±i›· îåóËçõa>vt4·ìÓgžQÏ(”d”d”dÀ†vlØ'ì'ì'ì°ÿÎþ;ûï@kekek%X›¬MÖ&è=Ö{¬÷˜¹b®,Ú/£#¢#Tø2}™pnwWyW9lþÕ¦×6½fì\»síε7“7“7“““f|‹s‹s‹\—Åem»¶]Ûgn¹uæä_È¿ÒÓV¥­‚¥k-ã–qøsW_o_/À“­O¶‚ž==¬ºDµ{¬sªs ž\ Ì<ëãŒôŒt|1¥1…1…àv ;†a°n°n°Ö·­o[ß±5±5±5p¨ùPó¡fp—ºKÝ¥^•^•^µµµæ´µ¶l; Åg Þ,xÓÜcšëlýÙzC×uìt?wÆ;ãÍS²°mnzn&®O|1ñJ+Ð ´“`>a>a>&Ã'Ã'ÃAÝS÷Ô=PªQ5ÂÔ¥©KS—@³kvÍj¯*T…ðlͳ7ž½úï¿ÜCî!`0À‡æüÀù0<•ôÿ@Ç–tLÕ.êX®ÊeVýQ5©&Ð;õN½Ôuu]]9} ªA5¹ä’¢_žà5ÅS€WY••Ù æåãê¦Á¯ 3”ßg(¯m‰m PPfÕ·ðxá1Ьicø>ø5 þ¢¾R_—¹ÌeÀhD©ûê>ðŸEåO?‡µmˆ^Tþ[˜ü‹—øs{W>·¯‹çö=ö|¾`ÿ=±'~GÙUwIEND®B`‚routino-3.2/web/www/routino/icons/limit-36.7.png 644 233 144 3046 13061246474 14671 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÛIDATHÇÍ–ÿOÔ÷Ç_(è HäjHXFç7Vp•a ´®œm•¸4ç:; Ùh3WšÈ\“&kt†1F2t×Ä»P¤_¨#¡2‹Y-˜TÔD8=¡pwŸÏû±î>~®íþß¿|îùz½Þ¯çósï÷ûùy ˆˆHrä)`YoYo±…±å§f|UéªÒï¾ÆMÄìÙ{­’’RZRZô1y£>z¾ˆÙ?šÏˆK²˜xo¼7ÆÁõ°ãþ«ÒÂø÷—ÀÚaíXÁË/w¼×ö^¯Àäàä ÀœcÎ&6òF½1ßèÝ_ê¿Á/+>ZñQÌmˆ_¿R2ŸÉ|&ëh¸àF<÷ìsÏܽ«, M«Y­€?Ƙ‰ÂF>RoÌ7úý >ƒ?¬G µ(µHœ/:_´ž Oû+Ô>Vû˜ÁìÞäMVCÈòhUZË .©KÄ&6òF½1ßègô7ø þ°s)EDÞ.çÇŸ} 8ºÌ f‚Þ¼¼N0¢T©Cêõ„®„†BC ëº®ë|k¨>µ¤–Pš%H'¨ ¶[ 4î¯z*ê*ê o—˜KyKDä{gÀê·úýqœúØ *_å³H/}ô*PªXËZÖF)8ÏyÎG8‘¨x€¯IÍRY,FÀnˆðü„õÄžøµˆÈÉ߈Ý5åšúÑ_äo/}é¨Êý÷Ï®}p탘þwt÷“î'%.þ_ñWã¯JLÆ;î ·ÈDçDçD§Hkbkbk¢ˆÕkõZ½"ëÚÖµ­k“‡ãö¦Û›noqç¹7º7ŠŒÕ%Œ%HÜè÷‡“†“¤juaî繟«Ü”_ø›ýÍ«þ«ÞŽ ŠÞ!"òÏ_AljŽ0‘:{wö®r}çdÒãI³¼ÏZI%iÏ´gÚ¡kW×®®]Pê,u–:¡ÔUê*uA¡¯ÐW胛ó7çoΛÿOß¹¾s}ç `{Áö‚í°cfÇw@þ$"Âr÷Á+9Wr” >lù°B_…õˆÚ·&mMšòÂ\Ú\\ßr«àVüñdÃî†Ýàð|âùJ²K²K²¡ÚSí©ö@ÖTÖTÖ¬h„ÞäÞäÞäo‚é3Óg¦ÏÀ†‘ #F`ìQɧʧó¦ó€@J|J¼>*ÚÎÄ•‰+•–‹–‹À½×[å­‚ÜŸlybËfcG“£ÉÑåÅåÅåÅP–P–P–`æs«r«r«à쩳§Îžß„oÂ7aæOwî:ÝŽ_:j5f\/Žü˜œÌ˜Ì4[­Gy-–ý‹ÁÅàÕOEÞo¿]äǯìsïss8ù¶5¶5°Ý° Û†Eì[í[í[E<<<DR]©®T—ˆµÐZh-É÷åûò}"{šö4íi)î.î.îADd0}0}0]ĹٙíÌ~x6ÔŠˆpXR.~vñ3‰õ—øK®~ñ±¦~†ªS«S¾Ç–Ð—æ–æàþ?î_¸¥ÓŽiÇ¢öÎeí²vfrfrfr@oÑ[ôP#jD€o§o§o'PGu0_0ÿÔüS°´~é饧Q Ò½a>ôê׫_7ü¬©_èÿ†­ûŠ:þÐÇœÊÉ¢ú¹ªUµ êU½ªµMmSÛ¢6o†ÊP@EEm®e¾äË(\§}¡}ñ5ÓÆ5ë¤uÒô1Óù— ç­Œ«Œ~qæîÐlhø³vO»g:?ïÒJ+¨~uQ]Úi§XdPÿQ7Ô @‹Ô§j¯i¯ä Í¡9 •ÁB•±•±ÿÏùÝoå#{»xdïcæ ö‹?¨S C IEND®B`‚routino-3.2/web/www/routino/icons/marker-41-red.png 644 233 144 4066 13061246466 15437 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜëIDATXí—LTWÇÏû%¢(»Ä-(Ãn,[]@uu×dùåqGiƒšŠ Äh×lðWǦ‰‘Z%RV±kj •à6J‡HSSWkµ¤Ù°×vmøÃ3S qeÄ‘Þ{÷»0÷½7«ÙìžfÎ=çžó™sν7C4%?¡8 “²Íb@ øÿÊ].º\tYý­wÒ;é„1ay,åAÕêµz­Ðk‹µÅ€æÐšÃ¢ÇìÜŸïçñx|8.¿m–&¸·à&’ÊåƒíWù{“½ÉÞ¤: °w˜“9RÛU—ꘟ°Q­OëÖÄšè|îâ.€hl¿__¡¯ÔöÈ÷‘ïöëc}qgžçç<œ”ÛÊmåöïÍl ¶[ËöÝ÷Ý÷ÝÇ£XœvH;¬†)!ý´~pgñ,ùß+d…Bl/ÛkµCÚ{Ú{f4žçç<Ÿ¼MÞ&o<È ÇkŽ×¯aˆ«nõ¤zÒ’>ÂêX•§wQï"ðê^ݺ®ÐXußZßZ‘ËY—³ÌUÕ=ùÑäG†æùÊÆñ ¦å¦å¦å¢i´|´|´ÜŒƒ,£@HkÕZ­‰]{]{©{:º;º­öðPxÆÞ{ JÒKÒ ÂVaŒ¦g©#ꈙçç<œƒþiÍá5‡×˜­ k^i @P¯Ô+­ß®þv5Ìy2ç‰ô³œÏr¬~gúÎôÀì%³—Xýª6Tm°¸µ Ú@ójW´+f~ÎÃùÄØ‘Z¨”)eJ™qÆ’h –` ýL<+ž%"oo#"z-ùµd""G¶#›ˆ(ù»ä¢³¢æ%¢ÂºÂ:"¢›7ˆˆ › ›‰ˆ]tÝâ6tÒ‰è¢Sf~¥SéT:#¿0ŠÏÀy#âD×DIÒ¥3ÒmŽù>ÞÚµµ‹ˆ(÷ÓÜO‰ˆÚrÛr‰ˆ&^x•ˆh†w†× :«fV ÑK3_šID”Ü›ÜKDÄž°'D¹Ý¤tƒHì{ÄŠU¤ ?èúÉËùHtˆÑ1y/V⦿ìh«i«±ŒÀôk7®ÝEP‘‚á‚aXyhå!kKç÷Ïï€/‡¿~Ö%PÞSÞ@----µœþ®h]Ô<œá‹Í›/6/àV!_Èò'ï‘´TZ*-ÝÓÈOYÖ/2OdžÐæûÖ 1üÜuÝu!ÄJ×½¹îMpÌuÌÀJ_/}”¨€—ï½|ÎçœÏyèJ¶’Ûƒö €Uê˜6†HáÑð(»'wOîÝx¤t)]Jÿ䥔¥”¥”É—äKò%WÀ¸ð«ìËìË´]Æeãd§ÙiDàá¿}üöømkEÝGÜG¬`‘†HƒE UØ+ì•\-¹ èŸ7×þ³öBí=ln‘¶H[®­ŸÒ“ƒ/™+ùÊ"e‘ÿ$ßà¬w®r®bF³ÔŸF>Œ|DöEöu”u”À­”[)VPý¤~@„ë_•Uh5½'zO˜­îxìt b•ñ„6ŠbãD¹0W˜+Ì]Ôš(]1Î×Fa£°qE‹à\‚‹ÏŠ^çé÷ô{úÍzj»´]f½D1¡¬µŠ©¥l3ÛlÖ7à ´Z€¬éY3³fªÛŒJî—öKûvÍArÈ6“µ˜Š©XÞOnr“›H JA)øvñ´¶ØŽÙŽ©©¾w}ø>0²ÒÉ÷'ßÖÁ:,€axáàÁ†¶^›£Í1ʆløaÃÚ.ã—ÇåqÏŒíÛ3¶‰vÑ.Ú…®] Çœû\/Ý’nI·„sÙ»³wgï&Rj•Z¥ÖsÀ˜Ýb{±½Ø:»ºSw"<ðxˆ‡xh9Õ ´Ú³¾G—]vt+åñ”T%UI LLé¶éñzZOB‚úu¼n›®ä+ùJ¾¯Ë2»õÎzË즪©jª ¤è#ºù4†‡¦ ëIJJb•ÆL¦ˆ)bÊûFñã¾$zþ‚t4av+_4»j¿Ú¯ö›“û4ãiÆÓ g,g,gL{ŘÅN©Sêüór>j±ÑKœM/Óø±Ùm¶5ÛšÕTŸËçò¹ŒC5ÆIçœçœçÌkGn‘[ä–¡Ø_’ä¿'ä­ÓŒ& ßðFlvÏþØì–¬.Y]²Úœ]ÏrÏrÏrœš²3£BµP-T¯ØŸF|˜W ÿR^4»…R£Ô(5úsàê†ê†êv$/šÍ‹ªÿ6Z”‚RЙIíÔNí»v$_B¾$ú%qvÄë%7…MÂ&a@TAú¯Äyâ¡sÿ7I5¾•Q•ÉWãÍïÖˆLd"„^¡WèþùÔú/= ñ&Ä}a«ÿV‚\9Ò0KIEND®B`‚routino-3.2/web/www/routino/icons/limit-15.3.png 644 233 144 3014 13061246472 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÁIDATHÇÍ–ýo“×Ç7ÁjÞëeK&µüP©,BU¥¡¼ˆ8Sb*LT” )mJ4¡IEM: EÊ ]ÐÔ…AÄD™*Ü0º¥ˆ¶ “@ÀFÓĘ ¼©ÅQ Tá ãçyîg?ØOì²€ûËÕ¹çœï÷{ßν""RœîìUö*{aʶwfÆ—5/k^ù×”}À›Ïæ›ú=  ”JæLƶüV|v¾H?›Ï—bÉ äË;fkHÛïCÛ‹m/.+KÙœçqçñ:¼uâ­ã#ã#lƒè7Ño~lø±2¶å·â­| /_Þ‚_žùü™ÏmÈËÍËê¦ê¦šß¦fkàÕÖW[¾Ïù>GÙÀˆùä«@CÃjw²lËŸŽ·ò-< ßâ³øSz\õ®zð¾æ}Í9œJ˜ù tWvWZ|ÉãÀ.v‘º¦kF»ÑNÔ¤šÀ† 2¶å·â­| Ï·ø,þ”ùéÞ¬Cۘܘ\tÁüUÒ–´ú³þ@€åQÆÛÆ6c«ŒççÁè4:Nà|À<Ù”×óõ|’z$Y¬óB 6†7†‡iþ¥­ÔDD^øœ××5ÜXwc³´¨OõE}‘‡Kç8Íi`žy泩Q( IrI>@/½ôg8ÏyµZ­æ!JáS¾¾àÔœšæà|JOz¥œƒ®w»ÞuÀ|ÉÂ|e²y²ÙñE|¾àÊàÊàJØ·iߦ}›àÿÿ‹‹‹ÿoŘY7Ó0ÓG††QWn]j¹ÔbyÍ—Ôã­­[[hJpRDäÊ; }8öáÒôß8æ;9v’„c»£ËÑÁP0 >ªê£àêvu»ºÁ{Õ{Õ{ÚGÚGÚG º<º<º<#hvíìÚÙµPÚ_Ú_Úm?o+i+Ÿ%ʇʇHüsçuÏuz>ã3Àø{JCì…=…=«_–­õÓõÓ"䊈؆%‘S”S$Rz¯´¯´OÄùKg­³VäbÝź‹u"Z§Ö©uŠH·tK·ÈúUëW­_%R1_1_1/KÍ ™!3$ÒçíóöyE*~]á«ð‰ÜÜ?ûåì—’÷ØwoàÞ€mX¤áLÃ[dzSÏN­~Y ¤ ¤Àœ†;?ÜùŒú¥k@ãÙÆ³gaÌ7æóAh.4šƒ-»·ìÞ²Á@0„òýåûË÷ÃD`"0È:zªBUÀb|1¾‡ §6œÚp ª:*[+[áòwß6~ÛȈ·Ä[ÀÜSøqáÇæ´]”yÂî+Õ,ŸÍgõXýð~ü¢pžP¾2*£2ÞŸ’(6‰Mb“­ÛÌmæ6« ÚØØØœÊ½•{+÷°êÞª{«î+ÓV¦­L ú,ÎòÙ|VÕgýžÏCüÂpF-?ÄñC®T¶BñEñEñEòÖúöúöúvå¥Áǃ @€ÃÆ0\pªˆ³|6ŸÕcõÃûͨ}>é&ð½|/ßëú'+v>í|Úyß|‡ä˜’¬$+ÉðÉfÙ,›yŽËè¡ÑC€â’’À¨|X> ÈE.?ÂmÔïð;Å%]“®>‹÷gïÏ€ò¾bP di†jÃ.Ã.Ÿ‘õg<Œ4w5w5wßü KÐUè*tÊLç#ç=ç=< Ô”÷HERÀ 'l¡¾J§Ò HG:(œÂjQûïùòéGéGÕt>rú~<ÑUè>Ñ}¢Ìd<*ŸX"–ˆ%•,PWXWXW¨¼(àñÙ¤ÛÒíÞž+=W ¡¥¡N¾qò 90r¿aÝg»ÏÀ¡W½ À{!ÿB~0ê³IÃÒ°êzê ëòëò•÷Ô• ã#Å›››„꾬¾¬¾,À]Ü… ìíOíO€6ИøÃÄ€±{^]x5ÐÖnkk¡Eˆ?h*7•jýw_Vߤ¾Iãa| t÷н+ö®Ø|3Ù1š7šÀ͆r¦çL€ÔìÔìÐÚ7Ýx tìÔ±S0kò¬ÉPÜUÜšö«³_À¸·Ç½ ÀÝóKÏ/€ìö0ÆÇŽT¢&S“©ÉTÏXm¤3t†ˆ~φò?Êÿˆˆ¨ër×e"¢¥§—ž&"ÊoÎo&"z}Ñ니ˆ^»ôÚ%"¢ûõ÷뉈^ny¹%ôf‰×Ç뉈$«d%¢è®²®2"ú2ìú‰Ò4j5ê‘O €âxo{o{o;9¼üHßH Âß„¡ƒ@¹Cw.ß¹LDDƒ4HD4”0”@Dä¹é¹IDÔ“Ú“JDMDT¢/Ñ}hþÐLD”s=ç:QöŽìD4¨{›nÒM"þäH`Tp»Ü.·‹Œx#oäÒ¯%®þGYÚ†5!ˆîßÓ¿DŸèà­Ñ×èëÐ$Z­°îĺ¡ã99`¼`¼À·ûÒîKÝÝÈG›7ö;»ï»W¾{Eýs)\ —"ýJÂ\a®0·¼Š²„麺ò çjWº+=x}(‹uÞM|7€ÂB·ÖßZ„ ì©ÞS «GV@qmqm¨úöîß»ÀÒÉßNþæ̇שT*’Êõóõóýê@˜"L¦|ñ„b2c2c2‰Äsâ9ñœµW½ðWflÏØ.oaõý¦o¾þækxa×\×\à¡«t5ôÍ3Ï3ÀHåH%ï<ÞzÊÏ'“6MÚø¿8f>f¾nÑåw¿óØïQ7 …7òÆüñìÔ«Bÿ\“¢IѤ¸Ø“ykÉÖe±zLv). `yËò€ÁÖS­§@ÒJc÷ÏE\ YAowgw'4$5$ráOå?•×÷ÈБåG–c©ú ­â«øª‘,n*7•›úçú@áŠz¾Öq\Á’ƒœ•³q6¦ÿ&{›m—mìªv·øõþP­z•ÊPú•~ŠR£Ô,°Êbe»²=(¥^kïòÞå@B´î¡î¡¯D]ÉO……MÍHF2Šº k:¥Sºø)ÙÈF6"Á-<n=©~ZêJu¥>­ógŒ3&T»RÔ(Fqˆv=§Ý_â/”<éœt^6qmçÚ†µ òõ 4,ˆöq¥q¥q¥D¼7ðîh€®aþ.ðÌîw„;\óÌm3·ÍÜF¤)ÒiŠì;Uí¦Ò é¡Úõ›ü&xa‡výèGp¡åÙòlyvP‹5ójæÕÌS³z­F«ÑöŽŒùºèðæZ#¶ž¸÷ûp_=¦]çÑ vMf“9D»ZŸÖ§ ùøøµØntöñÝã»Çw+¹ª&cø>fÍß#¤øy_=@¨ Ñî:nÝ’\ÎÊY9k¨vímö¶ v}m¾6_[P¹ÏâžÅ=‹ôúý€üGU‹B£Ðx`“Z@z‘€éL`‚Úu îíîÓíÓíóiV§Õià…^ 0RS³©ÙÔ¼văâAñ`wà/Éø‹}ãôÒ‹#MXÐî‰ÿ¤ÝŒeË2–µk_`_`_€/Ç⊺\WÀ,)oÃ÷Gôåè¿´iw‘P%T U®9 ¸ ¢ ¢ BÙŸ<š<š<êëR·Ú-¸·)ž,d! ®ÁÑ/ŠþG‹ÔîÎp?ã6·ž[Ï­(›²)Ûÿ'~?ŸpÄGg¾Oð$xP¬³i™ÿŠì;Úwêÿ\ÿYýg¨þïû¿ëÿÎÐtºÝPw¾î|Ýyèuö:{F^;­ÖNعÛù–ó-¨k¯k«kCõííîìî4ôÔÈÌ™À“à<èé= ß|úͧÐýg¶3[•Äü×rÆr†ù-¥[>Üò!¤nJÝ”º ®8®8®8 ±<±<±<¸ù T‚‚[·"nEMµOµOµCÎõœë9×açÃ;á÷¯×¼^Ãüh¡+Õ•ªJ ùåæ—A› Î.±Ñ_E•õšÈ¶W·½*òï-?Ú~´…5þñlECEƒÈ_Î}Þòy‹ÈúÒõ¥ëKEzÖô¬éY#R;Y;Y;)bê1õ˜zDFÆGÆGÆE<;<;<;äÙºjºjºj>2|døˆHÞüyD2Ç3š3š%rÙrs¹ ¬Q$'>'^Ä´9ö£Ø²^|KÍKÍÚ}UöØöØf¼èÍßu&w&Cº5Ýšn…ý§öŸÚ 8Ìaƒ»ÑÝèn„=){Rö¤@RqRqR1tvv_Ìî±{ìHÓÒ´4 Ξ=7 +o&8ðýŽÍ›™o²74sÜKq/i÷E«Ù³K]†_ýz î¼_q¿,ÍæJs%TÍU¹«Ü „Zí­öVÈjÊjÊj2âëLëLëLÐPÓPÓPcÄ/Í^š½4 Ó6¦mL3â™Õ»3vƒ}ëÅ·/¾ 0_?_W¢~‰úE]6©j÷·îoïv‰Üî¸Ý!rûÌÀ¾}|ß°oX¼Ž8ì»H|v|v|¶ˆ¬’U²JĪ¬ÊªD¢|Q¾(ŸHƵŒk×Dl«m«m«E6ÜÙpgÑíeÛ˶—‰¤YÓ¬iV‘(‹ "Yk[Ö¶ˆ·¨´°­°EZKZKD-ö,÷,¿Û%Ô†N%+V€çÅà)™Ü9–3–:<A•ŒÁ|õ|õ|5ºÝn˜,˜,˜,-Z‹Ö¢A=UOÕS˜¶MÛ¦m ¼Ê«¼ Òi‡`*mjÅÔ ”–êñާ’å)å)ºáží¬ác ûJÈgúPœçK¾õOÕ¦Ú€ \ààaŽ9P£jX Cè•­@ €Ouøgü3Àßtç//¼¿uþç÷_ùÜÞ.žÛûØóyƒý>Íý«s®¨tIEND®B`‚routino-3.2/web/www/routino/icons/limit-20.6.png 644 233 144 3063 13061246472 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜèIDATHÇÍ–íOTgÆï™*Ì5 ‰]‹±,-ܵ¼˜òRQZj-Mqc‘¨•†6Q©”ôC#MÉ*šB#»±k+jlƒMŒˆ¶…H‹# »@F: +Ì™óüöÃÌéaûx¾œ\÷ËuÝ'çy®ç‘çýoëJëJkˆ[÷˜q[¦-sÍß|ø¤,;,;z?„ÐOC?XÚ¸´Q¿gb#oÔ/ì1ùêqy^Ì@àùÀó–T?> ïŽg óáš`¿`¿0£AáÅ‹-Ÿ·|ÎûðàÖƒ[®TW*˜ØÈõF¿Á·_ŽþF__Y|Å2"ùzäëQ%¾‚(xë·Þ}nô9eïc ˜`• ¸qc< °‘÷×ýŸÁoèú¾y–¿¶ü5x{çÛ;íŸùî5CEDE„¡ç¹|ÄGƒæÖÜÞ]Þ]̺¡n`Á&6òF½Ñoðü†ž¡ï›Çü•³""µÓŸÓz€§Cò¬ö¬}B³h<þI•úƒŠSq hÃÚ0¨RUªJ1Ÿq~æç_‘RÚAí íŽ'ĺÛÇ9sO }ãW~#"òûOÀ݋Ô|Gp€,P›Ô&fù;-´€Ú¨6ª@1Å/d [Ød’Iæ‚ø*V± Ô¤r)€ÊU¹Ìò¥Ÿÿ}¿ž_Ÿ~ß<‘“í„í.Úm°éñw»Ë»ËáÄñ5'jP={{ŠzŠL½ûU÷«îWA½¥ÞRo!÷{È\kèUz•^eâÁíƒo¾ µWj/Õ^Buçvvtv˜zj¨(¾(˜òÍ#Þ;""wÊ¡õƒÖ óÀ`â`¢*þ½Þ^Ï\ÚDÚHÚ¬q­q­qAÛ©¶Sm§ ±6±6±b«c«c«!z.z.z¦ÎN:k4<< Iד®']‡mÿÞöÓ¶Ÿ ùá«¿ú1sÃtG»£U´¼Øò"è¾yÄûÏ ÓA§Õy˜ýaöøÇ…K__ú>¬®ÜQ¹ÃHéJéJé‚”º”º”:È:’u$눙OHH€Fk£µÑjÆ›§›§›§!<><><òBòy84s°í`ÌüÉSé©?>~ˆqËé€uëD~Üw¯ü^¹,ÏøsÆ;ïˆä½’÷rÞË"57knÖ܉(Ž(Ž(¿=~{ü¶ˆ3Èä    Yº6tm¨ˆw¿w¿w¿È’Ü%¹KrE±ŽXG¬ÈžÈ=‘{"EÂn†5…5‰8Ë¡ÎPY.B %"¬öÞõÞµô‰¶ÌXc_%~•ñ~ÑùE§*XÜbÝnÝÎ܆Í6$€£ÛÑíè†Ö†Ö†Ö(É.É.ÉÛ2Û2Û28ä<ä<ä„©Þ©Þ©^Xß·¾o}¸®º®º®BþÖü­ù[Án³)›‚Ý»òô<9í€*€s¿œûˆó¯1jü»’½e{Ëà¿a¾]òhÛXÒX8¯;œ¨±“cucuðôØÓcO¥”R “‡'O•¯òU>¨d•¬’a²|²|²ÔŒšQ3 ïÓ÷éû`"fbÅÄ ”=?4?dîJþUüRñK†ážl÷¬éc`øŠßgö§zm9…9… š}ά¾÷{ƒAÓ¦µi<|F](¾£vPß©oÕ·À5®q ˜ñ•jD ªAð’âK¯×ëÅ£Ú5—æþj8ÿ»‹Þ]ÌÿÖùŸÝ³ò™½]<³÷±góû?ì1!Fhó_aIEND®B`‚routino-3.2/web/www/routino/icons/limit-19.7.png 644 233 144 2775 13061246472 14700 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܲIDATHÇÍ–ïOTgÇÏÜ¡ƒ“ð£a‰IÂvƒ‡Kƒ1 B…ÐØbi µ‘º]^ˆ}S[’ŠÑ&ÛHºÊ4Y»IHX$`P7ŠÉ†­³mm‹®C€«2™¸;À½÷ùì‹™;3¶ÿ€Ï›ÉyÎ9ßï÷Þ3Ï÷>""òtôW@ËÖ²µ´H¬ý!¾¿¡zCõoû"ñ)l{l{þÝ韥àòº¼æt<¶òV}b¿H?‘ÏÚ—§%¾‘<˜·!3ÿy œçœçéðÎ…w. õ õp''V<¬€xlå­z«ßÂKÄ—~Á/O]zê’í'Hv$;D 祜—òE ~ȃW^~åe€;ö;v¥€RHQ@ˆÖZJˆ­|´Þê·ð,|‹ÏâèÈ(Ï(º†ºçéHÃt/~æð3ßú9àc>&ô0Þ4ÞdÔ˜À† ⱕ·ê­~ Ï·ø,þˆy|¶U„ê×ë×c‚&Ì߯'­'jÓô¬Œ2—M¿éý¾¬/ƒjQ-ª…_-5ªÂ*Œ2´µ¬µ,ÖýëÞu/è"øêŸ¯µ½Öf 쨊2$"²¥ œ3ΙPÌUÍUñµêoú’¾ÄcD•_ùcãX‚‚à°‹]ìJØ_e•ÕǤ橼^-ÌNÌN8CÎP()"lKWôM‡æ÷›ß5`º-˜±?yÆ<¨ù-óÏÎ?‡Ÿ L¦àÙæÙæÙósósós¿~c % % %àù—gÌ3Þ·¼G¼GP½sÝ×»¯Ãü–Ÿ?øÜtáÆC`¶EôÃ""ß¾Ç_Ï|ræ“ØS5 fœ>3̪ýïö~{?œ¯=_{¾üíþv;äççÃö†í ÛÀïÎwçÃý–û-÷Fz•«\Êv”í(Û;—vÞÞyä/""¬þcß7ߨ&¸è½èý=šhi­i­Å¥òÇr_¹O‡ˆˆí´üÇžnO—ä³Þø³ˆ³ÑÙèl¹Ö|­ùZ³HfQfQf‘ÈDÿDÿD¿ˆÃåp9\"Û‡7o–Ø*s—¹ËÜ"“ã“ã“ã"õ×ë}õ>‘·—›jšj$yW_ÉtÉ´í4ïkÅšHÒÍ´ö´öâRWª+ÕôÁÒÝ¥»`”ÇŽ=•ƒ•ƒ•ƒÐ3Ð3Ð3áÊpe¸ F F F &¯&¯&ŽGô¦ö¦ö¦&Ìrˆ!† Ðè tAÑ­¢[E·`úŠoÀ7·õj $P¬¹’]ɦ/I”yÁ¼`ó‰¦ïÑ÷H¡8äkùZ2¬'VwÕuGDûR»¢] g‡³ÃÙ"…Ç )=[z¶ô¬È”kÊ5åÉÉÍÉÍÉñ§ûÓýé"›‚›‚›‚"}—û.÷]Éôf~‘ù…HAgá§…ŸŠ¨*ÉÐzEcQDìæ°9lói¢…*C•ß%2:2:""¿áí¨®µ”ߤ¤¥¤‰ÈnÙ-»E\Ý®nW·H°5ØlñÔxj<5"M7›n6ÝÙzrëÉ­'EªgªgªgD¤Vj¥Vd2k2k2K¤nk]~]~lÒkŽò¹F¿ýND졪PÕ÷_%žÊ£ÍG‹Ö©4;ÍNî¾| _ _JpÎÕÎÕNðßóßóߋۄҔ¦4X>¸|pù ÐJ+­°R¶òüÊóο~æ~s?ðe”Ïl>Ò|Äò³Sãbù8‹¡$˜5f-«æ^soÜÇx7nPûÔ>µ/ÁŠT‘*Np‚ ÿ1GèÓJ6Ÿ­gùXþÀzüÒ@=_)"E|c`|Ö³b‹Ø"¶4Žp»¹ÝÜn ÄíŠvE»paÝuwÖÝ6<Øð`Ã`}Úú´õi~ŸÅÙ|¶žåcùY½Çóþwþ3ïñãü8?Þ·€íPl^l^lž²÷䵓×N^£O¹‡ÝÃîa˜Ä&0 }è4ßgóÙz–å¬÷Ì{ç#¦™ü?Àôý…%H»’v%튼Ø!9$‡|F“hM‚¬”*¥J) ¤()J  X‹bÑù¾8›ÏÖ³|,¿Pß4SCã¹F®‘±\,˺Ùs¥¹Â\![4°×é!zn¹aºxº }Ò]é.€iåSåS@1Ѝ´iÕ¡:Ú'uKÝ€Üà¹ë¹ Ðש™šáfÓÌ•æCæC²…Õg<Œú ý†þ•¿eLe¦ƒ¦ƒ4Þ9äüÞù=Æ|yÜÊÛÒQé(@† À ’žˆ–Ñ2À+xTYõî_ j?’×”·¥¯¤¯4×írªNc¦2Ó¦7h<ãÑøÄ]â.qWg9 ÔäÖl­ÙJó} &åFé˜tLWÁsûÝÛï@íüÚùp¡ùB3H‹¤Eø7Ö{©÷œ~þôó<›:6ù£r£4!MhîdMnͦšM4_ÛÙ>B£££Q9’5’5’å­€^Ȉc¿ÙvÍv ðö=D›¢Mz噕gô€gKÏ–êãF¡óÝÖk  å÷qdDŽDŒ‡ñ1ÐÃk«ÖV­­òÿ2Å¡vªÙмñyã°mï¶½úÜ]ßt}£j>ß|âoÄ߀ý;ûõó/}té#Ù² Àà·ß}û 8€'ãã}-õ¬!ÓiÈÔz,”ìà.r !?—Ƥ1BÉÞŸ½ŸBvöïì×ßa=a=zX!Ä•âJ!„§O<}BMˆM „É&Ù!a7‹nBꮟPC“¡ÉФµ<»_iNjujuj5îOqSÜ ÍhÅh7íÖ7ƒôƒôÉ8’3Ì<ÙÙúM)z©è%ýNg÷d÷@ÜŠ¸<¾ñ¯íóìóšìíH¶:-*-*- ÷á-¼…·H?ù*ëŠê ë uc_ïußëàIY•² ârâr ^©W@ݬnÖƒºËÝåð–á-X:,äÃ_þÂ> ûPε|Ðò¿Þ¥#Ÿ?÷ùsÚ ¸“Kæ’¹dé'", K*X—ÅýÂÔfjSžqþÞQåðkÖM3R'R'à…´ÒС3CÍãrºœzEäŠHxíÖk·ôê«:ZuÀª¨Ï¢>×b×bx&!J…@bIÂâ„Ūö³„Y¬c$"3"3"“ñ²xY¼lÐ.üõ/Ö½X§ì†®]T댺uðÀÎ}È}`2¤#¤ø.¾KÄ­×[¯@[x[¸¾Ë}Ÿc‘‘€z¢¹´¹ÔÔy]/¿<¬Nj€;„ÂŽ[½~ø ´Ø÷ Éâ1ñX_-[`-}õWß¡À•«W®rÔ©áSà@ýÜú¹Ü _4|§FO€ã¼ã¼n=·óoç@mbm" äö”ô”ø÷÷ìøÙ5g×`•ö„Vð|ÅT7››ÍÍþÍÉ @áïZm庹îåÇ9&Ã!|Ÿ ØÛ[“[“a×´»GÍWóõ@ðÀ£ó)ÝD½ûÇø ´˜û¥4`X3°ˆ 3ýhúQÞ¥íä›Âá€Õ¬¡Yˆ…XD“Ÿ5¤“tñMÒHI#! Ð%tíý³ö´bÙèÜoêÞ”^»R¦” JŒ€Ò&Ú`Ò7î檹Ý(]–.ûÊ–·Ô*{´hBt‰.ûÁ˜Â˜Â˜BBx3oæÍÜ9].ÜáûÜ(Üî ÷¹Öø}ñûâ÷bÈ3äòì5í¦›ÓÍéÊVPµªVÕ ì°Ã`£õo¬2_™¯Ì÷k±zQõ¢êE4C{Ë£Á80åõMa'͵=á‚Ü«¾)ÌlH6$;Ïùµk-µ–Ò  e£lô©Õ‡êC¿{Ñ‹^ÀÞÞÞK×išŒà#øˆÍ ’âûA|¡äñBµN»[¹­Ë×q6ÎÆÙØ=§ØÛííöv¿våv¹]n÷+÷QÌ£˜G1@‚+Á•àR~¥i±Ihšþ´„IÍ'½`ÀŸ‘'˜Kà×î 0¨ÓîÓÓÙè´9mN›ÖT.Fjmµ¶Z[ý׎x\<.ïõý% ÿ[P]ß8yêI€ÁÆlöi÷üÒî²ÕËV/[í×®}‰}‰} ê½qª—Ãåp9ËKËð£Au9ò_Ú“´»T¨*„оœS–S–SF&M'M'MË7µ£…Ak,i ¤ø®ÁT/”ü¬Ýƒþ²{Üvn;· Ù$›d«¿æçðsø9G8‘‹Wã&ã&ã& :…N¡“û«oáÆ “û¿™Qû–I2I¦ØÞŸËSžòàÚ¸6®ís½ã¿´Œ#(ïú_i ïqM+IEND®B`‚routino-3.2/web/www/routino/icons/limit-10.3.png 644 233 144 3021 13061246471 14643 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÆIDATHÇÍ–íO”WÆïyca°Ò!lÜ6£]S%X#Ñ 1jd;4HˆY°Ö„H¶"˜Mí¶ne³~¨‰èb6WãJÕH[®ìbÜD£‹Ø5‘š]‚1;òª0˜qRd˜çyÎo?Ì<Ì´çËä~»®{ÎsŸëy-õ+`}Óú¦57i[›ö/+[Vö«ËIûœ–€%0ü'XѶ¢ `å—+¿4FÓ¶7ó3ëEÒø™|¦_^“´ÃÙåì²øRöçPýNõ;Ëò“öŸûÁuÅuåG >¼úáU€ž¯z¾âL7ýÀsßs¤m3næ›õ&^&¾|þ3~pô9ú,apf9³DÀû®÷Ý·~—L{ *wWMÚ”ô ‡åbÄ0×l†mÆSùf½‰gâ›|&²O©§TöìÛ³ÏÕž,½Ÿ¾ñé&_â pŠSä€ÓbúúÄAõ«~,X m›q3߬7ñL|“ÏäOö#?ý¶-»ˆíMìM,5t×(M8PЂZ3¢Ôõ¶z´ m\uTUGI¯(3Ì,YÊx©åh9$´p›ð‚q7‰{C{CÀ|ŠéSÆDDÖ·‚+è Æìðh×£] P®¾ÖžkÏ™_¢ØD!…ÀV¶²5£?~ü@9å”gø›h¢ ¸ÍªX3Ï_’øä‡î†î¸b®XÌÎ@²ŸÔN»õÇêº`l2qûÿÚ©ÿêñ¿ß||3Íl ¶ÛàŒãŒãŒ±p,œž5Œ'ÆãIÚÝ5êõAKGK{K;êÁÿî—ß_úÆ&µxh÷¡ÝÀt²ᚈȃO8ßùEçK;_×åé¼Öy¸½Éþ‘ý#èšèšèšã°qØ8 ¢¢¢°ñÖÆ[oÁºøºøº8Dæ#ó‘ôþ2 Œ ¯9¯9¯ªY½²z%¬Šœ/8Oüß'‚Á U½ôúß“ýXÅšûYîgÅ%r¨t¤tD„,K»<³­°­gÞú¼â¼b·Çíq{Dú ú ú Dœ÷œ÷œ÷D†|C¾!Ÿˆ{Ò=éžé[Ý·ºoµ,­ÅúÅúÅz‘“ö“ö“v‘š÷j5‘_œ]usÕMq.æZæZ,í"¾Û¾Û"–ƒÙÃÙÃÅ%VyÏvÖv–"Ç)Ç)µMDD"¿±Vo«Þ&R4Q4Y4)²0°0°0 ¢ª‡ê¡HÎ`Î`Î`ºÜ`n07(²Ð¾Ð¾Ðžö^(¼PxA¤¶¡¶¡¶AärõåšË5"³Ã³/g_Џ³ÜîF‰ˆØ[ì-"rÌvÇv‡"«(ãªqÕ2"¢´€ˆd‰ˆˆÇf–fDzBOè"Þ!ïwHäéÚ§kŸ®™*™*™*ÏÏÏYc[c[cQÔu@äbïÅÞ‹½";7ïܼs³H¿Çßãñüçõî×»E†›†ó‡óÅ#b-³–‰Ð¦ûu¿e$5ü>Îhgô#ÉKH¼òוE•EÐQÙQÙQ™žý×÷_ß²³³¡iªiªi ævÌí˜Û[ô-úÂËÃËÃËÁÜÜÜ{Ü~·ü÷ýßÿ˜øËÓ&ß7áo ¢É~2Oå‰úÀ?ÌSiœ6NË­/ª^T¡âöcÁÈ8u­F«Ñ ‘‘ÈHdT­ªUµ ¶«íj;DFFe”QZ·Ö­uó¿=ëxÖÒÏ,V,V¤O%#õÞz¯)¸çî¤[ß ®i×tÌ!=¤/ñ—“0öû2tì÷á1#fdȃªSuªh † …ÔU³jPª‚ùÔeUÎÚÐ÷¡ï\QW4fçþOt,Cùµ*[•-­üäk!-œÐÃz8­ü\á[¾õ@ ªAà7¸ü˜¼+Õ¸Sc@<•Z¤?"¡þ©ý ýœ7•¿Ê^eâ?WþW÷®|e_¯ì{ìÕ|Áþ²Ë‘­Ã$IEND®B`‚routino-3.2/web/www/routino/icons/limit-15.5.png 644 233 144 3030 13061246472 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÍIDATHÇÍVÿOg~î``$2Fq`Ç$CÁ‰)µ «eJÈL6ºÄ–ÍdÌéâÌ21Ùh0H6Éê²:§ÙÀ@ÓvC4Q3+¸9Sù&‹GÅöz÷>û¡=®Û_àûËåóå}žçî“÷¹$ ;ñ)Ê…rf<–›Íü²ÍË6¯þ.ŸÔHÉ)9û˜ÌêÊê"É}+úôßÍØ¨ýÉû?™ÏÈ#f"ý‡ô$[">L¾]úvé²Üxü¥Ÿ´œ³œ ÇÈwÏ¿{ž$üæÇo¸— ] ]%ÉyÛ¼4c£nôû ¼d|þ?@>óË3¿H“dzZz@®zmÕkÅïÇ&ŠÉ7ßxó ’ü;åï!“$©ÍÌ`†°‘T¨ÐX³I±QOôû <ßà3øãz@®¬^Y u;ëvZNÅ7üÞO¶´|ê9’Gy”dL‰)$©5jŒÂ/ü$I‰iÆFÝè7öx¾ÁgðÇõ࿳=^Ce»º]]tE¯R%U"Å×±p,L£"´ýÚ^m/©•hk´5¤Ö¬5kÍ$?ãa¦¹†¸À í“hW´‹ªV¢¶©m¤VÇçñíŽíCàñs” ¼ôiùÃò‡’JŽ×Œ×ÚIr«8[ˆ-ðñQ€C"9ÍiN' $uêÔ“ò·x‹·’ûű†)âødðJð IZ‹¢¤Æ…½ôUâK -´|@Š!’Ô_6pýëý›ý›)&ë'“N“ϻڻڻšt×»ëÝõd¯«×Õë"¿âWüfŸêU½ª—<»çlãÙFÒ]ïÞïÞOÑ»³{k÷VR™5øÚ*Û*Iá‹ë‘1ë. ×škͤÖzsÏ žDÔ^iÁþ¤Gn|~ãs@ë×úµ~ ÕÙêluÇü¿ÃïÂwÂwÂw°´æææ€}·ö톻†]üöÀB`ÑÇß«Mj“´°l߯õ¤BÎü0óò ¼W=Z= 0 ¤Sˆ¤d¥d9sŽä,k-å–r`Ä:b±J³Ò¬4hG;Úm%ÛJ¶•ùî|w¾Û6âqŒ8%_ÉWò´£À¶Uoͼ5ƒôçûÒié‡Öÿ³þ@ú(³'³§¬äŠå+–ë£äìýÙû¤V½tìI’›|›|›|¤Çéqzœä؃±cÈ]ÇvÛuŒìóöyû¼d^w^w^79P1P1PaŽÒ×éëôu’{l{l{lÉýÏ}úܧäÅw†¯_ç,©¾¢¾Bj7—ÿ¹üO}T†ÐÏëç¥Q æŒ9¤Vo,þ“bY‘  CA (R)Š»]»]»]@áíÂÛ…·©©©©©)€•¬d%po˽-÷¶Å׊¯_3û DÁDÁ0›5çób% òD€6½@/FeÈŠ]±ß|C¾!/›º¢iÌ À6°(­-­-­úOôŸè?d×f×f×ö2{™½ pXV‡¨*¯*¯*ŠÆ‹Æ‹ÆÏÏÏ »6»*» °æo\ظ€hcëŽ/v|Á&à§WzHyv1}1ýæHò©ìhé ù³qJôN½“|´ñQãŠ'—Ÿ\|rÑQd1²Y$gäyF&Å]qWÜ%ÅiqZœ&çÖÍ­›[GÒC=dt0:$gäéðt˜B¼ˉåhú˼ßRÖRføÙÉ ß -!KHI%ƒZP[âßJE¯ÓëLGÅ!qˆ=¢Gô$ÙX—è]$7p7$å‰ÑAŠqA\ IQ*JùX|À=8œ IËCËC%•wþãcIÎs¥¸RLçgn, ’ìÐ&µIÓùÙÊ&6‘Ⲹ$.‘Jo8þ¯‰ 1A2’èo×~Õ~¥*.ÇB±1õ ™à‹þßùŸÞåS{»xjïcOç ö_9ü¦M–¸ÇIEND®B`‚routino-3.2/web/www/routino/icons/limit-111.png 644 233 144 2173 13061246470 14572 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü0IDATHÇÍVKhTgþîLn&Cb^d袊nJ‡”VÈtÒ™i& >¢b" âÆV„4])¸Q4‚«&B±©ÙDÔRI æ±+âL‰D›…‹Òè8’BZbæ’&÷ñ]ÜùçNMì.g3œóï|瞟ÿÌPžýéÚçÚç*µ}×7N¼èPÑ¡~±ý;&©œTNþq…,»]v›$+îVܵ¦_â2?Ÿ8õóõdåpžÏ€ÎúäéšÓ5E>Ûÿ>Fz‡½Ã«yþñùÇ$ùèÞ£{ü–\|¶øŒ$—ÃËaÒñ%.ó%_Ö˯Πú©Ž«ãÊé)ôäþÆýÕßÙ 3ÕdÓ‘¦#$™p'ÜÂE’¤¹D²„%"LR£FiçùÏæK¾¬'ëK=©o÷²*TÈ­'Z½}6aúgòÒÞK{¥ž>Lò&o²„44C#IóŒy†RÄDŒ$©P!_â2_òe=Y_êI}»¬?Û®Ù\Ô\D2I’úi•Ye¤Ò訋bP RpƒY!+d…HqCtŠÎ(…Ã7sþ–÷­÷­V@Æ­¸•+xØœÓëô:¦Äx%^åKQPæœ9gΑbH ‰¡-ñisšÃ".â$iÝ·î3•=îÃdÜŒ›$é]ô.j²Ÿlcw~#/\½p5÷ýŸ‰¨>¦92±žØ­Ø-r¾r¾r¾rÓDë‰õÄz¶Å%¿f¾Æ™¸øÕÖsôí~\öÜ#ø=X¬ð#(” »Î]‡µÁ÷ îID–"KÀäÔäÔärÖßÖßÖßD‘D$± þa¤:R <<¯x^% ¯‰+¶¼¼(YPú´ôéç_`5t€ÒÇ".pü…¬¾n_·¯à,g9ë+)%¥¤ÞïõõúzÑ ŽŠ£9؃*[5„Ù p7¹›èÇW…«…«9Â?âKžã9 ÅÕânqþZ­¿HGÓÑtÔnmm}\ók~ H/§ß¥ß98R¶ Ž¨#€ìÇX£Ö¨ò'„qÌ8–K¯‚Š7xãð….t¡˜Á f°ÉvÄMa @¯ñ:°²z0ŽÇÙO …µðËpEW¢+Z€6´_ã¡ UùI޼¸£¸£¸P ÕPÍÂ;âíÅíÅí€j¨I5™ ¯áS`;}}¢ôZ¹VþòÅÞJŽ‡Î­LÖ'É™ñd<Ïæ[—¬OÖ'ë·Å%¿:SMAZ]Vɱ­o¥³Çr{Dî¹g¬³ÖY¦ò42Ìðÿ؆üuõvÚc[l~]n~{Òg^6/Sçup`óæ§>úH^ç5^Û„ ‡o6š2¬OÐhv7»å¤Ömþ]û_¹k_rr»î=`¾`ÿC÷Mc·þ!>IEND®B`‚routino-3.2/web/www/routino/icons/limit-12.6.png 644 233 144 3025 13061246472 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÊIDATHÇÍ–mLTWÇŸy)ÌðN«²mf«I# šhcØò!UÚtk†Ôn„5V4Ö_ºí‡ò“nSÖbš†è†Æ-ø•¡+£›˜AdS¢.ÅÒ@y3tDím™H˜™{ïùí‡á2´É~÷|¹ùŸçyþÿÿ=÷œçÉš Ø_´¿hψcû®Ä¼ëu×ë«Úâø„¶m¶m÷>†Ì/3¿ÈnÉn1¿O`+nå/®Ið/Ö³æ%KÉ’/ØJçq=¼“ÿN¾kiÿ-îËîËOuxÏÿžàÒéK§ÙS·¦n„JC¥ÀVÜÊ·ê-¾ÅüRÿ}xîÊsWlœ”œ$ÞroùÊýñ„‘•ðÖo½ð£ãG‡²€ñFš*„±†¶[ñù|«Þâ³ø-=K?îGÀSâ)·ß}û]÷©xÁ÷ÿ€#/yÁÒ‹]>áÒ@ëac‡±ƒ¨€ `à lÅ­|«Þâ³ø-=K?îG~ým•öÅ|±C=fqÌs‚úX×DZ"Êü¯ùù èú¸>æœ9gΑ?$¸€”Ú©¤DL¿ˈe€Žóƒï¡ï!0=¯¿ð)Ã""¹_€{È=vÂe?”1@…úJ×tÙMU¨§žúEFŽr”£ fÔŒšY4ŸC9 ~V!PÛÕvféˆó³o¸g¸Àv‡ÃN†ã~æWêD7Ô~Pû¨ëfÅø4ÐhByƲƲzý½ý½ý½p¼ñxãñF¸6pmàZ"núLŸéKàÑ?޾9ú&»rìëc_£înïëéëYÈ.P» v¿Äý]""wó÷ö†ö†…uÙyÁÓÞÕÞEıÅQä(‚ÎÒÎÒÎRKKKw¡»Ð]e«ÊV•­¯ÏëóúànîÝÜ»¹ Cš¡š…7 oÞ€­ã[¿Ûúüáá¦Ï6}FäþŸÂ«Ã«ÕN¸ôÒ¥—ÀÔâ~ìbÏø0ãÃu¯Êî’Á’A’DDl§ä±#Ó‘)ÉžlOŽ'GÄ‘çÈsä‰LVOVOV‹h=Ðz UäúèõÑë£"©ËR—¥.¹Ýp»ávƒ,Œ«=W{®öˆŒ98rPÄSàÙäÙ$òZzñºâu’ìYîªtUÚN‰¾_ø¾ˆ½(ýqúãu¯ d§g§›ƒ µ % Ç€òåË7ÂÉ¡“C'‡+¨ Ôê }þúüõP£×è5:ÄÚbm±¶DÞ™Ž3g: ÏÌ3óLh¾ß|¿ù>üîVŽ?Çÿîï.ê.BƒèÊèJ0]Ïg2!x1x1x¦²¦²¦²`öæìÍÙ›J ¥„R@µ¨Õæ^s¯¹´’üå§_~âçdèFèI{†=¤õ¼^¯÷ë|©üøú5}€Lû-í7Ó ™‘ž‘¹¥¹¥3¿HôÍ$Ë——/'Ég–ga&IR}NÒN»ðŒ2J}…S°žOÖëý:ŸÎ¯ëéú ? åb¹ ?Z÷Ñ:éx¢áá)rgÎÎ]/ÞBr÷ÑN*Q%J’ê'ê'#E»h'Išh" ¬çõz½_çÓùu=]?áÿ·õ%Œ®Ž¯ŽOêЊãiñ4RìT*©g„¨+ÅJRéVº”.RÓ4MÓh¬— 3<„öW<3®<‰çÄsHMMð“«Ÿ®~J2šÔŸx•Q˜s”I¢V2X,!Õ>’䇢Yy¡¼àÈ„Ä;Ìf6)"""")FÎó<Ï“ÜÈÜh„ELÄDŒä7ü–ß’¤(Åa}‚ŸÎ@G ƒ$¥¨Zy=á'ù¤Ž^'këjëHq…$µ<¸ýûöSí§(ú/õ_ì¿höe÷e÷e“õþz½Ÿ¼Sy§òN¥‘×îk÷µûîù¡§¡§Üw÷þnŠûùwOÞ=9Q'îlÍÝšKòUÂè€î/ùCówÍßMÜç&¯ÜìoösÌÚh=b=Bzk¼5ÞCh±i±i±‰\6°l`ÙY)ˆDÈÇ­[·u­K[—¶.%åB¹P.$×—­/Z_Dæü>õÓ©Ÿr¬+·¸Xl"/Ì¿0ŸTÿNø1ܵ+kׂEØZü øÀt0Çe²e22“‡°_³_³_.k—µË¬ Öë9OΓó€BG¡£ÐÈMr“Ü„‰¥Õh5Z •ÎJg²me;ÊvSoN>ý92bÅáÝáݦã€'Ï“˜<¶-´`‘e–K]@Ú¾´}€p"•æ*w•põ»\@ÌóÅ|€8#Έ3€Ü-wËÝ@ѽ¢{E÷€¦[M·šnó:çuÎ3Œ…=aOØ8á„À‰%'JN”Ãÿ;‡ÀÛ8f;f#˜?3à¬eÔ2J—Bói>Ó@Y¥¬ub6ñ$O"$B"Ø+ìö À¶Á¶Á¶Ø’»%wK.0¥aJÔ`pÅàŠÁ†±Ó¥§KO—î˜;æŽWmWmWm@ú®ôŠô  ëÚíêÛÕë#ë#€KÕ1uÌôÀ stItIO'Ðv¥í €YÀÍIÞñ¬´,-KF‚#Á‘ P H0Ë=Ë=Ë LÊœ”9)ÈäGò#@ùöòíåÛ÷1÷1÷1`oåÞʽ•@ÇxÇxÇ8àøÑqÈqX$òùŒW/«vV;¹ðµûÚËhÌsõt¦îÊ=µ{HþªïJí€v€|Yøòã—SŒ> ŽZõª^ÕK†ç†ç†ç’Z£Ö¨5’¢WôŠ^2⊸".’~úé'ǶmÛFý3Ô;ÔK!fÇãƒÆ®ä“ZW­K¸G¯'Í9HJ!)µ’5 NèÈqm­¶6eŽm`«Ha6aK™WÓÄ41äB.䔸ñ¾xŸ-⦸I’b¾˜Ï‘™äŸ‚$)½^D­ìúßK™üÊË‹1ùéTJ€äuP4&?O³‘¤¸.ÚDÉs<Çs$GøŠ¯HñDô‰>’±d}­zI½Ä¸hS†”!’-úäOê¿>ùßÜå{ºxcÏcoæ ö?ô•¾ŒÝOÔIEND®B`‚routino-3.2/web/www/routino/icons/limit-8.5.png 644 233 144 2660 13061246471 14604 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜeIDATHÇÍ–]L”gÇÿ3†A#tÄ€ÉWö¦lmÒUÒ U¤Ê¥Í@h°i´¶6+‰ËMkÒµÍ^ÀÍV›Fc‘dã˜4jêl—Ä.2Jùhü J3Ù¦+ÛêÑI3@‘yßy~{1ó2³Ûî½ÏÍ›sžsÎïÿæyÏy$©$ó¸×¸×¸W¤m÷°¡°á·'Óö§6¸^q½2qŠxºïé¾ÔdÖvöøÜ|)[?—çøU¢¬Ãó¹çsW]ÆþÚŸk®pUÚîïYïÙ9 Þúâ­/ÎôŸéç]¸?| ^¯ƒ¬íì;ñN¾S/·¾>ø¾ù_æéúx <¬Ý¶v[ÅÒÿ¬€–¦–&€ò~È3n°ËYnê€ œ5“c;û™x'ß©çÔwx?­GPº¥t‹­­ÞÏÒ “…n·ßá%ÏñËÁJX »Óîä1˜!3€ dmg߉wòzN}‡çðÓzôßgÛû&X,’É«`o©­mÖ6’Ö”]daLq¿\C 2öAû=û=°Ÿ±_µ_ÅØ»¿^üš$¶›ì¦¥¾ÊbÐt9{_Ê9JIzæ/à½ï½ŸxŠùh"š=šFcٯٯ1ÏŸ8Ù½ôÒ øðáËñ0Â0Í4Ó `œ€Ôë©×™wêCÔŽÚ°ÄÏèÉû4ï¼ÿÎûÀ#€Ôóä'’ K8sãèo| =7{nöÜ„Ûoo¼½1GI °Ú­v«Nï:½ëô.8Òv¤íH k>Ö ³kf_˜}fÒLMžÃÏèÉ»öGýú RéïdW÷øüäùkç¯Aimimi-ììì€ÿŠÿŠÿ Œïß7¾/«/¶5¶5¶Ê7”o(ß­×[¯·^‡ÎþÎþÎ~ˆÝ‰}ûf)ü±¹êðÒ|G[Z1¸bð÷ÕÒ–ú-õ¶$¹>Ëœ´'5”KIÞ~o¿·_ ì ì ì‘V¯_=.Í…çÂsa-­Ñ{£÷FïI‰†DC¢AR·ºÕ-555Iå¿+¯*¯’0Ìy\e/Íwô<%åµäµð¬”ÿmþ·.¹vK’ªO’Tú¨ìQù£ri•w•w•W:Q¢þD½Ä#ñˆ´òÂÊ +/d…ùÚ|m¾6©c¸c¸cXÚ´wÓÞM{¥®™®™®©8\.K–À‡%“Ÿæ¹­üsùçT*åUæUò¬[J…Sa×ÉzÙzYâ»´ tjå)ß)ŸT³¾f}ÍzéÒ²KË.-“<žFO£4vqìâØE‰Câ4U=U=U-UŒTŒTŒH;ƒ;ƒ;ƒ’ßøßH3¿™Y;³6û"ìwxi¾£Ç-%êu7ƤË_]þJrß”$ÞÌä-öÜêí•ïÞ¼+ùŽûŽûŽK5e5e5eRcecec¥T©ÔF¤uë&ÖMH¡ý¡ý¡ýRÉö’í%Û¥ÍþÍþÍ~©³¨ÓÕé’$ó¢yQ‹yI‡—æ/éùEW’é’¿Y'­“Ùž[˜_ˆ/Äa:6›Žé3}¦LØ„MV=¬zX„‚ÅÅÅxà~à~àó¶yü‘ÓÃÿ¶îXwrx¿Þ•9s,Gã9s¬ÚúÄú„ysÖDM4g:™"SøñãÏñ4ÍA0GÍQs4ÇØ šA `‡ìPÎ[ŒÎGçÿïË™ü=A`/Mþ {ØiGìIsÙL›i œã0Ç,³`¦Ì”™ó3?ÝtÑæ&fbþž*K•‘û–}+·~°0Xø«“ÿ‰ýW>±·‹'ö>ödÞ`ÿJA’²„nSaIEND®B`‚routino-3.2/web/www/routino/icons/marker-70-red.png 644 233 144 4141 13061246466 15433 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜIDATXí—LTWÇÏû1òCt”Ö€2HŒëo‚5ë¯ddÄÑDš¨T°•˜šnÌÂHGbcJlUÒj´„%iÈ0ƒÙ†®V «–VkÜtšØ:3ÕÙjE~èÀ̼7ï»ÌÜ÷ÞLv5›Ýósν÷œÏ»ç{ï DQ›BqƯJr&9“œÜ‹X mBׄ® ]k–‹²(‹ò­VZL‹i1VšH$‘Dæñ¾ÒÄæ³õ,Ë__ϣ糒•¬¼#~–?¾Þ¬Ï^ÎG¦I¼÷ñ>ïE– ÿZþµükÒ wØv‡áFÌ”\%WÉ…$×Éur /‘—ÈKÙ"[d‹Î³ùl=ËÇò«ÀqõM“T4ÎÁ98‘x@< hÿ‘-07™÷š÷J¬6²,² #Rû¸}Ü(^)OÊŠ‚² "Š]±C³Päqä1 xÃ7Ã7©=ø[ð7@©UJ”Œ°iæ&sƒ¹A²°úŒ‡ñ‘á¾á¾áþÚ?² ¦zÓAÓAe¶ç‰ç–ç†byFäÃÑ‚ª@Òö@@ï*VÅ hD# !EM>hÙx냷ˆˆÞ®}»–ˆ(§-§ˆ(p=pˆ5¨!"šÔ4©I¿NôŠ^" ÅÜ_C7C7‰ø³QXTð{ý^¿—ÜŒx oá-áDZ-nj³¶YÛ¬: $‡&†&êšüúÂ× ¥.¥ÜÍîf}ׯìcvH­I­€OŸ:ô*ü=õ÷T­õòçaça­Þ·G/ _V_À?sy\—~LÂRa©°to#;eÙ9Ù9Ù9ò,ÏfÏfÏfíúPV³ŸoV½Y@É?ž<Îêýµ¥kK`EΊ½úV¬°.ٗ쀇ÓNG0yŸ¼X´wÁw"ê dBÆé!J+N+N+&¯ŠWÅ«vŸzáo,*/*—kXþˆí…õ…A8Ó2Ò2Ý>t[¶…mzÿÖ•[W Í—æ02Í=Í `ˆŸÉÏ"§ëkêk °Ù•7Þùê¯"p‡°CØñ²¨Ÿâ§xË:aÈ3äò¼e luµ}µ}Ú~JS[Ï·ž‡x×{×Cw‘+—•Ë ÜVô|ðɃO %Üäm}?õý¤íoÇhÇŽX§>¡|#ß8¾†›ÎMç¦/hInªçk+·•ÛZtгsvÎδù‹³ÇÙàl€SÕn|^>¯Jx™å˜r @ìeRV+uJ&%ŸÝ÷šï5 ;Ùôƒé©JÝÉ……mfÍB²ˆ&µ€ ¨@ü˜ä ‘à<‚çý³,锉7ñ’ѳçÞü{óõÚU–+Ëõ€Ç8 B;##¥,üsøgÙ´òrk¹U®Q_ çâ 8èÜŸYYYMÄ›y3oæÎÄè¶1̉±¿eÂ=ážp;7{÷ìݳw* •†Jç~U»æs^»[Ć œp àžá™Æ-Ï•çÊs5-6/k^Ö¼LYÍòŒ£Áèú¦äøNsÝ ­'.Áý.Þ7%Gµë9£i×Vg«Ói×(%£yyy¤iÑ\€3Å•âJq)¥ª&Óø4>m˾)žHàK¢—„æí–þíö8{4íJ=RÔ£)w,s,s,X8¼pxá°‹Þl«o«o«§¶ÚàÚàÚ`1}0v0v0öƒ£ ?…ŸÂo¹“°CØ!ìX•G“hMz”@@@À¬ &L˜PzÔû(¹R®”+­ÿ—uÜ:nŸ»Þÿuÿ×ý_ç#6íÞ´{Ónî¼»ÉÝän‚?¦c:¦ƒ§4‚CºÐÀ.p0ŠQŒB‚ÒMºI7x<Ã3<gt5º]ñðû¯¿ÿúû¯ù„‡uëÖqR¹T.•ÿZÉoà7ð^‹Çkx ¯=aäMò&y ™%™%™õù¿Í•æJsåÜõþoù¿åÿÿfRbRbR"×èö‘ÛGna:ßÀ7𠀘)fŠ™àÐŽv´o’:RGê2HÉ @êI=©ŸÊ0' B à¶Ùm³ÛfLwÄwè9ô<>’U•U•Uµn™µÉÚdmªlrqq¡»zwõîê%MîgÜϸŸ3i ¸1 ,°Až `rÏžŸ¾MoÓÛ %¡$ 4ƒf$‡ä˜Œ[[[!xxxÑ0“Ò¤4)‰V& “†­ch0 ¦Áß±EÙ¢lQ@tstst3VÛ¥vב»#wGî-¦S‹ ¸7voìÞÐZÐZÐZÜϸŸq?ç‰óÄy/€K!… ËÈ2² ОממŒ»»»§V¹:ôúÃð|À+»TÏTÏTÏpxQÔ¢¨EQ$ H@Â(î+î+î+€¢éEÓ‹¦×Þ¸öƵ7€Ëï\~çò;ÀÕ¢«EW‹Û"Û"Û¢@­°Â ÜÛ~oû½í@ž%Ï’gtjZ§~a]<â©CßÁãàã,C–!˾U¯S¯S¯C†¼AÞ o€YÈr…\(X°`<==ê_Õ¿ª¶ÜÙrgËÀÖeë²uŠDE¢"SÄ1å¹¾~‹~‹~ p-ôZèµPÀy¹órçå[ÇÖ±uÏ× ¯¯¯€“,ÿXþ1̾‘¾‘¾‘ÈhjjBƒÏð>#ÁÌ%æsiê>8pà^ðØMz“Þ:b;b;bCßúæÐ7À±˜c1Çb€¶ž¶ž¶€ñe|_À²Ö²Ö²¸`¼`¼`ÔRµT-œO;Ÿv> ؤ6©MúBFûÑþçú̇̇̇ P€̰^¬ëE/›ÂMá¦p<à#ùH>,ÃÆ°1 SO%D Q@È©S!§€ø‰ø‰ø `öŠÙ+f¯Î¦M;› 1üÅð@å…Ê •€ªª* î`ÜÁ¸ƒ€uuu ¹,¹,¹üœ“üH~$?Né±cÍcÍcÍxÀø3þŒ?½Ì®i]Óº¦uM¿g¿g¿'sΣ֣֣–¬ôží=Û{6Æy-¯åµl ذ XªZªZªfæÍÌ›™555·~¾õó­Ÿz•^¥WÛÅ·‹oœ ç¹]ïu½×õ`¨6Tª^u¯ºW ¨’Uɪd`FÓŒ¦M y y ¤vFíŒÚø»Ì]æ.sçslÂ&lÊ<Éi8 §!595959‚¿©ÂTaª€B ƒÄ ˜Ž÷ï=Þ 4nkÜÖ¸íy&ZÍ­æV3 l6 ¹gçž{X’²$eI  4( J |*|*| °®¬+ë ``Àô0=L,öpŠòÎòÎòN1‚h‰–hñO"§¤Ì¬ë³®Ïº~h¿4Z->÷d¨n¨n¨Ž}xÉpÉpÉ ¤IE©(á111Kyzyzy:p𗃿ü(S–)Ë”@äÞȽ‘{àˆàˆà Î=Î=ÎH¬N¬N¬RRRÑßFý ˆÖDk¢5 º@] ²+%WJ®”ˆækµÇÊ4J¿”~)ýò^¼MgÓÙté6ràñǸ…[¸õÒq‰^¢—èoÈGKFKFKæ&ÅœŽ9sšÆ¬÷Yï³Þ‡\Zñ´âihí£}䥾—ú^ê<“<“<“,ÅR,ıF¬È#òˆ<Äíâvq;Ð6Ü6Ü6 Ì»;ïî¼»0ë4:NƒÍgLgLgL¨PQQ™ˆ¥,e)ºó1óÛÿÊ1'™“ÌI¶ Õ¨FõÓ01L ÃvœP´(Z-?áÆ¾ûnì£ |<}<}<ÉÅEG]t¼yó>I%©$ÀlÌÆle(CÀx0ŒTP,˲, ,y¼äñ’Ç0(F# ¸–Ê eÞ_: p˜¬|ûE¬Ã:¬kÿ+Í¥¹4—ó±·yBØdßÈ$'È râz ΄3á饸Ÿãs櫊֊֊V>Ùèdt2:MšÄF±Ql …Z!AÈ %¶Íhž²´Ã‹®+.V\Ò …†BC!w\ê-õ–z_Ì:t8èðÑŸ‰Ld’¡ÝèæW±QQQQQQpÆ0†1,ª&k19´àÛß.øöãŒç3¦XS¬)vqeÿÆþý…´ÐðÐðÐp&¥(E),DI”D J(¡à'8tC瀒ÒCzÀ5h´ ZS›^›^›Î\Pú*}•¾O&lƒ¶AÛ`ü[   &žÔRCvÚl¯£q6ÛçK¢‹è"ºÀ­¥§¥§¥°¦ZS­©{9«œUΪG—:Ë;Ë;ËÙܪw«Þ­z—Æ’BR ÏŠgų C9@‡é0OxÂc|@; ÐâbõâêÅÕ‹áæ¬wÖ;ë1\ Ã÷bŽ0G˜#O&ìV²'O AúWõ¯ê_e»œ;-vZœ»|ò¥IoóÅ|1Ÿ;tÐñÿå°Hvvvvv6LŽŒÂ~bÊCvï¦Ù½{œä‘<’wýÍD3Ñé¥HB’˜¯Êmå¶rŸl,4 ¡`†a ;2Q3^3^3.šŸä?É’Ïv9íwÚï´ÿþ–§–§–§ûv­íZÛµ°ú;¾§@ßèï€ öÿƒT¤"•\U—¨KÔ%¹qN»œv9íº˜mð2x¼8ãÍÍfïèÝÚ¦µMk›†3õMõMõM$AÑ¡èPt¢¿è/úï¹Á½Ï½Ï½?Æ ÙõþbŸÇÏÅâ†ý%ãí‡mTJ¥TJ>Ò¿¬Yÿ2þ[˜#ÌæÜäe²YÀ|Õ¿ªUÿªi%Ævc»±þ£¥¨¥¨¥HX1jµÚØTÉJÉJÉÊ}h!-¤…~˜l¸Ù‡Â†DoÇØÅÿž‡àOÆx7 U¨B•IKi)-êfŠ™b¦øç€‰·'Þžx[|Y’/É—ä3íl›Ä&ÕÖ¯‰Òvk»µÝäGq¦8SœIOÙã–ÛÍÄÁàOÆï¼ëf÷n&R‚îI$‰$ñß´ŠVѪ}[å¾r_¹/ÓÎêX«{ê+æˆ9bNrOG|G|G<0 ˆ{†ñ…àf2HA(ʈ˜BÍÃ<46it’{îùu1sæÞ´]æn.ßëÿÿßsÎ÷Ý#@!„;óà\ã\ã\™¶G,Þμ•?¦íË{{;… /]/ºn¾°l×ùöz!,|;Ÿö ·°¹·ro9ê2v4ojÞ”W’¶¿A~8?ü—m‘¶ÀÝÐÝßÀØÓ±§ïëÞ×eë¸Î×õÏŽ/ºþÅ/,¸ü¡ãwÈÍÉÍÖÕ¯«¯8‘N®€Æ]»Þ,{³L9@N¨:`–Yô3e³u<“¯ë5žÆ×|š?­G@±§Ø#øøä÷¤ ^ôCgyg¹æ[ ÝtSƬ1 [d )P1À,[Çu¾®×x_óiþ´ñϽ=ï…¦¼¦¼¬ Aqþ4÷™ûXÌ”ªRkÕZ0ëLéÉ®²]ž’§@VËJY òˆ¼ / 8''ä‹ “2 ¤4¾æÓüÂ.¨úÈË›ý ^ÉW2ËÓÀ's¿¹Ÿù¬§š l5¤†Ô%ˆA&˜`ÂæW|â“ÍÆô›þ,^ƒÅ§ùÓz2Â.ÿ GÏ=›-®aÑxg¼³àU­Ú¢¶Xð¯W¼^ñzÄü1Ìoùoï¾½ûönú‚¾ ®6]mºÚskæVÏ­¶Ém4<†ÇÆ—åOëÉûµn|¸ñ![×Ê‚¼&¯‘â4/yÉKP^åU^¨¬ª¬ª¬‚†í Û¶C*‘J¤PR_R_R¾°/ì CK¨%Ô‚ñÄxbhîmîmî…é²é²é2¨pU¸*\àöº½n/´GÚ#í0‡Íasضsír•\õÅ3ö™®œ3FQ[W®V…ª̤™4“ð±öcíÇZ˜ Îg‚ßÂŽ… ;`Ò5éšt ¨€ ØýB¡lƒ÷K]ù…9†yÈ<Ä< Ï4£ŒãŒ3n;Ô]ªKuº¢®¨+6ÿEu^¾¦“N³ÛìÎâý×û“Ñô›~kòÓÅÎ. ô€ã㨨z¢žH’DyÒ<É"RÈ;þg'ÿ’ýW.ÙÛÅ’½-Íìß5ág‚O}˃IEND®B`‚routino-3.2/web/www/routino/icons/limit-16.4.png 644 233 144 3005 13061246472 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܺIDATHÇÍ–ßOTgÆŸ38Ë„_;h46nÜXRB1Ùfk¡%l°¡UR’¶±@mÖ˜TÒYm–«êEe’Ýu¬?Öª¥Èj%V«•V µv12¸¥´[”eÊÊ™sÞÏ^ÌfÚý|o&ß_Ïóœ9ïûœW IÊŒý <yò¤Gc϶x~iÅÒŠ_þ-·Û`m²6}õ{ÈhÍhÈ dœñØ­»ý‰óR?‘ÏÍ+SñDê©ÔSVY,~ j®}xiN4~§¼ÞΙ¼ÔõRÀ‡ï}ø¯Àxïx/ÀTÙTÄc·îö»ó.^"¾Þú ¿É%dBjJjŠ«ËW—¯ù]´ad Tm¬Úð]ÒwIÆö>S„ ã®É„Ø­ÇúÝyÏÅwù\þ¨¿Ô_*ÁÓuO×yFn…]«v­rù:ZðA$ ØÏÙÏ1¦Çô`aA­>­^Ú¶zÛêm«¥emËÚ–µIc·ÇnÝ–œ=ÎgdÊM¹)—Öö­í[Û'];{í̵3Ò·Û9¶SúçÎ!ßO~ɺcݑ负·Ÿ·†b›àU8~÷ø]°_0/Ævå|U~Õšª5p¨õPë¡Öø&®©©oª7Õ›   0Q0Q0QEÁ¢`Q&š&š&šâs¿@Õ_6o,f>vT^´Ýt¿ëk¯&žÊÝ»³î©tö;ûaºxúÙég1÷Æîïãö)û”} &ó&ó&óÀ 8'¦ßô›~u†:C`×Ûõv=˜-æIó$Ìýbîñ¹Ç1ÿý×ä“_1>»ñÍÆ7;Q=r}¼ãÞñð¶‡íEþJî;Ï8Ï$øX=µÔ‚I3i&-ÁVš•f%PJ)¥ þŽ}¢B„3f¹YÎ,&†¿0|uøj‚™ùX‚óGª“ª“âÎONd82 ì¶GíѸósŒ0Ÿ™+æ ÐAÀ,3Ì€ù·5£À·‹Îßä4±À^ûsûs mÑùSªS€ùŸ:ÿƒû­|`oì}ìÁ¼Áþpb¥˜Ž4è†IEND®B`‚routino-3.2/web/www/routino/icons/limit-9.1.png 644 233 144 2450 13061246471 14576 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÝIDATHÇÍ–OLTWÆÏ 2@TÂLŒAH F-š@Ô6Ñ@5¢&ƒEcêŸX»*nLmkqQ7õFH0tÜ º‘&HEÅ5"X)Efdð9ï½ûëbæÎ{jMºän^¾{Ïù¾/÷ÞsÞ‘œäWÀ»Ø»Ø›ÀÞ¯œù̚̚’+ |ÞÏvÏö?¾ƒ§œÈmÍmµ8X¯ëxw¾ˆÃïÖÓó’#ÎDFGF‡§*‰ÃŽ•;VfúøçÈêÌêœ6a_×¾.€k—®]âk»=v`²j² ¬×u¼Î×|n~9þ¾¤ßL¿éy ¾ Ÿ­/Z_üM"àÏb¨Û\·`$m$MyÀæ1OUQ¢èñ· ëõd¼Î×|š_ëiý„üÊüJØV¿­>«%‘ðàWh,h,ÐzñN ™fæ5£VƒÕ€ªGõàÁÖë:^çk>ͯõ´~¼¶'ƒ¨/äâñ^°žZOÁŽ›»Ì]Äͬ€@©Ãj¿Ú3bĈ¦˜r¦íJû}¥~2_˜/ˆƒcçÍÊ ejƒ'ƒ®£Yö deEçŠ9G³I™ÖNk'1~à*W]Fö°‡=@ A>Ö°5l ƒêTíªÝµµ·ÙÛˆi~²†,Hé'ý$ÿ ;p ˜°Ëð›™ffŠN ,((†SkN­9µ†?~ì詻ꮺ ª[u«ng¾çlÏÙž³ð$ïÉÜ'spÕÇé}-Ké'ý$ýþ-´MµMP{“Æà÷ƒƒPòºäuÉkXW¿®~]=”--[Z¶ÆßŒ¿óñŽu:HïJïJï‚¶Ú¶Ú¶Z׎VÏçIŸ{µ¾öãɾ•}«ü ‘ÊêÊjªED<-ɓθ“u'÷N®H 0P(émïmïmñåúr}¹"áP8Ij˜5fY#â‰x"žˆˆÿœÿœÿœˆªVÕªÚ‰“ì´Ui«$#<-Z_ûñФեÕQ*’~=ýºˆ·LDD&t~ÍΚ†š‘éƒÓ§Šl,ÙX²±D¤?Ôê‰øîûîûî;z*¨‚*(2BFÈ)..™™œ™œ™t›‘E²(…&´¾ö3Gľaß𠊘[Í­ò™ü%}Ò'ù:ãmà­ÿ­_dyÓò¦åM"«ëWׯ®éÏëÏëÏ)*,*,*ïïvþÚùk]FÔ€‘…²PºŒYòH¥P~R_R~>¼cÉ^´h¥#z$z8zj+j+j+ À_à/ðÃÑ®£]G» Œ#A(/-/-/…WáWáWaç.m¹¼åò–ËpñÂÅ /¸îØ‘wwOß±«RWIؼb^qªÈxdÜ3îÁËÑ—£/G l`(Ÿò)L´L´L´€=cÏØ3ŽÈ’È’È02 1Äáã¦Ùn¶»ôþ»*]}ÌŠ ÅR›øÜ:c!¦¾TͪÙÕV¨jp‚œp•£‰‰ù^z_’&vÛ»ÿwsu~݉MÝ™­‡ÖC É³Æˆ«ÛjRM¢¸G}¤:½U£jxÎ3ž¹|äSAŠ­k„x¢õâú³|²óÏÚå¬}]ÌÚ÷Øì|Áþ KW˾šš÷IEND®B`‚routino-3.2/web/www/routino/icons/limit-99.png 644 233 144 2431 13061246470 14526 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÎIDATHÇÍ–mHTiÇŸ±õ´2,¨&5c-!2&èÅšT´WŒÐbaWÖ5Ú%¶‰„ÍU“Xv"ú F4ÔY-¬/}P›Í‘ 6¤Å(·X©˜YIšæÞçù퇙;÷îR»ûÑûåržsÎÿÿîyι!„Ë’oikÓÖ¦-IØi_šëYÕYÕE×öel‡l‡~û–^\z ïJÞùÄ´ ¿oÍÂÄ·òëb™02û3ûm•I»Ž”)ËZ‘°ôCö`öà[ šo5߸:p•¯!ÞT¾©Ó6üF¼‘oàYñEÇ?ø…€ô;éwl@fFf†P°§`OáÉDÀï…°¿nÀ«E¯©4Ðg€rT%!‚ñ„-¶áOÆùžoðü =òwæï6lÈîK$<ñÁiûi»Á:é$´ˆÐéLjò+?6l`چ߈7ò <ßà3øzÄßkÛí‚ÃY‡³#®è#²M¶—qU¤ŠPÚ¬Ô‚ ¾Rͪ9õÅórNÎ6«…´¨oÔ%u ²Gö'ªßÕï¦6<–âKñ « ÇOÌF>gú3ˆP ²[vU%”?ÐJ«)„zèµKíR»>|ÿç4ÒTqŠS²Cv%fà'ùRü =Ia—–s-çRû.ç6­M+(§<ñý;;;À[ì-öÃóùçóÏçMщèD¼›½›½›áÅÔ‹©S¦_=T!BYJœàKñ'ô$…ýúܘ¿‘"PMJįů%÷L¶M¶M¶AÑ\Ñ\Ñ8ÎFp–:K¥p¯ÿ^ÿ½~pœwœwœ‡­[ ¶@yIyIy „ׇׇ×[Žk-Z‹¯šLþ„KF—Œª~n n2õJ-SË4íÞ®Þ®Þ.pæ:s¹æzm]m]m8·8·8·ÀÞ{Oì=aú+6Tl¨Ø}7ûnöÝ´à¡94‡¥ä)þ„y¹y¹r¯ïͶWßÊ£ò¨™örúåôËi(s—¹ËÜPå­òVy!g8g8g:õN½S‡í3Ûg¶Ï€ë¸ë¸ë8dtgtgtƒoooEØm£¶Ñ:f þ„ž4!ä²M ¡ÐãÉŠûâ~ÊïW¾_ù~¥¥žRO©GˆÝû‡w ‘_“_“_#Äê±Õc«Ç„(‡‹ÃB¸Ò]é®t!–·/o_Þ.Dá`á`á ‰gÛh[l[láKñ'õ|쌱H»®]7ÏXÄqGÜP³­f[Í6°¯²¯²¯‚³³³x·ãÝŽw; º·º·ºì~»ßî÷÷÷KÅ>£žzàg}Ÿ¾ï_ÏØGºÒèšÛ<â‘Ù•±§±§±§’!’ <Ê£<&ol*6›‚P, Å@M¨ 5Œ3ʨyö‰k³ÚìvåæXjÎÈ òQ*h¢ ÔQU¯ê-ÝÕ T¨5¢F@QgÔ‹ÿSµN­ºb@¶ÊV¢hÿkŽ}`òCÓGõQé–nâx`¥Æ“¿žq,¥ê vHùò–·('åIâèº_÷[ð?>ùì¿rÁÞ.ì}laÞ`ÿ‹V›o×|÷IEND®B`‚routino-3.2/web/www/routino/icons/limit-191.png 644 233 144 2575 13061246471 14611 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü2IDATHÇÍV]L“W~ÚRJäOp^ˆ¸!@œZ–V "EQÐ $º.tWš`".3Æ M&[¼R @Ô+ .HtK´aŽ—J‚mß×ï<»hO¿NÝ®97Íûž÷}žç;'ïÓüiL6&c±ñ=UU”Úˆ¯ùIÃ>þ?kÉØ¦Ø&’Œ¿CÑc¹/ëÃû?œOæ=a¹m¹mpãóäAÛA[TR þÁEZ»¬] *yüîñ»$ÙÙÜÙÌää£ÉG$9ïœw’z,÷e½ì—xáø8ÿ?@š˜ÆHK¤% 7n*Lù6Pðw ¹gמ]$ùÊôÊ$Œ$IúgHF3Z8Iúè£\³a±ÜÖË~‰'ñ%Ÿä虘—˜e‡ÊY¯F~!Oo8½Aò)]$/ð£IÕ§úHÒÄ„ˤp IÒ@©Çr_ÖË~‰'ñ%ŸäèÁ¿ï¶qYUEÒK’Ê ©Åj±¤æPZ”*¢V´‹v )Y{£Íj³¤:§Î©s¤8)Nˆüp -OiUZ©ˆïÔêÎÐÒW®”+R`㎰«€´©Y'¬¾rTÕB€%~’£äpQü*ž‰gaLób^Ì“¬g=ëÃ$åQ%YÎr–“šÁ¯øRÜÃb˜$µ­…‹Áë.!Gý£~’´NZ'}ROPصßÈêºêºÐ9d‰å¾r_×áúÞUçª#=iž4Oš®Ã=ãžqÏW·_Ý~u;éyáyáyñщÑõ³ëŠë ù2á¥í¥M?qÑàÓùzŒs³÷àwG®#ÀO`øÂà0å˜r°rç³;kî¬!ß–¿-0œ2œ2œL_š¾4} (+*+*+:f;f;fýãûÇ÷sgæÎ̺»º»º»€‚ñ‚ׯÇöÇñãa^ØŠ¨ ðŽSŽSÁ,ì=F ¦?¦K6v‡ÀI0\gÇ8 ¦ð£kG׎Ö*k•µ ªªª’2“2“2Á±Á±Á1ÀÒli¶4ÝÎng·ˆëŒëŒë¶&lMØ ˆ±[ì–`Ab€È+È+¤#`ÚcÚà äG.D.„Þˆ¯xŒÇ€Æ¦&À¶Ù¶Ù¶˜6L¦ @IEIEI°PµPµP§§§î,w–; ˆèˆèˆèœmÎ6g1’1’1¼Ÿÿöý[èk1À˜{Ì=€Ôh÷´{†¿ ÔRµé0â)ž"fŒc\ïbBLÆ>cŸ±XJ^J^JÒÒÒ€ìçÙϳŸîõîõîõ@ª%Õ’jÑû™Á f¸…v´‡ Ó‰€ºWÝ H=FÀçô9Ÿ=q  ?ó5Ò…Y˜±"3Ñë¢×E¯PŠR”ñ7ãoÆß¼5Þo д±icÓF òaåÃʇ@îLîLîŒÎÓÓÓ ˜‹Íyæ¼PzŸù0Ð7Єôü×TòÚ®¶ëSéÍõÚ½vr©w©w©WŸ¶åËË——/“SÚ”6¥‘Â-ÜÂMò,Ïò¬^çýһŻ…\¶,§,§PZ£ÖHòþ§§R÷±H_‘>£Uj•\äòóo§vR‡Åá0Ë™"“äE^äŰz5ôѼþÿúØ'œ_‘Îï÷ø=$“ü5þ*¬e;ÜŸõ<Çs¤Cbˆä|Â';¨¿Á_è/ s~µÂTaú¤ó¯ÚÿÊUûºXµï±Õù‚ýeDQ ôAµIEND®B`‚routino-3.2/web/www/routino/icons/marker-31-red.png 644 233 144 4126 13061246466 15433 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü IDATXí—LTWÇÏû1"—•TA™ÙñG]¡X³ê;šh-þ¨Ø0uÕÝ´þìh›ØÒ R‘UZ‰?BkWCFò]MZ0hý‘Æàú#º³0Se«íèÈŒ82Ì{s¿ûsß{3éj6»ç8÷ž{ÎçÝó½÷Ѱý’LœŸ¢¤()Šð4>6¢mDÛˆ¶’9²&k²ví¯4ƒfÐ `xšÕ‘L2ÉÜ}VÇãùzžçO¬'ÎOä1óm¦Í´YlNœÏ|En“Ûä¶æ€°EØ"lÑAÒ3‚ÁŒ ¾^rgÉ%w€e÷–Ý[v(/(/(/0|>ÏãùzžççõžÏCâ¼Dâñ‰øD|â›Áw(Û•íÊviï¾xøâá‹ì¥Ð£Ð£Ð#$Hcàƒ>@÷ãó<ž¯çùxþÄz<Ÿ¬£Å>±Oìó}Ü/8_p^ý]o´7ÚE/âÆrY.Ë…ªUiUZ ÍÔfj3Í©95§ÉÏóx¾žçãùuà„úÖÑ:šÐ,4 ÍDò.y—¼«é:_à¨s|âøDuê`ÛÙ\6!µ)¢D€ù¢·£· ſſnâ&€_~ôН÷ÅÄjSäVäÀ¶³Óì4B<ØQç¨sÔ©N^Ÿóp>²ÜµÜµÜýýoy€µÆZm­f“¼½Ï¼ÏÐÏÒöDGð~Ä&¬’U®áàn›Ëæ±ØGF´¶GûXûØÈæ}è}è}ˆ~kµÆZÃ&qOÞ(o”7víâ‡*UªdŒ'«Íj@ {—½ rfèÌ|¹áË ð]õwÕf`ð ;hö.ó.9o;o3FÕæèþè~Ý óúúÎ&ðógädädä .Px5ð* €Tð¤¡÷3ÞφÏ=Œ7vœÙÿpч‹Ì`ƒ+W@д@QfQ&”ZK­€Þt›ú@}`pJ%€óp>ú—Å{ï]¼×ø2ÿÀîÝ@Ki)ìY½gµháþB30·öÁöA6:Í<_¾ª|•)̯µkí€Ö«]Õ®õ9çãGêK±¥ØR¬Ÿ±ZÇúY?M©K©#"jÖ:ˆhák _#"jíhí "R¶+Û‰ˆœÇÇÍ7H~m~-QÏÚžµDDóëç×õßé¿c I1ŠÑ1:FÇŒú–K‹¥E?òü~esæ4Ìi@Ï 0( ZÑŠV0ü!6%6ÅÔ*Ü(»QÒ é†y§V®,4ï¨z[½möK‹K‹À>Õ>@$>|MÛ§íX³1.S0¦` z8‰NÑ):£?ÅêŽn>rôÈQ“Fúßö¿ ­Ö€Hpwp·àÒÓKOÍÀ_5|Õ€Ÿ±’“%'¨v»ÝnŒj'†6 m0ê­?[¶^ÿ$ä yB^ô'’fI³¤Y;jù)³ý:Û•íÒ&z—ÿÐöCÜßvBÌÎAC!ÀøöËW._1ƒ¶¿ÑþÆÏ–±2 ìð;üê¨A-ˆHá@8äìÈÙ‘³#¦?R¦”)e~ÞOiÅiÅiÅDò9ùœ|ÎÓ§_øåööÚVž.æÞš²5(q °øŽø¤îLÝ ë?[ÿ™L[¬-6¹¡RG©@Ñõ¢ë@ìsÀü¹®¿»Ú]í±°¸NZ'­ûÇŠa?ÕO‰–}Ð’g™n™î;¸«ÜãÜã˜Þ,uÌßpdÓ‘MB]•]•Àˆ%œz¶ž­7iß–|[h•_t|a´úøO—§ õ'´V¬kK„ñÂxaüo'JWõóµZx]x}A£àN §¹Vb”ÎãWŽ_¢kwklrl²‰+–²¥€·ð–y¯0„!€ÙÙZ¶ÖØß>O_c_#`ie¥nÔw²Zª–ªÝÍINrÊVƒµ ©P®¦fj¦f"É/Ý•î¾wRZ­¬Ôtï½e½eFAfW—«ËgpÆÆ}Ü  Ý[¡½¬½lìïªË«¾_õ½¶Uäy@Ù™µ)kSÖ&"Ñ!:D‡p"NWÉ1GÅ®z¤©G85iÛ¤m“¶Y\—Å¥ìÔµ[è(tšµsÇ܈@Àc<†éomª6U›jìoÃì†Ù ³‡&`I·¤[Òû‡}ëÈÄN I­'!ɽè[GZò,y–<ï “v«ÜU&í¦«éjº{{3žÆp÷ðÆ*©Ý©Ý©Ýl‰®É41ML{óÏIR<˜Ä—BÏLÚ]-¬^°DðÁcÖ®Ò©tÚU;ÕNµÓPgYϲ€éÁéÁéAmЮũEjÙ—Ï¥—^2à/èfð†vý’ߤÝzk½µ^M÷z¼¯@Dä¤îSîSîSƵ#7Êrcwü_’ÔKIuããôÒ‹“/x3®Ý¿ý'í-*ZT´ÈЮ’¯ä+ù86<ÏôNB…P±`GbñqR]þK{‘vçKµR­Të›É+j*j*jا¹C¹C¹CêM½Õ~É/ùÝÙÔDMÔDñkGò&ÕK¡ÿÑ’µ»3Ñ/ú§°FX#¬¨”J©46Mœ N' $Й ¶°-l I]R—Ô%œŽ/\‘Ô¹ÿ›¥ë¿S1Ë×§?¨™ÈDB‡Ðñ¯_ OV’:Ó›”÷…­þ7¿¹•é¶õœIEND®B`‚routino-3.2/web/www/routino/icons/limit-34.2.png 644 233 144 2736 13061246473 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü“IDATHÇÍ–ÿO•UÇ$*÷ÒL ›È¥L4es¹6v/µÙLå dÜ©c©m-×֗ɦ†€KS†N&­Â¹i?tƒ;eÑæÊ©L iJ#¿$™ÄåÛ%»WàÞçÞç¼úááô0éðüòìý9Ÿó~¿÷œç¼Ÿ#@!DâÔS@ì³±ÏÆÚ ûŽYŸûúÜ×3¿1pCbÖǬÿmÌ;:ï(Àüãóë7M¬æUÿôõB˜üÓõT]$ ³0Ç;ÇS0…÷BINIÎÜd¼ñ¾xߣl=½õ4@󉿼÷Ûï·ŒŒ€‰Õ¼êWëßt~±÷1}! îû¸ïczaÎì9³…€ôÂôBÇûFÃxó7ßèªÿ) Ña Y ÆÈ4¬æ§úÕzŧø•žÒ7üHÊOÊÖ½µî­øFcÁÍ“ð‘ý#»ÒÓ|À>ö‘‘@$-‹–yQ^ †0±šWýj½âSüJOé~Ì­BˆC.pßvß}@»éÕÒµtÐÕ´´)§RY–/È%r èËõåúrÌ1Æ ƒÿ!©ÿ©µ Z¤W³kvÐG ~p÷»û”¾ÚÊ»B±ôÄâYTÞ¾tûp€Õ ódãìçs>œ8qEQ²CvÈŽi††fØ„2$C2ìeûd¾Ìgœ*ƒ_jSzJÿœáGð@!Ú°mÛ²m‹¢Ó—Ý,ì>Ó}}yè‹C_ ¯êWµ«3FÏÆž=áBÚ…´ if]÷ë~Ýoâî¸îØîX¨«­;XwÙýS×Ò®¥¦žlÛ–´- ~„îBˆ«‚¯ÒW w’üýþ~Y¾ zÞsóž#T’\b-±BZiZiZ)\__›‚ƒƒƒàjr5¹šfï¼Óy§ó$„ apeºR]©¾æ™¿Ÿù›ÐµÖ¿jþª‘åpzóéÍ /0üYütòÓÉÒ cÉcÉðû²»¯Ü}ê«®>ºšš­ÍVÈMÉMÉM¶³mgÛÎBeqeqe1¤¶¤¶¤¶@©³ÔYêœi¬éVÓ­¦[°«~Wý®z³þâ–¬%YKà¸íTÊ©€P8†¨Õò‹åéŒ$†Ãú |<ò±y샾@¬­[[·¶²÷dïÉÞ;²wdïÈÇnÇnÇn([T¶¨ldÖfÖfÖB¯§×Óë™i°}eûÊö•“›“›“ ›#›6 €|[ÅÌèg£Ÿå‰$~ ßÑ׬³­³¥Bù¡|8µÞ[æ-ƒå›–=¿ìy“8/#/#/œÎ çxŽxŽxŽ@VEVEVÄ=Š{÷|Ç|Ç|Ç X¬VÕá+ÃW†Á²Ó²Ó²¸88!¸=ðRà%ˆŒ+…ûŸÜÿè²ÕÙê¤WȯÕ7öíè·£ðÏO²¼à𫹯æ²­µÚ ÁsÝsÝs‚ö =h7 7v5v5v{¿{¿{?èÝ¡;`ÕšUkV­ªŠªŠª °4X, °Â»âÄŠ`K²´ZZ ùœï;ß'Ë¡µ¨µ"‡§¾±©YÛ“¶'™§$òòäØä ý8ôÝÐwÈhg´3Ú ²GöÈÐ[ô½&O,žX ÝÝÝ _Ó¯é×Àßèoô7Âxüxüx< úaè¸×t¯ã^r૾ھZ˜,7ôà]í] x{êTÒöXŽÅ¹"+þ˱bY̸tÉur`Çδ7Æ(£Œ‰44þ'V¦%›C:P¸Ë1TŽ©ä©äÝ0kÃ, ÆHfy6âø¯£¢f&?•|ʧÀB²1É$È Ê °*ªòLD‹hhòç¨5jyÒà§Þ]ã®ÃÇôärÿ•Oìí≽=™7ØUd pY<ŽIEND®B`‚routino-3.2/web/www/routino/icons/marker-32-red.png 644 233 144 4235 13061246466 15435 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜRIDATXí—{LTWÇ÷1TÜY'P†Ýúv±f}Eå!hX°Ñ_8´P­YSÄÑ>LéV©Ê*›¥µCBq)Å] Ÿ¤õ±¬ »)6º0e[Ë ÊÀŽ sïœïþÁœ;w&»5›Ýß?ð;ç÷øÜs¾ç µŸR˜‰ËŒ£ÃèþˆÓ<¦yLóŠ…²*«²zç4—æÒ\`tš•“L2ÉÜÂ}VÎãy>¯Çë‡÷—…óèùŠ©˜ŠE{ø|ÜL¹Yn–›íýÂna·°[1™Ìæœ_soͽ5÷€õ×?\ÿX—º.u]jÈçó<žçóz¼>ï÷ã<$. ÷'ÅAqÐ5—¯PBaBaB¡º§º­º­º½àyìyìy @‚ ^ aC\pÁh~pžÇó|^×ï7ùøó‘eœØ#öˆ=® ¼@êµÔk©×”EÝþn·ÝKfÉ,ŠZª–ª¥€:O§ÎÔ5GÍÑùÁyÏóy=^_ëo§¡ vÁ.؉äCò!ùPÝ×À\þ»þ»FKKè@¸îîÌå¿ï¿(u¾|_>Àö±h Ë,Ï<˜yPÉáý9ç#ÃÃÃ_ý’XÊ,,ØTgŸó™óžëxÔ£þ'þ':~Àz"ö{ p÷€™™Є&øáE«G³bUsö¹&¸&à©¥Ìòžå=6•óh|ò.y—¼ëÖ!>q¢àDÁ‰öë`¯bWú•~`;ؾK#—FàÓŸî€/ßÿòý0à6Ö¦÷¿9ùÍI¨™Q3€ïüéó§À¿Õ¿PìêMõ¦ìåýµ• ã#æ6'™“ÌI(ï_Ñ?§ ýPÈ¿ù-ó[f`ôÜÀ„Ø ±zÿ ï\ÐÖ¨;¡Ÿ7[ÌïYU´ª@b ÉEé_ñ¸éqÀy8ýíêc«­>ú2•÷Б¡#@ki-Í?š¯ú¨ö£Z=Ðà…Á 0óƒ™@~n~®>¾½®½Nï>ûñÙ­_°?çá|bðHÍ4d² YÚ3Ò6ö”=%¢ Ærc9Qã¬ÆYDD¹/å¾DDÔØÒØBDÔ°¯aÑËe/—­F+Ñò¯–ED´ýÝíïêo–(DAïÊKå¥DTvý †Cƒväùýʬ +V.¬D×°0, шF0l LLBç³#»#¤©C¿’›Ò6¥áߘTdTdÀ¸ªqU|ÅSЧ¸Tv ÛÁv€ñ¬Ôñ©ãSÇ£‹ó‘˜#æˆ9þÞà@ù©âšS5§tˆr¿î~ûûøŽ уܺ1¤>o;o€¾/ú¾€9Ýsº Ñšh Ô*µ °ùl> žQÛÕöP¿Ë—+.Wh/àv!EHRü½$Í—æKó÷æ§,ñç … …êdç†ïš¿k€ï÷~¿–ÁAªëû €7˜–;h´€¿×ß ŸÃQÃQ@Òþ¤•I+Ú ÅIqRÜɧ“““E$_•¯ÊWë{´ ]ÆñŒãj Ç ØJŒ%FøàyÅ7Å7 jzÔtØ·3z¯ô^€±%cK@¸'ÜàsuÌUOÅ"±œ$"Îöží ÿ\²¹dsÀ«n“¶IÛþ¶qÔvS¸%|bH1Ì6ÌvÕð[©-ÖË2´ûcüu×uPSTSÀsóæÍÐ=À›çÍ€3=gzøjíµv¨}±öE@-8Õuª >ÿöóoá==Xaª0!W{B „ Ã+„‰ÂDaâ/ª#¥¿hç+_xExey•P/\.r­v:ZO·Ÿn‡CÓnI`Z`šŽÏÇÖ²µ€Wñª^ÁÀ2˜Ùµ1OO½»ÉÝ$FMËš–¥ìÒVò€+ÇÚ25´Ê¡ÙbM£4J“ìd'’ÜÒéÁž?iOk•e’e’br¾ÝÝjÈ2”ÕÊjÀ]ÜÀPj^5OÍàPÚ”6€mT¦(SàŽt`óíMæMfµD{†d§ìtŒ/Š/Š/"3ÅL1S8¤+à˜cƒ?7J]R—Ô%œ›ºwêÞ©{‰ …†BC¡ã ¦Ý´Ì´Ì4½v¶€ >8à€À<îou†:CZßÊ• *ŒM"À`2˜ ¦žáQß¾ÓBKÄÖ“á^÷-Q†CŠ!ÅyF§ÝR[©N»&Ť˜B@GGG!áv¢€#º3º3º“­Ñ4#ƈ1y¿‰â'|Fúñ©R§Ý|!ù¡^¨êõÚu´:ZCÚUZ•V¥5¤ÜgñÏâŸÅ³fÌP§kZl¤†ß/æR J/ð'ô ð!íº%·N»– K…brÖ;ëõ|ðÁ‡Nj;g;g;ºvä*¹J®ê þK}#¢opœ^x`¤ñ„¼ vÿøŸ´›¾*}Uúªv‹‹‹Q;:Ï´¬‚U°.ßÞF|ÑW ÿÒž§ÝeÒaé°tØ5[ˬeÖ2ö»ä‘ä‘äå¯ÚV»%·ä¶%PÕQ¯ÉÑÏHÿ£Ej÷`¸Ÿþwa‹°EØÐJZI+³ÄIâ$q @]ºžèMô&z‰¤[Ò-é–p1˜¸1bçþofÒ~Ë¢,Ê’¿Ÿ~»@d" ´-BË?~6:>ͱ3ÝuŸ»Õÿ?®eÛþ™BIEND®B`‚routino-3.2/web/www/routino/icons/marker-41-grey.png 644 233 144 6034 13061246466 15630 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ÑIDATXÃ…—kP\U¶Çÿ{ŸÓ4ýòHñ0BÝ<HäqÉËt £2¹RccT.&'¯‘"7:XP°¼ÍH‰Ö%‰f™P„ €a$¢¤D¡›G$¤     ¾X°é…®ç‡ø!~ˆ5TTT°à¢É¢É¢É?Æ0?æÇüJv !Bˆ’ð¢³ÎYç¬cGp §pŠä"‘ˆÐ~ôx/âEvD™®LW¦“\~œçǯž"Vb%Ö¿, * * jî-Î(Î(Î B¸.„“´钇˗.®Æj¬¦•R‘T$I—\s®9×\`bQ}Q}Q}åˆkÂ5ášhºl_e_e_•pHS¦)Ó”¡!!5!5!•ä&)’I Ñ?Ñ?Ñçò{ù{y½ìoÑ¿GOÖ—yd>ÞÁu̇ù0éY²‹ì"»Â˸p.œ ÿòý¹Oæ>™ûd…@S@S@“x0µ?µ?µŸºc{b{b{Èfe®2W™ ;^Ãkx jØa‡@&2‘ àA<ˆaw.w.w.Çæž¶ž¶ž6æn‰l‰l‰”ÞyìÎcwÛñŽ:\®_ã-îw‰»6•±,–Ų†ž%  ëHþ|þ|þ<€6´¡mù¾Ž¯ãëÚþér¸.ÇŠ?é6è6è6«MûMûMûùJ_›¯Í×–b)–B`z¦gzð¸Žë¸@ -´f1‹Y`È p·qü´Ï´Ï´kÞ­y·æ]áÙÁ¯¿üŠÿÖKå¥òR _Ò…t!ý‘íxà‘ѪêTuª:E°"Xü?ÿ¶_°_°_Xñ'IgÒ™„ÍYYYü·¾*_•¯ K¥©CêXŒ0„! +ÉJ² #d„Œd˜ “a€|C¾!߬„•°ðb¦˜)f¾q¾q¾qX*û—õd}™Gæã…YaV˜MKtµºZ]­˜L&aª2U™ªøN¤! i°±hÍ¢áC“i2Me”Q€hˆ†hD! Q¸kVXahDdYAVÜ%îw `kÙZ¶> ©…Í£WyÂtÂtÂÄ"lçlçlç2ÌHB’*)‹d‘,òðŸÝF·Ñm6vmìÚØ…Tß}?ôý^R»Ô.µÃ‡´’VÒ ,,H"I$‰€¹ÛÜmî¬ÖNkç]N6ÀØ€QŒb°6[›­ÍÀðÙá³ÃgÒNÚI; %£d„¬'ëË<2"„!â?^ò»íwÛï6ŽÄãŒqFRîÑó¢}´ö,¥±4èD'ðÃÎvþ°(›+›+›†õÃúaý]PaH†çeçeçe & & &h>Þ|¼ùø=‘/E)Jg^²¾Ì#óñÎ)ç”s ĤŤŤ!WÕ®jWµÃÎòX˃z1u¤‘4»'vOìέ<·òÜJ@³F³F³à œ3˜Ä$&ËËË Ö]ë®u¶‡lÙÎ~8ûá컜¤„”€i˜†iÀ«>P} úö°µakÃÖ"·kªkªk %oà ¼A"i5­¦Õ‹ë•,²@€GŸ£Ï88A")Â…p!ì3[²-Ù– ‹ð„ð„ð8j¡j“WÖ½\÷rÝË@ o o /°õðÖÃ[®®®€BTˆ ñ®¾²MÙ¦l4Acø½ü^~/ÀÌÁ÷€Na S‹íKÖãæºæºæº`¡:ª£:öõ~Ëû-ï·„RK%ÈÄ>û¾úûêï«”¡ epŒcã:B;B;B™É™É™I òÕÊW+_H)#e@‹¶EÛ¢è ÷÷÷Ý=@ h@€%X‚%÷ôéé…žëÜ2¸ep `¾i¾i¾‰·½-Þo‹PJa‚ ¦ÂS|_ÀÜ–½-{[öŠº™Ý3»gvC­=­=­= [âdâdâ$ ÔFj#1_ÌóÎóãüRNÊI9tÐáWFÎ3ä @wÐtÇÝçô úýNáIáIáI¨Ï›Ï›Ï›¥ÕÄLÌÄŒÿ%"‰ø¾|1øbðÅ7ó&‹&‹&‹þð_SUSUSUÏ VÇWÇWÇ‹9Y;³vfíäJŸ6å®rW¹«pPFe@ÜXÜXÜàëë{Oª=€²…ç„ç„ç,ÚfÔ3ê5Ô‚.]t ‹Â¢°ÄFlÄ–'‘’BR®ýe¡ÏòË=×<1iáÞÈ^Ø÷Ñt#Ýx°YÈB=^ÏêY=öL¿=ýöôÛP“+ä ¹›”"¥H)¶a¶ý?Gè-ÜÂ-@:/—ÎÃéyëÓPÜPÜP,æXYYñÇ”Êeħņ#†#†#ï|‰B¢üÀ€°I¾j0‚Œ½ÈF6²I]ÌÙ˜³1gK·z¿äý’÷KŸ[¬Ö~ºF[£­ÑŠ9² É$™$N¼Ž×ñ:pðƒüÂBX]F—ÑeP¶›ÛÍíföhGMGMG Wª Ök‚Gç]•®JWå+oöööÌÌÌÌŒ<:É vÏX-i%­¤ÅÝcÝcÝc€+Û•íÊ~åMŸÆOã7TÝ_ß_ß_Ï•6>ÕøTãSìQ²ì#û ”>–>–>ƒ *¨ö û…ýD€ã–ù–ù–Ÿ6Å7Å7ÅãÍ„fB3HÉR²”üÊ› ¥7:ï)Åcž½–&·e"gÊóK¢ôL=)âJÑ„&4‰9d5YMV?ºuá—ã˹÷¸÷¸÷HvH;¤]{4öhìQ¤K}RŸÔ5¢Q4 N!WÈr¡|Oÿžþ=½h˜H™H™Há®{Ç{Ç{Ç—®YØ4¿•Ê¥r©œ?æÉì_åŒÃ&Gž‹5ä©ÝOíóÔî¹_Õ®»Þ]ïöLŸœ>9}jJ)¥¿È‘hv4;š’}´|´|´œ»îçç×Ûà¼é¼é¼™÷Îõǯ?~ýqÀ(w`µ ¸ØoïoÌ÷} ö8øÚS»ÿúUí†XC¬!üô™‚3g ÄÏþÿÿ|ØÖÙÖÙÖIžU÷©ûÔ}€¤“t’îÀ%þþþÇÚˆ¤ˆ¤ˆ$:åÑûOÏ踟‹Ão˜Ñh4<ӿż˜Ù;==ˆ¡b¨zYXØ­OÿyÓÏ›~ÞävúÚôµékìïÝuÔý‘¸nÖ=ëžusÙŠõŠõŠõÿ½œd'Ùɪ(¡„’\8ë¥å x%ÜÏCð;öµ[„F4¢Q,du¬ŽÕh-­¥µ­ó[æ·Ìo‘¢åŠrE9½ÆeqY\VËWúZ}­¾öFó€yÀ<@>—¥@)½ïñ[ï´ÿÅïØ}µëib!öaöñWIÉ ÿÖ³FÖÈÿ–© S…©Âè5n„áFn†I%R‰T²g¬o{ßö¾íÀ "<þä‹¥ã÷8þ j¹*ˆävæIEND®B`‚routino-3.2/web/www/routino/icons/limit-5.png 644 233 144 2204 13061246467 14435 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü9IDATHÇÍ–MhTW†ß;cšLc$‘ þ¡A¢[A*Œ#Œ³˜ø‡TQ¬Ë¦Eè¢Ý„þ`$Q*"*&$®”$µAº¨ –(¡àÏH’"2©äg‹{ÏÜ›vºòÛ ß9ß÷¼/çÜsæ$I«ý_A$‰GVyyäH0^ÑTÑôÅO^~Ág¯³÷o¡ª»ª újõÕâ³ ·ó¶>Ü/ü°ž×jå·Êo9 ?ï€ýõûë+>÷òF!v7v÷ï½wôÀÞ;½| ¹±ÜÀûÄû¹·õ¶ßòÂ|uüK_‚²Á²AçO(ÿ¬ü3 Ö7®oÜtÊ+˜ÜÉÝÉݯ£¯£&î4°’•&äÉcc&”Ûy¿Þö[žå[=«ïùÔìªÙ%Aª%Õëñž]‡sµçj­Þâ] “NVB!_ȸ7Ã<˜Q3 €ƒAnçm½í·<Ë·zVßó£¥{ûc¤+Ò%C¿€ûÈ}Š­ÅVý Ã(xîwn»Ûn[çÖ{Ä=ì¾§ƒŽÒJŠ™b†Å¯Ä·zV_aC_vA,ËåWÀ ÷…[~ÅÖb+)²4Æg˜bŠ©Ð¸Á`–TÎ3N}^‰oõ¬¾çÇ7vág8Þ~¼½Ô¼5´žÜu®p%ÀÁí¶Ûm·Ûàü¾óûÎïƒËéËéËi˜ÏÆgã!?Išh ñ–ð‹[}Ïoì·oàÆ‡J}màö¹}ÌùfÄŒ˜‘@gêâÔÅ©‹°vÛÚmk·AêIêIê dz3½™^x7ñnâÝDh!›Çæ1X^ˆïëY}Ï`Õðªas rÛsÛÃKnÆÌXispûÜ>·/˜íŸíŸíŸ…Ê3•g*Ï@ª!Õj€›Ù›Ù›ÙeÈ ™!`’I&^ˆï‡Õ÷ü¬¢Éh’-RÙó²çŽÿåé/I›µY5’9’óÆyã¼Q)Öt­éZÓ%µ„¤·z«·±Üxn<7.m,l,l,HÙt6MKµ¦ÖÔifÃ̆™ A=g9ËÙ/àûzVßó‘ò‰|â÷_¥‘‡#K˜Ã’yi^jAÒœæ$§Çéqz¡úõêH×^;xí TÝXÝXÝ(íŒïŒïŒK™ÊLe¦2¨ÎGç£ó’å…ø¾žÕ÷ý,ûTÚcŸûܾŒ…ÄBb!Óë¦×M¯sÌ3ÇBŸÎ+^ñê?ׯrOå2Çù|¾žçãùy½çó¸ÆßŸLÇı¾D¾CÑùÑùÑù¬ðä“7NÞP¦ŽŽ A‚Ïð Ïô¡}€ê{ã|>_Ïóñüþõæ{>ÂE›hm}—y‚”ë)×S®»Wõºz]½.ôÂkJ¼¯ÄÃÍJX +XKbIËbY,Kã{ã|>_Ïóñü*°_}C¸Š&Ô õB=‘|P>(¬íä 2*2Š3ŠÝY*Ø>ÏJÏJŒºk'ê&ê¥Ïýšû5“,ŽÅÛÏöðàîzÐ`’1Æ¥ÏÕãêܵN›Ó(û“bÂ(ÏŸQ‘ñIÆ'î,^Ÿóp>Ò=Ò=Ò=úír>ÁPf(3”)±Ö'Ö'Ö'öæe•l1[ ŸbÔ[Æ´ö3~¥@)ð›ÿ+~õ¹¬Ò5èôE­O¬.« Æ2ÃÃ%–óp>Id"YÝJ‡Ò¡tRÅŠ9CÝr7änÈLÌ2u*å?|<ð1M^,ºXDD¡=c=cDDw·ßÝNDô@| -´/´Ik¤5DDW¯]½FDAW®6Ѥ³ÝÙN$¦½ºéÕMDÌÂ>bQЬU³ÖÏZOJЙ 3AgèÁå®Ëw/ß6Mñ-|â€bˆ‹ˆ‹ˆCÅPæqÈʸ27bø7×|^ó90uî øõà×µ~ø›áokdP¼µx«6>ûåÙ/küÑý¥ûK5ÿ”¹‡2‡æ Í8çã Ù|xóá͇ÕÖ;™4™À·LÌÄ`mÔÚ(prû%û%m­1yLª¡¨ÜT¹I¯N­NÕÛÇ^{ `½~ÀÎÃùDï‘Z¬3êŒ:£zÆ‚¨€ d ¢Ù|Hš/Í'"jh "šQ3£†ˆhÁ/ ~!"j,m,%" w‡»‰ˆ¤‰ˆhã²ËˆˆÎ·œo!"²ì³ì#"Ú˜¶1ˆ‚Ã…pˆ¾Pr•\_}]ƒ®A× y~¿*9ÉUÉUÉUx8!ŒWW84@Áïyë3c3cÀtÃt.Ø.ØÀd4µ-¾—t/I»9k:×€Ô%uiæ9ßZõÖ*?zo•O»§ _•23efÊL<ä|$f‰Yb–ë±w âôîÓɧ“5žèŸè€þÇý8'L&-Èð—Ã_€l—íp<öx,\©¾R ƒƒZÞ¹9âf羊ú*ÊWïê‘o#¾P_À? B‚àzLÒ i…´¢¸œ_1ó¢ïGßgó­¿³mµm€±Ì±LŒ*é¡é¡éP¹³r'àûöÏ¢>‹€é˧/€æÛÍ·`Zè´Pøôè§Gµê»Ýv» ÀFÞoо)‚Óá Ç/I[’æQiŽ4GšS3LaÆ0c˜‘H¾&_“¯ÕÙÔ ?;=/=íåù=æbVÌà„Å[À!½/½¯my‘¾H¯ÝéÂÄÂDí)ßß0b1žšw¼»À÷¹ùù÷òïy*`T L]|D!vò·èãº]¼.¾ï_`.)-v£Ý€%¤;¤;¤[Ù¢j2L ÃÞþs€ðÑó¤*vs…Üu[„:¡N¨Ój×Òjiõi×Ýênu·ú”;99 ,Y6²l„-TµØ 5H GWs©y¥øzù&ð>íÚ%»F»G G GÜzkµÎZÀ 'œá¤æfs³¹ÙwíÈ'äò‰nïO’›u½ã4ýE€Æ¼íÕî…ÿ¤Ý4Sš)ÍäÓ®eµeµe5¾˜Š+j'„!GÈYWì_F|PW ÿÒ^¤ÝµR¹T.•÷%qàœ²œ²œ2å¯ñ“ñ“ñ“î.µÕvÉ.ÙÍÑTKµTKÞkG²Ô ¢ÿѵ[êï§ýCØ)ìv´žÖÓzÏq®8Wœ $@WÚb1Ž‘tKº%Ýþî]¸= sÿ7Ó«ÿÉHF¹Ó?üaž¨ˆŠ¨B‹Ð"´üó•©ñ–€Îôä}a«ÿ ‚s5xmEܨIEND®B`‚routino-3.2/web/www/routino/icons/limit-5.2.png 644 233 144 2631 13061246471 14574 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜNIDATHÇÍ–]lTՆߨmC‹…p€€¥An¼©áLL \–¶üÔ€Õ¢ JZ/MHlbbÔ¤ÒzsLQÚ §ÄÒÓ“c"ÖŸh„¢H›ÃOd Msz¢±íhi(dpÒÎì½×s.fï™AÔkÖÅL¾µ¾ï}Þ™µ×·—@’Tä~ üÅþbÿÂTìß—™ÏÛ’·eÍ¿Sñ{6øžô=ùíkð`Ûƒm‹:u:ßeboÝËÏ®—2úÙÈÄÞº—ïÕ{zž¾Çóø)?º{oß®Ä ÎÎOâk»ÅnûĉIÚØOÙOaì}öóöóÀ[4ÓÌ=ÃùŸó½ó=X?ØyvÆ™µžµž% ö/ö/À¬«o‚¹Á\ÏàÛ•Y[)I¼ ùÑühl>Îhr4™Ö¯æªó¨ó(q¦Òsã~ NœxÆ™3sfh¢‰¦,§oÒG˜„½ËÞ•®¨&>Ašïúq½÷5¼ôúK¯ÿpÖ‚ó˜óX{¬W¬W0áúp(‚öí;ÛwBG°#Ø„;EwŠîÝûäŒäŒäÀáÖí‡[aä‹‘þ‘þŒóq²;Ù XÏå»~\cß¼ Þþð6˜3¦Þ˜›zªuª––– æJÍ•š+ê u…º`²a²a²!cèâÐÅ¡‹CP(H$ rMåšÊ5PR[R[R ‘ ‘µ‘µéô9gØã¥øž¿´ðË…_þuTVQV!™Ÿ$É÷»Ó¹Bö]Ø'Å6Æ6Æ6JjT£¥í—·_Þ~YZqdÅ‘G”ã·Æoß’;xìà1éôØé±ÓcÒ‚Â… ¥ÈÆÈ–È–tz.oy¼?í.*t®ÃôÄô8o¦=ç›Ï7Ÿo†úMõ›ê7AgOgOg,;ºìè²£pª÷Tï©Þ{·rxýðúáõP( ”`¯µ×Úk ™ ðï<^ŠïùñKÎgÎg¾ë’õ„õ„¤IIÒï'E¯F#ш´ÚZm­¶¤º`]°.(_+¾V|MŠžžž•¬kÀ.­º´êÒ*©ª¬ª¬ªLÚ³xÏâ=‹¥öíÚHÎq§Óé”$½ªW%í÷x.ßõã—bå±òÈEé«Á¯%_‡$ñ‚ë+Qº«tGé©{w÷îîÝRÑæ¢ÍE›¥Š@E " U¯«^W½NÚvfÛ™mg¤È@d "©D%*‘ÂûÃûÃû¥•ý+ûWöKý¿öO÷OK’âŠ+á|ãñRü´Ÿ{N%î)9i}d}”9E‰òĆĸá¿á¿á3fÆÌ˜:Sgêàæ¡›‡n‚øÒøÒøR˜œœ„‰ðDx" ““m“m0{höøìq 8-N Ðý§§2«ÅFgFg2}Ì´XãÖ8qó3d†²úU›i3mÀV¶²5ëáJ q×ã6ÇÜ]­÷9繬>ƨ=jÿaËêü¸Ør;3öuû:Ð`_µ¯’4gÍÏæg §9ÉIà3Ì€I˜„IAj©ó©é1=`þcn›ÛsÂ.´ IrØ®µk³Þ,Vp^pÞïvþûö]yßÞ.îÛûØýyƒý?¦÷â¶—± IEND®B`‚routino-3.2/web/www/routino/icons/marker-93-red.png 644 233 144 4171 13061246467 15444 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü.IDATXí—LTWÇÏû1".:J«‚ k j]!]¥ÊØ8Òj”V¬P·ØýDL[ ÙˆBGq[¢R%„À چÅâÖP¢Öb´¡`†(¦Z Ê à0óæ~÷Þ}ïÍ$«ÙìÞàÜsÏ9ŸwÏ÷Þ›!“)hˆ+Ã\a®0—ðTˆW?®~\}úRY‘Yùñ$- ´s3É$“Ìm Øf¾žÇó|<p=qe0‘¯ ©Ptû§¿"×Ëõr½s@Ø.l¶k æÈÁÈÁÈAücÝuwÖÝÖß[oý= 3)3)3I·¹Ÿ¯çñ<ÏÏë=Ÿ‡ÄÁö¬#â8$õ,à;“““«ì<~åø•ãWØO¿§ßÓ@‚ Ãx‚'x =è4[õóõ<žçãùƒëÍ:ò|>²L{Å^±·çOt)éRÒ%ÿ²n_·¯Û‡n¨ƒ%°–¿R¬+Å€²PY¨,›bSl[õóõ<žçãù5à ú–‰šàœ‚“H.•KåÒê6`uX?±~â·i`»X9+‡Ç_=Z6Z°_›¯ Àh`Q` ­<WpÀh€°ßϾŸµ·×Û °],ƒeÀÃ[ÖýÖý~¯Ïy8™îšîšî®þ#_`Ùg)±”°8÷oîûîûx¬æñ(}Ù¾lÀ<ôÚ§¼ÉÞ”¢ØGì#ƒÛƒ‡x¨›ÊA_¿¯_÷ºsûÜ><¶ì³ìµìeqœGã“ ä¹àj)wTæT¾[ù.û@M0ìwúª|U†‚Þösíçà䢓‹ 9§9p'GqØ|6.Œ^€ù'òx[v·ìÖÓùþ=þ=š9\™S¹¹r3û@ÛÙ >b}‘ñ‘ñ‘ñp ¤¤¤:Ð?bù7× Ö cçÌ0Ãhoÿ~û÷Æ.zµèU£ê´©Ó ¶gOÉž@˯r¤Ì˜ pÎÇA¬-_[¾¶\ÿ2¥‹±@Ÿï©ï)¼ÔöRägægs_8táL¨šP×\?áŽp8686×N>œlîzyèe@éæ<œOTÔ+¦4Sš)M;ca”GMÔDDS•x%žˆÈÓéé$"šiŸiº):-DD#ï¼GDÔÑÙÑIDÔ°µa+ÑêWLDt¶ñl#‘k—kÑš”5)D4~¢0Q ¢*¶‰mÒë›êLu¦:íÈóû•e/­XZ±´]Ï„‘‡#œUZ•V0ü‰·¾0¬0ÌØÊU7WÝ€Ø×c_7Î×N«fÜœå7Ê@º%Ý2¬ó¾½ìíe~Tbb %ÐÆ£’¦$MIš‚.ÎG¢M´‰6߯ê„ãtáé‚Ó Œg+Ø k¼e¬Œ€­ÙÖ ŸÃyyPõFÕp¾ç| ,XbTaë`«AëÊ™¯¢¿ŠÖëýóз‘ßFj/àŸ…D!QHôýJÒbi±´xw?e±3-C–!e–{Cל®9úõÁRÓV§­€üIù“ýÛtè€èÖèV¸w;(‡ràó/?ÿÒ¨¾k—¯]°†wà›¢oŠàVÝñ»ç¥ÌK h€4]š.Mÿâ1E¤E¤E¤Éå‹òÅš^íÂÏLY‘²BÙÁóìµYµYðÂ¥æ…&o™¼Î~}ökcËwôïè7žrq«¸Àãp{¸|ñþì÷g럛{=·#·#0¬æIyRÞí¬1;œŸz>bŽšM‰¦ÄžS<À^¼sÿÎý,UëÜ”[Y·²À€S±§bx~Šù)ÆÈŠY±Áô¶6·6À©Í§6JNË-?èû[;äÌpfŒí/ –‰ebÙ³t!Zˆ¢ÿp<Pº¡¯MÂ&aÓkÇ„¡V¨åZ 仚œŸ:?…KÓîíéTX=«ÄAŒ½ÅÞ2à§²L¦_kžÞš{‡ïbÇ[ò,yþm'÷JER‘ݪ¡ÙÈF6Ù¢³&S2%Ë{ÉINrI}Ò/Ò/;ÿ®=­Ç,Ù–l¿Ùýa÷wÝßµë¿ä¿dÜPþ)ê[ïRÜŠ`Y¾›¾›ðòe¯mLݘªìÐ^ 'r¿Üï*‰Úµ-j‘h­¢U8£ÒåpÌß©³¤.©KêâŠâŠâŠˆL¹¦\S®«DÓn²5ÙšlÔnÀ°Ã \px„Gx¤s+s•¹Ê\]‹K*–T,a©Ú[n6™MæÞgê<>¸ÓBcHëI1/Û–ñcÚuŸÑµk/¶´kö›ýf(ð ð ð@×b;ÚѸÂÛÃÛÃÛÙ:M“b„ñÎ_B¤x4„/Œž?!U„hwP#Ô5Fíºš\MºvýMþ&“®Ü‘¨‘¨‘(`þàüÁùƒÊM‹uRT÷Ùr.5Uz¡€“èC_ÀèÚí“ú Ú=d9d9ä7»kÜ5î^xáÅ 'µ7Øì úµ#“ÉÇÚÕŸ$á­!uÕyšð"ÀÐÁÞQµû·ÿ¤Ý”Œ”Œ” ]»®å®å®å¨ó3­B¶-d¿¶;¸Œø(¤®@ÿåx‘vWJeR™TÖ³gïËÞ—½ý5a4a4aÔKkuŸÔ'õÙc¨šª©šÔkGr‡Ô £ÿq„j·$ØNù—°EØ"lh­¢Uyâ q†8H .\ŽŽŽ&’®JW¥«Ây50+¤sÿ·aÖþK£4J“Û‚ÝæˆLd"„F¡Qh¼ÿû±ùÙ®Ît‡ä}a«ÿ Ñv³Ý>j IEND®B`‚routino-3.2/web/www/routino/icons/marker-53-grey.png 644 233 144 6311 13061246466 15631 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ~IDATXÃ…—{PS×·Ç¿ûœ“‰" ‚ ‚8Š(ØjÄ>´þôWªŽ–«^ñ7Œô2àÅáÕV댅 ­-¦W‹\E^…Dié¼ѱòF‰P: )Ä„“³ï$´ãL§ëŸ=+gg­OÖúfïuHZZZZZ˜5ýì¬çú¹~®ŸÖ¤}—ö]ÚwtQæ³Ìg™Ï6ûSGêHÏ|È»ò®¼kÐAS•©ÊTE?ƒ *¨H |á _ñÄA¤ŸI¶I¶I¶‘î)÷”{z_EÆÈK¾¾0}aúº®¬}Yû²öïÉ{òž$z–C¸eåR0s€¡E(S,d ™B¦pËà7¸Áhr7¹›ÜñfGSGSG©÷­÷­÷ü=ò÷ÈÝÙ2O™§ÌsÔrÀrÀr`c.£q4®ó:99}rúä4€&4¡Éý?¸*®Š«jºjž2O™§–mõzÃë ¯7øÐñ;ãwÆsÅ ƒÂ 0À Îp†3xêM½©78<Â#<0ó0À&0À>ðH/é%½à1‚Œ€ÓÛëíõöè+ûªì«²¯ø=}}}\³ØNl'¶ûõ¿ßÆoÛƒ Ø€ ƒãì–è-Ñ[¢âLœ‰ó—ÍÆOŒŸ? Û <¦<¦<Æ¿÷^Ü{qïq ½D/уµÈ-r‹+CJH )lÚ$µ¤–Ô$$:è ¨õ ` 4€ìŽìŽìØ ² ² 2&þWîWîWŽS—§ËÓå9eHJJ.ˆ–ôKú%ýù$³&³&³&zµùžùžùÞ{öãöãöãTyèé¡§‡ž’{ЋЋЋ`f¥{b b`‚ &bˆ!0Û£90D#Ñàü©ÂÖŠ B‚0ç˜sÌ9ô‡õ‡õ‡!888Ð`ƒƒÁÁà@´â`q°8xk0G}©/õÍØ1#Ÿ‘ÏÈðÃ?ÿ›?(~Pü±U̲ñãÆý†~C¿`x†gx€^¤éE€û‘û‘ûð3úýŒSÉT2•@ßpßpß00V=V=V ,ˆZµ Xrnɹ%çA-¨5ìùŠ|E>ŒáQáQáQØT–V–V–ˆÜEî"÷Œ ¯ä•¼rí!ÇÇÇ|Fò±{°g]².Y— ¸ä|Éù’3ðý–ï·|¿¸y-òZ$Pþaù‡åäò y¨s®s®sTãªqÕ8P§­ÓÖi¯ý¾öûÚ¨/¨/¨/˜·™·™·mY  $ù6’^$½Hz!|V¼®x]ñ:j³I>›Ïæ³ç|Z4Z4Z4J©jH5¤¢Ô\m®6WS:22òÇ>“›ÉÍäFiRnRnR.¥<¿]|»øv1¥ÉÊde²’RS )ÐH_¶IçøŸ_¦„)aJæ~™8ps>èz‡Þz>êù¨ç#àô²ÓËN/¸®€+¶7loØÞ   û[ö·ìo\*\*\*€Î’ΒΠ³½³½³|ø,ð N§ŠSz•^¥WCbH $Ì^f/³@ P@|Ö•ue]é5ÃÃÃ<æ_ã_ã_ËF°l¨ Ôf ³„+ W®,b¦c¦c¦%ª%ª%* (©(©( iii–¯]¾vùZÀ²Ù²Ù²¸Ör­åZ ÐÙÙ ˆ2D¢ ÉHF2€ `.;ùËä/“¿à1ãÅx1^ô»¹msÛæ¶Ôºá…à ‡2—ç×ϯŸ_OÖ»y¸y¸y`Š×òZ^ ‘2V«ŒV9®r\å¸äºäºä¾G|ø~–þ,ýY 8–9–9–|;ßηÎ*g•³ ˆìŽìŽìŠŠŠ ÿ ÿ À-Û-Û-p9ìrØå0¦´™ÚLm&DõÝõÝõÝøo‰B¢(ø3 vb'v¦«¸4.K#)ugêÎÔ±x4A™à#ø>0ä=Í{š÷hŽmŽmŽýC­î­î­îñ!>Äp:átÂéðÍÍon~sh{·íݶwÿØOºHé¸V®•k$F‰Qb„ÉvºhıF,„-Ñ-¾!b!–B1³¨aQâ†Ó©âpq¸8üòàhãhãh#ÛW2V2V2f9.Ä‚X€}ètètè4LêDu¢:ÈèÌèÌèªU/ª^„>}úðÝç»ÏwQQQ TÚWÚWÚéýéýéý@![ȲÀÚÝkw¯Ý ª,U–*K!)ï+ï+ïŒOœŸ8?qfšÅ_ˆ¿Ñ3303038CNþvò·“¿¸‹»¸»8O¤éDº[vËâ"¾ø6â[±Õ}«ûVwÒ0¤Ò i@ŸÑgôY<²xdñ°0vaìÂX»° »”¢¥Àà¼Áyƒó€áχ?þX¿ ~A<àÁ{ð<Œm—Û.·]Æ?‹"Š"Š" ‘q2NÆMGR–²” ú'üà¿îà £bTŒŠ½ÇœeÎ2g‡þ%ô=Bϳ¬UÖ*kn%ßJ¾•LÚÛÛqeñ[‹ßZü¦V=^õxÕã?ÚÆ»Øˆ@À}Â}Â}ÊÊÊž4NNNAv×q¼—X!Vˆ!#d$U !$„„tFrù[ÇòA™Ÿ˜Ÿ˜Ÿ ¹­½­½­¥w…»Â]Í‘Ëår¹|pÚ|Õ|Õ|5étWzWzW:@µTKµp°æ¹d5Z×až0O˜‡Ö'­OZŸæs‚9!é´ÜQî(wì/y¨~¨~¨fsjvÕìªÙE#ÈQr”…D(Š„"PØÁv}A_Ðá OxL=×>×>×âJíŠÚµ+à ×Éur ¬Ök’NÏJopÚ*Å<ë5m»€ˆíذ¾’H¬®µEljQ‹ZËqJBIhÄöÙWŽ›•3GfŽÌŽív »fýò³ËÏ.?‹m³‡Œñcü?˜ø>…Oä¼÷yïóÞ]ˆ.DÂ>’®®®ÈY7û§Ilò…|!ŸË³vö_¶ŽeeeeeeÁ`«(¬ÌiȪÝãVíæ‘\’Kr¾g™p&<± qˆCó¥zF=£žáè/è/è/@Æ0 Ã0xa«DÝTÝTÝ”`ÌÌÌgIS¥©ÒÔ®ë¦!Ói(5ûQÔ£¨GQ€ÐËvžÚm|s /Û6ȬþϪÝJÿ ÿ ÿŠœíÒCÒCÒCW²Æ\Ç\Ç\9}iZiZišå¸u vèpêpêpÂŦ{M÷šî‘=²Y¬¼/ÁëØ-î}î}îý©×”ÁÊ`e03jÍ÷–uz™‹Å_XXXXXXx«ÛAÅTLÅä?u¯ê^Õ½Šÿ±,±,±,¹ÃK”¥Dù/‡7oÞèT¡ïÖwë»éç­—Z/µ^²¼>13131Ã&ˆÖ‹Ö‹ÖäN/Ð ôÂÿ^‡HØ>Œb£‚›­ÖBñ/óüý…v3QƒÔXÒi­¢Ua½L9SΔÿ¤œ~gúéw„WEù¢|Q>ÓÍÆ±ql\}£w¹w¹wùæ0m¯¶WÛK~\Á…Z㪭€Æ¿â`ð7ö’v­Ç…%GqG¹ûdÙGöýÛ›ÖÐZ“üÝR»¥vK™nv€`†– g„3™#Ozbzbzb€Y@(­ñlƒåÔßqü?×^"E@¾ÌIEND®B`‚routino-3.2/web/www/routino/icons/limit-31.3.png 644 233 144 2703 13061246473 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜxIDATHÇÍ–íOTgÆïFGP'ã…«4ˇ¦1ñCdØ‚Æ*¶¼4šM1E›~0…DW-Ú°di¶]£B­Y±S¶njX‰±[%š4 ¤£bH!”•¡ Üsžß~˜9œ‰ü>_N®û¾Ÿëºr^®óˆˆÈ²ÄUÀžm϶gıý#«¾hË¢-ëÚãøŒ¶r[ù£Ã°´ei Àò¯—m XØì›óÉûE,þd=³.ËÄ*8;6o•oV¾¹hEÿÝ©]©]hPûCíßóý7| £?þðÌûÌ 6ûæ¼¹ßäKæ—Ï_Ò?.øÑ6 Î…Î…"SœSüú'ñ'¯Ã»eï–Œ¤Œ¤(;è¿i¤)/&Œ¹&’°ÙOÌ›ûM>“ßÔ3õã~Ü…îBØQ½£:µ-¾aà_P—U—eêź€/ø‚4ÐÂZ@ߥï" ʯüذ…;9oî7ùL~SÏÔû±å´ˆHó;ð^ཱ;Úp,'–Æ/±ßb¿K8U¦ec³Q`€jP ªket)#¢¥iiÄæøîÄùM=Kß|”C"": ©áÔpØÁ±ÀÀॠÞVo3ÍIZhÖ²–µ`8 §áÕ®ÚU{’¡!BIø(G9 Ü¢‡åQ¦ùG‚EBÏÔï‰ûÆDDÎÜ&cï‡{?œ»Š^}xš/4·5·¡ ><0oùýþFr ¹†\VÝð~Ãoáw¼Þ$¾¡ÞÒÞRKOÍî-Û[ŒÆýˆÑ%"òàSè:Öu Ý¡‘ЈÚã:¾týÒõD+F*ÈlÉlÉl»µwkïÖµŽk×: ecÊÆ”pyëå­—·Î7>X?X?X®&W“« *_«\^¹2£«Î®:KôýÕ÷«Oí«\ôÿÄýØmߦ¯H_áÙ$Rxºð´ˆž5Y5YekkoœxCœÕÕ[ª·ˆ¬Î[·:O$ÒéŽt‹ØWÚWÚWЏ«ÝÕîjµMmSÛdÞÒ{ô½G¤ÁÑàhpˆTm­*¯*YýÏÌ›™7Å9[j5ÛÚD¼·¼·Dl5K-yäÙ$L,›]6kôóÕDýD½õÙOEÂOÃOaçõ×w^‡ìšìšì¸Wq¯â^…uGŠž=/zç;tîU×ú´>­ÏÂS‘©ÈT$™/«,« î÷=,zXÄDJ#¥`ü-ãtÆi£_ô’% —,T-ŒÂ¥òÎ]»Àó— ¹r-bO¾'ß“­öV{«ÝªoÞ¿yÿæýp>÷|îù¤ùàáàáàa¸xãâ‹7 ?/?/?/‰oÃ[‘·"pa[{U{@ôdô$è¯-~²ø‰êÕj¾cß¿ ÂäMµÇûUA~A>ÑŒíÅŰ»owßî>˜ÊšÊšÊ²|ý¾~_?\:~éø¥ã@/½ô‚§ÆSã©áºáºá:(9Xr°ä ¤ïH/I/Ý¿|pàƒD#_Æõ c¸cÔ‹¸ŸD޹Mï>÷>·õ•h›fžÍ<ƒñŸÇ»Ç»Qú)ý”~jþË=™;™;™ Ñ#Ñ#Ñ#@€® ® ®|øðvE»¢]ñ_¿€ÒOÍúf}–ýûröå˜{æ¶pû¥[Ïuh.Ç*TÓêÏj»Ú¬cë’œÍ0ÃLŽ!’„8p€úL5©&åS>¦?«RÖîH}vÐk昙üQ3yßw¼ïNÄ“Y]×BZhÕÇô±ùÉ. ‘F=jX=Vh¢ö¥þXLLýWÓÆ€³qþ9½èËÉÿêþ+_ÙÓÅ+{{5O°ÿªP2¼kÂ-ÍIEND®B`‚routino-3.2/web/www/routino/icons/marker-98-red.png 644 233 144 4241 13061246467 15447 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜVIDATXí—mLTWÇŸû2"]»ñ…™¥Ö*®P®º$裩|@©‹ ÔHÜnEѱ5±¡« SV]%©„Öª‰!ã fSßZ ­Šé·.Á%Ô¦‚©aF‘aæÞóß3çÎÙlÍf÷|™yîy^~÷œÿsÎ QhL¦¨!.‹sÆ9ãœÂ³ðƒ„ g'œp6©¬ÈЬüã8- ´M³Z’I&™Û@´Íj¹?çùxþèzâ²h=ß6ÚFÛDGôüÔ4ù¬|V>ë*…J¡RIJö&{“½¸TØSØSجí[Û·¶(Ê.Ê.ÊŽØ|žûóxžççõ~ž‡Ä¬h{æ'¢Oô‰>÷¾B)e)e)eÊŽcmÇÚŽµ±—F<y @‚ £xЧx À 7Ü€f‡ç¹?çùxþèz3?ùy>2NûÅ~±ß}™'Ⱦž}=ûzðw®€+à À…ð`,ƒe ¨T)UJ ,T* Å¢X‹ÎÏsÏóñüpT}ã$ MpÁA$ï—÷Ëû;x€¹Öü±ùã E{Ÿd1l·Ûæt:Œ«‹ÔE€[¸@EôWŸªOæ¸. Øè/ðì}UQŒp7s­y¯yoÐÂësÎG†††+ËŒ5Æjc5›Õ;Øû°÷!ž„óŒ(%À#<"%´WÉd™¡Å ­»úH}8‚#ÿž×Ì‘ÞAwŠ;OŒ5ƲYœGã“+ä ¹¢}?Ÿ¨/­»þm¶9œ`4èœ œÒUðw_î¾ Ç_7Ko–:Ñ ¬šU둾¿ýým8ñå‰/ø/˜/˜`¬u¬:Ôeê2Íy´¾´¾´¾”mÖV6Š˜'9=9=9µCùCùCù€»¸‹ Lüí^»õ=$! z»²¥²Eè09L:–€Äo¿Õùä4ä40}=öµÊ¼ýñv€óp>úç5×\s0òfŠ ‹±€'ð,ð ¦tLé€-E[Šô@W]=b·Ø P¸®p¼žûz®Þ¿ëJ×°ç\ù@qé}0Êy8Ÿn©4Cž!ϧõX•S+µѯ”t%ˆh䇑ˆˆR­©VýI‘²(eKgéDD·3ng½ÓüN3Q×®DD«ZVµ½Õ÷VÑÒÃKÑÄœ–œ":uüÄš M†&­åÓ øk[[¹üâØÀØIÒÕ»ê]mŠÿ1þG"ò½·ñ½DD»²ve½ÑùF'QÁæ‚Íúx¯ÝK½—ªî3ùLDDÏŸ Ѹ«ÕÕJD÷¼_x¿ /„‚ÃÎ’Çíq{Üäâ|$ZD‹h „—¸öä¶“'+t˜È²Xø^ö½ Àoc6–›–›P{¹ö2L¢IöìÀ”¡)Cp¨çPnSµ“tîž¹{åLqZqZ¤ÞÕC-í-íÚ øa¾0_˜ i±´XZ¼Ûƻ̔jô}ÊÌÞu÷gߟ9>Øò¼•y+`Kâ–DŒOxv ¤áuSÖ€wÐ;¯v¾Ú ›lz W_Ͼž}V%îIÜU•U•ð†§Ów§ùÓüªvHS¥©ÒÔOŸPB^B^B‘|M¾&_³÷k~QnVn–²çW­§‹OÃg¸ Fy·Oþlògpæ«3_éûá\͹˜°b #t®xŠS?]:yéd0`8q8(û{ù›åoª£`¹T.•ÿ³8dÇ{(z¤5Ì7Ì7ÌwŸàÖªûvìc˵ûåâ;Å`À Ó €‘.c—Q¨~§~§3ý?zø4nhÜ(¥—R/¥FÖ÷´ÏQç¨Ã*í µ‰6Ñ6–/L¦ Ós,Pº­õ×aƒ°aEƒ`N §¹VÔ-ÎVÇaÇa85ín×®Î0;ÊŽ†UÀX:K|ŽÏ¶œY™5"¥~{Ÿ­Ï˜&¦ § +´•Ü+½+½k5kh²E6FXs(‡rä½ä 9ˆ$ô“ôÓŽ ÚÕÚ`,1–“zw¹¾q}£×nðzðº˜aã¸èœê˜:°â 0øú]…ßßZï[ïS¶k7ÐSy@pVOÛ:më´­D¢Y4‹fáL˜®”cþ"üY,Ý—îK÷…‹³vÎÚ9k'‘¡ÌPf(sVkÚÍ1ç˜sôÚU­ª~8á„À0†1áVæ(s”9‘Ö«[R·¤n [Îó’ I†¤þ±mœ½ÓBsÌÖ“cÞˆ¶CÚí=Ñ®µÊZ¥ÓnR0)˜Ri?J`´ÝèœñÝñÝñݬPÓd‚˜ &¬ÿSŒÆðÅÑÏ?êb´[(Ø»`×k×Ùêlh7Øl ¶F”û|Úóiϧó¼ó¼ó¼ÊlM‹MR“Ôt$“K-,½XÀDzÁˆ8ðíz$N»‡Œ‡Œ‡‚I½ö^{¯€~øáå¤Ö‹Ö‹Ö‹‘cGnä†îð_’ø¿ÅÔ ?§—^;xÀú°vÏÿ'íæ®Î]»:¢]g¦3Ó™‰S¡y¦í„P"”%+vG—‡cê ô_Žiw™d“l’ͽ—Ô”Ô”Ô°¿dŒgŒgŒïh[í‘<’ÇšBÔH>v¤Þ˜zqô?ŽXíVGÛ¹÷„ÂFa#@T@ê\q†8Cœ$@Wn˜FM£¦Q"©]j—Ú…–p`qÌÎýßF’ö-ò(OÞU*2‘‰ š…f¡ùá¯CÏ_sÆìŒ+&ï ·ú_¶Ee‰~Ô©IEND®B`‚routino-3.2/web/www/routino/icons/limit-30.2.png 644 233 144 3043 13061246473 14652 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜØIDATHÇÍ–ÿOTWÆß™*J…ÌØ(3%•.’cªiŒ lj¥VAl*íh)I·‘ºÔdP‹!Y5®€›–XûÙAXS£dÑ•l»$lP ®0»A¾í ÎÜ;÷|ö‡áz‰ûx~¹yÞó¾Ïó$÷žçIZx ØSí©vG Û?µêËßYþΫßÇp}l{l{þuVÖ¬¬HnLn4îZØÜ7ûÏ‹Xü‹õ̺$‰UXÖ²¬Å¶}‡¢Ì¢Ìå)1|êÄ·Å·=Ñá3ßg>€KM—šø~íùµ`fûÌv°°¹oö›ó&ßb~9þœ¾,í\ÚieqËâDÀ•çÊskvÃûï½ÿÀØKc/);D $¨í@ æš\„Íý…~sÞä3ùM=S?æGÀ™ãÌ>üàÃø†ØÀÝï rmåZSOkNr’Ѓz z z€0¨ê6l`asßì7çM>“ßÔ3õc~¬W9í‚¡‚!0&´[úCÍ¥¹À¸¥ iCh N•Ú¤ÞPo€î×GôPªBU`­ÿò˜ÇÏ2þ­Íishúˆ¶V[ ÆTŒ Æ Æ€€©o¾Ê‡""éç > .áØÐ­¡[Àߨ ê-õ!®ð#?‚Ú«öª½@)¥”.2²ƒì¼>¼> S»¦vMí² õÞë½×{" ‘„x^õ¼ây\ùkf×Ìþç_G«F«T ø¼>/«b~DíKLILQ-0“2“÷ß|øö÷¡ö›š5;¡¹«ùzóuÈ‹äEò"àÍðfx3À“îI÷¤[6 oÞ4 V½yóþæýp´öhíÑZ«þ›ƒ¯¿öúkÐ踸úâj€p$芗û^îS-ÂdR$)b òÇɯ'¿¶ŽýÜ|ÐôÃnûnûn;d]ȺuÊmå¶räääXB¹¹¹Pß]ß]ßÍÿ­ž-=[z¶@æÆÌ™Á«òè“G >2cfªzª(IªHª0íÆ=QO´ ʡľÄ>‘ï÷þPüC±8·•oólóˆø Ÿá3DGÀ    d²Ù"£u£u£u"þ8œ?NÄæNs§‰ÌWÎWÎWŠÜž»=w{N$/'/'/G¤xUqrq²Híokß­}WÄøVDDœ"Ú¬6+"_*—rÙíö¢Òú{EÚ[Û[Eò¿ØwqßEJ“6:‰qÃSƒSƒSƒ ¼Ê«¼`è†nè0Ý0Ý0Ý¡äPr(&º&®L\ñÖñŸÆB=úÖÆž–Äô \+×€N%7ŸË±¥±\Q¿–c{ÔBêÓX€ª:U§ê@­SëÔºEyU¢JT p˜Ã^ôqihÏb9ÖéVnB `'<—c˜9f&ØLÞÂ%…K€ªX2««ú´> ü):·’Ÿ¿ÐB ¨ŸUŸê®qkÀ,3Ì€Š¨'ê PÈ N T»®éšúGtEt¨ï’¿¶ ª Êü5-Nþ÷_ùÂÞ.^ØûØ‹yƒý$; ·}¯=IEND®B`‚routino-3.2/web/www/routino/icons/marker-XXX-red.png 644 233 144 4020 13061246467 15671 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜÅIDATXíWLTW¾÷½7w,ýCÔ™UªnW!]v5YP4‘ÚHÒQ‹ØB¬f7DEŦ‘dÜ ÙÊFÛj0¤š‚ŒF¡JâF‹FK£­Ýš23Ñ1ÁŽ¢ 80ðî»ßþ1ï¾³V³Ù=ÿÌ;ïžs¾ïžó½{3„$l2±™”?Á?Á?ÁOŸë/ÒS:R:R:–ÿAa SØí/È|2ŸÌ˼(D!Šð»ÏD¼ÈõD};ž”oçcåWEªH•Ôf_Ÿò–Ò¡t(mt;ÝN·Dœƒƒƒ¸Pr¯ä^É=`̓5Ö<¼Þoé‹u/òE=Q_ཛྷ‘þh÷³>—†¤!i(4_thzÅôŠélgswsws7-ú$ú$ú€ 2bÆ0†„B0|}]Ä‹|QOÔ·ãe}þr~Ä5I Ka)ú»(Pp­àZÁ5uQ`<0Aºñ­Wë…Ê|c»ÆvlSc+fkØ€-`æ˜9˜à9Úˆ6UäÆñ@Qß lÃwM2¨Ñ6ÚFÛQö)û”}-ß‹Oƒ§ÁÓ Ä>âU¼ QµE½ ^¸èÜ~ÄÀy#Mdà;|`Œ¯åkJ¼T[´QmàñB^ˆ¨x_ðüˆã¾ã¾ãþÊ߉W«ÎUÇgã™^'Ê>Ñ&j¥(mWÛU¸Ð~¡´¨–€ŒÉ°Øóœç9¢-[À·5ßÖìk ¢Oà >?e«²UÙzcŸX8R~¤üH9ÿ“^ ¦¶©µj-hÇ´câ¢öîÙ»g‰Ï ÎÞ={/°-y[ò,qñÎþÎ~sUm‹ß‹ß3ܘÀ7:kãGx$#;#;# Ë–,7ëÀ 7Ü¢z'ÿÃò?Ëÿ &M€ø¥ø%¸š~5ݺ‘ýÏ÷?·öPûRû€›óqOà >‚Ÿ ú×ÕVX}ÀÜ ° ˆàY‰i?h?XýÞǽ€®¢«à½[ïÝ€¹G怼My›@Ý n|¯à<ÀÀÀÓñÁO'Н¼·½·½·@Æ–±el™­uqsì FÔˆÕ?:ptÀÚÁÌþÌ~èmïm·m4¢Yó†0ˆA€ía{Ø߻ллÐ8·¿’ô‡3áîpw¸›âR\ŠKD–+åJ¹’€l"›È&BÈ"CÖ£ŒÎ¡s¬>+e¥¶³î 9C!©©¶¼,šEÓÝŸHé#D:/—Α#¡H("ÁHÅR±T<þ³Þâ†ãUÇ«ŽWY$ÊRXе¯ÚuíºµCw7ÞÝhídiViÌ,œYRdoæÍ¦Øiv‚0ñ®4^i¼ÒhtòÏ4—æÒÜñŸ‰œ'çÉy5õâ+sÏpÏpÏ`YÁµÁµÁµ¦ôy¡vV;käâaÑÉE'ÀY鬀Ñ㇠óÍÎ7­8˜r0@LO{›}È>4·C 1Ù5Ù5Ù5šqÈSä)ò”£ÏHzQzQz!ÊUåªrµ5lø^×ãe; eU÷÷!¿Øûî7v¿a%ÒžÖž†ØûÒû€¨÷ìÚ£kí¨}»ÿ¨¸YqS‹7Ë›åÍÿZ—ðÓ"ÄnÓ;r¹ŽÜÐ1‘PíÛylç1^hLîõgÊ3(y·ä]QߨoÔö±ø4ŸU*ýî~7¬Ü¶rÀÊ}=¾sÔ'‡Zó[óñ¶q…ÖKõRýèr:•N¥Sç6'”oRß@7Ð Ëšh+m¥­B+Ú—¿Óßiö“í`—Ùe+!~‡ß±I£ÍÀOóÓ/äûù~SJáÖpS¸ p§º'º'ª[NÖʵrmµÇ VLŠI±â2¹.!KÈ¥–´‘6ÒFˆ‘#rdçyãjmrpPÁƒç‚ç¬ÚUßQßÜÁË0…ýüSþ)Àש3Õ™æ·þæúÞõ½l‡q +Ãʰoæ¶Ìm™Û‘<’GòÐÓ:»rAs¢þ»Nî“ûä>Ú9k׬]³vâ¨pT8*ü{ í.ñx ¬ÚÕ*µJÄáÇ)œðOñÔl,û ›Íf›Z<ôûCÙ‡²y¡q—;N‡3<šð]©öIÓ‹I£'4ÉýÆî»RÚ ž6µ[í«öY´ëTªÓ$¤õkýšy§ÇzЃÀŸÖ“Ö“ÖÃK M¦KéRzé_’¤x8‰ßòòò¡$í–¼@»]þ.S»j—Ú¥v™ÊÉÉÉæ Μ7ÈæZ<%Ÿ’O\,¤¦K/™à¯È+Ì ~I»®FW£ê ¶[ƒ­H\´q ¦ÕÕÕæ±£4)MJSþ—$íz®þž¼ö*‚É&Juížû%í.]µtÕÒU¦vý‹ý‹ý‹q"±ÎIÐ2ZFË–ÕØa¤§I¸”ü—ö*íæËõr½\Z —Õ•Õ•Õñ¿åŒåŒåŒ©ÿ4F‘#r¤z:i!-¤…èÇŽL›@þGKÖî^»¿ô'º‘n¤²‚¬ +´ßJÓ¤iÒ4€J(¹ü;掹c„È7äò zIO\—4¹ÿ›9§"RDŠ”ïíË—K\âèEz‘^|øëÄûÙþ¤É’ê¾rÔÿ?­¸ |´ÎRIEND®B`‚routino-3.2/web/www/routino/icons/limit-91.png 644 233 144 2407 13061246470 14521 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܼIDATHÇÍ–_hWÆ¿Ý$nÓE#‚q#«5ÅZ… f£•ˆh%jEÁö©ŠJj¬¢¨Ô—Ä'%¦$BìÆ?/â¿ÔR»(cü‚)ÖF]4ÙîÌÜ_vgg[-mß¼/Ã9÷œïûæž9g®@’T”~ üãüãü…)Ûÿ™çϯʯ µ¤ì£6ø–û–ßþ F4ŽhøàøÇÏv÷Ýøì|ÉÃÏæsý*’ç´Ú|‘´½VN_9=TÊþ¦ Ú Ú_[°á̆3Ѧh›áéõ§×"ðlwßwó]¼l|íþ¿yy¾G&AÉÂ’…¿HôM„š%5Kžä<É1~°ŸÃn"@œ8îú-Ëv÷Óñn¾‹çâ»|.J`dÅÈ –­Z¶ªàX*¡ç;Ø2vËX—/ÙìcÃÁŠ[q{½†˜NÓ €x¶»ïÆ»ù.ž‹ïò¹ü)=úkm-€ù+òì"i_¶/8 NI'iB&„±~·ú­~0Ÿ›Íf3o-§Â)wÊÁì1§Ì) 8íN;I^Ùçíó™îÊðeø•-¨ô[(xZð4ž ½v¯ ¼`18‡œC¼1S˜ìb;²¬e-kZj©Ççø˜“æ¤9™—)·SçÔ¥Ñaq†/ßғvôGظsãÎLrÖcë10Š2ÊRçp«ôVé­R8<ëð¬Ã³àÁ½÷Ü{ûÄ:té<ƒƒƒžß\5}¦“Uâ_†?¥'-ìç/¡õeëËLú:£ds²™„ë¹Óp§áN„^„^„^@ù„ò å`ÆÅg\„çÛŸo¾Ú£íÑö(änËÝ–» Zµ.j]ä ³#öl{6€}Â>áâ›uJ_*¼Rxå£ÙREeEeº¾ò3ßß\OwAwAwT<¾x|ñx©ëQ×£®GR )Ðh’NÏ;=ïô<©(Z-ŠJÁ™Á™Á™’©4•&ƒ+©P£5Z’ü“ü“\|ß1?¥Ç/åÔäÔ–òÎæÍ¤?÷è¯õ×zxU««VW­–^oz½éõ&©:TªI±²XY¬LÊmËmËm“"-‘–H‹î ÷„{¤ÁÁÁ,aƒÒ$i²&{|J_rÎ9ç|w$k©µ48R¿êš®yxCÅCÅCÅÒÔ½S÷NÝ+Í¿=ÿöüÛRpOpOpêu„:¼x„ KêU¯z³„Ù²dI’úÔ—Å—áOéñKñH<òË éꥫ—2°ë}ß›æ€þp=cvÙ5f—___ 5–4–4–Huê.Ô]æ>›ûlŠ566KyÕyÕyÕYÂ>VXaI2÷Í}ŸõZÏ?v¥Û5?p“›^W&î&î&îB¿Óïô;`b&fb@=õÔ{ù«9¯æ¼š‰@"dµk1bÿ¹+ß1Ç™9vÐ9È>aëÀ|jjMmVûO3ÓÌ4`?ûÙŸ%ÀÂÂJ½‹×Ûÿ{޽cò»“Ù²¯ØWœ­ÎV’ì%JcºÓ¿žŸ¸Á·ç£(¢øš6Ú0àÔ;õ$Iºxÿ:ùßÛå{{»xoïc’ÞÃ쟓ۀg$öIEND®B`‚routino-3.2/web/www/routino/icons/limit-50.png 644 233 144 2527 13061246467 14525 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍ–oHUgÇçª÷j––h/úkÿÈŠ`Kp–škÅV˜eÜÑ Óz±"Qß+ªmj!FEôǼ•‹Ê;Šr´a®–¦Ó&ΩÅeFÞsÎóÙ‹ãsïm[l/{Þ~ÿ¾ßï9ÏóüÎO@DD¦N<\³]³] Ží* ûc×Å®[pαk-06›~þkk¦žvÚîÛ:®ó#ëEÂø‘|Ú/S%ìð\ô\4r'ìC°eù–å±)Žýââþ4¡´±´àÊ™+gø îÜÍÍ…°­ã:_×k¼H|9ô7~ˆ¹sÃèÛã¹k箿ÇIx>ò¿Èÿ ?ª?J¹À&3YåèõG„­ãùº^ãi|ͧù=É9É9"°±hcQ\½SÐq*gUÎÒ|ÁàG˜ fÀ X^ËË[P~åÀÀ€°­ã:_×k<¯ù4¿£GÞÝÛo?…ͱ›c x¬'ÖÀo/´´Z¬ (+ÍZ`-«ÈÚjmîp‡;  U*ó¹Ùav€*Suªöqû8AƬ[Ö­Ð ß ñ…ø%RPZÄ Ä ¢¡Óê´€ÏÁÞiïdŒ6LLàwúèlì‰g­b«€•¬de„ÿ3²ÉòÙÏ~û}ˆ1Æ5þ_ˆßÑ3!¬ö{Øu`×fÄYó¤y2¯Ì/ÍB³._.¾\ ' Ož(„:W«ÎãsÆçŒÏ®›]7»nBMAMAMôz=á3ˆêQ¦2Q[ìð…ø=.ç»eøD²+²+&>£+˜-䑌kÇhÖhÞhžÈî¶Ým»ÛDš×4¯i^#ò óAæƒL‘g)ÏRž¥ˆlËÚ–µ-KäTú©ôSé"ëÝëÝëÝ"¯š^5½j1Rh#Z ºä˜ÓøÆŠwù3|.‘„» w?þD$'/'/$¬^ý*ñˆG{zzzE«««El·í¶Ý"Þjoµ·Zä±ÿ±ÿ±_ÄXj,5–Š´ïkß×¾OdJç”Î)"ד¯'_O–ÐRg¥UZ5¾QæwôD‹DåGå³L$æiÌSC× / á‘TRURUR•HQ{Q{Q»HæáÌÙ‡EÊúËúËúE_]|uñU‘™¾™¾™¾°€„¾„¾„>‘7Io’Þ$…ýòƒŒÈHȉñÅø$Y$jIÔ–¹Dìkö5ãsƒ¹!”˜,¿‰_üaœ¶¶6‘yævÎ>ǘ:¢|ʪNU«êˆëߤšT¨fÕ¬šAÍP3ÔŒˆx±ò*/PN=õöAû cÿWû—ί;³iµX-v…]A=ÔR‹RwÕmu¸F#[ÔH  ~R­ª¸A7Ý(°÷Ú{ bi¼ÿìüì¿òƒ.>ØyÌ™?´ ö/¬ЬÊüIEND®B`‚routino-3.2/web/www/routino/icons/limit-165.png 644 233 144 2731 13061246470 14603 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜŽIDATHÇÍVmLSW~Ú‚p¡BÑ*sœ•¬1q&ë²T-Sˆ‚ŸÕILÿb²Íð1Ñ%&3Ñ̘\üH$74ÅÉ"*Ñø5fÁZ?1 ­Tíí½çÙr¸U·ÿž?7ïyß÷yž{Î=Ï= ¶á'Hs®9לÍåÆ|jAjÁÔ?ãñ~4-7-ÿg+™YYM’Y5Y5ú}#–yYŸØø‰|r6)õ)õ&Ïp¼\=sõÌÔqñøW?©œTNÅÈuëIòÄ‘Gø#Ùsµç*Iz=¤˼¬—ý/ÛßãÈä³ÉgMÈ”Q)£rÒ‚I ¦lˆ¦K/YL’Ý–n‹0“$©õ‘´Ò*<$à SŽþ„Xæ‡ëe¿Ä“ø’OòÇõ€´çÛórÙšek”Ãñ†ûGÉ9s$Ÿz’äî •Œ…ca’ÔÖjkù–~á'Išh"Xæe½ì—x_òIþ¸¼»·»¿#½©ÞT’!’TÛI=SÏ$õ|µV­¥*6ŠQC!%‹Ub¥XIƮǮǮ“b´° +Éö²—Ô6iõZ=…–õF½TµrµP-$ù‹Ä_©®TII~$ ÊÛK]y¦< '‘z§>²5‹´ªKu1"êÄ=qÆÈf6³I1 Ä@Â|3›ÙLÒE]üp1YLfDâ“íí$©„•p8Iê¶¿\¿mý6Ù­Ï—Õ&µÉ€óÿæßãßCÏÏÏ<[À°‘»Kv—ì.!ï¸{àî#ß0«aVÃ,rßâ} ö- yUª¤xõÙ Û ›ÁÇï+:*:äÖîo3Ç×Íy7ÝsÝsìÓl“ÛⲸmÈnÝ0¦ùÊ|Û|pçÔSwNadøB¾/\Xxaá……@UwUwU7p«ðVá­B jkÕÖª­@Ë«–hKðùgøgÀ4t.R©@4ŽbšÍŸÝ!wH¢:O›ŒÖŒÖ/¿ÆÛévø L‡™ÊG|„ôâ%^cÒÆ¤I¬—¬—¬—€óúyý¼tmêÚÔµ ȲgÙ³ì@AZAZA\\\ æ æ 昇y˜û‹oß>qLÜ5qRx6ÎgJñ,ò,¤3`YbYB¾54jhd!Ä<–²Xe^eYeAGÐ^7¾n|݈ãâ¸8ØoÛoÛoùMùMùM@Í„š 5€@G #Д=/{^ö(ÚP´¡hPùU¥³Ò ü}¦ùpóaÀT4Ì÷¹ÏÜH=f@?£Ÿ1u@ÄŠcÅ#ÂìHÆS<5¶Œµ¬e- zDè¬+¬+¬+€t_º/ÝT¬8XqÈd²ÀØØ0Ý1Ý1Ý”/_>È9zŽôÞ¯õk«Ô6µ zÌ@ØöܽóåÖË­#2Êð…HÉò2’3’3’HW¤+ÒÌQæ(s`škškš P2•L%pô:z½ÀNçNçN'°÷âÞ‹{/¶c¶c¶c€;Ç=Ö=X›Vò¬ä™Äg™åeû‰öÀˆžÿ;•<«‹Õ§247ä 9É7OÞšÍæ’}ŸöíKŠ ±]l§ 5¯æ%ùt˜o„?®Çð1*=JO8‰ìÔ:5ÃÇHݧûaô=?òÑG)ÒEºHO°©RQ*JIýš~M¿FŠ6Ñ"ZòÕ±P,Ä %~×Ô®©$ß*•ÇøØ8¿*Y{ = 9NÛ¬m¦Êm¬cáüüƒGy”WÄq…d-çï /ð«YM!ZµÉÚdªüKÛ¢mùÕµSó&y“äJ½ãüí¿ò£½]|´÷±óû/)@\9Y!”IEND®B`‚routino-3.2/web/www/routino/icons/marker-16-grey.png 644 233 144 6055 13061246465 15634 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü âIDATXÃ…—kPTW¶Çÿ{ŸC? O‘Ç%^Á'(£&&€NRÀ'ÜfÊ%VI&45)±´š"71—˜Xƒà˜‰âU^ ƒ\!š ¹”jºx6$*…n¸ÐÏÓgßtƒe*•õåÔ~œµ~gïÿ^{¢Ñh4 ¼1o¦ùÝÌò£ü(k՜՜՜e… >ø},óa>ÌçÄŸ… !HŠÓÖdk²5±P…*T‘|D#Ñ1ˆAoâM¼É>’n“n“n#ùü8?Î÷T#1ã‘Ê‚€‚€‚€ö¾¢¬¢¬¢,2!„ áB8I™ç¿wqyÓÀ؈ô¼X(Š…â÷ö9ûœ}nÙºBm¡¶P{~Ì>aŸ°O´]7¯5¯5¯OY¦,S–¡%~küÖø­$½ÇzõÀ:ßu¾ë|wÛ=îžï~ßíoÁ¿+ž;¾›ÇÍÇ»VðyæÉ<™§ø:ÙCö=áe\8Î…_9=W=W=Wæë׿׿׿<´upëàÖAêX©[©[©#iÒ|i¾4fÅQ…f˜a°»±@0‚ ³-Äb Aš®Cסë`Žo¢¿‰þ&Z<4ùÒäK“/íøD®W„o’9÷8÷8÷l)cÙ,›e¾N@@@Ÿ'Ç­Ç­Ç­:ÐŽ§ø&¾‰oê¸h·Ø-vKXªêEÕ‹ª…ê}ê}ê}üyïï侮K±‹d‘,<†0„!K°KÌb³¢…(€ “a2 ðÀ›-¦Å´àF¹Qn`嬜•ÃÓí_ݪnU·òçý2ü2ü2X„›ÇÍGY4‹fÑÉp$:‰@RoRoR/¶zŸõ>ë}±Kì»àIÔDMÔ®à ®Ævc»±¸Óx§ñNãâ–331€Œ`˜[3·fn pÓvÓvÓ uuu¤‚T €Å²X OïrïrïrH’n&ÝLº‰­n7"„!âwoù<òyäó­J\•¸*‘T¸¾TBCi( œ‘ÎHg$`»n»n»ÔûÕûÕûíeíeíeX0âM¼‰7ð𳇟=ü 8eÀø€DÓZCkâHI0 &Á‹———¼Ô¼Ô¼T Êe²EgÑ-γôXz,=Àøèøèø(`ê5õšzb}±¾X4ìmØÛ°H¾“|'ùÎ ÄwÄwÄwãÓt'Ý àNቦ\ıڙ„™„™Œ‡…ÃÂapTFeT†F4¢¤©P†)Ôaÿ6ÿ6ÿ6À¦Ù4›~l)EˆAA,7,7,7€W´¯h_Ñ@mUmUm`0ZNËi9˜Ë 7×;×;׋ª¢*ªbµTö±ìcÙÇBéHÀHÀH«½]y»òv%€X°°L–É2ÖÃzXÏã{‹´ð…/|»évºnûûûäo“¿MþXÛ¿¶m?Y™Y™Y xOâÑ£;Gw.nˆ>UŸªOô÷ô÷ô÷ðŸ²ÙˆlD(¥PC uA¯á5¼†ä·û¶û¶û:U¦5¦5¦5PqfðÞÀšZRKjÚI;içb¿tD:"‚/_¾ ¼;ðîÀ»‹ã?œþáô§Ô 5@ÐÁ ƒAas +¾®úºêë*q#Ñ=ÑãoÄIœÄyZB¯^ ¼úá1I’$I’T}wrÝäºÉuœ¡þpýáúÃ΃.ž,ƒe°Œ‡°°°¬»­»­»y˜Ò Ó Ó C¦!Ó h–i–i–MW›®6]6ŸÙ|fó° ]A»‚vAÚ°©aSÃ&Ñ|¿ç~ÏýzMò©äSɧ?lwŒ9Æc‡äøÇ<þ#€.t¡ëßÊ=x<ðxð½|V;«Õ†eo‘o‘o‘³ä”º”º”:rÕÅÁF¯^½ÂÆÙ8Tª UÀzY/ëH‰#qÀtñtñt1`H7¤Òÿÿÿ Äb±Ã|ûèí£·âO玜;rî¾VØv…ÝúãǸø?!1ˆéßKi­¢U\7-¡%´äÞ;â°8,ï±+:Š CÕ¡êP±º÷tïéÞ÷–Âö…í Û·+¬°."ñˆ¼’¼’¼’€¸Ü¸Ü¸ÜÀ™™ê™ê™j(ZR[R[R•H)2E¦Ž‰dÙ@6ôïE)JQʇ¸Ê<çúùº‘ÿ )#e¤ìj.M¢I4éP²‘lúW­]k×Ú…S©ÆT¹An˜›Åf±€ 2È€…ê©=èX‹bQ€¨•¢rA:ž—Î_:é¼ó ±ÅØbláË¥þR©ÿ…¢¨’¨’¨’O® ( 1Œa [Üõ¨cØЇ<ä!4Å~ûUìW¥”½%{KöÖ…"c 1ÐÈ›ê'ë'ë'µK~"?‘Ÿ`ƒ:èÌ×e‹6_æ1z™^¦—!íÔwê;õ,¹kªkªkŠ+U>¥|JùÔ]«ý¢ý¢ýâûöôôLÏôL/——/Ý f׳F\".—ÀëÖý[÷oÝìyö<{Þû*}”>JŸÑšAí vPË•¶f¶f¶f²d’KrI.¤â9ñœx rÈ!_̯D `y¨¨¨Ç…¶Õm«ÛVÃK9¡œPNb‚˜ &¼ÿá¼ôîZ]R,w…”… Èýá®_©ûP»òn)ÚІ6çA²‘l$“ÿ8ÿËq城GŽ#GÜ¿CÜ!îéæ•%+KV–`›8 ˆPÐCc`ò…|!Ò“‘'#OF:£&6Ll˜ØÀ ÉVËVËV—nš?4‡®‰b…XÁ—»vÖ}Gyaƽ¢pu,hȥ݃.í–»´Ûø í:´­CÈ1Uš*M•PPJ)¥pßUÒvK»¥Ý"šïVÜ­¸[Á ÉŽÉŽÉŽõµØîÙîÙîûdèå¡—‡^\€*w>u.\$Oæ¿'&(\þ×¥ÝþB»AÆ coªÓÔiê4΃®ŠÞKç«óÕùâÝÝÝäuÅ€b@1ˆ*Q%ªöϿƿƿfy.b}ÄúˆõtÊïî¬ò$‡_±ÄÄÄÄÄD®¦ŽI˜„IÈÛÏN<;ñ,¾p.w.w.¿.H#¤ÒˆÿëÏ[~Þòó߯Lý¦~S?û¯[_ÞúòÖ—Îçg³ŽY—ç±Ùc³ÇæÃ!¬’U²ÊÿnRH9¦0…)Ñ]þH] %<ÉCðö+Ú-D+ZÑê,`M¬‰5%ÓÚ@¾°¦[Ó­éâ³´ŸËæ²¹ìo¾‹lˆlˆlø}¢~X?¬&ÿ#.—‰ËØi—_­ Ðük¿aOhו.œÈE.rù’E²HÖ¿"Y+ke­GvËCå¡òPÚÏqcÜØ½Pñ„xB<‘s`ûÀöíÀ< "\þÜ…¥å·8þÝÛÔ8à:ÐIEND®B`‚routino-3.2/web/www/routino/icons/limit-12.png 644 233 144 2355 13061246467 14522 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü¢IDATHÇÍ–[hTW†×Ì4ÉŒ“DSAT"ƇŠZ °Ì DÅ BˆB[‰"чêS’‡´5x)†¢õ^ Q$kˆ/ÞˆÓDÛ"uÄ`H¨Qˆc#1Æh’9gï¯gÎE)ÕÇœ—aí½Öÿýûì³×l™‘ùðÏõÏõç[±ÿ[w<¸"¸¢è¬5Á·Ö·¶»¦š~ àTÁ)ÕãÆö¼ï­qõ½<{\fˆ;Ó’Óâ‹eâX_¼¾8ø©H@èBè˜[.n¹Ðz¦õ ÛaðæàM€áØp ÜØž·óíz[Ï«/ ïñE ëRÖ%ß#ÈÉÎÉÂxa|~•ðÏ|X½jõ*€ÇÇíó9K®Ž£Œb?CžØžÏäÛõ¶ž­oól¾åG R)5×l ´ z~…]svͱyé Àö ƨ1 `Vš•L€Nè>|àÆö¼o×Ûz¶¾Í³ù–ywo*ƒŠ`EÐ1Ôf§Ù ¼Rª‚tfB«¯T‰*]§ku­óÆPIuGÝã‘Ñgô×óô<4¨FÕHšqóšy ж¾Í³ùâ5ôÙÏ Ž~}fŸ (ÊAmR›xcƒÍ~³Çìݬ›u³kHé!=4Ð@ƒ;Î÷ÔR z’,PÔÞd˞÷üdŒýªë«ëuîÙ­oèËú²ËKìMìMì…þH¤?âŽß½u÷ÖÝ[Ðt°é`ÓA¸wåÞ•{W< øMßÖ·Ñư1ìåÙ|ËOÆØßßÁ¹‘s#Nù×üan3·1Áaö³ßn™Ù2³e&VVVB[¬-ÖƒþìþìþlECÑPÊŠÊŠÊŠ p]áºÂu,I–$K<[~;]“®aÂá9|Ë_$¿#¿ã‹/EJ——.Ïì¯øNÊÿ,ÿ,É‘í²[v‹$HPDžÊSy*)ˆD D   EªªªDvžÞyzçi‘«®>¸ú@$œÎ ç‰$—%—%—‰óð£ï¼ï¼ä8<‡Ÿñyyê> ¥†RÞc¯Ÿëçî ͸7ãn___ Çzõëõlq}¢>QÅ‹‹/†ÍÆfc³ºRWêJÏ·W£7è ^žÍ·üäwäwè\2¸ÄS¨t§îô+7ËÍr7.}Qú¢ô4w6w6wB*˜ ¦‚õ2ëeÖKØ·cߎ};àuõëê×Õ`¤´‘öèwëãú¸'vø–¿Èhl4–üKäÆõ×ýøõCýP&Eä­¼‘E²H¹[1M¦É4ÉÈÈéŠvE»¢"*ª¢**Òm¶FEf·ÏnŸÝ.Ò>Ö>Ö>æÖ«ûF›Ñ&“Ïágü|ì©ä­´ºëQ#jDÁdx2<†‰­['¶Â3õL=SêJu¥ºàɉ''žœ€ñÆëÆëV¥ªÜ>LØgé#Ÿ÷òßÑûPûˆÎŸVUªÊíüÌ Lø…Ãi¤ôY«ñê?­oT·ènݦÉ|e¾" f¯Ù –Òÿvþ)û_9eoSö>65o°ÿ[Ÿ:'RÕ®¤IEND®B`‚routino-3.2/web/www/routino/icons/marker-78-red.png 644 233 144 4234 13061246466 15446 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜQIDATXí—LTWÇÏûNeM@™ÑÖ«t .¢‰‚2H»S¢˜ ¨ÐHíZ¤ v4mlØõ'¢u+i›ÐV³!Èh6EE¥(*–PÚ¥­Ö1Å:3Ql #?†_2ü÷¾ûÇÌ}óf²«Ùìžæ{î=ç3÷~ß¹3D›HaÆ/¶EÛ¢mÜpp@7®~\ý¸úé¢$J¢ÔQMói>Ía¥‚DId>î+l>[Ïò±üáõø¥á‹³ùl=ËÇò³z/ç!~I¸?ãs~ä]óÙ%''Kœl=Ùz²U‰èèè @€€ aC\pÁ¨~0Îæ³õ,Ë^oÆç/ç#Ãk|ßÅw¹Y‚Œ[·2nù9ÆcŽ184%EIQRà—ʤ2© R¥T),’E²hü`œÍgëY>–_«oxMEãê¸:®ŽH<,×|ǘ+Ì{Í{ýl¼P^ˆÍhíh- ¸ü&¿ €/H‚$•3Ê„Ì'ÿ"ÿ(®1ǘð×xs¼9€²G–d lš¹Â¼ß¼ßoaõ㣨ÇQ£ÿá÷l‚á áˆáˆ’ì|îìpv ?˜g@:&wËÝ€øCûxZW¶ËvÀgø !L:æ¿à¿Êæ|îJr%¡ßpÐð±ác%™ñ0>—x‰—jßWî(w”;†Ì#Æò«åWÉþFÑ›Io&q¹’mÔ0j ¸íÒÍK7‰È÷ÃñŽÑ„ûm÷Ûˆˆ¼ûà]"¢{“ïM&"ÒêF‰ˆâÓâÓˆˆ\{pˆ¢††ˆÈ÷tûÓíDü²æf"ÉÆóÅý›E“îOºOJôéèšèzØx·ñnã]ne€oæó wü¼øyñóPÑ»¢ÇÔcR¿©Æþ¬þ,z»ÞÞ{àÆ¸1ˆ5Çšµã?5þM±M±Úñ¸oã¾Õø™U™UŒ£×F¯…êõ®èÙÕ³ `<Œ]õɪOV}¢.‘ò$y7fb& ß¾ žEžEÚCÜPµ¡ –¬^²Z;žÓ–Ó¦vS»vüÇë?^×»ÏW¯$‡vFã ‚â|~G~G~GHBR–”%e…iîuùu­ÿué×¥0ùØäcÐ߯W·T·éI–&KÌ==÷4¤šþ)€ÁÞ¼Þ<@úS¸„óä/È_ öíó|ðáï]­]­]­äðò^ÎË‘ lv ; ôG¸á&¢A.KÓ¶²Ö}´Žˆèí-oo!"šÕ;«WwÞpÞ "¢ "4‰ˆ†Ÿ?'"Ÿ£ÙÑLD?{¾ò|EÄ_ € n—Ûåv‘ƒñoá-¼e¬;¸Å§JN•œ*ÑH`¼o‚o‚æ»z/]¹tbÊbÊÀ±Õ±U»ž‡ž‡ Þo@ejeª&¬vŠ9ûæì¤s³ f‡êÝ8~µýj»º“[9gâLcÝ$¤ iBÚÞrÖŒÓÓÓ¥εεε¡ö¡,g«w¬Þ@É8‘q"츶`‹Ööδwà½iïMÓª¯óPç!oÅí‹Ûe¥e¥ðŽÃóöÎöÎöÊê $ B—ý¤ËÖe벉ıEl©íR~~Ö†¬ Ò.U¡Öá’áxaÓ%èŒýþè÷Z0ŸÛçÖúMM0nݸu¨…ZôòË_¦OLŸè‹ë‹Šïl^¹y¥<¢n6 ›ïü7…[ÒQ¦(S”ÉõW¶ÀZ¶§mO[h?ý“ª/W_†¸r]¹Ð4r¥YiåWåW­TžxzjŠjŠiã•éW¦‡ö÷Ì`]e]%ÞR¯Ðr¾œ/]ÁMá¦pS~w2Pø§z¥qE\QVWËÕrµL+òû¶fÛ!Û!ØTíî’.K—„PxáƒO¨(ÉJràõG5 ,W¬Š5$¥®Ú'åOÊãø¤¾¤>ÿu'÷ Û„mV³Šf! YDCˆ5“2)SÜOuTGuD‚[p Î.ªWk•7ð~½óÃGsÍÑjWIWÒµ€A`&:›<*JÁ˜2¦À‹Àï*løÇúÁõƒÒ.õn»ÅnÛĉ;wñfÞÌ›¹sAº sBð³@x$<q É»“w'ï&Š*Ž*Ž*¶Pµ›iÎ4gjµ+[e+¼°Á€>ô¡OÓgI³¤YP˜_¹°raåBe¹z—ë£ôQú®Ñ௥ñá'Í5E=qî7á¾a|@»Îs!íZˬeíêýz¿>$?“ŸÉÏBZ´Ã;`‹±ÇØcìJžªI¯ãuëÿ!Å/"ø¢éåBe„vóþv›mÍ!íú›ýÍþæÐ«ô"ñEâ‹D`®g®g®Gš©jñ¬pV8{b1“ZPz‘€qô M` BÚu nvŽŽûõÎZg­³€^xáa¤Ökƒµ!ÔvÄ*±J¬²ÿ’ÄÜŽ¨§ØWF[°>¨Ý ÿI»Ër—å.Ë i׶ضض Äõ$¸B®+ÌÚ^†ï‹¨ËÑi¯ÒîR¡\(Ê]© ¸ð`áÁƒÊ_R|)¾Ÿÿ®zÔnÁ-¸­ITC5TCÁ¶#8#êEÓÿh‘Ú=î/û™ÛÄmâ6”C9”#Ïá§òSù©GqtýãˆqÄ8B$´ íB;w5¸° âäþo¦WŸ²)›²ÅïÂÃnä^á€k⚸¦§Ó㿵EœŒ#"ï+ú_Rôm2Žú>‰IEND®B`‚routino-3.2/web/www/routino/icons/marker-40-grey.png 644 233 144 6162 13061246466 15631 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü 'IDATXÃ…—kPS×ÚÇÿke‡Ü4P¬•JÉp¿ÉË¥bµÅŠU°UÆC­•Ñâ¥ÇZ=ê¡Õ„ÞµLÑvŠzì±¢x<• ëiÊ)b妕2M$V4’„$;{½H c§ÓçËšµÖ^ÏóÛÏúﵞMòóóóóó¡Â˜™Æ:Ÿëáz¸¦É?:ÿ4{ªðAáƒÂ‹"˜7ófÞ6ð3øüŒ¸{µ½Ú^ÍöãNàÉC(B àîà€ä ‡í—,—,—,'yÜ7À Ü8A†É0þûñ‚éÓ ¦×Ý.Ê,Ê,Ê$F>äIê‡pÕÍ¥¢ã€IHB=+ …B¡pÕaqX¿øÂšÂšÂš³‡Ñatk›­±ÖXklÜNE©¢TQŠKq)q)q)$/Aœ Nñ>ñ>ñ>€§ï™÷<ïYïñ7îßÏßÃãáãܜǔLɔ’E²HV`©(P( üþ–3–3–3ÏúøÖúÖúÖºv¤ÜI¹“r‡:£:£:£:ÉRIž$O’+ÞÅ»xrXa…À:¬Ã:Oãi< «Ýßîo÷ÇÒÎÆÎÆÎF欭­v ¾<øòà˯"”ÊçJ]Y®,WÖÂR–ͲYvÏ:ìÝ;ºw@#Ñè?™«æª¹êÆ9l›ÃölšúEõ‹êù¤Œ·2ÞÊx‹;«2«Ì*3Ô˜Š©˜ ž³` wqwLÂ$L0‚ŒAB¢#:¢Gx„GàLJ“ҤĽ Ÿ]øìÂgüš{?ÜûáÞÜu/™—ÌKößËür~9¿ü…Ux/à…¾ÇTÖ&k“µâ§ÄO‰Ÿúè?ÖËÖËÖËϦ©3Ôê ~ivfvfv&w]%SÉT2LZ…V¡uT>T2Ö>¹}rûdÆ †CÇļk‡k‡kÇx×ҜҜҜ"äzx<|”âƒø çr½y?ò~„ýÑÉÑÉÑɤÌýâ^TKµT °T–ÊR´¡ mÀÏoþüæÏo¥ÖRk©è¹×s¯çÞDÆtåºr]9päâ‘‹G.š£š£š£À›¿ØüÅf 6¥6¥6 ‡éazx|™Wtdtdt$)óðxø8û}È>„“©©©È“]“]“]ƒ•ía{ØÈŽp„DC4D777U³«fWÍŠEÀi9-§½òê•W¯¼ œ8pÈÚšµ5k+Ð.m—¶K ›.lº° Ht&:€J¬«ÄàdŸÊ>•} kÀóÏ<¼›C7‡náŇø’Pzžž§çÇãH˜óc~YKÖ’µ€c®c®c.P1R1R1DxExExòXy¬<V +…• ýÉýÉýÉ@ä’È%‘K&ÆÃ¼Ã¼Ã¼îwŠ;ômïÛÞ·Oš„¾Aß o8†c8FB©h†h†hû·9ÑœhND7¿„_Â/ˆvÓnÚ æYYývõÛÕo~*?•Ÿ Hß—¾/}àÌqæ8s±Al&"¹\ ®@Ò"i‘´LŒSJ)¥Ò†4€_˯å׎O{â‰,7-7-7ÑMÕTMÕìßœ´XZ,-æKº§wOïžÎüéüOç:Oò¦$LI˜Û0È[gµÎj>|ø8»ûìî³»¼ƒwðPSSÐ^ÚK{ÉöÉöÉvÀöíÛ ü—ü—ü—¶` ¶œŠSq*ÍhF3lú÷ôïé߃\߯ï×÷ã ´[Ú-íæKD Ö/X¿`=ïõXõ‹Þí?ذÿ K=[3[3[Cwz z z Âlá-¼…‡DdÙEvÀõ‘ë#×GÀcócóc3 Îgˆ3€Ø ±b7&³Él2ÞÀx 1!1!1hoozÓzÓzÓ€´ýiûÓöÃ.ž&ž&žÙ™–3-gZ„$K—¥ËÒE.r±\,{Ü)ZmYmYm¹úýháháhapÎØù5ûÏŸ3>çÚž´1icÒFš™™™{LULUL¸ˆ‘ˆ‘ˆ@ã¯ñ×øËü–ù-óB—†. ] øDùDùD×:®u\ë~¼ÿãýïº>]Ÿ®XðÝ‚ï|ÒÒÒ®’VÒJ*Xµ±ÚXm,Ý,M‘¦HS~^ålu¶:[W¦’½½{{÷öhE+ZgˆÄWe#ߎ|;òí³Ù .d/¥6¥6¥6‘+®8Wœ+ c'5¹Ý»ÿv?0³~fýÌzÀ'Â'Â'bb«ÍÓÌÓÌÓ]º.]—ø•û•û•ÏŒ>3úÌ(¬999XY^R^R^‚ÿ“Ûä6¹môe&b"&Š[9v‘tm¤ô=AOˆÚè!zˆêß*t ÝBw–CÞ o7óç5Îc‘;;wvîÄ9Ñ Ñ Ñ Ø(£Œ2 z z zð ô ô üÍw»‹°PV*+••@¼6^¯4›¯›¯›¯C~i×¥]—vñj¯Q¯Q¯Q€˜ˆ‰˜öd™CætmD JPÂùSÏ7:V7rûH))%¥W¶Ðt]°£ÙÈF6=ZÃjX ã7™ššBNÚI;i‡Y˜#ÌæXƒ5XóÐ:Ô¡`Ñ,šE‚T RØÝ³ÊËÅ—‹/»¶Ÿ>9|’;"™)™)™y®(¤8¤8¤ø“ïQ€AtüBO=ª€øÛ؆mØFª#¾‰ø&â›’ti®4Wš{®hØwØwØ—3]˜taÒ…I.Ïɧ$ëÈ:²v¼÷ñ>l°ýx¬Êb´ŽÖÑ:H®é¯é¯éÙK­­­¢…R¡T(ûFçççv}|»àvÁí€é™žé1Åíå+¨ÕÝž& “„I˜rëþ­û·îŽmŽmŽm»>Vx+¼Þ=çïÔÜ©¹S#*Ѽ¦yMó{‰l![ÈH„r¡\(ƒ 2Èö+û•ý žð„‡í¡þ¡þ¡çjcjcjc0EaTF@H…Ä]I¯oÔ-Å#îc5ÕsÏ‹»I$î®{‹D%¨E-j]ÛII"I/¥ýr|ѹɹɹIøëëÂëÂëu(êPÔ!,´‚VÐBNÃh ƒÏãóøþ<øó`WˆqŽqŽqŽè®4F#)™;öÑì¸.” eBwĽ³[=;VTTTTT³'£pŒkÈ­Ýíníqk·êwÚuÖ8kœü&ÓqÓqÓqÈÝ7ϯžLÔÙêlu6ÁÚWÖWÖW&º+Ý#Ý#Ýsû’½ßÞoïßóÉÝÅwß] ¸Õîuràøöä%ûÄr·ƒ&·v/þN»3†g ÏàL_çÿu¾k»»¢ŸÒéÓéÓéƒSmmmd\+×ʵ€ Ô‚ú¯W¹ÕÜjnµíù „ „ :äŽ÷Š»µ=É%ÂXrrrrr2xw·“y1/æE6ÃáÆpüÓ5Ë5Ë5«™—I‚$A9úËÂ_þ²ÐçS—©ËÔÅßúêÖW·¾rÍqŽ8Gœ¢mâùâùâùógÇÙqv¼â$@"º‡! aHxÚ³îDñOòü‰ýv ¡W«fÕ¬:YG+i%­l]6ºlt™..—‰Ëh—([”-Ê®ÿ!¸2¸2¸rQ²^§×éuä[ÁOðüØ?Ü~kÜ€Ö?â ø{B»îãÂU0VTp7H&É$™ÿ f¦aš¿¯“Èd´KdD†þá€p@8°é¾v•v•v0ˆ ·?Oaiû3Žÿþ¼ô¸(ÂIEND®B`‚routino-3.2/web/www/routino/icons/limit-10.7.png 644 233 144 2755 13061246471 14664 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü¢IDATHÇÍVíKTi=3ãÌ4 Sʈ_*¡µÔ¬¶IÁ—6pJ3 ÌÒb£"«5ˆ¶ÈÊ–ŒèCm}ðe³ ¦ lI*‚4Xle´¤ {ÁÝ&Fm5Äm&±[ëèÜ{Ÿ³fîÌXÿ@Ï—ËïíœsßÎó€Ì _Aêçéçé­¡X¿;šŸU2«ä›æPܤºMºM×’³f7d¢+Ñ¥¾ŠÆZ]ë¢ø±|ZsM˜[Ì-:G8>E:—:—ÎJÅ¿t’–;–;ŸdrÏÝ=wIòöµÛ׸íí&ÉqǸƒŒÆZ]ë׿5¼X|œúŒ ­ÆVÝ i6™M™ZœZ¼`¨a`Yº¡tIŽF BO’¤òŽd<ã…ƒ¤D‰ÚòÅÄZ=ܯÍkx¾Æ§ñ‡ô€´Ú ²lKÙË•ÐÀ«ëäṇçj|Á;$Oó4ãIY’%’T¶*[9EŠNÑI’ÔQGFc­®õk󞆯ñiü!=˜ùnÏQ*–#‚©…AcÐHŠ£²WöR«±D,‹HyX’‡HqPùÅn E?2 ²-è ºHù}_<Ø\»¹Vx®(ú*%Ȩ#-^‹WŠ#û‹ú‹He€$¹^ü&Ëãü/´œ™Ì$™Ï|æÇ(X˵\K²”¥,ÉOsšÓ3¤. "xëɾG}HÒ"Y$).$,£.ü¤šºÈª#UGHÑN’êr ¦ó×Îë×)^»_?xý ïmð6xÈFc£±ÑHJƒÒ Ä/Ö›œ79orÈú?ë;ë;I××q×qŠëýWŸ^}Jþ“ñþâû‹êrrÿöýÛIµ6¤l€gÕ¼tã쳑»ªl±Ýh»ÑÆ©¸ŸãÄ [†[†[†Iu¯ºWÝK.™X2±d‚\Ö±¬cY™>•>•>Eú&}“¾É¨0·ÍmsÛÈ‚U« V‘«}«‡V‘¸œúý‡žÌžLQIÞsÝs‘òdHzkµÆž‹ =…€&Ð]Á¿†Ù†Ù0'e$Ù“ì@‚-Á–`ZSZSZSócócóc ×Ñëèu # # #Àý[÷oÝ¿…ÈÊÏËÏËϺ»º»º»€ò§åžr°Ë_¹®rÌk›s^å¼Ò]áOv½]Äýe=c=cÏÕcá‚á³ãiãi@¬ø¿×;W:WYÃY#Y#@àaàaà! ^Š—â%ßßß`õZ½V/0i›´MÚ¢yÓnÓnÓnÀWï«÷ÕMóšæ7ͪ¿«ÞY½3񾂡©ÑÔÀn8i8É,=„zW½«óò&y MßñT‚JPR{S{S{±´±´±4àmîÛÜ·¹ÀiÈ4d[xlá1`¬b¬b¬ÀFlÄF 9­9­9 Hv%_N¾ d:;;QâÓ5)£Ê(ƒÚ¦¶éî#UI•Ô{•¢RT’<ÄC<ãA~äǘ¸VéWúgøX˜OãŸác1Î/W* Qçg²Ü'÷‘<¡ *ƒQççÞäMR<=¢‡d;ÛÙNòSh¯Cb@ TÂý6å¨r”AžPŠ#?Â÷¹ó½{åW{ºøjÏc_ç ö«‰ÚgtrëIEND®B`‚routino-3.2/web/www/routino/icons/limit-3.0.png 644 233 144 2552 13061246471 14572 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–mhTG†Ïn\7!ÙTCZÄD ©Š_Ñ„Š¥‚Küj-!‚¢¶ F±¶éi)j‘¥¨D%´*ÚØ-R£¡T˜-¦. ›Àbš˜¸›æ£{çÎÓ»³÷ZíçϽçÌ9ç}çΙ÷Ž€ˆˆÌI?¼ ¼ ¼ù)ÛûžãÏÞ”½éµK)»Y§ÆSóÛ'ðÒÉ—N̽0÷‚ÝçØfÞÄ»óEœún<ã—9â8ü­þVO0muËê–e¿œ²¿º 9m9m[ðþïÿð}Ë÷-4@¬;Ö 0 ‚c›yoòM=w}ùü?ø"à ùBžðÏöÏW7¼º¡ä@*à¨ÚRµ`(k(K{@ýä‘§ƒ@‚fŒ¸l3ŸŽ7ù¦ž©oð ~Š@áºÂu"P½µzkÎùTBß·ÐXÜXlð’mÀ|AX + ¶©mÌ€¾­oàÁŽmæM¼É7õL}ƒgðS|äé½mZ®];H$ï€P`OY[­­$­?•_ùÑö=û®}g<æ1S¿©+tXƒ*Wå¢õVØ “Wq`ÒÔ¯õ×ú Á¦õ®­yýkȉåijHF¦#Ó™úïð™z¨2I'#Œ¸ˆœà'€.TkX×#‡8T©ïÔw)ZÀ;ü™ŒLB?Í'M¬ùgØûéÞO!Õv’L$ÞÑ}ëûÖö­…¦–¦–¦èéïéïéwpí3öûŒcG‘p$ §|§|§|0p¦õ@2œ g²Ë2øi>ib=Áå'—Ÿ€~ @ïJgÌôÜßÐßÇ Žƒº¢º¢º"˜¯çëùº£ÝÑî¨CèÑà£ÁGƒPÖVÖVÖËo.¿¹ü&”ΔΔÎÀXh¬u¬5>£¼¾áãÉïÌï\¹Zd]åºJ©ñœOï´_ÅÔ¸9’<’<’©ß\¿¹~³È¼sóÎÍ;'2½gzÏôÉŒP}¨>T/âïòwù»Dzƒ½ÁÞ H ˆ""…ÅÅ™p¿þÖà¥ñÓ|f‰dUeU±DÄ÷»ïwx>‘Q9ÁaKaéÅÒK¥—DЦ‹¦‹¦EvtíèÚÑ%2reäÊÈ‘@A  PàSûÕ~µ_$¯9¯9¯ÙñçææŠLLL¹âå×4žøÚ}íR(’µ8k1Kò;ó;u+ÄÊcå ŽðÔ¸øãÅŽ‹°rûÊí+·;þUÞUÞU^8>>×q‡ŽâŽâŽbXºb銥+`hõÐê¡ÕP+‰•Ä sKçÛo»zó]ó–Â7|ží±x¦Çnq‹™ø`üAüOOOC :P¨†7vÞØy†® ]ºåGË–…ñƒãÇÂîE»í^¹ ¹ ¹ ШU£r/Yµ«vf8ùü{öTšSò‹uݺîœ"ë «Ì*ƒá«ÃW‡¯‚kçÚ¹ 'ô„ž€Ñ£F€Þ¨7ê kt®Ñ¾Ñ¾Ñ>°ÙQ; ¤Èi”5n½üßSéÒ±©ÈDdÂ¥c³Ô.µ‹I}X_Ö—]Z©+u%°…,t}ˆ}ìcØ ;a'\ñ»ôq}øPÝS÷\:–ÑÍçê˜Kù©Í®Í,£Ì꾺|©†Õ0I}MGuÍ7œç<0Å$“ £:ª£ÀßL0üDˆè=¥§Ð„ìWìWH‚êU½æË%ïdðžUþö_ùÂÞ.^ØûØ‹yƒýÄÜIhöIEND®B`‚routino-3.2/web/www/routino/icons/marker-7-grey.png 644 233 144 6034 13061246465 15551 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ÑIDATXÃ…—P•ÕÖÇ¿{?ÏáΑƈ ⇠‰òËYœ@}…ò£©¼–øú*sÆJ£É (ŠºÞhÀ˜—éfB]ä€Ð‘ Þkð:9†/# Ô¥8 ç÷sö~ÿàpºÓ´þÙ³Ÿgïµ>ÏÚk­½RPPPPPo,ˆaa ›Ä1qLãm_|Qð°hªhªhjs$Ws5Wð_’¿ä/ùÇì·¶X[¬-¼'q'I>ÂŽpC€ýØý¼Tž!Ïg|ñgñgñç+'É ™!3¯Wúúúu^/Î.Î.Î&“R$‘´Öíäò¦‹€ë±ëi+bE¬ˆuÛŒ6£Íø@l‘®HW¤«·MÚ&m“—MkLkLkb^S•«ÊUåhIŽIŽI&ùq²8Yœ ˆõ‰õ‰õ\s×{×z×~—¾EýN{.û.ŸèôàÜ“{rO¶‹ì#ûȾ r!H‚.ÔkµÆÚG}|;|;|;¯$%%Q{TTT?Ù*Ï—çËóaÂxo@ L0Ø‹½Ø à!<„‡`²X¬ØÚßÕßÕßÅíçÃχŸg¯ü’òKÊ/)/|¤ R)ƒ6(ûûû’ÊyÏá9c»èä˜å˜å˜@ºÐà!¶ˆ-bK×ßmf›Ùf~tKðSÁO?%­ÏÌÍÌÍÌë¼ïyßó¾‡`¨ ‚ ;Ãΰ3qWq€¼à`³˜°k± Y4‹fA‚F!< Œj+µ•ÚJi×跣ߎ~+~çæîæîæþã?¤ )CÊxržÄ“xòÖ=RÒ]Ò]Ò H^’—äuêŠq»q»q{öÚ°Š°Š° ikNZNZNšØŠñ Äka-¬žô4=MO(CÊ ààà÷À¯ø¿lŽÍ±9€ÆÑ8‡9LcÓð¬i«i«i“¶ÞxùÆË7^[UMª&UÓWÅYqVœýÏ*ÍKóÒ|Z¬­ÙÖlkÎ^ë›é›é›ÉC2¿Ìü2óKÑ#s<ˆñ xÒš@D"‘€=ÙžlOlmm›Éf²™[­ÎVXnZnZnV­UkÕt‚NÐ €§ðžO—~—=—}‹Oäá<œ‡¿½Ý®²«ì*@óŽæÍ;Hön÷n÷n‡ëa=¬Jú}Ž>‡E±ì¶ì¶ìÊÞ-{·ì]À¸Î¸Î¸ö{„=NàNòy„<§ÊSå©À¡Ï}vè3@yIyIy `,‚EÀÓ{À{À{&Mª&U“Šdí[Ú·´o²Y€,àíí¢"…H! Ô êuJO|<ññDRåä‘hí¢]ÀB.ÊÆdc²1`Kë–Ö-­€Ô(5Jy¼GÞh$¤‘@kzkzk:à_ï_ï_(-J‹Ò Ýèh( ¥¡‹jÝ\ö/L_˜¾0R£Æ¨1jàÈì‘Ù#³¬´nC݆º Ü%Fvˆb‡8çó|žÏó?¶mcÛ–æ—o^¾yù&ç%S%S%SœÏ}2÷ÉÜ'÷mˆå±Ø>Ø>l1o1o1MMMOæÉ< ½¤—ô0à 3€ð~X²OwÓÝt7€Oñ)>%áTðü~f.~.~.#Ò«Ò«Ò«È7äò ø"°vØ—Ž¾ð…/@!„,=îŒìŒìŒ–•/+_VÄ®‰]»fé=9@,°ÀÀ &ÃdܹL0^5^5^Å ¦Á4˜Ÿ¡Š*>”ÊFüFüFüø™kÕת¯UX…UX3ÛÌ6³ÍäC@‚ @²zROêc’1ɘô)ú} !>!>! …¤<ò@;°;( €à/òù‹îâ.îÂ<š>š>šèoëoëoã/ŠňbD*£ÈD&2 OŠbX@ò;}:}:}Á†hC´!Jª¢*ªÂV`V!Bøá#KžÜ<¸yp3@4DC4@TkTkTë}žT5QßçÉZÔ¢ :¢#:X¥]Ò.i”çôçôçôl=Ñ=Ñ㈃8ˆ£ÆMØiÜiÜiì¾`)²YŠB÷ÏöÎöÎöF¿uç¥;/ÝyÉq8&:&:&š>Ëå\Îå°’i2M¦!"ÙÈÈÃäaò0Ð×׸ոո՚mšmšmÀB³`ö`€ à³|–Ï‚“ÇÈcä1ˆgמ]{v-3 d d dÐCŠŠŠÿ·ÃÞcï±÷d¥‘cÇ&ŽMèAz®MɦdSÝîóºyݼîÑœ$÷$÷$wþtZCZCZù' fÁ,œŽÒQ: â˜pL8&íÇÚµçΜ6ömìÛØð‹ü"¿D’HçÅ2FÆÈL×ò¯å_ËGVmymym9ιÿèþ£û–.p 1YX‰•X9ðß‚ÆCã¡ñzÉiršœžÝ%”P^K“••Ý?–2–2–Â{ýÚýÚýÚÉœß9¿s~çðØByŒ¥GéQ`UêªÔU©@`T`T`€…n$šD“hD @ÆÉ8ÇÜ=õ=õ=5–Õéêtu:é;GŽ#Ç‘C· FÁ(_ÿh ùº¥(E©àlóq }£ø6)'å¤üŸ¹TC5TóJ rƒzBGtDG¤ƒÎò£$ß“ïÉ÷˜Ãr,Çr€çó|žpWq°ÓWpWçnu†¬gk^k^kžãðÌÑ™£3GÅ y¨XŒ!gìvÆn…3v›ÿ-ví:»Î.4Tª ÕPRJ)¥˜uy¢ÓÜiî43Ó­ª[U·ª„Š7o*Þ¼Þj½m½m½ýæG7ž¹ñÌg\W²ìܧtºøAìZ t*ø_gìžý·ØõŸñŸñ   ŽÃCÂàÕïÓïÓïƒÏ»z»z»zÉ.å rP9,”·?w‹;ÅâN󯏏8ú«ÓÞ8Góo¹üŽ$&&&&&BrNû¹wãnäÐdÄdÄdþæXáXáXqY’‡ÈCä!:q'éNÒ$Ÿ&ÀaÀ0ÀÿÚwªïTß)Çóöyû¼]È“m’m’mz5€Wój^ýeë•,Œ.tþì!× 8%ý–‡àäwb·mhC›£·ðÞ’8Li#müWˆ%Ý’nIg²*Y•¬Š9BŽsþÛÐÆÐÆÐÆÍ‰úaý°~˜´³Øì^ãÔ«sš~ƒâä7±ë,ŽBä"¹â’M²IöÅPÞÆÛxÛë{ÝqÄý: Œ ãÂøíGØìöÁÁŸw îÜ,ÂUÀ\¥ù8þÅcSeVIEND®B`‚routino-3.2/web/www/routino/icons/limit-13.7.png 644 233 144 2740 13061246472 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü•IDATHÇÍ–ÿOSçÇ?mAÚèë „GÆÕ˜±Dâp’-¤0â’]`J6ܸ{7~ .Ëæ¶DKt&KÌ. ÁœD;æ2Ñ!‰c\PH\CwÅBÙâÖ(R-Òžó¼îíiËü|~éù|{¿?çùœçÝG@DDžŽý Xs¬9V-j[ÿðÛ_±¿²òÛ¨}TK•¥ênHÿ"ý §Çé1n$l3næ'׋$ð“ùL¿<- GZ{Z»¥$f5ù5ùǫ̈ýŸpt8:Dàíη;¾kû®zð ù†æJæJ a›q3߬7ñ’ñå“¿ð‹@ê÷©ß[¦!mIÚx¶ìÙ²»£ ·VÀk¯¾ö*ÀmÛm›²€>,c™*‚1×½$ÛŒÇòÍzÏÄ7ùLþh?ÅÅ"PùFåŽÑ‚ßÀžgöàØ©ÏN}«·Ú3Nuêâ‘-h»c»0·nÿÜ~Іµamj–×,¯YÙ*[e+Ü>¸}p{¢±þ¾þ¾þ>X¿aý†õ`ó½Í¿oþ¤ED„G=Û‡Ÿ~^½ç=ç= EûI«ö±öqÁKòNñXñ˜KDD,'ä‘-Ý–.’ÙŸùkæ¯"ªVÕªZ½P/Ô EÚÚÚEr*r*r*D&['['[E"G"G"G$¾Š¶m+Ú&24;4;4+Òòß–î–n‘¿ûs+r+$­üÛuÝëº-'x÷ϯÿüZ$e‡vH;Tð’€ó)çSÆÜûãÞ Ç=eyeyeyÐjoµ·Ú;( Š º§º§ºrvåìÊÙ#–ˈåñ‘Î4Ï4Ï4Ãê뫯¯¾7úÇNNÈŒúÇ̺™uÀ‚3Í™fŒ †Ö§õ©vðú A/_ ¸©oSï¦^8{æì™³g '·'·'òÛòÛòÛyk­k­k­püØñcÇßë÷ú½Ig£«©«© JÞ/y¯ä½„ß(=ø|Ù¾l@×zµ^Õnk°4X:ú“Èå‹—/ŠÈ*þ›Ä‚vSÕFEBé¡ôPºHùtùtù´ˆ³ÞYï¬Ѫ´*­JdÍ…5Ö\©8Pq â€ˆ«ÓÕéêá׸&2”5”5”%R¹¦ò¹Êçâ“^`OŒÏyù—Ë¿ˆˆ-è ºFJ>• u ÀyóTŸŸÃý ÷ß¼ÿ&j~tþÊü•Ä›†ýaØwÏÝ=w÷K¥ÆRPÔõüýý7nÜXx1ð"ÌçÌ¿<ÿ2 ŒÆN /ÆgÔí«ÛgêÙÑÅÔ pø¾` Œëãzœ !c«±5IÇR”¡ P{Õ^µ7IJU©*V²’•IßÂ<I¶[ŸÐ'éXŒÏä_¤cIÊÙjÛj‹ïË ™‘ñÈ8РOëÓ åç 4€êV?¨€“œä$â!Aý¦n©[€ËÏÐ?Ò?"Lƒ^¢—$áÇùþªüOîå{»xbïcOæ öÿ ]‰vXº™IEND®B`‚routino-3.2/web/www/routino/icons/limit-33.3.png 644 233 144 3020 13061246473 14651 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÅIDATHÇÍ–ÝOTgÇCQ *òª¬mä¢V¸PÒ‹†é ÝÛðZ"Y‹ÙêÅêE³­q7ÝÆ $‹;•²]ÖÅ4ººSH±6M­ ‰ñ…Ý„ ÆèBŠ ØLŽ€¥Cfæœó|öbæxˆÏÍÉ÷÷òýþÎyÎùžG@DDÒbW¸œ¸œ¸uQ÷;+žøF⿺ŧu°UÛªï}©Ÿ¥~°¾g}1fa3oÖ¯î±øWë™qI+ЗÐgsÆðÇPÿrýˉ£ø¯×Á>`øEƒw¿z÷+€/?ÿòs~3C3COœOœ`a3oÖ›ý&ßj~ùø}XóÍšolÓ°6a­äíÍÛ›$Z0‘oV¼Yà{Á÷‚Šý1L²r˜kn6ó±z³ßä3ùM=S?:@zIz‰T½]õ¶½;Ú0vÞÏ~?ÛÔ‹ ­´’ Z@ èûô}„@]W×°a ›y³Þì7ùL~SÏÔÎcm岈ˆ»jÇkÇÁ˜ˆÜÒDr#¹` GF‰MªŒŸ9c´Ú¤6 ÆãŽqkýÂOüô)#¨%kÉD´éH^$Œ[Q~SÏÒ7·rJDdGØö@ žãã·Æo×(U¬ŠYæ"< :U§êüøñ¯¤vÚ4ÒH[?ÊQŽ׸ÉMU¨ Y¦=Æ¿1¦gêߌÎ#ÌŠˆœ¾Áºƒï|Çd3ví½{ùîepÿÍÝînGyxï{ï[z£;GwŽîw‡»ÃÝ#“#“#“VÞxl<6[x¬tÌ9æw¯»ÛÝ™..·ôTø`ÅÁ `&:""#€ãÇa2}Á·àS64§nOÝN¨®±®¦®ògógógáü©ó§ÎŸ‚ܬܬÜ,¨í­í­í…L•©2 5 5 5X‡ÇÃãaØÐ¶¡mCÔgÕ¯¯_™¡Í]›»ýçÏ?TþP©Àe.ú×ÑyâmÿNÙ˜²±pT—t–tŠèÙ‹ß/~oë>!-/µ¼$²ùÃŒ–Œ‘™þ™þ™~‘eß²oÙ'Ò\Ð\Ð\ bO²'Ù“D¦ÏLŸ™>#N '†åéÒ[õV½UäDê‰Ô©"[~½¥zKµÈä?&'%!\½à^pÛºEœ×œ×DlMŽ{Ž{…{„¹´pZØåÓ¹æ>°>û¥`àÇÀPs±æbÍEÈ^Ì^Ì^„ÛÛno»½ ”[¹•ªŽT©:9M9M9Mà5¼†×°ž˜RCj–‚KÁ¥ Ô\­¹Zsrš²+²+Àû¿»¯ß}9–ËÁøËºÎuƨèe޵޵ªB%¡øWuß¾¾}PøÛ]/îzÑpµ¹Ú\mPz¸ôpéa(u”:JV¾(®(®(º¶vmíÚjÅ{2z2z2 ¨ ¨ ¨ÀŠîz%øJzsá­ o„:B g%M$M¨>QgÍwì‹ù/æáçAuÀùékE¯J)My5åUØ¿´iÿ<:ùè䣓à:ë:ë: ÉÍÉÍÉÍÐ4Ø4Ø4¾M¾M¾M°;°;°;Sž)ϔʎ•+;)U)e)eÐx§á½†÷?‰êgÚ3 j1:OÌÇNß`øPú¡të+Ñö¬î÷Øí‹x†M3?d:o]|]<ÐufuU[Ѐê>Ýg9?Í|ÄG ®¨oÕ·À9Îq²Ì2¨‡jBM¡Xý'ú}ý>õ6«Í]¦óÇôBÏ:ÿóû¯|nOÏíyìù<Áþ(Ý,9Õ¾çIEND®B`‚routino-3.2/web/www/routino/icons/limit-22.4.png 644 233 144 3012 13061246472 14650 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü¿IDATHÇÍ–]LTgÇŸVg&°2ê\ÔfvGLˆ:IÅ´¡a6ÓT¡Ð’1MC£SÒ®Ù(l ÙvW6UkHmvYeH¤Ù†D>ª…ÈZD &6ʇÔÑJ“–Nè`g‡fÎy{1s¶{µw>7'ÏÇûÿ?çýø¿¯€ˆˆØS_óSæ§Ìk’¾ù­tÜú²õåõŸ%ý L¦Šý²?Éþ §-§M¿™ö¼Q¿r¼H%Ÿ»¤–NK§É›òÁëî×ÝÖ'’þ±K`ë²uE°·goÀ™ö3í¼ ¡‘ÐÀœwÎ ißÈõÆxo%¾ú¿¬:·êœé;°¬¶¬çKΗ\¿KÜuAyiy)À?d(3ha ‹,å"D0lv…oäSõÆxÏÀ7ø þd?yÅyÅ"ðÚ¯½a;•pó4Ô­«[gðÅ»€ø€,HDíMíM–@]R—0a‚´oäzc¼gà|²ŸôR.ˆˆ|äÐ} >œ˜Š;ãNÐ&, ñT§JŸÔÇõqHL%î%/ꋤm15sóÉzЫô*âª@«ÕjAw%ña‡ìà'ƒßXÊ ""ƒ-b‹D~¡–ƒÃÁaà% ¶ª­,ÐË—| zLé1 ›nºW4ÒDM –Õ²Zæ­€ @MhQ-ÊB*ZB4x>x þdc !‘–ËdWWUW(úÓ7,£GBóŸšßk~5qab`b Í3Þ7Þ7ÞÍG›6…7n¬È«q5®ÆAªBU˜ŽßÙw§éNjhÝ…ì Ùi>¯n¨n€äʵ\íºˆÈõƒÐ»¿w?|óηEß©=Yÿ¶}jû”%ï?½½Þ^ØX¶±lc´¶·¶·¶ÃÚ[ko­½ÞÞÞàô;ýN?ŒŽŽ­hDïÐ;ôP>åS>È+¿2¿|ÿðn÷ng)õ{ôßtäwä“É~ÌòËÌÖÌÖ-ψøª|U"ßÿöæû7ß7ú}˯|%–Aß`ù`¹ˆ=bØ#"g›Î6mi¼ÚxµñªÈ }Ð>hÉtd:2"£WF¯Œ^‘Gf²š¬&«H}e}e}¥È’u)g)G$÷D^_^ŸXRU§Øôâþ÷‹ÈÆ5×\ÜòŒϱæXõIµ7\.Iû‘g‡]Ã.p»Ýn·vUîªÜU™ž‰‘©‘©‘)ØØØ€Ý‰Ý‰Ý Hxž„']è tºÀ1ã˜qÌÀÎÚµ;kaýqWƒ«¾+šþ|úsfa¾l¾ Ô¾ìúìz}RôcY¥Y¥ªææ`Ì7Y>Y¶3Ö:kÎ?¼þðzЃzPÂ5ë5ë5kr«Ú"pÄqÄqÄÑ¢hQ´b›b›b› ì;¸î€JºKºKºÁ½Îý¤ûIXõ댙Œ8ÛyþÜùs·>Ü ú™“™“ªS¹Æë/ê/‚ö¿}QóEÚ³êŒùUó«,y¢žYÏ,878787À¶ÆmÛ!o(o(o<~ßã‡\s®9× 'kOÖž¬…âÛÅ·‹oC¨'ÔêIÏ`Ûɶm' üï¥/”¾ÞcÚ©ÓÇO7tíúAáXêTRs æÄÉSòÓöŸûñ9˜þËt`:€ µ…ZB-074747á»á»á»0]1]1]!{ȲÃBÿBÿB?ÌUÏUÏUƒfÖÌš”_½¢^دbÏÇžG=¸7;6;\Oò¡í{wß»ÀLêTº‘Ö‘”Ž:ƒr)×#Ýùÿm™e–ûÜç>Uå`•Â|)~eèØÝêùø«ÿCÿ‡ N'•Y kÍê¢fÕ¬ÄÉ` [Pê¢P .'¯ Õ«zU/ðꨥ©EµÜ{¤ü5z qþ¬}­} d>RþÕ;VK?WþÇ÷®|l_í{ìñ|ÁþgÄÿ^£ IEND®B`‚routino-3.2/web/www/routino/icons/limit-167.png 644 233 144 2615 13061246470 14606 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜBIDATHÇÍ–]h“gÇOk›õÃXbuLëªS™‚±acµ«ZÛ+¨Õ1Çñ aŽm° qZW¯VÛf+5¢©NŠ‚³¶*ƒ±*2'”6n¶p5!1æÍ›ç·‹äÉ›íÞs“œ¯ÿÿÏsžœ<""âÉ} 8_u¾ê¬ÈúÎf;^²¶d휲þ ï9Þûí3˜Ô2©`rÛä¶Ì]Û×y]_Ø/bãòé¸xÄ‹ƒŽºœÿ%4Õ4Õ”LÉú‡ûÁ}Ö}6ž†m=ÛzδŸiçˆÜˆÜxR÷¤l_çu½î×x…øòå¿øE èBÑÇP<±x¢¼öÖkoUš-®†úwêßs¹”¬¿€2ÊT#†¶ñ_çsõº_ãi|ͧù³z¼µÞZhx¿á}÷wÙ†»Ø3sÏLÍgž¾ækÊ KǬ¬xª_õàÀ¶¯óº^÷k<¯ù4Vüs¶ß¬ %J€(€y2“2“ Skvš˜jjSm(-YmTëÕzH÷¥ûÒ} V¨ej¨qõP=„tÊZh-DY¦v¥vaZ.s¹Ô½¹Þ"š_ Í=JÆýÀý 6†2C™ühÞ¶Âærs9 Õ¥n«ÛØ6•©LõX=V â!B„€ì`GA ]ºà޹c± ZON؉øèàG5JæuuÕüÑü1«ú¿í?ÒFzGzGzm¾aϰg؇—^zx)ÜQwÔcÇ.Ž]„£­G[¶B[SÛº¶u¸ˆb¨pÏP`(PÀwv»o»OöÄ€3{nKÎÉ/«V®Z)"ÇED‹«\Ë]Ë%uzêéòÓåâXí^íYí¹ºº’¼Q#jDE.?ºüèò#‘½s÷ÎÝ;WäÊ‚+ ®, ÍÍÍ Êe"ÆÏF‡Ñ!Žðöð”ðIeQ‹øØö‡5ê’s}}*ÈOŸ=|fŸ„*¶­Af‚VЂªîªîªnèÓ;§w\².Y—,¨ÜW¹¯rÃcxà@ü@ü@¢;£;£;m¼ãÑãÑãQØúÕÖ/¶~QÀÓœûòkD"ZSÄUïªÇ'oNŒOŒçâ±ò³…-"]]"¾߈oDäyÏóžç="ª[u«nï wÐ;(âðøD:̳ù5íÖ´[ÓDRå©òT¹Hë¬ÖY­³Dv¯Øíßí·O\îgù¤¦è^Ñ=­Ç)’9Ÿ9ïø]TúÝô»ùr¯ɨŒÚýtÒI§ˆŠ¨ˆŠˆ”5–5–5Š”¥F©!Ò\Ó\Ó\#R9^9^9.ÆGEN:uèÔ!o›ð&DæÕÍ«›W'¢Öf*2"ŽöŸ+ݘnÉëÉ^¶ÁÝÐõ¬+?JµÅÚ“ªJUñBGê}õ¾zœl9Ùr²ÅEÓpÓpÓ0¸•[¹lš±iƦv¾!ÙlHÂ1ç1ç1§·®¦6§6ó‚çY>›?«ç•\Hw¥»ì«]]]ÉûÉûÉûA+haÜ?î÷ƒ•°VÂÎ?íxÚñ´’o$ç'çÛx\I÷¤{€LŽ/ÏŸÕcï1Üw$6†¬!ËÞc12‰ì*0T©*U¥—yºš®¦µÔR[P¿—vÚ!gﱟæÿÇûÍoêÍl…­00ÅÚoíÇä ]tÙ›Ÿï uM]S×€N- g¯°˜Å(>·þ´þÄÌãåñs|yþüæiÿ+_Ú×ÅKû{9_°1â ØkrIEND®B`‚routino-3.2/web/www/routino/icons/limit-11.3.png 644 233 144 2634 13061246472 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜQIDATHÇÍ–]hSgÇŸ“&ÖØ.Ú˜àtJa[a8Š‚0ÛNÛH?ªR«CasÚ‹mÞÌâœS·‚¸ºÊ.ŠBUC±¶‹›Â´‚ËÚ ¦¡µÅôË µâ´bÒ5¤9缿]$§ÉV¼÷¹9üŸÿÿ9ïËû¼¯€ˆˆÌHlólól®¶}”ñOõMõ½q.… UiUÝ_Âô#Óœ,8iöf°·ò³ëE2üÙz–_fHÆ‘{>÷¼VšÆ_Cõ;ÕïLõ¦ð·ap¶9ÛþÑa[h[ õtëi>†á߇xVú¬2ØŠ[ùV½Å—Í/_ÿO_——´{;%wŠ––½þi*¡ÿuXU¹ªà~Îýeão Ÿ|U ĈaÙ“,lÅÓùV½Ågñ[z–~ªO‰§DÖÔ¬©q6¥ zÏÂι;çZzÉ6àÈ=¦ÇŒ÷÷I€ «0d°·ò­z‹Ïâ·ô,ýT?òß½m\Nl]r]r¢¡N³$éH:@ÕëôXee˜%f±Y ª^Õ«z2ö”a†'2ãz¾žOR¿—,L‚Ù™â‡u‘u`,­?±•1‘·¾ç]çݘú–÷-£€ uAÕGËH Æ 1h ‚jSmª-«¡FÉÂûÙÏ~à:t¨…j!c|—âÇéŒt8cÎXÌNGªŸôJû jëjë@µ˜ ,Þp |6|5är ¹˜dá@8À{È=äÎøÍ°6ÃÜ»¼·´·O5656¡þºQq£b"{ß^¹½Nõ#\ùë3ŽM,ˇç=ÁËÁË$Ÿ;v8vÀ¹Ásƒç3BÁš`M°!GÈ‚àŠàŠàŠÉÔ Ô Ô»ÁÝàn€êת ª `NbÖñYÇIü±÷®ÿ®_}¹?¥ú±‰ÍµËµkábÙ^ÒSÒ#­IçLÏ™.¹ÞÃÞ€7  ȄicÚ˜6&â=ê=ê=*¢Vª•j¥L2£Ãè0:Dêíõöz»È†ª6T‰¼ztε9×$w¼j¤q¤Qk)½^z]Dû ¯;¯{áb‚W ^1{àɃ'À(™8ö”-)[R¶Nì>±ûÄîÉ+ò¢¸~G¿£ßÉàÑøh|4k¯¬½²ö Ìû`nåÜJ¸u§ë½®÷xñŠx˜ß¸®€Ùce†ÌÖ#¢WéU"2EDD<Ö«¤Wã"Ò/ýÒ?yET—êR]"Úí‚v!ã6G›£Í"gÚÏ´Ÿi)^T¼¨x‘Hkykyk¹ˆçöÌ–™-"Ý»»½Ý^ñˆØ|6ŸGŒr£\뱉-¶,¶ìöŸ"¿¶ÿÚ."E""lMóç}’·5o«ˆÃçð9|“›˜˜qnqnqn‘›rSnŠ”=,{XöPdéÕ¥W—^ñ¬ö¬ö¬qU¹|.ŸÈÛ§çGÆ7”ljÞÔÌV‘ЪÐ*[O¼(^tûÏìS¹·v/ð³u*ÍÃæaˆ¾Ý݈Jä&$!“·2Z-ŠAb_b_b!BžÎ~:ûélÀ?è-z‹Þ||êñ)”ñøÜŸ9•ôÔÖZ÷ØoéÆÞúœÃÎá˜"FĘЭs³¹9kŽ‘šc/´8qâYØŽ;¨/TƒjP~åg,}YUðfäVä€ó¹óyÌÎÿ̱¬É¯¯ÏYŸc±&;ñê=|eÜ7îOžüxpãrƒé˜uOõ©>Hÿ„â°Ñgô‘T¿èôGÀñ4?ëíëí@âÿ“ÿå½+_Ú×ÅKû{9_°ÿ%ÔÒÂ.ç¼IEND®B`‚routino-3.2/web/www/routino/icons/limit-190.png 644 233 144 2714 13061246470 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–[LTW†×ÌÈe —ž ‚‘XH´eh´ñBÃØ„BS0†lH•‡VÓF $‚hB Ú£4Ñ>X©…y ©ÄÄhL¦Ð4)Þ C‰Á‰N@†sÙ_†Ã™ÞÞÝ/'k¯µþÿ?묽ΑמΠg†3%j;?±÷ßK|ïõލ}ÚÇŽþh€ÔÖÔV€eß-ûÎì·mËoÅÇæ‹Øø±|Ö¾¼&öFBgB§£`Á> Ûs·ç&z¢öWp_p_˜Ña×¥]—~lû±OáIÏ“€PA¨lÛò[ñV¾…‹/‡ÿÁ/qÝqÝŽGŸ/+}+}«öDþ\%ï—¼ðØõØ¥œ`<’HR@˜0ÖšŠ±-ÿB¼•oáYøŸÅÕ#°b늭"Pº£t‡ûl4¡ÿ¨M¯M·ø´ À—|Ièa= `|d|DT@pàÛ¶üV¼•oáYøŸÅÕ#ÿ¶_BYbY"ð@ûÌT3Ì-Ú÷Ú÷hªAù•eI6§Í)s ôi}ZŸõ±Ú©v.VµNU¨ ”>:¿u~+šú\ߦo[|á_˜ýÐøÐ”Å/±‚²ObºÇÝãá%4ƒæ"n‘1¤½£½Ã¬jWwÔ ©ÐDMö>G8ÂPͪY5•lg{Œ›Ñn´3KIW®"î÷Hx‰¥gAØéŸ¡¦±¦q±ëÔ-íŠvÅÖh4a({({(Ûæ¹ûôîÓ»Oá”÷”÷”¶›?ªgAXß>~ó_÷_ZT5˜!3D¤3­3©3 \—]—]—ábÑÅ¢‹E0Ñ2Ñ2Ñ™ë3×g®‡Y³6fA^ /€þ£ýGû‚×çõy}ÛœÛœÛ k"kBkBº2U>UNdA^µšìv-a}ûœ")?¥ü´þm™Ù’¿%_D>qœ%‘G<’™çò\dypypyPÄ]å®rW‰ôÖôÖôÖˆxr<9ž‘žážážaÏ€gÀ3 ²{óîÍ»7‹xšù=¾1¾QÄÒ³DÄì2»DéÅz±¬§Ü–Û²BâdLÆl@5®ÆÕ¸ˆó¦ó¦ó¦È\Æ\Æ\†ÈÚCk­=$âõÎzgEÆ\c®1—HA]A]Aȵ×N\;!2ºztõèj‘‘·FÞyS${WvNvŽˆtK©”Ê ‡C/ÕKEDÌÃæaÇ»Çð?÷?_lÉj£v>m>Íê(n/n/n‡ógΟ9Ænî®®Â.HïLïLï„ý ûö7ØþʶʶÊ6HJKJKJƒZ£6\0÷š{íã[ÿ1ÿ1»Çþ÷TÒ­ûu¿}*_lz‘ÿ"ænÌݘ»aGŽGŽGŽÃDd"2Õ§úTÐC=`›Ãæ0LONN‚9©\Ê…ÂÐCz0øôšúšúÊì“à~â~^A#hØs ÌJ³’Y»v +Ÿ|òAU¨ U3ßJT‰*¥)Mi RU¢JŒñWë·ô[ÌòÅâËÌ4÷¨{ô_sì?&¿fM~cÈz^&ßߟï÷7¹ç|Ï „"7ý+Àò´åiKN [ö˜qëkÖ×ÖNáV2ª3ªo|+?]ù)ÀªŽUò;y£~q¿&ÿb=#.r…ÈìÎìÎp§ñQxÛù¶Óúd Ÿ¼ ¶s¶s1 êÏןèñõøøB#¡€ˆ;ây£Þè7ø󋣿Ж]Xv!ãd>‘ù„`Õþªã©‚[xcÛÛ~XòÃe}È&[¹(QŒ^„|ºÞè7ø ~CÏÐOÍ# ¯<¯\xó7ß±ý#Õð]4<Õ𔡗<|Â'dƒÕ¢úN}'  .«Ëd&6òF½Ñoðü†ž¡ŸšÇü”q!„h~3_| ø@ñhëoëoë7ã]þ.—òKòKòK &§fEÍ 8kh€Ø“G’Gî·ÜoŠV‘–HK¤Îî9»çìØT´©hS‘9pÉ_Ÿ¯z¾ |¿û¢ò‹J€ï‚ô¬ûY÷U·ÐV{ìk××.ø»þåè—£ªnY¥ÊRÅBi¬4\ûzûzûz¨8\q¸â0äùóüy~(õ”zJ=°Ú²Ú²Úíñöx{Êåò„GãáQ¨­¨­¨­›Õª¬ v﬑5’í €ªƒ3ógægzq2}*ÙwpßAxødê”<ØòcÙe0ó—™Î™NT¨#Ôj…ˆ?âøaöÖì­Ù[0S=S=S ¡ÜPn(âWâWâW ’ÉŠdêPªä~¹_î‡pQxmx-JnHÜIÜ1O%·ßöýg ÃmJ¬éc`øÊÏ>æPâü¿+A‚Ä"\Ã{¼j¹²+;€zN=G\­Mó»ƒ7‚7ls¶¹èR& ûŸ[½ù<õžzP])gVÃz¦ž jP·êV’,á^@©A5 @ ¥® Õ§úTð'h•P1Rf«èÕu]'©†´ˆ>7œÿ­¥o-¿tþÇ÷®|l_í{ìñ|ÁþœjYëŒzSEIEND®B`‚routino-3.2/web/www/routino/icons/marker-76-red.png 644 233 144 4210 13061246466 15436 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü=IDATXí—mLTWÇŸû2"oáCAV«u•Œ5*j×4HÕD¥S[¢iE´£iCKL¥¢$ÅRÕ,t˜ÁmCw7XV´ÆÖ.6kCR]˜‰²A^ddàÞ9ÿýÀœ{ïLv5›ÝçËÌsÎóò›sþç š¶Ybâºw„;Â-Œbf4ÍhšÑ´!UVeUV»ÎÑ2ZFË€éivŒd’Iæ>ê³c<žçóz¼~h?q](‘¯”J©Tt…Î'¼$7ÉMr“kHØ'ìöi æø‘ø‘ø\ÞrwËÝ-wí¶?ØþØfÛfÛfÓ}>Ïãy>¯Çëó~Ïæ!ñ·¡þüOÅ1qLó.ã+”T˜T˜T¨¾{öÆÙgo°¨ÑÁÑÁÑA$Hðá žà /¼ðšœçñ<Ÿ×ãõCûÍÿôÙ|d‰ûÄ>±Ïûg^ÀvÝvÝv]YÝ;Õ;Õ;…^¥°–E-WËÕr@]®.W—j–š¥füà<çù¼¯¯‡ô·Äjh‚Kp ."ùˆ|D>R›'ØÙËìeJ–v0°*° £Jý„s 0¯bU¬&§ÁUVeVÏê¡Û$»Ê®Ì«ÌPfJ½?ÏŸ°ƒ,‘%b”‡ÙÙÛ+Y¼?çá|dºoºoº¿i°TXŽZ޲žGž.O†ƒuFÕOý~À(}}€àfŒe³l`Ø#@Gš6õ%R‰Ô«yy#¼¶TXY±œGã“K乤óŸ8]P£Ö¨lW°€Oq=Mzš_¯ÿz=Ã’†%àÊuå@cTc4\j¸ž£ž£F¤_^ùå¨{¡îþ–[>5UM—ú–ú–ì;]púÍÓo²]Úʆðˆ_¿4~)Ž m´ZµDÉÃÃFÍÝæn`úÜ€0%L@”=Ênož×<~þêç¯ÀRk©€X%V1Än5o5HYhehÃ`ß`Ày8=¾¹jsÕæ*ý—©½¸@€,ÄBoo€‘Õ#«µó>ÈûÖ¥¯K7Ž¿úðÕ‡½'{°oØ7ж¢mÌûqÞ °X*–ŠïäNû‘üÔsKª1YMV“ÕûOp”¼y𦾞Jܹ–s-`€7Ç›ÃEή±kÀ¾gߥr¿ø~1\è¸Ð¨úú6Œ5Œ7Œ#[{B+ÅJ±rbƒ0[˜-ÌþÍÙ0@éoÚùÚ)ìvfÔ NÁ)8¹V{ÜmîÝíiw¿Ú¢¶àƒÏà3¶›íÇq€­ge¬L—RŸóÁí·ä™–ó–óJ‰¶’IïKï;ìZeQ–lÑYÓ(ÒäÈE.rI’Gò¼û'íi­µˆQ1{ÞëYܳب]–ÊR€ðÃhÐîÀ½À=€åNÝ›º?Ëûk^Q^‘º_{žÈCòûpâÞĽ‰{‰D»híÂÅ ]ÇŒ~æJ=RÔ#4/8°àÀ‚D¦BS¡©Ð}XÓnš=ÍžfÔnÀpÀ7ÜpxŒÇxl8b‹ÔEê"]‹Õ«ªWU¯bëµ·Ül2›Ì}Á¿–f†î´Ð¶õ$„¹ß…ú–™ÓÚõ\Ôµë(w”´kVÌŠY < < <ÔµØntîÈîÈîÈn¶EÓdŒ#Ƽq(LŠ5a|ôì©:L»[þvÛÜmºv•6¥MiÓ•û4ñiâÓD`ÉÈ’‘%#êBM‹R£Ôxj —ZPzá€/ÐsLàtíHíž°œ°œP̧ÇéqðÃ?F8©£ÙÑìhÖ¯¹V®•k»ƒÿ’Dv„õ ŽSÔóÃ'¼Ôîÿ“vÓsÒsÒstíº×¸×¸×à÷ÓóLÛ !_Èò3ÊBÛˆÃú ô_Úó´»Nª”*¥Jïrœ_‘_‘_ÁN¦L¦L¦L*×¶z@ITOõTOÁkGò„õ‹ ÿѵ{8ÔOÿ‡P$ Em¤´1°Xœ#Îç $Ð_¾Kö%û’}DR§Ô)u W‚‰¹a;÷3³ö-“2)S¾:ý^ÈD&2@hZ…Öþjzü×î°é «ûÜ­þ•¿‹A ? òIEND®B`‚routino-3.2/web/www/routino/icons/limit-20.1.png 644 233 144 3002 13061246472 14642 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü·IDATHÇÍVíOSg=·¬…VôƒAç0Ä…ŠÙL&†™(ˆ,:5*„™ˆ30lÙ›áE¾8²DˆÉ",hƆš¸qΑHØÙ¢# ¢èŒÃjFÊCÔͦ¡å­Ü{ûœ}¸½Üÿ~_šßë9íÓßy€¸Ð'HÓRÓR“MóMEF<ê­¨·V|«ù *)í’v=¬$ç1ÿ ’\ðõ‚¯ƒ=†¯çõúð~À˜ާÇ#ÙÙ$e„ü#d^j^jÔ"ͯi'­ÍÖæq…<Ðr …$/½t–’On>¹I’Þ oiøz^¯×ûõyáóqd>@š2ÿ$ ‘–H @¾¼ùåÍIk}I䎷w¼M’CCÂD’¤ú/ÉXÆŠ ’~ú©Ûó0_χêõ~}ž>_ÇÓñ5> 6&lÈ{vÑzÉC‰‡u<¹™äQe,©ø?Iª{Õ½ ¢]´“$%J¤áëy½^ï×çéóu<_ãcåÔf‘9½9½dÐE’r§2 /——“Á犤H”CL…X#RE*© *”G¤(%¢„†Mp”£$}Z=,PnTª”*RÖæ“¹Q¹Q$ŸèøúQþ ¯ž ­~«ßÿ’˜îíìí$y„$¹•ëÄ:Nð{^â%R¤‰4‘FÒI'aD²™Íl’Û¸Ûø‚©ýj¿ÚOŠfÕ¥º8 o¥¿÷çÞŸI_#öê hL:8ßQà(ÐÇ_{ù{ùïådÝçu5u5®b—Ãå0€ÜÕîjw5Y/ÕKõ9àðÿ5Š1 Hq]\×xû—í-í-ÇÿiþÓlà‰ŽŽúÑ6t@½÷ÊÉþpüí£¿ÒÿJ…±cÖzk=™Ï33ÉÞÞ^òÊÉ+'¯œ$ÓkÓkÓkÉUÇV[uŒ\XX ½•ÞJoå‹¿XÓâ¦ÅM‹Is‹ù‚ùy!ûÜÓsO}BõÃÆüÆ|ؽræÅœŽ9ýzUU<~£§´§T:SÒPÖVֆȶ„¶emË€%ýKú—ôÕê@uˆóÅùâ|Àʇ+€yCó†æ —‡.]ÂŒ)EJ‘RH>É'ù€E_-úfÑ7€Ø,} }€H­J:ƒ± k7¬Û5Ûµ×ÓLË--i§cⓉO€œw·çnÏ…gKó×R™R™R ¤•¦•¦•ùmùmùmÀ´cÚ1í0ØÜ6·Í L:&“aq‘"RD È äû¸}Â>Lz'N.œ)ó`ÊrÑr"vDì Ý$N(›”MÒÒiËjËjàþû=å=åHȪÈÚµØgß—²/¨¹Qs£æèLt&:g·žÝzv ŽŽŽ-ƒ–A ìLv&;Ùcö˜/âE|ÑÂ%\zÑŠÖ™py«¼‚?”þ0‰ÏÆ[Ç[»ï]]@gþýWî¿Â÷TÈ}r¦[N¶ÔµÔ¶n[·­PGÔuÈ<Ÿy>󊑆‘ã#ÇÉ©ª©ª©*’%,a é9ì9ì9LŠýb¿ØOŠõb½XOzNyNyN‘Á©àTpÊX_²/×Aˆ“Çdc+ù‹s­smØVêºaèHHÇt‘ÅR±tFwÈ2–±Œ úƒþ`¸<ŠBQhägL¦<#ËZe’H Ó±¼Ù:ö¿[½6‹‡rä E£¦Ì⎫ƒâ;eT¥Ì3¼Ë»¼Ívâ¶è]$¯ò*¯’×îJ1¬éÏ(q°˜2ÔwÔwH~:Kù§f+ÿܽ+çìëbÎ¾Çææ ö?ó£wÐ *IEND®B`‚routino-3.2/web/www/routino/icons/limit-23.5.png 644 233 144 3112 13061246473 14654 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÿIDATHÇÍ–ÿOÔ÷Ç_Ô»TÄŽ©\ÐÝÄ5ÚËŠÒa¡£T°%½- â\m ’FVÍ ±BB:P#B #(`¿8bíR(…€¸iŽeÈ¡”î<àîswïÇ~¸ûìXûøþå“×·çó™÷;ïçç- ""Q¯€!ÎgXã %Á¼)Ë”µåÏþø¢BÞyã'`mÝÚ:€uMëš|ßc½®÷¯œ â¯äÓó%Á„±ÝØ’ˆÏÀ›Éo&›~æ«{ÁÜiîtz ´»´àjóÕfþ33ßg|ŸÁX¯ëýú¼Ž·_Îüˆ_žùü™ÏC¦À¸Ê¸J,¯X^Ù|Èß0±rsrs¾ ý.TÀ;D©2ôõhE¬×ýú¼Ž§ãë|:¿_À³/?û²äæšýß¶BElE¬Î§uUT ‡Çàµym¸@õª^B`¬×õ~}^ÇÓñu>߯'x”‹""5™?ž?¾»Z¿çŸšE³€ï?£ÇˆPª| >»ÏžžIÏ$øÆ|c¾1~º¾Æ… åýÀ]ç®CóþB;¨ožŸšü×ò_ÓÖdò¦ˆÈsÙav8”{¼¼8@6¨t•Î"—h¤Ô1uLæ™g~…€Zj©Ö³žõ+òƒ 2رcPI*‰E”Žà ðû…=÷‘0#"r±µû‹öéh¾_þÝ8zdôÔž®=Y{u÷Ë»=w{‚|÷œ÷œ÷œPs¹ærÍe™™™üé†yr=¹ž\¸R|ÅvÅõ{ë×F5^Ⱦ ŽG~>8¸ãàP_ûõˆwDDdä\{ïÚ{0ôîdúdº*Ž|b®7×ãÚY²óíoC’5Éšd…ŽîŽîŽnˆ-‹-‹-ƒüÙüÙüYؤ6©M ÆÆƃÂfcgcgcaCê†Ô ©7š×Ÿ×¶ ­…V\³uîbw±*†­CUä×&«#"R^ÉÜž¹]äßÛ¿²~e i<|±¼­¼MäWvVvŠl+ÙV²­Dd8a8a8A¤Ú^m¯¶‹† Æa‘©™©™©‘eײkÙ%"‰’(‰"·Ü·Ü·Ü"Ž,G–#KD*䤜ùåõ¹×çĸ¡iUߪ¾F¾L[H[ 9ºæÒšK)/Ú:Ó:“ï¾*ËžË^ûý›û7C²%Ù’l}çöÛw8Ä!³ÑÙèl„=‰{÷$B\Q\Q\ :?t>¸c½i½i½iPœQœQœMMMðó 1§cNÃ_wsøæ0@{^{¼wV?XýÀw_|Õ‘9‘9ª~8úÃQ¸sà~ùýr0_5U˜* j±ÊYå 5w5w5wAJkJkJk0ŸjH5¤ !¬!¬! Ô)uJ‚–ž–ž–¨4Uš*MÁþmõ©¶T´¼ûÉûŸ¼àÊqå€7-ÜîVíuÖù…ó‹;·EûûDú;?Ï;^Ñ&´ qwÿ¥»¹»Y$:=:=:]D¶ÈÙ"bQeQ"áZ¸®‰l½±õÆÖ"»v'ìN±îµîµî‰ï‰ï‰ïi+o+o+‰úuÔKQ/‰üj£õ‰õ‰¸m¿ë÷>ä‘®ô®t‘Ðð%ã’ñÎm¡:p+9P~ –Úý·Äþêô‹Ó/ÂÃþ‡S§PÓÅÓ¶i¸ÎºÎºÎ‚wÈ;ä{½À^¾_„/Ô²ZVËð8éqÒã$ 6ÚÀ}Ý}Ý}æ v§Ý‰Rû=Ñžè  ð°,¥,E÷³‹}¢ûFÐGt_ øÌ’Ú¨6²ø¿La„:®Ž«ãÁ£Q»Ô.µ ˆ!†˜ùÔ uÔ%uM]PÉ*™Eõ§þ«ããæyó¼#Œ{ºýß_½&“ŠüÒüRP­~gV·½‘ÞHPmžÏÍŒ2Šâ2¸ê3õ©úh¡…`‰EAýKM¨ Àå×G…÷ï7hêožÏ ðYÀù)-Ü?vþ§÷_ùÔ¾.žÚ÷ØÓù‚ý/kdb xbÀIEND®B`‚routino-3.2/web/www/routino/icons/marker-74-grey.png 644 233 144 6214 13061246466 15636 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü AIDATXÃ…W}TTåÖÿ=çœù†\Æ!¾ƒA14HÑ¥iÐÕL%Y¾|c Ñ¥¥Â²75 ìƱ×k™z?@B’Þ ]ª\SXÂÀ /†ˆâÀ80Œ3sÎyîÌ@×u[ížõœ³Ÿ½gïß³÷>D«ÕjµZø`BÌ ³»ÍÝænÓZíWÚ¯´_Qÿ’û%÷Kî§FQ5USõþ?ó|·Ù^e¯²WÑ}8†c8FŠD0À€ÍØŒÍtŸ,M–&K#ÅÜ=îwïŸÇÈ!#ÑïöÛí·Û¯þfififi&äƒù`>˜,ŸÀ!~ïÂåÃLLD"™Sb‰X"–ˆß;¬«Ã:=¾¤º¤º¤úTŸcÐ1è¬ûi|îøÜñ¹qoy”{”{”£&nIÜ’¸%¤X#ÑH4 Þ7Þ7ÞpïÝïÝúîón{“ö]þÜþÝxÜø8W“¨Šª¨JÌ Y$‹d—³Ál0Üø…õkë×Ö¯gù>U÷TÝSuBÁÃÃãŒéˆéˆé /ÉŠeŲbŒã¼ƒw Ä8Æ1`6a€˜·Úíx©£¹£¹£™:"""ÄÓRÓRÓÒ )ƒ•ÁÊàr!KȲ—ÓlšM³og0Id×ã]w=ÐŒf4zqU\WÕü7‡ÍasØf­y!ä…øÄ5ykòÖäq§|,> B0 Ó0 < £a4 ºÑnžð„'€1Œa @8ÂÒCzÀã!â!8³Ê¬2«pëü‘óGÎá3n5ÝjºÕÄý(UHRÅÿ_áÓø4>mÑ:,Â",êe­ŠVE+ ñ—øKüÿçïãWƯŒ_™µ"dUȪUüKÙ™Ù™Ù™ÜÞÛ¼·yoÃ4¾…oá[q—¸KÜÀ@ïÓûô>@4DC411¤‘4’ÆÉsB˜&„Þk½×z¯Å4·}·?·77>RR[R[R»<ÞÑêhu´^iUYUV••†æÜ̹™s“´ú\ò¹äs µP µ@ETDETDˆ0`àf:PPP9›zÜFÛh@âH‰h1-¦ÅÙOö“ý°˜7™7™7A<p4àhÕX¼,^/b”j¤©f…†¡4‚Fìù“3Ù™ìLRô)ú=–¸J‚Sp PuVvVvVí^í^í^@ûéöÓí§ŽÒŽÒŽR }eûÊö•€¹Ü\n.ÿ Àé‡ôC€Ä“xOOOælÆÿF-ZµÅÊW”¯(_Á8ÝK÷Ò½PÊÕrµ\ ¼•ôVÒ[I€¸L\&.d‚L @EMEME 0ºetËè úDô‰èSŒŒŒ*·Un«Üx,ðXà±`›Ø&¶iJO˜'ÌæS* …z>èù çQ|møÚðµaìgðÞÃ{$‚9ËœeÎNž“á3|†Ï¼‰7ñ&À¥r©\ê@ãJãJãJ 7¦7¦7HOMOMOrl_a_a_œ~îôs§Ÿ¢¤QÒ()àqÜã¸ÇqÀ)uJÒßpûàÁ”æuæuæuGqGIðl=gI°$XÐËò…|!XROêI=( QˆB€èˆn’®ºzèê! ¶8¶8¶ð=î{Ü÷øÔûËy—ó.çÓUÓUÓU@úžô=é{ÇvÇvÇv@rNrNrnJŸ|K¾%ß‚º¶¬õšõšõz™&„ ¡çùùù¾¬×¯×¯×ž»¡¿¡¿¡0³16aLÆt €ÁÏàgð†N: Ì÷›ï7ßoÊáý„û ÷€Ÿm?Û~¶£#£#£#À©·O½}êm€"‡È! á™†gž æææØz%½’^ `¼k¼k¼‹ä½ò^y/_Æ` Ö`Íîcœ–ÓrZR\ï[ï[ï+„˜cͱæX(Y«cu°¸´l;Ùv, , ,Ôeê2uÙPùùù@Ó¯é×ôž³4Eš"M òeòeòeùü@~ܽ^ÌsÄèD'@äàÓÿ¦ÿM ôjèÕЫ°õõõᕚë5×k®“ÿR¦+Ó•é—Ò™t&¹t“Ëä2¹÷’9æsŒ9ƶ¢u¨»«ÅD11ëS¥T)UJÑ„&4F?½þéõO¯'gâZâZâZF_£¯Ñ× œ ©»J¸d²a©¡†`Y–eY öNìØ;°Œ*G•£J¨.\¹<‡H‡¤CÒ!ÄB,IJSÄr,ÇòÎ-´Œ–Ñ2.ÐÕüÍÄÜÈí!夜”—Ë$1ILRAÕDyb>©¾Q}£ú¿udÃȆ‘ P’³ä,9 €€ÿÐBp   mh›ªZn*}sæ›3ßœvŒèGô#zî°t†t†tÆ™Òð}áûÂ÷}ÔˆÝØÝäoèAzøÅlrrrrr2<ððHTOôbò~ôñèãÑÇH7¯2¯2¯Šd,«-«-«ç\yù òA¤°#.!.!.I§Jª¤J؉‚(ˆTPA@dÀD AÉ àZŒ-Æ#}±¡ ¡ ¡€9íääÔÿØiršœ¦u«†2†2†2,üDy$›]Vä'Æ]ëYÑSô=á}}àúÀõÀ‘ïÈwä½ï¡öP{¨oŸ5Tª ÕlYí«µ¯Ö¾J_$¹$—äB&žOŠ'A¡€ €>¢è#€ð„'»&»fÕWñ¸Ý£Î¨»ñäµåµ¸‚® º™ŠíºOŸ/’âOïgçe©¤Yße}glLÄÃ+%¯”dçÇã#}àìrvÍÆàõî×»~<ùãIvÁ½þ{ýoü{#¤b»nãíù6_:¿|üHÈìÉì1nC–#Ë!OU?U]ôfð[ÔnªÝ0ž1ž¡M°î9äè@ˆö˜J‹ízoÏ·ùl~»ŸÝ?®GÀ]á®—_}ùUçñø„›ðná»…v¿hp€ä@, X[­­D@÷é> HÅvÝÆÛóm>›ßîg÷둇÷ö“*B¾¨/štYUD3£™ ÷Å&bØm#t±~Z? ªL•©2Rã_þâ/àWÛÕv¢ºØj²š@Åù¡^êø3Ñ?¹•!‘âÏÀyËy+´FªFªÀú ¯îŠÍÅæ˜ãÑQL1Å ¯ékúZZ~–Yfyæ™ÿ?¼5kÍ&ù¼ÌŸ>à 9C¡EqaÅŸ%ÞTû/àø P«m¾¾Oû‚}Aô˜g¬t¬ô1yŒøGü#~¸¸üâò‹ËÓ ‹YÌbÐíÑž‡ðûFö¡/žÏ;ŸggÕjݹgç`.®Ç”^‘µ?É/ä¿/bT‰ˆžïó¿éý¦Wª–W™U¦o44KrÄÅʼnx•Wy•ÈþÖý­û[SuÕ¨U£ˆqÐ8h¡šjªE¼Ê{Ë{KŒýG¬;°NâhÃÃs~Øðƒˆü×cŠ™û^î{eå²³b¨bH‡ˆˆq\þÌÈËÈ“,÷‹îZw­Í4“&,°-°-°M$’ÉŽd‹,k_Ö¾¬=U×7ô }CDj¤FjD[[[D"ÙWÄ%²¬ÕÝë„°ã<»á­ o‰È3¹r/”• ¸–¸–¨!˜š˜š«"yì¨tUº*]pêè©£§ŽBOgOgO'¸KÜ%îhhjhjh‚U-«ZVµÀhùhùhyjë‚ýÁþ`?LLL¦ã‹öíÛë&¾ø–)˜Ù<³´?/PC¦hÕ­º!‘X]¬ND""âN®¼Y¿£ßQ§ÕiuZÄ,4 ÍBÏ‚gÁ³ rõÌÕ3WψÜõßõßõ‹\Ÿ¿>}^$œÎ gŠèQ=ªGEÖ ¬X3 rõlÿùÝwv‹üº{(g(GÜ"Ƥ1)B—Õh5C‰ÿJ3|=óõ X»ôŽÄ‚#µ'kÕƒ':Nt<þñ;‚ÁðööNåK+K+K+á¾ã¾ã¾# ÿe°5Ø µ›ÖoZO$a:;¬ã--¶¯]iN?•ú?ÎÚ§Rµ¨xPö`óƒÍèÈúÈÚÈZ ›nºAµ©6Õá•á•á•0ã›ñÍø@›ÚÔ&LNN‚UgÕYu }ú%ý„W†Ÿ?þç÷©Á©AàJ¢Ÿåßÿ>0×#¶o€óžó^h [ÃVr^P ª!ÍÇ¿œi¦™Nó-FQ¢Iˆ!’Ž×º€¹„E{‰_¾œæcú!KsþX}F}FÊùÉ Ç†½Ö¸5þ¸ó³—ø( €@aa×cz ¸›tþ7ÔDÙk]².‹“Îï¨w‘GÿÉýW>±·‹'ö>ödÞ`ÿUüÞyYÐ'ýIEND®B`‚routino-3.2/web/www/routino/icons/limit-188.png 644 233 144 2703 13061246470 14607 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜxIDATHÇÍV_LSWþZ ´…B»ˆ &Ά1Ù²((Ù©f¬ø¯™/0Âö'‰¼@ŒfD &j|ðIÅŒƒR mT1Ñ å$CІi UKÛ{Ï·‡rzëâÞ½/Í÷ûó}ß=·çwH@ÚÊ/Hýzýzýš(Öÿ¬Å{{¿ü3Н*¤î îàp™z%õ I𝛝«£–yYßhüñz2Ž4häŽä]É >CÚ·Ø·­QÜâ&MN“ó]„¬¹[s—$;[;[ù 9÷dî IúJ|%¤†e^ÖË~ÉÏ3ÿÑȤž¤Ý™lH6ä†=ölü-Z0±‘´í³í#É™„™¡'IRù‡d SD I?ý”ÏB–ù•zÙ/ù$¿Ô“úQ? -;-;²üXù1ÓµhÃèd]v]¶Ô ;I6±‰)dÄñ“¤R©Tr™ná&Iê¨#5,ó²^öK>É/õ¤~Ô>þ¶v“GŒGŒ$—H2<@ª©j*©‡o†o2,…C8(¤euTQGȈ7âxI¡ˆ­ Õ¿„Q)"ÞPa¨aa3ˆ¸|8r8BRH}ÄÊ»LÕ4kšõ'’cê˜ëüQ™ …‹ø^´‰!1¤ Ÿð ɳ<˳Zœ.ºè"EšHi$ïðoÅå/¨[Õ­|ÏŒ(?9¾~|=ɦצ×þDégÅØÕGdmcmcì=¿ýá{á{š÷ïîFw#9¹vríäZMÇsÜsÜsœlékéké#‡·oÞ—·{ì;Ù2Ø2Ð2@Ž|;r`䀶ââ~T¡ÚúÚzùi¯>Z1öâ$Ÿ9:’¼B’¢ŠT}ªË_t¤t¤z—Þ¥w‘=–K…œœœ&ÓN§N;MVª8TqˆÌ¿”)ÿÙÔÜÔÜÔLæ,å,å,‘þ …ŸÌ~œý û9xç©í©Ë+öªÔÇm=m=ÒØ‹“z`Mßš¾o ð®x[ñ6¿€îœâ’ñ7±X/Z/Z/¬d%+5GÍQs€U«:Wu¥Õ¥Õ¥ÕÀºÑu£ëF@w ;Ð ¤”¦”¦”e™e™e™@fæÓ̧À‡àrÖr’£(Ý5Ü(ž.ž¤=`K°q3~0¼3¼ƒ|ÞŠïYÅ*à¨þhÂÑ`³}³}³xÞ€XL_L_L¬°Â  µ­µ­µ X˜Y˜Y˜P†2”æ.s—¹ ¸á½á½á|‹>¿ÏdtgŒfŒjzºë†rC9 ýèµ[íÖ½„ˆììZ„7xÃP_©¯ÔW€Ñf´m@{V{V{°#wGîŽ\ ×Ñëèu©oSߦ¾Î7œo8ßìß=¾{èµôZz-€¡ÞpÊp xx>ô|HÓµ¡û¡û€ô£ü%þ’¡gÐ÷÷õ÷É:V#_$‰$„dduÑê¢ÕE@Èr…\@³»ÙÝìú­ýÖ~+`všf'_—_—_x<Çtµwµwµé³é³é³@¾ T*ö!ûäguÂü€cÀÄüüß®dOÄqh»r黥mKÛÈ +è º´]ìv;ÈyÎsž¤:¡N¨qù—Á—Á—ä<ç—ç—I‘+v‰]¤R£ÔœZÑ‹é´+ó.“¦9Óœ?‘SÆmŽ‘ê õßÇ;Q§…¢P’Â)œÂ/墜T«Ô*µŠbDŒÄåWEj#µ|ϯbs,oç£ó“öJ{¥½·jx ¡°á톷µw} ¦d³çŒçL¬k¤f¤ZbZbà«ê¯ª@‰R¢‚^ÄEÐÊ´²Àú®…] ÀºÔºÍA5S … … …Ú»údƒø‘6·çÃùq¢Þrl˱-Çü;S==Œò¥M¦M&Ø<¼y´ ÚèNéN€ùOç?€þ®þ®@‚½ ½ 0ûéì§3dþÈß_t¯p¯ðãs>œŸ(.äõæõæõꉊ²^—Ï,ç,xiÛKÛ`IÏ’0~cüæ~7÷;hñ´x : N¼úú«¯À;sÞ™Æoß@óýæû&|€r nÁŸ—–—–—¦ßÛß—v{½ÇÞCƒ.aúÑô#Å=ÞíB;Ú‰hÂåŠ""ršf"¢“³OÎ&"JI!"ÚùåÎ/‰ˆ~ºùÓM"¢ýû#ˆˆ–õ/ë'":½üôr"¢g¯={ˆÜ‘k#×Q¿ï¦ìd¥¬”|ÄHµÚFm4Èù‘#ä9žþÔ}ZÚ\Ð\ ˆñ+ãW€9˜€ëTí©ÚÀÉÝ»ÆJc%T\­¸ ¯˜_1@rrr2¼qô£d~ô ~\ð# œïÜ×¹Ïwµ¾[èôIþž¥°–âØcc‡›}·ê«:«ª«ªÕ…¶üÁCƒ‡(R|63{f6M`ýš°5aD~ùîå»DúÞ©ÝÑî "Òk‹‰ˆV-Yµ„ˆ(7!7ˆ(¡$¡„ˆÈ}Û}›ˆ<†qÃ8å²·Ø[Db¾Ô/õ“{ÚÛ,²ôIÉpɰ–îk~JF„‘OÃ(:;:;:›Hº&]“®µÙõ ?/ëû¬ï•ý|«jùÍ´›ipÁb´m¦ødøçûiï§NZµ©¶@ÉNM÷櫟œm9Û‡‹îìøzÇ×êÇw‹»ÅÝÿÈ÷úFþ«ç6ï„!ÅbH±5ó‚òʲ]e»´uú¥3kà‡ Ÿ]ùì çÝwvÔ†´!ïÊw¸ÔÏÕÏÀUæ*”–=-{`øÜð9Lh¿Ý~›õ'´V¨jŸm`sÙ\6wiSAñ®þ¤î`;ØŽõ¬µ±6®õ–nóˆy]»ûÕêŠ~.­X+œÀ À?+ߺNÛ¥íòÏ×Þfo´7IIQIQò^}’Ub•XUnÒ©åPåH‰~®™”I™R™ÉLf"qTüYü¹¬SZËËäXëVfe~@m\,{ ` €àœp°  M€–¯}¡}€ T¿»½=m{š²_&%«dµ‰/‰/‰/!L‚I0±ó>v…œf”ï3_ÄviÑE 2Š E–#ºv3M™¦Ì@íªåj9\°À €'x‚'þA+‹•ÅÊbÿ|¯>¾úøjmþ–Çb ±ög^?1"ø¤YWÈÑ qoû‰^íZÏûµ[^Y^ ÝX9VŽõR‡ÕauØíô¡}€ÅØgì3öi[uMF ÑBôöC!R<Â/œž¿ ÑîÖ×®¥ÛÒí×®Ü-wËÝ~åNÇOÇOÇËËËʯt-žωç>JçRóI/”` ½Àü ¼_»£âh€vëëëåXk›µÍÚÀ\pp¦å—Ê/•_ò_;R£Ô(5öùþ’ÿ‚ë[§È 5^°Ý§Ý‹ÿI»Y¹Y¹Y¹~íZÒ-é–tœñÆ5ý$X+`ëÃOBpý—ö"í®kÅZ±Ö–Ê TTTkIv'»“Ýò}ý¨GÅQq´|µR+µ’ïÚ­!xáô?Z¨vûYý¬˜³b€6ÒFÚ¨.„!`ĈѕISISISDâ-ñ–x‹ýÍW˜rrÿ7‹Õ¿eS6eK÷‚à š  ÀºXëúç/¼ë¿´„œÌ`Hßõ¿Î.i5‰Å ÝIEND®B`‚routino-3.2/web/www/routino/icons/limit-16.png 644 233 144 2374 13061246467 14527 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܱIDATHÇÍ–]H”YÇŸ™œ|§™l¬±hûZÒ…6X»Ù@W¢ úÔdºØU¢•e‰º¨‹ ºhíbi¥‹H¢LbH7¢4]WÚ½ÈÉP[×0ìC‹”Sç=ç·3gÞ·ec»ôÜ ÏyÎóÿýÏ{8Ï ¥~¼«¼«¼YÉØ[åÌ[›¬MŸ^NÆgmðìðìè=‹Î,:ÝÝ úœØäÍzw½ˆ£ïæ™y ‰3‘ËŒy"©øì^¿{½•“Œì‹¿åïT_«¾Ð|¡ù50Ú=Ú ð&ò&Nlòf½©7zn}9ö/¾ønønxþ‚Ìù™óE ·,·lÍ÷Ƀk`ë–­[FæÌÓ^°_A‚:L2‰c®ØäSëM½Ñ3ú†gøI?á’p‰lß³}ÿ|² ïZyh¥áͶ'8A“‰I»Ò®dt§îÀƒœØäÍzSoôŒ¾á~Ò¼¶u_A¹Un¥ ýv—ÝL¨rUÎl*¡U‰*T… éƒú`ú‹¡+ô.½ ÷÷÷@)§óРêT³LÙ­v+ ¾á¾¸ }öøGý£“Ðo÷Û€àkP{Õ^âlÿi÷Ù} ›t“nr ±Œe,=®Çõ¸kþ®pøŽzêÔau˜83F?ÅKó“~RÆÎþ ûŽî;jÔÔ®#кCßÑw^g}g}g=<¹õäÖ“[Îü`h04‚º›u7ënBOEOEO…ë‹öè—ú%šxâEâ…›gøI?)c÷BÓÛ¦·éòo¸gï·÷3ÍÏœâ”#[[[    «ŽUǪüFÏFÏFlÚ<´yŠÆ‹Æ‹Æa¸e¸e¸Åeð‡D(b:ÍKó“~¼"Yw³î|)RRZRš:_ñœ—¸w¹w¹dJÔJ­–ˆ<—çò\dñ‚Å / ¶Ûƒí"­ªUµ*‘ÚÚZ‘ð†ð†ð‘b«Ø*¶DÂÃÃ%=<¿{_{_Kfš—æ§ü@öÂì…êŒ={æ¾öú•~åìÐ.³Ëì2'އ«½W{¯öÂíÆÛ·!¯4¯4¯Î Ÿ>7 +ºWt¯è†¶Õm«ÛV;õªØÎ·óÝ<ÃOúñЍëêºç‘Hb[b[zCaÑÒ/ýÎÅ'>ñ9!¹ÈE=ªGõ¨Hpgpgp§H ˆ¢"U¹U¹U¹"9]9]9]"#§GNœvÕŽ¿‹—æ'ýxE&#“‘ˆt´u´¥Ë¾¯ÒC2#"S2%"ëd¬s„³|Y¾,ŸH| >)òù‹ü"k ×®- X+`‰<.x\ðX¤Òª´*-§~Þ´§×Ó+3i^šŸòó±·’4ÓìÅDñDñD1¼{úîé»§®#Ù1;c‘±ÈXT¾ÊWΑÁ SL¡ß×ÿà­ü>FºEUÔécÀ4ÓÀ 3©^”Q¢DAt@\·ï½D/J¨¡@T'‰§îãÿõ±èü³*ª¢Nç'‡!à(G8â2ØÈ%.îÒíº¸Ì AP˜Å¶;ì·þ;ÿœý¯œ³¯‹9û››/Ø?VÙ}-A”»IEND®B`‚routino-3.2/web/www/routino/icons/marker-66-red.png 644 233 144 4165 13061246466 15446 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü*IDATXí—mLTWÇÏ}D±³è¡ŽÖ†]—U‹ÕZµYA;`ÒÁTmpm+„µé6ÖÚ:4mLÕ°ÕmI*¢f«©HÝÚZ×h`«ÕÄÐhº•´Øaˆ²‰‚ ŒŠŒsïÜß~`Ηfk6»Ï—ËsÎóò»çüï9ƒ£ö+‘`ê¢4_š/ͧÜd¤K=–z¬h¾nê¦n¶ÿU̳Ål¶j….t¡K}«VÆË|YOÖOì§.Jä‰çÛ$6‰Mjsâü¤ßêÇôcú±æAåuåuåuÄ1ahÂЄ!þ¾¢kE׊.XuuÕÕUW¡$¿$¿$?æËy/óe=Y_öûe¡þ>Ñôõ¶z[½Ý3[®Ðä²Ée“ËÌÍûÏï?¿ÿ¼568ÃÜáw€zèÛÎËx™/ëÉú‰ýýà—ù„s¼Ú«öª½=§düsùçòÏ ºÃÝáî0ÝDÍšeͲfa˜[Í­æV0ç˜sÌ9`ºM·éŽó£ó2^æËz²¾ œÐß9ÞFSš•f¥Y½Z¯Ö«;d‚«ÖUëª5Ü6Ø›VƒÕ@Ðh W„+Àê1RTà¾ù©ù)ïñ!Ñî[_[_ÇâÆÐšÐ°Þ´²¬,‚2ÌUëªtUnÙ_òH>‘r%åJÊ•gžÎ*g•³ÊÊ ÜnEëÍwÃáN²b-ìWñZ^¾áëeëeëºuýçñæ»Fº‘n»ÁÀž´ž4n9«œÛÛ­Écóéõúƶj9Q_Zÿbý‹£-€a£9üQø£¸¡¾ê¾j€Czà䎓;Ì,3 €SœŠGêÛÙ·3.>tò“ï˜óÍù`4›ëÍõvðp}iýºúuÖËöÊ&ð «ÂÌ 3'̤v°h°h°ÈN4˜"ß¹sOç€iyÓòƇLJaôX¾dù’xÀKŸ_úà‘ŽG:Æã¸øàJÇJØõ£ý‹zzAòH> úçå;—ï\¾3öffwxix)Ð/‡žq=ã(¾V| À:nhq´8¦.šº` k  `¥²Rp?î~ôÄI`Ì­Ö[­Ê2„öÕ쫉ߥ/¾ÐOè'öØw`býÄz€úöúö¸pcðÇÁD¨óè¡Ý‡vÇúýc×™¶3möJþIÉSò”¼pŸÐæió´y[jäW6å§ßé7 üÁ¿Í¿Í.´–,¸·àÀ³Ï=û\ü»ï5÷šñUWMW @‘§ÈPü]ñwñêÛ7oß< Xì{Ú·&4ž¹%7”ŠØ€6I›¤MÚ{Kdff ¡ŸÕÏêg›zí¿dñ‹0ßõ#Þ s/Ì%„/½'½–`òéõ{ýñ+}á³ ŸŒ:v*ŒÆÝ}FöVVÆ^·ì«Ò÷Kß Û€/i/i/ýsõ¨Ÿ.¿zi“w§ä¥ä¥äõ|(¼[7¯ß¼Þ²#ÓÙ ¶l‚_møjC< å±0Ùd Qí~òŸ´»xÙâe‹—Å´ë[è[è[ÈG£ó–½ŠGñ(ž§·$¶Qo&õUÄiÒî"­F«ÑjzæH`O•§ÊSeýeÖýY÷gÝ7¾³·º_ë×ú½“E£h"zìh¤~iâ´díV&ú‹RÊ•r¥ÄR±T,䪫«ƒ"¡ˆÖ/¦ Ož2,„Ö¦µimÊ™hâê¤û¿™Ãþ«PŠB½#qú­RÕR-Õå´rZ9ý¯©£ã¿ö%íLwRÝnõ¿—VÖÏSð; IEND®B`‚routino-3.2/web/www/routino/icons/marker-22-red.png 644 233 144 4220 13061246465 15425 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜEIDATXí—{lÓ×ÇÏýý~Î2,Q"âlk`tY 8€“(d¨ ÄÛ®ˆ`Q©(1Á$Ôhj€(+aD´i ¢H†`b ŠÐÊ`€†MØ)d-!'sâü^ßýߟc i;ÿØçÞsÏùøÞï¹W&µŸPŒ =‰žDûgx %á\¹„s…¹’*©’zï(ͤ™4ÖkI"‰$î±¾^Ëãùzžç­',ˆå‰æs’“œ‚;v~â[Ò9éœtÎÝö±ml›’fî7÷›ûqyù£å–?V=]õtÕS`¥u¥u¥5âóyÏ×ó|²¤ ]B—ÐÕùGžÀzÃzÃzCù•WöÊ^^„MŸ¡ÏÐg@Q«Ô*µ PsÔ5PKÔµ$ÊÏóx¾žçãù à˜ú–T¹™›¹‰¤}Ò>i_Ó}¾ÀVk«±Õ(%Ø}¯¾¥idçÈN@ï”ËŒ¨—ÔK€Ø@C¬h÷´{‘x¥)ä9}‡ž¬'#ÀÃlµ¶j[µRÂësÎG¦'¦'¦'KfóËKµ¥ZŸì{îûÞ÷=úÂyê§òù@ r4‘¾Wß pÀú;ú;<ÿ¯~ª˜³á|Ï;'tN@ŸeåcËÇúdÎcðI[¥­ÒÖÛûøDÆGƒCÿ œ ¨¸å/ä/¢xB­‡ZÀWS¿š —Ï\>ržœ‡—XëáÖÃQñ¡Ë'/Ÿy“¼ PÜê·ê·Fp°aCƆ úÆÎÆð‘î7O7O7OGmOaOaO!  mPÉsóÍæ›Àh߀Ùb¶DûKN,9 xò½“ï½">°´|i9€LMÓ"rQz _œ}qà<œƒþnÙþeû—íü2Õ«ÝÖnð󡬬xûûÛ£îJw¥h  ³.Ì€Y=³z`ÖÅìðݦ»MQñþó‡ÎToLPóp>!ÜRo™ L¦£Ç©Œ]eW‰h‚Ü'÷í*ÚED´ùÉæ'Ñ7E’íkZ#QáƒÂDD&|˜ðŠø$i¾4ŸˆŽÇ\?‰¦S¦S¦SFËóûU·çÖçÖçÖ£c˜ ³aà Îà tlÒïë÷HÊ?È?@Ý¢ºEÚ˜Úηo¿L£r¥\ù’ø3Ë™à^¸³õ-úè|•u¼u¼u<:8 %B‰P"w‡j999£$Ä¿¶w´wåç@¦#Óǵã¨åjy4`{~{>ä¬ÈY™öL;å¸r\}Ž>PO«wÕ»‘z×ê®Õ]«3^ÀÍ,›e³l¹›Ä9âqÎîÞe™?³\±\Qßô­öî÷F4ÐåæÀ<ë<+ýù×Ï¿ŽX1°"Ú÷ð»‡`Þ˜yc  OÿzÀ>`¹[îF(ˆá¤á$`úîéEÓ‹4ã'Šʼn_öQJAJAJ‘t]º.]oî2.ü•Åæb³Zô^ë½h®T1UDVÌŠ$<ædÎèf:øøàc°X,1]žp=á:€>¡\(´/‰ˆ ç»Ïw¥w*ÖW¬×‚`™X&–=\3ê'ûYìšñ¹)[:)¼•¬åKŸ›Üä&ýâñÎö?Okc†˜!*i¾]íÃíÃÑÚ•­²ÔÙêlºž§çªGÕ£<Ê%å ¯Q²”,„,ÄB`ý_Öš×šÕ ã”|’ÏS^ž^ž^N$Ø›`c§Ãt8æØðç±Cì;ØÅÉ•“+'W™JM¥¦ROµ¡Ý|[¾-_­à¤šKsi.„à ¿é½èEod'Õ©êTujdëçÖÏ­Ÿ«/2Þò4Sš)­kxÔ·$ÅJ‘]¡8‹Ó*û&Ö·$™²MÙ¦lßi^ÀUåªrUé‹8€’¦¤)i í™öL{¹vÚІ6À“ܖܖܦ/çy„!EHY÷ÛØzâçq|‰ôê±>J»æX¼œ5³fÖÌï9í#O‹§ÅÓѮҢ´(-奥¥Óú§õOëWahñ”xJ°_´_üŸô|ÐÐÝÖÝÆïaüÖø-€gžgˆaÃoÄù_<¿|ò3}xåê+WM?@‚-Á&Yoe½•ý‡hÀh6ì*ÙUðÈòȢ̙’HR DcMÅaÿoä|¿¡gèGëHu§ºEà튷+ì-Ñ„ásðaƇ†ÞâEàS>% ´ˆ¼y—0¨>Õ€ İá7â|ƒÏà7ô ýh=òÓÞ6ì ´gqÏârA~}û¢uÑ êˆöP{ˆáQú´Ôƒ =Õ¦µiPµªVÕ[3L2¹Œ”>§%iI,j?,f-fîòÞÀžðbI¹•!‘uM``²ÂÈŽ‘À«þ¡MiS¼XVx¦‚*ç8Çã 9ÈA(UUp™Ë@äJ´³˜uŽ:×›Rír‰`1µÈ„e…e…$¤R~LùQľ߾߾_ävÍíšÛ5"i¹i¹i¹"þ‡¿CÄæ´9mN‘+MWš®4ÉòZ8°p`á€ÈIëIëI«È¾â}eûÊD~ù÷•_­üJÊž6ݧûàùÜó¹çsP~½üzùuÈ|/£$£úÿ3?ÏÌyç¼ Ÿr|îø\2‹Ò{ôÓˆV¦•‰ˆMDDR?VÕ#õHÄÜnn7·‹ÌgÎgÎgŠäœÈ9‘sB$¿+¿+¿K$¹<¹<¹\$cCƆŒ "zºž®§‹´Úí‘í·oܾQ¤»°»°»P$õnJWJ—ÈàŸÓÓ$UÄ\d.át¤0Rh2‹9T*¸û­È×½_÷ŠÈÞ7:‘ô‹$G’CDvÊNÙ)âlu¶:[EfëfëfëDš‹›‹›‹EªªªD\6—ÍeÙ²i˦-›DÜ!wÈIݺ;u·ˆ£ÌQä(ÙЖóqÎDz°Ï]ùeå—¼/Ò³«g—ˆyhnÍÜš»ßÆŸÊ£5G§RoÔaö·³ï̾ƒšï¿:5Ö¢pc¸1ÜÁ'Á'Á'@!…‚²)›²ÁtõtõtuÌ®ui]ZL\šhhEEþ¶PºP;• ÕdÕd÷Ì7K…­kû¸}²rç's,nòk{-{-±ÉOšÐÀ‘ÈÃHÜäç8‡9 ê–ò+?pŸûÜf™aÔÕ÷ê{ ¼ß‰Œ°¨þ­µ pÖ˜ü{­{­@øç“ÿå½+_Ú×ÅKû{9_°ÿ¦i»ºŸèIEND®B`‚routino-3.2/web/www/routino/icons/marker-3-grey.png 644 233 144 6036 13061246465 15547 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ÓIDATXÃ…—}TTÕÞÇ¿{Ÿæ ˆ·/—%B¼&Y/‰WÖQ K³¤[i’-éáY¤ QØ ”Oàcѯø¶Öc zUT¸#B€fpYÞš!Ȩ€ˆÃ4 2sfïûs å]­~ÿœuÎïìß÷söþî—C´Z­V«…fÃ8{¡ñ²Û²Û²Û¼^ûöí7ܧ`´`´`tåãÜ»s÷âÿ}E_Ñ7ê­™Ú™Ú™Z^„C8„C$aC€^ô¢À[x oñ"Å Š/\Ù=Ù=Ù½+‡È™ Tä{ç{ç{7u¦¦¦’1P Iò,kup¹Ñ9À8Ä!ŽV±VÀ X«uÊ:ez4º@_ /ÐW XG¬#Ö‘ÆYž²r¹Ïÿ\´œ³œ³œ[¸:(%(%(E|.-5-5-UvÉMí¦vSË]b—Ø%ïá=¼’„$€ž¡gè€æÑ<šP?êGýlÀl°k°2v…]aW7•›ÊM/©¾¤'éK<ŸL4‹fÑœmýÎúõ»ÔÿòLñLñLáÁ)GSަ•u ÉH†‰‡ñ0WGãh9ä$šD“h@¼#Þï̹17@° VÁ Á"X£Å¢Q4 à!<„‡ÀuvharèU•§”§”§ð`S©ÆT“j@ bS-›Øý’McÓØ4@â'‰Ÿ$~‚n n n pbí¬µCM/Ò‹ô"ÀMÜÄMó€Ý9Ý9Ý9@í¢ÚEµ‹óyóyóy@±G±G±H^¼:y5{.ö\ì9ñˆG<@ZI+iõ]Ý»v; KⳉÏ&>‹ÕW\ý1 ÷—ûËýw¿DÅ`1X ~:Ýý¾û}÷û(z"ቄ'H™c¶9ÑÚB[¼7ð@\‰+qÔ=¨{P}óè›Gß|ßõ}×÷] õÔwRߢ6GmŽÚ TÿXýcõÀpÉpÉp €V´¢à5¼†×sõz’¾Ä#ñaçäÎÉ“¬¨jiÕÒª¥\Š)ö6{›½Í97s37sÎ\Ásy>66666ƹn™n™nçý#ý#ý#¿ÉŸ;1v‚óœÝ9»svs~Õëª×U¯ù¼Û¹ÏןÓsèK<ÅìÁFÓãôøÜ—)PƒÔÐ@ €~ô£.PPP ãóŒÏ3>Ü¿wÿÞý{ jGÕŽª@éºÒu¥ë€€æ€æ€f ‚FÐ:ßžn§Ûév2È pWqu^Ÿ¾N_§¯(G9ÊI|_Á—Ÿ0ÅšbM±¸)f‰Ybò-ù–| >ìw¸ÿFh9]N—Âa‰° ·È-r `2&c2À5Ë5Ë5 ÏÏÏî{Ý÷ºï5ßžoãÛø6¿àü>ÒGúÀiaꇩ¦~ÀMDƒh?A•{•{•{Å’›Þ7½ozóaaš­d+ÙJÙÈFö¼ÐDæDæD&ðSóOÍ?5š)Í”f Ø´wÓÞM{÷uïëÞ×.—].»\šF›F›FçÛKËOå©<ÀÆ0†é[ko­½µ0Ü5Ü5ÜÅÿ*o*o*oŠ%)HAJþ!™V¦•iIn“G“G“‡=Èø¤ñIã“PS ÕP LÒú'Åð®á]û€ƒƒwÌwÌwÌóyfdFf„)aJ˜T¥ªRUéoz´ƒwð€è‰žè1#n7Š¡>k8k8k`qÄ@ Ä€ÿ#vb'ö¯œ¨ÏŸ >>ËsJtJtJ¬nUgUgUgÙ·;êº1f$¡¿¿? *mU™õf½Y¿0-I•¤JRñåÉ'“O&Ÿ$ìãöqû8¸à)x ž æs¹h»Üv¹í20˜>˜>˜x­ñZãµXºn麥ëïï³rVÐtšNÓaéÌíÌíÌÅ_*u•ºJΪúUýªþ«¸À.DýáGøõ¿ ‰.‰.‰.B9BŽ#“/A 5ÔÉò3ò3ò3›co¯º½êö*Þá}Öû¬÷YbòYï³Þg=sXA®¸§¸§¸<¦{L÷˜ˆ ˆ ˆ Âeá²pàéé ðü?ÐlšM³aúÕåW—_]à\UWUWU'^²§ÙÓìiô¹Y«|p‰HDâ?ö£E(’ù; {Ìì¹Q¶›èˆŽè.dÐDšHwÔ" iH£ÓËõr½\ÜjÔµF-ÔŽ­ÐÄ;y'ïfO_ž?ÏŸø¾€/¸¸ ÉArpÎ:®uYuYuYöí999²ýŠEˆ"äXahQhQhÑç‘|ä“¿£}蓤•Mƒ `@ìF&2‘Ij?ýøéÇO—¬S¦+Ó•éÇ 'Ü'Ü'ÜeÆjßjßjßyïâi<§1CÚHiÈiršœÈ $ƒ^Á+xÜ1«m†6C›/oohohoJ4Þo÷Ðk¥µÒZ¹ó³îüîüîü¹|Ä¡óµj‘,Μ™3sÆ#׆¯ _¬™ÖLkæÎÏ4îwûíã½ú^}¯^(©¹þåú—ùr’A2Hì;ÂŽ€Ã.pø$Ÿä“±±azÌ0f3àXãâÆÅ‹ñˆfD3¢X,‹e±;?£ûè>ºoè=DÑCÂ~ÇÚ,mDš„Ž_…ãÖ1DB шFûvGâHÜòu³¿çÏØ¶Ú¶Ú¶²mØ¶ÑøÈ}‘û"÷áÖÃzXÔ4œ†Óp̈¹b®˜ EiHiHiˆ=tdÉÈ’‘% åbåbåâ’¥³“fÇ%VÆÊX™l¿cdß•F¬°°°°°¦¹MÍñ`ÎCïnwxw¿Ã»5ÿá]›Þ¦·‰[Æ cÔ”RJ)&¥žhšnšnšf–¡²¡²¡2á†2O™§Ìë®›¹;swænÞ7ž¹ñÌg`£ZœÛ ñP<ô‚ÚQàŸïžùïúNøNøÊŒ'µ'µ'µöíE(BñH—G—G—·t´t´têuº`A,ˆmk•½&{MöÚôŸƒc‚c‚cè/½ç×釹üN$$$$$$@tÜvq'îÄÈÛ###øûûû‚‰Š`E°"xýß~Nú9éç$ÓÆëÆëÆëüók__ûúÚ×öef›Ùf¶ ™òxy¼<>ËŸWð ^q´ ( nÍîõÌOGG‰óüAüŽw PzÔÛóy-¯åµ }ô=EO}ü`탵Ö²y™¼L^F¯ iBšÖü}È©S!§V&ú }†>ÒÀe²GùWŽºz å÷8(þ ò®c¹°ç#È]!©$•¤^ áõ¼ž×°Y  PÐë€0 Ü `Ŭ˜oîyµçÕžWY@;êIËé?âø7¾ˆîNOIEND®B`‚routino-3.2/web/www/routino/icons/limit-135.png 644 233 144 2731 13061246470 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜŽIDATHÇÍ–]L”WÇŸ¡Ìl`ørtµt‘SØØP.lcª"qQ#B¨Nj+Ö5…Ú¤ºi¢MLÁØdãê2‚!´ØIÄ€”Îv•‹ƒ´¦5 +0,jQQ̦ˆòÎûžß^Àá÷ãÞsóæùúÿÿç<9Ï{DD$uî+÷BÜ qžY;®Êö»6¸6䜵Lp¼áx㟟BJ]J@Úi_X?Û¶ŽëüØz?–Oû%UlGbkb«£hή7_~óe—wÖþ[Üíîö©(¼×ñ^@Ûé¶Óì»ßÝý \.ÛÖq¯ë5^,¾Ôü¿$ŽH|.ñ9È*Î*~ñ/³ 7^„²’²€_â‰Wq`>’HRE@„zÇØ:>—¯ë5žÆ×|šVÀ‚µ ÖŠ@ù[åo¹?Ÿ-øù |”ùQ¦æ3ÚÏøŒ$ˆF¢³Â¬à ¨ àÀ¶­ã:_×k<¯ù4ÿ¬yº·Çþ>—ÏL½`¥X)`__b¨OU‹jAiÉÖ˜uϺÑ¡èPt¬›Öˆ5ü‹À¬6ÛÌ6”ùÒÌÖ™­f•±ÑØÑø[­0¥ù%VPn-–{Ô=q 5hÍ·f“9l¼n¼Î#uN]S×°×>ö±$ã?Å)Nº£î¨;1~P*[eóHãÃ`ï`/€;âŽDœZÏœ°†xÿàûçÏáÕm|m|=«B Õ„j`8}8}8ÝæëOèOèO€c뎭;¶ú²ú²ú²ìøùÍç7Ÿß þ þµþµÐèkü°ñCÔoø5õ×T›m»ûw÷ëÖ6ôÌ ûi??´tµtuê]°ÂV˜'­ [“Z“ >‰@{A{A{„……çªçªç*ønønønÀÒãK/=s9çrÎe(ÛR¶¥l Tœ®¨¯¨‡{×F?ý˜'sû~WõŸýþì÷ZØOû"ž 'XðšLˆÈ^Çç¸aDD¦eB&D¼ßzƒÞ ˆÚ©vª"æ s…¹Bä°ë°ë°KdÉò%Ë—, ///é¹Õs«ç–ÈTþTþT¾ÛÙÎv‘ÒPé¥?ŠüþÏÏ7?ß,‰fùyE›Š6‰Ìë´ä´d«ÆGÇGíkoGó£ùvKŠs‹s‹s¡ÑÕèjtÙþ‰U«&VAùšò5åk oeÞʼ•P»£vGíØ{}ïõ½×¡iWÓ®¦]°¨~Qý¢zøÇWß4}ÓdóYÞ1cÌ­'NÄê´:ý¢¢¥ÑRÑk$Èm¹=o‹qÒ8iœI?“~&ýŒHWvWvW¶ÈêªÕU««D.„.„.„DŽ-[8&rÑÑÑ/’—‘—‘—!RÙ\Ù\Ù,’©2­LKd|é¸9nÚ|ì7zŒ­'N$R)êûA⺃ÝAG¥üQ%¨™ÑÏ€gÀ3 222"²~dýÈú‘´=i{Òöˆ$oKÞ–¼MdY`Y`Y@äˆÿˆÿˆ_äDàDàD@$µ:µ:µZ¤0³0£0C¤âwo¾=ªñ©ŒŸèmëm™×óÿn%hK´Å¾•“«'_|÷=î{Üg·Òxh<4Âý+÷¯Ü¿f‰Yb–ØñïŒwÆ –<Èxj·ªQ5(0}¦¸=Ç7ÏÿÔ­Ì­÷]÷݈ÍAÓžc`½c½Ã#¦yz9qâu@Pl·:ªŽª£`³ÎYç@]Qݪ;&^ŒNòˆ(g(xâ¾é¾ù_sìL~COfsؼæ'æ'¤…˜ÉÏaj¨uI]R—€S4г¨£¥‚f¶™ÁßÍj³zþ¼{1}NŸSŸÔS“ÿ™ýW>³¯‹gö=öl¾`ÿ EYÓAR*™9IEND®B`‚routino-3.2/web/www/routino/icons/limit-8.6.png 644 233 144 2601 13061246471 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü6IDATHÇÍ–[LTW†ÿ„¹à† 3ÆšPRL šø0`@Dh^‚F[1›>úXhâÓ‡jŒiTD+špmmB¢.5I‡‹ZÍ¡ Ì01ÃeÎ9ûïÃÌž3mí;ûådí½Öÿý9ûìu6HÀæè¤q‡q‡qc$6Véóæ#æ#Ÿ6Eâ;*i8e8õú[rÓ­M·HrKÖí­Ëu™_èúñ<9ÍÐ'LͦfCa4®#Oï9½Çœ‰ë{HK«¥uQ!¯´_i'É–Æ–F~EμœyI’Â@!©Çr]æËz©¯ºñ2ñ—Ä_ ’¦$S@Ú‹íÅ»¾Ž$Œí"O;qŒ$§¦„‘$IuŽäz®…$ƒ R_\,×£ù²^êI}É“üˆ¶[@ž<{ò¬å~¤àíOäõŒë’n%yƒ7¸žT‚J$ÕJµ’+¤è=$I ¤Ëu™/륞ԗ<ÉøÁ?÷Öyˆ¢<©<‰d˜$ÿ‘ê„:Aj)ÅJ1ÃÊ”jU­"I„ú˜ãçôP\ÄRñ(KÊ…¦)•‹ “j@ \Šê‹rS¹ItŠÛJøìÒ2c™ ®cÈôê[S*õœzŽ!~ǶÄqÒIgdÃä{ Inçvn'…_ø…?n¾£%yMíWû’ú\õ.y—È?ê'jìN/yµöj-Éy’Ôr˜^/ë/`èÇ¡›C7ÉúáúáúaòÍÞ7{ßìÕ¹Ú%í’vIÇËÆËÆËHç3ç3ç3r°b°l°L׃áîp7±¨åÄøQ?QcžoÈ'ž| µÈwòeT`¥ëm—§ËCÚòmù¶|ò|Éù’ó%dF_F_Fé¾ë¾ë¾«òúF}£¤Ãåp9\äщ£G'È<ž?ÏON¶N>ž|K_×$/—~ŒÀF×FWî~  ¨   †ûÑ6i=Ú€6X-–F ¤º¤º¤ØæÞæÞæ.\8ˆØè tºÀXÍXÍX `˱åØr€|s¾9ß Ø†m^›7–n2ü.y¾ôcN$œàç@bGb`¨øeå|úüÖù­@š%Í’f=(zPf3 µ'µ'µG7¦Õh5Z êIõ¤z€¯¼:ð x4òhäÑ0Ð8ðp࡞/ÖI^„/ý­Së4ü(eJÀq€M>M}šò4pd;²ÙÀóäçÉÏ“S©©ÔT ¸kݵîZdj7µ›Ú Ù²7dUö*{•HëKëK릿ŸvN;õ|fK^„/ý`a°phè~Ñý0/GëVëGêûëûפkÒ5 ¤ÜK¹—rp¤;ÒéÀñÌã™Ç3}yûòöå‡ë×®²ìYö,;`µX-V û.÷]î; Ò\ÉJ€hmXMX•¼?æç?§’ÑSò³Ò¤4é§h9´X³ïgßϾ'Eƒh ¤è¢“ôŸñŸñŸ!ŪX«¤V­UkÕ¤/Ë—åË"µLm§¶S×ã˜âQô¼¸>¶_¹­ÜfH´ ¯ðÆ5P«° +ÉÝÜÍÝqýª‚¬ E²HÉqùŸˆbQL²@mPâúØŠ7ä ýo‹ëüŒvb5Öù_«¯I~¡öª½ ‹n1+f)ø+;ØAr‘ \ Å”˜S$C\ä"É66³™½Â'|lÒÌš™á˜ž"õËÍåævþ5û¯\³·‹5{[›7Ø¿‡S­‡TIEND®B`‚routino-3.2/web/www/routino/icons/limit-119.png 644 233 144 2575 13061246470 14610 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü2IDATHÇÍVoHÔgÿüNïÎ#MMÏS„ë:­5Ø9<ÌLåbbJÔÂlá‹9z˜Td£9-–AP‰µLÝ¢² pb·LÙŒ&mj—a¢¢Mº£ëÎߟç³çÏßÕmï{ÞߟÏç÷<<Ÿ{@’–Aš2L¦ÕáØô¥‘sǹ×ýŽÏ¨¤´]Úþ×!2±5±•$“Ï'Ÿ×FX¯ëý‘ó€ɧç‘#aí²vIÅËñQrGÞŽ¼8{8þÎCÚ®Ú®¾RȽ×ö^#É_Ú~iãWä̽™{$¹X¼XL±^×ûõy/GßâHóMóMi’´Z¬€Ì,Ë,s|n˜pÛÊ·•“äó˜ç1ÂD’¤:O2žñ¢˜¤Ÿ~êk!"ÖëËýú¼Ž§ãë|:XÈÔÍ©›²rgåNÛ¹ðÀèErúþtO¾Jò83žTüŠŸ$ÕÝên†Há’¤D‰4b½®÷ëó:žŽ¯óéüa=xól›KÉê¸ê8’>’”H-QK$µÍr»ÜNY|#ºE7ßZZ‘V¤‘â8(Fä_ˆ4‘F¡ü³T¾TNYÔ)%JÉÊðu•Z¥’:?"e}OÍ6m›öÇ’cÚ˜¶‚û©ê•]²‹ñ³x,G(¤êU½ª——Ä%q)¢¼(Å"É#l`CÄÜçjŸÚÇËÂøäxæx&ÉmÒ6éÕõ, ;óY{¸öðÊw~(îÈ=rÁãùÑsÒs’|ºæéš§kµ<Ç<Ç<ÇHo–7Ë›eäGæGæGæÉÓŸ^z=é÷¼cÇÅP˜Ïàë1…÷Íyø¤¤¢WŒ KÝïu't'@*}^:_:   ceuìêØÕ± Ø’·%oKðÐñÐñÐ̘;1w¨tWº+Ý@çºÎœÎ ª¢*«* Ò‹æîÏÝÇ’ôI˜ororë¨Îë&`uÿêþùxUä,r¨éã8ÉIX1‹—x Ø[ì-ö€Oø„O aR@ H e,e,e °í±í±íkkk{®=מ t t t«%É’Ü8~«ûV7¬Ë(çÄùÂg…Ï€=drBr‚öˆ\˜^˜6®½Z¦lP6GRVPVPV@žm8Ûp¶!ú(KºJºJºÈ¶Î¶Î¶N2X, –ٽٽٽäVÇVÇVii¶4[šÉ‹ï·[Ú-|;æ\s.R× h7´Ò#¥B©@Lx€H…S˜2vFÈB2€ L`QKL‹i1 ˜úL}¦> ˜Ìf999@þhþhþ(0’:’2’8úMަ•ñT)K©Wê@KФG&À_ì/þów˜îôßé×ûør„Y˜±¤gVÕ­ª[U˜Ýf·Ù-,>->-> @*P$_H¾|ðÕûê}õ@kzkzk:PókMOMPàtísíÃjÂ|¦wï.+zþïVò¦rY¹lÜJ_¡Ïés’!kȲF¥¯ÐWè+$ƒ½ÁÞ`¯‘µ„ZB-ä¬6ûzö5)FÄ‚X à r[¹Á'ר=`ÜJÃÇh›±ÍøcÉ1uL5|ŒÔj´"4„ŠÆÐ[y't’â3Q%ª"ü-WiRšà·+>¶v|-IÅ6e›Šò±ÿp~yÙ™6PÚÕzµž2ÙÅ®hç§vÚIâAF8?ð ¯PˆA5[ͦÌaõ”zJ/ÊÔªÍÕf}§Þpþwö¿ò}]¼³ï±wóû/Áˆ”£?þJ IEND®B`‚routino-3.2/web/www/routino/icons/marker-92-red.png 644 233 144 4234 13061246467 15443 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜQIDATXí—mlTUÇÏ}™¾¸ÅYªÚ骠°¶¥¶²˜¶;T­ù€VH º‰¥ª11’­T°ÝÝ%5DHJmgPHY‰ ÚE*$²`46¨Û—XŒÈ@¡-L;{çüöCçÞ¹3ÉJ6»Ï—ö9çyùÝsþ県Sö[‘`jQj 5P®Å2RºRºRº–/ÖMÝÔÍÓïˆbXSÓr‹Ð….tˇD_n±â­|«žU?±ŸZ”Èã䫵¢Võ'ÎÏœ§wé]z—XY¯¬WÖÛ î̑̑Ì>ZùýÊïW~ =6ôج*^U¼ª8î[óV¼•oÕ³ê[ý~G¨…‰þoªcê˜:6¸ÀZ¡¬ª¬ª¬*s㎣;Žî8*o½4ziô ¡¡â*W¹ 2È Ø~lÞŠ·ò­zVýÄ~w¾ùë|Â3M=§žSÏ ~l(î)î)î1þØéôGè'f2OæÉ< s“¹ÉÜæBs¡¹Ìr³Ü,wø±y+ÞÊ·êYõmà„þži6šâWüŠ_}³¾YßÜ~ÆJ(ÝRúzéëF¹ ö¢l’MŒí““ #g"g€Éè¢è"Nrˆ’h“ÑÓÑÓ #?D~£=¼:¼ä‹2]¦3j…•n)­/­7Ê­þÅ'\?º~týøÐ¬Oƒ§ÞS/ç \øià'®ÄꌚoD|ç9ñö§É"Ns@Î3ØË^`”‘x´ù†‘idÚîèÀÅÁƒ3¸âið¼âyEαxl>}¾N_wb³5±½rûšíkäs±!Ãi‹´9x½÷~ ð΢w[sl C %ÇìÛmßnØ9wç\ üQçG‘g"Ï€á7›ÇíàÐöÊí•Û+åsöÊ&ð ÌÌÍÌÍÌeËðòáåÃË8ËY ²­oîé©sàÆÓ_ßµ¾Ë Øl:ç3=™‡?º¢fE Fãr1†—_ÚwiX<ŸºõѦG›mŠ™ÙO@0r-r à¦37¨^U½Ê tX;¬¤>˜ú ÀÙ†³ yóòæøª}ÕÎøSí§ÚÀÁýÛöo³ßCÈâ±øÔØ‘šçòº¼.¯}ÆRÅZÑ-º…3Ì\3W!F¿ýN!n¯»½ÎySdådå!Ää'“Ÿ!Ä—'¾Àh3Ú Y À|ÏqŸ¸øîÅwP,íá1ߘ r!rpˆ‰´‰4È}9·,·,j?ÚLm¦6óí+"ÛáÍð ¡ÑèG:ÎÙþª’Â’Bsƒ…­ë¬è¬ L ¶Å!ûô¹‹>¸öÁ5€+ǯH?˜~@]¤.FSޤ®¨5j DßB$ì¿°ÿT}¹á© OEC6àZm­¶ö›Š)?=(-ë-W¾+ß•?¸ÓJ¨Û´ñµ¯Éeöý1ý늯+°3{g60úÍÖo¶:5yuèêÀû÷¼nÛݶ í޶;À¬ÜÕ·«`ïÙ½g uŽ5»›Ý_«•ÕÊêû[•¥Sé´´­tûÿêÿ+[»ì§sÊÂr‡Ü@?ýNi ‘ —I¿ôÇ¥t®#¸/¸²ÓîòÞå5ÖÙ+ùª~‹~K]©V.ÊE¹î‰³.KÅRýUá~áB j?k?oüÀ~Z[=>Ïp¼ÔÿYÿgNퟟ:€%Í4!Ógú€€qÔ8 ²Â˜mÌ& ”PO|"ó‰Lsƒý]Õô@ý¬šY5³j„PKÕRµTy/FWiaþ&ö·BëÓú´>åÀœæ¼0ç!\U®*WU ÞÖîÒÒ¥¥KÚÖEë @¸Ìe.ǹ͹æ\sn|}[îm¹·å^¹Ì~ËÝ.·Ë}nbÊ÷¤%î´r(ië…’ä~žè{Ò¦´;ð^\»u›ê69´ë6܆;===¿vzé¥é½é½é½r¥­É 5CÍxòÏIR|+‰/Uüú€Ö’¤Ý•J‡Ò¡t8µètǵktÝFw\¹ã³ÆgÏ‚œ‘œ‘œón[‹{´=Úž¿-±¤“^2àâ:° ĵÔ‚í6{š=͆{ c c &̈EZw î@Ýøµ£·ê­zkoì'IúI}cãâ†ë&›•ðdL»ÿOÚ-YQ²¢dE\»%%%´MÍK{'ŸâS|÷¿œØF½œÔWÿ¥]O»EZ£Ö¨5.´€} ¾_ƒüKÞdÞdÞ¤ñµ½ÕA-¨ë²D»hí"víhIýRÅÿhÉÚ­OôKþ¥<­<­< ¢L”‰²èïÕÛÔÛÔÛ@ŠPÄ?>Ïe‡²CBh'´Ú å“XbEÒÎýßÌmÿç^áÕÏ$N¿T©JUª”CÊ!åÐO¿›¿+´3ýIu¯»Õÿî i/éM'4IEND®B`‚routino-3.2/web/www/routino/icons/limit-30.8.png 644 233 144 3126 13061246473 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍVïO[ç=¶ pEì¤ÌþdJ*¨fª&kR¤„Î0ÍÖ5hE?US¢¶Ê4u‘Ò.¥ÒŠjRi44k© …ÙÐDL ÙHI¤2¢fPœ ×@e°­Úй¶ß³öÍEý ò~¹:Ïû<çé½÷Ü$`kê R›«ÍÕ’XÛªÖ3_Ì|qûçIÜ'5‡5‡ïþ™ÜÒµ¥‹$Ÿøä‰O³*Vö•þó€Ê¿QO©c+ÔBÆ@ƀƚÂï’uÏÖ=›iJâóã¤4$ =Œ‘¯9^sä`ï`/ß —o.ß$É€5`%U¬ì+ýʼ·‘ïþB 7}½ékÍ™‘ž‘f›Ù–ÿ‡dÃý|²ê¥ª—HÒ£óè„–$Éø ÉÍÜ,¬$C QY«°²ŸêWæ>…_ÑSô“~@Ëåùò«/¿*õ$fÿN¾óvŽ¢'‘|Ÿïs3 ÅB$??Ê()ÆÅ8IRC ©be_éWæ>…_ÑSô“~Ô£ @GyÄuÄE&VIRžˆý ›e3™˜]²‹rÊ©»Äsâ92æŽ-ÄHqJœ§¨®Ÿ¹Â•GH$eY–)ÇÜrŽœC&âI~òÈG~$Rô•£üžé$¥ ¥ñ¬kÂ5Aò_$Éß“âñüÂQŽ’¢ZT‹j’-laË#•¬d%Im´©ea&ùÛÙN’¢\”3ÌŽ¿)¥§èßHú€î4?vü˜B—Ø1kûÎù“ì¸ØÑÓÑC1õש¦>PçÆæÆæÆÈ®HW¤+B.„B ê»ÆÄRb)±¤âé§íÓvòüó·Ïߦøßî;ŸÞùTÕÿ=n>n&ù0é‰!¸ý9tvè,9oô{üÑœý—-OoyšÑO«ÆEš/˜/˜/ç‡OŸ&KÊJÊJÊÈ¢ýEû‹ö“…ÑÂha”\½¾z}õºjhtxtxt˜4î3î3î#4”6”’9cÛ·52:ižÌD3é,r‘ñ¥¤­æ ½IoÚY ”TþÏ ¾|EÓóΜ+@Fí½ZO­(h*h*h/^¼ dz3½™^àîØÝ±»c€Þ£÷è=ÀÈòÈòÈ2-Ù*[e+ õKýR?pàÄ7¼ l»õäÊ“+Ȉ”¯¾³úަ°î°î4Ö¬å¬åÅZ]·¨[¤‰c‰c@áôS7Ÿº _ã[ÝÝ@Ÿ­¯²¯ðõûú}ý€4+ÍJ³€4 HªÜaÎ0¬µ¯µ¯µ«uš?ÍŸ˜`‚ ÀÅß^¬¸X~˜&àWßdfÂh›´Múukº5Z´‰£1}L¯™ÁIý¤~ø¼úˆ/`,}½´¢´p$ G0 ACž ž ž‚eÁ²`ðÀþÀþÀ¸ÓÝéît`»m»m» @ªPôåõåõå{#{#{#Àµ¬kYײ€ô?¦W§W“×§ê§êaÒæÒæVÆ£ñ¨fF«­ Ëayú[Àù•ó+àеŸÕ~Æ–­¿1è z¬– ÷ ÷Üpn87 ôº{ݽn ¿8¿8¿°HÉ"u–:KØåÛåÛåöÚshÏ!àÌ¥3—Î\&Ö'Ö'Öì¿e˜ý!P,v»v»°^ÿ»zS½‰-€cÜ1èÖ"–ˆeúÛTŽußàÚŒmFõ+‰¯Ö¤÷ïˆw„"ÞïŒwnøê GÂAúf|3¾R4ŠFÑHŠQ"JHßAßAßA’N:é$£'¢'¢'HïOÞï½ßSˆByA^Põèn³´Y”Àí¾%7åȦd®ˆ?=ʱÃâ0â5 Â.ìÂNŠ<‘'ò6äU³hÍ$[ÙÊÖ õçÅN±“Câ–¸E’¢H1,2Sü¿vÝsÝ#IÉ/ùCiœTrLIþ¨’¼5i5i$Ï%“Yü3æùI~_Œ/ªÉÏp€¤¸-&Å$É«¼Ê«$&ÿ•Â-æÅ<ÉHª¿-~%~…²øwÌó’R’¿FW£#¹þËä|ÿ•ííâ±½=ž7Øÿ§¢ö8J¢IEND®B`‚routino-3.2/web/www/routino/icons/limit-28.4.png 644 233 144 3061 13061246473 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜæIDATHÇÍ–ëO”gÆï99b¡j> †T kSÂ4¤Cji4¤¡ñ¤Äj,‡ ÄÆ¬š ¦Ò„­®´ñ6"²bWl-˜Í`¦Ë!¸dÙ´Ñ*t:3ïóÛ3¯/Ûý|¾¼¹O×u¿ÏázIˆ|̯š_5Ç…móG†ßRh)t\Û!0½ozÿŸŸB|{|;@bgb§6nØz\Ï_^/bà/çÓý’ †#º;ºÛ”±BIVI–Ŷ[n@LOLÏb*z+z.~}ñköÃÌÍ™›sùsù`Øz\Ï×ëu¼åørôü"°êʪ+¦iˆŽŠŽ oox;í@8á_i°«hWÀ/+~Y¡ÌzX±ª|`ôñë2[GòõzOÇ×ùtþp?¶·lo‰@ñÅÄœ ŒŸƒºÔºT/Ð4ÓŒ‚ Á€Ð‡¡ñƒº¡n`†­Çõ|½^ÇÓñu>?ܱ”K""­.Ø=¹{4/@`8øïÀ†ÀЂÑÁh‘N•6¥kãüOp:8 *JE©(ŒáÌœ/œZ™VF@e„ªCÕ ¥…ñaìà¡Î¯/å5‘ŒÏ!f!faa¥ú}rxr8 €TŽÊa‰Ë|Ë· =מkÏ^zé]ÖH+­´6lØøÿ‘A ¼¡ÅÐ"K¯›ÅÉ«“WAç7–ñ¹0#"Òñ#ñûÊö•é(Ú–Ÿ¢GjGjáħ'O4¢¼?x½ƒψ{Ä=â†O‹§Å£ÎQç¨Óˆ«)5¥¦@mU[ÕVïò^Ó½&Ô©×â¯Å|*°¯a_„W®ãG yDD<µpùàåƒpû㩼©u}JÄšnM·¦‹xnynyn‰$M$M$Mˆ>)|RøDdÝíu·×ÝyväÙ‘gGäÅ0g›³ÍÙ"õ¥õ¥õ¥"~‹?ÑŸ(²ö¤­ßÖ/Ñá,Ó6¿yð̓"’÷}Ü÷Ù¹B Ñ’hÑÆTÅ#÷#·qìonNNƒÌŽÌŽÌØïÝïÝï…³Ž³Ž³p¶9ÛœmPPVPVPŽZG­£¼›½›½›ëÜÞ¹½s;$Ï&Ï&ÏÂÞê½Õ{«ÁÑ–ÖÖÓy÷¿¹ÿ ¿‚ï]ß» *ãëãëµ1ÑZ¬EÖ"Õ ¾_Ü­««˜‹–:K4÷6÷4÷D…•…•…•p ä@Éß9˜9˜9§O5žj„ббÐ18Ýwºït¸/¹/¹/AVjVJV ¬zmÅìŠYø{÷Õ+W¯ÌçÌç€f‹SÝ\«ï±¼Íš4?€j‡Ú¡ ÎçŠsAÅhÅhÅ(Ì Ì Ì €³ÀYà,€‡Å‹/›Á¿vžì< »Ní,Úiì±Ð™smçÚt]óÔšh‰œ‚ºªšªšªÏÿÖÑÖѦ²Ÿ~5óÆÌæ»ÁÜç¼`:nª4UŠÉ¶ÖöŠíÉ Éñ­ô­ô­±'Ù“ìI"b‹XDæÖÌ­™[#’ÐÐÐ-b~fþÍü›ˆßã÷ù}ÂïƒKíKíbJðٶض¨ly½êpÕaó]yüåg_~ö—!ÑuÃБˆŽé:³ ìÊþBwPåª\•ƒêQ=jÙ«ÕjµZ lb›–é×<óÌyÌc`Q%«d–Pü€ÎáWºŽýÏ­Þê¢nwÅî PçÂʬn…¬!+¨® /è#ÀWxð ø‡8êê;õÐO?ýÀ"Oy 꾚VÓÀÏ/”¿J«"ÀŸCC¡! ö…òGí‰üTþ—÷®|i_/í{ìå|ÁþÇ~Ú¬Lót³IEND®B`‚routino-3.2/web/www/routino/icons/limit-38.3.png 644 233 144 3054 13061246474 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜáIDATHÇÍ–íOTgÆï‘w ò’îÈË„®¶©I4&mÃ$…˜mDFÂV\"št³Èv YÝ(.~ Lw#]ë² H²k´HÙBˆÝ& vWqŠ›Ê’._@…æÌ<¿ý0s<Ä¿ÀçËäºïû¹®ëä9sG@DD⃿!i!i!/pÈA£ñnÄ»?=Àg}`*1•Ü9qŸÆ} °±uc«ÔÀz_Ÿ_¿_Äà_¯§×%^ŒBx{x»ÉÄuPözÙëÉÜx ";#;Ô úËê/¾hû¢_Âô7Ó߸mnXïëóú~o=¿Ô=§/z6ô˜¦ <,¹ùäæÃиuÜ:n…„†„†„(K)ÛX¶6y^n~¹Ï?÷½ý{»ª‚.º_wÀOˆéBlrlrÎ.‘¼3ygD|©‹ŽE‡©å¤Ô¿Zÿª„;lŽ"G‘ˆå‚å‚å‚ÈrÏrÏrHôíèÛÑ·E ³ ³ ³E,C–!ËÈŠiÅ´b’gK«Ñj´‘“æ“æ“fG¡£ÄQ"ò“Ï6õnê•ðµ’ç‚ÓÔ"bë·õ‹˜~}'úNÎ.³é³Ð‡¡É–Óþcþc&yívÆÇË|ÊjåýÊû’ôAæþ·ö¿%òØòØòØ"¢Y4‹fI\L\L\iëjëjëqO»§ÝÓ"É{“÷&ï‘>é“>‘¬Ú¬Ú¬Z‘twº;Ý-R9X9X9(2wq®i®I$¶ öÃØe^ÄaŽ$ùMhqh1Ùâ+ˆ‹SíàÉóäÁßJÚ+Ú+ gÿö-Û·G’4ÿhþQ#Ž_9~åø£ŸÕ—Õ—ÕÍÝÍÝÍÝF½5±5±5vlݱuÇV£ž³ý•7VàÜÏÎ;Î;<§=§Á—55¡ÚEµèïØçsŸÏÁâ5UeûËÛo¾ý&ž˜1e1ep°é`ÓÁ&pívíví†mkÛÖ¶­Aüpüpü0TTTÀ£ŽG:`gÕΪU0Ù7Ù7Ùµµµ»'¶ ¶~þïòšò<+ŸôàâÔÅ)PO~‚9vv€¡ÃI‡“Œ‰¶kÕ½ê†ÙÍ~5ûÊWè+ôO¼zcõÆê ˜™™ÕªZU+¨nÕ­ºa>>>°cÇÚ%í’v fÿ>{nöÊ÷§5ûšÝÐã?‡­‡­zàžžË± \QµÏr¬P²¬Ôuüþ ¨»ê®ºkUQ*JEd±®îW>åõ[Õ ”]ÙY~¬ŠØ<æsD>|ºdfHÏ1ý­ñèÉû¾ù}3p*ÌêkmA[þì{è{h$?°} ®ª~Õ\æ2—ù@ÝSjðç?ñûÆñªh3Ú Ð¬'PÏó|ò¿¸ßÊövñÂÞÇ^ÌìÿÁ-ï“ o<àIEND®B`‚routino-3.2/web/www/routino/icons/create-icons.pl 755 233 144 12504 12003023521 15362 0#!/usr/bin/perl # # Routino icons Perl script # # Part of the Routino routing software. # # This file Copyright 2008-2012 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use Graphics::Magick; # Markers for routing @names=("red","grey"); @borders=("black","grey"); @letters=("red","grey"); foreach $character (1..99,'home','XXX') { foreach $colour (0..$#names) { $image=Graphics::Magick->new; $image->Set(size => "63x75"); $image->ReadImage('xc:white'); $image->Transparent('white'); $image->Draw(primitive => polygon, points => '1,32 32,73 61,32 32,10', stroke => $borders[$colour], fill => 'white', strokewidth => 6, antialias => 'false'); $image->Draw(primitive => arc, points => '1,1 61,61 -180,0', stroke => $borders[$colour], fill => 'white', strokewidth => 6, antialias => 'false'); if($character eq 'home') { $home=Graphics::Magick->new; $home->ReadImage("home.png"); $home->Opaque(fill => $names[$colour], color => 'black'); $image->Composite(image => $home, compose => Over, x => 32-$home->Get('width')/2, y => 26-$home->Get('height')/2); } elsif($character eq 'XXX') { ($x_ppem, $y_ppem, $ascender, $descender, $width, $height, $max_advance) = $image->QueryFontMetrics(text => $character, font => 'Helvetica', pointsize => '36'); $image->Annotate(text => "X", font => 'Helvetica', pointsize => '36', stroke => $letters[$colour], fill => $letters[$colour], x => 32, y => 32-$descender, align => Center, antialias => 'false'); } elsif($character>=0 && $character<=9) { ($x_ppem, $y_ppem, $ascender, $descender, $width, $height, $max_advance) = $image->QueryFontMetrics(text => $character, font => 'Helvetica', pointsize => '36'); $image->Annotate(text => $character, font => 'Helvetica', pointsize => '36', stroke => $letters[$colour], fill => $letters[$colour], x => 32, y => 32-$descender, align => Center, antialias => 'false'); } else { ($x_ppem, $y_ppem, $ascender, $descender, $width, $height, $max_advance) = $image->QueryFontMetrics(text => $character, font => 'Helvetica', pointsize => '32'); $image->Annotate(text => $character, font => 'Helvetica', pointsize => '32', stroke => $letters[$colour], fill => $letters[$colour], x => 32, y => 32-$descender, align => Center, antialias => 'false'); } $image->Resize(width => 21, height => 25); $image->Write("marker-$character-$names[$colour].png"); undef $image; } } # Balls for visualiser descriptions @colours=("#FFFFFF", "#FF0000", "#FFFF00", "#00FF00", "#8B4513", "#00BFFF", "#FF69B4", "#000000", "#000000", "#000000"); foreach $colour (0..9) { $image=Graphics::Magick->new; $image->Set(size => "9x9"); $image->ReadImage('xc:white'); $image->Transparent('white'); $image->Draw(primitive => circle, points => '4,4 4,8', fill => $colours[$colour], stroke => $colours[$colour], antialias => 'false'); $image->Write("ball-$colour.png"); undef $image; } # Limit signs foreach $limit (1..200) { &draw_limit($limit); } foreach $limit (1..400) { &draw_limit(sprintf "%.1f",$limit/10); } &draw_limit("no"); unlink "limit-0.png"; link "limit-no.png","limit-0.png"; unlink "limit-0.0.png"; link "limit-no.png","limit-0.0.png"; sub draw_limit { ($limit)=@_; $image=Graphics::Magick->new; $image->Set(size => "57x57"); $image->ReadImage('xc:white'); $image->Transparent('white'); $image->Draw(primitive => circle, points => '28,28 28,55', stroke => 'red', fill => 'white', strokewidth => 3, antialias => 'false'); if($limit ne "no") { ($x_ppem, $y_ppem, $ascender, $descender, $width, $height, $max_advance) = $image->QueryFontMetrics(text => "$limit", font => 'Helvetica', pointsize => '22'); $image->Annotate(text => "$limit", font => 'Helvetica', pointsize => '22', stroke => 'black', fill => 'black', x => 28, y => 28-$descender, align => Center, antialias => 'false'); } $image->Resize(width => 19, height => 19); $image->Write("limit-$limit.png"); undef $image; } routino-3.2/web/www/routino/icons/limit-115.png 644 233 144 2570 13061246470 14577 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü-IDATHÇÍV]LSg~N¡@'ÈŸ ËÄ9àB·„8¹`*’Z¥bÜ 6'1ºCÆâ’M]„Œx±…DdšE# ÆænŒP‚1L“],H*Aü!¨¨=,§ç|Ï.Ê×Se»ç½iÞ¿çyÎyû½ç H›ûiYfYfYñ-Uf<©4©4ïRÄ?£“Š[qÿ}”L=•zŠ$Ó[Ó[¦/ó²>¶0ñcùdi0‰‰Šsί#wäïÈO²GüŸý¤íŠíÊT˜ÜuÿU’ìºÐuß’ãwÆïä+ç+'iú2/ëe¿Ä‹ÅGÝ{üií¶v+£dbBb@.w-wå~)Î%Ë¿,ÿ’$ŸÅ=‹’$õ ’ÉLN’*UJ›Œñe~®^öK<‰/ù$DÈ%–lÈm;·í´‹4¢iEœbH Å(¤>¢è#¤è¢3&ßÇ>ö‘|É—|Û'rD§%>èô“¤Mµ©j¼Ô3'ìLyàØcÑçÿ\ôj7´&œÿW£¿‘|”ñ(ãQç™­­-9Z1Z1ZaÆ}y¾<_Ù\Ñ\Þ\N¶xZ¶¤øçã×i¯ÓL>~]=X=(G{¦Ïyo…×ð§£ØQ  ”ÅWW„Y_–/Å—¥äYÉDÉp÷ÞÝ{wï!j—+/W^®6­Ù´fÓà~ýýúûõ€Þ¦·ém@»Æ]ãnyo¿uðå_á_eêætõt5f#(JtA‰Zx-Xܳ¸gõ˜r¬v¬P Ê9&q”£fðo{’Ýf·tÒI'€\ä"P¦•ieÈðfx3¼€­ÀV`+Ž V©Uj€Ã8ŒÃ@Ù²²ì²làÃo–ž_z‰ìŽð)Ÿ:·:·Q=dzJzŠ1HNŽMŽ™Ç^w…W…W™#q­s­s­#[¼-ÞïüQnìÝØ»±—lw·»ÛÝäÐó¡çCÏÉ='öœØs‚lõµúZ}dÖé¬ÓY§É?®Ý<{ó¬ÉgØ_h/4Rê±Æuãº2. —E'´V<ÅSsdBšÐ cØgâ‰x"žÕ¢ZT`<09¡œPNØëÙëÙë²E¶‘m“ŸLꓺÉÇ´>­z,€êT ÀÒÛÓÛ#븟 «°Êÿ°¨vQí¢ZÀZj-µ–Ζœœœ°’•¬ò7çoÎß ´5¶5¶5é®tWº pd;2™À®*Ç*Ç$>÷Žéïêï¢zþïT²;Ün7Oe°8X,$C‰¡ÄPâüQ‹ƒÅÁbòíí··ßÞ6ã¡™ÐLh†œøh"s"“Õ¢NÔQºG÷|:Çåè1÷mã¶q5ž èÝÜc¤±ÛØÝ;$bh¾0ªï|š(Dƒh Åo¢I4ÅÄO…ƒá §¹Eâ?Ì{˜G2d{l{ˆkk79o®Ï Õç3ãòœ„Ö.kWDvŸ€·2Þʈú]ŸêÛ%Û%ŸÊÝån€‹®‹.Þ‡™þ™~€ÅìÅlasÞ\oæ›õÂëˉÿãg¾|æËˆû`}Öú¬Ø_·¿žZX0ž oî}s/À/‘¿D* ès@ 1*Xfsü†Íùàz3߬gÖ7ùLþ€„×^ü·óß¶µîv@uru²É§]ê¨#üËþe}¿¾Ÿ5P}ª€" „Íys½™oÖ3ë›|&@Oè(WDDr¡p¬p ŒÍãŸÔ욌ÿø­~+ZP©2³Æ,øòOø'À6†ažê¦ZU«(ݲž¸žˆ¦ÐÚµvð/ê«kΧ)°!7t”×DD¶6mÙ¶¼¼A­yÆ<À ö€r(+´ÐF¨#êˆ:,°ÀB˜‚FiH !,¾Ê*«IMU©¬Áòù¶6 3""çn±é½’÷JÌd㥭ƒ‡CãñÆcÇP#ÿùzäëPùQߨoÔ ­ ­ ­001010ñäŽMnžÜ<¹Nwºït´l¯m¯EuÜûì‡Ï~€Ÿ¶.4/4/Aå;•ï€á è}@Ddà0|ñÁÀ?M8&ª4æ¿¶OlŸ°–ónNqN1¤g¥g¥gA·»ÛÝí†äŠäŠä (|Pø ð$©$•¤ÀSì)ö‡„ݸ~ãúëàÈrd9² çלŸs~9+"ÂÚ?Š¿ñûU)\i¿ÒþÕ€ÑïEý©ê‚•¡•!øü/=Ý=Ýà„ÏüýÌWg¾‚²?—æ•æ…på”kÊ|[[¯º-.*.Êðªò¹=s{Bm߿ӓêI… {†=ÃO®G,±†ú=ýÞc>¦é¶ÛL¸=öWoÈ¥º°¼°TGЙoë1z ¨¿ùú¢ábA­œå,¨+ªGõç9Ïy`•V@ý[«q@è&A¯ÑkÐ8¦gëÙ¿õ¬QdQ¤¹SáÎÿôþ+ŸÚÛÅS{{:o°ÿFáIûEÿb’IEND®B`‚routino-3.2/web/www/routino/icons/limit-153.png 644 233 144 2706 13061246470 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü{IDATHÇÍ–]L”WÇŸ™Ž0“€€™J2-iÄétá¢[Ó*5šå«¤Ð4©ÚEmèÚ6®)¦7Ónˆ1nb»š(©°»CÅL©lM€i*mˆ¦nËŽ®‹…€ÙQ§È ïÇùíÅpæw»÷ž›7ÏçÿÞç9Ï9""’¿üp¹‹Ü+S²{Ÿ£÷n÷n_û·”|ÆWƒ«áúaÈ;•w   ³ ÓþÑ‘µ]ûgÆ‹8ù3ñ´^òÅQd÷d÷¸6/ËÂk¥¯•zŸLÉ'Âà»è»¸`Â[¡·B}çûÎóÌ|=ó5@lsl38²¶k¯óeæ—ÿ _V\ZqÉ5ÙYÙY"ð̶g¶¿—r¸Y uÕuÕÓOL?¡Ü`Í9ä¨Í@œ8zÝ͵}Ù_Çë|:¿ÆÓø)>þ—ý/‹À+¯¿òº¯#ðãh}ºõig\Úh#̸°Þ°Þ *¬Â¸p#k»ö×ñ:ŸÎ¯ñ4~Š EÍEÍEÍ0žÿñáàÙƒsæ.€æã±ûí~×’Ú^~Y!?ÉOiYÔmu[ÝqÇÝqw\d&:‰Š¬I®I®IŠ4·4·4·ˆ”••‰œŒœŒœŒˆlllˆ„6…6…6‰ø¯úÇýã"߯tý#‹Kö’-’æ“î1‚÷ƒ÷Ó-¹Çj]Z½´Z÷Ôt×t×tC÷¹îsÝç`>k>k> Šs‹s‹s!oCÞ†¼ pèÚ¡k‡®Á½Á{ƒ÷¡ª¼ª¼ªrùáÜ0ìüÇÎow~ ‹Á_¶ÿ²Ýé1^ –Kû¿§’KfÐ :§òÁÆÏ?xƒ‰ÁÄ S¢äbr1¹óùÀ|T™*SeŽÝ ˜3sßÌ Ï ƒuÚ Y!X=Vðý2^ÿ‘SYò øf|3qD­¨åÌ1°wÙ»x˜qí¤˜¶©6Õª]µ«ö ýuE]U§êT¨.õ©ú4þŶ¯‹Çö=öx¾`ÿ‹’VÛ~ùIEND®B`‚routino-3.2/web/www/routino/icons/marker-16-red.png 644 233 144 4136 13061246465 15436 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜIDATXí—{LÔWÇÏï1"ŠÌ.©uX±îú‚BñI£€Ð¦Ú4Sˆ1fíØGˆÄT*ŠÑ¶ Õtm ÅŒ ]ÑÝ`p«’ưëJºKHêƒßD1!Œ€ Šá÷ûÝïþ1sóˆlvÏ?3çÞ{Îù̹ß{/ùì7bâšG„#Â!<ñDMi›Ò6¥-{¥¬Éš¬Ýü†R(…Rß4«%™d’¹„ú¬–¯çñ<ÏZO\ÊÌWAT!ÚCçcÊmr›Üfö{„=ˆ9f,f,f Ùxkã­·€Âû…÷ ïéééŸÏóõ<žçãùy½ó¸:ÔŸ÷•8.Ž‹ãÎÞ¡9%sJæ”hœê:Õuª‹Ms»‡ÝÃ$H0ÇxŒÇœp ¾ž¯çñ<ÏZoÞW/æ#Ë q@œå Ò¯¦_M¿ª®êŸìŸìŸD?üÆ’XK‚ªUiUZ ¥j©Z* åiyZ^ïŸçëy<ÏÇóÀ!õ-3 4Á.Ø;‘|H>$jîáÖZk­µVÍ3À>de¬ nµYUGæÔ×éëxõD=Ó1„¡ ßËn°sªSÔ)€ÚìÙâÙ°Y‹ƒ›/³ÖZZªy¼>çá|dºgºgº—»Œ/°T[ª-Õl¾òPTñÈŸÇ­}®mÐ6«cuÜl?Û`Ä`°ËòY>°‡ì!@ò™ö¹©F®[yèŒpFà‘¥ÚrÀr€Íç<Ÿ\.—Ëå݇øDcqcqc1+ó'˜Píª]µôðÜJ¡RW_»úZ0‚þ@ìÕÕ@StS4ÏÅý÷€¶R[ ¨vm»¶ÝX<ÑXÜø~ãû¬Ìèl1WLbLbL"jG²G²G²@ñèE/··Æ[c;Æv@flf,äXr,x†õ}Ù÷%$¤$¤À u† øî îwÍïšć©#ÙÃÃçá|´nÃá ‡7ü2­ß[é­àâCv]ØÑK£—DÁŠ‚ÏÍ}#÷ ÈÌöû:—u.€„Þ„^.%CÉ´þà ÎÃùDÿ‘ZhÊ2e™²Œ3A¥âëâëD4“­^µzÑÝž»=DDkê×ÔŽŽß£½£½DD7bnÄ)w”;DDÓ¦'77}–öYMwmÞ5"úNu©®@}S«©ÕÔjù…~Pœèèè¢~è="IÒ.Y–em§í´ˆÆ£¢ˆˆfb&ˆˆ";";|ÛÂ\Á B®KDä™í™MDä¶»íDDÇ_9þ ÑÒKw‘·¤¤¤„ˆî(åJ9‘xÞôªéUòw$—Óåt9©Ÿó‘˜'æ‰y“Cþמ®8]qº"HSµEÚ"PV>LÙç³Ï@fjfjð®}4ö„ pòÈÉ#!*üeä ct ÐÎ6545êý­þR÷¥nãÜ)$ ÉBòäIË¥åÒòÊ~ÊâçÆÏŸ«ÍS6)›”M냭übò‹àÛçmým¬íÖögiôÍ–7[àÜwrƒÕwrùÉåòé8€›ßßüž ÿtbå"Ï"n<R¬+Å~ýˆ¢²¢²¢²ˆä+òùJË€qáX ¬Ú^ãÒ±y/z/Â/˜óVÎ[ÙŸÙÿ,ПÎýt¦•M+àö¾G¾Oýë}Yû²Àøê’->ªO€¥R©TúïÍ>?2D\D4§Á”lJ6%;ÿÄlU¶*[[kìÜo}ý~,ü±€ûòâË‹ƒõ3ú™ ×s¯ô^)|{ýÛë€V|½ûzw ¿gÆÏ<9óùÆZ#Öˆ5¿f ³„Y¬ŧ¥Ga«°Uغî„Ð"´-\+úŽNGg ŸÚ^mo ß<Åh°4ØN¶P‡:€­e•¬2 ¥–û=÷{€ø©–Ó–Ój¹ÑÉO¥O¤OlV-ò(O¶X3(ƒ2äOÉNv²I.É%¹>8o<­',u–:Õ¬|¬t)]ÁÚUmª-ÃÀEçÐoë·¶yòöäíÀQÜò÷-Û¶lÓö/ÐcyDqŒÛ·;n7‘h­¢U8ë§+æ˜ÓýŸ›¥»Ò]é®Ð>ßü}ó÷™JL%¦ÇAC»Ö kF°vu›nƒ8à0ÚYm¶@[Ðâ±ÇV[ÁÖò|&³Él2üêó-SCwZèÛzÂÜk¡¾eªO»ÊÙçj׬šUsHÔõÀ)}èCàˆì‹ì‹ìc MF‰QbÔ{¤ØÆA/Ž…iwãË´«vªjg@¹OãžÆ=–Œ-[2¦ýÁÐb«Ô*µMãRóK/0š^b<Áó´[o©·Ô«f¥EiQZxàcœÔÖnk·µ®ù„|B>Ñçÿ—$òzX]ÿ8M{`¸ñ€÷üÚýóó´›¹>s}æú€viŽ4G¾óÍ3c'„"¡H(ZWZF «+Ði/Óî©Fª‘jœ©¸¨º¨º¨šIò&y“¼ê¿Œ­vI.Ée›CÍÔLÍä¿v$%¬^ý®Ýƒ¡~æa›°MØPåP޾Hœ-Îg $ÐåkñññDR·Ô-u —ü›Ãvîÿffã[eQ–Ü:ýq±ÈD&2@è:„Ž¿óÿÞ¶3ýay_ºÕÿ&OU¹!A,ÊIEND®B`‚routino-3.2/web/www/routino/icons/limit-195.png 644 233 144 2732 13061246471 14610 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍV]L“W~Ú‚´†Ÿ@1– zCP̼°Ë42&š2ªÆÂP""bÂ.dƒŠ$5›Ðh‚S"ñ_¼@HéÔH4™šÔ¥hR Ú|ý¾óìN[÷sϹùòþ=Ïs¾“÷=$À<ó©OÓ§éã§mýŽ°ß¸Î¸nÉ¥iû¤Jê6é6ý±LhJh"ÉÄ3‰g´—a[Æe~d=Æä“~˜vÄtÄtèrgì²8»8Û˜2mÿÜCš:MãA²âzÅu’¼zîê9V‘C}C}$9–;–K†m—ù²^âEâ£áü};ú¶n€Œ™3 ­]´vñÓ .&íö’|cxcz’$UÉXÆŠ\’(×h„-ã3ù²^âI|É'ù§õ€L^“¼ 7–l,1µN¼ü•¬±ÔX$ŸÒIò03– ‚’TKÕRN’¢Gô$uÔ‘a[Æe¾¬—x_òIþi=øôlù–tF’~’Tœ¤– %ZŽr^9OEìm¢BJÖÞi£Ú( ŽGH±OÔ‰:’cá©þ¤¶«íjæ”cÊAEÝ¡¬WÖ“<$ñ7+›’ã’‘‚2©™¼&o Štkn-t46Õ£¬VVó£¸(žŠ§!?Řc$ëYÏú°Ÿ»¸‹»HÎç|Îð ’Bdˆ ~”ø¤Ûév’¤)` ¢¤ža'{ÉÊý•ûCÿásñ@¹¥Ü ÃöêÙß³Ÿôdz2=™a¾g¾g¾g>²ÑÝènt“iiiáø•åW–_YN65Û›íäiÇéêÓÕ}öÞüÞæã÷;_ì|!ödþÝ|ÔÖÕÖE²‰$ÅvRÓÆ8Ù1¯#¶#–4Ü0Ü0Ü ¯Ù®Ù®ÙÈá£ÃG‡’é+ÒW¤¯ W-Xµ`ÕråÝ•wWÞ%Ÿ;Ÿ;Ÿ;IËCËCËCrCˆ– -dé¹Ò¥'ÈáçÞ=Þ=œœÙ÷vñâ’ë’K ëß­â»ã»W|ñkŽÀ k¥‘@ †ñ€$w’;É ˜ÊLe¦2ÀUéªtU)ËR–¥,ú†ú†ú†ó\ó\ó\ n°n°nÐEé¢tQ€–¨%j‰@aOáãÂÇ@êÒ…ÇC oOóébrm¹6@êÑ»ÁÎ¥øfÎøœqÈõN|ÍíÜé‹ E ;=;=;x«{«{«l›ÃæÆËÆËÆË€üöüöüv ÿbÿÅþ‹@êåÔË©—b_±¯ØØ ìö zeµµÚ üvó^ë½V@÷Ý ß—zŸÞH=z@»©ÝÔ½€ CÂ’×x²!¼Â+¼€þ‚þ‚þ0‘6‘6‘dÌ:˜uÈëÊëÊë’N%J:½F¯Ñ XÊ-å–r "¾"¾"°‹fÑ€ÑôQuT óq·Ò«ôRärŸ>‚þA÷ƒn™Çrd‰h)é‰;/v€B¢H<›x6ñ,à¯õ×úk¦®¦®¦. äIÉ“’'@U~U~U>Ðâiñ´xsÀ0€KNRNP:w‹w‹Wâ³ÜðÁyÕyéù¿®äí`[°-Ü•þ¯üV¿•œ¸?qâ~¸ë&OŸƒßÐ3ôÃ~Ï8ž²Ê^°] 7ÜzN=qê C/ؼÍÛ¬‡?äÐk‡YÕ¯ú°`çF½Ñoðü†ž¡öcŽrID¤ÞÏ=?ú,@p 4L ¦‚> ŽŒ8UÊ©¶ª­ò…&C“ N¨ê¿XªO­¨”f $’ jG‚ž Bóa~u½¼®¼Î0Xï2G9!"’Ù6¿Íï_ù±±à+özZ=Í=|Îç ÊU¹*ª©¦:ÊÁ^ö²(¡„’¨ý?±š¦ÒXŠ€}Ñ3ô ûþ+"Ò|ûk/¿ö²Ñ¬o»U4reä Ô_ª¿X5üÇáw†ß1éo÷Þî½Ý ËËË0éŸôOúùÅšpN8'œpþëóýçûÁSé9ë9‹zÿÎ¥áKÃðïÌù–ù}{éØK ×…ýˆÞ%"òío ë\×9ø—c~j~JUm|kCú†tVÝSî1÷¤¶¤¶¤¶ÀÕÚ«µWkaWþ®ü]ù]˜]˜]«««0»<»<»lësô9ú·;owÞn(œ-ôú@šDDXýâ×C[†¶¨*èöt{ ´ö#êP|R|’ê„…¤…$¸½m"o"þòVã¾Æ}ÐÑÛq½ã:ŠE¨ÌªÌªÌW¦+Ó•ipŽ;Çãp¹írÛ嶨Iîìì7ñ…¿]è¹ÐÕ¿¯z¶êÙ¨»×z¯øÚþ®ý]Õ)Ì&ú(ž}cö ó³´ì÷ù}Pj-µ–Za{Ûö¶ímpÔrÔrÔFŒ1‰ » » »¡¹§¹§¹'j–^¼xa¦a¦a¦²ofß̾ ·¾íí0õTéŒsÆ ããôQ«~8Š·ŒÊñø¡ø!‘öò_üðEqì9ºÇµÇ%âÕ½ºW±/Úí‹"‹Ç/YÌ_Ì_̹Ût·én“ˆ/Öë‹Ù|fó™ÍgDî»ï»ï»E¤TJ¥T¤=½=½=]$É“ô^Ò{"[ ž¬x²BD¹DDÄaiÖ¦µi‰Ñ?Ó?³ŒZ­KÁ¥à÷߈\ùèÊG"^?ôÁ¡¨NØa·ÇKÀþû¸}\$e)e)eI¤Õ×êkõ‰¤íLÛ™¶S$Ë–e˲‰TdUdUd‰ìظcãŽ"ÅEÅEÅE"’#9’#2˜<˜<˜,R¶µ,£,CŒà”ˆÕ’Ø÷]ßw"ãwù]ßɱæü£ÆQã0¿ÊÐΕ…•xð÷ݺQZƒÖ 5˜Ò½ºW÷ÂÜèÜèÜ(¨JU©*Aåª\• s5s5s5ÀiNsæ=Ìy˜+)+¹+¹(ÐèG€Þ°zÍÙš³Fž5ßnü,ÇÖ†sEýöÇ;¨²¤^ ¨jRMª Ô&µImŠzy«T•ªNr’“QïXG<ŠÂuÚíÎOrLÓlÓ¶éè3’ÕH^÷÷à‘dþ"4šþªÝÓî™ÉÏ'tÒ ê[5¤†€k\ãðCø_©|j\Z¤Þ¡ÕjµùV üèz€;Æóÿ’ÿñýW>¶·‹Çö>öxÞ`ÿ\ÅVvCbUIEND®B`‚routino-3.2/web/www/routino/icons/limit-37.7.png 644 233 144 3007 13061246474 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܼIDATHÇÍ–LUçÇ.\P.×\‚é0MÔÊ`Ä6)a£áZu¸`ªÌ¥YH:£Ùhã&ut® ‘F‡ÎQ’qƒQ“ö¦*Z×DY5¬6ò#ÊíÀÊʰ4‚ ¹\î¹ç¼Ÿýq9œ»þ±dÿùþsÎ÷yŸçû}Îûžó=¯€ˆˆ¤,_lllÉlû¹_]²ºdÓÅnÕ!¦,¦ìN8Î8Î8½N¯á·°9oæG׋XüÑzf\RÄ Äûâ}1îeüìÉÙ“³:5‚›o@BWB׿Ãp û@7@gGgoÀTÿT?Àœ{Î 6çÍ|³Þ䋿—w¾£/öËöË1ÿ€øUñ«Dàéâ§‹7Œ$ÜÛ¯¼üÊË“±“±Êú4°†5Ê `Ž™(lÎ/ç›õ&ŸÉoê™ú‘~\E®"(}µôÕ„öHÿ<Ô§×§›zZð.ï²Âp@¯Ò«XuCÝ †°°9oæ›õ&ŸÉoê™ú‘~¬­\yoxF=£`Ìh}áaÍ©9A%‡7‡7£©¯páB…p0ý§z•^ºM·é6P^Õ®ÚWVuIM«i”n ¥…ÒÐôýšWóBx6¯®•7”7˜ ¾·ÃÚÊq‘ï·@B !ˆ£q´o´ø+;AªB8E -€ .K˜EYäÿj£ÚÈÂ2Ø Ëz¦>‘~bˆˆÿ|¯úÛêoøgùËk_;¨ò¾|ýÎ¥;—bnžûíùÎ qŽlG–#Kb´%-¤…D:œÎ§ˆÿ˜ÿ˜ÿ˜ÈHîHîH®HRIRIR‰ÈºÚuµëjEîÞ¼?(rñŸï]¼'âoð'ú%näÃŽa‡T­ùQÞPÞÊsþ"Ðh[ýzûÖð­á8MŒ.‘Û¿‚®Æ®FøÊ5;9;©ª×wlvlfɳßãñx #?#?#šÊšÊšÊ x x xŠ*:Ò.íÒW÷]ÝwuŸµ>½¹½¹½¹PPXPXPÛg¶OlŸù“ˆKŸîû"ó‹LU =Þ/„#ýˆª\›º6Uù`.u.þ¾u¼`¼þxüÌÎ3;¡ó@gMg l;¹íä¶“pÝ~Ý~Ýn Ÿ6N§ ¨i®i®i¶âúmý¶~ô6½Mo³âg¯žýäì'Pó»ê—ª_ŠÚàƒ:tKnJnR>a&%”2FøÃÌ›3oZŸý¿ (÷•ûÊ}~"ýDú :2tdè,lYز°²š²š²šÀßëïõ÷ZBÆaã°qØÂÓ-Ó-Ó-}7ûnö]ð÷Ž|8ò¡¥§vO?7ýrÆ;ãÑœ´*i•òÁRÑR\(óUùª ïg[ŸÙúŒEœÓ˜Ó˜Ó=õ=õ=õp®õ\ë¹V(,,´ò´L-SË„±õcëÇÖ[ñSWN]9uÜ¿tvG5l¼¸|35õÔÔS€ž|-ùšòÙl{´mðs‘?úø#‘Ÿ¼Qy¡ò5)Û’×&¯•£Äñ‚ã‘ì”ì”ì‘]Í»šw5‹tïíÞÛ½WÄc÷Ø=vYó‰ó‰ó‰"uuu"â¯xEúÓúÓúÓDJsK3J3VÒCÔ‹ˆP#ÎÏ>‘ØÀŽÀŽÁÏ—}¬õ&·j]µ+6`l ?œ ÎÁþ‡—^FéÕzµ^m=éã¶ÇmÛ ˜L¦G­€fh†êÕ=ªh æ 柂‚ùÁ|ûýÀõˆFíÑÚ£¦ŸµÞn~ÇÇì_Q¿^ñ±JUÉ‚zQíV»MlbS”-ÕSOýÿ4®%–¢Pƒ>¦ý—é£:@ÂT”åc–ó/™Î[Wü@ëSŸ†góÀûú¤>‰f~D$GÐÀQŽF Oð5_ƒz ÆÕ8 /ç»ô·ô·Ðx[wëî•7²pElE¬¹RÑÎÿäþ+ŸØÓÅ{{2O°ÿÍÏ ­aø±IEND®B`‚routino-3.2/web/www/routino/icons/limit-18.2.png 644 233 144 3026 13061246472 14660 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜËIDATHÇÍ–ïOTWÇŸ(PPP¢dƒa%yQ£Ùì(ÂÔ"ÒV 5µ­6©M¨¶é›!†"1¤&ͦJHº"S$¬e*(hVˆ DZ­‚¡„[È0sçžÏ¾îÌ´ûxÞÜ|Ïó<ßï÷ÞsÏsŽ€ˆˆÄ/?¬ë¬ë¬+ýØúAp>굨×Ò¿÷ão|`ÙkÙûß/aÕ׫¾HhLh4†ƒØŒ›ù¡õ"AþP=s^â%8ÙÙlÙ¹ŒO›YofE%ûq ¢[£[tø°íÃ6€–¦–&>†‰ž‰€Ù³;!ˆÍ¸™oÖ›|¡ürò/ú"°¢}E»å1DFDFˆ@Z~ZþÆOü ¿n„¢×‹^xö4LYÀ÷;K¬Ú hh˜c:›ñå|³Þä3ùM=SßïG Éždⷋߎ¾à/þ>Ký,ÕÔó¶5Ô º¦k¾r_9K \Ê€ ±7óÍz“Ïä7õL}¿ùóÚžÉC+ñ–x†ºzýᠾÔÓÃŒ(cØ0@ÕŸèO@E¨AphÌ0@ÊxäýÃû^ý±7Õ› Æs??”<-y Ì/ë–RÙÔÑ¢háðKÞ/yàû‡ú·>­O³P˜U“j¨¢Šª#g8ÃÀ† [pZÍ©95œ¤†eWv—kÊ;Ò=Ò ­EkZ8?úý,©o~†CŸúT'€ñŠIìªv5¸PÖ>zéÑKAÁ{e÷Êî•AÝ@Ý@Ý æ æ æãÆ ã†q#ˆï¯¸o½o…³õgëÎÖ¡î_ïßÔ¿)ýŠúù`ÒÁ$`ÉïG¸""òŸ£üËù•ó«À{hNr^q^aÉÚi½l½ íIíIíIpwôîèÝQˆ?<þ8TTT@êÍÔ›©7¡/¿/¿/?h¨×ÙëìuB¬'Öë¼ô¼—ó^†´7RæRæXºwåIõ“juÚö·í#Ñï'\¬+¿XùEö«rÐ>d!BDÄrA–ÂV…­I~#¹:¹Z„rÊ)1Öëõ"¶[‹­E¤ ¦ ¦ FdäÎÈ‘;"‹ŽEÇ¢Cc¬v¬v¬V¤r¶r¶rVäÔÃS§&Dþþ^fFf†DìëÖº5Ë…ìùÒÑÒQ<¶Ã¶ÃÙ¯ $Ä%ÄC0=>=>{`Û°«iWÓ®&pîqîqî« W®&À–Í[6oÙ ¹ ¹ ¹ ~4ýhúQ,,,æÿF϶žm=Û kkÖÖ¬­°_÷Ù»Ï@•™zÏO?? ˆ¯Œ¯4†¬¢Œ6£Í2$¢ïÕ÷ŠH„ˆˆ$™ol<0†a‘¨¢¨¢¨"‘‹)S.¦ˆlÏØž±=CäzÌõ˜ë1"‘ŽHG¤CäVí†[ "¾0_˜/L¤Ï×çëó‰äÛóíùv‘ŠÄЄБs‡Ïž+1¾5õ¼sÞ9ùD¥©4ËU¬Z®–Ûß'ÒÕÙÕ)"áýe_ž¸q9q9"žNO§§S¤ÖUëªu‰t%w%w%‹$žO<Ÿx^dÇškv¬)ÜP¸¡pƒHáîÂÝ…»E®Ý¾vûÚmI“4I¹tðÒ;—ÞIiY{zíiñü°®k¬kŒ÷Eúö?ñ¹´OµOûûBwå±CÇ€Ì]iÔõ0ÿù}óûPîNw»»=¸4îfw³»¦&§&§&A5ªFÕêˆ:¢ŽÀ̉™3'`qõâêÅÕ0õãTÇTŒ_ïïE=ûv´~´ÜL½¼y2sWècÑZ8ŒøF|}šQl‡ô±m*[eƒjU­ª5¤_Ù”MÙ€L2É ù¹Ü¸q‡þmj£ÚàsÀ_úêc!_/ + v~’õ}8æ{ì{ìüTðoêR?©Ÿ€:èæ˜e”G-¨ ”*ªPê²îÕ½xÕm_Œ/ÔwËüçJªKªÍ£)´ó¿¸gå {»xaïc/æ öØÄga0IEND®B`‚routino-3.2/web/www/routino/icons/limit-15.9.png 644 233 144 2767 13061246472 14677 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܬIDATHÇÍ–ïOTgÇÏŒ0:-HÙ ¼˜´u]Ù˜X71îV˜ˆØV'3»Óh¬²!›ì¶‰Y£MÊš¸åEÅø»„`v¤Lëš,ê C;¾Ù¤fu:b3»)0Ø.ƒÎ̽÷ùì‹™ËLí?à}ssžsÎ÷{îóœó½€ˆˆ¼”y Ø+ìöÕiÛÞ’]_Õ°ªÁõ÷´}Ê›ÏæûÏ_ ¨·¨ ¸¯¸ÏÏږߊÏÍÉâçòYëò’dV­²Õeìàíš·kV­IÛç%祸ï_~ÿ2À—ý_öÓÑÛÑÛ?ÖýXYÛò[ñV¾…—‹/=Ã/ùÃùö¬t¬tˆ@e}e}õÓ“ÕàyËóÀ÷+¾_¡ì`Ä€ T ¡a=s9¶åÏÄ[ùž…oñYüézJjKjEÀ»Û»ÛùY:aüt”w”[|©K@7Ý€®é€á7ü$@ªQlØ k[~+ÞÊ·ð,|‹ÏâO×#?=ÛO¶¡5¦SË…Ìߦl)¨ãz\cy”ñ'£Ýhã—Æ«Æ«`´-F ðW>æcž}”™Ò×èkHé?¤JS¥ ö§ñ¡QkÔ€2üËG©‰ˆ¬ýœß:¿ÕòàÁ¶ÛÀ˜àMõ…¾¨/²´Lq‹ë\f™e6—…–XʉFéJW:p˜nºT­ªe‰½i|¡pÀ©95-»éz2;uê´h;ê:€¹ÁÝ<Ú0Ú€Š4G|_–0è º‚.8Ñ|¢ùD3œm:Ût¶    ~¶cÜ[{oí½µp|Óñ—¿ŒúnòAïƒ^ËknPßµ¾ÒúŠu´§n WDD¾ù3ccËßùÞPIàJà ‰¼?çµåµAp"8œ}@Р¤£¤£¤¼w¼w¼wÀßïï÷÷ãñGãÆ³mÛ>¶\ó®y×qˆˆHIf6DýOETDÄ®Ù5»& GÃѰHU¢*Q•Ù×´¯i_“HÅÝŠ»wEfæfæfæD’µÉÚd­H¼'ÞïYçYçYçqẃ"¿8Rünñ»"®IW—«KJDâcñ1ûR¤l÷3Íÿ͇˜̃ўî±Ì'v^ÜÙ·³.ž¿xþâyˆ9bŽ˜ª « « ¡¨¾¨¾¨ºNwî: 1ÌóæÖM­›Z!r0r0rvUîªÜU å¥ååp ôAë­$¬ž¦%Ðh>µz,;•‡Úÿ´¦Òì1{`áw ï,¼ƒzúÕÓkO¯e(ñ$ñ$ñbö˜=fõP=TA ¨57>Þøx#0Â#Ü•|#ùL?š^œ^D©ë…z!pÛâkëlë–¬©dYǢΨ–a#l,ó¿‰fzMoV™T·:¬ƒ:£Î¨39zÕ«zU/PGu9Ý¿õ¬õ{uD0§Ì)–Ô¯2øGà áçŒsFËcê':–£üzÓŠ¦YågÖÃÀ!#bD²ÊÏØÏ~P_©5\Ïo<ý¯TÿU“jHfâ“Æ$)u[ŸÖ§YÊŸáK=«üÏï¿ò¹½]<·÷±çóûÉò; cž™ÔIEND®B`‚routino-3.2/web/www/routino/icons/limit-36.9.png 644 233 144 3057 13061246474 14675 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜäIDATHÇÍ–ÿOUçÇŸ{•/ï­áfôfXü% _l Î]X# @1ƒ­„•ëÌœ1’ý°f°•,a4®Rrë Ølki©@u5Í¢F¡—hTì©”Þ 62À r{¹çœçµî=â_àóËÉûóåýþä<çyŸG€BˆU‘§ëZëZë al}݌ǺcÝë?c¯–}–}ÿƒ•­+[^ìx±C¿cb#oÔ/íÂä_ªgÄÅ*abºbº,ܯ¦½š›Æî[­ç± uŸÖ} Ðý~÷ûü &&æ æ ÀÄFÞ¨7ú ¾¥ü¢ñ}! 골Ï,ã-¸ö¸ö¤ü:\àOâWŠ_¸¿ìþ2ií;ÀŽ]KY‚|¤Þè7ø ~CÏÐÏ# !?!_(=PzÀÖn¸ów8–|,ÙÐ õM4a5 ´*­Š È>Ù€ ˜ØÈõF¿Ágðz†~xs+„¢åGP6Z6 ºò©c!WÈzèëÐׄ"“Jù3Y)+A½©ÞPo€®ëº®c®y”§Hê!5QM$¤Î†œ!'È_„ù¡,Pf }c+Ç„bÓ;` Øå4ŒúF}À~2Kf±Àe®pdŽÌ‘9€'Î%ƒôÒK/PC 5fX>‘Oäà÷4Ñ óe> ¼áwGô ýÿ„çL !„·Ÿ<5ž§„zú=Cç†ÎAË™–ö–vä­†[oÞzÓôçøsü9ÐÒÙÒÙÒ ·+nWÜ®0óú„>¡O˜xhÓЦ¡Mp2ëdêÉTä]ÿ7­ß´šzò®gƒgƒ±µÞ~¡÷!Äào §¡§þ›0{ö¾¬ÿãÊ—V¾D°ÂVN9àJr%¹’àBÑ…¢ Eà.u—ºKÁ]ë®u×BÞLÞLÞ ŒõŽõŽõš Ï Ï ÏÁú‡ë®¹r‹s‹!ý‡[¿ØúÁïZŸÖ'kᓲOÊ@¾žÇjét$:3v ‘ß–ß&„–<_9_iiÿƒxkÃ[DLùÅ _…OˆT{ª=Õ.Äùšó5çk„ð{ý^¿WˆÕÕÕ!vÅïŠß/D¼¯Ä+âéºÖ}­ûZ·ÎÎÎBø:}ç|焈vÄfÆfŠ˜îï|»ómK»ÅJ±"„¼77ž±S ¬Z\µ¨Å_”ãÊqóØ?zø6ð-”XK¬%VØviÛ¥m—àèþ£ûî‡í­Û[··Â©¶Sm§Ú i i i.ž¸xââ óÝ[woݽuVŸVŸV…)…)…)ÝUUëýhíGkQ@·é6PuÇ Ç ý+¡ýxEôŠhÙÁü`>üc_WUWdü<=5=Õ(ðx ¼P²»dwÉn(Œ+Œ+Œ3óUUUpzòôäéI6›‚M0\7\7\•¾J_¥šo76ÂìÎ!ç 4ß|÷æ»ówçÇe’]B¶ߨÇÊÇ Ì÷ÈÚ‚¿¾œ÷rAǨãKÇ—P=X=X=ÁÁÁP}¸úpõaˆÍÍÍÛãö¸a:s:s:²F²F²F`üÐø¡ñC°×µ×µ×ÉÎd{²ŽûÞð¼á!9»µ¼þaŇÀ;áy„q ¸q0á`‚yJÔßÏ}?®=øüÁçHíˆvD;b¾!íºv]»Êfe³²ô½Cï9"GäÌl™Ù2³¸Ìe.ÃâÞÅ¢Å"˜úßÔ£©GHùoÕ¡:€°¬?Xa?õö úŸñ±¨°¯Èß>õ±RYÊ‚ü¥<&l”²d¶Ì–ÙKüj\#×Ùd³$N:[Ù ò§²A6F‚ÜáÿÓèüè<€mÚ6X΄ác†ó ç-_^¾ÂfòÉ©³ê,ðž6¡M˜ÎÏœá È~yU^Îr–³Ày òžôK?°©oÖüšŸP§Ô)à†áüåËÊ—¡gÿùýW>··‹çö>ö|Þ`ÿÝ<‡Å­ËIEND®B`‚routino-3.2/web/www/routino/icons/limit-74.png 644 233 144 2245 13061246470 14522 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜZIDATHÇÍ–]H”YÇß™V)+· 1¼1hÀ¥¥r H1¢‚± J£r£‹Ø ÖÃZ¶«Ý(¨'d%ú¢(ˆöF]’  Ö dD/lDñk]Ç™yÎùíÅ;gÞ·¥­e¯<7ó>_ÿÿÿ<çcŽ–eYÖÚ̯ÞõÞõÞÕ¶íýÚñûöøö”ýbÛ×<=?k®¬¹P* ©·Žmâ&ß]oY¾›Ïø­µ–ãÈ»“wÇS•±Ûà°ÿ°ß÷…mÿØùò,¤áäÓî‡ï‡9 c‘±ÀtÕt8¶‰›|SoðÜøVÛ?ø- ržä<ñŒ@^n^®eÁ†ÝvoüÆNˆn„àþà~€Ñ£+´dXÅ*]Ì3q—mâ™|Soð ¾á3ü¶ Šví²,8Pw .ÿg»àm4—4—¾Ôà"Yéùô<€4HK ût<àØ&nòM½Á3ø†ÏðÛz¬÷×ö§8ä;äæRÏAy•t¯”I)ñÊfÙŒ–F©“:¯xÄ:¤C:”íºXé"P_ªzUÕ­ºIñ§<•§Ù ?Ïòeù-· òvÈË›ÿ eP²øû@5ªFþr(YbÉe%HpÙå”Sú~£ß¸ü æã=¼}Ÿá·õd„]û N]8u![\¡ÛRÍ©f§Ã_ û‡ýÐÑßÑßÑ¡†PC¨º]‰®DÇ£ãÑqGÇ wÐ;è…ÞâÞâÞbW'ãä’‹&™žJO9|¿­'#ìÕ·Ð=Û=›-?¡ª’£ÉQ§7}•}•}•ØØØÕ±êXuÌÙÏæžÍ=›s”Ö—Ö—ÖCͽš{5÷¿ú\ù”‘6i3øú„Ãoë±`uÏê}ƶŒmqµÑû 2+³2ëD¯¿züêqhZÙ´²i¥ã?+gå¬@I $P€#•G*T:q©• ßÃÏ Ãoë± ° °@ýñwñw®c?§£:êì3&Û'Û'ÛaÓÝMw7Ý…X4EávëíÖÛ­°®b]ź hljljl‚²Ke—Ê.Áȱ‘c#Ç\ÓþAQg\|Y~[Ï';&Ì íq9~9~9;'vNìœpü7;ovÞ„½/÷¾ÜûüÕþj5䔿”æ”ÂcõX=V®%Ý#RðÑŽ}x‘ër%ùUÉ#§¼v¢v¢v:ÂᎰãOnMnMnu ½Ñy£óÃÁpЕ'ßÉi9 ·äÖG÷؇O%’žNO¯gm"3‘™ÈLå‰ò„k‰Õ€P †Ô‚Åí‹Û·ÃÌÐÌÐÌðš¼$³oçÓ±tì“§òÜc­´Òêò&I’¦˜b X`@gî¹TVÄQuô?ßc¸ùH='-½Ò  ZT ) ØÆ64ßÓB‹KØ"‹,ºì6ÎsXK€Ô9uŽié‘þ¿ßüËö¿rÙ¾.–í{ly¾`ÿGjÅŒ©QIEND®B`‚routino-3.2/web/www/routino/icons/limit-24.7.png 644 233 144 2672 13061246473 14671 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜoIDATHÇÍ–{HTYÇ¶æ š%¶8I/&( £ˆ0¢¦Fj rs$k{,éšÁn%&é-$ÒKÌZÃhzM&ö°Zr— ¥Ú,w++§6‹ÔÊ´Äœ´;÷žÏþ1Þî´ÂþÝùgøþ^ßï=wÎ÷B!†õÿ 8*0̇0â¦y¦yãNøp© ‹ݡ¡%CKÂáNíõ¼^ïß/„1ߟO‹a»‚]¶~¼O\<Ñôµï¨s…¹¢Ç ™•™•gŸ9ÌÐV×VðÖöÖÖóz½Þ¯ÏóŸ/¶þ‡_ºt! ‚Æ$ŽI´®õ<¶Â ¼ôb µ%TÚ€nºÑ×?¬çûëõ~}ž>_çÓù}z Ÿ=|¶ðí’o—˜úƒÜ‘¹#u>¥ØÆ6BÁÛííP—©ËèY#k ¬çõz½_Ÿ§Ï×ùt~ŸãUz„b§MŽ&ÐþPj½ÍÊXe,h½Þ!Þ!(ýJ¥.YNãåxÐ&k“µÉ Xòªì•½H5ðcäÇHu…âTœàíôÍ—Õ)ù)ùºÀvãUV !Dt1˜»ÍÝÝ_ÉMµMµÀV’@Î’³ðǶ˜À 4Ò@^—×åu?%=ôÐÃÿ,i•V<ý úùúù}¢‹mBQz¡«W­^¥7kñwƒïl¸³Š ‹ Š wß}t÷Ñ@w†;ÃW£®F]˜:é餧“`Ï=5{jÀù½3Ï™‡<æ>T¨þ‰îÜß¹_‹‡µ+×®-ß§G¨·…âö8»îì:øó§' Odzè{ó^ó^úì£ìö]>º|t94D4D4DÄÖxk¼5ìåör{ù@a5#jFÔŒ€„™ 3fœ7sžÏyâW!„ ï·ïnÅÜŠ‘épÞyÞ Þ>=Bu‡”…”Ix< P~äÜés§!{Þ¢¼EAÌë˜×1¯áèË£/¾„W«À–jKµ¥Òæ¦ÍM›kÔ+UJ•Rj½Z¯Öñ}—ö]Üw2~IŸŸ>ßï¯m9Ür¸VV(]%ÜnÒef{R{’qìë¦×Zk­kŠ5Åš`½e½e½œÎNg'Xv[v[vÃò‡Ë.ãvÛ5n4§4§4§ ܹöâöâöbˆ»w?î><ø£ñTã)ƒO&·OmŸ | Ö…¶#tAèé‚®M]› aMcNc˜Ï˜rM¹PP]p¥à °”¥,g²3Ù™ IÑIÑIÑ÷.î]Ü;ê ê êÊg•Ï*ŸAkFkFk†!¬¨ª¨ª¨ l9¶l[¶×ô]nk‹j‹Ô°ê°jéÞý?v)áR”Ôž(9Q"ÓƒÎ&&Ó7íÔ´CÓAXTXTXT¯8^qÜ| ñ@âDp: …Fµ>µŠ——~*ëS/ÈtzO¾:ùJ·Û;úO%krÖäÀ—ïT¾þ¦uFë h¹Ür¯å²õ¯Ö›­7ÁSæ)ó”9äž:O§º]Ž.È"C #«#«# È&›lèJèšÒ5zGõNïŽm…¶øÝLJ–•—•§ +½&tß0|D÷•O>æï;   tÐáç[‰ôË«>?”¯ºU÷g>¦6©æ6s›¿}öUßi'בéÈy @©•7ÕP5¤ËûÞû…í\æ²áüä±™Í@$‘D**Èfé–n@õ:†«Õ(ü¬ÚTÛ§§¬Å›:(u¾SþÎÿå~+¿ØÛÅ{û2o°ÿc2v¬•§;%IEND®B`‚routino-3.2/web/www/routino/icons/limit-19.1.png 644 233 144 2743 13061246472 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܘIDATHÇÍVkHTi~ÎŒŽŽ˜6él ›¹«á…¬-…"ÔšÔ Eq´H—-£uÿBÔZ±±ù#£b3Ø]¬$1”Z-',ºüht3c t½¬ºÖÌx™æÌùžý1ž9³-û¿ïÏá½=ÏËyÏûœ$`ñ¤.A— ‹ غo4d~d~ò¯ûªŸ”J¥Ò?N’±—b/‘¤éšéšòJ³Õ¸šZhø¡|ª‹¡9"nEÜ’rì3dEzEz¤9`ÿh#mƶ™<Ô~¨$o_¿}ß’£F‘ätît.©Ùj\ÍWëU¼P|œùˆ Ã;Ã;¥·d„!‰Û·%}Hx“Dï(ÞA’Ãúa½Ð‘$éŸ Íh‘KÒM7Õ3b«ñ…|µ^ÅSñU>•?ÐÈøœø€,ÙU²ËØ(xõ3ylÙ±e*Ÿ¯dëMÊnÙM’þ½þ½ô’Â&l$I‰©Ùj\ÍWëU<_åSùýàß³½`¡»ÌWæ 6Ô£dûÂ|a¤8)ʃT#B™RÆ”1Rþ[ž’§HQ-ªE5µ3Ë÷|OÒÈ'•ýÊ~ú”ù¬|–'ø¤5ÒIrt?8J7¬¾H__»ÃÈË€…ô¿!IŠ_äIy’³*Ÿ˜cbŒd-kYÒÈ>îã>’ZháŽßéwú¤hó÷ú{ƒx…t;î9Ñmt»Ã­¾¸ð¦®>$«ŽW'EI** í[ƒ­Â¹Ú¹Â¹B#²OØ'ìdƆ Hç€sÀ9 ÅÅsñ\<'E·èÝšßvÙÖnk§ŒW½J†è;\r¸DíÕ‡:Ü€Ì;hÌ6g›ÉÒºVsËÝ–»ø°%}‹y‹R_Rߪ¾UÀøùñóãç’ü’ü’|àfòÍä›É@YQYQY0é™ôLzi½´^ZHÙR¶” ´.m]Úº°|a™³ÌAzòõ“¡'Cø˜›´Nü´9zsô‘yG]LMLÍÚ,ÎéÏéh© écõ±ˆˆsÄ Å ÆJc¥±x\õ¸êq`N3§™Ó€ž–ž–žÀ`2˜ & £¼£¼£Á#çËùr> ¹$—äÌWÌÍæf@l“ŽJG±ÐX<Ù™Ù™ó æÁÚ, ôWôW˜ „×…×b`ª\W±©bþeúWé_ãÒ¸4.…ÖBk¡˜©œ©œ©¶'oOÞž Ø­v«Ý ^^^j ‹° `õZ½V/:“:›: ÌMÏ-™[L›Â¼á†áè‹õÅL ƒPÚ•v©:¹T.E x†gˆÿ)†Å0 û]w_w˜O˜O˜ORN§œN9 dµfµfµv“Ýd7‰Ë—'.&º'º'ºEm\´1¤Ñ>Ñ+z|ŽA Ýñ}…¾BPê”:©_{«{ë‹§@wWw€•Àƒ ¢?‹Ž‰ŽP„"¦fS³©pÕ¸j\5@CACACp ï@ß>`MãšÆ5@AuAuA5àyçyçy§5u9êBÔ œGËWEUTÅ[Âç—‹½b¯Økçöqû¸}*H|ÂdÂdÂ$þ¹åþ–û[î[‡·oŒÙÆlcvÈgó,žå³z¬>ë÷bâÿî/9ÉOñSü”cÛ¡”ДД yGGG¿2ßýÔýÔý€<˜Æ4¦8à€Pýà<‹gù¬«ÞoÉÉó‘>ŽwòNÞéø+}-ûZö5é÷6¿ÍoóÆ )éJº’I®•kåZ@Δ3åL@.–‹åbœgñ,ŸÕcõUà°þú8³pÎB$Ö‹õb}×·,ÁÐd¨1ÔHÅ*Ø»55pK]³æY3 8¤ÕÒj>9MNù|@—q!ó¦Ó€âðø©ËûÐûPÞUŠ”"¸Y˜¡Éð¡áC©˜õg<Œttt6þŽèëôuú:e©}Ì>fÃD°Ž[n–—ËË5n¸Cmx´®R¥TÐDÄBnößòß U³Ù%»„ }þ}ýûÊRÆ£ò‰•b¥Xy³žM´–·–·–+{XsÉÂj=^øx!o—¿Ë–˘7˜7@ÏXÏø¶ú¶j‘î½~ïu8µéÔ&Þë;®ïÍJ¿Ïï -¶µ¼u{ëveº³a|¤¸ÒÒÒÐ4^8^0^ÊŒ2 ©lÍퟶ Ìýî æ˜7´~\Q\Èõr=\ùþÊ÷À¯äWÀÂÄ…‰šx÷Á¢ƒE€Z?È=^8ž8ž0ÆÇ@n>¶ùØæc¡•É6_¦/€‹ •È%2¬O^Ÿ žFO#Œµµ€|B>¡í™Ó—Ó¹ÇriÇOµŸj×»SŽ)@¶…{ã ‚âœñŽñŽñNHBr¾ïMß›ÚÜÍ©›Sµ;¨KÕ¥@ÜHÜ|ñü‹ç JƒÀ qCprúä´¶ÎhÏh¦ÎT7u  —°qµqµqµzoŸãƒ=Î~g¿³Ÿl^~öÄì „?GíŒÚI ?×255EDTÒ_ÒODÔs£çQö†ì DD¥-¥-DDw«îVEËÑ2Qì'±Ÿh¯@Ñ!:ˆÈtô øˆøós ÁQÁåp9\²1>â‹ùb¾Ø?Üâ¦ÎªÎµk5ˆ™ž€áÑáQÞÙ’Ùíâ''@Ìó óµÎ×@¿Q¿>úù£Ÿµ*üiþOóC;*Ÿµ6[›Cý®¿4yiRÝÉ?q\—á%!KȲjد,õW)÷SîËKìÛœo9߀©Â©B¸•¼y ò yWó. «Ýv¾í<PÅÀÃê‡ÕðvåÛ•u#ë†V}{÷ØãŒqÀ“ä'Éðz –i5+W Ô@H…Äö Š-ˆ-ˆ- ¯ŠWÅ«f§záóÊóÊåjV?`ª‘kdxa jË#ìöh5k:m:­ÝémÛ ¶;¶€ûUÛ«6üb~1h¯«®«-·âö;çÞ9𨀻…ÝÂsþ<…[ÊǺ ]º.Ýqš%˜j÷¶ÿ3%O=¹_Þ^|{1àôÉÓ'¸´€gÀ©q½ÃG‡@‡¿ÃÈå׸þChÏL¹}æ66©OhßÀ7ÌrÉ\2—¼¢#PPŸÔœ‘3æ·qfîKîK¦•À_¬}g¾:ó¬ªv«++´@J–’øßP”Ï•Ïu¨”<¥V©U£ÝN³óç+@jŒþý7R¥º“ï ï™ *Z1S±¨±æP刅,d!\‚Spî?¯>­mú,}–o?h;b;j¨äIRçÜ7ÜÔçÔxx(¥þ{þ{ð²Ä·vTí¨’«ÕhZÇ­G’ö&íMÚKÄxoàÎéÊæ‚àßRáð@xÀ]Xz`饈tº ]…õˆªÝCŽ!G«Ý€)`‚VXað ÏðLs!.“—ÉËBZlYÓ²¦e’§¾åñºx]¼svÎ×Ç„Ÿ4w1â艋p¿÷õ1º ]†.Ã~6¤]S­©V£Ýx)^ŠF#‘‡0„!À:ohÞм!e‹ªÉX>–Ý~8BŠGðEÓ‹„vwr;ó·pfÎÌ™µÚµöYûBÚ•ú¤>©/¤Ü™¤™¤™$`åäÊÉ•“òoT-v ÝB÷ßÖ1©¥ ø z‰…Xv]‚K£ÝãúãúãR¼Ýl7Ûͼð‹IFjº`º`ººvÄ6±Ml þK2ïFDßà8Í`¤±„íAíþã?i7·$·$·$¤]ë:ë:ë:ü}n^QO‚+ãʸ²üšð6ü³ˆ¾ý—ö2í®„¡Á‘É€ËêÊêÊꔿ¦ûÒ}é>iP=j—à\¦ê¢.ê¢àµ#Ø#úEÓÿh‘Ú=îçþÈíâvq»*¢"* ü–_Ä/âqÄÑå¯S=©žT‘pS¸)Üä.K#NîÿfñêWPømøôÁr^á^¸‹ÜEîâãÅsã¿¶FœŒ-¢îKú߃ì—P¨–ÍIEND®B`‚routino-3.2/web/www/routino/icons/marker-7-red.png 644 233 144 3753 13061246465 15362 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü IDATXí—mL”WÇï󂢋Îjӈ¬1®î®Œ®º& *b#ÚhVL@u› hÑ65ÁR(*›¥i-TWEdÔt×f/m6j¤énB#ÌD±µÅpx{ž¹¿ýÀÜç™™¬º›ÝóeæÜ{Ïùÿï9ÿ{ïŒÃöscú¢‘¾‘¾‘>íYd iDÓˆ¦MÙóMÛ´M»åÏb–˜%fÁ𴬦0…©|ˆõe•Z¯âU>•?O_Ë'š_‰(%zcìü„_™Mf“ÙÔøDÛ®m×¶;D<ã»Çwïæok³æäÝÏ»Ÿwr3r3r3\_Í«õ*^åSùÞ‹ù}a¬?å½GïÑ{³T…RŠRŠRŠìw_?|ýðu9:ø8ø8ø000ÑK/½@€püȼZ¯âU>•?oÊ'/æ'RÇèz‡Þ8¯d\͸šqÕú]ûPû@ûíDLΔ)2Ë.³>°>{¶5ÁšvŽ5ÏšåGæÕz¯ò©üáüÔ15­QkÔ…0+Ì ³¢þU•U•Ueå8ÄvÉ]rA«Þª·êAd@€Aĵ0 €…jN¸Ë]°ê­ÛÖm»d±,&¨ÂžÂW|?‘p/á^½¿U RËSËSËåTÿ#ÿ#ÿ#º"y‚ö»Ì.‹"d6³žxv ××ëx6æÙ€Þ­½[ºúºú€`pcp#T€}À¾d_r³)<…¯ø8üÌ­æVsë 5q¨ðPá¡B¹%’ d5ZV#¯ò*0 rwOíž àió´Áð1'ÅIýŠ~ )H9‘rèü¶ó[w¿VãÐ;Cï8nHá;•á'dçø´ñiãÓ¨z’ý$ûI¶›/^¼@ù0ª¢ ž<püÚñkŸW|^pdèÈÀÑ G/Œ-[ ðÆ¡7ÅtäK¾¼ò¸<îâ)|ÅGñSD÷¯>¸úàêƒîÎìv»Ýn:餓ÿÀì“öÉhÿ³ÑŸxåõW^ø¾ìûhé ‹e±›ßÁ‹à+>Š_„(_ä¶ä¶ä¶¸¨öR{©½4†‰åžY®s`èâÐÅèáÀÛ·Æ|5æ+€º»uwc6ô±ýq”ÛÃSž‚½ÇÞcïqåÎÉ“;ǹ·¿P-˜_3¿f~ mýZ¿Ö¯g9ËY$›ØÄ& HÐ=£<ä!€²CÑÃ<<ÓWL_`}g}—G0@]@ -´€L—é2=r_ã2ÆeŒ£MñzŽž£ç ý¤žºc%ÇJŽ•DI ÑN´£`è£@’ÑšãÇ?Þд€¾¾˜JfÛÙ×ì3öûŒ‹w¹úrõåj§’¿×Òµt-}è'aÌ5æswWªSæììlOñ¯õ¯õ¯uå¹D.‰–˜ý¦ýf4ä‘Ì#™àžþû‰÷£7ˆÜ 7!ºéV²’•îöC„i»Óv§í;€1Á˜`L¨ëIË’–%-¼b^1¯4t8~nVnV®½Ce —†KÃ¥ ࣄ ¾ŽÑÞÂ×¾66mlLÑÞã= H9å@×pËÃuáºpÛê¢[E·Šn…CÁÍÆfcó?ó‡ýQêÔ+Kù4!=!=!=pT”–•–•–¹µ´Æ mÚâllÈû!ï€êæêæh©„÷‡÷GµºÐ.´ ÝVŸê9Õsª‡•ÎZ©Wê•ýÙÚDm¢6ñ7‡ã·'u½¶^[¿´VkÖÚðh¸Ø×ìkö5£T²wØ;Üzõð’¯ù:ªñKd¦Ìt·×ÑÐÑÐÑÞDo¢7ÑÚêTr¯±×Ø[šåPË9"ÇLu¹fŠL‘iî¢Q4 atFç»užÖÚÔÚÔZËã߿ӿ3F»é2Àî·û>>¨›ÀÇQŽ‚Ì—ù2ßÝκ›ën®»iïp^ ^³×ìõíKÞ–¼-y›z–ž¥gig"ì ÍŸE>ó6£ÍhÓÎMÝ9uçÔB$%%ùö9ÚÍÌÊÌÊü·Ú­£xÊDµzº=ÍžæJ¥f^ͼšyr‰ó–{< žŽþȯ¥ÄØNkâZ/´8÷Z¬Ÿš8¬]ÿ™çj×cy,K(ü0ü0üÐÕb+­´‚oTë¨ÖQ­r£É$=IOzëqRü4ŽßHñâ£&N»k^¦]«Ùj¶ÜÃ4Зܗܗ 3ºgtÏè¶§9Z 4¡ M\ºæ yCÞÆ ã†qC» ÌëÜÿÍ<ηeb™Xf~;ý~¡.u©KÐ.h´ ~1<þK_\gÚãò¾´Õÿ$„-2§?m|IEND®B`‚routino-3.2/web/www/routino/icons/marker-85-grey.png 644 233 144 6355 13061246467 15647 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ¢IDATXÃ…—{LT×·Ç¿ûÌ{‡‡ZÅ„q,Ec|P+(¶"D¬µ´15еÞñéU¡`[5HI ´ùÕý‰r‘Ƕ‚T„`AÂs~ÂPÅAA†‘æqæìû3xÓ¤éúggï³ÏZŸ¬ýÝë¬CÒÓÓÓÓÓá…3Î Ìþ ?Hµé?¥ÿ”þõËÍÍÝL½©7õ>·ŸU° Všd«´UÚ*éY¡E$ *¨ Ї>ôHB’èYQ¼(^OÒøÏùÏùÏÛ‹È™ Ç 3|3|3|뻳ödíÉÚC lÀ˜®ÉÅåÅÌ®Ã:¬cJ¹L.“Ëäšìf»Ùn~kufUfUfU©Þn°솺Ë*Ë*˪Ðÿ’åÉòdy¨ &ia‚0A˜Xí³Úgµàž»Ÿ»÷»ßwû›õïŠçŽïæqóñ]|—Ê©œÊ¹OÈ>²ì Èãðx ß›KÌ%æ’¥>sëæÖÍ­s¦F÷E÷E÷1Ž®®.+J¥‰Ò`Á—ø_B ,°ø Ÿá3 ° `±ùÛümþˆíjìjìj¤Ž»ª»ª»*.uüýñ÷ÇßOüN ¬;÷9÷9÷mΣjª¦êÁO˜wÉIëIëI+€F4¢Ñ¿’_ɯl¼fŸ¶OÛ§—n ܸ1p#».á‹„/¾à—z™¼L^&bæaXª¤JªýèG?xÀÀ¦0`–a@È‹1Œa |£Ü(7Êñ¤übùÅò‹ì'Oî=¹÷äÿP"”%Cµl<ÏÆ¿·ïá=¼÷ô5okÌÖ˜­1™Gæ‘yX¾¶|mù:ò½ £AGƒŽ²±êu‚:ÿ³øñâÀs†:C¡  ±;±$•¤’T€üH~$?¤´“v€VÐ ZPêC}À8íN»ÓHæHæHæ€z4ôhèQæ‹!:D‡(k¸d¸d¸äó•8Iœ$Nš# ŠoLm¦6S³ÚÞfo³·Õ¶É_Ë_Ë_ӠÆ “6¯R¯R¯R0œŠSq*È™ÌæoxÃo,ÉHf/S"‘`>æc> ˜7#5Q5DNäD“ñCã‡ÆÁ] ¾|%˜†™d&™IFtÂ0a˜0l[CUTEU_ítD:"‘@Ô£¨GQírI\—9ÓÇô1}ÀØú±õcëöûí÷Ûï}+ûVö­ØÛìmö6€T¤"0]5]5]:l¶ðØøØøØt^î¼Üyè)ê)ê)“ŽIÇ$ä^^^FFF"ÚÍãæã³Al´æ€÷ ïÞ7pvEäŠÈ‘¤“˜Ä$X¦ˆ)bŠ€®þ®þ®~àÚák‡¯Äâ ñ`}h}h},Ñ/Ñ/Ñ»ª€ž˜ž˜žàZéµÒk¥€ÏŸ+>W[­ÆVHB$!’ ucêÆÔ€ L&ƒ0äYȳg¤ ¡¦¡¦¡gÍQæ(sÔš86ylòØ$w¶t}éúÒõÔmfö{Š=5;§ù·òoåߢT3¬Ö ¿Yýuô×Ñ_)=Òp¤áH¥ƒ–AË …ÒòãåÇËSZ8·pná\Jí·í·í·)57››ÍÍ”Òýt?ÝOéLÆ(år¸.çM|7›oð ¾!*æ:s¹>«8((è ®Ù¹fçš@…¼B^!Š;Š;Š;c„1¨4*J,þcñ‹ÿšcšcšc€^¯^¯^/àÌå3—Ï\õ‚zA=°}hûÐö! D¢Qt+ÝJ·Î^Jó)ó)ó)€+¸‚+DÅð<OAÿe 7…›Âñoösösösð˜1fŒ{ƒ:>2>2>pó¹ùÜ|À¶Ø¶Ø¶°µÙÚlmÀ«êWÕ¯ª×Ï_?ý éEzX•¸*qU"°ÛºÛºÛ ,J^”¼((‰-‰-‰ƻƻƻæs‡¹3g~d~d~„3L HÿÅÛÒ¹¥sKç‰ú¾/|_ø2%sÃç†Ï 'd/È^iëRëRëRŠ[‹[‹[XM¬&VÄ/Œ_¿ˆðððÚ‡Û‡Û‡‘Ö‘Ö‘Và£]íúhü8øqðcÀWã«ñÕªßU¿«~îOߟ¾? (ÚmŠ6@±S±S±Óº8]œ.‚»¦»¦»&ü·ÈKä%òbÏ1H@2Šøéüt~:I«««sÏÏÏB*‰‡`òØë±×c/`(1”JÞHbÌ2f³–ZK­¥˜“='{N6ç›ç›ç ´¶¶¾ÙߙߙߙÐÚB[€…C ‡Áæz,­¾^}½ú:·ŽèˆŽèOœÄIœß Iþ;ùï俌޽7z¯øs²9Ùœü©¿²OÙ§ìsIêLêLêäåöîèÝÑ»¶²¼²¼²<ˆèizšž8+gå¬À¢þEý‹ú½š½š½ YØ,lµŠZE­ŒKÆ%ã€ó´ó´ó4°á· ¿mø t«~«~«ä¦ì¦ì¦Œ³´”·”·”3R©Sê”:ïvT9ªUk/“Ã'‡OhE+Zj£‚QÁh“dJ;¥Ò.Uo:±éĦtÓ¶5ÛÖl[C~66›Í ún}·¾D– K%òy€à½ä½ä½à?ø¥AiP#9#9#9€ÂSá©ð‘ŠHE$,ÑÑÑøG±¶X[¬EµtB:!°¾Oy”Gy¡ÿÀr,ÇòždþL䵡u¨{Æ­åÖrk÷]’þ"ýEúKš–7-oZNßñ÷ð÷ð÷ e+"VD¬ˆ@¼g«g«g+¤Ä›xo§p §<ÄC<`„FÀoÀoÀoð ö ö ÐntÃdª0U˜* ¯ù¶æÛšoÙ@á”pJ8ÅÇLûw‚CâדLsi.Íåû»Úà ¸®€¯qìºO,+++++ &wFáZ˜ÕK»G\ÚÕ<’Gò~þ_&Љb¢R+¡†jæB•£ÊQå` …ÆBH†a“îLÔO×O×Os–§O žðúÅ'Ä'Ä'ºklÏlÏlÏN|×ÿAÿý.À@w=uºùfAÿìÞ u9¸ïÒnEð­à[Á·rwˆˆˆ”eM(& ¾ñFúôéÎ#®ŽÞ³Ë§Ë§Ë?6¶5¶5¶‘O¤½Ò^i/Àr\àá&þÇüùOG………1¯\ñâ\ãôŸ¹xø ‹ŒŒŒŒŒëšvQ!R!ùÜð¶ámÃÛø§s±s±sq + ‰‚þã‹Í/6¿ØìsËØcì1öÐœŽ«W;®:ßrL9¦¼ÁÁÁ†£þ´ÒÂÿ©"ˆxOð ¯ðŠ[à>W¢Ø?óüý…v3gÊ3ƒVÒJZ9ÀÜdn27 ²n·n·nçÞ LOÍSóÔwï)o*o*on‰Ô ètä÷÷÷ýÞå·Êhù+cÒ®«\83p‡pˆßNö=dϯJª¥Zª=þ™d‰d‰d ÓÃÓóô<ý³%Ü9îwîàHïîÞݽ»@¹ü¹Ëé¿ãø?fSôG:R#IEND®B`‚routino-3.2/web/www/routino/icons/limit-164.png 644 233 144 2626 13061246470 14605 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜKIDATHÇÍ–KL”WÇÏÌ€ÃÀD’ZÛ„.J21© T"h!>h'>€˜˜‰‘HÆhÛ„T±‹ºpÑnJIZeãhPG3iÍØ$>ð‘´©h Ö8€ÑLTD¾Çýu1ÜùFm÷ÞÍ—sî9ÿÿÿÞ{îù®€ˆˆÎ~܋܋ÜsÓ¶{›ãÏ[•·êciû€®õ®õƒ_¼îyÝó#ó#ö-ÇÖó:>;_ÄÁÏæÓ~)Çáyc®ºY{´,nYœ· mÓ¾“¾“S&´ÅÛâ?þé0;!y%y`¢n¢[Ïëx¯ñ²ñeßKü"{:÷´k¼s¼sDà톷Ê?M —C°1ØpÏsÏ£Ü`ýøñ«:`’IôxeëùÙx¯ñ4¾æÓüi=%µ%µ"°nÓºM¾ƒé„[G`×›»ÞÔ|ÆIà+¾Âæ¤9 `m¶6“Õ¯úpáÇÖó:^çk<¯ù4Z¼x¶õДה<0.ƒ=Ïžv­Ñkôb¨]*¢"(-Y5«j#˜æ€9¶m[¶ÅËC©wͯͯ1ì%F®‘›Yðežn46Z`g}ÖQŠˆT|‡í»ï»?™ ;ag×ZwŒÆ ž©¨º¡ndQ•QF¨‡ê¡z˜å?ÎqŽ=ôÐ|H 5 ~W«¿ìQ{”gL¥ñ!ñ4ñÀ÷—ï¯É­gVØ‹ÞÞ«Ñí÷ÔããgÅý?ôwõwÁÈ™‘3#gÃ…Ã…Ã…ÐïŒwÆáZǵŽk¯ìC¡¡–¡¸ðÆ…Ê •Y;žLóa„÷„÷è;pqVØÀçüí‹öݪì {‚T¬4æù!'’ɉ@¬-Öks—»–»–»`Íí5·×܆ê†ê†êëëërâÊËË¡þÇúÞúÞŒ;eçÏòÝÞˆÞÐÂ>w‹Ì=?÷ü’e2U³´f©ˆ|""â:H£ŒŠWþ”ÇòX¤(¿(¿(_ÄÎÎN¤Ïî³ûl‘¡ÝC»‡v‹‰¬¬ZYµ²J¤´½´½´]¤Ãè0: ‘™Á™Á™A‘âo‹÷ï=¼Ô¥ùä­ÚÖÚV­Ç-â z‚äƒ9Ss¦2 Õû´Ò*Òìnö4{D#‘ÀˆÈt|:>Q'Ô uB¤d d d@¤šjª9µíÔ¶SÛD¶7noÜÞ(ßßß!RãªqÕ¸D®6]m¾Ú,2¶uô£ÑD<§Ó||“SS-¢õ¸EìŸíŸ]ˆ2?6?Î+‘\—ñŒ-ôÒK¯ˆJª¤JŠø7ø7ø7ˆ„ B!‘ðêðêðj‘¢ž¢ž¢‘d8N†E–––D®û®û®ûDÆ¿ïï¹yðæ7¿pøøu¦l¦L$£'ScDGgJ²ÕÚ5S:SJJ{‚` €C݇ºu;µÓ2Ü2Ü2 ùÞ|o¾¶nÙºeëHU¤*RN\ÄŠX ‚‡ƒûƒû³vêšÖüi=ÿ{+9mFͨs+Ÿ¬|²ôÉRx~÷ùÝçwB+fŬ<¨|Pù ì²C Îª³ê,Ø}vŸÝÓ˧—L/G#RR(®™ýf?`Íò= ·‡Û_¹•ß/éKNæ@ÂJ8 rmšŠg̼tÿC„*Pª «“.T ÕB Š*ª²â't€ý™ýÏ02}ÌHàð¿ÐÇþ£ó³ëŽuX`í±ö`°—(Q§q”#uI]R—€cåè+mL±ÏºgÝàÐL˜ í6.c6yšg}Îú\ì;ê"u‘º×cWÅ®Š]E²â¥ñÒx)§ÓÆiwß=î~ß=ßíoÆ¿+ž;¾›ÇÍ'¸2¸Œ{q/îÅ6“mdÙR$ ‘„HBn”N~1ùÅäÁÚ9µsjçÔ:ß^ÕµªkUŠ6F£dQ…¨BT!KÎmÎmÎm+‹xÏà6Ðe$çqÎãœÇшÆ@O¡B¨*ÿæ°9l[ðZÝ Ý Ý 11uoêÞÔ½Â%͸f\3æb.æBäa<Œ‡AÀ=ÜÃ=ð€€Gx„GÂŽp€t“nÒ ƒÄ „Q¯Q¯Q/Ü¿rúÊé+§ÅÍ÷î7ÜonÊ”2¥LùUâzq½¸þÅMx/âŇTiP”@:O:O:ïÏÿ²VY«¬UÁku©ºT]ª¸.cKÆ–Œ-ÂMR£Ô(1—µ°Ö2“1AB@bH ‰H/é%½"CdÀ ÜÀ €mdÙFÎyÎyÎy€w«w«w+æºýë^Ó½¦{M\çŽïæqó‘¼ê¼ê¼ê”8‡Áapª ^^^×|Ê“y2O†©'õ¤à·ùm~ j¢&j‘ˆD$fŒ›¹™›gÁ§57;Îî²»ì.@ch Áøè‘Ñ#£GÀΉçÄs"׎kǵÄ$‹—ÅËâׯSÁ#xıßO%M%M%Éw’ï$ßÁ* Œ5³fÖ< ˆxÄ# q$ŽÄ¦6S›© iiiœ!þÄŸøƒÛ·nZ›Z›Z›€®] º ?ËÏò³ðÒ×ׇ,Ù˜lL6b•›ÇÍGÅP1T }a§Ï Ï Ï >Z˜´0ia)vÅ“ÑNÚI;žÂSx  0?lýaë[¢É¢É¢IàA߃¾}³ w{îöÜí 3 3 3ª‘ª‘ª ¬µ¬µ¬¸@/Ð p®s®s®›™&[h\h\h$Ån7Ÿ`¶Û‡ñW}Š>EŸ‚,e³²YÙ +ÏæÙ<*D! Q©&Õ¤°ì°ì°ì®-º¶èÚ"@½X½X½xI¼$^³ MÖ&k“ðÛà·Áo°ï™}Ïì{hhhNtè:ÑtgwgwgQQQ”}Ê>e¬AKƒ–-EÖá;Ãw†q\ÀøZNËiùL9÷å¾Ü oÒ7雀c‰c‰c ðeð—Á_z™^¦—íÛ/¶_Äz±^¬p ·p xaï {_Ø Tܪ¸Uq (ë,ë,ëÆRÆRÆR€ÏÏO øpðáàÃxÒäô ú}À9œÃ9A%þ‰?ÿûøâñÅã‹Ñ#¾,¾,¾ í¡=´Ü=³â­Š·*Þ|5¾_ °á؆cŽŽ­Ž­Ž­€´WÚ+í4l6 ÈY `²Ùƒ»Ín³Û€Aý ~PØKì%ö’Ù=èj%“w&ïLÞAÕQÕñ¿ ŠŠŠbA__Ÿð×ïË¿/ÿ¾œdÅ{Ç{Ç{Ãf†f@Õ2¿e~Ë| ¤?¤?¤¸tøÒáK‡h ¨¯©¯©¯h ¤ÀÍÍ77ßÜ ¬ [¶6 XJ–’¥ çÎ-œ T•V•V•iHC`3­1­1­Ê$1IL|¬èQô(zÄŠT¤"õèy!WÈrIVÝîºÝu»º‰;&v@åñ™ÇgŸa<®?®?®ðˆðˆðˆœ9Îg ¼"¼"¼ðkü¿("‘ŠHÀ3Ý3Ý3°”ZJ-¥³™:5tjè0±zbõÄjÀw…ï ß°»†Uß|ðMK$&b"&œ%Nâ$ÎR9»à삳 €þ†þ†þ†²ÿŸÜ5¹kr×á+ÂW„¯pÌØŸ±?c¿¤ÀUaì® $wd9²Y@N@N@NÖ•Ö•Ö<úùÓÏŸ:b;b;bò‰ò‰ò €%²D–0oæÍ¼À÷ß |<}wúîôÝ 5Í5Í5ÍÌÚ¬hV4+¨JU *Pü°iªrªrª2áS’ócÎ9?hA Zž>%5KÍRówÊG5jÕg¬Z9´rˆ¿”Ò”Ò”ÒDþéŒuÆ:cÁAAAAÚûÚûÚû€§ëž®{ºÐêµz­~6ƒÚ 털_p¿à~ :¤:¤:„ „ „ Àz÷æÝ›woâežežežøFõ”ê)ÕSWs —pIì§ IÇ.JÏÓóô¼Ä@OÒ“ôdß~ÖÃzXÏ6‡ª^U¯ª—5.k\Æß1¾c|—%­’VI+l”SN9°Ð¼Ð¼Ð hŸÕ>«}öûÖÞðªF/zÑ+¶ãà©Ð­ÿZÿuÁÅNÅNÅÎËù#sFæŒÌF¯x\ñ¸âá<èHÒI:I‡ïã}¼Àl¿VC 58½L/ÓË7›šMÍ&þRKdKdK¤¤@­P+ÔŠ‡åŽrGù¡Ûµj?p7q¼]^.¸A­®¶œy0æï¶ŸÚ~jû ppp8ô¡ÚGí£öyPÞUÙUÙU))¨ÞX½±z#‰ì!{ÈÈY+ceàPB %ÀÇøˆHD"Âö³égÓÏ&\®©©·Ú¢¶¨-[̳Ň>œ–ÞÃÇ.)žr«)î@Üîú%‘»º®%’ µ¨u$‰$‘$¾´aú—ãÆ?¦2§2§2Ù¾4–ÆÒ]}2údôI¬g¬“uBE#i$„]̳Ä,ÈÏ„ ;æ ·$X, ’{ŠEŒ"¦`Éô¦yû&+fŬX8åZÙýîËÏÏÏÏÏǸ;£p=˜ÑK»]Ú=åÒîµÿÒîTåT唘9Z2Z2Z¥”RŠ1w&¾µ}kûÖÆ¬‹?,–ÜSd+²Ùí×í}ö>{_ö'÷ÖÜ[so àÔ¹ÏS7 ›oô `÷ *—ƒ&—vÿñ_ÚõññF¿Êý*÷«\çA×yëmÔµF->o44 d³ªSթ꘎é˜nßwÂëÂëÂë¶¥¡ñ¡ñ¡ñtØï\­íI. ~Å’’’’’’ ººF.ã2.#»-Q–(Kþ×9ß9ß9ÿߢq-?¬ë­ë­eYlýs~~å‹+_¬ü*‹?Í€e¯eï¿?„U«:Ê¿(ÿÂø1͸™_X/’ç/Ô3çÅ%ù‰âËÅ—-Õ˸^«z­jå³øTWWéðnß»}½z/ðˆÄGæ«ç«!͸™oÖ›|…üÒú;}XñõН-÷ ¸¨¸H<5žšŠ÷² ?WÀ+/¿ò2À}Û}›²@æ?€§ªR¤0G¢›ñå|³Þä3ùM=S?ëGÀísûD`Ïë{^wœËüø%¼¿îýu¦žv8ÉIœ §ô@æ­Ì[¤A…T Èc3næ›õ&ŸÉoê™úY?òÛ½ý‡ŸT­V«å ;4»fõ¡~W¿‹QFĸaÜýž~W¿ Æ¢±h,’)æ˜Ë!eLj¿j¿¢é÷´uÚ:0æ²üP{¿ö>ðpY?·•)‘ Ÿ€cÜ1ž²ÃOþŸüù€]êŸzBO°SH¨˜Š­´ÒZ`äÇ8*©’*™ŸVój^Í­œä$€ò) [æ×î ßp¤©”o³~–WêÓïàà?0ž5‰Cm¡îP7jÒ=éštåoÞ½= §;Nwœ†èPt(:”W«ÆÕ<Ž®ˆZ£Vèhï8Õq ý&²!²!—ý¬ú®ÁÝàÒY? ˆÈ­¿ñÙ¥/}œ{Ï—Ý—/ ’¶í´=o{ú«û«û«a²h²h²^‡×᥿Ò_ žZO­§nFoFoFó†Âáp8ç’sɹþJÿSþ§Àó§µÉµIÒÿüåÄ/'Ôè«ï«ãɬ«X˚˚ŸÛ* ¾1ߘE""–s2k[e[%Åîr÷Óî§ElmmE¦ë¦ë¦ëDŸ?|þðy‘àDp"8!Rººtuéj‘șșÈÉ©ú©ú©z‘¦ž¦ž¦‘àD0Œ‹”þ¡lkÙV)¾ýÆp×p—åœÈÎÏw~.ÂRÉ%?<·U ü‰ò'Œ1HÄ1ÈørÇ€š-5[j¶ÀÙñ³ãgÇó+j µ„Z jSÕ¦ªMP¯×ëõ:¨}jŸÚرcÏçlÙ6²­0ÿí™·g@½iê͵͵\M®&cÌ*Êè3ú,c"ú^}¯ˆ‰ˆˆÛ|cýš>¨Š8΄3!2ã˜qÌ8DüGýGýGEö—ï/ß_.Ò½£{G÷‘ôöôöôv‘ÙÎÙÎÙN‘[Í·šo5‹Ôøj|5>‘ýOfó»þÚõR×K"F©§%µ¤ˆ¼§<Êc³Š5õBê…È ‘ëÁëAyFD„w–}-•HÉbÉ¢ˆsÚ9íœö{‡½"†×ð^‘@C !Ð â {ž°ÈÅŠ‹+Dí>´ûÐn‘ÞÞ^ñˆG<"†@] Ndmïš¶5m²4°þúôõiÞ‰LD&D2¡Ô‘Ô‘ÈÂSÙr°0O¥Ñn´Ã‡k®A-•.Ù—ìnL7¦áñÀx`@, ÄwÅ]q,_8¾p’›“›“›áÑУ¡GC0ûíìµÙk ı0j¦gª}ª˜zZ£¼ižJr},ìp's'“û4vQgÔåû&Íÿ1T…ªÈñí‚ßõ1~ÓÇ :¿þªíU[¾óãÒÇô1 ;³˜YDãïôчR_© ê¨ïÕ¨Õ¯úU?p„&š€rœ8=|ÄG(Õ¯kº†¦¾Ï”fJA}¹ÌßU{¢ö„ùk*ìüï¿ò±½]<¶÷±Çóû?¸‘ÝŠÊÚIEND®B`‚routino-3.2/web/www/routino/icons/marker-73-grey.png 644 233 144 6314 13061246466 15636 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü IDATXÃ…—P“ÇŸÇßû<IH4 ÔBiAÃ5¨QáDAQäÛZ<µS…V{#µèW=::üª¶¶ç‰HmÀØkÅoAa¹‚ÚƒWüVT @é€Fr$äÉîýA¢ßq¦ÓÏ?;ûì>Ÿ}ígß»ûY’››››› 5¦Í4]pÑB¿Ð/ô³†Üïr¿Ëý޽Vð´àiÁÓu ˜ób^Ÿÿ«è'ú‰~ºT[­­ÖVËŽ¢ e(#9E(Bt¡ ]R‘ŠTvTš(M”&’á‰ðDxò÷22FÆÈXvižožožoӃ…; w£(Š$ašƒþäâRsÏ#‰Hî<- ´€þd·Ø-v‹ÏÒ‚º‚º‚ºóv£Ýh76Þ².±.±.Ñý›â¤â¤â$êuqº8]ɉðˆðˆð–z/õ^ê ¸ëîvw÷ÿnÏý»Æsïæqó ®®dJ¦dJšLv‘]dWàI>äo”[*,–Š¹Þ¯4¾ÒøJ£s\W\W\çÐvh;´äMiŽ4Gš+>ÆÇørXa…Àøx¯ãuXmþ6›?ÞìhéhéhaŽë¡×C¯‡Òý£ëG×®O:.”Ê£dÎ]Î]Î]kO²–ÂRú“ ¸•äÐÔ¡©CSZЂÿ™B­P+Ô¶\°OÚ'í“sÿ´:huÐj1rëž­{¶îΫÍj³ÚŒ ÌÂ,̂ȂY0 †€nt£À ÌÀ ˜À€„  =¤‡ô@ÄF0Á¤4)MJôUª:UuJLîkîkîk~–xJ<%ž¿^ÅD1qÕ6¬Â*¬ü?~C†„ ™Ef‘Y_þl=l=l=³J³W³W³W|3åÝ”wSÞnJMR“ÔÞ©p*œ H1ó0i$¤`l€ Üîw ·Émrû…VÙ\6—ÍG¯Ò«ô* ¿%¿%¿^W¥«ÒUq{~~~Ä7%Æc‰w¾,U–*K}5AÚ/í—ö_Ö“‚†‚†‚†„¥ö6{›½íZ›Ò¢´(-L“ö íAÚÒ¦¾¢¾¢¾Ž™™™™¡$J¢$JÀôÚ¼(0  Hpwq÷"ìŠ8Í 4àŠ¹b®fÓ‡¦M‚žQQQ±³Ê¬2«ˆA!‰Dü%B`¡,”…æov( ‡ˆÝ»9v3âÔÃêaõ0$§ÃépBÞSÓSÓS8ÓéÎt§q§ÒKzI/À*X«JJJõ]õ]õ] /³/³/ÓŽiÇ´À«ñ¯Æ¿Ì.ž]<» u´ŽÖA©Ö«õj=¬±ñ±ñ±ñˆ«Ê­Ê­Ê<ü=ü=üó7 ¢FÔˆšåi^—¼.y]ÂQí vP;Hô®Ý&:;;5%5%5%€åŠåŠå $ ‰B"àÒF9dŒfŒfŒ÷÷÷@ý‘ú#õGµAmPÓ>Ó>Ó>`]Ѻ¢uE@\Z\Z\Ü& 'ú#7FnŒà¨%Ök‰]ž†¬ñ¬ñ¬qzô|Ôù¨óQÌmú ý„~Â+fŬ˜1{¢=ÑžÈØ7ÅMqÏû±Ê°Ê°Ê0ƾ ÿ&ü›pÆÄ³âYñ,cY«³Vg­f¬9»9»9ûEÿÖó­ç[Ï3–­ÉÖdk³…ÛÂmáìe³¸yÜ|ŽàŽPî"w‘»ø|fR|¯ñ5€! aˆ@RCjÃ[†· o½GzôÒ|Ò|Ò|>šæ£ÚÚZÀçšÏ5Ÿk@grgrg2Ðy¿ó~ç} üiøÓð§€ä ä ä À.° ì@¶‘md¤Ü{Ü{Ü{Îà ÎPŽ÷ãýx?Vi^f^f^†^ñ€x@<ž4‘&Ò†8€ÑýsAøáÄ'~8,îZܵ¸ ðŠöŠöŠè:‡Î´Úm@×Ð5t Py»òvåmàáú‡ë®<ò=ò=òd#Ùb!‚¹Üó–_,¿X~A/ÄqA¬’“}!ûBö…XÔëÛëÛëË*ï•Þ+½W `>æc>&Î ç€t èòíòíò†Ï Ÿ>D–G–G–¿˜€-À` : †Nà•î•î•äò ù s4s4shónónó:wvîìÜ -Ñ-& †C`2 †ðï²^Y¯¬W,â°[±5¯LÈr…\’ÓäÝäÝäí 2-6-6-†œ×óz^³äι;çîœü³ü³ü³^l·Ù‰Ø PUU´ç·ç·ç¿h'ÈòÚ…v¡Z¥V©6W³üªäªäª„F1N'qg¹„{íæk7_»ùÙAI¬$V[18ºttéèR¾¯j¢j¢j™ér t¼ïxßñ>lݧ»OwŸB~ ù-ä·4•¦ÒT@Õ¢jQµm8´ápÙyÙyÙ äõçõçõå|9_ÎË“–'-OÓ\Ò\Ò\‚´º¯º¯ºZÏz<ëñ,îgÉ É É‰ûÛŽÇÀ~¿äÎ’;Kî´•¶ÒÖ[A2_™¯ÌwËý'•O*ŸTzL'é$dkBN…œ 9ER”ÅÊbe1XØhØhØ(ˆ,^/‹H )!%Ï%ÍÍÍ ,*,*, ˜0/`°²leÙÊ2`…~…~…“÷*îUÜ«À?××ד‘///˜ZÏf³Ùlöú\:—Î¥?‰á¸2®Œ+ãÛ¸cÜ1îØÐ_ií¡=»ìr‰\"—ÍhF3ØÂŽíÛ;¶ã{]«®U׊IÕ€j@5ð7T#Ñ@9ä‚„ Àßìoö7ºãºãºã@€ ˆ0›?5jþòzÔ£bD-QKÔ!#dä %+È ²âá‡(BŠWšçŒ˜Î…|r’œ$'o¦s+¹•ÜÊýµØ‡}ØÇ}Yw¯î^Ý=q÷XÒXÒXää"¹H.ÂŒ7ðÞx!×î~Äø`{ض ~Ôú=×¢òÚÕkW¯]ufŽuŽuŽu %R•T%U}_r<äxÈñã7‡<ä‘ èAzĵ|LLLLL Ç8Æ©ÑёϞ]xváÙÿÝdÚhÚhÚÆ™·˜·˜·,ºö,ìYس0g¦n™n™n·‰É™œÉa#žÄ“xBÀLÌÄLÀ•]›° ›À¸>®ëƒÐjh5´ØšëÕ׫¯Ws›©©©œr|äøÈñѶÃÉÃÉÃÉfqúx$©®‰e¹g««¼HgÐtTíÛ·?ìö {FÖg /…—«ÿbW]W]W_ÔðNÃ; ï°5$¤“tHé9zŽžƒ'<á °q6ÎÆ"‘ˆ˜6 † ø¾qQã¢ÆEP)Œ £ÂÐet]–õÙ´ô§\R,™Æa î ˆ¸WÌõ$‘ºC×¹[4­=g&‰$‘$rͦé'Ç+ŽÝŽÝŽÝtoM¢I”‹ÖÓÓC"}DÑGsa\›˜#æˆ9~üUðWÁÎã ã ã ¾[¶H¶H¶¨(ŠñŒgüþŸ©žê©^(Á0 þÕ-‘ÂÂÂÂÂB˜Ý…ëÃs ¹´›éÒn‰K»5\,ËÅî¯E RÂ}Yç¨sÔ9ÄݦRS©©rŽã8ŽÃ¸;M“M“M“Ô:¨ÔêùnÙAÙAÙÁõ¶!ÛmèàñîøîøîxÀä>OÝ€n¾ç /»;È]þÈ@¹²àò‚Ë .m’¥ÉÒdiߎùùù ¦K¹—r/å:3]½ªÃ»Ã»ÃÿÙÒÖÒÖÒF’åääDƒhÐÞŸ„íÂvaûä?i"4šîw×xo¹ÊÉ—¹xü¹6™èªv0 “0 ùÈ8ß8ß8ß8g;g;gߥ©FªÙòå³µÏÖ>[ë}ÙôÐôÐôýGû·íß¶ë\9á˜pL8ø hhèþ¬”•²Ò¿ÕC )¤|~Çïø¾î^W Ä—yþÄþ@»h@œy¬–Õ²Ú˜®š«æªÔL½=õöÔÛt¾‡ÞCï¡çò)| Ÿr½9¸:¸:¸z]Œ¡ÇÐcè!ÿE}¨õaî,¡Îhý#b/iWåÒnÒ‘ŽtáïdÙAvüw0k` ¬!ûÏ9žs<çpù~€šC?§ŸÓÏw?~´íѶGÛ€i@h\þ܉åäŸqü?ÌâßwIIEND®B`‚routino-3.2/web/www/routino/icons/limit-11.6.png 644 233 144 2662 13061246472 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜgIDATHÇÍV]hY=“tlGmkk+(]]µ.±Ò.,EºÖ+V]ÿh­)* Z-®? *ú°ÊZñïA$•}ð]ƒH­µêƒìƒVP¡+¦*¦?ébCEÛvlC’™¹g’i¢eßû½ çû¾{ÎÉܹ_.HÀ”Ĥe†e†%+Ž-µÉ|ƲŒeß]‹ãó:)­“ÖuüFfŸË>G’9s.¯“ج›ý©ë$ªž™Ç$é7ÒoHe |”¬.¨.ȰÇñ)/©4)Mù­y[3IÞ¼|ó2w’ýû“d¨,TF&±Y7ûÍõ&_*?Ž~¥ò]ù®ÔK¦OHŸyKó–ÎÚoèšE®^¹z%IöYû¬ÂB’¤þädNe$Uª4c ›õD¿¹Þä3ùM=S?î¤ÍisäZ×Z—r!¾àõUrÿôýÓM½XÉc<ÆÉ¤¦j*IêõŒÂ+¼$I‰™ÄfÝì7×›|&¿©gêÇýà˽=]Nµ2V5Ôf8crL&E½Ô‚4+Âì0œÆbc1)êE½¨g2‚ 00Š„Ø¢Ò1¦µÇ²bY¤¡ÆùÉÊw•ïH~Lèn¥ óÎ’ÊåšFv–w–“zIr…hÔ>kŸ9’”`„RïÑ{ôR4‰&Ñ”bè?ðC žÍÙœMŠA!’ÄŽðVœŸ;ýmþ6’TTEUÓèûI¼©óɺuHñI…&¯×í½ê½JÈ d²8&¼n¯Ûë&¹Ü@n2oÔµFmw¯éþ¹ûgòôÝÓ-§[(þÞð¬íYÛhw¡èÝ^¸½ä¿q?à=hßÇ?<'='G_Ë–6Ï=Ï=FäCòyy­çZϵž¤Çåqy\¤Ü,7Ëͤ§ÂSá©k`jûÔö©í@©¯´£´¸òâJøJxòË“GOaÈqç¸Ñ+HtX Œf£Yzhë´u&l&±ˆ‰¨ˆèBºÆ Ÿð  5JRc2?pjàÔÀ)@Y£¬QÖ™ó3çgÎjójójóû#û%û% ¸/˜̆ ànîø­îÓ}Ò«4XÔ%ê’çOÖO­Ÿ~X95¨·&6¬aÒ®I['mEº¬É²,56Ñ=Ñ=Ñ (o•·ÊÛd¾üvùíòÛ€·ßÛïíîäßÉ¿“LT*\•ë›Ö7!º±¶ÆRcá¯Àuõº*]°Êáìpöó§©§òpÝa’wÌSiœ1ÎC‹†j†j("éD0öãš34gh999BÒO?ýä cÐ1è ETDE”4v;ŒäÀ÷Ó¦QùÑÞhoòT²§nnÝ\sàž˜06ï,©ô+ýjé×ýú¨î ÒØllN™cŒÏ±ÿ(£Œ¦àÍÜÄM¤˜$òDIŠbGÄ´™¿ÃßA’ÊG壚Æ_̱”ɯUY«¬ÉÉO»æ×ü$×ûô¾±“Ÿ6æ2—äqçñDM¢WtŠN2ñ“o麮3&j!-DòOsòW¥U¥‘Œ~=ùÇï帽]ŒÛûØø¼Áþúˆ’èÚ•HIEND®B`‚routino-3.2/web/www/routino/icons/limit-152.png 644 233 144 2731 13061246470 14577 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜŽIDATHÇÍ–qL”uÇŸ;‘ã& °ƒ?²Æ—)kEÐ’ÂdQGÅdcât ©5s1–˜cþQ:ëØÜ5¡¦u· 4‘þP £MmÕD/:‹1 q…z…wÜû¾¿O/ï•õ¿¿Þ=¿çy¾ßïû>Ïïy""’1÷°?dÈž·í¯Xû)/¤¼PðYÜ>¢ƒ­ÆVsåXìYìÈìÈì0~´lÓoÆ'æ‹Xø‰|æ¾dˆµáèttÚVÏÙûàåG_~4%;n¿7ÎÎi°õ«­_|ùÉ—Ÿ°&¾™ø`zõôj°lÓoÆ›ù&^"¾ìû¿,ìYØcG²#YrËsËó_üœU•U•¿-øm²€> ¤’ªVa˜k*Á6ýsñf¾‰gâ›|&\€ëY׳"P]W]çl'üxšl~Ðä‹Zi%´°Ðëõz¢ Ô6l`٦ߌ7óM<ßä3ùãz䟵}ÿ9¨M©MîĆÀXl,ãéXG¬ƒ˜úPõª^”)YCß©ï}™¾L_zƒ¾Qߣv0¢ª@ ´Ÿf‹f‹ˆ‘ر?æ_xˆè:m(“_=ò†sÜ9N‚ 4æKó¢>+‰•0£¾P#jk 2È "DÐÐÐ,·Šª¨ŠûØËÞ„¼wB£ãõ¼kyÀŒsÔ9N2õÌ ;2M{›æŒÇÕùØéØi‹gà©'ž€±õcëÇÖ[<]]]Ðæns·¹Á»Á»Á»"§"§"§àêäÕÉ«“pè—CC>;X_\uÆùКZšZÌÒœöÝ›\ôõ<j ÓÆ4ÑΜÎÔÎTHÚ•´+ittt€vL;¦W³«ÙÕ UUUÐèmô6z¡ûr÷åîËUšUšU eSeSeS».·"·~xêÛkß^#:'o‹1þiàÓ€)ì»7í"éçÒÏ=)­*^U,"¯‰ˆØÚIaŒ1qÈM¹-·E²Z²Z²ZDœåÎrg¹ÈÅ3Ï\<#® W†+E¸Å-n‰¬õ¯õ¯õ‹ØJl%¶‘mömömv‘>WŸ«Ï%²(mQ΢‘V oÞ*ŽxCÙÚÙSÚWÚ'2¯2Ó2ÓŒLO[Ç^/×Ó³JVv¾ì|ÙyðÕøj|50rsäæÈMh8Ðp átø;ü~Ȟɞɞþ†þ†þ¸réÊ¥+—`ÅÊ+W¬„MÚ&m“ªÞxÞx>aÌ윪ªS]Äè6ºmQÚKÚKb.—,”_å×y[Ôuu]]±‡ía{Xd"8œŠäEó¢yQ‘Íu›ë6׉,ÏXž±4Þ7Þ7>ºñõ¯Q‘ýîþswßçM7=|Ï©|äpN8'ÂIÔƒº5ÇÀØhld&á·WÚªZU+(¯ò*o¾Gy”pãÆ0Ë,³*_å3cᇂCΰ3|ÏûÉ3'¿>ªÙú[ú[ÄØ‹Ÿ5‡ØÆ«¼ ªWõª^฼Ínvƒò«€  Ô=SÏ$¦:µim8hâ×.¨]Dî™ü÷í¿ò¾½]Ü·÷±ûóû7Ì&…‚ý%IEND®B`‚routino-3.2/web/www/routino/icons/limit-35.6.png 644 233 144 3042 13061246474 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü×IDATHÇÍ–ïOTWÆÏLQ†‚£5 E!ˆRè$kAc5ƒjù!êP1”ÍTbk_ÙFšì Ûbv»Å´A‚H&–­¥hÒlÙ®qÀ˜hX×Úb(¨ ë Œ8B™÷žÏ¾˜¹½Äý_ÓÓôƒóèrN!ê߀Ýû‡Auø¿øWùW:æŸóÏáç.RùH9¬%UIQR@±)6Åü•cãÙ%åþ@m `Ðoö›Aõùa÷ÃÝÇš¾ö(ï !Ä«' Âáñ„qtx`x¸Àv™2“9ši¡äù@>X ©  ‰æ™g~A>™d’ANI·tÈ=rs|â/¤§éç<BˆS̪Tkljúж¿ýñ[¨Ï­Ï®ÏFÞH¼#^×;_t¾è|œÌ;™w2Z¬-Ö+Ú}F£§'¦'äþåŸ.M^šŒ×:b½i½ «¯>¾ú8ôôöôöôÂÚþµýkû¡dWÉ®’]Pa¯°WØa²²²_hÊ;åòBæ¥ÌK™— ànÁO?Á–‡Ÿe|†wl¯'Õ“*÷CWRW¨®àÒ|¤œ÷÷÷aþ û6ìwƒ»ÁÝUùUùUùa2I“„}•j¥Š7p.¨çžœ{¬ Îò±S®ÕD×Dë_I`ó¼{Þ ®>úîÑwH¥P)T õ;öÅøb|1à4:N#ÈQ9*GAž•gåY˜Ú;µwj/HŸôI¨ÕƒêApY\q®8¤šê»ç»§ëq§&¥&E3ÜSã[ôYû‡åË|æäße“lµCíP;@^•WåÕÚ dK.¹ |be”Œ”‰2@¾&_cNÆ…øs†o ߈xñØÆMÍÇ4ç÷jÎk ³†AнýòŸéÀ4ЬüªüŠ_›ƒw±aùoùƒüè£>`6ø¯”ãÁd.Tÿ¢( ~é¸n ]sþžïYç~ÿ•Ïíéâ¹==Ÿ'Øÿ%¶%>œb\IEND®B`‚routino-3.2/web/www/routino/icons/limit-21.0.png 644 233 144 3014 13061246472 14645 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÁIDATHÇÍ–oL“çÆï¶ÐR©à}˜2plÙa1k\ÔTº°ÁÇfètY2Ó„íÈ\tàÀeŽšhfjŽ;1Œ ‰Ë’)Q"SÍæ‰; ȲàÌ‘t2a ŒŒê\iùÓö}~çCûú²ùe½¿4×ýÜ÷u]éó>÷óˆˆÈ’䯀ùIó“æŒ6ÿÓȧ½šöêÓ§øxL›L›~Ø™M™M}þØçÚõu½~a¿ˆÁ¿POÏË1¶6[›©$‰÷ÛϿù|Úã |¸ ìöŽp ¶unëhÿ¢ý vÀíoo p¯ä^ X_×ëõ~o!¿ìÿ‹¾¤žO=o›Õf¼ò¼òü7óÁ³Á³àW˯e€øo€‡*B„ÐcjÖדõz¿Î§óëzº~Â@vqv±l|kã[ö‰†¡/awÎî]/Úä ˆ…b!€øÛñ·™Õ¥º0aëëz½Þ¯óéüºž®ŸðcleDDäÓ2¨T@ˆöÄF¢+¢+@›-Ž-&štªtËÚËÚKÚK ¨êFL0Ê褔;¶%¶…hl,êˆ:@mOðCu¨:ÜÕõõ­¼$"RðØCöP(EÍz=À~^U¤Šˆð ‡8X±b-]K×ÒAT'ÕɆ¦˜bj.¢ˆ" bŠT…ª By’ÿ¤^RŸ~„Û""ǻɬ­©­yð?¬´õ5ö5‘ÿ9|ä0jð¿ƒ_ ~ÅCÑu´ëh×Q¸•u+ëV–‘×ê´:­ÎÀÁÀ``šSšÂMaÔÈôpÛp›¡§~¯-¬-Ô·öx·Ä¯‹ˆ\o„suçêàÊÎa÷°[½ã˜¶7Û›™+*ý¥ôȽ“{'÷ôûú}ý>ð‡ýa,{,{,{ µ¢µ¢µâaãSÞ)ï”Vu¬êXÕÎÿ9Ï;ÏÃ?BÏ4?ÓÌܽƒêh»ØvÔ¿~̲8½%½å—HYMYÈØÚ¡‡>4Øu¼á›†oÄv)ûRî¥\Ç)Ç)Ç)‘kó׿¯Í‹¤ç¥ç¥ç‰,]¶tÙÒe"ªRUªJy(üÇüÇüÇDl—m—m—EJ6 lY<’iÉ´ˆÍ?|zçé¦"žŸ=?‹¨Ë‹Ô"õ‚+ŲÂZg­c%µ‘W"¯˜¤º¥òBå >Q˜õqÖÇ’í<í\í\-²¶wmïÚ^o«·ÕÛ*’L ¦EœgœgœgDfff6×âZ\q\u\u\5òc¶ ›ÈÌoOÄ#A[–-K²¥Û²Ä²„•fõY¬4VjúÑÔbuZ"ýï55JvÙGeUeU"[Ý[ ·Š4×7×7׋$>vC@¹”K¹DLgMgMgü¤oÒ7éÉéËéË陜žœžœ_7îw‰Œ®ÍÍ)¸øÜ–ç¶H¶H¸*\%bÊUýªßô£Y __ø¾Wä»îïºEz¶ö?ÕÿïÆ%z3zSæÛ‹Ú×´¯YÞ¹¼sy§ˆ?ÏŸçÏ3 ¤íHÛ‘¶CÄîµ{í^#_¾«|Wù.÷^÷^÷^WÄqED Ö¬,X)RµtãÝwe¾8æþÃýïŠøÇüc"æÍ‘üHþ÷½Âáä©d{Ãö˜iKœ’É×&^œxÆ{ÆGÆGP-MM0»nvÝì:ãã¾åþ•ûW`nßܾ¹}À np‚ž 'èµ^­WëAmR•ª‚CÁñà8J»}6ú,Oè¯á½`6y*ÇÓ˜c Ï•s,_åáïF”èƒ1 Ð@=õ …T†ÊP‹Ô""ª&Éß Œ؃ö`(…}ŽýéVÿ´ŒÝÕÛª·ú21™UoÜw€j‹MǦ‰òo¾ækcò“I€¾ä­ @ªŸÔO@8™»¨¥iiDÕõX8üúäßœ²9˜ÿëätïÊGöuñȾÇÍìÿ_%›‚fÐð°IEND®B`‚routino-3.2/web/www/routino/icons/marker-99-grey.png 644 233 144 6251 13061246467 15647 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ^IDATXÃ…—PSçšÇ¿ïÉ CˆJ©K@Y`Q´A±ÒJµÕV±-q½þ¸ŽZ×¹¸Z¸0¸Ê¨µƒWGÔÎì"*׫è""нBnAR1• *š)I–INÞwÿ AÇNŸÞyÏyÎó|Îs¾ç}Ÿ—äåååååAq3Ü"þÿˆÄjóÎæÍ;˦ ŒÆeÑÌŸù3ÿ⦠ӄiñìUö*{;ˆ38ƒ3$QˆB€.t¡ ÀlÀvP’!Éd\þ9ÿœÞv† ‘!2ô§ÓùAùAùAõ ³ ³ ³‰A„0’6ÎA›Ü\ np`wžÐZ@›6‡Ía œ[P]P]P}¾ßap†ºŒÌ™=2;þß|J|J|JPŸŸŸJrÄ â10W9W9W xæžûÏóžxñÝù<ù=<>Þ]Áw™œÉ™œ~NrHÉ +…‰ÂDa·¾·³³›¡œ\7¹nrëëÔ®Ô®Ô.Î£ÑÆhIº$W’+ÉÅö`ö@†Œ`Àø_F0‚1b±‡ØC®mÔ6j™³!ª!ª!Š~=øÞà{ƒï}ö­,L& [(uå¸r\9KK˜š©™úÑçÜ»dߨ¾±}cшÆI|_ÅW5þÕ1êuŒÎX¾8|qøbaÁÊ­+·®ÜÊŸWXV…á@ 0S1xt£Ý|á _ÃÆ0€HD" :¢#:x‰—x Þ,7ËÍrô^>~ùøåãÂç½wzïôÞ᛽¼½¼½¼ûnB†‘´IHBÒÓÿå¼[½[½[ñTñTñÔÿøûÈ‘#7f¬_¾2|¥®ÎVg«³ùfE "Pˆ×M×M×M€~@? €Ç:¬Ã:€´“vÒ~ÒOú2HÉ €k¸†k¯ü]j—Ú¥ü,~? <ñ󳳄tO~‡ÔÔÔ¦Íu´:Z­7ZåV¹Une6l ­ŠrE¹¢UQUAÎi8 §y­r{ oá-h ˜˜‰™ =¤‡ôH@^¹Óõt=]pe\W«y“y“yè)ù)ù)9K°úYý¬~Dï•à•à•°"cQ,ŠEý9Ë™ìLv&)šMŠ©n@/ºœ.§Ë!çtœŽÓ¦ S…©hãÚ¸6x¼êñªÇ«ü‚_ð €D$" þÄŸø¦ŸM?›~~Í?ëqÖ㬠@Ðtݹâ¤â¤â$¼Rî¥ÜK¹‡T‡"„!bþFÿKþ—ü/á`lJlJl )ukIà~à~à~¼ÿàýïììì€o‡o‡o0œ1œ1œ$%%%%%+­x´âÐþiû§íŸÚ m…öÿû/>±øÄâ@Úwiߥ}7Qh¯ØY±³bg‘Ò[/o½¼õm)¶[ÊüØmÙmÙm¡Ï/<¿ðüBæ1+bE¬ˆ1×}×}×}ÆŠæÍ)šÃص¶km×Ú&üXÏžž=={Ëçóù|ž1cº1Ý˜ÎØAÍAÍA cUÍUÍUͯù?éyÒó„±oŒß¿12fR›Ô&5{ÓlýØý$Š»È]ä.N¼™»° »*£2*wwwÿ>ÿ>ÿ>s0sù;òwäïÂa°xºíé¶§ÛÖÃzX V+‚_iÓïc¿ý>„t!]Hžg?Ï~ž ÷"ò*?·–[Ë­p §pŠDñ¢i¢i¢iìoÖyÖyÖy$v|YÀ?‰Ì"³È ÆSžò$15151¸Rs¥æJ Лݛݛ РņbÀ6d² ¾•¾•¾•Àü]ówÍß\ »v5 èËêËêË †C`¶GÛ£4£Í’‘Œd07¨È¦±ilôpé\:—Îþ&ZÖ¾¬}YûÞúA/‚^qçîÜ ¸C···aJ(¡„xzëôÖé­À¤&}4é#ÀrÀrÀrˆ½{1ö"`XkXkX ĸb\1. !>!>!N–N–N¬ë­ë­ëززØ2À 7È r æ@̘À”ÉS&O™ŒQý)ý)ý)ˆ~jø©á'ü»D!QHB1‡•X‰•ùgø<>Ï#¹õB½P/¸Â‡†† ïø¿ÂZQRQRQX¿´~iýXµ.j]@œÄIœ€¸IÜ$nT}ª>UP^Q^Q^ oÞ<¼ù5ÿId™ˆ§ˆ§ˆ§aÊ0e˜vz’ž¤'!«¬¬¤ ˆžè‰'‰‹¸ˆë{/ÑÛÛ[Ó­±‚±‚±ÕK—¥ËÒõ/ß{Œ=Æ×ÎøÜøÜø\.StBtBtöêÕ;ªw€¿½ÿöþÛûœœ óPæ¡ÌC@à‘À#GrÜ#÷€ëšëšëàö‹Û/n¿– ,XdÎËœ—9,84848|åŒÊ•3èH§²SÙ©ä6K“¤IÒ¤«-ÎgË'idßã}÷=Ђ´¼uLlÅÆ&ïáªáªáªê%G–Yr„-Y½"zE4¹m\g\g\622¢ цhÀêÀêÀj"ˆ à‚ .ÀtÖtÖtxÒó¤çIl 6›€©Ç§Ÿz#íªvU» Ÿ”w—w—wãºÌ$3ÉLcï11Qü'˜‰™˜ÙñŽ;ÃáΈZ¹ÃÜaîðÀ6ª£:ªËqÈ~”ý(ûh:×t®éû纺:T•••ctÎÛsÞžóök€iHC'œpˆCâ€)ñSâ§Äñ7ãoÆßœ´ZŸYŸYŸAVÓXÓXÓ(„{½Œ^F€Xˆ…XöR’HIbÇpGq”q·y®„ñ¾‘ÿ3)!%¤äö.™Kæ’¿®‚j¨¹¿\ß{}ïõ½Â&s¤9Ò ÙJ¶’­°ÒnÚM»Ô¢µ¯m©íhG;ÀzY/ë(£Œ2ØÝwå7ŠnÝ(rí:4thèL* •„VFGG{ ùÈG>ù+tÐA',õô£>èG?ú…‡ØŽíØNª¢¯F_¾z4Sú•ô+éW…C³‡fÍæÍ—w^Þyy§k§'!©'õ¤vh¡…€ö ÈB²À¸f®™k†ä®þ®þ®ž-iÑ´hZ4¢£>J¥òé˜ã‚ã‚ãÂîóæ?̘žé™~î(eÐ÷x‘úR_ê ¿ûÏî?»ÿ plwlwlß}ÀÇßÇßÇÿÑÅ®ê®ê®jÑÑÚUµ«jW±%d ÙB¶@BËi9-ƒ7¼á 0 ³0 @"£&½IoÒ£¢.®.®.~>ƒ óè<:o÷qé=sKñØ8KólÄóâî#‰Ä=u×Dtu¨Ck'Y@K2Ç·®:79797Ñ?~F?£ŸQnQÌá˜Ã1‡‘A;i'턌›ÉÍäfÂ.ä ¹B.$'T'T'T®HC¢!Ñ(ê–ÆIã¤qGŽÿ4_7ÓRZJKùcî/»ÍóÅ aõTî rkw§[»ÇÜÚýo.…KáR^i·ÚYí¬v ›Ì§Í§Í§!ã8Žã8X<•¨­­¥#OKŸ–>-uK÷J÷J÷>¬±Øì{¿í^Þ½¼{9à w?'ózø&@ßö8ÈÜ~tk÷jô•è+ÑWŽfJ7J7J7VMš647_Ê»”w)ϵÓÝÑûi•Z¥V‰ÿjlmlml%ŸË:e²N€†ÓpþÇ&~ ¿†_3úNDBDBD÷«;ßûîqôM.~Ã’“““““!¸§ZæÅ¼˜Ùl˜e˜e˜…ÿtMwMwMÿ‡ ‰DH">þË‹¥/–¾Xª¼bî0w˜;Ø‘ûe÷Ëî—¹Þv;‡¢íâEâEâE»BØivš¾P $ˆzÇw>êi[$îB oòüŽý†v Æ—#W>«bU¬*YÇUr•\åÿDŒ}8öáØ‡t–¸T\*.å:Dj‘Z¤n¸£ªTUª*—%ëuz^GnÒ@HÙ÷î¸ÕnÀ‘ßâàð;ö†vÝË…+[°[ø6’M²IößU¬–Õ²Ú?}áêêÊuˆúEý¢þPZL‹iñ¦g«;Ww®ÆáŽçi,Gãÿ.ô;è·ë.æIEND®B`‚routino-3.2/web/www/routino/icons/limit-130.png 644 233 144 2673 13061246470 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜpIDATHÇÍ–HÔgÇ?wzó¼sJ—ƒ’á(·QŒé.eg°a5Ó±±2GAmm´ˆElŒÖ?"i ®–0A5!AÔ¬?¤¶ æP‡zf¥N9¼cš}<¯ýq>~¯µýßóÏñùõ~¿ŸÏsÏçûˆˆÈ³+¿î,w–;·ÝՎ߻ջõ¥‹q»Á×{®÷î| iuiué?¦ÿhÿáØ:®óëEüD>í—gÅq¤4§4»ŠVìxÿ•÷_ñfÆíïûÁ×êkýÛ„Û>nhiliä<¸þà:@¤(RŽ­ã:_×k¼D|©ù¿x:=® Hy&åÈe‡r>'ü™ÛÞÝö.ÀTÒT’r€õJª*bÄÐk.ÁÖñ•|]¯ñ4¾æÓüq=k¶¬Ù";>Øñï\¼à ðå _¾ ùŒVà¾!̘°>²>bT¿êÀ… [Çu¾®×x_óiþ¸yülO½ åÞr/0®f§4~2~ÂP_«&Õ„Ò’í{ÚžsÜ7ÇÁ¾f_µ¯®võºªT•(3ü(ø(ˆ¡>3KÌ’Õ _cq§µÓ”æ—DA¹µØ¾{¾{±d±GìUÜw¬1ãMãMÕ/êwõ»CÈ!q襗Þ]t*Seª ØË.v%ÄK¬Ÿ­ŸYd[F³G³e_ØŽ%k=+®¾cûŽ­öa£ê3:Œgãýßõ×ô×ÀXÆXÆX†Ã3äò yàTã©ÆSpóäÍ“7O:ñážážá¨[ª[¨[€‰XØö;WÆùþ¸ža¿~Á`SwS7P ªÀŽØ–›ŸkNmN…¤XR,)­ù­ù­ù999P>U>U>Ùg²ÏdŸöÃí‡ÛCA° X„¼â¼â¼bX¿¼>²>‘޹й –WäU©™‹#G´°_¿p‹z½ù›åïà¦à&ùDDÄu/LHŠLË‚,ˆdffЍJU©*E¬²B"'¼'¼'¼"£££"ëö¬Û³nHKWKWK—ˆwÖ;ë¹Ós§çNˆÄ×W¤#óò—ß”øÊuN],œ)œYÕéþt¿=s÷æî9×Þ ™Ì Α„rC¹¡\8ë=ë=ëuü   °Ý½Ý½Ý ùçóÏ矇ý®ý®ý.(½]z»ô¶“_ÜQÜQÜ ×ë/Õ_Jàûpæ­™·@ëq‹Øív»kH”Yj–Š^kÄ#wåîª-Æiã´qZ$ãBÆ…Œ "Ýk»×v¯)¬.¬.¬i³Ûì6[$ DQ‘èÁèÁèA‘h0ŒEÂ}á¾pŸHøµð«áWEr¿Í­Ê­rø\.s‡¹CDëq‹ÄŠbE·ÅÝ×Û׫óØ+/+òÈ#í †Ã"KiKiKi"%%%"éÒ¤ ÜÜÜÉZÌZÌZiœlœlœÉÙœ³9g³HÞxÞxÞ¸HÙseþ2¿È–ÎàîànÏ^wpÀ°DVõüß­¤Ól2›œ[-ŒnŠn‚‡·ÞzxË9cÞ˜7æav`v`v¬Z«Öªuâv›Ýf·Á|d~z~앤’PXfÄŒÖ Ÿ¹ïȾ#OÜÊÜZð=ð=ˆ%È5b9s ìÝönYâñ•L2É Žª£êhÂ@­VÕªT½ªWõ ^TÏ«çâUfŸÙÇ"Ÿ¯Î±¬Ñ,ÀðMú&Ÿ˜cÿ1ù =ù­1k È´¾²¾ÂàM$L~NPC ¨+ꊺü@ ¸Ä0Ã(õ›µÑÚˆA§uÄ:’0ù­rO¹Gwê±ÉÿÔ~+ŸÚ×ÅSû{:_°ÿ9ß"Î¥HIEND®B`‚routino-3.2/web/www/routino/icons/limit-28.png 644 233 144 2523 13061246467 14526 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]HTiÇŸ36ê,“fX™…´B‹‚Ű”ÌÆHRk Ea²áE´v³a] }Ñ…ÝÒ¶ÁV# íU¢¶)Da¡kMáî¶áGhR®»Í×9çýíÅ™3çì²uí{sx>Þÿÿÿž÷yŸ÷‘e™¯€gg§À²=ß8þüp~8ðƒe· íÑöüÒ…W ¯]+ºf>wl;nç»ç‹8øn>Û/ËÄqäÝÊ»¥UgìSÐXÞXž¿Â²Ïß_—¯ëowîˆvF;9ÓCÓCïªßUƒcÛq;ßžoã¹ñåÔøEÀ{×{W{y¹y¹"°vÇÚeG­„ñ2Ø]»»`"g"GyÀ˜üøU5°Àöxë²íx&ßžoãÙø6ŸÍoé(Þ^¼]êöÖíõuXžÇKŽ—Ø|é. B?è ú€±ßØOÔ}u ÛŽÛùö|ÏÆ·ùl~Kü{o/|õùõù€H’6úŒ>ó¤y’´ù›ÊU¹(ýwý…þÌsÞœÏþ1Ì_Íqsô?ôq}T®Ú¬6£ÀŒ˜Ò$^£×…oóeùÅ-èóËà›öM/,—ÆKøÀN0/˜ø ’§8Á G=ôÐfÂL˜  ›nº]ñ DˆÅlc€yÚ<Íâ6~†/ËoéÉkÿZN¶œÌ®{3ê“ú$ ±†5ÖúF½£ÞQ/\j»Ôv© FFFOv>Ùùd'œ>?|~Æ*Æ*Æ*œ¸º§b*†"¥Ïés.¾,¿¥'#l¸nÎßÌn‰j6ÛÓ[Ó[IÚžGÆ#ã‘þ”?åOAuyuyu9”¯+_W¾ÎV­:[¥«KW—®†}ÅûŠ÷CɃ’%àqôqôqÔµå?¦kÓµ6¾jvø-=‘‚þ‚þ/ªD¶‡¶‡2û+Z‡|§uh’g{&üþ ¿È±ËÇ.»,Ò7Ú7Ú7*â_ï_ï_/2üpøáðC‘å±å±å1‘ðûðûð{‘U«V ˆÄãñx<.ΈzF=£6¾Öáðgô@ÑÒ¢¥æ3x;ùvÒuìÓjJM:¨ªƒÎJ‡¶ mÚ›Ú7µoj‡##GFŽŒÀõÀõÀõT\¬¸XqB‡B‡B‡ Ðh ´ÂXÃXÃXƒë%Œ×Ækw›±ù-=ýýêLWL»jÁüÉh3ÚûiÇÓŽ§à‹ú¢¾(Dº#ÝW‘‡[Â-á8Úx´ñh£ãß8»qvã,tÖtÖtÖ8~c¯^ª—ºI–ßÒóÑ3j“sÉ9§Æ®®¼ºòêJ«ýyïBeoeoe/¬ˆ­ˆ­ˆAäMäMä UP† C…!hškškšƒT0L]:jôY}öã5öñSÙ¯÷è=ÎaŠã•ñJ˜©™©™©ÉÁÉÁÉA˜Ú5µkj¤šRM©&HII™37fn€Ú 6¨ .A¯ÐÑQ®Æû©Sù?}Œl;`Èt5k$Ib]<ÎU„jVͪT—êR].ÿg*Gå›h À<òá‘Ì:¬Qw[Æ-GÇàÉÁ#ƒG Z­ŒV:|fÍ<šóýçûÏ÷Cìxìxì8Lš<4y.\ºpéÂ%ì ì ì‚àh0Œ£¢=cÁ±`߯x]·öò;µn¾›òÝæM›7‰È%×Z׿œ9%yýÕë‹®/WÍÊšõ5ëEW<®x\!òäÌ“3OΈ4Õ7Õ7Õ‹„'Âá ‘æñæñæq‘3f̈tWuWuW‰www‰øGüþqED—D—H2ÅïZËGoD߈¦Û(¾›EwŠî¨ßþöô·§Y­Ê·Z!bG¬ˆ¥gKÏ–ž…þp¸? ÝóÝóÝó°Á¿Á¿ÁïÔùVùVùVÁÕŽ«W;[Y[Y[ì;¾¯u_kÏþôŸï§dJ@ëX¼hñ"û'˜ÍÆœcom1W›«€ÚHm¤6í]í]í]¨MÔ&jÁ;àð@CICICIê°çõAèDèDèXyVž•Þ¥Þ¥Þ¥0z{ôöèí,a[Òc&9ûËì/ õ¸Eì^»×õ“(³ÑlÔK)%’'2‘±EÅTLÅDÜîNw§H¢?2?2?‰Õ‰Ê„sš·Í³°Ó|þ”gŽá™òLÅsa̳œ9¶ßöóÜY;½Ëñáµ[íV»³öÌ µB­NsšÓYùŸ$¬`…Êæ˜Ã|¦m±9É7ëM=Sßä™ü°äœäØwhß!×µpÁó_á¸ç¸Çä…:€sœchsÚ€^¡WõP=À¬Øœ7óÍzSÏÔ7y&?ìGþûn›òaÂþ@„z éz'€á5¼„ŒJWé(í6¡M€ªT‡Õá芡ÊÕAu´?´GÚ#0 µAm@Ñd4bQ ?°é›¼(_ì†6þ®q×øÜ'0¬ëÀ_G”FÀOœä¤e„‹\ä"¨:U§ê7nܶù߸ÉMà;®pÀ8aœ`Lý/Êû‰»ú;Ôž®=mªÛx«j£@ ÛØþÏ6>Ûøl#\ÚqiÇ¥ðÒûÒûÒkùñŒxF<Ðt¯é^Ó=°­h@MªI Úkíµå‡ýDŒýùܘ½1-¯Vj µ4G†¼CÞ!/¤¿K—þvîÞ¹{çnØž¿={> W W W@NYNYNùŠ|E>ȚɚɚююÑ›Áï5·æ6õUµÅûqЬìZÙõÅW"9y9y‘÷+Žk*×Q㨑xs¤ßÕïêw‰¤®K]—ºN¤ï~ßý¾û"Ig“Î&9:utêè”Èdædæd¦Hb 1ÉNÈNÈNI~šü4ù©DÇ€óó©ï¸fñÃ~œ"1Å1Å|&{;öv´nÆù¹³ÔYj –––‹Ì™?2D¤ ¾ ¾ ^d0m0m0MıƱƱFdõìêÙÕ³"»ü»ü»ü"­ƒ­ƒ­ƒ"[·UdSã¦ÆM"y§òNåq7»›ÝÍ"[ƒ[ƒ[ƒ"qqq"µÃµÃµÃ")=)=)="cÍcÍcÍ–™¸pÙxQ~ÄÏR{Œͧù¬=6×0×0×EÙEÙEÙàiñ´xZ ¡»¡»¡ÛÚ;å½å½å½àò»ü.?TUVUVU‚æ×üšßvZ«ô=fé=¶ô©4£ŸëT___À„1aL ÚT›j³xú¢¾¨/ÂtÖtÖtF†‘a34Â"‹([ãýØ©ü@ FûØã |I5Õ ¾Q¥ªÔvºJT‰*õJ½R¯@e¨ e3¢>UI* È¡Ž:ã¼qžKÿ£}ìŸHgÖô.½ Àh0ÑH;í(Õùô<¢Ÿ~ÛŠÜÀ‡TêT€'áYÜ1­kZ×´.Ç*Y•UYý᯴”–ÒR`ÊÍšH&™d®É:kâçy<ÏÇó'××'ãIÄWKµT+z“ýY‹ä.¹KîòŽû„}Â>ˆ%3”Ê áÊ–û[îo¹”?*Tþ(+(+(+0tîççy<ÏÇóóz/ÇCâºd}ÞgâSñ©ø4¸”whNõœê9ÕêþS7OÝ{9>²¾&ˆâ@ðoÒ~‡Ø›ìMö&Å©ûˆíf»VÚ•Qe`Amƒ¶@T[¤-‚!®à ¨Õƒ¢jŽš° ²LY(íž À>ÒVj+æaö&»ÛîVœ¼>ÇÃñ‘é¡é¡éá–óÖkƒµÍ< <<ÆXXþ`¹9QuÜ|ÜÌvëMÂGl(3'3'3M#ŽLjCT`Ã=ÜŽ6F ô~è}(Ê*ÊGš#-èðÈðXîZîS{„˜€éöévá¸ÝvîÞ¹{F½Ç`ç`'Àñp|h󿣛n>j|™ÚuG݆¸éò—?€Ëf,KPöVÙ[ICMWÓàٗϾ€ÐêÐêDÿ¶¶mmPøSáOF~µ_mPŒúÇ'ƯÔ"S‰©ÄT¢ß±4ª__'¢ßpÓºÕëVõÝé»CD´¾e} ÑØÏc?'­Žnê&"2ï3ï#"²ôXzˆˆºëºëˆˆüÃþa"¢3žùˆÒãQgÙ<6Ϩoê4uš:õ+Ï÷+«\ÕºªuU+ú&„ aBpçq »° »„ÕåêòÄΔ–”–@ñ‚âIݨnö.{7Ñžw+ïì—÷Ë \ÿAÝ¡îX[ËÖ‚ñÓ3 fÌDÇG¢StŠÎØ`ÜÐÔVÛVÛV›@tu±º”•/“ã¢ã";Љ€¢ßE¿KÔ/û/ûÀ\o® ÜwÂgS$E2ê]k¹Ör­Eÿ(ä yB^l¤Ò i…»‘ß2Û\Û\Û\u^`k`k`«±>XqìXìXB}¶QÛ¨€ý™ýYÐEÑĽзkÞ®€‚Ö‚V‘¸ùM­Gë<ÄCLFÑ"ãÎqç¸5ý²¤,)ëó1Ê(É(É(!’¯Ë×åëž}á—ÙËìej/§¹¢_E¿Â$|üÛKß(}Šú‹úñ ò|ðù dÔfÔ7ßü=À7³öylm,aÔÕ·«oWßÖ":À©FªùWÅ”n¢d™sÜ”gÊ3åOóW½«ÞUÏŠyBeæT?¯Ë¿.¾šs5ç—€N° `òìé³§ ¸.¸P«’E:žvŒuŒáMý mÅÆ ‡0K˜%Ìúý©€Ò?õûµ]Ø.lßpRðÁù¢ýÉç÷ù}~£ŸjZgôÀ$& þ``F¿V¬ÝÐnTð x<€-Ý–nKWöè<$’¹ì:4'9É)[ ¬…TH…ò!ò’—¼DÒ4$ í¿¨?­'­ÍÖfÅø8p3p3‘»ŠKq%Œ .àŸò@y° uRMø”mÿØæßæWëôh\—Ç}‡³÷fïÍÞK$ÚE»hÎÅÑUq˜¿Šÿ­ú¤>©O¸4ÿÀüó™ªMÕ¦jßa»…öB{a"w5—æÂ$|ðÁ`£M¸Õ Õ…êB£·­+[W¶®dÅú[n1YL–‰)ÝšNI"t§Œž„õ›dÝš>ÅÝÀ¹r×¢X‹H{¬=Ö\ìE/zŸ¹×Ükîe[tNfˆbÆ;S¨x<_½Ü µ¦pwË«¸«ø¿â7˜û<ûyöól`IhIhIH] s±Sê”:ÿ²†S-N½T€3èbà ^ÄÝk‹µE±<OÀ£_ªGêºäºäºd¬ù¤|R>ÙÿIb¾•R7n§é¯˜*<à8w/¼ˆ»E›Š6m2¸ë[ã[ã[ƒ³S~¦OB¨*…Ê îä2âhJ]þKyw×KR£ÔÌç€+**ØŸs£¹ÑܨrWõ4$ ¹æP;µS;Å׎H©—Fÿ£¤r÷p²^ô@Ø)ìvTJ¥Tª-g‹³ÅÙ€@ tõ[ıEˆ¤©Gêþ¬H™ÜÿM,ú%TB%òd÷ÇU"™È¡[èºÿýÛ)ûï|)“éOÉûÊQÿV›§wÖ•‘NIEND®B`‚routino-3.2/web/www/routino/icons/limit-15.7.png 644 233 144 3000 13061246472 14652 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܵIDATHÇÍ–oLTWÆßppš2 8«,ÆÚHv±ýÐ5•?¥Æ"Z¢¥DˆJC6¤én–´ÝiºÆØt‹ K%uB$KLdJv©:Zh¶iĘ騑5ÕQmäÖ•aî½ç·fîÌØ~Ùž/7ïyß÷yž{ϹÏ9""’ Øóíùö¬XloJÎ/mùk¿9‹» °ÕØjþÝÏv=Ûàö¹}æÕdlå­úÔ~‘$~*Ÿ5/Ù’œÈÌ´•ÆãO`{Ñö¢å¹±øoÀ9ì~¤Ã»§ß= ðeï—½´@h"4ðSéO¥Œ­¼Uoõ[x©øòÉ/øE`ÙȲÛ,d82"ðܫϽZð^¬àzT¿^ý:Ài?¦);aÀ…K•Ö˜O‰­|¼Þê·ð,|‹ÏâéÈÙœ³Y¼o{ßv‹5\íƒÖ¼Ö<‹/: ìg?.Ð5]0êz" .¨ ذA2¶òV½ÕoáYøŸÅÓ#O®íçhoEߊ&›¿Ú¢6P×é°2Êø£Ñb´€±ÞXg¬£Éh2š€¿ð%¾ êŸjA-  û’gÉCÔØõE} ?ˆá«¯ßl{³ÍøyEr)5‘ç;Áùƒó-®U\«ã:[Õ)ýgýgþ›`ºÈcÀsÌ‘¢…âÿª@$ð¶Bp<8àÔœš–ö|gºdŠˆ¼_,Òp¬áX¦Î×kÇÖŽ©â´ ûå‹ ßÖ~[+¬Xõ̪gDV®^=,rªðTá©B‘¹sç6Š8pà@dGÕŽªU"YYY"7÷ÝÜwsŸˆ¿ÒÿŠÿW·«ÎU'Îe{m—l—Ä_R]=U=¥Š fšzšz2uÕÞ%]òþ7‚_DäÒŸ9ÚÿYÿg‰·Ú=˜Óïï÷IÿSzsz3 Í Í Í€~\?®‡œÖœÖœVðNz'½“Pß[ß[ß ww`20)"iZ…Vqù»¸u_„æöævà €ù;0;ÌXØ´P·P‡Z<·8º8š\šÈãÈãÈcÛÃö°Ô uCÝåS>åƒûÛîo»¿ h£6xXòðŇ/ÂbþâË‹/£ÀÜiîÎÆùÌæ½Í{-?ë¾(–o€3ä ié4‚F‚+šé5½ISûÕÇêcPGÕQu4eóv©.Õla )›š¥'Ž,h3®מð±8ŸÅÓókç×kÓjÓ’ÎO®Ôƒ@»1kÌ&Ÿ?°‡= Î©³ê,07ÞG1!ê?꺺ñúã㢴¥Fi ~‚ï—Îÿôž•Oíí⩽=7Øÿ=à׺SIEND®B`‚routino-3.2/web/www/routino/icons/limit-136.png 644 233 144 2717 13061246470 14605 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü„IDATHÇÍ–]h”WÆÿ3IšI'fœx±Ón°eh(´iŠºl>Дƒ-ÕÔF±ˆ"©ÕwÅBŠÔêéf/J©‚%EL14¤zaR‰‰ ÚHiÓUÇ8‹#ºÙHHÆÍ;ï9¿½˜œyÇv÷Þs3ü?Îó<çœ9Ï{DDdáü¯€ûE÷‹n_*vosòžjOõË'Sq« ®÷\ïýü)ä7ç7|]ðµúÕ‰MÝôgÎqð3ùL^Š“ÈíÈípUÍÇØðÚ†×<…©øïàíòvÍ$á£îº:Û:ÛØ ÷†î LVMV›ºé7ó ^&¾D~Ã/9§sN»bû\îs"P. ¿ô·TCô%XóΚwâYñ,íû?@yº HÀŒ‰ŒØÔçûÍ|ƒgð ŸáOé¬ ¬š5½ÇS~=¿ðñ †Ïê>çsò ™H&ìMö&ž€Ð¸p›ºé7ó žÁ7|†?¥Gž>Û¦¿@­§ÖLXAå«|P+¬o¬o°ô§º]·£dõou_݇äíäíämPƒj@ ¤w½YÑGÐÉ+s¡¹–RÖëAzÁ™}ßzß´á—LAÅ_¢¼w½wÙpCÝPiÜ·í1«Ü*ç‘>¥Ñ¿8„ìe/{~úéÏÈŸãç@—é2],Æ?£þÚ¨6òˆ†>ÜôÝôsÞ;Þ;‰l£g^Xë ì8°ã@zÞÐç­ï­ï…ˆ D`Ì?æË ÍÍͦ¶¦¶¦6¸zèê¡«‡œz´,Z-ƒ¦oSõ‘õ#{Fö8;®‡S|ÌîØ·cŸ9ÚÖÁya?îc¸½·½hÐu &Õ$O:wäuäAV"+‘•€®Ò®Ò®R˜<8ypò ø®ø®ø®Àzïzïz/‹‚EA8³úÌê3«¡º¦º¦ºªëªëªë âAE¼"ÿê[3¶†'óòêô¡“{Nî1Â~ÜçñõûúKÿ$3+–¯X."qÇCŒ˜äÊ}™’)‘ÂáÂáÂa½EoÑ[Dì°¶Ã"‡=‡=‡="µ}µ}µ}"¡¼P^(O¤gkÏÖž­"ÑÖhk´UdÑÌ¢™E3"•žÊ…• E?-ž]<+¹©?”븫w¥Z©DÒz àù‚çÕ(Lܸë\{;œ,I–8G.‡‹á˜ç˜ç˜ÇÉOULULUÀZ÷Z÷Z7”ô•ô•ôÁîu»×í^K›—6/m†£-G[޶@p(8‚süÁûƒ×áS«Ç_Œ·ˆêQ=®QÑÉw“ïŠÉ‘;r'‹ÕbµX-"þþþ"½Kz—ô.©ÜV¹­r›H·êVÝJÄËËK$6›ŽM‹F‘í Û¶7ˆ^(,‰ÿ#^¯wø(™ûlî3£Ç-’¨JT]÷ùþóý¦åU£sdÎd|×}×}×EfógógóEVÅVÅVÅD vì,Ø)â‹ú¢¾¨HpYpYp™È©‡§žz(¨ ÔêD”/(_P.RúÏÒ‘Ò‘M¹Ä?ˆ|>ÌšºØy±S$­çÿÝJN'Û“íέœ®œ^>½_{|íñ5ç(­)_¿4~iüØ»ì]ö.§n_¶/Û—a¢j¢l¢ Ô+ê-õì/ì/€›ó|iþ§neñ—à½ç½—Ȇö Ûñ1P›Õf1ËÓ#›l²Aï×ûõþ C­×õºtDGtôŸõ›úÍŒú’Ÿ$?á+Ò>ºžxcÞØï|ì8¿eœß³Ç€B»ÑnÄâíd8?‡‰}VŸÕg¯h¥5c'a­/Ø!;„E»Ý`7d8¿]›]›mvê)çf¿•Ïìëâ™}=›/ØÿWŒÉJ„Þò°IEND®B`‚routino-3.2/web/www/routino/icons/limit-7.0.png 644 233 144 2436 13061246471 14577 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÓIDATHÇÍ–]H”YÇÇLE× ²+%hƒ¬íá4„Œ2(Ò$‰è¢)º…ü‚µ‹Àº1­ðJIl½°² ¡v/L—Œ–Ôem‡¥üHÄÙ1µ±tœ÷¼ç·3ÇwLZØ;ÏÍ;ÿçœçÿÿÏsÎyÞW@DDR#OW†+ÕÆ®sN<á@Âïãz1Å1ÅTÁª[«n¬n\Ýh8ØÌ›õÑù"´ž‰Kª8øÖøÖ˜ü¾ ǶÛšÆ5ÝØ–ØöÙ‚óÏ?xx÷á]Ja¬g¬`22læÍz“oø¢ùåêWú"××3ñ+ãWŠÀºýëö¯ÿ1¼àïõPx¨ðÀ‡Ø±Úê ™d`†? ›ùÈz“oø ¿Ñ3úa?kö¬Ù#GŽ9žØNh†ÊôÊt£j®qd°V@T' ‚îÖÝÄ6óf½É7|†ßèý°Y¼·7ö8:Z0ôBwYÕV5(×ü¹ùs„Ôiu]]G+—e[6èú¾¾Ï’¡su¶ÎkD%©$´¾hõ[ý„@}RŸ€/a~(‰/‰7oì‹ÚJ‘ÌZHK ¬¯òªþƒ`Ÿ¶O‡i"#Hð+óÈ#È!‡œ¨xe”…êz°ÀwyïïpôÃ~"Æêƒ W.\]`g¾÷î÷Eï‹Ðu¯êºëº¡ñLã™Æ3Ðü¶ùmó[x÷èÝ£w–VÌÛïí÷öÃí¸Ûq·ã`00èô;Õƒ¡þP¿v–Ñ7~"ÆÞT@ËtË4عú¬©GwN÷öîí›—›—›{ý{ý{ý Ò ðløÙð³aÇÐxÉxÉx dµeµeµÁ¶ÎmÛ:acpcpc&;&['[z뿌^XßøHyžò\·Â˜{̽è”ôèPÓjJM9Ñ;Oï<½ó<5žOÍÒJ5v5v5vÁβe;Ëœxv_v_v4½jzÙôÒ‰«ŸÌ/£öã‰-Œ-䑸ö¸v ˆˆÈ„l’ÃrX$vUljlªˆ¿Î_篩ϨϨϩpW¸+ܲd¨Íj³Ú,’ü:ùuòk'ž2’2’2"2kÏ2KTÂï=£ñ㱟ØObþ±Š¬"I‘5v¦½Â^áäß;qïĽ"i i i "›ò7åoÊ z‚ž Gäã–[>nIïKïKïñÍøf|3"£»Fwîr¹‡Ü"™×3«3«Þ˜„°Þ‚¾ñóõc.¼çê×ùSó§œûVä+òù ¶©¶©¶ÉÙ _¯¯×× ;.︼ã2LïžÞ=½<<< ©4©4©*U¥ªTÑ›®ÚU;An}óŒ-¾•X‘[òÆê²ºœ7Õ3Õ9Õ sésésé½=oÏÛó0Q?Q?Qº@èÐźXÃÄÀÄÀÄØãö°= „Íi”5eM¡ÿ¼•ÿ£Uq‰KQ:û(@ò·Éßê=6ÇÍúéóE,þézf^戕H¨M¨µ­žÂ{àÃŒ3_4ðþpœsœBiCi@ýwõß±†Û†Û®~¸,lŽ›õæ|“o:¿ìù¾Ìø~Æ÷¶~HˆOˆw®;×ó¥QÐëwßy÷€»qwã”b£€ —Z „aÆ_Ó°9>UoÎ7ùL~SÏÔ7ü¤f§f‹Àº ë68Nzj`Ç M=í°—½¸ Іb…±B ZT 6l`asܬ7ç›|&¿©gê~¬­œ9à…‚[·@ÿ @ Fûµ—µ—AŸŒÎŠÎB›rªLËú[ú*}¨JU©*±â>à ?EJÿCÓÆÐ¢ýÚBm!è÷ ~(¸[pxbê›[Ù,"²ä08BŽPè¹¼öj¥ZÉUìcO<ñ ;u§îuJR§¦a„ ª° «0°‡½ìPÙ*› ŒÈWÚ”Þ”>— ?°ˆÈ±Vf—m,Ûøt^ëN¸^q½<´ÿÐ~T÷OÝ?tÿÀ3Ñr¤åH˸r;åvŠ•×[õV½ÕÂÝ3ºíÝöi|ÍK:—Xzªµ,µ,~$Ö!"ÒQç¿:ÿ´Ñ·¼o¹Úäsø~Â9åÜɹé#é#é#Ðåëòuù q¼q¼qâvÅíŠÛgòÎäÉ{Öx{¬=ÖWÄqEÀ»Øû’÷%p¯M{”öˆðõ VýY¥6ACIC è)†»Ìrœ×3E¼½EÞìÙÖ³Ív¢üØöËÛ/KBsjszsºˆë´ë´ë´ÈµÈµÈµˆˆÓít;Ý"sÌ]0wˆZ«ÖªµòL ôôôŠ”W—W—W‹\ê»4|iXÄ97)3)Sº> úƒ~Û ‘¼@^@„ÈÌ_gþúz¦ %'&'ê7Téhþh¾uìÛ²‚ž 2–f,ÍX %Ñ’hI´“ÚIí¤µ"Þ³Þ³Þ³ØØØiåµ­F«±p[V[V[Öt¾â¡â!P›mæ¾ï¾Ø4§|N¹~îGs¢9¶¶@ü«ñ¯Št}ÞSÑS!©Þ¯½ï{ß)Z^´¬h™ˆ«««ˆñg·VDeªL•)b«³ÕÙê¬üè“Ñ'£OD:j:j:jDr³s³s³EŠRŠ’‹’Eü_ø×ø×ˆèÕ""’*¢=҉ȗʭܶvµoüÂø…Ϋ"WZ¯´Š‹º^éz…Oc¢õj½©_YÿFý"i i i "îFw£Û2¸%qKâG±£ØQ,¢<Ê£<"… /^iºÙt³é¦ˆ¸Å-n‘º²ºOê>I«Ÿï›ï“H㢟~àS‘ξÎ>‘XKh[h[çUaÿÔ©dóöÍÛáïZã”Ü[3´bh ûûQC¡£CGa2k2k2ËÚ¢ÇíÛ·Cxwxwx7pœã‡ë¬°&æMÌ›˜÷.ßkº×ƒuƒ¿ þ‚ª¾sðÎA˜ÜdèÁfm³|æQ&øßâ_|ù–ž©oö±Ýê¼ì((-(Uctfu5抹@ÕFÇ¢ch|Ãühu~f“DàÇЈV!> ’J”:Õ¢šºsÆœ?þ‚ª‚*xªo]âÏí]ùܾ.žÛ÷Øóù‚ý6<æóDlIEND®B`‚routino-3.2/web/www/routino/icons/limit-32.4.png 644 233 144 3036 13061246473 14660 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÓIDATHÇÍ–ýOTWÇŸ•±®˜1a(»¼4DC¢Hc¢Å0YܦØÚ*´ŒkÛ´Pl¬1u¶¶éFËŠ›ø*M£IвKAHIÄ(¨¥I¡¬ˆHÉ,ef˜¹÷|ö‡™ËeÝÀç—›çíû}î=÷|Ï‘ÈàSÀc±. øÖwÌxØ‹a/Æÿ#àŸÒÀ²Í²íΧ`ûÂöÀ²òeåú]Ó7òFýü~>Ÿ—H1¡5¡5gÐÿ ÞH~#9lEÀ?Ö áõáõS~x·áÝ€º¯ë¾æ}pïþ`Ì9æÓ7òF½ÑoàÍÇ—ÏžàEM‹š,"±›c7Çí ôÅÁÖ-[·•¤j… Çð![²6ø¥|("’tÂ'Ã''r¨÷fïMà™ Ö©uLs•Z@Ù”MÙ€Zj©7HEšU³j–ÿ·$’Hõ“6¥M1Œf2Õ{¹÷2Ìñ˜Gø—ˆÈ©ë,Í3ÿME_swswcw#?y¼äx ªýa{_{ŸÉÓ5Þ5Þ5%K–„îæîæîf3¯ºT—ꕪRUª¿_p¿è~ªÅqÅvÅfò)_þüX¹S×E¯éøêÕ‚Q¿=úí‘zûw³%Øðf}›u>ë<$z½‰^(M+M+Mƒ•GW]yœÕÎjg5ÄfÅfÅfAgjgjç¼Aô*½J¯•¡2T$¼“—ÕΗœ/á ¾ÆÛúºª„ª '0ÕRýÌŠgV¬]/’þeú—"šc"g"Çr¦H?wø9 ͹‘ÓžÓ.ãŠqŸDú’ú’ú’DöµîkÝ×*r5÷jîÕ\‘{„=Â.r»ívÛí6™3K˜%Ì&âÊså¹òD¼aÞeÞe"ËK£¾‹úNBƒUgX½éƒMˆÈª¥×–^[»^‰œœÕ{ø|Ä5â2·ýf&ü¶7moÚÞÑ-Ñ-Ñ-p§îNÝ:èìèìèì€UîUîUnØåßåßåŠ?ÅŸb~±ŠúŠúŠz°Ù‡ìC°³pgáÎBˆ?w î lüfðF`ü•ñW@Ø\6—Þ#ÚŸ"B"BT xÓ½éPµ­fGÍXûç5‰kM‚•+7VÂÞÝ{wïÝ Ž S¦6Lm€™Õ3«gVÃcûcûc;T$W$W$CæÅÌ‹™!Ù‘ ‹þ°`hÁ|[s¹érÀÄóσ¾"¢'¢GÕˆ*3þ±ó£çGaâJ`ÍŸoJÙ”‚wñW‹O.> {ö ì€c·ŽÝ:v B›C›C›!µ?µ?µ–[—[—[¡¬°¬°¬Òï¥ßK¿îwƒ»Á|Áò²òÒòRØúÕ–´-iæ?¦9wâÜ C×:> êØ©ëüXUeîÿzϘg †ÿ>üÑðG(ý´~Z? ž#ž#ž#0ìv ;`ðÂà…Á àŽtGº#aúÒô¥éK0–?–?–šU³jVPYêeõ2Ìü~æ…™Pÿîéé:|hŸ| w%ןбESÏéØëêu¦ÕÕ«êU žxâÿGH=ÌÖ'm–YfQF¦”]Ù™Fñ}AÝ4ø•¡c†ò{ åÍ^˜½8PfÕäòš¦iøø+µÔ¢Ô?U¥ªõƒjSm U£jþÂ~öƒÒ”Gy€þ9åO‡´Ú bNùC²CÀäŸ;ÄŸÚ³ò©½]<µ÷±§óû_A$ªîE¯üIEND®B`‚routino-3.2/web/www/routino/icons/limit-17.7.png 644 233 144 2647 13061246472 14674 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü\IDATHÇÍVmHTY~æŽ_£¥ŠF຤fk"ánÐøQÐj™•n(ìÁFA´µ´DÖ‰6œ©¨‰ÑL–ZQSØŠ²¨²°ÍÂiÓ.¶£sÏ=Ïþ˜¹3SÁþÙ??—ç¼Ïû<ï½/÷=$`Nè R™¯ÌW’ƒXù.²ŸP‘Pñ…+ˆO ÒTeªzh#SN¦œ$ÉTgªS÷D°7øÑù@D?ÚÏØÇD6âÛâÛLÖ>DÖ,®YœÄÍý¤¥ÝÒ>¥‘;;vv䕳WÎò{Ò;ä"É·Ö·V2‚¸Á7ò ½h}úÈ c¯Æ^5='ããâãrAù‚ò¬]AÂÓ,rÝÚukIò•ù•Y*$IŠq’³8KZIªTi,_6â!¾‘oèú†Ÿá¬dÚª´UY¹¹r³ÅLðœ'÷dîÉ4üí$ðg‘šª©$)¶Š­œ&e¿ì'Išh"#؈|#ßÐ3ô ?Ã?X>ìíñ2ªá‚õe3þ?)ûD–Èb€³YÄ"JmJ›Ð&H±]lÛH¡E(¤tJ‡t„¿ e§—ã”B™É˜É`@l8NRû;¨/o¬·­·/‹´R€œÒòØòX!Ÿ”=)#ÅS’äÙ®½×Þó}ØI¥>þ%³dVXo 9282H’Õ¢ª1ÁÂrZÌ?ý?ïê-õ–¯[ycÇùçåR¥LÖ›‹n.BLlAlvl6LS_MNgÎ$œI<­žVO+àÎqç¸s€¤Š¤Š¤ `nÃ܆¹ Àèðèðè0àúÓõÔõðØ<‰žDĸ=Hy‚­³¾Yzé}¹4õÕ®Úþ’M·Ü~»àî´_#)Bü4±Wìe€MÂ*¬Qúa¿'ÿç{V~¶·‹Ïö>öyÞ`ÿ–váðÔIEND®B`‚routino-3.2/web/www/routino/icons/limit-2.3.png 644 233 144 2516 13061246471 14574 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–_H”YÆã˜3¤¦Õ’T&äÍv!èDlt“ÃXæ a%ÖR-EKm-ÑB!HÖ4)è"+cÙ"Í2¶v)a¥-WfÝÊÛiû'³˜Ó83ÎÌw¾óÛ‹™ã7nÛ½çfæyÏû>ÏÃùó~G€BˆÜä¯[­À–“À¶VÜQá¨(ú1ÏJH[—¶îɘuzÖi€¼ yÌ! ëyŸZ/„ÅŸª§ã"WXÌŽÌŽ4w×Cmqm±ã³þþ8¯;¯‡ ØÙ½³ «½«oÀßçïxï~ï ëy¯ë5_*¿¨ÿ¾q+ãVÚ Èœ‘9C(\U¸jñîDÂ_‹amÕÚ*€7éoÒ• ä[ ‹,å‚Ñc,ëùd¾®×|š_ëiý„sËæ– Õ›ª79Ï' †~€ý ÷/ÔzñëÀqŽ“FÐÈÍr3QP÷Ô=ÒH ëy¯ë5Ÿæ×zZ?áGLÝÛ¦rTÍŒš@ þä ùÌçÆJc%qã…tHÊœ0?˜°FpÊÊaFóÆß2Sf¢Ì? —á"ò¥| Ä’üZOë[[)„Ÿ·‚Óïô턇ƒÃ–À—**ke-aêé¢+ÅH 4€ © ¥Äp€@/½ô¦Ä[衘+÷É}„5?‘áñáq˜ÔOúI;ûì:ºë(ðÀ,!-Š[‚êqÆ#õHAKsKsK3<¾ûøîã»)+Ômv›Ý***‡¦ö¦ö¦vðú¼O½O->õ6î‹ûRô´~ÒOÒ˜÷[¸¸³@}$ˆ>”ƒƒËŠeÅ ¼¨¼¨¼ 7n(ÜÞÃÞÃÞÖ¡gîgîgn˜Ý8»qv#Ô.¨]P»æ«ùj¾‚þüþœþœÉô¨yDë%ôµ›9½9½¥_Qæ)ó!Ž!DÚùäNg¾æµãµCˆ½­{[÷¶ Ñãëñõø„˜9o漙󄨨¨“#^¯ˆWÑ`o°7؅ظfãšk„È?•*ÿ”1³Çì“é™âw­—Ô×~ /;/Û| c#c#úÐ3¦êÌJ³ÒZ‰¾å}Ëû–C±«ØUì‚mÆ6c›ªRUª”<=Æ#ã‘ñ¬¿³þÎú;P°½`{Ávðæzs½¹)Gà¦n3Iý¤9½9½ªüKýKÁüiªÀÀù¶6pv9»œ]Ðèiô4z ´"´"´Â;Â;Â; p,p,p .5_j¾Ô ®%®%®%OiIiIi \üùâí‹·­¸üJÿKèk?1éžzÆÎüsæù™ç‰¶—q –]]vuÙU˜c›c›cƒsuçêÎÕgÂ3á™ß"ß"ß"X}põÁÕ!»:»:»¶ nÜ2‘Ë‘¶H€º¢®¥ôÿÏØÇ·òW}KdDF òGd42Š]3êuÃȵ‘k#×ÀŸëÏõçBø~ø~ø>¼‹¾‹¾‹‚ ¨€ €Ñit0zcôÆè gäIyÒº•<1úŒ¾É ýÔ­Léc Ëaiõ10·š['û@”h Š!’‚íØ±ƒ:¤©CVXyÔµ(’õ²>¥M ‡†CŸìc)ߨI¯I×tñì–¥²T‡Ì–ÙÄU¿ ¨JÝTªøŽýìS1Æ“_€“œà¨_Ô+õ E›TR9(#ÉO£Æ¡WjJ矶ßÊiûº˜¶ï±éù‚ý‘æZÓæð\!IEND®B`‚routino-3.2/web/www/routino/icons/limit-4.4.png 644 233 144 2341 13061246471 14573 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü–IDATHÇÍ–_HÔYÇÏü\‘þê¸ Q$ìäÞʽ5›„ã·ßh‹·Åi€‘î‘n€‰Š‰ ð|3nð&ßÔˬ/gÿÃ/ÙÙ¾AðçøsD`î »6þ¼ÚU{ªö g gi Ô(°œåº˜fcc¾wñ&ßÔ3õ ŸáOé((/(êºêºÜ+©„g¿Á©u§Ö>ûpŽs,‡ätr@V‡I€¾¯ïàÞoÆ Þä›z¦¾á3ü)=²xm/†¡6PH úƒ÷ꮺ à´9mØ:¤kt Ú)q6;›ñl†f€÷L1å…=¼Ýl7cƒpÀŒ[ŸZ­ß¼ÎXJ‘Я;’;2ý¼P/0Ànp.8ø@ˆZjAÿ¥éG‚f™e˜gÞÍIYˆ¡Oá}Î>>¸Þî4_š?¥ÇÖò¢g¢gÀÙ*_åƒþVGtm꾌¾Œ¾ŒB×Ú®µ]k3—±Œe Ku©.õÂø`WЛH=f¿¶_ †Ïåwõ¸Âþ< צ®M þžº¤´Ið7y :¬Ã: ›ê7Õoª‡ðÍðÍðMO€jP ª¸Ç=î}ïä/t,t`Ðå3ü®KdeçÊÎ’2‘òå;E¤MDÄwE¶eíÏÚ/~ùFJ¤D¤±º±º±Z$H‘`K°%Ø"iÓ}ºO÷‰H¥TJ¥Hã¡ÆC‡2ðMÁ¦`“‡ç;ë˜uLüRäò~£òVä­púaìíØ[P½éc@¼<^/‡Âw…ï ßÁ‘GN9ÅMÅMÅM0P6P6PæÍD¬;Öëþ<~ðèàÑÁ£‡ã×â7z,§Ýi÷õ‹$÷&÷Šø~‘ógV´‚"¥ªT•*‘žöžöžv‘¡èPt(*Ò;ß;ß;/2—=—=—-¢ô€ÙþpûÃíEzîôÜé¹#2tièÒÐ%‘§Wž¶>m͘¹†/ÅŸÖóÑ칺ª®’PîÞ13r9v9v"ç#ç#ç½øÖ[wlÝ£9£9£9øÖXk¬ªâUñªxÆž<µ°fa oñûøTΤOeH…@¯Ñ%ºíüãà P ‡õ°†xÛ ¡¿ZT'±A½R¯€ä;ÿ’½+—ìëbɾǖæ ö_~% ¯wÞQIEND®B`‚routino-3.2/web/www/routino/icons/limit-15.4.png 644 233 144 3013 13061246472 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÀIDATHÇÍ–ïOTWÇŸ;cÁÉS-5’*¼(îÆ¤…d»üATãÄ‘Ø4Hi©tb¶1)©kº% 𰼍¨UW&MÐkl‹4´qZc"­f—êP7³¶†íêe„é̽ç³/fîÌØ¿Àûææ{žçù~Ÿ{Î=ßsDDäéÄ[ÀV`+°åı­15¾pËÂ-E}qü¾šKsýó/àìvv,ò.òš?¤°·òÓëERüézÖ¸<-©Ì2?Ò6$ð»P»ºvõ¼8îôã‚ãB8¯_|ý"ÀÇ|üûaòÛÉo~ÙðËHa+nå[õ_:¿¼û}xjè©!-™™"ðl峕…Ž'üX;¶ïØð³ýg»²€1 d‘¥6::ÖJÃV<‘oÕ[|¿¥géÇûÈ­È­{vîqôÄ ~è…æåÍË-½è v² ¦Çtãeãe" |Ê€†)lÅ­|«Þâ³ø-=K?Þ<¾¶ߌ¾+º+šl誹6ªE5PÇcáX+¢ŒÆ~c?«ŒçŒçÀh4Fà(tÀcs ̳¨*6<†ÌÂ8?¸Å-@0¡Ÿ\J]D¤ø=pÜqÜÑÀøæñÍ`ü@•:›Íò()ô5—¹  Lk@¡PixžyæÓp1Ńºe„p’¯Š°ÿ ÿÝ¡ë â¿—˜©÷¿†¦ƒMA]0Ÿ·ø|e¾-¾-¨Àî€+àJé   Á‰Ý'vŸØ gÝgÝgÝ0»tvéìÒTžÙav˜i38Þ4Þ6Þ†º²|Ä9âLf=¯¢ûí;<Š÷c“a‘?~"gËóÊóD´Í""ZÉ`ÞÀðÀ°üºéO›VlZ!Ú¶7:DŒ^£×èñ¸<.Kd¤u¤u¤UÄWí«öU‹„‡ÃÃáaI>Ú2m™¶L„J*©©2«îTÝíoíkÚ×ȯ‰¬ÊÖŸ_^DþïgØrZrZ^xQöUŒUŒ‰!"¢õHÄî´;EÿwqÛâ6G‰£ÔQ*r½üzùõr½QoÔE¤Yš¥Y¤fUͪšU"Kê—Ô/©1ûÌ>³OÄ^o¯·×‹4«fÕ¬D"ßEF#£"ÏÏíËí“LÙ×ãëß\ÿ¦ˆü>guÎê^X”½(ÛƒÐDhŒŠ´_Øxeã•W ßÕïêwÁíû·ïß¾{î=º÷(x½ƒÞAÈ?•*ÿ :6t,µt=Ûz¶õlƒü©ü©ü)¨óÔyê¦ÚÕ;êPgÔu&ÍÆºU·ê¶²•­iþ¥'ލf˜Â*_åó(áyUDýWýWÓ|L=æciÎsÛÝö”ó“óÇüÀ#`R·×x ÔWêKõ%p9a¼áx#jBTø)éüo˜o坯7Æ7Àï’ΟáÎ"¿uþ'÷¬|boOì}ìɼÁþÄÛM¢r§IEND®B`‚routino-3.2/web/www/routino/icons/limit-25.0.png 644 233 144 3126 13061246473 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍVíOTg=ÃÛ€LÊBŒÉÌVX‚T”8©VŠ oÚVeV^$M01P¥šZ]‰V>hÂf›†IÄI¦Á4kê˜NJÄⲉHÓV¢‚Ò‰4°8L %fºÌ½—ßÙ3·Ãºÿ€Ï—›ó{9ç—ûä9Ïÿ‚L²&Y“²b8éx"žþnú»øG _ÕHC½¡~ê"iî5÷’ä럿þùúLëy½~c?àߨ§Ç‘DÀè1z Uq|‰lÞÙ¼3=/†¯Ü#3¼Þ°JžøúÄ×$ùUÿWýü˜ |ø†$_T½¨"XÏëõz¿Î·‘—^ÒÈÔÁÔAÃiL3¦äûÞØWðI¬àii?h?H’Ï’Ÿ%KI’Ú2IMRE2Äõõó¬çãõz¿Î§óëzº~l¹•¹•yøƒÃd¸c 3_ç-ç-ºžâ%ÙÍnšH5¤†HRkÑZ¸FÊ=¹G’4Ð@&°ž×ëõ~Oç×õtýØ<‰­ŒÀ§µd£¯ÑG®O’¤2¦>U,Š…£jU­T IŠvA;§#µbm›¶ÔŽkǵã$ÿÆnvóå%R®QPQ“b"ådŒŸl 5†H>×õõ­ü'Ff„2B¡‰úÆ|c$/‘$ò޼ï°‡=¤<ò`ƒ¤J•*I¡PH®qkò{¹—{Iîa%+IRÞ“÷á¾8ÿŸãzq}NÅæpu”æöÖöVm}×ã#Ç#Ùcë)í)¥L­O)SJBïVέœ[9¤³ÁÙàl ]M®&W¹j]µ®ZÿïÑ÷Ä÷Ä÷„t¦ô†{Ô¹ÕYϬ'¡'+í{Ú÷è[{uÚCxè Î œ!œž-Ÿ-—6Ój†3ÃɵêgÕ¾jY¸P¸P¸@M M M‘ÙÙÙ¤ÝewÙ]dKKK?pÜwb å¢å¢å"r—w—w——,ýWé`é ¹-Tè,tríE7IJéö “òרWŸ«Ï¨j§Ú Èš¬ÉP7^7^7liÛÒ¶¥ ¿­Á›ƒ7oÆûÆûÆûÀdÕäÁɃÀksæds2Œ·g¿<ýåiƒ°ÿhÿû›d“ØÊR’·¦I;öGª#Õ4ºêîÔÝApËžœ 9[²³d¨d¨²TYª,@³£ÙÑì®§_O¿žTØ*l6àl×Ù®³]@¦š©fªÀ¡ÔC©‡RèöèöèvÀ4n7'ÎZÈ2f_—#öˆAÀ˜cÌA.F“³“³Y’$Ÿ©5jaÚàJ+M+&NÍ8fÈ­í¬m¨mŽæÝzt+àÜáÜáÜø/û/û/ù®|W¾ h ´Z€uÒ:i–V—V—Vzè¡°TZ*-•‰¸ÿOþ20ÿÖ¼yÞ ¿yäÍ#È áÀð{™ Ãt’ü=|'|çñ÷À·£ßŽcG'ò'òù¡å©òQïÞÇÞÇÀfËfËf 0lþØü1`   0­˜VL+@­ÆVcìb»»»»@EgEgE'P)‹”E€âÝÅ%Å%@Ãï??üÑJµü—ò_ø!p{áöÔ)ˆ<þ¼?•<Ùq²ƒüÕ;%Kï/¾½ø6éóÏùç(‹õ‹Ñúh}´žT¦•ieš\º±tcé)³2+³¤¸Å-n2x1x1x‘”ý²_ö“R/uRGg‚þ Ÿ²þ“R¤‘ÔbzÔ>êø¨ƒäâ§2v<>Fê¾÷™äI#¿9eŸôI)×äš\Ûà ½Ò+½$kXÚ >ñ1Oñ¹’,É"IÙ$›‘Ö8‡oÞ7O’ÁŒ`(…sºýÏ­þi-Ï7žhúŸ|ÀÄí¶5ÙšlMôjPƒR„HD"À0`7vc7="ÉdH2H7ÁMp·kÈ,™%³Uûûûë*Í)Í)Í!“|(ʇ’ÔEẋˋYLD"™³B‰P"”×íóöyû¼_|‰®DW¢;;jŸ´OÚ'[oZž·îCE…¢BQ‹q›â6Åm"E ¢Q‚ˆ÷‰÷‰÷Ü}÷{÷x÷|·¿%ÿ®xîøn7çÊàKÔ“zROáM’KrInhʆ²¡W¾œÿfþ›ùoB||[}[}[û7 lØ4À8bzczczIš¤HR$)‚ãc| 9,°À`va€UX…U°Øm¶@¤õ¶õ¶õ¶QÇ‘?Dþ)ìŸÞ<½yzsöçòPy¨<ôORg®3×™›RAóhÍy“€€€y‰Z8´ph@ÚÐø ×Ä5qMmÿ´[íV»5d«êÕ+ªWøÄÌ÷2ßË|;ëeö2{™¡ÂJ¬ÄJð4œ†ÓppÄ xÀæ0‡9ˆ@@ Ä@ àññœÉÓäiòİö íÚ/ø7‡¯ _¾ÆÝËÄ2±ìÞ%>ƒÏà3^Þ—ñ2^~ð #ë’uɺ‘R¤)ÿû_–K–K–K![U™ªLU&Ÿ–—“—“—ÃÝðb½X/+…'Âá @Ò£ô(8d#Ù™&Ód ý¤Ÿô/÷Q‡:ÔÂÂÂàœ*§Ê©Vô®è]Ñ‹•nÿª×U¯«^çÓÜñÝRÒRÒRÒ’oï²wÙ».uyþâù‹ç/4lÏØž±=c¤Ëë´×i¯Ó`¨Šª¨ ž$„„vØap×q€VXÈ ƒ  ”RJ—ÁÝ™ , ” ¥B)Àh £Ùô¡éCÓ‡ªP…*г·ÙÛìMŒâq‚8akC#i$<¼Ý‘ìHv$ênu·º›\€b¡Sè:áI2I&ÉpWp˜ÕÏêgõÀ½Æ{÷8E§è@!„%!‘Ì9æsn)œ„¬"«ÈªåøA³A³A³@ÁÖ‚­[ˆ…ˆ…ˆÀšfM³¦-ãùA~ˆ©©©^xö…g_xvù=×Ãõp=€dA² YØ v‚ÀÓ&aÞbÞbÞP…*T‘H† `ØZgÞ`Þ`Þ€!¾/ä Á2RFÊHAшF4’aɰdP„(B!÷.÷.÷.@_£¯Ñ×–#°lÛ¤'¥'¥'@»G»G»P•Q•Q•$…$…$…Úm„Àz¬ÇzP·›ùîùîùn 1*FŨh#=&=&=Æ—ùùùÓº»Õw«ïVXƒ5X+Í¢Y4  ·émzûWß|q žÄ“xþJ£.ÍÍhg´3Z ª¶ª¶ªèÈíÈíÈÒ³Ò³Ò³€´Ð´Ð´P€î¤;éNÝèF7¬ÃéÃéÃé€qÌ8fÃgÒ!étˆ/g‰Ld×pNÃiH‘ÞGï£÷qªLëLëLë 'â ˜ñ6ÞÆÛ¿ª#u¤ Q$ŠDýféP§¬SÖ)ÖÉ:Y'¯Í׿kuë&ÖMv…]aW,c6þ¿yóµækÍׄDb$FbÄÿ'qç—bFyUyUyõÓƒbµX-Vó`:~:~:žÖj µ…Î}®¸žt;ÝN·Ãæ±½o{ßö>`½`½`½° h–™ef0:4:4:ü|üçã?>«û¬î³:@cÐ4à í í  t b b ’Öc­ÇZ –û÷'îO07ÄÇÅÇÅÇ{v8F£ŽÑýrèþ¡û‡îèD':ÿí¤è¡è¡èáuÙœnN7§ ÉK‘¥ÈRdôÕÔúÔúÔzrÕÅCGnŒÜ¹Bkh ­T5ªU `°ØC‹¡ÅÐ8âñŽxzè¡è]z—Þ$Ù’lI6,3ñ3ñ3ñøKóWÍ_5…fI¤GÒ³°yÑoÜ_…(Dõ½ÃªŸQ?£~†í"gÈræÉvÈ!‡ünªè‚è‚è® #›G6l¦]þ—ý/û_&f¿-~[ü¶àß½¶ymóÚ‘O³O³O3ÒhM¢A™¦†©¤ÝØnl7ÒWo ݺ5Ä–{\ò¸äqéÁ‚ý€ý€ýÀOÌú1ëÇ,€©‘±Âçk7¨ÅÕž<Á+îŒß¿3Ø ìö‚Ÿ*¼Þ ï‘sºÝ€Ž-oÉjÉjÉ¢¯’|’Oò!Îg„3 Kwþú„>OxÂÃúÈøÈøÈˆïZ×¶®m]‹ŠIŤb6„ >eʘ2¦ìÁÂâ±'][!uérïV×/‰Ä½©]çn9ZÑŠVç>’HIâ«Û9®\pìuìuìþš-d Ù³1¦,¦,¦ B¿Ð/ôCÎD1QLl|_ÄAr*üTø©pgÄä‹“/N¾ÈJ×J×J×–ÿ‰²”¥ìþB¥P)Tr']+û_î+-----…ÙQ¸,iÈ¥Ý}.ížti·ñ7Úuè:¿×Tmª6UCÎ0 Ã0xâ΄ު·ê­‚åAåƒÊ•ì ô ô ôàOmc¶1ÛØÁÏ· nܸU®yr7 ›o ô)`÷¹ËÁÿ¹´{á7Ú ˜ ˜ àLõšzM½Æ¹ÏUw®èõéõéõÁ?ںںںțò~y¿¼T‚JPýõ:·“ÛÉí´&…%„%„%03®xÿáj­Os±øKNNNNNïêöR1S1yw2z2z2_9ƒœAΠ›¼$L& {ãïS)S)S)> ¦>SŸ©þíÎ×w¾¾óµó¥9ÇœcÎÁˆ6Š6Š6ÒjZM«¿½ $°Ã˜Á fwù#q%Šš‡àìw´[‚´ ÅYL›hmJ60ç™óÌùÿ [H_H_H¢E•¢JQ%ÓÇæ±ylÞ×ÂχŸ?ÿçd£Áh0ÈeÁOðüè—.¿: å÷8ü=¥]×qá,F>ò‘ÏÝ&9$‡äü+œ¶ÐÚòÑ.Y°,XÌô±£ì(;:,Ž G÷Ž÷ïèßÑ¿XD˜ËŸ»°´þÇÿ’³Ú—…ÈBd!$Aø]ø]øýß¹d€ ø3ɯ&¿šüjekZdZdZ$éÝD7Ѭžà ?š¹ì¸IÀEX„E\>M¥©4•þh5ŽG_™ŸZšZšZšßeì1ö{Ôõ:¿ÎÞß­3­3­3q}ÞŠy+æ­ ’I€˜ï0ßa¾`Ù[î[ô-Ï[ìMÚ7û³ø·ðXøsßb¶Ì–ÙÒpM¢I´[&ïÆ»ñnÕgGóFóFóÞp˜®ž®ž®6Å­x¸âኇܸ·Æ[ã­!ke ²Yt8€8tÐA Qˆà g8Cgp1¸\°VS«©ÕÔ²ñ*¯*¯*/÷|ÕóUÏWm;¦pS¸)ÜËMѦhSôòLÃbXLg8÷IKKP‹ZÔºüE(J„’Ú£Þ¨7êßX£\¢\¢\". Û¶;l·o7l7l7 %f`f@d̃y@@ÚÐÀ6°0‚Œð„'<ÒNÚI;D<Ã3<ƒ0h;h;h‹ŽÂ“…' OŠá·:nuÜnK­¤VR«_oˆ!bˆòöV¼·ñö“œU£U£U# yMòšäµôênènèn¼±Fª U†Škc"c"c"…Ûvvv˜a*6›ŠJCi(¸À.É#y$ ]¤‹tä.¹KîXXÐt#ÝÁ´Ó´Ó´°µµÅ ‹}å&å&å&q­Å¿…ÇÂ'ˆ#âˆ8²z¾±ÆXc¬‰œ;=tzèôPæ–––'4b Ö` †éL:“΄-¿ž_ϯ°ë°<€ÕXÕîáî¨F5ªòùü2BF¦2NåTNå°åÀ†ÃŠÃŠÃŠ…üœM9›r61÷áâáâáâH-€€üùHéLéLé¼ýÉþÚýµûk«_Y¿²~%ÝÁ&dÔ´Ì´Ì´ŒMÊSÙSÙScwï&ÞMd¬íƒ¶Ú>`LìûÅþ)=ÚM»i7cÎÎÎŒ5æ6æ6æ2Öõ¨ëQ×£)=Ó5Ó5ÓµÉíhýªúUõ«è …ÝEwÑ}áûgöÏìŸásŸ`Ÿ`Ÿ`’>ô¡Rî&w“» ü²ü—å¿,2NdœÈ8T|TñQÅGÀ7ƒß ~3äYåYåYaR*U•ªJKrI.*µ•ÚJ-pzöéÙ§gU9U9U9·Ž[Ç­›|LêãããããC²-<>ìÚ7´oˆ~ž¿8qþâ©Èèuz^ŸŠ<Ý/Ý/ݱK—/N]ïžÑ=£{cûõûõûõŒÝ‹ºu/бCU‡ªU1V3X3X38¥_—_—_—ÏX¼{¼{¼;cƒÁ‡½,£ ‡Oñ)>%^ÜEî"wq229BŽ#€©ßÔoê¼ÏyŸó>,t\è¸Ðq*s‚¯à+øÒ+Ò+Ò+€tL:&¢nGÝŽº xu{u{u-á-á-á@KzKzK:àÓëÓëÓ H#¤Ò€°V0埋à"¸9ÈAñx'Þ‰wb—† /^@|Äp1\ Ç '…“ÂI0>Oà@Öç¬ÏYŸP'êD€:›:›: º¢º¢ºXì½Ø{±70ç§9?Íù ÀÇø=_ö|Ùó%péÎ¥;—î/B^„¼]]]Ä!q4Ð@fåG›F›F›ðÜZn-·–]BŠSŠSŠ“±7Þ/Þ/Þ~v׿®Í]›©X~1À i–4Kš!â…x!EQE@_¨/ÔÑ}Ñ}Ñ}@ßå¾Ë}—²Š²Š² @þºüuùë¿ßÆo|3}3}3Á6.ܸpãB¢Ž¢Ž¢ª«¯ª¯ª¯â g…³Âù—­ã¥ã¥ã¥'Hâ£ÄG‰4  ¯—äJr%¹?Z¾}1ú☠̠̠LìïïOn>ûêÙWϾã ø¾„l![È@d" T(J`¯´WÚ+Ç#G}Kú–ô-w;îvÜ ¸Š®¢«ÝÏy?çýœ‡ÍçƒÏŸF™BP alãÏøy›1³1ûþNËår¹\¾j¨¡î q4ŽÆEŸ’K乤w¶ÜÙrg {Ó3Ë3Ë3‹\˜¯š¯š¯BógþÌ ¢"*¢01=-hA %”P®®®€«—«—«"D §§§Ãöú¬ë³®Ï•R;©ÔNù•üJ~=H‚„ÜßÉ2XË\Ìcž)`bnRHÉ"Y7cy5¯æÕq%ô0=Ls' K K KÅ]PMdÙ„aêL©3À$LÂ$ã0è@:¶mgÛ'O K/ÚÞ(»Qv£Ì´w e e E8.›&›&›v!Íó˜ç1ÏcǪ‘Œd$“´£íârË,}XÊg”¿[þnù»,˜Ä’X =OÏÓó`°‚¬6ĆØ@D"ú>mŸ¶O‹ j_µ¯ÚÓ¬{¬{¬{º€.  ö}ÆåŽrGŸŒ™[ñø[=ùd ÜüI"3oÍ%â3&z×´—,"‹È¢à ŸÕWÇwïßEÿ¶n£Û(ä}Ôû¨÷Q„Ðô}7››Í͆ALÄÈNyœò8åaòì ì ì äÛä¾r_¹oÆâ‰—&î6ͦÙ4[8n®ì‡–Š¥¥¥¥¥¥aØ’Q˜/Lö¹w÷š{÷8É$™$óf1·Œ[Æ-‹+A bÃ(//w ž<3x Žã8ŽÃ%•úJ}¥žêžd?É~’Í·ÉÊʶ^7tº ݵ½ÓöNÛ;€Pi9O-€¾IЗ€- ³aö`¹ªº¢º¢º’±A¾C¾C¾ãBÚ€Ó€Ó€“0x9érÒå$Ó^óD?Mã qÐ8àkkkI¸âââ@•TI•ûQxOxOxOÿW÷÷÷®ßìï¿Í«þe. K—.]ºt)DóVäLʤäzæôÌ陃oM3M3M3ëE™»Ì]æzâéò§ËŸ.w¸2xðþà}öeówÍß5gzkd|d|dœß# ’I‚>ragØvæ×!ƒ 2¾ýèG?u¶TÀœ(ñe‚?‘?èÝT”£å¦dVÂJXÉÒv®ˆ+âŠjÜÇÖ­[OçH²%Ù’lî>ÃÇð1U·<Š<Š<ŠV.Õ¶kÛµí¤‚¾B_¡¯°³f»¥f@Ýqpøy©wÍÇ…)±ˆE¬ðoI"Iä?=X9+gåñQV³¬fYÍâîó]|ßÕ=‹¡Gè‘]¿=Øú`냭À ÜÍö,ƒ¥þÏ8þñÉœ€þjIEND®B`‚routino-3.2/web/www/routino/icons/limit-163.png 644 233 144 2700 13061246470 14575 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜuIDATHÇÍ–LÔeÇ?w@ÜÁu G)Ë]þ¨\KÙ46tzÓ[.W”±5Ö ™TëtýT67ƒ´Y¹ˆ1vSG䤨D³5vëƒÍCs–ÒóÇ <ùþx^ýq<÷=[ýïóÏíóëý~?ŸçžÏ÷‘üù_w‰»ÄíOÚîŽßó¬çÙǾJÚ‡-p½äziô]È;”w`Aë‚V{ܱu\ç§×‹8øé|Ú/ùâ8²#ÙWhÞ~ªŸª~ÊóPÒþh¼'¼'fL¨ï©ï8Þv¼×aò‡Én„n„À±u\çëz—Ž/ïý‹_²Nft]‚ì²Gƃo&&‚ðÂÖ¶ü™ñg†r€u ðáS! N½¦ÓlŸÏ×õOãk>ÍŸÔ#P¸±p£¼Xób·%Y0Þ»Ùýˆæ3Nò!>0ãfÀzÅz…» †Ô.\àØ:®óu½ÆÓøšOó'õȽgÛ¸*=•à6€qì<;ìF»ÑŽ¡v«VÕŠÒ’U•Ú®¶ƒ9bŽ˜#`ßµïØwRÄþ[©"”yq®t®ÃþŘ0&R>‹±ÝØn¶æ—tA‚í½â½Ï„óöy;…ûœuÑ(7Ê™U]êWõ«CÈB²Ôuu]]OóŸãç@]S×Ô5 Æ8ãiñv™]Æ,…I|ˆ•ÄJ€;Þß½¿Ç3µžya‡¿‡] »Rû\¥oŒoRpj賡‡>† §.œºpÊá™ÈŸÈŸÈ‡ÆîÆîÆnˆVG«£ÕN|,0 @ãç@ôB4M¤uüj’ø®·v½¥öð÷ó¢oóSWW?p@½ö ûw#G|d¶f¶f¶B¤>R©wˆË\e®2lY²eÉ–%°y|óøæq8½ôôÒÓK¡(£(£(*÷Wî¯Ü‹Õâ™Å3ðãÃÃßËÝyy¯Ù_vì<¨…Eßv‹øÏøÏ¬~Ff6¬Ý°VDÞqµàá—$[þ’[rK¤ § § GÄ7àð ˆôÛýv¿-ÛÛÛ#¨ ÔêDÖ××EòúòúòúD®6\m¸*R¨ ÔD\ôÅ¢/Dæ”4ƒ’üC¹Zäë 3fDRz`Áƒ ´Ç`úÊôçÚ[aóiói§3¡½¡½¡½plôØè±Qèëìëìë„å›–oZ¾ ŽFFF¡¸ª¸ª¸ V ¬XåÔW$* (ÙQ²£dDóGŒÃ᳦:¦:@ëq‹Ø½v¯kL”ù¼ù¼èU(Yò‡ü‘²…vÚiQ“jRMŠø¶ù¶ù¶‰äÖæÖæÖŠì,ÝYº³TdEÓŠ¦M"ûVï[½oµH8'œÎéñôxz<"…?F £"¿u¾?ú¾Ãlj9{ÎÑzÜ"ñP<ôóOâ<3x&%£NžTY*Kæ´ÇŸåÏòg‰ÌÆfc³1‘uÞuÞu^‘eåËÊ—•‹xm¯íµE‚ÍÁæ`³H÷šî5ÝkDÔuDñ÷ú{ý½"+;W6¯lyùVÕHՈƧ.ã—³Mg›DRzþïVrÒì2»œ[y{ýíµ·×Bârârâ²sDVÄŠX˜M‡¦C`Ý´nZ7¸Y`˜0õãÔàÔ XŸZ=V*Y ü6Ï—â¿çV>þ x'½“ñL8o·œ9v­]Ë,sÜ»j©¥T®ÊU¹Ž[U¨ U*¬Â* ªSµ¨–´ø&³Ílc–`jŽ={HüçûÉoèÉo]´.YïXï`Ð@]΢“:@ «a5 ´ÓF[Ú>à8ÇQê;«Ø*Æ ÙzÕz5mò›•™•™ºS÷Lþûö[yß¾.îÛ÷Øýù‚ý[¾Ðò´ÿIEND®B`‚routino-3.2/web/www/routino/icons/limit-14.3.png 644 233 144 2722 13061246472 14657 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷܇IDATHÇÍ–ïO“WÇOKš®RÂdÌ4oX¬&óÕ°ºkÄ*nÙ0aQcx±Ñ-3:“Ù ÛÂÂc$SDÑa2³%Êt{ᯩ b;c1lT¨Ò”>Ïs?{Ñ>´“ÀóæÉ÷üøžsÏsï¹W@DD^Ž¬Ë¬Ë¬Y1lݚЧ¯K_·âX wè`©¶T|‹Û·8ºÝÆX›vÓ?9^$ÁŸœÏÔËË’P¤H;a)ã/ ¦¨¦(='†¿û)û©glÜ60Ð;ÐËN˜ømâ7€Ç¥K!M»éoÆ›|ÉüòÅsùE u(uÈ„´Ei‹D àí‚·_«9üõx*=•ã)ã)Ê ú¿@ª”É$lÚãþf¼Égò›ùÌü±zœ%ÎXÿÞú÷ì]±€±£Ð˜ß˜o拞¾äK2@ i!ýý" †Õ0,À¦Ýô7ãM>“ßÌgæÕ#ÿÿ·-儼Qot¾ ËFI45š j¿ö@{€iQ¦‡*T¯«×Áp.ÃEBñÿÌ#e„µ -ƒ¨ŒD À¸ã¯ßëfãùçeHD¤ð;°ß±ß Ù P(ý/*Ô)mV›e–ç¥B AÝR·Ô­$ýžð$ ïe/{ \â€r)³|ã'ÇÙÀ²‡B6.Åê‰wªãWð5ùš@ý `¬2y‡¿îîFÝ[}ï{o,(€/à øàbÞż‹y ½1iL“ V:V -=-]-]¨ë÷®T\©˜÷^¥æ¶Wn¯&bõçDD®7p¸ï«¾¯æ;ÿÑ gß¹¾sDRO¤ö¦ö±#ÇŽ;’H===+·®Üºr+”Ÿ,?Y~raáw7ÝÝtw,i^Ò¼¤j^­qÔ8 /’{8÷0‘ß÷Ü©ºS¥>‚3œô³±z¬bÍÚ•µËµV¶—Œ–ŒŠ°HDÄÒ%S§,–4§ÛéqzDh ™—¦-M[š¶ˆDÒ#é‘t‘ìŽìŽìY ú¸>®‹ì·í·í·‰l~gsõæj‘Wåý’÷‹¤ÍU?jyÔbé)½PzAÄR÷ÒÈK#®µŽLG¦1 “&€^2ì(s”9Êp¼ýxûñv::ttè(8‹œEÎ"¨ÝQ»£v¬h]Ѻ¢‚ž 'èIjY;í´ÃÓðÓðÓ0l8¿áü†ó°¬.¿2¿®ýy»ìv“®W€q0«=«ÝµŠ2A˨ˆV­U‹È"qš+V êõ‰ˆqÚ8mœ±æ[ó­ù"«çVÏ­ž¹yöæÙ›gEîûîûîûDn,½±ôÆR½^¯×ëEzë{ë{ëEŠ×¯)^#2àp¸Eœd÷g÷‹Œ|:’3’#Në:ë:Út·î¶ŒÆ7ÿõè›î›}glÅ×ñôzyAOgOgOçÂ=ÔÝÙÝÙÝ ÞƒÞƒÞƒÀU®r\u®:WƒÁFpïvïvï†Ìõ™îL7|xóýßÿ˜H¸ÕÌ÷Cð‡ ¨éX=ɧroð£y*V£f\3ïμ‹Š¼y3ò&0È ƒ`´mF„—‡—‡—ôwÚ;í•¥²TLÕMÕMÕÅS Z¿Ö¯õÃÃÓ{ö ôïçªæª§’Q_¯À¸¿Æ +üìö‰ üº_ŸoHµFmÒ›‹_9SL1<ãÏ…B3Ì0“ÔR6l >Sͪ@U©*fã—U+ý×ü×ìÓöé+ÿ›cI“_Û˜²1%1ùÉÑüšاëã '?ûâ4—\rTPTˆÄý[õ€ ª~ÒþÖþ›“£m£ ˆƒ?®GÀUâ*7ß}ó]ûáø„Á6ØñÂŽ ¾èàc>& ´°ˆ­­g T·êÀ‚LlŒõÆ|£ŸÑßà3øãzÌO9)"Òì…Ê@eôÚHt^tè5‡æ šPª ÉúJ½X/µGíQ{0c”a†Ÿ ¥jµ´ˆjW£Î¨ôp¼?TÞ©¼LüƧìùÍg`ÛÃá*è ô»ðZ¡V0Éù„O€d’I=UOÕSAµ«vÕ>MÐ8ãŒOÃó™Ï|P÷UH…Ô:µŽI¾Lôÿ Á—à'×#Ü9ØCúÆš5OÖ! åZýµzØ÷ç}MûšP¸0p§¢{÷þîý0<{xöðl3¯ûu¿î7ñPÅÐëC¯Cóù毛¿F][××Û×kò©‘ùóÇõH쪈ÈÕzøêï>„¾ÍCECEª6í¡½ÅÞÂTY°ìDz!ënÖݬ»Ðߨߨßç{tî$íJÚ•´ Ž—/?^þ´ðP~(?”žKžKžK°zxõ÷«¿‡ßÞ)ü´ðS¦ný.¼ ¼@ÕBgvg6èÁ¸«8R[S[—ˆxk¼5"ÿZ5Ø0Ø`9üûƒÛ¿Ýþ­¤t¹º²º²DÒŽ¥K;&r%r%r%"’êNu§ºEædÎÉœ“)¢Ö¨5j<K.–\,¹¹íæ¶›ÛD\ù®BW¡È ÇÊ%+—HŠëW¶µ¶µ–Ã"žÍžÍ"ÖbÇ=ǽ%Bt–m–M¿¡êÆ}ã>óØ_^Þ›Ó›¹Ks—æ.…j­Z«Ö z4z4zÔ\o‡·ÃÛ­;[w¶î|zÅÚVµ­j[ õ…úBÝ:tëÐ-øõå̳™g¡«¿§¸§˜ Dr"9 ÛœÏ;Ÿ×oXÕgZ™Vf¹aiMÎKÎéß4X?X/.ï¼o{ß©*ª*¬*iÙÚ²µe«H|³›+¢ T*±œ¶œ¶œ6óÁ¦`S°IÄ^a¯°Wˆ8;;‹øÝ~·ß-’ñ÷Œ#GDFëGÓGÓÅ%¶ˆ0/6°ÜmޱÇ.](‚¿Ä:ú:úTíÌNk…µ‚©e]vdÙpf:3™pÊÊjÚ¦öù|>ŸÚ÷¶ïmßkæó˜j˜j˜jÀýE÷Ý_*¢"*ú&}“¾ ‚ ƒsƒsQú‚ÈHdÄ<•üó½—ß{Ù0܃= ƒ5} _yâc9*‡Iþ߈!2 o Š*P©Ê­Ü*Oå1©æ&ú—®®Ø'ìá|gøØÿüÕ›½ì¨¬«¬ÕwfõXZ, ÔIí¡ö(â¾1Ÿtœ8FiŒ»< ÔˆúAý‰WR|‹ÅbDUÒB@»áükg¬D~éüÏî¿ò™½]<³÷±góû_ׂð éfIEND®B`‚routino-3.2/web/www/routino/icons/limit-20.3.png 644 233 144 3107 13061246472 14652 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜüIDATHÇÍ–ïOÔWÅŸQfÆå‡M7T*‘5–ªi1®‚›‚”6ƒ´¢ ”°o òÃtmqëî %5‹ 1º8M(& »Õ ¦¤¢£â¶kWY ”²;J Â3ó½Ÿ}1óí°ý ¼o&çÞç9çdîýž{DD$&ü+`L4&W…°qdÞôŽéäön ‚!ß?øXÝ´º öóØÏµ¡Ö×õú¥ý"þ¥zú¼ÄHd"úBôCf‡‚-[L/…pà 0_4_|€²¯Ê¾è8×qŽ`òöämO¦'"X_×ëõ~o)¿ÿ™¾,ï^ÞmpAôŠè"°îíuo¯?*]ïå¾— à^æ^¦Œœ¬XU&àÅ‹>¦—`}=\¯÷ë|:¿®§ë‡ü¬ykÍ["°çÃ=š[C C_@õÚ굺žÿ"ð Ÿ`…€7à‹ñº¡n`À¬¯ëõz¿Î§óëzº~ÈOd+çEDÙ°odßhüý—?ÉŸÚtÀ0à;Uj«Ú¢¶@`"0uHR‡ˆŒY¦˜ú )m!` Xñ\þuþu õ‡øu½ˆ¾¾•×DD^;f¯ÙëR‹#ý#ýÀqì v¨Ìsž:@¥©4•TPAÅ#9äرc_2_K-µÀunq @¥ªTæ9æ)¬ÖçVÈ0)"Òr“Õå%å%:›öæÃè#Gàtãé†Ó ¨•Ê”Gô†ë†ë†ë ÙÐlh6€Ëëòº"g m\ׯ#x({(s(mŽVG+êÞ¿ïØïØ#zj±<·<t?¼'"rït~Üù1Üùíé?¤«R뜹ÙÜŒ/k:k"k’=Éžd\9{å앳îHw¤;`ó©Í§6Ÿ‚¾¾>x:ÿtþé|ÄÐhþhþh>ÄÕÇÕÇÕCÁ+±±à{Ùù²ßßÿ8¼{x·*…N:ॣØV~¶ò³Ô4‘ì’ì‘ÿüjèðÐaCë¡–ª¾ª>‰î[Ó÷jß«" c c c"u¾:_O$æY̳˜g"ƒG±¹mn›[¤;©;©;I~‹‹‹"'¢NDˆ)|·0¿0_äN¸–pM¢óg3C«HæõÌë"†’•ƒ+SÓ¬)Ö¤=ReSö©ÈÙ˜¾½£}ÿzH9–r,åTgTgTg€3Ï™ç̃]î]î]îÈ?“Õ•Õ•Õ-—Z.µ\Z²¥EZ‘Vs s s °·woïÞ^H,Y›»6îþëaÖÃ,¦aÁ¾`íO«>]õ©öH´k®5W]€ÙšÙ¸_ù¨êQ˜;LÕ¦j8ù—“í'Û#B=Ý=Ý=ݰéü¦ó›ÎƒÛⶸ-Ü›Ü›Ü —{.÷\î­X+ÖŠ¡ÍÒfi³ÀÖ”­)[S"<©o¾±ðÆ´åµ¶øÎøÎ@ð˨eT]@¼~ƾNÿ:šúÛ›Ú›TéòãûÆ÷ñmÿõömÛ·mÀ6`€Ng§³Ó óæÌS¼)Þµk×>†™3;gv¶à¶à¶ ¸,.‹Ë959595`Ûc˱åÀoþYt¸è0¾…FU _º¾tš ù1Ðþ ª+«*«*wþ÷o--*u®m2c2Ãx?ð;ÎqN0 z =bˆ›ŽóÆyEL“Çä™±ÌXf,"qOâžÄ=‘1“1ÏÏÏ‘øÉøÉøI‘àþàþà~O”ç¹ç¹ÿ$¦#¦C Ë>Zѵ¢K¥ÊPeRe’ñ¾¼îœpNœ½ØHŽž+áœñ«D•Hä;«¢Š*мšW[ªT•ªRà8°$ÇD¡õ{U¯êÔnµ›ùðeeç—#wGî˜gͳÞ(îè9ö·º#›ê}eûÊ@}Jfõ 5hõ×Àl`?­|Çw(¾å&7A}«¾QßW¹ÊUàyè®TjT¾oƒß¿Ç¯.~ ü8õäÿ êƒ(À÷óäqïÊöuñ¾Ç^Ììÿžðøæ66†IEND®B`‚routino-3.2/web/www/routino/icons/limit-13.0.png 644 233 144 3041 13061246472 14646 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÖIDATHÇÍ–íO”WÆof‡x£h-ÛíÚ(FJ|‹„LYYÚ41®ÝÂf/n›&n‰©‰É¦kc6¾ nmˆÍvÔ± Ø Z×¢’Ô‚Ò`Ê›P Öq¶<0ŒÎ3Ïù퇙‡ûx¾L®û庮9gÎ=G@DDE?lËlËlZÛþ‹'½‘ôƯÿÁmaH¨N¨þî#H;œv ýóôÏÍ»1lå­úø~‘¼ž—E 8ÝNwBI u¹u¹IYü÷py\žYÞûò½/ηŸo§ &{'{ü%þˆa+oÕ[ý_<¿|ü }HìJìJççx©ì¥²œ–HÁý¨ÚVµ `Â>aW6ÿ¤¢Jk=ŽÃV>Zoõ[|¿¥géGüdg‹Àö·¶¿å:i¸û¼Ÿý~¶¥ò8@ º¡„ß ¿ÃSP=ª€ †­¼Uoõ[|¿¥géGüÈóg{p+zM¨&4o膹%ä9@}dŒ#XeN™æ#ư1 æmó¶y›ØzÂSóH© Æc!c<”Jõ§?Ôè5:ð$ª?”ºˆÈÊ€ëžëžî€¶þ°Â÷¨Tÿ6~6~&0/±‡&š€«\åjœ‘CâJ*©qñu¬c°žbŠT…ª @Y„Ÿßyoxo¸t—®;ø.â'ºSm× ñƒÆ@]0ó-Þž¿õë9†ÎÖ†µ˜Þ`â`â`"l?Ø~°ú†ú†ú†byó¸yÜ<ÃÞï€wŽ8ÏžEÎ ¹‡ÜóÕùê ëÖ[GÛvM¸("Ò÷NœùäÌ'ó;¿Ûyæâ™‹<µëö)ûx <žðïóïóïí–vK»uKë–Ö-…%j‰Z¢ ÷AïƒÞ1CSãSãSãïÉ÷ä{`Í×t­é‚ßê¯yåOý"zàîvwƒúkÄMlÚ‡Ú‡EÒPïÓû¦÷{ÿ Ñç¢Ï¼úõ«_ë}läúåý"þåzF\b$ý!ôSöþ>Hÿ =,ÎO·AxCxüŸ4~ÒPÿMý7ü Æ:Æ:žd?Ɇ6òF½Ñoð-ç—Ï_ÐæfÓ0„®]!IÛ“¶'ô $Cî;¹ïŒ)3ø&(¢T6àÂ…±¦–a#¿Toô|¿¡gèûçˆÍŠÍ÷ Þ+¿äoèûŽ&M0ô¼ ÀINšKsøöûöãÕ¦Ú0a‚6òF½Ñoðü†ž¡ïŸ'°• ""•[¿­ô)¯]ò®õ®½Óû‹÷¼K“*ý¿ºSw‚ö@ÔAwënÝM`¹xÌãçHé^-N‹Ã«M{ã½ñ þèç›Ëæ¦ }c+ˆˆ¤ž…pW¸ËLy¿½ßüÀ.P*ƒnÒJ+¨h­¢:ê¨[6ÈqŽsÔSõT= „•K¹” 8ÆIN¨,•Å…Kü;–ô ýÿøçÆEDÎßâ•âŠ?2èô7û¶;›œMPy¶²ª² Õõ k k Ø3Ó3Ó3UǪŽUg‹³ÅÙÈëz‡ÞÀÎTgª3ªWR‚¸îþ¹€ž*^W¼ÎØÚó·DoqüÊÊa0vzdzD½öè×£_ÇcûÑvÍv R<)žTo©ÞR½VŸZ}jõ)Ȯͮͮ…$[’-ÉŽLG¦#30Pï®Þ]½»À:c±Î@fAfnf.¼ù›7ÚßhÇ3éòµùÚTÔÙêl  ýó˜Mµ–8KÜ[›D²¾ÊúJÄ—0›?›oºt\N¬;±NBóÛó»ò»DKKKERRREŽ´i;Ò&r³àfÁÍ‘ÈU‘«"W‰8ö9ö9öÉóe/±—ØKDâ×ǯ_/b¯µ7Ù›DVXÂ6„mÐójÏÔž1]ÉÊQ­ÃÃom¦bcõ{|9U:U8ösÏ\¿º~…¼æ¼æ¼fXÓº¦uM+ôÖ÷Ö÷ÖC·£ÛÑ퀴±´±´1(Ô µB |]¾._Wà=Ì}˜û0ÒËÒËÒË '9'9'VT†”…”Á•ß'~ŸÈèáz8hº%Ò©ß Ö÷kÍbºôOËÛ–·%í»¼ºë>”Ø3–ŠÎŠN‘»—»ïwßÙ|eó•ÍWD.Þ¾xûâm‘ú™ú™ú‘’œ’œ’‘Ã5‡k׈hš¦išÈäääää¤Èüùó7DÒž¥=K{&’Q‘Ÿ‘/Ò³õnÈÝëß­k­k%Vd~çüNs©¤šî‰ºh|c×_{ ³ÿPEÙ_nݰužˆ g#ÎÂÁáƒÃ‡áôÓwNßЖЖÐØ8´qhã¬4¯4¯4Ã…C]8Ûú¶õmëƒÁÆÁÆÁFØ´;iw$Ä'D%DA©ýÓâO‹ñ,Ý">¾º÷ê^à¬1NbÄN‰¶ÉýÄý&¾˜ølâ3”^£×è5à®pW¸+`"a"a"F¯^½c1c1c1°Ð¾Ð¾ÐÓ#Ó#Ó#@EÁâîÅ‹;aüãsãs(Õ£Y4 Ðá׃eÊÀï§ço ·^𱿯¨¿<÷±½j/ j›zW½ X±b]æ_nÜ,7Vã=ð{2ȵO•«r}TeAýv‰ÿ‹þÙþY€ðGá\ÁŒ>f8¿ÇpÞ=Á{‚~gVÍÚ#íÐäóù|xùuÔ¡ÔUuY]õoõ³úT“jRM@G9 Ê£æÔ°àß+Nù|xU‡6®†óï Úx_tþ—÷_ùÒÞ.^ÚûØËyƒý?ñþ«ðÜžIEND®B`‚routino-3.2/web/www/routino/icons/marker-92-grey.png 644 233 144 6306 13061246467 15641 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü {IDATXÃ…—PS×¶Ç¿ûœ“E‚‹`òø¡ .hUP¬S´ÒV´V Ó|èCo­Î¥Å‰’±·¶ƒe[§(}ã­¨\P¢P~Ý Ôñ¶E(  ¿,(ø‹’„$'{¿?Hìg:]ÿìÙçì³Öç¬õ={¯C4F£/¦Í8=pË„a@`ÕšSšSšSì…‚±‚±‚±ÕLÁLñÙ‹b€ Þj«´UÚ*Ùa”¢¥$áG8€Û¸Û¶b+¶²Ã²TYª,•ä ÷…ûÂý¶R2NÆÉøßN˜}`öÙuÝÚLm¦6“ŒŠÁb°L^æ -.._î)`À¡´€Ð»Ùn¶›ýTTT²ÚGí£µÿ±D[¢-Ñê½^Å^Å^ŸªNV'«“I^¬$V+û-ö[ì¸çîûîõîçÝþžúwÅsÇwó¸ùW_f>̇ùÐt’E²HVp1ÌóÁ ߘO›O›O+ýfÖάYëÜ“|;ùvòmα kAׂ.²V–'Ë“åÁ‚ð>‚X`ð.ÞÅ»æ`æÀb ²Ù‚°¶«¹«¹«™9êÃëÃëÃéžÇ¯<~åñ+[¾˃åÁK<œYÎ,gÖªb–ͲYö@:÷2Ù?µjÿ€f4£9è9¡R¨*›ÿi·Ú­v«2EµBµBµBLHÛ‘¶#m‡pÆ×äkò5A…Y˜…YY( e¡pwp€7¼á `“˜†0„DOôDð }Œ>FôW|UñUÅWbzSS“pCê)õ”z^SÅT1uùf,Çr,þólõlõl$/H^¼ð÷[®Y®Y®)STiª4Uš¸6;3;3;S¸áëïëïëYÎg³ ¯Ñ×èk dä¹Endˆ ‘!€<&Écçqçºn  8UN•SÌèšÑ5£ ³ÜþUo¨ÞP½!®uÇwó¸ùHAuAuAõ«‹í­öV{ëµV“ÉÇÄBrFrFrFH«o™o™o8JCi(|¸v®kÿ™s[‚à'ü„Ÿ#ÁÚІ6àéGƃP-ÕR-Ài8 §É¸×¸×¸ô8Žã8X¬IaR˜Ä •ÆJcSb9ÎÂYøÁ7‰ŽDG"ÔžÔžÔŽd ”®¡kèøpzNÏé‡åË–m\ׯwÓî¦ÝMÐntˆCâLa SÀCõCõC5Ðv°í`ÛA@Ÿ­ÏÖg8‹³8 °L–É2áã[è[è[iRgRgR'’ÝA CÄ¿ä(.(.(.àpTRTRT)qiIä¾ç¾ç¾:×u®ë\œµµµÞ=Þ=Þ=Àdêdêd*°|éò¥Ë—)Ã)Ã)ÃÀ­õ·ÖßZ”\þqùÇÀs<÷Ás¦=¦=¦=@dTdTd1ž1ž1þ´.Ò(S”)ÊDJ5Á'$œ;ÇãÎ=}3>ćø r*§rÀ~Ý~Ý~P *ƒbƒÀgƒÏŸ €¨¢øUñ«âWs/æ^Ì= D¢Qÿ.e¡Sè:Y„,Bð÷ùûü}`°z^§×Ž(G”# @#Ѱ[ì»ȶȶȶÀòdñ“ÅOc“î¤î¤î$t²NY§¬sêVÊJY©zæaæõlã¸R®”+å[¹B®+ù+ÕS=ÕgÙå?Èÿ´œn9ÝršEvê;õz”Ï.›]6» Ö˜¹1scæþˆuX‡u€ÔWê+õ"wFîŒÜ D¯ˆ^½ˆîˆîˆîb.Æ\Œ¹“Ò¬4+Íß0ß0ß0‹*þ*•¿ p=\דOI<‰'ñ=ÛP„" A®6Ï;Ý7 I1)&Ź\"—È%î©D6²‘Í}©Ë×åëòÅíÆ0c˜1 r²ƒì ;`¢=´‡öÐAÝï'›Çæ±y5P5t&IgÂæÚ~|®Ô]©»RçÜýÀñÀñÀ!•Id™¤\¹-r[ä¶/pp€üzè¡W¹ûQ/ aCb7vav‘ʈË—#.½îñ¾Çûï—kǣǣǣcÅîŠÝ»»ÝI#i$°¡ ]è †j€ô’^Ò ùd>™6]9È®®®ØÊ›}7ûnöñEÞ×¼¯y_ž²ï³ï³ïÛ÷éÏÞøóF€˜0Ãç[7¨Å5ž£ÞÔ›zcFǽŽ{÷û.û.û®}Ÿz)¼^Šs·«nWݮ⋪7Vo¬ÞÈV’\’Kr!£e´Œ–ÁžðØ›`‰HDXP^»°vaíBÌðõõh£qû>–Þð”KŠG§qث×/‰Ì5u•ˆ/B-jQëÜMHIXùúô/GÃeÇvÇvÇvºs ÝB·PnÙ‚Â… ‘J{i/í…œ›ÇÍãæÁ&æ‰ybdÇB… u†ÆÆÆów<z,ôXX´„ñŒgüž´„–Ðᨫ²uWL«ÕjµZ˜Ü…ëÂS ¹´»Û¥Ý£.í^á’¸$.éwíV9ªUq»ñ„ñ„ñäÇq‡ w&ê¬uÖ:+µ — — —ðw<ò=ò=ò»¯ÚFl#¶‘ü/³æÎÀ¨r='wºùž‚>ì^ w9øÁ¥ÝË—".E\*zÝ#Ç#Ç#§\;00 /h.h.hœ»]ýŒ.¿.¿.?ü£¹µ¹µ¹•¤Ë{å½ò^€ª¨Šªv¶o o o[—†Ä†Ä†ÄrO\ñÖ¹Fë³\<þÀ!º¦]LʤLJþgtþèüÑù8é|Ñù¢óÅÿˆ²Yˆ,d×V=Xõ`•ß%c±ÇØÃŽt|ÛñmǷΗ'“ŽI¿K²L²L²ìà v‚`'Î^… 2Èøþé“ÎqWÀ•(ñY‚?±?ÐnªQjçVÉ*Ye¢ž»È]ä.þ+djýÔú©õt¾¤DR")ázøl>›Ï®o ½z1ôâêDƒÞ 7èI õ§þÔŸ}ãò[å´ü‡?±g´ëÚ.œ‹\ä m$“d’̇²jVͪÿö®çKž/y¾ÄõðCü?4òýŒ~F?Û~¯wsïæÞÍÀ4 B\þÜ¥õÏ8þáÃHo]ÇrÉIEND®B`‚routino-3.2/web/www/routino/icons/limit-21.1.png 644 233 144 2643 13061246472 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜXIDATHÇÍVmH”Y~ÞqÕQg4Ó 2³\úc¤ÛŽ¥˜Y3«™®‰!®ÕÑö±?\– ÙH6—(k%¡/*ˆJ±²ŒÅ¨#k£ÒEa -JÛÖ•pÆL}?î³?f®ïT÷‡çÏåœ{ÎóÞ{Ïó^€)¤%Ñ’h‰öû–ï̸u…uÅççý~­N*ùJþ_?“1515${2ö¤Ñmúr_æ×&~0ŸŒc Ì@øÅð‹JNÀßG¥¥X§ùýƒn2¢!¢áF–7–7’dýéúÓÜF¾¾ûú.I¾Íy›Cš¾Ü—ù²^âãcßGüÚÚ¤<'ÃÃÂÃ2É•äJÞîOx–L®Î[G’¯B^… I’úIm"‡¤>Jû7È—û|Y/ñ$¾ä“üþ~@Æ/_ kÖ¯YqÂ_Ð}–Ü3kÏ,ɧ6ÜÏý´‘šO󑤾AßÀ1R¸…›$©P!M_îË|Y/ñ$¾ä“üþ~Ì£€j'Yà)ðFIªmÚsuŽ:‡4F5»f§èTÈ–lc‰±„•¢RTÒ4/9HÒ+óR£”ª±T«Ô*Iñ“Ÿ,´ZI¾–üò([`Þa2Âáó}&Æ=mž6’ûH’¹¤ÈYá/¬bÉ0†1Œ4¢Œ(#ŠçÄ9q.¨¡!qˆŸ˜Þ£÷è=¤hÐ;ô޹ôyš=ͤä÷76ï0üÖ¶2fSé¦Ò‰ï° 3üÑîG»ÉC¿:xè EçÍÍŸº¸¸½S{§öN5ã⎸#î˜ëDþ1w£»‘¢7îièÓP“OtnZ³i<ÚÚV‹ñ78®`(ÏžgþÜÞ“Ù“©¤e fÎÍœ‹ñ¦’¦¢¦"(+ç¯L]™ tTuTuTM#M#M#À²eË€vG»£Ý 3¦Ó递­d+ÙÀ¥—f\š8œïï¡´Ùþ²ý%ÆýÙJš8že˲ÉjÇ ìQuQu©é€³ÔY ¼üª{g÷Nåĵ»níº…ð–ø–Ù-³ÛyÛyÛyàáøÃñ‡ã@TRTRT73nfÜL@¬«Ä*³1Úi§}¢OôŠWñ*^`ÚïÓNM;—²UÙŠð@c'0œíÈv@ôíèÛ©é kµ]¢| w ×û»‹Ú’Û’É”´”´”4r£¶QÛ¨‘êõŒzÆ<ççç²®¢®¢®"èN¹t—î2Wi® W†+ƒ¬«8^v¼ÌäÓ¿}“ñ&ƒ$cí±v£Ë"k˵åJ—R6?l>ðäûîÝÝ»ïüѹֹ(Î(^\¼8ºã莣;ÿe7¿ŒHé"P.+—•Ëf¼÷Eï‹Þ€H‚ò;E‡èàÁu\ŸÇCSsÕ\0®W•.‹¨zwýÝõÇ÷{­÷Z¶â'sŸÌe™õ™ú ãõYõ ë Àµ¤kI×’L"ë6ë6ë6 ¢$¢$¢ÄŒ&&&ÞÞÞf<òXdud5úuHrH²¼c,Ã*w¤;|9¾œÇ÷Áƒ©ä–][v‘ï/ú§äŸoú3û3ɾ¶¾ç}Ï)úëúkúkÈÑE£‹F©Ãƒ¡Cȱ½c{Çö’ôÐC9˜?˜?˜Oš¡Z¼}áÍñæPŒ…«ÃRi,àÍÍŽÍs*!uÃÔ‘€ŽI¡Hɺó?Øx¹&ßÇ:öÁ_½ÚÉ=åå¤8ëWfq_·é6R\Ô†µaªü•7yÓT~Æ0šÑ$ðT^â•è=$_N(ÿc UÆëëôu$÷úñ'”ôc埼ÿÊIûº˜´ï±Éù‚ýï‘£·^ú­IEND®B`‚routino-3.2/web/www/routino/icons/limit-3.6.png 644 233 144 2554 13061246471 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü!IDATHÇÍ–_HTYÇN匙fáB4™Ñ»ó[‚bÌ(3Ì ©¨ÖŠe‰mZ6–„ØdÅXzˆŠdص—Í cQ3Ö6CÝ 2&§š(w† Íkν÷|öaîõÞ¶ÝwÏËÌïw~çûù2çœßɲ><9žOf2ö|îä}›|›>¾’ŒÏR–Röð;˜}nö9€9 sÌ~'¶çíz÷zGßͳó’%NÂÛämJ)´âSP±¬b™ï£düc'¤]O»þV‡êÕ7~ ýâ( v v¼.|]NlÏÛõöz[Ï­/§þÅ-3ZRžƒ7Õ›*¹r7,þ2Y0°¶mÙ¶àå´—Ó”Œ¿YÌR…À#Ø#æŠíy«Þ^oëÙú6Ïæ'ýddˆÀöÊí•i—“ úã Ž/°y‰ëÀiN3 ô}À¨2ªxªSuB 8±=o×Ûëm=[ßæÙü¤yoëÖ£ÊSËS@â0žÏÁÔôJ½’„þÌð^”ùÀ¼oÞÇqâÄPT{ÔÐ{uM×P¦©ïÓ÷‘ãµñÐ,}Uî-÷ÚëÖ»¶RDäÓŸ m0mpd:‰ðxx|R¿„ï§ÆSÆè FÌeä,g9 dA†+ïÇT\Å•Ë(Í<á pĸgÜclR"¬…5˜ä[~,cçïÀ¡“‡NBò|˜A$1’pÎŽê_ߟߟu¡ºP]z#½‘ÞˆÃ5ëÍz³Þ‰#¥‘ÒH)Ôݪ»Uw úvö•ö•:zª/q;q’Íà$ßòcëý®¾¹úÔ:uÀxù&r4ræÖέ[ þ …æ«ùj¾‚»©wSï¦:†b-±–X ¬íXÛ±¶6?Ûüló3X__‡èõhc´q²ü:bó’|ÛG$³#³#oHAQA‘ˆ¬I¹lí´×4†a‘šDM¢&!²«xWñ®b‘yç]œwQD+ÖŠµb™­žVO«GdàØÀ±c"ÙÁì`vP$ß—ïË÷‰d?Èg‡'˽)=6ÏâÛ~`NÆœ óÄ^Å^u€cÔ«ê„óKŒj£Ú¨;Zw´îh…œý9ûsöC÷îîÝÝ»ºÒBÌ€0áRôRôRü]þ.´/l_ؾÐu>³ÛŒÅ·üdvdv¨&\9¸ŒÞ·o6Þ„¼½y{óö:ùžž¸P{¡öB­“¿6|møÚ0¬¬¬8ùà™à™àýj 59yã û[’oûñˆŒŽþÕ-r»ýv»ˆç+ŠH§tÊÄÖe[—n]*’µ&kMÖ‘̲̲Ì2‘åmËÛ–·‰”,)YR²DdUϪžU="«7Vo¬ är¹"3Óf¦ÍLÉ{œ÷8ï±H•¯Š*DDT³j–‰i6/ÉŸôóÁ­Äº%êmz›s‹ôÕzPÂPóPóP3˜éfº™j\«qˆ—ÄKâ% &Ô„šó°yØ< ±@, €ù‰¹È\äè1 ÷ê½.ÞßJWÓ£áQW›n00¦¾UWÕUW-REªÈ!‡×Þïd';A¥«t•¯6¨ @Ñ`4¸úØ»ðXxìû˜«óSî+÷:Xÿ‘ñøÁ2†H¨ßÕ õÅÏ\æ2 1ƨ¨Šª(0Æ[ÞÍ4Ñꎊ©Š+¦Ïô‘ã¡ñЭoñ>ìüSö¿rʾ.¦ì{lj¾`ÿŽÙ¼³îÚ«IEND®B`‚routino-3.2/web/www/routino/icons/limit-7.3.png 644 233 144 2437 13061246471 14603 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÔIDATHÇÍ–_H”YÆ“: 5©¸±”ÕMQ‘MW+k©%ÖAi¬lT[7a”PQøg±ŒnV³l%Ë…m-Â?#I»² Ùä°å‰‘i3í¨óïüöbæø}Õv±wž›™ç=ïû<Ï÷~çœïB‘ûàÈtd:\Qì8`Å“6%mZòS_•WWð¸ æ^ž{ µ>µÞôYXÏë|{½¿]OÇEаÎfgsœ'†Ë¡heÑʤ/¢¸Â É·“o¿7à`ÛÁ6€Ö†ÖJa¤w¤à­ç­,¬çu¾®×|v~Qþ‘¾ðKÂ/qƒ3Ñ™(,ܰpÃâï¢ -†m[¶mx9ëå,å9 Ìf¶òA‚è°a=Ë×õšOók=­õ# }}úz! Wþ®äºh¯ŽgÏÐz‘ÛÀ9Î1Œ {ä&Ay•€8âÀÂz^çëzͧùµžÖú¾ÛÊ\‚;";"Ó†ªnã¬q¤cêÀÔ"r¯œ÷IEND®B`‚routino-3.2/web/www/routino/icons/limit-131.png 644 233 144 2515 13061246470 14574 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍV]H”Y~fÆiF°™”QB’PolÃm…°‹ÒÆl¦Ý~­´¤(hWéÂÝ› ¢(J!va½‹`ØB‡V‰~]Bg)j³0CÙTH±m Ó¡Ô¾ï;çÙ‹™3ßT»]{n>Þßç9ïËû~$`Iü Òšcͱºb²µÆÔ;797å·Çä‹iÙiÙ9pŠt7»›I2ýrúeñÌ”•]ù'Çfþd<¥Ç˜ G‡£ÃR—ëÉ=…{ ™1ù×0™Ú™ÚùN'k¯Õ^#ÉPK¨…uää½É{$9U6UFš²²+¯ò%çGý'øi¿i¿i#‹‹r¹o¹/律Ã_yäö-Û·ä¸mÜ&­$IÿLcš,#e”ê¼N’•=î¯âU>•_á)ü¯Ç ÕÕ©—bÏÚÈcËŽ-SxZ'És<Ç4RêQ’4öû9Oʰ “$-´¦¬ìÊ_Å«|*¿ÂSø1>ø¸·ÉJg¥“ä IjwIánR¬×ZµVjò” Ê ¥¢,þ/ÅKRÕGõQR<Ä#~zd"¾A÷ëþÄ…ï2º[Û­)‚“Z M©©ÑrX ‹DÂÍÆˆ¶V[Ë÷òwùT>M‚:Â#qbÿ$Ÿ>|:Q‡od¯vC»aÞ8üK¸>\OŽdŒdŒd˜<íƒöA;ÙØÒØÒØBö=ï{Þ÷ü³Š1üsølø,9š1Z8ZhV\þÃ3ñc|âÄúŽ2ìv“l&Iù=)¦Äç;²:Ò:ÒH[ÔµEÉ΢΢Î"rêÌÔ™©3¤ë¡ë¡ë!Y5^5^5Nf7g7g7“jÔ>¨%o]½uõÖUÒ¶Ú¶Ú¶š ~, –&øÎk^p:8­ˆõµ®WOѼ[_¼¾À`¹D'Ç8^bÓ@f$3’äAyP Ÿá3|@ƒ³ÁÙàªK«K«K¥+–®Xº˜½={{ö6`ͲfY³Ï>Ï>Ï>@–Ë­r+ÔqÀüåÞr Á‡L_œ¾X ’¯'^O˜coøôUú*³¾_¯€ 8΀ÓÔO¯›^7½ŽÜÕµ«kW™s(çPÎ!2R©ŠT™~Þnx»á-888aê ¯Z3 ?ÆÇ ˆëâºeRߦoKÜÄ;^àEB†vA» ]2Ú2Ú2Ú€îÜîÜî\ ¤¦¤¦¤ùCþð<ñ<ñ<B¡/ÚE»h0Œ! !Éǃ¾Cß(>V Z-ëÀÚÛÓÛ£¼ù¾’viÇ¥q ¹†\CÀ¬{Ö=ëücþ1ÿ^—^—^¸+Üî `å••WV^öfïÍÞ›m⻼.¯Ë Ø¿³{íÞ„ú¾Žã¡÷Nï Áçÿ¦’7õ 4§r¦d¦x¦˜œëŸëŸë7[¡½ÑÞhoÈW÷_ÝuŸ4ÎçóŸO¥ŠŸwÌçÍçQ’¢Q4’¼ñÅ©,h2÷ˆÚ+jψâßsö¤¦0…”'åIy2i“–ËrYN2ŸùÌOòŸK\:–/‘ÿ‹{ì?6¿ßÌ4FŒ’™Æqã85žfI›Ÿ ¬g=)»d—ì"ù |V0™ˆ?kø _¢Þw©WÚ*mªRmþû¯\°¯‹û[˜/ØÙÍ€èK*OIEND®B`‚routino-3.2/web/www/routino/icons/limit-8.0.png 644 233 144 2537 13061246471 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–oH”YÆÏØę̂Y¦¶EF°[¬•›Bµ$öG,,A¢¨m%‘±°íJlZl ”`ûC,¡ QA¤dÊBµå 5©™ì°KfÅ´³McºóÞ÷þöÃÌõÚúîýòòœ{Îyî¹ç¼W@DD¦&¾)³Sf§dÅqÊnÇîYçY÷ùù8>­ÀUéª|øL91å@vSv“Ýï`³oü“ãEœüÉ|Æ.SÅ1¸/¹/¹Jø0l^¸y¡'/Žëo·ÕÛúÖ‚ê+ÕWZš[šÙ®@@¸$\6ûÆßÄ›|Éùåð{ü"Ú‘Úáwš;M欙³æ³oâ~ë+Ö<›ôl’NõI¦."D0ëe6û oò™ü†ÏðÇõä®Ê]%›¶lÚâmŒôŸƒÚüÚ|ÃkŽp„L°"V@mSÛ}KßÀ… lö¿‰7ùL~ÃgøãzäÝÚ6¬FW¥U¥1€Øï «Ç`?·ÖXkˆYƒ*]¥£ušviÎ "ä@ý•.ÖÅ`=U*­¿µz­^b Þ¨7@Ôä¯rW¹À†ÕI¥Yð3xÞ@ä¢þˆß)M¹¶ÔVµ•(?ÒBK’hˆÌœÅS ,g9Ë“ìkÙÏ~ B]V—ã²€rþõGýQçOèI;}öÚsx`’:ðà—LJúîúîúnè+ê+ê+rxí»Æ®q°¿×ßëï…“©'SO¦Â@dàåÀK'ŸˆõÆzÇ£ ÇùzÂî^_x vüžìLDŒ]ë¿vÿÚ}È]™»2w%l/Û^¶½ ò;ó;ó;ÁwÀwÀwÀô=A¶¶¶Â¢‹n,ºóÇæÍƒpGøRøÒ¸û˜þÃðÅùž‘¬›Y7¿\*²ªtU©JDÄÕ˜¨´Û¾eßµïŠx›½ÍÞf‘²½e{ËöŠÌôÍôÍô‰ ïÞ1¼CÆW{i{i{©ˆ»ÓÝéîé)é)é)™ìŸìŸìiÏmÏoÏwwës†/Îoô¤ˆLª˜TÁ"©m©m"®Ý""2‘¯>}5ãÕ ‘úèsÑ\4^®p%'þ®ù¼ù<ùSîm¸·xâœtN&òµž%a]߀¿Ýß¾üUƒéÏÓŸ[:Â'Ãáˆybž˜Çâ¹1|cøÆ0œm;Ûv¶ ÆÇÇ­øhãhãh#œ9=|znï¸ýÒí—¬W_dùHùßö¿­·¶ë›%a#­|ú*ôp@µ€ùÈ|D²g]«ÇöÝöÝöÝÐçëóõù V+Œ‚Óëô:½à«ôUú*¡rsåæÊÍpªúTõ©jØXº±tc)ì÷ì÷ì÷@ÙPÙ—e_Â÷W¢{£{I.Ék1‡‚ýÁ~-l¤Õ&Rº>*òd1Yš,•¢ì•×-šŸk~YÖîgÜϘ?À\|.nµ½QŸy.óœµ%õUõUõUp~âüÄù Ën·‡Ûa[×¶®m]pdüÈø‘q¸X~±üb9ì8³ãÌŽ3Pw°î`ÝA(o-o-o…ۯݪ¹Ucñ)™ž­G x x@õ`ÎlŸÙnwÆmÙµkÖ>„àPp(8qGÜw@Á|Á|ÁÿÔ‡S‚ÖcIø¾±ïÄ6808 ºWß”mª@HJ{VÉ*Y%"®)×”kJ$âx#^ÓkzM¯È5×5×5—Ⱥ‰uë&DvžØybç ‘ÑË£—G/‹”ì*ÙU²K¤ÚVªN‰üí¿McMcŸ7í³‘P$$²¬çÿu%ý™P&du傹ðdá ¤V§V§VCòpòpò0<0˜LˆGâ‘x¦÷Lï™Þ©©©:™:™: ³ÁÙîÙnPQuªÆ!ãp‰o™EWn}œ3ΙD>Ü5îÖ³ÙlæqÎ$Jê^Zñ$VM¨Õ¢Z@]U—Ô¥ÿªŒ?ãç1Ëslë½­Àâα?˜üé¥ÉŒ3b@‰Ñj´’æ}@ñNv°ªOUPAEUTEA]R!|ÀÀ?@©¯MÆ&ÒôÇã9“ߨ—¿/_¯ÔŠÉÿÔž•Oíí⩽=7Øß}Ú aÐ.–§IEND®B`‚routino-3.2/web/www/routino/icons/marker-47-grey.png 644 233 144 6174 13061246466 15643 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü 1IDATXÃ…—}TTÕúÇ¿{Ÿ3 3a@â¥ð…YÀÈ8¢ ^­A¹)eb7+‹â’Nñ½ÅÒKJÁ2-ÑBs-À~ëV‚JàË,Ò)¤0ú±t1¾Fò6ैÁÄè 3gξ8-ïmõü³×žýò|æÙßý<ûÂÂÂÂÂB¨pßl÷ºŒ¿Áßào0Sá…_~ÁЇЇЇþ¬e,î}] ÃÅð…¯M'ŒF¶‡p‡H>4Ð@ èð^Ãklxoãm(မÈD&€‡ñ0†c"b"b"Oµ5·5·53W£¦QÓ¨‘¶þòÄ/OüòÄK)#•‘ÊÈ%¾îîî+ʘ˜áF:]JvÜÛqoÇ=ÍhFsÄ4ÞÈycó1ç¸sÜ9>ûIõãêÇÕ‹‰ë6¯Û¼n3_­S©Æ F0‚ ‘E³h ]èB?øÁÀÜÁ1ˆA @ºI7醈۸Ûàmþ6›?zë>©û¤î1½÷ûÞï{¿çÏû(|>ŠÓÄ41í±õx á±~;U˜f……ÉÂda»Ï9Î8Î8ÎÌ~R½N½N½N|ÊaÈ0dðçU •B¥@°Ô*µJ­“ã130 ‹Éb² }¤ô˜Ù˜  íh¤"©H*/¶ˆ-b ƒ`ïþê§ÕO«ŸŸòú÷òxùH±©ØTlJwšf§ùŒÙßîo÷·³¨,k–5ËJ̪ÏTŸ©>eÉ,™%ß4‘&Ò°‹ì"»D0s0€  ï øo¶ °À\ÁŒÙm‰¶DH«*VU¬b c>c>c>Äâ“à“à“ðdÏ4LÃ4;ÿâ\‚K’w%ïJÞ…Õת¯U_ÃGj‘Z¤(im¢M€€˜‰™˜K¾%ß’ªñó‰ŸOLì¤î¤î¤8V{¬öX-P—U—U—ÔíªÛU· ¨tUº*]€õ–õ–õÖä2].HDʽ<^>~bdbdbÿ§MÕ¦jS‘¯hQ´(Zà`¬€@‰XÄ" &b"&`ðõÁ×_NÍ?5ÿÔ|@Èr…\€„‘06š—ž—ž—`%Vb% wËÝr7Pkª5ÕšûóöçíÏsísísíKbI, ¼Ð"´-pÌJš•4+ ù—G.\Á^Š÷ðÞ#ZCkhͤ9 a!, ¯WÈ+€s‰s‰s päΑ;GîZ­Öª…j¡pÝvÝvÝžå3ùL>s вڲڲèÑöh{´ÀÚÞµ½k{§æ3S1Õ”ú2}™¾  ¨ Ê…sá\8ûrlÑØ¢±EèW‰«ÄUàhí¡=`Þ•Æ7oßBT!ª°vçÚkwÎÍÎÍÎÍ€ì”ì”ìÔ”cRH IáTÿ›¿ùø›ùUó«æWA=ôÀ´LË´½J¯Ò«“þ¸»—ï^¾{=TMÕT;¤¾ø~àûXÚÚÚʾ¼Rs¥æJ €2”¡ ãVXaÐ:³ufëLÀ>d²ÕÛª·UoÈ~²Ÿì§5Nkœt: €©‘ö¶ö¶ö6`øððááÃ@"ŸÈ'ò¿‰ä*¶Š­0€ `¼wMïšÞ5€eÀ2`À‡¾=¾=¾=b)uX‡uE‡øåür~ùî4æ4æ4æ¸ÕA#h®×/É/É/ cñññðwjœ§wˆ;Ä÷÷÷@’ƒä €„ d äRå¥ÊK•@ÄîˆÝ»• TÀºY7ëhÍ¡9˜ÓÅt1ʯ,_Y¾²H‰D$"éy¢'z¢ÿÔÆ‡}ö]Øwï ÏýëÈ‘‘##G^î­‰«‰«‰so1l0l0làJ_ˆy!æ…Lx*ÜÉœÌÉ€ÓvLÛ1 H‹I‹I‹4FQcœçœçœç€îÀîÀî@ åFÊ”tÐA°XËbÁîAn|×ø®ñ]ÉÑoï·÷Ûéye¿²_ÙÿãzW½«ÞU¿õí?Ó¦ÿ àjr5¹š¶Ÿ’…d!ù_Ÿv6t6t6p¥¦¥¦¥¦¥l¹нннŒ;ËåÎ{2ödìfêgêgê§"Iki-­žYòÌ’g–óÊç•Ï+ÿ͸HE*büÚökÛ¯mÇê º º :ªT„+Âá÷ž¥D)q} WËÕrµã!<=DÑCœ h@Ã@Âý *›”MʦoÑœÝœÝœÍæFäEäEä‘£ºKºKºKHcñ,žÅC9ïæ¼›ón!BüÍ­/ãËø2`Y@€E±(59„’\$ÉEŒI‹¥ÅÒbÏâY<û›y ×p ¬’U²(@ 0áõ?}:ût¶{Ëè¶Ñm£Ûøýòhy´<úhIÌž˜=1{>úE(B9†nt£[\á­ÆúЇ>ñ:r‘‹\bԞОО(]ë›å›å›u´dtúèôÑ鼭ίίÎϽÅëd’L’‰ ìÆnì0ŽqŒ˜ù˜d™FŽ’£ä(ä-–K‹…-omjmjmâJ…P!Tí¿ç¬rV9«ÞzÿzÑõ¢ëE³0 ³ Àãçs/¨ÃÓÖH~’Ÿä‡€«7¯Þ¼zpæ:s¹o½/ BàšÎúÎúÎz®Ôôœé9Ósl9ÙD6‘MK‡¥ÃÒa0( €`¿²_Ù¯€ç²Œ[†-ÃmˆkˆkˆC€0( ƒ€´HZ$-zë}ºî£ûúïy¤¸ß“¼R½€xOÊóI"÷t=GÄ•Þ×®{ I$‰$qùÚûŸßžte»²]ÙÒß^’^’^’è2Ý>Ý>Ý>¤IR‡Ô%CçÐ9˜óÅ|1òƒÑ£F»c.\ÌuùÆùÆùÆ•.aã·õ¼T.•Kåü~Ïɾá=±’’’’’ŒM>Ä -¨-¨-Ÿ5››ÍÍf’®ìPv(;I-©%õß~à_ä_ä_OŠJˆJˆJ #«=íøƒ\~Çôz½^¯ŸL8ṁù0’3;;‹ºgºgºg^åQò(yÔ³n­¸µâÖŠ ¶v[»­ýïÕϯ~~õs÷Ò;®;®;..W¶L¶L¶ì﬒U²Ê#§!‡r®#Áˆô°÷<ä!øûíÃLî"fdFfÔwÓãô8=Þuoͽ5÷ÖH±²rY¹¬œ¶sÎÀ¿>}<úøŸõ–nK·¥›|-…H!RûÔ³o½Ðñ{`hד.ÜEØ„MØÄ_"$ƒdœ‹f&fb¦í™ŠYŠYŠY´ëãú¸¾YÒ^i¯´7ûfÇúŽõëû€ð¦~ïÃrü8þ g¼€`§WbIEND®B`‚routino-3.2/web/www/routino/icons/limit-68.png 644 233 144 2425 13061246467 14533 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÊIDATHÇÍ–]HTiÇŸSÇݘt/’)¥]hs+\,öBH%SS0ƒ Ñ i­)–…Úí¢‹(J'b ‚1]ÙØ ´J‘5FW« 1J£A¦h!’R›ÙñëœóþöbæÌ9»lí­ïÍáùúÿÿç¼ïóœW@DD–ÇŸΕΕNwÌvÖ[~W©«ôÓŸcöe;;F~€e—]ð4{šg–mÆÍ|{½ˆ…oç3ý²\,GêõÔ뎢¸} v¯ß½ÞõIÌnêƒ´Ž´Ž¿48póÀM€ö–ö¾±ûc÷"E‘"°l3næ›õ&ž_Ný‹_’ï$ßq¼„Ô”ÔÈÚšµuõ·±„ðj¨¬¨¬x•ô*I9@–²TÓLc® ›mÆãùf½‰gâ›|&L@FaF¡TUWU§bÏÚà˜÷˜×ä[èh`)hÓÚ4€^«×2ªOõàÀ–mÆÍ|³ÞÄ3ñM>“?¦Gþ¹·þbØéÚéJ`ZïÔ;Œ€`A}­üÊÒµÚ0æŒYc6ñÅ0ÂÆ¨1 ÚZX ƒJQ¹*FƒÑÀszÞ¨8~‚Ïä» Ï„´±´±é%0ªê@Œ¬Œ&£‰(ŸQE¨IõZ½¶„ð‚¼åS>åØâ~h2( À8cœ!ÊŒ‰çKðÇôÄ…]þ|'|'ïknjSAŒ½ÀóíÏ·?ßþ6›¿ †j‡j‡j-=:ôè4=lzØôžæ=Í{šgÅÕo*¤B(æµImÒÎgòÇôÄ… }צ®M%Ê÷«wÚís¦'’ÉäB~0?˜„’7%oJÞ@ywywy7\9åü•óٕٕÙ5]5]5]àí÷ö{ûa°}°}°Ý¶å¿.T,T˜øj¿ÅÓãqÝÁ/¿)ÜR¸%¾¿â¨ïä’\’TÓÓ]ß]ß]/ö…}aŸHFNFNFŽÈæ¬ÍY›³D<ç<ç<çDRSSE¶mܶqÛF‘½+zWôŠÌÌÌÌÌ̈µÚÃÎaß°øczœ"I•I•|!’|+ùV¢lRÆÅ-n GïÐ;ô‘ôPz(=$RWW'ruàêÀÕ‘ÎÖÎÖÎV‘ìììììl‘æÒæÒæR‘ÈTd*2%’~;ývúm›°V_‚?®ÜAwP]‡±¼1ÛYÐÿÔîjw-û†ÿ†ÿ†6íÛ´oÓ>Ë_Žx&zb<1¤½Ô^j/%=^×ã%Åv±]l'SRRÈÔ‚Ô‚Ô2ÍŸæOó“7ý7ý7ýd\\\?™Å,f‘LÊOZ™´’|Þú¬õGFå¹DÏ…Î JXÛ+ÛÛ013e,° ,§ÍW|þ€„ä„ä„d`\â¸Äq‰@ݤºIu“G³£ÙÑ t\é¸ÒqHhHhHh*´ ­BæÌ=˜ Ô£õÆŽ;qìDàAFû¶ömp„~(Ëiî[V¿¬Pz¬€mm S5fpÌ ÔðÉetѬ·®·­·)ÞoŠÜ Ü ÜäcùX>bZcZcZÃu.á. ¯,¯,¯ X•±*cU0gÿœýsö ÿXxjá)`ó›ÍŽÍ“Ïï¼í¼ (=V@\×,F®‘NLD¼ðš„üÀüèA=¨¤GI’ïf¾›ùn&àìì ø²}Ù¾l` d d Xš¿4i>P¸¢pEá àø®ã;ïıOì‹àÛjÔµ€Òc´L-óA ¬ a[0GFÉ(|VžØæØæØf p2p2p˜ÿ|þóùÏñ âij+gWή6Öl¬ÙX8ÚmŽ6 ¸¸¨9Ts¨æ0¥vŠgЍծ¶]mSøÜ"Œúõ7€°žÿ;•¬3.—ÌSéO÷§ùÓÈûˆ}ÄѧÊE¹('}U¾*_)}Ò'}äpëpëp+ù>û}öûl²§¡çFÏ ²÷÷Þë½×)?*ùTÁw¥hVѬ¯Ner9é|ë|«ÙÉ®`WÐìc¤(…¢Î/ÇnîænRhBæ•Dé’.é2ãá¡SaÈr‡Lü®»]wIÒ©9µ¯úØt~]uþ`w°›ä„àÞà^ê<À˼lö!V³ŠU¤l‘-²…d ïó>ÉYÂR^–²“RÞÆã©KÑgô‘üM᯳­³‘ |Õù¿Ù»ò›}]|³ï±oóû_;¬iBh¦aIEND®B`‚routino-3.2/web/www/routino/icons/marker-25-grey.png 644 233 144 6340 13061246466 15632 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü •IDATXÃ…—}TTջǿûœ3/Ì oIÞQŠ˜Å‹N¤ˆ˜zEyÓäGi™/T.­¤^úµ\Â5p©ƒƒ†Q$‰Š T?½ˆ ’šÊ.i¢.%(üÊIȆ f˜™sö¾0ƒkuW«çŸ}öyyžÏ~žï>ç9D¯×ëõzøaÜ,ã+ô ½B/kÒ××gÿa4 —è˜?ógþ…o‹Q#j¢3 ŽGû•¨D%ÉE"ànဠd ƒ} X¡X¡XAr…{Â=áÞÕJ2D†ÈPNEÞ”¼)yS¾¹™¿>}þz2 †ˆ!bIç mn.?np>æc>w’¨h›sÔ9ê}rŽ¡ÑÐhh<Ùïp8L—lQ¶([Tô«KÔ%êœNŠNŠN"¹1²YŒ ˜0'`Nà™{®{î÷<ïñ7áßÏßÃãáÜ\È|˜ó¡o4’FÒBJø>„ùîÓÑ£'FO<ð„é Ó&)+éVÒ­¤[œ+²#²#²ƒ¤(r¹Š\ذÛ±*Ø`ƒ À›xo˜Š©˜ ›#ÈäBJGkGkG+s}ñmÄ·4ëáÒ‡K.}}¿*D¢ Y ”Ò¤4)-±„¥³t–Þû·ìÛ9¶s @+ZÑ4Ih„†ÖSN»Óî´?óíbíbíbqþªwV½³ê᤟ÕÏêg…“1“!²0ÆÂ à6nã6oxÃÀF0 áH7é&Ýñð‚ÅÇâcñÁãaãaãañ;-wZî´å^r/¹Wß9q…¸B\±(‹°‹îþÁ/K^–¼, “Éd2ùÐEÛ^Û^ÛÞ¸E¡Y¡Y¡YbJúªôUé«„óÊre¹²¼"…H!P@€‘9‘$ä‘<€!GÈ€\%WÉU€Õ³zV°ÀÀINÉ)9¯I^“¼&ÎŽÎŽÎæÞéc}¬‰)¥¥¥»•Ê eF`²¢WÑ«è­+'†&C“¡)y޳ÝÙîl?×îcõ±úXYèFóFóF3i÷«ò«ò«GÓÅt1|¸ï¹ï¹ï000°Z^±¼byô¨î¨î¨ŽÅXÕVµUMzä1òyÌ?bÁ"XÄî•.µKíRñ†xC¼I~&?“Ÿ rš@hT\ ×µ÷•÷•÷•À¯Û~Ýöë6`Òà¤ÁIƒ€6J¥ø·ø·ø·ëëë 7£7£7àœƒsì;ÅN‚]° v ,=,=,>~õ~õ~õ°ÅÆÆ"ÉXg¬3Ö² Y,h÷JN CÅÐç7ú?ðàÿ<—ð\Âs ¤÷q÷!çÎsç¹óÀω?'þœ*>T|hÎnÎnÎ>??ƒ'O bÂ:vì<k;Öv¬ øjÙW˾Zœ^}zõéÕ@}a}a}! uKÝR÷ÄcòHs¤9ÒLÊ=<>lÞ6¼m˜~prÁÉ'0Ò³ô,=;1g³ fÌbìô¼ÓóNÏ{|Þ|Ü|Ü|œ±,G–#ËÁXßò¾å}Ë3Æc±ŒUWW3æ<ã<ã<ÃØè…Ñ £co³·ÙÛŒW”1ú1ý˜~ü8¾‡ÇÃÇá}¼÷IWÃÕp5+SBRH é‘ôHzD~ùyäçÀóÏ>ø8s€ò%åKÊ—!A]J—Ò¥@ç†Î €}GöÙw8 þ@<Ðaè0tt¡ ]kfͬùq|n·Ž[à(Žâ(‰àx ¯á5ì´u®u®u.þ-f‹Ùb6xÆaãsù\>X>{ùìå³ M&H\ð¾à}Á8ª=ª=ªÖ,¬YX———¶2[™­ ˆö‹ö‹öRÇRÇRÇ€§6=µé©MÀ‰”)'R€‡;v\3×Ì5ƒ¹AùÑk£×F¯áßœ–ÓrZv»5»5»5ÎÁœY9³rfÑ}W¼¯x_ñ~\ÏÁÃË/?¼ÌX)+e¥Œ±¢w‹Þ-z—±kô½Fcz¦gzÆ$»d—ìŒY˜…Yc® W…«â±TÆ Æ Æ Ûõê®Ww½ÊØ• W6\Ùð8^wJwJw cÛ“·'oOf›ò>Ìû0ïCç ‡UX…Uy•‚^Ð z’kê5õšz%íЙ¡3Cg r¯ÐZ3»fvÍl@ iÌ4f(E¢ îwŠ;{Š=Åž.?\~¸¸w1îbÜc©Ü(»Qv£ `—Ø%v ˜Ö7­oZî˪¯k¾®ùº†Î'=¤‡ô ŒHD"Ò§rRölÙ³eσ-ƒ-ƒ-U¿ŽÔÔÔ¯ ÒÍÖÍÖÍ–¶®1­1­1ñÅ{{{pȮˮˮC!ä9B ‘ˆ°ï·ï·ïÒ2Ó2Ó2KŠ%Å’Ô¯;^wP…ªBU¡€´GÚ#íbŒý1öG°eýËú—õƒÔªkÕµjj»d¼d¼däT*I%©¤ŸS]®FWã¼Cdç/;Ùù €Ë¸ŒËÓÊ*e•²Ê6¯Ñ?Fÿýã™ôؒؒØ–03gfÎÌrþÁ'>yð Š?ÅŸ!©$•¤¢RTŠJ@Û®m×¶þký×ú¯îm½·õÞVà^½„{ €ÆWã«ñ4qš8Ml7’n$ÝHšª¦ª¦ª&|­R ©†Æ–2žñŒ^ƒé˜Žé›®’«ä*ùv˜`‚ÉC³hÍJ+UÊ”2¥ì;ü´ö§µ?­eφ—…—…—‘ê9º9º9:¬`Q,ŠEAEfdÆÿÿò`¦a 1kÌ3 Ñit€›¸‰›°Zë­õÖzøœ-8[p¶@ÔÊGä#òãíߊñ"^ìÜÄŠY1+‚Ümž3Þ7 »I)#eç3yoâMY tÝC÷p‡ŒÆFc£¸yhÝк¡uP‘•d%Y +J§Ò©“1“xïá=f˜aX+`  4`B‹>çªÏUŸ«–¶‡ŒCFá bŠbŠbJu~øGá…´ÿ;ä!yäºÑn1ÑÓªÑ~ô‹71 ³0‹4èè迬<¢<¢@ ÿ%Q¸§îñÅãÚ•¶’ùd>™Ÿðòø/Çwõ®Í®Í®ÍôŸ¯Ó×é딋,Š,Š, ÚE»hTÜtn:71WÌs¡( + + “Âæ ̘ÇßVÎTÎTÎ,^0¾i².ÒrZNË…ƒîʾë©X~~~~~>¬žŒÂ}bBCnínuk÷ )!%¤äüW\<ÏÅg5 éHç5º].q³¥ÂRa©€Šã8Žã0ìÉÄ7öoìߨ©ínùÝò»åümåå厛gf‡ÙaÞ±ÿö ·_¸ýàÔzÞ§@ß蟀=7¨Ü~ÀlÁR¯«ÓÕéêŠ_VnTnTn¬ÎÒ i†4‚åKý—ú/õÒVwGïÛÐЀc­í­í­íä U—ªKÕP-ÕRí?ۄׄׄ×ìÿÃ=rÇ{Ñ=ÚÿÌÅã/,.....¢{ÚÁäLÎää¿f ̘IOKOKO_¡ŠPE談~Oü=ñ÷Ä€:K§¥ÓÒÉ>¾þÅõ/®!-q¸F\üY¬,V›Ä*X«øŸ³P@ðèTO܉ÿÌCð7öÚ5  Mh’òXk` qÝ\-WËÕ~:¶|lùØr:CV.+—•s|:ŸÎ§ÛVVV»$®§»§»§›4Ó'é“ôIö©Ûo£ÐöWþÆþ¤]÷ëBÊC&2‘)\%ëÉz²þÃXkbM9oz{{s|?ßÏ÷›ƒi!-¤…›ëJíJíJÆêöçi,íÇñ+b³ÉIEND®B`‚routino-3.2/web/www/routino/icons/limit-27.7.png 644 233 144 2766 13061246473 14700 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü«IDATHÇÍ–oLTWÆß ÃÈ@¥qƒ)b#˜¶ „uÛJcʸӴu"‹›"%Z‘t⮂¤5~°I.ºˆÖ5j˜¸iºIéŽimMXâ¸`ÛmÆi#°µ[Ód·Œ(÷Þ9¿ý0\ît7Ùd¿ù~¹÷ý÷¹_ÄÂOæ3ã²P¬€£ÃÑasÏùàÕ’WKÒ–ð[‚à<ï<_‡úOê?œ œã70Ö?Öð£ûG7X¾™7ëÍ~/_ü¿¤~žú¹íàHs¤‰À/<ñBþ®DÁ|¨ðVx~Hù!EÙÀˆ.\Ê L2‰iãI¾™Ÿ«7ûM<ßä3ùó,*_T.•¯U¾ælO4 }K—˜|Úyà=ÞÃú¤> `Ô5Ì€ ª 6l`ùfÞ¬7ûM<ßä3ùóX[9%"rÄ›†7 Cü[­OÿV{L{ Ô/u¯îES£,a J×õ)} Œ×£ »a7ì üª]µÏ¯ ꂊª(Ê°ÏæÌæ µš_óƒþ¯¾êy¥ù•fsÀ#k+{DDžnç¤srò5;Ü7Ü`=¨çÕóLñ.9jVͪY‹˜)¦˜âÿ0•¯òç;ÖÃßb°§Û‘"‘=+eaížÚ=™º-ö¤ÿI¿Zyý`¸1Üh÷üþòµË×o•w™w™HFQFQF‘H`s`s`³Hf$3’ImJmJmYS³¦fMHA¨ T¹¾¾éÒºîuÝqrU»ªÅ™Úd ÙBÒYVQ1P1 Væÿ}Ç™g2uõÎ 9!{þ*FHD$´>ÝýénøÛoo–Ý,SÛ]÷œï;ßgÆ]ï®q×ÀŠ£+Ž®8 ÇöÛwlxr=¹ž\(ï.ï.ïi—vi‡î-Ý[º·XëÓ[Ú[Ú[ ekËÖ–­…uãën¯» òf.mùºðëBµ>óæ}:1#g2Ψ˜ O…áϼðñ…¡ùwM›6ZEÛŠ¶mƒ³;Ïî<»ÓŠwww@]K]K]‹7BFÈqÚ8mœ¶â'»Ov삺w·¿´ý¥¤ Þ99|™u(ëê´ìôìôø ª®®·~ûþÕ}ù}ùPRPRPR[—o]¾u¹4¾j|Õø*(v»‹Ý0Ô;Ô;Ôkåã{ã{ã{-?Úm‹¶Añ@ñ@ñ õ~4ø‘§~}6ú,0›íÈvÄ%Þâòº¼ªbûcû!ìllg ½1½ï>¼ëð.˜¸8qqâ¢EÔZÚZÚZ nÛãöXq­P+Ô adñÈâ‘ÅIõ­­ànpïu' ÿÕÜËØØãcFVOVê°«C÷;ïw†¿ùâÊWDú^ÿfÙ7˨3D»¡ÝÙÀ/…B‘Ü¥¹Ks—Šõ ÔEÂWÃWÃWE6¤mHÛ&ó[[[ Rå«òUùDÄ/~ñ‹ôçôçôçˆT–V>UùÔ|ù,""ÔIöåk—¯‰HʤgÒþJh9u| ¾˜îˆÿüŸ/>7úD‚‘›‘›¨Qßè£oÀÌ¥™K3—ànõÝê»Õ0œN“V@‹kq îøîøîø€fši†XYì™Ø3ð ïÁê«Q¯×Ið³éÍ&SÏN]S7,1ue^Ç’uç¿mŽøØ 3Éõƈ1ò3† ç˜sÌÒ1ùé©~ÄCã¦úMõ >ÐúÔ—†Ëpú“>¡O ñ!×¹Ž"Ÿ<ò€ý¼ÍÛIÄ·ùžïAEÔwê;ÀHüt,2Þ2ÞBãÃm¸ç¿È>ôª”ªs¥’•ÿá=+ÚÛÅC{{8o°ÿ-$ #Qÿ”IEND®B`‚routino-3.2/web/www/routino/icons/limit-27.4.png 644 233 144 2766 13061246473 14675 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü«IDATHÇÍ–mLTgÇÏLë R»>ˆi;ø‰“¬5«–éÛ¤fgZŠ`Ù…º¼éöKGSlùPÌÚt—JM4Ñí„8vcIWš´$ÆJ‹Ú´¥¢.cÇí¤Š`é@ªLœ—;Ïo?\îÞÙv÷»çËÍÿ<çüÿç>ç>ç>""òÐÂSÀºÒºÒºTÇÖ?šþì糟/þPLJ4°l²lºÚùï翰̟̿šØX7â3óELþL=Ã/‰éÈ:‘uÂâZÀPë¨udè¸srúsúçRÐøQãG§zOõ² nŸ¿}àg×Ï.0±±nÄù_&¿tüB_}¼ècËe˲‰À#TØ_Óþe‡JO¥àÖ·PVÐ"@.¹ÊD‰bØt6Öâ|ƒÏà7ô }½åÏ.Vª^©z%ç=!€ÝE»‹ ½d?°ŸýäB*šŠhuZqPCj 0±±nÄùŸÁoèúz=f+c""ï•CM¨&éËÉáÔåäÃɇAý.åIyHªIŠ(B¥R©X*ÚV­N«ͪY5+¨>uRÄ´[(H7¤Hª­Uk…´]ç‡Í²Y€Ÿ }£•gDDJº!'š>¨¡áÐ0ЀÔ3êbìãÞ•P •ÈŽ#Ưí÷¸—K(¡ÔemN›ûO†›¹Ð`h }½°’nᶈȡÏÉojhj0XÒ¿½’õ­ï[tåwåuå¡B;Bõ¡z˜(ž(ž(†î¶î¶î6ðoõoõo…ÀµÀµÀ5Ÿ Ÿ gì˜vE»¢]1ñõæëû®ïC+:“&ßÔSɦ¶¦6Ð;wèskúG‘õÿ»ž¿ÏïóCÑŸŠví‚?<ñ2/gtZÛ6Þ3Þ°ô³¥Ÿ©BrYö²ìô˜jŒ¸#nóØŸß8l¶ƒ£ØQì(†í«¶¯Ú¾Ê$šÞ0½az¬q­q­qAðlðlðì¯?µ^g¯³× …S…S…Sàmõ¶z[¡ø€½ÍÞ?”MŸ8Î4Ü}ñî‹ šó÷äïI=¨ºSÏ¥ž³ŒYÛ6‡”޶}AŸ,/ßS^]^-òöPG¢#!Òänò4yÌ‹‹‹‹ää䉬v­v­v‰Ä÷Æ÷Æ÷ŠD]QWÔ% V°BdÝÅu×]==zZd|ÑÍ‘›#"ÿüËØ7cßÈòGeãÔÆ)úµwµw-c’úˆÈˆ>)û¤ jÇ¿:þ•zuÑ)ëKÖ—ˆ¯ï]pýAX\\„sÉsÉsIØÛÛƒ.w—»ËÜi"Έ3ℵÃk‡×CıElæºÿoþTñ<åyЏîU¯jsmÄ't.œJZ^oyæ ôSòÓï'“N˜šø~â{ÔdËdÃdÄãƒñA˜Ý2»ev ÌÍÍ™ÂéÙôlzfFgFgFAój^Í ªF½ ^€ùG矜u'<}iú0¢ë¡5¿Ùü&0¥×#ÆÜ0çÈÂ3æ Ê®ìÿsRéÖN;íüK Ì0à 0§ U!1ÔÒÐ[ÐWÆû¯¿ú{åì®i¬iÐ'³úRËÕrAý=u'u‡$r•«(ì¬d%ÐÆ¼‘QÈMnpÔj\ãz¯ Ý’n!ÉÛÚÚÀ6Û6Û€ø/'ÿýû¯¼oo÷í}ìþ¼Áþ|‰GüªEÑIEND®B`‚routino-3.2/web/www/routino/icons/limit-0.0.png 644 233 144 1367 13061246474 14575 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܬIDATHÇÍ–?hAÆ¿=5wòǃØ)ØØbÀ69P<D’"¨XˆURš"…•¦V†€ØLLH+zêZh!BÊ9°84&¹ÛýYì¼ÝM1&Žfy3ïý¾™ÙÝH’Žº§ u"u"Õæ©ñxf 3pòi˜?j€WôŠŸîBçTç@n:7í/ǹÍ[}²_ŠùI=×QÅéÙô¬—wù\=}õtæX˜ß/Av.;÷£7Ÿß|ðlæÙ ·¡R®”¾ç¿ç!ÎmÞê­ßxI¾&véKpdéÈ’÷Ò-é º/t_蹬öÀ¥ÁKƒ_}=¤ ±´Ñä5,ª‰Üæ]½õÏø¦gú¡AWW¿—‡.e‡ ËO`ìøØqÓÛžîq6¨×ê5€ÆµÆ56!(%<<ˆs›·zë7žñMÏôC?Ú¹·ÎÕ̕Ldè-4Þ4Þø#þÛn"¶] Ë·£jâ~ãßôL_IC§B¶’­ÔÃJc¥/‚?ìó3!¼É&{‰]õ;xc=Óý8c^íñ[ãQó™ÄØ íÕÐß ;ùþ™X?ô“ ×íÜ‚Ô7Ú7ê–QÞYÉ›÷æµ%iCò$¥•Ö~Âú/â;½¤þ¹AÇËŽ—Á,Tz+½;ŽJ9(ÿñ í7/â»0ýРמk÷?Cõ[õ[TU…`=X?PC»ý%ùÕX?ô“’üEÑû,Õ õB´ì]’Vµ¾âß÷ëÂxÆwz¦úIIµ|-ÿñôêÅ«Qïu)X Ö´%é—~¨1Ç‹øNÏôC?îð¿/H¥ÉÒddìƒD‘¢Ò’ZÕ*$mæ?Ãú/â;½¤þûB³ÇšòËß´ÿʦ½]ØÊ5Ý}LRÞ`Ñ¡•yWàÅIEND®B`‚routino-3.2/web/www/routino/icons/marker-43-grey.png 644 233 144 6200 13061246466 15625 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü 5IDATXÃ…—PSÇÚÇ¿»ç„„B@‹R­H&€(aZÀ_W[D®•ëk±¾ñÖ*¥Œb«Õ{kµµÒÊ¡Sk-¯Tì/N_«‚`¥ÊD„A”+-S þ€ò› ‹B,F$œì¾à;Þéôùgg÷ì>Ïç<ûÝçì!©©©©©©Pc†&ºTì»Ä.^–z<õxêq>Ý`6˜ æ¿ÎåÞÜ›{òºä'ùI~á[l%¶[ ?€<ä!$#ÁІ6´Ø‚-ØÂÈãäqò8’,öнbïõ<2HÉàÞ£iÓÒ¦¥M»Øœ‘‘‘@ú¤)@ ±ìG'—šN.Â",¢ùÌÀ ÌÀ~´ØGì#¾£Áh0æwÛûì}ö¾Š«Ög¬ÏXŸ W•­ÊVe£4<&<&<†$GºEºEº>>>€«ïzîšïZïò7éßÏßÅãâ\Â=¹'÷dÉf²™lÈ„!àÒ7#'GNŽœœí3¥bJÅ” Ç˜¶˜6:ÚÚÚHVÉ“åÉòdXñ>ÞÇûP +¬‘ˆDOá)<«m¦m¦m&V5V7V7VóñÊàÊàÊ`¶ûþŠû+î¯ØpH  P,V86;6;6/ÏæI<‰'um$  KHÊXÊXÊ€jT£zæb‰X"–TÚGí£öÑÙÓ<¯y^ó¼´H¿C¿C¿CÌW[ÔµLÅTL…Äy „ˆv´£€<à`Ä ¤ƒtHèG?ú!yyyâÖ™/Î|qæ iã­+·®Üº"þ,s—¹ËÜÿ}AŠ“â¤¸çÖã9<‡çzR÷:÷:÷:ÀmºÛt·éûÿe½`½`½0ûo½F¯ÑK«’’’ÄŸÕîjwµ;¦²ZVËj'3&ÂþðˆŽèˆ ݤ›tä*¹J®ˆA bö{‰½ѱձձP¨GÔ#˜êò¯Y«Y«Y+­rÅwñ¸øDiX–†c#ìUö*{U³SôSôSô\«/Ðè Ä:Ä"±°ðÂCàIçÓùt>À)§œDI”D !Ћ^ôX‡uX›ä&¹ a2L†eœ)˜‚)àIAA‹þœþœþœ˜Ÿ»6wmîZ®µœ³œ³œK0!‘ˆÌ <˜óàôµãQãQãQÀ²Ën,»õ1õ1õ1ÈX «a5ð$U¤ŠT A"H`j05˜€ÁSƒ§Oðƒü¾š¯æ«®]3ºf× ¯^+nÿvû·Û¿ô0=LÌÈŒÌOuŽ:GÙ²›Ën.»‰‹JZI+i¼áÝïÝïݺ(]”.Šä8O›Œ¶ÒVÚ ðXËcÔ¡uÀ¯›~Ýôë& ÛœmÎ6]².Y— “V__äÅåÅåÅMMMÀWs¾šóÕ 2·2·2 «éjºzr™L§Óét:’ãâqñaσ=ö<`òç/Î_Ì]6Â>`°8gÇÙqv|rœ÷néÝÒ»…ó³>Ìú0‹óä•É+“WrÞ8Ð8Ð8ðhÞ;‡ß9üÎaί”^)½Rúh¼&¿&¿&Ÿó½Ú½Ú½ZÎm:›Î¦ãÛˆ‹ÇÅGñ>ÂG$˜Ñ"Z4ùfrîË}¹/@^%¯’Wûbûbûb `¸`¸`˜+›+›+T6•Meì—ì—ì—e4qkâÖÄ­@pMpMp д±icÓF iÓþ¦ý€Î¬3ëÌ€,^/‹x!/ä…âÓxOãä"¹$˜ ~‚ŸàÇO[æ[æ[æ£SZ)­”VB ´“v‚»V–¼UòVÉ[€¯ÚWí«Ö¤¯I_“ØÙÙb³Ø,6?ÕÉur`«Ø*¶ 8ýËé_Nÿ´¬hYѲpKwKwK°{±À<ÌüÉxÂÈ‘#7ÐI5TC5ü4UTT”²:§uNëœÆOß,ºYt³@6²‘Q×!®U;«vðÐüÐüÐ ä¿—ÿ^þ{ !!$¸ì¸ì¸ì„¡A:žèx¢ã Àk¶×l¯Ù@º)Ý”nvÝßu×} Î§Î§Îhz­éµ¦×JBI(FM“ÁdLwLwLwð©¢Sѩ蔲(ôÐCŸ–'¦Š©b*I®|³òÍÊ7š‡¯?|ýáëPz|ëñ­Ç·°D˜#ÌfÀ#Ø#Ø#p¤8R)N¯p@8 li¶4[·4oiÞR ÁÐ`h0<Ê4i&ͤëÅz±[åV¹6çcåyÙyÙy[DLÄDLøš8ˆƒ8¾‘‰Ó/O¿<ýòÇû̳Ál˜÷Ú@Á@Á@Aü­¢°¢°¢0Ç®¤MI›’6 Y/½ôrlÎ/ÜÎíÜΔö”ö”v îvÜí¸ÛÀ³¾Ïú>ë ôgögöggýÏúŸõJ»J»J»AAlX°aÁpíííÈ‹oß*¾Å¬w§Þzw*ýYù™ò3åg¿®7ŽÇ»?')·Sn§ÜP‹ZÔÎ8âÖëÖëÖû£ûpùpùpùì¤å÷—ß_~ŸGÇþûSìOä²#ÜîÇD¥&Í=Í=Í=ÀŒ‚3 ŸhŸhŸh_ãk| ô¼ÝóvÏÛÀ½Ã÷ß; <¹ãÉOîž–ž–ž–`m8Ùp²á$þ~"úDô‰hœWŠJQ)Ž­à¸þwÌÁÌiÙJiÍ£yBͤ™4óÎ?Y'ëd›íÊ*e•² ¨^R½¤z Ÿ×ønã»ïâ”p]¸.\Ç(å”Sèút}º¾ÿØ„&48ˆƒ8Ì›96s ?~(üÐ$ Å²ß²ß²ÊR”¢’F¦–©ej€ô“~Ò¿‘…d!YزYÈB–8ÓyÍsDNÜÅt’M²Iöåít]F—í.A’D?7r#7riÛЧCŸ} %¹F®‘k°°…l![` Ö`ÍäéÊQŽr€ïà;ø€ù1?æ7©EÏ ç/œ¿pÞ±k°i°i°I<"÷’{ɽNe :tèÐ%¤! i¤è@‡´ÜuU¡Ýè–š±;±“”ÌýaîsÈZ£xCñ†âSƒS§ N‡Îxœñ8ãáØå HI"I„m¢Å(F"rƒpZE«hä5¦S‰GײZVË„,•J¥R©zÆì…öB{លӚӚÓnâ&n‚—3Îw.P«³-b̃yÀ«þnýÝú»€}§}§}çžUÞ*o•wWQ›±ÍØf²ÊÖ•­+[Ç£Év²l‡œ`'Ø p¸ÃîÀð‘ˆD$ŒþnúÝô» §*Â*Â*Âà¥êSõ©ú6ŸÍgó÷|Å>žæRÛÛÛ}‡Ú_h¡ýÀ ¨qÕS ‹oô1`×¥ÓÁONížýíú ú ú‰Cß§~Ÿú}ªc—óFïÕèÓèÓèƒcÕuÕuÕud£²UÙªl˜†i˜æ?Нˆ¯ˆ¯ŒþE©ÔFÒg¼ÿr¶£s ø‹ŠŠŠŠŠ‚äì6r—qy³/¤/¤/ÿë˜å˜å˜uU’kåZ¹ö¿?¿·üÞò{Ë}~jjjáÿSÿ]ýwõß9–  ;Ý–º-u[úÎL~”åG J!‡rá0€ö”kœ‰’ç!øûíP†2”9Òx /á%Q´˜Óâ*íØ‹c/޽ÈBÜrÜrÜrh‹$$ I•W‹‹‹ÿeê0u˜:H9óe¾Ì—ãôktZÿˆƒâOì1í:Ë…# Û±ÛÅë$$„ò2^ÆËö&ºû»û»ûÓ¡[èºïø³OØ'ì“mw[×·®o]LBëôçºXŽþÇÿ¦Ž!…Æ;Q!IEND®B`‚routino-3.2/web/www/routino/icons/limit-2.7.png 644 233 144 2431 13061246471 14574 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÎIDATHÇÍ–OhTWÆo&ÍŸü-»H4›" Ƹ‘ÑѤ©Š™„b•ŽF°j£‹:. *h%!Zqc!6‹8±–*BÀL,MS›hjSb‰Y˜$cd2É̼÷™;辰”îr7sî9ß÷Ýsï=ï BQ’þ °•ÛÊmE)ÛvÐôç×ç×W|›²¯ëµ'kÏo^(¾Z| ÔWê3ÆL[Í«xk¾&¾•OùE‰0y=y=Y®´}šªšªò?HÙ_?ûû9 Ý=t ÷fïM¾€P0xãzãÓVó*^å+<+¾8û~! ç^ν¬IÈËÍËuŽº5GS®Ý;wïx•ý*[Ú@Ÿ (. J5Â[ͧãU¾ÂSøŠOñ§ôX±eÅ! aoÃ^{g*a¬ ZÊZÊ_òpžó€Õ¢ú§ú§ÄA>’È" L[Í«x•¯ð¾âSü)=bñÞ^®E6æ6æI€äcÐ'õI0&´ÍÚf’Ú¤ž¯ç#ã­ñ–%Cd¿ìݦšú>ý‚~©ÛIJ¿vL;–Yðc¢î¤;©^®µl¥B|Ôö=}ØxtÜÜš2®7éMÄ8K/½­´Ò 2!2añLj[¤5NÜjûŒ}™ˆ0®ëáOëI »þ#>sø ðÀ¨&+9—œ3 1šóL>“ÐÞÖÞÖÞ£}£}£}K+ö²úeõËj¸2xeðÊ øøø@×]O»žÂÄwCCÈ ð7i>ÅŸÖ“öë—Ð鎀Ñ ?W«Ò‡¢CQ(H$ P[Q[Q[·ÃípÃïï¯),È ä€s“s“sl o o ƒè¢ú>ì+ê+2«©Ï*¾¿Ò# (P=ÚÚFáâ ø5ÒŸï%ï%ï%Ó¿öÈÚ#k€Ïísûܦ?Q–(K”™öµ×\{žVO«§Õr›J£øEyRüJ€ÒÂÒBãwO…§Ô¡',?3¶ÛM àÆàÆàF¨ª©ª©ªýÚ~m¿r—Ü%wà 3lÆÏtÌtÌt@åóÊç•Ïa¬¬¬ß"¬Þ¨1j€Ôù gøÓz–Vì‡Åé¹1rì½ö^{/\ÜvqÛÅm0çœsÎ9!>ŸˆOÀ‹S/N½8eæµßo¿ß~\'\'\',Gÿc£Î¨þ’~éôwWÌ&DÔuü,ÄÀÇBÐ&„xÒ—6Üt]Bèyzžž'„¿ÙßìoÂ1èt qëÜ­s·Î áYåYåY%„QoÔõBWWW Ѱ®a]Ã:‘|ÅqŽ !Þ—¯åk‘ÙŠ/şѳäVö«[¢Ïëó0?féüZcvc¶I>樾^_²G/Ô IÊŸdDFò{y[ÞNÒB‹¥ÑÆY`XA1Å€—nº‘`œ6N“$©ô€ŸÆüÆ|U©EÙþ+—íëbپǖç öo¯%… h$¶•IEND®B`‚routino-3.2/web/www/routino/icons/limit-12.7.png 644 233 144 2741 13061246472 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü–IDATHÇÍ–]lSçÇŸØù2¤&‘2¹B…ÐT"-PJ+[t1qDE›6UU­J‘ÈJ&Fµ…ôç"ˆn¥k‰BÅÈ.p¥ˆˆæbF’ Ô,  ‡âTM-‹ÅM¡.™?Î9ïoö±öjw¼7ÇÏ×ÿÿ?Ïë÷9¯€ˆˆ”¦Ÿ–5–5{ʶü6ë/®/®ßp6eŸÒ!ïÕ¼Wÿí…UŸ¬ú ÌWæ3¦³¶7ósëE²ø¹|¦_J%ë(ê+êËs§íx£êªâ_¤ì¿øÁvÞvþ‘ï\xçÀçg>?Ãï <øÞý½²¶7óÍz/_:~Â/_|‘÷5Š@E]EÝú©„¯ÖÃË/½üÀ·Öo­ÊúPB‰rQ¢˜+’c›ñt¾Yoâ™ø&ŸÉŸÒ#P^S^# o6¼i;*˜þZŸj}ÊäKžÞç}J@‹jQý-ý-â üÊ@yµÍ¸™oÖ›x&¾Égò§ôÈò½ýÈC´1Ù˜Ì5~ÌOæƒòjsÚfD7Æ Ð¾Öæ´90bF̈ñ³¥®ª˜Š¡tK‘pÔ›’¾¤´Å¾ºüš÷5¯)ð#Ov+£""»À6c›‰æÃ¬gÖúWìR½ZD‹°”!Ѝ tБ£àG8*¡*‘ã_b)[  Ö«õÏ.¸;zwÀµE£ù)a»Ò:5-‡Z0ªMÿŸý'ý'QÁò`i°4 küÖø­qè<Þy¼ó8L]šº4ué盫ž«ž«†×OøOøÁ·ÇwØwõélÏDÏ7.v/vÕpàíoƒáMéEDþõGþvîÃsfÞjo_ù¹ÁsƒÄ­;­/X_€÷€{À ÁÂ`a°l.›ËæÏÏϨh¬h¬h„ ï„w›vµàjÁÕpnwnwn‡‘ßìøä¯""Äÿþ›/+¿¬T{á¢ï¢´ÿ¦ôXÄbÏþÞæçd_M & B¡ˆHÞiùu•u••—•¯._-b­´VZ+Eæ›æ›æ›Döì9Ø#2toèÞÐ=‘•ޕޕ‘©;Sw¦îHf9N‡Ó!262626"Ò8Ñh ˆ4·wçÞRôâÙ­Ó[§óNóûÍ–Í‘ü)ûö6?'PöDÙF"¡HôšÌ± n[ݶºmÐ=Ó=Ó=“í„¿Ýßîo‡ª-U[ª¶Àm¶Gµ[íV»I&™Ìæ/t-t-tÁ¦Û›noº Óÿ|ø,;fÔ+ [¶‰²¢²"# ö+ö+ªÂφŸýÅåÿ‘šïj"5è½Ö{­÷„ŠCÅ¡b(xPð à«=V{¬999!ŒãA˜m›m›mËâtvv‚ûîwÝïfýFmúG8¼:¼Ðí—í—UŸE,ÑÚhíÍ"ÃCÃC"òKšÓ;‘X!+b+b"%ó%ó%ó"£®QרKÄp.Ã%Ò¿¯_ÿ>‘Šë×+®‹ôí=Ú{T¤ymóÚæµ"F½QoÔ‹Œ9Æc‘†_5<Ýðtf§´¦ùʆ'‡'EÄõD=7oäžÊö–và¢y*á¡ñÓ?<‰J¬Lä'ò!¾?¾?¾î÷û„úCý¡~—†KÃ¥°4¼4¼4 ‹Æ¢±hëXÇ:xè|øÌÃg ¶&ö|ìyMFp%Íg´n9lγS#bÎ °…máh>ÜÕïê™NïJäN¢8qþŸµ<ß«Ïê³ËæXšÏä_6Çr&¿öºõu«‰’¥T hà¤Óc$ù¸€RgÕuÔ?Õ¸5 ÔpˆVZA%ÔêGH‹R”ëmzIÚu·îÎÁÏðýtò?¾ßÊÇövñØÞÇÏìÿ™ÎÓŠkñaIEND®B`‚routino-3.2/web/www/routino/icons/limit-36.2.png 644 233 144 3026 13061246474 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜËIDATHÇÍ–íOTgÆo¦¾ã@›XF3 }Q6¡¾DX%|Â(BÓ‚¶¨dº#YC³¶Ñ„&b1ƈa7`XcÄ&¥1%­­›HT*)¨u,M—Ö‚vÃà¬3gæ<¿ý0qÿŸ/'×ýr]wÎsžë<""’<÷°¬°¬°ØbØò3¾¤`IÁ_Çp[â¶Æmý¥’Z’Z^mµ]¿kb#oÔÏï1ùçëqI3°¸kqW\Þn€í™Û3—¤Äð±kßßý4_øøÀ¹/Ï}I-<îÜ07&6òF½ÑoðÍç—†ôE`á· ¿û /Z¼Hœ›œ›Òÿ+N‡÷ß}ÿ]€ÑWF_Qˆþ°bUy@€ÆòÏÃF~®Þè7ø ~CÏÐÍ#`wÙ]"Pòaɇñ§c w¿‚}Ë÷-7ô´nà0‡±B$ D+£•„@]S׈#Lläz£ßà3ø =C?6¹•A‘&7”Þ/½º@»Ñœšô>ížvmnR¥v¨Ô¹¹¹º®ëºŽ¹fð㎔þomV›E‹ü¦-×–ƒ>ã‡ÒÑÒQ`ÆÐ7¶rDDdÕ? >,ààýë÷¯W(•¥²ÒË®€ÊQ9*H%•Ôyƒœç<ç*ª¨2Ã* *4p˜ÃÊ¥\9ãWÚœž¡ß›GiëÃV]UýœP_swÓPÏP4i:Ýtuëà­Ïo}n ç ç ç@ÓÙ¦³MgávùíòÛåf^¿£ßÑï˜xháeÈÍÇ›5C ]ö­ò­2õT_µ½Ú„bóˆÞ-"òÓß û`÷Ax`ŸUž×¾Hz3éMBåñe”N‡ÓátÀÅ‹… ¡ ¤ ¤  <žäNæNæNÂÈæ‘Í#›ÍkkkÁ¶†­ap¿á~Ýý:8ßslIØ’°%Á̯­\[¹¶N¹O¹O¹AÓ5]ÓaÐ:h´BÂþ„ý ûá¨ûhþÑ|˜­ ¼x"Aƒáñg?|¶f[³ê²X¶µ æéñöxEÞ«-ï(ïà£äu¶¥¶¥¶ Û~¶ý,âÈvd;²E:g;g;gEì»Çî‰ÏÏÏɚ̚̚)Ê.Ê.Ê)//¹ä»ä»ä§8Å)â­öîðîqœ[vdÙ ³âêWÿà#ßß‘èµÀ'O|ƒs>ÖÖÇ{Ý<%‘??›~6 ?N|?ñ=*º7º7º×|CÑè@tüþ èíz»ÞªMµ©6˜ªŸªŸª‡`j05˜ ½ßM|cÞ±±Ô£S?<Ï<1=Ø­íրйSIß >¶0æ+êÀs+Q%ÕnµOíÕ T¨j£Ú8ϯÒTšJ\¸pÍû¸B„ÍÿÚTºJÇØÀ"xÁÇ0|Ìpþá¼e Ê1gVÿŠLE¦€FÇ¢c¦óó5g8ªO]UW/^¼À Ox*¬žª§@‡8„R=-¢¡©£‰ÑDP_Í9kici£ñkšïü/ï¿ò¥½]¼´÷±—óû?«Ä/Å9•®IEND®B`‚routino-3.2/web/www/routino/icons/limit-18.5.png 644 233 144 3072 13061246472 14664 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜïIDATHÇÍVÿO”u=wxÇ¡^ä¼LiŽs‹°0ˆé ]…8QZ›Y1ÈFs¶l“¶4`ÒÒt2›`­‚†BJîÖ<*î²e†SAb&X;¹˜>wŠwÏ=ŸW?wÕ?àç—gïo¯×ëy>û¼žH@òô¤î1ÝcºÄH¬{=š/Œ/|âëHÜ&¥ ҆˻ɤCI‡Hr^ó¼fu0ku­?vˆâÇòiy$#š0¶Û$Ûtü!Y¾¼|y¼%ïw‘¦SG@!ß8õÆ)’lÿ¼ýs¾Ez~ñüB’“¶IµºÖ¯Íkx±øøð?ü9ë̬3Ò Òh0òñµ¯M{;Ò0’F¿Xü"Iþ©ÿS/t$I†o“œÃ9ÂFR¦LmMÄÄZ}º_›×ð4|Oãè9õüÕYRQRajŠ ~Iî´î´j|¡’û¸sHEVd’ W†+ù€.á"IJ”Èh¬Õµ~m^ÃÓð5>?¢ÿÞÛ†ÊCC3‚Ω«Bq¡8RìVþPþ Vê : ʘ2ªŒ’ ÂÀÿ/ðEøƒà¡à!†ÂËB5¡2\ÁgÃÆ—6¾¤ l(ˆn¥ O$M×L×ä8ò÷‚ß ÈðIÒ.¾R&” ÞÓxĤã$÷p÷Äh`Hši¦9&ßÃöôÒK/IŠt‘Î{|røÜð9’4É&YŽ‹{òàô—jt“UïV½K 'IªOͼðG®ƒ®ƒ×½žr=%ÊwqËÅ-·ûöì ¯d]ɺ’#HPPJ¹R®”“'_;Yy²’<\vøÃïP|VqÄ~ÄNÊ_ÍÊš•¤èŽèÑÁÏžÆg«,«,€TÒÓ',­ŽV‚¶lÛbÛbHCá!iHúoößì¿ ¬Yºf隥À¥]—v]Ú(:Pt¸P{¡öB- $Àçóù|>`ûÀö¡íC@×û]¥]¥\ùn¿Ûà½oBÛBÛ¤§›ÛæðEDºÄ÷ßËÌÆ›«¯®¾ ÐR¼ú$}Œ–O,–F€•¬d% .R©‹€„ö„ö„v ¨º¨º¨Xp~Áùç@g 3Љ™Õ{«÷Vï-@.” åB;Q‡:àå_×ß^ÆG·š MRÏž Үģ‰G3³u(ÒÑa0k߬}€ÈøÊtå¹å¹@FyFEFàõúG;æ;æ;fÀ ,ŽçÏ?žLz&=“ ålÊÙ”³Qaæ2s™¹ ¨è­è­èŠ«‹kŠk€Úgj7×n¾õ‡þúá“Ö>²î‘u€zŸ,`†B=¥ž’®Êe`¾¬^SÕA ¾8¾8¾h]غ°u!“ž“ž“tÍîšÝ50Úv£èsö9ûœ÷r/÷cÙcÙcÙ@ZOZOZ°µtkéÖRÀ*¬#Ö`"ÉwÂwó‘*RÔ¨VÕ*]ÕA'çËù¿õÝÎn'€¥ÀmÓº‚ssçfÍÍ‚Π3èê]õ®zÐmé¶t[ó1ó1ó1 75757°/³/³/òÜyî<7°äò’ËK.-;Zv´ì’×%?Ÿü<°jAž?Ï`eõ¦úMõÜ|›óm O¸o¼oü­/öTÖUÕ‘üN;%êÇêÇäݼ»›ïn¦˜rN™:=tSmSmSm¤wÜ;î'E³hͤ袓ô­ð­ð­ Ù¶AGÐt·uÞ€7@!ÞTÌÊŒ­¨Oñ¯ªÌªLÍÏÝÐ|ƒ4yL9އgøí”Õµ$ÆÇVŠL‘IŠÑ!:bÜ!A$ˆ’VZiÉ v‹Ý¤8*N‹Ó$)–‹å¼'>Æaxdx„$M›þ–ãxå_>ãüJ©¾Tu~Z”ae˜d]øFøFÔùù 7q)ºÅOâ'’:è  Ÿ~RŒ‰1BòÁtÿÎðÏáŸ?*Å£íLè9Íü¯ó?¼ÿʇövñÐÞÇÎì?’®j´J2äIEND®B`‚routino-3.2/web/www/routino/icons/limit-49.png 644 233 144 2424 13061246467 14531 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÉIDATHÇÍ–_HTiÆßkFÑ2á¸]”…³”%E3Þht£d†¦hb Å+^ìvÛ°Yë…ìÅJ´Etš![›ÄÐMA™¦)肹‹íE£ÆŽÖ¬¦kžs¾ß^Ìœ9³ îvé¹9¼ÿžçù¾ï¼ïùDDdCü-àÌqæ8×Çlç—¶?õ`êÁÏŠÙ× pT;ª=™W2¯dµgµ›/mÛŠ[ùÉõ"6~2Ÿå— b;ÜwÝw%q»êv×íNÍŽÙ?ô@ZWZ×î7ܸ×q¯ƒ¯`ªªà]É»°m+nå[õ^2¾4ÿ‹_Ö>XûÀñ;¸]n—l=°õ€çT,á7Tª<ð&åMŠr€ñA†*æ˜Ãz"I¶ç[õž…oñYü1=Z±V,UõUõim±‚—pfó™ÍßrÐB  Ïés†ßð³ªGõàÀ¶mÅ­|«Þ³ð->‹?¦Gþy¶­¥P›Z›šÔÆ3ãð§YcÖ°(•§rU.˜»Ì|3?±c˜ïÌYsô}ZŸõµºª®¢À¼h^d™ã¡ñ0ßâ³ø%YÐŽ!m*mjn „Œ‘à)ç/óˆy„…„g¹ä‚PjÀ¤¢*ª¢À.pÁöóG9 ”qšÓf³ÙÌKqüŸÅÓv­››ëö²¬Ïê³6¯*R>å³ùÆëÆëÆë ÛÛííöÚþÚ í…—½—½—½01>1>1ž´€!5­¦QIGãKðÇôÄ…ýò ÜŠÞŠ&ÊOòѸn\g‰z*©^ñŠW JU©*Oƒ§ÁÓ]]]~~~¹)¹)¹)°¯h_Ѿ"ðæyó¼yÉäG’Ž\=×õÆø¾¡NÚü1=N‘õÝë»}…"Åû‹÷ÇÏWmÒåuŽŠ[¼²WöŠHžäIžH *P¨Y,_,_,ÙrgË-wD'''D´cÚ1í˜Hß@ß@߀ˆËír»Ü"Á–`K°Eº.=Ò#î_‚?®²Öe­3Ç Ž„í¶7^êOõ§ö ;Š;Š;ŠaãÛo7¾Èò‡`ç“Ov>Þ’Þ’ÞðÍûæ}óPv»ìvÙmpµºZ]­Ð¹©sSç&Ï8 ïÑ÷$‹?¦gˆ4ƒŽ1ý°~XòEdX†Es|ë¨uÔŠHP"qjNÍ©‰F!2Ò?Ò?Ò/n 7…›D†BC¡¡ˆ¯ÐWè+Ùž½={{¶Èèðèðè°ˆç±ç±ç±½cŽ=ŽtGzÂÔâü’гâ7†qӸɰÀ#`ì·ßh¿Ñ~ªÛªÛªÛli°4X„-GËÑ 0 &uéqj¨~6*ŒŠ•¿±•»r^ŸÔ'“ºò3•©2Á|m¾6_ÃbÑbÑb¼¿ôþÒûK6ïÒØÒØÒLG§£ÓQP#jDÏé¦ÛÆcYŸÑgþ·+ÿcŽaž0O°ÀǸg†I&Yf±Ç P@(¿ò+R÷íRÛÔ6à{‚̳æYÐ?iŽ}Âä_6›ÇíÉO3ç8dNz’Àï8ÏyPÏ㿦!>ðæ)óËFÑ“Œ¿âä_µÿÊU{»Xµ÷±Õyƒý#ªÐWIEND®B`‚routino-3.2/web/www/routino/icons/limit-14.1.png 644 233 144 2662 13061246472 14660 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜgIDATHÇÍV]hSg~Ήi›Râ´ Q+b¥XlõBÅ]#ÆJ»V…â4⢵cj+ŠS˜V-ü)ŠÅ;«ólDQAÔ8S±“¶¦õ'Ƕ&9çûž]¤'‰ºÝûÞ„÷ïyÞs¾¼Ïù@¾ý©NT'ªö¤¯~ŸŽç,ÊY4õdÒo5He™²ì¯ŸÉ±-c[HrÜÑqGÅ“´oæÍúÌ~ ŸÉgÆñÒì3Ùg÷¨ßLÖά™ãHú¿„H[»­}H'××Iòìñ³Çù9pkàI¾q¿q“ißÌ›õf¿‰—‰æOøÒzÁzAù›ÌÎÊÎÈIÞIÞ¢“ÏŠHÿbÿb’ì³ôY¤J’¤ñ’d󤛤F¦½ÊðÍüh½Ùoâ™ø&ŸÉŸœd«ÀUË«–ÛŽ$žüNnvnvš|‰v’»¸‹y¤®éI+ŒŒ‘2$C$I… ™öͼYoö›x&¾Égò'çÁÇg»ÇC­:QH tS¸Ö„•”;ô~½ŸfFš²XN—ÓIQ&ÊDÓöž¯ùšdÔ¬õ¢ž áÒwè;HùSŸ¬É©É!90ÊŸ:J Š÷‘¶§¶§Ú²ÛÓí!g$IŸlׇõaóS+f1‹I–aΈkmÊŒçÆsã9)Û°Náù¨E.E.‘¤M³iÚ˜ä`ÅûFßTë 2Ðh$åU’³LÀЯ¡£¡£”=å=¥=¥ŸvºÝ²kBׄ® é¸|%_ÉW¤¼"¯È+éxè`( Röäw[»­fTÌ’ÖV­­2¶õ†Š‹Pq¿ÍwÌwŠ”ò6Ç©‹§."î™àQ=*”Ûn7Ün@ÊôÝún}7à>áÀÎý;÷ïÜŸÎËkòš¼(^Å«x¶Â¶Â¶BÀóµgÄ3åÎ7wzïô"ž¬VÊåáyyóòÌîŠó*Tûû–²ÙXëzìz 0 ”#øÇ2Ö2Ù ü~€ l`Æ`«W5®b9±œXßšßšßš1Ø\9WÎd¿ì—ý€U¢Jprs¤WY¯¬Göè`Gð~~Åü °_·_/›­â[Ë!Ë!–Ö]Ö]€œüN­S;˜1eÆÔSk³µÙÚ tžè<Ñy8Yy²òd%ànáÀ=ß=ß=ð¢þEý‹zÀê´:­N@ ˆ1ÔÄjb51 d¨d¸dy32~d|ê9ñ!ëtÖi°ø-~–¨"(‚Êc@_¦/(H=yƒÜ$7âœ8'ΪSuªN <^/;v<ìz½ÞÞÞÞ¼t¼t¼tÆ}ã¾q?ãM>’aA':Sáè _¢Ct(U¨ÚmÁƒ»@×Õ®«¦W6ÄíN{¾=ˆ×Åëâu@¥«ÒUé.G.G.G€M›66þþþÀÒ)K§,xK½¥ÞR`hÃІ¡ éÁræîÉÝXZŠ,E挫±$”ÊÍ­¹ÜÍÜÊ­­$ÿ0·Rì{ÉhYtIt el^¬"VA2È ƒ¤h-¢…™<2yd2ù®ú]õ»jRÚ¥]ÚÉÁÇ“â­x+Þ¦·2:-ꎺ)cÙïïé­äŸŠ@Ez+aêi° hcȈ1R8>R¬+3t,>ªSƒä É!qˆ¤¤¤$™`"%Ãÿi²Heè#7#7ÿWÇ2”_¯±ÔXÒÊO‡Ñ#$›Œ>£ïsåg·s;ÉB²¤ Aƒ”}²GöìM)ÿ:±Ž uFÉmŸ(ÿ‡O•ÿËýV~±·‹/ö>öeÞ`ÿif;…vYšIEND®B`‚routino-3.2/web/www/routino/icons/limit-8.9.png 644 233 144 2560 13061246471 14607 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü%IDATHÇÍ–_LTGÆÏBÙeѪP š x€Xˆ£>©+Ä„üSm‰1Õ§ê›FmBjºÄ¤kŒi¬HR•Ä QjšëW#¢€É¶õ_-ªlȆeïÝùõaw¸W«ïÎËÍ™9çû¾ÌÌùȬÄW inÒܤñ8i›5Ÿº*uUþéx|ÌÇ:Ǻ޽0óÈÌ#éÍéͱGV¬×u¾½^Ä·óéy™%Ö„ë¬ë¬£<„õÅë‹S³â±÷:¸ÛÝíã4œo8ÐÖÒÖÂW0Ø5Ø,–ƒëu¯ë5ž_¾Á/)S.:ž‚ËérŠ@neneÞ®xŸyP³¦f À‹äÉ* ÌéLWå@ˆz¼´Åz=‘¯ë5žÆ×|š?®G ³,³LjëkëÝ'â~‚Ý9»s4_´h¤‘é`„Œ€¹ÉÜDÔuu°b½®óu½ÆÓøšOóÇõÈëgÛ´Uç¬sQ€è-0Ÿ˜O öQiT5ž›ifJ9•C9°Fèµ#…ca0FÌl3¥vÝF7Q0GÍQ ¬ñë\u.-°i¥í(ED ¿÷ {0ôá@(`T)ÃÜ`n Ì7´ÑfÒDM@i¤YÓ*¤B*ìg?ûmùŸãÅ |jž2OÅeUDá@¦øzÂŽÝ€íû¶ïFb%¤D'¢ßýîûîûÀÛãíñö@ßâ¾Å}‹m;ô ö öÀŠ>,|X¾%¾%¾%ðøÇ½{-Ÿsñöå’sÏsÓ|¾ßoú¼ÏïyDDdaæWÀ¾Ô¾Ôžg`û߬xöÓÙO—üËÀíi°m²mºÐ >Zð@~W~—þ“…ͼY?·_Ä⟫gÆe¡X¬PVÈV“Áûà…²ʲ5ðÁ3àèqô̤`ÛñmÇŽ9v„¿ÃõÈõÀ­š[5`a3oÖ›ý&ß\~Ù÷'}˜wrÞIÛdÍÏš/ÅuÅuîׂ_Üðì3Ï>pí¡k);¤''NUL1…¹nÎÁf>Soö›|&¿©gê~ « «EàùŸÑÑi4üô ¼µä­%¦žÖìg?NHM¥¦Ò/§_& êŒ:€ XØÌ›õf¿Égò›z¦¾áÇÚÊ„ˆÈð^ò^ý?ZjD{B{ô»©GR eœ*Ó²Z¡–«å —ëåz9ÖºÅoüv)ý¿Ú´6–Ñ–hK@Ÿ4øÁ{Í{ øÝÔ7·²ODdå‡à˜rLM=¬f/õ_êö°T•ª"Á^Þå]`+XÔSO=¨³ê¬:;ÇÐLXP%UR%}ìg?€ªVÕ$h2ø•–ÑËèóµáG¸."Òþ- ¶¿ºýU“N_=˜ÝÝ mÚZÚZPƒ¿ þ<ø3÷­Ë[/o½¼N.:]dÅõ¸×ãœ7h´C[kÛÁ¶ƒ¨Á¾ØÊØJKO}»½p{!4üHú‘vÉ7N¼¯ WW*¿sÚpHz–z <°,¼,¼, ±‚XA¬Àt¯v¯v¯OØö„ï7>0<0<0 ÎYç¬s<%žÇ¨¯­¯­¯½ßXx(<‚Æ@c 1`ÅWýµtyérèÊëvu»’³ÉYHçæ|Ÿó½ Z~v~¶~Qm›Ø0±Á:ö‘uýî~7¬Ê^•½*v¹v¹v¹ +Þëëëø†|C¾!(i-i-i…߈oÄw¿ÁȺȺÈ:(«(«(«€-©WÆ^õ’9f&ß›|ð/|sá›úE»ú0U›ªµ]´ç?9ÿI‘hÿÑ£RèyÛ³Ù³YÄwÒ÷…ï ‘Ã5‡k׈ˆ_üâ©V+‚"ç]ç]ç]"Ww\Ýqu‡H¬2V«™ižiži¸9psà¦H]u]u]µˆo‘/ß—/x-°>°^Dï‘Bí¶v[D^WŪØvQRæ7öUåW•Ðéÿ¬ü³råŸwÌþœý9’kÿ½öãµC^Q^Q^ôt÷t÷t[ÿDG]G]Gxxx€îÖݺª6Vm¬ÚM{šö4íœöœöœvXZsdÍÈ+ÌéÍé%Ù³è›+ß\Q~èÝÜ»R‡3ß3§’ ;@;cœ’ñõcO=£§F/Œ^@;7vÁD0h ‘D$;Þ;Þ;^УzTB¼3Þï„„#áH8`üëñ/Ç¿„Ñðèw£ß¡Æ:®´^i…»~Cvj;5à¥Ì©4š5ǸnΕ{sÌ­Ü$îE444`’I&f˜ 5'ÿ×ø6ÀŸææûíþ‡[¢>1&³:—v¦ B©éÔ4ïsŠSÖäg/ïð°˜Å,’Üå.¨¤šVÓÀ_h¢ ¥N¤´”†¦Î¦sÓ¹?o³·îé[—ø{W>°¯‹ö=ö`¾`ÿ|¯4ý¸ ÿIEND®B`‚routino-3.2/web/www/routino/icons/limit-35.png 644 233 144 2457 13061246467 14532 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜäIDATHÇÍ–]HTiÇßÑJ³Ò¾ÑÖ Šr…oJÑpK‹A"±"¬p·%° ÜXYŠÜ¨ÕÀò‹(‘¶ J’©tk»hÒŠ¹I"–QZÃ6µ mó«œóž÷·3gÎÙ%—½ôÜ Ï×ÿÿ?ï<Ïs^B!„­ [fØa%¦?2'2'ù—€Ý Á¶Ã¶ã÷ï!æB̀ئØ&½Û´¸‘o­ÂÄ·ò~±@˜Žˆ7l™Aû®+\°ê€¨Ö¨Ö ¸¸n6ßlæð=ñ=ÉÉÓ6âF¾QoàYñʼnñ sÛæ¶Ù^AļˆyB@–„-Ißz“ ?7?` | \…€¢‰V™ÀcÏ;‹măùF½gà|@€Å‹3„€‚]»¢. ºçJçJƒÏß TRI4hcÚ€,’E|Õ¡:°aÓ6âF¾QoàøŸÁÐ#þùßVeƒ#Ò (ÿcüò| Wèøõ)•¨QÚšWó‚þ§þJôÑGÈïd¹,™"“dÈY-«Qœ–Cr?È>Ù| â|!~aôy Dù¢|csà…|!?Û@wêN&ùZ7÷¸‡ù4ÒH#¨7êzcñK$P|àƒÅ^¬34¶…øBü=Aa p¨âPE¨xcÚ 6V°"p~ÝÙÝÙÝÙP•U•U•Ïž%èGô#ø‘ò¡|hÁŸyóÏÚo嬽]ÌÚûØì¼Áþ vliÁ‡›•ŠIEND®B`‚routino-3.2/web/www/routino/icons/limit-4.2.png 644 233 144 2471 13061246471 14575 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜîIDATHÇÍ–HÔgÇu·û‘^im‚†ó´ˆÉþXJ’Q(ß+ “`m,¡hÁTE?lL4s,ÈôÖ¨þY„5&#aÊ«ÙÜ„ºÄlŠóGÞÝ÷û<¯ýq÷xçlýíóÏñþ<ŸÏûý¾çÇçûB±*ö+ y}òúdw'WÇãŽGIî7Qì· ©<©ü×Ï`eóÊf€ô¶ô6ù(Žõ¼ÎO¬"Ο¨§ãb•ˆìöΤ⮃}ž}Ç;Q|î8ÎÀ¬ ‡o¾ ÐÝÞÝÎQíí˜,ž,†8Öó:_×k¾D~Q÷}!ÀvÛv;iìoÛß²wdïÈù$šðGìÙµgÀ³”g)*¬q •TU L3/°žåëzͧùµžÖú°¦hM‘P¶¿l¿³5Zðèk8¾îø:­ 4’ æ´9 `UZ•„@=PH" âXÏë|]¯ù4¿ÖÓúQ?bñÞž÷‚Ïás,ú‘¬;ÖÙ-»‰¨| ~Q}ª/ÁÐ8ãŒÇ¡ © uÔQ—WO€¨°UaU0‹–274=4 qý¨Ÿ˜1ÿPsºæ4ù`eX  •¡ ”æRó¤æI ÜϺŸu?+a…&䄜ˆãAÛ mÐM›.6]„Áïo ÞŠûWßF:"€©õbú1?1c? צ®Maõû͈!ÄïôÓÊ«¼Ê «7Vo¬o—·ËÛÅ’Ñ7Ü7Ü7 ©áÔpj¼¹Þ\o.dÙF¶ ää/¤‡doLOëÇü$ áîq÷¼/DÑö¢íBˆn!„Hjù){Sö »xOˆ!jËjËjË„9BŽCˆÕþÕþÕ~±d<5ŸšOM!޵k9Ö"ÄÝá»Ãw‡…X‘¶"mEš” ”,¤Ûù"¦§õµHOKO“¿ÁËàË Xƒ ×€ö¢ö¢ö"ÈË˃ª#UGªŽ@î…Ü ¹`äàÈÁ‘ƒKW®·°·°·<›=›=›áyÈÖzQ}íG€»ÇÝ£:atË襋:|F‡;ƒ;ƒ;ƒàYëYëY ¶YÛ¬m———a¦a¦a¦Ž?8®®®pÖ{Ö{Ö 353535`F̰À… ÔJQ}ígéCï¹uÕºJȪµŽZGãFÛZÚZÚZÀ8cœ1΀̑92¶íÞ¶{Ûn¨?Y²þ$¸ü.¿Ë[;·vníw–;ËÉ@0ŒŸ1ëÊëÏØÒ[9³p+󬡱ú00@}§n¨ ~RSj ¥:­4+M–a ü¦/Å—¢WjQç_¶ßÊeûºX¶ï±åù‚ýÛÀVµÜjv×IEND®B`‚routino-3.2/web/www/routino/icons/limit-19.5.png 644 233 144 3041 13061246472 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÖIDATHÇÍ–ÝOÔWÇŸ`p…‚NÝ‹!5cÓ*mj[Òld`WŠEAcÕ5J·%¡lÚìZ»;Ñ“õÂ,\/m Àv˾€kè¤.0b´Ù¬ºÒv ¸ÙŠà ƒ/S̼üfÎg/f~Ì´ý<7“çíûýžóÌy~G@DDžIü óŒyƬ¸müMÒ¿¨tQéÊ¿ÅíSQ0l5lýÏ!È>ž} §5§5öuÒÖãz~j½H?•O÷Ë3’tdvgv ûì(ØQ°È·ÿ2æóæóó¼ÓûN/À¹¶sm¼ÓW¦¯?®G`YѲ"¨ØY±ÓÜ/øú¯pÀzÀªóEÎG9ÊbÐZ º;º›¨!5€$m=®çëõ:žŽ¯óéüq=òãÞ6: TF*# ‚ܱõ‘ôH:¨CÚízDÅü±™Ø hsš_óƒªSuªŽŸ¯!„QÑ?…‡‰®ŽÔFj!Zǧ±òÊ7tÎd+""«>ó·æoé0îwBt€Íê3mV›å‰Î£¨5ÔSO}Š€}ìcàĉ3Åk\¼xñ¨Õ‹5[³°á?55£&WM>?ù|’ï†ï†ï†š×5¯k^“ã“ã“ã??0m¶GÛg«Ïî>»Nl?ñÁ‰PŸì<¹ùäfÌê|µ¯Õ¾êŸq=Féy¥O>YoYo18ED /õX:û;û%\\Pl)¶ˆá–íÖ ·^¹ìþ±ûÇD*J+J+JEºVv­ìZ)RY^Y^Y.âóûü>¿,¬9ãœqÎ(Rw£î›ºoDÿ8X5X%†¡’á†ð“¿GÞŽ¼mxIÄ1ì‘ö¸£³>Êúhí«ònÑXј&C‹xÓ²Ó²%s©gé÷K¿1ï5ï5ï­­­±Ø-v‹]ÄÝéîtwŠ˜rL9¦‘>GŸ£Ï‘6z{ôöèm‘@i 4P*"ä°)}Ó÷¦O2Qgj1µZ(œ/œ1ü!ëLÖ™µ¯ ä,ÉYƒÙ©Ù)ˆ-\{JºKºKº¡­«­«­ ‚%Á’` ¬X=°z6Ù6Ù6ÙÀÔhj45B[{[{[{²•—¯_¾~ù:T;ªÕhíiíiíå'Ÿmx¶¾øõàWƒ_1 ‘—#/CôßK&—LÆÆŒ¢b½±^؈¶UÛ*"&Y¦ïXM©»ê®ˆ±ÃØaì æó‚y"ù ù ù "Å=Å=Å="¹Ûr·ånYqpÅÁEBBBD¦2¦2¦2DlWmWmWEöWí¯Ú_%bUÖ ë„Èl¶¿Çß#ËDÔrµ\DjcÖ˜Õ0–øóÿë÷ðù£ÏAô=UØp¨ü³òOË?…ŽÓ§;N'OÂyÑyÑy¬«ÅjW¯«×Õ Ë–=,ƒB{¡½Ð#Þïˆò]ù®|doÈ~=ûuøÝ¹÷·¼¿…PlLçë<Úy(‰ëI½•‡kÿÐoI¬)Öùø­Ço¡‚ÁKÁKIa¡¦PS¨ fîÍÜ›¹ld#A™”I™À¿Ý¿Ý¿h§v÷‡ûÃýà3zç½ó(õ®–«åêh±5LÕ¬­Y«Ï³SÃ¢Ï 0O›§éà‰z¢ ü› ÅvÄv$篰†5 v©]jWR¨²+»².\¸RüGT½ªuFõ©>U  x¢šø¿òLx&Ìsæ¹@:·4ÇR&¿V•V•–œüX4æEïDS&?õqêŠr+7p“›ÜóˆG þ§¾Sß¡DþèHt„ˆúR›Ö¦õÎDÜà ÿtò?½ßʧöuñԾǞÎìÿøÁжe¼3IEND®B`‚routino-3.2/web/www/routino/icons/waypoint-coords.png 644 233 144 242 12002775154 16270 0‰PNG  IHDR Vu\çbKGDÿÿÿ ½§“ pHYs  šœtIMEÜ!/ ŠŽ/IDAT(Ïí! „Àÿÿ‹ÕpÁ&mÃj•n[ 85,†Œ¿áIÖ?”´H¡IEND®B`‚routino-3.2/web/www/routino/icons/limit-60.png 644 233 144 2443 13061246467 14523 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜØIDATHÇÍ–]H”iÇÏÌh:8M™.]T­ÐDA^H¨´ma¡öA"akÍŲ´µ^E }`‚,²}@FnmI›i‘7Yé^¸ì¨¨èVJ¤í°S®ïû>¿½˜yæÝ­m/{n†óõÿÿ™sžó>""²8ö+à\á\áôFmg•íOÝ’ºåãï¢öy;;~9‹5¤_N¿lm[Çu~b½ˆŸÈ§ý²XlGÊÍ”›ŽÂ˜]»ü»ü©Eí³ÀÝênýÀ·Ü¸uåÖ>‡©ÇSB…¡B°m×ùº^ã%âKÍ?øE ¹#¹Ã1) RˆÀÊÍ+7¯ú"š0² Š·oxæzæRN0_<ªFŸé[Çcùº^ãi|ͧù£z2 2 D tOéwS´ xª—W/×|ó­ÀINâ#l„Ìr³œ9PÔ#8À¶u\çëz§ñ5Ÿæê‘¿÷¶þ(K-K ú‘°yϼ`5YMÌ«ÏT½ªG}FÑÖïÖ+ëUüC­S9*ŒßŒQcԗꢺˆ«Áj`žˆÙiv&àÇù4¿$ ò} î)÷T8 †Íax@Xg­³DÈ¢”RP3jRMÚB$ªEµ¨ Œ2Ê⟒O>PÌQŽX5V þÔø1¾8TOLØùn×hVŽnºªºTJGFKFKFK þnýÝú»Ðïêwõ»lCÍCÍCÍÐh4Œ‡ÇÃãö ¢Æ•¡ TB‹c|š?ª'&¬ÿ+¸þêz¼%j¿š5Œæ´'”Ê å@^W^W^l½±õÆÖPxºðtáièóôyú<ëËõåúÀï÷ûý~X=·znõ„:B¡Ž#Æ1ã˜ÆWûmþ¨§ˆ·ËÛµ.W¤`SÁ¦XÅѤŽÈ99')ÚÓYÕYÕY%2 ŒDÒ»Ó»Ó»E¶mÚ>$ÒS×S×S'â¼æ¼æ¼&200000 ²pxáðÂa‘öÌöÌöL‰uUz¥Wã;šlþ¨ž$W±«˜µ"ɃɃ]7#/Å+^‰C™­f«Ù*’1˜1˜1(’ŸŸŸ-raìÂØ…1_›¯Í×&²´eiËÒ[€÷©÷©÷©Èë%¯—¼^bûå'™•Y±ù$¹-¹M2E\k\kXë±îXw¿Š%FI<1S®K­ÔÚ8ž"O‘§HÄSé©ôTŠ‚` (âôNz'Eœ;;;EB»C»C»E&ú&ú&úD&ÖO¬ŸX/â;å;å;eã9RÏÏøâü1=ïš1êÌl3›9Þ0ˬ={î=¸÷ ¸/¹/¹/AeFeFe¨ U¡*`_ɾ’}%ö$íIÚ¨6«Íj“ŸoÌ æ†wÏØ{o%ÃDˆØ·ÒŒ˜3Ó§7No+Ëʲ²l>ë¾uߺ3¡™ÐL¬Ö ë`!DE*æYc6‘ï­·ò-{,¾g¬Z«–œá ¨4•¤’nWžÊSy ÚU»jµL-SËâûU¹*ŽÐD€uÂ:A„ùÿµÇþcó›æCó!€uØ:Ì<- 0€R?¨êð-Í4'´è{Ziõ³êU½@cŒ¡À:dbÞÆ{ïæÿ`¿•ìëâƒ}}˜/Ø¿ÈöÔO¹ŠùiIEND®B`‚routino-3.2/web/www/routino/icons/limit-59.png 644 233 144 2473 13061246467 14536 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜðIDATHÇÍ–]HTiÇŸÑuF©ÔÄ Ä¾ÜÄ­ÕÖ j¡‹Ðò«¬!ÃMÖÁZ½ˆò"ØL#ñbÁJL–"’Bʦ”ب›%c –·“ÌUü dHÒ9缿½˜9sf—¢½ô½9<_ÿÿÿå}Ÿç¼""’ú D­ŠZ´£ª,lalá—ׂv»6§Íù×Ïp>á<ÀòËË/ƒ–mÆÍüÈz ?’ÏôK¢XÇ Ç [nÈn„Ò¬Ò¬ØAûĹãÜï58|çð€[Wn]á'ïïx—û.,ÛŒ›ùf½‰‰/ÿᘻ1wm#à°;ì"°&M~Zm0a8 Šwïxý6ZE€>,e©Êüø1×t„mÆCùf½‰gâ›|&P@rNrŽì+ÛWw)X0Ø 'RO¤š|7ÐDKAók~½\/g”Gy°aË6ãf¾Yoâ™ø&ŸÉÔ#ÿ>Û_ó $¶$ÐO@¡¿<Æzc=½^ïÒ»Pz†ž¦§^¡ÒtÒ j…JVÉ ko´7 jT›jCÑb´`N¿¯ßoøI˜/Ì/‘‚¾j…¸ñ¸qÿ0¤é€À÷`1Ž0‡ ˜d”Q@ Ù¡¥4¥) 8ÍiN[~~ä Žq Àh4™cÞÄñ…ùƒzBÂÚÿ€êSÕ§L4#›N­Mk‹àýA; €nW·«Ûò.ä]ÈƒŽ£G;ŽÂ‡úõêáå²—Ë^.ƒÖ³­g[ÏÂëW¯_½~±gjBM "Ž8Èæê ûó8\Ÿ½>.w©ÇZ¥VÚ0yqòâäEX¹yåæ•›¡øyñóâçPuµêjÕUxTò¨äQ lزaˆ-°mí¶µÛÖBvFvFvLoœÞ8½1BàS­Z«6ñ•Ëâꉉï‹ïûö;‘œ9;Cç+¶Kê8Ä!Óã-÷–{ËEüÛýÛýÛEÔ=uOÝ)..KKK‰o‰o‰oééé±;ì»C¤·©·©·IÂKý&ñ˜ø¶KPO”Htqt1_‹ÄôÄô„ëflc6‡Ía%µ&µ&µŠ” ” ” ˆ8ÛœmÎ6‘Ê]•»*w‰,lZØ´°I$&?&?&_¤ ³ ³ SÄWá«ðUˆØkì5ö OÆ"·-3PO”ˆÑkôÚ^Šh{µ½áÄdù[<â±pÆ}ã¾qŸÈ:m¶Nq¹Æ\c"«½«½«½"£[G·ŽnÉ*Í*Í*ÙQ¸£pG¡HRCRCRƒHš;Íæ¶ðlߨ–Ø–Dð…ùCz>yÇì®@—uÇoÞ¼ éíéíéíP”P”Puî:wf³ÎY'   Ajsjsj3Ôyë¼uÞˆ.=Ä~öÝú}Ï§ïØ§»Òìšß`eFrrra*e*e*TŠJQ)ïüÃù‡óa˜0& P>åS>à)}ôYwŸ€6£Í|¶+?2Çüá9v͸ƜjR=ªT‡:§ÎEtWŸêS} TƒjuFQg"â™*]¥ÍôÒ `œ4N2šŸ›c™üædÖôÇúcã¸qœµ´ÓŽR}êzôp›ÛGÕ°êiè×ôŒ÷¼GQkÔ@×=ºçMþEû¯\´¯‹Eû[œ/ع־»yUc4IEND®B`‚routino-3.2/web/www/routino/icons/limit-24.8.png 644 233 144 3035 13061246473 14664 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÒIDATHÇÍ–íOT×ņò2ÇÒE¹¦Ð ðMlháÞÁ ¥f­©¤E+jZM3ò¡)7m¼IÑ^HŒ¶•\ŒÐ¦šѤ)0Á$Z±1¶¨à€Ïœ³÷ÃÌñpë?àþr²žýìµV²Ï^{ ˆˆÈK¡¯€mžmžÍĶ­zôŠè;Ä5:„­ [Óó/˜ýõì¯âêâêŒ[6çÍþ™ëE,þ™zf]^«ÕÕ–»`íkk_‹Nâª3`o±·L`óñÍÇš¿kþŽ`¸s¸`<<,lΛýæz“o&¿ìú‹¾DüñcØ]ˆŠŒŠ”‚”‚ÔíÁ†Û©ðÖê·VüþG¸²€> Ä«òI&1ǃØœõ›ëM>“ßÔ3õƒ~âóâóDàíwß~×~(¸àÖPž\žlêi-À—|I,&“ú{ú{øAQg# ,lΛýæz“Ïä7õLý k+}""Õ.p÷¹ûÀ¸ ÜÕh Àx˜˜…rªLË*M½¢^#ÛÈ6²±Æ8÷¹ÿ)cPÓ4 -ð»–¬%ƒ¡ùÁ}Ï}˜4õÍ­lIßöIûää êIßù¾óÀ. A½©ÞÄG_ðFiÀ:Ö±T—êR]3 2ʨ•®t¥ÿ¦’J•§òðQâOé…ô9ô# ‹ˆÔœevYiY©Igd݈ººóêNØ»goåÞJÔÛ7~½ñ+ÏŒþMý›ú7AGbGbG¢U7&Œ cÂÂÝÿí>Ð}ª®U]©º‚º™síûkß[zêjYJY 0ô#ú‘+;áÄŽ;àÒÇË–©±ìߨ¿Áïšçrºœ0¿i~Óü&èvv;»–`jVjVj¸š\M®¦gŸj=ÕzªâsãsãsaÃÊ olx’OÏ}îûøNWáDæ‰LЇ‚~l2+¦6¦6{©ˆ«ÔU*rï·>¿õyØ¡Oj<§=§%ªí^›·Í+“““+Òs³çfÏM‘ÝÇvÛ}LdºzºzºZÄYã¬qÖÈ3Ãh7Úv{ƒ½ÁÞ ²rÛJÏJÈÜ I£I£5÷ âAEØ!‘ü¬ü,‘°ü˜á˜á쥶ð‘;"wA™¯ÂW!â^S´¢h…xWµ¬º¾êºH†=ÞaY¾xùâå‹EôH=RÙ?¸pÿ ˆ+É•äJ¹\x¹ðr¡È®;]wº,cÞo‡·C$A$ADêÿYïªw‰ŒOŒ'Œ'ˆ8ϽœöršxEl¥¶Riþ˜ 1ªbWÇ®V0ñéħнµ×Óë{styt9T¶W¶U¶ëYÏz¨+®+®+†ÂôÂôÂtÈ|˜ù0ó!DLELELAóÂæ…Í Á(1JŒ(p8 °}`ûÀök‹_M?ž~ê;2zdÀÿ­ÿ[Ð^ì}±W5JÀiþc­ËZ—Áý襣—ÔÆˆf[±­ÿ’†%õKêÁ‘èHt$BËá–Ã-‡-ƒ €{{{¨5¢F ‡r€s‹Î-:·²{³{³{!î`ܾ¸}ðÁý’¯J¾ÂÿäUµŽ®=ºˆ úªB§’­ž­˜Nž’‘UC¯½ƒ'{{PC׆.]_­¯ÖW xðà_§¯Ó× î ÷„”C9”¼EÞ"oÐ@ àßæßæß#Žü2ò J¥iwµ»Ö©ä÷-[2ÌÀ­9 X+ÇÀÌ•§9–ªRñ=­hhh€/^`Š)¦…BcŒ16#Ç–ª•ªE]PT¦Êħ¢Cüïëïë°ÙÇ&_àg3ÇþïV¯vQîÞìÞ ê‡`2«‹z¬ ª1ð(ðÿp’“VòSÁg|ÌasÔo궺 L‡nŠ-úOúOhª#0ZÌä'üpàÉ_“ÿù½+ŸÛ×Åsû{>_°ÿ.yóÎ#(IEND®B`‚routino-3.2/web/www/routino/icons/marker-67-red.png 644 233 144 4164 13061246466 15446 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü)IDATXí—}lÔEÇç÷²”…B4ÊöÎÏb‘"P‚-°@B!@L{DŠ¡rÏäxkAcc9¡¡©ˆ¹Á Q/ín9ÜïäÒƒxh™ßN«ïá )>ŧø„Ðwê;õG¾’¼ÞFo£Qæ€mµ›íf"Æ‘ø–ø°CÆcpß}½¾^_~§ ì]½÷ù½ÏÛ/&D _üPüPJ…XÏΞ‡G ðQþGùV£Õ0¸rðá™Ï´>Õú€o…oksµ¹Z¿iý ßÕiW§9Ù£{WïqïqÛ/:+›Æ'ìÞÑ£ FÐØ· oAß‚”ÕÈ“sî|·ó]€G -‡Á{ bUÅ*€èŽè€‘ÖH+5®Ä•8À0ï0/I´ç»tìR²^ß‚ž¶ž6<’O‚¾±ìÍeo.{393³+¾0¾è•M‹¼‹¼‹o,¾`Ÿ´O´OhŸŸ•ŸÐÕÔÕ`n3·ÜÞ~{{ꦯ<°ò@éåÒËÉüf—YoÖ'ëKÉ—ådùÅò‹å“2ç9òðPÅCŸ{ü€ûk÷×¹—r/~txš4÷ûSý7}¼ àá]ïÌ Ìî$ n‹MÖ//*/*/rîí“rE+g4ÍhšÑD`@‰ÞŒÞþ0xBøu¸#ÜD†W ¯È})÷%€ƒÝ»–/)P_V_èz¬ë1þ~^ø9@µ^­±DóEóó° íYö,lÙ»dTɨ’Q$ŸPËÔ2µ,Þ#Ÿº?¨ü 2ECû;ú;”°bûö5¤ôúb³Ø pøÖá[©ñ“ÖI À]箌`m°65š¡%ëÙ}f÷™ÝÎJþF)T •ÂxО֞֞®m§,'`æØØæ$ˆØsgÞ›y`é³KŸ…äÜ÷•î+P+‹¾|H]Ú·´ ¤©¤ ˆ&š[ç­ó\ã±(Q+jAAmAmA­å<ÚmŒ6æ½~‘=?{~ö|!ôOôOôOZº ¿|Îå9—ÍͲœUóYÑgEÄð»Cî•§Y~n½uv*`4 dOÊžDÞøò/AÞÌÖ{ñYñ”­®ºPu¡ê‚u×ië´u_1è»å©—6n«ÐUè* } ÔÔU¯­^kÏuŽÈ¨Àwï°á`ÇÁ raÃ… ¼Æk© ß|Äí;´ 4;4ÌÕi¶Þiíoíg±ó„6¨ jÃÀ%WÉUr¹?Pû›ó¤®RV)«æ5+-J‹Ò"µbýÖßîëñõàw´»ÙzÒz2¥dÌ^c¯`{R¥1hö\ë¬u6)¥î–î–îÈš74o¨±ÞYÉíÚvm{×A+e¢L÷$YKE©(Õ· Ÿð ŸZ¯öƒöCõŸœ§µÙSí©6r‚¯• ’ª]c1x™Ë)€QŽsðW«`¯0cfÌ9ë¬übeûÊvs³óÝÕïêwý;Æn»aì!T¯êU½Ê±Ýj‰9<ñ¹B h- œ¿eü–ñ[„pU¹ª\UþŽvK½¥ÞÒTíZ5V 1üøñ·¹Íí”S=ÑœhNL®oÓô¦éMÓí¹Î[žãÊqåt$~- MßiåtÆÖ %Ãý4Ý÷ ÔnðXR»5u5u)ÚÍ1rŒœ$uúaÝHj±“N:Áïîtwº;íåŽ&³Õl5û¹ßeHqO_–øé­)C»Ë¬]»¿=©]£Ýh7ړʽ7öÞØ{cá‰ðá'ÂæG‹mZ›Ööûb)µ„ô2GŠX²ƒLÔn¯Ö›¢ÝݞݞÝFN°%ØlbĈ–¤5§jNÕœJ^;z³Þ¬7w&þ’¸?Ϩ›hØirÀs íþñ?iwÎ’9Kæ,Ij×_ì/ösh0n;;¡T*•Jå¼Úô2êíŒºŠø/íAÚ}Fkд†ÐT \Y_Y_Yo¿5ùþäû“ïß8[Ý«õj½5ãÄqD‰kG fÔËÿ£ejwGº?窲FY£¬±P, ­ÇÕGÔGÔG@ŠPDǧyѼh^Tí¼v^;¯ü51pEÆÎýß,Çù6_Ìóõ¯Òï¬VmÕVmPN+§•Óÿøù`ûcþŒéÊÈûÀ­þ£Åíƒû9ÂIEND®B`‚routino-3.2/web/www/routino/icons/limit-28.9.png 644 233 144 3072 13061246473 14672 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜïIDATHÇÍ–ïOTWÇÏ òcµfA^ˆàΤd—d@H „i(––û¢ÂÚ» KRkwë ²Z†¡ ƤlÕØV\Y$­M°à"L²CuQÄjµ¡geæÎ=Ÿ}1s{Ùþž77ϯï÷É=çùž#@!Ä3±¯óóóú¨m~Óð'íJÚe;µ»#`ÚmÚ}ã0lèÚа±gc6cØz\Ï_]/„¿šO÷‹g„áHìMì5•Æì#Pç¨s$¥Eíö°ôYú«ÐØßØpñÓ‹Ÿ²îyîy~*ý© [ëùz½Ž·_ù¿ÿeü—&?$&$&YÏg=oýs4aÎ Õ/V¿ð}Ü÷qÒ ‘@ )²PPÐ׫l=Ë×ëu<_çÓù£ýH-I-jöÔì±|-˜9 3fè|á> 6R@UT òzäuV@ŽÈL˜À°õ¸ž¯×ëx:¾Î§óGû1¶2(„nÔÎÖ΂æ©ÿ g…³@SÔD5‘p¬S©ÝÕf´PçU¿ê™ dÆRxÄ£_,©…Õ45°ú(¼)¼ 䢸P«Ô*À#_ßÊo„Â~,ŠEQÖÈÐìØìp€J²€ —øŠ¯@{¢=ÑžýôÓ¿ª7nÜ@2É$n©HE*À_i£ @–È‚¼Ãßã‹ñã‹ö#¸'„ÝרÐTßT¯ÃiyS‰“-“-püðñ÷Ž¿‡ôýË7ä2'+'+'+¡}¢}¢}¦ÓÎi§×|š/ú×£kÊ>eŸ²CgAç³Ï"¿›»Óu§Ëà“ß5e7eë[Û}MD&„b¢.½séÿÓÝ¢»E²!eÙò±åcVJ¥¶R8¶:¶:¶Â±ÇvÛ™›37gn†½©{S÷¦BÆhÆhÆ(xû¼}Þ>£¡ööv°-Ù–lKP¼§¸º¸ò~ûÜès£¬q­>[ ÚÚ ‘¬d²_ö “6&i7eãƒÊ•ÆØ{~?f³BNwNwN7ì÷í÷í÷ÁÛÛ8;œÎ(«/«/«[‹­ÅÖSž)Ï”Çh`þöüíùÛàhu´:Z¡ÜZn-·B‚;¾5¾Îüó‹-_láGÐ,šTmÝÚukµ›kä µL-3Ý4ŸJp$8DÎõ?δ̴ˆT×»®—]/ q8îƒôÒ…8´íжCÛ„(w•»Ê]By‹¼E^!:Ïwžï¹júd²L–É€+ÖUúö;rɹW~(?д‚27†ÿ·ÙŸg°ü`ùAY®cÿw«»]¬m¬my6ªÌòß‘”H ÈÏÕ%u‰0g‚ $­4Ó òŠ”ƒÀe.sxÌ2Ë ç圜BѾù(2™#,=ꢺŒëÊÿJÜ+q@ø×ÊÿôÞ•Oíëâ©}=/Øÿ/Hÿ]®ËIEND®B`‚routino-3.2/web/www/routino/icons/limit-26.7.png 644 233 144 3035 13061246473 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÒIDATHÇÍ–ýOTWÆ¿Â0BxIP|i‹&uˆí6)˜€¼u­aQ‹)KaS•¾hi Ð&ÖÄMšc°U­SšµS«@K·&N-†I늃n)j+;: e^î=Ÿýaæ:㺀痛çœï÷yžÜsÏs€ˆˆ¤†Ÿ1Ëb–Å$‡pÌŽÈ|ByBùŠ3!Ü©i“iÓ÷­ò~Êûi¶4›>ÁƺQÝ/áÖ3æ%U"f»Ùn* ã}°õ™­Ï$, áý}`9o9?„ú®ú.€ÏN|v‚]0åœrüZôkD°±nÔý_4¿ìû}ˆû"î Ó0Ç›ãEà‰Ò'J³BcYPñbÅ‹÷bïŪÐÜ@IªðâÅ¿Dac=\oô|¿¡gè‡ü¤¦Š@åË•/[އFNAóÒæ¥†^à<ðï‘AoÐ  Õh5ø@õ©>L˜ ‚u£Þè7ø ~CÏÐù‰l圈H{ lÝ2 úM€@ðNàÉÀ“ ÿ °S¥jT•ª‚à@ðZð躮ë: uYÍ«y”ãÏðgÐj¶€ ‚Ó!~uisëæVÃ`{Id+/‰ˆ¬ê‹×âõ.PþÑþÑ~`@åª\æè¢—^PËÕrµÈ$“Ì(¸À`';Ù5ïÇÿ!«Y*‹¹0Øa½°~ÈØªaJD¤ó )¯½úÚ«F³þܿͮ&W…Ö¿·ljÙÈ÷åûò}P–\–\– Ökµªëªëªë`Ú£ö(˜­ž­ž­Žôi ´Ú‚>üÏÃ_þ¶ÿmÛ Û^ˆÚà†‰'€ï’Û’Û”]¤%¤%èê޽Á½!rì¹ýYýY`m±¶X[ ±ª±ª± NÚNÚNÚ ûtöéìÓp¬âXű Xâ\â\âGª#Õ‘úè–º;ÜîX=´zhõŒ|=üÉð'=õ'wŽ;ð§™ÓÌúpŒê‹Mæ£ñÏÆ?+rãÍ‘¦‘&I/y§dsÉf‘Ú{µ?Õþ$rÀ~À~À.²ðþÂû ï‹$ªD•¨DvtïèÞÑ-²øÈâ#‹ˆÜÝ{wïݽ"ÓãÓãÓãò`œYyf噕"‹l‹>Zô‘ˆµ({köVU"""é¦NmJ›‘X½Wï5 Ǩ¶ÙÞÙÞÁ«"ß^ùöŠHÿ+7žºñÛ5 ŒÆÄß5Òu½ëºHJzJzJºHœ/ÎçÉÌ̉ï‰ï‰ïYãYãYãÙØ¹±sc§HñÅâ‹ÅEqf83œ"•¨|ºòé~ý4‹ˆ°]Ò¾q}ã‘Xo‰·dðª°?|*y£ñFøÝ:•?ÿq22&ú'îLÜAM6O6L6€o­o­o-¨6Õ¦ÚÀír»Ü.ÐmºM·RCjw>z­^ 8Bz请¼ÞbäYç1r#’#F®„sƯ–ª¥rj©¥T¢JT‰Qo¦ÊT™@!…F}\>~ã·(ܪÝÒn=”cÚ¨`™²LEçØCõöš·Ôo©u*œÌWµ$- Ô?‚3ÁØ`…ƒ¯ø ”C]R—€sœã0Ç,³ îª15h!ߤkïjïà¯Z‘Vd¸ ô|)ö¥Øÿ—üï¿ò±½]<¶÷±Çóû_Zn ön<õIEND®B`‚routino-3.2/web/www/routino/icons/limit-12.9.png 644 233 144 3020 13061246472 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÅIDATHÇÍ–ïOTgÇÏÌðk (Ä›K–I+²%¡í‹ID¤‘Ô¥?Œ !¡-hÈjÒ*}Sv‹ÑmâVM5F7ÆjvDkuH˾Ð7;e`S#-‹M`–‘ŠWaî½Ïg_ÌÜjöðysó}Î9ßï9ÏsɈ~ìëíëí«"Øþa|>e[Ê6w[Ÿ1À¶Ó¶óÎg°úÔêS™_g~műe·üWÆ‹ÄùWêYó’!ñ‰ä+ÉWl¥QÜ ï¼[²6‚ÿìç5çµ>ò~äøöâ·i‚©ž©€_J)…8¶ì–¿oñ­ä—ÖgôE ñûÄïm÷!9)9Ir*r*rqÍ…ê7«ß˜tL:”ŒY 4U hhX#¸[ö¨¿oñYü–ž¥ÉGÀUâ*·v½µËy>0ô78} ÛÒ _Žp„4Ð5]0Þ7Þ'ʧ|ذA[vËߊ·ø,~KÏÒä#¿ÞÛ/ËÑjÂ5áXB~sk8!œê3ýž~ˢ̟ÍÍA¿¯ßÓï¹d.™KćÆCÆ2ÃúZ}-a}.œÎõA„j´ ˜‹êǶRÉû œÃÎa-î–ß-c€*õw=¨YŒ)U@€VZi]‘È!qÔ#õH=ŠO+MiJþÈލUÂ"u~¶øGüNÍ©i ü;’Ot¥Îü‚º `Zľ/|§}§Qã®ñŒñŒ¸`oo/œ8~âø‰ã0pcàÆÀ¸Ýì1{Ìž8ÈÈȃ“›N¾ròÔøèÝSwOż Õxë ¯Z[{æ¡KD¤ïþÒ~´ýh¬Îú+®ö®ö.BŽJÇÇè,í,í,…ñ¤ñ¤ñ$pzœ§ÊÝåîr7äÔäÔäÔ@Ÿ§ÏÓç‰'t§êNÕ*pÏ»çÝóàÙå©öTCáo^ë~­›Ð¬fø Ÿª‡oj¾©UÉÇ.öUŸ®úôõ7¤¡d°dP„$Ûyù¯cµcµ$»2]/¹^qltltl™¨¨¨Ùaÿ…ýDnŽÝ»9&’º.u]ê:‘¾Ý}»ûvKlø÷ú÷ú÷ŠdmÈÚµAÄÉßéïIJO)J)’äï~w騥c¶ó"ÕÁê ˆúç ÷_¸ÿú™é™éæ Á%±k@ÅæŠÍ›áìðÙá³Ãñ•ðµøZ|-PPTPTPuz^§ƒqÛ¸mÜŽûMTOTOTCAsAsA3TæVæVæBÒ—‰Í‰Íð×ëë;ÖÓi:A7ÓSÓSÍÁQ¦×ôÚÅ®ïÔwJ¾$É-¹%.«býz—Þ%’öŸ´á´a‘… Š”O—O—O‹î=Ü{¸W¤ikÓÖ¦­"º®ëº.2;;;;;+²p}áúÂu‘ü§ùOóŸŠï*~¯ø=‘þ-?%þ”(âþƒûe÷ËâYؾ°]Ä^Iy¶ÁèáïûÚçÛçÁhŠœ±hÁ¡ª‡UUàmó¶yÛ £¬£¬£ ìùö|{>lº¼éò¦Ë°Æ¾Æ¾ÆçöÛwn” • • Á˜wÌ;æ…9;rvä@vVvZvôÜðq!ëLóaû;íï_EòYy+[[€ï¬[i3Á¼ùøÅÇ/¢–S—– ´'´'´fÌsÆ„ÀÕÀÕÀU˜Ê˜Ê˜Ê€ÅîÅîÅn˜›œ›œ›ê©§–w,o_ÞÓ¦ŸL?A©~=]Oz,½ÆæÆf`Ѻ•ÄúØ”sJK€cĈ‘*0kÍÚxBVÿw„ž±o¦˜bP»Õçês3`XT¿ò1òxä1€sÆ9£%øU[Ñùõ·o;⟠}PNKÆaþ„/Jµ©‹ê"¨©^Õ ªSuªN ™ROÔˆ–¤8jŒ£„U>­O·¬ÎÕ ?ÛùŸßåsûºxnßcÏç öJH¼…ÈAIEND®B`‚routino-3.2/web/www/routino/icons/limit-82.png 644 233 144 2531 13061246470 14517 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]HTiÇŸ3fã”3™¹DáWm`iÁ®}ìf ned_¸ô‹´RwÙE»kî[`‚m…Úl±ÂV–2¦t9¡)Y°+›N¸±ÓÊÑ9sÞß^Ìœ9³Ë¶{ë¹9<_ÿÿÿ=ïû<ç‘´Ø[À‘åÈrx¢¶ãíOÙœ²ùâö…h;´ý50çüœós/ϽlÚ¶·òëElüD>Ë/ib;œÍÎfͳOÂî»W¤|µëüàò¹|pøæá›7o4ò{‚=ãÞq/ض·ò­z /_Nþƒ_’Û’Û´_Á9Ó9Sr6ålZ\Mx±¶mݶàeÒË$å€Èï@*©Ê „a=¯l+Ë·ê-< ßâ³ø£z26flÒ½¥{]—¢ƒMp,óX¦ÅöµÔ’ FÈDÊ#åL‚ò+?ض·ò­z Ï·ø,þ¨ùûÞ~û”¥”¥ ÜM8Òé0kÌÂæˆr+7Ê6žÏAiJ”Ä¿æ€ùÔ| Æ/Æ1¦®rU. ÌSæ)Âè‘{‘{ ø_œ_-ý\AW04†"C`€0ëÌ:&T„<ò€¯8Îq[í´ÓÊ­ÜÊ ´ÒJkB<–¯¦X°ðlü_œ?ª'&ìBTž¨<_÷Güa Ã@2¹äF×h4 îA݃ºп¦Mÿ[Ç“®']Oºàìé³§Ïž†¾»}wûîÚqõ£z¤¡0Œqc„w•ï*ßU‚6ÂF8AX¿jP vœ?ªç½gL¥‡ÛÂmö87pnà,--'è z‚P­WëÕ:œ)=Sz¦œùÎ|g>¬­­g¡g¡g!øÆ}ã¾ñ„…_Ÿ*™*yÿ{WZƒñ'zéµ»RŸÐ'ô ëëë ( t¯îÕ½0¶tléØRééé†Ñ‹£G/‚þµ^£×ØÍÉ£Þ¨ÿß®ü—9ŠÏ±&³‰ õ©:¨‚ò©kêZBûÏR³Ô, Ÿ|òvFGG`Òþîf…Y›bÿ1Ç´ø¤•èä)K)K9Ú.Ò¢·èF˜¦ßô'¯“$í–vK 9àXàX 3øœ¬Msj©Zªˆü,·å¶Ë) @DI–d‰Èo’&i‚6ª²U¶DäKy%¯$YŒ¤¼¤<£G’w¹v¹’׉´N¶N~·)ªãؽéü¯œ¶·‹i{›ž7Ø¿Œ1{¥ÇIEND®B`‚routino-3.2/web/www/routino/icons/limit-23.2.png 644 233 144 3017 13061246473 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÄIDATHÇÍ–ýOTWǦZ`fâ[¬ñ…ɤ Ý„ºÎO†ÆD…Ú,ftLÓè¶,PdkÓ*!hi¢F⠘ɦ¤UV +íБÖJ\šT3D°AVš¸Ò¥­€ÁBG‡™:sgîùô‡ázgwÿŸ_n¾ÏË÷ûäœ{žsDDdÑÜWÀâ°8, ’ØòŽéÏx-㵜ϓøÓ¤mKÛö¯:XøñŸ]|VÿÎÄFÜÈO­1ùSõ ¿,Ó‘îM÷¦mšÃ‡à¼7ò2^Hâ†ëy1ób8¾ @gkg+ÉÞÉ^€_6ý² LlÄ|£ÞàKå—Cÿ£/ó¿œÿeÚ¤?Ÿþ¼8_u¾š½'™p/^ßúúV€ûÏÝNY ñ°cW›€! û9ñ¹|£Þà3ø =C?ÙÀÒK7Š@ñ›Åof¶$ ¾kƒê¬ê,CO»ÔSâ¡x ±+±‹(¨ëê:i¤‰¸‘oÔ|¿¡gè'û1·2""ÒXî»î» ßÐüñÿhNÍ úãxz<m®S¥õ)} âßÇG㣠éCú¦… |Š”þ½6«Í¢ÅÇ´,- ôé$?¸ï»ï }c+{DDÖü2C™¡Ð<»ë¿ëP*_åá4-´€Ú¯ö«ýÀ 3̤4âÁƒ°bÅjºUPU8D=õj£ÚH„ÃI~¥ÍéÍéóu²aRDäÓ,¬,­,5èôß§îÜžƒž<¡nÿóv÷ínSðNøNøNÏ4ži<£££f\ŸÖ§“«’´áùÖa xNz< ¨ážÀšÀSOݨ\Z¹ˆ&û‘Ä€ˆÈÀ>¸üÞå÷àÖ»£ù£ùªÌ>›Ù”ÙDtó;›wnÞ «7¬Þ°z´ûÚ}í>ÈÚµ;k7¸¸¸ÀJµR­Tà÷ù}~ŸÙPßÁ¾ƒ}Á³Çì1(Ì)\Q¸œ\\$:xå‡#?Qeà+ñ•€¾$Ù$þmk¶5+/D‘tü½«½«êN|¸íÃm¦€«ÜUî*‡š‘š‘š8úüéó§áB×…® ]à:å:å:=ôГ²Ã^‡×áu@]S]S]“éÿÝŸ_Ê})Î.ølùgË¢±h 6ë·Öo•WÐg,ÎÐGTÅâ‡Eæ±ï]ïÏögCž3ϙ焒%'JN{ØÃ·„[Â-°=w{îö\p”:J¥0`° Øø?ë]ß»¾w=ä¹ò\y.(‰¿=ñö¨Æ˜™>:}([ôþ¢÷õÑì[í[•Õ>ª…@ÕÈÞ‘½Ù™QQ õ‘úp}Øh½Ôz©õ¬k[×¶®-eE-.‹ËÍÅÍÅÍÅ ¡¡ýÒ/ýÖZk­µŽ/8^³»C/‡^†xÄ`˜¬™¬ < <ÊkQÇÂWÂWý"7oܼ!âÿÓЋC/RžížvOb¾ ¾V_«È’ü%ùKòE$Gr$GÄ©œÊ©D¬šU³j"k¯­½¶öšÈÇLJHÑXÑXјHwgwgw§ˆ8Å)N‘ŽÊŽ·:ÞYÕ¹üèò£ûÂñÍOßüD¹H`40*’¸ú ôA _h˜;•Tí­Ú ¿z“§dê¯L¼ãþñ±ñ1ÔDÙÄ®‰]===‰[‰[‰[0µcjÇÔÐmºM·ºª®ª«0S=S=S ‘e‘e‘e0õõÔWS_ÁxÇxßxjâo?žüñ$<)KêA•V¥;çNer ™s Œ¹27Ç~U+Ô ž.8ó˜Çõ…êR]À9ÎqxÌ#Š©Y5 ìà0‡Qêr\‹khêf–°™ü4¹¸WSêävïÊgöuñ̾ǞÍìoyD#ðжÑIEND®B`‚routino-3.2/web/www/routino/icons/marker-88-grey.png 644 233 144 6215 13061246467 15645 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü BIDATXÃ…—PS×¶Ç¿{Ÿ„„„AP©@.‹J[Q O+ Gh‹µñÖÚÊèªb½C±–ާ·`½¥€í€è›'”ëQ bŸ@ï`qðF$|ƒ % $NÎ~ƒŽ3®öìsÖYësöþžµ×!YYYYYYPaƬ3]+¹/¹/¹Ïê³¾Ïú>ë{3”3”3ôçpæÃ|˜Oþü|~>?EŠ£ÆQã¨ay8…S8E2†0„0Â#€¤ …åÉ’dI²$’)y$y$yÔqŠŒ2òiY¶¶¶ÿÕ®ÜäÜäÜdbæCø>„lšáZ]\*: …(DÑ !GÈr„Ö©‰©‰© ¿ÈœÚœÚœÚŠ)ó”yÊÜø/Û˶—m/¯øOe‘²HY„++6¬Ø°bÉ\)])])"çDΉœˆsñ¾è/>/Æ›ïÊ'æyD>‰k×0/æÅ¼„÷Èn²›ì)âB¸.äÚ鉳g'ÎÏñmômômtÜ`Ü`Ü`¤ÓË Ë Ë $Q–)Ë”e†Ïð>ƒ6Ø`°;±À,ÀØŽ@G  -†C ›n k k ÇÇÇoÿZ¢Q„DË»»»×1Ó1Ýý÷èrxòðäáI-hAK §¤FR#©iùÇ”}Ê>eNP¯S¯S¯ã£´j?Ô~(©P©ÆTcPc.æb.x¦a¦=èAxÀÀ8Æ1`1c1@zI/é ,°@bõ²zY½p¯êÛªo«¾åß»×|¯ù^³ä†›»›»›{ŸÄ'ñI¯mÃkx ¯=|BÝoºßt¿ H¤Ò€¿]·ÕÙêluÁ j­Z«Öò‰ºd]².YrCå¯òWùc®³ÕÙêl„­ÂVa+$ð|r‚œ '2@È@†É0p ×pí©¿3Àà ¼;¼;¼;0WŒ¯~Ký–ú->QÌ/òˆ|”çÇùñM‘S—¦.M]J~ÅWë«õÕ²Pm¹¶\[.52&P ^ÜRn)· %´„–ä ¹B®hD#衇```ÈÏägòóSÎÌ™93ÀlÌÆlðãk›µÍÚfI…o’o’o yD>ÊÂX ;²e:f:f:ˆ½{+ö6¨*Tª ¸ )BŠ/j¤Fj,Ñ–hK4ÐñSÇO?Æc„1à·ð[ø-v`v3Ú,û,û,ûžñ_j\j\  `%¬„•ÀK•¯ÊWåÃ-Ökˆ5`ƒÈ#òQ>”åCWïñ±øX|,È[³dŒfŒfŒ yÑÑÑL´ þsþsþóÙ9+©.©.©f¬øAñƒâO¯5 5 51–^•^•^ÅXÿ;ýïô¿ÃØ™¨3Qg¢+R©ŠTÏø_º>t±O~|ò㓌uÍëš×5=o"È'Áø_0zŽž£çfßL6+2—­Þ²zËê-ÀE¯‹^½}§¾Sß Œ¾1úÆè@XZXZX°è¢ ‹./I^’¼$ªtUº* ï×÷ëûÑM£›F7ažažaž@ð'ÁŸ‚çMFß§ïÓ÷œÄIœ$a”›ÏÍçæ³Ž­[5¶ }|*ŸÊ§‚£j¡–§¨ÃƒÃƒÃƒ€0O˜'Ì‹‹‹€ÉáÉáÉaÀ²Ë²Ë² °_²_²_FÖŽ¬Y B§Ð 8‚AŽ ÀawØvÀn ·„Ž2G™£lPÌÇMÜš¸5q }TMÕTÍþ)‘““ã úüûüûü%ÿÕÐÐ@2#³#³#³aŸ ž ž †¢9¢9¢9H¬L¬L¬¢i4¦Üáw 8µ8µ88ÿöù·Ï¿ îÜ;¸HJJÖ5d Ál9(œ[8·p.PwºîtÝi`;¶c;`7m4m4m„ÂÄ™8‡¯ä}ò>y_@¡…ÚìS’,I–$‹d^}ýêëW_wª­yÖÀø€ž¸üÕå¯.Åï³&Y“¬IP4’FÒ0&è ‡8Ä8†c8àîàÀ^a¯°W!DBfµèUWXWXWèL   –ˤ2©LZ™»øôâÓ‹O} ÙÈF6ùzÑ‹^~½Ø*1€ ð]HCÒHMøÅð‹á 6Ëur\W™;¢ÑŒh$Öª„ª„ªgº˜D’H B‚vØa¦"*¡„ŒVÒJZ Y›©ÍÔfbqíKÚ—´/á ”r¥\)89unêÜÔ¹Œ/»2º2º2fb&f‚·+J¹jsçÁCð€wç`ç`ç 0•6•6•–ñ¥ÒGé£ô¹ÎXk¬5Örõ[ë·Öoeqd?ÙOöC&è½ Ëe£l <á û¯¦_M¿šPÙÑÑo¥YiVša•°JX•ñ%=NÓã'gŽl®ØUV7‰_ÜõK"sM][ÄÌtEÎtE¢HTÜæ™_Žk§÷Mï›Þ'Ø.l¶ tí²ãËŽ/;Ž$¡[躡 Kèº>“Ïä3!ûNóæ;s±ùUó«æW¹y„,åzä‡ä‡ä‡º®8~qüâøåÐ×={6öl\€j±žŠ€"ß,èsÀ¢ƒÂà'—v/†W‡W‡Wl–ï‘ï‘ï©Ì™?2d¾Äz>ë|Öù,gº«£÷6Ì1Ì1ÌÁ™–›-7[n’÷ÝŠnE7 ¨µ >Ð*yWò®ä]û„® ]º’þæÊ÷ºk´?ÏÅáw,&&&&&¼kj`n̹‘Tó‹æÍ/â¿‹œ‹œ‹þÅËBe¡²Ð·O<^ÿxýãõsª­w­w­wÙß;Ë;Ë;ËkƧǧǧ¹4éZéZéÚY+ce?\ 2ȸ{ø ¿á7a¸®…âŸç!øûíæ õ¨wf³VÃjbzéz^øßÐÉ7'ßœ|SxQZ*-•–Ò»œŽÓqº¦fÍÍÍ…?ǘzM½¦^Ò ø ~‚;íŠ[ë´ýÅØsÚu• g6öc?öK:H2I&É×5¬žÕ³úOwº¹¹Ñ»Ü7À ü$ä ùBþ¾ÁîmÝÛº·3€uÅKûqü?]3.?Ø…IEND®B`‚routino-3.2/web/www/routino/icons/limit-9.png 644 233 144 2060 13061246467 14441 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜåIDATHÇÍ–MH\W†¿ÑÆPEÝ Œ !8 "d¤i ?‚- YØâ¢™]£†fQ75‹,Ä ÍBŒ†˜}°©b‚X&ƒTLPqPäâÄ{ïyº¸÷Ü{íJw~›áû{ß÷œsÏ7G@DDÎ8¿)Å)Å)9¶Ÿòƒϸ˜q±äwÛdBàZàÚß¿À釧ä>Î}l½ó|×õþ~ßϧãrF¼@úXúX ìø÷àFÕªŒÛÿu2'2'þ5àÖ‹[/ž?yþ„nXŸYŸØ ï„Áóu^×ë~çÇ—{ÿãS¯N½ üéiéi"p®ù\sð'»àC._º| àcêÇT•æE–  h‹û|wêu¿ÆÓøšOóÛzò/ä_«mWÛ2Gì†w£pç쳚ï`xÀ²ÀH ó¦y“$¨i5 @€x¾Îëzݯñ4¾æÓü¶9|¶ƒßÂõŒë® ?Á|c¾”ÕiurÀJWXÖWë+ÛÆ¶± êGÕ­ºñlO×[]V.ž‹¯ù4¿ø•ý™ë™ë‰oà½ùÞta¿«Ãê`Ï!pMÊPÐG}¾D't-´Ðâ‹'Ý¥Øx.¾æÓü¶GØ£?àöÝÛwÝæZߨ+Þaƒ  € <¾Å²Å²Å2ªªªƒ•å•å•eßæÕ¼šw¤%}x‡ð­ZßÖãûëgxöùÙg·ï{0ŸšOI‚½[J”(ñc½±ÞX/”ì–ì–ìBC[C[CÔ–Ö–Ö–B¼"^¯ð œU³jÖ9Ü=ðá;|šßÖ#ó:絃õóëçÖŒšqV§À ›a3ìe‡£ÃÑá(Ôg×g×g{ñPu¨:T #“#“#“^Üì2»Ì.Ï‡ï˜æ·õäfçf[1ˆŠr«â ¶Ô–OfêQ=ž¿¶º¶º¶ U‘ªHUZƒ­ÁÖ ¤ ¦ ¦ ÂhÑhÑh‘OX³Ùl6Z¸?îñÛzRD¬—ÖË@Lĸb\mù"òA>Ø÷C‘MÙ”M7/û…û…û…"ååå"M±¦XSL$¯?¯?¯_$8œNxõš@M Æ‡çá;|šßÑsÔoŒTRIõÖ›ˆ$"‰´6¶6¶6Bq~q~q>Dæ"s‘9߯tÐA0Î8ãÇúÆŽx+õ­šbŠ)7¹”\J.Á†µamX Ô‚Zf™eÖ'ð€/|9ö­<ÂKrØB„jWíªÝ÷åTªJU D‰õÕ®ˆã̱#L~=¹ wmà>÷}ã`ž·¼õ 2uý±'ÿ‰ý¯<±¯‹û;™/ØÿDË™<=ƒWIEND®B`‚routino-3.2/web/www/routino/icons/limit-67.png 644 233 144 2347 13061246467 14535 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜœIDATHÇÍ–mhSWÆOâK›-ÚV:‘ª(n–UZ(ˆ:$‘IhAªØÅ¡}Cd s`@Ôµ ­ÅÂ$¥Y˜oL+"¶ 6uÎoÛ—N+2u`µÂ2£) y¹çžß>$'÷nÌ~Ù—ž/áù¿<ÏssÎùß+@!DyáW€s©s©s~;Û¬x©¯Ô÷áyÜ'Á±Õ±õ·¯¡ìLÙ€ŠþŠ~sÜÂ:¯ëíýBXüv=å ”\.¹ìðð1h®k®+ý ;ï‚ëªëjÒ€ökí×® \à ˜¼?y î{ÁÂ:¯ëu¿æ³ó‹cÿÒæÜ˜sÃñ”Ì-™+,Û´lÓŠ/󿯀-›·l˜˜51K9@þ ¸q+/0ÅzÅlXç õº_ói~­§õó~Tz*=B€‡‡+”oÀÁ%—h½ÜUà8Çqƒ1eLÈÙBÔ]u°°Îëzݯù4¿ÖÓúy?âŸ{Ûõ)l+ÝVZ4ô3Sò¦¼ `†Ì9ÕªºTʈ·Œ[ >QëÔ:P1S10²FÆÈ€üLn—ÛA:e­¬E©e™,#¦Ót‰QOë »¡»Á5éšœš åc ¤h³Óì$ÅGøñƒúK½T/±Ö ƒ ûØÇ>[O>O>âÒ©K§.¢2U™ªL Qã­ñÖx…ÈÂÑï9BBˆYâ™xfÓ+êü¼ëŒñ­¬•µdHóš×ÖïìØÙ±³\Ê¥\ v-Þµx×b+ïOûÓþ4ô8{œ=NÛÑ•£r,>–áiÏØô·’ǤHY·R¦dJ¦ ¶!¶!¶ÁÂz½ ¿ ¿ CzMzMzí0Ä`æØït·ò?æXVÏ3hIà$'A½¯f«Ù¶3S¥ªTàÁƒÇfä‡8ü¿96Íä—…-À<` ÇEÆC©{ꎺ|Ï6Ý÷pá¾á0‡-ÿäÌ€ òž¼gã÷䟱ïÊûu1c¿ÇfæìßQ{mN{¸/YIEND®B`‚routino-3.2/web/www/routino/icons/limit-56.png 644 233 144 2520 13061246467 14524 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]H”YÆÿ3fŽ¢i4EØ•}ÁJk Û…–SÆYÐTŒ ‘­ …DÔ…D-Õͱ•4¥D¤[KD–î¬K{±6d©ÑEm¶â¨… £ï{Îo/fμ³K»Ývn†ÿ×ó6¬ß° /­/M»À²ÉÖ> J³†RbSOô›yƒgð Ÿáëð–yËD`ã¶Û2ÏǺ/Ùf¾ñàÇÈ+jEìJ»’èvÝ€ 8±©›~3oð ¾á3üq=òϳ­ÿ6{6{ `üW°ŸØO€vU  ·¿µ¯ÚWÑöb{¾=ì-¶ßö!B„@Ö‡ô!°~³Ú­vPJ/Ô Ñ êU=ã¼·ïÚwmð|I~I´ø{ÈìÏìN€gö3P|j—ÚÅ(a,, Â+^ •良 (=¬‡õpJþ'®rØM ªNÕ1ʘÁOð%ùãzÂÎþ5‡k4õ9—­«! ¯­¯-¿å‡ëU׫®WÁÿÿ?cÁX0c ÆŒ-€Å/Š_C}Z}Z}tú;ý~G§îÔA3j X)|Iþ¸ž„°?öCÓHÓHr¼J·Y;¬ÄL&Œ#A˜¾lú²éË â^ŽŠ{°½u{ëöVèNïNïNßßßX×´®i]” — — ÃË–—-/[Rîµò¬<ƒ¯«þ¸·È¤“}!R¶¦lMâ|Åu^ÿ)’!&ó°òaåÃJ‘èÊèÊèJ5 Ô€H $P(é©í©í©éêíêíêñ–{˽å"¥žRO©GÄö†½aI.×C÷÷ƒï:ïð'ôÀäœÉ9ê) ½zí\{uÌÞkïuv::: U««VW­†s£çFÏÂ’‘%#KF ð.ð.ðVœ\qrÅIF‚‘`ftÌè˜Ñ­³[g·ÎvðT©½È^”j3†?®Ç-¢n©[®§"V…U‘ÜWþ’viwvØî÷‡EæZs­¹–HuVuVu–H~v~v~¶Hlwlwl·Hnqnqn±HÍ´ši5ÓD¦†¦†¦†DúNôè;áàñ™d¦ð%ùãzÜ"Q_Ô÷èw‘¶Ö¶ÖäØN׺N×ɘÉn-ÜZ¸UäRàRàR@$/œÎ ‹,m^Ú¼´Y¤9§9§9GĻʻʻJ$ë`ÖÁ¬ƒ"E=E=E="•žJO¥Ç–su¹º >;þ„žÿ¼•Ææ1ã®0æóù`000t™.ÓeÎÙ½v¯Ý C¾!ßÔ"µH9GÏyÏ{tŠñþß­ü€E“>Ö¨ÕÇôM}ôú”>•r»îè;úè&ݤ›@/×Ëõò”z¾ž¢§eìa€:®Ž3š¸ó±8? g¶ì6» @íWû§–³œEëú®¾ Üä7Rþ‘F®ptHß×÷Fñ jŸÚÇ8¶Áû¨ó²ßÊOöuñɾÇ>Íìß6¡Í‚–™]VIEND®B`‚routino-3.2/web/www/routino/icons/marker-4-grey.png 644 233 144 5645 13061246465 15555 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ZIDATXÃ…—PTåÆŸ÷=ûƒÝEd¥‘¶a@ÖåGBé((‰¹€–šƒV4Y9#D\&‡Ë(u*½1£ #ºÙÕ.]5‚TD íJ £ˆ"Hü eDÀJv]`awϾïýƒsÀ±Ûôþsæì9çy>ûý>óžï!ÄÄrLèÅ-Å-Å-^SðuÁ×_óÇ‹îÝ+º·|×s=×ïz[4ˆÑ0?Ó}Ò}Ò}’ï„VXI>¢…(]èB€Ld"“ïT¯Q¯Q¯!ùŠÅ€bàš•Ø‰Ø?8X\\|¶Ý’nI·¤“A1\ ÃÉÊ Ö qÒIÀ$ ~ÊX+b žQϨgtæ‚¢ª¢ª¢ªoz=ƒžAÏ`íe×<×<×¼ùïéöêöêö¢zþ²ùËæ/#ùqÊ8eœX0cÁŒ3ù\¾.ß/?/ëMêK~²¿Ì#ó)¤ &òÀØz²‘l$Ã÷ áB¸þÓ—£e£e£e³fÕÕÕúò–u-ëZÖE½±m±m±mäu¾:_>ćøZ¸à‚ ÀlÀOà <—;ÄâÁ mõmõmõÜ{.ê\Ô¹(–wÿ¹ûÏÝîõϵáÚpmø3~¾¾¾){yÏà·ÖÐDÊ>b±Ø>ÆÇøXÈ4Á_ðü2yxx̺¹*rUä*1!ËåÎr ïNTŒŒª_V¿¬~"¯á5¼Z̃y0ÀóÅ|1ÀN±SìÀÖ²µl-´ê7Õoªß„(?/ëÉú²Ÿì/óÈ|TÓ¤iÒ4ÊÇ•+ÿ´ÎuÆuÆufÖ*cš1͘&¾‘ž‘ž‘®¸¨ Ôjñkd¬Àz¬Çz(Èyržœ&2MdÙÐsô=Ðyt`5Vc5ò󲞬/ûÉþ2ÌGŠjŠjŠjV.ð4yšô¡€h¨¡†À;xï’ŸBS¢)Ñ”À¶8lqØbä755aÅ'øŸ(zœ§Ç'ÿ™'p'è ƒî¡V‡"¡±±v‹Ýb·•‰•‰•‰À³îgÝϺp{¸=ÜŒÇãÆ‡*Ú~ô?”m à:®ãú”?}ƒ¾Aßpp€DQÁ ÿÖïŒwÆãWq‹¸EÜüH~$?‚OŸÂ)œЉNtNù–וו׳›g7Ïn–ÞXzcé À½Â½Â½N'„v |ðÁ7ÒMºI7¸t—0Ú<Ú<ÚŒ_©‘©‘K¶¶¶<÷ÆfŽÍ›©8ôjÏ«=¯öüùÎùÎùN¸Ø(e£Ð’hM¢r‡Ü!w€ßøøÆÇ€5ÚmbNÇœŽ9 L ›6- èmímímXËa9€éšéšéðbÌ‹1/ƪ4Uš* `·Ùmv ³è,: ®žÔžÔžTh­¢U´ŠÈV¥¨RT)^‹b"ì…VE²"Y‘üéGgóÎæÍósss…žÀ–À–À8Y«cu˜xSz³Þ¬7 w,ܱpÀwóÝ|7 ÆŠ±b,@Ûi;mxâAS‘A‚4U`ZM«i5ÜbƒØ 6@{ÚvÚvÚÆˆHD"ÒKÄLÌÄü¥ƒìÙ³?¸÷ó½Ÿïýüï;£o¾=úö!‘k#×F®õmÎx+ã­Œ·„b^ÂKx Üd)YJ–B=9|(¡„`>æc>€ T `M´&Z§€2/d^ȼHi$¤œ$“d’ RÑSÑSÑÃ\—‡/_¦ZmŸ¶OÛwc·Ê[å­Zôí;Ów¦ï à=ï=ï=ÿÁ÷ºåºåºå·¿ì:Öu¬ë˜P\óJÍ+5¯ðd’CrHÔ¬5°pX``#l„¼—÷òÞ)°ÙGf™}0Þ5Þ5Þ}há#|ÇZ·¶nmÝŠÕ—c/Ç^Ž¥ZAcÐÆŸc ,%¬[&” åBùØLJ­ÔJ­BÝC÷Ð=w7±nÖͺ7z´õÚzm=Po¬7ÖyLÛ{mïµ½‡£4›fÓlŒñj^Í«êOý©? „ ¡BèP²1Ù˜lRn§ÜN¹=Õz!X‚áÖë‡õÐV[ª-ÕѨ¼©¼©¼ 'qç6F‘EdQÇ;(F1Š!Ҙ狛˜ÛÉ^²—ìýoM¢I4)ï$2 úE©"UDÌvìpìp쀖\%WÉU8'³'o3råy#oø~¾ŸïŸÜ?ÝÒå€êÜêÜê\ßfûVûVûVÅ>u„:BqÔ¹3rgäÎÏB! QHŽ¡ÝèSdizÑ‹^±¹ÈE.99§rNåœÊâµ~Y~Y~YG-v½]o×+ß=öÝcß=æÛ,ò|žÏóáÆ/ø¿LÍxÏâYàÒ ­¾Ø}±ûb7O¾òÕ®ü ë‚uÁºà¾qO™§ÌSöþgí…í…í…·q·aºäsDuIÇãÌŸù3Loéoéoé<¹ž\OîûŸéô:½NëxWUWUWÕÿÉn+ceàòFÎðü@)¥”bìwÛï¶ßm8Z;·vní\L× êuƒ‹gñ,þýÏ&¢×7.EqŸÔ—•ò €È­’>IÔÒ©Ô"¡µ¨E­o3I $!yíÄ'ÇOß{³½ÙÞlöîëìuö:£Kb÷Äî‰Ýƒ5¬“u²Nhi4¦Ñp‹ùb¾˜uIDIDI„/rpÑà¢ÁEÂM¿§ýžö{ºø.p y—X)+e¥Š}Rg7ɳX,‹ÎÉTI?LfHÊîf)»û¤ìžøSv½UÞ*¯˜í8è8è8­TÁr%ÎŽ;;Æ\}¥}¥}¥ÂM¿m~Ûü¶µW»ïºïºïnûüæó7Ÿ¿ù< Ê/[­ 8¹ßâ‘õÈ ZIà‚”Ýïÿ”]ƒÝ`7(ååå¾ÍˆD$"1½mFÛŒ¶8\ßTßTßDÖk;µÚN€™‘ßmP¼¦xMñÚØbSœ)ÎG‡$¿ÕÒqìQ.±Ìf³Ùl†(¶qWqùÇà“ƒO>‰ùB}¡¾ÐË¢Ú¤6©M/ñ[Êo)¿¥Ì¨tt8:üŸ-GZŽ´ñ%ŽxG¼#^!W¹D¹D¹dK?Èòƒÿ©ž˜ž„ aCì ¹R¡ÄGyþfýEv‹PƒÔø ùI~’Ÿ4wÓ ZA+ΛÆSÇSÇSÙ“ÊRe©²”vB†qî爊ˆŠˆŠåf[·­ÛÖM~`3ÙL6“)éVI€®¿â ø›õHv¥íÂWˆä Gq¤“t’^1ñ‘÷ÁM˜&LF;„^¡Wè½Æv±]lWvçºÎuë€ @˜$=y°û;Žÿô,ÁÝÖ¢éÊIEND®B`‚routino-3.2/web/www/routino/icons/marker-84-grey.png 644 233 144 6240 13061246467 15637 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü UIDATXÃ…—{P×¶Æ¿ÝÝ3ÃÌ €Œ¼dD *1ÔXJ0w´ŒX” ã+„¥9É!G3¹¹Áè• Ä”ˆÞÜÌá¨Á#”#ŒÞX F¥—1:a˜ðš™îÞç¦á\«RYÿìêîÝëûõÚ_ï^M ƒÁ`€&Â610˹ûÜ}î>­5|køÖð-}.¿'¿'¿gu4õ¥¾Ô÷Àv>€àâ¶9ªÕŽjZˆã8Žã$‘ˆD$€t À6lÃ6Z¨HU¤*RI.÷„{Â=¹~œ ’A2ø×²ýþûý÷û×·ddd+ʇò¡dí‡hrsù0“€K±K™ïÄ|1_ÌMÎçˆsÄoQ¾1ߘoüÎì´:­NkÝÕÑ…£ GÆýE]¬.Vã|ܪ¸Uq«HîbÙbÙb°hú¢é‹¦Ò±t]š/Ý/å›ÌïÖ“ô%‰sWðEêE½¨—˜N2I&É -fCÙP6ô§#'GNŽœœ3}FÝŒºužU«:Vu0®ù­ó[ç·’E®"W‘‹Q|„ðTÅ(FlÅVlˆ@bÔär!¥µ©µ©µ‰º"""Å=O_yúÊÓW6V…ªBU¡Ë<„L!SÈ\YLõTOõ÷Ó ˜ɾñ}ãûÆ4¡ MAÓ¸j®š«nú‡sÌ9曳N³B³B³‚_ª{W÷®î]î;»ÝÇ fb&f‚§á4œ†ƒC':Ñ Àžð0Œa ˆ@"ÒEºHxô£ýàl^6/›î}äû#ßáÓï5Þk¼×Èý"WÊ•råƒ |*ŸÊ§¾´ /á%¼ôèwFÙ¢lQ¶²çdÏÉžû¯K£F/Œ^˜³N£Óè4:>EŸ¡ÏÐgp¿øøûøûøc¦`L‚ 7ˆÄ àà _øä9BŽÄLÌÄ ÒCzr™\&—'+Ì áB¸xoôÞè½3¥üš×4¯i^ãS$}‰Gâcøa~˜^»ÈyÎyÎy.ã…ºº:¦+וëÊ9É#v‘‘«eµ¬`Ž2G™£9OΓó.â".8ŒÃ8 €€"@Ói:MØN¶“íÜ+â%å×UéªtUÜw’¾Ä#ñ!ï~Þý¼û¿üç‡M6}ØDéÕ5W×\]#î 1"è½ §“ÑÙÙIé5Ó5Ó5¥í1í1í1”ºê\u®º©yÔDMÔD)M  4aêtWEWEW¥æó€™>#’¾Ä#ñ1|Ƈ%ìðí÷í÷íGaLRLRL)ņ09sœ9ÎZ;[;[;/²¿Èþ"¸0xað PÑ\Ñ\Ñ ”Ï.Ÿ]>¶ Û…í²‘lWqWÛoß~ûöÛ@±£ØQìÌÑæhs4¦b6aä’¾Ä#ñqŽÇ€cÿ½6zmôZä*¯(¯(¯`T0Á[À°Àå¶Ëm—Ûÿ4ÿ4ÿ4 ûùì糟z/ö^ì½|Þÿyÿçý@{V{V{ }Aû‚öÀRb)±”çbÏÅž‹ÔËÔËÔ˶‘md§8…!AH§|_ù¾ò}Œ†$†$†$"÷ÆÀ8ÀàS|ŠOI$sŠ9Åœš¼O :•(á„7Þúæ÷Íï›T<¨xPñ8r:åt ñ[Äo¿ayayayŸÌ'óÉ@åÜʹ•shy´v}ìú`¶˜-f ÀŠ¬ÈŠ@çæÎÍ›ÁºÁºÁ:àIô“è'Ñ€ï.ß]¾»€Y-³Zfµ`ì®ì®ì® ²†Y ³fáo …‡?À@tûsÎÀHný«õ¯Ö¿*hl…¶B[!T<x<€Ýó-Ï·<߬'­'­'§*ÑßÖßÖß ]º6t ’É‚d@\@\@\à™é™é™   ¬ëÅzÐB -ÀX cÃNeì0v;Ä¥¤›t“n%ˆpBNŽjjjžÆžÆžÆŠßFvŽìÙ¹%(¼#¼#¼CؽíÖ¶[Ûn±EíiíiíipTWWCA?¡ŸÐOÑGô}€àúàúàz`‹÷ï-Þ€ê’ê’êÒÔ9s¹Î\`_ß¾¾}}@º5Ýšn]X³°fa È™³gΞ9+Ž6Ïkž×ӞООø¿4›Î¦³é¢{‚=Áž°àBoLoLoŒ°;.>.>.žIÃc<Æc8H,‰%±à0 Ó0 €J(Lƒi0(± ±€»Ò}¥ûJ7MnØÓ°§aó÷i!ÓB¦…<w=u=u=ÝôZ_z_z_º'õ¤žÔ“mîû@jœGÝã)ÑSô=á}ÓrÓrÓ8sœ9Μ>Sûª}Õ¾÷Ou;ŒF¶¨vCí†Ú 4™d‘,’…X!Vˆ “€Ctˆ„'<á1Ö×Ý×Ý×ʺu êÀ[mU[ÕV@ŒãÅø>c1‡˜CÆÝV,™À¡k¥‘ÖÄýK¢øÿKÄMxWØM–’¥dirÚÄ/ÇOÿtírírí³7‹›ÅÍ"³|þ¡ù‡æBªØ.¶‹íP1QLŸËçò¹P|þUøWáB„u‰u‰u Ûé±ÀcÇ‚¢e/Íž_ÄR±T,åJ`†fþ=É"°K…ûĤ‡ÜÞÝíön )&Ťøâ9æeæeæå=ÕÐC=ó¥Ñet]ü.[™­ÌVÃ0 Ã`HªDýXýXý˜8ú¨ôQé£R¶Óc¯Ç^½mç÷î\Ó¹¦s àÔHû©(ñM‚>,MP¹\FrCþ}6úlôÙ¢4;ïÇvQ,Ñ€:£5ºâŠÁu- 0¥&š5ˆ‘¸µ*Ú±5¡Ú-)[ñGÚŒÙÅ‚óPS²˜Ô²a­“-·ÉnBZ«3S-¦£XfptàÝw¿ýƒ¹ï½™TÍf÷üœwî9ßwïùî¹hÜ&S‚É©Zª–ªIãÒSºRºRºJ«2•©ì¢E´ˆãaÞL*©¤ Hôy³X/òE=Q?O.HäcçWKµT+{ãY9j—Ú¥vy‡¤=ÒiI$#s8s8sŸo¸µáÖ†[ÀÆ{ïm¼”––Z¾ˆ‹õ"_ÔõÞóùüj¢?û9"GäH`‘8¡Õ3ªgT³·Oõê;ÕÇ_ ? ? ? @‚(F0‚L?ëE¾¨'ê'âÍþäùüÈ9QÊA9¸$ ^-¼ZxUÿoÌ7æƒqã ù|>:;ÈŽ°#[¬ï×÷¬LŸ¢OØbý€~`Y#køBžËs¡‹|QOÔ7 'à;'šÔ$¯ä•¼Dê!õz¨ý‘PÒ\Ò\Ò¬—™ÄÞáûø>„õv½Mox8Œdðóü<Cd`V5æsà>îôv½Cïø;ÜÃ=‹ÅOà >‚9î:î:î®]"8ÎF>ÇÿÀÿÀÿ?Çë„ÙGìö, ó+üŠÍÇÓ¡§CÉäÀØc?&¬ÿ’i¹ì#ÖÀ¬¨Àø‚ÉOÝ¥îRwõU'ªNTñíñQÝ«{u¯ 0f Cv‚çûÎ÷@æÄ̉Àøu€É9“sàô£Óìù¼”—ZnRý¨À7O6ñPfnfnf.š‡J‡J‡¬B:\pÁ lغ ·Óo§€ò…ò¬ÉZ“ÝK»—À›Gßüæ–Í-€ª¯«¾¬IÊαsã?Ù9 ïrËå–Ë-æ ø{)OÊ“òÆ~"e©²TYZ×$n™k–k–k›íßäßäßd.«Ø%vÉÆß=v÷,÷/÷Àõ·®¿eßÀw-ßµØ5üYÏg=¢ñðkl&›im?Š(¢rërërë óP²”,%ëäÏ”îNw§»‰Ô+êõJGÐøå%å%ål¯¨dxØìÄ ‰½‹Èòþåý ªª kô5:¤S‚P\_\ l5Žb2'Yˆ…ÀE•êÕ7ªoQ“`R£Ôükó¸?!D‰6ãSGž#Ï‘ø³Hðôôä«ÌùñòØ‚±‘k‘kðîÉwO@~N~4|ßð=€Øã /Øîz•þ±þ±Õ곑³‘³¼f>¡Mr“Üô´Tš&M“¦ýæTAå¦y¿¶H[¤-Å­R‡Ô!u­;µ^í’vÉ:O¶Wé!ÀlÌ3Áà`m…Üø*ãCãCk{ÁŽ`[° p¥¹Ò\iú.ó$ë•z¥ÞSbR+£2*S×"*¢"µž¼ä%/‘RBJèínóimu¶:[õ ÿ~ÿNÿN»vWŒW€­`+pv€e¯³×h\ãÀ7óz^om§âzÅõŠël¯ù¨#êˆÖ½;{wön"¹D.‘K¤sqvU‚æ¯â¿7+w”;Êéâœ}söÍÙGä¨vT;ªµS»E%E%EvíÃ4hÐ< m­žÇæ±yÖù_v|Ùñe|•¨çÈpd82‚OÇ}gZb§¥ž¤Ö“”ä~•è;ÓÆµë?÷Lífèz†EȸoÜ7î[ZÀmÂÀ„ |ƒ©Ét9]NãIRü4‰_*=ÿƒrxí€÷ßyÿ~? ÿ0 0m›¶iq#ߨ7ðãKóÏøE`ÙÕeW-!,4,Tv'ìNüC a"öíÝ·àñ’ÇKThÿ¢ˆR6Àƒc¹ÙF<˜oÔx¾Ágðú°æXsD °¤°$¢=Ppÿ"‹?oðùz€7y“(ð{ü­L+à ꦺ € ˜¶7òzÏÀ7ø þ@?æ(çDDZráàØÁ1Ð]¾!ÿ·¾_胾¯}_ã vªT…:¤ÿŽÿ¶ÿ6躮ë:æšg†ài ôWôWð©­N«=1€ER$€Óà7Fù­ˆHÊ_!Âáñ,¥ilhl Ôµ…9þÁ 2U¦ÊÖ±Žu‹饗^à0‡9Ìÿ¯RHõ…6«Í2ôæ3;Ö7Ö üúþ%"âdEueu¥¢oº¿ûË¿üZ.´´·´£î6Ým¼ÛhòLdNdNdBKgKgK'Ü+¾W|¯ØŒ«i5­¦A¥©4•fúÇkÆOŽŸD݈ïé1ù”¯úxõqLÎ1(zˆÈÈëÐÓÔÓ¬O?y¬ªVÿ9&)& oqDE@B\B\B\Ë»–w-ì…öB{!Ø«ìUö*Èrg¹³Üð¨ëQ×£®E Ú•]ÙAåª\• I¯&•&•Bn§-Ï–‡7˜U¥ÿæRÒ¥$`4ÐOˆ¥3zmôÚôm"9m9m"ZüÌ¡™C–ö“rê…S/HXÑß‹‡Š‡D’£’£’£D®T^©¼R)2á˜pL8DÖxÖxÖxD²Wg¯Î^-b-±–XKdaY®[®[®‹4”6”6”Šxý«¼«DÖœ±~lýX‚YíüzgýÎzùÕŠéÛ×ÊŸVþ¤ò–«ÁÕ`nûÿÎ{¾ó|!!!°±cÿÆ~8zàè£`sëæÖÍ­p¶ílÛÙ6ˆŽŽ†¾¹¾¹¾9󋵟h?Ñ~b§b§b§ ¢®¢®¢ž?x<ñ8<ÌœìšìÂO_zú¨š˜†˜}T´ßF†F†ªnðæxsàÒþî²î2HÿݦäMÉ&ÍasØP°«`WÁ.س|Ïò=ËÍxzYzYzœ{pîÁ¹ 5jZ#œ:?t~ò{ó{ó{!5>5.5–ýrÉÔ’)ø¨»ïjßU€™-3[@_99ªºE½mücï¹ßsÃL`æ¶·vfìÌÀ=ýyôçP>R>R>Þ­Þ­Þ­P~¤üHùß¾#|TÛ«íÕvp¦9Óœi1ž1ž1ÎZg­³Ö|Ž·;Îtœ}ç÷fïÍ6ÿ1­ýâé‹§ ]y=¨cŽAn×Xk¬æ.ñoûqúÇipþÓù‰ó”V¯Õkõ&vK»¥Ý×××Ð;ô½ÔuGÝw»ÇÝZ…V¡U€:¨^T/Âü/æ³æ³PÿùÆõ™ë3`$À‡VóFÍÀTpW2ø3[Ð1õÇ+T…Ì©ZuLÕ¬šU3¨íj»Ú¾h÷­WëÕz ‡ré—'xD¹qãfU¬ŠeÄ÷uÓàW†ŽÊï5”·hiÑRàT@™UŸÿ‰ÿ ð7mR›4•Ÿw¹ÀPƒê†º\æ2—9f™5©ª‡À÷ Ê_«×â£IûTûˆ\PþТP0ùñgö¬|foÏì}ìÙ¼Áþ>[¨%›IEND®B`‚routino-3.2/web/www/routino/icons/home.png 644 233 144 351 12002775154 14060 0‰PNG  IHDR Ùs²sRGB®Îé pHYs  šœtIMEÚ&Aµ•{IDATHÇÕÔË€ Dѹ†ÿÿeÜã°-D” ›9„¶ÔZyÛ©G0ðfo$1òj3¯¤qðb/œüfpó‹"ÀOŽ?H‚|·„ù¦éà’]\ҢΕÏ»8¯ÔÕ”0¼OUóÒ ²}*i"_.aþóÿƒ­;¿Ü*IEND®B`‚routino-3.2/web/www/routino/icons/marker-97-red.png 644 233 144 4162 13061246467 15450 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü'IDATXíWkLTg~Ïe¡Ýˆ2£1®ºë x:HâÔD~à’‚Ô-é&QFcBC6J¥XØ.M¥Tâ%„ 3¸m¨k³†Í¬•ÒÔ°ºÒ°†Z QL­G†9—gp¾3gf»šÍîûÞûs¾÷y¿/C4'‹)Bøí1žOŒ‡{ªâçuÌë˜×±k³(‹²(ß>Gëi=­æÜj-‰$’Èt RWkY<ËgõXýÈ~üöHâ3"õ•òSü?5¼žPrqrqr±\ÑÜÝÜÝÜ­Î÷ùÇücÀ4¦1 `Ãt]ó³x–Ïê±ú‘ýV~ø||dYÈð#üÈðUV ³+³+³KÚ2 …0MÔ5EM$WÉUr §Éir ;d‡ì0蚟ų|VÕ×Gô·,Ô¡qnÎ͹‰ÄSâ)ñTk/K°×Úßµ¿+9t`ÇÔ:µ~©u¶f¶P‡C½¡^³Jª’ øßPp ·@~[~À¬l“m€:,¥Ké€Ô:ãšqê1e“² ~Vß^k¯´WJÖŸáaøÈtßtßt÷`©¶œ´œTWù~ò=ô=Ä„VÇ/¿* án¡ÊNu'às|á!ÿ{¼üžú†ú†®ú}?ù.ú.bÂRmùÀòºŠáÑñ‰eb™XÖsŠ94¾Öøšú¦V ¹C-¡C‡`ÿÕþ«p.ý\:t+ÝŠÂl÷l7|JŸ´ÙÚlà.p¶›ÚMÐÖ×ÖHî ôä@ã3qgâÔ7õ“ÀGêh¢-Ñ–hCí“]Ov=Ù¸‹»`eßìštMs{f˜aÔ}ük˜]=»ª U£Ÿ q!˜oŸoà×ìÖKw.ÝÑJOv=nÜ0< zzoÝÞº½uá/“‡°Œ†ž†žÀK½/õ@i~i¾ñ¯5^k€y óàÛ´oÓ@yª<€ñôñtc|á… u7ë.€Q Crµ\îÏð0|¼¶RkM9¦S޾c1TB^òÑ/d›l#"òçÿŽˆh…s…ÓxS$oIÞBDªUõ­ë[GDÄ/à%ÜN¸MDÔy¤ó‘wÌ;FDtñ­‹oQ¬V¦E]©® ÷7µ›ÚMíúʳûU-Úܰ¹asg¸g?>ûÀŸäò ¨ø-}yLyŒq”¹ßä~Ö\k®Ñîpàg$õFê ¨+DAÍ|[~]~PSÕmê6¨,:3!3!3ƒ ñÞÁ;B5Cí…ò eÊ ˆU3Ô ˜zyêeÁµFÇWޝàô­Ó· ö£Ø c¦cÆðrÉåˆ«Š« ù*}•†í¿$ ’îw­þZýµzýü—Ê¥r©¡Ç$l6 +kØ–YWX¦,SòJßoW®_ꎜÝ9» tQé" üíuMuMXšX c{Æöæ­Í[ ™ ™ šù¥GéÜÇ}(°UÚ*m•ŠþK„%Â’'(>'>'>‡H¼.^¯»Fô ??;#;C>ÂÚ)ζ‚¶áÑF`£^|vñYøäØ'ÇŒy<ˆ/Œ/à×N~B«÷qh[È0êâ›Å7‹o*`‰P"”ü³`N¥HI>cJ5¥šR‡Ï³gUÅ;ï¨;ôû#¡¯ ¯*pÞzÞ Àgùå?ÇÉ [ζœ€áŒá @>h›j›h›À+úZÃ×ð53»¸¥ÜRn鯛£ ÿÐ÷k?·ŸÛ¿³‰sqm\ãŠRêñºßw¿ÎÝ#Jºb¼v‚j³Ú ‘s¢îPº”®0•F\#®`µÆZc¥2ý$O'„N»ÍArˆ–0Ö,Ê¢,ñ¹ÉMn"aTøAø¡âÏúÓÚd)²Ifßñ¡/†¾0rWê’ºŒˆØ§à3|À# H€Z å ¾ë(ü{¡·Ð+Ñ_ iqZœöœL:”t(éoçí¼»¤¡;À`.ÐþƒÂ 0È]YutÕÑUG‰LŦbS±ç¤ÎÝ,{–=ËÈ]Å©8„xŒcㆭ^#¯‘ׄϷaSæ†Mêý-7›Ì&óÈÌœn‰¥á:£FO\”úe¤n‰ã®ïR˜»Î*g•»fÉ,™Ã€”GÊ#åQ˜‹ýèG?à‰ëëëWótNÆóñ|ü«¿¢â™(|1ô|ƒÐÅÝ<ÎŹ8—‘»¯Çæ®ä•¼’7ÌÜgIÏ’ž%ë&×M®›”Wë\lÚ…ö?neTÓ¨ p½@¬@˜»£Â¨»õ–zK½dö¹|.Ÿ @A1É:¯8¯8¯„¯±Il›úµŸ$q7¢újvšÿ"€ÑÂ^Õ¸{ù?q7{Oöžì=aîz¶z¶z¶¢eίê“àŠ¸"®hged~<ª/Gÿ¥¼ˆ»Û…¡F¨Nc€‹ª‹ª‹ªÕ?¤Ì¦Ì¦ÌJ}ú¨G…QaÔ™L­ÔJ­¤];‚/ª_ ýÍÝ“‘zöw;È(—r)Wù¿Œ_Æ/8∣¿}i XÖ‘Ð#ô=Ü_µÄ‚¨ÉýßĬÿ—C9”#öFºàU^åU€ëä:¹Î‡Ëçì¿ôDMf(ªî Gý/•m‰áiBýIEND®B`‚routino-3.2/web/www/routino/icons/limit-34.3.png 644 233 144 2753 13061246474 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍ–íOTgÆï™"Æ7f:Š µKBS‡/~¢2å¥`‘—2SiŠÙʇZ“fi¢›õ×&Ð…XÒe©›Ršìš¶ ´š~X³&‚ZcF‰/¤ é¤!X@aq^Îy~ûáÌq&úø|™\Ï}ß×uå9s®óˆˆÈÚØ¯€u“u“Õn`ëãû«ß\ýæÖSîÕÀRc©¹õXóÙšÏÖ}¹îK}<ŽÍºÙŸ8/çOÔ3÷e­Ä7’’,înÏ«žWWgøo£2œ2ü( ï}ÿÞ÷C_ }ÅûpÿÇû?gœº±ÆKÆÝãnèìïìëìCýâ+÷•ÇõTxoÅÞ à¾áGôa‘±?ÁðÑá£p/cajaJíYÿ×5ÛÖl#äÉô¤zRÁáux^¸¾¾Ž æÌäÌäÌ@Éé’Ó%§Ÿ5~¯þ^ý½zXß±¾c}x^ò¬ó¬G(ëdÖIBWý\ùs¥Úg8hg ?VË×é™é™®"E=E="šsÉ»äµô“ãÛo—dïc¯xEdãèÆÑ£"Úˆ6¢ˆ´yÚ÷÷Ksê­Ô[®ÂÜÚðÚ°~‡Oç>šû(þÚ/¿~…Ý'vŸØ}òçÎ? ûó÷çïχÜC¹‡rAãæÆÍ›ak×Ö®­]à¯òWù«ެ‡z`9¸\Bí¹Úsµç`S³³ÂY×oß|ãæÌA°»øÙE_·¯Û·±•·æ;ëEl~§ž—J±Þ˜7æª+àS°¯f_MÙ*ÿ4 å7Êoü“‡Ã7ßèèá[H=I=xS÷¦llå­ùV½Åçä—SÿÑÒÁÒA×x=^¬ ® nüΜðb#4ìiØðjÙ«eÚ * TP¡ë€,Y¬‘q`+_˜oÕ[|¿¥gé›~ªj«jE ´?´¿ü³`¼:Koá%Jä³ù,€Š¨9ÐÃz.°±•·æ[õŸÅoéYú¦Y¼·gë!\.+õX=f°f¡ÐÆWÆc èŸõ}¡¸b¨ïU»jõ…ªVÕ ©sêšN5£fX5©&œÅoéYúâ4ôù(O•§²%TIì£Åhá}Qø/5®ÆA_××õuÛ#Œ0Ì0ÃŒ#®™gÞ1šæ"ßî¢^QßôS0vyŽžT×Z¯µ^kuðÜÕwôà…îÕ½Î-¶ôM?¾¾Æd^g^;¯½Në´ãPUPm¼#±#±#ýýý01=1=1 ---ÐïŽwÇaõ¥Õ—V_‚{·îݺwËqÒÊ•Œ­oúq‹·Û®1‘üÞü^±F•hIJRìQ*¥RjCýR¿Ô/EÜYwÖI%SÉTRdCnCnCN¤5Ün ‹t@´Hf}f}f½]ÏÒ ½¢¾éÇ-’­ËÖýù»Hâaâa±ìqëI=)DdNæDd“l’M6q…§ÂSáá8 R³³fgÍN‘¾ó}çû΋ø‚¾ /(²=°=°= YYYn×/˹ž»žË‡¢^Q¿àçSo%ƒ 0`oÅì¶Ùm³Û`þÑü£ùGv<7—›ËÍAzMzMz è#úˆ>â8J£ÑèÅü½•ÿÓÇŠ}fQßÈ‘ÃüñØÆÑQÕQÐWô}Å¿¨Ïê³À×tÐ`D(ïùðI}ì:ÿ‚Ñl4ÛŸUTR œä'¶Û8Æ1ÐCú~Üe’I4íF; (•P 'ÿG;ÿ’ýW.Ù×Å’}-Íì¿}2 Ý2¦üIEND®B`‚routino-3.2/web/www/routino/icons/limit-10.2.png 644 233 144 3033 13061246471 14645 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÐIDATHÇÍVáOSW=mi+ÚVËjÜ&¤ cÊ‚5„ø¥dÅ1§Ë ¬sÓ……M%qFt8³d&j4[æˆ1tsŽ@–˜9GÔt—˜:„ÉÂÐl 'R„ ŒЇXú^ß=ûP^Ûí/ð~iÎýý~çœöõžwAÍ}‚Ôgé³ô¶8Ö¿—ÜŸ÷Ò¼—žû6ŽOÅHÝfÝæ¿>&Ö.¬%I{ƒ½A½“ÄZ]ëO’ü©zÚ>!¹an47êŠæðaÒ»Ò»rÞâ8>ÞJ¦_L¿øH!·û·ûIòÂ7¾á.rô×Ñ_Ir²h²ˆLb­®õkó_*?ÿO MÆ&Ýi6™Mé,vgïŽ7ôe“¯¾òê+$9l6=I’±q’ZDI‰µu?kõ¹~m^ãÓø5=M?î¤Ãípäk[^Û’^¸s†¬Î¬ÎÔôä‹$ñ-¤")Iƶƶr–­¢•$©£ŽLb­®õkóŸÆ¯éiúq?øï³ýÜC©T.•†ÚT·l”¤øP *Aj!Vˆeb© )!%DŠ*Q%ª˜\8Îñêßò´øÃ¦1Óóôª_õëºe³²€ àЈyŸã䘓c€³ËÙåìîåÜ˹—ŒŒŒ!SÈ2Ù9Ù9Ù9ÀãêÇÕ«Ó7¦oLÅîbw±Ø–±Í¾ÍøÞ÷½ì{Pë4=yJž°[8…S×­‡^zQz±³h ´<|wÎWÔÖnk¶5‘Ó‘Ó‘Ó€«ÏÕçêVÛWÛWÛÜ5¹kr×Þîâ.R•TIM‰Q!*DÉ}ÜÇ})ù&SNÄr¼3[d'ø6ÿË1þ'ÇR’_)3”’ÉÏÅJ¯ÒKò`l 6L~^ä÷üž¿‹›â&É œâ$'IÄ#’e<Â#âEVdÊ¢=¶ ¶€gæø}¥GKj¯¦Ôärß•Oìí≽=™7Ø ¡¡‘Ù{DIEND®B`‚routino-3.2/web/www/routino/icons/limit-36.0.png 644 233 144 3074 13061246474 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜñIDATHÇÍ–ÝO”gÆï™A‡Áaø=]"+£UØ>\˜¸ ®qe´ Ye¡Õ6¶X4Ù¬MdW–“FÙÙ˜€µZ&8V‘³Ùµ"¨¨h ‰)J+Ô-2`˜gæ}~{0óúÿŸ“Éu\×÷ÎsÍ# ""ɱ_ó2ó2³#ŠÍïñø²ø²_Åž˜v˜v|w’N&HiIiÑXÏëõsûE þ¹zz\’ÅX½V¯Éà °ëÝ]ïÆ/Šâ¿ß›Ïæ› Ãß|ð ÀÅ/.~ÁxÚó´`Ê5åëy½^ï×ùæòKÃú"0ï꼫¦°Î·ÎŒM›2?‰ eBÅÖŠ­£–Q‹2@ä`Ç®\@€ú™˜ƒõ|¬^ï×ùt~]O×Î#VšV*•ïU¾gkŽ6<úê—Ö/ÕõB>à'°C8Dª#ÕÌ‚º¡n`ÂÖóz½Þ¯óéüºž®ÇXePD¤ñw°spç h¡îðãPF(´®Ð÷¡ï Å&Uêj·Ú á{á»á» iš¦iç?óók¤TaØv ? ÙCvPFùag`g˜ÔõõU>Éþl[ DZÁîÁnà:¿•§òòo®sT¡*T…Àb³xÎ —¸Ä% Ž:êæÄ8q”R  ÊU9A6Åø·Çôtýï¢óÿñtáØW³¯FgÓrm¸{:ötì±Þ´Þ´Þéwõoíß*’8’dI²ˆµ}øë¿þØÔ,RñCÅ"êf‚JP¹N³é–1Ë«ås­F«yçáòžå=âßûé^Ï^Èùßž/9_"2Ñ4Ñ4Ñ$bkµµÚZERÛRÛRÛDJ\%®—ÈÙÛgoŸ½-ÒÛÙÛÙÛi ²„,!‹ˆýžýžýžwí*p”£ø@é1£Ê¨"ªSuàÁŽmÇí|»ÞƳñm>›ßÒ#íí‰2Øš¹5PZšqÛ¸ `Ö™uh¦¦òU>JŸÔÇõqPŸ©jgê‹¡ŠÕrµô}Põ•jVÍ(0›Ì&4âÆ-ãVê…»R|)~q *ü²Æ²ÆbÀã‰Ä¨ó„y‚¸Ò) ø–p„Ð@  "*¢"@5ÕT»âŸ°–µ@ˆƒ0ëÍzâüaã'ùRü–ž¤°3?Ãî#»Øhf1Óú°> ,¤˜bëû<*|Tø¨N–ž,=Y ƒÇwt \¸0pN§ŸN?C±¡Ø³QCJW:ÊÕb‹/ÅoéI ëù.¿¾ü:U^£DkÕZIØž¾º¾º¾:È•ÿ*ÿ¬Z²jɪ%àïôwú;¡¿±¿±¿JËJËJË (R)Š@A¢ Q€éöéöév—À§úaý°¯j~K@vGv‡jƒ±’±§Ðèz†cŸ=vöØÙc°rîʹ+ç:þ Íš74ÃêîÕÝ«»¡¢«¢«¢Ë‰û{ý½þ^¸xÿâý‹÷]øuzPºZžâ·ôxEÒBi!>I¿‘~Cì5éýØ[é­LÙR¾£|Gù‘™=3{föˆ÷÷÷Šôú{ý½~oÐôEæLÍ™š3åÔe¿È~‘ýBäùÆ|c:~ùE¦ÄÉ›tø-=^ó¦yÓÓ'¢oÒ7¥Ȅܕ»ÎÛÜ·¹osE–E–E–EDÊ¢eѲ¨ˆ¯Õ×êk ìììmmmy<òxä±ÈpÉpÉp‰HaCaCaƒƒçÉð¼ô¼tñ¥ø“zÞ·ÇHÓ/é—œ= DZ0¬_³~Íú5×–×–×áCáCáCNCª[ª[ª[À—ëËõåB­QkÔüsý`¬0Vüë{Ï©´OÍO<ä¡s*‰ÄŒ'Æã P=ªGõQ¢DÁ|n>7ŸÃäÄäÄä˜æ„9ĉ–H…¦OéSÿy*ß1Ç©9Öh6g5Ô€úTUªJ×é © Ò”¦4P9*Gå¸â5ªJU_sŽsÔq´ÿ5ÇÞ1ùкУÀ ›a4"\á JÝKþzº¹Ç=W‹®sk ªêÐÎ3ž¡ÀÜgîCÃ0îw\øïŸü³ö_9ko³ö>6;o°œ¤ëüôêÐIEND®B`‚routino-3.2/web/www/routino/icons/marker-72-red.png 644 233 144 4145 13061246466 15441 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜIDATXí—LTWÇïû1À(î,“XP†µâº@FÉúƒT‡3—’h•*´­é6]@DÓÄH6Õj±Î¶¤Õ`ˆš óÐܵ¸eÃZ,i,»®mvÒª0e3# ƒ óÞ»ßýƒ¹ï½™¸šÍîùgæœ{Ï9Ÿ¹÷{ïÍ2k?'1ÆoH”¥D‰›Œ’ººº6®Q•›gÉJ²’¬f‡i‰HDæ±>m`óY>«ÇêÇöã7ÄòùjH ©á=±ã©/ˆ]b—ØåyÈíãöqû4‹uÜ:nÇ•­·¶ÞÚz Ø~oû½í÷€mŽmŽmÝgãl>ËgõX}Öïé<„_ë/þ„Ÿà'ø ßJ¶Bé•é•é•Êþæþæþæ~:'8 Ž @@ñøàƒÐüè8›ÏòY=V?¶ßâOžÎGlóø~„ñý‰p\s\s\“× G†#à #j4‡æÐÈJ½R¯ÔJ®’«äJ±R¬üè8›ÏòY=V_Žéo›§¡qÎÃy‰ÇÄc­ß±gƒóó\¬Tרk”[§Û¦Ûê“í²ÀÌ, Š@¥• ÛŒÚ§öÔ¹¹ È­áòp9@R35#Ȧ9œGœGäbÖŸñ0>bºkºkºûë_± ¶£¶÷mïÓ%ÞÞ›Þ›‹Ö *¨~ÕoBÖ×AÄèRžò€.tÆŽ+ÈVÙªWó>ðÍ÷Íǘí¨í°í0]Âx4>±J¬«ޱÓ§”S }3Z ${¦Ò§Ò ³°³@¸=«= <¥žRè0w˜ ]j—À{Ø{ØüÃæ6À¹åç–_i¿Ò‘=‘=€ìQ¾U¾Õ&‡NWœ®8]AßÔV6†Ð€5ÛšmÍFÃãöQ»–(#c¬h¬@Ð2hfÏ=p.sœsœÆø— _&@÷OÝ?ãV›Õfðƒ%Õ%Õ2TUUõ~7ŽvŽvŒ‡ñ1Ð[Nn9¹å¤þË”a5EMÀ2,€É¯&¿€ñuãëŒ+¶;ýýÆxæ™Ì3P*ã7Zo´€—>¾ô1  ç Äx=R/˜\&—É¥±D²«°Š2ŸÜ&· !ļϼB,–Bé©í©%„Þ‡½ !äÓþOû7ˆkÊ5E!o½þÖëÆx’`tÅõâzBHKÌõ“hê0u˜:´#ÏîWZ¶¶qmãÚF MsÓdš¸ˆ.tbõS?€ ÝMw´ýºý:ì÷‹Æ¸LesÆ|¸ Ý…0¯i^€pMfM&€›Ñ£g§oÓ·¡e:R)Ž 1>ÂóÅ|qÄ 4œ¯9_s¾Æ ¤™¹3s }Ã_\ùâ ˜ëÍõO:<Ìî4ßi€ÜWr_€Œ²Œ2r‹Ü"]MWÊå†rCïwÕ}Õ}Õ­½€¿á윳GüDX-¬V:ÎNYÆ¢ŒE‹”ÅÞÞÞúõA Ù×—«^®@9>2‚ÍÞ—ºå}˜÷!¼èxÑ>{ð¦×—&Ê&Ê âøa:i: È>”½){“ª=Bª*¤ž#É®dW²‹±OìûÚF´ [Ñ®¢]J­†Q7Y3Yƒ0¤äÔäT¡ߟøþI+éÏôgÀÜ7æ¾üf~3€`B_B€1¾š¯Ô3„ \ò_ò•«ÝU»K i€{…½ÂÞ–Îú扵ôS&»Én²ûα„ºúƒßüF_O9ål÷ÙnPÀWâ+ô·…Ù¤:©ÀŬ‹YÂ-ž´<ßò< Tœ:?ŸÿøùµO¸-n ^ÒžÐãÜnÇôFn·€[ðËæ8@áïÚù*çʹò¢&®kãÚ˜VÔßJ½Ò{Ò{`cH©Uº•n£vãxiœ[H=Ô£Ki¤-Ðè2’–º–ºä*m%ߟŸ«sjhŤ˜‹65Ÿä“|ñ]â!â!D^Á»ÿÚÓÚdãm¼lñ¾3´bh…Q»t]è†@HyMy €$÷Ëý-•3åL„ Øõ×W­¯Z•Zíz,zE¯t$­:­:­šÞÉ;y'w!JWÁ0çF?K…!aHâ./9°äÀ’„˜*M•¦J鈦Ý|g¾3ߨ]µN­C$HáéÜÊre¹²\_߯5k×ÐBí-·˜,&ËÈô¬oKŠÝi®'në ç~ëÛ’fµë½ k·®¾®Þ ]‹l‘-:z_½¯ÞׯA b̃æAó ݪi2™Oæ“wþ.NЧâøÉÓBcœv·>A»½R¯®]¹Wî•{uåN¥M¥M¥YãYãYãÊ2M‹B‡ÐñQ“ZTzñ€?#Ï0}+ k7  ÚuÛÜ6·lñ¶yÛ¼mÂ#ŒqFZw¹îrÝeýÚ›Ä&±i0ú—Ä|=®o4Næ< 0ÞXÂΨvÿðŸ´[PRPRP¢kWÊ“ò¤<´ÌŽSm'¸2®Œ++:ۆח#ÿ¥=K»„ãÂqá¸/——-;Zv”þ>g&g&gFþ‡¶Õ! êÒI+i%­$zíÞ¸~‰ä´xí‰õ îp»¹ÝÜn€l"›È&u¿_È/8ÂŽüåëŒPF(#Dˆ0 ÜŸ£‰¥q;÷3‹öÍE\Ä%~;üNOyÊS€ëáz¸žýb6¾TŠÛ™á¸ºÏÜê^‡{ ª?YIEND®B`‚routino-3.2/web/www/routino/icons/marker-81-red.png 644 233 144 4160 13061246467 15437 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü%IDATXí—LTWÇÏû1"ŠÎJºufqW] »¸K²òÃh;šH*.6P£ÝaÛ„J7J¥¬b—¶Z£6–²3˜m¨Ø¬bðWiºa ]ƒ Uf*lc;ÈFfæ½¹ßýƒ¹ï½™¸šÍîýÎ=÷œóyç~ï½¢éñŠâª8Wœ+Î%LF&f´Íh›Ñ–ÿkY•UY½q‚2(ƒ2€i7«'™d’¹ DÛ¬ž¯çñ<Ï]O\ÍcäÛI;i§èŒö'-“Ûä6¹Í9,ìv »4sâXâXâþVØWØWØlØ0°a(Ê.Ê.ÊÖmîçëy<ÏÇóózOç!ñ·ÑöâÅqq\÷dð-¬XX±°BÝs¼ëx×ñ.6Ë÷È÷È÷€ ü˜À&xàÐ숟¯çñ<Ï]oñ‡Oç#ËqP=çy‚ìkÙײ¯)¿éõ‡úCèGd°4–ÆÒ ¨5jZ¨+Ôê @u¨Õa°#~¾žÇó|<¿Uß2GCœ‚SpÉåƒòÁæ›<ÀVo{×ö®âÐÀ^gGØø”æà‰à €yBý¡~AõõÀËx@˜GàFâ=áÕáÕ€Ò¸¸°×ÙEv>¾ØVo«·Õ+^Ÿóp>2=0=0=xéW|¥ÖRk©eKÜCî÷F#y|ê¡PE¨à†ÐKhŸÒÃziHLbX&ËàcûØ>}µzH}[}[3}î!÷{£¼>çÑøäJ¹R®ì>ÈÇÊ•+g¿$ð+ÎнÐ=OànÏÝ8ùåÉ/ ÝÑ÷§Þ·3»Ñvopo¸f½fÕggèƒÐšéçõµÎFñó&¦&¦&¦¢~888ð €'õ¹&]“@[h Ìýfî7Àô=9¯æ¼ ÁõÁõ ”(%0ztô(ä&å&@¥ÀbØ«òPy¨sóúœ‡óqÐ?­;¼îðºÃú—©ýÁâ`1/ŸzaÑ ‹ £ £ÀØ©;—î\2_ùôʧðõç_³ÎÎ:kô••½êõ ö«=j^Ÿóp>1r¤–™ì&»É®±8ÚJ—èý”O•¼UòÑíë·¯­¹¸æ"QÉ@ÉÑʉ•DDÏ×<_CD”ȹÍn3Ѫ†U DD£}£}†‹f&…)LD§é4Öë›ZM­¦VíÈ/‹€â¯ƒ]ƒ]ƒ]Ô§†§†I’¶IÝR7¶DÖŽß¿~ÿ:ùÈGD4n·MM¹_q¿BD42odÑœMs6%å%åÅwÄw±I6IDÁHÞ{ô-}K$¶‹íb;E:H’×ãõx=ÔÏùHtˆÑú1ÒâúS;On<¹Ñ ™#‡F€¬È €@cJc ž0–—-/€ÒS¥§žäÏoÏo äåååNÿ™àöàv½Þå†Ë —´ðBº.¤‡~$)SÊ”2«ëø)³.²ì³ìS»çÉñäè×˳4[šàµe¯-À¸«ï½¾÷Àœi΀šÂšÂ'¾È^dü6¯Í `†:¦Ž!à‡Ø? ¤V§V§V‡µ@J’’¤¤F)Áž`O°ÉWå«òÕ–AíÂ/Ê}#÷ u7O®úâ³/>C.Ó-Ó-~ºA7Œ‡$«:«¼»¼»žÀé+°ØŒæÞ̽ „?ŒŸ[q½âBÅ…°_Ü*m•¶þ³xÚŽç§ž…GMé¦tSºç$¨ªÙS¹§’i›¥Ìó0š×7¯àë8ßqBóCód‘{4Àí+ùWòµ¼ããŽõ­þËxKwK7ÖhOhX'ÖMå ó…ùÂü_”z´óµI(ÊV7 -‚Spr­„·»:ï8ßKÓîîpJبÕa#Àn±[Æ^Á?ÀòضEïï`Ë`Ó``im­TjÜ/í—öWÙ449È![tÖÊ¡y?9ÉIN"É+ý ý°§]{Z›,;,;³ûMw‚;Á¨ÝÐÝÐ]À6l3úñ=¾àB/zV¬>§>§÷·ô¥ß•~§îÖ^  yBžpHÞ‘¼#y‘hm¢M8¡+瘳#‹¥ûÒ}é¾pnÉÞ%{—ì%2U˜*L®švsl9¶£vÃUá*à‚ .#ÁˆáT/U—ªKõþ6®l\Ù¸’åñ|&³Él2NMÛ–™Ñ;-tÄl= 1æWѶeæ´vÝgtíVÕTÕ´kVÌŠY ? ? ëO£¿wº±®øÞøÞø^V¨i2AL6þ1FŠGcøâèéR£A»›„M« …¡Eh1j×ÕéêÔµ«t*J§®ÜÇÉ“')c)c)cê/4-¶J­R럳¸Ô"Ò‹œKÏúž@×®Wò´Û`i°4(fw‹»ÅÝ €ã¤UçªÎUÓ¯¹In’›z#?IâÿS72O³ž;xÀƈvÏþ'íæ®Í]›»V×®+Ë•åÊÂéi?ÓvB(Ê„²ÕÕÑeÄ‘˜ºý—ãYÚ]%ÕIuRg.«-«-«eGÒ‚iÁ´ r[Ûj¯ä•¼U ©™š©™"׎䎩GÿãˆÕîh;÷ž°YØ,l¨€ ¨ ¼\\ . $Ð¥¯¬~«ßê'’º¥n©[¸ ,ŽÙ¹ÿÛ0kÿÙÉNvùf´ûÍr‘‰Ld€Ð!tÿúÙôüÏ]1;Ó“÷™[ýo¡[y¿#!IEND®B`‚routino-3.2/web/www/routino/icons/limit-28.6.png 644 233 144 3061 13061246473 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜæIDATHÇÍ–ÿOTWÆT™±ºC³t¨X µÐb°²8»¶ -е´…®¦HmÈÆ&M ‘0†lÚ, Dªv·(kcWtELÌ$ÃJEB mŠ££ÊÊ|¹ïg˜¹^¶ç—Éó~yž÷Þ3ç¹GRJ©§#¿ ¢Ÿ‹~.:.Œ£ß7âæsAÊ?ø%QïD½só#XñÉŠOV¶¯l׆ ¬çõúÅýJü‹õô¸zZÓÓ™¨Ü>¥¥æø0nº–.KׯA¨ê®êè<Ñy‚˜¾6} À›ëÍëy½^ï×ùó«#¿ÑW –ž[z.jL1¦¥ éõ¤×“„ Æ’á­momøé©Ÿž’hݬX%ðáC_žEXÏGêõ~Oç×õtýð< l¯Ù^S Þ~÷íw-Çà ßC}b}¢®èhÀ A_ÐÚÚÉȹ@Q``=¯×ëý:ŸÎ¯ëéúáyŒ­œWJ)g>‚6è~H $æ š‚&‘IE׆µaN'‚ 1#1ë.SL=F"•ÁÃÁÂî@\ 4_˜ŠgŠg€º¾¾••RêÅ¿Ågñù–ˆ´´8@!È+ò óœå+¾í‘öH{tÓM÷¢Aœ8q†7P/رc¹'^ñH™”1Ï—þšˆ^DŸÑð<Ši¥”jécÅîŠÝ:›–ù­i n š?jþ°ùCdð߃½ƒ½†Þ@á@á@!4¹›ÜMnÊÊÊ2òZ¹V®•x¼hüÍñ7ÁyÎÙãìAÊ\ý®~CO&vgîÎî‡çQ!·RJ¹ëàìg?×þñã¥Ò:gùÔò) ¹¹)¹)±&cMÆhÌnÌn̆ÕöÕöÕvØaÛaÛaƒÄ«‰W¯‚«ÍÕæj3òÜöÜöÜÇeÇeÇeØúýÖ¡­CðÇ™œÆœF&ÿâ[ë[+•Ðù|çó yÂóD«åËZ—µ®ËV*¿"¿B©ó†?þ8êøÁ–ÚÞÚ^eºôí¥ñKãJYS­©ÖT¥Ü×Ý×ÝוZ5²jdÕˆR÷ îÜW*Á•àJp)5—7—7—§¯ Þ Þ ^¥Æ;¤”-Ó–cËQêOË_]÷ê:e²ýÞ\b.‰:®”c¿c¿RÑ›–Ï.Ÿ]—­¬4¯4k·¤ênáÝBãA¯ý¡?¹?Ò[Ò[Ò[ f°f°fN¥œJ9•YDzŽeƒÍ›+6W@J]J]JÜh¿Ñ~£Ýxc'sNæœÌ4-MKÓ m²m²mìמí~¶.ÞèÛÔ· ø“ýÉ ™ãž‰{F»¥´&ë6ë69?< ÿÙs«öV-X:Íõæzhènèjè2„ ª ª ªá@éÒ¥F<½7½7½Zí­öV»ï˜í˜í˜… iÒ6¤ñÌ£/½\'6±ý‹í Í Íz1öçØŸåŒ þNÿ}½ñëð÷P‡«Ã%•K;£‹¢‹XXq}Ïúˆ‰‰†™†™†pˆCqùqùqùP5T5T5ÓyÓyÓyåÈrd9À»Ï»Ï»vmÙµe×°˜Íb¨ØùžöžÆBð4€TÂé_Nÿd„çQ4EN%{j÷ÔÂãçdvë”cÊwúïLÜ™@¦¶O½1õøËýåþrðõõ…Yç¬sÖ Ò.íÒÒ#=Ò÷Êî•Ý+ñ‹_ü íÕöj{Á“æIð$ ÚZÿ„Â8•|WýBõ ºá¶ôE Öð1Ð}%â3>‰—xæ;e¥TJ%H—tÉ¢-–X‰•X •TRùØŸ)¡d™$I€¼$/1/ þÜÑ›£7,,|KÔ}ìÿ¾êÎ|ê‹«Š«@>;³\YCVÓÁ‡Á‡ø 7n„¿rƒ ÿ’oäà<ç9üÊs ?ȘŒAä‘„/C¡Pˆ€ô½A/ðÝùK–”,ü¿uþ'÷[ùÄÞ.žØûØ“yƒý‰ˆÊ><ðIEND®B`‚routino-3.2/web/www/routino/icons/limit-107.png 644 233 144 2642 13061246470 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜWIDATHÇÍV[H”i~æ ãl2´n ÁíÂæÒ*-ÖD%­$«Y,Óv€Ý½He£e[ð"ºØ%0Y¤ , ÁéJt±ÎX1D–”‰e­º®›Ž‡Á˜ñŸÿûž½˜ù柖Ý{ß›Ÿ÷ô<ÏÇÇûþHÀÚȤy“y“99웿6â ¥ ¥ŸÞ ûM:iª0U ÿH¦4¦4’djsj³xiø*¯êcû?–OűFÀÖnk79#~=yhË¡- éaÿgiï´w.‡ÈãÝÇ»I²ãZÇ5~CN?œ~H’óÎy'iø*¯êU¿Â‹ÅGý¿ø2®7®×ô–´ÅÛâ2cOÆžÌïÂc™dyYyINZ&-ÒL’¤þžd"¥“¤Ÿ~*›ñU>R¯úžÂW|Š?¬dÚδùåá/Û¯†^¶’uë6*>­“äyžg"ò‡ü$©WëÕ ’Ò#=$IM¤á«¼ªWý Oá+>ÅÖƒïö—ÝdUBUÉ%’Ô"E¤b§v]»NM~/[d ¥’,2Wæ’¡‘ÐHh„”]²CvÒ'gä  êyz¥~t¥f¥†šnÑvk»IySáÐh$§?be5PاìS~+9*FEôj¾ÐßhÛµíü oÉçò9 ËcóH³˜Å1ñ½Ü˽$ËYÎò˜ø W¸B’2SfòƒÂ'GŒ> I»ßî÷[•žˆ°¦ò乓çŠÈ“n­Gë‰ÂJϯž‹ž‹äk÷k÷k·Á÷ªñUã«FòÒ…K.] §¯L_™¾BNæLæLæ ·n7Ü&›¿j>Ò|„l}ÙêoõS¾émmáë<‘{"W]mÓ@DØ“Z>j»×vd#IJ)æÅ<ƒíëÛÛIëYëYëY²}¢}¢}‚§Ä)qŠt,:‹¤8@æææ“]¾._—,)()() ^§×é%qh$ï­ï»Ûw—Áȹ]bÄ JØ“Z3ÜŸÜ¿õ3,ïØ¶c€oÀt• |Ë·°á/,bX—µ.k]”–”–”ônèÝл°ym^›æ0‡  -hÏ gÐ3Tœ®8]q8öç1ß1°çï}¥ûJaãñ0Ÿù·]Á]A@é1–rK9s±+~9~Êæd ]tÍ--@îDîD¸È9"G€ÄljGû´&iMÒ@Ô‰:Qð_ðÐ4Õ4Õ4Ô~^[R[bÔã0¶ÄÇJwÄÓ ÈÐþÐþhyâ0 £Ÿ³œå, éš®é@ƳŒgÏ€™Í3›g6S®)×” ¯¯¯ŠÆŠÆŠÆ€æ¢æ¢æ" }(}(}Èvf;³€,É"0]‹ðYB•¡J@é1~§ß9ôfw¿»?*ãrdœŒÃŠŠ${“½É^ p9p9pØ:¶ulëPZZ d#Ù*ë+ë+ëGÀp€_¯ÇT•U•U•ÅôQ%ª°‚ÔŸÅív»¨žÿ›Jö†ÚBmÆT./å/å“AkдS)Dƒh çÞϽŸ{OŠ>Ñ'úŒüÂÀÂÀÂÈ d² <þêu“¾(ÿGS™Õ@Ú§íÓ~+9ªêÆ#ÅQq”¨ñc«a kHá~aü’(]Ò%]F>jgx×É(ž±Ç"|Šÿ£=ö›_S›Y£¿!™®ŸÑÏPã9Þâ-có³“ì åSùT>%ÙÍ.vÅú„…,¤äOú;ýµ(^?ÂånþUû¯\µ¯‹Uû[/ØÒËö®C;1IEND®B`‚routino-3.2/web/www/routino/icons/limit-37.2.png 644 233 144 3003 13061246474 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܸIDATHÇÍ–oLTWÆß™Bt€©ƒi6CèjCÄ„ÄLê®!…€ K‹Ý¶€4µ`k`µ&»ÍÖHMù°²Œ¬8YÖtw‚&ÁT$›F”¬1XqÕb3dÃòO¡Ã ÷Þ9¿ý0\gb?í7Ï—Éóž÷}ž'çÞûÌ‘”•_kš5ÍšÁÖßFë«‹VmìŠà6,%–’ÕBrKr €Ýc÷„Ç¢ØÜ7ûcçE¢ü±zf]R$ZXå]åµä¯à#ðAÖY«S#¸ñ*$\H¸ð£{¿Ùû @O{O;¿ƒÉÁÉA€¹ü¹|ˆbsßì7çM¾X~9òœ¾Ä÷Æ÷Z~€U/¯zYÒ Ó 7|ix¸ÞÝñîÿKþ—”ŒÿkY«ò0×t 6÷WúÍy“Ïä7õLýˆGž#OÞÿðýþë€gÓÔÓ.õÔ³ô}À¨0*ºª®`ÁQlî›ýæ¼Égò›z¦~ÄOôQDDþ\e÷ËîCx@»®§Ù5;¨$ýuýu4õ=(=¬õ •F…Q†Õ°VPç•Wyy~©ð¸¶¨-¢é?hNÍ á™?”ùËüÀSSß|”DD65CÂBÂÂB¼ýþuà Å rTNÒL3àÀ#Fr‰%–bp€G!R!àõÔ¨<•G€º¿ÒVôLýˆá?""m×HÚ·gß“.¼e¬päâÈEhüyczc:jôèhÝhø üþh¾Ô|©ùxJ=¥žRè¸×q¯ãŒŸ?3~æ''ÆHüˆuÄ 'Oœl<ÙˆùvxÓ𦨞º¶Ï±Ï„"~¬ê¦ˆÈ/.ÊÓ·^{ë5‘ñÔ¹‰¹ ‹ëÍÜœƒ9eyèÍ¡7†ÞKYoYY¿H—­ËÖeéuö:{"gÓΦMÙ}c÷Ý7D$?H~,ÏÖÐâÐâТHöÙÁì Hß_úšúšÄò›æwn¾sS–‡û}õ¾z‹Ë’S¼£x‡ˆúÙŠUnKµ¥*/̥Υ¿·<Ê~” ­j)n)†ž½=Õ=Õàjr5¹š` ~ ~ >z§Â§Â§ÂPÝXÝXÝøÓ“êîìîìî„ÚÖÚÖÚÖh}óžÌŒÌ ð$u¾Úù*@h9´ ÆšÄ[‰·”W˜NYNYßÅ=ýÅôÑÏ~qiÁ·àƒRo©·Ô ÎãÎãÎãpçÐCwA #È€ÍÇ6Û| Æ.]»6ÎçŒsQ<¸mpÛà6Ère¹²\ð‰þñãƒúÈŒ™™†™ *åó”ÏÃw­á ݦÛ,wå¶[¶["]¥ç+ÏWŠ#wnAnHOyOyO¹ˆ}ɾd_ñ~Ãoˆtè>Ð}@d]Ѻ¢uE"™ù™ù™ù"!_Èò‰Ì´Ì´Ì´ˆÜn¿Ý~»]¤0¯0¯0O¤ò•J{¥]¤õ÷­o·¾-þJDD"Ú¼6/"Ÿ©t•n¹+êo""·Â×3_ÏÀÓoTU¾;וë"”ô뤜¤ØåÞåÞ厞@É“’'%OÀ=êuFë“ “ “ °}xûðöa¨;\w¸î0$¶%¶%¶ÁVïÖö­íäHìKì#tá•+¾+>U}¥}¥ »#~Vr¬íÿüÔñé³oÑœ ÎÁÔõ©Þ©^”QeTUQó§çOÏŸ† 3è :£õð@x <³žYϬëëëaj`ªª&º'†&†P¿òð€`UDökû5ࣈáÚs9ÉuøYŽ•«rêWê=õ°‘lŒy»k¨¡†ÿc© jó¤+†çr 3ÇÌä™É»3ngp4’Ìêú¬> üÕð~4“Dâˆjù’/ct¿ç!A*¨‚ÀNê¨C©‹º¦khꦱÆXª#ÂOkÙѲ£ñ›ü/îå {»xaïc/æ öÃ]I#8›IEND®B`‚routino-3.2/web/www/routino/icons/limit-29.4.png 644 233 144 3054 13061246473 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜáIDATHÇÍ–ýOTWÇŸ¡ëÀD:– ii ã$àŽÑ@•Ò¦ÈÔñ¥µ-H%T0€’eI,išµICb1*¾e­bv×4‘ Ò6$j‹šš@‡®u dZe&³wîœÏþ0sÚý<¿Üdz,m–¶¹T¶W¶\þüòçüî߸à×ü_ó!bq#ߨ7ðâËÁßñ‹À¢ÎE¦1ˆ6G›E å”7l %ŒÚ`Ëæ-›~~æçgTèXbU>àÅ‹±fØF<œoÔx¾Ágð‡úHx=áux§ä˹PÁP ìOÞŸlðimÀ'|B,¼/€þ¾þ>~P×ÕuL˜ bq#ߨ7ð |ƒÏàõÙÊy‘F'  Cp@ë ü[KÑR 8ˆD£…;UAoð—à/ðf3 jTª!²æyÌc`6”Áò`9šJ׫õjÚBø°U¶ 0mðMD$ýX¼¯÷ê¿Ã½Ã½ÀA6ÊVÙÌs…/ù‚¾ /èÚh£mA#e”Q¬g=ëùÿ•N:é ô9}Žù°wsÃ]Ã]`ð‡K?&Ü9ý-ñUåUåJpåÑýµýµpäÃ#ù5àèè‹ð¸‡ÝÃîahZÕ´ªiܹ;rw$WåQPkÔµ&âÙ5òñÈǨo’¯Å_‹ð)­ê@ÕíÜéoEïé«…+{®ìÛ5?åþ”«vÆþÇrÂrÿ:ûºÖ½éÅéÅéÅÐÚÕÚÕÚýýý°Ö¾Ö¾Ö+ÓV¦­LƒûŒ}ƾ ÁfÕ¬šA9•S9Á^a/µ—‚óŸùó7âgí ®nµ·ÚÁP?QòÇÅgŸÉzYÄYî,¹·n裡LçöžÞ×½¯[¢»G»'»'E–¦-M[š&rÊuÊuÊ%’RœRœR,rsôæèÍQ³Õl5[E:â:â:â$²R%UREêJëJëJEü1~«ß*ò\SÂW _It(ÉtÇk{^Û#"Šë‰ëÉzYЬ1֘ࠪ|¸éá¦ÈØßXÓkëµã¢ã¢ã"T9ªUÏÏσÌäÌäÌdpuus£¹ÑÜç½ç½ç#òÁÙ†³ g q*q*q vTï¨ÞQ ËÛØÀXîÄ¥‰KÌÀã·¿jW|]|]p0J  Lƒ¦3æLs¦ˆ»z¨v¨VœuÎBg¡ÈvûöeÛ—‰œÌ9™s2Gd®s®s®Sd¹m¹m¹M¤ÀZ`-°Š,)\R¸¤P$Õ’jIµˆøÚ}í¾vq‰K\"«o­¾µú–ˆûª»ÃÝ!rïÄøÞñ½"wöÆÆJ‚ˆiÊ4%B›^¦—™%ðœqƾÎý:Né—n_º­v.ºõvÔÛø³/g·d·€5ÉšdM‚ *.TÀ¶ Û6lÛI=I=I=Pß^ß^ß³ÎY笲YŽ,L_¾:}5ò›Ï6757Á–Ï6¿ºùÕÈÓϵn9lèZ_­ðix*Ù½o÷>ð=š’铯L¾½cc¨É-“®Iø5¿æ×@«Ñj´xpèÁ¡‡"2Ô‚ZPÏÏÏÐKô½T‘zS½ ¾T_ž/õèîÌ3?}!>ô]õ»ê©ðTºÑ‘°Ž:ãW/ªŸèäC¨RUªJLß µB­h á7B;Ï<àÁƒ˜S‰*‘yT_3øÂüÊбßÜêNöUU‚j )³ú^ÕcAý#ð(ð‹¸q£øÇ9êÕ£z€fCН&Õ˜î=QþÝÁÝhüUÿNÿXüDùÍ[Í€ÿ÷ÊÿôÞ•Oíëâ©}=/Øÿ;báL~#VIEND®B`‚routino-3.2/web/www/routino/icons/limit-88.png 644 233 144 2421 13061246470 14523 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÆIDATHÇÍ–_hSgÆß¤«mFí’Ú"•ZÅ]tv*Ž"›ˆÚâÄ´…RE‹E®UTFA™w*â ¨N/Ä 5C§Ô6U»ÞH‹iª^•E°6R3°Q°ÿ¨qimNÎ÷ÛErrΆ»ì¹ ïû|ïó<ç|ßûægúWÀ¾Ü¾ÜžŸŠíÍ|îŽÜŸÿšŠ¯&Á¶Ó¶sð|vå³+®®zØŒ ÜXo­1ù­zF^œb&rîåܳU¥ã³Ð°¶amnQ*öÁÑéèüKƒC=ðûü>~€Ñg£Ï¦ª¦ªÀŒ ÜXoÔ|V~9û/}ÈîÎî¶½œE9‹D`ÅöÛWµ¤DVA]m]-@4+š¥ìòÈSU@ŒÆ3n‰ <½Þ¨7ø ~CÏÐOù(¬,¬ú½õ{×Sá[p¢äD‰¡—èN>ÐOé§HèªÅj1JÑ^k¯AÙ”(É|1ô?ôˆmD‹hP‹ÔzµºG÷àC²7Ùká7ô2úb5ôÅÏàuŒÆ>áäpˆPºW÷WIÊ(~â$'M#ôÐC(§r*'ÐAü"<@![Ù  ŸÓÏgÆàOëeôS~ÒÆ®öÃáÓ‡OgÞ{=“Úˆ6d³’•©÷x~íùµç×Àð¼Ü8¸qp£é#Ôj5€wÀ;à€—/+^V˜¸êQ¯Ô+sÚ„6aÑËè§ü¤ýþ#Ü™¾3)oÒsísí|02ÂÂÂP¸¹psáfhÜÕ¸«q”_*¿T~ <<< ô]é»ÒwÐkŒ5Æ äIÉ“’'0àðø-[Þ–¨MÔüªÉÔOù±‹äò_}-R¹­r[zÅv]fí%öÉ12zPêA‡ÏásøDÜÍîfw³È²ð²ð²°Èû®÷]ï»DòÜyî<·Huququ±Hq_q_qŸÈÌÌÌÌÌŒ˜ßþÂþÂà·]7õS~ì"YuYu|)’ý0ûa¦lBÚÎÛΛ<“K'—N.)r9Š"¾Û¾Û¾Û"ãÑñèxTDª¥ZªE\÷]÷]÷EnŽÜ¹9"25=5=5-²¤kI×’.‹±_ä©<µèeôÓ~ ?P÷`´bÔr’UZŽ–cÆ5Áš`MZ Z Z Ìü– [6lÙ`öö™þ3ýgúM|õØê±ÕcàsûÜ>·…¯Vª•Zš$£Ÿò3ïS‰îD·yƆ.]º kbkbkbàô;ýN?i;Òv¤ B¡P(‚uG×]w\QWÔ…&LÀܦ¹Ms›,>ÜÚ˜66ÿ›¿+Áø!BfWÎÆgã³qxË[Þz$5·2øÐìÐ쉫2U¦Ê,†Þ ¡¡,ƒ÷¿ºò#s,–™c·ô[ÄÕ7ªY5ƒêTwÕ]Kû׫zUz“Þ¤7Ѝˆ²UŸª,•”³‡=z«ÞJœÙÿ5Ç>2ùIOæd²/Ù דà{ZiE© êU½@í´[¾Èwìg?dð 3Œý˜~Œ„É—æŸò/ØÿÊ{»X°÷±…yƒýa7‚2ÂnÈIEND®B`‚routino-3.2/web/www/routino/icons/marker-36-grey.png 644 233 144 6264 13061246466 15641 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü iIDATXÃ…—{P×—Ç¿÷Γex(0‘¨LñPP PÊAɪÑௌÊŠuÉ/¡ K„hPf},ÉXBR°â¢°>Á ÔU²V~‘‰È ± Ê0ÌÎ0ÌLOßýƒiReU*çŸîÛ}ûœOŸóí{O“üüüüü|xaÚLÓ+î÷‹ûYSþ¹üsùçX@áï…¿þ¾.œy3oæ}üCNÍ©9utº½Î^g¯cÇP T\„! ažâ)žHG:ÒÙ1ÙfÙfÙf’+~.~.~þ°‚Œ“q2~ ¼À¿À¿À¿¥³(µ(µ(•ŒpA\D6Lsð?º¹¼è àj¬ÆjZÍò…|!ÿ£Ãê°:¬~Ë ë ë ë« ŽLjc¤ùŸ“‘“‘“‘Ñÿ®<¥<¥<…†è¤è¤è$’»B²B²B,÷Yî³ÜÆÂ}a¾ð¼àoÆ¿;ž_àøÄî ¾Á<™'óäw’=dÙtJ$ Ý>c­²VY«úø6û6û6»²“ž&=MzJK:–t,é oËre¹²\L"yȃ“˜Ä$€ÝØÝ^Ãkx “ö@{ =ow´v´v´2ç­°[a·Âøì±õcëÇÖïøJ¤RÅÈ]{\{\{O±4–ÆÒúwÐ7È¡©CS‡¦´¢­³Åuâ:q]ëE‡ÍasØ&kÖhÖhÖp«S>Jù(å#qµ—ÙËìe†s0sÀ±ÂB F7ºÑ `fa ,°E(BÒCzH8¼ÄK¼„Øäiò4y¢ïê×W¿¾ú5·³ï^ß½¾{⟤R©Ç@#·™ÛÌmŽÛŽ8Ä!nðÿ¨G›G›G HþãîdãdãdãÂdÍVÍVÍVîí´Ô´Ô´TñOª1Õ˜j s\É®dW2Àoá·ð[ Æø¤“t’N€ 212FÆA"HÀïç÷óû!v¹‚\A€J¯Ò«ô˜#ø×lÑlÑláÞâ <å,œ…³lXîøÞñ½ãûÔ(ßw}ßõ}—§Ô¦Ô¦ÔŠ˜YËa9ð5ŠE=IOÒ“ÙKö’½€Óµ"*¨ èz„Dý¢~Q?ÀJX +§à?¥)¥)¥I\í»Õw«ïV,ð|”…±0vx«3ÞïŒ%ÉmѶh[´.EeQYTP¸²]Ù®l˜+â*â*â€öãíÇÛÏ8M¢I4 J¢$JÀ'È'È'Pÿ þAýÐu¶ël×Ù?æ?>óøÌã3.á.ê,u–: v÷mÅŠ7*øÕDOôDÓÄE\ÄuFJîÜ ¸sô 4Aš M¨4JŒ£DÔwáÚ…k®¹²f}töQx¾5ñÖÄ[°×>¨}Pû(0 À™°3ag€UóVÍ[5˜ù˜ 10101hhhòýòýòý€º;uwêî±ßÅ~û˜ú}õûê÷!«‰©‰©‰á'‡?~H’ž”ž”ž|¼Ýipœ†l'9ôìгCÏ<À<˜W"y.y.yþ£‡¥ÊRe©Z˜–8œ8œ8ÌÖnØ0°a€Ü1œ0œ0œóóóñ‹ñ‹ñ‹###|‰/ñ%€Oð >&ŽL™8ômêÛÔ· ˜»rîʹ+@G #ÐÉßò~Ëû-?àüópCáP8Ž©õLÄDLýw,Â",Òí£´‚VÐ Q-¦Å´xèc^Çëx݇¢OѧèZ#[#[#YÄã¼ÇyópaÁg >[ðlQcQcQc@`h`h`(€×ñ:^hDXõX¨âTqª8 *#*#*cÐl®2W™« hHnHnHæ4RH!@ŒÄHŒy²Š¬"«tû …Zq »Ís­˜îŇÉiršœ¾“A£i4ήC)JQJKoܼqóÆMnÿøèøèø($›d“l˜ùóüyþ<€´ @,b  ÍhØb¶˜-x%¯ä•3Zôl¬n¬n¬ve7Œ7Œ7ˆKdseses/…‡‡u(@¹ˆô ‡KúQ% 0ÀÀu"™È$uá×ï‡_×¾#ß%ß%ßu¡h>>ø¯Ö¶Ö¶Ö6²SÑ¥èRt¼†×ðšü(~Oüžø=Û¿¯^¼‚ÝñþUØ¡^åáO,>>>>>œ{ØÁ¤LʤäßF,YŒ³®ù®ù®ùÿädÁ²`Y𻥣‰£‰£‰>µ&IgÒ±/Û+Û+Û+]oXœ§Å)Ê”ÄJb%±Ÿ²rVÎÊÿ»2È õÁ#ŒükB܉â^å!ø ûí¢ Mhr°:VÇêâ{h ­¡5ÿ<µijÓÔ&~±¤LR&)£:Qš(M”vë^HMHMHͺx}¾GßC~àýx?Þqû­wNþÅ_Ø+Úu/®d â‡$•¤’Ô»!¬‰5±¦»=x,ðX@u"ƒÈ 2 -àóÇùãû‡»¶wmïÚL"ØíOh,mÅñÿT”8f厔IEND®B`‚routino-3.2/web/www/routino/icons/limit-34.1.png 644 233 144 2670 13061246473 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜmIDATHÇÍ–ßoTEÇÏV¶?RX@¶Ð4h*I%ÔHª-ÛÕDƒ ]HSE~#/êC Åš‘\J¨¨Uˆ+4… hÒ.©š4"I«´"mi ì–íÝ{çãÃvzWð`^6ß3g¾ß³sf¾wDDdÊØ¯@ÒSIO%¹â8éM;žúRêKs¾c¿ ŽŽ|“¿˜üÀÔ¯¦~e]±±ž×ù‰ëElþD=—)bR)GÉ®…Šg+žM͈ãOƒÖ”Öt/ë›×7ûúØ×¼7»ùÀí’Û%`c=¯óõzÍ—È/µé‹€ó¤ó¤£R’S’E`–w–7÷íxÂ_¹ðê+¯¾ÐûDï* Ì[ÀD&ª L=°žË×ë5Ÿæ×zZ?^€»Ø],ekÊÖ¤5Ä\i„w³ßÍÖzFð13báXÀ¬4+‰‚ ª `c=¯óõzͧùµžÖ×c·ò¾ˆÈ®R(ï,ïkÀh‹õ³ŒY`ýnücüƒ1V©Ò%«§UžÊ«À*° °Çà !o½n½ŽaÇvÄv€z?ΫRW¥7µ¾ne·ˆÈ3{!-œO`{g[gÐÀË ŠT÷ÙÉ'|xðàV²’• Î©sê\BAáÿ´v|˜WÍ«æUPMæEó"÷ÇÂ/î<Õy Æõ‰×#ô‰ˆøÏàÚP½¡ZÓX ¯x/¿tvص×~T‡Õat v­íZÛµZ³Z³Z³ì¸TƒjÔiuZ¶ãÁ}Áæ`3ª{Z—³Ëië©KÊ6”éÖúψÕ$"Òñ4moÚ»‡{‡{ÕO~4yîä¹D+2*Ò+Ò!Ë—åËòÁÙѳ£gGm¡œþœþœ~(=Zz´ôhÂ1˜Gl˜˜˜Îfçaça8üâ·}ßöûo˜o5V5VéÂ:ÞIr™”1)£`±Hñ¾â}"fvÈò9vH]^]ž¤øøÄ'"™ÁÌ`fPÄl5[ÍV‘ÚŠÚŠÚ ‘h{´=Ú.2Í?Í?Í/ãC-QKÔuCÝP7D!GÈÉø2ãPÆ!åulvl–”x¶£AF^XôÂ"W‹«¥`±08etʨõ'Ÿ¾7øž}íG"ákák°|Ïò=Ë÷@þ¶ümùÛ`Kþ–ü-ù»5wkîV¨œY9³r&ÌÙ=g÷œÝÐSÝSÝSmï”qÞ8oœ·±·Ð[è-„5õëê×ÙzæêþÂþB€©“¦N²þóÅôäôd€hq´¾[¨ TBÁk ç-œgååå€'â‰x"Pµ·joÕ^˜_3¿f~ 8ï9ï9ïAswsws7 ¸Ünˆø#þˆßæñLô¤{ÒáÀÊúÌú̄֗]¯»^àjqµ¨€¨ƒúŒý0ôÄ~÷¼äóçŸ{þ9¢®å.¯Ë U—«.W]†‘ì‘ì‘l›°áBÃ…† P¾³|gùN;¾`é‚¥ –­ä[É·’íø²o–ù—ùáÐþƒ… ÎXCãgŸÙgLô- }£{£Û¾%±Ån?¸ ¿ ü8ð#Êl7ÛÍvP]ªKuuÂ:a€ÈìÈìÈl¸[~·ün9(—r) ÕÕÕƒuǺcݱ Í •„JPÑ”cİõøi㢋n%gò1gÜÇT͸­V«¹¯JU™*²É&aÇbˆ!@¡P€ÁÿØJ‚‘äªÜcÌ7ñ1íüQí¼«&¬šÔmêçØpl8hö™}:?ÛùÌ``ab‚êUݪ¸®ó­MÖ& ܦÏôÛâüãÎÿàaç|¿•íëâ±}=ž/ؤ C#Q¢Æ·IEND®B`‚routino-3.2/web/www/routino/icons/ball-1.png 644 233 144 216 13061246467 14206 0‰PNG  IHDR °ÚSbKGDÿÿÿÿÿÿ X÷ÜCIDAT(Ï­’A ! ÿÿóxXAÄȪd®mBh*(IriÙF;áŸq½zz†—$3±DI#ßÂ9ùcgþ¨r/õwÔ¦IEND®B`‚routino-3.2/web/www/routino/icons/limit-22.1.png 644 233 144 2755 13061246472 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü¢IDATHÇÍ–mLTWÇŸJg†A² $¶™tØMˆ‘X?h7S“:Ú,¾J·mÄhÀÅ’v·Yljcw#ÛÆõ•4m—H¢êšˆQ@«m(AHa£ °A3BK§-QF˜{ïù퇙ëúy?ø|™Uû”É»|À¤ƒÕ¢z™^ƨՀ X¾™7ëÍ~ÏÄ7ùLþø<ÖVΉˆ)€ÒPiŒ€XŸ6óƼ`ÌhÍA,1©2ÆŒac´ m\cÞ˜7æ±l>±r÷âõ`”åÄŒ ZVêÝ8>¼â|Å DL~s+;EDò>WÔ>¡C}¡>`?E ÖªµÌÑÎe.ƒñÀx`<Zi¥5i:ê¨5¯æUò€ ÓÇõq}Ô}Da.."ú<ô9˜üñÁò>”ø¤ ½,Ý]¾»Ü„1žu íÚõ«¯þ=ÔHçHÇH‡E4|eøÊð¨?T¨þŒvŒvŒ&åU«jU­ :U§ê´â=Ÿô´õ´¡&~õMê7©ŸÝ]¼»ØÜÚ†^ÑoˆˆÜØío·¿ ÿþã·þoýª"ý¾ëc×Ç,¾ ´Úaå–•[VnÆæÆæÆfȺ•u+ëîîî‚·Ô[ê-… =hÚ“–*‡r %«%«% RÛRϤž3/~úã§?²øŒ ý­SÛOm7»±Ç.KÜîÆ5ω””‹Ü^{³úfµíÄŸj¾ªùJ]][»¶Šx¢ž¨'*r©îRÝ¥:‘½ƒ{÷Štyº<]w¶;Û-Ìf3ä¡i+´Ú ÛŒmÆ6#²üŸË›–7‰¨BÛ›¶7ů²û/¬{aˆHFwF÷šç„X¦3ÓiŒ©Ê©¢©"ëØ÷ÿ¶Ï×çƒüüüüü|رmǶÛ¬…èŸèŸèŸ€UM«šV5ÁNm§¶SU¦ÊT™U§]Ô.j-¿Ð_è/ôCãÞã»Žï²øôßÿäÿɹ$s‰1&ÆáôMé›T Ü{çÞ;¬««×yg­³üú@î\0BFÈÁuçuçugü¯êŠÂÁìƒÙ³aÖ?ëŸõÃBx!¼†‰¼‰¼‰7pn@ķٷٷYd_õ¾ê}Õ"î!÷{Häìú³ëÏ®ñx¼"§>vú˜HE[E[E›È£wŽÞ9jmmÚ'iGÒŽˆ¤¾˜âKñÉbBvÉ–ž´ž4‘h  ‡§’ªšªxÐ?%?ÿî‡çx&ÿ>Ù4Ù„ŠœŒ4D`úêôÕé«0ž O…a²d²d²"žˆ'â¹ks׿®ÁôêéÕÓ«Áh6šfkef~3˜  ÷c÷MUÄx–/ÞX÷ƺ¤Siꆥ# 3uåS¾‡ºó°_àY|êØ/nõ#Ô–V–V‚:ëS}ºCw€êÖº“)¬a Ju«Õª7~©vÕ®Ú¿PK-(=!´ãñiÀ¨2ªˆ±LM økÿ¡òÏ?ªüï]ùؾ.Û÷Øãù‚ýÕ£ æ_QË:IEND®B`‚routino-3.2/web/www/routino/icons/limit-116.png 644 233 144 2567 13061246470 14606 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü,IDATHÇÍV]hSg~N~Lމi-‰ÂP Žâ¶"SÁ¬éV ÿ[i‘Üh¥â:Á?ôBEÞ¸VN¼R¤Ûª´³Öê¼(h›Ú"k§Ž)¦±ÅF:Ñ"&˜Øœœó=»H¿œh·û~7‡÷ïyžó¾ç| ¹SO–…–…O:¶Ô™yg¥³òÓ_ÒñyT6+›ÿ:JæœÍ9K’s/νh<6cY—ýÙ󀉟Í'óÈ…™p´:Z•ò©ø$¹mɶ%N_:þ>Hªíjû»¹«cWI^½tõ¿!ÇûÇûIòMù›rÒŒe]öËy‰—“ñ¤ý¦ý¦2J:f9fdþÚüµ‹¾M7 /"7¬Û°Ž$#ÖˆUXH’Ô_‘tÓ-ÊIÆ£\¯³bYŸê—óOâK>ÉŸÖÒ[æ-ÈM5›jÔ éÇ?‘\ ù´v’§xŠn2KÅHRß®oç$)‚"H’T¨f,ë²_ÎK<‰/ù$Z>ü¶d•³ÊI2J’Ziä9¤Q¦5kÍÔÄw¢M´Qð£e”eF)Š’Õâ„8A‘ú#¹8¹˜šahÚDæ…û˜ØªmÕH ÉlAŸý@C}¡¾ˆÙȧÆS#ƒûµþL+ÖŠ¿Š'âI–AAAêÏôgú3R´ˆÑ’UŸÏùœOŠ ñR¼ÌÊ_3jŒƹ'O†ÕŸê¦‘FÀ0ž¥a’“Ó…1É$“Yq€Há6a˲¿ORGRGgiÆÇ B$'ÕQutšý‡ókÒùÓJŸ~X?L'ØÊÖéÎO}ô‘<Æ£<š•ÿ™ƒ¤wõ½€[ô=úž,ç׫lU6¹S8ÿŒýWÎØÛÅŒ½˜7ØëÖWÅ}©¦IEND®B`‚routino-3.2/web/www/routino/icons/limit-19.6.png 644 233 144 3041 13061246472 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÖIDATHÇÍ–ßOT×Ç×ÌàÀD"L¢ ,µx-43–˜iQ µBk[uЍ)z•1ÆØ¦„P•äšØ^y(M«7mÃõB¢Q(ÅøÐƒŽÆ4™+Hm:ÀÈ þ…é䜳?÷aæ0Óþî—“ï^k}¿ß³ÏÞëly!þ°æYó¬1lÝ“˜O{+í­ÂÿÄð),›,›š ó«Ì¯²¾ËúÎø-͸™Ÿ\/’àOÖ3çåIL¤žK=g)ãf¨.©.IsÆð?{ÁqÑqqJƒº>ê¸ðÅد?¼)”C›q3߬7ù’ù¥ù/ú"° gAeRí©vÈ3ÿÍĆ^„wß~÷m€{¶{6e} XÄ"UD‰bŽñ$lÆãùf½Égò›z¦~Ì@ÎÚœµ"ð~Íû5Ž3±‚ßþ ç~œkêÍ]ŽsœE Eµ(€¾CßÁ,¨^Õ € $°7óÍz“Ïä7õLý˜ùó·=YAtËÜ–¹yC>cÍ\Ê\ ¨&í®v3¢Œ°2B ý¡…µ0¨zU¯êIŒGŒ2:”Ú­5h Ìiþ¹Œ¹ 0¢1~ØÚžÄõç?eTDdÅ—àøÝñ{4++@ JÕÆµqžÎ+DTH…€£åh’‘]ìbPFeIóyä‘*¬"* ¶ª­<¥3ÆÏþ€/àpDÑh ˜ŸøJº uŸÔ}êgÃeòöþ£·µ·\|)øRB¯o¬o¬o ZWµ®j]ÁÁà`p07ƒ <üÞð;ÃïÀÉž“Ý'»QÿÝú‹ïß|¶KìuíuÄü—DDü‡ùWûí_̯Ëîs9í—Ú/1kûÑÖaë€ÎªÎªÎ*€w»À žO§\E®"WŒ-[2¶$a(<žOƒçŠçŠç TÞ­üµòWx=´úóÕŸ3û¿mÑ¢h‘Ú –]XÆxÌU¬Ÿf|ê.•½k﬽#‚]DÄrFÛ2m™’šÈÍqÔ:jµ"7ênÔݨq;‹Å"¾_‡¯CÄžeϲg‰töwöwöËü¸¼¼:4thèHŽ+guÎj‘7Ò׸׸%5gIš7Ík9#â©÷Ô‹XËÒ§?v—ZeƒíÛ7¼"²àø‚ã"Ê#""á¬ÕžjHIAɲ’e",,,"UÞ*o•WdªvªvªV¤²°²°²P¤ÏÛçíóŠØ›ìMö¦„1½GïÑ{D²ýÙþl¿HÙí²²‘¶þ¶é¶i‘›;o^»yMÂ"Y_g}-¢F,%–^±Š2ºŒ.Ëm“¶IDì""’c«ûꞺ'bm³¶YÛDfòfòfòDV[ylå1‘uç×_w^dñæÅ›o)(-(-(Ñ–k˵å" ,<²ðˆHzqzqz±Èžü=ù{òEœ×œß;¿¹ø~æýLÉáD(Ðoë·-wâ›ßÚ'Ú'@ßÛcñ-2»ñìÆo7~ m§ÛN·NìŠîŠîŠnÈuæ:sÐØÕØÕØ·&nMÜw¡»Ð]ÄñÃÎ ;7ìÜŽ´4•¦àï;>4>4˜Õ:L½ŽÉŽI $æ'ùT~V÷ð“y*£&ߘÜ6¹ 5óóLÏLOÂØlËlËl „„„ëYÏzPveWv7„  ¦Ô”šcŸ±ÏØã_:¾e=y6’8•ë^®{Ùl¸§®Æ­ø£)Ðú¼~³FµQèc¼† ¨íj»Úž0ªŠU±*ši¦9©m£†P U¾ÊP¯ªWyª–ÆùËÇÇ“h ýêcI_óÚ¼¶DçÇ©´Ð¤ßÕ“:?Gi¤ÔuåS> Ÿ~úI&˜5ª†Õ0Ä_IÑ©ëºÎœºªE´pÖìüÞo ðì¯ÿùýW>··‹çö>ö|Þ`ÿ[¬½ìR‚IIEND®B`‚routino-3.2/web/www/routino/icons/limit-126.png 644 233 144 2730 13061246470 14577 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]h”WÆÿÉ$™¼É4q`ÌEmm‰¦[…V#’½˜€Nuˆ¶4´[-;^´ƒî¢& 6ÝÍEýèúA‘E‹$4lœ…ØL+^H³q܉(´‰aiÖ†Yf&išÉ5ÌÇ{Îo/&oÞq?î=7Ãÿã<Ï3çðÞ# ""ËÊŸ/¾¼®—ïµóÕmÕm«.ãó&”½]ööß?úsõçÜýî~5eÇVÝê/Ý/bã—òYyY&vÂr†Ê|‹q/¼ûÊ»¯T//ÆŒ€qÙ¸üK>þh`è«¡¯83c3c||`ÇVÝê·ö[x¥øÒûü"Py¥òJYœUÎ*xÁÿ‚¿ñwņÐþFûIGÒ¡ËÀœ\¸´ÈÁZé’Øª/ö[û-< ßâ³ø‹z<›=›Eà­]oí2úЦþ ÝÏu?gñå/Ÿñ.(d s·¹›,舎PFرU·ú­ýž…oñYüE=òäÝžÚ ;ªwTÿÈGAÕ«zP›òùòúÔA´%YM¨q5…x!^ˆƒšS³jvéÑ»õ1} ]ø>÷Rî%òJåæ.ýá( ïäßÉÚâ—RA/2RF*S÷Ô=µ„ûºË{ó^ëA=¡'JÓ:­Ó@/½ôÚy†fôJ½R¯ž¥†’ú×j—ÚÅcöñá~Ýý: g$ŒD¦ÂÒ³(ìü Ø×³¯géÖëëùoóßÚ:"'"½‘^ˆybž˜Çæ¹sóÎÍ;7á왳gΞÉ=“{&÷Øõò@œ Ÿ ÁøÎñÃã‡í×·‹|,ìëÚ×e]íù‹Â~èâvðZðp@ê‘zD6Ôr…\àØæØæØa_ØöA¬*V«Ãkx /lqoqoqêC«­:#FŒŸ¿Ïßm¡¶P[Z¶&[“ðÏ¡X{¬ì¢¼ô.¾tØöCW…HÝhÝhó¯å—MÍ›šEä·""e}T'." 2/ó"ž÷=O@Äáv¸n‘Dc¢1Ñ(rðÈÁ#ˆo:Þt¼I¤5ךk͉œl8Ùp²A$5™šLMЬ_½~õúÕ"^ß°}ÃvÏdÃBÂ8å7E¾²k›Õf%"¿_ÔîgÜϨ!J§ì±7ý…u…uö•ø[ü-þ¸p÷ÂÝ wí|¤'Òé5G×]s:wvîìÜ ýýý°vpíàÚA¸Ø~±ýb;¬[1¶b FV~g|gØ|jûϯþü*XzÊEÔ7꛲EÞ,¼)ÖòH¥$$±Kájáj᪈+íJ»Ò"ÓÆ´1mˆlíÜÚ¹µS$ $I‘Ó¡Ó¡Ó!‘šÙšÙšY‘Z]«kµÈÞðÞðÞ°Èò¿-¿±ü†Hòt²#Ùaó±.÷iîSKO¹HÆ—ñMÜ–òë£×G­>>”µºRWJÎÊÔHÔˆˆ+áJ¸"QoÔõŠ(¯ò*¯ÈðÔðÔð”H½§ÞSï©ÌVf+³"'6Nlœq†agX¤ùÍãÍã"»ï%ßKZø|è˜E‡D–ôü¿©äJ!XÚS9¯ææ W›«ÍÕB¶#Û‘í€Y5«f¤¢©h* ÓÝÓÝÓÝmɶd[@ŸÐ'ô ˜›™‹ÏÅAýJ½¦^Cƒù¹ù9p‘o‰ÿ‰©|ù 0fŒ™LÜ3ï™¶ ¨Kœ(kÍÒ+GŽ\I @t­®Ð%þ÷láãÂÇb±D½î'ÝOºŸDÿ¢E/Š^¬Ôˆ*Q%ªŽ|Æp\@ìkƒµÁÚ F*PA  †j=èA€ØâaÙ:Ù:Ù:RÀ±CìPg'ãdüËòsÌ90§å~qNqNqæB¹P.”¬žå:\Júp –` ­Š„"¡Hè°MÙ¦lS~qEEEÕ&Û°mØ6ÜüÏéÓ ¦Äþ‡k©k©k).ŦĦĦ‚E’E’E Î+Î+Î p^;Ÿ;ßwÎwú{ãßÏßÉãäc\&zˆ¢‡M¶“íd{h)Ê„2¡W+§ÎN:û®—w³w³w3¿'¥'¥'¥‡Ú£»¢»¢»Hª¬@V +À4¾ÂWø LcÓ¶b+¶D 1m ²YƒÚÕÞÕÞÕ.Ú[Õ­êVµ°çÕG¯>zõÑæï¡ŠPEèR~;¿ß¾¢TÌsÅÜGÙtÙ÷zßë}¯´£íAîlÛÀ6´Ÿ³ÍØfl3ï® û0ìð¹%™»2weîb«•¥EiA|àpb„!F€E/zÑ À np0‰ILˆD$"ÒGúH8¼ÄK¼kö0{˜=0pñû‹ß_üžËhhhcoIåR¹Tþø2·Ž[Ç­[ž…åXŽåÏþ—Ê rƒÜHü%þÿÿ¼>}yúòôåwׄe†e†er©¹9¹9¹9ì-¥ŸÒOéþ …¿éBº[°[b$Fbˆ‰˜ˆ £d”Œä¹An¼É0ËGð|à¹És“ç&ø8ý‡¥‡¥‡¥s©ÎøN'å&¹Inruœ­ÞVo«ÏYèáá!†gVeVeV±NX"ÀƒYÆ,c–ô4=MOdÙEvH@~µˆ(((€ÙÚA̳Ål€éez™^ÀQ§ÿÌÚÌÚÌZ¶Ú;Ó;Ó;S wò8ù¨¨Õ¢úàŸìIö${ ½­½­½e•²JY©°JX%¬‚í£}´­­­:i'í¤À“MO6=ÙÀ#Œnán°Á€xÄ# q$ŽÄýÕýÕýÕ€y—y—yœæ¡<£<£<©3¾“ÇÉG¹p.œ ÿàsÕKÕKÕKž¯¯¯%e-IéÏôgú3p/í^Ú½4àhÍÑš£5€¾[ß­ï~0þ`üÁèkô5úš·‹HØ,l60ÀpoÛ½m÷¶¥ÖRk©0iL“o- YÈ‚t~Òü¤ùI¤ÌÉãäc­cÖ1ëþªY­Y­YùMùMùMLã|ƒo Ö k…µ@ÃPÃPÃP™P™P ¤«ÓÕéj` y y 8íÚÿ´?÷NÜ;qï¾O}Ÿú>†¶mÚ Ô/¬_X¿p]êºÔu)À´1mLÛ[Nþþþ°ò½ò½ò½˜III@Áí±Ûc·Çp„Î5=OÏÓóoæÉ°{± „€í„í„í z¬z¬zü6€çFÏž;gçì0’7’7’÷öyµªZU­4RT#\O¹žr=Ø¥v©]ú«ŒŽ`#oãÓOè'ô'q'‰še˜&@ü»%Þo‰'óg·ÌeÌŒ™1CdV`Å)‹S§u—ê.Õ]rrr€ácÃdžÖk‡µ _“¯É×@Ó†¦ M¿h¿h¿h`ýÁõ×îîîI¥¤RR шÈr…\ˆ#8‚#`¦nOÝžº‡4•¦ÒTñïÌJãJãJcaËÈœ‘9#sèYŸ6Ÿ6Ÿ6’ØØ؉xÁ ^‚ ÁÀ}ƒû÷ ÀÄ¡‰C‡€èSѧ¢OcÝcÝcÝ€÷ˆ÷ˆ÷ÐÑ×Ñ×ÑH–K–K–½ï÷¾ßû>0Þ<Þ<Þ i†4C@•§ÊSå¾_ƒ¯3%%%´ú¶ú¶úâk™R¦”)¹#™ÈDæ VÇêX)háZ¸Ž÷÷÷cÃ,5¥5¥5¥€åS˧–O-ê-ê-j€ì$;ÉN€-gËÙr@}C}C}ˆÙ³/fà¾Ð}¡ûB€ßÏïç÷ŒãÁxˆB¢:Hé ¬Ž’+{{{„%¤Ÿô“~ü@x¾RJý¯ù_ó¿v¨Pª•j¥Ú³Ï^¥½J{•Æ \ä/òy~·sûˆ5Æc°¶¯i_Ó¾(Ü_¸¿p?p]q]q]¤S©F`NÅœŠ9@FGFGF••dçgçgç“O'ŸN>´:­N«ƒaŠ0E˜ »Pw¡îB0=h´ Úè-é1é1é±{Yv“Ýd7í±“}Oö=Ù÷À/ø¿üËqÉ É É‹ùdÃdÃdû¹Éß&›ü­˜¼F³F³FC®½ØòbË‹-Ÿ=zt'èNÐÀOï§÷Ó@á¾p_¸‡ä!yÛ„mÂ6 k¢k¢k˜{gî¹w0mÒ™t&6±œ±œ± IQ¢(Q”¼þHdDFdb7aæa^÷¿2Zw­»Ö1*REª&þPWKê%õ’ú­ñååå¢Á/Ø/Ø/˜XÂ> û,ì3ÌõïñïñïÄ­Ô­Ô­@Ò ­hˆŠ¨ˆ $€ô$=IOŽy«·ÕÛê ·ª«UW«®r·ø¥üR~)Me¦˜)fêË3ÐB íÇaÆa6ÈÑæñ‹fûFö )%¥¤ôÚNšD“hÒžä"¹ô/M…M…M…\ž9ÒiŽ„ÂqtZ„^¡WèЄ&4PB å¯N¦Nt¢óͶãÔ¢GSMSMS ¿{¼|¼|¼œ=. ”JkŠ#GŽ<üÝUÀ çЇ>ôq+˜¤¤¤¤¤$¸b˜T$–Ä’Xr(ª2ª2ªòÖ›3ÌæŒyÔ’hI´$Æ\IIIæwÇÆÇÆÇÆÓõ8‡s8+‘9‘ƒ…<àÀ.pÄ`1X †HÉ {³ÿfÿÍ~1¹uOëžÖ=ôoî!î!î!Ï^Û_Ù_Ù_e¥fff[8ÒBZH Ùáø°/œó´c‹#®vÄYÇ/‰ìÿ—ˆ9Šf4£™ßM–%dIòúÙ_Ž«ÿ°çÙóìyŸ7 ›…ÍMŒ.‰.‰.Á:áð@xGçÑy°r\WÙ‰ˆ'"øÈáŎ3½.1.1.1G—Î.š=·„2¡L(cÃLÜ¿;%R\\\\\ ‹3£pÜx£!‡vw;´{Ü¡Ýzª¥Zª}«ÝF{£½ÑÎå™ËÍåær((¥”RL83Ñ2Ó2Ó2#L?+{Vö¬Œéu)t)t)¼ÉúÜúÜú¼ð»ÞU½«zWÀ0ç~êtò½ý °ó…ÃÁ ä#ùäš:M¦îèz—Ï]>wù¼¦x<`<`<€5_Ð]Ð]Ðñ»½g—W—W—δÚ í’­x x xaB˜öçöcöcö㙄ðEá‹ÂÑ1G¼4Ç8ó[.¿cŽEÆ9.»D©(¥ä߆ß~oø=œæƒù`>øŸœ,\. ÏøËÈŠ‘#+¼êÌÝæns·øíÝïþx÷G~Ù¤}Ò>igò%‰’DIâÞ ±\,Ëÿv 2È cfO>!ÐYG¢¸ßòüýŽv‹ ‡zþ€Ø 6ˆ I}´–ÖÒÚÿ½öõÚ×k…÷$e’2Iífr™\&·µ-¢6¢6¢veR__¹"ø ~‚ŸXéðÛèœþ=Š?°ßh×Ó¡Ý؉ØÉv’’Cr®GˆzQ/ê¿Ü*‘‡ÈCh7cbLŒéyˆpD8"É|õ ëA0 ˆp‡?gc9óGÿ0PÈNÓ˜õ7IEND®B`‚routino-3.2/web/www/routino/icons/marker-8-red.png 644 233 144 4046 13061246465 15357 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜÛIDATXíWLTW>ïǸ踴©(3k×¢c¡þ\ReÐÄѨiF‰b1ÚµVE;’6ZÝ"ÙÊVúÃ`ŒšX Œº ]H»qÕ&VצÒÒÄ(3QL¬£´ÌàèÀ»ï~ûsß{3Y5›ÝóÏÌyçžó}÷œïÝ;C4bã(Áä…)þŠ_z>ªuTë¨Ö%óU¦2•];Ay”GyÀH˜×’J*©Â}^+Ö‹|QOÔOÄ“&ò±ò«  ª[ãã_Q[ÕVµµ¥_Ú)í”vDìøzõÕ7VßÖÜYsgÍÀ[à-𘾈‹õ"_ÔõÞ³ù¼ ÑŸü©‘#r$˜':”UžUžUÎÞ9Þy¼óx'~~~@Q bƒ‚"~<.Ö‹|QOÔOÄ›üé³ù‘cŒÜ'÷É}Á¿Š— .\Ò~×;Ü;Ü;Œ^ÄÏä9<ÛÇŽ°#›¥íÕöÌ£½¨½°YZ¹V°}¬ŠU|&wq4‘/ê‰úá|ǃšÔ"µH-DêAõ z°ñ[‘à®u׺k5A¬’WòJ„µFí¨vàAä Àž¯ç?ÄÐEÊP`HŸ®OxÏ¿´F­Ekx%÷qÂb±Àø‚àG¶Û¶Û¶ÛËæˆŽjGµ£šgà—x0ûb‡`Zë±ÞâãIÑ“"ˆŒŠŒ€Ø‚Ø‚„õ$Óe²jVmFžÀ| ~êvu»º½ë -;Zv´Œÿ>^ ªµŒtÀ°ŸÂ§X ^~ùòËà8â8Œ¼nv,íœØpbCBþ¾Æt“êG¾ÑÙ~ÄC® W† µýKú—ô/1ëÀ 'œÂÈCž• KciÊ À|Ï|´U¶UÀÛ®·]Vâ×pÍšÖkõZÀ¨Çø‚à'ˆþqÕáU‡W6wÆzY/ëB!à?òö†÷Z‰ÔTÿ‘5þC÷ÝÖ¸±qÂF‹X‘YßÀ‹ã >‚_œ(¾ô^ó^óš[f¬(^È´¸z…^a}¼µvk­•Ð2û2;Œ}iìK0ç›9ßÀ£œG9Ö<®q @D¶ŸígûM|ïlïlïlãÜþRŽùs_g_g_'õÆä˜“IQ¶*[•­ÚD›hEè=zˆHþDþ„ˆ_à "¢ûSïO%"²¶&"bÓÙt"¢±õc뉈î~w÷;"¢Ð›¡7-'á-¤…Dt“nÒM"¹Mn“Û(NŒ”P0 ©Wð#Ù#{dÏð}qÕª8UqÊìX”¥²T– Œì@L„Î5Ÿk¶v²{G÷kÇôKú%˜raÊ(ù¸äcÀãÀ÷º½n/ÛeôÇÇN²“ˆÁ/ö>4nh¼¶îµu`sÙ\àùÉó¼pê…SÒÒ |õôÕÓ€8™õcÚJm%¸¨_~¥üJù=jܬlV6w—Œøi!J´¬Ïl¹¶\[nð¤HðíóíóíãÆûªýz8{8Û@¸ÿ\ÿ9xÿìûgàõW_6º7ºÄ®¿uý-KŸË´7´7ÌQ7Gš#Í,7®Ð¹F®y²Dš M&L?žDPù—q¥n6HФ&©IjZÑ·ù;ü_ù¿2ûÉviŸkŸÆ`ŒU»# X¶â‡à‹g–íõ5õì; 8S©ÎTm»ÑÉ*¥J©ò¹ jòGu˜\ © Õ*j¡j!RBJH ½Óf\­ ŽGƒf¼ØØfÕ®.ë2°ylÎêY=€([Ζðë[ô-/á¼ÂÜÎú®ïZßÅv7Р:¨údîÈÜ‘¹ƒHvËnÙ-³+4ÿ,Qn)·”[R{öîìÝÙ»‰lå¶r[¹ÿ€¡ÝBw¡»Ðª]ݧûƒ¤søwq×2êil›fö·~^ý¼úy|±q—Ûmv›½ïIü×Rj⤥óI£')ɽœè;RG´8ûTíÚ5»f7 é÷ô{ú=S‹=èAàOëIëIëá« M¦Ëérúº?$Iñ³$~)ôìJ}’vWÿívø;LíjZ‡Öa;3g>Îf ̘1À~khñŒrF9s$_H-.½d‚cé9f.ž¦Ý:G£N³šM&1ÄÀ`êk÷µûÚÍcGmPÔ†žø_’´$áÆŸÓèçL6‘°.®Ý¿î¼”ÅÈü…ù ãÕ®ðJR7&·Ôo©'É §.œâWdïÍÞ›$9”9”IšØ¨ýƼÁ7‘ÞÑHë%ë%é )Y)Ys¿‰4tÌ%Wç®Î%ÉnK·EÈ$Ijý$§rªÈ$é£F¼š€z´ß˜7ø ~CÏÐø™äLräš‚5Judàñrçì³ ½PÉr–s*ö…}$©mÐ60@ ð$%J¤‰ºÑoÌ|¿¡gèGüàío{ØEߺки¡&ݲ†¬¤( ÷„{hT„Ñ¡;õeú2R”‰2QF3ØËÞq$ôžP(b(ü<4;4›Ôµ?¹îź$}QýñOé€ù•¤òDyâ‹!Û]í.Rë I®µá×á×3%`€Ô:µN­“u¢NÔM0ô’/ùÒ„BšÐH–ñ ’¤p 'Çx8ÂOÕÛäm"Iŧø|1¼ñ}SÇo%»Jv‘â*Iê‹ bÛsÆs†¢ËÖ•Ø•ÈIáq{Ü7Ùeë²uÙ̼ެ7ëÍ&ný¡µªµŠ¬¸_q¯âÅ_i÷Oß?=Þ½Hü±5ek Éш þ+~\¦.SÉÒ’_Ôš†š]Ý®W ¤[-·Zoµbñ#CNܸ{q¶:9Œ©}–é–éˆS¨nÕ ð)Ÿò©),IcÒ V©Uj V‰Ub&…^­WëÕ€rN9§œrJsväì>lNîOîGœßùjÏ«=R5¹(s e&ô&ô.Αc©²TÑXË­å€p¾óùÀžfϰgþF£¿Ñ,¸Xp±à"`µÚG¿Çß3ÙØ cÐ1èT¨Pœ\~ÒuÒ ý;¤©À¿ÛæÙæa7É›œ³¼±¼¡]†ÐëõzéÎ çˆ$Ä"$‚" è˜,,Їâ! ÕJµR­™Þ6¼mxpvÖÙYgg¿Ãïð×®%\KbwÇ®] ´\¿[t·I@Ì“˜'?×Z@z$Cö-÷-o½4^m¼ ¸9ÊLø:asÂfÀšmͶfO66Å=Å=Å (ÅJ±R °Ÿýì²+³+³+½Å{‹÷MÁ¦`S°ýd;j; dˆ4ošÁ¢Ej‘ÊÍ@½§ÞXÞøí~{뉧r_É>’¿§R?¢!G>))¤ÄÀäS9’:’:’Jööö“ôÒK/9`°XI^æe^&¥Ò@)Ù÷O_[_…˜zzfžJ>/±—Ø…{üFÔØüJRéUz}1¤Wójãº+I}£¾qÂcdýoøÞúEQ|*ÒE:)êD³h&I±@,à˜ˆòâm÷¶“¤2¨ úbØòÖ›°ùÃë-ë-ææ§ö†½$¿ÓºµîÉ›ŸI´ÑFòñP´&Hñ·hí$ýÑ\‰Ö 50$Ã}á>’uÆæêßÝüïï¿ò½½]¼·÷±Èñ}»Áþ<©c;>Ÿ÷ìIEND®B`‚routino-3.2/web/www/routino/icons/limit-64.png 644 233 144 2342 13061246467 14525 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü—IDATHÇÍ–]HÔYÆÏh£c[V[ÛEÑlµÆ¸„5PÒH”0H…ù­}PìElFAlƒ±ÔMbTãe3ôIPc»+^T^$ôµBBèEÚnã×ÿœóÛ‹™3ÿÿn{é¹™yÞó¾ÏóÌùxçB13ù) mAÚ‚´ìN«µãž ž ß^Nà³\›]›»ÃŒÓ3NÌjšÕ¤žÛØÌ›|g½6¿SÏÄÅLa2¯f^u&qlY±e…ç›>ù²Z³Z?Z°3¼3 p½ùz3û ¯½¯ V+›y“oê Ÿ“_4üG_pßrßr½ÌŒÌ !`aÑÂ"ïO‰„¿¼(¼M›®Ó@¾¦1MC aF¿›ùd¾©7|†ßèý„sÖÍY'”n+Ý–u>Qðü"˜`¾ÑoŽsœi` YCr»ÜÎ(èGú.\`c3oòM½á3üFÏè'üˆïmÐež2OÊП É;ò€:¯Î3®ÔAD[O­«”RRI>ú;íÕ^P?¨rUŽR!Æù[Þ•wü)=£/œ†r…¬¾¬¾¡)ðJ¾’À›@T'‰³˜RJAè^ÝëpÐB -À9ÎqXÏzÖƒ~¬ëÇŽ¼æ‹ªT•Ä“`SJ/¥Ÿð“4vöwØ}d÷‘TqžÙ}QGumfºKºKºK †ƒaè<Øy°óà§+öºòuåëJh›×6¯mžc%ûÉ ͘5` 8õŒ~ÂOÒØÓŸ!ô!ô!U¾C¿·NY§5‘X^,/–k¢k¢k¢°ñ寗_‚¯ÈWä+‚žÆžÆžFÛ€·ËÛåíÿ5ÿ5ÿ5;®¾VåÞÈÙ`øõ[?áG@v4;ª¯Bßʾ•6¬¶–XK;v¦åL˘»tîÒ¹K¡â^ŽŠ{P´þhýQf˜a n¬n¬n rB9¡œl-ØZ°µÀÁ["2 Ûu»s~ÂOšéôß áŽ¸#ÂŒñNd‹ì²U¶ÊV!f¿˜ýbö !|øð!D¤6R©bOñžâ=ÅB„÷†÷†÷ ±ÖµÖµÖ%Ä“²'eOÊ„è©é©é©"=œIÁq®pÅ¡—ÒOú™pÅ­ÛÖmßÞÞB~U~U~•÷òòÄñG ¢±¢±¢–…—…—…Á½È½È½nª›ê¦rlé9]NŸxÅ&£Ž©cÄ©ä'@¥§è)ŽëŸ£stP@ŽCNŒ1@3Â0ž2Q¥ªþwûBç—²M¶¨ýj?ãüÆ3ž¡õú¡~\æ—øt4p˜ÃÀLV³ ª^Õ3Ž%£2êàŸ¸óOÚÿÊIûº˜´ï±Éù‚ýȬr7¿½*IEND®B`‚routino-3.2/web/www/routino/icons/limit-156.png 644 233 144 2740 13061246470 14603 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü•IDATHÇÍ–]LTgÇŸ‡!Çfàí‡U²¸)¥¶Äº-†,â.©–Ô1‚©&Z‚¥5–HÒjÖf{ALj«éj"šh“:Öm½P ò¡lÂE©)6dªc ˆ18œ9sÎûÛ‹áåŒûqï{sò|ýÿÿsžó>ï+ ""yóOç3Îgœ9IÛù®íϬɬYq>iŸ0ÁQ稻õ7È=–{ `ñ™Åg¬aÛÖqŸZ/bã§òi¿ä‰íÈèÈèpøæíOaKÉ–’Ìü¤}¸ÜÜfÐx±ñ"@ð«àW¼ãã}}`Û:®óu½ÆKÅ—Oÿƒ_Ò.¥]r„!#=#]ž«~®ú…=É„__€µk"‹"‹”Ìû€òQ¢è5•bëø|¾®×x_óiþ¤o¥·RÞÚúÖV÷édÁð9h]ÖºLó€6Úð@"šˆ˜ÛÌmÄ@õ©>8À¶u\çëz§ñ5ŸæOê‘'{ûùŸasææLà€q¬\+¬rãŒqCýCý ~@iÉæ‡æ^s/˜Åf±Y æÓoúëtÓ ê úZ}Jü+þ|üy Ë2^øsoo€Òü’*¨øK,÷=÷½¨ F­Qk¡55ÇŒ7Œ7˜Uߨ a¯~úé&™d°°°Râ+YÉJPÔïê÷ÿ·ÖVk+³4'ñávÎí î¾ë¾ui=óÂNôCÓÁ¦ƒºÚzYõßß/À©¾?õ½Ò÷ „ýaØoót®è\ѹŽûûû¡=ÖkA¼(^/‚pY¸,\Ÿ/:l¶`È?Ô2Ôbq5˜äc®i_Ó>ÝÚýóÂ~ÜÇ`àjà*p @íë¡õXGA‡§Ã®W‹«:C¡Î$Î&Î&΂·ÕÛêm…M]›º6uÁŽîÝ;ºa8m8m8 |.ŸËç‚ (P)ÀoÁ±c‰ÍËÛ©þ~¾å|‹öã>§HNONÏê×d¦bMÅù@DÄqšL„%C&dZ¦E–ì_²É~wµ»Ú]-2xeðÊà‘hm´6Z+bMXÖ„HCyCyC¹HhOhOhÈ­‘[#·FD¼5ÞoȺÌuyëòD¼?ÌÌIFò‡rœv\­´*-‘=°8{q¶õ LÝ›ºgo{³:Qš(µ[VÕ[Õ[Õ º@] B¡‰Ðl?´ýÐöCpjöÔì©YX5½jzÕ44Ì4Ì4ÌÀÚ£k®= í“í“í“°t`éÀÒè~¶ËÝå¶ù¬¿L¾4ùh=Në;ë;Ç/¢o&Þ½¼’&wåî‚-ꎺ£îˆ8£Î¨3*2>:>:>*²<¶<¶<&Ò˜Õ˜Õ˜%Rè)ôzDbͱæX³HnYnYn™HSASASHþõüþü~‘ȑݑÝ6¥ñO⟈h=N‘¨/êûiPœ½=½=:]òG•¦Ò$®=žtOº']„zê©)Y_²¾d½È¹#玜;"’w3ïfÞM‘Ò`i°4(Ìf³E¼Þ o…HÖ¬YDV‡V­Ù–Q©h|v-š¾¼YÐóÿv%—DÀÞ•Ö=Zóh <¾öøÚãkv‹cs±¹ØÜ/¼_x¿T¥ªT•vÜ1G̘òM½>õ:X°ª¬*˜Ÿ™Ÿ·çùøŸØ•Å_‚{Ü=uÁ¨9jÚs ¬w¬w˜M9v’JÛT›juRT'Sü—ÕeuT@TÔ«êEõbJ¼0ñqâcf©X˜cE·‹€˜;ìÿ×û“ßГß3Ç€|ó#ó#  `Ï!Þc7»Aõ¨Õü“‹\Lyƒó 1„R×Í"³ƒ€Ùl6§L~s³k³K©'&ÿS{V>µ·‹§ö>ötÞ`ÿ â2ÎÑBNåsIEND®B`‚routino-3.2/web/www/routino/icons/limit-193.png 644 233 144 2660 13061246471 14606 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜeIDATHÇÍ–OLTWÆÏ L:FP+LJ¨ 0’Ö˜PŒT0h4ˆ°1jm0¥,jÃB\ˆh£‰I1¥ÚD4µq:‰A­$Ul;¤¢©¥ "•2AAxáÍ›vïݼœ{î9ßwÏ=÷{W@DDܳ_§ÇéqÎÚÎOìù” )Þù!jŸ1À±Å±åÁ!˜wzÞi€ùßÍÿÎü˶-¿µ>>^ÄÎgÍ‹[ì‰ä@rÀ±vÖ> 星’µ¿ìW««5¬CõÕê«W¼W¼|ÿ ÿ0¾v|-ضå·Ö[ñV¾øürô_ø"0çúœëŽAHNJN·×¿½>çóè‚þ¨ØT± àY³åã9JªZ L2‰5FãlË?»ÞŠ·òYù-< ?ÊG ½$½D6ïØ¼Ãu>ð×E8u ËÂÓZã'ôI}ÀØeìbT—êÀlÛò[ë­x+Ÿ•ß³ð£|äõ³m\•)•)À íW0ç™óÀ,Ö.hÐÔ!åW~”EÙ3GÍQÐÇô1} Ô§ªZUÇ*ˆ9¦ÞRo¡ôÇ3+gV¢™÷µ~­?¶á_ѶiÛ4À´ð%žPîט®!×Ðd"ô™}f,o™1 ­ÖV3¥|Ꞻgªq5®Æh°ç©£Ž:PATAàƒ Æù¿2 ÍB¦H懇ž‡à•ë±ëñd¢Åg–Ø™ÛPS_SÛç{ê–vM»fóè:ÖUßU¹¹¹6Îýç÷Ÿß§rOåžÊ…GýúõÛþ^w¯»× ÞÆ³g¡çQO¤'bW\ýÅc²¦¶¦Ö:Ú3·g‰õìçwÿ ÿ à4€Ú æ¸9Ît`a 5 í í íÐVÖVÖV¡¡¡½"{Eö XunÕ¹Uç Ð]è.tC··ÛÛí…EÙ‹²eCå“Ê'•O`‰Z^†î…¿üøËLÏÒÛk~ïkò5YÄzö;EæÞœ{sÅû..(.‘}""Žó¤0È $KH&dBdAß‚¾}"®=®=®="Áš`M°F$cyÆòŒå"Áê`u°Z$)')')G¤m_Û¾¶}"M·šn5ÝÙ>¼}xû°Èâ¦ÅgŸ™QzŽž#Éцrœ—öâpqX$Ææ§ÍO3{athtȾöÆzý]ý]ûHJ¥Òx/y/y/A¤4R)…¼Î¼Î¼NØèÞèÞ膤̤̤Lðåûò}ùv|…ªP áâOX6[6ÿ¯Ò>Nû`yËòc0ŽM¿Ÿ˜/çOÔ3í²Lâ†ä/“¿´Æð{P±¦bÍ’Œ(n8ŽNGçl^;ùÚI€¯Z¿jå û~ì{€©Â©BˆcÓoÆ›ù&_"¿¼÷+}xäÛG¾µÜ„d{²]w=îÊþ{4àF6”•”•ܵݵi+(?BŠ.0×D6ý±x3ßä3ùM=S?Z@zAz¼¼íåmŽæhÂ`;ÔfÕf™záNàHH P;ÔB ÏëóX°@›~3ÞÌ7ùL~SÏÔÖ#¿ìí‡E¶„·„ ê5Ö.‚ {T¶Ê&ÌRÖ³™LG¦A¹ÕNµ”UY•ô Ý¡;ˆ¯»h0^1^!¬sTª#;ÊåR.ÀÏ1ýÅVDDršÀqÝq=ÃEÃE nP¬;#s‘9æ…L0Á¯ A‚ 8‡r@ÿWͪÙE¾bf‡Î p@R´°œ¦ØN}úxöxö€þ7€ñ´ÉדÙódÏ“èѳ£]£]p/é^Ò½$h:Øt°é ´T·T·TCûµökí×`¤c¤c$aÇÔuE]‰ãaÏðûÃï£{²ºÓºÓL«ñ´ïÚ»k/0­Ç*]""ë¿–ægägˆXŠDD,k;2>ïú¼K6ÝØtaÓ±ôÿ§ÿ‡þD¦ò§ò§òE¼óÞyï¼È±†c ÇDÜÝÝEF<#žÄ—%J.\"ÅFñõâëbù áÀ†d!dY˳Ol”îM÷J²l‹êñÔÆ77¾)"M]“º&÷åK—/5|01:1 ª`ñØàrºœ.'i;Òv¤-Þ’±Á±Á±Ap^u^u^…ÁsƒçÏýöSkÍkÍk̓ÌñÌñÌqp׸kÜ5ðDcöÞì½psÃè£_0^zðhOÚž´=†Ï*Ú8iœ´øD"›#›EÄ.""éf'ô£Ú¡"†Õ°Öx‡¼•ÞJo¥HFsFsF³ÈêÂÕ…« EBûBûBûDügýgýgEXÉJVЬ»´îÒºK"ß œ8%rç“Û»oﹺۗâK‘t˸e\„NU­ª-¾ØÇß÷|öà³ ÞЯÆ^8Tö²Ê>‚£G+ŽVÄw¢´ª´ª´ šÚšÚšvÒŸçÏóçAnonon/øí~»ß÷·m9ÔrÊþUò|Éó„¢Výªjnolo4çZß[‰§r¿g?ðy*F£f6ÌlÙŠú‚ýÁþ¸ÀtÝtÝt³‚YÁ¬¸Ý˜1fŒ˜˜˜åVnå½E—êR˜ÿËüsóÏ¡§G&~œøè‹é)O§Ö#æÜǘc,CjH-êƒá6Ü s Bæ{PO=õ¿3ÏX`˜d’I`VgêLæÐ1þðPïPoÂÓ¿˜c “?Rn+·™¬á^2"C‘!`¿º©nbþ4lØ€zÞá„Bns‹[ ÒwôàN,ãuãu¼«.¨ ÀŸbü”ÛËí@èדÿáýW>´·‹‡ö>öpÞ`ÿ Çò"˜ëIEND®B`‚routino-3.2/web/www/routino/icons/limit-36.3.png 644 233 144 3020 13061246474 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÅIDATHÇÍ–ûOTgÆß™¢\¼ Ø `&©Ð,?4ˆ‰ˆÍL­ŒÂ”[iÛP²à&kÍÚD7k"¶&Kœf×°ì,&@“ÖØ¢Åjjºf1T„]Cnt…1ã6Ö ð2ÊtfÎ9ï§?ÌÏÄ¿À÷—“ç{yžï¹=ï+@!ÄòøU€yµyµyi ›kÄS)Ž5ÇbØ£‚©ÖT{åO°¬kYÀо}š×Àz^¯OìÂàOÔÓãb¹0ÉÉ&{w@ã+¯¤dÅðá :˜:øD¶¯Ú¾øò“/?á÷pgìÎÀ}û};XÏëõz¿Î—È/:žÑ}½èkÓMH^œ¼X°nµn}é½Xï%¨ª¬ª¸õ­¤ÔŸ i‚ÑW ëùx½Þ¯óéüºž®›G@¦-Ó&Ô¼UóVjo¬Áû)ìÉÝ“«ëECÂJP ¨MjaäL˜ÀÀz^¯×ûu>_×Óõcó¯rA!ܯÛÓoNƒˆŽ*þ¨5jm$z=zh|R)#]ÒÊwʸ2š¦iš†± ðI-¤X Qåfœo4Ưëúú«ô !į@j05LâÀôèô(0 @ÈbYÌçfd©,•¥À*V±*aSœâÐFm ñ}ìc0ÌE.È"YĉógÅõtý‹±yw…Â3ÂÒö–öM[ëÝzùôåÓàîw÷º{‘&öOì7ô|¥¾R_)¸»»ÃTÃTÃTƒ‘צ´)mÊÀÞ×½v¯Ýà›ôWŒWz2Ò^Ù^ ܉Í#´A!„˜ü <72çoÍß’­.Ë[–G¸!µžzÀšcͱæÀÙíg·ŸÝŽG£­ŽVG+”͕͕Íÿÿÿ1ÐÌí™Û3·!£3£3£sW4®€ìð‹=/öþ÷þëÎëNÙ §9 ¨gbó˜MÇÓ³Ò³ŠJ„°uÛº…Ps¹¹L½ÅG/ô²H®ÿWÃhèù–|K¾Eˆ3-gZδáóø<>+ƒ+ƒ+ƒBlÎØœ±9CˆÌ™72oˆ§K;¬Ö q0é`ÒÁ$!\Û\µ®Z!~õ÷ì¡ì!‘©wÏ»M½B؇íÃB˜Þ]reÉ•¢A`ydyD»Ê_>0~ûÇ¡àÁ Ú\m®6CáPáPáì®Û]·»Öw­ïZß=Ý=Ý=Ý3–3–3ç-ç-ç-Æ“U²JVÁãÐãÐãÔ«;WwV¿›[™[ ÿ»üÚå×@¨"TÚŸ—v/íÖ® µ|Éâ%‹å„ma|V;Ð4ÐEï¬Í_›oØ=vÝÕ[ª·TomiÛÒ¶¥ù¢¦¢¦¢&8šu4ëh–ïËëËë˃uë Ö$Ô¯- † ÿc®c.€ð‘ðPsÒ|i>9 d¯þ}ø".ÈVûÑWË^-#œ>þ}ú÷Ð<Ù<Ù< á á á м³ygóNHÙ”²)e´;Úí¸·æÞš{k 8R)Ž€ßë÷ú½P¾·|où^H¯I/O/‡æÿ¾ýþÛï}ÓƒÏo~~äÃØÌþgö›Ùoê.u—ºË¸cõ’zI½‚@A ´>­OëyM^“×`Î6g›³Nœ8A9¡œPNÀì©ÙþÙ~¤ú·ˆ3â4ô¸ºÃºÃª®gD0òŒ-ŠùŠÜûÔÇjd òwrܲCvÈåF¹1á[Ê–Ù2(¡„’„¸”šÔ@þQvÊNé”Nâ›UyÓÓ©S“×}Lwþ°î¼õIõIÀ¡˜3Ësʼ2üCýQýÑp~ŽÑO?Èù­ü8ÉIN <á ÈÿKŸôáxýÇêŒ:CTþS¹«Üztçë…Ÿuþçw¯|nOÏíyìù<Áþ­¸çÚ5IEND®B`‚routino-3.2/web/www/routino/icons/limit-40.png 644 233 144 2423 13061246467 14517 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÈIDATHÇÍ–mH•gǯsޝà[q¶OE¨ ]¾L+Úü¤–-8ZH’PL$†46eø¡¾lCFdhI-BÐõ"F_,דØXyÒ2+%6ßvÜ9³ó<÷ýÛ‡sžóœn}ôþr¸Þþÿÿ¹ïûºž[@DDÒ¿εεΔíüÌö'ìHØ‘ùCÈ>c‚ccϯÍÚšÚ °ªcU‡zdÛVÜÊ®±ñ£ù,¿¤‰íˆïŠïr”†íØ—·//á½ýÍ$ö$öüe@ÝÕº«Ýº/ð9Lß›¾0W:W ¶mÅ­|«Þ‹Ɨ–ñ‹@lol¯câãâãD`ÝöuÛ3B càÙåÙðÒõÒ¥`þ$‘¤K>¬õG”mÅÃùV½…gá[|H€»Ä]"ÕÕ‰í¡‚G¡qMã‹/ØœàI`ø €YcÖ°z@àÀ¶mÅ­|«Þ³ð->‹?¤GÞ>ÛoË *¡*!"èg0ïšw?U¥ª$h­3t¨Ôzµ>²cè|«sÁ˜4ÆqÐ_è³ú,Ôiuš ~ó–y+ßâ³ø%ZPöw88틯é5#<Ÿò·Ú«öâx²I'ôÒC¶ )¤(¢ˆ¢(9ÅŽr@µ¨ü¼ ãGø,þž°°3?Aý±úcš* h̳öFèOt¡.´ùžÔ?©Rýƒýƒýƒ¶´´´Zi¥˜ðMø&ì;ˆžÐ†6ÐQGâ‹ð‡ô„… —./DÊñÆ_q´Kó¡ó¡ÄKI‘ˆdI–d‰4U4U4UˆøÛümþ6‘ôÚôÚôZ‘¾S}§úN‰Äâq‘‘ƒ#GŠ${“½É^‘îîn‰,}QîË}‰ðEøCzbD\—‡‘ØÇ±VÝŒúHUªJq»ªcŠcŠE:K;K;KE.]¹tåÒ‘­C[‡¶‰ oÞ0¼A$-'-'-GÄír»Ü.[@Ê‹”)/D«««m¿ ɬÌF¬‘Øk±×Ä-âúÐõ!9Nu]]wü&bì6vGÝŽ¯UŽ*Çévºn‘æFs£)2ò`äÁÈ‘ñ¾ñ¾ñ>‘źźÅ:‘ù±ù±ù1‘ɮɮÉ.‘盞oz¾I$ûdöÉì“6ž#ÞñÊñÊæ³ùÃz–½c˜f'K€?˜Mf“Ùdß‘óç ΀§ÒSé©´ýûoÿ&$N:œtÍF³Ñîr{}on1·,Ç–ïÊEcʘŠêÊ÷uªNõL=SÏ °9°9°æ½óÞy/0Ì0à¼Ê«¼039393 êµz­^fè©ßîúe»ò?æªVÕFæÌ0ŰÀ Q;Ð@  Õ¢ZŒê¾CºF×_ÒN;€:®Žãêÿ›cï0ùƒê€:`O~Zh¦H&ÉúÐð#ÝtƒþEêA —§:‹ñ¨|b¡X(¶`UyU›ª6ÑwB ¼²ÃÊJSÁ×y©óK9–Í›š7â!ÐWé«Z¤>[Ÿ NO<=€ï‹=_ì%]Id‡ò¶ò¶ì­Ê«Ú\µ™¾£îl¡ýñ âÄ/@Ù@Î@Î@à6nCF"[³}Ð>Ï=`€Ö/®+®Óv\í¸ 3ä2L'Èšø¡7 o5Ð䜽zÆÃøèŸÖ”¯)_S^™âB*RôûŸøŸÀ í/´@¹À¬Í}e |-| ?íùi¬Ûµn¬ê^Õ ô<=‹ÀK/uèwgº3Åìe<Œ/Šóæ6s›¹-,!e:2cdˆÑåß”£Íy»év“vg«·Uo€ÙßÎþæˆsDˆ½{¦~?õ{83þÌxá‚{ý}þ¾p}sŠ9Åœ¢¾·Ï³µ¤W¤W¤W ë)7òËÈ/ꔥ`­/Š)ŠÑ­¼¹ò&H/K/G€ÖW×€4Oš“ë&×ÀÉÞ“½°ú•Õ¯ðñïòïhs¸ š<‘Œ4cRƤŒIèb|„7ñ&ÞäïcW݉¢…' 5K—Ò¥0üâð‹|6j£`j65@YCYèÐÿµÎZ'ÄõÄõÀá´Ãi*üqàG ¤Pή<]®wåàåÖË­êNþ‘Kæ’¹dR…T!u·²ÄÒ°4¬Ìt¿Ù5§kŽš`ˆ.Ï^•½ &LÔ®½|}ùzˆ«Œ«Ù+{ svælx]ÿº^«¾êÔêT¯‘Ãä0´i;Ÿ74¼`÷<ß<_@½„)ÂaÊçˆ>[Ÿ­Ï&D¼&^¯Ù{Õ¾9kiÖR¥˜åXksksáƒ3Ôb/ku\u\5ÔM®›¬Õns|s<Œ[7n€¡Pü£àgàóÙ;³ÃËÍ¿‘w(ïPÀ«n¶ [ÿ‘ôcÙ©g6½R—¬KÖ%{޳ Ö’îø.W;7éVî­\PàxâñDCR‡¤ \\и¾îüî|8Ùr²PòZZ[ZÃû[;\û¤ö ^S¯PoãmOs¸©ÜTnêïŽF W¯ÔÜFnãŠ#œ«åj™VÎFÇ'ŽOàTµ[¬^! ú)ýTãSZLƒý(C@—ÓÝtwXJ½öžöžv q¬tB:!ª;ù°KØe5ªh&b"&Q ³f’L’)~@ÄA„ýÂÏÂÏ;þ¢^­G$‹d‘ î÷]W]WµÚ•›ä&- |ð`¢sîî4××>¶áo¶lØ¢«7Ðcq@p–&lKØ–°ÞÈy#w.D—Ç0LJ>s….¡Kèâ.ÎÚ9k笄èòuùº|g©ªÝLc¦1S«Ý€5`…N8áDð"}æVæ*s•¹a-V¤U¤U¤Ñåê]nÐt†Þ§¡_Kc#;Í5DµžpQîW‘¾46¨]÷¹°v­%Öv ²A6„÷÷÷ÃZìD':glglgl']«jRÏëyý[û¢¤XÅCžý@¨ˆÒîZÎÎÙ9»V»ÎFgcX»r£Ü(7†•;’0’0’Ìœ?8P™£jñ¬pV8{h “ZHzÑ€És,À„µÛ/ôk´{P:(” n»Ûî¶ðÁ©õ¢õ¢õbøµ#ˆG:CIb[¢ê†ž“qÏŒ66á­v/ü'íf­ÎZµ:¬]çççœ ŽSµœ…³p–»#Ëð£êrä¿´çiw™`l‚ͳˆ[ö[ö[öÓ?'&&Ê·ÔV÷ ýB¿u:©!5¤†„^;‚;ª^ ù-Z»¥‘~Ö?¹-Ün @V’•de`?ŸÆO8ÂŽüõ«Do¢7ÑKˆÐ*´ ­ÜåÐÄܨÎýßÌ ~Ë&Ù$[l~?§<å)À5p \ýߟÏvFuÆ•÷¹­þîŸÒe3zIEND®B`‚routino-3.2/web/www/routino/icons/limit-55.png 644 233 144 2515 13061246467 14527 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–OhTWÆÏ$ÆdD’ª©ˆd4ZG*A¨\HEƒU£ÆQÖ…1&ÚF#I6Ô‚‹ÐEŒƒNT*ÖÿÄLÔN‘@œR]Y3¦iD“v *A&tò.fÞ̳UÚeÞæñsÏ÷}œûîyW@DD>H¾2\®ŒÜΨNÇs6äløèRû8¶8¶üö5äùò|3ÎÎ8k¤±•·ÖÛëEÒüv=+.H:}%ûŠ£$‰ö¥Û–æ|˜Àß…ÀÙá숰»sw'Àõs×Ïñ%DîEŒ–@[yk½UoñÙùåð?ôE ëVÖ-Ç=5{ªÌ_7ÝÂ}‰ƒ Áëñz†3‡3u¨çÀt¦ë JëyaÃV>¹Þª·ø,~KÏÒOøÈ_“¿FÊ+Ë+ß' .@SAS¥7Ñ´ÐÂt0¢F@mWÛy:¤C8p@[yk½UoñYü–ž¥Ÿð#oïí‘Ï "§"0&~Õ¯ú¹È\Ä„úFµ«v´Z¤æ«ù šT£j6²‘ N©6Õj¡r)¨juTEó­Q#L€zªžo,þ¤^J_ì†>ngĉN'ê‰L6YcÖ0Naˆ!þý„ FaÄ×¼æµ}¡¹ÃÜÁxlJé¥ô~’Æü?Cí¡ÚC©âO¸`œ0N¤éÏ­ÆV¸Vu­êZøâ¾¸/gügügü0Ú<Ú<Ú 7ÖßXc=ø.ú.ú.ÂéŠÓ§+`Ì56{l¶Í®×Xc¬±é¥ô~2}[Yݸº1ÙFq,Ç%äÄ­Àè§£kG׊ԅëÂua‘î“Ý'»OŠÜo»ßv¿Md86މì_¶Ùþe"ÝÑîhwT$T* •‰Ä~ŠõÄz$%ÀW²D–XüŽåoë¯äöäöè+)ާ®~0ö{Ò80 ŒÁ´ÓL;e‘²HY‚Ñ`4…`, ÆÀévºn(/,/,/„öí;ÛwÚvö¶¾©oƒú¼>oßbK?ágŠH¦7ÓK‘HÖã¬ÇËòKÇŸŽlG¶ä[™­3[g¶ŠTöUöUö‰¬ô¬ô¬ôˆÔ­ª[U·J¤òXå±Êc"µµµ"EÏŠž=©ªªÉëÊëÊë)õ–zK½"Ú©ÆÔ˜HÆë)2Eä¥HV + ù"™K2—P”!bv™]ŽßEŒÍÆæT«óå/ I(…%Ž„#a‘Æc!²ëᮇ»ŠÌ›3oμ9">:øè ˆ»×Ýëî©öT{ª="º@h‘…/ _¦ùh¯xmz)ý¤ŸÄÇök#\~uùUªáUzêDûD{âP \¸:pÜ~·ßí‡\O®'×Í]Í]Í]ÐßÓßÓß‹‹/.†¼`^0/ `šƒæ mçÔ,5Ëâ×Uiý„Ÿ÷ŸJk0þH}h+/‰—ÄKàùÜçsŸÏíÒ.íJëÅÝqwÜmË×è]c34„F£mƒ÷§òýs,ššc—ÌKŒëÐЧôq}Üö1êA=f¯Ùkö&æ~òOÈûô}(¥‰&³Ålaœøÿšcï˜ü$'³¡îª»f£ÙÈûðãGë}GßtÒiëÈìe/¤ò·yÊS4˜õf=(‹ï?'ÿ¤ýWNÚÛŤ½MÎìßìfÛ¯ûœJIEND®B`‚routino-3.2/web/www/routino/icons/limit-14.6.png 644 233 144 2730 13061246472 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–ïO”WÇÏ 3©  C]YD `"|ÑFÙZ0t«ýÁÖ ©m,êê„X_Ø)i·i»IíJ܆X²™ÈX1• ‹/Ìn¢PôE7Š¥é0V‰Œe:ÀDÌüxîýì‹™‡åð¼yò=çÜïùÞûÜ{äWÀú‚õ«#­-)¿í5ÛkëN'p§––·þ¹¹ù]ù]êç6ãf~úx‘z=Ó/y’rd÷g÷[ê“øKx§òJ[AÿcììÅáß>€ó=ç{8ÓW§¯„êCõÂfÜÌ7Ç›|éüòåSõE k(kÈr²—e/âW‹_]{0‘X o4¾p?ã~†¶€ñ°œåºÆ´™4lÆ“ùæx“Ïä7ë™õzœuÎ:xûÝ·ßµŸL øù|\ôq‘Y/vøŠ¯Xñp< `ì2v=¬‡°`6ãf¾9Þä3ùÍzfý„yòßk 승b‹‚FU],+–úïñ©øfD›ºB—ërP5ªFÕ²i&™\DZï‹ÿ”XüzÌs€ 'øÁõÀõ˜MÖ_ü•a‘ŠoÁþ‹ý—p&L4L4€àu}!¾_`§­‚ *@ßÔ7õÍ4 Á4\J)¥ ƒ:¤Cz§ÞÉ ~øGý£ö°=ÎğГ\©Îp·¹Û@ÿ@U›¼ÃÿîîBßÙx§êNÕyL¸'Ün¸Rx¥ðJaÊ¯Ž«ãêx ßþËí7o¿ Ç†Ž Dÿoç£?Ž.fWë»û«÷W¿'ôED®{øWß7}ß,®ü¾~gßž‹D²ú³z²zàtïéÞÓ½©B±#±#±#PÚRÚRÚ çÎ5œ[*<”Ê åAíåÚ˵—aûí?mÿ þô`Ó×›¾&2ù^¸<\®÷Áù’ó% fz¬bu|âø¤æ%Ù_7^7.Â2ËIy˜‘›‘+ÙÎ?;"xðà‘EkÛݶ»m·HıEl"+;Wv®ì”%vi諒—öЉ8«›œ›D^Îy¥æ•ÉvþÁÖdk²œ©ý°öCë–œ‡9k^ÈÏÉÏQã0353FÝâ±`kþÖü­ùpöÄÙgOÀЩ¡SC§ÀYé¬tVBsksks+¬k_×¾®ýþ@jÅz¯õ^ë½ëÕzµ^wÒ;é„?^-ôúà¿7F¶Œla¢k£kAÙÏ;žWãVÑʧ|–q‘øŽøY&""NsÆÚ£?Ò‰¨5 D¬EÖ"k‘ÈÆèÆèƨÈÁƒ7Eî¹ï¹ï¹EÆÊÆÊÆÊDb‡c‡c‡El+l+l+Dr6älÈÙ ÒRÜRÜR,RðCAwA·È”g*w*Wœ"ä kŒ1cÌ2žÜü×=Ð7×7ÆÄKN8ÒØÓø]ãwÐííöv{—î¡.o—·Ë ®£®£®£)ÕæªÍU›a¶d¶d¶ölÛ³mÏ6°Ûlڦ᯻šU³"?cÖ;3f¨LèI?•Ÿ¹?þmžJÕ®Úa¾fþ­ù·Ð‘—#/F^|øðêPª¯y¼æñ˜s͹æ\ Ú¡ô=Aè ê ¨VÕªZafýÌê™ÕhU½½›:•üê.s—™ ·s$)¬â[°OۧÙà7üÆâÄ_Õ¬šÓúX4yå˜ýêxh4XàÉ®×Ìû¼ú9]¬‹t•®bA¯Nò×ûoùoØgí³áLn>ÑÇÒ:¼)£)c±)ŒR÷ÇýÀÆ}ãþÒÎÏ|ÎçÀ*V± P 'u@ )R3`†ALÄCñð½Ùù›2›2èÓÿÙ½+ŸÙ×Å3û{6_°ÿò ¯Ú IEND®B`‚routino-3.2/web/www/routino/icons/limit-29.6.png 644 233 144 3107 13061246473 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜüIDATHÇÍ–ëOUWÆ_P#·b„à,žp j †¡-±jÅ[b)КbÍ&ÁHLüÐ8µT­—5SqæƒJ0Ö¦ •Áx‰ —j‚¢¨‘‹Ðž9Øûìõ›çìÙLÿ×—ç½<Ï»³÷zÖ‘7|Oÿÿÿ0/ö/µâAùAùqÿðâ“ðÛà·¡«Â…ˆø>â{ã…ͼY?½_Ä⟮gÆå ±çÏûåøð~ø(ù£ä H/þæ:Øœ6§[‡²Ke—.üpá>‡7^ÜÍÍ ›y³Þì7ù¦óËþ?é‹À¬ÆY~½ öwíïÆîò<Š…õï­à·¿ÍPþàBQ9€ 枆ͼ¯Þì7ùL~SÏÔ÷Î#0÷¹ïˆÀÅÛþîmxPU «šzšøŠ¯Ý¥»<[=[™u]]À?°°™7ëÍ~“Ïä7õL}ï<Ö§©Íƒ¢î¢n0:´ý‰f×ì`ü¡êh¾I•á2^¯@чõaPªBU`­—<çùÿR%zµ^¦·jaZ./?  c¦¾ù)YúØ\6—k¦šênénö°ÔÛêmƹÌ®€1aL€'Îiƒì`;€l²Éž!†P#jT¨Mjã\ôñîÓóéÓíGx!"r²™ðòË?6ÙŒÔÎÀ¶Ê¶J8\sxÏá=¨ŽöŽÖŽVK¯½»½»½Ž.?ºüèrxüðñÃÇ­¼±ÛØmì¶pÏû==PÛXÛPÛ€jÛt§åN‹¥§zËSËSWÞyÄÓ*"ÒZ —¿¸üÜ©èÉìÉT%!ÿ±·gruüêù«çÃÒK7.Ýç®»vî$·%·%·AF|F|F<¤&¤&¤&ÀPôPôP´5ÐÈÄÈÄÈd5e5e5ÁÚ'k]û+¬Èø:ãk&Ÿnv%¸T \xó›` {çÏÃàÓÁ§Õy¿7~þålø±áG¨9¸wÃÞ –@vMvMv dJ¦d ÄÄÄYù´•i+ÓV©ÁSƒ§­x}W}W}D¥F¥F¥Âö°í¡ÛCa»ú§êŸÀým¯¶àå·/¿¡ƒ¡ƒê¼ EE÷UÙк¡uÖ¶¿±²%¶%Ï&žM< å‰å‰å‰ðlÕ³UÏVAÊ”…) !ÿHþ‘ü#PPP ueueueÖ`uêÔ‡á0œyzæé™§°àÆüKó/ÁÏíÍÙÍÙ ÃTìT,AaQaQÆ}õž«çúÝ÷;"Ò¾óAåƒJ™›÷׼¼B‘mñÛâ¶Å‰œH;‘v"MÄÝènt7Š8b±ŽX‘܈܈Ü‘9…s çŠ,N_œ¾8]D_¢/Ñ—ˆï Þ¼O$4)4)4I¤Ô^j/µ‹Dþ;².²N¤¯²/¼/\抰‹]",ötz:ýîû«¿¹¯¸¯Ü»-r³ùf³ÈÍã]Å]Å|âí‘öH¦œÎ'Î'"QW£®F]¹[u·ên•ˆÌ–Ù2[äТC‹-)é,é,éY¶bÙŠe+DÒI'‘¼[y·òn‰8ì»Ã.2ÛfÆȲ®gŠS¦¶–nnØÜÀ'"K.–ˆÌ˜5=}ï¶ðoWòÙ—Ÿ} ‘Þ]2¸¶?«? úZúzûzQýëûóûóaR›Ô&5Ð*´ ­8¬a k@¨#Õ#Õ#Õ ÜÊ­Ü`ì4v;aØ1•óÚ¤6w*?Wi* Œ—ÆKã% ƒ…ÁBxîý¹÷ç,ÞR`)°€·óoçß΃r+·rÇz…††Šk¼:•ècŒ,²Íø™d˜fšé¸6¯òU>¨ë꺺—ÿD9”ø’jªŒ3ÆYú¨>ö?l4 Vçç'8|Jªù¡ ž:ê@ ¨;êpƒqÆQ`3ŽF×ûõþxý;ÿªýV®ÚÛŪ½­Îì¿kÚÝ…ÛDÁIEND®B`‚routino-3.2/web/www/routino/icons/marker-63-red.png 644 233 144 4235 13061246466 15441 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜRIDATXí—PT×ÇÏû±ü vG#âRuüY%8Z­L*?\pF$âd°&B€0’têo’ŒiH¨šÔ!‰©Íf»‹1ƒÕ¤ ƒÚ’±3c„ÝQ:£l@,dyïíûöÝûÞîvªÓiï?˹çÞs>ïœï½w òé2øu‘öH{¤ûg`"6¢-¢-¢-ûg¢"*¢ò·ßÑ ZA+¿[­#‘D™ „Új[Ïö³x,~h>~](O0ß^ÚK{y[¨Ö±MlÛl#Ü>n·O‰7zŒ£Úr{Ëí-·­÷¶ÞÛzÈOËOËOÓmægëÙ~ÅgùÏCüÏCíùïóãü8?îZÁ*4§dNÉœ¥üd÷Éî“ÝêScÃcÃcÃ0Gx„G\pÁhvÀÏÖ³ý,‹šoþûç#S?Èòƒ®?³i—Ò.¥]’×HÒ€„†š¬&«É•*¥J©”•ÊJe% ä(9JNð³õl?‹ÇâkÀ!ùMqgãlœH<,·ô± æ:s¹NÎÑÀ*Õ&µ cr‹T!UªKŽ#L)ç”s€#8ÀÇvà.˜ò‘Õ%}#}È-ÞAï  Vª¹j.ÆØbsùmóÛrËÏxîîînü)[`ª1Õ˜jÔÎïN§£8cÊÉ!9©HôÚ§UŠPjµZäÃ<ÐMåˆ4, ë^ç÷NÉ)aÔTcª6U« Æ'îw‹»{3GCqÃK /©¯LÈ6©YjJè:™öÉ4ø¢æ‹{äž`pß}ß}èBà£]íàí9Ðs@_%ÛäƒòAÍœh(n(j(R_Õ*ÂGªÛ¸Ü¸Ü¸u#Ù#Ù#Ùz$±ov4:`^ʼˆ“â$ÀÀæÂÍ…Á •ÏV>ìŸùô̧ƒì±ƒ‡´ø|#Ù#sG指ñ1ÐßäÍ;šwTÿ2e@Ú màfSÍͰéþ¦û žUÏ@GRG,JX”7=7=5=j:ÔYë¬Á,õéõéAÀîñã3e x‚ñ0>>p¤–² Y†,íŒER™¡ÃÐAD3ÇãF"¢ÆF""çç"¢˜y1óˆˆJòJòˆˆÞj~«™ˆ(%>%žˆ¨ÙÑì "zî«ç¾""ú´ýÓv""{¥½’ˆhSƦ "ŠŠãâ8"jV ÕB=¿¡ÕÐjhÕŽü’(Î vvvÓ€—Ÿž&Aø•ßA;pgˆhÜã!"³Ùˆˆg4Î "ZÕ·ªˆ¨øBñ"¢þ—û_&"z!ñ…D""Y’%"¢‚Ä‚D"¢Þ¼Þ<"šŠóÆy‰è¹ÉMÄŸ£´“$Áír»Ü.`|Äçð9|Ž4(qÝï÷ž*8U$¨Ñ®Ñ.à<œ€÷ÃÚkƒ»43b¦˜ 'ÖŸX]õ]õ0Ü7ܬ«ž«½õÊéÏf6[Ï÷—cÆ£öþ’KáR¸iˆ„ÕÂjaõZvÊ’æšúMýÊ|ç/úßìS¿>Ô̵“k'`ó󛟠2WÓ;Mï@”5Ê g??û9D4F4@Ãþ†ýÁê»vùÚe›Ø!û²âË x'îå–f,Íði€0K˜%Ìú`”b³b³b³ˆÄ‹âEñ¢uP»ðó3neÜR´>Ë•UWVÁ {´+Ú`‚%b¿oT¼\éò÷Êß >åü+ü+F£-ÑÀ÷ÁŽ…;êŸ[r½äVÉ-ß„X&” eßæ·£Ù©gcÎ CŠ!Åâ:Å6XªÊw”ïP3µÎý¨ÿ»þï w}Ü`ìúÎë; ðÆK°$ˆ×{õÊÕ+pªèT ÷Ü蹡×÷ã¶\[®¿¾D_Ë×òµ?ds³¹ÙÜ쟜 þª¯B®+\ßÄY9+geZñí²wÚ†lC°kÚÝï{Æ÷L0úšú TµT-ÕÝj¦š¯æëR´Þ«¿W$E™ÊLeòn­’ÕB…Pa1kh9”C9¢IgM§tJ«ÉF6² náð üœö´6™ÊMår¼óu'ç䂵+—Ê~ oñmv'o½]q*N@Ý&}-} /Û¸ýÚöÌí™Ê~íz$‹ÃöC {ö$ì!âͼ™7s§tÅ 3&ð»Mèú…~îü‚Š *ˆ %†C‰ý¦Ýtsº9=X»>‹Ï/ì°Ãà!â¡^Ie±²XY¬kñøšãkޝQ3Y±Õÿ,P=éÖnKIEND®B`‚routino-3.2/web/www/routino/icons/limit-38.4.png 644 233 144 3034 13061246474 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÑIDATHÇÍ–ïOTWÇŸD( Ži&@©.vQ‚&1[ D°ƒ„`[b³Ù¾iMJ5*/¶ÐÍbãºÑŠ$RI‰EP!UQÖB¶‹&¸VŒPdÖ‘Ý¡ügî=Ÿ}1s¹¤ûxÞÜ<¿¾ßçÞçÜï9""x ÅÅEøí Ó¿âíoÿî¿}ZËËžȯ"¿XU¿ª^¿oÚFÜÈ_Z/bâ/å3ü%¦#¤9¤Ù’°+ཤ÷’V¬õÛ5· ´%´eÖ¥­¥­ß5|×Àa²o²`:}:LÛˆùF½·_*~Ã/ËÛ—·[Æ Äb¸Ì¸Ìõò'ük=ìÞµ{Àxðx° íß@8á*˜ac=[bñ@¾QoàøŸÁïïGÀ–fKœ‚œ‚Ðsþ‚ûàÓ˜Oc >o PM5áà›ñÍhEZP·Ô-,XÀ´¸‘oÔx¾Ágðûû1G9'"R›¹£¹£ ?ðÞöýì}ÍûèýÞÇÞÇx*ý‘>ª‚ï±ï‘ï(«²*+æò¾Üýù ¨ˆW%hi¾Þy’'€Óà7FùHD$¡BgBgf–q|ôöèm €lPå`ŽÜä&¨ÕjµZ \â—–4RK-µ€ 6þ%@¨h³Ú,so6³£]£]°È¿ᩈÈé"|pàEO¾ŸùSÛOmPû—ÚšÚÔà“Á±Á1“g¨j¨j¨ jzjzjz`Ä1âq˜qõP=TA¥ªT•jú”=¨|P‰ºs-òZ¤É§¼>;ðø'wºGô‘»Ÿ@Ëñ–ãðÐö|üù¸Ú¿úDd|d<žÜ ¹Ñ¹Ñ000±±±777{÷ޘޘ^hhh2Ñ+õJ½T†ÊP___Mé錄ƒ'ðûuGc|c»Ï¬q¯q¯q‹4´5´5´‰LONONOŠDY£¬QV³±óÕç«ÏW‹4¶6¶6¶ŠìØ9°s@䇼¾ò¾r‘Çø%ù—dq½Þñ}Ä÷bã eÜ2N¢h;ìaVÕ ž4O4îi.j.‚”}É’7˜#É<œy8ó°)ÇÇn»qì†ßt}ÓõM×áLù™ò3å ÐNh'à앳WÎ^ìËÙ—³/CRLRtR4,_<<W›»Ú»ÚÜoºß}mؽ°{ªYÔׯûÖõ­ Ü×ü3OÿëöÔí©xÂ÷‡„@I]I]I nÜ:¸6¿Øübó ˆŠŠ‚Ò‘Ò‘Ò˜ìœìœìÇÇÇpæ8sœ9æ Ô]²þ$ì>»kÛ®mæÓÎ]øò—†®Ýý$ c§{è/³•Ù̿ķeazaœ?:;(-KËÒ²L‚…; wî€ó©ó©ó)¨zU¯êA]TÕEp]u]u]­X+ÖŠAåªwÕ»0ÿúü[óo¡þóó³ágÃÀ]?ZÙçeŸS¿’žßèØr¿Ž©òEËRYÌ©?«SêèEz‘^dÊÁ¢<¬T+ÕJ`#Ù¸D¿Ü¸q.\¸€Yõªz•9TßÐMƒ_:f졼yËò–U~eV]¾ç¾çÀßµ mÂT~Š) ÔMÕ­º:èfù•_AM¨15•À‡áƧ<à`¤”M¾M¾ýÏ[ù•>Õ}FvËnbªDTAÕuÅrVæ«ùj>PDE–ÊL2É$ ˆûåþÿÝǾÒùHÜÃ0Œy\'Am´¡TXÝQw€› ~ÙÇh¡™f`Ø€yRž$AÒ! þìÎ~+çìëbÎ¾Çææ öo„.a}ë§cIEND®B`‚routino-3.2/web/www/routino/icons/limit-121.png 644 233 144 2507 13061246470 14574 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜüIDATHÇÍV]h“g~’4ib£µ3ÛÕ@w3›U Ú†&Úù/´ÝDa›‚õFhavŽY§C)øSÖ-T¬/:¥Íˆ¢ ¶8”‰…Øve’…Ú&ß÷½ï³‹äÍÝ»ó½ ç¼ç<ÏóÃ9yAæ~AZ—X—Xdmëç¦ß¹Þ¹þýî¬}Î -Û-Ûm&KÏ”ž!ɲ‹eÅ3ÓV÷*¾00ñ ù” a:Š{Š{,þœÝJî¬ÜYé|7kŸˆ®k®k3:¹ïú¾ë$Ù{¹÷2¿ 'ïNÞ%Éiÿ´Ÿ4mu¯âU¾Â+ÄGëüi¿i¿i#‹Å€ô½ÁН²Ï+È-·l$É—¶—6i%IÒø¤›né'™bŠê$ luŸ‹Wù Oá+>ÅŸÕÒSã©Èm»¶ír]È&<û‰?sÄ1éò¹|.Y›¨MÔ&È¥SK§–N‘ÃLJ'Ã3á™ð ik¶5ÛšÉP]hmhm^oÚX©øBÉPR {Ôd ,ød%fª«ª«| – trŒc(ÆoH" xÊáz×ô®é],î[Ü·¸{ÃÞ°×äwV;«Õ€ýS{½&ïÎà£ï Þòzþi*ySé!s*“"9›œ%3%™’L ™>>>@N‰)1%Èñèxt){äUy•ä÷lc›Yñ|þ×FÐ*·¥^o«·©J½¶ùßÚÿÊ·öuñÖ¾ÇÞÎìŸç`Õüö±#IEND®B`‚routino-3.2/web/www/routino/icons/waypoint-reverse.png 644 233 144 271 12601513065 16450 0‰PNG  IHDR‰ bKGDÿÿÿ ½§“ pHYs  šœtIMEß  9~ý ÎFIDAT8Ëc`îà?ºµ eÄe€‘Z.Dq)5 d¤–«þÓ4–‡Ib%0Q;L©ÀŒLÔŽ-&j&Jº$Ôa”XqîÇôçIEND®B`‚routino-3.2/web/www/routino/icons/limit-20.9.png 644 233 144 3060 13061246472 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜåIDATHÇÍ–ûO”gÇÏ`¹Lµ¬·_ tgl ¤iÆ£@½P‡–Ò6ÆÖÒ®­ J£Ô¬—˜M€(DÄ„¦»ÆnŠ[jM£n²áf/¤´¸h„i3"ƒ°8:8+Ì;ó|ö‡™w_¶ï/o¾çœçû=ÉóœïóˆˆÈ¡¿@XBXBØo‚8ìm#µ=j»õB7ûÁT`*ø×‡°´qi#@ÜGqnXÏëõ‹×‹ü‹õô¸o9,pX ÿ…üÆ–Œ-QaàŸbˆQ[ôïþ"¬çCõúzOç×õtý`?Ë·,ß"/í~i·¹5¸àÖy¨Š¯Š×õ|œ 4æð¿îyP]ª &0°ž×ëõõ:ŸÎ¯ëéúÁ~Œ­ôŠˆÔçBápá0|½šÓ÷¤ïIÜ×Lš _¨S¥žS©*´QíŽvT¹*Wåß,SLý©€O[¡­À§MûVúV‚z+È…žB0­ëë[ù‘µ§Àì1{<©…áÞá^à(y 6ªxùt€Ú 6¨ @e”-jdÛØä’K®V^åU^àœà€Ú¢¶à¥(Ä¿=¤Òg0ØpOD¤¹›¥¥o–¾©Óž½9P9P 'ÿt²îdjpß`é`©!xûøíã·C“©ÉÔd§Çéqg€7à x |cíµ7ÖÂéu§Ÿ:ýêgÇHãH£¡§~.}ºôi}k›»Åÿ½ˆÈ÷•Ðù^ç{ðÝ»?¥ÿ”®ŠcæÌMæ&æ³ïgf‚uÆ:c«g¯ž½zÒëÓëÓë!¥6¥6¥Ö̯™_3îËîËîËFCC{†ö íë¬uÖ: »3ò3òáÙߥô¤ô0?åñwù»T1´¶‚* ö#þ‘èsÑçTxðþŸýù‹ö/ÚáÃÚš‚šC «?«?«²²² ïpÞá¼ÃFÞæ°9lhuµºZ]F¼ùnóÝæ»°iÕ¦U›Vñõi6¯Í ­¹çóÏç,l^Ø þÄÇ;U›à‹‹Š‹ ÜT%SySyÆØ÷mìµôZ ©&©&©ª2«2«2¡ÅÞbo±CÎXÎXΘ!”})ûRö%8³î̺3댸3É™äL‚ÔêÔêÔjØaÙaÙaˆúðêðjøËß?Mø4û0Ì b£c£7ÃÔ)-GË1Ý4‹H‹Hùñ÷·*oUÊòÜ÷s_Î}Ydï3{“÷&‹ÔõÔõÔõˆÄ—Å—Å—‰L^Ÿ¼>y]ÄíŠvE‹ŒFŒFŒFˆ¬.X]°º@dÎ?çŸó‹x-^‹×"’œŸœŸœ/’ýYv{v»ÈoĽ÷†ˆÕaýÀú,y0ô`H$l>|¦›¢-ÓÏØWé_¥Ccï…Æ ª8¼#ìŰ™_¿y½m½ bbb ³¥³¥³ØØØ!jYÔ²¨epÐuÐuÐÓ»¦wMïÛˆmÄ6ÎVg«³ì‰öD{"įŒ‰÷{+J+J™Ín1oòê'¯§BgŒºÐT²¯b_ü§-8%ÿÞ9ž1ž®º.j¼y¼a¼{xìá1 œrÊÁ}È}È}T‘*RE 2U¦Ê·ÝmwÛ+\á ,Øv.섉ñ‰¹‰9”úQ‹Õb¾ ”U—UCÐO›»Ckøè¾òŸJP ƒ_AðÕ§MhÀwºó¿²ä•%€ï×ÎÿèÞ•ìëâ‘}=š/ØÿûÝ!m¥:_IEND®B`‚routino-3.2/web/www/routino/icons/limit-27.2.png 644 233 144 2761 13061246473 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܦIDATHÇÍ–]LTç†Så§ õ'hl$Óˆ:ɉI£i/:“i„ØÔÒ4hA)=mÓ›š”ăÑzr(*Bl"qRÕÁ`[!&Åt ˆ­­£1¦¥Î˜ø× ££{öÞó=çbØnls.Îëfç]?ﻲ¿¬õ}""2wú+àÈuä:žIbÇ{¶?ýÕôW ¾Iâ¯LHY—²îRÌiÓ 0Ï?ÏŸµ±·ògÖ‹Øü3õ,¿ÌÛ‘Ö•Ö•âÆð–û-wú‚$n @ƱŒc÷ ¨é­éèùºçkþ 7†n üéýÓ 6¶âV¾UoñÍä—Æ¿è‹ÀìïgŸò¤¥¦¥Š@^Q^QþÉ„ñ|x­äµ€ëO]J9À¼8q*/%Še·g`+>oÕ[|¿¥gé'ûÈöd{Dàõ·_;ã`²`´¶älɱôôcÀNvâ#jDÌr³ T@H!llÅ­|«Þâ³ø-=K?Ù}”1‘/}P:V:‰‹ú qQŸ¯Ïõ‚Qb” «09ä  Ãˆ10+Ìr³L‡é0 Žª.ÕÅ_M%®é÷ô{èÆozŽž‰;I~(½^z˜²ô­£üADdi dD3¢ÑY*>6864P êeõ21¶ó_€Š«¸ŠÏŒ#ö¿±Ò”¦4 ‘ìPå!Æö$¿Ò§õ¦õHö#Üùê4sj7Ôn°èÿI;_¾vÏÙµ; 5V=V5V¡‚PA¨Z¶¶lmÙ þ …¿:®t\é¸×];tíÐßþ#³G#ØÓ¼§iOjä‡àÒàR[O®Í®Í´d?bþ*"òk=ÿðø‡ðóû/N¼¨6:ïe´e´¡yk¼åÞrXÞ¼¼yy3ì­ß[¿·|.ŸËçO¿§ßÓrPÊAèïíïí﵎G‡£àŒ;ãÎ8ø |Ïúž…¼µ®ˆ+‚vþÄï;~ß¡6Boeo%$æ'ûójæÌª bÁXº}{ôÛ£ÐðŸÏ×}¾ÎXVµ¬jY´onßܾÙöïKÛ—¶/ ª›ª›ª›þþ§º;»;»;¡¡­¡­¡m&_áó…σÿ™ÎE‹´¸3óésOŸS]‚>/}^zⲪ¹U|«Øû¡Õƒùƒùà.p¸  rIå’Ê%6ñíU·WÝ^+¼+¼+¼0zjôÔè);n6›‡m<´zhõÐjp¯t¯t¯„JãÝð»aPeÖš¹³ëÎ.`ãÜæ~”¸Py*/å²Cýûþ‰û'‚?‰ Ÿ>-2Xqá¹ ÏQmŠ>®K¼geOaO¡ˆk±k±k±HÀC$x&x&xFdmêÚÔµ©vÑ#‘#‘#"eûËö—íé»ÚwµïªˆäIžä‰t×v¿ÓýŽˆ«gÑ®E»$þ]îüøÕ"Á‰à„ˆˆ~ý8ø“Ð4=•Ô}R÷ <èJNÉÍ5á—Â/A(šM Âuá á  ÔNj'ajýÔú©õð ð ð `Yb 1€»þ»þ»~ˆ-Œ-Œ-„›7ûnöA¨;t6tnŸlžl†‡“zP§×é@ÙôT&š½ÇÀÚ+öX¾ÊlS=n 4ÐÀÿañÛz–¾µÇ»Õ¿ô±¥´¦´TGr3«³¦Ót‚:lDŒ:ßp‰K(òÉ%ØÊg|6Cw‚qÆA™ê¡z¼Év¶£ÔqC7tt5lfš™6?m¥;JwÀ#}ûbïÊ'öuñľǞÌìÚjÞVJIEND®B`‚routino-3.2/web/www/routino/icons/limit-23.8.png 644 233 144 3114 13061246473 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–ïOTWÆ¿ T†Õ–eL44Á]CL¨4 4 †¦fH£`l´š]ÍyQukÖÝÒh !¶V¡‹•JÜŒ8vKmhMvª¯UÛRf—Ö fg`¸3s>ûbæzÙþž77ß_Ïóäž{ž{DDäÅðSÀô²éeÓòPlª0ò1Ûb¶¥\ ű3bçÝ?ŠW|ðÒ'/}üÖˆõºÞ¿t^ÄÀ_ʧçåE1ÑíÑíáø¼™ñfFŒ5×uƒ¹ÃÜáñÃû;Àµ–k-ü&¿™üÀ]à.#Öëz¿>¯ã-Å—S¿à>áóˆqˆ^½L’^Kz-ùp¨a,^ßñú€Ÿ#ŽT&<âˆSÀsèkjI¬×Ãýú¼Ž§ãë|:H@B~B¾¼±ë]æ‹¡o[¡&±&QçÓ:€Zj‰ÿœ P(Ǫ[uA±^×ûõyOÇ×ùtþc+½""õ…`µBp@søÿ£%iIü¯?ÚVª‚³AWÐþû~'‡ƒÃÁaŒåa–Ùg‘ >Ô4MCóÿ¤%j‰ „ðÁöÀö˜Óùõ­üZDdíY0Ï™çæ¢Ôâ¨cÔœ T®ÊÅK¹ê˜:¦Ž3Ì0³DH 4,XŒ´zªžª§ÀŸyŸ÷T¾ÊÇK}ßæ óÓÒ#LŠˆ\èaEå¾Ê}:\pÿ¢…†?5¼Ûð.jä«‘/G¾4ïyîyîy ¾¹¾¹¾œÎ§QÎgƒÆc¨ièüÐy¨®¨@ÝËþtøSƒO V&U&ž ˆˆ …Gn¾ß;s¹jÜSó9ó9|[*¶”m)ƒ´¼´¼´<¸j¿j¿j‡ÄªÄªÄ*°=²=²=‚ÕjµZ­À‘ìHv$‚n–ß,¿Y y y y°gûžW÷¼ ‰·V½µê-|ýIN·Ó­öÃu7ÖA`"¤'J~eùØòqÖ&‘œÂ‘[nß*ޏø‡ ÕMÕM"ùë{ïuˆl¬ØX±±B¤?µ?µ?U¤ÎUçªs‰˜úMý¦~‘ñÉñÉñIß oÐ7(ÏV`o`o`¯ˆ9ÜaÎÙÞ¿½o{ŸÈèío’èùü©S'".Šl(Ø Q`é²tem2E®YvdÙÒ©ôžðž±í,ÙV²M¦‹:ŠFŠFD2×d®É\#’‘–‘–‘&r¦ñLã™F‘’¨’¨’(‘¶š¶š¶‘©Þ©Þ©^‘åµËk—×ÂÜíîvw»ˆU¬b‘K[/^*q?q[ÝV‘_ÿ3>->M¦ELûLûD¤-r!rt ÖÅíˆÛ¡ÚáÉ;OÞ¡ƒ÷«ïWƒùZLML Ôzk=µckZ®·\o¹Y­Y­Y­F>Û”mÊ6AãXãX㘑/L-L-L…ÃÎÃÎÃK¾Áß<^k_k‡K?^y|å1€ï#ßG°ÆÞ½¯ÚMê´§ÓÓ9Ô+r§çNÈswwÝÝÅÛÑÆ´1Y´·Ù[ì-"ñ¹ñ¹ñ¹"’")’"’¤’T’‰ÕbµXMd}×ú®õ]"Å»‹wïÙ|vóÙÍgENfŸÌ>™-âXt,:Eâ›ã?ˆÿ@d“ÊÍ•Ų¢2k™•·EìÝön‘È…ùôùô¡^¡.|*9X}°æ­¡Sâ*šxeâxèx8þp5±¢|¢|§}§}§!Ðè ô«ÔUê*… %h Z@-¨µÓ)Ó)Ó)@'t‚ïï︹¾s}‡RiÚ¸6nœJ~ªJ¯J× ÷BOØ` ÝWÂ>3¯V©UxŸe¢ˆ" Ôqu\_âW[ÕVµXÉJV.ÉoP™*T‡º­n¨uj^Æÿíè£?˜gÌ3sQôë>öõúBjll@µ†œYõâq þæŸõϢѠƒ(š9ÏyPWŸ©Ï€Ë\æ20/¨Õ˜æCú¨ |øMýÃïò»€ÝùK#K#Å_:ÿóû¯|noÏí}ìù¼Áþ›SÖ‘ƒ›¶IEND®B`‚routino-3.2/web/www/routino/icons/limit-28.7.png 644 233 144 3011 13061246473 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܾIDATHÇÍ–ýOTgÇÏ€ÆN $(IÅ—‚I-ŠKB‰ Ñtä­ŽikC»v—bbi Ó†©Ñ5$¸@¶.MÇ·lÖÒ°-4íŠ+ )Ý–¡lˆXiåÅH±’QÀ™¹÷ùì3·w\÷ðùåÎ÷œçœï7÷Ì󽀈ˆ<| „- [Àa2ãQyQyI àF ,Û,Û~pBÌû1ïĺb]ú‰¼±?´^ÄìÊgÄå)1‘M‘M{‚‚”‚”¨E\Ó Öfkó}?··œ;yî${a²{²àWû¯v0±‘7öõF¿ÐþrèøEà‰ÏŸøÜ2 ‘‘"°þŸü£þQP*BEðÈRÿRój¥…yã½ñø´>—Ïþ;þêÂ+ÎWœ†ÀÚls”DDV5€Õcõx(ïp×pp¨t•Î,çi£ ôy}^ŸZi¥5DA-µÔqÄŸc޹‡¤&ªDfƒÀA¾ @تaRD¤ñ21o¾Yhë©ÿ‰t—»Ë¡ÞYÿný»¨þKýýf{·Ãíp; ¦·¦·¦ÒÒÒ}c7ÖÞX{c-í9Úy´\tUº*Qg®øîÄwðãª;ÞùPO…Ò7JßÝÐ#Z¯ˆHo9œûüÛðï·®g\ÏPE¶{Ö¬ðÀžbO²'AÊŠ”)+àȺ#뎬ƒeK–-Y¶vÄíˆÛ W®$\ž»=w{îšÂ.Ž]»836fl„Í¿lþyóÏ áÁ—;¾}îÛçT|æúÌþ¹€Ñ®=ùÑ“©&˜í›íƒœúô“O?ç_*·Un3 6doÈÞ P¤zR=©8e9e9eôºôºô:è<Ðy ó€Yç[é[é[iâc_k?Ö»ÿ\ôbÑ‹!.?9~è‰®Ž®VM‚/6*6JTÅSŽ)‡yì»×w%v%Brcrcr#ìíßÛ¿·N'N:iuiuiuU˜U˜UIåIåIå0;;ûèH§¦¦`ÍÀš50tqðãÁM>õû©ç§ž¼±‘±‘ú è5¶­¶­ª fÞ™yúö – –õ\TETTµV5W5›y%y%y%PZPZPZ`Æ“;’;’;àøê㫯†é›Ó7§ošùú¶ú¶ú6°—Ù÷Ù÷™q=+øcròéɧ-úBôÕ¦ªï·ÝoëûFäëË__éúÃ÷Ï|ÿ »5ñøFÄÛbkYв@dñÕÅW_ÙtpÓÁMEÜgÝgÝgEbrbrbrD2ã3ã3ãE¶ÞrxËa‘¬„¬„¬nq‹["ÝñÝñÝñ"ù¿Ë6ÿY1–— vKì%÷%·ˆ„{²=Ù}ß5ÁSÉž²=e0×8•··LdNdÂx×øèø(j⥉܉\ðîòîòîoµ·Ú[ ·ko×Þ®åR.åÕ¢ZT L;¦ÓÀ‰'Ìd̤ͤÁüÒùõóëQ ïÔw>ô’Ê’JÃÏ/‹á¦¾ôZ¤ýæ;¨"U¤Š@5«f2bµP-T d’IùsÍ3ÃLvj×´kù˜6¬X'­“¡>öÐW½6›ŠíÅÛ‹A :sfÓl þîŸñÏàã½ô¢ØÏ>öú§úJ}´ÓN;pŸ{Üõ“Q#€ÐMœ¶_Û÷4»fÿíÌvá5üÕðÿçüï·ò±½]<¶÷±Çóû_:94™f@IEND®B`‚routino-3.2/web/www/routino/icons/limit-28.8.png 644 233 144 3067 13061246473 14675 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜìIDATHÇÍ–íO”WÆof*08«åe>¦Ž©$Z‘| ‰fwÚQÔ¶††4Ö¦@ hÖ1ɦM6¡‘€1¦­/5BkcVMœ©`ºÅ´Jh¥å%ÔÉR-à‚0!£À0/ç·f¶çËäºïû\וœ9×sDDäÅø¯€á%ÃK†1løP¯'»’]k.Æðé$ìIØóë'°ò󕟤6¥6E‡t¬õµù¥ûEtþ¥zZ]^½t%éJ‚#Žk¡$·$7Ùà ]`ò˜¯í×ø4~MOÓùÈ(Ì(·ß}û]Óù؆¡o¡ÆZcÕôB Ž:Ì„‘÷"ïÕ¥ºH t¬õµym¿Æ§ñkzš~Ì~”s""N()h?@èVø?![ÈÑ@8)œD(îTE}ѡ脆GA%ªD•ˆ¾Ì0ó ©èX(  ?YCVˆFbüPü°ø!Ðôµ£üADdÝI0LÀ jqäÖÈ- €"P[Ôæhå× º]ˆ.-´Ð²ÄH#4)¤¢—U@Tø'Ÿñ€*T…ÌÑç·ÄõâútÇü""§»YYYVY¦ÑEó~Iê;ÒwN|râã£úìïìïÔûŠúŠúŠ ÁÛàmðÂÀ¦M›ô~´+ÚíÒñݳwOÝ= ÷¼ ^ÔÀ–{ßÜûF×S}•¶Jð4æG"^ïh=Ôzzú¶ú¶ªróÓ¦/:rkk wuîêÜÕP_P_P_«²Ve­Ê‚½{3öf€õ¦õ¦õ&ô\ï¹Þs]7ÔQÛQÛQ Û2¶elƒ}Û÷½¶ï5°vf~ùÁŸm>¿Ï¯Ê¡uC눌Çüä/Ë¿ZþU~ˆ³ÌY&òð¯CŸ}špþðéêÎêNIºñË ß Ÿˆ9ÛœmÎñöx{¼="iÃiÃiÃ"®׌kF$³7³7³WdþÎüù;òlEŠ"E‘"ÓeÓeÓe‘í¶Wo¯ɼ5•5%Ió…>>šp^Ä‘çÈIp,ŸX>‘_`0®N<”xˆ*çŽÎ)Þ³ÛµÛ%Ó;<;úwô‹äœÉ9“sFdãñÇ7Ù•½+{W¶ˆñœñœñœÈ…Ò ¥JEüþ ÿ„Hº=Ýžn×ùïûïûï‹XÄ"iþ[³³Ù)âŸõ[ü‘ô›ikÓÖÊ´ˆ¡ÌP&"— Ær$Ú`ÞiÞ©®ÀìG³ÁÝýƒÕƒÕ`ºš\“\u-už:~4®*W•« Ü%îw‰^_ß¹¾s}'œ=xöàÙƒzÝisÚœ6pûÜ>·O¯¿2µ®e] 4ÿ~qêâ@ðËà—±¤ ¦ ª+N×þc[;¶Â©È¥ÞK½ª|ÙUÃ[†·nþasÛæ6° [†-ÃP÷¨îQÝ#°+»²+Xá\á\á„ŠŠŠëëë»ØÅ.Ðíîvw»!00RÏ¥žL= ¥ÿ}¿þýz‚‹¯¨r¸Tr©0Çü ñ[ÉþêýÕ0o‰Ý’Éãöq;ŒÝEïcü X,],],…Åc‹ÇÁdãdãd#¨&Õ¤š@µ©6ÕÓyÓyÓyÀµXÌÀä£ÉáÉa”Z ê·’U9U9Zàžîެžc åJ_°ÿo)è!ÍÕ„vIEND®B`‚routino-3.2/web/www/routino/icons/marker-74-red.png 644 233 144 4124 13061246466 15440 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü IDATXíWmLTg>÷cŠ(:BºeXƒ¬Ö:Ô® Í òeºƒ‰ÖªT0…º5Ý4‹€hšÉF)Ô¯$ÕÐפà0ƒÖÕê– »ÕšÆàf±î¦óÃ.ÌÙ„0€Ì÷Þ÷Ù3ï½3V³Ù=˜óž¯çžó¼ï D!YJQ"n‰sÆ9ãœÂTø ᥮—º^ê*ΑUY•Õ¾K”EY”„ÌìÉ$“Ìu Zg§¸?çùxþèzâ–h<‘øª©šªEG´=ù¹Kî’»ãBP#Ôè@ÌI¾$_’·w>Þùxçc`Ï“=Oö<vçîÎÝkèÜÎýy<ÏÇóózÏÇCâ/¢õôOÅgâ3ñ™'‹w(µ2µ2µR=Üz¯õ^ë=¶Ð?æó AB“˜Ä$<ðº¶sÏóñüÑõÒ?}>>²,‡Ä!qÈóGž ÷nîÝܻʦ¹¹9 ,,“e²L(j½Z¯ÖêuƒºPmªMµEèa;÷çñ<ϯŽªoY¬C‚CpÉr£ÜØþž*L„óøÕ3Úˆ6ÀÅèO”0°yNýZ›ÖРêuZ6¬îQ÷¨{–Kƒ¥ep<:>¹J®’«z¹ábÅõ‚Ê>'(ŽéÔéT¸ž=@°c]Ç:p”:J 3¡3:ð4x"jéZz„ì^Ù½ÜkÝkÅõ9‹+.V°ôÎFá#æMZŸ´>i=NYǬz ‚´‰‚‰~³ËìB÷„9a.,Œ<¿æºæš¯Ñöãöã~þŽ¡Ž!iú |Ìe¼x¼x¼àx8>ôô޳;Îî8k|™: %j‰¼X…U0õõÔ×àÛäÛ  ¬µ¬òfòfæøðÑÃGðòÔËS‘ä8ï8ÀòRf_}Õ¨Ïñp|bøJ½b*2™Šô;Gñ^#¢ŸÐôQ|M| ‘¹×ÜKDÔ]Û]KDÔãëñ]~ãò‘/ˆÿ®ÿ.Ñ®Æ]DD¶ [Qü£øGDDÓEÓED´ ìþ9¹ÈeÔ7uš:Mú•çï++ÏiÎiÎiFÿŒ0C3àºÐ†_±6Àϰ‘²Þ·Þ€Úëµ×çëdÙ»eï@ÉXÉ ƒ‘ :;è Þ:W;Wk\ÃÜÄÜÄÜDôs|$ÚD›h› œº\}¹úruÌ.š]y¾¼ýåmˆ¯¯€þšþšH€®LW&È}rdfÀ›gÞ<@á£Oÿ1ýG@½z£æ†øË¹±GÔ7௫`¬s#$m”6J5ñ[–¶"mEÚ 5ݽ׽׽WOàgùüç[UoU`¹çsÏÏ×ÉÁôÁtxgù;ËÀ¶Ô¶òßÎ@À4ašP²2{e6Ü.¹]‚` ½þØš‘5#š¾¤d)YJþl‚ŠŠŠˆä;òùŽ}Hðw””©µ¼¼V7U=U œ É É§¿;ý]$@µM ½“3˜æeÞ³rprÀD(¿öYG[G›1êÊ¿îÿjÿWZ@xP:(üGiH÷R´¤^0YMV“Õó{PWôÛ£ßýT/ݺt ðl÷lŒÝ¾gßva(^Å ¨]Ñ®@ðpð0 V´}Øö! ww"Ðñì‹_<@‰¾B›Ä&±i¦XX&,–­m(ýM¿_û…ýÂþ‚Á.Ø;çŠögócçÇpêÜ­Uo©·"¹À˜íÄòÙûì}£¿Cö¡–¡ mAÚ¢´EJ•ÞÉÒ éD]¡ÍF6²ÉkåQž|‚ä ‘ä•Ü’ûð }µ¶XD‹¨˜Ýõ¯é_É]–Ãr¢†Vh8ÑŠV€•²+ì ‚Žã8Pö`ßëû^Wkõ 4)»e·ódÊ¡”C)‡ˆÄB±P,®†ÑUp˜‹ÂK¥~©_ênfÉ8’q„ÈTiª4U:OêÜÍ+Ì+Ì‹ä®V§Õ!'œpxЧxÁÜÕêjuµÑßæìæìæl–¯ïr³Él2Í„tËŠ¡;fô$ĨßDë–!Ü­«¯«à®Y1+f6¬ kÃÆ³ã‚ .ÀïŠwÅ»ØN“ b‚˜°ï·1T¼ƒ/Žž 5Çpwç<ÜíqöÜUz”¥Ç`îtÊtÊt °Î·Î·Î§®Ò¹Ø)uJç7sª…© p ½@ žÀà®WòFp÷œåœåœbvÛÝv·@AáãHënÖݬ»i<;r‹Ü"·¸Âÿ’Äß©>§…/+<`_˜»øOÜݺ}ëö­Û î:7;7;7ãóé“Ê…r¡¼àXtñiL]þKyw·HMR“ÔäÙÀ—7”7”7°ßeÎfÎfÎ*×G핼’·.•Ú©Ú)üìHî˜zqô?J,wOFë[ÿ)ÚFÛh›¶F\..— $П¿I ¤ÒDR¯Ô+õ  –ÆLîÿ&fýWQ‘ü0ÚüQ…ÈD&2@躅îý4tþ3gÌdbò¾pÔÿ¯5’yÆ>ã“IEND®B`‚routino-3.2/web/www/routino/icons/limit-6.3.png 644 233 144 2537 13061246471 14603 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]H”YÇ͇FÓ˜-ÑDÈ%Ö‹ÀŠò¢"-ó£Â,Ì¢Ú Ã‹¥`Û.*ê"!H4¶¥ÅˆJéƒZ³b )v¶›´¥lÂÔY£ª)˯Iç=ïùíÅÌ;óÖ¶÷ž›—ç9ÏóÿÿÏyÎyÞ# ""Éá¯@lFlFlRÈŽ­ŠúŠв.„ìÓ b6Çl~tfŸš} ¥9¥ÙôFmkÞŠ·ç‹Dñí|–_’%êp\q\‰ÉÛG¡bQÅ¢„oBvÃp^s^7 úzõu€¶–¶~€WžW€áüá|ˆÚÖ¼oå[xv|9ú¿̼9ófÌ?àˆwÄ‹@æºÌu ö„ú@é†Ò Ïg<Ÿ¡c@½\¸t>0Ê(ÖðÛlk>oå[x¾Ågñ‡ô¸óÜy"P¶½l»ó|(ÁÛ ûçïŸoñ¯Ç8† ŒQc@íT;™}Gß †ˆÚÖ¼oå[x¾Ågñ‡ôÈçµm,€rG¹þ è݆Çð4º€@›¦9iN#Œ„rBà ˜#æ>åP´ù·±ÄXBÔ¦Âøº<¾<ÞØX`+¥ˆÈw¿€ó•óÕhŸúÆûÆ#øëùVÕ©:&ô;æ1Ï&¤vÚjª©¶ùrƒ@]tÙü?ÓI'àVûÔ>&"ø¾±¾1ˆð‡õ„…¾ µGjDÖ›£[ƒMÁ¦¬Ø4P

/(ñ 8ÁqŽƒþC?ÓÏМSZi‚ zU/`Xøa¾ÿvþiû¯œ¶¯‹iû›ž/ØåÉžŽ¡UIEND®B`‚routino-3.2/web/www/routino/icons/limit-6.2.png 644 233 144 2564 13061246471 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü)IDATHÇÍ–]HTiÇuÍq-É-ÐBÈŠõB°B7¶Z´¦Ì‚]Cûb胶ò¢ Zò¢ »°Å…H²EHhÈ"ÛZÊ´Å‚Z¬hX„jÂØbȵ@³Q«ÉIgÎ9ïo/fÎÌØÒ^ûÞž÷}žÿïÎËûœW@DDfDž‰sç&f„ãÄݱyK™¥,ï·pܬC†„ jazÓô&€Ì–Ìãq,6×Íüøz‘˜~<Ïœ—›H¹”r)¡4×Á¦‚M–/Ãñ±ÛÚžÚ>¦Áž«{®\9{å,û`È=ä--…Xl®›ùf½©¯/uŸðE ùZòµ„g2-ešä®Î]=o8áé<ønýwë’’T"èo6U øñc_\l®GòÍzSÏÔ7y&?ìG «$«D*¶TlI=.xÜ 5sj昼P;PO=6Ðüš@wè&@ÝV·H b±¹næ›õ¦ž©oòL~ØLÞÛ;T¥T¥ïBwAGÔ.Í­¹ i÷µÚG”aƱñž÷ášð0þ1žO@{¦[t Ê×¶j[ þJŒGôU„åK¼¡¯~…Ô¡Ô!ÿŒ{ǼcQýuÌ×èG¨af3;ÎHt;ÙÉÎØ´ò+¿òuÔQ—„vÚAõÍúfQý€×ïõC”ñ1Ö|ªW޾o¡j Œñú¾ï[Û·®7\o¸6>Øø`cÜzh<4ÆâÞäÞäÞdh<Þx¼ñ8ôþÙÛÙÛÓS¡s¡s€æÅøa?c÷Â…wÞz vE&F GŽ.„eÝ˺—uCyyy?,Y>²|ú×ô¯é_3Ô³¯g_Ï>°mA[ìyö<{äVæVæV‚çO¡§0š>a¸M^˜oúIÉèÎè^ôµHɪ’U"ê'‘„Ó‘N¹¹ûæþ›ûEžV?­~Z-’U˜U˜U(²"sEæŠL‘™ógΟ9_¢càüÀùó"œœœ"]}]}]}"iéiéié"žo=ež²hz ¿˜¼0?ê2Ó3Ó¿Á7èÝ=ö´®l]Ùºò|#ßçsçsçsÈqç¸sÜàÊve»²ùÏp/u/u/…‚Å‹ Ãm‡¶CåPåà'€M^˜oúÈèÎèV—`hÉÐЇ'::Žuƒ¢íEÛ‹¶Çæ999ÀiwÚv!#d@­ÇÖcë!ë!ë!8j?j?j‡Õª?TƒÒ‚Z+V ×T óM?‰"þR©§Gä–ë–K$é´ˆ?È„qÊ8%ÁŠƒ55" , , ,"V‹Õbµˆ   ‹¬+^W¼®X¤üeùËò—"7<7<7<"’+¹’+Ò¶·moÛ^‘œÎœÎœN‘αN_§ODD q?‹ð£~>w*ñj÷´{±S¤ôQ}|ù¾|_>-F‹ÑªY5«f©©©…À¬À¬À,xízízí‚Á¶Á¶Á6xqêEÓ‹&ÿyüÌøõF=pîOe\ z?z?Æõ±mz—ÞE@¥©bUׯ²U¶ÊJ(¡$nï'˜ ¾ñòill3¶Åõ1¼ºWÿl›Ôù-U@tfôGú#àw#ÍH#¤î(Ÿò¡hã"÷¼å-¨  ª PE%• þP—ÕeP©wêJ]ÒÓõtB4ê•z¥i2t­*©*ÉüR“:ÿ”ýWNÙÛÅ”½MÍì¿aý"ì{:}IEND®B`‚routino-3.2/web/www/routino/icons/marker-29-grey.png 644 233 144 6277 13061246466 15647 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü tIDATXÃ…—{PTÇ—Ç¿}ïft€Q\JÃ,¾tCDĤ¢‰F0FTID—ü¶Œf-ɪ ÄH¨øƒH†G’ ™øÆdq‚ùAbø)ÁB&²ÁA# Îp§{ÿ`·¬JåüÓÕ}»Ïùô9çž{.ÉÈÈÈÈÈ€¦ddjࢄn¡[èfºŒo3¾Íø–yeõgõgõ¯Q3wæÎÜs·‹Þ¢·è½ä=K…¥ÂRÁ>E)JQJÒˆ@¸‡{¸à=¼‡÷Ø§Ò Ò Ò $]x$<5—’a2L†÷•dÎÉœ“9çj{vrvrv21ˆ¾¢¯èK^â ?۹ܸiÀåXŽåÜ)šE³hýÙ:n·Ž{.̪̪ͪ<Õc5X VCÍ?͋̋̋–ü§K¾K¾K>ª–Ä.‰]KÒÃ%á’p °T¹T¹T 8æŽçŽýŽó}Óúíöö<>ÁîÁ™‚)˜‚&’mdÙæ›Ïûò¾¼oÝ—ãß7þÝ ÊY5³jfÕØöÄÞ‹½{› i i i#ë¤éÒti:Ìøá#Èa†fïâ]¼ `.æb.Ì‹ÅëÚÚÚØdm`m`m ÝóøåÇ/?~9á˜ÜWî+÷]!³m³m³m[ÏRX KéN$ à^$žxzà)€4 Ág¦P!T g­Ö ëÄ kU+U+U+Åå›Þßôþ¦÷…Sn&7“› *ÌÆl̆Èü™?ó‡€Nt¢À ÌÀ cÀ ]¤‹tAÄ 1aD1¢Qà~ùÉò“å'ÅÄûõ÷ëï× NÎNÎNÎÿ{EÜ n7¼´/á%¼ôð çÜäÜäÜH¼$^¯#ÿ0_1_1_ya­*^¯Š×¥$§$§$ nJ7¥›³m?Ø~°ýÐxOã!À>ðÈiršœHé!=yL“Ç.ã2.ôuú:}‚-Å–bK\G]G]G1Û¡_§ŠSʼnëö<>’¥ËÒeé^]jm²6Y›®4)L “ÂÄüR{S{S{I“›ÖMë¦GWÒ•t%ÜOÜOÜOtmïÚÞµ ­´•¶؈Ø ‘ `¼c¼c¼4sÍ\3<ˆ{÷ nôúý 7›ÆM§U¿­úmÕoˆuð8ø8ÑOôý"RÝÝÝñihLhLh )‚FáÄ]ã®q×€ÖÕ­«[Wyyy@õ‡ÕV|eûÊö• Ðvi»´]Ï<ÖšÓšÓšK8–p,Ðuè:t€¦]Ó®it…ºB]!ÀçŽsǧ9………‘"ƒ{G÷Žî¥ŸžZqjÅ©Ì!ã´ŠVѪé9;²ðÈÂ# ;y>ò|ä³õÞ½+zW0¶wdïÈÞÆÚâÛâÛâ;šq4ãhc² Y…ìÙþßÿøýßÿ`ì`ÿÁþƒýŒSŒ)Æö¼Œ;x|>Á'ø„rç¸sܹé›II.É%¹€mÈ6dB¾ù:äk Â#Â#Âã™çø¾†¯d?Ê~”ýÀÎp¬J«ÒªÜ-îw˳ý®ñ®ñ®ñ€X(Š…À£äGÉ’ñ¼H¹$.‰KPŒb“@÷æ½yovÞ´Ì´Ì´Œ„Љb¢˜ˆN '…“`|:ŸÎ§ƒ¬/^_¼¾ ÞÔ›z×g\Ÿq}Pw¡îBÝ ²1²1²Ökƒµ@OjOjO*p©îRÝ¥: ;¹;¹;0Ôj µ€EmQ[ÔшÆé—‘9î?~küÖø-üέãÖqëØy~Íí5·×ÜÞu`ÎÀœ9Üw³¯Î¾:û*‰òÎóÎóÎÃÖc=ÖC2Ô4Ô4Ô|³ã›ßìº Ý†n°6gmÎÚ *1*1* ‹È"²˜gggfÌ,˜YŒ=2z- - - ƒÂ BrBrBrY³¶} àÃø0> (ÙX²±d# DB “ÇÉã€òòr°ààààà`òÁòÁòAj¾Ñ}£ûF7'—Èä­[&+'+'+# Èxà&nâæ¿œ”JJ%¥?;?2þä…”¨ü¨ü¨|¶/l_Ø>rmðøàñÁã`üYþ,„l%[ÉV@tEg@õ‹êÕ/€{’{’{0`0 ˜€‡Ç{x ˜kœkœk¼Nzô: ómÿÛþ·ý±YÛ©íÔvâäF¹Qn|ú2ãÏø%›± ° c‡À•r¥\)߄Ԡ¦7œî¡{èžm…2‰L"“ÔáÆ[7Þºñ Ðh4äÌRõRõR56°El[9 "A$€ 6Ø$! IÔPC x^ð¼àyð¬ö¬ö¬ð+~ů0™úL}¦>(ªªªD•S¿S¿S¿ò„É¿ö·Š[Å­ÚS¤ …+¨œ¬œ¬œwŽ”Œ”Œ”@ÎqÇquxâêÄÕ‰«Ôü°èaÑÃ"¾S¶_¶_¶¿½ÊÒkéµôî?ÖùJç+¯v@•ýœÜèà›}رAnWð vav‘KêïÕß«¿Ï{C–*K•¥žÉöööF.d\ȸaÛmïè]Û”mÊ6%¾ihjhjh"‰ò»ò»ò»UQUýíga«°UØ:ño~á~á~áÜÝÞköqây."ÑÑÑÑÑÑíÓ6æÄœ˜ùwC!È„ÿ¶Í³Í³Íû§(õ“úIýâ V¬X­ü~¤c¤c¤ƒý½¥¬¥¬¥ÌöâØäØäØ$¿K%‰’D}èÃJX +9])¤ò÷1„! ѹŽØ%>ÏCðò'¹›tÐÙ2Y«`Ñ]ÜEî"wñ'¿§ëŸ®ºžIŠ$E’"®ƒOáSø”Úzÿ‹þý/®‰Öwé»ô]¤šzROêɾ´ë­´šÿŒƒÃ_Ès¹k/¶L¤! iB3I&É$ùþLÇtL·ï]çùÎóçs|ßÃ÷ôΧ¹4—æîì»»åî–»[€)@øÙõ9ˉ¿âø?P.9•3OûIEND®B`‚routino-3.2/web/www/routino/icons/limit-37.9.png 644 233 144 3030 13061246474 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÍIDATHÇÍ–ÿO”WÆÏŒ Že¨Sýe.´DhX e»±)\(ÔÆiiê‚Y›4›¨š¬ekÖHãòe׸%„¦€¸Õ&MŠ&è’6›XD\`AtX( ¢Ž 0ó¾ïýìÃëLôðþ2yÎ=çyNÎ}ï3W@DD6­ý X¬ Ö¸¶¾Žo(ÜP˜Ü§u°[Н ϶>Û àhs´#alî›ù‘õ"aþH=3.›$ˆéŠé²ä­áOàôwÒ7ćpc?Ø.Ø.,ipðëƒ_ô|ÑóÀÌ•™+‹y‹yÆæ¾™oÖ›|‘üòÉcú"ÝÝk¹1ëcÖ‹@bAbAÒoC ãIà~Óý&€ww²€þ? –X•øða®ùlî¯å›õ&ŸÉoê™ú¡~œ¹Î\xûÝ·ßµ}*i‡WËÔ ^ŽsœXÐ|š@/×ËYÕ¯ú°`06÷Í|³Þä3ùM=S?ÔOø(ý""ŸåCéhé(óÁíÇ #è§½ ½@Pý'N”fh+Ú èz¹^ºU·êVPݪKuñøRFP‹×â jwƒ[‚[@U…ø¡ÔWêîšúæQNŠˆlo›ÏæóEqlt`tø»Ae«lüü™fš'Nœ’Ë,³ýøñGt¤)MiÀ8Îq•«rñó›5þÂ5=SÿÇP?¬ˆÈiqÕª˜tFÆHÁÐÅ¡‹Ðø³ÆÄÆDÔð§Ã à àÍ÷æ{ó¡ùRó¥æKÐVÒVÒVí7Ûo¶ß„‰¶‰¶‰¶'&ÆÐö¡íCÛ¡å-/¶¼ˆškk 멉ê”êóhO{¬êŸ""¯\”EÏ=/2¿8½8mÉ|-'ûHö ¾6˜5˜%–ÒÞÒoJ¿é°wØ;ì"½®^W¯Kä\¹„s "û¯î¿ºÿªÈxýxýx½òõûG>V¦Êð«_©·Ô[@2É$G|D5ÔPWY5çúÊy™—AýZSÇŒic¿ziÿO£FØ~²ýä‹bÚô1ÓùWMçݵ7 ø4äÌê[í®vø«îÕ½Mßd#QDSO}D#·™b ”WMªI °–R×Ç ª+Ú¬6 |o:ÿÞu{×ÁÇÿéý¯|j_Oí{ìé|Áþxà‚Í—ðIEND®B`‚routino-3.2/web/www/routino/icons/limit-105.png 644 233 144 2736 13061246470 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü“IDATHÇÍV[LWþfÜ]ÅPKE£(54htEÛx[ÖÛb%Ê‹Æ^$ZSc¬µ$õÁ´11‹1’(Ʀ¨T„Ö¦>À"†T T‰ ÞX UÖ l!°³3çëÃr˜µ—wÏËä¿}ß7óÏùÏ ˆy‚4M3M3Å…mÓNÃo]e]5ãǰ}J#•ÊÆ?¾"ǻǻI2álÂY½Ý°e\æGÖ~$Ÿô#†ÃRi©T²Gìr˼-ó¬“ÂöwÒvÙvy D^-¼J’ÕçªÏñS²çVÏ-’ìËîË& [Æe¾¬—x‘ø(ù?@F×E×)OHËË€Lù(å£ÔÏà ©¤ssI>3?3 I’Z/Éƈl’(—?–ñ‘|Y/ñ$¾ä“üa= —'.È [7lµ ´ÿ@îOÞŸ,ùÔË$ò(cÈP  Im›¶Ã¤ðIR¡B¶ŒË|Y/ñ$¾ä“üa=x³·ßHº¬.+É~’T›H}¼>žÔ—«çÕóTÅ—¢\”SHÉâ}‘.ÒÉÐãÐãÐcR|#Žˆ#$_ñ_Ú~í’v‰BK º‚.ªÚNuµºšä·³ºY%9 ù)(íu[·­;Ezu¯>ÚšµÚ#u‰º„ƒâ‚hm4Ö|Îç|’YÌbV„ßI'$S˜Â”¿   )Ät1ƒŸô6y›HÒ°QRψ°Sä®Ã»K}¾hPkÕZÖsÒsÜsœ|Øð°áaƒÁ÷ÀýÀýÀMº/º/º/’]‹ºu-2âU+ªVT­ KsK¥N²ÌUV\VLñ×»¯â_Å|ü¸è~Ñ}ÙÚS¦ðwˬÁmûRûR¥ ,Pìæ%æ%V%UÅVÅBYÙ½Ò¿Ò´¤¶¤¶¤b·Ø-v®|W¾+(k/k/k›››ïzïzïz`oÏÞž½=ÀÜÛol<ÏlÏl(? !æWðk{¿½¤È¬1qõqõ`ÀžiÏð(ghå>â5^Ò&¤MHbccº¤º¤º$ÀÒli¶4m%m%m%@RgRgR'phÏ¡=‡öJP *A@Ÿ¬OÖ'9žœÛ9·wÒ§›z Ö…ùKöÚìµ€ÔcÌN³“éX1f`Ì€TŒ—bwpkÊ5çšt_º/Ý Ýº9t÷Ä=qˆ¹s'æÎhÆÎ;gìÀºØºØºÈ+È+È+œÎ gP¼¨8³8øåÚõ3×ÏŠc„/ËÔkꤠ_Ó¯)÷!B9¡œQüDDßAH?ýôª¦jª¤´¦´¦´Ïg>Ÿù|&Ðu·ën×]Àçð9| ¶5¶5¶˜Ò1¥cJP8®p\á8 Y$ëÉ:àϯù5ƒ_¨j# õ˜€@v û÷ß`j¨o¨•Q€¹"ZDˈkŽkŽk†N: dtftft &,LæVÌ­˜[8f9f9fÅ5Å5Å5ÀÉ5'ל\ÄwÄwÄwödûDûD`ÛØ¼î¼n‰Ïóë¦ê¦j`TÏÿíJÖ…*BÆ®ìÏê_п€ŽŽŽ2v~B?¡Ÿ _ö½ì{ÙGêåz¹^nă˂˂ËÈÞI½q½q¤(%¢„‚Ô\š‹¤o„o”?¬Ç˜c´õØzQ¤WójÆ#õ|=ŸƒTùæÚÇ}ÜGê= GE¥¨•¤>¬ëäøUÔŠÚˆ¸;Ôêç WKüŽ3HÛžÚžþkŽýÇäWådÖiHNÒh¨ò0/ð‚1ùy™Õ¬&E‹h-$¯ò ¯D¼À',e)…¨×¦kÓ©ò'í vpô¨k¢æŠrEÉ/õÆäkÏÊ·övñÖÞÇÞÎìßàŒbçiíX&IEND®B`‚routino-3.2/web/www/routino/icons/limit-109.png 644 233 144 2715 13061246470 14603 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü‚IDATHÇÍVkH”Y~fç¦)¶I&dj1jÛRáÖlI°bÙ…Âms7Šr ºlÉn´ýh´‹eÓ‘](*šÈ"B¶ÒU“j3+²¬ÉÕXe°ÉËô]γ?Æ3ß´íþïüùx/çyžs¾ï<ß ?öižbžbNŒÄæo¼}±}ñÔs‘ø¨Fš–™–uþH&y’<$™|2ù¤þ؈e]öÇÎ üX>™Çx ›×æ5¹Çâ}äÊ+gØ'Dâ_šIG­£vH%7\Ýp•$/Ÿ¾|š[ÈÞ¶Þ6’ ºƒnÒˆe]öËù/ûþÅñõñõ¦nÒfµYÒYä,Êø.Òð,ƒ\R¼¤˜$_ŽŠf’$µ¿I&0A¸I†¢ý1±¬õËùOâK>ÉÑ2uAê€\ºzéjljȄÇgÉé;Ò%ŸRKr?÷3TCjˆ$µµÚZ†IÑ,šI’&šH#–uÙ/çK<‰/ù$DÞ·¿."Kí¥v’oHRi%õ$=‰Ô(g”3TÄ÷â”8E!%‹\‘#rHõ¥úR}IŠ-b³ØÝAêƒb’˜D¡¼+~WLET¨ Õ…Ñ·rd¹¶\#)$?beUSwô8zB²KïÒ£¸_j~ež2Ãâ‚x „tÑEÉ9œÃ91ùÜɤ(Å¢˜äYÖ°&¦þµvC»ÁaEðɧΧN’aG·£;d‘zÆ„ýƒÜ¸gãžè:]¢I©Sê¢p¢ù·æªæ*òyÓó¦çMÏÏÏéyëyëyKvÛ»íÝv£Þáèpt8Èßžyx&éêöÇìx{„Ïàèvw;ïœo<ßHÒC’¢œÔƒzaï'Þoi©´TZ*IoÀðH}“¾IßDæææ’¹7soæÞ$]ŠKq)dkAkAk9­wZï´^r³æÎ"]Ó\S\SÈþì>_Ÿá1yå¢ó\ë¹V)ìîv3x+ñVÞgš?{þl`:A;»Ù ú0ˆA %+%+% —:.u\*P?±~býDÀÖnk·µîNw§HJJ*Ó+Ó+Ó̮̮Ì. Í׿kóV›u¼u(Ó q²ðEá @ê1qKâ–0_X‡¬Cc@|Îr–+Ì+âVÄ9œ@NmmmÄCñP<| ¾Œ1‚Œ…« W®F”eDŠ*Š*Š*€û_Ý_w`­°²2øð—õ¨õ( õ˜ýš~ÍôB-QK¢©ˆGƒýìg? hЦh€³ÃÙáì^g¾Î| F  Ô€ 8;;S×O]?u=°È¿È¿È¤ü”²7e/Q›q ã€ÁgÊRw©»©Ç „Ü!÷Ÿw`nºÕt+*ãd‹xw2“؞؞ØŒ=6z È{–÷,ïP\\ d7d7d7%“K&—L֘טטžüžüž|àHù‘ò#å@ÙïeueuÀÜÙó¶ÎÛŠw(‹ð™óZ‚-A ªçÿN%ëÕóêyãT¾™ó&ÿM>¶„-aKŒOUëÕz59I½F¯Ñcì!ü(ü(üˆì ÷…úB¤¸/úE?o«×Õë1|ÊÆÝwp*³ªIG¯£7d!»´.Íð1R/ÓË8L…ïmÜÆm¤ÒCºñK¢¨U¢ŠÅEq‘?ˆbGL=W= à0ŽúXÚÓ4’ª#à|àcÿáüŠt~ͯùINÐvi»¨p/ð‚áC¬åe^&Å=qOÜ#y•Wx%fû襗BÜÖ¦kөЧÔÆ8¿^_/wê=çÿhÿ•íí⣽}œ7Ø©HžRnzÀIEND®B`‚routino-3.2/web/www/routino/icons/limit-8.2.png 644 233 144 2520 13061246471 14574 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–QHTYÇÏŒ«ãLjnPB¾,’Ð*Q,¸(Ž(b(µb-+»Bd=l-.‰’m²J&I>XÎÅBVZ²ĄŰmaÚÔl8Êä0ÎÜ{ÏofŽwÜv÷Ùó2|ç|çÿûsÏù¾9„Blˆÿ °nµnµfÄbë7æ|jyjyî•XÜ­ƒe¯eïÓïa}×ú.€Ì¾Ì>㙫u•Ÿ¸_S?‘§æÅaN؆lC–’xÜûò÷å§~‹ÛGÁî²»–4h¸Þp`¸¸ŸoÁ7î”JÀŒÕºÊWû•^¢¾hù_H¾•|Ëò l)¶! §,§l[S,ámPµ§jÀlÒl’´€þFš,‚Qã}B¬Öãùj¿ÒSúЧø1?²Š³Š…€ê¯ª¿²_Œmx6dzg+^Ô´ÒJhA- ×ëõ,ƒ•£X°€«u•¯ö+=¥¯xŠó#VŸm‡Y›R›D¢A©¿cN+Óʈj3ºCw eŠ´H æ®úrÏç ½ÒSõT¤Öê´:¢ ¿ÓßḾ¬µÕÚ”ÁgÂQ !Äg?Ýg÷?!ä zM@¥Ôô:½Ž§f8ÁHt8Ìi¹ äÐB - ù§qáÑ÷ëû )}“çÇýÄuAãÉÆ“À<€±ƒäh86yîŸÝçÝç¡ýIû“ö'à)ôz ¾Ð]ã®q׌§’§’§’¡ólçÙγ0õÛÔÍ©›¦žü%z9zÐâ<Åû‰{Ü ƒ‹ƒ‹`ÄîÉ×qåÛÏn?¾ý²Š²Š²Šà@ÅŠý ûAö˜,›,›,3 M N N BZ$-’g®3×™ 959595àþ½ýc%}ÙW¼_ù± ‘q/ãÞ组(.-.]!,ã'm3FIcR{¿½ßÞ/DÅ‘Š#G„Øühó£Í„U†*C•be¼n{ÝöºMˆ£½G{ö qçÅw^±.}]úºt!Ü_ºËÝå+é6~T¼Åd¦g¦Óð~îý‡WÊ€×€kÀ¾_J—J—J— ·9·9·<ÕžjO5ñÝã»ÇwC~A~A~Òi‡4õ²^ÖpŽsÀwŠã+?2îeÜ“Cà+ô‚^´P9Zy¿ò>4mlÚØ´ÑœÏÉÉž™ž™žЬšU³Â„6¡Mhà8á8á8mÎ6g›>4~hüÐZT‹hˆ— L)Å_ùùèŽÉôÕwlúüô™é3°=¸=¸=™½™½™½Ðàið4x`Ö:kµ‚³ÊY嬂–±–±–1pt;ºݰshçÐÎ!ÈØ’±%c ¸®9לyÇôKÿ~Ç>®JâUrS»¢]1«( Âð¿õ¿õ¿Ù'ûdÈcò˜<ó§æOÍŸ‚ЦЦÐ&ðøGü#0wmîÚÜ5xÓó¦ëM„_ _B‚Ñj´—ÿ·*úXÐðúØ.í‚vtI¯ô&ô+‡tHGy g&L˜Ä±Ìrbh4&ô1¼ºWÿÏ>–Ðù‰wbâÿ©þ8¬écDå}é—~$¿rƒÀ #2"#@-5Ô€¼!¯Ê« —‹r)‡ôt=(z^£LF¢Õ&Õ&©/µªó¯ÙÿÊ5ûºX³ï±µù‚ýVëõË&ØIEND®B`‚routino-3.2/web/www/routino/icons/limit-6.0.png 644 233 144 2506 13061246471 14574 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜûIDATHÇÍ–mHTiǺ6ŠÃTÔô‚ІRHJÖQ°eXBEeÙYXw%ˆµE-,[Á¢}Pza3¤4È%Hz_)#'ÖvØÈ¬ßmÔiº÷¹Ïo?Ì<Þ©ÝösÏ—™sžsþ¿ÿÜûÜ3W@DD¦Ä>ç$ÎIôEãÄ=n>¥0¥ð«ß¢ñI % %Oª`rõäj€©õSë.76û¦>¾_ÄÕ發L7áiô4&¬ŠÅ‡`ËÂ- S¾ŒÆ¿Ü„Ô¦Ô¦1ö^Þ{àÒéK§)‡Þ»½w‚«‚«À;©7ýF/^_}ÄäÖäÖ„nðLòLŒÕ«ç~-ø{.¯/^ð*éU’N5xñêU@ˆf ÆÅf?VoúžÑ7<Ãú˜¾rúJظuãÖÔºhC×9¨œ]9Ûð¬&à(Gñ‚²Cj»ÚNôM}€À;©7ýFÏèžáGýȇ÷öØ7°É³É¼°î€Bz·}×¾‹ewØa;Œv'âDp× ¸¡þZçé<°_ª4•†ÖßÙ~Ûê­z Œýo‚/ñ†²~…ÔÞÔÞм ŒÆ&ô×1OV‡×CÌ`Fœ‘fšiJ)¥4.ŸO>ùÀ2–±,.¿† *€buQ]ŒÚÖñ>0‡ ~ÌOÌØÉ[°ïྃFÅÉÑç¬Z«Ö½Ï6<[ûl-»zì걫ðhó£Í6»\§Ê©rªÜ8àø~¨I®I®I†îP÷`÷ «§»-¿åwy.?ê'f¬ã8?r~ô€Þëˆs‚™ÁL(h+h+hƒ¢çEÏ‹žÃò7Ëß,Ýû»÷wïw õwôwôw@NSNSN,º±èÆ¢0?2?2?ÁÖ`c°q¢<¢ÿ2¼(ßøðµùÚt#ôæöæ‚ÚΫ¡¦¡º¡Ò3Ó3Ó3a‡o‡o‡èú€†‘–‘–‘·¾>»>»>ò+ò+ò+Ü|^g^g^'œùã̽3÷ܼúÑ|‹òŸD‘¤â¤b²E’[’[D¤_DD†bGPT“jVÍ"ÓžN{:í©È ÿ ÿ ¿ÈÙûg/Ò~­ýZû5™XV’•d%‰xxx¸yßKßKßK‘°&Œ›—vËñc~Eœ+Ε„?Eì ö¹ ""ÓMŸw·È[$âÝåÝåÝ%²'cOÆž ‘ôÚôÚôZ‘ž=;{vŠ0Â#"³¬YÖ,K¤´´TäõÒ×K_/y‘û"÷E®HÖOYG²Ž¸¾R /Æ7~>>cü»çïÔ)uЉ°­l[Ù¶2Hõ¤zR=PVXVXV}·ûn÷݆ÅÇ_|†ë†ë†ë t^é¼ÒyVžVžV•ªRUªøC¢ZT ª?yÆþû©$`?´ºO‘WA„Áƒ €SïÔ;õ ýÚ¯ý0T9T9T z^£×€.Ñ%º†º†º†ºÀészœ jN£ìa{°þ÷©Œ›cïá@8nŽíP×ÕuÆuš^¢—Ä Ð™z¦ž P@AÜ…(§œrpBNÈ ÅÕïÖ'ô à{õX=Ž›cVà]àÝ'çØ“?eSŠùeÖPOÔà‚“æ¤aé[zP¢¹H À8cŒîÑ=ºc”QàwZiÝ¡Ã:Œ¦ÕIwÒ±@uªÎxýïß“ÿ³ý¯ülß.>Û÷±Ïó öóš%­Ç#\¥IEND®B`‚routino-3.2/web/www/routino/icons/marker-52-grey.png 644 233 144 6331 13061246466 15632 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ŽIDATXÃ…—{TTÕÛÇ¿ûœ3wâ&+Iaâ" j0&’ÅÅŸ©½A^ø-“–VÒ«F¿bi¹¤¥B«¼d¡ÑËEC(^•Ÿ. û¡®ð‚¢€3(7MF˜™3{¿0£ïr­VÏ?{ísöyžÏÙÏwíçÙD«ÕjµZ¸cÒF&n¡pG¸#ÜaµÚRm©¶”Mͺ—u/ëÞ?˜ó`{ÿ[ô}DŸÈ÷,z‹Þ¢g{P„"‘ „ !:щNïá=¼ÇöÈ’dI²$’! ÂÀå"2L†Éð¶ÂLïLïLïú›Ùk³×f¯%ƒb€ ¥“ôœƒË{ hDse4‹fÑ,zÎ:f³Ž=•U•U•UUÖc´Zë.šçšçšçF~¢ÊUåªrq:rQä¢ÈE$C#ÑH4 Ê3Ê3ÊpÎïëß;ý=öïˆçŒïäqò Ž|‰¹2WæJSÈz²ž¬Èåø>àçÃc?Œý0öƒ¿ç”º)uSêì[u.ê\ÔÉÙfµÍj›ÕF^“eÈ2d0ãS|ŠO¡„f˜¼·ñ6_øÂf‹ŸÅÏâ‡×ÚšÚšÚš˜­!¤!¤!„ny¸øá⇋×P(” äöõöõöõ ¹,•¥²Ô;)ÜKdÇÄŽ‰šÐ„&¿g½ ôMÇ­ãÖqë¸ÿ2õ+êWÔ¯ˆÑ«>XõÁª„2w“»ÉÝ5¼à/ˆ,ˆ± ¸…[¸À.p0ŠQŒF0‚b b€ˆx€F\G\G\q»â›Šo*¾Sn7Þn¼Ý(\*¤ ©¢»FL“Ĥ—Wãe¼Œ—{qŠE‹¢L•L•Lýâ?æs¹Æ™úuõëê×Å×Rצ®M]+\p{ßí}·÷á%6‹Íb3@3i&Í„€v´£ýÿýB~!¿ä!yH8Žã8Еt%] Á®¶«íjÀ­Í­Í­ ^NÿêåêåêåâkÎøN'ɪͪͪ]em±¶X[jZ\¹>r}Ä7 lØ0@Zܺu? nRp%&b"&X` ƒ 2vØaÀƒ0Æcé ¤ãÉ8ßÓlšM³NËi9-L#ŸŒ|2ò h P¦1y˜Ã"÷3îgÜÏ@ê³òÑÕGW]î˜î˜î˜NäDNX1+fÅ€Ð-t Ý@H`H`H À§ò©|*pŸ¿ÏßçÞ]½»zwÏô?ÓÿL?ð|óóÍÏ7ÌÀ ÌW÷R÷R÷R˜ã–Ä-‰[‚E;+vVì$~?‰ß®œ(Š/nðxàñÀãöDÄFÄFÄ’|¤ )AqSySyS ”x•x•x§–œZrj P¾²|eùJà¤æ¤æ¤àš¹f®¸ñîwo¼ äÌÏ™Ÿ38óñ™Ï| aGØ”E”E”E“Ç”3 ¤¦S„‰ä;yœ|‚eÈ2d‘°¥aKÖ"CѬhV4Ãl×Ùuv”ŽL¡KÖ%ë’aÝaÝaÝÀºËë.¯» ؾ²}eû PÆ(c”1ã0úd}²>ˆôôô’ݓݓÝþ„þ„þ@©‹ÔEQyQyQy@(B ŠóŠóŠó0ψ™3#W†® ]Â^Ÿãs|NB¸Ü îÄã?“A€áñì"»È.‹;w,v»ûÛÝß9±9±9±ÀÍ”›)7Sž¬ß¾'|ð¢ç‹ž/z>y.\® ×Ù„lB6ðü?€§MƽŽŽ ( !ïÃûð>¬Ü4Ï4Ï4]bŒ#Æ€çãùx>Ìù¥=Ökæž{xîa`õÄê‰ÕÀôšé5Ók€Ò™¥3KgK–>,’““i>Ó|¦ùÍ.Í.Í.@ARARAãããWWWx/à…Çñø±+cWÆ® ‹SsjNÍÊù>ù>ù>Q×åÝåÝå-i­m­m­%Q®Q®Q®¢Q4B¹âîøP.W.W.„¡Ahü÷øïñßt.è\йèßÙ¿³' *P¨ €#çœ?rOOO“““9æ9æ9f€-cËØ2€\!WÈŒßN¼x;J£h"¾”wÉ»ä]¢ŽÃ*¬ÂªÌ"A+h-ɨß[¿·~¯]mª6U›ª¡¤Á4˜ÃtpààÀÁàÂ;Þ¹ðΓµnlÝØºÀ!Â!À×êkõµeÅeÅeʼn¿Ä_Ò*Ò*Ò*€9sæ V•UeU=>Æ,b·Ø-vCYÝXÝXÝH£‰‘‰ÿCìÄN쇥ÜÔ³SÏN=»{»4N'û¡w¨q¨q¨‘¿}bøÄð‰aûf)•R)…kôDôDô,U[ª¶TmvÝØuc× @ß oÐ7qëâÖÅ­” Êe`ð2x¼€¾’¾’¾àËò/Ë¿,´­Ak¶[¶[¶[À:s;s;s!«ÛW·¯n5߸;pw€» Í‘æHs®¯¶õØzl=[ldÇÝwwÜð~ÃoÓJ%ƒ’ÁsŠÑÊÑÊÑJÿÔøïâ¿‹ÿŽÅ/ó[æ·Ìœí«î«î«»Çî±{ dÚÑiG§¼Ë½Ë½ËÉÒ  …†BÀ6Ç6Ç6ÀYœÅY€]cר5@¶F¶F¶桨¡¨¡(ü³º¸º¸ºÕ²ë²ë²ë‹Y+bE‘ÿÄLÌÄÌöWÄqE| êP‡º> ÕP Õ¬ÏS¶*[•­?ãܶsÛÎmcá~Þ~Þ~ÞäXĈäûµï×¾_CIÊI9)ðžÃs€ô'éOÒŸ€ðÂ? ÿƒä¨D%*a2›‹ÍÅp==vzìô˜¨æOó§ùÓ¸Qn”ÝNé|:ŸÎoßÈtLÇt‚Ÿ£Í³k&ûFaÉ#y$ïl7›ÇÍ󢂿_p‡ª¯U_«¾&n‘ÈGäP’t’NÒa¢¿Ò_é¯~ÇïøýIi¬xí¢]´  Sè:‡´]OÕŸª?Uoß|ßvßvß&”Id™äXvøÆðáüŒLd"“‡Äg?ªBzÐ#ÞD:Ò‘Nôaú0}˜^÷†|||ݱìá„á„áa¤BW¡«ÐÙ7;’VÒJZaAÚÐ`6fc6@:I'éH( %¡`“™ƒ¬ÙØll6²øK]—º.uñ:———šÞ ëVëVëÖ­»¯&_M¾š 0#32#ÜqJœ fÇx‚ºPê·ÖþÖþÖ~ÀšnM·¦oÝ­òPy¨<îœè¬ê¬ê¬âuµÉµÉµÉ,ž¤‘4’ýž~O¿ƒ (ö'û“ý ‘ˆDÄøÆ?Œq¬nvÝìºÙpS ªUƒGçÑy[wsû¹ýÜþÞ ‡:ÊÌRg ÎcÆq%‘9¦ŽñºIíÚ7“hM¢ãߘ¼rüüoÛ&Û&Û&ú¯5t ]C¹…³öÏÚ?k?’hí Pr3¹™ÜLXÄ 1CÌ€,/(/(/È<8pþà|þ–|¶|¶|¶nãÏø-h>ͧùÂAGf?tf,;;;;;&çŽÂñెÚÝìÐîA’KrIîÙS\ÇÅmÑ#©HåUÙªlU6qÓHáHáH!”Çq‡?;Q?^?^?Nͽù½ù½ùü-ùvùvùö›§-}–>Kßö·^½õê­W ÚÙ­9|AŸv.P:üêÐî¿Ã*Ã*Ã*uoÈ7È7È7ËöööF~Ôþ¨ýQkßìè;ÝÚ<Û<Û]²P²P²ðc?VÈ Yáÿžžl¸ùÛ†¨¯3ŽŸæ!øû íf¡µ¨µg2=Ó3}¬;ÉäNþ8‘8‘8‘HC%ù’|I>×>Ù@74 :tò±FƒÑ`43ôYú,}–vø­ršÿŠƒÃߨSÚuöL¤! iÂe²–¬%kÿÄjY-«Ýö¶b†b†b×Î÷ð=|Oß º—î¥{7õw¬îXݱ˜D ÃŸ³±ÿ;Žÿe 2ÛZ…IEND®B`‚routino-3.2/web/www/routino/icons/marker-90-grey.png 644 233 144 6214 13061246467 15635 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü AIDATXÃ…—kPWÇÿ·§‡¢ £°¼¤q‘p+@$‰dËÄ@% A#»ea–,˜a1¤0¡D0/AWÔ%D«¢)‰(áQ0ƒ:dð‘G†a†î¾ûز*•óåÖí¾}î¯Ïù÷¹§I~~~~~>\1g†¹ÙÀÞbo±·hk~u~u~5]Z8Y8Y8ùç ª  ªøä-Γóä<ÃÓ-–FK#=ˆ*T¡Šä 0Œa HG:ÒéAI’$I’DrØ v‚¸^EôDOôÿ¨,ð(ð(ðh¿Q”Z”Z”Jtœ7çÍy“çç8„K6.Wfp=Öc=S' …B¡pÉj²š¬&÷µ…M…M…MuZ«Îª³êÚº§Ã¦Ã¦ÃÂÿîTæTæT†æpe¸2\Ir"Äâ1°Öm­ÛZ7À>·ß·¯·?o÷7ïß¶Ÿ};µEðY*§r*¶“d'Ùé]&òy‹¼;™jMµ¦Ú•nOµ=ÕöT¿O9¬V3³!ƒ!ƒ!ƒ$A’#É‘ä`û±û!Ã4¦1 à ¼7,Ã2,ôÅËâeñBÂ`×`×`íèèö=Œ{÷0îµOeÞ2o™w””ßÉïäwn*£i4¦ÝÚN@@ÀÉ>É>É\BZjZjZ*{ÅÕÝÕÝÕ‹ùøøááá°HA RÒOúI?@´DK´yH’‡Îã<ÎB¢($‚å3ø >p}ìúØõ1Ûýû¼ìó²ÏË\‚};¶¶¶>¿ÖÚcí±ö´ôÈr£ÜH}3Æ3Æ3ÆIkkk ÁOðü gz™^¦÷ÿ"g·¹*¨ °[°À‡øˆF4¢– ©Bª 0ÕL5S £a—a—a„£.G]ŽºÐ£‹ÑÅèB4ñøàÖ·>¸uåÀ»]ïv½ÛEiw\w\wœAçÌÄÇñq|·{•÷*ïURz\#×¥Ú­Ú­Ú­”R=ÕS=¥t]AW,¬¿ïtßé¾¥×][tm¥Ú~m¿¶á>¿ßÇšº•ÝÊn¥aç±ó±œ/çËùþ1CqRqRqWǬŽYC*lZâ˜sÌ9æ088|gùÎòpV9«œUÀTÒTÒT°Q¹Q¹Q Äߎ¿Ð4h4 @uEuEu á%¼„¦Þžz{êm V+‰•qqqóvX¼:xu0©è|Ðù óšbL1¦˜?f ûQö£ìGÂÁº¨º¨º¨…7£èz€R¾ïãû(=°æÀšk(ýþú÷׿¿¾‘ÑîÑîÑnJóÎäÉ;C©±ÑØhl¤ôë̯3¿Î¤´ª¤ª¤ªda}Ïñžã=Ç)ݯدد ToÕ[õVú¤™ìá#|D˜Ì æÄü›IðÞÁ;€&„ a€µÜZn-···´&ÿEþ‹ü€Þ¥wé]`dÉÈ’‘%€.S—©Ë‚2ƒ2ƒ2Ö* €ý†ý†ýËËË“&a^g^g^pGq”°"O‘§È“þÛ¸Î¸Î¸Ž¬ž+ øƒÈ 2ˆ  ¬À ¬©ŒTF*Óͧ›O77So¦ÞLt¬ŽÕ±€Eb‘X$]F—ÑeïÍ{óÞ€¤SÒ)é€$ Ã0  ñˆ¸%ÜnÉ< µ"S¯©×Ô‹Q&I`è¿Yi±´XZÌ•ŽzŒzŒz°_ö×õ×õבœðÇáÃà 7¸Á 2å˜rL9,JZ”´( ЖiË´e@TTTTTp^u^u^8^v¼ìx,ÄB,d”ûŠûŠû ÀìÁ€ue]YWÝèF7Ìš÷4ïiÞƒL3®׌ã_ÒQé¨t”+eŒd$T±ùl>›OrÚ¹v®ã}ô‹õ‹õ‹!ïø¿ÂX_V_V_ß4¾i|H H H HÉ!9€h‡h‡h¼5xkðV`é¥w–Þú.ô]è»°ÓÞÜÞÜÞÜ…Ô¯üyåÏ+†…¡GèÈš‡›‡›‡…õDC4Dƒ#„'<á9#ÁG‚“'/N^¬ùÅ”aÊ0e¼îå×á×á×Ág¥ëÓõézQéÀöíÛa©-¯-¯-‡DtHtHt½%{Köð’æ%ÍK xSð¦àMÀ™ 8öþ±÷½ˆCÄ!âÀl5[ÍV ¶'¶'¶4ú³èÏ¢?i¸Þp½áº0ý“ñ'ãOFF&3ÉL2ÓÀ¶Ù¦Ù¦Ù¦ÈÏIÞ¼;yw\ÅU\}ú°xR<)ž¼ä8Õ8Õ8Õ¸2-öPì¡ØC46>(>(>ˆüw2e2e2tÜkÜkÜ ÄkÀkÀkp?ë~Öý,@UTEUYEV‘U€ÑÓèiôÔ‰êDu"à^ã^ã^,ŸY>³|ÓýéýéýéøKMiMiM)ÎÊÌ2³Ì<GETDEáA ¨ÚÅ0ULS%êaJ˜¦düo‚ZP êVÙeÙeÙeàRí¥ÚKµ4x@= P£Þ£Æ£Æ£æ5Ë×,_³|›±›í‹ü¸ü¸ü8°vhíÐÚ¡y@£ñŠñŠñ dÍÙÍÙÍٜÌÌà @ Ä@ ¹‰$‘$Rµ ¥(E)ëekóøˆ¹¾‘ý€”‘2Röß=L4ÍDïkDÒÆ|~6÷lîÙ\n·Áßàoð‡Œd’L’ £0"Œ#ÎáÎàÀЂ´4”†ÒP@ RA ‹½ªµ··óYú/õ_ê¿dKž–<-yº¾È¿Ø¿Ø¿øÓN ä8ÔPCÍm²÷£NÐB -w{±{IcЙ 3AgJ_”îîî¨/Ò‡éÃôa¬¡!«!«!‹·W>9i'í¤ bƒf1‹Ùÿ«ˆs]eÚ™v¦’5?j~ÔÐØ«W'®NˆJäNr'ùØŒµÞZo­ÏþøFÁ‚ÕP ÕÀÅæå[;è´m>>Ù}whÛж¡mÀ |mþì¥ù÷8þÝpã9œà\IEND®B`‚routino-3.2/web/www/routino/icons/limit-2.9.png 644 233 144 2467 13061246471 14607 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜìIDATHÇÍ–]HTiÇãú10–RkAÆ„^$²VŒT^”h›JKƒIQ-²´[°¬yeD,™}!TF`dêºÔUEåìÚ‡Ó¦ìÀì&Rêˆ+Ú4Íè8ç=ïo/f^ÏØâ½ïÍ9Ïó>Ïÿÿç9ÏûœWMÓ4-3þÔÀ²Ú²Ú²$f[¾3ýé;Òwäý³[$}“ôÍ@,½¼ô2@Öͬ›†×´Õ¾ŠOÌ×4?‘OùµLÍt¤µ§µ'•ÄíÓPí¨v¤³Ï=k—µ+¤ÃáîÃÝ·:oñ=øÝ~7ÀTÉT ˜¶ÚWñ*_á%âk§?ã×4Hyò iÒRÓR5 ìÛíÛsÅþÉ…ª]U»†“‡“¥Ä¿€ ›,‚Qk"ÁVûñx•¯ð¾âSü1=,ß¶|›¦ÁîšÝ5ÖÖX‚· êrêr_´ h¤èA= ö‹ýD@>‘OH" L[í«x•¯ð¾âSü1=ÚüoÛ\†t¥ºR(@´ÄcPߪo%ª‰t‘Ž4fŒÆGÌœW9Œ¨6 OŠl‘”?èÝCD@€°Âw¥¹Ò”À沄O©iš–¬~«?øa_ÐgTȈ¨Õ„9M' BÎp†3 ?Èòƒé–A”Aà§8•ÿ-ç8|-n‹Û1Y@_؆9þ¸ž¸°–§pää‘“ÀG£¤h(2ùúSÞÈ7.œ¿pþÂyèØÿ°ÿaB…܆Ûp›v~~>\r^r^rÂà߃ƒ&ž|}}4—]8Ç×Ö÷Ü Ü €q@ÖÆ3"/Ä‹à‹ Øfm³¶Y(Ë+Ë+Ëûûûè+î+î+6 T T T@^ /€âšâšâ(\[¸¶p-LL¬™X3‘O_Œ_éÑ`Éã%e;ø7ú7‚‘Á¼Õ¡wD;¢ÐÐÔÐÔÐdú Ž-8 ×®^»zíªéo¹ßr¿å>l^±yÅæ¦¿h]Ѻ¢uÐúkkWk—éÕ[Œ_éÑ +#+Ãø &F&FTÓ3!;&€{“{“{868686À!ý~HñJ¼¯Ì¸÷Uï«ÞW£ÞQ輻òÜòÜò\HmNmNm†¶Um«ÚV%Û¦ÆLœ?®çÿ»?¿b¯[_ßx}¬ÖNk'œ-=[z¶B[B[B[`Æ9ãœq‚ßî·ûíàõx=^ìíÙÛ³·šaÎ10ææ@„ÈgV¢]DE ÷É}rŸé–_ÉYü,FÅhÂÓ}_˜c “_w%»’\´‡cb½X²]dˆ ¢ò¤üMÞ“÷€zꨑ„M4ÒÒ-§ä’—†Ãpá@Äñq¥»ÒU¥æMþEû¯\´·‹E{[œ7ØÿÖ™£!!;šIEND®B`‚routino-3.2/web/www/routino/icons/limit-61.png 644 233 144 2365 13061246467 14527 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܪIDATHÇÍ–_hSWÇ¿I“ÒÐ?Æ ˆRq–VDhe ø7¡m…6ŠŠ ‚ÖHÆ\…>8a-B :}C5”Š!Š|дÛJÙƒtT))RìƒuÁ†¥^{Ï9ß=$'÷n›{ë}¹ü~ç÷û~¾ÜÃïÜPUxƒt®s®sVäcgØÊ{öyö}v7ߤã ãà¯ß•×+¯“dõ­ê[ò¥ëu]oï,};OçQ+áp8‚…¸›<ºåè?G†É²DYâ“<›<›$Éû·ïßæ—äìÈìIf‚™ iÅz]×ë~­g×G÷ßøézäzäøt¯p¯Èš½5{7|•/Ho [´ É™’™å$IR¼%é¥WIf™¥~æl±^/Ôë~­§õ5Oóó~@® ¬ dèXèXY4ßð²<¿öüZÍ[L¼ÄKô’fÖÌ’¤8.ŽÓ Õ°&I:è ­X¯ëzݯõ´¾æi~Þþº·½_‡=‡=EC?1+‹Ç$)£2ÊEuFõª^*ó¹9jŽ’RJ!—<2 ·Ëí¤êQ÷Ô=*R&d‚‹œƒbЦ_äi>ì†ê¿#ËfËf³¥ä¤˜$?$[H‘渑!†HõN½Qol’L2I²‹]ì"…! aª_õ«~[]q»åIy’¹BÐRäùy?c7 ;.v\,67è-P}*¥RTzeªmªmªììì$ÇŽŒ;²ô‹ G†#ÃrzåôÊé•V^ ©´JSÙ¶¸ÀÓü¼Ÿ‚±çdü}ü}±½]ýn^1¯ÐЙLC¦!Ó@îHíHíH‘ÍñæxsœÜÙ½³{g7ùÚ|m¾6ÉäÕäÕäU²t}éúÒõd|||¿eLÅ6±$ELÄ´¾j·øy?N "U‘jÜšM…ý…#ª¾Æ Ü€[gž„Ÿ„Ÿ„tGº#Ýøê|u¾:`wlwlw ¨ŽTGª#€—ãrðŸòŸòŸT“jRE]XÕàÜèܨõQ‹Ÿ÷ãJZKZ¹p=p=(¶¿Ã[T ÂÒ ‘ À÷Ê÷Ê÷ ØãÛãÛãb}±¾X0:=:=: ŠŠŠ›ŒMÆ&XÈ,d26c ø€€ZÔÚxE~ÞåCÇ`¶™mÅÂUˆ£=–ž·ÅÛâm¼§½§½§pM¸&\øGü#þ`æÚ̵™kV½¬—õ²À$&1i3&`¤‘¶ñŠü¼' fƒ¿ü =zªëx¦ä{G—£ a ƒ ê u†:ZO­§Ö”{Ê=å q¢q¢q8±õÄÖ[-~e{e{e;àjv5»šmÆ>Çfl5¥¦ðQó,~ÁÏM%'™cΚJ‘9‘#ç‚sÁ¹ )ëd¬[:•ó»æwÍï" ·á6ܶ…G|ÁŸ<•ÿpŽ},žc=²‡9žäe^&U¹*U¥¶ñ_£Ö¨5$ 0`3`Ð(ÌœaÍöÿ>ÇþåäbH ‘¤<'Ïq‘ýç8•úQ=SÏHÞåÞYúÅèg«H~ËP‘ò‚¼ÀE.Š”H}ÒÉ¿lÿ•Ëöv±lïcùãr»Áþ ¤˜‡o\}òDIEND®B`‚routino-3.2/web/www/routino/icons/limit-34.png 644 233 144 2402 13061246467 14517 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü·IDATHÇÍ–]H”YÇÏŒù9¥%„ÙÇèÅn`´ÊLZc¥IÄF±Þ¤-Ú2±í«…Eµ‰±®}!YÔ¤.}) Ûº²‚ÚP«ô¡5ê¼çœß^ÌœyßÝ’ÝKÏÍÌóœçùÿÿçœç<ï „bnìW€{‘{‘ÛµÝ_Øþ”õ)ësŠÚg%¸¶¸¶üVsNÍ9Þ˜Þ¨zlÛÌ›xg¾6¾“ÏøÅ\a;’/%_rÅì ––§dFíï;!õZêµwìmÝÛ pµéjû!t?tàUÑ«"°m3oâM¾Ásâ‹à¿ø…€Ä‰7\œ”œ$,Y»dmΗр?r xcñF€¡„¡íù0›Ùºc 3F¶™Å›|ƒgð Ÿáê0¿p~¡°yûæí©¢ =?BUvU¶á‹\Žp„Ù`Yc²L–1 ºSwà¶mæM¼É7xßðþ¨ñϳ­óö”m)€ˆÜ#"ïÊ»ªVÕQa½T/E[Z½V/¨_U·ê惡?Ñ^핯vªhP-ª…ãò–¼_ð½8_œ_8}Ú©¡ÔÐØ,蕽ˆ°T•ªâ=_s™Ë@;·¹íPp”£|øð[ÙÊVÐô#ýÈ÷ÎüQ»Ô.ÞÇŒ q¾8TOLØÙ_`_í¾Úxò Ƭak,datÿzü=þ?Ô¯;_wºT—êRîXߎ¾}; #«#«#˱“#$‘„fʵF|qþ¨ž˜°®Ðò¦åM<}.Œ F™4žþêþêþjÈ8–q,ã2™LÈ*Í*Í*…S¦LÙ¼/¼/¼/ÀÅÅÅö« •¢R€”Aƒ¯÷ØüQ=n!<ížöüÏ…(ôúbç+\Äg „€H6’!âpäpäpDˆÒ‰Ò‰Ò !t.è\Ð)„ì²Cˆ` „˜|2ùdò‰óêçÕÏ«ñAëX'„Xêö»ýßuÁæéô´ô4õ;Œ ;®ý¨~¦ŸÇ9Îq{ÅãáñðxJN”œ(9y‡òå‚ʼʼÊ<ȩͩͩ…²Åe‹ËCn}n}n= ìØ=°Ûq¤ß¨JUél3†?ªG€§ÝÓ®/Aheh¥(¿µ6Y›l»ùfóÍæ›_‘_‘_aû ¼Þ/øÂ¾°/ å å å °¬yYó²fHô&z½Ð¦ÚT›£Õz™&ÓœUiø£z¦¯±wÖëŒ]coß¾„¢ÓE§‹Nƒ§ÄSâ)ò§åOËŸÂxöxöx¶MÓØÝØÝØ ÅMÅMÅMŽWËýr?€¼(/N_cÓßJÓ2Ä}+­UÖ*k¼¼óòÎË; ËÇò1è>ݧû@]W×Õu¯¯¯†×ý¯û_÷Ý<ä! £J³ž[ÏÿóV~¤…MŸQ'ÕIÞ3‹¬ý•®ÒUŽZñk¿öÙdãØ1FeÐL0é‹€ªPÿ»}¤ó¹‡%Ûe;€: á;ZiEëŸu›n~àç>ìc©¡˜ËÖ AT‰Øx1üé;ÿŒýVÎØ×ÅŒ}ÍÌìß™¬n& JÓŽIEND®B`‚routino-3.2/web/www/routino/icons/limit-30.png 644 233 144 2522 13061246467 14516 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–_HTyÇÏŒ™ 6©¸¾˜( ¹‘B®K¾DjYA–[bRAiô°ì&›õ ÙbÐ.µ‚˜õ` äöPèZŽQ6öÅ¥Ý%Ó,E­!wUbØ1›{ïï³ãoîìÒþyô¾\Î9¿óý~ïùýι?IX| 8ÓœiNWÈvÖØþØm±Û²¾Ùm&8v;vž„•­+[/'^¶†l[ÇõúÈ|?’Oû%AlGÌõ˜ëŽâE»*s+sc? Ùß݇¸®¸®? 8Ü}¸ ÓÝéæsð=ö=˜+ž+ÛÖq½^çk¼H|iü¿D{¢=ŽqˆY³\Ò·¤oÉü"´`4ÊJËJ¦¢¦¢”Ì߀xâU1àÇ~~°u|q½Î×x_óiþä¢ä"صw×Þ¸öPÂÐU¨[U·Jó»€3œ! ¿á0«Ì*@ÝW÷pàÛÖq½^çk<¯ù4Hüuo›J "¶"PÁGÍ{æ=«Áj hÍ« •2ÆŒac¬GÖëA¸b¨OU¾ÊcÂ5FAÕªKê ¬f«™ ó®y7üÁÂ|a~‰ôq Äùâ|þe0bŽ˜@€í`ÕYuøšܼÜáŽ-„ÛÜæ6¨rU®Êjª©Žˆo¥B Œzê¬F«‘ï5þ"_˜?¤gQXÛ8Òp¤A£Yëð¯ŒW€Jj¨~C%C%C%Ðänr7¹áɹ'çžœ³u ÷ ÷ ÷Aë|ë|ë<ŒûÇýãöD+C¨ˆ-ñ…ùCz…ý| ®½½ö6œ~H'ƒ“,hÏ‹ã/Ž¿8Ig“Î&…ЩЩŠ)H¿˜~1ý"Ü:qëÄ­°¡pCá†BÈÙ”³)gd/d/d/ÀœgÎ3ç‰8jœ4Nj|uÈæéqЏ¼.o^HÑæ¢Í‹û+Žvù$ª2ªRb´Çô™>Ó'r:x:x:(²çùžç{ž‹¬>¸úàêƒ"½½½"±Ó±Ó±Ó"ƒ}ƒ}ƒ}"+FVŒ¬éIîIîI–ð£®Ê€ h|G»ÍÒ³L$ª,ªŒµ"ÑÏ¢Ÿ9tÞŒ£ÞqÅqE’¥Yš¥Y$»#»#»C$õ]ê»Ôw"ûã÷Çï™qϸgÜ"YCYCYC"qOãžÆ=µ¸&]“®I‘ù¤ù¤ù$Û/?ɬ̆­‘è›Ñ7%Y$jMÔÖ ¸¼.¯º¾|_¾]jóc‡±Ã¶;z;z;z!ï@Þ¼¶¿°µ°µ°öÕî«ÝW 7&nL„qï¸wÜ ™¾L_¦¼¥ÞRo©g}f¦˜)MæéqŠø‹ýÅ¿ˆô÷õ÷é Úù¥l—íò^{væîÌÝ™+’PPP âzízíz-’H ¤DÜî ÷„HfAfAfHÎXÎXΘHyJyJyŠH‘§ÈSä± æÜ*’¡ñ©¶ùõücWê®ù‘)¦ì®4Öëõ0ýpúáôC0[̳%¢ÝV·Õ 3s3s3s`½±ÞXo“À v‚Ƭ1ûŸ]ù96žcç­óXÆ:ÖªWuª.¢»jTªuA]P@e¨ •?¤ªTðí´X§¬Sì9ù¯sì“_OfÃôš^ë˜uŒ ßÒM7JÝU=ª¸DmGåºèõ‹P€‡—¼DuÔ:JÓì7ûÿ×ä_²ÿÊ%{»X²÷±¥yƒýfÜ×ˤƒ›(IEND®B`‚routino-3.2/web/www/routino/icons/limit-35.1.png 644 233 144 3011 13061246474 14652 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܾIDATHÇÍ–ýOTWÇŸ;м¿˜e¶B,l°k²âZŒt)CaØ¢’74Pi¶î&m„Ífµ†v“]~XäE!ZËf#´è( ]L× ±ê¤nªÁõe¡èV°“a˜QfæÞóÙ†ëµÿ€ç—›ïyžçû=÷>ç|ï‘´å§€-Û–mK‰`[£5WWþÓ¿Eðq´­æ_€ÔŽÔ€Õ­þȸna3næG׋XüÑz漤‰5;; •,ã÷a÷‹»_Œ³Gð_Ü??äÛçÞ<ðÙÇŸ}ÌÛpÿËû_xJ<%`a3næ›õ&_4¿¼ÿ”¾Ä Ç kw!vUì*X[¶¶,÷·‘„çÂk•¯U|»âÛÊúD’*|ø0Ç|6ãËùf½Égò›z¦~d=éÅéÅ"P]W]*Rpýx7ëÝ,S/4|À$AØöè{õ½,r+7XØŒ›ùf½Égò›z¦~d=V+""m;áõ©×§À˜]ß ­ ­ã?¡@(@ˆ;(½E?¨ý}¾ôF½Qoþć|ÿ÷ Añ†ñ!£8|4|Ôï#üPWÜ7õÍVÞùY;Äûâ}¾•™º$2š8š8š(â®rW¹«DüGüGüGäÉмšWóŠ f f fˆì\³óÑÎG¢MübbfbF‚ËY›T϶¤mIfUk¥ö÷d{²=‹Ôww‰èYÞQï¨vꨴ®k]'òãŸg¼”ñ’ˆç'žç<ωŒMMM‹ø7ø7ø7ˆPGu"ΫΫΫ"™™™"ªBU¨ i–fiÑ´mAÄÞmï³÷‰¨2mP”X’!í”,ˆˆ¤4¤4äoæÓ‚iAãþ:ÿÞü{Ö–]|ä›öMCõöêíÕÛaýÖõ[×o…ö}íûÚ÷Án¸'ëOÖŸ¬‡ŒîŒîŒnq¸F\Vë‚Π3è´pYaYaY!ô¶ô4ô4Xzú®ï ¿+X¼:ÙøFôWW%®R°T¼T ý5{öBþ¯7æm̳‹rŠrŠr Â[á­ðB×\×\לßÜ´¹isôï;ßw¼¯Ãë€À•À•À+¯4©4±4zÕ“Ù“u8ªgZgZR.¥\R6Ûî@(šüJÄõ©ëSçÛ»úwõÓ¶)%9%Y‚É{’ÉN‘¼á¼á¼a‘ÖÎÖÎÖN‘cÃdž ‹¤¶¤¶¤¶ˆ”æ—æ—æ‹TõWõWõ‹ìÈÙ‘³#GÄÖÖÖÚs ] m m"1¯¬È]‘kî1ÄéNp'ˆˆøJ|%“_‰y ¸Ò”Þ”n’ð–ÇžÇx0þ`äÁJ¯Ô+õʨÙƒö æls¶9¨[ê–ºê´:­NÃÃÃ?< FØa«n!o¡d¡µ»Z Yz|ÞTÐT`Jaì)‹‰ø˜jyâcå  þ¬ºU7gŒ3ÆPãj\GÙB‡êP€Ž( $íh*WåFù˾ù3ÉtÞÚ•µ+Öˆ3«„¿œÐgõYÌwTü†FAýS}¡¾.r‘‹€?ò¯T³ê®º ÌxL’¨'1¢ äR\91Iª€‹¨G)_9$X¨k%rLHð$Dã\2H‹¤@¼7õ ¼"—R„#qÂ0¯½wßÌ0§´RYººW÷Z_¯þV÷j’ŸŸŸŸŸ/,‰q©a¶qcÜ7F›ò+ò+ò+èªÂ… ìÚ@½©7õ>ûo‚¯à+ønÊ´ÕÛêmõôC\ÄE\$¹XõX`ƒ‰LdÒù=ü~É妸)nªç"™'ódþ¯å+ V¬l¹[”V”V”F¦…@!P$ K8¤6'./fàVlÅVæ©P*” ¥6»Ùn¶›WD666|3nŸ¶OÛ§›;Ÿ_|~ñùM'Õ¥êRu)7ÅmŠÛGr£dQ²(ééé¸ú.½k¾k½ËÞ²}§?—>ÎÁ—¨†j¨Fzƒ¤“t’Xʲl`ë%ó׿¯Í_ø<ÝütóÓÍâñ¸Á¸Á¸AƱ±cÿÆ~ò ŸËçò¹XÄ»xïB…E,bÀÛxoXÕXEÛZÛZÛZ¼Ò¯ï×÷ë©ãæú›ëo®—ŽÏîžÝ=»ûõUª@UàŸbº˜.¦Ç–Ò šA3ÆÞ `^"§­§­§­ôÐC¿ö)®ž«çêõÿ°[ì»% Q»]»]»]غ÷ðÞÃ{sßx™¼L^&hñ žÁ3h0 ¦Áà0„! ð€<,` B‚€ “a2 3˜Á 8£Æ¨1j0ªûL÷™î3áÑïG¿ýžk—+åJ¹ò§Âa°çå}x/ãå‰ßÈ™¶3mgÚÁSð<¯ô˜SÌ)æ”´B·œ9/¼’‘‘‘À5ÂÞð†IúIúIú RCjH 3Ì0ä(9JŽËUA@mÔFmÍ¢Y4  <å)°ål9[(((4—/5^j^ÊÊÊáÕ×Ô×Ô×*z¹GÜ#îÑ[›HaSaSaSB¤½ËÞeïºÑ¥ùMó›æ7”5™5™5Iº¼*¼*¼*ÀP-ÕR-4$€vØaІ6´¹C 5Ô¢há#|`;¶c;–EJ“Ò¤4€©`*˜ ˜ŒŒŒ ]ð¼àyÁ“F™°ppáàÂA`'¿“ßÉ»oî¾¹ûær åáaáaáa¤¬u¦u¦ušw˜w˜wlÎâls¶9۾ܰ!aCr•·•·•·±(^¯‹×¡b“Ø$6 ÑèFt@X#Öˆ€iiiðBê ©/¤â ¹r+äVàßãßãߤI?’~èVt+º€.[—­Ë¢ÑŽhà%ó’yÉÀ)?U~ªü‹þ/ú¿èÿ"r{çzçzçp–ÁœÁ²ž©fª™êe?g|*â †oá-¼åvH®’«ä*Àè=£wËŠeŲbÀ/Þ/Þ/è­ë­ë­së{ózózóÜGðcÀ?ÂF¿ _Ð/ jll”¶1¾ "‰xIάºµêÖª[äÉwÈwÈw|=199ÉŽêNèNèNˆ.öhh M¡)°-sñ¨í¨í(`M¶&[“ŸL¦øïâ¿‹ÿ˜©ž©ž©ÎVŸ­>[ ´v·v·v1U1U1U 6›‡ |íæÚ͵›¥ÅÉ#“G&0íòOäŸÈ?ù¿}ŽqǸcü¸ƒœþùôϧЉNt®9/{ { {Ц\hXhXhȈUÆ*c•tgBMBMB ¹åâÒXûXûX;¢St ЦhS´)í£}´ $‚D¦5¦5¦5Àpâpâp"°¢rEåŠJ`uu‹}™}™}™øseIeIe þKeQYTënÊR–²›þ¼D­{æ"s‘¹Èv1ç˜s̹É#Ò°4, §ÛUz•^¥ôZ½V¯¥aý'ûOöŸD•‹K‡v„Xܱ »° ÐTiª4U@ä@ä@äÀ2@“©ÝÔnj‡ªñTã©ÆS‚Vn•[åV€‰‘ó$²…l![î@ JP­u–ybÔRÝȽOJI))½uˆÙÁì`v¯G2Áü½ÁÞ`o° ÙÆjcµ±*ÒMºI7LÒuéºt€J(ÿé­oA ZNÃi8 )$…¤X¦ŽæFñâÅâ±ù/翜ÿ’;ϯá×ðkªŠBŠCŠCŠ?nE P@þa cXˆuÕ£jŒcãÂ]ä 9¤~õ ×6\+IVd)²YUEó«æWͯ⌺YݬnÖÍ]rŸÜ'÷aC?úÑ`©.sËR•E™¦…iÛpÛpÛ@wvNuNuN±%jZ£ÖLXíUö*{Õ©îÜ-¸[P5PP{«½ÕÞcÕƒ ƒ ƒ lISjSjS*ÝI‘Cäx©Rª”*A]‘¥è#ú ˆËCÃCÃCªš#š#š#ਫ਼VO«§)ZŠ–¢O}°D½ «“Šç©°ü¹6îü’ð®¤vÞŠ%hF3šÅcd+ÙJ¶îL^úr´Ö9²ÙŽlé/¯K¯K¯K̶ç6žÛx{¤i@€Š eB™PØ„\!WÈÿyðçÁŸ‹!Ó[¦·Loa‡ŠEDÉŸ–’æx»T&•IeÜyçÉqXQQQQQL®ˆÂ9°Ì!'w9¹{ÞÉÝoŸà®£ÁÑà²åÆrc9TΗç‘+-–K‹EZœ(›(›(c‡yŠ""R¸ð°ÛŠm®ŒmûƒåÏ{9ïåÕÿÌØ­:hÛ´mÿýžøì‰Ï–~¾ôsã†e›q3?»^ÄÂÏæ3ýR(–#·3·S«Z°?úgêŸÉsgì¿ôA~8?<—†wνsàë/¿þ’÷`òûÉïfªfªÀ²Í¸™oÖ›xÙøòÉ#ü"óMÎ7ÚmÈ]’»DJ«K«½3 ?{áõW_`bÑÄ"eý.P@ªbÄ0ÏT–mÆòÍzÏÄ7ùLþL?E•E•"P÷VÝ[ù§27þx>ð˜|©0ð)ŸRéX: ïÖw3ªOõ ¡e›q3߬7ñL|“ÏäÏôc2."ôÃÃo ƒ1º”M•¤JÀ¸œú%õ ©…N•1kLSM¤GÀ¸f\3®a$sÌÑL> F)£2}$}ÔŸ2ø°#oG0iò›£¼%"²¶òcù±Øbþ<|iøp€W@=§ž#Î:èÕ¢ZT !B$«‘&šh–±Œeüæè£ú¨> *¬ÿ¤ÿD|Áý ±ážáxÈO¦á""­qí}{ïÛ&Œ±ñFõõîëÝük°)Ø„º2zåæ•›ÑÐú¡õCë!Øl6ÃàÈàÈàˆWwÕ]uÔyu^·ü}-}çúΡn-¿™s3ÇâS×÷Öí­3GÛzѦúEDÊ»e¶æ©š§DFÝ3wfîhe¿{aËû[Þ—äÀåï¾­Þ^ï¬wŠ„šBM¡&‘­Ó[§·N‹ô»ú]ý.‘Zo­·Ö+Ò?Ö?Ö?&¢¹5·æ‘)‘‘®]+ºVˆøŸô?ð?màÙñqIf榕©¶-[ Æ(åÝ‹µ9ÝN÷¦Í²­²¥²ED÷D{£½Ú©#x:ð´ÈŠWVD&»&»&»Dâñ‰ø„ÈÑuG×]'’oÏ·çÛEn·ßn¿Ý.’\ž\ž\."¥R*¥"Æ.c—±KD›ÕfµY÷ßÜ_¸¿QÕZ—Ö%¹"–°vJî¿Xþb¹ˆˆ«ÑÕ¸i³0U˜,LCœ˜úpêCkíï?ˆÅÆ`û™íg¶ŸOÔõDáꪫ«®®TA„ºƒuëBqCqCq fí@2™L&-»º¢º¢ºÚ?jklk´øô¿VüZ°Ô¹Ôi ‰þ’c‰c‰ê„ùÊùJmëÜݹ6ý~ãšk,@ß1ß1ß1ððð¿Ãïð;¬x™­ÌVfƒ“­'[O¶BôDôDôÄÃñp<œ…Sàsøо½meÛʬ娌\\T§ÍVOÅS?þ ÒýU÷W"µïí í ÑXXærºœ’tU»žw=/âÙïÙïÙ/* •„JDh¦™fgÀpD6ônèÝÐ+Rs¼æxÍqŸÏçóùDæ‚sÁ¹ <<ö{ÐÉyi‘w‘×üÆh”Ú>{Ÿ]D$V«úñ1·€ËûŠöY[’Þœ˜IÌ@¤?ÒéAé{ô=úë Óö´=m‡ÈÙÈÙÈY0†Ãp€J¨„JÀ½C÷Ý;FÚHi«nvÍlÕlj>÷~ê~ÊâãßûÊ÷•[[)\|DÇr2:¦>z¨c¯©×ˆ«?ª€ €Z«Öªµ :T‡êÈ’Ÿò)°šÕ¬Î° ÙŠ¦¼Ê›¥c,èæotÌTþySyw,Þ±d”Yý'=žþ®Oè–òs”ÃÕ£¾Uß§9Íiàqâ î¨[ê0þPùß5Þ%E‘þ¦þ&pøåO<ªüï¿ò±½]<¶÷±Çóû>‚×Ñjå(IEND®B`‚routino-3.2/web/www/routino/icons/limit-69.png 644 233 144 2437 13061246467 14537 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÔIDATHÇÍ–]HTyÆßutpÐ$·++r×>4S‚ð¦UÉHíƒÈÂvmý€´ Û>6üˆØØÄÚ,‚@q©­%6-¡‹šÜÝD(aH¶(+/ZH\iòãœóÿíÅÌ™svÙÚ½ôÜžÿû¾Ïóœóþ¿DDdQä-à\ê\êL cg¥5žP˜Pøéa|IÇ6Ƕáo ¹-¹ ¥#¥Ãxba3næÛëE,~»ž9.‹Äˆ¿Ãáà&Ø•½+;á“0>Óî.w×; ªnUݸÙy³“Z0þ è zÁÂfÜÌ7ëM>;¿4ýC_âzãz£ïŠw‰Àòüåùéà #éP¼¥x Àë˜×1Ê úÀƒGyi¦1Ÿ 6ã‘|³Þä3ùM=S?ìG uSê&(Ý]ºÛÝ.xr§N3õ滀SœÂÚ´6  ïÕ÷2 ª_õàÀ6ãf¾Yoò™ü¦ž©ö#ïmËç°3agBÔÐoLë}z€Ñn´3¯¾R-ª¥=Ô´0f÷ÆûèÃøÓ˜2¦@›ÔZTº¨.¢Àh5Z™'¤ßÑïØø£z¦¾Ø ­þÜãîñéXx¦?ÓŠÀ8cœ!Äg”R jR©1˯xÅ+PÕªZU—¹Ìe[üKÊ( ¨§Àh2š1kòGô¢úa?c—~š5'¢ßk¶@]Q>åC™‘%/J^”@ËÕ–«-Wa¨v¨v¨ÖòáŸñÏøgà|Öù¬óYðòùËç/Ÿ[qõPTekqDÏÔû‰ú®M]›Š–ïWoµ³ÚÙÈwÁÜ`n0ò|y¾<ŽŽŽB~0?˜„¾ì¾ì¾lȳ’ž•\G\GÄ/âˆ;âÔ x£Þ¨Š`No›ÞV|7ŒWuŸî+Æõ³õ³õ³ †F!íN»Ónp>p>p>€ãáãáãábÿÐàÐàÐ Ôö×ö×öCj{j{j;TOWOUOA´ñ;ßw%øæ_S]©.°ôØErÁ\0~]ì#Ñ‘¨õ¼'[”S9eÉʬ–Õ²ZDÊ“åÉò¤ÈX`,01fÀ ˆ ôôôŠxãÞ¸7.bLSÆ”HC¨!ÔÙ4¹irӤȞ§öTì©©¬k©k±ðyÏ^7jŒ"+zþß©dPëÅ ¨9snqn–Ö,­YZùö|{¾fÌsÆ„t4MGaªgªgª{xìá1`?ûÙ³ÿ˜=9{ÌåP†žÕ³€±Ì§·n;ü‡Sùìçà™öLçVÁ„1a} ̳……'Ê[gé‘¥¡¡•Ä8À0sfÆÌ”ø_«>¢°ÀßW|lÝíu€æ¹ç¹÷ûίYÎo$ŒPe4¢ñ/¢DQ/«êS!uM]S×@}£Â* œ£‡àóÌ£Ôu£Ö¨EcÐ8l.q~c¯s¯ÓšÔ#ÎÿØ~+ÛÛÅc{{ÓfÓæ»‡ Ë“åxãË7¾ÔîXÏëõ©ûEŒþ©|z\f‰°z­^“+‰?ƒw ß-LŸÀŸwA†/Ã7ƒÚok¿8ÿõù¯ùžÜ|r`Ä5âëy½^߯÷Kí/Ÿ½Â/Ó.N»hëtëtXP± bálj‚Ÿ‚{½{=ÀeÈ¢ÌÿÈ$S¹€!ôHÁz>Y¯ï×ûéýu>?¡GÀQî(M5›j2ZîÿæÌÑù¢>à'È„X(ˆoo%ªKu`ÂÖóz½¾_ï§÷×ùtþ„c”""§þ [ü[ü ¢7bÑÑ ý}}L4©Té’µ5Z™Vê¨:ªŽb¬Ç 2ø)õçXu¬šhìa43š êƒDØÚ†u~}”ý"": ¡ŒP(#þþÀwü T©*e‚Óxð¹ä’ šU³jVP­ªUµ¦  ‚W³šÕ@ 唨JUÉÉþ“|:ÿÝ„ᩈșkØ÷îÜ»óå{(º_Ñs¡çœúêTË©Tw_·¿ÛÏ”ÕUßUßUýÙýÙýÙF\; ÐØßãïñ÷@cšgÜ3Žëóöy >õÛÞ’½%úhÏ\Í'"Òýwðñ>ÇðÐðÚ},+/+HõPµ¿Úó<ó<ó ´Z­"¶[‰­DÄår¹\.‘g³À)n7„¦ ‹kq-®‰dÞμyÛˆÛÚ­v«Hø× ÷„[‚"Ölk¶8äše–e_k›n›®¼)”ùÍÞ­Þ­àÜ^”_”oŒÄYì,vC³¹ÙÜl6âkö¯Ù¿f?œÍ?›6¥þÙÉg'Ÿ„ËW/_½|–._º|érZ5´rh%,|’{>÷<|—vÓ~Ó06l>hoÙúmýÊ+ªYÿƾ ~„Ñÿ%fîúWYqY1ûF{…½¶õnëÝÖ c9c9c9†€ ÷6ÜÛpÎ;wìÜ1#^. †áEé‹Ò¥°'oOÞž<°}hÛeÛÿô‹O¿ ’t“ÝÐF@]Bè§€ï÷9ö9ŒS[5929Ïÿÿ¼óy'*ÞoŒ7Ný¸GóGóGó!r8r8r襗^ºƒî ÔZµV­µYU©*Þ> >BiÏ¢‹£‹x‚ø¾º}uÀdòTrí›–ðõ—>V­ª™PQÕF`‹X”¢l’I&Sp”èK¨ã>-¤ìÊ f¨L¨]ÉþuþAÿ @F0#Jc@÷1Ýù#ºó¾“öNp<áÌêJl86 4ÇŸÆŸNu~d“ ÔSO}2§@ ªŸÔOÀx2vEK×Ò‰ªîØxlèÐ?É÷û«Îÿúþ+_ÛÛÅk{{=o°~DïÙ¿ŸêBIEND®B`‚routino-3.2/web/www/routino/icons/limit-8.7.png 644 233 144 2514 13061246471 14604 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–QH”YÇÏh㨵š9²=(AëÃZf  †™V4,Eí¦Ûòl½” E =8­ÙN…i «eFšV`m‘ ƒ«[¸M¸ê$S65ß7÷·3×ù¬žöÉû2üÏ=çüÿ߹瞹""²0ú+———Áqå1{â†Ä _5Ep½ ¶­¶­ý•z:õ4@š'Í~Ãz_û[ãEbù­|Ú. %fp´8ZlEQ| ¾[ñÝŠÄŒ®î†¤¶¤¶·T\­¸ Ðz¡õ?ï¾ï>€¿È_1¬÷µ¿Ž×ù¬ùåØGü"`¿n¿nû ŽXR²¤déχ¡¥P¶©lÀhüh¼Šó_` T €^ã¬÷£þ:^çÓù5Ÿæèp®q®-Û·lOjˆÛšu(W‚+„î9bŽ@ø£Ä(!d¼0“Íd”JP6eã“¥ºT§ê3Îa0w›'Ì(3îCù‡rBêwc¿±æƒïØÚÒkÖYŽRDäëZHò%ùó˜ö¼±£)U†¹ÃÜÁ4U´ÒjQPC 5€'N‹ýïx7Kë{Þ[axwx7Ó:?xM¯ 3üQ=Qaõ=°ïȾ#À$@øì¡`(+ēߞ¸Ÿ¸¡º¯º¯ºòòò?­ØHÞHÞH¸{ݽî^ðìñìñìÆg}}0|eøáðCÔLâ_£|š?ª'*ìñ/Ð<Õ<áHŸü ¿öæÓ›o>g¡³ÐY»6îÚ¸k#dÞͼ›yz_÷¾î}Ö9Ú9Ú9 ………°v|íøÚqi¸µøVÊ­”X5ÍIÍá×zRºRºT øò}ù`†gW £¾ãLÇÈÎΆKí—Ú/µÃªS«N­:ÝG»vù‡²CÙ¡ì®»Qw£îì­Ú[µ·ÊÒ‹?†sùÀŸÚá×zæ‰Ä—Å—±\ÄþÌþÌ&¶r™ˆˆ8'¿œ\<¹X$#)#)#Iä|ñùâóÅ"þ¿G$½?½?½_f–}È>dw»ÇÝ"õÅõÅõÅ"-ŽG‹#æ'/$AD$/Ê'öv{»8EâsâsX'¾¾f16›Eø+"HÇ_N¿¼èò"‘Õ¹«sWçŠÜž{þíù"ŽRG©£TäÁË/¼™ñ6e7e7e‹dx2<‘œ¢œ¢œ"µA­WëElÛ!Û!‰×|þ=÷˜úbv ºOž„Ü@n 7içÒÎ¥ƒŠŠŠðµùÚ|m°R­T+(Ÿò)¸¹¹AíÅÚ‹µcGhÞ1;Ì hž5ÏêûúÙûèV½%MFS¬%‚ÓAÐc¯Æ^½åQåuE]QW`¢t¢t¢¨¤’J˜*˜*˜*€`V0+˜eiÚN¼xQ„)cÊÂ÷ù[i™c¯ßë·Ì±o:£ŽiÕ¦¼ÊkiÞd•¬’e,c™…8H Wrƒÿ{ŽY&?.‡Ë˜üýf?ð½ÙcöRwÔ˜CÑA;íÀ[ÞðÔsõ\=L ÀI*©@%Í4£ |8|˜!³Ëìš¹Ã÷À•èJÔ•š5ùçìåœ}]ÌÙ÷ØÜ|Áþc@"÷‡Ý–IEND®B`‚routino-3.2/web/www/routino/icons/marker-79-grey.png 644 233 144 6307 13061246467 15647 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü |IDATXÃ…—mPSW·Çÿ{çä… !‰"¥R} ¼kÅ háúµH®/£B¥uÄk½Ôµu¤j±¡tÔ–+*•‚èØk­VEd”Ð^ñ‚vÔŽ>Œ-$)!%@È9{ß&øŒw:]_Îì½×úíuþÙk’ -ž™õكΠ…‡¼*û»ìﲿã/ŸŸŸÌ ç:®ãº=ÿ!úо¢¯a­£ÂQá¨à»q‡q˜d!!ÐŒf4X‹µXËw+“”IÊ$’%t ]B×íä—ô’Þ­%;}vúìô©¹—“–“–“FÌ¢¿è/ú“„gìš‹KKG£hz‚™‘Ùµaû°}Ø>.ÒXi¬4Vžh6›‡ÍÕ7¦L˜jøØó€çϸhˆ7ÄâIV”Á'Pcð.ÞÅ»^ÆËx?‡ŸÃ‰uuuÜYRRÂ6÷Ìë™×3/e¯Ú_í¯öQIk¤5Òš9x:OçéS è ²chÇÐŽ!u¨Cßh¡B¨*êN þcAÀì€Ù³Åè¥ï/}éû ­MkÓÚ€±‹±yâAЂ´…Q ýèŒ`¤•´’VˆxЧx Áª±j¬<8{ðìÁ³ÅÔW\}pU¸®ðPx(<~»$&‰IbÒ¬˜…Y˜Õñ§ìÍ„7ÞLÈX2–Œýúú@î@î@nì¬À 7ˆ‰éËÓ—§/®(­J«Ò ™ä)yJžPâU¼ŠWAI5©&ÕÄñG½F¯Ñk¹Mn“Û`¼ƒwðPv]`È †C}ÿ7á7á7AL4˜ ÌúÏTkUkUk½”••ËŠ‰±ÊXe¬Jˆ¾9|søæ¥›»Æ®±óÀu÷ÖÝ[wÜԞממå6nã6hˆ†hˆ@AAH AÀ;y'˜‰@$"‰cï°wØ;=FÑc°Y×[×[׃ÒÒÒð(›—ÍËæELŠ(E”"jA”ÀCxùl±ÓÓééôâÇ-Ž[Œx­EkÑZ pJNÉ)AÝZÞZÞZHR†” E(ˆ‰˜ˆ à7ø ~x¥á•†Wm¯¶WÛ tk»µÝZ ƒvÐ ŒM›<6˜P6¡lBÀ6²l#4Ú"m‘¶qñqñqñˆ?k_à |ABèizšž9™ßà| è"¤œ”“rÀô–é-Ó[@›w›w›7ðÞ·ï}ûÞ·ÿ…ÿÂMŽ&G kÒ5éšžkÓk‰×¯%€˜(&Љ@WZWZW\—Èóøômú6}À!Â!"È|e¾2_~Æ6Í6Í6¼&¦Š©b*^j„¡á#|B~$?’|€ððÓ¾Ÿöý´ˆ8q4â( ÑÆhcžGŠNŽNŽNÊN–,; 6è :ƒ¸¶ëÚ®k»€íÛ¶oÛ¾ øyúÏÓž,Z½hõ¢Õàª1ª1ª1P–-+[V¶Œ tÎíœÛ9—^WìSìSìûç g»³ÝÙ¾Ù)›zkê­©·VÏêYý•ÊGå³äŸ]gºÎtÑÂÙ äo >|¤kökököƒ‡ö„ö„ö€¨æ«æ«æt#ÝH7èF7ºqÛÆm· ˆÐEè"tÀxëxëx+[[[¬X°ƒwƒîÝ Â¿_Úzi륭dµZ®–«åCóø>O˜·fÐ šÑ+ÐÃô0=,»‰jT£º3ŠE³h½¦P­P+ÔŠË¸Š«¸ >iüÊñ+ǯ$?ê õ†z$ñå|9_õH KQŠÒç• áG8à]ê]ê] xxxh@`³=¶=¶=†æbÝź‹ub€â‰â‰â‰ò'ù“ü¹=+½Mïñ|žÏó?W›'E=ë…ÏÈr€¸’AgÐtÆæ |ˆñ!ýºònåÝÊ»âúÞ”Þ”Þ¨Éiršœ† ¾ð…Kë=ÜÃ=€·ñ6Þ0Î8ãp¸¥t)÷Rî¥\iSïW½_õ~%('*'*'þ¼'xOðž½—±;±“œB+ZÑ*Î‘ÅÆÆÆÆÆÂ}èCÓ1Ù5é褣“Ž6$[ZZ†RÛÛÛ’)—ºC»C»C¥M†i†i†i4™«¹š«á ăx@€hÈ!‡À$LÂ$púˆ>¢ Ô›êMõ&þFmamam!=9:btÄ舎!çzçzçú -©–TKªM$5¤†Ôµ®ƒmq7ήçi6Šb£àuçñÇwÙÙÙ[vyê»5 ¥¡41K̳ , * * ’‚ͯ›_7¿.kQMQMQMÉá2.ã²Í×Y1+fÅBÚÑŽvñ·Drrrrrr`sg®‰ ¹´»É¥Ý—vËi£q›+Žt¤Ó¯+•ÎJ§¸ÞZb-±–@M)¥”¢Ï‰šÁšÁšA6ÐQÜQÜQ,kQmWmWm¿wÑÑéèttnßÛ2¿e~Ë|ÀàÚ§vºùF@_v/P»ü/2‘‰Lr>¼,¼,¼,?YµNµNµî‡œ^ß^ß^_ÁZš]š]š-mruô^úF}£ÿ]w³îfÝM’ª¾¯¾¯¾°À6\V +…•ƒÿEÿpÅ{Ë]¡^ä’á/Ìõ']ÃF®à ® ÿi3‡™Ãð­4Aš M¸!*•ÊÀ%_wÏéžÓ=G_fm²6Y›øÝ9vçØcÒŒ~g¿³ß)˔ϔϔÏüÈ—ð^rò"”PB){€?ðþ`/»ß€+Qâ‹<c¡]#ªP…*i'¯à¼"¶•ž£ç蹟‡ -ZÄÂäÅòby1m’¥ËÒeéµWƒÎ :77ÖÔjj5µ’Ù86ŽãG\~+]€ÅAñ7ö‚v½\Ú݉ d C¸MÒHIûŸ ^Å«xÕÖw=&zLô˜H›dí²vY{çD¶‡ía{Ö?¾¿âþŠû+€g€tùs7–ƒÇñi̧“§IEND®B`‚routino-3.2/web/www/routino/icons/limit-108.png 644 233 144 2713 13061246470 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü€IDATHÇÍV_HTYþfg³IÓV#E(aÝk0‘hÍm-XÉŠþÐ"탭µûR’ÛCQP2,ý±ZWkX+S‚zño¨¤£µcd–™‰›k :j3Þ¹÷|û0ž¹ÓÒ¾w^.¿óûý¾ï;çÞóÝ¿ðiL3¦m¡Øø“>³5fëª?Bñ•4ì4ìüëWr‰s‰“$®&\Õžé±ÌËúÈ~@Çä“óˆ‡>aqY\†ü…ø$¹wÍÞ51ËBñÙVÒzÛz{6H–Þ-½K’õ×ê¯ñ9þhüIzó½ù¤˼¬—ý/'ÿÃÑMÑM†×¤Ål1dzAzÁÊ_BC+ɢ¢B’|õ6JI’Tÿ!Ç8‘OÒG嘌ˆe~¡^öK<‰/ù$HȤMI›rǾû¬WB Ï~'ËSËS%Ÿr›ä)žbô}$©«Å ¢U´’$ 4z,ó²^öK<‰/ù$H>~·ç¾#wÇìŽ!9M’J©-Ñ–Ú&å†rƒŠ8.ªE5…”,V »°“Á‘àHp„GÄaq8¼ƒÔ^ˆhM™ÏÏ¥"Ì •pVé``WpW¤üˆ”YEÍ:fó™ÈAmP w~¯¾R6(8'êÄSñT'd³˜E2—¹Ì˜/g9ËIQ( E!ÉZ^çõˆü9-[ËæCøä‹´i$?X‡­Ã>“Ô³ ìBYv¢ìDxY¢EiTÃp¢õ·Öó­çÉ—-/[^¶è<ÏÏϤsÆ9ãœ!‡ÃသwWº+Ý•äÙþ³Ýg»Ióݳ=bÇï‡ø8_VQV!_í…¶a½ÇØ]û°ö!I'IŠRój^\_¸â\q¤©ÒTiª$]£®Q×(©Òi‡ÈÕS«§VO‘ö.{—½‹ÌîÈîÈî oºoºoºÉGŠ#ÅA¯*^U¼ŠLmO}ú€|ügWQW– J´öš¦š&)¬÷˜°5Ûš×æ`6o}Þz?€á cøš¯aÁߘ°4siæÒL`qÒâ¤ÅI@SrSrS2`é´tZ:OŽ'Ç“ئmÓ¶i a¼a¼aH)N)N)¶Äo‰ß,oYÞµ¼ øà¬¬€%ôA® :ïMÞ@ê1QEQE´ã[ó¬yr¼ß°„%À㞨=Q€}Ô>jüíþv; <Â#<@Üã¸ÇqÃ}X4°h`Ñ0vpìàØA ùRò¥äK@ululu,àòú¼> ñ^â³Äg:Ÿáªy‡y õížvÏ0ÜÜ.LB4F1ªr’“œUQH’þ$ý ð.ã]Æ» `¤f¤f¤˜¨›¨›¨z7önìÝ8¬«Ã 4·5·5·æ óqóq g¦§¯§Oçeó÷çïRðåûòûºaliniË8€¯E´ˆÆ¼œ±uÚ:m€ÿ¢ÿ¢ÿ"°vhíÐÚ!À‘àHp$öAû }(8Sp¦à Ѓôhìoìoì³³³€cÎ|Î<ðÃÌÞ¾½}Ÿ¢&:j;j°žÿ;•l ÖkõS9;½nz0LS„OUiUZùÞûÞûÞKj—µËÚe=ï÷ù}~9œ˜˜%Å—b³ØLAª¥j)É× |aþNefi·ŽûLä :¨ê>Fjûµýœ‹pÅÐ8ʣͧé¿$Š[â–¸Ej.Í¥¹HÑ/ºEwD>6X,ã¿ ûXæ‹L’þOúØ'œ_‘ί¾R_‘\¦V¨Tx‚u¬Ó}ˆ·YÏzR¸…[¸I6ðïD,àGžæi Ѫf¨TxW-WË#œ_ÝmÚm’;õ‘ó¶ÿÊÏövñÙÞÇ>Ïì¿\Ý¥g!©ØÖIEND®B`‚routino-3.2/web/www/routino/icons/limit-37.4.png 644 233 144 2771 13061246474 14673 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü®IDATHÇÍ–oLTgÆÏL¥Ë€Ä!|pˆ.4Mš(6Û„”,, ¶¶üÝdca‰»©L°í‡ÖÕÄÈê6qͶ"!iùc*%M4þY-U³)eÅ-VÓâ@fafÞûþöÃÌõNÚìwÏ—›çœó>ÏÉûÞûÜW@DDVEžö4{š=1Œí´ò+‹Vet†ñi¶[ɿ߃¤SI§’ÝÉncÔÂfÝì^/bñGë™yY%VbE׊.[~•ÏW>¿2%Œ›¯Aü¹øs !ØýÙîÏzÛ{ÛÙ?|õÃW³ù³ù`a³nö›ëM¾h~ùàgú"ÛÛoûVÄ­ˆµ…k ÓÿnøO:lß¶}€çÏ3ÚÊ $ ó>̘ŽÂf=Òo®7ùL~SÏÔÏ#à|Ùù²¼ñæoÆ^0Ú®F—©<å( ò…|ªJU±úš¾€ Xج›ýæz“Ïä7õLýð<ÖQ.ŠˆüµÊÆÊÆÀ˜„¾ &“A'†ž =GP‡':d„¡¨ªJU²+»²ƒîÑݺ+<h0Þ2Þ"¨3U½ª#=ÌåR.À#Sß<Êû""™­ï‹÷ùbxl`l¸ @1è\Ë"£•VÀ‰g”°?~~¢p&™d‚þV-¨#ÙbÆ.Œ]€'ú„ç~9}Ä=»öì2YŒM£…Cç‡ÎCó¯›×6¯E><|<žO´öµöµö»Ô]ê.…Ž;w:îÀx÷x÷xÔŽ©!5¤†,|¯îÞá{‡Ñÿt]Jº”dééàž¦=M>¹Ó×íú¦ˆÈoÎËü+ë^Y'2ž2ûpö¡-kk^nCnƒ,ßÚzë…[/ˆ­¬¿ì‹²/D:ŽN‡H¿«ßÕï9›v6ílšHõêÕ7DÆëÆëÆëÄ %J”…R(Rlß-¾+¶#ÍG³fËr¸É–ÅKy=y="ò 2®p¤8Rț̦ÀÝM÷³ïgÇ9U|ªzw÷ÖöÖBÖɬ“Y'árìåØË±Ö´mF›µÍµÍµÍQ;U©*U¥…Ü î7¸þäÚçÚ¿©‚Ѝ“V˜l›lH¼šxUw Ó«–W-#´Lœ>h}öÿõû&|PÚUÚUÚ®ã®ã®ã0Ø4Ø4Ø‹ë×/®‡Ç6Ûx F¯Œ^½òËW­=§=§=R§R§R§ º¾º¾º2N¤7¥7Á÷Ù?yø Ó0÷ÚÜk ë’&4FìFUÈrØFämÇ׎¯E:K»wvïgÞÞ¼‚¼‘ÞŠÞŠÞ ‘d²?Ù/âQåQ"=zôY]´ºhu‘Ȇü ùòE–-Z:$â½è½è½(ÂÖ°FdËÍ-7·Üü|°o°OdòÉýûE†÷$Œ$ˆSÄ6e›áœÚ¥vÙFD$"r»>ùtæ/èšü–¼¬¼,–—˜›˜ ;Zv´ìh±v¢d®d®dZ†[†[†­¼7Ç›ãÍÍ›6€7Îç³êîÜmî6Øþm¹ÛrY guú¸ãDÇ Ó×n7D|ìôuþUç¬{bƦЋÙÀ,<xÔÿ¨­jTª±Ÿy|æñ¸®€ËÊóƼ13ƒ3ƒ3ƒ ªUµª]¦_Õ¯‚«+úñøô7Óß·Ãz¨ºwêÞ¦Âó׿c±aÓ‡žøX…®`QÿV¿®_2È #ê%j¤‘Fþ,³Ì20à 3À‚NÕ©,¢#üÁˆošúÚô1Óù—Lç-)Ž„Y_ýú ø»ò(ÁˆœæYbˆÞã]Þd‚<ý£žÔ“Àd¤c¯±— ï«/Õ—À¯ÂüPW–þ“ŸøSû¯|joOí}ìé¼Áþ3¼Mß'IEND®B`‚routino-3.2/web/www/routino/icons/limit-13.6.png 644 233 144 3042 13061246472 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü×IDATHÇÍ–ýOTWÇŸyfVg(„i:™Õµ+hšu!È‹´éÅ)H ñ·mÚ˜S“&Û.Õ4íÖ,Æu×dMx‰‹mÀÍRX4¥ÊÂji¤¼&Ðq² ÎÜ{Ïg.wÚ¿ÀóËÍ÷<Ïóý~Ï99Ï=""òÔÊWÀî·ûíÞ8¶×Zó®2WÙ¯þÇgt°UÚ*IŸ¦~ öEÚÆ6ãf~b½ˆÅŸ¨gÎËSbM¤\N¹l+ZÁïCÕóUÏ»|qü‡^p·¹Ûþ§A]G]@kKk 0{}ö:ÀBÑBXØŒ›ùf½É—È/ïÿL_’:“:mS’œ’,’@ÉÆ£ñ„±ðÊK¯¼pÏqÏ¡ì ÿXËZU„ cŽP6ã+ùf½Égò›z¦~Ü@FaF¡¼úÚ«¯¹ÏÅ ~¸o=óÖ3¦^¬ ø€X ZX èô<Õ«z°a ›q3߬7ùL~SÏÔû‘ŸžmÓnÂûbûb«†ú_Çœ1'¨÷´Im3¢ŒûÆ=ãh“Ú„6ư1l cyæ˜[EJÕhïjïÓcÞ˜ŒpœöÍí›®è¯eXD$ûpßuß ;áÇÝ?î} € õWmQ[diUâw4ÐôÐCO‚‘Óœæ4àÁƒ'a>‹,²@Í«µ ö«ý,Ñç§a´´Àv‡ÃNFã~VvêLÔ¿]ÿ6¨kFžÉÛûûÞÏ{?GM¤Ox'¼–ÞHÒHÒH4µ4µ4µÀàøàøà¸7N§ŒSÿÍøËã/CSgÓ•¦+¨íÿ®ÿ»þÕì<5u8ïpð߸᪈Èà›üéÒG—>ZÝùšË—®^ºÊcGØqßqÚòÛòÛòaáĉ…à½é½é½ UYUYUY©2U¦‚É7’o$[†B¡ÎP'ôôôÀžÉ=ßïùv̽øá‹òxº:¼9¼YÕ@ë†Ö `„â~œb÷¾ã}'ÿ9\8R8"B²ˆˆíœmŒØEF‡mDD«Ô*E$YDD2ÌÇþû,ö™HúÅô‹éEº7toèÞ ²³vgíÎZ‘ÖÒÖÒÖRßyßyßy‘á¼á¼á´elŽNE§¬[ÉDýsõÏ™ ÷Lߊ±ìOÀ=ëž ;aTÕWõ+ˆA#˜ÐÇœÊP¨ãê¸:nUŪX~üøúØo µFT@mU[YRëWø‹FïŒÞp?t? ;ù÷OúXBçׂޠÃêüø´QmhÔ§ô)«ós’FA}­¾R_¸À ÂK ¦Õ˜ƒ•%)Úu]׉©>mA[þlvþ 3è¢?ïüOî¿ò‰}]<±ï±'óûKÈÆ÷åtIEND®B`‚routino-3.2/web/www/routino/icons/waypoint-down.png 644 233 144 310 12002775154 15742 0‰PNG  IHDR Vu\çsRGB®ÎébKGDÿÿÿ ½§“pIDAT(Ï­‘Á €0 E_ŠwgîÙ œBp'ÝAâ¥Ø6¢` $ПÿÒ>†Ô¬oõ©ÛƒèÊM£ªF OÕœÓJ7ªåˆÜG€}@ÈÝ–¬@D´¡‹»ëí[òð<ÁS¼»¦`3 0óG\ÆW7;ƒ½©íIEND®B`‚routino-3.2/web/www/routino/icons/limit-103.png 644 233 144 2703 13061246470 14572 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜxIDATHÇÍVmHTY~æÃœ)c2éCÕ0g¢¡-‚5·`£(ÒV j£¨mƒŠ$ØÀbûµå&³!BÒ¶êTmjRfVZTš¦}l®&6M;ã½÷œgŒgfZÚÿ?—÷¼ïû<Ï9÷žç€ÉOæYæYfW46ŸO^•¼ê‹?¢q¥AšÖ›ÖwýDNòMò‘dê™Ô3âQa÷Ûý¦‚‰ø0¹qÞÆyÉS£ñ/ͤ£ÎQÒÉmm’¬­®­æ.òõÍ×7Ir´`´€ŒÇ*¯êU¿ÂKÄÇáÿðdRCRƒ©Ÿ´Ûì6€Ì\™¹2kw´ '‹\»zíj’|aya‘f’$¿I¦0E 2H5†b•Ÿ¨Wý Oá+>ÅÕҽܽ ׯ+vœŽ6<úÜ?sÿLŧՑ<Ê£L!õ $Ic“±‰R6Ëf’¤‰&2«¼ªWý Oá+>ÅÕƒßí±oÈÂäÂd’ïHRk%Å$1‰˵sÚ9jò€<+ÏR*ÉÒ+=ÒCêú€>@Ê]r§ÜÛAŠ™.Ó)õ¾ñ¼ñÃIEND®B`‚routino-3.2/web/www/routino/icons/limit-39.8.png 644 233 144 3073 13061246474 14675 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜðIDATHÇÍ–íOTgÆï˜*µƒŒÑð–"íÈB#Ô!‚(m4e‡FíBÍVBV³IÛ+ìiµÚ…l¢FÙÝJm³« (d4Më~X_XФՕa+ì VT^:=3óüöÃp<¤Ï—Éuß÷s]×ä9ç:€ˆˆ¼4ó+““óbÇüÚ¨'¼‘ðÆ’QÜS¥©ò?¿‡ù‡ç°~nýËH 5ÔEQd”U@TøˆOø@•¨4ÏðÛfôtýî¨aTD¤¥›wÔì¨Ñé"y7ÊúÏôŸæ?6757¡®ú¯N_6Ý Ü Ü àýý†‡†‡†‡Œ~ÄqGܾþçëG¯…¦¾¦kM×Pÿ]Ñ÷eß—†žú÷ŽŒÀ“¨‰t‰ˆ\ûºötíOòÔÈÔˆÚžôñü¬ùY©Ž$GdI–d k9Ör¬–5.k\ÖžOòìyö<;Œ­[1¶Â0t®õ\ë¹VH.N.N.†mÛVo[ ©ÿ\\½¸šàwŸÇ§¶Ã™Ü3¹¾õcú{¢-Ñ–¿R¤äHÉ‘p꣪GU¦Ödï«{_•øÍØ|xóa‘ÌS™§2O‰\ˆ»w!Ndᆅn¹²äÊ’+KDÌV³Õl9ë<ë<ë”gK+Ô µBK»¥ÝÒ.RQWñ~Åû"‹/§Œ§ŒKü%  ¦V‘Ò¼Ò<SéÜs䯌1½{9©‰ÔˆØ¯¿Üûr¯LVPÝRÝ"ÒöqÛÞ¶½"ããã"§ÃépŠ<.~\ü¸X¤üfùÍò›"}Ž>GŸCÄ0ÌÃØTúTúTºˆMlb‘ãkޝ=¾VÄ÷ÐgóÙDü+Éžd—I‘˜wcÞ‘öا±OÉ‘pù\ó\³ê€`I°þVÙ±µc+äÿ*WŒ#)Ì.Ì.̆ݻ;wwBÝɺ“u'aÎþœý9°èÖ¢[‹nÁyßyßy¨•  lUÙª²U°Ë³Ë³Ëcðe/u-uÁñ;'ÆOŒ@ØöÂÀ ªCT«þŒµO´OÀ£Kj{é_V­."˜øËÄŠÄ ¨î¯î¯îoš7Í›ë׬_³~ ¤¬KY—²ê]õ®zLWMWMWAÁXÁXÁt»»ÝÝnÈÈÈëgÖƒÖƒP3öΧï|Jð§ì¨´9ÛœÀ¼¨Ÿ™kéæÛÚäÚdã- ­|ê{êïï7ÞoPáŠpE¸ÂøÇÁÓÁÓÁÓ0zôþè} œrÊA™•Y™a²r²r²páÂÁº`]°¼£Þï½ß£”]»­Ý6ôø¡6§6GÜ–nÑsãYŽÌ‰æŠúݳÛ¨6P¿U ªÔµEmu@PfåU®ÊU¹@=õÔϪ/W¯«×Au©Ëê²>I@%ÌðÿbphpÀ2e™òÇñžczòõäuÄ9â€}ÑdVÿM…¦€?…GÂ#Fò³‡@õªÕ¸qãñ‡ î*ò?ÎÌ׆¿¦.†¼!/Ð¥'¿#Ö üôóä~¿•Ïííâ¹½=Ÿ7Øÿ„¹ä=Jþ. IEND®B`‚routino-3.2/web/www/routino/icons/limit-97.png 644 233 144 2374 13061246470 14532 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܱIDATHÇÍ–_HTYÇ3:©­f‚IäCh‚T4±åP”EQQfº=,ËBÛ@Åæ’ëCZ ™d%Ú†[=hiåËnmZ²TÒˆ-f;lÌxÿœÏ>ܹsï.Õ˾x^f¾¿s~ßï÷žû;¿{DDdaâWÀ[à-ð.°°·Æ‰§—§—^¶p›žž¿}Ùç²Ïä„sÂæ˜ƒíy{½;_ÄáwëÙqY(N ­'­ÇHàS°§dOIú" ÿx2®g\ÿ[‡Úµ7ú.ö]äk˜z8õà]à]lÏÛëí|›ÏÍ/§þ£/¾›¾›žW6/mž,Ý´tÓ²o¬¿/ƒí[·oˆ¤DR”Œ?L2UˆÅo]ØžO¬·óm>›ßÖ³õ-?¹r7ˆÀŽ};öetX c]p4ÿh¾­§]NsšLУzÀ8` 꾺€8Øž·×Ûù6ŸÍoëÙú–ù÷»mþv§ïN€öÍ0Ì:³ÍÔT¡*Dé¯ôq}Tº¦®šVÓjôY=¦ÇÀ¨4ö{ÁðÅF1JõÙF6˜^Ó ü•à·õ’úâ6TÔSSÑT7Æ à[Àl6›ù t–³øãÇUTQlf3›]ñ8qâÉ®aVš• vØ’ÔKê[~ÆÚ†àðÉÃ'“É«x§OèÀ"V±ÊÚ?€'EOŠžÁÙ;g“õ“õ“õ999-ç[ηœ‡pU¸*\]Ϻžu=ƒ?½¸úâjÒRíZ³ÖìÒKê[~Æ~ýºßw¿OæU+Ñ.i—œg­­­ƒÂ™Â™ÂXݾº}u;¬=¸öàÚƒÐ[Ó[Ó[럮ºþ)úý~鸻øî⻋}3>̶ͶÙüªÚÑ·ü,\0¨z`ªtªÔ•ÐÓô4_hºÐt¡ Öd­ÉZ“åÄËV”­([íííN¼5¿5¿5Õª?TïÄÕWªVÕ¿¨VÕê~Ŷ¾åG '+'Ë…·“o'c¯¾5÷›û´×¯'^O@I¨$T‚`n07˜ ¾[¾[¾[ÐÝÐÝÐ݆Ïð>ð/ñ/ñ/±±±—±rU®ÊY5©\z޾åÇ+bö›ýžQ½B¯{äÊ2,ÃI,±¼X^,OÄßèoô7ŠlŒlŒlŒˆd_ɾ’}E¤4µ4µ4U$< ‰äÅòby1ÀðD,C"ž°§ÃÓ!")òR^ºô’ú ?Ÿª1RôËúe§Æ¢¡h(‚àºàºà:(È,È,È„# GŽ48;R¬V¡u[ë¶Öm®Ò¸gÜ3î1¦™0:ÎÏÖØ'N¥Ýæ1So´7Ú TX…UØ1032323±•±•±•®à6·Órâj¼Ÿ;•écq»Ï˜gÌ3| ŒjªAíW»Ô.WÍ«bU 4ÑD“ËÈ1ŽqÌz–ÿÑÇ>ÒùРƒÆ €2Ch4ÒGJ=J|zFxÄ#—îÌg>P—4fífVš•h` Ã.þOwþ9û­œ³·‹9{››7ØCHeA·—IEND®B`‚routino-3.2/web/www/routino/icons/limit-14.png 644 233 144 2217 13061246467 14521 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜDIDATHÇÍ–]H”YÇÏL;ÎVÎ2 ÅD^x#¬vÓBŠŒRQLÈbˆÄÚ…yíÄÖE»^ˆJa*~@Cš„Á‚º®xµK±%èfB™)¥®Ö|œs~{ñΙ÷-“ºô¹™y¾þÿÿ9ïyŸ÷B‘úàÞëÞëÞaùî;î;æ;–Ûgù·%¸NºNþÓ;[w¶øïúïª)Û7ySïìÂÆwò™¸ÈvÀõF]%)?§ NøvYþ¯c9˜9¸–„ C†ºº¸  ïJÞ•€í›¼©7ýω/"Ÿñ žaϰk¼Þ !`_ù¾òý?Yÿî‡ÐñÐq€×Û^oÓno,²t °Ê*ƾɧêM¿Á3ø†Ïð[zŽŽ 'Μ8“Ùa5LõÀåàå áK 7¸A$W“«òœq3q3qòjòjòj ì~Ùý²ûv^}¯|ÊÌɈŒKó¥ù-=vŒìÑQX8°pÀ±äßõu}ݱR¯öj/DUTEì^Þ½¼{z½Þ€]wiþÒü¥yÖëƒõpúÐéC§ÙyY)C2 'ô„s ¿¥G€»»z‹ó‹óéªEÐoõ[`¹,—å¶_ê/õ—úá^û½ö{í0Ü3Ü3Ü‚@A Âuáºpä6ç6ç6Ã\õ\õ\µc¡¿¨zUïä3ü–·ê¡zèz.D²2Y)Œ„ÓbZØæá±]Ý tƒêz áºƒî Eñ¢xQ\ˆ'³OfŸÌ ñªíUÛ«6!žu<ëxÖa÷3N'¾4JϦg Ù-»‰묃l”²Ñ^q¨+Ôê‚Î;w:ïl<ü&nêÒ;ß(/Ê‹àÀßìŒ}Û[É0 Ø+…+…+…+ŽÇŠ!†ÕªZU+|8øáà‡ƒðþÅûï_3É$ Sx«É7É7_}+¿0Ç,«ølîÄÌ:?±8qâÀK,k¬±h>òÒ£ùÓ¹øµ9ö “?¡Â*lO~v‘M6ð3׸ö¡šh²9Ìa4¨+ê ’rDŽ8ñ7ü[ö[¹eo[ö>¶5o°ÿò+cãL÷IEND®B`‚routino-3.2/web/www/routino/icons/limit-36.6.png 644 233 144 3065 13061246474 14671 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜêIDATHÇÍ–íOTgÆï™j™É2 8LV ÎÖ­Z­/±^¤’hF¶M¥ÒىѢ«ÖF?Ø(kýÐì|Ø AÖU^’]CÚ*P¢ipm¨,d ŠÝŪ%ã:H•a ³²e^ÎóÛ3ÇCü |¾L®ç¾ïëºrž9×yDDd^òWÀüŠùsZ›wû—ÅõËó ÜÓ{¦÷nƒô†ô€Œ–Œí®õºÞ?{^ÄàŸ­§ïË<16R¾HùÂT’Äõ°mù¶å–¬þý5°vX;žÆàƒ®º.¶]lãCøqàÇ€PI¨ ¬×õ~}^ç›Í/õÏé‹ÀÜKs/™üòrÊË"àÜäÜ´h_¢Á·Þ}ûÝ·Æ^{I™ þ •TU„ £¯À,¬×“ýú¼Î§óëzº~€}ƒ}ƒ”½_ö¾µ91p÷/p8÷p®®íNqŠTˆ…ca€øöøvf@]S×0aëu½_Ÿ×ùt~]O×Oø1ŽrZDÄ»¶Žl-í=ˆ:£NÐú¢?D štªÔU¥ª v#6MÓ4MÃXŒ1ö )åŽ%ЦEÓ@ 'øa룭€'º¾~”DD^ÿ#XÃÖpx'FúGú^~êMõ&Ó|C/½  T*8pÌ2ÒI'€7îYû YÈBPAR!U¥ª˜¦3ÉÿaRO×Iø‰ˆ4õ‘æ©ñÔèlÚÊ»›†¿þ ¼­Þfo3êæ‰›ŸÜüÄÐóø |àm÷¶{ÛáVå­Ê[•F];¤Òøþ–ûïܼ—¼ÝÞnÔ­ªÁþÁ~COù=+=+É„Ñ:DD†>‚Ž'à¾}rlrL¹3O¦¿–þ3•Ö *gŽ3Ç™—K/—^.W™«ÌU.·ËírCQ°(Xÿ9ÿ9ÿ9ÃP°-ØlƒÂÞÂÞÂ^(}Pú}é÷Pô(ÿ³üϘyøëðÒðR冋¯^|´@ÂÙÔn˲e­Z'²¡qC£H<ûðìCÈÈîÊî‚«ÿì+î+&‘E‘E YÒiíŽYÛ³Ål¦;ò[Û Û ‘óå_VY-öâÚâÅEº´.­KÉôeú2}"þ)ÿ”JÄ~Ä~Ä~Dij׳׳WÄqÚqÚqZdÔ1êuOÌrÌrÌrLĶ̶̶Ld—s—s—S$ëïY­Y­"ã§§‹]„}ìáñáø°éŽ¨fý?öyàóL]Pî’?1c±}gûª‡ª‡ª‡`fíÌÚ™µP]W]W]–BK¡¥<.Ëã‚Ç={÷ÀêáÕë‡!t2t2tvnÞ¹yçf°Z,Ê¢à7Ûwh;4fbí =hŸjŸ–'ü$s¬©ÁÝöÝvã-‰­û)ôS&þ1ñõÄרøþøþø~ãˆâ×ã×ã×!È äÖ¢µh- î©{ê˃åÁrPQÐöh{´=È ,,@iK#þˆßÐãß»—ì^¢nSŸÐ÷\ŽÍMäŠ:ú,ÇÊTÓªVV‡AÕ«zU*_å«|èÊVÙ*( €‚Y9¶J*AýL9•@½¡Þ`Z-Hò—ŒÜ¹ `}b}žÃ¿ôÓ“FOÞŠ9s€S‰dV=±ÉØ$ð§øx|ÜH~ÎÓJ+¨>õ­ú¸À.Ó<å)¨QåS>`:ÙßÇãDU_, Õ“?©y>ù_Üoå {»xaïc/æ öÿAd㢒ØéIEND®B`‚routino-3.2/web/www/routino/icons/limit-143.png 644 233 144 2620 13061246470 14574 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜEIDATHÇÍ–]hWÇÏ®‰É’˜ÜæÁd)DÁ( Ñ(4ÐFU„ª±ÁO4Uª‚m)˜h…Vh,úÐ ¤A¨£é.¸jŒm¬B·I-¥šÐ¢M!±‰ÒZ!]ñ#®qwfîýõawvÖ¾{f8ÿ{ÎùÿïsÏ\™œx ¸}nŸ;'n»ßqðÌ¥™K§ùãö! \Õ®êkCnKn @^[^›úñíyÛ?5^ÄÉŸÊgã2Y #˜tU&ì&X[²¶$ó¥¸ýyx:=¶tmé8Ó~¦wáöO·¸[y·Ûž·ýíx;_j~izŠ_Ò»Ó»]7 cbÆDxyÉËKŠÞ;\/‚ªeUËþžð÷íë_ ›l] Œ1†=Â)¶=Ÿð·ãí|v~›Ïæëð.ô.·Ö¿µÞs4ðG46Ú|F'°}dƒ9fŽX­DA÷è\¸À±íyÛߎ·óÙùm>›?®Gžü¶ÃêÌÕ™Àã¨\• j¡qÂ8¡÷êSúš§†ž¡gè ^Q³Ô,Wÿê|6Gbscs1ÔoÆuãzrÁ—0V« @Ùü’*¨ø ÊsËsk, Õ Jæ}Ó6^3^ã‘îÔƒzgG1ŃîÓ}º/o¤‘F ÄE.¦à_¨rUÎ#¼ñü0äòãžÏÈXš­'!ìP/lÛ³mOr³õƷƷΆôìù¬ç3))){VßІ¡ C T*8ø@é@é@)øê@Ëèÿ³ÿqÿcgÇõ?q>ƶ}°íûÓêMëoà—À…À @ouWÝ%Ìf³!=˜L‚ÿ¸ÿ¸ÿ¸Clì7öû¡È_ä/òÃòÖå­Ë[!|.|.|räÉ=kÌ5æ¦ê©‘©ø9ÿÇó?ž'š·Yûºùëf[XCšHN('4çU‰,˜³`Žˆ¼'"â:J&7¸!"ãr_î‹xz#ÞˆÓ™Ît©“:©ÙY·³ngHTEUT‰L©™R3¥FDÏÖ³õl‘¦­M[›¶Šø¶û¶û¶‹ Ï..‰is…¹B2âå:*çDDDäí„È›”7I @øVø–sì­%f©YêìÌ¢¼Ey‹òàdëÉÖ“­ÐÝÑÝÑÝÞo‰·j×Õ®«]Ó §N+„›;n¢ цhTWTWTW€o“o“oôO¾b\1>õýhÇhØzÜ"êõk@â+°‡WÒå/ù+i‹nÐ ºADUgÕYw¡»Ð](R+‹•ÅDúvõíêÛ%©ÔGêEvWî®Ü])²Ø·Ø·Ø'ÒÙÛÙÛÙ+âýÕÛïí¹¸¶÷Ú^‡Î˜Š)‘¤žd¸¸Ÿ,ÉÍVc,?–o×TµWµWµÃ±ÃÇ;ülñ·5·5·5Cu¨:TrðùYó³ægAÎÊœ•9+¡æ÷šË5—a<ðpéÃ¥Nñz $PâÔØÿžJºÍ€pNåƒ9f=˜ÑŠhE´袋.P-ªEµÀxùxùx9Üóßóßó;ÂÌyæªVÕò(esbÄÏp‡;Ü„ §x ‚€þH7êFÖo˜íf;(Jö±™C3ÇÏícÏéüF¢3c [ÃÀKÖ‡Ö‡|B೟&šh&‘EV þ)§9ÖßYVG¬z«>Ùl.a®N[fïÔÿ…ýW¾°·‹ö>öbÞ`ÿ´X¼,(IEND®B`‚routino-3.2/web/www/routino/icons/limit-13.9.png 644 233 144 2761 13061246472 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܦIDATHÇÍ–ïOSWÆ-•h‹àTdHâˆb‚¾À)F™l †‰Cٜ ³7nbbFd&Æ1Æ_3kâBX8\²¹slm²Œ°1ËøQ1*b[ÄÖÞ{Ïg/ÚÛ[ý ݶ[ÇC~{ð[€oš¾iâLy¦<s[ç¶‚õ¼^¯÷ë|ñüâã§ô…Ë÷–ïÆ!iQÒ"! ³8³8ëýHÁhì|cçæ ³4€zH%UnÐ×½8¬ç£õz¿Î§óëzº~Ä€¥EK‹„€²½e{mW" ÿ|f|˜¡ë…;€“œ$”€PßQß!²Gö@XÏëõz¿Î§óëzº~Äxro·(—‡c†ÜÚ–pb8äGÊ-åzFj3Ú„6Ê-Å«xAë×úµ~Œõ<ˆ!©…•4%°r?œNù^„Êåà~T?¶•!„È=¶mÿadûÈvPGx]~­ø 1‰Ãâp“›ÜŒ3r–³œ’I&ÙËy9/çãœä$€,’E,ðn„ŸÃîa7€-` ù;â'ú¥.ÿ 5GjŽ€ü @[§÷|ÒóiϧHïó^‡×aY†,Chljljl‚¾±¾±¾±8CB ) <;; ç οtþ%¤wtäÂÈ=«­“Þêœê}k/ÿ*¸.„}ðYKCKCŒvÛÒ–ë-× ™æó täwäwäÃÜñ¹ãsÇÁÑëèuôBÅÊŠ•+a…\!WHð,÷,÷,7 šMƒ&Èöeû²}P¸·pgáNX÷âË¿½ü¡»µGí‘û¡½¼½ä»?‰Âä8ê8š¿QT  Á"!„H¸"BæÅæÅB¤ýœ66 „Ü'÷É}B¨jZ Ä ë ë «Îg‰³Dˆ1טkÌ%DpYpYp™ˆ-O«§ÕÓ*DúêôÕé«…pϸgÜ3Bl\[ð¨à‘HúnWkeke•ý?Uø*|BÈ_’Ç“Çó7 Xb_b׆àÞä½IP‹b×€âÜâÜâ\pY]V—Õø¾M¾M¾M°«sWç®NpV9«œUÐ[ß[ß[oÔݾtûÒíKW›W›W %Y%Y%Y°¨ÑRk©…æk_9¿rr4›fE³§ØS´!æèvtË6˜*˜*õUžX[º·tmé‚«íWÛ¯¶CçªÎU« ¯)¯)¯É¨[oZoZo—ßåwù!t*t*t +++a{{þlèkèƒRÓÒÀÓÐ{±÷"€ßë÷‚VœjIµÈ¶èáïûZ|->PEÎXT/Tz©ôtéih¾Ñ|£ù†adsÊæ”Í)`/³—ÙË ª«ª«ª &r&r&r`Cÿ†þ ý0^8^8^¥™¥™¥™‘ž‘š‘ G܇«WÒÏ4ZÞjy 8ñ+ëjê€ïô[©Ñ΀ÿ¥¿ü+ø{ðwÃXx6<ž…;×î\»s ´-EK”A„ÙìÙìÙl ›nºáqéã׿ÓÿMÏOÏ#e¿bWì€G׫©­©ô[IlŽMÙ¦‰0¬«1ý×y¤íÖvÇͱD©I ä1yL‹Ûä6¹ È ƒ #ÎZÖ°äÛ²^Öh“Ú$ rM”ÿÔ°Ø`›±Í™|bŽÅM~e·y·Ù˜ü¤)ÃÊ0P§Ž«ãÆäçuÔüQþ ši¦xÄ oË9<ŽÖ7¨£ê(aéQ¦•ià}òGõÂOOþg÷¿ò™}]<³ï±góû?mø5,ØIEND®B`‚routino-3.2/web/www/routino/icons/limit-192.png 644 233 144 2705 13061246471 14605 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜzIDATHÇÍ–ýK•gÇ/:= Ö‰&44ÓÁPרúA×qV–Ëı‘Å(œ p1¢˜½í-£ÍtF$ƒš•;˳ìE[H"NiЕe :mPÇzìd§Ù±ó<ÏýÙÇÇçlíèþåp½}¿ß羯û:·€ˆˆÌù°¥ÚRmIaÛö±å7þÝ— ÛGuˆú ꃾ]0çðœÃŽãŽãÆ€e›q3?²^ÄÂä3ý2W,Gœ;εlÆþÖ½¶îµøÃö7Ý`?k?û·›Ïo>ÐÒØÒHÜÿíþoþeþe`ÙfÜÌ7ëM¼H|ùü?ü"{1öbÔ_÷BÜ "¶2meÆ–pŸð^Ñ{E÷¢ïE+èã@ j €¹|¶ŸÉ7ëM<ßä3ùÃzæ¿3ÿxÿÃ÷?´  œ‚í)ÛSL¾ÐYàk¾&´€Ð7è˜Õ­ºˆ" ,ÛŒ›ùf½‰gâ›|&Xüûl¿]%ñ%ñÀ#€Ð0æsÀp†N„NR»”K¹P¦dcÂð>Ð|šOó*W›ÕæÙÄè3”¡PÚ§o>}“ ==˜ýà+L¯ÑÖh€2ù%RPæwv݈AcИÅ]­„òByL©&uCݰ•_ù•ØË^öZ~qˆC œÊ©œÀœàDDü ãUãU¦Ôt†Ò‡Ò)ûˆ}$cê™v´Êw—ïžýÎ7Ô¯¡¶P›¥£û«îÝÝ»a$s$s$Óâéïï‡úÌúÌúLŽˆßì½Ù{jÕV×Ví˷úoõ[;®Üa>´òå;Ì£=Ú3#ìÚ6~w]v]¨M`ø ?Óîdw‚;¢/D_ˆ¾çVŸ[}n5xxxÀ¢%‹–,ZK'—N.„¼ô¼ô¼t¸Ty©òR%8êuŽ:X>¶|lù¤­I+L+„oý1ôÇÓ3ò6ž¦þ¦~SصmI]I]ÊMçèäèdÄQÅé×ôkà6ܺ[‡äƒÉ“BûéöÓí§¡åaËÖ‡SšSšSjÕ$$$BQJQJQ Ôzk½µ^+ž½1»,» ŽWssZ~ý£»õwëÁÔ#àHt$ýàóø<Öµ×Wj¯k¯[…ùî|w¾›››!˜ÌæCVGVGV¬Z¸j᪅ã‹ñÅø ùjóÕæ«0pfàÌÀȪʪʪ‚2­L+Ó@m0 Œ‚ˆ1ó©¯ÄW¦ž£Õhê¥kÅ’-6¹.×e¾ÄÊ]¹+³Ky”GyDl¶N[§H05˜LÉÞ—½/{ŸHN]N]NÈPýPýP½Èĸĸďˆ3ÙáÌÙZ±µbk…È–O¶Tl©1~0v;EbÄ&6‘ùò±Ö¦µ‰ˆíF{T¿Õc¸&]³G©6éÛŸ&?M6{ЛЛЛàdÃɆ“ ÖN®h]Ѻ¢l\°qÁFØß·¿o4´5´5´Aì¼Øy±ó wmîÚܵôRÒܤ¹pvâ皟k¬Ó¯Ÿê:Õõ¯ûÿ[ÉEÍ¥¹¬–{ôö£ÜG¹ìv;,aÓ5Ó5Ó5àíôvz;ÛÜæ6<9òäÈ“#0V8V8Vž.O»§F¿ýeôTðËÇŸ=þ,‚¯¹ü•òWž¹•™ßý¾ý~ õAÝšc`”¥LY{7³rÉ%Ôzµ^­¸4‹Õbµ¨¦šêˆ| @e¨ ¦,üÁ+ƒWì{à™9ö?“?áɯè#À‹z¥^Iˆ]¸ˆ˜üìe{@õ¨ÕüÅîUlc¨ŸÔ€@©«ºCwRnͯù¿$º$>3ùŸÛÿÊçöuñܾǞÏì?‘ZPþGõIEND®B`‚routino-3.2/web/www/routino/icons/limit-25.1.png 644 233 144 3024 13061246473 14654 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÉIDATHÇÍVýOTg=w\ ƒS,“Ñ”I;4[±fi³tiZ@h¤IMÌ X[ÓdýŠÙÍR•¤Ý&šU˜D4Öúƒ¤(ZƒKÌ5˜ZMTDÈR¥ ttMq†ÑeîÇsö‡árG÷ðýerž÷yÎy2Ï}Ïû‚x-ݓĻU2£#£#®“u'êNä÷‡¾?Ääø¥ñK$ù{ñïŤ­}+ߪ·øRù±ë)}€Lû!íe˜tÎvÎÈ—J_*Íû<™p;|oÅ{+Hò×Y¿ÎI’Æ}’.º¤˜dŒ1Zë?)ØÚŸÎ·ê->‹ßÒ³ô“ý€ÌY–³ W~´ò£ŒÉ‚oÉ­¹[s-=­ƒä—ü’.Ré1’4>6>æ)ª¨$I… ickßÊ·ê->‹ßÒ³ô“ýØ£|{äªÁUƒ¤ÙK’Z~[ËÕrIqê>ÝGã$I1¶›ŒM¤±ÐX`, uÆ:cÉò+~E>ñ’Bš!3DÍ\¦7è ¤ü=ÉO֤פ“·ô­Qþ î%3b±Ø$1Ø3ØCrI²‚”·åm>ân6²‘”+rE®¤ëÔ©“ …¤I“&ÿoCÆ1DJ‡ÑkôòÑt¸‚±Á®Á.ÒÒO6¶p/’î¿H÷úÐúEcþé¦óÚ–k[ÈÆüÆ%K(}fŸÖ§ÙBísÛç¶Ï%›«›«›«ÉpM¸&\CNú&}“>;OÜâ·ÕoÔê Ê//üœösš­'7ׯ\¿Òíþ‹ó7(èÄÃY+²€«Ÿ )¯>(òù‘8uòTû©v(Á±`$ÎÞ:{ëì-`»l—íœ+;Wv® P+ÕJµˆïŒïŒïÄÌR*•‡@»·ÝÛî/C¹üÆå»—ï"1õº´¾åzËeUt:õ\ø¹pþ›@ wÿ<°i`“rà¯û7wo;·ûÕîWÛãö¸–pK¸% èÛômú6@¦dJ¦€ª«UW«®ójçÕΫ¤\Ê¥UTQ%ªD•(àÙç9è9H©ò™òœÓÀäÒ‚¥0çœ ùo‚ZvzvºÙ/u÷+îW؟쥿ôäõä‘‹ºu-ê"7ömìÛØGª#êˆ:BÖFj#µ²m~Ûü¶ù¤wŸwŸwÙÕÙÕÙÕi.Q•¨JTÙ¸´°´°´ ÿ­umëZ[Ïx?R)$Éì¬ì,³ß!{õ½DéW³—Ì^Üøt`ËÀ䶪ÕÀjÿê—W¿ 4/n^ܼmmmüaØBã¡ñÐ8àëõõúzˆQ" -–GË£Þ¨7êíÑÊMé•^ƒ8Ó3áèZ…VæIó¤Òï¯ã§ã§¯ÿüxñÇ‹@Ïêþ~®5 ÝÖn#ÑñïŽë×o®7×› Œ¬Y3²èôwú;ý€kÂ5ášJòKòKòÊ#•G*ËýËýËý@üxüxü¸ÝXæ7™{2÷iïÌÊ›•g}c\‹*5SÍ€Xq¬øúOàîéSÉ ›7l&Kž’{åcEcEähÏèðè0e,8V1VA&‚‰`"HjýZ¿ÖOÞ;zïè½£¤Ü‘;r‡”ÃrX“v<Øñ`iê¦nêö(£ŒG‹)SÎImR³O%Ï|RðI}*aù†í#Ó>6ã3âÏŒïPZ¤EZHi•ViM±…&i’&’e,cYŠ%˜`"ÕÑ$OòR|lFïi{âVßàÖUu«êHù6éÌrÙp.RŽêú5â5^£°õ¬'嬜‘3$Ïó<Ï“Œ'ïJ•a&ywÆù7˜¨1ÇøÐøäO9ÿŸvþg÷®|f_Ïì{ìÙ|Áþ1¢­´vTÌIEND®B`‚routino-3.2/web/www/routino/icons/limit-63.png 644 233 144 2411 13061246467 14521 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܾIDATHÇÍ–_HTYÇÏŒ™3lþkZ°?"¨Á#ûPNµ8&Ò?°òaÙ‡ÚW!# ¨¥˜ZMvZ‘ T†9Õ®ú° ,¥Ré²9¦¶²ã¿{îùìÃÌ™{wÙÚWïËå÷ïûýžsîïw!„y©·g¡³Ð™“´AËïÚåÚUòSÒ¾"Á±×±÷ùw{)÷@~{~»9lÙ:®óíõBXøv>íyÂrdÝȺá¨LÙ§ nKÝ×§IûüpßrßúË€£wŽÞ¸Ùq³ƒ¯!Þœ®ËÖq¯ë5ž_œú¿y?ó¾ãÈZ™µR(òù‹¿I&ŒCõžê=ccÊ rXÅ*U Ì2‹~&m¶Ž§òu½ÆÓøšOó'õXS±¦B¨©¯©w·% †#prÃÉ šoép†3¬cÖ˜ä@=QOpàËÖq¯ë5žÆ×|š?©GüólCUPëªu¥ý¬ì–Ýf›ÙÆ’úJ…Teüjôý`.˜sæ\zÇ0§Ìwæ;0~7^/ÀüÍ\4Q`6›Í,±({e/ Røi>Í/ì‚>ûÜqw|v¼”/%0À—`ž7Ï“ ”j@½SãjÜB?ýôƒšPjxÅ+^Ùâ8Ç9` T˜gͳ$˜Óø)¾4ROJØ•§ÐØÔØ”^·WЍ¨Š&×0 Œ Ôê uA¬.V«³t y†Q+Ô [ûT@@ù•_ùA]W×Õu[|§Ú®¶%TS 鹘ž“c™üR>–Ìãæq–èâÏPêgÕ«zé Ã¶#§i¡Tº§î?ÐG Ìæ –04^ ÿÓÙþ+—ííbÙÞÇ–ç öo½càô+{ÔIEND®B`‚routino-3.2/web/www/routino/icons/limit-3.2.png 644 233 144 2571 13061246471 14575 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü.IDATHÇÍ–mHÕgÆoOÙQšE‹ÈDH‚}‘ÌÆŠ±Fâé…¢Òͯõ´~Ô¼~·µ^”oŽo`Ý`=²=eî0w`˜-·åFÙ¿Ûwí»Äb’I&cÐ~`ß·ïƒùÈJ²’PvØÜiîÄë¹õ;üÊçö¹µÁZoÜUŠˆ¼û#$'gc †Ã3ü›øÆz`= D'£ŒÆ©£Ž: …Rbi5¦ÆÔPEUqõÕ´Ð*b•Ye„føCƒÁÁ Ìè;~c§ƒŠ£G!ú}Øyˆ4bߎð¬XµµµÐè ôâNè…ýÂ~Ãý‰ý‰ý‰Pw¢îDÝ èoï÷÷ûc|êŠqÞ8˜ŽžÖwü8Æz¿€‹ãÇA} ö9Ó/a~Íüšù5PšYšYš ‹ÕbµXAwkwkwkÌÐíc·Ý>©‘ÔHj¼9Þod—d—d—@ß}y}y3åÓvÖ‹êk?.‘ôÎôΫDÖ®-‘÷DDœ›v[ÃÖ˜5&RmTÕ†HÙÆ²eEÕ/ª_T/2½mzÛô6™‰' Ož4ˆ:sèÌ¡3"777"ž4Oš'M¤ï£¾ }fÊÝ|§õ}íæ¥ÍK³ïÁèÐèðÂiûêˆ:;‰‰©‰©‰)Ø~}ûõí×!koÖÞ¬½Ðëéõôzx#zV÷¬îY ¹ù¹ù¹ù°ÇÜcî1A•«rUÀINŸê1ãè;~Ò;Ó;Õ%^9¼¬ê×.üzÁÁ+v¯Ø½bw,ŸïÊwå» ¾¨¾¨¾ àŽÜ‘;)‡S§†o·Æ `fÄŒ€Ó6Я£úÚK$X,è»#r³ãf‡ˆës>‘.é’È–Ü-˶,ÉX•±*c•Hzqzqz±ÈòöåíËÛEÖg­ÏZŸ%²éᦇ›Š\k¾Ö|­YD²%[²Eš4h: ’éÏôgúEü“þQÿ¨ˆˆ„$$»WëEõgü¼Ñ•8]rËl7Ûc]d¾oæ™y0reäÊȰ=¶Çö€jSmª ^V¾¬|Y ¡…¡…¡…0Ò1Ò1ÒCMCMCMð¬þÙ©g§ ümø\ø ìãöqàüÿveÜ›œœˆ›c³­}Ö>Bê+uQ]Œ›W…ªP9äw÷a„‰i¦ã¡½ËÞ7Ç´­ÿœcq“_’/IÏ£¬{Ö=à{kÄÁPmê±zŒâ< 43Î8¨ˆŠ¨ࣄP¿¨Ëê2¨[j\£Ô%+ÍJàÎ*±J´I£Ó7Ë7KŸÔk“ÿ­ý¯|k_oí{ìí|ÁþÒh$ ïõ}­IEND®B`‚routino-3.2/web/www/routino/icons/limit-30.0.png 644 233 144 3063 13061246473 14652 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜèIDATHÇÍ–ïOTWƿà 0j‡ôÅ–EQ ÍXKa€ilt%цZlBˆÊ6ºÉò¦1M\}AÆ n ]6Û¦qLYÓ”X»ñGcZ5VS‰üšt:ÃfFF`îÜóÙ3×;ñ/ð¼™<ßóý>Ï“œ9Ï=""’“øHÉKÉK±ÇqÊûf=£.£nãqÜK½¥þçÈvg»^úì¥ÏôqûFò¼ˆÉŸ¬gÔ%GÌBº7Ýk©Nà¡ùæ72rãø¯7À6h\Òàƒ¡†¾øj€Nøõû_¿X¬^¬ûF¿1oð%óËÇÏé‹Àš«k®Z¦ =-=Mòkók ºâ `ßÛûÞ˜³ÎYU Ä€L2U5&Œ±~KÂÆ~¢ß˜7ø ~CÏÐûpT9ªD`Ëþ[|`üŸðÑ«½jèESœ"´°ˆŒdÔ u 0±±oôóŸÁoèúq?æQFDDÎÔÀßè¿Dok£ùÑ|ÐoG}QÑ„S¥JÕ›êMÐf´)m ÔQuTÅ\óøñ?CJUhMZQm6šÍõaœ„„ ¡oåc‘¢^°…máp*'}·}·°T™*#Â×|Ã7 TƒjÚi§=ÉÈnv³¨£Žº¤ze”åTQ ÞRo¡6Áÿ‡„ž¡ÿsÜ𑾛Ø;Þíx×`Ó‹ÇkG/^†3?Ó¦uïô½Oï}jêM\Ÿ¸>qÜOÝOÝOa*<ž2ÿkègõ³úYûF}£¾Q8—ê^r/¡¦žLz'½¦žú_GyG¹q´}7E¹ÿ'<9x&Á¹àœj[÷Iö¦ìM¬4Î5ú}>ÿ|þy¸rüÊñ+ÇaGåŽÊ•°e×–][vAáJáJá {‚=ÁÓÐBùBùB9ÂÖï¶^Ýz ÛÎm:ÇÊâ)ÕÞ憎ÄýˆjÊÊÍÊU^XÌ]Ì…‰âÇ+àÜ'î=î=pñúÅo/~ µ«µ«µ«Ðêlu¶:¡¦¨¦¨¦È4Pú¨ôQé#è×úµ~ͬ_è¾Ð}¡\Ç\Ç\Ç’ú–ô•ôÁ?Þû²óËN€ÏŠb;תµJyS-«ßêÇ)½zÞc‘ÂNo8-ß-·Î¶ÎŠãPæ;ÞÙ  D6Žoß8.b{h{h{(Ï–}Â>aŸY.Y.Y.‘„$$»»»#’iÍ´fZ“úgíéöt‘§ ‘}‘}I_—¾NrÓšcÍÁ™¢Ô²´,˘ɺ›uW䋆K‡.ÇÎwÖì¬Ò‡ô!]IJ‡ì!‘БББPe¨2T)2í™öL{DfÒfÒfÒD6·lnÙÜ"íˆvD;DòÆòÆòÆDæŸÌ?™"âßæwù]"Ó%ÓÙÓÙ"E#¯7½Þ$‘¥†¥ËïÕOê'ËXJÊ#ÑHôÁ"—/]¾$²÷hÓçMŸÓž³ÃþŠýYµÏÙ±ÿ"’É‹äEDfffD \®—ˆÓæ´9m"ÍÎfg³S¤ôDé‰Ò"ۜۜۜ"Ûom¿µý–ˆ+⊸""E¥EÎ"§HÃËûƒûƒ²Z¥U„*B´‹ ÏÏŠ¤4F "~ãðãaÇa‡yK4×òâò"ÌßšžFÅzc½±Þ¤[7¤éC ŒÆ@µªVÕ Ê¥\ÊOÀð€ªVÕªT½Ú«öB`<àøQú£¯E_bq=b‡»wˉ[ÉÍçrlMÕ>ES*¬Â(K²ù?óGóGÐãz\ƒ9jž7Ïç:ˆ9¡|ʇÒã3Kf– ™_k7µ›¹£½¨½¨¦Å/ù‚j{0Ý·Ü·2N¸n^7s¸Ïqm…¶‚Iõ/õúÆ&d;ÛÙĈËó‡ uPT·¹ßo>e>Å$åY|¸á»á¦Üß»¿Ï8-=³Âz¿„Í»6ïÊóI5¨}®}žƒSCïu uA|~|~|¾Í3V4V4VÁÁÁp1~1~1žokk€`Op_p\úîÒô¥i»ãêv–Ìæ·6¿e¶÷Ë‚lß–’Q“¿ID>q,qø W®™È㑹‘¹âXµeÕÛ«Þ¹Z}µújµÈýÝ÷wßß-²üìò³ËÏŠœ=7znT¤½¤½¤½D¤oßþ¾ý"kï­½·öžÈˆg¤|¤\¤uQ«ÙjŠãÜãÃÑá¨Ì8þåSÇ›jšjfÇ(ËN9E<1O¬ñÏòÀßèo‘Ç\$HˆÈ”¤%-RñEE¬"&¢6ªj£ˆ±ÔXj,ÙãÚãÚã©ì¬ì¬ìIF’‘dDdr|r|r\¤»®»®»NÄ]ê.u—Š$>L|’øDdFé­z«g…8ŽÈ)ÿÿùë¬ðÎõÎ5Çàέ;·ìkoô'ô'ì‘jµZ8ä:ä:ä²ýé•é•é•°.¼.¼. UéªtU.×\®¹\*¨‚*mÛÚ¶µmß&ß&ß&¸4ï‚vA³ùÌ/RÇRÇÀÒ#à‰ybª3Ù˜l´ gu¯îµmÿÿÿˆ D"]]]õ¡úP}ÈÎ[½wõÞÕ{¡¥£¥£¥Zæ´Ìi™cÇŸllhl€¿ÿûhçÑÎ<¾ŽB?„ÀÒS ’iÎ4_9/ƒ±Á˜5c^—?©"U$3–ÇsÍsÍsMdªlªlªLdMbMbMBĻջջUÄð<‘ª-U[ª¶ˆô-è[з@„zèñt{º=Ý"‹û^|Xä/é—.¼tÁÂçõ¯‡?þ@$§ç÷n%§õ°¶oåDÓIJ‰e0}eúÊôû¤Ú]í®vR#©‘ÔŒ Æ;®—è%z ¤FRƒ©A0>6N'Q`ôýÀfùrüY=öÃt'3N¸n\7ì=æ«æ«L2Åß'NP;ÕNµÓv«j‡ÚªVÕªZPÿTŸ©Ïòâ«õb’E¹=Vw£˜þÍ=ö›_³6¿7â@…ñ®ñ.»“·ùÙC] ¢*ª¢Àßè¥7ïÝ 0€RQ£Ò¨Dã°ñšñZ®ßÃèëëV§Úüìå#ûºxdßcæ ö ÛàL‡Ž¥IEND®B`‚routino-3.2/web/www/routino/icons/limit-24.0.png 644 233 144 2761 13061246473 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܦIDATHÇÍ–ÿOÔuÇ_|»ãä:mÔdfÄD®ÂÓt–8Ev¹¶6$ÉͲqâÖ¢­é&sÙæ•i­neléb¥NæLÄå:eé4óRvwÀûÜçý臻ÊÀ×/Ÿ=_ï×ëù|mïÏûù~ ˆˆÈ¬ÄW 9'9'ÙÇÉoZùô—Ò_zöHwÄ ©&©æÒ0³uf+Àã]w—-l®›õÓûE,þézf^f‰•°û쾤 ¼^-zµ(ýÉ8Þ{~‡?¢Ãæo7 Ðûyïçl…›7»,l®›õf¿É7_vþO_ÒúÒú’®Ýf·‰ÀÓ•OWæ¾/¸š ëÖ¬[0’2’¢’ ö7àÄ©V!B˜qg6×õf¿Égò›z¦~|'–?±\Ö¿¶þ5ǧñ†Ë_BÓSMO™zQ?°›Ý8Aé!€Øë±×™uR ‰$°°¹nÖ›ý&ŸÉoê™úñy¬­ÔDD>vƒ'à €q zZ¿Ƥþ˜þÑĤÊYå«ùj>‹ÅÆb¬¸Å n<@J•ë¯è¯ÕoDQ'¨-q~ð„PK-µ Î¨3êÌ´‚ NÃKYÊR Œå,P/«—ѨLðW'ôú\ŠÏ#Üé8Å̆º†:“Í(²ÿºý×í°oϾ–}-¨¡«C ýÁCq¥þJý•z8‘}"ûD¶•7Œ †CЖÚi ®…‡}Ã>KOÝk(k(3·¶ã”Ä.ˆˆ\Øßmûnüòöpùp¹Úä ;ÚmL¹sÜ™îL˜Û3·gn fffZ‚¹%¹%¹%àîq÷¸{üβ;Ëî,ƒ‰¿Ä‹~ZÔ·¨òCymymLÝÝ  6ï¸ï8¨æø<»’љѩ|  jƒÐóÅÑî£ÝðÁGÍ5Í5–ÀÂÛ o/¼ ‡nºuè´øZ|->ÈêÏêÏê‡Ú•µ+kW>×ñ\|Q÷õÖ¯·LµOµClÙ 5C)_rÊ<Û6Û6 hКµfÏk7¬Ý ÁÕþÕW_)p8 "«ŠW¯*‰Ùb¶˜MdÿèþÑý£"î9î9î9"ç«ÎW¯îîî–¡ïÒwé»Dœçœçœç¬¼ë†ËLü­­ÓÖIPÄþ‚ý9•2+ebìu®q®Q>oü=Üò»÷w/8zÓ›Ò› ¥¿åÇ–ld#tUwUwUCÕ‚ªU  ð^á½Â{I‹¤EÀŸåÏògÁäŽÉ“; ÏÖgë³Aaqaqa1Œ,))…Ü›Ïô>Ó ?§¸\áœps3þÌøSùDÏ4ÿ±Ê(‡ÖÓGZ´ªMi½ÉÕÉÕL•~SúYégàÊve»²ÁØØØÚ’ƒ•+V‚ggg•/š(š(š€ñŠñŠñ ¨Ï«Ï«ÏƒŒ­uuÐt¿±³±“©„›l‚¯ø À›øÇØ›8•lñnñ„/~Jn¯««€Ñc£—F/¡Æ~;;v´N­Së¼xñ‚6  h0î÷Œ{@9”C9 Øl¶ƒ*Seª TZ«ÖBðrp48Š2þŠÎÎbq=boyßò“‰S?ž–é+|,Wå¢=ÈD‰æW"D…BÚ´jðò.ï‚R.åP3Ô 4U—à÷®®8‚Ž`(•k¦ýçVÿØM“g³g3¨/ãÎ¬ÎÆœ1'(ŸÖÃDùˆc³œŸfÞç}`6³™ Ĉº®®ª«@$qS7Òt¢ê‚Ñ#À÷¦óoHÝ Üÿ¿ó?ºwå#ûºxdßcæ ö_UÁ%º30®IEND®B`‚routino-3.2/web/www/routino/icons/limit-33.8.png 644 233 144 3045 13061246473 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÚIDATHÇÍ–ÿOgÇŸE—• x­.—Òƒ« ^4±šåv½š¶iˆ6‚h+1•ŸZ“&m[° º¸†úå´==Š)jR%g4wê%(Hz]Û•¥(Ûפ뮬³3Ïë~ØgÓ¿Àç—ÉçÛûýž™gÞóB±$~””´('½mä¾²ð•¼S±ø  ¦M¦Mÿý¾øs€Œ/3¾Ôn±^×ûç…0ðùô¼X"ŒDJOJ©<›‹6-ÌŠÅû¯‚¹×ÜŠÂ;çÞ9ðÍWß|Å»0ùÝäw3å3å`Äz]ï×çu¼D|ñÉoø…€ùßÎÿÖ4) R¹r7Øšb £6xãµ7^ðÍóÍ“I ÞÒH“å@ ú $Äz=Þ¯Ïëx:¾Î§óÇôÈ´gÚ…€Š7+Þ4‹ Ü: ï[ß·ê|J/°—½¤A4 ¨5j WåUL˜ÀˆõºÞ¯Ïëx:¾Î§óÇô¯2,„.'Tyª< ”蘒£ä€6¨ÜQî Ä•JíW-  :õF½ h#ÚÆ ñ‡O#©ý¢(Š‚½«X+hj ª&ª&€ Î¯¿ÊŸ…¢ ÌAs0˜ÌÏ€gø¯‚\#׿4Ýtƒì”²ðãÇŸ ¤6Ú ,FZ>’ä#àS>ã3i—v¸âøYq>¿?¦G0%„ûY´c뎭:œVrkÃ÷ç¿?®¿ºÚ\mÈc7n߸mº‹ÝÅîbpu¸:\0äòyºöP{¨OŒ›‡o~qó Ø?²hÿò‡?tt|rxGîŽ\ Ó#´^!„zz÷ôîoæ´oÚ'·ý®yñ ‹_ R][]Y] ¶)Û”m N8yàäÈYž³Õg8?Í|ÌÇ ûäEy8Á N yGŽÊQàq¼¿Q½¨^D‘ÿŽú£~ WwþêyÕó€'¿uþg÷_ùÌž.žÙóسy‚ý?ÆY,ó¬IEND®B`‚routino-3.2/web/www/routino/icons/limit-73.png 644 233 144 2343 13061246470 14520 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܘIDATHÇÍ–_h“WÆOckSüÓ:±Z„‚)4Ú"ÿ4tE™´T#uà¼P'ÂÊnL/ŠL‹Œ¨Ð‘ÑZôf‹æ„ŠRv¡M†! Ê*bq`¤h5†¹6ùÎw~»ørò}›ÓÁ®zn’÷yß÷yÎÉys!„ð?¸ê\u®•VìúÜÆÝÛÝÛ~´âóÊv•íšü ªÏVŸ¨‰ÖDÍ);Öy]ïìÂæwêi\x„ T^¯¼^(Æ'¡·©·Éý‘Å¡êFÕ? 8|óðM€±‹c郙ÄL`.0;Öy]¯û5Ÿ“_œü‡¾Pq»âvÙïP¹´r©àíôvÖi<­‡îÝ;ÒKÒK” ä,°œå*äÈ¡WÆë|±^÷k>ͯõ´¾åG@m{m»ÐóiϧUß[ S?@ÿšþ5Z¯pf99# ÷É},€Š«8e”ë¼®×ýšOók=­où?Ûo>†=î=nà @á>˜.Ó*&dé’>éCÉÏd¯ìÃ4¤!A%UR%AµªÕÆ#ã¡ñÌGfÞÌ£Àå>å>ç"ç"ç"àMySÞk‚5ÁX­V«Õ ’«’«’«lƒæ×…µ…µš_´õ-?VN¬œP×afÃÌÇ *a}AÌʬÌÚÙQߨoÔ}á¾p_ÒÞ´7í…‘ÌHf$cþ1ÿ˜ÖGÖGÖG V«Õ:ŒuÊer™SOë[~Ô¬¨Yaþ™™ŽkÿF=UOFi´Ûg‡g‡g‡Á÷Å}q˜êšêšê²ó¹m¹m¹m°{|÷øîq¨;Pw î¤<)OÊã0v[FeÔ9f´¾åç?wLöÈnÙm£‘L$ÉÀÖú­õ[ëmü’¼$/Iðwú;ý6îoö7û›á w.ܱq¹ßh0Þ¿c.!r\à×_„ˆÝÝú® jRMмøB‡DiÅU\Å•ÁP0 Ùx×µ®k]ׄðìðìð좺§º§ºGˆuWÖ]YwEˆ½Ù½Ù½Y»~É”¸%n‰|I¯¤_ôó¾[‰4æŒ9 ÅK^ZSàuâuâuæ[ç[ç[yg-F‹Ñ¯’¯’¯’ Gå¨uL2ÇÊ1x?t+ÿÇ "ä@Ë)§Ô1uLsü :Ôfµh ›nsÈâ-óšÿƒsì_&?…û2&cæ€9@ld#Š 0ðîŽqš0aP?©q5|G‚ Ì£æQ 6_‘ÿý“ÑþW.Ú×Å¢}-Îì_ ¯kö|%ù¢IEND®B`‚routino-3.2/web/www/routino/icons/marker-51-grey.png 644 233 144 6142 13061246466 15631 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü IDATXÃ…—iPT×¶Çÿ{÷é‡ tÀ]L!h¡âƒ‹ !NÑ”‹h °$î-J’”¤4 ˜Éõ†Dyˆ&O>¯2ÜtbÀðÁ’’´!Œ „ÐiÚFz<}öû@7XÞJe}ÙuÎÙ{­_­ýßk¯Crrrrrrà…i3Nt57À p¬&çrÎåœËÌ'ïQÞ£¼G¯†±yl›WøŸ¼ŠWñªåïØ46MÃNà<Îã<ÉFB ÝèðÞÁ;ì„t›t›tÉæF¹Qnôþy2A&ÈÄá’\ï\ï\ﺎüäüäüd¢çø>€lœæš\\^t0ш¦W…€f˜aŠT¤x/âE˜m~6?›6·7¶7¶72ÇíÛ!·C„¬ñ„ñ„ñ„]Ÿ)Š€¿Èœ{{{×bi,¥ ì&  «ÈQëQëQ+€F4¢Ño§á4œ¦ñŸv‹Ýb·øoR¯U¯U¯å£wdìÈØ‘Á]õ2y™¼LPc!b!xÄ‚X8ô =<àOñO#Áé%½¤<ã1ƒ3z=žè/û²ì˲/ùÝý ý ý \‹D.‘Kä¿Þä·ñÛømk’°k°fx’Ê[å­òV@ì#öû|rÇ|Ó|Ó|Ó“úuõëê×ùÍiÉiÉiÉ\ËÜsÌ=€…|3ßÌ7B®+ä‚C':Ñ ¸µIHiÈ8'ãù‘üH~X!+d…àœ©ÎTg*àµÄk‰×,tûWïPïPïà7»ã»yÜ|$¯&¯&¯fã {«½ÕÞz³ÕsÒsÒs’¦¦¦’V¯‹^½.‚NKžÄDLÄÀl¤B @€0„! ˆA bøÃþšÐ„&€Å°fÒLša2¦S©ΩΩΩX¤iŽiŽiÑI"%‘’ÈM‘ a!,äØv‡Ò¡t(¸ãqÇãŽc½×-¯[^· q‰Y1ùÓäO“?¦Ó€  <å)°‹ì"»pý\?ׄV„V„V´›vÓnÃÆ00a°NX'O*žTþÍþÍþÍ€+Ä ±ðôºãuÇëÌqâ6ÄmÀú²Ë>,ûû‰ýÄ~ǶS>äÿ#}Þãyç=Ɖ%±Kb—Ä’bìÆnìžE‡¢CÑ¡.-¼´ðÒBà» ßmønpcûí7¶U|Tñàx×ñ®ã]€Ýb·Ø-À¶Ö¶Ö¶([P¶ lPw¦îLÝÌZŠP4ó$qÇwó¸ù8›Áf°ðuØÆ°a‘-o–7Ë›av9‹œEPˆ ‚@Ÿ´OÚ'Â~ û5ìW å~Êý”û€CçÐ9t€L/ÓËôM§é4èÉèÉèÉJKKÓ˜iÌ4,Ë\–¹,s–“’BR0%S2%8ù×ò¯å_ü8fqÌâd·Ú mR|Œñ1 ¡×éuz}f½8p³Ù]v—ݺºº€‚¯ ¾*ø ø"/‎±Ž±Ž±Ùù‹ºu/ê222€`k°5Ø X6[6[6?“Q·¶ÛІ¶Ùøômú6}À9œÃ9BE*‘J¤b7L+M+M+ÑÇÇð1| D¢xQ¼(̽ÒëŒuÆ".D\’¬IÖ$+°hߢ}‹öWJ®”\)Æ ã†q ¯“×Éëå+ÊW”¯Üîw`fa–g@ 0À0S¾ÜñDSmSmSmè£jª¦jvƒÊ>•}*û”/êóîóîóf7´5Úm €p„#^Çëx°=q{âöD I›¤MÒ!·Cn‡ÜvúîôÝé ˆ=Äbà᪇«®Â¿[5ªQ `æ`Î3 Ý#ìöÌÔ]KÿÖþ­ý[݈nD7‚¿Ëúd}²>¾ˆbv`Gîy.‡ËárHv]a]a]¡Smª2U™ª ‚…`!¦Ó£§GO-{Zö´ì™ ô äAɃ€E±(¨üT~*¿ç$¥¤””tÝEw;§ßÓïé÷°ñ‰|"ŸE•®JW¥¢‰ŽèˆÿEœÄIœ$Ô§Þ§Þ§¾àˆ$N'‰»2lh04Dý×'®O\Ÿp’A"À3Úm¶ÂV™U™U™ûåØ/Ç~4[4[4[€57ÖÜXsð®õ®õ®„x!^ˆŸ²eØ2l€u•u•u6ãŒ\&—ÉeH5Ç5Ç5ÇóðµákÃ×h‹äsÉç’ÏNr :ƒYrtèèÐÑ!÷p÷|O‹õb½Xß$Zñ´âi…Zü7ñßÄÃâ7ùmòÛäGêGªFªFªÀ±Gìñ5ø| €wŠwŠw € Àí@9ÊQ ÔÔÔN•SåT¡¡¡0k‡´CÚ!ì¼t5èjªäåå­ LÄDL´|'BŠÐÎ}”ž§çéyQ+=IOÒ“#º„.¡k¯]¡UhZ épÓá¦Ã앟³~Îú9 ×|·ønñÝ˲¾e}Ëúž\„EX`6aÓ, ûT 8phÐ4©˜TL* ¸é}Óû¦7¯÷‰ûÄ}ÀôÍwD Q$ŠDuî›®³œŸ«ÍsFN÷Ü1r–œ%gëÒ•t%]™¥Á'øŸÐ3UªT=à÷eF™QÉ$™$&¡EhZè ƒ@"ñLS2ŽqŒB•P%TÁæÚrÏêüêüê|硉÷&Þ›x;- ”J¯åŸ>|ⳋ\ä’¢½èå×¹ûQ%1ˆA¾™ÈD&Ñ„iÂ4aš¢7d)²Yʵü‰uë&ÖqƲ¢²¢²"ç!w@rŸÜ'÷a›vÀ ,³]S1SQ_êK}!mÖ5ëšu,þ^Ù½²{e¢"¥ÒGé3lµ_µ_µ_}¿ #·#·#`:¦c:ÌuŹä5»Æë‚‡à!x`®ö7íoÚß{¦=Óžù~ržržrÞÀõîÊîÊîJQQÍ›5oÖ¼ÉâÉAr„TøVøVø rÈ!Øö„=OxÂÃò»îwÝï:\«]Z»´v)æ*õJ½R+…•ÂÊ÷ ¦¥7luIñ´ë¬mt_Ä}ü\¿$R÷!uÕÝ"Ô¢µÎC$šD“èø7¦9~ø—c¿c¿c¿ð×]Â.a—@W‡Ÿ ?~Û¦5 ¥¡46>›Ïæ³!=t6èl3X¥ÒG‰zdKeKeK‹þ2}h²Z„b¡X(æN»vöoîËÏÏÏÏχÉQ¸^ÌhÈ¥ÝC.íž&§È)rªþ;Gãh\–iHC=Sé¨tT:øýÆc‰± J)¥OÜ™¨³ÔYê,‚y¸x¸x¸XÔ#;";";ÒQm±ØFŽ|ÖóZÏk=¯.@µk 8SoŸ/ÌÏMP¸üŸK»ÿ «««(zC–.K—¥_ËŸPM¨&Tœ±4§4§4ÇyÈÕÑÏmŸß>¿}>.6¶6¶6¶’ÝŠ.E—¢ Ô‚ZPÿµ‰{‹{‹{ËI ®x[\£åy.þÀbcccccÁ»Û™„I˜„п¬Yÿ2þÛù’ó%çKwùéÓšxflÝØº±uó+ŒÆNc'û‡ö’ö’ö’sÕSÇSÇS‡(S¼Z¼Z¼ú]?VÂJXÉÿTO7Ü¢þé»^xѽ®DñÏóü‰ývóPƒÔ8s™†i˜&¶—–ÓrZþ¿Ö­Ö­Ö­ÂËâbq±¸˜vŠÒDi¢´Û AåAåA坯êzu½º^rKxAxAx]pù­tšÿˆƒâOì9íºÊ…3q¹û$™$“ä;A¬†Õ°šÃ©òÅòÅòÅ´S4( Ž, …B¡pÿo]I]I]IÀ4 ]þÜ¥åÏ8þÄØÙÑ%Æ`IEND®B`‚routino-3.2/web/www/routino/icons/limit-33.7.png 644 233 144 3020 13061246473 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÅIDATHÇÍ–ûOTgÆ¿(Ž^6•›Š%¡®5³”¤‰ãŒ6i›Š0Û4^‹YjÌʦݖf7² 6©î:6.šÐ¡+»,’Û¨5MuSÁŒ ² 2\ Œ—™sÞÏþ0sœiÝ?ÀóË™ç{{ž3ïyŸó ˆˆÈŠÈ] .#.#nYÇý._òê’W7þ3Œk40í6íþO,ÿbù+½+½úí(6òF}l¿Ht~,Ÿ— $6%6™ìü ¼õÒ[/-YÆms³¹ùIJ¿)ýà믾þŠßÃhçh'À#û#;D±‘7ê~c^ì|ùäü"°èò¢Ë¦ÿBââÄÅ"°nǺYeá‚»Yðæëo¾0?¯â@’HRvÀ㚈ÁF>RoôóŒùŸÁÖ#²-e›¾]ø¶ùËpÃízø0ýÃtƒ/Ø |ʧ$AÈòh{µ½ÌƒjSm˜0Ay£Þè7æó >ƒ?¬'º”·Šû‹ûAŸv„î3ƒ™ ÿ¼¼O0¢Té3ú„>¡{¡ÁÐ è=zÞÃ3—úAͪY”·°za5AmÐôBh*<_µUUÝÎèR‰ˆäxÀì7ûý ïïèï~à5P6e#@4‚:£Î¨3€¾ÕTS ¤BJL|–Yf&5Keˆ€× ÂgðÖ#<©igÙ»ï¼ûŽÑ¬[oï¸õí­oÁ}Ú]í®FuÝë舎ïÛÒ·¥o ¸=nÛ݃݃݃ÏþcCÙCÙCÙpúß§ÛN·÷ ÷˜÷ª~ ®«® îåL:«[¡ì@ÙÐ+ÂzDoéþš7‡Á”©‘©uèW•Ë_Xþó®}®"Wd=Ìz˜õê«ê«ê« 3-3-3 ŠëŠëŠë U¥ªT{:ötì‰ k½Öz­õäoÍßš¿¶OlÞ> ò7æ¿ßsãÅ/ªCpÉ{É ¡Ù°žøã*yUòª³ï›~ë¹á¹aúõÄ¿fZgZM»ÖmÊHËH“„WŽØ>³}&Ò{©÷rïe‘MÛ†7 ‹ìT;ÕN%bµYmV›HOgOgO§ˆ³ÜYî,Yo^o^oIÏKÏKÏ)½Sz§ôŽH =ðcàG‘µƒk¦ÖLIÂûž#×\7íâ–[–["ñ«kmµ¶53ÂÄŠ… zŸO”O”G·ýãYÿ°ŠŠŠ }:}:}nn¸¹áæPnåVn(,+,+,ƒŒ’Œ’Œè6u›ºMÏ.é¸gÜ3îͽ›{7÷ÂíÖ¾ }¢|j×xÞx°°2qe¢Þ'ÚNËbËbÕóÛæ·Á?v7ímÚ ¿9`ͶfG;N:N:N‚ó¨ó¨ó(8-N‹ÓÍçÆåÆåÆAí¹Úsµç`rhrhr(fo\©¾R}ì´¿g/ב££©£©€¶¬eY‹jUk¼c&/LÂL €:dÿ¼ · —ùdgr~r>||ðñÁÇ0vjìÔØ)pÔ:jµT™T™T %-%-%-ð`탵Ö‚µÊZe­Õ£zT¸º\]®.ðüÝSã©yªk^»æc®a¬a̰î">VÓÎO‡S?Ýæº5ôÊÜ£¹Gà»î»ê»ŠÒöiû´}Ñ' - - -ßEßEßEÐ-ºE·€z¢ž¨'0Y0Y0YTPALçO¿<ý2ÌeÌÙæl(Ð÷ëûka>ôÃÇ3„Õ´ í¿ð±Ea_Q~êco¨7¨?©ê¨•£r@5ªFÕãNåP`#ÙórÍ1Ít ®Ð´Ÿù˜Ö¯˜GÍ£±>f8ÿ¼á¼®Wp"âÌ߇¦BSÀYmD‰:?•|ÌÇ ®ªïÔwÀyÎs˜%@Ô}uWÝ´H}Šö‘öAþ¢Ù5»¡2ØAÈïŠÿÎÿü~+ŸÛÓÅs{{>O°ÿ{><•çûíIEND®B`‚routino-3.2/web/www/routino/icons/limit-158.png 644 233 144 2731 13061246470 14605 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜŽIDATHÇÍVmH•g¾Î‡Çs†fy ûn•ak K±6ÊNΖµH“2¬A&f;«A‘–d ýHd[Eæd6èû0ˆ “R %(Õ4Ï(±â€n³|+Ï×ó>×~ßÓhÿ{ÿ¼\÷Çu]ïóðÜï0}ò Ò¼À¼À<-‚Íû¸=Çž³ô·>/HS¾)ÿád™„3$9£~F½Þo`•WõÑý€Á­§â˜#ÛÛlʚĕä®Ô]©öY|ºƒt´:Z߄ɒ¶’6’¼Ôp©ß’¾»¾»$9–5–EXåU½êW|Ñü¨ü>@Æ\‹¹f"cm±6€\ôÕ¢¯–|)øs ™»5w+I>·<·H3I’b”dãdIÕóWVùÉzÕ¯ø¿ÒSú? gn˜¹ ·n/t\ˆ4ô7’Gç¯ôB­$«XÅ82¬…5’{Å^HÙ!;H’&šH«¼ªWýŠOñ+=¥ñƒw÷¶z#¹Ó¾ÓNrœ$CwH=AO õu¡úP=CògySÞ¤T–Å÷â°8LŠ‘"RHñ(E$eëH]ÊreØL¦3$m!†¦8t‡áa’Ré#ÚÐòŸ¨;^8^hVrPÔ§:¿OBkCkùVþ.ä§“ì$9ÂŽ 3̰‘–B )Hžd+¢úªõ =ƒoéŒð“ÞÞ$'OO5«ò3iì|'Yz¼ô¸êÖ?“·CWCW Ž/:Ò:ÒÈ¡‚¡‚¡C§eiËÒ–¥äÙg7žÝHÖî©ÝS»‡ô·ûÛýí䃊*ÈÓ‹NÏ>=›|”þ(ïQž±âòzDÁÒòÒrµµç;Í‘u[}÷\™®LgÀ”frYÖZÖ"Ø’ÔßSöçÙ®lÐs²çdÏI@4ŠFÑ”å—å—å7ÎÝ8wãЗؗؗ4£Ír¬9Ö+Ð7Þè ›Ü|póA˜z.uçuç!hÚÑ“÷2333'·«/[ižižUkðƵʵ €Lhç‡Là^‰ÿ$Ž%ŽŽ4Gš# èvu»º]€¶_Û¯íà†n ¹Èc±ÇØËBËBËB`ˉ-'¶œ¼·½]Þ.`âãÀ¼À<ÄFŒ˜.à×°kÀºˆ3`ɵäòS|i{c{£ão¹žû¸(0X ,ÀÊþ•ý+û-CËÐ2gµ³ÚY vvvy÷óîçÝÜ)îw Ð0Ð0Ð0,ó-ó-óuî:w{5¦i€óгßÙoè™êmÛmÛåÇ èWô+¦? ÃÛÂÛ¦ g"Ïðl CËa9 ˜5³fÖß oÐ7,,,Å/‹_¿’$I>\l¿Ø~±XÏõ\OÀcñX<ÀVn;f;ô¼îéíé5ôdiðzð: ü˜-KËêí†ù¶ç¶GÕ±+dŒŒAPEâlq¶8ÀÝÜÍÝ@ê¦ÔM©›€ÆšÆšÆ ¡0¡0¡H¯I¯I¯zxèá! 5©5©5 pÆ;ãñÀóšàš °ûõ®Þ]½ŠŸÅ–‘;Mwš€)?ÿw*y-Ün2NåxæøêñÕ¤ÿ–ÿ–ÿ–q*‰À9:wtîè\RΑsä#ïììLŽp$0 eŠÌ–Ù”¤(%$‡&õ¦ô#~Œ9F‡ÏáӬ䠯#õ"½ˆo£~;§U²JV‘²VÖÊÚ¨¸Wz¥—Ô+õJ½’”ý²WöFå? —†Kù–ŸLͱåÞå$ýïcï™ü!5ùÅñ„ä,Q.Êâq6±É˜C,ã ¥Gz¤‡äe¶±-ê ŠxЧ(e‡HÉ ±MG£&¿ØiÝiU+õÎäÿ`ÿ•ìí⃽}˜7Øœ]Vø’IEND®B`‚routino-3.2/web/www/routino/icons/limit-54.png 644 233 144 2470 13061246467 14526 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜíIDATHÇÍ–MLTW†¿„D‘&¨¨ ˜`ÐX\X%)5J!QB š€¨ cLD¤RÃ7­ tkD0FBc(&n`ZŒ¸("P ©‰+$(Sÿfî½çébæÎ¶šºälî}¿¿÷=çžóÝ# "" ¡§€}±}±}NÛ+-{ì–Ø-éW‚¸Q[‘­hðÌ==÷4À¼‹ó.Ã6ýf|d¾ˆU?’Ï´K‚XÇUÇU[~×AñªâU±_ñ÷^ˆ»wãûnî» p½åz aìîØ]€©ü©|°°é7ãÍ|³^d}©û¿DwDwØž€#Æ#K7-Ý´ìP0à÷eà*p<‹z¥ì O³™­ò>Ìñ2›þP¼™oÖ3ë›|&P@R^Rž––Ä5†/ÃÑ”£)&_àPO=³Aói>½L/ã(¯ò`Ã6ýf¼™oÖ3ë›|&PüóÛþà„±;c Ðú>x #ƒ€þÞ¦·¡ôzºžz¥¾Wß ÔPCMxåPi*E¥€‘m”¥(0ZVü¥ßÖo‡'Üæ óK¤ Ìˆ‹óÍ‚}D ¶±ßØÏ[úÑЀqFµðž÷¼À™d’ ê¡z¨FØß˜/Ænc7oC`[˜/ÌÔÖø3¨=PNþ’ËÚ팵Ú7Ú.m´W´W´W€»È]ä.‚óÕç«ÏWÃtñtñt±¥c¤s¤s¤ºv/ì^±’/‰!…_›Ô&#øÂüA=!a¿VAëëÖ×áô Õ­•kå|0-ãçÆÏŸƒä5Ék’×@aoaoa/”úKý¥~xÑù¢óE§% }eúÊô•àlw¶;Û-»‘hıÀ½N¯3ë« ‹?¨Ç.2§kNWöW"yó6†¾¯ØšÔâ‡8LKoYoYo™ˆ/×—ëË!ƒ 2D¶OoŸÞ>-’¼5ykòV‘ª‚ª‚ªÿÿÿ‘ù'矜Rƒ¯ÙÌfIµ;íN³¾­Éâê™%åŠr‘%ý(ú‘ÍÌŸ´ýisØ’dDJJJDÖŸ]výY‘ãÙdzg‹x²îqЃJðiϵçÿ{*?ÒÇ|á>vŸÂ[U¯<ÊêGuJŠ8þnåVn`ØÑ·¦˜b P¡>‹Øcìùì>ö‘ÎovfMïÖ»Œ*£Š‡h¤¥ºÔuø‰:øï¨ãÇ€rÈAQcÔ@Ó»ô®Ïêü3ö_9co3ö>63o°7ŸàŠSjaIEND®B`‚routino-3.2/web/www/routino/icons/limit-17.5.png 644 233 144 3012 13061246472 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü¿IDATHÇÍV]LW=;»îºJPš,i´5ÕyÀªhE°Xmq (4ÔV±J¤il¬¦Bh­ E!V—˜·­X©„¨iÀÒ(Ѫ‰E\‰Ú ¬Å]!LÅý™™{ú° ³ÚôÝïes¾û}眙»óÝ ?ò RJ‘R¤Ø–>4òcsÇæ¾|4‚ëTÒ”oÊ¿QAÆÕÄÕä‹õ/Ök7 ¬¯ëõÑý€Á­§ç#ak°5˜²FðråÌ•3Ç&EðWm¤ý¤ýäc…\wjÝ)’üñð‡ùéýÍûId d‘Ö×õz½_ç‹æÇŽgôrÌÏc~6Ý#mV› '/ž¼8õãHAw*™·,oIö˜{ÌB"IR}H2†1"‹¤L™zø¢°¾>R¯÷ë|:¿®§ëGü€L\˜¸ ÅÎb»+Òpó¹Ù±Ù¡ë…O’ÜÍÝŒ!Y‘IR-QK$E›h#Išh" ¬¯ëõz¿Î§óëzº~ÄžÞÛ=9” ÂáQCíZz( ¢UMUSæ Ì`…òXTIu•úžú©Jª¤J¤øA|/¾§MôÑG¡~ª Õ0¬N—‡ËIÕáçž‚· ÞÖ îÉ1¶R€W«Iû-û-ÙBÞιCªÝ$É¥â¤2¬ sxTH¦>þhÔ¨Eáë¼Îë$ûÙÏ~’¯ˆW8Lá'=ížv’´ËvY¶DŒ½Z=ò¦ê.e[ʶâIji:oëÄÖ©­S)zÏö6÷6“}–>KŸ…¬®ª®ª®"ëWׯ®_Mé:Òu¤‹¼Sp§àNá+ˆ¼ñ¥'JN”ûVìûdß'ß×.­]JÊ>]¯üõò×IÑñž€ß?å÷—î/u:QÚè>ã>à$KK“§wžÞyz'y#ûFöl2c{ÆöŒíä"ß"ß" \p‘-žO‹Ç0æÝëÝëÝK&§'§'§“ΫÎvg;Yr°x~ñ|Ô„JC¥¢”<>&Åšˆ ¤ØÏb?›5ëv.ìh“ Asœ9H^–üAò€œ-çÈ9ÀŒó3ÎÏ8t j[j[j[€)S¦ ¹Ór§åNÃh\޽{9så\9ÀfT¢xgòò‡Ë–\o½`½`rñÜœÁ9ƒ€éóرfͶ`‰¹Ö\Ë×€1]cºLóþÒÊy+ç!ñ`C}Àð„á à Á]ºtu)u)u)@ƒ­ÁÖ`Ã"á~Âý„û@ñ¥âKÅ—€ÌòÌòÌr`£ocçÆN îý¤+IWà_òÝ‚ 6 Q»Îc<Æ×$í”vÊÔ (ùJ>+ Q'ã„]ØMÒ$M2-:Z$¹’\I.`zÖô¬éY@ppp?à?ë?ë? ôxz<= õbêÅÔ‹ÀšÂ5…k ‡pt;º_œÿ¸ÿ81QLP®94‡©S‚$gËÙ×:€Ös­çL®Ñ/ÿîøwk“µÉÚdkKoKoKœiÎ4gš‘jjjòbòbòb€IÞIÞI^À½É½É½ ˆ3>3>xã¥ùÿÌÿ¡’ EUEU\ 4Îmœ ˜Ç=±=±]ëˆþ*+Ë*I6é_‰öµö594whÅÐ Š@gàjàªñ§Ü:¸up+p‡‘ׄ&4Aúóýùþ|’nºé&CÍ¡æP3ùPêÜÿ˜B¬W”„Ñ®4ö–Í*›¥Ï³º Ðçi÷Ú½²…ô¨uTg)©­ÒVEÍ12È`ª`+¢°üÔE±[ì»Hq@ü$~"I1SÌä°øf„ÿ-O·§›$íìd ÿxjŽEM~¥Ð\h6&?“â!Y©ÞSïQ?í4ÓL²‚Û¸-ÊØ_ü“’¢WÜwÉ‘‡ܬþªþʰøEñ*^}gÂíäˆ^èÙÉÿüž•Ïííâ¹½=Ÿ7ØÈP’A7› ÞIEND®B`‚routino-3.2/web/www/routino/icons/limit-28.5.png 644 233 144 3122 13061246473 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–íO”WÆïË¥‚ÁÆ©òòj¡A¡¸m:í6XXJd7q¦‹mq—p7!% Æ4‘eˆq!Ýìlµ XÞ¶²‰RS^ ‹ à¬JD첦€A©iPæíüöÃÌÓ™íþž/OîûÜ÷u]yÎ9×9""ø „½öJØZöÛ`>òÍÈ7SÏûãV/èöéöݪƒØæØf€uöuvßd0ÖæµúÐ~‘ ~(Ÿ–—8 &ôíúv1…ÒôÒôÈ þ¸q¢:£:—=PÑ]Ñ ðåç_~Î!˜¿>à‰ñ‰‚±6¯Õký^(¾ý¿¼ðÕ _éf@¡-{¶ìIù½¿`:Þ}ûÝ·¾ÿ>\…€÷CŒ2NœhãqH¬Íêµ~ OÃ×ø4~¿ø7âߢ²¢²¨¿ú&¿€#†#ÏÝ |ÆgÄ€Çéqx˽嬂PèÐA0Öæµz­_ÃÓð5>߯'¸”+""6OOÏàöü۽Ž|NÞ£ÇPª|÷}“¾IðüÇ3㙡"Tÿ?XeåýÔÕìjÆíÝê®tW‚·È­øâw46Sp)ûED^= QÎ(§srM O G0ƒÊQ9¬ÐÃe.ƒï™ï™ïÐM7Ý!lذëYÏúü#Œ ,° ÒT+( ?Àà÷ {õ¤0/"Ò:HìAËA‹†æËü—~¼f¼NÔ¨=Q‹r|ãøÚñuoÜÈIII±”XJ,%"e˜6L‹<Ž]ìXìx•¨E¤ÒgðtwÂÔñåËË—'FEFGE†}3ùf2xÅ=ížWWLך®5" wî&ÜÙU¿«~W½ÈøÅñ‹ãEb÷Äî‰Ý#’Ÿ˜Ÿ˜Ÿ(bÞjÞjÞ*R0X0X0(’|+ùVò-‘¶ê¶ê¶j‘¸½q¯Ç½.ò‹— – –ÄUþñû ï7ðHW^WžHxôSýSýĨÐ8•|TýQ5ãTÔV~Ú¤VeUVPªSu†lÞh­¢ !ùOUªuZõ¨•®ÒYQà¿55=5 õCÔÎ5ÜÖ|ìnu›‰#ÅÅ ¾ð;³ú§7Æê‚çGϸùcŒ¡ø#‡9 ꪺ¢®}ôÑ,³Ä¨jZM«W;âòáV×<óžyàïç§$¼$pýÜùŸß»ò¹}]<·ï±çóû_•ôYp›{IEND®B`‚routino-3.2/web/www/routino/icons/limit-9.7.png 644 233 144 2415 13061246471 14605 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÂIDATHÇÍ–]H”YÇÓæ¤&dx¡zQ3$}HYBFšmE®ØV }^˜­ô±K±&¸BhEA8C^”¶Âö]8)Ñ*T›¶ÓböåZ6ë:3ïyÏo/fμ¯Ù^ìïÍËÿ9Ïyþÿ÷yžó¼G€Bˆù±·GŽ#ǑŎ}–=ycòƼkQ|QB¶„mœ€ôséç2ÜnsÐÂz]ûÛ÷ aÅ·ói»˜/,CÒõ¤ë Å1| *\®äÌ(þ¥Rn¦ÜüÛ€ýû;:®t\¡üüƋNjÁÂz]ûëý:ž=¾8õ¿0÷ÖÜ[ Ô˜”(,*YT’[uø+¶lÞ²à휷s”ä(0yªD?c6¬×cþz¿Ž§ãk>ÍÕ#`Áºë„€­•[+SZ£=P›]›­ù"7zê™FÐÈr'!Pݪ€ÀÂz]ûëý:žŽ¯ù4T˜^Û¦ ¨òÄòD é9,‡ÁŒ»Œ]DŒOr¡\ˆR‡Ôu€º¯¼Ê Òa˜† r·<#Ï ¤#¼/¼ˆj7‡ãÜKp{d{D lÚ`+¥B,i†Š?ø “¾ Ï*Í·Ê;ä&ù‰ܰ)¨¢Š* ”RJmö!BÓ´~ÍÝæn&u|ðIŸ„8LOLØÅ8xòàI`ÀÌ'ÓH6’­D<]ò4÷i.´¬lYÙ²†^ ½z13c/W¼\ñr´ç}†5•k*×TBþâüÅù‹áC͇š5–0/^¼@aQaQa¬[?¶~ D«h­p/ë^Ú½4+›ò“æ‹òk=Ò¼i^uüËýËAMÏÀå†Ëõ—ëauêêÔÕ©–½`UÁª‚UÐÚØÚØÚhÙÃKÃKÃK-|áî…»îÂÞÓ{Oï=mëŦÓt¿kK”_둚‘jÀØ»±w jâÇ€7¯Þ¼zó \u®:W”å–å–åBbSbSbxR=©›`:è F›G›G›ÁùÌùÌù »»»lÂ6šËÌe@XóEùµžSßMϘïߤo*ÂáŠ04ö7ö7öCÖpÖpÖ0ô´÷´÷´ƒ?ÍŸæ·JÄÙÛgoŸ½ ÅGбµ~©Yb–#ª]µò?36½Çb³hàÆM(X<<eEeEeE™™ Ç:u넉µk'Ö‚Ëïò»üÀ&6± ÊûÊûÊû ùjóÕæ«–0y_Þ‘w€)yI^Òçõ«=öÅ©$vJ~3®׬̇þ = =÷#ïGÞʡʫ?V¬Žr”£(  a*g*g*ÇV‚.|øP˜FÀØø¾~*ms,-]|ÎÈóò<“ê{U¯êm=âTNåh ÁFl``Øð ꨳ7Çÿšc¶ÉOyry2DƒGzA>—ÏŸ¥_ú‰¨j\£xB}À ^«×ê5 cÂN:p‚6ÚP`7!"½Ò«EFzã|3'ÿ¬ýWÎÚÛŬ½ÍÎ쿈ͰãõSlIEND®B`‚routino-3.2/web/www/routino/icons/limit-35.2.png 644 233 144 3003 13061246474 14654 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܸIDATHÇÍ–ÿOÔuÇßw)Èq—± ¥TÚhÄtim‚‚ ár-¦"»Ä…nM,ió‘³4eè@`¤Œ©mr CX3s*Œ¨‹†fšÉàt|Õ/ï>÷¹÷£Žwé?àû—Ï^ßžÏ×ÞŸ÷ëù~ Bažú ÐÇècô&¿­·ü32fdÄ}ã·ëTЭӭû}7̬žY ðJã+¾[‹kùÁõBðƒù4¿0‹€#Ôj×¥NÙå°>a}ÂŒH¿}ð „µ†µ>öÂGmµ´4µ4Q÷»îwL¤N¤BÀÖâZ¾V¯áã‹ògø…€éßNÿV÷7„†„†óVÍ[µ`»?áöÈÉÊÉ|ið%©u0b”©€'Ú ²µøT¾V¯áiøŸÆïïG@DJDŠûAîaÇý7NÂÎèÑŸÒ ìcFð:½Nµ@-À òм€l-®åkõž†¯ñiüþ~¿Ò%„‡Ò!ÿVþ-ð(Þ?•¹Ê\ðÝS\Š …»HõsµT-u‘ºP]ªUµªVà lØxvIß_ʤ2‰âý[‰V¢Á7æÇ‡üÁüAà_û•w…bñs†9ÓØs«óV'p€5 ß•ï⢞@:¤C:‚(UTT@"‘€ ® ŽÜÒ-Ý@9ûØ Sd .öúñ¥2ŧñ_ò÷#x „uW1m)ÜR¨Áùo¬ê;×w¥J9”‚ì×Ý <“}&ûL6ÔdÔdÔd@ƒ¥ÁÒ`Ió¤yÒüÜŽÑ7½Oß§‡ªÊªƒU‘}?ô.î]à“W·Dl‰Üþ~„¯U!®—BëžÖ=p'b|p|Pͪ˜ùÚÌ×p[n[~³ü±•±•±•Ðv¾í|Ûyˆ»w-îääåäåäAASASA8¶;¶;¶êéìéìé£Çè1z =.ýÕôWaÞÚ¹ç>Äýkû=Û=›,‚¶Mm›À7Ëßï¿ùr¤´ÃDäD$ü‘x÷»ï@MEõšê5`µ‡ØC`eìÊØ•±°C·C·CQ‰Q‰Q‰°vÿÚýk÷Ãé’Ó%§Kžß©³Î^8{v×ì®Ù]ð¿Q¿0~!4šNÍ95Àíq{@ 7übøEÚ£fÙãëçðè§£ŸÆ~ò_ç€sr“s“s“!~yüòøåpdÑ G6À¶›Ûnn» Ç +„¨Ú¨Ú¨Zèhéhéhy¾Á®e]˺–ABRBRBlòntlt€üP“™±/ǾŠÌŸ˜?ñõ õ½ððiwŠ;N­³Ø à­‰¯'¾^1Åüóaõ£ÕV?‚£#GGŽŽâKŠ—/)†ã%ÇKŽ—€Ò¡t(ÐÓÓ†2C™¡ ¤H;“ÅÎ7o‚÷é Üÿìþg@¯©ÊT%íBÓÎXóXóüó€,J=œœ”œ„Û¸Þ˜mÌk¿µßÚ×m×m×m°¨qQã¢F0•™ÊLe°«~Wý®zxpâÁ‰' ­4­4­ÊÇÊÇÊÇÀPg¨3ÔÁRûÒ¦¥M`Š0´Úq·ÎºÆŠäò’¼\ä"‡L0Ò#ËÇ€…½ìEÊs^Å« Èn5\ yrJùkòmù6íj Vþ÷®|a_/ì{ìÅ|ÁþSYTq&yûIEND®B`‚routino-3.2/web/www/routino/icons/limit-29.1.png 644 233 144 3010 13061246473 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܽIDATHÇÍ–ßO”gÇÏà2µã"…:éÈ ‚ÔÄé:5©ÈÀXš5;mc¹\¨ÛÎ6[a/Ü4›Ø¤qC‰ø£h$¡mÀõ‚¤¬Ö¤D0hcʰ‘d HlEºhKÐßwÞç³3/3kÿÏÍäüú~Ï^oö›x&¾ÉgòÇæÈÚžµ]v¿¹ûÍôöXÃx'4æ6æš|ZøˆÈ=¬‡¢oEß"jP `Á ßÌ›õf¿‰gâ›|&lžÄU>iöÀžÐžAmH¿¥94 ºM·¡Å'UFØøÉø ôûú=ý(¿ò+? {À/ü,ÄêÁ¨1jÐŒíú‡ú‡ þÇ×Ò^KîšüæU~%"RpÒÃéáðoÔ£ÐPh8 @%¨-j 8O/½`<4Iƒìcû<üÊ¢SÑ©è¨@4 ò ®$ê õɬà¸Ä&=}™Õõ5õ5&ŒQ2fii€–ZµBGƒÃÁáÑhh44‚›Ol>±¦&¦&¦&yu]]W×A ¨5ˆ¶vv£nýv"u"5Á§Æêw×ï6¯öôe‰‹ˆ 7Àù÷οßø¿sçVµ™‹éŸ¤BdGÞŽgv<¾_Î^<{ñìE())­y[ó¶æAI~I~I>Ì…çÂsá_ŸXWvWvW6¤v§žK=ç*:f;f‰ÄÿFmôÝÎêÎjs°á†YùTÛSmÏ¿ â©ñÔˆ|¿eüýñ÷-í9}°ÿ`¿Øú'ûgúgD²ó³ó³óENyOyOyE>‡Ïá¹:yuò꤈Õnµ[í"|||²lºW÷ê^Ë‚eÁ² ²öÔÚÏÖ~&¢Ê-ïXÞ[¬ÊÒ.‹/¹^r‰ˆ¬º´êÒó/š=ÍžfÜTus•s•‰µ¿òû!ç ; ; ; ¾°¾°¾no»½íö6(Î-Î-Îï1ï1ï1°6[›­ÍЙәә“8©HS¤)Ò”ðËÝåîr7´:³ÿÌþ_Ô÷£ûG7€}¥}¥q3E×Ëô2ËMK›µØZ,2ú§ñ†ñÉòüÕS婩Ϋ^_½^¤ÕÕêju‰,õ,õ,õˆlpnpnpŠ”ÙËìev‘5UkªÖT‰8Z-Ž‘¹¹¹åVnåNœ SA‘ôJïr8Kt­R«1¾4¾´ÜLQÿXê]êýöšÈ×—¿¾,2T=úÜèsìŠ6©MÊ£ÀlàVà–Hv_v_vŸÈÆ7E$C2$Cä躣뎮©««ÙÔ¶©mS›ÈNÿNÿN¿Èâüâüâ|b°ŒÖŒæŒf‘ÔŠÎNy׆ýò‡ÁŒÁ ‘pi¸ôÛkÂÇñ­äÀÁáaWlKþóòÌ‹3/¡;Ów¦Q3»f¼3^ˆh-¢æ×üšf›f›f›€ *¨eUVe…ûí÷Ûï·'ÉKÜ~·PºPŠŠØµES1Jø×Û®·]I[iêFBGâ:fêLD娜eÝ.\ öª½jo’ç9ç*Déö#r4yUV(+”’žÙÓ†¦ MZý •©Le×>¡%´„–éaÞE*©¤ŠpÖ¼KÌë…žÐwúÉ«œ«Má)ž<Ê£< ˜ë =1Mø Á#øÈuÛuÛu{íÏÅo»·ÝÛÎó"""ðØÐI²Ãì0;l0-ôb½ôcú1˜úxêcx’ÿ$ß1ÿs|n•zIá'üɧîRw©».uˆã ÇŽ7ð_)-¨µ Íp“˜$vŸÝ·ã­Ú·j æ³šÏìýì {`ßã{«7C?%üÍuðçää klõØê±Õ–|ðÁ ‰dzùZ¾Ö0|lø¼x#¤ßØøþÆ÷ _²/c³é }ÃOø Á'@»áȆ#ŽX¿Œ…Y˜…ÄGÜn¨{t½~¯â½ (þ®ø;˜±gÆx}ßëû _±¯ðÈÖmè›~†¿à|²q¥¹*]•®JóŽeQ35S3Í¢Y4ËñT$䄽~—Þ%"¢ks®Í!"Zy}åu"¢‰O'>u<)Œý{s“›ÜDÔK½Ôkù»\®óÊ/2@ñÇØHl$6BáIyRž”IQv*;•ÚNÛi;Ó8Ñ$MÚø¾Ã^£5DD´Ò‹ÛMÑݤ›t“H>#Ÿ‘ϱƒ¤Ä£ñh[ÙÙÙl=¼œ—ór›/¶m°­‰®‰€Ô?ê½Ê®Há.îX‡uXgýüRH(8Xp°à n~”ÙÊleö‰Ç”]™]™]I¤^P/¨úcæƒ_ç¯ó×±½æ è=€I„B€P«`ŽÝXµÊÂea[w’ ³aFÐOè'ôéŸ W¯4^ÑS&`³Ò¬4ÿsKºžÏμ\E®"WQôbA 5ÐhµöR›©ÍÔfZHêMz“´­´­Z¯·^Œ7€žÐk`u¬Î:êÓã§ÇOcù í”;åÎg«¥9ÒiÎÏNf*WÍûµMÚ&m«è‘ú¥~©_dEÿuh84FÈÌî^¶×ÚoØ?Ñ0Jgt’±þX¬ð¹}nŸ[Ûeîd›Ò¦´ü&Z5USµêµXK©”JÕ6 R‚DJ\‰+ñ·Ïo·ÇÛ£y"""Ù]Æ—Ùõ^½@JïÐ;„pw¾…×ðë§l½¼õòÖËl¯ÐW'Ô u"t(wwîîÜÝD²_öË~iРk˜?0þÝ¢ÜRn)·¤³yûòöåí#r5º]¡CfvKý¥þÒÿ˜ÝA x”3¯ÐOÙ"¶ÈÚÛ£Ë.?ºœ— =—ÇåqybÏÒµ×íê#ãÙQ"~Yô?¶ÌìrÖe7¥&©Ij¨Šª¨J_,Ï•çÊs‰$’èo_øR¾”/E¤\R.)—¤¿ ·dœÜÿ­yÌÿUR%Uª_;‡4È\æ2¤sÒ9éÜݧûÊ8™p†î+ú_“Lv!’6DIEND®B`‚routino-3.2/web/www/routino/icons/limit-86.png 644 233 144 2447 13061246470 14531 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÜIDATHÇÍ–_HTyÇÏLëꀦ9“›•´ÔìƒÑ®PkØ€Ò¦°AT„óPö6–%V(¨Ú($ía‹ Áʨm’ô!¥4m…vGiQ&ÔvEr­ˆa'kîýý>û0sçÞ]j{õ÷r9¿sÎ÷ûýý9çþDD$/õp/v/vÏOÚî½ö|VUVÕ§W’v“ ®-®-¿ƒÜó¹ç\ZpIضå·âù"6¾“Ïš—<±'2¯g^wU¤ì°}åö•Y “vCxBžÐßìkß×p³åf aj`jàeÅË °mËoÅ[ùž_Nü‡_2:3:]@æÇ™‹ÀÒ K7,û60º 6mÜ´`bÞÄ<íó/ ›l]Ĉa‡mùSñV¾…gá[|R€¯ÜW.Õ;ªwx.&FZ¡®°®ÐâK„€Sœ"Œ˜0ƒf7 ût.\`ۖߊ·ò-< ßâ³ø“zäßgÛølÍÚšh€ÄÏ$̳@SÇH¨I£sÐÆŸÆ¨1 ê­z£Þ¤w Ô5ºŒ_‡ÆCPJ¯Ð+РU# ^›Ýf·ßâKó‹SÐg?‚gÊ3ûž˜OL À× TqmâÇüÀQŽÚB覛nÐkõZ½( €‡ÿ׸|Ã.¨#êqÞZø)¾4ROJXS?8~ฅ¦>ç…5¢@E%×0Ø<Ø<Ø C C Cð8ò8ò8bëÍÍ͆Æ[·oAx[x[x›cGÃzZO£‰ÏŒg¾4ROJØoßÃÕWW_¥Ów+ÏÛoo>¤®‘®‘®ð|_‚k‚k‚k (Z-ŠB×Ó®§]O¡²®²®²ªê«ê«êaÝóuÏ×=‡h(І¿3òŒ< _ï¶ù“zÜ"ó{ç÷~ñ¥Hùúòõ©ó×E™uº %ÓšQ}ªOõ‰xZ<-ž‘ÊñÊñÊq™¿Ì_&Ò^Ó^Ó^#2–;–;–+âz£Þ¨H +Èñ ù†|C’®_Ü/Ü/,|×E›?¥ä,ÈQÃ0393i—½Úkn67Û+l µ†ZCP2U2U2åò@yV‡W‡W‡ápÓá¦ÃMPB %@s¤9ÒE‹ À½%÷–Ü[bã©€é7ýÎ6cñ'õ¸EÔmuÛ5,bl66§äcœ;ܱWØæmó¶yEÊŠËŠËŠEzû{û{ûE2NfœÌ8) D‘€HAnAnA®È~ÿ~ÿ~¿È ,| 2qvâìÄYb›?¥ç}wLç':ö>7|nøÇŠcÅ1È_ž¿<9ìšÜ5¹k 8 ާÚSí©†Úµ;kw‚ÑatŽj­5ç™óÞÇÞ_•Vcì LØ®ÊÙøl|6ÓL3 h—vi—Íg›Ãæ0ÌTÌTÌT€ò+¿ò;òš×hGãý¿ª|G‹¥ûX«j%®Kõ½tH·é6Gu­Ò«ô*Ðõº^׃.Õ¥ºÔáÿD{µ(ç Ôiušxj¯>ÔÇÞÑùIufÓ¼oÞP‡Ô!Ôr†3hݧïê»ÀOÜà†cG®p™Ë èÝ\aAt:?÷ÁÎ?gÿ•söu1gßcsóû>…” ÙÊœIEND®B`‚routino-3.2/web/www/routino/icons/limit-166.png 644 233 144 2702 13061246470 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜwIDATHÇÍV[L“g~ZŠð—†“E“E%ºàÌŒÙH&S•’‰f"ŒáF‡UÙ.½˜f&x㘇4‹W6Z˜.8âé¢$¥ºX@5,H „¿ÿÿ=»(_[w¸÷»ùóžžçùNïÿd¯~A773c¶ñë„?}_ú¾ïÅì[i8d8ôÛwd–+ËE’9î·LØ2.ó“ë~2Ÿô# Gš7Ík°¯Ú—É#;ŽìHÏ‹Ù?t“ÊåÁB”¬ë¨ë Éö;íwXONõMõ‘ä¬}ÖN&l—ù²^â%ããò?ø2õqêcÃ8™¶&m @æïÍß»åÛXÂÈÒqÀq€$Ã)áa$IRû‹¤…a'a„rL'Ù2¾š/ë%žÄ—|’?¦¤µÌZkÖ(·cÁò솳$Ÿú€ä^¡…ŒF¢’ÔŽiǸLŠnÑM’4Ð@&l—ù²^âI|É'ùczðîÞ6IV¥W¥“œ'Iµ—Ô³ô,R/S=ª‡ª8+ÜÂM!%‹jqX&£þ¨?ê'õ9}VŸ¯ ÅQÑ$š(¢þ•­+[©êº:£ÎÄ'ÜË¥Ãêa•¤üH´í&uåµò:b"_ê/õ8î~mL-V‹¹(ÚÄJr=×s=)fÄŒ˜IòqŒc¤¸.®‹ë$Óh¤1)þ‹^£×p‘gbød(3”IrE™T&#&©gUØ­ç¤ó¢ó¢¬Ö?]ê#õQbâÝ?u_ë¾FŽ>}:ú4Á3’=’=’M6?i~Òü„ô«~Õ¯&Å7lÙD6ÿÜÜÚÜJª †¤ïñqÉÙèl”[{ëùª°Fö·ùÚ|$]$)Ž“ú¬>Ëeï:¯Åk!Mn“Ûä&½uÞ:o]‚x—a—a—¬ðWø+ü¤]±+v… ¼ ¼ ¼"Ëw—ï.ßMV8*²d¦$\&ÿhsŒ9¸¼*ï¸øþ^ý)l Ñdvfv~Ž[‘­À7`¸ÍtŽsiøs˜r͹æ\3`yfyfyøtŸîÓййÐ9 §5§5§Øß´¿iØØØ +ƒ•ÁJÀªZU« ”¦—f—fÖ¡uKë–;P†Û_™^¦RHq¤8¸åkÖ,@Žñó8Pm¬N©N¶nÝ> ,u,u,u⾸/îÖë€u°ùl>›hqµ¸Z\@¯£×Ñëòßä¿É”Kƒ¥AÀ3äyáyôßéïëïKâË2u™º©Çèõ‡†aˆèWѯâ‰V¤b“qôÐC ¦Ä”˜,•–JK%Q›Q›Q 8‡ÃÎa w0w0w˜ Îç‚@Μ97€“''NNy=yÏóžáç§|üdåÒÊ%@ê1{Äþk?Œ]]q'ð±H©X‘žÌÔÌÔÌT`1´Z %J‰R¢ÅÅÅ€Ùev™]Àfçfçf'Ðni·´[€µõkë×ÖæÓæÓæÓ@áï…Âp,íhøhXâóDÊ\o{o;×ó·’£mѶĭœ//š/"ßN¼x;‘8üšWój^rÚ>mŸ¶“ºA7膤ø 6¨ ’Óöé=Ó{Hý#½\/§ µ«ÚU’¡U¾8ÿ;·rÛMR™R¦"&ò¥öRKô1R¯Õk¹È¾;jYËZRdˆ ‘‘ÔPmÂ&l¤p ·p“â3±CìHн½ÀEÚâ}¬ T@rYWÆÿÕÇþ£ó«²ókcÚÉ<í¼vž*/²m‰>ÄV¶°…=¢Gôôð.ï&Mà Pˆ­@+ Ê6íŒv&©ókU¦*“\©w:ÿ{û¯|o_ïí{ìý|Áþ ¤ÍšÛ©³IEND®B`‚routino-3.2/web/www/routino/icons/limit-35.5.png 644 233 144 3121 13061246474 14660 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–ïO•çÆ¿ç€üùÑFd´4”.hMf¤R „ZT-DTâB”JFÙÒª­’ÌM7ú¢&C¨DHËS ¶DÐh'§6ÈxéD‚h7Rtô”8–óœçÜŸ½8<}ˆ÷›'ß_×u=¹s_÷- ""Q‹_ë Ö¬þØZfæCrCrþ7|ZK¡¥ð_¿…ȺÈ:€gšŸiöÝ6c£nô/1ñ—òy‰3ÜÜfÉ^ŒOÀîu»×…Dûã?÷Cè¥ÐKó^xûó·?øôãO?æxð̓oœÙÎl0c£nôóÞR|9ñ¿,ëZÖeù7‰@üÖø­/ýÚß0þ¼™÷fÀ÷ß(+èÓÀ V¨lÀ… cÍ,‰úb¿1oàøŸÁï×#°2ke–‡6ùnÿÇŽ3ø´KÀ‡|È ðº¼.½D/aT¿êÀ‚ÌØ¨ýƼgà|¿_¹•n‘š×açØÎ1ðÍh×½w´çµçÁ÷Í­¹Ñø¥Wé‡ôC ¯ÑWë«A/ÓËô2àœàæêeŽ9”þ;O§M_«Uh øñ©ÙiÛi3Ö¼nnåw""/×B¨+Ôå äøØõ±ëÀ?Ø*]¥ãæ 4‚º¯î«ûKˆutt@¡P€¾%õ›Üä&0ÅSjZƒeà/òüøõÿ9í â@éRÍ·áöÖo;¿í„šœš¬š,ÔpüpÜpœÉ×nk·µÛÀžkϵçBcQcQc¸ú]ý®~³Ok×ÚµvèØ×QÒQö]öwív4ì׌Ÿ*^­xÔ5¿«ÙÔ)ÿÛöâ¶EîE;'“–äŒ-›m>$žgnÔÞ¨Káo ß+|O¤órçåÎË"G=rôˆHOXOXO˜H¿­ßÖo™¿5kþ–ü´œÝÎng·HåÍÊÑÊQ‘¾ª¾¢¾"±ôç8æsâq_Ðökû-É"ÙŽl‡ˆ|â×hù{xtxtRªfÕgÕ‹èq³=³=–¦?HõêêÕ"«~óJÌ+"ÎXçsÎçDŽ Ç„ÈüúùõóëE(¦˜b‘ü¡ü¡ü!‘X{¬=Ön ´ Úm"®XW¬+VDË19&’ÿÖô[Óü³æ GÃÒDoÚi?ˆXŽFœ8›”*ÌDy¢<¾þ2óþÌû江{ìšpM@Á–‚-[`mÚÚ´µiP»·voí^¨­­…s¥çJÏ•BLCLCLt§v§v§š[yí䵓×N¾ì}Ùû²¡¹½¹½¹bV_u®îíêb´-ôáð{á÷|#¢¿¤Ú`!k! ζ•´•@Ò/7$nH4 222`ûìöÙí³P?]?]?mÖSÊSÊSÊ¡)¾)¾)TªJU©Ð2Ò2Ò2Õ!Õ!Õ!fÿF{rIr ´T^øà y y §-÷,÷¨6«u·[skÃ""ùïì:¿ë<û£’#Â#ž'b¿Èg¯}öšHÀòÇÁƒ‡}ì´ƒ–¯,_ižJoêÎ050uuê*JÏÓóô<ó=ÑžhO4L[§­ÓVPwÕ]uT‹jQ-ðpÓÃM7­´Ò ž+ž+ž+0mšŸšG©Þg½Ïš|L–'•'~vÚ!8žð±e~_QU?ùØ6µ ·ú“jP à»è»è»j@ ¨S¨ªSuªH'ô%ùß«cꨳªSu¨ujnujûØøØ8@è£ÐG®@n>f8ÿ‚á¼EE@µß™ÕÞGÞGÀ}RŸD3ø¨ Œ2P_©/Õ—@/½ôóþ»RM¨q5,,öÖ¿Ö¿FS_yx—Ÿ¢€¢Àó¤ó?½wåSûºxjßcOç öÿyÔ¢ ÇØIEND®B`‚routino-3.2/web/www/routino/icons/limit-3.4.png 644 233 144 2504 13061246471 14573 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜùIDATHÇÍ–mHTYÇS:c¥åËV˜’f$2—]ˆ § DML*£ C"öSù¡eÃMŠ%V7‰èEv[¡¨\Ðe+mÙ—]DÉÒµ—Á´'µ™fîœ{~ûaîõÞÖí»çËÌórþÿÿ½Ïsž{!„Xeü pd9²É1ÛQgù];];sŽÙ%ÄUÄU | +[W¶¤´§´ëC–mÆÍ|û~!,|;Ÿé«„åpÞpÞˆ+6ìÓP_ïú$f÷o'Þ~…#¿ùà–÷–—c0þpü!Àtñt1X¶7óÍý&ž_œþ¿ßß7Îg‚°~ûúí¾Œ%<Ûe»Ëv¼Zòj‰r€|¬`…*f™Å\~›mÆ|s¿‰gâ›|&L€ô¢ô"! ¼¦¼&±-¶aè'8‘y"ÓäÓng9Ë ˆÎFgä~¹Ÿ0¨êqÄe›q3ßÜoâ™ø&ŸÉÓ#>¬m³U•P•hÚ Çäè¡hM´-útJ'JÿK¬?ÆZ"D€·Xn•§*TJ/ÐZµV4Ð]º ˜3ñ«œUNS`³ÛVJ!„ÈûÇÇg—¢ ¿~?[J£•£éÁß&ä<ç9¤“N: Wyäú[=Vöx§Wê•çñ–Ãæù =†°‹¿Cý©úSë}3B›Õ¬ÞQCî¡mCÛ ÙÛìmöBÿHÿHÿˆpËXj“Ú¤6Yî§õOëŸÖCoFoZoš…§üÚ¨6 D >“ßÐcë?o;Þ‚ú@6Â# #ÇFŽAê¹Ôs©ç z]õºêu¡2T†‚¾Ô¾Ô¾TKˆ~@? åVnå†uë6Öû¦û¦û¦-/5Òé&̘Éã7õ8„HîIî)ø\ˆ¢’¢!ħB×fTÚ)Çe@„hÒš´&Mˆ½»öîÚ»Kˆµ—×^^{Yˆð™ð™ð1¿;;;„hØ×°¯aŸaWØv ‘Ö’Ö’Öbå±Íáqx„Sd›|¿©R’R’ôAðûü>`Ê8öß«“ê¤õ„s¡¹Ð\*ïVÞ­¼ Yž,O–½~ôúÑk+¯-Øl š‰5k& öhíÑÚ£Û’Û’Ûc‡Æ²Ž&sÌü†É=É=ꌎ‚lú°‡¯ýz­ëZ,8XpÐòoqlqlqÀ¥‰K—&@6ÊFÙWî\¹så”v–v–vB~f~f~&ÄçÄçÄç@—Þ%»¤­¤nó_ŒßÔ³°Çfæ{¬—^Â3/gžÌ<â ÅŠ/@RyRyR9xî{î{îƒ/Ç—ã˘Ü:¹ur«EÜ~µýjûU(ó–y˼–_žˆ¬Ž¬&l¼·=¶ðTbœ’¾è½è=ëG?‹nŽn†ÉÎÉÎÉNЗëËõå üʯü0Õ1Õ1Õ²VÖÊZP{ÔµBÙ¡ìP6FƒAàOÞð…Œ¢ÛøÿSi›c¡á¹á9Û[*ËÃÕWªCuØz£D•¨ —\rmµŸa†`Š)¦€wL3 (#®é5zÍs,:ýè³M~ª\U. Æä”ƒÀ·rRN¢©ßÔ õÅ´Ñ„åS>å^òœç6¡ßpë(VÉãò8Ègò™ÿ£“Ñ~+ííbÑÞÇç ö_ª]Dœ6ðIEND®B`‚routino-3.2/web/www/routino/icons/marker-12-red.png 644 233 144 4121 13061246465 15424 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜIDATXí—mL”WÇïó2;ë$Ôa­èRWC}#ÕœaêNM´-H+ˆÆjÚ¤cÛÄH·•H°ŽYjkiÍjB(Π5¸ÚºqÃúR>lÝu5Ým‰Qa&ʶ†A„Gfæ¹ÏýûÌ3_²Ù=_àÜsÏ9¿çÞÿ½7CHÔ~AL\‘âIñ¤x„û±ôI]“º&u•.•©Lezåd!YHÑ0k&2‘‰Ì} ÑgÍ|>ÏçõxýÄ~âŠD=_©#u¢;1žñœÜ%wÉ]îaa»°]Ø®M£¦QÓ(ά½¾öúÚë@ùíòÛå·2K™¥Ì÷yœÏçù¼¯Ïû=ž‡ˆËýÙŸˆcâ˜8æ[ÈWhfõÌê™ÕôíC=‡zõ°§wwwH !ˆqŒc€>øÍÅù|žÏëñú‰ýfòx>bž"ˆâ€ïO¼€å¢å¢å¢²¬?Òé 1cy,åA¡ ´6´€Ð€:¨ƒ:t~,Îçó|^××€ú›§hh‚[p nBä=òyOûUž`m¶6[›‡öÛʶ" ´+÷”{ó©+Õ•Âj®š‹¸©ưΫWÔ+óEnDnJ{hChÀÞai, >ÍÚlÝmÝ­8xÎÃùˆá–á–áÖoñ æFs£¹‘Íñyïxï`$V'@?¢kè`{Ù^¶‹í‚ÞîážÞe"]è@‘x”~¤˜“æ¼C¾i¾i17šw™w±9œGã“k乿Ò8Xu°ê`Û+TÜŠ[qbCB¼¶·Ü[³/fëÕê ½ÿã?~‡sç9zæ(D6G6Š›~G¿Ó&ymeøó›rM¹¦\4———j‰ ²ð~7…›`ôÑ7 8£8ìf»±Žóçè=&³É¬ó«kW×ÈRUU÷.½{âî €óp>ºw;5ûÖì‹íï ïàçC_¿ùõ›ðôóO?¯xµûÕî„]¯®€ì[Ù·`cýÆz}ürûåv]¾ÿä“Ú¯Ÿƒ çá|bìH=g°l›vÆRÈq¸€2-_¶|!„ô]í»J!+\+\„2r}äºþæW„+!Äþ®ý]BÙv{Ûm}<©Ð»òry9!¤-áúI1t: Ú‘ç÷+«\Ú²´ei ú&„ aBpÇq ›±›è"ºHÿÑv›Ý%9%9úqº€.Ðû‘Ÿ#?€«ÄUSZ§´Õe×e¸;zùì-öϲLµLµLEç#¢CtˆŽÈ`l ùHÝ‘º#u: ¤Òyt(ß+ßëSé©ÒSPb+±=L£7Ü<¯¼Y•Y•”6¥M¶˜-è1z™^Ž÷;ç:ç:çÒ^ÀmB¾/äG‰´XZ,-ÞÙÄOYÖ¬¬YY³èlï:ï:ï:­@€•D>Ž|¬ã`«ÔU*X÷[÷? ´ðýÂ÷àË úrèKÁXø¥±Ê±Jˆ F b"u"ÈÝ™kϵ«Ú eHRÆç#$Ý–nK·"_/È:´ ¿ÌZf-£Ú1PáoÂß ÿvû‹ö ¨±¨QøÓýŸîÀä—'¿ â*q€À¤ “.kÅZ@ýœBÀ€“ƒ'ê¿×¯¯_¯5À-ÒiË¿*¢~šŸ$ÚÌO ù†|C¾ï0Op68œ ¬D»?¦F×8_~¾@ û³îÏô ãׯ¯Àñ¹Ççµ¹ÛÜÐölÛ³­:Òw¤¾ºöÕ5޹Œ.#^ÒžÐ&a°n¢T˜.L¦ÿúP ôí|m6V¶ B‡ÐÁµ¢þÖÓíéötÇדÖÓzª¿vBÅõý½±æf:ü'ü'€¬Ô¹¶¹6¥F[ÉågägœV ÍAÄ!›ã¬E¤ˆÉ7q7!’_òKþ·OiOk«y¯y¯bô¾çíñö赫Ô(5 €àAº‘nàQz”€U(ÙJ6BŠQ ¬ÿÛk¦×L´^{Æe¯ìõìάͬͬ%D´ŠVÑ*‹ÑUqÌɱ¿RŸÔ'õ §ç옳cÎB Õ†jCµg·¦Ý"k‘µH¯]Õ©:‚x}ñuo>Í¡94'¾¾-KZ–´,a%Ú[n4 Ɖ¨oNMÜiálÒÖ!Éý6Ñ7§Fµë=öHí£bŒ©wÔ;êøµÓ‹^ôž´Þ´Þ´^¶VÓdº˜.¦¿þ»$)~šÄ—B? µ$iwí“´«t+ÝJüI =È|ù ˜?:tþ(ý•¦ÅN©Sêü}!—ZLzÉ€O“'X|/ð(íºÌ.³K1z;¼ÞíPrRçiçiçéøµ#·Ê­rkoì'IÚ_“úÆÆÉSOL6žðzL»|”v‹W¯.^×®§ÐSè)D[4δ*…J¡råÎÄ6⽤¾ù/íIÚ]!5IMR“¯€W6V6V6²ýyá¼p^Xù§¶Õ~É/ù3I;i'í$víHÞ¤~)ä´díîNô‹o ›„MÂ&€Ø‰ØÕyâ q†8ˆ@ò—o³‚YÁ¬ !Ò%é’tIøs,±"içþofÔþ³±ÉWÃïU‰Ld"„³ÂYá쿟ëIÚ™þ¤ºOÜêÿH†]@C½ºIEND®B`‚routino-3.2/web/www/routino/icons/limit-39.5.png 644 233 144 3111 13061246474 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜþIDATHÇÍ–ýO•çÆ¿ð(ÑS^5áE&Á(ÐD iS"/ q¨D¨"M˜‹Íf.+d³1‘-PÙ¦ÈÒ4x0¶š:ƒ/`¬§¶Z¶<8ƒõ¼ÞŸýpxvˆý|~yò}»®+÷ýÜ×s ˆˆHðÊ[À/Ê/Êï5oìwÄ—_—³.'ö3oÜì]‘®hð·ÔÔÒÒây싵ºÖ¿z^ć¿šOËK°øk/­½¤ËX‰ëà½ïí\îÏÞÀÎÀÎ%TuWu\n½ÜÊ/`êÞÔ=€/2Àku­_›×ðVãKÝKü"°æ‹5_èþ kõkõ"°5kkVÌ/½ Oc  ¿ `ÂÂ_ù€{ØÀ•ذ¡=ÖU±V_é׿5< _ãÓø½zÂÞ {G K K/zÿNFžŒÔøœÀiN³\6— À]æ.Ãꎺ€øb­®õk󞆯ñiü^=¾­\©Ï„âáâaðXœ}®1g´3húõ·ÒsyçòÀfõòAuju*¨Û^=âéùö×ÐYÛY £assª2ô÷AqAqØ‘ÆPc(ÄIœÄ \h¾Ð|¡vÕíªÛU©£©£©£°;~wüîx°X-V‹Õ'ìùÁ矄-É[’·$Cáw…}…}Pv¾ô­Ò·°O7:*•ªLN“Ôa¯*1„ÂÕ%Ý¥q]ÉpÒÂë ¯‹Ü,þ2øË`‘ðØMe›ÊD.®¹¨¿¨ ___™I™I™I¹‘t#éF’Èž´=i{ÒDŽ,Y:²$R5X5X5(Ò•Ò•Ò•"RžSžSž#’ý ûëì¯EJ·îŸÚ?%²¿¥ôûÒïEøÇäü伈nk‚)Á„I°;‚ž!>±~hýÐwìÿó_Û¸mŠví(Ú± ± ± еصص©ëS×§®‡¬'YO²ž€¾^_¯¯‡Ö¶Ö¶Ö6ߊÝ2ß2ß2CeFeFe´˜ZL-&Ø|nSí¦Z¸þþÍon~ƒœo8ß÷#ØaÌ3à)s\ÝÿW†tCº$|ösS¹©\ÂþhøØü±Yä»ÇFˆ¤'¤'¤'ˆ˜#Ìæ‘¤óIç“΋D£ÑF‘Á«ƒW¯ŠlKÛ–¶-MÄn°ì‘gÛŸm¶]$æ~Ìý˜û"‡{÷îùôÓ¦î¦nkЬiÖ$a"j³Ú,"ÕžHO¤nHÔíkŸmŸ…Å›ª2ã“·“ßNÆn(6äráÐÀ¡C`‰²DY¢ ooÞÞ¼½‘‘‘ 5Ý5Ý5Ý0Ÿ?Ÿ?Ÿi‰i‰i‰ÐkéµôZ ¡&¡&¡‚²‚Þ z~uùDÁ‰ìž!/|~úóÓÀ^¯žk¾‹ùXر0ß©tíùñÅ/ÀrßrÝråÞçÞçÞçÛ"{‡½ÃÞÓ“Ó“Ó“@6ÙdƒÒ+½ÒÃlÉlÉl ÐFmà¸æ¸æ¸3~–%ËJu…ºB}|<;–t,I󳿻ÂÝ—|l×WÔoþïcª€euBR§@PÔPgÔuÆ'T%ªD•ÔPCͪ|úH}ê¯êŠº vª,«†üÜá§ÃOççlüSó1ÍùíšóŒÀ¼Î¬¾r͹怿¸'Ü>ç§–SœuOõ©> Ÿ~úEX5®FÕ(`_é?éîu÷âT=®)×puÅù1úýÇËÎÿêþ+_ÙÛÅ+{{5o°ÿ½ó:ïFèIEND®B`‚routino-3.2/web/www/routino/icons/limit-17.png 644 233 144 2233 13061246467 14522 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜPIDATHÇÍ–_HTiÆß9:ÎLeê’!RíÍŠ#,F^tÕÔJA%H aˆ®±ìÕvf+ tQvcmH JaF «„²é¸mH°Ë^¨#²¨é\(dNü3ç|¿½8óÍ9î´w¾7Ãó~ïû<Ïù¾9ïùDD$?ý+`ì6vÛml|íäý•þÊÏ{lÜa‚§ÚS=Öy7ónttYqëu]ïîqøÝz:/ùâ$|Q_ÔJãËp²ìd™¿ÐÆm#è ô½MAÓæ‡½wzïð-$ž'ž¼ ½ ƒõº®×ýšÏÍ/—ÿ¥/ÞÇÞÇžYðåørD`OxOxïwvÁß{áØÑcG^f½ÌR˜ À6¶©$‰ŽEÖëézݯù4¿ÖÓú¶wµ'jvC¼Îï:¿Kë­÷W¸Â6H%SIó´yšUP#jp°^×õº_ói~­§õm?²ñl¯5þÆÐï`>3ŸËVUÃzzAYåV™U*¦†Õ0K.¹z›z“zfYkÖ‚i˜A3ˆR?›yfë`–,k~­§õÅmè‹v$‰d6L™S&`p¬3ÖÞi«æ´7ã úTŸêÉä†#uÇ*«nhÕYu¾#½Œ¾í'm¬ã78{éì¥Ló—®#P*¦Ô€C+ŠÅŠ`npnpnæ³ç³ç³¡ýjûÕö«ÐUßUßUݓݓݓ0ýËôƒé.¾ŸÖ¯¯_wëi}ÛOÚØŸßÃý×÷_gú5Ï™çXåG®qÍ1ÝÝÝ FÒHIèôGú#0vxìðØa¨h­h­h…C‹‡-‚tJ§tÂ`Ñ`Ñ`‘Ãc¾[ëXëÐ{©}ÛÀöáíÃ* ‰}‰}®ÿUETÄʧ|ÊQ+jE-(®*®*®‚{m÷Úîµý÷ün ܸ5‘ÆH£›çÕ¤š€?Ô uÃÝ¡õm?¹¹Ö,Î-ι_{µ \O6ÃfØÁá`8Âí»·ïÞ¾ë¢'â‰8ǃãÁqˆŇâC.c•ªRUkjNmÐÓú¶CÄê·ú="©ã©ã¢c‡(™’)qÂ+^ñ:PmQ[Ô˰ Ëpò=§zNõœ)--) •„JB"¶!O—§ÓÓ)"Y2#3.½Œ¾íÇI†’¡¿^ˆÄžÆžê:ÅP3jFÖDä½¼‘R)•RÇÀÖ†­ [Drå<ÊyääGÊGÊGÊEª½ÕÞj׃ÐL3Í"ò™$ "YjVÍÊZF/£Ÿöó©o%é¥×9’åË–ÀÊÄÊÄÊ„“_j^j^j†•ý+ûWö»þBC<á z ©ü}+?0Ç2sfÃÜùÀ\úH´ÐBˇêÿ×û„É¿nÕYuÎä§|òK\ä¢K7€?ð¸àÚñLš/ÃÿÑÉ¿i¿•›öv±iïc›óû€¢4=dQêIEND®B`‚routino-3.2/web/www/routino/icons/limit-29.8.png 644 233 144 3104 13061246473 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜùIDATHÇÍ–íO•çÇôà döPHhËÃdà„FYA@¢BVk˃ÒP¢X2Æ‹â²yã–6©˜´jÊb-ƒ©3„¶˜¸Qm3-pÎ6ha8R*ãÉžqèá>ç\Ÿ½8çîÍúx½¹ó{ú~¿¹ïëúÞ—€ˆˆ<| ˜âLq¦bÓ#¿¡pCaÒñE„”„”ü£6žÛxÀú¾õ}ÿˆëu½í¼ˆ¿–OÏËb$®‡]ÙŒOÂþôýé¢qÓ°tX:–½pÔ~Ôpãƒð ˜þtúS€Å‹;ÁˆõºÞ¯ÏëxkñåäøE`}÷úî 3‡™E áù„çhøW"ì}aï ß„~ªLàûA„Ú ¸p¡¯¹5±^öëó:žŽ¯óéü=Q;¢vˆÀ˯¼üŠåR``¤ ŽÇÕù´à-Þ"¼.¯ À÷ªïU< î¨;„F¬×õ~}^ÇÓñu>? Çø”n‘ÓP6Z6 ~'€Öïý·– %€ÿ[o˜7 -¨Tù]þÿxç½sÞ9PµªVÕb¬GÌ1÷}¤ü4MÓм_k±Z,ø}|(›,›\:¿þ)o‹ˆ¤6ƒÅeq¹Ö©ÕÑþÑ~à$?eS6Ütò!‚Å¿â_:è cƒä K.¹FZ¹•[¹ßð6o¨jnNñ£ƒ|A~úz„i‘‹}l¬>T}H‡óoù{Ø`ý`=œi<óæ™7QN‡sÀ9`:F£ŽQ8›q6ãlÜ»?v̨û~gà­ÖÐ{C†.@“£i iõO›£ÕÑjð©Áê„ê`9 G|""õÐY×YwkdzdzÕáˆÿZÞµ¼‹gWò®§w= ©ûR÷¥îƒö[í·ÚoAú`ú`ú lKÞ–¼-¶¤lIÙ’3¶ÛŒÍÔs©çRÏ%ˆÚµ=j;TUåUåA쟟:ðÔ<÷ÆÇÕaèLëLßT@øÆÂ[Â[Ôup¹‡àO]=]=ÐxêDɉƒ ¯1¯1¯²%[²ö$íIÚ“dÔ3³2³2³ ¥©¥©¥ÉÈwtt@ÜtÜtÜ4´w¶ÛÛí`ûísÅÏß×|^àªrUÿ'áÓáÓêº)ôÇæ:s›©vŸpŸ)+y±ðÅB™/î(v;EÒÚÒÚÒÚDRo¦ÞL½)r5÷jîÕ\‘ÉÕÉÕÉU‘¢æ¢æ¢fG¹£ÜQ.bv›Ýf·|¿âââE¢%Z¢Eärþå‚Ë"‹££EžükdJdŠÌ‹˜™‰ÈC¿ ýŽÍ&ÕìÍ÷æ‡ ‡´˜Ÿ5?+⨩©—¨‚_””ŠT%W%U%‰œÏ<Ÿy>Sd¹{¹{¹[dSâ¦ÄM‰"ùÖ|k¾U$²4²4²T$¾.¾.¾N ,"W ¯^)ÉYÉYÉY¹~;üv¸ˆù׿Rs©È½¿|QùE¥D‰¬ûjÝW"ìöy|žañ>©ï±³?Ά ¾kw¯ÝU‡×ß0½dz 톭ÍÖÖkŒ5Z´i=EEEÓÓÓ ö{ƒ–*–*–* k&k&kúœ}Î>'lÞ:¼u¬¿³6[›áàÌkï¼öžÕMê0\Ûm?Üc4O%¯¿ñú°8%³ÅS9S9ð ÿÁă ÔÔީ©BðhÍ£V«ÕjµððÔÃSO»ÙÍnPfeVf˜/™/™/ìØ±ƒ§ÆSã©Ù‡³_Î~‰R)Ú„6aœJ¾>¶ùØfÝp/ö Öð1Ð}%è3õŒz·±ËÉ$T¥ªT•kü*M¥©4 Öä¦2T¨õ™úLïÄ­6ñ::6:`Y°,¸ÖqO÷±ÿû«Ÿ.àxÙѲ£ Úάþæ‹ðE€ºâ]ò.¡ñ{8P¼Ç9ÎúDõª^À‰'ð-xjR«q`% c¾|¡©O¼³ÞY˜³Öå¡å¡ÀêÿñýW>¶·‹Çö>öxÞ`ÿw æûö2BIEND®B`‚routino-3.2/web/www/routino/icons/marker-45-grey.png 644 233 144 6306 13061246466 15636 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü {IDATXÃ…—mPS×ÖÇÿ{ç„„BˆÒ"ˆFTP¢hb WF©¶j«u*ÑÞ[GlGzáaÚZª­-X[„ÞyªÒrµ 0Tà Ö+èôyyiR«$¦@ 99ûù@¢wz§Óu>ì9okýÎÚÿ³öÚ$''''' ̘ef «¹n€`úœ39grΰ¹y¿äý’÷Ë: óe¾Ì·àu^Å«xUÄîéšéšéöJQŠR’ 5ÔPèE/zìÆnìfH6J6J6’Ln”åFo–31ó¡’Ü9¹srç\îÎß‘¿#1ñ| Hg8„&—‚>ÔB -ýZÈò„<¡É>aŸ°OøEæÕæÕæÕ~=d7ÙMvSý¿'Ã'Ã'Ã#Þ’Ê å…¸O2£<¢<¢<€He¤2R ¸ÏÝ÷ÝÏ»ßwû{äßÏßÍãæã\ŒaÞÌ›y /“]dÙX( Н|9Q6Q6Q¶@9«~Vý¬zgF|o|o|/u„u…u…u‘õ’LI¦$“xïàÈ0‰ILØ‰Ø `æa&§ý§ý§ý±¾«±«±«‘9Ô êµñà¹Ï=xnÛDz@Y ,p¥Ô¹Ë¹Ë¹km!Ke©,uàeC²§²§²§4¢þOp5\ WÓøO»Ín³Ûü%èÙ gƒžåµ)o¤¼‘ò÷µÂª°*¬ÂlÌÆlð,„…°p¸Û¸ À ^ð0ŽqŒE(BÒGúHxÜÇ}Ügñ¶x[¼Ñ_ñYÅgŸñ/÷_ë¿ÖûAì)ö{^â7òùk¶` Ö`ÍÝßD ‰ ‰ ‰™Mf“Ù'~˜|wòÝÉwuk‚ >ȯOMIMIMá¾—~"ýDú DB¬+ÄBB8ÂÔu€ˆ‰˜ˆÒI:I'@~$?’VÃjX À”LÉ” N»Óî´žOx>áùD#F¤o ²A6Èøõ¦“¦“¦“ÊÃÒÝÒÝÒÝO&J$’ Å$OŸ§ÏÓ'FÚ[ì-ö–K-Þ¿yÿæý NMM%-Н_)¾e±,–Å›\%WÉU€µ²VÖ 9‘9€…Xˆ…ÜÂ-ÜDüÇuׇ1+³2+@¼‰7ñ†Õò‚åË NiNiNiX”Un•[åÄ(ŽG‰£þE™š©™úð&‡Î¡sè€Ø¶Ø¶Ø6ĻŠá†pã1 ¢…(€D’H ÛíÆvÀ¼Ø¼Ø¼ø1ˆu›u›uÐ>Ñ>Ñ>tZ:- ãóŽÏ;>zJ{J{JÇCÇCÇCx+ªUŠ*ˆcKbKbKïæqóQ>˜æƒW¤ùÞ÷½ï{,Ñ-Ñ-Ñ‘b×ß&¦j €%²D– -h:_ë|­ó5 p¼p¼pÅ#ëjêjêjNûžö=í T'T'T'ç7Ÿß|~3PUPUPU8ûœ}ξG¯‰Ã†Ã†Ã†I±›ÇÍÇMMMášDM¢&™ž7Ò¢÷¥òKå—ÊÌæ sW$™#™#™Sžz4ôhèѯ ¹È%ÿDúÐǯu÷£r aC|7öc?ö“ÍÍÍ…ãÉÒ4iš4­<ß<Ë<Ë<‹³TxUxUx9¸’d'Ù‰é™z ÀlžÄ“xÀ!Â!0ÚD›h$7Œ7Œ7Œ,®y¨y¨yHt\î#÷‘ûܲ—ÛËíåoéÎíÎíΘ‘™>®8§Ý “®ñœà%x ^ðiiiìûíûíûß>"÷•ûÊ}ÎõÖöÖöÖŠŽë7ë7ë7³8²ì#û Î g…³`ð„'<ö=džð°ýjüÕø«åõKë—Ö/…Ü$7ÉM€°\X.,û=FÑcw§\R,šÁa‰îˆ¸¥åÚ’H\§®)ŸÑ®óÑ-ÑÆ%Ïl9®T9ÒéŽtá¯Û„mÂ6®;v,ì6 Á  £ éBºÓ|&ŸÉgBr2ädÈÉg¨)ÚmŠÝ–.•.•.=¾ræ§ÉøA(Š…b®È5³sÏX~~~~~>¬îŒÂuᑆ\Ú=àÒn‘K»Õÿ¥]G­£ÖÁ§[J,%–È(¥”Rýo^, –ÿω{kï­½·VyÁÒcé±ô°ÚO·Ÿn?íŒwŒ;Æ¢ý«=V{¬>èÏJX +ùæ"$@"êÇÆ0&ÌsÏ€+QüïyþÄþ@»yÐC½3wf«¡ë£•´’V^ žÚ0µajƒ°È£Ø£Ø£˜öˆRE©¢Ô†k!•!•!•ëtÆ>cŸ±Ô ~‚ŸàǾtù­uNþÅŸØï´ë*Î\ìÃ>ìãn’dÙñ¯¦gz¦?´Ó3À3À3€öˆ†DC¢¡á¡@( ÒG [ [ [€@»ü¹KÛŸqü?ã…õ „ëMPIEND®B`‚routino-3.2/web/www/routino/icons/limit-31.8.png 644 233 144 2763 13061246473 14671 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܨIDATHÇÍ–ïO“çÆ¿mÁÚáp°büÑ…0aÊAJüq ÛLdÓ9£8Ù˜!ÑE_l{³Ì‡ndÈ‹CðGN„±eÖÉMƈɖ t=æ,ÍŽ°ÕÝDÑmBеÏs΋öñáŒÀûMs}¿ßûº®<÷Óë¹DDä™Ô¯€õ9ësÖÌ$¶¾aÖV,¬XéKâ³XvZvþ÷,n[ÜõqÖÇú°‰¾1?w¿ˆÉ?WϨË3bì=ö‹7…߇=k÷¬]˜“Ä'ûÁáwøO@ýÅú‹_|òÅ'¼ cß}ñF¼`b£oÌû ¾¹üòþŸôE ýËô/-wÀ¾À¾@rËsËŸ?”øåyxååW^µÚ”´q`‹”ˆÅXs°ÑOÍû >ƒßÐ3ô“~œ§G^­~µÚÑ‘Ü0ü¼ãzÇeèÅýÀ|À"HDQm¯¶—¨~Õ€ ˜ØèóÆ~ƒÏà7ô ý¤ó(§EDZ¶Â®à® èñ«‰;ñÜx.è7â÷ã÷‰§œ*ò¾E/ÓË@5ªFÕˆ¹&cì1Rú½x<'žø-@×’ü°ëî®»@ÔÐ7Žò¶ˆÈêVpDÑhÇ‚WƒWox T©*ešVÚhòÈ#t»n×í |ʧ|s =ä!M¨4¥) häC>Påaš–NJÏÐHúˆˆœ sÝþºÇÏ¡x¸üÇK?^‚–Î–Ž–ÔàÈ`p0ȼÕßÔßÔß·³ogßÎ6ëz@è_ÿçõ3×ÏÀÉ'O¢n®¿ñéOM=õŸý¹ûsß“~D÷‹ˆ ¾ þcþc0â †GÕ¾ìã‹óç«­ VayÛò¶åmp­þZýµzèíêíêíÛ:Û:Û:¸Py¡òBå|ã—‡/_çfçfçf¨©¬)«)×7Ëj—Õû!w$2QûàÒšKk@»Ÿôcµ|þtÎÓ9î"žÓžÓ"šk굩×,râ…/ˆ½º¬º¢ºBdiáÒÂ¥…"3}3}3}"Ö%Ö%Ö%"Îjgµ³ZDmWÛÕv™·ô½Cïqt;ºÝ"•*ߪ|KdY`ÅøŠq±Ïx&Þ›xÏÒ!â-ö‹X¼ccîi–3¶{¶{I«~D?b‘U×óšóšerÅlíÝÚ»â¬ÝP÷sÝÏ"¾ ß„O$cSƦŒM"^¯×ëõй‹ÜEn‘™æ™æ™æùÆÂ¥áÒp©HŽäHŽˆt¾Ø¹µs«Hd âøEž½’½*{•LŠX×Z׊Sºm³¶YŠDû[Æ‚Œªbž˜ÎïìÙÛ³Ü/.(.0Ä]â.q—@»µÝÚn5ë[n9¸å œ+8WpnÎ|äpäpä0T*84rhäЈÙ/_}qõEèüÕ7-ç©¡§†T¨vãëžìž„©¯Ô>ï?ÊJÊJˆeîÈ,Ï,‡š›57knÂ#×#×#—)°mhÛж!8üüñóÇA…TH…`=ëY\É¿’%ÜCî!÷dËjÍj…º‡¯ôúGÄþ(LêAמ®=À¢¤ŸTŽàß Î§ù/IlœÌF ô¯P_¨¥ÒNi§æ¿ÜSSS;;;  „ÉôÉôÉt —^z!v v vBB?…~B©Uñ;ñ;¦¿55{v@ŒÜxœ#éÉ\Qï>α*UÅ´zQíP;€•¬dåg³Ì2;Gÿï…ú«Ú 6€ò«€ ¨5j ÓjaŠÿ/Á[Á[ް#Mã#ÇŒäÉ»;mwp"™Ìêr"œíÚíÁüäÇI6Ù@M4¥z ԯꖺ̤j ÚWÚWÄÕw‰P"øäßmÛmþøsò?¹ßÊ'övñÄÞÇžÌìÿ$BöȽþîIEND®B`‚routino-3.2/web/www/routino/icons/limit-22.png 644 233 144 2335 13061246467 14521 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü’IDATHÇÍ–_HTYÇïèª3`–`=D2a‹4°äKùR‰aÛ?*’,¢Ÿ¶‡þŒP»ý! †%(vØÝX$5¡í¡Dmi^,û£e²îCã@SMšzÏ=ç³wÎÜ»Qí>z^¿ßï÷ž?¿{ 0 Ã0dfrJsJsŠl;ç€ã÷nðnXö›m_¶À³Å³e(ó/οP)ŽÈaÇÖqï®7 ßͧýÆÃq´´y‚û$ììxÚöù»àëðuL 8xãà €öh{”FHÆ’1€T0ÇÖq¯ë5žß8ù¿a@Þͼ›ž¿¡ ¿ ß0À¿Þ¿¾¬ÉN-ƒM7mx‘û"Wå€5R¨‚@š4z¼rÙ:žÉ×õOãk>Íoë1 dmÉZÀͻ6ïòýl ÿ‡—^¢ùÌà4§)‘i«ÎªcÔ]upl×ùº^ãi|ͧùm=Æ¿÷ö·°Ý»Ý (ó¦ÕcõÈfÙŒ)ÿRù*%ÆÄˆ™–oåÛìŠ!ŸÉ§ò)ˆ1qÓj©ZŠyFžÁdÚ궺]øš/Ëo¸}ýø’¾dú+ˆ[q ˜ äy)5Ã2–'9Æ1G]tÑòƒü ?tÒéŠÿÀqŽƒš¥œry^žgÊÁÏðeùm=a—ÿ„†æ†æìwÃ;‘ ÀC)¥ö÷ æ æ æAøDøDø<é~Òý¤ÛÑñøÖã[oA¸%ÜnÁÛƒ·o;qÕ©î«û(„H‰”‹/ËoëÉø®½½–ݵ_^6W›«™Ñž~«ßê· p¶p¶p‚w‚w‚w ¢¶¢¶¢Z£­ÑÖ(,z¾èù¢ç|||þmþmþmð¨êQÕ£*×–ß7›Ì&¯ö;ü¶Šz‹zU$+“•®ÂbX ;öuq]\j µ„ZÕšª5Uk ¶¬¶¬¶ ÂÑp4uâû*öUìƒÈ‘È‘ÈÇo}'Š…®-ÏòÛz (žWƒW‰W ×µ7Õ¸U¯êU½S[[[@ @ýîúÝõ»]ñ±ØXl V\]quÅUØ+öнTªSu.Mj§Úén3šßÖóùûà Y!Ç0Ì|í¾v_;œ-?[~¶d\ÆexxxÁ—ö¥}i8·îܺsëà}Ãû†÷ La Ó%lH]QW¾¸bŸ>cÖÆ™×3¯3iŒ4Fíö—wVN®œ\9 þåþåþåP}´úhõQ(é+é+éƒÊ­•[+·BÑâ¢ÅE‹¡#Õ‘êH92¬ßgkfk¾xÆ>s+{E—èr.“ùÌ|h>„—Õ/«_VCâTâTâ$#ÉH2©¾T_ª&F'F'F!q(q(qÆ[Ç[Ç[aúÇéд³Š_Å%qé?oå'ú˜=j@î‘{˜"™õÍ8ëø¿ÆGù¼,þûØ':¿ vg¶F¬à¢5eMaª65¤†PêžêQ= zí™\rÉuìl<“OØzg½ÃÌâeñ?Ûùçì¿rξ.æì{ln¾`ÿ.qºžCØî©IEND®B`‚routino-3.2/web/www/routino/icons/limit-161.png 644 233 144 2545 13061246470 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍV]L“W~ÚZhmåO£!a1àeå‚] k»ŠfQù1&ÚÄ0ŒÛ¼Qà &s WtÆ PBÀŸâß… B§D·31#.QÛ–ö;çÙE{úuêv͹ùò¾ç}Ÿç9çä<ß ÈJ|A773â±±AÏ[vXv|v%_ÐHÃ^ÃÞ¿šÈÌs™çH2»=»]<Óc5¯êSû?•Oå‘=‘Þ›Þkð$âSä¾’}%G<> ­×­×bäaÿa?I^»tí¿'g‡g‡Iòç‡Ôc5¯êU¿ÂKÅÇ©øÒ|Û|Ûð’LOKOÈüŠüŠ‚ã“dÕΪ$9cš1I#I’Úß$í´KÉ0ÃTc.%Vó‰zÕ¯ð¾âSüq= sݹn€Ü³Ï~k[¼áYy|ýñõŠ/zd3›i'cáX˜$µÚFH’¤RÕ¼ªWý Oá+>Å׃ŸmË6²ÖRk!"ÉèCRdŠLR¸£ÑNFåqÙ.Û)•dY'kd ‰ÄFH!„&4~8¤pE;¢ŒÊŸcÛcÛ“ ~ÈpM´&ª¶lK9J(j¥°¾¶¾¯"ÇŸHVj/¢åÑr.ÊnùD>I¡ÊcóH9/çå|JÞO?ý$ÙÈFR‹h!-DÊùT>%IÑ!:¸˜8îJr\×HÒ:k ¯RzÂ.üF9yä¤B_Ê¡è­è-}Åó33dðnðnð®®c2k2k2‹l¹Ór§å9Z7Z7Z÷ÑŽ1p:Ðh&§r¦J¦JRvü×8ŸÎ×cŒï[Y?þpmumð J .S¹©Ë}y}kúÖÀàµz³¼YÀèÑ£7¾/ä ¡Ð@8ºùèæ£›imZ›Ö€þÖþÖþVÀ{Þ{Ñ{x\ö8ûq6 ‰öeÙç\Ç\ÇjYÿ* c0cÐù\N—À`h£…/ùÀÞáÓ—s5ç*`¿o¿o¿Ü÷Ä=Lœ˜81q¨,¬,¬,œMÎ&gmÎ6g›A‡‡‡i“«åêäºÒ‘çÜ^·PzŒ€©ÊTÅb|“¶¶l˜—_³žõ@±ÎTgŠƒÅÁâ °ä_ò/ùÙ#{d;’;’;¸ÖºÖºÖ]]]À£©GS¦€ê¶ê¶ê6`SdSdSXz³ôvé­¾ãXŒóæ~s? ôqSÜ4ŒAÆvÅv%ËsaÆ4¦õ~v²“€œ•³r°WÛ«íÕ€ÍgóÙ|@C~C~C>àv ;†™³3ggÎêý¢H‰"ãxŽç)ÂD‚±Ý±Ý€Òcž°çÏßaLÊøŸK³4cYe2Ìæ 3°8±8±8l±n±n±Ë7–o,l›ÅfœcÎ1çp°ô`éÁR?³>³>³0kv›ÝÉô2¾Hðah`hHêù¯[ÉÛ±îX·~+C[Ce¡2òý«÷¯Þ¿Òo›Ö«õj½äœgÎ3ç!E¡(…ßJÕID (IÑ"ZHÞúô­Ô},é#ÊW”ÏŸðq‘Ë0ù裔6i“¶']'×Éu$ÝtÓRI.:Ž—Äÿ_û„óG•ók/´$Z£ÖÈ(O²›Ýºñ2»ØEÊò|@ò /óòÇΟìÿI«Ð*Rœ?Vkª5}ÒùWì¿rž.Vì{,þb\i/Ø¢ÃS¤SR!»IEND®B`‚routino-3.2/web/www/routino/icons/limit-106.png 644 233 144 2714 13061246470 14577 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍV[LTGþvY\V‘hŒ†„*%] ‰ Q»¬©ÑÔH¼€Á_°´åA%“jj¢1±Ö„`5< †"$k@«øÂ WCˆZª\ë®Z-„à‰r9{f¾>,³géåÝy9ùoß÷ÍÌ™$ vþ ÒºÚºÚ´­_šþ¨­Q[?º´¯¤e—eׯߒÎJg%IÆ]‹»&L[ÅU~x=`â‡ó)?ba:ì^»×â™·Ï{Ó÷¦G%íïÛHG££ñ]€ÅÔƒ…{{ñs2?*?Šä[’Ô;IáNRäê5z uù¼.¯S*É2Mº¤‹ ø¾€”e‘, ­ e¡<+ÏR~™K™K¡.„>¡O„&ÜÉé=ú¤Tü”ZAáxáx¡ÙÈgâ™á~aŒèô |/ëe¿ì7 ™ÉLf’ÌasÂüe,c)Ëd™,#éä. ‹ß…¢ïy$ˆOÆ Æœsø>ͦôÌ »ÚNŸ*>¥ªE¦lÕïé÷̉·ýØv©í9Ü:Ü:Üjò<­|Zù´’¼y9òr$9zeôÊè3>”1”1”A^¼±ñb#ÙSÐs´çhØŠwù8]|¼ø¸ÚÚ«íóÂgw]s]3ÉJ’”E¤˜“œõ&z£½Ñ¤í¤í¤í$éõy}^)JD‰(!Ó¦Ò¦Ò¦Èô[é·Òo‘i i i äðËá—Ã/I÷}÷}÷}r[ó¶æmÍ䯉þ~ò†‘¼‘<ÎÎË+’ßÝ`¦c¦c¦Oäùˆ~ý0úa¨ÎZg­³мšWó‰‡'ÜUî*wPÓWÓ_Ótßè~Ðý ŒÏikµµJwÅ]Ëo¡ÄxDŸIÈqŽsÐ ÝÐ ©/©/©x½æõš×k€ç»Ÿï~¾ÍÍͲ{³{³{›Ûæ¶¹âââ ¡#¡=¡ðÿà/ñ—˜|̘;=wPz¬€æÑ<»ammim É8ˆOd¤ŒÄœòÄtÅtÅt3U3U3U@ÖPÖPÖ——¸j]µ®ZÀSï©÷Ô©©©ÀŠéÓ+¦ÅÕ‹«WY¿gõdõûíûüûü Ÿ#¦::€žÿ;•l ÔêÌSù6çíº·ëÈYÛ¬mÖfž:Q!*D919191IŠvÑ.Ú͸¡š¡‘ã›Æ×¯'ÅÇb³ØLIŒ $çùBü Nejéxåx¥ÙÈgÆ3Ãìc¤8 ð=u.ÇxŒÇH¡ M˜Wåyy^ž'e¯ì•½¤L“)2%,¾2P(ç{ºC}líàZ’³Ž1ÇØ¿úØt~]u~cÄ!™`œ0NPç)Ö³ÞìCldHÙ#{dÉŸy›·Ã&p“ù˜RvkµÔYg1Ž„u~#ß–oS+µ ó°wåûºø`ßcæ öo¬zœq%¹JIEND®B`‚routino-3.2/web/www/routino/icons/marker-32-grey.png 644 233 144 6405 13061246466 15632 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ºIDATXÃ…—kPTǶÇÿ½÷æ… #â¥&¼G = ‘@€Dô >ÀòЏê!Dz ׌…”1oÆRbD&·ŒÆ\Ž AA½2=JDd ¯a”D d.ÃÀÌžÝ÷3ž*«RY_ºzïÞkýv¯w¯&EEEEEEpÇ”N5Ìbî!÷{HŠN*:Eg?-~Zü49œzPê±ÿ?xÞ‡÷‰Ê¬™¬™¬¡_@ 4¤!A€nt£@.r‘K¿§‰ÓÄi¤ä¹Á»2BFÈÈßËw{ïöÞíÝôKIfIfI&âø>€¤Lq7\îÌKÀXÄ"–ùA(Š…bá†Õl5[Í3¢‹k‹k‹kè·Y‡¬CÿˆúOùaùaùa\ŒJŠJŠJ"…óEóEóE@´g´g´'àì;ß;Ç;¿wú{éßÏßÉãäã3ø&u£nÔMØ@²I6É8̰lÀÕoͧͧͧý=½½½íIÝIÝIÝŒmŽnŽnŽŽ,Š Å…ÇìÀÈ0ŽqŒÈB²ÌÂ,ÌÂø¤ï¤ï¤/–é´:­NKmWB®„\  †ß~gøõ_Éd²€…{¶=Ûžx˜æÐšópó&Ù5±kb×-´ÐúNãj¸®Fû«Åj±Zü—*ßR¾¥|‹Mÿ0ýÃô¹ÜMî&w”˜Žé˜žÑ =èAW¸ÂÀÆ0 ÁH/é%½àñ/ðܨۨۨ •_W~]ù5¿ÁÐlh64s·\¤.Ré£z>OãÓâÖ"qˆ{üŒ´UÚ*mD3E3E3?¿>^?^?^ï¿T¹J¹J¹Š_–“™“™“ÉÝR +†Øn_j_j_ +…•ÂJpøà€< È€ô“~Òa2L†œÅYœ„ÕÂja58»Ò®´+…N¡Sè0Ýé_¹R¹R¹’_æŒïäqò1ü?Æ¥D[«­ÕÖêÌH¯Õ^«½VÓÀôóéçÓÏsN˜èvºn‡[ÏÖ³õsˆ9ÄÈ&²‰lŒd$Æ0†¸À.11Ì7Ì7Ì7k` ¬ 'è znNÿé×Ò¯¥_ã~ðZáµÂk tò8ù8BChÈžU6¹Mn“ Ÿ%|–ð’Ü/¹_r¿Á(#dŒ–Ñ2Zàá̇3ÎŒ{{{×R^Ky-˜­›­›­ð>ÞÇû¬°Â <—?—?—¿üVð[0m`ÚÀ´àõ–×[^oh/í¥½ps?å~ÊýÆ–$,IX‚¤ÊO+?­üùŠ|E¾{Vq| Èþe“Ç9sçðÅÜè¹Ñs£I,°Àžñd<OàòÉË'/Ÿ®—^/½^ ¸éÝônz`4x4x4H J J ’ï%ßK¾Ü½z?¨(ª(ª(¦mž¶yÚfÀT`*0ª¹ª¹ª¹À{#ï¼7§¹Ì5Í5Í5‘²«/®¾¸ú_˜Ì æ„¿lâ&“ÆI#þ;<%<%<…Òi‹´ãŽeVƒÕ`5MåMåMå@jZjZj·4niÜRà¦á¦á¦¨žU=«z¿$~Iü ~yýòúå@¤O¤O¤°Æ}ûw` q q PG©£ÔQ@ôÑè£ÑG0„! à¤7¥7¥71î·Èo‘ß"¶ÛŒmFìg°{±—„0g˜3Ì™—&¦ctŒŽ¬?ëÏúY˳–g-BZCZCZlx°ÐíÓíÓíæ5Ïkž× 01L ¨n«n«n1Ù1Ù1Ù/ý‚ëà:¸@¬=kZ`Z`Z€>þ#þ#þ#°ŽÕK5£fÔ€*Y•¬J„$!IHÎÞ>{ûìm «´«´«ಸ,. `KضXÞ¼¼yy3àââ´¸¶¸¶¸ÇÓŽ§Où/ò_äWWWˆD$"A ¬¹ÍÜfnC£d”Œ’že$$$xuŸwŸwŸ7=ÛÙÙ @T°X>±|bùx`y`y`öûØïcX"‡#‡#‡ÿè<ÓE"‘ :¤:¤:D,ŒX±ˆhhh"«"«"«`ò7û›ýÍÝ2ß2ß2óJö"{‘½0L'Ó¹S 1$†Ätn†j¨9_G™gŸ?U7r{È1rŒ»–ÇD1QLTA JQŠR¦´îrÝåºËü–‘g#ÏFžAF H)€IøNøNøÀOø ?ðƒü€© ‚A0‚—à%xaÒ!m·ê¦ê¦ê&{þ3Û3Û3wD,‹Ä¢ŠÕfÕfÕæ¯®b7vc7ùzÑ‹^>ÑYÊÑ~ôó¿`¶a© ÿ1üÇðÕ+$%%+JFÒGÒGҹѪʪʪJ{¾3 131cOñO_î ݤ›t$Œ„‘0ЩÌAÜ¢oÑ·èéÛ?÷ýÜ÷s«v­w­w­¹‡ÜCîñðLwmwmw-«nÈhÈhÈ o“<’Gò ¾¾¾…RHú;ýþžð„‡å¹þ¹þ¹óç5΃B>$’Âa°`û¾)é=žpHñÈMqĹÍ8®$bGב"VF4¢ÑžObI,‰}{ÅÔ•ãêÛÛÛáoë…õÂzY<çàœƒs"M躄.ȘP&” Å$_Èò… :t4È<33ÃöHæIæIæ©R–²”-¸%” eBwđ٭Ό•”””””ÀäœQ8¼ÔC»ùí!‡ÉarøZ5“À$0 5ÈAr˜ÒZ[­­ÖÆo---‡Œa†að»s&š,M–&‹0þ¸ìqÙã2¶G²S²S²ó—‹“O&ŸL>ÙùUÏ»=ïö¼ 8•Îà èä{ ú °s€Ìáà'‡v/„Ÿ?~^½B²I²I²©¢dÄgÄgć=Wt®è\‘=ß±ú:O§Îßi[µ­ÚV²AÖ%ë’u‚RP Ê¿ÝàÖqë¸u–EóçÎgŒŽxÿîh-¯r±ø‹ïèê¨ u¡.ä¯CaCaCa8aŸmŸmŸýO^(®.}–ø,ñY¢çùÑÎÑÎÑNú_í'ÛO¶Ÿ´¿9f³ÙØm¢Å¢Å¢ÅùÒrZNËÿç"ÄCÌ`„Fa–3މâ_å!øûí£ h°ï¦5´†ÖÄ÷2ULSõ¿©©©B˜¨LT&*c:Ù6‡Í¹ÒTTT•¯ïÕ÷ê{É%a†0C˜A¿uø­uŽÿƒ?±W´ëØ.컑‡<äqwI&É$™×ƒhm  Ï’úIý¤~L'ÛÏö³ýOü„ýÂ~aÿ–®µ]k»ÖS€tøs––?ãøð’ž{GIEND®B`‚routino-3.2/web/www/routino/icons/limit-0.8.png 644 233 144 2534 13061246471 14577 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]H”iÇÏL9ã4fYJ†RÅ.†mM®%[XD`”ˆR KD°]Tv±KA”}²BC~JßVÐb‘¶M4í’¸šé:É09ãô~<¿½˜yç>öÞ÷f8ç9çÿûïóœ÷‘¹É_ç"ç"gv"vÖÚùÌM™›–üžˆÏàØîØþç/0çÌœ39—s.›/íØZ·êÓûElýtž•—¹b'Ü×Ü×¾d| ví(ÊÌKÄ ÷Áã÷ø'u¨»^w µ©µ‰0òhäÀ„oÂvl­[õV¿¥—®/Ç>ã‹@FgF§cÜ.·K Ê Êÿ˜(øk1Tl®Ø 04ch†r€ñ/E–ò"XÏxZl­'ë­~KÏÒ·x?áG w}îzضsÛNÏ¥DÃËf8”(ßâi~à'È=¢GŒ*£Š8¨ûê>`ÇÖºUoõ[z–¾Å³ø ?òé»=ý=Tº+ÝÀí!š¡úN¿¨_DÓÿ1¼†¥~RÔì'L˜°šÃæó èƒÆ,cJ¹ô}ú>40Þ¤¾JòR|I7´ì7ðŒxF"3‰'ƒ“)ýXg4DYMuiF6²‘@e”ÙiUQŽsœãiõ§é¢ È5‰¦ôcÁÁâ'ý$ë½G÷MýßbÕª5iM6/ø<Øì…³g3ÎfÀ@d 2`ï-Ì·æ[ó­?;ÿìü³óÐÐ×Ð×Ð/V¼(zQdë©›š_ó<›Ÿð“4öôgh ·„A=P5IøøîñÊñJ(öû‹ý°üöòÛËoÃÒøÒøÒ8Œß¿3~Ç6ÔÕÞÕÞÕ¹ër×它]å»Êw•Cþƒüù ·µ·¹·9U7›-^‚oùqŠdß;[²Jd}éúRõ«ˆˆãRòM»;»;{:{DÜÝînw·Hÿ†þ ýDfÍš=$Ò1Ò1Ò1"©Gói>Í'â¹ê¹ê¹*R^_^_^/²ðÞÂ{ ï‰Äb1b¤ÊÝÒfñ|ËSdFÅŒ ¾ÉhËh‘°ˆˆ„¬N=¨¿Ö_‹d²YÛ@ö«ìWÙ¯D¦NNœ:içßÏ|?óýL‘<É“<¹Rz¥ôJ©ÈDx"<™ß>¿c~‡]/M/ÉOúqŠ˜íf»# ¢oÕ·Š8Ær­¾‚? <]6ºlt™ÈðªáUëD]ƒ®A—È’²%eKÊD¤B*¤B¤¥°¥°¥PdMlMlMLä–÷–÷–WÄuØuØuXäɇ'‘'ÛÕ/ÁOùù|q&ùÎÛJ£’¸µvûvûvûÀ»ß»ß»Ž >2 ¡ªPU¨ V_X}aõèéîéî醒@I $999PªU‡àãš%KÔµ€8¿¾Ç¾<•Zò”ú„>¨Ä)2ÿ6fBP µGíQ{@­UkÕZm m mÚh£ âõñúx=ŒŽŽ‚Zª U¡}*ПëÏí)ð?§2mŽiÁ©àTÚ;hô}D͈Z¤¥Í«U£j€Zj©M˯P+Ô P~åWþ´ü,µR­¾1N§ÒæØ”57¿:Ç>™ü™•™€‘šüýF?Ðaæ™yhꩊ©Š›Üà0™ø6ªA5¨Q¢À^j¨uO©1×Íyæ<´”^J?ÉûròOÛoå´½]LÛûØô¼Áþæ^Î{¿]zIEND®B`‚routino-3.2/web/www/routino/icons/marker-62-red.png 644 233 144 4274 13061246466 15443 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜqIDATXí—{LTWÇ÷1¼-»“ZQ—‡«»‚•TD´jÅ¡…XM7FA›&Xº­ÂVÈÚ„ÚÕg ,¦nT°ZšX]Ö¦»3Q6±Œ :8̽s¿ûsî<6«Ù잆ßý½>çœï9'M_PÀàW‡ZB-¡î™÷CTH{H{H{ö QeQ¾õ'ZBKh 0íVªH$‘Df¶RÅâY>«ÇêöãWòøóS1óæ@ÿ¬…b»Ø.¶›G¹ýÜ~n¿ ­׎kÇqaó½Í÷6ß¶>ÜúpëC`KÆ–Œ->›ùY<ËgõX}ÖïÅ<į ´ã¿à'ø ~¶„­Ðܹ…s å’ã=Ç{Ž÷(ŽLjc€œxЧx Àl€j{ý,žå³z¬~`¿ø/^ÌGºü?ÄÙþ d\˸–qMZ9ètº1ïP’•d%’\&—Ée€¼T^*/ä\9WÎõ³½~ÏòY=V_诛¡¢qfÎÌ™‰Ä ±B¬hú‘%è«ôUú*)W{_©WêášÜÝÅ&…H!¦äN¹PƒŽ)Ï-Ï-@±¹ûÝý€ÔäÊwåÊûJ¸ ÓWéëK¹¬?ãa|¤y y y°n ЕëÊuåJ¢õ±ÕjµbÌ[Ç!êîs÷Ò‘øZ¨S)UJf˜@™§Ì´¢€n¸}Ñò§’VÒª¦ÃúØ6Ó6cºr݇º•DÆ£ò‰ûÄ}â¾ÌQWP÷vÝÛÊ{ÞNÉìnt7úñ¸†+†+àÔ+§^€o>þæc£ä(@Úü'p»ávœXpb×…3΀û]÷»€d–PƒuuuÊ{êÊð‘b×&i“´I¨ÍÍÍV%IJ9÷ë;q)q)0Ã=à Lß°1{c¶?àiûi»¿_«Óêüldž¢ Eb=O.ÒhöHÛHÀxýæ#›Žl:â›™<èÎqç°³Oëôëô°þÑúG t(p¹îrÄÿ-XmV,ê\Ô ÆKÆKþèmêmò¶w|Þñ9 úÇÀÉxï=R 5AcPÏX(íÖ\Ö\&¢™Ú -Q¯¶WKDd½o½ODGDTØTØDDTñYÅgDDñqñqDD«V%í)ÝS계! þ¦¸J\ED×O¨¦EÓ¢iQüB/(Î õ õ õР‹Ÿ™!AØ3í ]8‡sD4áŠtE9Ì3ѱW½JD”*¤ DDï$¾“HDd°F}•üU2ÑŠŸVüDDT³¶f-ÑëÎ×D4UœPœ@D÷ßXöÆ2"¾{±—Ø»Ín³ÛhñŸËçò¹îaïW,>aøÈw}(kVN®œ€on|€Â\ wîÕP ÜN½ †4C¬¼¾ò:<>ýø4§7mý„qÂîa÷0\N<{$•&å$åxÔ@˜%Ìf5ŒQ”!Êe ¯ŠWÅ«ÍCê…¿%ënÖ]ùÃñ˜¾Oý>.XÂmá6N¶‚ì÷P÷¡nxrèÉ!ˆÈ‹Èžxà¹rÀ_Äž""(@ÇpÇ0Pø×;ìð8UÀÝÂna÷?¶OÛáìÔ³1·V“¢IѤØN°SYÉ®’]Êõþøå@ÿ@?àë8nÞ¹yÇ_ ÏjžÕ@kdk$Wã©ÆSÐ×È'NÀ¹»çîÂyf¢:º:ëÕ'´’ÛÆm{žÍÍæfs³{<Pø›z¾ò¹|.m=×Ì5sÍL+ž½–.ó°yU»<‹=‹ýø\ÊNe' µþÒ€ PÖ(fÅì“ÒP³½ÍÞĆÍ7Ì7HûÔ•üD|M|ͤWÑr)—rE5“2)Sü„Ìd&3‘`~~.éTŸÖz]‰®Dж~`嬜¿v¥|)0‰I êQÀ)çÉy,RÔ(Û¥).YÈvÜ|Kû–V> ¾@OE«hµŽ)Š)Š)"âõ¼ž×sg½t 3Òû»]„î|âÁ㉉4…šBM¡å°ªÝL}¦>Ó_»“Ç,°Àà žà‰o¡åòyo}.?ºüère «§‰ÖDk¢‡žOÛº°Àæ.m=qAæw¶.lZ»Ö³>íšÊLe~Ú–¢¥hç‘ç‘ç‘ïÚéCúKx_x_xŸ²YÕdÅGåý>HеA|¡ôâÂÑ ínþwíZº,]>íJ]R—ÔåSîdÌdÌd °h|Ñø¢qùת[„¡åéLj^é¾B/¾VÀ§]»`÷Ónµ®ZW-E[›­ÍÖf.¸àÂ8#577÷];b½X/Ö÷yÿ% ¿Ô×û"^ûbx:ûxÞ<ùݾßoÎÉù>G@DDæÌ|ŒéÆtcr86þ.’/Œ/üÙ_ÃñÉ 66þg¤K9ðLý3õ¡Û‘X¯ëýÑó"üh>=/s$’ˆkŽk6Xfâ tiéÒøùáøOí`ºhºøXƒ7?{ó3€ Ÿ\ø„ßÃÈW#_LX&,‰õºÞ¯ÏëxÑøòÁü"0ûóÙŸî@\l\¬,\½puÆ®pÃ@­+Z0 &Éã‰á`ßÕ¾«À¿X j¥Z‰—FšhU«jU-àÆ;J@ 5Ôs™Ëܨ|'tF÷«,•…¥ãÏðéü„õÿ9é"yûëÛ_×ÑBËo¯þ¦õ›Vp|ä¨qÔ ®]ï¿Þáë]Ö»¬w8Ž:Ž:ŽÂÁƒ7ºaZ‘V¤ÁùŠóeçËàø¯W¯BÕm9±öÄZðŒ†ù`çÊ+A}ÖcT""¿h•G¯¾ðê "Có'îOÜ7äþrÕ+»_Ù-þ®î®Ž®1”&”šKÍ"gkÎÖœ­Y3¾f|͸Hgrgrg²È†Œ 2D®õ_ë¿Ö/?®±ž±ž±‘Ê›•ßV~+â|ÏYâ,C»Õ5åš¿·)ðFà C®ˆÅeq‰ÈŸÃzb çÌóÍósVÈÆ‚Ú‚Z‘`Úä“_ÎüQì™öL‘çö-°/°‹Œ´Œ´Œ´ˆx‡½ÃÞa‘êìêìêlS‚)Á” r§îNÝ:‘iß´oÚ'"™’)™"]þ.—_ÄSè)ôŠÈy_Þٰ𵇯=”¸õ±®X—á ÿÈû>ï{ûɧ’Oå¬FçøçøC½|8úöèÛ‘k?õƒç;Ïw°©qSã¦FH›L›L›„žE=‹zr(‡r@ñ®â]Å» ½<½<½ºk»k»k#Gٞממ– K…ê[ê[ê[๩SÂåß8¿v~Í(^ ¼Á›‡ÌC¡^ þ*161V5ƒ¯ÀWg76—5—AÎo—¿¸üÅõ°õ°õ0Ø*m•¶J°%Úm‰‘z®1טk„º˜º˜ºPÔu®4\i¸öx{¼=>Òÿóã¹e¹eÐPÙôNÓ;¾u¾uÌKð'øU³¨Ó""7vçcŸŽÁ#'€ª°|¸*wU.>³Íü²ùeØ6µmjÛ<8òàȃ#`=m=m= IÕIÕIÕPî,w–;á^ö½ì{Ù+ÿVþ-è¨ê¨ê¨‚%{—ì]²RV§ä§äÃ.¼UôV¾Po˜Î:w°†õÌøØIÝ;æí˜¹•ÚŠé‰é pwº/»/£‚[ƒ[ƒ[£n[‚– %€û’û’û„C‰¡DPÓjZMÃXÖXÖXÐH#àoó·ùÛà¡ÑýØý¥¶kÏjÏFø¸¿#gGŽîg']‚ë ›öõÞ>¶^­Ç«ÞUveµX-V‹A5©&Õª¬Êª¬@*©¤Få÷«}j¨SªUµ¨¥j)^õÑ þš¾¾Ó¸iÜÃ-ÝÇtç÷éÎ[SØÃάþ®kãÀÇÁáàpÄù©f?ûA]Vmª h à¼xAÝUjðÍôï v;¨j#Úð·ç§dVÉ,Àÿ¤ó?½ÿʧöuñԾǞÎìÿu絊ÓIEND®B`‚routino-3.2/web/www/routino/icons/limit-29.2.png 644 233 144 3054 13061246473 14664 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜáIDATHÇÍ–íOTWÇЕá)…!,¡œH…ÅACR‚”h•TX›ÆÒjéBÜ,mÚ¾hʆ¢XÅ4 YÓ»‰‰v¡jÒ¦:X&øX*øÀCYFÆî{>ûbæö²»ÿ€çÍÍ÷÷ðýþ’{Î÷‰ ~BSBSBŸàÐßYñðÒðÒ´¿ðç~Ù²óŸ s2æ$€ý´ý´qÃÂfÞ¬_Ù/bñ¯Ô3ã+VÀÖeë ÙÄûá çÎð_ð‘+Ñѳ¤Cõ¹êsg¿8û€~Þôó&°°™7ëÍ~“o%¿ìÿ}XÕ»ª7äØÂla"à(q”¤¾(¸• e¯•½pÿ¹ûÏ©PðÏÑD«M€æš]Í|°Þì7ùL~SÏÔÌ#__(¯¿ùú› 4Üè€úäúdSOëqˆhÐ=ºÀÿ–ÿ-| ®¨+„6óf½Ùoò™ü¦ž©˜Çú•^‘¦b¨˜¨˜c @ë×ïjÍÆ¢nÓmhÁI•á1æyÐçôY}T­ªUµXë_Ì0ó RÆí‰öM¿§%kÉ`Ìø¡â~Å}`ÑÔ7å·""ŸA„'Âãù•ZžèŸèö° Ô+꼜§>0žO§@=ô¬d/{Ù P@V‹jQ-û9Ä!U¨ ñr À¯´ ^PŸïóDD>wSónÍ»&±~Ü6R7RÍ ÍŸ4‚s [‚î ÷„{NäœÈ9‘wnÞ¹y禕7†acEýøªñÐñPh>Ú|¤ùjüÛÑŒÑ KO¹jâkâ_`ñ‹ˆ ×ÁùÎÿ¨½;_UE?‰h‰hÁ·9}ó‹›_„Œ]»2vAç¥ÎK—À9âqŽÀ†ô éÒaýšõkÖ¯G®G®G.k A× kÐÑËÑËÑËPœVüBñ àØ‘´´€o¤ïǃ?TUpnϹ=`Äæÿͨ֨VÕÞQï(tùõW_ ‡?ÝùéNK`cÃÆ† /ù’/°=m{Úö4+Ÿ›—›—›­m­m­mVüLþ™ü3ùÐÐÒÐÒÐbų7óåÌ—áô󉉾eß2ø£"‡"‡T— ÙÃíáÆuU=³mf›uìòúSûS!«=«=«j²j²j²`²`²`²²“³“³“¡ôxéñÒãÖÖÖ   üßÈÈÈgŽ3Ç™{ôw¦ß™µÛ´™¹Æ¹F *öÃØë¡ê3½H/ ¹Ò––-âþýºu_üÇâòâr‘ÊôÊ´Ê4‘S¹§rOåŠ,õ.õ.õŠd¦f¦f¦ŠÙ‹ìEv‘¸ò¸ò¸r‘”);Rvˆx×y×y׉ %%%Š”––ŠTÆUÚ+í"-µ-[[¶Šm""/¢-h "ò¾r(GÈõPõ§¥¾¥¾ÑA‘«®«.‘þJ÷Kî—xÏ/Ú-í–,÷<ì¹ÛsW$áBÂ…„ "×ê¯Õ_«‘H‰”H‘c«­>¶Z¤j¼j¼j\Äét:N‘2[™­Ì&r1æbÌÅqˆC"Ý5Ýow¿-’t6±1±Q–ÿžrù§Ë?ñžÈèíÑÛ"þ+ž< G‚§’}ïûžvNÉã­Ó¯N¿ SýS÷¦î¡¦Ë¦K§KÁ§ù4ŸZ­V«ÕÂÃÃ?< la [À0Œ˜oŸoŸoo¬7Ö ¿{üÍão`ª{ꇩPÓm“G'¿«z°OÛ§»ƒ§2`h–é+Aó©$•„×Úåä’ j·ÚÜ¿Z«Öªµ@#4®Ø\::úÊݦRUê/|Û,=Sßô±ÿºÕ›Š©¯¨®¨Õpf5èöGƒú›¾ / ÑŽ7Š?s’“ .«ïÕ÷ÀcŒsÌ2 JSKj ø-8€RçuM×ÐÔU”?Êâ§¥â`ÅAójZéüÏî]ù̾.žÙ÷سù‚ý€ðüØúò0fIEND®B`‚routino-3.2/web/www/routino/icons/limit-29.7.png 644 233 144 3045 13061246473 14671 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÚIDATHÇÍ–íOTgÆï¶¼X”ŽAIZ”H€òK R5å¥N—Çj«]‹ íFì‡ÂÖ4Ì~p“FC‰–µkêàŠnRºÚBI[Ä@Z·ˆà T )/.JKgyΜóüöÃÌÙ·ûø|9¹îû¹ïëʹÏsG@DDžð?¬k¬k¬+|Øú»@<ÜnO8çÃ't°l³lû§¢ŽG°¹l.c(€Í¼¹?¸^$Ð?˜ÏŒË„µ„µXòýøìLß™¾Ê‡?肈¶ˆ¶9/”}Vö@ëéÖÓì‡ÉžÉ€ó̇6óæ~³ÞìÜ_ý¿<ÖþX»å.„…†…Š@Ü‹q/Æðm¸[_Þú2À!?„(+èÓ@$‘*pãÆ\÷ƒ°™÷ï7ëÍ~f“Ïä÷éˆ~!ú(yµäÕˆS¾‚¡f¨Š­Š5ù´6à}Þ'¼n¯@M ¨.Õ€ °™7÷›õf?³¿ÉgòûôF9/"R[Û‡·ƒ1 u{Gµ8-ŒŸ½aÞ04¿Re¸c¼¼÷½÷AU¨ UÁ/–º¤Õ"J·.Å,Å é{4—æ¿úÊát8MµEQ~%"’\î·ûWji¸{¸8@1¨çÔsÌsž:ÀX0Œ 6Ú‚ìe/{ÍlfsP܃ÏCRãU<ó~P ~>?¿OXr½0)"râ2Qåo”¿aY×Ãú*û*á˜óØ{ÇÞC ô\¸hß?Ü?Ü? ëÖ5¬ƒ;#wFîŒüòfffCÃw ] ]àú­«ÚUjiêmê…;É3Í|ddÁ×¼†Ó§Gô«""W+áüÛç߆TÜλ§J#ÿñaćx  ž,x’w$ïHÞg/ž½xö"¤÷¥÷¥÷ÁúÄõ‰ë!+)+)+ îUÜ«¸4ÒN:éò6æmÌÛ÷ Æ Æ@þ,"‚çâ®ïS¾OQ¥ð…ë x|zDyüäã'U Ì_›¿ÿëçŸ~þ)8kª·Uo lrnrnrBžäIžÀ–„- [ùœÜœÜœ\8UsªæTM ¾”¹”¹”À¿lüöý©ô¥Ò—‚|`üôøià»GVQ-‚f ·…ƒªlºxº8pì{r»ã»ã!õLê™Ô3PžZžZž cÆ6Œm€ŒØŒØŒX°×ÙëìuZZZ ÍË›—7/še+­´Âtýtýt=¤ÝH»‘v†¾üdð“ŸúÍtöt6°d ³…ƒVUï-ôZ-'C3B3Dú?T9T)ÑE(r9Dv'îNØ Ò˜Ó˜Ó˜#2×>×>×.’ŸŸ/Rh+´ÚDV:V:V:DâšâšâšD¦¢¦¢¦¢DÄ!qˆœK<—x.Qd•kÕÇ«>IÉfç3;ET‘ˆˆD[Nè“ú¤ˆ„F‡eЪŽÌuÌu\»"òíåo/‹tïîºÿiöé¢ÝÒnÉRÛTÛhÛ¨Èê «/¬¾ Ò[Õ[Õ[%"Ëd™,9ºöèÚ£kEJ¯—^/½.’Y—Y—Y'b¿i¿i¿)"ÅR,Å"=1=1=1"%™%I%Ib®%ªDDØ'¶K}—úD$Ä]ä.ºvEøÀ*yë·Þ…ß©üׯ'žŸxÆ»ÇïŽßEMl°OØÁ£y4Z…V¡UÀTÍTÍTMÀ&”UY•ì°ÿÁ~à 9³y³ÏÎ> ‹kssQ`ì1ö_ûø0Þ¬~³Úô³—Åô€˜¾â÷zJ=õ_ßrȵKíR»‚>Þ4•¦Ò€ÃæpÐ7æe޹ ìÔGô‘‡|LÖ"&#&ƒ}ì¡¿zmUÛ˶—jö;ó=Rõ7ïOÞŸÐ8C?ý(þÂqŽƒº¤:U'0ÀÀÏÌ2 jLÝV·ݧ›hý]ý]4þ¨çëù¦J­ï+!¯„ü?çtÿ•ìí⑽=š7Øÿ¡ÈøMe\1IEND®B`‚routino-3.2/web/www/routino/icons/marker-9-grey.png 644 233 144 6063 13061246465 15555 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü èIDATXÃ…—}PTåÇ¿ÏsvYØ%`Á‘—KòÞ¦à ‰_ I"DzA'èrÉ^ñ”¶iâŒ7 _¦1ò"­-¨7ÔÉÁIå’¼­Jò¢È.ì²îîÙç¹°G›š¦ß?gÎùóû~Îïù>çyÑjµZ­>˜ãô&Êúd}²>Þ¨­ÔVj+y@ÑHÑHÑÈÒ§¹š«¹z÷?Ä@1P œÿ¦­ÁÖ`kà%8ŒÃ8L …(DèF7º¼‰7ñ&/Q¤)Òi¤@6$’ ý|˜Œ“q2ž¨Ð¿Ð¿Ð¿ùFqfqfq&CÅP1”¤Ns° ..ú0 H ÇY+bEì‚Ýb·Ø-3ãŠtEº"Ýñû°}Ø>¬¿<õìÔ³SÏÎÿ—ªTUª*Å™ùKæ/™¿„ÄËãåñr Î7Î7ÎÎ¥¼t¿ô¼TïQ}—ž¤/ñH|2WŸç^Ü‹{±u$‹d‘¬ÐR!TBϱTYª,U!¾~z?½ŸÞ™·¤{I÷’nêˆíˆíˆí +ŠE¦ð>ÀPb S˜°°@‚„)[°-ØŒ­­­ÜÑÕÕÅòÆ–-[öÚgÊPe¨2t¡»3Ë™åÌJ.åÙ<›g÷­#  ÏSö!û}È.r+·rkð‚§à)xž ·›ì&»)äZä‹‘/F¾(&äØrl96á鎋bµbµb5D~žŸçç¡dz¦gz€•±2V°ÖÂZ®çz®‡R‘®HW¤C”ž—êIõ%=I_â‘øÈÎ ;/켈ޢ·è]ñ³%Ý’nIÏœYYY&®ÈNÍNÍN•A€ VÏêY=¼hm¢Mwpw¤“t’Nµ¨E-0íY€Oð >>ÒGú¶m`º’®¤+1Œ`^G4iWô¼ÛónÏ»²3ª“ª“ª“•We&™IfZ?ŸŠfÑ,šSãì§ì§ì§2çùeøeøeððŒo2¾ÉøF&yd‚‡ñ0/š@h€›¸‰›ÙAv€x@< ìîvw»;À®±kì@òHÉ`‚ &€ÆÓxðÁ#à%Õ—ô$}‰Gâ“ñ(Å£>Nw¨*‡ Ð|¢ùDó –ø4ù4ù4Áµ±6Ö%½H/Ò‹7s37¤‚T à—;¿Üùåð]ãwß5æsƒ¹P]V]V]RÇRÇRÇ€yó*æUABÒOúI?àªïåsÔç¨ÏQLiR4)š,©ý¨ö£Úy°}ð)P__%%%™w2ïdÞb c c o×|»æÛ5ÀPåPåP%€~ô£àM¼‰7R}IOÒ—x$>l5m5m5±’ã /<¾Kaao±·Ø[œOws§ÍisÚåùÕ+W¯\½Âùö¬íYÛ³8Ÿ|{òíÉ·ùâKõ—ê/՜ח֗֗>¾ÎLÁë?ÒséK<ÅNìÄNEOÐôÄ£7SàNáTP$¤‘´Gy(ßP¾¡|°ÝµÝµÝL?š~4ýø8o]n]n]åF¹QLFLFLF<Îc1c1à®áÚc}ú:}¾à â ‰¢B (òÿL,˜X0±7Å-âq òùü.“•d%YùX'üDø‰ðÀ,Û,Û,°?cÆþ à˜ý˜ý˜(k(k(kÆFÇFÇFÙ.Ù.ٮ߀:á„À}ÜÇ}€ô’^Ò îÊ –«–«–«¸IgÓÙt6ÿ°´}iûÒömÍ£þ£þ£þ´jFËŒ–-$1poàÞÀ½°²'Ù“ìIÈI"I$‰vc7vd5YMVsgÌ1w ø ~‚0Ü3Ü3ÜÄóxÏsŠ9Åœø ù ù 1é1é1éjPƒõ¨G=@ÚI;i‡õÖª[«n­‚¼ÙÔlj6áC…ÂGá#î¦È@2 Ë´2­LK š}›}›}³sss¡¤*ª¢*Lðµ|-_ ùÈLMMJu¥ºR D×G×G×¹/羜û2õUÔWQ_£c£c£c@ô Ñ/D¿ð›Žê¡‡ :¢#:ØÄuâ:q”§ § § ,ˆp€8‰“8¸Ñ€sçÎíÚæ¦qÓ¸iªÇâÆâÆâ„[µ[j·Ônqnv•õ‚X`C/zÑ xçxçxçb¦˜)fû‚öí ª¬UÖ*+ð¾À¾û:ìk ælÌÙ˜³¿]õX9äCѰ£aGÃ65X=X=XMrûÜís·Ïÿ·Ö1àp ä9ÈöÛÛoo¿   mhû[™|D>"¹àaÖ™uf]Hv²G²G²_œZ“Z“ZCÎ1 L§Nê¤N{š=Ížœ¯;_w¾¸7poà™™™ ,š¹h梙€\/×ËõkbM¬  )4…¦`ª½ ½ ½kªJ«J«Jqڣߣߣÿá2.p ó× шîü§ yBó„æ á 9FŽ‘c¦t(¡„²=U^/¯—×oXз¬oYß2~Åÿ{ÿïý¿'þ—ü/ù_BgãlrÙ„lB6„- [¶ˆâ„8y/ä½÷Á À 'œt)]J—bbÒkÒkÒ žÇO?}ü´ø“3Û™í̦+‹`,ùG¡šïÊP‚”È‚]Û¤‡éazX(›Æá©Ò@¤Ièú%Q¸N]C$ìþŒ87“’@¿4½};[ïÈuä:rÙ;¯±×ØkŒ&Æî‰Ý»i¬‹u±.(i4¦Ñ°‰bXÅþˆýû#œ‘ÃÏ ?7üœÐã>Ç}Žûœ½ §'MÞO¬œ•³rY™kdß•F¬¸¸¸¸¸RGáºðÈC.ïnvy·ÌåÝSð®CçÐ9Ä\ã!ã!ã!()¥”R˜¤N4[›­ÍV65X>X>X.ô¸osßæ¾íÆÛ¯¶_m¿nû¬gyÏòžå€ p¶´BK€ß#ÐßK7(].º¼[ÿʌ5ÚmÖ¹‘ˆD$¼;|;|;|q´õJë•Ö+d²KÙ¥ìØl6›Í~ç‚ìUÙ«²W­‹ÂãÃãÃãé—ž´H[Ï%àO"))))) ¢ë´ƒ»q7îFÞŽŽŽÁ×ÎYÎYÎY—EE¸"\þò¾ÑäÑäÑdß“ÆNc§±“ÿûzÅõŠëÎçͳÃì6Éå‰òÄ-Áü?Ä}s ( náà ’FÀÕ(ñ÷<âÝ"4¢ÎÂéYÔKëh­;þpÕÃUW±y¹¼\^N;…l![Ènù1¢.¢.¢ni’¡×Ðkè%Ml&›Éfò#®º:àÔŸqPüEüλ®Ï…³±e?“L’I2ÿÁy#oÌßàñ”ÇSOÑNa@~}Šíf»ÙîÜ»]k»Öv­¦îª'm,­Åñ‹7B4•F IEND®B`‚routino-3.2/web/www/routino/icons/limit-25.2.png 644 233 144 3047 13061246473 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÜIDATHÇÍ–ïOTWÇè*P&u ()Ô´ÖˆY}£¶Iƒ©P—ðÃ4M¡e¡HL(M­Ýì‹Ò"¬f©!•‰Õi–¥i×ù©µÌFjŠ¢Ð”Y™Ò,ël¤ÀLÄU'L–¹÷Îùì‹áîLõð¼¹y~}¿OιÏ÷±®|m‰¶Äg¢vbCÌŸüjò«Ïý-jf@BEB…§Öt­éHëNëŽü³Í¸™_/Ãç3ýb•˜#éBÒ…„=+öQx=ÿõüäµQ»cRR–t8xñàE€þžþšÀ?êx°çÁˆÙfÜÌ7ëM¼x|9ú¿¬úfÕ7 ·!iuÒjÈ)Î)ÎkŽ&Üʃ²×Ê^˜{jî)•Æ]À‚Eí‚1×âl3¾’oÖ›x&¾ÉgòGûÈ(È(ò7ÊßHùK´àç/áÃì³M>mh§ èA=`TÕ,ƒQ#$1ÛŒ›ùf½‰gâ›|&´ŸØQ†DD>)‚ªéªiˆÜÐ\ú--[Ë•¤Ût~”ñGã°qŒÍÆ Æ `4 Fð'ÚhãÑ¥"ÿÖµE4ýv/r/ŠUsUsÀC“ß<Êa‘ÍŸBJ0%ü O»¦]ÀQJA½¢^!Dt‚Wãj<ŽRGG „ŠëhY-«eà(í´¨U@ˆÖ(¾ÒVøVøù.ÚàùìkëëL¸Èo'“&ŽLÎíÛ:·¡<æÑb„½é½é½é`¯´WÚ+ÁqÀqÀq­‹ÖEëc;ÆäªÉÄÉDè<ÙÙÑÙšvovoŽñ©kÀr´1~ùñ ¾7øŒ¿ë}Éû’ª·,¦ØSì,ïÛ;½w6ÍnšÝ4 NÓãô@ž5Ïšg…2G™£ÌÕ=Õ=Õ=àkö5ûšc ¹Æ\c.°„-aKŠž+Ê*Ê‚œßml°Õ õ„©Çêm«·‰L¸~šøiB2ŠþPTYT)R“[ólͳ"ö­ö­ö­"ó­ó­ó­"¹Ž\G®C¤Î_ç¯ó‹ØnÚnÚnŠø¯ú¯ú¯ŠèNÝ©;EÆ7Žoß(R\P\P\ R“^“V“&b×^b/‰|."""Z@ ˆH³ÊQ9 S‰êÄÒå¥Ëî1‘ë×®_ùÇ_½ ÞÞ1D»¥Ý’ðÀ?Ün‘ÌìÌìÌl‘™Ú™Ú™Z‘ÁÜÁÜÁ\KÀ°D ·n/Ü.Rº³tgéN‘’á’á’a§ÛévºE$Gr$G¤¯±ï­¾·D6ô¯?¾þ¸„/Ù¾Ÿý~–wDÜ^·WÄ v +SÉ¡}ÚHtJJ|/û^†y×üíùÛ(_…¯ÔW áŠpE¸´)mJ›‚…s çÎò*¯ò‚ªSuªî»ìþ1­ ­ ­ƒ…ï¾]øæûæoÌß@ù>ÿåä/'á¿õQ>8¤Ò€7W¦2*h1ÃoêÊŠŽÕZµ6¦LêŒ:£Î€:«Îª³qzÕ¥ºT°}ì‹û¹Â„ ÿJkóTÞÿñJáÃÔ±_ÝêŸq¦êDÕ P_F•YÝ0,†Ô9= Ðèa‚ ­|ÌÇ þ®œÊ \á W€x*¬–Ôp€VZQjP×t M]7RÔ>öª¶ª6ójŠWþ'÷®|b_Oì{ìÉ|ÁþÀߎô•ïIEND®B`‚routino-3.2/web/www/routino/icons/marker-89-grey.png 644 233 144 6262 13061246467 15650 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü gIDATXÃ…—PS×¶Ç¿{ç„„„&‘‹hx¤QÛ Ôh¹ý­?PïhÐ:„¢×zkµu..´¾ÚÖ'- ±3¯)W«XDIm+Pë-T«e€„€‚ŠÁ@ ágàdï÷ ¾q¦ÓõÏž}ÎÚk}öÚ묽ÉÈÈÈÈÈ€“bŸè2á¦pS¸É_f|™ñ%ÈêÉêÉêùk÷å¾Ü÷Ã×ÅYâ,qÖ¢Tg¥³ÒYÉâŽáI‡zè˜`‚ @*R‘ÊÊÖÈÖÈÖtážpO¸wõé'ý¤ÿŸÅ™33gfμМœœL¬¢VÔŠZòÜ$«wsiè` bCËXËbY¬~|x|x|Ø?2«*«*«ª¬sÜ:n·Öügäñ‘ÇG_ôŽ2W™«ÌÅùEñ‹âÅ“ô(i”4J DúEúEúž¹ç½Gß³Þcoʾ۟ǿ‡ÇÃ'¸#¸”«¸Š«ØK$…¤m®D+ÑJ´ß}>||øøðñ¹~Ój¦ÕL«qíŽ7Å›âMtbAÓ‚¦M$Q–.K—¥cïâ]¼ F0‚¯á5¼ Ĉ3Èä BbS]S]SŸ¸¨¿¨¿¨g»ûžî{ºïé+´ ­B+w¥¸R\)Oår7pÃÍ—èR²olߨ¾1u¨C]Ð#B¥P)TÖý{|t|t|tnBÈŠ!+Ę olxcÃB™Æ¡qhÁtLÇtˆ\Çu\f˜aàøÂ†<ŠGñ(@ÚHiƒˆ^ô¢‚]eWÙUè8uäÔ‘SGÄ—:j;j;j…+^Þ^Þ^Þ·ªÅ5âqÍòMXŽåX~gz7z7z7Òi€4à¿/TTTÏMÙ²!dƒ˜hH6$’…+š™š™š™˜îªwջ궑md!À¾ðH>É'ùé$¤ }¤ô8‹³8 °Ø ì.ƒËà2êõ€zÓ=öC’B’B’ÄD‡d³ŒYÆç"ÇÇÇ«UƒªAÕ MëJëJë"š2M™¦ ”陞顢WèzðN‰,ÅR,ø¾…oHi ¢èêìUö*{ %´„–ÀaßfßfßvTuTuTÅ£j‡Ú¡&¯(¯(¯¨„(Êõ\ÏõÿJšˆ›ˆ›ˆV^[ymå5Ä»½X*Ke©PQ5QÐÛÛ \ýñêWL¦S n7‹›¤ )¡„ ØšmͶfà*½J¯R +©+©+i ì-ö{ *M¡¦PS¯•¿¬üeå/ˆ÷ðxø¨*†Š¡KÒ|{}{}{q0"."."Ža€=FÑc@“¹ÉÜd>ÝñéŽOwÕýÕýÕý@icici#ðÅ™/Î|qæAÄš7-nZ ^zxé᥀±ÅØbl › › ›c±ÀXÐOè'ô“©e^ó#æGÌ'Eö ìØ3À–Å–Å–År ‹ûÅýâþ©9/¬(¬(¬à<¯+¯+¯ëÁóžM=›z6qþιwνsŽóßÄßÄßDÎ}{èÛCßrþøøø@¿ývûíöÛœïïÙß³¿‡s›Áf°øÃ2ìáñðQÀ zz‚ž '¦v&¡%IK’–$¶¶¶@é­Ò[¥·€xìÄc€~…~…~\\\ ùùùÓ4Ó4Ó4ì¨×«×«×bX ÷’ï%ßKÆÃ"£/Ó—éËŽâ(޽ ™%™%™ÅO:;;“q¸N\‡ÿ’@ ¦PI_w_w_7À–³ål9à v;ƒç›Î7o7n ܤ—¤—¤—€eŒ2F TH+¤R #¹#¹#°^´^´^œaÎ0g€+¸‚+⇸)’ákÃ׆¯¡&ÒDšÈORùGòä‰9í3Ûg¶Ïä'¯\¸ÏÈgä3ŒŽÍ›;6¨ÝZ»µv+XžXžX¨(ð¶òmåÛJ@Ù¡ìPvgŸ8ûÄÙ'€g·<»åÙ-ÀêÈÕ‘«#²ì#û€Ø#±GbšxM¼&ò„–·ËÛåíbÅlÀ†ÌcB†!dô Ï_xþÂó®ûAûAûA(ä·ä·ä·àðÙâ³Åg `=n=n=þàŒú²û²û²Á¡Á¡Á! pNàœÀ9ÀIÿ“þ'ýG±£ØQ ¼¢EÿŠ GÈ#€t†t†t õÓúiýàd…¬Bq¾ï|ßù>C,ÄB,($.â"®Ï½Haxaxa8ÐSÛSÛS[z{xëðÖá­/éL:“ÎäÚ•z#õFê INëÚÖµ­ká,Ï-Ï-Ï…Œ¿ÇßãïLÃ4LÅÅņ`C°!0ß7ß7ßJ.—\.¹ H¸„K8 HR$)’€uŠuŠu ððððððpS½§zOõ²‘Ÿoþ|óç›T¡¸¯¸¯¸ÿÛ¦‰ª‰ª‰ªè|²¯k_×¾. h@Ã_ò¤=ÒiO½÷qÈ8dœkXµwÕÞU{ùª„% K–ïí—í—í—Á;›;›;›A”••­Z«ÖªÉÉɳ1³[™­ÌVÜ6ß6ß6¶@[  8p$àFnènènèð·Rs©¹ÔŒs ›Â¦°=Í%\Â%‹þ†y˜‡y-[…É:)iD jPs7ŠE³hR øAñƒâ‡ïP?¯~^ý<äääCÊ#žŒx2âI¬Q7¨Ô P Ñ €ÝØÝüŠ_ñ+0ããÏø˜‘7#oF€Ÿð~‚ÃÑíèvtCu¾î|Ýù:1īǫǫG$ƒdp/Cв•çðž#¹»'WÔdß(ü‹¤‘4’öýv’@HÂî¿àu¼Ž×çŸ;pîÀ¹¢fvßì¾Ù}ÂfM¥¦RS 303@E×Ñut€ÕXÕr˜WòJ^ L–G8)(( ª~¿úýê÷]»ú½û½û½…<Ÿ|Ÿ|ŸüòìÐäÐäÐäÃß™2M™¦Lòo´¡ mâ9O?ªD':Ñ)6c'vb'© ;v&ìLÎZ¹Anʳûuýº~`?•p*áT‚k—{ŠD’H '´ÐB `£ýq=Öc=¸»G]¶\¶\¶ðU ×®5\“ä(ý”~J¿;cã_5þÕžš3›3›3nánÚm¥Ä:âO0æÃ| ¾Þ}½ûz70¾s|çøÎ=(}•¾Jß›'LU¦*S•$ǸѸѸ‘¯"ÛÉv²2VÊJY)8¼á o€ð>‘ˆDĨÍb³Ø,(¯YX³°f!ÔJ«Òª´l1[Ìïù€¢‡è¡;cîTt,þœç ž»Idî©Ó]ws&s×µ‹Ä³jíä/Çwg&¶Ml›ØÆv¼È^d/2ºlÁ¡‡ÂÖÊZY+tGçÁ)¦‹éb:dº]Îõ¨5Úm–˜å å å sb'?šÝWX+bEBžûdÿá9±ìììììl8<…ûÓ£àÎÝ]îÜÍ#¹$—ä~ÿ ]IWÒ•»+'Û:š_5Q5Q5!n³Û‹íÅPPJ)¥ðDâÂè…Ñ £läNÑ¢;E³|¯|¯|oóyç]ç]çݽ‡ÍϘŸ1?¸CÜë@ßèCÀ…ÛÀîÜ=VVV‘³Vž&O“§•g÷ÏêŸÕ?K°ñuÆ×®]îŽ^Ýä×ä×ä‡/êëëÉKŠVE«¢`!,„…ì¨6 ›…Í£O†F…F…FÑßÝþž÷ÜPsIðÑ=mâ^Ü‹{‘¿[ç[ç[çã]Á®`WðDY¨,Tº>ÿþS÷Ÿºÿ”_…½ÅÞboáÿs½äzÉõ×Ò¡‰¡‰¡ ÉNé2é2é²·ƒx1/æÅ_‡ 2È$ø¿ãwè9w Ä‡yþDþ w³`„FWædù‰k£§éizú‡Ð±Õc«ÇV³ùÒ"i‘´ˆ¶H ƒÄp±VwZwZwú¯q–6K›¥|Ëü™?ó矻íV¹GþˆƒâOä¡Üu— W&¶c;¶ WI2I&É—tÜÈÜøÏ×¼çxÏñžC[$’NIçÝ9ìCö!ûp[wë¦ÖM­›€I@„ºíyËÑ?ãø? ‰(„€µ_‘IEND®B`‚routino-3.2/web/www/routino/icons/limit-14.2.png 644 233 144 2667 13061246472 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜlIDATHÇÍ–ÿOÔuÇ_œžzHä¹k†]ÃSj£)›Í¹5O=Ö²ÁÒsÙ ¢1írÙl™sn¶’á—eÌkLÄl0ÂËÀ~¨–4X¦¨Í2I9YÊñ½û|îý~ôÃÝç¥?À÷/Ÿ=__žÏ×ûýy¿_ï·€ˆˆÌ‰lÏÚžµ¥Ç°msÒ>ëåY/gŸˆáê(¤¬KY÷Çx²òÉJg­³Vý™Ä–ߊŸœ/’䟬gÙeŽ$ 3›g6§¬Šã½ðzîë¹³žŠáCàhu´Ž›°%°%ðMÝ7u¼ƒ]ƒ]£«FWA[~+ÞÊ·ø&óËÞGôEÀÞfoK釙3fÎÌüÌü¬÷ceAá«…¯ L˜¦m½ ¤‘¦W!BXch¶üñx+ßâ³ø-=K?V€ËãòˆÀko¼ö†ãh,áÏzøÈý‘ÛÒ3Z}ì# ̈¾}“0èÝ@ )Ėߊ·ò->‹ßÒ³ôcõÈÃÿös/!Ÿá3u*a7ì ËÌ Äòh+BçèÅz1¨¥j©ZJrŒò/ÿ&V÷Œ{f¿á6Ü †cüàð wãú‰_ÉùWWBÓ¡ÏÛç…è_¬Õ­æ„9ÁŽrÈ}A_Ð&Ùos›ÛI¨Ã:¬ÃÀ^ö±@{´‡ ÊâüFogo'€#ä…¦óS¬žøJUÿþþ PK,âŽ/:j;jÑ×ò®½pí…)åÑçïó÷ùáÌü3óÏÌOÚÕˆQ#I|Ñ~Ñvч+:|}ñÇžœžœDôýË;®w\@8VÐ."rv_7~ÖøYbž¥Í®ÆöÆvÂöf{½N?qüÄñ¤±ßØo쇅›n^¸¼-ÞoËÔ»¯v_í¾ i‘´HZ¼ÙÞ odÑpa]áW…_Á±šc5Çj¦®DmMmMm øúú‚ÊRY* V¬,XYe»Ëv—í†ÔêÔêÔjXÖ¼¬nY¤»RÛSÛ ·ÎýùúÏ×u)´¯o_æÖKžÊýßY§RU¨ ¸»ônÁÝtø¥ð‹á *U¥ª„û î/¸¿Æ|c¾1¨sêœ:#GGŽŽ… Ç„c·~ºuúÖi¶ þ†¾Ys½âz<(µôÞ5Þ5€MÖ©$Ñǃ¡éÐí&d-¨bU<©EâWÎ0à ãŒ3h400mø‡ÎÒY ¾µðHã¡>6©ó›¦m˜–h Î_å+÷•CB?y‰?¶wåcûºxlßcç ö?ÙX6ç–Ï“IEND®B`‚routino-3.2/web/www/routino/icons/limit-12.4.png 644 233 144 2733 13061246472 14660 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–[l“eÇß¶;´ìJj2Ýv1 Mdn€b›uŠÍcf¢‘b” ˜Â· è bˆa%¡›cÁÑE­Ã/`S²MÉlšB—1šÚ~ß÷þ¼h¿¶è—<7_žÓÿÿ¼‡çù^B!ŠS_ÆÕÆÕÆÂ¤n|'c7¿h~±¼7©©‚á5Ãk/о(é)éÑnftݯÇgç ‘ÁÏæÓí¢Xd ùùgJï„×í¯ÛÍ+“ú§~° ZçØéÛéøöÔ·§xB¿†~˜uÎ:!£ë~=^Ï×ñ²ñEç¿ø…€Üó¹ç w ?/?O(­+­+{/ðWlߺ}+Àߦ¿MÒê=`ˤˆE—H–®ûSñz¾Ž§ãë|:²V‡Õ!¼úÆ«oXN&nž†=«ö¬ÒùƒÀ° ”¨PßTß$Ò/ý0@F×ýz¼ž¯ãéø:ŸÎŸ¬G<|¶Ÿ¹ˆÖ'êé‚®jÏ'r9 ÷+·•Ûè©j¿k¿ƒrG¹­ÜmI[Ò–ÈÈRjçæ’ñ ½¥½EBVªmjheI|h ¸›âOeT!*?˸e<š“®I¨à–^%¢DXÐùdDe褓άBºè¢ d\ÆeœÿJ%•T‚üCWçÓxnæ'.M\°D-ÑhN²°ÊÏS;õå/ÐÒÞÒò €ö´ŽçÿÄÌ 9e*ž*ÎðŒŒŒÀ‘ÃG9 7.߸|ãrÆ/Çä˜Y-«euÆ>Ù2Ù5Ù…üyÕE?éVíi™hÞÛ¼XHÖ#¸ „×vóUß¡¾CiØ·¬}ú.3½dÚbÚCÎ!ç¦ò¦ò¦òÀ²Ù²Ù²\å®rW9”Ö—Ö—ÖÃhõhõhV!šWój^.é’.¨x§¢±¢\ß8_v¾LLçÓžñVx+€@²£0~Xøáú¢Ùp„ O! 'Å]S‘©Hä[K¬[´ƴƴFˆé¦é¦é&!vyvyvy„¸rëÊ­+·„(°Ø lB\¹>r}D¤Å`6˜ f!ÚÛÛ…ˆ™c%±!Vµ~oý^ä§¢N²nËû[ÞB¬-ü©ð§õ”,/Y® ŒAu¤Û€º uê6ÀññããÇÇ3;áïðwø;À^e¯²WÁe‡²C¥J©Rª2qžAÏ gla[؆¦¶¦¶¦6(ï.Û[¶îl öû‰Àܶ¹m [ŠÚ‹Úµ€@+ü±ðG9¡šP ¨/<|g3Žˆ#Þaï°w‚æ 9h†Üû¹÷sïÃÁÚƒµka~Óü¦ùM°¸nqÝâ:¸g»g»gÝc÷ØÁ}Î}Î}ì«ìOØŸ€Ü§LaS¾¸tþÒy€5j@[Y(ÈÔå¿¶úæúæ@}7y橺bî÷´{|½¾^_/ô×ö×öׂq­q­q-Ôœ©9SsVWWáDÛ‰¶màwŒ;Æ!ä ùB¾ÌB{Nôí9 Û¿ÞúÜÖç2wL=yºût·>×®íÎîÊŽ–à;½+µn­æ´=x /ˆçÄs ÖkµBX ka ‚gƒgƒg!T*ÃÂÅ…‹ a¶y¶y¶T£jT ëå+òX|rñÙÅg‘÷§"£‘QàZŠOmÙײë]IzŽ…,¡hL¨jznК´¦Ìbú:ÿ—ĉf˜a˜—6ic™ÂOL\¸š5ÇäCs,kò+ ¦“Žš¸J±PÀ1uI]"ÁÇøð!e¯<%OüMŽÈCrH°‡= U¹$—€©ôäoÕZIð‘:¬éÉŸ×Äþ=ùÝå#ûºxdßcæ öeñ2s$ŽŸÝIEND®B`‚routino-3.2/web/www/routino/icons/limit-21.8.png 644 233 144 3020 13061246472 14652 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÅIDATHÇÍ–oL”WÆÏÌÈàdF,ÿ¥Ô5qwµDb Áe–éŠ4´UÓ´Ô.F±¤]Ø€›ý !Q·¥]Ü•hÖ ¥MG#þ!5ÖZ7¸YÔ’,¢¢»L;ÖHµÀ2: afÞ¹¿ý0óúÒúe?z¾LžsÏyž'óÞ{î‘gâ¿æçÌÏ™“bؼÉÈÏ^={õÏÇðA LkMkÿ½æîŸ» ùãä£ëëzýÌ~ƒ¦žž—gÄH$KäCÀŠ+DíQ{ÔÊ­ÜÊ=ÃÐ(£ŒPiJS°“ø@•¨&ÙçOëÅõ¹ó#Œˆˆ¼ÀÜšêšêÇÿÃò‰W¯6ž¿ìiÙÓ‚ºñ÷goœå‰èÞ×½¯{ÜN¹r;ÅÈG{¢=Ñ_ûëµ×@KË•–+¨ÿäõÚÿ©¡§®Öd×d1?¢]¹Ò§êNÕAï{· oªŽG¶V[+¡Òû¥wJï@ÖhÖhÖ(ô7÷7÷7Ãé‰Ó§'À²Ý²Ý²Ž”);Rö¤ñsžsžsH+N+N+†ª²ªUU« óüü·ç¿Mèrö­ñ[ãj#œZvjhÃ1?f™c?d?”[ âªvU‹Üýµ§ÉÓdjûýÁ†ó ç%±+­+«+KÄqØqØqX¤oºoºoZÄžm϶g‹¤f¤f¤fˆ¨ U¡*䉈¶EÛ¢m"¶[‡­C¤¬¶¬¡¬Ad~ϳ÷ž½'‰Á’ûÛîo3µ‰8—;—‹˜œöûHnÙ²ÀZg­c)5“Û&·‰T®­X]±Zük:×\_s]$gEΊœ"yuyuyu"nX¸a¡ˆÓïô;ý"9)9)9)"Á¡àPpèIccEcEcE"é’.é"Ò^Úîjw‰Œ?OOI½˜²$e‰øEÌÕæjé°LY¦XjV{#¥‘RÓ€é5Çš#Ò_ëiô4Jšë®u®u"U…U/T½ ÒZßZßZ/Û솰*Pª@ÄtÂtÂtÂÈ?¨Pÿ ^Ä=Ï=Ï=O¤(X, ŠtÙ»ì]vë­ë¬ëD.ÿ£ï¾7$MdÖ·³¾á7ZH ™$’ªï±³…g á€v´÷h¯Ú˜pÒüŠùBùùíù픑”‘”Ç7ßt|“±‡ÊËËËËËÁ½Ë½Ë½ ”Où”òÈ#¸¸øââ‹‹!w w w’ÿ–¼7y/üvô­ÞúˆÐô/ÔF8ºþèzÀó#´ÄO%ï4¼ÓÁôØ)ñ­..‚¡KCƒCƒ¨áCÃû‡÷ÃÔÊ©•S+ c{ö>ì…PS¨)Ôxñâ‚?ÁŸœá g Tª Ղ￾o|ß Ô’ð`xÐ8•ÜÙ²tËR}༰Æ}®<žc‹Ô"&ù#ð£+ µRå«|PªGõ¨ej“jvœÿ—Þ›Þ›¶1ÛX`—õ9ö£[}·‹­•›+7ƒú,6™Õ¿4‡æu,ò(òˆ0æ+¾2&?sI" h¦™æø­ @}¯nª›@0žÛ¢}©}IXý3â‹ø€N}ò¿fyÍLÿtò?½wåSûºxjßcOç öÞ¼ê„*IEND®B`‚routino-3.2/web/www/routino/icons/limit-175.png 644 233 144 2651 13061246470 14605 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü^IDATHÇÍV]L“W~ÚòÓ"Jq“À6åÂe†dÁ@²W!CÉT$&‚Š!D{‰ÑLã¸0îÔàˆKƒQ`sñ'Pƒ‰#Ñ‘l` 3ó§`€h¯ç;Ï.Êá«ÓÝ{nš÷ïyžœ÷íûûü/Hs²9Ù¼$h›÷~ëë†WЮ¤©ÀTðÇ÷dÌ©˜S$ÛÛ¨÷¶Š«üÐzÀÀåS~Øa8"["[LYóö1r[ê¶TkBÐ>é&m×m×§äÞ{odë…Ö ¬$‡ ? Éñ¬ñ,Ò°U\å«z…ŠcÿáÈðŽðÓßddDd@~šóiÎÊýÁ„Á•dÞÆ¼$ùÒòÒ"Í$IŠQ’ÑŒ–Y$ýôS±[ÅçóU½ÂSøŠOñõ€\ºné:€Ì/Ê/²ô7‘“&)>í:ÉÖ0š ø~’%¢„³¤tK7IÒDiØ*®òU½ÂSøŠOñõàíÞþø-Yh-´’ô‘¤ÖMê1z ©§i§µÓÔd—•£”\ÌHF’©ÀëÀkR‹bQLŠx'âH锲‚÷„Oø(EâÜú¹õÔÄ-WË%ùƒÂߢmÑHN)~„ ú¼–ºÍkóúÃHîÑZóxªej™œ–×¥Gzhÿ[-$uêÔCì^ö²—äG8â—r…\Ái…Ozº=Ý$ióÛüþ0¥g^Xý}rßÑ}GX¾”]Z»ÖnÀu}ÜÛKzo{o{o“CaCaCadí‰Úµ'ÈFK£¥ÑBº–»–»–“žhO´'šl;×v®íY7Y7R7B668œ”¯?™°OØ >n/ï+ïS­­¿oÞ[ÆMô8Ö:Ö8 ¦4“Ã’iÉÄܵ®-¾¶¦ììçÙÏÇ?|üwŒ;Æ€ëëë ÐtµéjÓU 4®4®4èqõ¸z\@•§ÊSåîüygðÎ àÞä^å^ÓÔ/ÓåÓå˜ ò›ÒXíð9|ómDÆMK:—tÊÞšš ¹ñHñH<"[ôÑ"ÈÄÜÄÜÄ\òòÉË'/Ÿä;§®¤®¤®„¬Š¯Š¯Š'ïܸ;@Zû­ýÖ~2ßžoÏ·“WJ¯ìº²+„Guå¯aû°TzÌ€%Ï’ÇÕÈŽ˜Š˜RŠñü†e,¶š·Z¶Z€ÕÞÕÞÕ^`zÙô²ée yxõäÕ“WO€³ò¬<+çqçqçq f6f6f(ê(ê(êòÎäÉ;8ÓÎ à×¶[çoL›æù¾2šG¥Ç èmz›©2°9°yo)Âñ/ 2JFÉ(@7ëfÝlø]Û]Û]Û„Ö„Ö„V ¹"¹"¹ìììRRR€Ò¥;JwI2IOÒ±ÏÆÄ˜0øX¥Ý×îJðgù³~ÿ æ®Î®N•ÇÝøB†Ëp5À¢²Ee‹Ê€ˆöˆöˆvC˜;ÍæN .\,¸høS{S{S{K•—*/U±9±9±9€#ÉïˆJ¢Š½Å^…ÏÝ–ÉîÖîV`AÏÿý+Ùh4£àûÚ·Æ·†œé›é›é3fdâÈÄ‘‰#äLúLúLú»³7ç˜sÌ9ÈÑÄÑøÑxR–Ëcò%) E!Éó| üA=Æ£mØ6ì#=Â#Œ=Fê;õ {‡$g9û®àêY#kHù“¬“u!þS_ÀÇiæ*ü”’³¶g¶gïì±÷l~MmfñT<%™ ‰CÔx”Íl¦\`²ÑJ+ÉjV³ú=‚÷³žõ”²S¬+¨ñgqXVA­›¢0¬0LÝÔ[›ÿƒýV~°¯‹ö=öa¾`ÿ¨uœp^IEND®B`‚routino-3.2/web/www/routino/icons/limit-181.png 644 233 144 2544 13061246470 14603 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍV]L“W~ÚÚRPÀ"ÍLT4²̙€±Ñ¶(Úi¬‘(ŒÄ¸/¶]ibL$™/Äea‰Æ² †*þ\¡¡š¸­*dLiüACâ4 í÷}çÙÅ×Ó¯S·kÎÍ—÷=ïó>ÏwNÎsHÀÂä¤y™y™9GÍ_yûû–•z|Z%M»L»þ8Næ¶å¶‘¤ãœãœöȈ弬OÇFÿt>™ÇB‰Œ®Œ.“7Ÿ kÊjÊìN=n ‘™ÌÀ”B¼rð Iv_è¾À¯ÉÑ»£wI2êzI#–ó²^âe¿ôþ8ñ?@Z¯[¯›ž’¶ @.¯Z^Uø­^ðW!éßæßF’/,/,ÂL’¤ú7É\ ¼$cŒQŽ×i±œOÖK¼ì'ûK>ɯë™ïÉ÷äν;÷fžÕ~",=²Tò%$Oò$JL‰‘¤Z§Öq–!"Išh"XÎËz‰—ýdÉ'ùu=ø÷Þ¶n"«íÕv’$™¸Cj¹Z.©¹í‰v&DƒèR²öHÔIå¹ò\yN ›° +ß"…oT6+›S?|‡±Ý‰Ý )°uSÚVÀÇ?PË|™ù26Œh-Õp«:œp%\|+~ÅÃ4¦¨ˆŠ(ÉF6²1MÂ)žâ)’+¸‚+H-CƒRtˆ~ÑO’Z»ÖηÉíÞJFÔˆJ’™£™£±yRORØé_ÈC ‡Rëð©&®%®:BM¡†P9¼xxñðbCǃÚµjÉ–þ–þ–~rpÍàšÁ5ï­C߇šCÍ䓼'eOÊŒ½:ŸÁ¯ë1ëëVÞƒßÜëÝëü¦ÏLn‹ËâBüÒG—²/eÃä­ðnðn«ÕÇ* „G€Ê¢Ê¢Ê"`À3àð¾"_‘¯¸¯ÜWî+Àðð0Pù{å@åp¯üžãž¦ä†ÅÅqpvNfQÞ3ÈéËé[])÷j÷j߀é,í|ʧ¦1ŽqÀ¹ÝéwúÖ±Žu€V h@VwVwV7àÛïÛïÛD<OÄLöLöLö–Ë–Ë–Ë@~U~U~ Þˆ×âµ€ äë|€g£g# õ˜‹ßâg)*mS¶©àØÀ<ì1ï±ì±¥5¥5¥5Àä³Ég“Ï€ñ¼ñ¼ñ<À 'œÎ7o:ßDoGoGoŽ1ǘc ðuø:|Àª¶Um«Ú€éèôØôŒñVç¬=Ö@ê1ÚUíªéOe»²=Už+F0bàµ!mHì~»ßî..¹¸äâ`]ñºâuÅÀÍù7çߜ؎ََáx8Žxµ^­WëD0„¡4aZ’Êe õ˜˜7æ}ø+ÌÁ¾`Ÿ¬æ—(VaEªu¶+Û•íâ½ñÞx/Ðj5‡€ 3è :EgYt¨@*ì+ØW°¯Ààϩͩͩ¬Ÿ[=VO*Ç'I>oo)=ÿu*y]éT:S9±~¢|¢œœééé5NÛL×L×LùНøŠ¤(Å¢øýS)ñ³³…³…¤Öªµ’¼öáSiøXÊG¤¯HŸÑêµú”ïJ׊µb-)" iù,‘%²H–°„%i€™ÔOëýRýÿ×Ç>àü éüê°:LÒ©U2Áv2ÍùùëX§_D"Dò  ðÝ!RøïÔ*µ*Íù•jKµåƒÎ?gïÊ9ûº˜³ï1ýÅ8×^°ÿÀÛR‘KRxÙIEND®B`‚routino-3.2/web/www/routino/icons/limit-8.8.png 644 233 144 2430 13061246471 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÍIDATHÇÍ–_HTiÆßÑuÆ™ÚÊ”0Q´»ì*(] bnb`ÅváFR²xÓl Q 7[DHd‚T8äT›±Aj™öGƒÁÅD›]dÔQçœóýöbæóÛº÷»9¼ï÷¼ÏóðýyÏ' ""ëR_´iÓÖ$ã´#v>sWæ®o®%ãK&¸ö¹ö½ý Ö^X{ «5«ÕzgÇz^ãõ"6¿SOçeØ Ï-Ï-Wi*n€ý…û 3ó’qSxƒÞଵ·kot´u´ñ Œ?-–‚ëy×õšÏÉ/ Ÿè‹@ÆÝŒ»®÷àq{Ü"°©|Sù–ú$`x Tí®Ú ð!ýCºJó`5«U)#†ÿ:b=ŸÂëzͧùµžÖOúÈ-É-½öð^I¼k‡þ~­—g8Ãj0bF ÀüÉü‰P=ª.°c=¯ñº^ói~­§õ“~dùÞ6ïDU»«Ý@ ñ˜#æXcF¹QNÂ5}¦¥ÜÊ¥\Ø#¶lå°Æ¬kl¼qÌ8FÌ s˜Oñ«jOµGlÞéØJ‘ï~ï¸w<ösáXبT†yÐ<ÈtÐá0ÒL3Í€>;­b*¦b@#4.ÃwÑäšÇÍãÌi~âá™ð ,é§ü¤Œ]ê…£§ž¦¬"2ó‰y[o eàüÀyhzÕôªé nÜ:¸Õ±B=VÕcÇ---Ëð…ƒ…6Ÿú3LÅ”žÖOùI{ù+\Ÿ¾> VòœN,<žýbst~RØ\êüoÍ·ÀÏf¯ÙKBu«ˆŠ øƒN:Yf˜5ªFÕ(gŽ9à(‡9 KøÛV¶•MÌ׿k'ufuæg;ÿŠýW®Ø×ÅŠ}­ÌìÈÇNÊ^¤ÞIEND®B`‚routino-3.2/web/www/routino/icons/limit-14.9.png 644 233 144 2730 13061246472 14664 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–ïO[eÇÏ-+¥ ̺’……¢Ô™šµ‰ó•±#ÌMLYuYT6£B³c2„½Ñ Í–-*‰ƒLÉØââ§L²7¾ û“B¤ö ÇÌÀ-,moïóñE{iÝþ77ßçœó=ßûü8Ï# ""Od¾¶µ¶µ¶â4¶½Ÿ/ØR°¥òû4îLV§Õýñ ¬ìXÙàêvu›cYlù­øÜ|‘,n=k\žì€ãGÇÚ¦ þ ¶{·{ JÒøËApžvž^4 ¡¯¡àçã?ç¸}ñöE€7ý» ²Øò[ñV¾Å—Ë/Ÿ=P_ìöí8òù"P¾¹|sŇ选 ½zàVÞ­ÓGÖîq‡;ËH™I£Ä(!iÜK–&KA½—懰Ö{™úËK©‹ˆxƒó/ç_ú ˆÖDk 5@­:m,K,ñ yðà5¬†ÕpÎø]îr7 •¡ eû8ÀP–Ø•ægËøÐø€Swêú †Óz23Õy"Í‘fP¿˜,âÁ¯»»QSþ©ç¦ž{HÑH4Àù5çל_“#H”(ÉâψgÄíÏ·?Õþjr"Úí°¼æ5ÙøtãÓÖÒv^°É9‘ýòíK%/•ˆh5""šÿTIϹžs’¨YSc«±‰vù£ËM—›dÙŒƒÆAã H­YkÖš"ûÛ÷·ïoÏú544DÆvíÛ%Rw¥îJÝ‘ÞÊÞgzŸ-üò¶ Û6Hb6f^0/h~­b³w³W„wÒzlb+Þ[¼×÷‚4F£"䋈hG埼•y+Åá~Ùr‡Dh¢‰aÍ;›w6ï‰Ä â"«:Wu®ê”‡ì’ý’ý’]¤´ª´ª´Jd¨g¨¨_$¿¨À_àÇ/ÛzÚzÚ´£"¡ÙЬˆ:ÿصǮù^p¹ŠÌQ˜ž†T`ùØPíªvU» ÷Hï‘Þ#0pbàÄÀ p{Ý^·êw×ï®ß •m•m•m09<9<™³çn4Üh¸ÑÞo‹·¶Vl­ØZù_Ù[ì-ðÝ™Öþ°–Y0¦ ³èñ¢ÇÍQ›(³ÏìÓFEŒ:£NDòEDÄmý±jR{ÔóŒyÆ<#b+³•ÙÊDü Ÿ¹zöêÙ«gEnFnFnFDF"#‘‘ˆˆ^¨ê…"±©ØTlJd}h}h}H¤ú§êSÕ§Džlu½íz[¤r¢roå^q‹,þ¹ø§ˆm+I’ÚhfóÿÞ'çOÎCêõnæ‡ã¡ã¡oBßÀ±®c]ǺÞüÝ]Ý]Ý]>>>D‰_Àðàºãºãº‚åÁò`9”•––BóОÆ=Ä3Gå]Þ?ùÆÉ7€Ãi=¹§òÓȧÀ/Ö©4ÛÌ6Xð-‚¨ø‹ññ@}ôÙav˜pÝýu÷×Á|x><U¬ŠU1Ìç‚sA Ÿ~ú!L¼’xfþž‰ÍÄPêªQd­z‘–H °”Ö“æ9 ÎÛÎÛú O§–'¤Ìz³>§%2WÎsÌ‹,²( ˆ#–3¥ñãõ¦jU­æ´9Í’z6Ãp|a|ÀyÇyG_ÁôÿúXNç7^Ï{=/Ûù)1Æq 5u+uëáÎO+ûجf5«“)P×TTED&þ‹ÔDj‚¤ºhÌ3ÀoVçÏÔK>ØùÝ»ò‘}]<²ï±GóûÈKÊþbesËIEND®B`‚routino-3.2/web/www/routino/icons/marker-69-red.png 644 233 144 4203 13061246466 15442 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü8IDATXí—LTWÇÏû1ü¨àÉFaˮ݊?Vdìð#ŽI£«-„­éÚˆ(cmJ‚[EV­$-¥Y¢dœAÛЕV«€ÑJºuu+q“iÂPeù)ìàøæÍûîÌ}ófšÕlvÏ?oÎ=÷žó¹÷~ï½¢9[@Ưµ…ÚBmÜ¿| !m!m!m¹i¢,Ê¢üÝiZJKi)0VêH$‘Dæ¾RÇú³ñ,ËX_È£å+§r*ç­ñ…/‰mb›Øfàöp{¸=*ˆ>ÚíŒvâRaoaoa/°éᦇ›37fnÌôû,Îú³ñ,ËÏê=›‡øßú‹?ä§ùi~zp)[¡¸’¸’¸¹âÔÍS7OÝT^˜ŸŸ @€f0ƒƒÄ  ú¾8ëÏÆ³|,`½Å>› ‘ü?Ä ^f 2odÞȼáI¤ ð™’¢¤()ðÈUr•\ÈËååòr@6É&Ù¤ñ}qÖŸgùX~8 ¾!RE㬜•³‰5bXÓr— 0ÖëŒu“ ö¶Ò¨4bÊÓ"í“öÊ 'Äà©|Q¾8Žã¼´§Þï  Jw¥»€§ÅÝçî”·£bÄëf¬36ö˜X}ÆÃøH÷@÷@÷`íoYCµ¡ÚP­$:Ƈ“¾ï¸wЈƟö—ß—îHwTwÊ1æð:¼˜4TÞ3¼§$2•O,ËIJ[5,ÐPܰ½a»ò¦/Ëc•ÎHg4Ü#5#5pvþÙùðåÁ/€.‡.ã²ÉÞeï€Ó+N¯àîÞÒ½ÅõX¥iFu] Å [¶(oª+ÀGÊhtrtrt2ê&r'r'rýyÏælÿØþ1$¤&¤@¤)s÷ääk-±–Xm\=4þ”¹Ò\ ¨ù}õ&r'L,ãc G6ÝptÃQÿÌä)OÊ0ÊšÖ×`Ý£u@ù\ù:J;J 1)1 z‹{‹ à­¦·š´,×Î^; !ÛC¶ýþÇïä`ãa|¼ïH½¤ËÑåèrÔ3J;tº"úÙtôt4Ñè;ÑDDŽûŽûDDóæ%WW®?\OD”™ID4\3\CD´8|q¸öf‰KŠK""’,’…ˆÂî•ß+'¢3×O¨®UתkU<»_•¢´ú´ú´zô?á\c®1æNþàìrv˜šW2¯bwÆî€æ¡æ!XŸ°>A»ÅcËÆ–Àþžý=Úö¼ž¼ˆÏÏàöµg{Ñö" ¤úêù,3*3*3 ýŒxoâMÒˆ¯¡îÏåMEME „MvMvçäœÜ'kOÖjwi¢w¢W d3Ø Úxu~u>˜ºMÝþú¸×¥îv;þ±yÎg§^úGºT]ª.u°‰ 0WU¼Qñ†²F½?¢úûúû Í]Í]¦n—Ý.Ìb”KÊ% ¯ÛþýhJnJäâžÊžJÿúž›>Wp®ëÔ'´–¯åkŸär±\,û›SA€ÂßÕóµÛÆm{¥‘³pδâÝeë´ŽXG`Sµ»×û²÷e-R¤Ìi»í¥B©´¢PÖ(û•ý~) Y† † €ø0ðaØS¦®äAá€pÀlTÑLd"“hð³fQe‰ÉJV² £Â°0\qQ}Z † ÞñŽƒspZízJ=¥€û¸¯Ñ®Ë÷µy˼e€²Yº.]‡› Üú·­M[›ä½ê 4#:E§íPÌî˜Ý1»‰x#oäÜy]1Üçûnú…~¡ŸkOÜ—¸/q‘®DW¢+±Rµ›eÌ2fiµë5{ÍpÃlã1ûZ^"/‘—øµX¿ª~Uý*eú–ëuz~èÉœo ÜiîJÐÖä~èÂæ´ë8ï×®¹Ê\¥Ñ®Þ£÷èý@ÞGÞGÞG~-Úa‡°…ÛÃíáv¥PÕdÁG¼ö§ )~ÄJÏnꃴ[øSíÚ:m~íz:=žN¿rgcfcfc€$g’3É)ÿJÕb«Ð*´žÈ`RóI/p>=ÇüX¿vG…QvŽŽyô‹Ãâ°pà 7œŒÔÜnn7·û¯±Qlí¾¿$á ªëk§žllÀk>íþå?i7{}öúìõ~íÚ2l¶ œ™‹+êNpE\WôJe`þqP]ŽþK{žvW µB­P;¸œUUU+ÇSž¦ßw2Dãòk qq„3Âᆃ†¨ Íš'4g-UY•Õ+‡)™’)w³*’I&™ë@¨Îªx<ÏçõxýÐ~ââP¯Çë‡ö{þà“ñ‘iŠØ%v‰]îÓ¼@Ú…´ iü ;}¾N:–ÈY"üj™Z¦–jŠš¢¦ªUµªVƒôóxžÏëñúàþ¦)4Á!8‘¼WÞ+ïmüŽ'Xª,U–*¿U¶Ù˜ þF¿Ýo˜›=`Œ©gÔ3Àö°=<-h0 ÌíûÁ÷àoôvy»¶å° ð`K•eeßÊûs<)w•»ÊÝåঠS…©‚%¸º]Ý®n< ÖP÷©ûÕýÐe Ðh|†Ï`”+¸¬„•ãñ3~ÖUuŸ¯Ç×£{]Ý.ŸË‡G¦ S¹©œ%p<>yƒ¼AÞо—;j‹j‹j‹Ø[Á#~‡¿Þ_ohèeëÙz#®–¹-s ó«Î¯ŒöñIçèÀGë?ZÀÛ¶½m»åwøwøwhêHmQíšÚ5ì-m²!øˆybæÇÌ™ªÞ¬Þ¬Þ,½âa†À€Z§ÖØßµ¿ Œßpä¥#/ý[ÖmYgôO{vÚ³}`Çî»ćlÃß›Õû\ïsÇÃñq Y±ÅþújGÔN•© €'È5Öºšs5b‡c‡@Žü{c·ï+ÜWh´×˜kÌ¿g0v0P;Cp<Ÿ8â?—^þJù+ß¹ójþ©™&IŸ¹üÌeÄ’•…+ ‰(bFêŒT"ÂXûX;‘¼D^BD¤|¡|AD4l6½ºøÕÅDDŽB‡¾R"Ÿt]ºND9㪔?¹`rŽ«“JûJ_,}‘- Fÿ]|(>~<¢2£2£2‰äóòyù¼½K»ðó,©–Tu³vÙØXk€NþîCw‡î'j¿f¿f\yé­Ò[ÆS.¾)¾ àQ¤-ÒþöƬ7fé«.¾\ücñÞ_*‘J¤’ùãz¤‡Beæ‡J’2W™ë®ç ¶2[¶-›eh››ê}ßû>àÝéÝ `àhÆÑ ¸í¹í !g Rx/½tê×Ô¯Ô¢¶oÛ¾ÕW}tБãÈA¶ö ­+ÅÊÇYÂtaº0}n]@é_Úù* …Â%‡»`ìœ+õÎVg«³UŸ§ºYݬÏ€W{:[Æ–én–ÁòXž¦tÙïÕÜ«â'šJL%þ Ú$Ë¥­ÒV›Eƒf%+Ye“ŽÕLf2Ëåä 9ˆ$ä‘<[>×>­‡LMýÑ®w\ï¹ÞÓ² ß.ß.` ¬Ж9‚Ó8 À©ºTÀò}W}Wõ×YýÏÕ«3ÔÍÚhHî‘{œ»ã6ÆmŒÛH$ZD‹hŽÑq˜“ƒ¿ùÒéŽtG8•°5akÂV"¥X)VŠ»5îš-f‹ÙÈÝ€-`ƒN8áЇ>ôé“Tç¨sÔ9:«S«S«SY¯§D+ÑJt×ãqÝ41tÓBKØêIS¿ ÕM•$%IIr3p·ÌVfàn´?Ú­ <<<йØtÎÈŽÈŽÈ–«q2JŒ£^ßFÅÃðEГ RuwsŸÆ]«¿Õߪ3w4n4n4˜×?¯^¿:[ãb“Ô$5}°ˆS-H½p€¿¢§ˆÀ üw˜˜ø£]v—Ýeà…^ôs¤¶S¶S¶Súµ#’ɇ:‚I"/…õ ÚiÒÓ† Ox=ÈÝ“¿ÄÝôœôœô»ÎEÎEÎEødÜÏ´MBP°d{h±/¬¯@ÿ¥<»‹¥J©Rªt§pÀ쯉c‰c‰cþëÚª=’GòØfR#5R#¯ÉÖ/‚þG çîîP=ý¶°VX+¬h)-¥¥ß‹3Äâ @ :ûMüHüHü‘Ô.µKí™`b~Øæþo­=eR&eÊß…ºß)™ÈD-B‹Ðrÿ·ãöYΰÍt†Õ}êªÿ œ±D-ìEND®B`‚routino-3.2/web/www/routino/icons/marker-58-red.png 644 233 144 4262 13061246466 15445 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜgIDATXíW{LTg?÷1€. Kº.Ê`ã²+>TW]@ u¤Õ¤(º@ìR·›U”±iÖ†ú ¶l—–Ð,´ g°¶øhÝHÑbi5hw›hC[‡‰@Jf˜ûøíÌwçÎ$«Ùìžîœï¼~÷œßwf†hF¢)HøŒp{¸=ÜÎ=ôD†µ‡µ‡µç¦‰²(‹ò¿þN)”B)ÀŒY­%‘D™ëj-ógñ,Ë\ÏÆ£ÇWNåTÎÛ‚í¿LÛÅv±ÝvŸÛÃíáöh@¢bÆcÆcÆqaóíÍ·7ß¶ôoéßÒdddtfgþ,žåcùY½Gã!þwÁú¢~‚Ÿà'œ)¬Cq¥q¥q¥rʼnîÝ'ºÕÙî{î{î{0‰x€œp hºßÎüY<ËÇò×[Ôðh|dœÃðü€ó,Aæ•Ì+™W¤ÕŸÃçðÁ¿¨Ij’šI®”+åJ@^!¯W²Y6Ëfî·3Ïò±üà úÆ94ÎÆÙ8‘X-V‹Õ­ß°S­i¿i¿dÖ€½¬¤*©pK­«Ç ¨Ni¥´À´¼\^òkòk\ÆedZSÆÕésø€ÔêÍóæêËŠ¬Èp37S­éédfõ† w w w7ü–9«ŒUÆ*5¡o¤o¤ocþZõÑ*½}îÕ¹Wuº;«1«@¼ç3ÏgPé~î½½÷ö ÃÇ€ÝôƦ76½x3Ù1½bz;Ê—óeȘŸ1&L€‘/G¾éé}'Ÿ~ñé euÊjýù·—¾½¤ì:Óx¦zL2< ï¿R‰†CŽ!G»cáTFF2Ñ/Ø‘°HXDDôÕÐWCDDÑMÑMDD +V}Xòa‰~ƒlݺu+ÑÍë7¯mìØØAD´­[?QÚ›ioQDVGV½´~ m†6C›våý@qz { { ›^Þó–ç-„?…‡è~߉©°©0"¢üîün"¢Ó×N_#"Ê\“¹†ˆ¨¸¸¸˜ˆh(u(•ˆhÈ"C©¡ÔPj?¬q7Ë”eÊÒsW±(xa‡v£Åh Ñòby±¼XƒúÔúÔúT5›å3D¢ QžÝkŸ€^x1ÎZÎ[Î[ÎÖŽØ(6нþ¿$³®…ÔõŸÓìÇ °ÝÏݳÿ‰»ëò×å¯ËpמnO·§ãý»ªM‚+⊸¢õûƒËð£!u9ú/åqÜÍj„¡Æ¹‚.ª*ª*ªRÿš444-ÝÔFí\‚ËG­ÔJ­ä_;B_H½pú%”»‡ƒõu?r;¸Ü€ò(ò”%ü~¿àˆ#Ž.}???I$ô=B×á, ™ÜÿM¢´O9”C9â7ÁæWJx•Wyà.r¹‹ƒ gÎm™Œ#$ïcGýoAAüLò<ô½IEND®B`‚routino-3.2/web/www/routino/icons/limit-174.png 644 233 144 2537 13061246470 14607 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–ÝK”YÇÏŒº:f™¶ˆ¦E¶’´vQ–RdI‘h$Ò–^ÄR`åVtÑZfoöb–9İIX7 K».…/4hɪ3ˆ-¾Œé8ÏËùìÅxæ·þÏÍó|çœï÷ûœó;¿çB±tî)À¾Â¾Â¾$ˆí?[ñ˜í1ÛÓšƒø–¶½¶½]¿B|]|@BCBƒÙkaկƇÏÂâ×Sq±TXhW´Ë–;‡/@ñÚâµ1‰A\ÓŽGËŽ<;ò àiãÓFŽ‚÷­÷-ÀXîX.XXõ«ñj¾â çþ§/D½ˆza€èVæ¯Ì_õKp@ß*(,(,ŠŠv0F8âd.àÇjŸÃ°êŸ¯æ+>ůô”~Ѐe[–möìß³ßq?8¡· N¦œLQzZ p‰KÄîÓ}F©QÊ,ÈÙ€ XXõ«ñj¾âSüJOéýˆù{{%ŠbŠb€Ií ˜ñf<˜?h×µëh²]ŽÊQ$‹‰&ô/ú”>F™Qf”a7l† dƒ¬—õ¡•”2Y?­ŸF3×kQZTèƒß0µOÛ§)ƒWò¶R!2j1ÃŽa_$¸M·"Üi|Ô6i›˜–-Ò-ÝXÍ7o ­æÇ? gN:È÷r\Ž˜æÓ| òƒ{Ê=àqŒø"•Ÿ9c·^CÅÙŠ³ŠÍÌ”íÚsí¹õÅíß·'´'ÀpÛpÛpx"=‘žH¨½\{¹ö24”6”6”B“¿Éß䇾‘¾‘¾ËŸÛþAÿ C{rû†ö ȱ7¨‡VQUQ¥VîÖë9c'øËÙælêäa0ÇÌ1f]I®8WØ}vŸÝ­[/¶^„®m]Ûº¶AöùìóÙça«g«g«ÇJŒ—“/'_NZÆR¤H=y¿ç=Ê{ Ïš±szÿ8ß;ß+c',yµä•tñ‡gÂ3aÉh£Óè—é2\$ïHÞ‘¼×<®y\óõÞ8tãÐCP¾¨|Qù"+^iT•¤ä¤ä¤ä@É%K6ZýFzófy³@ù°8a±ÙŸ‡?[ÇÞÈ××éë,‚ü5ùkò×@ýÃú‡õ­¸·×Ûëí…Õ®Õ®Õ.ðôyú<}ð¤úIõ“jHÊLÊLÊ„²ò²ò²rH»šv5í* üô©àS¥'=>z”»f«ÙjëRß­ïª-QbP †°±2VÆ aÚM»i·âÍ%Í%Í%B$nNÜœ¸Yˆäôäôät!ü©þTªYw²îdÝâÝÀ»wB ^¬¬¢û~÷©îS––– òÊ1œÎÐVÊÃÆÉ@R ‰Y)¼]x»ð6Ü+¾W|¯ØZ±]wÜu®5^k¼ÖhÅÙì@¶…Ü}p÷Á](l,¼YxÓÊ1ã¨Êi¥ʱoŸJ^èNÝi¥ÜdÎdÖdø{ü=þKpüÌø™ñ3àÏðgø3¬¸Ùmv›Ý`ö›ýf?ÌlœY?³ÆûÇgÇg‘ü­wè€1§7UQYQùթ̨‡×áõE‚Ûp!þ`–™eL‡åù¬µŽa­šjªÃp€à_Dl³oâM¾Á‹Æ—#ÿâW\±ý q ãŠÀÊ¢•E_gÀæ’Í%/b^Äh;¨×À"é|Àƒ³&£l³Š7ùÏà>ÃÔ#’—’'ÎmÎm gƒ ~‚†´†4Ãç¿4ÑÄ"xU­ªñ‚îÓ}ذAÄ6û&Þä<ƒoø P¼ßÛã…àŠwŇõ󗺪®XV'~¥ËtÚʶÖXk˜¿úè¥Ôwj¿Ú*KmU[ѪÎwËw ??¨U…ïsÙ\6#ðxaT+ED²~„„±„1O,Œ¨ü À&°ŽYǘ% .ÐCú®¾%Äó^+aA &˜@£m¬«†Ù±)Ìæê k¾õ‡ë~k¨ejè/t¹.À>ªTÿ¨z—÷.ï]>¿`Ê@e :j;j;jáTÅ©ŠSÐêj-m-…™3g6¢A?ЀÃâé ûõ[hŸnŸ|º–mÀ—ß`t¡.Ô…°ªnUݪ:(ì(ì(ì˜/lbßľ‰}š“š“šÎç€sªÛªÛªÛ`|xüÞø½p¸W÷‡ø H]$±'±'ûs‘¼‚¼é±•u11'ŸI¶d‹4:No¼7Þ/’ܜܜÜ,óÖª;UwªD<ÅžbO±ˆ4Hƒ4ˆ”ö•ö•ö‰¤®N]Ÿº^„kú>$q6GˆÏð=°tñÒÅÖ0L¾œ| ê~øØЖזזŽWŽWŽWP³«fWÍ.È<‘y"ó<{2öd,R± 7n$@m~m~m>¸/º/º/‚ã´ã´ã4\¿|ýòõË‘x+Öðù»ˆÕmuÛ†E[[DlûDD$ÅTÀžbO¶'‹ä¨•£D»»»EFëGëGëEî×ݯ»_'âõÆzcEž·“ßÐ#þ½¶ÍŸAY|Y< B}„´­@¯×ë é£*VÅ¢ä3ùD>}ZèÈŒ¡ÏèÓú4È)é—~P5ê¼:ý¤~’³Z·Öp_„/Â/ì‚Òׄkb&F´ ˜à ЛõffUR€ŽsÜB]t>§Ïés@'tÚâ_±‡=Àçá€Þ 70KÐÄóEø =aa~…êúêúȸ³™–cr pL²1pÊsÊsÊ|||–߈oÄ7gÖYwfŒ>}:úÔŠ«åW~”m‰ ¾¿¡',ì·£p5p5²$ê ~!”Ê x =Ðhà~ã~ã~[R·¤nI…ôòôòôr¸Ò}¥ûJ7dffB^j^j^*d¯Î^½&×L®™\cØ/«eµ‰¯Zü†‹{÷ªk0±~b½m¯,•ÃrزÛe»l—àiò4yš,§ÀSà|‘/òlKÙ–²-ÅŠçdådådAË–-7,¿V)ÓeºmÉ#ü† ‹éC0969f;ö!5®ÆAPÔ«Ü›ëÍõæBFkFkF+Î8œq8žoz¾éù&ÈJÊJÊJ‚âÓŧ‹OClslsl3´­h[ѶÂ&¬H®•kímÆä7ô¼{Æ~Ò<šÇ²¶†ÙgôýúþpW3ž Áð;hóæC¨½j¯Úk;}«4•4r‹[z^Ç,ÒÄ{sD:­0:¯eñeñGòúüõyéN}Dqnߊy1/$ŸFÅDňñ¡ˆ€pˆgâ…x!„Csè]1/fŬ|DiB8\Ž\G®@|¢êTЄNeÂ)¢£ ¢ ¤WˆrW¹Ë¹Qˆö`{ðû"CGí/ ù_¹`o ö>¶0o°ÿ³¶ixXÔãIEND®B`‚routino-3.2/web/www/routino/icons/marker-86-grey.png 644 233 144 6316 13061246467 15645 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ƒIDATXÃ…—PS×¶Ç¿{ŸB‚@**ɃbQ?¬{íuö^›äçççççC‰1Ï4t•d@2 `mùgòÏäŸaA…ÅÅÉd~Ìùý˜æƒùàè,G³£ÙÑÌŠQ…*T‘̇ùˆ­d+Ùª*åTœŠS]9i=k=k=êÐÐÐ.ìIÖ%ë’utzI÷’î%Ý$Õ3Ï3Ï36ìÇ~ì‡6Ø`‰Ldx¯àØ!ŽGR»;»;»;Ùô/¿Dü!î{kì­±·6%WÉUrU¼LØ*l¶®.eZ¦eÚèJrÐ~Ð~Ð è ™%i–4Kš;ëœSÎ)çThŠúMõ›ê7ùššš’å„rB95fc6fƒgá,œ…C‚^ô¢€7¼á `“˜ð*^Å«é#}¤<Œ0‰ÙÇìcöÁ£óßœÿæü7ü:u<êüæáåáåáehå×òkùµolÂxo<ù?êÕåÕåÕHƒ¤AÒ ¿ÿËÖjkµµ†¦¨5jZçj3´Ú ÉoÊ@e 2³…«ÂUá* n7ˆ üàä9A2H2FÆÈ@“Åd1 n·‹Û!T‚JP¾z_½¯³ÝöÕëÕëÕëùT·7›ò“ü$?ùnŒóçÎ2þ=@  а0ÍiÍiÍi‰;G&D*R‘‡[Ì-æ´œ–Ór€\"—È%?á'ü  Mh°+±òE„éaz˜¸n€X+ceðqÛ×´iÚ4m’š€ô€ô€tææqóQÁ"XÄßÒ§¦¦€ÄÛ‰·o#YY£¬QÖÀC̳Ä,øPÕQ`Œ7Æã[×n]»u ÐEé¢tQ¿•ßÊoŽt¤¸†k¸Xc­±ÖXàŽãŽãŽèíêíêíH© ‹d‘,>Ê2e™² ‰wï$ÞA²›ÇÍ'áÃø0>lù6¿s~çüΡ8*!*!*TÀ ,ài­¢U@wowow/P·«nWÝ.@f’™d&ÀÞeï²w¡–PK¨ÐB -ã!ã!ã!àLÙ†3 À”lJ6%&G'G'G(s”9Ê lÙ<²ynñˆòòò%WŒWŒWŒ(¶&Z­‰Ë·a¯e¯e¯E,®‰¯‰¯‰gn±ò‡øCü¡ç:+o*o*ob¬ìqÙã²Ç/ú‡›†›†›Û»'vO,cýû÷?f¬.¥.¥.…±SOÐ?Õ?Õ?ÅËúeý²~¾„B 4U’|I¾$Ÿä]^syÍå5‚Ú\l.6C.3È 2&¼?ôþÐûC`èìÐÙ¡³/Rblߨ¾±}€9ßœoÎT;U;U; ‰ ‰   çÇž{~|1ÿþÉû'ïŸPzÔÁ»ƒwï†Ã5,¿Xu±êb•¸‚艞èQN"á¤)_\¾¸|10Ü1Ü1ÜQý¿Ölk¶5{KH¸.\®vgÝ˺—u+éY׳®gµ¥µ¥µ¥ðdŸ³ÏÙ瀨•¢˜|þñùÇ|?òýÈÉÉɪ’ª’ª’a£°QذbVÌŠU¹«rW傽czÇôŽ ¤1¾1¾1^´ÝøìÆg7>£r9•S9½¿iºeºeºåõäàãƒ>p7qs^™tX:,¾ê5Ù6Ù6ÙªM:t éKJYž²LLœ8;qÞ515151üoB (ÒTn”åF÷Âj¬ÆêËPŒbKB\Õ“;S7JþF¶‘mdÛ¯;H I!){æác|Œ¿:qñÈÅ#ðÊùcóÇæIÞW6+›•͘µ¢VÔ‡®§ëéziHCÚ‹œd#l„LÁL|ZkZkZk„ݦ(S”)JRæìì\[–––ùÕ]®@W@êЇ>ôñÝõ¨ƒÄ ÿ9ÈAi޼y!òBÉ:™V¦•ik‹Lá¦pS¸Ä|>å|Êùa·ë;CbH PA€)LaꨫÌcôgú3ýž×õ×õ×õ,éæøÍñ›ã\‰b–b–bÖ»³ÎYç¬ÛûŃ‚ ¦gz¦‡¯ËÊi7¨ÍÕÖ‹Þ¢·è ß»Ïî>»û pæ8sœ9{¿Pø)ü~õº]‹®…+iÛж¡mK";ȲžbµX-VƒÍ¤À,ÌÂ,á OxLêGõ£zÔ¶/m_Ú¾¾Š!ÅbãÄ81nïô=F=±Ï\Ù\™k?Þu_ĽpדÄÓ¥ºŽ ®íhG»°›¬ +ÈŠ¤u3OŽ+¦·OoŸÞ.îÚ,n7‹tÕ’cKŽ-9†µbØ#ö@NÑEt|ŸÇçÁóÛðoÿ ^z}èõ¡×¹^ÙRÙRÙÒ’ø™ŸfÏob…X!VHÊ\;ë¾£|ŠŠŠŠŠŠ0áŽ(\îóÌU~ »]¹[FJI))ýõšHiâžæ™êƒžh™n™n™æ·›+Í•æJÈ)¥”RXÜ‘¸÷È{ä=€¨Õ¢z×UÉû’÷%ïOýGXlXlX,wù[㾡^æâð’Þ¥v3æÁ<È'C¯ ½6ôþ!, nðžažažaÿybdõÈê‘ÕþMæ‡æ‡æ‡ìøÝÓwOß=-¬œœžœžœær¤«¤«¤«rCX%«d•ÿ¼Ox“{„qŒc\|Ž®@ñ/óü‰üAî¢ mh X3kfÍ }´‘6ÒÆÿ ³§ÙÓìiâkÒ i…´‚>ä´œ–ÓþÒÞÞÞø—}Ÿ¾OßG~çŠsŹì¤Ën‹ ÐöG"/å®ë¸ °;°Cr‹d ’ñ¯pÖÆÚXÛ¾L¯…^ ½Ò‡Ü 7È >](ŠG·?ëÙÔ³©g0ˆ0—=wa9õgÿfpßM–:+v³¨Ã&,«õB°hñRí ¦;’ˆ‰†L nM7©Š86Í’E"¢²]ŒZ]"¤ÃÌà&nÙ ñòàÝ^´¡Ef¢Ø@‘†ù¾yŸýÁ¼ß|3›j6»ç9ï¹=ß9ÏyßhZ~M1"®Mp'¸Ü‹ÈAòŒöí3ÚóWÈš¬ÉÚ×gi)-¥¥À´™Õ‘L2É\buVÇýy<ÏÇóÇÖׯâ1â+§r*]±öß¾!·Ëír»ë™°GØ#ìјSFSFSFq¹ð~áýÂûÀÖG[m}lÉÝ’»%7ªs;÷çñ<ÏÏ뽉kbõôâ˜8&Žù–òÍ+›W6¯LÛÛx³ñfãM–äêê @‚ Ç8ÆøàƒÐõˆûóxžç­—~âåøÈòš8 ˆ¾ð¹×s¯ç^WWö‡úCý!ô#",“e²L¨Z•V¥UZ¶–­eš]³kvƒ±sÏóñü:à˜ú–×th‚Kp ."ù|H>Ôò °ÖYë¬uª]ö1s0üj‹êTó±'ì €)í²vØv@˜GhZ€)m‰¶`>u™º P[&“N€}Î çÀϽ­uÖJk¥jçõ9Ž”‡ÊCåá—sK¥ÆRÃ2¼ÃÞaï0žGòøµ£Ú1í¢â__t FÑ á?Å«jGÙ샨Õ;ì=ï=ç–ËqËq–Áñèøä]ò.yWÏ!n8UzªôT)û0’`Bu©Mj“¡Bíd;%¿ìù²|•¾JãùÅ.þ­Ù­Ùà*rz­w[磌oyßr=hâTéIÓIûPïl >bC)KR–¤,AݳügùÏòõ@iÈC¿Ö¨58?u~ LßpñÍ‹oíÉó“çíBH@’5É À9Okû¾íûh½gùƒžAÀñp|è‘MÇ6Ûí„Ö¯1 † ¾-ø¶^ñú #×M×͘YÏôπѕ£+çÅçŠÏ@Þy?ŠP¡_«Ñj¢õ9ŽOŒ¬ÔŠM±)6}Çh–aýFì;ˆˆÆÏŽŸ%"ÚlÚl""²gØ3ˆˆLß™¾#" ˜fã ’èLt™{Ì=DD]]DDÝO»ŸÿèüGD”qofé,=Z_ñ(Å£¯<¿_YÉŠ† +ð`Rx™ùÀð'Þ b[± 6Žm€ 5héhª+ÕØ¹PG(fɲneÝ€½ò^@0rüµö¾ö>À²Øj¶Œ{çÎÊ•; 8>í¢]´‡#uçÊÏ–ž-5P ñÞO÷~EPÁ¥—>€w¾{Ô4ýFú èìéì1ìÌéÌS•© €ê­ô–NkS%UŠÖ»Zµþj½þþYȲ„¬Ð ( ÃÂð¦H‹ÿRÝYývõÛáßûŠ~nÿ¹’¤ÉÙwfß¡1¼³yÛæmD”07gnaªgª‡ˆH™R¦ˆˆ„…ÂB""ºBWŒhjkj#"zkö[³‰(”~8ý0°Ûì6‘T${e/M(ÀŒ’ÊGÊGÊGتHðßÅAqP<7ƒ’mɶd‘|M¾&_sèþkŽ5G«àŸv° ì‚póo8þÐØÑÖÏ[?7vrµ`EZP3|Jñíâîân­BÆåqyÜ}0uwêîÔÝD¢U´ŠV¡-‚®”ÃüUäo‘ô@z =.eìËØ—±H)SÊ”2÷A»y֥“ä ãú.°·ÛÛ:T]­º ÐöuÛ×ÉÞÉ^€¹s; ŠÍ¸™oÖ›|±ürêWú"ßßa‡Ä„ÄÈ|?óý¬¿…F³Àû÷€Ÿl?Ù”B?É$«€††¹¦c°ä›õ&ŸÉoê™úá~R R D ¸¬¸Ì~)\0üoø"ý‹tS/ØÔQG2èš®„ÊCå,êR]X°@›q3߬7ùL~SÏÔ÷#¿<Û³»ÑJ‚%Á•†zŒ?ã‚q jõ§úS̈2†côgú„>*A%¨¢Kc–Ù¤Œ îÒ]õÙ`Z0 Ô_ÃüP¢•hÀlDå(5‘œó`l¬ÅÁ“ÝOvCh€"õ}ZŸæÕŠÂœò)pšÓœŽiä,g9 8pàˆn+MiJNPG€*P¼¢2ÌÏž‘ž‘»f×´8ÃýD~©Æï¡æhÍQPFžIÜõ÷®ó]çQc¿{cì¨àýƒ÷Þ?õõõ0´uhëÐÖhÜ4Á(~ó çA4ü¾á­†·Pc£O.<¹°’§Æªß®~Û<ÚÆï…›""?|οšÏ4ŸYùžŸ´¦6ßl¾É’µÓzÍz :R;R;R¡ÿYÿ³þgr"åDÊ ¨ðTx*<ÞÞÞ }í}í}íцæ<Ìy˜îy÷¼{òËò½ù^ÈûíæîÍÝ,ý¬…ºB]ê¸Rr¥Te¸«X×[slË{R]ð¨à‘ ""–KòÒ¶Ö¶V]ÿt5ºE(§œr#ÃÈ02DmŽ6G›ˆç°ç°ç°Èú{ëï­¿'pœ§¬¬Þ†Þ†Þ‘´ì´ì´l‘ž–žk=×DV'½›ô®$Þøs˹–s–K"Þiï´ˆúÎ1îßòžU<¶¯l_‘+__'¢òEDd怵4¿4_$·4·,·LÄ?áŸðOˆÌ¯›_7¿NÄ%.q‰Èå]—w]Þ%279797)âJp%¸¢y2<ž ‘@e 2P)Rè.tºEþ2xjð”Hü‘øã”‘¸þ¸~žÚ6Û6“ke\5®Z‰èûõý"&M5‰Çư1,’äMò&yEZ6´lhÙ ²={{ööl‘Û«n¯º½J$±(±(±H¤ïnßݾ»"ËõËõËõ"þZ­¿Vd“w“w“Wdçÿv^ÙyEdÝIg…³BÄ=ê>æ>&©"¡ÀˆÕC åQdøøšç›ç!t$m>Ð|8î'öV¯9Ü0o¥qÎ8 \øxácÔbçbÇbGt¨[[[á¥ï¥ï¥T“jRM ®«ëê:ÌäÍäÍäw¸ÃXÞ·\¸\¾>¿ÏRúj}5ÐkêÕ|Yó%ðʼ•¬øØ¤}R‹ƒ‘ÐHhE¿Í(6Šc|ìj‹Úª]µ«˜Û§Ê¡@YdÅøÛïÈ%ÔAuR0žÏy¥r#üÿYY°OÙ§´8žÿÂÇbœ_ÿÐö¡-êü¸ô}8GŸ >â#Pß©oÕ·À-nq àÇjBªQ`9’&4%¨zuŸîî™ÎÑ þÚù_ßÿÊ×öuñÚ¾Ç^Ïìÿ /¿NU!!¬IEND®B`‚routino-3.2/web/www/routino/icons/limit-75.png 644 233 144 2407 13061246470 14523 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܼIDATHÇÍ–]HTiÇŸ7ÃL3‹d¤H ©„…6¢ t`¥¥È$Ú± ûĵV/¶….d¡­ '0’v1#Â"­ÂÈY”m‹XILpAÃr›lCgæ=ïo/fΜӶÁ²W>7ÃóõÿÿçýxÎ+ ""Y‰_g¾3ß™÷G­¸k§kgAGÜ¿¬ÀQá¨ü–^Zz ÛŸí7†-ßÌ›õö~ ßÎgÆ%K¬@ÚÍ´›OÂ?ûŠö¹rãþÏAH¿~û¯»sìÀ­¶[mÔÂdÿd?ÀŒgÆ–oæÍz³ßijã˹ð‹À¢{‹î9þ„´Ô´TX]ººtí©xÁèZ(Û]¶`"e"E;@…€ 2´˜eÓ¦m¾™OÔ›ý&ž‰oò™üq=ËK–—ˆ@ùþòýé¿Ä†Û¡ÁÝà6ù¢·&šÈ€Øll@U©*æAu°|3oÖ›ý&ž‰oò™üq=òñÞ^ø*]•.à@´ §áÝ« TQåT›Ô&´úVUªJP9j™ZºN×é:PTê•§rU.¨£ê¢ºˆæ'5¥¦ˆ‚ScÀ¼‰ŸàKò‹]Pa3¤O¦OÎ~#jD%·fƒ|À²yæÃ`€`Š)¦lqÍs6ÿc¼]ŸÉדvùW8qöÄÙdó—ú\´!Ú`Á}5V4V¾'¾'¾'àOñ§øS cUǪŽU0’1’1’ÝW»¯v__Øö…¡µ²µ²µÞç¿_ñ~…MnY¬$VbñYüq= aÏëázøz8ÙwØðD&"ñn n nƒí;¶ïؾ<žNO'¤nLݘºÚ»Ú»Ú»`Ý™ugÖ=}{úöôAU[U[U¼z=ôzȶ¿Åjb5&¾>lñÇõd>Î|¬oÂäæÉÍö%×ýº?ñï4¨° «°•õðð€úœúœúèyÙó²ç%¸†]îa(Ï*Ï*Ï‚Õ7ªoTÛPïë»ú.0ª:`ç3ùãz²—d/1†`úÕô+Ûµ§Gõ(PH!…V{¨9Ôj† Þ Þ ^ooog/ž½xö?tþÐyðwø;ü°²eeËÊxÐõ ëA—í¤¹’·51fLþ¸§ˆÑmt;†Db{c{Å´å’)! ‰…Æzc}2.×¼×¼×¼"¹¹¹"ù5ù5ù5"£OGŸŽ>)h-h-h©öV{«½"níÖn-2½fzÍô ‡ï¥LÊl|Iþ¸§È¬gÖóÇï"½z%ێȼÔƒ‘ï䈱ƒ:¨ƒZ¤"P¨Xñ¢¢¢‘@m 6P+’]š]š]*Rì.v»EªW-®ZlÕ§Ì;ƒIò%ùz>w+Q±™Ø ðœ7¼A›™·ýoûßöÃÜ–¹-s[øÄ"Å‘âH1„òBy¡<ÐÇõq}ÜV0ŽŽŸZûV~öVþ9všÓœ¶ê&ݤ›@_ÑWô[ü’¾ /ßÐ@€Ñd4ñÈšcÿ2ùˆöS½ªÀh4‰²„­lEó#4~ºbœâ$'A?ÖõCà>cŒ¡Á¨3ꈢL¼þç'ÿ‚ýV.Ø×Å‚}-Ììßåc#û Ž-IEND®B`‚routino-3.2/web/www/routino/icons/limit-81.png 644 233 144 2377 13061246470 14526 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü´IDATHÇÍ–_hSgÆŸ$¦iüS[›Ò›ªÅM:´Â†ƒ¥¬Å£‚@¤V{1«x1v!óFª0EAÌPF/DD­H[PŒÖUP¨¶™z1ì´2Wu®ÃQpk«Öµi“s¾ß.Ò““Mî®ßMxÿ=Ï“ïå}Ï'$åOý ¼ó½ó½yiÛ»Óõç®Î]ý^KÚ>ig“gÓOûanÓÜ&€‚³gí>×vâN~v½äâgó9~åËu..zª§ìƒ°eÙ–e¹Ei;ƒ`4ý+»®îº p¹ùr3_Àà½Á{#Õ#ÕàÚNÜÉwê¼l|ü¿þ‡çWär$XX³°fÑ—é„þE°~ÝúuÏ|Ï|Æ ÖÀlf›j`”Qœóg–íħòzÏÁwøþ´A¨*T%ÁÆÚµÁ3邾 °·do‰Ã—ŒG8ÂlH¦F¬mÖ6&ÀÄL pm'îä;õžƒïð9üi=úgo¿ù 6çnÎ @ò.Ië¶uÀÞoï'iÿnæ˜9˜Ôo©þT?˜ã7~Þ8ö§ö {˜Cæ’¹„;jGIòʺn]ÏüỾ ¿²}ð-ƒƒ£3 nÅ-` €µ`GìcÆ¢Œ2à4f)8ÎqŽ¥”R vÀØ0-¦Å´dåeÚm×ÛõSè°6×áOë™vò{Ø}`÷Lñ‡ §R€ŸRJÓ÷ððÔÃSOA¤7Òé…ÇË/¼üÍ‹ˆˆ€§óžÎ{:Ïõ›nÓoú1Y-NóeøÓz¦„ýø´¾l}™)ßa'/M^bÂñÜì»Ùw³B•¡ÊP%lÏßž¿=JjKjKj¡'Ù“ìIBÇýŽû÷ÁWç«óÕAk¸5Üv…YÕV…U`·Î;øf‡ËŸÖ3CÊëÊëú¨BªZUµJ’Ô£Ï%¼%Þe޳cvL 6›ƒÍR¸)Ün’âUñªx•ôºýuûëvÉwÅwÅwE Õ„jB5’2CfÈÅQžŠU,IÞ÷½ï+vzθüi=^É·Þ·ž¥’¿Ýßž)ÒNÏQÏQo¸x¸x¸X* ‹‚Ò¹ÃçŸ;,ܹ3rG*xQð¢à…n ·„[¤ò¦ò¦ò&i|d|d|$KظJH’kq_†?­Ç+Ù×ìkžŸ¥Ô†Ô†Lbˆ_¸Á ¯­°­°­PZY¾²|e¹Ô9«sVç,)g_ξœ}RÏdÏdϤ›oÕ[õV½¤¸âŠg ³”RJ’Ô¯~—ÏåOëñJ£Õ£Õºoußròhð>â2—•¡Š<Š<Š<’ººº¤ÂÓ…§ OKªP…¤­ ¶.غ «cuyuyu’M–°µTK%É<1O|\þ)=ÿ9•ÎÔ|ǸS™KŒ%Æà9Ïy˜2SfÊÞœÊW•¯*_UÂD`"0È tÐKï;Oå[öØhf]°/0f>1 ¦LÔ´™¶¬ñŸifš™À–°$K@‚ &ÜÙþß{ì-›ßÙÌ–ÕmuØ{ì=$ùœcؘé4ÀU¢Dß¼1ŠÈ'øš‹\Ä€Ýh7’$iuY]ï´ù§í·rÚ¾.¦í{LÒ4|Áþ \{‰P­ètJIEND®B`‚routino-3.2/web/www/routino/icons/limit-51.png 644 233 144 2407 13061246467 14523 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܼIDATHÇÍV]h“W~¾t1)HÿÐ Z)j•)l*Œi’âTH4öÂVëEý¹¨ŠsÌWÛMm¥L¦ˆ"H¬±•¸ Qš …„…Î ¥¶£ÚÖ•@¬I¾ógÉù¾ÏMÙv×sž÷çyžœ“󿀔>A:V:V:JòØqØŠ»·º·®¹™Ç‚Ôöiû~þœ,í+í#Éò«åWçVyUoï,~»žŠ£ VÀr…4OŸ'[êZêÜKóøëY.ÿ©“G†Ž ‘äkw®±›L;?ÎÿM gDû•t-r-Èê¦ê¦ÕÇó«IÿNÿN’|UôªH:H’³$s±ôL3Mµþ°a•/Ô«~ŧø•žÒÏû¹¤qI#@îmÛÛV|%ßðüyªêT•ÒË…I^à.&õ´ž&IAfH“1’¤F´°Ê«zÕ¯ø¿ÒSúy?xûl¿ñ‘wÀMR'ÉÜcR<ÏHÆŒ£†9ñ…¸%nQŠÅ±†‡E§è$y†gxÆÜ9Ÿ›ŒM¤üJÞ–·)I#l„™cJÜ÷Í/üØÔ3õa7TÛK'ŠéÈq1.H$ɤÑetñ5ãÔ©“ü/ù’ï]bRLŠIR†eX†m ó¸v£¯ `‡©gêçýŒ ü@=wôœÙüoè—ôK&­ÔêÍz39Ø1Ø1ØAö7÷7÷7“———dj*5•š²|Dg¢3ÑrªbªbªÂŠË¨œ”¶#Îë™úy?Žü¾Õ = =…m„¶+ñO‘UägIoÒ ‹‹‹===@l:6›2¾Œ/ã†Ú‡Ú‡Ú_¿¯ß׌ÖÖÖÃ\ò¼<(B´»Ú]ůmx[¿~Ø”Œ”Œ|ü ÐèmôšÆ®Èi¸à‚KEFƒ£ÁÑ Þ’Þ’Þ Ýèvïß½÷~ r²r²rȵæZs­@å`å`å ½Ò+½–1”`–€£ÆQ£øµ+–~Þ(òù¹p;‡Íö9mFsi.‹¯¢·¢·¢hkkü!ÈNºOºOºH&’‰d€–]-»ZvµÕµÕµÕÀ|r>9Ÿ´›Ç¼¬ÅZKÏÒÏûqÆ=ãžö  ïÑ÷˜…KðbˆY|‰x"žˆ«ôUú*888ªP…*sëæÖÍ­³êÆ ã€qŒcÜfL@‡˜À„MÏÔÏûqiOÚóÓ@ôQô‘ªc§ö<-O›¿1ÔµÖµÖµ×\?pýPÞTÞTÞ4¬hXѰn n n´ôK;J;J;çvçvçv›±MXõ _ÈŠŸ–~ÁÏ{o¥º5ßsŒc”*“õd=Y9»|vùìrRvÉ.Ùõϱ‘ڜڜÚLf\WÆeKDgüßoåûçXÚœc7›|-/Èa9LÊoåEyÑvýûdŸì#¹Û¸Íf Ë,³$É 3vËÿk޽cò«É¬‹¨ˆ’¤Ñcô0Çã॑ä’÷aä“v)ËXFòK†¢$³ÆYæ˜#bä?Mþû_¹`_jçÜ{ À|Áþ><[@wòIEND®B`‚routino-3.2/web/www/routino/icons/limit-1.7.png 644 233 144 2330 13061246471 14571 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–_HTYÇ3埉Ò­%Á-ØX£¥"h@h¢ÑØ Œ$‚(b­ \„b롚‚„Ú{±‚À!0'Ì•H‚–ÔYriÛ–¢Mõ¡ðAݧtî=ç³3gîm}ó¼ ßßùý¾ßï½çþ~sDDdiæWÀ[æ-ó¤±÷°ϯɯù¼=¯ÙàÙíÙýG ¯^(ŠEÔ ƒÍ¾Éw׋8ün=—¥âòby1O ƒÏÃÞµ{׿—¦qs|¾Î¿-8Òu¤ àöÛ7øÆûÇûÞÞÀÁfßä›zÃçæ—óÿÒœ»9w=c—›—+åÁò`Ec:a¸vîØ¹àÕ‚W ´ì `1‹uH’ĬI6û™|Soø ¿Ñ3úi?%[J¶ˆ@í¾Ú}¾ÖtÁ`œXyb¥ÑKu¸Àb°’VÀÞoïgt\Çðà›}“oê Ÿá7zF?íG><ÛKÛ .¿.?kè!Óv·Ý  :U')µE5¨´nÒ!bÎÒ}ºW÷‚íµ”¥À>`_´/¢mïìáÙät‡uÌ:æâOîIíIƒ—¶¹ŽRDä‹ðûÆ“ QC©¡TVçkP ªwöˆÊWù ;õ-}Ëå$ùÁQ~lÍ0ã†ê€:À;‡È²!«Ÿñ“1víg8zöèÙlñWætŸÖÃh³ÇÃñ0ŒÏu1ºqtãèF¸üèò£Ë r(r(rÚþl{Öö F~y<òØáÓWžÑOûÉûý{ˆ&¢ àý WíMö&çYcËbËbË §+§+§ ¢Û£Û£Ûç‹oŽoŽo•¿Ê_['·Nni•Vi…ûŸÝ/¸_à¼Mû¯ŒžÑÏø(è-èÕ1ß0¾ø)û,oõ[Ðy:WçBLÅTLÁŠêÕ+ªáføføfØ1”êNu§ºÁ~b?±Ÿ8ñð½ð½ð=¨oªoªor}‹ßªJU üf"ýŒ¢%EKÔL¾ž|ín{=¡'ÀÚA;èýAÐ×O]?uý”·­F«ÑÁ---Pù¢òEå ìììq«QëÕz`Öèý´¯ˆº£îxD¬]Ö.Ñ""R""#2""9²PJvéçú¹~.âéðtx:œøpîpîp®ƒÛWµ¯j_%R)”FDÖÖÖDt®ÖÕ"žˆç´ç´ˆ,0zýŒ¯H2 <ýU¤ïAßñŠˆP/¢_ê—2+_J…T8‚‹Â‹Â‹Â"¾ƒ¾ƒ¾ƒN¼®¹®¹®YD"‘ˆHÿòþåýËEj×Õ®«]çäqšã‘b=¥§d6mŒú¬¾ñó©®ä.OyêtÑôêéÕÓ«aæÜ̹™sÀ ÀTùTùT9"Dþ„?á‡÷eïËÞ—¹º£‡!†Ð(+a%ÜzíJ×ËΕìsÏÌ¥O¬'9éü¯9ö“?e÷Ú½êŒ:CŠª¨BóM¤»L£Aé1=ØXX@ …!¢DÑÙú,_†?«7gòÏÛÿÊy{»˜·÷±ùyƒýÊ74Ç à$ýIEND®B`‚routino-3.2/web/www/routino/icons/limit-38.0.png 644 233 144 3073 13061246474 14664 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜðIDATHÇÍ–ïOTgÇÏ Èðsø©d"HdÅ¢XÅ…” 6¸Ø‰?X]P$¤––­[߸‰ÑDÙÅ[È&ºnL0$ëÆfX2ÄÆ¢‚f)RˆÔ˜LŠÀA§Ø0Ì,83÷ùì‹™ë%þ>onÎsÎù~¿¹ç>ßûˆˆHJä)`Î6g›­áØüGc?ö£Ø~ó¯p|-¦ƒ¦ƒ?‡äËÉ—Ro¤ÞО±ž×ëWö‹ø+ùô}IcÃâ°8L‘¸ ¿øýØÕá¸å!ÄuÅuù‚ðùwŸÐÙÞÙÎ0ûxö1À|Å|±ž×ëõ~o%¾4½Å/«zVõ˜&Àc‰œÊœÊÜS႟s¡joÕ^€é¨é(e€Ð/@"‰ªðâE_¿®ˆõ|¤^ï×ñt|OçëÈ(Ï(G‰k 7<ÿ'|•õU–Îè.q‰Dzƒ^€P}¨žePÕCL˜Àˆõ¼^¯÷ëx:¾Î§ó‡õ£ô‹ˆ´þª]Õ.Ð~< ¾¬ ¬m00˜$Qª´qÍ¥¹ 8ŽƒŠQ1*cy˜eöM¤ÔŽà¡à!Á©@b Ô‰0>T{«½ÀœÎ¯r\D$ÿˆóÆy½Ñ\t=r=î°T‘*ÂO/x*M¥©4 ƒ:Vi¥•Öðõ÷@1Å¥”S ìÊŽŸÊþï#|:ÿOa=ÂK‘k}X5kÐÑ´Â畣ݣÝÐú·Ö–ÖÔÐÔÐÄЄÁ7Ü<Ü<Ü -}-}-}ð¬èYѳ"#¯ÔNj'Ø5êu•è˾Ë>ÔÄâ˜cÌað©ÿ+=VªöZŸh]""?þ º.v]„±Œ¹é¹iõYÚ_’7$o`¹:¯zmõZÈ’ÿ$ÿ 4e7e7eCÎpÎpÎ0Ô Õ Õ AVVV? ž<3xÆäŽuǺc¡°«°«° ¶öníÙÚïy7\Ùp…åùKê3pÜuÜu.¬Çlº•´:iõö‘ò«åWEBY µ µ¦¶?KóÆæb©­¨ÝS»GÄvËvËvKÄßãïñ÷ˆ$Œ$Œ$ŒˆØ ìöÛ mÐ6(²Ø°Ø°Ø o–s—s—s—ˆ¥ßÒoéyZñtïÓ½"IÉQÉQbqŽ}ûå·_šÚDª^T½Qýñ*^m/‰6ý=j&j†ùF;¯7É{#ë¿^ÿµxÖ.}2õÉ”d|œôãм²½²½²‰mA[Ð&’¾¾¾ ÒÞÝÞÝÞ-2?;?;?+’>>> "›d“l µ…ÚBm"‰5‰5‰5†`ë”Õbµˆüï•¿J<"–4KšdH_TJT Ú“£°\¾\7:êõ°ýha^až1’Ês•ç*Ïv|¡÷Bï…^#¿ùÞæ{›ïÁõÆë×Aù”OùÀ™éÌtf–m[¶mÙÓ%ÓL¹³ë;×wÂýèÇÖÇV€ÅìÅlÐÖ%Œ'Œ+‡Ù|ØðF~éîèîÙÿÅ¡›‡nÒ˜ò[k’5I^'5&Õ%Õ‰ä¬ÉY“³Fd¨t¨t¨TävÙí²Ûe"©#©#©#"e™e™e™"ûÜûÜûÜ"Åæbs±Ydç©§vž)ñ—øKü"ùÅùù"H?0w`N^—w,ìX QÄ9åœ1×øsý¹#?ˆ~ <žq<Ã8%Á’¥ù¥ypÿÛý½û{TȲ‡ìÆZXX÷K÷K÷KP7Ô uT§êTà9ë9ë9 j·Ú­vƒ:¨ö«ýàyî™ñÌ ´W@(ÌGèøé㧥ȩ¤ï-[öuöÙ•¿ú«ºª®‚V¯Õkõ ÆÔ˜3„ªx¯â<òXñ p’œÍ«¬ÊªWâWŸFðO»&]“qž87š ÝÇô¯fYwÞšèšh 9ìÌênp.8ü#4š1œŸ9ÂPÔ}u¸Ãî>YõŸˆp_¤þ®«ÅP?}AàÔ?Â÷úmçwÿ•ïìíâ½½›7Øÿúé¼w¾o;IEND®B`‚routino-3.2/web/www/routino/icons/limit-187.png 644 233 144 2657 13061246470 14616 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜdIDATHÇÍ–_L“WÆŸ¶ -¡APcd1® f!F&Z‚Ñ@lT‘ñO–ÑÄd‹¢^è¼QH¸¨(Ʋ5Õz%Z#™[P.p(Î2J"›•Úñõûγ‹öô«ËvÏwÓ¾ï9ïó{úÓ÷€…ÑOÆeÆeÆÔHl< çÍ[Í[?¹‰[TÒ°Ó°sàkrAÓ‚&’LkMkÕõXŽËùñõ€®Ï“y,„žHr&9 öh|š¬^S½ÆlÄßúH‹Ëâš “ÝÝ$ùÕ®ðKr¼w¼—$'í“vR帜/ë¥^¼>Nÿ‹‰wï~'“æ%ÍÈå[–oÉ©Lø-‡tT8*HrÌ4fF’$Õ ’ó9_ØI |þŒ‹åxt¾¬—zR_ò$?âdÆæŒÍ¹cÏŽ=–ï"ƒí䉥'–Jžâ"yŽç8Ÿ Â’TkÔþM Ÿð‘$ 4z,Çå|Y/õ¤¾äI~Ä>^Û‹ed•¹ÊLrš$•‡¤¶@[@j›”«ÊU*¢Atˆ iYÔžjOÉð@x <@Š-¢L”‘â•Ãd8¬æ«ùê¾Ùc³Ç¨¨&¥L)#Å ©_©T*$Ç%ñ†>½DÍòÊò*@iCZliÊU¿R¬3(®‹~ÑËSLŠI1I²‘lÔó¼È‹¼H2ƒ̈Ëà~ I‘#r”úäÐá‡$i Xé'j¬åy¸ápCì=|&¼ŠGñè>|g} ¾ҿؿؿXç=Ùûdä…Ê •*É/_¼|ñ’››› /½töÒY²uokek%Ù>ØhPøÝCíCíq<ס¼Cyri[#ï­ð6~Ù´qÓFÍ`È7l2›Š1Û™Ù™Ò™ƒ½È^b/ž©ÏÔg*Ð7Ú7Ú7 ”®,]Yºè/ê/ê/+++€[Ú-í–xŽxŽxŽ×Н•^+jª½Z{ÿ!¿ÕoÅl„oÈç%þtQxdjOjpòÇ×S¯§â–*I}¬>&šSuªdfyfyf9é9ê9ê9J>â#>"™½:{uöjòºçºçº‡,8Sp¦à ÙÝÜÝÜݬë5¥5¥5¥‘uu§êNÅqD¿ôc¤ôcL“ƒy(73oF:Æ_¢„û¹ØmÜmÚmòªóªóª÷#ïGÞS‹¦M-¬°Â  -¿-¿-x›õ6ëme˲eÙ€™æ™æ™f å^˽–{ÀñÏ—/þüáaMâpâ0 ýíŽvÇð+Dx{x{lz1ŠQ½^{®=מf‡Ùav7—Ü\rs °aÕ†UV÷³ïgßÏÚÚÚÿ6ÿ6ÿ6Àev™]f Ý–nK·6»Ín³b«–ª¥†+Qž)¼+¼ ~Œ@À°÷ÿ £·ÇÛ#m°¹"Q$Ê=¤§§³]³]³]Àyßyßyàµz­^+~9ýrúe ¨¾¨¾¨¨P*” p÷º{ݽ@U°*XÔ(¿Òª´*Ì"-Ê3y½^/óóÿJÞ w„;ô­0½qºpº u…ºB]ú 9CΓ|£¾Qߨ¤Ô‚ZP×ñ®ã]*­ ­ÕõØv‡Ý$µ(/ÆøÑû-ã–ñ@9¤©z#µZ­–Á¸c'¢¼^¬ëIá.áŠË'‹d‘L2—¹Ì+8Á6¶‘1=½Ey’ÿQûίÈάúU?I«zR=I… ì`\çç>Ö°&r ÉïÙÉÎ8CÉ\ÇuüFQG¨ÄôbúQ^Œëüsö¬œ³·‹9{››7Ø6…Ü&%IEND®B`‚routino-3.2/web/www/routino/icons/marker-21-red.png 644 233 144 4163 13061246465 15432 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü(IDATXí—LTWÇÏû1‚Š; é”7Ö]º ÁU4®À8±h¢àÅâ–hulILéF)”­X©-ÒêJJèÈ mèJêŠÁ ­e­d·å+ U¶5@Ø‘á½7÷»0÷Í›Ù]Íf÷ü3sî¹çœÏÜû½÷fˆfì§eâš8wœ;Î-ü#<0«}Vû¬öülY“5Yûê´Œ–Ñ2`&ÌjI&™dîÑ>«åóy>¯ÇëG÷×DóùÊ©œÊÅÖèxòsr»Ü.··Ž û„}Â>Äœ4ž4ž4Ž‹›înº»é.°ùÁæ›E9E9E9ŸÇù|žÏëñú¼ß“yHüM´¿èqBœ'—ñJ-M-M-ÕœºqêÆ©lŽÄ?â A‚„&1‰IƒÄ  ûá8ŸÏóy=^?ºß¢wžÌG–yâ8$ þ™ÈéÎéÎéVW(Ê€‚„e° –U«Ô*µJ@ËÒ²´,@+Ô µBƒŽóù<Ÿ×ãõuà¨þ–y:šÐ*´ ­Drµ\-W·xx‚½Ö^c¯Q u°—ÙëìuøÕ–éW¦_Ø ò­ò-€iíSíS@*„xF1 `:œ?ZZ ¨-Á¯ƒ_ìev™]†ŸO¶×Úkíµj!ïÏy8™î›î›î?ÿk>ÁRe9b9Â{‡½ß{¿ÇX¸Ž_{S9¦¨Pø¡@ÁX5«lÄFÀ#<¶‚­àg¯²W#³µ7µ×´×t×ïö{‡1f©²TYªØbΣóÉ{ä=òžÞjh(iØÞ°í ¨­ÊIå¤'øÍ‰oNÀ™´3ipñã‹€²RY^ÄŠŒ¾w³w3€`·µÛU[•Ê Ý 4”4”4”°úÊFñó%¥'¥'¥£v444Ї>¨àEý®®À̹€$K’ÅèoX¹aô$N€’¨$À˜gÌyÉyÉP`)°ú¦[Õ‡êÃ7ïÏy8ýÃÆ£n<ùeÚ@¨7Ô ÀLJžxv^8ðÂãJ}Ùòe‹øÚ™kgàfÙÍ2˜Ó3§Ç/ÚV´ÍîÓ.i—m@»£Ý‰ôç<œO ©çL“ÃäÐÏX• W„+Dô3eL#"*¨(¨ "Úu×}ãMxý 2"¢Õo¯~›ˆ¨¢‚ˆhMÝš:"¢±»cwé¢5S35Gú›ÚLm¦6ýÈóû•g×g×g×£J˜¦çqçÁð;æaÃVAùAùêlu6˜×8¯Ê—”/1®tÔaPà(p€-Í– þJ;®X&³2+Ÿ“˜“˜“ˆ~ÎGb¡X(*?†j›Ê›ö6í5H ž½ç¹çÌZŸµ¬ÅÖbhFóÌá13³Lµ©6£Ÿ!ÿÕf³ƵsÓ»§wGú]­»ZwµNw ™B¦©üHÒri¹´üP ?eÖŸ[:-Ú"ïoŽD4ëg¶ìÉìIX³:þpøC#ȤyÒ Ê-å„¶†¶ãëØ: `÷Ù}Öë¨ãÚ8‚F£@ú¡ôCé‡Bú %KÉRò{c”àHp$8ˆäëòuùºkH¿ð‹Ö5­kÒöß „œs›æ6!·ðð€À¬›³n€x[¼m<,g?9û þÕüö;€±é¶tûÀýimL•R%Õì­¸7uoʨ]Å¡8@›¯ÍÀØGì#ð 7¾ÀÛ¢=£=ù9Ûþ²í»mßiûõhRž”'ÝGRö¦ìMÙK$ÚE»hÎ…éJ8æÜðç©_ê—ú…ŽÅ\|ÈTj*5•ºèÚ͵çÚsµý¼aÈr†œ 7ܘyáNu𖦥EÖ·~EýŠú̦¿åf“Ùdššñ-ñÑ;-tÆl= 1nO´o‰7eš2M™Þsí:+•L¿hT³jVÍ ÐÃÐÃPäi ô¡}€{vßì¾Ù}l“®É1ALØúû)¾ÃGOê ÚÝ.l_»Ip .ÁÅï¹Ðnw—»ËÝѮڥv©]å>Nyœò8X:¾t|é¸öK]‹mR›Ôv|—ZXz±€?¡§Xd/Ñ®Oò´[g©³Ô©f¯ËëòºDãœÔÙáìpvD®¹Qn”ûÂIfߊé§9OŒ5ž°5¬Ý?ý'íæmÈÛ·!¢]÷*÷*÷*4ÏÄ™¾B±P,¯=ÝF|ÓW ÿÒž¦Ý5RT#Õ fqàâªâªâ*v,c:c:cZý«¾Õ>É'ùœ©ÔB-ÔBákGòÆô‹£ÿÑbµ{$ÚÏ»'ìv;* *ýJ\ . $ЕkÀ°ˆ¤^©Wê.‡·ÄìÜÿÍÌú79È!{¢Ã%"™È¡Sè:ÿ¾pfü©ûÔ­þ'"¡«ÏäLIEND®B`‚routino-3.2/web/www/routino/icons/limit-19.8.png 644 233 144 3035 13061246472 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÒIDATHÇÍ–ÝoTeÇ3S¦œ”€- b_PLÊB›LÝt… ¸-[i©ÁØÒjÅŠfeBd¹ð%$nƒb/¨ `HE«;ˆeè‚!Ͷ[zƒ,3Ù­2•B,Ò™¾R&v\ö!@îǹ'¾Oc3oÖgö‹¤ù3õ̸<$é@ö™ì3–ª~Üeî²ÅŽ$>Ò Z·Ö=kÀ+¾W|_~òå'¼ £WF¯LWMWA›y³Þì7ù2ùåßè‹À¢ ‹.XnC¶=Û.ÅO?õè_“?> Ï<ýÌÓwlwlÊ ñq` KT!‚¹&2°™OÕ›ý&ŸÉoê™úI?ù•ù•"ðlÓ³MZG²áûÏà‚7 L=½8Ä!–€1"ñçãÏÕ«z°`46óf½Ùoò™ü¦ž©Ÿô#¿þ¶TÙ¦oÓ õ'þ¨géY ö·Œ[˜•˜L„!0¦ŒIcÔµGí!½f˜`b©ÄϺ®ëèÆOz^‰x’¶l")ý…OY}´ÚH UUCüGêÔçÆ„1AtAaZ…T8ÀdÙÉNvØÀ†tXEUTE¿ñ.ï¨JUI”’ü8‚ýÁ~-¢E"Yô%ý¤ÞÔñ>ð¼éyÔ× §IÜû÷ÞöÞvÔðêádžK úÇýãþqh¯h¯h¯€á¡á¡á¡t>H4¾þÑõc×Áÿ‘kG®¡þWáÿÔÿéBµSýgWñ®b`6éG¸("ríu>ò¾ï}áw¾|&ß{Ñ{‘˜í¼­ËÖçêÎÕ«ƒÐáÐáÐaXY¾²|e9¸š\M®&p–8Kœ%®W„+Ò†.u\ê¸Ôùó7æo„µ;žÜñ$|³âÅ/»Z|súæ´zΗž/…øÝ¤«X—î[º¯ü ÙU9X9(‚]DÄÒ!c¶e¶e’½<¸|dùˆˆÖ¢µh-"žÏ€GÄQê(u”Šôwõwõw‰Øsí¹ö\‘w»Ç- K_¯¯×׋h§µÓÚi‘Úݵ¯Õ¾&²bàáñ‡Ç%{®râ­‰·,"UÎ*§ˆ¥*g4g´ü «ÔÚŽÙŽ±VdÑ¡E‡D”KDD&ÿlu»Ü.‘²•e”="¶„-a‹H]c]c]£ÈlËlËl‹È–U[VmY%âoô7úEìQ{ÔM›*š*š*qˆC"rêO§ªOU‹LÏL;¦"ËÿW’W"“"Ö—¬/‰ÈiÛ¼mžµVQ _Âg1êz±‹ˆH¾I¬~VwÔk§µÓÚ)2_8_8_(²æàšƒkŠl:»é즳"y y y "E{‹öíACCñÖxk¼5"®9לkNärÎåœË9"ö}ö{ƒÈÕo¿kþ®YòE²ndÝas<YS›ÿÚëàñÎ@üÕäKm‘ØÖÏ·žÜz:Otžè<‘Þ;Õ=Õ=Õ=Pà(p8 Õ×êkõÁ½í÷¶ßÛëÂëÂëÂÐè ô |°|°|rOæÍ= ;Ã/¼÷Â{Ä~ù©÷…û 7°$é'óT¾íyø§y*m‰6¸¿ñþs÷ŸCÍ=aþBÚX¬-ÖkƒÐÝÐÝÐ]`3›Ù Ê®ìÊ“õ“õ“õ€>ˆíŽíŽí†±ÐØc? T‰~[¿>•üäYëYkÜã})c«‚6ªF² Æôëˆ%Ü wzŽñœ8A5«fÕœ1¯JU©*Zi¥5#þ{õ¸zT·Pf%Qµ8Å¿&8Ц´©HW5Ç2&¿Ñhk´¥'?#hýñ[ñŒÉϤuEõ«~ @€pŸf@¨›ê&0—ª÷Ä¿Š…®þeŒc@·9ùSz¿üvò?¸ÿ•ìíâ½=˜7Øÿ'¼"k>ždIEND®B`‚routino-3.2/web/www/routino/icons/limit-15.6.png 644 233 144 3017 13061246472 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÄIDATHÇÍ–ïO”WÇÏ S`²T2Ô¥[‚¦”D[j_4†®‚JPŠ]ˆ3µ„V‚J 1Ù4ôÅš¦Mˆi×¾èbü-%t¢³XR5}A[Ä6ÑÔZJ§`Ç Â@Çò 2ð<Ïýì‹™‡™ºÿ€÷Í“sÏ9ßï¹ç>÷{¯€ˆˆ<žø Øóíùö¬¸m÷%ç3«2«Vþ'n1ÀVg«»ùÈîÈîXÞ¹¼Óü!i[~+>5_$‰ŸÊgÍËã’œÈ8“qÆV‘°ßƒW×¼º&37nÿ3γγ÷tx«ÿ­~€¾®¾.Z |%| Z­€¤mù­x+ßÂKÅ—÷âÇÎ?vÞ‚ŒôŒt(¨,¨,Ú-‚W^~åe€ñ´ñ4e#,c™ª44¬1b[þD¼•oáYøŸÅ¯GÀ]î.Ú×j_sžŠ'üð)´>Õú”Å·xh§e kº`4 Ä@T6Hږߊ·ò-< ßâ³øãõÈï÷öàf´í‹Û— 2_Z´-Ú@ýK¿§ßÃò(ãoF‹ÑF‰Qlƒá3|†8@;í<<”Ú¥¿£¿Ã¢~m1k1 L-ŽÛ'·OwüK[©‰ˆ<ó18tþ¨9à§Í?mc€jõ_}NŸãþÅ  SL1•JBóÌ3Ÿ2¿ŠU¬5£¢*  v¨Üç³8>-Á¡à€Ssjšƒ`¼žD§Ž BóÛÍoƒ0K-ÜÀº@U  ò†êBuI>ÿJÿJÿJ8ä=ä=ä…ãžãžã˜ËŸËŸËÿ¿Ž1ö×±š±8xþàç?G]ßñÍÐ7C–×,U¡Ý¥»K_ãõDD®íãXχ=.-×wÏ…ž Äw4;šÁ?âñ€Þ­wëÝànu·º[¡özíõÚëÐÐÕÐÕÐáËáËáËÉ‚fb3±™”],»Xv¶þ¼õû­ßÃK“ë>X÷±ÛõZ±V¬vA_a_!˜ÓñzbÏjËj{þEÙ]>\>,Bºˆˆí”ÄÒ²Ó²Er~Íy?ç}çZç ÎD®n¸ºáêͧù4Ÿˆ´J«´Šl+ÙV²­D$¯1¯1¯Q–Æ€wÀ;à©ú¹êVÕ-‘Òðs}ÏõI†û™žLí”HYNYŽˆ}½ëu×ëÏ¿(°ÜµÜeÃôÄôåKÇ€—6^Úx zêzêzê`drdrdvØy`çèôwú;ý°âðŠÃ+Ã9ýœ~NOv¬«º«º«J̳Ą·OÜ>qþtåÉþ'ûáËo×®gŠŠÀÌÌz"ë sØ.Êì7ûmÃ"z^'"é""â¶V¬~Q!±kvÍ®‰„ƒá`8(R+ŒÆDšèù­ç70ZâÿXbÁ±šÞšÎšNè=Ù{²÷$DÒ#é‘t(r¹Š\]™]™] mGÛŽ¶…ÈÈÈXÛ´¶imD;¢ÑhÜÒ¸¥q 833U¦‚¦†7Ì7Lbz¯Å×;Û; ¬‰×“z*÷7ïÎY§ÒüÈüfÿ2[?[šÿzþ‹ù/’[{{{{ıƒScj T·êVÝ0S?S?SjA-¨0÷˜{Ì=0]27‡2‹B ¡ä©äVóÓÍO[‚{d0QØ3ƒ3ì kAc‰¿ͬ5k“:¦ÚÕ»ê]PÇÔ1u,EÆ:T‡ê6±‰M):±/^PPª@=«žå¾ÊKàWoo8ï:ïjnüNÇR”_÷¤yÒ’ÊO®ÔƒÀ~#d„’ÊÏÞäMP_«¯ÔWÀ@BxïÅïJõK¼ƒ‰%)>3 Ã`Q êQ= üÛR~ÃãVþG÷®|d_ì{ìÑ|Áþ©ñÿð§È{IEND®B`‚routino-3.2/web/www/routino/icons/limit-30.1.png 644 233 144 2764 13061246473 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü©IDATHÇÍVßOW=³¸Àwµ >AЭBãÚØš^ˆ€‘5±Öøc&š ? FÓ`´1ick5&-/„ú@%j©®BÖÆÅêC«Æ¨ìju¥K5´+é,î²÷ôaf£ÿ÷eò}÷ûÎ93wî¹$`á̤-Ï–gs±­ÁÊgnÈÜðö÷FÜ¡‘ÒViëÃCä‚¶m$ùÖwo}§Z±9oÖ§ö~*Ÿ™ÇBX‰ †_*Ÿ‰¿"«Þ­z73Lj¿&½ŽÞW*ùIà“Iötõtq/ùüÖó[$9Y>YNZ±9oÖ›ý&^*>¾z í—í—¥0™‘ž‘ùùîO‚Çnró‡›?$ÉHZ$MØH’Ôþ&9ŸóE9Éc4Ç?)±9?Soö›x&¾Égòz@f—e—ä–·|ìè4FÏ’Ÿå~–kò)½$ñç“jL‘¤¶CÛÁ$)†Å0IR¢DZ±9oÖ›ý&ž‰oò™ü†k)ãвžÜÚ"õHR¹©>Uò•|R¿©„”•¥B| V‹Õ¤:¦†Õ0)ö‰}b­ç¿ü—¤lÔ“z­^KE/S¨GHñ…Oú2}™$Ÿ›üæR>€wZIGÌ‹ÍãáÐÍÐM’×H’IQ$ŠçO¼Â+¤Ø&¶‰m$ëYÏú!^zé%¹‰›¸‰o í‰öD{BŠ^í¾vŸñ™ôFÆB?‡~&gùiè_@Ç ºw5î2aô÷F+ô=è#[N·t¶tRÜùæÎñ;Ç-¢àPp(8D¶%Úm 2 ÇÂÖ¿Fa&Åuq]\·òÃ'†ÃЧ‹ÙÙ->ñ qKãsi;n@ÈÞý‡É?²_F^FDÝ¢¯,_°œI_Äò…Èü“ù'óO’ýûö$KJKJKJÉUëV­[µŽ,L& “ää¡ÉC“‡Þübþ%þ%þ%¤=`ï¶w“ÝÞ3/μ`ræ5ê´½gwžÝi »{À&ýàÌqæ¼_ ”(;h¹rµ\-uÁÑ‚£Ȩ|T©Œµµµ@Ï`Ï`Ï 9‘9‘9<z8ôppFœgˆ D"˜jƒÚ 6’,É’ ä´çœÎ9 ˆ i´F•Ô‰©Ò¢Ò"p]s]{¿Ø&µ§§ÓƒV}—¾ (¼·ìÖ²[ˆÖ¨é¨éº+º½Ý^ z!z!zpŒ:F£€Ãïð;ü–WÐtDc¢1ÑhåÅJ±R¬|I_Ò—<¯ý<¤mNÛLMß¡:U§4‚fçmçmàûmw^܉쵻׮_»è= .Ù%»d@n–›åf@.•KåRàYû³ögíÀXúXúX:°¢iEÓŠ& jÚ£v@,‹Åâ¡Ä}q@ƒœMgCU6*@ï×û¥›­*®Ä•{¿}—ú.í­^i*j*JÙ•¼ñšÙ ŸÏúØV±•qÑ`¨hí¢KÅR±4ÅêD¨#¹Ÿû¹?e;*TfmÙ¨t wŠqÆ7ßð1Óù“¦óúæùæ‘°¤»Ø¡]$!ÈSû0*‹4)º¨V –]ˆô¢me· $V3d k eD*+/Ê\ ó¶ qp!E¨–Êi›Ü™÷œß^Ìœyß] vï|o†çëÿÿŸçð˜|ðºøu1ض‰›|Soðœørò_ü"|#ù†ëwðÌõÌeeËÊV~K] Û·nß 0ž4ž¤Ý`½æ1O!B˜ï•Ã6ñx¾©7xßðþ˜¯ÏëŠêŠêÔ‹±‚á_ viíRÃéNsšy ECÖ>kÓ ût.\`Û&nòM½Á3ø†ÏðÇôÈ?ï¶±v§ìN4@ä>ë®u@Õ«z"*¬—ëåèèXt$:ê±z¤1ãS_ªujèSºCw AuªN"LYÝVwâÀ÷| ~q ú¬ R'S'Cs`ı€å jU-ïù:€^nsÛ¡ ‰&š€¬`(ò(h¿ök¿#/qÝj¿ÚÏû¸QžàKðÇôÄ…]ø×®O¯!ˆN–Äú0\:\:\ ­­­0 gv¬¯¡¯¡¯ƲƲƲl¿¾§Gõ(ÚqÅ1¾LO\Øà1h{Ûö6Q~Pû"Ï#Ï™6ž`]°.XYg²ÎdÊñÊñÊqÈnÎnÎn†‡5kÖ@÷Õî«ÝW!© © ©Ú6·mnÛl ³Š­B«Àºl]6øú ÍÓãIëMëý¼PÄWâ+‰ß¯¸.ÊIUIUâ1kÒš´&ENENENEDª‹ª‹ª‹D¯^¼zñj‘ð­ð­ð-÷B÷B÷Bï^ï^ï^]¢KtWDÒd‘,q¯r¯2ø®‹6\dÎÏœ¯žÂ«‰WޱÿC?ÓÏ€³œå¬}âwáwáwaØÕ³«gWäÈ9s***í¼ o6¼ÙðZŽ·o9îèX™Uf•è—ú¥sÍþ˜·ˆº¦®¹žŠDwDw$ÎåU-ªNÕ‰ÈQ9*GEü7ý7ý7EŠŽ):"ØØØ(â}â}â}"2 ìÆ(¿ò+¿ˆŒÈˆŒ8:fIT¢""2*£6ŸÍÓã ‡Š¹wçÞ“Ç!÷·R.åò—ñlËß–¿-_$£0£0£P$½"½"½B$ïJÞ•¼+"{²÷dïÉvܘ/Í—æIÞ’¼%y‹CXäIžˆˆê ÁçÍ×óÉ©4SÓÏ8ãöTF×F×F׋þý/úÁ:o·ÎϜʩõSë§ÖôgÚ3íqnð˜Çÿy*?²Ç‰=vNã=sXÃÐßéZ]ëÿ]¢K€\rÉuøÀ>0mÏöÿÞcÙüf3G­^«@SLjÐ@]hÝ£¯ëëÀÏ´Ð2³c, ƒ àGÚiGƒ:¡N!bðâøŸÞü³ö¿rÖ¾.fí{lv¾`ÿe¢× î¨U£IEND®B`‚routino-3.2/web/www/routino/icons/marker-69-grey.png 644 233 144 6333 13061246466 15644 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü IDATXÃ…—PS×¶Ç¿{'!$„Ô`°-‘ˆŸ?q@…Dõ)HõŽ¥mlÇ òì½µúê\úDÆÞjŸ-@[.ZñÚ*^D¡ƒØ jQ)È„Á` Ô€INö~èg:]ÿìÙ笽Ög¯½ÎÚëôôôôôt(0!–‰F‰»ÅÝân^™~*ýTú)îŸ9˜9˜9¸"”ûq?îwx›  “me¶2[?„B¢¤"!ÐŽv´HF2’ù!i¼4^ORÅÅÅ É0&Ã?‘1-cZÆ´«÷²tYº,‚„ !ˆ¬žà`7\\ ú 0‘ˆ¤gX&Ëd™ì†Ýj·Ú­Se–g–g–Ÿé±ØìU·ÇæÍ›¿ð#ïïï\Y·0naI —„KÂ%À"å"å"%àž»ß»õÝëÝöžÙwùsûwó¸ùÄ®.ãr.çröÙJ¶’­A9¢ Q(èÚIë7Öo¬ß¼ª|©ê¥ª—ªœ{âÚãÚãÚ©cŽaŽaެ•¦JS¥©ÃÇøC†1Œa À»x阎1[ -Јµ†ZC­¡–;ªCªCªCØžÇ+¯|¼2é Y,H´ÄÓ¹Õ¹Õ¹uy×s=×w¿E@@@—‘´§iOÓž¨E-j}Äeâ2qYí¿ìãöqûø«kÔ¯«_W¿.Dn|ãûߟQŒ*F£Pc2&c2®á®Fa0 “0 À<Á³0 ³ÒA:H aC[ä¹EŽ®óGÏ=Tx««¦«¦«F\çáåáåáõk…/Ä ñÑ›hD÷ýN½ê½ê½ê‰¿Ä_âÿëccc¯®QoToToÖêuz^'®S¨*… “Ù¶€-X Ka)CT¹D.‘Ké!=¤ ÉcòÀ%\Â%€­cëØ:ˆz§Þ©|G|G|G0Ùm_¨NT' kÝþÝ’Y™Y™Y¹z‘½Þ^o¯¯¨—ÿ.ÿ]þ;ÞÞ³½g{©W”(J% LÏôL9¤‘4À6lÃ6<—¥XŠ¥ÀÄGð|Ÿ6ÒFÚ,Æb,~®Î¶°-l @‹i1-ƨ%Å’bI+È ä<|ÔwÔwÔ—˜<Â=Â=ÂׄSÂCxÈD‡Ö¡uh˜†˜†˜Ĺ=Ø*¶Š­‚œž¤'éIÀêaõ°z¿Ø~±ýbŒÆFc#Àn²›ì& $ćøÀl0Ì 6Ð ô&ö&ö&>û}È>„\‘¯ÈWäÃ#æç˜Ÿc~Fœ›ÇÍ'ŠÊ‹Ê‹Ê+8+_'_'_Grã½ã½ã½ÉaI´$Z BtDGt æ\s®9øÚöµíkÐÚßÚßÚÜ1Þ1Þ1ƒÍƒÍƒÍÀÜsWÌ]4ßk¾×|(L*L*Lz{{[9·rnå‘CäšýšýšýÏM”w•w•wIB“““?Ù¢lQ¶(Õ6ìÙ;²w„:³äÌ’3K¸[¬N‘Sä=›ó¢ëE׋®s~*þTü©xÎy>Ïçùœ›®™®™®qþeø—á_†s>Ô2Ô2ÔÂù¡ÀC‡9/³”YÊ,ÏítÞï¼ßyŸóýƒû÷rnÖ›õf=Q¬n7Å'øŸzŽž£çžíLJ*P°í±í±ív=ìzØX-–Fà é é  (M(M(M–//^^ (·(·(·Ö.k—µ P^P^P^xž›¾oø¾áû Ž Ç€‡º‡º‡:¼(Rú6}›¾  ( !bQ€(@À¿]<ºxt1ùG½£ÞQ™•D%Q£¥(f 3…™Àxýxýx=°N»N»N >7|nø8»òìʳ+4sš9Í DÍŠš5 (í+í+íº®u]ëº TTT¶P[¨-@êP@ -´à.P‘µÑÚhmD']K×Òµü[êù™çgžŸ ÙÓ:§uNãß6ÕüUóWÏv6Î y!/„ÃÂaá0[[[ Ìoß:¿ØT²©dS @£i4ŒÔHXÕ½ª{U7°>n}Üú8€¤‘4’,9ºäè’£€"N§ˆĹâ\qîs¦S©0=0=0=Àÿzvzvzv ÙblÄFlÌ(ÇŠcűÿøŸ«®n¸ºÁ©VkÔµFÔå×á×á×QÿÿÿÈÛbÚbÚb€ð¤ð¤ð$ åHË‘–#ïã}¼˜˜ ¤¦¤¦¤ðQù¨|TÀ;!Üô¹ésÓL‘L‘L‚”AÊ %l,Ÿå³|È® _¾2Ì"‰‰˜ˆ‰Ö-ÑíI ÉËËkkkNß·î°î°îx;Pã­ñÖx;w'%%‰²{u½º^lE E E Á"X^À x°¬sYç²N`õ«?XýÐò¸åqËcàLÀ™€3ýˆ~D?d‰²DY"°A¶A¶Ar~èüÐù!6v§ûN÷n*“=’=’=jÙì(w”;Ê#òHZoZoZ/€»¸‹»ª\É dP2xÃëIÅ“Š'¯êcScScSy욥k–®YJ~ž7Á¹ÛµNN†È‚ ýèG?€qŒcüÿUÄD$"œÖÑ:Zé-Ó-Ó-½Ûx·ñn£(Û[é­ôVö=µ—ØKì%{?½—q/ã^ÀMÜÄMðuY)vƒŽ¹Æsl›Ä&Á·©¿©¿©°ï²ï²ïÚû©·Ÿ·Ÿ·_÷¹öòöòörQvå¦ÊM•›x,ÙIv’²Óì4; /xÁ à#|„D 0n6™MfÎVÍ­š[5¾ÞÞÞ[̳Å{?H½¾§®Tt,¾Ú}÷Æ]¿$R×Ôæª»Ù¨Bªœ»I$‰$‘± Ýѵ‹ŽGŠ#…ý5‰%±$F£æ™sdÎij6ÖÆÚ £³él:6!UHR!=¦9¦9¦qΈˆˆ=çzÎõœ›½dâ£ÙSÇŽ³ãì¸8×u²sŸXVVVVVFÝ…ëÍ­àÊÝÝ®ÜÍ%9$‡äüðoCchÌž2衇žæ•;Êå!ÅrÂrÂr2J)¥#îH\¿:~uœõï;Þw\dôÜç¹Ïsß½+¶¶¶û¾0®2®2®\€j×:™ÐÍ÷ ô`·‚Ìeà¦+w/†–†–†–f'xn÷Üî¹ýlÖpÀpÀp€Øò]úwéߥ;w»:z_ƒÒ 4(ñÏÚúÚúÚzò–¬MÖ&k˜š©™ú¯7ÄoŠß¿9¾48<8<8œþæò÷ŸîêE.þ@´Z­V«…àš¸÷àä¿^xmà59_v¾ì|ù¶ –KƒßÈ{´üÑòGË•¥–VK«¥•ÞTÜTÜTì\öÄñÄñÄ!Ú%‰’DI¢þ;Ÿà'ø‰’+B ©¨ ¿á7üƦ»OÀ(áE‚?‘?ÈÝLT¢•Î ^ÆËx™¶ƒ^ è…ƒŸ®ºþézöšä¸ä¸ä8méEz‘¾ºFsAsAsa…ÖÔaê0uïÙT6•Må']vË]€cÄAñ'òBîºÊ…3;±;Å õu ¯ä•¼òïïz½âõŠ×+´UÔ#êõ-dQIEND®B`‚routino-3.2/web/www/routino/icons/limit-15.8.png 644 233 144 3035 13061246472 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÒIDATHÇÍVýOSW~z[ÁeØÆ è̶B&1Ä,‡L"ñ>L泸 Æ,NFü™‰b4˜9:e#5¦A8f$LÑlŠU’êÆº´"™(¥÷ö<û¡½´sÿ€ç—›÷¼ïû<Ï=÷žç€øð¤”,%K B±´)2?íüµË¿ Å'5ÒPb(ùíKraëÂV’|ã›7¾ >ŒÄz^¯î"øÑ|ú<♈½{ÁŽ÷“ééó­¡øp?)wËÝS*¹Ù±ÙA’?tüÐÁm¤û÷/$9‘=‘MFb=¯×ëý:^4>ö¿Âó.Í»dp‘±1±1™’—’÷æ§¡‚'o’E…E…$ù§ñO£H’Ô¼$Í4‹l’ êãyT¬çÃõz¿Ž§ãë|:HHK–% ‹+‹+åÓ¡†‡gÈÆ¤Æ$/ÐM²‰M4“ª¢*$©Õh5ô“¢_ô“$ 4‘XÏëõz¿Ž§ãë|:Hþûm[r©”Js‚‚ )Ž©SêõŒÐ>Ó¶iÛHí-UK%µMÚ&mÉC<ȃ|uˆàX 0 > $’È Â'Kÿ(ýƒ¤æŸû” ¼}””Éù8÷q.©=!I®ß«“ê$§ç(n²}$=ôÐMMAAršÓQ՚ЄFòñIŠ,‘Åi¶„ðiu8HRVdE1ñfHOx¥NÞ$ëvÖí$EIWèÀýï÷¯í_Ká*w•¸J"„]Ë»–w-'—/?^Nž*;UvªŒœ4Oš'Íÿ[1· Ÿ>A¾wøÎá;¿gÞûöÞ·z6¸BÜÝ’²%…äTHØwØv®ù\óÜ{~rÁr®ç\ý¦ÏMu¦:²k¤k¤k„T;ÕNµ“´4Z-dñÝâ»ÅwÉšŽšŽšrÌ5æsE]n¿Ü~¹´¬¶¬¶¬&7lX³a ™tmÉÇK>¦(etbtB|B^L»˜Fj…ôHìZ°+c¶d=Èz0 §á1.4.Dl ržœ'çƒW¯ ^”B¥P)ЈF4ë‡Ö­—&.M\й!Â!€|^>/Ÿ ê vì–ÜJô&zëËz¾ûùnÃi {Eö ÀçŽsg¬’P`Šùºþkõ¯Õ°¦G¦Gó5¿æ7< )9JÎð p£ïF€·€ø³æ3ÍXÅ*VéùéùéùÀ™#gŽœ9ÄçÇçÇç999@QCQCQ`Oµ§ÚS½å{Ë÷–³³³@Â× ÇŽ«D¦3Ó‰Ùê«­ÕVnýŽ~À8ã³ùlÃѻrOÝ’?ê»2øUð+òåê—U/«(f®Ïü4óSä§öûü>¿ôJ^É+‘bTŒŠQRtŠNÑIޝ_9¾’d{ØCúëýõþzÒó·gÄ3B!R®€+²+ù¬ÎVgÓ ÷äͰ°·’²[v+&Ò©9µ9þuT‚ÅÁâˆ3‰&±Oì#E›hmQ~Õ*ZE+I;í´GÍgˆ÷Ä{¤è·Ä-’i"Ób~ÿ]çcçc’”_È/‡þãcQί–ËŒç§UuªN’{4—æŠ8?빑Iq]\×Hö…w*tVŠg¡¤/\_§õj½ ˆªGõìÖ?Ì7ûªó¿¾gåk{»xmïc¯ç ö_†l•{+FÇ–IEND®B`‚routino-3.2/web/www/routino/icons/marker-30-red.png 644 233 144 4213 13061246466 15427 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü@IDATXí—LTWÇÏû1(ŠK«üÝ]A±VÝ5UAâ‚ ¶Q ¢­¦« [Sjm%µjÒä!›ÐÕdW,lJ,ˆ6uSHLe¦: ¶SGfÞÜïþÁÜ7o&YÍf÷ü3sÞ=÷œÏ»ç{ï!š´™`âZ£bTŒŠðÄ÷ lJË”–)-~/«²*«·ÏÒ2ZFË€ÉaVA2É$sôYçóy>ž?°ž¸6GÏW@T 6ŽG.’[ä¹¥Ñ! 5ðˆ‘ˆ‘ˆümóÝÍw7ß¶>Øú`ë`Kâ–Ä-‰~Ÿóx>Ÿçãùy½çó¸&ПwZGÅQë2¾B±y±y±yê{µµµlªó‘ó‘ó $Œc c`…V@ó}ã<žÏçùxþÀzóN?ŸLÓE›hmÖ¿ó‰×¯'^÷üaÀ=àpc>cñ,žÅã«Åj1 .W—«Ë5]MWÓu¾oœÇóù<ϯÔ7M×ЄF¡Qh$’ËÇåãõßñ ))ÇRŽyÒ5°÷Ùëìu8=õ.Å¥Ìêîw÷˜ð®ñ®|ïxhÞgÞg³ºo¹ožz×O®Ÿö>Kcipò0^×ç<œ ÷ ÷ ÷ÿ¸‚˜JM%¦6ßò«å©å)†}yœj¥û±û±À‰Ÿñ³žˆe³lÀc<v„Ã1À4ij¥»ÇÝãÏfùÕâ±x0l*5}bú„Íç<Ÿ|@> è>Ϊs«s«sÙ;¾ãžFÃãö.{€«}¢}êö×퀮»>¾Énêýþºþ:8›q6€«k{×vÿ¨§Ñ=ážÐÜñêÜêìêlö޶²|Äìqqq¨plp¼âxà€ÌáïüAÄÀä¾€Y³gÍÖû~óá7zÀ+o_y¤() fFÎŒÔÅ;‹ÒŠÒ-¿Û±Áéˆ8çã Î<‘y"ó„ÿÍT¾mìcåcå@oÒ›P¹£r‡>÷çS?ŸªÆ\€T1U€$s’YöÌÙ3ºx»uÔ: hõ|õ9ç}[j‘!ÕjHÕö˜‘ö²a6LD³ŒÆ "¢æÅÍ‹‰ˆ2^Íx•ˆ¨¹µ¹•ˆ¨±®±Žˆ(sWæ."¢'UOªˆˆ:ª:ªˆˆ¶Ê[eýÉ’ùræË:7¤gFÏ "ú2àø1š M†&mË/òâ/¶N[§­“\¢Kt‰$IûÄv±@{¤()ŠˆF·•o+'"ò¶{Û‰ˆr¢s¢‰ˆzvöì$"šnšn""’¥A""õ zˆhFóŒf=ƒl•­D4ásœ¸5q‹H¼4 â{*Ù­v«ÝJœÄt1]Lwÿâ[âŠóçΟ;¯“@ˆ}—}4;š\#å#åú.Ý0Þ0ê[¯|­| 1ÇcŽÀ©×N½¦WáàÔATÔ‹J¥Ré¯÷“WG®Žh7àŸ„!AHpÿBÒJi¥´òpßes~››§Î³lll€¡CC‡àdɤÆYãÀxîžæžf=è·q߯@–š¥ÀŠÑ£zõ•ç—çȱ…Ø`(z(®q¨GÔ#@Üá%w–Üñj€)EJ‘g†),5,5,•H¾&_“¯5Ø´KòéäÓj!Ïï5 pAñ‹ûÄ}z4ô(ìÉÝ“«_éÛ½·{ ¬(¬€sÖÀ¬Ãâ\q.à=SZXZèݼ›o}õÖWÞq p¯´WÚûϬI?ÔNû…!Á°Ô°ÔzŽO0›g›g³d­s¿é°vXÁ€sùçò8»wvï6MÄ!NÇëzðكϠÖ]ëÔÜ®º~ð¯ï…Ñ 7/ÜD†v…–‰ebÙ³ B´-D/© ”niûk‡ð†ðÆú¡A¸*\åZñîWÚ.ô^è…¢i·Ð»À»@Ä6²€8€±Kì %KfŬX‹vÚl/Ù^愘zM½žÚJ–HI™S4´tJ§tÙägM¢$J’K¨‘©‘H²K÷¥ûï]â L5¦SŒ'ÜR4°q`£¿ Kölól´£]§Ýqß§âò,ËÝïOÜÞ³½`{Z¨Ý@c²Cv(G£ò£ò£ò‰Ä1EL.úèr9æ4ßg–tOº'Ý.Ï?4ÿÐüCD†íþõ?iwݦu›ÖmòkWY­¬VVãËÉq¦uBÈr„œõ‡ˈƒê ô_Ú‹´»V*“ʤ2ërœSšSšSÊ>ŸˆŸˆŸðÜÑZm—ì’ÝKõTOõä;v$KP=#ý¬Ý£þº…ÝÂna7@i”FiÞÅbŒ#Æ $P{Çœñ9ãsƉ¤n©[ê®ú&fuîÿfáÚ·TJ¥Tù»Àá¢\‘‰Ld€Ð*´ ­ÿš;ù|Ô™ ¼/lõ¿ 2›¯Zø.IEND®B`‚routino-3.2/web/www/routino/icons/limit-77.png 644 233 144 2225 13061246470 14523 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜJIDATHÇÍ–_h“WÆß¤Ó&þz¡ R%‰Q˜*¨Qzc× ½Z/ŠÖI½™7­”âhE¨+R¦DÅÚ¬FœLwQ)bKm©¥B[äɗóß.¾œ|Ñê`ÛMß›ä}Ÿ÷}ž'ßùÎɑ꧀ww·Òɽ_»u_Ì[ÿ³“w+ðÄ=ñ‘6¨ºPu æRÍ%;íæ7ý¥ó".©ž©Kµ¸…òòO´·Ã¡ð¡°/èä?&ÀÝý¯<4ÝhºpíòµË|ÓÉé$À\t. nnpÓoæ _)¿´ /+n­¸å‡ò•å+E`íîµ»×5; /ÖÁÞ={÷L–M–i/¨Y @@G L¼)É ^è7ó†Ïð=£ïøXYý‡÷ö÷:é>hYݲÚèY׳œ%ùL> Žª£dA'tpsƒ›~3oø ¿Ñ3úŽymÏ}}À[ë!Ø^Û zH­Wë±”W…T­ö©zU*ª"*v³Ýl7»y/ôë_T•ªÂ2|.A¯¨/¥†ê:À?íŸÎ|£jT—¦ì»w¸‘%Ë¿‰úßã«wõŒ¾ã§`¬û78~êø©âðºÝj±ZŠlzì˱ðX:w>î| =¯z^õ¼‚Ó§Ný©{S÷¦à¢÷¢÷¢z¬«Ç‚¾ç}ÏûžÃË__^}yÕåÓ?Yç­ó®ž«ïø){ú=ô/ô/çŽÙÑÜdnÒý­‰í‰í‰í°cçŽ;vB$ GÂHÒ4œ°_?OåE„0aõaõAö…øÈ{:ïéeQþø£vo oœñÁëM¯74Ô5Ôñ& _¾0iŸ´ƒ«}U¯ú^ ¾xç?üB@È¥KAƒ*¬ÍX›‘°ß_ð{¼øÂ‹/ÜYrg‰ }XÎri­ø€X>Ï èxA¶Ëv‚3Vûª^õ+<…¯ø¿_y”÷…¢2²û³ûÁÐ:}ƒÚZm-?kCÚÚ‚R©$Ë'åò 06,Z²MÎÉ9¤<=¦ïÑ\š |~|y9«,«L ¬L7r@!žrB¸'ÜãYJyg'ð;@¦É4îSÁ‡|8pà²È" d—ì’]Jf˜a†ÿY2A&p!Ø |Š¿Á]!„¨îÀúÆ«o¼ªšä›¿|óË7PùieMe ²×èÕzµÅ4îÝîÝîÝÐÛÛ»x`ÃÀ† pªëTû©vp½â:â:‚üÜ}®ç\üùÔDÍD‘ û÷îß F™_0…¢÷ 4–7–Ñw&îÈ¢Gß[ñØŠÇðæEåYò,›››Wç¯Î_7‰ãGâGâG ýBú…ô ‹…µÇ´Ç´Ç@jZjZjlÛz{ëmŸ!ÞÖ—¯%]K’EpÑuѾY¿!s‰z$JÖÃdÔdü–<: ¿wzÇéа¼ÁÒ`”U)«RVAGkGkG+”ç–ç–çBLsLsL3ä;òùSÖ¢µh- ÷è=z™?óÝ™oÏ| ûÞ-Ú^´=à€÷ÿU÷WÐe­°VÈzÁXÄ|ļqƒ“c‡Æ™×~zÖsÛs2«2«2«ÀvÌvÌv ØØØ áhÂÑ„£P°¦`MÁH<‘x"ñ f f f-žÜ¨sÔ9ê[Ÿ­ÏÖ7¼qþÆy“OfŽ>3ú 0¿2le˜qCèÏ[B-¡²¼[¼[à‹]õõ°qoòãÉ›Àiñiñiñà˜uÌ:f¡ÐYè,tBRiRiR)„̄̄Ì@Ó­¦[M·`hßо¡}fUKUKU Øß²—ØK̼¡¦<<; èÖËÖ˲^ȳê?v~üü8ü}@ÙO>—ò\ ^k¦5Ú…}…}…}077g×^¯½^{²+²+²+Ìüz¹^®—@-µÔBNONON8?sV;«”yõïü|Ì}5òÕˆ²Þƒ >VÝAwqdq¤y+}ÏÎMÎM½ïï}}ïk¤Þ­wëÝ ÝÒ-Ý`4ÍF3Ì®›]7»¦²§²§²AZ¤EZ`¼x¼x¼(¡„˜JÚ4µ æVÏmžÛŒc±øÁχQ|¤øˆVÝ!èø…ø}E–>ð±\™Ë}™.wÊ@qLŒqÆ$ hhüÛV¼x¢2Ý­»ÿåcz¿>>ècÊù½Êys–æ,ÞÐ:e«oÂ7œÕïêw;?åç8M4Ñ€ŽrÐ?Yô…úHý°~£º]·?¸»ør–ä,Q“ tþ‡÷[ùо.Ú÷ØÃù‚ý5lv°®¾µIEND®B`‚routino-3.2/web/www/routino/icons/marker-98-grey.png 644 233 144 6264 13061246467 15652 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü iIDATXÃ…—{PS×öÇ¿{ç„ O1¢E.¯R´>ð×Q®Žùû¶J^«÷Ž£–J ÂØ[µ¶P¼2Edæ÷k‘"‚Z¡B}u¼#F’‚€b á™p²÷ýƒDï8ÓéúçÌÎYgíOÖúžµ×!ÙÙÙÙÙÙðÁ¤Y&/t©pW¸+Üå ÙßgŸý=ÈíËíËíûk÷å¾Ü÷ÐÿŠ3Ä⌅Újl5¶~'p'H&"èD'€ñ!>äe™F¦!™Â#á‘ðH{‚ 2°·$gzÎôœéMíyiyiyiÄ,‹Áb0Y3ÉÁ®9¹|èsÀ8Ä!Ž–³\–ËrÙ5ûˆ}Ä>¢\”[›[›[[Þk7ÛÍvsã¿GçοðcBBB\X˜¸0qa"ÉŒq‹q‹qù-ò[ä¸Ö®û.×ó®xÏã;÷síïâqñ Î .á^Ü‹{±wȲ…l .”K‚%Á—JGNŽœ9ä7µqjãÔFÇîÄÎÄÎÄN:­ÖGëI²,S–)ËÄ(>ŧø Œb£ÞÇûxÀLÌÄLŒÚm¶@$ë›õÍúf>ñsÄÏ?G°Ýý«úWõ¯zûkE°"X/wlqlqlYYÈÓy:O¿û]Böïß7 Íhôj„¡¦ù”}Ì>f J Y²J¥þŽŸ?9~ØZ¶–­…€MØ„Mi#m¤ ½¤—ô¤Ÿô“~—p —¶ž­gë!8ŽÀ[ë­õÖÂß?$%$%$ELvíïâqñ‘܆܆܆5‹ì-ö{K}‹—ÕËêeå¡[M[M[M¤Å§Ì§Ì§ ”…±0/ÚJ[iëeÎe“%~ůøà”SNÒNÚI;€xÄ#þ…;kcm¬  óè<:VË^Ë^Ë^°ãâqñ¸Èc¬~V?«1Jc¤1Ò˜¤Ê#xØÿ?   €ªUÕªjE¢PÊV³Õl5¼¨¨xRñ¤âI ¥Zª¥Àýõ÷×ß_ ­h‚¤Ä›xoàéæ§›Ÿn´×µ×µ×Î×:_ë| ```ø·ü[þ-¼|ùò9©J¯Ò«ôHtñ¸ø1T Cÿ¼Õ·Ê·Ê· çªæªæªH±SK"½H/Ò‹€N­SëÔÀ¶l?Ø€)S:¦tÚaͰX–´,iY¤MÒ&iIgÒ™€Ê7+߬|ÈäÀ¸v\;®‚ Á†`ð^ò{Éï%€t®~®~®ž_zzé饧88¢Q¨þ¼ƒƒƒì`y|y|yÇç$‚VÒJZù\B2ìÁ옂)˜°ß°ß°ß|ïùÞó½``à½Á{ƒ÷@¬«Ä*ÀTd*2ñ§ãOÇŸÊUåªrPv±ìbÙE`pÍàšÁ5@„g„g„'ôIÐ'AŸàe“Ñwé»ô]ÇqÇI„ ™!™!™ÁO[[[“¹“m’X$‰\`Hlblbl"pöÂÙ g/=i=i=i€¹Æ\c®l-¶[ ÀJY)+žU>«|V 0_æË|ÛÛÛÀ6f³ÖXk¬5°•ØJl%€ûÇî» î•Œ´Ž´Ž´¢›&ÓdšÌOSùaùaùa1¿{z÷ôîéüt[y[y[9@N‘SäÆà?ø‰çÏ'žÖiÖiÖi²ì#û€8eœ2N øwùwùw¶G¶G¶GÀõõ5 6«Íj3NÒI:vóÝ|7:…N¡ê×®?ü<“cÆÕÆÕÆÕ€Ñd4MøRÞ-ï–w‹ù©HEjÎ ![ȲIf“Ø$6‰Žÿÿ(ð Ïð ֊ŠŠBÀúõëÀ¦ˆM›"ª¦jª„¡D("WF®Œ\ ȇäCò!À\m®6W¿¨iÿÑþ£ýG¡UC«†VÊåÊåÊå°9o+êfÖͬ›É∑‰ßqG©”\¸pù‹,©Jª’ªN>èW÷«ûÕ’žjGµ£ÚáØå ൰maÛÂ6Øš“š“š“€¬Ï²>Ëú ¸R|¥øJ1°6emÊÚ@Ê¥\Êuº@]è4:Nä¤å¤å¤À´¢iEÓŠÀ—|´ä£%Aöãìgÿ8›>¼ñðÆÃô¦´@Z -ÐmœèèèÝ=AöÝßwß}·p ·^9êÖçÖçÖwÍ}¸f¸f¸&(}ÅW+¾Zñ_‘••E.÷mêÛÔ· Üh 4‚êu:@Y§¬SÖü7þÿ ³È,2 R)‡”@Ï—=_ö| (2Š ìqØã°Çm»Ùv³í&6”y–y–y¢N1M1M1m|—p —,Ü€HD"²ão”ž 'è I =BÐ#¦030ûâºâºâ:pí䵓×Nò×tAg@Åô²éeÓË0¶`Ö‚Y f½Ä¬Á€¼B^!¯˜Š©˜ xÖ{Ö{Ö¯½^ôzÑs@«u¿u¿u?Ž]8vá˜"’FI£òˆ<"²‰%±$¶ãoÈG>ò…@ç˜çˆ™œ…ý¤’ÂËÛiM  »kŽt¤ÓÕeÕeÕe‰Û,á–pK8dÙAvÀʺXëЀ4àààúÑ~€Góh °`Ì‚ŸkÑ«þ›úoê¿qìŽÊÜdn2·Š¼ðÒðÒðÒ¯/!9È!§`€q¥kõ@/zÑ+¶c'vb'©‰:u.ê\þ:ùfùfù押ùóæ –ê]Õ»ªw½Ð.i"M¤ 6衇€vØÿ«#zÀà´‚VÐ ÈnooùŠ[‘·"oEJò=ärùƒq{¥½Ò^™ñE{F{F{ÀÜÈðvFùÎ:ê¼V²)l ›ïÛo?¼ý°ï´ï´ïÌøÂÃ×Ã×Ã÷negmgmg­$¿a}Ãú†õ|ÙN¶“í±2VÆÊÀáw¸|òA€ˆD$"ÆžŸŸQÑ8¯q^ã}$ú4ì»Ãî@A#i$„MÌ3ÅLȊŠŠÂáæXs¬9VÒ%Ÿ'Ÿ'Ÿ—?ùÒì¾ÉŠY1+Ž:+ûWÅòòòòòò`ueΞkÈ©Ý]Níuj÷Gª¢*ªz¡ÝÚ‰Ú‰Ú q›¥ÄRb)‚RJ)Å +McMcMclôAñƒâÅ’.y–ÏsΙûåÜW@DDVD~¢Ó£Ó£“Ã8úc?þø7,ß„qs¢Ê¢Êný–ŸY~ åË”/µÛÖëzÿÒyƒ©ž¾/+ÄØˆëˆëˆ*Œàxwó»›ãW‡ñé+ЕÐ5„šžš€Îóçù~¹úËUO¡§ ¬×õ~}^ç[Ê/ Oé‹@ìåØËQ÷!ÎgõEë‹2> 7ÜË€]oîz`ü¹ñçT4„¦€e,S…€úr/Áz=Ò¯Ïë|:¿®§ë‡ý˜ Ì"ðö¾·÷%œ Üþ >^÷ñ:]/Мä$Ë è úB•¡Jü ®¨+DÖëz¿>¯óéüºž®öcÜÊÇoaÏО!ÐÜþàHàÅÀ‹ ]ŒÆDœ*m^›Õf!8œ NªSuªc=âž ¥ëƒõ‚ä@2h¾0?ì™Ø3Ìêúú­yåïàKðùb81Ô?Ô8Ø ê5õ ü›øTŠJQ)@;í´/1RM5Õ@>ùä/ÙO'tPÓÊ£<ªBU°@w„ÿÈž®?ö#Lˆˆ4÷‘|°ú`µÎ¦Ùo ~;ø-8þê8í8ºá»1{cÖÐs­r­r­‚&k“µÉ #wGîŽÜ5êÚaí°vØÀû‡ß~ —ß9¾Cý§âzÿõ~COÝ?h?hfÂ~Dëøtè:Ãæ™ñ™qu`埗g.ÏÄ_¾®|eùJÈ”LÉhinini†¬†¬†¬ÈÎλÕnµ[a*m*m*Í04ýxúñôcÈsæ9óœP2Zòcɰm"÷³ÜÏð½ç³ú¬êt¾Ôùhî°Ÿè¨ I«“Vgo)ø¢à ‘Ð:o…·"êÜŸäÓ Ÿn¸½Ù{f‹3.Š8cœ1ΑÔÒÔÒÔR‘k–k–kSŠ)Å”"Òíêvu»äÉêéé¹wäÞ‘{GDÌvs®9Wä7I¯g¿ž-qæ´øòøò¨s"yuyu"ÑùI“I“Ù[÷ŠÅ‹ÚOüÍý‰ûãµÿßcßϾŸ¡ÌVf+³¥ÉÒdi‚no··Û 9‰9‰9‰Pt§èNÑ09L“ZkZkZkŒ+ÖÚØÚØÚ6ͦÙ48;vvì쬽úBÏ =ð¯ÿöå÷åã†ÅŒÅ Ðâ“S“SµŸ$´#Ñ”hRà/ðÀ×e••ý;ûËö— \[®-×G;ví„Ú¶Ú¶Ú6hÜØ¸±q#¤¦¦‚³ÅÙâl@f 3 ±±±°Å¶Å¶ÅfðÙOeíÎÚ ç··•¶•ø?÷¡Wžôü#Õ!êœþŒµ»ÛÝའþ3[þ6üIï$'CÕ`Õ`Õ L¦O¦O¦ÃÎí;·ïÜkKÖ–¬-c=ÇzŽõÀÜ͹›s7!Û’mɶ€gÀ3à€ªâªâªbHˆWñ ~_ù¾ö¾†?x!¬¼¼Àæ°ŸHŽ5÷qýùÙxK‚[õüêÉk“½“½¨Pq¨8Tlücÿ%ÿ%ÿ%˜x8ñpâ!°ƒìeR&e‚éúéúézPój^̓V«Õjµà¶¹×¸× 4ëâýÅû†#‡6Ú nsŸÐ÷TŽÅ†sEÕ?ɱ]j ê°:®ŽƒÚ¯ö«ý N©Sê”aTmR›Ô& –äØ{ìc¨Dµ^­P¯ªWYPk"ü…C·†n$Ì&Ìúbpé9¦'¿_OÞò˜òàd8™Õ÷Á™à ðÐxhÜH~Npœã ®ª~Õ¸pá¼Ì1êVÃÀB¤¿; …¨¾ 'è¾Ö“?¢·øtò?»ßÊgötñ̞ǞÍìÿáŽwd œIEND®B`‚routino-3.2/web/www/routino/icons/waypoint-home.png 644 233 144 271 12002775154 15731 0‰PNG  IHDR ü|”lsRGB®ÎébKGDª#2eIDATÓu޹ €@ gM’ºÿ®O"¢†%àóÄl`ÉZ "¨TÑŒ)D^/T|§²d‰Sná#É)]û½’‘Ý}"[? OGÎƶ÷IU£VÐÁƬƒ€ ´ždV9åýzËÿIEND®B`‚routino-3.2/web/www/routino/icons/marker-78-grey.png 644 233 144 6244 13061246466 15645 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü YIDATXÃ…—kPT×–Çÿûôé@ò2D ÃK‚B¸b0Ú‘ë#Äß $Uâp•Ü  ‘”„èG@åe2Q¢¹"*H„¯a¼BŠ–R  4HÓÒ Ý}ÎÙónœ²*•õe×~­ýÛëüÏÞk“ìììììl(0oºù‚YÍ>`°hCöùìóÙç©gîXîXîØŸC¨3u¦ÎùÿÆyq^œWÄ^S­©ÖTK¡¨ YB‚ô =öb/öÒcÒxi¼4žd±ÙÇì㎠2E¦ÈÔò¦{y‰y‰y‰d”óãü8?²ižCøÙÊ¥`£hæ‚+ä ¹ÂÏfƒÙ`6¸¯È­Ë­Ë­»0h5šGÿe|ÅøŠñ•ˆÿ°?eÊþnDÄFÄFÄ’¬Hq¤8R ¬pYá²Â°Õmý¶ñ¶ù6 þ­ëÙÖ·ñØøXkc¨#u¤ŽÂ{dÙCöøù‰üD~Íg ß¾7|ïëâÚèÚèÚȧÇöÄöÄö0–ЮЮÐ.'Í’fI³`ħøŸB#Œ0øâCK°K`4y›¼MÞˆëjíjíj¥–›A7ƒn é“ë'×O®ß}Rî'÷“û­’ñ{ø=üžu§hM¢IÞ# `bÈ¡¹Cs‡æ´¢­Þl-[ËÖ¶þÝÒGúÀa˜«sÔ9ê1Pýuõ×Õ_sï ´ ´ ´°w$v;‰ÝÿÖsñ\<ÿÚN¼†×ðÚÐSƮݮݮ{Š=Åž»m¬7Öë}ßPnVnVnæâ’““Ù;Nûö;íÇb®kãÚápH8#Á@ÇèH‰ ™$“d@=êQÛ„mÂ6°¼'ïÉ{NNNXló¯|GùŽò.ζ¾ÇÆGrrr6­0·›ÛÍíõíŽGƒ£ú'ßK¾—|´+®)®)®¡zª§z8GâH `À€`bˆ!ècú˜>È $ƒÀ¼æ°`‚ZP j€ c˜0èutt ”qe\G#õ.z½ ÑH"%‘’È7"YDƒhÐá-{‹½ÅPmQmQmA¬B«Ð*´Xx oá!ï«é«é«ø>…OP‚”¤Ÿô“~€Þ¦·émàʼn'^œŠNE' -Ó–iË€Gü#þØ'Û'Û'/]|éâKRBJH ùŠ|E>Œªªªˆ­þ¬ú³êϱ·Ø[ì}x ËùsþœÿŸ’/;_v¾Œc¡C¡C¡C¤ÔºqŽ?Âá5Å5Å5Å€ášášáÀƳñl<@fÉ,™´F­QkRï¦ÞM½ L*&“ à›ªoª¾©äSò)ù0×1×1×øõùõùõÄ}÷AÀ‚ H–w-ïZÞEJ›'š'š'pÌ 2¨ ª?%#s:s:sZ8vaÕ…UVQ›„Ï…Ï…Ï)¥E´ˆQjŽ7Ç›ã)cæ˜9fa­º^u½ê:¥>>>ÏÚKrJrJr(->_|¾øü³ö±Ûc·ÇnSšQ–Q–QFé=·{n÷Üèóf°ñØøXÅQ%AÌ%æsiABRœÁœ0Œa ,a KRCjH  ySó¦æM ÿLÿ™þ3ÀÞå{—ï]þLƒQEQEQE@ _Ã×ð@åêÊÕ•«éMÓ›¦7AAA€ï'¾Ÿø~‚çMʼϼϼ  e(#AŒÈKä%ò¢Uú(}”> ý\—Áe@DšHiE2RRº ?þTøS!^^^¸^w½îzýYÿ“GO=y®‚«à ˜|L>&À4kš5Í!!!€©ÜTn*_˜F­¥Èð›á7Ãoèg”Œ’QÒ*Fv\v\vœ+è÷è÷è÷ Uêru¹ºÀ2,Ã2Ìò3ü ?  ]èzÛÈdñdñd1ðtýÓõO×îkÜ׸¯ÉÚ-ÿqÉK~\"D Ñ JOxŸ•0ž·àwð;øÏêñã/Æ_Ô êu“˜“˜“ööön§ÝN»Ù³?f?¤5Kk–Ö,Œ#m#m#mÌI¡¤PRxw§eÐ2hL·C=<ôÀ/ø¿¼P,‰Ç~¶›I›I›IóMŠÍˆÍˆÍ ¯o<ºñèÆ£äVÇ«¯v¼ ªŒQÆ(c@_*¾T|  Hàw¸8‰“8 <õ|êùÔÈÈÈä™òLy&000£úŽúŽú¶W:T:T:àG¹›ÜMî6·žŠ¨ˆŠ"¶#Á¾ÿ–©`*˜ Q;шÆáH!Zˆ¢÷œ–K乤-hA èË/ìza× »Èmmmˆ§;èºò…~‡ïðDp‚œ‡f‡f‡f <%<%<À8Æ1½þ°þ°þ0oôßè¿ÑÏ)%ç$ç$çX5QõAa^’÷ÿB h-`½­i9Ÿ7²‡É)rŠœº•ÂÄ01LLz->ÆÇø˜ùªN]§®Ssû¦vOížÚ 9¹D.‘KÐà ^ðú€mÊwÊwÊ—-–Š¥b©ø‡¼À³gÏžlFrCþŽ>ô¡['Z»víÚµka?ïXpžO*È/ûò·/û?oë6ë6ë63úwõïêß «æÓ"¢"¢"¢˜·©œÊ©&bGìˆX[$mw>dAʨ5£Û¦iÓ´ièë7[o¶Þle.:„8„8„ ÍYR,)–”›µÛµÛµÛõÜüñHöZ7–iKœÖò’°HX$,‚SçHçHç`N5§šS3¿°w¶w¶w~p©§®§®§NTа­a[Ã6ú:I!)$R¡R¨*Aa;ØtšNÓi€p„#fµ­F«Áaaap²µµ„(!JˆÊü‚9Áœ`N ÍY¥Xl=V7Ù.b“˜õI"µ‡Ös·`^»|‰&Ñ$úõ·çŸÍ×,û,û,û„¿îv »fuè‰Ð¡'/t ÝB7äL0ÌÃÄeqY\¤§NœàGWŽ®])ê•…ÉÂda«æšô;B©P*”²ÅÄ ¹·I$/////z[DamXÐU»iVí[µ[è£J¯E’Ä|Ug©³ÔY¸}ºr]¹®r†a†Á´-M³M³M³‚q¨t¨t¨TÔ+;(;(;xï†iØ4l>x²wCï†Þ €Pi;Om€6¾Ðç€mäVÿT¤"•\ ¹r5äjÁÛ²dY²,ù‡¼)¯)¯)/Vw9ûröål>ÍšÑ;u¹t¹t¹à»ÖöÖöÖvòž¼[Þ-怒”ý™ÝÅîbw;êééÉ<±®÷¦í†zžK„ß1ëOÆY«]TB%TBö.]6º ÿÅ/å—òKÿÅIý¥þRÿw¿_7¾n|ËUÝ}Ý}Ý}úŸç:Ïužãcf,3–‹(U¼Z¼Z¼:Û–ÓrZ~ñ¤B*À<Áa‰í XÅ=ÏCðö;ÚÍEÐÀçÐZZKk×ö1W˜+Ì•úϽ5÷ÖÜ[Â2q©¸T\ÊÜ%‰’DI7[®\ ¸ò絚>MŸ¦üCpÜwj»\묀Æßã`ðöœv¬ÚÍA RÂvD’HoÐÚ@|hçcçcçÃÜ ŠEƒÃ>B¾/äïéÞÙ½³{'0«?[b9ûGÿ¥†¶"ÛIEND®B`‚routino-3.2/web/www/routino/icons/limit-27.0.png 644 233 144 3057 13061246473 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜäIDATHÇÍVïOSW~na”ßȦŸDŒÅ˜°lìG'hFGF«EtŒ#ÎeÌmè2?ð—h–l1MHØ$‹à²0Ñ-&̬€l‹Ùøk 0WÜ€£¶ÚÞÛžgÚ»V÷x¾Ü<ïyßçysÞœç€5‘/HÍÍMzkÞˆÆËËs.„q{”vI»&ZÈŒ3gH2³3³3äˆbu_Í­¢ü±zjk h{´=’!‚“{ ö$® ãOìdÒ¥¤K^…lü¦ñ’ìý¢÷ ¾MÞ¹~ç:I.– d«ûj¾Z¯òÅòãøCúùØw}'ÍÚm@n,ÛX¦{'œ0©#«MÕ&’ü3îÏ8¡!I2¸@2•©Â@ÒCÕµƒÕýH¾Z¯ò©üªžªîäÚ’µ%i~ÍüZÒ¹p£‹<šu4KÕ“/‘<ÁL%â!É`]°Ž~RØ…$)Q"£XÝWóÕz•OåWõTýp?ÑQúàS#Yã¬q’¡1’”‡”1ùqùqR<¯˜e1Ç,fQ(ŠâS|d°>X¬#ƒš &¨!ÅEñµøš/!Š”Z¥–²r[N•SIq(ÌOÖxj<$—T}u”?@n™äIòxâEÀ9ä"yœ$YIŠ—ÄKôñ#žäIRD@b$}ôуýôÓƒwpwÜÆ–¤¨ô±,ÂÿjD/¢Ï‰p?àh`ÆÁ†ƒ *[èéqíïG~?BžÊ8•v*Âiu¾î|tå¸r\9dÛ±¶cmÇÈÎúÎúÎz²ëV×­®[äôåéËÓ—ÿwbtŽ;ÇãäÙø3Þ3^Š™»S=S=Q=±rpÛÁmêhÛ4¡¿à…oñ)Í”ÜxgºxºX*,ro*Þ„€m­ÚV Éò¤¥ÀR\4_4_4¶.[—­ 8_w¾î|°xÿðþa`²p²p²ÿ­ùÚùÚùZ`ïÔÞ©½S@Ç÷ŸýôÙO*X±P±€ÀÊI ¥5ÆVc+À–p?¤¥t¤t<£Œ ÆàöóŽ÷ïKçÞkoþ±ùGhû;ú»û»Np‚@Êý”û)÷k®k®k.Àb¶˜-fÀºl]¶.åÙåÙåÙÑÆ®6]mºÚhµƒÚA`Ì0f3i3qqÐÚ¦¾júªI:TOWOb0Y$‹gô œ™˜™º)**£×þú‹Cº!YSSCØ|`óÍÑÑ,êõ‹z2ßoÈ7Ž~G¿£ÿÿ#ìXèXèX K·—n/Ý¿l3t:ÉvÓç}Ÿ÷q‘ä Þ ƒHKOKÝÔˆ6¥T)•nJ O%<Œ¾å8â8‚µÆŒ£¨7ÕWÖW§Ïž>{úlô$ºýÝþn?°.n]ܺ8 ÏgÈ3~«ßê·KùKùKù@ÖXÖXÖ0wþîü]Àõ¢KïÒ³ÏÎfÌf¹}yµyµX x-^ e‹Q1*ÝÔˆ½W¼WF~~øyªÝ4º‰Ö äIyÞÂÞ¼Þ<`}öúìõÙ€]±+vªªª¢ {{{eUeUeU@QkQkQ+ ÷é}zû\îÖÜ­€å ó’y ¥hµh•VÀvÛvÐìöé|º‘_ÁO"·’‡š5“÷z·dþ•¹â¹bÒewM¹¦(æÍ5Ì5þ>Ÿ¿\Ý·ºouyÏ~Ï~ÏQ( „¤»ÝÝîn'ÅN±Sì$Å.Q%ªH·Ãír»(BË[ä-$ƒa=ßl~³™äýp?ƒú©úÊ>¦ºœêÁÕ¶Ä`™2åÜÌwù.òˆt‘N’"Y$Ó'"üÍÎYç,I&¹“ÜžxΨ>öÀ_ýS#Ö4Ö4’¢+ìÌâ—`j0•_*+Ê e^à'(¨ãn yŒòØFþà,gIá3b†¤7ìüì %†)‹ß¯â%iSwüîx’‡ÿÑýW>²¯‹Gö=öh¾`ÿ¼À³*÷‰.ËIEND®B`‚routino-3.2/web/www/routino/icons/limit-37.png 644 233 144 2441 13061246467 14525 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÖIDATHÇÍ–_HTYÇ3fŽkŽ îS#…B,±Bº)þƒŠÈ)ìßÚƒmŲ,!˺[Q»‘QZ”ÛB’™¶µ–µ=h¬ bAXW‰mXÈq¢m+µÔœ{îùìÃÌ{[êi_¼/ÃïwÎïûùÞ3çüî‘Ùñ_w¶;ÛíÅîÏì¼§ÂS‘Û‹›¸*]•¿ Ç2Žd¶d¶˜vl[óõ"¶¾“gåe¶Ø‰”Ž”Wq<ÞUyUyžcqÃ-H½”zéµÛ:·u\<}ñ4_@änä.À‹âÅ`ÇÖ¸5ߪ·ôœú²ç?|H&]AÊÌ”™"0·lnYΗ± æÀê•«W % %i7¨¿YÌÒÅÀcXÏ3GlÇç[õ–ž¥oñ,~Ì@VQV‘¬Ù°fCê©XÁ@|ŸÅ‹^ö³ŸY`Œcj³ÚÌзô-\¸ÀŽ­qk¾UoéYúÏâÇüÈÛÿí¡RXçYç4@´—¨êVÝf½YOÔœÐóô<´Ñg<0€öêtú‘~¤aÊP >UëÕzPnõ±ú­R*ƒ(˜nÓ ŒÆõ-^‚/NC5Aj$526ª‡ ˆ°Ì€`œo¹À ‡ë\Ç~Žp„#@Yd9òL0ÀÞ8ò˜Õf5ãñ`E‚—àÇüÄ5߆õ;êÅ 3ÂFæ0'¶~¥¥¥ÐÓÓýûú÷õҡҡRhºÒt¥é ´ø[ü-~hll„ÐÏ¡ó¡ó wZÿ==äà%ø1?îØº^Y^»¼6¾ŒâZÄj4Z¦ KX\¡]¡]¡]"KË––--¹¿äþ’ûKDÖ××EÚÓÛÓÛÓE‚¾ /è9“}&ûL¶Hõ½ê{Õ÷DBŸ‡v†vJ 7“FšLY¼·ù…—Ý"ÞoOþ'"E%E%‰ºS²(©*©JR¬ŒŠ¨ˆŠˆìîîŠlòlòlòˆ¤U¥U¥U‰ ‚A‘ù7òo䋸ýþF‘­Ã[‡·‹”=){RöD„lg»HÒ`²‘lXú®S6?î2Ó3ÓÍ?àYøYØqìÿуz8ÌaÛ;äÕÄ«‰Wàïðwø;ÀwÐwÐwúêúêúê`|þøüñù°àÀ‚ À@÷@÷@·]¯+t…®¦tX;y ~Ì€·ÇÛ£; ²8²ØPß«ŒUv|öêÙ«g¯Bþ–ü-ù[ì|Þî¼Ýy»¡+Ðè @ksksk3,›Z6µlʱåËÍr³&LPú¶¾í<?æ'¾ù«…s#çFïU£_'Œöy}<úxô1/>^|¼åÞro9llÜØ¸±Ñ–¯©©¦þ¦þ¦~Ç‹ÞT7ÕM`’ç<P­ªÕÒ×56?æçý§ÒjŒ¿2Ä}*B£Ð(„§½O{Ÿö‚ªQ5ªÆ6ðòäË“/OÂdÁdÁdcAº¹Æ5ÀŒ9q4ÞwžÊ÷÷±‰D;jeœ,d!è¯t@{¦D—è —\rFüï>öŽÎ@´Cõ¨³Ö¬%Ê÷tÒ‰Ö¿è.Ýü@3Í |Cu¶¢fµYMÔuÇ¡ÿþÎ?m¿•Óöv1mïcÓóû/¸1uÌÊ¡ZIEND®B`‚routino-3.2/web/www/routino/icons/limit-89.png 644 233 144 2456 13061246470 14534 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜãIDATHÇÍ–]hTGÇÏ®Ý/Œ1jBŒ(©!Å®š*¤¬†­ø…"i¨Fñ¡ ÕQÑ‚bŠÐˆˆˆ?j jÐM\ŒÆ­f¤º ¸" ¨ &QtëbÜ{g~}ؽ{·¢ÔGçåræœóÿÿçΜ3# ""y鯀sŠsŠ37e;7ÛóÞ*oÕ—¤ìc&8V9VõîñGƘpjÂ)ÕgۖߊÏαñ³ù¬yÉ{ÂÓæisT¦íX;síLoAÊn ƒ¯Ý×þÆ€-—·\¸Ôr©…Ÿa g àeåËJ°mËoÅ[ù^6¾4¼Ç/®NW§ãoð¸=n˜ºxêââm©€GŰ|éò¥OÆ<£`9äèJ Nk gÙ–?oå[x¾Ågñ§ôäWäWˆÀÊu+×ùN¦úÎÂŽ¢E_²h¤‘0âFÀÜ`n`tX‡pàÛ¶üV¼•oáYøŸÅŸÒ#ÿÝÛß¾‡5Þ5^@$o“4o˜7Ôµ‡¤zªÇéqh£ßˆ1Ð-Z2 õŠ«8#Æ€1ºNÕGÑ «Ã$I˜!3”Yðí _†_²}õ;ø|ñ/à¡ùÐüªI5‘Ð&¥”¿²›Ý¶®qk ótžÎÚh£-ËÿëY,¡žzÕ H0já§ù2ü)=iaÇþ„­{·îͬ»ŒF¿Ñ¸˜Æ´Ôÿ¸üþñûÇ¡©»©»©z½Þ€­#ú,ú,ú šg7Ïnž ccc¶_ßÕƒzµÅ)¾ JOZØ_¿ÀùWç_eÒ7)ß» ï.¤×„úB}¡>È_¿ TªÕ(é)é)éÓþÓþÓ~˜unÖ¹Yç`žsžsžÊJËJËJaxÆðŒáY#ÆVc«…¯7Ùü)=N‘ÜîÜîo¾©XT±(½¿â8)oEÎ"ñX3*¬Â*,âkñµøZD–\\rqÉE‘é±é±é1‘.Ý¥»´Ha¤0R‰¨ˆŠ(·Çíq{D‚ÁÆ`£d†>!a [øŽ“6JSdÌò1ËùZÄuÅu%“7"›m …/ _Šø |>‘3ÛÏl?³]¤ßÕïêw‰TçTçT爼Î}û:W¤jrÕäªÉ"ÑšhM´FÄ]ç®s×ÙxòT<ö²eÄæOéqЍ  :ˆ+Œ™À|s•«6Në¤ÖI­“DæûçûçûE®Ÿ¸~âú ïBïBïB‘[Þ[Þ[^‘¹sæÎ™;G¤²¼²¼²\dâþ‰û'î)n/n/n·ñ³ccm>›?­çcgLOLv&;í3ö ùAóƒfðÇýq~Æ>^•VÕtp{vU¾M¼M¼MÀsžóPÔ#õÈæ †FC0¨Õ ÕQ"tÓmŸ}’ƈ1ò¿Uù>Ïô±³ê, ý®Õµ Ûu«nͪ®r]®ËAoÔõFÐô} Ëï×%º8@ €Ú¥v‘Àø¤>öÎoufÓ¼iÞPõªž$9Ä!´ë.Ý\x¯¡6°} #é«é.oxƒµMm#‰i†Íð'uþÏö®ül_Ÿí{ìó|Áþ ‹ÃyEšîÕIEND®B`‚routino-3.2/web/www/routino/icons/limit-142.png 644 233 144 2647 13061246470 14604 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü\IDATHÇÍ–ah[׆?ËqmÕ©@Q1ʺÚÈ3Ýü§%Ôq‹mÚ¸Ä4 Æóhkô#!¸´iYðÜ­at!u‚aÄYÓ8_ÓD­í¬ Û%%3E4Ëê‚4œ…T6$¶…-ljtï=çÙéZZÝýÏùq/ßw¾ï}ß{Ï=ï=""òXþ.àzÂõ„«2»Þ(ä+^¨xáÇçrñ€ %/—¼ü¯ß–þ-ýÞÓÞÓêÛBìÌ;õÅý"üb>'/I!Qn”%ù¸^©{¥®âñ\ü§)pŸwŸ¿gAw´; ðÉGŸ|ĘÿrþK€Tcª ±3ïÔ;ý^1¾ô}_ÊÆÊÆJþå”?"UMUMÛ“+ø÷vx©õ¥V€ïJ¿+Õ.°ï<ºH“Æ E±3Ÿ¯wú<ßásøsz| ¾h{µíU÷`®áÛ³ðfàÍ€ÃgžÞç}<`¥­4€Ýaw=¥§(¡ ±3ïÔ;ýžƒïð9ü9=ò¿kûçÝÐ^Ñ^¬˜WAmQ[@5˜›cê÷ôˆA󽡫uµ®õSU«j yõOe+mÝÌ>“}S=0—Ì¥õ¾Jf¯µ×´Ã/Å‚jŽ£ÜIw2½ â*®Öq[ìYóYóYÖôy×q6Žj¨}M_Ó׊„.é%½ôq„#Eõï©ZUËšÎäð!L5÷¬{6½ÉÑ“6ð„„×ÔÏô¤9jŽx¦ŽO}0õܬ¿Y³~£¾ÄþÄþÄ~˜L&…üõ•ë+×WàØõ냗oÌܘ)¼qmäø°Âï„ßq–và‹¼°XÓ‘Ë‘Ë@?€~ TJ¥È?2<†ÊŒ2£Ì€sgÎ9w¦@l5šG!hí  {"{"{"ؑؑØ›=›=›=°»twéîR¨Ú[Õ\Õ _ÿâ«ÄW 2yy¯©äÐÌÐŒ#,Ö#P9Q9¡ ®Ì-Ï--E¹³c`(Ã6lð/û—ýË0äò ù u“““àïõ÷ú{!¼5¼5¼&ƒ“ÁÉ NNNêC¿ u…ºàôáÁçŸ+äí_Þþðö‡àèð>ê}TÍÀBr!YØöv“õ´õt¡q—w—w—†OŸ> cgÇÎŽ_¯ÎWÝÝÝ\ .aÞ3ï™÷Àôøôøô8Ô^¬½X{º¬.«ËÝ¡žWÏÙÌÁ…ö…vpô¸DÔgê³’ÑÖ‹Ö‹â Ÿ”Ém¹½‹îÑ=ºGD]PÔWÀpDê³õÙú¬Hl 6IER‘TDdpxpxpX¤5Ôj ‰tH‡tˆÈ‰_Ÿ8p ú›zW½[Ä÷†5jŠ8z\"éÆtã×Óâšœ˜œpêx]BºL—IÖÉT*•‘ì¾ì¾ì>‘æ†æ†æ‘KñKñKq‘CwÝ=tW¤Íßæoó‹TTTˆ¤ZR-©‘èjt5º*²mt›±ÍMû4æà󺲮|~ås‘u=ÿoW2fE¬Há“[ùùJh%™™™@”(QPýª_õÃZf-³–å[Ë·–oÁýS÷OÝ?wšî4Ýi‚äß“Ñdæþ:7>7Ž~ðûÕ·Vß*â?~jî¬9îy÷|zÄí¸]ð1Pª“µ"gÈ’Í_³À"‹,÷¸Ç=@£Ñ€‰‰ù¾‡Þ®·¯ãµ@üjü*€;íNoð±p~3ïÌØ³ö,ð¸ý¶ý6&¿ÃÀØèüÉéOx’'?ÐK/èˆþFƒÖÿ°½¶SVÊJqðÛKÛKœÿ¡ýW>´§‹‡ö<öpž`ÿ r¢&¼ß¤aÅIEND®B`‚routino-3.2/web/www/routino/icons/marker-11-red.png 644 233 144 3755 13061246465 15437 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü¢IDATXíWml“×>ï‡ )4Þ¢¢°‡*0’Áø’ÈŽsÑàA!R&¾5U¥ˆt…ˆ(”L£mPV´!Ñ(µƒ&E hkhøH£jÊ:@PTч`¤(Iìƒ÷¾÷Ù¿÷}mo@§íüIιÏ=çyïyν2QÂ~D)&fø3ü~鉘=£cFÇŒ÷•©Le·ÿ@Ëi9-˼‘TRI>êóFûE>‘?µž\˜Ê'™_ ÕPìK]ÏY¢v¨j‡oL:"‘Ž˜DìÙáìpvÙzoë½­÷€ò‡åËÛŠ¶m+²|±.ðb¿È'ò‹z/æCòúTÿõåIyRž\.Nh~ÕüªùUìíó½ç{Ï÷òW"##(P  Š)La À 1˜¾±.ðb¿È'ò§Ö{ýãó#Ç«rPÊÁÁ¿ŠE=E=E=ÚÚééi À0žÏóy>4VÇêXÀV°lÀ<ÌÃÉ'ùˆÔSê)õTë±ÁÕèjt5j“Ø;|߇ˆÖªkãÔ7èÄõ<=–éˆ ˜Ä$€¸±ßÀk­±»±»‡_åW $¬z¢¾à#ø‘mÈ6dúÅÏÀQï¨wÔó…ÑÀp`Fžû€ma[€Ÿæ§Døq~É6a¢ö¾^È ÿÏ>`ï±÷L7 ŒF1!ê >&?õzH=ÔwJ,œ«JŽ’£äü~BδgÚ3íÇÕ›êMõæg‚CÁ¡à¨æÕ¼šëÆGYX‰EXDqºyÆ=ÜCD¤è#)eĈˆ(Lá¤è$ws7MëôGDü— &DŠ]±SÆøúÀ×üicc£Ü§T+ÕJõÝ_é#úˆ>âÕÒžÐùͶ[­`ð⋼uÞ:o7›¥ý8qžÀòå"×ò®%¿Làßòo€û¸/Y*7Ü7Ü«ìú¤ë«ÕŸM¶õµõáMó mä†gni®4Wšû³ói•[æ|í–vK»7´HmR›Ô&´¢ôwû»ýÝð›Ú=ÊŽ²£IübˆY¤Ÿ’B¿”ïå{-)Û‚-ÁÀ9Ó9Ë9K;d¶ú„rB9áu™Ô<ä!ê°¸S1«'ÈG>ò)!%¤„Þî -ŽÓŽÓš=ðn 7Л¬]Í«yS&Þø(F1 À~ô|{½f}Ê®¿ïz°ë;*ò«Sê”:å?™{8÷pîa"Ù%»d—tÉ`W)hÎ2þîPî+÷•ûÒå…Ç[xŒÈVe«²UùOŠ„®bW±«Ø:KÝ«{u/bðÃ?€qŒcKøŽ™©–ºÒZORšûeªï˜™ÐnàÒsµk×ìšÝ"¤ëúõ4FûëÏìÏìÏìç[MMΖg˳wþ&MŠÍiü2èÅålšv·¾L»Z·Ö­u[Ê}šû4÷i.°,¼,¼,Ì~jj±]iWÚ·NHÍ^:Á,z‰Y‘àyÚmr49š4{ -Ðh3‡*,˜z/{/{/ëQS‹-j‹ÚÒoü$Éü[Z]#N¯¼Œ`º‰ ; íþùyÚ-Ù\²¹d³¥]ÿ:ÿ:ÿ:\L¬s³R…T!Ul¨M-#§Õ•è¿´—i·PiP”†Á‚pE}E}E=ÿm~µR+µ’qí(´zô?ZºvO¦ú%ßK{¤=Ò€6ÒFÚ¨/•çÉóäy€DItíKgÔuF‰”>¥Oé“®w¤uîÿfvó¿2*£2õNêò»•2—¹Ì©Kê’ºý$_äOëÌ@ZÞ—¶ú_Z<ƒwþIEND®B`‚routino-3.2/web/www/routino/icons/limit-62.png 644 233 144 2405 13061246467 14523 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܺIDATHÇÍ–[H”iÇ¿±Ë’ƒaµSlV D]ØÊưiR´2rk E°ŒÊ 6£¶ÛŠ¢“nFNДØÉÕbA¤ÝP¬Ý‹ÆÖm,ÛiÆy¿ïýíÅÌ;ß·KÙ­s3<§ÿÿÿžç{5Ð4MÓf$þ5H™›27%3n§|gúÓ\i®¯nÄí :ØÖÛÖ÷‚ég§ŸÈjÌj4^˜¶Š«|k½¦™øV>å×fh¦#µ%µÅV˜°Àæe›—¥ÍŽÛ§: ½5½õ;ïî¼ pçÚk|Á'Á'¡ÂP!˜¶Š«|U¯ð¬øÚ‘ÿñkL¹?å¾íOHµ§Ú5 rVç¬^PO\ëÖ®[ ðzÒëI2ô¿€©L•…À(£¨ß°ÅVñD¾ªWx _ñ)þ¸ fÌ*Ð4()+)K¿/xÑû²÷e+¾X+PO=SAŒŠQ½B¯ ²Cv`æ­â*_Õ+<…¯ø\öß³õ|›Ò6¥%u1ª?ÔW«Äd•ôHRt‹§â)Qã£ñ1¹c}†ßðƒøC ˆ0"ržœ‡ã¸qœý‘þ ü$Ÿâ׬‚¾þ ÒƒéÁÑÉ0 è@€5`œ2NÆI % ÿ–CrÈÂ+^ñ d•¬’UÀ®pÅ?ÊA‚É’xa…ŸàKòÇõ$„]øÜuîºäºóÔÈ&链øú^¿,~Y žfO³§zJ{J{JMÏûž÷=c ÇŽ¿Ýßîo7ãÒ+»e7!B"dåSüq= a=µpóÝÍwÉòò­h D•'”Ê åÁ*ß*ß*¸ö»ö»öƒ+è º‚p»åvËí˜Y;³vf-):Str6ælÌÙÏòŸå?Ë·yw¬:V­ðå“?®GƒL_¦O¶@pyp¹Y¨WŠ…b¡i7Ÿk>×|æ,š³hÎ"(Ÿ_>¿|>œì=Ù{²®{¯{¯{áðÈá‘Ã#f]îöÜí¹Û¡ñ@ãÆüb1[̶y’?®Gƒ¬iYÓŒßa800Û^ÿV,¡MEMEME°ØXl,6àòàåÁ˃àp:œ'tvwvwvƒÿžÿžÿäÖäÖäÖ@¥¨•d…¬Õ²TšW`ØäëùüŽˆâi{=^×+¶­Ø¶b›éÏË˃š-5[j¶@vYvYvÔ÷×÷×÷Ã÷÷7ˆ˜ˆ‰˜EX¯¼(/Ž»cŸ¾cü¨/Õ—%Â[Þšåå»Êw•ïûûûØ»{ïî½»átàtàtìö{¬ÌX™±22™ŽL´†ZC­!ËÂo­[3î¿+ LØìJ=¬‡õ0 Û†mÃ6Kä¹"îˆ;â†7Î7Î7Ntº]0tièÒÐ%ˆü99d6'?‹óâü»òslLÍã¨q”0[9Á r²œli‡tHP@–“‰MìGÔìmc«±51ž<ÇÆ™üºþX `ì1öã~üHù‹l“m@;m´uÔQ²YÞ7@þ&;e'ÈÙ+{‘4èïõ÷Ä@ï×ûXÿó“Â~+'ìëb¾Ç&æ ö_‹Ô­¦Â¾[IEND®B`‚routino-3.2/web/www/routino/icons/limit-9.3.png 644 233 144 2524 13061246471 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍ–]H”YÇfãiN¤Hi‘^TäGí(š áF;Ù&ôÁfk]´"åb¬P­±YA7¥‚”Tn[»DC‹Ú[©íô±£}Vk6æ43ï™óÛ‹™ãû¶µ÷ž›™ç9ÏùÿþÌóžg^B!RcŸâ³â³âS¢qü·fÞ¾Þ¾>çB4>+!¯î‚Ù§gŸp´8Z"ƒf¬÷u½õ¼¦¾•§ó"U˜‰ÄK‰—âŠcq¸r]¹ö´hüÓmHº’tå½»»vw\n»ÜÆw0Ò3Ò0V¯õ¬ú¢á?|!`æõ™×ã|hK´  ×-\—½7Zð(6nظàÙŒg3T<ÈWÀ,f©bÀ½^[b½«×絞Ö×<Íú0·hn‘PQYQ™t>z`°dÈÔ¼ð ‘Ffá7ür›ÜFÔmu€8âÀŒõ¾®×絞Ö×<Íú÷¶©µÙ¶Ù„ÂÝ }Ò‘°QeT6þ‘é2¥jTµªÆ\ãŒ3n†‘@ä]äËD™ˆŠüi„AÉ! Ó×<Í7[)„Kš!i$iÄŸÀ¤×ï5[S® ¹Une’è¤Óbd;ØSL±%_K-µ€7nKþgnq ˜+÷ËýLj}Þ ïLñc~bÆÎþ{ï9 ŒDòH3ì†}JVÝ[r/û^6œZyjå©•ðäᓇOZ~¡¾H_¤ÏŒKKK¡©­©­© <=žSO½ ??ÞÅxšó3æù.Ž_‡H@íŠ ê €œ·9osÞÂêÊÕ•«+!oqÞâ¼Å0Z3Z3Zcz´æÑšGk`α9Çæ×|×|×|˜§æ©y îdÜI¹“2UŒÒ¼(_û‰"ÅâÎÿRˆ¢’¢!(Bˆ¸ó±N'ö&õ:zB¤/H_¾@ˆîŽîŽî!l›ÃæâZóµækÍbj…¶‡¶‡¶ q$áH‘!¶8·8·8…È8™q2ã¤!J%L•'Š^Í‹ò§ü€#Ù‘€×Ï_?µwêÚðtèéÐÓ!È=˜{0÷ 8³ÙÎl°5ÙšlMÐno··Û--uE\L&ØtsÓÍM7!kgÖάàIõ¤zR-õ¿h^”¯ýHq§¸Õ%))õ5-oÀ;éWÈr…à¸ç¸ç¸2|¾ ¸ Ý…îBé2]¦CëòÖå­Ë¡`iÁÒ‚¥¦N~^~^~´þÖz£õ†™—[õ·(_ûùä‹Í¢]@ -ýý5þp®u®u®…Ì´Ì´Ì4¨ëªëªë‚ñUã«ÆWÁŠòå+ÊÁ·È·È·ÊjËjËj!¹"¹"¹ªú«ú«ú!p1p.p@u¨‚äþûôV»%¿Œ æ- þ¼¼ /_¼|ñòPFe lʦlð¦úMõ›j3otF'Œ^½:zäyBž0õ¸oô=Þço¥eŽ£­›š3_È3ò “êըͨej™ZÔSO½¥÷U§êT¥¾DíSû€Ù ,sìƒ÷½÷ýÿÎ1Ëäg³}³0 6ùÈÀrDŽV=jL¡¸K}À»èÄWÃjX A>ð8ÁQŽ‚ú] «a礒Š0È~ÙoÕñ>üÓö¿rÚ¾]LÛ÷±éùû/Õ†D¿}.IEND®B`‚routino-3.2/web/www/routino/icons/limit-25.4.png 644 233 144 3062 13061246473 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜçIDATHÇÍ–ÿOTWÆß*Ð)VDÓ•&-qC£„¶.´¤n$ÅlGilˆˆ@L›!`³mV\XjHÅ/#vˆ ¨_vE(*éN‹É£¦ cÅj0-ØAÒqÔaæÞóÙf®3í_àýåæyÏû>Ï{Ϲç9G@DDž¾"VG¬ŽXÀ;Bñèw¢ßy©+€j`²š¬£s›¹ ¾#¾C¿ÂƸ‘^/â×3âò¼„Q=Q=¦A¼JÒKÒ£¸Å1§cN{üPq¶â,À©§N° î]¾w`nãÜFacÜÈ7ê ¾p~Ùû}XÔ·¨Ï4Q‹£‹À‹¹/æ¦~Hø)¶äoÉø%ò—HÚ} Ž8µpãÆxf°1Ì7ê >ƒßÐ3ôý,{ùÛ"ðÞûï½cÜè„Ú”ÚCÏwh¢‰8ð»ýníí¼ Ê€ „°1näõŸÁoèú~BKùHDä‹MP4^4ú¾aÿO¾_ ¨(ÿjÿj|Ü@iõÚ'Ú' ¥i¯h¯€¶CÛ¡íþI3Íð»9z™^†O¥iÕZ5è©~(–b¦ }c)/‰ˆ¤} 1î·û9µ0><> ìÀ*GåðˆZi5¢FÔH˜°?~@¡Pañ'<áIN#4P?hÍã`Ô‚g|p| ý@ci_ ÷DDŽ~‡ygÙÎ2ƒE_÷¿¨k»¯í†Öõ­¯¶¾ŠÕG}£¾Nï²Þe½ËàÐÖC[m…öâöâöbx˜ô0éaR(OoÖ›õ°¼Uy«ñV#ê?)—Ì—Ì!=åÛÙ°³+wô»ýW‘×ÿ%óùKò—ˆ\ùðNölSFÖlöšì5²pîßçzÏõŠÉ:euY]"ƒcƒcƒc"õª^Õ+‘ yò.ä‰8 ŽO¿§ßÓ/OÓ*Ó*Ó*rÉ%WÄ¢[nZnŠé-MYMY²ÌÊà/9_ç|-"wýDÈ’ØöØöõoˆl*ÛT&òó_o|~ãs“ýã£5C5C5”2ôòÐË" æs‚YÄÖnk·µ‹øëüuþ:åU^å)¼Rx¥ðŠÈÊu+×­\'¢wé]z—ˆi»i»i»HݶºmuÛD¼ÑÞxo¼È —÷/ï—¨`cvþœóQÎG"²vé·K¿]ÿ†à‹ŽÖªâ¾å¾%ôË^Þ0œ:œ kÖ¬€]£»Fw‚ã®ã®ã.”»Ê]å.èHêHêH‚Ä#‰G@ßþ¾ý}ûCKgßlßlß ‰®DW¢ J«K«K«á¥© © 0‘5yrò$30_8_ªÒ\g®Ó¢·ÄåÇ嫘o˜o€ëUÎg ÄœŠ®®…æ›Í?6ÿê*ï*ï*‡}û÷5†â™•™•™•`´GÚ#AÛ mÐ6Àñ±ãcÇÇÀrÆrÆrÒSÒ“Ó“aÑšHW¤ Îõ ö öüöÚo¯žëŒuªñ¿ "ru7 d dÁíäÈÉU¾èTÄ»ïâÍ<›ÙÙ +’W$¯H†&G“£É™™™;;;õ¶z[½ fJfJfJ £:£:£¦÷Lï™Þú€Ž¯:v„-ÇóßÊ o ªÊ5{çΆ¯]Ý-´w%U5U5ð8!°K¦7OeOeÃäðäÄäjÊ:e™²À‚uÁº`ŸÓçô9aº{º{ºÔmu[ÝuXV‡aöüìùÙó •j¥Z)¨"U  àñŸ¿ùøMÔƒ;3×g®Wzh•ŸV~ ¸ýˆá! ú˜á3n• žúʦlÊê˜:¦Ž…fBµ©6Õä‘G^˜¹ƒGÔ,³Ì•¨yô< >C/¨¯ ûÝ©þÅ&j‹*Š*@uœYýW‹Óâ@uûøàã׸†¢‘Ïø Ô úF}\ä"O 5©&ÔðóSç¯Ò«ðñwí{í{ ö©ó/.^ xÿèüÏîYùÌÞ.žÙûسyƒý?,mø`{¦IEND®B`‚routino-3.2/web/www/routino/icons/limit-30.9.png 644 233 144 3036 13061246473 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÓIDATHÇÍ–áO”WÆÏŒ‚ePÐ/˜qVT°ºA7VB¥ÖÁŽ`c”‚›¦[§k²ÉÒ4FÓåÃ"›ÁÝdØFÓ¦À–R©›k6(~©6ÙeÁ8ÌÖ™-Uâ Žeæ÷þöÃÌÛ—øx¿¼yÎ=çyNrïyÞ+ ""ËÓ_ëjëjkN [˜ñ¥»–î*ü$…»’`q[Üÿù=,ë\Ö °¢{E·~×ÄÆ¾‘¿°^Ää_¨gÄe¹˜%½Kz-Uiü¼]úvéÒ¼þãØúmýO5xgà€Ï?þüc~ ?ÜúáÀlÕl˜ØØ7òzƒo!¿|ðœ¾d|•ñ•%K2—dŠ€£ÆQSð›TB êÞ¬{`rÑä"e€äc ›lUD‰b¬éØØOçõŸÁoèú©~rwäî·¼uÀæKܽïå¿—oè%ú3œ!´¨HJbÔÀ‚LlìùF½Ágðz†~ªó(c""íN¨÷×ûAŸH k÷Ž„ôá„?á'‘îT©2õšz ´ -¨AT'ÕIÌõ„Ç<þ)=¡åiy$´pbeb%¨Ã)~¨ÖG°¡oå}‘â°EmÑèbÚüÃþaàŸìµUm%Æ?øš¯AíSûÔ>à0‡9¼ ‘ìd'àÄ‰Ó «˜Š©ðÎp@íP;ˆÑ”æß•Ö3ôÿêG˜éºANksk³A§oº[3òåÈ—Ðþ·v_»uç£;gïœ5ï]¿wýÞuè|Öù¬ó£Áhмkè1=¦ÇL3c3c3c šT“jU®ÊU9̸f\3.à*W¹ qWüø0õ¿©¹©9”ú—f×ìÀ­”õõ@ÊO»n7žó±Œ”¯¨ßýìcnå&¦Ž¤ Ty•WyA­QkÔš~Õ¢ZT pœã_ào¿d#ATmª @é!bjCšÿ¬?âØ~´ý]LÈð1Ãùç çmXܰRf˜VWµ°þ’ %C¦óó½ô‚úNÝV·k\ãð4õ¯TT@€x:ÿ£d  ¡niSÚð­áü ‹‰çÿÅýW¾°¯‹ö=öb¾`ÿ .ìH IEND®B`‚routino-3.2/web/www/routino/icons/limit-118.png 644 233 144 2640 13061246470 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜUIDATHÇÍV]HTi~ÎŒó§™ÙtXÌlÁÍlW‚mA­dv3t7²"+í‹Úªeo¤úÛ‚.b-via‰(£mÐUJ¬. W£?AbI+³h±AÇtfΜó={1~3S²÷¾7‡÷ïyÎá<ß0oú Ò”eÊ2Íæ¦oãu{©½ô“?¢ùo:©lV6ÿ}„L;—vŽ$Ó/¥_2zâ¹ìËùÄ} ŽŸÈ'똇xÁÖ`kP<Óù rÛòmËíj4ÿ©t4;šßEȽ×ö^#ɦËM—¹Ÿ|}÷õ]’ô{ü2žË¾œ—û/'>àHK«¥U"mV› ?^÷ñºìï¢}Ùdùúòõ$ùÒüÒ,L$IêoHÎáá!`€2þMÈez^îK<‰/ù$TÈk¬ÈM•›*£ =¿“5‹jI>­™ä)žâ2ˆHR¯Ò«"E»h'I*TÈx.ûr^îK<‰/ù$TÞÿ¶µ%d…½ÂNrœ$µNÒH3ÒHcvE»BMœ¢‘‚„á6܆›GÅaq8¡Þ#¡PD^„W…WQVZ¬«u2´%²%BRH~$ Zö Ç+Ç«@ùÌxfÄ6¿Ö´"­ˆ“âOÑ+z” RÐôR\WÅÕ„¶_ø…ŸäI㱄½Z#ßÈç$Q|òyÖó,’SŽAÇ` Iê1Eå}¿¦]çwOKMKMbÛ#­‘VÜ0g[:-ptŒvÜê¸ 9‡œCN (€9ÛœmÎ:†;†;†ÁŒÁŒÁ @IWÒ•t ûiww?Pû¸öaíCà‰·waïB8ðpƒ·rFrFÄ ˜%TÏ´°‚ëxèv¹]~å Åm.2!ÜøQcjc*”’—%oJÞ÷Ý{tïbáÝáÝáÝx =…žB WïÕ{u k¤k¤k(Î)Î)Îÿðøøãã@ÙÏeûÊöAéjz°ñÁF„•¯¢|â¡ËårIÔ‚ë&`î¹wVâ»À]à(iç‡`Ã?àžQϨgö³Ÿýqaʤ2©LêYõ¬z`«X‹ÅÆb ¹)¹)¹ (Û_¶¿l?á˸Ÿq˜ †2C™°M£\Dû…û õ˜s¹¹œy(¶¾³¾‹ñ½_r7w[M[Í[Í@^~^~^>0å›òMùâÂ*[*[*[€¼íyÛó¶ÃÃÃÀØü±ùcó*Tuž:Oðùþàlqö8{â|Ê%ë&ë&@ê1F‹Ñ¢<ˆlˆlˆ .€#‰ šÐ„ }èÃŒ0žO§€½Ü^n/¼™ÞLo&°:wuîê\àvÊí”Û)€õõ õ Ð5ÑÕÝÕçÕá›á›€Ôcž€§ûL¾;¾;rŽ{ð™° ²’r å@ÊÀRj)µ”ΖZ”Z”Z„ÛÂmá6àtûéöÓí€Oõ©>p^p^p^ M…áÂ0°cb[÷¶n‰Ï=æÑÎúÎz ¦gú,û‹¬>Z}4æ>Ÿ³5R©ÿýã®ñ‚ñ2d ÙB6Έq׸kÜEÛ‚mÁ¶x=Øl6£ †H‘+ÖŠµ¤¾WßKrhš/ÆÕ÷1:^;^’Ègú3=îc¤±ÓØÉÉ !†f cལ‰b¥X)V’¢Yx…7¡ž©ŽTs’ŸÆ|lÙóe$ƒïûØÿ;¿&?j TõCú!jü‘ l˜éüT©R%y”Gx$¡þ Oñ…h×—èK¨ñš^£×$8¿^‘T‘$ßÔ{Î?kÏÊY{»˜µ÷1³ðûm€ö8¢IEND®B`‚routino-3.2/web/www/routino/icons/limit-16.6.png 644 233 144 3026 13061246472 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜËIDATHÇÍVÝOW=ûìÀòéBÕP·µñƒ bLÕ ©µ¥5X‘‰1M(HLëƒVRôÁm郱bš(¥Ø³QØPé&*J£Ø`#«ÒÝ¥l‰c1NÝ™{ú°;ÌÖ¿Àû²9÷w~çœÙûÛ ÿi}Óú¦5=†­æ¾ãCLJïüç4Ò²Õ²ÕÌ8‘q‚$³Ú³Úõû&6ê?±0õýŒ}dÂÜHö&{-åq|˜¬]U»Ê‘ÃßR·Ôý\%›|M>’¼Ðq¡ƒ_“¿OþN’ÓåÓ変ºÁ7ú ½D}~Å “.&]´„ÉäyÉóÒýûƒ%{b„вò“ÊOHòíMXI’Ôþ%é¤S”“T¨ÐXS بÇùF¿¡gè~†,HW™« ?ÝþévéL¬áþYrÞþ<Ã/ÚMòÐIªŠª¤¶CÛÁ—¤$I -¤‰ºÁ7ú =Cßð3ücyðÿwÛº‘ʶè¶è\ A½,šM"Å~õ¾zŸFEˆ±El!ÕaõõR×u]×i®Ç|ÀsHˆõ€z€Qu8šM'u%¦On{´íɧqÿ¹W©ÀŠã¤ô—ô—b'ƒƒI-D’üXt©OÔ'œ™³xƒ™Ì$…,d!'éa{H6° û‹¹˜‹I!‹i1M’¢NÔq†=1}~ ’¤¤HŠbg –'þ¤N]#›[š[Hq‰$õBCwàäÀÙ³c¿õŽõš~¡ÌPf(“líkíkí#o×Ü®¹]cÖõ}ú>}Ÿ‰Ç¶ŒmÛL¶^límí¥¸]wkðÖà»P„wî*$ù$–ì€á¯øC×7]ßÌ=ù¯««¯«/ííöïíß“Þ&o“·É4ZgYgYg!+Æ+Æ+ÆÉb¹X.–Éðéðéði“'wÈré¹â¹â¹BVŒWÜ­¸K?Zlý1¾ü§^Y®, ä…·/¼MêS±Ë=@ݪn0à2„ÙÉŸø &Ť˜œUÎ*gº3ugêN ÑÝènt¹m¹m¹mÀDîDîD®ÌqÐqÐqH[™¶2m¥ÉϹžócÎÀïf<Ì€ àîø–6¢XîYaUÞWÞÿs¸zéê%K€ŸÇu#éIézºÌg‚3A X*–Š%`©g©g©Hq¤8RÀZy­¼V*=•žJ°Æ¿Æ¿Æl:ºé覣@¾;ßïR$‰"ÿêîÕ݈ìh¬ï­ïåç@OCO`Kš]0»àÏ¡ÄSy¨ùÉ_S©§G>+yVÿ¬žâÅÄ‹à‹ ù£Ö¼šWó’SùSùSù¤Þ®·ëí¤£b””«ä*¹ŠRß­ïÖw“SùS §RèË#áHØ<•ü»yYó2càžº¶â8)MJ“Š hmÎÿcFô:½.aŽíd-kI‘*REªT,‹Ä"’¸æX-kXCŠTán’«ÅjΈ…qýò€?à'Ié©ôT±óÎÿæXÂäW«mÕ6sò3G ¨’‡´°6'?f;ÛIqM\WIžçyž'9Ãç|NŠ !2þ•{4MÓ×ÔiušäÏÆä¯¶WÛIF^ü¯ïåk{»xmïc¯ç ö? Ž6‰­IEND®B`‚routino-3.2/web/www/routino/icons/limit-35.8.png 644 233 144 3063 13061246474 14670 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜèIDATHÇÍ–íOTgÆïPœ:Åâ2K(4HmÁ.4@ÕØHÔ™ .ˆUGB]¨¡"»1~°‰6ݶKMºb²yW îªS2šJ­ÖÝu|K$,¶»X°¤”Šeg„ ;28Ìœy~ûa8qÿŸ/'÷Ûu]ç<ç\ç‘çf¯ÆŒ/cñ±*’_¿ éÉpܤa³aó¿~‹êÕĵƵ†îDb½®÷ωàÏåÓóòœD11Ûlü!”¼ZòêK8>xL]¦®© ¼ëx×ðyûçíü~¾þóuÍcƒH¬×õ~}^Ç›‹/>Á/ó¾˜÷…abæÇÌ”õ)ë_ÜnøþE(.,.¸u/J@sfÌÊxñ¢¯sb½>Û¯Ïëx:¾Î§ó‡õÄ[ã­"ðVé[¥¦ãá;÷’ßKÖù]ÀÇ|Œ‚Þ @+ÓÊðƒº¢®`À‘X¯ëýú¼Ž§ãë|:XOd+}""uy°upë „®ï’Iú1à øðJ{_Û£í-]KÓÒ@«Òª´*àµÔòäR¡Ñ@   $’!¤…ñaëO[¼:¿¾•?ˆˆ,; &¯ÉëfÿàµÁkÀßø5¨\•‹fZhu_ÝW÷çPjhh€B¡>|siJSð8 ¬ÊŠºY|Ë,ŸÎï ëÆDDšœÄî¨ÜQ©Ã…²ï¬ÿöì·g¡î:kÕ—Ò—Ü—!6ÉçÙòly6Ø5´kh×P$ÿŠ{™c™Ú~<é>éð7ø@³<ÓÿL¿êõgýëï‡ÿ~  ¶Ûþ´öµµ¯á7—˜‹ÌEPÕ_Õ_Õ½µ½µ½µÞšÞšÞ ±ûb÷ÅÍ{›÷6ƒ«ÆUãªÕi«ÓV§³ÑÙèl„œþœþœ~ˆ;w8î0TþçíOÞþÿÌ+a>ø¬ä³ÀÖ3ëcMNnUÇWÇG¾’àªGžGpÝt}éú¥j…ZaäŽg,3– ¸n£ÛjH ©!P'Ô uÆ—/_œç<çÁ_ã¯ñ×€kÌõë;”J †#|ŒTgTgè†ÛäÝ7ûȼ°¯¨÷ûX*À§þ¨U#„:B¡P7ÕMusŽ_Õ«zUä’Kîœ|ŽÊRY ºÔ u@eªL|jÁ,þ¯ïÞ0M˜&¼Ñôè>¦;¿_w^{´=Â¾ N'€fmT% óñ[ª¨õ7uY].q‰KÀTø_©FÂOéÙþj­[ë& þt]@—îüö({0ó¤ó?½ÿʧötñԞǞÎìÿã6òš w¸IEND®B`‚routino-3.2/web/www/routino/icons/limit-21.9.png 644 233 144 3023 13061246472 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÈIDATHÇÍ–oLTWÆß Ì0ƒE>H ¶·4-µ‹•Xÿ0hWl¥iÌÂJ¬‹í†ÝºKkbX5k0Uc:ØÔÖ?DÅÅPSÓHRè`#±-e ÉtZ±Â+¶¡Ã Ì½sÏo?Ì\/[¿ìGÏ—›ç=ïû“|ƶ:Ž÷Á«ù¯æ;æÅð¡NpžwžëPÕVÕÐúaë‡TÃH÷H7À/«Y 6çÍ|³Þä›É/û~£/‰Ÿ$~b„ä¤ä$Èy!ç…ܿŹPúbé‹C C ÊÑ[€·Z „aŽñØœç›õ&ŸÉoê™ú±~ÒW¥¯—6¿´Ùy,V0ð1ìzd×#¦žv8ÀÜ ‡ô@´OŸ‡¦ÿ¬eh ¶Åø¡,T~6õÍ­¼,"²ø}p†œ¡ÐC*â÷ù}À>ÖƒZ¡V0Å?9ÈA ‰$’Àp.Ãê„:¡NÌhhŒ1Æ,¨t¥+ø8 V©ULQç_׋ëóm¬aDD¤©‹ÙÛ·nßzožêKþºæë8zäè¡£‡P}Ÿõ}Ú÷)÷No§·Ó ×ç\Ÿs}Ž7ŒcÀÂ}‹û÷-ï³ÞǼ¡~ |ßð}ƒ¥§~ÜþøöÇÍ­mê’èW""_ÕÀ…7/¼ =ýaùËÕkîIg£³‘éâñ⟊‚ì±ì±ì1è­ï­ï­‡öp{¸= {ö$ìS%§JN•Üßx]]äMäMäM@Ñæ¢Ò¢RxjÁ_<ñÓ·BÑÎh§z Ζ-UëÇ.©®fWóÓ…"ž­ž­"7Ÿxkà-Û±¿7íìØÙ!É—Ó/g_ÎqŸtŸtŸ¹¹¹qå¸r\9"sçÏ?w¾ˆÚ 6¨ r߸¼¼ÉX”±(c‘ˆï´ï‚ï‚HRª£ÀQ Éí›N9}ÄvL¤t¼t\D}ž2˜2øt¡ ¥9ÒF¿ªºµþÖzëØw/óåúr!¿ ¿ ¿*õJ½Rí¸v\;n­ˆ§ÅÓâiæÝÍ»›wß¿b7oܼqóä׿׿×BInInI.$N¬M¬…þÕ’Õ’Å8Nà º‘êJuývõ¾^¬ÛúmÍIO&=)Òû—šI÷¼íÙäÙ$R±¼â¹ŠçDw4îhÜ!ûÙ­Q…ªPŠØÎÙÎÙÎYñ¡¬¡¬¡,‘pf83œ)²¤tIé’R‘5çÖœ]sVdÎÞ´Š´ ‘¼@Þ;yïHºHø»ðw"ö44[¿] _ _üæªÈ—]_v‰ø*zô.`[T´€HëŠÖ¥­KE2Û2Û2ÛDÚsÚsÚs¬ÕŽjGµˆs‹s‹s‹ˆ$ ‘ 7.ܸP$ÅâNq‹Ü)¿S~§\Ä[â]é])ò§KYþöÒê¥Õl“ª‹ï^|WÄþ‡°Ö¿¹*ŠŸJÞØùÆN¸s&vJþ³.X,‚aßðàð *Øl6ÀÝew—Ý]fmÕDÏDÏDL×M×M×~üøávâíÄÛ‰@t@dCd]dŒG'G'QªWOÕS^ûz-Äü´©+n°–é+÷|,Wå2Åÿ;¦™fzþ=Ïð ¨?ª½j/€1l 3¥~ç¯÷ÿêÿÀ9æ =İécÿs«ö°«¬ª¬ ÔÇ1gVW£î¨Ô}RŸDã=.qÉr~f3‹Y@=õÔÇojPù•ˆÄcïEÑšêÖGõQ ÇtþW^I´ß:ÿƒ{W>°¯‹ö=ö`¾`ÿ âÓ;t‡_IEND®B`‚routino-3.2/web/www/routino/icons/marker-40-red.png 644 233 144 4133 13061246466 15431 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜIDATXíWmL”W>ï—|,—b\ ~¬B vu×tåÃÒ&b‹Å 555éØš‰V*°¨]KDÀm*ÈF´$n0ìFK¨ë¶ÑS[g¦8*é(Ê€È0óÎ}ösßyg¶ÕlvÏŸ™sÏ9ÏyæžçÞ›!š²bâŠk„5Â*< ,ÄLëœÖ9­3ÿ÷²*«²ú¯ʤLʦ¬–d’Iæ>ê³ZžÏë9Çí'®å£çWNåT.¶…ÆÊr§ÜÙ6,ìv »4"±q#q#q#8_t«èVÑ-`íµwÖÞггг‚>ó|^Ïñ8>ï÷l>$þ1ÔŸ{LGÅQG&ß¡ä²ä²ä2õ¦Þ¦Þ¦^í~è~è~@‚ ãÃÆ8à€Ðü@œçózŽÇñCûÍ=öl~dxAtŠNÑéø;Ⱥ”u)ë’ï6¯Ík󆀱t–ÎÒáS+ÕJµP—¨KÔ%€jRMªIçâ<Ÿ×s<ޝéoxA£&´ mB‘|H>$jýškµÆZŸI#ö.333ܾVŸÅg˜ƒ ±!“êõ°VÀP›ôOø'æð^ó^|­ž=?ì]VÀ àæiÆZãÆ|&ÞŸóáüHT•ÁWÇ U†*CKµ?°?°?ÀãŽ[­S«‡uÜþSþS€s8‡Ÿ1VÎÊÕ¨‚”¦L­óö{ûƒhövŸÝ‡Ç†*ÃÖÊùhüäòyÇ•C<ÐPÚPÚPÊÞŒûÚ|'}'uœ'úçÕ‡W^í¸jS™Ê¸üEþ"=Ö7«¾YñOâŸè‰ZÖXÖèó^î{¹rNäœÐ¯·4¶4êê\ŽQÇ( ÚBs>œŸ8R •<%OÉÓÎXmÅKx‰ˆfŠçÄsDDc-c-DDk¢ÖD™RM©DD‘½‘½DDj«Úª¿A.¿wù="¢â·ŠßÒ¯¯Ž_¯s#û§÷O'¢OB®Ÿ¥]iWÚµ#¿0@sö:{½dóˆ$I’ÎJg Ä›ŒnëØÖAD”öqÚÇDD-i-iDDžlO6Qô›Ño†4û’¾$"šÞ<½Y¿,;dMÜ&¯M^#?›"X•\—Ãå çG¢I4‰&ïO-®ýkyKiK©N‘7¾¿ñ=(‚"ðdÞͼ ¯Ô½R§ý¼¡yCpfÆ™ßßõsêçèUx/ú^t°Ní°ÖYë‚ýþyäÂÈ…íÜ&dB†÷'’–JK¥¥{«ù)KùMò‰äê\ûº»g{–{¸Yîº7Ö½¦$S–ûZîk |§|sfÏ™ _ˆ_ˆðzãë°´yi³^}5;kv(ŒtF:à~Òý$xÆ¡îW÷i{]_tݯ=R‚” %4>¦˜¼˜¼˜<"ù¢|Q¾hqj~±q™q™ZÁñýfvŠ‚VÞplpl0ä0m¶lÖŸ‡~L]“1Î'÷LÛL€Çâlq6ào¬ª¨ªãÙeW7ŸÝ|Ö?®Ü*m•¶ÞX?åG¹(Ô’?R2”EÊ"ÇI^`®4š Y®6¹_{>ô|xö{öpŸ^yz%ÜN¼ˆÿ4σw@“·É ¨¥}ßö}ÜßÓ£§¯ž¾ŠBí ­«Åê‰|!IH’5…”®içk“°IØ´ò¸`,‚…kÅ¿ÝÚcí±ö÷S­P+‚û ÀƒGx¤ó;ÊŽ¼L,—U²J-êvZœ/:_R" _¾òíÐvò}iŸ´ÏlÔ¨™ÈD&ÙäšMÙ”-¿OmÔFmD’KrI®w>ã†ã†c†c¾Xû{½&Øåzx³0   s<ðiõß÷ߨzïMïMxxáÆþåËÕ Ž/ÉÃò°õ`âÎĉ;‰D£hBG€])§ù«Àçzé¶t[º-t¥îNݺ›H)SÊ”2ëAM»ÙÆlc¶^»~³ß ¬°Â àQèΪ Ôê‚ ë—Õ/«_Ær9ž«Ä*±Î‰)ß:i¡;lô$„¹Ÿ‡ú†H%CÉP2ì:íVš+uÚõÅúbƒ„üCþ!ÿPP‹À`ˆˆ`Eš&cÄ1fÃþ0)~Æ/‚ž½ Õ‡i·èyÚõõøz|=Aå>M|šø4X<²xdñˆ:_Ób»Ô.µÿe9—Z@zá§Ós,˜À~I»G G G|±v‹Ýb·ðÀF8Ss—¹Ëܼväãòqùø@à/IÔå°¾uŠ~ÁpãÚ=÷KÚÍY•³*gUP»ÖåÖåÖåød*δI%B‰P²rohñQX_þK{žvWHÕRµTíX —T•T•T±£é“é“链ëÚ¨]’Kr™“©•Z©•׎dëAÿ£…k÷`¨Ÿóƒ°EØ"l¨€ ¨Àÿ[q–8Kœ$@ÿø ™É+Hééi~Kñô·Óß~é—nTIÓZÓÚ?w‘ ¾_ð=I>×ô\“6d`=¯×§öªžG&Œ€µÙÚl*Jâ:²bIÅ’tW×ûI[«­õ±BniÛÒF’-?¶üÈOÈàÁ?H2\." ¬çõz½_çKåGÝÿôrNÇœÓ(iµX-™ûfî›/~š(y‘,/+/#É{æ{f!‘$©Þ'9—sEI™2õ5™‚õ|²^ï×ùt~]O×Oøé,täš k6ØŽ$†Ž‘Ÿ»?wëzñV’û¹ŸsIEVd’T«Ô*ÎÂ/ü$IM¤õ¼^¯÷ë|:¿®§ë'üàéwÛPBy]|]|ÖP¯öF<-žFŠ]Ê_Ê_Ô3BÒµARWÆ”1RX„EXh,™ø` íŸx<g\»ãnRSü亿×ýMRNêϾJ^9HÚ†mÃry»äv ©Ž$KÅÏʤ2É'³ a1!&Hîã>îK1ÒÀ6´ÓN»²…Lr¿âW$) E!Ÿ°!ÁOW 7ÐK’6Ù&Ëi<Ÿð“|RçÉš/j¾ E7Ijù:±ÿKÿAÿAŠ»Ïßͺ›e^¯¼^y½’¬¬¬$oÜ(¸Q`ä5¿æ×üøaàÐÀ!²~°þZý5ŠËüi¶:_\ßš»5—äã„°®}ÆŽ}üëÙûü¨Ùy¼óx'g¤né”tŠìpv8;œdÿxÿxÿ8™¹7soæ^²ÚWí«ö‘î î î dß™¾3}g C§ëN×®#«««Éj_õëÕ¯“îß²7eoâLîð°øˆ<µøÔbRý7áG‚4ûüíËV`káÍ›-`:‚yy¬®o]®F€U¬b -Òi‹{‹½ÅÞøj}µ¾Z ûJö•ì+@äRäRäf—Zª–ª¥€í¤í¤í$à«õmóm²/æÜϹk¤prçäNÓ (¿(0e3‚ËVHð™™ÑÌÙ?g? ¼€©÷¥ o…ðTx6x6ÓcÓcÓcÀCÇCÇCà‚ .G‹-ÂÁp0²¼YÞ,¯a,<  ˆvG;¢ÆGmŽ6G›ÉÐDh"4AŠ&Ñ$šHÑ.ÚE;9•?•?•O²“ì$gjgjgjÉÐDèVè…È‹ÆG]ÉñOG¸ç“Æ^9HÚ‚¶ œFÔ€:«_JY[£­I™c¯‰eb)ZE«hM™Wvav’nºéN‰ç‹¥b))ZÅEq‘$Åb±˜ODz’ÿÕÀíÀm’´=°=ÓØÿÔK™üÊ{æ÷ÌÆä§K (’»ÕQuÔ˜ü¬æz®'E8'Αìb»H>æ4§I1.îˆ;$#ÉúµKíb\ô(!%D²UŸüI½Øÿ'ÿ³û¯|fOÏìyìÙ<Áþö0‘dQ:IEND®B`‚routino-3.2/web/www/routino/icons/limit-18.png 644 233 144 2402 13061246467 14521 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü·IDATHÇÍ–[hTW†ÿœ4É$ޢɈÁ¨`R‹J$šÁŠ¡BT0A ½ˆJ(U|Ð ŠAL)|/¥Vi`‚†¼ÈDœi”R’Z±i4ˆ7ÅV˜ÔÉeÎÙ_fÎÅRÁÇœ—ÃZ{­ÿûÏì9ël$©8{Xó¬yÖôLl}åçCkBk>ü1Ÿ¶!gCΆ?ÂŒS3NÌ<7óœ3àÇîº[ì—|ý ÏÍ«X~¢ ½ ='’Câ†E¡p&nK@aGaÇ?iØqeÇ€è…èšàù­ç·†"CðcwÝ­wû]½ ¾ÿ‡/A^W^WÎc(È/È—`Áê«~)x°êÖÖ­x–û,×X`ÿLeª‰Ã ã^bw=[ïö»z®¾Ësù?‚ÒšÒ ÖoZ¿©ðl¦aàØ[¾·ÜåMt-´0ÒÃéa»Ñnd LÂ$È!üØ]wëÝ~WÏÕwy.?ãGoïí‰OachcÈ3tì»xílt62‘]0ÎJ§Ê©Ól˜Þ/†3àô;ý~š~~&ß,6‹1à´8-L0fwÛÝ€qõ]žËWÐÐGßBáóÂçÃÀ =hŸ³ÝÙÎl?´ì0ÍEsÑ7d†ÌŽp„#~ž´Ð”²’•Î1çoH¹úYžÇÏøÉ;ý3ìlÞÙì=÷âÀ7×Ì5Ÿ—8š8š8 ç<œópŽŸ¿½åö–Û[ íNÛ¶;п¤Iÿ’ÀÄÌ=sÃxúUúUçò3~²Æ~û.%/%½ö/øÅÞmïfŒïh¥ÕnŸÝ>»}6X1+fÅ «´«´«zŸö>í} ŇŠ‚­µ[k·ÖByOyOyôF{£½ÑÀ–ÿ4±vb-cÏãgüXÒôÓo|²TªYU³*»¿Ê9«7V™U¦5iŸöI„’ôB/ôB Ÿ Ÿ Ÿ”h¤‘FÉ™ïÌwæKEÑ¢hQTªmªmªm’Êâeñ²¸”J¥R©”ü+jݵîªÀãyüŒKÊ­Ë­£RÊ»šwÕk{¥UÚ¥]¾ŽYaV˜R½UoÕ[ReCeCeƒ4òdäÉÈ)9+9+9K +¬°¤ó‘ó‘ói(9”JJ%%%cßë¦nx?ãÇ’œN§3çO)½.½Î+,•Ñ ByÊSž:÷ûÎ})Tª ÕI—ç^ž{y®TUQUQU!uOéžÒ=EÊߟ¿?¿Ô7Ò7Ò7â÷ó9ÕTx?ãÇ’†#Ñß•â×ã×½¶/e™Gæ‘Æ%¥”’T©JUúÂÓ–O[>m¹4Ǥã‰ã‰ã )އãa©äLÉ™’3ÒRk©µÔ’6lÙ0–›TŸú4îñ<~ÖÏû¾•t%ðç}]ýºúu5ŒÆFc£1??Ú>Ú>Ú/yÉKÀT˜ SI“Ƽ­ÿηòæÞÛælóç0ÆXöÃãÇ,3ËÌ20¦ÃtòE&×äSO=€Óê´ò†Ñ÷šcï1ù'œmÎ6ò¦˜b ™ƒ ØÞJ#`¦ÛtWdÎgØvÜŽõß9ù'í·rÒž.&íy,sbœl'ØÚ’7ÍËbIEND®B`‚routino-3.2/web/www/routino/icons/limit-18.0.png 644 233 144 3035 13061246472 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÒIDATHÇÍVaOSW~z[i‹4ÎÀ\⦲)&¸ ‚º] ̉ÜÜDÝüâ63ÑŒN—ÅhF–šlÓ¥ ÕÄ`6*’¸’9tJì„Q””U+“ÛvHoïyö¡½½Õ_àùÒ<ç}ßçyrÞž÷€Üä/Héyéy);¥ô}Ë›–7_ü1Û㤡ÁÐðç>2çxÎq’œÛ9·SÒ±×òÓë?]OÛG.ô ³Óì4Ô$ñA²ù•æW,¶>â!­.«+¢žûðIvî:ÍÈ@ Ÿ$'k&kHkq-_«×øÒùqð)}€œåžå6Œ’æ s@¾°ú…Õ w%î,$kkIòžñžQH$IÆï“Ìb–¨!)S¦¶¤a-žÌ×ê5>_ÓÓô~@TTdýÆúÖŽDÁÐ÷ä§EŸiz1É6¶1‹TdE&ÉxK¼…Iá’¤RÇZ\Ë×ê5>_ÓÓô~ðdo®¢¼!¶!–2tE}#fŠ™H±Où[ù›ZD¨Cê :H*cŠ_ñ“"Cdˆ ê+Ä)$D¥Ò¤41¦ÜeŲH±=ÁOn7È$&õS­” øi½m½-›È¿VýµŠŒß!IÖ‰”ÊFS “bBL<ÄC<”fä(òh¢Ú¹$ËYÎr’+XÍj’vag”«ü|ÛwÅw…$­²U–Mü3á'yRí—ÉÖÏZ?#EIª¥¯çKÏ1Ï1Š‘çFòGòu½k›®mº¶‰<2xdðÈ y³ìfÙÍ2=®îTwª;uì»á»á»Až0PŒ†‡ÃÎTv©øwÛŠm+´Ö¶_ÏÀïŸð»3_ù*u.ï; Μ?sž¥égégÒ]à.pcccdîܹÈÍöÍöÍv²¨¯¨¯¨ôîñîñîÑ -AKÐB–ºJ]¥.ré/KÝKÝäù¥/àãɶ„é¼è¼HŠ/~$HÙŸg¾¼ÛªoUߘ†9ƘmߨÚmí[ØÂ@] .P™]™]™]€}‡}‡}0ß;ß;ß „·„·„· µºk»k»ksŸ¹ÏÜ\¯¹¾öúZ`ÎhŽ1Çs÷ðOÿô±¡pŒ8FÑ—)2Åò vã·ÆoYÌj›Õˆ*@¨Ij®j®JšK6–lÂþ°?ìå=Ê{”Ø`ƒ À©ÚSµ§jÉÀd`2ä_Í¿šU7ïˆwÄ;€¬¬¬}?ûn¶9Û üw?êˆ:̯š_pÙ˜kÌe‰¡žSÏnJƒÒ P ¨·Õ!u°8,‹8[x¶ðl!P¹¤rIåàÒìK³/ÍÌuæ:sàí÷ö{ûFe(\V¸¬p ÃÁ00þÚxÅxà/óçøs€â‹/7½Ü„ ²>²0,ƒbÐpK‚$×ʵüôöôöXÜšô53§jNÙœ2`¦g¦g¦8ì9ì9ìzm½¶^w2ïdÞI j^Õ¼ªyÀºàºàº P.•Kå°r×Ê]+wÑŠhE(./.).Öç×?¬ˆ™j¥rªrŠ[î»Ýw©1º0ºðßÒoåþÖý$»µ[©~­~MN½>õîÔ»Ó=Óîi·þ§žvN;§dp"8œ E§è¤è]¢‹ í í í%űF¬!EƒxK¼E††Bã¡q õŸØâØb’ñ¤^¼uwën’ÓÚ­djެÙDúâ¾xJ¿Ž²Z¯Ö§Í±×Är±œ.á.ݨÈ™"“ä".⢴9¶“Û¹Te‘-²µLFÅ{IþÝ>¿ÏO’Ö5$›8úÄK›üJ£±Ñ¨O~ÚŸâ#¹?>Õ'?7ó¾CŠ^ñ«ø•ä^à’†&ŘÃ$#Éü‹ªEµ0&~W"JDëLì Ùhj4‘œyzò?»ßÊgöuñ̾ǞÍìÿ4’£wšÁñIEND®B`‚routino-3.2/web/www/routino/icons/limit-37.8.png 644 233 144 3061 13061246474 14670 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜæIDATHÇÍ–íOTgÆï^”Å¡ÎÌ'‡ •,ëZ“J,»ÖB …âK¤ÄÔ‘À*’u³!ìnê‡Å–fÛi\Ð/Ù-¶ iE jFÌ&j+Z´ë{DØEÐ!T, :–™qæÌóÛÃqfõðùrrÝ/×uçyιÎ# ""/Î>ŒÉÆdcR‰ÏÍŸ›¿¨-Œ÷j`(4þ{;¼°û…ÝæsKèfëy½>º_$­§ÇåE‰æ´Ïi7äÌâذtÃÒ¹¶0vœ…„®„®Ÿ‚°ùèæ£Ÿw~ÎoaüÛñoÜ9îˆ`=¯×ëý:_4¿4<¥/qÎ8§aæÄω”¼”¼—.øÏËP°¶`-€+Æ£Œ Ýæ1Oå<èëÇ(¬çgëõ~Oç×õtýð<Ölk¶¼óî;ï&|n¸yêíõv]/Ð4ÒÈ<z‚­T+Åê¬: €D°ž×ëõ~Oç×õtýð<‘£œù4Š‹!ô#@à|ðFÀ0ƒJ ¦S ¨ÿbÅŠ †‚¾ ´2­T+ͨ5#¨#ª]µóôR¡±@  ¼°ìÒÂüP|·ø.àÑõõ£¼-"ò‹fHð$x<±üyðüàyàkÖ€ÊT™ÌðWši¬X±FIzñâÂ3Ì05‘¦4¥;øˆT¶Êf†Ogùm³zº~Oxᑽ=$m©ØR¡Ó…^½™÷ý±ïc¡#Å‘‚êû°oGßpåºr]¹Ð|¼ùxóqh)j)j)‚C‡ ÀpËpËpË3;Ƶý×ö\ÛŽëŽ+Ž+¨¾×®qý‹ˆžºº%eK ðSx£º "’qL®Z°jȰÍ=æ3¤¿‘•Y—Y'/¾qqùÅåb(vww‹´™ÚLm&§ÝiwÚE&L>˜,RÞ[Þ[Þ+2Ô8Ô8Ô(OÖÉ«'¯ž¼*’ך÷eÞ—"7þx£öF­Výeõ™ÕgäñåÃÓÃÓ†tòµ¦µ&‘ÐÃÙyT‰Éf²©vpÛÜ6¸õêí×o¿û`÷šÝk ssgUg¤ïLß™¾NÇŽ;Ù‰]¡]¡]!¨rT9ªÏîTwvwvw6$''Cë±Ö£­Gáµ–¯^¾ÎnºPs¡ÀSæ)ƒÐÏÇÇU{¬aOÌXÌK¤9´=´Ý i×~²ð™œïÛtwÓ]±nrV|WñÈýÑû£÷GE,u–:Kˆ7Í›æMÙW¹¯r_¥HGFGFG†<³¦¶NmÚ*b›ØDäÀ›r䊸{Ü]î.˹—Ò^J“IãRãR±Êá_Œ%ÆPiÐ4úå÷¦K¦K"mEGÊŽ”‰5kkVnV®HgIgIg‰ˆÙköš½".Í¥¹4‘ŽÚŽÚŽZK¾%ß’/²8gqÎâß6ß6ß6‘G–G–G‘Öù­ó[独ô®ô®ôŠœJ<•x*Q$þñEñE"—Î\~ïò{b‰½{K„·4¿æ7ô‹ú‡ˆÈ•:87LœŸpN8QZ¥V©UF˜Þ?½z?øì>»Ï‰‡TH…L®›\7¹8Á N€¿Æ_㯉&&P*-0‰èq§zIõÝp÷öˆîO|$.ì+êOO|¬D•0£ÞTo«·E,bQÔÛ]O=õQØó¿(Ô¯U†ÊÕ¥zU/€zE½ÂŒš;ËÿËÁ¡Á!€„©„)O,—tÓ߯;ïúØõ±À‡agVÿ N§€}šKsÐõø±ÄÛyŸ÷£»Ã(£ ÆÔˆYóUTkÝZ7õMp"8téο>f} ðøiç~ÿ•Ïííâ¹½=Ÿ7ØÿºnÖ´ã ¥òIEND®B`‚routino-3.2/web/www/routino/icons/limit-2.6.png 644 233 144 2563 13061246471 14601 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü(IDATHÇÍ–_H”YÆß™Öu,¥qƒþu± ÄÆV¨d¤d¡[A¹C»EÔ[{UÝ´®!’´mZiÛf´Ek¥²!%VLº)(B˜J3ëÌ÷óÛ‹™ã7µuß¹ùxÎyÏó<œ÷=ïwDD$#þpÏwÏwψa÷gÞ³Ö³vqC Ÿ¶ÁµÑµñé!˜yræI€ÌúÌzõÜÁfÝÄ'îqøõ̼dˆ3‘Ü”Üä*Žã#°)S¾'+†¾)Í)Ío-ØyuçU€+箜ãîî--›uoö¾D~9òž¾$]Oºîê‡äéÉÓE {MöšE{c½‹`ýºõë§ NÓn°_^¼º˜`3‚ جÇãÍ~ÃgøžÑùðùŠD`Ö [RÎÆ6<ÿ Ì;0ÏèE›cà ք5`oµ·2 úž¾€ 8ج›x³ßð~£gôc~äÝÜV— +§WN¢Ñ°ûí~PÿX…V!Q«ßöØ´úW«qœñš×¼v þ^Wé*°Ya+ŒVÊò[~¢`Ú£@8ί+“+“Áê’„TŠˆäÔBÊpÊðÄg„'5_ëI{“½‰G¸Â•#G9ÊQÐãz\'œÃæ€Ñ#z$a¾…¼öØì„ ?‘@8†)ý¸Ÿ¸±Ó÷a×á]‡qU€+ú6úÖ9€'Iõc 'jNÔœ¨'·žÜzrËÑUªBU8¸¯¼¯¼¯ª[«[«[¡û›îòîr‡OwGïFïBÌ¢*˜Òû‰{ô#\»8ª@'˜ì²»&º&ÀñF¼(Y\²¸d1dWdWdW@wNwNwŽc(hí  +ÚV´­hƒ²—e/Ë^ÂÊ‘•#+G` yàÂÀ…©ðI½ÇèÅô·ÈŒ¶mK¾)Z]´ZD‰ˆ¸ÎÆ3<èÌÌÙW»¯v_­Èí¾Û}·ûDÒf§ÍN›-òðøÃãËÔ¸Ùq³ãf‡HïþÞý½ûE|¾_È*Ï*Ï*ˆ¯Çð¦Â“]^\ßøÌôÌtõ ‚CÁ!Sôõ·ªL•9'ѹ¼syçrÈ_š¿4)ø-¿å· Úmˆ68qç[ηœo\•«rÔ Ô Ô ÀÜιs;á΂; î,H(¯L›‰ëÇý¸EÔ5uÍõLÄ*·ÊEôŸ""âsýê¾á¾!ÒSßs¶ç¬HÉÁ’ƒ%E¶enËÜ–)rªðTá©B+ÇʱrDÞÔ¼©yS#’ÚšÚšÚ*’ž—ž—ž'²#{GöŽl‘¬ö¬ö¬v‘Á_««&/¦gô§ü¼_cvñ»5væó3Þ3ÞXÛKºË—5.k„YîYîYn¨ Õ…êBPÔSÔSÔÁ®`W° ü¥þR)¤xR<)Øîßîßîë«ÑjPͪ™Iü®±ÿßÊ¿Ì-±ÃvÂ+›ÛѯJ_¿*†¡ËC—‡.ÃpÆpÆp„ÚCí¡vMMM]¯ëu=¨Ýj·Ú ÁÜ`n0Ôj¡ZèÜJz­GÖ£©„~ìV&ô1vÀvú¨*U5Õw&™L@"DpUTNÓi:-¡áÎÑkô È®·ëúØd }´%t~«rZå4Cí`¯½Ä^ºÉN·Ó‰ê¿õ˜Cëßõ%} ø‰ÑÆc h¡‰&Ð÷uPÑ4(òû©ý°âüTz*=ìüŸì¿ò“}]|²ï±Oóû'õ!Ù(FIEND®B`‚routino-3.2/web/www/routino/icons/limit-36.8.png 644 233 144 3076 13061246474 14675 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜóIDATHÇÍ–ÛOÔgÆ¿3¨8HÑŽ36 ͤÝRØ”‰A#‚0·YÄÈ”FÜ…Ò"5ÍÚz±I·Fºµ7rÓ68š,в¥¦´4M£°xÀ¤k¥ÖZ© Ì@ÖQ`˜ùýÞÏ^ ?~¤ïÍäùžç™¼™g^Y4ý)`}Öú¬5!Š­ošõù¹ósÿp2Š}X¶[¶ÿ÷°ð“…Ÿ<]ût­~ËÄFߘŸ½/bòÏÖ3ê²HÌBlcl£Å3+áÕ—^}i¾3Št€­ÙÖü8å-å-_|úŧü\xp`Ì3æ}cÞØ7øfóKåïôE`î—s¿´Ü…Øy±óDÀµÙµùù½Ñç!ÿ•üWîÇÜQVÐF€xâ•Ä8þYØèOÏûŸÁoèúQ?ŽlG¶¼Vðš­&ºpëßp é@’¡ns˜xˆ#A­X+&ªCu`Á&6úƼ±oðü†ž¡õc^师HUìèßѺ Üù)ì »@ï ÿþ‘ð´S¥þ¬ŠTD®F®D®€®ëº®cž‡øñÏ ¥…Ãá0áȽpR8 t-Ê;~Ùñ 4ô«üIDdÅG` Ú‚Á9êïêïÎðGPi*q¾ãç@¥«t•,a Kf9ÃÎ¥”Rj–Õ„šPÀû|ȇ*[e3NÕ4¿sZÏÐïŒú~ñu’°»t÷ ¡žzkó÷­ß·BU]UMU êÚ¡kï]{ÏHHH‡ªÓU§«Nà ï ï ¯Ù×oê7õ›&î9Þs´ç(é=rýÈuÔÍ´ÞÏz?3õÔÝ®Ý.àqÔèÍ""×ßæC͇`Ð1zô¾*³ÿsá _ äµR¸]‰®DhÛÚ¶µm+äää@nYnYnd2¸Ó~§ýN»i¨}Kû–ö-àÈtd:2aWÞ®»6BÒwKK––ºêSeкºu5h¿FýX-§Ÿr>åt¯ɮήÑ’=,²Ô¼/¼øÁ‹[ø­·ËÛ%’ŸŸ/r¶ôléÙR‘߀oÀ'²8¸8¸8(’iÏ´gÚEõŽzG½Ì½\/×ËEl ¶[ƒHÞž¼·óÞYz1q$qDb'²ýïúßµÔˆxR=©"Ï‚ ¸×Y-Gc†b†H‘ôR½TdyÏsž» ’wJ|%>‘SOeÊñWû«ýÕ¦€½ÉÞdoÉòdy²<"õ—ê/Õ_é^Õ½ª{•iÌïñ{ü§8Å)"u›êrêrDÆþ7æsŠ,þ}¹}¹D¬¯[_‘†˜É˜IRDÛ²`Þ‚yªBÙ¡l8±½±¸±ÜIMNM6¯Äãóø<>ضiÛ¦m› /././Î컋ÝÅîb8Þ{¼÷x¯YÏqç¸sܰwpïàÞA³¾rdEËŠ¨ûùäÈÉ€Pu¨4gÜq?¨F«µh<<îéiý¼õs‘?ýÍ{Â{‚7e$<“ðŒL%ÜNèMèI\›¸6q­Hã†G DeŽ2G™ˆ-ÖaËI ¤Ò"ùûó÷çïÙplñ ÇDzzzEº¦º¦º¦Dìÿ²lÿXdJëOë—©[w:w:yC¤¥£¥C$fr"e"¥§{:Ç|\©pT8Ì_IdÝäØä _þzøk”¶OÛ§í3¿±vY»¬]ÿJÿJÿJÐkõZ½TŸêS}H ¤R€6ÚhƒÐžÐžÐþm¸o¸¥–‡ï†ïšzÜ«H©H1××)FnÌäÈÜh®¨¿ÏäX*`\½¥¨ *U¥ªµ^­WëgåÕ2µL-Ö°†5³ênõ²zT³º¨.¨Õj5ãjþ4ÿªþÛý·l£¶Ñà®9f$ÈHÞÂ9…s€ÃÑdVßDF#£À1mH2“Ÿ“ÔQªSWç&šhÆyÌcP÷Ô€&¦ç+´¯´¯«ó‘áÈ0Ðl$aLa 0õûärÿ+ŸØ×Åû{2_°ÿðøÃ¡’¹õ4IEND®B`‚routino-3.2/web/www/routino/icons/limit-32.7.png 644 233 144 3023 13061246473 14657 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÈIDATHÇÍ–ûOTwÆß…ke¬¸š:”¨%iÁ&´’lƒ™Æ±Õ&m¬•Á¦‘¨Ålk¢am¶H³£u7Q:ÔÉâ´Ø] ×”8„]B ÛÝ”A ^6 ` v–K1ì(33ç|?ûÃÌq¦—?Àï/sž÷û¾Ïóä\žù ˆˆˆ=þ+`Í´fZǰõw‰ú‚W¼ºæï1\«ƒe›eÛµ Hÿ$ý€%Þ%^ãf›ûfò¼H‚?YϬ‹][“­ÉâŠãà­çÞznÁ²>Ùimim¢ðîï~ÐúYëgì‡Àׯî¹î¹ Í}³ßœ7ù’ù壟é‹@Š/Åg¹¶T[ªdmÊÚ´º4Öpk5¼ñú¯ŒÏŸ§¬ O‹X¤\@ æšNÂæ~¼ßœ7ùL~SÏÔùÈØ±AÞ|ûÍ·ÓÎÄn~eŽ2‡©i*©dDƒÑ €^¬£êS}X°@›ûf¿9oò™ü¦ž©ó“x”s""U¯€{È=Æ4@äRt$òTä)0¾|ùŽHÜ©2þc ƒÞŽÞ#d„Œ¿XªG…T¥[ÃËÃˉè;#Þˆ¢31~Õ]XQXa¬z%ñ(GEDžñ@Z0-œÏÑ¡KC—€^µN­cޝè¥TºJWé@3Í4'98Æ1Ž «° 'Õç˜cî'VW«Õ+¯A\ÏÔ'æGø¯ˆHíE¿÷Î{ï˜ÃFÞÍMƒíƒíP婪®ªFùGý·ü·ôWg¯Î^…ê#ÕGªÀ`×`×`×/ïØhÞhÞhÔü»¦¯¦¼»½‡¼‡PŸêÿÔ#ÏÌÔÍÔyPº«t1?b´‰ˆ |mGÛŽÂ팙ñ™qµç‰?¥?þ4šû‚»ÑÝÙZ¶–­A³ÆYã„'VœXq\ç]ç]ç!ËåÎrƒ¿Â_á¯HëIéIéIg³À §7Žm9-"‚öÏýÏö?«öÀï/DŒù±¨í/{|™j²4ɘX¶=?›=›-Òíî°wØE~syîò\‘ºPV§‰äj¹Z®&â8Ž€H¹¯ÜWîÉÝŸ»?w¿HÙdÙdÙ¤HIKIKI‹H$3’ÉIOO9ýÓ§;E.÷Ô ÔˆÔ>Óy¦S„ßßð}ƒˆ¥8g"g‚faÚ¶‡|<}pú`⳿ÿcp,8…¾B_¡Vö®ì]Ù ×Z¯µ^k…+W® @N '€ÝÑÝÑÝQP[Ôµ¸Ìe.'îÜ”gÊ3åµ××^_{n~u£ñFcBOmÊŸÊÂKlKlÆ Ñ7?–úXªjmƒ¶þ¶­©¸©žß•—— ^ß°¾a}Øw`ß}àØáØáØ•g+ÏVž… €6¢h#0\>\>\ž˜¯î¨î¨î×\ï»ÞOÔ—ãÀ“'}q÷ânÕ$ªÞ|Çhüþ×  ö¸>~é…—^@[ø×…ž…(½Sz§ôœì?Ù²l]¶.[äääÀRëRëR+Ô—Ô—Ô—€ó”ó”óè›õÍúf(òù‹üàiðÔzjúÒôΘ¡sç&ÌØø žcµùvoÆÞŒÄWýmè^èLþeòÃÉQFQgÔAèxèxè8L:&“¸Ûr·ån ì{Às½s½s½0cÌ3°ŠU¬‚Ù‚Ùu³ë ”z1ô" ŒÆNà˘ÆÞC{™Æj/ –c)±\Q|˜cÛÕvæÔËj«Ú ¬a k’ò Dˆ_ Ö¤¥¡%¡ }XþIŽéC:@Z -œcfòkfòÍ/šü9žÌ¾èDth×u]'ÂašiF©sªA5€ú—úF}ª]µ«và e” «ûê>ÄM)2ôr½œ‡u—î2]F.-šW4ï×’ÿÑý¯|dOìyìÑ<Áþ’MK°³IEND®B`‚routino-3.2/web/www/routino/icons/limit-173.png 644 233 144 2650 13061246470 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü]IDATHÇÍVmH”Y=3Ž:S™F±&µ-Ájmšm1Ù¬«#ÖØ”´S[ýØ]úaÄ–ÄmìJE%¥«A1fŽú`#Û°¢pbÌ”Ì,'uš÷ãžý1^ßikÿwÿ ç¹ÏsÎyßç¾Ï\€´É_æ,s–yf ›4âÖõÖõ_ÕÇð94m4m|ò+™z:õ4I¦×¤×èAË}™_üñz2Ž4ä+ÉWL“ø(¹eÉ–%ÖÙ1|2@Úmc*¹§iOIz/z/ò'rðÎà’)) ,÷e¾¬—|ñü8ú}€LlIl1õ‘ÉIÉI9¿p~áÂ_b Ï’%E%E$ù2áe‚0“$©½&9ƒ3DÉ0Ôk8ËýÉ|Y/ù$¿Ô“ú1? 3Öf¬ÈÒm¥ÛlbÁ:òÀ¼ó¤žÒHò8s©†Õ0IjÛµí|OŠ€$M4‘–û2_ÖK>É/õ¤~Ì>ìíïß‘eÖ2+ÉQ’TÚI=UO%õ\åŒr†Šð‹×â5S˜ÌdRSß©ïHm‡¶CÛAªºª©)îŠ6ÑFŠ|á õQtQtý‘òLy6õÀíTÜŠ[!©K}ÄúºŠºmÀ6¶!=¤Oµæ{í¹²ZYÍqÑ(B"Dc…?h!©P¡‡+YÉJ’­¼Å[qñ?ô•úJŽ3#ÆOvgug‘œ°õÚzÃégÒØ¹6rßá}‡eµþð+>Å7E'üsýéþtràæÀÍ›ä+Ë+Ë+ Yu¢êDÕ ²Æ]ã®q“µOkŸÖ>%ûýÎ~'ÙSÙSÙSIž\u2ïdÙÙÓéŒPL¿Šé1¼oÿ¾ý²µçÚ̱÷¶â:þq¬q¬pL¹&GÂê„Õˆ^s5åj Lëº×½X÷xÐñ ãA0âqŒ8€ú‰ú‰ú  .Tª {¯í½¶÷ÐRÔRÔR8Kœ%ΠãiGoG/àZèÒ]:LsÚo´ß@ÔôELOx×|¹æËÉ6bÅu 0³ufë²o1æXæXàg0] •}ì0·x Ì-š[<·;Ãΰ°ß¶ß¶ßîáî8ë=ë=ër˜Ã®*W•« Ðʵr­È\¹ sÐ÷g_u_5ªKu!9fÄt×cŽ1?Lú!ÓSÒSô.rx`xÀøìµBu©ºÔ8…öB{¡¬¾T}©ú’ ƒ¤=`ØdÐt]qGÑv„ä&ß&ß&™åÉòdyÈδûÊ}ãLëÕ Õ‘ÒЛõfSbO WÑþ) 1MLÓݬ›u³¯ßZ¿µ~+0Ë3Ë3Ëd7g7g7µz­^«Ž$G’# ð{‹½Å@ÆÃŒÎŒNàqÓcOŽzlŒêQ~Ì@¸ \ððÌþV«ÌãnäˆD‘ˆ¨ŒLß5}×ô]@’/É—ä3Œr¹\À]á®pWq×e×e×e mCÚ†´ @jijij)°ø¯Å矶¾Ý|ó}ÉÏÝ ÚOµŸ¦üüßWɵAm0¾ÊÑU£y£yd¤+Òé2ZõæÐ›Co‘‘üH~$Ÿ-u¹º\]NÝòùIíŒÖ¤5QÚí ÉÇ“zSú1?Æ£mÐ6¶!-¤sŒÔËõrŽÇi½çû °‚¬ˆÃZh!Å!Q!ââ©^T/rœ §æXvw6ÉÈ'çØ'&¿"'¿ö\{Nr¶vP;H…‡ÙÀcÑF+­$ð|Âðolb…¸¡ej™Tx^۩팛üj™¥Ì"ßÔ“ÿ³ý¯üloŸí}ìó¼Áþ ׬¡ù¦’ IEND®B`‚routino-3.2/web/www/routino/icons/limit-25.7.png 644 233 144 3037 13061246473 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÔIDATHÇÍ–]L”WÆÿ­0éD™™´3K¢jkÚ ¥±)0M]Š, 1Í¢5 ´Ý°4i±_a¼„ĬÂ‡Š“ît6D£°%¥­…®Ý ¤Ö¶ ;Y#U˜ J‘Y©Î;ïœß^̼îîÅ^znÞ<çÿñõ•ÔW~s"†é`*5•úݰ¢uE+€ÕkõFG؈ùKëEý—òó’&‰‰”ΔNS^ï‡íOo:5#†€¹ÛÜ}7ÕŸUð©ïS5 ü’÷K$°7òz£ßÒþ²ÿ?øEàñ/ÿÒt R–¥,'_~òegm,aÜ Å¯¿ p#ùF²J}°`Qy@ˆƸµñx¾Qoô3ú|L@úKé/‰@Ék%¯™ÿ+퀽™{3 >­h¤ DB‘€^¡WpÔ€À„ ؈ùF½ÑÏèoðü1=‰¥\9ä‚mcÛÆ z @ŒŒk™Z&¨”ˆ=bG#€Ò?ÐßÑß}­¾F_ú}¾øˆùðÁDýM-¨”ž¶…mhúNÍ«y!2믾)s—¹ ‡\‰¥üFDdm3˜CæPè1öPêEõ"‹¤‰&PÔu!AL„@¡PüC9•“Å8(„8_œ?&lm³9vŽoT¾QiGŸýGÊpÝp4mhZß´åú5¿–hßµ²ke×Jh+k+k+O¹§ÜS ¾ß‚/‘wµájÃÕh9ß2Ð2Þ]Þzo=ªãÊ'?~ò#\];×>×}j_¯}¢î˜Ñù©zÞîy.üq"w"WUYþen3·q?ÿFþXþd]Ϻžuúü}þ>?8ÓœiÎ4(ö{Š=Pá«ðUø`Ú6m›¶%„õ›úMý&ÈÝœ»9w3äßÊÿ9ÿg£""Üÿú÷?¬ûaª‚/¼_x!òkLèWžð<áQ°8²8ýËç]ŸwûOõ¥õ¥ ‚M ›6-@ImImI-ØíöF(j)j)jS5§jNÕ$ò£«£«£«A?­ŸÖO'æôùêÈW°»¡jKÕ–% \;å›òç—X~@u š5Õš ¨êÙÂÙÂıÚ8ètBvovov/Ôøkü5~˜˜˜„ª™ª™ªð®ò®ò®ÛQÛQÛQèíèíèíøï5Û<Û<Û 9—s.ç\†Ño§ Á·ÔïfŸŸ}[S¬)Ñ@’jŽD L“gÙúeëE.þa´n´NÒ]ï¹Ê\e";;žÚñ”H[N[N[ŽÈTÃTÃTƒˆÃãð8<"•ÁÊ`ePÄ~É~É~IdÆ:c±ŠÌµÏµÏµËƒq"ëDÖ‰,‘ oÆÇ‹¬ËËÞž½]D¹DD$ÝtLêAIŽž‰ž1’Ô»gîžù^ä»sßÜqÑqÑÁn]´qm\ÂÝÿìé±eÚ2m™"“»&wMîéqô8z"–y˼e^¤`CÁ†‚ "Ež"O‘G¤àpÁá‚Ã"’&i’&2d² ÙDJž)YS²æÞ0{EDØ-ÖþáþaI¹B®‘ï…ƒñSÉ[ï¾õ.üÚ;•7;ýÂô 058umêjºtºpºÂ¥áÒp)h- àæÉ›'ož5¡&Ô(¯ò*/ÜÞz{ëí­€7n¸“{ç¹;ÏÁ=û½÷6¢ º3ºø{Œè›õoÖ~v윾‘ðÃWâ>R*ãï ÚU»ju\WÇ—lÞVÕªZ-laɦ&üЕnýŠ~å!ÓÇtsÐ\êcÝê‡\ìÝV½­TGÜ™ÏëÝêdd>2†a†Q4°} ¾V}ª8ËYÎwcBÔ¤Wã€ÓMºþ¾þ>ûô<=ÏP© )O.Oþ_ÎÿèÞ•ìëâ‘}=š/Ø ò¹ÒSIEND®B`‚routino-3.2/web/www/routino/icons/limit-7.png 644 233 144 1775 13061246467 14453 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܲIDATHÇÍ–AH\W†ÏŒ5*¨‰’‚‹„@ºqa ](yÒ($”„‚©KWÍÊA!«AE%Aš€4šE62qšXPº¨UB£]$ÎbD:8ê}÷ëâ½;÷™vahžÍpÎ=çÿÿ{î»g®€ˆˆ ~¢Ç£Ç£¥¾ýÚÆ › ›¾øÁ÷(ˆ´DZ~ë†ÃC‡‡ÊÆÊƼ%ë›u“®±øa>—#b'ð{áÊ©+§ ?÷ý{q(š,šükn<»ñ àéçù’‰dàƒóÁë›u“oê ^_z?âüçùÏ#BÁ¡‚C"pâ܉s'¿õþ8 /\¼ð.ï]žŽ€JÅkH“ƘòÍzoê žÁ7|†ß×#pôìѳ"Ð|µùjѨ_°4·ŽÝ:føv&»Ü¥vÓ»iuM]# :®ãDˆ€õͺÉ7õÏà>Ãï둽g{ÿK¸\x¹0'ègP¯Õk`Ó»ä]b'XÐzV¿Ð/@EUDE@µªVÕj}ý£~¢Ÿä:©m}€—Ã7|†_‚* (Y”LoÔ•<^«×JkY²|Š}”¿ï¼å3ü¾ž@؃Ÿàæ›wrŧCGàw¨WßÖ·-üjõjõj5 Î Î ÎÁXÛXÛXŒ///ÃÊÔÊÔÊ”Í×ßë!=êà|ï´å÷õ¾ƒÇ7ru_z¤‘2dÀs<Çs,Q¼6^¯…ºúºúºzhpÜdTFef*f*f*l¾Ê¨Œòû”ñû•Ãø ¿¯G ôUé+=É3É3á–ë„N»Óÿ<µ¡6Ô†õ‡§‡§‡§¡½¯½¯½/„Ò¡;t0Ï<óa¼~`†ß×#PVRVâýî{÷}.ËÒ©PÝ&›l•TRiéÔ@jª««a)¶[Š…„5é&Ýl³Íöž‡ñ]Ëïëù䎩fÕ¬š­ßïö»ý.8#Έ3úĽF¯Xc5@¡PûïXT$í¤_™}9ûRÌ]mÑoõ[Ù‘-Ù‘¬d%+"Ò)’³¸Žë¸iÉoÉoÉ·qºè¢KDÊ¥\ÊE$Oò$O$‡gñ>ÃèÙï­Dí ,Ø}®'Öë ØªÙªÙª 5 FŒàáá{ÇÆ~oåÿ0Ǻ馛³ÿ2Çö1ùñ®{×Ùa×ì8°Š)zè¡'Ä¿cÆ‚Éê÷?ùìå}]Ø÷ØÁ|Áþ ?ÃÜíÅ?¹IEND®B`‚routino-3.2/web/www/routino/icons/limit-26.4.png 644 233 144 3013 13061246473 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÀIDATHÇÍ–ïO”WÇÏÐå—(Ñ•©5À )Ù膸@àDmi-Ò­%Cª© ‚&Z\›41+Ä(F]&5bJ¦ŠŒmÓ’@º¶³‹¢ì.&`7‚–²™Î<Ïùì‹™§Ã¶ÿ€÷Í“óëû=yî=ß{DDäÅàW 쥰—ÂâvXeÈe²§^ Ø °í²íúçGßßàLpšB¶·òW׋„ðWóY~yQBŽHW¤ËV´OÀÛ¯¼ýJÔoö©[ÝÝåñCUwU7ÀõO¯J<x2°P°P!ÛŠ[ùV½…·_Nü‚_¿ ÿÒ6‘‘"ðrñËÅ) S dgÉN€Ç/<~AÃÀ˜b‰Õ`‰%¬õl•mŃùV½…gá[| uùëòEàÍwÞ|'º=Pðà N>œlñùº€Oø„Xð/ù—Œr£/è-½€ „l+nå[õž…oñYü~B[¹,"ÒR¥£¥£`øúýã¾M¾M`Îúð/Ø©j¹–iøïøýƒ`š¦iš„Ö ?ò#°Ès¯¹Ÿ¦µF-˜)|Ø-»˜µø­­ìI?ÑKÑKK¿ÑŸFûGûìݪ[Y¦›¯ø t£nÔ@I$­jä7¸àøõJ'tÐaÃcxXzwàíí‹?ÐXúቈȅÞ[½×B1÷ȡơF8ÝzúÔéSèpÅpùpyˆç¡<”‡-îw‹†Ê†Ê†ÊBq]Ð]ÍÒ,Í ùÇö}<ö1ú×äÞøÞøŸúªV…ÀÎ]øNŒ»""wÁýûøûû?äü£ûbÿ}.úÞ„ÂÈÂHH­O­O­‡¾º¾º¾:(n/n/n»Ëî²» o>o>ou>ê|Ô¹ªA»ÚÕZ¤EZi•i尿 EŸl/ØŽ7˜µÏÜÒ‘Ö‘Œúc,æbÌEuÁò½å{píòÍÏo~ý¹iWÓ®A®7×›ë…mqÛâ¶ÅAF^F^Fì©ØS±§Žé1=¦àxä×;Ùèlt6:!ùýäºä:øãÊXõƒ1*&ÏNžˆû6î[u ¾„¨„(sD«ævÌíýÀÖþ”þÈhÊhÊh‚†²†²†2¸ì¼ì¼ì„̸̎̎Tr©äR lØ0°az–{–{–C„íÇÛ·‡Ä™Ä™ÄpÔ:jµÚšr4å(ŒçLuNuò __|tü‘ø#æH˜žñú m#¶‹YY"÷k4>h”uEGŠÞ*zKÄñØ1é˜iuµºZ]"kfÖ̬™‰ÑQ‘Jw¥»Ò-²þüúóëÏ‹Lc€e»eû­?ATeT%ÀsµÏÕúî°¹nÖÏí ðÏÕ3ç%ZÁõÁõÛ,þÞ^ùöÊ%~|¢B/…^šÖὯßû éó¦Ïù=8¾q|0i›´A›ëf½ÙoòÍå—ŸÒ- Z,÷!8(8H^ÚøÒÆåüCËaKæ–L€æý0OYÀxD¡l€ 曃ÍõÙz³ßä3ùM=SßïG`qÚâ4Ø–³-'´ÆßpçP[kêi—€2ʈݥ»Œ\#¨NÕ € °¹nÖ›ý&ŸÉoê™ú~?­œ)vî߀vMÖ^Ô^ß·Ú÷Ú÷h³N•ï®oÀ7ú=ý;ý;ð¹}nŸ›ÿxð Œ?{+½•hÆÏµ|-Œm~~Êw¾µó-Ó`ù›­¼'"B]¡.×|Ž^¼ü€M Ö¨5ÌÐN ¢T”Šh aŽcã(·r«¹»é¦pâÄ  ^S¯1ƒ2ùgõL}ü~„""gì,Ü÷ξwL6ßê;šš¡üdyEyªï^ßPßP@ïæ£›n>‚Š#G*ŽÀ@ë@ë@ëC.ÿ¿¦çè9z4æ5æ6æÂ©]§Þ?õ>ª:çô¦Ó›À5æ×ƒü×ó_Õá÷cU=""¿h–Ç/g¼,2¼drtrÔ’ôËÔ7¾qP¼=Ë{–ö,ËãvljT¦V¦V¦ŠdTgTgT‹\Ž¿9^dsÕæªÍU"×ëÆuCD"%R"EÆ#Æ#Æ#D nÜ-¸+ÒöQ[V[–X:7اìS⹨½«½kI±Ùmv©óû±Z.D.‰\’¸V$í³´ÏDŒØÇÙ³-5ǤôÕÒW%8»+»/»O$®$®$®Dd(~(~(^¤¨³¨³¨S¤=§=§=G$<&<&ÜúP‚VTTc©áêºéuÓ"–?.¬ZX•¸V‹öF{}·ùt¬d¬$pì§ž¸F\#°£eGËŽXÖ±¬cYÜjºÕt« nôßè¿Ñ ŽG‚öê{õ½:è#úˆ>ØQ»Ëî²» Ï–g˳AmCmCmÄœ~áè Gá_¿iëmëe ´d-Œ‘ÑþÛbü*<( ÇèþÄý‰fž± ö§rl?WÔG?åØ.µ‹µAmU[¬`ÅœXpãfnn¹þçŠB•©OÔ' ªT³jP+ÕJfÔ_gù=848::ášÏÌ3“ßc&oÖü¬ù@©?™U‹þ£þ#Ðl†Æah@©óªNÕêQݪTó¬p Ńòª)5LùýQlt]hª]wèàŸ³ÉOÖ¼¬y€÷éävïÊgöuñ̾ǞÍìÛñ.’ÆášIEND®B`‚routino-3.2/web/www/routino/icons/ball-8.png 644 233 144 213 13061246467 14212 0‰PNG  IHDR °ÚSbKGDÿÿÿÿÿÿ X÷Ü@IDAT(Ï­’A ìÿÿó<N Qãz…5@’¤a€Wv?X‰ºà‰Ï×`åýÅ&ʉº+Ü’_vêëß7óU/?£IEND®B`‚routino-3.2/web/www/routino/icons/marker-13-grey.png 644 233 144 6174 13061246465 15633 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü 1IDATXÃ…—kP×¶Çÿ»»çíJE… B"ñ$ðA‚‰ñ”A ­’œ#¥&%‰¯*ML $bRÔ½*^‘— n Ê £åqx3 ¢ <Æ ÌLOïó°<•ÊúÒÕÝ{¯õëµÿkïÕ$))))) ö˜5Ýì… æú¸>®V&]Hºt.INNÞ¼†:Pêpj/ïÌ;óÎ~ËŒeÆ2úrƒ’/xÁ @ºÐà|€è’(I”$Š$r¹ÇÜã{9d‚L‰£ÙÉ‹“'/®nO‹M‹M‹%C¼ïÆ»‘ˆY¡ÎÊeÏÌ®Çz¬g. ©Bª*Ô™¦LS¦©üSËSËSË/õ›†LC¦¡ª;†W ¯^ñûXqFqFq~›ü6ùm"‰¢Q€ðwôwôwl÷¶÷¶ñ¶ù6sþ­ñlñm<6>ΚÁר’*©RØAö=dÛÖucÝnäNåMåMå¹:.¬ZXµ°ÊrxSצ®M]ŒÙ§Õ§Õ§•¼%I”$JaÀ§øŸB 0ØÝØ `)–b) F£‹ÑoµÖ¶Ö¶ÖRóÏ^?{ýì%   I—»ÉÝän•ZöXöXöl µ¨uù WÆ•qeµù¦iÓ´iÚu‹êuÕëª×ùõêxu¼:ž»d¯·×Ûë¡Â",Â"ðÔƒzPpèF7º,À,0‰ILð„'<ÒCzHx<Á<§Sê”:%´Eß}Wô¿Cû‹öí/Üm±L,ËîÿÈGñQ|TÈv„ !¿“u'êNÔ¼oÇÛ¿7==»Ö3Ó3Ó3“+.".".‚«€à½p_¸/܇’’BR` S˜ÈAr @€`ƒhÍ¢Y¢Ct ,e) °9l›=,°ÀenEnEnÿVwBwBwW¡(Q”(J.4rO¹§ÜÓ]~?ÉOò“þ¦S©&víBõBõB5uWç©óÔy\"èg‹J&š‰f¢˜`‚ @ê`“<Œ`#"‰H€4‘&ÒI2I&ç3.H© …’ЫKÕ¥êRîÒ¹èsÑ碩»¾T_ª/Õ ¸äÏP/êE½R¢Í¡æPs(ÖÖÖˆMöì/Ø_€X¨ê…z(‰š¨‰À ÜÀ `¢z¢z¢¸_v¿ì~Ù3 WqWçû–õ-ë[ÜÍ¿›7xððÁÃæ[æ[æ[@(Ê…r(í³ì³ì³ k k kÂ& >|6øì¹ËÊ­Ê­Ê­$3J¥ˆRS¢Qˆ(„ˆˆˆˆÀXF-£–QÀÌ›y3\ö¾ì}ÙÐvi»´]€ß^¿½~{Ù ?…ÿþS8Pò{Éï%¿ƒ†A਋­‹­‹ˆq"NÀ‹1/Ƽ3÷™Ä±É±É±‰¼ÓìÔìÔì„/ŒÁÆ`c𲽜qÜ8nÇk"ÖD¬‰@¢ì–ì–ì –k–k–k³‘l$ ôõõ…–BK¡Ð/×/×/ÖŽ®];:ŸPãÛÆ·oÕ.Õ.Õ.@仑ïF¾ „l Ù²øÕ÷Wß_}Ò¤Ò¤Ò$ älÈÙ³€¸EÜ"n'ûZöµìkV¾ºòÕ•¯"±q¼q¼q§œÀ œ ^Ìæ se.ž„,%KÉÒy€+&VL [¶$l>³“ÙÉìpçpŽx1¬3ëÌ:Ó} >Pˆ^þ„?–‘2RF ŠR”¢h%Z‰P¸*\®÷÷÷@}¨õ™e´Œ–ÑÞ‘Þ‘Þ‘€°YØ,l ~+ø­à7 #¼#¼#¥ˆRD)Žâ(Žð†7¼Amß;Õ8Õ8Õˆ^FŨ-`¤_J¿”~Égô.î]Ü»˜´d·d·dÏMœ¦Ûè6º  ÷è=z©@*ä!ÏdtfÝ̺™u@[g[g['à°ÏaŸÃ> E“¢Iчƶ]m»ÚvćøLkR5©šT@3¨Ô â+i¯´WÚËg0PC ur—Ä%qI$±Ú±Ú±ÚÑ¢Ò½¬{Y÷2äÄLÌÄ =vavÍ‘R@ ÒKzIï3}Ïøžñ= 70707hNiNiNyf^;i'í×Ì5sÍ€Ä 1H 0Z_˯‹¯‹¯‹…õDC4Dƒÿ"b!–\1³äæ’›Kn~~L&‡å Œùùù³Ú¢#EGŠŽXY(i4¦Ñsa —ÍesY`]̺˜u1 î…î…î…k‹µÅZÁðhÑ£E1·Å߈¿ó¯íæ~s¿¹ÿ°™püÁñêQúe™¢aѰh¸N6Y>Y>Yî·Q¶Q¶QF7DFF’›VÚw»ïvßmú˜>¦U´*Z ApwpP(”ÀÈW#_|8Å;Å;ÅËùåür†–¼–¼–<üí↋.nÀu9'çäÜLøì æ÷7¬Â*¬êØÇ09L“Ã60§™ÓÌéÁ=BгÇ$¯•×ÊkZU­ªVE½[?ný¸õc\¶‚N»Æ»Æ»Æ?h³ð~ ‚ *ÀEï¢wÑ~é~é~és€zýIýIýIÈg¥Î«Äöb{±=@ž'äÉ1‘ Ô±È@çbmó,³}#—BÎ3äÌÍLÆ„.CâÇœ-7•›ÊMü~ÝÝÝÈÉ]r—Ü…^¸&\®=º«±@ jPÐxOãÁYpœç¤£üñú×¼n94Ñ6Ñ6ÑÆeJì$v»Ëižéžéžéé7Œd$“|ô =üF[?ª@?úÑÏ·# H ekJÖ”¬)ÉxGú¡ôC釗Ó&–L,™XÂéŠÆŠÆŠÆæµK’‡ä!ŒhE+Za„À ¬À YÈB(SÃÔ05ÜÒÜÒÜÒÐ õB½P/° …B¡P ̘òMù¦üO>oOnOnO¨†j¨vÖ8çm ëõа@X ,€]ó£æGÍS‚)Á”ðÉç …ƒÂ¡ïJWyWyW9›Q¹­r[å6º ÈH„‹ÂEá"(dAЧô)} žð„Çô¨fT3ªÁå*ß*ß*_Ø)†CŠ!@…ÀO>Ÿ•ÞÀŒUŠ™ÖRˆ˜;€l+fý%‘ØŠÚºïf  U¨²"ëÉz²~Ã;³¿7®š÷›÷›÷ b„ ö9ísÚç4¢„N¡S脜YŬbVÁÈ'ò‰|"$ß{|ïñ½‡Ås(h(h(ˆí–úJ}¥¾-šÃ·…,!KÈâ2­+ûÛŠ¥¥¥¥¥¥AoË(¬æ4dÕî!«v3­Ú-ýíšËÍåf~¿.[—­Ë†œa†aðÔ–‰êéêéêiÁ055ÅvKIIµWƒÆÁcéÝot¿Ñý`TÙöSà܉‡çì¹r«ƒZµ{õ?´ë<á<áÌé “ “ “,‡¬½]«c«c«#þ§¶¡¶¡¶ìwÊ;倠T‚êïuÜûÜûÜûÓ¯º¸¸0ãÖxoÛv•ç¹Xü…†††††‚·Þ¶R1S1ùhhõÐê¡ÕøoË Ë ËŠ;¼Ä]â.qïìÈÆ‘#Ktº]ýºù|óùæó–×&Í“æI3› ‹‚¸ÐlšM³ÿ·H aµÇ8Æ[û#±&Šž‡àOì´›ŠJT¢Ò’LËh- íaŠ™b¦¸Æ}&r&r&RX-Êe‰²˜6Žcã~þţأأxs¨¦GÓ£é!ÿ'¼ ¼ ¼@s­~Ë­€†?â`ð'öœv­Û…%p¸{$–Ä’Øÿ÷ •´’VÝ-[)[)[Ét°ýl?Û?¸R8%œNíÔ¹½s{çv`îV¶ÆrúÏ8þ V¼ÒyjvÔoIEND®B`‚routino-3.2/web/www/routino/icons/marker-XXX-grey.png 644 233 144 6011 13061246467 16067 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ¾IDATXÃ…—P”ÕþÇßç<Ëî²»òÓ¶ù¡…ÙWÖÂo6ƒÝ”®kãdb¤ëì6Œ’IÂ…©´®ß`ðŽ~mÔ„‚A!!ê‚’7è"…üpwQ p—_ËþxöœïìMwšÎ?ÏœÏçý:Ÿó~Î9ÉÉÉÉÉÉæ‹eþA7ÈîÊîÊîò†œÏr>ËùŒæý’÷KÞ/›žà¾Ü—û~ôQ+jEíÚ7ìµöZ{-?†Ó8Ó$ ‘ˆD$€~ô£ÀxoðcŠ­Š­Š­$K6"‘üû4131¿SšÐÔ“ŸœŸœŸLFÅ1D !‰ó캛ˇ.Æ 1´Œå±<–Ç®;f³ŽÙeÑyuyuyueƒŽQǨc´ñ_Ö§­O[Ÿ^û¶ºH]¤.ÂÕµñkãׯ“,‡ÎCçDûEûEûR]ê—ÆKïKñâ»õ$}‰G⓹3ø÷â^Ü‹í&{É^²7¤HB„æ3³f/Ì^xÜϿѿѿÑu0¾?¾?¾Ÿ:£º£º£ºÉKŠ,E–" V¼‹wñ.T°Â +€×ñ:^ðÁ#°ÚƒìAö ¼ÔÝÚÝÚÝÊ_G~ùu$;8ñâÄ‹/îúD¢ Q…¬Wºöºöºön,â©<•§ÞÝM@@@Ÿ“±Ãì0;Ìn ­h Z"ÓÈ42Ms˜cÒ1é˜|üVÄæˆÍ›Å}­¾V_++óñóñóñÃ'<‚Gðˆ®‡®‡®‡P'q'@tDGtl°ÁðA>È¡’;åN¹b´2Z­$³+l+l+lÂ@ÕæªÍU›Å˜–––ÇoÉ5r\Ó\/ΉsâÜóKøa~˜¾A=;<;<;@@Àÿi­·Ö[ëߪՇêÅ—R“S“S“e7}T>*–²nÖͺ¢$J¢„LØ l64‰&Ñ$€‰‘ÒFÚH@£hZÏíÜÎí€÷¤÷¤÷$–Jñ%=I_â‘ø¨8#Έ3‰ÑŽG£&ù¿üõþz=Ó—ëËõå2É#SüMþ&^´—öÒ^ ·¨·¨·0d² ٯ嵼ÀQÅQÁF0à4:N#Ð5Ò5Ò5 ¥¥¥„J(¼¤ø’ž¤/ñH|”GòHù·?;c±ÎX ®3®3®ñ>ç|Îùœƒœ5°Ö¯ysx¯âU`èÓ¡O‡> )<ô}×÷]ßw€Û« 嫬¯²¾ÊÊ2Ë2Ë2[ -иØïJq¥¸Rà%éIúÄGÅ01L {fŸï¸ï¸ï8Ž­Ž]»:–»ãÈií¡=™&ÓdzQ á^½„{Àš’5%kJ€Ê¦Ê¦Ê&€-gËÙrà.»Ëî2 ÅÚbm±/ïyÿËûˆ#>Œøà¼ƒwB$-„•KúćC“‡&M²ceëËÖ—­çR™eé,¥sÎgø ŸYhçl˜ ³áÅúXÓXÓXçYíYíYíœ_¹4ri„óÂÊÂÊÂJÎO½uê­SoqÎ<˜óàœwòNÞÉ9¯âU¼Šsnáná|AÏ­/ñH|à|@"i­  3S 5¨ †j"Dˆy”÷´,G–#Ë!YM~M~M~®PËË˨¨†j¨Sü'þÿ Z¢%ÚEÝjGµ£Úh ƒÆl{oÛ{ÛÞ’4Iš$ p[¸-Ü€¶¤¶¤¶$`xOà ©!5¤vq·¸[Ü Õãã#‹qïÇÿG\ÄE\gä4ð›Ào¿9š-“ÇÉã. ODODOD U™U™U™®n/žÂSx ì’§®©®©®©€Û«o¯¾½зè[ô-€0#Ì3@¤w¤w¤7ð|ÜóqÏÇíííÀ`Õ`Õ`@LÄDLàX‚%XEíûµï׾ϬÇ/_¤7å…òByáO;œƒÎAçàA'®®®œß:¿u~ûΗêMêMêM÷Îô_ê¿ÔI(¨ªªâ/Ðèô(l)¶[ øÄɉ“'W’_I~%X•¶*mUÀy#o\ÌxâTâTâ óÔyê<“Ùd6™ºçºJ»J»Jñ§›Ú›Ú›ZªòÔzj=µ¶Y ‹a1;â…ËÂeáòÜ2=MOÓÓBшÆûºù{OªZU­ªÖf\?qýÄõüÉÇìÙ³“‹Qg£ÎFÅÖ»vîÚ¹ *RNÊI9€}؇})!%¤@:Ðhhh{‚÷ï –®}˜šVM«¦Uðª7×›ëÍb¨|L>&“؈ز‘ˆÄÞÿἀȂÜ×<—n>€ìo¤ˆ‘¢oöÓ8GãÖ"©H¥ÿ¨Cê ¦YÎYÎYÎ-N±³ì,; ùÈÿÕG£ƒ:Ó˜Æ4ÀV²•lå¾áuõÈÕ#W¸˜ß6¿m~[vB®W„_Ì8q,âØ'ÍÈE.rÉ¥yO‹¥û¨ƒĠ؃ d ƒÔ>ñÅ_<ñEA’rŸrŸrßÅ|s€9À ³TÍVÍVÍ.z—L’I2 ;Æ1Žqs˜ÃÜ"/oæÍ¼œž¢§è)(ÚzÚzÚzø íµíµíµB:P¨¶9.8.8.:Ú“Û“Û“ p#7r#¼ÝaÎK V÷³‚i˜†iàÝõs×Ï]?Ž G†#ãÐQµ¯ÚWí{·¢ÿJÿ•þ+BAÃö†í Ûù $ƒd (Øçìsö98<á O€OòI> ‘ˆDÄܘqÌ8fÄÅF]£®Qoõ¨zT= °ul[wè(=NÓãÃ6·O¸§™(Dš¹û—Dᮺ—H(˜÷®ë‰!1$æ…¤ù_Žæ/iÎ4gûë.¶‹íbtCÔñ¨ãQDZ•õ±>Ö]IWÒ•°‹Yb–˜ÅÉð“á'Ã]£ÏŽ>;ú¬pGù”ò)åSë¹À.¼ÉŠY1+–p¯ì[ÒŠåçççççcJÊ(Ü r{÷€Û»'ÜÞ­ùï:ëœuN1ÍRj)µ”BE)¥”bRÊDÓ\Ó\Ó³ w”ÙÊlevÏUû}û}ûýìOî$ÜI¸“¸CÝï©$@‰oô7ÀÒ•;À ·w¿üïjÍZ³Vf¹œs9çrŽë"xwûuûuûá\kGkGkÙ­êSõ©úÊBYè_¯ËvÊvÊvÎýw˜.L¦£Ýz’¶­ßr ø Ñ]íær.çr’>ºjtÕè*œu»‚]ÁÿaŠ0Eض<Øø`ãƒ~_Xz-½–^þ¿]ç»Îww=7ãœqÎ8… <6dñR^ÊK˯ÎÂÀüYÏ‘VÀ(ñ·<P~Ç»yh@\¹ó7ûX­¦Õ´úÛ0ÛÛ۶ʣأأ˜ö ©BªúuKxuxuxõ¦X£Áh0ÈWl[Æ–ñ3î¸un@ëïqPüAùwÝÛ…+û±ûeÿ&É$™$ÿ3œ7ðÞðÎëžË=—{.§½Â 0( Þ_Î>b±Ò~îÛÑ·£o0ˆ0w<éb9÷GÿŸ¹2ÝHi/IEND®B`‚routino-3.2/web/www/routino/icons/marker-52-red.png 644 233 144 4243 13061246466 15436 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜXIDATXí—LTWÇÏû1vd+ÊàVñG•)†."©òÃH—N£mP[±…h¦]A›&´dSˆ–U6KŠjªÍ„Ž3ˆ]S†ú£¤Ùúckâ¦ÄRaˆŒ aeÐaÞ›÷Ý?˜ûæÍ$«ÙìžàÜsÏ9Ÿwï÷Þ›!š±ÙeüÚ8Wœ+ÎÅ= $ÍêšÕ5««8W”EY”þšVÒJZ Ì„•I$‘ù@´¯4°ù,ŸÕcõ£ûñk£y´|ÕTMÕ¼3:>w™Ø%v‰]Î1n·‡Û£‚è ã†qÃ8ÎoèÛз¡Ø8´qhãP–_–_–ñYœÍgù¬«Ïú=›‡ø5ÑþÂf~‚Ÿà'W²J«L«L«”÷ë9Ös¬GyÁ÷Ð÷Ð÷€üx‚'x`ƒT?góY>«ÇêG÷[Øül>2&óÞÃ{/°ù×ò¯å_“V‚A lŠI1)&Hr­\+×r¶œ-gr©\*—jüpœÍgù¬«¯Gõ7&«hœ“srN"ñ€x@<Ðv›%˜Ì5æ©Tû8´*´ >©mÊ1å”AéUéUÓr¦œ Ì á ® bÓ¡¡€2ü-ø µ¶¶ÊÇJ‚’›fn0×™ë¤RÖŸñ0>ÒÝ×Ý×ÝÿãØc½±ÞX¯d¸GÝ£îQ<×ñɇäeò2 €¾H@A­«ð èB_t\>$$C¤š{tpÎà<6Ö?3~¦d0•OÜ-îw_?ÀG+ŽV­Pv† ø%'«õ`öƒÙmÁ¶ 8‡Ãà(q”Àé±Óc0ýæô›Zà_rÉ€ãK/8òüInn$§ü“ü“:ÙÏú«+ÅGŠ×iÈ4d¢a¬xÌ2feR™„„töÍ­_µ~Ìœ{ˆ-þ5­Ÿœ—œòùœâNqÚ¸Áh0j|ŸµÊZ = …TPi¬øaçÃN€ñ0>ú—õ‡×^8òeòÀtöt6/²ÊVÖÎ[;ü_ø¿€QÓ¨ p —@yª<€Œ¼Œ<xïƒ÷>Юð­¶[m`ï™/Ï| ÈÚ9ð3ÆÇ‡Ô2EgÑYÔ3G;ÈHF"šÃ†„…ÂB"¢‡&"šÝ:»•ˆ(Ôa""ê|¿ó}"".‘K$"2¿e~‹ˆh×½]÷´7K<â¡uÅ5â"²G]?qºv]»®]=òì~UÊs›r›r›Ð?ÅM6M6è@;Ú¡`;ÛúâŒâ °öX{à¬ç¬¬«E»Å¿Þûõžvq}>h,j,€ä–äêEÕ‹ü>zYÊGÊGPXV~J~J~ úñ¥|)_ 4œ¨>‘{"W#ø©¡©!˜²NYµ ã¶q›´ãvÇm³Ùà•#¯€ôòôr’]²K ä(9€|J¾%ߊô»Üx¹ñr£úîⲸ,.+8BBŽ#äÔd§,ý÷i}i}òB÷&ÏÛž·`¢x¢>¥(±(±m;´ ˆ|{ˇ-ŸÆ§ÀÝ×ï¾æs¬~°úŒ~;ú-8í‰ò‰rŽGðc*~*ȬÉ,É, ©€0W˜+Ìm}LI–$K’…H¼*^¯:<ê…_VTQT!ïe8![\##WxåüÂNa§v%?ÝøéFÇEH&€Oäøf]uÀc¾Š¯B­DDP€3#gF€Ê›{·ìÝò«€;„ÂŽmžñ¼miGtY:“Î4xœ%Øj÷}³ï¥H½?Rn.¸¹ p¼ùx3ßÕwVk¥ð4åi t,éX `·Ûí`Éþ Wœè?ѧ ÿɉF}£o¨OèAn·iª˜›ÇÍãæ-?(üS=_[¹2®l] çà¾ã¾cZ ýÉÕ}òÊÉ+p©ÚÝZZ®=3JR°Ã®•dÈ€R¤8õñ€Ïãðvz;ôøÅ–Åi·º’Ÿ‹/Š/ÚÌ*Z)•R©hŒ°PˆŸ““œä$¼‚Gðìû»ú´¶sŒ9’ÞýÉ@Ý@]¤¡R$µJ­`Íhà—·È[¸¤©P6K‹¤E(D!°åÆ;†w ò^õz"ºE·«.µ*µ*µŠˆ7ófÞÌ ÓU0ÌÄðßÍB¿Ð/ôsç2ögìÏØO¤«ÔUê*]uªv Ìæ­vC¶ ¸à‚ À#<£·¼T^*/¬oÓª¦UM«”"õ-×ëô:½gjÆ7ÆGï4w1f뉋qˆöñº,]–.Ë}*¢][­­V£]½¤—ô Ðph84¹vzÑ‹^À•ЛЛЫlP5™Ä'ñIïþ9FŠGbøâèÙB“F»[¹­ë6pÎÁ9´Úuu»º#Ú•º¥n©;¢ÜÉÔÉÔÉT`ÅøŠñãòU‹íB»Ðþ·<&µ°ôbGϱÈV ¢]¯àÕh·ÑØhl”ôn‡Ûáv €Æ©íœíœí\äÚ[ı¥7ü“$á1}ÃãôÂóc%¼ÖîÙÿ¤ÝBk¡µÐÑ®+Ï•çʃ}&®¨;Á•så\ùºšè6ü£˜¾ý—ö<í® …ƒƒÙ ¸¼¾¼¾¼^ù«iÚ4mš–î¨[í¼‚×–FmÔFm¾vwL¿8ú-V»uÑ~á=n·ÛP •PIèe~>?ŸŸpÄGßÿîO÷§û‰„ëÂuá:w)œ¸9fçþo¦Wÿ³…,âíèð'¼Â+¼p¹‹ÜÅ fÆ»bvf ¦îs·úߣZó‘ê>IEND®B`‚routino-3.2/web/www/routino/icons/limit-4.9.png 644 233 144 2513 13061246471 14601 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]H”YÇŸWGÁlýØÊP4P$Á jº˶(Æ­¤0–E¢Ý«ÍXh#»Õ‚­ /Úİ-jUJê6+Lú`E kuQ³ÒÂ/f5ÛqÞóžß^̼3ÓÚîµÏÍËÿœÿyþÿóõ¼G@DD> }ìëìëìIAl¯Ž´Çïˆß‘ók7)°•ÙÊžþ«Ï¯>ÜœÜl>‹`«ßâG‰äÖ³ÚåS‰48®;®ÛŠBøì+ØWÿY7܃„Ž„ŽwÔܨ¹ÐÞÒÞ˜|0ù`®h®"Øê·øÖx+_t~9õ/}ˆ½{Ë6Ž8GœdnÏÜžýmðg6”ì.Ù ð*æUŒ¶€šIÔEÀ<óX1…­þßoå³ò[z–~Ð@š;Í-¥•¥• ƒžµÂÑŒ£–^ ¨§žD0æyuPÄúž¾€ D°Õoñ­ñV>+¿¥géýȇ{ÛX ññaCÝü¥n«Ûf»ÙN@çé2]†6]æs‘˜e–Ù4梹Ƭr*'Zcô½@ù”X å§ÂQá° 6Gm¥ˆHÞÏ0™09ÿ ©!ü À.0ÌÉ£‚ Ðýú±~ehŠ)¦"PÚÐp’“œŒâ}E À—겺´ìÂ?´8´ý Ÿ±¦ûà=á=ÌBP)*ôº\—£­üÃÞaï°»æîš(C¢EKä ä äÁ¹Mç6Û#Ã#OGžFèúIàNàNx} Ãú!?!c¿W|W|À€þšJ#`ðó½ô‚.ÖźÖW¯¯^_ ÅmÅmÅm,‹ÁCƒ‡AŽ/Ç—ãƒ-•[*·TBanana.LçOgMg…é~}?¤gé‡üØE’º’º\Ÿ‹¸·¹·‰H»ˆˆí¢ÆìÙ+É—¸DjKkKkKEüñþx¼HjSjSj“,‹žØžØžXg®3×™+Ò}µûj÷U‘8Gœ#Î!ÒYßy¶ól˜îп„ô,}Ë$¯J^eÂôëé× Â×€w‹»Å éoÓߦ¿…ªÃU‡«CΙœ39g`¤¤¤?²bã5ã5ã5Pp¬àXÁ1Ø™½3{g6Ä5Æ5Æ5BëÚÖµ­k#|å¶ô‚ú–»ˆÙivÚEŒ=ÆÛ÷""’fMÉžfOµ§ŠlTÕF%Ò×Ù×Ù×)òÒûÒûÒ+2àðxEæççEFFFEòKòKòKD¶¶mmÛÚ&’R—R—R'’ݑݞÝYa›ËÒ ê‡ý,;cX{®.©KøU­:¢ŽDfØ|¡ùBó(?]~ºü40Ì0Ãàr»Ü.7¼p¼p¼p€'Ó“éÉ„ g†3à µkÖ>Œ:ŒUøùíãglù­\ßÊ<•Ú©]Ú…6GÍçæsxŸõ>ë}øÊ}å¾rÐI:I'ÁŒgÆ3ãnr“›°äYò,yàÍÄ›‰7 ûô#ýèaœq4 ÆBtøè­ü ŽCFx^»X2÷›ûYd&ÔòŽ9æF ,'ŠÍlf3èú€>UN6èJ] ü¨&ÔDT3†üCþÿ¬cÿSùªKu˜ÇÍã¨ã×Ф“B `¢P Çô˜–ðã~¢žzÐôœžCóÄ,0 €êU½€ Wþ޲ʿbÿ•+öu±bßc+óûeŒ :^Ç¿WIEND®B`‚routino-3.2/web/www/routino/icons/limit-199.png 644 233 144 2704 13061246471 14613 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜyIDATHÇÍ–oh“WÆOR›6PÿÌ®¥Ò—·é‡eTѪ­”Êd"U§ ™«°ÓYAW+â´bûAA*µj ‘ù§SÅvfØlC¶¦ƒf†ÌhKiËbbÞ÷½¿}Hß¼qnß½_¹çœçyîyÏ=¹""2kêWÀ^b/±ÏHÛö­ýüÚüÚ×.§í3:Ø6Ø6üvf¶Íl(<_xÞøÝ²M¿Ÿ/bágó™û2K¬<žß¶rÊ> ›ÞØôF¾+mçUçÕ¿5Øy}çu€¯;¾îàcxÒ÷¤`låØJ°lÓoÆ›ù&^6¾þ¿äÞ̽i„“?­Gžÿ¶'j`cþÆ|` uŒ™ÆL0ªRRH©ʧ|(S²1jŒ# j£Ú(¨ÔNµ3SAŒqU¤ŠPÚè³uÏÖ‘RŸhÕZuæÀ÷xúžþž(“_²yNc8£Îèä40Œ îZ=’ZšZJ\]R¿ª_-B5¦ÆÔÐDMÖ>-´Ðj•Z¥Vi§=ËÿÞ£÷guÂ¥áR étNN3õL ;ó=4l8˜9ç"u7õMêKGðHð`ð D<OÄcñô÷÷C«»ÕÝê†GãÆgùãýñþ8´¾Ýúfë› G⑸UqõCšÏâOë™öóçüäûÖ÷-Рv€1fŒ‘ôÏõø çFΜpmíµµ×ÖBìXìXìÌ_<ñüÅP¹¹rsåf¨,¯,¯,‡»]w»îvç¨ç¨ç(,)]Rº¤½¾¨dQ ŒTÄîÇ’·CývùÞå{¦°Ÿ?·‹ÌønÆw‹ß‘¿«¼U^ùDDÄÖN>ƒ JžÄd\ÆEf̘= âÜîÜîÜ.j5„D\ ] ] EB¾/ä),+,+,Ùß²¿e‹ˆ;ꎺ£"}C}C}C"Ž<Ç,Ç,‘îæ[Wn]‘¼tCÙÚÕùeCˆD2z pzátã!ŒDG¢Öµ×WkoioYŸ¤Ú_í¯öCGWGWG$ªÕ‰j(”ʰ¦mMÛš6(¸Sp§à4ëÍz³ˇ—/†š]5»jvã„ã„ã\|µÓÑéÈâÛô×Ò¿–‚©gšˆÑmtÛŠÒê´:©»ü"¿ÈÉ•ÇòX2KEUTEEì=ö{H¢$Q’(©8Tq¨âˆ×åuy]"áÝáÝáÝ"E¢@Q@Äír»Ü.‘¹ räŠ<8ô éA“HYOÙñ²ãø96¶OÛ'"bL7¦ÛZ=†oÜ—iZµCßólî³¹f@Ý¥ºKu— ólçÙγV%kºkºkº¡x^ñ¼âyÐj 5†àiÕÓª§UP{®ö\í9(‹ƒ°÷ǽ½{{3éIÞŸêék¾_‡Õcÿ{+¹©ù4Ÿu+'–Mx'¼$‰€%,y2y2ybF̈ Ž¨#êH–?œ 'ÃKÆ&b úÕˆAÒnk·³øR /ÜJÏip>q>™œú€nÍ10¶Ûˆ[µ›Z^¼xAmQ[Ô–¬ùV¯êU=¨^Õ«zA}¡>SŸeùjǵãÄ9š™c¯„_4çcçãæØLþ”9ùõˆ\ú>})à#kòÓÄ—| *¤B*„è£/ë‡ñãG©^®—“â¾~J?•5ù¹sÍJ=7ù_ÚÿÊ—öuñÒ¾Ç^Îì?6hŽ å’IEND®B`‚routino-3.2/web/www/routino/icons/marker-87-grey.png 644 233 144 6246 13061246467 15650 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü [IDATXÃ…—kPTǶÇÿ½góâÀ0QÑ ŒŒC ê¨jâ#Ê#'&¤¨¤bLQ’k4‚•’xB Œ”Ô½ xð…†!B|—‚ñ¢¼®èApfØÓ}>0©œJe}éZ½»×úU¯÷î&ééééééPbÚÌÓ ·Ž¿ÏßçﳪôïÓ¿OÿžÍÏÌÌÜļ˜óúì]a°@X°<Á^f/³—±lœÂ)œ"¡…Zè@€$ eK¢$Q’(rÄ?âÝ:EFÈ9p2Ã;Ã;ûæ^V\V\V1 þ‚¿àO¶NsÐz'—’› C¸Ó4“fÒLZ?i™´LZæ­È,Ï,Ï,?Ý7iš4MšªoZC­¡ÖÐåÿ¥ÈUä*rqyù¦å›–o"ubX'V¨V¨V¨—ïúîïšïŠ7ߙϕßÅãâã+¸–y0æAcI<‰'ñþ¹"‘¿Èÿj¡¥ØRl)öS=SýLõ3ÕŽÔM›:6upS!­!­!­d»ä ä ä ¬øá#Èa…Voãm¼ àY<‹gaµûØ}ì>ØÞZ×Z×ZǦ~Òþ¤ýIKS‡_~yøå7¿”ûËýåþk¤ŽxG¼#~c.303Ü% àÖ’C‡&M¨Cê|þ—ñe|YÝ™IÛ¤mÒæ·M½A½A½AÛùÞÎ÷v¾ÇŸVŽ)Ç”cPcæ`¦a¦Nt¢€;Üáà)žâ)€ÅXŒÅé"]¤ †0„!ðf³‡Ù=¾¾ðõ…¯…ØžÚžÚžZ¾ÑMæ&s“õV QB”µ~Öc=Ö?çdͲfY3 ž/ž/žÿÖJk¥µÒo›z§z§z§°Ýgˆ3ÄñJo¥·ÒsõŽzG=@ch Ox …¤ä¹En@´¡ mÍ 4¼Ð 4 €g²g²g2æ¸â«_S¿¦~MØîÊïâqñ‘̪̪̪­+&›'›'›+›=Æ=Æ=ÆY@bbb?iVžVžVžGµTKµðà¹F®€¼à…YKB’€™Í”ŠT¤ @Àƒÿ›ñ¡E(€Û¸Û3‡™ÃÌa [ ¶laº1·1·17btÓ¹éÜtÛt<Ó2-ÓÞ1¥˜RL)€ð#áGÂ`“òGåÊáFhM€œëà:¸`(p(p(è/ì/ì/äaò0y ™«™«™ T’JRöÈöÈöHÀUÃ1H'é$[Æ–±eÀsï<÷ÎsïÀCÕ¨jT5ª/Ðè °©4¨4¨4ûˆ}Ä>‡wðB€ ¬Jô:ïuÞë<²—è—è—èI>F1ŠQÜ)îw hílílíÎì=³÷Ì^@:"‘Ž)))@Àñ€ãÇ˜æ˜æ˜fà‡Š*~¨,¯[^·¼ð‰|"Ÿ±0;; $=Iz’ôPAࢠQ…¨Hþµ¡kC׆m ·„[ÂW%bÿèþÑý£4ûôšÓkN¯a.³  ÏøìÄÅO\d,¯?¯?¯¶ðÊà•Á+Œ}PþAùåŒÝ­¹[s·fö»u™u™uÙ¬®ò\å¹JƾuÿÖý[÷Ù~º†®¡¿ÉïâqñqøŸà¢åÎrg¹³3 ’€ÍJjÕŽU;Ví‡<yõõõç¢ÏEŸ‹´ñÚxm<à×ÿ®ÿÝÙy²[²[²[€ñUã«ÆWî î î º'º'ºgvS2%SÎæçÞâÞâÞP€-'Z Z ZÀέ[9¶ÝB²,$CÄ qCÜÐ,êðÃá‡Ã:—Î¥s»¯Ý×î Ømv›Ý ………ö}ö}ö}ø»òÕ•¯®|¼Xübñ‹Å€j®j®j.À‚X ¸®…k™É'²übùÅò º95§æÔì'ý\ú¹ôs!§Û»Û»Û›k™ß2¿e>@¾!ßo`›ð›ð›ðj“j“j“€í%ÛK¶—ÎÀ8 •¥²Tȯʯʯ•••³€móÚæµÍ=.z\„ña|Øov?Û¶°-0€Øz"{"{"ã€qÀ8€/¤ÝÒni·Ãc'vbgÆ)>‚à#þñ÷ßß_‡zQö¢ìEÙ¢e¯²WÙ‹1÷R÷R÷Rx˜ŠMŦb:è †O Ÿ>Œ_¿4~ Öë‚uÌ0à üÜósÏÏ=€ñ!>P*” ¥`]¬‹u\2—Ì%Ã.Ä ±B,äÆ c…‘†Dà‰žè‰¾ÐLNŸ> ÖÖÖý¿%É’dIzËGÓ¡éÐt8ö%ÜI¸“pG”ÓÝÝ {InInI.$ì;ÂŽTI•T ,Ô/Ô/ÔqÚ8mœj¥Z©8|ûðí÷͢͢Í"`}Èúõ!å)Oy0NàN)í)í)í¡Ö›ã7ÇoŽsrùùùƒÿÛ5U>U>U¾ú9Ô¨ÿP?€&4¡é¹<ñ xP°>°>û¸û¸û¸“’%/-yiÉKˆòlòlòl‚œ(‰’(T ŠQŒb€/à ø ”…²P0_æË|gÇÆ½Æ½Æ½àqùÑåG— jñûâ÷Åïó cdŒŒ¥QlÅVlmKb9,‡åð>ÎkžC7}oä“<’Gò®íá6p¸ ©exïâ]îXÅ_T|!ì6G™£ÌQ“’BR0F Ô@ Öb-ÖºŽwqwj¢&j†4¤Áîõ¸¼ûòîË»ûF>ùpäC>O¢‘h$š’¬ÅÙ‹³gyÈ@9ƒ.t¡KØèº*Ї>ô ÷‚¤² KA—‚.åDK RƒÔP’5¢ÑŒhxó…m¶]Øæp@dYAVÀŽEX„El°Á ÁÈB²,#%¤„”@Ò`l06YDÓõ¦ëM×E9 o…·ÂûÁÄdñdñdñþOïeÜ˸—0#32#ÏYÙ÷]ËÊÊÊÊʘkEáì˜ÑS»ûœÚÍ#¹$—ä^û ç¹ðÔ2`€;V>U>U>%ì6Ÿ4Ÿ4Ÿ„œã8Žã0êZ‰[­ÆF­òä?ÈuJÓ¤iÒ´{—íöû@Ú—¯t¾Òù àT;çÉ]€.¾Ðß»ÈþשÝKAƒ.]̉–&J¥‰%Y# FŒ,àÍçÓϧŸOwìsÞè=[U­ªVþ§®¹®¹®™ÄÊÛåíòv€ª©šª÷ÖóoðoðoØ^ ÐètÜg¾W­í÷\"üéõz½^Áé¶27æÆÜH²éÓ ¦ðß_‡¯Ã÷¦ Hþzì׿nüu£ê¢¹ÍÜfncÿlù®å»–ïkŸN=z:%J¯¯¯ûÀ‡d'ÙÉ]†HD=x‚'xBŸuUÀ¹PÂïyþÄþ@»™¨Bª¬Œ•±2}WÊ•r¥×&"'"'"é â|q¾8ŸkD‘á§ZM©¦TSºYoì2v»ÈtGç±BgÜr' õ88ü‰ýN»Îã‘=؃=ü-GâHÜ «bU¬êÀÛ²çeÏËžçÚD}¢>QßÀóô3úýl÷Ãö]í»ÚwÓ€pÆs],mÆñoUMë‚ØzWIEND®B`‚routino-3.2/web/www/routino/icons/limit-2.4.png 644 233 144 2475 13061246471 14601 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜòIDATHÇÍ–QHTYÇÏŒ«ÎÐhºV‹¡eB ¬fl´,)N´H¦˜nµX"KdûT° =Äf!>Ô䶦梬µd Âj¹YÊ<(Ci¨Íê83÷ÜóÛ‡™ã×íÝórï÷ïûÿÿçžï|÷B‘ °oµoµ§Çl{åwpÈû5fß”`«°Uü}6¶nlÈlËl3_Y¶ž×ñ‰ùBXø‰|Ú/2„åHíJí²•ÄíËPí©ö86Ç쟟€³×Ù»hÀé¾Ó}==ü¡ÀÀ\É\ X¶ž×ñ:_ã%â‹Ëÿá’’l~HMIMröçìß~6ðv;”*?0•4•¤ì g.U ¢Çl‚­çãñ:_ãi|ͧùczl*ÞT,®9\ã¼Kxõ 4f7fk¾h/p…+¸ÀAy\' ê‰z€ X¶ž×ñ:_ãi|ͧùczÄê½½æEU¥T¥Q€èS~ésÒØgì#jø¥C:Pæ²ùÑüˆ5–YfX`žyË­òU…ª@™ÑÖh+Q0¦øGãW¥V¥j×¼ [)„ù-à 8ÁÏXŽ[[S¦Â²ZV³ÄezèIÒDM "*¢"¬ùä“ê…Và þEóˆy„%ãr\ \O\ØÍ? þRý%à#€ù%¶èbtÑZøXò õBÁë7®ß¸cÇŽ=Lø2ÏÕsõT‘*RE–ÿMý›ú7õðø‹ÇY³¬p5ŒN‘8Ÿæë‰ ûë<Ü]¸»f €ú>–ÃÁá ¸"®ˆ+Þ˜>¨º °+° ÌþÕ5¶ÒWtŸ1kÍÚ•¾Öëüß!BøÀ>‹Ì1¨ø|Ô¬1kVõ1cÜødKèüFURU’f‰>å¬, ºdšL#ªþT j¥~S÷Ô=àGi%•T˜d‚‰¡?ÑI'Š y^ž' ò­| qüOwþuû¯\··‹u{[Ÿ7Ø’ÜQÓý¬,IEND®B`‚routino-3.2/web/www/routino/icons/limit-21.7.png 644 233 144 2756 13061246472 14670 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü£IDATHÇÍVkL“W~Új¡¡  ‰ªÌÌKD‡Ãq N¤N¦Ñ¡£›è¦’¹xa*31VÍd˜e¤d$dvŨƒAŒKp‘J³xgƒ6A–5N!!µJû]γíç‡Ó_ûåûçËóž÷}Ÿ'ç´Ï9 ã£_Æ)Æ)Æ„6nÑó±Kc—¾ÕÁõ iXeXÕí Ç9Ç9I2Ñ•èR}:ÖÖµúÑý€>4Ÿ–Çx艘³1g Q|ˆ\“¾&=vB×t–ó–óA™,o)o!ÉæÆæFn#<’** u¬­kõZ¿6oô|ú?@޽8ö¢ÁOƘcÌi[b[’¶#RЗF®\¾r9I>0=0 #I’Ê I+­¢€d€jñxÖÖ£õZ¿6O›¯ñiü= “%/ÈâµÅk-Ç" ¾dåäÊÉŸtžä¡•”r€$•O”O"E‡è Ih u¬­kõZ¿6O›¯ñiü=úQ>€£v²¤·¤—T#I©SöKS¥©¤:"ÇËñ”¢J…&Y}_]¨.$ÅaqXæ+!®ŠQ(ÆpJ8…’R&¹$)ÿ™/ÚW;V;4GíúQ¶ÀÌZÒ°cD¸·³·“ä!’ä2Rä‹|>ã׬f5I3Í4“jœ§Æ‘â¤8)NŽRxéh_"M¤ñY,#£|Qþˆ°™µFÌ€Š Œ/«(«ˆ— æ·óÞÎÝßÜ­¼[‰¶ï¿«]Y»–î÷ºçuÏFaÀ4AàÚе¡kC€?ÉŸäOxÄãEøøøÎëN·Ó üôiãºÆu°œìk¼ÝxmÎJîIîÀ–í[¶ÇËâ@Trnï!/ì¼°“¼±ýÜ?rÅ&ëSK¥Ž¡ÂÇ…÷ ï“©R¥>"»ªºªºªÈÖ`k°5Hš&‡ÉAž*:UtªèÕýéÈéÈéÈ!sósósóÉÅß_|ŸÄÀÐÏßœus–ØD¶ºZ]¤ü<¢Çˆø¸†¸†Œ,Àþ™ý3௾]¾]†c_Öï¾²û bÚ“ÛSÛSk“µÉÚÜ ß ß q¶8[œ Hš˜41i" Vˆb…¾Sò%ù’| Èsæ9óœ€Çíq{Ü@É­o‰ØüdSѦ"Ä|ДéËôŽqg†1ÃŒù=¡:¡:# ”ccU¯(\6¸LÿÛ{²;Ó:ÓÈôùéóÓç“åòF™”ŽKÇ¥ãúŽØOÛOÛO“ ûö5ìÓóòy‡¼Cǃµƒµƒµäœž9=szHß/Þ3Þ3:Ÿøh0s0“d81&1FõE­\(¼†ó\ó\ ë ßß$Û¿²¯¶¯Öç®ÏYŸÔUÔUÔU‘»¾3"Kd‰,ÀpÎpÎpNÏ÷™ûÌ}f7MošÞ4˜àšðã„Y³×Ì^; ÙP¯ (Lj›ÚfðEu°-Øv÷:ð«ûW7й¾kZ×4nV õI}7ç7g6g“Z&µLjZm­¶V›N»-v[ì6À²Á²Á²AÏ—Ö”Ö”ÖpÁàIñ¤xR€âyÅ3Šg¼( ³¸‰Wï\½À°ìw¯ƒ5Pï&·îÞº›|~–$Õwþþ°?¯?|ØùÐÿÐOÑßÐïìw’#Ù#Ù#Ùú ß¾1|ƒ   $饗^ò‰í‰í‰¤ƒ:ÈáÜáw‡ß%G¦ŒddSj™ZFòJ„êçû?߯ùY½šoè>¢ùÊ í;ÿ'B Båžrï%Sz’´ XtÃË·úQ;+KÊKÊIq"êÌ׫b%ÅYù©ü”¿åe^ÖŸã˜À’U¬bUôV¤ð‹{âI%šKVö*{)ñ€R hÍR'åRS©éuÎÿæÞ•oìëâ}½™/Ø⸘®÷Ú.…IEND®B`‚routino-3.2/web/www/routino/icons/waypoint-add.png 644 233 144 261 12002775154 15530 0‰PNG  IHDR Vu\çsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ ׋'À1IDAT(Ïc` 02000üÿÿU‘ñ?TœMœ‰Th¯æÆÿĪg‰¡D2Î ‡Z„ßIEND®B`‚routino-3.2/web/www/routino/icons/marker-93-grey.png 644 233 144 6270 13061246467 15642 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü mIDATXÃ…—mPSW·Çÿ{ŸC…€…µä°`A½Ú¢Ö·R,¾R™¶âU¯<Ž£^GZÆV±U£´so \ð ¤ ±@ÊÔ‘¢…‹ h ¤$@8Ùû~ Ñgœét}Ù³ÏÙYë—µþ{í}Hzzzzz:Ô·ñ.‰ÄGܘþMú7éßð)™½™½™½KB¸÷â^ÇþSò“ü$¿ð­£å£å£åü(ò‘|’Š`#ÀC<ÄC[±[ùQyœàøÃ6ªÕŒj°²µ¾µ¾µžÕ×׳½¿/ý}éïK7å(”Ê€ ÇÇÇ–Åy<™'óäG‰t!98rpäà€zÔ£^3Q,ËÅòúû°}Ø>üú í[Ú·´oIóRRRÄ"µEmQ[ …|à‰ò@íhG;€ ˜€ †0„!AB@:H逄çxŽç<<<Ðyé‹K_\úBJì¬ë¬ë¬”¹ËÜeî¿TIqRœ÷漉7ñæ“?©{“{“{à6ÅmŠÛ”ÏnتlU¶ª×Wh´ ÚierRrRr’ø£ÚWí«ö…ãšãšãÀV³Õl5DlÆflÈr‡ÜHé"]i&ͤ@,b °xÏâ!:¶;¶;¶j«Úª¶ÂÇå_»F»F»FZéŠïâqñ‰Ò4$ -Ÿc¿n¿n¿ž6é½IïMzë   Ä&,Çr,‡…F‡°PX(,ð6ÞÆÛxi:è ð¾ÂWR‘ŠT€4’FÒ!2D†^fœ)˜‚)àAAAK•„+ WÄ¢³kή9»†ë,W,W,W’̈@"ŠæP̃yð¡5cQcQcQ@ôíèÛÑ·«.P¨ cËØ2¶ ´ƒvÐàYñ³âgÅ@3m¦Íx¼îñºÇë” %P@ñr×?šòhÊ£)ÀO%?•üT<þõñ¯è z‚žX«`ðPÔµ²è;Ñw¢ï ÖÅã⣒NÒIºyÛ¼ž{=÷zŽ£úh}´>šœZ’Ñïèwô;À´Ê´Ê´ È-Î-Î-ŒmÆ6cp¦ñLã™F *¥*¥*À<ÌÃ<àZÓµ¦kM@~d~d~$Pc®1טÓ3NÏ8=¨=[{¶ö,@WÓÕtõ‹ºÈôz½^¯'‹û÷îdG‹-(ZÀ]få‡ùa~˜sG‹£ÅÑÂùá°Ãa‡Ã8ÿ¶ùÛæo›_¬ã?¯ýyíÏk9?¤:¤:¤â¼{}÷úîõœ2ñ“‰ŸLäüFÙ²e/×755q~@w@w@Çù¨~T?ªç¯šÕÅãâñ)>ŧ$˜ž§çéùÿLŽ}؇}S2%SöF{£½ðúÅë¯_„! a€çEÏ‹žûFûFûF oWß®¾]@òªäUÉ«eŸ²OÙÜK¼—x/¸gºgºgô½ú^}/ K“¥ÉÒ^ÂKx @6 däô}ú>}ÀYœÅY, ~‚ŸàÇ/XæZæZæýx[À¿ €0.2‘‰ $26262(½Zzµô*ЙԙԙôXz,=`D?¢Ñ´›vÓn@[§­ÓÖOÛŸ¶?m.»pìÂ1àϸ?ãþŒ"5‘šH €½Ø‹½ZÑŠVpg¢ëmëmëmüLWÒ•t%¿ ,¹»äî’»i5}“û&÷M¦…>u>u>ud‘³³3†á oxÃmZÓ´¦iMÀÄø‰ñãÁ#ƒGú…ú…ú…@ß´¾i}Ó€À;wÖ2k™µ ð½í{Û÷6°´liÙÒ2 ´(´(´( ) ) üsüsüsßí¾Û}·cØœiÎ4g­¶­¶­¶ ŸÈÕrµ\-£H@2òÅt1]L'©5RT#9´ý>ý>ý>Pâü?`)Î+Î+Î,Z>´|lÞ¼9À œÀ @¾O¾O¾ð3øü Àé–Ó-§[Ó Ó Ó‰—]ŒÜ'÷É}@l[Ä@n“Ûä6Œ:_++e•²J›OÌÄLÌ8CÄA_ÊÈ™Ð3¡gBÞºÞºÞº‚_­Û¬Û¬ÛÞ×ÖÖÖ:ölíßÚ¿µ_È5%šM‰-²Ù=ÿ0çž{Îù̽ß{ï@¶g|A’#É‘äàERæuÍëš×UºN”EY”ÿuò(ò€pXm&‘D™Äûj3›ÏòY=V?¾_ÏËWOõTÏÛããéYb—Ø%vÙ'¹ÃÜaî°’šæMó¦yq}ÇÝwwÜ*F+F+FòÂòÂò¨Ïâl>ËgõX}ÖïÙ<ÄoŒ÷—}Êûy?ïwç±2Ôj µò;çΜP_ðMø&|0‹Ì`€n¸ÍÄÙ|–Ïê±úñý–}úl>2¾Èñcü˜û/¬@aaa¿´Þr†œ!815GÍQs Ér£ÜÈùr¾œÈÙ"[büHœÍgù¬«¯Çõ7¾¨¡qvÎÎÙ‰ÄSâ)ñTûm–`n67››%‹ö®º_ÝŸÔ.MIS€êV6+›•l%QS0‰?¨Ì(3€ê9CN@j”Êõ]EVdøØ4s³ù„ù„daýã#Ý=Ý=ݽ×~Í&›ŒMÆ&5Ó5îzàz€éHŸü¡¼]Þêiõ4Ÿú¾ú>bÍO¬« +ÀOð E ›ü¡tEº¢¹>׸Ûà6`ÚØdòùM~Ñ£ñGãDtö9ûˆègïÞ/ˆøî0H$Yð¸=n›œŒx oá-¡‡‘%n¾T©þR}ŒæË+å• ý ý{˜J»K» 8¯8/vצÍÓfoŠ7 5¿5?&¬Ý¤+¯<È—+³*³¢ýþÚÒ;Ø;¨½€¿år¹\.7ô„5ÂaÍQ;e¦¥¦¥¦¥ò2×N×N×Îèõ¡n }ú8öp¿ª¼ª€ù-ó[± ÊwÊw°ä%oÀ¾%û–Īïîw?°U\7F`6Î>šÈ (Ú ¤ éBúgÓ”R’R’RB$Þo‰·:Æ´ ¿Ü\n.—´öÖàWÁ¯€ƒ5,ÛR¶ŠÅñ!b݆nÌ«šWÀG·è€ép}å³u Ö-€ Lé§ô@í?ê^¯{]™Õë„:¡îß•a?Ù“ +ÃY]®.W—ë¾È¬ÖFk£ºIÛ¹_†×¸Yq³€ïƪ«âV´_éq÷OÞ? í»ÛwrÍõ¥×—F×÷O~{«½[µ'ÔÆÛxÛ\)·ˆ[Ä-Zu>Pø§v¾vs»¹Ý›Û¸®ƒë`ZQ~çèsô9ú¢ë)7È Ñõ€þXi¨™j&à.ê&ÕªZ£RëµÚÓ|ÔaJ:¨­ä ámám«YC³…,¢1ÊZDET$ž ;ÙÉN$xày§[{ZÛŒ§§¥T×{®×@¬v%«dÄ$&0Ñ9”9eP+CjHEáßUøÍßwùwùå횊'3eÊ8DÄ›y3oæ.Gèjæ/"+…aDá®fÉ<’y„HW««ÕÕ:NjÚ-2™‹bµ«X+pÀ€)La*Ê-¯WÈ+ 2¿umëÚÖµê&VO—ªKÕ¥ŽÍ…}ãüøæz/=.Áý&Þ7Îk×uù©ÚM•R¥Ô(ò@y <ˆjqÃÉÃÉÃÉÃêM“)| Ÿ²ë÷ R<›À—DÏZ´»ãyÚ•ú¤>©/ªÜÇ3g«½«½«½ò¯4-v Bç70©E¤—¨§çXt+ð4í¶[Œ-Rª«ÃÕáê@x©õªõªõjôÚÛÄ6±m8ò/IòßúFÆé…ç&KØÑî•§i·x[ñ¶âmQí:68686àóp\Õv‚«æª¹êÍGãÛðS }9ú/íyÚ-l‚M°¹ópuSuSu“ú‡œ`N0'(ÝѶÚ#xÕ@íÔNí¹vWB¿$ú-Q»'ãý⟹=Ün@eTFeÊJ~1¿˜_ pÄG7¾1ÍšfM³D 0( r½‘ÄÊ„û¿Yªö©„J¨D¼~¯†Wy•W®‡ëázî/ /w$ìŒ3¡îs·ú?þæPizÚ[£IEND®B`‚routino-3.2/web/www/routino/icons/limit-26.1.png 644 233 144 3023 13061246473 14654 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÈIDATHÇÍVýOUeÿœKÜË[º]ÍZ[ÊrYЬkâTtòV9ºl.…›)?¤™¬ÍV› ¾,Yn²ÂZ ¹i: ™zñÚÂ!#ÅÌîÜî¥Ã=ç|?ýp9œ›ý>¿œ}ß>ŸïÙ÷y>ÏðÜô¤íÛ ¶äˆmÛfùãÖÆ­}ñûˆÝ “J¡Røk ™r4å(IÎjœÕh X¶7ó£ë ?šÏôã9XG³£YÉ™¶÷“o¿òö+qi»¶›Œoo jäö¶ím$ùã7?~ÃÉ¿<ø…$ç<Î!-ÛŒ›ùf½‰ýOðdlgl§2B:ì;@.\³pMú®HÂP:¹iæ $y/æ^ŒØH’Ô‘Lb’ä 0@sýe›ñé|³ÞÄ3ñM>“?ÒÈÔìÔl€ÜüîæwãOD N’{æï™oò…[I~Á/˜Dj-@’z™^F•”né&I*THË6ãf¾Yoâ™ø&ŸÉéÇeêòÈâÁâAÒð‘d¸G / /"?à “áéNEʤTJIíšvU»J†a­5É N䓯Vc+ÃF¶ö™ö)ŸDðÉ’¸’8’L~s”àåÃd| >xF¦{{Hî'I®'%K²b»ØEÊY H:é¤3ª‘3<Ã3$=ôÐÃÿ-}XÖ‡IiÕ}º¡i÷zü‰4ù#½|‘N.3¥bkÅVÆxõ¦Ã»Û»›¬?X_[_Kñ•ûÊ|eц0²®½®½®ô–zK½¥V\¼â/)g嬜µüÝ_u·u·Q~þvìíX‹OnVl®Øl޶á²Íø2Û1¾áÙ ÏWw »†]Êkoø]‹]‹1ÕùygMg ”¢ÙEiEiÀÅw^Ü ì8±ãÄŽÀù©óSç§€ª†ª†ªànõÝê»Õ€²\Y®,»bWì@ËÜ–¹-s¼yy“y“P®¼~eôÊ(¦"sS^“¯ßLz3izŒÈl‡~;ñxâqi&Cý¡~òô·--dÍ—û ÷ZêR]ªK%ó“ó“ó“É%«—¬^²šÜR¾¥|K9¹WöÊ^!ƒiÁ´`šUgÌ3æóÈG‹£ÅA:ókœkÈïjOžŒÂ×ËGŒ!ÉäKÉ—¤Ù³È^e¯b+BûBû€âò%Kà_׺ηÎ,­YZ³´Xå^å^åÊ•*;(Å£x€ÜñÜñÜq ©·©·©è‹ï‹ï‹ÇÌÒ+õJ½(QKÔÈf„2BÀäãÉÙ“³gÒüøÇ~Ê~ b6Ålb†Mkoio)¿)ÇíËìË€ ìØÔ¼óŠòŠ÷=÷¨{8Ø|°ù`3ð0áaÂC Q%Q€míÛÚ·µsŽÍ96çp§êNÕ*`¢~¢~¢гô,=ËjTnŠO|Ñ…®w*´ðúðz0:Œå7›v»úû€Þ˽—ž÷n,¾±˜ïë…‡0Õ6Ðv½í:’š’š’ αj¬ ¬è_Ñ¿¢°wØ;ìÀJÿJÿJ?PÐTÐTÐäääÁÖ`k°Õj,á«„º„: 6?&=&ÝÜc|»º Èéïk§O%=y>"'›#§äÏuc®1y¿çþÈýÊØž±]c»H5SÍT3I9 äùÈûÈûÈKF£ÑHÊ-¹%·Hµ¿Ú_Mš¡šµ—&^šÈ™È¡¨Ž¿Ã‡­SÉs•™•™Ö©„©–ŽL똩3S2_æÏè馛nR%Q£äÁ)Nq’Ìf6³£L¥J5ZÑ$]Ò£tl†ïIûÏ­^—Ç=ÅÛ‹·“r2¢ÌÒ§'éI¤ü kã ³‘×xŸyŽçHùY.È’§yš§I†d”û2"#$Gg”ßcxfªþŽþÉOŸPþžTþ§÷®|j_Oí{ìé|Áþ bاñ„‘óÕIEND®B`‚routino-3.2/web/www/routino/icons/limit-15.0.png 644 233 144 3003 13061246472 14646 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܸIDATHÇÍ–ßoSçÇÿ Ž!ÄÒ ¤d! …P”2EŒ1$G`@ É’b£T¹JBI£tbPWÑ4PÕJÙEG/¶D"Œ"¦…â¬Rª)@%Pj¨ u›ÊiYñ ;àø¿Ÿ]Ø'vÙ?À{sôüú~Ÿó>çýžW@DDVåŸÖ*k•µe€¥ÍÒöõqp º^8÷¹ìý‚mÆÍüâz‘~1Ÿé—URp8‚Ž ¥1o¿_9øJé‹9ûïà 9C)Þ¼ôæ%€OG>¡b_ƾxØø° ¶7óÍz¯_Þ†_–…—…-Qp”8JDà%ÏKžê?徫†–¦–&€Ÿl?Ù”Œ8PF™j44Ìõ È6ãù|³ÞÄ3ñM>“?×@…»Â-­í­íÎ@®àþ¿À_é¯4ù2!`€Ê@×t Àè0:HƒšPX°@Á6ãf¾Yoâ™ø&ŸÉŸëG~=Û“»Ñdd–º‘ýCÆ’±€ú§žÒS˜eüÙè3úÀØhl06€qÈ8dþÆ<»”ú½îÓ}dô3e™2Poåðá€v@þ›ç_¥&"òò?ÀùóÍßîþv7ßðšúžÔ“,,Q\ã W€yæ™/¦F¡€4iÒEþìd'°7nµOícOŸ?FnDn85§¦Ùù:×O~§N]ƒžw{Þu [oâNlŸØ;±õEÛ¢m¾±õcëÇÖÃoÈ7äƒaï°wØ ÉªdU²êÿvŒÈÝÈÝÈ]²¦S¨hr&84£ÙzõèðöÃÛÍÑžº&\¹ýgF?ýpéõ»‚£—G/“¶µ÷Ø{`lzlzlôóúyýÛǶ©Y6°l@Dí‘„ÏzpÇÁ"›ïožÞ<-¢5h ZƒÈš“kN®9)Ò~³ýfûM‘–Þ–Þ–^‘#uGêŽÔ‰„õ°Ö -nZÜ´¸I¤l²l²l²à/ÿ±ÜQîy_hYh‘„ˆ£ÁÑ "×l«l«¨³ŠÊ^Ê^²ÜÑÛô6)‘ @ý ¢**bÕ¬šU‰Eb‘XDd]z]z]Z¤ÓÛéíôŠTMUMUM‰Ì'ç“óI‚ ŠTº+Ý•î‚îwsÛæ¶‰ÌþvÖ5ëyy|£o£O*DR¯§^±üF}¥¾²ÜËü·ßÑ_F£Ïœ9éýöŸÛ.œ½pöÂYˆ—ÄKâ%P½²zeõJpy\—úO÷Ÿî? ñññ°µrkåÖJxzz‚îšîšîXÑ·¢sE'ø6ϯê‚QFŽåú)>•'zNŸ™§2ûQö#x¼óñß@=½úôó§Ÿ>êô“ô“ôˆ[ãÖ¸ÔŒšQ3 * 8ž8ž8jÚ£ö€jSͪ÷s‰9TöçLm¦0ò|FϱžcÀSóT²¤c1gL³CĈKü¯¡e[³­Sê=õ¨3êŒ:S$cƒjP »ØÅ®"裗^Èjª\•¨åj9 ª3,2™p&œ ÍNôW:V¤üº×æµ”ŸõˆNQ#ZP~zé¦ÔUõ…ú¸’ÞTî_©~Èí ©|þx¶4[JFÝÖSzÊœLæxí^;°ø¬ò?¿ÿÊçövñÜÞÇžÏìÿZêÉ÷ ÓªÏIEND®B`‚routino-3.2/web/www/routino/icons/limit-134.png 644 233 144 2604 13061246470 14576 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü9IDATHÇÍ–mH”Yǯ/“3›MY!fjÖ(©ùP»P¦¢CP¤e¡-Z,±á‡v^ ˆ,&0bW ‰ lsÛµ’°¾h„Nol/ÚÆZ0îª,†Y‰éX:>/÷·Æë3Õîwï—áœ{Îÿÿ¿ç¹çÌ „bÞÔ¯€È%‘K"!;ò;Ëoßh߸ì×}Þ€ˆmÛþ<sÏÎ= WWg¾°lµ¯âÃó…°ðÃù”_Ì–#¦1¦1"{Êö@azaº=>dÿäG“£é½{¯ï½p­þZ=û`àþÀ}€áìál°lµ¯âU¾Â ÇžOø…ÛMÛ͈>ˆ™3KXê^êNý!ðW*ämÎÛ ÐÕ%#ÀxÄ+³Ôzf«ý©x•¯ð¾âSü!=f-̶îܺÓq1”ðâ8œx8QñiM@Ä‚ÐF±QL¤Oúˆ ,[í«x•¯ð¾âSü!=âão[™ ;ì;ìÀ(€v̹æ\03µKÚ%4yLz¥©$›ƒæ+óè½z¯Þ æf§ÙɧKÊ/õ ½Íti6Í6}à{Œm×¶kJ`enاBˆ´jLÇKÇË@4øM¿9 ¸ÉèÑÖiëø “]²+Œê 9´ÑF[˜ÿ4§9 äCP@y —rÀì3ûøÀû>øÇücŽAÇ` Zé™vþ”–—–O×aµl×nh7¬ûNû<>ôÌï™ß3ßÒñÜöÜöÜ•*/T^€£Ãè0>«Ýßtt@{Bûšö5VŧĮF+=RzDUîü)a‡xèmõ¶gä0‡Ía‚‹cc!*ˆ @“«ÉÕä‚áÃ'†O€ó±ó±ó1ÆÆÆCBQBQB<˜|0ù`Ò–2˜2˜2¹Wsr¦ÝAó‹)¾¼Ï¼Ï”°ŽC‘B8Ûœm®¯Äû̵™k…ß !DÄEìôÑ'bÄ+1"F„ˆÿ0þ¡r·Ü-w a¸ ·áâ¤ý¤ý¤]ˆ¢‰¢‰¢ !ûûû„0Úv£]O¡§ÐS(DðIðIð‰ ªÔ,¨jÅâIY{²ö1­âæÄÍ1ŸÃÛ—o_Zmo¸õUú*ëÄî4wš; jíµöZ»åY?²~d=äŸÉ?“V_y|åq([Q¶¢l¤–§–§–CqRqRq,«ZVµ¬ ú¾íÝÜ»Ùâ“?¾Ùÿf?(=œmÎ6Ùˆ9àpY„Æ&=N³ìÌÛ™·3oÃÕ+W¯\½-É-É-É^Ÿ^Ÿ^oÅe¤d¤d¤@ÎxÎxÎ8”T—T—TÃòËË//¿ ¶[²-n˜Íw›ïZyfAÿ©þS ôXw ïˆwdúJî1O.š\DPy¶œÛrnË9hhmhmhµ7ÌÞ0{Ãlpæ;óùPÒUÒUÒc‰c‰c‰V\]g]g]'äÕçÕäÕXwÌØ§î´âéùß®ä¦îÕ½VWŽfŒ®] O'žN<µµ!mH‚×·^ßz} ŒGÆ#ãÈnÙ-»Ál6›ÍfÿzÜ5î‚w¿ ¾ "éÔ}º0¦øÆJ”ø¬+ÓªÁ1àDƒßð[í¾ Ì]æ.>0þIÿGM4È£ò¨îø˜àîw÷Ü·Ü·@ëëz½Þ¯óEóKÝ/ôE`å+¿ˆùÄãŒ"ðTÑSEi'CÿNƒý/í `jÅÔ emXÍje¼xÑÇ\Ö×Ãõz¿Î§óëzº~È@rar¡¼üú˯Ç_ 5 7Ã;[ÞÙ¢ëù;÷yŸÕð¼Ú!í>P½ª€b ‚õu½^ï×ùt~]O×ù‰lå#‘Æ b¤b‚sþ¾À¸?ÕŸ Áoü?øÀvª‚ƒ‚ 0˜ Ì‚ªVÕªš_ uS-©%”fX~bù üÚa¿Ãï€ÀBˆ_Ýx¥ö•ZÝ`ã ‘­œy¶ â½ñ^o,gGúFú€Ê@mWÛyÄWÜä&(“2)ÐJ+­Q*©¤(¦˜â¨y>|?³š¦ÒxeÖÓõ ùØ$½Yùf¥Þ4 ~6ø4þ­ñ|ãy”Ëëzàz¡X?°~`=Ø2m™¶Lýõ/6‘7‘7‘¶¯m½¶^puÔ8jPÍ£¹>rÁø³ —.ÍpòÈÉ#¬ ù‘`§ˆÈwoCçÙγ0–¼0µ0¥ªÖýeMÆš |Ö-ÖuÖu!’!pÙ~Ù~ÙÛê¶Õm«ƒü±ü±ü10gš3Í™0]=]=µ¥=ôÐì.Ø]°öÌí™Ü3 òw|_ü6ëÛ,UŸ;>w@àÇCÌ?7$nÈÝ!Røaá‡"ÚÏkž×b®üYÎ=sî‰;ð×\I»šv5íªHOlOlO¬ÈÆ}÷mÜ'r+ýVú­t£Éh2šDºS»S»Så§Q`.0˜EúýÎ~§H…«b¨bHä·óU%U%WüiÞpÞpÌ~ŸkÈ5ˆÄ&5$5äîæÖ.¯]ñÁÜ»sïF®ýôNz'¡<«<«< Òmé¶t\ó\ó\ó@~B~B~Ý)ºStŒÆFc#4'6'6'FíetÀlÓlÓldßξ}†¿jŠœÑ9õ›Ù¼Ù<`ÙgŠ ‰Vœ`L0ª6ðú áåm‡ÚAîóÓæ§#ü;³vfí̂ӧ;NwÀñ–ã-Ç[ ~kýÖú­°ibÓĦ p¶;ÛíàNr'¹“"ýº/t_èË-oYÞŠÌ÷†¿¸ÝOºŸ´¤I7T›¨ËúkoÏ Ueùàùçž_bEbib)<:xtfRfRfR loÙÞ²½°¹tséæR8Óu¦ëLxvyvyvAŽ;ÇãJ)¥¬.«ËꂦOšìMöÈÕ®‡ôXj™n™Öcã»·Ã9fwòͱäcÉ‘[رté>ÌÜš¹>s¥•h%ZIT ´ûÚ}ípïî½»÷îFbB”A`þÄü‰ùÀ)Nq  ·/n‡¥”¥ü¥|ÿ é1g›³§^±)Ϙò%ƒÉ }ÆztèÑ!(—ÆKãà[ä[ä[õÝõÝõÝ`DŒˆ­·^Üzfœ›qnÆ9h6›Íf“ŽoÍ¥æÒ=cSÜJ}kú¹Ë]ûV¾I¼I¼IÀ ã…ñµ@-P +qU^•Wa<6|.ŸËç€I‚`™T$¨ýÏ[ù–>O÷±ãò8 U®T¨>uRtÜ®U¢J@V‡ÕaP…ªP:òÛTª¾àGä>¹ÉÿÕÇÞÒùHaš×Íër·ÜM’O9ÈA” ©+ê ð=½ô:¶è }ôº«î¨;@QFQ wÉ]$m¾ÿÔÚ~+§íëbھǦç öO·jd#Yu¦~IEND®B`‚routino-3.2/web/www/routino/icons/limit-5.5.png 644 233 144 2605 13061246471 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü:IDATHÇÍV]LSg~Z ü ‹^”0XB$3!¢MVÓ¸jeÓ%ü!N nd3&BŒcÉ a[ƒÆ¿6ʅΡÎŒ™€ ’ŠÉ¶rø 1E í9ýž]œsÚ:¶{Þ‹Ó¼ï÷¼Ïóôü¼ß®ý‚4f3óÕܸ?ZOÚœ´ù£ŸÕü¼B¶¶ýñ%in67“ä‚ .„_Ds}]ÇÇöQþX=½ŽtD ‰—/е¼Ü‘¿#?é5ÿö™|5ùê[™ >bˆß(eJY Ðaptƒ§7ÄiŸ´ïÿñ#}#OGžFà3â®§êë~@Îïœß).‘þB!©\à{á™ò<2åHÊ‘”#¤}}}Ù^Ý^Ý^ÍYá¹ì¹ì¹L¦Ô§Ô§ÔÇà«Ú«Ú«¢8q3|,|Œä€^Qõu?ñ@\E\— ý ýþLh¯`ÆÂ³ ›6ÎçÎçÎç€õõõP;^;^;¤¥¥¥]¥]¥]€yÐ@Þ*oð·jH3¿Ûß dËÙr¶ T9ªU ³7³7³$I’$€E,b0T2T2Tä<Îyœó8Š·‹°`üÃñ¬ñ,D‚uºž¦¯ù1â@q÷àî»wÃ÷ÀÏ´¾`þ'ùù@Û®¶]m»€ôMé›Ò7ë Ö¬/Êmå¶r`-´Z ì—Ù/³_î:w».Š_cYcYc\).ƒËÂ&lÆ…t=U?âGÛËî“<ù¤?f‡|Q¾}%‚ÅÁUÁUä˜qÌ8f$Å+ñJ¼"E›hmäÄʉ•+Iºé¦› v;‚1øÏÅ^±7fä É}r_Œ^D_õ3{Ž|“¾Éèò°<ÌiÑ"¨_ÆÜ,šE3ÉÕ\ÍÕ1õ“â¤8IŠÑ"ZÞÃwŠN’%Š[qÇ̱ oÚ7={ŽÍžüt$:IÊÚd¦Ò§ô‘¬Qz”†Ä¯bDŒPð6;ØAò­º7ŠA1(IÎðß‘<ÊZÖ’üÍð¢ð"†H¥Wé%©èüŽ$GÒNþ9»WÎÙÓÅœ=ÍÍì?´u®µ!þÔIEND®B`‚routino-3.2/web/www/routino/icons/limit-16.2.png 644 233 144 3010 13061246472 14647 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܽIDATHÇÍ–ÑOT×Æ× 3à0N¹-h&±jÔ„„š¨$b2°…æ¶UÔÖVª±¢M¼Mh®¤/ú Á˜T‰iJ%-‘´•ËÃdTn[ÔÈÅ€´hê ¦ tÄ‚c¼ %L%Â9söï> gfÚû¸_N¾½Öú¾uÎ>ûÛ[@DDœ Oë2ë2kn[÷'ç³^ÍzõåÅqK ,[-[ïÅŸ/þ ¯-¯Í¸ŸÄfÜÌO­Iò§ê™óâ”äD¦/Óg)[ÀÇ`gÑ΢¬âøTØ.Ú.>Õ¡®³®àÂ׾愿—ý^IlÆÍ|³ÞäKå—cÑŒ2~°<€ÌE™‹DÀSé©\þQÕ€ $±7óÍz“Ïä7õLýx?òçµ=]A´F«Ñ õ^-CËuX¿¯ßÇŒ(µC½©Þýgý–~ Ã0 ƒä˜a’ÉRƯÚÚhúm©¶ŒHœjÆkÆ™ýÄRFEDV¶_l¿DÓ!X¬€ØÕªCŸÒ§˜MHü 'NPQ‘”F.q‰KÀ^ö²79­¢*ª¢À1Np@y•—YŽ/ðkÃýÃý¶¨-M§'ÞÏ—j¹6€ê0ŠMâ¾/úÎ÷G^ýnô»¤àˆsÄ9â„Ó]§»NwÁí·wÜÞ‘ŒwŒ;Æ$¾›q×z× gšÎœ:s u÷?ÕÕ‰ìbuã€û€˜‹÷#t‰ˆüüO¾ìø´ãÓÄ{îó¹;º:º˜KoKoNo_¯ÎW—*±”XJ,Pª U… 4R)@hKhKhK2oðÐà¡ÁCà˜wÌ;æ¡â劗*^Ïß § §™»Ý5Ö8Ö¨öAçžÎ=`¸âýXÅšûIî'¯l”Þ!ï‹DD,çäIÚâ´Å’éÊv¹\.ÇuÇuÇu‘kÆ5ãš!l6DÜÅîbw±Èf×f×f—È’KV,Y!‰1Þ>Þ>Þ.RßZßZß*Ò=Úî‹Ø—änÌÝ(™wvõ7÷7[Ή¼öÕk_‰0Ÿ}+ûÖ+òròrŒ!˜œ˜œ€˜7±í(k,k,kÿ=ÿ=ÿ=¸Ò~¥ýJ;¬*_U¾ªZÇZÇZÇ p p pz z z ø¿1P2P2PEëŠÖ­ƒ=úûÞê]S/r2rØç¬wÖCVQF§ÑiÑ·ê[Ed‘ˆˆ¸Í7æ[¾áVaqlslsl±×Úkíµ"û=û=û="ùgóÏæŸ ­ ­ ­Ñ•®t%r3çfÎÍ‘Jo¥·Ò+²Ûµ;owžHó?š«š«DŒVSO›Ö¦Eä#åQËU¬Ñòhy`P¤·»·[DVŠˆðÁB_ó¹¹F®!2œ ÎEJm¥¶R›ÈÊM+7­Ü$’••%²>²>²>"R½¡zCõ‘ªÇU«‹\ \ \ ˆˆG<âñð×úkE /¼xòÅ“2ÿý²Þßzã‘Àh`T$Öý8úq`0uW=xøÞÜ•F“Ñ3›gvÍìB={ø,ø,˜\š˜/æ‹ù`rÍäšÉ5`´mF¨Õ¢Z`êÈÔ‘©#0›?›?›Ozž\~r&ü?Mü„zÔú°éa<Ûgê}¨}¨ïš»’„…máh: džc ýjæ··S|¬–ìeWveOñ«U  /^¼)?×sÌ¥þmj¹Zžà«†¿øò±ç×·§mOK:?/èÃú0p4ö ö éü´ÓF¨ªWõ~üø¦™5¯žª§ÀvŽs¥þ­kº†¦~ŒÙcvPçø›kkÍ£)ÕùŸß³ò¹½]<·÷±çóû?¸ã×åÌ”"IEND®B`‚routino-3.2/web/www/routino/icons/limit-132.png 644 233 144 2724 13061246470 14577 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷܉IDATHÇÍ–]LTgÇ(3gSŒ C°bCºxÁfƒB‰;4m“¦R‰¦~´kIt7F[[kj lÐëÆ/4FÈv!…b˜&Õd¦ÒdY c@º¢¹(ŽËb'8ÏÇûÛ‹áp¦ëî½çæäùúÿÿïûžç9¯€ˆˆ.½%އ;m;~gû¯:_]÷·´}΀¬·³Þÿ Úü¨òQ%¤¢©h*j/T{¨=ÔÂÌÉ™“3'Á˜œM‡àþ…ûßÜÿ•úãüÇógð}ÕôbÓ‹OueÙçàŠ»âɘ4& {Žù®ù. <æ—O9ä€:ªŽª£¶[mQ[Ô`ëX—‘Ÿ"E @­UkY°ñ''\IWò©9ö?&¿¶4™1bF (2>1>AãdL~Zh¦TPU¸Ê×| ãG@uª[êJýÝð^4Ðzø‹…ßÝ ¤žšüÏì¿ò™½]<³÷±góûwY¡0¤¿_IEND®B`‚routino-3.2/web/www/routino/icons/limit-183.png 644 233 144 2717 13061246470 14607 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü„IDATHÇÍV]L“W~ÚòÓAGhÀ¡è˜FYœÄ8bµn‹8C™0#Íœz±nLŒ‰\ · £Ë\$!,ºtq+þÞ˜j¤ÅM#þk…€k‚.€µÚõû¾sž]|¾nÙîýn¾¼Ïó¼çä¼ç€L›øƒ´Ï´Ï´ç˜¶ýËï\á\ñúϦÝl¶j[uÿ.rê©Hò•^ùAܲlWù©õ€…ŸÊ§ü˜ˑٖÙfóMØ_’µoÖ¾ét›öÞ0éêtuÆur˱-ÇH²#Ðà§dôBôIŽúF}¤e«¸ÊWõ /_þ‹ ÓO¥Ÿ² ™™9ë½Yïn&Ü/&ý«ü«HrØ1ìv’$Ç$§pŠô‘Œ1Fõ=I±U|"_Õ+<…¯ø¿©dÞ²¼eùÁÚÖº™·“ÛglŸ¡ø´N’_ókN!õ˜#I£Î¨ã_¤ Ë0IÒFiÙ*®òU½ÂSøŠOñ›zðϽÝ÷.¹Æ¹ÆIò)Ijݤ˜*¦’«ý¨ýHM6È  R*Éâ–¸!nú >¨’Ò&!1¹‚c²PRê‘di²”š¸¦Ý×îO6ÜMíCíC¤PüH4ÿ; ×#×£XyWÜ“¸ïÍ£yø\þ$ûdŸE(Gå¨%ÙÈF6Z~æa&e“l’M$3ÊhJü[Q&Êøœy&>yoæ½™$_¸ºÆÒ”ž aÍ¿’Û¶5Löù–ìÒNj'-á¯Â á2R)ˆX d=ÈzõØ?Ð2Ð$¥^¥W!Ób;„ãÞ¸7`“©Ç8ü?K°<#žWŠñ§¬àÇü¨±×8j@ImImI-ðlðÙà³A`¿^Ï÷ó¾ï7G4¾¦RÔâÅIqRœÄ„$Lh™Ð2¡¥0K”EY”»ŽS&eR&0îVH"‰Ì¢må‹gù¬«Ý_ÍÉWATÁÛ£ýÓ*¶ˆ-b‹}ÛÂmᶨ zðaØ0Œ¿.¿³üÎò;Àо}+úKŽ%Ç’£ÙÌÏâY>«Çê³~Ïç!~a´ýêG¼—÷ò^W&Û¡Ye³Êf•ÉÛ:::”IžÏ€g€FñOñ€ .¸ÕûY<ËgõXýè~¯~ô|>2Náûù~¾ßõ7V çRÎ¥œKÁ_:Ž€#ÂKIWÒ•tå*¹J®äyòq_Ó –`:`ÚoÚ4«`ï)G”#ð›üÇýÇÅpüògòg€·ð€ËÀE\àQˆÅè ôÁ&_¿¯PÞSŠ”"xX°é€i¯ioÐÌú3ÆGº{º{º{¿ú 0ÖkŒ5Jªó±³ÏÙ‡'á:ù` ,Pp h-ÔWéUz@y¢<åå“·ñP3åƒÀ€æu>vœ<1Ö«ÕJ*ãQùÄr±\,ïÜÇõ¥õ¥õ¥Ê»á£A{ 7ÐÑÐ×s½ç:4žo<çÌçÌ0f3G‚‡:Bp.|ºéÓM|Wv\Ù¡EíÁÁª9Z_Z¿¦~ò®º³Q|¤¸ s s sq`°p°p°p÷D2{giDZGë९_ú?`aß¾HÐÊû•÷#ý‰¯$¾a{vîÙ¹P뇹 SSÆÃøèï‹*>¤½™ìð—øK¸Ù£7SÞL€Ì%™K"kß’nI‘@'—ž\ Së§Ö@íÚ;‘ñGsæFÄ»½/{_dGð(ãa|aPœµtYº,]š„äÅ~ƒß™{¢áDžô`n3·@ZVZd¿‘ý<Øø`#´ìjÙ·Ì·Ìpú‹Ó_@vkv+,Ë[–À‹D$ò®5dÕú[æ[æ[æ«çöY>üåLGG9|üØàØ Âo„N¡“@ëÂïâ½{íî5""ò‡ˆÈ›ìM&"±ŒXˆˆz{‰ˆFöì'"z»æí""9KÎ""²Î´Î$"ê,î,&"ÿßõ’›ÜDü9ÚH) F‚Ûåv¹]ä`|Ä›y3oCëwáð—†/ êNþšËà2¸ŒÀ#ž{Ì=æïn Ÿª¿­>WZú±«ä‡¼òh’06­rZ%y±8IJ’ˆ(®'Ô"Rßn÷Üî!"r—ºK‰ˆ¦Ÿ™~†ˆ¨ørñe""É.E^„á¦p“ˆŠÂ[W2Ù:ÙJþgãæ¤Š¡Š×*^S²ÃÑäñøG'&PBABAB‘xQ¼(^lîW|KÞûyïË[ÕÃÆvöäÙ“ðAÒ}§ûÀ(uQWä(ëBÖðžñž€ "åü~€'ñ¶xúúÙëfCaõË®•}_ö}h”õÖ ë…õ·JÆíx7E¯Yë2tº W#K°Um+ßV®ä«“›æR\  é¦wxÚηÿ˜,J ·q€ïjçÕNh\Ó¸K¯|såmÔöÚ‹ìEX¦^¡µ|-_;VÈÍàfp3~Þ(\W¯ÔÕœ•³.>Æ5svÎδÚ$µÛ÷Ú÷BRµ»5”ŠÔªX®îdµ°]Øn3©hf2“Y4j¬¹”K¹b5ÙÉNv"Á-<n;§^­ÇŒ››ƒzg¥3Á™ 5TòÇïp°P‡9¾ë%Ù!;¥$ðmà[øX⪮Ê_•/oUo §â€8 íIÚœ´9i3oâM¼‰;¦+e˜“ß%Â]á®p—kMÝžº=u;‘®LW¦+“ö¨ÚÍ5åšr#µ²…lðA‚ À†0¤í¤vgL¿8úW¬v÷DÛy½ÜZn-· %´„–„~ÆÏägò3Ž8âè—“G“G“G‰„N¡SèäþN,‰™ÜÿméÕoT@âhwe)¯ð ¯\ׯµÝÿÑøóÙRÌd1u_8ê†Z÷nÙ5ÚIEND®B`‚routino-3.2/web/www/routino/icons/limit-7.2.png 644 233 144 2415 13061246471 14576 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÂIDATHÇÍ–]h“WÇŸ¦«ý u*®7Vz#b±è-F¢‚‚VRü*b™…}€2E/êE7Di­Ÿ0hê×*ÔØuT, Z›apEè\KuUÁZjƒ¦‹†4yÏ{~»HNßTÝÀ;ÏMòÎóüÿÿ÷ysž™‘þpÍuÍuMOa×.'ž·&oÍüŸRø‚‚¬Yÿ¬ƒÏÏ|~`¦¦ßîw°Ù7ù™õ"¦ž‰Ë q¹m¹mYž4®‡M¥›Jó¾HáAÈoÏokÁîŽÝ7.Þ¸È×0 ¼ö¼ö€ƒÍ¾É7õ†/“_êßÑœ›97³žBî´Üi"à^å^5ïÛTÂãy°~ÝúuϳŸgk¨1 Bí¢D1+œÍ~:ßÔ>ÃoôŒ~ÊÀì³Wˆ@å–Ê-ùÍ©‚þ+°¿d‰ÑK¶G9J!XQ+  ªU5 ƒ:@Yà`³oòM½á3üFÏè§üÈÔw{ÒKÔ—ô%' ÝѽÖë(WbWbIµ]SÇÐÊeÙ– úºnÓm¼·ì!{Àë©ÊSyh;nmµ¶’5ªFxŠ]•[•k žôf¼J‘M?’?ý Õ šä_ öv{;± Í &2PŒX殞Ðz¨§žúŒ¼ïi§tBmV›'+ÖŒFÁÑOùI»ðÔ®= ºÀ.3|O–>Ùðdúô遼§ƒà¯ñ×økàÊÀ•+0tièÒÐ¥÷;Ö—Ó—Ó— Ð÷k_g_§ã_ÿœ¼œ¼ XF/¥oü¤ÝÿZÇ[ÇÁ®Ð_šî˃‹ƒ‹¡byÅòŠå°2¼2¼2 Ò,ÍÒ ]]]Ž¡»Ñ»Ñ»Q(L& àïïnŸÛçöÁƒŠe&› ;dôRúÆÀôÛÓoë6Y:²4ó™uH‡@«ˆŠ8Ñs]çºÎuÁÎ;Oì<ñ~§WWW¡îlÝÙº³N|aÍš…5à?ä?è?èÄÕ:óÍè§üÌ,šYdÿááð0ðOúØ/гô,‡`¬i¬i¬ =\ôpÑCèïéïéïÉhU­ªÕÁ¡e¡e¡ePº¤tIéØaí°vX «uµ®à§€oÒzF?íç?;¦*­b«ØÁ á†pC<û<û<ûœxüYüYüŒ–––ý–{-÷Z àPÁ¡‚CpÜ{Ü{Ü ojßÔ¾©+i%¬}î˜K$ê‰zü!ÒÛÝÛ-"""씯ôj½ZéÃ+AÔA-RYVYVY&“+r-r-rMdÛùmç·¹õèÖ£[DÄ-nq‹öööˆÌéœÓ9§S¤ómg¸3,""1‰I¾ŸÖ3úÆÏ»§rò”Ü·z­^ç Ez"=/‰—ÄKœŽÙÝv·Ý ¯ü¯ü¯ü+ŽÇŠáe÷Ëî—Ý0 àÅ/μ8ñâ-ñ4ØGí£Àåÿ=•1Çê8À>fM{SùÖ:zœc“Ÿô$¶’w@ ªA HíU{IRG+­èI¿yÌcÐJ+­€*|ø@ÿ¢¯ëë ïêq=ŽÖmªH‘¤Qù”Ï'ï`UeWe›NM™üŸìå'{»ødïcŸæ ö_§lŒih!nIEND®B`‚routino-3.2/web/www/routino/icons/marker-65-grey.png 644 233 144 6340 13061246466 15636 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü •IDATXÃ…—{PS×·Ç¿{ç„„„  ¡¶DË¥b¯ˆP ø~ ¿Š¯v¬£øèϱr¯#Ž^(ŒÕÒJq´QlÅ'¢E„”G©ÂÅ:ÒŸƒe$ ¤#*6B’“³ï$úg:]ÿœÙçì½¾Ÿ³ö:k¯C²³³³³³¡À˜ Ž]h÷{È=dÚì³Ùg³Ï² ÜþÜþÜþ¹‘ÌŸù3ÿüͼ’WòʘMö*{•½Š}Šb£˜d!ˆÐ….tØ„MØÄ>•¤IÒ$i$‹{Â=ážü«˜˜‰™˜÷œÌ™˜31gbÃý¼õyëóÖʇò¡dá‡ÐâæRÐç€qˆC½ ä ¹B®Ðâ°:¬kàŒÜêÜêÜê F‡Éar˜êoL™>2=æäGåGåGQ“““J²bűâX10#`FÀŒÀ3ö<÷Ì÷¬÷ø{îß­çÑ÷ðxø8wç0_æË|…wÉF²‘l =* …ŠBð0Œa ˜‚)˜=Ñ=x `à}}}ñ ü«ò¯Ê¿âß}póÁÍ7¹Ÿ½¼½¼½¼{kù4>OK\ƒD$"ñџԻͻͻ ‰ƒÄAoŒÔŽÔŽÔ¾¶H½R½R½’_¬Y¯Y¯YÏý¬P)T Æ o o oÂVa«°TPA+ä ¹#1#@æ‘ydÀšXk„Âá8¾•oå[¿m~Ûü¶a¼Ç¿z©z©z)¿Ø£ïáñð‘\m®6W»p†£ÍÑæh«móýÓ÷Oß?YX†1Øa$mЋЋЋ ‚FÐøÒ8GãlÆflÆ KD"ä#ùˆ@j¨¡þ·y`fa€ø_â ËàŠÁƒ+ œˆ<y"’ÅZä¹EN ^±^±^±‹b9Á"XÄÇÿpÊr§HÎKÎKÎCª¢NQ§¨ƒ—0_˜/̇ŒÖÑ:ZXK¬%Ö@o×Ûõv@Ö)ë”uaê0u˜ ñ4žÆ–bK±¥x¨|¨|¨¨Ú©`—Ø%v àlœ³ášpM¸¾ŠJE¥¢#É’'$O@jyEyEy ‡ˆC>þåÃø0>ì¿2üüüðéÉo$¿‘LŠÜïïå|zìé±§Ç€–– æZ͵škÀé[§o¾\,¿X~±üEàîwÞï¼ß ”ô–ô–ôß/ø~Á÷ €Ëé—Ó/§•ù•ù•ù€KïÒ»ôÏ—yEõEõEõ‘"‡»‡ví>½0ûÂì ³™Ç¬.‘Kä=³Ó7Nß8}ƒ±³igÓΦ1ÆŽ³ãì8c=S{¦öLe¬ ± ± ‘±Ñ_Fý…±ÒîÒîÒnÆŠ%Å’b cŽkŽkŽkŒY[­­ÖVÆØf¶™mfllG „¡à…¾‡ÇÃÇá|‚OH-£e´ìù›I(OyÊöL{¦=x2íÉ´'ÓŸ»>w}r` ]']']Ìœ;8wÄHb$1€cÀ1àtãtãtã€CßúæÐ7€¸AÜ n–õ.ë]Ö D)£”QJ€-` Ø€d’L’ }¾Gßp'p‚DP‘R¤)ÙeËLËLËLô8ûœ}Î>ˆÜÀ ¨@À[y+olm¶6[°´ziõÒj h h h¸q%âJ0??Ð~ÚOûhm´6Z ¬]3ºfxeË+[^Ùœ_|~ñùÅÀ³ŽgÏ:úýþæÖYïZïZª©šªÙe*ýLú™ô3¾°gbÏÄž‰ìò½oï}{ïÛ瑵±bVÌŠ>ŸÏçó”Æ”Æ”F`zçôÎé@z]z]z@¿£ßÑïC‘¡ÈP¬Z=´zX}kõ­Õ·€ˆÆˆÆˆF`•r•r•«Åj±0~nüÜøù =ÃÃÃÀÐgè3ôási´GÚÃR¬ÄJ¬Ì)æ²¹l.›d5ìkØ×°Ï¥6‡›ÃÍáIS¥©ÒTX‚nÝ º èöêöêö¾øh~ þ5ø×`€†Ðø7ø7ø7GÎ9wäp[u[u[õbþ½ã÷Žß;°Ûì6» ¨zU½ª^ØÝe×Ë®—]/∈lj‹¸ˆë”—h­u­u­µåÇÑÜÑÜÑÜðM– – – ÑÿÛ?¹rÿd×®˜1+bVÐå;wéYÓ³¦gà6l<t}ÔõQ×GÀœ3sÎÌ9̼<óòÌË€ýû;öwííí %¤%¤%Ð=Ð=Ð=úúúÀ¢Û£Û£ÛÁ]•_•_• #º8]œ.Žn“...øuóŽóŽóΪ…dÿoûÛÿ€;¸ƒ;ªcâ~q¿¸¿Å{¸v¸v¸ö5MJVJVJKY¿(~Q‚à¿öÇíÛŽŽŽ»Éýåþrÿ‡e]Õ]Õ]Õ¢Bmº6]›ÎRÈv²l‡D8'œÎÁÞðØbCá OxØžžžPZ?­~Zý4øÉMr“Ü3…™ÂÌ݇ÆRïѨ;¹ËøBÏDž?²ž°&’ÇÈWLŠI±àŠŸû²Ô"µH-®ÇtÝG÷é æ„ффQ\Ì¿—/ÿ°åÁ–[›m›m›maŸóù|=ÏÇóózÏæ!ÂêH?å aLÆú–ò7”T”T”T¤–ž¼~òúÉëlºØ?ì B„ˆÆ1Žq}èC û¡q>Ÿ¯çùxþÈz)_<›Xf €0Ð÷WžÀÖnk·µ+¿í•{å^½Kci, ŠZ®–«å€š®¦«é€š§æ©y?4Îçóõ<ϯGÔ·ÌÔѨ‹º¨‹é°tX:ÜØÅØ«ì•öJ%O{Ÿ}Ä>‚_iœü`ò€õÉ?È?˜T/¨ãcîâ.¨ª˜TSÕT€õ)¯*¯Jã„s °÷µ -~žß^e/³—)y¼>çá|ÄÔoê7õÿnŸ`©°²b }C¾Ÿ|?a$”ǯ~"“(ü!Ã`ì;X‡uÆ8‚a¤)S?ao³·u×ïòñÁˆ¥Âò™å3¶óè|Òi´§ã08±ýĶÛØ®P‚€â’kåZcÙï?ÿþs8½øôb¸¸ñâFPZ•VPj•Z8ï9ô¦tp¸ =& šî4ÝWϲžezöÀ‰íÇãŽÇ±]ú›à#l0!5!5!Usç>Ît£ ’ù3;¯;¯S} –‹ÑÏ¿” FÄf혵Ã8Ne*Àtût;(žÜü]ów:¨ò8÷‘ç‘à<œƒÙttÓÑMGÃO¦öjZ€Aziì¥1x³ôÍRã&Þª½Ukjéoé7Žß¾aô·Öo­€¬»YwÃùÕ^µB­×ç<œOµÔ˦SŽ)Gï±²“^¦— !säy„BÖX€Bv÷ïî7ž±ñ±ñFß4þ «^XE!m%m%„âöBÈ™wϼK‰ Mk`),%\ßä1yL½åùùÊ 3k2k2kp‚NÐ àÎáþÀºX—±äŸåŸ :»:fÖά€âWŠ_‰h®óì¼Ñ·Þ´Þ€R©T …o«o©oÌÊV²•`|¶m¶m¶m6îs>"ä yBžü(¨ª/®ß[¿× Xþµ§«§ @0}CúH.L.€4LÍas@[¤-2~íýÚ qåqå_™¯ÌÐýÍŠ¨ˆázWª¯T_©ÖoÀÝÔJ­Ô*?"ârq¹¸¼¬’wYò/-m–65Å÷ûÞ£½aÍúYvæxæ8¬²­²`C_ }e7›`"e"Å=ýõt°ÕØjBá ¡úÑ`- ©e©e©eš~ˆsŹâÜ/GH|N|N|!ÒUéªtÕ9 ø›_«­^-†¾úÐ3êgÔ#7=KÏLûfÚ7 t Æfj&ÍÄ{!öÿ‘[GnüdÖ¾”Wʆ­.ê,ê,êÔ:àNq§¸óS~Ü ‰´¤ã&«T+Õöæ åï|úΧ,h¿Ö~ PfŸ>5 4,hXÀßx£ñœÚj?üØùc'° – xvåٕзºo5 n7>McM#M#Ø _¡•B¥P9‘KçÑytÞoNFŠ×ûkí¢]ëꨓ “a€a‰°D{Ïímµ¶ZáÖµ[¢íÒvJi ,ü¾–­µkía) 8œN 96969VÙ£¿ÉƒâAñ Ã®£å‘<’'Y¬Y$‹dI‰‹¸ˆ‹qPì;Kÿ¢_­uIb’¨˜}z&z&ŒÚ•säP_T_ÀØUv@#àVn+·V Õ`øq¶þm«w«W-Ño qi\wJÜ›¸7q/!‚]° vÚ¢ÛÎ1g„> Äûâ}ñ>m]¸áþ…û 1™ŠLEîCºv³ìYö,µ„ÔšCs 7Üpx‚'xbèêÅêbuqøÝÖdÔdÔd°lý.7›Ì&óÀÄ”o‰%FÛ¢¶žÐ(÷Z¤o‰5YMV“Õ×Ö®£ÜQβ9€bVÌŠ9 ¤=ÔjÃZìF7ºw\w\w\7Ë×5/Ä ñoü1JŠÇ£øbȳbA»Ûè¶uùÔIÔÉÏ9í=·×íu{ÃÚU¼ŠWñ†•û4ñiâÓD`Éè’Ñ%£ê¯t-zDèùÓ .µô¢Ažcá ›ùD½Ùoò™ü¦ž©ŸG «,«L¶}¸íÃÔSñ†»gáÓœOsL½h7pˆC¤Ñ#±±Ìºª®`Ã6óf½Ùoò™ü¦ž©ŸÇZ¥&"Ò\ ¾!ßãÑ>}$êzÁø)ú0úhbReLãÆ8è#ú°> Æ-ã–q ëL0Êè ¤Ôz}‡¾ƒ¨Œ¦EÓ@ý9ξˆ/L˜úæ*äµBj$5IæàPßPð=›A½£ÞAã?tÒ ªMµ©6`Œ1Ææ ÒB -€7îyñµ¬e-PJeê=õüHè™ú?Ç瞉ˆ´_ÃS»·v¯ÉfÞÝ8xqð"4ÿ«¹¥¹ucäÆ/7~±ôîäßÉ¿“Í­Í­Í­00<0<0låãÆq㸅‡‡‡áXòÑ™£3¨ÓÃဥ§þW[Z[j®¶ýšÝ""ƒîƒÝa8k"4Re6¦/O_Î\Í®šêšjÈ}–û,÷œ=röÈÙ#à]â]â]¾Ó¾Ó¾Ó°X-V‹ô?êÔÿÈh48 Bawawa7ä—ß›ß oE–[~Œ¹ÉCê#\\õ÷øÎØàyÝóº<÷TxJ=¥"9õ9õ9õ"Þo‡W„VZiq7¹›ÜM"W ®\Ùüdó“ÍODÖµ­k[×&²Á·Á·Á'R¢•h%šHÞÚ¼Uy«Dª·mbÛ„{ácï«÷ÑÔgªI5ÊSy*T§êTÖ ªBU¨ À‹ï<û uÔQåPNåDSLðïz8ô 5œŽ$óÀô1ÓùçLç­I®IÅY]Ö'ô àx, YÎO#Ÿó9¨Kê[õ-p†3œ~CCõHÝS÷€™Dýe#ÅH!ªô}è1?¡÷üeçuÿ+_Ù×Å+û{5_°ÿ8ÁiËÍIEND®B`‚routino-3.2/web/www/routino/icons/limit-25.9.png 644 233 144 3144 13061246473 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–ÿOÕ×ÇŸ‹Üz`¢´¬ #µM‰-ߪHõZ¾¤1ƒ…€b»°5SûÚ©©Û2%¦@o"!6ÓFVV²ª,ŽdP+¦*ò%£Ð@”¯b‹½\ ÷óùÜóÚ—Ï.sÿ€ç—“÷yžçý~rNÎû _™bb~âÇýë!{BöÄÿÙ‡ °äYò~ auauMMÞa?6ãfþêz?ÿj=s]ÂÅ¿|-øš%cŸ‚wSÞM ‰ôá³`mµ¶ºu(ÿ¢ü €Ï›?o¦¦{¦{~Èø!üØŒ›ùf½É·š_N=£/k¿\û¥e‚ƒ‚ƒDàÅ·^|+î×¾„Ñ8p¼íxàᚇkT6•¸paŽùUØŒ¯ä›õ&ŸÉoê™ú¾~6¤oHw¾sÐzÉW0ü)9cêi­ÀÎ`Ý¥»Œ"£ˆePª ðc3næ›õ&ŸÉoê™ú¾~üG¹$"r. F FÀÛ uë£ZŒ*XÕcј@'Œ£ÆQ0#ŒÃÆaã0ð{>æcžÊ«é‘z$šþ½¥E:äã‡W øÞÔ7ò""‰Ÿ€Õeu¹•g¤{¤8@.¨7Ô,q–óœÕ§úTß*IP(°ÄK«:Ò•®tàwœá €JWé,Q²Â¿gEoEŸ~_?´ˆHCaGJ”štÞí÷ƒïTÞ©„ó©ç·ß†ðhš_°e}Ëú–õPŸ_Ÿ_ŸÎBg¡³m‹¶EÛÿí÷ï'ÞO„Ú×j_®}õÝè·ußÖùõÔwG¶ÙbmC—߈ˆ|S m´}}¿Û9¶S•Ù­õÖz–3fŽdŽÀæ›l~ííí§ÃépBQsQsQ3L O O ûÜ=¸{p7Ä?‰ÿÒ¦9Ò°ÝžüUòW,?rF§*ƒ–‚–P%¾~$ts3õu‘ìÒìR‘¯ >j¹ô›†cÇ:$¸#¦cKÇ‘ȰȰÈ0‘Fg£³Ñ)¢WéUz•ˆZVËjYdÿíý·÷ßÙ´uÓÖM[å¿£×ÓëéõˆD%D%D%ˆt_ínën y%ä þ[þÕš«5–K"ŽyǼˆúç ã/Œ§¾.h!!Þ!Uþ(÷Q®ÿÚ÷ü¬;®;’n&ÝLº Ð9Ñ9Ñ9e³e³e³Ð´±icÓFˆ¾}!úܰ߰߰ûwl|n|n|RªSªSª!'.'.'‚έ­^[ —ÿúYìg±Ìƒ×굂î ]ºÎ; >ѳô,ËÅ´-h›È½_WWʆìªìüì|‘b{ñKÅ/‰Ô'×'×'‹Lžž<=yZÄî´;íN‘ÒéÒéÒi‘ØþØþØ~‘ÙùÙùÙyOº'Ý“.â®q׸kD’IŽ$‡Hæ_2[2[DÖŸŒ(Ž(‰?B6ˆ¸݃"9hh–¡õG÷u÷õ»_‹ôvõv‰t߳߳sÈmTOë¿[ï¶Þ‰Ž‰Ž‰Ž™(™(™(i³·ÙÛì"¶Û‚mA$+5+5+Udß}öÙ•°+aW‚ˆ-Ðh yZô´èi‘HmN훵oŠü¢½¸¾¸^<;«^­xµ‚CR~ýÃëŠìsënýî×ÂÙ•[ÉûÇÞ?O¯ùnÉÜÞ©´©4˜ìžŸGMåMåNå‚'Ï“çÉmHÒ†`îÊÜ•¹+ ÆÔ˜uY]V—áñŽÇ;ï:è <û={={afjfqf¥îé¡z(ÐãÓƒ÷ªß«ŸŸ6t­¬ßÇÀô•Ÿq©Héw&Õ¨U#¨‹ê¢º¸Ê¯êTª2È c•Ol'™dP?W'ÕIï¤w’%õÓþ?Œü8ò#€uÖ:ë dÒô±ÿyÕÏes¼ ¼ Ô§>gVÿ2l† Ô}A_@£™;ÜAqšøÔßU»jnq‹[€Û÷Vª 5ªF¯oþdŒ£hªGŸÑg€>Óù ×®´gÿù}+ŸÛßÅsû{>°ÿdƒÑ¯µIEND®B`‚routino-3.2/web/www/routino/icons/limit-5.1.png 644 233 144 2512 13061246471 14571 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÿIDATHÇÍV]hW=³qÝD%‰!‘ .‹ „ˆBAP²®?Ùªk”Õ· ƈh𥩵ûP4FÛ@$Mm‚AcŒ¢BkuEÁ"Õ˜¢¸TmHÒICp×5ìîܹ§;wg¬…ö1÷a†sï÷s¸w¾o.H@¾ùép;ÜŽÜ4vÔZóÙk²×¼÷CŸ¤¶QÛøÛgd^c^#IÎ<3óŒñÄÂj]ÅÛó‹ß®§æ‘kÂÕéêÔ<&>Dn)ÛR–]”Æ_‡Èœ®œ®¸NîêÞÕM’Z/´ò2r7r—$Ç=ãÒÂj]Å«|ÅgçÇ¡è¤óŠóŠöéšêš sWÍ]5o_:à÷y¤­-If fII’b”ä Î’1ƨÆ_6¬ÖÍx•¯ø¿ÒSúi? + +²ªºª:§%ðä{²nNÝ¥—ê"ÙÀÎ õ˜#IA&H’!’¤F´°ZWñ*_ñ)~¥§ôÓ~ðöÙYI=0%0%cèo‹Ñ@ŠÏ“ýÉ~¦Ä±Il¢µb»ØNò+æaÒ¶g£µ Qaì5öRÊ/õ!}ˆ)ÒÈ7òIFM~²ÙÊà‘•¶£€ÇÉœHN$6…F8Nex?d¯±ÐXÈ7ÉÌIJó)I4hð!ž‹çâ9)»d‡ì°-ÄŒ*£Šo2ü ‹° 3ú¦ÓØéÛäîúÝõ$¿#Ici,1–úÇúýåùšóÁóAòäæ“›On&›ÍæùÚýÚýÚméÊ<™'ó,j 5…šÈ/¦¿˜n…É[©Ë©Ë™}]”Ñ7ý˜Æ~ý”lÕþŠ”?‘¤¬13#ߌ9F———“UªT= ƒ­ÁÖ`+9Ü2Ü2ÜòîŽuÎêœÕ9‹tv;»Ýd{e{e{¥mG=‰Ä¦Ï¥¯ü8€Ü›¹7ßÿ¨ðVx9Z‹yÒ®{Á{µ÷jØòØòØru¨C°þþúûëïÅ5Å5Å5€ôIŸô2$C2hQ-ªE¢SE§ŠNÒ+½Ò käf-ÎZ Wh-J_ùqYþ,?Kç%ç%@Œ©ü‚ã' NÕ}Õ}Õ}€°¿téþRàzÏõžë=€ãšãšã ŽŠ£â(HP/—Ɖñ‰ñ‰q›± ÌÆì SúÊ0zŒí1 oÐ7øP¨2"½‘‡‘‡@‰^¢—èÀŽÀŽÀŽà~ä~ä~¼Ô^j/5 ê‹ú¢>@Ô‹zQoéË>Ù'û„FØfLà)žfPaFßôãbž˜çá/À­·nZ3p§™,û¨Ì_æÚ¶¶mmÛ ä¯Î_¿ð–{˽åÀº³ëή; ¬(YQ²¢ˆ_Œ_Œ_´ô§5MkšÖ8}NŸÓg3¶DæÉ<$ÍÞ°Ségü¼S•ªJ®êçôsV%=ɥɥä¨cÔ1ê å3ùL>#e›l“mäØÁ±ƒcIC7tC·>òèüèüè|2áJ [˹¢wè6½¯J[‹…ÇÃãV“ ú >È7ò[yGÞ±µ…FÙ(IV²’¶jc’I&ß*Єª=ÓÄ6cÛÿîc¶ÎÏ€+à"©«Î,‹Ç$÷‰^ÑË”üYËaJþÈ«¼J2žþ7Ê!9$‡H°Ÿý6…\Æe”üB ŠA¦Ò­—dê?;ÿ¤ýWNÚÛŤ½MÎìßýCšeUÕIEND®B`‚routino-3.2/web/www/routino/icons/limit-112.png 644 233 144 2541 13061246470 14572 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–_h“WÆß$¦ég¢m$õƢ˜e›•g 4V766,£ EØ&ìÜP«V‡SØTÄŠ"¨ck ËVYWQŠft2Q*V…Ú:YX©™ÅôûrÎoéi2³ÝìÊ÷&¼ÿžçÉy9ïwDD¤tòWÀý¼ûy÷̬ïþ(/®)®™ßžõgÀõžë½; ä`ÉA€àñàqõ[Î7ySŸß/’ÃÏç3q)•\ÀóÅ\‘I¿Þ¯x¿¢¸,ëë¤uò±ë~\÷#@ç×_³üòà€ÑÈhr¾É›zÓoðòñ¥å)~ðžòžrÝ_‘¯HÊ£åÑyg î̃wÞzç-€ûžûí€Ì@€€Ž)RKæù&?Yoú žÁ7|†?«G ´,´LÞ­{·Î:–møí[øô¹OŸ3|öI`»€“rR™Õ™Õ¤AÇu.Èù&oêM¿Á3ø†ÏðgõÈ?gûU5Ô×ì^P%ªÔ2ûûl½S¯¿Gó”©*U¥ª@ïÐÛõö¼ø5e+íÜ›X4±[=±ÿ´ÿœúý¤W9«@~Éôâ”5l §¦Á€PS¸ofvØ3®Ð7õÍ<%†L"“È$@·é6Ý–—Nê¤N-4Ӝ׷S½¬^f\§³øp{îí¹À¸•°©iFϤ°Ã?CCsÀzU_´»íîOüP|_|ÜuwÖÝYX|O|O|$B‰P"”‹_¿týÒõK°ßþÝûwCß¹¾þ¾þ܉ëX–§¡©¡ÉŒöðϓ®~ÂåŽs瀃úP£j”tlv, €w«w«w+´'Úí‰qG]G]GxVxVxV@W¤+ÒDQ¢(QVØ [a¨ž_=¿z>”¯*_Y¾®½~åö•Û¤'å} †ÛúÛú°«Ÿ¸Ef^˜yáµEò¸ª²ªRDED\Ç(æ÷Ä'¿Ë˜Œ‰”í-Û[¶W„A”)s»Æ]ã"¡`( Šxxxˆ ÕÕÕ‹l<±ñÄÆ"çÏžñÏðÏöϹVÕ·®oø&QޱmiÏÒ‘)=œœ¡ú!9œÎ]ûLÔyÅy%w2ÑÅÑÅÑÅp´éhÓѦÂQF+£•ÑJ8rëÈ­#·òFÜoŽ7CÅŠ… a­³ÖYë€^­–«åykfc²6Y F[Dý¤~rõ‹vÞvÞž:ˆxeH†r'£mmk[Dîȹ#æœqÎ8gDÉ@2±F¬K¤zSõ¦êM"k–¬Y²f‰Hkcë†Ö "ê„Ú¦¶åñ}ät;Ý"F[$IE®]÷Å /˜:>”—´W{eÂDüþF£ˆ·Æ[ã­)6]¦Ët †C"½áÞpoXD…UX…E:ÃáΰȜî9±91‘îT×Õ®«Ÿ•Ós¶ç¬È”žÿº•œr:œŽÜ­|ôÆ£ÊG•ö¥}i_á(ÇÔ˜S0áŸðOø!½>½>½ª‡ê¡‚áÞážá9:rzä4úÉçmþksßw /4¼Pp+_<ÖëAj d2¹=ª^Õ3ž§!mîÒÿ3=OÏ›Â{zz¬”•*Øcÿ²ùmÈnþì¥,³%³›Ïˆ+Üü”RJ)pˆVZ/h¡t»¾¡o õ¯™`&ˆ­cΨ3 ì5øµžZð¤`ó?³ßÊgöuñ̾ǞÍìß¿•ÜS… ÒIEND®B`‚routino-3.2/web/www/routino/icons/limit-154.png 644 233 144 2640 13061246470 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜUIDATHÇÍ–ÿOÔuÇ_ÜÁÁ5NiÍFkB?à¢Mk0[æÒÑÚNX€(ó‡ŒF­õÄY[Ìü‰_ Ó‘:ZwÛQÆìò‡Zâ±sÃMcNƒÝÊ]by6Sáø|y?úáxßç¬þ߿ܽ¾=ŸÏÏûýú¼>o)Yùp=îzܵ*c»:ÑËE/W~•±‡,ÈkÊkºü¬X=ðð±‡ÙÓŽ­ã:?·^ÄÁÏåÓ~)ÇQ* åm]±AëÓ­O=’±?‰€÷¤÷ä]Þ{c à›ßœàmHœKœ˜Û:·[Çu¾®×x¹ørè_ü"P.çÅ¡ÐSè'^z⥊w2 ¿V€»;Àu÷u·r€•Š)V[)ôº•cëøJ¾®×x_óiþŒÒK_ƶÆ6é/¡§¼§\ó'>ú(3e¦¬v«4¨ˆŠG8¶Žë|]¯ñ4¾æÓü=rÿÙö×AsQs°`DÁ^m¯{³qÌ8†¡>S?ªQZ²õ¾õžõXë­õÖz°:¬×­×ÙǾìN*µÎüØüÃÞhÙŽrçUãUC ì¯Ë9J‘ªO±½xÿHåCÌŽÙYÀzëªñ¼ñ<÷Ô×jFÍଠ&˜nr“›9þ%–Xʱ«x’'A]RójÀŽÛqîq7ƒ±;±;Þ¿¼¥òµžaCÐÙÛÙ«Ñì ê¬ññóÄ‘ç"ÏDžxK¼%ÞâðŽVŽVŽVÂ`Ó`Ó`ÝtÿÑý°ÐºÐºÐêäÅNǾ} g;[s¶ÆÙq•Èðatè< wnhbEØÅ}œüøP{Áž³çH‡ÊBÅ¡bÈïÊïÊï‚љљÑ0GÌsJ{J{J{ q²q²qv/ï^Þ½ 7Nß8}ã´#¬²º²º²ê¾®©ɺÓöC+|×——´°‹ûV¯W!~úóöŸ· Uh]´.BÈY! Ê’eɲ$„ËÃåárˆ¶GÛ£íà÷Œ{ÆaÇ­·vÜ‚`2˜ &œîúîúîz(¯/¯/¯‡ÏíÜ´s“·¶ë‰gÏ‚ÖãqûÝ~ž’mž»ž»¢×ßj {Ù+Òâjq·¸Eª§«§«§ER5©šTÈšþ5ýkúEÚ&Û&Û&E†††Dž?xþày‘]ñ]ñ]q‘ð†ð†ð‘-U[ª¶T‰\h¾Ðr¡Eä÷×â ñw8ÃÇ'ù›ó7‹h=.û”}*ïQæ+æ+Ya¥R ³2›µE]S×Ô5WÊ•r¥D±D,Y—^—^—éèíèíèY{yíåµ—Eæ¢sѹ¨HíTíTí”È”Ê?噜˜¹òÅ•®|àð1¹üèò£"Y=Ù#p;=Jµ×êY.[.#­= Á†`C‚ÃÁáà0$=IOÒ¾ _…JêJêJê {¬{¬{ Œ&£ÉhrŽì¸ï¸ï¸ü'üŸû?wzÌz[÷´æÏöØÿ¿•„Í€pZná……Ú…ZX:³tféŒC˜^L/¦!éKú’>PÃjX ƒ:¬«Ã`GìˆÅM‹7Âüoóéù4ŠŸÍˆ¬¾;]]ÿy+«>o›HåCÌŠYÎ{½‡{9ŸŒÒ>Õ§ú@QGÔ‘ÿ TƒÀ6¶±-§`N'ØïÚïr#;ÇŒ˜ÿ}sì&¿±2™±®ZWG¬Ö z pæoñ&o‚Wãjøž0aþ½‡¬ëÖu J̘Ón#ŠÙìnvëºoò?°ßÊövñÀÞÇÌì?co&ub¼iIEND®B`‚routino-3.2/web/www/routino/icons/limit-28.3.png 644 233 144 3044 13061246473 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÙIDATHÇÍ–ÝO”WÇÏP„¡ ¤« £âE%!-¢²‘›ò²;L[ÑZ»2YÄĵ‘—ºé^hB"aˆ1Ø%4² * “Ö®]FkÁ‡]tÊK ÙŠ•J†2ÎðÌs>{1óø°ý <7“ïïåûýfÎs~çBñjôW@Ì–˜-1‰óG=n,1–dvGp[ e†²Ÿ@RkR+@rgr§êÓ±–×ê×ö ¡ó¯ÕÓââU¡â{â{ Ö(>åÙåÙÆ´n¾¦^Sï/ TõUõ\ýüê眀G·ÝøÙú³t¬åµz­_ã[Ë/ÎüJ_X÷Õº¯ ³'XŠ,E;NF ¦vÀ;¥ï”üôÊO¯È?̘¥ðãG[OÖ`-­×ú5>_ÓÓô#~¤¾•ú–pðýƒï›:" ¾/ >£>CÓ[íiÄ Š_ñ„? Hä-y б–×êµ~Oã×ô4ýˆ}+W„ÂY‡'O€: °:¤Ì¬ZV- ú•x%žÕ¨S©N«>ÕÊʬ2 2NÆÉ8ôåg‘ÅHªŬ˜YUf£|C~MO××¶r@!^¿&¿Éï•¡‰¡‰!à 6{å^Vèçk¾õ¹ú\}ôÑGß#Nœ8$’HZ?ÍiN7d@æÈV8åO‹êEõŒø<Bˆ¶ïI:Vy¬RcSß¼?R7Rç?9ÿñù‘£ßºGݺވmÄ6bƒfO³§ÙÞ\o®7WÏ«ê€: c_¡Ï곂³ËÙáì@zf†mÃ6]O†Ž•+Í{„ÂSýõÚÞ?½_:Ì˦‹¦‹­ÙÖLk&doËÞ–½ šòšòšò`kúÖô­ép$õHê‘TÈÌÌ„»Ïî>»ûL74i™´LZ ¥)¥)¥ ÊÓ˓˓asðµö×Ú þë/?ذKôÓ„]?1bÃúÏÖ–“'Daea¥ÿÝë«ñÕ:NµÕºkÝ"þÆýÓ7¦…0ï4ï4ïÂsÇsÇsGˆ”ñ”ñ”q!JKK…Ø4¼ixÓ°CÀ0ˆK©Qj”!ÎÆž=+DÅï*Ê*Ê„øÍ_7lñ¡²Eç¢ÓÐ!„õ¦õ¦†ÊõÖ?Èɬ&“꘬zl{üâ¯åÉíßíÚYmYmYmpbôÄè‰Q¸”y)óR&ä¶ä¶ä¶ÀÊ•*!³.³.³¼ÞoÁšö#,–Ë8týÐõC×aKeFiF)ÜóÞ/¸_ÀØ6PÏ%~šø©:&Ôfs©¹TöÀRÃRüûøXíX-˜®ëõÐØ×ØÛØ«ë”T—T—TÃÉò“å'Ëõx–;Ëå†vW»«Ý¥Ç;7vnìÜ»wíÞµ{—ÏyóÀèz»»¢» x!xÂé S S²G(µoì›ýßì‡Ö¡îÖîVéXw5æÝ˜w îØãÚã‚´ñ´ñ´qhœoœoœ‡|™/ó%$&&B•·Ê[å…¹+sWæ®À>Ç>Ç≯gÜ3n(n(n(n€ 7o(†?ü烚jZ¤¾œýräRÄ 9z*9^{¼=‘S²ðû¹ü¹|x8ôpöá,rîí¹â¹b  …ййÐ9Xp.8œ ;e§ìé’.é‚§EO‹žvìØA¹¬\V.ÃÂߺºá‹!{È®ŸJƪ-Õmà¶}°úm®DçŒ_¦É4V^LJ‡tHÈ^Ù+×l±L 2ØÎv¶¯‰«2,à ÿ,›d€´K;+ÑËÊÆÎ‰{÷LK¦%,ÃÚû¿[ÝYHýáªÃU ¿ˆLfy'l›AþMYR–X¥ $§9Å)ÿ”ßÊok\ãð Ë,ƒüQNÉ) ñGKx2<ɪü‡2¯ÌíÚä/ö½X øëÉÿòÞ•/íëâ¥}½œ/Øÿ5`ù1!IEND®B`‚routino-3.2/web/www/routino/icons/marker-22-grey.png 644 233 144 6263 13061246465 15632 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü hIDATXÃ…—iPT×¶ÇÿûœÓ6Ý 2"H¡43c˜œ™¼Fô`¢’¢REû"MͥīaªŠ‰/¤±PbxqH®Š‚@˜žà#X8€tÅP .ÝôpzïûnLY•Êú²Ï>gíµgíÿÙ{’‘‘‘‘‘{ÌÚÄlíž O…§¬:ã|ÆùŒólaö‹ìÙ/þÀ˜s8öߢ‹è"ºïÒ—ëËõåìk¡E$¾ð…/€Gx„Gvav±¯¥›¥›¥›Iº0$ C÷‹È8'ãÏf¾™ùfæ›u¿æ$å$å$‘aÑCô=Hì,½mæ²çæW`Vp—h6ͦÙô¶AcÐ4Î!ÙÙÙ—ú ÆaÃpíí2í2í²àXŸ°>a}7ƒ×¯ ^GÒC%¡’P âââXú–çËxK¼¹øæù,ó[x,|‚9ƒ«™³cv4‘$“d’ìq‚÷à=x†ï455—8:Õ:Õ:Õš¬{´îѺGœ1P¨ T‘MÒtiº4ZÂ!‚Zh¡ð1>ÆÇ\á Whõnz7½6©šUͪff¬÷­÷­÷¥ÆÖ­[¿ó¹‡ÜCî±ÒÊ”lJ6%Çœ`J¦dʧ‰ÜjrDwDwD Íhv³Ê…r¡¼ù_†ÃŒafÉFE„"B!®HØ“°'apÉ~Ê~Ê~ ,À,€È¼™7ó†€ô € l``Ó˜àø¤—ô’^ˆÅ(F!LØMØMØ¡¯äTÉ©’Sbb_S_S_“Ð:O6O6Oö[•¸YÜ,n^»k±kŸý›“ݕݕÝ$ % % ÞÒVi«´UK6*âñŠxq“2I™¤LZííí±ÀTf*3•4žÆÓxpƒÜò#ù‘ü~ÒOú2FÆÈ€+¸‚+¯üM “Â¤æ«æ«æ«°À_ñ¾â}Åûâ&Ëü 'N‹Óâtlˆ¡ÌPf(KzÇ)Þ)Þ)žy%\L¸˜pQ°hdŠºSwê;>Žããî4wš; +ä ¹à(Žâ(€” 0gd‚L‰Wþ|ßÇ÷¬˜³bØYâ'4&4&4 —œ¶8mqÚ¼,<>ù2_曵Õhm´6ZQÙQÙQÙXg_k_k_‹y4šFÓhȹ&®‰kF¬F¬F¬€´´4ÀvØvØvðTyªΙΙΙ€ ݺ/tcÎ:3:3:3€¼õyëóÖÿÁŸcçp)èRÐ¥ `v›š6/h*h*hŠZx,|‚^­WëÕ8‹tY‹¬EÖ-«bU¬ r²‘l$ u…ºB ÛvmÛµm085858|þmø·á@·²[Ù­êP‡:ËËËÀ‡öÚh Æ Æ ÆyÁyÁyÁ@HAHAHàø‚ìÙ/²_ ]¼jñªÅ«þ@ý@ý@c¾Ä—ø’ør—¹ËÜå¹7“’cä9˜Ô&µI ~ø}à÷@øáo„¿ñ*s‚JP *@Ú!ív¬™5³f pQà¢ÀE@øÒð¥áKÿàß)t €T'ÕIu?ÄñCxݤÜGÜGÜGÎà Î_wá]xve*l*l*Œ‰‰b¢˜Oá”pJ8Ƨóé|:HÜ™¸3qgêB]¨ ÐbÓbÓb4Ô4Ô4Ô+éJº’þÕþÕþÕs ¤4hÙÛ²·eï+ÿUKV-Yµð)ñ)ñ)ðÞÁ;`x€x^ó@ó@óO¸MÜ&n»‚,—,—,˃o|ûàÛô«{¶÷lïÙ2‹i,cÇŽ=d¬ÀT`*01–ûiî§¹Ÿ2ÖîÒîÒîÂõ£~ÔonËËËaì4š?ÍÿÁaûÂö…ŒÍ0ŒÑít;Ýþj¾'ï=yïÉ{ŒŠ={(–íÎ<žy<ó¸á…0ûuf ÑB´}ôŸµµµ&…Ç 7ø>‡8‡8‡8L]¸p9v/𤺦º¦º²AÙ lÐ3=Ó3@ )¤®v\í¸ÚpÜ7¤†¦†¦†²!Ùl0¸\ ®€À&0èM¿™~3ýyeSeSe]Aœ‰3qæZI$‰$‘ßMð;4;4;4·tÙºl]¶÷®ÉÆÉÆÉÆ·¿P÷¨{Ô=¦ý¾|7ønà¶Ü¨¼Qy£úiù´|Z¡õzëõÖë@ýÊú•õ+Ò@ _-_-_ t: @í­öV{w”w”w”@½®^W¯j k k ÁÜ+Ü+Ü+ Ü?zÿèý£TÛþsûÏí?s—ùÉüd~ÛmÆ6cÛ±äÈïG~?ò;€6´¡mÑIÉÉÉ…Û2M›¦MÓ¶D¹6emÊÚäääLG}F}F}Àø[ü-þ‘‘4ŸæÓ|`Qò¢äEÉ€:L¦t‰ºD]"€Ïð>ØCö=¤;¥;¥;¡U‡¨CÔ!ø ²¸²¸²•ÒNi§´S·ž±"Vüüà¿®ÝWÄqEü]Ô¢µÏC麇îI.°ÚmµÛjwZ£Z£Z£Ø[Þ¥Þ¥Þ¥ä§ÈÈHlfj¦fjÈÉV²•l†4¤½úlá çÙºl¶b+¶(E)J1¥-Ök‹awSsSsS#*ø›üMþ¦n𛿦Sºœ.§Ë»v³<–Çò7s™g ­…,r†œ!gSùëüuþúrVÉ*Y%—_ÒVÒVÒ&¦Œ'Ž'Ž'ÎNQgêL¶€-` æª%°l#ÛPUQ@¨u‚Þüveueueu¦ý///ÂI©D*‘J~Êyk÷[»ßÚýM2‘‰Lò/ô¢½bŒ¹Ìƒ5úÑ~ñW„"¡¤<àxÀñ€ãy›»bºbºb³'7Ln˜Ü°câš×5¯k^¦ýJ(¡ŸG²HÉ‚žD)<á OÀ"  €‘ˆD„´åqËã–Ç,úÞ“{Oî=áíªìªìªžé i†4CZÚWíaíaíaÀìJc¾™ïKá¬5·—© µ¡6˜ß1Ø1Ø1ööö¥}eí`í`íðôò£ŠG*ø¼êmÕÛª·±h’JRI*¤ô½@/€Ad›d“l0ÎŒ<y<ò?Õ.­]Z»ó­‡­‡­‡FÃhXÚW\.—Ëå>Ó™¥xr‡ÅÎ@M™I¤æ®y‰ø¼Yíšö“dY½eö—£áº1ŘbL¡{wÒt'åÖæææb3í¦Ý´rÎóãü ÓÅt1Òïïo“ÏðòáåÃËù«¥VK­–æ­d<ã •ÒBZ(œ4¯ì§‰ääääää`Ê’Q˜oÌiȬÝýfíž$'È r¢±Œ‹â¢¸¨åPB %—_a¬0VÅ”‰³g'ÎBÎqÇq˜´d¢n¦n¦n†jŸ>+|VÈ÷X¶:luø×›úçúçú燿éy·çÝžw3 Â±úÄꓟrÆ]Æ]Æ]„‰«W3®f˜ö›+úù*G•£ÊÿÛ|·ùnó]’(ï–wË»ª  ªØ{[Ø!ìv̬ò õ õ åÔæùþËÜμÎÅãO,22222¢¹«bóØ<6ü}ØØØÅ&w“»ÉýŽ(õ’zI½âó_ƼŒyãX:Ñ5Ñ5ÑÅþ§ã‡Ž:~0­ž6N§ü>ÉÉÉšÏÝØYv–ýñæìÆ÷A 5ÔÔÕ²æD‰¯óü…ý‰v³QjT›2Y9+g命Ü5îwíÿ¼tqº8]õ—J %…\¯ä•¼²¾Éûš÷5ïk‹|Üû¸÷q/©™ÝÖØwæ¸f@íŸqpø {M»æí”‰T¤"U¸O’HIºåͪY5«>ø±l±l±l1×Å÷óý|ÿóÅô=F¥ voïÞÞ½0ï»^æx–Âræ¯8þßí$·×¤IEND®B`‚routino-3.2/web/www/routino/icons/marker-6-grey.png 644 233 144 6003 13061246465 15544 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ¸IDATXÃ…—}TTÕÞÇ¿{ÏÀ 3¨Ì£¼Ã‹€R‚7¸ú,|!óeù ÙrDɇb©©¤58¤e]“²ê"¸º‰€×¸²F$!íi¸–aWða©È ₉x‘˜áÌþ=pŽºlµúýsÖ™3ûûýœßþîsöa&“Éd2áO¯ñŸ«nW·«Û©ÆTb*1•¿¹ÇÜcî™N>äC>§KR€0k³ÊY嬢½(F1ŠY6BŠP-hA €uX‡u´W³L³L³Œe«ï¨ï¨ïü§˜õ³~Ö¿½(Ç/Ç/ǯîjnZnZnë–‚¤ )ˆ%sˆz™ëOü>`,bËË„Y˜…YÔ»ì.»Ëþx´Ùb¶˜-e®nW·«»ö¢ãYdzŽgg½£Ï×çëóQ=+iVÒ¬$–ãããDûFûFûʹr]ù¿2^Ñ»¯/û)þ §–;8‡&ÒDš(V³µl-[”¯ R©‚β—ÚKí¥ÏøN®\;¹Ö½9©%©%©…E6G6G6³ÅšlM¶&¼‹wñ.tpÀ€5Xƒ5¦b*¦Âá t:±¸ÙÚlm¶ÒØ7¡ß„~*6÷-è[з u¿.H¤ ŠÓº×º×º×&æ“‘Œdl_ÍÀÀÀçp±Cì;Ä¿i„Fh$p‚Ê[å­ò>gp º]ƒÏ4†¼òBÈ Rìzçzçz§*s¼cÌ®Y¡Y¡Y‰j©–j¡#=éIˆRQ*JQ,ŠE1@•TI•ÐiVjVjVBRÆ+zŠ¾â§ø+< ŸjQò¢äEÉ{Œ=Æ+øÁ±Û±Û±;þ¿ [ [ [¤ÅÆcŠ1E}^û™ö3ígP‰9bŽ˜ ›Â¦°)àl[ÄxOâI€oãÛø6€MgÓÙtOà <°»ì.» .fŠ™b&àUîUîUÕ¬’Y%³JøÿÜò¼åyËSZÜßßï»K»N»N»nJ²¦]Ó®i¯,äÒ°4, 'G»N¹N¹N¥=79erÊä2¤”§”§”«•Œ Q…Q&ò8Çã¼…·ðÖƒE#ƒÃUà*pÒÒÒ[ÅV±U–` –|ŸÁgB!‚‰Š¾â§ø+< vµïjßÕþÃîmÖmÖmV¢‹ /.¼¸P¬§ñ²»tÿèþ‘Ôy:O眊p.‰,—-—-—‰Þz?êý("ÓÓÓ¢úë?¬ÿð¡ñi”FiD4J£4Jôˆ¾]ñWx>.$ƒdøËzŸ_|~ñù{gÄψŸÏ å;õäVnåVN8á(Ò)÷«þhýÑú£Àw™ße~— ¬8¹â䊓À¼%ó–Ì[”†—†—†7o$ÞHp‡q TJ¥Tà¾¾ì§ø+< ¶nÜ:(ö–ŕŕÅ=¸3ñ¦xS¼IDÃ4LÃDTGuTG¿©ýÏínÿsDÕþÕþÕþuúuñºxèLÇ™Ž3DÍ š4/xèz¨5ôïûÉþ ÂDZ{°‡…òcü?vÿÎ48…S8@=ô*PŠMMMìíí¶ä¶ä¶d 7!7!70ÍF³ð ö ö "ÎFœ8 à+|…¯Ì‚Y05ÔPhD#øóWù«üUqY¨Z  PÐñ¡ÙC³‡f³Òjiµ´VŸUŸUŸÉÀì¾ \ÌÌÌÌ ðLžÉ3§Þ©wꥥ% /µ/µ/(ÛP¶¡l ‰ÒDi¢€¨¦¨¦¨&€–Ñ2Z°BVÈ ÖÊZY+H–WÙ/Û/Û/£/æ‹ùb:εŸh?Ñ~"åµùµùµùÑñ+EWŠ®ˆ@"0"æ‹ùb>øÃÿ!Ð,–Ųg¹³ÜYÄ7Ç7Ç7ÑÖhk´Xص°ka4Þn¼ÝxûÁxô =ÀøâЋ^ôbäæÒ›Ko.l]¶.[þ¦mÓ¶iÛ¤<ޤ %§XmR›Ô&–]ç[ç[çëž655×s=×cˆÞ 7è GpGÏŸ<òü ðí÷í÷íî4ÝiºÓôP4Þ}{ôm ïBß…¾ À„– -Z\§Ctˆì4;ÍNÃ)Ϥî´í´í´MÄ2³1þÎÜÌÍ܇<ÕþçýÏûŸÿhg¹ÇÜcŽx½/º/º/úÕ›'—Ÿ\~r¹{“F¡ÊC%*Q 'UQUAÃ^c¯±×€„/¾Lø(ñ.ñ.ñz½Ž^ÐÚÚ ØWÚWÚWs¿ûíÜo¼„—ð€Ë¸ŒË D"‘ÐTí®Ú]µ[8:ïuÞë¼ÇÐuê:uÿ÷ò˜eÌ2fÙ\ÀÞ»ýÞí÷nh@ž8àÑãÑãÑSï5l¶ [ž1&z%z%zQBò‰äÉ'Øy‘)2E&ˆOåSùT0ìÀì®6\m¸Ú\Œ»w1˜”>)}R:0§lNÙœ2ÀoÐoÐo‹ÅÇßηóíp\ɾ’}%«JóKóKóqÚë–×-¯[£ HE*RÍZ…0„!ìÚ5/æÅ¼Xu µ¨EmWŒˆ±"víç:«Îª³žƒ5ÚaÍ ˆÀwß |‡,ˆ,ˆ,À2Š£8ŠƒŽÝf·Ùm |Wø®ð]@¸.…Ke1éHhí¡=ßÉwòº7áÞ„{0±º·º·ºWšæ‘é‘é‘©bClh§@2’‘|måQå©åmž;f|ߨÞÅòY>Ë?¿‘Ïãóø¼ÍU0Â#/°0 ³0)c w w :ö=ûž}!ÇqèSú”>È@2C1P'uR'0® §Œ?±zKõ–ê-îMýÛú·õoSÐk‚5ÁGsCö†ì Ù»ÿrƒöO´¢­R¢²Õ£è®" YÈbUá•á•á•y˵ëµëµëæöûôûôû¨NN99åä÷&Å> è8Ù¶†­X#kd»Ä.±KÀøbÉ«\sÁvÁvÁF _7|Ýðµ*Oï§÷ÓûuŽºJ]¥®Ò­]͹šs5 ÙȆI²ÏaÔ! oá-¼1©é禟›~\Y®,WÖÖô>z½Oû±K‹¥Å¢Ê«YY³²f%%°l#Û8"Žˆ# xÃÞ Ò lŒ±1ŒôÚzm½6­Y;³v&&é»õÝún@̳Åì­ñ}|ß×9*Gñ€ülHV^L‰’üI¢‘Oå)Råg×½‰Å²X›°|ü“ãÜ¿Æ2Æ2Æ2DfªH©‚Ïܹ/r–‰ë⺸ãa< N)[Ê–²¡ù<øóàσÝ!ÝÏw?ßý¼ê†v¦v¦vf^Üø¢Ùüƒ(…¢P}@žÙ·”ËÍÍÍÍÍÅÒQÈ?ÜÏœÝMrvÈÙ=õ›ìŽYÆ,cRÆ@Ñ@Ñ@tœsÎ9•NÔÔÔGgagag¡ê†v§v§vçÕjg—³ËÙµsÿ…7ÞXÈ€Óäq:Pá»ú°ò,ðo9»ÿúMvúúÔ'L'L'LîMAB0©Ù·Ù·Ù_Y/Y/Y/±Õºëºëºë€˜&¦‰i™õêWÔ¯¨_ù«!Æcˆá¿Ê~/ÊÇ‘G¹TøŠ‡ò i&Oò$Oöf÷ôîéÝÓñ÷Sî§ÜO]”4Acøï‚»‰wï&úV\¸6p>m:Üt¸é°{ÎðØðØð˜*Ëc®Ç\¹[©ˆŠ¨¨¼h QÝįø¿Š©Ê È’åaøƒúìšQƒÔ¸sÆßTñ­¼‚WðŠo £KG—Ž.Ó= = = ù5•QeT¿ù.¸"¸"¸b~¼­ÕÖjke_‹ÇÅãâq:$ëZd@ÇïqpüA=’]ùqáÎÁFlÄFõXKciÿL5TC5Û×x=íõ´×ÓüšªCÕ¡êèzzüM”ñóõ—¯¿|ýe`YOÙXŽüÇÿÜs_2&èIEND®B`‚routino-3.2/web/www/routino/icons/limit-129.png 644 233 144 2720 13061246470 14601 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü…IDATHÇÍ–_LTgÆßdàèTÁÌ’&‹!a'J±v/fã;"ÁØ”´QL³u’M·U“²!Q’öÒåÂfãš`5Z7 ÚR  MIQªµY‚c§ÔF‹cš6"©SpÈΆÐÈpþ|¿½glwïýnNÞ¿Ïó}ç¼ÏùDD¤dù)àÝàÝà]›³½¯ºþâ†â†ßõæìw-ð¼èyñ»6XwrÝI€Ò³¥gí\Û‰;ùùõ"nÿ|<Ç/%â:Šú‹ú=áe»öÖî­-þMÎþG´m`Þ„×>}íS€OÞÿä}^‡û_Ýÿ `6<×vâN¾SïôËï/¿À¡Â!Ï$ùŠ|"PQ_Q_ù×\ÂD%4>×øÀO?(/XÿüøUÈÁYé<Û‰/ç;õN?§¿ƒçàçøž <+/¼ôÂKZW®à‡¡µ¼µÜÁ3€#ÁfÆÌX/[/“UQ'~¢æD $î$ ¯sx.~ŽÏ2±oóMß}_'Ô+`ÏÚ³dûËúýý~(ØY°³`' †ÃaHø¾„4]Ó5¶··¡ª©ª©ª z.÷\î¹ µcµcµc°%¸%¸%›7nÞ°y¤ŸH]O]'»Lïõ]o¬7æûö°WdíÈÚ‘§ÿ óÛBÛB"Ò,"â题I&¥HR2's"Ò@i T¤ º º Z$IF’‘–s-çZΉ O O Oˆ”m,ÛX¶QätÃé†Ó "MMM"£££"¾"_‰¯Däü‘Ï>þìc)Ê}Pž.uö™ŸùQd…”>Vú˜ý=¤§ÒSîØ[õæSæSî+©Õ‡êCpæö™Ûgn»þh{´=Ú5Ý5Ý5ݰ¿fÍþ¸·õÞÖ{[aSù¦òMåÐp¼áxÃqðóóƒÛíëöåáíÑgtpøxEìóöyÏ÷¢ÌçÍçÅY)”¤$Wl1/šÍ‹"þ´?íO‹LkÓÚ´&²ãÐŽC;‰ì î î Šœ ‰ÌÍ͉TWVWVWŠÔéuz.²þoëßZÿ–Hå@åÑÊ£.ž§Ê|Ã|CÄáãÉ„3á›ßˆ÷ÊÈ•'¿ÈªPÊ’ãY-«eµˆø“þ¤?)ÓczL±u[·u‘Ô@j %Rv©ìRÙ%‘­7Zo´º…:t>‰ü+r!rAä!½Eo‘%‰äð¼O9ûå¬È Ÿÿ7• ™}fŸ;•söÜâÜ",­YZ³´²³³aÆž±gl˜ŠMŦb0Ý8Ý8ÝY#kd 0šf£RÝ©÷R´J£5?7?ÏÃ3¼yàÍ_MeÕ; Ý×îgVÁ¸5n¹:vÄŽ°§DYg–ZÙ_øC„ú“Ú­vçéß“æQó( ¼½¢cßy0µ¤–ü•Žýå7å·V(±[‡18Å#(ÞÎ «êU=ªÔ5uM]Õ§zU/ÐM]À?¹ÊU”ºj­ ×­N«3Oùí=…{ “zHùÙå#{»xdïcæ ö¿×ÒÊh±­¦IEND®B`‚routino-3.2/web/www/routino/icons/limit-20.7.png 644 233 144 3020 13061246472 14650 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÅIDATHÇÍ–ÿO”WÆÏ «3C ÂȆ¤©i !H@m•DC˜D¤Ae±4¤Ù~KqQ’]ƒÓüÁ5#ÄâMŠˆº X - •4@!jiº+F¤+u)ca¢£(3óÎýì3¯ï¸Ý?ÀûËû>÷œóÓX–Z–ŠÀ«…¯¦ì'L¦@É–’-Ó1Ó1Ê Ú,GœÊ|øÐ×\Öã‘|½^çÓùu=]?ìG icÒF(}·ô]Ûá‚[gÀùŠó]/p8Ä!â è ú´÷´÷X5¤†0aëq=_¯×ùt~]O×û1Z¹ "R_eeº N^ ¼¡¹ )h"qªÔZµJ­‚à½à/Á_@íQ{Ô~³Ô zªž¢4³?ÙŸL@û Ðhƒà|˜_ ¼]ûv­n°¾Àh倈ÈÊF°ùl>ßï”bdb8@1¨ j tÒM7¨õj½Zìb»¢lf3›J(‰Ú÷ãÇÿœÕ•ÂBCD/¢6¶²Qðˆˆ4³lçÇ;?Ö‹CoüÓr}ïõ½Ðp¬¡®¡u£êÆÎ; úÛo¼}šLM¦&Lù¦|S>~³îfß;› '®ž:1mµÕ´Õ ÎÜ9õéàß+ç[æ[BoÀîw¡Ú°Ñ~ùq/|ýÉןÀ÷ù9ççU÷ÈÖdkb1.ÿ^þ=Hõ¦zS½p©åRË¥ȩϩϩ‡¬£YG³ŽBúbúbú"Ì=™{2÷Ä06˜4˜4˜9ŽGŽt>ù›ˆ‹ÿ8–1–¡* ·­· ‚OÂ~D»óÒç/}®º`Á½à†¯Nsþ›óP{´f{ÍvCÀ1æsŒã¸ã¸ã8ï/Þ_¼ßˆgOfOfOÂéŽÓ§;¢:¹Õ¿Õ¿ÕÀ'ÿq²ÿd?ìøkÅ[oE5x÷¯í¿¶WãÄQ]B Ñšh «ÊÙâÙbãØnIIŒšŒšŒpæ:s¹Ðº­u[ë6Ø4½izÓ´Aœß›ß›ß ÍýÍýÍýQ½ì¡‡˜mœmœm„¬›Y7³n­oÇ;Ç; =õ‡ÙìÙlÀŸhI´„Æ%T·%n‹ê‚Ÿ>øÜUãÕãÕ`ë¶:­N8ü÷ÃçŸ3t\}®>WdvfvfvÂtìtìt,¤^L½˜zV¬X ÷Ëî—Ý/3ê\ ®äUçíÉ‹:½¡M‘çeÏË€?? ºÌêÈc×c—ûšÈ•á+Ã"#ïÿôúO¯³C“Àd`Rü=-= = "ñîxw¼[D›Ñf´‘ü³ùgóÏŠ¤ÙÒli6‘òÌòÌòL‘µöµöµv‘¢Â¢Â¢BY'ëdÈhòhòh²HéšÒôÒtÑ—§ˆ;$qðúàu‰ñø Ü×LÔEN³ªºªºÊñô|ó±æcêÍG§<¹ž\³;¸vÚÓm“Ëä“}Îî³ûD¬^«×ê™±ÏØgì3"2!2!â]ã]ã]#²D‚å¶Ü ºÌ¥æR"¦Û\a®@™f™YƸ6 úU¿êÕ¢šU3Œ{Æ=°,•£rP`³Îá³ÙavJëÇxq¾8 å5@R()4–½f¯?šïÁª°*Ç^“LL0áÈ.cË@ «a5ìÈÿJ+­À!.pÀª²ªgJëkžæGýÄŒ]ü Ö¬ÑjÖ7êT¤2R—Wo¾}“ÿ&5>j|M{šö4íË'/Ÿ¼|‚wƒwƒwáÝÙwgß…ºâºâºbx²ãÉŽ';lŸê‰P(Æ~£ßæÙü¨Ÿ˜±Ç?ÁµÑk£ñö½–o*8dRgükýkýka]Áº‚uàëõõúz!±#±#±Z‹Z‹Z‹ (¡(¡(6>Ûølã3X?¼~xý0¼m{Ûö¶ÍaðG#ÍHÓúj¯ÍúH}ú@݀ЪÐ*Ç *ý‚sÔ5GíÝFo£·Ñ Çæ›l>´—¶—¶—BF}F}F=ì~½ûõî×p"|"|" áÚpm¸Ö!¿Æ²,ËÉÓü¨ô”ôë9 ½zï¸öUŸêòÈ#Ïnlll€åY˳–gÁ€wÀ;à…›Õ7«oVC^a^a^!\zuéÕ¥W° ° ° ‹:u.²u¬3×ÌuŽÍúq‹XíV»ë¹ˆQl‹^’*ƒ2(båY9VNXoë°‚$’¼8?êÇ-2æó=ý]¤«³«3Þ¶O&Uê‘)9$ûdŸ-èW~åW"%-%-%-v~{Íöší5"ÙÞlo¶W$Ù“ìIöˆ¬|¹òåÊ—"åžrO¹Ç®O˜tõ¸zd*΋óc~¾v+1cxL?ýÑ©ð!ð!ð!«'VO¬æ‹e~2?™Ÿ`È7äò•kåZ¹Ž‚>>óå¼ÿv+ÿÇ;ÎqŽ;²TP*Y%«dÇš¯æª¹ÀsÀ:cap•§ù§íå´}]LÛ÷Øô|Áþ ެĩÒIEND®B`‚routino-3.2/web/www/routino/icons/limit-32.6.png 644 233 144 3067 13061246473 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜìIDATHÇÍ–ýOTWÆÏLÕ@^ZǪ8”T‹‚‰-´F£¬t&][ݾP[¨Ô¥5V£­1deÛMv£uÅÝ"†jÓhÂJ„­y•.?Ò( v¥ÐÚ¡‘ tt”)³órçžÏþpçz'þž_&Ïù~¿ÏóÜ93Ï=„B¤D?˜ÓÌiæ$ ›·ûÖ׬¯->£á0m4mü+$•üÀ“ÕOV«7 ¬×õþØy! þX=}_¤cÃRo©79£øsxwù»Ë­s5|¤âšãš§øèüGçšN7æc˜¸2qÀëô:ÁÀz]ï×çu¾X~ñù#úBÀ̶™m¦Q°Ì²ÌÒ×¥¯[´Gkp/‚·^ëu€[OÜzBš ò+0›ÙÒ øð¡/O ÖëÑ~}^çÓùu=]_ó#Àæ°9„€· ß.Œ;¥ Üø7ì³ï³ëzáf Œ2fƒâS|‘¢HA²&0°^×ûõyOç×õt}Íq”~!„¨ø=¸†\C zÂÝÊHø™ð3 ö„ÇÂc„£N¥ú³: €rSV†A ¨5€±~eœñ‡HÊmÊgÊg„•¾pR8 TŸÆ®Û®ÛÀ}]_?Ê›B‘y â|q>ß  uu—øÈ—äKø¹H “e²Lh !ÆÈAr䔜’S1û©¤’ ò®ôJ/€,øi‰òÕÓõ‡4?‚ÛBq¢‹¤ìø@gS³o¬hh…Šc••ÈÞ›½î^·¡×ÿ ÿAÿ¨Ü_¹¿r? ´´´uÕ¥ºT—‡ó‡ß~*Ú*¾­øy­ §»§ÛГ£;²wd÷4?BmBˆ¾?Aóæ0l»wëÞ-¹í©¿'?—üA×\ç\ç #˜ÌÂñµÇ×_ óËç—Ï/g³ÎYé®tWº ®e^˼–iòD<Or/å^ʽnnøqÃð»Û«¿XýÁ±÷|K}Kå6hz¶éYP=š³©.qnâÜœUB8¾v|-DÄ>U0U`:uPZrh‰°\.è-è"­4­4­Tw¦;Ó)DIgIgI§ /^,"a^¼„yBô–÷–÷–‹‡ëB÷…î ÝB¸KÜ%î!lÙ¶Õ¶ÕB¬M|9çåa±Í·n¶n6"÷“ÜO„0ç%N&Næ¬xRB)!õ'¾ô”zJýí¾_|¿À¦¶Mm›Ú`aÇÂŽ…0Ø4Ø4Ø×û®÷]ïƒeË&–M@±R¬+>>>c|cµ-µ-µ-¥f©Y*TUUÁÂ+©çSÏÃwý]y]yx ´(´TkÒÓIO«?‰È« ³fÉz:‚øfc}Q}äü1;#;ÃÈ­É­É­½»÷îÞ»ì[ì[ì[ ¬¶¬¶¬¦×L¯™^þ>Ÿ¿¼G½G½G¡q{ãöÆí°2keÖÊ,ƒ/ûŸ/ä¿§_9ûæÙ7‚•ÁJˆdÆß‰¿#ë…ü—þ;w÷Ü]˜ú@ns~™÷bÞ‹ã«âŃ=£{F÷ŒÂ‘«G®¹ –vK»¥VŒ¬Y1sÌsÌsÌPå¯òWùÁÑïèwôƒ§ÇÓãéâõÅë‹×CœÕ*­>,ÚªnU *ušÔMÕMË5?Ñ;ÑEÏNÛN›ñ/QV¼/LþcòÓÉO‘êIõ¤z‡‡‡aÒ>iŸ´Ãxãxãx#L¤L¤L¤€ÿ²ÿ²ÿ2xã½ñÞxÕ²ZVƒºKÝ¥îO–ggR] zŒì\²s‰¸'º]äØL-Wä_æØ;òüò™/óÅ,fqLN¬!B„bðVÞç} 2]¦Èçåóøå‚(¿shph î~Ü}ß ~ÐsLOþ ž¼›glžÒ’Y¶)w”;@k$‰æo4Ѐ”ge¬ù_ù½üd«l•­ÀŸÙÇ>!9-§-l%-Ú¼ìR¼ŠøFOþ¨^èÑä|ß•ííâ±½=ž7Øÿ Å)SÎg˜¦IEND®B`‚routino-3.2/web/www/routino/icons/marker-51-red.png 644 233 144 4163 13061246466 15436 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü(IDATXíW}LTW?ïcø¨ÔQt ÊÐaÕU†®º¶ËÇ8 ©”DÓâÅb4n6~£iBJ)«lÖÖЬ6„Œ3SºØîŠaý"VY?Hµ!)*3•1¡Ž" 80Ì»ó~ûsß{3q5›Ýóœ{Ïýß=çwÞÍMÚ4Š217ÞïŠw Ï# Iq­q­q­ö¥2“™Ìnÿ•Ñ"ZLn«u$“L2÷h_­ãñü<ÇãøÑùÄÜh>F~Ûi;mÑû)óåV¹Unu ;„ˆ9y8y8y_Õ»ªwU/°ºuÿê~ 4¯4¯4O÷ù>çç9Ççù^·ÄßEûsŽˆ#âˆ8âYÄ+”V‘V‘VÁvï<Þy¼S}ÍÿÔÿÔÿ€ Å(FxàÐüÈ>çç9ÇÎ7çÈËù‘åuÑ+zE¯ç ïrÞå¼ËÊoûB}¡¾ú15KÍR³ °jVͪ–ÃrXÀŠY1+6ø‘}ÏÏs<ޝŽÊoy]£&8§à$’ÈäÍÝü€­ÎVe«RŠ5b{ÂKÂKàWšÇã@õ(o)o˜`™,Ø^¶@WpºMDÎ{ÂËÃË¥9øCð@Ý£žWÏÃÏÃlu¶:[RÌós>œ™šš®ø °ÔXj,5j†û‰û‰û †"8~vÍgó üðëiŠ^/ÀU\5WÍàW?V?Ö7ÙAö ûDGãùx~ÎGã'o•·Ê[»ð£åGË–«›#ÅɱM{4 @°9Ôç€s++àÌÓ3O ôaèC¼Àܫݫ/§_N7ÜÎú<ô¹æx~­²QüHõ%g&g&g¢nÐ>X8Xê˜:Ôßx¬ñ09÷ðNÂ;FßÜmîš? Âß…¿€¡†>€‚”‚(²Y­éÊ€2 ó´ÚíçÃùq¢Zyhå¡•‡ô›±¾‰œ‰>¾TÂJäÎÊOŸÀ“›On€²EÙb¬à7_ó5L;u®ñB¥ëJ×Â|ì;°>v‹ÝÒós>œŸ©ù¦BS¡©P›±xÚD²Ñ/ø’4GšCDtuàêÑ´ÆiDD 3}ÕýU·ñ òvòÛÉDD÷¯ß¿ND”[Ÿ[OD4Ô;ÔkK 0…‰¨‰š¨IÏoj1µ˜Z´‘Ÿ!Š3ÞNo§·“ú‚âøg㟑$ý1n}ÜzmŒÄŽŒÅÅ•t–t¹væQÞʼ•DDk¯¯½NDtoǽDD3ògä½1ãDD‰í‰íDDêsõ9MDpïÓ=ºG$¶‰mbWÅçñy|êãüH,‹ÅâÐãH‰ëNn?¹ôäRƒÆûÇû ÿqÿcÁñ’ñc‹‡wïa¦0>‡/0{›½ €bµZ­†é?=±eB—LàBý…ú õÚ ø![ȲCIZ,-–WÕò)KÿeZoZ/›ãþ½÷}ïû0b±Ã¯Z§X§Xàà†ƒ¨»ánÃ]{Å^ø¾ñûÆ}W}W°ùl>ïiT‡Ù0‚ƒ@fUfUfUX{¤)EJi¢¤Â¤Â¤B"ù’|I¾äðjüRk¹µœíäpáÊ*VÅ„+2i³´Ù8${nî¹i$ú1ô£ÁõÙŠl† º ºðäe´ëVܨ8Wq.Ðn’6I›î®™ôùÔsKû”mÊ2eyNð•Õ»¾Üõ¥ª5K™~ãÍoBN9q€ÿÎí;·£J7Ó@u©.A¾|Ñ~ѰòöcíÇôVŸqt9ºðžö„ÖŠµbí¸]˜%Ìf-8CPº¥Í×z¡T(]Þ 8„o…o¹VÂ[\§.žº—¦ÝáázA5_Í4¡ÉX+00@µªÕz}½oƒ·HOHŸ’>EÙªUrŸ´OÚWiÓ¨S1Ëk>åS¾¼œä$'‘䓼’wW›ö´6X[+f÷G}ûûöë U«rR9 Áˆ`?ãg.ô P×°™l¦^ßuÿZ÷ÓºŸØNí•GåQ×þÔm©ÛR·‰6Ñ&Ú„Óvåœæ”Èß5Òéô@8›±;cwÆn"S…©ÂTáÚ¯i7ß–oË7j7\®D.¸àð ÏðÌ0ÕóØ<6O¯ïá%‡—^¢Z9žÉl2›ÌÞñIß’Ýi¡=¦õ$ĸW¢}K‚)Û”mÊvŸÖµ[Y]YmЮY1+fPx <ÖŸÆ@Ïda]‰=‰=‰=ê*M“Ib’˜´voŒ¿ˆáO/_´»^X¿|•à‚è]W‡«C×®Ò¡t(ºrÇRÇRÇR…à ‡³¹š[¤©å/˸Ô"Ò‹%8•^azеë“|íÖ[ê-õŠÙíp;ÜAÄ0gZy¶òlåYý³#7È rCOä'Iⵘ¼‘uzíUcXÑîßþ“v J J Jtíº–¹–¹–¡ir_Õ:!” eBÙòªè4Ⳙ¼ý—ö*íæJµR­TëÉá„ËjÊjÊjÔ?gMdMdM(w´Vû$Ÿä«L£fj¦fŠ|v$wL¾xú-V»û£ý‚ûÂaƒ° "*¢¢ð¯ÅÙâlq6 @ýóJz = ’º¤.©K89¸&¦sÿ73kÿR!ÊÝÑÛ•‹ª¨Š* ´ íBû£7'×åŠéL_ î+[ýoŒùR[¶UIEND®B`‚routino-3.2/web/www/routino/icons/marker-95-grey.png 644 233 144 6351 13061246467 15644 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü žIDATXÃ…—{PS׾ǿkíòà‘@ –bIX&ZpÄ[* øB¡z­£melŷ玕֑^¼p`ô UJ‹§V„vîQ°ø@)‚Æ‚xP¦– –Gå5XAÐZBJ€$;{Ý?Hì™ÎtúûgÍÚ{íßï3¿ßw¯õ[$;;;;;*L™yj ±ü}þ>Ÿé³OgŸÎ>Í‚r‡s‡s‡“"™/óe¾‡·jA-¨çn¶UÛªmÕìJQŠR’ -´ÐèAzlÆflf‡¤©ÒTi*ÉäñøG­¥d„Œ‘}%999õwòÒòÒòÒÈ*„ ¡dÙ‡ØäâRÑg€1ˆA =#抹b®Ød·Ú­vkÀ¼ÜšÜšÜš3ýö!û}¨îÖøìñÙã³ç~àYäYäY„+sç&ÎM$™Q’(I”˜ç7Ïožàž»ß»×»¿wû{æßÏßÍãæã]|•ù0æ#¾E6‘MdShÊ…r¡ _XË­åÖòýž«{®î¹:gFbObObuè:uºN’,Í”fJ31Žñ!>„ãÇ8€Øˆ¦a¦aÜl ¶#¹³±³±³‘9®k¯k¯kÅŒ§‹Ÿ.~ºøÍ¡ŠPEè™s“s“sÓ¢"–ÎÒYúý·è«dÿäþÉý“шÆ`o¾š¯æ«ÏÚ'ìö‰—kjj 1kv­ÙµfFeQYThàøC`á,œ…ƒG/zÑ À ^ð0†1Œˆ@"ÒGúHüŒŸñ3x³ÙÇìƒ{•ŸU~Vù™ðÖ½›÷nÞ»Éç!÷{ÈMW…T!UH}m^Ãkxíá¯Tnä@$ ’ýý_ãWǯŽ_}q¹fffœž–ž–žÆ§ P¨àï¼æ¼æ¼ˆ+Å•âJðØ€ ØÒBZÒOúI?@“Åd1Àn°ì ˆÀ ÍB³Ð (w(w(wÀßí_³R³R³RHvÇwó¸ùH®>WŸ«_6Ïn°솫‹ÅǶlØ:@ ª2U™ª T ÃÅpøÐÛô6½ýo™sÛtLÇtu¨C'œp˜˜€   ³0 ³Ä‡øX̫̫̫ žŒ<y2’EY<-žObôˆòˆòˆZE™–i™öo«qŽ8G;þvüm$º=Ä%âq |hí£}À“Š'O*€VÚJ[)ð`탵Ö˜ƒ9˜ó[©-,,€¶_Û~mûè0w˜;Ì@ûçퟷt•v•v•ŽQǨc>ª*U•ª ñ%ñ%ñ%Htó¸ùx!LÂþ²Õ÷‚ïß 843~füÌxRìÒ’@¿¡ßÐo€Ž+:V_Ù¾²}e¼º¼º¼º€±Ô±Ô±T öƒØb?’‘Œd?Fÿýc4pÞvÞvÞø-÷[î·°]±]±]ä:¹N®2f,ÌXH¢$Q’(xètºRÜp¥áJòÆ[ã­ñÙŠ½£{G÷ŽŠ‡Î,8³àÌæ6+;À°Œ9ÛœmÎ6ÆÌ90çÀÆ.·^n½Üúl»ûÓÝŸîþÄØ~ïýÞû½³&Y“¬IŒ-8[p¶€±S‰©ÄĘý²ý²ý2cÖfk³µ™1¶…ma[›ÊcbX üßÍãæãqqhé9zŽž{¦8)ÞÇûx¢BTöf{³½ð5ùš|M¿•Z™¤LR&ŽÇŽÇŽÇÀCÓCÓCÀ5sÍ\3е©kS×& _–/Ë—’zI½¤H1¥˜RL€N­SëÔ[Ê–²¥É $Rú6}›¾ à$Nâ$ÑRNÍ©95;o‰¶D[¢qWØ&l¶cÙF¶Œy‘ùYó³æg—’/%_JN§N;|ùé—Ÿ~ù)àÐ:´-`o··ÛÛ'uR'fŸ˜}bö `ÝäºÉu“À Û^ØöÂ6 <¹<¹<xÚù´ói'@¯Ñkô˜+Qœõ¶õ¶õ6îR ÕP ;Ï%µ'µ'µgÕ?|ø8–ûßô¿é“ÄNkÖ:­ðƒü 1„B €÷*ïUÞ«€ÑüÑüÑ|`fùÌò™åÀÐGC }èt º`Á²Ë,tþ:?¸#pGà@ûƒöíÀ·ßN|;¨ jƒÚ¨W«W«Wc¸¸¸’ë–ë–ëü·T%UIUÂaŠ5Xƒ59¥|6ŸÍg“Ìz¡^¨œšÿÿ(ð ~Á/°TUU–w,ïXÞ6h7h7hÁdù²|Y>´2heÐJ 0«0«0 ø~û÷Û¿ßþÛ.Ö~¢ýDû €Ýb·Ø-àyÓó¦çM°¹^+jÏÕž«='Æ#1#N'qçÜzëzëzkSÃdîdîdnøæÑžÑžÑžWþgøîðÝá»Î=s3çfÎͤ¯sǹãÜqØjÞ«y¯æ=ð7Þ8xã 0¨T ª€””””” dVȬY€Íßæoóô¼ž×ó@“²IÙ¤ºïußë¾ÄÄÄ€½ÒöJÛ+mà/z^ô¼è)ŽwÇtÇtÇв¥²¥²¥ë-ŽGËÚedÿƒýö?Ђ´<L2,– 7ÉǪǪǪ_LO(H(H(` Ë#—G.$7†7 oÞ6<< ÜÜÜÔÔÔA€ILbzi襡—€ÁÂÁÂÁB@­T+ÕJ@§ŽSÇa¼=±=±=kËôeú2=j#ŠÅÈäbÆ1Žqs×N]Û¸xïxïxoÎ@ÊH)] P´/“|-ùZòõÆh“Ü$7É™! $ $ „X4[4[4[ðRPOPOP$^Ÿx}âõ 0%!§p §€©îðºïußëþ3 Âûˆ÷ï#°Xª,U–*xYufÕ™UÂwNo§·Ó›&sO¹§ÜÓ}ÿDpùáñÁ®6Ï5Õ7ò#E¤ˆÝØIãh˨F:Ò‘NÿQ›U›U›%l7G˜#ÌP]dÙ‹Ø+öн*Q‰Ê;¡ÚÑŽv€°Vˆ~¢Ÿè÷L‹>W+®V\­pî©©©äI¥ÒÀмˆ#G"Ž|Ü€ä ‡œEúÐ',r÷£žèG?ú…;ØÝØMª#«"«"« _—½+{WönEÞÈì‘Ù#³ysåžÊ=•{œ{ÜI=©'õ°¡è0 LPB %€}؇}`´‰6Ñ&H›ÍÆf#Khéoéoéç =•žJOåÃI{…½Â^±7ÿNΜ;932#3BéŠsÊ :îω^¢—èeÛ`Û`Û `ßmßmß½7ßÓ×Ó×Ó÷þ¹žšžšž®Pÿ†þ ý,ì$;ÉNHÅ2±L,ƒrÈ6ÊFÙ(@"OŒOŒOŒ¨¨›U7«n”žCžCžC€-F‹Ñ{óéQz”}8IKi)-åŽMá°e· וDꚺJÄNuCÎ=$†Ä˜„×§® UŽíŽíŽíâ_ßßßi¬î¨î¨î(RÅn±[솂Π3è Ø„L!SÈ„ôxøñðãáΈ¡ùCó‡æs½²Y²Y²Y… ¦~šŒïÄb±X,æ¹*û_îŠååååååÁâÎ(\žiÈ¥Ý=.ísi÷kOãiüoÚ­qÔ8jÂvs‰¹Ä\¥”RŠQw&ê'ê'ê'Äñ‡Å‹s½²,Y–,ëÎÛ€mÀ6õqï’Þ%½K Æ½ŸºÝ|Ï@ì^ p9øÖ¥ÝªÈK‘—"/¾.Û*Û*ÛZ‘7¢Q¨yó…ì Ù²{\mž²Ó¯Ó¯Óÿl44 ä-E·¢[Ñ ˆQ#jþÚįç×óë'þ#,*,*,Šþ⊷Â5Nüž‹ÃX\\\\\×´“y0æAv ½<ôòÐËø_gˆ3ÄrK†IäaÿùÇ‹/z¼Èï’¹ËÜeîbm§ÚNµr¾:æsŒ9¸Ý’XI¬$öý`VÂJXÉWW …RîÞÔÉ'NsWÀ•(á÷<b Ý\衇ޙêY5«Žë£éEzñÿÂ&S&S&SÄ—%Å’bI1íâÒ¹t.ýúÍð‹áÃ/&ÅûŒ}Æ>rM Äö…Ëo pü8(þÄ~§]×váÌÁNìÄN¾•¤‘4’ö¯p¦gz¦ß·Q>]>]>vqý\?×?0]<,oì^×½®{0ˆ0—?wc9ñgÿŸÑ8‰õ0Ë®IEND®B`‚routino-3.2/web/www/routino/icons/limit-14.7.png 644 233 144 2572 13061246472 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü/IDATHÇÍ–kH”YÇŸ3*·1Œ¢„L2Ê"BÒŒ¢ÈÍ ¸Æ%E×] 6cMÌkTLA)“ÒbÙ M$›‘«”Ãj1 ¥ãÌûžß~˜yg¦„ýÜùòòÜþÿçœóžÿ9""2/ü0/0/0'†lsYÔ?kó¬ÍKZCv½¦SÁ?•ðCíµV‡Õ¡¿ŠÚFÜÈ­‰âÇò~™'QGBGB‡)'lŸƒ™;3g%…ì_œ`é´t~Âþ®ý]wšî4qæ|̨mÄ|£ÞÀ‹Å—sßð‹@|w|·if&Ì…›nZ\Jx³ò·åo‰‰SfÐF9ÌQ9€Æ‹±x8ߨ7ð |ƒÏàõ#`Û`Û ;vïØm¹*xÕÇS§|Nà˜A_РíÑöàåTNL˜ jq#ߨ7ð |ƒÏàõ#_ïíå<|E¢@¤¡^}C >ê|ÐtcD”‘¡ÒÕRµôUú*}Ó†z¤&Õ$J3O%O%ÐJŽ€‚BøêÏÂÊÂJ£ÁËyÑ­ô‰ˆ¤×€åµåµo¸ò\y ½`«ê ~ ~áË4ÆtÒIÕ¯úUŒÿ3ŸùÌÿ µX-Žàm…ÁÞÁ^‹ÏâóÍ5–^^©úÇ`?a?ê}¥ãüÕép:PCYC+†VL§qÙ]v—Í4ÿÑüéñ¡¡º«O¯:¯:Á±ÏQá¨@µ¸ûûàßô×?\×WBùÞò½ W†úzDDžã·¶Km—"³*í°µõ´õàïˆoŠo‚ÖæÖæÖæ(aàbàbà"¤•¥•¥•AÞí¼Ûy·§7æLq¦8S {}öúìõ;–û6÷-È5ü¿ÿôlÙ³eªî;î; 8êGx˜x*ñ”êÏ>Ï>Pñ!À½½·½R¼)S>Â-Û-Û-[”ð°û°û°R¥J=»6îÚ¸kcLã=ž@h}ZŸÖõ×=¬{P÷~>_º¥tKÌ—»›ÜMÀÓĪÄ*Õ!`k«À˜{Ì Ú†È± ךk͵B{]{]{t·t·t·€-Ó–iË„’%JÀ’ê%ÕKªa¸p¸p¸púÊ֌֌ÖÀò—Ë_. ¯þhh„ÇÔ£kF×SÖk‚>`¥wé]¦‘`A°@DfŠˆˆ-|6DSGÕQý®~W¿+bN5§šSE²¦²¦²¦D^Ü{qïÅ=‘wöwöwv‘þ+ýWú¯ˆxÊS½æÑ<"§÷è=¦ðÏÿü´yÛ¼  ýcá™øó›ò¯å_ƒÆ†Æ†Æ†é+áhp48 ¨ª¨ª¨*êÏP*C7¹ÉM(î+î+æšúšúHš_{æ›l{ßöÞçÇbOåiûià¾q*õj½>­ú´ýÓv”½­-ÐE] ×êµz-L,šX4±¼EÞ"o¨Ùj¶š ãöqû¸8ÂŽ€7Û»Ú»&L®›\‡½D/þ óéö {…ÑXýc1t,‹Ç7µA-2£­a€¨ŽM…¯œqÆÑ-…B¯ þ«Rsi®¯t,Ìgð¥c1Ê,Ž+Ž‹œ­^’‚ƒÁAà¬6¢LW~Îr†3@2É$:¨aåR.@ çÛ´“ÚIœÖr´œüß·ÊÿýÞ•ßíëâ»}}Ÿ/Øÿ¯b©‘6þIEND®B`‚routino-3.2/web/www/routino/icons/limit-10.6.png 644 233 144 3026 13061246471 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜËIDATHÇÍ–ßOTgÇŸf€Ñ¦êפu¶] ?Bp-$V´mØ©°š—XQÀT—v[“õ¢1^´k/Z³&–»˜’hµ‹xa£Eh4%l‚0ÍPØ&þ‚áçœó~öbæ0Óþ¾7“ïó<ï÷ûsž÷9¯€ˆˆ¼ø°¿dÉžÇöýÉxfEfÅïþÇg °í´íúx[½­+¾Xñ…ùS[y«>u¿H’?UÏŠË ’ dtftÚÊøcØ¿;?3;ŽÿޮˮËs:¼{åÝ+—¾¼ô%pÿ‡û?DË£åÄVÞª·ö[|©üòñ¯ôEÀÙåì²… #=#]ü¯ù_{åp¼`ô¨|£ò €É´É4eã1àÆ­Ê kM¥`+Ÿ¨·ö[|¿¥géÇýøÊ|e"ðVÍ[5®óñ ?]€÷_|ÿEK/v8ÉIÜ kº`ì5ö²ªGõ`ÃIlå­zk¿Ågñ[z–~ÜüòÝžÚŠ¶+¶+¶d¨Ï,‹9cNPÕƒz+£TžÚ 6€>¡ëã Ž¨#êÉõ &–RuúGúGÄôXV, L-λìz,*–e²€é""¶óò(͛敌•W­,ñø<>O¤ku×ê®Õ"w2îdÜ,,,ñLz&=“"W÷]ÝwuŸ,­îpw¸;,2ztôèèQ_¡¯ÄW"òÏ«E¯I†ï7™U™U¶ó"¥M¥M"ö-žGžGEÅvÙžöyÚçäŠ8O:OЍR™~Û¾»tw©HîDîdî¤ÈBïBïB¯ˆVÃjXÄÝïîw÷' d³‚YA‘y÷¼{ÞŒçŒsÆ9‘U«V ˆl¹·ehËHû`û|û¼ÈÝÚ»½w{eZdÅ™gDTÈ–oË'×.ʼb^±DôúNIŸEÌy,3bFÌñúýƒ"×=\÷pH¸8\.OOOYï]ï]ï1Œ£AdYõ²êeÕ"ž242àzâz¢9üÅK™üzUZUZrò“­è#Àq#d„’“ŸË|Í× T¿ênpƒÀ\ü[©ÆÕ˜ƒÄ_R|c†ALÝÖ£zøÊšüUŽ*ðìדÿùýV>··‹çö>ö|Þ`ÿIÓÏÑ\4`IEND®B`‚routino-3.2/web/www/routino/icons/limit-127.png 644 233 144 2652 13061246470 14603 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü_IDATHÇÍ–]lU†¿îÒŸ¥ki“E/ª˜´\XK#6ZHö‚ŽÙ¦XµÑ‚¢ ‰µµ‰bêzQ‚ÆD!4PjúcÒ¤¤(¤í’Úà…$²bê¶ I»‘²;?çñb÷죉—œ›™ïï}ß™3ß7G@DDŠ3WÏcžÇxôƒG5Ÿyø˜ñƒ•°öëöë$A…U€rÀµu\çëz§ñ5ŸæOë‘û÷öól/Ø^,˜Sà¬qÖ€³ÅüÒüSíUCj¥%;3ÎEç"X—­ËÖePϪgÔ3 æÕ¯êW°,»Ú®FÙo¤ÞO½i{Í5¨ñ·™ÛL`AóËJAOtãøb¾XbDœˆ“Ýš;jÍ wÕ€šQ3Y?*®â*tÑE—ëgûØ*¥R*µÂ—»ÜPeª,}4@d*2àKø‰UZOFØáóðvçÛÙ÷°QMšß˜ß¸:Ÿ†»Â] DÑ€ËwiúÒô¥i8X|°ø`1DZ"-‘ˆ•ÇÊcåн§{O÷è}£÷ÕÞW¡¶?ÑŸ@EG#ý‘þ|'Ú*Û*õÖ>Ÿöc? : ô¨7Á¹ãÜ!9üð°ØÞ­Þ­Þ­pÒ8iœ4 šÍ‹æ/è ú‚`´­F+T¨<öÝØw$3Ïý¦óÈ@Á@öc‡G¤h¢hâéMò×–š-5"ò®ˆHÎ1 ¸ÉMÉ—[²(‹"’@I DÄ[á­ðVˆÌ5Ï5Ï5‹ì>¾ûøîã"ãGÇŽá W¸"Rx¯ð^á=‘s±s±s1‘¦¦¦¦¦&‘–ù–?[þ©ûýùúçë%ŸÖ4ŸçÛç’Ï%E²z ä¡’‡œŸ!‹Çܶ·ë¬§¬§Ü-««©«©«#׎\;rÍõ‡;ÃáN¨*¯*¯*‡]ëw­ßµÞÇ7Å7Å7Ácƒ±Á€ÙñÙñÙñßj]f̤â¿Ä­g•ˆóµóuÎÏ¢¬—¬—äIñÈE¹(É•9™“ì²Æ¬1kLÄÕÕUd~ãüÆù"¡[¡[¡["û—ö/í_ikhkhkpë’ɤÈÚÍk7¯Ý,RaT†ˆªwŠœ"OŸ7áMH@¼V“Õ$¢õxDF˜ùA<““ŽyRåª\IiÏjY-«EÄ?çŸóωL§‚SA'è ÈHõHõHµHéºÒu¥ëDÂVØ ["3Ó3Ó3Ó"ׯ7^wó‘³ÝÙ.))Éðy''''E²zþ«+9e YCî_t——!U˜*LB²=Ùžl‡ÛÎmç¶±p, Ã|û|û|;$Ï$Ï$ÏÀÒÎ¥K;a9²üÓòO.ãÖ¨5 8¾,ÿ}]ùD7ø| ‰U±#¶;ÇÀivš³s ©{é®tþ^¾â+ø^ƒË§ùï›cÿ2ùM=™í¨Ší»“/˜`Å'éÁªÕ€uA]P@ ©A5 ÒGPÆ‹¼ˆâCû†}3‹—ÅÏðeù³“ÿýW>°§‹ö<ö`ž`ÿãÈÝÀIæÉIEND®B`‚routino-3.2/web/www/routino/icons/limit-31.2.png 644 233 144 2767 13061246473 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܬIDATHÇÍ–QLTgÇÏ Ú‘Ê²#¡™µÑ’­1Á¤ ;º€Ô†ÖŠ#l¡XíBMØfi¶}0nŒ²˜yPã6Ðh`é6R¬i"Ù !n³…@ –ŠQCdµ‚ ˆHfÜ‘™;s¿ß>Ì\/‘§}ó¼ÜüÏwÎùÿç»÷ûÏ' ""ɱ§€5ÓšiMŒbëïÍüŠí+¶g·EñéXÞµ¼{íÏÔÔ°êËU_ê7Ll¬õ‹ûEÌù‹ùŒ¼$‹™°}kûÖ²5†Âžœ=9+VGññ^ˆïˆïøoª.T]hÿªý+j`z`zàñÖÇ[ÁÄÆºQoôóÏ—£Ïñ‹Àòï—o¹¶—l/‰€³ÀYõq´àV¼ýÖÛoLÆMÆ)+D $¨­€?FÌ.ÂÆz¬Þè7æó >ƒ?ªGÀár¸D`gÙβø–hÃVø4ãÓ ƒOëŽqŒûÃ~€Hy¤œ ¨^Õ € ˜ØX7ê~cž1ßà3ø£zÌW9‘%c%c Ïhýá;šSs‚þ³6¥M¡Å”*C²þ=OÏU§êTf<6<Æ’èõôzz=p;åvÊí3¯÷é}zŸ‰G—ZG­pêä©ã§Ž£Fÿ9²~d½É§úªÕ Õ#z‡ˆÈðŸ ãHÇwÌMÎMªý)Iz5éU‚îI÷˜{ ÒÒÒ`°j°j° .ž¿xþâyˆÛ·9n3œ+:Wt®h©ðˑˑËH%„BŸÿJþ+à,^3¿fžà¿/þRÿK½Úö^Ø zJTÕò}µ}õë¹"®/\_ˆD2|¥¾RKKÔ¿VÿšØÊòʶ—mIÛ¶!mƒÈÓî§ÝO»E¬©ÖTkªˆ£ÌQæ(QŪXË’˜¸5qkâ–Hmsmsm³È¥ñKÓ—¦EVþ*171Wl?ÿ®¿±¿ÑÒ"RÔTÔ$Bèå+/_y=W˜M%‡ôëüuö³ÙÏÌcÿä©ÿ®ÿ.ìêÙÕ³«2÷eîËÜCî!÷ÛÜ‘móÛæ·ÍCÓÁ¦ƒMͼ֪µj­&Ø2°e` älÊÙ”³ ö†+§*§@½gØÌ#Ï#°?¹6¹V¿nÕËÃö°Ýr]þh¿b¿"Ҷ뻊ï*Ä‘w /?/_¤½°½°½PÄqÕqÕqUäZûµökíæŽè‡ôCú!‹×âµxÍüCßCßCŸÈpëpëp«H«ÀUà©H©XU±J¤ño6¾)¢7‹ˆˆCD›×æEäcåTNËu«uO@ h#C"ÞN¯Hqûk÷×|˜¼)Ñžh—PÒΤ¤B‘g7žÝxV¤4½4½4Ý`¯±×ØkDâ+ã+ã+ET–ÊRY"å=å=å="]7»nvݧ8Å)â­ö¾ï}_dM{š'Í#¡dþ8ñ㊌ŒŒ‹DzýŸø?ŠùØé>.äøÈaž’pîÂã…Ç0óÓL÷L7*ÒiŒ4.ý¸}ë|ë|ë x8x8x8ÃÎÀœ{Î=ç†@j 5 3?ÌtÍtÁ=ï½Á{ƒ¨©æ»'ïž„…ýQ>8 Ѐ÷b§’¾ç|lyÔWÔÁg>æVnê·êõM6Ù‹”-°ÀÿG¨,•E vÀs>†ác†ó çݽl÷2 >ê̪'<žþ¹¹¿ÔùqB àÁƒÐT~åvSGJu†µ°†¦~ЬŒ¬ÕsþÆ’ú’zˆêXìü/îå {»xaïc/æ ö-çÝØÿên¼IEND®B`‚routino-3.2/web/www/routino/icons/limit-24.4.png 644 233 144 2753 13061246473 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍ–ÿOÕõÇ_çt9À Èa㌡¹Kt‹)nz/•uä°&–EÇ¢Þ%†Èè¦ãèæ´­k[ÌUø 7·ãíÔUÜíž•ºEœ1Ûì†Q.„"ä÷s>çý¸?œóösn÷ðõËg¯oÏçkï/ÏÏ[@DDH|ì‹ì‹ìYqßþšO{*í©‚Óqÿ¸ ¶J[å•7!»%»`A`A vÕòu^×'÷‹XøÉ|:.ˆH ¦mî„¿^|äÅGÒŒûï]„ôöôö™(Ô~Zû)À™Î|DÜ Ý üêþÕ –¯óº^÷k¼d|Ùÿ~H9ŸrÞvR©x¨ü¡r×ßâ?º`ã†nÜwã>esÈ$S¹i¦Ñv;É×ùD½î×x_óiþø< Ÿ\ø¤<÷Òs/¥o¸z våïÊ×|F;ðï Ñéè4€ùŠù ó .ª‹Ø°åë¼®×ýOãk>ÍŸÇÚʈˆÈûðö{û!ö€Ñ½n,1–@l.zô~ŒÄ¤J¬–ª‡ÕÃ[[[‰ew˜dø]×ǶĶ`¨"³Þ¬‡˜+Ž›d“cš_oe§ˆHÑHŸNŸžþ“úOW°€ PO¨'ˆ°·x XÊR–UTQª[u«î¤f˜a˜c޹¤xEúΜ1gˆ$¢ÌôÑÿhþø`EG„›""Ç¿"{Û–m[4JlEoê·¾o}pèÀ¡¦CM¨Þ{èýÿ³­[¶Â…¼ yò’dªD•¨’¤úº·ÞF]ÈïÌî̶ø”±m϶=ß¹ã_‰yYDä²>{ã³7à›×KKUMæôcéǘ÷,òäxr`qÛâ¶ÅmÎ ç„s,"× × × ð´yÚ˜þ ¿ B$ CÛ?Ï~röxóÝ}•û*-¢ecËÆ–ÁÉ['o¼MÁ¦`SœÎNg'T•U•U•YõÆZc­±Öò}_À€ü×óò ê//ðBÒ›::t ëˬ/UP0¤-H‹õ©ÚñŠñ ëÚ‡þÜåêrÁò´åiËÓ`‡s‡s‡“ÉÀ$8::BõµêkÕ×  ¹ ¹ × ®\cBP ¹£¹£¹£°¹~sýæz(hvíqíë¥ÃÌm˜zfêPuÙ»³wÇúìêH´,Zfë³ùÅŽb‘žú«¾«>YèÙíyÞó¼HõùêsÕçD»»»E¤Fj¤F¤Ä_â/ñ‹ô8{œ=N‘¡º¡º¡:‘Þ¹Þ¹Þ9‘Ù”Ù”Ù5¨ՠȪîUÝ«ºEzÎõœí9+2tì—¿ìù~g_f_¦,±ÚFEh7_5_µõI4GŸ±ÏK?/…–®Ó-§[TMÊû³ög™_ýïÕ®þ²ò²ò²ò ½µ½µ½ÕZ‘å'ÊO”ƒ÷€÷€÷€/^W¼®xŒ;Æ㎤üGàhà(l<±áñ [gÌüàTó©f­k—}Â{‰[ÉöÆí0Œß’±õ#Ž< ÃÃW†¯ FzF.\‚ˆ?âøFi„H(Š„`Ê;åò‚²+»²ÃDx"<³Ò¬4+AyÕÓêi˜]2ûØìc¨ß~º¾.Çù0ëöÖíF·R놥# Ó:ƒr)×]ݘ`‚‰$ÝR(TR^Û<óÌ'׫\•K$!Ñš/Á¯´ŽýÏ_ý}»¼µÞZP§âʬ.™™f&¨`ôNôïÒA‡¥üìc/{\rÉb˜˜ n¨ŸÕÏÀÐ]åßÛŽÁßͯͯŒ»ÊïØäæÿ¨ü÷î¿òž}]ܳï±{óû_‰g<\~&œpIEND®B`‚routino-3.2/web/www/routino/icons/marker-13-red.png 644 233 144 4064 13061246465 15433 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜéIDATXí—LTWÇÏû1"]•Ô:¬1ºÊ ÅR63PEM Ú ¢E6FEl,Ù(JP1Km ­& ag6DmwË­?Bn·V·¡YxDÙ„–Ÿ3ºè0ïÍýîÌ}ïÍÄÙìžàÜsÏ9Ÿwï÷Þ›!š¶_Sˆ‰éîw„[øwp jFûŒöí9«dMÖdí»Oh-£eÀt˜Õ‘L2ÉÜB}VÇçó|^×í'¦‡ò˜ù*¨‚*DWhóù<Ÿ×ãõy¿gó¸6Ô_ðø@| >XÆWh^é¼Òy¥Ú37ÎÜ8sƒ½àõŽzGH añ `€îã|>ÏçõxýÐ~ >x6Y£ÅAqPø /q-ãZÆ5uu¿¿ßßïG?‚ÆRX KªUkÕZ5 ¥iiZ åiyZžÉÆù|žÏëñú:pHk´Ž&¸—à"’ÉÇäcÍ·x‚½Î^g¯Sót°ƒ¬œ•ë6«ãê8ÀÙlSä@2 @ ât£ÀT€°ÿþµÙ7èØA–Ïòáåiö:ûQûQ5÷ç<œ,÷,÷,÷Ö/ç¬5Ök [¨Œ(CÊ&‚u¼Ú m£¶Øqv€—½ÇÞÓì6n+ce¦Q/~ÆÏ†«ðúG¨2¢ø?&¬5ÖÃÖÃl!çÑùä=òyOÏ1h,i,i,aåÁ“ªKu©.`#l€×V •B¸¶èÚ¢Ð4¤{½Wè ÀÇ»?Þ À×UÕUeLV]ê!õîN6–4nkÜÆÊõ• á#6›››Œº±œ±œ±£ñ~પÏNÏN°ÅÙâ ×’kyÒ¾ýN40}OÀœ—æ¼dò½‡Ž: 1$IË›?6à<œƒßxrãÉ'/Óú§ª¦ª ó¡/v}± f½:ëU3ÀŽ7æ^ž]ž]@Y”'ŠO›ã§3Ogšò‡¼øàE@ëžä<œO ©%‡Åaqèg,‚ÊÄ—Å—‰hZ»zíj"¢¾[}·ˆˆÒëÓ뉈&ê&êÌ7ÇŒòåDDmKÚ–mxeÃ+DDmmDDîƒîƒDDllD43ZˆˆèSVÌŠþ–VK«¥U?òü~eE«V5¬j@ßcá±ðXІ6´av`¯¶\[nþè\G®²g-6ûú†œ­õ·×€tGºcZIß›«ß\ à»éY,5ÐèãY³3fgÌFç#1OÌóü¿êÎUœ«8Wa’ÀL-IKõ¶zÛ|˜r.æ\[¥­Ò 6’0’mÚ.€ç”ç”Y…Ýžn¬ÿ<áó£ß•ú¯c¿ŽÕ_Àß ©Bªêÿ…¤Ò iEU-?e‰óç'Î×(›•ÍÊf½€—eùß÷¿ojÈÖÖ ;=;Ý ª0…™5Ü4Ô4dVßÍë7¯ØÀã_U~U ßd0œ\•dK²ô@Š“â¤¸&(ÊåˆrÉWå«òÕ–AýÂ/°Ø ´ý¼~À9õåÔ—ðÁÍ澞û:ØÜ67ž`ÎZg­ù”‹;Å&"‘N ðÑÛ‹Þ^dluéßJ*ý)0©–IeRÙ?¶Lû‘Ãjó>´¤ZR-©gy‚³ÚYí¬fYúÎÍž^Oà›Âo x/']N2²ì€Éõu÷t÷ÀÙmg·ZI×·]ßëû§®|Wþôúb­X+Ö>΄!áwgÂ¥¿ëç«X(г›„¡EháZ ìvwº;ÝÆzjûµýÆz›µ‹ÏðÆÖ±u&ü,VÀ ) ¶Ü?}ÿ48ÓZf-S÷è+yXª”*v-ò(O¶¬™”I™òar‘‹\DÒ°4, ¸¨?­MÖãÖãjŒò®rC¹aÖ®êTæ ¾õ“èB·¦h À¶ø¿÷o|ÎÖ›[³¶fiûõè¡<*ºÄïß¿—H´‹vÑ.œÒ•pÌ_ÿn‘ú¤>©O¸´°raåÂJ"K©¥ÔRê>¢k7ÓžiÏ4k7à 8áƒn¸Œcã·¶X[¬-6´Ø°²aeÃJ–¥¿å1–KÌàãiß:3t§…ް­'!̽ê[gNkW9ÿTíÆ¨1jŒ ŒÓ>Ù‹^ôîÈÞÈÞÈ^¶I×d”%F½õ‡0)~ÆAÏ´»éyÚU;ÕNµÓPî£øGñ⥞¥ž¥í·º[¥V©õk¸Ô‚Ò œEÏ1c/ð4íÖ[ë­õjŒÒ¢´(-|ðÁ~I]r^r^2®¹In’›zƒ?I"»ÃúÇé…ç†Ox+¨Ý OÓ®-ß–oË7´ë^ã^ã^ƒO§ãLß ¡H(в«BÛˆãa}ú/íyÚM—j¥Z©v ÕÕÕ°S)S)S)Sê}«‡¥aiØ9š©™š)xíHJX¿ú-\»GB}Û?…íÂva;@¹”K¹$q®8Wœ $@—¯'N&N&NI=RÔ#ü5˜¸%lçþo£ÿç 9ä[¡áwKD&2‘B‡Ð!tüë7Óã‹Üa;ÓV÷¹[ýOþˆ=ÄÀ¶ºIEND®B`‚routino-3.2/web/www/routino/icons/limit-12.3.png 644 233 144 3006 13061246472 14651 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü»IDATHÇÍ–mLTWÇϼð2åEP U'©û¡˜ 6Ѥe:¼Ô¶1Ц‹¦“fcšJkj‰¤»K1¦Ëª1Í A´î°[“UÛ˜éP65 .—„N¦º#u:0Ã0÷Þó뇙;3v³ß}¾ÜüÏó<ÿÿ?çÞóÜ#@!D^ü)À¸Ñ¸Ñ˜ÃÆýÉõ̚̚Í}1|JC¡îÞ'°æó5Ÿä‘ÿ…6‘Äz^¯Oí"ÉŸª§¯‹<‘\ÈÌ4Øâ¸ JJ2Ÿá?»ÁrÅreYw]ﺾ<÷å9Þßw¾ï~²ýdƒ$Öóz½Þ¯ó¥ò‹¶_é i_¥}e˜‡ŒôŒt!ÀZe­zþ÷±‚ûÏÃëÎ×?˜~0I#¨ÿ²É–6 H=ü)XÏÇëõ~Oç×õtý˜BÀ®7v½aé‰5Lü o8¼A׋^>åS²A *Aõ-õ-" ÝÒ €$±ž×ëõ~Oç×õtý˜ñä»í¬$X­& k¯DÍQ3ÈO”9e=#µ;Ú÷Ú÷ Ì+sÊh+ÚŠ¶B2‚<âQI-¬d+ÙD•ù¨5jm8ÆõSõS@(®Ÿx•A!„xá$X&-“A3LWNW‚z‡¼ ø?¡„‚_z¥h£¶#í´ÓrY.Ëå”õZhnâÁ Ke)!NÄøyvjxjÀ´ƒf<1?ñ:õ-4·4·€¼ mÕyÝtw»»‘³³y³yI½»#wGîŽÀ‰®]'º`ìúØõ±ëɼæÒ\š+‰'*'l6èìíìéìAŽÎÝrÜr$ª·ÊÕÎNÀó#¸*„£p¦ÿ³þÏûòÎ`AÿÕþ«DL¯™^6½ C¶!Û fÓgÓgÓÁ²Ã²Ã²*7Wn®Ü Özk½µFŽ=š44m›¶MÛ`mÇÚŽµÐð\C~C>E Ïž!2Ò:Y;Y+ß!†õ1?FaÌý(÷£Ò—ÄŠñŠq!HBCxhZcZ#2 ò Š Š„0›ŠMÅB,4-4-4 q¨÷Pï¡^!nÌܘ¹1#DVaVaV¡wœwœwœ"ÑšhM´Fˆvs»¹Ý,DãkuuB¬ÿkÑ×E_‹ŒÕºÅÎÅNC¶›¶›BÞκ—u¯ô%ù9ù9Ú8ø½~/¨‰c@Õ¶ªmUÛàôäéÉÓ“Ép·º[Ý­PRVRVRû”}Ê>äN¹Sîäb)¼^ Ãîk»¯í¾ßÞàÜà„Ûÿ{uìUüv„ ý)·;·[h¹ßä~#ÁWî+µúIŠGþ ?\ð\ð\ð€7Ó›éÍ„´ÇiÓC‡½ÃÞa‡åíËÛ—·Chhh?ŽŽŽÁù®ó]ç» ¬¸¬¸¬8É[ºõÅð‹aèým_c_#@ädä$¨Ï=sÿ™ûr0þñ~ýþ¨ïž±xÄñȱàXWŸ«ÏÕöû€Œ[Œ[Œ[ übùÅò‹°Î¸Î¸Îg÷žÝ{v/ØWì+ö˜Ù4³ifT©>R}rvåTçTÃïî¾ùþ›ï ×õææAb~ROeks+ðOýTjǵãÐ~^ÿózäjÖªyÕ ‘ƒ‘ƒ‘ƒð@{ =ÐÀ{Ù{Ù{|y¾<_„‹/h†)uJM츴&­)9Ç€þ„ NÁf̘A~,;d€¬•µ„â?+¿™º=uÀ°‚fn=1ÇR&¿²Ç´Ç¤³F‡ÉSÆ•q []QWˆò\¸²Ož“ç@þ[ŽÈCrHr˜Ã Wå’\–bó‡ãê´:MTþKùQù8£Oþ=æ=f òëÉÿôþ+ŸÚÛÅS{{:o°¿ k9¼·¿'“IEND®B`‚routino-3.2/web/www/routino/icons/limit-20.2.png 644 233 144 3034 13061246472 14650 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÑIDATHÇÍ–ïOTWÆ¿3])¥¡‰ZÐ**ÍjL$T„ÁF*M-lZ)[Z~l¶m(̾|!jÜšN‚Ú@º)›ÌX±‰ÚfADRGÙøkqƒSfŒ"‚;€Â½sÏg_ —Ëîþž77Ï÷Çó|“sÏsŽ€ˆˆ,›ÿ Øí‰öØ0¶jÅ£ÞŠz+å¯aÜÛNÛÎÔÂÒ¯—~ ××jÜ´°™7ë÷‹Xü‹õ̸,+ÙÙnÛ:÷AaZaZÔËa\''§u(õ”z:¿íü–?Âý¾û}['¶‚…ͼYoö›|‹ùeßÿè‹À’®%]¶ˆŒˆŒ¤Ü¤ÜäÏÃÃÉðÎÛï¼ 0úÂè Ê¡1 †µÄ\a3?_oö›|&¿©gê‡çˆÏŠÏwß÷}GK¸áæwàJp%˜zÚIà ‰=¨B†>dÔu6°°™7ëÍ~“Ïä7õLýð<ÖVΈˆ48¡àNÁ0®h½úˆöªö*t›nC›ŸT©*M¥îÓïé÷@UªJU‰µž0ÆØRÆ¿´)m MÑ´0ÆÃüP0Z0 üÛÔ7·ò'‘5_#è£æîôÞéö*]¥3à :éµYmV›rÊ)_4È6¶± pâÄi…UPUØÇA¨,•Å ua~¥ÍëÍëósxᾈHsKË>.ûؤ3~;yµúj54i¬o¬G]¯¸^v½Ì¼½ÿöþÛûÁmsÛÜ6 ŽG¬ Ãgø Ÿ…‡– Ù‡ìßÐOÞ5Þ5–žê)‹/‹fÃóHè‘_ªáÔ§¾€+ŸÝ͸›¡Jb¦n‡›ÙìGÙ¾l¤L¤L¤LÀ¹£çŽž;    °þðúÃëÃêÙÕ³«ga|ÇøŽñÖ@·n Ü‚˜¹˜¹˜9p¦8_q¾Iù+&WL2{õ̽÷¨ð{ŠÁx)<„þ}<ú¸j‡ïŒ:þòÃ÷?|µ‡kvÖì´233!³)³)³ òöæíÍÛkå7 oÞ4 ­]­]­]VüÄ®»Nì‚Zw­»ÖmÅ×þ>õõÔס5¶myÛr€Ù¹Ù9E¿8øâ j´¸¨¸(ã†*Ë˳Ž}_zoro2¤Ö¤Ö¤Ö€k‹k‹k Ë?–,rFsFsF-¡ìÓÙ§³OCswsws7ÿ·úÒûÒûÒ!mcÚÆ´P¬ø(êÓfÆJ–U.«4nØÕWzŽžc»a;ñFÄ"×þp³úfµÄ;ÿä|ÏùžHѺ¢µEkEê/Ö_¬¿(’PžPžP.òàÒƒK.‰ø£ýÑþh_„/Â!’¼2yeòJ‘§®§®§.‘+SW¦®L‰äfåfåf‰ì~iwÜî8÷gîíîí"Æ7""/¢Mj“"ò¹JRI¶võçé3Óg¼"ý=ý="½»¯½ví5> ‰6¬ ˜稧ÑÓ(ëõÆzEBP ÉnËnËnYåXåXå)\W¸®pÈÏÏH¾+ß•ï9›x6ñl¢ˆ$I’$‰t”uu‰¬è\~hù!™;Øýk÷¯|"â½ë½+ºü2ø¥w@¨Ÿ?•TTUTÁÓöð)y¸=ðfàMðÿÝ?ìFšM&xV÷¬îYPI%•0¾g|ÏøPŪXƒ¡º¡Ãã–Ç-[`&n&n&þüðLJ?‚¿ÃÙøÆwÄwž•„õ B«Ð€æOeØÐ,ÓWæ}LS‰*‘™…HUT4‚Æ"{P%ªD•Xù…¥¡-Ør¸2Y%/ðåYz¦¾écÿu«78q””‚ú.ìÌj Šõ7ý‰þDq™z@]Výª8ÏyΓL0jNM«iàwÔQ‡R§tM×ÐT(:mñã.8PpÀ¼š;ÿó{W>·¯‹çö=ö|¾`ÿ¢c»ù˜a­IEND®B`‚routino-3.2/web/www/routino/icons/marker-85-red.png 644 233 144 4261 13061246467 15445 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜfIDATXí—LTWÇÏû1‚•ŠKš‚2£±ºº"…⯥®€ ØìÔT£("ˆÑ²µ‹¿ÆÚÔ–ÝTñW$-––ˆf‹ãŒÖWên0¸ÑÒÔ°F(»S+3SÁVùíÀ0ïÍûîÌ}ïÍdW³Ù=ÿÌœ{î9çóîý¾{gˆÆl¿$ÌæspOãjÇÕŽ«Í\$Ê¢,ÊÍ'(‘) +e$’H"ó`_)cóY>«Çê÷ã—óèù¶ÓvÚÎÛƒãѳÅZ±V¬µ÷p;¸Ü$2ª?ª?ªYygå•w€5k:ÖtY)Y)Y)šÏâl>ËgõX}Öïé<Äÿ&ØŸþ1?ÈòƒîD¶B±ù±ù±ùò®ªÆªÆªFå¹Ç @€CÂ7Üpªˆ³ù,ŸÕcõƒûMÿøé|d|žïä;ùN÷_Y”k)×R®I¿vúœ>§NL‰Wâ•xHr‘\$r’œ$'²E¶Èˆ³ù,ŸÕcõUà þÆçU4ÎÎÙ9;‘¸_Ü/î¯ia æ2óóÉ¢‚½£UŽb@ª=1zPÜ>§Ï `T>%Ÿd €_ͨSêŒJ²$Š[Z"-¤šÛˆ PÞñ/ô/Ä›m.3ï5ï•,¬?ãa|d¸g¸g¸÷Ûùl‚±ØXl,Vf¸º]®ôê ȇ|ù¾|€ .@k¡‚µ*­€©˜ hF3`# ië ȇüüTwÀÕíjv5£ÏXl<`< Ì`<*ŸX(Š…MûYàxÞñ¼ãyJA €G²ûîúîêx¼·oÞ¾ Õ_U--0¼jx•¼ó­Î·à4šûû^[º-¾Œþ2ìÃâ°¨&yŽçUH’R ®l)]Qs£æFÍEYOfOfO&àîA‚‰=³ã‰ã ÐfÚ ¿ø-0vÀâîÅÝzЪ­U[õñðÅá‹uþÀ$a’ÀÔWÒW¢&I=™'Œ‡ñ1Ѓ+¯8¼â°öd²s4{4@zmÚkÓ qYâ2=Э+·®è¾1}c€iÓ ù³äÏÀSæ)€îÝ7@ùNù@—’¥d²Ó?Ó?SëÏx_²š³š³š5 Éé£Q£Qz “U'«€"),õ–zˆ+‰+€ùUó«À÷Ð÷VO_=]ÿ“Á==pöÖÙ[ ÿà;å;¥õÏš—5/kžzn_à_Îw6v6v6’ÓËôŒô lš„&m<Ë`ûöDD4@DDƒ¦AÑ“Ož|BDôã¥/ýÜús+‘·ÕÛJDdñZ¼DD篟¿ND”²"e漜ó2Ýý!å‡"þ¢a“aÀHèrw¹»Üäd|Ä[x oñ=bWÝÉíÕ9Õ9: „÷ê=¢$J¼åqåqø76g㜰vÝÚu0; CCºiRÿŽþÀ½Ê½ Èç>ßóù­ßߎ\nºÜ¤®äï¸.Kð="a°@X°·”½e¦iÆŒÈÓ]kÝ©îTíøP–kŒ5ðæì7gPXèû7¾^Hz! Þ^õö*0õ™ú ô§ÒŸt žÊ¦Ê&¯ó3ù™Ðz¹õ2¼ž@xîÞ9/Îyѯ^B´-DÚGDâUñªxÕÖ©øYi{ÒöÈ;Y}¿õÂé §á…ÃÐjhà¡fjÖkpÑáE‡`hçÐNض/Lÿ– B€¾1ßÿ©µÝÚ®=nþ¼Wò^ñ{TÀ-ÂaË?³Çüñì­g[aH0$ÜÕ,ÁZ´«pW¡²Tݹ_¸·¨Y]³À@ý¥úKà›à›hE«n½-Î'T«>Èy-q-štÓ²3κÏÜêU”·ÆÆâIEND®B`‚routino-3.2/web/www/routino/icons/limit-11.1.png 644 233 144 2507 13061246472 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜüIDATHÇÍV_hSgÿÝÓ4mm5kô¡¡£ AKDÒ`\G¥¥Å¬¶ˆ‚í´â¶7E³ÌBñaú ’Êþ[Kí´|0ÅŠ¥ÓÚLl(l+bnÛ˜æÞûýö|¹©e/{êy¹œs~ç÷;|_Îɰ!û©Vª•jiÆW¿¶â…u…uŸþšñ¯¤Ò¬4ÿñYv¹ì2In¼¶ñšùÒòe^âóë‹?_OƱVÀqÛq[ñgýsdËö–í…îŒÿS„t:uòØÐ±!’¼sãÎ ~CÎ={J’ïüïü¤å˼ÄËzÉ—Ïsé¤ýžýžò'é(päÖ}[÷U}—LW‘û÷“ä¬mÖ&T’$¿I–°DøIjÔ(íŸ<_æ³xY/ù$¿Ô“ú™~@–×–×dSkS«ój¦àåMòÔ–S[¤^zd{XBêš®‘¤qÈ8Ä)""B’T¨–/ó/ë%Ÿä—zR?ÓVÞí…µéé\COÌÚ´=m'E·×ã”!f­é3}¤èÝ¢›–%8Ïy’ ‰7šG™6kõn½›ßgøÉ`a°ä\V?w•l»D:_9_iëÈ©ÀT€4¦I’õb@_и”L1E3ÆŒ1CŠA1(ózÏ÷|ÏUfáqc<ÇWO-ú ú€$šSÓÖeÛv){RW“§;O“â!Iš;$a$¹¹IsÅJc¥«#¡H("c®˜+æ²â",Â"l}óðC‘!ŠØ'Sö){îÜwˆ‰ãMÇ›äÕ^y¬b¼wñ‹ÏísJ”]ý¾,f// <{ñlìÙrÖ×Ö×Ö×* `Ô;êõZys“¹ÉÜ(>ŧø€þÍý›û7Š@2„2úÙèÛÑ·XΠ•]âç=%{Jdµ÷® µôLé™58^;Y; °”«øËVf+ƒÃ}Ñr‡¾æk¾¶„•%eIYܽî^w/ Dƒh°ò\Ïõ\ˆ¸ˆ‹8 $”„’ܽîëîë€Ø§œTN‘e»ŠŸ×ç€ÒG¥vÖ¨øÒÖk륰÷Ø{±0ÿ•Ú²»e7àùÜSã©’ád8¶„[‡[‡[‡Ï¢gѳ$ãÉx2nåÕvµ]mØÎv¶ÁT0LžEÏ’g H¾Kº’®| nÜ[£­‘Â2‡”I@oÖ›Êe…H‹e± `Ó˜Æ*bBLÊ€2  Xñ؛؛ØÀ,6‹Íâøq1 Šû¸Ÿ —CO×§ëÀ6‡•Iª¶WÛ;ö? ?P ìÈ,[ÜQÜØëìuöºÕ…ŠBE!ÀyÄyÄyÄŠ+ƒ•ÁJ 1’IŒ¬À_(ºØ¿°UÙªäoŒhˆEŠ@ókþ±çùSy¶ó,ÉßäTšÍ‹dbO¢-ÑF‘r¤Âê©LT'ªÕdª+Õ•ê"e”Qr¾y¾y¾™4uS7õxÂO‘r,¤ÒÖTò÷No§×šJȽA:çœsÚ:2jDO=i6çí1föØÿ7Q%ªòö£O¢Oþsåm~=h Ú¬ÍO·Õ£$4fÙÕ›ŸåtÑEò<Ïó|6'H1+fÄ É·¹ÍÂ<Á4˃ÆA’]mþoþµû_¹f_òäÖÜ{ À|Áþ ï$U•‹¤æøIEND®B`‚routino-3.2/web/www/routino/icons/limit-157.png 644 233 144 2572 13061246470 14607 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü/IDATHÇÍ–ßOTGLJmøa ¦,iÐÆP“ª]‚Ñ´J¥mBj¶Ò¦4ÔHõ¥6Zƒ>´/…lŒ‰”ºÀB -ÄI—Á‡&õÁ4‚kµþ^ã’øcSe÷Þ¹óéÃîì½¶þÎ˽çœ9ßï÷Ι9w!„ÈO>¸V¸V¸r¶ëÛŸµ%kKÙ™„}\BZ]ZÝŸß@^W^@AOA5gÛ:®ç;ó…°ñ|Ú/ò…íÈ dÒ¼Iû0|PñAEVQÂþ~Ü#î‘LøtôÓQ€Ÿ{îå __xè}èÛÖq=_çk<'¾8ü~!`éøÒñ´™‘™!¼¶ùµÍ¥_&&üU 5ï×¼pgÉ%Ê2d“­¼@”(z,8lOÎ×ùOãk>ÍŸÐ# ðÝÂw…€Új?rw'æú ½¤½Dó#@dƒ5£²Q65­¦H# l[Çõ|¯ñ4¾æÓü =âùÚþP ;³vfOŒY°ò¬<°6=F†êTj¥%˯d›l¹\.—ËAž–§ä)P[U•ª¹B6È”ü0ÞoÅKŒj£Ô¿ÃØaaÍ/œ‚^ÿË}×}7š!+d¥Jóž¼nl06ðT «y5=f˜axÀ8ü eË~ÑP¥ª”§B³¡YwÔ¦k=IaÇg å`ËAl½©¦Œ1cÌF›~{zíôZ¸Ñp£áFƒM3T6T6TW:¯t^^«×êµàRý¥úKõàö û†¡{¤»¿»úæú¢}QÔõÑP_¨ÏÁ7²ç=oèÒŸI »¸ßýçýç.Õ ÖCë!±€'Ȇô½é{Ó÷ÂÐüÐüÐ<˜§ÍÓæi(l/l/l‡šüšüš|h¹Úrµå* æææÂ¦#›Žl:Þ1ï˜w D·è]pÞsöÜÙsÄ’ßÝl½úSÖOYZØÅ}r's'U€ßî=¾÷رà™ò¢¼+ <OÄñ’ñ’ñ˜mœmœm„ŒÉŒÉŒI¨­®­®­†¦¦¦ÿÐçóù|>ØýÝîC»9x>I¾üaZ€‚œ‚ë2,Ü]¸k{¹Ù\c®±ª¦ª¦ª¦À_ç¯ó×Áüýùûó÷a×±]Çvƒžîžîžnð=AO&Š'Š'Š!^/‹—Aùµòkå×`.8œ :„mN¶™øÂß ƒÖãÂúÕú5í²Pævs»Ð£P,·Åí”-Ô-uKÝÂuE]Q!¡p(beleleLˆ¦æ¦æ¦f!ŠW¯*^%„¹ßÜoîb b b Bˆ¢õEë‹Ö Qî-÷–{…P[¬\+Wˆ´Þ$ß³Þ¬"¥'µÇð?ö§J©še{Ü÷è=Ûú·õoë‡þ“ý'ûOB$#’ɀҜҜÒÈߘ¿1#´µ¶µ¶µÚ+R{´öhíQè\Ö¹¬s™í—Sñ¦x1žé=­ùS{ìŧ’qÓoúíòΓuOÖÁbp1¸è(EìYìYìD<OĪRUªJ;þhðÑà£AX|kqõâjGS š£æ(`%ùRüÏÊ×wØަCH†¤ÝÇÀúØú˜§ŽßN¹Cu¨P'Ô uÂáïR]ª ØÊV¶:¾æ§ …g÷±$Ÿæ®½ óèÌòº¼Éòñãw´ÐÏùŒÏ@MªI5 üÂ(£A¯PI%ŠoåMy#…—ÂOòñ¿ÎÿÒþ+_ÚÛÅK{{9o°ÿùjP Q;™IEND®B`‚routino-3.2/web/www/routino/icons/limit-30.3.png 644 233 144 3016 13061246473 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÃIDATHÇÍ–ýOTWÆ¿3( eðI“] Ú5ÑD›–•t“™B`0V‡")q[_Ò4Úlkd³›Ø4¦²+»k  ›ˆ„M“òÒl0ÖßöÅÝ a: …h8c™ÎÌ{>ûÃÌíøx~¹y¾ç{žçIιÏ9""²6ù°n²n²f'°õ=³¾ºluÙo¾Là¶8XÜ÷ØaMóšf€uíëÚõ óFêz“?UϨËZ1 «ºWu[Š’øS¨~µúÕÕöþËMÈèËèûIƒ÷ûßïèíèíàxt÷Ñ]€¥¢¥"0±1oôë ¾T~ùô9}XùÍÊo,~X•¾*]rKsK_ù0Ñà{Þ.»`6m6MY þÈ"K!Bc!óÉ~c½Ágðz†~Â@Î[9o‰Àþw÷¿›q9±`âŸðñÆ7z±>à,gÉ-¤…â㉀º©n`Á&6æ~c½Ágðz†~¹•Ë""çKàï;^Ðbw´©Xn,ô;1oÌK,éT©|õšz ´ͯùAT'ÕIÌñ”'<ù)=¬eiYÄ4¿Á—à7ôL}c+§DD¶_€ŒPF(´‚3Þ;Þ;À \ ÞPo°Ì¿fT¥ªT•Àas8ň'NÀ… WJ½€Üæ6€ÊSy,ó·$¿=©gèßNø‹ˆ´Ý"ûHÝ‘:ƒM}¢tt`tÎ_9ùüeÔÈŸG>ùÜÔ›¼>y}ò:4‡›ÃÍað‡ü!¿yÖЧõi}ÚÄ%EE&߃©{®{.SOE”)%üˆÞ'"òà÷Ðw¦ï ü³8»8«ê×¶fëš­Dªf«¼U^Ƚ˜{1÷" ž<5x Žì,ÞY¼³¶E¶E¶E °X,›†|nŸÛç†õë×7Bõ¯«×U¯ƒ_E^¾ôò%"ÿþÓdÅd…ª‡€ø`¨6»Í®ºaɾd‡É×§ÞœzZ>kv5» ëz×·]ßBi´4Z…Úµ;jw@Éö’í%ÛMù¾|_¾:ìö»Y8üpøá0´4µ4µ4AïáÞúÞzøí_óä€ÿ¹;yw ô]è;Ð7¼4öÒ˜êÖF×Fõqþ¾ðÉÂ'æoÿ,š ÍÀ>ë>ë>+äuæuæuÂ1Ë1Ë1 ìÝ;ºwÔ4PŸ3“Ÿ¯é¦Ôu_Ý®qkÀO‰»RÍ(Ÿò‘dSüûø÷ÄÔ°öX{ \2’?©y>ù_Ü»ò…}]¼°ï±óû§U3ϳ@Û´IEND®B`‚routino-3.2/web/www/routino/icons/ball-9.png 644 233 144 213 13061246467 14213 0‰PNG  IHDR °ÚSbKGDÿÿÿÿÿÿ X÷Ü@IDAT(Ï­’A ìÿÿó<N Qãz…5@’¤a€Wv?X‰ºà‰Ï×`åýÅ&ʉº+Ü’_vêëß7óU/?£IEND®B`‚routino-3.2/web/www/routino/icons/limit-9.9.png 644 233 144 2445 13061246471 14612 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÚIDATHÇÍ–ALTW†Ï ˆ¸p dˆ:"c¨ ‘(FÁ ”„˜mcLÕEuUpajÑbRØTMˆ1 êB#%–… «Ñ”F#%ˆ¢Å†Œ£‚µXœŽ8Ì{s¿.fî¼Aëž»™9çþçüÞ}çW@DD>‹ÿ ¤,MYš² §|eåÓ¶¤mÉ¿‹;L°ÕÙê~ O-<Ù•Ù}lÅz_ã“ëE¬þÉ|:/Ÿ‰•H½œzÙVÃ÷wZv,n» é=é=ÿ°¯w_/ÀÕsWÏñ5LôOôLULU€ë}×õº_r9þ¿Ìë›×góAª=Õ.¹•¹•ÎC1ÀN¨ÝZ»àÅœsT ˜ó™¯*€ AôšLŠõ~¯ëu?Ý_óiþ˜¬MY›D`»w»7½3Vð¸ÍéZie>A#`î2wu[ÝÀ† ¬Xïk¼®×ýtͧùczdæÙ¶oFÕÛëí@ ò ˜>Óш±ÛØMÄøÛÌ1sPê Ú¯öc­VDCÑXxcÐ$fÀ !Ý¿>µ>U lßœt”""® }"}"8—ÐhpÔ:šje˜;Í„hæ W’„ìa{€ l`ƒ•V!R! ™fšgàÛhªÌ æ…˜, šðhh4 þ¸ž¸°Ž;pàè£À@´ˆl#ÍH³ø†]ÃÎa'œ\{ríɵ0ötìéØÓ¤'äú£~+v »†]3ðÇZýÔýÈÍÈÍDuQ‚?®'.ì·oàRàR¢µ7^ùn¤q¤òßæ¿Í ë½ë½ë½P´¢hEÑ x]øºðu¡%èQå£ÊG•Èä>ÆOLæMæ%àauGóÅøµ·ÜR—a¢x¢Ìrf¬³'ζžm…²Œ²Œ² +_º®t]é:83pfàÌ€•ïèïèï臲Åe‹Ë'áW—®.] ?vötöXyóKý/ƯõdfdfDG`òåäKP‡cÀógÏŸ=î&w“» Sjž6OR ªUµ&ùU¡*T…À1Žq,éI¬a k@5¨Õ0ïU^à„9nŽ'ù˜1 ÒÇ’œŸú´ú4À€¸ó?1Ÿ-æ„9ADõ«)5…â ÿÄ_ù•_ùi„ïi¥øûQwÔMÌAs0uÿ8ßÇÎ?k¿•³öv1kïc³óûW KžÉPIEND®B`‚routino-3.2/web/www/routino/icons/limit-5.3.png 644 233 144 2560 13061246471 14576 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü%IDATHÇÍ–mHTYÇŸ™¬QÈ·pKK‰Z‚¾› A™åK¬½˜Lbôa©­`Dm$ºkm‹‘[˜M-Õ–YmD-+½¸aZ©!Ik[ŒEÔhæÌ=÷üöÃ̹mí÷·{yžó<ÿÿÿžçœçI ¿œÎ gBÈv–Gý±ù±ù_žÙ ««î€ÄúÄz€ä¦ä&³'j[óV¼=_$Šoç³ü’$Q‡ëŒëŒ#;lï†âYųb¿Ù?^‡¸sqç† Øxaã€O‹‡oÁÛæmxý:¢¶5oÅ[ùž_vÿ‡_Æ^{Éñ7¸Æ¹Æ‰ÀÔÜ©¹Ó7‡O‡•+ žy6F;@ 㯳?~¬ñÒf[óáx+ß³ð->‹?¤G eqÊb(\W¸.îH(¡çW¨H¯H·ø‚ç€j†ßð¨UÂ(èëú:µ­y+ÞÊ·ð,|‹Ïâé‘k[—ƒáŽqÇDÝ↪Q5 ¾ôú ª™ªH¡U¹Ú 6?PM5 sÄ|k¾ã‰r)Úì42L‚ úU?ãk÷8÷8K`]Ž­”""3†8oœ×ƒÙì Fð¿¡ÓœmÎæ¾ˆO£ÃO  ´)ÚÅ.v­´ÒjóÿÄ5®)j«ÚÊ»þHïPïDøÃzÂÂnÀ¦›vÇ̯ÀœgÎc½QiT¢Ï–-9[ÖXs` vvvÃPÒPÒPÒÇ+Ö“Ó“Ó“už:OÚûÚ»Û»£§ƒ}Á>à­Åæë kÿN¾9ùôº, 0êûÅ·Ï·R3S3S3¡ð^á½Â{Pâ)ñ”xÀ;Ñ;Ñ;1*èñÂÇ /„ {&ì™°ЧO)ž“õd=YÃíÔÛ ·"á£æ‹/ÄoéqŠ$´&´ÎùZdñÒÅKEô?""Ž#áJ»î”Ü)¿S.â_ä_ä_$"R!"+»â®Hš/Í—æ“È0™ÌG"U1U1U1"k—­]¶v™HêþÔý©ûE*ˆ‰„»ä/‹/ÄÑÉñÉñf7¼|þò9˜U‘cÀÍê›Õ7«¡lIÙ’²%ÐÔÜÔÜÔ “N:8é \9zåè•£ÑÓi:M§ÁÐÈÐÈÐ]-ºZt2J3J3J¡=©=©ÝVzów‹/ÄoéqŠ˜Í‹Žnc•±JD^ˆˆHŠõIÞNo‡·Cdš1͘fˆ”ºKÝ¥n‘Œû÷3h|Ñø¢1ºbžtOº']$knÖܬ¹"-y-y-y")))"N>8ñàD4žß,¾0¿¥ç£=æøpõ4÷ë93f4Ìh€ÄÜÄÜÄ\¨Ý§û@×Çõqx•ÿ*ÿU>°œå,£Ùh6šÁwÞwÞwÔµWíµµœ‡F›Ñfãûô©´õ1ïëÞ×Ñ>¦kŒgÆ3ÞéCú–¾eÛKõº^×Yd‘eók­µ½]o×Ûmþ¥z‹Þ|©v«Ý¶>ö¾w¸wøû˜­óãv¹]€į̂nÕ lVª“ þSè4׸Ìe`8ôoÔýº_÷£¼ç=°—ZjA_ÑOõS4J+MT—ê²ã»cݱŸìüŸí¿ò³½]|¶÷±Ïóû/¢™ ÃCÊ@IEND®B`‚routino-3.2/web/www/routino/icons/limit-33.6.png 644 233 144 3035 13061246473 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÒIDATHÇÍ–ïOSgÆïv-¥è nÊ/Û”¾QuÁxŠèÜDè3g`Ãl3}a¶%¾X70> Ì-ÄÇ_“è† Sp ™q11ô‰?0>s˜0а4¡t…‚…¶§çþìE{<Ä¿ÀûÍÉõý~ïëºÎ9íunB!%®Œ9Æczß×ë¦ SÅ+ßÇññvv<ø~³ð€¿}ñ[õ¡Žµ¾6?¿:ÿ|=­. ½Ò•Òe(KàÏáíUo¯2-‰ãÿ\s·¹û‰\úà€«ÝÕ·0~cü@ ,P:ÖúÚ¼¶_ã›Ï/>F_Xл ×0 )É)ÉBÀòÍË7çˆ çÃ[o¼õ€çÏ Ò±?4Òd$ˆ¶üó°ÖOÌkû5>_ÓÓôã~d”f” UïT½c>ßðð<|œýq¶¦íŽp„4P‚J V«% òº¼€èXëkóÚ~Oã×ô4ý¸ýU†„ÂY5C5C ú¢ýÊH47š êíèXtŒh©T«~ÕʈâVÜ ÞWï«÷Ñ×$^¼O‘”»•CÊ!¢Ê@4=šj0Î5Þ/0­ék¯ò‘BsÐ &qx¨¨¸ÀVåFBtÐI'È6Ù&Û>|óŒ´ÒJ+`ÅŠu^=‹,²@NÊ€ Èr'!zü&ô4ý¡¸W!Ž÷‘¾ç½=ïiljÑÃÍ¿þøëàüÚÙêlEÞ¹ûûÝßu½ÁÂÁÂÁBpssƒ÷€{À­÷ÕµEmѱ{»{›{8{?9BÞÛy»ÿv¿®'G÷í)¦â~„Ú-„A÷áîÃàΘòLyäîÅ _]ø*aG£ÚQ ùÞ|o¾ηœo9ß¹Y¹Y¹YPs¶ælÍYÈ”™2SÂÍä›É7“uCþ^¯¿Н_+¾[mùmËo°ÉûzóëÍ„ÇvWWÊÝàÊsåêûI2\°.±.Y³Aì(m+m"–=óËÌ/†3_ˆ¦M+„xùÓ¥MK›„¿8~qü¢!OÈòÑhk´5Ú„0§šSÍ©BŒž=9zRˆÙÊÙÊÙJñt]1^1^1 1|pøàðA!*UŒTŒQ4¾ÚµÚ%R2–š&‡áŒÅ‹‹ a,±ÖYëÖløEEÔA¾òâÿD¿Ñ¿fƒÿ€êŽêŽêȞɞɞ{y÷òîåtJ§tBÕªU §!§!§níºµëÖ.ý‰µÏ¶Ï¶Ï‚Mµ©6N;5Y72/e^‚«÷ûJúJðC$?’ª)ý¥ô—ÔAû§%Ù’,» \.…ïvtÕvÕš½Vôš.`o¶7Û›¡|ùþòýPn)·”[ôþZãZãZ#œh>Ñ|¢Y¯wNwNwNÃzÛzÛz›^/úrõöÕÛ¡ÝÞñfÇ›áÖp+Ä R'R'd—g´ßØþüðø:€Ü]v²dSÉ&ÂÖX7Z7Bý“ú'õO`âèÄщ£`?m?m? iiiÐpµájÃUð¸<. ÖÝYwgÝ8Ž€ê+ë+ë+Ál2I“„†ÚwÕwUÂÊ…¸\x|á1°*î'‘cÇû¸½7co†þ/Q6ÌæàûŸï²ï22V«‹Õéw¬¤*©J*øz|=¾P-ªEµ€œ“sr&·NnÜ 2"#2ê>uŸºü6ÿ2ÿ2¤º22ÕõÙ»bï -p÷ úžÉ±ñ\‘‡žæØ6¹<$›dÈY @vÊNÙ©•vi—v ‡ræåØ¿pài‘ËårY( Ée þ²¡CÌÓæé`ÿ×rLKþ°–¼Ž$Gp$žÌòŠ2¥Lÿyb=ùiä3>yYþ,ÎqŽsÀ,!B Çä°B‰ùžX,#*û”€¾Ó’?¡y6ùŸßoås{ºxnÏcÏç öo®H%Ï[À8IEND®B`‚routino-3.2/web/www/routino/icons/limit-31.5.png 644 233 144 3013 13061246473 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÀIDATHÇÍ–ÿOÔ÷Ç_Ÿ…K,9êÖ¡bl7“ih#Ü<¾hgQür4XRèŠ s±™6º+bÆí °.…3%k0:²ƒnÆ «Ð\‚Õœà‡÷åó~쇻Oï&ÿ€ï_>y¾^¯÷ëùü¼_ù~¿H¬<Ÿ—5 $~žø¹fâàíMooJJàß÷ùŠùÊ“¼÷Å{_8?s~ƯàÁW¾ðÙ}vˆa#oÔû~ñýå£gøE`å—+¿ÔîAâªÄU"Y”Y”õëHÁXì~k÷[“+&W(„«Y­ì€?ÆšŠÃF>Zoì7úý >ƒ?¢GÀ²Í²Mö”í)3·F6ŒþŽZZ ¾à VCÈò„ËÃå,êS}hhÃFÞ¨7öýŒþŸÁÑ傈HS!ì÷ì÷€>Ý f3A~üŽ`T©2$ë?Õmº Ô)uJ"~… } Â'Íf‚ák‚5ÞéOÓþâýņÀ¦ÂØ(üè0ûÍ~'=žàŸìµUmeOh¦XÇ:Öž¨'ꉠÚU»j“3Ë,³qx˜a†/^¼êUõ* ÑWÛ Q>ƒŸˆᡈÈY)ÕïT¿óý9üd´èë¡éOM­M­¨›ÿ½é¹éaÙêkìkìk„»iwÓî¦-χ*B¡ èªê*ï*‡–Ò–÷[ÞG/;³óÌNðOEø æõš×Aý+¢Ç¤ED²»eîÍ—ß|Yd<Ýwßw_Û’kË;’wDîBw®;W´]Ww]ßu]Ä]í®vW‹ôtôtôtˆä;óùN‘¡ì¡ì¡lY¶|¹¾\_®È¡áCßúF¤·¶×Ñë­¯À5ïš—ÀÂ_ƒïßÕ¶ˆØ]v—ˆü9¢'A»œœžœ¾9GönûtÛ§"aëìõÙëZë)©¥þ‘Ú^ÚñÒ‘ñ?Ž_¿ òôôÓÓOO‹˜˜˜ˆXÊ,e–2eVfe^.l(g(g(GÄ?áŸðOˆÈQùP>Ù•Yò¨ä‘$þ m•k•Kkåïo̼1#¢ý6å\ʹÍ9ÂÔšÀš€>ÂÇSL}ûìçŸú'ü°ïÚ¾kû®AFeFeF%¸KÝ¥îÒØ¨ògògògà|íùÚóµËGÙ_ß_ß_Uö*{•Ú:Û:Û:aí™O¾x®þ¼÷Fï ¦ øZð5ÿ'yVªJYPªD•ëYÏú8e‹,²‡ýÿ÷‹B5¨:UêœêVÝj“ÚÄ‚úC´ÿϰ±^×ñ:_ó9ùåÒWú"°ìɲ')CZjZªä•ä•lþ5ða39|ä0Àè’Ñ%Êæ°’•ÊDˆ GÈõz2^çk>ͯõ´~ÂÀÚ=k÷ˆ@éñÒãî¦DÂ@ TçVçj½x;p…+¬#bDÌ ³‚9PA …°±^×ñ:_ói~­§õ~ä˽­ßGähüh|ÞÐ+Õc\6.ƒéŠUŪˆ›óªyeº ˰@ý¡¨,ªRTŒ>cƘAY–qÒ8IÌIs˜Ið£ÊÓÊÓ´Áú}Ž­ÙÖîq÷xd) ™Cæ<ÿ!°V€i‡æs4Ë,³¼…-lVavÌwðž÷À9óµùzžï±¡™¡°õ~’Æn½€3µgjAÕX^Í7¼kØ?ìG]{}-x-ͧšO5Ÿ‚–Á–Á–AøÔñ©ãSÇŠ}ôôôCýÓú§õO¡ÿ§~¿ß.¨ê÷Ä{ aÑòj}í'i¬ï7¸÷ùÞg° ÔϺ:Áƒ;‚;  ¨ ¨ ö†ö†ö†@š¤IšàyêóÔç©¶¡ÐÖÐÖÐVØÝ½»{w7>8|p Ã…áÂ0Œ´´Ž´ÚÕWç´^B_ûÈìÎìVm0¾k|×§¤Wõ‚ùÙœ2§ìÙ›Ïn>»ù *ë*ë*ëVê~Ñý¢ûE°Î»Î»Î Ì@f .F/F/F!ú{´6ZëHøAÿÑú ?YYÖ;…Æ€“×~›Z£ÖØùÿ6ÿmþ[èèèZh¬¥°¥°¥<–ÇòXp{äöÈíXß»¾w}/tnìÜØ¹ÑŽOì¡yý¤—ˆõØzœòNÄð~É‘µÖ6k©µTæGë‰Ö­'D²›²›²›D<>Ïã™Ë™Ë™Ë™òNy§¼"î2w™»L$#?#?#_¤*¯*¯*O$ûeöËì—"£ £õ£õ6/ù ½yý¤—HÄñýõ§HOgO§ˆÌ‰ˆP)çÔ~µ_b𠍂*¨DJ½¥ÞR¯Mi´GÚEŠŠŠDŠoß(¾!âÉóäyòD–»—»—»EvîÜ9(R‘^A""ªCuHlI,©§õµŸ¯o%Fò–ô=F}à¦z§º¦º`6w6w6×±ÊR–‚pu¸:\ *¦b*ÖYë¬uBž'äë{k“µÉæãƒÑgôͳ|ëVþ>VÃ.8UŒ1 j…Z¡V8®RŽ*Q%À³Ùlvô±¹¡é¡éoö1Gç'Ù‰ €ø+0‡Ì! Ã}·Ç3¨,ó-ó jÐf y†<¤¨SãÕxúø-S˜Báÿèðê:5OÍ#UI•T‰ˆ QÁÏCh]>ŸÏGŸÿ•/ÆCjj€Ÿ\özÙk’JPøU*0½˜”Ûä6ÅD>Ëx–AªÏI’ E¥ßíwÓ=,¡°—½üÿp3¼›BªPIäa&I‘&Òèæñ?­ÎgIÊŠ¬(&Þ ø >©Ò»dÁ®‚]¤¸C’Z²N\÷]ÝÔº©]·»jºjÈnS·©ÛD)>R|„,[_¶¾l=yÁqÁqÁA¾({Qö¢ìK¿Í§›KšKÈcOŽ5k¢øgö“óOÎëU-Y<Þ·%ŽäÇ€°š yúòÑËG‡ÿçÆ ËåêËÕôJŠôNzG^;xíൃdKzKzK:™²?eÊ~r~ïüÞù½$ì°ÃNÞœrsÊÍ)!C5M5M5M¤e®e®e.™—•7/oóçÄü‰ùô>Œkwµ»ÄFòjâÕDRíø1A½{ôî™s°%­5­  vxcŒc€ ‹&äOÈ”t%CÉkkkF4¢@É­’[%·€É®É®É. «=«=«¡(D! ¹\.—ˬ‡Y²Îûm§ÛN#b0­woï^ƒ°%Û’ƒ-òväí™sLÈ2–K˜ŒpŒp R}+¤•©+Saù½ëL÷™nÀ=Þ=Þ=>¤÷ÖñÖñÖ”Æ–Æ–Æø"ú·öoíß Xa…ÀÙô³g3×]W¥«ˆþ;jZÔ4ôR’” Ê£‡ „V¥UZŽ?€`щÅ7B2 Iš¤I!ÁK«.­º´ °Ú­v«˜a›a›a<Û=Û=ÛÑ¢?D']œtq:˜:˜:ÔFÖFÖFæÝæ¥æ¥Àÿå>Ê…0µ™Úþ¤zU¯¡U‚¤¤+éÍ@ݺ;¦7õ‡"7F®‰\˜¯›¯›¯‡ŒÕϪŸU? ÈNÎNÎNå•N¥Sé2wdîÈÜm(ÚP´hjj¢ÎDŒ: ̳³Êý9ךkå& ª¾ª0zšÃw徂}$¯ë»R;¡ ßÿø~ÅûžVÏcÏãÐG=°g`ÏÀÒã‰ñÄ„òšÐ„&ȾÅ}‹û“¬f5«Iï6ï6ï6²çm£ÇA!¦ù:|¡]ÉW  úÀ-½46½˜”ßÈoéTê°ÎBR[§­ ŸLôÒ†ŠXÄ¢0¬|rDQü RD )*Å}qŸ$E¢H¤[Œ òï|æ|F’r¿Ü¯˜øð“96ùýËË¡ÉO«ßéw’ܧv¨ÔÏA™FIq/÷†{Å—|IŠ.Ñ!:Hû Ôµ†>Qçïñ÷¬Ô'PoèóÉÿõž•_íí⫽}7Øÿ5z‘]¾×oLIEND®B`‚routino-3.2/web/www/routino/icons/limit-18.3.png 644 233 144 3047 13061246472 14664 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÜIDATHÇÍ–ûO”WÇŸ¦Ì ÷Á™P%Ö56]KøfãrÉ0Q-øKËVb6M4¶6½S²M–ŠiŒÛ%&rIv]4H€"›€VI¹„ÁxKÅKp€yç=Ÿýax™iÿÏ/o¾Ïóœï÷ûžóžç=""’²ú0o2o2'…±ù/‘¸­ÐV¸õ?aÜS™©lìsH>—|ÀÑähÒ'#ØÈõÑóE"üÑzF\R$°¶YÛL9«ø (³üM›+ŒO€½ÓÞ¹¨Áû]ïwt´t´ðW˜šxšó4"ØÈõÆ|ƒ/š_¾ø¾¼ÒýJ·éXc­±"‘Ÿ‘ÿÚá‚»¯AIqI1ÀO1?Å(3„~HP9€?ƘÂF~µÞ˜oðü†ž¡ö#àt;Ý"°ïí}oÛÃ&ÿ¦˜nè;/ù’Ðüš TªbÔ€À„ "ØÈõÆ|ƒÏà7ô ý°ùíÞÖïÅ x ¸f膾'h Z@}®Ý×îcd”>©ê£ =ÒjAŪXKdøy“5¤ô€– %Ô3‚ ßóÃßðbUm+ý""¯Ÿû”}Êoé½Ó{!tú·6¯ÍóbMᩚU³@-µÔF©§žz ™d’£â'8Á  AT¦Êä_‡ùqùnønØýv¿ßÂ`ØÏêJ5|5Õ|ª@ËàøÛÀÙ³¨{¯Þ[wo]DïvåíÊÛ•pzôôèéQÏÏÏŠäõ^½Wïàɽ“9“9Pß\ßX߈úáþˆgijVý–Z9\|¸˜ û®ˆˆüpœó­_µ~µ¶.ïµ9[¯´^aÙÜc¾d¾ÝÎng·n>ºùèæ#H9•r*å*:Tt¨ÒÓÓaøÙð³ágCÓÓÓZ—Z—ZåËåذœv>í<Ëÿ;9åòª÷à—€Ðå°³˜“>Nú83[»'Ü"ÄŠˆ˜e.&9&Y¬®¯] ®ª¨¢JD߬oÖ7‹ÄuÄuÄuˆ):RtDdýÈú‘õ#"SÀ0ÉÚÐŽiÇ´c"µ–ZK­E¤¢¨¢¬¢LäÕnèÝÐ+Ö•²'õOêM"9}9}"¦wãÇâÇ2³‰ŽD}æžÿBîµc@nKnKn ´–¶–¶–Â5Ç5Ç5ìܱsÇη˜·˜·[o=¾õ8ŒçŽçŽçF}c6lØ`!°XÀþëû¯ï¿›ÞM/N/†[ã?æþ˜Ë<<èOú&é}Â,JïÒ»L"Z™V&"±""â4ÞXŸÒ'õI[‰­ÄV"rqãÅ7ŠìÚ¾kû®í"½ñ½ñ½ñ"VÕcõˆ ::t4²bÍñÍñÍñ"{²ödíÉé(è(è(qÞY×¾®]dì“1טKœ"æBs¡çB¡Ó„YÌþ<Þa‘þžþÙ&"Bõ*ïJâîĬÄ,‘•ž•ž•‘ººº‘~W¿«ß%’z!õBê‘Ýi»Óv§‰xƒÞ 7(’]]]-âns·¹ÛDœ¥ÎRg©HRYRaR¡È[ÞøìÏd¥Â]ùmå·T‹t•t•ˆ˜'ÛÛî GŸÊ“5'ÿ§R?£Ÿç~þÎówPK=KÝKÝ‘Zj[j[jƒ¹Ù¹Ù¹YPMªI5º¬.«Ëð8ÿqþã|À‹/híZ»ÖsßÍ5Ï5£BÿXñ®x#§’‰šŒš £á6|¿jìõ³`Ÿ±Ïø-à ùBkúüú>}_Tû“ÊT™ :U§êŒUq*NÅ[ØÂ–¨¸®B*êSU§ê”Wyy±ú³òðß-ß-û¯ö_ýF~ÓÇ¢:¿v0æ`L¤óãÒ|š8zzéü¢‚ PýªOõW¹ÊU`‘@=TwÕ]`yµþLh:4MP]ÓfµYà¼ÑùZZ€åßwþ—÷_ùÒÞ.^ÚûØËyƒý?hs¿qñ3`IEND®B`‚routino-3.2/web/www/routino/icons/marker-34-grey.png 644 233 144 6251 13061246466 15633 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ^IDATXÃ…—kPT×–Çÿ{ŸÓoÂS‘W‰´ Ú¢f#„VˆAGPÓ±4X„R2^£NQ¢ÖÅÑ4BUM9b¡y052øAˆD Ε„ø "åÕ‚M ¤»û<æ}ôNªRY_Nî½×úÕZÿµ÷:Äh4F¸cÒ†'4šíf»Ùn±ÚxÆxÆxFôÉþ-û·ìßâu¢‡è!zþ7Ηóå|Ã?°UØ*lâ!¡E$¡E(€v´£Àøˆ‡IŠ$EÉdûØ>¶ïn± ±ü½0kZÖ´¬iµsRrRrRH?ÄqA$a’CøÁÉåN_F! Q´XȲ…láû˜}Ì>æ‘]™]™]Yl¶÷Ûûíý5·Æ_}üõð=š|M¾&߆DžDžǑÌHY¤,RDxFxFxÒ»ô¿´^Ú/ù{éßOŠ/ñH|¬3ƒKEWÑUt’ɲ…l Êg‚˜ &èû“cgÇÎŽáéUãUãUÃgĵǵǵSGXKXKX Y¥ÈTd*21Ž}؇}PcãŠT¤ðƒü0n °Ø°ª¥¾¥¾¥^tÔ…Ö…Ö… ƒo ¾5øÖ{GÕAê uÐ%¿…ßÂoYž/¦‰ibZw2]J¼8ðâÀ õ¨G}Àkl[ÁVÔŸ³OØ'ì3VjßÔ¾©}“‹2ì0ì0ì`‹ÝGÝGÝG¡ÅLÁpbˆ"†€E:ÐÀ.p`…V³0 ³ÒI:I'8<Çs<;ì:ì:슮KŸ^úôÒ§\r×®]7Ø›r•\%W=¾Ê%qI\RÌÄ 1O~§ªFU£ªùÈ|d>ÿùñ«ãWǯÎX©]§]§]Ç­JKIKIKaoº º º b ¿’_ɯ„µÂZa-XlÆflÈCò<ˆ™˜‰ ÏÈ3ò ?’É/3Ìò!|¸­w[ï¶S$ÿÚÕÚÕÚÕÜ*)¾Ä#ñQÎÊY9kB„½Ü^n/Où¯w¼ÞñzG 6”Ê e¬¤‘Qq¯¸WÜ Wæ*s•¹ Ðcô=­d+Ù `V`€nt£0Y;ˆÉb²˜ 0LÓ8+â*ù7”J ¥l±—ÁËàeƒ%‰Š¡b¨zp#Öëˆô÷ô÷ô÷ç^è^è^¹0$ Cp¥õ´žÖÝ>Ý>Ý>ÀÏç~>÷ó9 §¯§¯§@3šÑ @9ä1ˆA`²)A"H`*6›ŠáÃ;†w@2W÷Sî§ÜOA®oÒ7é›'ñH|” 悹àE[=ž{<÷xŽCó"æEÌ‹ ˜À& §žÔ“z×N_;}í4P´®h]Ñ: ÖTkª5Ÿüy0Pw²îdÝIþð‡? è½ p ·p ¸¿ùþæû›|[¾-ߘufY‡W¶°òy±óbçÅ’‰GâcmC¶!Û¾Ò%èt ÈT5¨T wnWÛ»ì]ö. ¶°¶°¶HLJLJLbVƬŒY üöSØOa@ù±òcåÇ€¥«–®Zº PÞWÞWÞúšúšúš€òå Êš%š%š%sƒ¹ÁÜxÅÉ/âñ‹Àªv«v«vc<ðÀ7ß@fÓPÓPÓS|Œñ1 ¥çéyzþå>…h­¢`f03˜@êêÔÕ©«ÐÆÐÆÐFàAòƒäÉÀƒC=8„­ [¶Pú*}•¾€½Ä^b/Jô%ú= “ëä:9 ùZóµækÀ!wÈòÊè0ð*>ÝD7ÑM¾Ä—ø’„RÆ—ñe|Å £ GŽ.Ä#n7·›Û ÆÙ½"Í£y4˜?7~n< Ä qBpáö…Ûn­>­>­>€¼X^,/~·¢¡¢¡¢ðôôÖ\spÍAÀ¾Ó¾Ó¾]]]xµž|G¾#ßAt¾2cMcMcMxDµTKµâ&þ—ø_âÙ_;0m`ÚÀ4zv²ëH´_¼_¼_<&&–M,›XYÇžŽ={ÿÕþ«ýWñíñíñí€îŒîŒî P•Q•Q•0‰L"“ܾ{ûîí»û!û!û!ÐÝÝ Xj,5– O×§ëÓÛ<¶yl¦6NmœÚˆ‰G²G²G2Èê¦ÖM­›ŠÿP¸+ÜîÜa  0d±FÖÈIfm^m^m¯µºYݬnPó|ŸÑ¢˜¢˜¢ ùpóáæÃÿ” g73™ÌFÀ¥Æ¥Æ¥þ8ü1à’ä’ä’ðññŒ+ãʸ˜‹¹˜ Ð^ÚK{a“z¢²½²½²]ˆ"&b"&|AxÂþ¤œú\÷¹îs=w¿\/×ËõgŸ ɆdC2¦«ärÉå’Ëü®×r_Ë}-®o¼=òölewÊî”ݲÌYæ,3ðÕͯn~uˆTEª"U@äÌÈ™‘3¤=I{’öú~(œžœžœXµþjýÐõF½bˆ9Äb†âbÙŲ‹eÂx¯½×Þk§7åÇäÇäÇîop˜f‡9ÃAôè9ÐàîàŽÿqYŸ¬OÖ÷ƒÊzÖzÖzvFÚòÞå½Ë{Åe '<&×ÍŸ˜?1qpÚà´Ái Þ‹¼y/–, X  h„1aLCÂBª*¤-#-#-#ÀÌ{3ïͼ‡q³Ñl4±þÔè©ÑS£¨RQQyñ–ȈŒÈ„¯ÇlÌÆìÖ¿±´ˆÑ"¦5¨AÍÓH!\·|¦îRw©»¾G}T}T}”8ןÿ>ÿ}¤d^î¼Üy¹Hš~túÑéG¡&sÈ2€7¼á  ­h¨¨<À0 Ã0À‚ž= z0ú»úwõïj¸^±\±\±pZù3ù3ù3d”Œ’Ñý€„Ö¿‰ybž˜Ç8Ç<>rrnd’/Èä‹ëÛi8 §á88AOT]«ºVuÛf° X &$ƒd`TøFøFø@5ªQ Lj€ 6ØÜÃ=Ü{)iI‹®U%U%U%ü.K¡¥ÐRÈ—ûÉýä~%9³Í:4ëÐÑï‘…,d‘sèD':¹åÒ<ªf˜¹‡HG:ÒI…îŠîŠîJÞå&å&妒‹Áb°ØáÒK¥—J/ñ»¤€“€íåx7y£ ( ÄÅâbq1D'°¢ÁÔ`j0‰Ësss™<͈fD3òä…ã²ã²ãòÞ܇Y³f¢I4‰&¸9㜖@¥›è¼à"¸.pkîmîmîìéöt{úÞ\‡ÆCãÑ}¾½²½²½’É«~·úÝêwÅed;ÙN¶Cá̬TPâˆ8"Ž„#á0ñÌôÌôÌ„’šù5ókæÃMÓ¯é×ôÂBa¡°po.=BÐ#O^8¥x|GL."ÕÄùI¢øÿ%bò&µËï"Q$ŠD-[3ùÉñýeÇ6Ç6Ç6aç{Â{Â{;v$ì’„6¡MhƒšÎ¦³élظL.“Ë„â³ÏB> ágõ/î_Ü¿˜éPÎWÎWÎÏ[2Ù47…¡@(`;+ûïRÅrrrrrr0*eÎ^jÈ©Ý]Ní'ù$Ÿä_/§zª§úŒ ¤! iôD¥£ÒQéà¶ BM)¥”bDÊDíDíDí„0þ¤àIÁ“¦C¹_¹_¹ÿá·¶§¶§¶§ûv¬èXѱpj¥óT”ø^‚þXZ v:øÑ©Ý˺2]™®,or«r«rkIŽÅ×âkñe‡///ù]ΉޭųųŧêëëI²ºMݦn­ ´;`7²ÙoGGGÒ!g¼u>'þÈÅàO,66666œóµE”‹rQN>ìŸÓ?§þ›ŸÎOç§ßâÁŠ`Eð;'–,XîY6Ü:Ü:Ü*þWóéæÓͧù¥V‡Õau0é²hY´,zw€X(Š…ÿóíd³1]†?©ÎDqä!ø ûífOG|–X!Vˆ±´”–ÒÒÿ ~‘ø"ñE¢0GV +ÐV&IcÒên„”†”†”ÆÇš:M¦Nòà-x ÞâI§ßJ'àøŸqPü…ýA»Îã‚ÏÂvlÇvö.I!)$å!bµX-Vÿ=U¨ TÒVÆÌ˜óÓ@á°pX8¼­·mCÛ†¶ À$ ‚þ¤Árâ¯8þßòÑ^øœôâIEND®B`‚routino-3.2/web/www/routino/icons/limit-33.4.png 644 233 144 3041 13061246473 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÖIDATHÇÍ–íOTgÆïd†‡Ð¤Ð ¤ ºÁ蘮]¢2`+ŠA%ÄDYK³•’Õ~¶ij+ãíª qU /,ÅVjÖTiHv}i@#Ö­ÁÄ.„ÙF†3ç<¿ý0s8¤ûø|9¹ß®ë:¹s®óˆˆÈ²ØSÀšaͰ&GcëÌüÒ7—¾™})ŸÖÀ²Ý²ýчòyÊç/´¼Ð¢?6c£nô/œ1ñòyY&f"¾=¾ÝR‹?ŠÜŠÜ¥©ÑøÓ›p%áÊLÞýæÝo¾þâë/ø#Œ}?ö=Àdád!˜±Q7úyo!¾|ò+~XrmÉ5Ë0ÄÇÅljÀ+ůgˆ6ü3 ¶mÙ¶`dÑÈ"eí?@"‰ªÀ8þ±QõóžoðüQ=ŽG”í*Û•Ðx|jÓkÓ ¾ðà(GI„H Ðvk» º©n`ÁflÔ~cÞÀ3ð >ƒ?ªÇ\ePDÄS;ûwöƒî߉ …_¿ ú½ðÓðSÂ1¥JŸÖýº"C‘ÁÈ èõ‡úCÌ3Ç 3ÀT´ô*½Š°ÊÑj´г¢øP.åø ~c•ODDrNBB !XÌÇýwúï Ôê ‚´ÒF¨FÕ¨>| „4Ð@àÀƒÿ?9äêÚŒ6C0–-a¦¿³¿æù‰êþ-"rúÉûÞÞ÷¶¢¯y\üãÕ¯‚ç”§ÁÓ€º?tàþ€ÉÓ·ºoußjðœôœôœ„ÞÁÞÁÞÁBlذZ¥V©Ufz zàÈÀÔßÓ»RºRL>ÞW·¯¢›;}˪ºED~{U¦ßZñÖ ‘¡ÔÉÑÉQ‹sCþƃÊ\ϽžÛ=·ÅRa«HªH¹Øp±ábƒÈæ‰Í›'Dº“»“»“EJ³J³J³Dz–÷,ïY."A JP'Nœ"SL±H‰^òSÉObqz4ïhžÌE÷fqò»ü¯ò¿‘§Q=‹-IJMJ]»^¶44ŠhéSßM}gi>"î×ܯ‰¤}ø¢ûE·ÈØå±Ëc—E‚#Á‘àˆHýÊú•õ+El ¶›ÈðÙá³ÃgEBî;ä–ùcÝdÝdÝ$R«ÕjµšHèA¨7Ô+²ü”ã’ã’ÄË.K3¿É?ÿ}Y•œ›œ»v½à_6·lNïã3ÿ!ÿ!ó³6ø9ð3ìhÝѺ£Ò§Ò§Ò§àAæƒÌ™ <Ê£´êª?¼Q=­_ùØ’¨©?ÍûØVµ• ªSnå•£rT¨6Õ¦ÚL¡Ê¥\Êd“MöÛ˜fši`œqÆ•¦Ò¢bøá˜oüÊð1ÃùC†ó–/._ ¸£Î¬:#‘ àÏÚˆ6b:?õ|ÄG ®«oÕ·ÀyÎs˜%HÔ¨z¢žÿšwþ÷ô÷ó±v[» Øç?®<LþùŸøsû¯|noÏí}ìù¼Áþ/BÝl¤qÙIEND®B`‚routino-3.2/web/www/routino/icons/limit-34.8.png 644 233 144 3004 13061246474 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܹIDATHÇÍ–ïOTWÆ¿ƒ"N±£¬•NÅje;M ñfÈÀÖlcý1v¨a°Æl%f£/úã…éj¥kKw·t[wÍ*DMScV³ vbhXLlÀéZëŠÌÀ‡q¸sïùì‹ázIýËû̸nasݬŸÝ/bñÏÖ3çe‘X99¶êÜçÏÏ/ÈàÃ=`ï²w%ÒðÚé×Nt~Þù9¿‡‘oG¾˜¨ž¨ ›ëf½ÙoòÍæ—¦_è‹@ö×Ù_ÛnBμœy"PT[T[¼;Sp£^zñ¥nϹ=Ge€°@Uqâ˜cl6×gêÍ~“Ïä7õLýŒ|o¾W6¾²ñ{[¦áúßàMç›NSOëÞã=@:žŽèõz=)P=ª6°°¹nÖ›ý&ŸÉoê™ú?ÖQN‰ˆ4×€È?Æ€v%}S+ÒŠÀ¸¦ÝÑî Í8U¦eõ¬Z©V‚á1<†kL0ÊèC¤Œÿi𦡥oiNÍ †žáÿÏþŸ¸©oåEDVµ€=nÇçr`èÊÐà_üT•ªbŠC|ȇ€>`3›Ù ꪺª®Î2%JÔ‚JWºÒwyŸ÷”Wy™¢y†¿`FÏÔ¿”ñ#Üi½„cçöÛM:£üzí÷g¾?Ínþ¤ùTŸÑ§õi<2†·oÞ Ý…Ý…Ý…Ö¼1iL“îÿSÿÇýÃák‡û÷¡*¯}qí KOý{gÑÎ" ‘ñ#F—ˆHßÐu ë„óc·c·ÕŽ_ýqaéÂRR‚@n  ë ë ë 4šM[‚®QרkjNÕœª9õ¨ñóçΟ;ò«ò«ò« ¸.¸6¸œ—½ºìURß…'ÂjœqŸqƒ~'ã'Ëö' ž,ð¬ñ÷Ñ÷êîÕÙÚÞ•ƒ+®”œºuR'"K{–ö,íÑ»õn½[¤)Ðh ˆ¤zS½©^‘Å­‹[·Ê#ø`\0.ˆØÛííöv‘u»Ö½¾îu‘e¡§¢OE%'é{{ìm[›Huyu¹ˆ­:w$wijF[4½hÚ䨨[coYŸýýdüVül8ºá膣àÞïÞïÞ{Ü{Ü{ÜP¼¯x_ñ>¨_^¿¼~9”)9Rr¡p(²vìÄê«O¬†Š‘Š‘Šð%| _JÞ(ÞV¼ Š‡Ž c ÁèwüèøÑý7¹órç©HyS^øû¦ŽúŽzðl+¦üK ÊUåªr/éKú’l ¶[ loÙÞ²½ÈNd' ÓÕéêtÑ`4 Pë¨uÔ:`wxwxwØâ+‹®:½ê4üõ§“Ñ“Q€ÔñÔqÐ ž|bPuˆúÔ|ÇÚÇÛÇáÞµ£úØÚ夵ŽZ‚pßyßyßi ´õ·õ·õƒÿÿÿ¨ˆŠ¨TRI%p¹ôréåRð z=ƒ÷—¼–¼Ø>ÚðAä¦Ë2zðeà˰ ãg&ÇZ/Ñۘߘo}%é5&L@䟑¯"_¡ô^½Wï5¬†Õ0g³ÆYH®H®H®€Iÿ¤ÒÊ¡ÊãëÇׯÚi§R»R»R» r7òCä”zV»©Ý´ô¸Õø\ãsfà¶^37æHv&WÔÞ‡9ö²z™)U£6ª€'³vŒqÆ Ĉ›•ckT¥ªÕ¥B* ÜÊÍ”š?Ãÿë¡á¡a{Ì‹Ïå;3ÇÌäO™É»eî–¹ÀÁL2«óéX:|ªßÕï>šüàÞ–°„%€Žê'uCÝ’3õú7ú7hª;IG€.3ù·ÌÙ2˜þeò?¾ÿÊÇövñØÞÇÏìÿ¤œ/;ZI‰IEND®B`‚routino-3.2/web/www/routino/icons/limit-7.8.png 644 233 144 2477 13061246471 14614 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜôIDATHÇÍ–]HTiǧò£KSRмØZ’$‘ZCpú2ŠÒ%‹>Á²¨v[Š,º±‹¾/ìÆ""H‰fVÂ%©( ¶ÌÙv)±ÚÉ%+”)5²ÍqæœóþöbæuNI{ç{sÎóõÿÿÏûñœW@DD¦EžŽtGº#1l;vEýññ¿†íK&Äüóãßå0õÂÔ IÕIÕV{ÔÖqo¯‰âÛù´_¦IÔWWãŒØÇacæÆÌøÔ°]ᄺ„ºAvßÜ}àÆÕWù|-¾€ÎNˆÚ:®óu½Æ³ãËñ¯øE` wb^C\l\¬ÌZ1kÅœ_ ÿÌukÖ­è×5N9Àì&3Y9?~ôè³Ù:É×õOãk>ÍÖ#’Ÿ’/E›Š6%T… Ú]p8ípšæ Õ§9Íd0ü†ÀÜjne”Gyˆ!¢¶Žë|]¯ñ4¾æÓüa=òåÚž[Ž}h}hDP³j2N§Àtww2·›gÌ3(ÓaX†ê7U«j5¬n«Óêã­9ÑœˆR±Æ^c/!0ß™ï€@UW§ž[n[J‘¹•àKðùÇC‡ÙaŽà¯k»µÏ6Îa†mÖg>Û£ÊT¦2œà„-ï÷¸¤˜‡ÌC#«êè€(XODØ¥?`ϱ=Ç@•XY¯3»³°³uþÏóžó¨.©.©.×K×K×KxUýªúUõèk»Üv¹í2T<­xZñ¼ÙÞLofT¿ú=Tª‚š/̯õD„µ–AͧšO`å¨zv¿>¿>Ò}é¾t¸o¹o¹oAÎÉœ“9'Áãò\ó\³íÅbý¦ùÃz’¦$M±^@_w_7ðoäØÏUÉ*9 Ð[Ù[Ù[ ó½ó½ó½ÐÞØÞØÞ8Z˜ëºëºë:,ô-ô-ôÁ²ÁeƒË!£,£,£ ¼¼¼lÂ#|š?¢Ç!bݶnǼ1 BI‘k®5Þ/#ýŽŽE$µ*µ*µJdžsžsžS$°?°?°_d`úÀôé"î™î™î™"K†– -¹?éþ¤û“DbÆ=*òdà‰ÿ‰?ŠKI˜o„?¢Ç!âwúm‰4=hz "Ã""”ÊOj¥Z)A àQåQ"EYEYEYQ`—¿Ëß%Rp à@Á‘òå;Êwˆ4›ƒÍA‘ä+ÉW’¯ˆ,r,r,rˆlØÜ»¹WD„Ìà8„Oók=_ŸJŒÈ)i5šŒ¦è†ëoéoìo„@Z -f[ e)KÁ‡µÖ~X Üå.waxßð¾á}Ðó¾ç}Ï{Pß©ÙjvׯsãùÊ·NåÿècåáˆmSù¿ø%¡«Åj1¨:U§êlþ‰*Gåß›gͳ¶>èìüf³u~"Ø5ƒÙavS̃æAB”SC j„ñ-oxª[u«n`(Òp÷°“ šTêAqÓJ¶’ ùÌ|˜¿8¾8^ÏÔÌþ+ÇìíbÌÞÇÆæ ö?V?· KIEND®B`‚routino-3.2/web/www/routino/icons/limit-26.6.png 644 233 144 3124 13061246473 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍ–ûOTgÆ¿ƒ\fäV˜(R°˜Ôc)^°–!¦, ‘6lËÅK(MJÁbXܤ‰&Æl›@ʦFSŠ©›Mˆ\£I5#…­@‘Š!ƒE¼À,6³`ævÞÏþ0s¶ï/'Ï÷ò<ßsyŸó ˆˆÈk«@È!o„ÄøqHe0nÌ7æ¯ù—ŸöácÃÇ£‡!ö»ØïâZâZ´± ÖózýÒ~‘ ÿR==.¯I0ÑÑfÈࣰóíoüøØu0u˜:¼PÕUÕÐÞÚÞJ <x<0Ÿ=Ÿ A¬çõz½_ç[Ê/Gÿ¤/aÃ.&!"<"\RòRòRkýöT(ü ð€©eSËTøf(¢T6àĉ¾æ–`=¨×ûu>_×ÓõýóÄ¿ÿ¾|´û£Ý¦fÃØp0é`’®çé¾á¢Àëô:|e¾2\ ®«ë0@ëy½^ï×ùt~]O×÷Ï|•‹""¹P<^<Ú€§ß;éYíY Ú3ð&UªL•ªRðÞöþâý4MÓ4àzÆS/‘RÞ¯¼_áñzb<1 9ýüPü¤ø ð\××_åU‘¿| &§Éé Uîñþñ~à( ¶ª­,ÒÅ%.JVÉ*H$‘Ä%ƒtÒI'PAKâÉ$“ Ê¡æÕ<€Ú¥v±Hg€¿& ÐgÜ?ðXDät±{?Ûû™Î¦¥ß‰ªªƒÇO;q 5òéHÙHYPÏ.v± 4v7v7vÃPéPéPi0¯Ù4›f ≿M|8ñ!4^lìiìA íºÕ«?¨§&÷¦ïMþãŸG|ƒ""ƒuÐýe÷—pëï™™ª"꿦“¦“¸râr"r"`Íþ5û×ì‡ÞšÞšÞÈkÎkÎk†ü¶ü¶ü6Èrd9²0yvòìäÙà@ŽVG«£¬×¬×¬×`Çï;~Ûñd=y¯á½\ö8×:ת h³ýMÐæüó„Jtä™È3ÞÉÍÈÍyô×Þ‚ÞCóþÓ¶ïmß‹üsþk××.‘,w–;Ë-Ò`n07˜E¦G¦G¦GDÒSÓSÓSE6–l,ÙX"———$/×ã㣈ý€ý€ý€Hþïù÷ó?~§ýv‰ˆ_a,1–šE¬¯[_ ÙýIô'Þ÷‰Ç»k¬k°kP$6>6>6^$Ìæ s‰lÞ<¼yX$¼'¼'¼G$ÑáÈpˆZ ­…V‘M£›F7Šl¯ß^¿½^Ä’bI±¤ˆ,7™0!²a4­#­CÜe•{zöôð¹HgEg…Ȳ°+^¬¾) ìJªmÕ6x‘àß%ÏvÌXg¬0Ý?=9=‰š98S;S ®-®-®- êU½ª‡Ù¡Ù¡Ù!ÐZ´­Ô=uOÝG‘£ÈQÊ­ÜÊ Ú>mŸ¶æ,s+çV¢´µîI÷dpWrÿ‹·¾xK7ÜÓ}ƒ úè¾ð·JRI,¾Œ”SN9¨H©"ƒß’JT‰*È$“Ì%>¶“RJAEª• ÒT‹je€?{|t|ÀôÜôÜʈîcÿ÷WoÌå`qUq¨ýάnú¢|Q þíýÃûZ¸Ím½üÄO zÕUu¸À.‹,°ê¡²+;nIÑéóù|xTŸwÞ;œ×¿$´$pÿÙù_Ýå+{ºxeÏc¯æ ö¢"½Þ’“l˜IEND®B`‚routino-3.2/web/www/routino/icons/marker-18-grey.png 644 233 144 6064 13061246465 15636 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü éIDATXÃ…—kPT×–Çÿûôiú%O<¥éð’—‰ÂèFˆ^-dJÔ[jR$U¶ãEñ†Ò„H ªªò€k‚h$AtjFI†ËÃ\±¦ :”‚€’.iP‘‡@7 ôóœ³çÝp+V*ûË®½÷ÙkýÎÚÿ³ö:D£Ñh4xa±;f+û„}Â>¡MškškškÔ¯`¢`¢`â‘Ô›zSï¢ÿàü9ÎÃ[½­ÞVO?Çe\Æe’ƒp„#À0àŽàý\’"I‘¤vŒcǺ/1ÃéŠ|ß|ß|ß–G…é…é…édœ 悹`’´È!Üury1K€›±›™ï„¡@(îÚì ö…Õ ´Úíw#öqû¸}¼ù¾ù5ókæ×6|¨8¯8¯8† ;6ìØ°ƒäĉãÄqb`£ÏFŸ>€kìZw=ïÚï²·dßéÏåßÅãâcÜB=¨õÞ&‡Éar8ø¼(X, ¾}eáÛ…o¾Uú¬l^Ù¼²™?µc`ÇÀŽÆ­‹ÖEëH²$G’#Éãc| 9Ì0à à=¼‡÷ 0Ûm¶@$ëÚtmº6êø!ü‡ðÂ…SÓ;§wNï<ô¥­| Ô$Õ$Õ$áyáyáy€ò#åGÊ^Ú.aÞaÞaÞp —p‰„3"‘¿ÈŸÖ˜âMñ¦x qpp@ÄH)#Å ÜÀ @2,–  ¥B©Pì1ö{  StŠN½ :33333«…ÕÂjÀd ²6‹Íb³S‘S‘S‘€­ÂVa«XÚF½h¡g¡g¡CŒŠQ1*ZÃH‹¥ÅÒb®dÈwÈwÈ—ÖôVôVôVˆB¢`¡i4¦´›vÓî"i@|/ðÅò´õSë§ÖOÖäÖäÖd ¹6¹6¹P5Qà=EOQ@þ“ü'ùO@cqcqcñÒv‹~—~—~ ÕêGñWétH:Ä•0HE*Ró/³VÃjHN‹O‹O‹¯2®7®7®‡œ8ˆƒ8`»xï.‘RCjækækæëåy)'å¤à~Ðý ûA`üÊø•ñ+ËëÓ¦/L_ævÎíœÛ ¬Þ¶zÛêm°9—å·nÜ 6=Ñ=¾!<á Åõ»ãwÇïÎg¹QïNoœÞ8½ñẽu{ëöò'ÕPC Q ÝO÷ÓýK%¶÷mïÛÞøsü9þÜ?EZ 4@JLJLJ Pe­²VYéÒ¤‚§à)xeee [Žm9¶å$7Úo´ßhÌϥϥϥL‡üœüœüÜOZ‡Ö¡=õÉû9ï缟t¢ÿrAn±ndÏóä<9ç8“È$2‰§ê¡†jæ+­]k×Ú¹ cµ±ÚX 9ù‘üH~„I¸)Ün@ ,°˜Å,fM£i4  ÁBð’t<KKKù“¥AiP²$b‰X"®* »v%ìÊ—·‘|ä“¿aƒä¶»êQF0‚î²…,Rù}ä÷‘ß—ì•••­*4øü ~¬±nºnºnš?érH~!¿_`ƒ:è^NSΫ•2ULSI»¾]ß®§ouFtFtFˆJR…T!}fµWÛ«íÕÙŸ=Ê~”ý( zª§zx:­\uš}µ°BX!¬€çÃçŸ?|سìYö¬ìÏÞ o…÷“êí€v@+*iJkJkJ£o‘ãä89‰P)T • A@gé,G8ÂÁòBÿBÿBªæØæØæXx*ÆãŠq@ˆâ…øìÏ¥÷Ìê”âç§´t-}¬‹¿$çÐyD¢4£ÍüI²™l&›ßÚ»øËqûïŽ G†#C8qH8$˜­Ñg£ÏFŸEŠÐ/ô ý3L—Ãåp9”…–…–…òaã›Æ7o=–ÆJc¥±%XühNuåB¹PÎ^pžì_\'VXXXXX“+¢pN,iȩݓNí^pj÷ÆKÚuhZ—a¬0V+ g†a̺"Ñbi±´Xó³ògåÏÊE¥¹Ò\iî£Û¨mÔ6šûåã]w=Þ8U®|êtñ-þ Øõ€ÜiàžS»I»þƒ?k¬ÕÔjj5üIgEï©óÑùè|ðßm]m]m]ämy¿¼_Þ*A%¨NÜe²Ùƒ–7BâBâB☧¿se•_s‰ð-!!!!!œs¨£nÔº‘cãëÆ×¯ÃñkùµüÚûœ$D" ù÷¯&·OnŸÜîó½±ÏØgì£_<¼úðêëü–yǼcÞ!Êoooý VÐ Zñ? ‹YB4ŒÌ`Fp•?g ¸_óüNû í  Mhâói=­§õ ƒÌuæ:sýÿB¬{¬{¬{„uârq¹¸œé©Ej‘ú‡ÖÐë¡×C¯ÿ1A?¨Ô’ÿ],V¨ërÕ:Í¿ÅÁàwÚ¯´ëL|>Žã8޳Ý$¤“ô„Ò&ÚD›N¿' ’É‚˜>шhD42$ EBQÆóþýú,US!N{®ÂÒò{ÿ÷uÐ:lcI¯IEND®B`‚routino-3.2/web/www/routino/icons/limit-27.8.png 644 233 144 3024 13061246473 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÉIDATHÇÍ–QLTWÆÿ v€@µ"<4€$3fwh6¦Ô¦Äv&Ðe…ÐTi…I²¨X[“âF“òânÚl5@IÍêJÚ@7†]4j¢f‡ l×âØR¡£jikãÈŒ3÷Þ9¿}n5ûîy¹ùÎùÿ¿ïË=9ß9""òÔÊWÀ’eɲ¬bËbó‰%‰%öO£ø¤q;âvL4Áº×}°¾c}Gd2†Íu³~u¿HŒµž9/OIl"¡;¡;ι‚Âëù¯ç'¦Gq³’z“z—u¨ï«ïèù¸çcÞß%ß%€;Î;Nˆasݬ7ûM¾Õürô!}xâó'>›…k‚U²_Î~Ùöv´à† ^){¥ `.~.^YÀ¸¤¢œ€?æXZ…Íõ•z³ßä3ùM=S?êG Í‘æWw½º+éL´a²eÊ4õ´^à}Þ't¿î0ªŒ*B ÜÊ @qÃæºYoö›|&¿©gêGýĶ2 "r¬*¼^ˆ|  è_k©Z*¨½L/CS d’‰Òu= ÀpUFÃbX@ýSu«n*2¯iš†¦ßÔ2µLˆQ~¨ø¡âÀoê›[y^Dä7­äOòûר°wÄ; ÔKê%ü‰øTX…Ux•d€ÿ•¡ e€ÙÊ¡8¶ÂŸ¾¢·¢ÏpÔà99̺=µ{jMºÈo¿I¸Òx¥N¬;ñä‰'QÞ:o·æíóöy;´i=Òz:\®tNuNuNÁLÇLÇLÇ# Ïß<y>‚æ«ÍãÍã¨o ®~rõ“˜žº²'{O6°õ#ƸˆÈx#ô¿Óÿü÷Àô Ó/¨7Sî%µ'µrÖ;«œU{<÷xîqhilili„âŒâŒâ p 9†C g䌜!û}È348>8>8iÛÒ¶¥m×ï]/º^„Ì OW?]Mèröôé;êMèÏëÏc!êGŒëɧ’O©nxøWïg_|ö4ýõ½ïíˆ l®Ù\³¹Nï?½ÿôþØ|[B[B[Ô5×5×5?ú§ƒŽAdù²|Y>èêïêëꃂ??»ýÙíà®kkð»ü.ˆü*Ù—ìSÝ‚¶>q}b䚪¿Uz«4vì/=?b±A¾=ßžo‡êMÕ›ª7Å—¶.m]Ú yηHüý`n0×ó¥Ð¼r*Ù÷î¾w!˜=%‹Û  aÞ=?=?ZØ·P»P ¡s¡s¡spw÷ÝÝwwCÐtݱ­‹¨ˆŠ(¸]~»üv90Àj5„`ñÇÅ©Å)”úµ6«ÍÆN%7÷æîÍ5÷äðJÀÆr Ì\ù%ÇlÊö@R=8šh¢iö?pE¡žWÏ©ç@õªQ5  òT•¸Â¿Ù{Ý{ 駤Ÿük¸læØ·ú±bUÔWÔƒêŒ&³ú‘b¤€ú‡þ³þ3Ÿ2Á YdG8ÌáUÆnò=߃šW³jFý±×4ÑÔ¿õE}è5“ÿµø×âðÃÉÿøÞ•íëâ±}=ž/Øÿ¾†xñ•ŒéIEND®B`‚routino-3.2/web/www/routino/icons/limit-9.2.png 644 233 144 2554 13061246471 14604 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü!IDATHÇÍ–oHÕWÇ6¯WSóBÞ",A¡zÑ WÜ-V -KY ïÌfQÔÊ3f ±6tsQ“t‹,” ¬î\õjöÇÛ(éŽ2[¡”šÍivëÎ{Îg/î=þnkÛkÏ›ßsžóý~9Ïyžß „"=ú?7~n|ZÇfÍÛ í…9§"¸É€¸ã>þíK˜Ñ8£ÀÑìh6ï[X­«øØýBXü±zj^¤ k"±-±-.?Š«¡ÄUâ²gDð÷× É›ä}­ÃÎöíçOž?Éç0äòŒå僅պŠWû_,¿¨þ‡¾p)áR\$ÚmB@Öš¬5Ù»#¿gÃúuë×<ötšŒã …™ ÆH VëÑxµ_ñ)~¥§ô#~ÌÌ›™'l(ÝPšt<²á~+TfVf*=Í ÔRK è=`”e„@^“׈#,¬ÖU¼Ú¯ø¿ÒSú?âÍÜÖ =6 дN0úŒ>05}³¾M5œ†)+ä.¹ kŒ3θÍÇfÙzŸa7ìHsBߤoBcØ&¢üÒ“èITë bR)„ €¤¡¤¡À;{½Vj>’º±ÉØD¯9ËÙ#ÛØÆ6`+XaMË—ò¥| TSMuL| ^¼ ÃÆFc#AÅoéEõ£~¢Æš®CùþòýÀ€™K†n×í–ž¡?ÛŸ GÜGÜGÜðøáã‡ÆœP—ÙevYØŸàOð'@ýáúÃõ‡Áÿ‹ÿ¢ÿ¢Å'ÒZ´@ê)ý¨Ÿ¨±®/àôøéq05¹=Jº÷Õ½Ê{•ó"çEÎ X^º¼ty)ä.È]»†o ß¾aºuýÖõ[×!%œN CANANAdggC÷ݹݹ“á!Ó§ô"úÊO¼iiï¾/DÞê¼ÕB°Z!âŽG3x3é¦ã¦Cç<ç<çmmm`z0=˜ϯ<¿òü œ87pll„‰o&NLœ@‚YkÖ-ÿ[•1},IÝdŸyÏ8j%(?•µ²6¦_-’‹ä"à8“{=Ò¬S! Í-æ–˜>F¯Ñküg‹éüxì»ê/Z'=Fð­1d ¡IŸ“cHîr‡;ÀŸŒ0R“šÔŃüYž•gAþ*Çå8R¶©F*õF±Q¬Ljèžižiê¤ÞèüSö_9e_Sö=65_°ªÛMVþ8™“IEND®B`‚routino-3.2/web/www/routino/icons/limit-9.4.png 644 233 144 2515 13061246471 14603 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]H”YÇŸ±g «É4X¬-²-!©vƒ”¦”û’˜¾À¢’غJobÛݖ‹Ջ͠›„¥¢Oõ~+¬ ÚÅZ­UÅÒ,gµfßóÛ‹™ã;Õvß¹yy>ÎÿÿŸsÎsŽ€ˆˆÌN~Òæ§ÍO›™°Ó8~O™§,ÿbÂ>gk«kë_ßìÆY¾/d?ql×ù©óEüT>í—Ùâ82®f\u•&í“°£pG¡';aÿr¼7½7ß™p0|0 p£ùF3ßÁðÝá»c¥c¥àØ:®óõ|—Š/'?âô¶ô6W?d¸3Ü"°pýÂõyG ½yP±©bÀóiϧ©4°^3˜¡J(QôM±u<™¯çk<¯ù4BÀÜ’¹%"°%¸%è=Ÿ˜ðä7¨É­ÉÕ|ÆMà4§™fÔŒX»­ÝÄAÝV·páÇÖq¯çk<¯ù4B|¸¶õT¥»Ò F;XýV?؆¹Ç܃aþcåX9(uDR‡pFŒ1à-oxã¸UÚª¶¢ì"£ÑhÄÛc{€5~eFe†XHYJ‘‚_Á;ìŽN'Öív–f£2­ÖNbüÈ5®¥©¢Š*`ØÀ§£€ @=RÔƒÿ;{›½˜Æ‡n«Û‚)þ¤ž¤°sw úDõ ` À^A¶é1=Î?.xœ÷8ά>³úÌjèëéëéëI©LDETÔµF­qü=Õ=Õ=Õpë«[Y·²œt5jô}Àd’Oó'õ$…ýq .½¹ôl@íOÄ»~èªéªüñüñüqX\\„KV,Y±F.]œ"0¤B** *‹,:°è®®®;yöœÉ¶É6âôk¾¿Ö“&2ó÷™¿}+R²®dëDD\ç“+qÏ{ÏwÏ'’³ gAΑöËí—Û/‹¸}nŸÛ'Ғْْ)Îð‹_ü"µ»jwÕî‰{➸G$«!«!«ÁI£8m_Ú>É¿æKðOé_¦/Óî‚Ñ£/@:ö   @amama-”ç•ç•ç»Þ]ﮇ Ñ Ñ Îž¤©®©®©æÌ™7{ï=¼÷0ä7ä7ä7@UUUJ…Ö| ~­gºˆÝb·¸ºDÌÍæfùZFä¡<”¹úÏÞç¼Ï~Ÿ-²ôÔÒSKO‰¬ ® ® ŠtÌé˜Ó1GÄïõ{ý^‘‰ðDx","eR&e"+ﯼ¿ò¾HGkGkG«È`ú`ú`ºHç³ÎÞÎÞ©Â wDDd®+Á/Sz>ÞcÉ^´"­‰òâòâòbÈÍÎÍÎ͆ãáãáãaxxx€¢eEËŠ–Á«ÖW­¯ZŠ„šBM¡&¨h®h®hvüVÍdÎdñdÝ>ÙcŸžJ’§¤Õ¼h^t*ÿ;þ(þ^½z9ä´ Û° Û€Hg¤3Ò VÐ ZAPÛÕvµ&üþ ?Œ?ïïþä5¯QXæ¸9‰[â³§2¥Å»cݱ)AùÆ:k%¦v©ÓêtÊÞX®–«å@uÔýO£!¼cŒ1@%ㆴƒô1³ÛülKéüTz*=€©;³õÔz œ²†­a uW©1xÈC§Ó«!5¤†€AHúW¸‚b¶uÌ:†V¯Õ›ŠÿÙÎÿÅÞ•_ìëâ‹}}™/Øÿ1+ç1IEND®B`‚routino-3.2/web/www/routino/icons/limit-9.0.png 644 233 144 2557 13061246471 14605 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü$IDATHÇÍ–]H”YÇŸ±œQ4ËR¯´/m·b6¬­HéÃ>À†°­‹ÈíjcÛu/ŠmC¯6‚-!Š *èô$Ø›¢Í‚¥%kZJ³2-W§ñkœ÷¼ç·3gÞÙÚî=7Ãÿ9Ïóüÿœç=ÿ9""2%ö+”—”—”ÅIß8ñ”²”²üsQ|B«ÂUñ×O0ùøäã™§3OÛí6û&?±^ÄéŸÈgâ2Eœ€ç¢ç¢«4†k`Ó¼MóR²£ø×ÛÚÚ0dÁŽÆWÎ\9Ãè¾Û} ¿´¿löM¾©7ýûKÍü"ÜœÜìêÛã«f¬šým4áïÙP¾¾|=ÀË /'è$PotÒu)"„Yï°Ùå›zÓÏô7|†?ªG «$«D6Vn¬L=-h? Õ¹Õ¹†/ÒÔQG:X!+ ¶¨-„AßÖ·pá›}“oêM?Óßðþ¨ùïl¬DûÜ>7ˆ´€êP`G¬­ÖV"Ö?*Gå õ^½SïÄY½ôÒë@ý•.ÖÅ`u©4•†ÖßY~ËOÔ{õ6ý}ŸÇ<²2a”""E¿Ajwjwh"ÃPÀÍ:m©Íj3ÃüÂ%.%ÙÆ6¶ËYÎò„ø"±X–$ÄW³Ÿý@¹º¬.Geë †!ÎÓvâØuh×! Àö’m¥X)Îø‹ü³ý³áØÂc -„gOŸ=}öÔáµØìøþ€ê“ë“ë“¡#Ôñ®ãÓOwDü¼Úçé‰ {øœž‚ÐÛcáG??ª~T ùùù°´riåÒJðz ½…Ð;Ø;Ø;èz[ð¶àmx¼ Þ˜sþÍù7¡0\. CsÿÅþ‹ñô°~bø¢üFO’HÆ­Œ[_|)R²¢d…+DD\§b“öÜK½—y/S$gzÎôœé"-Z.´\qgº3Ý™"ÁÆ`cPâ«iAÓ‚¦"ž;ž;ž;"m¥m¥m¥"“““"׳®ç^ϧ{ôYÃå7z’D&”O(çs‘ä¦ä&‘$¯ˆˆô™Ê²Íe[ʶˆ íÚ=´[dmþÚüµù"­¾V_«OÄ]ã®q×8ÂT§êT"é÷Óï§ßwâ]]]"#ö#8qùÓðEùž‰"ö5ûšë‘ˆµÁÚ ŸI<’eêFsF³G³EæÔΩS+R\Y\Y\)Ò:µujëT‘™î™î™n‘±Yc³Æf‰äMË›–7M$:b‘W‹_-~µX¤ójçÕΫ"E;ŠªŠªD¤YnÈ WŠˆˆdÅø%®çÃo,æEÛÓœ&ú1´7´Ö,[³lÍ2ÈÍÎÍÎ͆ƒ6B0 à}î}î}===PUPUPUi{Òö¤íjU­ªUÂ-E5©&Âÿÿoìã[inÉuëœuιEá'á¶p¼yýæõ›×ÀjV³´K»´ úNöì; ºD—èкBW@_{_{_;Ø=ö û§QÖ€5`üò“·2ÁÇÂÆWb>³HÕ«z†õ׺N×%è\=WÏs˜Ã ±}ì;d‡ìPBþv}T¾W­ª5ÁÇ"ÑÀè'},Áùñ¥øR+îüÕc Vu«n"ú®î×ýhÚxÀà=A‚ »t—î†døfšA?Ô#zM³cçÕ¦ÚÌÉEZâ|;ÿ¸ý¯·¯‹qûŸ/ØYßËßtmý1IEND®B`‚routino-3.2/web/www/routino/icons/limit-11.9.png 644 233 144 2656 13061246472 14670 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜcIDATHÇÍ–_LTgÆŸ30ÀðÏBbBI nH,íÒÄÍÆÑ«mW,Ò5ÅjvWIöÏ]‹1Ùª51&»å¢45±iÖl¦VŠš6¦ÉÆÄ1¨t½p—-¤ã@`mÊîÌœ9ßo/fC%›½õ½9yÞ?Ïóžóæ{Ï'$=“y <ÕžjOi{~õl)ØRû—4>•«Íjûç`Õ‰U'Ê>.ûØÉb7îæ/¯—²üËõ\¿žQÖ‘ÿYþgÖ¦ ~v6îl,ð§ñŸÂàë÷õ/ذï⾋Ÿòù'ü¦®O]ønÓw› ‹Ý¸›ïÖ»|Ëùõþúx¿ô~i݃ü¼ü< žky®¥æ÷é„h ´¾Þú:ÀDÎDŽñ@êß@1Åf#†k³Ë°Ïä»õ.ŸËïê¹úé~Š€o¼õÆ[¾3é‚‘³ðγï<ëê%ûc£ì˜H½z›8˜° `aA»q7ß­wù\~WÏÕO÷£Îöƒ ±öd{r©¡'ô&½`ŽÚ“ö$nĸNÀÙèlsÔ5GÉÚC¦˜ZBÆIÚ~ÛOÒ~”¬LV‚Ù›æ‡öX{ x”Ñ_eL’ê?ß·¾oc¹p'x'©(¯™>{Þžg1+Aœ8¤FS£©Q0ý¦ßô/kh†f²ÐØÆ66p˜c0`‘_¦ùÙˆ øb¾X,—¤ûÉ|©S× óÝÎwÁüÀYï‡{ÃgÃg1cåc¥c¥¬°po¸7Ü cåcåcåY¿3âŒ8#Y«/럨ž¨ž¨–ªªª¤u­ëZ×µJ›û6Ÿß|^*?R¶»l·T­=P{@ÒÂ7 ßHž­$IZùòÄ^‰½rûkéê÷W¿oú…ê:Ô!öfv²èwE{‹ö*ßk{½^ïÊÆ { { {%߸oÜ7ž}ík¶¯Ù¾FºP|¡øB±ôxõãÕWK=ÿéyÔóHÚóÕî]»w)±á'/}ôÒGüFûB;C;­3žŸ/Ø öí¯—ŸÊ÷:ß¾pO¥ÓítÃÜOç:æ:0ñü¸âZ9ª¹º¹º¹:ˆŠŠ"DˆÀCïCïC/p…+\Ķī‰WaúÁôüô<ÆüÝ.±K€ë®^gWg°˜î'ÓXý‡à›òMÅr!’Ф–t_g³gÙ#½Çþ§ÅŸˆ7ó"/‚ÙeŽ˜#Τ3É¢ùQ†ÿxd.2à›ñÍÄr™üÁ[¶ùí7sÞÌÉn~üvÄŽGR©‰•›Ÿ Ê)Žsœã™˜sÏDLHd|LESQ’æº=mOs7F/ùäæzÿ•Oíí⩽=7Øÿß—ž e@wÖIEND®B`‚routino-3.2/web/www/routino/icons/limit-7.9.png 644 233 144 2375 13061246471 14612 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܲIDATHÇÍ–_HÔYǯ¶9 öÇh§¢ C’ES¨@£¶(Ôb¥¤r‘­èaw¡XíÉ![P ƈb†ÂÖ#·‡ XÈšp#’ÅÚ‰q±µl Vgmgæw÷³3×ßϤ…}ó¾Ìœsïù~¿÷Ü{Îï B±2õ+ }Cú†ôåI;ý„åÏÜ“¹'ÿ§¤}UBÚÁ´ƒÏ›aÅå—r¼9^3`Ùz^¯·Ç aáÛù´_¬–ÃÑãèI«LÙ-p¨èPQæçI»ÝY½Y½ÿpòÎÉ;·¯ß¾Î·0î÷LUNU‚eëy½^Çk<;¾hùˆ_XzwéÝ´?Á‘áÈrwçîÎû>¹à<¨Þ_½`lÉØ•rÈ&[U3Ì GØfëùÔz¯ñ4¾æÓüI=VW¬®Ô¨Ëò$]Ðèjti¾D/ÐJ+Ù`Ì3ò¨Ô:jZ`Ç.ÛQ !D²Æ³Æg>ƒ  Ê9ü}`Ö›õI˜Ôˆ³YQ¢öYe(CÀyÎsÞ¶®vÚ/åMys.b±`4‹?©'%ìêc8uîÔ9PÍf‰Æ{µåUÍ«Tç@§¯ÓÞoƒ·º^v½ìz #ÞïˆwaƆ † †  s[ç¶Îm02<ò|ä¹¥_=Mô%úæò[¢ùµž”°g?@w¤;f9€úFgÇWæ+öCùŽòå;`gxgxg„Gx„¿îþ:› Æ¡Æ¡FÈäGò#°½n{Ýö:(ÙT²©d„¿o o´²¯k¾$¿Ö#`ùÃåUŒoßbß³ò+?Ȉœ–Ó–÷ʽ+÷®ÜƒãíÇÛ·/ÌÔµâkÅ׊¡lMÙš²5–¿tséæÒÍàùÙÓëéµüòkýOó'õÈY–³ÌüÂoÃo¿Se_ V©UÀ¤{Ò=é†Â…/ _@ /Ðè[(ìÍð›á7ÃPt¶èlÑYØ›·7oodtdtdt@×ú®õ]ëmÂ*R|š?¥ç““ §á´ìKáKáKa¨çÕ@Ó4MËIþjîI÷¤/°ìô/l¿;àè-ûŒ iÛÒ¶ýÚ O/< {.÷œxlÛj]Å;ó5ÍÆwò)¿–£ÙŽÌË™—ÓJ“v”ûÊ}î|Ëþ®²®f]}gÀ¾ëû®tµwµÓ££oKß–‚m«u¯òž_kû¿¦AÆŒiaÈteº4 ––--ó~eüæ…àæàf€—ó^Γé`þÌg¾,bÄPOÔa«õd¼ÊWx _ñ)~KyëóÖkl­ÜZ™õƒ•ðøGh\Ò¸Dñ%®‡9Ì|0bF ÀÜmîfd¿ì 4°mµ®âU¾ÂSøŠOñ[z´¿÷ö„vºwº ¸K¼mÞ-¢…„HH]êHãcÌù¥l ÌxdôJ/ˆ"Q-ª‘ :E' þ4oš7S/|7Å—âל‚ ¾‡¬Ñ¬ÑØ'0bŽ˜À{68!Nð^,g9ð-M49TRI%ÐH#À¶°äù@>pĽSı'‰›R|)~KORØ™;P°þ`*yoˆòYÅ*«~CCCpªèTÑ©"xn<7ž3+ö´þiýÓzè[Ü·¸o±£’Q\¸Ä7Æ_ŠßÒ“öË7Ð9Ñ9‘J¯“Z¢#ÑÁ´ò · · ·€>®ëã°vûÚík·ÃÊÖ•­+[!Z­ŠVÙôB½P/ÿÿÿÛ/>náÂf›Ù¦ðeÍoéÑ`Aï‚^yF‹G‹m³ÔÈ42mûìѳGÏ…’ì’ì’lÛ¿úÖê[«oA‡·ÃÛá…#“G&L¢G‹-z%%%ÜÏÍ rÀYcÅoéÑ 7;7[ CôUô•}ìå×¢ZTÛi/"/"/"à ùB¾øãþ¸?ù—ò/å_‚²@Y ,+jVÔ¬¨ªkUת®~R?©Ÿ„pm¸6\ëhé!q@°ùl~KÏG+&+„Gxl{djdjd Êãåñò8Ûplñ  K]êö7ïoÞß »úvõíêƒÂžÂžÂÈX–±,ct‹nÑ-- ˜Ù¦£ò³Tlö=Æ<ã¢qÑÞc±P, ÁÆu×m\žp>p>Áö`{°ÝÑÊÙ`6˜Ì ÿºÇ>r*Õ`ìæ!íS9ýdúÉô›››\¸p‹°ƒˆˆˆˆÀTñTñT1Œ?6þ xÈ=„˜ñÚxýŸ§r–9f½Ë&ÇÅqÞóuÔ¬–;äGË}Ò'}@+­´:J6Á€ä€DJÄ^±÷ϱY&?‰»f¯Ù B"D‚CtÑ…”?%?=?sŸû3[IÍ49¬a D“h"aã%ñ?>ùçì·rÎÞ.æì}lnÞ`ÿ>r­óð …IEND®B`‚routino-3.2/web/www/routino/icons/limit-34.0.png 644 233 144 3005 13061246473 14652 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܺIDATHÇÍ–ïOTWƿïaœq°Š‘°¸:î×Tú¢†5Ø6kJÅ)P#ÝVmµIiHQ_˜šT\MŒë‹%Z©¦4Mv·Û8ie|aÚlÁ_!âJÉ Öe@f†áÎÜóÙ3×™è?àysó|Ï÷<Ï“{îy§@ÚÒ´¥iö8N{/YÏ~5ûÕ?ü;Ž;b`ª3Õý¼rŽçxá˾Ôo&±1oô§®Iò§êuY É‚Ùmv›*¸ ŠвÇñßûÀâ±x‚Qxÿ»÷¿8óÕ™¯øî]¾w`ªrª’ؘ7úõ_*¿´=¥/™ÞL¯iÌYæ,XV³¬fÅGñ†[+ vcíF€ñôñt•±ß6U `Œ‰lÌ'úõŸÁoèúq?¹¹"°é­MoY:ã nþöì)0ô4p˜ÃØ ˆb[c[‰€êS}˜0AóF¿±Þà3ø =C?î'¹•!‘cÕàò¹| Oh—¢£Ú2mèÿÓ~Õ~EK8U†eµRªBÐKô½„ä¸ÏcORŠÖGëÑ¢cšM³ú ή€+LúÆVÞùc;X–@ ƒ¾K¾KÀOüT™*#ÄŽr¨¢Š*`3›Ù ª_õ«þC~üøSpe”¥TP ^S¯¢&ÁÿFBÏÐÿ9îG¸/"ÒqûÎww¾k°éÅ7k†¾úŽ>öù±ÏQƒú 6¨ñÌÞ2¼ex ôæ÷æ÷æ'ëú)ý”~*‰}C¾!ßœÈ8<DÎŒ¸GÜI=õhgéÎRck;.ˆîÜ žž0’;9>9®¶/ü[Ž3ÇI¤aqƒµÁ ùùùpeîÊÜ•¹¤ ãããTwWwWw?k|¢|¢|¢Š=Åžb¬ùïï/¬ 8O8O™:  ¶ƒû¼û<¨Oâ~ÒLÿ™¿xþâ’u"ŸU|&+xÜø¸ÑÔyP*sãl£4ŠH^_^_^ŸH¬7Öëikhkhk‰ D""‹:u,êgFϹžs=çDÌÍÍE®W^ßx}£ÈüÑœôœt1÷Œ|ÓüM³©S¤ö—Ú_DÔÅyjž*Y—a:™~7ý./I»¾_ßo’•×GGÅÿ»ÙwÆÞ“Ü&ÛÛž·="Ú#í‘öH¤{w÷îîÝ"Þ:o·NdCó†æ Í"ý-ý-ý-"#]#]#]"Îzg½³^$z0z0zPÄvÕvÕv5iØ>f7ÛÍ"áßBµ¡Zñ‹˜šJ®\H_¾€—$ögk–5K¹!R©€Õ¹·º·BÉ_‹_,~1åv”9ÊP® W…¡©½©½©Ví[µoÕ>È f3ƒàÉóäyò`vïìÞÙ½àÍòfy³`õÚÕkW¯…ñu㯌¿+î9Î8ÎÀO—í—í3Kg–‚þ{ëmëmåõ…ñ}ëÿÖŒïyå?Ê_.™ˆý {½šn4Ýhº333IÃ×:¯u^××בd½(\. ÃôúéõÓëa‡s‡s‡¬Z·Y·Áž¹O|šH"M¶Ã×| Ð÷#Æ)``Wî®Üä)‰®›š‚‡?<ìzØ…Š Äb †Õ°ý¬~V? áåáåáå0íšvM»@Y”EYÀÒÒT©*U¥ êÔëêuðßôßõßEé´B­ˆÅõˆíjÝÕ Ì&N%žÊ±Ìx®¨}Or¬^ÕRÕj“ÚP@Ê{’[ …B„¥Ì·ÒB èeWv5OÍ#¤¶%ø[}w|w,~‹?Á¨‘cFòGŒä}3ãÍ àP<™Õùèdtø"v?vÿÙäçŸò)°„%,tbÄ@ÝQ·Ô- ˜è?¯gëÙhj0Œ#ùzsO'ÿóû¯|noÏí}ìù¼ÁþÐtùŸ IEND®B`‚routino-3.2/web/www/routino/icons/limit-20.8.png 644 233 144 3177 13061246472 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü4IDATHÇÍVïOTg=wÀaÆA„qh¢E!%„ ìjèbmkK ­4Ä€¦‘Êv·Ä ºû¡jâ’’ƒ!m  Y«µÖ $ÔÒ³ü(Ô¥:º¬d¨Š8ËÀD¦ ÌÜ™yÏ~˜¹Û¿À÷ËÍyÞç9ç$÷Þó¾ ñá'HÕfÕfU\«Eêš75o¦~ÂmRzWzwì¹þ‹õ_d— _Ç#XÙWúWÏþÕzJñˆb:c:%SŸ$˲ʲ4‰!lé'µ]Ú®%?YÕ]ÕM’W.\¹À?‘Žïß“¤Ëä2‘¬ì+ýʼ·š'£k¾]ó­4MƨcÔ™\˜\øÊÇ¡†G¯%E%E$95%T$IæHÆ2V˜Hºé¦²œ«°²îWæ>…_ÑSôC~@ò yùξwöiÏ…Æ¿&$IRôä.’ŸòSÆ’~·ßM’Š@½¤èý$I‰ÁʾүÌ+| ¿¢§è‡üD^¥š ÈÒ‰Ò 2ø€$å!ÿ´œ"§A§_òK”ÃN…ø½ÈY¤Æÿ³ÿgR‡ÅaFÖ3Îqî9Á'²,Ë”ý3r’œD!~²ôqéc’nE_y•·àwŸ‘Z·Ö펾‰¡‰!’'I’o“â5ñ=ìà^!EŽÈ9$kXÚUFvs7w“,d! #eáá!ù76²‘$EžÈ£‡Maþİ^XŸ!? Ú¸¾ú`õA….¸õ?1÷êïՓͧ›-ÍŠµªTGm ¶[Ù"µH-9ížvOG¾5íA{ÐÁÖ3ÖVk+i¹o¹k¹Kñßí÷¿ºÿUDOÜ«N®N&¹òƒÀ]¸[O^­»ZGþûÏ“¹“¹¢2öWm‹¶…Þ|gþLþ ™êJu¥ºÈí7Úo´“¹M¹M¹M¤ñ”ñ”ñ™îM÷¦{Içmçmç툡Þk½×z¯‘†††äþ=ûߨÿ™Ô·ñýïÓ;š<éšt‰Jòªñª‘ ØC~TX§;«;›,8<Î?1~B:w¸ÍÜgîCLŸ¡oKß`ÓÔ¦©MS@ƒ·ÁÛàâãã±£cGÇŽëf×Í®›®;®;®;ð|É&Ù$›m‡¶CÛìùpyØ8üòÜËsˆYÎs~âüD:˜¶š¶’IçÐ9²s¢£RÔuê:f²Ú“ïÉ—Pz¶¸§¸óÿ¨ÿHÿ ‹Ç2ŽEýEýEý@ZBZBZÐÙÚÙÚÙ1g‹³ÅÙ€•ƕƕF¨@°½½ $"‰Îï:_p¾p ¸º\]À†A}º>ó€*K•:¢V¢V˜©ŸùwùwI¥³êWÕ¯÷?¯¯‡¡àhÁÞ‚½ÀÌ2Ë eÐ2$Õ$Õ$ÕO‡Ÿ?žèžèžè€õŒzF ¤¦¦(A J€Ë)—S.§;–w,ïXnénénéõ_Õ{Õ{ÑÛ?–ÿXm‹¶Üð¼ÒC•øûRÏRõ0202Œ´ŒíÛÇÉàënïnînâ¬qÖ8+°ì;)ÿRþ% M›¦MÓe™e™e™À¶ùmóÛæÜâÜâÜbàøÅã_†|C¾! ÿ‡þsýç@ŽØ>±}¾ò·ÊËùÐÝßÝD­,g.gZïH´„ÿ‚#µæZsíΕ—ÚN·Ù¿ns¼îx]eõÿ…x”lRÔIïÔ»õn@ãÒ¸4.`aíÂÚ…µ€Þ®·ëí¦0…)ÀïŠwŪ6Tm¨|½¾^_/°xb±n±LÌKÐ$h I¶5)kRD6×k*+¶œyxæaû`8`#9F*¹ÎYl›éy^1ÓL3tÝÁUñ *E¥¨$yˆ‡xhUý"[d“¢K ‹a’Fa¤GhÂü?MüD’Úí‚;š£JŽýß©ÞTÀ#¥U¥U¤ø:”ÌâN 6KŠúŸùŸQæ9Žr”‚?p€¤øAŒˆ’7y“7I.…ÎJ1#&Å$Éå?Ö¾ |GYüËÿ‹ÿ’]Jò¿õ^Ißo“ÿÅ=+_ØÛÅ {{1o°ÿX€m“tÿh·IEND®B`‚routino-3.2/web/www/routino/icons/marker-33-grey.png 644 233 144 6324 13061246466 15633 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ‰IDATXÃ…—{PS÷¶Ç¿¿½w$6TCU(EªÁGÅ""-—«P¥g,e¨3ÂéõŠwPZh-3Öç• ´#gî±ÀÑ¢ ˆ"–u|Rãá%„—@BvöïþAbg:gýóË/{íµ>Y¿ï^Y›ddddddÀ36>³0A\×ÇõÑÚŒŸ3~Îø™ÎËzšõ4ëéFê@¨Ãá¿ó.¼ ïâŸ`ª4Uš*é!¡E$ Þð†7€‡xˆ‡€zH)‰”D’4nˆâ†ZŠÈ#c©…™Î™Î™Î×Ú³ã²ã²ãÈ0ïÆ»ñn$|†Ch¶rÙ3¯Wc5V3¥B–%d ÍÓ“Ó“Ó“N+²ª²ª²ªJ¦‡§‡§‡ënÞ3¼gxÏÿ+y®#;ȲÃ-—ucÝX·ë§&K&K&K9ή›]7»Î’ú0ôaèCÆìÛêÛêÛJ"$i’4I HG:Ò!ƒlÇvl0ó1“«ÉÕ䊈֦֦Ö&j®÷®÷®÷’GÃFÃFÃbŽËÜdn2·5RËËËŽ ¹4žÆÓø¾Ï˜µdßÔ¾©}SšÐ„&×·¸J®’«l:;mœ6Ný‡ûî¸À¯ŽNŒNŒNäJíuö:{Ü1s0<õ¤žÔºÐ….³0 ³è¡‡€¼ànÒMºÁc#7®WŒ+Ð{þ‡ó?œÿÿ¬·±·±·‘»)¶Û‰íú/ó‘|$¹nÖaÖ=yI4h>Ð ðJ^É+O·Ln™Ü2¹%ÎÏë„× ¯|D|D|D|WCÍÔLÍÐ ‘B¤ QQd%YIVd3ÙL6p \ `-¤…´ Ãt˜”¥,e¶ˆ-b‹ ƒX 8UsªæT ѕԕԕÄÕÈ+äòŠŸÿà&¸ nâsŽ×óz^¾bºaºaº!ÎoöÖÙ[go¥ÑÑÑÜ]D ÐÑšBS `/³—Ù˯UÌVÁ@"@ò`ö`@n’›ä&@ôDO^ó¤‚TBÁ€è¢/F_Œ¾È•þ´å§-?m¡º‹º‹º‹q ¥+êM½©÷þ-æ`s°9Xýýõ÷j_h_h_±ðBx!¼€‚ibš˜& o^ß¼¾yÀ½³÷ÎÞ; <z4ôhÀÜÁ`æ!Ђ´}ª>UŸê5ÿÇ?z 0'˜Ì @¨ª„*(ì ì ì ¶å·ñØøØ ü ü üŸÎ(6)6)6‘¼HI#)9,z_ô¾è}¢ ¢s5èjÐÕ  âeÅËŠ—€Ö 5h @STSTS0£%À}‡û÷À•UWV]YTŒTŒTŒZh¡Ð××¹d.™ ¼óNÌ;1°q¼ïxßñ>‰RÏUÏUÏÅ!S)Ȥú;R&R&R&„C¥kJ×”®¡6›´}0õ˜zL=”¦$¥$¥$QÚXÓXÓXóÊÞp¾á|ÙÒô°ô°ô0J_º½t{éFiê¥ÔK©—(m\ظ°qákþ¥7Jo”Ršê‘ê‘êA©é]Ó»¦wé›6iã±ñ±k…µÂZa¢ê˜ê˜êû*|¾ 0TOõTÆöË]E®"W°àö‚Û nýýýÀ½†{ ÷U¸*\øÉüd~2Àõ¨ëQ×£À‚9 æ,˜ô×÷×÷×-ç[ηœTZ•V¥üýýª¥Zªˆ/ñ%¾`Ú§Ú§Ú§À ݺ5t‹Œ0¬ ëºÐ2] .PˆþKþKþK°d€ P&‡Éar€¥—n\ºB…P!(»]v»ì6ЙޙޙˆÊDe¢2€Mf“ÙdÀ§Õ§Õ§¶ […­úw„u„u„¢ý¢ý¢ýR‘ŠTK±KA­`'ÿ˜ücòô0îŒ;ãNËééé>§Ç¹Ç¹Ç™–©ýÔ~j¿W7_¿6~ ´ÛŒmFÀ!Á!Á!دٯٯöØs`Ï e¤e¤ehYÒ²¤e ÐûQïG½Êe‡²ãOÿ½£{G÷Žwï:ÞuÚ>oû¼íóW•4j²4Yš,@£Õh5Z•öH{¤=|ƒhD#:³ˆËà2¸ ’v-çZε‹»^©Wê•Y’-É–dèŠÖ­+Z¨««ãOõÇ’X ˆ—‹—‹—BŽ#ä………Àƒ .<¸ðš;i'í§æÔœ$‰&ëeYµ¸Z\-V Ñ N ±Ë)19¹ôäÒ“K§OŸ6?žŒ˜Œ˜Œˆuõ<èyÐó eoBHBHB›SëYëYë Óo1¿Åü‰8^/ŽØP6” –K–K–K€¨¶¨¶¨6àÊ÷W¾¿ò=Ðð¸áqÃc@¼[¼[¼`cØ6X–»,wY.èÇ+?^ùñJòÞòÞò^Áp«þVý­zF&›/›/›ÿ¯mæ*s•¹jU>Ù÷hߣ}l}P•' ‰†šíô%ú}É¢ø ƒ7 Òðþðþð~òëÀ‘#G@GGGAœÖ8­qZ¨UŽ*GÀÚÎ8à‰ýû'öÀ³£ÏŽ>; ÌMœ›87x›››‡áAɃ’%ø[qHqHqªeœŒ“qSa3ÿ`þÃb,ÆâŽÿb׿µþ­õo±wI1)&Å[ ‚¢á¢ßE¿‹~ߨÐÐ@ï:©ÔNj¢óÊôÊôÊÄ;ó®Ï»>ï:DÊMÊMÊMYKÖ’µ^à^ø _á+@ѧèSô.±.±.±€ò¹ò¹ò9tºïtßé¾Ã¬RûRûR{þ¦ÅÏâgñc"ØAvLýBŠÐKy8„C8ĹZÇ—|.åDIc¥±ÒØ3ÙcÑcÑcÑÜxùùòóåç-{m ‰Žèˆ&La SŒ0Â`a€ ”i`˜HnhnhnhhÈáŽpG`sär¹\.25}vúìôÙ”ƒí™í™í™ÕP Õ@iÍsÚj°®¿³„YÂ,(ÕƒêAõ 044”rPî w;ôýò°êaÕÃ*6§ö“ÚOj?¡!dÙEvAb­,…ì`Ð :A'žð0>×<×<×àLݲºeuË ”ˇåÀ( )™cÌ1æØ“)¦ˆ)bŠØ¼jô!!¶¶a}%‘X·Ö#bsP‡:ÔYö’Õd5Y5óÊqý‚y§y§y§°;Fˆb&È÷˜ï1ßcˆ:…N¡2f1³˜Y ŸÆ§ñiüèù£çž¯áUë†W±]ÒeÒeÒe9kfšä›BP pyÖ“ýÛ‰egggggCg«(¬_¼ÒU»{­ÚÍ#¹$—äþz‘YϬgÖ'W"ñˆgò«ÌUæ*3¿s¼p¼p¼2†a†Á„­׌׌׌‚áIÁ“‚'l—ôé7ÒoÚkLZ“Ö¤ýæxׇ]v}h›_yw[?µÚø^¾lsYünÕîŸ Ÿ ŸŠœ(éÒ/¤_œÉsssáÆÏeœË8—aÙkè•­Ž­Ž­ŽøGÓݦ»MwÉg²NY§¬ÜwÁ}w3÷)÷)÷©ñ}æ…5ßZWã›\,þ‚ƒƒƒƒƒÁ[·­TLÅTLþ{xÉð’á%ø?ËËË‚[¼ÄCâ!ñØšÿló Ï68VŒwŒwŒwÐÿUŸVŸVŸ¶¬Õ›õf½™M‰‚DA_ºÎLüÿ¬HØÞ™v&Ì·€µPü›<ÿÆþB»Y¨E-j-™´’VÒÊàn¦œ)gÊ<¦6OmžÚ,,ˆ DLÏÆ³ñõžåžåžåƒ5ÝšnM7¹"8 N‚=e[e4üƒcoh×Ú.,™Ø…]ØÅµ8Gâ~󤵴–Ö¦n·[h·Ðn!ÓÁ°ì€v¡pX8,Þ9ع­s[ç6`Öx¿üÕQ¿iÿ7Ì8ùuáŽIEND®B`‚routino-3.2/web/www/routino/icons/limit-22.3.png 644 233 144 3035 13061246472 14654 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÒIDATHÇÍ–aLSçÇßÖº¶µ(“Å©Mp&W#Ùhbvþ¬“RtbØÜ‚Áˆ3¹wËD¼ë5Æ.‹eƒ»D ³,•ÎÍ]™X¢‰8p†Éë" ì-´”žž÷·í±l÷Ëýèóåäÿ>Ïóÿ?9ç¼ÿ÷ „ ЯүÒ/ŽaýžÄº)×”»¦)†ë¢ +ÐÜû,©]R r.åœ:˜ÀZ^«Ÿß/D‚¾ž¶.,"±`l66ëìq| 3 3LÏÄð‰`¾d¾4£@iKi ÀÅÆ‹ü|ݾn€)û”XËkõZ¿Æ7Ÿ_ýƒ¾°ð‹…_è€ñ)ãSB€õ5ëkéïÅ †Óa›c›à§?-zˆŽÉ$K; €ó°–×kýŸÆ¯éiú±y¤¾’úаýÍíošb ƒŸBùÊò•š^äð‘ J@ Dߎ¾Mä y:H`-¯ÕkýŸÆ¯éiú±yŸ2(„ÕÙàô:½ Þˆt)£kÄ ê£b$ŸTªjŸÚʨò£ò#¨³ê¬:K"üʯ‘TCJ²’LDyçëŠñkz }íS^Bˆ?sÀ䜷ËÛ äF¹‘ ¾äKPCjH —¹Ìåyƒ¸pá9#gä̼õƒä ÐN'2Sf¤&ÎÿL\/®OglO!ên²doÉÞM}±ßøÝï@Í‘šÃ5‡‘w¯ßm½ÛšÐë»Úwµï*Ô¯9^sú[û[ûçåÕµEmIàÁìAû ªÝÕ Õ ÈÞÑÛy·ózrn¯c¯´yD´W!z€ç}Ïûpû¯#Y#Yrwò´ù´ù4aû×vÝ뷮ߺ~+Ô7Ö7Ö7ÂòûËï/¿öGöGöG`uZV'ôê=Ô{(1Ð}È>d‡¥UK«–VAás…)…)°"œv&í áoÿÿC¾Ü <@ôóØ©>ó%!²K²K„øÏÆÁýƒûu Ô•}Sö0¶e·mkÛ&„%` XB\q]q]q Qy«òVå-!Ú,m–6‹IiIiIiBÜqÜqÜqˆÇÉäFr…p\—Aˆ¢ÍEEB<û¯×W\ƹ‚ÉêÉj]ƒöv{»º’¤{I÷2_DRL)&u@–Žç?~µLtÿ¹+½+222222 xgñÎâ‰7Ñ=Ú=Ú= ÜÜܰKÙ¥ìR@n‘[äþ'¦CÓ¡é츶ãÚŽk°ªd¥c¥z¾ïµÿU& ”ÊõŸ‹?Yü‰: ÔÉŽd‡l…¿îì((óES¹©Ž=lͱ5 zU¯ê…S©ÇûUͨJ«J«Jƒ™¬™¬™,î î îÿÿÿ8òüÉó'Á¶Î¶Î¶.1hæ‹/„^{kSQS@øTøDŸ{zøéaÙ,”eÚ?öUÖWYPÛÕTÛT+w/¼¨]ÿ:aÛŒmÂ6ÖµÖµÖµ°¹rsåæJHíHíHí›Óæ´9a™~™~™ÎŸ->[ ›f7Ínš…‘Õ#«GVCNENEN,Ú¾(gQ¼Ó÷Öþ·ö} wÃg>{Ò›Gp"¾+ÙW¶¯ Bͱ]òpËÏ/ÿü2Œ}8æs#}ç|u¾:˜ê˜ê˜ê€ñáñáña+++ŸÅgñY Øì vÂdx2<é—~éå‚rA¹/?t?t#£§çòçò»’w­ïZ5í»7Ø„æ+},]¦äÿ!Bó°—U² @æË|‚ñÃ*ç½=Þ³ß츭ùØïNõêlÊ¥ÎRŸÆœYvEQ#Èö¨)j"Â2ÉDÊvÙ*[AÞŒAÒ#=ÒürÊAÎÉi9 LÇœŸ£CÑ!"òßÊ/Ê/ÀÍùß0¼aÂtþ'÷¬|boOì}ìɼÁþðÜ"„å:Ë0IEND®B`‚routino-3.2/web/www/routino/icons/limit-38.png 644 233 144 2523 13061246467 14527 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]LW†¿Ýªˆ 5Ùbl PC5‘/d#DâÑøK@/¤Æ‹¦‰x£5#5ÑT/ìJSª©Š bbSD Z¶kb ˆÅÚ€Ùˆ5±€îÌœ§»ggÚhÓKæfòý½ï{Ιï›# ""ÉÑ·€;ÃáNŠØîOmÂò„å}±O˜àZëZûë—0óøÌã³NÍ:eõضŽë|g½ˆïäÓ~IÛ.þœËµ«acîÆÜ„#vÝMH¼˜xñ/¶·lohjhjà3Ý ÝöûÁ¶u\çëzçÄ—êñ‹@\k\«ë)ÄOŸ*™Å™Åó>$ü6JW–®ô z”ÌÀt¦+?0Ê(úùÓaëx4_×k<¯ù4D@jaj¡¬Ù¼fsâÉHAÏwP•^•®ùÂj˜ƨ1 `–›å¼uSÝÀ… l[Çu¾®×x_óiþˆùçÙÖÁú„õ €ß&l¶™mÖ>kak\ÍUsQÆã‘ñ¬Ÿ­{ֽ؎aýn=±ž€ñ‡ñØx jªÊSy(°j¬¼1¯›×øš/Æ/NAÙ_Cb(14:úÌ>°¬*«Š1ösžó@;׸f ¡6Ú@y•Wy \à‚#^O 5@*KY `²1ƸÆòÅø#z¢ÂNtÂŽ};öÅÖǨñÌxi¤EÖÐSÔSÔSõGêÔÀ@` 0`ë  „ºÎºÎºNx¸ðᇠí¸úIõª^o—ÆK_Œ?¢'*ì—]pfäÌH¬|›* „x£=ý»ûw÷ïo­·Ö[ ëæ¯›¿n>dwgwgwCuFuFud3ƒ™A( ”Ê~+ýVú-ènênênrùá•á•_m³ù#zÜ"IíIíù"…Ë —EÏW\'åÏFÏF‰×3d†ÌÈðð°È&ÿ&ÿ&¿ˆï¬ï¬ï¬ÈXëXëX«È´ûÓîO»/R’[’[’+âëðuø:DÆÇÇÇÇÇÅ~šÜÜ4¾ë¤ÍÑ3EÄSê)eH\o\¯K—½tíqv–T9*Gå¨HVcVcV£HÚDÚDÚ„È–ì-Ù[²EžûžûžûD Ÿá3|")¯R^¥¼ihnhnhI¹œr9岈TH…TˆÈ·r[nÇd¾‰»wIRE<9ž$µ'µ«sZr| æWÆ*c•m7^m¼Úxò·æoÍßjû‹÷ï-Þk÷öþ¶ýmûÛìx΋œ9/ ¡¤¡¤¡Ä¿Ù˜cÌq4IŒ?¢Ç-2êõß¿'Òq£ã†^•î/d…¬·Ú³:wuîê\‘ä‚ä‚ä‘•3*gTŠdÎΜ9[$°8°8°X¤yIó’æ%"Þ 7è Š¸ Ün‘²×e¯Ë^Û'é‘€4>•6TÏ{»RÆ.´»ÒXd,2ÁP×P×P˜%f‰é؉‰»w'îÂC *Ke©,ÇÆ<ÅÀ@9ïuå;æXlÎXǬcŒ1…<ò@íQUªÊÑþµªVÕ‚Un•[å úU¿êwÄ?På>f¬ÃÖaƘø_s쓟èd6Ìv³ÀÚeí"Ì!ZhA©Õuø†œpìÈ*¨uS]W×úèCµÓÚIÓì0;øïŸü“ö_9io“ö>69o°DÔæ!#-IEND®B`‚routino-3.2/web/www/routino/icons/limit-2.png 644 233 144 2062 13061246467 14434 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜçIDATHÇÍ–_HTYÇÏLkãÀd í“…/‹ „½„¾4`$YˆÚÝHXôe{ðÁTzÐ]”%PFŠÝ GCBssÀUÖƒXÇt@…hÇÑùsï9Ÿ}¸÷̽ö4½ù{~ÿ¾ßïù{ÎB!Ší_ÞsÞsÞ"Ë÷þèÄ ¯^-ÿÓòGLðÜôÜ\ë†ÓO?(+“ï_çu½»_ßͧã¢X8߸oÜ´ý¸]y»²ð[Ëÿeü“þɤ÷^Ü{~~ÂOÄ#Ÿ‚Ÿ‚àø:¯ëu¿Æs㋞/ø…€‚—/=›à;é;)”])»r¾Ã*ø÷<\¿výÀÇO(/˜»@€€  hÛsù:o×ë~§ñ5Ÿæ·ô8sùÌe!àÆwü!«áÝïðà샳š/; <â0FÀl2›HƒZP xð€ãë¼®×ýOãk>ÍoéG÷ö×Z¸Ux«0'hÌ·æ[@É6ÙF–,JWÈrCn€±il› SòPâXÊ®Wò®¼K6‡—Ã×|š_¸}÷øãþxâxo¾7s°õ ›e3pÄTZ¥U衇W¢—^zAeTFe\ñ\¿—Ã×|šßÒc ù î?¼ÿ0×|ÁµÖŠÿc—]{Ã<_¬ V+€¡Á¡Á¡AˆÍÅæbs®L©)5$IºðŽàË ¿¥ÇöÏÏðìó³Ï¹¾ïÁ|j>% ִ䈑#á²¹l.›È2 Ô–×–×–CYcYcY#D«£ÕÑj§^®È¹bÏî\ø6Ÿæ·ô(š/šWã¿¿xd³"*¢¿ŲX;Ù c˜0 { { {À‰W´U´U´ÁX×X×X—7̳ÁÁsáÛ¦ù-=JN•œ’ë°·µ·•«Úµ«v]}YëÃW-ªEµ8áȥȥÈ%¨¬ª¬ª¬‚V£Õh5@5©&Õäêï ƒŽ# wãï9ü–žü'6+g嬓†¢¡hüa؆þÎþÎþNØoßoßo#kd¬ n5ÖòŸ˜WˆD0Œþ-Ä›×o^ }VBm¨ ‘B¤DJ†fXä,R©Ô aúLŸé"\® ×Q:]:]:-ÄLr&9“têåº\—ëBh<¾Í§ùm=yŸÊy^ñÊYßáêáêá*ìÔíÔíÔÁÖâÖâÖ"lnnBª/Õ—ês äB„¾úTæq9–Ög)Oû¢þ«î±íý´÷ß8šà¨pTüúd6g6Ì<1ó„ÕcǺ®ûçElüD>—,±©¾TŸ£l2ÞÕ‹ª¥åÄ㦠¸Ú\mÏ øøìÇg~:õÓ)>‡W^—…ËÀŽu]÷ëy—ˆ/ûÿÅ/ÉíÉíŽ? 5%5EòVç­~ýÓxÃï¯CùåÙ¯ç5žÆ×|š?®G {eöJX¿iý&×wñžïa÷k»_Ó|±6à qƒ1"fYCTPpà;Öuݯç5žÆ×|š?®G^~·_¿Ó6¦£±.°2­L°JcÞ˜—˜jT­ª¥%[=Ö=ë!#d„ÀŠYÖÄÔ ¢–¨-j ʘ((%¦>3Ök¦¸‹±J³Ò”æ—DA…G°\C®¡È è³ú¬)Üuf¬$V˜jQwÔ° «0p€°óøñãU¡*TðµÔ&Ôט-f c”Çñá~Þý< ê ¹B‘ZϤ°£—a{ãöÆ©u(V1Ìoë~l 6Bnn®Ís{óíÍ·7CSwSwS7ܼ;xwЮ÷î=Ü{šiŽ6GáH(=”n¯¸ú=ÎgóÇõL »µ‹­Z/ͪ¬°&ê›ãsûÜà 8δg·g·gÃÍ›7 k_Ö¾¬}P“U“U“ù[ó·æo…óîóîón(©/©/©ÏÏÏ(ˆ„ ÂöW W”W§î;ݧ…ÝÚ%ёѡ|\úsäÏ‘„W•jÞ2oÏò™>æ®›»nî:ðïôïôï„ë\ç:0Ï3Ï3Ï^·×íuÃÚðÚðÚ0l l l Àª®U]«ºlÜ¥¿,í^Ú Þë§¾=õ­7¿ AëqŠ$•'•S$ï¦c{Ãö†WþÊÂ#àzèz™}fŸiûXµV-c ÛN\érµ\-Õ¦ÚT[B¾H©"PÇÕquTžÊU ö¢êŒN£“1>Ÿò±÷1×€kàûçiç7ûÍ~ ÇÜcî!F#­$8?[¨¡&¾© ð#?ðCœ¥>”ºm›ÅÄh7̆ç77&oLÖ+õ’óOÛ½rÚž.¦íylzž`ÿ‘ÖÄ MGIEND®B`‚routino-3.2/web/www/routino/icons/limit-30.4.png 644 233 144 3027 13061246473 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÌIDATHÇÍ–ïO”WÇÏ ¢¸ÌÐ6¾XP1’`£VÓº] Å ”bC:ŠÝZ©P´bc7bhLi|aÛmj\›,Ò ›ÅYŒ4h:R$›0֬ɢA» aÀŠÓVÖq¶32ü˜yžûÙÏ<<“î?à}39çžóý~3ç>ß{DDä±ø¯@ÒSIO%9Œ8i·•_òÒ’—V|aÄ'4°¹l®‚´¦´&€ÇÝ»õ!+6÷ÍúÄ~ ?‘ÏÌËcb%w,î°Åãáµ§_{zI†ÿñ¤xR@ôjìN4+šúÕ¨7ê%WªÔµF­˜/6U§êTÖŠð3?!£ô·ô·ˆª\ííЗøP!Lšüæ(ä6BJ8%^ÈaïUïUà"e žUÏáï|Ã7 ¶¨-j °‹]ìJRB %@9å”óÿ+—\rAÝÒ¦´)"ñlSÞóÞó0Ï¡GøIDäÄe{ª÷T›(úÚ¡âï¾þîk8ö×c§ŽB]?zýÓëŸZ<Æ/ _€¦é¦é¦i …Ç BA@mTÕF+=R;òÑÈG¨o3{ÓzÓ,>Ýóþž÷Á˜Ü‰Ë¢{DDnÔƒç°ç0ÜN0ñ`BÕ<ñqZNZ³Þ /dÌ:™uºvì:ù…ù…ù…°zÓêM«7ÁªÙU³«f!è z‚KˆêVݪ”S9•rv缑ó8ÿVôrÑËÌÆ«jôõm9m9À ¡GÔ6{†=Cu@0#˜Ãkï<çyøü㦲¦2h¿ÐÞÛÞ ÅsÅsÅsP•W•W•Î\g®3×°atÃè†Q8]vºìtY‚°Q5ªF¡Þ]ï®wCæ»™û2÷Áï~³m °¶süøøqÇEÇEÕ±ÐÖ¼À¿ÀOž4ê‡ôC6Y5°ìè²£øõLÕxÕ¸¤W¦¾¹ìÍe"Ö@k UdÅЊ¡C")·Rn¥Ü’ùåv ;†Eººº¬¼û¬û¬û¬HÛζm;EJúKúKúEþQÑ×Ð× r÷·?¬ýa­²û=ŽIg¯mÂ6A^’¾#fÙmƒ²ßÞoïùbË—•_VJzÁÞgS¤SïÔ;uGÈr„DBûCûCûEB…¡ÂP¡ÈÝæ»Íw›E|ɾd_²ÈJßJßJŸÈLd&2‘lÉ–l‘õ×Ö_[Mäæ¹›]7»DÆ?÷ÕùêDþ]7˜:˜*é"¶{¶{"x´j­Ú6(ªÅê¿ß߸?Ü0øÐj?¨ý¸ÿ*¹ü [dø˜j˜÷1—rQ» UͪY5ƒÊVÙ*;áרUàNõSL€)õ¤z’*Žû¦É¯L3ÖtÞŠ… ?άÎÇÄÖüšßr~ÎÒA¨ª_õ=ôÐLw¥ò«15ŒÏ;ÿ^}/QkW´+À¯æ?¹",þùKü‘½+Ù×Å#û{4_°ÿ&¡óØ9IEND®B`‚routino-3.2/web/www/routino/icons/limit-66.png 644 233 144 2462 13061246467 14532 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜçIDATHÇÍ–QHTiÇÏ3ÇÙÁ4Ç—¥’Ú­–va‰ÚH F‹ Ù‡ÊZY–Ö ¶‡Œ"h©ÅÔ" g+*H(m5ZÁ¦Â‘˜ÂB’JDvÚtîý~û0sçÞ]–zõ¾ ç;çüÿùî|g>ÉM} 8;;r’±£ÎZwnrnúìB2>§ƒ¶EÛòägXм  ¯5¯ÕˆX±™7ëíý"–¾g®K®X Y—³.kÞT|v¬Þ±ÚYŒOÞƒì`vð¯칺ç*@W[Wõ0vì>@Ìó‚›y³Þì7õìúrä?|ȼ‘yC¬ùYóE pcáÆe?$ ¢ËÀ·Ù·`4c4C9@ ¸q+/0Í4æ3n‹Í|ªÞì7õL}“gò“~<åžr¨®©®ÉnI6D:àÀ¢‹LÞl8Æ1ܘNLèµz-ïAÝS÷ÐÐÀŠÍ¼Yoö›z¦¾É3ùI?òïwø¶9·9Ó†ú™Öoé·Œ£…Yµ[T•L¢¼ãÊ6x?t*ÿgŽ¥çŒÑh4ç;NpÔ'jžšg;]eªL•jU­ªT‰*Q%¶ü§*_ååÔS`7ŽOÇͱL~]ïÕ{ŒýÆ~f¹Äc£TŸº«îíœç¼mG.ÐI'¤óxÈCTº?­÷ÑÉ?gÿ+çìíbÎÞÇææ ö$Œ‹-¶â“IEND®B`‚routino-3.2/web/www/routino/icons/limit-1.0.png 644 233 144 2403 13061246471 14563 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܸIDATHÇÍ–]H”YÇŸ?Pì׋0‚¶HCPúØpK(‹¢)Á"ˆº¨@ÙX]÷ªèk½Ø–”®VÖ5lа‹e!×¥b—èÃÙVvˆÒÌdÝSGÇÙ™sÎo/fŽïìJ]{nfþÏyžÿÿÞóžç=""²,õ+à^å^åÎOb÷gN<{Wö®Hâ \5®šßÏÂÒëK¯,o[Þ¦lçm~z½ˆÃŸ®gã²Lœ@–?ËïªJá p¨ôPiöGIüMär3 8Ùu² àöÍÛ7©‡Ñ£&ª&ªÀÁvÞæÛzË—Î/þ§/žOk²2³2E`õÎÕ;×|žLx±¼{½{Þd¼É0nPyä™*`šiì§a;ŸÊ·õ–Ïò[=«Ÿô#P°½`»8|àpÎwɂ¨©ÈêÅÀ®‰éÄ4€:¢ŽÓgúpáÛy›oë-Ÿå·zV?éGþ»·Ww@mvmö¼¡ûL©»ê.€èq½]×é:Œ¹hΚ³8ã-oyë@ó‰©0V¹*c¾HAâ ¦Ô0›â§6«6˼º#m+EDŠ¿…œÑœÑé%èP<ŸçߺN×1«^êl &`n™[i†Â„ §áJ*©¶°…-iñjh¼ªSu&m{ø'4š…yý”Ÿ”±¿À©s§ÎY]f·Àül^˜;Ó×Ú×Ú× ¯V¼Zñj…£«OëÓú´ƒCÁP0„O‹§ÅƒÓƒáAgÆ Æƒñ`ºžÕOúI{ü%tLvLÌqZÔFµ‘˜-õú ý…àéòtyº cwÇîŽÝ,ácácácP( ”`ý ÷6܃õ±õ±õ1˜è™ðOøçÓcæÏ”žÕOùÈïÍï5~--~š_TÄDÀd™L“ ~í×~ +«WV¯¬†öÖöÖöÖ…ÆÚ"m‘¶ljØÔ°©Á‰WôWôWôƒïWßCßC'®ÎØ)ý”·H†7ÃK‰ˆ§ÛÓ-";DDd\DædNÄ|j¶™m"ÝÝÝ"%3%3%3"Ñ‘èHtD ¥•VZ$ïQÞ£¼GN<88X$ª£DI+øÍê¥ôS~Ü"ú޾ãúC$±?±_DŒˆˆˆÈKy)"Y"K4Aquº:]N|¬y¬y¬Y¤èIÑ“¢'"c‘±ÈXDddóÈæ‘Í"CåCåCå"Å__.¾ìÔ¹²­^JßúYðŽa÷\ù”˜úJÕ«zçÑïóíóíóAû¥öKí—œxi´4Z…É­“['·Â‰µ'ÖžX ¹õ¹õ¹õФšT“JßtÕ­º‰qý½ï؇O%=<å©s*§ÖM­›Z±ó±ó±óÀsžóƽãÞq/˜jSmªÁÔ˜Sããã ÿÒ¯õk iΠïï€øOeZ#¤BÎÊö€>ªÎ÷€˜sV8qâi¸‘FAOëií|ª0ÇÍ5s hTÏÔ³´>Í…æÞÛÇ>ÐùãªWõè3ú q ¨¤C3¹˜Z½3d†Ì0C„ð#=ô€yl¢&Š¡GêBâ úU¿}rñûŽÞ‚οh¿•‹öv±hïc‹óû/‡5WGÏ1¦IEND®B`‚routino-3.2/web/www/routino/icons/limit-32.2.png 644 233 144 3045 13061246473 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÚIDATHÇÍ–oLTWÆ_ÆQdA…-‰ÔJIHÀ¬1JÄÕ­‘l+L­µMŠ!b‹›‰n¶®ÙÄí¨ FÑÅ?$°kÔþ1€a¡É’vE#- ;¦îZ$3bYè(;ùç·fnïÄ/ûÕóåæyÿ<Ï›œ{žsDD$1ü°¼dyɲ „-;Ìøü7æ¿‘ñy×!ª(ªèÎ~H8“p`áÙ…gõ»&6òF}d¿ˆÉ©gÄ%QÌ@tStSTA„w²ßÉžŸÂÕW!¦5¦õYÊ.—]h9×rŽßÁhÏhÀdÁd˜ØÈõF¿ÁÉ/ŸÓ¹s;¢†!z^ô<Hß¾a©#Tp)¼Yøf!€{Ž{޲@ð?@qªðâÅXãØÈ‡ë~ƒÏà7ô ýÐ<Ik“ÖŠÀæw7¿ó·PÃÝOáã´Ó =­8Ìaâ à x‚ïßÇꪺ @Q`b#oÔýŸÁoèú¡yÌ­œ9¾ì÷ì÷@Юµ—µ—A¿©=Ô¢…'Uú¿t—î‚ÀPàAàè>ݧû0—— &~AJÔžjOÑÃZš–úDˆìn»øÙÐ7¶rHD$óÄxc¼^+î]¿w¸À&P¹*—þI7Ý T‚Jši¦9bCâ¨)5¥¦Ì°šT“j8Èa¨µj-3 ñ+-¬gèšGx,"Rw;·ïÜnÐé¯ßÝàjsµÁñSÇkŽ× ú‡úï÷ß7oOßž¾= 5Îg\]®.W—™×Ûõv½ÝÄ®¹.‹Ë5'jªkªQ®¯22M=umgÒÎ$ÀšGôV‘[€Ö­àAÒ÷·*]T‘ðJÂ+øí·7Úa™™™N¯9½æôH9–r,å\,¸XpÒíéöt;ô»ú]ý.s ÞÞÞÞÞ^ˆ›››…õë—¬_é¿MJÂÿ]çÃʇ•ª.—\.}QhQ[â“ã“UL&O&ÿ_Z5´ j+Îl:³ šþØ´·i/¬s¬s¬s€£ÌQæ(ƒ£…G šdíÊÚ•µ v4ìhØaÆ—7.o\ûk÷×ßþÚ«¯½ g|–òY €Ö? ÁX[Ÿ­O5 ㉳‰³úœß;¾×<öOÿëñŽ@qGqGq¤v§v§vÖ;-wZ`àÖÀ­[5š5š5 %’@IÔVµUm¬X±šƒô¬ìYÙ³²s²s²s $ðÁ£zϰ™‰#G€ÒÄ=‰{ô¢‚¿‰;O5ÍùÇ“UOVEmù¼¸=µ=UäD|Õͪ›"ßøqàG‘ÕV_X}A$ïFÞ¼"-Ó-Ó-Ó"åË7–oÙ]¿»~w½ˆe›e›e›ˆ×êµz­"žaϰgX$ß’oÉ·ˆ8û}Î>‘]åãåã"óÿÿ}ü÷"VÛã}÷‰ÈíÌ%™KhõWãkœhœ€Ÿ¿P¥'ósòsðÛl§l§À1ìv Cu_u_uDwEwEwAÞ`Þ`Þ ,¶,¶,¶@}g}g}'¹‹ÜEnpf83œ`«³ÕÙê`EÓŠs+ÎÁ‚$[§­ë¢+#WFT)twCàdø ße׸ùaÒ‡Iæ) üÊ7雄±#cûÆö¡ôz½^¯_•¯ÊWcicicià¹ä¹ä¹£‰£‰£‰0S1S1SS¹S¹S¹ð¬ëY׳.ûzì˱/ÁsÉÓëéE=j91r|¥!=øHûHÞ ŸJ®=çcsC¾¢þô‹mQ[˜Q¿Vo©·€ 2Ȉð/>"õÿ.µT-e& 6Ás>†ác†óû ç}Ûú¶¨ 9³êüø h ƒA4þL3Í(õ…:¯ÎƒúV}£¾Õ¦ÚTð{ö°XHqÀf>á”j h M}Œ Æ‚ú4ìüµöJ{¥q5E:ÿ‹{W¾°¯‹ö=öb¾`ÿA2Ï*ÍIIEND®B`‚routino-3.2/web/www/routino/icons/marker-11-grey.png 644 233 144 5643 13061246465 15631 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü XIDATX×PUeÇ¿ï{÷§òË&¸fü¸Ã/ͬWCã’Vƒî`6fe6ÒšIʨ4Q:°Ð8iëF©9‹€³J±¦\È+"¤­£ÉÐ2Ê{ù%Ô5…{½÷×9ï»p.0¶mûüsæ¼ç9Ïó™ç|ßç}ÉÍÍÍÍÍE0&Ì1q¡Ë…^¡Wèåµ¹e¹e¹e<<ÿVþ­ü[ÏÌã!<„‡ø“¨õ¢~ᛳÇì1óý(A JHâxèD'€7ñ&ÞäûUkTkTkHŽð³ð³ðóµb'vb¯8/,/,/¬þzÁÆ‚‰MŒ£Åh’:ÁÁe®`: ¸K±”–³|–ÏòY£wÌ;æ{pQ~u~u~uy¿×æµymuWÇ|üñ…ÙºCºCºC¨Y¸ráÊ…+INb@b@b°(tQè¢PÀïî÷÷¿ï7_ÎçÏïçñó r—ñ@ÈÙ+d3ÙL6GRD+¢ÑKǾûrì˨ÐYu³êfÕI»Vv®ì\ÙI}óÛç·Ïo'«U9ªUÆñ>ÞÇûÐbã° ›° ÀlÌÆlŒ{æxæxæ`u{C{C{÷}ÿmü·ñl×ð³ÃÏ?»ám´6Zý¤ZÚ,m–6¯8Ä3xÏè}…€€€.#{Ý{Ý{ÝЀ†93³`Ì _y]^—×µÊlH6$‹KÓ3Ó3Ó3…ò`g°3Ø Àx"å±<ºÐ….303Œb£â‡8€t“nÒ wpw 8Ž@ô˜>7}nú\|¥çrÏåžËÂ¥F©Qjú.ˆkÄ5âš§Öã)<…§ï‘}û÷5b$¼6¶vlíØÚOÄŽ;wX\‘š‘š‘*Ô !“õ±>Ö‡@RA*H€1Œa ;Ȳ€xL”PB %ÀKy)/Øev™]…Eaßã{|ÀÒÚÒÚÒZqu×ö®í]Û…]•®JWUÖ*Üî w__HòkókókSy[¼-Þ– -÷ïÞã1[†¶ m"-ÁeÁeÁe ÜÀ Ü€@E¢H/¼ðhD#¸á†€j¨ `’„$QˆBÔ”?OâI< M¤‰4ÁéØäØäØvLLLÏ333‰E™¨LT&®J¤<žÇóø?¯õ}FŸHiMiMiÅJPÉšY3kF I'é$ÀE\ÄEÀ^o¯·×}æ>sŸy`6²‘ à|€ bƒÓü«úªúª&ÁŒÌÈŒ >|"ø”þü~?cÄ1æ[Bî„Ü ¹ƒý5>j$EònSÒHI#)VŠ•bÏUÏUÏUÀ4Ë4Ë4 ¨ÿ¬þ³úÏ0i|.ŸËçÒri¹´ü¿ø©?RdÊ…(DáäÒŸßÏãç<#žÏŽÏK—:/9š&M“¦ ãÒ9éœtZEš"M‘XMV“ÕTHR…8v>ì|x"뉬'²¦ò’ ’A2k²5Ùš Tð ^Áÿ‡ÿr€¸Žë¸‚æ¸æ¸æ8Æ#“"“"“Ó:Ò:Ò:‚û°ûH<=MOÓÓ“ï«Èl2›Ìž a°GجUY«²Vqî8wœp­v­v­žV¡ïð¾"ŽÇÿáÏÀÀ´¢­Sùé«ôUú*€c8†c$ž*ô ½BÏÏ8;;Ã*îw‹»¡ jª¦jpœÅYœT=ªU ‹ÒEé¢ámámám€»¸‹»¦}ú^ÂKÕ jP5øûþÁF&Û—Wc­c­c­°R5P?CÕ«?V,ZìaÖ0~æÇâ‹,ðÁ#pñu|_ðkü¿6-A jP D‚¦­#Á?ËÏò³¿öÇLÌÄÌi}ƒ½Áޘ컮ž´ž´ž4À2d² á/j«Úª¶Š…éHGz^‰+ä ¹$§>´>´>T28s<æx Zâ#>⃯ãu¼>M[gÈr ¯‘×ÈkӀ䓉¬'ëÉúiþrߥèºaj~C¿¡ßÀ#¾(¾(¾íyËyËy [J,ÄB,ø‘ˆD¤R% ¿~)üÒG{”)ÊeÊ—ƒÃ‹† /Rô˜v›v›vK;åx|-_Ë×ÂãOàÙáÙáÙ¸“ÝÉîäi =èAÀ;xï˜Zödz2=™€{™{™{Ù”RH)#eP™?4hþž<5xŠ^Q~ªüTùé¿×ûú}ý¾þ]>²w`ïÀÞÍhFóC‡nÜ ¸Õ¨­­­ŽÊX¡Y¡Y¡áO§V¤V¤VKþ½Wz¯ô^á6nã6Àð‚áà ¶a¶°Á€JT¢è½Ô{©÷ é%½¤bbb0Þ6Ð6Ð6€—ÊcËcËcq^sSsSsÓý,WpW,| H@·(-¡%´DÑBÒƒôàÐvÖͺY÷f¯¶AÛ m †¤=»=»=§dPWTfTfTæ4@"DGqG§ý½3zgôÎI@ç=í=í=-´Â.„] Ök€ Nâ$Î=Œ,!KÈ’oMôYaŽ<æI‰s£ðgrˆ"‡.m£)4…¦ì2#È Gª½ÕÞj¯¸ÕqÚqÚqZòùü';Çαs0uÖû§¨Û¸Û;Ïγó“Ò ¬)¨)¨)vÚ³íÙölá°*F£Š9U·?nÜþO."yÈ#_¡ÝèWøçQúÑ~ñ:²…,bžW5¯j^Uáóê-ê-ê-§ ìáöp{¸à0 ›†MÃSÚ%7ÉMr´£íÓú¢Zh®çz®§чèCP5Yš,Mþt³©ÙÔlRêÂuáºðA··Ü[î-÷£ëy×ó®çÜÂ-Ü?9é—¯§Ù 6ƒÍ@PÛOm?µýx³¼YÞ¬w?Ò…èBt!½§;«;«;«…µëj×Õ®ãO“mdÙû‚}Á¾‡h~—ßåw"‘ˆpݶܶܶàTÝ‚ºu ¤³él:À³Ålñ»MHoÐ-Kñ°¼R' ¿†ä_•“Ê}·u¨C´“,%KÉÒ§ŸŸøå¸øµo«o«o+{gÛÀ60º|þÁùçÄÖÁ:X´4&ÐxÄ1GÌêhìÑØ£±Rœm‰m‰m‰¢K½@½@½ ðɉM³ë +bE¬H8,Ùíþ/VPPPPP§¿¢&5$kw§¬ÝòvÏþJ»¾j_µOÜê(v;Š¡¥”RJq×_‰zW½«ÞÅÆ‹‹‹]ê=ê=ê=×k÷žï}7C4aÓ(ÆÄU žO‚G¸HšÔ6©mR[ÞrY•UYýú-¦Å´˜˜f5$“L2÷XŸÕðõ<žçãùc뉫byŒ|TA¢;v>å¹Mn“ÛÜÃÂVa«°U1'û“ýÉ~ü}ýµõ×Ö_ oÞ(¼dddé>Ÿçëy<ÏÇóózæ!qe¬?ï#qTGóJ-M-M-U·7o:ßtž=¸¸¸@‚ AŒa c0€@ó£ó|=çùxþØzó>z4YžÅAqpà8OÕ•Õ•Õ¥ü¾?Üî£Qcé,¥CQ+ÕJµP—¨KÔ%€êPªÃàGçùzÏóñüpL}Ë“šàÜ‚›HÞ#ï‘÷´ôð[í=Û{ŠC{“Õ²Z”–ñêñj€ „{Â=Æ#™‘LÀ%\áÁ€ñhü@dud5 ´„®†®ìMv’D€/¶ÕØjl5Šƒ×ç<œL×M×M××üŽ/°TYv[v³ùÞÛÞ›Þ›‰æ ¨ï‡‹ÃÅ€! z m+Y, pçßâ[`ϳçØÛìm}µú¾úŽúŽæ¼·½·½·1b©²TYªØ|ΣñÉår¹\Þ½‡O4”4¼Úð*{#𠍏ÃÍáfO¨÷xïq8y .”\(\ÇuÀËxØì ãF¼…ÞB¡.k—UUÜáÃjn°¡¤¡¤¡„½¡l 1_rZrZrj†ó†ó†óßá;(àI.¿ËLÜ{0à £ï´;íF°mÚÀŸéÏ€œ”œÈ·ä[ ±*CÊÎÍësÎÇA÷®«]W»®VߙڥX À¾¾3zfô@YAYèôç§?1$†à§;?Ý€SŸú ’žMzÖ¸¡‚  á>õ„zPûÕËêe½>çá|bôJ=c²›ì&»vÇh3uR'ýJMSÓˆˆß¾'"šëœë4~)R¥.""b‰,‘ˆèËç¾|ŽˆÈþšý5"¢žúá)"¢Uu«êˆˆF®\3„'R„"DÔLÍÔ¬×7µšZM­Ú•çßWV¼¼~yýòzô=îÿrÿU/ªÁðGÞúŠ„ŠãÉä“ÿ X_°¾`÷z ñË·çÛ waîB¡èð×ê>uÀ2˜•YÁøê¬éYÓ³¦£ó‘è¢#|+:Ps¨âPù¡rƒÙJ¶FgŽÎªfÕ `ïW{¿€Ä}‰û }FûŒ‡æË;@ÉÍÍÍ5Üþ#ãeãez½Óu§ëN×i/àŸ„ !CÈß"i©´TZº³šß2ë\˨eTçýCß‚¾Z‚˵¯±¯€²©eS}ïµµ\–\#‘ÀÃ@_d/2A›Ïæð’†êWýi;Óv¦íŒh€”"¥H)ŸŽP’=Éžd'’ÏÊgå³®Aíƒ_³2g¥º§‹8.Bžh‹ƒ¼ÕÓöOÛGËŽ–ÁŸ„?1¸|[¾ ÀHNONù0n·ôRé‰Ò‘ ¸YÚ,mþgÑ„?ÙG±–ú±)ÔaÊ8Èœ•ÛßÝþ.Óš¥L¿Rt¥ 8h=h¸úôÕ§€ì»ì(;jÐ"ÎäÉÔ’ŽýûõVuu»ºñ’ö„V‹Õbõƒ.¥Â (dP† Ìë½·÷3@¹›J™êîÛçü期{.)(((((€“Ã4ùC—óù‡üCÖTp¾à|Áy6¯è×¢_‹~MŽ`ÞÌ›yûWA+hmt¦½Þ^o¯gGqgq–ä#áÐntÈD&2ÙQEš"M‘Fòù'üþÉ?Î’Q2JFß//ô+ô+ôk¹W¼­x[ñ62$ ABIän¹¸4t 0±ˆ¥UR‘T$I·Ž ÇÄÜ%E E E UýŽ!Çc¨ù¶åË+–W¢÷©KÕ¥êR4F'E'E'‘üYŒ,F,ñYâ³ÄpÏÝûîçÝçÝö¦ì»ü¹ý»yÜ|¼+‚ñÌ‹y1/鲃ì ;‚J¹ .ˆ úþ«‰Ê‰Ê‰Ê@ßfßfßfqoRwRwR7uFvEvEv‘5Š|E¾"|€ðT°À €íØŽí^À x»¿Ýßî5]­]­]­Ìù]øwáß…K{Ÿ½þìõg¯§ª R©‚þ¢wˆ;Ä«JYË`ß!  ñäCÛ‡¶mZÑŠVO¾ž¯çë[/:¬«Ãø×à•Á+ƒW ±voؽa7_¥1kÌ3‚1s0 e¡,ÝçºÏuŸ ïôÝì»Ùw“ÿIî!÷{<º&¤ iBÚŠMXXaüKIMIMIÈ2‡Ì9õ“å°å°åpŠ=!{Bök26flÌØÈßP˜&… œ¨Õ¢ ¼Œ—ñ2(i&ͤ`¿°_Ø/m£m´ wÈr ™$“dÌ—ù2_Pé¤tR: ¨d*™J.údôÉè“t÷#ù#ù#¹°f¨t¨t¨Ôç2S™©Ìü§TÅCÅCÅÃËe¤¨©¨©¨)u‰£ÝÑîh¿Öî5á5á5ÁB²îeÝ˺GÚ5uš:M(3333Ëx/â@‚ ýæÀ€8Ä!@ ànáÀâX‹Hi#m0›¶›¶›¶C:£=£=£e1fO³§Ù“ä1òyÌ_cxÎÂYø¡õNµSíT‰ë×'®G’fX3¬†Ü):E§•þŠþŠþ f‹Ùb6€Ó8Óé%½¤`·ÙmvX°6`- ÉÖdk²a„µÚFmÀØå±Ëc—À¶À¶À6@J¤xi~Ôü¨ù–ĔĔÄ$éêê2™¿ÌÿÐz*„!BÈ¿dy?õ~êýG#‘ÆH#)sÝ6¹xX<,®ä^ɽ’ \¬»Xw±Ðeé²tY€îîîPn)·”[€ÇÅ‹cjXǬcÖ1@ç«óÕù-§ZNµœšÞG JP25“/JX”°(”¹yÜ|¼}Ä>bÁ¹ˆÔˆÔˆTä«ÞT½©zv˜f‡¡Rz+½•ÞÀ¾ø}ñûâiµ´ZZ (D…¨š¦š¦š&`ìÜØ¹±s@Ĉ7€¿¿? fUͪšU€9À`^Íy5çÕœiNrŒ#Ǧfj¦ïqÎãœÇ9XæÇÍ›‡üޑޑŽ£øãcN«i5­ž:¯À—ø_xïá=€Oæ“ùäi@ÃZÃZÃZ 7¢7¢7XŸ²>e}Ê4@@T@T@s$çHÎ Ìf ³Ö5Ö5Ö53"êÖv:Ð1íŸn¡[ègpgH8å´œ–Ó²Kæ¥æ¥æ¥èò„8pàþoä’v%íJÚ$%'%'%OW¯ÎÎά½};úv4Uyh=´ZÛëR¬+ÅnJâj¸®Æ:—Ò³ô,=˵Óãô8=>ø7I/é%ý‡J®’«äÀMÜÄM°îÚܵ¹k3.D·E·E·Á:»vÿìþ¬F5ªLvÀ%\Â¥éí Ü Ü \ dAÈ‚0ÿ®ú]õ» ªk~×ü®ù Á²^Y¯¬ fb&æYF–‘e÷ÿm²Îòþ®6OŒ™ìùC¤””’ÒÙ4žÆÓø½õ“剞j¸Ûp·á®°s4}4}4*RMªI5ÌÐB í `LuQÃÆ0 ]•®JWawK©±¸±¸±XÌÝ7ºotÿ™"D¢¹Pv4ìhØÑO¿G! QH.B=ôÂ*w?ªF?úÑ/ÜCrCê#""JÞPnTnTn¼P<ºutëèVÞT»²veíÊií²ƒì ;»»*ÀlTPA0-Ó2-}‘¾H_„¢ÍÐfh3°×~Öý¬ûYÇ•¨ç©ç©çmŽ*G•£jÿ‘{…÷ ïÌÀ Ì€Ù.?߸A-îJ³¤YÒ,Ìî|Üù¸ó1àÈqä8röQ{«½ÕÞ«»ºº¸’¦·›Þnz›½F²I6ɆBª*¤ 0xÀccl ˆë°aØ0lÀ…æÅÍ‹›c¶zH=¤¤¥ÒRiéþ#“Ò3Ú\RüÌ•žT÷ €¸3æú$Q¸/©«î– ÍhsI,‰%±¯½1ùÉñ}s§s§s§´']J—Ò%º<òxäñÈãH“H¤PÑt]»/ä ùP|úEè¡bØÐ²¡eC˸åbåbåâ’¿0ŽqŒÛû“T&•Ieüg®Ìþͱâââââb˜Ý…kaJC.íæº´û™K»Wh"M¤‰{ë‘ dÐS ÎgƒSØi*7•›Ê¡¢”RJ1æŽD‹µÅÚb•,Æ2c™±ŒëQPP¸×h´Ú|Ú³ºguÏjÀì:§rNÕ[<7ž{@å2ðß.íÖE\ޏq¹ä e–2K™u¡xT;ªÕò¦š‚š‚š1×ÕÑÏîòéòéòÁ¶¶·¶·¶“wTTT)X –‚÷Üâ7ó›ùÍÖ¸˜˜:âò·Ö]¶žçâð#!!!!!‚kÚÅäLÎäd×С…C ñâKâKâK·…ÉÛúÖ©ßVý¶ê·U>—M÷M÷M÷Ù¿w~ÓùMç7bü¸sÜ9îärdËeËeËóüY9+gåÿÕPp}“ïzéw\žç!ø“ñÚ-BšÐ$²zVÏêô´–ÖÒÚBlëlël뤅²2Y™¬ŒÞç2¸ .ã»›¡µ¡µ¡µÉ ½AoГo¥¹Ò\i.ûÊe·Áhù#Š?Ïi×U.ÄBd#Ùü?È6²lû1”5±&Öôþvùó=æÓû\?×ÏõΗŽIǤc;?Øô`ÓƒMÀ$ B\öÜ¥õÏ8þló®„0$Á™IEND®B`‚routino-3.2/web/www/routino/icons/limit-33.2.png 644 233 144 3047 13061246473 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÜIDATHÇÍ–ïOTgÇS™¤ÍèZ™ýÝ€ÊIúÃhú#Ôt«Õj[h,&4K7i”1†8:Ëv‰6ÔF¨K²]±¤M«Ã»ã"ŒŽ™‡Î2sgîóÙÃu&î?àyssžsÎ÷ûÍ}î󽀈ˆd,?Lv“Ý”ËMïÇ×W¿²ú•ܯcù™($íJÚõÏÏ`Ík¾xú˧¿ÔoÆs£nô'΋ÄñùŒuÉøBrgrgÒöåü(ìÎß¿zm,?yRzRz~À½ôtÕýoÈ7ð`ûƒíϺÑoÌx‰ørô1~XùÍÊo’&!yUò*ÈÞ‘½#çp¬á_9ðÆ«o¼ à}Êû”2@ô?@*©j; €3 ¹Q_î7æ <ßà3øcz¬ÅÖb({«ì­”ÖØÀÍ6¨³ÕÙ >­8ÎqR!ˆ¢{¢{º¢®DÄs£nôóžoðü1=ñ­ Šˆ¸Pq«âè3Ú`ä¶–¥eþ³vG»ƒ¶¬Téõ}"·#žˆôú ýñø•yæeJ¿­-j‹h‘IͦÙ@ŸáC…·Â <4ø­ü·ˆH^¤RÔß¼5ü@)¨"UDótЪY5«fÀ‚7nÜ€3æø²šWój8ÊqލbULc1|¥-óüßÇô÷EDÎ\%½êݪw 8}ËÍã}ã}àú“Ëír£®Ý¾ö˵_â„àjr5¹š`Ô3êõÄëú¬>{+±_9n7û”û¤û$jü»±¼±¼8ŸºZe­²¡˜Ñ{DDF=õ=õà±Îyç¼êà3 kž[ó¡Ê½•å•ås?ç~Î}h;Ývºí4defefeBÅÙŠ³gaƒÚ 6(ììì ®®®‡Ôpj85 Ž\dzŽg!ûõÌùÌyB×ÿqÇyÇ©BïþÞý ?Ó³"éoikÓÖnÝ&»Š›‹›E¢¶……¤Öcâ|Áù‚Èo>[ï\ïñ]ð]ð] zƒÞ W¤aSæ†M")æsŠYd²e²e²E$TªUË£˜nnn©µÖZk­" ž_ƒOä·^zñ¥%ùÆïƒ¤Ö­+§*§D›kÌ5[· 3ጰ>Ág>™ù$~ìÿ˜ LAùùòóåçÁ¶`[°-Àõ×7^ßÊ¥\Êe‡Ë—ûûûµŒZF-ü_   A~a~a~!ì컷嘆 ›™=1{8˜Q›Q«OHt§e•e•ê„Pq¨ÚwuîéÜ[÷my~Ëóqà’Æ’Æ’FpÔ8j5à°8,Ž…¦BS¡ ZÊZÊZÊ@CCFdDFÌGÌGÌG ÑÑXÒX‹Õ‚@D‚‚ïSß§ÀXº;Ý­:M¦ÝA-¨ˆôuõu‰¼þÑ›ío¶ó^FazZzš„Ów¤¿œþ²ˆíííH{V{V{–M4Ñ$’æLs¦9E6lØ< ²Ó¾Ó¾Ó.R:Y:Y:)r¹ûr÷ånÉ–lÉéªêz§ë‘Ìîõ'ÖŸðßí?Nÿ8Í{"cž1HôJàãÀÇc#Ë>væ*?W[«­ñSÙ¶ô`éøò÷ûûQѽѽѽñ71GÌ3ø/ú/ú/‚nÑ-ºT¿êWý0W7W7WÁuÁuÁuàÿÞÉ îvݾ;Œº÷שSS§`é`Œ>Ô>Ô€·—O%Wó±•1_Qxäc¯©×ª#Ê©œ òTžÊÕ¡:TG‚_•¨Uä’KnÂǵÄK‰_›ÊQ9X ù†Î2œ·rEå Àsfõmd.2ü%êzãÎOŸó9¨~uI]ÎqŽsÀCXV‹j¨äÇPª/¢E44õSÔµ€j[vþ?W8+œÆ¯)ÑùŸÜå{»xbïcOæ ö? ØeüZIEND®B`‚routino-3.2/web/www/routino/icons/limit-72.png 644 233 144 2342 13061246470 14516 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü—IDATHÇÍ–_HTYÇÓ–ý’H£zbZˆk¶‚- \IjÃXñIÜ2ȃhsÑÂHØ!ÚÝ Á¶°‡ˆ"'gÈeŠaC ZÈIJÁtšüsï¹ç³3gîÝØhÙ'Ï˽¿ßï÷ÜÃïw!„«ÒO®BW¡kEÊv}kûsvçìÞø[ʾ,!kÖþÁ&XyqåE€Ü`nÐznÛ:®óõBØøN>í«„íÈîÎîÎ ¤íf¨ðUøròRöù¸oºo&M8~ëø-€ž«=W©…±ÈX`20ÛÖq¯ë5ž_4Ä/,¾³øNÖ_½${‰P´³h熺T‹ Pº·t/Àè¢ÑEÊrXÆ2$ÐkÂaëx:_×k<¯ù4J€ÕþÕ~!`ßá}‡Ý?§ žÿ ëÖi>ã&ÐJ+ËÀL˜ Y)+™R!²ÈÛÖq¯ë5žÆ×|š?¥GüólüæÌ¦Œ0X.˪On”1¤Kz¥%¿‘²LË”¦õX=VA¨|•æŸfÔŒ‚5«Ö«õ(°ÎZg1˜•÷å}@iü4_†_8yÚÁ=æK|#rDfŽfXUV°×sÀ>8½J*©$ÐL3ÍŽì8Å)Pólb€uÞ:Ÿ©Ýcóiþ”ž´°Ë ætÍif}©š£Áæ}ùÕKßKt t t @°‹ßìÇ弈È{^¨©c Ü ¯¯c!‰'íTY-¿1 BP ªA5`ÛL3 ühÅUFa•¡×è5`xÌú°I6 ð½Åo²GD$ãÄÍÆÍÎþJ…FúFú€ƒø@mP˜ç]šhœ8q‚á2\† ”_ù•IC³ÑQ.°ÀÂ<ƒ 2@ êsúóQÔÇÜH÷H7XüfcÇ„»""'¿$qGÕŽªÅ{øõ˜¯k¿®…£GŽ6mFÝøôÆ¥—ø…õ¶ô¶ô¶À­å·–ßZnãj\«qPy*OåÙøÍ7n6 ¾XÕ“Ø“hó©ðŽý;öƒ9¹“_:Œ{""9•™ÒøÒx‘¼5Z0Z eçO±[Äü³Û7£rU®ÊÑ:µN­ÓÆï­¸·âÞ V²’•"뮬»²îŠÈõ¿]ÿèúG"·OŒïß#ò¯=Cî!·¤ˆhSÚ”õ×õ×µ!‰$‹ˆ ÔÂ¥üKùð'½£¿£_½±ì‚ãEÇ‹s>Èy?ç}HHKHKHƒóÛÏo?¿Ý¾ŸÏçóùÀÈÈÈÆ³Š³Š³Š!à 8NoûK[K[ lüsé†Ò £«ò†~êÌ‘3G,]¨š£[É®½»öƒÇÌ-ùþ·““0Ñ7161†šl<>yòò–lÙLÿLÿL?ëƒõÁz`€`ºqºqºôJ½R¯U¡ÊT*Ñ>Â_”_Y:ö?_õ÷¼ì«¨®¨uÆTfõwÝ­»A‹üù‰0ä>±•ŸDHi¤1ªò Ô5ªFÛ‹Ê¿ËØE˜?è_é_®EåwnrÁŸ+ÿÃû­|h_í{ìá|ÁþÍ>ÔP sYPIEND®B`‚routino-3.2/web/www/routino/icons/limit-11.2.png 644 233 144 2566 13061246472 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü+IDATHÇÍ–]HTiÇŸmÔ4]"C0„n„ꦖ&R´Â(¬°LÛ>`+Œ-Ú`‹M¡VbÉ©V)‚¡¹“YJ!ÜÀeû uq±2?*5éÃ’9­ìÌ™sÞß^ŒgÆ’½Ù+Ÿ›ÃÿùøÿŸó¾ç}Î+ ""ó§žö%ö%ö”¶óÏ-œ[¸ôF_6À¶Õ¶õ¯ õbêE€´ki×Ì'1lÅ­üéõ"1þéz–_æKÌ‘p3á¦mÝ>;òväÍÍŒàó~p6;›ÿÃ>ß>À­ë·®ó-Œuu|\÷qİ·ò­z‹o:¿œùB_wwl/ !>!^² ² rGús`ó¦Í›FâF┌w@2Éj ¡aÙûiØŠOå[õŸÅoéYú‘~2\.ØRº¥Ôy5RðÄDzŽeYzz3PC ÉÖ€Qf”åW~lØ †­¸•oÕ[|¿¥géGú‘Ï÷ö§|´½D6Ôiºt‡îU bE”•aºÌµæZPÕªZU³qÆ‹"eêŸôOèáz–žæx„JFJF€À”~t+5‘e?ƒó™ó™6žç?Ï£€ª)ü)ü‰É˜A‚` ƒÆ ¨fÕ¬š§5ô†7¼‰ATAÎPC €r)“TOñë}}NÍ©is¸égj¥.wÀ㎃j0—[Ä~·ßã÷ †Ò‡R†R˜a~·ßíwÃPúPúPzÌov˜fG ÷8zì=v¸Pwáü…ó¨žßº—u/‹f/Wû3ögÁH?B‹ˆÈãïøÅ{Î{.úž•73¼-Þ‚ŽïGGàÆàÁƒ1!o©·Ô[ ŸÃçð·È[ä-šÙøCã¡ñЀäPr(9ùKóå/‚ìâÅ‹'þÑòòì˳ª|{|{ÀLôc{ʉ”+VÉ~W¯«W„xÛUy——* ™u™îL· 0 Q³MÚ&m“"™—2/e^QŪXË îîî©j¬j¬jihkIú*eUÊ*Iøsgg}g½íªHQCQƒ¡ÄG‰V¬H›—6Ïì…÷£ïGÁpE=k Ö¬†“ 'NÎ\‘ÿŠëÝ£{b¸ku×ê®Õ·2oeÞJØ®x]ñÔ.Ko¼v¼¨œ_5¿Ê쵋2}¦ÏÖ+ÞÞ*"ñ""’a½±ÒUH…D¤_ú¥抨Õ£zDlM¶&[SÌÿ.ð.ð. òØóØóØ#Rà*p¸Dv§ïNÛ&R¨~Cý³ÑÒÓ'ô 9¬²U¶­×.vm½¶¾ûH{[{›ˆäŠˆ°wŠ?”t(ioÒ^G¡£ÐQ8³±Dw¢;Ñ-â¬pV8+DTŽÊQ9"ewËî–Ýi}Úú´õ©ˆdK¶d‹4ío*o*Y|kaíÂZ Ý^Ò>Ü>Ì^‘îîïÕŽv?˜~*O8ܶN¥YgÖAàëÀÎÀNT0!(A™¹•Ü@n ‚§ƒ§ƒ§+\á |Øþaû‡í0¹`rÁäx{ïmëÛVm½?zõºñUÝ«:ø§ÒÒ;¨Ô]Ö©$:ÇÆœcÚè3úŒ¨îF0ËÍòisŒÈûÿ¦rTN”o#|1ÇølŽM›üámqÛ⢟p'™á¾pð£1bŒÌœüdN:PK-µ€Nˆ¨ Ò”l£šj”ú5¬‡utõ»‘d$òLñ×—œ-9 QýØO|Öþ+gííbÖÞÇfç ö_.Úæ´ýL:UIEND®B`‚routino-3.2/web/www/routino/icons/limit-7.1.png 644 233 144 2325 13061246471 14575 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜŠIDATHÇÍ–]H”YÆÿNM£•_1vFÐ íÍ R#©}@IDDAËB°ulÛÇÝX  ººÙPAdÎ’°{ mY²ø±*N¤3ìÒô¾çœß^ÌœyßZbéÎs3<ÿçyæœ9ÿ9""R’ý¬¬epà¸ÏoÈoøê§ ¾¡ oÞþ?Ú øzñu€ÒîÒn=êa›·õþ~߯gãR"^ ÔêÏ‹dñ8¸õàÖü² nCÁ`Áàß.œˆˆܾyû&ßÂÜÈÜÀ»È»xØæm½í·|~~¹ð‰¾ïïçMBhEh…l¨ÛP·ñ»LÁŸaßÞ}{f–Í,3PóÀjV›"…] ¶ùl½í·|–ßêYýŒðŽðh:Ôt¨ +Ó0ÚgÊÏ”[=g¸ÌeVƒ›rSªEµ7qòÈÛ¼­·ý–Ïò[=«Ÿñ#ŸíÕ¤8œœ¡§fؽä^øpüÃquD]QW0*àjWƒùÙ ˜¼5Ã4ÓÔ;ô)} c~tgÝYÐ%ºHfø¡9¿9ß¼ºÓw”""P0W0—ZcjLåx÷€>¢ðO:MÚ‡4Í–WãjÌ ¹enù)ݤ›r|{<=«Ÿñ“5vã8yþäy0mºÊòLl›hœhÄ\ûõZüZºví> =¯z^õ¼‚ñ;ãwÆïø|¶èÝâáx4GabÍΉU¹°1ÃÎ=ç^®«Êê[?YcϾ‡¾Å¾EÐÕæ˜Ýø7ñÊx%T×T×T×@m¢6Q›é’.邇S§NyFL­©5µÐ¿¶mÿZÆ‚±` úvõíêÛåÛÑHz:=m÷Þ³úÖ@Ñ“¢'¦æ¶Ímó†1# Õ‚Zð¢ÑÑÑÐÚÞÚÞÚîr”£Ð1Ó1 „B°®~]ýºzèmïmïõ×7ºen™_Ïêgü”–ê—˜MÌÚ% *̳Æk›ï˜ï˜ï€-/¶¼ØòF‡F‡F‡|_£Á4˜PÛÕvµÝ‹×U×U×UCç¹Îsç|ÆêÜJ·29ý¬Ÿ€ˆ¾«ïæ½qÝF)‘°®ÐËõrÉ­Þý‡{‹”u•u•u‰lŽlŽlŽˆ¸n…[!2yqòâäE]¨ u¡×gž›ç湈ŒÉ˜ŒyqQòZ^çP8§ŸõIER‘ß~<üXDÒ""´Ê)SoêåƒíŒ›¸‰‘¦ª¦ª¦*1¼^ ‹4;ÍN³#’|”|”|äåWFWFWFE‚»ƒ»ƒ»}ƾ6ŦØòÓšÓ·~>½•¸Ù[òÌv‡½“ZYZ‚÷åïËß—{G¢6ÚÀÛηo;A»ÚÕ®—OnJnJn‚t(-iñø¸ïÞrscä³·ò æXg9Ë—¬çÞÇ|ÿ7Ç|“ŸæPsÈîœóÔ˜ Õiu‡6úèÃätþbŠ)0oÌó˜ÎàÜ SC †ÔŒšÁÉŒ^À±üŸüKö¿rɾ.–ì{li¾`ÿŸ—B´ÎvI"IEND®B`‚routino-3.2/web/www/routino/icons/limit-10.9.png 644 233 144 3013 13061246471 14652 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÀIDATHÇÍ–ßOTgÇŸùL¬ñ††,C… ű!/ÀPV&E ¡Í’°-ȦÆVÉšÕ ²Æ]/·f/¨MÌbŠ­‘bŒ)c²Ä´ãB3€ÝY~¬°8˜áÀ˜sÎûÙ‹™33í_à{sòüú~ŸsÞçýžW@DD^?ì¯Ù_³gÇlû‡IFMFç1ûš6ŸÍ÷¯?ÂæîÍÝ[>ßò¹ùSÒ¶âV~j½H?•ÏòË«’t¤÷¥÷Ùªâö8öæ±73¶Åì¿ û¶ûöªÝùèÀ×_|ýðì᳇/ª^TAÒ¶âV¾Uoá¥âË…_ñ‹€kÀ5` BzZzšä¿ÿvÁb Sà}×û.À¬cÖ¡ì`,™dª*@CÃZÏSl+Ï·ê-< ßâ³øcýäTæTŠÀ{ï5º{b?Ý€Oó>ͳø¢·N:É]Ó5ã}ã}ÖA ©!lØ i[q+ߪ·ð,|‹Ïâõ#¿ÜÛ¿V£5D¢‰†FÌʨ+êuZ謈R¥j‡ÚúŒ>­Oƒ:¡N¨$W˜E–2£ú6}Q})šÍõû>4h °çOl¥&"RÜî€; 9a²z²Œ)ÞQ7õú " ŠÝ¼ÁÀ~ö³?¥‘CâPM5ÕI·Š¨ˆŠ¢“NU©*‰ÐçfbdbÀ­¹5͉?ÖOüK]ûÚNµuÀÜmýmèÆÐ ÔÓïž~ûôÛ$a ;Ð膫®«®«.jA-˜œ5̈1“¯Ã“â'ÅOŠáÊ[W^¿ò:êç©ÉîÉîDönõsëŽÖÖÖ^û^yü ï½Ô{)ñž-}9½ƒ½ƒ¬;Ï:?v~ }3}3}3`7›Ç¡4\. CÙƒ²e h½h½hBƒ¡ÁÐ`²¡±¦±¦±&ð„=aO*+¼^Øý›ÒáÒaÖ5cÈR-p«áV¨æX?v±gŸÉ>³§\Z+Ç+ÇEH±õÈÿ››%}kñÖ=[÷ˆdådådåˆ lØ>°]$ýQú£ôG"þ*•¿J$k6k6kV¤Wÿ®þ]’XÇ/_É-Ê-Ê-¹9Ò?Ò/’–•±7c¯¤óÛ›—o^¶õˆxŸ{Ÿ‹¨ï^ ¾ÜSn—ZÇgŽÏ(quº:ET…ˆˆ„ŽÚU«)™)™-™Y^^QcjL‰dŽfŽfŽ&Èd²"¾ ߆/鯭©­©­Ym^m^m©óÔyê<"?þÎÁAÄÕáúÁõƒ„Dœ£ÎQþí(u”RbeÞ1ïØÆEtŸî‘4ɱ€yÎ"‹"Q#jD ‘|¾?ß/²P¸P¸P(2W>W>W.266&Rè+ôúDVŒcʼnD "";½;½;½"¿:xëà-‘­ç·|°åÏ”çŒçŒäˆ¬Ž­Ž‰Øk‰µÇ‡ÿñ'Ðî ƒÑ›±øˆ¬{ßò–xKàº÷º÷º79;Mw›î6Ý…Mí›Ú7µÃÙ¹³sgç`éðÒá¥Ã°orßä¾Iö{‚=PŸ_Ÿ_Ÿy¹y™y™pjädëÉVÖ­™æÃÞ£½G®X?©§ò\Û9àëTš—Í˰¼ùÈòÔºsÍ\3SN]—ÙevAh<4Õ¬šU3¨ê€:¡úP}¨¸Ç=îÁFýFÝFÌÿw~e~¥~Ô³ô,à¡Å×vºí4±N% {æ~¦9a˜0üï5ÍÆ;I`j¦f¦ÈƒjQ-ªh§ö}ÛKe šÔyuÀœ3爨’8þŸ'–'–Ü îÍÉÜ/t,Eùõ#Ž#ޤò³MŸÐ'€sFÐ&•ŸÛ|É— «Q5 Üç>÷ÕØ¿RýGM©)`#žɘ2¦ˆª‡ú¼>üÓRþ8_ô×Êÿòþ+_ÚÛÅK{{9o°ÿž Îß¼ 8IEND®B`‚routino-3.2/web/www/routino/icons/limit-92.png 644 233 144 2424 13061246470 14521 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÉIDATHÇÍ–mHTYǯ¦©ÐX͇B³4È"!¤¢Œ­,¡-,$Y™‹ì‡mh¢tiw“Âi {e%ÚÕÝ$g£a ½ÛËLвR’6âL6­o÷Ü{~ûaæÎ½»ôòÕù2à8Ç™"*¢Z…VÁ$È{òI$iq#ߨ7ð |ƒÏàéQþÛÛS_ÀîôÝé€P¢jwµ»z^‡ª«2Oæ!EX„D¤SVËêÄŽ¡õ€ñRô‰>Ð'ä"¹ ºG÷ 2¡uj|ƒ/Á¯Xåÿ¡ŒP4ú´> `;è§ôSŒIÁR–ßq˜Ã¦i¤ä¹AnZh¡Åÿž#9Å–è'õ“Œ™øq¾LO\Øùûà¬uÖ&Ö½’ˆ€ƒ•¬Œ­ ÈäÙü3ùgò¡¿¿¿¿¿ßÔñìù³çÏžƒ·ÑÛèm„ÀíÀíÀm3.ÿåc$BDDÄ—àé‰ ûó[hmM”WIE½ª^eÒðt×u×u×AÞÛ¼·yoaõèêÑÕ£°nñºÅëíC·Ý:öÓöÓöÓ°idÓȦÈ)Í)Í)…§kŸ®}ºÖÒòÇjZcàË*“?¦GL¦_¶AhUh•Y¨‰4‘fÚ—ë/×_®‡5¶5¶56ӿŶŶÅ%Y%Y%Yàö{‡ÍøòÊå•Ë+¡ÙÝìnv[ð¿á°´<ÁÓ£€Ýf·éÝ ™×^~£ïÓ÷™e¯^¼€W«ÀÅ ‹/„”pJ8% ׺®u]낞ë=×{®Ã2÷2÷27IJBVÈ ‹ŽY.Ë­cÆàéùèŽÉr=[Ï6í¾ñ¾ñ¾q(›*›*›‚¾¾>È­Í­Í­…&g“³É ŽGƒ£<ƒžAÏ ¼w¾w¾w‚P…*T‹° ¼(/~rÇ>|Ƙ!ZD‹yÆ¢®¨+ê‚âõÅë‹×ÃüÊù•ó+Áô=A¸Ðq¡ãB¤ÎM›: ÷î)Ü™ 2d._ÄñELÚïSÛ§¶òŒ}äVƒ±ƒ'<1oådïdïd/ ß¾3|xÁ ^ÀxÓxÓxŒlÙ6² †üCþ!?¼¹ôæÒ›K0ñÃÄщ£fCøUœç>{+?0Ç&9£7è ŒQHU ÷ÉRYjiù ¹B®ê©§ÞÒ@ÄÖbî;€¾_ߟbŸŸc˜ü¨š_óè.Ý…Ê´ÓŽ”÷e§ì^ñ’—€7n¿ÉVÙ ²K>@¶É  "ñjï´w¨ õj½€ÇÿøäŸ¶ßÊiûº˜¶ï±éù‚ýÃ7©…ÔäIEND®B`‚routino-3.2/web/www/routino/icons/limit-198.png 644 233 144 2737 13061246471 14620 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü”IDATHÇÍV]HTi~fÆŸ™Ele4’ÔÄ5Ö5Mû£5m³04%7I(wš`w¯ ¼èŸ6,¬ 覲ڜ Ù~, *B-3¥ÔÀV°ÍÊ’¦4¦œFgÏ÷ó>ç øzê Ò˜hL4Flã/ºß¼Ú¼ú›†€}J% %†’¾äŒ3NdÌÙ˜³Z¿n˸Ì­ôþ¡xÒ¯¡;"# ¹Sö>²,³,Ó°ëÚHËeËeŸ´]µ]%ÉKç.ã¯ä›ûo+וKê¶ŒË|Y/û…öǾÿàdxsx³ásVÍY•ò{ ៲hmÑZ’|mzmF’$Õ’QŒ¹$ÝtS®Ñ[Ƨòe½ì'ûK<‰à2vEì €,./.·œ ôÿInOØž ñ”Ë$ð£H¿Ûï&IµB­ m¢$i Ôm—ù²^ö“ý%žÄðÁçïöðOd©¹ÔLrŒ$•vR›¡Í µå¼ržŠØ)ÂA!)kïµQm”ôúGý£¤° ›°OÚS.Â)ü/'—L.¡""*Á¨ÒNßzÿz?I!ñJ(í5˰eØFhZ°²@T–)Ë8..Š^Ñ« —p É=ÜÃ=ºŸGy”GI‘'òDI/ðBHü°–¥eqœÖ@òiâÓD’–ç–çî0ÉgŠØ©»¤}—}WpŸß‹Våºr]çÑöGÛ®¶]ä`Ú`Ú`šŽóxäñÈãòxêñÔã©ä³—Ï^>{©Ç{l=¶Y÷¸®«®‹|òÓuOÖé'.nð8i¯±×ÈW{êî±îjv9n9n‘(ÃÔç å ’0™Š8yžäz/~än67˜6˜€ÌäÌäÌdà­á­á­((-(-(<•žJO%(ÿPþ! »¸»¸»pïpïpï¬)Ök PŸZŸZŸ ¸>ºÜ.7`½fí·öëx†³ÅÅ€äh×´k†¿!ü…þB¤Ãˆô áx…WÁBˆa1,†ãããÀ›èMô&é{Ó÷¦ïŠ…b¡œIÎ$gЙՙՙl[ºmé¶¥@mLmLm >š>’><ª|4÷Ñ\`2Ä ûäÉ€iŠpçºs{»`lmim‘4X…t.Â1)=Q3£fFÍPˆB1õ1õ1õÀXÍXÍX pòÃÉ'?%óKæ—̺6wmîÚ 4W5W5WÖ5Ö5Ö5À"ã¢ÉE“ÀÏŸÊzËzeV™Þµ;Ú@ÏÿM%›ý¿CŸÊ±åcÙcÙ¤÷¶÷¶÷¶>u¾#¾#¾#¤SsjNûÅ~±_{'¼Þ òòîÓ»O¤øV¬+)HÕ¦ÚH¾˜Â â6•iÇHËËw9 ¨ºŽ‘Ú&mÇåüW6³™MŠb£Ø¢oÕ¢ZT“Z‹Ö¢µâ¡hí!ñ¯üv¿ãü.¨ciOÓHz¿¨c_P~E*¿:¨’ŒSkÔ*ÜIC”Ÿ{¸›»IÑ!:DÉì`GÈ*YËZ Ѧ¦ª©TxUÝ®nQ~µ4¬4LžÔgÊ?mÿ•Óöv1mïcÓóû/ð•1ÆK“IEND®B`‚routino-3.2/web/www/routino/icons/waypoint-right.png 644 233 144 231 12302414107 16101 0‰PNG  IHDR Vu\çbKGDÿÿÿ ½§“NIDAT(Ïc` üg``Xÿÿÿ|] Ï$UÆgØ4âÓ€ÕFb5Àp ÃO¬ ¸œôJ¿DWˆKÃKBñAQÄ  m¥‹f¤@ñIEND®B`‚routino-3.2/web/www/routino/icons/limit-33.9.png 644 233 144 3055 13061246473 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜâIDATHÇÍ–íOTgÆoF^œªÝ¾ ¡"Æb•DmJÒ@ÀÕn«A *«Y Ûâ‡Õ/ÝJv“¦KŒ‘HÑ7Dk£»@!Å6ÛÔ´Õìbg²‰ˆa!˜€°ÐŒËK;Ìtd˜3çùí‡áxˆÏ—“ë~¹®;ç9ÏuY½ô°¤ZR-ÏE±åm3¾rïʽ™â‹ˆ9spà}XuaÕ€ç?yþý¾‰¼Q¿¼_Ää_®gÄeµ˜„Ž„Ž˜‚%ü!Ê9”³29ŠÿÒ Ö.k×ϼóÅ;_|þéçŸò;˜ðLx<*y£Þè7ø–óˇOé‹@ÜWq_ÅŒAB|B¼¤ïIß“q2Zð ¼~àuï ï e€È€‡*üø1ÖÌ2lä—ê~ƒÏà7ô ýè<IùIù"P|¤øˆõr´áþ5xÏùžÓÐ w§94¿æˆ%ª[uC ˜ØÈõF¿Ágðz†~ts+ƒ""®"(*} ìÖFÃiá4Ðï„ÇÃã„—&Uú¼>£Ï€6ªh# ÷é}zæú™Ÿøé RzXKÖ’ ksá”p ¨ßFù¡Ô_êæ }c+ÿ+"’ÝV¿Õï¥vÈ=äþ À¯@½¬^&H+í´ƒjVͪ˜fšéeƒ4ÒH#`Ã†Í «€ ¨ð'Ns@å«|‚T,ñï]Ò3ôÿG˜¹x›çªßª~Ë Ó·ßßÓÿeÿ—à:ïjt5¢îŽÞ¾;l nÜ6¸ \M®&WôŽôŽôŽ,H”(1qvv6œßy~ÓùM¨ÑÆ/˜zj´:«:ËØÚ‹·Eïéý=tÕvÕÂHÒœwΫª~Q·ê…U/*;VVRV“““píܵs×ÎAÚ†´ i ôJé•Ò+°^­WëxÖyÖyÖ™ X,Èôeú2}w$ï@ÞؾñÅï_üžÐþHw¤[UAgig)¨Šè<±1m‰É‰É;vËÁüæüf‘ˆÓ÷­ïۘ˖ú¬ú,‘5ﯭ_[/2Ñ9Ñ9Ñ)ô½A¯HÝ–º-u[D¬6«ÍjkkkYX³°faÈG3§fN™Ç>ðØÿƒÿ(i-i-i§ÏésúàÞÆ{ïmåR.å‚â“Å'‹OBjejej%ôÔöÔöÔšol¼y¼y¼rjrjrj`_ƾŒ}‰««×ÛSÛS™ݪ[AÓí‰v}P"¿´ÇÛãU„òCùð·ƒG;ŽÂŽßlß´}“)Px¶ðláY(:Qt¢èÙ‹ìEv3ŸkɵäZ e¾e¾eBgBgBg` | | »»»¡á^CoC/¬u¤ô§ôƒ§¡çãžæGçGAßãˆsÄ©Q—Œoì³ÙÏfaþ&€ª*øèÕÜWs %%¾’ø T*˜j˜j˜j€ÂK…— /£ÎQ稃ʛ•7+o‚7Ë›åÍ‚]}»úvõÁXÞXÞXìOߟ¾?œ)N‡Ó§ÜïV¿[Mhé¨Tñvë›­oMÑyÄ8Ü9žt<É<%Úî…G `úßÓ7¦o "Ç"Ç"ÇÌ7¤Ù4›fƒéëÓ×§¯ƒn×íºÔ‚ZP 0›9›9› Üâ·`qÿâk‹¯Áäÿ&“”êÓµDÀÕƒã5Çk ê§o ·Ÿò±¸¨¯¨?>ñ±7ÔÕT½ª•­²U6¨vÕ®Ú—ÙC¡*T…€'N3ÎKle+¨_«ZU  ?ÔT[—øÏ ÍÍX§¬SþX>f8Èp޲زX >êÌêmN›þñF¼¦óSÇ|ê†úZ} \å*WÇ ‚WÃjX\ªoˆ<ˆ< ¬<Ú¤6 Ü1œ¿lEÙ ü´ó?»ÿÊgövñÌÞÇžÍìÿWüSh_ˆIEND®B`‚routino-3.2/web/www/routino/icons/limit-19.png 644 233 144 2371 13061246467 14527 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü®IDATHÇÍ–_hSgÆß¤¶i±ºÛÜØ¢dˆ5N­Hã¨È,]§TüEªÙÜ¤Èæ…LñO­(“® ³¯ª…:Ñ@­/,m©™Ó1t,0,ÔQwai qÕkbÏù¾ß.’“só²ç"áyÿ<Ïs¾ï=Ÿ€ˆˆeþÜåîr÷Ü4vaÇó×ç¯ÿ‡4¾h‚k›kÛïGá½ö÷ÚŠ/_RÃ6¶òV½³_ÄæwêYq);à yB®š ní˶/Ë/MãoÃPp£àÆ+öÞÜ{ »³»“/aüþø}€ÉšÉ°±•·ê­~‹ÏÉ/-ÿÐÜÛ¹·]‚'Ï“' êÔùö§ þðÁæ›7<Ëy–£Ý`N…ê Aë‰9°•ÏÔ[ýŸÅoéYúi?%ëJÖ‰ÀÖÆ­é†á.8Xv°ÌÒ›¾œæ4…`$Œ€¹ËÜE tX‡pá«Þê·ø,~KÏÒOû‘·÷¶íchÈoÈÏú Ì{æ= ®TÓ™„V©jU ú¨>¢dW õ\ÅT Œ¿Œ¨ý•¾ / ASç˜fÊì3ûœü–ž¥/NCßAÁxÁxbŒ˜#& ¨µ[ífÊ¢2GÍasô}E_± éI=©'fši¶ã|ÊvŸp€ªEµ0EÊâÏèeõÓ~2Æ.þMÇšŽe߻ұZßÕ}ºÏÖ Ÿ Ÿ Ÿ‚ÑŠÑŠÑ ;™ˆLD&à|ÕùªóU0údôÉèÇ <ÔQE¿Í¯*mý´ŸŒ±_¿†«/¯¾Ì¶ïágsŸ¹ßÓJ«Mò†¼!/äÜʹ•s zê{ê{ê!z&z&z®\¸ráJXÓ¸¦qM#T.®\\¹bþ˜?æw|`4M™uCï±õÓ~æÍÒ!_5¾Ê±ú¤>é òhö@H…TH·ÕÛêm…;×î\»s º_t¿è~UÁª`UÐî ,,,‡ŽžŽžŽ;n~fTŽ•¶õÓ~ŠçÏQ!6s{=¡'DufYgãÚPm¨6×;¯w^‡dm²6Y Kú—ô/é‡ ¾ ¾ >ÈkËkËkƒ®ù]ó»æ;ùŒÆ §ž¥Ÿö3KDõª^×cc‹±Eü"òHI‰h‘qK©”ŠH®äJ®d=¦Çô˜ˆ{Ð=èI–'Ë“å"þþþ"«‡W¯‰”DJ"%"¾Aß oÐîw­pÍvÍÎÂ’Œ¾X~Ü"‰šDÍo¿ˆÜ¼›mäsqë§ú©¼‘×òZD–ÊRYjz ½…^Ù$›d“HñåâËÅ—Eâ‡â‡â‡DÚËÚËÚËD‚Áà€Hu :P‘ÝÒ "îežÌ“7Y½¬~ÆÏ»žJnÓM·½ñµñµñµìOö'ûíxêlêlê,DUTE舎èð€!†|ÓÆsãùÿžÊ™cdçXPí9¤He~SŽh€Ð;õN½Óqh>Ћô"àzéP‡Õa¦0Þi޽ÃäŸVA´'?¥QåŽÉO3Ç9úAæÓôW¼BƒÚ¯ö3i†Í°“ÿ?'ÿŒýVÎØÛÅŒ½ÍÌìßÀ!*Ï9ŽóIEND®B`‚routino-3.2/web/www/routino/icons/limit-6.6.png 644 233 144 2455 13061246471 14605 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜâIDATHÇÍ–_HTiÆŸsçŒNGƒ°&Ú­]Y%j!5”ÖÊ‚‹’@"2CjéÂòÒ. ‚`Ý‹%0ˆÌþ"›cQ¡ÕJ »%Û0d"æIZq\gÎ9ß³s¾9Çݺ÷Ü ï÷=ïó{8‡ï$`™ù Ò¹Ò¹Ò¹$];­ue»²ýëëéú‚N:v;vµ’KÏ/=O’Þ7d¼±j¹/õö~Àò·óä:–ÁZpu¹ºUf}š¬[_·^ÉO×??!ÝÝîî<Òs¤‡$owÜîàOäxÿx?INUMU‘V-÷¥^öK?»?Nÿ‡Ù÷²ï9FH×W®¯Ò_í¯^s<-ˆ¯!»»Hr,k,K8I’Ô?ôÐ#ªHNsšò™´ÕrßÔË~é'ý%OòÓy@ú*}•Y»¿v¿ûrºáÍU²¥°¥PòRÝ$Ïò,=¤6­M“¤^¯×sŽOÄ’¤ƒÒªå¾ÔË~é'ý%OòÓy0ÿÛ¶ýHîuíu‘ü›$S¿“:u’¢Aë×ú™Ò"Ú¬6KaÆœ1Gë™à'¬RÄÒÒkµƒL‘ú”>ErÖô&/Ç=Ðw¿’îq÷øô"þ›‰ÍdüwòýŒ~† ¡r9—Û‚„f˜dØ`[_ÅU\E U¨B§Ë·$é/ôLdü“±ÙØ,™á›yÌ`ž’M§šNI£D\Mµ§Ú­0Þ1¼ƒl»ßv¿í>9¸opßà>‹kœ0N'¬z88ÎÓƒ–ŸLõ¥úÈtD£Äâ§ó˜Á"'ÉŸn|"Å’òÌM•L­›ZG–õ–õ–õ’5ïjÞÕ¼#Ë?–,ÿHŽ\¹4rÉ ¤v¨jÇgôj¹Z®’ï»ß_{-#ŸÇ$/Í—yœÀ’Þ%½¥?•[+·¢—Í/ízÐøàøƒã@¼)Þo|%¾_ Pá­ðVxo¡·Ð[ˆÌóPy¨"82h°†Z k´&5¬]5Ú’( 3A4e@p˜{ç|÷æÜ¹3Ûj6»¿.çþ^Ÿ9¿ïœ3MØ 0qi¨=Ôjžû^D…4†4†4f¥Èª¬Êê­ã”DI”L¸Y9É$“Ì×@àš•óxžÏëñúýÄ¥È}ûXýpõÃÕ¼´¼´¼4ÿšûy<Ïçõx}Þïå<$þ!pýÆQqX‡I|‡âŠãŠãŠÕj®×\¯¹Î"\O\O\OH a#Á'œpÚÚççñ<Ÿ×ãõû½qôå|dš$öˆ=bó/v-íZÚ5å÷]ž.O—]ðK` ,ŠZ¢–¨%€ºH]¤.T‹jQ-ºµÏÏãy>¯ÇëkÀýM“44¡^¨ê‰äòù@Ýmž`.7—›Ë‹ö1³2+\JbSls²^Ö `\½¬^VÎÊxhãìGö#ÀœJˆ(uîwÀ>f1,.f.7ï7ïW,¼?çá|dè6tºÿ¸„˜JM¥¦R6Ë1àp à™¯ŽK=¤Vë\ÞZo-à.àŒe³l`lð#M˜zH WÂýÕÎPg(ž™JM{L{Ø,ΣñÉ[ä-ò–¶ÜQUTUTUÄ6ú Œ*õÊ å„®ƒ›mf›õ-[æ´ÌG¤#ò—€û*ú* vrídîæÝÍ»@MQS¥^}_}_ ­*ªZWµŽmÔv6€Xô‚èÑ P>˜5˜5˜¥%*ˆG:Ò¸ÔµF`ÛmÛ Lœ`›f›¦÷ß}|÷1ÌL𙓔IŠ.޵ʸÊ >àS)ƒYOzžôœ‡óqЃ+¯<¼Ò?ÚQµKe*ÐïÍõæêkÝɹ“ÓžO{®=3vfL—õEÖÝ›Ý ¬‰5@ë’Ö%0ó§™?èw¤;Òµ+x”óp>(šònåÝʻ嗺\Y¨,Ôç5ü¼¾úõÕ°núºéöCØpzðô >Þxßxæ^š{ Âï„߀؟c€3‘g" ûþÅÓçéó÷Ï[œ·8o±vn7ñ-L©L©L©Dç a¬a¬ÀyædN0ü‰Ë½ ³ ²‡³‡Àmv›õ;zþÝóïêAC›B› öƒØàTÏ©Èy+ç-nñCñC·º6wmX"€ñì´©iSÓ¦¢“ó‘h-¢ÅÓǯº“ÛŽ/ÒI ì^ǽ0€;éQÒ#xçÐ;‡ô ³¥Ù4ìjØ‘ÞH/T‡T‡¨ðþà} JªÔsµÇjùû]©¸Üv¹MÛÉMB¢($zúDa@öžðªÞ÷;·÷½íý­3ÿqããFŠ^¼vóµ›4Œå«Ö®ZKD¡3’g$ÆÛÆÛˆˆ ß¾#"R&+“‰ˆb›c›‰ˆR‘ "¢æ+ÍWtwŠçë÷¾~ˆr(„Bˆ¤ü„) Sh|l±íéö…Û²T_ôßÄ>±Oì;BQ™Q™Q™DòUùª|ÕÖ£øyæds²ºƒT¯•Õ²Z¸açŸ}¤{¤;à[ŸbKÑþ®"6FlàòÅ=›xz¿Ü™¹3Ó?êâ›EGŠŽxGyiƒ´AÚp/bÞOwÌh˜g˜ç<Á¬%Ölk6ËÐ&7Õý¹ûs0À½Ç½€ëlÆÙ èŒëŒÃš»{M÷8uãÔ @-ºÑv£Í?ê³ÃgŸŸ}Žlí -ËIJYB¬+ÄΫ ”þ©]©k…µÂÚåÕ‚M° 6®ïf{«½ÕÞêßOu‡ºÃ¿ßÜxЧº5c›Ø&ÀAXÛÅvi^Wíá퇷ø0ÓIÓIe‹¶“û¤O¥O­f ÍB²È&?k:¥Sº¼ê©žê‰¤~©_êÿèíj­65UŒŽOŸ9>ó7dž½ž½Àl̦ûÞŽúžvo‡·`ùžOÜ<±àë Ö«;´hD”íûc¶ÆlÙJ$šE³hÎùèŠ8f¤ï™/uJR§pqÖÎY;gí$2Š ÅöýšvÓÍéæt½v½V¯nØa‡ÀÓÀUg«³ÕÙ~-V&W&W&³ í.7ŒcÏ ß¯¥°ÀI -A£'!hù}àÚfH4$çtÚ-±–è´kTŒŠÑäíõöz{ýZlG;Ú{x{x{x;ËÕ4%F‰QköIñX_(½ü…T¤ÝÜWiWiUZ•V¿rÇbÆbÆb€ùC󇿩ojZl¤†#©\j>éN¦W˜?€ø5íV˜*LŠÑasØ6n¸áÆ'µ^´^´^ô;rµ\-W·ûþ% ¿Ô×÷ž"^l~4~4~”Hj“Ú¤6á²/1?hrÿ73jeR&eÊ·ÝŸ‰Ld"„¡Ehyô›‰÷¿³M¦+¨î+Gýo¯Q©Qš ]}IEND®B`‚routino-3.2/web/www/routino/icons/marker-35-red.png 644 233 144 4215 13061246466 15436 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜBIDATXí—LTWÇï}ï@EI (Ãn,ê®@¡ºêR„AC§¤b3þ¨Ø@µÆõgÇjJÃnð b$U;.¶[:Ì(êšî*Aã6v´ e×`b–¢ØZQ~ 80ÌûñÝ?˜ûÞ›IV³Ù=ÿÌœwî9çóîýÞ{g·É$ĸìg„3ÂIŸDOhžÐ<¡yñA$AjûÉ $+5D ˜„úJ ÏòY=V?´—Ê£çÛJ¶’­œ#4ÿk¡Yhš}tÝF·© 1±ƒ±ƒ±ƒøkñÝâ»Åwå÷—ß_~°äXr,9šÏâl<ËgõX}ÖïÙ<„[êO? qCÜPw›¡Ä²Ä²Ä2éýã×_?~]yÁûÄûÄû<|Æ0†t£Ý€êãl<ËgõXýÐ~Ó<›'r=\×Óý7V çjÎÕœ«âïÜwÀ€ASÒ”4% ¢T!UH€4Gš#Í$³d–Ì:?gãY>«Çê«À!ýU4ê ê DØ'ìö5´³Si¯i¯hVÁ>P²”,xÅ¿Óï”îÀÀcòBy!à|@V3¾V¾0&J¢(Ýb¶˜ ˆ £öQ; | Ï—çÃËF›jLå¦rÑÌú3ÆG ÷ ÷ ÷^û-`Üc¬4V*ɞǞÏ‚u¼Ò@ šyñ3~ÖùPÖ)ëWppg2d^ˆÚ|Òù‘üH«æyìió´aÀ¸ÇXm¬V’Ê'l6 ›]ûXàXé±Òc¥Ê†`ŸèûÄ>PÞSÞà¿4vi Nl:± ¾­ü¶PŒb=xÏ…ž ð%ý’€ã¡ã!¿=ßžgãÏÆ¢cDÔ$ß±Ò£âQQÙ ÎlQzcScScSQÓ·¸ïå¾—}胈$öÎ;cwÆãû^Œ{1NïﺳëŽô“ŸlÔÇ#³"³t¾w2?™4°w`¯š$ö-~’ñ$`<Œî_zpéÁ¥µ7“ضé®®ò&y¬9°Fôqîǹz fË.;YO³ž€¯ÆWo=¾ÊÊz‹b$·žçã? ÑÑÑ„W„+Â{zà[òŽä‘¶³ú²u{Äöøá û¸ÜFˆ²DYàÝÏßý\?Ó'*NèfÚËoà7÷åO­]Ö.íuËn•¾RúŠìS×óëùõÿ\9îG±]Ï,ñ¨!ÝbHé®g Ö kœ5NÉSWnʵîkÝP€ú-õ[x]o»ÞÙ+ëøéxýíîv7Ô®? H¥í)í)Úü65îoÜ×Õ+´Š«âªFÓ©t*:ûx ÿwõJ]C—Ñeù6j§-´…iEÞälmü¾ñ{8Uín9N¿²VY HBE)SÊ´°’§¬RV©®·Ç~ÿÁý@R¤±ÉØ$nVg²’ÿÿÐjRÑÌÄLÌ‚QcÍ%¹$W¨$â Bø^þïý¿¨W«Í8Í8MŒñìrº µ†Jž¸B\hA‹N»>xàà”_’_”•ð³ÄÕ7W´ú#i»z ýB¿sw–„- [áLœ‰3ÑÓAºR†ù‹àçJ¾‹ïâ»èùäÉ;’wb(3”Êœ»UíæšrM¹zíÊVÙ ?œp  ýÐý&fI³¤Yšëæ×ͯ›?¾5  1†CLÏhð×RdèJÓ‹aKOh˜{-Ô7FÒ é†tÏiv+¬:íÆˆ1bŒ$?”Ê5-v¢€3ª3ª3ªS)V5ÍEsÑoý1LŠGÃø"ȳðu:í®¡kò‹©Ú©]¯]g«³UÓ®Ø*¶Š­šrGFF€”Á”Á”Ai¦ªÅSü)þÔáL&µ ôÂ'‘ç˜6€дÛË÷ê´[k¬5ÖŠ1»Çî±ðÃ?©õ¼õ¼õ¼vì6Á&Ø:ƒI¢n„õ >'/<0ÜXÂ[AížûOÚ]T´¨hQ‘¦]g¦3Ó™‰?Çu%h -¡%ùå¡m¸þ°¾”ü—ö<ífóU|_Õ=‡—ì)ÙS²G9”6–6–6&þC]ê^¾—ïµ&’Ò@HðØá=aý"ÈÿháÚÝê/ú]K×ÒµYB–%òo¸iÜ4n@ %”\º–äKò%ùá]¼‹wÑ–`âʰ•û¿YŒú­€¡=4¼«”S8…Sz‘^¤ürüù gØÊ¸Ãê>w©ÿ ‘åÏJÄBIEND®B`‚routino-3.2/web/www/routino/icons/limit-10.png 644 233 144 2367 13061246467 14523 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܬIDATHÇÍ–Mh”W†ß3Î’hdŒJÄ FF%!‹Í`U¨P)ˆ.ÒŠ)–T J\èÂD¢HŠ U(þÌÆ…š4•J[B­ŒACÕ‡&g¾{Ÿ.f¾K‹.ý6Ã9÷œ÷y¹w¾ó]$ifñWžž®(Äá¯ü|l]lÝ'?Ⳅ6…6ýÑ3Úg´Tž¯/±»^¬wû]=Wßå¹ü‚A¼1Þ(ÁÆ/6~Qz®Ððð"쟷žËË]ŽqŒ2Ègòg»³,ØnÛ @ˆø±»îÖ»ý®ž«ïò\~ÁÞ=Û>ƒ-±-1ÏÐÏàô8=À³Ål!W\°¦Ñ¬0+À~gØÞŽa—Ú„M@>ÊýÆvØ,˜“æ$9&œ[έ ¾Ësù ª9¥ÏKŸgJ`ÀpÀç`všL¸RÎcç¡óìe{Ù^ö QK-µ@ 4òkYÅ* ‰C0GÍQ&xëêy¿à§hììO°ûðîîš© €µ]ö–½åóºÏtŸé>C]C]C]~þQû£öGíp:r:r:Ùá̰¯ƒ¶y›Ç¾«oj}~ÁOÑØ¯ßÂ¥ñKã^{3½ÎgYNs‚¾pgUgUg”,9Xr:ÓéÎ4˜ÓbZ`éøÒñ¥ã°üÎò;ËïÀâìâìâ,Œ¥ÆRc©€ÁÁ|[¾¬Çóø?a©ânÅݺO¥ÆÕ«‹ç«Ð9M„ç†ç*ª½: 1bÄ$½Ð ½fÕ̪™U#•ÇËãåq)5'5'5GŠöF{£½R²?ÙŸ”ÊÊʤ›ñ›ñ›qy½¨>õ)êñ<~ÁOXšÖ4­‰„¹¹îõ½Òjµ¨% ´Ò®´+¥­á­á­a)‘N¤iiªgªgªG²ìû@*»_v¿ì¾ßW‘®HW¤¥I3i&Ÿ×/z­×žÇ/ø K憹úSÊoÈoð ã²Ð@@(¢ˆ"~ÈK^òRÊ99'çHÕýÕýÕýÒè¢ÑE£‹¤‘æ‘æ‘féiýÓú§õRÍñšã5ÇýþP44 ð<~ÁOXÊ$3Éßû¤®Û]·=ì— Û'ö‰ÞJšÔ¤¤„Jv¢·¢·¢Wšê˜ê˜êêëë¥úÊúÊúJiIlIlILÚ\µ¹js•Ô˜jL5¦üþðZ-нõx¿èçCßJR\áŠÿç}Óð¦áMdK²%Ù?oN™Sæ¼{5öj ̨5£€Ã€SÔËå_ç_¿÷­ü9†7Çv˜þ²d9oÜ´ÒJ+˜ŒÉ˜àxh¶Ûív •sœ0GÌ&нï›c0ùsf‡ÙáO~f3“™ÀaÚh ¼ZØYû›í³}@ŠÇ<Æ‚Ùgö‘Ãqºœ® þÿNþö[ùÑÞ.>ÚûXáÆø±Ý`ÿ™[F×ÖIEND®B`‚routino-3.2/web/www/routino/icons/marker-56-grey.png 644 233 144 6326 13061246466 15642 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ‹IDATXÃ…—PS×¶Ç¿ûää·%  P©–ÈåU„+ZZ¨#­Õúk¨?ëH/Rzz;àhƒ`[µåª}>[+>Áû2Ó¢r¯x‹P~µ‚¨Ä$'g¿?HðMg:]ÿœÙçì³Öç¬ý={­MÔjµZ­†'¦Í<}abÙ~¶Ÿí§:õêÔ?P¿üÇùó¯£^Ô‹zÿ+çÏùsþ‘Ø46MC¡å('¹E(Bt£Ý>Àø€ooo ¹ì#öû¨µœ˜ˆ‰˜rÊò|ó|ó|¯uì.Ø]°›Œp\ HÖMsð·\\žÌ ` bÃ\àóù|>Ÿ¿eŸ°OØ'æ.Ï׿kóµí#öûHýëRëRëÒȿˋåÅòbÔE&F&F&’Ü(a”0J,Ÿ½|öòÙ€{ì~îžï~ßíoÆ¿+ž;¾›ÇÍǺ2ø:õ ÔƒßAö‘}d_`± P(¼qf¢b¢b¢âÕÙsêçÔÏ©wf'v'v'v3ŽðŽðŽðò–8Wœ+Î…p ƒVX¼÷ñ>€—ñ2^†Õ` °à­ŽÆŽÆŽFê¸z=ôz(Ÿ=¶flÍØší_Ëe²À•ç>ç>羄bšBShJÿæurhêÐÔ¡)hDcÀK¬†Õ°šÆKöIû¤}òÕ$å›Ê7•or1[>ÚòÑ–Ø žO‹§JxÃÞàh0 ¦Á`ñðÀ,ÌÂ,ãÇ8€„  =¤‡ô€Ã(F1 Öìaö0{ ¯údõÉê“ÜŽ¾›}7ûn²M"©H*’\å6p¸ o$ã ¼7>g¤-Òi ôú ý¾ø—õªõªõê«IÊõÊõÊõÜ[)»Sv§ìf›*>T|oî6w›» ðy|Ÿ]èBàÖ&¹An#cd ‹Éb²àÓø4> ¬3Ðè …Aa€·Û¿ò]å»Êw¹·ÜñÝ’¯Ë×åëÖ-··Ø[ì-W[<ž{<÷xNƒR¥>J}DZ<¿÷üÞó{0ÓÒ€± ±°Á1İÃ;DXˆ…X`36c3€¯ð¾ÂŒñŸòŸòŸÌæss†9Üþ´ô´ô´”FY…EA ¢(Q”(*)Š¥¡4”†Þä;ä9 :¢:¢:‚DÏ=ôü"—_ÙóŸŸÿüüg ßÒoé· Çp Ðïèwô;€f‡Ùa taèÂÐ…€ WÐ+è&>žøxâc ÇÖcë±²vY»¬. . .h5­¦Õððìôìôì„UµVµVµ‰Õêjuµ„‡7±\Äý%Õë²×e¯Ë8GJ±;°.à.²NY§ ¨ò®ò®ò¼^ózÍë5ÀVg«³Õ’I‚$ÈiËiËiÆ4cš1 pî乓çN“+'WN®ÆŸŽ? D˜#Ìf`û“íO¶?™I´(B¡ˆPÒ£7FoŒâØ„jB5¡úK*k3ÚŒ6#þ;l]غ°uȕޖޖކÕYä,rA&€½â^q¯ö´îiÝÓ 8î:î:î’vI»¤`À€ ]®]®]ø¨|T>*`ר®±]c@_q_q_1 ñÖxk¼Ó˜iÌ4xÍñšã5¬´JZ%­‚uÁª«¬Bî=ã=ã=#Ž3øŸãsÊT2•LåÌ—‰Á‚ûBSô½Cïú5ú5ú5ÀÑo~{ô[àDó‰æÍ€Þ¡wè€s«s«s+0|gøÎðÀÜln67Ÿ>3|fjö×ì¯ÙÄÄÄÌ‚Ïà3øŒñ™ÌNf'€Ó8Ó$”ø üþ´Êm‰¶D£—[Å­âVA ˆÄ âAÝo:ãœqÎ8`陥g–ž’§’§’§€Wö¾²÷•½@EzEzE:ðXöXöXA"k«µÕÚ ¬×®×®×~¾~¾~¾@UyUyU9`Ò›ô&=À”0%LÉL<ÁĽ‰{÷ÐË(%£¤UŒäKÉ—’/¹¢^ß^ß^_ZÕ¦kÓµé„#á˜ä œ3›6oÚ¼i3Ü–Ü–Ü„^½zØ6Ûümó¡H(Š€ß ~+ø­ Z¢%Z@uWuWuXÚµ´ki°µlkÙÖ2€D’H ôïìßÙ¿s&““†$C’! 0 † CøJÒ+é•ôrE ¶` ¶ä•³jVͪIîµã׎_;îTZj-µ–ZÈø>„¥äQÉ£’G@ÓÞ¦½M{_H¢mgÛY€#á"‘‡ÈŸDŸDŸD@¯Ò«ôªÿ7ÿLû™ö3*Q‰JÀ?Ë?Ë? 6÷îR[^[^[ÎÇ1þ‹8‰“8ψ¿¿¿†£E*‘J¤ªxh¼i¼i¼)è«4Uš*MÎ,/âE<£Ïè3€p„#&Ÿžžp±~Iý’ú%PÈGä#ò€æ£ùèOŽNKïá”KŠ%®2³Î]ˆûÃ]G±kèZ"AêQzg‰!1$&~ãô‘ãÆ?iŽ4Gÿ·íüv~;ÏƆ†bôÆ!c1‹˜E°q¹\.— ñ©àSÁ§‚!#+FVŒ¬<,‘,‘,)Z9ýÓd7ñ¥|)_Ê–¸VÖ]£< `qg®3ri7Ë¥ÝRLŠIqÃÿ2*FŨ²5HA R˜o´­CëàÒÌeæ2sd Ã0 ƒgîL\›¼6ym’·>,}Xú°Tð@rPrPr°³Î6d² üúÁÚk¬ukœSº÷S7 ›oôwÀî 2—ƒ»´û°+aW®m”¤JR%© Lþ&“?k¾¬¾¬¾¬vf¹:zEÇìŽÙ³ñ}cKcKc Ù!ÓËô2=À+y%¯üÛ-ö=ö=ö½ÉUAQAQAQŒÑïmw…ú=—`qqqqqqà\Ã*¢"*"Ž,Y<²ß9ç;ç;çßáÄAâ qÐæož$tÐAçÌ£ª¡š¸¦†©ajþ4õÎÔ;Sïð‹…¥ÂRa)Ó%H¤R®ß ® ® ®Ygè1ôzÈü\~.?—žqùÕº­ÄÁàOìwÚumÎ<¤#él+ÙMv“Ýÿ ¦:ª£ºœ÷¥ ¤ ¤ ˜.Á `P08´€?Îç§ ë“õÉúd`A.îÆròÏ8þ}”õI«h±IEND®B`‚routino-3.2/web/www/routino/icons/limit-4.0.png 644 233 144 2500 13061246471 14564 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜõIDATHÇÍ–]h“WÇŸ´KÓÐÚù5'~ t…Öj‹‚ëD1'­£´$~€w~Ћ2˜]Ë.œ0AP„¡XD,V`mƒÒôb7F§^Ì/lÕ8YÕJk¨5¶iLÎ9¿]$oÞ¸º]{n’ÿsžçÿÿŸ÷¼çy€ˆˆÌÌü ä-Î[œW’Æy»ìxáÆÂŸýœÆ Mަ߀}| `Vç¬N=dckÞÊÏ­±ùsõ¬¸Ì;àêvu;<¼¶Tm©*ü$_wÀ˜HÁîË»/ôžé=C DnEnŒyÆ<`ckÞÊ·ê-¾\~Ùÿ/}pAÇ0¸ \"°dÃ’ ¥ß¤þ(…†M ›FòGòM¨¿bŠˆÃ£9ØšÏä[õŸÅoéYúi?s×Í]'Û·¹O§ †ÎAÛ¢¶E–^2ä ÅŠ¥bj»ÚNÌus°±5oå[õŸÅoéYúi?òîÞñ‚¿Ð_˜5t“ת_õè^ÝKÒT˜&Ó„Ñ5ºRWb—¼ä¥ Í—f¥Y ©çªHaÌ·©ÁÔ IP¯Õk`2ÃßåwYxs¶RD¤â'pGÜ‘ØGVaLPú°>Ì$øñƒ0·ÍíCQ¢DsðÖ°¨¥–ÚœøWìaРzTOÚPÏÛðdxlý´ŸŒ±Ž_¡y_ó>  «AÍV³Á|a|Ƈ±ø7?n~Ü ×\[pm­«Oê“ú¤ÃƒáÁð wwwÂplxtxÔ~ f89˜ÌVWgõ3~2Æî}Æ/Œo̶¥’©$ qŸû`¼Æk¼P¶«lWÙ.ðöx{¼=L£kG׎®…ê@u :Ë®.»ºì*”'Êå  ŽuugÓæQFÏÒÏøÉ) •„jV‰¬[¿n½ˆôŠˆ8NKuþæüÍâ’r©‘‘öÆöÆöF‘Da¢0Q(2§cNÇœ™6úúûúûúE\7\7\7D<žÈŒðŒðŒ°HßܾE}‹²é.s.£gégüä‰ä7ä7ð¹ˆóŠóŠˆ®‘¨|ï¸ì¸,ÒåéòtyDÎûÏûÏûE<Ú£=ZänýÝú»õ"O.=¹ôä’m,u u u@¤øNñâ;v¼äyÉó’ç"q'NÎJ~Ëèeô³~ $T2ÝYYºþÝ­9ë?ë;냺u/ê^@Õª…U Á9áœpN@`~`~`>LµOµOµC° X,€Êå•Ë+—ÃȪ‘U#« 4R)@hS¨.T—ón~mýKë[~¦¿cX{®ºT Õ®ZT‹MÔyªóTç)ðòò²ãUñªxUÆW¯_ ;Ëv–í,ƒ¢–¢–¢hSmªMå.Y]QWHpìýïØôSù&{*+T˜y¦ÆÔ`ôŸú¡~ñ¥ñ¥ñ¥0î÷ûÀ¸Û¸!z"z"zL­©5µ`šL“i‚èPt(:ú/ýL?Òæ *õ*õ*· ¼÷T¾ÓÇRáTvYõ¼Õ[õV&³½j‚1ƃÁ“Lf»@+­´‚Žé˜¶?U˜æ¨9 ´ªêANK†§ÂSÿÙÇþ§ó'UH…ô^½—$?r‘‹>e6³Byjžš§ÀoxüB ˜{&nâ‚zžžGÔ€°ž\ò¦­7­ó°ßÊövñÁÞÇ>Ìì?{yC¦ÙÞIEND®B`‚routino-3.2/web/www/routino/icons/marker-26-red.png 644 233 144 4300 13061246466 15431 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜuIDATXí—{LÔWÇÏýý~ã (Ië(ƒJÝ¥®QѺ"ƒ±S¢6ñE uk4­ï±jl‰)V¢SÒ V룊ȠMt—àƒ¯Úư(6»í4õ1C•µÆ”á!Ãü~s¿ûsóÈ®f³{þ™9÷Ü{Îgîýž{hІQ˜I3¢íÑöh;ë ÄG:u6/KÑMÑZSeP0æ»I!…áá>ß-æ‹õ"ŸÈ^OšÎÊ·žÖÓz©&<>â5å¬rV9[ÓÉ6° lƒ’ؕؕ؅óóoÏ¿=ÿ6°ðÁ  Ì Ì ÌA_ÄÅ|±^äùE½çóôÇp?å ©[ê–º[3Ä%%%i›];tíÐ5þ’§ÃÓáé C†Œ>ô =ZÑŠV@÷q1_¬ùDþðz)_<ŸLC¤6©Mjký«H`¾j¾j¾ªNuúœ>§NŒ§ñ4žU+ÖŠµb@ËÔ2µL@³jVÍââb¾X/ò‰ü:pX}ÓÕ°VC¤ìRv)»ªn‰¹»sKsKU«öÿ„Z5°e` À[}w|w hõZ=`+¶ð#Üø ~à­j”¨UÞ¥Þ¥ÿ€¹1-wwnIn‰jõà#Ã}Ã}Ãý7&‰ ¦¦S çjw=t=ÄÓ@ö©oŸo@… À|¡D¼˜JP| ßü!‘MûTUcu×ãjonÆSÓNÓÓ>Nðè|ÊZe­²¶i—TV,«XÆWô©5¾J_eHïOŸÿô9I=’ çÏœ?¾<_þ=.{\'†ž À[ÿQýG eiY€Z£½«½«Oî«(¬x»âm¾JßÙ0>âîĉ‰'bwg^g^ç`AP‘,~sõµêkÀ`ß@¢)Ñê[Y…þœòs Œ98æ Q‡¨!ó=o%¼•èùMíÌëhëhà {æí·wÞÞà/Óœþ&·zµûÕnX¾iù¦ÐÜ7vÜØ |9ír,1/1Àœ-s%pŽŸ€ÆI“`ìcàve»²ÍÜ'xŸh©× ƒÅ`Ñ{,šV²‹ì"]ö¥úR‰ˆf8ûC"¢åîån ±hc´‘ˆˆr(‡ˆè·o~û†ˆ¨ùRó%""¹En!"Š7–ˆh؉a'ˆˆöNÝ;•ˆbRzSz‰h¿êVÝD´ÓðŠáŠ6Ôj µzË‹û•d•g•g•ã^?ëgý ÀœÁpü‰ÿÀmßCßC(Ë)Ë€ø’ø°­¶­€îÅÝ‹ îtÜi0>3>€cmÇÚ ÿõü×x¥÷¥÷´8×8×<}°#EópópópÜ|$Y%«dõ= ì>ºþ躣ëB$#¾Þ½y÷&of~f>$$À×_w„žZ£ÇìöÜwp_˜ éü¨œÊíô‰ý'öë]*»Ðt¡IW³t–ÎÒ}Iž,O–'o/]–<ÆÔ`jÐR\‹œ{AÍzxNVOVL7O7àí'ÛO†z²¥| ÏÑßòC‚!¡­?ð×RLøI³†ˆ£'á~î›b é†tCºëtP»¶b[1ÏÑo5AMùùùµè€ÀëˆuÄ:ø|]“ñR¼¿dG„÷GðEÓóäòí.cËfÍgÕ¬šU‹{οÆÞho´7µ«6ªjcP¹ÏŒÏŒÏŒÀ„® ]º´ßëZ¬•kåÚϦ ©¤ 8”^`Á "AP»nÙ¢Ý2S™©LMpU»ª]Õ¼ð‹.Aj«³ÕÙê‚׎r@9 pþ%‰½Q70N/½0ÒÄ‚%íþù?iwfþÌü™ùAíÚ§Ù§Ù§áø`œë'Á X+˜µ=¼Œô$¢.£ÿÒ^¤Ýr©\*—¶f à‚; vò}iiiêßõ£vËnÙmK¢*ª¢* \;²+¢^4ý©Ý’pæ]¶‚­`+šM³i¶¼4J%1btñÛä¾ä¾ä>"¹In’›Ø…ÀÂÅ'÷³ý›…,dQn…‡·J\âXk` ÿ=8þ;{ÄÉ8#ò¾ð¨ÿÍm¹ü‡ÑvIEND®B`‚routino-3.2/web/www/routino/icons/marker-86-red.png 644 233 144 4321 13061246467 15443 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷܆IDATXíWml”U~Þi)ªºÕN—îª X l£¥…d+*DL-;!€¸±€ÅE dc©¸D@©ubRÐM›ºòaÄ‚Bt±(3C;í@k§´t:ï;÷ÙûÎǺÍîùóιçœç<÷ÞçÞ›íVÄ™šŸìJv%»”ÞÈ@jRCRCRÃÔ‰º©›ºyúmŒÇxŒ'Ãb3tèÐ¥OÆûb³Ì—õOâÇ÷SóãùÄò[Š¥Xª:ã㿺WoÐôg§²LY¦,³ˆ¤¥w§w§wó£™çgžŸyž|ªý©ö§ÚÉÙ“fOš=)ê˸̗õOâË~7æõáxÔjÚ£öxÇËÊtd:2æòÇwßy\ \ \ \%©Q£Æ>^ã5^#饗^Òò#q™/ë%žÄï7êóƒ}˜êS}ªÏûw 0é褣“Ž¿w‡Ü!wˆnFL䈑CÃ\c®1×f®™kæ’f‰Yb–Äø‘¸Ì—õOâ[„ãúÛ‡YÔ§âTœ€¾Qߨo¬;# Š6½ZôªQb{Q¼&^cÀ¨x{àmRxCî›ä€¹ÇÜC’œÅY$ÃŒ·ñ…ø‚^#ÉH"ºàœàR¼(2D2­hsÑú¢õF‰ì/ùH~°µÙÚlmxP&Ø«íÕöj‘í¹âi÷´óçNÀÜr„$I=d´…5•Oŧ$I$)V‹Õ$)|Â÷ïùæ#ÅH±Ü€çŠ7̟ٛíÕöµöµ"[ò±øé•z¥^Ù²Qj+j+j+ij€>úºÓ!xîËs_’ä®Ã»“äÁé§“dÿîþÝüëØÖ±$÷ß;œdðÃÕ®&Is¢9‘4œæs•ÜW[QûLí3âYkeãøAøÓǦMËÍS;§vN%I¶±³äœ]½®^’Ä, É០ÿŒ¼H2ÿóüÏc ~»øÛÅ$9bÞˆy$9ÌfÄäf¥ÍJ#-üA3:§^õ]õ‘’ä'‰þ剭Ol}bktf¦{ t ”¤_=2â‘$9~Úøi±ØgwžÝKø“ÜOrI²lcÙF’œ¾hú"’Ä’l~°ùA’yväY’~O§€4Ýq„û$ÉO©{mŶb[±uÆ’±ãcwÈ¡§_yúøúÔ×§àѦG› 4T€‡ö?´FæÌ€#ßù.g^΀[FÞ2*öVì€ yò ulÔ1ï~ÃíoÛgÛgÛgù{#Dùï¸ï¸ï8ÜAµ¿³¿šöG­Ek± ’ÛséÔ¥S€ГՓ½m½màþÁý2™`´­Ð=¢{¼yû›·À‹X`Àáp8\ôTz*õ íNÛˆ¬ 4¿×ïõ{á–ü –¨%jI¨#²Ä›w/ÝU¶«,FCº¶tm!IÝÐ ’Áš15c~éÐäÔåÔ‘äã¹ç’ä£ïM’µ§kOÇ©ð»ÎïH5¨!Íý{·ïÝí÷mM-M-Ö ¸X§ŒSÆ…:TåŠrE¹òç]‘%þÓºƒë²×e‡G{K/^.ÄP­ÿ¶•·­D§d¸2\’Ï…Ï…kî¸ðØ…Ç ­©­ ýðh˜°aÂøhÈGCbÞ”Ðó>˜`’h¥9·æÜŠëƒÑ¡K»–Ý¿ì~‘Éþ«Ú¡v¨»“ZœZœZ èGô#ú‘zŸuáÏ.|©ð%ó9ÕpÕ÷¼Ç ]¶¯l_‘ìÃiœŽ=D³'f“dï°Þa$y2ïdI¦¤¦¤’ Dò~ü†ßZQ¼¢˜Bâ;NU¼^ñz¸Oö×j µ…ÿ,ôSüˆ·Ìí¶q¶q¶qÞ]² jÍòÊå•b²µs·y…WPuOÖ=I2Ðx¸ñ0I†î ÝG’|žÏÇÞ»m Û’äž{Nfʼn–-Ñ­~¿çýÞ÷{ù¨õ„nR7©›ú§*w)w)wýngAíKë|ÍUÊ•ò);”zÅ©8¥VÂÏ»šœè²´ûBxL8V«Añ½øž$EX„I ñŽx‡$¹–kI1Y¬«¬ì€¯¾ýLû2kˆ}·}·Qi­ä:íeíåª"‹Z JP¢Û£\ P€}œp h~í'í§å%€}‡}‰}‰‘æYéIõ¤FŠÉ¡s¡s$Éçøimf_äë __ EièB胲pÎÉ9óçÌ7_°^ kz§ÞéZŸ±$cIÆ@-R‹Ô"e„]…¤yKä[ª]Ò.i—”CÙ+²Wd¯l›Ãæp­·´[PTPT«ÝpU¸ŠAºè¢‹d»Ø]hóóóž¨k&ÔL¨™ &K<[š-Í–æëôí±Ç€Ò˜°õPÜcñ¾}È v=û£Ú­ZSµ&F»iFš‘%þ1ücøÇ¨[ÙÊVÒ•ÒšÒšÒ*fZšLUSÕÔ²µ RÜžÀ/7Ðjb´;W™;e¦R¯Ô+õ±Úu5»š£Ú5šf£9ªÜë×3®gcºÇté6kiqŸ¶OÛ÷zž”ZDz‰‡ã&MQíú5Œv·Ù·Ù·ižzO½§ždAÙ-™Vª:Tu(zíè;ôúŽÖÈ_’” }#ãz3‚‰& Ê"ÚýÛÒnáŒÂ…3¢Úuå¹ò\y|w0.¬PÊ•r¥|ʪø6jWB_ÿ¥ÝL»ùÚ&m“¶É›+ —W—W—W‹×rrrŒ¯­­ök~Í_•‰:Ô¡‘kGó$ôKÆÿh‰Ú]ï^Tæ+ó•ù$¦a¦…ïSïVïVï&(Pðñ±¬¾¬¾¬>@kÑZ´¥)RXš°sÿ7K³~£Åú™øðÊ U¨B¤Ò¨4*ßÿzpü7®„q'àÞt«ÿí¯‘7ì·LIEND®B`‚routino-3.2/web/www/routino/icons/limit-23.4.png 644 233 144 3032 13061246473 14654 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÏIDATHÇÍ–ÿOTWÆ_FFX)Cj!¬€JÜL²HH×iiŠR¡µTHcTbÆ€@v5¤ ’m¬]HŒ`H­ÑP‚R]ƒhkRÌÒdm1FÈ ¨4Á¥’´02‚Ø2ÌÜ{>ûÃÌõ²ÝÀóËÍûíyÞ{¾<爈ÈKᯀ%Ù’lY²-¥¦?úèwÒ.†ìsD|ñÁý¿AÜçqŸÄ·Å·é?š¶7ò—Ö‹˜øKù ¿¼$¦#ª3ª3"7l‡mڢׄì†`í²vyƒPÖSÖpµýj;÷M÷M€_sÍÓ6âF¾Qoà-Å—ã¿áå×–_‹‡¨Q+D åí”·S…þ ; vü²ì—eÊÚ –X• Ì31¦—ØF<œoÔx¾Ágð‡úHx+á-(Ü]¸Ûê üØÕIÕI_  ¨§žXÎç´½Ú^ü n¨D¦mÄ|£ÞÀ3ð >ƒ?Ô¹”>‘Æ<(-} Ð|H ¤€>Œ FwªôgºG÷@ð§àXp ô»ú]ý.æXÄ‹˜ åƒîÐT†V©U‚ž‡b)ÀcðKÙ'"’ñXç­óó‘jq´´8@>(»²ã£'NPGÕQuxÊSž.i¤‰&š€HàÿGd€Ö¼š_Ø›wôúèu0øCe|&¸EDÎ}OÜAÇA‡¢ÿñ^ÔБ¡#ÐôIÓÇM£†ÿ9Ü;Ükò<ð>ð>ðBckckc+¸Æ\c®±%¬d%+AmR›Ô&Óý°üá§?Eý+©/®/ÎäSƒ5k ´rç¾Í%"â:_þê0 üeÌ>fWbÿc=c=ƒkéÖ=[÷ÀÆœ9sàJÏ•ž+=TžTžTE‹=†µj­Z«àÖê[«o­6Ñ÷éûô} òTžÊƒôÒô=é{ ï¹;rwàïŒzÖ—é_¦#¡~"åw1_Ä|‘ùšH^v^¶ÈÏ[¿Ëÿ.?Âù×sUÍUÍ"o©ëªëÉ*Í*Í*\?¸~p½Hƒ§ÁÓà± Z-ƒ"ãîq÷¸[Ä_ç¯ó×ÉóaÙnÙnÙ.R­UkÕšˆÈïò»D^>p1á¢DÉn‘'xóð›‡EdÓ*Û*[ækB >:>ZQeOòŸä›ÇþæŸúSûSÁ–bK±¥Àþ“ûOî? â‡Àëô:½Nصa׆] Ù‘ìHvÀm÷m÷m·9cNŸÓçôAâTâTâ”T–T–TBÚ©ÔšÔ·O\ž¸Ì4̾7û¨ò¸â>ÒGDoˆ-ˆ-P0[3[w*FªFªÀz5º:ºê}õÞz¯IÔÞÝÞÝÞ ™™™¦³e³e³š§š§š§@;¦ÓŽAKoKoK/äwçwçwƒ-ÉöªíUX¾nÙÔ²)ø¦óúµë׿²ç²A_33¢:%ø²±Ç¾µk‡³ÚåËêÀò«–÷-ïãÏnË>“}â·Äo‰ßí÷ÚïµßƒÂó…ç σuѺh]GŸ£ÏÑë&ÖM¬ƒ¬ûY÷³îƒÇî±{ìæ´µ¶n; ;[ r rÌ=¦9;Nuœ2tÍuDhŸJ*ª*ª`aMè”xvL¾>ù:LôOŒOŒ£&LîÜ þþþ  hÚxŠ=ÅžbÐcô=Ô´šVÓ0siæÒÌ%ÐJ´­T‘zW½ ¿_xcá Ô³Ÿ¦ïLß\!>´òÚòZ`*|* Ý0u$¬c†Î,¨WÔ+Ïu"‰$T­ªUµæL¨mj›Ú¤‘FÚÙ˜cŽ9`†f¯JT‰øPaü€ÁæW†ŽýÏ­Þ˜GuQYQ¨Ž2«ÛZ¬ êRðYðÚbE+g9 êõµú¸À. øðšPÔ#àççÊ_¡Wàíí æ¹ò¯(^ø«ü/î]ù¾.^Ø÷Ø‹ù‚ý/x7#r\ä5IEND®B`‚routino-3.2/web/www/routino/icons/limit-65.png 644 233 144 2450 13061246467 14526 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÝIDATHÇÍ–mH•gǯ£™ÇvvLtö‚V¸!’îCŒäX EÍc QIPz:â†HÎ}j}HÅ2b½‘f eô"&®7ˆ“¶Ú Fà°ˆ¾$a;”>÷sÿöáœç<Ï^ª¯Ý_þ÷u]ÿÿŸûåznYû $d'd'x£8!`Ï»KÜ%wGñ1®M®M¿©‡S¤u¦ušllÅ­|g½ˆÍïÔ³æe¡ØÉç’ϹŠcxl^½yµû£(>0)½)½°«oWÀÅ®‹]| c·ÇnLOƒ­¸•oÕ[|N~Ù÷/}HHpýÉó“ç‹Àò Ë7ä4FÂ9PY^Yð$ñI¢N5xðèb`†¬1éÀV<–oÕ[|¿¥géGýdø2|"Pµ¥jKJG´àÁYhÉjɲôæz6Úð€1c̨UÃkЃz.°±·ò­z‹Ïâ·ô,ý¨ùçÞ¶ÕîjwÜÐĮ̈Ëê2€Ùav0§ët»nG¿·Œ[ ?Ôí¦˜b ÔתEµ€ÊS9*T@TÑ|«ÆÕ8s FÕ(ð:Æ׳ôÅi(ï{HK›™Ô#¼  Ìæ"|BU §ôSý{\á W€B )ä¿Có*Æævs;‘(‹ëÅõ£~bÆŽ AýÞú½ñâk ôYÒ!´yììì‡ö­í[Û·Âýã÷ß?nËž/8_p¾Ž”)?R'«OVŸ¬†—Ù/3_f:ìV>ÃçÔ³ô£~bÆ~û z^ô¼ˆ×ÕêçÆ!ãPtÁ¦ ¦ ¦  0T* AééÒÓ¥§aÝžu{Öí{%÷Jî•À² Ë.,»þ"‘¿jºjºjºàÙȳ‘g#Ž…üÅh0,~]këGý$ˆxCÞЧŸ‰øÖûÖÇöW\ºYŽÊQI¶f®®®DÂõáúp½HZzZzZºHÉ‚’% D¢+)277'"ER$E"7nY¼rñÊÅ+E¸Ì"®ŒÄµ‰k-~W‡­õ“ ’X™XI¾HÒ¥¤K– ™’ ñŠ7ŽEõª^Õ+’þ0ýaúC߀oÀ7 Ò¹¤sIç‘ðHx$<"R7^7^7.RÑXÑXÑ(Ò´¦iMÓ‘«ýWû¯ö‹¸Ê\® ½Ú¬2«zqý¨Ÿ³ßìwˆ~ÃOÌi•VÛ˜§ÌSæ)ñìôìôì žžžY^^¹kÜ5î"¹ù¹ù¹ù"Ì@f S$Kgé,-2¹brÅä ›f©”J‡^\?æçMgŒïÔ*µŠ×¼â9Ïí³±-¸-¸-n¯ÛëöBÃŽ† ;`øÔð©áSÛÛÛ ©=©=©=ÐÜ×Ü×ÜfØ ›aÇålVé*ýÍgì·’GDˆØ·RETDE`²x²x²8Ú•Ô¨­7›=›=› K'–N,ÔAtúF;ïÛnåÿô±Ùxk5[‰°ýìýž§ç9nW­®Õµ`Þ1ï˜w@é!=äˆÖíº(¥…³Íl#bó¿µ½¥ó+uSÝ0w›»™ãG†Fë[ú†¾üÀÎ8Vä hÒ×õuà'FEƒÙd61gó½³ó¿·ÿÊ÷öuñÞ¾ÇÞÏìßvçÇfá®ÃSIEND®B`‚routino-3.2/web/www/routino/icons/limit-31.9.png 644 233 144 2751 13061246473 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜžIDATHÇÍ–ÿOÓwÇ_-–Ò èHiŒ)!Âê—l$–yç$X¼ã`7Á)v4§¹Mo`âå~ÙM“ ÇüŽ%Ó²˜(ì–;EÆ2næfˆÉ̆+žná²1iRœÂ@¨-‡”~úy?î‡öc‰ü¾iž¯/Ïç3ïw߯Ï[@DDV'ÌyæýèÓø#Üë¿×ð ìA¤°‘7ê~ƒo)¿¼û”¾X>·|nkº5]òËóË þ”(¸UÕ¯V¿ 0ž6ž¦ÌÿÈ$S•"kz 6òÉz£ßà3ø =C?áGÀî±{Dà5ßk>[G¢!øOxÇùŽÓЋõ'8A&h-ßßKTŸêÀ„ RØÈõF¿Ágðz†~ÂOê(çEDZ 5¡šèÓ±€6Ëåƒþ]l"6A,éT–õmz©^ ê¨:ªŽ’Z3ÜãÞ¤ô˜–«åÓfcŽ˜ÔüP©‰³†¾q”wDD6ž[ĉ¬ )€/ø-¨UÂ<'ñãÖ±Žu [u«nu^Wç—šbŠ©TšÒ”ü•œPåaž7’üI=Cÿû„aRDäôU²ë߬óÉ>l–^¼­oíhí@ ü8±lõ5÷5÷5Ü;9wrRq=¨õ` nÜ8¸Nýâ”ë” uûÖ°ØŸÒS·ë×ׯ7ŽöôUÑ{DDþ =M=Mð£}v|v\È9¶ê…U/õŽ{CÞ¬õ¯õ¯õÃõºëu×ëàR×¥®K]¶%mKÚè¬ì¬ì¬\n|¨q¨q¨ >*|%¾’ê’jؼ_úšèÏ‘x_¼O€Oj>©õFÂÙt!+7+×½UÄó瑸3\®5u•ã믫¯ÔWá«Y³iͦ5›D÷>î}Ü+bv˜f‡ˆÝg÷Ù}"ªJU©*Y¶®M\›¸6!âØàØàØ ¸¸¸(’ž•QœQ,Öï¾ðÞ…÷L"ÕÓÕÓ"ê«çFžqo¦W/®^Ô‡xúðôáÔµŸ{ù)òì¾¼ûòîË·?oÞ~¸á½á½áMíÈö‡ÛngŽœ9ræÈò…¢†¢†¢¨,¨,¨,€ôVKƒ¥þñ¯®¼®<¦A·é6Ðô¬•Y+õ!‰ÿfeúÊtÕ QOÔçvuïíÞ îßovmv¥ÜÅîbw1´›ÛÍíæT|Û¡m‡¶‚³®³®³KêÇœcÎ1'µ Ô 6P¨ @Ë[Z`M¦cÐ1ý-ß¶}Û¾¾ zy¦%Ó¢ºEµÿ±g>žðê@Ùû¥Å¥ÅD³wf—g—þ›ûnî» sÎ9çœ3e`ÇÐŽ¡CpîØ¹cçŽà 3 nÛãöÀ¨uÔ:j…ªüªüª|p:œ™ÎL8x»þíz¢É»{€·:½^àd·€oÚÚS·DÛºð`áÜÿÏýÞû½¨x[¼-Þ¶ü¨Â®°+ì‚hc´1Ú„‚ËŒeÆ\á W`±jñ•ÅW`rbrnr¥¾Ó²´, ?¡6@bžž¾*\}jŽYsEy2ǼÊ˼ú•Ú©v…R¸ÄÙ ,,ÁQ¢Æ>ðK^æeP¿SMª @¿«ße^½˜äo…CaÛ”m*²‚»Æ3&Ô˜¼{VìYOLfuY›Õföød|rùäÇN9@3Í4's Ôˆ ©°˜ŒµÄoÅoSýÚ¤6 |“à‡=i{Ò€ØÓ“ÿÙýV>³¯‹gö=öl¾`ÿ0,1׌¦\IEND®B`‚routino-3.2/web/www/routino/icons/marker-95-red.png 644 233 144 4202 13061246467 15441 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü7IDATXí—mLTWÇÏ}.u„¶‚2³Æú²«¨¬ºVy‘§&úa”Vl nŒÛVDÛ¦vS_F·ÒKc|‰’aFL ®u­TSÚeÔ5“jvfbJfÀÁaîóß̹÷Î$«Ùìž/ðœç<Ïó;çùŸ{€ñ1‰Ä >?É™äLrrOc©Ú&´Mh+]$Ê¢,ÊÝGI.É%¹À¸›Ö‘ˆDd6oÓZ¶žÅ³|,|=>?žGËWMªI5ïˆ÷güFlÛÄ6Çn+·•Ûª€èÓéôþ¶úþêû«ïk¬y°æ`)°X T›ùÙzÏò±ü¬Þóy¿4Þžþ%?ÌóÃ=¹ì„²*³*³*åíG®¹vä})8 @@#Á€ô P옟­gñ,Ë_oú—Ïç#†—ù>¾ïë¹ÀtttJ¿÷F¼o^ÄͦÙ4’\#×È5€<_ž/Ïd³l–Í;ægëY<ËÇò+Àqõ /+hœƒspBÄ}â>q_³‹˜jMûMû%³ö!­§õJÍc¶1@{"®ˆ ÀX4/š¸ŒË¢JÄyzÀ˜$K2@{¤|)šŸÙŸÙúatat!‚lµ©Ö´Ó´S2³úŒ‡ñ]¯®W×»âwlaa·a7á{ì{è{ˆ¡Xž | R)ô£PK(`Å´ð¾´£ C„¤ž' ˆ>Š>R̠ﱯÛ×!ÃÃ~Ã~:ƒñ(|b•X%VuícŽÃ‡ß=ü.ÝK’‘“‘“ž°û‚ûÍ;š×+®Wm¦ÍZð¾Û}· Yj–ÀÑïè¶Û‹à›Œo2É1*ŽŠJPèpE£Ô(ÑMÊÉÆñêOŸ—>/}jŸ”>)}R ø ?A‚‘íÙ°€ñ{z衵«]Õ.-èW_ujýÉK’—hìà$a’À8´wh¯$=)ÈÈãc u«êWÕ¯ªWw&{± ø#O#Oà×+.ØlÙlÑ]9uåðgù³àÏÿ¬Í[›K^[ò„jCµðøæã›@oÑ[üÔB-€ìÎŒÎTë3ÆE»¥ÛÒméV%$ch\¡£ÓF§€èPÿcýZÐ{í÷Úµ'w¾ÿ|?T~Qù…v^gÔ`bhbNß=}Àp¬àŸ"'"'Ôú–åƒo)ZZ´TÞÆòG­-e-eÃkYˆµzÒ“>€35gj´ÚÝÕ»«W{Ë…MÂ&Cãvôk«ÇêQ·[y³âŠ7¢!p£°QØøÏ²q;…Ýz6²u9º]NÏ1`­Ù¾wû^ºLé\Ú²;e À1ã1#€à]ã]£N¦“5fØuÏuŽ:v+\s]sÕómn©k©Ã[Êjãm¼íY)7…›ÂM™s$Pø‡ò¤®çÖsë‹›8;×µ0­D7;;Ÿ9>ƒSÑî6åéŒÑVÚ 8(5Q“}›¾­J©ÏþàჇ€1ÙpÆpFªRNòSáá«IA331‹•µ’BñSâ â Dð ? ?oÿ«ò´6Ê å’Þ÷±÷{ï÷ZíJR§ö@ÙVЋ^ÎèëÑ×Z¹¹0[¶îïëv­Û%oS^ qPtîÎÜ’¹%s !¼‰7ñ&®5FWÁ0ûY&xàáÎÍØ1cÇŒ„è*u•ºJçnE»…¦BS¡V»QkÔŠ0œp `ƒT¹åÙòly¶ªÅ†… ÒeÊ[®×éuú¾g±¿–’ã;Í]Lh=áÌâmCò¸v}­ªv­5Övõ’^Ò«@Ñþh´_Õ¢n¸gŠ;Å⦫M¦ò©|ê;Nbc_yþ„РÝÕœ³sv­vÎU»R‡Ô!u¨ÊÍÍÍæææäYŠO §…Ó‡3©Å¤—8‘¼`¨ XU»~Á¯ÑîAÃAÃAIï³ûì>;€0Â#ÀH­ç¬ç¬çÔÏŽØ$6‰MîØ¿$)7êÆæÉK/L,à˜vÏþ'í­,ZY´RÕ®s±s±s1NŽû©Ò ®œ+çÊ‹wÆ—áêrä¿/Òn¾`l‚­g>.ßS¾§|ýKöXöXö˜tGiµ_ð ~ki&ͤ™Ä>;‚/¡^ùG¢vwÇÛEÿâ6p¸ YN–“åÑßòSù©üT€#áÈåŒ!cÈ"D躄.îR,°,¡sÿ·¡W~+!%¤DtÅ»?®à)Oy p¹‹ÜŇ¿ŸŸéLèŒ7!ï [ýoKªÑuSÇÀ5IEND®B`‚routino-3.2/web/www/routino/icons/waypoint-locate.png 644 233 144 1035 12002775154 16267 0‰PNG  IHDR Vu\çsRGB®ÎébKGDÿÿÿ ½§“ÅIDAT(Ï]’=hS…¿û^^^“Ö&Ú$lÔDÒ!´øG¨‹¨P;I,q°`+èè&"'Ç8)¤êP(Šƒµ¦ƒ¥PÔ”ŠŠI“†¼ŸÛ¡â;Ýsî ;ê ÉuŽò–FpƒùøóÎdßE`ÿ)—é¿6m=Œ¶˜Byµ1½Oè™ÛóN¶ÿÖ0ŽÔ‰KOz‡ÇOš‘°ýÓšQ\$àFÈýº«Ñ¶#æ»Áóûô¯{Œ2/öxfôÐÀØi±Œ¶tí*«WîÆ0‘VŸ¬Ø¯ñƒÍC p€sp,]ˆ¤[n³¦‚!ÙÚM¢Îqö® òÇ~ÏRç8(J†I.‰ìÙ¼z¢âc{ ºë‚~•Ð VBÓ >ÐÃñiÏ@Õ*©¨  >®4¨Z HdŽÞúâ‡Äeñ¥¥Šnoñ³0þé)$ÝIº3m‘»Gî´4¶4r †ž=s¹!†õºÎ×û5Ÿ_œûH_XrÉý¸7Ÿ/¬É[“·öÛpŸka×Î];Þ/z¿H9@ŽËX¦ÜÀ$“è'`Ãz=’¯÷k>ͯõ´~Ø€ŒÍ›…€ü¢ü¢¤úð_œ\}rµÖ3î¸À20'ÍI¹OîcÔSõ€8â †õºÎ×û5Ÿæ×zZ?ìGÌ=ÛŠm¨‚ø‚xÀ0:A¾‘oÀ šEf†9 dÊ걺¬.æ=Ê«<ÊÒaZ¦r¿¼(/¢¤ãÃá‡1Ômó¸y<úÂLî5öÚ`Å6ÛQ !ÄÕ4”44¹Ãò‡¢:;øAöË~fð `sPEU@dØâA‚çxeÖ­ýÖ~f¢üø¥_BT?â'bìê38zöèY÷‡•0&Xï(ß6_®/*++¡»¯»¯»o~ÅÖ ¬X—_\~qù4l8ØpšþhêiêþÖþ®þ.T”¸&¢§õ#~"ƺ¿ƒæñæqP_¨CúmûNõë;é—Ò/¥_‚ÂU…« WÁJµR­TÐYÜYÜY3æyìyìy 9¹9¹9¹°%°%°%¢^Ô‹zèø¼#¥#%VMùÖ ëk?R¼)^u †6mu|nz÷õ÷CÍùšó5ç¡¥´¥´¥\u®:WxǼcÞ±X¾‘n¤é1\Û^Û^Û¥å¥å¥å¶^üÆÊ²²€ßt$¬¯ýHKNK¶^C`00ŒFƾRV§cDSÁ©àTö<ÜópÏCp–8Kœ%Ðíèvt;æéHõHõH5d½Êz•õ |ŸÇç±Ûn¹,ð!¢§õ#~æUL–ϸÙvóÞÍ{°áÀ†Äâ.‡ËárÀõkׯ]¿£££¶Ùh«j«j÷ ÷ ÷ [ëmåYyÀß궺 Èÿ¬ØG=6í±'€¬“uz^?ÙcM%‘)ùÕì0;b•7¿4³Ílnnnk©µÔZ jZM«iÝ4ºitPFe0ž3ž3ž!gÈrÚŽÀƒ? Ë7ÇmzŸžJÛ=ôOù§¢4;X,ÉC̨ïU³j¶õÈVµUm2É$Ó&"DȆË8Å){sü¯{ÌvóSX˜¹ù_Ë×ÀrXc¨võN½Cñ3õÔAf˜õV½Uo‰‰ dJ*PF3Í(°ÎXg00¤Wz£3ÜÕ›ó/ØÿÊûu±`¿Çæì¿¸Ž¼³<„¥~IEND®B`‚routino-3.2/web/www/routino/icons/limit-11.7.png 644 233 144 2573 13061246472 14664 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü0IDATHÇÍV]LSg~NK©U‘6ÜhHD1šˆQ1DPD£!f$ 踘¸‹Ì$1Ñ Ò™‘Ždk ’&ŠÉ‚[ø«‰qjÂ(*k #0#Ç1KÏ9ß³‹öP°ÛÅîxošç}ßïyžïûÒ÷| ë¿   ñ!l8ɯ*\Uø‘3„ÛTR*‘J~¯'ì v’Lt$:´‘ÖëzÿÒõ@„©žžÇ:DæÛæÛR^_$Ë·•o[e á¦>ÒÒeéúK!O¸O¸IòNÇ~ENy¦<$ù&ïMÁz]ï××ë|Kùqñ}€4Ý3Ý“ü¤9Ö ))©u¡_*yøàáƒ$9aœ0 I’ê4ɵ\+òHÊ”©Ç̬×ÃýúzOç×õtýÖ\k.@WWXÚC F~$Oo8½A× v‘¼ÄK\K*²"“¤zT=Ê)úDIR¢DF°^×ûõõ:ŸÎ¯ëéú!?X~·×ò)—Kƒ‹†µÜ )h"E£2©LR¯½CËÕöj{IÑ(E#£BôŠ€P¨†…ä…dÕcAGÐA*†øÅƒ#õGêuƒ×ò#W)ÀæfÒòÜò\Ž!ÇòÇòIÕG’< :•wÊ;ÎG”`€TÇÕquœ]¢Kt-q"/»Ú ‘*Rù£ƒ£ƒ$i‘-²2¶¹Ù€8ø:¨j¯jSø ½'½GdÓݯººañ'ùü $˜aŒ©ÆTc*0ðjàÕÀ+ÀŸäOò'ˆC\ˆ3þþþ€ý‘½ßÞüðEGeG%,?ù:žt›ÎšÎ"¹hN4k^„æÖÜ’PJ”±«¾s b€>øbH ‰!@ê”:¥ÎHÞë‹õÅF°3Í™æLlÛMÛM #oKù–r@ä‡ô¤6uJ`ÔºµnÉk€AÞ/ïöèíéí¬ ó-¬9¹¦fM `*4š £­nYݲº°TYª,U‘|YSYSYpždO²'(þ¸xSñ¦Å¶žë%ö>í} À(çËùÏ…çW[?YÛPÛ@ò.IjŸÚuí:9—3W9WI0@ôUΥϥϥ“ $½ôÒKΦ̦̦¬g=ëÉ·Ùo·¿ÝN¾ßø~×û]¤vL;Fò—°žV{¾ö¼>ÏÚú¡Ï Ò2e™’cÈQuT]Ô=&˜_â%ÀÿO,ï¯WÇÔ±es,¬§ë‡üDO~¥ÌXfÔY‚ƒ´)£Ê(ÉïÔ u"zòÓÊõ\Oò2/ór¸&HácbŒ¤ÎYÕ3êÙ æ©yKøõ>œü+÷[¹b_+ö=z1®´ì?|¥‘%U¸Æ.IEND®B`‚routino-3.2/web/www/routino/icons/limit-57.png 644 233 144 2527 13061246467 14534 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍV[LTW]w ‰b¤j JSŸ1JÔ ˆMpHˆ%!ÄEmŠJ‚$¦)>hôÇúˆ¤i5ÒŠ±£Œ15¨€~4™€¼RµéP')U´XƒÌ=÷¬~Ìܹ×6ö£_œŸ›µÏÞk­œÇ¾$ 1òiI·¤[æ…±å#››ÿ~{· R)RŠ¿ ššIrþÙùgµaëóz¾¹0øÍzz‰011Š+‚’;²wdǦ„ñ‰^ÒqÙqù/•¬ê¬ê$Iï9ï9~Fïï’ä¤kÒEXŸ×óõzÏÌ£ÿÐHû5û5å2fNÌ€\´uÑÖŒ½á„Ÿ3È ?"Éqë¸UZH’$ã/]$§8E}üaÂú|$_¯×ùt~]O×û™¼%y @ºKÜ%Ž3á‚áïÉiÒt½Ðe’ÇxŒñ¤:¥N‘¤(¥|CÊ^ÙK’T¨Öçõ|½^çÓùu=]?ìoïíWydqlq,I•$CwHñP<$Ù«-Ñ–0$ ðPŠ÷DŠH!Åw¢M´‘²@ÈR¤‹4‘FŠE‘("…E¬+(å"A$0DjÍBòO?¢Õ‡ÙPf#é:‚S6rLŒ ’Ir©íÒvñ5ýT©’üh IIÉÿoøÆ µ2­Œ¯#`[T/ªöc=r¾ü¨Œ«ŒÛø-°3wg®\‰vqZœVúðµÁÚ›¨%¢Ê•ž+ýWúîÌîÌîL`Ô9êu–bK±¥ðÚ¼6¯ †”!Û ˆ¿ßß ÌÏtÖ;ëaã7êIõ$J•Õ©S7Ê•Àø‰ñ±O}úl!KxÝÖù€Íµ›k#ËeÓq÷1£&s&s'sjµ¿Út­ïZßµèÔÿ¨ÿ0Ú5Ú5ÚtŒtŒtŒçíçíçí@Ù½²{e÷€ÇŸ>®y\ƒ¨€,å\ÎÕù•Uoë¯óœwkÞ-ÙAWW .ÚÔ=êû^ù^ù^‘q5q5q5¤;ÏçÎ#=åžrOù¿÷¯¥¥¥¥¥…¬l¨l¨l0íü.Y%«HÞ—M²É\¡ë‡ýØk¡µËûˆ}DÑ-?S~Sb”$ëg£³ÑÙ” ” ” 9¥9¥9¥À¾Œ}û2€¤…I “›››À©§nœºxÞ€7cüвq‡£Ñg€Ýg÷!°fY³¸ÜhWµ«Ê nW·G“ñ½è5ø‚þ ?è«‹ÕÅ*P^Q^Q^,X¶`Ù‚e€Z§Ö©u€'Û“íÉR6¤lHÙd¹²\Y.@æË|™(g•3ÊV<Á“^T?â'| Ô’^^x]ð 9'ä yŒû4|iøÒð%riëÒÖ¥­dbNbNb¹¿zõþjcCÜÇÝÇÝÇɦ¤¦¤¦$ÓÑè=¢‡ä4Ÿóyø°ˆ6_Vúa?c­}äîúÝõÑ+ýa´1þÈ aÆ5ãšq‘©©©¤\#×È5†_\|q‘œ^;½vz­éýÄë¼mCÒÔx#zº~ØÏ»ûØT´µkí|-IŸô‘òë·­l–Ͳ™d X`2RÇ:Öýÿ>öîÎÏHgV#[@­V«eˆ{ÙÊVJyKÞ”7IúØÉN“nt<ăÿÞï÷÷{Ÿïç¾""²fé[ÀéÎt¯ŠÙîÏêÞÔ½tÄì‹&¸*\¿ÕM«›Ò[Ò[¬GŽmÇíüÄz?‘ÏöËq)”€«xÉn€ª¼ª¼ÔŒ˜ýý0x{¼=o ¨é­é¸Þv½ÏáéèÓQ€ÙâÙbpl;nçÛõ6^"¾4¼Å/ÉýÉý®)Hñ¤xD`ãž{²¾Œ%ü‘å¥å¥%ý•¤Ü`>ÒHSÅÀ<óØk&Á¶ãKùv½gãÛ|6L€¶SÛ)ûì?àmŽ´r­\ÇoͪujÊx-–¢«/ŒŒâañcócP6¿$ Ê>‡å {Ãó+ h­8î>3¤ê…,¨TA–¯l²É5¦ÆÔX‚Ð95§æ€oùš¯ò?5oš7Y`O &7Nn"Þ)ïÔü [Ï’°‹·àhýÑúø>}êýGýG‡gøÜpãp#<ö?ö?ö/×7Y5Y5YC¾!ßÏñß×îk÷58ï;Ÿs>B“¡…Ђsâ±ÍX>‡?¦gIØïµüÚ9Ð94¨#`ÍZ³Dki4H$’Ðq¹ãrÇe‡X?­ŸÖOCVMVMV ”õ”õ”õ@x <€MI›’6%AaAaAaø¶ø2}™0“;=>=NdIÞõ°c¤cÄö{­[dÕЪ¡üíòfǶÛDä W3©L1%)2-s2'¢•h%Z‰µÔR+ñUw¸îpÝa‘Å}‹û÷‰l¸¶áÚ†k"wBwBwB"ÚAí vPddldldLÄ“âYãY#Òwê§îŸº%%†âjV-Eý)×é+ÓWZ0ž ;×ÞÜcl5¶:'³+}Wú®tèºÐu¡ëô·÷·÷·ƒ–§åiyP¬V!g0g0gnß*¾U ù¯ó_翆’«%WK®‚çŒçŒç ´¿ÅsÅ“ÀWõwáß…`ëY!bõY}® QF™Q&¹â–»rW4I–'òÄ9U«jU­ˆuúaÝqŸpŸpŸñGýQTäÞè½Ñ{£"áúp}¸^d<8ŠäoÏßž¿]dsÆæŒÍ"~{0þ`\$ëfVcVc^seÇã""ÖJk¥kÂé1:ç:çâ-yÄ<]]k÷”·•·•·Aë¥ÖK­—–7KkKkK+T4W4W4;þÝ}»ûv÷A¦–©ejPw§n°n0ŽðÉROßèlëlszìo%ýF§ÑéÜÊWù¯r_åB¤(R)z饬&«Éj‚łłÅxyöåÙ—ga‘‰ÈDd¦ç¦ŸM?uOͨ·ŸŸøô£_ýjÙ­Ì>Þ§Þ§ó+ hMgŽuÈ:ÄBÂáD‰.}Fç<ç9ð‚¼HÈòãǪZUªÊ„ùö¡Ñh4²Àéø[7¹0¼O¼O–ͱÿ˜ü:Ä&¿2C@†yÜ<ŽÎI–O~h Hã=ÞK🤋.”ºmæ˜9茛?˜?ćÍVere²}Rÿšüïìå;ûºxgßcïæ ö8>E­QëIEND®B`‚routino-3.2/web/www/routino/icons/marker-56-red.png 644 233 144 4240 13061246466 15437 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜUIDATXí—P”uÇ¿ÏóìŠ(JZ3B,u weH8u‚ÔLZCYb-q5ÞL™åj5LIfÞD£„:…sâÊÚÕ`çx7wV6cœ:^1°#ÛŒˆ°°Ëóìóº?Øï³?f.çæîóÏîçù~~¼žÏ÷ý<ß]!fìcêÊO‚'Á£ü¾4«}Vû¬ö’<›a3lF×b©X*–Â̲¹SØ„Mؤ±¾¹SÆË|YOÖí§®Œå‰æÛ,6‹Íj[ìú¢;lí¶v[{Ûˆò¢ò¢ò¢’¼pláØÂ1þ¼¶gmÏÚxtàÑG "¿"¿"?âËu/óe=Y_öûy¡þ:Ö¿m:®Ž«ãÞ¥rBiUiUiUÆ–§œ>pÚœã¿â¿â¿hhhLpk\¼xñ‚å‡×e¼Ì—õdýØ~·íùy>ᘧúTŸêóþEÈÿ2ÿËü/õ{ú¦û¦û¦é#lf–™ef¡ÛíÆv0–ËŒe`”¥Fi”^—ñ2_Ö“õ-à˜þŽyšÒ¦´)mBØvØvØv´ž“ E;‹jŠjôR l[(7”‹_orO¹ÁôêËõå@ÐXb,0jZ Äç|NÄ‚æ7æ7`zõYú,Ð[ëëÁÜf¦˜)øeXÑ΢º¢:½Tö—<’OØ/Ù/Ù/=x· pÔ;êõfFÿpÿpÿ0£á:~c—q‡qG€¤ „7;ÊÌ2³ À6‡!.c—ž¨'Fªõ{¼ Œ:굎Z3CòX|¶M¶M¶M;äB“³ÉÙä47† Lèm²Ö7üxhnh»ÜvÀý€û€ƒ‚FÌÌ84ÿÐ| pⵯyFèmÆ3Æ3VðD“³é©¦§ÌÖdcø„9´pÉÂ% —°s¤d¤x¤Àœ4'ÑI—÷¼oÿ¾ý0óÜ̾oö}Ñþüœù9Sç§Îôt÷tÜšvkÀ<}žï8ùád°êϘ>RrÅwÅ’GòIз׼³æ5ïDîÌè . .†ä¥r£ÜX™º2`â­‰·†=Ãããžèž¾ýàÛe=e=æ1ó@ÇÝwüâ»_| õô€Ñ€²»ÊîPßTß8Ûy¶à&q“X´aÑ€ƒ¾ƒ>€ò{Ëïêsês@Wßó}σ™=óJÒüù òÐ+ù„Zª–ª¥Óƒò¨kÙÜ’×’%ÙSSƒƒ@`ª|ª `Òþ$Àþ×÷¿pcÓMM]M]QáúÈ#?ˆFÑÆG‡öÚé÷·ÝŸu~ÖiMò·J¶’­dO -GËÑrjäS–~kZOZq[ÿc¾G|Œ—Œ—à7 çÎ-ØU½«:úÞ›ßk~@Šèý ÷€â ÅÊFËF£Õ·?gP&Þïtî:L`"¼¼¤fq`q dÚ"m‘¶hߨH*N*N*Âö…í ÛnŸõ¯(t:—dý«Æ¨1à ktBÛ¨mŒÖ¬ëe×ËÑ“þú±¯˜“9'ð‡ãFg>Cû¶o-ŽÜnÕYç»ÎwCà³Ú³Ú³ÿ\7ã'ʧ^ZÚ^{¶=ËžåýP&¸¶o9¸å YhíÜ‚³·œ½>ÜóáÀáÛ ßF†¼!o”¸ä¼ä8xæà0œg:ÏtFæ{düÈOG~¢Ì:BÔµaªDIUR•Ô;Äjÿ°ŽÔ J…R±ºYq+'”R+¡ç=GN9…ÇÒîK¡;CwF™¹f.ç8˜f­Y @ `š5fí÷¹Î œƒôÙŽG‹¾ÉšäÚ«Ú«®" ­T”ŠR›#ÂZ Dí Ñ&ÚD›ÚæÓ|[þd­ÍŽGŽžÜÿJ_]_]¤¡Y¨·è-3ßñ&&& Eç ] ]sÝôÅé‹dâú¿¯¯^_m¼d@×l#¶O]Ê )/¤¼ „Z¤©EÊGa:§Äœþ\§õj½Z¯r '®‹Û¹ÿ›%[ߊE±(¶‹]~Å©šª©š œTN*'¼eæú/=q;ÓW÷º[ýoÌÑ_"À"IEND®B`‚routino-3.2/web/www/routino/icons/marker-76-grey.png 644 233 144 6242 13061246466 15641 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü WIDATXÃ…W}PS×›~ÎÉ% ‰&­Õ’ò¡.ZŠøSªðkªµX?¦JÕét­Mµ~­óƒQCA»µ-[Tj%m·‚« T™ˆ¬PÙŸ¸L¢…A>‚–"ÊGB–’Ü{ÎþA‚;ÎtúþsçÜ{îó>ï{žû¾ï%&“Éd2A‡q³_èbá¡ðPxÈkLgMgMgyhö“ì'ÙO–ÏæA<ˆ}ñ/¢^Ô‹ú¸ÜUî*w?†"¡ˆd шÐŽv´øà~L‘¢HQ¤ á±ðXx|§ˆØˆØþ^˜’’Rך³-g[Î6Ò'†‹áb8ysœ»é㥣b!Òs,›e³lvÓãô8=Îió²-Ù–l˹nOŸ§ÏÓW{k4v4v46î_Õ'Õ'Õ'Q·,nYÜ2’Ì žG;G;GKÌ×®\À1g’3É™ô·í80|`øÀ0;v.á\¹î7';ÂŽ°#œóü?Á¹'Å“âIá|ŒŽÑ1:±——–—–—r^TZTZTúìþ'~8ñà ÎÏêÎêÎê8ç¼€pÞ5³kf×LÎóôyú<=çCCCüysúùøùQ|†Ïð‰¦e´Œ–MD¦ÀiœÆiŸà|Ë…åÂr@!)$…Xß²¾e} èºÒu¥ë °!uCê†T@z]z]zèÑ;£w`ŸlŸlŸ µµµ•V~Xù!ü{òïÉ¿AS‚¦MØ.¶‹ízæŸn¡[ègpgH4•éez™ž—;æ;æ;æ£KÜ/î÷CFêH©Ç~ìÇ~€˜‰yB®¿vüÚq`îws¿›û #:¢#€'Ó“éɤaiX\·\·\·€5–5–5 4$4$4(/*/*/lm¶6[@ói>Í÷ÁËœ¿9sþ†.j jàåTù¥òKå—b^WHWHW/¿Wx¯ð^!€Y˜…YpI#Òˆ4 -hÚCÚCÚC€þ’þ’þ !0!0!ðY4‘&ÒD@LÓÄ4 ùfòÍä›@ìýØû±÷… 7$ŽÄ‘8àá–‡[n™xÝe]e]e]XYYá+e—²KÙ%æQlÀlÈ*L‚I0‘Œºàºàº`É`ÕþªýU¨df™Yf†Ãt»ävÉí ì@ذ€Žé˜Ž<†Çð@¡Qh@]]hÛÓ¶§mϳ@š‹›‹›‹”¡ e€~¯~¯~/ܾǪ+EWŠ®±…¾jR@$"©XNCëCëCë??(O’'É“J{ç Μ'{P1R1R1"íõh¼[½[½[áî(è(è(¢þˆú#êgøSþ”?ûz±:guÎêàÁÆlLÓLÓLÓ€ªúªúªz`ñ÷‹¿_ü=¸~«~«~+• • • l´÷NïÞ;ôùqùqùñæMÞno··{ŸW{;övìm€5²FÖxË  Q†(CÖ7?.\þ¸<8“¹˜‹¹xrÔ©¨SQ§Hºæ„æ„æøÌÁ™ƒ3A”+•+•+ÒLšI3€+¸‚+€ö¢ö¢ö"àÇ=z4ô(°dí’µKÖqÎ8gœ®{™÷2ïeâêÓÕ§«O“VéUz•~lŸÎ§óé+ÖP#5RããDJ‹h-’5Ñ\šKsíb¬“u¦yTr•\%nàn€ÿSËæ–Í-›q>®1®1®.m·¶[Ûý,ƒ(F1Šñq@âh“´IÚ$à5ãkÆ×Œ@˜'ÌæÃQê(u”BU½ªzUõ*Ñàohdˆ ‘¡ƒŒ, È‚û"yÈÂ|cž?>7 Ÿ’“ä$9Yo¤‹è"ºh_Õxy¢ßXîYîYî‰;l©¶T[*T¤Œ”‘28 ‡z@"DwpwÅ£xÀÔLÍÔZÔ\=wõÜÕsÒ^[µ­ÚV-ä+^P¼ xá|NTnTnTî×ב…,d‘ èD':Å¥þyTnt£[lÅnìÆnR5Û2Û2Û’·Vù®ò]å»çsl[m[m[{å’Ê%•Kži—æ‡ùa¸ýU^xáý™ó8½F¯ÑkP4Z­VžüëЯC¿ÉòÔ“Õ“Õ“{Æ<<<|ÞšÕšÕšp+·r+´>”ýDG}×26‰Mb“ ½Û{·÷n/àÙíÙíÙ}àsu:Hô°¬ÝÒni·Èòj6Öl¬ÙÈ“‰‘‰ VÂJX 8ˆ@€óa> ‘ˆD„«ßÚoí·â|íÜÚ¹µs¡U÷©ûÔ}›Ïæ³ù>—^ϘOŠù¾OôM þÀ}¿$ ßÒwD²<Ô¢µÒ^²,$ “׎kðú%ïïï¶3•¥²TFÇäÆäÆä"…µ±6ÖIgÒ™p‹b†˜Å·‘ßF~)Eõ-è[з@Ö¡œ«œ«œ›—Àe\Æeû~affff!ßw²þ¥ÉÉÉÉÉÉßQønLhȧݽ>íæû´{™&Ñ$š´¯ éHG:ýÆâµx-^q‡½Ð^h/„ŠRJ)Ű?u®:W‹ö˜{Ì=fY‡ò ò ò`kµû‘û‘ûÑÁ¯;Vv¬ìX øüõÔOp¢‘à9{nƒÊð?>í^šýÓìŸfÿ”·V¹]¹]¹ý|ŽMoÓÛô‚ý¢é¢é¢IÚë›èµ-Á-Á-Áø†¦†¦†&òžªMÕ¦j˜˜açMa³°YØìz=">">"žùü½åïPÏó’áO,11111¢oÙÂå\Îå䣾Y}³úfáiº4]š~KTD("ë¿yºôéÒ§Kƒ²ß·ß·ßçÿ~÷Ç»?ÞýQZ4âñŽxe»,X¼?ŒòB^øŸÕP@…ì†0„!ö¢ÿ|‰ŸçCðö'ÚÍF jP#eñ*^Å«;i%­¤•ÿ1ööØÛco³Yæs€™Þ—¥ËÒeé?߈¬Œ¬Œ¬\žhí´vZ;ɱil›Æ‹}¸ÁÑ?ãAñöœv}åBÊ‚F…;dÙF¶ý#’×ð^ó÷÷gΜAï˺eݲîG3Øì öÅŽÞ¶Mm›Ú6ãáÃó–®¿âñ–Õ,soȱIEND®B`‚routino-3.2/web/www/routino/icons/marker-72-grey.png 644 233 144 6301 13061246466 15631 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü vIDATXÃ…—kPTG›ÇÿÝçÌAÐ…¨˜r¼dÄWŒÀûkt\/¥˜he XuÑ µ^\ D7jLTÔ( ¹yyó‚¨PDÙ Á1 j©Dá"„€À0afæœîýÀŒ¦¬JåùÒÕ·§ýô¿û<‡¤§§§§§C‡!3t–Ø,6‹Í¼$ýlúÙô³ü…Œß2~Ëømþîͽ¹÷ÿ”FI£¤Qú${‘½È^Ä÷ã4Nã4IC(B  u¨„$$ñý*ƒÊ 24±]lÛo&½¤—ôþ#wß¿=~¥÷37dnÈÜ@:¤)@ ‹‡8Ø÷..} hDÓ ,ƒe° ö½Ãê°:¬¾S3Š3Š3Š/´8:ŽãS¦ LÑïÐfi³´Y¸ªŸ§Ÿ§ŸGÒ¢QŠ(0ÕgªÏTÀ]w÷»Ç»ç»ý=õïZϽ¾›ÇÍ'º"8“{q/îÅ^# $$d B€PvÆzÞzÞz~œÏã㣜:¯n^ݼ:ꌬ‰¬‰¬!KTiª4U° »° À¼7ð€ÑѰûÛýíþXRSQSQSÁß„~úM(Kí^н {Áº<<<f¨å9AN˜›Åy"Ol~€€€Î$o¾=øö € T Â˜X$‰EÿrØ6‡mÜßçÎ œ#E¯Ú²j˪-âEgÑYˆ‘‰‘x0æÁQzÔð„'<ô£ýB‚€˜ˆ‰˜ á žà D³—ÙËì…¦‚' NH¯5•7•7•‹7”¥F©yxM2HÉ0{-fc6f·þ.,Z¼hñ¢ÅIF’‘Ço ìØ;°7fvÐÖ ­A[¥%‰k×$®¯«Ì*³Ê AÖÊZY Æc<ƃ#1#ÀñGü@+i%­È-r‹Ü‡8ļ‡÷ðP–ÂRX  ùIó“æ'ú9ú9ú9tËCá¡ðP–tï8ÞqÜç]u’:Iôo‹UͪfUóål’Q’Q’Q²xª£ÚQí¨¾Víeõ²zYyÐÆûïo¼OªuWtWtW@¹…[¸^Ä‹x/  C† @€àœsÎRKjIí³ÈºûY&Ëd™M§é4óóó°ä <Êâmñ¶x“e”2Jõ÷(‘‡òPúî §Ö©ujر+bW`ž®K×¥ë‚Ò);e§ S¡©ÐTÈÉr²œ àNá@HiøÏügþ30ö۱ߎýÐõëúuý@ç΀ֱ­c[ÇÃ{<ì10¾j|Õø*€›¸‰›à¥;«;«;‹ØE±‹ba^Á;ï¼(üþ ÿwWˆR$ým£÷Eï‹Þ±?²5²5²•d»n›$ï•÷Ê{Âc…Ç Ö+Ö+Ö+€h ¢ 6b#6 ËÜeî2)½)½)½@WZWZWp&éLÒ™$`xäðÈá‘€%Õ’jI"&FLŒ˜¬ï]ß»¾nSN´L´L´ì²'eOÊž`¿5ÖkýÛFììÛÙ·³í¿0ãÂŒ 3¸Û¬ì=ö{s~”åG9w‡óA:HéÓq<Sþ¦üMœÿIü'ñÏÚ÷ñ}|ç<Ïžgϳ?ko;Ûv¶í,ç;~ÙñËŽ_8¿¿åþ–û[øófuó¸ù(öaö‘PšGóhÞÓ©p'qÀ›xoâ|q¾8PÉ*Y% ¯6¼Úð*Ð8¡qBã`ŵ×V\{:‘͑͑ÍÀôUÓWM_õ¬]¼'ÞïªAÕ jÚ…v¡Ï›Š¾N_§¯ÈArH(F £„Q<ß2Í2Í2 Òvi»´)%¥¤Û±Û’M²Ÿ À×G¾>òõ`²u²u²Йuf`ƒl †C€!ð÷õ÷õ÷ª<«<«<CŽ!Ǽ2î•q¯ŒB B B ¼Œ—ñ2¸Ë½`½m½m½FHi ϧêƒêƒêƒÒáF¿F¿F?ž7÷nîÝ\áG8lr¿Ü/÷¨A j€:¿:¿:? ë\×¹®s@´"Z­x¶ª¦jªz { { œÏs>Ïùø!ᇄ€e«—­^¶X°$`IÀãy<p·q¶¦eMËš– m m mø@ݨnT7J‡E¬Â*¬ÚsZŒãĸÿýŸÒÔÒÔÒT90pràäÀÉB“îŽîŽî,.¯›çnž»yðŸá?àóÔyê<þÿŽCb€|ÿ|ÿ|@Yä‚ä‚ä@Ó®i×´ŽÑŽÑŽÑ€ÈE.rØå‡òCù!<¾*ÿªü«rM|‰/ñ¥7†ü1Ó®¿pý…ëïïVÆ*c•±ç[»§vOíž*4ôôôËÛÜ€ÎõÎõÎõ°×Ÿª?U yò(äѳHº¯ü½ò÷J ¥©¥©¥ øõȯG~=|ÿAþù@º)Ý”nvÛwÛwÛÁë²ê²ê² 244dÚµ?j§7”G”G”Gî­u¶8[œ-©NaÊÍ)7§ÜX«bU?ªýÔ~j¿•÷ÚóÛóÛó}v1³1 9r"äIô:êuÔë(xXwXwX7ˆz¡z¡záŽþ=DcÔcÔcÔ@¨>TªB¡ÆP#v>ì|Øy jWÔ®¨]°õŒìÙ3ÿ^Z_Z_ZOþCsRsRsrpOæÉöPz(=”e(G9ÊÁ#ÆÄ‰O¾ÔWé«ôU0ð5| _篫"K‘¥È"ˆ?v|ˆñ!€Ë¸ŒË° |6ðÙÀgðºj½j½j•…«ÂUáªÚOûiÿnƦ³élúƒMü0?Ì‹þ®4OŽÊÅwIÉ"YדéL:“ÎL-zžèñâ»Åw‹ïJ›{×õ®ë]’GòH,ð…/|ÿT‰JT<œ‡óp€™˜‰™6‚`#`wK©°´°´°TÞÖéìtv:Åc*…J¡R|™±)bSĦʰ{°‡ü &˜`’æ 111111Т}ècÞDOôDOÞø4âÓˆOXn^j^j^F-+-+-+']ë ë ë “·é§é§é§Ñå\˵\ ;Ñ Ñ@t‡’¼EÞ"oðƒüÀi5­¦Õ«ªªx\Ù™²3egè?‡Ñatmt.w.w._»´cAÇ‚Žièy$I®ít'ή2y2Oæ‰áwßy|ç1àHq¤8Rv¾¯õÖzk½›óêŠëŠëŠ…Ã%«KV—¬æq$™$“d¨Ø9vއhÞÇûx@$" ¶®†®†®|iœdœdœ„áÚm‡¶`ÓØ46mçûCÚntIñØ_ìþ÷‰¹~IT®ªëˆ„ÃCÚ•·‘hM¢ã–ýr”]qnvnvnf[×±ul£³"EŠ<«eµ¬4Œ†Ñ0Ø¥4)MJƒêãàƒ?–C:¦wLï˜.Ô«'©'©'žÁ.p!õËfÙ,[<†´ Eúo·D233333aqG®†§riw›K»Ç\Ú-¤±4–Ʀ!‰H¤Ç‹ÅÎb§´ÙœkÎ5çƒRJ)EŸ;¥¶R[© ´f·f·f õêÝêÝêÝ÷¯ÚÛìmö¶ÝÕ/¬_X¿pºæy¸Ÿ¾&ÏßÚçx¸T")H!W&\žpyÂåÃËÕÕÕ¿ÌìÕ;ªw”h¾˜~1ýbº¼Í•w¯ñ©ñ©ñÁçÕÕÕä5ZZZ€²@¸õ{1^Œãm¯EEEÑ×z¯ºJÛó\þÄ\—LrUk¸’+¹’üWGxGxG8>“_”_”_üQR©‚TA+wÎíœÛ9×ç²ùùùÿðÎw¾¸ó…<³ßÙïìw )ŠYŠYŠYÛýy.Ïå¹ÿ¼ TP MèAzØh÷ ¸%=ÏCðö'ÚÍ@ JP"ïáE¼ˆŘè%z‰^ú6hpÙà²Áe,\‘­ÈVdÓB¢($~S|)øRð¥ù1 ¦Sƒ‰üóe¾Ì—Ÿqù-vüÅ_ØsÚîÒî$#Éâ-²l ¾ æ%¼„—üã ÍKš—4/ÑB‹Ð"´´½Ä°ìÀæÇµkk×Ö®†äòçN,mÅñÿݱ*µ¨® IEND®B`‚routino-3.2/web/www/routino/icons/marker-8-grey.png 644 233 144 6054 13061246465 15554 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü áIDATXÃ…—P”ÕþÇßç<Ïþ`—Ö²]á ‘™ò#´,6јñE'£Ag\S¾Œ?(#­%0âzÕÀ±‹HóUAIAÕÈà¢7,Ä(È"nƒ‘»°ì³Ï¹°:Þi:ÿœÙ=Ïy¿_Ï9Ÿóùœ‡F£Ñˆ˜j#S]È÷ò½|/k455e9ƒ9ƒ9ƒK¢˜/óe¾Ÿ¿+h­ ^ç¨uÔ:jY>á‘,D ºÐ….ë°ëX¾â ÅŠ7HßÏ÷óý?"Ãd˜ X’­ÉÖdkÎÝÈMËMËM#Bˆ"„Ä)±ÕÍ5ƒNÎÇ|̧ÇÄ1GÌ['m“¶IÛã19u9u9uÇ,“““¦ÛçÚçÚçF¿¯.Tª ѽ8zqôb’+‹•ÅÊ€¿¿?@ú-KÏKó%½i}·Ÿä/ñH|¼{_`ÞÌ›y‹©d-YKÖ†r!\òm©­ÜVn+Ÿåçoò7ù›\[w-îZÜE³;fwÌî IŠ,E–" v|„ðT°Ã;€5Xƒ5žÀxvG #Ј¤Ž–Ž–Žæ<q>â|„¸õÞÒ{Kï-}{*D¢ Y t­u­u­]TÈ ÌÀ ½©ô*n·‹Ûűq6ÎÆ½8OΓóü6lÒ:i´Îºª{M÷šî5aþzÇzÇz·qjňMñ¦âMÅ›Øv]€Jdy,åÇS§OÔêuÖ“Ö“ÖÌ‹Ÿ?/8©9©9©‚‚‚t¢ûŽ}Ǿ¦õÝ~’¿Ä#ñQÇ}Ç}Ç}|\\\€,íÛ=¶ÃÎ2XË Ø€ .á.M ÂÑíèvt£c£c£cÀÜž¹=s{€.‚‹à€ø#ñGâ®Í®Í®ÍÀàÄàÄàăùì%ö{ ô%?É_â‘ø(vav‘z‚ž '¦u¨A j¨¡†ÀìÁ€Õ°V(¿R~¥ü x~æó3ŸŸ Ô_¨¿P(Ë.Ë.Ëг‹³‹³ÐþÐþÐ~ *.*.*î(5R#5àÁƒpWqõ?}‡¾CßpqDPNËi9-;977‡!SÈ2Á‘&ÒDšÀ¦›Ð„&€,'ËÉr˱Ë›Éf²™•]eWÙ±MlÛe£²QÙXXX¶X[¬-ö(JQŠR÷q÷ÒMºI7˜{”³]±]±]A ¥¡4”¤Êe²@ØÛ£éÑôhØÉë%×K®—xOãiŒ‹KÄ%‰VðÀ§cWÇ®Ž]ÀÚµ?j5PV›V›V›€÷¾ôý£¿ßÇï¾±~cýÆúÐÖ»˜‹¹¶š­f« aC¿½ìö²ÛËó]ó]ó]ü]Ù£ìQö{)R‚”ìC¼‘7òF’uÎïœß9?Wèȳ#ÏŽ< US5UO§§éÆoä7ò@hÀV±UlÕC õ¬žÕòËòËòËÇs<Ç?4ÞźX@Î3ä Bª*¤BUo®7×›ÅùÄLÌÄŒqW©œ444çíëåz¹¾¼ï^̽˜{1ÜíªÌªÌªL×·®7ù™üL~†C2Ò]Õ]Õ]‚üƒüƒü¢3EgŠÎÇ%KòvæíÌÛ é‡ôCzàÅþû_ìhë+P 0(¡„ŠÚÏj?«ýL´÷UôUôUÐKò}ò}ò}?¿å´8-NËV'ùø—ùøíhGûߊdƒ²AÙ`«ÇXÝXÝXÝ,Ã"E‹<ØË‰•‰•‰•¤Ù\ãÀÈxÓxÓxpqÅÅW·{o÷Þîf¶Íl›Ù,0-0-0šBM¡¦‹Åb± èºöëY׳®gaeyayay!ê=îxÜñ¸3±”qŒc\ôÊ©¼{s§÷Ò{齸ˤŒ”‘2k2TPAu=QvZvZvzM\ïÒÞ¥½KÙeM½¦^SOFñ?âââÉ[å­òV ¤!¤!¤ˆæ¢¹hˆŒŠŒŠŒ<ƒ<ƒ<ƒöû‚}Ðmt݆Ñ?¼þðúà žÇŽ5k.¹ .ƒË@“8gãl†zèÏ!ùÈçÝׇѩËÀc±Ç–Ä’XÀf±YlÀÌÌÌÌ9H’ƒÓ¡ãÝÙÙéÚ2¼mxÛð6¾H®W„Wäêòuùºü=ß"ÙÈ&_£ÝèI÷Q5,°À"ÜÀ&lÂ&RUUU½w¹r½r½r}Eî°ï°ï°/?R¥­ÒViÄ®»æ;H3i&Í9MN“Ó¹Cî;Vb%V‚¹Oµ¢ÍÜfn3³—Û϶Ÿm?ËíUkÔµ¦ob²|²|²üƒ¼Ù7²odO¿ Ûçˆjw÷'DOÑSô„ϵ_¯ýzíW`rÓä¦ÉMä©}Õ¾jßÞ]u]u]uÜÞÆ+W°—IÉ Pˆeb™X/xÁ `VfeV€8‰“81>d2™Qašcšcšõ€z@=ˆqbœ÷AÝMwÓÝ}ô=DqEîÜ("B÷'‰Bªî¼»&˜`rm!óÉ|2ÿååSŸßžv¦;ÓéâÆ·Å·Å·EºpöîÙ»gïÆb§Ø)vBE#i$„CȲ„,(„?îÒ ÄÄÄs·”s”s”sö.˜:4[/M2¾È½³ïI;–›››››‹QiEáþc:†Ü±»Å»EîØ­ù¯ØuÖ9ëœBúHÉHÉH T”RJ)¤Ô®87~nüܸhï+î+î+æn)w(w(wÜhpÜuÜuÜݱçÖ+·^¹õ à uÏSI€Ó%´GP¹þåŽÝÓÿ»Úaí°–©4V+®-ÐA|:ü:ü:üp¸årËå–Ë$UÕ©êTub¨*†nlåWñ«øUãχņņÅÒûn¿×Ýýø£\þ¤%$$$$$@*&“39““ÿxjà©§ðÿ®']Oºžü· S„)Âþwÿo‹~[ôÛ"¿ê‘›#7Gn²\;ríȵ#®ÆœcÎ1'·I¶P¶P¶03•°Vr¼ ( ànOÕzñ iÜ %<ÊCðíOb7hD£+›Õ²ZV›ÐMOÑSôÔwaË&–M,Ÿ’ËŠeÅô&gà œáü÷á§ÂO…ŸZ’`î6w›»ÉYñqñqñqVêÖ­sÚÿŒƒâ/Ú#±ëN®ld üO$¤‘´ ᬑ5²Æ×x{{Ó›œ…³p–»Áâçâçâçé¿v¾ÕùVç[À ÂÜzÒÅrü¯8þMî‰!¦ä×IEND®B`‚routino-3.2/web/www/routino/icons/marker-37-grey.png 644 233 144 6306 13061246466 15637 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü {IDATXÃ…—{PWÚÆŸÓÝsáâ0ŒC$ø¸(‚„× DŒˆ·è’-,JKŒAãB%Ñb„h?(À$\LeXV A$`$B$n L&rg'B†a —ž>û3˜JU*ï?ݧûôûþê9O÷y›$%%%%%A޹ÐϘ \/×ËõÒª¤kI×’®Qeò/É¿$ÿ²Å‡ÚS{jŸö&ïÌ;óÎþ‡§Ë§Ë§Ëi*ò‘|’oxÃ@:Ðà0ã0M•ì–ì–ì&‰Ü7À <Ê'£d”ŒžÊS9©œTNw[S¢R¢R¢È ïÆ»ñndÛ‡ð­™KÎÌ!AL‘,$ É·333Žk’+’+’+Š´3ƒ3ƒ3ƒ5ÿ\5¹jr•ÿ?m2m2m2QéêêJD¢°F±F±FXÆ–û–ù–ç-ùæó›ëYê[x,|œYÁõTFeT&D’Cä9ä–ɺ±n¬Û½+………®Š…5 kÖ˜âC;B;B;˜Yßfßfßf²]’(I”$bïâ]¼ kLb“àx/àLN»L»L»`{s}s}s=ýÚûkﯽ…ø‘WF^yå¬Ý¬Ý¬ÝÖIM‡L‡L‡6gÒhM£{# ˜õäÌÔ™©3SêQz—\9WΕ×ÿgÆ8cœ1º†»orß侉Šx;â툷¹"¹AnàŽEX„Eà©'õ¤žàЉNt°…-lŒcã¼à/€t‘.ÒÃÆ08½L/ÓËÐsóòÍË7/ó‘=u=u=uÜC±•ØJlõä¿›ßÍïÞ¸±û~e¬š¬š¬š‘R¤)?¸?ygòÎä×p÷½î{Ý÷òÛ££¢£¢£¸‡v#v#v#Xd 7…›Âa°GØ΢é!=¤ ¤4ð„'<´¡ m€ T‚ ßÀ7ð €ÝQ»£vG±È’ß}§ûN÷üvK} …$W%W%Wm[3Ó4Ó4Ót§IfdêqDwDwDGšäyò¸ø dЇЇЇ˜ Î Î ÎEh©O©O© r¹ˆ\ÎîåxÞƒ÷øËûö7ìo Õoß¿5$FaÏ(£ª¯V_­¾ ÜϾŸ}?id™ÕŽjGµ@ØÂ°…a `L‚ Pv®ì\Ù9Àh 4ÜAî w Fb$F`$r$r$xK÷–î- € @ì«ðUø*HNípípí0R'B&B&Bþr c c cBjѺ¢uEë¨%&,'ÓÝÓÝÓÝ”&Ä&Ä&ÄRZWYWYW9?6|ÞðyÃ甞ÚtjÓ©M”N5O5O5SÊgò™|&¥ÆãÆãÆãÏç—Ü)¹Sr‡ÒÏl?³ýÌöùua°NøM} …ÃyœÇyâÍ\g®3×ç$¡ãtœŽ¬+ëʺvØy`'àðÃwß-×Z®µ\Z·£fÔŒÔ<øa⇉Ð͸3îŒ;-a¤¥¥ùôn§n§n'Z¢^­^­^ `9–c9ŒÆ÷ŒïßZŒ-Æ#`Øþ°ýaà¬æ¬æ¬ˆÓÇéãô@ßÄ7ñ@KZKZK@dDFd@Ûž¶=m{€gÏ žA\ÄýFÉ0FÃô£ý0öìêÙÕ³ Ðôkú5ýøi·´[Úͧ3ˆ@"Tù\—Ä%‘Ä»éwÓ鍊ÜÇíÆíÆí`mŠ7Å›âaÈߘ¿1# NS§©Óž"¤ƒtÜn· ‰†DCÏï?j|Ôø¨p9érÒå$ O'ÈÚE»hÀeŽ2G1ÍGò‘|$¬oknknk„ ¢!¢Á§ÄDLÄtEÌ(k•µÊÚ §Å!âqHaŸN¤éDlOñ­â[Å·Lq .,¸°àdacacac˜.k,k,kTZ•V¥®ˆ¯ˆ¯ˆµukëÖÖ^z}èõ!À?àð€.¿.¿.?À«×«×«÷7J.£Ëè2PóÎ%)?W~®üœ0ÙWÜWÜWÌ<gˆ3Ä÷Íjgµ³ÚøYræç3?Ÿù@#Ѹ8K4  |k5^8^8^è½ùéæ§›ŸÒ—·=ÙödÛR«½¨½¨½:â4â4ââ¸Þq½ãz`qÏâžÅ=ÙJ¶’­ÿ˜Ì?š‡›‡›‡×R×R×R@ž%Ï’gÍóNþtê§S?Âß ³ ³ ³pÛê‰Õ«'S¯P–²”õÿ;–b)–¶½Å†,Y²€m"¤€Œí…"ˆ~Ú&z z zp °7 7 7€69ªÕŽjbðRy©¼Tø?å=å=å=ˆìvØí°ÛpNÂç›0!L(Ý”nJ7@â-ñ–xDADïö¿ÚÿjÛ¢Š¢Š¢ þ¡)ÚmŠf¶³ì;qê_AB¾ÌB*R‘ʹ˜Ûy‘¼H^%Ť˜CÒ iÐ4hèËß4~Óø ›nãdãdãÔ75S8S8S˜p¡UÕªjUTC5T;s«ÐIóñº`+Ø ¶°S?U?U?fbgbgb.ØØÛØÛØ÷^ï¨è¨è¨`Ó«^«z­ê5ú29FŽ‘c˜•¥°‚¬:FÇè@xÂÆgšgšg׬¨YQ³v6ƒ6ƒ6ƒ€( ˜KÌ%æRß“Ïä3ù¬ÙÅt›ešïgÌ¿$óмDl:jPƒS "A$èåWç~9îÝš™™Ž¿!¼!¼!0|/ù^ò½„ÝB»Ð.´ÃšYÊ,e–bšOäùDH>öüØócO“×àÚÁµƒkÙNé é éŠôus/MüC!GÈr¸,óÊþòb))))))0X…ù¼‡ÌÞ3{7‹d’L’YûÅÜK_ŽhD#šÉ®˜­˜­˜åcôyú<}¬†ac%îïï…ɾœ¾œ¾¶SzZzZzºµrºººÿôG[;·vnÌ€îæç¬-€¾yÐß[&X›<0{÷–O™O™OYú«Ò#Ò#Ò#Å)£Î£Î£ÎœþFÒ¤I¦8ówÑ®YѬhVà_õMõMõM$ҺݺݺÜwÁýø·ÜëÜëÜëÆ¿zxx0:s½æ£ñ÷\,þ ‚ƒƒƒƒƒÁ›‡ÍTLÅTLŽ.\6¸ Ÿ›–˜–˜–ü——xH<$ËÚ<´yh³¢LߦoÓ·ÑÕWÕWÕWMëÇgÇgÇgÙXÑÑцw\hÍ£yÿ®„HØè ƒNxÁ²f¡øßóüIüw“Q…*T™T´œ–Óòà.¦”)eJ¿ñ˜Ú5µkj—°L”#Êå0ml4ÍF]çYêYêYº%XÓ¥éÒt‘¯GÁQp¤WÌy+Ì€“ÄÁàOâwÞ5.L*Ã1ã‘(E¢î{Ò*ZE«N°zÉê%«—˜6VËjYmÿKBš&¤ÅKciü3ŽÿŠZ*Ÿ ¢ƒzIEND®B`‚routino-3.2/web/www/routino/icons/limit-12.5.png 644 233 144 3050 13061246472 14652 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÝIDATHÇÍ–_L\ÇÆÏîðÚ–ˆŠˆ°ªÄ–b9ÀU–Òš4Á‚&H€,\’ÈÁJB¹URÇVŠñŸV`Kux0ÔàZÞ¨2°[µå–‚qd²ã Qs°»³w~}X.»NÕwŸ—«3çœïûæÎÌ™×êWÀþ°ýa{Z̷+_W¾é£˜< ¶¶ÿzÒ;Ò;2º3ºÍ/ã¾·òëEâø‰|Ö¸¸$>r6å¬Í½ê·Ã‹/¬ûIÌÿã 8Ï9Ï-)x¥ï•>€O|šWaöóÙϾs熸oÅ­|«ÞÂKÄ—öñ‹ÀŸ>ð©íkHINI¼²¼²ü×c Sùð|Åóß8¾qh;D賓j7```Y0Á·â«ùV½…gá[|L@fif©TÖTÖ8»b_þZs[s-¾È9à Ie( Z­%zP`Ãqߊ[ùV½…gá[|LÜ»¶‡<U‘ªÈš ¿YIŠ$~[ÝT7±"Ú¼j^1¯€úZÝT7Á\1WÌþ× BGîw‰nŽ4Gš!ZÃçPÕsUÏYyâKiˆˆ<ú!8'œF|åùÊÑ)vè3*¨‚,[<:¨:´ÓN{‚€àè½¢Ž0Â0Ï<óúýËè>Lú'ýNÃiI1a~¸ú§ŽAÓþ¦ý }æckþÃ`ç`'z:sÚ5íŠó]¹6rmŽ>røÈa¸~ñúÅë±½¦jTªoƒ·Ö[ G}ô£o ÿ\slDZ`-¾æ'›Ÿ})¦G{““=ï÷¼¿ö_Îfö ô rüÂñŒãèw÷»ûÝ0<< Î"g‘³<›<›<› ¯*¯*¯ ÆÔ˜Sq}s{æöÌíìÂìÂìB¨üg¥¿Òµ©Ù^³Ð\G¸!Ü  7Ò½;¦Ç.ö´·ÒÞÚú„4–Ž—Ž‹,"bë’yGº#]R232s2sD›››EfêgêgêEöÚwjß)ß ß ß ‘ Y²6d‰ŒEÆ"cY³QߨoÔ'b”åF¹ˆ´J›´‰üjä…»/Ü•”ì×’»’»l]øžZzjIÄöÛ´“i'·>!±1c£9Á@0ÑÒµc@Ù¶²meÛàÄĉ‰ {ºm°m° a—Ú¥v)P·Ô-u+ž7d C4¸Ü nèîíîíî…¬c½óÐ;ð÷úϾøì ‚y<ò8D¯nœÞ8mŽÛE›}fŸm\DíT;E$YDD2­«ój@ ˆ¤Sƒ©A‘ÛÎÛÎÛNO‹§ÅÓ"R—Q—Q—!ÒYÒYÒY"¢U£jYÈ^È^È ŠÅ"ù£ù£ù£"»«wWï®ÉÕ¹S¹S"Áôo{¿í•L¥³D¤ÙÌ5smãv±ÏÏ^½"rÉwÉ'"?áåU]áõ²~eýŠHêLêLꌈ¿È_ä/1‹Ì"³HÄÛèmô6Šä]λœwYäÌ–3[Îl©ªªɹs!ç‚HOKOKO‹ˆëç®bW±HÉO·/n_”pío^zï¥÷xYä“§?yZıþ‡”R®^I<•mMmÀ߬Sb~`~ÿ1¿Ïþ>ÞN 'Ahohoh/Ü1ï˜wLxÞ€f]³®Y,//ÃÂÜÂÜÂPA>>>wíóKóKhݨTZ n>F ikÓV«Ÿ«o€sÖ9k$Ádt2º¶Ev€YoÖÇû"Äÿ7ãž+ }P¿«ß}R÷ë~]  XÖZÅÿåäÔä€sÁ¹`$ñï{úXBçWÕŽjG¼óãRãj茮DWˆð{úèCëôi}ô¨Ñ# ûW‰÷ÓJ+è°^Ô‹ÀbL­Ñáè0ý5«f­•‰øa•/üãÎÿÞ•÷íëâ¾}ÝŸ/ØÿÍF܈vÈ,XIEND®B`‚routino-3.2/web/www/routino/icons/ball-0.png 644 233 144 213 13061246467 14202 0‰PNG  IHDR °ÚSbKGDÿÿÿÿÿÿ X÷Ü@IDAT(Ïcüÿÿÿÿÿÿp\2ŒŒè",Äi$d##q &Ò\‚Û…ÔvÕ ÂŒÒ-úÑ]F|:\žª6»dIEND®B`‚routino-3.2/web/www/routino/icons/limit-11.4.png 644 233 144 2627 13061246472 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜLIDATHÇÍ–]l”e†ïoÊ´ ÔÖÖ 㦆Ð,i¢ Û¸ÐÆ©’J„b,¦I J­áÀF0+ÑfI”×LH€&”Ô¸CSÒ¤Ù&2ˆ)†"Zô´ÚŸ@µUéØÂtæûÞkf¾™Ñ¬‡<'“ç゚yŸ¼÷÷ $Iw§~ž{=÷z ’¾ç¹L|ùcË»ÿtÒÿÀk§µó›@áû…ï(:á|—ñݼ[ŸÝ/eð³ùܸîV&÷QÞGVuÊžªxªb¹?é¿_·¯{>Ï÷<ßp¦ãL/Áõ/¯ ðKõ/Õñݼ[ïö»xÙøzûüx?ó~f}y¹y¹ÜWs_MÙ+É‚‘2xâñ'˜Ì™Ì1°òÉ7Õ@”(®Ídùn>Uïö»x.¾Ëçò'ç”T•TIðäÓO>í;žløî¼¶öµµ._¼8Ìaò!MDìgìgˆ ›0d|7ïÖ»ý.ž‹ïò¹üÉyôûݾ º+¾+žè¼S÷ƽ`ÚS‰)ÜŒq+œ*g›³ L›i3mdlŽYf9·ÞyÖy–¸)·[ìpÊ’øP¯z?¦øÓ«ŒJRù{à»ê»]ÃáØ#ÔšPâ·Äo,¤ 1b`Ú£ö(˜nÓmº³ЦVy›ÛÜΊ—SN9˜¯íy{>WË|¤/Òà‹ú¢ÑeÉÁÊßKÔç ¹µ¹Ìœ\¼p0|*| 3V/øüÁ‡EwÝå ÁÌÔÌØUék@MeMeM%;xìృKWùÿòÕÕÕP:]:]: ---pÿ‘²eàûÊ©§>dnÖݬÓ\ØZØê ydœ§Ç’;;%åJ’JÜnâfÑ,JшF´ÄÌsÅ\‘¬²B™øU7VÝX%±šÕ¬–6 lØ4 ]þôò'—?‘&þ=¾|¿ôíþ¡ü¡|•HÖ´5-Ñm7ÙMÖÐ2y¢DüJ:{óìÍ»µ®A boꈮ|yåÞ•{•çMx½^ïÒÁVWW%ß„oÂ7‘‰o¯Ø^±½Bêõ‡úCRÓé¦ÓM§¥“?Ÿœ<9)õpf÷™ÝZܱûÑsžãEçDg¤3bÏùiaÆÁ¯²oå›ÍoŸº·Ò9⹿Ï5Ì5`by1Å´tUsëæÖÍ­ƒØ¡Ø¡Ø!à—¸³í³í³í`7Úv#˜]f‡Ù·þrëá[c~œ.¥øìæ7šß¦“óÈÕ ð]÷].ƒˆ±Ó¼µà4:Y:FRÇþ´-²È"0›ÜySjJYHIt-ñÈùÈù,3¿Ó±,åOÔçÔçd”"’ˆoÙ“öäRå§„bŠvÚiOå ˜I3jF‰´ò¿à¼@œ·ì/ì/€•iåÏ­ÏbTþ;÷[yǾ.îØ÷Øù‚ýj¨Æ¥vùIEND®B`‚routino-3.2/web/www/routino/icons/limit-178.png 644 233 144 2662 13061246470 14612 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜgIDATHÇÍ–]LT×Ç׌ÃÀ(b'hcRHýJj-µE‚¥qŠsI“;픯ÖÔ>”jˆØú‚)‰¹~Ô¤Ò¾jŒ1p«iÄJ “’I¬Í¯ |$x±¦ˆ`‚xpœaÎ9ûׇas†ÞöÝõr²Ö^ëÿÿçì³ÿg ˆˆÈssOw¾;ß“ÊÝûœzÖÛYo¯½˜ÊÏXàzßõ~ß?aYò“¿Étr½®ûÓçEüt>]—çÄ)d¶f¶ºJçò/`׫»^ÍZ‘Ê¿ê_›¯í‰ û¯î¿ påÛ+ßrÆÿ `ªtªœ\¯ë~=¯ñÒñå‹?ð‹@FgF§ë>dz3½"ðbÙ‹ek>K5üo „CáÀo‹~[¤Ü`MÙd«RÀÀ@Çô\¯Ïõëy§ñ5ŸæOéXþÖò·D üƒò|©ÁÃá¼Ãyš/Ù|É—dƒi˜€õ¡õ! Pݪ.pr½®ûõ¼ÆÓøšOó§ôȽýúo°3kgð yìeö2°7%¿I~CREÕ¤šD±”L2Á|bΘ3`íµöZ{Á´MË´@ýGÝP7@­QaF™}³¯Ì¾BRy“$ç_pò&‰ ³Â”æ—tAëë±}£¾QÃCö=?ùwë^²$YBLµ©!5„Æ‚-„1bNªle+8É1Ž¥õ}mÛÅÄÈMáÃÝü»ùÀSß/¾_ Ö3'ìÌ ¨:ZuTOÛ¯«h²#ÙáðDWFýQ?ŒvvvÁ˜gÌ3æúSõ§êOAS¸)܆ Æ/ ÃHùHùH9 ôôôCÝÁº}uû ¿¨ÿ½þ÷PóÀ×R|ÌVÕVÕê­=scNØÏ5ô´tµt ªì){ŠDëó­Ù­Ùà6܆ۀö“í'ÛOB_°/Ø„ÍÇ7ß|±@,ƒœ9r@ÍtÍtÍ4¬>±úÄê°gûží{¶CÞy?äýÿýþVøV˜Äœ¼JûÇæÎæN-ìçHÎõœë…[äI 0P("ŸŠˆ¸Éâ>÷Eä©LË´ÈÊÐÊwV¾#b )ˆD ""=Ò#="Òiˆ4DDЬ"«È W‡«ÃÕ"—&/M^š íííŽß¾%òtUâ…Ä ’™ú \ò¯À¯_EäÍ9=à_ê_jÀÃч£Î±·ÊÌ×ÌלO£¬ ¬ ¬Îž?{þìy§>>8>8>¶mضaŒœ9=r.?¸üàò(ÜX¸±p#§‚SÁ)X[³¶fm ôÿ£/Ðpø”LŒMŒÖã±Ûív×€(ó]ó]ѱ\2dDFæsQ‹ÕbµXÄvÛnÛíÔ/ûân‘ܿܿÜf‘üêüêüj‘ÆU«W‰”Ü.¹]r[$âø#~o­÷sïç"wfîôÞéuøTÕìµÙk"Z[Ä(5J{{Ľ½®ûøD6¨ •!³º²¤rIå’Jo‡·ÃÛáëÞÔ½©{“HÅ`Å`Å S¯ Õ…êB"Q#jD ‘Üs¹çrωlqo™Ý2+²gfWï®^Ï'‹&n¶Ül™×óW§’N³ÅlqNåã7=.‚ø@| >àlå£#Ž<:ñâxq¼˜ÿ‹øL|&>L$& ^RADµßÚÜŸã›ç_p*×׃oÜ7nx`Ȳû#û£t‡"¡ÏÒ‚8Ä!¥ùØVµUmÕ¦¾SߥÕ›Uf1^ž÷±õw×ñ?õ±?qþ¤v~ëžuXaÕZµ$9J -Žá#‹,àØŒTÇÇÔQ‡RÝÖ:kI®Z‡­ÃiÎoíôìôè7µÀùŸÙå3{»xfïcÏæ öw’BÐg52à4IEND®B`‚routino-3.2/web/www/routino/icons/limit-11.5.png 644 233 144 2700 13061246472 14652 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜuIDATHÇÍVmhSg=7išF¥­¡Ñ «B‡è(¢lý¨´Åh·ºµŠµ¦T×i±s(¢¸Á”©‘é§©((Y;´ÖiTGS•F*n­¦Áˆ¤Rkµ·mHrï}Ï~$·‰†ý÷ùsyÞçyÎ9÷¾¼ç¾ ™±'HÃLÃLCz47|_O+M+ýì÷h~F%¥uÒº~"3Neœ"É©¦^Ðzã¹^×ûç8~"Ÿ¾ŽLÄÌ—Í—¥’X~ˆ¬š_5?ÍÍq‘–VKë˜Bn»¾í:I^½xõ"¿# < Éá’á2žëu½_Ÿ×ññqè~€4Ý2Ý’^’æTs*@Î^5{UÎ÷ÑoY¾¦| Iú~£0$©’œÂ)¢„¤L™z¼NÈõz¬_Ÿ×ñt|Oçê™UœU kk–óÑÞKäÞì½Ù:_¤•d8…TdE&IµF­aˆ.á"IJ”Èx®×õ~}^ÇÓñu>?ªïïíq;åõ‘õ‘ A÷µâˆ)b"Åa¥_é§^z‡V¬iE¤8,‹ÃL •*Ià S¨ç§Q?ÔGêIumŸÇ×µþ+]àq{|+e˜w’´<·<—SÈ>{ŸT½$É2Ñ¢Œ*£Ÿ  1Dª/Ôê R´ŠVÑš çßñ]Bþ„Oø„d€HRÌs9{µ2ÒsßsŸ$-²E–S¢ÂæŒ}©3dݾº}¤h'Im¡Žërº.¹.Qø¬¾t_:“Âåt9]NÒgõY}Ö亲IÙ¤l"[¾i©i©!Oo8½ûônŠsŽÆ²Æ2R~­óÕ/©_BŠŽ¨Ú ÿÎÙŠl€diÑ[s[sÂv¿ý‘ý¤®G]Ý]ݘˆæêæêæjÀ>Ã>Ã>pç»óÝùHŠáÂáÂáB`ç“Ïv>îüx§òN%$×ÊÎÑÎQ„ÇÿˆÔFj¥E@IgI'€ß¢zR`Hߟ¾?¯Û‹{Š{¦€t!c†1°¥Ùœ6'À®á9ÈA KãÒ8`k´5ÚQ!*DE²0w»À]ȯäWò+{q€¯gW V ÂüÉ…ÔÎÔNé<Û—¾]ú~H?›~6¯À€/ŒÆFæ¦S –†6ª–W-rçäÁŽ`G°#Nè¸é¸é¸ äŽåŽåŽÁþ`°?Y˜õ¶õ¶õ6àp;Ü7P¾£¼¾¼صxWõ®jà¯-wß}Œ!iÕ´ÕÓVZvÚ™k€Ð®k×¥@Y§¬ ÈÒED„E€^x“‰ÅSñT<¤©Ej‰¯l[Àø{ý½þ^ §+§+§ ØZ¹µrk%-²½Ù^àuÆÐ•¡+ÈÄt1@½–­eK=ä•òÊî‡@G{G;€9ÀÚ~xòÎɵ“kS©©ÔTš,l’s’s’°l±l±lè£> |Aù‚òÀ,ÿ,ÿ,?д§iOÓ sufaf!PôéŠÑ£×ìØxlã1Ö×–]['ÍAs÷ÃÄSy îÉ?õS¢ÐN#+FªGª)BæBH>u#sFæŒÌ!CCCIz衇JJJ#ÙÄ&6‘á¶p[¸4Æcb»bU&N±¶ýuyuyºŸé„î¤eÀ2 §Õ£Nð–‘Úfms‚1êcÿò{¿(ŠqD!ÅYqCÜ I1_Ìç¸ø5†ÿ¥Çëñ’¤ååœÂßó±çW*•ƸóÓ¦xÉŸU¿êOv~fÑJ+É£<Ê£±š ÅKÑ'úÈØKîUï©÷+Ê€¾3‘ûdŒ/ü¡ó¼ÿÊövñÑÞÇ¢7ÆíûZõ]C);bIEND®B`‚routino-3.2/web/www/routino/icons/marker-46-grey.png 644 233 144 6162 13061246466 15637 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü 'IDATXÃ…—kPWÇÿ÷v3ÃÌ O1”ÈÄÊcÑht}e4;nù eE0²Æ2/)ÊlŒaCD+nÅDÁG +™ Џ(‰¥QÔ)@D²†D˜‘À ÓÓÓw?0©l¥r¾tÝž¾çüúÜÿœsšäçççççÃf¸Ð¥|ßÇ÷±†ü/ò¿Èÿ‚M/,,üs4óc~ÌïÃb°,Çf8êuŽ:v•¨D%Ɇ:èÜÃ=Ü d°ƒÊTeª2•dóü?p³’Xˆ…XöV]ê(J+J+J#f1L ÃÈš é[7—/\„EXD«¤B©P*”¾Æ„1a,0®ÐPh(4Tõ fÁ,˜oØØØľ£)Õ”jJQ»"vEì ’ïïïÄùÇùÇùòZþ]~^Þ/û›ôïŽ'Ç—yd>ÞÁ%Ì›y3oi ÙN¶“ía¥\Æ…]>6vrìäØÉYþ®·VÜ[qoÅ=êœkœkœk$/(³•ÙÊl؃ä@ l°؆mØ`f`lŽGˆ#/[Œ-ÆælÒ5éštÒ[C+‡V­Üü±:L¦[ìéÚîÚîÚ¾¼”¥³t–Þ·…€€€.!yãyãyãZЂ–)|_Ç×µœì‚]°ÏZ«]¦]¦]&.Ò¿¡Cÿ_å;â;â;-¦b*¦Bd,‚E€G7ºÑ À ^ð0ŠQŒˆD$"ÒCzHD<Æc<oõ¶z[½q¿æpÍášÃâ–ûWï_½•¿®P)T Õƒóbª˜*¦>¿Ïãy<ÿðªjSµ©ÚéÓ=¦ÿãŠí¼í¼íü¬µZ½V¯Õ‹/¤§¥§¥§ñ×}U¾*_¦J­R«Ô:™1¡E(@bH ‰H?é'ý"Cd sÈ22¥L)¼+Ìæ |L>&¦ÊþµëµëµëÅäø2ÌGÅQqT]'œÎ çÒèôz®¯ÖWë«yY##l6›ÍfÛ&К°-l Ûýd?Ùà2.ã2žÚ³xÏðƒüz€ ®ëãúVÆÊX¼eÿú}ƒ¾¯ x9à倗Y¸Ì#óQ¦c:¦Ûÿ²3É™äL’o%ßJ¾…¾Ç}û‡Bº&]“®Á›4“fÒ ñˆH‰#q€©ÝÔnj,w,w,w~Ú‹^ôc1c1c1@»£ÝÑîºÛºÛºÛRNÊI9À¢Y4‹†·o™o™oÉíÉíÉíX!óÈ|T ÃÅð?½æ÷Øï±ßcœ—4/i^)w‡SÐ.ÚE»¶†­ak´¡ mÀÝWï¾z÷U ÔVj+µÖ?Xÿ`ýSÎÁ#ƒGG-G-G-@ý×õ_× |ÖúYëg­À)ë)ë)+@:Hé˜Ü¦˜ç3Ïgž)—yd>êv ;†ñ¯ÐC¡‡B![•«ÊUåÂÆö±}lx¦` ¦Hi €y‡y‡yp.æ\̹@£Óè4:€[É­äV>­O­O­O¦]šviÚ% w(w(wÈ(Í(Í(§Nœ X†,C–¡Ém¼ê¬ê¬ê,l2ÌGñ>ÞÇûDGÏÐ3ôÌä% d, ¯WÈ+€°XX,,ªG«G«GhE´"Z¨£ÕÑêh`¢þ=„°^·^·^˜˜˜€Úµ;kw)R¤<üüüi—´KÚõ4>ÝJ·Ò­Žâ(Ž傹`.˜III@¯¸Z\-®G{i/í“wÖ½Y÷fÝ›@ o o /°nÿºýëöÎÎ΀G›G›GÛSP±[ì»»Ñn´ /^4Óƒ¦MÎVž­<[ Xº,]–.€–Ñ2Z6»5vkìz©–j©–¥ž‡<yKzƒzƒzƒØÙö3ígÚÏ(E)JaÀ´ÎlÙ:øeð—Á_ª÷ªÞ«zÀaÆa IѤhRÆ Æ Æ —Çåqy@rNrNr° sAç‚N`CņР‰%±$èÛÚ·µoëäûÙMkMkMkÓ#Ó#Ó#|äÙëÙëÙ+–ðÐC}A%ŸÂ§ð)ÿÈmz½éõ¦×]ZF§Ñi¸û^Ïy=çõFâ|â|â|à-è Ä<1OÌøN¾“喇ÒEé"0¥fJÍ” øJð•à+@g_g_g€$¸{ìǔ¡ e@ðžà=Á{àpƒª¿©ü¦ò›JiI&É$™^'I$‰$³’Oç|:çÓ9ÀàÕÁ«ƒWOüwlçØÎ±[C"—E.‹\æÚ“¾+}Wú.®ÄÝa…l!È›‘7#o°Y½Y½Y ,ÌX˜±0èOîOîOŽÇ9ˆÕbµX °ƒì ;,}{éÛKß[mYmYm©]\»¸v±d»‘{#÷F.U«©šªéÝNƒÓà4$~Bò~Èû!ï­hEë3eߪF/Œ^½0+}ùÐò¡åC,eÍwk¾[óù+ÖëŠéxØñ°ã!ðLó3ÍÏ4þQþQþQOµú$ÿIþ“|à¾þ¾þ¾˜–0-aZ"„!lwrîäÜÉÁßNì=±÷Ä^|£Ô‚Z_É8Æ1.öoˆB¢:wRZI+i%×F‹i1-~´Kê•z¥Þ킺YݬnZ–´,iYÂæß1¾c|§¸›ÜMî&ì”QF0Ï<Ï<Ï øÏòŸå?ëW?±ˆ|Vù¬òY,ÌZ˜µ0kpdääÈÉ‘“Pׯ­_[¿VÔ* €&ÃdxŸDI"Iì܉” „qy®ø‰¹‘ßOJI))ýOM¦É4ù­:¤#éô303­Y?²~5ùž|O¾Çˆ”(%J‰6a6ý ô&nâ&À"Y$‹$¤‘4“Zô>_u¾ê|•k¥ÞRo©ç˔ӔӔÓNEGG|(@9ô G\.Ï£ô£ýbvc7v“ºè¯¢¿Šþªdçkž¯y¾vªÈ` °ðÖ¯¯/×9 ÙF¶‘mpàà;ì°ÿ xbÌcô"½H/ByÍtÍtÍÄRZ‡[‡[‡¹ÍÍÍ”‡ãÂiá´púÝ: : : fb&f‚ÛËç2¨Í}=#yI^’|nÿxûÇÛ?Âna·°ûÝ4~?_ß™{†{†{®¤aCƆ ,…d‘,’¥tB:!ƒ *¨ö„=aO"‘ˆ°ÿlúÙô³ §ç7ÎoœYcÖ˜)AJÞý`BzÇÝR,›Àakä@äw’(ÝK÷q%hD#]{È"²ˆ,JY7ñÉqùßÎLg¦3Súûfi³´Y¢KçÏ-ž[ŒT©Kê’º ¦Q4ŠFÁ!f‹Ùb6”G"ŽD‰pEš͉æD®Ûs¾ç|Ïù%‹'þ4o]—Ê¥r©œ/sŸ¬Ü£¼‹ŠŠŠŠŠ0"gî“rkw[»enížû?í: NƒSÌ´VX+¬PSJ)¥x"gâ’ý’ý’]²=,Xþ°œëöÜç¹Ïs_G½ã‘ã‘ãѾ»Wu¯ê^¸µr=•e¾IÐß˨ݾsk÷ßÿ§Ý`K°%˜·~™ÿeþ—ù®=îzëcô7úýq¼¥­¥­¥lQw©»Ô]€¤•´’öïßò›øMü&ûsáñáñáñtØï/r‡ú-‡ß±¤¤¤¤¤$ˆî¥qbŠ"¯›g›g›gã3×L×L×Ì¢2\® ÿë'?-ÿiùOËý¿²vZ;­ìŸ·?¿ýùíÏ]KF£ÎQ'·Ûc©ÇR¥o‡° VÁ*ªë¡„Jî>†1Œai†|îD‰¿å!øûí¢ hp°:VÇê’zh-­¥µÍáã/¿4þ’4ۣܣܣœvré\:—Þt5¢6¢6¢öÏI¦S©‡\¥@)sû5¸m¿ÇAñöíºË…«YÈB“¤‘4’v%‚5°Ö°w›*Tª ¥\?×Ïõ? •>”>”>Ìü±kcׯ®À ÂÝþäÁÒþGÿ{ÙÔ¡škIEND®B`‚routino-3.2/web/www/routino/icons/limit-139.png 644 233 144 2701 13061246470 14601 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜvIDATHÇÍ–mH•gǯ£Çã9øRZÊ S–©,Ì/Mzw˜މQ+G,ú°FÐŒ" ;Ac8)2œ£7Êè@Úl´KHç°œÙÖÒ¹¨u0ZdÎ8è!Ëž—û·Çç<§µ}ïþr¸®ë¾þÿÿ}=×}[@DD¦Nþ ÄÍŒ›—±ã>¶ýî÷ÜïåœØ8Êåý{`Ê‘)GÒN¦4ÿ°m+níͱñcù,¿LÛ‘ØœØìX9iûaÍü5óÝûËNð´zZŸé°ùÛÍß|sê›S|¯=¾ZZ ¶mÅ­ýV¾…‹/þñ‹@Â¥„KŽAHt%ºD Ë—åËþ4²áÏlxÕû«þŠÿ+^Å€ñ7L²Z „ c­‘ÛŠOî·ò-< ßâ³ø#z¦¯˜¾B>XûÁZωHÂg Ú[íµø´VàH=¬‡ŒõÆz&@uªN8À¶­¸µßÊ·ð,|‹Ïâè‘W¿mÝ»Pé®tcZ˜SÌ)`.×Nk§ÑÔP”%Ù|b™C õ ó†ÙcöD+ˆùLe©,”>ò²ôe)šÚªëÅÑwñ¼Â¨0eñK¬ ÜØžGžGa'Ü5ïšQÜR#¨-Ö3®Î©ßÕï6!ÛÙÎv ƒ:büí´Ó*M¥©4àM4ÅÄ?2®WÇÁ‡{Y÷²€ Ï g0ì´ôL kü ¶ìݲ7zÎêGí;í»(œêü¢Óßé‡`z0=˜nó $ $ $@ÝÁºƒuáføfø¦ÝsÜžv{ÚíiP?¯~výlÞ ŽÇ튫îŸÍÑ3)ì—Ïè ´Ú€#j˜!3ÄDsfsrs2ćãÃñah-l-l-„PM¨&T©½©½©½Pé­ôVza®Ì•¹Ç7o„¿ÀE÷‹î݇óÌ\0Fò‡z‡z™˜”·IõŸí:Ûe ûå³8‘ÔŽÔŽÂwäÙò…ËŠÈVÇ Ü 2(‰2$£2*’ѓѓÑ#¢6ªj£ˆá3|†Od¿{¿{¿[duíêÚÕµ"Ù-Ù-Ù-"Îg‡S$³,³,³L¤;§;§;GÄ•èšêš*rñÀå–Ë-’i(Ç ur郥D¢z -%-Å€‘G#ìkoøô½Àþ$¾\_®/Žºººmÿè’Ñ%£K <¯<¯<rêsêsêáÂØ…± cP”T”T”¾;¾;¾;àªsÕ¹êàÌŒ&W“+†oÍ“ÅOƒ¥Ç)b^4/:Déez™äKœü*¿ÊtI‡òP¢Kkд‘ôPz(=$Ò6§mNÛ‘ê}Õûª÷‰ôUõUõU‰,Ê_”¿(_äÆŒ3nÌ)q~âüÄy2‡ž=õ›Q#(®ë?è?Äði[vmÙõÚ­Ì= žÇžÇa'Ü5îösƒ¹qžóêrâÄ j·Ú­vÛnµMmSÛ@­SëÔ:P_(¿òÇÄßÖkõZÆù<:ÇÞº÷ {z¾6Çþcòk““#h c§±½ˆ™üìÇÔuE]¾æ+¾Š9À>Îq¥®yF½Æ!ãP´Þ]˜• • V¥^™üoìåûºxcßcoæ öþTÿ~Ï„æIEND®B`‚routino-3.2/web/www/routino/icons/limit-30.6.png 644 233 144 3041 13061246473 14654 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÖIDATHÇÍ–íO”WÆï™*ËÌØHì¶Žuk‘ˆ-4¦›V…€ ­µ(-n„ ‹Ô·jtCk$Ý6lSëÒ¤ƒ6®Ðà6éŒéV‘â_6»Ð1Ne(“*;/:³`çí9¿ý0óô!þ>_ž\÷¹Ïu]É9ç:G@DD¦þæ§ÍO›­Iln6êéUéU¿û2‰%ÀTcªý3Ø:lw=Þ¥Ý4°>®÷Ï/bðÏÕÓë²PŒÂ‚¾}¦²þÞ^ùöÊôœ$þëeÈèÏ蟉Ã;Îwœg¾8óïÂÏW~¾, –õq½_Ÿ¯óÍå—ÒùgçŸ5y`AÚ‚4°WÚ+—îI6Ü^ o¼öÆkSM=¦Ìø/E–*„Ñ?߬§úõù:ŸÎ¯ëéúI?Ù¯f¿*on~ssÆÉä„›§à½§Þ{J׋õñYÇÉ-‰-D@]V—0aëãz¿>_çÓùu=]?éÇXÊY‘ö ØäÞäÍŽÇì1;hÃ1wÌM,åT©UêõÄ'㞸Ô>µOíÃøîò?ýŠ”jŠˆ ¿³Æ¬ …“ü°éΦ;À=]__Êq‘åG #œÏã {Ø= \`¨—ÔKÌrŽoùÔFµQm¶²•­sŒ¬a k€*ª¨šS_Ìbƒò«  ¨:UÇ,_§øßMééúî¤ᎈȱ!¬Û·5êlZáÍÊ‘oF¾öîö“í'Q×_ÿøúdžޭ‹·.Þº:t<OØö{ ­MkÓÚ <¶aìõ±×¡ýlû@ûêŸuW‡¯zʳ­p[!Hú­_DäF ôì?cÙ©À”jz¢Íö¬íY"µSµîZ7ØÛÛÃÀþýû¡¸´¸´¸ Ê Ê Ê!/’É‹@ 'Ðè1 ²Y,X}iõ¥Õ—`íøÚÖþÅw^þäåOˆLü!œÎSMpæ™3Ï€æKúõ–%Ç’£ú ˜Ì[…㯌¿GÛ:Öu¬ƒÞ‹½z/@e´2ZÇ Ç Ç ¨X^±¼b¹a`ÕíU·W݆.s—¹ËlÔOÝ?uÿÔ}È-Ì-Ì-„kƒ¥Á­3¾;ðÌü)öA쀻ŸÞýÈ·L[¦UŸà[]Õ\|æ{ß÷¾qìÿ÷ <ž„ æ æ f(ê)ê)ꦦ&X?²~dýˆa |°|°|ŽZZZz÷áîÃ݇!_Ë×ò581qbâÄüöÊ“Î'pá_C%C%ø º4º´tk®5Ws™µ-qKÜbrÉ^Ë5Ë5‘/7~UÿU½d—ì(©(©qjNÍ©‰XCÖ5$ÚÚÚ+* •†JE&:':':E&Ó&Ó&ÓD–ٖٖÙD»»»D2ë2ë2ëD,–KH³½ÙÞlÉù>§;§[ÄÛâµym’-Âöˆ°$1’1¹DýMßc½þ^?„.¨¦²ÏJ^,y‘ˆÅkùÑò#Ôª?T¢5Ñšh 4V7V7VCfWfWf´z[½­^ŒF£Pä*r¹ x.x.xÕŽjG5d¤§«tÜÒ 5hDâ§“zp:t:¬Lí±Ô]6ÄÕíÙÛ³Sÿý/Á_‚0ýýôàô *q$q$qdΩsjNÍ ~—ßåwr(‡r€*VŪü-þ ¨5£f@Û©íÔv‚/ß·È·¥åE=Q¡Ç¶?·ý9=p CåØüd®¨Ö_s¬FÕ0«š“ª:U§êµD-QK £ªI5©&`7»Ù='Ç6SG¨ß(»²¨çÕó̪E)þ2÷¨{ ã^ƽð<þ­ç˜žü=ykçÕÎþ’Lfõx >Ox^#ùùš>ú@ÝP×Ô5à<ç9Ì$ïJ5©ÆÔ0«÷'‰15ƃÀßõäOéENþG÷®|d_ì{ìÑ|Áþž½.Ä¥IEND®B`‚routino-3.2/web/www/routino/icons/limit-20.5.png 644 233 144 3171 13061246472 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü.IDATHÇÍVÿOTW=o°#_DÄ꺣¥¨«4+v%Ðí•, …¥$èLA(Ûmè0n6q»­!M¶‚!.(àÖ¤®›-j!Ö˜¨¬J ŽÔJ$Ó eù²‰>‡îÌ{3÷ì3¯Ã¶ÿ€÷——Ï·sNÞÍ=÷‚Ä¿ u›u›u1XWÊGäEämý{ n÷‘R±T|÷äšÖ5­$¹¶{m·"ku­å<Â_ɧå‹P"ü“ðO$S0>B–¥”¥D¬ÄM7HÃ÷JV÷V÷’äùÓçOó·äüÍù›$é2¹Ld(ÖêZ¿6¯á­ÄÇ‘ñäSŸ=õ™4E†ëÃõùÌ+ϼ’ø»@ƒ=‘,|µðU’œ › :’$}‹$£%L$eÊÔÖÒŠX«ûµy OÃ×ø4þ€ñ/Ç¿ EåE冮ÀÀÄǤÕh5j|Ê’òCF‘ª¬Ê$é«ðUÐCŠâIR¢D†b­®õk󞆯ñiü=¡­\€æ\²d²d’ô“¤2¤N) Jé_R%U¢T*DªH)¤:­~«~KŠzQ/êùÓuƒ^z)|ò¶z[©øv(uJé+ à³¹d_É>M`snh+¯@òqÒ dy•ðNM‘Íø4[ý}ø÷á¶Q‰MÁS`­µÔZj³þÛÓ~¬ý˜Øýøoó™ó™:›ú{žæiPº/]’.AŠ[Š“ãd ÂáŠpÎÕÎÕÎÕ@Ü\Ü\Üp®xW¼+XW¼®x]1 ¬WÖ+ëGû¾ôð%0¾*nKÜHRç*ç*§Ø¹ÚÔÚT ?ï´uÚ:¡ùFÈG4_ úŒ"6‹Í\þ!c¡…Ò/ûeÿ {faf’U¬bÕŠüñ¾xŸ¢Oô‘¤H)\ âÿzÒ>i'IƒÓà”WñkÍÇþïVoÎ¥µ¤º¤šœYŒú¢|Q¤ø‡úP}H…]¼Å[ü‚ ÅbDŒ¼Ê«¼JÒ¸+Å´° ;IO@­¾Aß ñ/u^'y1èü, + #éý±ó?¹wåûºxbßcOæ ö1¦ªºÓ©IEND®B`‚routino-3.2/web/www/routino/icons/limit-25.3.png 644 233 144 3074 13061246473 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜñIDATHÇÍ–ûO”WÇ(-L…€,vµÙô‚Q»)±Ò° 8v@S61Pw›1Ûl×±5%²!ª0‘‘Ø`ˆ¬˜6`”{Á ]g镨PQ[ èdfÞwÎg^gÖý<¿¼ynßï“óžó}Ž€ˆˆX¿‘©‘©‘±A;rKÈSSð›Î }X‡{„ÝõwˆkŽkˆwÆ;c!Ûˆùáõ"!üp>Ã/ 9¢»¢»"rí½PöjÙ«1IAûÀ ˜zL=5¨>Y}àDlj¶ÃÌÅ™‹¿äþ’ !ÛˆùF½Ž/{Ÿàg¿zö«ˆý\ôs"öNÚ;&¸3ÀVd+¸õÌ­gT$èw3f• Ì3±î…ÙF|1ߨ7ð |ƒÏàö#˜“˜#ï¾÷î{¦ö`ÁØPg­³|þàS>Å Ú¼6 WèxA ªA"ˆ€mÄ|£ÞÀ3ð >ƒ?ØOèW>i̇M›& ð/ÿæö[ýVPÑZª–ŠŸ”þW}‡¾ôWô—õ—AߢoÑ·ûù„Oxr©€G3kfüÚ š? CA|ƒ/Äoüʳ""¯Ó¼i~>Jù&†&†€½‚z[½Í#ÐD¨a5¬†Ã(544@¡P€?þ°øö°8Ç.¨,•Å#šñ“ùù¹ìG˜9|ž¸­•[+ ´À×¢¯î¼ºš²š^kz å ¸ü®0Âî„î„îh)i)i)G©£ÔQ –Ë‚åÿvŒ±ü±Ü±\h<ÚØÞØŽºòŸáÂáŸòm-ÚZF?¢_¹²z?ìý†ÿ4ùÖä[ªÊ¼`j1µàÍ»•7‘7Ëo.¿¹ü&ô»ú]ý.ȰdX2,`sØ6TtTtTtÀÌÒ™¥3KC ¹×º×º×BBCBCB”½P_˼ÉmÉmx¿Ù}½øz±ª‚^zýT°ŸHùÕÇGÖ›"ù•ù•"7WíÛÑþ—õµ=`xià%‘¤¸¤¸¤8‘VG«£Õ!¢íÒvi»D”Wy•WdÃ¥ —6\I™M™M™•Ç+0Œ‹ÔGÕGÕG‰”ÿ¾Ü^nùõ¡eg—•hŸýçÆŸ#ÚErÏ垉¨\âZâÊzSðÇÇÄÇFUõÝ»·–{7”1”™}™}™}°ÝµÝµÝƒSƒSƒSPu§êNÕp¦8Sœ)|(ùPò!èsö9ûœa§>E¥¨Xð,xÐÅïö»Å×s½g¤gD$ÙšlM¶ŠLmžÚ<µY¤7½7½7]ÄKÄf±Yl‘5 kÖ4ˆäœÊ9•sJ$qcâÆÄ"±ö؂ؑßvd~œù±øÊsÞÿòý/ù@ä¤í¤M$rÔó¢çő·’mµÛjÁÓ¼%³˜ÎžÎ†ÛC·oܾš¶ON‚Ïî³ûìàõúGaöøìñÙã &Õ¤šuLSÇà~Áý‚û@1Ń֭ukÝ0ûÏÙ£³GQz‹¯ØWº•ŒÖ¤Õ¤‚{øü¢À†t ]YÔ™y•¤’xôøÌ´ªVÕ ªMµ©¶°³Ô¬šU3°Žu¬ ó+PPS ª@«b-«B–O\ž¸ `z`z0Ű¡cÿ3Õó©ÛT½©ÔAeVßéfÝ ê¸6§Íᧃ«\EQÏnvƒ:­úU?p†3œg¥šRnå¼Áþø‡þ£þ#~Õ¯ý¤ý´Ê_UxŸTþ§wV>µ¯‹§ö=öt¾`ÿ -—¯ó¿IEND®B`‚routino-3.2/web/www/routino/icons/limit-13.4.png 644 233 144 2756 13061246472 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü£IDATHÇÍ–ÿK\WÆß™ñËulÜ!‰týòèH(u•¨M“L"’¶1ÔÅÆJØ6†©$•–&š¦-ë®b´™í4¡mZ´ÒÔšbC˜Íl³SªUC‘qÜqP3;sïùì3wî´ûäüryßó¾ÏóÜsîyî‘'âOkµÀêˆÅÖV3oÖþlñÕXü––÷߀œwsÞØÜ¿¹_ÿÞŒy£>¹_ÄÄOæ3òò„˜‰ôké×,ÕñøMhÚѴÞ‹ÏO@ÆHÆÈZ^¹ñÊ €ááŽÃâ7‹ß¬T¯TƒóF½Ñoà%ãË›¿âÔOS?µ<€ô´ô4x²öÉÚ¢?Ä ~,‚ýûöïxh{hSVÐþ d‘¥ª!Œ±œóñz£ßÀ3ð >ƒ?¦GÀY嬆à ‡3úb ßAǶŽm_dx‹·È‚h(Ð^Ò^" jBM`ÁflÌõF¿gà|Lüro/Ô:9Iº­ÿ.’IõFt>:1£t¿þPÑùè\tt¯îÕ½˜ã¿¬±cõ ·è-D”Kk×ÚA/ŠáC£4 °çOleHDÄõdüñC(fjfj@û€½êïÑ`4Èz‚ðç8p‹[ÜJr‘‹\œ8qòÿÃ… ¨jkÚZo/kÓ£Ó£¡ŒP(%&ÌõN|¥>øÚNµõ€þ´7ñ§‰÷'ÞGÍåÎ9æ&/Õ—êK… . €gÖ3ë™M²‰Mlµ]mWÛÍôLÛL÷L7ê«mã9ã9FVZEŽ>vXénŠˆxNòg÷Ûî·BõûkN÷M÷M¶ÍoóÃHéHéH)¬œY9³rwww¡ikÓÖ¦­°EmQ[LåNåNåšBô#úý¨U£j ¤µäÅ’¡æoÕÏU?GØàÓË>,ù°ðÅô¤ˆÕñºãõÒgäX•¯Ê'Bšˆˆ¥O¶[ŽHÞ—yßå}'¢Žª£ê¨ˆ¶SÛ©íé¶wÛ»í"{ öì™ííí Ÿ Ÿ Ÿ“İÖYë¬u"Z‡Ö¡‰„ÿö„="¿¹ä¼ê¼*ér8ÆÇS•¯U¾&"Û;;JŸØœ½9[÷ÁòÂòhU‰c@­«ÖUë‚^{¯½×n®D°Xª-çTÎ)Ýg¥ßÐoX|"ÑÑ"’&""Nã#ïE.G.‹äåå‰ŒŽŽŠT´V´V´Š × × ×‰ä]É»’wEÄkõZ½Vý¬~V?+¢&Õ¤š)›*›*›ñ~âýØû±ÈÏ—:ñÓ ‘ðeù²Ä)bñ[ü"Œh/k/[|ñßsÜAw´ã±=¿p¸þ½úóõçaplplpÌ\‰ÊÌÊÌÊLÈnÈnÈn€–ñ–ñ–qX(\(\(„²ûe÷ËîÃÒ®¥]K»Ì¾þ¿ö_ê¿ûÿ²¯b_…ùi}C=C=†¯yN&ŸÊ®¶.àãTê=z¬V¬¾°úêѽGß>úÖ$ˆ"H–®/]_ºz¦ž©g‚ZVËjî€;à­YkÖšARÏ«çaã·åå¨ÿÌ-ß[¾xâ|Z[g['à7N% [ÌX ¥À´6­%ø÷²¡7êI>–¢t¥ƒêTªÓªv«Ýj7PL1ÅI¶±Ê*«@€`Må«|ÖQqüÈôíéÛI>¦~ácIÎm´5ÚLç'/:º´ÚÓù馋.PŸ«ÏÔgÀ ƒ ¬³jAÍ«yàç„󿪿J„³Ú¤6 d&œ?­1 ÿÚùßåc{»xlïcç öï™ßt~-5IEND®B`‚routino-3.2/web/www/routino/icons/limit-179.png 644 233 144 2671 13061246470 14613 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜnIDATHÇÍ–_LWÆÏna—QH¨n¬„ª.¦"ºµ%F6H4mŠ¢M•¤6>´µ­±5õoj­ Lˆb¥,šâ¨Š%¦- ,VBC—@ŠÀÎÌýõaf­öÝû29çžó}ßÎóí‘´Ù§€;Óé^‹Ý:ù¤Iscq ®RWiÏ×Z›Z ^Ÿ^oõ9±½o×Ç÷‹8øñ|v^ÒÄIx›½Í®àl|ÊW”¯Hz5×ÚEíâ>ºôÑ%€ ß_øžaäÎÈ€ñàxœØÞ·ëí~/_Žü‡_/'^v ‚×ãõˆ@VqVqö§±‚ß³¡äÝ’wþ|åÏW”ÌG@2É*èèØ+Ûû³õv¿gãÛ|6L@FaF¡lÙ±e‡v6ÖÐ÷|±ä‹%6_ô"pŒc$ƒ¡:€¹ÓÜÉ4¨Õ€ 8±½o×Ûý6žoóÙü1=òìÙžÜeIeIÀc€èm°R­T°VEOGOUíê‘z„"/^0žÿÿ€¹ËÜeîÃ2LÃõ³º¥nzKU©*”18³nfQõ‰QdÍýàÛ<Ýfn3eóK¼ ¥5XÚ°6¬'@¿ÕoÍÍ;æ@´ ZÀ¤º¨úU?ÎÒŸ9B˜d’I'T†2”â+¾Š«ûÀ¼n^g’â>ÜϺŸLkƒÚ ž`ë™V÷ì>°û€Ým­TíÑÖh«ÃÓîkOoO‡á¶á¶á6x˜ð0áaÔ¯9^sê7×o®ß c c c0”6”6”áªpU¸ NuŸê:Õ÷&&QsÀwc|LϬ°_>§«©­© ¨P•`[ãL7/lNnN·îÖÝ:„ކކŽBOQOQOAáXáXáhç´sÚ9¨®«®«®ƒ¼ü¼ü¼|X[²¶dm ¬|}eæÊLˆ,½7zéYy•ª§ñvãm[Ø/Ÿ»EÜ\p3ïMy²>°> "Ÿˆˆ¸Î’Ä ƒâ•Qù[þñ•ûÊ}å"º¦kº&’{-÷Zî5‘®Ã]‡»‹”¦–¦–¦Šìa{YZZñ=AOPänËÝ–»-"¯'Í“&:våÇ+?Š7öA¹Îªúu¬ûCdN¤§¤§X½Ž ;cooo8ŸFqnqnq.œ9æü™óN~¤o¤o¤üüüàÁă‰YYY þþþ°)sSæ¦Lðœôœôœ„^kð4xâøÊÿ*ø«l= "VÈ ¹zEïïÉrq˯ò«dH¢ ÉÌ-5OÍSóD,·å¶ÜN¾q{ãöÆí""9É9É9É"áœpN8GÄŸíÏög‹¬¯¯‹t/ê^ؽP$ûzö‰ìs0®¥Æ>cŸˆˆ•b¥¸zÝ"zPþÖ%îö›í7í:ªd¹JT‰2cgæWίœ_)âiõ´zZa«:Vu¬ÙÚ²µek‹“÷Íøf|3"z™^¦—‰ÔfÕfÕf‰T\«h­hy;PðYÁg2#1>wÞ­ñ[ã"szþo*¹l4MÎT>~ûqþã|˜êêêuŽrbÿÄþ‰ý0µfjÍÔž[Ó}Ó}Ó}0j>} ª[ETE§qÕ¸ÇÝýåî/Ÿ›Ê¥5 h#zô›ý¦ãc`UXñÅ´=KϬ½ìeo\ @Ôûj›Úço¹Æ ã“|;çc¾û>ÀІ´¡ç|ìεß0€WÍ}æ>¢ ‰&LJÐH" 8ÈA¾@ð7\àJušËÌeD¹gV›ÕqÎo•%–%Úoêçiÿ+_ÚÛÅK{{9o°ÿÁVÄ‚ñ!lòIEND®B`‚routino-3.2/web/www/routino/icons/ball-2.png 644 233 144 220 13061246467 14202 0‰PNG  IHDR °ÚSbKGDÿÿÿÿÿÿ X÷ÜEIDAT(Ï­’Á B£õÿ¿ü:tʹÂMŽ:EÀH!åbm9ÄߦC´ÄÏbž“Úõ e)TÐzì+þè¬òGz »¯]ÆIEND®B`‚routino-3.2/web/www/routino/icons/limit-13.8.png 644 233 144 3020 13061246472 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÅIDATHÇÍ–íOTgÆï™™)v(†1©B0Sv• $Ä/X!€eiÒ5¤ˆ¡±l%†øe[ÒÄMIÚl*¥M}!kÜh²h‘f‹,«˜©i!8¤Ûi¤­î¬EyfÎy~ûaæpÆþÞ_N®ûåºîó<ç¹Ï# ""ÏÄžÖ k†ÕÅÖ?›~û‹ö³ÏFñ ,U–ªÿ¼ )Ÿ¦| úyêçú&6âF~|½ˆÉ¯gøå1I]I]–’~ªs«sí®(>:ŽnG÷|Þèy£à‹Ž/:h„À7ofKfKÀÄFÜÈ7ê ¾x~yïwú"øUâW–IHZ•´J2Ë3˳FƳàå—^~ àŽíŽMY@»¬fµ*‚1l:ñX¾Qoðü†ž¡íG ­8­X^yõ•W§£?þÞJ+ÝÐ wïó>«!Œ´Z­–¨A5€ ˜ØˆùF½Ágðz†~´y|o[Ëî ï ¯4äÖ·‡  ÞÜŽÜÆˆ(ýž~G¿‘Û‘‰Èè£ú¨>Šió<àÁ RúÝp8&ù%œN]‹òî_wý cú+[Éiǘc,˜·Ên•6@¥úgd.2ÇŠÄ_h¤¸ÊU®Æ5rŒc’I&Ùt«Gê‘z´ð¨bUÌ­Q~\>·Ï à:‚Á®Gû‰­Ô‰ëÐÐÔÐê €žgþuðøàqÔÄš ç„Óô&z½‰ÐÚÑÚÑÚ#þÿˆßŒëôº¹bxNyŽ{ŽÃÑÑ£#GGP?ŽvŽv®dç©›û3÷góÑ~„^‘‘79uîÃs®¼çë]içzÏõ²m÷l÷ ;¿;¿;fÌ™=Îaç°sª×W¯¯^ëÔ:µN;ËåÎ2º\{¹ör-¤mKÛ–¶ öVì}aï >ðìkϾFh8Ó?ëŸU¯Ã—›¿Ü Ú£ý$ˆÕù¶óíü­²¿Ø[ìa•ˆˆå´„l)¶׿]ß»¾QuªNÕ‰h…Z¡V(Òbo±·ØE2*2*2*Düíþv»Hèfèf覬˜V§Õiu"Ž\G®#W¤b¸b¨bHÄwcìÔØ)IZ,ž~gúËi‘’¼’<KIrrþVÔ§SŸÖ½0}wú.hÅ+Ç€òœòœòh··ÛÛíæJÌÍÍÁξ};û c_ƾŒ}0Ô4Ô4ÔdæuÖwÖwÖCA  P€ÒùÒùÒyÈ~3«.«~Èò}ìû˜i˜˜ÝãœpNè^Aw8T … íà1Û>°ýëí_Ã…óÎ_8}ú6ôm€ÜŽÜŽÜ3¯ÀZ`-°ÂÉñ“ã'ÇMÙÆ²eá ÿ ÿ`Ü7ø‡û9=9=ð÷ŸÏÞ?{ ôYè3Ð\OyŸòª.«Xƒ¥ÁRÏw"×®\»""ED¨íIJsÌéqzDSSSDvLî˜Ü1)’Ú˜Ú˜Ú(â¬rV9«D¶ôoéßÒ/RYSYSY#RÔVÔVÔ&r¸àpÁá÷²{Ù½,²æok>Yó‰ÈVUè+ôÉòž?íqíqQ/Ò3Ø3(b[ZÜ´¸Éó]ü©lnhþeœJý#ý#x¸íaÍÃÔ’géÛ¥oÍ7Ï„gÂ30uqêâÔEГõd=Ô’ZRK0“=“=“ ôÒK/„„„ÀÔÿ¦~šú ¥ž O†'ÍSÉ/ ›6÷ÄõXc9mà8Áði>mE¿’E}·¾;nŽ%(]é ©CêPܼ*U¥ªXËZÖÆùóÔóêyPÝꆺ 6«Í,({Œÿ¾[¾[Žß¿~lŽÅMþÈnÛn›9ùqE|ЬMj“æä§…fšA]V—Ô%à g8,²À¨ŸÕ¸cù Ú%íau-2™ºÉÓ[þýärÿ•Oìí≽=™7Øÿ °˜ñ -#IEND®B`‚routino-3.2/web/www/routino/icons/marker-84-red.png 644 233 144 4237 13061246467 15447 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜTIDATXíW}LÔçÿþ^N^¤žÒ¦¢¶Êæ& ˆÆd Úîf¢µXÂ0…Í+/rZ3#nH¥ 5ÒTCGD2^¼Ó˜â°Ùz .Z’.`¥Á5¼;ñL¨‡¼ppw¿ßý>ûãîùÝK:Ͳ}ÿá¾Ï÷åóy¾Ïçžç òÛb 3~s”)Êeâf q :t.èÜö3QeQî¿Dé”Né€?¬Ô‘H"‰ÌÂ}¥Žå³zÖõÇã7‡ó åWNåTÎÃãK"vŠb§qœ«à*¸ •ˆ6~*~*~ Ýõ`׃]€=÷<ÞóÈÏÊÏÊÏ ú,ÎòY=ëÇú3¼çó!þáþªOøi~šŸ¶¥³ ­(YQ²¢D®lêiêiêQbϜϜÏ À…Ì`€ 6ØÕÄY>«gýXÿp¼UŸ<Ÿé^âí¼·ÛþÆdÝɺ“uGú¹ÅkñZ¼° `Jª’ª¤B’«ä*¹ 3ä 9õ²^Ö‡ø8Ëgõ¬ë¯Ã×½¤R㌜‘3‰§ÅÓâé¶oXAn]îG¹Iz•ØQåœrN©ÍsÉs Pl^‹×À#·È-€ÝØ ÀÇ*à†€$@±)£Ê( µ¹ßs¿(G}‹|‹àdɹu¹ÇsKz†Ïø0~¤ÑŒhF~¹‘%èjt5º%É:f}l}ŒÉ@§\ï-ñ–¬°Au+Ê ‰ayÌpúZ}­|€\/ÏÉsjŽÓ:f³Ža’á3>*?±T,K{O³ÀÅâ‹Å‹•߸$£wØ;ëº7tš?oþºô]z˜ÿxþã0‚gqƒb­7¯6¯ëZëZ@2†Õ¸¾:Ù0~¤8âSâSâSP7¾m|Ûø6ÀF ©ÓqšfM³@ûi?,újÑW€ÿ€ìæìfpßrßår(”CljŽ!ùÎ+ö+v 8}eJ™‚ÄðÆýãÎ3;Ïì<Ü™lñx 8ØÒ¯½ñ¤oOßJà[ó·æPŸ-þlqhü뾯ûà•ÙWfCóŒççƒýe‹gg]ŸñaüDq#¿?¿?¿_M”å­žxO|(àå¦ËM@ZÒ€Þ¬7@rKr l:¹é$LÝ›ºs-s-°òå•/À»Kß] 11Ð|¿ù>€éàIïáƒøùò7äoPïí|àÃu{½ÇÞC7??>?N‚pPèz ´?°—é‡wÞ%""'9‰ˆ¦§‰ˆf/Ì^ "²D[¢‰ˆ\u®:"¢÷¾”ˆ(åÕ”W‰ˆ.¥\J!"š_?¿žˆ<±›c7Ñpà¦ìâʹr #ÁasØ6²0~Äëy=¯÷>eOÝåòæÂæÂ DOÔOÔ€(‰wCrC2~À2Ê2Ê`ýîõ» acÂFHMMM€7ë߬ ±£_õhÕ#@¾ÖUÑUÄûÇÙn¾›W'ù[.KãÒ¼OynŒãÆþиUWÝUTä[m+x”ó(‡b…ù%Ç–£ilM0%˜ˆ(jÈ7ä#R÷N´´DDO^ò:Ѻ}ëö½õÝ[ß-;¼ì0‘§ÏÓGD^ͤf’ˆvpïpï â°8Lž9³Øò‰²Ñ²Q%3ÐüOüSþ)ÿôòŠË‹Ë‹Ë#o‹·ÅÛvõÂÏÏù çù0ÛªÏp£ýF;Ü0i4\ÔOý¡_ŽÌã™ÇÀQá¨ø;gFfFLúó}Ÿ^i½Ò ……Kîîýbï>Äÿ*ðû1ì[ÏlÅMš&M“fkf†ªÊÒÊRe k(-±)6 ÐövÛÛœæNs'x³¼Y~JþÇ@:%àöµûÚÀ]é®äâÖƒ­`ôêèU¸®L_ï»Þ‡_©Oh-_Ë×Îoã–q˸ek›" ÷Ô'u/WÄmmä:8#gdZñ2u?4~“ªÝþd_¨VÝÊ„2¨/”:+¸à”-Ê~ep¾ö{£½HŒN\˜¸P*U'Y-T Õ†\•šžô¤uA®Ù”MÙb5ÉHF"Á!|/|_Ù¥>­º2]™¤µ³ÆYã‚€ÊïwpCº0‰I&4¡ P ”v¥n'pøu_á†Â òaõš­¢Õt*¡,¡,¡ŒˆÏåsù\îZ€]1£¹0ð·@x(<r7“Ž$I:B¤)Ñ”hJL§Tífçfçf‡j×gðà† &˜L`ÁAËkä5òšà|65ljؤlQßr­F«ÑÚçý¾.:ü¤9sÄÑá~îë¢ýÚµ^ j×Pe¨ Ñ®VÒJÚ !ߨoÔ7<þA b0Å Æ Æ *»TMÆñq|\áï#¤x!‚_=AhÑî^nïÖ]\×Áu„j×ÔmêjWê–º¥î rçææ€ä©ä©ä)ùǪ¯ W…«ç3™ÔÒ‹$¸ˆ^`ÁÖ ¨]‡àÑîYÝYÝYIkí°vX;àÿêÆcj¸i¸i¸¼vÄF±Ql üKóÏÜÀ:žˆ`¤±‚€vÿòŸ´›³#gGÎŽ vM™¦LS&þì+êIpE\W´õx8 ?ËÑi/Òîf¡V¨jmŒpQMQMQr.Õ“êIõH÷Õ£vÁaXAmÔFm¸vk^ý©ÝSá~Î0·ÛÇíh;m§í¾ŸòËùåür€#Ž8ºõe¢+Ñ•è"z…^¡—û{ ° âäþo¦U?åQå‰ß„‡ó ¯ð À™93g~²Ò¿þ#SÄÉX"ú¾ð¨ÿ š–f –é¶IEND®B`‚routino-3.2/web/www/routino/icons/limit-7.7.png 644 233 144 2214 13061246471 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜAIDATHÇÍ–OhTWÆOÆjþ ‰k²HìF!2!®: 8ÒPÐEÖÐR˜XÝÔq¡¨›%±"YdB³µZ”€à$S2Z¢Bm$6I-¦YdR3Z’¼wßýu1sçNl-ºËÝ çÜï|ß÷Î{çΑչ__­¯ÖWž}Gl¾¤©¤éƒo²ñUE{‹öþ…ŠË—*c•1oÄÆfßà ëE,¡žÉËj±‰âëÅ׋‚¹ø ìß¼sÉûÙ¸=¥·JoýåÂÑÛGoܼvóŸÁTr* ð*ø*66ûoê _!¿œyM_–ß]~·èW(^Q¼BÖ7®oÜðyðËؽk÷.€—Ë^.Ó>PÓÀJVê !ƒY©‚Øìçð¦Þð~£gô³~Ön[»MBBJ»³#=p¢æDÑsnç9ÏJp3n@R‡˜Ð Š(›}ƒ7õ†Ïð=£Ÿõ#‹ßíW‘Ùçìsò†õ€{Î=Ê·pdáŽ:¬.¨ hås=×Óݺ;ß1ôwú޾fßâ³õú†q#–ßêåôí«ÙØ¥S¥S™÷`Tª¼ÎNð{‡ùÛJ3Ï<ï²^Ã/âÛiõŒ~ÖOÎØÕïáØéc§AG¼zC3±ebÏÄtçPg¢3±æXs¬zžõ<ëyc c c VvìÑØ£±GÐ9Ô9Ô9´ÿ¤ç Œ;þpü!:ßá¯^VßøÉþzÓ½iðúcó´‰þ„[[[a{j{j{ ¤[º¥úöì;hÅýqüð÷«ï—ß/·ÝT½¬¾ñ#PÞ_Þ¯¯ÃÔ–©-…-×I•V³jÖf¯ô]é»Ò-í-í-í6¯†Õ°Õ¥ºT×à϶œm9[Àþ‰WçÕ?šŒÑÏú¨\U¹ÊûR“©IàÏÜØoÔkôK4Ý1Ý1ÝuOëžÖ=…‘øH|$^ðåD¼ˆy{¼nò¼`!§gôs~ÞØ1r×¹ël|1u1u1Á¶`[°ÍæMÎ&g<¯~^ý¼Úæ/Ý»tïÒ=/x€^£×ü®oè@~ÐwÌ'’ f‚x0ð@DæEDh‘Oõ½CrÃ+ Ð -ªÕ‡ê%¿Òeé²t™H¸5Ün‘˜Ä$&’¬JV%«DBþ?ä·x¾¤6Y£gôŒ,ȲœžÑ7~^ŸJÜÜ” »î€íülr6>‡¹š¹š¹š‚8žã90Ó:Ó:Ó D‰…t H`®v®v®¶àÓ3Ê(ÏM»é<Ë›¦òα('9ÉÛ¯áßé+8ù ‡‹MçœAP£jX¥"*‚C”^zí9Äo¼àèI=©'…‹ ¬¥‚ °xï”w Gõ«þü:á’p‰éÔ¢“ÉþW.ÙÛÅ’½-Íì?ýÍ…a´<IEND®B`‚routino-3.2/web/www/routino/icons/marker-65-red.png 644 233 144 4244 13061246466 15443 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜYIDATXí—LTWÇÏû1EiSP‡ÝZ]"VWê 耩£VÓ kŸو?Ú¦¶¸V©¿“¢Óšºé8£µÁÕv7˜q#Å„°F°» iµ0Ä„‚üpp˜÷æ}÷™ûÞÌlV³Ù=ÿ¼9ïÜsÎçÝû}÷¾! Ø4 3~å$û$û$;÷8x#6ª!ª!ª!÷7¢,Ê¢Üö9¥R*¥°RC"‰$2÷•6žå³z¬~x?~e8O(ß.ÚE»x[x‹³ñ,ŸÕcõY¿§óÿÛpö'ü(?ʺRÙ Í*šU4«H.;Ó|¦ùL³òœ{À=à @€Æ0†1.¸àT?gãY>«Çê‡÷›ýÉÓùH?…ïá{ø×_Y̦̦Ì&iy—¯Ë×åC‚¦$+ÉJ2$¹B®+9MN“ÓÙ(ecˆŒ³ñ,ŸÕcõUà°þú)*gãlœH¬«Äªúv–`¨1Ôj$£ öŽbQ,pKõ¾r_9 ¸¤() À„|U¾ ØýüjÆ×Ê×&$Y’Å%­”VRýë+ ¼ã_æ_7m¨1ì5알¬?ãa|¤ëÖuëº×þš ÐWê+õ•Êç#§ÓéÄp°Ž[>ìëðu2h-T°ýÊ~À14¢ Aà^ƒ&ö÷ùûT×í|äls¶aX_©?¤?¤Ìa<*ŸX*–Š¥­U,pªðÔ[§ÞR¶ x$›¯ÎWÂãí«ê«€óSÏO€o*¿©ßßPðžã=Çà ú‚ÀÖkë൮¶®€¯¾J$Û¸8.ªIžS…µR­¤lWg6Œ”þøÅñ‹ã£f0w0w0WM”Äž¹ãtÇix)奘â›âûlضa[(¨¥ÉÒ^½"ÄwO¦ ’†Ôú 椤Œ‡ñ1Ð7ÙxdãíÉä.ßßýìÖZÃZ¬ë]× Êå 8Òé4?i>¸[Ü-`r˜°¢dE xj<5ðèö£Û ÜUîèWLŠ »üsýsµþŒ‡ñAqÅÔfj3µi’W«ò™îžÏç=Ÿ š4@Ìݘ»0£qF#Ô%Ô%„Îè†Ã‡Î¨.I—S=S=pñû‹ß 6Üç;ç;§õ7¥›ÒMéê¾}…þ¸ÜÓÜÓÜÓL]^~|`|€á•à2.Ѩw²w2‘Ûæ¶~áô DDiÓÒ¦½ÿv>Q÷‚îDD(A ‘Ñit]n¹ÜBD”¹1s#Mä/É_BD?ÝϼŸIÄ_ÕëŠ)FB¿«ßÕï¢.ÆG¼‘7òF_;êþ´ëlÁÙ‚ Dß¾Ü7ÀûYõgÕ¡37h´WÊ•@Ý­º[ðøøãã0V;V2\Ù=²¸W¹WùÒùwÏ¿«õûÛÑë­×[Õ™ü=—Â¥p)¾>– K…¥{«Ù[–ôK}§¾Sžíü]ç¾Î}Úö¡¬Z>¾|^ãõ7(êK£Xˆz-ê5pt€„ àP÷¡îP¥ÕÒ `?—Ÿ ß]ÿî:¼ž`xñÞ…/.|ѯB‚ $|:L±9±9±9DâMñ¦xÓÚ£nø¦ì²÷°ú~ó­ô[éðÂãŠqð0í±kynyn>¬ü°2ô-¶ Û |ÿ§æNs§ö¸E· _)|ÅïQ· Û„mÿÜðcØ[ÏlV­.E—¢Kqe 抲’²e•ºrÓ;ïwÞ‡œ»qî÷í·wF/†Ò¤4…ðzÛlÿΞ8{ Ûµ/Òæ÷Âè…/|ŒuêZÍWóÕOr¹Ü nÆÂ3€ÂõHÝÊmå¶®¶pVÎÊY™Vü;ì[Ÿ­vU»{üKüKB”=J`þó@ l;Ì”Uʛʛš”z¬>x$Eë¿Ô)•ª3ù‘ð¾ð¾Ù ¢ÉHFQ¯±fQe‰‘ld#ú…Ÿ…ŸË®ªG«E_¦/“âœï99'ª]©X*Üýíz‚_QvÿËþ—e³¯Å×/KÜò÷-lù@Þ£ž@câ8d?¸3qgâN"ÞÀxw)HWÈ0'¯›…N¡Sèä®Í)ŸS>§œHW¤+ÒÙ¨ÚÍ2d²Bµë7ûÍðÂ;ì†0„!m&åyò{}özM»ö {†=u¸¢®WÀp«÷†·á‡"úrô_Ú³´»R¨ª…jW.¨,¨,¨TŽ%O$O$OHÿP—º_èúͳ¨žê©ž‚ÛŽàŒè7‰þG‹Ôîp?û'®˜+æŠZCkh?“ŸÉÏ8∣ß&y’s©ÿ[¬—Q¯Ø½IEND®B`‚routino-3.2/web/www/routino/icons/limit-39.3.png 644 233 144 3043 13061246474 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜØIDATHÇÍ–ýOTWÆ¿Cu„ ÈPY Ä‚¡D o&2‰i˜Z¨ ¬¥´•ÍJ`̲Ù4Û&¨»F¢F‰ãn¥6ÔJWSP7mºš¦ ÂnBhRhÁò"”!¨ÃP¦Ã¼œÏþ0s{‰÷—›çûò<ß›sÏsŽ€ˆˆDß!I!I!k8ä}3ôÍ”«ÜàC‰¡ä‡¿Áº×} ýYôgþ!ky­~e¿ˆÎ¿RO‹K”è5­kZ – ®…²­e[CM|þ.„µ‡µÿâ…ÊŽÊ€¶ÏÛ>çO0Ý3ÝðÄòÄ:ÖòZ½Ö¯ñ­ä—ÚgôE`õ—«¿4LÀã£$ç'ç¿òç@Áè+°»hwÀÔ S/¨ðÍD( àĉöÌ­ÀZ>X¯õk|¿¦§éæˆÍ‹Í=ïìy'¬)Ð0t>Hü QÓó´g8Cx^'€¯ÜWŽÔ]uб–×êµ~Oã×ô4ýÀ<úR.‰ˆØÞ€}Ãû†Á?àéö>ô¼ìyü½žŸ=?ã Nªü¿øŸúŸ‚wÞ;ëU­ªU5úã`–Ùßò»¼Þ<Þ O²'üÝ~MO××–r\DäÕ‹æ s:Wqr¸{¸èÀ *Gå°Ä·tÑ*ZE«h …ZV RA€ –ñj¨:¹Ï}•¥²XâŸA~SPOÓ¿˜G˜i¸ÇÚªŠª ÍŸ9”?pkàØþa;o;êsö=í{ªëõ¯ï_ß¿êÓêÓêÓàáÈч#zÞßçïó÷éxè!ËlͶ&[ê»ñ^k¯U×SËUEUEÀt`ñ·‹ˆ|÷Wh?Ù~ÆbO=žRcN­K]—Š»4±4¦4R%UR £6£6£rÇrÇrÇ 3-3-3 ìÕöjûŠ%Ý1ºctÄÔÅÔÅÔAYBYtY4üÎýÒå—.ãþïß*þ©X„[Ü|ÿÌcPoEš"MªÕÐ:)“bxk8˱ɱIä›}_E}%bJ‰++iZÝdl2Š˜&‡É!2›3›3›#r'ëNÖ,‘íæíæíf‘ʞʞÊ‘C!‡B…ˆ 666Št9»œ]N‘ø¡øÁøA‘3›O/ž^¹wéÔ¥S"yY[§·N‹¨ØxS¼‰ëÂ\ÔrÔ²æ>œûPßö‹.ç¤sJÒKÒKÒ!¥>¥>¥n.Ü\¸¹¹á¹á¹áÿ ÿAþ0ÚŒ6£ ®„^ ½ºbIËüeþ2Xt-º]°÷öÞÛ{oCÒ{‰E‰EÐ÷ãÀë¯3.«Ë þsk?Yû‰P|áÆp£jwž;þUÒZÞZYÌÜ”¹I0§›ÓÍép´íhÛÑ68ríȵ#×àìæ³›Ïn† ãÆ7ŒCgNgNgøâ|q¾8hÎhÎh΀ìôìôìt/+3Ã•á‚æß_}ûêÛî‹î‹àKxqôÅQÕ*ªQûÇZæ[æaáuÐòÑkÙ¯eãŽÜYY {’=ÉžÖÖÖP˜P˜PÇ:Žuë‡Ùav˜a›u›u›&6NlœØ555¹'² ²þðý»ï¿û>n×…€|1ñÅ(G`ž 5Ü£÷pìáX}—x·ÿúä×'`ÿŸýkû×(ß.ß.ß.ý‹Ý7Ü7Ü7`æÑÌ£™G@€2*£2Â|Õ|Õ|•÷^÷^÷^ûM{³½å»´\¼\¬ë1x8ùp²f¸ ÷„{ÏøØê€¯¨£¿ùØnµ›%õu\µ_íWûASçÔ9}PµEmQ[€œàÄ uLÕ©:U¬ŠY VVR‡û†ûÂaç*z5Ӝ߭9oéªÒUÀé€3«ÛÞÇÞÇÀ§¾)ß”îüœä8ÇAõ¨nÕ ôÓO?°€¨I5¦Æw°þ‚oÄ7‚GýÇ;ã.kÎÔs?ëüÏïYùÜÞ.žÛûØóyƒý?ž]K d©ÞIEND®B`‚routino-3.2/web/www/routino/icons/limit-22.2.png 644 233 144 2773 13061246472 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܰIDATHÇÍ–ohTWÆßg2³ÚÛÉZ58e„¡ CS*qSMšbÙdÔ¥ÙÝâV ‘¦E‰ÑÊì’ÀH¤:K[¨éjœàXÈZüÓ 6ÿQÉnM[BƒhHÚÑÄäÞ¹ç·&×›öó~ð|¹<ïŸçyàœûž# ""˾öçìÏÙó2ؾÊ;_u¾ZòiGÒ`«¶Ußl†üöüv€‚S§ŒÛ6ófýâ~‹±ž—eb]Ž.[p€7|oøœ¿ÉàcW!ç\ιG:ì<¿ó<ÀÙèÙ(†‰ÄD`*8 ›y³Þì7ùóË_é‹@ö…ì ¶ïÀ±Ô±T<¯x^ñþ5Sð_/¼¶åµ-ãKÆ—(;¤ïnÜ*¤Ha®‹°™_¨7ûM>“ßÔ3õ3~Š6mmon{3ç£LÃía諾«L=íp˜Ã¸AOé)€ô[é·˜uU]À† ,læÍz³ßä3ùM=S?ãÇÚÊ‘+ 4ã€Ö§iÍÆÏºCw -8UÆ-cÄ}L¿«ßã±ñØxŒµRL2ù)ã®öP{ˆ¦§­ÒV1™á‡ÐxhøÙÔ7·ò’ˆÈÚ@N*'•ÊRó£}£}À*A•©2fˆ'Ƭ1kÌÝtÓ½ÈÈArÔ´šVÓVXM©)5à0‡Ô&µ‰fø•¶ · Ï—?„ˆHäù»ÞÞõ¶Igü.éÚ3´ÂûÄ?@ݸt£÷F¯%8rqäâÈE  …do²7¹(oô=F…“ÙI{Òáãácác¨ä¥áµÃk-=umWÑ®"`.ãGÒƒ""ƒ{ önì]¸þ—oßT½ûaNGNsÁcÁ”V•V•VAg´3Ú…wVÜYq‚ÓÁéà4xBž'Éä@Ò2Ôßßßßßîy÷¼{*J*ž­xÔn¯Ý^»Ý"NŒ%Æc°þôúÓëOC^§×é jTª²È"kQ}y¢¿ÏïóC^ûcí ¶›cf²u²¨_¶{Ùnã–ÇÜ[Ü[TüÔôS ~usðæ äœuîuî…Öß¶–´–€1jŒ£0àp83G5'm+ÛV¶­„GGG˜mŸmŸm‡{‘{‘{hhhW“«ÉÕmm/·½ ÿ”z1õ"è3¦õ‰Æ‰F`8/œV]¢/7ÏØ/ðQ}÷†î ª>û¬}«}+sþGþþàYíYíY ›÷mÞ·y])ºRtü!È‚åöåöåv8??‡êñêñêqØ_²¿d ¸"®ˆ+e]eѲ(ä¹â®8sç /ÿpùUñ×㯃þ÷ŒŸ¬¬&‘ë[Ebå±r¿ü¡.r_ÉÈ;Ÿ½ó™M²®ËRYz}뀵ææ\y2ǼÊË ÿ·õ ¾JøÕÜc¿¸Õ?¬àDèHè¨3“Yõ¥i¨ËigÚ‰Æ6°¥.«^Õ êZæ R1S1àoìf7P€7°ZP*¦kº†¦¾Nç¦s-~:B‡B‡à‰¾u‰?µwåSûºxjßcOç ö¡ƒ!ÊÉræIEND®B`‚routino-3.2/web/www/routino/icons/limit-0.7.png 644 233 144 2524 13061246471 14575 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍ–]H”iÇό͌’hmcíE"´EŠe’¶‚ÐTް‰MD[ø±^ÄB¹…ÐÇEAÝl7k†ÕôE^ÈæöIÐâjK‚±¶‹Õ䚸…ÈάÈl©ó~<¿½˜ygÆ•½Ù+Ÿ›—sžóœßÿù:ï# ""Kâ_{®=מ³íIzezåg7bv‡¶¶¿‡ìsÙç––Ì—IÛê·âSÇ‹$ó§ò,¿,‘¤ÃÕåê²yãöI¨[_·>='fû2º3º?èÐt«éÀÍ+7¯pÆûÇû&½“^HÚV¿o·ò¥æ—“ÿâ‹€ãžãžm\N—Sò*ò*V} ^ÕÛ«·¼K{—¦ì`ü d’©¼@„V ¥ØV<Þoå³ò[<‹Ó#àÞìÞ,µ»kwg\Š xy¯<¼ÒâiÝÀiN“ zD{Œ=Ì‚z¤`ÃIÛê·â­ñV>+¿Å³ø1=2woÏn¿ËïþЃ¡¨2ý¢~MÿÃXl,F©ƒê€:À¼¦úT¯ê Æ^ãŒqeØ£ÑF4õ½~P?˜˜ðc";µš%ðì¶”­Éÿ2Æ3Æ#‹˜ ~~Hp¾ Ü¸`\à#ŸÓDSŠ>|@5ÕT§ø£D‰ÎÑ:Ëlªiî5÷ò1‘Ÿ 4 Áë‰ ëøšO4ŸH .V7µ+Ú•äB > >ƒvG»£Ý£‘ÑÈh„yí­ç­ç­ÚÚÚ °?°?°®¿º>x}F~y:ò•HÜã%ù1=qaϿΩÎ)PT½5ÛЗ!ÈÅÝÅÝÅÝPÔSÔSÔkg×ή…Ðth:4Öçîs÷¹¡¬¼¬¼¬¶„¶„¶„@.É%¹?}˜õ0+¹šÆ_/Æ·ôdõfõª.//Ã?w.¯¸¼üòr(m.m.mNú=ÞaÏ0\½võÚÕk);Y­ŠV%íóÎ?8ÿN5œj8•r¿2×™ë€g–'Æ·ô,I«N«¦PÄñÊñÊ&2%""áøtëAýþF$³*³*³J-ëuÖë¬×"Óîi÷´;éw6:"¡¶P[¨M¤ckÇÖŽ­"]®.W—+'c⧈Y<ÇmÇmq‹¤¤Ph1ï˜wlC"z^#b‹ K òžä ä ˆLäOäO䋼/}_ú¾TdÌ9æsЬi]Óº¦UdÂ?áŸð‹HÔHÈÕ7VßX-’È äD ¼Þ¯ˆªT>å±lGmGE$ÍâÅø–»HÄñþòD¤¯§¯GľOD„¹kî2wIÔçóUú*EJFJFJFDò=ùž|H]a]a]¡ÈÆe—m\&RYQYQY!"%R"%"ý+úWô¯©ÝP»¡vCr¡8Ê!‰È'*¬Â £Áâ'ôÌ»•Zü–ú¤> ñû£ÌßÍ!sÂCá¡ð¨}jŸÚj“Ú¤6A¸9ÜnZi¥¦Ê¦Ê¦Ê`&w&w&7åÐþD SŸÒ§’Uà?neJÓ‚3Á™”:Öb ƒ|4#*W¥T½ªWõ@ -´¤€5´Øäâí8G8ò¿ë؜ʟîOŒxeÆxa¼îš9fšz®¦Õ4йÏ}àCìߨÆÔ˜ ttÀM6ÙÀq:éDyÌ<††fô½‰Y?¿<þŸ¾œž9=ørÏäž W.\¹øÀü}®_»~ àé§tÔ&O¾Ž;ì`"åËMßÁ›yÃgøžÑ·ý×׈ÀÛ7n‡žÛ«¿ÁÃóϽÌ4ÐK/ùÝÉî¨;ê ôàå¦oðfÞð~£gôm?rtmêàVÞ­<×Рި7€¶îZwÉ@„•¶ö­}È®g׳ë`ýi½µÞâÅ¡ƒ7ó†Ïå7zF_ü†¾þBÉPr'Þ©wÊ¥­«Õjeß1äE]t1bÄ|õ!†Š)¦ØWO»bó¹üFÏèÛ~cOáþ£ûÜáJߨO¼CŠ âé­Ö­Ö­ÖÁÀøÀøÀ8$Ök‰5¯¯7õ¦Þ¶ÙdÓÇw„ߪôôm?ޱÄ0ùyò³;÷-¨—ê%À>û £:j¶2ÀZÇZÇZõõõCSYSYS”êR]ª!^/‰—xx«Çê±zÀðùø=£oû Š„cáX䑚ښZg}%ð\$x)xIrE$$!‰HD"â†Jª¤JŠtgº3Ý‘æúæúæz‘’á’á’a‘Cu¨•‡—EY”E—ÏãwôŒ¾ã Ïžµþ‚ÔÇÔGÿ±w–ÀÄ[lƒ 2è•wÓ»éÝ44Î7Î7ÎCy{y{y;$ ‰ß›±f¬ÿ&=Ÿòôm?áX8¦§ Y•¬:2¸¤—̉Õ§úTŸ×˜˜˜…H[¤-ÒæÕ#•‘ÊH%ŒÍÍÍyuÕªZU«ÇçãwÂèÛ~Ž¿ÇöôžÞóh¶ßo¿ß~ÑÑèht á†p´¬´¬´¬@z2=™žôéVQEÕñ÷ØñO%pĉ÷ô²ÕÙêl5lÄ7âqP#jDø -³Ì2¸ó_v*q¥99äºSwêNߨյº¨ ‚ þ_×Ä—ÜcǸù±Ú­v2dÝ7hÇOôÒ z^ÏëyàWžñÌgÈÅ;óÇ¿ùOìå‰ýº8±ßc'ó ö?z•žßPÒ²IEND®B`‚routino-3.2/web/www/routino/icons/marker-48-red.png 644 233 144 4203 13061246466 15437 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü8IDATXí—{LTwÇÏ}ñZ긴Q†mºìâ Ú ®é ꀭ#©˜h…b$k7*Ò±mv[¢H@ÖךZK—@à8#1"Ú¸‘âKÒ kvÛªÁÄÇÌD°5 ‚ 30÷þ¾ûÇÌïÎ#V³Ù=ÿÌœ{^Ÿùó;3C¹!âÊX{¬=Ö.<>HŒéŒéŒé,X.«²*«ÿn¡lʦl `f$“L2×H5rÏóñü‘õÄ•‘<á|UTEU¢-Ò>o¡Ü)wʶQa·°[Ø­ƒ’ƓƓÆq±èVÑ­¢[ÀæÁ̓›M¹›r7å†tnçþ<žçãùy½§óøÛHý¥ãâ„8!N¸²ù ¥T¤T¤T¨o5÷5÷5÷±ÏCÏCÏC$H˜Â$&1 À\€®íÜŸÇó|<d½—Ž?ŒÏ‰Câ8äúO{%÷Jîÿo³ŽYÇ, Ëd™,~µF­Qku™ºL]¨fÕ¬šÃô ûóxžç×#êŸÓÑ›`lDr½\/×·ÃL¦FS£ß¬ƒ½Í,Ì¿Ýoõ[æbØ3j·Ú ì;@C¤Ìh“Ú$À\³ŽYào÷­õ­ØÛšª©ðp7S£©ÖTë7óúœ‡ó‘rO¹§Ü[÷kî`¬3ÖëXšsÄ9âÁ£`zP=¤ ðhmZ  ]x‚hÚà|„¢ôwùCqçˆ+Å•‚GÆ:ã{Æ÷XçÑùäòNyg=7œ(?Q~¢œý>˜`Êoó·ú[Ã*øØ¶#¼ä¥Å—€cÔ1ú$à›7nÞ€Ö/Z¿à;o:oo·ðÛ´•ÚJÝyŠ××O6‚˜;)#)#)£££z ©ÈCÚ¬6‡Xß·¾öœL;™a/°m£m0çë9_‡ù{òšòš¤z¿ô~ª7Zð°úa5Ày8ýó†CmµvJu¨LeÜZ‘Vðmá·…ðÂãG€ÆžŒ ÷3í6í€ì‚ì‚ðç7.߸ç>×t® Pá>˜â<œO ^©…J¾’¯äëw,–*ñ ^!¢Ÿ‰]bÑdËd ÑÆøñDDæ4sQüwñßM·N·†o’s%爈®õ^ë%"Zß½¾›ˆhËà–A"¢åG—%¢¸¼î¼n"ú‘Ü+÷ʽÖ!}áo2å˜rÔj}+ZXkƒvþÙ'ïMÞ‹¸L'ÂïÃÙê³Õ³%f õR/€Gíãås—ÏÆæŒÍ*®V¾Qù†6ÅëK•R¥Ty½8 Ç»)RR>T²”ÅÊbW+°ÔXÖ[Ö³Õzç~ê;ê; øöúöðœZsj ÜwwÞÖ¨ïþ;÷߀ö²ö2@-¿øâÅC­>5a;f;†õúWhƒØ 6x „ùÂ|aþâæ(@é_úý*Ê„²5M‚U° V>+Ú{½ÇÞ:OµZ­7&0¦3–Æ{µ-[Í,Ì¢[=CÖÁ†Á 5.e,eÌ¿S?ÉZéMéM‹IG3“™Ì²1ÄšGy”'×’ld#’Ü’[r¿už'06û ÎwœBÙêÙ}³û€Y™ã%øj×¼š`ųl–Á‡Àï*üîŸ%%j5Ï/OÊÃò°}ò®ä]É»ˆD“hMBG®œcþ$øZ,Ý•îJw… i{Òö¤í!R*” ¥Â¾_ŸÝÅ Ã7 ã";-\Šj= QêW‘º1NÉR²”,gGØìÖXjÂf×à7ø ! íö@{šÅ `°ÇÄİ"}&ÅD1±doÔ(~ÅKO ‹šÝ¢gÍ®¿Çßãï Mîtòtòt2°d|Éø’qõWú,ž–NK§ÿ²‚Zpô¢çÐ3$äÀüØì66öœV§Õiàƒ>ŒsRËËË…ÐÚ‘›ä&¹i ø—$þQuƒÏ)áY€ÑÂJ‚³Ûõc³»ªpUáªÂÐìÚWØWØWàó€éJ…R¡tÍŸ"ˈcQuú/åY³»Rj¤×2\ZWZWZÇŽdÎdÎdÎø¯é­vKnÉmI¡vj§v ®ÉU/–þG‰žÝý‘úª;ÂVa«° µ´–Öj‹Äâq @]þ*u*u*uŠHê—ú¥~¡;XÕ¹ÿ›ôwù”Oùò7‘æwËE&2‘Â%á’péþÏÏiêŒ#*ï3[ý`ñ£È ±jIEND®B`‚routino-3.2/web/www/routino/icons/limit-17.0.png 644 233 144 2765 13061246472 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܪIDATHÇÍV]LSg~Îi¥dÀ8/@ (&È™(™P˜™D7¦,ÓÄhL´&ìbKŒÛq±Éb¢ÄçÏ‚!ñçDÍH bÓ¢C „ckiÏ9ß³‹öÐê²{ß›æyžçÉùò½ý@’¿ å49MNaù«H>¶$¶äƒ¶vê¤T)UÞw‰Ç“ä»­ï¶"ج›ýÑó@„?ZÏÌ# ‘„­ÝÖ.†ñwdÍêšÕ±)!|¬›T.*½¹ëò®Ë$yáô…Óü†|zûém’œ.œ.$#ج›ýæ¼ÉÍïÞÐÈW\‘ÆH[Œ- —/+Nÿ6Ô0œN–o)ßB’O,O,B&IRN2žñ¢¤J•f¼ˆÂf=ÜoΛ|&¿©gê‡ü€L.H.ÈŠÏ*>SZBÎûS÷§šzÁ‹$¿ç÷Œ'5USIRÿ\ÿœs¤èÝ$I‰ÁfÝì7çM>“ßÔ3õC~ðúÙþXDµ*Xœ7tËÈ ø~Rtééz:ƒ|‡k¹–Bój3Ú ©×éÛõí¤.ë².“â7q^œç›!Džf×ì jƒñÁxR|â'«Ô*•äTXþ(UÈh&•‡ÊCÕJ>*zTDêÃ$ÉOÄEͧùè›—Pù‚/øÿ1Ç9ÎEá ÜÀ $×±€$)JE)},ñóS×-×-’TTEU­¼òþRΛdƤ¸N’F¶ÉÛõ~×ò®åîkîNw'9a°NXÉæ£ÍG›’­;[w¶î$Ï :3DŽ^½4zé¿~]÷\÷\÷ÈŸ­Ç½Ç½c/GÚGÚͪ‘-fv¯Û½ÎijGjGjG€_®ì:Ù©”¥ÏKŸ#0óCHOJ*j*jèù‘!'L8¸&»  Æ€Ô‚IK¢%¶%5Kv,Ù¨Šª¨ u#ëFÖ  ·©·©· ¨ê«ê«êê§ë§ë§’¥%KK–FŒu6v6v6¶[­(Ø2°xg,Ñ’h­cäׯ_¥ |´|=q"N¬Éµ¢ÔrÂr‚«€C †$ˆõ]®Y_³É'ݧ&NM¾Å¾Å¾ÅÁgCφž Î4gš3 h·µÛÚmøOè+õ•úJ ÞïˆwDò l 6àÕs_¹¯À¶È¶ɸiI²$q• a\6.Kƒ€V©Uˆ$›"N(B Ù 9BÜVÛVÛV ¤´¤´¤´™…™…™…À\ý\ý\=0•5•5•¤¤¤“/'_N¾Ü»sݹÀø‡ã‰ã‰@ÆÕL{¦É€w«w+ -‰¿¤A²ºIÝt·èºÞuÀr`}X?°ðË…Ûnb:b:b:"ƺsºsºs€ŠìŠìŠìH^Ý£îQ÷ÅeÅeÅe@^S^S^ëËõåú€Œ2Ve¬¶¾W1U1…@–7›7Ëz ãqÇc@®ö¥ûÒïöFßÊ# GHv˜·ÒøÉø‰œÍ›µÏÚ)üƒþ~ä–Íš94sˆô§úSý©‘¼0F€ô8=N“›Åf±™•¢L”‘ž·ÇMaü\\ARëé ûö‘ô‡ü„e4“ÊSå©j%]ºKŸ×ù„4ꌺ¨=Æ7ö”ƒ:¢pA£ð>îå^ÒPE‚H I'âè_„ù÷¹Æ]ã$©xjåØk{,jókÕ–jKdó3Esi.’Gô1}l^RP¡…’æá(#sœã¤p‹11FÒî¿jı Š?5¯æ5O&x‹¬¶V[IÞÜüoïå[ûºxkßcoç ö_zS`Ä?¸Î7IEND®B`‚routino-3.2/web/www/routino/icons/marker-28-grey.png 644 233 144 6242 13061246466 15636 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü WIDATXÃ…—kP×¶Çÿ»»‡y@…€Ræð0ˆ`  ÈC !¥IPËDcY%\4ä¤,1 Ê˼H©D|ñRsÉhQ$…b„„ò(Ž¥!"Br$˜¡{ïó¼å­TÖ—=»{÷Z¿½Ö¿÷¬&YYYYYYp´L\„Ð-t ݬ.뛬o²¾an¹ý¹ý¹ýÿ `ÎÌ™9çÿè.º‹î‹’ÌÕæjs5ûe(CÉ€?üá è„$$±/ä«ä«ä«H†ðHx$<Ò—‘a2L†ÓK³ŸÏ~>ûùKwó6æmÌÛH ¢·è-z“¸iú“•ˉ›\‚%X¢¹4—æÒŸ,ã–q˸kHnMnMnÍ©^‹Áb°þmZhZhZ¸èCûBûBûB\\´bÑŠE+HF¨,T*B4!š `›ÛîÛÖÛž·ù›ñog‹oã±ñ Ö †35S35]O6“Íd³w!ïÍ{óÞÇÆOŽŸ?饙Õ0«aVƒ”º¢cEÇŠn*°-°-°ÄË3äò ˜°;±*˜`‚ À&lÂ&s0s`2{˜=̈oknknkfS—ý/û_ö§©C±C±C±ïìWy«¼UÞKÒfi³´yy!Kd‰,±{=NvMîšÜ5  ÍhöxN¨ª…êæ3– Ë„eÂë5m¤6R).Yýþê÷W¿/œr2:ŒÐb6fc6DæË|™/ÜÇ}Üà8ÃÆøÁ~é$¤"1ˆA#êõˆ*W®<,®Ðô éA“pÍNi§´SöÔŠ«ÄUâªeë° Ë°ìៜ²UÙªldn27™ÛgWMµ¦ZS­×kÚm‚6AŒOܘ¸1q£pÍIã¤qÒ`¶t^:/hM  àxä[ò-ù ½¤—ôdˆ ‘!hD#@×Ð5t ÉMr“ÜG½£ÞQÙ6ÿÚ7µojßãmñm<6>’[—[—[biµ´ZZk[ÕFµQmd>É}É}É}¤ÕIç¤sÒ£‘4’FBÍýÈýÈý€àÁƒ‰HDHG:ÒÇâX@®‘kä€p„#3FïÐ;ôÀqA\Œ#é#é#é %b‰X"²P£Æ¨1jH—]¨]¨]èk¡ógþÌ?ç­©¨©¨©( Z­Öc…ÐŽÆÐ5×Ä5qMÀcÕcÕc ÏÑçès€ÎäÎäÎd€Þ¤7éM¯ãu¼žð„· nÜèÖÿ¬ÿè˜ß1¿c>@AA°"VÄŠ vÊwÊwʇ]t[t[tVØxl|œè#úˆ>/%;::â‹1 bÄb<Æc<†w…»Â]~YþËò_–‡ êwÔï¨ß‹ÇE@÷H÷H÷èiÆ~uýÕõWWàÀÜsÌj‡k‡k‡^§×ér®œ+ç)^Š—âg³[ж mA)¶ñØø6š6š6J¿8µôÔÒSK™ÍÆéEz‘^œ™³Ï‚? þ,˜±³agÃΆ=½Þw¢ïDß ÆR ©†Tc=•=•=•Œ}-}-}-1V8·pnáܧëû¯ö_í¿ÊØŽ’%;J»ër×å® {ÖÆm<6>ŸâS|Jü¹ ®‚«˜Ù™œä“|’HO¤'Ò ðDà‰ÀÀK./¹¼äò4sB»Ð.´ŠW¯*^à Ox‹o.¾¹ø&0;; èzt=ºàlÜÙ¸³q€ÿ.ÿ]þ»¯¼>òúÏšœÛÀmà6(A Jˆ¿À»óî¼;;k\l\l\LˆëÅõâzüC8,ƒñ|Ÿ²²deÉÊ€ºSwê´8´8´8UUUÀËê—Õ/«ÏÏÏà²ê²ê² `=¬‡õf³‹Ù0O˜'Ì€1Ìf Ì¥æRs) üPù¡òC0+(?~küÖø-üÆÅsñ\<;‹÷÷wKzpzpz0ýü¦ÃM‡›OK`û1t}èúÐuÆŽ°#ìclï{?Øûc·öÝÚwkßÓš™ÃÍáæpÆv »…Ýc-·ZnµÜú¥e_ÍújÖW³;uîÔ¹SçžÆëŒíŒíŒelgÜθqlKö—Ù_fiéç°«±:»LȲ„,’ÑÐÝÐÝÐ-i‡/ _¾•u‡ÆŠE‹*ˆ@€”ʔʔJ`aêÂÔ…©€EoÑ[ô€,Z-‹ÔµF­ { { {žÖtèàÐÁ¡ƒÀŸ±Æþ ¸FºFºFÂl½­úaÎs~˜C—.ÒEºPD$"é˜)š_4¿h>ÐßÔßÔߤûÏØù±ócç7xJÛ×¶¯m_ÛÎ|2ôÉÐ'C0ËšdM²&È………ÑMtݓƤ1i€$.‰Kâe½²^Yß|ÿñýOµK©#u<öxìñضé½Mïmz¤¾¥¾¥¾…šZ-ЧR¨ T¿¬›ª™ª™ª ;Dvý¾ë÷]¿¸¸1÷ ¬LV&+ûI9>6>6>敱/b_Ä>´3hgÐNre°p°p°Œ?ßáÏ€udYˆ.¢‹èhK´%ÚÀ9Ó9Ó90&“ŒI@÷²îeÝËUš*M•øøøÀtçÚkw®a­î9ÝsºçðƒÊEå¢r™Œe<ã¿h-æaæµo¸2®Œ+ã[Ñ€4ô…ÒTšJS7Q A!4âú»×ß½þ.›ïwÔï¨ßQr:$ $ $«ØB¶-„Š@‚ @&2‘ ÀŽpÔêFu#œœœ`€Ñ˜cÌ1æ@}ñ·‹¿]üMÔÚ•Û•Û• wÈr'“NK²} +`¬@ð°¶yRètß(ä"RDŠ®¤ð—øKü¥Ôêé¶‹;Ty¡òBåqëð†á à"o‘·È[0ÚN¦dJ¦€$Å(FkÓêM½©÷ŒÕµjÔ¶{ { { å2¹L.;çwÌï˜ß±ýÈF6²Ét¢âr[?j^ô¢W¼‹`#˜T8p à ÅQÅQÅÑÓy£.£.£.ÂHUDUDU„´Ýì&»Én˜‰žè‰ÀIœÄÉÿs"j Œ;ÍæNCÞÒÕÒÕÒÅbnÌ»1ïÆ<¾À^a¯°W<œ´TX*,iŸßM»›v7 `]¬‹uÁÑê¥Üj²ŽÔ:P8Þþãö·ÿ,Û,Û,ÛÒ>·w¶w¶wî®è¨é¨é¨á êÖÔ­©[ÃbH I!)SÕQ”PB °Q6ÊF"‘ˆ˜xÜõ¸ëqN755ÁÑÞ`o°7t1]L§}Îíåör{NZ¥xp‡ÅÍüÙ6ný$‘[§ÖñÓÚ•¶“%d YóÆô'G㹩­S[§¶Ò½Cß¡ïP."poàÞÀ½XEïÑ{ôTÜàû‚7ÉŠdEòé¼a÷a÷awa们ﲾ˒¶[;zÇ6M›¦Mƒÿmnmnmn%ëU÷T÷T÷ª¥Zªý×OÂÛÂÛÂÛ/û„ú„ú„rO¬ñ^·ŽÏrñø ‹ŠŠŠŠŠ‚h¶1;fÇìÈ{† /^Ä×Ò Ò Ò ÿå>r¹O¡åË–k¾iiigûn—ß.¿].…MMMñÛd²YÄVÊJYé·!‡rþžà žÐ9¶ X%>ËCð7öÚÍEêP'e³jVͪ£:¹*®Š«úÑgråäÊÉ•ôEY±¬XV̵ó‰|"Ÿx¹É·Ê·Ê·êŸQ]]]¤žºRWêÊŽYýÖXMÅÁáoìíZ ))HAŠ 'ÉF²ñª/«cu¬.}“ÒSé©ôäÚù^¾—ïíó¤ù4ŸæoýãÞº{ëî­¦ácõgk,'þŽã¿‘[^59{‡IEND®B`‚routino-3.2/web/www/routino/icons/marker-14-grey.png 644 233 144 6001 13061246465 15621 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ¶IDATXÃ…—kPTǶÇÿÝ{Ï›‹<,ybÄLL zbaŽò–C¬H‰x$Jâ!¥„ª\5áƒ'©C0×kŒÄ#&„¨÷Hbi‚ ¥ è ’Q˜™=»ïfƒ×T*ëKW÷t¯õ›Õÿî^›èõz½^?L™mª¡ËùÛümþ6kПԟԟdA÷ îÜÿs,ógþÌÿð[B°,/yÓYë¬uÖ²C8†c8FòƒÄ0Â#€7ñ&Þd‡ëëëHÿ+ÿ+ÿëõcÄJ¬Äú·²ü¹ùsóç6Ý,Ì(Ì(Ì !Bˆ"Hê‡ø£—ËN&! I´\, ÄñG׸kÜ5>'¾ÀP`(0”›]—Åei¼êXìXìX¼ä=M‰¦DS‚ú%+—¬\²’ä%Èd 2 > > >úÒïÒ|i½äoÚ¿7ž_â‘øxoŸg¾Ì—ùŠédÙF¶E”p\qá«ñSã§ÆO…666zö¬4®4®4R÷ÂŽ… ;È+ŠuˆàK7Ð t@Ž“ãä8@v‘]d\pC9fŒ‚‚,¥³t€ë⺸.À»#¾’]µ®ZWÍ—Kñ%‰²Ãblp'»“ÝÉ@J[J[JVúô;éwr±El[àKtDGt.à.Ö&k“µ ¸S{§öNí#€ïâ]¼ûh"‘xOâS¹©ÜTزmÙ¶ìéY¾~'üNø€\Š/ñH|Tˆ"…ÈgßöôôÄ¡§“ŸN~:™”zÈi £a€´eΫΫΫ@U`U`U ÐôYÓgMŸÍp±>ÖÇú¶Š­b«\ÅU\~yã—7~y(q–8Kœ€9ÖkŽ}ämÂ&l‚\Š/ñH|¼sØ9ìÆǦƦƦ"OuYuYuO§ÎS5·–[Ë­zªzªzª€JO¥§ÒØŸ°?axfç3;ŸÙùèEv‘]¨Ú¨ °¼eyËòPWWh–i–i–Ü%îwifçYϳžgÁ«rU¹ª\8ž {.ì9äµ · · ã0ÅGø‘z†ž¡g¦×)H !!3ŽæYçYçYœÕ9«sVѓѓѓÀÄš‰5k‘¤еصصøvôÛÑoGXy¬yí“×>ÒsÒsÒs€±»cwÇî)ú}Š,ÊeŽ2CQy¶òlåYÑ1àp ¸èùùù‘_6¹Ín³Û¼ÇMö÷íïÛß -hùÓQÙ}Ù}ÙýUc†1Ø!ùºÑna…Tj`†fá&rƒR{6ölìÙâõÊ·•o+ß>]h ²Yƒx[ÕPÕPÕÐŒvÉ]r—Ü…è@"D2È X"Kd‰`hG;Ú¡¸lºlºlb/µl=Øz+ÖŒhF4#ý“îsîsîsï¼™3ÿf>ÀLÌÄL˜åóµêð¶gDÑGôÁ¬7n ®WŽ+çýƒ¿Æÿö£Áh0¸â†´†´†4öÙAvPˆßˆßˆß€ATa#l ˆ€‰‡¦‡¦‡&œn\Ô¸¨qfi,‹ÆˆKÅ¥âÒ÷Ò"ZD‹ú'½R<ê= ©Ó´'ÞOÅÿß"®xJ»žÝ$‰$‘¤—ÖO}r\8çÎrg¹³Ä›ÅÍâf‘.—´+vŠb'Ôt]@À)ä yB_D}õE”'Ú’hI´$r]ÊEÊEÊEÅ˦Íž+b©X*–òG½;ûWiÇ a—2 ïÀ´†¼ÚÝíÕîQ¯vk~£]·Ámp Y¶2[™­ jJ)¥#R&š&š&š&DGii)ץܧܧÜw³ÞyÏyÏyoß§]«ºVu­¼€Zé>•§ŸæÇŸ¾Ç&¨½~òj÷Üo´l ¶ó¶J}¥¾RïÙí­èguttàDsksks+IWwª;Õ€¨µ¢vçü«ü«ü«ÏE&D&D&Ðao¼¿xۉǹ8üŽ%'''''Cðv;˜œÉ™œ¼cyÒò¤åIügžgžgÞUA©ˆTDþç?¬x°âÁŠ€³¶[¶[¶[ìï7¾¾ñõ¯=ϹÇÜcn.G¶\¶\¶<7”•±2Vöm=P@ÁõbÃ¥òGáM”ð8ÁØïh· h@ƒ'ŸÕ²ZV›ÜM«i5­þßÈɵ“k'׊OÊJe¥²Rz‹Ëä2¹Ì󗢪£ª£ªÿœlê6u›ºÉâqŽ8‡}åõkð:~ƒâì1íz¯ O>v`vð×IÉ ÿŽb ¬5üm«*L¦ £·83gæÌ÷ÂÄÃâañpÖ@ç¦ÎM›€)@DzýI…åÄqüúx¼‹©ýÊIEND®B`‚routino-3.2/web/www/routino/icons/limit-24.6.png 644 233 144 3011 13061246473 14654 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܾIDATHÇÍ–áOTWÆß¡*3Á‘­"£b”Œ~0-lÚ†TmSk§ét#Ĉ"5]«7±¥Iã‡Û‚Ø´YÈbµnèN€ZkRÒ¨,h$QèPµ]ˆ)2‚™-Ü™{~ûaæzÙúx¾Lž÷¼ïó<™{Ïs€ˆˆ$Ç~â–Ç-³GqÜn³n}ÁúªFññX¶Y¶õ½IŸ%}°¨qQ£~ÃÄÆ¾Ñ?w^Ä䟫gÔ%YÌB¼/Þg)ˆáÃðúº××YS£ø“‹`kµµN‡¡ìLÙ€–/Z¾à-¸Óu§ `²`²LlìýƼÁ7—_ÿA_柛Î2ñ âˆ@FQF‘s_´aÀ /¿øò‹¿<ñË*"wT$ˆ±&æ`c?ÖoÌ|¿¡gèGý,y~Éó"ðʯ¼aûGtàÆ—pðɃOzZ+ð!’á`8ÙÙÎ ¨‹ê",`bcßè7æ >ƒßÐ3ô£~ÌG©qƒ§ßÓúZgxH[©­ý÷pb8-æT–U¶ÊRY ¯××ëë1׆~ˆ”*  B _Õìšô`”ÿ|þyØüŸÍ?nþþ<öÌGÏ|ÄÌð_‚ÙÁlU -™-™ ODýHäÖÂú…õÊ¡žP4·žm;Ûï\µ­j›)3ž3ž3§ÆNƒj_µ¯ÚŽvG»£¼…ÞBoá£Æš4h:i®4Wš Jì%‰%‰ðîô¡ï}ÓïhUZÀ¯µ¿Ö9‰ã‰ãÊ'h‹¬‹¬úuUvwËÝ-æ±ïzºÓÙé„5Ö5Ö5VØïØïØï€Æ{÷ïã¨ã¨ã(ß,¾Y|VÕ®ª]U ¾߀Ï4vòÒÉK'/AŽž£çèÐ0Ü0Ü0 êJ?“~Ú{;žíx– ˜uÎ:A·ÚÓìiúõ8õi¸0\h¹n©_» W¤wïÊ•²Äý7÷«îWEŠÏ[ü­È±‚cÇ D¤TJ¥TdCý†ú õ"½Ž^G¯CävùíòÛå"þ,–?KD«Òª´*ëbëbëb‘ĵ‰k׊ìÎØ±;C$õß©'ROˆŒTŽ$$Éö±O„•Äo¹.áãû.ï»<ø{ä«î¯ºUéü–¸­q[™Ùø¯'6ž{º=Ýž­§[O·ž6ÿ‘†¢†¢†"ðññ1ë¹y¹y¹y0•9•9• ;6íØ´cجVeU°s{‰^¢3nP¥Ðô[ÓoÀºØ;Æ'±SÉ›oVÀS£§d|óhþh>Œ´ôô¡F{G¯Œ^P}¨>TTPA„ºB]¡.¸ï¹ï¹ïeWve‡@e 2P * *ú^}¯¾&r&–M,CéÙ³C³Cæ©äçò¬ò,#pwÄÖÌ10råaŽ9•“Ðʆ†6'¯¦™fP("4§J(¦ÔB•¡2T®Ê%¤–Åø úûúûlS¶©à<~0rìÿ¾ê5nzÊ÷cD*8‚®¢ k”ÕªPˆ,~$ʇ3ZM4-.q‡êÖtÓ‚(cÓ„H¶JA·%©„–¨©Ða· YI´lX«ÕƪYi]K[³01¥Ž" 08̽÷<ûcæÜ{g’Õlvß?3ïy¿ž÷=Ï9g† Ì!aÂoŒrE¹¢\Üdh!fFÇŒŽ›×в(‹ò­“$¤“t h¦µD$"™„ë´–ù³x–å¯Ço Ç£ÇWFÊHï ·/x^ì;Äç·ŸÛÏíWãÇâÇâÇp~çÝwwÞvÝÛuo×= ?+?+?KÓ™ù³x–ågõžŽ‡ðÂõ%ðãü8?>Î&”XœXœX,—7_i¾Ò|…>ç}ä}ä}@€>L`0€@ÕCvæÏâY>–?¼Þ’žŽ˜bù!~ˆ¸Àd]κœuYZ×èôÐÐTšJS!É•r¥\ È«åÕòj@¶ÊVÙªÓCvæÏâY>–_Vß«B㜜“s"V‹Õbuk 0ךšJVØ[´žÖÃ+µN×L×t Ðè0­d(€›¸ @a `$€Ða: H­þWý¯ô-e¶2^æl®5W˜+$+«Ïð0|Ä0h4 ný-s0U™Ž˜ŽÐd÷C÷}÷}Œ†òx庀-` cÐJ¨­l¢›è 3(Px•¥EÓå:yJžR}¼î‡î‡î‡5U™ªLU4™áQñ‰¥b©Xz½š‹_i|…¾Jà“œ33º²þÞ ½àdÆÉ ¸Ztµ0ˆA€ ÄR´”–êã»–v-÷J÷J@r†5åk,j,j,¢¯«“ ÃG¨'>%>%>µ#›G6lü€ !‰õìsŒÁsF¡×íïØßÑ× \ \ÑëŽCŽC:oÛPÛ æ£cX}†‡ác@í¨ßQ¿£^ëLîG&2x“I˜Û3·JòKòõ.žºx fTΨ€ïlßÙôö[/ÞzæMΛÔ7æ|ßù>OÐKîŸ~aú­>ÃÃðñ¡#õ¼Áb°,ê‹"{I7é&„üJN‘S!Äû£÷GBYl_l×߉é‰é„¨TBÈ÷åß—ëí;^Úñ!„X“­É„ýmô·„2e™²Bf†ÜÎ^Ò«Õ7´Ú íê‘g÷+µ­mXÛ°¶}O¸©_¦~ðùš| `[_U¥ŸÈ–o¶|¦Óˆ~½£¢£ÞŒ}3ò2ó2Àoö›u~~g¬3À­ÐƧ€²‘fÅeÅeÅ¡á#¼•·òÖÀƒÐBíé²Ó¥§5òûä™tÝãóÆçð×Ð Ö«Ö«pôâÑ‹××Ǿ>ö5Ìœ; ©'RO@^]^‰5´ä§%?òÙsûÏí×ê]<ÞÍwóê øG.KãÒˆ)d ™5ì”%-6›Æå%îßõ-ë[¦]4ײղJf—Ì´Þëæ×Í€„¯¾€Û»nï€ÂúÂzÈ»“wr_Î}€Ï0j°m隥kàü¶óÛà÷…²¥T¬x°â¢>Âa°àÃQc‰±ÄX/‰—ÄKŽ!õÂÏÏÙ³A>Àà(ö¶‚¶øá MÄÇ&3ç£9Àg%Ÿ•è‘’­dëTïÄàÄ €Ñ`œòa[K[‹ÖnñÍÂÏ ?W|*À½Â^aï? ‚z´‡„Kâ Cš!Í6pŠØ+Ëß-—沄RÜí‚Û À©¤SI¼wæß™¯H×Ñu y$¿ò±ò1øËýå€\ÔòFË0Ü>Ü_Ûø§7>½mêZÃ×ð5O6s ¹…ܕͅ¨ç«+ä 75q®kc\QJ\ÝÎ÷œïÁ¥r÷€útÅO›i3 ýzj€‚4—¾F_Óæ;äjj’f&ÍJš%•ª“<,ÛÍ*4+±«hÒ°f“l’-&Nâ$NBð³ðsù9õim2ÙL6Éè~»ÿ‹þ/ôÜ•.K—õ  ýž\hF3@ è'ôøÂ!à÷7vgìΨ/ЄèÝ®# ûö%ì#„7ófÞÌ ¡+b0g…> „>¡Oèã:“&L>Hˆ¡ØPl(vQ¹›mÎ6g빫Ø;üpÁ€ÇxŒÇny¹¼\^®Í·aMÚ†54W}Ë£Á8ô$¨›f’0áº"¶žpê—áºif»î³wí•öJw’Q2j€”aeXÖ®^ô¢pE÷F÷F÷Ò*'cø>f÷Ÿ"¨x"_yú‚ÐÁÝœƒsp=w]Ý®n»R·Ô-ukÌJ˜J˜JV­[5&/S¹Ø.´ íï¯gT Q/àlò ÑX»Á£ãîqÓqÓqÉèv¸n?üðcŒ!µwÚ;íÚµ#6‰MbSoè/Iôµˆº¡uòܳF Øâî_ÿws¶çlÏÙ®q×µÞµÞµg‚vªîgãlœmSExþqD]Žü—ò,înj„¡f`5l«²UÙªèŸS§S§S§¥ÛêV{à±'’VÒJZIèÚÜõ¢Èÿ(‘Ü=®çü‹ÛÃíáöd ÙB¶(+øEü"~ÀŽpäï_&ù’|I>B„ëÂuá:÷·P`AÄÎýßĨ~³ ±ˆ=áæ·‹xÊSž\×ÅuÝÿupý7®ˆéÈûÌ­þ7=zi…-¨ÆIEND®B`‚routino-3.2/web/www/routino/icons/limit-35.9.png 644 233 144 3030 13061246474 14663 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÍIDATHÇÍ–íO”WÆÏ €S´†Ù¤Þê[V6lÅÝPÜ* 0A_²·ÄÉê~Á:Z³ÉÒw ‹Iq ZB´ÛÀ²Ô46e7Ĥ 늂‹¨ÓF(ex íÌ<Ïœß~˜yvˆý|¾<¹ß®ëÎ9ç¾Î „bcô/ nSܦ¸äˆgùו¬+Éþ[ľ¬‚n¿nÿý?Â×ÀË/w„Çc¶×òW× Ã_ͧùÅFs$ºݺâ¨ý.Ê9”³Î±ÿ:ú^}ï÷ ¼Õ÷VÀÇwr¾þv`±x±b¶×òµz o5¾x÷9~! þÓøOuHLHLÒ÷¤ïÉúC$a2 ,å–r€gkž­‘q zY øð¡}s«l-Í×ê5< _ãÓø#ýH)J)ªŽTÑ)¿o§½¦ñ…zsœÃŠOñ¨6ÕFä€@‡b¶×òµz OÃ×ø4þH?±­ô !DÓP=Q=á9€Ðò(ôJèò‡ü„x €TßQOª'AݪnQ·€jWíªø3 4ðü'Ã!Ũ ) ¡ÔP*ÈßEð¡ÚWí4~m+Ÿ !ĶfÐûô>ßZê'†&†€°d,ÀOí´ƒœ–Órz¥ŠŠ H$ðãÇ¿ª#E*RþÄ9ÎÈ"Y„Ÿ7£ø%Q>ÿ^¤ÁŒB\¾M²£ÆQ£Á…sÇ÷Œ~2ú 4ýº©¨©y7ýnÚÝ´aOEOEO´”´”´”@»µÝÚn…ÊaÅð£ctÛè¶Ñmpq×ÅÍ7#ŸL>r=rÅøäÇÇmk/ßá^!„9 ½õ½õð8eáÙÂ3yì'ïmxu묓Ö{Ö{q!ãBÆè»Ñw£ïdff‚å€å€åØ:m¶N˜ŸŸ5ô`öBöRöRö)°X 7sÇàŽA^Ÿ: ÈcÐSÝS òÍH?BL2&¥‹FøOîÓן¾-ï¹ö¹ö;ÑàN€Ý»3vg@®NW§S®)×” •ç+ÏWž‡®ã]Ç»Žÿx¥®˜¯˜¯˜!ß”oÊ7Åü¿üyž?ϼqÝrÝ, ‚šþ’ç%t æ67Ãc¼?wjîTlìWþëûÆ÷ TVVÂöüíùÛó¡ùhóÑæ£pâቇ'ÂÕš«5WkÀÔjj5µÂÍÌ›™73c xf=³žYÈqæ8sœPšUšUš MñÎx'\û{צ®MÌAXÖƒNZŸ´><&Ô½ëÖ'H7ŠEðá~·Ímƒ_ü6wsîæ9Óœi΄²¥²¥²%¸ä½ä½äÅójójój¡ÃÐaè0@À0Ìpßyßyß ‡‡‚Æ5Ž4ŽÀO ©£©£0ÜøUËW-ËO–Ÿ@x!Þ/ÝB^ÕÎX÷|÷<, ¿_øZák ‡ † °ÙÇìc0Ò0Ò0Ò[;¶vlí€ä3Ég’ÏÀé¶Óm§ÛÀkóÚ¼6ØåØåØåÏYÏYÏY¨L¯L¯L‡´Ô4CšN Õ9ꢳ{ ûG?:4GϘ6|Y›R››åW?,þ°³wf?›ý ©–«åjyl…‚Æ 1hoœ7Îò±|,ƒ¼&¯Ék0¿s~çüN Ÿ~ú!X, –ÁÌôÌÊÌ Rþ[IR’€áÔ:kÑÓË··ŸÓ±øˆ®Èwþ¯c¥²¿l”­²ÂÝáîp7È;ò޼³J¯\Ò%]@1ů:ý¹ì`ÈßÈzYž Oá—?‹âÿebyb@ÿþ;ßZ¦4Ó”? )¯u­u-DÔ;4$?W” MR§i}ð{ìØAþCöË~à·¸|¹+å×rRNÁh~£:©N’ÃÊŒ2|©)¿uu z^ù_Ü»ò…}]¼°ï±óû?ÿ^C;ózIEND®B`‚routino-3.2/web/www/routino/icons/limit-100.png 644 233 144 2611 13061246470 14565 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü>IDATHÇÍ–ñK•gÇÏÕ{¯^RÛ¢ ÁBÖ‚¤ì‡X [F£K5á¨\«`4¶&Ë`Aó‡­fclZ3ƒ …Zpc0¦«ÁFKrkâÕj÷Þ4tÊE/iú¾ïó|öÃõ¹ïuÛàóËË9ßsÎ÷û>ÏyÏûˆˆÈs‹O¬µYk³ RvÖן[[ýòå”ýµžÝžÝ| +[W¶<ÿíóߪA×6¸‰ÏÌqëgò¿<'®#'”òT-Ú'aoÙÞ²ÜRö}¸¸öÔ†÷ºÞë¸Ú~µ÷áÉÏO~HT%ªÀµ nâM¾©—Y_Nþ‹_|7|7<AŽ?Ç/Eo½±îH*`dß ¾ ð8ûq¶Îço <]$IbÖd†mðÅx“oê™ú†Ïð§ô¬®\])»ÞÞõvà›TÂàwÐðbˆϺ|Ægä´“Î;Î;̃îÓ}xð€kÜÄ›|SÏÔ7|†?¥G–žíéס&·&˜°nƒZ©V‚ª´.Y—°ô'ºM·¡d]ªKt Ø1;fÇ@ÐïêwÓ;ˆ.×uºmÇ**±ô‡ö6{[ú…o3û–ó–hÃ/™‚Š[PÑÀhÒ Qéº;œ‡Ö+Ö+Ìê+úwý»KH9å”[ØÂ– ÿŽpôi}ZŸö±—½ø6§Ãé`–`ª>  óh šô=‹Â¾þ 5j2Ùª\÷Z×­ëî‹÷}Õw¦ï <è}Ðû ×åjjj…s¾s¾s>xÔþ¨ýQ{Þ3Ô3Ôç|­ºUÃ_Éh~4?cÇGR|.JÏ¢°»ókç÷ß­ºTB%˜†òByà=î=î=¡x(Šƒ:¬«ÃP:]:]: eÍeÍeÍPz¶ôléY^5¼jxTtTtTt@Ùù²óeçaÃü†Ä†$®OÖNÖ2¿(¯^_Ž\Žaw?(ø±àG⇱é±éŒÞÈqî:w!¤BNÈ‹… /Bx.<žƒîÝ'ºOÀ¦ð¦ð¦°›·}ëö­Û·Be´2Z…kv¬Ù±ÆÅ+*îU܃‹¿´Ÿi?ãú/ã}ñ>0z²D²ƒÙAJä5ÿSÿS1kJ¿J=õ"µYµÙµÙ"%ñ’xI\äÙ­g·žÝÑ÷õ}}_$ïNÞ¼;é<)¸Yp³à¦Hr09˜É?˜0ÿ`/x\ðXdNͽ4÷’Ë'¿ù›üM"FO–ˆêQ=ž?EÛ;íéÀÕ⓸ÄÝ‚L2ɤˆåXŽåˆ   ˆŒ¯_?¾^$v!v!vAd¤v¤v¤V¤:X¬ŠÄü1Ì/ë‰õÄzD¢›¢£EŠ›‹ë‹ë]>ÇÞeïIëI÷Óé£ÔõNÃBáB¡énnn†¶`[°-èA]¸.\†¬`ÐÐÕÐÕÐåâû÷ìß³Oî4$’êõÛcœïü¼óó%=öÿ_%7ìN»Óm¹™-3g6¼wÞ;ïu‰U‹jQ-051515jL©1ÀÆÆQ©‰©øTÔ¸ÎÖÙh;a'g‘Ï>Ôx¨ñ?_eq žž$½q"Ž;Ç@íSû˜Åbé:ÊQŽ‚Jª¤rIèSú”>zTêQЫu¾ÎÏÀëí^»—Y>JϱµÃk+ Äþ3Çþgò[fò;‡À Î1çM\áŠ;‡¸ÆU®‚î×ýº見Œ£¤‹´îwÊr,n8N£­Û85¾ŸÙ©%“Ùþ+—ííbÙÞÇ–ç öO0Ù/^ôIEND®B`‚routino-3.2/web/www/routino/icons/limit-159.png 644 233 144 2704 13061246470 14606 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜyIDATHÇÍ–mH•gǯsÒã9à[b¦½Ø‡rMjƒë…Ê:(³I’‰°CŠZk´H)iö2æ„ +FJA—µj´&fFº"¢A89…œ²ƒ§Â©§ó<ÏýÛ‡ãsžÓÚ¾wyøß×ËÿÿÜ÷u_÷- ""©“_{–=ËžÁö-Ö¼³ÀY0ï\ÿ¬ƒ­ÄVòà[H9‘r`jÓÔ&ão ›vÓ?6^ÄÊËgÎKªX ­ ­¶Õ“ø0”å–å:§EðÝàjwµ¿Ò`ëÅ­Ο9†¯`¨g¨àÅê«Á¦Ýô7ãÍ|±ùåð¿øE þJü› ˜ížíÎþ:âð(ЋЋžNy:EÙ@IT« AÌ1ƒMû¤¿oæ3ó›|&D@úªôU"°¾|}¹«1ð÷Y¨Ì¬Ì4ùÂí@-µ$‚Ô‚úgúg„@u«nlØÀ¦Ýô7ãÍ|f~“Ïäè‘7÷öèZ(u–:—á[`¤)`,7…›«ãªCu LÉú7ú.}èóõùú|Ð7ë›ôMÀYi5M­T+QÚÐk÷k7aµS[£­‰þð-Æ7èt@™ü+hA=†ËïòãÀkxèÖ|¢„—…—1¦~QýªkÜä&7ç<ç9 ¡¡Yf¥)MiÀAª©Ž‰ûBïÔ;ÃÉg?œ „\>—/gê™öóMØV³­ÆŒ6«áËáËO÷ÇÝv¾¾¾OÛ¼¶ymóàäÚ“kO®…† ;vÀĉ /©/©/ 꿯¯©¯‡ccÖŠ«?#|DϤ°{{¸ãùÃóp@U€ñÂxA¨uzkbk"ÄíŽÛ·ÚúÛúÛúAkÖšµfH¯L¯L¯„âûÅ÷‹ïÖæ-Í[𡳴³´³r–ä,ÉYKç,³t,ž¿8kqŒ¼¸¸KhR^…zpîÖ¹[¦°{{ì"É]É]|$¯Væ­Ì‘""¶FœøðI‚dTFEÒªÓªÓªE\n—Ûå¹síε;×D‚EÁ¢`‘ˆºª®ª«"åÊ•?ñ§úSý©"ÉÇ’%éñõøz|"ŽGª#UäRíom¿µIB¤ lªiÅãE¢z`jÒÔ$£Fü#~ëØënm‘¶ÈÚ²üù7òo€§ÄSâ)þ@ ?›ë6×m®ƒÆ™3gBVoVoV/œ:~êø©ã°Ü¹Ü¹Ü î…î…î…à8ê8ê8 gg6;š1|eÏ–=[¦»ˆqɸdë¥}ª}*æH—x”Á(õD=QODìA{Ðòy‡¼"sCsCsC"þ …_dÖíY·gÝÌÌÌÉ-Ë-Ë-É/È/È/I;”v0í Hv{ö‘ì#Ÿm¶WÛ+Õ­1<£žÑhIV蕯§¿žnÖ¬kYײ®ZN·œn9 ÃŽaǰ²“²“²“ ¥0¥0¥ªÚ«Ú«Úa´d´d´ ½…ÞB/dÖeÖeÖAÕíªëU×£+âóÉš¾à9ã9cÕØÿžJ®hÍcÊ—+^æ½Ìƒ‰ë×'¬Ä„ÆCã¡qÎÎΕ¡2TFŒ½#ÔꀀŒƒúK¨½ÚïÚï1|ámû¶í{ëT.¨×k(^Ý«[} ŒMÆ&Æb®ˆÒZU«jA5¨Õ3ߥºT¨Cê:ê;µ_í±¿¯ÑŽ0ÆÑ>6ãá @s ºßêcÿÑùÃfç×ô`š¾WßK˜Ä—lg»%ˆ_¹À…˜?8L+­(Õ«çè9„¹«ÿ¤ÿÓùÒøÒxs¥Þèüïì]ùξ.ÞÙ÷Ø»ù‚ý×¼8}ÍšIEND®B`‚routino-3.2/web/www/routino/icons/limit-27.3.png 644 233 144 3002 13061246473 14654 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü·IDATHÇÍ–ýOTWÆSÞ¦N±°4M6YPB!iÜ´‰ešiÌ2£m±‰¼,Öhõ!)YÙ¨›´) ¨Xc øBÜ4ÃŽ‹¦ TšA°­Qi¥ŒŒ¨mS°QLÁÁ¹™™{ç|ö‡™ëí?àùåæù¾<Ï7çä<÷Bñ|ô+À”eÊ2¥D°éïF¶_ƒ?VO‹ç…Hr&9ã¬Q¼* + “_ˆà67˜Ï˜Ï#M Ý,X¤ðáC_s1XÏGëõ~Oç×õtýÈ<ÒKÓK…€·Þ}ë]sw¤ÁÓ M™M™º^è ð!bÕ§ú´*­ŠH·tGXÏëõz¿Î§óëzº~dã(ýBÑnƒÞ^ÿU¥…Ò@¾¢ÚU;!9K&™HUUýª´j­J«ͤ™4È>é”Nž\2¬¨ÕBHý)”ʆðh„_×3ôõ£üJ!þÒ fŸÙç‹—Aï¨wØ@È×åëøùñÈ  Ê`Œ¤?þ"D(ïe/{¯¹ÀY,‹ñs0ÊÿBT/ªÏ…È<‚;Bqd„¥[k·Öêlá—¯%]m¼Ú–xîÀsHo½·Æ[3y3y3yÐÙÜÙÜÙ =Õ=Õ=ÕÐ{½÷zïu¸uêÖ©[§þ°cxl«Ç íÇÛ»Û»‘Wn_*»TfèÉàVûV;èóíŠB\i„³»Îî‚Kïß|õ櫲βhî2w°6X«¬U°¢cEÇŠ8Ôx¨ñP#Ø2l¶ (((Ñ-ºE7 VVVywxwxw@ZkZkZ+TdT¤V¤ÂŸ/}ñ(‹ÿœrL9dœå, ‹Ì#´K>[ò™t‚Ü?ÿ=y®ï\´ü{OùžrC  ¦ ¦ Žm?¶ýØv#~8épÒá$¨o«o«oûãNM%L%L%@WGWGW¸ê]u®:(9PüNñ;ðõÕ±©±)ß°oÂZ2±dB:¡ÔäÔäð¤l¸WvïÑÖ27ö×ÑÜÑ\(Ì+Ì+̃-Ë·,߲ܜ[5·jn¬´®´®´‚gØ3ì6òaOØöxQYTØ0´ahÃdÕfÚ3ípùÇko\{ƒ9PÊ”2œòiʧáIn³Ø-vé„…æ…fß6¹{r7˜]ÉMÉMк«ugëN˜œœ4„,:XV›Õfµq¥_éWúa!g!g!Nœ89%ù%ù%ùF]ñËEJ‘ÇמÞtz@ 3Ð ZƳÓÏNK§I~üðˇ_Ž'Ä7#ߌ1Zý}Î÷9Ôk"4šAW‰+ß•/DƲŒeË„p«nÕ­ 1~qüâøE!Ö&®M\›(­Å}‹û÷ a±ØF„X}~õùÕç…H_Ÿ¾>}½)å)kRÖ±âDÁž‚="¸©´òóÊÏ©¢]ÿ:!L“ÊKÊKãß Ú¢·’m»·íŹ%wÿ6ûÚìk0ãž¹9s9»m¶v¶C¡À<Øü`óƒÍ ¸·âŽ9B–a ÷ëî×ݯ8p€Ú§ö©}p÷wß=ŽÔº‚Ž Ã¸•L¾—ý^¶n¸GF¢køè¾òÈÇreîcNõøj¡…–¬  Äàxâ‰ùÙ*[¤C:ðGVe,÷^ö^0/˜|ñ\Ò}챿z»¦ @öFœY~«Y4 Èÿ¨ó굯‹§ö=öt¾`ÿ =k†£ÝÛIEND®B`‚routino-3.2/web/www/routino/icons/limit-1.1.png 644 233 144 2200 13061246471 14557 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü5IDATHÇÍVOHWþfÖÍîú?¢B$` hIIOi\Lˆ6hÖñ°izjn1Ò¡‡öRÒ5'C TAÌbãM\KSè¡–J6Á¸‹B+â,º™ìÌ{_;ofLlíÑw¾ßû~ß÷ ³ï·$ Öy‚Ô›ô&½º„õ/¼zø\øÜ?•ð}›ÔzµÞ?Éš{5÷HòðƒÃÄ’‡Õ¾âûûOßï§ê¨…WM„&´¨ƒï_<n(áoçÉH2’ܶÈkSצHòÑÃGyƒ\{¾öœ$7£›QÒÃj_ñU¿ÒóëãÎ;þœNk¯ÉСÐ!€ISµN4N4N4’Á©àTpŠëëëðXKÖ’µäáýøvÔ\5W•¾Œ»þN¨ž«žûøS ­½­Àh£¸¡Ïê³1ÌCÖ±Žu a¤a¤a]²KvÁ]¬b«™“9™4C34ÃÇo—í²Ýã£:p"p¡ÐF]'ºÝl‚ƒœlxƒ7€üLž–§>½OïÓÖíÖíÖm +ä 9ÏGëq=0Î8ã@ÌŒ™1ÓÇß,l6}Á 8‚#.Úpý<: žˆ'ÚŸ€uÁº@ê,c@e(óôä¢\”‹€6©Mj“^=³’Yɬ¢BTˆŠ÷ùH#´/˜xá¢z×ßÉ£ùh>ºðšMÍЀWùR¾Ä[´¢Íž^y¢œóžsVÛ‡}ëþr¸î?×uŸ÷ᾟG@DD…´Ú makFýóÖÎ[ûú™>iAÜÆ¸·ká•ÆWRÜ)n{4Џ“[/åÕsü²H¢Ž¹s;ã Ãx?¼—ó^μ´®××…¿LØáÙá8ßr¾…Á;äø£ðBˆb'îä;õ_,¿ìN_æ|?çû¸‡07qn¢d”d”d~J¸— ÖoXð(þQ¼ÒÀúH&Y::ŽMÇ`'Îwê>‡ßÑsôCý¤¤ˆ@éû¥ï»šC£mðEú鎞q8ÈA’ÁÔMÀÚfm#j@ GD±wòz‡ÏáwôýP?òϳý¦½Ì(3" ÚyAЪßÊ´21X@>ù(ó/ÓgúÀª´*¬ °4K³4PߪNÕÉó¦ìÆŸÆŸæC#ÝH{&ÄeÊÏÂú‘£ÔEDV×/®_ô//ëëÔsÖœe6"¡3Í4ÿm³Äf£* À~r@¨f© ócƒcƒ.Ý¥ë ô…ú ©“?Á®/w} ê2€ë÷¿Ú¿²%jò‡ÉžÉ˜J˜J˜J€c‡>vÜÛÝÛÝÛ¡ínÛݶ»ð õAëƒÖû½5ç–vKƒ£ GëÖ£ný8¼jx•µsÕO;Sw¦P?Â%‘ŸsªãHÇ‘Èÿ¬îLí¸Ôq‰€¦kµÇp±îbÝÅ:¸]t»èväïËß—¿ÖL¯™^3 Ò,ÍÒ ½ž^O¯'ÚÐUýª~U‡ä`r09ů¿Vüd¼»Ü·ÜGàæ¥_üz@Uƒ§ÊSöâP?Bï¯~¥:Á[å­5'DØiŸ<7ËÞ^¶vÙZh¯o¯o¯ñKï=Þ{¼jêkêkþ%ÞÕÞÕÞÕµMµMµMQÿ›Û³ÞÈzÜ Û—¶/A°’æ_Ÿ]u ¤,HY`Àôäô$X‘± $»$»$Nµžj=sDÞQï¨w²ïdßɾ£WF¯Œ^‰Æ­«Ãêˆâ¡ÕC«‡VCN^N^NT™L}0ªÜÑ›94s¨^ôÙ¢ÏìM”í±=q#"æFs£ˆ$ŠˆHjx6DÍW.å±5[³5‰Ø™-g¶œÙ"’֜֜Ö,’U˜U˜U(˜L&DfggEn´Üh¹Ñ"RRPRPR R±¸"¥"E¤é“¦wšÞ±O;z†Ïð‰È§*CeÄh¢éEzÑð5‘þËý—Ed¥ˆ5aý`RuÒÖ¤­"‰Ý‰Ý‰ÝÑÆòòòDJsKsKs£~ßYßYßY‘òå'ÊOˆôŒ÷Œ÷Œ‹H†dH†H×ήʮJ‘åç—ZzH‚Ý+úëÿ‘áûÃ÷E¬}·¾{øZìTîݵèv¦Òn°àÙ[Ï6?ÛŒòøoúoFÆ·Ç·Ç·üéþtzÔo÷Ù}v2>2€rg*‰ì1¯Ë«'À˜5fEtÖ]iWÆn&bP-µÔò?LeªÌß:xnñ=³ùÍMñ›âc4sÌöZ­‡8w‚ÂE<ñ@-_óuŒî}îq”¥üÊl¢Ž:”úÎ4LC]µ’¬$Pmaþ¦²e ¢½Ä_Ú»ò¥}]¼´ï±—óû7÷ó%+ ±,!IEND®B`‚routino-3.2/web/www/routino/icons/limit-13.5.png 644 233 144 3036 13061246472 14657 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÓIDATHÇÍ–ûOTgÇŸ¹3^Pa]…¨Ý(ìÄ–´4 È¥Ú¥à…Ò5‘nKVv“ƵíÆHiM¶]ÓE1ÎFBØì¤ Úl¥à¥Š…H%.¦»4NÙDƒ"”âT`fÎ9ïgŽ3¶ÿ€ç—“çöý~ß÷=Ïs^‰[z X“­ÉVWȶþ6ìw;Šñ}RK¹¥ü?‡!¶1¶ ¾9¾Ùø&l›q3?²^$ŒÉgú%NÂŽ˜¶˜6Kþ’ýT¤U¤9Bö_úÀÙéì| Á+Ÿ¼ò ÀÇ-·P ““³ù³ù¶Í¸™oÖ›x‘øòÎøE 골Ï,- 7>ñ‡PÂèPº£tÀ-Û-›²€~XÁ •øða>Ó¶_Ê7ëM<ßä3ùCzÖä­É²Ê²JçéPÁ7‡ƒI“L¾`'ð.ï²4ŸæЫô*ü úT,¶Í¸™oÖ›x&¾Égò‡ôÈ£gÛ° ß®à®àCAýFnдƒ:¬ÝÔnbF”q׸eÜí¦6®ƒqݸn\ç§Ï%üøQú[Æ@#Aý—ÁýÁý —…ðiØõü®çM ÛÂGéIýœ7œ7|vøvÛ·Û@`»ú§6§Í1ÿèµÔ¹ÈÅÇ8Æ1`5«Yá¿Â®SL1 RT ó¨>xû½ýNŸÓ糇„¥~¸´S'/CÍë5¯ƒ:`úðÊñ•ãÆˆ`¸.¸.¨6˜ÌœÌ½èÑo$÷BîùÜóÐÑÞÑÞѽ{7ön„´–´–´–p^†5Úa·ÝmwÛAÕ«zU­=­=­=pÔqÔq4ba¿:žQ•Q­¿ÿèÞðïðï=kY`Y@µYÅê+ð %réÜ¥s"²YD„——š6àºáv ‹,Ä.Ä.ÄŠMMMˆÄ×Æ×Æ×Š¸Ê]å®r‘­g·žÝzV¤dsÉæ’Í"9{röäìÙÔ³©gSˆç€ç€ç€H\Q\v\¶HîÏs~ÈùAU¿{ñ½ßãe‘®g»ž±-[ˆYˆþ*²+ëjꀙ]b|`|÷sî¿tÿ%Ôâðâàâ`xÅÁ™àLp¦º¦º¦ºÀXn,7–ƒZT‹jfRfRfR<ètºážuêÁÔ”zU[¥­2ÑŒ'¹]“^“nγ“—ÅœàœtNúìàÕ½úCþí,»ÝsÌ® e€:¤©Ca¡ª@¨ ‘D#üo©Ãê0¨SêSõ)€JSiÌ«¿.á?çõŽ8¿s~ç³óßGæXÄä×vÛvÛ“ŸÍ«y:}BŸO~ŽPG¨ÏU·êZi¥X`žyPÿS£jð/åÔ¿Ô¿$¨¾Ð&µIód‚ý°Äøñä|ÿ•ííâ±½=ž7Øÿ£P Íݼ’IEND®B`‚routino-3.2/web/www/routino/icons/limit-160.png 644 233 144 2671 13061246470 14601 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜnIDATHÇÍV]L“W~úÑ…RÀ€\Lcð'6Cu‰?AF»ÌŸlJ¨šÞàÛ’-j4f\xáLœ11dñ "PÁ4Ñc¸"cR¶È2B †Šd4 4€Øïûγ‹rúÕ¹Ý{nš÷¼ïû<Ï9=çùH@ÞÚ/He£²Q±'båc>ópæá-wñ-40øó'2·)·‰$ó[ò[ôQ#–yYŸÚø©|ry0&2|>“k-¾Lž,=YšY˜ˆ ­÷­÷—T²¾«¾‹$ïݾw›ß’³C³C$uE]¤˼¬—ý/—ÿÅ–Ki’ÌHÏHÈM7Üü}¢`|3Yùuå×$9“6“&’$µ¿IÚh.’1Æ(Ç|J,ókõ²_âI|É'ùz@8 œyüôñÓÖæDÃh;ynù ’/~Ÿä^¡TcjŒ$µZ­–«¤$IM¤˼¬—ýOâK>ɟЃ÷ÿÛë_’5™5™$I2þ”Ôsõ\RwÆÛâmŒ‹s¢E´PHÉÂ-ªE5©Ô€ õE}A_Hî Å.Q+j)Ô©wÎwNÆÅê!õPrÁO¹\­Uk$…äGª ÇMêÖWÖW13Ôƒz÷+íe¼,^ÆeÑ!^ˆ!‹XÄ"RDDDDRæG9ÊQRÜwÅ]’5<Æc)ùCšWór™• |2´)´‰äª5l ÇÌRÏš°[OȆƆFÙ­ïþxw¼ÛXøÀ¯7n'N<4xÆóÆóÆóÈë½×{¯÷’Ãæaó°ÙÈµŽµŽµ’MjÓRÓ9 ç„sRv|<Ágð'ô¬ >Ëç}}$›HRÔ‘zTrÕ·ÞgóÙHs‹¹ÅÜBúê}õ¾zƒxŸiŸiŸ‰<Òy¤óH'éºêºêºJl[ÀFîuìuìu¥¥¥¥¥¥äöÕíÑíQ2Ú=ïžwsuM^˜»¼”†Ï*€½ßÞ¿k/–*öTì𘚙ÉIN"o°€`]Öº¬uY€í±í±í1Ч÷é}::::ä?É’ÿ8:vtìèðìÚ³kÏ®ŠWñ*^`dddddÈ æLçLÝ…½û{÷##q LÍâNù\ù õ(@ZeZ%KðEúRú䈈ÏYÇ:À­¸ÓÜi@ÉDÉDɰҵҵÒ$ÎP0\0\0 Tø+ü~ ½³½³½º4tièP)ŠE’¸°OÛgì3ÀоR¼Rlð!Þ˜ÞH=  ?Иþ‚P©Ç’…°`Ó ÛØÆ6@ÌŠY1 تlU¶* Û“íÉö £ £ £€ýµýµý5 ¸·â¢§¢§¢§€p €ðgáÝáÝ€ãgG£Îà3™Ôãêq@êQ€˜+æúã9¿¿?)ã >aÁ»äJ-v‹Ý,‡–CË!à€õ€õ€ØV¶­l[ÕœÕœÕ lqlqlqÞUïªw(v;‹ÀìÀUë«rªrgO…§Â#ñyF©Ô5 ©çÿn%{Եø•‹å‹{÷o§ÞN½2¿æÓ|šœ/Ÿ/Ÿ/'õ­úV}«‘×éôGd$yyCês"M¤QPS£j”¤¶Æ§6\l¸øÁ­tÜ$­³ÖÙ˜™ jAÍð1R÷è.óßzè!E¶ÈÙ)†Z&ÊD)ºE·è&Å'¢P¦äëT¿êç2LúØÆÐF’që”uêûçKç×^j/Ij´ Œ³‘ì0|ˆ^¶³ƒbP ’lc+[Sðƒ RˆßµÚNÆÙ£]Ô.¦8¿Vc©±ÈzÏù?ÚoåGûºøhßcç ö<„–ocÐ\3IEND®B`‚routino-3.2/web/www/routino/icons/limit-4.8.png 644 233 144 2515 13061246471 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]HÔYÆß7uú°üØ•ÂHV!YE\@Ñ6)*E­À cbo2i¡ ¶ ¬‹¥ I,ÙÀHi¥¨XA[·.ª-mµÖŒj+LÍÄõcgÎÿüöbæÌLë¶×ž›áyÏû>Ïó?ïYü°¯´¯´Ç°½:Ý»!í§®W`+µ•þñ=,=³ô @|c|£õ8ŒÍ¼É¬ óGꙸ,“p æRÌ%[A…m™Û2c?àº[àhs´MûaWZ›Z›ØC·‡nŒŒ@›y“oê _$¿ý—¾,¸ºàªíÄDÇD‹Àªõ«Öùm aðKزiË&€×Q¯£´Ô(°˜Åº˜d3ÞE`3Ì7õ†Ïð=£ð#”Ÿ”/%;Jv8Î 7ÃÁ”ƒ)FÏ×ç8‹Á?éŸP•ª/è[ú6lÆfÞä›zÃgøžÑø‘÷öT”ǖdž ýÆßꚺ`µZ­øt†.Õ¥hËi­±ÖãŒ3†Öë¹õü©…j!ZGû÷ù÷áõV½>ùuyLyŒ1xª(b+ED2~Çchò3Pʲ¬:«Ž2(§t¯¾«ïFe”Ñ0ÔJ+­€cãXDÞ)npHRÔf‚Ñx¦¦ ¬ð4Vÿ+¸Ž¸Ž>k-¨•úk]¦ËІÿ©ë©ë© ºVt­èZ±BÖ„5ÆÏ><ûð,ÔõÔõÔõ@_v_f_fØ¿þÅ׿kf^P?è'hì÷¸8qqÂ$ê=ìðûü>¼üÉ€.ÒEºÒ«Ó«Ó«¡èrÑå¢ËÌ7¯ß¼~ó:$­KZ—´vï,ÞY )Ý)Ý)Ýp¯õ^ó½æPº×jêý »H\g\§3W$¿0¿PDZEDlçdmTET…ÄÈjqŠS¤¶¤¶¤¶DÄëõÆŠ$Ö'Ö'ÖËœauXV‡ˆ£ÅÑâh)v»‹Ý"Ë»–w-ïñx$''Ã.÷.÷.7¤N;vžÝyvçÙðŠ]Ⱦ}!²†²†²† pºpºpÒjÒjÒj ¯¢¯¢¯"âL½€¾ñc±Ú­v[¿ˆ««ˆí;I2ŸdO²'ÚE²T–ÊR"=í=í=í"¯\¯\¯\"½•½•½•"z·Þ­w‹466Šäyò}HäþÔýÉû“á¦ÊèôC~æœ1Ìž«óê<^U«ö«ýá/llhlhl€²“e'ËN‚Ñ#zrÈ!èNïNïNg¿³ßÙñ ñ ñ P5V5V5³y³ÎY'€NÖÉxùæ¿ÏØÜ[9º•*ôÚ©hë¹õÄzžTOª'&Ê&Ê&Ê@Çé8c›Ç6mZh¡¼n¯Û놑á‘á‘aЫuªN ßJ^øù…6ôS·ò£>æð‡62km·¶3ÃX02l¤Þóž÷},Wçê\ÐmºM·EÄê|¥N¨}ìÃÀôÀô'ûØÿt~ŸêTÖaë0>~ …4É$X(è—ú¥~ x˜ap±‡= »ôˆAsÅJ°ðêU½€ ò‡ôætþyû_9o_óö=6?_°ÿ:#ƒ.8IEND®B`‚routino-3.2/web/www/routino/icons/limit-1.8.png 644 233 144 2473 13061246471 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜðIDATHÇÍ–oh•UÇ¿÷™wwwŠÖÜdÂB1¤hE”ÂXnÌØ%ñO ’d#¬°!Tà‹– ¾Ð7R3—‚6qèeš%Å-MÙ²ÁM\Fâþ4ç¼n×»{Ÿç|zqŸsŸ[öç­çÍåwÎï÷ý|Ÿ{8¿s’¤Çü_ó„ó„33;oó%%O~•‹¿p!ôjèÕŸZ`Ög³>xüËÇ¿ôúƒØ®ÛüÂz)Ð/äÙy=¦`"ÒéÕûñ§°nѺE%¹xWDãÑøDÞé|§àøÁãynwû;€±ú±zb»nóm½Õ+Ô×§ãK>>ú"Å‘b æ½<ïåïç®/€•ËW.ø½è÷"ã€;Ì`†©’$±ã‚Ø®ûù¶ÞêY}˳üœAy]y«_[ýZ´-WÐ>ªú¨Êò2q`;˜Ùd6 à¾î¾NLé D‚Ø®Û|[oõ¬¾åY~Îþº·»—Áš’5%yC¹çv¹]^Ü‹“ñê¼ÍÞfŒÙnZL Áe”Ñ ônyÞdsKÝRŒ)ξ›}— ¸ƒî ðÀ×7k"k"Öàîe[)IOïèíèíä4¼D&‘Éë¿Þfo3“î ¯Ä+7GÌ‘CC 1„Æ5®qílg{AÞnNs(w?p?`2¯ŸJÜO܇<ß÷ãûâ[ØôɦOòßû¬ÝÓm®›ë»ÒÓÚÓÚÓ eeeÿÐ%ï’w)ˆ{÷õîëÝ»®îººë*\{þÚ¢k‹ÿæ›L<¦,Ïòs~|c?|íãíãÀ%³‘ÏÝÝI[¥Ž9s:æ@¸3Üî„öX{¬=ÆCãLÿ™þ3ýP^[^[^ bbbPu¡êBÕ¸|üò¡Ë‡òéiïϳ|ß#Í'É‘$Þ’Ì/æM©Z ´ *m-m-m•¢MѦh“Ä#ŒH{÷4î‘ZšZšZš¤‹S§.NIeûËö—í—;‹ÅŽ´þþú‘õ#’D%•š*JZžÏ·~þïTrŠ^zƒSyoá½…÷Bz[z[z AFãáÑ0ÐE]nN7§›axhxhxÌSf¾™œJ~Íöeû yÿx* ú 7áþ¥½á½‘ï;éà¬úPp%a–˜%f ˜¸‰›xÁ|©yÁ¼<ãîtwô±‰‰ÄÄ¿ö±ÿèü÷¼{ÀûØû˜ åÔR‹ag¾ ˜›æ¦¹ ¤˜dØÄF6‚é6ÃfC§Wæ•‘÷G÷GÀõõó¼‡:ÿ#{W>²¯‹Gö=–{1>j/Ø?¨œz®Jo¤IEND®B`‚routino-3.2/web/www/routino/icons/limit-70.png 644 233 144 2365 13061246467 14527 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܪIDATHÇÍ–]HTiÇŸ×TµD»*‚‚r×AM&j`Ý`MˆŠ¤b#jYZÜ!%JðÂnv!vb±.²Í  Pw@Z‚rɰ…„Ø5È(¥1ÍÉVæ¼ïûÛ‹™3çìní.{å{1gž¯ÿÿÎóžç¼""²,}ð®ò®ò¤lïgŽ?wkîÖµ])»C§ÁÓðËI(<[x`yçòNýıí¸ï®qðÝ|¶_–‰ãȹ‘sÃLÛm°³|gynIÊþºònåÝúÝ‚C݇ºn^ºy‰Ïab`b ŒÁ±í¸o×Ûxn|iû ¿dG²#žQÈY’³DV×®®]óE*áÙ¨ÛV· šÍ2^PS€Ÿ qâØkÚeÛñt¾]oãÙø6ŸÍŸÒ#P¼¥x‹lß½}wÞ…TÁ“ï!´2´ÒæKÞÚiÇVÜŠ¨FÕHL¿éÀƒÛŽÛùv½gãÛ|6Jü¹·ß| ;rwä¿$ïƒöj/˜{j­ZKRyÕµ£öª]jXóÖœ5&j¢& ¦Å4›f°~µ†¬!0_šóæ<ô}†$s궺¹áû¾ ¿¸•~ yyñà©zª2­ùô^½—9œ• ‘þM¸¼?~ü.ÿ'lf3PÇ Nè6ÝÆom|›ÏæOéI ëø Ÿ:|ÊFÓ¦-J†2ðæEÕ‹òå †¡ó@çÎp¥ýJû•vˆvG»£Ý0–?–?–á‹á‹á‹0:{3j,ca\-t…ßғöè+¸6{m6S~PßFßFgÒïï÷÷ûaS`S`S‚‘`$ìšìšìèjîjîj†@<Ä¡,R)‹ÀúÄúÄúÄ"±H,âøÌ:i´ñÍA‡?¥G ànÁ]s&*'*]-À ˜Ô ¨Y5«fh¸(\.‚ã3ÇgŽÏÀõ‘ë#×G z¨z¨zÈÉ«z\õ¸ê1\¼‡~i:FƒRäB ‚JZÐfÔ4ˆ Ü!Æ”+)q” ‰%ŒÑ )'&ã‘È#:“ ×«ˆ@@HÀq0¥7¡”G’‚@D¤éÐ4tŸsöü (ç¦Rwÿ9uöùÎZß^ûÛk­M222222 Áô0O?èj¾—ïå{YMÆ7ßd|ÞÎú5ë׬_×…0/æÅ¼>ýgÁ[ð¼õ;§*¦*¦*Ø¡Eä‚„ è@€Ø‰ìˆ<^/'‡øA~ü[%£dô`aæ‚Ì™ êîfoÏÞž½ ~‚ŸàGâ¦yH7œ¼4t† èy)KÊ’²¤v«Ýj·Î_žU™U™Uy¾Ï>d²ÕÞš››Óÿ‹ú„ú„úªô1ú} 9îîî,×.×.×®w×wÞõ¿ËÞŒ}§?—?ÞÁUÌ“y2O)‘ì ;È¿œçÇù}÷•õœõœõÜŸ´OÖ>Yûd­˜ÓÓÓA¡m¡m¡mäeù!ù!ù!Là|€ Â&0à-¼…·,ÄB,ÄĔϔϔ^nkjkjkbŽú ú ú )uäÅ‘G^Üö¹ÊOå§ò‹Tˆ;Ä⎵'XKbI½‰tùpòÃÉ'4¡ M>|_ÁW4ýÕn³Ûì¶?ýÙÿÿü_ ›ölÚ³i^cÑX4øcæaÈY xt¢ÜáwãÇ8tФ‹t‘.xˆ‡xÞìiö4{¢çò©Ë§.Ÿ{{{ùf™R¦”)ïW ñB¼¿f Ö` ÖôÿÆÅÆÅÆÅÆd™Gæ}Ñ<‘3‘3‘c\°7`oÀ^áå¤ÍI›“6ó×åf¹Yn'ªEµ¨†ÏâY< J®’«ä*à$@H€XЀ€f‡ÙaPQEQ”J¥8}š>MŸF÷Üg÷Ù}&¼<”7”7”§ýH±S±S±ó©8y¯¼WÞ{%ŸdÕdÕdÕÄ-·ß¶ß¶ß®¾íiõ´zZYÀ®»»îîºKnkÊ4eš2Pfaf'ñ$žÄ€  —Òÿ‘†0„ø ?á'X̳Ál€T[[ËÂ-2‹Ì"#&Y¸,\þçpž± ôÑF‡Ú¡v¨¨Q£6"F3¬Ö Cæ¢C„ª«¼«¼«SÄ1ÀiœÆi€”Rà®áà]ï]ï]464646Ã…Ã…Ã…€L'ÓÉt±±#‰#‰#‰ÀîG»í~h¡……jCµ¡Z’ýáõ‡×âˆ5ÊeZ± ÆŒ“Žœ<y>’¹†UúXúXú˜1vœgdzÇÛãíñŒMÒI:IgpìRù¥òKåŒÑÑÑÍÎÛ}í¾v_Æl7l7l7æà«/U_ªfìŒû÷3î³óR¤)ÍñïâãâGq‡q˜Ñ‹ô"½8£ 9¾Ä—øÀ{xïü:~¿‹rQ.¦õ¦õ¦õ@wXwXwp#áFÂY r9\—(V)V)VÍÁ‡t‡t‡ = = =³x¦a¦™õOß oÐ7 $ˆrÞœ7çÍ.Y",–t iBšŽÔ‘:R†4¤! ù$F®»vìÚ1`Yñ²âeÅ€ö)íSÚ§&c2&è)zŠžú;øsËÎ-;7ÂBX@[h ms­Óú£õGëè¦þÔŸú³KTñ™â3ÅgBn÷‚îÝ Ø¥ÖÂÖÂÖBÁF0lâ¸8.ŽhCÚ€Ž :ÃÅÃÅÃÅ€Anäs"“ÇòX€f4£èXر°cáúßþµ.µ.µ.Uô÷_æ¿Ì×£iÑ´hZ`qÚõ¼S|§øN1àéé hÜ5îw+±+|ïñý,‘;EwŠî>F£Ш5j`]¬‹uôú}SB¢($Bõ­é[Ó·&É@"6Og‹¯ÌôéëO_úú'é²(Y”,ê\ÿÈò‘å#˹žËã—Ç/‹û]o:Þt¼‰©ÎÓ§;OºŸu?ë~ž%$—ŽKǪ  ª„›ÂMá&ÐùCç?º^]¯®wN$ƒY0 sV.yENENEŽ4Ñ¡ÿBÿÚ,;&;&;ö¿[}Ž>G_ªƒöW÷W÷WŽGƒ£á`™zzzÝý¯:::¸Ü«éWÓ¯¦³h·b·b·bÈãããÁ–œ]rvÉÙYÇt=]O×ÿÿ„þªñUã«F`Iþ’ü%s4N*P¶Öƒ­[bý­Ð[¡·B©Jé­ôVzO¾($ƒdØÕp%\‰m>O‹h-ân£µ¨ŸìÈSÉT2•ì;4¢`Ï-Úºh뢭ä‚þ¦þ¦þ&âÙf¶™m†jÆóF02K„WòJ^ „E‡E‡EÌ—ù2ߙϖ߼~óúÍ žUƒUƒUƒ‚¿Û»nﺽ˃Xˆ…XÒ%Ä!q÷v³\–ËrygñçûFþ#r‚œ '®§ÐUt]•Z1žè•­•­•­Bòè¶Ñm£Û "ÉErxÃÞ§D:ûQiP”¤#é˜rI©*¹*¹*YÜ?úþèû£ïó'åò@yà…lÝÝݑϿC&2‘IþŠ.t¡KXËF£Ñ5Æ0†1ɋ艞èÉ'Ï}îìsgÿ'ÁüŠùó+‹©å5Ëk–×–V?Xü`ñƒÅâ~}„>BA˜Š©˜ SDI”D ð€0³/xÁ Œ´’VÒ þ¦é¦é¦‰E×çÖçÖçÒ¿xè=ôúþIÇnÇnÇî-¯ '''Z„éôHv:vÀÕNL8Ÿ%wÉ]rÇ-¿´üÒò `ßgßgßwൗÚKíÕ{±£²£²£’Ë­y½æõš×Y4I!)$r©X*–ŠÁ „J€±16LŸ^؆Mæa.Ô.­]Z»O¨‡ÔCê!@Š"¤ˆŸÐ£ô(=Ú?é”âIç‘‹sâÚ)ç•Ä•[ÄåNkWÜO Ä@ Ñ ÓWŽïÊÉŽdG²´w›´MÚ&ÑÕ¡GC†E¼Ô.µKíPÑÅt1]Œ)ápH8y^`^`^ ¨Z9´rh%שXªXªXšÉ8Æ1.µYÊ—ò¥|þ$úЇ>á]—D²³³³³³a™iМ3rjw¿S»'Ú-§Q4ŠF¥V IH¢_T:*•!Ù\h.4BE)¥”b̉:[­Î&Môç÷ç÷çsŠtEº"ýnÕÔÀÔÀÔ@úç/u¾Ôùà$èïüOå"8“%?TNÿ}؇}¤,äJÈ•+¹ Š]Š]Š]²G½G½G½ysIFIFI†¸ß™ŸhÓ¶iÛ´ø¯¦ÛM·›n“DU»ª]ÕHþ’¿ä¿÷¿•ßÊoµýS@x@x@8}äôçJp¶ÇyqøáCïq}\×7ðŒô©ô©ôiò/í[Ú·´o¦ "ÀiÏÕXÚþˆÇÿl0ë–І0gIEND®B`‚routino-3.2/web/www/routino/icons/limit-23.3.png 644 233 144 3064 13061246473 14660 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜéIDATHÇÍ–ýOTgÇSZ˜å-4 «‹Önc04$€4î«å%Xuƒ1ÙµÙ 1Õ®Éê–„ šZ ]A"Ñt!â趉Z£Â6ò¢ø)…-›­@¥¸0ŒórïóÙf®—í_àóËÍ÷{Îù~Oî½Ïy‰ >,É–dKT[*M>|cøÆ•gø¤!Å!ÅþÑŸF ÛÛ¦˜ØˆùKëELý¥~/1baa!¹A|ÊSËSÃ_ àÆ`í¶v»üPå¨rœo?ßÎïaªwªà§ÜŸrÁÄFÜÈ7ê ½¥úrègþ"ðò—/2a¯„½"öwíï®ØH[› 7üøÒ/) h3€ ›Êæ™ÇX—`#Ì7ê =Cßð3üýÄçÄçˆÀ{ï¿÷¾µ5P0ÒµIµI†Ÿ¯¨£øçýóÚvm;P7Ô Bq#ߨ7ô }ÃÏðôc~ÊE‘¦|(-ý€¯ÇÿƒÏþ_˜? _°S¥ÏéNÝ þùÇýã éCúær1ÇÜs¤t·ßæ·áóOõzú†Ÿéo|Êk""oë¼u~>TyG{F{€C€ÊRY,ÒB+­ ö«ýj?0Ë,³Ki¦™f †b–ðûØÇ>à:·¸ ÒU:‹4õ_ úý¹èG˜9y“è]»* 5ýíûawöÞÙ Ín>Ø|uïë{—ï]6ýººº éTÓ©¦S08>8>8nÆõ}FŸ1ñHþHîH.4njmjE þÐWÐW`ú)ï®Â]…`ô#Ú ˆÈà^¸øáÅ¡ïãYãYj§mÁzÜzO^eÞ¶¼m°:{uöêlèrt9ºTTT ¥Ó¥Ó¥Ó¨U¢‚Þ­½[{·š zG½£^ˆkˆkˆk€ò×ËcËc!ÑóZËk-xþyð»¢ïŠÔN¸ÈE@»è'T~ùyäçé™"ùëò׉ügÝ7Ùßd‡´þñd͹šs"ùÛ'ÝŸt‹¬­\[¹¶R¤?¥?¥?E¤ÑÙèltŠXú-ý–~‘‰©‰©‰)o¸7Ü.Ï—V§Õiu"‡£GŽIøuBqB±Èø‰±kc×$Ì[<Û4ÛÒ*’{=÷ºHHEäƒÈ陂/6<6\VU33Ï_-{×÷¬èY©öT{ªvÙqdÇ`{Ø®VW««JV•¬*YÉÉÉ0 èºùÆT¯êU½°à^p/¸¡äJÉ•’+\‘T˜TïçÝÏã1¸ Ü ×G}õ™>,z£­ÐV¨:áéGO?‚»»‡k†kÀz>¼6¼êë\u.Ó¨ýBû…ö Þ‘Þ‘Þaò– K†Z–·,oYnòmËÚ–µ-ƒŒ5k2Ö˜|úÛiî47œþíÙ-g·xŽyŽözÄXĘ괨z×W®¯îÞùöæ·7Ez~7ôÆÐ| ‰oÌ7&^ÇßíŽv‘¸¬¸¬¸,Y)+e¥ˆ]Ù•]‰Dø"|>‘´«iWӮЏ Ün‘Ì…Ì…Ì‘œ£9GsŽŠÄoŽß¿Y$ª8jcÔF‘_µ¿õñ[‹wKζ/¶}Á"ŽMŽM"–awŠ;åîm¡1¸+Ù]³»Ü]âüÍä;“ïÀ£žG&P“;'·OnO½§ÞSZŸÖ§õ³ÌYæ,=RÔ#A=SÏÔ3x²þÉú'ë"Š(—¿ËßÎ ÎÓÎÓ(í¸·È[dîJ†«íÕvcàž¼°æc®çŒ[%¨Ÿ3¡„ ê€: ,ù—6¨ jH"‰KxMiJu@5¨U¤ŠX Vürt`tÀúÔút>”>cŽýߩޔOmiUi¨ŽÀdV·5›fuÎ?çŸÃG;w¸ƒâ'8êê’ºœá g7‹,‚ú·Sc€'Ðվ׾ǧ.û§ýÓ@‹1ùËBËBÏÏ'ÿ‹{V¾°·‹ö>öbÞ`ÿÚˆ(øånIEND®B`‚routino-3.2/web/www/routino/icons/limit-31.6.png 644 233 144 2754 13061246473 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü¡IDATHÇÍ–ÿOT×Å÷ Ú™IÁ’ Q ™¢¨%*ÁÆÄ˜yo*Š-–V¥Ðˆ±ÐgZÓ˜¶I±jCù¡ 6&Zª‰¢¶u¨m4„¤‰‡yjCSL¦òÀ[‚3a|È|»çó~˜¹Þ‰üž_nÖÞû쵲Ͻë™›z Xó­ùVW[̸}½}ý¶$>‘Ë[–·ú>…Ì–Ì€¾}á[ý®‰¼QŸ¾_ÄìŸÎgÄe®˜Û÷¶ï-e)ü¼½üíåöì$>ÖŽvGûÿâÐx¹ñ2€ïŒï ïÁß×ÿ¾, –‰¼Qoì7ú¥÷—ÏžâÙWf_± ƒí9Ûs"à®pW,Ø›,¸·Þxý×F2F2”9ÌQe@˜0Æ ¤a#Ÿª7öýŒþŸÁŸÔ# •j¥"ðfÝ›uŽÖ䆻g᣼ò ¾X;ð9Ÿ3âáx ±5±•¨.Õ€ ˜ØÈõÆ~£ŸÑßà3ø“zÌ£œi^ ›ý›ý b=ñá˜;æý÷Ø_±¿ˆ¥”*C²¾F÷ê^P‡Õaus=`ˆ¡'H©ñO⟋÷Æ\1èádØ<ºyüÆQ‰ˆ¼ü8ÂŽpx‡ü=þà¯ò(S|E -@€nÓmº T›jSmi‚ò‡i¸B A«  ¨ZUË?¦ú¿—â3øýI=¨ˆÈ‰n\»ÞÝõî“9”Ü­¸óÓŸ ùtsks+ªw°×ßëgÆêjêjêj‚¡¬¡¬¡,3®7è zƒ‰««« ùJóÏÍ?£~«½Õs«ÇäSûJv•I=¢·‹ˆô~í‡ÚÁ 6121¢vfÉ,Ì,$R3Rã¯ñCnKnKn Üh¼Ñx£®^¼zñêEÈX™±2c%œ¯<_y¾r¦ð`I°$Xžkžkžk°ahCÿ†~øÇèê/VAäþ;á%á%j'ø | ’z¬– ÎlgöŠU"¥_—~-’È›¬¬µ´–£‹.[·n}Ýz‘yEóŠæ‰<îxÜñ¸CÄšcͱæˆhuZV'¢6ªj£ÌX¥¥¥"÷öÝÛwoŸˆV¢­ÖV‹üÓ¹fÅšbÓæÙ·Ø·XZE<ï{Þ±zcα«„ÀÜèܨ>À—›Ÿý£Çá?æÎM›:!GþŽüp³æfÍÍs"å¡òPyNî?¹ÿäþ™;[~¶ül9éEz‘§îŸºê>¼x=÷rîeøå÷no·—DD€nwå¸rô«¾5îŒ;-òóWç¯"m›~¨ÿ¡^4k½kE|ë|ë|ëD´ÛÚmí¶HŸ¯Ï×ç3'¢ÐèD,—,—,—ÌxàXàXà˜ˆ£ÚQí¨q.s.s.ip7¸Ü"ÙÿÎ>}ZäÁ‡2dŠ&Â^öŠðRâNâŽe@Ô7Æ;öÝøwã0ù €ÚYö¥÷ï+D\Õ® WÔ÷×÷×÷ã¼Gyò̉T T T À¹#玜;bÆ‹=Åžb„ B¡Ø^¹½r{%8ìveW°cë6}›N$~!É&/LË“zR>v¢›[»µÝšù•ÄWM§ƒ0öŸ±Ž±TâxâxâøÌ£š\4¹hrDFF~üøa|éøÒñ¥ ¢*ª¢ ïÑ÷è{ P˜˜Ò—D‡£Ã&ÿݽx÷bÃpOt ÝOùØì¤¯¨ýO|¬FÕ0¥^UÕªXÈB¦)›fšé4%J4 o£žzPÏ+·r¨bUÌ”šŸê_æïó÷8BŽPx· 3œ?b8ï–Y[fG“ά:ãñ à›Ähbt¦ó£‘EÐDM©œ5¬þPS©Ø‰D"ALuǃñ pÎpþ_ôiçvÿ•Ïìí♽=›7Øÿ&4öA‹úÎ{IEND®B`‚routino-3.2/web/www/routino/icons/marker-44-grey.png 644 233 144 6104 13061246466 15631 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ùIDATXÃ…W}PSWÞ~ι7 I”/*:")|ùühƒb ÛV™¾‘b™V±-*[Gú!U‹ÂŒ[ºu†n;ƒèv퇰j± b˜ˆËJË«¥Xº@}ÓAHA D$¹¹gÿ |Ý·Óß?gî½Ïù=Ïýçžó»¤¸¸¸¸¸þ˜ ÛÔ@Wó÷ø{ü=f,þ²øËâ/Ù%¿–üZòë: `,àðëÂ|a¾0?n«³ÖYë¬e‡pÇqœA -´Ì0à `+¶b+;¤Ø Ø Ø@Šø~¾Ÿï¿yœŒ2²»bðþàýÁ—þUš[š[šK¬B˜&„‘ô)âw^]þtZ`2’‘LO‰%b‰X"~çr¸.GP|I]I]IÝ)‹Ë겺¬¦kãËÆ—/‹{G]¦.S—¡>.5.5.•%Èd 2 >0>0>®¥ç^š/å›Îï哸%=’>Þ[ÁUÌ—ù2_1‡l![È–°2.Œ ãÂ.Ÿp|íøÚñõâÀ9¦9¦9&Oaª9Õœj¦î%K:–tçEŠ"EÆñ>ÞÇûPaãð*^Å«B‚Œ;::âù޿޿ŽfænÔ6jµbáгCÏ=ûòǪ0U˜*l…g‹g‹gËÚ2–ÇòXÞ½ºŠì›Ü7¹o@3šÑ¼p6_Ë×òµÍwM¸&\‹ÿ yFóŒæ!ٰððƒ?åo÷·ûÛ¡Á\ÌÅ\,‚E°ðèBºÌÂ,Ì0†1ŒˆD$"ÒMºI7<À<oóµùÚ|q÷›O¿ùô›O…œ»Wî^¹{…¿*WÊ•råÿ^6„ Ogái<§{Re«²UÙ Èž=!{âOÿ¿8~qüââ?h ƒÆ <Ÿ—›—›—Ë_õWú+ý•˜+^¯‹×§+Æ#¡H,‰%±± ±¤ô‘>€|O¾'ßÏà=žOà—é—é—‰¹R~Í‹š5/ ÏKü’IÆ„1a,=ÞUãªqÕäþ×Ãà 7T* •¼ä;‹bQ, ¾4‘&ÒD€å°–ä9à2.ã2"D ( @AAgð\×ÅuÞñ•òª Õ†jþ”Ä/é‘ôQ¦eZ¦=ð’[ïÖ»õ@J[J[JRýOúŸô? ¹Ø"¶ˆ-ð%M¤‰4H@OâI<ÐÓÞÓÞÓŒ´Ž´Ž´ÎCò IHzªçTÏ)À¶Ã¶Ã¶RøJ|¿¤GÒG…p!\_þFÀƒ€ph©~©~©ž”{Èi'í¤Kgé,@+ZÑ ü´ù§Í?mÊeŽ2`Iµ¤ZR§‰áé÷ô{ú\Ã5\{ï,s–9‹Î¢³èfðÈB² —ø%=’>Þ9ìv㯺t]º.EÊe‹²ãl/ÛËöB…(D! Fb$FÀúºõuëë@MlMlM, NR'©“®kãÚfx¹z®ž«ÿð+Ô+Ô+î w…»òÈ‹-÷,÷,¯|[ù¶òmŒ‡® ]ºEmÃmÃmÃ8Lqqhéizšžžž§`A,ˆäò yp­p­p­*Ç*Ç*Ç\'×ÉõIõIõIÀ]à.pÌO¾7ùÞä{@åPåPåÐ#øÏÕŸ«?Ür·Ü-¤¢ÀÀ ?ÝD7ÑMŽáŽ-åæsó¹ùìŒ=ÑžhOÄ!MHÒÀÑ;ô½&ͬ}«ö­Ú·€ ÿ ÿ  ã@ÆŒ€KïÒ»ô€ì–ì–ìÖ o­¡ÖPk‚‚ƒ‚ƒ‚Á¸ \€ìŒìŒìÌ ž4Ò0ÍÇ9ÚmŽ6Ü¡ª¡v†[wkÝ­u·ö^¦_ÖÖÖ“Õ!/…¼ò&úÑ~@Vm¯¶WÛ•IeR™s¶9Ûœ ‡ÃF`¨p¨p¨pjZ§h™l™l™ŠE`ÞcÞcÞŒ˜FL#& _ׯë×ùùùÀ¼Öy­óZ1qGvGvGYã¼Æyó°Gá¯ðWø ‡y`€aÿq~ ¿†_ó§=Û·5nóh´j­Z«æîÎZ9k嬕°ÇûÅûÅûÁ×¥ui]Z@Ø'ìöœ‰3q&€U° Vø>‚$,HX°x¸øá⇋Ïž<Ünn7·@4¢ Ð>ÚGûàôVRUg®3×™Åd’FÒH½JôDOô'l\¶#Û‘íøîòdÉdÉdIÄV{½Æ^ûu¹u¹u¹gWò›Éo&¿I3¢3¢3¢3àŒ©‰©‰©¯Ó鯀Gƒ£Á¼`xÁð‚ˆO‹O‹O"FŒ<,«_V¿¬ðÆ~c¿±X~ýùõçÁ¢¯G_¾þì¹³çΞÇÍæ@s Ýæ“ä“ä“ôS–ûºûºûzf:ß{±÷bïEMhBÓîoÕ)êuÊ*¥¹ÁÜ`nX|ÔXe¬2V±5é]é]é]äž8Oœ'Œ£å(H®%×’kÜ\psÁMüG°«ì*» p¸ Ü`Óè¦ÑM£À“?>ùã“?bâ炟 ~.@æöì?ØéÕ*Õ*ÕªÉgÅyâ(”ò vb'ö½"Ò‘ŽôÛo²£ì(;Ê/ô¶yž„©¾‘?@ÊH)ûÇvšBShJaíÔ CÿRÇêXòmÙ>²}¹An°‹Ib’˜ ™È|¤”RSr7pcú®äEß Uª.TyvTŒTŒTðŸÈCä!òªÒÈC‘‡"}|û±ûÉßÑnt k9½^¯×ë¡Æ(F1*8GâȇÑ'¢ODŸøŸ ÛFÛFÛÆ§¨}©}©}iÌÅ¿¿?Ï®¸Ä¸Ä¸Dš7ÜpÃI6“Íd3xÌÆlÌ †j€-b‹Ø"0o“·ô´ô´ô°5………´rvèìÐÙ¡½“î!÷{(ëÅÁœÁœÁ»@.‘KäÙê}±w¥ÆyÜ;žg‰³ÄYðkïkïkï\;];];ßýP PÜ;m®3×™ë¸£ÆÆÆl ÙN¶“íPˆ_‰_‰_A %”e£l ˆ€‰ÁžÁžÁT™bL1¦ø©­j«Ú ˆ‰b¢˜øî‡ô=BôNz­ø‰×áéÒ@¤5ñþ’(þïqG§¼ëÙE’I2I^“1õËqù[w¾;ß/¼,¾,¾,ÒÕKŽ,9²ä6ˆb§Ø }Š>EŸ‚S(Š„"(>‹ø,â³O¤5ÉšdMâº|b|b|bŽ®`ãWxU,ËÅrþX`Eø£d‘ÒÒÒÒÒRØ¥ŠÂ{cÚC^ïîòz÷¯wkþûî:w[È·UØ*lPQJ)¥•*qiâÒÄ¥ q¼·¼·¼·œëòÙë³×gï¿ê÷÷÷÷~Üõ\×s]Ï^i?•Nœo'TÞßc'vb'ùVwNwNwîh†Ï>oø¼QU:2dþÈ|Þv¶ølñÙbÏ.oGï×ØØˆ“Í­Í­Í­$GÕ©êTu¢FÔˆš‚ïøl>›ÏžXžžž@‡½|/xljÇuqøð~dÒ†ÓÁäLÎäd›5ÊeÂß<‹<‹<‹® ŠpE¸"ü¿ÿ2°v`íÀÚÀs¶Û¶Û¶ÛìÏí_´Ñþ…gÕ˜{Ì=æævÊVËVËV¿½pꫬŸj¬¹»Æ0†Åi¼…×Cð;ñÞ-F=ûY-«eµúnZM«iuSøäúÉõ“ëÅ(Y¹¬\VNosy\—×x%¢:¢:¢z¾§»§»§›4ˆAbÄNxóÖyŽÿ–Šß‰Ç¼ëçõî~lÇvlço’\’KrÿÁŒÌÈŒ»_U†*C•¡ô6gá,œå~¨xX<,ÎïëÌêÌê̦"Ü›Oj,'~OÇ¿Qﺽ!ØvIEND®B`‚routino-3.2/web/www/routino/icons/limit-5.6.png 644 233 144 2607 13061246471 14603 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü5ê{¬ëG;ÿœýVÎÙÛÅœ½ÍÍì?G3kÎ;»ÕIEND®B`‚routino-3.2/web/www/routino/icons/limit-58.png 644 233 144 2610 13061246467 14526 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü=IDATHÇÍ–_hTgÆŸ3“É$KLÛIVPª61²Ð^´¶j°%f I m D£[ûçb§i!A¶ÅB¡+¢-vhɺ*1dBZH $i-βC¬aŒ¥i;hjcëŸä|çûíÅÌÉLº{ëwsxßï}ŸßÃ9|ïù’¤GsOA`U`U <^ÏçKJžs}æúŒZZZ.µ·µ·µ·I×Ì5sÍH#U#U#URcecec¥´áç ‰ ‰Q'å¤Têl1¿˜_ô¹´®b]…-à÷ªWï|È{:.míÜÚ™{ržb•JhÁOÌ=;·}n»MF“Ѥ4rläØÈ1)IF’©_ýê—ÔPÔPÔP$%o'o'oK;Žì8²ãˆ”H $$çyg½³^Žd{|}ç©ßòŸŽIåcåc›ž‘¶mß¶]’”PÂ9a¿WXa)˜+½Øv±íb›”IeR™”¤¨¢ŠJMjR“¤PI¨$T"WWWK6”¦Ç§Ç§Ç¥{U÷ªîU)¿Î&“ «E’œy~ÖO@ 6›Ø …â¡øRÛMçG'ì„ó:‘£‘£‘£Rëdëdë¤Ô|©ùRó%)Z­ÖJ}©¾T_JªIפkÒÒñèñèñ¨47?7?7/U U U û‡.èBž—çgý$oÈr®Hn³Û¼TX©Ÿ4¡‰¼N:™N¦“Òw»Æ•öÝÚwkß-©º³º³ºS:5|jøÔ°´…-lA ŽÇ‚RñþâýÅû¥ÄÄļá9ž+à-ñs~²§à_pfþÌüÒ{Í/ž]<Ë?3unêÜÔ9¨‰ÕÄjbP¾³|gùN8Ðq ã@\î¸Üq¹ê×®; ‘²HY¤ öÞÜ{sïMXؼ°yasÁiÝáκ³¾¾}-ÏÏúÉ‹}o½ÿÖû~—·qi0~Á$“Ù©°P¿P¿P³+gWή»Â®°+ò¼û©û©û)¸Á n¶ÖÖÚÚCßáâb oŽçó³~~Že–æØiï4wmÛ8Ø^û±ý¸`~MÛi; ^—×åu²Svª`ÿ6hƒÀŸx•W¼¼¸Ëýÿ=Ç~ò“›Ì®7ã^§×É"o#†µcöKû%gÁ‚7²›]ì;aGí(0ÈU®bÁ{×{—EŒ¯÷'ÿCû¯|hoí},{c|Øn°ÿrPP"ƒTIEND®B`‚routino-3.2/web/www/routino/icons/limit-110.png 644 233 144 2553 13061246470 14573 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍV]L“g=ý£m¤EÕ Ñ™X~" 1Žv™’ÌHPnê &cÉæÏÄD’¹ÄÝlšFŒã“:‰¼Ù…´CCŒs ™S,ÉJh(Ôïç=»(o¿*Û½ÏMóü¼çœïkžó½ ëWAš Ìfw*7nÔÕŽêºRùe44üë™Ó‘ÓA’¹×r¯éÏŒ\öå|æyÀÀÏä“u¬‡Q°íA“5?O6ìhØáð¤ò¤³ÇÙ³¤’Çî»K’w®ß¹Î/ÈÙ‡³I2æùI#—}9/ÏK¼L|œ‡ mý¶~Ó$iϲgdáÞ½[¾L Œm!kö×ì'ÉiË´E˜I’Ôþ!™Ílá'gœ2¢¹ì¯ÎËóOâK>ÉŸÒ2ß—ïÈÚÆÚFçÕÔg?“§6Ú$ù”’xÙ¤Wã$©ÑŽ0Iа“$M4‘F.ûr^ž—x_òIþ”¼ýßþø)Yç¨s\$Iå©çè9¤îSn(7¨ˆïÄmq›‚ï„îÓ}º߈Óâ´QÅ¢A4P¨‘7¾7>*â+uŸº/ýÀ˜8¬ÖH ÉLAÞvêÎçLÜJŽê£z÷3mBÙ­ìfBü"ž‹çJ©MhÚ)n‰[âVF¿„%,!YÉ2–eÔ÷i7µ›L°&…O¾(|QH2éœrNÅ­RϪ°Ë¿‘ÍmÍméç/!¥Oé3d„;חȗy/ó^æqM„;ÃáNr<4õ‘ޑޑò'[‡èäd|Ê5å2Þ¸Kñü)=«Âžœä£î_»%ÙA’"@ê1=ÆdpC0;˜MÚZm­¶V²k¢k¢k înìnìn$­g­g­gÉ`$ FHý¸~\?N///;ï_ó>¹-¹-¶-FÆú¢õÑz&WåÄ\×hרöä¤p¸J?ÂRUEU€0]¥ƒ“œ„¯±€ÀsÑsÑsà8Ç9Žt˜¦„)äyó¼y^À•ïÊwåýû7öoìCö!û0ìöûר+âŠ}ž{•÷*a_E¹*ºöÌ홤3`©±Ô°Ÿd-e-¥ùæÅÇ 0Ô›ë-õ hWÑ®¢]Àrh9´2„5ö6ö6öE‘¢HQX\\ÄSñT<²g?Î~lÌ»#îi÷4°¬/o^Þlðá÷¬¶¬6@ê1z¯ÞkúB= HæÃ†" P„"cÃÖ£Œ2 (š¢)P8\8\8 ÌmÛ:·˜ ÌfÀTùTÙTàýÞð >“I­Uk©Ç ÄýqÿŸ` „Ò4Gñ¡° ÞÈʺ–u-ëZ[µ­ÚV½V˜{È=äV®¬\Y¹”ޕޕŽå¹å¹å¹ÀvÇvÇvphÃ!×!àë¯jªj’øöίHçO(=Úí ~Ë ƒkŸzè!ÙÆs<—QïáG(ÄZ‰VB…ýZ«ÖšáüZ­Î&ßÔ[ÎÿÞ~+ßÛÛÅ{{KÝß·ì¿;÷˜‹dôB£IEND®B`‚routino-3.2/web/www/routino/icons/marker-38-grey.png 644 233 144 6277 13061246466 15647 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü tIDATXÃ…—{PS×öÇ¿ûäIðPh*$CAÑ*ÊCå!ÒA:µö§·Ôv,­ðSk½ƒâEpt@èô§8^cìÜ‹úÖ"P±¶@a«DAü)K $œì}ÿ Á;þ¦s×?;{ŸsÖúd­ïÞg’‘‘‘‘‘LØÐÄÀ-v ;…¬"ãTÆ©ŒSÌ#«/«/«o¥?se®Ì5ç¿yOÞ“÷\˜d.1—˜KØ¡E$³1³´¡ m’„$v@²Z²Z²š¤ {„=žÆ"2HÉ`ZaæŒÌ™3n5goÈÞ½ôòJ^É+IìýÍÆåÂM† !ÜYšE³hýÍb´-F÷EY¥Y¥Y¥g»,½–^Koå]ÓÓÓ‚…s<êxÔñ(ÊF/Œ^MÒƒDA¢ °Èm‘Û"7À>·_·ßoÞîoÒ¿-ž=¾ÇÎ'´ep)“39“ÓÏÈF²‘lT(JòöIããã·©•S+§VZS¢Û¢Û¢Û¸ñ¹Ú¹Ú¹Z'I—¤KÒaÂnìÆnÈ`‚ & H@/xÁ &³Â¬0+§­ÑÖhkØøÏ³žýólš¢ÑÇècÖ–)eJ™2TjÝhÝhݸâ(Kd‰,±ó3n)Ù;¶wlï€Ô Fá$,–KjÎ[F-£–QŸUªpU¸*œYûÍÚoÖ~#<ëbp1¸ Â4LÃ4ðLÍÔL !žà ž˜‚)˜`#0 ³0 í¤´ƒG?úÑá|H>$GÇåc—]>ÆÖQÝQÝQ-¼#v;ˆž•ó«ùÕüêåñXŽåXþb˜shphphD"‘ÇÿT™ÊMå¦rŸUªU«>æã7$nHÜ ¼ã¬wÖ;ë1ͺʺʺ  kèºB|…¯ð@“Çä1@ºH鈞è‰ÀmÜÆm€®£ëè:­V«àÜèÜè܈ivÿª5ª5ª5|œ=¾ÇÎG²*²*²*bY, –†ò¹An˜ï¦M›HƒK¡K¡K!8ºn§Û!çŽpG¸#ÿ–1{€õ¨G=À,ÌÂ,i%­¤@(BŠI£è#úà¹@.†¡´¡´¡4Ðü þÏ‚ n7ƒщƒÄAâ UA›Íf³Ùû>"ü=òwDÛÅt€Ðȹ®†«:=:=:=€ûçxÞý¼ûy7€ÇxŒÇã0Ä•¸W ?©?©? h¬m¬m¬ÚÚÚ €å³|–¹KŽKŽKÄ‘ÚHm¤Ñv;Ÿ÷å}yß%›\/¹^r½„óÍ[4o)À(F1 žsãÜ87àfñÍâ›Å@U^U^U ×Éur0¤R©è€è€è`eýÊú•õ@Ó¯M¿6ý \øäÂ'>¤ƒÒAé 0Ö8Ö8Ö(Û•íÊvà‹¸/⾈„BˆçiçiçiIÁíþÛý·ûqÀiŒ4F.Ù„Ôש¯S_ÓgCφž ev3Ú˜ŸšŸšŸ2–šœšœšÌXuYuYuÙä}¬®¸®¸®˜±ÔàÔàÔà7ë'†O Ÿf,÷ƒÜr?x³ÞWÕWÕWÅØÎ;Oì<ÁXóôæéÍÓÙÛf´óØùKéRº”îûæCïzçüæÊçÊçÊÁ±6ÂFÀ‘éd:™(D ‘B̬ŸY?³xVð¬àYÐxµñjãUÀ+Ü+Ü+˜;?v~,Àíâvq»€û›ïo¾¿xI_Ò—h m m fÔΨQ „ï ß¾ …‰ÂDa“æšÇšÇšÇÀõÜí¹Ûs—ôsO§À“]4,6,6,ÆS~'¿“ß m÷2NÃi8 °2`eÀJ€FÓh \¬¿X±h k k Äeâ2qׇٛ͢ëÃêK}©/`ö6{›½ó¨yÔ< ôû÷û÷ûæBs¡¹pò1fÆÆÆxÊ©8§b±ÏsŸç>OK_Úü´ùióéþ†S §N½)QlÅŒiMZ“ÖÄØØœ±9csÞÔèyÓó¦çMŒ¥ÝO»ŸvŸ±Q¢D1öÝßýð݌ՊjEµ¢ÿWZvdê‘©G¦2vöÚÙkg¯½‰×ÓÓÃØîØÝ±»cÙæÌƒ™3Zú8¬ÅZ¬Í,f3„$ý–æ–æ–ƪqqq†ÌšbM±¦ÀP´¼hyÑràaÎ܇9o2G¦‘id ˆÄ â§§§`Jü”ø)ñ@Ͻž{=÷þ-Ó¹ú\}.033¸‡»‡»‡Ãl»,»áuÃë† !:¢#:ä+±ëI1ÉÈÈúªûªûªOÿŸ1ÎgŒû\¡Þ¯Þ¯ÞoÝ‘••%ÐT¨+Ôj˜«ÖW­¯Z‰8Qœ(N ‚A¸-p[à6`ͺ5ëÖ¬Ú–´-i[üXþcùåÛζ³íu¦ÎÔP|«øVñ-XÂ× _'| òSÝOu?ÕQS´NZ'åd2L#Ó4Å—Ž—Ž—瑽Ï÷>ßûÀ=ÜýwrE=¢QÏo#gFÎŒœñI\ѽ¢{E7‹Š}û,öù¥ë`×Á®ƒ`úúú îaîaîa€ÂOá§ðp'qÀ—ø_ÃÃÃ@GNGNG K•¥ÊRõ+õ+õ+˜ÝytçÑüå´Ói§ÓN¸!›.›.›>ÃLÀ ÿ?øÁ¯e3ÇqE\‘ ;Äâ½ü+m¡-´e£EÖ!ëu5 jÔ,`M»›v7íÆ9ï]Þ»¼waô=ý{ú÷ô€B­P+Ô|àïâ]¼ @ %”€Óu§ëN×ùÇçŸ|Ð`ØgØgØYÙ±²ceÇx•Ø_ì/öHé!={( &Á$¸e34Ð@#TØÚÉÿe+·[È-L)AòÇåݸyãæ›ü–ÁWƒ¯_AFRH Iž¦§éi•¨D%€hD#@':Ñ °@Ȫ¤JªœÔ¢¼üûòïË¿·îôôôæJD‘Dt.{ÖÉY'g<|™ÈD&9v´£_aïGÑ….tñÍHF2’I‰ÿuÿëþ×5I?—~.ýü\öàÚÁµƒk…CW._¹|å²u‡= 11À<ÙÞM¼ÑÞ˜#áÆãÎqç ©ÓÕéêt,êžß=¿{~£ÔQê(}1f¹`¹`¹º¿9µ9µ9`:¦c:8Û¼ÛAM¶ñB§Ð)p~Øý°ûa7`I¶$[’S÷;º:º:ºv^h+m+m+h*ÖU¬«XÇ¢ÈV²•l…Ä–Y8À`¯Ùkö <á Ñ?tèþÐá\e`e`e œ{{{º˜.¦‹S÷OHïŘMй¶cÕÖéCBìÜöI"±Mm%h&JjÝABH ‰úhâ“ãöµñ-ã[Æ·ÐmëézºžrËæš{hî!¬¦­´•¶BÆùq~œÌ|:ŸÎ§Cr\}\}\mÕÜÜ,x" ”J5¡›&å- ´@˜k«ì_íËÎÎÎÎΆÁžQØ&5dÓî›vsÉQr”ýå¹H.’‹L)A"‘È啎—Ž—Žó[† ‡ ‡ !ã8Žã8¼¶gâÖè­Ñ[£Ôô¢àEÁ‹Áéééžæ2óKóKóË=‡Ÿ¼ÿäý'ï6@•ý<µN¾Sñ–½uƒÌæ Ö¦ÝkþWý¯ú_Õ|$Ý$Ý$Ýt.{ÐsÐsÐS8t)ãRÆ¥ ë[Gï¬uÓºiÝðÏš†š†šò™¬UÖ*k¨Šª¨jÛoÂO…Ÿ ? ó ò ò âlñ>°£os ð'Þ6Õ2131ùºwNïœÞ9ø‡u¦u¦uæ]^â+ñ•øþWÞ«¯V¼Závu¨e¨e¨…ýýañÃâ‡ÅÖ¥#ã#ã#ã‚dÑ2Ñ2Ѳ VÈ Yáe@‰ Àõ²WÀ–(þm‚ÿ`¢Ý,T ÖLVÂJXID;w…»Â]ùÕwìñÇ>¤sD¢Q×"H$ ®V_Q_Q_Y¡k×µëÚÉOÔºSwvÒæ·Ôhú3ÿÁÞÒ®í¸°fb+¶b«°‘l Ȇ*5«`¬"-ÁÁÛÁÛÁ›kt º]/½iÍ¡9[º[ã[ã[ã @øÚü]ø³R¿mÿŒpuΰä0IEND®B`‚routino-3.2/web/www/routino/icons/marker-91-grey.png 644 233 144 6121 13061246467 15633 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü IDATXÃ…—mPTGÖÇÿ}çÎ 3‚±€‰„7YED,0bPØXŠõHŒ1B%ë»QL,IA`!d£Y(4fSõ$";ƒ€$`ÌB²%%R Ì Êk ÆÌ8†™¹·ûùÀ X>•ÊùÒuûvŸó»Ýÿ>}.ÉÏÏÏÏχ³fžm¸Xþ¿ÇšòÏçŸÏ?Ï| ' ' 'þÆ<™'ó<ñA#hMäë¶:[­ŽÇ9œÃ9’ƒ„ @úÐàu¼Ž×ÙqyŠ>>-wŠÒ‹Ò‹Òɸ dÓ,msr©¹9ÀÄ †«¢…´Ò6û”}Ê>彪°¾°¾°¾jÐ>n·7ÿw:b:b:"ò-U™ªLU†ÆÈ„ȄȒ%’FIU^«¼Vy®g×{×x×|—¿9ÿÎx®ø.ï\ÁµÌƒy0ú*ÙCö=e’I€$à›O§.L]˜ºð¬×SÍO5?Õ,IèKèKèãËz–õ,ë!IòyŽ<Óxoãm(1iLÈ@2<§ñ4¦m~6?›’zZ{Z{Z™ãzÈõë!ôÈþøðÅ)”Ê€5 q¸GÜ_Æ2Y&˼÷*·–äÍäÍäÍhE+ZýÜù:¾Ž¯k½h·Ú­v볉Ú´/h_bR³R³R³ø*µEmQ[ Å",Â",ˆ± ðèG?ú,À,0‰ILF0‚¢'z¢‡€_ð ~oö0{˜=0PóqÍÇ5 ¯|7ðÝÀwü27™›Ìíþ5!EHRÖíÀ:¬Ãº‘ß8···@ê+õ•úþã?Óצ¯M_{6Q›ªMÕ¦ I™é™é™éüjoµ·Ú‹Ä¯Ä¯Ä¯º™n¦›Á# iHH7é&Ý$ƒd £d”Œäòù`'Ø v¼˜!fˆ€z¹z¹z9¹ü»â¹â»x\|¤°©°©°iÓ*{‡½ÃÞq­ÃÃâañ°°À½£{G÷Ž’u¥ºR] ŽÑ ®“ëä:[9—-Á,qí TPXX@ -´ÚІ6€=ÏžgϤ´“vXÌæ sèYÍYÍY ‹²¸[Ü-îÄ ‹’EÉ¢£8ÂBXÈßÿÇçˆsÄë;×w®ïD‚PF7Òt#<8=§çôÀÝÝp‹»Å݇íCÛ‡¶èAz´£íàÃÆS‹©ÅÔܯ½_{¿v4ŽÆÑ8x¨?S¦þ 2W|‹O{:ötìé³:Í›=6“S)ªUŠŠœ.•.•.!ûÈ>²ÜíäÛÉ·“ЮЮŠ.`¨q¨q¨h/m/m/&‡Éa< Á!8‡Ñat]Œ.F Œ Œ Œ‘‘‘[ÁV°Ñ Ñ€x { { “­]ª.U— Çm±¶X[ìâ¿à裣Ž>¢Ç«ÖT­©ZÃ\6ÅŠY1+fLì»Ä.ÆŠW¯,^ÉØÕ[Wo]½57Ž‡ÃÆaÆò"ó"ó"³P µPÆŒ#ÆãcťťťŒ 9r,„1Ý—º/u_Îϧ/Ó—éËŒÑÝt7Ý=ßÅãâãðÞÃ{$„»Ä]â.Í)NŽ7ñ&Þh €ýŒýŒý àyßó¾çýyi.ܶpÛÂm€ÈD&2`(|(|(Ð.Ö.Ö.ÞØ÷ƾ7öÁ3Á3Á3€5ÉšdMzLÛ@':Ñ9Ÿ{{{ ÀYœÅYÂK4Dþ°¬¶¬¶¬&ËgÓž“˜%f‰Œ§<å)HtBtBtPÛXÛXÛ ¤¤¤ã×ǯ_lËmËmËOãiü<‡»Â]á®øüþ ZE«hàw¸ø¿â×¹ôÅœÓ$SSS0rI\—ľà(>P| ”}Œ>FöEwUwUw@.’‹ä"¬ð‚¼€„« W®[S¶¦lMHÉ#yÀšOÖ|²æ@®W‡²xY¼ì1Ð9kD#t-è.º‹îšË»Ö-[¶†QèaÿTF…Q(áŠT¤œãóù|>Ÿä´-B‹ jM‹L‹L‹ t~±EW¦+Ó•–]–]–]@ZHZHZ@ÔDMÔ€´HZ$-ü×ù¯ó_÷ÿ9I5©&Õ·“ÛÉíœïç¾æ¾æ¾†MØ&l¶AÙ`h04h 11à_D$"?•q¾7|oøÞx?W¶^¶^¶þÂÈÃä‡É“%5bX#ŠÙN‘ݑݑݰµ&¶&¶&¹ï侓ûðí¦o7}» HQ¤(R€Â_á¯ðèsô9úÜ<-Ë–eËfÖάY;×ÍÈyržœ‡¼îݺwëÞ¥Ó#º݈ŽûQV*+••ÞÞát :8HÞPÞPÞ€›¸‰›‹OI'¤Ò‰6·ÉºÉºÉºg37|¸áà ² ‰a‰a‰aäÆDÚDÚDبߨߨˆ___à]ï]ï]à0ã0€Œ`@5ªQ Ü»qïÆ½€¨5¢ Åt×P×P×¶WUU¡ÁmØmØmxæE&a&‰ÜŽP„"ôî>Ž;ÇãÎI:¸“ÜIîäèߨžê©~]ù½ò{å÷@Û…¶ mØŸnëoëoë¡ó©ô©ô©„uå’•KV.y 0ÉHP€Ì‚ÙÙÙs€–ß”¿)SByÍçšÏ5A+5JR#@,ÄB,¹”D“h}wJP‚ÞÏYæ‰Q³u#ÿwRFÊHÙƒ\ÇÅ©C&2‘ÉnÈmÈmÈö›ƒÍÁæ`(IÉ"Y°Ð~ÚOû4  ÔPC ` S˜œEhm  °¹¤ÔXÔXÔX$f›Þ2½ez‹?%”ÊuEÁǃÿè›Ù&¡‡z!ÞUª0ˆA wp‡pˆÔ…] »v¥d«b·b·b·®ÈaŠ0Eðæšìšìšìyí’ÒBZ`›»Bg0ƒ™ù»ži˜†iÀ¸ÅÜbn1äí†vC»m¸Ys³æf¤Då«òUùŽÌØ«ìUöª£ïß)¸Sp§`f`,tÆùÜ:íl/Ñt]€…]c]c]c€ýýýÐÑ÷Už*O•ç½K}õ}õ}õ’’¦—š^jz‰m ÉArrZI+i%Üà7€=bØ#€D ¬   Ð5‡7‡7‡c¡j\5®èjºš®>úþ¬ôFfœR<å#>#>ó_aö´n;ýsüÏñ?Ç{Õšïšïšï²»>ïú¼ësqí¤cÒ1é’ÆJc¥±oú± VÁ*þÝ9äKfo>ú´kœ %<ÉCðö;Ú-DšÐ$°:VÇêâôÜeî2wùÛÀ™-3[f¶Ð¥Òri¹´œ»+É”dJ2¯t9èrÐå?Çô½AO¾¢ÞÔ›z³O~ë€Ó¿ÇÁáì í:Ó…X€ƒ8ˆƒü-’NÒIú‚XkbMÇ2ÜüÝüÝü¹»’AÉ dpÔŸž 'è‰ýc½;zwôîfèôç*,­Äñx§ ¤ÕÆ›IEND®B`‚routino-3.2/web/www/routino/icons/limit-25.8.png 644 233 144 3125 13061246473 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍ–ïOTgÇÏ€&Ì FB€SS¥V4ÆM'ºµ4’òÃÆ)Š–¸ÛlAÓÝ’HZ³ÚB'+RkM¬)¤6Êf!¨[© ;…:•D˜´’Œ;sçò|öÅpwX÷ðyss~}¿'çæ|ŸG@DDbW¾a)a)akƒvØ?굨מÿ*hŸÒÁTh*tþ bšcšÖµ¯k_ÙFÜÈ_]/Â_Ígø%VBŽÈ¯#¿6嬨Çà­—Þz)Ê´ÀÜiîô º«º à›Žo:8 î«î«sç@È6âF¾Qoà­Æ—cOñ‹Àsß>÷­i"#"#D õÕÔWm&ܵAÁoÜ¿®Â@Ÿ,XTàÁƒq®²øJ¾QoàøŸÁìG >;>[ÞÜÿæ~ó™`Áø—p$ùH²Á§uŸð x½L/Ãj@ `Â!ÛˆùF½gà|°ŸÐ¯\9™Å®b,ßІwµd-Td %‚†¥ ¿¯¿ú‹z†žúý€~8ÎÇ|ÌÓG-Ïhš¦¡îñ–õ >OOƒßø•WDD^ü ̳dzFù]C®!àù v©],ÒHM n¨êÆ*Ê€B¡€EY\Õ‘®t¥ ç8€ÊVÙ,rrߺ·ÂÏ`°Á-"rj˜ƒ•+ ¸å-ÿŒ©©ƒ¦¬¦ÍM›QÎe§æÔB„—â.Å]Šƒ–¢–¢–"p”8J%ðÄòÄòÄòcôôhëh+4Þj¼Ùxõãö[_Üú"ħF¦L¼Á~D¿)"r³ºßë~nü~╉WT•剹ÅÜ‚o÷ýÝ®Ý.Ø0½azÃ4ô9ûœ}N°ÅÚbm±Pà(p8 ¬£¬£¬f&g&g&C õí;ÛwâwÆïŒß å{Êw•ï‚äþÄŠÄ |é'«*èÎìÎ}6ØO˜ü&ÚíÈÚ!’W™W)2½{¼~¼Þtæ§jûkû%²?¹ÿ…þD¬1ÖkŒH›£ÍÑæ   Q>åS>‘½Ã{‡÷‹$¥%¥%¥ÉêR]ªKÄ|Ñ|Ñ|QdOÍžÚ=µ"‰×’æ“æ%r)ûá‡?4ÉÙ’³EÄ”íŽvgí´uQ뢖ÇTõ|þ|~hí¯þvÈ6dƒ½{7öÂaçaça' L L LAÕƒªU =±=±=ZZZ¡g}Ïúžõ¡‰uôvôvôÂV÷V÷V7äzs½¹^x¾Îö¶ímøÑæúÔõ)ÁÛïí‡åѵ¿¬ýey,L}È äšÆLŽˆÍ›EnÕŒ××I|ÞѼ¢¼"‘òôò´ò4‘–Ì–Ì–L‘™†™†™‘tGº#Ý!Ré®tWºERn§ÜN¹-âžrO¹§B;âü‰ó'DìKö%û’È•è+ÑW¢E">ˆ(Š(þÛ¥?”J¼Èš;kîˆð;ݧûLcaêÏÞoÏè÷"ׯŠ\oqîwîç]´»Ú]ñwÞéíIHNHNH™ª˜ª˜ªéNïNïN±,X, "¹Y¹Y¹Y"uuu"ö {†=C¤~_ý¾ú}"Cþ!ÿ_$î/qŸÇ}.²Cmwmw‰¿ôõRk©•wDººDÂÿ½´iiÓè÷BãÊVòní»µ°d nÉÜë³öY;Ì ÍLÎL¢f gógóÁ_è/ô‚6¦ic0waîÂÜPjBM€:§Î©sðhÛ£m¶=ôо_¯æþ5÷ÓÜO(•¡Mj“¡­äÞ¡M‡6‚{jpE`C:†®¬èŒGY•5¤LªMµ©6P§Õiuz•^5«fÕ Ø±c_åÏR/«—Auªkê€ÊT™,ª¨ü®Ÿ]?˜5ÿêYð¡cÿs«ŸÌãHquq5¨/ƒÊ¬þ¡[t ¨ …ÀŒ0‚¢øÔ_UŸê.s™Ë€7xWª{Á ²ìCúwúwhêï¹ÀÐi(IxI8àZùŸÝ»ò™}]<³ï±góûÜ‘×ÊÙ‹ˆIEND®B`‚routino-3.2/web/www/routino/icons/marker-26-grey.png 644 233 144 6357 13061246466 15643 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü ¤IDATXÃ…—PSçšÇ¿ï9òK €¨T$ï´ÔêJK·åêZ@kÑ2õºô:VlG@ Â8[áR™‚T‘¸³·þ@éSe‹Õ^èZ0(ÊB$KW* $ $'çÝ?HÜg:÷ùçÌ›sÎ÷ùœçùž7Ï!ÅÅÅÅÅÅc!Ì &ž3pÎ@Û‹ÏŸ)>CKŸ•>+}ö%õ¥¾Ô·|'ÄñAª¶6[›­…ZhI"‰HðìÀì GEi¢4Q)àžrO¹§=Zb"&b:P_PPp­¿,»,»,›Œó¡|(Jþ¸À!üìâ’3/×aÖ1MB©P*” ?Ûgí³öÙWâJu¥ºR]Ó¨}Ü>nï¸mµÆZcUŸÉªeÕ²j\Q%©’TI¤`µÇjÕ@œ_œ_œà^»Ï»¯wßïÖ{¡ïÊçÎïæqóq® n ÞÔ›z ÛHÉ!9¡Õl(ʆ^?=Û8Û8Û¸ÜϿÿÿÙŸô(éQÒ#ÆÓÓÓG6‰ D¢XQˆBB +¬°øãc¯âU¼ «-Øl Ʀ¾®¾®¾.êø1òÇÈ#…ü©w¦Þ™z'ë˜4T* ]/væ8sœ9‰Õ4—æÒ\Ã6f94hþÐ<€.t¡+Ø‹kãÚ¸¶®óö9ûœ}nùFÅÛŠ·oóë2?Éü$ó®I>#Ÿ‘Ï@ÅXŒÅài8 §áà0„! X„EXÀ ,"€ “a2 “˜Ä$8³·ÙÛì‘Kµ—j/ÕòÛF:G:G:¹[žO‰§ä¿¯òi|ŸöÖV¼…·ðÖ“ÿe$Ý’nI7àèèøoÿ°^µ^µ^]¾Q‘¡ÈPdð›r³s³s³¹[r?¹ŸÜ‹­ÎVg+ dB8#Á9KÎ’³%£d SdŠL$šD“h@Ø-ìvƒs†:C¡€ÞGï£Çb·¾â}ÅûŠ÷ùMîün7Ã[x oùcœ½ÕÞjoÍ^åŸáŸáŸAÃ2339·Gf„eÂ2a¼ÙT6•M˜Ì æ@šI3iP†2”ø ?á'`Ác¼à/€9Âaެ5°€ÖÐZo·~f{f{f;×äŸîŸîŸNÃ܆FÒHy8Ý‘àHp$êuºIòyƒ¼ž‚FÐx3L'Ó LH'¤R çpÏážÃÀðÎáÃ;aDF¨¡†À-ÜÂ-`6n6n6¸o»o»o†º‡º‡ºRGêH@•TI•ð–×Èkä5ðTßWßWßG’›ÇÍÇña|¶v—ïEß‹¾qt…f…f…†Ôa˜ÏÜ`n07€‡‰&gŸ=~ö8àµÙk³×f`&&&Pf(3”@6²‘ `âÞĽ‰{@Ù†3 g€9ñœxN X&,– `…y…y…Èzžõ<ë9Üá¹Âg…Ï Rw}òúäõIUϪgÕkw16£Íh3âßC*B*B*P )’IŠ`¥Ý´›vƒs+èŒ:£Î¨´*­J Ê å…r`OìžØ=±@/×Ëõr€a½a½a=pCsCsCø'ú'ú'ESESESÀŽêÕ;ªg‹Ÿ-~¶0M™¦LS/@9I³¤YÒ «›ÇÍÇn6„ß,­\Z¹´Q1Þ1Þ1Þ`ÈN²“ìãLs¦9Ó€iõ´zZ Ä݉»wðÙæ³Íg`´FZ#ûªûªû* ,!,!,xÀ?àð€mÞ6o›:Ìæ30¬Ö k€¤Æ¤Æ¤F`¹×r¯å^€°GØ#ìÈ&²‰lÓ?ß?ß?æéí§·ŸÞ&“ ıA´yfÍÌš™5xÌïç÷óûÁ¢µ¨e ضH]•º*uÜ\tsÑÍE@}r}r}2°A½A½A D­Zµ°¤YÒ,i€MmSÛÔ@Š.E—¢€fm³¶Y ˜Mƒ¦A€©aj˜PWeÙÙ{³÷fïá1£`Œ‚63â q…¸‚¯zð8àqm~pêÁ©§D#јÃ)œÂ)Àx×x×x¨;UwªîðKÎ/9¿ä)Y)Y)Y@òHòHò€~ô£p¼æxÍñ ±kì;;;;l®ß\¿¹ *¢"*À°Ý°Ý°ýEëçôõõý˜~L?†¿Š‹‹óU 2‘‰Ì-WÌsŤ ÃÐaè08¦Ë¦Ë¦Ëº· ª ª *€#áw)ïRÞ% öÓØOc?ly¶<[àåå,ýlégK??ü`ðƒ xxúá釧\À\‚öí Ú›ë´ô{í÷ÚïµÂ:¢'z¢ÇIâ$Nâ<íINFŸŒ> <ë|Öù¬³á,­–VKëö`eŒ2FãÜ·e`ËÀ–¶êÈÔ‘©#S°ytztztBÄqE\Àò| 0—4—4—äŽåŽåŽþ—ý/û_jïÔÞ©½Ç„cÂ1€¥GéQ ~üþøý É¦dS² ¤e}Ëú–õ‚õvÑí¢ÛEŒTÊH)óp«CçÐ9to'‡~=ôë¡_ÜÅ]Ü]Zã¡õÐzh–ÌZf-³–å¹ñ_ÅÿÕ¬,\Y¸²Ü˜¬ž¬ž¬eϳçÙó d+ÙJ¶|ÀŠ E…¢ð-÷-÷-̽æ^s/`€KÖ,Y³d l¶Ûa}Pø ðA!¶4h8ÐpßKíR»Ô>ÿe)KYÕD! Qæ-£e´l7:ÐŽ±ÕB¾/äç|#æÄœ˜»Ž;ÝùèÎG4:âDĉˆä\œ2N§D¥±4R¢$J¢à€å(G9TPòjyµ¼Xu`ÕUØa‡3333ð¾²ñÊÆ+y…'<á ÄHŒÄxP@ R2ðgZE«hìóœ«æFî09IN’“7òØkì5öZ~ÛÂØÅ¿tùÒåK—ùݦí¦í¦í’t’NÒ1# AB@eTFeÒ‘Žt=èA@Ch ™ d/¼è}µéjÓÕ&ç>ÓÓÓ®F´D´D´ä\YDeDeDå±ë(A JÈy cÃ|¢{•a£åûñÞÀ¤Mùµòkå×Uï‰OˆOˆOœ+›^2½dz gn‰o‰o‰wîs'$_/Ȱ‘ÒCz4¡ Mÿÿò ¡e~`~`~€è¦þ¦þ¦žjîïïÙ*™—ÌKæõdÞ~Þ~Þ~þó/ûKúKúKª§zª‡Kå[7¨Õu¼ , ‹àÓû[ïo½¿ö½ö½ö½Ÿ)ó•ùÊ| éééØªöÍí›Û7S É#y$"¡Ah@!€NÓi: žð„ÇÜ„~B?¡Ç¹Ž•+;VÂG6.—Âa°æó/™J¦’©|2ï²bÍuMú÷ƒ»>ID®¥«ElÕ‚wûÈ:²Ž¬Ó¼·ðÉqýïŽÝŽÝŽÝÂ_²„,!K`âc*c*c*‘& ƒÂ ¤LÅDÁÆð|Dß„þM¸3büÍñ7Çßd‡Ä+Å+Å+«Ö/¼4ù·„:¡N¨ãj\ÝãîXYYYYYfÜ…ë‡rywŸË»5¤šT“ê­ŒšQ3êü6ä"¹ÌqCçÐ9øÝæzs½¹R†a†Á´»׿®Í]›¬OêžÔ=©c‡ÄÅÅû¯ØÆlc¶±ƒÇ†Þzwè]À¨pï§n@7ß Ð—€ÝH]ÿ…½Ø‹½äïÊï”ß)¿«zO¼K¼K¼ë\™)Èd âÌ‹/_,vîsMô>}~}~}~ø[WwWwW7Ù&”JA!(Å_~æ>ä>ä>œû—°Õa«ÃV3FW¾?¹ÿ¡^æbñ;‘޵죞ԓz’}üõñ×ñÎeÎeÎe·yQ˜(L–qüyâóÄç‰~ß™ÌæúUï·½ßö~ëÜ`qX»×#Þ#Þ#~0­§õ´þìˆ ‚ˆF…WÝpŠ™‡àŸÄïx·íhG»³„¶Ñ6Ú–0Ì´0-LËOaó©ó©ó©ÂëuuuÌ›Ëæ²¹?v†·„·„·ü!A?¬Ö“ÿ^^^¡§]º: õ÷8ü“xÉ»®íÂY‚<ä!ë!Ù$›dÿ#œ¶ÓvÚ~àcIˆ$D °£ì(;:"” åBùîß·nÜ ,"Ì¥wá÷Zýrü[ ý¿wIEND®B`‚routino-3.2/web/www/routino/icons/limit-19.4.png 644 233 144 3002 13061246472 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü·IDATHÇÍVÿOSW=ïŠÍLY¿@¬¢†ð%ƒéD0Efƒ¡#È¢ËF]æüE‰Žhtˈ’ÄDÍœÄ)an¦+„dÁ©l¨q‘¬:1–ÝtH‘7' _ºö½{öCûxuû¼¿4ŸoçœôÞ{Þ x9þ RΔ3ek,–ß6òóÊç•g}‹O¨¤´EÚòë~2õXê1’´µÛÚµ»F¬×õþÄyÀÀOäÓóxF"å딯¥Òxü!Y“_“?Ï‹?é'-,¦¢ä;Þw¼$ùí™oÏð=òñÕÇWIòiéÓRÒˆõºÞ¯Ïëx‰øøð?ü™Ü“Ü#= SÌ)f€\X¶°lñû±†ß“›+6Wä#Ó#“I’TŸœÏù¢”dˆ!êk"!Öëñ~}^ÇÓñu>?¦dzIz @VÕVÕZNÇîž#÷dìÉÐù"H6³™óÉh("IõMõM†IÑ/úI’%ÒˆõºÞ¯Ïëx:¾Î§óÇôàù½ýÔÉPu¤:2'h@[IŠ$‘bô~ô>õŠÐmL#£E•¨BŠb§ØIcM󟑜Œõ“Úvm;#"[}W}—ÔÇðI7Ü 9çŸÛÊd%-÷,÷BIä°sØIª¿‘$]¢#:à´Î'žŠ11Fò ò`‚mÜÆm$7p7ðÿ+›ÙÌ&Å-uJšÃsq*ð}à{’´„,¡PRLXöÑø?uâGÒÓèi$EIjËu¼þûÛúÛ(F²G–Œ,1xüOüOüOȶUm«ÚV‘#Ã#Ã#ÃF](B )ŠD‘(2òÞá†?¢¸’q1õbªžÕ–‹Hþ†}$§czdôÀ+ßá³uöuv@r€´â¼½³·³ÿ¬Ï_o_o‡t{ñíe·—Á–`K°¨*¯*¯*º²º²º²€êÊêÊêJ@Yª,U–Rš”&¥h@–±Œe€KsÝs݃ôñ'Í«›WãŸØ¾I+øjñ7Åßø=¦G†lÝkÝ[Pˆ†’¡’!€fNcÜ”jJEJZ íaÚCÀRo©·Ô×<×<×<€=ÏžgÏ:::³Íl3ÛŸÕgõYa,puuu@x^ضimé½é½H‰ ;ÍÜâ]Å»äX/[/ÊxÝtÜtœ¹@rsr3 Ö”7äš55k€|Gþ¢üE@P JA p¹]n—˜ªŸªŸª6fmÌÚ˜øÝ~·ß ÈWä+òCWûöí7€W‡«Ã”j¥¢T7݃ ~ü¾f´k´ Šé kŸµà©Wêen„æÕ¼Òäè–èäÀŒŸñ3Òu`ñ§x$òò%ù0›9›9› äÊ9”s(<_x¾ð<à·ùm~à°8, 0ãñÎx”£åÀÊë+¯¯¼ø»ý>¿x˜üÇàƒÀ–¡›C7‘î@Q°(ð‚zD=" Åÿànò«g_=#Õ÷HR¼?•áÊŽÊS•§È³'Ïž<{Ò8ÄNŸÓçô‘ö {†lò6y›¼ä¤sÒ9é$ r r rÉñîñîñnc®ýóö¶ö6r󩊵kŽ_•·ÔÓçZϵê¾6¸;ñVð Ù­ßJ­Uk%'×NnÜJ1Û7Û3Ûc„[íáVrltltlÔ° -¢E´©ÜQî(wHµV­UkIQ-6‰MäŒcæµ™×(þ™øeâ’ƒq>ÕÓäi"Œéî¤å±åq(‰ ¨uŽßŰV£Õ>ÆW¸œËIQ'êD]‚=ä‰<‘Gò0óðsF;Íi’ *$§Ä±€ÓqüH` 0àcâ9Kpþ¨Ûä6ÎO{4 ܯÞWœŸÙÄ&R\b€ä-Þâ-’“1Ç£âx@òáœóïÐv0ÂCêOêO$_šs~³ÛL2ü_çq¿•/ìëâ…}½˜/ØË<›/ä5EZIEND®B`‚routino-3.2/web/www/routino/icons/marker-83-grey.png 644 233 144 6276 13061246467 15647 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü sIDATXÃ…—}LTכǿçÞËÌ0C‡ú†Œ ³ `XDÑú‚ˆm~P‹vñK7VãPqÁ-]" B“V«+jÑd«Èb-b E F+¢¸ˆ¼ŒÈ«€…2 003wÎÙ?˜ÁIó{þ99÷œû<Ÿ<Ï÷œû\’‘‘‘‘‘fÍ0;p„—ÂKá%«Ê¸’q%ã [”5œ5œ5¼uscnÌíÄ—¢‡è!z„Ä›ËÌeæ2vqI:üà?íhG;€xÄ#ž—ÆHc¤1$]…Á¦‹dŒŒ‘±C™ 3f.ÔµfïÎÞ½› ‰Þ¢·èMþ6ËAì\*np-Öb-WD³hÍ¢ –)Ë”ejÁª¬ò¬ò¬ò¢ËeÈ2TýÀ´Ò´Ò´2ä?¹Š\E.n…D†D†D’ôP§P§P'`•û*÷Uî€cîXwìw¼ïð7çßÏßÁãàì\Ï”LÉ”ôs²ì#û¼syoÞ›÷¾}iêêÔÕ©«^îïV¿[ýnµ-5²=²=²³¶¶¶hiº4]š¾Æ×ør˜`‚ ÀìÁ‹±‹a2«Íj³Ñ-õ-õ-õÌZãWãWãGSG?ýpôøÓro¹·Ü{̶϶϶oK.Ó2-Ó¾üœ€€€[OŽÌ™92 õ¨W¿#” eBYý5Ë´eÚ2í¥Ù¤Ù¤Ù$®MŠMŠMŠTF•Qe„ó0ó 2_æË|! èธÄ$&,Çr,H'é$1‚Œ@0( Jƒ]%gKΖœ?ïªëªëªîKœ%ÎçîJ1FŒc6îÂFlÄÆþ ιѹѹpZä´ÈiÑ·wM•¦JS¥W”&V«‰£µ»µ»µ»…ûª…ª…ª…˜gk°5غ“î¤;!À npH.É%¹é!=¤ È#ò@$" ÐtÝÁ–`K°%ª)Õ”j óþ5Ÿj>Õ|*F;â;x|$«*«*«êo«,–FKce£rB9¡œ`>û{÷÷îï%ª"U‘ªõ£~ÔJî>wŸ»8çì â PxЧx  •¨ü¶gœ&Ódš pg¸3Ü †Cè× ®\Y¨ÑÕèjt%zI¨$TÊ1?æÇüŽ}j ·†[ÃÍ7?Þü‘v@ §ñ4J®kçÚ‘u#ëFÖM¿5ýÖôÐÜÜ ˆb àNàÀβ³ì,ðÒó¥çKOàѵG×]zûzûzûæAËi9-‡R•¯ÊWåC²ùÉæ'›Ÿ ÒÁãàãDÑGôY³ßmÄmÄmǃƒƒÂI>Æ1ŽqH¸‹ÜEî"ÐÒÑÒÑÒœ9xæà™ƒ@åXåXåPx§ðNáà§®Ÿº~êz“`]·®[× ôôô:½N¯ÓçüÏùŸój.Ô\¨¹pÛ¸mܶ¹×$AAAAAA$ßÁãàCÚxÚxÚ8=^´®h]Ñ:æ°)ñ¨xT<:7gçKÏ—ž/e,¯7¯7¯÷ÍóáááÆÒtiº4cOdOdOdŒ>:}tš±ÚþÚþÚþ7ûïÝ+ºWÄØ!ŸC>‡|3™ƒÌAìm›rð8øøõt=]O%yžò<åy þÊ@e »Ín³Ûà¸-Ün Àð|Ðt©éRÓ%` n n x´íѶGÛ€~ üø›æoš¿i>°K±À—%.K\€žÄžÄžD ©¤©¤©ðððÞOz?éý$€ °6@HÁµÎ´Î´Î€|0ø`ðxÞƒ÷`׫««I¸CÜ!îÀ?ñàÁÌ^2újôÕè+€n¤éFÀ¼Ô¼Ô¼°ðÞÂ['¶Nl¬mÖ6kÐÐÐ vvv׿þûõ߉˜‰˜‰ L¦SHE*R´ -sñø©ÇS§ãÍEsÑì:'û^ö½ì{1çÅ _,d×›5/j^sä9‡é¯¯/ .¡.¡.ˆ.Ž.Ž.´œ–Ór@*Ke© P”(J%À¯{~Ýóë {g÷Îî€*J¥ŠŽééé”єєQ Ñ½Ñ½Ñxöų/ž}1—Éi}–>KŸèôúœ”½½½s8Ä"±™… !CÈ éºuë>¶i Ç Ç Ç!—u˺eÝ0ºìuÙ벺:tuèê›C3R:R:R ˜®˜®˜®Ê6e›² ¸ðÕ…¯.|4×7×7׿ÙOZI+i„f¡Yh¤&©Ij‚Ù¾,¯TH*$t-Ñ=Ñã<±±]’óïïü{ÀpÝpÝp]aßTÂTÂT¿¨}Û}Û}Ûm)ñOãŸÆ?åsÚ¶·moÛsqnqnq.¤ìö û “t’NKf–Ì,™öÎÛ;oï<ànÂÝ„» @ÍÊš•5+i¿´_Úðq|ççç‚íX³cÍŽ5 7ºntÝ袦5jÔprùbùbùâÿÝe-·–[ËÃ~ GzôéðñÐ3ÏiØiØi¸Áy²j²j²ÊKq8âpÄaµ&jMÔrÇpÏpÏp¬§µ§µ§D«ˆUÄÞ‚·à-ü;ü;ü;€ýS‰~M¿¦_¼>ùúäë“Àü¤ùIó“€%âq‰ÓÓ«O¯>½Š¿FFF B.ȹ0ó!ãÏø¿Ãþðž ÌÞ“|#ªQêPFÃhؾåµòZyím4ø7ø7ø³÷Ô.jµ )ú 胠ãúÐõ¡ëCȉq#nŽáŽÐA8@mTÕF@í§öSû!B„Ñø­ñ[ã·PÞZvkÙ­e¢F¢’¨$*¤›t“îÃ1ˆAÌó–ÃrXŽ ¶·y¶ÐÙ¾Q8FòHÉ»“Èmâ6q›RËð%¾Ä—Ü'+NVœb 1†ÈI2I&É0R-ÕR-€„ @Ðà2.ã2À’XK¨õ sZTVVTVTVØRÆž={&äI]¥®R×âìå§—Ÿ^~úômd"™ä:щNq‹£U =è[‘Œd$“²7WÜ\q3g»L+ÓÊ´ÅÙc¾c¾c¾‚¡$ª$ª$Ê–âHV‘UdÌÐ@ €iLc€¼à ùÈãj¹Z®Ò{ú{ú{zñ>¤)Ÿ£P( EÿŒåšåšåZÚw­™­™­™Ó3=ÓÃÕç²Ôd¦.Ô…ºÀµùUó«æW€%Ù’lINûNá¦pS¸½ü¹½¼½¼½œÏ©ÚYµ³j'‹ ‰$‘$BJ i!-ƒ3œá °q6ÎÆ"‘ˆ˜þCÿ‡þ=Š«ƒ«ƒ«ƒáªR )†ºš®¦«Ó¾ãNq§¸Sý3v)æÍâ0{§)q\ö_©}j/Ÿ3«][ YKÖ’µÛg9nß´°° ãh£Ü†ÀS§O!†¶Ñ6Ú9çÏùsþ0‹ébº˜é¾?úþèk[>66ÆwÈ‚eÁ²àœu³‡&õ>ͧù4_ȳWößËÎÎÎÎΆёQØÌiȮݻvófûÍ;¿r›¹ÍÜæÔ2h¡…–û¡ÜZn-·Š †CäÇq‡qG&tÓºiÝ45õç÷ç÷çó²Ã²Ã²Ã­·ÌæóÀáÓu|Ôñ`Ô8îS ƒoô-`ǹÝÁovíÞ\Qº¢tEiÎvÙ~Ù~Ùþâì111ÁðKÆ/¿dØRì½k‹{‹{‹;~ªo¬o¬o$ŸËÛämò6€j¨†j6Ÿ Ÿ ŸMàêêÊýi÷±}œ~›‹Ç_Xxxxxx8Dû´…I˜„IÈ¿  à¿lKmKmKˆR©ÔçŸx½åõ–×[ÜK Ï Ï ÏÙ6_n¾Ü|Ù¶~Ò:i´òÉNœ68møw5+`¬à¿oA )¤|þÄŸø“.vTÀž(ñm‚`¡Ý,T¡ U¶LVÆÊXYx'wƒ»Áݨõ™ùdæ“™Oh€S¾S¾S>÷œ×òZ^[Sç{Ã÷†ï­áúN}§¾“ü]@Ðì’Ýo¹ÐôWþ½¥]ûuaËD"‘(4‘Ýd7Ù}×—U±*Vuhó2çeÎ˸ç|ßÃ÷ ,£'è zâÀ«¶]m»Úv³€ð±ûûù¯Jý¶ýAÛG ^IEND®B`‚routino-3.2/web/www/routino/icons/marker-39-red.png 644 233 144 4203 13061246466 15437 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü8IDATXí—LTWÇÏû1tqGHT”a·ÖuQ»þJTºhÐ6ø£"?ª15U@;Ö64¸*¢hе„ÖŠ­%8ùƒ¬4»Å¢ñg,®«â&ØØ•Ae[-udvt˜yï~÷æ¾y3Éj6»÷Ÿ™sÏ=ç|Þ½ßsß ÑÐA!CœgVÌŠYþ˜ˆÖ<¬yXó¢Y²*«²zõ0M¥©4r³J’I&™Û@¨Í*ùzÏóñü¡õÄy¡tþÐùCçÙsî‡î‡î‡$HàÁ0 Ýèt;àçëy<ÏÇó‡Öwðé|d.öˆ=bO÷_x‚”³)gSÎúgwùº|]>t!0XKbIð«¥j©Z ¨ÓÕéêt@ÍT3ÕLƒðóõ<žçãùuàúÖá:š`ì‚HÞ%ï’wÕ_ãi•i¦}èÏÔÁÞa/³—áö×{¯°nßMßMƒÚ\m. 4„ŽA­KëX·ïšïà¯÷þàý`ï°4–7_Æëñúœ‡ó‘é®é®éî~ÏXË­;­;ÙxÇ/ŽÇŽÇè äq«{}| n<À#Ëe¹@àðhw´;€ÏðDê^ßß•`6Ç/Í¡¡ÏZnýÀúÏyt>¹P.” ÛwqGM~M~M>{3Àã·û~'°Mlï©ÁSƒðùæÏ7ÀÅw„_eWvçéÎÓpø¥Ã/ð^X}auÐë·û|ºé©É¯Y]³š½©ïl±Þ˜Ä˜Ä˜DT:9§8§œpÂxþÌÛc¶ÇC}#Ge´ßk}¯ÕX¾þ¼ÑoÛm+±•zþ·s‘s„sÀy8ݳ¬jYÕ²ªà“©¼mzvìz^€½k÷®5æ>Px è(ç ç ˆÍÍ€MS6M1®?ýÕé¯`Xî°\½7ïܼèõõ9ç-õ¢)Ý”nJ×{ÌLXë#¢‘æJs%QÓä¦ÉDDK¦-™FDÔÔÚÔJD¤d(DDYYYYDDÃ#†9'9'=o~Þl¼Yâ∈| ¾"ЏQ|£˜ˆŽ†\?fS£©ÑÔ¨·<¿_YάêYÕ³ªqû‰ðDx"hBšÀ°^›¨M46CÇâŽÅ uHÆ£]‘³"Ǹ)EÇ‹Žý×3®@ü+ñ¯ðæ¯*/(/,yHà<:%:%:%·9‰™b¦˜éû90Qy¤¸îH݃"zßè}šœMN^×n×n#Ð¥þKýF õ'êþòå óBæþ=ßíù"¾ŽøP7ÑüE°Þé}ßNûvšþÜ($ ÉB²ïg’fH3¤%¼ËâWW Žs¬ü±ùÇføiÛOÛàf 8H­»Öm|öË_^þÒz±êbd·d·ÀÆï7~oT_Õþªý–Dý ¸f»fÃë¯ÈW$–$ÌN˜­é/i´4ZýiE¥G¥G¥Égä3ò™†ýÂÏ^ppÁAu+ϯٶš·šá…òˆo‰o@dYd¬ÿxýÇÆTò”ûFl±Ð>m*m* >nÁ_óæ=Ô<:àiƒ´á陼ìHÞõºÐ?1%›L Ýu<ÀVjeÅè÷Gô¹îsÝ`@]Q]w{^{hÍ(C™×Ûy¹ó2Ô%Ö%jþõ’ë%Áý=Ö,ëX–è¯Ð ±B¬x²H#ŒÆüîP ô7½¿Ö ¯ ¯.¬„“ÂI®m³Òvìʱ+PtínÕ&hŒ@l)[ xï`¬”•ì°lÛζë«Ý= =Y=Y@|„õõ¿PßÉÒi‡-MGˤLÊ”­AÖTJ¥Ty'ÙÉNv"©Wº+Ý}û„þj­µŽµŽõ[ïv-îZ,ÈøWúWÚÐfЮ‡+@+Ô ¶ÊwÆw^¸æòšº5uêVý 4 »d—R[[[D$¦‰ibšp<@—Ï1ø\%Ý–nK·…–ñÛÆo¿ÈT`*0(eºvSÓRÓRÚÕlš ^(P x„G0ü&P'©“ÔIA-VϬžY=s¨5‰“Åd1Yzž ÙֈГZÃŽž„0ó\¨m0%›’MÉŽãí–ÚJ Úµø-~KH»¯Ý×îµØ‰NtJdgdgd'[®k2JŒ£^ÿc˜? ã3ÓÓ'¤jƒv× k.„¡Á¨]¥Mi j×ßæoó·•û8öqìãX Á•àJp©u-6JRãGs¸ÔÒ ü5=cðAíöJ½íî³î³îó[ ŽG/¼ðÂÅIm-¶[KðÚ‘kåZ¹¶3ð—$òRXÝÀ<=÷,ÀðÁ^h÷OÿI»ó—Î_:iP»ÊeŽ2G‡üL? !GÈr–„–…Õè¿ÏÒî<©Bª*º§sàœòœòœr¶?i0i0iÐC?ê^©WêµÅQ=ÕS=®ÉVÏLÿã×nY¨=ÿÂ:a°  Ê  m²8V+ŽH Sçâ=ñžx‘Ô.µKíÂÉ@ર“û¿ ‹þ-Ò)]¾ê~7_d" ´ ­Bë?34?A ;™®°¼Ï<ê‘·v¿…69ÂIEND®B`‚routino-3.2/web/www/routino/icons/limit-42.png 644 233 144 2430 13061246467 14517 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÍIDATHÇÍ–_HTYÇÏŒ[j3 îaØ´-VnP­õ#DÆš¡ýC&cYña±‡6é¡zpÇ$hA¶ (+¬Ý¤ŒÜÒ kÝh#¶i• uAƒf.¹©ø7ǹçžÏ>Ìܹwª}ô¾ ¿ß9¿ïç{ιç7W€Bˆ‰_Î%Î%Nw+Á±Ã±£û(xN{Nd^ʼd¼°bsÜœo¯ÂÒ·ó̼X ¬DjKj‹£ ×®ջV§}O>„ôÖôÖI*oUÞ¸Ùt³‰o@{¤=))+6ÇÍùf½©g×µÿá snϹí€Ô¹©s…€œÂœÂeÕñ -ƒâmÅÛ^¥¼JQN.\ªgóyc‹ÍñÄ|³ÞÔ3õMžÉûåËò %{Jö¤_Œ¼øeÊ6y±Và8Çq>®ÈrYNÔCõ°bsÜœoÖ›z¦¾É3ùq?âßgû½ÊÒÊÒ’†~Ù);1£Ô(%–P*Wy•ŒÏ<#/¹c!#z¿Þ«÷‚1­–ª¥(0êzbLËûò> L}“gò…ÝЊ ]Kׯ?‚^Ù+“œ"¦ÆN¦’™xñ‚z¬«Ç–!5¬†Õ0PK-µVžï8ÂP3,g9€qÒ8ÉTB±Èâ™ü¸Ÿ„±³¿@Õ±ªcÉu¯!¦ëÃW嫵j­ÅëÛÛ··o/tdwdwd[ùçcÏÇžAɆ ' ën×Ý®»¶ü¬žª§(t}D±ñ’ü¸Ÿ„±ß¿…æÑæÑdùWÌÈFÙH”=S ôÐC(¿ò+?x¥Wz%loÞÞ¼½úòûòûòažkžkž ü)þ 䔿”æ”Bhchch£íȟƪcÕD“¼$?îÇ)„»Ãݱö !|›}›ç+E«³ËÙ%RűAlBäŠ\‘+DMIMIM‰Ñ`4 ±èࢃ‹ ¡ jƒÚ žxvà™÷ä=yO 1?c~Æü !B›B›B›Dò¡ÎqÍqM¤&yI~Âdfdf›ð›°uíå ýþÀZa“¯É×䃅¯¾^ø•Ê@%x‡¼CÞ!Ð\šKsÁ“¶'mOÚ ¯=¯=¯*ô ½BU®ÊU¹íÝ«V»Õn{›1ùq?ÜîÕÚ:mm«¿”Y2ËŠ¯”])»R[Ã[Ã[ðJ®’«$xNyNyNA°-Ølƒ¬¬¬¨o¯o¯o‡‰ª‰ª‰*ÐczLÙŒu«sêœ-Nòã~ÞýŽ!/ËËD!~ƒd¬‘5–L£Ö¨5jPq£âFÅ hÙß²¿e?8W:W:WÂúë믯¿îÅîÅîÅÐ:Ò:Ò:bÕËk3E3Eï~ÇÞ}+'ôˆ±ÝÊO”GyÀè7ú~˜ŠNE§¢0úrôåèKx{áí…·`°p°p°ÂwÂwÂw r>r>r¦ƒÓG§Zzü¤ŸÑÏ|ðV¾§aì3ö1ÅL"3D„0É$“€B¡€1ìGe=Qs_&F Ù?ÔÇþGç#`u~Žq˜ÃÀg‰ÆYGu šÕUuÔoªSu‚jQݪEƒ“cÄ@öȈ+½·óÏÚÿÊYûu1k¿Çfçì?*Ûmä–k%ÔIEND®B`‚routino-3.2/web/www/routino/icons/limit-5.8.png 644 233 144 2562 13061246471 14605 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü'IDATHÇÍ–mHTYÇŸË—’L32R²–ÚX1vzaA)s“"³˜BPÂÄÈa‰ ü²-¹AEPF®Ei/Ø–Ø›ÅVVØæË¦ Y›;6®ˆŒ99sïœß~˜{œik¿w>ÜËóœçùÿÿÜsÎÿ™i½ìiö4ûŒPl/çc×Å®ûâ—P\k‚m³mó?@BMB @â¹ÄsÁÞp¬çu}d¿H?’Oçe¦„1Wb®Ør¬x?lËÜ–;;yqMqMï ØÙ¼³àZõ¾÷c÷c€‘œ‘Çz^×ë~‰/ûÿÃ/SoM½e뇘è˜h˜Ÿ7?oáîPÁŸ ¡`CÁ€7Qo¢”Ì! žx•xñ¢Ç?±ž·êu¿ÆÓøšOó‡ô$¯I^#…E…EqgC ½¡2µ2Uóš€jª‰ÃkxÌb³˜ PÔlØ ëy]¯û5žÆ×|š?¤G>\Û£k1œSœS&=¢Í¬6«ÁüÑÿÊÿŠ€¹ÄÜbnA™åævs;ð9ÈG#8|| Æksš9 ¥¢ £‚˜ƒæ ðÞÂWÎgŒxtmÄRŠˆ,9qî8·w Á¾@_`=Á¥Á¥Œã™Ì)”õTÀ8㌇)S™Êp€JÒJ+lî5÷Nv¬Ç×7Ö7“ü–KXmìÚ·kp ø5WW€QbTU¨«eW‹¯ÃÉ­'·žÜ §§§0??ÿñë¨ë¨ë¨ƒ#G:tÂóåÏ3Ÿg†õ«;¦@à×|¿¥Çöû÷pyôò(¨»ªÌ˜ðüì9æ9)ËR–¥,ƒÂg…Ï ŸAqCqCq ôôô‡µÖ·Ö·ÖCòªäUÉ« $¿$¿$R¦>L}í×Ú/¶_œ,Ÿ^Ô|!~­Ç.2ãÞŒ{ŽoDÖä®ÉQ‰ˆØÎZ+ó¤øIù“rïjïjïj©”J©Ùؾ±}c»È¼ôyéóÒer¨fÕ¬šEâããEò]ù®|—ÈÜûsïϽ/âóùð1Y#×5_ˆ_뱋DD!2õúÔë"¶ÖIÇ“N$)ê.ê.ê)p¸ \"{2ödìÉiIiIiI ªªª™-³e¶ˆÔçÖçÖ犌ŒŽŒŽŒŠÌº1ëæ¬›áziÐ|!~­Ç.¼¼aë16›DäoIÖ}îNw‡»Cd±ÀX`ˆìpîpîpФu¥u¥u‰¸ûÝýîþ0ϥ×_:,’íËöeûDîN¿;ýît‘èªèªè*‘§cO½O½ázJ5ŸÅ¯õ|´Çlî±Þ_{Ï÷ž‡Eµ‹jÕBB^B^BTÕUÕUÕÇåqy\µ8kqÖbh;Õvªí8z=ŽH<“x&ñ ”——ƒ?Ûïð;Ô5‡ ¾ýôûøTb’£Ñh Ÿ"Ž?ËŸCö!ûÔ õB½uA]P`xùðòáåÀmns&\® xÞzÞzÞ‚úR¥«ôËé7ºî¾OŸÊóöô„}LUoŒ7Œ«:õH=Šð«U£j€l²ÉŽÈ;”C9@5©&Õ‘Ÿ¦Vª•ÀWæ!óP„½ï{×÷î},Âù±œØ°œ³Çìv›f'õ›Tƒ(îÐB ð.ôoT¯ÕkõðY†»‹2Ê@ÝWåAÑL &³ËìLïŒuÆ~Òù?Ûåg{»ølïcŸç ö_° Å2ß}µSIEND®B`‚routino-3.2/web/www/routino/icons/limit-0.1.png 644 233 144 2453 13061246471 14570 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜàIDATHÇÍV]HTi~fÜãhšÚ¦]D"´HCCᦠ»hÖØf0I­`jP,,n—ÛBWÛÅ.eý ,k 4XÚ…,’FA±é21Ó®YÎ ±ƒ3êx:?ß³g¾sN»ì¥ßÍáý{žçœï{ßó”åž ½•ÞJo‰e{;AsAóg¿XöUƒôñù½—,½Tz‰$×ÝZwË|éØ2.óÝõ€ƒïæ“~”Áqø}ƒžÆœ}žlÛÖ¶­ Â²˜ Ã…á%ìê"É;ýwúy†œ{<÷˜$S©FÒ±e\æËz‰çÆÇùð¤2¢ŒxfH_¾/ «öVíÝüµ•ðÇf²å`ËA’ŒçÅó„—$Iã/’Å,$3ÌP®y—-ã¹|Y/ñ$¾ä“ü–å å Ùz¬õXáM«àåÏäÙMg7I>-Lò/°˜Ô3z†$ãÆqª¤˜$I=¤c˸̗õOâK>ÉoéÁ‡{{qò…|$IR{Dš¡‘âKý†~ƒš>kEâqFœ¡³–¹Ìe’i.pÁq› æió4…ø^Oè j¤Yf–‘LKüPA¨@ ¼¸Çµ•àÿ‰,œ+œË|B5¶[²qp—qݸÎe~Á.v¹„dä!â!~´ŒicÚ˜&EXÜ·]ŒÙj¶rÙÆg̈¤ÍŸÓ“võ!yêÜ©sö{Öˆ;Z¿ÖoÉØTìYìyY¹¬\VÈ™ÌLfÆ9[3bFÌb\Œ‹qÇ?Ñ7Ñ7ÑG¾þôuÑë"']ŒkÃÚ°Ãçð[zržK, ,âIŠŽ\…:ÿÕ|h>DÖ„kÂ5arûØö±ícäu‹ºE%S½©ÞTïÇ_lpÃà†Á ¤2¤ )CäÀ¾}û\_´QUg©ætvH~©Ç ”<(yðy=ÐÐÔЈÀs3·Ó¾‘Ñ‘‡#ߨoÔ7 LîžÜ=¹X__†ãÃñá8ì¥wêz'àI{Òž4Pq¥âJÅ@4‰&Ñää¡$¯6¯>ËðÜ”üRÈkÉkaPî*w,’6QL¥¿Š#ő∠7Z-‰Ùîlw¶Ûñ‹­b«Ø „ÔRÀR`)°dSÙT6å–ÅFl´­¤ÍŸÓãÌ{æ=OÐë‡%¬\VT=­zRõxçççõ‰úD=ð6ÿmþÛ| º»º»ºH*I%©b½X/Ö»„N‰)1 †b.a¢ˆÚV¹ä—z¼@¦1ÓøÛS`|l| ð¶ObؘüÖ$6ìÉ?iL’6+Ì jâ¹ÈŠ,å}Þ'¹dýEB$D‚ä,ßðKG9wq¿3âFœš5zåÎüçä_µÿÊU{»Xµ÷1ëÆ¸Ún°oþŸÏ¼:IEND®B`‚routino-3.2/web/www/routino/icons/limit-17.1.png 644 233 144 2637 13061246472 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜTIDATHÇÍV[hTW]÷N^ó¨4ƒB#!ÂI 2Í$©DM%†Ú¦5b©_-RÅ*~ˆúÄJ‰J ‚©1¾bQ±_)¶fì¨ilŒÑ6’8ך1sï9«3gîÔâGÿÜ?ÃÚµöÜ}Ͼ$àØ/H}¾@ÏŠbý3ÛŸV™Vù~W²Hm•¶ê×f2û@ö’œÛ1·Cl¬â*?±°ùõ”ïÀv¤žH=¡ycø;rÍâ5‹Ó\Q¼×O:{œ=›ä罟÷’äÉ#'ð râÆÄ ’œòNyI«¸ÊWõŠ/‘ß½¦Éç’Ïi£djJj @æùò|ù_Fîç“+W¬\A’R'IÒú‹d3¤—¤AƒÊ&°ŠÇòU½âSüJOéGû™S–SÕUäl:ɯr¿ÊUz‘’»¹›¤i˜IZõV=_‘Ò/ý$IicWùª^ñ)~¥§ô£ýàß³ÝWN£&R‰7t]φgäì·ò­|F˜É–Pš›Óæ4i5Xë¬u¤¥[º¥“òÙ-»iÛ#’¤$Å'âFD™¹ÓÜIÊ­Q~²6­6äDL?>J ZHçoÎߌ$ò^ù½rÒºO’¬’=æKó%_Æ… Nr’o6AAñ_·5bX#¤ì±n[·ã|U4‚‚HÒi8 #)ÚXAKìIºJ6}Ýô5)/‘¤(T„ýóúö/¤¿8Þ7ÞG>Nzœô8‰lÙÓ²§eÙ±¾c}Çz²ónçÝλäÈ©‘S#§ú¬õ¢ÞÆþƒþ^/åïïÞK¾—Ï*”¿l¨ÞP­F{誎>(96Ëã´rЊ»]ÇûŽ÷avÙýe×–]ƒ6tkhph˜òLy¦<@×L×L× plï±½Çö 7n6Ü=(zP„¸iO´'Ú {^÷¼îy@ù{å3å3Ðn}pkìÖfcYŲuiÆÒ UUrZ‡žµ%kKÑl(.˜Z;þtd;²‘:Íüç NÃi8÷e÷e÷e``ÇÀŽ@Í`Í`Í Ð8Õ8Õ8TäUäUä¦0næfn´ÒB€ë{×a×a@ú´MÚ&¤ÆkÇ O‰§²~Êú©h ȹ™s3Å099>9NZeñcO’ô¹}nŸ›l=Úz´õ¨=’‰ÀD`"@ºï¸ï¸ï+++v\VÊJYIZËcyl¿¯ÔWê+%Û¾imlm´×ŒµúiéÓRRõ£CŠ^Ñ« æ*s€@Žz¨2]:¥ºÐ…n¨«®«®«pµ»Ú]íÀ"ï"ï"/`˜f0ºkt×è.@dŠL‘i×É_ämy@çq>îΩŠT€8#ÎhÃ:tc¹±üç ÿRÿ% €±‚Ù9ŸÎY;g-r6ålÊY[À_ì/öÕ…Õ…Õ…¶ÿyÎóœç9@m¤6RBCCíxúÁô}éû€ä G¾#_½clćþt:^Ãûó@â©ÜÞ´äYu*Å~±Ÿ •†V‡VS†‡ÃCá!{$Ó[§·No%ùáÜp®íRH!ÉgmÏÚžµ‘ÑwÍŽ‡†¼!/å«Ô‘ñ}) ùcSIS‰}*¡öéœpNIdÐ Zqž*R4ˆ†„=F¾â«ÔÌf6ó˜Ì—ù {ŒÁëÁëoÜc ›ß¬uÔ:Iä:]fÐ ’ÜnZ£TÿQÒI$›¹ÛtÿàC>$å9&ÇHŽÅò)6ŠŒ0Ǫ³êH~ãW›?üúæ{¿•oííâ­½½7Øž§ÅÒšIEND®B`‚routino-3.2/web/www/routino/icons/limit-122.png 644 233 144 2675 13061246470 14603 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜrIDATHÇÍ–mhTWÇŸdL2ã$q²ùbKhVJµ†®_"e fÄ´Ö’Òb(E‰‚]—m±R0jëº/„"‹"˜¤lØ ub¥ø’ÉÔ‰ªILIM”‰Ž³bt’NjœÜ;çüöÃääή»_ö“÷Ëåyûÿÿçœû<÷ˆˆˆoé-ÿlþ³ù¥Y;ÿ·Žßýšûµ_™µOf ïí¼·h†U'Vð·ûÛÕŽmâ&?·^ÄÁÏå3~ñ‰ã( …ò‚Kv+¼SõN•ûWYûOðœõœýņ½_ïýà«Î¯:ù=$ƒÉ`2Žmâ&ßÔ¼\|iý~(8Wp.ïŠ@EmEmå‡Ù„Û•ðæo¾ð“ë'—΀Ì} ˜bR¤0ÏLŽmâKù¦Þà|Ãgø³zÊjÊjDà­wßz×s&[ðãßà£g>zÆðYgOù”b°Sv ³3³“4舎G8¶‰›|Soð ¾á3üY=òïgûç-Pï®w?XQP«Ô*P›¬/¬/°t³îÖÝh#Y¨a5 ö”=eOJ©95·¼ƒ¨q-ZÐöÔâÆÅXê±õÐz¸¼à(éíövІ_r½ð9Ê÷ÄS+`RMªeÜm™˜°<Ò]zD8„zFÏè •VZ?½ôÒ jA-¨àôГ?¬^T/òH§³øpë¹[Ï<1O,µÂèYvò;hlilY^çoô€Õgõ9:"ˆ´FZ!V+‹•9<£WG¯Ž^…¶Cm‡ÚÁK7.ݸ”??z~ô<´ý±íHÛ»06>6îì¸eù°››ÌÑžünIØõƒ u_辜Ð{@%U’t¨É;ƒ›;Ü‘"ù§ÌÉœH™¿Ì_æq­u­u­™n˜n˜nÙß±¿c‡Hÿ–þ-ý[D|)_Ê—é;Üw¸ï°HÓPÓPÓH¿¯ß×ïñ–x˽å"#›ÆöŽí•¢ì•w†O^¹üÊe‘e=à/ñ—¨q˜‰ÏĶÏÔÚ/Ù/9GR[][][ §&NMœšpü‘–HK¤ªªªªªª`׎];vípâƒSƒSƒS°¾c}ÇúØmï¶wÛ wªWÕ«9cfÿLýL==¥áÒ°¡ÀÌ6Ûoû»æA̓šÐu¥ëJ׈»ãî¸ f f fáØšckŽ­5¡&Ô\s_s_sƒ'åIyRp|óñÍÇ7Ã|ãüûóïƒmYÖ@NSü(JÑ“/’ ¦‚#C’?‹éÕ÷d.вh<+e¥¬‘âéâéâi‘h ˆDT@T@¤g´g´gT¤²®²®²N¤ù@óæ"Þaï°wX$ä ùB>‘Õ}«C«C"}©Þë½× >ï)ûò·—¿YÖ󿺒sv·Ýít圚[˜[€Eï¢wÑ é}é}é}pOÝS÷ÄÆÆB¢=Ñžh‡ä@r 9÷oß¿}ÿ6ÄßßwOßýæî7èÇGæ?žÿ8‡ïïÏ7>ÿDW¾ð9xžDjLf&3ÎÕ x”³éiÓKÿߣ+uå2Þ6˜ŒNF!{èO̱ÿ2ù-ÈNþL,|™ƒ™ƒXü•0a4Ÿe«þRwé.ÐQÕQÐaݯû—VZë‡ú!ZG3%™,²“vø‹Á¯wÕ»€ÇOLþ§ö_ùÔÞ.žÚûØÓyƒýs¾!®Â5ø[IEND®B`‚routino-3.2/web/www/routino/icons/limit-10.1.png 644 233 144 2674 13061246471 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜqIDATHÇÍVkHTi~fÆ3£¢SÚX ÁÍÍšŠ¬H¢ ‡ÊkCiÖ‚‚è¦R,E—]l¡À?mý»à.$ëÖ@"©´`˜Ó…‰˜6c&k°¶qŽåLçò=ûcãH©[ê¶„I‡ÝaÈ¢uEëŠL& “›6lÚ@’[Ä&¬$IjïHæ0GxHÊ”i¬÷i¶ŸÊ7ê <ßà3ø“ý€tU¸*²zkõÖ¬‹É‚çmä‘Â#…ŸÒA²‰MÌ!UY•IRÛ¦mc‚~á'IZh!MÛˆùF½gà|²üwoO¯¥¼YÙ¬¤º¯W(’"‘â'5¨iD„X ¾ß’êˆ:¬“â 8(Ò\9Îq’±d>©ïÔwRÑ+Ô“êIRü’Ä'½™ÞL’£Sü©­” ´™Ì få òÅÚkImˆ$Y%þPÇÔ1~L.æ<Î#¹‚+¸"­‘JV²’äFnäF~±´WÚ+í):´€HáUQÝ Ý"É,9K–3’•6O}© wÉú£õGIÑK’úbÐÎßæo£xÙÿòöËÛ&Q°%Øl!ÏJg¥³–ÃrØü×(Â",¤èý¢ßôûÏù;ýÏx!½ ¯¾X<­«®«6¶öÂ]°fkû©öS)Ø]>W{O{?gÈ8@úF|#¾RoÐôrÁø‚ñã䢾E}‹úȹ‰¹‰¹ r¬q¬q¬ñË/æ›é›é›IJR»ÔN¶W^}sõ Ÿ¶¿m{Ûv£±Ç‡­°:9••£®b°b ,ñmšmù¥ùeùe@®+וëºguÏêž8::OÀð¹‘ÜHnèŠtEº"H-uºGÝXb–˜%œ/¸\pë,û,ûàHfY.bbõòÕËÀyÇy§¬ÜŠïlçmçé¤&© +Ѭµ+kWîwÄâ÷â÷â÷ñL<Ï€œœœ³gÐtɺɺÉ:Ó/æ‹ùb>àMxÞàþàþèþLŽMæOæ§Ò¢ˆÛ¯Ù¯€m“mÝV½Sï´ jZÀp|Ïw|(š¢)P( €·sÞÎy;x]þºüu90l¶Û’ú’ú’z *E¥¨ˆb†˜‘ÖèS!ô 'åvAUª”*Ðoê7-ƒVXå5òš'€þÞþ^%ÀÝSŸœ}Î> Þo·eCeCeCÀÒ¼¥yKó€Òe¥ËJ—µîZw­XR¸¤pI!P¬ V mB›ÐÌÆ²ÏeŸÎ> H•¶b[1>M½þn|ïÏög€ì‘=O¥Oåñúã$»Œ©ÔÏègÈØŠ˜7æ¥HdÄõ¸nþÌz³Þ¬7“ÑÁè`t;ıƒ«Ä*±ŠŒ¶F[£­¤×ãzܬ‹•Ä<1EÂ1¡L(æTòÏúåõËÓ§’)Í•3ÈÒR8UTô­úÖ4;ÄýÜOê².ëéò°Kì»Hâ!JG…JJ–“™Å¢8MǺºÿ¿:–¦üª×æµ™ÊÏ5¤†H×ÂZØT~vð:¯“â±${ÙË^’’g¥xÔ1ޤ”¿Ao B—¶EÛBò×Ï”?þ¹ò½gåW{»øjïc_ç ö_šOž wa 8IEND®B`‚routino-3.2/web/www/routino/icons/limit-27.1.png 644 233 144 2724 13061246473 14664 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷܉IDATHÇÍV[LTW]w(oFÄBü@%6FL±ˆÁ‰ƒ¤C0ãH}d0J(Jm4õÑHÒD¦‰ÆHÔIÄF°"Š¢±jÅŒAÔ4‘8fªÅA¬tFyÝÇYý.w _ýcÿÜì×Z;9g¯{@¦Ž~Ašfšfš¦}Ó×F<ª ª õTÐ?ª’Ò2iYg(þI&Ô&ÔjÃ×óz}h?`à‡òéqL…ˆ<yZ²Žú;É+2¢’‚þ>7}6úì…,o*o"ÉÆ_å·ä‹[/n‘d¿µßJ¾ž×ëõ~/;'ðdøÅð‹ÒS22"2 SòSò-›‚O,äÒÂ¥…$ù<ìy˜0‘$©¾"Ç8a%`€º½ñõüh½Þ¯ãéø:ŸÎœdâ¢ÄEéXåX}<Øà©#·ÏØ>Cç“Ï’ÜÃ=Œ#•€ IÕ¥º8L ·p“$%J¤áëy½^ï×ñt|OçÎcå췑˽˽¤ÖA’r«Ò!O“§‘bR¨R½œÁŠ¢ (¤Z¢ºT©šT“j"ÅÑ hØs’¤ µR­”²¶HÙ¥ì"ÅA|²8ª8Šä _?Ê? ­šŒD‰o«·•äN’¤y"ÜŽÜKŠ1"FBˆ8À_£Fÿ1µ[íV»IqVíP;Æ:ì x/{/“:p°´j'=z“ñëK×—Ž¡ö òÞ¶{ÛÈñÌÌÞ2ï:ï:Ò—êKõ¥’Õ•Õ•Õ•dmImIm Y÷¨îQÝ#²û\÷¹îs!sº4—æ2|÷w“»‰â¯‡?7øÄƒõŽõýhÞ4i}uï Í…fàÏMݹݹÒüœ7¹³sgc¤yEóÒæ¥œŸ:3œÀÇÇÐ\×\×\œtttkÚÖ´­iº2»2»21fRŸÔ'õ Ó¦7LlɶAÛ ¤;Ÿßé¹Óƒ‘ѪùâØÂ¸…qzWÖy̱5±5™Ù€­ÔV ô,ðlñl‘Žwtëõ­×ÙRÓRßR°“ìb‡b‡b‡€k¾k¾k>Àép:œ ¬¿¬¿¬X’²$eI  )š¢)7s37’_òK~ é—¤I'‘/m”6"rt°ãxŸ—•—SnL¹‘™ Ê Q QÚCQþÊþÊn¬ý­/Z-­2#5#5#•\;g휵sŒ#yý:ûu69×:×:×JzZ<-ž#/ D( Õ<5OÍ3âù9ù9ù9dÍÇÊŽ•pêW/s^æd‚9Á¬=4‰je±²Xz(ÕDÌ‹˜ÜÿƳͳ ‰¶ïmN›(),±—؃‡>xØ8¢úáúáúa ),),) H·¦[Ó­€’¦¤)iÀÓÝOw?Ý hfͬ™>ñ@tˆ^\Â¥±p"Ù.Û@» ]šÄÏ.}¸Ô~¸}óöM µäþìû³Y¦B~"?ÁHãüÆôÆt yVò¬äY€[q+nhokokoŠ"Š"Š" âw‰ïß%År±\,þ«þ«þ«F>æHÌþ˜ý@ø’0K˜E¿c,C‘;ÆkÀÚ~Ü7º•¬ØZ±•<Ü’¾ìÍíÍ%}n_—¯‹¢·¢·´·”¾2|eø é_í_í_Mº݃î-šÐù¦æMÍ›2x׌¼ÿ¿Õo¥Ž|/¿—­äï²6d[ ]7 Õ1]g(,Â2N©Æ[«XÅÿaãðìßD÷WßoãöååËËIQTfqGSãHñ›òVyK™§ØÉN Z8“3IVrw„ðþÍg|FŠ>Ñ#zHöŒ)…VA™‰êJu%ÉŸ&(ÿÐD埼ÿÊIûº˜´ï±Éù‚ý,~«Ðï=©IEND®B`‚routino-3.2/web/www/routino/icons/limit-38.9.png 644 233 144 3071 13061246474 14673 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜîIDATHÇÍ–ûOTéÆ¿Ãý2¬ @:‘K„E'âZ\R/qw3$¥n$XXÁ’c“6ýe»Ý4ÑD¨˜¦ÛD\jS#!i»dY—,–¸i *0¤ 8,—˜°E.Ë%2BæÌ¼Ÿþ0ñ/ðýåäù^žç›óž÷9¯€ˆˆÄn<‚’ƒ’ƒÞ à r#q$âHú¿øªLÇMLJÏÖ+[®Ä5Æ5úXÏëõ›ûE þÍzz\bÅ„·„·˜r6p5œxçÄ; \Û ‘­‘­+T|[ñ-À7Mß4ñ[˜î™îXÊYÊëy½^ï×ù6óKõkú"ÚÚnš„ð°ð0HÍMÍMû] `, ò?ÌÿàYð³`¾3f•¸q£¯ùMXÏoÔëý:ŸÎ¯ëéúyâmñ6(()(‰¼hxôOø4éÓ$]ÏÛ \âfÐÜšÀWê+ŪSu`ÂÖóz½Þ¯óéüºž®˜ÇØÊU‘ºŸCáhá(øç¼NmÜ›âM¯÷‰÷ ÞI•Â?êí‰6¡M€ Sa* c¹YdñR~¯– %àÕ½‰ÞDP¿ðC¡»Ð ,êúúVNˆˆX/C¤;Òí¡jÔ9êîpT¶Êf•;Ü㨭j«Ú Üà76 RGu@QDaåVnå.p‰Kʦl¬R¶ÁdCO× Ì#̈ˆ\íâ­ÊÓ•§u:֣ܡ¶¡6¨ûk]m]-ªÿiÿdÿ¤!èªqÕ¸j ¶«¶«¶ F²G²G²¼Ð?è4ðuÈ:d…úŸÕgÔg ÆÇ~¸òÃCOWî¬Ü©oíÕ.ñ·Šˆ<ü=´VµVÁãøÅg‹ÏÔ™­·¼½åm<……Û ·ƒµÏÚgíƒêäêäêdHu¥ºR]p²ÿdÿÉ~HêNêNꆭZ´ [‡­ÃVH‘þ"ý.9œ8²vìéÞÓçG·¯ÓשÎÀ×…_‚* ÌdjŽIˆIØw@ÄÖ`kñ%-/›®ÿIjvÖì”ðâœâ£ÅGE,Í–fK³Èjûjûj»Hô@ô@ô€ˆ=ÓžiϱôZz-½"+q+q+qòjõÔ÷Ô÷Ô‹$îJÜ•¸KÄÙìls¶‰„ÅD¼ñ®„ÿç—ÍŸ7nº.’?Ÿ?/¢îEMFMî;bú[ðTð™rÙÞÞ$»v8v8daûZÙÓ²§ÿ±õÔû§Þ™µÌZf-"šE³h‘mËÛ–·-‹4µ5µ5µ‰,M/M/M‹$L8˜pÐÌžbO±§ˆ4”5”5”‰ä¥ç¥ç¥‹|ÿ›Á¢Á"‘ÐôÐÐY YYx&‚÷ï!S|¿ˆ‹S-à±ylð¯ã-¥-¥°ïTVFV†±%¹çrÏåž3ìøÂ w.Ü1ò»;vwìî€k¯]¼v<Ãã€á¢á¢á"(v;‹àp9:ÂỎC‰CÐãèû¢ï €åñåqðçšCÍ¡ªEÔuýûjþ«yXîPgrþñÁ{¼‡Ç|Ú|Â|ÊëËëËë¡ÿPÿ¡þC°w}ïúÞuˆuźb]P1R1R1Ïo?¿ýü6ì·í·í·ÁdÁdÁdK=–z,’“ÌIføƒó“ÊO*ñlœÝ3”ùÑ——óˆ~ è=6Þ8%Úµ¥µ%˜ûßÜwsß¡|vŸÝg7ÞÐÚýµûk÷anfnfnT£jT nª›ê&,d-d-dtÐëÇÖóÖó`æùÌË™—(õ½£Å==8ûÙÙÏ à§W»„®×|,4à+ê¯|̮쬪¿¨ÕþR©¿ÔcõX=ÞäWQ*JEi¤‘¶Éß~J&™ ~¥ªT€Ê?ŪÊÜàÿóèòè2@älä¬;„)ÝÇô¯Æ£;oQHQÌÐëTÿÕµEàï¾)ß”áü|L % î©»ê.p‹[ÜVxÉKPOÔ˜Ö7ê¾1ß^Õ£Íh3@¯îüEÁEÁ€÷uçsÿ•oìíâ½½™7ØÿŸ£é!7V¿JIEND®B`‚routino-3.2/web/www/routino/icons/limit-12.1.png 644 233 144 2664 13061246472 14660 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜiIDATHÇÍV]H”Y~fÆ¿±Év*éÁòBú¹0p š©ÅØ(t·@%ÒM¥X¢¿]rI¡]hÓˆp«…Rʼ«ÑÍmÉ ¦Ì­‹˜r1´3swHrÚï;çÙ‹™3ßl°7{Õ{3¼ÏóÎy9Ïw@2c¿ ÍKÍKÍQßü¥OÛ˜¶qÙå¨F'M[M[ÿ8BÎ;=ï4IÚ/Ø/ˆ§†¯òª>±0ðùT™0©©&W̯'¿Èû"/m~ÔÿÑGZ¯Z¯þ­‘»¼»¼$y¥õJ+÷÷'î“ä”kÊE¾Ê«zÕ¯ðñQÿ?@&_O¾n%SSRS2Û“íÉù*Zð<‡Ü¼ió&’|iyi‘f’$õ¿HÚh“.’!†¨,˜à«|¬^õ+<…¯øtŽ"G@nÙ¾e»õ|´áé%òà’ƒK_ä*Éc’¤‰&ÒðU^Õ«~…§ðŸâ΃ïö„›¡’HI$>PŸ(Œ$E’HyDÑF¨2RøÅCñÔFµm„aaŽÜÛh=)vŠŒˆ"­Ak å·Q|²4­4äDŒ?¾Ê¬8EZ‡¬C¡$ò™û™›ÔŸ“$‹e›Ô‚|¯ødPŽËq’õ¬g} l`)Ã2,Œ™Ðz€”Wõ'ú“8^1CÃ7†o¤5d …’¢ƒ­8;©3wÉšC5‡HÙK’b•ôýàkö5SÌ@¦Aô¸ÿqÿã~òdÓɦ“MäÀÍ›7¼¼&¯Ék¤¼%oÉ[FÜ×ìóú¼”#Ÿµ¬³¬#»\]®.H ¤RH«Óê´:I÷2÷2÷22»$»$»„ô›ýf¿9ᨲ˜Å,²cAÇ‚Žd²7¹=¹lßpñõÅלQ|úžKå—ÊÕ`˜aÎ8œqxõZT  LÓyüi™g™‡T‡Ý±È±°äZr-¹ÀXÅXÅX°·eoËÞ ÷Eï‹ÞÀœ…sÎYø3üþ ÄM[¬-Ö¦iÓ´i˜ÿÓü–ù-€ô˜v›v#5Ze:w…ù…ùq;ãöêµ ísísÅ Ž“zQüÚ“$=ùž|O>yvèìÐÙ¡„•Ôùê|udÞš¼5ykÈÚm‡FÊ2Y&ËŒ:­[ëÖº ßSà)ð?s®ê\•!3úç““¤šÇ )¼Âk´­ÚV)Güÿªõh=€-h Ú‚À+ë+ë++àÞïÞïÞ”ÛËíåv ¹°¹°¹ˆFsGsGs¹Oî“ûŒ”ò‰|`=艇Ð"Å‘bÝ¢Û4h†9´>´Þÿ¸Ó{§Àr`U¬a6éáô0`³ÙÆ€>gŸ³Ï §p 'ÐYÝYÝY d?È~ýhkjkjk*½•ÞJ/ð¦ñMã›Fc°ôæôé'€ä –KfcÚP…Ï|é¾t¹B.ÿÃÄ[YWSGòu+E£h$ߊé¬é,ÊÙ9³I³IäLíLíL-9)&Ť Ç;Ç;Ç;ɉ̉̉Lòý½÷÷Þß#§VN­œZIŠVÑ*ZUN/ŸvM»(gRßEÞÅõR¬âo5ù5ù‰·’q›°N„’Èa}Xã“¢BT:FrFÝ¥ÿg2Gæ$è‡û†ûþSÇ”_+µ”ZH¤™Ú 6H²YëaFø=½ôRÊ˲U¶’òwÙ/ûIÙ%»dɯyI©Ç„6†µ¢–:ômú6’ßÅð•ò‡?Tþ÷[ùѾ.>Ú÷ØÇù‚ý¦ÏÖD„9=$IEND®B`‚routino-3.2/web/www/routino/icons/limit-137.png 644 233 144 2575 13061246470 14610 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü2IDATHÇÍ–ëKÔYÇ—Yg6ÓÌí…”ÕvÙº¬bS°a¤V­/2­ËVPDmRKj"nAv™ØAE,¢&ÌŒéÅÒV‚—]ÛȲMÃÆa½ý.ç³/fÎü¦Ýþ€Î›™çr¾ßï¹<ÏïB1%ü+ vFìŒXgÈŽ-¶üö ö ³o„ìZbòbò:ŽBRuR5@r]rÙmÙ*®ò£ç aáGó)¿˜",G‚7Á“¶Ë`ÛÂm íÓBöÙ6p4:ÿÑ¡¤©¤  áJÃ~€þGý†²‡²Á²U\å«ù /_”ý‡_°Ý²ÝŠù ¾HøB˜éšéÊø1”ðGlÚ¸i#@_\_œŒcH$QfA‚¨1e«x8_ÍWx _ñ)þ©Y©YBÀæí›·;.…&t»á`úÁtŧ5§9M"èA=`ì4v2²M¶C X¶Š«|5_á)|ŧøCzÄÇgûó:Øbßb†4?˜If˜ßjWµ«hò¨ôHRI6ÿ6ßšoAo×ÛõvN9YNù§|.ŸƒnËåHãû‰Ò‰R4#N[§­yCáhЯøE´ Ì*LÇkÇë`<ô˜=fäh¾3zµUÚ*F䯲Svbýìg?ÐJ+­Qþ *¨RI%5Ê?Ê(£2Cf0¢ð¡ÇßãpÁ`¼ÒVûöÛ{,²_ËÚMífV¶•·•µ•AoJoJoŠÅ×eë²uÙàlÆÙŒ³ÐyªóTç)èËéËéËªæªæªf¨Ë¯ÛX·ÜÝî ;ˆìmêq÷¸£ø÷,س@míð°'øÍãóø€jYæ9ĸ7Í›èM„¸`\0.K—4.¡ãCÇ‡Žƒó±ó±ó1ÂÜ•sWÎ] åyåyåyàzêzêz Yû²öeíqIT‹jð¥Ý¾sûãáu™_]·_·+aOp¶:[¥—–77k'd‚ñÄx^Ókx ˜~oú½é÷ ¾¢¾¢¾üþ?TvTvTv@CICIC ,=·ôÜÒsÐbk±µØ,¼óœç<°ûäî»ODñ‡ÿüÞ/ú(=’''O6»`ðõàk«ì —¾X_l¸2]™®L¸h¿h¿h·üÕÕÕïÍ÷æ{!ýLú™ô3Ð~¸ýpûa™32gdÌ/Ÿ_>¿ºïwßï¾%Ìn3ƒ/_€Ò+„Ùl6Çt ©çê¹BTa¯Ä«ˆ-´­F«"ÅâNq á›å›å›%Äšâ5ÅkŠ…hØÚ°µa«ɣɣɣBô}FŸ!D}i}i}©SK§–N-b^ö¼ìyÙBÈ ¦Ót s%̧çëùBDôD'r”²È88‘6‘¦îäÖäÖäÖÀ5ß5ß5Ÿµâµ“ÖNZ; œëëëaGåŽÊ•VßG@DD²æ~ì+ì+쮸mÿØògTgT¿ò}Ü>e€m‹mË­/`ÑÉE'²½Ù^óŽeë¸ÎO®±ð“ù´_²Är¤ûÓý6÷œ}v¼±ãŒ%qûø8/8/—¯ë5žÆ×|š?®G ·"·B6¸ùCç™xÁvhÊoÊ×|Ñ ÀŽ ±P,`ÔõD@ ¨lØÀ²u\çëz§ñ5Ÿæë‘ùgÛ\ Û2¶eÏ¢C`.2Y==KT5)¯ò¢´dµ]mU[!v-v-v ̈6ÉÄUå@Åþ˜--%ªQ¢‰htˆÈÖØÖ 4¿$ Zõ5¦ó¡óa(îšwÍDe­1-‹–1­|jDX„,e)KA=QOÔ“$ÿ8㌃ò(ògø–o“âÍæ[æ[L³8ŽÀŒóžó^(Uë™vêgðôLôù¦ê^Š^JÀ©o¾ø ƺƺƺ,žÑ¬Ñ¬Ñ,hnonon‡áúáúáz+~}ïõ½×÷Âñ_÷ï‡Ûknoº½)iÇ»â|Ìzö{öë£=õóœ°áÏùÍ×ëëN¨Ý`N™SDü/ù3ý™êMõ¦zÁßèoô7ZÄ¥¶R[© ª‚UÁª ÔöÔöÔöÀé§Oœ>Ë»—w/ï†Ý;»wvCþ`~O~\ûájÝÕ:"sòv›ƒç:ÏujaßÛE\}®¾’õò¼|]ù:ùTDÄv† îs_Òå/y*OErä,ÈY ’y%óJæ‘^³×ì5EûûûDr‹s‹s‹E6l,ØX ’}4ûhöQÇ1Ç1Ç1‘šµ5kkÖŠ,ë_vuÙU‘™p$/’'éñ?”팴”O”Oˆh=v‘”º”:VË;ŽçŽç¢×µ‘ÝìÙnßž²=EdõØê±Õc"333"ê¼:¯Î‹äçç‹”¯)_S¾F¤e¨e¨eH¤«­«­«M¤°°°°°PÄ[í­öV‹L= M…Dÿ´øÎâ;ŸÍëØìØ,’Ю>WŸòcN–L–XGdÔÆ²cÙ–]±²beÅJð÷ø{ü=083838%­%­%­V^å­Ê[•·¬»~èò¡Ë‡.[ñâGÅÁâ ´¾ßâjq%ñyþüîÏï@뱋„Ü!÷ßÄÞß×ß§`¼®ÒTšÌj+Í•æJ™L¦"œœœ"EeEeEe"Îþ©1OÌÃ4ʼn9¶*° ÿçûÉÕ“ß7Æ%Æ~c?QâÃgÍ!ÎÑN;¨A5¨³´Ñ6¯/ù¥ŒWW‰Òa4MI“ߨ–º-UïÔ¼ÉÿÂ~+_Ø×Å û{1_°ÿbPÒ›ØFIEND®B`‚routino-3.2/web/www/routino/icons/limit-0.3.png 644 233 144 2566 13061246471 14577 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü+IDATHÇÍ–]H”YÇŸqGÓ±&ˆ>°Ú‹’(ú‚Ø¥(ËÆ¨(…Á‚$)6¤bÛ¥í"£. ‚bm)è" kéƒBËÖX$BúÚZBÊRk*V]%*§0Kç=ïùíÅÌ™wúØûÎÍðÎóüÿÿáœçy€ˆˆŒˆÿ ¤LH™’Ã)ß;ñô‚ô‚oNÇð1®"WÑ£Ý0üÈð##OŒµN­#úº¾€ 8Øì›|Soø ¿Ñ3ú1?òñÙVäCÐô@EUôwV¥UIÔúWeªL´þIoÕ[qV/½ô:аßÙïÀúGy•m?°f[³‰‚êPÀPœ_Ó‚iÆ`E~ÒQŠˆLý 2^d¼èK%úúà_Îu\§ŸoÙĦ$#€å,gyR¼œrÊFiLŠÿÊU®~µ]m§?Á?zz ý¸Ÿ¸±c7 lOÙžÄÿ©k¢ÕÑê­= Ý Ýƒ£ž£ž£hïkïkwîv‡Ýaw8¸-¿-¿-*ª+ª+ª¡éySkS«Ã§_GŸGŸïbzŽ~ÌOÜXÓÏp¦÷L/è[zcœ Ò³¾'Ø„™µ3kgÖÂŒk3®Í¸S"S"S"î÷‡ûCÏŠž=+‚QGuŠÇ+cõX=VÃ1w²ïd'Ò#ön£Ó7~RD²³gÍY´dÑ}XDÄU?io}Cýú"Þoƒ·A¤yqóâæÅ"¾._—¯K¤~býÄú‰’XCeCeCe"ûR÷¥îKY³lͲ5ËDÆsxÌa‘!5”:”šH÷Ê_F/¦oü¤Š¸W¹W1MÄóØóØ%Ò+""áx¡ß YO­§"Y+³Vf­t d?É~’ýDd°j°j°Ê‰çžÌ=™{R$§*§*§J¤ôféÍÒ›"=çzÎõœñ)Ÿöi'_~4zž:OøEܹî\¦¥ˆØ—íË®VkµµZÄ3æ7u9çÜ͹+òrêË©/§ŠtÏëž×=O¤3­3­3Md’{’{’[D—è]"rªîTÝ©:‘…sÎY8G¤&P¨ ˆøïûïûï‹<<óðôÃÓŽ/ν˜~ÂϧwŒ#ñ3¿¬‚*HÄ\†õyëóÖçAæ–Ì-™[ ¼»¼»¼Þ,x³à͘«æª¹ Ú‡µkà+ôú ¡¤¥¤¥¤Î TTè³ú,f}ùŽ}Þ•Ñx—(ë­õб.²ŸÛ­v+„[íáVÐ¥ºT—‚ž¯çëùÞÞÞP@X¬ ÖxuñÕÅWAU‡Ô!§+ydݶn;Sàº2iŽECƒ¡Á¤9¶]=Pè·ûô=Áé>½QoÔÍlfsÒ¼½KïÒ»’ò—èmzðÚ«ö&ͱA37¿8Ç>šüéÁt@%&³jþ°GÛ£‰ê&= Ð\å W€±o£îÔºˆ0È pˆý§îÔh*•Vš(¨ÕX†?®÷ùäÿj¿•_íëâ«}}/ØÿU¬Íòª=0zIEND®B`‚routino-3.2/web/www/routino/icons/marker-10-red.png 644 233 144 4070 13061246465 15425 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜíIDATXíWml“×>ï‡ÉÇBÂÒ¢p@”ñ™4ˆ$NÒ AM„ ¬hRS!!"ZRÜ¡¥-4eHUì ªtÐn +4¢P@e4H¨Ø.x ÂÁ!3Ø~ß÷>ûß÷}mñ¡i;ìçž{Îy|ÎsFl %˜¸(ÅâNq ÿŽ/dŒêÕ5ª«ì²*«²zåͦÙ4q³f’I&™c ³f¾ŸÇó|<b=qQ"3¿zª§zÑ•èÏ™.wÉ]r—+(l¶[t"YÙCÙCÙCøëò›Ëo.¿ Tß©¾S}¨*ª*ª*20÷óý<žçãùy½gó!qa"žü©8,‹Ã¾Ù¼Cê&ÔM¨Sßnëmëmëeé¡û¡û¡û$HÆC<ÄC>øàt÷óý<žçãùëMþôÙüÈ:Zô‹~ÑïûOPt®è\Ñ9e¾'æ‰ybð n¬€°(j£Ú¨6êuŽ:P+Ô µÂ„ã~¾ŸÇó|<¿N8¡¾u´NMp .ÁE$ï–w˻ۯò{³½ÙÞ¬TèÄÞaØ„”veP˜O[¬-Õòµ|¦a&Õkæ‹]Ž]”öÈ/‘_ö+gåñmöfûûö÷• ^ŸóáüÈrÛrÛr{Éïùk“µÉÚĦx¼w½wñ ž'¤îU+ÕJ`{Ø!¶ƒí€Ùîáž²zVp ”FLÝ»»¨ÃwÀ«x<°6Yßµ¾Ë¦p>:?y“¼IÞta7w´Ö¶Ö¶Ö² ñaÅ¥¸°6 Âs{«½Õpî¥s/™)h·µÛf|ãóŸÀ‘¥G–ˆœ_}~µáU\±h,ªÃpkmëªÖUlƒÞÙ~ÄÙùÙùÙùh–Ë‚eFäá:®EQ' ½9ô&Ørl9Pn-·â vzÿéý IE0&gL0rom+ßV /!H –s‚9çÃùq¢{*÷Uî«Ügü2ÕÝÝ À—¾ÞøõFÈ|%óSATM­šú$¢ÅëŠ×€í3Ûgæõ#‡6Å|þa@õ$‡9ÎOŒ©é–RK©¥T?c)´^|Y|™ˆÆò¥…óÎ'"ºuõÖU"¢E-‹Zˆˆ1óÍêõ}_ò} Qõ–ê-få‹•/š`êÅÌ‹™DôEÂõ“bé´tZ:õ#?=N'ü½þ^/y"bDŒˆ$IeY– ´ŽÖÑ:"Î<˜yˆh,Æ‚ˆ(­;­›ˆˆY0¡È—ô%‘Ö¢µþhôGf·ì“}Dߣ—£—‰Ä“#Dâ«RÀð|äáüH¬+Ċؽx‹›Ö­?Zo’@ª:CÊÊæÃTv²ì$Ø^·½ž0µŒp¤¿•þ|âúÄeVá¯é¿¦£W»÷º÷Áo9=tzHÿ( …BaìIs¥¹ÒÜíN~Êò&åMÊ›¤Nö®ð®ð®0®Vû8ö±© {M{Mûuûõ'it‰m‰ æOš?Éü;>ØüÁfKSý©~è×?‘0ÔêN ûÌk3¯iú åH9RÎá”QšQšQJ$Ÿ•ÏÊg;üú…_e¯²W© ú¥ãˆ~ý¸yÁòWË_›ÇæyÑ+'®œ€ †@h¬g¬Àq¢8Ð7545€ñÝu—Þøê¯´°Np½´^ZÿÏ•#8-@‰6á ¥ÐRh)ôý™8ŽFV¢Oî·#ý¾­þ¶@è̬3³ÌµãÚqŒÜùð·Ðk‹jíùŸÎÿdô÷Øð±KÇ.a©þ„:E§è|\&ŒÆ ãf¶%”.ëçk°FX³øÐ!t\+ÚŸÜ=îwÑOµAm0ú ‚A š¥Áö³ýâ/+a¬Ñ’¿Ãÿ‚ÿ /Õúƒõe“ÞÉ÷¤Ò‡]§VAT![ ®ÅTLÅò{ä"¹ˆ¤€oŸä ¬‡¬{¬{”,ï6o¯·×¬]Å¡8Ìão}8ŽÝZ¿Ö°•±±ÆQ\}quýêzµç—ÊA9èÞ•»9wsîf"Ñ.ÚE»p<ή–ÓüMüs¥tKº%ÝNMÙ:eë”­D–:K¥Î½K×n±½Ø^lÖ®æÐˆÀ 7Ü;«NS§©Ó -˜w`Þy¬„ç³dY²,YþÇ#Øšš8i¡;iô$$Áï±5uD»ÞãOÕn–’¥d„´»Ú]í®¡Å>ô¡p§õ¥õ¥õ±åº&3Ä 1cÕÎ$)Lâ—BÏ^$iwùó´«ô(=J¡ÜG¹r峆f ÍR§êZì”:¥Îp©Å¥—L0“žcÆžàiÚm±¶X[”,o‡·ÃÛ ‚"âL§§§ŒkG>$’õÅÿ’¤ý#©n|ÒŸG0ÙxÀª¸vÿò4íږٖٖÚu/p/p/À#~¦OB¨j„šÅÛˈƒIuú/íyÚ]$9%§äôÍá„kšjšjšØþ‚hA´ ª\ÓGRÀ1Ú©Ú)~íHÞ¤z)ô?Z²vw%bÛÏÂZa­° r*§rm†8^/ŽH 3ßå…óÂya"é‚tAº œŽ®LšÜÿͲôo¥TJ¥òÕD÷¶Z‘‰Ld€Ð-t Ýÿš8²þ;wÒdmWڮ¿Çq‡–}–}ÿù=¬º´êÀ˽ü‘q'‰ÍºÙ¿|½H’¹ž9/«%9aë²uYʸjJjJÒ²ãøÏ}`ï¶w?Ñ þËú/¾øø‹ù üÐÿC?ÀãòÇåÄfÝì7×›|Ëù¥ù}°~eýÊ2¶T[ªäUæUü6Þp·ª_¯~àþŠû+T è3@:éªÂ³Ë°YOô›ëM>“ßÔ3õã~²ÜYnØ{hï!{g|Á¿Â;Îwœ¦^¬8Ç9ÒA i!½V¯%ªOõ`ÁIlÖÍ~s½Égò›z¦~ÜOò(EDZ+À;æc æ×&by±<0¾=Œ=$–pªLËj³*RE`¸ —á"9æ™fúG¤Œ˜–­eÓæc9±P¿Žóƒ7ä ó¦¾y”ÿÙÒö=ZIÓ˜Ìü €_‚*Se,ržZ<À~ö³ÔMuSÝ\fh†f’PiJSp†sœPnåf‘7ü»z¦þí¸aJD¤ã™ o6¼iÒÛîT÷ ÷@ë_Z?hý5d ņb<7‡‡‡¡7·7·7w™!Q¢$‰‡· oÞvqÓÅM¨ñ»KKI=5ÞPÔPdmÇ 1ºED†~ÝMÝMð߬ùûó÷ÕÑŸüqÕ+«^!R“]ã¨q@®/×—ëƒè@t š̟ΟΟ†Š«W+®>o|ôÈè‘Ñ#P¸P¸P¸;í¬ÞY Ûò‹¿-þ–ÈLHïÓûÔQ¸â½âõFÜOŠårFvF¶k»ˆû}÷û"º3è ú,³Eg‹Äæ{ꟈ¬ë[×·®ODïÕ{õ^‘æšæšæ‘È`d02(²¦cMÇšyn X¬V‘œÍ9›s6‹ø/û{ü="©i¥i¥bûÇþËm—Û,"Õ³Õ³"ª÷¥‰—&\Û…ÙÕÑÕQc”wgOÌžH^ûðRh24 {.ì¹°çŸ.>]|Ž/>^ § Nœ‚Ú µj7@a[a[aŒß¿=~;¹c“õ“õ“õPÒXÒXÒ» vì.€ÔVk£µ>¹öÙúÏÖ3 †Ý°ƒfd82ƨè¿p¤:RUDÜ7üm_WmW-¸ŽlÛ´mSR ,¿,¿,÷ùÿ  Ž–¿ûjé«¥D2÷dVfVBÝHÝHÝ„agØ™4Üy«óVç-ðž÷ž÷ž€Ëír»ÜpÏvÏvÏUyUyUyàÌq¦;Óá„ÿ톷ˆ$®ÊQÞúôà§ö¸1oƒÇ²Že%o‰¶ýéã§áÑ7®<º‚ÒõA}T@TŒëÆuã:,m\Ú¸´¼ Þ/¨L•©2a®j®j® 衇ˆVE_‹¾S§ÂSa”ú^ËÐ2€þ¸k<Öñ<í¸!Üx&Ǭñ\Q'̱ƒê ‹ªBíU{'N–ísÌ1( &¼¬þsJ)õ+Õ¤šŒÆÕOü ŽìÓöéÐJ˜9f&ÄLÞ+¬ÎÆ“Y}­ÍkóÀ‡ú”>õ|òÓÄÎkYËZÀ@G5ßY¢‰þý®~—˜êצ´)`ÐLþ+¬bÏ&ÿ‹û­|a_/ì{ìÅ|ÁþÃ0Q*¶IEND®B`‚routino-3.2/web/www/routino/icons/marker-20-red.png 644 233 144 4244 13061246465 15431 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜYIDATXí—mL”WÇÏó2ò"-J5  nÔW%¢¢quFRSü€k[‰Y£1åͱҘ­(º*]c‹" )¡ã vº%u£E£RºQtI݈©Å™g­éÀðºÈðÌ3Ï?0÷™g&»šÍîù2sî9÷œßÜû¿÷fˆ&m…¿&Âa‹°qÿ ÄLi™Ò2¥eCº(‹²(ÿ­ž–ÒRZ L†•$’H"óP_9ÁòÙ|VÕíǯ åÑòS1óÖÐxüB±El[¬®„+áJTظ¡¸¡¸!\ÙüxóãÍ-϶<Ûò ÈÍÈÍÈÍú,ÎòÙ|VÕgý^ÍCüoCý¹Ÿò#ü?â\ÊV(± ± ±@ÞWÛ^Û^Û®D÷÷÷ @ÀF1ŠQN8áT?gùl>«Çê‡ö›ûé«ùHÿïâ]¼ËùV ãVÆ­Œ[¾•vÉ.Ù%Ø0%EIQRà“Ëår¹Óä49 M²I6iü@œå³ù¬«¯‡ô׿¡¢qVÎÊY‰Äcâ1ñXS›`8a¨4TúL*ØÊQå(†}M&ŠSúIú À„üü àð#Ô&üãþq@qJ÷¥û€¯ÉûÔûP>P²”, ³4à ÃQÃQŸ‰õg<Œt½º^]ïÆe,A_¡?¢?¢Ìwô9ž;žc0PgX>)UIU|†!AÒ)‡”C€”€rA¹8ŒÃ@iÒä“Ò]é®ê;ú>‡ƒú ýaýae>ãQùÄB±P,¼sŒªwTo¯Þ®ìóY¥sÒ9MïóÏÀÅä‹ÉpåË+_€”.¥ãߨ£ºGuPŸ]Ÿ ÀۑבŒú¬Ò„4¡ºcÕ;ª·UoSv«+ÂGŠ;nIÜ’¸%8áÙàÙàÙèF7|Hb¿ÙÒni&Ï=ÄéãôZcËÆ-à·úoõÀ[y+L‹Ÿ¯É.Ë*ËÔúnÏO¼'`<Œþ!çTΩœSÁ_&Ûýwüw¸Ùм‘y#ðî¾w÷ikß+¾W¬¾±ìÆ2È)É)€5Ék’µùõ5õ5š|·sÄ9Èöà1ÆÃøøÀ‘Z¨3êŒ:£zÆ"hw»ND3¥Aiˆ(«,«ŒˆhOïž^íM± beQ‘»ÓÝIDô}Ý÷uDD¹Õ¹ÕÚüœ934näÝ7ï¾ID!×O„®Y׬kVüÂ(þäjwµ»ÚÉîå½¼—'AØË%sÉú½î©î)\¨¹PCD´²ze5QÕúªõDD«V™ç™ç½óÃ;?yÌ3Ñô½Ó÷jD§è$¢‰€Û3qâ>ÿõ$H`Tp;ÝN·“ìŒxoâMÒ/%>ÑPÜPÔP¤‘@$ûÚÓÕÓÀ›–– IùIùÐ8½qºv×¼…ÞBˆž=ÎZÏZµ*|ý<:¸õòeÛIÛÉ`¿§¯ ]R_À=\*—Ê¥J¿°\X.,?XÉNYÒ¯ôWõW幎ßÙOÙƒšVÖ¥¦ÀêŒÕ”¾/ú¾Ð‡ŒZß”oÊ€tOºG«¾ãEÇ‹dGº"]ðó¬ŸgÁ;ù|XrpуEüê Ä ñB|Í ÅcŒ1F"ñ¦xS¼iq©~îÛ o7È¥@_G_à7Om˜Ú/lÜçÜçÆ¦|7å;à;ùNíaj9Þr:>€¨Q Ï´Ï´äçðsMEiE)Æ_ÐùÞWï}åSw »„]ß:éG¹)Ô?Ó¥ŠçÄs΋l‚¹|ï'{?QÖ·nߺ ø¦×õ×õCç4Î0ÜÔÑÔõºzØóìš{ÞÞ%½K Vª•yGÇÃŽ‡Áõ½4r©óR'²Õ'´’¯ä+Ç7p³¸YܬEµa€Â}õ|m纸®õç9 õS?@Ä/æûß·µµ¦¶¦Â¦j·Ô¿Û¿[ „1Œi|E©R&_²JTÊ:¥\)JÉeq½åz HŠÔßÓßóª+ù±ð‘ð‘Ù ¢™ÈD&QdͤLÊ?&+YÉJ$¸…N¡sß׬€þ|¢(øbe=ã=ãZíJFÉr‚œ@Q,ŠP¡mþý?ÊVé‘ô^61ïn^q^±\ª¾@£¢GôØŽ$%%ñÞÀ¸Ëº sjàs«ðDx"<áZçþ~"]®@W`;¢j7ÓiÈ”KYC¿Ùoö›á… 6Ø `Á…•“åd99¨Å3+ά8³BYÇêébu±ºX×ø¤¯ ÝiîjØÖæÞõõ‘ºT]ª.Õq9¨]s¹¹\Y§Þ:±¾X_lÈÿÂÿÂÿ"¨Ånt£°EuGuGu+›UMÆð1|̶CaRü,Œ/‚^= œÑhw;·}ýfÎÂY8 »çüïÛÚlm¶¶ v}m¾6_[P¹/^&¼L-Z<$/PµØ,4 Í\Ť^8à›ô &°Aíº·F»§õ§õ§}±‹Ãâ°ð /†©¹ÕÜjn ^;âyñ¼x¾;ð—$ê¯a}ãý:Àpc¶´ûçÿ¤Ýµ›ÖnZ»)¨]Û*Û*Û*4NÆu'¸|.ŸË_0´ ?Ö—£ÿÒ^§Ý5B¥P)T:Óp~E~E~…R•2‘2‘2á{ nµ[p ns"5Q5QàÚaý"è´pí õ×öp;¹ÜN€²(‹²ü¿ágó³ùÙGqtývÒXÒXÒ‘pG¸#Üá®&n Û¹ÿ›ÅªßŒd$£Ø.ÛÁ+¼Â+w•»Ê]ýÇœÉñ_ÛÂvÆV÷µ[ý/Èà6ý-IEND®B`‚routino-3.2/web/www/routino/icons/limit-5.0.png 644 233 144 2540 13061246471 14571 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–HÔgÇ?wvSS´‰‹þ8‰¶~¸F"*ôƒ­l°…鸆àT‹G”›à«Aý³!l ®@QÆFsvdH06E±ÔÝv,P³ÝæhÝ¥ÝÝ÷ù>¯ýq÷xWnû»çï÷ûù<ŸÏçýþ>?ÞÏ# ""«Òog™³ÌY”²ïdüy¯æ½úÒ)»G£ÉÑôë)(î*îx¾ïù>;±M¿‰ÏÎÉÔÏÆ3~Y%Gî`î £.mŸ7·¼¹%ï…”ýÑuÈ÷åûYpôòÑË—ú/õã…Сæêæê c›~oòM½ìúræ)|p¸Fû\îs"°¶~mý‹ÇS¼ ¯7¼03£ Â@!…ºˆÅ´H–múÓñ&ßÔ3õ žÁOñ(­-­ÆæÆæüÞTBàshs·¹ ^ÒtÐA!XQ+  ZT qÐ×õu8 c›~oòM=Sßàüyrn?Þ‹åYáY±Dè&7T‡êõab21IR•«7ÔhõŽz[½ œ£ƒ–5½C×è°î©U€Ö'-¿å' ê¡z,¤ëãÉõä‚ïÍšJ‘òO ?”Š®À&ƒÉ¥ú¯1fWØ,0“ÁD§Ÿˆ'žÅh»Ølg;Û³üûh¥hPCj(E xDp!¸Køi>ib=7àÝÓïžìJ°kì°Þ²Ú­vôÐá¡–¡è>Ø}°û \ð\ð\ð@¬,V+[>bAÐôC·«ÛÕ킉èDd"’ù9=‘ô'ýÆ´+—ðÓ|ÒÄ~y¾|ðåÐßèÃéŒøÌg33°¦jMÕš*h¼Ýx»ñ6´ô·ô·ôC¨7ÔêÍ o o o„J_¥¯Ò×*®U\ƒMñMñMq˜™œ\ ëß ^ ßð(ú¾è{=¡êP5¨¾'ÿ|86ŽÂÊ“+O®< »w7ދދÞå#Õ7Ú7Ú7 [[·¶nmÍøkÆkÆkÆaà§~ÌøÕæ+…oø¬ÉiÈià×o®ßâ¸/""³é%XZòIɧ%ŸŠ4û›ýÍ~‘ÇvÛyLäDäDäDD¤À*° ,‘ý®ý®ý.‘ĿĿÄf‘Â[…· oÉR+ºWt¯èžÈbÉbÉbIÆ/?<×°kXJEr^Îy™Wœ"öûŠãŽˆuÀ: "¦™¼ÐXh44*²ÎZg­³DyyyDÊÆËÆËÆEfb3±™˜ƒ 2(â®u׺k3þûÛîo»¿Md²z²z²Z¤ü\ùÙò³^Ž<ƒ—Æ7|–­1Ç“k,ðu` 0z6ôlèâúâúâzh?ß~¾ý<„#áH8Uî*w•æ}ó¾yYdý‘õPà-ðx¡Mµ©6•=éjX §ë?רS»Òì’«ÖWÖW™]”¨KìH쀰3ì ;AßÕwõ]нºW÷Âì©ÙS³§@ïÓûô>ÐMºI7Ál`60ûo{ÊžTZr”5oÍÉÿÝ•Y: Îç2:¦;¬ikš}^ßÔ7³´Kwé.`{Ø“5^¼xÁŽÚQ;šXwêNà=5¦Æ²t,||üŸ:–¥üF‰-£ÌꎺWcjŒ¤¾¦ÿÒ¡ù–«\¥ÎF=¥§ôðˆ1àFý‹^Ô‹hFìÕöj’ ÆÕ¸¹äMðäyòþUùŸÙ³ò™½]<³÷±góûüÜ"›ŽíÓÜIEND®B`‚routino-3.2/web/www/routino/icons/limit-71.png 644 233 144 2242 13061246470 14514 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜWIDATHÇÍ–_hSWǹ®¦E­­˜Q©ØB©•¢P0²à?¨DJEk6 âŠT¬c|ê^jAXPÒ¬Å?ø Údp2¡Z)©ÝC¥H„Ú†MÓäÜóÙÃ͹÷:'¸=õ¼$¿ßÏ799'W@DDjʯÖkUíÄÖ1/_¹³rçú_œø’‚@{ }´–.¨ÕÆì1/6uÓïŸñôý<“—ñÁáàp \ŽÏÁÁ†ƒ •!'îOCU²*ùg ¢·¢·n\¹q…oa:3˜ Ï„Á‹MÝô›y£ç×—sÿà‹@ÅÝŠ»? ¸8¸XÖFÖFÖu; Ùuж·m/ÀÔ¢©EÚ•–²T‡ý­Eš#Í‘f¸|úòé˧}Æ"*¢":§s>žËwüX"ömûvà…Hi_iŸ˜µRª%'9»ÎÞ`opó2Ô9Ô9Ô)Ê„2¡ŒÈÆðÆðưHq°8Xôú4ˆŒË¸Œ{yQR’’ˆˆd%ëã¹|Ç%’çÿÿ&’z˜zhúè’‚Õ£2/ßH—tyºiÖi-Òl¶}À¸Ä%î…Kº—t/驨]±»b·¯¯Y6É&=¡'dÞå¹ü²ŸÏJTi¦4<å oЦò.ó.ó.¶|Øòa‹oïNr’“^8×:×:× …`!XúúîòŒg_|*ÿÇ=ÖG}|É*xgþã=ö/7?ÅÇ”TJ¥ì^»—"Ëh¡Í÷ôÒëã½ç=ï}qˆj€f öû EŠjDøô?ó/ØÿÊût±`ŸÇæìßOœ2颬GIEND®B`‚routino-3.2/web/www/routino/icons/limit-16.3.png 644 233 144 3036 13061246472 14660 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÓIDATHÇÍ–ßoSçÇ;‰‰k×)€,u **!AØ MFb9M€¤?ÄE[B.¦]¨bETZŠÑTñK%¤ƒEU~@š5c@ù “J!HÍb°SK*fSŠ!!ñ9çýìÂ>¶Û¿€÷æèûüø~Ÿó¼ç}Î+ ""…©§€u©u©Õ™ÄÖm{~u~õ¯ÿžÄ‡u°Ô[êGÿ ö/ØPÔQÔa„2Øô›ñÙù"þl=Ó.…’1äuçu[|)ü4¾Úøj~qïûIûɧ4÷7÷ôuöuò{˜žøÑ÷£2Øô›ñf¾É—Í/ýB_r¿ÌýÒròæåÍÏëž×_úC2`ü%Ôj¾Ëù.GY@ÿàÀ¡|@œ8æŠfaÓŸŠ7óM>“ßÔ3õ“õ¸½n¯¼ñæoÚÛ“ ¡ã°cÉŽ%¦^â$ð1ã-®Åôwôw˜5¤†°` 6ýf¼™oò™ü¦ž©Ÿ¬G~¾·Á Ä7%6%Ò]5¼‰ÜD.¨ZH az”Ú¢êTh7´o´oÀ0 Ã0ȬÇD‰¦‘2f4‡æ ¡ÝMx0®&ùaSxS˜Né§·2."òò§`¿m¿·AdCdèãÔ¨.í¡öé´Ä" )S1Ë*ä§84ÓLs–}';Ù \ä WÔ µ‚iþšä§8|5|À·Çã6®$ëIuêðehimiuÀ(3y‡:ŽšøçÄÀÄ@Fo¼p¼p¼‚ƒÁÁà ŒlÙ2²%ã7FŒc$ƒCB¾‚Ç‚íÁvÔÉk5×jÒÑejn{íöZ`*Y0("rãéú¤ë“tçßëvw v 2kë°°€îæîæî¬N¬±¬±¬±ÀÆÉ“'¡"V«ˆÁä£ÉG“2q‘û‘û‘ûàjsµ¹Ú qqcQc”Ì.:²è³ÿÞuÛÛ¯Þƒ/øÐ’õXÅêüÀùÁŠrÙîóމ0ODÄÒ.rä,<×|—Ëåq\p\p\9kœ5Î"‘ÖHk¤UÄ]æ.s—‰¬s­s­s‰¸'Üî I/c¯±×Ø+²Û¶Û¶Û&Òô»¦ú¦z‘_*ùªä+É›«|´´‹ø.ú.ŠXÞ--]Q.PôBÑ ÆD¿~º7}ìðíñíñíÞÑÞÑÞQ8}âô‰Ó'`Yå²Êe•pôÞÑ{GïÁâáŎá¼ã¼ã¼#Ó1P€'3OfžÌ@Ù†3 g`é»Kj—ÔÂõÿ|ûÚ·¯…™š™0þâ<èo°ÿ|CÊ! ѧIEND®B`‚routino-3.2/web/www/routino/icons/limit-40.0.png 644 233 144 3007 13061246474 14652 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܼIDATHÇÍ–áO[çÆ1˜C+"åCi¥„Ä‚8Ç>¬a-Ь-I ©Pò! 0ÀÉ>D‹¥STi[¤L @!™Æ¨ŠT†´((d‰(Y–¦H5Lë¢ALœØ̵ïûÛûr½îÈûÅ:ç<ïóœësßç¾""’›üHËOËO³'â´_›ù¬š¬šKĽq°¶þö,líÚÚðòÀËú36ê>u¿ˆÉŸªgä%WÌDæpæ°¥2Ÿ‡J>*ÉÚ–ˆÿ8¶ÛÈj šF›F¾¸úÅUÚ`ñÎâ€'•O*ÁŒº7ö|©ürþGú"ðÒµ—®Yæ!3#3C^¯z½jG{0»jß«}à{ë÷V•ñe ‡U „ c¬Ç)±QOâýŸÁoèú‰~òöçíC ‡l—üN¿zúUCO.pˆ…ca€ø±ø1¢ ÆÕ8,`ÆFÝÀû >ƒßÐ3ôýÈÿÎöOï®Óê´Í†n«Bí±öô]Ú§Ú§¥JU¡*„ØBÌóƒêPªs- °)õ󨑨´ØwZŽ–ê7 ~¨ ×…•¤¾9J‘Â?³n{d{N‡™¢™" €_©¯âޏƒµM‰rŠ)*¨ "¥‘jª©j¨¡&%¿}ì*ØÏ~õ®z—5ªüôÝöݰ…máp:ß&úÖEDzoAKK?¨r½Ìài™ùdæ”ç_žqϸ©7í™öL{ ‹.º€ùð|xÞ|×Ð/êõ‹fì›ôMú&¡;½kµk5™žÞD—©PsEs…1ÚÞ[ÉÆ&Nq|èÐÐ!àߪQ½£-j‹DwþtçŽ;à@õêÕ õi}Z”Œ—Œ—ŒCé@é@é8¢Ž¨# +gWήœ5Z®X®X®€²‘²‘²(õ”^+½ŽpAwA7Ñ'z0|cø¨ß%ú®Ú?¶¬†ùÞ<&á©n÷1÷1ØþÏíw¶ßÖÁÖÁÖAuŒ:FàsŽ9ÇLüÞÙ½³{gárìrìrÌÌ÷»ûÝýnpuº:])x¯³×Ù 9ñYÛgmÑžhıEmQj8]ß †Š­¿Ý¦¶)‹\õ½5ô–ë»»%ï—_½íÛ/2Q4Q4Q$’[œ[œ[,’gͳæYesÙ§íÓöi‘uçºsÝ)"Ïä™<‰ßßßɱæXsRñßÙ3í™"Ï—×j×j%(’ùJæ+’'·¬¹Ö\ŠÓ,¿Woª7-S"ë®u—HÚki_¦})y{â{¦÷L‹x¿öÞ÷Þ™»>w}îºH¤)Òi ͆fC³" çÎ-œYÈXÈXÈÙÕ°«aWƒˆÖ¬5kÍ"ùSùSùS"K‘¥ÈRD$ð³€+àñ;ý[ý[E o¼qä#’'²úáê‡"–×Ô7êËTòTNœ‚¡§CO!Þf̀蕲+»¯ì†ÚºÚºÚ:sGÇŽŽƒìÖìÖìV888€•‡+WBù¥òKå— ä yC^8Yp²àdd·eŸÈ>§7:û:ûˆ&ݤ†pïØÒæ©meOœýцwà ÏÏ>?ˆ ùB“¡I`‚ &@÷é>ÝÁ{Á{Á{ Ž«ãê8(—r){‚=ÁP•ªRU‚:¬>P@ðA0  ôÿh»µÝ@<éñw‹ —ô¤a[´-†ÓÙðé>&}æ©þ¾þ~еÓL3è=¢GÌP5ªFÕ´ÓN{еÓFèaeO<´Ú¢¶°¦N$ùÝ>¿Ï` Ú‚átæ û±óÇê­õVÓù9¯ŠW?‰wÄ;Lççï|Îç ¾V÷Õ}à&7¹ ¬&¾•jAÍ©9`5‰¿¡géYhj"¶[þa8}z}:°ñÎÿÂ~+_ØÛÅ {{1o°ÿ‡š@ôgLIEND®B`‚routino-3.2/web/www/routino/icons/limit-2.1.png 644 233 144 2407 13061246471 14571 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܼIDATHÇÍ–mHTiÇŸWgÇI·´ Bhü"VB4Ã(ÙFa%HÄFÔë.›Ð‡Ø(¤70-cY£©±ÙòSź®ÉB°;䲑ø*³¸‚9ƒ:/÷Þç·fž¹×"v?z¾\ÎyÎùÿÿÏÛ¹!„ÅÙ¯ûFûF»'ãÛ¿4ãÎÝÎÝÞ3þ-llþ<«®­ºPr§äŽñÆôÕ¸Ê·Ö aâ[ùT\ 3à:‚6Ö¿M•M•ÎÒŒÿ}?¸z\= „ºB]|ÑÁè ÀœÎ¦¯ÆU¾ªWxV|qá=~! ¿7¿×6ŽGP^W^·ét&adìß»/ÀTÞTž´€þàÆ-ý@œ8Êf-¾Ïæ«z…§ðŸâÏè°Æ·Æ'4n8ìê̼ùZ6´lP|éà"qƒ×âz³ÞLd¿ìÀ† L_«|U¯ð¾âSü=bùÞ^®E64i€ôKÐ'ô 0Æ´]Ú.ÒÚ„îÔH#aÄŒ¦%HæyÇ;3løŒSÆ)¤lÕ¦µiÒ`Å@Lá7:JàåZËV !DE¸¢®hü‡ãÃæÖ|.“z“ÞÄ"²i¥•V ™ >0}LÓÇ@öÈûò¾e n4 ,*|Ö‡uÈñgõd…ÝúNœ?q^ÍÄØ‚-½^ÈÁÉ¡ü×òµ„«W®^¹z†ž =zfòÉÇò±| ò…|!_˜ñþý7úoÀø§ã…ã…fºü%ý4ý4·®[rüY=Ya¿ ÝóÝó`´ÈcÙŠä+ýUüUÜ)wÊ‚Zo­·Ö å‡Ê•‚ˆ=bØ-+²Žu¬ƒ`Y°,Xùáüp~ºë»ë»ë-+êON&'IfuSüJ]OŸ§oëgBø¾€âœBØ:³;í˜dÒ9éâLÛ™¶3mB<}>ú|TˆÂµ…k × ñD<È™¶^[¯­Â³Ål1!Jo–Þ,½)„ È€ ˜y“WW-ÇÖ™ãWz ¤¨¤Èø f§g§Õ¡gV~aì1ö˜3Ü1¸cpTn«ÜV¹ ŽjGµ£ÈfÙ,›Í<í‰öD{búu5u5u5Ð~¶ýlûYËŠÕiUZ•µÍdù³zxú<}2Ñêh5OYf‘ÎHG¤\!WÈ‚KKKX¨Y¨Y¨äHr$9ãããò¦¼)¯YpÜ7´l?Ø~к•šCsX™2üJÏgL÷/?c×ÿ¾>v},Óöò{aûƒí¶?€ÕöÕöÕvè8Ùq²ã$øÞúÞúÞB4 GÃ&ݾ{ûîí»woß½}÷¶EØ7©²TÙÇÏØ‡·òguKô%} –þXšYšAÎÔÏøgü0ýhúÑô#ˆG‹£Å°8°8°8sUsUsU`t]F—) ¶9¶9¶’ޤH óVÒ«Ý×rm䣷ÒÒÇr}Eõãˆq$×w’jžÿÓÞË_†÷_}ÌÒùµÆ¼Æ<’~Éi}«¾dP/Ò‹HËß伜GÊŸäCùø–Z@êR—:0Æ(£kØÉN$ßéSúéLëÅògùhç_±ÿÊûºX±ï±•ù‚ýuõfèÿ>LµIEND®B`‚routino-3.2/web/www/routino/icons/limit-196.png 644 233 144 2742 13061246471 14612 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü—IDATHÇÍV[LWþf—ÛV„jAi¼ÄB¬l-®` ‰„o4Ñ’5Þ/ > jÔ·`R­ñÉm‰b *4Ñj¨l¥i@hj³(’ *‚Ø ,³3çëÃrvÖ^Þ™—É9ß÷Ír¾9 1“o¦DS¢)Ê›¾2òÙÙýàÏi¤’¯äÿ^FFŸ‰>C’Ö Ö úc#–uÙ¼0ðƒùd10á5á5JÆd|”\Ÿº>5"ÎÝLZê,u£>²äzÉu’¬½T{‰;É—-/[Hr(c(ƒ4bY—ýr½Ä ÆÇÑðdhChƒÒC†‡…‡dRVRVònÓd2wMî’ì5÷š…‰$Im€d$#EI=”Ï`P,ë“ýr½Ä“ø’Oòûõ€œ¹ræJ€Ì+Ê+²œ÷/xüy á@‚äSëHžà F’>ÏC’Ú&m½¤hÍ$I… iIJ.ûåz‰'ñ%Ÿä÷ëÁû{[ñYQAr„$Õ¤­G“º]½¬^¦*ÊDµ¨¦’õ7ú >HúÞúÞúÞ’âK±El Lbƒ8.ŽSø~›˜?1Ÿª®«oÔ7~À±uê:•¤ü´ðê–>KŸ'„tën=€»ZëV—«ËùN|/ÚE{áC$ó0yžâ)ž"ÅN±Sì$ÃH9'’äz‘^ÄwÜáÇ'»¢º¢HNXž[ž{B¤žIaçCŽC9|"šÔzµÞÐÑ|¼ùPó!²{a÷Âî…Ï£GÈÓi§ÓN§‘OËŸ–?-7êOž$èÝf·ØÊyF°‡=Ç+ cˆuǺcÝ€¥ØRl)\—ÃåâRâRâR€–Û-·[n±ÇbÅv ìØ5¼Nyò:°¶YÛ¬m@zDzLz 0³#~,~ á~!Êyåç•úJzL€9לˑ66*ãXÁ­Ü š Í…f uNêœÔ9@¿Ò¯ô+Àê‚Õ« €ÑâÑâÑb kwÖî¬Ý@GRGRG ÌVf+³Ã3†g öz{½½¨ê¨ê¬êZ/µ¶´¶ñE‡4…4R Ðoê7•? |9¾œ@ãL„â9žbˆ>Ñ'úS•©ÊTŒ'Ž'Ž'‹Ž,:²è°ªlUÙª2 ¦2¦2¦Xì]ì]ì†= {8Ü·Ã ÄÝ»wè­ìÝÞ»Ýàãâ‰ò‰r@ê1ž OF{+LMM²Û°H„ŠPLÈLd|d|d<€ä °^´^´^FJGJGJ³·ÎÞ:{ ÈÉÍÉÍÉœWWWYÎYÎYN`Zô†i À’?—´-i6…oèÝÐ+ñ¹Í<ü öA-Ðó§’ ¾j_µq*GÒGl#6rüÎøñ;Æ©óVz+½•ä+ý•þJ'E¨5F]ÓÆ´1rðóÁ´Á4R_ gꙤæÔœ$»&ùü~=†ÑòÒòÒBº5·fø©oÑ·ð½|ÿ±ÑF)6Šbc¿å‹|‘OŠâ…xAŠb®˜TÿÐwÐwïhøØ¼®y$½–KÏ¿|ì?œ_•ίukÝ$ã´R­”*ËXÍ çça–³œ.á.’¿ÐEWÐT³íâ¾6O›G•ÕÚmGók!!rRï9ÿ”ýWNÙÛÅ”½MÍìߤ›^²ÆÎ€IEND®B`‚routino-3.2/web/www/routino/icons/limit-31.1.png 644 233 144 2636 13061246473 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜSIDATHÇÍV[LTW]wáÕ• M1©6”g0„Dc$T0’¦êµ!•hø(5H¤¨±’FaeŠ?:F#Sc,LÆ|á« :CyÍÜ{V?†ÃÂWÿØ?'{íÇÚ™}Ïš5{‚4Äâ ~ß𕎇ä„ä$µøý³*©(ýß‘‘ ‘ $}>ú¼öX÷e\æÖzÿ@>‰# :`¼j¼ªdÌú'È=÷l ‰õû?8ÈÐöÐö|äÁŽƒ$i»h»È*òõ½×÷Hr,c,ƒÔ}—ù²^ö ìóø2øzðuå)i\j\ Ökâ×þ„?É;vî É—A/ƒ„$Iõo’á $=ôPÚH€/ã³ù²^ö“ý%Ÿä÷ÏÒœnNÈüÒüÒÐfÁã_È£«Ž®’|Þv’§xŠá¤Ïãó¤ºWÝËiR8„ƒ$©P!u_Æe¾¬—ýdÉ'ùýó諜€ú,r·k·‹ÔFHÒ{×÷Ô›àM µ?¼¯¼¯èTÈ‘µ4-UK%E­¨µÔÍÍQŽ’tË|­L+£WK÷ÕújIñ­¿?YRBòµä—«€ÏN“¡žPg ¿wÝuÝ%y‹$™KŠ­b+'xš l ¹†k¸†ÔŒšQ3’¢E´ˆ–€>ò#?r©ƒê :HŠvµWíåÄ,œKËsüôϾ€³wQq âÀÜïðùck_g_'Y¡¾¹¾™âá_]] uŽ:G933£ãⶸ-nëç\~££ÃÑA1ôÉ“à'Á:Ÿè«È¯È—«={Ç î€¥îí«·¯cdždž•ÍÛRSޤÁŒ3˹͹ Jž=ïfÞMÀYá¬pV]Wº®t]2m™¶LÐcé±ôX0gZœ§ÅJ𒦤­Ë[—·.²>͚̚„ÒóEÏ‹ž˜ñg+›Å¹”ð”pYmé4(¿šbM±›¶é逺Ê]â.QškqrÝÉu0–¦–æ”æ+Ö¯X¿b=0iŸ´OÚCœ!ΘKÍ¥æR@ä‰<‘§FM4bX ‹a@q+nÅ Äþ{!ö ¬Êaå0Œ³ƒ5c<Í’f€ˆ[·6mG¢f¢f´þ8rlä˜~íÇ'=Ï=ÏÉÂîÂîÂn2¾,¾,¾Œt;‹Åúj2?d~Èü@6U7U7U|SVÕªZõSš5ÙšlM&›ªÏ•Ÿ+×ùÔâ·Éo“I2ÚmÒ Ú^ŸÉgRðééÐRغ¯uÌ©‡R³R³[¶-Û– ˜{ͽæ^ ßÖoë·¬ì¸v\;(mJ›Ò¦ãCφž =´eÚ2m™Ž‹>Ñ+z¸p7æ`3|Þ\o.h×´kÊ€Á°gÂ;á}ä:Û:Û€¼ªâËÅ—Yµ9ÂaÂLd~dvd6°áÒ†K.%+KV–¬Ô‰LU¦*Sº?tè~/Š/Š/ŠÜ]î.w—އ5†Õ‡ÕÁÙA‰A‰òc9òaŽ0ðdx29!o¯4Wšõ[âÛ2565F¾»ÿÎþÎN¡žQϨgÞJ÷Z÷Z÷Zrºfºfº†¤‹.ºÈттÑRói>Í÷Ÿü wÅ´qÜ;îÕùø[¥¥Ò¢ßJðÎ< ö똨žÓ±bQÌ ñ¥Ø%v‘Lb“&›â§ø?L$ŠÄã¬n.Ð1©üÓRy‹–-!yү̢Û÷Þ÷žäÏêõÍBå§™1Œ!YÇ:ÖÍÆ)^ŠA1HòÅœòÒÑK³Z¢–¬™§üSó•ñþW.Ú×Å¢}-Îì¿å3žuМ|¶IEND®B`‚routino-3.2/web/www/routino/icons/limit-24.5.png 644 233 144 3020 13061246473 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÅIDATHÇÍ–ÿOÓwÇ_­(Ôa™Ã† [j2&‰‹… Ùz-YÆWWH`?PEvÜÝXÀK—ÛÌ1›_¢¡æØâ\ô ’1’ ¹(+!ºÌ2ÃvÃöBV{V;Àê®Õ]ñ›©XÏëõKûERøKùôyyZRéÝéÝ[2Þ+6f<›ˆ?»¦^Sï¢u_×} pî‹s_ðG˜šx`{`ƒT¬çõz½_Ç[Š/ûÃ/Ë/,¿`ø ÒW¤¯çKŸ/µþ9Q0i…mon{àçe?/SFˆÝ2ÉT6 H}Ü_ëùd½Þ¯ãéø:ŸÎŸÐ#°æµ5¯‰€³ÊYeú{¢áæ—°;owžÎíZi%´ ˆUǪ ƒº¢®`À©XÏëõz¿Ž§ãë|:BOj)C""àwCü€¨Oû)úBôˆÿO[¥­"šTªtÉ*_½¨^„xa¼0^ÈÒ¡PÀ"DP±¿FÚ#íDc¢ ш9øt½åzKxБZÊ‘—Ž)h ÓTdÜ7îöPêUõ*!öñùä“TRI%¨a5¬†—È þjia„F€ÉOÉ'”ü´2Hò%ùÂ^:&̉ˆœ$kWí®Z-¾i4ýzóõf8ràHÛ‘6Ôèäè£?òؘØ1±cb\νœ{9÷ñ¼V¡Uhàu{«½ÕÐñûŽ:>@yªŽ—/ƒàý4lnØ êrBľù¾úÞï{®ýijËÔåÎ|dê0uv¬ud;²awwüÙþlvŠØºÉºÉº ^‡×á}\X`O`O`XŠ,E–"p^wúœ>¨>YURUBøn{Äq+7ôD{¢ jz$6ñ”ç)ê†?äoï7ýßôÇŸîÛ¾o{Š`C`C`CNÝ=u÷Ô]hënënëË€eÀ2•öJ{¥ýqa}þ>ŸVî]¹wå^pþÎisÚàlí™ü3ùK6ä?gÌ<ÆÍæNÕ-DWg¬Îˆ©º{e÷ÊRÇ~h³Ïê³BAFAFA4Z-èZèZèZËaËaËa¨¹Us«æ¬?´þÐúC057575—"4 šMà¶¹mntõtõtõ@Îñç>~îc¸ôîÀwßq¢¯D_˜Õôªéø˜QÓìšÝ0fð¬xyÅË"#¸Ù|³YÖ8þâxÇñŽHÍ…šó5çEŽÚŽÚŽÚDÄ-nq‹yŠQŸ€êT}ª@mT ©¿%ñߟŸ0-˜‚iü[÷±_ÝêìvÕ¹ê@}™pfu5–ËÕ­=ÒåSúéO9?ûh¡È!‡ NŒ¨ÿ¨ 5„“·ÀîØ·±o‰ªisÚp>éü”/+_D~ëüOî]ùľ.žØ÷Ø“ù‚ý?1^-u %-îIEND®B`‚routino-3.2/web/www/routino/icons/limit-26.8.png 644 233 144 3126 13061246473 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍ–ûOÔWÆßd‡HegLJ@LMÖl»A›6"·ekI‘Ò(/­"ÄÕhq³1wÓÆ,mkÔš[Ëf³£ÅRšù6 KKX.#«…"âVdJp–‡¹œÏþ0óuØþž_¾yÞ÷¼Ïó$'çùy!òЧêSõKÃX¿'Z_\¸¸pÕ_Âø|t%º’›õøiâ§Ëš–5…†£Xëkû΋DùêiuyA¢…8kœU—Á'àÝ—ß}y±9Œ:!¾%¾e.{m{m_}þÕçì‡Éo'¿˜É™É(ÖúÚ~m^ã[È/'~¢/±_Ç~­‡8CœAÒòÓò_:Þ0ö¿Yü&Àƒ˜1JÁÇ@ *pãF[Ó °Öì׿5>_ÓÓôÃ~L›L›Dàímoo‹¿þޤIÑôü-À‡|HÜ7@°"XT§ê@‡¢XëkûµyOã×ô4ý°ŸèQzDDó t´tBCþîÀ¸¥%„¦üøÁqªT…*Seèôú  …B!¢ë ÓL?C*ôÐï÷ûñîùSü) †ù¡ô~é}À­ékGÙ."ò‹!Þïv/Ró£Ý£ÝÀ ~ê5õl´Ñj…Z¡VÉ$“¼ÀÈu®sØÅ.vEËÊ«¼Ê üø@mR›ðÐá7Gô"út…ý“""ç»H¬Þ]½[£ ýòßqƒuƒupúÔé†Ó ¨¡CCQÁ1“1F{£½ÑƒeƒeƒeÑ~èVèVèV;?sžsžƒ†  ¨[Y7¾¸ñETO V§U§sa?¨ûAûAø×oï¼~çuõ^ÂãÏÆŸÅ—»,7.7VZuhÕ!èØß±¿c?ä_Ê¿” ­…ÖB+d»²]Ù.¸ë¸ë¸ëˆr8 `ÚhÚhÚ•¿®|£ò Héxqç‹;ñõ¥Ý™¹3£ÞûZûZN„ýHð¶ñ¢ñ¢²‚Çéqµ–VG«êÿt¬äXITÀâ³ø,>(XZ°´`)¬É^“½&¶ïؾcû8ªŽª£ ž”?)Rk»Úvµí*¤N¦N¦NB³½ÙÖlƒ¬?feAçΞڞZw¥»B?7N'•U³ÒpÐp ª=Ç<ÇDJKÞ*|«P\E-ECEC"éõéõéõ"ª6Tm¨©8Sq¦âŒˆ®FW£«Ù<»yvó¬È•ž+=WzDzÓ{Ó{ÓåٚΙΙÎ1‹YÌ"r9÷rÞå<‘™ÙóŒYägÿLZ´Z\"úÝúÝ"ò·˜§1OÉЫ¹\Ý÷º‹†W ¯ˆÜ¨®®SÞïò¶æm©zPu¿ê¾È)ë)ë)«È’GK-y$bTFeT"{ì{ì{ì"ËÏ-?·üœÈø–ñ-ã[¢Æšó›ó›óE,^‹×âi7¶Û"†ß¶¶Šôý½¿¼¿\L"‹~XôƒA_Чû^¯Nε͵9{EzºzºDzÎÞÜvsïÅ?æ“yÛ°mÀ6 ’hJ4%šDb}±¾XŸH¦3Ó™é1´Z ­"Y®,W–K¤øpñáâÃ"– – – "ÇËŽ—/éžïžïžIúsÒ'IŸˆlPY£Y£2_^Tn.7󾈭ÓÖ)óÔ›áÍpö ‘[IÍ5€×¾%SE– <ì~8þp5qdâÀÄð­÷­÷­uRT'áñàãÁǃj 5…š@¨5® W†+h ÇŒ¯ÖWë«…©ÿLL Ôjÿ¸è×´’QMQM£2¹Å±ÅA’çO?ÅÏÉÁöÁv’6›IÍWój½Ú¯Î ŸÝoàdÄ¥ˆKRi4 9Ç:ÇšòE°ài ¹fÕšU$ùBÿB/t$Iþ&i¢I˜Izè¡jÿ„ùj>T¯ö«óÔù*žŠä2nEÜ €\ûÑÚ¢NºO“;’w$«xþ&’?ðšHÙ#{H2P(â)ZE+IR¢Dj¾šWëÕ~už:_ÅSñƒ|´«»…,è)è!IúÛä?üsüsHÅ#e#ý!¦BéUº•nRþSî“ûHaa f¡“{¬'•¥„~e…ü½ü=)¾ Î' # #IªøêU^€É(O”Ç3EøzÚzÚHî&IÚH±D,á/²…-¤2®Œ+ã$tÐFÄN;í$cËXþÏÏÏÏHÑp\ …môôüÔó©â‰-8ˆ Ó#·SVRV¢ŽQÞdì¬ê¬"TøúÀ×®_\×]×5 N[§­ÓFÖ8kœ5N²kq×â®ÅZ^\WÅUR\WÄ-Þz¸ÕÑê øcÆï¿GhxâQÙÚ²µêÕ¹…€œUäÅÊ‹•佊ެÞ,Qj‰ªªå„9Ý<ß<ŸLŸ›>7}.¹7soæÞLrvÒì¤ÙI䯏qãÈäÛÉ·“o“÷wÞßygA¯ð /٘ИИ@F8"ÎFœ%Ï®¬ÿ«þ/N„ªJŸŸÞtz“JÌY¥Ã;SM=öA&`)±”Ï—tÙý¥tbÛ‘í×·_‡ñÆ£½7zSª)Õ” 8ï:ï:ï±cÇ>r_å¾Ê}̼7óÞÌ{€·ÝÛîmǤ)VŪXÉ-¹%7ÿcüÉø“€°JŸIŸÁ¬’N`dùÒåK`ÚÍi7?ÈÔéç* •LcÙØ·cßçæb(¯)Ï•çÒŽ¦M; ,Ú·hߢ}ÀêÔÕ©«Sýqýqýq ¾¸¾¸¾f$ÍH𑤣D‰P8Q8Q8¤¦¥Þao¬7v²lã†Cè×è×0M'Ê9rŽô›tÌaÈ~Ú]Õ]…8ËNËzËz hfQbQ"P›Q›Q›œ±œ±œ±YYYÀµºku×ê£Íh3Ú€Ž®Ž®Ž.À]ë®u×r…\!WhDÅ#á.=hAËd8²ßæ·€Ò¬4K¿éĞііÀ[wnm›Î{8›ð?õ?…ï‚é” S€„' OžËv-ÛµlÐÙÐÙÐÙÄXc¬1V ;1;1;ÈÛŸ·?o?ãÈqä8€Ñs£çFÏiÄ¢GÛ£í@ÄJ}Š>¾Ð¹nF~ktk4xÌóƒ°&´•,ß^¾ô6·äeÞ@ö@6ÙßÖß×ßG1?°r`%é+öûŠIßßßò¥ý¥ý¥u¢NÔ‘¢Y4‹fr¨z¨z¨šTdEVdmÜï¹Ín3Å„qÄ?â×¶’?o]ºuiØVªº¡éHHÇ&uFÄ‹øIÝ¡(¥¢”M¢I4…m_´ˆÑ$r!† Ø8Ç9®h"E¤„éØ$Þ›:öŸ¿ºÝÂ[ ¶âtP™ÅÝ€)`"Å9ùµüš~ž¤“N ~ÅmÜFŠ«!ºÌ˼Lr”#!E¿è}$ŸO*¹RN?ã>$ùÝÊ?þ¦ò¿½ÿÊ·öuñÖ¾ÇÞÎì¿ô¤–Ä`ÏN!IEND®B`‚routino-3.2/web/www/routino/icons/limit-33.png 644 233 144 2471 13061246467 14524 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜîIDATHÇÍ–]HTiÇŸ£™Ž9fÑRø‘evaèFíÊL[ˆ•DK³E±ÑÅ&{±QÚ’Ò–5¸iY°”¶C$E±I±1´h,äGŠàÈ”µ˜i9çœ÷·3gÎÙeëÚs3<Ïÿ}þÿÿ{Îû<ó ˆˆHFìW !'!'!='|gçS6§l^õ[4¾d€¶MÛö´ž_x`QË¢³ÏŽ-ÜZבּùzV^2ÄN$ßH¾¡•Æâ°³`gAÊÑøìpÝrÝz¯ÃÛnܼzó*ßCøQøÀXéX)ر…[ë­z‹ÏÉ/'þ£/IIÚ$ÏOž/¹›r7åUF¼Ìƒ²-e[B‰¡D•Æ 4U L2‰õ¼uÄ[oÕ[|¿¥géGý,)YR"å»Êw¹®D úÚ *»*ÛÒ‹ÜNr’4Ð'õIc·±› ¨hh`Çn­·ê->‹ßÒ³ô£~äßßÖï…Š”Š@Dþ bÜ7î˜5f sF­P+Pú þLæŸæcóqüaN˜ïÌwÇÿ2gÍY˜ÇÍãD˜ñYü–^\_œ†òÁv…'çÁsã¹DøÌ*³Ši~¢v “{ܳ @T³jVÍÀ(£Œ:ð_8Íi` %”˜§ÌSL3cñÇôâúQ?1c—ÂÁšƒ5ñ}2©è#€EVt}Þ>oŸüMþ&t v v Ú>z×õ®ë]þF£¿ºººl\½!‰$zH9ôâúQ?1cÝ?B`<0/߯J"Ña>Z™Ã‡ÃâúÅõ‹ë¡ÂWá«ðAÞ«¼Wy¯ ­¡­¡­–g-ÏZž;Zw´îh…L•©2———9>y]dMdůöÛúQ?óDÒ;Ó;‹¾)ñ”xDD¤Kº´+òeâÎÄ""” ˆ6ÂFX¤6½6½6]diõÒê¥Õ"áöp{¸]d:4š‰Ô­­[[·VÄ•æJs¥‰ :7tNdÖ˜5f ±Ÿ‡ á„°$G튭ó‹Ü‹Üf/¼y;âhû¿U¿êh ÁÞéÔÌÔÌÔ lll@öxöxö8cÃÃÃPÚ\Ú\Ú n¯ÛëöÂÞ©½S{§àõ™×g^ŸÏeÏeÏep׺kݵàëñõøz`&0˜ 8|¬×{ôžOŸ±Ow¥5ƒ„Ù]©oÔ7êa48 ‚á3|†ÏÖÓSõT=Õ_0.†ž2ÆÊ1x?וÿ3ÇâsÆl2›˜f…‚:ªªT•£ý¨#ê¨|•¯òA]W×ÕuîQŪXEeæYó,Ó|øüKˆvųD>d~ÈüµDäXÚ±4q‰ˆèGÅ €I]y”GtÍ­kÅ¿ÓA‡ˆ¶BËÕrE´~­_ëÑ^j/´"qü­^«d@­V«Eƒ lTI‰ñ[zqý˜Ÿ9ü_9gosö>67o°ÿíñ*8³É€IEND®B`‚routino-3.2/web/www/routino/icons/limit-39.1.png 644 233 144 2750 13061246474 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–ÿOÔuÇ_‡pÀôÔS`m'°E~iJmÊɉÐp’‡6u“¾i+[?T?¤­‰i:%W8£ÒdÚCܵY[ p87´ÚáÔA¢Sº¿|NÑë>ŸÏûÑLJÏMÿ_¿Ü^_Ÿ¯{¿Þ¯çç- ""3'~’²“²“¦Çõ¤×m{ZyZyþѸÞh€£ÚQ}á#˜±Æ~÷·îoÍK¶nù­øÄ|»~"že—™bRÛRÛ¥z¬~fõ3i™q}o¤w¤wÜÓáÎ7:~8üÃaÞ†gnœ¸Uz«lÝò[ñV¾U/±¾Ô=„/)?¦ü踩ÎT§äúr}yïÄþ̃/®x`xÊð•F˜Æ4U Dˆ`Éh‚nù'â­|«žUß³ðãýd”d”ˆÀÊ—W¾œÞO¸ÔïÏyŽ…ëv²“i Gô€±ÎXGTêÀlÝò[ñV¾UϪoáYøñ~ìQŽ‹ˆÔ—ÁªU`ŽÄzõ¡XN,̾Ø_±¿ˆMtªÌ{æmó6èczXƒÚ¬6«ÍØ2ÎîZ<ÌWÌWˆ™%úv};¨-ñúàOó§7,|k”WEDžþÒ#é‘H2Ûzz.*A=§žcœ_馔[¹•h¥•Ö„Fj©¥(£Œ2cÈ2†@uA#Èø„¹’ÈÀ©S0‰O¼aDD¤ñ4Ó7Ön¬µÊ˜‹.ùúOöŸ„ú}õ{ë÷¢ÎGÎß>Û ÎÎΆ†Â†Â†B´ýêœ:§ÎêVݪ۶÷èéìéD]=˜2˜bã©þ+7®´FÛxZÌ‘ßÞƒŽmÛàJÆÍá›ÃêÕYŸÌ(˜Q@Ô?Ç?Ë? ¤@ š››aaݺ…uP|¥øJñXT¸¨pQ!„#áH8ò艵eµeµeAJgʱ”cplÙ‘‘##D'þÆ«ÆÛ-ë[Ö[ýö^’ã{W¦+³h‰HÉ’"Æm¶ÆÑ¼]v<µã)I­ÙS³¿f¿H^{^{^»HWrWrW²HVUVUV•ÈÙü³ùgóEœn§Ûé Ôj52)z¹^®—‹84‡æÐD2¿Ì<”yHDùo9Þ’Ôx”£Yî¾°ø…Å""Ó»¦w-Fgþ7ó?ó"Ÿ~0ú½öwïGþŽü Õs«çVÏ…ü†ü†ü8¡ÐNhP<µxjñTð]ö]ö]g½³ÞY-žO‹Ç>©èžèžè[÷y}^Ÿ¾ùðë×¾~ÍÆ3jþõþëp»Ü.ób²¹Nwé.ÇÅ)?»¼.¯Ì;úRûúöõ’ñ™ëÓ¾OûD~¿ôÇàƒ"ÞyÞyÞy"}ž>OŸG¤è`ÑÁ¢ƒ"9þŽ_äBàBàB@$7'7'7G$Üîw‹¸¼.¯ËkŸ êWA‘'äª\4gˆ«ŒUŠˆ˜;ÍŽ‹¢š¬;Ö:Ö:Ú/ñ™—~þü³Ï?KÔµÊU᪀ ýú7ôC(;”ʆʥ•K+—‚§ÂSá©€-[:·t‚V¦•ieP4¿h~Ñ|BPÀ>±ªïª«áÐWMÞ&oÂknÙײϾcbm}›26eØ[¢/ypëÁ- BËåÆò„‡‘ë#×G®ËXÆ2PNåTNkkkó¾yß¼oçiOj¥Z)*šz7v7fãñӦś'l%§â±”8©'yl…ZÁ¸zWmU[A­UkÕZP»Õnµ;¨j°‹]ìJXG=q?UžÊKà1&xó³˜?j1¯?ÙŸ ìˆ3³úY¿©ß¾2†a›ùÙÆV¶‚:£zU/$HÐ⌯®«kêðÏ$ó¿i¾IŒ c±øø!æð0ó?¾ßÊÇöuñؾÇÏìÿ6äôH]Vù5IEND®B`‚routino-3.2/web/www/routino/icons/limit-114.png 644 233 144 2540 13061246470 14573 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍVmH”Y~ÞÑÙq*¿j†h™6È~Ä‚´ä.™8ÆX¨k¹•…í†ÔZl”Q»¸fAdH²Eº©•ÿsúÀmƒ­eû`RGP³°%u̘y?î³?fî¼Öì²=^Î}î9ÏsÏáž÷‚¤E¿ -‹-‹-)ßò¹ž´.i]Æ/ÿ¼N*•ý@¦6¦6’dú¥ôKÆ3Ó—¸Ü?30óÏä“ëHƒ¹`k³µ)ùQ¿–Üœ¹93Éñò‘ö{Ç;Üݵ»‹$¯·\oá÷äèýÑû$ù6ÿm>iú—ûe¼Ì73?j?âHk·µ[$mŸØ>È%K –î‹lè[J®/^_L’à à ÂB’¤>Frç‰|’A)íÍ _âÑý2^æ“ù%Ÿäèéð8<¹a놭öæHÀ³Vò ë Kò©$Oñç‘ZP ’¤¾]ßÎ)|ÂG’T¨¦/q¹_ÆË|2¿ä“ü=ø°·§½diRiÉI’Tï‘Fª‘Jõ²z™ª8!ÚE;?2Ãcx )NˆZQû1J!–kuZU#KµªÖØïqj“ºI•O{g´–7аØG‚‰¤ßð±„Eú€š£æpZü*ž‹ç3©((H}@ÐHÑ!:Dãm9—q)þãbœ$AcÓ|ÉOú§üS$imL”z¢ÂÎß!+ŽVÿ Ñ£ÞRo™2|M¾3¾3d`~`~`~<¿¯Á×àk î€;àŽÇ_T¼Øùb'ÙóiÏÊž•fÅÅh„jEME¬Üù;–Hݲoà÷¼Ü¼\g@q+y 9 9·/lOnO†âöŽyÇ€Þ‡½{"fWË®–]-¼‹¼‹¼‹€ÞªÞªÞ*×ê´:­(2Š‹“?ŸÜwr”(æ²^åmËÛ&£²oX€”Û)·³¾Ä»¼ì¼l• 43‰ƒ„ ¯0 ÀYï¬wÖìg?ûMbeZ™V¦ÇZÇZÇZ€Õ¬fµ‰ÚqhÇ¡@hNhNh° ~Á¹çb°ù>|æÙåÙÄôéÉéÉÆSòÍÈ›óÚëÚ m…ÙŠ‚U« V‘Ž\8ráH|«Ö¤¯I_“N^kºÖt­‰ìnínín%™ŽLG&Y¾§|Où2£>£>£žÜ(›|âDZª±*Rê±ÆMã¦òB+ÑJb'qÀŠ! ™'ªP…  }èCœ‰jQ-ª£Óè4:‹ËⲸwØv‡ÇCg‡‡'ÍO?9lòñ·ðÂðB@êI‚ùÁüG`é™è™p”¡ üŸ «°*²è¶¹•s+çVVͪYµxa)®WŠ o o o =…žBPè/ôú–‹-[.ÖN­S¾¶”¬.Y°Q Ü›pýîÞ»{•f ˜L{ôà?o%»µ+ÚóVNæNfOf“![Ȳŷr2k2k2‹ å†rC¹$»ØÅ.Òh4FòýWï³Þg‘ãýã¡ñÿÐ|š¤囪8PqÀ¼•æ£}Ô>L$ýº_7çi”圞¡!Äÿß 3Lòo¾äK2:·Haì7ösšjlŽ©~•4ù?˜cÿ2ùÕèdfd€Ò©×è5Tyœml‹ŸütÒI'Éã<Æcq¨`­>¬Sešæ×ürY½G­4¡4AVêƒÉ?kÿ•³öu1kßc‘ãl{ÁþO« ß¿lÏzIEND®B`‚routino-3.2/web/www/routino/icons/limit-37.1.png 644 233 144 2736 13061246474 14671 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü“IDATHÇÍ–olSׯ_›¸ù£8‰…#$æˆ.´• «˜5kN]¥´…$¦E©ÅãTMj*ѵšVh%„[Â*¤E!_âœ(m7$@A”¦í‡a锸"e¡˜Ù!÷Þs~ûàÜ\‹~Ú7Îëyÿ<Ïñ}ïy¹_w…»Â]’Åîß8ñ‚pAxiWµÀµÉµéŸïAé‘Ò#¾_‡q°·ësûEþ\=;.eâò»ó»]Á9ü>l~fó3åY„“…'ÿkÂŽÄŽ@ïǽó&ÜþüöçSÁ© 8ØÎÛõv¿Í—Ë/ï?¢/žÏ€ë&ä?‘ÿ„,©[RWùÛlÁ¿+áå_~ ¹ ¹@»ÀúPL±)RØk2Ûù¹z»ßæ³ùm=[?»ÿzÿzØøÚÆ× ÿ–mé„–@KÀÖ3Nò!Å`¦Ì€Õl5óô À… lçíz»ßæ³ùm=[?»g”i‘C!hm5 `\0‡ Ÿá]b>e>…¡¯ãÇ6•9c΀µÕj¶šÁr[nË ºGÇug%РÞPo`¨õæ>sèßgù¡© ©¸mëÛ£¼!"²¼ S…©T½0z8@=è]Cš?ÑJ+àÇ?G8C†LV(?YÖ˜5f>i [äçÂõ¤F?ý æõÉîG˜9zž’¯ï|}ž}õHÝå¾Ë}ûylIl úÊWö]ÙÉP2” Akkk?t4t4t4@çµÎk×`ìÔØ©±S9ûlVͪÙÁƒ &è ¿õ|ëqôôåwn´G{ô¼[!"²¶O¦_xò…'EÆÊ§¾ŸúÞUõ\mÍ[5oÉìÐsCÏ=+®ÆÆO?éòvy»¼"À@@äxÅñŠã"Û.n»¸í¢Èõ5××\_#óË5ášpMˆÄÅʼn„~Ê„2âúÅÐøÐ¸ÌÎUUéöšâšb»kmŸèˆ·Ü[®»aª|ªþµúFõjøËþ#õGê¡wGo´7 U‡«W†3ž3ž3ç ´©6Õ¦ ‹Æ¢±œÑ–a *¡ÏçÇóañó‹ë×Á‰Xç¦ÎM9õ¿oo(9WrNw “e³e³ê*ž|{òmçØ?Ȥn¥nACwCwC7Â¥½—ö^Ú éeéeée°òÀÊ+ÀÈÙ‘³#g!ÖakµÎZçÄëªëªëªáØ;íÑö¨£gE~¨þ¡ÀçõyÕU·j6½¦×uU~çýÚûµHWC|k|«økw׆jC"½‘ÞHoDÄ—ñe|‘¤•´’–HÏžž=={D†††EVWWEÌåærs¹ÈÍý7÷ßÜ/¢¼Ê«¼Îhõe=¬‡EdT>‘OæÃ~1z£^DDõ«~×U·{sÚHß|)Ò×Ó×#òÒ›‘‘D˪J¼%^™- —Ö–ÖŠ¬*[U¶ªLdClClCL$±%±%±E¤ÑÓèiô8Â÷ý÷ý÷ý"MF“ÑdˆLŸž>=}ÚÉ}Tt¨èˆçù• *íwŒ¨¼4X4X$"’ ¦‚ß|)ö)à«]þ]ó6 V›¿œ™š™‚;î Ü@[Û­íÖvg$÷Úïµßk‡™ÀL`&àÄ•VZi¸{ìî±»Ç@™ÊT¦“Ÿ~z:8D?Ì`<0=þ¾kí®µÎ©Î?âcž¬éwæ},¢#¤õ¯ô+ú`)KYšcP-´ÐÂÿ±t¥®Ìñ1æ|ó'>f;ÿCÛy›òšò€²Î¬ÿaþhþüÕJZIìÿ¨)"<à=ÞåÝÝ[|Çw 'ô¸ÆçêQ»Õn üÖ«Ö«À²üóÎ?ó¨ó?¾ßÊÇövñØÞÇÏìÿ­OÙ"nê’IEND®B`‚routino-3.2/web/www/routino/icons/marker-15-grey.png 644 233 144 6132 13061246465 15627 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü IDATXÃ…—kPTǶÇÿݳçí奉 (0Å€!*ñÊ9!r h"Æ š¨©8^|S”&)Ié yDCùÈÑÔ9*9ÈKD"P`¼'p),Þ)œá•ˆ¢f˜À<÷Þ}?8ƒV¬TÖ—®îÞ½Ö¯ºÿ½öj’›››››‹<6ëㆮä¹An5ä^Ƚ{ëèèü%†²@Xðß|‡ÄítÕºj]µì3œÅYœ%9ˆF4¢ô¡}vb'v²Ïäiò4yÉáîs÷¹û]g‰…Xˆå`IÞì¼Ùy³›{ò·åoËßFFù>‚ ©9ÄV/WL@è·¢^Ô‹z±Õ=åžrO=¿T_§¯Ó×};ìuºG›nڗؗؗĽ§>©>©>‰kqÉqÉqÉ$'^/—Kƒ–- |}ß¼ï{ßzŸ¿iÿÞx¾ø>çÝÁÌù1?ñM²ƒì ;"NJ"$’ˆïÏM•N•N•†ÍlšÙ4³I8Ü—Ü—ÜG= d!}_ú¾ô}Ü·¶[€ ÌÂ,ÌÏ´LË´àpwpÀ ÌÀ “˜Ä$€(D! &b"&ðx„GxÎêgõ³úa ê‹ª/ª¾àßøaà‡¸v™R¦”)‡êù4>O{9/ãe¼|÷WªìTv*;i°4Xüé¿íõöz{}øZMº&]“ίÓmÓmÓmãÚ$’ f‰â„8°VÀ Àa ¶` @ÆÈÈ0&ÃI!)$`7Ø v???Ç·ñm|à¿ÇÿÌòù×¼®y]ó:¿ÎßÇãã#ú}ƒ¾!u©»ÓÝéî¬ïôûÕïW¿_YdÖHÖHÖé ¸p!à(Ó0 ÓÀ„“pÀ 7ÜZÑŠÖ§ú2È Ð….tˆCâˆ!   ³1³Äø?جoXß°¾ñLÌ™˜31,Þ¦¶©mjb–ÅËâeñkã9Í¢Yô‡=jÚ£’>Jú(é#$444B&vˆbT4¦Ót…(D!`qZœ'0Q;Q;Q „§…§…§aÚl›Ãæ§§§ê¢.êØ%v‰]8çà€V§Õiuð ¨ ¨ ¨=鹤璞CrÕåªËU—i¨4TúáFÊGò‘|äf> |øŸ-J\”¸(‘{ãÉh £a€ ´‚pÝtÝtݪfVͬš 4Ÿh>Ñ|ÏXODODOp>ð|àù@àJÊ•”+)@EFEFEPSPSPS&Á$˜¦—ÉŽ,Y8BŠ}<>>Î5îw㛘ԘԘTä(Û”mÊ6Ø…«ÂUá*T’õ’õ’õ@UUP)T •`›g›g›¼”ýRöKÙÏ‚ö“~ÒO€˜¡˜¡˜!`{×ö®í]€Çì1{Ì€jƒjƒj€­ØŠ­ËbY, œê€ê€êìaGÃŽ†Eέñ[ã·ÆQ@ñ >Á'$š–ÓrZ>GNæ9dΓÀó-ó-ó-@öÚìµÙk(g”3Ê 8V8V8V< ÊÚY;kŒkŒkŒk€#_ùêÈWÀ‰¤I'’ƒÞ 7èa„`¬‘5>‰OߢoÑ·œÁœ!ÑT" ‘„° Û2Û2Û2ôóïòïòïBBTA`¸‚+¸Èäò@®W‡Ün·`¬“u>EXŠR”BŠ"¤KÎ-9·äéÌtf:y»æíš· (]Wº®t0f3ŒÚHi#˜×‹dêÖÔ­©[觪¡VAGGGù¢þÙý³ûg³ŠÛ%·Kn—x/âE8XË`ëb]¬ë) k¸†ka=¾¾¾6ÆoŒßd2 ™ úzôõèëÀ¦M!›B©Fª‘j€áÂáÂáÂéåókæ×̯æóˆy…Š~E¿¢Ÿ/¢HG:ÒóÎr¹\.—Kršƒšƒšƒ5Ök…Šxˆ‡x`ÃvlÇö'@¤‚T €ôÒódÜ%uI]RàôÐé¡ÓC@ûæöÍ훟Ìßþúö×·¿ØMv“ÝæÍš;—wZõ]ùwåß•‹ ÄLÌÄŒ¯‰@"œ“I6OmžÚ<Õú½SïÔ;õÚ±øÎÃw¾#ì‹‹‹¥¼‰ÞEhMסëÐuèÛãö¸øUñ«âWÒ­Ò­Ò­€Gæ‘yd@½±ÞXoZU­ªV`0€•#+GVŽ€ÅvÇvÇvƒ«VW««Õ¢Ý˜`L0&Ð=ŠEŠ"åÿ2=žOǦTrø§Ã?þ @:Ð1÷”ôôôA«r²n²n².\·Z¹Z¹ZÉ^I­L­L­$7|we°}°}°„Ýg÷Ù}@³Q³Q³€H £ÚQí¨¸wüÞñ{Çÿÿ $1$1$öÛÉ·“o'cÓņ‹ ðÊ¢²¨,Î5LÂ$L· ° zwQz–ž¥g%ô=FüM4‰&ѴíjQµ¨Z€M‹¦EÃ^4¼gxÏðÊ|Z ß¾/|ßS€Óy ýè0s16›‚M@\N\N\Î4 ÍVc«±Õ@uíÓkŸ^û”×È&e“²IàqùwH$ËÉr²¼wŠP„".Ô[æ ñëFîCr’œ$'oì¥I4‰&¨…:èèé:w»ÎÍï¶–[Ë­åP‘ÉäGØÄ«âUñêS ^@ô¢½;ÎŽ³ã€$‰AÓZô«/«/«/ö[ª,U–*î”|¶|¶|vY~TaTaTáçß#yÈ#—`‚ &~µ¯UcÃæ{ld“Ú˜Ë1—c.mPd)²Yeù–`K°%˜³VUU û}ÉÏägò3\0Àl¾…w`ZC^íî÷j÷”W»WžÑ®§ÎSçáw[K¬%Ö¨(¥”RLøv¢ÙÑìhvˆö»Åw‹ïKî())õ\s¸F\#‡>¿óêWï¼ x5¾|êôñMƒþØ÷Êëà½Ú­yF»!–Kg­Ì­Ì­Ìö{+zC!È„¶t¶t¶t’7UF•QeD¨5må6s›¹ÍŽ?GÆGÆGÆÓqo¼×|Yå·\üŽ%&&&&&‚÷v LÆdLFöŒ¾0úÂè ø‡0_˜/Ì¿ÉË#å‘òÈÿ:ýpõÃÕW]¶öZ{­½ìx÷ùîóÝç…“žIϤG’-])])]ùn(+a%¬ä_× ‡rÉÆ1ŽqÑWþȽÅÿ–‡àìw´«GÐ ä±ZVËjM´šVÓêÿ‰t®w®w®_K‹¥Å´W¢“è$ºë?h«µÕÚê¿$šMf“ÙDÅçÅçÅçÙ9¯ß:/ ý÷8(þÀ~£]oºò°{±—ë"ÛÈ6²íßZÖÀXÃÁ·•aÊ0eí• K†%Ã#abX ì¾gÌ4f3Ç€ˆôúó–Ž?âø5ܼPájIEND®B`‚routino-3.2/web/www/routino/icons/marker-37-red.png 644 233 144 4212 13061246466 15435 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü?IDATXí—LTWÇÏûUÀEeXcüQW(–ª¨U~8hÝÁTkTZ±µÔMý‰cÛC P•fiÕÐØEcÈ0©%®Ín1hPÓ”µÑmhc”™ ÛZ§òcÄ‘aÞïþÁÜ7o&YÍf÷üçž{Ïù¼{¿ç^ µñfüÒ(9JŽ’¹§ÁØ—Z^jy©ey†¨Šª¨Þú Í¥¹4 ëÕ$’H"óp_¯fóÙz–å¯Ç/ ç1óí¦Ý´›w†Ç'½,¶ˆ-b‹³ÛÃíáö q ƒ ƒ ƒøÛš»k ¬°þÁúÀºÌu™ë2C>‹³ùl=ËÇò³zÏç!~I¸?íÿ„Â?qÏe;”T”T”T¤î=yí䵓×ô1ÞÇÞÇÞÇàÆ0À 7Ü€áãl>[Ïò±üáõ¦{>YÆò½|/ßëþ;Ky%óJæeaw ;Ð@7‚¦§ê©z*µL-SË5]MWÓÕ¦ÚT›ÉÆÙ|¶žåcù à°ú–±ç䜜“H<(6|ÏX«­ŸX?Ql؇úëúëð* ~Ù/º;ðcàG#ÚBm! =4ÜÀ P÷«ûŒ¨)j  »•×”×¥aØ1ìôµÚxY~kµµÔZªØX}ÆÃøHê‘z¤ž?Îc,•–rK¹>Ýõ›ë™ë‚y¼ê‘@ !óâWüjò¡oÕ·ÚÑn‡ !šzDO/”Íõ›ë´ë4,•–Ï,ŸéÓÁ'îwŠ;;²À‰Â…' õmÁ>Å©ô)} o×·ð_¹4_îør|7õ»©f„€-`€¯~õÓÓÀ™ïÌào’š$h¼ÓxPœ÷æÝ›g,ö(<sµ»þTý)“¢=›=› ¹¯¹€ðÐà!3Àõ§×ŸšÏÙÏÙÍñóoœbÊbÊ(®RW©©ûÏ*‚"„ê]®¹\s¹ÆxÿÄ¥qi\Zà ó…ùÂüÒ*ÖeÉS“Š’ŠÔi® ?·üÜ¿ìûe¼z©óÖyзßè¼Ñiýæëo¾6ƒ¾™ñfdÖfÖð‡ó´­Àèýë÷Á§ù4 ¥4¥4¥T3a’0I˜ôÅÅæÆæÆæ‰íb»Øîè5.üu9ÇrŽ©%¬œf/‰*‰‚rÈÇÀ11P\W\gŽŽ€X.–à=Üy¸`7³öE`qÀtÔE7‹nÝÔ|`±P,ÿ3ÔñP¸%—Ò¤9Òw=[`/³O´OÔsŒû#þªûª:P¿«~oGaG!hûµýa —‡/ðŸ©?Sî%î%€Zhž_ã“ÆÆäOh_ÅW /ç&s“¹É8(üÃè¯MÜ[Ü[Ëê8w‘»È´¢íÛ;;!Ú-Ñfh3L%ýúZ}-à]¼k–F°µr´+ÚÃõö:z½ 9:9:9ZÙiìd¹P.”Û­šld-!Ö,Ê¢,±œœä$'‘àz„ž½5žÖ:ËË%Îõq÷Êî•¡‚z޲AÙøßš}8‡sdåžrÐóU¿ê7zollÛØ¦–/Ð8$ɉ»w%î"â­¼•·rgƒt… ówÁŸùÂ}á¾pŸ»0}ßô}Ó÷IER‘T4zSÖ,k–5ˬ]Í®Ùᇠ2€~ôÃô7:K¥Î íoí‚Úµ F[“â¤8)®wxÔ·DS˜q­GO\„{5Ü·DKiRš”æ:kÒn™½Ì¤Ý8%N‰ iµ‡ÚûЅ.@ŽéŠéŠéÒךŒåcùØwDHñx_=@¨5iw·iÙÎÁ98‡Y»r›ÜÒ®Ò¦´)m!å>K|–ø,˜38gpΠ:ÓÐb“Ð$4ýy“ZPz‘€ãèšÀ„´ë<&íÖXj,5JœËár¸üðÃAFj¿`¿`¿ºvÄ:±N¬ë þKs=¢npœÆ¼0ÒØ‚w‚Ú=ÿŸ´›½*{UöªvåEò"yÎŒÆuã$¸®€+XV^†ï¨ËÑi/ÒîR¡J¨ªÜé ¸ ² ² Rÿ4u$u$uD¹cµGð{5P5PðÚ\õ¢è´HíV„ûÙ÷¸-Ün @+h­ÐfóSø)ü€#Ž8ºt5Ù—ìKö B‡ÐÁ] .Ì8¹ÿ›Å¿åR.åŠß‡‡?.äu^çu€kåZ¹Öý~t|†q2Ýy_xÔÿ\³„ñ0IEND®B`‚routino-3.2/web/www/routino/icons/limit-38.8.png 644 233 144 3045 13061246474 14673 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÚIDATHÇÍ–ÝO”gÆïhåc8˜0tÒn­T”@ÈÆ‹a²°LhÒÔ`@ƒ_1"1+'mš`¢t±‰…l¢ ºîF¤Ù5b'bìŒV Œƒé‚ •E>&a*0̼óüö`æõ%ý |NÞ\÷}?×uMž÷½æ‘´ØS .'.'îí(Ž;dÔ×–¯-ÿÃ¥(>§i‡iÇŽÁºo×} Þ–Þyl`½¯Ï¯Þ/bð¯ÖÓë’&F!©3©ÓäˆáF¨Ú\µymV7÷Ùev½ CíÕÚ«?´ÿÐÎ_`ê§©Ÿü¿ ¬÷õy}¿Î·š_§/kº×t›Æ!)1)Qìeö²÷ê£OÞƒO>þäc€ñ/âUh3@*©Ê ¯ÙUXïÇæõý:ŸÎ¯ëéúQ?–K‰|ºëÓ]æ Ñ ÿ_ؾ°éz!p’“¤B8h5Z AP}ª&0°Þ×çõý:ŸÎ¯ëéúQ?ÆQ.Šˆ´”Båhå(DfB÷Âÿ ½z"¡g¡g„bNUäid42 ágá§á§ U¢JÄXæ™Td2 ……Ÿ‡l!D´(?TNTN]_?ʧ""¹§Á0 œ½7z¸ @¨"UÄ"·¸ÃP*CeW¸Â•UFZh¡H&™d£¬* ÀW|ÍתD•°HKŒ?+¦§ë»£~„i‘snÞ>|àð.Rð¸ì箟» åo-Í-Í(Ï„gÜ3nz›¼MÞ&hv7»›Ý0\4\4\dô#}‘¾HŸ‡Î: Íš6?D ÿñÑw¾3ô”÷°ý°xõ#—ˆÈÃÏÁuÂuÆ,ó/æ_¨ƒ]÷þº÷ V®¯Ì®Ì†ÜÁÜÁÜAhÌiÌiÌ»×îµ{a·g·g·lwmwmw¡ÿFÿþ†¡ÞÆÞÆÞF°[Š-Űǹgûží`»iÝoÝOpÐ>æó«ƒÐµ©khÿ‹ú‰3]~+ë­¬Â-"%­%­"šm¡z¡Útá+iú éIªvTWTWˆX/[/[/‹,v/v/v‹¤ ¥ ¥ ‰8óœyÎ<ë€uÀ: ²ô`éÁÒy½´ ­B«1w˜;Ì"Î#ÎÏœŸ‰XïgÏdÏHÒRÉlÃlƒé‚ˆ£ÀQ br¤L¥LnI0ŸŒŸ$ONGŽEŽ™dÃл߼ûÌe/ïŸØ?!–½¹ûŠ÷‹¼´¾´¾´Š„­akØ*’¹¹¹ ÒÞÕÞÕÞ%âŸòOù§D2Ë3Ë3Ë cþ'þ'þ'"YÙYÙYÙ"ÿt±ôb©ˆßíwù]"™w36dl9‘¸Íq›Å"ñËñËä‰öç”Ä”DÕ Á’` ü{GgMg î+X_°Þ8’²†²†²#Žß:~ëø-£¿ñæÆ›oÂù£çž?jÔKí¥öR;ÔÕÕõgr¯æ^…‹Ï.Í\š¶[AËJIQ¢.èïXÇlÇ,,ô¨ƒŽlÿhûGS¤V¥VÁ¡3‡Î:ž­ž­ž­¿’¿’¿iÞ4ošj‡k‡k‡ar`r`r¶É6Ù&à®w×»ë¡p¤p¤pÒÿ™~:ý4x¹÷ÔÞSW>ŒêÁ÷UßW©Q?±;çf ÎRg1¾’ð–eÿ²||½¾^”æÔœšÓøÅËýËýËýà›öMû¦Aµ©6Õꚺ¦®Á\Á\Á\pë\‡à‘à‘àðMû~ñý‚RBã¡qCçuyuyzàžs‹ž¯sdM4WÔ—¯sÌ©œ,ªSªUµB¤&R©5¦ÆÔª£QÉ*Y%6lØVÕ T¾ÊåR÷Õ}µImbQ­ñoýuôWó¼y>À žcú[Ô“wgÂÎàd4™Õáùð<ðwmR›4’Ÿ½ìb¨;궺 ôÐCðŠßø Ôó˜ñ¥Ø|Ö£õRw¾°péÉ¿3~g<°òûäsÿ+ߨÛÅ{{3o°ÿë±óÛaùÒ IEND®B`‚routino-3.2/web/www/routino/icons/limit-27.5.png 644 233 144 3047 13061246473 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÜIDATHÇÍ–ÿOTWÆ_†–a, ­ni:˜XTš­éFckd¶t›B%Ða[ÌÐÈ—ÅZv·iÀM5%¦nc³]”€ Æo¤,6 RúÅo1¦#(Ûm*t]1³H·†Ù Ô†‘Á™¹wÎg®wlÿß_nžsÞ÷yžäæ<爈HÚìWÀ²Ô²Ô2/†-¿3ד_H~!ó£>¨CBQBѵ:HmNm˜ß:¿5:dbcßèŸ1ùãõŒuIsÁÚaíHpÎâ]ðJö+ÙÉ‹b¸Þ¶S¶SÓT}Rõ @ׇ]ò{ð_ö_¸í¼íûF¿1oðÅóË®Ÿè‹Àß?üyÂÀšdMÇžìyÇc Ã(È/ÈMMTÐo)¤(' €QqØØŸí7æ >ƒßÐ3ôc~æ,ÌÂ’ÂÛ±ØÀPl³o³z‘SÀnv“Z@ ènÝM”GyH LlìýƼÁgðz†~Ìù+ƒ""{rÁåuy!ú-@¤Oû6² ²Ô¯´|-ŸˆÃŽ¥iZP ‚^ª»u7èÝ¢[@}¬N¨˜õL ôáæp3=+R©½0ÆÏ×K®— ƒ{rÍ_yADä‰&°lÀC*ìíóö»ÈµAm ÈŸyŸ÷A…UX…㄃ Æá(Q¢qxAqÆPËÕr‚(ƒVoV?fì‰&Á/"rð©[Ê·”ßcÿå?­Wk¯ÖBCjÃ܆¹(o¥·Ì[¾L_¦/š¶7moÚ­¥­¥­¥Ðv£íFÛ q¸F\¦¯ðÝðÝð]8YqÒ}Ò -¿my«å-Ôá’yò 0ÓƒêµÕkA}ó#ú7""ßÔBÏ›=oÂ?þpsÝÍuª"厭ÅÖBÈYåt;ݰrïʽ+÷Bcmcmc-ä¦ç¦ç¦CΙœ39g@ŽÉ19g½g½g½¦1ƒ¿ÁßKV/Y½d5^-ì+ì÷‘’õ%ë ý¯9\®PÐ錀*ùýß~ä°ê€à@pNþíÓÎO;¡î¯ï½Sd ¬([Q¶¢ ŽT©>Rm®ï³î³î³Be}e}e=?«ž£=G{ŽÂœsvÌÙ…¿.t:áãòËO,7ûÔyßmßmÀ;ïмCªCˆÌOžŸ½®ªnåÝÊ3ýåµ}Ž>dgfgfgÂæe›—m^fM¬™X3±V9W9W9aèâÐÅ¡‹?7Ö»³wgïN¨pV8+œÐÚÙÚÙÚ ‹<úî£ï™×.|}ák& òtäiÐæŽÌ‰^·¨&í9í¹„ë ‡“žLzRdð¡Ú¡ZY˜û§Ü—s_)Í/Í+Íililil‘{ul™Hìœì”…"j±Z,"ÕQ{ÔžpÝ¢þ2ýÅô_‰ô_ê¿$ÒW:øøàãTêŽ K¸kuWVW–HzFzFz†ˆGóhMdàÊÀ•+"“6&mL2 OuOuOu‹¤¤¤ˆdø3ü~‘öšöšö‘´ß¤=›ö¬È†_¬¿³þŽ„Ýo¼úÁ«P)Ò½®{HâœëŒuà+¡~öT²µfk ÌtÄNÉø‹cÏŒ=>ï¦ï&jlëXùX9„Î…Î…ÎÁÔ¦©MS›`Æ3ã™ñÄ¥…Šª¨‚ɢɢÉ" vÚ!|:|:|nYƧǧQj‹¶@[`¦¾×Ÿzý)#Ï^#7Ì1rå^Ž9”㾤º¿ê¨£.P»Õ{ê=P‡TêPÙ*› Ú7Ëÿ¢wØ; `ûÁöCà!þeäØ}·úž\¶¹ª\U Úbɬþ®§è) Úµµ‰ð׸†ÂÁR–Ûy›·ãŒý—ïù”O}§¾B1lÓ{õ^"ê¢æ×üÀg³ÉOqbq"þiò?¸wåûºx`ßcæ öÿ*P Ôá%¦IEND®B`‚routino-3.2/web/www/routino/icons/limit-17.3.png 644 233 144 2740 13061246472 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü•IDATHÇÍ–_L”gÆ:iÑ!&.†Ä]’Ú¥ bÂE/Ôáï†! þÁ–ÖÔ…m¹0{µmš*kÒd)²¢Äp1¨ø'- Z+®‘â&5V“ŽŒ36j7Åií˜RgÊ Ì÷}ïo/f¾™©Ý½÷½™<ï9çyžyßœó½""òBâW@[­­ÖòâXûKjiíÒÚߟŽã£d4f4zÚáùÃÏÈïÏï7½)lÅ­üôz‘ºžµ//HjcÉà’Á gM/7½¼´ Ž»&Á~Ö~öÞyk`øøðqö@àZàÀOΟœÂVÜÊ·ê-¾t~ùà)}Èú,볌°${I¶UU¯ùk<á›5°ÙµÙð]æw™JãG —\åB„°V0 [ñD¾UoñYü–ž¥÷#àØäØ$ ¯6¼jwÇ ¼'áÂw -½ØYàC>$ô0^7^gÔ¤š ƒ Ha+nå[õŸÅoéYúq?òë»=TEh[l[,ihÚ,[Œ.FAMkŒ5ÄXF9å(ý}NŸc—ñ†ñš¡¨!5¨yz)3¢çê¹Äô±¢X˜Óq~ØæßææúÉ« ‰ˆ¼ØvŸÝ²Áݪ»U`|@:«ÏëóÌ'%B òÿWŒ±4ÜAÀ\å*€Z§Ö1Ï?ãüø§ýÓö=²q5î'qRG§ íݶwA]0K-Þ‰•ÅŨÙÍ~>û9<´=´=´AOgOgO'ôïîßÝ¿NÞ9yçä¸7poàÞÀoýz«¼N¯;ä>äF}uÿzÝõ:+j–ªÅ·]o»€@ÜpADä«¿Ñwæ£3%O¾eÐqæÂ™ ,h!íí8wðÜÁsÁSé©ôTByGyGyT+‚A·¸Å cÍcÍcÍ)Cþ=þ=þ=°¼syçòNhú]S~S>¬ZXÙ·²…ï÷ÕûêU Œ2 çâ~„‹yïå½§!ðfàMPYqÂAó“éO¦aÕŸVÕ®ª…S]§ºNuýö$z/ö^ì½­]­]­ÿ#îËòeù²àH÷‘î#Ý0Ü:Ü2ÜeÿX·cÝøâæ5ß5@h<4æŠOŽG ä/Ë_fÎ@p68 ƦdÛP]R]R]}'úNôH ¼oÀ %·Kn—Üï¸wÜ;žŠ›^ÓkzS8 GÂØzi륭—`õŸ ]….¸qû늯+B¤.RæßózózÍM”9bŽd̈èz£ˆd‹ˆˆ#Ñ¢žSve15S35I®Ó;Oï<½S¤À]à.p‹¬u®u®uŠDG££ÑQ‘°+ì »DÆÆÆD6®ß¸~ãz‘ášášáÇ­C+†D<ï{ <âÑjµZ5FMÆŒ&Z¨2TyëK‘‰Ë—E¤XD„Ö„þbNKÎk9¯‰dŸÏ>Ÿ}>el²l²l²L¤¡´¡´¡4µ>>> R5U5U5%²áʆ+®ˆ8¶8¶8¶ˆä5æÕæÕŠüñøKû^Ú'‹;75Üü1­"#›G6‹h3‘âHñ­/Ó»rÛ~à¼Õ•f·Ù O^y²ãÉTt&z3z3u5s{çöÎí…ha´0Z˜v…ÊT¦‚Ç-[·õÔSú>¤Á£O{t eY¬_¬Ou%3mEmEÖÀ=:•0öbØö@È~Ão$uêÀÜeîJ›c°ÀBj§ö4!B$ Û°aµWuªNU¯ê™O|¬êøƒÿ†ÿ€ýgûÏ!×5ÇÒ&¿¾=s{frZNS ûu?°ßx`$þ„¢Û¸kÜ%¦Æôïõï¾?ÛmÛmÀÂÓ“ÿÙýV>³¯‹gö=öl¾`ÿ p 懮IEND®B`‚routino-3.2/web/www/routino/icons/limit-144.png 644 233 144 2453 13061246470 14601 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜàIDATHÇÍ–QHTYÇ£“Îb©4-A ‘TAÆ„$E¢¡»²"«„A=l°.$ÔÖC¸ÕCT¦)tÛLʧ`I¥`÷Á-Ù Æ6m͆¨V'ËaæÞ{ÎofÎ\KÙgÏÃÌ|çÿÿÿÎýî7G€BˆÜä·×J×J×’DìúΙÏ*Ë*+èJÄmHÛ›¶÷¯ §-§ ïJÞù̉5®óg¯Â៭§çE®p&2L#­4·@UQUQV~"þy<=žžOÔ÷Ö÷Üj¿ÕÎa? ?˜,,'Ö¸Î×ë5ßl~Ñò…¾àîs÷¥Aæ¢ÌEBÀª«v®þ>‘ð|5T”W”¼J•®\`¿²ÉV¥À4ÓèñnV¬ñd¾^¯ù4¿ÖÓú ?¼%Þ!`Ïþ=û=— žuÂQßQŸÖ3{€“œ$¬ikÀ®µk‰P¤‘N¬q¯×k>ͯõ´~ÂøüÙž BeVeðÀ|2Gæ€,1;ÌLõ“º©n¢øb(¿ò+?ÈrƒÜÀXù­V«Sn4ݦ;µá|Ügî3µÁ3ÁYR!üçž ÏÄt„dH¦wÙ/Ìmæ6fT ©s‡?~PÃjX Ï‹RjXM©)9&ǘáS‚BC—Ïå"Äq!W>®|\)ÄØ¡±Cc‡„x™ñ2ãe†ŽŽŽB†És;?-´Ðä’CÎTÑb¿²_a’k…¬T£6`U¦W¦ë“ú¬ó/ØÿÊ{»X°÷±…yƒý5smáÈv8IEND®B`‚routino-3.2/web/www/routino/icons/limit-44.png 644 233 144 2255 13061246467 14526 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜbIDATHÇÍ–_H”YÆÏL;:Bjãèa´þ†¡@ëb7aa¤¯¤b#­P“•ˆØnÖ¹êBØ.bw‚¥  ©¦–õBJ‚¯ÂiÛèjjÙ(¼HEÖ4×Ô¦ùÎ9¿½˜9ß÷íš±—ž›™÷}Îû<Ïœ?ïB!6ä?ø7û7ûKr±ÿk7l 6Õüœ‹/Kðôüã ”^,½ººªžº±ÁÍ|o½.¿WÏäÅá&  }ù¸o?¼=X‘‹¿¿ECEC‹6ôÜî¹ p+u+ÅI˜z8õ`®q®ÜØàf¾©7|^~Ñ÷}! p7p×7……BÀ–=[öT“›0V ññ¯Ö½Z§ý ÿÖ³^7 ,`ÆŒ'6x~¾©7|†ßèýœå±ò˜Ð|´ùhÑ•\ÁÓŸ ·²·Òèe‡€sœc=Ø ö€l—íd@ß×÷ðá76¸™oê Ÿá7zF?çGü{o° %Øt ý ò|ü­©Cdó€Ö]£k@Õ«:UÇŠ¡#ºZWƒªWmª j@ å­–Ã^~£gô…×PäG(š*šZøžËçÒáßÏ;ÕªZYr2ª¨ýX?ÖW"B„ÈðEóEu¨‡o¿«gôs~òÆ.ÿÇÏ?ëבµgíYwôº^×»:£Ý£Ý£ÝnH7¤Vú=6zlô¤7¥7¥7yVr† м·_Û¯=zŽ~ÎOÞØoßÂÀüÀ¼SÞÍ{Ù/ûÉp”8qàÏxÚÒ–¶ ¶³¶³¶¬€°®°}Ä>bZ«ÖªµÀºiÝ´nº¸*SAÆeŸì#ãè9ú9?~!JFJFê?"¶;¶;¿¿ÂwE ùŸøŸˆBQ'v‰]Bˆ­b«Ø*D¢9Ñœh"3œÎ Qv¯ì^Ù=áŒÞdo²7)D&š‰f¢B„“ád8éâ|É^ö !>ó[~K:zŽ~Þ„ŠCÅêO˜™˜™p¯½|j§í´ûKS±T,ƒÓ§7NC[¬-Öƒƒ;w ÂùåóËç—¡²§²§²ÚçÚçÚç &Y“¬IÂx×x×x—gK¿S§Ô)o›1ú9?JFJFô LíœÚéYò¯d¹,wã-7Zn´À¾‰}û& z)z)z BáP8†ÙÙYh­h­h­€è…è…èTªUpGÝQw”‡¿IËbï©4ú9?«Ÿ1äuy °ÄÈ„LÈ„Ks­ÿZÿµ~ˆ§â©xjåá_ — yRžÿÏØê·ò­=iOzn姺T—‚z©^ª—°¼myÛò6˜χçà›t“n5¦ÆÔ˜‹¿yñæÅ›Àï<âkEš/ÿª·ò#} Õ©:Yâ}>óšI&EÝÞä‰g™eÖkÞñœÖløþö±ÿÑù³ªCu¸Ÿ>ÎpØ@)¥+·Òƒ7ЀuZ&‹-G䈗Õοfÿ+×ìëb;ÇÖæ öIc8’-ʰIEND®B`‚routino-3.2/web/www/routino/icons/limit-151.png 644 233 144 2533 13061246470 14576 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]L“WÇ -‘‰\4"ƒ›,‹—ÍMetêcK0Õ ñsY&3è’™Ì%Ü(!qš¿Öh;?én4Z0˜èÙÅ2°Y€øÕFPÅúö}Ïoåô­sz͹iŸç<ÿsÎû>ï‘é“¿ŽYŽYŽiÉØ±ÕÎç¬ÈY1ç×d|Ô„Œuëþüò;ò; Nœ´úìXÏëút¼ˆÍŸ®§ó2]ìDv ;Q5ï‡úòúòœ™Éø`7ä^ʽô<Û®l»pñÔÅS|Ñ;Ñ;cUcU`Çz^×k¼æKç—ýÿÑgÈÊ‚lW¶KJªKªK¿Mü] µ«kW<Ê|”©`Žyä©* F =þI‹õüd½Æk>ͯõ´~Ò@á²Âe"P×P×ûKÐwZŠ[еžq h¥•ͯõ´~Ò¼~¶mËÁ“ãÉÆŒ°ò­|°>3N'1ÔÏꆺҖÍïÌ&³ Ìùæ|s>˜[Í-æà{šiNí¤²>5N'0ÔO‰šDMjÁ=ÄÖë m°myÚQŠˆ”ÂÊ}œû8–+b¥W™Æbc1/Ôoª_õcÛÜæ60Ì0üu˜fŸÙê’Š¨€uÚ:Í‹Éã^3bäFs£±,ígÒØÑÛ°cߎ}šÎúHuF§½âîOºv/„!ïwÈk çççÀaïaïa/÷÷÷Àøàøàø ]×õ¸k kß,,·w\ÝHêÙúI?“Æz›¹ç¿î¿t¨F°Æ¬1â¢@^ ²vgíÎÚ Áþ`°ggg °¥°¥°êŽÔ©;¾J_¥¯†K‡K‡KáòÆË/o„¬½Y{³ö‚¥‰IÊoÜüXëùŸùŸic½ÍÓÂÓÂ*ÀÍ'Ïž<³W¨²Í^³VÀ ˜P4R4R4¡âPq¨z|=¾¸Â®°+ uR'uçÛÏ·Ÿo·y.t^è¼Ð î¹î¹î¹pîà¹ç¤õjý/Z­íÇ!’Y›YËò…ë¹ë¹è1ª–ÐH£ˆ×áÍôfŠ,è[з O$V«ŒUŠÌh›Ñ6£M¤ánÃ݆»"µÁÚ`mP¤)§)§)G$ÅCq‘ú5õkê׈”•”•”•ˆLŒMœÔ“®›]7ER~ÞöVJø~û‘ÿ||Ñø"xyëå­—·ìg$>ŸˆOÀˆ{Ä=âµ]mWÛßlÏŽ—ÆKQ`µYm@ç;ßʲCvÑ}E÷k“µ)Õwl§­ªUµ‚:¦Ž©ciùÕ¡:€•¬deàUjÑI¾ÿ;ûØÿt~Cw~sÀfš{Ì=ìÃßîC|ÍNv‚ «° ¿"ôƆ©þG³Ú¬Öi£‡„'Ó“©wêµÎ?e¿•Söv1eïcSóû/V-ʱßô¡À.ìÂ.zX¶E¶E¶…ds¹ÇÜãU1Ó_Ëóæ-Ì[Øôï‚”‚”‚¢ç½yoÞ›ÄÎrˆ7m\.Ìà*¬Â*欘/æ‹ùâMˤeÒ2ùòŠ|M¾&_sVkÑ[ô}cûTÈTÈTHè_KKKp5tSè¦ÐM${¥d¥d¥X¡\¡\¡ìsû}ûzûóvsþmñìñíζƒk©3u¦Îb2ÙIv’Þ%¬7ëÍzÿðÍä™É3“g^Uº5º5º5 ™›ú6õmêc¬ÝÝÝä-Y¶,[–)ìÃ>ìƒS˜Â€ØaaÊìiö4{â­îÖîÖîVjmöoöoö3ŸF?~ýÞ…·Â[á½ÚAØ)ìvn,¡©4•¦%0kIÎLÎLÎ €V´¢Õó%®Ž«ãêZÏ[¦-Ó–éW7«Ö«Ö«Öó«>Jø(á#î¬Ë¸Ë¸Ë8T˜ù˜žúR_ê ýèG?'8Á À&0À~ðÈ àñOðܨó¨ó¨3î_<~ñøÅã|òý–û-÷[¸¥r©\*ÿÏ5~ ¿…ßòFÞÀxãá3FÞ)ï”ww‰»ÄýËL]›º6uíÕͪxU¼*ž+5%5%5…ûÑEé¢tQb¾P+Ô µ€/Æ‹ñàà Ox¤ŠT‘*€h‰–hb bÈ-r‹ÜšÛaNð|_`Þ¶yÛæmÃ|»ÕÛª·UoóoÙãÛyì| ?ÁOð±+,µ–ZKmÊr·x·x·xê“p&áLÂή‘qq±¸X\ g6Žcãæs‚9jRMªÂ!P‰JT`Á‚@AAšL“i2Àö³ýl?`ˈ³ÝÂ¥„K —¸³n n n ÔÇÎcçáC†~<øië§­Ÿ¶RÚÕÕ%6)D ‘B$3ƒÌ 3È(ý)ç§œŸr(íÿ°ÿÃþ)”‚RP>_G;i'í¤”†ÓpþüòÀéÓ§)5jZ£–¾h“í1í1í1ân;á}xÞ'|·ë×'®Op8hCІ  ¤#Á¤Ì æs¸»ñîÆ»âcÅÇŠ׳®g]Ͼå¿å¿å³1gcÎÆèBºz•^¥W´£íÀÝî~p÷ Ä\b.1ZµV­Uã¹%! IEEER;3ÍF³ߪcÕ±êXdËÛämò6LÑkô½ÙL6“̀ƨ1jŒ@hEhEh¸+qWâ.@©‹ÔEÅQÅQÅQ@hdhdh$ îW÷«û]¥®RW Ô.«]V» p\í¸Úq5À¶°-lËsN!\ÂÁɳäYò,Ly­ñZãµÙ]Æ.c—… ¾Àø‚ø3˜ Ì…¹çd¤’B@0 FÁVVVá „/x€û•û•ûííí¤cÒ1éØóûçœÎ9sÔRµT-+++«Ô*µJ³£`xŸÙÎlg¶(Cʈ?Ãz°¬­Ã=>‹Ïâ³Àâ8Žã8(›Íf³Ù@Üò¸åqËOOO Í©Í©Í (ó.ó.óÖĬ‰Yø û û 5·kn×Üܺt?l=°õÀÖ€eee ©–TKªŸs’ëä:¹j›²“]“]“]¸Ç¨£¢ÕlÔ/Q¿Dý²¿É°Ð°Ð°93¿i~Óü&²Î£Ø£Ø£ÓˆCâ 1v;ŒÀ©´Si§Ò€!ý~H¼™ófΛ9Àúµë×®_ < žO F^#¯‘ ( Ð—Ô—Ô—˜M¦Fà±ú±ú±pMsMsMt.è\Љé{’{’{Hš4/h^€Ïd.2™ _È  HÈ«àr¹\.—d755 *S½©ÞT…ýø¸z!ôB(ÀŽpH¿˜~1ý"°œ,'Ë T ÕB5Àµr­\+VVV8I¤NR@ø\ø\ø`YgÖ@0:FÇè`¶ÅQhú4}š>q$ƒd'‰@"|#%'Nœ †[†[†[Nÿw¢v¢v¢v»§:P¨2¶õlëÙÖÃ|zðéÁ§0KZ$-’ȸϸϸÏÞwçÝ™Œ™Œ™ E—¢KÑAmAmAmÏSkɶd[²œ‘œ‘œ YŸ¬OÖƒ†\ ¹r¤ærÍåšËâTÇÒŽ¥K…âžâžâÞÝ$«Æª±j^?Frä<Èy èx娤BR!©¸)Ÿœ˜œ˜œx5uÝWë¾Z÷ݼ/x_ð>rãIÉ“’'% ìyö<{„$’D’Ì#€ê¦ê¦ê&àíí ÐWè+ô@TŠJQ tuu¯ýüÚϯýŒ)m®6W›‹m§ÆOŸÇE‘¢HQ4MYÊR6t–` –ôü‰c*˜ ¦‚íD#Ñøh¥˜)fŠ™;¿và8îÜ~ÿöû·ß§~'üNø U+Ô+Ô+ÔØBCh ‚‘ ô›êF4¢S$È#ò`CØ6Xö`Ùƒe0þLñLñLçzS½©ÞÄ«¤#Òé2NÆÉø~±ˆElÏŸh1-¦Åœ§­ÍVÎöÜr’œ$'o¤³MlÛ”Y7Ûv1Ç.Ö_¬¿Xϧ™¶›¶›¶CAÞ!ïw0.zˆ¢@eTFe‘ˆÄ߀ßÂ-Üš›Ùµè|¥êJÕ•*!ÃTn*7•sG¥‹¤‹¤‹ª üûö;|ää!yä<0€~#GŒa c¢+Q%Q’CGŽùçÖÑG?ýx ó,øYð³ààkƒ¿Á_È c¶ÚÊÚL¾$_’/Á!©H €ª¨Šª@‰Žèˆ\Û`Û`Û ÝМٜٜɜ{Éë%¯—¼ÎXŸZŸZŸ&½=’<’<’<Γ&ÒDšÈ.Û‹}boœ§lãÑIt0ïŽîŽîްìµìµìý䣫£«£ëÐ…>MŸ¦OÃ7$6$6$Ò $¤“tÈÄÓâiñ4(äCÐ1:FÇžð˜DUcpcpc0æ9êõŽz@ ÃİO1ELSôpÆ&Å£³84vîdωí—DöÿSÄÏjWÈ «È*²jÃÖÙ_ŽþfM³¦YÓÄ=ï‰ï‰ï‰ÌºÀ¢À¢À"l{Å^± f ³„Y3ŸÍgóÙ}íûµï×¾‚Ÿþuýëú×Ù~‡`‡`‡àâÕ³E“ù£X*–Š¥ÜQh¡…–ÿØ.‘‚‚‚‚‚ŒÛw¶ s²i7æݣ¤„”’µL$ÉDfÖͦ˜9¦±j¬+Ÿ6Z>Z>ZÃ0 ÃÀþ•5M7M7M‹SK–>,eûö;ìwØÿï«æGæGæGûôÇôÇôÇ6@•ý<µÚùæ@_¶/PØÜÂ^ìÅ^ò7õeõeõåâ­»v;ì®*0y˜Ѐ!ÖÑ:Z1À\b.1—þî377'.•”JJ%¥L›Ê¦²©Í-¾—|/ù^ŠŠ ×Å—Å—Å—é76¿àÔïq0ø{A»ólÚÍC:Ò‘Îý‹¤’ò_Ú@hÃ_wȽä^r/¦‡Õ²ZVûÈK, ÅÂ4]oRoRo0 ›?{c9ýGÿcÑ?FgIEND®B`‚routino-3.2/web/www/routino/icons/limit-83.png 644 233 144 2447 13061246470 14526 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÜIDATHÇÍ–]HTiÇŸ›tÈÅ)+ 7*R v!+eŒÈ@Ф¢Ú‹-«‹E–Úîú€’ÈR°M¡Ö’d-ÒÄH)²©¯,ÁÊM6pPWk‡UsÎ9ïo/f^Ïlä²—ž›ÃóõÿÿÏû¾Ïs^Y~ 8ÓéÎøí,±ý1[c¶fþ²¯šàØéØÙs ªªo&Þ´úm[Çu~d½ˆɧý²PlGô½è{Žü°}v¯Ù½&&%dWøÀÝìnþÛ€Ã-‡[î×ݯã{ðwø;ÆóÇóÁ¶u\çëz‰/g?ãW««Õñ;DÏž/[2¶,+ %ü¶ жmŠŠRN0G€XbU> €~F#lçëz§ñ5ŸæéHÎKÎ{wìu׆ úëáDÚ‰4ÍlÎsžX0FÀÜoîç(ŸòàÀ¶­ã:_×k<¯ù4Hü{o+  8¦8PÁ_ šOͧÖ)ëAë§âPÆ{cÀåP¢dfŰ>XãÖ8ƒÆã XÝÖ´5ëŒu† Óa<¯ùfø%RÐW?ÛïöæÁ[ó­ LPV…UÁ„2É" 8ÇINÚB¨§žzP5ªFÕ#Œ0¯¢œr ™<ò¬ Ö&˜Ôøa¾þž°°«Ïáè飧g¾;›1ã½ñp±„%¡ïxuýÕõWסâEÅ‹Šг¾g}Ïz[GŸôIŸ@åÊ•7 ë]×»®wv\àÂ…â/cÈŠà›áé ëú>6|œ)?h¹§§ù¤=mýmýmý¼1ycòFØwqßÅ}ayÓò¦åMp7ónæÝLHß”¾)}ìêØÕ±««Åj±‚NO§§Ó±åeÁÁ_´ùCzœ"ñíñí9_‹äyó¼áýG­L9Óœi­=–ÏòY>w»Î]'²­v[í¶Z‘E‹ ˆƒA‘²Ûe·Ën‹ì™Ú3µgJÄsÙsÙsYdÚœ6§M±ŸçN¿Ó¯ñµ6HÏ<‘¨¢¨"V‰¸^»^;tÙŸRâ(w”K²ˆ´H‹ÈXêXêXªHŠ;Åâ©{\÷¸î±ˆ©©©È†#Žl8"’åÉòdyDŠ»‹»‹»EF{F{F{DâÌ83.RØR-Õbó‰ëë$‹D­ŒZÉ*øöøvuüëüëì¥6óh#Ú¶ }…¾B”&•&•&Ùþ\o®7× VU`AABABA‚ÏÉÎÉÎɆ[n=ºõ(ÿ[#ÓÈŒh’þžYϘJ ¶[í3Öw¥ïJßXXX€ÄªÄªÄ*(YP² dŒfŒfŒf€7Öë…¸kq×â®ÁÞ½za²a²a²!BÇ:£×èýŒÍÞ•z0>ä%/í®œš˜š˜š€a†Í­Ö›ÏH5RTîîî³Æ¬1k"õ0Î8*bðþWW~aŽfæX½UÏ„úFR‡@5«;êNDûoV›ÕfPkÕZµÔÏâ^•«rLŠ(=™ú_sì “Ÿðd6Ígæ3ë˜uŒ ßq‰K(åSOÔ ‰F#V¤ŒsœÕ¦ª‡ÀÏtÐë¸uœ †Æ ãÏ>ùçì¿rÎÞ.æì}lnÞ`ÿ8?ÖpD<IEND®B`‚routino-3.2/web/www/routino/icons/limit-21.3.png 644 233 144 3000 13061246472 14643 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܵIDATHÇÍ–mLTWÇ` 3 ÒteZvIj7¤…tSÓFV¢ £m i7ÚÅé6[ĤnYdd¡1¾´F UR1ƒ‹¥M•ИÜFÄÊ¢Ž'Ý õÂÀ83wîù퇙ëeë—ýèóåæÿ¼ýŸ{NÎÿy"úˆ]»461‚cÿdú­«­«ÝÁ‡ÃSSr­\x 鳤Ïôq#~½ˆÙ>Ÿá—'Ät$´'´ÇäEñ(Í*Ͳ>Á n°¶žÕ ¢³¢ ãxÇq*aââÄE€Ÿó~Îq#ߨ7úÍï/{~Á/}ùØ—1^HˆOˆg¡³0ãÏ‘„Ñ XW¼®àǸãT,„ï*˜aÃîÍÃF<šoÔýŒþŸÁ™G eeÊJxõõW_·5G F>‡ê%ÕK ¾Ðià#>ÂÚŒ6~3ü&Pnå †0±7òz£ŸÑßà3ø#ó˜[9'"ÒX== ÿ Ô§yCO‡žý¾¶@[@(:©2FÖ¯çê¹ jU­ªÅ´I&˜x€”îךƒæ 9CNÐû"ý >“ߨÊ‘g÷ƒmÆ63cQAOŸ§Ø@¨jsü½ìâ‰'t»n×í N¨êļ¦˜bjÞÍnvçé¥@e«læØíÿd”/ÊOodaBDäðn)ßRþ`^JønûwÛaßÇûö5 †º‡¾úš‡Ì}À}À}n&ßL¾™lúu·îÖÝ&)ÉɃÆcÍͨ+7û‹ú‹L>ÜR¼¥Œy$|EDäÊv8óÞ™÷ ÿݱ—Ç^Vo9|¶C¶CVÝ[õê ývúíôÛ0X7X7X]³]³]³WWW'ל\srÍÃíÛ1¶’ë“ë“ë¡4­4©4 ROyêýí{×÷.õœá þ"2O¬,°7Ù›²_)(/(ùÏïFÞy?¦ù/‡«¾©úFzRzÒ{ÒE­ŽVG«È@p 8±;íN»SdQê¢ÔE©"j­Z«ÖÊCî ÷†{Ej-µ–Z‹HÙš²’²‘_}šÚ“Ú# Á’©Æ©Æ˜f‘¼óyçEbÊí×ìײ_BIÖ$«>¬*îÝ}°´Ü»¸¼/£/²r²r²r`³¶YÛ¬A¨%Ôj1W¤ ­ ­  šv6ílÚiúµëÚuíº‰}~Ÿßç‡ ç6œÛp––/)^R ׇò‡ò¹þ"è{?IüD½ÁQì(Ví0ýÁôpuëpÕpØ:¬ÕÖj¨·¾²¾|Û|Û|Û P( š„ùÞ|o¾ŽfÍ<š9ïPÖLÖLÖ@KwKwK7ä,ËY–³ÌŒg¿ð¼ÿy?[ÛZÖZØØá´ÇGUí±jïìW³_]½$òí…o/ˆôýqð™Ágx;,¡ÑШ;Vt¼Øñ¢HZgZgZ§H—³ËÙå4·ÊZi­´VŠØ6Ù6Ù6‰Èe¹,—E Ç Ç ÇEr»s»s»ERÖ§¬OY/’X’¸:qµÈo?÷ásJ°låmo´ñ¶HçºÎu"±ÃþLæÕKBCôT²µjkøÛ#§äÎÆ_nõÝòÞò¢Æ›ÆŽ„ûËï/¿¿Üüóéþéþé~ì ì ìt]æ©døç;NCp_ˆ ¬©c`èÊËPÌñÿš?þyØ‚ ¨¿ªzU \ÊÅ\ô²*â7žÏ€mÚ6=c¡ßбÿ¹Õ ¨ÞX±±ÔçeV—ÂŽ°T»æÓ|„øg9k*? I$¨£ŽºˆÊ£@yÕ uD}‡o„oRgµŸ´Ÿ€#‘þðšå5 ø¥ò?ºwå#ûºxdßcæ ö¿é@ ¾^?ÉEIEND®B`‚routino-3.2/web/www/routino/icons/limit-185.png 644 233 144 3000 13061246470 14573 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܵIDATHÇÍVH”w~Þ;Í»Èò´ckZN³ ºÁ´uÔu±Jlw%Rh ¦k°ôÇ6Xƒb ±ˆVÊ­rm3òRœX„Ó+…6ƒ5Ó-ÍÌ ]Cô:çîýñ}öÇùõ®Áþïþyùüzžç}¿Çóù‚dÌ>Aš–š–šÆcSM"oÙjÙêø!¥“J™Röë§ä¢Ó‹N“¤íœíœÑŸˆe]ö'Ï üd>™G‰´æ´fÅ3&+^©xÅbÇ_„Hk«µ5ª‘ï´½ÓF’--|Ÿïï%É Ï„‡LIJ.ûå¼ÄKÆÇáÿðdjGj‡ò€L›—6 s7çnÎÿ0ÞðG>éÛæÛF’ÌÌÂD’¤&¹€ „‡d„Êß“¤XÖgûå¼Ä“ø’OòÇõ€\¼qñF€Ü±kÇ.ëÙø@ÿwäÇ9çH>µ•äQåR‹h’Ô+õJþCŠ‘$*d"–uÙ/ç%žÄ—|’?®Ïžíñ7H¿Åo!9E’ji,2‘†[ýVý–ª8$šD…”lôw»¤6¤ iC¤xAØ…äŸá©×ê=@¡¯ˆùc~ªzZ¢–ü\âïTwª$£’É‚V|IÃ:f‹¤ƒÆ 1w4¥úêR]œß‹>Ñ7—§˜b‚äá‘Dž l`)ÆÄ˜KÊkÔ¨‘"OäqZⓃ=ƒ=$iX#‘©Ç—·ß ÓÞ¯÷~®ËMËMÂÉÖ¡uàŠ9?µ'µÖ›#7[o¶ÃK†— /›bSl@ß@ß@ßpüÀñÇýûö?”l%[É.ç^νœ 4ø¼ ^àLÅ7¾o|°Fs'm“6\–»–»„»ö<Úó(]“zf…ýˆ_ÜëÝëÔ€òªâ6»Ì.Ä/ÒéP<Åž ž À=ýž~OnÞ½= l*ØT°©¸S§þN=à½ï½ï½\-¹Zrµ¨½U{«öp}åõ5×ס7C…¡B(Ñ«Óû¦÷!çW^ågî)÷Ôì1¢èÇ`a×Â.g1¢n§Û àPÎÒÂ|àoLb°{í>»`%+Y ËŒeÆ2`~Ëü–ù-Àß߆ƒá <<<DÇ£ãÑq€:è¼!o¯·xñ­ìóÙç‘ÆŽ8Ÿ²ÒSê)¤`ö™}\Mó¢ó¢R1þø6ßÊMåær3°ºbuÅê àéÈÓ‘§#Àdædæd&`‡vŽFG£‡‹ÃÅ@A  PÊ–,?l·l·l·û_Û_´¿ø©ýÚÙkgåÍY¾×MaSzL€Ñn´+¿Ah^Í;'l1R1ŠÑ¹Æ€1` ŸÅgñ³/f_ÌÖ®+\Wë‚uÁ:ÀrÒrÒrh/m/m/V]ZuiÕ% ºªºªº È9FŽDÒ®×êµTyˆMLr~V±’•ñE$B$/3À@Ò¼ÇzÖSˆ.=OÏ£Ê+ú'ú's«®‡º?ÅŸ"¿Ô3ÎÿÜîÊçövñÜÞÇžÏì¿pÖ*,£ÖŠåIEND®B`‚routino-3.2/web/www/routino/icons/marker-38-red.png 644 233 144 4231 13061246466 15437 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜNIDATXí—kL”WÇŸ÷2•‹’ª(ƒÑ/ˆ5«¬©‚8hX°Õ6*Uh¡vÉn­7:ö Y@EVi—h-]LZ‚ó"ÛR±q6 ©ínÓµÄê0l-£À ˆ ó^þûaæ¼óÎ$«Ùì>_à9ç¹üæœÿ9g†ÈoS(ÄøÕR„!qÑ“š'5Oj^—&*¢"*ÿü -¥¥´ðOkU$’H"óP_«bñ,ŸÕcõCûñ«CyŒ|{i/íåm¡ó3’Åf±Yl¶ rû¸}Ü>$.ÞïŽwã⦛›nnº léÛÒ·¥Øœ¾9}szÐgó,žå³z¬>ë÷xâW…úsNò#ü?â\ÊV(±(±(±HyëtçéÎÓÚSžžž0†QŒb€N8Ý̳x–Ïê±ú¡ýæœ|<™cø~¾ŸïwþH¿œ~9ý²ü‡Ïásøà@À´-EK¬”*¥J) ,S–)Ë%GÉQr ~`žÅ³|VÕ×Cú›ct4ÎÆÙ8‘xD<"©ÿŽ%Xª,‡-‡åìmí9í9xäz¯ä•Íéëñõ˜PW©«ßã{*BmBUGÍésø€\ï]ï]ho«ŠªÀÃÂ,U–rK¹œÃú3ÆG¦;¦;¦;¿ý5 02—›Ëµ¹½÷{õ>Âp ŽG9æò <ø¿‰´íÚvÀ@½«ÞÔ "ùM9&Ÿ—Ï«õÞw&:1l>d>h>¨Íe<:Ÿ¸[Ü-îî:Â&Nž*P`L¶Éƒò hojoð¶O´OÀ'»>Ùß”}S‰H£Ûs£çÔ}U÷o‹¥Åãöq; ÛÔÕêj=xŒõ×W6„4WüâøÅñ‹Q5¸npÉàÀ !#‰}æwâ߉üç¦MŸ6Ýè¿×ñ^‡ðìÕ³W€Ò)b¯Ä^1Ä{2j3j$=þµž$®{Pò `<ŒþiãñÇ7~2…×èÑÑ£@/ÑKp¬àXèDÚ‰4#0³ÜÏs?€ÔÙ©³ã?´ÿÐnˆw}Yûe- ÷ ôg<Œ©dS–)Ë”¥Ÿ±*Ö†µa"šQQEDÔ´ iQî³¹Ï5µ6µI¥R)QöÔì©ÆdËõ-׉ˆnôÝè#"ÊmËm#"z¹ïå>"¢´Ò> ¢ÈŒ¶Œ6"ú4äú‰05šMú‘O€â¯ýýýäðò^ÞË“ ìäÛùvýNHˆhdëÑ­G‰ˆÔvµˆ(fþL"¢®]‰ˆb^yÕØëÖ‰['ŒþHÒHÑÃûïÑ„Ãî°Ñ-÷î/ˆø?H Xp9]N—“Œø>‡Ïñ –¸êÌÞº3ug ˆt½æz š›xÝGÝG»tÅyÅiÜúÏÜŸ¹àéŸþªÛ«Û áúMº lA œËKÎKöû{u[W[—þþKåR¹Tß Ë…åÂò•ì”%=“X”X¤ÌéÝúSóOÍðóþŸ÷ãe2ZO­€Æj_[xm¡´õùÖç`IÌ’ØáÞá6ªïæá›‡䯖Ŗ@é¾Ò}ðަHö&{Uýf3„StVtVt‘xI¼$^jè×/üÍ™'3O*%¬¾j-‰(‰€RhŒßÉï€¨Š¨ x½çõãJ·¬jY¦Ó]¢K†ýùêÇiSÒ¦@†b‡b¢ëÅ/¿ Žé€ÅB±P|#ÏïG¹(Ô?4¥š™9ëX‚µÔ:Ý:]ËÔwnj‡³Ã ¨ÛS·€§ë•®W@›¬M¬ÅZ¯÷nÅÝ ¨/¨/”‹Ï\|&¸¾gGl5¶äêOh%_ÉWޝãfr3¹™ O‡ ÿÐÏW÷"÷âÚZ®kãÚ˜VÔ]’ýì·g¿…¤k·D§Î3i´ €ƒ8@Ó²µlÀGøÐ25«fÕ£=ý }•}•@RdâPâ¼[_Érá á «EGË¡ÊÍAÖ Ê  ±œld#‘àîwÞjÑŸÖZó,ó,9®÷]G¶#;ØPË”·Ê[vØ Úe¢“ÔquÐò|šOƒþïUØ~mÛȶ¥DFÅq@ªHØ“°'aoá-¼…; +d˜“ó„ÛÂmá6waîþ¹ûçî'2™ŠLER…®Ý K†%è]ÕªZá… €! Áð@™¯ÌWæ^ÍŠš5+üG“0Å™âLqýã~ߺÓ\kØÖæv„úæHSª)Õ”Ú{ΠÝRk©A»qrœRï©÷Ô{A-v£Ý€ÕÕÕ­mÒ5ÍGóÑÛþ&ÅÃø"èñBA»\ÁÚM\×À5µ+Ù%{P»²]¶Ëö r%O ÛGXÝ'nõ¿€‡9ÆF.IEND®B`‚routino-3.2/web/www/routino/icons/limit-29.3.png 644 233 144 3071 13061246473 14664 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜîIDATHÇÍ–íOTgÆo¨@ DIt”hÔŽQKå­L,lCý ¸L»Y¶ ›èÊšø¡I±øRÁ%VÜM +ã’lꪰ†w„8àKLEØ–Ž0æÌy~ûaæô°ý <_N®ûåºîœç<×óˆˆÈ·@ðúàõÁ~ü;3jµÇÿÍÏù ¨(¨h¤VÖ¯¬ˆü:òk}ÌÄFÞ¨_Ú/bò/Õ3âò†˜–– Ì>¥‰¥‰¡«ýøË[ÖÖ>¯AÅÕŠ«m—Û.óxÞó¼àÇÌ3ÁÄFÞ¨7ú ¾¥ürìWú"ðzçëAO ÄbØ÷bß‹û£¿`" ó ó¾íû×T0øf€pÂU&àÂ…ñÌ.ÁF>Poô|¿¡gèûçˆÎˆÎ÷?|ÿð‹þ†±f¨¶V[ =o;ð9ŸšKsø>ò}„Ô-u € ‚ÀÄFÞ¨7ú >ƒßÐ3ôýó˜K¹ "R—{{ x»µÇÞXo,è?k!ZÞÀ¤Jwé?è?€öB›ÕfAUªJU‰ùÌ1ÃÌ/Hén-\ Ç«= ðuûù =SßXÊ‹ˆlú Â\a.×2µèìvvÇÈõŽz‡:¸ÎuÐݺ[wí´Ó¾dýìg?I&™Kâ‡8Ä!à&w¸ ’U2 œ ð¯èô¹ãŸGx."rî6+ 6}ëpHUœª9uøÔaÔÐàPßPŸ©7èt:á̶3ÛÎlƒGãÆ›y½WïÕ{M<–3–9– u—ê.Ö]Dõ=¾—w/ÏÔS‹Ž|G>óˆ¯OD¤¯ :>íøîU>L{˜¦ÊÃ_†5„5àÉJÈZ›µ6•l*ÙTWº®t]é‚ÄþÄþÄ~Ø™°3aglݸuãÖ0]9]9½dI'Ò'Ò'Ò!ª6ª6ªJוF–FÂZOÌù˜óxþû— T9tÐø®ùçßøŠ +.¨XX€üõZëµV¨9~¤èH‘)°«fWÍ®H“4I(ˆ/ˆ/ˆ7ó)©)©)©Ð¨7꺿ßx¿ñ~#4œh8ÑpÚ¶•·•ö“É%É%p³¿çAÏ×·®oA_µbdňj¼‘¡‘¡ú¨ª˜É›ùåÓ2Û“Ú×¶&[“­ 6‡Íaƒ§éOÓŸ¦C’5Éšdûiûiûi°ÔYê,uÐÚÚºdIKõR½^º_º_º¡¸«¸«¸ Ö°æ[ó¡÷þpÖp³àÎsçþEÄÙˆ³úh°úJËÖ²ƒFƒ.X’,I"ƒ¿««’èœ?åç‹ìKØ¿/^älÊÙ”³)"óóó"›ã6ÇmŽÉŽÌŽÌމ*Ž*Ž*±Ú¬6«MDÑcô‘&g“³É)²{ûîí»·‹´å¶å¶åŠD¬j]Õ*2rxdõÈj‰ ¶ÛE¨÷åúrƒFƒÕó×ç¯Üùîöw·Eº÷ ¾9ø&}âðNÈbûTûãöÇ"kn¬¹±æ†Hououoµˆ,—å²\ä䆓Nn)..I¶$[’-"©;Rw¤îÉpe¸2\"Ñ{¢÷Dï‰(аGØEl—ß>òöYümFÙ7eßpPäjáÕB‘àQ÷[î·î _v%Ÿ|öÉgànñï’éßL¾;ù.<ë~öäÙÔdá¤}Ò¯Çëñ‚·Ò[é­„©ãSǧŽ¹ä’ Ê¢,Ê///f\kÕZµV˜þçô¥éK(_ÃbÁb¹+ý8öãXÃpÏݬéc`øJÀg’ƒQ/bxA±€x#haI¡ž2òH ŽF™É€3ÌLwïó<•S©¬/»º{õZ¿Zëß{¯&pǤ'&šà¸Z›ñCÆ?PŸ¬‡Y³.ÑRêA=rßåÕ¼šW‡ï°VY«¬UôSœÄIœ$éÐ@ €^ô¢ÀìÀú©lµlµl5Içp¸­'‰ˆ!íD¦*S•©ªïÊÞœ½9{3Ñó|@'9Ä&—;3‰HD2çÄ,1KÌ›lOmOmO½dUgUgUŸ²émz›¾î¦y¾y¾y~øÊe²—ÂÂÂHz„$B!x.ð\à 8¯ÏþÎ÷ñ¦â;ò9ó;yœ|œ£‚¯RWêJ]ÅMd;ÙN¶°lðó©§gŸž}zÖßӫΫΫNHMèMèMèeìaaad…,]–.K‡á#|Ì0à `+¶b+_øÂf«ŸÕÏê‡ÔÞ iÐ4hÄÔ'¯?yýÉëoU(‹äÂva»°=¾€&Ñ$š4°‰€€€y•˜80q`@#Ñè÷WÅUqUçm›Åfñ_øZàk¯ñ‘ëß[ÿÞú÷¸sî&w“» ˜Žé˜žÓ` wqwLÃ4L0ŽqŒABÒGúHx<Æc<gt5º]Ñ_öuÙ×e_ó›ú¯õ_ë¿Æ5K]¤.R—ÁËüj~5¿zñF,Æb,¾?Æ.K\–¸, ÓÉt2ý«fóÇæÍÇ,Ú´'h¿"é¤7’Þà®ÊŒ2£ÌVP JA ™€!¥¤””D ÒMºI7@zI/éèyzžž¨õ¢^`›`l€Ës.Ϲ<6|_ø¾ð}Ì{ƒtR~…¾P_¨/ô<(ß!ß!ßñ|¢l@6 ¨("YµYµYµ‰ l-¶[Ëå×1×1×1”ü ùAòÒâ^ì^ì^ fRp%&b"&VXa ƒ 2ü·µ¢­ÂŽp"Dˆ0`j¢&jˆ+q%®0×××B<®=®=®¥&¥IiR4B!XÁQ ÕPÍÁuv¥]iW±‡bÅB‚û÷+îW u¤UŒÝ»3v0 ˜LÃ3<ô˜Ób€]Ì.f¡>¡>¡>ÀXÃXÃXÐoî7÷›FËhí³ sÎÂY€à¤à¤à$¸ºWºWºWÂû|ìó±Ï#¡¬¢¬¢¬øIü$~×1|ĽœìñØã±Çc|:7fnÌÜR„MØ„MS èRt)ºÀéé§§Ÿžü´ì§e?-.¬½°öÂZ biÅÒŠ¥<à ç@Ïž@ñ¥âKÅ—þÃÃ… 6•¹•¹•¹€Ð'ô }S}† ‡ ‡ “"'“³ŽZG­£øN›¨MÔ&"Ýå†Ë —0 yBž ,€{²{²{2@;¨Ô[Z·´niì÷ì÷ì÷ùûò÷åï?ë|ß´¾i}Ó€ÐwCß }ص%jK`×Ùuv X£X£X༃wšL“i28Eª"U‘ óìÏf6û3¤ß½=z{¹>Á'ø„h˜R¦”)Ê#ܳÄô&½Io=ûzöõìrüsüsü®œ+çÊU߬úfÕ7À\ÌÅ\ÂEá¢pè‰ï‰ï‰r´9Ú- ©—ÔKêUƒ«W aê0u˜ Ëè2º ©$•¤BƼͼͼ à8Žã8Ñ0¬šU³jzÁ´Ð´Ð´÷ø(>ŠËƱql¨Tˆb„`þ©ù§æŸ6NlœØ8ÌŠž=+8×y®ó\'`xÙð²áe€McÓØ4àÅï^üîÅïžùÏÜ9sçÌÀÙgWœ]<éxÒñ¤`®0W˜+Sùا·ŸÞ~z÷˜@& ¤Ø%íKÚ—´ï¯¤z¤z¤bÎz5x5x5hß™¾3}gÂÂëx¯ƒ$h[ж mÀK/y¼äxxxšvM»¦¸þÁõ®¨©©ñ~ñ~ñ~@èPèPè ÊWå«òÍÍÍàºåºåºP·¨[Ô-€zzz,º•º•º•4˜L &üSæ.s—¹ó¹ Öc=Ögžä2¸ .ƒ¤×çÖçÖç ¦S© 1D C`:öàØƒc€æmÍÛš·=“D›w›w›7@¢H‰¼Â¼Â¼Â€ü]ù»òw757575ÏüÛ¿mÿ¶ýÛgRš18cpÆ ¬ÎÝ¥¦´¦´¦TŒ$:¢#:|K"á””ñ¹êsÕçjÎ~i¬4V{öþèµÑk£×ØþRC©¡Ô 않RQ*Â5r"r"rÖêÔêÔêTà`çÁ΃ÀÅ΋;¨Ð¨Ð¨PÀ¿Ó¿Ó¿¯ ¯ ¯jjjjjjžùW-ªZTµˆf£ÙhTõ‹êÕ/•+Ë•åJÑ<Ò8Ò8ÒÈ4Kó¥ùÒü_7Ú‡ìCö¡T;9ðÛßüànáÖŒc½D/Ñ7¹ŒWŒWŒWø'Å}÷}Ü÷4n¹ßr¿å~äêpÍpÍp èCú>¤ 3žÌx2ã  ÚªÚªÚ Àþð0ˆA ú@} >ÉÉÉÔnj7µ ŽQǨc`nOhOhOÀ?ÎÔž©=S‹…AaP&^§,e)þÌÁÌéÞÉ1'™“ÌI¶u¨CÝp„!FˆÛ mŠ6EÛÏhJkJkJ£¡~*?•ŸŠ”Ì=:÷èÜ£Xíû¥ï—¾_BARH IŒ`ÈG>òŸñ>ý>ý>ý€ÖGë£Ð….tÁdª4Uš*ázéð¥Ã—óÒqé¸tœÃäø·_ÄJ¬ÄÊî4æÑ<ÎÏ1æ “s#w’BRxu7³YÈ,L­ÂaÆa櫚öšöšv~—Qn”åS€&±Yl›üŠ_ñ+€µX‹µÎô úý=EOÑsJ‹®—K.—\.öÊ e†2î˜L%SÉT%Ù!Ÿ‡|òùÑŸ‘‰Ld’óèCúøxç<ªÄ†0Äw!)H!UÚ*m•¶*o|‹|‹|KI¶!ÞoˆçŒeyeyeyÂ^gBÒJZI+¬ÐA ,°pƒܤ! i LÓÄ4AvCwCwCGãn ݺ5Äæ)Ý”nJ·û¶[‰­äܮ̮̮L€ê¨ŽêàæÈsÚ jv¬¥â4qš8 nm#m#m#€-Å–bKù0Gé¡ôPz ”öV÷V÷V³yµj7Ôn qd7ÙMvC&žψg@á¸ôúý <á Ëïºßu¿ëPR7¯n^Ý<¸)õJ½Rˆ Å…âÂs˜#ÌæÈý ‡9Ž™DçDœÛ†ã—Ä99ZÄæMjWØK"I$‰Œ[3ùËñs¥}—}—}—¸ç-ñ-ñ-‘‰;v$ìV‹=bØ3‡™ÃÌ•OçÓùtÈ ƒ ƒ ƒ…ý+úWô¯°wåóäóäóòM~4©Íb‘X$qÇuÆ®ÙÙÙÙÙÙ09+ Ç) 9´»×¡Ýc¤€‚«?1±L,›Z…$$!‰ùªÚ^m¯¶ó»Œ'Œ'Œ' `†aüá¬D½¥ÞRoÍ÷‹îÝ/bïÊ÷Ë÷Ë÷w]²[‡­ÃûÞ]zwéÝ¥€0йŸ:|S v:(®;´[©­ÐVh+òÖÈ“åÉòä’lƒÚ 6¨9ã?fü˜!ìu|ínžžž(nlilil!›=ŠE Šbàž&îMîMîMKTPDPDP3êÈ·Ò±ZþÌÅâ/,&&&&&¼ã²ƒJ©”JÉÿê_п ÿf ³„Y7yY,Hô?_=Šÿ(Þ³ÂØmì6vÓ/ÚN·n;-¼:n·ÛÙI´$Z½Ïž 'è‰ÿ»49p³ýÅ(FE_g…âÿÌCð7öÚÍB-jQ+dÒ*ZE«bú˜r¦œ)ÿÿ ‰U«&V‰/HŠ$E’"¦›Mb“ؤ†kÁåÁåÁåKbt}º>]¹"z‹Þ¢7=åˆ[í4ÿƒ¿±?i×±]™ØÝØÍµ’Íd3ÙüK0­¥µ´6m«Ël—Ù.³™nvˆb‡†g‹¹b®˜»k¤gcÏÆžÀ$ ‚ñœƒ¥åï8þ JYànô êHIEND®B`‚routino-3.2/web/www/routino/icons/limit-177.png 644 233 144 2456 13061246470 14612 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜãIDATHÇÍ–]HTiÇ_3¥¦mD´7}Œµ[°]äPbeºQAt£öKW…Y¦P현`Q¨ $¢e¬ÎT^[{! ‹mÙ8E‚Ö±=sÎùíÅÌ;g¬öbïznfž¯ÿÿ?ç™÷9¯€ˆˆ&?´eÚ2­ ákµNÜUî*ÿ±+á_3!£2£r¸´,h(ºQtà 9¾Ê«úô~?OÅ¥Pœ@®?ןáMú°¿d‰«8á_ ‚»ÛÝý)GzŽôܹyç&¿At(:0éô‚㫼ªWý /_¿àì»Ùw3þÜœÜX^¶¼lʼnDÁß+`Ï®=»Þd¾É´50ßyäÙ^@GGÙDš¯òÉzÕ¯ð¾âSü = K–ŠÀÞƒ{º¯'Bpjé©¥ŠÏè.r‘<ˆëqÀ¹äBüS|:> f…YaV€é5KÍR°NXÇ­ã`zÍ3æl³b¶v¶ÃÌ4¶ÛÁîRø¿¿@TñKº •ÍXîˆ;¢gAØ [©Ñì4G-Æ>ÛÝvØã˜>g„ÿÃìö >+|? ?pën]ÏRz’®=‚cçŽSÍÖOvÀè3ú´Àâ@Q "ý‘þH?ŒgggAóåæËÍ—¡}¬}¬} ü þ<Œ<Œ<Œ@›Ö¦µiÐn´O·OCG¨CïбG{ÂáŽ4¾î£kŽ®Q£½ö()ìùIžúú}ý@ €] Ö¤5ÉŒ‘?ÏŸš®éš½M½M½M0¼mxÛð6ØÔ°©aS”–”–”–@^(/”‚³Ug«ÎVAycycy#l}½õõÖ× ×¥EZ ѽû÷î3“üÝÕÖ®N—öü¤@Á`Á íçñãÒx®ùÜ|~ËoúMX²cÉŽ%; óJç•Î+_¨õAëƒÖPÓTÓTÓôü¥ÖK­— ¦©æBÍ…4žÚä—?£PzŠò‹ò­˜ˆLDœco–Å×Å×9ež2O™ÚnµÝj»åÄ£¡h(ÏgÈ3#oGÞŽ¼uòïÂïÂïÂàyáyáy¡Ð@h MXYrÍÌN¼œx J&bõZ½#bÇwÇw‹²…’-c2–òÅžgϳç‰Xš¥Yšï:Ðu ë€Hq¨8TY½xõâÕ‹¼oÆ7ã›)~Vü¬ø™È*ï*ï*¯ˆ]nX"7“|™ñªx•ˆÒ£‰è^Ýû×SуAG¬¶³íl™U‘ùÕó«çW‹äôåôåô9ÄÁ Á Á "•V¥UiÉW,  E*]•®J—§ÎÚgí“Y)Jòe€HJÏJîÆ}qŸóÄ?þòqãljÄFœQLÕMÕMÕAl}l}lý×ÿ­©ÇS§CìçØÚØZxO¼°’|)þ9§re3¸£î¨ža3l:{ ¬ÃÖáÔÞ˜QgiŽÕSOý7W¢¾žÛ܆/ðv:|ŠÎûÆæ7 ±™ÍQs(6O›§18‡vŠÖ pžóœÿ†¬|6³›óæ+óF /…ŸäKñ§6ÿwû®ünoßí}ìû¼Áþ .`(PâIEND®B`‚routino-3.2/web/www/routino/icons/limit-19.9.png 644 233 144 2756 13061246472 14701 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü£IDATHÇÍ–ÝOTWÅ7ŒN ¶$€/P(´8òa°‚ÁZ  Hä„ÖR£é‡<Ô¾´•&ÄšÔÔª<Ð4mP[ CPj1%!mB /Æ6hµ)œ‘©€:Ü:™aîÜóëÃÌ;í_à}™¬½÷Ykß{Î^sDDäÉ诀-Û–m[Á¶·¬øÊ+wæÁ]aHhHhøã0ôøz|~'rÆ¢/¬ÿ¦þËú/á쩳§Îž²¾DõÅê‹Õ!+#+#+Z[[ÁWë«õÕB™³ÌYæÏgÈ3õ9õ9õ9•™•’•‡ÆÞ;ðÞ‚æ™æ­žWz^¾0Ϙ5•5ü`N¥ÑatÀÒóK¯-½† Œ†CVcÁŽ`G°¼w¼w¼w€ì`(»²+;,6,6,6à 3 ËõË»–w÷Ž÷ï?(5¡§ê©À¸©×ÜÒÜøÍ©$æcsŽ9- &Óá˜~Ac·±Ûò16RJ)¨=jÚçWŪXí´ÓçoϱŽu ö¨vÕ`̳øUQ”ÿ³É¥É%Çߎ¿µ$fÿãcqί¿œør¢åüdè“ú$p8|3çü´ÑJ+¨q5¦Æ€«\å*°„¨[jZMËÑúcáéð4!5®{u/pÙtþ¨^èÿÎÿèþW>²·‹Gö>öhÞ`ÿÞF0ÁO—IEND®B`‚routino-3.2/web/www/routino/icons/limit-2.0.png 644 233 144 2534 13061246471 14571 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]H”YÇǦqt¾ˆ Á‚–ÖÌ0‰¼ÉAÛV[$Q$ˆÚ¨.$¨Vöª. ºÃºèƒ 6ÐtÈ’` ”¶bÙ¾Ùa Ikv­ÙIæã¼ç·3gÞi«ûÎÍûþŸó<Ïÿÿžsžç=""R”~ 8–;–; SØñ½mwoqoYñs ŸQÓ˜ÓøÇøâô§æ]˜wÁµ±™7þÙñ"vþl>c—"± ®^WoŽ7AËš–5î…)üÓmÈóåùf’°ï꾫ýû/Ò Á{Á{aoØ 66óÆßÄ›|ÙùåØÿøEÀ9èÌ×\×\(Þ\¼¹ä@Êá¯hØÚ°`"w"W;@½ßÒ#° zAµlÛ¾m{ÞùTÀè%h[Ö¶Ìð%|À Nàd$P;Ôb oëÛä66óÆßÄ›|&¿á3ü)=òþÞvÔ¢›ç6ω» ÆÔXÏ“›’›H$Ç”[¹ÑÖ;kÚš†¬µzÃê*½^¯‡ä¸ÊWùh}0éOúI€šVÓÀ¬ÉßìjvµY[)"òeäó‚‘9Ì"{kêuLµ¨f9F?ýYBŽsœã #:¢#Yö *¨6²‘Yö¯9Ä! Aõ©¾”, žx`60 þ´ž´°3¿Âþ£ûÓV99‰™ÄŒ½~çˆÑp²ódçÉNðßôßôß´y­]Ö.k—þ€?à‡ng·³Û c‘±7cöŠj=–ð'ü™èò ZOZØ£àòÔå)°ºôžtD쾺¹OÜ÷Ä¡vEíŠÚPÜTÜTÜsç>εM®ž\=¹Ê}å¾r” • • ÁªØªØª„ýáÞŒ{LÿiøRüFC¤p¸pxÝ‘êšê9""’s>½Ó®qÆÝãn‘ƒ]»v‰ÜzvëÙ­g"ù‹óç/yØó°çadƵ%×–\["âºãºãº#2âñŽxE ‚€Èõ×—]_–qwéK†/ÍŸÖãÉmÈmà+ç€s@Äñ¯ˆˆ„øN×ëz‘¦9MÎ&§H¯ÎWç)«(«(«©ìªìªìÙßß·…±”¥,ñ<ð<ð<°í…ã…ã…ã"Q+JÛ.¿§ø Fë^V+ÀºÎ{ãÉù'çžœƒ¼þ¼þ¼~h¯i¯i¯™ª™ª™*ˆ.Œ.Œ.„P{¨=Ô7NÝ8uã”®-][º&6Ll˜Ø%Á’`I†·× ×eÍoÍ[ŠßèùàŒ)ïûg¬ûïîçÝÏSmÏ9•=•=•=0ß1ß1ßg9ËY º£º£ºB¯B¯B¯`ïʽ+÷®„üÖüÖüVhSmªMe²PÄ8ýñ3öaU™*QQ…èãèdt=ùͤwÒ /û^ö½ìƒ`Q°(X³C³C³C. —†KÁzm½¶^ƒnÔºB£¡ÑÐ(XÿX/¬@JœF%ß&ßš~ùɪÌêcTÀþ²z°vZ;3} F, %H¤’§Ças¬ˆ±²ú›Þ£;u'pX=UO³úX"ð.ðî“},«ó'›s›3埸˵N­Ý« T ý›žÒSh= ¯è+À´Ñ:®ã:L& ü ƒ 騎¢´Y‹H€Q#fåw¡ÙÝìþhçÿlÿ•Ÿííâ³½}ž7ØÿF/˵± ¯IEND®B`‚routino-3.2/web/www/routino/icons/marker-59-red.png 644 233 144 4213 13061246466 15442 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü@IDATXí—mL”WÇÏó2‚w€¸e°Qvu‚â*V$% ®VTˆã6QÆÖ„·¥ø–%±jEÓ’alK\ênݲ«fëÚê&4¡+CeL¨£à;03ÏË?0÷™g&YÍf÷|Î=÷žó{îùß{ѬÅR˜ñ¢QŽ(÷¯à@Ìœ®9]sº 2EY”EùÞZE«h0VH$‘Dæá¾ÚÀæ³õ,Ë^ßΣ竢*ªâíáñ…+Ä.±Kì²q¹ƒÜA Äï‰÷Ä{ðÇâÁâÁâA`Ûȶ‘m#@INININÈgq6Ÿ­gùX~Vïù<Äÿ*Ü_zŽŸä'ùÉáUl‡ËËËåêó7Ïß<S}iâéÄÓ‰§àŦ0`Ã4?góÙz–寷ôÜóùÈ4Ÿwñ.Þ5ü'– çFΜÒú¡ÀP`(€!MMSÓÔ4Hr­\+×r†œ!g²E¶ÈŒ³ùl=ËÇòkÀaõMó54ÎÎÙ9;‘xB5>5> ccùcù N«Óľ¹åý–÷ÙsÑÙÑÙz~öül¯ÊW suçj}Ü#tþ„µÆZhùƒÜcc±c±ãa| ôäÖÓ[Oo=ú2yÈŸáÏàfCEr‘ mXÞw½ï€Ûïk¹ßê·À‚ @EaE¡>~ý£ëÀœÝsvp÷Ãw?òP°—ñ0>>x¤Vò ù†|íŒEÑ>2‘‰ˆ~ʆ„¥ÂR"¢Û£·G‰ˆb[b[ˆˆ’¥d‰ˆèÓãŸ'"KÅR"¢ñîñn"¢—+^®Ðß,‰)‰)DD[ÀFDÑ÷«îWчa×O”¡ÃÐaèÐŽ<»_ÕÒÌÆÌÆÌF<˜á¦§\F: â7¬õÉÉPt³è&\q]q@QJQоţÜ(GìGìúñÍý›û ©0©€/8~ϱ̱ PÓg/¶¥9q9q9qxÀøˆ·ðÞxh¸Xu1ób¦NÑ3#3#0òxä1ßLÑL‘¾KžjO5ÐÚvÅ®èãu…u…`¹e¹@:ùõɯ ú³èϹ³ëR×¥P½ëg¾XýÅjíü-—Î¥séÇ$¬Ö kkêÙ)Kz9q0qP^êüµë5×k0Y0Y€ 5o^Þ¼<8µ÷Ô^ý·7·7·uP õõ@ñ²âeðÆ'o|¢Wßé³§Ïx5îó¸ÏÀ³Þ³>/€Ôš”õ)ëí ……-Ï(&?&?&ŸHì{Å^›K»ðKòÊòÊäC,¿b­‘kdøà¶Ì+ìöë[[ÝWݧßÉöÑöQý)þ>‹­ˆ­”–˵—kCŸ[~wÏÓ=O¯¸OØ'ìûÇöY®›Â-ñ=Cº!Í6ÜÊXk«/U_Ró´û#îî’»K ­çZϘ¸ïþ== š­fë\ßÀíÛКښ Èeý5ý5¡ýmŸlßÒ¾¯jOh=_Ï×Ïp‹¸EÜ¢•ç#…¿kçkW•ljælÜUî*ÓŠRáèiÿ²ýK84íRV*+õ@j–šèE/U­R«èÔ<õ-õ-mö„ËæÚâÚ$E›~4ý(Uj;ùŽpT8j5kh²E4…Xs)—rÅwÈNv² nÁ%¸ªÿ =­Í¦µ¦µ’ÑydèØÐ±PA5Oº(]œ=Uðè´ë þ:”J¥P·z½ð±…;ÿ¶³ug«|H{¦DèqK8p áoæÍ¼™ë Ò•1ÌyÁßíÂáð€ëN>œ|8ù0‘¡ÜPn(wÓ´›kÎ5ç굫X+|pÀ€qŒc<´Ñòry¹¼<¤ÅÆuëשyÚ[n4 F×̬oŠï4w-¢õÄE¸_…û¦hCº!Ýîì i×Zk­Õi×(%cHUF•Ñ0€À1w`îÀܵXÓd ÃǼþ»)¾ÁEÏuÚÝÅíÚTÌÙ8gÓk×Ñãè iWê‘z¤žr§¦¦€OŠ'Å#ÿ\Ób‡Ð!tü>‹I-(½HÀŸÐ ,4%i×-¸uÚ=c:c:#6§Íiàƒ>x©µÛÚmí];b³Ø,6ÿ%™û׈ºÁqzéE€‘ƼÔî•ÿ¤ÝE‹6…´ëÈrd9²ðál\Õ:Á•r¥\馚ð2üxD]ŽþK{‘v7õB½P?œÁ€KëJëJëÔ³iþ4š_º¯µÚ-¸·5‘Ú¨Ú(xíΈzQô?Z¤v…ûÿÉíåör{ÚL›i³ò ~1¿˜_ pÄGù*É›äMò w„;ÂîÏÁ…Û#:÷3£öW>åS¾Ø>RÆ«¼Ê«w»Æ]{´dvügŽˆÎ Eä}a«ÿ éëtmj:­ IEND®B`‚routino-3.2/web/www/routino/icons/limit-28.0.png 644 233 144 3142 13061246473 14657 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍVïOTW~f†Îeè”±ŠU«ØÒÐ*dV0ÂUÀ¦‘Íf +e]5\b?è ÓH¢ÑÀ66f #5±«¦ò#…1CjG'N–Ùél;?ª3wæ<ûaæzÙþž/7Ïyß÷yÞÜ“÷9$`Eâ Rû–ö-mjkÿ¤î'W$WlºÇ—¢¤fŸfßwŸ‘¦‹¦‹$ùfÏ›=1—Š•¸’¿¼Pù—ë)ûXuCê“ú4% |šü0÷ÃÜäÕqÜñ4Ø ¶ L88@’ý_ôÁ¿ £ £$¹T²TBªX‰+ùJ½Â·œ§£¯Ýzí–fš”ô’ ×—­/Ûx$žðl#Y³§fIþ¨ûQ'´$IF"i¤Q”ôÓOeýgVâ‰|¥^áSø=E?ÞÈ´â´b€ÜûÑÞ Ýñ×—äñÌ㙊^ÄFò ÏÐHÊ~ÙO’цh_â¡xH’ÔPCªX‰+ùJ½Â§ð+zŠ~¼õ(CÐi!ëÜun2æ$ÉȈüÏÈúÈz2æ—%Yb$Ñ©ˆyb®˜‹”gäiyšz¡zªËÇ.¼DBÊûåýŒÈ³cÄHŠ–8?Yç¯ó“\Tô•£¼ÙŸ“¿ÁïOa÷ˆ{„äi’d%) DC¼ÉÛ¼MƞǞǞ“à–5ÒÉNvÆPù/$É|æ3Ÿä³˜$Åâ†X–àÿ}B/¡Ïïâý€ piˆ¦æÆæF…-¶uJšh›h#/|v¡ýB;…ókç}ç}Uo¢r¢r¢’ìpt8:äãí·?Þ®Æc‡b‡b‡TìžrO¹§È®¤‹Á‹AŠé€§ÏÓ§ê‰ÿ6ïhÞ¡í¥!Dàh#o½y”´öz E“1`è2tñEInɦ’Mdî†Ü ¹Èsæsæsfr]ƺŒuä´iÒÈÌáÌáÌaÒ~Â~Â~BmÈ›ìMö&“[m[m[mdÞƒ¼[y·ÈwýY]Y]|±t†$EÙw·ï.)NÆûÑâׯ¼~å}3`i´4³®O]Ÿjº]j½ßzÒƒ©žÀ˜eÌ2fŽ1ǘc Xùdå“•O€ŠÅŠÅŠE`­}­}­XÖ€/×`é`é`) KÃÒ0à,qîqîÞ˜6éL:HƒžÞý‡5Ý@Í5?b8E¤ˆ÷ÍZÝýQýQæ°9t2t¨ûcu}u=|»m»»@ÎåœË9—mç·ßv¨ÊªÊªÊtWuWuWkÖkÖkV`iaiaiX5¶jlÕ˜ÚX´;Ú파ŒÔýÔÙT)U~ý)Tª ¤CººÌÑŠÏåR¹Tó½æŠ>OŸLþÙÕæjCšå¯–ZK-а¶!½!èÊëÊëÊ®[®[®[€ÂñÂñÂqà^Ͻž{=€T)UJ•€}Ô>jbˆ! cKÆ–Œ-€7à xÀÜïæÌsf`fûŒiÆdß}oÿ{û‘kƒµ€f˜“šïµâlðvðö·ãÀ7Cß #˜|{òm~EäYäÂ7Œ7’n$kž®yºæ)°ëÔ®S»N½½½€©ÌTf*ŠÒ‹Ò‹Ò*o•·Ê äkóµùZ`ç‘GvÌ!sȲó³s²s€ÚU{÷."\,þRø ?ggm}hchã·ã`Gb*ÙÒÚÒJþÚŸïîù¢ù"rndnznšb¾z¾|¾œ [ÃÖ°• Ÿ Ÿ Ÿ%½ÞNo')zDè!E¿èý¤¯Ý×îk'E¹(夨'ªE5ésùæ|s±GÞ‰¼C2×cô“ÖOZI>OLe|vˆ-l!c~‘*R•L†Dc‚¿Õ=ãž!IƒÏàó'qZñ±ÿ»Õ;-<^w°î )¾Œ;³‹£FRü]þYþ™þ:(x‚ÇxŒÿ_‰¯HÞáÞ!d€RüKx„‡d0Þ7ïÆ’cÉŒ‡”ƒ$ç¯OªO"þ­ó¿ºwå+ûºxeßc¯æ ögL”k+—IEND®B`‚routino-3.2/web/www/routino/icons/waypoint-search.png 644 233 144 371 12002775154 16247 0‰PNG  IHDR Vu\çbKGDÿÿÿ ½§“ pHYs  šœtIMEÜ;–¸¢†IDAT(ϕѻ ÂP …áÏ©hHG ›0ÒÐRG´d¶`$$Ó\!7@,¹ðã·Î‘#3MŠÌ|&6èqÃ,ßv@‡5fØ"ÑxU€ëk¿©ÉŒˆûRžF=”Ë œËõ#Ú¯’ÊRb‡æc^î˜×¼ÅÔ?4Ãù7ð+&Kz—Ö¢­]ýxIEND®B`‚routino-3.2/web/www/routino/icons/limit-26.png 644 233 144 2561 13061246467 14526 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü&IDATHÇÍ–[hWÆÿ³qÝ]s¡±^V0Ð4R¡Ò`•¤hЩ[0¥¤*…†¶ÁFh¼-b¥ˆÍƒŒµ"«I³â“6^ª[PZ¯ ¡(l²M¢r™dæœ_fggZjŸ=/Ë÷¿|ß7sæü÷ˆˆH~úW ° ° ëàÀ6/® Wýàà6Œ÷÷ì¼#yG Ú ÚU¯‡Ý¼[ïïñøýzn\òÅ „b¡˜Q‘Æûáƒ%, Ïqð7× Òé³`{÷ön€Î'h€T"•ø³âÏ ð°›wëÝ~—ÏÏ/ûÿ¥/Á Á ÆcÍ Í…• +}êô/‚êõÕë’YÉ,{È!GW£Œâ®§>ìæÓõn¿Ëçò»z®¾ãG pUá*xïÃ÷>Œwz¿‡¦ùMó]½é.à+¾"¬QkÀ®µk1A_Ó×00ÀÃnÞ­wû]>—ßÕsõ?òϽmYÃÀ˜¾Á´}Ù¾  öª½L«ßõL=m=¶ú¬>P#jH eÞºVoÖ›ÁúÕúÅú”Ò¯é×РZT ÓLØí‹>~W/£/~C¯ ‘T$5:úì>àÝ4á¸6)¢ØÏ.vyF覛nÐQÕQ`.s™ëËÿÈΟp”£êKõ%ãL¹üi½Œ¾ã'm¬ígøxïÇ{]6õ&YÖ`°€ÎóÜÞÞÂáC‡>÷êïÕß«÷|ôK¿ô ´Ä[â-q¸]s»ævïÞÖÃz͸5d ùô2úŽŸ´±ß¾€ÓÏO?Ï´¤Ú¦WL¯Àt#·ì[ö-r¦r¦r¦`uÁê‚ÕPÔXÔXÔ= = = Py¼òxåq¨ŠUŪbPþ¬üYù3xÒõ¤ëI—ÏàçV¾•ïòë<}Ç@î•Ü+:©·Roy*ßêµz=Üî w†aÏÁ=÷ôâef™YfÂÚܵ¹ks¡¤¼¤¼¤6mÙ´eÓhkkƒ±}cûÆöù¶øm¥”òጾãG `vÁlõž<ðûi=¨A×ëzíÛªÄòÄòÄr(Ù]²»d7ì¨ÙQ³£:Ú;Ú;Úañ©Å§Ÿ‚cÕǪUüļļôD{¢=Q߃¿cÛÅþ1ãê;~"ê¼:o<±6XÄ]…ú’nÓm"F‡ÑatˆÜm¿Û~·]dÍÎ5;×ì©KÖ%ë’"­±ÖXkLdÖЬ¡YC"Ù:[gk‘mñmñmq‘9×ç\Ÿs]$ÙšlM¶fø…7ˆñô<}ÇO@d´b´âÎM‘«=W{2m[ùÎn´eÊÜl¾Ù|³YÄÙ!;$ÒÝÛÝÛÝ+’W˜W˜W(4ƒfÐ)½Sz§ôŽH(Їâ"K-}´ô‘Hm¸6\öŒe™ÆãËÏVO?íç…§òŠ·âÞ·:Q6Q:Q Ãë†× ¯ƒ7nÀ`Ó`Ó`˜ËÌeæ2Ðô}FR#©‘¨bU¬Š}ŸR?L }ƒ÷ÿNåÌ12s¬NÕ¥§š³LL`Š©ô,rVuÔÎÖÙ:ÛwúæêWô+À*hP_«¯OŸÇÎ1#3iÅ™¼"ÃÃ_\ëìäÙI+!AÕ§ú‚eò™LʤX¼˜˜!3$*Ïå¹òX’’1& Ó0Ed¡D%*‚B‰¯¯ ²YŸÔ'ÅÅ6HP²²Vf­´"5‘šH°LäœyÎl­t|4ýô2ÿW¾´·‹—ö>örÞ`ÿ,Gêcø¢â:IEND®B`‚routino-3.2/web/www/routino/icons/waypoint-up.png 644 233 144 361 12002775154 15425 0‰PNG  IHDR Vu\çsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ 'ôÞpqIDAT(Ï’Ñ € Dß1¹ßnÀle¢;˜úC“Š@Ô&—+×k)ð'Ìì k‡G.ˆ!É*¯†'µn’–pÎ|ëàÕC»:Äê3—8”u°Å¡ -`ˆrO`3¸ Õ> pçhWõþörÇúü+.Z‹‚¿£IEND®B`‚routino-3.2/web/www/routino/icons/limit-38.7.png 644 233 144 3055 13061246474 14673 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜâIDATHÇÍ–íOTgÆïÞDEFÉT(©­•BêÂÒÄ*’0"íH³ +R¶º­7Í®i²a6ÊJ“n!KJkñ S’Ú˜ %E›&Š0J–±$ˆE fåE Å™sžß~3m÷ðùræºß®ëœgÎuÙ°r0'›“Íqlþs0¾æÅ5/>ùy×k`:`:0è€õ­ÿ ÞïÔ‡‚ØÈõ¡ý"Áù¡|F\6H0ÕÕd²­àJ8ôì¡g×l àê.ˆn‰nùÅo~õæW_6~ÙÈÛàéötÌÚfmÄFÞ¨7úy¡ó¥ò7ü"ÑÑnºQ‘Q‘"’Ÿ’¿õD `d+¼üÒË/Œ‡‡)3hÿÖ±NÙ€0ÖT6ò+õF¿1Ϙoðü=–\K®.<Ýhú N&L2ø|-À{¼Ç:ð/ø´R­”%P]ª &b#oÔýÆà»îÿÑ÷¸ïqÐ{}w}wñ­(Uú¨>¬ƒÿ®Ô? *REªH~·ÔUåU^”f^N\Nħ•ùœ>'øgóÕåW¯8 5û‚[9*"’ú!D/D/,„szøúðuà* ²T‹tÐI'¨j£Ú4ÓLsˆ‚j¨,X°„Äò‡¿’ºUmeqÀ ŸÁO@0!"Rï"î­×ßzÝhÖ3†òo´Ýhƒš×T×T£Ücî;î;ÁñýUýUýUPíªvU»àfÖͬ›Y¿b£;FwŒî€ºžº®º.pqV8+PŸÝúÔý©~L97sNÏ€å'ÊAwôˆÞ""òýß åtËi¸m™ŸWG7žYÿÔú§X*ÚV´¥h ¤ö¥ö¥öAerere2¤ô§ô§ôC‰»Ä]↤kI×’®Aσž=‚Â:Æ;Æ;ÆawÎîœÝ9°wjïO{ùDD„¥o_ë{¦ïu¾v~íÿÀ³éBì¦ØM™;ErÏæžÑ’æ‹ç‹M ÿ”ª§«ž–¨b[qAqˆõ‚õ‚õ‚Èbûbûb»HÌ@Ì@Ì€ˆ=ÝžnO±öZ{­½"˵˵˵²ºöØöØöØDº]Ý®n—H‘»è‡¢DŽMµµKÔ Ÿ?7ôÜ©¿dš3Í"á7âÞ{?sg¸é“°{a÷H—u‡î0Éö'>xâ™Þâ=2vdL,e©å9å9"÷­÷­÷­"~«ßê·Š$Ì'Ì'Ì‹4¶5¶5¶‰Ìzf=³‘„Á„Á„Á °ˆ‘ˆ‘ˆ‘©º©º©:‘ú¼ú¼ú<‘¦¨/ÞøâÕ²i‹ü8òc±HfØ`Ø é¢½©š`)w)Îh*m*…ÌòŒmÛ‚[’_‘_‘_´ãS§:NuóiWÒ®¤]†ô†ô†t˜›› æk/Ö^¬½¶¿ÚÞ±½Œëy+?<žÇ<ZÜå¸ËªÉl>´è[ô |'ÒÖÜÖ,ò§·_=ÿêyŽmøc\l\¬,Ç‹-‰-IÙœ²9e³ˆ{—{—{—Hkvkvk¶Hü@ü@ü€Hvbvbv¢Èþ3ûÏì?#’—”—”—$ÂLˆt'v'v'Šþ¡p{áöÕ'µÌIŽI|gg¿ˆ„-ì[Ø7ðÝŠÕ»è=n9¾úšëþÞYï,Lþgò›ÉoPš]³köàz{¼=Þ˜œ˜œ˜œåTNåÕªZU+LLL8`n÷\Ö\x“½Ï{ŸG^¦—W|èÇ+ŽW~Vï\¿ñ±ˆ€¯¨¿¯ú˜]ÙYTÿRgÕYÐKõR½Ômu[Ýq§µj­Z ¤‘FZˆ_x™c.;´[Ú­_ù˜6¬D{¢=¡>fük– ç=~0¨Zqæoý3þàœvO»t~Ê8ÌaPꪺ \â—€_ø™ŸAÝU#jÐVê-Ú»Ú»øø‡fÓl«Ÿºëø† ûÎÿè~+ÙÓÅ#{{4O°ÿqUÊ8ˆËèIEND®B`‚routino-3.2/web/www/routino/icons/limit-16.1.png 644 233 144 2725 13061246472 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜŠIDATHÇÍVmHTY~îL3:ã 6;´…à"$hK˜5¦m‹¹f¥V„Dô¡´¬¿aÙ úµFD¤ìBZ¶»‰–MÚRô1Q”D¹ô1ce‹°Û{'mî=çÙã;Û²ÿ=.ï×ó¼÷œû>÷€dN=AZæYæYÒã¶e»éO]•ºê³_âv»N*k•µ¿GfÎ8L’3;fvˆG¦mÄüäzÀÄOæ3üÈ„éHéIéQJ§ì½dÝ‚º©Yqû?éèsôiäßIž>vú¿&GoÞ"Éw¥ïJIÓ6âF¾Qoà%ãcïGüi»`» Œ)ö;@f¯Ì^™óMxzîé9“h8s8s8“líoíoí'µÚ@­—RÈ9`úýGü>¿òù'![ÈfxEÚY½³Ú8Úö @ÑYü´Ñþ„Û-V«qNœSZ`‰”EÊî×/_¿ ¸mªàCº-]¤ `<4KKK@nqnqn1àLu¦:SEáEáEa ²«²«² XQ¹¢rE%0Ö7Ö7Ög6æ<âlu¶¶/¬9Öãã6|åwú)”ÞLžÊ= {Hž7¦RHµDݤn¢œx9š%Þ£÷oòÞä½É#E‡è¤|,ËÇd¸%Ün!…&4¡™uj®Zª–RN¦¼½™SÉߊŠÌ©„¡¤cÔ1™Aõ žÀ©à±AlHÒ±zֱޔi2M¦%ÉÃ9GÎ!饗Þ$›ä$'“MæÈœ$cðfðæÿêX’òk5Ö«©üÌÒ‚Zä}D1•Ÿ?³ƒ¤¼!¯Ëë$OñO‘çÇHù‡‘#$_%”¿Q42F¾Aß@òû”âc埾ÿÊi{»˜¶÷±éyƒý¹Ú]^Gô˜IEND®B`‚routino-3.2/web/www/routino/icons/limit-29.5.png 644 233 144 3115 13061246473 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–ûOTgÆ¿@¹–*]:U:€á¢%” E·\*)%¹´DX#Ó…¶,Û4Àš`‰­?4ÙZâ ÔÈf X×nÀ¥EYªÅ¬rqW“јrAÛŽ@fÎ̼ŸýaædØöðürò½=Ï“ó¾ïs^ ó¼|_ð}Áw…;öý“7””óOw|Ü >Û}¶ÿ§ V¶¬loowÝòÆz]ï_>/âÅ_Χç%L¼‰À®À.Ÿ,O¼ÞLz3)èwîø³Kl6/8 ê«ª¯¾ìø²ƒ?Ãô•é+³g7Öëz¿>¯ã-Ç—}¿âÿ>ÿ>Ÿ{ ë^[÷šñ/î†q#l{cÛ?úýè§|Àù%TeV¬èÏܲX¯{úõyOÇ×ùt~·U¯®zU Ë Ë‚ÿá¸õ94 :Ÿf>áBÁauXœåÎrl .©KøàÞX¯ëýú¼Ž§ãë|:¿[w)EDšs¡ØRl×€6ห­ÓÖëG #Í£T¹¬®G®Gà˜wÌ9æ@ÕªZUËoŸKر£œ{í-ö4çz­F«g¡Ÿæâ‚â]`s®w)/ŠˆÄ†`k°ÕúŒ²[,À>òA½¬^f‘^Îr\K®%×`ÆŒy™€]ìbK.¹ËòC 1Ì2Ë,€ŠSq,¢t|Ÿ‡ß-,þ°0-"rü2+«+«+u4ׯÃõÃõp°é`ãÁFÔØèØõ±ë^¾Q˨eÔGRޤI‰Û·'nÿöƒ9*Ž 8c:S~¦ZK[?hýÕVv,ÿX>XçÜ|P“^“ê;·q^¹^½ï÷¾WkïdÜÉP¦Ð'Á­Á­Ø²c³£²£ ¾4¾4¾N]8uáÔHNN†M±›b7ÅÂÆ¸qã`vnvnvÎ+ìÁÎ;ì„5)kRÖ¤@ápá@á”ÿ½lsÙfl3-v“ݤLЭuk *ÝzÄyûÙ¶gÛT,Ž,ŽÀ™Î¯»¿î†¦ýnÿp»—`KÓ–¦-M!’!PSSã­§¥§¥§¥C[b[b[¢7oN1§˜S ¤1¤1¤ ³ ³ ³à_•_Ä}çíSßN>ž| XVœXqBu ZxPx릪z˜ÿ0ß{쯤Œp2ádÂI¨N¨N¨N€û™÷3ïgB²!Ùl€¼Cy‡òA@s@s@3ttvtvtz û¯ö_í¿ ¦,S–) Ú»Û»Û»aõ±È#?†ó¼øÃŘ-UKçÈsÏM¸núªÃŽGŽÏMŸ¶€ä€d‘Ñ÷nÕߪ—U¹Í-Ê-©ˆ­ˆ©ˆ9šv4íhšÈBßBßBŸÈzãzãz£HNxNxN¸HDQDQD‘HôîèÝÑ»El=¶[Ȥÿ¤ÿ¤¿ˆqÐ8h©,©,©,1(øa\dnå|÷|·¬Q«Õj©q\Ÿ›¾êo gÎŽ ‰ ^¼,2P1úâ苼ím\»yÆ|×|W$ò|äùÈó"×®5\k‘ ‘‘k¬=°VÄtÃtÃtCdCê†Ô ©"Ù{³÷fï‰ŽŠŽŠŽ9]wºîtHØÖ°Ì°L‘?ü~ó“ÍOÄ^þÞ[Ÿ¾õ)o‹ôdôdˆø…,.Ž ŸyN%ïÖ½[K]îS2ûúÔ+S¯ÀäÀä½É{¨©mSySy`ÓlšM­V«ÕjafÿÌþ™ýÀV¶²T€ P0_:_:_ tÒI'ØÏÙÏÙÏÁCßÙ…Ù”ªvD8"¼.Àä;/½ó’îgÇ/‹î^Ñ}Åã36õ¼zžEï.'4P;ÔµcÙæMT‰*ØÃö,ËïS©@P½ª@%©$Õþë–qË8@ð£àGÖgø¯îcÿ÷WoÎ¥¡¸ª¸ ÔçngVCÎPg(¨ÓŽŸ?¡q’QFQœ …Pß©~ÕŒ1Æð ?ó3¨ûꎺØÜúhp~ïüMýÛ1혾ñ8?%~%~€ý×Îÿôþ+ŸÚÛÅS{{:o°ÿE0ój˜€äZIEND®B`‚routino-3.2/web/www/routino/icons/limit-1.6.png 644 233 144 2461 13061246471 14575 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜæIDATHÇÍVKh“Y=ùÛL’úÖÄÅ D:ÊLI…tã,´5¥-êˆB+B‰Â+³qçdÍ€ƒS]YÔÑ EÓVìÂEI«ã`aZÇÈ(iµZ*4!ØÒÆ<þ{Ï,òßüq:mï&œïqÎI.ß— °Úø©mÔ6j+óX šqû.û®/îäñ5´°xy–\ueÕ’\Ó±¦C¼2±Ê«úâ~Àä/ÖSq¬†°uÙº,µ¾@Üzp«Ý•Çmƒ¤#ìÏçÈc=ÇzHòþû7x’œ~:ý”$“µÉZÒÄ*¯êU¿â+æÇ…¿é¤õ¡õ¡e‚´}fû Ý î†òïòcådãÞÆ½$9Y2Y"5’$õ’˹\Ö’œãÕ‰a•7êU¿âSüJOéçý€túœ>€Ühÿ!Çõ|ë_ÈÓNoPzÙ0ÉK¼Äådn.7G’z‹ÞÂ4)å IÒB ib•Wõª_ñ)~¥§ôó~ðé݆êÉ&{“½`èWÎê}zIа3+|¢U´RÊ‹ò¬,:|||ÀØ©±Sc§§×éuzj{µ½Ú8ÿpÆœ±B¹Íò»¡§ô ?PÒXÒH`íµö¨$|ÄG@ÖÈr'Ь5kÍà™÷Ì{æÔTj*5µØ˜Õ£zX7¼nxÝ0P­‰ÖD[/n½¸õº1tsè¦Y/K•ž¡oøÑñ@<°ü äü9? px‹·¬(EiQTFe°Ü³Ü³Ü3ãñ¶x[¼ pø~‡XQ¹¢rE%tÝA7àzâzâzLþ8š ™}¬Tz†¾áGæjçjŸýý4àQ@ŽÊQdàA9ÊM¢²ö²ö²vÀqØqØqØŒ×÷Ö÷Ö÷u—ë.×]*Üî 7Pæ(s”9€ª×U¯«^-ö¶d·ìF¦$£ô }åçÿ¦’ùœÏÍ©œÝ2»ev ™>Ÿ>Ÿ>O2Æcd“ð$<¤ÌÈŒÌâ„8!NñŠxE¼‚_ŠMb“9•Ë ç†‹õþq*‹öczLÿdD °wH2mÎ*É 3Ìá r™\&—-ÜÏeƒl éÓ;ôŽ¢=–Ž-ÄþuýÇæÏê=B’âŒ8Ã,¬f5%àE^4¾½$儜$8Ïy’Ýìb)˸ŒSòް ;³¤þRI2gðômþ%û_¹d_Kö=–1.µì_Zr¦” KIEND®B`‚routino-3.2/web/www/routino/icons/limit-123.png 644 233 144 2712 13061246470 14574 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–_h”gÆOf&ÉŒI£#³^Ø„@$ÚVÒv*¸ÅA’¸*--­± •¬i$B•\¤ .ÌEVQ‹-®¨4±S2ŒTG*K©°qšÑZÃÔ¸ë£Ò1:7¦Ã$Î|Þß^Ì|ùÆ¥{ïw3<çœ÷yžï}çœï‘%ù_G•£ÊQ‘ÃŽ6;î~ÅýÊŠS9|Ì€¢·ŠÞúçX|dñïIïIó'«¾p½ˆÍ_¨gÅe‰ØÒÁÒÁ¢Æ<î†wêÞ©sÿ.‡FÀsÖs6­Ã¶ð¶0ÀWÁ¯‚|S—§.Ì4Î4‚­¼Uo­·ø ù¥ûôE øBñ…¢ (-)-ê¦ê¦š¹‚;5ðÆko¼ð‹ó§r€ño œrÕ¤Ha=ÓØÊçë­õŸÅoéYú9?¾_ƒ¼ùÞ›ïyúr ~ê‡+?®´ô´³@=”ƒžÒSÆûÆûd@ET€"ŠÀÆVÞª·Ö[|¿¥géçüÈãg{è°Ù½Ù ü  EÁ\l.³^ûRûMíQjeY6¯›?š?‚>®ëã`þjΚ³ ;ˆ9£žVO£ôxö¥ìKhæ¨vG»³ðÂQ´f­YLK_ =ó¦'áI¤\0fŽ™ ¼¯q- ˜S!u]]·Õ´šVÓ@7ÝtÛqNp‚ v«Ýj7ð’$ ò‡Í—Í—™Ã—ã‡ÛU·«€yϸg<å²üäûÚ»Ú»ÞóEuIûZûÚöÙéŽtCÜ÷Å}¶Îè•Ñ+£WàðÞÃ{ï…o\¼qÑÎßLßLßLáÞCG…ØÏ±G±GöŽ«»9=RííÖÑû.o,ÖÉß| P­`Θ3d— ––ƒs£s£s#œo<ßx¾â%ñ’x xž€'Ú6´mhƒUëW­_µ΄ττ¡²½²½²šï5ßk¾ËÕòôò4|¿lø›áoÈäíµš_„> }j‹uºD*†*†ü¿—t½¿Þ/";DDŠúp3Á„ˆÌˬ̊ø>ðmñmqz^§Wd²f²f²F¤cWÇ®Ž]"ûj÷Õî«YÓ¶¦mM›ÈHíHíH­ÈÁäÁäÁ¤ˆ#æˆ9b"·'Æ&ÆD²J]]Js¨¢>9_Ÿ®O‹ÈŸò~Àû”÷)ó_0˜NØmo4é/è/ØGÒ´¶imÓZ8~ëø­ã·ìx¤+Ò邺êºêºjh9Ðr å°“ì„t_º/Ý›VnZ¹i%Tm­ÚZµbKF´ÍÖ3ÿžìOöƒåG b¨bH bNù§ü¶ ñªîÕ½6nxÐð á„†CáaH¸î„Š?,~=s=s=sv}ð\ð\ðøûýýþ~;îÑÿ¼ÿyøâo'÷œÜS ·c28ËC$Õ˜j¼þƒ8. ]«W?”çT±*–¬Y$‹d‘ˆ”O–O–OŠDÑ@4 bÌ€ ŸŸŸYºn麥ëDd…¬"ÕªZU+‘²lY¶,+²:´ºwu¯È»³o¼=bñó¡s4úIô‘?ÿ¯+¹ èvWΚ³ó³ó-Ë–eË ³=³=³î›÷Íû&$¢‰h" w[ï¶Þm…ÌþÌþÌ~0®׌kܑܖÜÆ_°F1h ÿÈë-è?Ö•Ï|ž)ÏTÊcƘaÏ10·˜[(8$2V/=öÌ3Ï|váÂêϪSuÌ¿?èA=È5 sìÙÛÏ~sŽýÆä×ò“#nÄ%F§Ñ‰ÆQ†Bñ—Ü`U§TH…@]UWÕUPê”:ùœÏ^.s¥.ËŒehô-FKÁä×7»6»¬zlò?±ßÊ'övñÄÞÇžÌìÞŠ½iDIEND®B`‚routino-3.2/web/www/routino/icons/limit-24.1.png 644 233 144 2765 13061246473 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܪIDATHÇÍVkLSg~ZÖBYP£è¤Ët Åd.™m,1â„%#K ÜÜd‚û#‹F/™$ÞpÄ&^¢™D‚¢Ñ-³FBX(( ÌK°`õBiOÏùžýh§ºì¿ïŸ“÷ö<ï9_Þç|  ¡'HýTýT}\Ðףţ–F-ýø· _-“ºÕºÕ?“ñ‡â‘ä‡Ç><¦tj¾šWëÃû ?œO#Z ²&²Fg ùÛɼYy³¢’‚þ^'iª3Õùäºúuõ$yþÄùÜ@ö7ö7’ä ë +©ùj^­WûU¼p|l‡ — —uÉHc¤ ?Êø(ÃòC° ÇBf/Ï^N’O#žF=I’òÉXÆ +I/½Tm0ÌWó¡zµ_ÅSñU>•?8ÈÄʼn‹rÕ—«¾4 6tž"7'oNVù¤:’;¹“±dÀð’¤ü•üGIáN’¤Ž:RóÕ¼Z¯ö«x*¾Ê§òçÑŽÒ•62§+§‹T\$)Ý <–¦KÓIåu`\`¥Ð¤BYÌ3Ä RIWÒ•tj6Ìç|NrH­W슒²8°#°ƒ[‚ødnTnÉ~•_=ÊßàÓ¤Ékòz?oºnuÝ"¹$™EŠEbý¬à6n#9“39“d>ó™OŠ&Ñ$šÂò¾u´c&?”ÊIQ'»dý¡p½]Wº®*p°O 8iõMÆÛ‹í*Œ2§=²¥¼¥œÜ·gß®}»(Ú{Ú´?ø/awQwQwycòÉ7&kq1(Å )®‰kâšwvÖ;ë)™» ÝO´¯*^¥mõMÈwàN9yaã…ä_ßÿýÅß_ˆÂØaS•©Š£¶©6³ÍLN«V;­–l5·š[Í‘eŽeŽei«µÕÚjþÐùŒ|Fók&ÔL¨™@ê § §ÉÓ™'Ÿ|ÆÑÐkÊNœ*P»S®Ç¸GŒ#ýsÀf·ÙÞÏ:7unÒý±ºì²?y½÷ºçºˆY³0f!Ðq·ãnÇ]`÷¹ÝçvŸF*G*G*sµ¹Ú\1 ınán@7¤Ò I¿&O:ˆ Ýwºï¬ÖÅð¢y‹æ@ÜŸq¦®˜nÜhÜÈTû+ü@Î×+rW䳬n™k™ H5¥šRM@æìÌÙ™³Ù(e#pÐ}Ð}Рئئئ·³ngÝΞ؟؟ØC²!Ù (ýJ¿ÒäŽæŽæŽ©¾Tªy12~düØ{xðÚxÖx"²#²™ªKKt÷tcš1 hû¶³¼³‰¶Ÿlklk€‚Ë— .û­û­û­ QˆB`®c®c®h›Ô6©mÐ[Ò[Ò[¸¶º¶º¶III€Ü"·È-a_²]¸„ @Ð0ND@Ê’²@¹¨\ÔÝÓ‹=¾_Ck3Ðt³é&p« -¥-…E2¤©oêŸ×»ëÝ@¼3ÞïÖ&¬MX 4Üo¸ßp(Í+Í+Ͳ«²«²«€•)+SV¦iii€¯ÔWê+Õ‹>]] 2#,¼ iCV8£Ñàµz­­ÍàÞÐVr}Ùú2r¤&¸%ÿ,ë›ß7Ÿt_uw¸;(úÚúšûšI¿Ãïð;H–±Œe¤¿Ñßèo$_å¼Êy•CŠ8'âHÏÏÏRy©¼T^jK0ôÉuÈJ19, KÚVòjɼ’ya[©ê†¦#!Su†Â",cºCJ”(‘ôÐCI}ô‘aùÿµ·ð²4¾wuì­¿z¥›sÖå¬#Å© 2‹f9VŽ%EM`80L‰¿ð*¯jÊÏ ná’9‘I*”)“â©x$‘ìSþõÊzJL”óå|’[ßQþ×ï*ÿûû¯|ooïí}ìý¼Áþ /Ú­âzL¦IEND®B`‚routino-3.2/web/www/routino/icons/limit-113.png 644 233 144 2555 13061246470 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü"IDATHÇÍ–]h“WÇŸ´Éš`—Øxa Ãî¦Nd+ÃMÔRÖŽN»®0tócô¢ŽÔ©¸ºÍáŠXt+V Ƶ¸Í‹ÙÁÚhÇ(¥T”úÕ¦…­+ë”Ò†~¾yßóÛErúF»Ý÷¹ ÏçÿÎÉù¿G@DD–§²BY¡,oÊÏÚgÇÝeî²ç/¥ü3&8Þr¼uçøNûNä}›÷­u×öu^×gö‹Øó3ñt\–‹ȉæDá´ÿ)T®«\ç¦üÏcàió´M%ძ\hmjm¢Fý `<<Û×y]¯ûõ¼ÌùòéSø"àºæºæ†œgržç"ÏE >L À›o¼ùÀŸÙf«,0ÿrÉUa Am2|O×ë~=OÏ×x?ÅG °%°Eʫʫ<çS w›áઃ«4žÑ|ÆgäB2‘L˜ïšï2*¦b8p€íë¼®×ýzžž¯ñ4~Š^}|a/©Nã'ã'›F¬!öeìKòù‡ü,²ØÉØÉØIˆûãþxF¾ßÕïêwA}SýÙú³Ð;Ø;Û;kï¸ú+…G¢ú£êôÑž¹‘&Ö[KwK{K;p@íkÜg.º"šÍ×a×a×a¸¿¿·[ªZªZª ;‘ÈN@[Q[Q[ŒŸ?1~¼=ÞoTæWæWæÃJµrjåü¾âæÏ7f.MoõÝÅSOib½µNo‡·£èU™*)*)‘ý""Žó¸fXDfdB&D‚î 'è!L˜°ˆHˆ8¦ÓŽi‘`w°;Ø-¢v©]j—ˆ¹Þ\o®©s×¹ëÜ"¡­¡­¡­"ƒ§Ïž™WÉmÉm’“úC9ÎË%S%S"ò~šä=›÷¬ÕFØ×ÞŒ$_L¾hïLdcdcd#4i<ÒxdñQF #…‘Bht7ºÝv|bóÄæ‰Í°ýúöëÛ¯Chwhwh7ô.ï1z Ïúu¬y¬4Ÿ,ëGëGG¿¤V - .ùCþXðEÊP†ˆ È€ È"3Œ£AÄßìoö7‹´¯n_ݾZ¤x_ñ¾â}"­¥­¥­¥"¾@o Wäv˺;u6móÖ¼%¢ùd‰$‰p_·duvtvè:öÊ Ê¥\2¯#Ëö/Û¿l¿ˆ«ÌUæ*[LÌ{ß{ß{_dÆ7ã›ñ‰”——‹äÕäÕäÕˆøÊ}å¾r‘µמ[{N䉷{ÞîÑóÙ›}«ë‹®/Døüß­äZ²%ÙbßÊÉâÉW&_¹œ¹œ¹œÅG9Yœóøž-Ö¾ö|9\Ï}ß×uçá¾ßG IZ”úø ý…þ…IìÿÒÛÏz?ëýå¿&ñø>ö}|s/¼vìµc‹^ü³;ìa·ùéõ’ÇŸ®g÷µHÞF°#Øá«Hჰ¹dsIV^é‡ì®ì®§ ØÞ½½àÌ©3§Ø ®<¸ð¸âqxØÆm¾­·|éü:ø/} çç|w ˜Ì”àõÊ×+C_'FBPóa͇ãóÆç?8€rL%Š]SiØÆSù¶ÞòY~«gõ“~KÊ—”KðQÝGuÙ'“çaײ]ˬ^¼ h¢‰HDQg›³˜~Ó€xØÆm¾­·|–ßêYý¤ýón›ß…MY›²æ ]æ‰ó›ó€ÛåvwËÝ·c™½f/ÞšfšiºqwÆÄŸN¾“1_%®'®'âD€™?›‚›‚Ö`ó»iW)I«¾‡ìÙ¢¸áx8>Çÿ¸ n3Ψ›åfé2í¦=ÍÐCòЃ&a&ìg?ûÓò>ãG€÷œ_œ_’¶€ˆ…gÂ30§Ÿò“2öã%رoǾ¹ÿ»Ú^é3#fc#ý­ý­ý­p;÷vîíÜ´v‡Ýa®\5¸ ZÖ¶¬mY £·FoŽÞôü›kñ ñ ézV?é'eì÷o -ÒÌçüà”:¥ÄliG~G~G>ºÝnh«j«j«â…5Ô8Ô8ÔË#Ë#Ë#°¾n}Ýú:X]´ºhuLO½1õÆ\zÌ\JéYý”¿´ðâ‹kÖIåË7Jš‘$ßIíô÷ú{$‹ AI“šÔ¤”w<ïxÞqÉT›jS­ÖÀÄÀÄÀ„”_”_”_$]n¿Ü~¹]Ê f3ƒROSÏÑž£séAóSJÏê[?°xÁâîLÝŸºŸÞöæ‘yN¥SéTz'RYVYVY'öœØsbÏ‹'6vwìîØ](Ù]²»d7T…ªBU!ÈlÎlÎl†Ó§ NxùN¹Õ³úI?~Éíq{|CR¢6Q+ÉH’–HÕ¨¤€2”áˆ4ƒfPòuú:}Þþxáxáx¡ô´àiÁÓ©¸¦¸¦¸FÚй¡sC§”{ ÷@î)Ô::ãÕùÖX½”~ÊO†­ˆVܸ*õEú"o"ÿm_Hæ–¹å;®7RHAK4¿u~ëüV){,{,{LÒˆF4"Õ®¨]Q»B:›s6çlŽôl鳥ϖJ-Ï[ž·<—êÏן¯?/••–­+['éSGŽ4ë¯ÉP†húzûz}'¥è¢è¢Wÿ·+9Ç nx]ùdå“•OVB¬1Ök„ Ãt`:0zé¥f«g«g«arbrbrÌ檹 p{Hü•ø ˆ¿´+Óæa'ìücŽÕ»õss æõj ¥ãRJ)³Õl5[ÓæÛ[¦ÎÔ‡ g"mŽ%±pì?çØK&ܹè\p¿u¿%ÎÞá ‡9Ä¡¤&ÌsÇÜfSF¿£‰&0WÌcóÃ5·Ä-!Îuç:à¤øçô^˜ü¯ì·ò•}]¼²ï±Wóû7i¶á}oý¼WIEND®B`‚routino-3.2/web/www/routino/icons/limit-9.5.png 644 233 144 2573 13061246471 14610 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü0IDATHÇÍ–ÛOÔGÇÏ®²@¢â¹<à%냗@b¶!†„U"AQƒoÄËC56Lܨ ‰¦å¥J4šH šˆ°ߊTÄx© V°hŒŠ®kÁ®E—ýý~óéÃîìnÕ?ÀyÙœ3gÎç»3sÎoDDdräWÀ>Í>Í>)lÛ·ÄüI…I…³N…íc&ØVÙVý¹Rޤp68¬Þ˜­çu|üz‘XþxžöËd‰9Ï&žµ¹#v-¬Í^›”¶ì€ä Éþ5`kËÖ€óçù¯^v»!fëy¯×ë|ñù¥ö¾$\N¸l{‰ŽD‡Ì(˜QàÚxä‚Å+Šž{>NÙÀ|L`‚rèá³õ|$^¯×ùt~ÍÓü°©ySóD ´¼´<ùdxAïÏPY©y¡ À!1Œ€0+Ì ‚ :T6l³õ¼Ž×ëu>_ó4?¬Gþ¶uù(ÃãB¡N0Ÿ˜OÀ •F%!ão3ÍLC©j›ÚÆÇ£ƒ«\ó€¹×Ü æsµ¹enëë"Äf±YýÃŒyl›X—w”""s~‚äÁäÁÀxFû}±£Y® s¹ŽQ¾§™æ8›ØÄ& Ÿ|òãü7¹ÉMÀ‡ (`­·Ö3ªóCŸÙgB”Ñvìwؾû~`ÀšOª‘d$EqêÞœ{®{.8¼èð¢Ã‹àñÃÇ?üxÃŒJ£Ò¨„sUçªÎUA}Y}Y}œðœ(9Qo§½Íy›ƒÕ«zâOó#z"ÂþøN¿9ý¬€ªŠp‚=zª{ªaÖȬ‘Y#°¸|qùâr˜?{þìù³Áç÷ù}þ˜°—^nx¹2d,ÈX¥wKï–Þ…ŠÆŠÆŠFêº=t;Tšæk=v‘Ií“Ú¿øJ$oiÞR–ŠˆØNFN:±+¹ËÙåI›ž6=mºHç™Î3gDN‡Óáiu·º[Ý]÷»îwÝ  …"R-ÕR-RÒQÒQÒ!’1/caÆBÚÔ>µOméšæGõ€s¢s¢Õþÿ¨Ñ² ÿiÿÓþ§]“]“]E®"W‘ uŽ:G465656Åv¬ýVû­ö[På®rW¹¡¡¹¡¹¡Ò¦M? WZ¯´^iÅ[ã5/Ì×zì"Ö%ë’­GÄXi¬‘—""2UïÀû´÷©ïSEæœ{pîA‘%ÍKš—4‹LY3eÍ”5"3÷ÌÜ3sHðbðbð¢È@Â@Â@‚ˆë†ë†ë†ÈfÏfÏfH¦ÊT™JÄ?Ó?Ã?#¶ÃìÖ¼_ëùðŽEzQÐ@Á@M`G`åååBfjfjf*x[¼-Þ)))†œ¬œ¬œ,¸æ»æ»æƒyÞyÞy^H)H)H)€Ý-»[v·€õÈ궺¬\+— ß~úŽ}\•Dªäã”q*V•Á¿‚ÝÁnz1ôbè°Œe,åPå€×e¯Ë^—M4ÑcmcmcmðÊþÊþÊj›Ú¨6ÆòÑoô=q¼OWe\ ööF,çK³Þ¬gT}­©C±»¡²T–ʼxñÆùkU­ªu\WÇãüGT»jŠÌÓæé¸>6¦yŸìcqO’' 0¢ÿù8hšƒ„Ôu5¬†Qts‡;À?¼á ¨gê™zyÇ; š]ìõ›RC(~µÒ­tB`v›Ý€©óGxwþÏö[ùÙ¾.>Û÷Øçù‚ýØ;o¢ßIEND®B`‚routino-3.2/web/www/routino/icons/limit-182.png 644 233 144 2741 13061246470 14603 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü–IDATHÇÍ–oLTWÆß¥Ì #L5¡… IAdž]? B¬][»M±¤VØÆ¤­áƒÝlL›ºKŒv›”Ø i$šl”¥)²“eB Mˆã4Ù† ìаb –t¬Ó’¹sÏo? ‡;]ÛïÞ/7Ïûçyž{Ï=ï=""’¿|°?a¾6íoZqÇsŽç6}–ÆR`{Ùöòõ¿@Þ¹¼sî6w›yÃÂ:¯ë3ûE,þL=—|±Ùþl¿Í»ŒOÃ+O½ò”£(φÁp~2àh÷Ñn€®ö®vŽÁݯî~óƼ`a×õº_óeòËéÿÓ¬Þ¬^ÛmÈ~,û1(ÝWºoãÓ·6Bí µ/|·ê»UÊ©ÿ¹ä*/'޾æ3°Î/×ë~ͧùµžÖOû(|¦ðxéÕ—^u^J7ÜøÞyüǵ^2|Àä‚7⩆T‹ Â* € XXçu½î×|š_ëiý´ùùÚ~ô;¨sÔ9€Éa0óÌ<0w'?I~BR5)Ÿò¡´eó†ùù ÓÆ´1 ʦDÉÊÄŒ*›²¡Œÿ,m_ÚNÒL$¿O~¿òÀÃ,4€Òú’i¨âcLçŒs&¾&ÍIs…÷÷©©dM²†Õ¡ÆÔ˜%¨b*¦bÀÎpÆŠ$H”K¹” øtfäϘÓÂZLóÃͲ›eÀ‚sÊ9_­ý,»0MM+Ïù5ìIöX> 7…›`jÃÔ†© –Îhýhýh=œ:;tv®W]¯º^eå¯ ^¼6-¶œn9 ã—Ç£ãQë+Z£ñ½Æ÷ôÒ^\6y›¯}—}—sêu0cfŒEÿ:®?ìA{ЄÞÂÞÂÞB¹3rgääŸÊ?• Ož>< å¡òPyÎûÏûÏûa}`}`}¼oÄÒƒ¥Ï—>c;GnŽÜdqÙÞëæLG´#ªEÞ¶‹¬í_ÛÿÛíòÓîªÝU"ò–ˆˆíns[²åžü ?ˆµµµˆÐ@ "f‰Yb–ˆätåtåt‰ìŸÝ?»V¤¤£¤£¤Cd¢`¢`¢@äøÎã;ﹺíê¶«ÛDÖ¸Ö¬[³Ndl÷øÑñ£’þ l—8ùtèéÈŠp»Ü.3 ó3ó3Ö¶Oí3*JkIö´ïißÓ¾¾¾Ðçîs÷¹¡rkåÖÊ­°÷þÞû{ïCÙxÙxÙ8ܲݲݲÁhõhõh5x6{6{6ÃãˆqÄÕ`>k>›1fþ4_7_Ú]ÄüÂüÂe¼h¼(ú*”,ùV¾]ÁbN˜愈£ÖQë¨é,î,î,©.¯.¯.¹’%ÿJ¾HAsAsA³Hëbëbë¢Hí¦ÚMµ›DêÛêÛêÛDZßj=ÖzLÄü‡yÒ<™¡÷¦Ñcôˆh?v‘¸7îûZìýýºŽ7d‹ÊRY²¤#®W«Fd)¸\ Š4‡›ÃÍa‘¢¢"‘¼{y÷òî‰ìº¸ë⮋"¥‡J•™ÌGæ#"ÝžnO·G¤¸§Ø_ìé‰ù<¢ùyÃ4B}¡>‘?¿¶+é5|†ÏÚ•v=¨zP‰`"˜ZKœð'ü ?ÌõÏõÏõûåì—¨Äû?žøñD†Þ?Ÿl|ò¡]Yñ18ï:ïÆWÃdj2eÍ10_3_c!ã·“vºCíP;@T@2â9*Gå[ØÂ–Œ† j£ÚÈ‚Å?9<9 àŒ;ãͱ_˜üI=ùSS©) (õnê]’4á#còóhR!†bø3'8ªSEU¥þr§Ü$•߈1àoš¿nUÝ* ñÐädÿ•ìéâ‘==š'ØÿË ÐZµ@IEND®B`‚routino-3.2/web/www/routino/icons/limit-85.png 644 233 144 2500 13061246470 14516 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜõIDATHÇÍ–kHTiÆÿ3jÎ@fšva†°+¬H¸}”¶£)Ã"ˆíª»ˆäŠ[}hA62?l)QPL—-h¶˜Z](BIöÓva%dÝØ¼ ÛHŒæœsÞß~˜9žÙ%—ýèù2<ÿËó<óž÷ýŸW@DD2¿öeöevWÛ[qG©£ÔóC_ÒÁVa«øíd\̸°ðÚÂkF¯…ͼYŸÜ/bñ'ë™qÉ+~7ý®­$ÏÀÞ {78râ¸9ÎûÎû“  ÜóÝóñ% ÷ ÷Œ—Œ—€…ͼYoö›|Éüræ_ú"ÖžÖnûÒç¥Ï[Wluׯ úÝàÝîÝð6åmв€>Ìg¾*"D0Ÿ¿’°™OÔ›ý&ŸÉoê™úq?ÙÅÙÅ"°kß®}Ϋñ†Þ›Ð×gêÅîM41´ˆЫô*>€ ª 6l`a3oÖ›ý&ŸÉoê™úq?òÏw{þ3¨tT:{FLïÔ;ŒSÆ)bÆ Z  ´ßµ>­T®ÊQ9ÀC þµÞ¨7‚¾ZwënÐë-z ŠïôQ}”èúð!ÁoêÍèK²¡Õ߃sØ9I…×úkˆPF³ÑLTéä“|ËINb=m´ÑjP ªÁ¤¸††(¦˜JŠcì7ö'Ø¡|FoF?î'aìR7;}ìôLó'„µ7Ú •¬Œ¯À‹Ë/.¿¸ Í Í Í j 5†-YÿrÿrÿrhÝÙº³u'\©¼Ry¥&–M,žXê}Ô Ù›³7go†*G•£ÊîÝîÝîÝÐQÚQÚQ î÷ˆ{¼'¼'¼' ÊWå«òÁHh$4²þ€úE«ÑjL~uÐÒû±‹¸º\]E"Å[Š·$ޯخʔ=Ïž'éfÄA#(âô9}NŸÈ6ï6ï6¯ˆ§ÛÓíéé¬î¬î¬™ššÁƒÈŽàŽàŽ È’µKÖ.Y+ÂÏ´Ó.bËNÙ”²Éä·]µôã~RER¼)^Ö‰¤õ¥õÙLïä°í¬í¬d‹H@"áÜpn8W$Ç™ãÌqŠø<>Ï#2ŽGEVùWùWùEöŒíÛ3&Rp à@Á‘ºuë6Šd<Ìx˜ñP¤Ì[æ-óŠ(§>¡OˆØ§R%UäHÚƒ´’-’²&e ë\]®.u† ‡ ­¥ÖK´t-ÝÂåÁò`yj³j³j³¬xQQQ?”ß*¿U~ ÚÂmá¶°•/l-l-l…¯n¼ºñ*‰ÿ›ä=–~ÜϬ{LeÅÚcíÖ ]]]€õ‘õ‘õȼžy=ó:T‡«ÃÕaxéxéxé€|W¾+ß---P¨ÔÀè7úþ$õú"}Ñì{löSiÆŸxÎsëTNE§¢SQe”QÀ0ŒKoÚ=ížvÃØÒ±¥cKAUGÕÑ$C¢P¨¤Áû_§ò#s,23Çn7‰ªOÕ!uÔ}uGÝI:]ªBU€0FTêQ=Iù‹ê¼:”Ñ@€Ñd4eúͱL~bÏÐõ§úSã¸qœŸsŽs(TOÔàGüø“Vä j¨Õ¥«Ç@  À¨3êˆY| þÙ'ÿœýVÎÙÛÅœ½ÍÍìß‚'µ`ÆÓ IEND®B`‚routino-3.2/web/www/routino/icons/limit-194.png 644 233 144 2633 13061246471 14607 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜPIDATHÇÍ–ßOTWÇgwùµ•(&M#)…˜Zb‰YbƒýA³„…´*Ú`ZSíISŒ/þX“JŒ­•¦úÒjY»1›¢•šHjLÅX£­ZˆÖd­›¥ˆ@DÁE”õþ8Ÿ>,gïZûx^î93óýÞ™9s€ˆˆäÍ>Ü…îB÷ܤìþÈÑçÔæÔ–ü”÷YàzÇõΕ-0¯s^'Àüïæg_sd½¯íÓýEœøéxZ/yâ(²ÃÙaWõ¬¼Þ+¯<çÙ¤üExxL›°á§ ?tì>HŒü6òÀDõD58²Þ×öÚ_ÇK/;þƒ/™Ç3»b•%Ï×<_SüIÒàïbhXѰà¦ç¦G¹Àº ä’«ª)¦ÐkÕ€ 8²Þ×öÚ_ÇÓñ5žÆOò‘Çkû¥ss€8€qìyö<°_7¾7¾ÇP[TH…Pš²}Ç·ÇÁ¼kÞ5ï‚úXµ©6þ»”*5;Ì »ÂÈ42S|–ûïïšà—þ´RŠˆ”~…íöOe@ÄŽØ©€uVÔ¨2ªx ©?ÕŸiHjBMÛÙÎö4 Í4Ó ´ÓN;°’·x ÔïjLØ1;Ʀ“ñ!r?rÀ;æ›ÊÐ|f‰í;­[[·¦òð²:mülüìðèû¼okßVˆ–FK£¥þÛý·ûoÃÞŠ½{+ jFͨùDƸÞzýƒëÀéçNûNûœŒ«‘$FëæÖÍ:sûÎÌ»ôB¿„~:Ôz°'ì á‚pn8<Ç<Ç<ÇàhÝѺ£u0ºkt×è.(ª(ª(ª€ªUU«ªVÁ’À’À’Œ¯_3¾Æ!VRVRVRþý]þ®”:a?3‹÷Oh 4 ‰]úL`î¯sUaNݺwë^Z©²­KÖ%Ûa+lAÁî‚Ý»¡÷pïáÞÃÐ=Ù=Ù= ¾_‹¯Åñóõúz}½ÐUÜUÜU ñŽxGö/ì_Ø«_Y½lõ2ÇÞZ¡ßF–Ž,ÍÇ-âið4𢼙55-zÝQ¯±žõ"Mî&O“G¤¼¨¼¨¼HdÌ5æs‰Ô5Ö5Ö5ŠL¯›^7½N¤Æ¨1j ‘Áø`|0.\\\,l ¶ÛDªcÕ±ê˜ÈÅÆ‹M›D?Œ­Œ­ñOâñEÆòŒå"šO†ˆÝc÷¸þeÖ›õR&n¹,—%_2eH†RDE «a5,â>å>å>%2S8S8S(R( ”D|s|s|sDb'b'b'DJ®”\)¹"’çÏóçùEŒcÀúz¨s¨Säê«Á«A‘"yA^Éçü£ˆ¸4ŸTºJ•R­·Ú<* ¡5õ‡êÕ‚®ý]û»ö;¥ð÷ø{ü=P˜_˜_˜›Îo:¿éü“Í ö@íZh8ØðMÃ7NYmº§5~ªÇþÿTrÜ ™!§åâ¯Æ+ã•0sræäÌI0±'±'±Fã£ñÑ8EYÉ¡`ÇÀ´íAx¸ôáK_‚É“‰ÉŠËfŸÙX³x÷[?mýô‰SYúxG¼#S±"–3ÇÀn±[xàänvURI%¨µj­Z›vhÊU¹*¤Ùëj({£½‘©9fD pð›cÿ3ù HN~+jEg­ÍÖf ¶"mò³mluNSç€?¸À…'*©ØaÝ´nbgF̈Vg1=©Ç&ÿSû¯|joOí}ìé¼Áþ „ë/E+CÚIEND®B`‚routino-3.2/web/www/routino/icons/limit-4.1.png 644 233 144 2410 13061246471 14565 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܽIDATHÇÍ–_HÔYÇÏofGG 3ÿ-ˆQ´Å Vd=ì>8iF¦Ìô¢‡Â(öi“]h‹Z‚öe‰’¬a[%I1«—^Ôe{‰’lÙÊ–\QñAÅ5÷ç̽÷³3¿ßoÚ(öÑóòã{î9çûåÜ{Ïï ˆˆH^ú+à[å[åËMa_ƒçî îúâ×nR`Õ[õü+.¯¸ °²ee‹~áag݉ÏÌñêgò9~ÉϑݞÝn…Òø<Øx`c°(…/õANgNç|Žwïè¸Ùq““0þhüÀth:vÖx'ß©—Y_Îÿ‡_÷÷­¿!;+;KVï\½sí7©€¿ÖBížÚ=£þQ¿ñ€š–³Ü„€Yfql2;ëéx'ß©çÔwøþ”ÂÊÂJ¨;Tw(çz*áÅ/pªôT©Ã—è.påœMΨÃê06˜>Ó€…vÖx'ß©çÔwøþ”yoª†H0týN\=Pt‡î aÊL½©Çè ½AoÀ³9æ˜âÌ0ã¹u¥>¡O`Ìɱä Ðy:ˆ§ë»|¿d *ûrÆsÆg?ƒA5¨€¨}I_âeDˆ€0Íã A³ïm¥kêz£Þ€é4m¦-3^×é:Þ¥QËçò§ô¤…5ýÑ3Ñ3@@o•¯òÁ|mÂ&Œq꾎¾Ž¾ŽBoIoIo‰Çg&ͤ™óÐ<4=ß•¾+}W`(hÙÐ2/Üô&î%î¹}Ýìò§õ¤…=ýZgZg€EsŒCÉD2Í+úéSmªM5¬kX×°®ªïTß©¾“Ñ¡6Õ¦2:Ó^Ü^Ü^ ®@W  Zw·înݲGìì´Îc.ZO$·'·§â+‘ʪÊ*é±®Ëfÿ~ÿ~É–/¥B*DëëëDì ´ƒ"MMMâšÙf¶™m"fÌŒ™1+nÅ­¸HÑÕ¢«EWEL•©2U^¼äú·ú·Jv X×]þ´Ÿˆ¿Ö_K¹Hànà®ˆÞ ""SòÕeu‰ÄB±P,$r+r+r+"Ò!Ò"OjžÔ<©>:|tø¨H 4P(Ñãz\‹D숱EÊçËçËçE¦¦¦3„-H‰”¸hÊáwôøDt·î¶þIîKî±¾‘B'ÃWè+ðˆlQ[Ô%ò¬ûY÷³n‘‘èHt$*2pvàìÀY‘‰¢‰¢‰"Õ¯úUF'Ÿ›ç湈 Ê  fSòJ^¹¨Ðáwõ|pÆÜ=W1ÃVê¤:é–æ–æ–f_ _ _ôü›vlÚ±iLdMdMdyþ½±½±½1¸Ñ|£ùFsÆk\,^,þøûðVι·²L•)6¦£‡ôKýÖ,¬YX3á™ðLL®É5¹0umêÚÔ5Ðoõ[ýÖ___v¶-¶x·’ûɶ¤{Y>z+ß›cÉÁ¤[ †E}PäSiÏ<ÓLƒ$R#æ£f;}I‹8¢üï9ö‰ÉŸP=ª@ŸÖ§IpŽÛÜÆð9ùä…3jFÍ(0Â0Ã: ÙÎv çÔ¨%‘½Î¼üää_²ÿÊ%ûºX²ï±¥ù‚ý¼êU`ùAIEND®B`‚routino-3.2/web/www/routino/icons/limit-32.png 644 233 144 2534 13061246467 14523 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–mH•gǯǗÔÊ·hù½ ‚\Ô 1{-öšÑkÙfÜ̬±ðùL¿Äˆå»vG³ùì³:guøG^»² ""ÞépðÞÁ{õ×ë¯ó98:ã¶qX¶7óÍz/_Nüƒ_BCµA›6G’6%mZZèMè[ Û·nß 0<¬‚Àó0ŸùÊL2‰¹ÞØfÜ—oÖ›x&¾Égò{õ,L_˜.;òväE\õô~EñEñ&Ÿ»(§œù Oꓞ|O>.Pmª ,ÛŒ›ùf½‰gâ›|&¿Wüýl«2!;<;PîvÜžfO3€Qb”à6fÔµ¥ÿ®¿Ô_‚ñ«ñÄxâÿb/Œ^£ô_Üéͣ¨ÀÓóÈó(ßäóóK  äï ÂᘠWžWÀ À0ŠŒ"¦)¥Ž: …‡<´„ÐL3Í ¢U´Šê|yæ*ãÇ@½g9ËŒJ£’i¦M|ŸŸß«Ç'ìÂÏPPRPâß÷&õ}âˆóî 7³7³7ªª«ª«ª¡k k kÀÒñlâÙij 8[z¶ôl)¬p­p­pAuZuZu,:½èô¢Ó`»e»e»IYIYIY`ß`ß`ßpäîBw¡‰¯Xü^=A"Q-Q-)ŸŠ¤g¤gøÎW´«òIpNpŽ„™Ããð8DÊÜeî2·HîãÜǹEŠŠŠEú’û’û’EŽ´i;Ò&Ҝלל'2/r^ä¼HûFûFûFñ/¾Önk·M|íªÅïÓ±‘±‘ÆoðfäÍH@Ûÿ©^¨ÀÎpÆÚéÔÌÔÌÔ ìjÜÕ¸«âZãZãZ¡§¾§¾§ìÝön{7¬r¬r¬rÀ~}¿¾_•¯òU~ÀÝ+T¹*7p̘ü^=Q-Q-ê8Ö:ÖZuž }›¾Í²kÔ>¨})ûRö¥ì³ü©7Ro¤Þ€Ã‡:|â÷Äï‰ßå]å]å]0U0U0Uº[wëîa=ê’º`ûù½z>|ÇÞé5zuÇÞ½z;¶ó¶ó¶ó0÷ÊÜ+s¯@á`á`á TvVvVvBXSXSX¬ë_׿®¢G-ŽZ ã ã ã¿ý~Ëû-¾cîJs0þÂ0ÃVWêëõõúz;9vrì$‹ÆEpV8+œ0??#í#í#í0zyôòèep~å<î“ßÔ3õcýdäfäŠÀú­ë·:.Æ :¯À™fšzÑÀ1Ž1´°зéÛÕ¤š°aË7ãf¾Yoò™ü¦ž©ëGÞŸíOŸCqjq*Ðmc’1 ŒœèÙèY¢ªQ½R¯P¤‘B hÚ;íè%z‰^š¡éšêWõ@=5C­R«PÚ# F5†¢¯£¯Ç~p3Û´M L}‰ohþi GÐ '‚ßðc£Y£wG—G—3¨n(¿òcYø½ ƒ Z®Ò•®tà(G8—÷ƒ±ÐXÈ ŽñÃÓÙOgƒŽnGw8Ñìg´±s üHùñ™jŒz¢K§ñ“ÆôÆtÞ Þ ÞƒPb(1”§Ÿ>~ú8Ôl¬ÙX³jýµþZ?J¥RèÊíÊíÊ…SóOÍ>5žÜ{â{âC»czhååæhÏ=°ÇÞÛÒ[ÒæZáZ!"gEDl96WÂò„å2r}Úõ´ëibËšÿ<ÿ¹HGkGkG«HŸ«ÏÕç©‹ÔEê""µ‹k×.ÙÓ°§aOƒÈïï¯H¾‘oä"ž~ϰgX¤è|Ñ¢bû}Ù£gžÉˆí˘žz¹¢dEÉèeé-‰÷'ÞWnBoCoãF‘¢·ëíà6ܺ[‡é«§¯ž¾®ž¸zâê >°ê¶ê¶ê6Ø¿}ÿöýÛÁëô:½N¨ W†+ãFžµ=«,« j¾¿èºè²pý«@u Ì~ÒÓÒÓ ô{ƒÖ±× ´EÚ"«°ÀYà,pÂùËç/Ÿ¿lá===à|ì|ì| ¾L_¦/ÓŠ?¬zXõ° ²ÙÎl'”ieZ™j›QhÆ­™ïz‹{‹Áì'QĸmܶùDiEZ‘d‰]:¤C2$I1SãÔ85NİvÃnáu[ê¶Ôm™2wÊÜ)sE²Y¬€H{¨=Ô)Ì(Ì(Ì©rU¹ª\"{¿Ù»oï>ãg£Ò¨I»ØE2d—æÑ<""†×ðÚ|v‘p^8ïñobo¼ßxß”c§d©$•$#&2~Çøãwˆ${’=É«±¦œ¦œ¦‘uÖ]XwÁÂ[š[š[šEôiú4}šHýÊú•õ+Efxf¸g¸E<á[í·ÚM~vZƒ·Á+2ÖÏJîh×´kÖ'׿¬Iÿò ù†|Ö¨ÞT¾©|S ‘È@dÀÂ#'#'#'áeáË—…l6 t!t7t5ô㻃ïÆéýR>¯|žu*­=†£ÇÑN¿î×­=F©Q¿¡føÃŸÃæ0ÿÃÔ5gŒo ø›ýÍŽ°#üÁû—Í…Øæ×»õn`ª~H?D”#\ãšµ‡pJ*PAqú_³“ ÜªKu¡T«ž®§Un­OëNšüÅ Å ÀЛÿ£ý¯ühoí}ìã¼Áþ —pð™ö„è(IEND®B`‚routino-3.2/web/www/routino/icons/marker-54-red.png 644 233 144 4172 13061246466 15441 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü/IDATXíWmL”W>ïÇ(ÊGºepƒìúÅ+hº‚È`ë@¢­¸ÆÅÊVÝ4ëhšˆ"uÑ$ÖBÉ*:Ìàš5ueƒ[?Òµk[7å‡Y”ÑP„†yß÷>ûƒ¹ï;3éj6»çœ{Î}ÎsÏyî{3D3K!&®‰pF8#œÂËÀBô¬®Y]³º ²eUVeõÞŸ)Ò)˜ ³£$“L2÷PŸåù|?Çãø¡õÄ5¡|‚ùí¥½´Wt„Æç/•»ä.¹Ë1"ìö ût"1ñcñcñc¸¼éÁ¦›[¶ lŠsŠsŠs ŸÇy>ßÏñ8>¯÷j>$þ:ÔO>)Ž‹ãâx:ïPbYbYb™ZÑr³åfËM6ÛóÜóÜó€ ¼˜À&ô£ý€îâ<Ÿïçx?´^òÉWó#ó\Ñ-ºEwÿ_9@Îõœë9וU}þ>Ÿ}³0 ³@QkÔµP3Ô 5PmªMµù8Ïçû9Ç× ‡Ô7ÏÕ© Á!8ˆä#òùHûw|CþÑüªü*Ŧ;¨eiYð(íSö);Àú•L%À´šª¦€zH=@à ܀aÓ˜ÂÀúÙ ”vß¾vP›§Íƒ‡§ñz¼>çÃù‘é±é±éñ†_ñs¹Î\ÇR\Ï\Ï\Ï0Àñ¨ êRuiç£ó“wË»åÝ·ðÀ©ÒS¥§JÙ®€Wqp¬'±ObøÚýí~p :À¾Á¾Î??ÿüÅþâÞq,.Èõu/î^ ®å®å€?S××;ÂØp|j|j|*ŽŽŒXG¬À&Ù$$ñ37Þü90sï òíÈ·ƒýبØ(««ÿ©FÛ«íÕAùžw‡ÐñÁÆØ”‘‚‘‚‘€óáü8Ñ?n<¶ñØÆcÆÉÔ¾éŒé Ã|©H-R`Í‚5 Àû‰÷xvëÙ-`£l”{ʽ`‚ßç~Ÿ o¼|ãeðÁ'' |µoú­é·Œúœç'®ÔR“Õd5Yõ;A;ÈLf"ú_’’¥d"¢¯¿$"ŠmŽm&"JIOI'":÷㹉ˆäL9“ˆÈsÕs•ˆè=ñ=‘ˆÈ–bK!"Šú!ê"¢I뤕ˆ"ðg©—zú¦NS§©S¿òüûÊJ²³³ñpJ˜lœlðt¢ ¿ã£/H)H€¢›E7à‚û‚ ‡ ‡ƒ;õèÔ£SPþ¤ü lxºá)øò}ùAy>Ç\Ç\î³4ÿ~ÿ~ãæÄåÄåÄá!çG¢M´‰6ÿP`á虽g²ÏdI rj`j††ø¦Š¦Š‚Gûbç‹0{Éì%PÝZÝ o:Þt€Åb±À» ï6Pø’%?Ôs÷]ÜgÔûûñ±GÔ_Àß iBšæ"i¥´RZYUÏoYÒÏ$>P“]¿q¿ï~Æ Æ àaysòæä@CyC9`œý³ÍŸm€¨Œ¨ ¸è¿è€òUå«à+ï\€¼Íy›xM£¦Q…‹³gÀåÂË…ðyh©Uˆ– iú Í—æKó›G)Úm¶É×äkò5»[ÿàç•æ•ªû9­²J­Ráƒ3Я´KÚ<òƒßü6¸ÓZ­Väz&O<0:“¯5w´u´Ç-»»ýÊö+šW'¸CÚ!íøçÖ?j˜B-ñSSšÉb²ôŸæ*k*Z+ZYTâî.º» 8}òôIžûßÜÿ&˜ ÛÉv€òTy À§µj­à«ðUjiÛGmÀ`ç`'¼ãçƒBý ­ëÅú©a°@X°¼%Œ ôý~mŠ…âuM‚]øRø’kEûƒ³§ã«Ž¯àÔµ»_[®-âçc¹,pgƒ¥*Àò؇ìC£¿n»»ÉÝ$E&ÍIš£ìÖ;yX:,®ÌשÙÈF6ÙlpÍ¥\Ê•“ƒä ’†%·ä®¸¨?­Mæ•æ•JŒëã¾Ú>c¤–§œQÎÆ1DÐðhA À¶²/Øð¨F5ðÛ;Û2·eªûõhBvÉ.gmž„= {ˆÄ|1_ÌÎØ•ršs·J¥‡ÒCáRÊ”)ˆLe¦2S™³V×nn~n~n°vµJ­>8á„À ¼À £Ñêu‰ºÄèocVcVcËÓßòSŒ)Æ=5ã›#)Ä„î°Ñ“æÞõÍ‘¦4Sš)ÍuÎÐneMeMvc”%Æ ¤ jƒÚ ñÙéE/zgToToT/Û¤k2ZŒ£· “â§aü"èÕ Rcv· Û×mì‚]°k×Ùãì1´«ô(=J¡ÜɄɄÉ`Ũбcê/u-vJRç‰Õ\jé…œG¯1#Ú–†ƒ´{Ü|Ü|\‰qÙ]v—€>ø0Æ™V^ª¼TyÉøìÈMr“ÜÔøIu+¬n`f¿Ž`¸ñ Ûڽ🴻¶hmÑÚ"C»ÎÕÎÕÎÕ8;gú$„¡D(YWZF|VW ÿÒ^§Ý5R½T/Õ÷gpÂ%u%u%uìO–iË´eZ¹¯zX–†+©Ú©ŸÉV/‚þG ×nm¨¿ö_B¹P.”´žÖÓzm™¸P\(.H «7’¼IÞ$/‘t[º-Ýþظ5lrÿ7‹Ñÿ³’•¬òw¡áKE&2‘B·Ð-t?Y4³þ gØdúÂp_;ê§|Cñ¤bpIEND®B`‚routino-3.2/web/www/routino/icons/marker-60-grey.png 644 233 144 6225 13061246466 15633 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü JIDATXÃ…—mPTGÖÇÿÝs™f|Æ-ä-‰L†`@ \QL€°P ;Ù2‰!I AcÜ"êC-……J6êšÒ$% _qžGÝH*%oƒ‚€aœÌûܹ½˜‘-«R9_ºúÞîs~}úÜsÎ%PbVô³]ÃÝåîrwYcÁ±‚cǘoÑdÑdÑäŸC™ób^{ßçýx?Þoy¦­ÎVg«c{PŽr”“\„ !0€™ÈD&Û#I•¤JRI.7Îsã]åd†Ì™¿.\T¸¨pQóíâôâôât2ÁñA|Ižå:\\Jú0ш¦'„"¡H(:ì&»Énò‰,Òi‹´'Fíö ûDÓ¿ÍæsÄòÿ•@ýò„å ËHn”G”G”ééé ¸çî÷îõîýn}õ»ì¹í»yÜ|œËƒ1LÁL!¼E6‘MdSÐQ(Ht©ÂtÜtÜt|±÷‚¦M šœ;¨ciïÒÞ¥½äUI®$W’ 3ò‡<È`†fïâ]¼ Àþð‡Ùh ´âÕÞöÞöÞvæh i i vòùcæsŒ9†±#G42V®-×–kçôtžì<Ùy’±<¯<¯"‘€Ÿ¯ü|åç+€euÊê”ÕäÇ™f^˜yl¤b¤b¤ÄÇßÇßÇðððŽp„¸…[¸ü ~?`híÐÚ¡µ€OµOµO5ð”õ)ëSV˜ofÞ̼™‰¿V—T—T—à¢Ì"³È,ÖD&b"&ZþW,Á,éÛLi9-§å¢NºŸî§ûÇþ& CÂÐ&»¬UÖ*k:.v\ì¸ÈÂze½²^j¼nxÝðºKÄÕˆ«Wÿ 0¡ …ZiHC ¨QÔ(j€ÈþÈþÈþÇ€Ã5Ã5Ã5Èêsêsêsx•Ø*¶Š­Ñ=Ñç d%YIVömF JPºº'gÔlßÈýƒd‘,’õãV’BRHÊŽ¼‡÷ðÞ_i'´Ú ^˜˜˜Ì½¡lT6*aj…Z¡ ÚA;hoxÃpg ¦gz¦˜”I™6WÉT4ìkØ×°Ï¹}ö[àÎ+™W2¯¤¦XýŽúõ;_\((($'1„! ñÝý¨£Å(ÙÈF6© =z.ô\Ézi¦4SšYS<óì̳3ÏrúÓëO¯?½ÞéÎ| 2M¦É4lx€xÀ ,ÿ•g»,F›i3m†äŠîŠîŠŽÅ_¿>~}\T"WÈrÅ}«½Æ^c¯ÉùìváíÂÛ…Ó1Óa¾KËQ7¨Ù5Ö ó„yÂ<Ì¿ñàÆƒ{¶=Ûžó™ÜKî%÷º[; ÐhE%¯7¾Þø:‹'[ÉV²¡Z¨ªÁà Oxì{Ä„'<áa™ÒMé¦t¨iZÖ´¬iæË'äò @X!¬Vä|6z÷­®P<èJ«Éî@Üwý’H\S›+ï–  Mhrn'Ñ$šDǯŸýå¸tαűűEØö¦ð¦ð¦@×,Ý¿tÿÒýHú…~¡2º„.¡K`ãsù\>’o‚¿ þ&ØùÜÄʉ•+EƒÒeÒeÒe%«f?šׄR¡T(åºnöoî+.....†ÁíQ¸ØÜ \±»Ý»Ér€øñ<£q4nG2 ú•Ö¡uhüýaýaýaÈ\•ç‘ÛÍ–fK³E0ß/½_z¿T4(Í—æKóo×ÛÆlc¶±ü/“““ ÊµOæ|\Ñž,²O,¹ü¿+vÏ…ž =z¶d½4Kš%ͪ)žñ›ñ›ñãô§ Nœ*pnwuôó{½{½{½QÕÞÙÞÙÞIÞ’õËúeý€ T‚j[÷÷÷†eµ:J¥Ž¢¿ºì­uW¨'¹Dø‰ï.@LÌÄLL>˜x~âù‰çQé|Úù´óéóµD-Qÿå«_^ùå•_^ñ>«ïÓ÷éûØç7ŽÞ8zã¨3Æè0:ŒQ¶Ç5kv²Ãì0;ü]=$@"ºƒ_ñ+~Üm‹Äå(þI‚?߉Ý"4¢ÎBVÇêX]ì=CÏÐ3­jëkÖ׬¯ Ï{”z”z”Ò>Q†(C”ÑÒ|&øLð™?Çê†tCº!ò‚à#ø° —^­ Ðü{ OÄ®+]8 ±[±•ë"é$¤_f¬‘5þý]Ïg<Ÿñ|†ö‰FE£¢Ñ±g„½Â^aï–ýú7ôof¡vés7––?âøÌ4S/Š IEND®B`‚routino-3.2/web/www/routino/icons/limit-2.8.png 644 233 144 2530 13061246471 14575 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍ–]H”YÇãú15ÚX¶XÊz±Û‚°cÈJ)Ú:mE“E[ÄFÉ"HºwvQF!•} h)ÅEªk²Pɤ«¬›,#S£}è43ÍÌû¾ç·3Çwܶ{ÏÍÌóõÿÿ9ç9Ï{!„°'~XVZVZ²ã¶åGÓŸYY]ôKܾ¨Cʶ”m6Á’óKÎä\Ϲn<7mWùÉõB˜øÉ|Ê/ìÂtdtdt¤T$ìãPS\Sœ¹ÆßÚm1mBÏÔ3‘ÆcÖ˜Å\y;‡1i¼0^€ö¾H_„”éÚí1Ð_ê/ |éÊpe(gª’ŽR!¾j«Ïê |Fh,0f|/#z^CˆãtÒ™$ä'8ò|'ß™n0ãsë xäêGõ£„>á±÷cïaŽ?¡'!ìâïpøØácÀ,€ñ )±`,hò § É! çΞ;{î, ?~8ü0i‡î÷Œ{¦í¹ì¹ì¹ ÍÏšŸ5?ƒ‘5#Å#Å&žìŽuź€h‚Oñ'ô$„ 6À™3`´Èƒ €ÈcýqàqlQ[Ô…ª¢ª¢ª"(Ø^°½`;<­zZõ´Êtß}ß}ß ¹ës×箇½Î½Î½NÈïÏïÏï‡'OÜOÜséíøâüJEˆìžìÇ·B”W–W !š„"åZâ¤3¼6ïrïr!ê[ê[ê[„èïïbqÞâ¼ÅyBxì»Ç.æ–V¨j…BXÛ­íÖv!œµÎZg­+zWô®è"f.=CÜQ| ~¥r²r²ŒQ˜žœžTMÏ´üÁØdl2wb l l  ŠKŠKŠK`¿¶_Û¯Ö§õi}fž;ßï·_‰¯Ä•ÁÊ`eŠŠŠ`dÇÈŽ‘I-Tc&ÁŸÐ# »'»Gv€oo ¿2oy®y®z®‚µÓÚií„Ó•§+OWBpmpmp-„V…V…VA >P¨‡êÖêÖêV¨¯¯7qVO­žZ=mζê¶jÓ¯»Ô¿8¿ÒóQéó{ìÒç—l—lñ±—vJÛKÛKÛa™e™e™Z›Z›Z›ÀyÁyÁyz{{Á1êuŒBΕœ+9WàÀ민†èº¨#êy2ßý}|+S·Dëa¯ ï ïDúþ LÞš¼5y |vŸÝg‡P¨?Ôo¼o¼o¼Ànv³"µ‘ÚH-ø_ù_ù_üRÊBóV2¡ kÃsú©[™4ÇÓÇtsŽ±ÏØ77w"D>=Xe™,“e »d—ìJò/’¥²øZ?¥ŸJšcÆ‚cÁOα¤É¯¹R]© .öˆ:Ý¡;@vèYz1ù‡œ‘3HyGÞ”7Ÿi¤dTFe˜e†à09²Wú¥Émc©±”èCú 'ðqeº2ÕNÍ›ü ö[¹`_ ö=¶0_°ÿ»ÒSm—j IEND®B`‚routino-3.2/web/www/routino/icons/limit-39.png 644 233 144 2444 13061246467 14532 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÙIDATHÇÍ–oHUgÇŸ«v¯’Z·Z^)¼…3ê‚f½ò¢.±Œ‰&ýa5b!±EDúÂ1iÎj— »¡VØ„RK¬ ÞxqdæjPi5e rÅ)‘×?Èùó|öâÜsÏÙH¶—ž7‡ß¿ï÷ûœçùýÎ#@!Äêè[@\z\z\ªaÇ}nùw'îöþdØ-8Êe¿} «.­ºà¾ê¾ªZ¶7óíõBXøv>Ó/V ËáºéºéðEíz¨ÜV¹-ñ=Ãþ®’n%ÝšSáx×ñ.€Îk×øÂ}á>€7¾7>°l3næ›õ&ž_Ôÿ‹_XqwÅ]ÇŸàrºœBÀÆ¢E'„?2`ßž}{ÆâÇâehÉ$K!‚ùLÙl3Í7ëM<ßä3ù =Öå¯Ë>9ðɤ+FÁ`+T{ª=&Ÿr h dP#j@;¬fd¯ìÀ,ÛŒ›ùf½‰gâ›|&¿¡Güsoý…P‘X‘Hå!ŠÖ£õèuzо 7ÉMHuD}©¾ý}@ˆ}1ô9}VŸuZ «a_Ê&Ù„= P˜×hb ~ã‹ñ » ÷¿‡¤pR8’¯´W Pzµ^Í_û|-3ƒ™ÁLy=òzäµ—O䄜@Ú¶Øà‹ñz¢Â~=moÛÞÆÊÉ|eT® ®®®5Ö\Xs*<ž l›Åf—[.·\nìúìúìzÈÎΆœÌœÌœL˜Ú:µuj«Mà#µJ­2ñå1‹ßÐ'Dj(5”û‘ùùÑýŽ+âÃøÊøJá2=ZX ka!Î)ç”sŠû/ÿ¢íííB„B ¡!Ö—®/]_*D¿·ßÛïÂérºœ.!ºººDì‘?Š^Ñkâ;®XüQ=àNq§è¿ÃÔøÔ¸­í§åX+]˜]˜]€²¬²¬²,ð½AonÏÜž¹=y+óVæ­„¢¡¢¡¢!pú~§ZÓZÓZÓ,­HÍV³ícÆä7ôH ¥†äMoo·~«îU÷Zöõ{×ï]¿¹Grä±ü;³vfíÌ‚ÚÎÚÎÚN8Ñv¢íD4V6V6V†ä É’¡o o ÏÞ½ÕÚ.m—­Ibü†ž¥Ï؜ڬ6[glftftf|M¾&_¤”§”§”ÃÑG_}“é“é“éPRPRPRžbO±§j×<®ylãÿ”rÊ­T+]úŒ-Ý•f×ô3ƘՕêu‡º&û'û'ûA+ÖŠµb‹w±c±c±&ô }BùL>“Ï€G„YgEV§ÿ³+ß1Çbs,¨™'r@~%«eµ­»NÉSòÈCò<ò¼>†gŸ=~öØ2ûjL¡,K è¥&JOZØÃ¡o²o2Sެ׼y?’ž¬ V«`Ýúuë×­‡êXu¬:ŽsŽsŽsp¢ëD׉.XS¶¦lMTÖWÖWÖCéŠÒ¥+ Z-Ž[ÞÓZ´_5›ü)=òòÔ%--³,jP ¦^P '夜4£~ͯù5888€¾M}›ú6AEkEk…ù¥ñ­ò­ò­‚î«ÝW»¯š~ù­V¤Yù þ”…ó çë ú*úÊrìߪ'ê PD€qÿ¸ÜÞZo­·žÆŸÆŸÆ!º(º(º¼·½·½·¡ÎUçªsAvgvgv'ô,îYܳØ"lƒ¶Z[mm3JÏ!ô~½ßöH­AkÅBˆâpŠ|1.ƅЋôåúr!²D–ÈB\lºØt±Ig³³ÙÙ,„'Ï“çÉ"â‰x"!¼n¯Û뢄™µ3kgÖòÁH %†C0¦éc:¨° «0pÌ LR‹i±ÿ<•ÿ£µÑF›ÅëÇT“jRM–#´R-SË€_é§@?¤bÍÀÿlûHç yMÞ‘wôv½$ó© ÅÏ´ÓþáãŽrÔ½ô¯é>ïx‡}¿¾Ÿ$ReЂÿéÎ?kÿ•³öv1kïc³óû7æ˜e¿ 8ÖóIEND®B`‚routino-3.2/web/www/routino/icons/limit-87.png 644 233 144 2437 13061246470 14531 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÔIDATHÇÍ–[hTW†×L“ N¢a‚ /M4B‘$`¢@0D¼6`—‡’icÅ¢"㼌‚•Ä„ÐÌ¥‘Ä(Æñò¨>ˆ Z¥Öܘ´£vÌ8fÎ9ûëÃÌ™sZL_ú’ýrXk¯õÿÿÞ{íu¶€ˆˆÌO~œKœKœY Û¹ÏòglÎØüÙO »IGµ£úI#dŸË>° eA‹1dÙæ¼oϱðí|¦_æ‹åH¿š~ÕQš´Ã¶µÛÖfä&ì3Ap÷º{§4Øß·¿ §µ§•oaüÁø€7¥oJÁ²Íy3ÞÌ7ñìørü_ü"àêwõ;~ƒô¹ésE`iùÒòõ‰€_W@UeU%ÀHÚHšr€> Ìcž*"D0Ç6ÛœOÆ›ù&ž‰oò™ü =Þo‰lÙ±e‡»9‘0Ô y y&_¼8ÉIæÑ"ún}7AU°lsÞŒ7óM<ßä3ùzäŸgë/ƒ­[3¿O\¿­ß0FâÆ¨ò(J{¢=Ô‚*Weª Ô¨U£ iZ\‹ƒþµ¾]ߺS/Ô Qª[ÏÖ³‰ƒá4œÀ_I|“/Å/vAùp»Ç#sà™þL¢T€qÆ8CTé¬bðG8‚5üøñ^¼xmþ|àùhócÔµIt¨Hñ¥øz’šîÂÁ£¦’?'¬½Ò^.–±,±/>¾øø"øj|5¾xþâù‹ç/`drdrd''' eWË®–]Ð>Ü>Ü> /~Ùù²3¥N©ãþ¸ßÆ—âOèI {øt¼ëx—ÊÛk¸§»¦»¬µÞº1tc¼ÅÞbo1ìôíôíôA¾‘oäàŸðOø' ,R)‹@É…’ %@š¥Yša`ÑÀ¢EÖ¾éÑé¦é&_íµøzœ"YƒYƒ_|)R²±dcò|ÅÑ,1gž3OÒM4‚FPÄÝênu·ŠTTTˆxNyNyN‰õõõˆÜôÜôÜôˆÔ4Ö4Ö4ŠÔÕÕ‰”O”O”OˆpIvi.ÍÄw4[ü =sDÒªÒªX#âv ;LÊ>ÇiÇiñŠHŸô‰„††Šäºsݹn‘ËE—‹.‰„CáP8$²xùâå‹—‹LŸ:?u^¤i i i@¤û}÷ûî÷bßåµ¼‘µrLމÅ'®k®kâI+H+`@Ö`Ö º ãëÆ×Ù¶ºTK×Ò-»"X¬B}N}N}Žå_¹a冕 ßÕïêwAÛ¥¶Km— xªxªxÊVò›ŒMÆ&`ŒQF]ÝUwí—ÂäOè™±ÆTN¼?ÞoÕØÓ³OÏ>= …‘ÂHar9œÔvÖvÖZEMõžê=Õ{  „!ÛBïèwô;@Œ0a½Mo›¹Æf¾•fcü…G<²ne,‹Æ¢ÒCzH#jD¨%àmÇÛŽ·[[[oÛÛ\ç:`$”ØïÝÊOô±HªµíDÕWªNÕêUWÔ‹OeªL• ¬f5«mBh á÷±Ot~â÷Ñ“G€qÈ8DœoðáC© º¥nÝtÑeãÍÄøžÃ¶ô7jZâ ßÓïÙðgîü³ö_9k_³ö=6;_°C"rmòIEND®B`‚routino-3.2/web/www/routino/icons/limit-11.0.png 644 233 144 2657 13061246471 14657 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜdIDATHÇÍV]LSg~NK)EVÑ+q&. 1QíÔJl•HèD@!ƘŠûqjˆÆ5jâ¸Ø¼ ®˜h4&fÁ0$NŒ‰Û 2Qü‰•‚:3 þphYé9ç{vÑN•ìž÷¦yÞ÷ýžçÉyó½ý@r’¿ M M Mö6}mä36flüô×>£’R¥Tùø0™}:û4Iο0ÿ‚öÌÀz]ïO=ü©zz90Ö6k›TšÄÇɭ˶.Ëp$ðO~ÒÖaëˆ(äî«»¯’ä•‹W.ò{òÕWwHòMé›RÒÀz]ï×Ïë|©ü8þ>@Z®[®K/Ikº5 yyÿhè_Lz˽å$9b1 I’êÉ,f‰R’2eê1ž‚õz²_?¯óéüºž®Ÿð2Ï•çÈ͵›kmçž]"äÈ×õâ$Oò$³HEVd’T·«Û#…_øI’%ÒÀz]ï×Ïë|:¿®§ë'üàýÙþì¦\¯ŠÏº­¹â–¸…'”¢^z‡æÒJ´Rœ'Ä ñ7‡84ƒ„X«Ô(5Œ+Ãñ¬x)¾Ið“Ur•LòuRf”26“¶ç¶çrùÂýÂMªý$ÉM¢]™T&5$cŒTÔu€¢Ct¤ç8ÇSp1‹YLr ]t‘¤(eŒÒ“àç—ÛÛ$i“m²œÆÇ ?É/uæÙp°á )þ$Im¹Îë÷ù/ù/Q æÚíœ~Ÿßç÷‘ƒ¹ƒ¹ƒ¹F^Û«íÕö8Ðè ô‘¿¤ŽœŽP¼œ ¶Ûfº—‹·õkê×è£=sË„°úwœ-q”8É ÒÊß­7Zo`Ú=âîq÷@ºÛs·÷n/f¢µ®µ®µp/p/p/î­¾·úÞj£nj65›šðÎðÎðN`[p[p[8ûǹ®s]ÊX6V6†é·?&ô¤÷1÷1€‡~L0ÙÙ­p¢ÞõÔõ`:Hç1jÎ6gÃê8åð9|ƒ 2hKQ)*EG‹£Åш Q!*0+:}¾N`í¶v[»G¥Ê•½Ì6g›aí ^ÞsytðxÑ)2Å § eæs ‹ËIËI@¬„kL[×m]­*r9©®©®©.C°öZíµÚk@Q¤(R¦BS¡©Ðlcª¦jªdõdõdõyû°Ýj·ScQoÔ‹0`]e]à–9ÇœÃ"„vU»*=”J¥@: O'q1-¦ô£ý³…EŸè}€Ô.µKíF~´i´i´ Èÿ ÿ0:9:9: „>9CN`賡ì¡l ðæÒš¥5È"["[éñP<”ž¦Á$¯—×÷ÞºÞu½[Yƒ‚:Ô»’k™·gÞ®y»`µ(‹Å2ÛX¦/Ó—élöaÛ°‘÷ì÷ì÷ìº=ÝžnàŒ:£Î(PøEáÊ•À·׿®i—²vbí¿ZÑ é¼©:*E¥Þû©·òHÃ’ú­ÔNi§È‰â‰º‰:Š˜5†fßʉ‚‰‚‰2v4v4v”ä>á2ì {Ã^RlÄRTŠ QA†Ÿ…Cá…öO|I| I5©§6464’ü7á'i¬°™´½²½’ÓÈ€Pgt7‘ÚmGÊcbýoÄŸYÃ$ÙÈ}ÜGj²° ;IŠL‘ɨø*Éß ‘¤-l Ëi|ùÞKÙüJµ¹Úll~:”€ yLQGfo~æ1—¹$›ØÄ¦dMbH¼/HF’¹›Z†–Á¸øK‰(}2ñÛduZuÉé7ÿÜý¯œ³¯‹9û0_°ÿ¢&[¶É^*èIEND®B`‚routino-3.2/web/www/routino/icons/limit-3.9.png 644 233 144 2537 13061246471 14606 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–oH•WÇ·ºWK-£™¥b(¤ŒIZ˽pb-) Ñ[±˜±èEÛ‹±  KɤX!Ìéý¡£¨¬ðn–(Ò%ÉM§Î4Üu¦Þ®^ïó<ç³÷Ÿ§µÞ{ÞÜû;çûû~¿œó;¿çB±"ô+À–hK´EcÛçæ|øöðí)?ã‹:„íÛíþ–_X~ æRÌ%£ÇŒÕºÂ[ó…0ù­zj^¬æ„ã²ãrXn(>ÅéÅéáïã3!âjÄÕ׺~è:À•†+ Qר `"w"ÌX­+¼ÊW|V~qê?úBÀ’[Kn… €Ãî° IÛ’¶%ü‘ »vîÚ 0¼hx‘´€þ7I¤Ì¦™F %Vë!¼ÊW|Š_é)ý «rVå…ÎBgD}0¡§Ž&MPz«@%•D‚6­MèûõýøA>”# ÌX­+¼ÊW|Š_é)ý ñæÙÖlEÙ‹ì@ Ðú€>ÆŒæÔœ´?u‡î@ÝÆã æxÍk^›¡0|†´ôX=)¿Ðº´. Oê“€Oñ9ŠÊ`ÍVËQ !DÚw11:½˜@ïlïì<ÿÊõ~½­xðXŒœã瀥,e©9-½Ò+½@9å”[ðŸq†3À'z“Þ´ìÀßëëõÁ¼~ÈOÈØÅGpøÄá¬#˜˜µ#{¶öléÙ5 5 5 ÐÙ×Ù×ÙgÙ! ‹§iOÓž¦ÁùÍç7Ÿß ý¿÷»ûÝ&ŸìÜÜŸÏΘ×ù ëüš'›'A~ †2ü}e}GúŽÀÊÓ+O¯< ÅñÅñÅñ°V®•k%¸Ö¸Ö¸Ö˜†Ü6·Ímƒ”ɔɔIÈvf;³‘š‘š‘ ž÷=ë<ëæá~ùHéõ•›Ñ­Ñ­™ ‘“—“'„øP!ÂêC'íÐGõWú+!*Š€%ù%ù%ùBÄÕÅÕÅÕ 1»zvõìj1?\-®W‹±©±©±©B´µ´µ´µawØv‡7*oœ½qvîß+½¾ò1Q1QÆ3ð¼ð¼ÆC×þ¬<.›;áñÎxg`Ïí=·÷܆ÄÒÄÒÄRè8Ùq²ã¤‰¬¬¬…ôcéÇÒA~r~r~2Økì5öhŒoŒoŒ7ñzŽj3!ýÑ­Ñ­ò2ŒnÝzoŒ¦Ÿ›n6݄̙2˜ómmmP7U7U7þ*•¿ Ü{Ý{Ý{¡¤­¤­¤ ª»ª»ª» .2.2.\]í®vKm~¥þõ•Ÿ·klj¾ÆðÿÔ_SϧžCnmnmn-DFFBéÝÒ»¥waxýðúáõÕÕÕ ÙÙÙPTT ± ± ±PÖ^Ö^f1ħøùéÿkìí[©nÉoÚíŽy‹´,-CË€±kcׯ®±ÌXf,9+gå,Œ§Œ§Œ§÷¸Ç=˜+˜+˜+€—#/G^Ž€ì–åcàW†B‚æÕ¼ª_¾óVZúØL¯·×kéc‹õƒúA|òÙ,›-ý*OæÉ< ,;± l¹Oî“û,ø¤S:*}D±ô1­×ßëg³t~ŠÂ‹Â Bÿ™þ ¨ÒÇô1ò9$‡ü@=õÀ >| å æð㪩¤¤KNÈ $Fº‘Nô.½ ÐHïíο`¿• öu±`ßc óû/b¿T¿zv÷:IEND®B`‚routino-3.2/web/www/routino/icons/limit-169.png 644 233 144 2724 13061246470 14611 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷܉IDATHÇÍVkHTi~æèŒ3:ëi Ê"E¶4©~¤µÖÖl«R‘t3‚˜ukׂl釆ý(¬–6h£›„°Ðàš 1QHš„l™k¹…ØRà̘vSXeÈ¡ñ2çœïÙã™3m»ÿýþÞÛó<ïwÎ÷ž$ yú RJ“Ҥİ-ý ûÍE梌ka»V! [ [{’I5I5$™âLqª/t[‹kùÑõ€Žͧù‘ ÝçŽsìÓö rgÎÎó¬°ýK;i¹e¹õA&ËËIòfÝÍ:–“C†‘¤ßî·“º­Åµ|­^ËÆÇ‰ñ¤±ÙØl ãLq&€\P°  ýÇp‚7,ÞT¼‰$ßļ‰I’Êß$­´ ;ÉÔÖH”­Å§óµz OÃ×ø4þ°¶u¶u¹e×–]–+á‚WÉÊy•ó4¾Ð-’§xŠVRÈ’Tv+»9IŠvÑN’4Ð@ê¶×òµz OÃ×ø4þ°|ünÏ~Cî0ï0“#ÉÐCRMR“Hu]¨>TϨNá¤Ð$‹±]l'å.¹Kî"ÕIu\ì Õ11WÌ¥G§6NmdH”×Ëë# ?äøve»BRhüˆ´è"UË[ËÛ@,Ù§ö©ÜJ(?”Ï p‰gâ™NÈÙœÍÙ¤£b4Êÿ’/ù’ûÄ>±ä¯¬aMTü;åžrA„ñIÏÏ’“–Ë@ VÓ3-¬örÿ±ýÇ"}.BM¡¦œh¿Ü~®ýékñµøZto²7Ù›Lžm8Ûp¶ì.ï.ï.×ã===ä¥ìK™—2É~O°?µã†ùtþ°žiaÝ|âjuµ’áîÄ^Rõ«~Nº?w[ÝV2ÖëŒu’î2w™»L'^iXiXi ‹ŠŠÈ¿ÀO¶ä´ä´äY²d W=^õxÕcrÙËÒ–¥‘#YÃ]Ã]œœ–·Wô^{xí¡&¬»BÛÛ–çáÃÚܵ¹€á Íàâ0Œ÷x¤Æ§Æ§ÆÖûÖûÖû@«Úª¶ª€ç°ç°ç0Z‘Z‘ZlÈØ±!ðôyú<}@Š9Åœb:ó:ó:óSœ)Ù” Ü>uçÆˆ P†+¹fpÍ  é‘€˜â˜bfãkÓÓhkT|Å½Ü ”H%1%1@¶/Û—íÆÇÇq]\×[·­ÛÖ Ø…]ØPó®æ]Í; i*i*i `5«Y î)ÜS¸èù¶§´§04]0]ÐùðÎTkª4=±€z[½mx!o–7# žâ)l0â5^G ÁzÖ³+Ä ±°n³n³n”%AÊJËJËJçIçIçIÀ»Ð»Ð»X*-•–JÀ|i¾4_z÷V÷Vé÷ÒϤŸ‰ÀÛ ‹ä*¹ ÔÏÔÏ Ï% `ØÿzéAÛƒ¶ˆŒï‘%ŒÂˆ)Í“hL4& 'è z€Õ–Õ–Õ 3?3?3ˆ·Æ[ã­ÀßßPyºòtåi`Ð5èt—m—m—m€ãwG“£ ø27ÿPþ!LÁæ“–wø;ü@DÏÿJ6Ë.Ù¥ŸÊ±5c¹c¹äÄ«‰W¯ô_q+nÅMŽØGì#vRñ*^Å«Ç'›'›'›Éaux|xœ=bDŒP°S¾+ßâ í?²ÿÈ'§rÑEÒ2d Ä’}JŸ¢Ï1Ru¨9Å—ƒ:H‘ D‚î…¢P’¢JT‰*Rü$ŽŠ£Qñ%òù ƒü92Çæxæ”-¯-¯?™cÿ1ùCÚäWú•~’³”*¥Š!£‹.}±Wy•¢Ctüu¬‹jà8ÝtSˆNe±²˜!v)ç•óQ“_ÝaÜaÔvê£É?cÿ•3öv1cïc3óû›Ç™áɸ:¼IEND®B`‚routino-3.2/web/www/routino/icons/marker-36-red.png 644 233 144 4222 13061246466 15435 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜGIDATXí—mLTWÇÏ}qœ…´‚0ìjP×UŠÅ´UŒ6jƒ’ʤPVSSß;ô”5BE1’*ÒÚU³r•¸KêVƒ_j .‹èRšêÊLm-SgDt˜{ïùsçÎ$«Ùì>_î<÷œçy~÷<ÿsÏBö füÂ()JŠ’¸ÇÁÑ£ZFµŒjY’!*¢"* 3ÉL2 Ó½D$"™„ût/›ÏâY>–?¼¿0œGÏ·l#Ûø¦ðñø_‹-b‹ØÒäæ¶sÛ¹íˆ)Îç‰óàìªÛ«n¯º ¬¹·æÞš{@^f^f^fÈgãl>‹gùX~VïÙ<„_îO:È?âñœ3Ù %%%)ï¹räÊ‘+tŒ÷÷÷ cCà„N@óƒãl>‹gùXþðz“>›˜cø~¾Ÿïwþ…%ȼ”y)ó’<¯×ßëïõ£A£©4•¦BVÊ”2¥ PÒ•t%P¬ŠU±êüà8›ÏâY>–_«oŽÑи&®‰k"DÜ-îw×ß`–½–O,ŸÈV ì=ú*}^¹Þ'ù$€:ýßù¿0¢.Pná*T„l„vЀ:åQò(@®÷­ó­è{4&À˦YöZÊ-岕Õg<Œú }†¾ÜÙl‚¹Â¼Ë¼‹¦8~vq‹¸EÜÒ¾› ÔÖÖÒ·ƒ †å&Ù-»€n¢›ø.Œ\€/6±®î¼º3 °“vêýêj81îÄ8¾/?þòcP2” @nRÖ+ëµÉõ…µoÖ¾IßÖV6ŒPWÜŒ¸q3°×½Äý’û%€nÈHfÏü~Üûq@`ßÀ‹ã_¯÷?jý¨Uؽ±{#L3q ÄÈ1²n¾wµiµ ÐòLv/yÐÿ `<Œþ~徕ûVî =™Â¶khÏÐ ¯“× ÊVeÓçþ4ñÓD=0³×º^ëë%ë% gèh›Ý6&vOìàrd9²­^°>ãa|APœÉëÌëÌ µLQ«ƒê øcü1Ð\Ú\ ÝÕÝÕpú«Ó_ÀÃV´ £&£&£wŸrO¹§€f4£¿U§¨Sô›áæ²›Ë@¸)ÜÔ¯¤­ÌVCg‡ÎÀXa¬ Àñþãý°â•¯ðñ›øM:{7÷nhZ@à¬Jflflf,î2>Â[y+oõ°£îض£ÇŽÓI`´ë-×[Ðìnvðyöxöè»ôMß7}zà†”†ˆíŠí€Ãñ‡ãÃTø½û{ 5¤PNŸ8tâP¨Þ_«Ï·Ÿo×Vr#—Æ¥qiþ"ÌæsJ+Ù.KþURQR‘2ɱö‡–ZàÇ’Kà¥Ù ¤Î[çÕ?ûõªëUzЯó¿Î€ÜâÜbXž´Àrr˜€Î†Îø†ƒÃ3J§ù¦ùTíâ…x!þ³‡$:':':‡ñ¢xQ¼ØØ¯½ðó²fTv°üª}GÔŽ(ø †ùwøwÀXn,€õóÖÏÓ¯ôÕŽ«`ô}¼Á¸‡«úYININèq‹þVx ð€:¬n6þ‘ðl×3K:dH3L7Lweö2ûxûxš­u.ö²ó²8ºõèVÞv[» ¨‰šS1UÇëëÛзŽ_;~ P ¯µ_k­ïÉG'Ÿ|ŒåÚZÉWò•O—p¸ ܄߉þ®©6n5·zq×ÈçÎ3­¨›¥¶“'; iÚÝ¡NV'ëh.ÍT¡ ¥ûé~@*šMKi©6ÛÛßxïÆ½@òhó1ó1y‹¶’»„…í ÍJ¬Ä*šC¬Y$‹d‰»Hi"M„.¡Oè{÷ÏÚÑZgN4'Ê&ǽËz—… Òly­¼І6v™è$õŽz ùþ;þ;ð±Àu×ׯ+Vvh'ÐèÝRyÂÖ„­ [ á-¼…·p§ƒt… slðš/Üî w¹Ö”’”’”B E†"C‘T®i7Ë’eÉÒkWµ«vø A‚`ƒÐ}(S•©ÊÔkæÖÌ­™Øš„“Ád0õ? ~-ï4w.¢õ„‹p/‡ûæÑ†4Cš!ÍqZ§Ý2{™N»&Ù$›B@ê}õ¾z?¤Åô Œ=Æc]¥i2šæ£ßØ!ÅC|QäÙ7„vmœmñ*®‘käõÚ•Ú¤¶vå6¹Mn )÷I“„' ÀtÏtÏt2EÓâ)á”pêÀ|&µ ô"Ç‘çXhKÒ®Kpé´[m®6WË&G££ÑÑÀ|ð0R{«½ÕÞzíˆubX×üKb¼Q7xŸŒy`¤±€7‚ÚýÓÒV,ZÒ®4_š/ÍÇãTëWÀp‹KÃËðƒu9ò_Úó´»P¨*…Jg:.¨(¨(¨ ûSGRGRGä[Z«]‚KpÙ“H=©'õ$øÚõ¢Èÿh‘Ú-÷ý“+抹b€,%KÉRuŸÈ'ò‰G8‘ —“‡“‡“‡ Ú…v¡; ÌèÜÿÍLÚ¯’CrÄáÃò”§<¸sÜ9îÜ¿~¸?YŠèLoDÞç¶úß Ì™f §IEND®B`‚routino-3.2/web/www/routino/icons/limit-26.3.png 644 233 144 3036 13061246473 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÓIDATHÇÍ–ÝOTgÇPy™2Š…4”Vm²°iZŒ )\@É‹v°–B¢.ÖÄÚ䢔î…%°ÀS#†ñ¥šmQ˜ÔDi£Â6 U¦‘&^Ré“afÎóÙ‹™ã™í_à¹9ùþ^¾ßoÎsžßóˆˆÈKá·@ôšè5Ñ–Žþ»/Ž/^!„O!ª<ªüþøUâWIö$»6n`=¯×Gö‹ü‘zz\^#çˆsD†ñQ¨x£âø”n½¦K¦KK¨é­éè9Ós†Cðxðñ Àï…¿‚õ¼^¯÷ë|‘ürôOú"ó]ÌwQÓ+EEë‡ ÜëÀZj-øõ…__PÑœ̘U!àÁƒþÌG`=®×ûu>_×ÓõC~’ ’ Dà½ÞûÀÔjÿêÓëÓu=ÿ%àK¾Ä OÀ¬ VâuCÝ Š(0°ž×ëõ~Oç×õtýc)—EDÚ¶Á®É]“ Ýð¦ý¯ú_mÖüa§JU*›²A`80MÓ4MÃxþ`žùgHiÞ€9`Ƙögø3@ñëz†¾¾”×EDþrL“dzJ­LLG(µEma™^®pÔZµV­RI%5ÂÈe.s¨¡†šˆx 4?p‹[*[e³Ì±0JX/¬Ï­᱈ȉ›$Ø{`¯Î¦½u/ÎuÄu޵k=ÖŠº[}·òn¥¡ç·¸ÚúÚúÚúÀesÙ\6#¯¹4—æ2ðø¶ñÂñBh;ÝÖÕÖ…yx§äN‰¡§V”(ÝGDDFŽ@ß§}ŸÂO~~ûç·Õ>óSS‡©ßÖ¤­q[ã`}íúÚõµÐ¨ÿPÿ!(ê*ê*ê‚bG±£Øù ù ù ððÉÃ'Ÿ†¦f¦f¦f`uËê–Õ-P‘V‘T‘©¾WN¾rßþñ ìA™Ú}ôAgȧ::•–G—GáâYg·³¾øgcyc¹!çËóåù`»e»e»2ó3ó3óaOõžê=ÕРTƒÏgÈ3dôMÔNÔNÔBG{G{G;ôìïÙ׳6þ+Û–mƒ\ƒx¾÷|ÚË ÷î+‡àOŠOŠ×ÆTÍ\ÉܳOËüà–uë ³1³1³êlu¶:œµŸµŸµCÖù¬óYçá”õ”õ”ÒÓÓ¡ßÜoî7Æ”UY•žzŸzŸzaçµ×v^ƒ5{ÓKÓKaø¿÷Þ¹÷óà-ñ–€ÖlùÚòµ6&Z«¹Ô\ª°øÙâg0zp¬n¬L=ñõñõÐTÝTÕTeu7u7u7Aιœs9çŒxvevev%t¦t¦t¦qûûûؘ¹1scfDý[ozßôÂéw/ì¾°ÀwÜw‚i/º_t+G´j^º²teô¶È7¼)2ðÑO¯ýôûƒâwûݲÒ;Þ;Ò;"’˜œ˜œ˜,ã‹ñÅøD6nÝ4*ëŒuÆ:ErrrD¬«ÅjÉõçúsý"ÎgS$yGòŽä"–rK±¥Xä¯g²³eewÁ‡ß~ø-ûEz­½V‘è1ïëÞ×Go ­á]ÉÁºƒuàu„vÉìßfòfòàÑÀ£éGÓ¨™ú™Ã3‡Á—ëËõå‚jVͪæ\s®9hvÍ®ÙAM¨ 5   @e”A ;Ðè†Ù˳§gO£‚+e+eÆ®dìãŒ3ô{âfxÀs ô¹ž3+*]¥³ü,REU T‚Jˆø—RUªJ6³™Íq¥4¥ú\µ¨U¦ÊXV%l˜ž0-š=«¸£Ï±ÿ;ÕÛ¶Q¿«fW ¨oB“YÝšƒfPÿ,ñcg˜aý\å*¨~u]].r‘‹À2K,úE¹•ð…üÑœ NáWW¿~Nê“ÿýUï¯|žüÏïYùÜÞ.žÛûØóyƒýé43Ü[~ã1IEND®B`‚routino-3.2/web/www/routino/icons/limit-15.1.png 644 233 144 2713 13061246472 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü€IDATHÇÍV[hTW]÷Æ<&Ä$Ú„5h"¢ý ± óšh^%ƒ5BŒú‘”¦Ñ€úQl|€QŒUpª&VM%>rEÁ  ±Dªãqn¦13÷ܳú1ssGKÿ=?—}öÞkmξ{ù‚T3ÕL59l«kìý„Å ‹gý¶ Rq)®?$SÚRÚHrJç”Nóžm[~+>:°ñ£ù¬}¤ÂÞˆ?R)ŒØÛÈe9ËrÒÃöÏé8í80ȵÝk»IòÔ‘SG¸‰¾1|ƒ$ß¾-$mÛò[ñV¾…mñdì¹ØsŠŒ‹ÈÎÎìï²Éo+¾­ Ég1Ïb¤J’¤xE2‰I²¤NÖze[þH¼•oáYøŸÅ®dZAZ@V¯¨^á8N¸×E6Noœnñ…N“ÜÎíL" ÝÐIR¬+9NJMj$I… iۖߊ·ò-< ßâ³øÃõàÃÞî*¡¾4´44QÐuó›RHù‹0´,yXBŠG$Érù›1jŒòŸ ¢kìcÉ—|É—QHJJ’&MšüÏOÄñ„”§Å œÀ+§îíõö’¤Cwèú¤pas÷FNêà5²asÃfRö‘¤9ÏÔ¾Ök‹)}5>—Ïeyfyfyf‘ûjöÕì«!;Üî79š9š9šUoŠL‘)¶­í׺µnÊ¿>{û0ÖÚ5çÉ»ëª×U[­=xMÅÈëAÇ¢ôEé€RÊ|Oú‰ '. XüUñÌâ™Pn·ÞÞq{ ºD—è6¸6¸6¸€KM—š.5Z¥V©U­­­˜XÊ;åòðdx2<@Éç%c%cPn~yóéͧF¢æËö…I “¬¬¼jò–ä-¹ °®`¨``(‡ð2&%&ñS›¦¶NmN‡Óá.\¸èz…^ hªnUݪºL[=mõ´Õ€,“e² šÔ¤(~ůøôé‡ÓÒ©lT6">RØ!Œ.Ê[”ÉW“¯æ.9eò”Éæùúùëç¤(ˆúeIõõõ“Ç]Ç]Ç]äý÷_ÜA®Ú¹jçªd§§ÓÓé!3dÈ8@ööôöôöØ­ V«‚U¶íÌwæ;óÉŽ¦öúöz{DDÍHþH>iÕ£BšÝf·2.à fªü[ú¤PuUWu`Ø;ìöYãYãYã@»Î]ç233eDQ™¿Ì_ˆfÑ,šíÖÊ»rPðâ<ÎOl§Á•‡ÊÀºZñi}ÀiN³ô˜0‚Fy°­A8À¶Õ¼ŠWù Oá+>Å×#‹kÛ²ª3«3ií>˜9f˜ÅÚ9íš¶^Y¯°ÈÆô÷ú;ý5FQ†Óp°:¬v«=¹“V2ÿg}‹¾%¹àûĪ´*M lÙœRJ‘¯Z1=ž‰X:Œš£fp»1¦•ieÌX}Ö¨5Š=b‹J&&&K†1fDŒØùf§ÙÉL"w;Œ£€'ê‰ÆÒ•ž„° ¿ÁÁ¦ƒMI–õVXë×ú퇿ç†saâÎĉ;0™>™>™­gZÏ´žŽýû;öC×ã®Ç]áé¡§‡ž²†×‡ Âðì³gEÏŠ°’À¿Æùlþ¸g|ßJoȾM¾M"rNDÄQì𥕥•É•ϯd_ÉGÅßÏ+ž‹<~8üpXdÊ7å›ò‰tÏvÏvÏŠ„ªBU¡*‘š`M°&(2>3>3>#r;x;x;(RÑPÑTÑ$2\:œ;œ+ŽDÁ¬Æ8ŸˆïˆïHÂ+¥7V ¬°z¹;ùvò­½BËm<0@¯Ùkô·-o[Þ65‡šCÍKKv¾á|Ãù¨½V{­öší¿\w¹îräyó¼y^5‡Î†Î¦”z‡z‹–DK@éÈÍÎÍ6GàõÄë ûØ}¾Î …ÐÞÙÞÙÞiû£‘h$ÂG… Aä^ä^äÞRá pñøÅã§+WmFñÇõ8EÌ›æMLjXúN}§ÚJY%.y!/’¶XˬeÖ2Ói:M§íïÞÛ½·{¯ˆwÈ;ä)ðø ü"Z›Ö¦µ¥äca!"£òDžØ~1|¢ïÖw‹(=N‘˜?æÿówq†Â*šZùÚrY.YPž¬Y²ˆdôgôgôÛ¸ƒÅƒÅƒÅ"•îJw¥;…°Kº¤Ë6³ê³ê³êE\ß¹Ê]åI÷‚|“à“ðÝð]‘¤žÿ:•ÜÒ{ôû“›þvºdºæFæFæFìR¼9ñæÄ›0·qnãÜÆ”Úæ0‡mszÓtét)Ì»çóçó±Àl1[€þŸJ»%ûˆê+ªÏ˜5f 3)”óÌ/ý†h¤‘F>6>ˆ_„÷}ì#_ƒxç7ÆŒ1Àk3Ž¡ÑD=vÂC&™ÀINr2…–·Ø§ÜJæÿdŒ€rk÷ѫӪÓÔN-êüŸì¿ò“½]|²÷±Oóû/#xßÍRåIEND®B`‚routino-3.2/web/www/routino/icons/limit-78.png 644 233 144 2405 13061246470 14524 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܺIDATHÇÍ–_H”YÆÏŒkŽKMíE`…y‘‰FâF™˜šÉ “aJÑFmQ¶Œ^lK¸YD$Ò²ÁJQìÊú'§‚ðÆÆBúGcˆŽ2™íüq¾óß^Ìœ¾o·µ‹½òÜ|¼Ïyßçy¾ïœó~G€BˆEɧç2ç2§;;ë-ܵյ5û×D|I‚c»cû“aá……2Ú2Ú̧V¬çu¾½^‹ß®§q±HX@Ú´Žòd|êòëò]_%âŸ{!½3½ó/Ü:p  £½£õúBå¡r°b=¯óu½æ³ó‹“ÿÒRï¦Þu¼†´yió„€[VlYùC"áùJðTyªFRFR”d˜Ï|UL3¶XÏ'óu½æÓüZOë'üXR¶¤L¨ÞY½3ýj¢àé/И٘©õâ@3ÍÌcÚ˜»ånb zU/`Åz^çëzͧùµžÖOøÿ\Û3ßÀ×ð Þ¦Ót‚ê‘Ù2›¸tÊ<™‡’ßÉ:Y†iHC‚z¨ª‡ Vª,•ÆcÀ5O­UkQ`6›ÍĉÉ.Ù(ÍŸÔû¨/ì†rZ!}4}tú –ÃòãÒ| æsa¬#„ ÛQe*S™À)NqÊ–}†fš%”R `ž6O&¢ùµžÖOøI»Ô<®Ù̵êd¼1Þhé¾úúUþ«|8ÿèü£ó ÍÓæióÀµ×^\{ê@u †üCþ!?´4´4´4€¿Ð_è/´½Àê™z†bƘ4&-=K?á'ilÀ ×§®O},ßo–ό̌ÓHoQoQol,ÙX²±JÃ¥áÒ0¸¹¹wÊ;催Y'²NÀ®M»6íÚ™÷3ïgÞ‡Ç;wXÍßâUñ*ͯö[ú ?N!ÜÝîî‚õB”U”U$×W8®:ÿL ¤DšÅ÷ŠïßÂ×çëóõ Qó æAÍ!êe½¬—Bx{{ aôýF¿U›«6WmbiÏÒž¥=BD"‘H$"¬ÑátŠ4­gé'ý@Æ‚ŒæL¼xk;öïÕsõÈ!‡ëMƒ­ÁÖ`+äååAàbàbà"Ü»9vs Ö¬)X¡ŠPE²½ÙÞl/økýµþZÛ‹Ê7ò½Íhý„înw·º£…£¶½Ê§| «¥Gz,ôìÄÙ‰³Pò²äeÉK ¯tUº*]p$v$v$f᫃«ƒ«ƒÐ^Ù^Ù^iár§±ÜXn×Óú ?³î1¢ò²¼LLþ.oËÛVù¶ñmãÛÆáÜswÎݱðÁšÁšÁÈ æó‚°øÊâ+‹¯À¾É}“û&a¦x¦x¦Øæ£ÒÁÙ÷ج§i„Œ0Àc‰®ðÎ÷Î÷ÎÑuÑuÑu|2¢¢¢`œqƵJ­R«l ¯10P¶Æû¹Sù?úØQŽrÔ¶ðÔµT§êT6üK•¢R€\j©0[ÌÂD5ÿgûØt~âý²Gö˜Mfq°žõ(~¢‰¦O¿ß³—½ zU—ên1Ì0 Ìcæ1âH͗䟽óÏÙ圽]ÌÙûØÜ¼Áþ ¿ãs˜ÉçÍIEND®B`‚routino-3.2/web/www/routino/icons/marker-34-red.png 644 233 144 4211 13061246466 15431 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü>IDATXí—{lTUÇϽwÆR-viNÝðrJ ¬°ˆÊÂ$"VÛ*Å»A^eª$Ö”Jé«hª¸5Y ëJ‚)«bÈZÖ…ÀššèÒ©¥«…bCm;ûøìsçÎ$+Ùìžf~÷üŸû;ßsÎŒ#ã'"a¨§S‚)A凨ƒ´Ûok¼­qÉ<—á2\Æ…?ˆYb–˜#ÓV•p —pIm«JúËx™OæO¬§>œÈãäÛ*¶Š­j q~üÏ\®FWc [Ù¦lS¶Ù é}}}œ\ùÕʯV~_}üêãW¡ · · 7nËyé/ãe>™_Öûq¡>”hO:¨ÞToª7ÛfÉeggÛ}zèÓCŸZ·‡¿þÐÐРŸ~ú6ÚhÛŽÍK/óÉü‰õ&üq>á­v¨jGÛŸe‚ÜOr?ÉýDÿEk´5Ú¥•ذ²­l+ÝØeì2v1Û˜mÌÃgø ŸÃŽÍK/óÉü6pB}ÏhM (% „kkkÏ‘‹2À[å}Ùû²î³Áž·X ëG"ÁH¬¶è—Ñ/aó!ó!.s0e::0<òiµYV'èG"ë#ëÁzÞ¼Ó¼“°töVy˼eºOÖ—<’O¸ÛÝíîö_þ\:x*<åžrkJèFh04Ho,OØØí‰öa®qÍac=m= ÀG|ä|މ „ÍÃæá¸mì3Áx¶ÐÐÐ z=ž O…5EòØ|®Í®Í®ÍÍ{äÄëÞX÷Æ:ë×±z@ïÖ»¬ç¬ç€È™á3Ãooz{À¹òså `ç9À×| `ù-¿c6rzòéÉ¡ûC÷ƒHˆõíÎ&ð «+cFÆŒŒTu/éžÙ=€nºÑÉ’ïüBÆ 0²ïîw×8§ýbÕ‹UΚÑMÑMN»ngÝN‡¸¾£¾ìüX}Vz÷’î%ÝK@òH> ú»Gö?²ÿ‘ýñ73ä¶éêßÛ¿@¬«öí+r¼öàk:{«{«ó§]œ0ö‡±?8ý¯^ºF¼ŒÖá™Ã3ãõ%ä‹ò~Á…‚ lGÃXlö˜=ÑÑÑÑ e e_øâÀñSÇOÌ?1ÿ€o–o–°Gÿ€{ÎÝsàÉñOŽH½”z  öríeàf¬ào‡Õa5^¿`NÁœ‚9ö¹ý¾ìhá¼êyÕóª¹2¤ )C Ð@ X¡úTŸê‹^—WÝ;[kß©}Ç!Q]ë»Ö4t7t‘¾½}{@ç:ÏuˆÉb2ÀÞü½ùcÛǶdïÈÞ°lß²}€._lÒ7“¾ãøÛ>د÷—Mj“jwò7JŽ’£äD¯ ííí²J¹Ë²~šYœYlL ­þ¶ñÛF€ïJ¿+%låÉ5áš0Äß½yEó uºà­“oØðنϖ^]z ﱼǀw¯»X>yîä¹'—Ÿ\Nd –mFÙ}×ï»nÚ€6^¯³W¤å§å§å áúØõ±ëãºûÀ/È;˜wÐ(‘8¦¿$¥$…Áð€ºQݺ;u7À†W6¼âì´5d 9Ìp{;Ð;o¾Y¸þpüu‹ÿVtªè”9`>«=«=û5#vªÜõrd¾îÎqOwOo«•þ]þqþqVžL¨9Ûv¶ j·ÔnÂÍ«›WXS­©¼Ç{úQý(1šG"Û#ÛÁXwxãáÇ:1PóÝóïžg¹}…Vª•jåÐånånåîû%j·¯Ô"åQåÑÅ5Jò¡ò¡Ôй)ØTÿyýçmí–˜SÍ©ŽŽE¬UÖ*žà §4f¬<ëë™x;ê:j:j kTÖYwè›íN–kåZ¹ßk£ù„Oø\ž8ëB±P,t•‹€ˆ€Z—Ö®µoÿÀ¾Zk<=õôÐŽÖe­Ëâ­<}µ¾€3œqÐGä‡ÀZcµŽv²~u~휵sŒûêw…\¡àî [&l™°EÕ«zU¯rŒ®IZ¹ÿÛH·¿å‹|‘ﺘ8½cj©–jrZ9­œþ×=#ϧ“V¦5)ï-—úßÂáÚíÃAIEND®B`‚routino-3.2/web/www/routino/icons/limit-26.9.png 644 233 144 3111 13061246473 14662 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜþIDATHÇÍ–ßOT×Å¿ ¿†A)7ˆ *V&mÅø€F[´:©Pª^ÀÚ*¶7\–ÖÐäêƒ^S1¤h4@jõæ6•)‰‰ò…4¶ ¢ƒÓ © )Á!3sæìÏ}˜9nÿ÷ËÉú~÷w­•ììu¶€ˆˆ¼âÿ /^¼È‡ƒê99–ÿøðe/í Úóàsˆ¾} ¦!¦A`£oìŸ?/àŸ¯gÔå Âmá¶ ­~| ÞMy7%b±ŸëÓuÓõY JZJZ¾ýêÛ¯(…g=Ïz¦¶Nm…6úÆ~cÞà›Ï/§þ¢/¡ß…~4áaáa"°"{EvâQß{"Xß²¾ðtÁÓ*¼@Qj+àÀ±žÏÃF߿ߘ7ø ~CÏÐ÷ùˆÝ»EÞÞ÷ö>S½o`à*_v|™¡ç¹œæ4Q 94€·Ð[ˆ T§ê ˆ `£oì7æ >ƒßÐ3ô}~Gé©Ê‚üÁüAÐû<ÝÚçUÏ« ÿîÁ¿S¥ U*íŽö“ö躮ë:õ‚ç<ÿ)Ý£-ÖãÑþðÄyâ@òñC¾#ßüaèGyKDdÕ—`r˜ŽåììN°ÔFµ'-´Ó*A%¨ žxâçi¦™fà 9(«95§æ€qšÓj‹Ú‚“÷üü9~=¿>ý>?Â3‘Ë]DyÿÈû¾î~xoyo9TŸ¯>W}Õ ¿°¿0 h»ØªZ«Z«Z¡· · · Ð×Gô}$€ï¯º¿êþ*¨Y_óZÍk¨_í/<¾ÐS¿yýÈëÆÑ^îï]‘»åÐúqëÇðã?ÙôË&õAÔŒé¢é"®Ì˜ÌðÌp°³³ƒŽÒŽÒŽRȮϮϮ‡[Ž-Ç“““ð¤ùI󓿀¡S¦LeÚ2m™†ô}éÖt+¬[¹æû5ßãšpx;½êhÌoÌõžÏx›k͵ÊÎ>g4]iklk„Ï¿¨ÜS¹' îJw¥»`û¢í‹¶/‚¤Œ¤Œ¤ Ø`ÿýà„:¡N(˜®®® ÌÕÖÕÖÕÖAÚ’´%iKõ kS©N¨Ïºj½jp¿á~¼+"‡"‡”MðÄDÄDèUÉÄΉkß³±;±;’*“*“*¡¬ ¬ ¬®4\i¸ÒÉ×’¯%_ƒ:kµÎ K{–ö,í›Õ7«oV ' ' '@JEJEJä&æ&æ&BXUhEh|ÝüÍòo–ót“nM_h^hÖ«/µL-3èaPmØÚ°µ"÷þ1P>P.±YŸdåeå‰?-þ­ø7‘ó¶ó¶ó6‘ÈñÈñÈq³2+³9Üz¸õp«HÜ¥¸Kq—D†÷ïÞ+â>ã>ã>#2“3“3“#’lM¶&[E¶5mkÜÖ(ò·“1E1E"»åS˧+2ûóìÏ"Á¹xð= VggÛgÛûn‹üÐõC—Hwѽ•÷VrÈ+»Ç.î––»-wE¢c£c£cEB]¡®P—Hj_j_jŸHX[X[X›ÈúÉõ“ë'EvïÚ½k÷.‘Íy›ó6ç‰D…D…D…ˆÌÎΊÔäÖ¼Yó¦Hñ¢‹EŽé“ÔÒÔRIIûg퟉ïšÕfµ¾ÛÂ9ÿ­ä£²Ê`Îæ»%¿ïMM‡‘î‘¡‘!ÔèñÑ££GÁµÁµÁµÔYuV…‰Þ‰Þ‰^Ðô½Ô#õH=‚ÉÕ“«'WtÐîÝîî06:636ƒR÷´…ÚB Ç§V|X¾<½ÜåØ@Ž‘+þœq«ejÎ?+ÅS ʬÌÊ/ cÂrÕr5¡8Ÿ„]y»ò’?ÅgÛÚ=­Àþkû¯t]ìºÈ×0Ö?Ö(ƒëëz¾^¯ë™õÅÉøBÀüóo$ ƒ%É’$86969¿%ü턊-[^Î{9O&€ú°a“ÅÀ$“èÃoŠõõx¾^¯ëéú:OçÇüXºaé!`[å¶Jkk¬ài;Ê8”¡ó¢Ý@=õØ@™T&Ô=ê ïÈ;$F¬¯ëùz½®§ëë<ó#ÞßÛ†°Ã²Ã¼ˆþ** ÷)ýJ?Qå‘2£Ì 5M kaŒñ–·±šØÐ¢ZH 2¡ÚU;R~£ (DA ªA ¤ëÇy³|a6”ý3XǬc“ŸðÎ;ížÕßÌgê)õ!9Ni&#=ôÐÔPC1-g䌜Žsœã¦üÎpøR½¤^ŠÙ6ö†¼!˜åÇýÄ¿ Ž86û{]²=Úm2x϶>+}V 7n6Ü„;všžÐˆ6¢ñãìÇÙ³á\þ¹üsùðü¯çžçCO>ˆÞŽÞ6x?æ'nìÑwp9x9ò €Ü¯\¬@õõõAÙPÙPÙ¬ŸX?±~†z†z†z Cž€'à @f03˜„¢Ê¢Ê¢Jp­r­r­®¥ålzXÞÕy1¾îG@J_JŸ¼ cëÆÖº‡÷FÇ/`ϲgÙ³ :¥:¥:ŽÊ£ò¨„`s°9Ølä7·4·4·@aZaZ¡ië Ö¬)X­=­Ý­ÝƼú•þ-Æ×ýH]˜ºP{þÿ¨g=í%í%í%£åh9´øZ|->HïOïOï‡Þ³½g{Ï ß ß ß È;’w$ï”:K¥NHjHjHj€öôöôöt“± :/Æ×ý$ ¡]×®'<BÙªlB\B±4~6„m³­ÌV&„m¯m¯m¯µŽZG­C{“½ÉÞ$„o·o·o·‘Ó‘Ó‘ÓBL¹§ÜSn!r+r+r+„(é,é,ébɉ%'–œÂÙíìrv‰Ù‘ð…΋óu?¾cüßówêõ³ ¡ª®ª®ª¬«Åj:w»Î ¯×¾^ûz-äææÂðÁáƒÃ¡ÜQî(w@†=Þa‡Ã÷ß;|ÏôŽT+(æ·¾cÿ}*ñ*•‡Æ)RCj@ €?ÇŸãÏ­MkÓÚ@ÊA9ã«ÇW¯nq‹[)”GÊáÕè«ÑW£ ÿ”÷å}à^ð Ê”2Dÿ÷TšúXÄ;ã1õ±jµWí%$ÈY`êWËä2¹ (¤BÓ“pá²JVÉ*Sþç²RV?¨£ê¨©)Þ°7üÑ>ö^çOÞ‘ ¨ïüÕ\Ñh ˆÊ»Ò/ýH:é 1Í4HŸôI!Lø‰zêAöË€ y åiyDAPÌúqÞ¿;ÿœý¯œ³·‹9{››7Øj>WôÊTPIEND®B`‚routino-3.2/web/www/routino/icons/limit-189.png 644 233 144 2717 13061246470 14615 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü„IDATHÇÍVmHTY~æÚ|…MÓàl‚™à}·e0[Ik³m‰ERTãºmí†?¶E"¡~¬X±íR.ØѨÖ> ¦”(ƒj5]B*Á6Òœ¬”ÖtÌÔ¹÷žgŒÇ;m»ÿ».Ïûõ<çÜû¾ç€8ÇÞ •t%]qıò½a·åÚr?½ǧ4Ò´Ñ´±ý'rò‰É'HrÊÙ)gõ'–~Ÿ˜õù¤N«ßê7yÇð²`AÁ›;Ž+‚¤½Ö^ûV%w^Ûy$k~¯ù?=Í=Í$ñF¼¤¥_ÆË|Y/±>ü‹ Íuæ:SiµX-™±:cuæñ€g™dþºüu$ù"éE’PH’Ôþ&™Ìdá%e”òéKÀÒ?/óe=Y_òIþ¸)+SV䆭¶ÚÏÄž\ K§•N“|±Z’‡xˆÉ¤U£$©j…!EPI’&šHK¿Œ—ù²ž¬/ù$\Þÿ¶¿}En¶m¶‘ ÉØ=RŸ¬O&õœXU¬Š1Q&ªE5…”¬?ÑëI5¬†Õ0)Lã;H}P¤‹t õÍèÚѵŒ‰]ê*uÕø‚ïñÝ&m“FRH~$ š}Œºý¥ýetÙ¡wèãu×j¡Xv,›Câ¢x$„""""Bò ò ag€HáNá$éç^Hð«Õkõâêx}²3£3ƒäˆ½ËÞ õŒ ;õY\V\6¾ÎE¢1v#vÃÐü9X,#C©¡ÔPªÁóÐ÷Ð÷ÐGV4T4T4íyíyíy†¿íUÛ«¶WäñÏŽÏ9>‡ u††BCÆŽ‹?ã|\Ϙ°{x¿úNõ’'HRì õˆáˆÿ²?™TJ@ u)u)u)dëóÖç­ÏIg¹³ÜYNúò|y¾]ŸL¬™X3±XsuÍÕ5W3:gtwÅ]qWS[¦¶LmZô½E,V‹Ó⮺yåæXã?”éŒ8»"¼" H= ”Ÿ”ÏyøÒòÖòòy#¾àî¶([’¶$ó æÌ+ÃáÁ0Ðïêwõ»7Üp8_r¾ä| 6‡Ía3àKö%û’Ç€cÀä¦å¦å¦mß´mkÛXvYŽZŽ|xe9e9H=  _ׯ›þ‚P׫ëÇS`F7ºÇ1ô§úSý)`Ë·åÛòËi—Ó.§Ëg-Ÿµ|PºþtýiÀ–c˱åM¶&[“ X’µ$kIàõx=^àÚï*w•™µ™G2|¦Ùê^u/ õ(@Ôõ>º¥±¡±AÆñ;Ìfaƨ´LÊž”=) ŒFÀáàáàá Ðènt7º×9×9×9 ËšeͲ»Kw—î.Âö°=lN:N:N:€¢»E7ŠnË=Ù%Ù%EQœOYÜiŠãzþ¯+Y§V«ÕFW¬ð xÈáÀp`8`tݰØ?ì'_ó5_“ÔŸéÏôg†äöÈí‘Ûd¯Þû®÷)ÚDŸè£`‹zK½•À+ÞW¼ïƒ®œ}Œ´÷Ø{¢È­C3æ©éEJ8vâJ—Š¥b))jE­¨M°{„GxH±]lÛIñ«Ø/ö'øç«GÔ#â/ãs,µ3•¤jï¶w0ÇþcòÇää×BZˆ¤[Û«íeŒe¬fÂäç×,daü A’Wè§?aè§ŸB´hs´9Œ±U«Ô*&¿¾Ù¼Ù,wê½ÉÿÑž•íí⣽}œ7ØQ¤Œæ¨ÝIEND®B`‚routino-3.2/web/www/routino/icons/limit-35.7.png 644 233 144 2760 13061246474 14672 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü¥IDATHÇÍ–olTUÆÏ ÐÒX§°i3‰…P ŠM0Tm¢ÔP:U¶…þÙRg‰±)6u´‰@b@¥„n‚ˆI³[‚CéŸ4ìt6Uà ±©Xl\@)Ô`´ Q)Xþ)V™i›vÖÚÎ̹çç‡éñŽúe?r¿Üûž÷}Ÿç¹çœûÜ#@!Ä¢¹»ëRëR«-[]æøÂÂ……+ߋŭ,›-›¿­‡”¦”&€ÅžÅã²ë¼®ïÂÄçÓãb‘0ý‰~‹c.~¶<²å‘…i±ø_}Ô•Ôõs^ê~©àï^¶Áè磟L8&`Æ:¯ëu¿Æ‹Çoþ_Xг Çò=$&$&Ë6,Û°bG¬àÚ (+.+¸=ïöÍÓ# 5?5_(®ü¹¤Ç.wÂkK^[¢ù"]ÀÛ¼M2DCÑ€¬”•Ì‚êS}X°€ë¼®×ýOãk>ÍÓc.å´B4>Ï?; F Ò½I¤ƒñCd:2M„›(¹Gî’»@®’ɇ@º¤Kº€=ÔQ÷Û ¢þ«¦ÔJZÃö°ˆ¬Šx"ˆŽÇðÕéŠúŠz-°ñs)o !ÄÃnH %…BóÙ7Ü?Ü|À&PO©§˜¦vÚA¨5b#‘H@¡Pü—Z¡V0=l‚9>ÍOLàG!„h=‡íåê—«u³‘}yÃ7~ó!4>ݘߘº¸ìâ’‹KLøã%ÇKŽ—À‘Â#…G ¡ÝÙîlw”wÊ;å5ën쿱ÿÆ~8üÅá¾Ã}àyÁ³×³Õyµc cn<<Þ6ÞfdÃŽ­;¶‚QÓ#Œ.!„Ü]ûºöÁõÔñÛã·UÍ_ÞJÉLÉdÖyÍùµókÈ8˜q0ã tŸè>Ñ}Vž_y~åy(«(«(«€Jo¥·Ò #öûˆÝvÖrÖrÖ¹ër×它‚`Á­‚[ Z„‚ÙOžÿ*ë«,Uy>ò@ô—˜¡þ~ÚýiÊiið]öÍÜ›¹pä­¦MM›ÀŸèOð'@AFAFAì´ì´ì´€=Ûžmφ҆҆Ò8¶íضcÛLAFº‘n¤ƒôIŸô™ãͽÍ7 /î¯)ª)Š[àw¼w¼À¶[ƒò ‚‹Â‹ÂÆï_¾n~öÿû%t+t ÊóÊóÊó kmÖÚ¬µà®rW¹«`û•íW¶_£ÕG«Vƒ½ÅÞboÞÎÞÎÞÎ?ff;à¸aõ¥Õ—V_‚ËŸù†LÁAõ·@N /N\œh ù×ûîKP~˜ÍŸÍ‡w7û+ý•ðèÖì³4×/_¿|ýrØ8¹qrã$4šÍ3ŸS›S›S ===0Ö:Ö:ÖjæÃꂺ .ÄmÞ&Õ¤š€"ŠˆÛÔ„÷Ë‚zyU^ýÉa 4š4ïcÚùgµó:ç;ç"ýê“èxth“wä"Z¯àÂêSuFNqŠSÀÏ1!êuM]ä\}ª|C¾A„H‡th•‘~¢ÎyÎyz¦âÿÞýWÞ³§‹{ögíµ>g­µ÷Y‡ddddddÀ£28:Ðyâq‡¸ƒi3NfœÌ8ɼ³žd=Éz²(„M`Ø„Ü÷8%§ä”á›­5Ök Û 4Ðt!Aîã>îØŒÍØÌöËVÈVÈVtñcñcñãÿjÈ »Š3§dNÉœR/{Cö†ì ¤—óçü9?Ê!4Ú¹<è`¢EK„,!KÈm&›ÉfòŠÈªÍªÍª-é²õÚzm½u7Ì/›_6¿þOy¡¼P^ˆ áqáqáq$=R)‰”žžž€cîxîÐw¬wسo÷çðïàqð‰í|¹3wæ.¼M6‘Md“¡È_ä/ò¿òé´é´é´Ÿçĺ‰uëøÔ¸ûq÷ãîӑЖЖÐ’ K—¥ËÒaÆnìÆn¸À 3Ì6b#6˜Š©˜ ³Õ×êkõEBKCKCKù>èû ïƒ„Ô¾×û^ï{ý­/\ü]ü]üç8ñ›øMü¦ØB–Ä’XRÇÛô5²Ç²Ç²Ç  hðu׈kÄ5 glöaÛ°ßRÕÕÕ.jõû«ß_ý¾¸ÄÃèaô0B…I˜„Ià˜š©™b<À<à W¸Â†"i#m¤ žážA<è>è>èŽöò¯Ê¿*ÿŠ{»ýZûµökâ¥ÎRg©sçEn·‚[1-æc>æ?úunvnvn$Þo‰÷çÿ1_4_4_ô[ªJT%ª¹„¤ I’6ˆTô)ú}˜Ä/å—òKa•°JX1ÞÅ»x ·È-r ]¤‹td1YLì*»Ê®ÂgÂgÂgsM\×(¶)¶)¶a’þj™j™j—àðïàqð‘,m–6Kak¶5Ûš/6»ÝîF°¥Kÿ–~ÒìQìQìQ *|(|(|wú%ý’~ùÿ"æˆ` ըÆJ ÁÀÀÀPPP€™‘âN܉;Œƒ«W ®‚p,äXȱi”åF91H#¥‘ÒÈ¥‘bÄ‚XÐÞÄùˆ|DÄ|ói̧ˆó¸äqÉã¤B¿Ð/ôÃ…6ÐÚtxwxwxýûú÷õï&'LN˜œLKŸ–>-€üà«ÕÆj czÇôŽéµR+µì ;ÃÎâañ°xP'©“ÔIp÷¨ò¨ò¨‚9frÌä˜Éˆ+¯,¯,¯$¾_‰ïÞDÊp\Àß¶Lx6áÙ„gØ?3bfÄÌR„a cRêI=©'pùÄå—OšDM¢&¨7Ôê À×/~ýâ×/u–:Kcr×÷®ï]_à¸p\8.ÕKª—T/ÊÖ”­)[TåVåVå|߯·-“†v‡v‡v“"ƒiÏÓž§=ö—Ì)™S2‡9Ä丰>´>´>d,-%-%-…±k®]¸vaL5•4•4•0–ŸŸ?~ÿÛðoÿ gL³R³R³’1Û9Û9Û9ÆLM¦&Scì=ö{±ÑŒ2&ä ùBþ¸ƒOŒ}؇}$ˆž¥géÙ±7“±!6Ć‘ŸÈOäl\¶qÙÆeÀä&ÿ0ùàîÉ»'ïžî^¿{ýîu`fòÌä™ÉãåM¼‰7­…­…­…@ζœm9ÛI½¤^R,ï\Þ¹¼U†*C•[–°%I%©$2ºž®§ëÃ1#AT¤)EJVfœmœmœ‡ÜNn'·"ûîe´€Ðà¥E/-zi Ä qBPöSÙOe?­S[§¶Ndr™\&åŽpG¸#À+e¯”½R¬µ¬µ¬µ/$¿üB2p:átÂé ¯¥¯¥¯ —è%z ̾\dºeºeº…‡TEUTÅʰW¹W¹Wi{²+lWØ®0!§ùdóÉæ“ã)0IMR“”±s‹¹Å̘%Øl Oño‹~[ôÛ"Æ>R|¤øHÁØþ‡gÌZd-²1fÕYuVݸ¾åsËç–ÏûäOÞøä Æ~~ççw~~gÜ_[B[B[c»ãwÇïŽgÉ™2d°=¡XÕX©gˆ3Ä$½¾ ¾ ¾€W )†C ¸ð©|*Ÿ £f¾f¾f> ËÕåêrÇ#7ºÆIã¤q‹e±,8Ô~¨ýP;p#çFΜqõÛGo½}`7Ø vðéôéôé„ÕþØåüÙógÏŸ¢ˆˆG OxÂ#­3­3­35^±dY²,YêÍÆRc©±4ì“ǚǚÇ~ÇœÍs6ÏÙLW"yȃUë©õÔzBÜ jP5¨ÝºtáwÂï„ßèèè‹Þ¢·èíSíSíS QݨnTúv}»¾˜×=¯{^7X˜.L¦ƒ¸B^!¯ f}”>JE·9-qZâ´äÎÚ‘›#7Gn¾Oöüºç×=¿¸‰›¸ésHòXòXò¸ÑyèôÐé¡Ó~I±=±=±=la|g|g|'¹Úu ë@×°¾)}Sú¦€xÍõšë5ðñññññÈ/äò €¹˜‹¹@¯ºWÝ«zò{ò{ò¥B©P*e´2Z óí¸Ûq·ãðæ)í)í)-λ ¸ ¸ X^g"&b¢ð7130£5Yããã&j&§È)rêy"$@r;^r]r]r}ãìŽÈŽÈŽHÖì¥óÒyéˆ103030/z_ñ¾â}Å2Å2Å2€D`"&b"€d$#pmumum”‰ÊDe"à–ç–ç–£±ÊXe¬‚kɪ’U%«¸y7Þw£ ¢>QŸ¨o×q,ÄB,°÷ÕÞW{_=pšå4ËiVÁœÑM“ú£P$ EâCöÌ~àÈXvvvvv6ŒŽˆÂ~c¬†ìµ»Ã^»‡H!)$…W«i ¡1©5HB’èáÚ‘Ú‘Únë`ñ`ñ`1\(¥”R¾wÁÚmí¶vüŃÅ?X ØUŽóÔèàý°CÁÅnຽv«B*C*C* V:mqÚâ´¥4{@9 PŠ¿Ëø.ã» ~‡½£W´x¶x¶xâxCsCsC3yÛEï¢wÑ‚JP ª4Š×‰×‰× Ï ˆ ˆ ˆ¤ýv·ÃäáO$:::::œ}Ú¤Lʤd[opopo0þÅOã§ñÓnp²Y€,àÃOcŸÆ>õ¬llleùºººükC#C#C#¢É<É<ɼ¾¬˜³âo/@d¢vô£ýÂTGìâþÈCðò'µ›-´Ðò™¬†Õ°šè6ZA+hÅ¿,Ë-Ë-Ë…`I‘¤HRD[EI¢$QÒ÷×Ôê uÅ¢hC›¡ÍÐF. ^‚—àž±Û­µšÿŒƒâ/äµk?.øLlÇvlÿ—l Ȇÿ¨™–i™v×FçéÎÓ§ÓVQ—¨KÔÕ=]Èr…Ü­=úµúµúµÀ( ìöåð_qüîwæC{IEND®B`‚routino-3.2/web/www/routino/icons/marker-45-red.png 644 233 144 4160 13061246466 15436 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü%IDATXíWmLTg>÷cºtQÒ-(Ãn«‹¨]q© ˆ3Ú:ÒH”Vl nŒûÃÏŽm#–ØJüØJ¢†–¨iÅq‰%¬én ¬ñ#aB5ᇆ´D@`À‘{ïûìæ½÷ÎlªÙìž?3ç=_Ïœó¼çÍÍÈl 1+Âá‰ðO‚ѳg5Îj\½\VeUVtJ§t`ÆÌªH&™d®¡:«âþ<žçãùCë‰Y¡xÌøvÑ.Ú%ºCíq‹åF¹Qnt?v »…Ý:˜Ø±Ø±Ø1ü=ÿ~þýüûÀ†Þ ½z‚ì‚ì‚lCçvîÏãy>žŸ×{6ÿªÏ?!Ž‹ãâxO:ïPBIBIB‰úAíÚµ7Ø ¾aß°o€ ü˜À&ô =€®íÜŸÇó|<h½ù'ž¬/Š}bŸØ×óž ûZöµìkÊ»§»§»§Ñ °T–ÊR¡¨ej™Z¨KÕ¥êR@u¨ÕaÒƒvîÏãy>ž_Rßú¢Mp nÁM$’ɇêÚy€­ÊVe«R:°™“9áSê—âX`žª-j °RV @Ó#X€§Šª¨ëQ²”,@©›rM¹ö¡–¡eÀǽmU¶R[©âàõ9Ž,--×þ;XË­åÖr–äòy‡0ÌãS¨GÕ£0ħÓΚг¨PgqÖìÅè' Ñi «wÈ{Ç{£Örk¥µ’%q<:>y‡¼CÞÑvˆNŸ*>U̶ø·rF9c*`ÛÙv3®æäædèºÚuÕ|ÞëîuÀyñ¼î÷€€k•k\Š»(îIyRÖƒü§ŠO*'¶Mïl>bƒ±)±)±)¨z¼úñêÇ«õ@‰ÈAŸZ«Öš¸>q}Ìì¨Ë¬Ë4ÛOœ0Û#WD®0é¾ÙÒl @âè磟õ¯NN8Ž=¼þèú£ëÑúÕn•© À –¯å›täuäÀKO^z´·®×ì·ö­µo@Ö¼¬yà¯òWÀЭ¡[À:X€AVÀ µ[[¨-4ês<Ÿ¼R‹-v‹Ýb×ïXmÅkxˆ~#6‰MDD§'N½õv‘#É‘DDõ]ÔwDDSÊ”²R ÅB"¢ïþþg"¢Ù5³kˆˆ’R’Rˆˆä™ˆ"…KÂ%"úFÛ¯í7ê[ê-õ–zýÊóýÊŠ–W/¯^^®)a²~²@ëa=`ø3§û&û&;¬_7[Àfî¨;ÖkîhîÞܽw=ï:4õ5õ@ž=Ï Œ»s?ë~ÀÒfVΞ“='{º8>¢CtL? TÝuºøt±‰‘÷~¼÷#X‹ ÞŸÞoyóˆè‚+ ®@Ó×M_Àðäð$<¹ýä¶ ¿2¶{l7¯ ¯êÅsûȨwåXK[K›þþEHÒ„´éG$-“–IËJ+ø-Kü]ÂW _©ó½û¿íÿ~rýä‚ån|ãûà˜ë˜ €å¾“ûÈ-r ,X<çSϧ@Üqo@å½Ê{& þš¶š6ëÄ…âBø¡å‡üAsJiòËÉ/kú ÅIqRÜ—£m¶GÛ‰ä«òUùª«O_ø¶ [†º‡çלì;‡<¼àÄɇ掺κÌ{û:öu˜o¹´MÚ`tF×¾tv9»ŒQ—Ü*~µøUͯÜ*m•¶Þ+œÑ£)TNZÒ,É–äž3<ÀYæ\ç\ÇrõÉÍ |ø à»°êÂ*x =ÐðŸh¿Û~Î?sP‹Û—´/1ú{aüÂá ‡±NB+Ä ±bjµ0W˜+ÌM® (ÝÖï×fa³°yUà\‚‹sEÛîiõ´zZ~ª{Ô=F¿ôo×p c+Ø ÃÌrÙ»ì]]õõ¹zû{ûÄHkƒµAÙ¡wò3iŸ´ÏiÓ¡9ÈAÙj`͡ʑ?#7¹ÉM$ JƒÒàÓŸÖë ë %Æû±·Ò[id¹ÓŸN ¬ŽÕ™î­èàÑh V8}sú¦ñs6ýkÓþMûÕ=ú 4!È#žƒñ;ãwÆï$m¢M´ ƒèŠ9Ì_? ¥.©Kê.'íMÚ›´—ÈRb)±”xêÜͱåØrÌÜÕœšxàÀF0btR]¤.R\¬Î¨Î¨Î`¹ú[c‰±ÄôMÍèÖÈÐI Ía£'!L½ª[#-i–4Kš÷¢‰»eÎ2wc”%Ƥ hÚ€ÁÅΙ{¢:£:£:Y¾ÎÉh1ZŒ~ï@O†á‹ gHÕaÜÍw•V¥Ui5˜;??,[2¶dL}Eçb½T/ÕÏäT R/à¯é9b8ð¿ÄÝcÖcÖcJŒ×åuy] €1ŽÔyÙyÙyÙX;r\#×tÿ’DÝ «<§ž0\xÀ{Aî6ýwWæ­Ì[™gpדéÉôdâ›;Ó'! EBѪÒÐ2âHX]þKyw³¤ ©BªèYÊ•••³¿¦>M}šúT¹«zP” TGuTGÁµ#yÃêEÐÿ(áÜ=ª¯| l¶[ZCkhö{qž8Oœ$@ÿ¼žèOô'ú‰¤6©MjZ‚…a“û¿IŒþÍNv²Ëí¡æ‹E&2‘B³Ð,4÷ÿvæ|¡'l2ÝayŸ;êe«‚­‘änVIEND®B`‚routino-3.2/web/www/routino/icons/limit-27.9.png 644 233 144 3025 13061246473 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÊIDATHÇÍ–oLTWÆ_Fù3È,µ‘ƒ`œ± ³6‹-«$:“N#È:ÖÒ´ZØ€e¡®îöC¡”¤dWLìnŠA ¤»ØM‹Û65jR5CÁn›T#f@jW銴2Ι¹wÎo? ·ƒšýîùró¼žçÍ99Ï=""òÄÜWÀ”eÊ2ý"†M¿‹ÇS6¥l²}ÃÇtHØ–°íJ¤I?°¸sqgt$޼Q?¿_$Î?_ψË$w'w'8çp3¼jÕž’Ã-0Ÿ4Ÿ hPóIÍ'½ö~ȸ=p{àGçNˆc#oÔýß|~i~H_?Oü<á$'%'‰ÀŠW¼hýc¬`Ì îRw)À­·(èw€4Ò”ðãÇXSó°‘Ÿ«7ú >ƒßÐ3ôcó,q,qˆÀKÛ_Únîˆ5ŒtAýòúå†^ä$°Ÿý¤æ×üz¹^N”GyH âØÈõF¿Ágðz†~lžøQED¸ Ì[æ…èe€H¿v9òdäIPÏi¥Z)5Ár–£4M jAÐ+ôr½t“nÒM zT·êæá¥¢-CË ¢MGžŠ<ª:Æeþ2?0mèGù…ˆHN+˜ýf¿¡ {û½ý@3›AmT ²÷yTX…Uxžd Áÿ•¦4¥f?û”C9R9Ç¿iNoNŸË±y„Û""ÇúH¯ÝY»Ó ‹>;œ|©îRJ?d9dAy«½UÞ*ðÙ|6Ÿ Z[[¡³¢³¢³º®u]ëºãããìÃ9Ã9Ã9Ðö\ÛÓmO£ÆÇFŒ‰ë©ñÚgjŸ1ŽöXŸèߊˆ|[Ÿ¾õé[ðÍ®¯¿¾^½‘vß|Ô|”³ÆYî,‡ÕW\}×®;\®LW¦+§§§A:¤C:à̲3ËÎ,›7Pýpýp=ØîÙîÙîAÑö"w‘ž]™ÿeþ—„îøuîQo@OYO¨ÊØ<¢.:¾è¸ê†à`pþù·Ïz>ë¦ÞÛöÞ¶¸@^U^U^´ïnßݾ;oKnKnK†ê–ê–ê–Gwª}Mûšö5°néº¥ë–ÆãÏÿrmpm:\]î.7@xCxè+Ro¤ÞPÝBdqÊâ”èUUsgóÍñk?ðë~k¿ì6»ÍnƒÊU•«*Wʼn§ § § !ß™ïÌwÂÈù‘ó#çìæèÍÑ›£`o°7Ø ØZl-¶BÒĆÄøû¿>Îú8‹)ˆš£fТ–E–EÑ« U«ö‚öBÂUÓñ${’]ò†~?R7R'K\ï¸^v½,²×Ón‹Ôn®-­-•Ÿ×‰Ð‰Ð‰H†%Ã’aÉuæ:s"á}á}á}"ÓŽiÇ´C$P( Šä¹óÜyn‘‚í¯¼&2´áRâ¥DÛŸlÙ¶lY"( ”ˆ˜ŠÉ!'áªIý5p*pjðk‘¯ú¾êé¯Z9´’j]"c‘1 ÷þª7·7W$3;3;3[Ä£y4&2xqðâàE‘-I[’¶$Åž¹0saæ‚ÈVÙ*[E$5=5=5]d¶|¶|¶\¤­¸mcÛF‘ßž©8ZqTÂëßY»gíª¥æTã©FÓoZ@üZh™»•ìz{×Û0Û»%ÿ-™(š(ŸÇwÝw5±kbçÄN …™3;fvÀ¬gÖ3ë‰]TEUTÁ]÷]÷]7pŽsœƒð–pI¸&'&ïOÞG©!Í¢Y€˜¼ÙðfÄüôXßœÁÆ} _ùÙǬÊú€S=¸šh¢i"4?O ^W{Õ^€¨/ê#¨VÏñÿÅ;ã0ÿ`þÁ¿ŸácüÕ¸¨/«)«Õsfõo=MOõí'í'"|Ä® °’EÐÈ»¼;oÿð=߃º¥¾Sß13V| écDÔ€6©MßÎÿÊ‚W‘‡ÿñýW>¶¯‹Çö=öx¾`ÿíë÷[5zIEND®B`‚routino-3.2/web/www/routino/icons/limit-0.2.png 644 233 144 2542 13061246471 14570 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–mHTYÇuÇ—œÆŒj!Y ’–D0‘ 4´h +´èMd]¡ZXZ¡-ìƒ.}Ú¥„µFiÛ(«Ù­ìË.-ÅöBT.“Mî"n“™š+S¾ÌÜsÏo?ÌܹSÐ~ö|¹÷yÎóüÿÿsîyž{DDdAì)œ“œ“ìŠÚÉŸÛþôõéëóŠÚí ’¶&mý³²Ú²Ú²½Ù^ó±m[óV|b¾ˆŸÈgùeØŽ´î´î¤ò˜Ý5«jV¥/ŽÚßÝ€ _†ï ¿4üp©ëRû`øÖð-€‰ò‰r°mkÞŠ·ò-¼D|iy‡_=Žž¤AHKMKÜÊÜʼ/£yPµ±j#À³”g):Ô(àÄ©Ë!¬1–`[ó±x+ß³ð->‹?ªG`QÙ¢2زm˶ŒSÑ„Ç?BÓ²¦e_Äå(N0BF@íP;˜}Cß ‰$°mkÞŠ·ò-< ßâ³ø£zäíoû}¸ÓÜiÀk€ÈMP½Æ8iœ$bü£2U&Z¥÷é}Øc’I&mÓüÛì7ûÁTé*mÎÛíD@¨`&†¯c|q~ITp2†3†C0xxÇÿŒOU‡ê`ŠOh !AÈ:Ö±¨ ‚ Û­C:¤C@ -´$Ä·âÃ:¬jU-Sqü©@(‚8LOLXûïÐx¤ñH|½EúR¤+Òeóú÷÷Àãð8< †í³…9d™C¶Ýçèsô9àø±ãÇŽƒ¾_û®ö]µñôϑӑӀå³ù£zbÂî g'ÏN‚¾  ëc³c»ÇÜcn(òùŠ|PØ[Ø[Ø +fWÌ®˜…ñMã›Æ7Ù‚îôßé¿Óΰ3ì CE~E~E>äVçVçVÃ5ŠÅÃgÍ[_”ßÒ#àºîº®»a¸x¸”›·Fç‡K:—@icici£í_=°z`õx{¼=ÞÛ¾ö|íùZhö4{š=¶eÝʺ•uàýÆ{Ð{Ðö«Ö[”ßÒ“,’R•RÅÇ"ŽËŽË"2)""ã±#(FÀxj<qú~§_âÃõÄõÄõD$ì ;ÃNÛ_s®æ\Í9‘ g6œÙpF¤°¸°¸°X¤¤£¤£¤C¤îY]°.(""'ä„HÊG_Œ?¦'Yļb^Iò‹›Í"IQa‹,¢Ü;¹·so‹ŒŒŒˆKƒ¥ÁR‘¡Ô¡Ô¡T‘¼åyËó–‹L7M7M7‰Ü}}÷õÝ×"•e•e•e";î\¸s¡ˆg¿g¿g¿ˆÙizM¯ˆˆ–Ã"ò…Ååëy÷ŒÑûæW”[¹™µ6zwùîòÝå¹7soæ^8<<„QϨgÔk_¬}±ö´fµfµfÁ¼öyíóÚ¡¤»¤»¤\K]K]KÁ7á ú‚öSï=cïTe$V%ʘ0&­"ó/ÓoúaÜ?î÷ƒÞ£÷è=`¦aðêÔ«S¯NÁTöTöT6¼ì}Ùû²‚ƒƒáùÏÛž·ÁÌ·33h0šGÓÿ[• },˜ Ì$ô±ê¡zÈ”Ò9:'¡_Õëz]àª%B$º8{Wì}0w™»úPïícouþtw: bõH=®š‹ÍÅDô}=­§ÑüÆ5®ÿ2Áè°ë0চjЗõ}ôzRO¢u·š¯æḪVÕñUÜÄp§¸S¬z«óÏÙ圽]ÌÙûØÜ¼Áþ(H[ÙšþšIEND®B`‚routino-3.2/web/www/routino/icons/marker-24-red.png 644 233 144 4205 13061246465 15432 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü:IDATXí—kL”WÇÏ{²’nD™q#¬Ö …ÐU4]AœÑè@¢iu Buk4¦¢0¶$F²Aê#i‹4Tm‡Ô–®D·lÐhM³ÁKmwSš(ÌPd ‘a€á½œÿ~`Î;ïÌf5›Ýç óœó\~sÎÿœ32c¿"aƯ‰rE¹¢\ÜDp nVÛ¬¶Ymë³DETDåû3$ƒd `fšÖ‘ˆDd>îÓÏòY=V?¼¿&œGÏ·Ÿì'ûygøüÜ×Ä6±Mlss¸Ü $!q4q4q×¶<ÜòpËC`Ûãm·=¶foÍÞšòÙ<‹gù¬«Ïú½˜‡ð¿÷~ÂñcüX_[¡ä’ä’䥼ñvãíÆÛt¶ï™ï™ïø1ŽqŒèCúÍγx–Ïê±úáý~òb>bŒçø~ ï/¬@ö­ì[Ù·äUnÉ-¹%¸4šFÓhd¥R©T*%SÉT2ŪX«Îγx–Ïê±úpXc¼†Æ99'ç$D<*6?` æ³Ýl—­Øô#ú|róô‡Ó´Oz$=0­\U®*P@e `2d€öÑA:ÈÍwïôõõøX°¹Æ|È|H¶²þŒ‡ñC¿¡ßпéw,ÀXm»®}yíKVI«ÂÏà Pµéó;R:RÀ³Ô³a9þúâúâúbº[[Ù0>B‡—'.O\ŽšáõÃë‡×ºÑ &ö··™s‰ÆD£ÞÏ·åÏP©‹ô ŽÃŽÃºx_Ë@Ë Õ¥£YÆÃøè±Í'6ŸØ|"ôÍ·Ú¥vbC)c)cðNù;åz€{çîÓûUlØü£{àÕ‰W'ôqÎSÎS¡úŠ{úõé×CýããƒGê5ƒÅ`1X´3Evq×¹ë„_K#Ò!„l¨ØPA!{ú÷ôëoŠh!ZÐû³sfçèý·ÒßJ'„kª5•Bb~Œù‘B&-“BHt0ì<é&Ý¡þ†VC«¡U;òì~¥…YuYuYuè⦸)À%\Â%Pü‘þ@BçSz"=€ÚÜÚ\ˆÏ‰Ï€ÒâÒbýJî8µãäUåU@À0ëV4àŒwÆø>¸ñéR™Tʲ³çdÏÉžƒ^ÆGx+oå­ÒÓà@͹ýçJÏ•ê$Í>öÜï¹ ™Ÿ™¦BS!|áû§üyâç m¢ 2¼^Øx|ãq2Ûú…¿,üP.^9på@¨ßÚN¾“×^À=\:—Î¥KO‰°BX!¬8dg§Ìôc‡±CYèùƒû„;¤YÍÍÏ€7³ßÌ@½¼ô€Ó{¦÷@ïÒÞ¥P°¨`lror@îÛ¹oðF #òRV¦¬€ky×òð«,?´äé’§ªös…¹ÂÜÏFHœ%Îg!D¼)Þo:´ ëÆúõJàðNª-öjìUàâ¹FþYßÍúø»ü]ý!iùºåkü»ùÆûÇûŒÌÄ©Ÿµ4µ4…¶ºänÑ7Eߨ~ p—°KØõí3~Ì ·äO éâiñtßY–`«Ükßk§¹À­·nòœÏ‡?Î/8¿€¯ùFó 8c:cw»GPÖ)ë P(”⦽M{`°u°þ–±Ëw.ßAžö„Úy;oŸZÏÍãæqó–6F ÷µóUÄ=à¬kàÄK¼!|Ÿ¦¾ïêlÏhÏ€KÓn™º[Ý­ŠXAáæÒ÷è{¡õp 4 4¦hS¬)VÞ§­d•P%TÙÌš•X‰U4†XsHÉ«ˆ“8‰“aH¸+Ü-¿¢=­ ÉB² 'x*z¦z¦ôÚ•,’”yÊ<”^¦—0ѹP‹Z€n§èÆa`Ç‚7 ÞPÊ´h\ôˆב¤Ò¤Ò¤RBx3oæÍÜÅ ]1ÃŒ þÝ.ô ½B/מz0õ`êAB %†C‰ëˆ¦ÝsŽ9G)c¤ªMµ©6à‚ .ÏñÏC+©,V+‹Cë[·²neÝJš«½å †CÂÀÔŒoŒ&aÆuDl=á"ÜoÃ}c´!ÝnH÷\ i×Vi«¤ÚÏ9ANB@ê :¨†®nt£pÅtÇtÇtÓ-š&ãø8>®àORü4‚/мx@¨Ói·ˆ+Z·…spÎÁî9õ}W§«ÓÕÒ®Ü)wÊ!åN&M&M&ËF—.UiZlZ…ÖS«™Ô‚Ò‹|…¼ÄB¬@H»CÂN»µÆZc­œàqxf~Ô0ÊHmí¶v[{èÚı¡;ø/IÌß"úÇÉì—FK(j÷ÏÿI»kó׿¯Íi×µÚµÚµçgæ©¶\!WÈ®;ކї#ÿ¥½L»k»`ì}™ ¸°º°º°šžL›N›N›–ÿ®mõ0$ Ù’I3i&Í$x히~Qä´Hí ÷×öp;¹ÜN€l Èu ?ŸŸÏÏ8ÂŽ\ÿÖä7ùM~B„.¡KèâþLܱsÿ7KÐ>Yˆ…XÄáÓÅ<å)O®ƒëà:þ¹`fü·®ˆqGÔ}éVÿ ßj}ëRw48IEND®B`‚routino-3.2/web/www/routino/icons/marker-67-grey.png 644 233 144 6345 13061246466 15645 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü šIDATXÃ…—PS×¶Ç¿{çä7b’ª„‚E"?„R±WD)A®Š(Úúc,´ÖV”"Õqô¾*>-<¨½…>[ië ØéU°\¥iª<Ú+½Œ·2R,4áWJ…$1pröûÃDÎtºþ9³ÏÙ{­ÏYë{öÚ‡äæææææB…Gf}t¡‹¹®‡ëaµ¹grÏäžaÚü;ùwòïü5œ©™š©‹¶ñ¾¼/ïµÕipœVˆR”¢”ä ¡p ·p ÀVlÅVV(]-]-]Mr¸An¼QJFÈÙw2Ï'Ï'ϧ¾½`SÁ¦‚MÄÂò| I~Ä!üàæRÑÇ€±ˆE,=+ä ùB¾ðÄmÂ6a›1?ߘoÌ7ží›°LX&,uÿ±Ï³Ï³Ï‹ú/å1å1å1\ŒJŠJŠJ"9Ñâhq´˜¯™¯™¯ÎÁEÌ›y3o!l![È–Àc¢@Q (ð»S¶r[¹­|–智gêž©síIº•t+éŒh‹h‹h#)ÒiŽ4vìÇ~ì‡vØa°›±À³xÏÂîôwú;ý‘ÒÖØÖØÖÈ&BBB…=÷—Þ_ziÚ'Š@E "p¡ÌµÅµÅµeÉ1–Á2XFO:]D><øðàChD£ÿÎÀ8Cã?'Ž Ç¬º—t/é^âc×½³îuïpgU£ªQÕ(t˜†i˜ž³` ·q·xÁ ^Æ1Žq!A@LÄDLàq÷pœÕÛêmõFwõgÕŸUƧw_í¾Ú}•»&‘Käyï%~5¿š_¿ñˆG|ÿ•7Ë›åÍ€X+ÖŠµÿ—ý’ý’ýÒ¬ºuºuºu|JƦŒM›¸k*?•ŸÊÓ„……!KȲÀÁ¾ðH=©'õ¹N®“ë‚„ è@ ä yB8¾‰o⛀©Û§nŸºÓ<þu«t«t«øO|‡ä׿׿×&ÏŸhžhžh¾Ôì=æ=æ=Æ‚2û2û2ûH³ê+ÕWª¯@… !CÈ€7¥±4À6lÃ6<±xÄ#@ŠP qˆ @€€‚‚>5æa€Ÿð~¨5Ök…pbù‰å'–³èQɨdTBÌ’hI´$zE´Hÿ¾þ}ýûeï85NSãÿRJEJEJ~™ýõì¯gMV Ë„eÂ2xÑ*ZE«[›­ÍÖ´‡µ‡µ‡£gFÏŒž4k5k5kÖÂZX Ðq¼ãxÇqÀò–å-Ë[ÀÝ™wgÞ UUUwww€¸F\#®TmTÕFœ‰3q&Üþ%æ—˜_bHªX'Ö‰uÁCÄñAÉTW©«ÔU(|Aÿ‚þ=)q¿7O/ÓËô20Tw1ŽGŒ£q4î È壗^> D–G–G–šéšéšé gá, ­´•¶‚¹§‹l-¶[ º¨Žê¨Ž£²dÉ>âtùtùtù°s7¿¸ùÅÍ/ûw°RVÊJ¾ˆ/⋀ĆĆÄ`^ǼŽyÀúSëO­?™d&™ ôTöTö<© :|;|;|¡²¡²¡2 –‹åb¹§2¹œ-gË `pt§v§v§æó€yÿ+ë’uɺø#ÖaÖå•r‰\"—ø÷ÿ®¹þåú—]:]°.X,êV›Ô&µ £Ú«Ú«Ú«ðîÔwê;õ@tZtZtðó—?ùó—îâ.î>Û|¶ù<µmÝxãÆ7Þü÷úïõß ¨”*¥J 031@·Óít;œ|:ŸÎ§Cñ­ù[ó·f!–ð„'<½FHI8e¥Ú+Ú+Ú+è%z‰¾¼xãðÆá¢îêEÕ‹ª¹v»ãy§¼—ò^Ê{pv+»•ÝJ ×/×/×0´Z ­Àâÿ¸øGÀ/Þ/Þ/àò ù…€iÀ4`BzBzBzžÊd ca`îÎ%522ìýýýôšä¨ä¨äèÏ'û&û&ûöL’ƒ¿üõ௮ã:®û‹ïˆïˆïü ¿4~iüÒ¬ŒÄœÄœÄ–¸"nEÜŠ8re$r$r$¬÷Tï©ÞS 3üføÍðüÚýÚýÚ$! I?Èòƒ@[{[{[;0«fVͬ@U¬*V?æµßÜwsßÍ}ØP^\^\^Œoå½ò^yïÃ¥LÄDLµs0s:Þé§è§è§ˆšI)#e^ (n&‹Ï‹Ï‹ÏoŽéU÷ª{Õ¬Ù'Õ'Õ'•Œôôôc¶¶Z[­­†Ø;É;É; À+x¯ˆB¢:‡Î¡s­N«Óêi¨4T  Ñ FÇÔcê15¼ÎÏÏùk® W†+ƒ¦ˆl"›È¶ïÐCý7Å(D! 9wSsE?:7rÿCŽ‘c䨕lš@hÂÞÄ›x“~jL3¦Óø,k²5Ùš ÙIv’*…J¡@Ð``€v´£…AaÀÀ8=Rº˜u1ëb–k÷ÈÞ‘½#{¹bi°4X\QRRRøÉwÈCòÈ?a‚ &~‰§û*ч>ôñíØ…]ØE á5á5á5GÖȶʶʶVŒÌ™=2›³V¯©^S½æ‰vÉ=r܃X`à€áGøãÝ€‘ RA* m27™›Ì,ñú÷׿¿þ½èˆÒGé£ôé8Q>Q>Qþî‡íyíyíy3333cª;Îi¨Ý}­¼/Á S[ký­õ7`b×Ä®‰]ï~¨T+ÕJuOå-ã-ã-£èHíúÚõµëY"É&Ù$R¡L(ÊÀ ‡r€=`ØàÑ× ÇyÈÒσ?þ<ØbY`Y`Y º-›+›+›{dá£fÏ5¡D(J¸bwewz*VPPPPP€ÑÇ/÷Çrkw·[»Åní~MõTOõ{ È@2è§ÆIã¤q’ϲž´ž´ž„‚RJ)ÅO&êõŽz‡`ï/é/é/Ý–h¿èp8|r{Ùíe·—n@{Âèá{ú„ø4°g‚ÂíàßníÖ„_¿~áÈY¦,S–YQ0â;â;âËY«r«r«r]»ÝûâÔ6M›¦Mƒ467676“tE§¢SÑ :A'èvüÀ½Ê½Ê½êˆ ŠŠЦÃîx+=ñ÷\"ü%$$$$$€wÛ˜„I˜„l·„YÂ,aøÒõœë9×sÿá¥AÒ iÐÚOï.¹»äîÍk‡µÃÚÁ>n=Ýzºõ´kÑøäøäø¤h—x±x±xñßüÙIv’üê"¤B*êÆ0†1,<ë©€;QüïyþÄþ@»ù¨E-j]yÌÀ Ì`¢çéyzþû ‡©S¦ aâq‰¸„vˆ2D¢Œ†«ÁçƒÏŸÿk‚Ùd6™Mäÿ„ a;åöktÚÿˆƒâOìwÚuo®neÜʸ•$;^/‹—‹üù-ò^ÊàK̇ù0qÉ $#¤ áB¸ë'¬•ÖJkå<¿Y³g5ºw®ì]Ù»²—ºt-èZÐEV+²ÙŠlØð!>ćPÁlÒ‘ŽtABlŽ`G°#«»ZºZºZ˜ëZäµÈk‘âαUc«ÆV½ñ©*D¢ ù“—;ÃáÎH*d™,“en"  /‘}Oö=Ù÷@ ZÐìÍ×òµ|m˧ÝiwÚ祄®]ºBXšúNê;©ïðU¾_‹¯¡˜Ù˜ A‡Ä!ðÈE.r"&0 /à¼Ðt#ÝVXaoö6{›½1PSRSRS"lhhhæ¿•+åJ¹òÇ k…µÂÚåiXŽåX>SÏ×K±V¬káC+h­ð*^Å«’‘Œd €n¸ðàÁ(F1Š1FŒcšFÓh,¸‡{¸ŸÆÆFauß»}ïö½Ë׫/¨/¨/|ÙÁ?âñþ'ŽäóŒyFý"g»³ÝÙþÏvŸIŸIŸI¶åþ–û[î“vßrßrßrP¦c:¦ƒi"M¤ OMŒ£ÅhÀÙälr6\ ÃŬ›u³n(@Àïá÷ð{ª¡ªX‹bQé&ݤsº9Ýœñ˜ö˜ö˜–Å[¼-Þob’ÇËãåñ)ñ<‹d‘,2w½KíR»Ô€îcÝǺ±Ò÷Šïß+‹mb›Øm¢M´ `+Ø ¶ ͤ™4ÍÍÍÀµO®}r퀬 +È €T RØïÚïÚïé}é}é}ÀsKž[òÜ ( $ÿ>RBlºWt¯è^ÁÊšj>ªùË‚eÁ¹ë©&„ a‹·hjj¢àùÄçŸO$¥RÂä´…¶Ð8àð~ÀÓêêêfÏ*žU ¤ïHß‘¾ØX²±dc °arÃä†I è« ¯‚¾š^GäDNäÀSÿR¯À%\Â%j¨¡ð¾ÀÓ€¶“¶“¶“ÀhÃhÃhÐSÖSÖS”ZJ-¥àpÇáŽÃÀ‰Õ'VŸX 868686ü›¿÷ðÞ ƒ 2èDçt|ú&}“¾ àŽá‰¤œ–ÓrZvÎ’`I°$à®°KØ%ìGHi{ <ó1”Ïçóù| *,*,* HQ§¨SÔ@μœy9ó€·—¿½üíå@¯¯¯?ÐZÝZÝZ=½žb§Ø)cÃ@úI?é“^sÖk‡µwi( ¥¡ìÉÕæjsµÎQ»¿ÝßîÏŸ|màµ×Hvœ%ÎgM´ŠVÑ %”P@T€û®û®û.€‡xˆ‡—À%p k` ¬ z¢'zàdòÉä“ÉÓÏ3‘‰L,•¥²ÔézK®“ëä:lkÖ ¬ªL(Êl•'É“äI®|ŠT¤"5§Œ7ðÞ@²¯ú]õ»êç5ǘcÌ1PQ5US5,bX LgdÒA öööƒmƒmƒmÓ€Ö>kŸµxñ âA0;mvÚì´Ëh9+gå1#1Â!l6 › ºlºlºl—1þNÜÄMÜ'ä4ðFàÀ÷Êur\W9<¶hlÑØ"n fWÍ®š]î’_r†œ!gà𠱇ØCì€ÖWë«õÊle¶2På_å_廋ÝÅn@^'¯“׋˗/.Ÿ• =ƒrÈ¡¨Ý_»¿v¿h>=|zø4ýVþ™ü3ùg?¤¹†\C®¡.²ï§}?íû @ÚÐö_E²QÙ¨lô¦òqÝãºÇuó2“”IÊ$%{Y_­¯ÖW“nÑ-ºE0Žr”£ ö1û˜} hý¦õ›Öo€Á®Á®Á.`Îí9·çÜÇ.Ž] øîöÝí»ËÅr± é4¦Ãv;ûvöíll¬,¬,¬,ÄeåÊ•?>YÅ8Æ1.nãÔÙè~›Óyë¼uÞ\ûT~´~Jƒ·õ²‹²‹²‹é ƒ«W ®bí—.\&–À”À”À<+vŠb'dòsòsòs@hFhFh———<›ölÚ³i€õ¢^`•¬’UtÝF·Á29crÆä ̨ª¯ª¯ª¾ugº3Ý™t5g嬜uO9tÐA÷UÑÔÍÆKmž;~ªoäsI!)$…7²¨Žê¨ngí”úiq¬NV'¶š fƒÙ¥±46É&Ù$Àžaϰg–ÂRX ÀÖ±ulÀ"X‹ÈçäsòùSéøÔ¿_ÿ~ýûî»'vOìæ‹áŠpEøéüˆ‚ˆ‚ˆ‚O¯#9È!gÐ~ô Iž~T! aH¸ƒíØŽí¤6úBô…è G×ymñÚâµåtþ„fB3¡áÍ5ÚmvZ»Rçðôä¹D.MR3Ãð3~ÆÏP´šZM­&örÛ•¶+mW¸£êu€:`ø‰³ÒYé¬üààœ;9wrfb&fÂL)Î)¨MÏŠ3Äâ ̼uïÖ½[÷çvçvçöª5jZ3x¶·®·®·Ž;jÜ`Ü`ÜÀ^&Y$‹dA!Vˆb¼á o€=bØ#€¸ˆ‹¸``z`z`Â鯅 b¦zD=¢Ä1ALøà =BÐ#ÃOh-£e\‘Tôž €x¡ôK¢¦ÒqGшF4ºw¥d)Yúòº©_Žë][][][ÅmoˆoˆoˆtÙ‚# Ž,8‚µbØ#ö@EçÓùt>B¶-dCQ^^îŽY2²dd ×çµÐk¡×£š:4;¿KÅR±”/’vö]ÏŽåçççççÃâÉ(¤O5$iw‡¤Ý"I»—þC»®:WKØj>n>n>¥”RŠGžL\µ_µ_µ‹¶áÒáÒáR®Ïk¯×^¯½wê¿8~qü²÷Ó¾ä¾ä¾d@ •Ö©<€¾§ ¿ö| ’|-i÷âhW;¡ÐòæjCµ¡ÚàÞD 3»üºüºüPÞÒÞÒÞÒN6©zT=ª@ CÅÐm7ù×ù×ù×í/†Å‡Å‡ÅÓq)Þ_¤Ñþ[.¿c‰‰‰‰‰‰¤i“39““¿DDDáî9î9î9ÿaŠ0EØÿšôkÒ¯I~ÌÝæns7ûäÖ©[§nr¿ôØõØõØÅm—-“-“-ÛÌŽ³ãìøÿÖOõ£ÜÆ1Žq1ȳR¢„ßòüýŽvó`„Fw«eµ¬6±Ÿž§çéù¦°'kž¬y²FŒ’•ÊJe¥´›Ëä2¹ÌkÍáçÃχŸÿs¢©ßÔoê'WDÑ_ôg'$¿u í÷8(þÀ~£]©\¸s…,dñß“Íd3ÙüáÌȌ̸']9W9W9—vsCÜ7ôË\ñxH<´õ^OZOZO0ˆ0ÉŸ§±´ÿÇÿr¥ÅƳï0$IEND®B`‚routino-3.2/web/www/routino/icons/marker-75-grey.png 644 233 144 6275 13061246466 15646 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü rIDATXÃ…—{PS×ÚÆŸµ²s—h”ZAnÒ 2Žø‰Båx9¨ÔK+JëxF(µèWGøœCkµjÅâ½ 8öT¼¡(Ј´\<•~|:£vä¤r P”RBJIvÖúþ ÑNÏtúþ³gïµö³~yדw½›ääääääÀca»ÐXá±ðXxÌkrÎæœÍ9Ë}sŸå>Ë}ö×p×÷D?ÑOôÓ¥ÙªlU¶*¾%(A ÉF(B   mh†4¤ñýò$y’<‰d O…§ÂÓû%d ’ÁïôÙé³Ó§îaÞú¼õyëIŸ ˆdÉûÞÅåI_Æ 1ô<Ëe¹,—}o·Ø-vˤY¹ú\}®þ|·½ÏÞg﫽399©ûõQõQõQTët º’%’FIYÞ³¼gyî{÷¸{¾û}·Þ }×zîõÝÁ•Á¹\Ã5\ÃRÈF²‘l 8* HN[ÎYÎYÎMóžP;¡vB­33¡-¡-¡:´­Ak ‰òly¶<#øá#¨0‚ŒØ€ Ø`2&c2Flþ6›? †FC#wÔ‡Ö‡Ö‡²Ì… ®û\  PÌQ87:7:7.8ÊSy*O}œB@@@ç’OF?ýd@#Ñèï!T UBUã%»Õnµ[§ý-p~àüÀùbÌêÍ«7¯Þ,œ÷4{š=ÍÄDLÄDˆ<˜ó`hG;ÚŒÃ8Œ0Œa ABÒA:HDüŒŸñ3“Ƥ1ið¨üDù‰òbÊ£[n=º%Ü–)eJ™²ë†˜$&‰Ió’1ó0¯çWÉâ%‹—,^‰d"™xüöÈž‘=#{âæm Ú´ELL]“º&upSn’›ä&Hœj§Ú©†Ó1ÓAI-©%µ7r#7ô}FŸd6™Mf¼òB€Oâ“ø$P§ÝiwÚ¥‡ÒCé‰.K—¥Ë¢›»xïâbbßɾ“}'½w)ÒiŠ´W–ÈËË_+"¹5¹5¹5KfÙïÚïÚïÞ¸«±h, J˜þ0ý!¹ëYáYáYÊÍÜÌÍÐ Ñ €‚Âíô߯}ÜÇ}:è ûÏù.=¸ô̦¦¦`§ÂO…Ÿ çQfµYmV£,J%‹ú[”ÀCy(ݵҡv¨j ~eüÊø•Hðì÷ì÷ì‡Ìát8N¨:*;*;*g†3Ù …(H'é$ ca, ¸p=à:@Ói:MŒKKKz–ž¥g~‰_â—Á*X+œœœ +!#ñ¯Ä¿ÿ ʯ•_+¿Hý¥þRÿ]+1H ƒþ’îuÅëŠ×ì×öh{´=¤È•ѹǹǹ¨/m(m(mà¼äBÉ…’ œÛ¿¶mÿšsK“¥ÉÒÄ9¿Çßã|lG9g‡Ø!vèåún7Ÿ€½Ø‹½$”–Ñ2ZöÂar|/ð€^ô¢ˆ@JRI*_niç΀4]š.M÷Ò¢LÉ”L ´înÝݺØ7mß´}Ói´NZ,ïZÞµ¼ Ðúiý´~_ÌóÅÉ$™$rú}‡¾àNá ¥?‰ŸÄ_6G›£ÍÑè³Ä,1 RGêH8²…,€‘¢†ðíáo{˜ùñÌg~ L8=áô„Óò‘|€ÇòX DžŠ<y HMM^}ÿÕ÷_}8—x.ñ\"0`0 ú ý†~î’—X~°ü`ù4Ò@~™*>S|¦øL,èôéôéôá—›‹›‹›‹ÌÀ Ì€Õ9ìv0ÀÐæÓæÓæô—ö—ö—1Óc¦ÇLÿM&÷²½l/°"|EøŠp ¹%¹%¹­­­Þö{Ûïm?@( ”Ý»v|ñºÕ½SÆ^c¯±ŠNE§X@±«±zg‰#ä9$»Î»Î»ÎÛhšiši𠕤HR$)‚Ù­t¯ô^é½RÀ»ÿvÿí€gggÁKP›Þ¦·éã=Ç{Ž÷·×Þ^{{íËñæÂæÂæB€ßáwø`J×”®)]°¹†U×Ë®—]/c1ÄHŒÄˆBâ$Nâ<-£¾7}oúÞÜ·C/‹—ÅŸë˜50k`–äQùpùpù°s›K@ãx×ñ®ã]ØÚ Û Û ŸB~ ùé7™Ld‰,PÎUÎUÎbòbòbòýYýYýY`×»~Üõ#P5§jNÕ V+‰•€û|çóÏw_U_U_U³‘'OŸ4Ò۲òòÃÿNvt;ºÝ™Iä½È{‘÷ÖÄšXÓ@…ÂGá³êßO/?½üô²÷GÌʬÌÊß9r"äIÕÑÑQ,R,R,H)#eL0ÁlذЦhS´)ÀäèÉÑ“£± bÄ‘‡#G†µ9¡9¡9+ª Õ†jù»ÊKå¥ò]ȧò©|êÂe4ƒfÐŒ§q-¡%´Drµ¨Emo‹a1,fãI•L%SÉp ·p üõ)k§¬²–\Ô5éštMHâkø¾*ppp•¨D%€.t¡ ÀLÁÀ·×·×·ð ÷ ÷ ðñfs…¹Â\Mõ§ÕŸV*ʆeòací߆¥XŠ¥-ïó^À ×áçŒë…]ä(9JŽÞÌ sé\:7³ âC|Hë›õÍúfqÓàºÁuƒë reÐìêŽ^Æ4LÃ4-hA ÀñCüÀ¼™7ó~áEÍ‹7.Þ¸èÜ6X>X>X.“ûÈ}ä>óB† 9øyvb'v’Kè@:Ä’¸¸¸¸¸8¨1„! 1/¢#:¢#û^?óú™×Ïüß›¦e¦e¦eaԼʼʼ*âÆó°çaÏÜÛtѺh]4}“«¸Š«`#J¢$Jð€<~ÓEÍÇ|̧]´‹vAh26›Œüú3õgêÏÐ =£Ž8>H^ÖŸÒŸÒŸbÇÊ#Isý°íîvbÄu-cãØ86ãµ—ÚKíõ¸¬MߦoÓK jÞªy«æ-þÉ $rVÊJY)8”PB ð!>ć"‘ˆ°öûýF\¬¨¨ÀxuŸºOݰhÍ¢·ï£ù4Ÿæ÷Œº¬xl ‡/q@Ľc®O¹»Ê¸ênÁ˜wÛH ‰!1o¼9öÉÑPáØäØäØÄ¶¬cëØ:FcµùÚ|m>’X+ke­PÑ0FÃ`³Ål1ò“Á'ƒO;Cúf÷Íî›-iWD("s¸„K¸$ó6+bE¬H8†nt£[üo·Eòòòòòò`~Ñ ¹¼ðË»Û\Þ=æòn%§ñ4>³ ©HE*=®wèz‡¸ÉTl*6CE)¥”bȉ:kµÎÊFzŠzŠzŠ$íŠŠŠ«m½¶^[ïŽÏÛµ/j_¸ÝõÔ èæûNòwT.ÿÅVlÅVR~-üZøµ‚7éŠtEúżA¿A¿A?Át%çJΕç6WG?Þàmð6xãŸwï6Þ%)ªVU«ª`,nù^X+¬ÖZÿ+(*(*(ŠþâZo©û„ú=—®?™èº5p—qù oFߌ¾øÒ9Õ9Õ9õŽ(’ɃV¾àù‚ç ¼¯™ZL-¦~èÁW¾zð•sî°cØ1ìl•ÆJc¥±Yþ¼˜óâ ÕC¹ä~Á/ø…¹ë†Ü•(ñ÷<àÝ\Ô 5μŠWñª¸z•^¥Wÿ4º|tùèr6CZ$-’ÑIª$U’Z+øjðÕà«3v;Œä6‰Mb“øi—®Þ8òG¿óîx—ww"Èî“õd=Yÿ]0¯á5¼æ”¯)_S¾F[$Ý’nIwïkì;ÀlzҚܚܚ Œ"È¥çn,­ÆñÿÁt²·¹IIEND®B`‚routino-3.2/web/www/routino/icons/limit-23.0.png 644 233 144 3114 13061246473 14651 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–íO”gÆÃÔa˜,ÛM¬AQ¬`¢€)qª øÖ*ÕŠMÝl‚­`vÑl‘U·ÉúD ÙˆYmˆÄMÅ€´Ð¤º¥Ò AZÂ(•…:hfgæ¹ûaæñaûxyr—ë:ÉyιoYþ ˜–™–™bCØô±az7êÝU—Bøl"öDìùñïw:î4Àë_¼þ…6d`ݯÇ/Ì1øêévY,†ÁÒdiŠÈ ãP”Z”õû®ºÖk‹7Z´4747ðWxØý°àIî“\0°î×ãõ|o!¿œø¾¼ÖþZ{Ä(XY‰@âöÄíI‡B#IPW09©Lü°cW¹€úy¼ëþp¼ž¯óéüºž®ªGàœ7rD`÷»?°^% 5BEBE‚®ço*©ÄOÀÜÜÇ<¨êD€u¿¯çë|:¿®§ë‡ê1Zé©ÞÎaç0hþ®À}¢?´Ù€%`Á®TiOµim÷®€ ´~­_ëÇ83L1õ)å¼x`Ìo÷ÛA ñƒÓãô3º¾ÞÊïDDÖü¬«ÇcV/†»†»€ìåP|œã@UGÕQ`†fRC 5@ 1Ä,°o`€ä ÞSïác{˜ÿa½°>?†êŠˆœí$®¤¸¤XgÓÖZn¹}jþQóYÍg¨ÿ |;ð­¡w×{×{× Õç«ÏWŸ‡>WŸ«Ïeøµ:­N«3ððàðàð ÔšO{O{Q£s®&W“¡§ž–l,Ù¨·öl§ûDDúŽÀW‡¿: ·Ê\—Cí·ÏYk­µÌoùxˇ[>„”Í)›S6ÕÖ+­WZ!¡4¡4¡œœœ`©Zª–*è~Ðý ûQÐÔØÔØÔ¬oYß²¾Ò¾OkOk‡Ï[µoÕ2ÿ¤@퇦kM×@Õc’[½­>#[d[ñ¶b‘±¬¡O†>‰¸ð·³ååbéøWÇ¥ŽK"¶d[²-Y¤wuïêÞÕ"U™U™U™"E½E½E½"Kê—Ô/©y^ò¼äy‰¼<í{Û÷¶ï±Ü´Ü´ÜÈÈȉ‹Œ‹K›ë˲/Ë".ˆÜ+¸'¢nF«h•‘mŠ\±èð¢Ã¬¥ÄwÜw\ÄùçüÂüBqïlÙ9°s@$mEÚŠ´"©)©)©)"§êNÕªÉ7ç›óÍ"—+.W\®yÜó¸çqHL|L|L¼QX°,X,±÷Ú{í½†=v,Ökyö‹¯ÀW nK–%KD:#G.f­hUö<{žj‚_?ýõS¸sð§òŸÊÁÚUU•¾Jo¥×hMÃÕ†« W!£1£1£Ñ°gš2M™&87xnðÜ ¨Y5«f¡-¡-¡-Ö¥¯K_—ãÙão¿ IW6¯l†ÿš»c»cæ–Í-m¹í¾í¾j2©“Þo¼ßÜéù¡ó‡N‘®?õ¯ì_ÉGAñøGäEëåÖ†Ö‘xG¼#Þ!"«d•¬IT‰*Q‰Dû£ýÑ~‘ôëé×Ó¯‹ìšÜ5¹kR$ëLÖ™¬3"›œ›œ›œ"Ù¾l_¶Od͆5k׬ùãïvÏìž‘9Ǭc–DÚÆÚÆDL…¾$_Ò¡*<•,?XÏšBS2½sòÉw`¢kbtb5¹rßä>˜?9rþ$oooÁtátát!h6ͦÙ@Í©95îCîCîC v¨j¨=*_åƒ{È=áž@iSþd2 é,-/-ž‡§24žÆ}¯„÷Ì3õ¦zßK‹3fPÇÔ1uÌh¥Úª¶ª­Àr–³|Áû ¥”‚æQ±*@E«h|ª8Ì_>üóðÏV·Õí13ªï±ÿ»Õ«·Qá<à<ª1´™UOдƒúwàià)~¸ÍmçùœÏAµ©¯Õ×ÀE.rx†¨jD¡ÿSqM‹Ò¢ð«¾€7àÚôÍ_h.4/~»ù_Ý»ò•}]¼²ï±Wóû? É#bsµIEND®B`‚routino-3.2/web/www/routino/icons/limit-26.5.png 644 233 144 3105 13061246473 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜúIDATHÇÍ–íOTWÇ …á©<4]¤¶à ‹‰µU4DÆlY@RZ ÓbXH b)VB€}AhÝú¢‰]1Æ…`Ô8©)ÅÍ@…a«ÛØ(…Ÿ@wW N œ‚`fæÎœÏ¾˜¹;lûxßÜüž¾ßoî¹ç{Ž€ˆˆÄú߆W ¯¢}±a ––»á_|ÊA{ƒöþûSˆiiˆ³ÄY¼ãX¯ëý«çEø«ùô¼ÄJ a´­A™þø¼¿ùýÍa/ûâc× übøÅe ªz«z¾ýêÛ¯8³Ã³ÃO2ŸdB Öëz¿>¯ã­Æ—#¿âïB¾ šc¨1T^Íy5'å¯Ážùïæ¿ ð(øQ°2€gˆ"JeK,¡?WÅzÝ߯Ïëx:¾Î§óûôÄ¿ÿ¶””„Ÿó Œ II:Ÿû"ð_Ú’¶à)õ”âuM] ˆ Äz]ï×çu<_çÓù}zK¹""Ò’ EEའàÒ&ݯ¹_ï¼7¸ýJ•*Ufeí–vS» ^¯×ëõòÛçNœ(ÏaW««·'Õ]ã®OŸ–¢÷ŠÞÓ¶d–²_Däõ“¾¾´ô‚rM M GÈ•®ÒY¡—K\µ^­WëDI\% ‡z€jª©^•¿Á nóÌ3 6ª¬ t|?ŸŸß'ìõ“¬ˆÈ©AbT¨ÐѼoþË8Ú0Ú'ŽŸ8vâênùÝÒ»¥>»ØÅ.Ðbk±µØ`Ô>¨I¯IuÕ§G<·EDn7€­ÖV 7>ùqç;UeÔÓð¶ð6œYqYÆ,#l¨ÛP·¡89çrÎ圃\k®5× &‡ÉarÀdídídm@Ø\Ø\Ø\¬ÝºvëÚ­P0Z0T0¥gKv•ìÂùs««ÒU©*¡ËÝåUáÓ#ž‘g"Ï(+¬Œ­ŒA÷ù¾®¾.øô/Í{›÷2œÎ 'ìŽÞ½;RM©¦Tì+ßW¾¯šT“jR°¨-j‹Z`Îf´mFˆhŠhŠh‚‚?ddÂß*.l¼°1Ч®L?™~LDŸŽ>­¬‚;.,.Ì{OU-ä-ä¶ýpúPÊP ¤6§6§6C½¹Þ\o†ó–ó–óØÔ±©cSœÍ?›6Ö ¯^7 W:®t\é^¼:xu*3+3+3ÁÒeé²tÁšö„Ï>‡”õßì¿Écp§¹ÓÀ3öâO/þä½gP'µ,-+è^ЙÐ7Bß¹óñxÃxƒÄgÿ)»0»P¤ìQÙTÙ”Èqëqëq«HÄ\Ä\ÄœH¤ŠT‘Jd¿m¿m¿M$¡=¡=¡]ä¡ù¡ù¡Y„Ãæ°È”aÊ0eIII©(®(®(IRIö$»ÈãG—£KâEÔµFDj¼IÞ¤ {utùÒò¥±ë"#ƒ#ƒ"C¼“|'™=â¶»íâêï½Ý{[$&>&>&^$Äâ qФ¥¥‰„ö…ö…ö‰lwlwlwˆì1í1í1‰˜ÊMå¦r‘äÉ’ˆtÖwÖwÖ‹ÄîŽ5ÅšD~ÿ»]Ow=WéÇ|ùÁ—|(Ò³³g§HpÄ3ã3ãØuá˜WR]_]Ϭ¾]2ÿÎLÆLLMONO¢fgÍçççPGÕQuFFFÁkñZ¼P÷Õ}u[[[€N:é×e×e×eX0Ì/Ï/£Ôí%í¥€ 0ýÑ[½¥ûÙ©AÑ}#à#º¯ø}Æ¥’T+ÿË”QF¨H©"Wý¼‰*Q%󯮦Uù?«ÏÔg N+›²¨Íj3+ê¯~üw&ìv€ð_ÂYzÿè>ö§zK6EUEU ¾ö9³ºî‰òDº -j‹¸±p‹[(øžïA ¨~ÕtÓM7°Â2Ë *»²NŸ>=?x~À­þ©Íj³ÀßýÎOqpq0àúµó?¿gås{»xnïcÏç ö¿X,(ÿ+‘™IEND®B`‚routino-3.2/web/www/routino/icons/limit-6.4.png 644 233 144 2461 13061246471 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜæIDATHÇÍ–_HTYǶ5M–[`†‘"ú´ AÔƒÆÈdf¥¨0­¶}²—`«-èaY{X#ÒAM ³({ˆ´Ø!è´”Á˜ådb騨º3“ν÷|öaæx¯ýy÷¼\~ÿ¾ßï=~çB±$ñ¼2yerjÜN®2ý)îwö_qû¢IIÏ…Åõ‹ëÒ¼i^ã¥i«¸Ê·Ö aâ[ù”_,¦ÃvÍv-©8aŸ…=kö¬IY·ÿ¸öN{gXƒÃ7߸Þr½…ŸaÄ7⇊Á´U\å«z…gÅg¿àæwÍïJÛÛ! «$«dõ/ñ„W«¡l[Ù6€wóÞ͓ɠ²˜d5‚[Åùª^á)|ŧøãz,+ZV$l¯Ü^io޼l…™'2_¬8Ïy Mj“ú~}?S ïËû$‘¦­â*_Õ+<…¯ø\˜½¶u.ØeÛeþˆý :: i>ÍGL{ªEµ(Ò0Œ)c sD‰>1Á„é–y²BV Ÿbõ±zb`¤)À ?Á7Ã/¬‚òþûˆ}dò>ûÃþð îVrôsú9"rœtÒ-BnpƒÀ1ŽqŒ¯GyäüG>’,þ°±ÃØAd¿î×a†?¡'!ìâ¨9UsJUkek¬1Öhþø@ùÀ–-Pw§îNÝèÝÝ»»w·efB2$C d,0ýý5ý5ý5Гѳ´g©™.ƒ±×±×ÀtœÏäëI{Z W>]ùr @JL…Ö†rC¹°±{c÷Æn(}Sú¦ô lú¸éã¦h´Ú-ÝÒ-Ý ]Ò%]S•S•S®W‡«ÃÌ3~œîšîbŠAÅçWz¤v§vËk0R8RúþÙ+ÒÖÐVßVÎ\g®3<©žTO*œ”'åI aañõJÖzk½µ^È<žy<ó8ìݰwÃÞ f\/×–kË­q~¥G@Ú¢´EF‡ƒÃ »fŽ=­›[7·n†|#ßÈ7àràràrVøVøVøànänänÄ„o>Ó|¦ù ¤HÿþâÙíg·ŸÝb¨a¨a¨AˆÍ/š^4‰™ÁÅ—àWz¾ÜcüžXóÏú%ý3 a_õ¾ê}Õ`·ÙmvT»«ÝÕn---€uýëú×õÃè‘Ñ#£GÌñ6y›¼MPÖRÖRÖbYÊÓÎi§Âÿæûö©Ä¯=Ñž˜3®Gô‚`~0?˜†×ð^åcùÆ;Ç;Ç;A÷èÝr§Ü)wBtUtUtL LôMô½Œ1†D×&´ ˆßß=•–>6íú£–>æÑïé÷ˆÈ…r½\oÙ2CfEQdÙÓ‰+iœqÆ0!B€LÄcF¥Q9«i~í»}lVçOÙ•èèüÏõç@»±ÐXHL>ADÒAm@„0aÃrXCX„þÆU®"Y¢×êµÄ@¥¿4…ÿÝÎ?gïÊ9ûº˜³ï±¹ù‚ýÁpõ½°IEND®B`‚routino-3.2/web/www/routino/icons/limit-34.4.png 644 233 144 2760 13061246474 14666 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü¥IDATHÇÍ–ïOTgÇÏŒ0HÆ‚® ªü¨‹-aÓ4Å€ %ÅVÅ¡P7mÓJ‰YÞ´$ÚT ®ML+±Ú44»@jtÓ–Ú±uM#©‰`ÅB·Š ¬«éÒÖQÀ…a†áÞç³/fî¤ýþ¼í$8"°®|]yæ_"€g¶­Û¶Œ/_¦ì`ÜV°B•~üh›ˆñu>Š×õºŸî¯ù4d”’”ØñÒŽ—»"7OÁ[®·\š/ìÞã=VÀ¢Ñ`Ôõ„@õ«~lØÀòu^ãu½î§ûk>Í™ÇÚÊ9‘£nðŒzFÁœ_Y¼^^æá_¿ŽNªôÈêjƒÚfY``Ù,SL3o¾b¾BXåMF˜™‘þP-ÕÜÓüz+o‹ˆä‡D¢ßGëè•Ñ+À%*A«bæ8Âû¼”QF°“ìuM]S×b  Ì3Ï|L<‡r@ýËæ¢ÑJ£½£½°ÄOdᮈHÇe’ö¼¼çeÝÅÜt³üÇo~üŽþíè'G?A ™Cá¡0¿³±]c»ÆvA_z_z_zL‰'¨BU¨ cðc‡Æ¡ú\“/&[|*¼gßž}Ù¹ŽËbzED†Þo«·n¥LO«Wÿð×äìälB5©5Î'¤×¦×¦×ÂÕ…« W,¢ _†/Ãî3î3î3VÜØkì5ö¸ÀPnåVnÈ~-».»ÜŸ•>Wú¡èxÕüÓéìÓÙÀHd»í³GRI-()ù¸äcÃ5S;Skë:$‡7Þ µóµR+"kú×ô¯é1úŒ>£O¤­¦­¦­F$4 ЬîXݱºC–L]W×Õu© ©i©k©k© -­ ­Y}"åÛ”o%!‚¶uñäææÍÍ"òDÒ¥¤KEÂÄÊ…• æN´L´X×~6èÿÉÿl?¶ýØöc{0÷`îAhÎmÎmÎ…Ì™2@ýÚúµõk!«=«=«nÝ*ºUd­\÷@÷@÷¤ùÒ|i>ØÝ´»iwdµgîËÜwžþùóŸ?g¦_˜~TcrKr‹9"ƳN‡Ó¡z T*ÓU=õ=õPðçMozÜ"(Î(Î(΀²`Y°, ÇŽ7‡û7î߸âñøxó½ùÞ|˜‹›‹›‹ƒÎ“';OBåÙʳ•g!Ï•÷hÞ£Ÿ±Ì·Ìÿìé=ß{`æ©™§ÀLuŽ8GT¨N}ƾ˜übf.Fö¼ôÃÍ…› %mO*O*‡† 7nÀ¬kÖ5ë²îîîÏÏÏ+ž¿%Kþ¸ï¸ï¸ïˆYÁÎîÝ'`Ûß·o-¶Î˜ÑuªýT»Öµ¡7£:Öq™ÁÆ”Æë–,Í?˜÷¾»÷å½/QÆ 1h ‚Scj Ìsæ9ó×××ôgÚ3íeWve‡ÉáÉáÉa0ªŒ*£ ”G=¯ž‡àúà3ÁgPÿûÏÄðÄ00áÃh|»ñmÀ½•\þŽÅGtLí_Ò±Õ‹Ì)·Ú¡v.\Ĭ“L2 ( &VVB„Åà*M¥1•èJÂQÝÔüJë˜VþVÞê¸ê8àpD™UïâÔâÐiÜ5îþ^ùiå]ÞÒH# 010@«Ûê6ðß%åÃ|ƒ0­Æ÷Æ÷€sIùÕ°ø—~âí¿ò¡}]<´ï±‡óû%&ß”F*IEND®B`‚routino-3.2/web/www/routino/icons/marker-57-grey.png 644 233 144 6254 13061246466 15643 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü aIDATXÕ—{PS×öÇ¿{Ÿ“ÓRVø†*E¸ÅVËÃÛút¬µ´t|ŒXÄG‡ŠW¥£BmÅþü‰#­ýñ°½Zàr} ¿”(þ¤updÐp©¼Â«%V…HB’“³ï$êt¦Ó¹ëŸ=ûœ}ÖúÌZß³÷Ú$77777*̘qf ‹ùA~dõ¹ßä~“û óË¿—/ÿÞ_#™7ófÞGßüÁ?f«MkÓÚ´¬å(G9ÉA8 =è°[±•ÊVËVËV“~ŒãÇÚËÉ™ ûËò|ó|ó|ïl(ØP°„`!X&Ëg8Ä]\*ú0ñˆ§Ub¾˜/æ‹?ÚÍv³Ý<{a~m~m~mÕ°Ý`7Ø 7-Ñ–hKtÌß'''q%fiÌÒ˜¥$'V+‰• Õ Õ Õ€{î~ï^ïþÞíï±WÉsÁ\ð§Í•æJså\õ³ Ï6<ÛàÌ^Ú³´giuDuFuFu’•²YŽ,|„ðćø|Þj9l9l9œ°D³K³K³KX™þvúÛéoóÍ2£Ì(3‚s*œ §2%Õ¤šTˆA bRLŠI1€.t¡ €:èVÀ X¨Óét:€Ç,Y³ÀÅì‰Ù³‡îbClˆ + § § §Ô‡ä[å[å[Ÿ[.” Ê/•üúüúüúå ímö6{ÛÕ6å¤rR9É4ccc¤MuFuFutFP1l°Aþs‹F4¢ÜÁÜÉoŒ7ÆC,]Vº¬t‹5IMR“”襱ÒXiìŠXž…³p~h­CáP8@âlj'~Œ¥ªïTß©¾ƒÔåÖsòÎäÉ;À iÐ4h¨@*ìCö!ûÜ–Ü–Ü4Áš`M0 ·è-z à8á8á8ä¹^ÒKzö{‰½lذJu«ºUÝ KBiBiB)–ÖDÖDÖD’@I $ðÐZ^ÐAó— ï Þ¼/ ðÅ„^L %HCÒ   U¨îzÞõ¼ë œ÷9ïsÞð^à½À{`‹°EØ"…R¡T(íÝÛ»·wZª¥Z L®›\7¹à{ø¾ Vb%VàaÚô‡iÀ¶ñmãÛÆ5ÔPÒ(u”:JMJš4?h~€Bs¢9Ñœø— ì}´÷ÑÞGbaÕ¢ªEU‹˜ÛÌÂqá¸püñœUŒWŒWŒ3V>Z>Z>ʘý[û·öo3_3_3_cŒå±<–ǘØ.¶‹íŒÙwÛwÛw3f¬‚UxâçüÕóWÏ_eì+¯¯¼¾òzò\\$.ŸŠïæqóñøŸàNÏÑsôÜcÉÀƒÿDRì&»ÉnÝ{º÷tïŽÌ=2÷È\@Ò(i”4)C)C)C@”””?Àé8§$œ„“p€~•~•~Ðÿeÿ—ý_ï¼?ðþÀSþULÅTÀÌv}¾GßPŠR”’pÊùsþœ?;oŠ3Å™âÐ/¼"¼"¼ŽKâ’¸$0·#g‚3Á™DŸŽ>}HNN‚2‚2‚2€Ê5•k*×/?¼üð2@7ÓÍtóïO|âûÀ‚Ê• *õsêçÔÏ,’E²H€ê¨ŽêÇãÌ·Í·Í·ÑOCh aç©ü3ùgòÏ„¢~ß~ß~_v^W¯«×ÕˆB¢`ô‚^Ðkß\ûæÚ7T]ª.U„7…7…7ë×®$J‰R¢†{‡{‡{Ÿvtt÷+îWܯâùx>þéJ-cËØ2£Å(¬)))€~T?ªÅËûåýò~¡ˆbÖa]^9ŸËçò¹$§ñhãÑÆ£ÎS©ÎTO1L Ã`*++Z7·nn}*Seee[Ȳ…€§§ç“÷í;Ûw¶ï÷î ܨöªöªö¬õ±>€n§ÛévØ„4!MHƒg¾N_§㉞è‰ÿKœÄIœ§¥Ô¯Ù¯Ù¯ùÈi¢4QšX92~}üúøunàÜʼnsÎÝRQ*JE(ã§ã§ã§a«Í®Í®Íý|èçC?ÚUÚUÚUÀâù‹ç/žøŸõ?ë‚BP}ú>}Ÿ  |*“,‚E€¹™ö°ö°ö°h©©©¦­ÒÒÒÿJu ;†ÃÙr𗃿üÀ-Ü­€b‰Ab~ô˜º4uiêÒÜô¤¯“¾Núš%­\¸"4ÖÖÖÝc÷Ø=000ønôÝè»ñ ˆ0%L S@çÍΛ7¹—ç^ž{P«ŠUÅ—Y:öwìïØõ•ŕŕŨóòòš~qŒc\ÌzÌÃ<ÌëÚÆ%ÎJœ•8‹k#¤‚TŧôóºŽºŽº!Ó(7Êrx’,’E²`[ÅV±xÜ”¸F×Y/މcâ€8€°¹2©¼’y%óJ¦s÷ľ‰}ûøbY¨,TZ]VVVxüä!yäŸèCú„dw?ªÀ0†1,ÜE²E´‘ÚHm¤¶h|£|£|cuÁDòDòD2o¼Xt±èb‘s·; i'í¤6ô£ý¬°Â ˆH "A`®æEvCCCÏ’n]»uíÖ5®Há«ðUøŽLÛ+í•öʽGîæÝÍ»›0=Ó3=žqÅ9뵸Æs¢—è%záݯº_u¿ö,{–=kï…·Â[á=x®§¶§¶§–+ª«þ­ú·XÙAv‰b…XxÀ`Ø#ö ˆë}ý}ý}=ªæ7Ìo˜g…AaÄ81NŒÛ{„£Ç豑iZNËi9çR1[î>€ˆ[Õ®+‰»r•ˆ+BÐàÜMâI<‰OZ3såøá²#Ó‘éÈw½+¾+¾+ÒÅQÇ¢ŽEÃj±[ì»áIçÑytlBŽ#ä@v*ôTè©Pg˜áeÈ—¹^ù|ù|ùü¢E3?Mv«X"–ˆ%|±«²¸+VPPPPP“;£p=x¬!—vw»´[LN’“ädóÿÑDšH³µHG:Òé絎ZG­CÈ4–ËŒeð¤”RJñȉFk£µÑ*ZFJFJFJ¸^ùùù»Wl£¶QÛèã½oô¾Ñûà qwkn@7ßcÐß»xºüäÒîåÈK‘—"/­‘gÈ3äÕþþþ¼ñBî…Ü ¹ÎÝ®}ñ™Nu§ºS3-m-m-m$ͳ۳۳CÄ1d×ü;ü;ü;ÖW4±šXM,wÅ[å­¿çâð–Á5ídR&eR²Ýaˆ0DàïÎ9Î9Î97™F¦‘iÞüü·äß’KV_2v»Œ]ìtgugug¯N9¦S.K²X²X²xO +ce¬ìWfnnãǸø¼»®D ¿ç!øûíæ£õ¨wæ1-Ó2mB­¡5´æšf:e:e:EŒ”HJ$%´‹KçÒ¹ô¦ë¡5¡5¡5MÐ÷éûô}ä;q¶8[œÍN»üÖº-ÄAñ'ö;íº¶ gv`vðídÙ@6ü(«gõ¬~ÿ&<^ðxvqÃÜ07<ú‚xT<*Íüµ;µ;µ;˜„ÆåÏÝXZÿŒãß+„ù=íº IEND®B`‚routino-3.2/web/www/routino/icons/limit-6.8.png 644 233 144 2540 13061246471 14602 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]HTiÇmsœÚÌ1) £]ÚM¤2£Áõ«Â *¢Z0ñ#YºØ6èf»H¨Xòf ‰,´í‹mìK0 4[‰È¾L±”hÑll0ÓiœsÎûÛ‹™3gjÛûÞ›áyÞçùÿþ3ï9ϼ""2/ü)»8vqìÜP[nåã ã ¿ù3×ë³9fóÓßàëã_HlLl4žY±¹oÖG÷‹XúÑ<3/óÄJØ.Ú.ƸÃñ!Ø–¹-3>9» vÝ3¥AÅåŠË—N_:ÍÏ0Ò5ÒàsûÜ`Åæ¾Yoö›zÑúrè¾̾>ûzÌ0Øâlq"–Ÿ–¿to¨`p)”¬/YðjÖ«Y*ô7€‡r“Lb.oTlî‡ëÍ~SÏÔ7y&?äGÀ¹Ö¹V6mß´Ý~2Ôð¬ö§îO5yAp˜Ã8@›Ô&ôúN n«ÛÄVlî›õf¿©gê›<“ò#Ÿmí°Å¶Å¼þ :: Ê´.­‹ ö@ók~”a#€µÞñ.ÔZÆ?Æ1ÚK}Ž>¥â´=Ú‚ ê£À‡°¾ ó"|‰6ôý`±L~Ň©©ˆþ:¾Õkô¦Õ8)¤Di¡… ”RJ­´ò+¿ò5ÔPU_Km€Sß§ïc:¢ïx?ð"ü°Ÿ°±úN¨:Xu0ò}³Ts°.Xgñžo|^ô¼j[k[k[ááÖ‡[nú…z^£×Š5W$žH<‘xJÇKÇKÇa&gÆ5ãP)*…ŸÆþ÷­d@ëÖº­·HŸÖ}º¼Ë½Ë½ËÁh4FPýª_õÃxÆxÆxÐJ+­¨TªaìõØë±× ¾SKÔKa­Gë‰â}þ­Œšc3þÔûI¿©ßdZ%¨•jeÔ¼Z¤©E@6ÙdGå]Ê¥\ <Ê£šüñ[â=2ùŸêOóF‚‘@Pu*¯ò¢ø‹sœ¦™b ÔKõR½üL3 TQF¨5¦ÆP\6æó ‚þD­æýwò±ÿ•_ìí⋽}™7ØMÄ8 WIEND®B`‚routino-3.2/web/www/routino/icons/limit-124.png 644 233 144 2630 13061246470 14574 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜMIDATHÇÍ–KL”WÇ/3ÌD'PƒFÔÂ$!êBº FˆC4˜à3V#$­ÁÄVâ#q¡,XˆÕ*Ƙª1ŠA%øX5Áµv¡à£êhÇIq DP(:tø÷×ÅpçCm»ön¾œsÏùÿÿßùî9ß „büÈS€-Ó–iKÙ¶o-¿s¾s~vCÌ>d@Â’„%·Ã¸ã¸ëÝõæcËVû*~t¾þh>åã…åHjJjJ(±k`EþŠ|çç1ûG?¸š]ÍïtXÛ²¶à܉s'XÝ·ºo¼)~S –­öU¼ÊWx£ñEÍüB€ã’ãRB’“…€©%SK²¾<Ï‚²…e ^Ú_Ú¥ ŒW@ )²dµzGÙj$^å+<…¯øL€ô¢ô"!`ñÊÅ+]Çb †-“·LV|Z3°ƒ¤€>¨«ÕDAú¥€À²Õ¾ŠWù Oá+>ÅÓ#Þÿ¶{<°Ü¹Ü ü Ýsœ9̹ÚIí$šÜ.}Ò‡T’ÍvóžyôÒC`þm™C|¸¤ÌÑkõZ4s–æÐñ¾ÉÛeÚ2M Üãõ)…"w?¦+ì Ž€0〥FP+Ô ‰H¯l—í£˜ze¯ìj¨¡f”„mlcC9ÀW,e)È_d—ì0Cfˆïbøxx àêqõ ŽQzF„º•Õ•Õñ:Ì”×µ‹ÚEK‡ÿ¿‚éÁô`º¥£ãvÇíŽÛ°o×¾]ûvÁƒçž?xþQÅxöͳògåp}ÒõÙ×g[—Ý1>´Ê­•[UåÝvw3¿ú®ø®ä0ߘoˆ6MhJiJûûû8_|¾ø|1ƒ‰ÁDpº ]…àÉôdz2aÊÙ)g§œ…ö´ö´ö4KXÖ̬™Y3ÁsÖsÊs*Ÿðýá»ï»¯„ÝÝl"µ5µuÖ—âÝÜ‚¹Bˆï„"áNB„D’øS ˆ!ÒÝéît·öéöéöéBtVtVtVQu¼êxÕq!®v^í¼Ú)Dòœä9És„xøèᣇ„Øyfç™g„ªªª"moÚÁ´ƒB­$Šc|bJÑš¢5BÄõ€{¬{¬ùô†{ÃVÛ%ú }†õÆ%%%pøéᧇŸZ~µ¿Ú_ yκ肑¹ÒÜ`n ‚ŸcZ@‹ÿ½9ö/“_ƒØä7‚Fol66£ñ­´"© VÙ ½Ò ò޼#ï€l’²ØÍvX§Úxa¼@c¼Ðqõ7Ñ—Û—ÛU¥Þ›üŸì¿ò“½]|²÷±OóûêO½!2~)IEND®B`‚routino-3.2/web/www/routino/icons/limit-117.png 644 233 144 2502 13061246470 14574 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü÷IDATHÇÍVQhSg=7MšÆÚÖŠa}PÄîeΨ3°Z4¦6ÅÎR-Rn*cÝ‹bÕ1>ˆC¨nŠ‚ÅZc¡¡Z÷R¤MD‰àf#±¤Š¶Y¬öbÛôæÞÿìáæÏv{Ø[ÿ—Ë÷ýßwι÷»÷Ü$`Qæ Ҷ̶ÌVlƶo¬|AmAíÇA3¾ “JR÷×1²ä\É9’,m+m3bV,÷e}n?`áçòÉ<ÁJ8»œ]Š?Ÿ V7¬.p›ñéé ¹BïÒ侞}=$yãÊ+üŽLÞOÞ'É ÿ„Ÿ´b¹/ëe¿ÄËÅljøÒqÛq[yF:óù¹<°¿¿G’.Õ¥ªv©'#ìÂ]òÀñdz÷ÿ™k½Z¯…ù5r&r†Y<²xdñ\ºpY¸,\FŽööö‘cö1û˜l=ÕzªõÙöU[c[#ÙëP;TŠDO¼#Þ‘ÃÚ¿jÿ*9Ú wmæs«¸‰?|ë}ëüŠWñåUåUa¶û£î¢î"(5/k^Õ¼¢££‘]@õÓê§ÕOG=xô˜ðMø&|@p:8œ®¾vöÚY )ÚÔÞÔ%±?áN¸1k¢(^~»!±!!Q+nÚââu_àoo€fP.³€Ïø À4Þâ-à.p»Ü.€~úéPŽr”Ê”2¥Le e e €ºIݤnâx#^ ÎQç¨sXy¶õF=fQšáË ‡Ãa «ç¿¾JÞN_O_·žøäúÉŠÉ 2åL9Sι£œ¬œ¬œ¬$g†f†f†¬ü›–7-oZÈ™ÏgÖ̬É1›þtOº‡¤‘áËò›z,£+éJªv2®ÇuËÇH£ÉhÊúI¦˜âÿYfý1v²“üo‹Å'ùßó±q~4Ù4PºõÃúajü‘]ìšëütÓM7Éã<Ê£9y½ôRðý¹þœZ/‹ŸáËògÞþ+çíébÞžÇÌã|;Áþ‰Ÿ$ô•µIEND®B`‚routino-3.2/web/www/routino/icons/limit-22.5.png 644 233 144 3070 13061246472 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜíIDATHÇÍ–mLTWǃ8w(VüÐf\kwâδMtŒ±ãK@§XÈ4 ‘¨q¢}a»%ºlSl³©/¬u11#ë4v›U tºE×]Þý°•RãZ3¥²1‚‚îÀ3÷ÞóÛ3·C»ö«çËÍóöÿÿsιÏs!„ÈM~˜ž4=iZ’°M{S~¥X)^ñç„ݨAZyZù÷ §!§`iÓÒ&ýë”mÄü…õB¤ðò~‘+Rs«¹5Í´Á+öWìÊÏv}/X:,3*ìûtß§í-í-üƒáA€)÷”R¶7òzo!¾8ô~! ãóŒÏÓþ æÅæÅB€u‹uKᯠ#…°Ý³Ýð]úwéÒÚE–t"ëÞÛˆ'ózÏÀ7ø þ„y/ä½ ”U”UX>N|ý Ôƒ?¡'u”Q!„8±¼Aoôëñu4n[AÿjVÍÄ“J¥~SÿJÿ ÔQõ¶zô9}NŸãW/óÌ#µßÆb ĵ_Ä«âU •%ð9á}Ñû¢!ðÄæÔQ^Bˆ§?Kĉ,’±à@p8À6ÏË牠‹.ÐgõY}褓Îs˜Ã çäœ\(ð*W¹ Œ3Î8€\%WEøI¾$BØÓ.6!„¨vˆÜÕ;«³Õ´‡O5=Õ$7~7\3\cþ»ì-é-l\¿1cc†E–"K‘Eˆëæëæëf!ºë»ë»ë…Ø´fÓšMk„°+vÅ®!¦Å´˜B;¥ÒN È ¤Ò…¸;}wëݭ²8Ýä1yDWEÃ]otIGvÞžµ{Öf«ôžgDu¿Ð†„bè×x+ðüóÍo]ߺ¤/kÚrÚršy÷ßÜwl¥¶R[)ø[ü-þÈ¿•+ÿ¸¸¸€ÕkõZ½0¤©CjjÃÆöŽíÛ ËËËPöeÙ@ÙT~T±¾b=óc 1_Ì'}Ðo‹ƒÜ“Ð#´oó?æ—­ŽÃ_þøYÛgmðÞïß-·8_w¾Ø”¼cÔ !Dc¼~àõïПßúýºï×AèH¨9ÔŒ 7…Ã0Õ3Õ3Õ###*•‡Ê!œÎ çB´?Úí‡É±É±É1ÀƒÄ.Æ.Æ.„i|f|)_UW7öO†ÐkŽ×F?kìFßø¡„¾òC+”…,¸ÎÿgE~4¢uòˆ<ò¬ È€´K;Qy*‰¿58°LZ&#‹øWBøñT?±™?x?ð~ò“Dg–šY3ƒìÖM!N:HÙ-/ËË û#H’Ä¿¡†19-§é„>j´~­Ÿ¸ü‡VÃÀ_“Ÿ—Ó_Nb?íüî¬|d_ì{ìÑ|Áþ¨~f>˜…IEND®B`‚routino-3.2/web/www/routino/icons/limit-39.2.png 644 233 144 3040 13061246474 14661 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÕIDATHÇÍ–ýOTWÆ¿ ¢¼)à`Úð–!w21¨C…¦¦Û4Ð$[ÛîÚl“mX5Q(pe‘„ã#u“‹K›&íZ ¤FXY±¤:¼.è¬Ã½sÏgn/qÿÏ/7Ï÷åy¾É9ç¹G@DD¢—¾Á‰Á‰Ák8øwV|õk«_K9À-~**¾}Öž\{ æLÌcÈÂfÞ¬_Þ/bñ/×3ã-V`UÛª¶ ü%\ oe½•µ:.€ë¯BXGXÇSÞë|¯à˳_žåðKï/½³ù³ù`a3oÖ›ý&ßr~©~N_V~µò« ŸaUèªPHv&;7|(ø÷ØýúîׯWŒ¯PÁàŸ"‰TùÀ ˜kj6óKõf¿Égò›z¦~`Û6Û6xóí7ßû{ a¨>Iø$ÁÔÓ:€£%ô}À_î/Çꪺ @A`a3oÖ›ý&ŸÉoê™úy¬­ôŠˆ4ì„’»%wÁ˜ÐzôQ-IK£O{ =@[šTO9côi}RŸµ_íWû±Ö˜dòW¤ŒQí‰öMÿYKÐÀ˜ðCÉxÉ80oê›[y_Ddã_!l!la!„#w{îöW(õŠz/ÿä~£bT àÆ{Ù •TR le+[­°šWój¨æ(GÔ6µ /5~¥-é™úßæ‰ˆ´t³f_å¾J“ÎÈr^¼ i¨o¨GÝX¸1wcÎX7°n`4¥7¥7¥ÃèÈèÈ舕7n7›\9< 'ŽŸ¨?QüîÖÆ[-=ս϶ÏøóˆÑ!"róOÐq¤ãܳ͌ό«ªØÏÖ¦®MÅWšP[ ©’*©§[N·œnìêìêìj°ß³ß³ßƒœôœôœtxÜý¸ûq·5еîkÝ׺!r1r1rv¦ì|yçËüFü\ü¾þ®µjUtVtV€˜GÔo£â¢âTÌÆÍÆÁ¿rî;î; ù³“E'‹Àý÷y÷y(h/h/h‡rW¹«ÜÎ~g¿³ß`‹}‹}‹N¹N¹N¹¬¸Ûáv¸p¨ùPó¡f+žY™‘–‘gÖ|ñÒ/ø}‹à¿~]µ SыыƧ>úÔºöOþ»0¶0ÅÅÅÒ”Ò”Òç/Î_œ{„=ÂÎaç°sBBB u}ëúÖõüßêµ÷Ú{í•›•›• ú»ïN€*3mfºnº¨Šþ8úcãNˆQ®GéQAwV|åˆrHæù=íï´¿#¶ãQŸ÷}Þ'Ò?tkäÖˆˆ#Ó‘éÈé‹ï‹ï‹ÙìÚìÚìI*M*M*¹}ùöåÛ—E‡‡‡E¼ÙÞlo¶ÈgÈ3äqîuîuî9|ãðõÃ×E~¿ÿàE — È€ØBD›ÓæDä#•¬’ƒîˆ:mž1÷´{æ¿PUù¯æ¾š‹/ª$ª0ª*++Á“èIô$BÑŽ¢E; ¾0¾0¾tè<Ð 333°=o{Þö<¨I«I«Iƒð–ð–ðÈkË;›wÖØÂ»Â»ðuÄ^»2¦ª kO×Ð—ÎØÒ¿¬›¾÷mïÛ¬[¢ÿæÙì³YðüèùÆó ʿ˿˿ËÚßßßx4ñhâÑP@`ô½F/Ìœ›97s¼ÑÞho4x¾÷|íù^xøÓßP®±ãcÇáYU@>Ð>Ѐ²¥[I÷s>¶2à+êÏ¿úØnµ¯ú£:¨‚*Seª Ô1uL[æW›Ô&µ ¨£Žºe‡KGG_~ÚÔµï(‚ç| ÓÇLç÷™Î[RÔœY}«Ïè3ÀßüãþqËù9ÂA‚êU=ª`€`š)¦@iê©z ”RC J]Ò5]CS?ú#ü Z—œ¿¹¤¶¤Öü5-wþ÷_ù¾.^Ø÷Ø‹ù‚ýà *#ý”oIEND®B`‚routino-3.2/web/www/routino/icons/limit-17.9.png 644 233 144 2713 13061246472 14670 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü€IDATHÇÍ–mL•eÇ/^ô€ˆ4ÈéPŒ¦ÉÌØÌMy‘AYGùRàt’ñÁõ)Dg8•Í5¥>ˆ9ç,CB™SI—SðƒmY!`ÀˆR<¸Ž…<ž#œó<ÏýëÃ9ç¨õÝû˳ëíÿÿ?÷½ëºo™ü h³´YÚÔ€­}òO.œ\˜v"`6!bUĪ[Õp0á @bCbƒÕ²í¸^/Âç³ý2MBŽIM“š"rƒöX“¹&srrÀ®mÇÇ›Ïn> ðÍ—ß|Ép]w]ø'÷Ÿ\ÙvÜηëm¼p|Ùó¿D_ˆ¾1“b&ňÀœ‚9©úSÁ¹Â¹ànäÝH¥€ù0…)*Ðѱ—;̶ãÁ|»ÞƳñm>›? G )')GŠ×¯sÔ z¡2¥2ÅæóŸö²—)`è†`–š¥ŒƒjSmD!ÛŽÛùv½gãÛ|6@+ìNß¾;}Y•Y•YE©E©E©óYtUt|õí©Y§fáËa9À°âãâã¬nM”uÖ:Ñ-b¬2V‰HŒˆˆ${CT¬r(‡ˆ¥Yš¥ÉÄ:±öÄÚkE’ë“ë“ëEæåÎË—+â«ñÕøjD\í®vW»ˆg¶g¶g¶È|ç|ç|§HÞ×yÍyÍ"/ìN,K,IëOÛ–¶M’D<]ž.­?þˆnM4=_Ïÿù†HëåÖË"’."Byß·)÷DbÎÇœ9Ö¶°maÛB‘â¬â¬â¬ôÚèµÑk"+e¥¬‘؄؄ؑǥK—ŠÔÕ-«[&²þRÙe_ˆï­‹¶,ÚB¹lnÙÞ²]D{ÛcxŒŸo„wåΊÀy»+­Ï­ÏaôÑÕ£«QcÝc7Çn†ŽhdÇÈŽ‘0–2–2–ò[ÊR–‚ÎÎNà W¸¾w|oúÞ„á{Æ¡Ô/F¼\·ù*ª*ª¯Ý•LÌ1—Ã¥GA¯ÙkNð¼Özk}ødbœñ0«šjªŸŠ†Ç³y×@½¯v«ÝÖ5„W½Äÿ´w´wÀqßq_bè‰96ùw#ß´Qý$½F/°Ó4±ï…ƒH"j>á“0!ò€º«~W¿¾`þ~³ßìǯ®ÃÆ0ðcŸ ŸÿéÉÿüÞ•Ïíëâ¹}=Ÿ/Ør©¤æòwIEND®B`‚routino-3.2/web/www/routino/icons/marker-1-grey.png 644 233 144 5362 13061246465 15546 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü §IDATXÃ…—}LTWÆŸsî|"C Æ`!TK­ÜR%l£íjS+–HÀEKÚeÛŽµ„ÖU«« V+‚›Õ–®ß"™â(*è´¦Ô±¨Kd¥AÁ*0 óqçœýƒ{ab×íûÏÍýzžß¼ç¹÷¾CÌf³ÙlF0ÆÊ9¶¡)ŠNE§¢“[Íߘ¿1ÃÃK”>(}9‹¸¶ýEŒ#Ĉ„ÕžZO­§–oEªPELˆCâ´¡ mVc5Vó­ê%ê%ê%ĤèQô(z~©"d€ |\YVVvþVYNYNYé£Ä(1Šdq°$®`:˜Œd$ÓïX)+e¥ìïˆwÄ;šXj)µ”Z¾ëòöz{½½õM®9®9®9 Õ—ëËõå¨KÈHÈHÈ ¦$e’2I $†$†$†ò¾|^¾^¾_Ö×—üd™GæSHœÏƒxbÙ$䑼¨r!Jˆ¢.©©©~6ä™úg꟩÷¯ÏhËhËh£¾ø–ø–øòªÚ¤6©Mpa6`tpÁ€UX…U¦a¦Áå™î™î™ŽW[l-¶÷]ˆ»w!Ž­ï{¥ï•¾WVìÔEé¢tQ/küyþ<^z9Ïçù<¿3›€€€Î§ìö û„ýÈGù(>Y˜$L&]4z½ƒÞÁg¯Ç.Š]»HL.ðx <Â{c##ê¥ê¥ê¥y¯ãuÐq#7r#À†Ù0X «a5¿Ì/óËЩßP¿¡~¢|¿¬'ëË~²¿Ì#óQ­]k×Úe¸2\þ·K®3®3®3Ï.Š^½,z™øj~N~N~Žâ§`]°.X‡©ìgö3û@6²‘ i"M¤ ͤ™4ôúý oÑ·è[9KÎ’³ÞÁ;x ù~YOÖ—ýd™Gæ#¥ÖRk©5+Ñk÷Ú½ö3ö ÇAƒscAOAOA± >|”§ñ4ž† ÒHI#Æ‹ïá{øs0sæg~æX:Kgé€RTŠJ@':Ñ Qˆ$=HzCÎUÎUÎU`û#öGìàIC“‡&M&U’*I•´(‰ò8Çã6ýÙ—êKõ¥iÍiÍiÍÈUì*»Ê®Š!pà 7pd>™Oæ– – – À±¬cYDz~Ð×ükþ5€a cx²¾ì'ûË<2¢Q4þ©ÀðÈðÈð[_H}!õ…TR!髨ڨ €xÄ"±4Ð@t>è|Ðù8’{$÷H.`«·ÕÛêä"¹ ã @˜Ð×—üd™GæSxú=ýž~ücVÖ¬¬YY0i¯h¯h¯ÀÅ y!/„Žl'ÛÉvj¨¡xÏãyÀØÓtmîÚܵpæ:s¹@ðõàëÁ×1q\Zh¡ Ø—ô°k°üÚ½Ú½Ú½p͘7cÞŒy05÷7÷7÷cÅflÆfGÒ£ôh€ÌiœÆiz衟Ð'Ÿ’Oɧûi)i)i)ÀšKk.­¹DÚ"m‘6À³Ð³Ð³0Œá÷¥„J×q×'üéJº’®°û±ŸÄQ!Bˆ"ø±¡¹Cs‡æ¢C,‹Åbä9GÎËK/gTÎ^Oà ÆÕ¨F5@BH ÁÓKÖéCúÒNÚI;¸tViiiF¦Ñ4š£š/4_h¾wu„u„u„ñc7+oVÞ¬ð<žÇóe™,“e,ÕEHi8°K±à|€ü@¹³ ( x.Ïå¹â!bôî⻋ï.÷÷÷°]Ó¡éÐtˆ»(–a–•T)Ì ³ÂLLçC·œñG;_t¾è|:ª§zªÇ"‰È ppp¡EhøJ²’¬h6ͦÙ€*¨ à‡þ€Î[ˆ…Xà³Ål1ºïß;¾w°dâ âÀ>â'~â? ¢á á á [6ªÒTiª´êî¾Ä¾Ä¾Dáî‰âÅ'Šýë$› nâ&n‚-hAËÄÒñvÞÎÛ'x \ʨºöóÚÏk?g®îÃ݇»ÓŸT_ª¾T}ùïå¾._—¯k½vŸé>Ó}ð5ú}×è3õ™úÌÿh;Òv¤íˆ°Ëú¦õMë›|)$…¤jö-û–};nRCjHÍÑj´­@LCLCL`$ÎáÎ<žÇóx€, ÈŒÞ4Ý4Ý4ᵦø¦ø¦xªÓFh#´îWX2KfÉË3„ãÂqáøh(ó;êQzI&É$yÁÞ±±í⻾µ¾µ¾µì½l[ÁhJüŽøñ;°„'òDž¹F®‘kÇ“Ñ_Srt~ůøC ÚÓ³§gOøþð£áGû•n¥[é.ÎàY<‹gí¼È7ñM|“bº4æù“ÆæFÅ&RNÊIyC!M£i4m}-ò‘|ú•…Xˆ…ˆkŸ9?s~68„p„#<àá¸Æ¯ñkoä¼À 1à>îã>øhà#ÅnuŒ:Fs¸,vkìÖØ­;/¢%(!GÐŽv´‹éò<ªGºÐ%ÞBŠPDjgšujÖ©]¯k 4š‚Ãe†ÀAá<1õÄÔS²kæfnžÈ.1#1Ž/-øT>•O—:®¾â¸â¸âà ®ž½zöêYa—>L¦ëv{«½ÕÞê·Ü*¹Ur«àîàL‘|É .i{”Mb“Ø$L¹qÿÆý÷o‘·È[ôá½AoÐ:¶YÚ,m–ÿ“Ý)˜‚)äƒ| >â#>Œ>tGŸ£ÏÁ#šD“h‚zoÌÞ˜½1þØÞ—z_ê}I¸£™­™­™½ëe.p ëb¬‚U(vK+û¾¼beeeeee’; éÀx†¤ì®“²»[Êîéße×gñY|âZg¥³ÒY ¥”RŠA¹çGÏže®îŠîŠî áŽf£f£fã­:Ï=Ï=Ͻ;ï,¼³ðÎB@Œ–îÓÉ€2ß8èÀò:IàG)»5¿ËnÄ@Ä@„ÂyÜ|Ü|Üì_'MWSZBZBZBpÐf·Ùmv’­kÕµêZÍ¢Yô{?(ÞV¼­x{tž1ɘdL¢ý’ßkÒvôI.O©ÔÔÔÔÔÔñ¯z WqW‘w{göÎì‰ú#ý‘þÈ&QmTÕÆ¥_ý–þ[úoé!§œ···ùßoºqèÆ!ÿüaß°oØ')S”)Ê”âé¼’WòÊÕ}’…»èG?úÙ4y¤F‰OòüA=%»¥°Â «¿„×òZ^›ÚNOÒ“ôd£Ñ½Ø½Ø½˜ÍTV(+”ô¶/ä ù.ÇœŒ9s23ÕÑîhw´“³,”…²P~@ÒµH€®§qPüA=‘]éuá/A! Q¨ø…ä’s)†[¹•[?^¥¡¡Ao ]B—ÐuoÛÆ¶±mkï·.o]Þº„QÒ“ËÑ?âø/Ššè„.ô”IEND®B`‚routino-3.2/web/www/routino/icons/limit-22.7.png 644 233 144 3006 13061246473 14657 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü»IDATHÇÍ–L“wÇ¿-²¶@"'fÁ4Ôé&ƒä`̘zÄÕsÊi:ÇJ–E£NîÈŒ7—…õÈ<ºätYÔÓ„ðȈWºLwÊN…mÌÜÎÕ@rqU$ 8 ˰ñjD®Rúëy¾¯û£}|êÝ÷—ßž¾?¿Þï<ß§ïïW€Bˆ‚ôS€q¹q¹1?…¿ÑãæÍæÍ+N§p§†:CÝ÷Xܾ¸ Ð[èUÇt¬åµúÌ~!ôù™|Z\=`ê1õi|^¯x½Âü³>v,ç-çç“ÐØÛØ pÎwÎÇo!8˜uÌ:@ÇZ^«×úµy™óÅÁÿⲿÊþÊ0 ¦§LO Ö—­/Ûö§ nÛà•­¯lø)ë§,i%ä‘'@˜0Úº—µ|º^ë׿ió5>?¥G@ÑKE/ ¯¾ñê–?§Æ>w‰»DãKœ>â#ò N†”Êb /ËË0€Žµ¼V¯õkó´ùŸÆŸÒ£oeD!Žo׸kÔ€Ä`r*aMXAýwÒ”4‘H+•ê¨zC½É©ädrÔ¨U£üÏ’2*£HÅ/Ž“Pv&¼ /$ï§æËK¯y^óhoÔ·ò’B<×–°%^$ããƒãƒÀA¶€|Q¾H„>úéuA]P€ \àB†‚CâȸŒËxFü½XÞp·á†–7÷¿¹_V~¿yØ=ì6\ù‹rvõÙÕbQÎ39¥9¥Â°lÕ²g—=+ÄÈôÈôÈ´gzÏôžé"·:·:·ZˆâUÅ«ŠW‰GkzÍôšé5BœªG”9ËœeNèòuùº|°ôÖÒ[KoãããX]V—ÕOÀðèïg { { ì5ö{ l¸·áÇ ?‚ø“BûÛöïV·Z6À—Þ/½\HéÊDnWn—ìÈpdþúÉŸñ9xþØR×R§Ø×Û×Û×ƒÓæ´9mÐêkõµúô|Ù¾²}eûÀëòº¼.=/‰—ÄKt|â≯O| ¿>ÔPÛP›±Áûg|3>àŸùGòÈA¢Ð\hVGechKh‹þ·Z;h´AEEEEEìÚ¾kû®íú ¡©¡©¡)(ï.ï.ï†ÝÉÝÉÝINé”Nà:×¹®×‡ÚBm¡6(¿Y~³ü&ŒýcôìèYOn U‡ªx¡©Ð¤Ž õXÞÖ¼­²æÞŸ{†÷Ž66åœÙmvÃág¯8¼Ôqu\‡€9`˜SŸª% G‹-†yû¼}Þ±ÉØdl&š'š'šua­ý­ý­ýàhr¼ëxW«¿LÿŸ> (ù—ò/É‘\¢}cííÐ>xºýt»lÈ>gÜfÜF¬j¾ê^Õ=°®´®´®„Úµj@‘¿È_ä‡*W•«ÊKŒKŒKŒprÏÉ='÷@MGMGM(›”MÊ&¨ÔêÐöI[g[ç#]1å"€l úÙÝÏîj¶qí=Á1!„è¼{›ö6ÁB€úóýêκ;ë`æÃ™î™ndÐì v¬Ö?ë‡ÐíÐíÐm˜©›©›©ƒ`A° XÄñÃ}õ¾z_J)¥æìs/̽ÑåѵѵHPwª;oS|¨oµ¼Õ¢ ë¼"4ßÐ}Dó•G>–é;ÿÏŠË@eB™xÌÇ”qÀ´uŸêÇ7âv5ºA~švæAŤ˜@(fÅL‚,*©DÊùüä•Ô$ûdŸì~‡7ȸ|(BZ”¤HiVšIðâPšÊÄ Éú¬ú,íMe:ÿ“{V>±·‹'ö>ödÞ`ÿáÕ4ÀêâIEND®B`‚routino-3.2/web/www/routino/icons/limit-6.5.png 644 233 144 2531 13061246471 14577 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–mHTYÇÏL/3S“&´e¸¸‹dERФ$fR™ÌD$3˜ËÖâöej3 bYÖ/‹2a±ƒ`«Ò«F¬/eA/‚„Æ`ä`á”câššzÏ=¿ý0sg¦·ïž/—ç9Ïóüþ÷žsž{!„Xy 0¯0¯0'„msiÌoͳæýðOØ>/Á´×´÷ùoX•XäKòé½1Û˜7âãó…ˆÕç~±XÄ–˖˦ìˆ}ö­Þ·Úú]Øþ³l×m×Ç58Ôt¨ àZíµZ~‚ÁÎÁN€‘ì‘lˆÙƼoäõâë‹3Ÿñ…€y·æÝ2õƒe¾e¾–›–›þs8 /vì.x=çõe9ر«l`Œ1ŒгùH¼‘oÔ3ê<ƒÖ#`ɶ%Û„€Âý…ûm‡zëàxêñTƒ7s8Ç9ì ic²X3ª]µ`Â1Û˜7â|£žQßàü°ñéÚVn‡Åaþ˜y (·Ö©u2£=Ó&µI”®ëSú_ŽvÚhY!=Òr¥,’E(Y:ýpú!3ü. dAô…0í09L†ÀÊíqK)„+ÿÛ mpl.ýãþñ(f'?ʳò,j˜RâÜà7€#áHœÿ1y ¼ãïP(@z‰^ÂD´>~é—åGôD„ï€Ã§ŸŠ&¯Uu3Þo§^îy¹ãå¨l©l©l.g—³ËùåÓŠ´"­®º¯º¯º¡ÚYí¬vÂÇ…]vÁ‡6~؈Õ«z‚0/Æë‰{ö+ÔÖ‚PîgjdíHÆHlnÝܺ¹ò_å¿Ê[Þoy¿å=ôí?Ú4&ì­õ­õ­–®[ºné:(ì*ì*ì‚âÚâÚâZöŸŸDçÔƒæz$´&´ªË0˜5˜²øÓ/ÐPÝPÕPÉÉÉP’P’P’åQ£Ú¨6ªÅâ›-Í–f ,ð,ð,ð@aNaNa4º]®XœjÑOê'>Ãæz$-JZ¤÷@èMè ÈíÑc@]N]N]dê™z¦°¼syçòN¸{é—bÀ¶Ž¶Ž¶pg»³ÝÙà»â»â»)ÞoŠî4ßi¾Ó‹×ç¼0ßÐcB¿©ß4õ¡íÑö!…B,‰œ aßiÏ·ç awÙ]v—¥i¥i¥iB${“½É^!΀3à‚ *¨bÀ<`0 ‘þ(ýQú#!\—Ãå"U¥ªT%DèûPZ(MDå/Â7ô|¾Çø#²æe¬!Ú”(;P6‹Íb³@Y^Y^Y××׿¾M}›úà¾ï¾ï¾VXubÕ HÌMÌMÌ…ò¦ò¦ò&Ðûôn½@ߪoeŠ_¾¹Ç¾~*ñkOµ§±-!'äˆPf(3” ºO÷é>P/Ô õ†× ¯^ÔSO=Lßž¾=}†ÌCæ!3¨2uPŒÕc@ëÑzâx_?•q}lÚ?韌ëc%òž¼Ç„Z¨6¨ q›w™Z¦–Yd‘ç?­N«Ó jTª‰óW©VÕ ìõ²>®Mû'üßìcŸt~«Ã Hˆtþçò9Ш/Ô2£:TH…P\¥`‚qÆAT@€)&™ŽsŒc þUADÑ¢§è)Ì€ì–Ýñõ#¼/;ÿ¬ýWÎÚÛŬ½ÍÎìÿ"ƒW(’EzIEND®B`‚routino-3.2/web/www/routino/icons/limit-93.png 644 233 144 2424 13061246470 14522 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÉIDATHÇÍ–]H”YÇÏØú1ääÓ¥Yda°(˜)»‘Ø—DT7ʺ],‹Ð6}Àæ) -[E»bmM}ÝìMšåÌ•µ˜†¡ìNã–aíà¨ÍûžóÛ‹™3ï»KÅ^úÞ¼üÏó<ÿÿÿ}Ï9Ï9„B¸“oiùiùió8í+kͯõ´~ÂO¹§\زsËNç/‰‚§¿Âþ¼ýyZ/~h¦™l0¢FÀÜmîfÔ}u°°Žë|]¯ù4¿ÖÓú ?âßsëÿj²j²HܼgÞ²‘¸Œ«U€2Þ#êkU¯êS ùFŽËq0þ0†Œ!¿Ë÷ò=J×ó>ɧùµ^J_Ø þΈ3ý ž™ÏL @H¿ôS«XüÀa[F8ÈA‚ ª  £Œ2j‹ÿÈqŽÊ)-²…Sš?©—ÒOøIkí½GöI}÷&Œ°泆5‰ïè/ì/ì/„Ó…§ OÂÈðÈðȰåcÐ=ètƒ¿Ýßîo‡¾‘¾‘¾+®^“N:Š¿QcÔ¦—ÒOøIëûïïRåuJÄ/Å/1“lll„‚·o ÞBÉù’ó%ç¡Ø]ì.vCèbèbè",\¶pÙÂePó¼æyÍsX¬«Å B‹B‹B‹lS~,¾2¾Ró«:K?áGÀ¼®y]êDÖFÖZ…f…‘idZøBË…– -Pâ*q•¸¬ñ²¢²¢²"8} û@6\ _ _ CG¨#Ô‚¢SE§ŠNA·§ÛÓí±Û`Î5çÚ¦<¥Ÿð# ו뒃0þrü¥µíUƒÜ%wYe/Â/Â/Âàõy}^TæTæTæ@Æ’Œ%Kà²÷²÷²×ʯVÕªZA~m~m~-ô¹ûÜ}n›±»f›Ùfo3Z?á'My[Þv al66 ýxÄ_âxÂbzÁô‚éB¬nZÝ´ºIˆõ ëÖ7±¢jEÕŠ*!‚Û‚Û‚Û„(+-+-+â–ã–ã–CÏcÏcÏc!úýþ€ÅGÍ4ÛôRúI?[cÌ1®W¬5õE}QT®«\W¹òœyÎ<';4vh b×c×cס|²|²|\¦Ët™°g`ÏÀž˜ L¦¶™[k Ÿ\cÙ•º1Þá¬]934343crLŽIPçÔ9uÎÒ3Šb£^õ¼êyÕæYó¬yÖfè L l÷S»ò}l&ÕÇNÈÄøœ:ê@íRÛÕvÛö¯Uµª”_ù•T«jU­¶øªT•TS OʓĘþ_}ì€øC ³Ëì>é#Nt¢T0yô„´ý‘&Žq ÔoꎺüL/½(ûä>âf·Ùmãÿx矵g嬽]ÌÚûØì¼Áþ©ù_}´R IEND®B`‚routino-3.2/web/www/routino/icons/limit-13.2.png 644 233 144 3020 13061246472 14645 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÅIDATHÇÍ–ïO”WÇÏ ÃL+Nˆ’MIb11õ…fÇÀL-Í6E©­Åh­4Á&t—¦‰)QQã¦JȦl›¥¡AÉšÔ88›Ö_¸]¥”jfǰ™FZp* ‘‹ÀóÌs?ûbxf¦ÝÀóæÉ÷žs¾ßsï}î¹W@DDV.¬.«ËjcëÞä¸í%ÛKÅãÏb`©²Týç#Èû$ïÇŽ/Œ’Øô›ñ©ù"IþT=s\VJr ólæYËÖe|jKkKmq|¢²z²z~Ñáÿ;~_—¯‹˜˜˜Ù:³’Øô›ñf¾É—Ê/‡£/_g|m CæŠÌ"Pä)ò¬{/ðÓ:xõ•W_OOSVˆýÈ%Wm¢D1íA 6ýËñf¾Égò›z¦~¼§Ûé×^íõ¬ÎxÂÝд¦i©§õÇ8F.èQ= {3ö&‹ úT,Ħߌ7óM>“ßÔ3õãõȯ÷ödÑj­ZKÔoü^K×ÒA}¤ßÑï`z”qß7ÆA¿£ê£`Ü2n·HÚ/Dˆ$2FµGÚ#4=¬­ÑÖ€1ç‡êñêq`nY?±•Q‘’¿@Öí¬ÛÑtø±âÇ ˆý@¥úRŸÕg™OHü‘€k\ãZJ!m´Ñd“MvrXETDE€Ãã€r+7ó´,ókÃýÃýYѬh4oâõ,¯ÔgßBýõ€º `¼`÷ý¹ïÓ¾OQ£ù£öQ{R0”ÊeÀÉ®“]'» 0 Œ$ýÆ´1_•¸ e Y‡¬ÐÖÚv¢íjèŸÁ’`I"úõí>ç>'°¯G¸ "ø;óñ™óÜsÖyæÂ™ ,¦EÓî§Ý‡ž²ž²ž2˜98spæ ØoÚoÚoBmamam!¬V«Õjýþ~¿?YÐà¡ÁCƒ‡ w)w)w *Š+ž©xŠþP)Œ°øï ?ýù¨Úþ]þ]`äÇëI«ýCû‡e/Ê>wÈa…ˆˆ¥SÓòÒòD þU0T0$¢êTª‰mŒmŒmi±µØZl"®m®m®m"###"‹õ‹õ‹õ’°±Î±Î±N‘Fg£³Ñ)rdäÈä‘I‘çw?÷ìsÏJæ­ýÑþ¨¥³l®ænÍ]–²÷gï/{QÀñ”ã)#&L@Ì8öxJ<%žè°uØ:lÉ•˜Ý<»yv3l¿²ýÊö+àÚíÚíÚ œ@N ‡ÿ³M›6Aé†Ò ¥`—^w¯î¨7L½éãÓÇ=+W6!«(Ãoø-!½J¯‘""â4g¬ýUk×ÚEò»ó»ó»Ez×ö®í]+²eï–½[öŠø¼>¯Ï+RpªàTÁ)‘€'à xDtÑE‘––Ûãö¸Evæïtìtˆ´ïo¹ýeãsSO‹hyO©"KÈ*Öhy´<ø½Èõ«×¯ŠÈïDDx{¹®%ûm{Ðyœ÷8ïqžˆ7ì {Ã"ŽGƒ£AÄ^e¯²W‰¬ï]ß»¾WÄëòº¼.‘Êpe¸2,rÙwÙwÙ'"ER$E"çö{ëÜ["…¾§?}\–¾r]»>ÆÛ"Á‘àˆH¬/ú~ôýà÷©§²¹¾øÊ<•F«Ñ s[ævÌí@-“[£MkÓÚ4LŸ:?uŒ#ÇÈuI]R—àaÓæ‡M0¿j~Õü*˜úfêâÔE˜87181ˆº÷ùÝÖ»­°°ÇÔ{W{WÞ0O%‰>6™5M‡áØp,¡_Éc£Æ¨IécéÊP¨ê€:Ò¯ÊU¹*Š)¦8åçZ`…Ô¿M­Së|•ð›>ƯúXJç×kÒjÒ’Ÿ}XšcáX8Ùùi¡™fP—ÔEu8ÍiNsÌ2 jI=R€ZhA©è𮡩ïb9±PÝËüíÕG«šWSjçrïÊ'öuñľǞÌìÿàhÜ?QÜIEND®B`‚routino-3.2/web/www/routino/icons/marker-49-grey.png 644 233 144 6230 13061246466 15636 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü MIDATXÃ…—PSWÚÇ¿çäæ7&#,I%í@DmPl‡Z ¥ÖѶR[±ø£»µú¶]úâ †±k­néॶµ*®[uIYŒCÔ•–„€‹5‹BH!äæž÷Üq§ÓçŸ;çž{žç3Ïó=÷<‡ ÌùèAçs·¹ÛÜmf-ø¶àÛ‚oÙdó}ó}óýÅzÆÂXØÎwø)ü~JüZÅcñXا(CÊHtÐAànဵX‹µìSi†4CšAò¸^®—ë½VFÈøó¡ÂI…“ 'ýÐZ”]”]”M|$ÉG’ôGÂÅW(LF2’éqÁ,˜³pÑ;ìö‡'˜+Í•æÊã=^‡×áuT_q?ã~ÆýLüÊe‰²Uñiñiñi$Ï(6Šb A“ IÐÁqp>ø}p}Ðߘÿ@¼`ü O dpS1S ¯“5d YY"ŠEŠ"Ï9|løØð±šñÕã«ÇWû·¤ÝJ»•v‹úf·Ìn™ÝB–Hó¤yÒ<¸ñ1>ÆÇPÀ 7ÜVc5Vˆ@"àöLóLóLÃ’–ú–ú–zæ«ÑÕèjt–‡Ï=|îás¯}®ˆTD*"çÊükükük•°–Ãrn¿N@@@ç‘­£[G·Ž¨G=ê§ã,œ…³ÔÿÍ;âñŽÌx!êÙ¨g£žå“—½»ìÝeïrÇC]¡®P¢00<‹a1,:Ð!A€! aÀLÌÄL€t’NÒ ðÀ9UN•S…îSûNí;µ½»®»®»ŽkÈ%r‰üßgù >ƒÏX° ° îþJåMò&y ž,ž,žü—¹ÏºÏºÏÎx!jYÔ²¨eü’œìœìœl®!T*•c‚Ð(4 cã …Z€ˆÒCzH@’‡ä!€ïñ=¾„¥ÂRa)8Ž?ÇŸ¨ÕƒêALúÊŠÊŠÊâ—ãy‚|Äl5[ÍÖôo“·ÉÛt¶Iõ«êWÕ¯,:·7·7·—4…~úMè7 ,•¥²T¨Èr\ØUv•]ˆ’(‰À,ÌÂ,Œ³3;³ÄAÄ  HxÊGóÑ|ôœÜ°aÂàÓ8Sœ)ÎDJñ$´¶Óv€¥³t–  Mh~zû§·z(q—¸KÜÀíöÛí·ÛƒÞȸ‘q#(>V|¬ø`m³¶YÛ€­Z´ÖýÖýÖýý‚~A¿[&‰‹‹‹%¥Až çé÷ô{úqXŸ®O×§#O~Y~Y~n–ÏòY>ˆE,bb%Vbï8Þq¼T<]ñtÅÓ€²YÙ¬l$ù’|IþcP‹Ä"±H€sŠ9Å ,Õ-Õ-ÕÝ5Ý5Ý5À×’¯%_KãZãZãZ`BÙ„² eàä{å{å{áÖ¦hS´)ÈkîoîoîÇNŠOð >!:z’ž¤'ÇâHY8 gáYEV‘U€w®w®w.P>T>T>è%z‰^(v(v(v|ßÀ7<õUø*|@XGXGXÇã÷êWÔ¯¨_øýü~~?Лݛݛ'MJß oÐ7ÄA$:N4E4E4…ýÝ•èJt%’8ÞÀxþÀé8§ JÎòžå=Ë{@x]x]x¹-s[æ6àºéºéº  Ëérº€>ø€9oÍykÎ[À™—ϼ|æe ;»;»;pÔ8j5€GïÑ{ôЀ&˜`‹'nnnF]B—Ð%ìïœì3Ùg²Ïøâ®I]“º&q‡¯Ÿ¼~òúI’gTÕF5FzÑ‹^@Ñ8½qzãt ò~äýÈûÀñŽtü#€&‡Éaà¼á¼á¼P¨*… xÑÿ¢ÿE? :¬:¬: Üi½Óz§˜»oî¾¹û€Ú´Ú´Ú4€Ëçò¹Ç’±´´„Âf·Ùmvì’uɺd]|1‡eX†e…eÜBn!·ð/ÿ[³¡fCÍ”N©Sꔢ¸Ô ê5T^WçÕüV~+¿åŠrE¹@ð‡/þQü£øGàÄ•WN\ÆÕŽ«W ¬Ò­Ò­Ò—Æ]wi ž(ž(žDj"5‘x„ÂáUUUB2±±Ñb"&búÒ)Z9¼rxåðÅó£æQó¨9f­«ÂUáªxúÿsssü›“×%¯K^G3ŸÊ|*ó©Lx † C8ý~H?XµV­U ,õ,õ,õ³¶ÌÚ2k ÀÊY9+ªêªêªê€Z{­½ÖØÛÛ™‰™‰™‰`Úm„Üé§gœž!¸Û5íšv Ý [ [ [ðÓ _£¯Ñ׸`ò¾Éû&ïƒûfÌ͘›1X~´ãhÇÑüSѧèSô>ÇDLÄDñË$më(-£e´LÔDwÓÝt·ýOB—Ð%t­ñ*.(.(.õóêçÕÏcOµ|ÐòAË8!º&º&º†Ê(£ ˆëëë4Acø}«‡z`bÒĤ‰I@ü¹øsñçÆ]®{®{®{PTÕWÕWÕóQ’û’û’û$ƒd0_ I$‰$µ­C1ŠQÌM ´y~㣾‘ÛFJH )©ÝHSi*MÝbArC÷V²JVÉøõÎ]Î]Î]P«ä*¹ —$$ IV`VüèMÜÄM€u±.ÖL`ƒ'0«:»ýìö³Ûý›v ìØÅí‘j¥Z©öDÑÌ3wÎÜùùy¢…äoèD':ùEÁ~T‰ô ‡oÅ&lÂ&bÑŸÑŸÑŸ)ΔåÊre¹'ŠÆŒÏ9O…œ 9âß HV“Õd5<ØŽíØ`#À YÈ£ ´6@zÙvÙvÙÆ667676‹Š•¥F©¹;ê-÷–{Ë?ÜÑZØZØZ0³1Ô8G‚ îÀó¤"„!P߸wãÞ{€w“w“wÓ‡;”aÊ0eØí“·*oUÞª[_µ¾j}•-$ÉF²Rá¨pT8 9äl ²A€ð„'NTª Õ¨•¥Cé„D!QHüpÇ#éÝ HqO µI$X©À•DJ$*F5ªQíßL’I2I^˜ùèÊqþ¾õ¾õ¾õÂ_^^èüÙ»gïž½B»Ð.´CAgÑYt<|ŸÇçAº?fÌþÿLG’#É‘$êd™¡xî£M³¥A(J…RnO ² V¬¨¨¨¨¨®`Fx1¦¡€v7´»' ÝŠÿÒ®¯ÒWéã×;99AA)¥”b0˜‰F~ùaDpß-½[z·TÔ!Ë—åËò[«0la&a²ÁëˆuÄâkÿtÿtÿô+¼4Z-~eï/‹~YôË"Íg›³ÍÙÆþzãÈ#7Žøç ù†|C>Ñ&ñ|ñ|ñüÿ™Æ±CìPy¤B*êF?úÑ/D+Hÿ$ÁïØoh× +¬°ú ™…Y˜ÅÔIOÓÓôô…èÑ—F_}Iˆ—ŠKÅ¥´M”#ÊåÔÔÅœŽ9sz±ÉÖië´u’sB¸.„³/~+€îßâ ø{B»ß…¿±¹k$›d“ìÅ0+³2ëŸW˵r­\KÛD=¢Q]+ìv ;×ßk_Ѿ¢}ðÑÁÆrä÷8þñT×ÑCCªIEND®B`‚routino-3.2/web/www/routino/icons/limit-16.5.png 644 233 144 3040 13061246472 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÕIDATHÇÍ–ßO”WÇŸ~ÍÀÄ¢«4D6ÚzaD­)­C– v‰¶VDP‚‰TŠËîšÆ…t/·MìE»pхŸ†I»²sS±Ý¢ 6(Ô ©^X´ÌXa­aÅ›8…ÊÌû¾ç³ÃËLÛÀsóæùõý~Ïyrž÷ˆˆˆsé+`}Úú´5;n['ü¶ [ůÿ·Oê`ÙkÙ{ã/Ó™Ó ëÍõ7¶7ó“ëEøÉ|¦_œ’pdôeôYþðãù=ÌŽÏŽ|ïùÞ ÛŒ›ùf½‰—Œ/ïüŒ_Ò>KûÌ2 éé"PøRáKEŒ'‹àÕ—_}à»”ïR”ô€‡ò"˜+”d›ñ¥|³ÞÄ3ñM>“?®G ¯,¯L*k+kí=ñ‚›g ¥ ¥Àä‹Þå] E´€^§×±jD`Á ÛŒ›ùf½‰gâ›|&\ü´·í;ˆì‹í‹- 3Êbi±4P-ÚMí&fD©µGíí+íªv Ã0 ƒ_®YDéÇ£ÑNbú†Xs¬ôÊ8>íû^Ù÷Š)°}G¢•‘g?û7öo"©ØØz€]ʧ=Ô²°L´'NPaVá$ 0áG’üW¸Â`Ž9æÔ3êPq|˜›°Gì‘Hj\س,ÔÉQhjmjuÀ(^Þð?FÎŒœAÝ>ûÓÛŸ&ø‚Π3è„öÁöÁöA¸Vs­æZÍ/L«Òª´*ð7øëüuÐUÓõf×›¨ÖvïêÞ‘É×\Ò\j8®GùêOœò½ï{ß„S }y¾Aß ‹©ÞÔ®Ô.èkìkìkL–XJ,%ØygçwÀv‡Ýa˜>:}túh"ï¾í¾í¾ VmYµeÕ¨¼V9V9u§kKkKYü_g´!Ú  ?Öu(®Ç*Öì·²ßÚü¼¼Q6Y6)Bºˆˆ¥GæRrRr$Õér¹\"ŽKŽKŽK"CÆ1dˆZ­V‘¼â¼â¼b‘RW©«Ô%’Û‘Û‘Û!Ëk‚ &‰TD*""Ò"mÒ&²ûË=ö<ŒUHïIï±ôpñ…ùæE,Î>•}jóó¹+rW“ººzÙòµÀsÂsÂsü7ü7ü7àBï…Þ ½°¾|}ùúr8=szæô ¬_3¾f†z‡z‡z'6<:<:< žOƒ¼ýÞ~o?¬ìÎ;ÿm¸PÿùÕϯ‚Øs±ç@¿¾âÛß“VQÆ9ãœeRDÛ«í‘tÉ3wÌ¿øˆDÔ¬šU³"Ž*G•£J$«>«>«^äpááÂÃ…"ùÝùÝùÝ"353535"ç8ÇEîZïZïZEŠ.].º,r¨úPõ¡j‘U,Š„rÂýá~ÉQ+ÕJi6 ŒˤU¬‘òHùõ ‘á‹ÃEdˆ¯/éŠf§eÙ†ÈB`!°qÛÝv·]dÝöuÛ×mÉ´eÚ2m"ÛÂÛÂÛÂ"»Ý»Ý»Ý"îƒîƒîƒ"kkk"¾c¾c¾c"Îß:ÝN·Èo~UúCé­ûÝ÷¼Çë"/¼(’’ùcÆ×'’oe[Sðó–F<*}ôÚ£×Pÿû8ð8h‘Þ§÷é}ÚÚÚ†×ð^P·Ô-u ›››>|===¬sósó(õ†æÒ\&šQ̽¦ÍM›ÍyvrT̹öYûl$¦ô)}™Qã€q iŽÕ³Ÿý ²T–ÊJU«ÕjµØÊV¶&ùÿªÚT¨Sêõ €Ú¨6² þ¾„¿s*8°?´?Œ¤òõOæXÒäתSªS“Ÿ§´)m hÓ§õéÄä§/^P£jX ~üøæ™5£‚*,.å·è_è_S—´YmÖìLl –ø¢?ŸüOî¿ò‰}]<±ï±'óûs3ÍžÅ_TàIEND®B`‚routino-3.2/web/www/routino/icons/limit-2.2.png 644 233 144 2370 13061246471 14571 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü­IDATHÇÍ–]H”YÇÏŒó¡NJ-ABÞìÐ&²áŦ8á¶$ŠÒJˆíÂ,ÑE&.ÈFfs1±‘EËM9Ûöqc´Ò’¬ˆ24K…l!¥ º‚Ú4êø~œß^Ì{æ«]vï<7/Ï9ÿçÿÿsÎsž÷BQl}8·8·8}éØù¥=ï®sוý”ŽC8 ‡uÁuA€’¾’>ó‰«u…ÏÎÂæÏÖSó¢XØ®°+쨱âh.o.wŽ¿žˆ'’ÔáÐÍC7ú/÷_æ0ćâCs5s5`Çj]áU¾âËæoé ywòî8&À•ïÊJw•îÚúuðçV¨ßS¿`2g2G:Àø (¤PÖ ¨1›«u ¯òŸâWzJ?íGÀ†ê ÕBÀÞ}{÷y.¦žüG6Ù¬ô´ÐE… 'ô€Ñj´’ù@>ÀìX­+¼ÊW|Š_é)ý´±úlOû‘MùMù€ =c˜ó¹¾S߉¦OnÃ4—Í׿kì‘Xµs˜ÏͧæS°ñú~}?ÓÆ4°lñË&W“K<íÏ:J!„ø°†Ù©Ù)UôÌÊÏÍÝæn{'†v íÚåÛË·—o‡6½MoÓA¶ÈÙä’KîÀ·ÊVÙ ÀYÎ_©6cé[~ø}ƒ2 ñŠx˜v0¦¥ÆRàé÷ô{ú¡»¶»¶»’Uɪd,—‚KA˜M‡¦C0ztôèèQðóóƒn·¿ÛoÚß´¿i]ÓWô¼xL¤õ•Ÿwj̨Y]c}‡ûöL·½¼;Py­òZå5Xï\ï\ï„ówÏß=&&&ádÙɲ“eà yCÞT†+Õaðmòmòm‚È\d*2eטqéý5öî­üUÝcÉXí±¶ - g>©™©©S7¦n@¼8^/†ÅÎÅÎÅN˜¯˜¯˜¯€ä@r 93÷gîÏÜ·ñ¯~x|„åÎåKË—`v™]À•½•Y}ŒqcܰûqÓoú3} EŠÿ3Þ›ÌY},£÷Þ>–Õùõ¦œ¦E¢=$h´- ÃF‘Q„&— r)‘×åuà€J(öRO=¨õ ÞʧÇh4³ø3zïtþ5û¯\³¯‹5û[›/Ø¿6U…3¹eyIEND®B`‚routino-3.2/web/www/routino/icons/marker-21-grey.png 644 233 144 6140 13061246465 15623 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü IDATXÃ…—}TTջǿûœ3Ì0 ¨É™Ðð"òâ † ¾äRî ßb‘PèEï24—½H?oSˆHuo_˜”±1é'^Œ„Ÿ’¤¼ p10Tb`†ÎÙûþÁ ¸\«ÕóÏ^Ï>û<Ïçyö³Ÿ³ÉÈÈÈÈÈ€ ã20>paB§Ð)t²ªŒâŒâŒbæžu?ë~ÖýUþÌ•¹2ל·Dµ¨Õ Þ´”[Ê-åì0ŠP„"’_øÂ@ ZÐàM¼‰7Ùaù:ù:ù:’&ü!ü!üñ¯"b$FbL=ž93sfæÌK·³ã²ã²ãH¯è)zŠždÍ8½jãRq€‹±‹¹šE³h½j¶[‡ŸZ˜U‘U‘UQÒeíµöZ{õu#óFæÌ[ðŽS®S®S.*¬\°rÁJ’" ‘…È€…n ݺvÝþܾÞþ¾ÝÞ„}›?»;O°eðEæÂ\˜ ÝBHIðÌå=yOÞóò—Ãß;üíl·iúiúiziÏÊ–•-+[¸±€¦€¦€&)O“§ÉÓ0‚ýØýPb#xÄxOãiŒX<,D6Õ4Õ4Õ°±}ôýÑ—îùóå?_þóåÍŸ(=•žJÏ% )AJVä²D–È;·p/’ôÑôÑôQ5¨AÇ¡\(ÊkNZÍV³Õ<{­×2¯e^ËÄÅ1;cvÆìJT&•Ie‚¦c:¦CdÞÌ›yC@+ZÑ ÀÎp0„! ð|ÒFÚHDô¡}\\\ÐQv¬ìXÙ1qKÇ•Ž+W„ŸÿN\'®{i#^ÂKx©ûçXïXïXÈÜeî2÷ÿ9raäÂÈ…Ùk½¢½¢½¢ÅÈĸĸÄ8ág•›ÊMå†éÒ9éœt Ñ4šFC€<àRRJJÒEºH@ºI7éÈ5r\XËa9¤x)^ŠTª@U ¦Ûí{ÅxÅxň‘vÿv;ɪʪʪZ³ÐZo­·Ö_¨w1¹˜\LL“Ô“Ô“ÔCêU'T'T'ÀÑet]î'î'î' <€D ÀvlÇv¯âU¼ Àžð WqW¶”-eKRKjI-Lñññ …êBu¡š…˜¦˜¦˜¦ƒCˆCˆCÈÚ¼×ù^ç{?¿ÿnÍ»5ïÖ0V·ªnUÝ*šÄÆeXŠ"¤6!äääŒ5¤7¤7¤3ÖúVë[­o1&¹In’Ûä:æË|™ï¤Úoî7÷›ëÔuê:u“óÒ2i™´lB®[]·ºn5M²óØù8Q#jDÍ I®}®}®}8¸ÀÄ—;ÅâNMD&'9$‡äR¿Ô/õ_|ð5ðÂŒf¼0c2!Â-á–p PlSlSlÄJ±R¬žÝùìÎgwo'¼ðvà3ê3ê3 ˜#Í‘æÈÇ2JAAÜÀ ܘôÏmå¶r[¢…ÄWàÕ¼šW³Ó¦E¦E¦E$PÜ"n·àyá˜pL8Ƨñi|HTaTaT!@ÕTMÕ@­s­s­3pùâå‹—/K–, ¼§zOõž °PÊBççç@Èr„@2KfÉ ` ¦` €~ô£¢}1(?|cøÆð ´s‘\$ÉNsŠ+>µí3Ûg¶Ïd§-üµð×Bs1saè¯ï¯ï¯ k ×®%Q±Q±Q±ÀZ§µNk&ÅXKx,s•¨Dåc€ö„¾Aß oLô]sGTGTG`è1ôzðE»¢]Ñ.j9Ä 1™EB†!d4}§¾Sß)y¿7~oüJ›=Ó©ù§æŸšD ’Ë’Ë’Ë€àžàžà`lÿØþ±ý}¾N_ˆŠ¨ˆjˆœ!gÈ€ÛÌmæ6OÎs?p?p?À"F‹Ñb4”ç ç ç t111 ŸHD"Ò—$nþÜü¹Àý+÷¯Ü¿râ÷¡³Cg‡ÎnõðŸï?ß¾”²A¿A¿AÏkß·¼oyß‹¬QÖ(k„\HR…T@tÝEw`4e4e4ˆ»w/îXXX; T[[ Œ·#`û®í»¶ïšØj¢ûM÷›î7:R'Ö‰u"§Tv+»•Ý·6ŽUŒUŒU„æ‘ô»éwÓ︎ë¸þÌQY‘¬HVtÕqøÑð£áG³ÃrÃrÃrÙò Ô Ô TRÝ÷iß§}Ÿ‚ñ'ù“üI²‰l"›ÑEt]€çžx>PUF•q´³º³º³Ô’ZR?ŸÆ#wï6ÞņïïoœwüÝñwÇßG_f<ã¿`üà¿;Û®ˆ+âŠøz衇¾'„î¡{èž„Ï2…L!»Œ_b‰ý%–ÍõÉ÷É÷É'¥ ýú/ôÇ:6Ícó $sÈ2ç±Z4ˆÇíâ™â™â™à&nâ&L”””p¹`¼`¼`½dí²vY»b"&b:@±k°æÎv¦eZ¦ɯNæõ¼ž×ï)§‡è!zˆË+«(«(«w···BI^#¯‘×`²w&gr&°ë±þ1Ânt£ çéyzÛ¬Keveve¶”b|ÇøŽñá¨\#×È5¥Ù>‡}ûþä22‘‰LrmhC›¸Â~uBºÐ%ÞF0‚LÊý?óÿÌÿ3í+Š/_(¾(Íœ18cp†0  Ӆ餻Cr$a! ¤4(F1Š;ý³Ùl6Œ{†{†{òZC­¡ÖÀ–_/»^v½Œ×:¹;¹;¹wZK¬%Ö’}Ýμy;`f`Lµ™ùÆ:bOQgêL1µñ^ã½Æ{€u·u·u÷¾œ\\\;OµT´T´TðÚªõUë«Ö³å$™$“dÈé z‚žƒ#á°A6È"‘ˆ0?4<4<4 T¤ÒaªS¯S¯S/@ÑEtѾ¸#ÜîH÷¨­ÚÂ\3ñ²Gnû%‘ÛTÛñÚñÚ•RÈb²˜,^þÊø/Çå³c;ÆvŒí »6ÓÍt3åÂŽ 8‚u´™6Óf(9?ÎóƒELÓÄ4È?÷þÜûsoɧ7´7´7”oU)‚AÚ%ã‡fÏÏ´€Ðá¨mgÿþcÙÙÙÙÙÙ0Ù3 ÛÄD Ùj7ÅV»GI.É%¹Õç¸.‚‹ØSŽD$"‘Ë«««w 8>pJŽã8ŽÃ =—Ì—Ì—Ìt¤» » »€oUPP¸]ié±ôXz|ÒººuuëjÀèe{Oiœè·OžÎ'(mþ»±»ÉYÿïü¿óÿNûŠ"I‘¤H*Í6ªj£Z8“q&ãL†”b»ÑOmrkrkrÃ×Ô×Ô×Ô“-Êfe³² ^Ô‹zíº*l6 ›ÌK5!šM×oó÷o¶Ñü$¿ðððððpˆ6µ‰90æ@þ½wNïœÞ9ø/i–4KšU'ŽŸÖè¼+¬x°Âí»;wî°ÿlü¦ñ›Æo¤‡Æ†Æ†ÆøÝ²0Y˜,l¯;ÎŽ³ãÿS 9äóãßzú´}l‰Ÿä!øù‹ÚÍBªP%e²rVÎÊÃÛ8§ãt?iF£F£F£èY¬@VÀÝáùD>ñÇ+Þ:o·nU¸¡ÍÐfh#éSô)úûÒf·Â8òWþFž¨][»2‘Œd$ ÿ"q$ŽÄýÓ›U±*V•ïøœãsŽÏqwø.¾‹ïêyŽæÐš³ã^óÆæÍq@hlöìKóßqü?RwGGÍ<«®IEND®B`‚routino-3.2/web/www/routino/icons/marker-33-red.png 644 233 144 4143 13061246466 15434 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜIDATXíW}PT׿÷½·Š¥`´¨k3©h­"F•‰ò!èX`Fͬb„b5vÍj’êЊFü¢#j[S˜é0¸«$ƒ 3mPtT†ah• &$ãTvG11®,.P`y÷×?x÷½·;‰N§=ÿìžw¾~ïœß½g—Qù1 ai„;Âá¦ÿÖD©S?¦~ù"I•TImÿ3™Gæ‘yÀ¨™&‘ˆÄu Tg‡¹?çùxþÐzÂÒP f©Yj–E×íÜŸÇó|<¿8¤¾}¼º¨‹º‘J¥ƒ5Ÿó€ŒÃd| dÀv³WÙ«èSj‚î `^ù+ù+#Úm  í4f4шFL¥&ØìØn–ÃrÐÇy=^Ÿãáøˆí¾í¾íþ¯~Éìì¥öR6ÝóÄ3äÂS=OŸzTî•{aJ¾Ãw¬˜Nà„þj»Ø_=*÷È=¦ÕóÄ#{d<åõ9ŸT$IEm¹¡² ² ²€mÕ *.ůø€½ÍÞ¼ÚöÑ6h)m)Å÷‹e±p…\!ÿ`Ëž–=¦—âRö*{ u°² rcåF¶Õèl>Â|qsâæÄÍÁaÿrÿ\ÿ\€~(˜Æßùݸwã€Ñs'MœdÕßo¿Ý ÔùÐùðþ}{÷ïÝùuÜþåþý/ÇÇYulÕ±UÇÌ7Sù±ñ 8ä5òÍ?šoÍ}bÖ‰Y ŽÀ7­ß´€ä•¼pä•#¯XýO¦žLµöõ¿Ðÿ`ÔÓës<ŸíŽv‡ÙU]¦õj½ —Ç@Ýžº=ðEùåpþ³óŸ@rvr6äôäôÀÈË#/ÀÇë>^wä;rˆCrd§e§èÇDLÔßiyZžYß±À±À±À¸·/ðŽæ-ªXT±¨÷†é0¦êP‡:0üZ›¡ÍÌóykå­• ÞoYG»>u}ê÷qµãËŽ/@¼-Þ¶ø×/^¿€Þ–¤µh-`<*%6%6%÷8>"d YB–ü˜¯ºêâªêªj "}oøÞ€:@0p(pÈ ¤5¡5Á ¸º­º .ݼtüñþx+ [­Ó_=ÿÉäO&›õ®”_Š»gtò74‰&Ñ$ù±@ŸÐ'ôɾ*ýVýmé§ûš÷5k?óæ~{áÛ d¬8¬NP'~,Ë;áÚæÚF±5ž O !D\*.%„õ²z™BÖt¬é „W«Æ²Sdñ¶x›’3ªŠ¹ãòÆå‘‘¡QulqoñÜâ¹,Y÷þ“ðXx,<®C¢3£3£3 ‘®JW¥«µÝÆ…ïH?•~JÝÉ_UsîŒØ Üzç…·„· *;*6ßÙ|'äÔŸužµžráMáMO£œQN@ûãæ„Í æ¨ ÿYøuá×Ú ¯/n·ˆ[îäŽêQ>*S?´%ÙfÛf{«x€³Ä9É9‰¥“‹½î½îª¶WmÐ×–ß–Z—6zrGw< Clmkm€ªUµ åFË sÔgû]9®d+´L(ʆ—ÓÉt2ü‹3aÅ›ÆJͧkèše§i-½H/r®hÛÜMgoœ½·ÁÝZ‚–`i`mÕ×D$"0VÄŠL3Kgæ0Ô¾îÚ'œ¦EÚ·Ø·(EF'KÅ]â.g†-‹d‘,ÉnbM%©$U*%.â".BDŸx_¼ÿΧÆj=mŸbŸ¢ÄxÞëZÙµÒ,ÈÒ•uÊ:@#c˜ƒ¸†kܪGõ,Wî;äþ±!}CººÓØ@RÔãÞ¿=~{üvB„ !CÈ çutæ8ý3W¼'Þïц黦‹[¡­ÐVèÞop75#5#ÕÊ]Í©9„n¸ô¢–ßêLu¦:ÓäbÅŠ… Yº±Ëcl1¶˜îaý×Rdè¤icØè S¯‡êöH[’-É–ä9oán‰³ÄÂÝ%F‰1i´GÚ#“‹èD'àŽêŒêŒêd« NF ÑBôë¿£â‡aø"ȳˆîæÓüe«i-­¥µVÜM&w•&¥Ii2™;??ÌĮ̀3 .žωçŽ'sªéÔ ø#ò1x“»>Ñgán¹½Ü^®Äxj=µžZADÀ¸¤œ ÎóÚ‘NK§¥Óú_’¨Ö°ºús2öyÃ…¼®s÷¯?ÄÝ´œ´œ´“»îdw²;µ3c4æÑ¼e{B˽au)ù/åyÜ]*–‰eb™w>œw ï@Þö‡Ä‘Ä‘Äå¶1jŸè}Ω¤†Ô¢_;¢'¬^ù%œ»ûCõ´ÑMtÝdY¡Í¦S„)%”Prùú´ÁiƒÓ ÛÄ6±^ÔsÃ&÷“ã[&É$™Òç¡æ÷ &0´‘6ÒÆ‡?}žà›LWXÞçŽú?þl—;ëHLŠIEND®B`‚routino-3.2/web/www/routino/icons/limit-3.8.png 644 233 144 2532 13061246471 14600 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–oHTYÆVŽfZŠÛ_¥Pb·Á±u÷C+(Ú:lf‚!iá—Ê-KBD([KDÿ0¦µõCµ”Xm Y± YÖª48ý©IÉtÆqš{îù퇹×{wk¿{¾Üû¼ç=ÏópÏ{Þ{!„˜g<ÄfÄfÄ&GqìV<¾$¾$ë÷(>.!f]̺¿‚¹GçH9“rF´°9oæÛ× añÛõ̸˜'¬€ã¼ã|L¡÷CyvyvügQÜpZZƒl½´õÀ÷7;ÁwÇwà]á»B°°9oæ›ëM>;¿Øÿ}!`Ö•YWbž‚#Î',]½tufm4a(Ö®Y»à北3T,È·Àæ¨B`œqÌ1lÃæ¼‘o®7ùL~SÏÔúVV ”V”V$4E 6Þô=é¦^¤8Àæ€6®ÈJYIÔMu€bÀÂæ¼™o®7ùL~SÏÔúÿÞÛÆbTY\YˆÜùT>=¤UhD´'Ò!(½OïÖ»±F A ê¯ô'úОËÙr6JÅiÛµíD@¾–¯Iƒ_•9ʦÁÆbÛV !Ä¿B‚/Á7>“ˆgÒ39Åÿ=?ËÇò1t0̰ÍÈasH$‘D+¬* @=õÔÛò¹ÊU Mî’»˜˜âyžLé~ cÇ»`Û¾mû Zz"2±jG ææC£»ÑÝè†^o¯·×kûB£ú¨>jáû'úúú ev¶Å§þŒ´FZ†ž©oø1Œõ÷-ïA}  j ‚°·Î»Ó»R¥J=åKÊ—”/Åj±Z¬àvæíÌÛ™–¡öÊöÊöJHËOËOˇM®M®M.H¿•~+ýô\èiîižJëͦ^Tßô3SˆäŽäç7B !¾wÅݘ&c§…ôÉQ9*D}rýÂú…B,r-r-r á=å=å=%Dø^ø^øž˜²JVÉ*!²²²…põ¸z\=Bx:=žN!BËBKCK§Òâ!„ˆi› }Ó¤$¥$é0üjø0bû_Ô^µ×úP Áúk믭¿ÕÕÕÐ]×]×]gåÝrvËÙ-ëËõåú (X, BÖî¬ÝY»¡Cÿ†þ ¶šmÆÐ7üHîHîPçÁ·Ò·¤½`smç.Ÿ» Î*g•³ÊŠçÆæÆæÆÂ‰¡C'†¬xñòâåÅË¡Ö[ë­µÕàŠ·+Þ®x n—»Ä]bÅe™ùÕ7ý|\ccS5ÖI'á±cÆAá±Âc…Ç ©4©4©ªoTߨ¾/ò^ä½ÈƒUGVYuº6vmìÚÎç€sRN§œN9 ›G6l«>8?8Ôµ€0ß}ºÆ>>•§ä/íºvÝ:EÚ×ZŽ–þ‹þ‹þ‹ 'ê‰z"¨I5©&a$k$k$ h£6ïïïÿÿÿPŸ«ej™ÅÇSí¡öЦ÷éSiëcS}Åè33e¬aBý¨ZT‹­_©"UÌg>ómñ•£r@µªVÕj‹ÏVy*øR”m}lÒôÿ·Ù:?eñeñ€FçÀAé—~"ª]=WÏQüFM@ˆ &@=SÏÔ3 ³j@u*¿ò£¸¤§ê©D@>iòzwþiû¯œ¶·‹i{›ž7Ø÷(\/ûh„IEND®B`‚routino-3.2/web/www/routino/icons/marker-2-red.png 644 233 144 4025 13061246465 15346 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜÊIDATXíWmL”W>ïÇÈÐ¥;+af­A×Ȉ®ÎZ¡3H@ýRÅ¢¡»&‹h‘6¡5F)SVÙHÒZ»kj2`Z²kº[7¬ÁÒdËZmê¶óÃ,3DјŽhؘ÷Î}öÇÌ}ßw&«f³{þÀ¹çžó<ï¹Ï=ˆâöJ2ySš/Í—æ“þ•XȘ70o`Þ@©Ke*SÙõßÑjZM«x˜·‘J*©Â’}Þ&ö‹|QOÔOÆ“7%ó1ók j{“ã —«ê€:Ðû@:$’éDl™“™“™“øÓŽ›;nî¸ ì¼½óöÎÛ@eQeQe‘ዸØ/òE=Q_à=™É…Éþ’wå)yJž[-:”S›S›SË^;3|føÌ0&<žOP @AÓ˜Æ4€1Œa ÐýD\ìù¢ž¨ŸŒ·äÝ'ó#û³ò¸<.ýY(ºRt¥èŠö‹@4 D@Âx>_ÁW@cGÙiv`k´Am`Z¶– °5šGóì(;À<Ÿðh"_ÔõuÂIøögujR¯Ô+õ©­j«ÚÚýµHp·¹ÛÜmZ…N¬‰7ñ&„µn­SëøV`€¹ØTl x:O¸‹»ægàc|_hÝÚ—Ú—oâùA„Åf'ðÁ,·,·,·Ê.6Ø[ì-öž¼¼¼uÂì$ó2/ £ e&ZVákák0313aÞÏGøˆá²“ì$;iDžÀ|t~j½Z¯Ö´Š@gMgMg ÿe¢@DëÕzµ^à,Ïçùf‚ß­ùn ¬]ºv)¿n Vª•ÐTØTì{`VOü)õ#_ïl?â¡Ì¼Ì¼Ì<´=(}Pú ÔhpÀ \IüBû–.€åS˧à“ÂO à­Ü·rÍÄ;¯t^1w˜½ÉÞôú‰¢_ðüÑßl?µýÔöSÆ—± °€B/çåf¢ã¶q›™ÈYv–á?˜ëe×ËPv§ìŽy`'„p·//ø~râJ-·x,‹G¿ciTGuTGD h- "’r¤ó„È\™¹’ˆhàÓO‰ˆÊ.”]0ǯY®Yˆˆ®ö_í'"*¼Qx#yæLDV²‘ˆÎÑ9:gà[ú,}–>ýÊ‹ùÊ«]®WFg¤iFppû±û„6î( Õf7R)€ú@}ÀÜéâþâ~˜þ`úƒ$­?ä\Çu\¸“;¹\„‹æÍ/šQÁä ¹B®ˆ~ŸXh;Ûp¶álƒIVfeÖ$€B^h&è?à?Ï¿ýüÛ`õZ½ÐõM×70›‹, ¯âU“úY?ë7ð.·_n¿Ü®¿€¿’œ’SrF¿'e²NY×ì·Ì±Ø±Ø±˜- î î î2¤ÏKbïÄÞ1ñã±Wb¯À /L@É@Éh¯k¯'u~-Öš"¶b+¶Ÿ/–óšóšóšcú ,T* ßÿ2<ž ‘:¤©C=ãúÀ¯tWº+ÙaQ)Ö]]†Yøàg»?Ûm>â‚HAʲ˲àÅÖ[Àù¡óCáæo›¿Äd޽¯-ÐG]{µöjíÕXD'X§Ô)uÿ¨Šûé!J¶œ÷,N‹Óâû½Hh<Úx´ñ(/ÑçÇüx?áèp@¸¬ª¬ Ê7–o€âÅ 4R0ë"À±¼cy«IêväüÔù»çïb«þ„ze¯ì)•I‹¤E+ϤT®é÷k¯´WÚûR—Ô#õH=B+±_û}ƒ¾A£Ÿì0;lôÀ,fMÃààF¿^ÂKŒÏEx¼g¼g¼pXV‡U«×;y\9®otëÔ*¨‚*T»Áu3m¦Íêqê¥^ê%RBJH ½öGýií²Ÿ²ŸÒlÁ7‚?6k7úUô+`~æÀÙaÃl€­gë^ÅrXŽñ){þ¾ghÏ;¬¿@Óê´:í;‘u0ë`ÖA"Ù-»e·ÔŸ`W#hþ(ñ³JUF•Qébî‘Ü#¹Gˆ,µ–ZK­ï„®ÝÍîbw±Y»±ý±ý˜…]èðão,€ýŒ=Çž3zÛ±¾ÃÕáâ%ú[n³Ø,¶ñ™¸o·&Ÿ´t)åèIJq?OöíÖ¸vƒýÕ®M³i6ƒPì^ì^ìž¡E?üð¾tº?ÝÏwèšÌ3äŒÝÇR¤ø^ ¿4zò‚Ò‘¢ÝOÓ®6ÿ»T(÷QÖ£¬GYÀªÉU“«&Ù2]‹}JŸÒwzƒZBz©LO1cƒ(ð8í¶ÛÛííš-Øì öè—jR0m¼Øx±ñ¢1vÔ.µKíò'þ%Iÿ[ nbžyÁT »ÚýÃã´[¼­x[ñ6C»¾ ¾ ¾ 8sý$¤j©Zª~©9F~˜‚+ÑiOÓî&Å«xïØA¸º¥º¥º…ÿ6..N»¡uH )¡Æê¦nê¦ÄØQ‚)xiô?ZªvO$ûÅÿ”öIû¤}m¡-´%¶BΖ³ål@"‰$úë玈#âˆ)#ʈ2"ý%‘X•rrÿ7³é¿yÈCõëäð52—¹Ìé’tIºtç§ñõ¥¾”“ ¤Ô}êQÿ›é™ ÍÊa†IEND®B`‚routino-3.2/web/www/routino/icons/limit-39.9.png 644 233 144 3054 13061246474 14675 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜáIDATHÇÍ–íOTWÇ<*…©¢ /xr #ŠÂºˆ†Hìà@ã¤,ck¤ Ämñź٤[IV7»®]³°›6™5ئÖhŠX¤‘¤6Ù´ÅB6!,-ø´€H ZÊ£ÃèlaîÜóÙ3·—øxÞÜ|ßï/9ç|ï‘õ¡¯@xJxJøóAþº_{`íëÅ v ¬2¬òæ`]ëºV€øâ?Ðï˜ØÈõ«ûELþÕzF\Ö‹XsyÍå°Òn„Wò^É[›ÄM=ÓÓùDƒ7ºÞèøäÃO>ä×ð}ß÷}‹¥‹¥`b#oÔýßj~i|J_¢º£ºÃ&`MôšhH³§ÙÓ,KçKΗ¦"¦"T8f8âT)àÅ‹±æVa#ª7ú >ƒßÐ3ôƒó$ìKØ'/~ùpÌûÁ†;à­ä·’ ='pšÓÄæÕ¼ê@5Ë zTa„‰¼Qoô|¿¡gèç1·Ò'"Òü"TT€>àïÕÆý©þTÐûýßù¿ÃšTéOôGú#ÐæµYmÔqu\Ç\f™ý )ݯ%j‰øµÿ&ÿ&P¿ òC•·Ê ,úÆVÞ±½1Þ¯7’†‘Þ‘^àK*@¨||ÁW|*^Å«x vÚW RK-µÀ^ö²× +Ÿò)ð'Ns@íSûðQâ?Ò3ô‡‚óÓ""î<_W[WkÐéùwìß ÍonjnB x <2‡6mÚ-Y-Y-Y0>:>:>jæõI}RŸ4ñ°mØ6lƒ–Ÿ·¼Ðòj|l´u´ÕÔSãu™u™ÆÖºoˆÞ)"òŸßAgCgÜKX˜Z˜RG7¼½.c]Ë®d××È É8ç>ç>ç†íÛ·7Bѽ¢{E÷ ?+?+? frfrfrÌnÙoÙoÙÁê±z¬Øsxsò–ûuî×,Ïz=u:ª:ª@ÕçuÈ’hIT—a1q1þ›¿ø~1üãíÖŠÖ h¿Ô~±ý"”u”u”u@u[u[uØíƒöAs€]E»ŠvÁÙ³g̸»ÏÝçîƒÝ›woÞ½yUý¶B_¡Þñ‚ó‚`¥d¥iÏM<7¡. sëWÖ¯è·ywîÄÜ óÚ?þŸwÒ; •[+·Vnk‹µÅÚW—®.]]‚¢Ø¢Ø¢X°ßµßµß…èæèæèf8ßt¾é|“9ÀDæDæD&äÕçÕçÕƒ#Ý‘îH‡èæ¨ú¨zøèêÇ)§0zŒšn‰µÄê·#õjÍ¢YÂnG|n)¶KöÅ_v¼Öñš$üÍòNÿ;ý"ƒw¾ýfT¤8»8»8[¤?©?©?IdGÛŽ¶m"©®TWªKäæµ›×n^Ù’¹%sK¦ˆ7Ç›ãÍñUø*|"ÙÎlg¶S¤àpÁ«¯Š|[25%bý£5Õš* "OÊŸ”‹„;°a »-êœqÆÚçÛçaé_êhé»%;Kv²l©²”[Ê¡f¸f¸ffRfRfR bÅþŠýTžTžT'»NvìÃãð8 ÐVh+´ÁD÷D÷D7L;˜v0 ’7%Ç%ÇÁ‰Þ7ëÞ¬c9twòú¥C—ï…Θq è?–p,Á¼%Ú/~\üqfþ=óÙÌg¨€#à8Ì-Z¾²|eù L?œ~8ý(£Œ2PÑ*ZEÃ|å|å|%pë\‡•ƒ+å+å0ýpúñôc”úV³h /¨ÇêÕCÐOÝ7„OùXTÐWÔïò1§râS¿U§Ô)PGÔuÔuFYåW¹*Wå 4аÊßv²m Ž¨Õ ?ÐàS9!þ¿Œ,,Äüóƒ7’†οl8¯+Ò ü9èÌêsmA[þ˜ L™ÎO§8ªOõª^`ˆ!†€%³¯‹gö=öl¾`ÿdž„ˆ:IEND®B`‚routino-3.2/web/www/routino/icons/limit-29.0.png 644 233 144 3124 13061246473 14660 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü IDATHÇÍVïO“÷=-¬¥¬q^^lC›Q"`LAÁ¹ tYœY„]™‹½ä¸/ˆ{S“Å-5#qY.Þ¹¬B„’‹»"sñ*¬eI„tEÅÒréóôùž½hŸ•ùø}óä|~œs’o>Ÿç °!ò©MѦhÂXû·h<®*®jë¿ÃøbˆÔÔüùS2±3±“$“¾JúJ™Œb5¯Ö¯ï¢üëõÔ86 Ð÷ê{5ål#ßÍ~7;î/aüùMÒ`7Øý2y´ïhI~÷õw_ó8ùð‡‡?ä“ò'åd«yµ^íWùÖóÃöœ>@¾4ðÒ€f–Ôëô:€Lݺ;ýïá‚©t²f_Í>’ü5æ×¡%I2´HÒH£('é£êy¼«ùH½Ú¯ò©üªžªörSÙ¦2€<ðÞ÷ — “=dÛmo¨z’ä)ž¢‘”}²$Cï‡Þç)nŠ›$I 5d«yµ^íWùT~UOÕû‰^e¾¨$ë\u.Rq’¤4*?R¥TRy&ëe=¥ˆS¡ø”%e‰”½òcù1)¬Â*¬Œžzèù Q"[d %Ù-%#)Ž…ùÉ:_ä’ª¯^åÀÜA|Ÿ/V]£®Q’6’ä;¤( °Ÿƒ$•UeUY%i§öuFŽðÜÉܹ.^ÈB’,fËHRT‹j¸;Âÿ׈^DŸ?‡ý€à⛚T6%wB?Þ:ÞJžýôlûÙv §Ã9æ‹ê9\—ÃEžË?—.Ÿœ¹?sæ~4¯´+íJ{»&\® ²+¶Óß駘]™îîꉧMÅMÅêÕ^Ah ÆZÉþæþfòÖé’éÑh\1tº¸¶Ë´ëµ]¯‘f‹Ùb¶—‡.]"³Ç³Ç³ÇÉbS±©ØDæfäfäf + + +QC‹¦EÓ¢‰ÌµçÚsídΜœ2Ãgê2uqíÉ)’dïPï)N„ýhñÊËÝ/wç• • €»`ò“ÉO4—þq±e¸eúá©áùáy 9#9#9¸Pu¡êBjIµ¤Z€ÛS·§nOº$]’. è[î[î[Ƨ?¿?¿?ÐßÒßÒßœåÎ}Î}À+³‰1‰1Ð_›þÖú­Us ¨™©™Ä­x/òŠ´1[tͺfncSàDàP÷ÁþúýõðîµïuîuY=Y=Y=€ùªùªù*peÇ•Wvî ;èÕÕÕ€£ÞQï¨t6Mg‹ Í…æBs€ñ®ñ®ñn4žàNÐ'èÕÅ@M ^@_ /0³!f·iE‡\!Wh~Ñtërt9€ããÉÖÉVlªügeme-pØtxëá­ÀùÂó…ç ÿ€À?d¦g¦g¦IIIÀÆÚµk-¶-¶-6 ˜L ¦)JŠ’¢á+<Û=Ež"`ĹDÀ<”iÉ´`à¯õךÍÂ!š_´â3ÿ ð§;À#?Ž£‡iŽ4~‚4%M!hd`$_O¾ž|¸×v¯í^€xÄ#8³ùÌæ3›Æ‰Æ‰Æ ÏŸçÏóÛol¿±ýP:X:X:ŠEÀü¶y›yPûê¥K–É%ÏJžñCàšûšÐÖÒé?Ý?L%µk!W{ÃS²°w¾t¾”ôŒzf=³ó5óUóUäš´&­I¤d•¬’•|túÑéG§Iîáî!…Fh„†ôv{»½Ý¤(e¢ŒÅ~±ŸôNz=^…ò›ô¦ô&ÉPX¡Z>j!ùÿÈT†Ç3ºÇHu¯DöÌšx]¼ÎÀó{I‡Ä¡èô‰,‘%²HžäIž\·ÇšyœÇIÅ'DIŠxÏ€hˆð·¸æ\s$ið¼¾XΪ{ìOõ/*ÙVw´î()z›YÜ CFR|#?•ŸRâ¿è ƒ‚_²“¤ø¯ø^|OÒI'$Ÿq™Ë¤p‹i1MÒöÍ!%N‰£$Æd¿ì'yMÝüõ±õ±$ƒÏoþ÷_ù¾.^Ø÷Ø‹ù‚ýFÛœP>§(„IEND®B`‚routino-3.2/web/www/routino/icons/limit-8.3.png 644 233 144 2513 13061246471 14577 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–_H”YÆÏ˜9Žäß\ØJ‘òf‹ÿ@] ™YƒEXˆy£¬t±”uQÛÖFHe‚TPiåV‹”˜µn ~ ÓŠkTVk5ê¨óïüöbæø}ní½çfæ}Î{žçáœ÷¼ß „"%ú+ &3&3&)Çühãñ›â7e_‰Äç%¸¶¹¶õ†ä³ÉgR›R›¬A;Öó:ß¹^›ß©§q‘"lÀ}Ý}ÝUBENENüw‘ød7xÚ'¿8ú}!`áÝ…w]ƒ;Î'd•d•¬¨$üµ¶nÞºàõ‚× T È÷À"©" H=>8b=Í×ë5Ÿæ×zZ?âG@úºôuB@ÙŽ²žK‘ƒ-°?c†Ö ·Ç9Î"0ƒf@î’»˜Õ­ºpá;Öó:_¯×|š_ëiýˆ1÷l6 ÊãÊã€0@øÃr¬7f‰YBØ|%dJÅ)—raàœÃ Y_¬/`K·t£¬>3ßÌ' rDŽ3Q~­§õí£Bˆ~OÀÆ2éúmReÊr'“£•V‡‘h’I&Ùà€.ºèrà?ó€@ºÜ'÷1©ù ùÇýã0«õ5vþ1ì>²ûð€•ËÂðTxj–V½h|qæÅ8Ùw²ïdFQàØ¡‡ÖCë¡nÜ0¸šššÁ7äð Ø|ê}x(<|‰êiý¨Ÿ¨1_\ý|õ3X‘:©ŽLw vø:|^˜^˜^•ÞJo¥2žd<Éx½Ÿz?õ~² ½Ìz™õ2 ÒN¤H;Ë*–U,ƒ¥j©Zªàé÷O“ž&ͦO[‡µ^D_û‰"©+©+o­ëŠ× ÏÅs×¥èI «Ûêµz…ð4{š=ÍBx ¯á5„ð?ó?ó?"”Ê åˆÙaî5÷š{…8f³ŽYB,ñ.ñ.ñ 1tzèôÐi!fäLìLìlº[ü)„®KZÖ¤&¦&Zðá͇7`UÍ^{ZÚZÚZÚ ?È@ñDñDñd×e×e×±ÞXo¬wÔR<ñÄÃxh<4‚íÛ;¶w@fUfUføR|)¾G ÜÑz}íG@RWR—º‚@ÈBæŒÒîÒG¥ 6­6­6ÍÆWu®ê\Õ ííí6Þ´¸iqÓbÈ_™¿2¥çåæåæåÂåû—ï]¾gãr§þÑ×~¾ª1•8·ÆÎ ÔÔÃêàêàê ¤^H½zjŒ£Æ€·7ßÞ|{ÖT¯©^S ÃÃðñàÆƒBbYbYbT•F¥¡«¡‹¡‹êšºÆ4yß®±¯o%Ñ[ò›yżbߢ©É©±©1}7únô¨&Õ¤š@µ«vÕK>–|,¶°…-`Þ0o˜7`ôÖè­Ñ[ •§ä)›~³Çìqè}ûV:úXÐ?æsô±µæ9ó“ªMù•ß>• T°œå,wà–²”ê:¤9ðbµGí²åQyÔÑǦüþ‰ÿícŽÎO¹»Ü Hˆvþ~ÙTÉÇò1aõHªQ÷¹Ã`‚qÆA¨5L3ÅpŠzêAý®^©W(.J%a†4Só—Ç—ÇëšÓùçí·rÞ¾.æí{l~¾`ÿ}ìc²ø-³IEND®B`‚routino-3.2/web/www/routino/icons/limit-19.2.png 644 233 144 3030 13061246472 14654 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÍIDATHÇÍ–ýO”WÇÏ 88•ƒ`h”`h7¾„‰`âj¢›,¥T1­EC·ÒdmB³m0/Á`ªÄ,%i¶ÄJ`W"¾Q«Él!ƒ-!eCÓ¡b©¼ŒêÎT2ð<óÜÏþ0óÌL»ÿ€÷—'ß{Îù~Ï}î=ç^I‹|¬ÙÖlkJ[ÿ›_øêÂW_þWË6˶ÿ‚ÔOS?p|áøÂø!†M»é/ã×3ç%MbII–Í|v:w:f†ñÉn°_¶_~¦Ã;]ït\j½ÔÊ_a²w²àÉæ'›!†M»éoÆ›|ñürôwú"°àÚ‚k–Ÿ!É–dœâœâÜ÷Â?åBùë富%Œ%(+„¦€d’Õf @sLÇaÓñ7ãM>“ßÔ3õÃùd¸2\"ðFå•ö3á€Úáƒe,3õ´ËÀqŽ“ z@„Þ ½É¨nÕ € İi7ýÍx“Ïä7õLýp>òÛ½=UD B«Ð¢ yŒ?k‰Z"¨Cú}ý>¦E3†ÏðþXŸÑg@PÔbã¿L1EÊÑ~Õ~EÓÖ–iËÀ˜ óCÅXÅàèG·2 "²òï`ÿÑþc †‹†‹ ô¥êŸú´>ÍlTá‰ò)p˜ÃŽKdûØlb›bÓʯüÊå8Ç”K¹˜åX„_óz¼{À$òM8ŸÈŸú¬j>¬ù”ÀÈ7‰»ë»›º›P#+G^y%&xgêÎÔ)hZ×´®iŒ ÇìÆmã¶q;† Z­pºñôÉÓ'QƒÿX9°2ê¯zögìÏæÂù×EDnÿœûäÜ'ÑuVwfœ»~î:s _&t$tÀ•Ò+¥WJÁwÂwÂw–,/X^+7Vn¬„üù+òWÀÞ‡={b õõôõôõ@ò|ò|ò<½\ôRÑKS¶ôéÒ§Ì}}´~´^UC×Þ®½`¤‡ó±Š5¥.¥®`½ìw ¹†D°‰ˆXÎÈ£„Ô„TIZì]ü`ñ{•½Ê^%r«æVÍ­‘̼̼Ì<O‡§ÃÓ!bsØ6‡ÈUïUïU¯DÇèÁу£Ej[j[j[DÜ÷Ü“îI‘E‹SÖ§¬—¤;»<ÍžfË‘’ÏK>aþ…þú Ö 8^t¼h Áôøô8„\Ѳ °³°³°ZÏ·žo=ÁÂ`a°V¹W¹W¹¡$·$·$l§l§l§ }Iû’ö%üßèÝл¡w8×:×:×Â^½j¢jÔnSo¦a¦¨N«M«5†¬¢Œ.£Ë2$¢oÓ·‰ˆMDD2Ì«q5¦ÆD¬mÖ6k›H0;˜ÌY}dõ‘ÕGD¶\ØraË‘ôíéÛÓ·‹d—e—e—‰Ì®™]3»F¤?«?«?K¤ØUì*v‰ìIßãØãi>ÐüZók"F‹©§=ÕžŠÈ{*GåX†¬b  úDnºoºEä""¼Ék>yIrJrŠˆ”I™”‰8Î:Î:Ίøëüuþ:‘¦’¦’¦‘êÁêÁêA§Óét:EʓʓʓDn¤ÞH½‘*"9’#9"÷_|ëâ["K/e5d5ÈüWÙ7Ü|ÀÛ"÷ºïÞ苯Êk>¾2«Òh4Áÿ'ÿ.ÿ.Tм¼Ûš¹Æ¹Æ¹FðMø&|ÀV¶²Œ^£×è…ÇmÛ·ÁlÚlÚl<úæÑ×¾†ñ‹ã߇šhù¥ñ—FV›zïjïjÀn³*‰ö±Iûd ¼!o(ª_Êœ±ÓØëcü‘|òAíV»#ç#\Çy*Oå 4Ðw¸ttôøÓ¦rUn”¯~×ÇøM‹ëüúŽ„ ±ÎO¦îÕ½À¡ÐýP\çç0ñ¨^åQà.w¹ Ì0Í4(M=SÏ€ãJ}©kº†¦¾ - -Õáo®¨¯¨7¯¦øÎÿüÞ•Ïíëâ¹}=Ÿ/Øÿ&ðÏm¶£Œ¿IEND®B`‚routino-3.2/web/www/routino/icons/limit-8.4.png 644 233 144 2544 13061246471 14604 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–_HÔYÇÏŒ9:Ò–æÔÖb$m¶¬ÍC(*‰YIØ¿EbÙ§ê%¶ØÚ„@{X#b©TØRŠ”ÌØè)µÐlsi &­Ü’ MÇšRÇùý~÷³3×ßTľv_†sî9ßï÷7çžs¯€ˆˆ¤Æ~œ++‹¢¶³Êö'oNÞüí¥¨}ÖÇ6ǶG?ÃâÓ‹O¤5¦5Zm[ïëøø|?žOû%UlGÒ•¤+Žü˜} v®Û¹.yiÔ®ëw»»ý½Õת¯´5·5ó#îîóƒù`Ûz_Çë|/Ç>âĉ7Ï!É•äUE«ŠVÿ Z ¥[J·¼Lx™ œ`Ž Y¨ò!ôzgëýX¼Î×x_óiþ¨Ož'OÊ*Ê*Ü¢ ÿ€ƒ34_¤¨¥–…`„Œ€¹ÇÜCT·êÀl[ïëx¯ñ4¾æÓüQ=òamë Qå®rˆüæ3óX£F‘QDÄø×L1SPÊ¥ʽ„ o˜bÊv«,µMmCY¹‘Ó‘ÓDÀJ¶’w¿<©‘™£3GgŽÊüræ:s¹"‡vÚ}h·H89œNI?•~*ý”Ç&g¥³R’$SóEùµ§HBiB)Ù"‰‰"Ž*™Ð“_O.Ÿ\.²Ô½Ô½Ô-ÒTÐTÐT  Á€Hª+Õ•ê² ›j›j›jE.–\,¹X"’oå[ù–Hyy¹ÈHåHåH¥Hµã ÆEøUóEùµž"ÖuëºcPÄØjl•ï–~é&jMo]ÒºDdcÎÆœ9" “ “ “"Ù%Ù%Ù%"½®^W¯K$ûDö‰ì"Öaë°uXÄ{Ï{Ï{Od s s SäEâ‹Ä‰"¾aßoH$S2%SDè#Ê/óz>>cê«ÏØ`ÃàÉÁ“Ê å„ í\Ú¹´sPí«öUû p3p3p¼ÞoŒ•••Ùg©ñ|ãùÆóPÚ\Ú\Úlû̓sËæ–ŽõÂ'gìÓ®$Ö%Æ%ã’ÝE³Ó³ÁÙ Œ½{5ö T£jT ZT‹j‰Î‰Î‰N0÷™ûÌ} v¨jÌdÎdÎdÂÔðÔàÔ ð7㌣0)c ¢·Äg»2nŽ…üA0nŽm0Îg˜Víʯüqã!E¥¨`-kY7§Þò–·ÀLï ”¾D¬ «âƒ9føÏα¸É¯'±9?ù™€J³Çì!¢ºÔ˜Cñ'tïyÇ;P£jT/a$Nè/\æ2ŠTó€y€˜Cæ`üïäÿbïÊ/öuñžǾÌì2òÛän±ÿ§IEND®B`‚routino-3.2/web/www/routino/icons/marker-71-red.png 644 233 144 4101 13061246466 15430 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜöIDATXí—mL”WÇÏó2"Š…tÊÌãj]!cŠ6‚ÀéNmµ J &·¦ûADEÓ”7J¥X1’ª¡5® %ã ZC|]0¬h1ìFlv>Ø…™*›Þ„Gž;÷¿fîó<3ÛÕlvÏ8çÜ{Îï¹÷ïÍEìcrv‚7Á›à•žGI³ÚgµÏj/ÌR™ÊTÖ{†VÐ ZDÒ¼TRI>ëó1^ÌõDýØ~rv,™¯Šª¨JöÄæSßPÛÕvµÝ3&í–vK»ukÊDÊDÊ®o~¸ùáæ‡À–Ç[oy ççç¾È‹ñb¾¨'ê‹~/ç!y}¬¿è„üL~&?ó¯+”^‘^‘^Áöž¾súÎé;|N`40 @‚ &1‰I~øát?šãÅ|QOÔí·èÄËùÈ6O”åAÿŸDœÛ9·snkkfff0€¨ñLžÉ3¡±ZVËj¶’­d+æb.æ2ùѼ/æ‹z¢¾Óß6OG“<’Gò©‡ÕÃêáÖb‚³ÁYã¬Ñ\:Øþðšð´Ö)÷”à~Í¡9LGÀ¦2@˜_à`Øtt¾?œÎ´ÖС¾Ÿßà7Ü Îgƒæýà#Ë#Ë#ˣ߮lu¶ÏmŸóž_¯¯ãÑ:öEx(€€µÏÚDÎ=H3Ò ÌqÎqšãßîüv§p´w´rSsS ÈVdôM·kO´'F¿±Â±Â±B@ð>zdÓÑMG75¾Œ „“ÃɆ±Kày÷ón˜X;±Ö Rz¶ô,¬ß·~Ÿ9~õµ«¯À¼Žyæ).-.5 f¬`ì>»oô<‚OŽ©7,–K~ÆhÞÄ›DôKú‘~$"Jܸ›ˆÈÚcí!"êÜÓ¹‡ˆ¨k´k”ˆ¨eUË*ó òVÇ[DD®Qvcv#ÑøÃñ‡¦a³)La"j¡j1ú[Ú,m–6ýÈ‹û•—e5e5e5¡Jš¢)píhÇïøàÛùvóŠ9î9îÀ^u¯j޳ì°wÙ»æxQAQä-Í[  ÷²ãì8ÀÜÎíàbtNrNrN2úÉ.Ù%»f†¢†³Ug«ÎV™$0{zîô\S¿ÐÕëW¯@bmb-øø˜ø'üÐÎhgÌñÂË…—hyyyy¦Ï:?½sÚÐtðfãÍÆ›ú ø{É!9$ÇÌ)«•ÕÊêšzqÊì í í Ù"ßVßVßV½@€ëÅ߯|¿Ï9žs<ðw£Ø{ì=sþmþ6t;‡¼££N° „‚ŽÇ€ŒšŒšŒš°þ(©Jª’úÕ8%$$©·Ô[ê-÷ ~áç—æ—²=¢\¸úyÕó*„àMJMJ<òý‘ïc¶üö ` SÀòY¾)(r9Œç>È}„¿Š|HWüµ¢£¢#Ôw(;”/‰ø‰Ãké'-‹ÃâðÿQL¨®Ýwÿ]c=µä3×Î\üýa\3à—ø¥1ð‹ü¢I‹è.ì.Xyç×_[}î™»Ç݃wô'´^®—ë§ ¥ùÒ|iþoNÇ*÷õóµMÚ&mËo–Ü’[r ­„wz»¼Ÿy?ƒW×îv]3k±ÆãÜ<þ!ÿÐXßA÷`ó`3`ŸmŸkŸ«Uê+yP9¨¬vêh.r‘Kµ¬hmP’‡<ä!R†ŸâÛ{YZ›m²MÖ¬¾û—õ/3k—gñ¬@ ˆŒð¢}/a¯³×Ï)ýKéO¥?±=ú 4©Nª“ÞCi»Òv¥í"’²SvJç£tåsnôo‰Ò¯ô+ýÒ•Åûï[¼ÈRa©°TxéÚÝàÜàÜ`Ön¸:\¼ð à)žâ©I¹KÙR¶ÔXߦ5MkšÖð<ý-·Z¬ëàTÄ·ÍŽÝi©3nëIŠs¿‹õm³#Úõ7´[][]kÒ®U³jV(ü$ü$l<Á¾ÈÂzûûûøf]“Ir’œôÁâ¤x2Ž/^Pšâ´»ùg´Ûåí2´«ui]Z—¡Üi/Ò^¤Ë'–O,Ÿ`Kt-¶)mJÛñuBjQéžF¯0c€(`hwX6i·ÑÖhkÔ¬>·Ïís!„&iõ•ê+ÕWŒkGmV›Õæ¾èO’Ä{q}£qšó*Àx>ˆj÷ÒÒnîÆÜ¹ íz×y×yס%’çúNHeR™T–_ÛF~×W¢ÿÒ^¥Ýl¥^©Wêý+pY]Y]Y?–999­ýMßêaeX®N§Vj¥VŠ^;Š/®_ý¯ÝC±~î?¤íÒvi;@ETDEáeòy¼H"‰þü=hÚƒDJÒ£ôH7¢KâvîÿfVý¿* õAlúãr™Ë\æ€Ô)uJÿüU$þkoÜÎ ÄÕ}åVÿ œH¦_nímÑIEND®B`‚routino-3.2/web/www/routino/icons/ball-5.png 644 233 144 221 13061246467 14206 0‰PNG  IHDR °ÚSbKGDÿÿÿÿÿÿ X÷ÜFIDAT(Ï­’10¡/óçú3:9YÓ6ñV…(JI’P #€Z‘̲ô§Q'¼‘ÆëWØAÀý¼ÜcÍuWxe>ì©?Ú’.wq@0IEND®B`‚routino-3.2/web/www/routino/icons/limit-18.7.png 644 233 144 2773 13061246472 14675 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ܰIDATHÇÍ–ïO“çǯF) R׆cD—¨ J˜Ž`2ƒšC9ìı¸Mt'q?ˆYÜÝöÂ3Ý’9Y .9l v$˜‘€.‚ñR”DÄ1²ÓÁˆ&DÅŽcmû<÷g/Ú§­óð~ó亯ëú~¿Ï}?÷÷¹DD$;ö0/1/1gEcóû‰ùô×Ò_[Þ40m5mýŸ|»à[›ÇæÑ‡±‘7ê“ûEøÉ|ƼdKbÂÒji59cñç°í¥m/¥;¢ñQ/XÛ­ísøàô§ÚšÚšø&z'zî;ï;!y£Þè7ð’ñåó¿ñ‹ÀsÏu˜n%Í’&/¼ú«ËöD n,ƒÊ×+_OOQfЦ€ùÌWN @cL'ÅF>Voôx¾ÁgðGõØKì%"PõvÕÛÖц¡a_î¾\ƒ/Ü|ɗ̇H Ðj´ƒò*/&Lˆ¼Qoôx¾ÁgðGõÈ“{[WN :\Ž º¬ÿ3œN厌FF12JÒõAˆŒEnGnƒJSi*§†º¨‚*ˆÒÌ¡œPamgØö@d&Š¯Î¿á~Ãm¬+Ole@Dde=X¯[¯Ra¤|¤´¸ÔO‘éÈ4ÿÝW“j8Ä!%)¨£Ž:ÀŽ{Òü#ñè ©ËÔ²8ž †/_°¬@jTØÊúØJ5ô@í'µŸ€êÐ_6`¼_xë½õ¨›ÿ¸ùüÍçðÛ¶l‡£ƒG‚¯ÈWä+zzÅFW®] ǯ÷÷‚ç_žýžý¨G~¸öÃ5¸¹ræ»™ïô—aÏ»{ÞÝÕ#tŠˆüº—ï[¾nù:þV»Zí--<6w™1ÿö{‡úÇúÇúÇ û`öÁ샰£bGÅŽ Ƚ”{)÷\ypåÁ• aÆ/Œ_‡âÅ‹7BétéXéÈ¿EDxüŸíý«úW©]pÆsÆ‘GQ=f1g}–õYá+òa‰¿Ä/Bšˆˆé„ÜMY²@,ŽcŽGƒ5ÔP#¢/Õ—êKE2Ú2Ú2ÚD*vWì®Ø-²èꢫ‹®Š„Ž…Ž…ŽI|lpnpnpŠôöôöôöˆT_«öWûEÞ»·«bW…X65¯Z;d:ÁÇ…æB³HêïY_e}UøŠ€-Ó–©ûaúé?@+‰{J›J›J› eKË––-pÎvÎvÎk Ö¬)€²¹²¹²9X¾wùÞå{Á·É·É·éé-ªŸªŸª‡_¯ÀCü?ûNØŒÚ2µvj-²YlÝo¥ŸÖO›ü"‘­‘­"’&""vãõëú>$’^™^™^)rrñÉÅ'‹çç牜Ÿw~Þùy"—Åeq‰ôÝé»ÓwGdf|f|f<±rÍ+šW4¯qxŽF‘UÎümùÛDTy”ÏÔ Mh"’¢wê&¿Y̲@Ùo}"Ý]Ý]"ò¢ˆïÅðB™ë3‹2‹DB]¡®P—Èïï¯H·£ÛÑíYظ°qa£Èúœõ9ësD6Þ|xóa‘²Ü²Ü²\&™dR¤7§7§7G¤jMU^U^\oˆ}1>[÷@÷€ˆ¤Êå¿õ%ŸÊµ€3ƩԿѿ‡¾óðT°+ØìHlM°5Øl…»“w'ïN‚ò(ò€:¥N©SpÏuÏuϸqã†ÙâÙ¢Ù". ® ®C¾Sß ü7Ƨ×î¯ÝoøYC¾Ö ëD †µa-Îï" WéUI>¶NªBPíª]µ'¹S†ÊP@>ùä'}\Af™MŠÝÚˆ6ò„Åø þ'|,Éù#o¦¼™’p~‘áÈ0p@»¥ÝJ8?;x‹·@u«‹ê"p–³œæø“?AÝV7Ô @‹ÕÛµOµO s@sjÎ$ü8ßßÿÙýW>³·‹gö>ölÞ`ÿî‹ÍHO7=IEND®B`‚routino-3.2/web/www/routino/icons/waypoint-remove.png 644 233 144 345 12002775154 16300 0‰PNG  IHDR Vu\çsRGB®ÎébKGDùC»IDAT(Ïѱ Â0…áÏ,ÁX‘¨é™€:NÍL;ÀàZèyym­÷×â~Ö ¸ó›Ì¼ÔñJIEND®B`‚routino-3.2/web/www/routino/icons/limit-18.1.png 644 233 144 2735 13061246472 14665 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü’IDATHÇÍV]LSg~N -­ˆZ8aÿÂB4•Ñ@¥LdÁÈð‡Ý§¨swþeÁ%’yaD§ñ‡lQ0Ù R™âbM¤F1DÁ!Z Âp8 ±¤ÐsÎ÷ì¢==ËîýnNÞ¿çy{Þó>ý@fGŸ -ó-ó-)Ûò•éOZŸ´þã_#vFJ¥T“³ÎÎ:K’sêçÔë}¦mÄüøzÀÄç3ü˜ Óao²7Iî¨}”¬XV±,IŽØ'ü¤£ÅÑ2¡’;½;½$Ù|¹ù2¿&‡;†;HrÌ=æ&MÛˆùF½£ïñdâõÄëÒi·Ùm¹°haQæ7‘„™dég¥Ÿ‘ä+ë+«°$©ýM2™ÉÂMR¡B㼉³x4ߨ7ð |ƒÏàô2­ ­ ˶”mq\ŠôýLžÁn!yŒÇ˜LªŠª¤V©UrŠ~á'IJ”HÓ6âF¾QoàøŸÁéÿžm­‡Ê¦ð¦p¬¡{z~8!œ@Šjõ¥ú’FDè}z·ÞMªªƒê )lÂ&l4ÏTôͽä“úv};ÃzZ£ÖâÛ>YžTžDr8Ê¥KÎŽgŽgJùÜóÜCj/H’%âõú†ï >1&FÄÉÖ°&®‘ZÖ²–¤‹.ºøŸ£õkýZ?)Z´­'†WB%p3p“$ŠCQ"-9}SuwɪUHá#I}¹èÿÞÆ†¢ÿ£þÔþT“èᶇÛn#OtŸè>ÑMöæôæôæ˜qá>á#Å-qKÜ2ýþó~¯ßKñ2õyâóDë/w•í*3F[wׂ6Ƚ†Ÿòå|< ­¼*7¶5¶aڽʽȽÒSí©ôTº†º†º†€uYë²Öe=‡{÷ŠOŸ.> tì:Øu<’GòXƒ5X\M¿š~5ðdx&=“îçܺ?„éÈܤ•âǵÉk“£cDî5 ,)‡R­X…]O ž´€t ¯­³¬³`—ëä:€•¬d% /Ðè g³³ÙÙ ï)ÞS¼˜û`€ÉŽÉŽÉÄŽ^¤éE€”‚R/È r Ф½Ò^Ø£]Âx~n~.¤ÜI¹³b•ÅÖ Ö Ì%D`ô KE^E]‘½%{ 0>8>8>¼u½u½u2dÈ   ±á±á±a 5#5#5ÃlŒ%J@ùTùTù=‘ý.û096éštÅÒF²]±]k©µ”ÙÝ«{¥'€ºQÝÀH‹ýâgzŸÞ$•&•&•ÀêÅ«¯^ Üžq{Æí€½Ä^b/:{;{;{à¹à¹à9@ݧîS÷™ŠÇ¢GôànÄÜiPÃ%áÐ[õV鉥P)|Ô ´ûÚ}²€;¢Ó3ófæÌ̦}Ó¾ipÜÜÜ´Ëír» ¸.º.º.yéyéyéÀ†SNm8z ½…^`¢q¢q¢ÑlÌyÞYë¬?µfZ3oŒ;ð¹ßéw€âVÜ:ã·òHÕ’¿[©ŸÔO’ÁµÁ­Á­!_èz躹]¡¦PS¨‰|=òzäõ)êE½¨'E«h­ähõhõh5©«ºª«f]0+èº)¦ìãáñ°¹•ü½*·*×ÜJºA:†ÃJÐZ §„Š^¦—ÅéØ'b…XAŠÑ"ZâäÁ)œÂIr)—riœ€…b(^ÑD¦ÈŒÓ1îîý¯ŽÅ)¿Zn-·šÊOY ¨’G´mÀT~~ÉÍÜLŠvqGÜ!ÙÆ6¶‘œà8ÇIñ—$‡bÊ¿[ßÍ0Ó´ÍÚf’ß½§ü¡÷•ÿÃý¯ü`oì}ìüÁþsJ\FÖb6IEND®B`‚routino-3.2/web/www/routino/icons/marker-81-grey.png 644 233 144 6122 13061246467 15633 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü IDATXÃ…—P\Å–Ç¿Ýs‡ùE`H(a"òkg’2 ùñ0“<°ž1¦(R„ld‹‚UV¨Ap]A³R’DC‚Ö.–Ä€‘‚‚b1ä!.~ ADH Ì0̽·÷fÀÊ+ËóO×éÛ}ΧÎ9}º/1 ƒj¬ˆie {¹Qn”e†Ï Ÿ>cÞùSùSùS ãy½Âkx ¯Ùžj«µÕÚjY!ÊP†2’ƒ !À 1 ©He…²xY¼,žäp¿q¿q¿ý£ŒÌ’Y2û÷ y^y^y^ÍýÉÉÉd’àø½Â!¶;¸Ôtpö`­óÅ|1_l_^\^\^|dG~]~]~]åØòäòäòdS§å Ë–'¶¿¦*Q•¨JаýàöƒÛ’œ0i˜4L ìX¿cýŽõ€Sw~w®wîwÚ[µïðçôïäqòqŽ>Éܘs_&ÇÈ1r, D |ûÉâÅÅ‹‹ý×ohÚд¡IÈ>8xpðà µoéÛÒ·¥ÄÊrd9²Xð&ÞÄ›P ,R‚±a±ùØ|l>ˆíkëkëkcöo‚¾ ú&HÌž~zúéé§  P(þ"Ž Ç„cJ˜žé™~ôeú$É]Ê]Ê]І6´ù¬ãj¹Z®¶íÒ²uÙºlõ ŒŒŒà÷$¾šøjâ«\¥Ú¬6«Í„'<á žé˜ŽéÀaCà W¸XÀlÂ&lÈ0&ÃàñðœÉÍäfrÃíê³Õg«Ïò/ßn½Ýz»•»á¢pQ¸(~¹ÆÇóñ|ü¾C؇}Ø71OÝŠnE7 õ–zK½ÿóºåšåšåšL`b`b`"«OÖ'듹j/µ—Ú žB»Ð.´b’˜$&ƒ<à³ä,9 12FÆ2A&È@~ ?VÄŠX8!EHRu¨:T O§}§?§'“ä7æ7æ7FïXî^î^î¾Öí6ï6ï6Ï´iãiãiã¤[]©®TW‚ŠAb7zƒÞ 7'ત"©¶a¶x¯à¾ð…/-´ÐhG;ÚÎÂY8@:Hé€Ù”bJ1¥@<¯9¯9¯aaæuæuæuÄèææ†·Fß}kôƼÑöFÛmŒuFuFuF‰ilE½ ôlUîÝºÄØÍö›í7ÛeÌÞdo²7­­c¾Ì—ù®©3Ö댕±ÑšÑšÑšµy!Bˆ"VÕE§'“òZ^Ëkw¥y<ðxàñ…¡‘¡‘¡‘¤s˜Ã\h-£e@ßPßPßðaƇf×f¯Í^›*º*º*º€r¡\(áKáKáK@LSÅTÀ–bK±¥Õª7TošÏ4Ÿi>ó»L£Å«š‹Ó¿“ÇÉÇÙfl3¶|E‡¢CÑ‹` ‚JI¤@R|ßÿ}ÿ÷ý€W‚W‚WñXÆc÷ZïµÞk 7n.Ü ŒÝ»9vàâ¸8.(_,_,_:::m™Û2·e®q’"RDЦb*¦§øTñ©âSXüÂýÂý‘Ó3Ó3Ó3ƒ"ïà¼C‚èez™^^Ý/[3¸ëù]Ïïz¸êvÕíªPÑ[Ñ[Ñ ÌEÏEÏEÁ-Á-Á-ÀƨQ£ú }†>d±,–Å€KK—–.-ÖXk¬5öw!BЃô¬ù§GèzÀyœÇyÄI4DÃ>7ï4ï4ï$¡üsüsüsø $`•Lß¾;}÷‰ûÄ}€Í׿kólV›Õf̹æ\s.°d_²/Ùu«ºUÝ ¸À.¸"®ˆ+«`¬ÖaÖ˜Á fVÛ—ÓŸd±g±g±#4–ÆÒXö9•¿'Oþ_<â5â5âÅ>ïõîõîõÈÇäcò1¬KþKþKþ@kzkzk:[[[詞ê)ͲY6”ÍÊfe3ðUøWá_…㟥 hø 3 GÅ£âÑÕ¾k½w;îv`¼c¼c¼ƒ÷å#òù_L‘ˆD$æ•qÎÀHNó³ÍÏ6?+š M…¦B(å¿È‘ÿ³ëQ×£®GÉ‹“'/®9š>7}nú0_7_7_xæzæzæþ3'¹B®+=LÓÃkóôkú5ý6þþþ(ëõÆz£¸‡‰‘qŽD Â'.äÜæs›Ïm¦Z§Z§Z+~]L_L_L?â£Ô ê…¬ÔŸRJýIR<00[UIUIU dìmö6{Õ¢ZT¾Í¾Í¾ÍÀ÷#îGÜåuåuåõ5 ²Ë^,{XiG@zFzFzÆZiÕü\ósÍÏ¢¥“ïä;yªTN('”ÿwÈ^g¯³×í>CrÇsÇsÇt¡ ]ž–NI§¤S튅ƅƅFýþ“ûOî?ÉöÇìŠÙ³‹´˜:L¦°±þ±þ±~U’*I•zzz”§<åøÁ~Æ0†1`´e´e´4‚FÐÚ`m°6–ÞñÞñÞqü­RW©«Ô¡^ñ«âWůKO3 “0Éö¿!Á¾•έôII7šÐ„¦;aânq·¸ûØGÊï”ß)¿ûíÁíÁíÁl³««+©   G¼{—{—{”DMÔD ÙȆ4¤­Â;ì@@V@V@€ñ#~„y^9¯œWÂm¥óÒéˆt„131ŸhDßJgŬ˜s>Žgž¶rro‘Óä49Ýr‚FБ]»rÒ3õï׿_ÿ>ÜoŠ7ÅCI2I&É„YÔ‹zQ ˆp¶ó˜Ç<L0b½X/ÖÃæHµ[CACAC5ûÚìk³¯q§eZ™V¦­*ØT¸©pSáß"yÈ#—0Œa óœïQÕJø~d"™¤6äjÈÕ«Å r½\/×WÌêfu³:ÎTSS#d9’dÙüáVXñ»öÃ4LÃ4`ôQú(}²c‡±ÃÈöwUwUwUKŠUÞ*o•÷ÄÒråråråëïöçõçõçÌÈŒÌw‡Ÿr'¨Å1^]EWÑî½w{ïöÞ–3—3—3_Wå¡òPyŒ^¬¬¬“7&5&5&±ýä9AN@&VˆbP@°96ÇæÂžð°Þ7Þ7Þ7¢ªikÓÖ¦­pWMª&U“€¸SÜ)î|ý]zŠž¢§&–¥xz‡E;/â<•Ž_™Cu¤HR¼R»BÙCö=ûV~9¾½j?n?n?.f‹‡EºwË©-§¶œB¼8 ˆPÒ`Lƒaãsø>²té>Ò ›&wOîžÜ-’o•o•o-þËʡɾ!–Š¥b)wÚ‘Ùsf¬     fgDá˜X­!Gíf9j÷4)!%¤¤åKú}Š>•] =ôÐÓ3uö:{?nº`º`º%¥”RŠ9g$š­ÍÖf«h™(((• ÉOÊOÊOö7ØîØîØîœü`(j(j(Êyøø@Ç>¥pµß>ܘZ tøÞQ»WC¾ù"ä‹âyšì»À.üodA&¹½r׋pŠ˜‡àOäj7hD£ÇjY-«¦5´†Ö|§]Š[Š[Š—–JK¥¥ô–D/ÑKôß´êjt5ºš¿F‡ÃÆaò•øˆøˆøûÄa·Îhù#Š?‘‡j×Ñ.„<œÀ œàþA’I2I¾®c¬‘5þ=Eá§ðSøÑ[’1ɘd쎟X$‰EÇï84pX„ÖaÏù°´þÇÿUxÔC/àIEND®B`‚routino-3.2/web/www/routino/icons/waypoint-centre.png 644 233 144 216 12002775154 16260 0‰PNG  IHDR Vu\çsRGB®ÎébKGDÿÿÿ ½§“6IDAT(Ïcd üg````b øOŠ¢ÿ¤˜Š¡˜‰ZÎÁ q˜ÀHŠ•x@r<¬…Ô¨ ”q†1IEND®B`‚routino-3.2/web/www/routino/icons/limit-101.png 644 233 144 2507 13061246470 14572 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜüIDATHÇÍVkh“W~rkZ‰©-qúC-tBuiK«©‚öbí¦¨U«En¢° ‡ÊD™0ýµ(”:Ä^7S¶F›_Ni:•"^†—IKÕH,¥¬%¦¡—ôËwγÉÉ—uÎß}ÿ„÷=ïsùÎá¼9 óR¿ ͋͋ÍÎdnþʨg×g×z5™ŸÕIÓ6Ó¶ç?¹m¹m$™w!ï‚xiäj]õgâƒ?SOÕ1FÁî³ûLÕ©ü$¹«dWIöüdþs™Ó™Ó9ž ÷ù÷ùI²ãRÇ%~MݺO’‘êH5iäj]õ+¼âËäÇÉúi ئiϲgdA]A]á·É†Br˦-›HòåEšI’Ôÿ&é CV“Œ1F#¹ZOõ+¼âSüJOé'ý€tU¹ª²awÃîœóIÀË_É#‹Ž,RzZ'ɶÐA&b‰IêMzã¤ì‘=$IM¤‘«uÕ¯ðŠOñ+=¥ŸôƒŸ­g=٘ݘMrŒ$µ{¤È¹¤¨Ò®hW¨ÉïåEy‘RY–ÅÒ-Ýd"œ'¤üN”93dÿSbCbCúƒï1¶CÛ¡)ƒžõG ËZ)rscV²_ô‹4áFýµ¶F[à Ù.ŸÉgRe,cÉJV²2£^ÏzÖ“lb›H}ZŸ&e»|.Ÿ“¤¸,.s"uÜÉ~½_'Éœ¡œ¡˜UùI;û¹ÿÄþŠ]”É Ö¥u_ÜóKÏéžÓä«à«à« á£¯­¯­¯‡ÏAZYY‘¾°/ì “â€8 ÅÑâhq”,m)m)m!‹N*:EFMQSÔDv::Òê±z¬Òû¹w­wmÚo\_¥ô¼QoT{|Ø 8»Ýå«0¾®|]9€oÀtžÙ 1`QDüßò¯æ_æºæºæº€À‚À‚ÀÀÞkïµ÷Ž?:þè8P T¸^{½öz-°$´$´$ä/Ì_˜¿”RJ¨°Ã•Ôªj«jåÇ X¶X¶Ðš¬ñ¬ñ4`T®e3›æ–Àv‡Ýa`êîÔÝ©»€|!_È€ã¡ã¡ãagÀp€‰Õ«'V5 5 5 €û¶û¶û60™|?ùÞèÇDR°Ý°Ý”3 nŠ›¦¿ ››Óí.ØFØÀs„#4]Ó5(xZð´à)0¼txéðR`pïàÞÁ½ÀÛŠ·o+€"O‘§È“·ÐB €~ô¡/ØHé!±5±P~Ì@¬:Vý瘃ÝÁî4Í—øLÚ¤ Óéèuö:{©sSç¦ÎåååÀʼ•y+ó€ås–ÏY>ØîÚîÚîj®Õ\«¹–±“~§ßél_تlUéò4JSzÞ ÞÒ~þïV2ð&¼Æ­«[1¶‚Œ[ãÖ¸Õ¸m¢U´ŠVr42bX ‹a’~úé7úÒx{¼0^HI ðìúè­\ÖjÌ5WÔœ{ÄNP›qÿñ‘"&b"c<ÈfÙ,›õt¤ñ)¾4ÿGçØ&¿¦&¿þZMr¾~T?J'ØÎvc±“ì åùD>!`»83dÿ£^§×eLþD£¥ÑòÁÉ?kÿ+gíëbÖ¾Çfç ö‘ÎÜ÷IEND®B`‚routino-3.2/web/www/routino/icons/marker-61-grey.png 644 233 144 6161 13061246466 15633 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü &IDATXÃ…—{PÔG¶Ç¿Ýócž@@ ÌdH ##†«¼Ä++Ô(7jmp Mba‰1>Ö"x7%’lB®YrÁ˜€è51Q‚lÀÕ±2%’P<d ( Èc†™ùM÷ýƒ°ÜJåüó«î_÷9Ÿ:}ÎéÓ$#####^˜–Ñé])Üî wyuÆÙŒ³g¹:ó—Ì_2YĽ¹7÷Î~CÔˆQ¾ËZn-·–óQˆB’4":л° »ø‡²M²M²M$Mx <Ü.$#d„Œ:yÔ÷¨ïQßÚÖ¬íYÛ³¶“Ñ_ôýÉúiVïäò¢3€‘ˆD$=Ç2Y&Ëdõ¶ Û„mÂgifEfEfÅ9“mÀ6`¨¹5::þU®*W•‹Êð¸ð¸ð8’ááá,³tÎÒ9€kìúïZïÚïÒ7£ßiÏeßÅã✌âžÜ“{²WÉN²“ìôÏ•øKü%þÿ<5ñõÄ×_??gnÍÜš¹5ŽƒqqqÔ¾¸eqËâ/K“¥ÉÒ0‰Ã8ŒÃPb“˜„$$xÏàLZý¬~V?Ä·ÔµÔµÔqûµÀk×ÙÁ‡k®}¸vÛß•þJ¥ÿäŽŽŽ±¹<™'ó仯Ð(rdêÈÔ‘)u¨CŸ‡P.” åul›Åfy~ƒîEÝ‹ºÅÈ„ý ûö ç¼Ì^f/3t˜‡y˜‘빞ë! èàw¸x„Gx`!b!@ºH邈! a¨ç¨ç¨'zJ>-ù´äSñÕž›=7{n ßKR…TÑ[%n7‰›V%bVaUß8U…pS»©ÝÔû×dÕdÕdÕót º]‚Ÿ¼=y{òvá{/­—ÖK‹y,Œ…±0€ía{ØÐB -@®+ä @LÄDLé#}¤ ¤‘4<›gólŽ$G’# ðZâµÄk æ¹ô»ì¹ì»x\|$³:³:³zýR›Áf°ª žãžãžã<`·i·i·‰¼Î{÷:Ê’Y2K†'¤‘4Àxo`V¢…(¹ÈE.€X€‚„ :è PzÔ|_ÁW¤4˜G“F“F“À 4š 0{˜=ÌÄ(FH#6DPÈyà_ÿh¶GÛ£˜Û1·cn#Î (eëØ:¶žô=EOÒ é„¸c½c½c:ïtÞé¼°ïØwì;K±KÄ"±îã>î#µ#µ#µ@oioioé X4‹fÑðôúÂë ¯/ iŠiŠiBœ‹ÇÅGÅ1@ øÏÝÞCÞCÞCøpIÌ’˜%1$ßé')ý–~K¿óóó€s¹À T^©¼Ry8Óx¦ñL#P4X4X48ë`ǸcÜ1X?·~ný(™[2·d.P{¼öxíñÇN"9È™I—D/‰^Mò]<.>Á:l¶ãtÐú õA둦hP4(0É&0J*R‘Š@eHeHeðôÇOüôÇÀëñ¯Ç¿ôäöäöäe†2C™°è-z‹xàñÀãpÞÿ¼ÿy`üÙñgÇŸÂRÂRÂRf9I6É&ÙWqWAPœVœVœÆäüóWÌ_´¦á¦á¦ad xïã}H/Ò‹ôâÌ~™ ÐzÐzÐzxü øA0àÞäÞäÞ¼·ð½…ï-äoÊß”¿ ¬õ[ë·ÖPlQlQl4÷4÷4÷€·|Þòy˸0uaêÂ`‰·Ä[âó(Є&4=fÿ5ú} @ P@©D#ÑH4¼Ø¼Ì¼Ì¼ Ýö~{¿½çŽR”¢'Ä q°,‹x¹â劗+µ¯ÚWí #c#c#c€â„â„â  S…©Âa¯°WØ p ·pËc ÃÆðLùâÎYÉDÓDÓDº©Žê¨ŽSùGòä‰9ݾݾݾ¼øÇÓ?žþñôŒ /ä…¼³Ål1X}mõµÕ׀жжÐ6`Ë©-§¶œˆñ#~@¯ªWի¿K%*Q ÀðxÌ¡;ضc¦îZz6ölìÙûýÆ~ü¼[Þ-ïs(€„£…B†!d´ÚôÚôÚt‡nD?¢ÑC)“ÇÉã`VßTßTßÚ·n?Z@;¨Ôh@ÚJ[ië,hÜÞ¸½q{‡Æ¡qhfC«ù^ó½æ{øÓ­ð[á·ÂéUÅÏŠŸ?O­e~Ìù%þI²C²C²ÃâCi!-¤…=FÑcýXëb];mÊÊÊ@ýÕú«õWù´([”-Jy7{7{7ÃÚÚÚh5ZV ! 5¨AÍlVû§ú§ú§‹,‚y\9®WBYå[å[å+êܺݺݺb&fbNgd9YN–·½9]g?Ittttt4/˜¾I„¿Ò#ô=Òó6]C×Ð5æpÇ!Ç!Ç¡õ©¦1Ó˜iL\¹ø³ÅŸ-þŒ¾£ÈSä)ò`fÙEv2’E²H=ôÐ?Ö”˜a†`[ÙV¶VâI<‰'Te²2Y™Ì‘z·ønñÝbá•;”;”;вôf½YoþËÿ=Lz˜ô0‰\€F™èêGU0Á“ØŠ¤ …”•••ål–ï’ï’ï*ÊY0²`d0Z²¹dsÉæÙØ%Cdˆ Áêº*a–Ù.Šk¸†kÀ©–j©²cƒ±ÁÈWÿPòCÉ%’•Z¥V©û¦lçlçlçÞþ õhëÑÖ£7r#7â)§/] “ÎïEæÎÜ™;žj¾ß|¿ù>`K±¥ØRÞþ@å­òVyß½ØQÑQÑQ!É©ÞR½¥z _Mö‘}ddì+öû  ( øãc‰HDXƒÆA#Šj‚k‚k‚ñ”j@5 Ø2¶Œ-{ûƒéÐë›r†bž3×Ö».âŠjç“DæJRgÝÍ™Ž5G*‰$‘$rõæé'Ç?Ëì{ì{ì{ØŸ·±ml£+[|lñ1lbí¬µCIÑEt¬bš˜&¦AvBBBïX8°|`ùÀrI§m“$K’%É×nê/ë/ë/¯‰6v»Œ]ä̇ù0~Ê©·Â 8ù[¿#OÄ®³\8ŽböaŸp›l'ÛÉöéy5¯æÕ‡’óóói›Ä$1ILýóY6ËfÙ{î·'¶'¶'Ó€pês5––ßãøÊvÌÄœ ½IEND®B`‚routino-3.2/web/www/routino/icons/marker-39-grey.png 644 233 144 6330 13061246466 15636 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü IDATXÃ…—iPT×¶Çÿ{÷énm&TÂcP#ˆ  BGLÂåRDo™hˆ)ðy¹7D"¡bã Ä©«^Pœð"A"Ñæn"Š‚Ð€¨`+s ´Ý}úì÷n¼eU*ëËîݽÏZ¿½ö¿÷Z‡¤¦¦¦¦¦Â“629ÐP®›ëæºYMêÑÔ£©G™SúÓô§éOWù0{fÏì³þ‡ŸÃÏáçn4T* •l/ QˆB’oxÃÀ}ÜÇ}±Ù^iŒ4FCR¸'ÜîÉÍB2L†Éð¶‚´Ùi³Óf_¼———G´¼ïÆ»‘ÈI¡ÎÂeG§—a–ÑR!]HÒ…:ã¸qÜ8>kIzUzUzUiQkÔµµÿžX<±xbqà׊ŠŠ¨ŒŒŒ )Aâ qXâ°Äa‰`[·®·>oõ7åßÏßÊcåã,|“)™’)…u$žÄ“x·"7‘›ÈírÑxÉxÉxÉ|ÇZÇZÇZsRÄýˆû÷©É¯Å¯Å¯…DIS¤)ÒL`;¶c;ä˜À&lÀl0s1gƒ³ÁQ-êu‹š™.y_ò¾ä-$ ¾=øöàÛý(w“»ÉÝ–ËÌñæxsüÊ,%°„îuôM²ëÅ®»^PC µót®’«ä*ÕåF½QoÔÏÿ‹{˜{˜{¿lõç«?_ý9Wj§³ÓÙéàŽ˜à™'ódžàÐŽv´˜†i˜` cà/x¤ƒtðÀÀ(G”#Jt>|úðéÃüº®k]׺®qõ‰ÄæÁy>†ácV¬Å ¬ÀŠÇÏÉžº=u{êÞ–·åm‹oŽÇŽÇŽÇÆxýäõ“×O|TBTBTBWÍLÌÄLÐ 1BŒ%™Gæ‘y &Á$ 1$†Äp‚œ0el€ °€};f_LÄDLÐBZH ¡#„B ,ª.ª.ªæ£ÚÛÛ¹jE…¢BQq´‰åF¹ÑOIzMzMzMäc£±ÑØx¾Q©Sê”:æ±ihÓЦ!ÒhW`W`W*|)|)| %Í¡94ç?2fÍ üà u¨˜™™™ ݤ›tB‚^n@øDøDø Å´˜C7²ydóÈfùÊ|e¾’élu¶:[¢‘I‚$A ¢Ì›y3ïݱ¦pS¸)PÝRÝRÝB„P" C”TMÕT t;u;u;7Êo”ß(ö>ì}Ø  -hŒd$Ä‘8G ÿNÿþ;ÀMz“Þ¤ÀÃØ‡±c§aM€]®]®].$ªªªˆ°òXù8Þƒ÷à=‚7ÙŸ²?e {ý—ø/ñ_Bò ‡zðÔ:PàBñ…â ÅÀÕCW]=(5JRŒxxx^^^Àª¦UM«š€Û·ne¤Œ”`Zë´Öi­ÀXÌXÌX v$ìHØ 2'2'2g*Ñÿ…þ ý’¼Ë—.`ï¸j\5® Þ„äÑäÑäQaoéòÒå¥Ë™ÕÆ­ †NC'cɉɉɉŒ]«¾V}­zj»z=ôz(c)a)a)aŒégègèg0ö}ò÷Éß'3v.ä\ȹ—ë;u>ê|ÄØ·O¿}úíSÆúúúØ«6nå±òq؃=ØC¼é z‚ž˜Ú™”±16ˆæ‹æ‹æÞÛðÞ†÷€™¿Ïü}æïÀÝ£wÞ= ´|ÑòEË€¿Ê_å¯DÇEÇEÇC‰¡ÄPØ¿nÿºýë/µiûí¶|ÅGOâžÄ=‰ƒåyŸ®§ëézùÈG>ñæDsDsDsØIÝRÝRÝRâϯã×ñëð_\<ÏŃÑZCk@|¿òýÊ÷+@+×ʵràäÏ'>ù3ð\ñ\ñ\üYðg€x@< ‚·o ÞTì­Ø[±èŠëŠëŠ´—´—´—ƒÁÇà õ¨Žp„ƒY@EãMãMãMè¤Q4ŠF±“T¶O¶O¶ÏîœÝ9»s6;ÙÐÐÀ¾ð…^¿C¿C¿¸«¿«¿«ì7Úo´ßìÖìÖìÖ[M[M[MÀ —.7\€¶ ¶ ¶ J¥ÒÑW£¯F_È.²‹ì–^~xùaÀ.Â.Â.àr¹ƒS™Ôkò5ùš|@Ó«éÕôâY§¬SÖÉgS¬Æj¬N+äR¹T.•¤\̾˜}1Ûì>f;f;f ¹9ÉœdN‚®pEáŠÂ@sVsVsÖË3"u¤ŽÔ¢Ý¢Ý¢Ý€â®â®â.P~«üVù-àyæóÌç™ÀÇÞ{ì éd:™ˆgŠgŠgnnn0¹B® yõ`õ`õ °Œhˆ†hKÌÄLÌEêtÅéŠÓ•Ì•D%Q•<‰‡Ä¢®²³egËΚ·NÏœž9=ÊwGß}w†Š†Š†Š ­'­'­(r.r.rBZCZCZ½‹ÞEø–û–û–uuuÀÎ;wìÜüü[ðoÁ@ô§ÑŸF &s”9Ê!­XS±¦b0Ñ»ªwUï*Z/É‘äHrî¬5õ˜zL=I&²ëᮇ»h@æ???©³+++™Ÿ°²oeßÊ>öVäƒÈ‘È•ž}=ûzö Μ=8dÖ³Þ˜õ0ÏežË<€Ô“zR@T@ii)ð¨ýQû£v`nÿÜþ¹ý€Óa§ÃN‡1qÛó¶çmOüõXû±öcíøEÞ/ï—÷¿x{²‚þ ° ZÿF'K™¨‘î§ûéþÞ­B«Ðo”wÉ»ä]€z±z±z1ó½³ýÎö;ÛQæúë7®ß@0008{:{:{Ä—ø_f˜aŠP„3ýgúÏô ü5ð×)@®Oק냼Z]­®Vóî’§’§’§%£dt§@BH iý²‘lÎÙÒæ™ƒ&ûFn7É%¹$÷ÊHi`R%áÑC¿\øåÂ/øÍÃφŸ ?ƒœ$‘$’pL8&pp@"ñ¥ô{À˜À`°H[yþ»óßÿμuø‡á†àJ]¥®Rײ ¯,¯,¯¬/# iH#åè@:ø•Ö~Tô ‡¿‡D$"‘Túœó9çs.û}ÙzÙzÙú²ŒáÕë‡Ws#gNŸ9}æ´y«5 ÑÑÁ`©d˜­‹XÄ‚ÑzZOë!½®¹®¹®ao545454‰² …ÃãÆãÆãÆãÉ™÷Òî¥ÝK˜†i˜¶/ÅVÐ ËxB˜&L¦Á¶¹¯¹¯¹0&‰É™ {…½Â¾ûÄýªûU÷«DÙ5kjÖÔ¬ao‘-d Ù©%³ 6° ÀFÙ(OxÂC߯é×ôkPV»¨vQí"Ø*´ ­B K…¥ÂÒäÌIé=~a‘¢åÂb‘Ö@¬·¼’H-Sˉ²Q‹ZÔš·’edYöÖû“¯—Ïš6›6›6 ÿHøHøH ¡~ûýöûíGŒÐ&´ mÓt]ŸÂ§ð)ñ<âyÄÓì¥ Ñ†hCDí²E²E²EÙË'ÿ4IõBž'äq-'ûë‰eddddd@gÍ(,_LiȢݭí$ÈràÊ?©Šª¨*© H@=Teª2U™øÍ###SJ)¥µfâ¢þ¢þ¢^˜xœ÷8ïqž¨]¶S¶S¶ó^µ¡×ÐkèÝùcû;íï´¿XÝ-ÏÉ­€V¾)ÐW€­ äÿ²h÷¬O…O…OEöû²M²M²MeÃs†ç ÏáFN¥žJ=•jÞjéèm[ZZð³ºQݨn$ëämò6y ¸ î‚ûß븹¹õoxyyÑ!K¼ÿ¶V¨W¹Dø o™¶0 “0 ùL»P»P»ÿg~ÍüšùµóR©‡ÔãƒCÏV>[ùl¥CÅHëHëH+ûßæâæâæbó›c¦1Ó˜I”(‡ŠC¿rf¬€¯†RHE]†„¹Ö°$Š•‡àOì´›ŽÔ ÆœÆ*Y%« ï gèzæ7Ñ/¢_D Åyâçìµ~{íÿ^g’•••••5fÍ2{¡¸»Ü]î.ÓgÎ:ušyå å å m ažÌ“yæýïÍ{óÞ¡ûlµ¶Z[-û å(G9É@0‚  ½è°û°}%ß!ß!ßA2¸'ÜîÉír2FÆÈØ_˲e/Ê^ÔÔ•›’›’›B̼?ïÏû“ØYñº“KMç#‰HZ)æˆ9bŽxÝ>iŸ´O¾º6§>§>§¾ò¾Ýl7ÛÍ7§VO­žZú©[[[BcBcBcHF˜4L&ÖjÖjÖjרõÜõ¾k¾ËßœgÇçø*La S>ćø€|àƒ)ÛbÛbÛblë4t: ÌÑÜÜ,~2òÖÈ[#o%£òWù«ü×)„T!UHÝRÀtLÇtw÷Ð7IæLæLæ  0,~…«åj¹ZÃ9û´}Ú>í§Ý¤Ý¤ÝÄG&J:”tˆ«T[ÕVµZ,À,ÏY ‡>ô¡À<ÌÃ<˜À€ ! ý¤ŸôƒÇ3<Ã3pw‹»ÅƒÕ…Õ…Õ…üžÁŸü™k‘)eJ™òÞe~¿ƒß±q6b#6>ú•*Û”mÊ6@ê%õ’zýãÚÔå©ËS—ýâ´IÚ$m¿M—¢KÑ¥p-j‰Z¢–`8.Ž‹ãËcy,’‘Œd€Œ2nÒMºŸQ‡:Ôb¼/ƃt‚NÐãããXàò¯MÔ&jùm®ø.ÉÑçèsô±kímö6{Ûå6÷_Ýuÿ•ì7í7í7‘6õiõiõiP¦eZ¦…;ñ#~Ä€vØ\Çu\0iLPB %ÀLÌÄL131X‹µX‹9÷Š{Ž­ ´VKš%Í’±Ô½Ô½Ô…Y=¬Vb”…ÉÂdaqa”³`ü÷DG”#ÊD·G·G·#Æ ([ÅV±î$‰$‘$WpW€±¦±¦±&àÞ¥{—î]zÐÂ,Ì×Èkä5`¸c¸c¸¸MoÓÛxø ñAâ ÄÅÅá®.V«‹!‹¾}+úb\<.>Êð|Àö{>ó|æù _­ˆZµ"Š”8.£¾Ô—úB (¶›¶›¶›@õüêùÕ󦂦‚¦‚ç™"j¢&jà—¸_â~‰òÏæŸÍ? è»õÝún ¸«¸«¸ Ðé‹ôEý–~K¿›.[±lŲËH‰‹ÇÅÇÙFm£¶QüOHlHlH,2”7”7”70%Ô uBT’í’í’íÀ@õ@õ@5P%T U`}Ýúºõu`ttô9¨°IØ$lj‡k‡k‡õ•ë+×WñÁñÁñÁÀ`ó`ó`3pJvJvJ„í Û¶XP¾ |A98åIåIåILù®÷]ï»í£í£í£È£ø_âKLÏÓóôü\<9ñ!>Äç9À’±%cKÆ€ô¸ô¸ô8 h&h&h˜^3½fzÍ  ~‚ŸàØ‹ìEö"Àóžç=Ï{ÏŸ{¼ëñ®Ç»_ÄñEÀ“”')ORð²Ééûô}ú>€R”¢”so‰·Ä›]°†[íád¿‡ßÃïÁp©\*— †K¸„K òAù |p&îw€;)BŠðB Y…¬BVDlŽØ±¸¨¿¨¿¨SSSs³¹ÙÜ ØBl!¶-hA €(D! ÌéF2Ù>Ù>ÙŽºn£Ûت8¦8¦8Æç,X4°ˆ]è(ë(ë(ðÞÀ˜f;ÙN¶`·Ùmvû…57  sý¹Í~ÄÅÅ ‰ ‰ ‰É$™$XW¸®p]! ŽQǨcîw‚;17{ÚXj,5–F“Ñd4ákÅ€b@1ÀçS$! IÙå\—Åe‘Œ&M“¦I#h-«,«,« "â X±{±÷…Cs\ Kciì  GqGsÇÎ;w °&[“­ÉÀÁ WÈ+ä@ºPºPºð×økü5°‰Åb±X UÃHÃHÈIŒÄHŒ(&ˆðL²{r÷äîÉëWfrfrfr÷···­úÛÓž~ôô#ápèªÐU¡«h‚³ÐÛh$¤‘àZu­ºVàˆwÄ;â°Ð°Ð°Ðç¼’k’k’kÀ§~<õã)àªéªéª 0m5m5mÂÂÂÁ||}|}|ÁÕøÕøÕø‰S=šM†PlTlTlüe—£ÕÑêh}/–d>È|ù@+ZÑúÚ étH:t]9Q?Q?Qï§Û¢Ü¢Ü¢d›c«b«b«ÈU'»Ûr·ån 3333Úw´ïhߘÈD&„J(0\9\9\ <ì{Ø÷°ðöö¼ ½ ½ 1ÕØØˆ÷Îôé;Ó‡UêaÕðÌ[LÂ$Lú–b)–vÿ‘ÒrZNË%mô8=N›þ,ö‹ýbª]ePTÀ 5h ZöFç§Ÿv~Š\Zò;äwÈïÐs@Ø`ƒí9 B‚`áê…«®B ý)ô§9@«õ±õ±õ1T †Cƒ×ʆdC²!€Œ“q2~D$$‚DtÿùÈG>·ØÙæ a³}#÷wR@ HÁÕƒ4šFÓèOj¡ƒ:z²Þ^o¯·ói–ó–ó–óP‘[乫X'Ö‰uäC`3˜Ð….tl€ °@d"lÎ…º_þâò—¿}=öõØ×Ü ¹¯ÜWîûCnP^P^PÞ7Wld“sèG?úù-®~Ô ÷q÷ù.¤#é¤6äbÈÅ‹ù ŠýŠýŠý?äŽyyyq–ê‘ê‘êá°+ yH’‡°¡èÀÀæŠ $"‰`´…¶ÐÈoooÙæÖöÖöÖvI¾›ÆMã¦y4cÿÞþ½ýûÏŽveweweÌȌ̧— è”óz^œ'ÎçÁãÎã;ï<ìéöt{úgGÝ<Ý<Ý<ïžï­ï­ï­—äëwêwêw²Íä 9HB.žψgÀæ¾ùãlœ„'<á1=l6ñCãÊÆ•+ááfv3»™1\ Ã?;:+½G3N): sÕ9q-ÜùK"w[$ÉG#Ñ(&‘$’DnN˜ýå¸òOGš#Í‘&þ)YL“EºaùñåǗDZGì{ ¢KéRº6>ƒÏà3 / , , ‚Ìæs„¤O±R±R±2Ýì¡ù¤E,KÄî„sgÿìÚ±ÜÜÜÜÜ\X]…óÆœ†œÚ=ìÔî §v/ý›võŽzŸf)³”YÊ ¢”RJ1îÊDÓtÓtÓ´8õ¨äQÉ£IŸâˆâˆâHWƒÍd3ÙLG¾é{»ïí¾·' Ö9Oåtñ;ìzAåtðÿNíþóß´ë=æ=æÍYª²ª²ª²„ÃÎŽÞ£SÓ©éÔà m†6CÙ£êQõ¨zQ+jEퟮs»¹ÝÜîéõaaatÔï?]Uåe. ~⢢¢¢¢À;‡LÆdLF˜—™—™—á”°DX",¹ÉËäò€wO>ÝòtËÓ-š‹–nK·¥›ý÷Š;w*„7'Ž ‡$]ºAºAºá/‹Y+ceß7ÌV É F1ŠQÑõ–;Å¿ÌCð;öÚÍzè…lVËjYmT?­¡5´æÿf¶ÏlŸÙ..“–HK¤%´[¢“è$ºæŸkkk¶FûýÆ~ò“øªøªø*ûÎé·Þ 8õ[¿c/i×Y.„lÄAän“’BR®2=Ó3ý_?Tú*}•¾´[r_r_rßä+æ‰yb^Úãž]=»zv³€pús5–Ó¿Çñ/xgÓ’Ñ1%OIEND®B`‚routino-3.2/web/www/routino/icons/marker-68-grey.png 644 233 144 6252 13061246466 15643 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü _IDATXÃ…—{PS×öÇ¿ûä„DžUD )ËË^ñQQm‹½ïXk‘޵zGú£âè ÐöV¬-£TG^-W©U|q1-Ê­`Õ;2¨˜‘G‚ŠW›HB’“½˜`Ç™N×?{vÎÞk}ÎÚ߬½ÉÏÏÏÏχ7^˜áÅÀ-äïó÷ùû¬1ÿXþ±ücÌ¿`°`°`pI$óa>̧([˜"L¦ÌʲÖYë¬ul/*P ’‡D @7ºÑ YÈb{%i’4IÉãŸðOø'íDOôD¿½|÷äÝ“wO¾x·0£0£0ƒ ¡B¨JR_pÐ+N.on0ñˆçŽÓZ@ è›Éf²™üf¨ Ôêã}¶Û€m é¿æææ³þO~P~P~õ³’g%ÏJ&yqnqnqnÀlßÙ¾³}×Üõܵ޵ßåoÜ¿3ž+¾‹ÇÅÇ;3¸€y2OæI? ëÈ:².ô (T* m®4ý`úÁôCˆïkM¯5½ÖäÈIîNîNîæìÑšhM´†,—äIò$y0cv`d0à 3€Ld"@³5Èd ÂrM«¦UÓÊì—".E\Š 9Ï—>_ú|éêod¡²PYè<©cccÝâƒLÅTLuÿnÙ5¶kl×€V´¢5ȃ¯ãëøºÖ“6‹Íb³„,S,R,R,âÓ7§oNßÌ÷6z½P`"&b"¦dJ¦ô ÀLÀ£Å(€p„# Z¢%Z†À< žOÜ;sèÌ¡3‡„îµÜk¹×Â_»‹ÝÅî„4!MH{kÞÂ[xëÑçÞæÞæÞ¸ù»ù»ùÿó²¹ÁÜ`nY¦HW¤+Ò…åª U†*ƒ¿îè舉t&Igt#ÝH7‚G óä<9>ÒGúòœ<'Ï4£Í]IWÒ•àþ‡?àÕîÕîÕŽ‰.ÿŠ÷ï)Þ–»â»x\|¤ ± ± 1u¶­ÍÖfkkhóññaaëûÖ÷­ï#mÞ?zÿèý#8ª¢*ª‚'ÏÅsñ²‘l¼´y˜‡yŽâ(Ž,²@€Ü"·È-ó1ó_.§´ƒv\,ËÅÂhØnØnØZ&” e‹3ú}¾D'Žljã–Åq,‚E°ˆ=µ'Øì @b{b{b;’€bšBSh <¹J®’«Lb“Ø$nYoYoYž[=·zn´™6ÓfS1S"#2"†²‡²‡²ö_ÛmÿèŽêŽêŽ(((v„aGàé]ä]ä]q¢&Q“¨A²‹ÇÅÇ aB˜ö—õ>§}NûœÆÞ˜Ä˜Ä˜DRê|qû™û™ûxVò¬äY PjT°œ·œ·œFŸ>}DuDuDukÖ®Y»f- ÉÖdk²“ñ'ãOÆR½T/Õcícící@¨6TªÖ._»|ír€Çhb41RÚ<Ô<Ô<„½¦DS¢)ñ/ë‘;œ;œ;L÷Ÿw|ÞñyÌe&‡È!rˆÆç¬êrÕåªËŒK;–v,±™`¬7¬7¬7Œ±¯£¿Žþ:š1kŒ5ÆÃXEyEyE9c%¢QÉïü ^¼)û¤Œ±»“îNº;‰½j&‹Çø_®†«ájÆ%$áNàÀšcͱæObŸÄ>‰&ÜœpsÂMàóðÏÃ?¤›¥›¥›%mKÚ–´âjqµ¸˜73nfPk«µÕÚ€êÕªééé@„G„G„òiȧ!ŸâU“pk¸5Üe(C‰àDSDSDSØ)ãããôÚûíýö~ˆœÎá΂I0 &ÀÒfi³´ï¨ßQ¿£ü=ü=ü=€S§:Nuæ æ æ €ñ€ñ€ñàªÖ`k°5°Z¬«ŠŠŠ¬åÖrkù8 sŽ"ÓMÓMÓMôr NÁ)Ø)NºOºOºO(îÜ;¹w2;Õñ]Çwßo´° VÁ*¡H(Š€¤KI—’.3:gtÎèÒÒÒþ:¿Ü©½S{§¸&¾&¾&–}¿ìûeß*¢"*ä°–ÃÙÙÙ a_þ†}/ãéRt)º@ׯë×õã+i¯´WÚ+sHG:ÒwWðù|>ŸOò.óâN‡B¯Ô+õJȤÉÒdi2Œþ-þ-þ-@׎®];^ž‘F«Ñj´›Éf²™@p]p]pàþºûë™ƒ™ƒ™/×?/y^ò¼Y:²td)à·Èo‘ß"Xe.\ ñDGtD‡#ÄAÄQ)&G¢ŽD‰[[[ªÿgÚ`Ú`Ú°&H)WÊ•rǶ¬ª¬ª¬*QñÃŒ‡3`­j¯j¯j‡D0Á°2VÆÊ€X€RßN};õm «¦«¦«8¹ê䪓«ú!ý~P/êE½€ Ï‚> ú ,óãÌ3?ùéêOWºJÍW¥W¥W¥œLV,+–ßYeWÛÕvõÜoÉ®‡»îzànàF`‰Û Û Ûà÷цццUR^R^RKZ6ÙüeóÉôÓõÓõÓÁT>¨|P âààü®ð_Ã5\FüFüFü€{_ÝûêÞW€,W–+Ë”O•O•Oaî¸Þq½ã:þ^íQíQí ²I²I²IcK™ˆ‰˜hÖß1 Ó0­sÇUp\…¨ÛÏíçö÷o¡Zª¥Úu6Ù/²_d¿W.\¹på‹ÒÈ42 '|nûÜö¹ ËŒk3®Í¸ö;À(D! @ªP A<ê=ê=ê釧ž~xÐhÜcÜcÜYý¡úCõ‡…8R)ŽÈò„<ÙIÉ\2—ÌíÜ€b£˜r¶yޏ}#¿‡$ÉÁÿlâ¸.!§á#|Ä}«^­^­^-l4¤R ©‘-d Ù#­¡5´ÆÕÔãýè#<Â#€Å°ÐPJCǵèÙp á@ÃÇ6}ˆ>D—HÜ$n·…á•á•á•ß4c7vc79 -´Ð ‹]ý¨}èCŸp[±[I]dmdmdmñ i–4Kšu¢Pÿ†þ ý¼áÌŠ3+άpls$Cdˆ ÁŠÇxŒÇ,°Àò»Š(‡r0îw‚;ÉUÝUÝUKº1íÆ´ÓDÅr©\*—>³ÕØjl5¹_Þͽ›{7`:¦c:x9½ušc @'Ð ðºýøöãÛÛVÛVÛÖÜ/å>r¹Ïýšnu·º[-*n\Ù¸²q%K"›È&² ZM«i5Üáw€ ³a6 D€å™î™î™'šb›b›bá%È:‡Î¡sr¿|!½GcN)–8Ëjªë ®w~’HœS牊ф&49¶‘xOâ“V¼øäh®µo´o´o¤ÿXMWÓÕ”[½?zô~¤Ñ.ÚE» ã¦qÓ¸i° yBžÉaåaåa¥#|`îÀܹ¢i¬4V[<ïÅŸ&ç:-¥¥´”/qžì׉ÂèÊ(œ?ŒkÈ©ÝmNí–8µûo.‘Käsê ‚ *î[µ]mWÛ…†rC¹¡2Žã8ŽÃ°+---Ôü¨ôQé£RQt§t§tçÝzk¿µßڿ󛞔ž”žÀ ¨pÕS ‹oô`×™ÓÁ¯NíÖFž‹<y®x…t½t½tý‰BýýýÞp:ÿtþé|Ç6gGï¥ñÕøj|ñ¯Ö¶Ö¶Ö6ò¬KÖ%먂*¨âWø÷ù÷ù÷-óÃâÂâÂâ¸ßœñÞvÝP¯r‰ð–Áu1131ùxàÍ7ÞD•cªcªcêI˜$Lö·oŸ.~ºøébßs†NC§¡“}}ûèí£·:ŒÚGí£vÑV·…n Ý~ÄÊY9+ÿ±H ÝÃoø ¿Ñ× 8%¼ÊCð'öÚ-@#ÑèØÍêX«KÐrg¹³ÜÙ_ÂÆÞ{wì]ú¦[©[©[)×)R‰T"Õ¥åYåYåÙ% :­N«Ó’Ÿ¨õ£~¬ÒéWí4ÿ‡?±W´ë,ŽÝØ„MØÄ·“ ’A2.+Y#kdÛ3݃݃݃¹NQŸ¨OÔ×L‹h-Úø¸kUת®UÀ @„9ý¹KËŸqü?й.U,…8§IEND®B`‚routino-3.2/web/www/routino/icons/limit-18.4.png 644 233 144 3012 13061246472 14655 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü¿IDATHÇÍVûOSw=·Å–"á¡mœñFL„&sÃgE"©¤©‘!ÂLÔ ˜%"Q3 ý Í|,šÌ [t LˆRc Q¦Æh@1|€8 dP°½÷{öC{iuÿ€ß_n>¯sNî÷~Ïý‚DùŸ 5ó4ó4¾Xóm º1tãâß|ñ9™”6K›ÿ:LFž‰= ëŒëÒžaÏ0\ð ´]$Ì=0WåóT“tÐÁpÒëöºIRÎ’³8IŠÑ@’”(‘X­«ý꼊§â«|*¿O>ÜÛãèÞâÙâ™tWYë ñ„â°÷¥÷%ÕŠPÚ”f¥™ô¾òv{»I¡:¡c`Múßܰ¯ŸTv*;é1ržœG*‹|ødÒ@²ßÏ?µ•nˆ9EÚ íî²sCçR~F’´ŠKÞïß©|bHôŠ^’E,bQã<Îã$4ÒÈÿ¯Æ0†Oä1yl ÏÊ±Ž›7IÒà6¸Ý!>a1§üoêÜŸdN~N>)êHRY®â57œj8Eñâ³3_Ì ð<Ê|”ù(“,i.i.i&[Ì-æs .ž‹çâ9)D‚Hä;s:‹:‹(nÏ­¬T³ÊráÙ]°»€ä;Ÿ œðÅøi­i­ 6€”ð»©ÂYáÄ{Ë ËBËBHOå§ÒS hìiìiìÖ/Y¿dýàIÁ“‚'@ÊÉ”“)'ÆË—/Òbi±´ vÚ&3™É€U±¶[Û!—8‰xïÛ7)_­¹ºæ*€nŸ 4#ƯÀîu­ëZê@º€~m¤6zÓ¦s¦s³˜Å,@™¯ÌWæaUaUaU@J^J^J0ûá쇳ãGÇŽÅÔÒÄkâ5ñ@~f~f~&0:= Ì e_kxk8Œ€Ô'õ¬–wÈ;¤VÿÇß´Ÿ,.&å=$)v©‡>µ&õJê²"£"£"ƒì{Û÷¶ï-›››KFŸ>}žÌnÉnÉn!]7\7\7Hs’9ÉœDöÛûíýöÀÇ_úsééÒÓ¤íü¦Õ›VsÒTvÉ.ž¸xBõµ¦ýÁ§òHÎ’5ê©TN('È‘Õ#ÛF¶QLÔMÔNÔ&*'*'*ÉþÞþÞþ^R”ŠRQJŠrQ.ÊÉÁšÁšÁRÞ.o—·“b‹H©äøÂñUã«(þ}1ðxà1É&?ŸœS˜SH²Ï§ªo—Áå!;äyŠßJ·bWìA>ö¥ˆñ¤¨Õ¢:ÈÂD˜#ËXÆù×G8Brƒ$9&f‰Y|GáÇ÷tÜí¸äcâ r~oš6Mp~š¼Þ’Gä.¹+àüü†[¹•·Å-q‹¤“N:IŽq”£¤ø[t‰.’=SΟ«äÒÃïå;ò’Ó§œ_—¦#9ù±óºÿÊOövñÉÞÇ>Íìž… $u š¥IEND®B`‚routino-3.2/web/www/routino/icons/marker-55-red.png 644 233 144 4164 13061246466 15443 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü)IDATXíWmLTg>÷c+ ’¬  nª«(]emDGŒ¶ÁµëþX?ÇmS,ÙT*àÇV°P"4” 3H,q»Ñ°~ÔÃêJ« m‰0TƆ 3àÀÀýxöóÞ{g²«Ùìž?3ç=_Ï{Îó¾o.ѬDQðaÎ0g˜“{Xˆ˜Ó>§}N{nº(‹²(ß?G©”J©À¬Y­$‘D™ëj%ógñ,Ë\ÏÆcÄw€ÐÞlY)¶‹íb»ãw;ÈÔ€DF{¢=Ñüu{Ïöží=ÀŽ;€üÌüÌüL]gvæÏâY>–ŸÕ{1â×ë˪ùq~œïOeŠ+Š+Š+’×ߪ¿UK}ÅûÔûÔû€|˜À&ô£ý€¦ì̟ų|,p½eÕ/ÆGæù¼›wóîþ¿±™73ofÞ”~Ó7Ó7Ó7ƒ>DMV“ÕdHr©\*—ršœ&§²U¶ÊVƒ°3Ïò±üà úæù4ÎÁ98‘x\<.oîb9•9%9%’UöGe­²^©yÊ>eÔ~éuéuÓr’œò!ùE‹èT;LK~ɨýR†”hñ|Ì›Õcõ†LMM7ÿš9˜ËÌeæ25Á5âq`,Ç+Ÿ”WÊ+¡‹^½Ì¿•F4ùKz?ù¤2¤ éV׈ë¾ë>ÆÌeæ s…šÀðhøÄ}â>q_çqf8[x¶ðl¡º7À'9X®'QO¢ø›gšgÀ1èûfûfhûªí+€ .øù½Ÿß€æ¦æ&ƒ¿ß¾Ñ¾.Ä\ˆ$Ǥ8)j€}g k¤IÝ«u6©ÃÑIÑIÑI¨|–ûÌòÌê¤: ñlÏuŸ×}Ìž{3üM£±+b—±¡ç~8÷à ü½QB” ~쓱O´ éYîÓÔ§©ÃÃð1 '¶ÚvjÛ)}grßtÚt€a¶”'çɱ8c1ø*|0roäHË¥åF [s¶æ@ÆüŒùà«ôUÀÈÝ‘» ~«~ `XÍWó¹OITõú ÃÇŽÔJ“Åd1Y´3F{ÈLf"ú[– ˈˆnÞ$"Šª‹ª#"JX°€ˆ¨íZÛµ +D&™ˆèöÄí "¢¨Ú¨Z"¢„¤„$"¢6±M$¢pîwˆš”£ÊQ½¾©ÕÔjjÕŽ<»_Õ‚ôªôªô*ôNq“U“UÚЊV¨ø}nBnäÝÊ»Ýݰåá–‡Æ?ò?òÀÖo¶~ÖËÖËFÿì{¸^½bâbâ Æ}ùj;k;láùDøîêwWá÷ÌI%«­Z¤h€#Ä1uca‰°DXˆÄâ ñ†Ý­]øùممò!–_±•È%2üpFæö {#·õÚzˆ>Jü(ÑxÊþc³ºRgëµõêÛ-º[øZákŠO¸GØ#ìy¸sVŸ;LÁWcJ1%›’ûX€­ôð‡¿P³µÉ-¼»ôîR¨@CuC5ïƒ{j®AõwýØõ#4œi8È…]«»Vëýmo9Ñr[´'´œ/ç˧r¹ÅÜbnñªú€Â?µóµ›Ëçò7Örvî2w™qEùƒ³£åzËu85îRV)«Œ€Ômê6@1Ѝê[ê[øÙê;ê;šêuÛž <âÃÍmæ6iŸÖÉ……m94+YÉ*šu¬Y”EYâÇä 9ˆ„aÁ-¸ÿE{ZkÍkÌk¤H×}ÇúŽéÕl©Qš}*Ç0fà®?á'Ne¹²PwÎÜ™¹? Üõ]Gw•i/Є8*Ž:ÅîÝ»ŸˆÏásøî|]!ƒ9/ð»Sèz…^îR‘„# GˆLE¦"S‘ó˜ÆÝ¬œ¬œ,#w›bƒN8á0ŠQŒê”WÈ+ä:«ÖV­­Z«fkoy¤)ÒéžšÕÍáÁ“殄Œž¸õë`ÝnJ1¥˜R\çuîÚJm¥îFJ‘R¤HT•A‹ÝèF7àœÛ=·{n·º]ãdÁG¼û§*Ö„à £/UîîævoÜÎÙ9;g7r×Ùáìй+uHR‡ÎÜÉØÉØÉX`µgµgµG~Uãb«Ð*´žYǨ ^(ÀôÑX»Ã°»§Í§Í§¥H—ÝewÙøá‡†ÔvÉvÉvI¿vÄZ±V¬í|’̽R7°N¯¼ `¨°€wܽøŸ¸»!oCÞ†<»ÎuÎuÎuhšµ«Ú$¸®€+ØX\† ©ËÑ)/ãn†P.” åýi pAYAYA™úçäéäéäié6êaaX¶ÅQ35S3®ÁR/ŒþG åî±`}Ã#®˜+æŠÚD›h“ò+~ ¿„_pÄGÿ:Þï‹÷ B§ÐÉ] î ™ÜÿM"µ²Eì 6PÈ«¼Ê«w…»Â]y²tv=Ñ2™¾¼/õ¿†s)™ôIEND®B`‚routino-3.2/web/www/routino/icons/limit-27.png 644 233 144 2323 13061246467 14523 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷܈IDATHÇÍ–KhTWÇÏŒÍc$š,DÇEÑ Z»\ˆÆˆ‚ø IÓ©bQÉÂÊdaÀ…6…@eB$D$$VÁuÓ`Ѷ¡JG‡ºp&bã+¡“ÎÜ{îùuqç̽µ1Ð]Îfø^ÿÿ¾sÎw!„E™_þ‰¾cû¿pýù•ù•Á.Çn“àÛéÛù$ … /··ÛQ×Öqï­ÂÅ÷òi¿(®#¯;¯ÛgdìS°»lwYþÇŽýÍ ®®ÿeAèFè@oGo_ÁØðØ0Àã®­ã:_×kpm×ùº^ãi|ͧù=âß{ÛT»òwå ÀüSöË~»ÁnÀ´GU®ÊEY¿Z¬G >SkÔP •P °,+m¥AVÉ=rH¿,•¥(Õ# e!&Ø~ÛLdð5_–_x}Ò±ÀØäG“1 $Ø v“ÝDR¥Nq’“¸«‘FA¥UZ¥=þ$É FŠ”Ç]mWg"°5Ë—åwôd„µÝ‡C ‡²ÅŸ2aÅ­8ࣄ§sç<ÎóEç‹ÎA¬6V«…x0Œ¡åDˉ–Ð^Õ^Õ^O;Ÿv>…ÑïF¯^˪Sê[³Élòðeù=a?×ÁÕwWßeëÚmæsƒû_ʇò¡„‚tAº FÈ!Xyn幕çàBÝ…º uP±¨bQÅ"(ï+ï+ï» ï.¼»Ðí›L¦ÛÒm_tù=æß›OuÃØê±Õž†YQ+êÚ=VÕcAølølø¬ë_q`Åàò‘ËG.qý­Ö@kjkk]¿úR…TøIµªVïk~G€âyÅóìß`<>÷\{Ó9̪FÕ¨·|xýðúáõP, –aÿòýË÷/wããëÆ×¯ƒR£Ô(5 Úíö{„UªJU ¤U\yù²üŽžwì{–a׉ŒDF"è ôzá̱3Ç΃··ßÞ~{ÛÍk^Õ¼ªyÇãÆqÞ&{“½ H'Hu_ÝŸ±cÓŸ1¹-õ*õÊ=c—^\zqé…3þrnÁÚŽµk;`ntntnÌsÀ„šdM²& Í[š·4oñœ©9 €¿yÍkyE^™ñŒ}àVÞ³nZ7ݘúeêÁÔx¹ùåæ—›!>ŒBâpâpâ0¤î¤î¤îÀľ‰}û`*6›ŠyÒO}€íàyïL·rš9欭ïÍøÏ\úÀ &<]þÿšcÓL~œÉ,ŸÉgÀQ9"G0U·z¢ž ÔjH ºªºTÐE]À2–²øšzêÝŽcÚÕv5&È!9¤Ý3NþYû­œµ¯‹Yû›/Ø2e½bî¸ÿöIEND®B`‚routino-3.2/web/www/routino/icons/marker-61-red.png 644 233 144 4147 13061246466 15441 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜIDATXí—LTWÇÏû1"ËîÄ-¨3«Æ]u…bdýA²òÃRÁTÓàšŠ ”hÝ2¶MŒ¸Qa+º¦)d]ƒg0&t1uÅ¢ÕÒdÃZ5Ùm&:ó¦Š etd:Ì{ó¾ûÇÌ}ïÍlW³Ù½ÿ çž{Îù¼s¿÷Þ@?¡„Á¯Nq¦8SœÜ³øDú´Þi½ÓzKWŠŠ¨ˆÊí?ÑRZJK˜[m&‘D™ $Új3[ÏâY>–?±¿:‘ÇÈ·‡öÐÞ‘èÏ\$öнb¯ÃÏíåör{5 sÀ0piÃÝ w7Ü6>ÜøpãC ² ² ²@·™Ÿ­gñ,ËÏê=Ÿ‡øß$Úó?æÇùq~Ü»”uhNÍœš95J]Ç`Ç`Ç úRðIðIð „0 Lð / Ùq?[ÏâY>–?±ÞüŸÏG–ü0?Ì{ÿÊÜ(¸QpC^å‰x"ž<ˆ5GÍQs +õJ½R(Ë”eÊ2@)WÊ•rƒ÷³õ,žåcù5à„ú–çàœƒHlÅÆ®;,ÀÖlk¶5ËåØ{j›Ú† ÜÙÙ¨^yš< À”Ò§ôŽã8€(‹€~SñxotMt w…¿ ¨ï©WÔ+²Å¬«Ïx™˜˜¬ý5[`i°4XÔÒcI’$ŒÅó•#®ˆ |@/¡}ÊAõ  @\Ô|5@Pó”•CÊ!Í J¥ÇÒcŒ±úŒGãw‰»Ä]CÌÑZÝúVë[êöx‚ìˆtF: <áÑÆÑF8ûòÙ—ೆÏ@ISÒÀßUß5ÚÒFi#€ð ë «>+;"E>ÒÌPkukukµº]ël©>s¶9Ûœf©¿Ô_ªçKtr€y¹ór`FdFˆÝ@ì|Á½á^ˆŠ2‹2 ÌRf1ìˆU‘Gôz¬>ãa| ôë®?ºþ¨þeŠ'R)àcSkmkmP1R1ê§ê§07Ö}Ö}à¯ðWÀÀâÅ~0ý ñƒ*7Wn6|O¹¬\rK¹¥×g<Œ©E¦S‰©D;c)´Íô¹és"úÙ¸yÜLDôµùk3‘t_ºOD”6/mQõÙê³DDM\GDd¾d¾DD”÷(ï‘çÏ;DD«[V·Ý»k¸h¦S”¢DÔIÔ©×7õ˜zL=Ú‘_Å…áÁáÁáAò„ùÉ'“OHvÄ´pˆÆÃiá4"¢ #è ":5óÔL"¢¼íyÛ‰ˆÞ¦·‰ˆH:#!"2O˜'ˆˆ^™ûÊ\"¢ÔþÔ~""õ™úŒˆ¦â ÷éÝ#âûø>¾â$Áçõy}^ò0>âËùr¾<2oqóŸ÷œ®:]eÀô±«cW€ páö¦ö&£ýn¿hí€s©çRñ#£´¯´€\\\\l8ýç§vNíÔë]k¹Ör­E{Çår¹\nd”„åÂraù&vʬs-n‹[™/ýÖ}Èm¸>ÔâU“«&àõ7^€Ê\í…í…ÀUpp»ávþ¦¾¦Ù|6€ 5 !äùìÙ²Dµ@È2…ÌOÆ(½$½$½„H¼.^¯wk~eÑ·Eß*ûXº¨ý«¼¯ò†3Õ›êb‡ƒý¾Ÿ÷~žL^)¯4˜Á2[™ ÀXÑ¢;@ôÀø¹57k.×\ކ4ÀmÂ6aÛ?7ÅìTvêÙ˜sÒ”kÊ5åzO³{}ÝÖº­ª¶YòOÝ÷Ü÷ g®ž¹ xs÷ÍÝ ­;†c W³é/J¿(”êþöþv}«Ïwu¡B{B›ø&¾é‡Rn7‹›õ«Ž$@á–v¾¶p[¸-kÚ¸n®›ëfZ‰ît8F£pjÚÝ}5úª/¬Öªµ€“8iìdÈ€Z¬nU·êýînn¬Ó­iÖ4y—ÖÉÃÂaá°Ý¦¡•S9•‹µ ©PÁgÐn‹¥ÅÒ"gHÝR·Ô Œ0Â0RûEûEûEýÚÛÄ6±Íÿ—$õoIuãóôÒ‹“ x3®Ý¿ü'í­+ZW´N×®3ß™ïÌGg̯j;ÁUqU\Õš‰eø§Iu9ú/Ç‹´»Zhš„&ï2\ÕPÕPÕ ˙ʙʙ’ÿ¡mµOð >ûê¢.ê¢øµ#HIõRèÉÚ=’hÝçj¹Z® 2*£²èb~6?›Ÿ pÄGW¿´†¬!kˆH†„!îJž˜OÌç>¨*UÅd"³”r@uPmCÔSO= @À‘ÿ‰Sœ<øð¨“ê$“LÅõ<‹ó7v¡ ;p,qî¢ÆãMB^ëB½J¯²yOw>Ýùt'Ùùþ•ý+ûWBÓŦ‹M¡çYϳžgv]¿&‰$4ï!cÈÁKðc~âÆzê ý]û»Äöo‰˜—ÌK„ÙA)¥À €.Ñ%ºrÛrÛrÛ`Ëù-ç·œ‡ÐÐÐ ÈhÎhÎh†*£Ê¨2`¡^¨jx°àÁ‚ üDtIt á/Áù™-’H¬úZÄ·Á·ADD‚t]–w¯»WD d­¬‘|É—|‘†ò†ò†r‘pQ¸(\$2¯z^õ¼j]  tˆ¿¿¿ˆ÷ ÷ ÷ ÈóeÏ—=_&1#fÄûêr¸G$9¸.Ûü¸Èš›5WõCèeè¥Ýöæc£Óè´OØêkõµú`þ«ù¯æ¿‚ší5Ûk¶C^v^v^6¼¨}Qû¢ÂuáºpT¬«XW±¼{½{½{¡'³'³'ÓqÇn›-f‹sÌXü˜·ˆº©nºúEŒ2£,qëGW¥«Ò> Ûãö¸="«ÍÕæjS$x(x(xHdbÏÄž‰="‡‹.)ñ–xK¼"]]]"ž‡ž‡ž‡"½í½í½í¶¿ÒH£Í³ùq?Ó¾c˜WÌ+„I&Ál0ÌûÄ-gZδœŠ@E ÂÑ…ëÓÖ§­Oƒô²ô²ô2¨î«î«îƒ©ö©ö©vG·~eô}Ó¿cÓwå?ư1ìèÊ/t†Î5¨Õ LNNÂÛ¶·moÛlž±ÆXc¬Ñ;£wFï€y΢8ÆÃ]¤‹€¼xw£N«ÓLòá“æØ'Lþ¨ªQ5öäÇÏQŽsI#Íað~ü Ó·ô- ™nºÑ jU-Q ³ÓìtêO;ùgìåŒýº˜±ßc3ó ö_«!ö¼j-ÌIEND®B`‚routino-3.2/web/www/routino/icons/limit-32.0.png 644 233 144 3070 13061246473 14652 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜíIDATHÇÍ–ÿOÓwÇ_¥hV` Q#ˆ_ÀaŠCgÔ¸”ܹ-g†3ƒh¢¨7½¸Ã[.çE牑„+ºiæ\†w§£(JL$6DwÉ`žÖÄKÃ7#ˆ–¦µµµíçý¸Ú%þ~~ùäùúò|¾Ò×çýì[@DDÒco„ì„ì„Ô(Nø}<žôvÒÛóÿÅ'"`Ø`Øp{¤K;ðÊׯ|­Ý‰c=¯×Oì‰óOÔÓã’.ñ€ÉarŠcø3øàµ^KÊŒâ£Ü’Üâ Çß}øÀ…o.|ÃG0r}ä:Àxñx1ıž×ëõ~o"¿|ö‚¾Lj›ÔfÓdÓdÈY›³vÞžhAï<(YW²`È8dT ,XT1àÅ‹þü2ëùX½Þ¯óéüºž®G Úa÷ÊÞ+K>m¸ó¨ÎªÎÒõB-@ 5X ì {"›#› ‚êT0@ëy½^ï×ùt~]O×Î_¥_D¤î·`sÙ\ ýºîÍÍí§ÐÝÐ]B±I•ö?Í©9!<î ÷ÐZ&üv#Œºùèæ#¨ß_¿¿~?8ÛíÎöx^Û¢mѶıËérºœp<ñ˜ï˜5ø¤ÏÑçˆë©_w®Ü¹R_퉫¢µˆˆüü ´h9}cCcCjûÔ¿¦å¦å´]²5Ùš /˜Ì BÚ†5 k`FíŒÚµP|®ø\ñ9ȱåØrlpÃxÃxÃȽȽȽ [ [ [`qÇâ¶Åmðª7÷xîq‚ã5j;8®8®€ústžù)™S2—®±~ný\$’õ¸ôq©áôA9´àÐ1•v•ö”öˆdïÍÞ›½W¤waïÂÞ…"•••"eee"æéæéæé"=M=M=Mòü¹8óâÌ‹3EL]¦.S—È­â[ën­™2˜fL3ŠéRß·û±á´HII¿ˆêJQ)jéŠDÃÆaã0ùb×öiû òêçÖέϬÀÖ{[ïIÆÖŽòÛå·E\—Åe±ÙÇìc"‘9‘9‘9"ùòä?Yn_n_n)w”;ÊñÁ˜Å,f‰Xº-Ý–îx<õ^ª)Õ$òtÔ_â/ˆiªiªdÈUcº1|‰¼ežlž¬´­ðÏ ŽÍŽÍ°tKa^a^|%«W7®n„ŠÝ»+vCÖ¦¬MY› æLÍ™š3à[å[å[O3Ÿf>ÍÏÏϸÜp¹ár,)XR°†V ½1ôÌ™{aîø>ñzêõT€'ÙO²A›m0(‡¨¯ôo¬ÉÓäÇÿŽî¼øïo¾þæëSN¥ØSì°gpÏàžA8Ú}´ûh7˜ÚMí¦vXÖ¿¬Y?LK˜–0-NqŠS€µÎZg­Ï}Ï}Ï}Ø‘»#wG.˜?2o3oƒêg•_V~I0æ&Ûá,gª¢óˆ~ øiWÆ®Œø) ¯ŒÆÁý7÷§îOQÚIí¤v‡‡‡ÁåÎrgÁðùáóÃça$}$}$üþŒŒŒ€6ªj£ 6¨wÕ»à¹ãö £´‡¡¡@$ªGdWÕ®* ;•\}ÁÇ&E}Eýé¹mTñ«ß¨õj=0ŸùÌŸàSL4Ö¡ç6 PE yUªJP)*¿Úã¯rÝuÝHö${¼‰ ê>¦;PwÞ÷ßOEYµ…†­‘H$Bˆ¿ÐL3JUªÔÔêGP­ªUµ¤šjPÏ”Où€GÑ]qEKÒ’©ŸÃ¾°¸¤;LïÙ‹ÎÿòþW¾´·‹—ö>örÞ`ÿ” ꪾõ(IIEND®B`‚routino-3.2/web/www/routino/icons/limit-14.5.png 644 233 144 2746 13061246472 14667 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü›IDATHÇÍ–ïOTWÇŸ˜D¡Ô¡lÌ45øBÖ„¦†¶iLÁ%Kë3,šL¤¶©‘´5ëÖn%š¬$[QF7¦u-þ@—°/J62¥‹I³Yt—¶€ØªdäGðÌÌÜ{Ïg_Ìg”ÀçÍÍsžßï¹Ï=ß{DDä™ÄSÀù¼óygvÜwîN®gUfU®û"î·[àØêØúß?@NkN+@n07hŸôu\ç§Ö‹$û§âéuyF’ ™_e~åð&üO¡¶¨¶(+/îÿy\—\—Mx·÷Ý^€‹g.žá}þ`Þ;ï…¤¯ã:_×ë~©ýåÓ'ðE`Eߊ>ÇO™‘™!/l~asÁïã à{Ó÷&À½´{iÊ Ö}`%+•00Ð6“âëx"_×ë~º¿ÆÓøq>î2w™To¯ÞîêŽ|xx4^ìÐL3+Á4LÀÚaí jP àÀI_Çu¾®×ýt§ñã|äñÙ¯ÀðÇü±G„†ì²ØŠØ P2§Ì)tDé U¨Ö«õ`ÛÅv1©¦PÀ Q¢(ëÑÖh+1ë×±†XXÕñþ÷¿åK<^‘¥!"Rø9¸~týh¤ÃxÅxXT©Kæ’¹ÄOZ!…‚º¡n¨)ëÆc£…F¦™f@­WëYJl­ ƆƆ\†Ë0ÒãÄ ?O¼©öšM ¾°_Ò}ÿ2 ¢n—Ü~ñö‹Ëè1ŒàÚškk®­Y7kÍZ³.Ô_ØqaœüÝÉN~€êÜÞVÕVÆŒÆkxµáUP×â|œÒ/"RzE:ßÈ{#OÄQ!"â(éÉ;×®_¢k*œNq ïnn”Gf5šGEªì*»Ê9râȉ#'d™ÍÌ̈ìÙûÃÞD>¨¨Ç`yè—Ð/]ú[ìØ;ŽoÈ‘¿Æù8Å™ýaö‡Å¯È{e£e£"dˆˆ8ºe:-'-G2Ý¿qûÜ>i$…XÓΦM;E"Y‘¬H–ÈêöÕí«Û—»¾íú¶ëÛDŒJ£Ò¨‘rH‰lù×Û÷ß¾/™¿Ú›ÑÑíèæë×_[q|”Ý‘ÝQüŠ@îªÜUö(ÌLÍLUöèØ°)wSî¦\8êü©ó§ ïlßÙ¾³à.r¹‹ nOÝžº=°®e]˺¸¾¾NŽ2ä ¹B.¨÷Ö{ë½ì ö{ ¿í¹ÃÏ†Ô |7ð3{9ö2XÿY5¹jÒuв{í^Ǩˆ¹ÕÜ*"""âÖ;Vj¿Ú/b_¶/Û—Eœ§Çé)‰–DK¢"#WG®Ž\¹¸¸¹¹ûæî›»E"é‘ôHºÈŽ;w:D † † †EvÕìªÙU#âQž Ï„ÈLÎlÏl¸ET¾Ê‘Ûc{£‰ÿßðå— `½ êŽøÎøÚ|mpºët×é®åw°+Øìÿ1ÿ1ÿ1P“jRMBiyiyi9 mÚ8´6ÜppÃAÈÙœózÎë°ÿâ>ß>{Tãk>× ”Çù¤žÊCCÀßõ)±[ìxPü`˃-¨ÈÆHi¤襗^°[íV»®}¸öáZXð/øü ²U¶Ê†ÙêÙêÙj “N:!ÚíöÃ}çôâô"J½g>k>«·g¿ÄT 8P¬õ¬=$Z7Àv…t³Æ¬G/¤ ì:».EÇ¢ še–Y`‘Erª€9æ˜KQÙfõ™ú T‡º¢®¨"UÄ’:‘èÿÛ±‰± לkÎHçéXŠò›5i5iIå'Ï3Ç€ÃÖ=ëÞråç0Ÿð O>ù€…êg5®ÆH"ÿ€õõ 1õO3l†õdbCÀ‹>©üOï¿ò©½]<µ÷±§óûÝÚÓzköjIEND®B`‚routino-3.2/web/www/routino/icons/limit-0.5.png 644 233 144 2557 13061246471 14601 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü$IDATHÇÍ–_HTyÇÏL;Ž¢iB‘Š‹äºmáR•¹$ŽSö‡Ä6*ã¡Ø‡ía—„è/Ʋ=D‰º&ÉÒ–ý1#Цe¢É•0‡´œ$FÍ™¹÷þ>û0ó›™j{ï÷r9çwÎù|/¿{Îý ˆˆÈœøSÀ^`/°gÇl{CÒŸ^‘^ñÕ1û„ ¶¶ÿ„œã9ÇrÏåž³ž$m½¯ãSóE’õSyÚ/s$ép^t^´•ÅíزhË¢ôy1û—>ÈhÏhŸ2`WÇ®€Ëm—ÛØ/ï¼¼0Q6QI[ïëx¯ë¥Ö—–ø"àèvtÛžƒ3Í™&…å…åE?Æ‹ÀU骙52KÙÀ| d‘¥Ê€!ôO±õ~<^çëzº¾æi~LÀÜÕsW‹@MmMmÆÙX“ßÁ“ïÉ×¼h;p”£d2BfYGTŸêÀ† ’¶Þ×ñ:_×Óõ5Oóczäý³=¶ÜN·˜ˆÞ3jFA}gœ1Î5^˜™f&JíWûÔ>>^}Üà˜‡Íf³Ìbs“¹ e6Dú#ýDùÙ¬4+/|›ˆÛæ¶iÇÖ¥¥ˆHñoñ2ãeè Âþ)ÿT³Uæió4Ó”²‹])Ö³žõ@UT¥øïq{À+^ñ …”°¶YÛ˜NÔÇoúMHðãzâÂN܄݇vJ$/Q—£mѶNùûïûïC«£ÕÑê€ç¡ç¡ç!>ZÆVc«±.Õ_ª¿T­›[7·n†SîSU§ª`²`²t²ê‰zTÆxI~LO\؃ŸàÂÛ oAÝPõqNx|û¸{Ü KÚ—´/i‡Å×_[| †††áçç')lÌ3æó@ÞÒ¼¥yK¡æaÍÚ‡P×V×V×£¾Ñû£÷áá$/Æ×zì"Ù׳¯»BdõÚÕkEÔ¯""¶³ñ“vv÷vßì¾)âìuö:{E¼k¼k¼kDfÌ™="Òéíôvz%±úûûEB¡ŠP…ˆxÄ#‘ª¾ª¾ª>‘¼’¼eyËDèQÕAqÚæk^Œ¯õØEf¹f¹øFÄÑéè‘·""Ô Ão<3ž‰dù²|Y¾¤€ì§ÙO³ŸŠÌ8f3ޤ?÷pîáÜÃ"µµµ"®=®=®="Ë—7.¹Úuµëj—ˆmƒýˆýˆˆúZóâü¸»ˆÕeuÙ|"FµQ-b‹ ›«A…÷  DÆŠÇŠÇŠE+++D†Ó†Ó†ÓD¸¸¸D"S‘©È”H`(0)º[t·è®ÈN÷N÷N·H¾ÊWùJdüËñÂñÂä‹Ð¤y1~BχßÇãgÞeºM7aý1l/Û^¶½ 2÷fîÍÜ Íæ@s‚ÕÁê`5”••Á­Ç·ßz %J”€œòœòœrhêhêhêkÐòZ^k•µŠ0ûÿÿû¸+£ñ.1 c"ÑæÊú×òY>ú‚¾ ÔµCíµR­T+!X¬ Öç9ÏyˆôDz"=ðÚþÚþÚê‡X¼îr^>לŸèÊ”9õÏøgRæX“ùÈ|Ä´Rª Ù}ª^Õ«z Rü-ªEµ€:©Nª“)þã꺺|o^0/¤Ì±ˆÚ?ýÉ9öÞäOw§fbò{M/ð§5ÏšGT=PïÔ;q…+ÀTìߨ†Õ°¼ãà¡‘FP«Q5ŠâŠ5ßšO4Q/Q?Îûxò¶ÿÊÏövñÙÞÇ>Ïì0?ÓÕ.‹3pIEND®B`‚routino-3.2/web/www/routino/icons/marker-60-red.png 644 233 144 4203 13061246466 15431 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü8IDATXí—LTWÇÏû1ü—j@\»Z•bT\IVÀЦšÖUl!FÓÍFEÖÄ”Z¥PµKÒòC¢6–à ÆWínPh´ÔE¶‰›¢Q˜™âlUF~ îàðÞ›÷Ý?˜ûÞ›iV³Ù=ÿ¼9ïÜ{ÎçÝó½÷fˆ&l*…¿*Òi´sÿ ¾ˆh‰h‰hÉú¨ˆŠ¨üý-¡%´˜«•$’H"óP_­dãÙ|–å­Ç¯ å1òR!ò¶Ðxü±El[lƒÜ^n/·W1ÇÄÄà¯ëﯿ¿þ>°ñáÆ‡Ò6¤mHÓ}gãÙ|–ågõ^ÌCüïCý¹_ð£ü(?êZÂVhVÁ¬‚YJQCGCGC‡ãðx À‡gx†g\pÁh~0ÎÆ³ù,ËZoî/æ#ËdÞÍ»y·ëo,AÚµ´ki×ä•É!9$845IMR“ +¥J©R (K•¥ÊR@ÉQr”ƒŒ³ñl>ËÇòkÀ!õ-“54ÎÆÙ8‘X.–‹å?° ÖJk¥µRÎÑÀ>PëÔ:xåF©D*T—!GW.(Çp @¡6xx¨.©KêäFÿOþŸõ5[͆— ³VZ?µ~*ç°úŒ‡ñ‘©ÏÔgê[³œ °”YÊ,eê<çS§ÓéÄp0W©’º¥n@*R½„ö)ª®à ¨GÔ#€Ã8üËñJ•tKº¥¹^çS§ì”1l)³|bùDÇx4>q·¸[Ü}³œjòkÞ­yW}?˜À'Û¤ÓÒiCy9|=åë)ðÍ¡o€£Ä.á’énÃÝ8‘{"€ÿúÖë[õ¨l“Æ¥qÍõÕä×l©Ù¢¾¯­l©ž¸Åq‹ã£r0k0k0KσDöÍݵݵ0'yN2L–&KÀÄ9o¾õæ[FÀÖË­—€ïå{`jüÔxÃxïþìýÙ€–?Xo0k0~0`<ŒþiÝ‘uGÖÑ¿LqHÙR6{µÆºÆ ¹s€z^=oè4f×ή€§}Oûàåo,€´¾´>#ˉúõ`kÔ5 (Ž`ãa||pK-0eš2M™Ú‹¤¦+¦+D4}4n4ŽˆèvÜí8""g³‡ˆhÒœIsˆˆòoäß "ªª¯ª'"2W›«‰ˆÚÛ‰ˆ6ElŠ0ž,릭›fp£nM¹5…ˆN‡?‘¦fS³©YÛò ‚ 8çîpw¸;ÈáçÇÆHþ8 8‡sD4êŸäŸDDäµymDDµÓj§-Ë_–ODTP^PNDt/p/@Ddz`z@DÛÛid]¢‹ˆÆƒnÏx×x!XoÂËãò¸ÈÁøˆÏásø©?¸Ä•§ OæÌ3H j¸}¸¸n€ÿxÅñ c—††@¨êàTÊ©°¬±¬€ÏŸ|þĨŸc~ŽÑ[¯œµWÙ«ôz߽ƞ%B‰`\é®K]— ödìIÞéŽéÃül~6¨/ÛW¶OÿÜ‚Î÷οw>àÓw ;…ÿØ<áG{(Ôf}iJ6%›’]'Ù„âÒ¢E;ÔÕZç~Õû ÷Tà«ö¯Úx;wuî2ªjÁõ?¬zX Rƒ(ù×¼þ£¾¾gFÏtžéD®v…Vð|Åó,n7ƒ›±°! PèÒö×6n·íõ:®‰k⚘V»ìm¶~[?ìšv÷^ ¼fRßQßt €ªÚT  e€ºZ-UKu)¹›Ü¯¸_£,·-·åÝÚJ>>*¶jh9”C9¢EgM§tJ‘ld#<ÂáIÑíj­³YŠd³s¿“srFíÊÛåí€ô´ë >íGG€ºYº+Ý…ŸMÜzkkáÖBeŸv=ÅAûá„= {öñVÞÊ[¹³Aº|†9)øÜ,ô ½B/wq^ɼ’y%D¦S©À~XÓnº5ÝšnÔn 8P ?ì°Ã`CÒZ™¯ÌWæëZ¬^Q½¢z…ºšå3™Mf“Ùý|·D…všk k=qaîw¡¾%jB»Î³ºv‹K‹K Ú5ËfÙ¬ëZìF7º{twtwt·º^Ód,ËÇn9&Å/Ãø"éÅ/„ê0í®ÿ¥vímö6]»r›Ü&·éÊKKK,Y4¢üVÓb³Ð,4ÿ9•I-(½pÀ)ôÓ°ºv=‚Ǡݣ–£–£²ÙÙälr6ðÃ?FiñÅâ‹ÅõcG¬ëĺîà_’èauƒï)æe€áÆ&l j÷/ÿI»k3Öf¬ÕµkOµ§ÚSqz"®jàò¸<.ïõ¡eø¡°ºý—ö2í®*„ ¡Âµ”ç•å•啩ǒƓƓÆå;Z«=‚GðÏ¢Fj¤F ;‚3¬^$ý®Ýá~F·ÛÎm(›²);ð*?“ŸÉÏ8∣öï}‰¾D‘pS¸)Üä.'nëÜÿÍÌÚ¯LʤLñ‡Ððþ|^åU^¸V®•kýçì‰÷¿±‡uÆ–÷¥­þ7øÓC8,§&IEND®B`‚routino-3.2/web/www/routino/icons/limit-20.png 644 233 144 2543 13061246467 14520 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜIDATHÇÍ–]HTiÇŸ3ã¨:jÍFn D›l[[YÛ;ä}D±a°´HÙņ&uѺ‰æf^L±‚–²ÒtQ»5¸Q°E ÕP®¬Úô¡ 9¬Î4çã·gΜÙÙ[ß›áùúÿÿó¾ÏûœW@DDò“¿Ž"G‘ÃcÚŽ¯lö†ì %?šv›ÊeK-äÎ; Pp®àœþض­¸•Ÿ^/bã§óY~ÉÛ‘Õ•Õ¥T$ízرhÇ¢ìLû»>p÷¸{þTaßOû~è>ß}ž¯!|;| R©Û¶âV¾Uoá¥ãKý?øEÀp”AÈÊÌʹëç®/>`&<+†J_¥`Ø9ì4 ½rÈ1*€(Q¬5šf[ñd¾UoáYøŸÅoêð®ñ®Í;7ïtû͂ǡfNÍ‹/Ñç89 FÕ(€¶KÛEŒ>£lÛŠ[ùV½…gá[|¿©Gþ~¶ŸÁ¶ìmÙ€¸EB»©ÝÐëô:ú€‘idb¨¿«!5ú¨þF“Ú1ŒOŒÅÆbPÿPŸ«ÏÁ¨6Úv Лô&Lh×´k©?|+Å—â—tA5ƒ;ìG3 ¤…4`€/@oÔ™0â”PÔs„#¶:餌eÆ2cPEUiñÏYÍj ÒªÓëõz&xoá'ùRü¦ž¤°¶_¡ª®ªÎBÓ?f\QG…"ŠÌýxäzäz䂦SM§šNÁÃý÷?ÜoëxÚð´ái´*­J«ƒÑÁè Ýƒƒ†j¨iGlò¥øM=Ia¿‚ŽwïRå{õ¶ÄòÄrâ–çžvO»§AÎûœ÷9ïaíèÚѵ£P)‰”DàúÙëg¯Ÿ…+W4“ O.< óãóãóã D‘@šÀgj­Zká{m~SCÄô/Y³nͺäùŠâ—o¿â—,Ë3ÄCˆT7W7W7‹ÜðÞðÞðŠÌ˜=0{@¤!Þoˆ‹äçç‹ôî?ÜX$7”Ê ‰\ñ^ñ^ñJjå®Üµð¿ÍoêÉqV:+)q=q=Q¬º1Çgž3O¼ìa{D¶^Øza둞žÂ‘ÒñÒñÒq_Ÿ¯Ï×'2¯`^Á¼‘®3]gºÎØ£ÅhMt¶°E\ât®v®Vo‹lwow»VŠ\Ž_Ž¿ÞÔQóËtþVNÛ×Å´}MÏì_[÷ãAluÅfIEND®B`‚routino-3.2/web/www/routino/icons/limit-26.0.png 644 233 144 3072 13061246473 14657 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜïIDATHÇÍ–íOTWÇÃÓð0Ͳ¾@k­6]”˜ŽÙ <Õmdå©©a!±(Ű41ðÆ&fÅh#ÄÄIk³1™ZdPcMd a‘Ǧ$,$ ‚vt§ãLw¸3÷|öÅÌõ²ý (PŸ¨OðSáÿsD/¢ÏOáy„""ݤ4m8j°é»¦¬c-c-põÊÕËW/£&ë&k&kL½Y™•YW‡«ÃcÕcÕcÕf^o×ÛõvÏLÍLÍLAgÌußujþÍœsÎiê©ÿ4ìkØglm÷€„FEDF[ÀuÊu þù׹ܹ\õ…íMBgB'Â…ÖB+ì8½ãôŽÓÐßÔßÔßÅ7‹oß„Rg©³Ô ùî|w¾æÏÍŸ›?g´2º2º2 »zvõìê¬dÝϺð~Øùa'×Ôà|ä|ª-<„þ•t#é†r‚Ü?w¾éû®ï;hÿ[[y[¹)È ä $¹$¹$2ò3ò3òáHÝ‘º#up^Wçx\—Çeö92™ŽL°Ÿ±Ÿ±Ÿ1ãÙ“»»wwÃ7Go7Ýntº ôÇD•¨”3*z[Ü©¸SdÒàoó·‰TÖª:T%îƒ='NŠìlßÙ¾³]Ä^k¯µ×ŠÔ\«¹VsMÄÒhi´4ŠðððˆÜº5tkHdøáðÃá‡òviÑZ´-b±ØFÌxòb²5Ù*ò몿Ì_&nkŽ5GD¢7Do 3J}, Z~¶ÜˆËŠË™81Ý2Ý"©Eg‹*Š*DjŸ×.Ö.Š\q^q^qŠ$¾L|™øR$I%©$%rÌuÌuÌ%²©kSצ.‘guÏêžÕ‰àÁƒGd³¶YÛ¬‰¬¼Yy³òFdiï’}É.²°{!e!E$ýQFuFµ¤Šø*|"–­jBMX~ŽR—||ƇE††Dÿ2ñÁÄÔ‡D›Õfe­wºw´wT$%5%5%U$6ˆ ˆdgg‹ÄõÅõÅõ‰ä¸sÜ9n‘2½L/ÓE²ÙŽl‡HþÙü³ùgEì~»ßîIÏNÏLÏ©øÝáW‡_ÉZA0÷—Ü_¨¹·xoQ$ªÊ¿Ý¿}|X¸9•4676ïÎð)Y9¸œ·œKƒKóKó¨åÖå“Ë'!°'°'°Ô%uI]‚Õ±Õ±Õ1кCw€šRSj Ü­îVw+¨U¢J@•«C긧ÝKî%”þRûHû…õ}Ùüe3ðßÈ© OÓÇÀð•ˆÏ¬©-j þ·‘Zj©•¤’T’ù3«4•¦Ò€<òÈ[çcMœàè^•¬’T¢JįŽFø›gfÜ no ó†ýß­ÞQDkåñÊã ¾ ;³ÙB6P·ƒž  OyŠ¢ŸøT¿z¬w¸ÃÀ¨gjN;ðÜ<Òãõx45ô}À=Ãù«bªb€µß:ÿ»{W¾³¯‹wö=ön¾`ÿ¬ÎÙö|º3‡IEND®B`‚routino-3.2/web/www/routino/icons/limit-3.5.png 644 233 144 2575 13061246471 14604 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü2IDATHÇÍ–H•WÇŸ{s©«™ýX^J‰R ¢ÔX³ºØR&ŠŠZ ÝÕú#FÐÜ ÑŠE1YŒÄÑ…D\»ô;¶Ô„v»#«µb(\f«V(fT\§vï{îùìûßÛÚþ÷üsßç9Ïó|¾ï{Îyî‘LûWÀãÎqg$l÷VÇŸV’VòÎ û;®*WÕï{`ÆÑGf¶Ìl‰÷9¶™7ñÉù"NýdžñK¦8ŽÔ“©']^Ûþ ê–Ö-M{;a‚ô³égÿ¶`Ûùmçδžie tt<ó>ó‚c›yoòM½äúòÕ¿ø"ðÆOoü亩SS§ŠÀ‚|°è“DÀ‹ ¢¬¢ àÑ”GS´Ô`:ÓµˆÁŒá$ÛÌÛñ&ßÔ3õ Ïðz欙³F*7TnH?žHèû²² /v8ÈA¦ƒ±"ª^ÕótH‡páÇ6ó&Þä›z¦¾á~B¼º¶kÑ5Sk¦1€ØUP÷Õ}ˆY¬ Ĭ?UªJEÇïÄ{â=¼>®$j¯Ú­vƒZ¢ªU5Zm^‹^#Æ!U¦Ê&^ø*ÑWËl\›´”""K¾…ôôH ±ðxx|ó!ûÔ=uQ‚ 3œ$àG8Ìf6³“ü×¹Îu`ˆ!†Ðh@›€øÆøFF'êVa|[-ì»_`û—Û¿„Äþˆ/Gb‘˜³wtßÚ¾¢¾"hlmlml…[ý·úoõ¿þÁ¬ «Âª€Ó¾Ó¾Ó>hªmªmª¿Ü_#9#…#…hÐ}º(³y†oë±…Ýú//@¿ }6çeÿgý;úwÀ¬Ã³Ï: uóëæ×͇yzžž§¡;Üî;³³³Á“ïÉ÷äCåíÊÛ•·¡¾µ¾µ¾{oÞœ©¯^‚oô¸E2‚Á¼•"kŠ×‹È ×q{¥SÕ€z®ž‹ìí퉬/]_º¾TÄã÷ø=~‘ñŽñŽñ™7¢7¢7¢"‘’HI¤DD¤ADÊCå¡òˆç]Ï Ï Úõ½GR]Y†gó˜ùÖÌ·â½0üxø1ðÔ>ößèÝz·ó%FÆFÆFÆ úRõ¥êK³%gKÎèiîiîivâB…¡ÂP!ø¼>¯Ï -§ZNµœ‚¬æ¬æ¬fè¸Ðq¡ã‚O1mÆæÛz2‚A}  @íuÏœ¸xâÇ?BÞ¦¼My›¾;ßïŠ?ÅŸzŸÞ§÷A[g[g['H;v ͉/h*h*h‚¶»mwÚî8~õ¹yJð·HÄñþö«È•ËW.‹¸wŠˆð‘ˆ„$$Ñò¥å¹å¹"™+3Wf®ɨʨʨYÖµ¬kY—Hinini®HQmQmQ­ÈÂÎ… ;E»»»D2×e®Ë\'²:{uöêl‘ú7ë]õ.½J¯’蔘á%øz^;•اäºÕeu9§ÒzÏZn-‡¡sCç†ÎA|Z|Z|èq=®Çáéâ§‹Ÿ.@´=Úm‡'î'î'nÐëÍz³S¿¬^«7‰÷ß§2©…GÂ#I},Eù”Qý…耳ºXëb`.s™›äß«÷ê½ écúX’ÿ¨ê Pª*ÔÇ¢áÑðèÿö±¤ÎOMZM`Ýù{U/pH ©!bºC?ÔÑ´qœãÀ£Œ‚~ èÀKÆØÉNÐ?ëA=ˆæb<+žE Ô]uP¦¾Í{½óOÚÿÊI{»˜´÷±ÉyƒýŸe£PµdIEND®B`‚routino-3.2/web/www/routino/icons/limit-52.png 644 233 144 2472 13061246467 14526 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜïIDATHÇÍ–_H”YÆÏL«£¤SŠB”a¸Å.E- jIXY³®4l#¹HPÝU þ릥m›Ê&H¢65+7£ö"+s5cqs\I6X¶L«imœïÏùíÅÌñ›]’n=7Ï{Þ÷yžï;ç¼ß „baì)À¾Ô¾ÔîŒbû7Vÿ’Ç’ÇBŸÀˆ1b&[Áôš^¦øò‚€ñ!§å´œj¨¡ÆŠSËŽ€Œ°œåæ óSL)þ˜ÞŒ~ÔOÌXã¯Py¬ò˜b3×pE?«Ÿµtõ¯ô]ú.¸á¹á¹á3EgŠÎ¿Ì_æ/ƒpG¸#ÜCãCãCãpòùÉç'ŸÃà½Á{ƒ÷â^àgùD>A¢ë“údœÞŒ~ÔOÌØo‡ ùMó›™r|¤ïÕ÷2­"ÁóÁóÁó°hí¢µ‹ÖB±·Ø[ì¯ßë÷úáöÓÛOo?…tWº+Ý………½3{göNÈÈȳ šO´j­ZñK¥õcÂÙåìÊýBˆüMù›bë+låßÂ!¡"}î>wŸ[ˆ+ä ¹„à5¯y-ÄŽ–-;Z„°m°m°mb¿}¿}¿]ˆ2d1?u~êüT!\®—˜ÔÛZm­ŠßvÑÒù´Ô´T󘵎½Ù`0XoØSßSßSžBO¡§šZšZšZ s*s*s V<¬xXþ@ Væ­Ì[™z…^¡ƒtK·tÇí½jY&ËâÛŒÒúàìrvÉ6[7¶.îSWkŒ5¾Vz­ôZ)Ôm¬ÛX·ÑŠ»\ ®8X{°ö`-d¥g¥g¥CC°!Ø„w•ï*ßU‚®éš®Å H¿ôÇáý¨ŸÙ÷X¢ÖªµZ{løúðõáë°¢qEãŠFH9•r*åÔuÖuÖu‚ÏásøX’X’Xë—¬_²~ 8;;Cûdûdû¤eÃhll}Í~*Ucü…A£] R)ˆ@p$8ª¨¢ ¹áÜp.WWWÁhïhïh/¼ºðê« ®  µ'?éçôs=•èc¡™>vռʔl²¤_ž–§ãŽ¿Oú¤(¢ˆ¢¸•‰!À´õÝÌr³<ÖÅ>ÞÇ>ÐùÐzÑGÆ#óyjiDÊNyWÞúé£8k¤-²Y6ƒì“=²d› È’Œ·Æ[40žÏ-Æ?{石ÿÊ9{»˜³÷±¹yƒýV¨=¶LIEND®B`‚routino-3.2/web/www/routino/icons/marker-25-red.png 644 233 144 4277 13061246466 15445 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷ÜtIDATXí—LTWÇÏ}ïBEQÒ”ÁÅ+¨Yu-  Ö"©¤Ñµ ÄÑ6Ô±µdSPüMZ•Ö¤G‰¡.©,nD4:kWÚÝ”?¬0D°µÊg˜÷ÞýîÌ}of’ÕlvÏ?̹÷žs>sï÷Ü;Øx 2)e´s´s´“ýË?1ªnTݨº¬ЦhŠvç%Q%#Ó¼ŒRH>ìó2±^Ä‹|"p=)%˜'¯˜Š©Xªžž©Ô)uJ]õc¶‘md Ȩþ¨þ¨~\ʽ›{7÷.°¢sEçŠN`yêòÔ婦/æÅz/ò‰ü¢ÞóyHú}°?õSiP”;’ÄÅÆÆj›O4Ÿh>ÑÌ_èèè C†Œ!<ÅS<Ðt†ïŸëE¼È'ò×›úéóùÈ:Vê’º¤®Ž¿ˆ©M©M©MêïÚ}í¾vÚá7>‡Ïás j%Z‰Vhsµ¹Ú\@ËÖ²µìß?/Ö‹x‘Oä7€ƒê[Çh¬šU³j"e¯²WÙ[Õ"2Ë2K3KÕl쾇ïÁ€Z5¼ux+À;|?ú~0¬}­} xïЈz^`XÕT àjŠš¨U‡Çðôùú| ˆÕ™e™;2w¨Ù¢¾à|d¹o¹o¹ÿÆoÅënë.ë.ïîqÿäþ }þ<Ú~ß!ß!€ À|ð!Àø>¾ À-Üxá0àó›¶_¤?2ÜwûŽûú¬»­[?æñ‚ÇàS6(” ®½bâXÁ±ücù|?ÁZí;î;Àãýá“>€Ó3NÏ€K.]¯×ë ïÚÞµÎJg%¨~Xý€×‘áÈ€ Ñ¢µú™òL1‚†ŽUª|±³A|Ä»£fGÍŽš²ÇY³gZÑ qâ;;šÍÀHß@”5Êè/i^ÒúyüçñóaÉaÉþÀxy¼ ®oOß#H}œÕ›Ô›Á'@÷-;°ìÀ²æ7ÓÚu—îÐ-†^|eÞÙüÎæ@ o«¾­ ºs=ò=ùXX³°†Ê†Ê çvÏmàßñïtóå|9 µëÓôif}Á#ø$KÍ´Ø,6‹Íè±Ñ´–]aWˆèW¾>_Ñâm‹·­¿¿þ~àMÖÖèó7ù›DDÒ‡Ò‡DD®U®UDDã+ÆWÅÏŽŸMDT«Ô*DÆ.° DtFß©ï4ë[j,5–£åÅýÊó”/(_PŽ6ó0P‹ZÔ‚ã¼…·fú~öý Ó¦ÀØéc§@ñÌâ™;U”U9¹9¹p±ëbäØrl¼þ¸s7ån ÀG:RD§NH:m‚¤l)[Êö=ò”UWUH L|¼×r¯€wîÒ¹K ./.ÎÜ:3ÒÝ0TUU suçjð¼åy+€_íߨ¿Økì5@;ÿåÖ/·šõþzð²ë²Ëx׳D–È}Hž'Ï“çí(]÷kkƒµA›êþCûvS³<}ÁÓO 959ï9Ûs6p½ÞøÅõ‹ Æ… €ýÓ÷OX6TáªpX*M“¦À÷—¿¿ ïzöŽYgMÔ@Ž–£åèÏú(Âa‹°)W•«ÊUG—qá/_R¹¤RÛôÜè¹èö1•c*á…“}Á¾04êú¨ë ’N6SÝź‹pøõïv¹¼N^ oÄ×?³·ÙÛÌ£.¼]ðjÁ«ú¸V^+¯ýçÊ?¼›‚-ö¨%Q9®ï8-ì%ï~ï0Oš®5]Ô '{Oö‚g¦œ™` êFÕ 8Ùs²Ú¿iÿ&p£ïì¼³N9}Ð ZZÌý=7xnß¹}Xj<¡¥R©TêÉb“Ø$6iÖ‰@ùïFå³Ö’QÁÔK½‘” %èï;ëëá4´»I_§< :tæeß„&œ'ód“—§ó·ùÛ¦”º:qaÖZk­ºÁØÉäíòv{¦–MÙ”­XMÖ4J£4å#ª¦jª&’»åÛòíÍ6žÖŠX9VV#ÝÛîyîyµë³ùl MÔ&àü+þ!:§þ²þ2ÀWúnúnš_gõßVï\½SÛd¼@O•'Ê箘¢˜¢˜"")SÊ”2Ùy?]Àãÿ»Rn“Ûä6V¿%~Kü"K¡¥ÐRèÜeh7-3-3MÛ$ êvÝ®Ûá…N8<Á<1wR›¡ÍÐf˜Z,Ÿ_>¿|>O7ÞòHK¤%²Ë3â[ÂOš5„=±÷Z°o ³$Z-‰îó¦ví%öžnÜ:‘j¤iéõ‡úCS‹­hE+à o o o幆&#¤)bÕŸB¤x4„o4=@.Ðn>ËÏÈeæ`qÏéï;ÎFS»j£Ú¨6š­ô,æY̳ ¡?¡?¡_›nh±F®‘kŽ,RóK/p½ÀÌ"©Ýn¹;@»­­ÕH·Ãíp;0ò£Î‹~Aj¯·×ÛëÍkG©P*”ŠVÿ¿$á7CêúÇ饆šXå×îÅÿ¤ÝE9‹rå˜Úu.t.t.Ä™‘ynœËcy,/cGpéIH]Fÿ¥½H»)r©\*—vÌÀy»óvçíæ‡æ Ïž3¬þÃ8ên¹[î¶ÇRUQù¯ÙRo4ýªÝ]Áþ¢{l [ÃÖ´˜Óbý7Òdi²4`ĈѕkqCqCqCD²KvÉ.vÙ¸2ääþoi|²‘lJKðô¶‰K\âk` ¬áÁ”‘ñiΓiÉû£þ73ív .IEND®B`‚routino-3.2/web/www/routino/icons/limit-176.png 644 233 144 2666 13061246470 14614 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜkIDATHÇÍ–]l“eÇOÛw[» ’­ÄÅDi4‚Ñ!`‚à(Sd¢p8 YB&ƒJBXЀJâC/–™ìÊeÎl!K†f#4D:„‹‘I1ËÌ:…î£ëÛ÷}~^tOßÎ{ÎMó?Ï9ÿÿ¿}rNY8÷)à.w—»‹ÒؽÛÉ{_ó¾ödw·[àÚêÚzå3(n+nXÔ±¨ÃþÃÁú\×g÷‹8üÙz:/ ÅIäõæõº‚sø xçÙwžõ–¦ññAðôœJÁû?¾ÿ#@_g_'ÂøÅñ‹÷‚÷‚à`}®ëu¿æËæ—/þ¡/9§rN¹F /7/WõñWŸø8]ðçP³¹f3@Ìó(7Xw€B UˆGÇÝ,¬Ïçêu¿æÓüZOë§ý”¬/Y/[vlÙáû6ÝðÇ÷ÐøXãcZÏ< |É—B*žŠX;­Ì‚Tƒ¸pƒõ¹®×ýšOók=­Ÿö#óïö«W Ö[ë˜À.¶‹Á^a~c~ƒ©ÂꎺƒbyäAj*5™š«Þª·ê!5šJMº­b*ê;õ‹ú•ú)Y–,ômsœÈ|á ̼m¾mJëK¶¡§[±}c¾±¸Q;jg®æukØ|É|‰iuREU'âó®$Hdá¥,e)¨ u[ÝÎÊÿ`ï°w0ÍÞ4?Ü(ºQ$}£¾Ñ¸¡ýÌk?{šö4énûy6Ì —……ÁXh,4‚›ÆM㦭ÇZµƒŽ]»:vA×á®Ã]‡!v:v:vF[F[F[àø[Ç«WÃÐö¡ýCûQâHZ™=öÐWÛ~~ÎØ¯ˆô„zB@€jûž}Ù^oao!¸ãî¸;ýGûö…+UWª®TÁê#«¬>Áh0Œ‚2BFNTŸ¨>Q ÕžjOµ6^ÝxuãUX;±6¶6õ × ×0;g¯A}Þ½¿{¿6öëC¤è\ѹŠeª²¢²BD>q}‹—FDdFÈ‘²Íeo”½!¯ŠWÅ«D–Ÿ]~vùY‘ˆD$""mKÚ–´-YéZéZéÉ_—¿.È¥–K-—ZD6ù6ù6ùDʽå ËŠ”üîŸñÏHžlKë¹Bëíõ¶ˆIûq‹xj<5,“ ¹S¹S¢cB½L "ÛÝÛ=Û="ËÆ–-™öOû§ý™:¹uýÖõ[×EÚv£Ýi¤‘FD’d )9Sr¦äŒH¥]iWÚ"]¿w]îº,éŒ\Œ\ÌÒ+6ÂFXDûq‹Øýv¿ëš¨Ô›©73…%’#£2êPù*_勨nÛm»|w]w]wHé¾Ò}¥ûDüãþqÿ¸ˆ«ÎUçªYÀ ²;°;°; RúséùÒó"±¯cÄ>pôx.ÙœlÑ~Ü"ñ`<ø[DÜásásºŽ÷ä•£r$©3   "¹¹¹ޱÁƒ+WˆÔvÖvÖv:ùmMÛš¶5‰‹x ¼^‘ŠëCC";óÞ½Óü¼çyp¡ïBŸHÆÏÿM%§R=©g*®yøÂà q-q-qÍ™þû‡îº«««øWX“Ö¤5 wƒw×Ü]öSö{ ¬«¸1§—ÑŸ7•O·‚oÜ77 jE-g]o×3¥5«gi^ä ³p=õÔƒ*P†2œ´Z’ú4õ)ÓTföXàF˜õøFþµÇþcó›zó[ÃÖ0Pj}b}‚I=ô8{^¼@3Í4ÿ‡á\æ2Jýl¬&=Ö^koÖæ·jZCÿRó6ÿ#û_ùȾ.Ù÷Ø£ù‚ý¤#¾+]iIEND®B`‚routino-3.2/web/www/routino/icons/limit-19.0.png 644 233 144 3034 13061246472 14656 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷ÜÑIDATHÇÍVQOSg~N[[jºbìJ6P¦¨`ŠVmK¦10˜… KˆÓ)Kd»pâæ¢˜‘˜m\ ÍÌLœK¶É‚B„ cFD«‰3Ë Fc” ZÁêè±ÐÓó=»hOO·_àwsò¼ïû=Ï“óžï=HÀ‚ä¤!×k°'°áC=žñNÆ;‹Ià“qRª‘jn"3g'IÇŽÔ;:ÖòZ}ú~@çO×ÓâX=`é´tJeIÜBÖ×gä$ðפµËÚQÈÝÝ»»Iò·û‘{ÉÇ×_#ÉçeÏËHky­^Û¯ñ¥ó£åú9¯w^¯ô€´˜-f€|}ãë}œ(¸·ˆ¬ÚRµ…$…$ÉøIm¢Œ¤L™Úzš†µ|²^Û¯ñiüšž¦Ÿð2Û“íÈêúêzëéĆ;?‘ûî_¨éźH¶²•6R‘™$ãïÇßç,)ÄIR¢DêXËkõÚ~Oã×ô4ý„ü··ßl ¼5¶5–2äS×ÇL1))÷•ûÔ2B ©A5H*Ï”"E“hMÔ×$'8‘BB¬Sj•ZÆ”ñ˜-f#ÅG ~r«¼U&ù,©Ÿj¥ …ß’Ö»Ö»²‰Þ0¼Œß#IVˆŸ•§ÊSFS ÏEPIæaN3²ƒ;¸ƒäz®çú´øj®æj’k顇$E¹(g”ü|7à øHÒ*[eÙÄ[ ?É7uò Ùx ñ).‘¤êÔx¾hh§---ÐõüSþ)ÿÙ^Ú^Ú^JŽëyõ zP=¨ãÀP`(0Dž0PØnÚnÚnêqû¸Ýb·ÿLE«¢U–RK)€+ÆÆ\a‚P»Õné6 JRƒå0ãül@Lˆ‡â!`øÝÐoèfrgrgråG–Y~pssü¿Ãïò,y–< 0—?—?—äfåfåf‰k&\.`ìüXóX3PxqYí²Zd‘ÌH& ½&üÂ/Ý6À ¿-¿ý× àò¥Ë—¼Ü•ô5g{Õf·ÙT¢•€ãŒãŒã n7‡›öòöòör`çÐΡC@I¤$RÖô¯é_Ó¸ûÜ}î>ÀuE]Q ðÍÂ…+€÷²ªŸU?ÜGY^æ.àÂø…qÀà.Š.úëFú©ü¢ñ ’´S©¶©mdø­ð¶ð6Š™K3½3½úG=Û6Û6ÛF‘ÜÄMÜD IHB"C§B§B§Háá!E¨•dèNh"4A¡>‰-‰-!OêÅ÷5î#9£J¦æØcëcÙDâxJ¿‚³jZ§Ï1®¦“NRlÛÅvݨ(E¢ˆäQåÑ´9ö ÷r/©ÊÂ.ì$)æ‹ùŒŠ’üûc1’´†¬!ÙÄÿ™ci“_ñ½F}ò3G (’‡â÷ãi“Ÿ‡ù?#Å5á>’ƒä É0§9MŠq1"FHF’õÕ 5ƒ1ñ§Q"Zgb>ÒkòšHÎýò¿¼ÿÊ—övñÒÞÇ^Îì¿…2i!†IEND®B`‚routino-3.2/web/www/routino/icons/limit-36.1.png 644 233 144 3002 13061246474 14653 0‰PNG  IHDR"ÀêbKGDÿÿÿÿÿÿ X÷Ü·IDATHÇÍVßOSg~N±B T­‡^ˆ†È¦›!&s ¨…•¨hê,b¢ ˆfìB#Ù2qzµ&Æ`7€AEA¬HD·Ì!Å\üB&Ñ8*Y ÕÚsÎ÷ì¢=œFÿß›“÷×ó¼ç|yŸóÌŒ>A𿙿™¬ßôOÈOÈÿätįWIi³´ù¯ÉÇg'ÉY³µ‡†¯çõúØ~ÀÀåÓ㘠#ßß&9¢~ ¹uñÖÅ )ÿ—Òâ±x&rwÇî’<âü î!_\q$ÇãÒðõ¼^¯÷ëx±ø¨y Í—Ì—¤a2~züt€L[“¶&ýÛH7Ü´aÓ’|÷Z¯÷ëx:¾Î§óGæ)çÉyéÜæÜfiˆ4<éJp%|¡óëGù >?FZ–@`õ õ‘ì&I®'E¦Èd²›Ý¤ÈÙ"›¤vÚc¹À ¼@²‚¬à¦>UŸªOIáQÕA£áõ ]ºBNñ32øê{i-+)+Ña´/®¹ñþEÒÝänp7PÜ9xçÀ‘7Û›íÍ&ÝgÜgÜgÈÂÂB#/Ä€ ÅeqY\6â=µ==Ïf?1?1|â~™³Ì©m}/4ÜÝKzz’˯Ÿ¿~.Jm?ÏøtƧ Z\t‘LKMKMK%»Öu­ëZGæ;óùN2¿4¿4¿”Ìñåør|äÈþ‘ý#ûc>ÕU^åU²ÍÞfo³“æs‹¹…lYÛü²ù%CÑ×(U÷œÜqr‡>ØÝ½&éLrJrÊ’¥@^m^- Îõù‹¤†C8¼ððBÄ»þ(ì+ì$-HZt–t–t–Þzo½·˜˜˜VØVØVعIn’›0e¢X‹b@òK~ɤԥ4¥4bT)U">R%5`"7+7 ¬ÝÖî%KMR]ÜhÜ(3pL+ÑJ€ÏîÍ¿>ÿ:|Å{‹ë‹ë–•-¹-¹ÀXíXíX-`iµ´ZZ[»­ÝÖä:r¹ ùFóæ@¿¥ßÒo1SËÕrµp…\!WȘÌf7ãololSe>¼~vúYˆÛ·‰&m»’¬$Kð]òíäÛÀé¯Îí8·òÊŠ•«W®:´­Cl^›×æ†ýÃþa? WËÕr5PVYVYV Øëìuö:`¤j¤j¤ ðõõÔeê2uY̼/Å €!t¡k*,C ¯¯­S딘L[ƒá`ø^?p±ýb;°qOá©ÂSÜ5óKk²5ï¬^ë uHÍJÍJÍZ'Z'Z'¹T.•KKŽ%Ç’dú2}™>  ¹ ¹ XU°ª`U0é™ôLzŒÁk݉nÀ¼6.=.ï¢Ú° {{ à8îõCßÞ*—ËecK”¥oÇߎ“¯n¼ºòê …Z¥V©U1ëS½©Þ$Ç-[DjZ£ÖHŠGâ‘xDúª}Õ¾jRS4ESŒ>ÿ¿Ãï ÅO„'Â+Ï*ÏŠÙJö¾§c戎‰ï§tÌ)œ Š ±Oì#E¨5¤X.–‹å1ò0GÌsHæ1y1[bHß½heºHÑ1FuóÓ•?¤+¯kškÉÃe¿+¯•×$UGÕQCùyšMl"E¯¸&®‘lg;ÛI9ÉIRŒŠa1LòŸ)å¯Ð*¦¬©E$zOùß¾¯üï¿ò£½]|´÷±óû?ˆë˜gx6®eIEND®B`‚routino-3.2/web/www/routino/icons/marker-96-grey.png 644 233 144 6264 13061246467 15650 0‰PNG  IHDRŽE¹®bKGDÿÿÿÿÿÿ X÷Ü iIDATXÃ…—{PTGöÇ¿Ýs™†§’Qa1ð> "*6Æ•D²jPËÂüRB0ÃB™MÌ’‚ÆlEÑŒ€ˆfƒ±ÜHù"^–(aF–‡3s§{ÿ`«R•ÊùçVßÛ÷œÏ=ýí>çF£Ñh Âœç.t½Ð/ô ý¼QóæÍ7|aþHþHþÈŸƒ¸+wå®Gþ*z‹Þ¢wø›&­IkÒòQŽr”“l¨¡†@7ºÑ àM¼‰7ù‡²$Y’,‰d ÷…ûÂýëåÄ@ Äp°,oAÞ‚¼Í· Ò Ò Òɰè+úоdã»lãRÑyÀHD"’V±|–ÏòÙeó´yÚ<íµ"¿.¿.¿®jиøNÇLÇLǬÞ)˜&L¦ |´1hcÐFd+®(®(®`ïã}¼%Kd‰,ÐÞ×Þ×ÞÖ[{lí1`‹z‹z‹è«é«é«Žkkk¨°¨°¨0 ù™ægšŸó>ó> Ökµ¡¡¡@jYjYj@ÂI8 ú·÷oïß>ŸÉY}‚>AŸè‡ôCú!üCÞ+ï•÷ŠE)HAJ^¹ 4‚†d7‹Íb³hõ3x< Pb˜Àduququ10ùúä듯iê4uš ïÒwé»M¤‰4^¼,xàù²çËž/ÝùÝùÝù¥Ò~¬ýXû1'q'ï,ï,ï,˜l•õåõåõå,’艞èñ9±+±“Ò…—^Zxéƒ\iŒ4FSyw|óøæñÍ’¾ÓÖÓÖÓVk–]Šámámám0µ$´$´$¹ïå¾—ûðã[?¾õã[@ÒPÒPÒ@rHÉâ÷Äï‰ßôôô/—Æ Ð^Ò^Ò^Ö_|ýqpï4ï4ï4Èj×Ô®©]Ãfî]¿wýÞuzUú©ôSé§í[-ƒ–AËà 9tçÐCw\Ã5\û¿‡‡‡‘ËŠ)í”vJ»$#öãØc?æ± A A AäÒHÚHÚHøÏψO»O»O;àUïUïUð_ù¯ü×ÇéaÁ‡@_r_r_2à¹Ês•ç*ÀÇìcö1c¦-§-§-©8Xq°â ê•f¥Yi~ô—p —„ÿK±K;wQZNËi¹¤•ÒBZ8´é˜Žév˜•?+Vþ \®¼\y¹’/k×µëÚu¨^P± bAfÞ {*ì©Ç€xÏãùÇ€XÕX ¸ÄºÄºÄa™a™a™ó€““•“•“•P6$4$4$ˆ~RH!@&È™Èe$‚DˆÎ](BŠ[›g]9×7 #Ť˜_ʤÑ4šFÐ"È ÿ¬Ï­Ï­ÏwÆ@(m¥s’õ°Öà.à"D¿àüb¯,sdŽÌq^‹Îç«ÎW¯²f †¡Dæ)ó”yV~ryÈC9tЉìý¨#1ˆAñ6öc?ömÐÙ ³Ag‹’åoÈß¿Q]`5„Bãé¬ÓY§³k—4“fÒ “½d ,7­Íã¶ '»¢¿¢¿¢ç±×&®M\›9>áø„ãw™O˜O˜O¼óÁí¼Ûy·ó®çz®‡‹ÍË×vÐÛõ$sbNÌ .·îݺwë`ÞoÞoÞÿÎޮޮޮý'»ëºëºë$E©©©<–d’L’ «`¬ ( øCþ?ˆHD"bvL?¦Ó£ºiyÓò¦åpqvvØ*¶Š­zçƒ9éÝ}d“bÉßh/Äþá¶_™mh["IšÐ„&k‰$‘$26yî—ãâYËnËnËn¶wÛÆ¶1º>¸0¸0¸I¬‹u±.(éRº”.…I̳ÅlÈŽ 8` ŽŽŽôÈ—Ë—Ë—­™Û4®²RVÊJ…ÛÊÚk”sAAAAA&í…íÆ¼†lÚͲi·Ä¦Ýïh ¡1µ[g©³ÔYÄÝÆ2c™± JJ)¥í™hžmžmže3wKï–Þ-•ôÈså¹òÜÛ ¦!Ói(÷“žøžøžxÀèg?Oí€v¾yÐßÛ'(m~¶i÷lЙ 3AgŠ’å;å;å;« Þoƒ·`<¥9¥9¥±fÙ:z—··7ü«¥µ¥µ¥•¼ªìRv)»æÇü˜ßÞËÂ+Â+Â+³kýWú¯ô_I'lñ6Û+Ôo¹$ø‹ŽŽŽŽŽ†hvp)—r)ykøéᧇŸÆWÖEÖEÖEÿeþ2™ÿKÿÝ0ºatƒÛc§±ÓØÉ?¾õõ­¯o}m]7e™²LY$ûÖ;¬wXÿ¶/ãe¼ìÛÈ ƒLÒ7WùØ“ö°%Jü-ÁØïh7hD£5k¹–k£u´–ÖÒÚý%>J|”Èžv(u(u(¥’ I†$㇟jjjÿ­×éuz¹À¼˜óâÇl~ël€3¿ÇAñöíÚŽ k2‘‰Lá:I'é$ýß¼‘7òƃ¯)++ÓNÉ dP28´˜aGØ‘Ý÷º¶vmíÚ ÌÂßæÏÞXÎþÇÿ üF¨_IEND®B`‚routino-3.2/web/www/routino/visualiser.html.de 644 233 144 53033 13061246460 15016 0 Routino : Visualisierung der Routing-Daten

Visualiser Router Data
Routino Ansichten This web page allows visualisation of the data that Routino uses for routing. Only data relevant for routing is displayed and some will therefore be excluded.
Anweisungen Zoomen Sie in die Karte und nutzen Sie den Knöpfe unten um die Daten herunter zu laden. Der Server liefert nur ein Ergebnis, wenn das ausgewählte Feld klein genug ist.
Status
Keine Daten angezeigt
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ - Hilfe
Quick Start
Zoom to an area and select one of the buttons to display that type of data.
More data options can be found by expanding the details below each button.

Data Failure
If the area selected is too large (depends on the data type) then the status will say "Failed to get visualiser data" - zoom in and try again.

Router: Routino | Geodaten: | Kacheln:
routino-3.2/web/www/routino/mapprops.js 644 233 144 4534 12753411344 13536 0//////////////////////////////////////////////////////////////////////////////// /////////////////////////// Routino map properties ///////////////////////////// //////////////////////////////////////////////////////////////////////////////// var mapprops={ // contains all properties for the map to be displayed. // EDIT THIS below to change the map library (either 'openlayers' or 'leaflet'). library: "openlayers", //library: "leaflet", // EDIT THIS above to change the map library (either 'openlayers' or 'leaflet'). // EDIT THIS below to change the visible map limits westedge: -11.0, // Minimum longitude (degrees) eastedge: 2.0, // Maximum longitude (degrees) southedge: 49.5, // Minimum latitude (degrees) northedge: 61.0, // Maximum latitude (degrees) zoomout: 4, // Minimum zoom zoomin: 15, // Maximum zoom // EDIT THIS above to change the visible map limits // EDIT THIS below to change the map URL(s) and copyright notices mapdata: [ { label: "OpenStreetMap", tiles: { url: "http://${s}.tile.openstreetmap.org/${z}/${x}/${y}.png", subdomains: ["a","b","c"] }, attribution: { data_url: "http://www.openstreetmap.org/copyright", data_text: "© OpenStreetMap contributors", tile_url: "http://www.openstreetmap.org/copyright", tile_text: "© OpenStreetMap" } } ], // EDIT THIS above to change the map URL(s) and copyright notices // EDIT THIS below to change the map source data editing URL (or leave blank for no link) editurl: "http://www.openstreetmap.org/edit", // EDIT THIS above to change the map source data editing URL (or leave blank for no link) // EDIT THIS below to change the map source data browsing URL (or leave blank for no link) browseurl: "http://www.openstreetmap.org/browse", // EDIT THIS above to change the map source data browsing URL (or leave blank for no link) // EDIT THIS below to change the maximum number of markers to include in the HTML maxmarkers: 9 // EDIT THIS above to change the maximum number of markers to include in the HTML }; // end of map properties routino-3.2/web/www/routino/visualiser.html.hu 644 233 144 52610 13061246462 15044 0 Routino : Útvonaltervező adatok vizuálisan
Visualiser Router Data
Routino vizualizáció This web page allows visualisation of the data that Routino uses for routing. Only data relevant for routing is displayed and some will therefore be excluded.
Útmutatók Zoom in and then use the buttons below to download the data. The server will only return data if the selected area is small enough.
Ãllapot
Nincs megjelenítendő adat
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ - Súgó
Quick Start
Zoom to an area and select one of the buttons to display that type of data.
More data options can be found by expanding the details below each button.

Data Failure
If the area selected is too large (depends on the data type) then the status will say "Failed to get visualiser data" - zoom in and try again.

Útvonaltervező: Routino | Geo Data: | Térképszeletek:
routino-3.2/web/www/routino/router.leaflet.js 644 233 144 146375 12764312663 14710 0// // Routino router web page Javascript // // Part of the Routino routing software. // // This file Copyright 2008-2016 Andrew M. Bishop // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . // var vismarkers, markers, icons, markersmoved, paramschanged; var homelat=null, homelon=null; //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Initialisation ///////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // Make a deep copy of the routino profile. var routino_default={}; for(var l1 in routino) if(typeof(routino[l1])!="object") routino_default[l1]=routino[l1]; else { routino_default[l1]={}; for(var l2 in routino[l1]) if(typeof(routino[l1][l2])!="object") routino_default[l1][l2]=Number(routino[l1][l2]); else { routino_default[l1][l2]={}; for(var l3 in routino[l1][l2]) routino_default[l1][l2][l3]=Number(routino[l1][l2][l3]); } } // Store the latitude and longitude in the routino variable routino.point=[]; for(var marker=1;marker<=mapprops.maxmarkers;marker++) { routino.point[marker]={}; routino.point[marker].lon=""; routino.point[marker].lat=""; routino.point[marker].search=""; routino.point[marker].active=false; routino.point[marker].used=false; routino.point[marker].home=false; } // Process the URL query string and extract the arguments var legal={"^lon" : "^[-0-9.]+$", "^lat" : "^[-0-9.]+$", "^zoom" : "^[0-9]+$", "^lon[1-9]" : "^[-0-9.]+$", "^lat[1-9]" : "^[-0-9.]+$", "^search[1-9]" : "^.+$", "^transport" : "^[a-z]+$", "^highway-[a-z]+" : "^[0-9.]+$", "^speed-[a-z]+" : "^[0-9.]+$", "^property-[a-z]+" : "^[0-9.]+$", "^oneway" : "^(1|0|true|false|on|off)$", "^turns" : "^(1|0|true|false|on|off)$", "^weight" : "^[0-9.]+$", "^height" : "^[0-9.]+$", "^width" : "^[0-9.]+$", "^length" : "^[0-9.]+$", "^language" : "^[-a-zA-Z]+$", "^reverse" : "(1|0|true|false|on|off)", "^loop" : "(1|0|true|false|on|off)"}; var args={}; if(location.search.length>1) { var query,queries; query=location.search.replace(/^\?/,""); query=query.replace(/;/g,"&"); queries=query.split("&"); for(var i=0;i=1;marker--) { var lon=args["lon" + marker]; var lat=args["lat" + marker]; var search=args["search" + marker]; if(lon !== undefined && lat !== undefined && search !== undefined && lon !== "" && lat !== "" && search !== "") { markerAddForm(marker); formSetSearch(marker,search); formSetCoords(marker,lon,lat); markerAddMap(marker); markerSearch(marker); vismarkers++; } else if(lon !== undefined && lat !== undefined && lon !== "" && lat !== "") { markerAddForm(marker); formSetCoords(marker,lon,lat); markerAddMap(marker); markerCoords(marker); vismarkers++; } else if(search !== undefined && search !== "") { markerAddForm(marker); formSetSearch(marker,search); markerSearch(marker); DoSearch(marker); vismarkers++; } else if(vismarkers || marker<=2) { markerAddForm(marker); vismarkers++; } var searchfield=document.forms["form"].elements["search" + marker]; if(searchfield.addEventListener) searchfield.addEventListener("keyup", searchOnReturnKey, false); else if(searchfield.attachEvent) searchfield.attachEvent("keyup", searchOnReturnKey); // Internet Explorer } if(args["loop"] !== undefined) formSetLoopReverse("loop",args["loop"]); else formSetLoopReverse("loop",false); if(args["reverse"] !== undefined) formSetLoopReverse("reverse",args["reverse"]); else formSetLoopReverse("reverse",false); // Update the transport type with the URL settings which updates all HTML forms to defaults. var transport=routino.transport; if(args["transport"] !== undefined) transport=args["transport"]; formSetTransport(transport); // Update the HTML with the URL settings if(args["language"] !== undefined) formSetLanguage(args["language"]); else formSetLanguage(); for(var key in routino.profile_highway) if(args["highway-" + key] !== undefined) formSetHighway(key,args["highway-" + key]); for(var key in routino.profile_speed) if(args["speed-" + key] !== undefined) formSetSpeed(key,args["speed-" + key]); for(var key in routino.profile_property) if(args["property-" + key] !== undefined) formSetProperty(key,args["property-" + key]); for(var key in routino.restrictions) { if(key=="oneway" || key=="turns") { if(args[key] !== undefined) formSetRestriction(key,args[key]); } else { if(args["restrict-" + key] !== undefined) formSetRestriction(key,args["restrict-" + key]); } } // Get the home location cookie and compare to each waypoint var cookies=document.cookie.split("; "); for(var cookie=0;cookie100) value=100; if(value< 0) value= 0; document.forms["form"].elements["highway-" + type].value=value; routino.profile_highway[type][routino.transport]=value; paramschanged=true; updateURLs(); } // // Change of Speed in the form // function formSetSpeed(type,value) // called from router.html (with one argument) { if(value == "+") { value=routino.profile_speed[type][routino.transport]; if(value<10) value=2*Math.floor(value/2)+2; else if(value<30) value=5*Math.floor(value/5)+5; else value=10*Math.floor(value/10)+10; } else if(value == "-") { value=routino.profile_speed[type][routino.transport]; if(value<=10) value=2*Math.ceil(value/2)-2; else if(value<=30) value=5*Math.ceil(value/5)-5; else value=10*Math.ceil(value/10)-10; } else if(value == "=") value=document.forms["form"].elements["speed-" + type].value; value=Number(value); if(isNaN(value)) value= 60; if(value>150) value=150; if(value< 0) value= 0; document.forms["form"].elements["speed-" + type].value=value; routino.profile_speed[type][routino.transport]=value; paramschanged=true; updateURLs(); } // // Change of Property in the form // function formSetProperty(type,value) // called from router.html (with one argument) { if(value == "+") { value=routino.profile_property[type][routino.transport]; if(value>=40 && value<60) value=2*Math.floor(value/2)+2; else value=5*Math.floor(value/5)+5; } else if(value == "-") { value=routino.profile_property[type][routino.transport]; if(value>40 && value<=60) value=2*Math.ceil(value/2)-2; else value=5*Math.ceil(value/5)-5; } else if(value == "=") value=document.forms["form"].elements["property-" + type].value; value=Number(value); if(isNaN(value)) value= 50; if(value>100) value=100; if(value< 0) value= 0; document.forms["form"].elements["property-" + type].value=value; routino.profile_property[type][routino.transport]=value; paramschanged=true; updateURLs(); } // // Change of Restriction rule in the form // function formSetRestriction(type,value) // called from router.html (with one argument) { if(type=="oneway" || type=="turns") { if(value === undefined) value=document.forms["form"].elements["restrict-" + type].checked; document.forms["form"].elements["restrict-" + type].checked=value; routino.profile_restrictions[type][routino.transport]=value; } else if(type=="weight") { if(value == "+") value=routino.profile_restrictions[type][routino.transport]+5; else if(value == "-") value=routino.profile_restrictions[type][routino.transport]-5; else if(value == "=") value=document.forms["form"].elements["restrict-" + type].value; value=Number(value); if(isNaN(value)) value= 0; if(value>50) value=50; if(value< 0) value= 0; document.forms["form"].elements["restrict-" + type].value=value; routino.profile_restrictions[type][routino.transport]=value; } else /* if(type=="height" || type=="width" || type=="length") */ { if(value == "+") value=routino.profile_restrictions[type][routino.transport]+1; else if(value == "-") value=routino.profile_restrictions[type][routino.transport]-1; else if(value == "=") value=document.forms["form"].elements["restrict-" + type].value; value=Number(value); if(isNaN(value)) value= 0; if(value>25) value=25; if(value< 0) value= 0; document.forms["form"].elements["restrict-" + type].value=value; routino.profile_restrictions[type][routino.transport]=value; } paramschanged=true; updateURLs(); } // // Set the feature coordinates from the form when the form changes. // function formSetCoords(marker,lon,lat) // called from router.html (with one argument) { clearSearchResult(marker); if(lon === undefined && lat === undefined) { lon=document.forms["form"].elements["lon" + marker].value; lat=document.forms["form"].elements["lat" + marker].value; } if(lon === "" && lat === "") { document.forms["form"].elements["lon" + marker].value=""; document.forms["form"].elements["lat" + marker].value=""; routino.point[marker].lon=""; routino.point[marker].lat=""; updateURLs(); } else { var lonlat; if(lon==="") { lonlat=map.getCenter(); lon=lonlat.lon; } if(lon<-180) lon=-180; if(lon>+180) lon=+180; if(lat==="") { lonlat=map.getCenter(); lat=lonlat.lat; } if(lat<-90 ) lat=-90 ; if(lat>+90 ) lat=+90 ; lonlat = L.latLng(lat,lon); markers[marker].setLatLng(lonlat); markersmoved=true; document.forms["form"].elements["lon" + marker].value=format5f(lon); document.forms["form"].elements["lat" + marker].value=format5f(lat); routino.point[marker].lon=lon; routino.point[marker].lat=lat; routino.point[marker].used=true; markerCheckHome(marker); } } // // Set the search field from the form when the form changes. // function formSetSearch(marker,search) // called from event handler linked to router.html (with one argument) { clearSearchResult(marker); if(search === undefined) { routino.point[marker].search=document.forms["form"].elements["search" + marker].value; DoSearch(marker); } else { document.forms["form"].elements["search" + marker].value=search; routino.point[marker].search=search; } } // // Change of loop or reverse option in the form // function formSetLoopReverse(type,value) // called from router.html (with one argument) { if(value === undefined) value=document.forms["form"].elements[type].checked; document.forms["form"].elements[type].checked=value; if(type == "loop") routino.loop=value; else routino.reverse=value; updateURLs(); } // // Format a number in printf("%.5f") format. // function format5f(number) { var newnumber=Math.floor(number*100000+0.5); var delta=0; if(newnumber>=0 && newnumber<100000) delta= 100000; if(newnumber<0 && newnumber>-100000) delta=-100000; var string=String(newnumber+delta); var intpart =string.substring(0,string.length-5); var fracpart=string.substring(string.length-5,string.length); if(delta>0) intpart="0"; if(delta<0) intpart="-0"; return(intpart + "." + fracpart); } // // Build a set of URL arguments // function buildURLArguments(lang) { var url= "transport=" + routino.transport; for(var marker=1;marker<=vismarkers;marker++) if(routino.point[marker].active) { url=url + ";lon" + marker + "=" + format5f(routino.point[marker].lon); url=url + ";lat" + marker + "=" + format5f(routino.point[marker].lat); if(routino.point[marker].search !== "") url=url + ";search" + marker + "=" + encodeURIComponent(routino.point[marker].search); } for(var key in routino.profile_highway) if(routino.profile_highway[key][routino.transport]!=routino_default.profile_highway[key][routino.transport]) url=url + ";highway-" + key + "=" + routino.profile_highway[key][routino.transport]; for(var key in routino.profile_speed) if(routino.profile_speed[key][routino.transport]!=routino_default.profile_speed[key][routino.transport]) url=url + ";speed-" + key + "=" + routino.profile_speed[key][routino.transport]; for(var key in routino.profile_property) if(routino.profile_property[key][routino.transport]!=routino_default.profile_property[key][routino.transport]) url=url + ";property-" + key + "=" + routino.profile_property[key][routino.transport]; for(var key in routino.restrictions) if(routino.profile_restrictions[key][routino.transport]!=routino_default.profile_restrictions[key][routino.transport]) url=url + ";" + key + "=" + routino.profile_restrictions[key][routino.transport]; if(routino.loop) url=url + ";loop=true"; if(routino.reverse) url=url + ";reverse=true"; if(lang && routino.language) url=url + ";language=" + routino.language; return(url); } // // Build a set of URL arguments for the map location // function buildMapArguments() { var lonlat = map.getCenter(); var zoom = map.getZoom(); return "lat=" + format5f(lonlat.lat) + ";lon=" + format5f(lonlat.lng) + ";zoom=" + zoom; } // // Update the URLs // function updateURLs() { var urlargs1=buildURLArguments(true); var urlargs2=buildURLArguments(false); var mapargs=buildMapArguments(); var links=document.getElementsByTagName("a"); for(var i=0; i" + data_text + ""; document.getElementById("attribution_tile").innerHTML="" + tile_text + ""; } change_attribution(0); // Define a GPX layer but don't add it yet layerGPX={shortest: null, quickest: null}; // Add a markers vectors layer layerVectors = L.layerGroup(); map.addLayer(layerVectors); // A set of markers markers={}; icons={}; markersmoved=false; paramschanged=false; for(var marker=1;marker<=mapprops.maxmarkers;marker++) { icons[marker]=L.icon({iconUrl: "icons/marker-" + marker + "-red.png", iconSize: L.point(21,25), iconAnchor: L.point(10,25)}); markers[marker]=L.marker(L.point(0,0), {clickable: true, draggable: true, icon: icons[marker]}); markers[marker].on("drag" , (function(m) { return function(evt) { dragMarkerMove (m,evt); }; }(marker))); markers[marker].on("dragend", (function(m) { return function(evt) { dragMarkerComplete(m,evt); }; }(marker))); } icons.home=L.icon({iconUrl: "icons/marker-home-red.png", iconSize: L.point(21,25), iconAnchor: L.point(10,25)}); // Markers to highlight a selected point for(var highlight in highlights) { highlights[highlight]=L.circleMarker(L.latLng(0,0), {radius: 10, stroke: true, weight: 4, color: route_dark_colours[highlight], opacity: 1.0, fill: false}); } // A popup for routing results for(var popup in popups) popups[popup] = createPopup(popup); // Move the map map.on("moveend", updateURLs); var lon =args["lon"]; var lat =args["lat"]; var zoom=args["zoom"]; if(lon !== undefined && lat !== undefined && zoom !== undefined) { if(lonmapprops.eastedge) lon=mapprops.eastedge; if(latmapprops.northedge) lat=mapprops.northedge; if(zoommapprops.zoomin) zoom=mapprops.zoomin; map.setView(L.latLng(lat,lon),zoom); } else map.fitBounds(map.options.maxBounds); // Unhide editing URL if variable set if(mapprops.editurl !== undefined && mapprops.editurl !== "") { var edit_url=document.getElementById("edit_url"); edit_url.style.display=""; edit_url.href=mapprops.editurl; } updateURLs(); } // // Callback for a marker drag occuring on the map. // function dragMarkerMove(marker,event) { dragMarkerSetForm(marker); } // // Callback for completing a drag occuring on the map. // function dragMarkerComplete(marker,event) { dragMarkerSetForm(marker); updateURLs(); } // // Set the feature coordinates in the form after dragging it on the map. // function dragMarkerSetForm(marker) { var lonlat = markers[marker].getLatLng(); formSetCoords(marker,lonlat.lng,lonlat.lat); } //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Marker dragging //////////////////////////////// //////////////////////////////////////////////////////////////////////////////// var dragged_waypoint=null,dragged_marker=null; var dragged_waypoint_over=null,dragged_marker_over=null; var dragged_icon_x,dragged_icon_y; // // Drag a waypoint up or down the list. // function dragWaypointStart(e) { var w=e.target; while(w!=null && w.className != "waypoint") w=w.parentElement; if(w===null) return; w.style.opacity = "0.5"; dragged_waypoint=w; dragged_marker=Number.parseInt(dragged_waypoint.id.substring(8)); dragged_icon_x=e.clientX-e.target.offsetLeft; dragged_icon_y=e.clientY-e.target.offsetTop; } function dragWaypointEnd(e) { e.preventDefault(); if(dragged_waypoint===null) return; dragged_waypoint.style.opacity = ""; dragged_waypoint=null; dragged_marker=null; if(dragged_waypoint_over===null) return; dragged_waypoint_over.style.border = ""; dragged_waypoint_over=null; dragged_marker_over=null; } // // Drag a waypoint over another one up or down the list. // function dragWaypointEnter(e) { var w=e.target; while(w!=null && w.className != "waypoint") w=w.parentElement; if(w===null) return; if(dragged_waypoint_over!==null) dragged_waypoint_over.style.border = ""; if(w==dragged_waypoint) return; dragged_waypoint_over=w; dragged_marker_over=Number.parseInt(dragged_waypoint_over.id.substring(8)); if(dragged_marker>dragged_marker_over) w.style.borderTop = "3px solid black"; else w.style.borderBottom = "3px solid black"; } function dragWaypointOver(e) { e.preventDefault(); } function dragWaypointLeave(e) { var w=e.target; while(w!=null && w.className != "waypoint") w=w.parentElement; if(w===null) return; if(w==dragged_waypoint_over) return; w.style.border = ""; } // // Drop the waypoint after dragging up or down the list. // function dragWaypointDrop(e) { e.preventDefault(); if(dragged_marker_over===null) return; if(dragged_marker_over>dragged_marker) for(var m=dragged_marker;mdragged_marker_over;m--) markerSwap(m,m-1); } // // Drag a waypoint over the map. // function dragWaypointMapEnter(e) { e.preventDefault(); if(dragged_waypoint_over!==null) dragged_waypoint_over.style.border = ""; } function dragWaypointMapOver(e) { e.preventDefault(); } function dragWaypointMapLeave(e) { e.preventDefault(); } // // Drop the waypoint after dragging it over the map. // function dragWaypointMapDrop(e) { e.preventDefault(); var rect = document.getElementById("map").getBoundingClientRect(); var lonlat=map.containerPointToLatLng(L.point(e.clientX-rect.left-window.scrollX-dragged_icon_x+8, e.clientY-rect.top -window.scrollY-dragged_icon_y+21)); formSetCoords(dragged_marker,lonlat.lng,lonlat.lat); if(!routino.point[dragged_marker].active) markerToggleMap(dragged_marker); } //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Marker handling //////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // // Toggle a marker on the map. // function markerToggleMap(marker) // called from router.html { if(!routino.point[marker].used) { routino.point[marker].used=true; markerCentre(marker); markerCoords(marker); } markerAddRemoveMap(marker,!routino.point[marker].active); updateSearchButtons(); } // // Show or hide a marker on the map. // function markerAddRemoveMap(marker,active) { if(active) markerAddMap(marker); else markerRemoveMap(marker); } // // Show a marker on the map. // function markerAddMap(marker) { clearSearchResult(marker); layerVectors.addLayer(markers[marker]); routino.point[marker].active=true; routino.point[marker].used=true; updateIcon(marker); markersmoved=true; updateURLs(); } // // Remove a marker from the map. // function markerRemoveMap(marker) { clearSearchResult(marker); layerVectors.removeLayer(markers[marker]); routino.point[marker].active=false; updateIcon(marker); markersmoved=true; updateURLs(); } // // Display search string for the marker // function markerSearch(marker) // called from router.html { clearSearchResult(marker); document.getElementById("coords" + marker).style.display="none"; document.getElementById("search" + marker).style.display=""; } // // Display coordinates for the marker // function markerCoords(marker) // called from router.html { clearSearchResult(marker); document.getElementById("search" + marker).style.display="none"; document.getElementById("coords" + marker).style.display=""; } // // Centre the marker on the map // function markerCentre(marker) // called from router.html { if(!routino.point[marker].used) return; clearSearchResult(marker); var lonlat=map.getCenter(); formSetCoords(marker,lonlat.lng,lonlat.lat); } // // Centre the map on the marker // function markerRecentre(marker) // called from router.html { if(!routino.point[marker].used) return; clearSearchResult(marker); var lon=routino.point[marker].lon; var lat=routino.point[marker].lat; var lonlat = L.latLng(lat,lon); map.panTo(lonlat); } // // Clear the current marker. // function markerRemove(marker) // called from router.html { clearSearchResult(marker); for(var m=marker;mmarker;m--) markerCopy(m,m-1); markerClearForm(marker-1); } // // Add a marker after the current one. // function markerAddAfter(marker) // called from router.html { if(vismarkers==mapprops.maxmarkers) return false; clearSearchResult(marker); markerAddForm(++vismarkers); for(var m=vismarkers;m>(marker+1);m--) markerCopy(m,m-1); markerClearForm(marker+1); } // // Set this marker as the home location. // function markerHome(marker) // called from router.html { if(!routino.point[marker].used) { markerMoveHome(marker); } else { clearSearchResult(marker); markerSetClearHome(marker,!routino.point[marker].home); } } // // Set this marker as the current location. // function markerLocate(marker) // called from router.html { clearSearchResult(marker); function success(position) { formSetCoords(marker,position.coords.longitude,position.coords.latitude); markerAddMap(marker); } function failure(error) { alert("Error: " + error.message); } if(navigator.geolocation) navigator.geolocation.getCurrentPosition(success,failure); else alert("Error: Geolocation unavailable"); } // // Update the search buttons enable/disable. // function updateSearchButtons() { var markersactive=0; for(var m=1;m<=vismarkers;m++) if(routino.point[m].active) markersactive++; if(markersactive<2) { document.getElementById("shortest1").disabled="disabled"; document.getElementById("quickest1").disabled="disabled"; document.getElementById("shortest2").disabled="disabled"; document.getElementById("quickest2").disabled="disabled"; } else { document.getElementById("shortest1").disabled=""; document.getElementById("quickest1").disabled=""; document.getElementById("shortest2").disabled=""; document.getElementById("quickest2").disabled=""; } } // // Update an icon to set colours and home or normal marker. // function updateIcon(marker) { if(routino.point[marker].home) { if(routino.point[marker].active) document.getElementById("icon" + marker).src="icons/marker-home-red.png"; else document.getElementById("icon" + marker).src="icons/marker-home-grey.png"; markers[marker].setIcon(icons.home); } else { if(routino.point[marker].active) document.getElementById("icon" + marker).src="icons/marker-" + marker + "-red.png"; else document.getElementById("icon" + marker).src="icons/marker-" + marker + "-grey.png"; markers[marker].setIcon(icons[marker]); } markers[marker].update(); } // // Move the marker to the home location // function markerMoveHome(marker) { if(homelon===null || homelat===null) return; routino.point[marker].home=true; routino.point[marker].used=true; formSetCoords(marker,homelon,homelat); markerAddMap(marker); } // // Set or clear the home marker icon // function markerSetClearHome(marker,home) { var cookie; var date = new Date(); if(home) { homelat=format5f(routino.point[marker].lat); homelon=format5f(routino.point[marker].lon); cookie="Routino-home=lon:" + homelon + ":lat:" + homelat; date.setUTCFullYear(date.getUTCFullYear()+5); routino.point[marker].home=true; } else { homelat=null; homelon=null; cookie="Routino-home=unset"; date.setUTCFullYear(date.getUTCFullYear()-1); routino.point[marker].home=false; } document.cookie=cookie + ";expires=" + date.toGMTString(); updateIcon(marker); for(var m=1;m<=mapprops.maxmarkers;m++) markerCheckHome(m); } // // Check if a marker is the home marker // function markerCheckHome(marker) { var home=routino.point[marker].home; if(routino.point[marker].lon==homelon && routino.point[marker].lat==homelat) routino.point[marker].home=true; else routino.point[marker].home=false; if(home!=routino.point[marker].home) updateIcon(marker); } // // Move this marker up. // function markerMoveUp(marker) // called from router.html { if(marker==1) { for(var m=1;m1;m--) markerSwap(m,m-1); } else markerSwap(marker,marker+1); } // // Copy a marker from one place to another. // function markerCopy(marker1,marker2) { for(var element in routino.point[marker2]) routino.point[marker1][element]=routino.point[marker2][element]; document.getElementById("search" + marker1).style.display=document.getElementById("search" + marker2).style.display; document.getElementById("coords" + marker1).style.display=document.getElementById("coords" + marker2).style.display; document.forms["form"].elements["search" + marker1].value=document.forms["form"].elements["search" + marker2].value; formSetCoords(marker1,routino.point[marker1].lon,routino.point[marker1].lat); markerAddRemoveMap(marker1,routino.point[marker1].active); } // // Swap a pair of markers. // function markerSwap(marker1,marker2) { for(var element in routino.point[marker2]) { var temp=routino.point[marker1][element]; routino.point[marker1][element]=routino.point[marker2][element]; routino.point[marker2][element]=temp; } var search_display=document.getElementById("search" + marker1).style.display; document.getElementById("search" + marker1).style.display=document.getElementById("search" + marker2).style.display; document.getElementById("search" + marker2).style.display=search_display; var coords_display=document.getElementById("coords" + marker1).style.display; document.getElementById("coords" + marker1).style.display=document.getElementById("coords" + marker2).style.display; document.getElementById("coords" + marker2).style.display=coords_display; var search_value=document.forms["form"].elements["search" + marker1].value; document.forms["form"].elements["search" + marker1].value=document.forms["form"].elements["search" + marker2].value; document.forms["form"].elements["search" + marker2].value=search_value; formSetCoords(marker1,routino.point[marker1].lon,routino.point[marker1].lat); formSetCoords(marker2,routino.point[marker2].lon,routino.point[marker2].lat); markerAddRemoveMap(marker1,routino.point[marker1].active); markerAddRemoveMap(marker2,routino.point[marker2].active); } // // Reverse the markers. // function markersReverse() // called from router.html { for(var marker=1;marker<=vismarkers/2;marker++) markerSwap(marker,vismarkers+1-marker); markersmoved=true; updateURLs(); } // // Close the loop. // function markersLoop() // called from router.html { if(vismarkers==mapprops.maxmarkers) return false; if(routino.point[vismarkers].lon==routino.point[1].lon && routino.point[vismarkers].lat==routino.point[1].lat) { if(routino.point[vismarkers].active) return false; else { markerToggleMap(vismarkers); return true; } } if(routino.point[vismarkers].used) markerAddForm(++vismarkers); markerCopy(vismarkers,1); markersmoved=true; updateURLs(); updateSearchButtons(); } // // Display the form for a marker // function markerAddForm(marker) { document.getElementById("waypoint" + marker).style.display=""; } // // Hide the form for a marker // function markerRemoveForm(marker) { document.getElementById("waypoint" + marker).style.display="none"; markerClearForm(marker); } // // Clear the form for a marker // function markerClearForm(marker) { markerRemoveMap(marker); markerCoords(marker); formSetCoords(marker,"",""); formSetSearch(marker,""); updateIcon(marker); routino.point[marker].used=false; routino.point[marker].home=false; routino.point[marker].active=false; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////// Route results handling //////////////////////////// //////////////////////////////////////////////////////////////////////////////// var route_light_colours={shortest: "#60C060", quickest: "#6060C0"}; var route_dark_colours ={shortest: "#408040", quickest: "#404080"}; var highlights={shortest: null, quickest: null}; var popups={shortest: null, quickest: null}; var routepoints={shortest: {}, quickest: {}}; // // Highlight a specific item in the route // function highlight(type,line,action) { if(action == "clear") { layerVectors.removeLayer(highlights[type]); drawPopup(type,null); } else if(action == "zoom") { var lonlat = L.latLng(routepoints[type][line].lat,routepoints[type][line].lon); map.setView(lonlat,mapprops.zoomin-2); } else { // Marker var lonlat = L.latLng(routepoints[type][line].lat,routepoints[type][line].lon); highlights[type].setLatLng(lonlat); layerVectors.addLayer(highlights[type]); // Popup drawPopup(type,"" + routepoints[type][line].html + "
"); } highlights[type].redraw(); } // // Create a popup - independent of map because want it fixed on screen not fixed on map. // function createPopup(type) { var popup=document.createElement("div"); popup.className = "popup"; popup.innerHTML = ""; popup.style.display = "none"; popup.style.position = "fixed"; popup.style.top = "-4000px"; popup.style.left = "-4000px"; popup.style.zIndex = "100"; popup.style.padding = "5px"; popup.style.opacity=0.85; popup.style.backgroundColor=route_light_colours[type]; popup.style.border="4px solid " + route_dark_colours[type]; document.body.appendChild(popup); return(popup); } // // Draw a popup - independent of map because want it fixed on screen not fixed on map. // function drawPopup(type,html) { var popup=popups[type]; if(html===null) { popup.style.display="none"; return; } if(popup.style.display=="none") { var map_div=document.getElementById("map"); popup.style.left =map_div.offsetParent.offsetLeft+map_div.offsetLeft+60 + "px"; popup.style.top = map_div.offsetTop +30 + "px"; popup.style.width =map_div.clientWidth-120 + "px"; popup.style.display=""; } var close="X"; popup.innerHTML=close+html; } // // Remove a GPX trace // function removeGPXTrace(type) { map.removeLayer(layerGPX[type]); layerGPX[type]=null; displayStatus(type,"no_info"); document.getElementById(type + "_links").style.display = "none"; document.getElementById(type + "_route").innerHTML = ""; hideshow_hide(type); } //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Server handling //////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // // Define an AJAX request object // function ajaxGET(url,success,failure,state) { var ajaxRequest=new XMLHttpRequest(); function ajaxGOT(options) { if(this.readyState==4) if(this.status==200) { if(typeof(options.success)=="function") options.success(this,options.state); } else { if(typeof(options.failure)=="function") options.failure(this,options.state); } } ajaxRequest.onreadystatechange = function(){ ajaxGOT.call(ajaxRequest,{success: success, failure: failure, state: state}); }; ajaxRequest.open("GET", url, true); ajaxRequest.send(null); } // // Display data statistics // function displayStatistics() // called from router.html { // Use AJAX to get the statistics ajaxGET("statistics.cgi", runStatisticsSuccess); } // // Success in running data statistics generation. // function runStatisticsSuccess(response) { document.getElementById("statistics_data").innerHTML="
" + response.responseText + "
"; document.getElementById("statistics_link").style.display="none"; } // // Submit form - perform the routing // function findRoute(type) // called from router.html { tab_select("results"); hideshow_hide("help_options"); hideshow_hide("shortest"); hideshow_hide("quickest"); displayStatus("result","running"); var url="router.cgi" + "?" + buildURLArguments(true) + ";type=" + type; // Destroy the existing layer(s) highlight("shortest",-1,"clear"); highlight("quickest",-1,"clear"); if(markersmoved || paramschanged) { if(layerGPX.shortest!==null) removeGPXTrace("shortest"); if(layerGPX.quickest!==null) removeGPXTrace("quickest"); markersmoved=false; paramschanged=false; } else if(layerGPX[type]!==null) removeGPXTrace(type); // Use AJAX to run the router routing_type=type; ajaxGET(url, runRouterSuccess, runRouterFailure); } // // Success in running router. // function runRouterSuccess(response) { var lines=response.responseText.split("\n"); var uuid=lines[0]; var success=lines[1]; var link; // Update the status message if(success=="ERROR") { displayStatus("result","error"); hideshow_show("help_route"); link=document.getElementById("router_log_error"); link.href="results.cgi?uuid=" + uuid + ";type=router;format=log"; return; } else { displayStatus("result","complete"); hideshow_hide("help_route"); link=document.getElementById("router_log_complete"); link.href="results.cgi?uuid=" + uuid + ";type=router;format=log"; } // Update the routing result message link=document.getElementById(routing_type + "_html"); link.href="results.cgi?uuid=" + uuid + ";type=" + routing_type + ";format=html"; link=document.getElementById(routing_type + "_gpx_track"); link.href="results.cgi?uuid=" + uuid + ";type=" + routing_type + ";format=gpx-track"; link=document.getElementById(routing_type + "_gpx_route"); link.href="results.cgi?uuid=" + uuid + ";type=" + routing_type + ";format=gpx-route"; link=document.getElementById(routing_type + "_text_all"); link.href="results.cgi?uuid=" + uuid + ";type=" + routing_type + ";format=text-all"; link=document.getElementById(routing_type + "_text"); link.href="results.cgi?uuid=" + uuid + ";type=" + routing_type + ";format=text"; document.getElementById(routing_type + "_links").style.display = ""; // Add a GPX layer var url="results.cgi?uuid=" + uuid + ";type=" + routing_type + ";format=gpx-track"; ajaxGET(url, runGPXSuccess); hideshow_show(routing_type); displayResult(routing_type,uuid); } // // Success in getting GPX. // function runGPXSuccess(response) { var lines=response.responseText.split("\n"); var coords=[]; var segment=-1; for(var line=0;line/)) { segment++; coords[segment]=[]; } if(lines[line].match(/^")) table=1; else continue; } if(thisline.match("")) break; if(thisline.match("")) { var rowtype=RegExp.$1; if(rowtype=="c") { thisline.match(": *([-0-9.]+) *([-0-9.]+)"); points[point]={lat: Number(RegExp.$1), lon: Number(RegExp.$2), html: "", highway: "", distance: "", total: ""}; point++; } else if(rowtype=="n") { points[point-1].html += thisline; } else if(rowtype=="s") { thisline.match("([^<]+)"); points[point-1].highway = RegExp.$1; thisline.match("([^<]+)"); points[point-1].distance = RegExp.$1; thisline.match("([^<]+)"); points[point-1].total = RegExp.$1; thisline.match("^(.*)."); points[point-1].html += RegExp.$1; } else if(rowtype=="t") { points[point-1].html += thisline; thisline.match("([^<]+)"); points[point-1].total = RegExp.$1; thisline.match("(.*)"); points[point-1].highway = RegExp.$1; } } } displayStatus(routing_type,"info",points[point-1].total.bold()); var result=""; for(var p=0;p" + "
#" + (p+1) + "" + points[p].highway; } result=result + "
"; document.getElementById(routing_type + "_route").innerHTML=result; } // // Failure in getting route. // function getRouteFailure(response) { document.getElementById(routing_type + "_route").innerHTML = ""; } // // Perform a search // function DoSearch(marker) { // Use AJAX to get the search result var search=routino.point[marker].search; var mapbounds=map.getBounds(); var url="search.cgi"; url=url + "?marker=" + marker; url=url + ";lonmin=" + format5f(mapbounds.getWest()); url=url + ";latmin=" + format5f(mapbounds.getSouth()); url=url + ";lonmax=" + format5f(mapbounds.getEast()); url=url + ";latmax=" + format5f(mapbounds.getNorth()); url=url + ";search=" + encodeURIComponent(search); ajaxGET(url,runSearchSuccess); } var searchresults=[]; // // Success in running search. // function runSearchSuccess(response) { var lines=response.responseText.split("\n"); var marker=lines[0]; var cpuinfo=lines[1]; // not used var message=lines[2]; if(message !== "") { alert(message); return; } searchresults[marker]=[]; for(var line=3;line"; for(var n=0;n0) innerHTML+="
"; innerHTML+="" + searchresults[marker][n].name + ""; } results.innerHTML=innerHTML; results.style.display=""; } } // // Display search results. // function choseSearchResult(marker,n) { if(n>=0) { formSetSearch(marker,searchresults[marker][n].name); formSetCoords(marker,searchresults[marker][n].lon,searchresults[marker][n].lat); markerAddMap(marker); } } // // Clear search results. // function clearSearchResult(marker) { document.getElementById("searchresults" + marker).style.display="none"; } routino-3.2/web/www/routino/visualiser.openlayers.js 644 233 144 102760 12327767604 16315 0// // Routino data visualiser web page Javascript // // Part of the Routino routing software. // // This file Copyright 2008-2014 Andrew M. Bishop // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . // // // Data types // var data_types=[ "junctions", "super", "waytype", "highway", "transport", "barrier", "turns", "speed", "weight", "height", "width", "length", "property", "errorlogs" ]; //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Initialisation ///////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // Process the URL query string and extract the arguments var legal={"^lon" : "^[-0-9.]+$", "^lat" : "^[-0-9.]+$", "^zoom" : "^[0-9]+$"}; var args={}; if(location.search.length>1) { var query,queries; query=location.search.replace(/^\?/,""); query=query.replace(/;/g,"&"); queries=query.split("&"); for(var i=0;i" + data_text + ""; document.getElementById("attribution_tile").innerHTML="" + tile_text + ""; } change_attribution(0); // Add two vectors layers (one for highlights that display behind the vectors) layerHighlights = new OpenLayers.Layer.Vector("Highlights",{displayInLayerSwitcher: false}); map.addLayer(layerHighlights); layerVectors = new OpenLayers.Layer.Vector("Markers",{displayInLayerSwitcher: false}); map.addLayer(layerVectors); // Handle feature selection and popup select = new OpenLayers.Control.SelectFeature(layerVectors, {onSelect: selectFeature, onUnselect: unselectFeature}); map.addControl(select); select.activate(); createPopup(); // Add a boxes layer layerBoxes = new OpenLayers.Layer.Boxes("Boundary",{displayInLayerSwitcher: false}); map.addLayer(layerBoxes); box=null; // Move the map map.events.register("moveend", map, updateURLs); var lon =args["lon"]; var lat =args["lat"]; var zoom=args["zoom"]; if(lon !== undefined && lat !== undefined && zoom !== undefined) { if(lonmapprops.eastedge) lon=mapprops.eastedge; if(latmapprops.northedge) lat=mapprops.northedge; if(zoommapprops.zoomin) zoom=mapprops.zoomin; var lonlat = new OpenLayers.LonLat(lon,lat); lonlat.transform(epsg4326,epsg900913); map.moveTo(lonlat,zoom-map.minZoomLevel); } else { map.setCenter(map.restrictedExtent.getCenterLonLat(), map.getZoomForExtent(map.restrictedExtent,true)); map.maxResolution = map.getResolution(); } // Unhide editing URL if variable set if(mapprops.editurl !== undefined && mapprops.editurl !== "") { var edit_url=document.getElementById("edit_url"); edit_url.style.display=""; edit_url.href=mapprops.editurl; } updateURLs(); } // // Format a number in printf("%.5f") format. // function format5f(number) { var newnumber=Math.floor(number*100000+0.5); var delta=0; if(newnumber>=0 && newnumber<100000) delta= 100000; if(newnumber<0 && newnumber>-100000) delta=-100000; var string=String(newnumber+delta); var intpart =string.substring(0,string.length-5); var fracpart=string.substring(string.length-5,string.length); if(delta>0) intpart="0"; if(delta<0) intpart="-0"; return(intpart + "." + fracpart); } // // Build a set of URL arguments for the map location // function buildMapArguments() { var lonlat = map.getCenter().clone(); lonlat.transform(epsg900913,epsg4326); var zoom = map.getZoom() + map.minZoomLevel; return "lat=" + format5f(lonlat.lat) + ";lon=" + format5f(lonlat.lon) + ";zoom=" + zoom; } // // Update the URLs // function updateURLs() { var mapargs=buildMapArguments(); var links=document.getElementsByTagName("a"); for(var i=0; i" + id + ""); } } } drawPopup(string.split("\n").join("
")); } //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Server handling //////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // // Define an AJAX request object // function ajaxGET(url,success,failure,state) { var ajaxRequest=new XMLHttpRequest(); function ajaxGOT(options) { if(this.readyState==4) if(this.status==200) { if(typeof(options.success)=="function") options.success(this,options.state); } else { if(typeof(options.failure)=="function") options.failure(this,options.state); } } ajaxRequest.onreadystatechange = function(){ ajaxGOT.call(ajaxRequest,{success: success, failure: failure, state: state}); }; ajaxRequest.open("GET", url, true); ajaxRequest.send(null); } // // Display the status // function displayStatus(type,subtype,content) { var child=document.getElementById("result_status").firstChild; do { if(child.id !== undefined) child.style.display="none"; child=child.nextSibling; } while(child !== null); var chosen_status=document.getElementById("result_status_" + type); chosen_status.style.display=""; if(subtype !== undefined) { var format_status=document.getElementById("result_status_" + subtype).innerHTML; chosen_status.innerHTML=format_status.replace("#",String(content)); } } // // Display data statistics // function displayStatistics() { // Use AJAX to get the statistics ajaxGET("statistics.cgi", runStatisticsSuccess); } // // Success in running data statistics generation. // function runStatisticsSuccess(response) { document.getElementById("statistics_data").innerHTML="
" + response.responseText + "
"; document.getElementById("statistics_link").style.display="none"; } // // Get the requested data // function displayData(datatype) // called from visualiser.html { for(var data in data_types) hideshow_hide(data_types[data]); if(datatype !== "") hideshow_show(datatype); // Delete the old data unselectFeature(); select.deactivate(); layerVectors.destroyFeatures(); layerHighlights.destroyFeatures(); if(box !== null) layerBoxes.removeMarker(box); box=null; // Print the status displayStatus("no_data"); // Return if just here to clear the data if(datatype === "") return; // Get the new data var mapbounds=map.getExtent().clone(); mapbounds.transform(epsg900913,epsg4326); var url="visualiser.cgi"; url=url + "?lonmin=" + format5f(mapbounds.left); url=url + ";latmin=" + format5f(mapbounds.bottom); url=url + ";lonmax=" + format5f(mapbounds.right); url=url + ";latmax=" + format5f(mapbounds.top); url=url + ";data=" + datatype; // Use AJAX to get the data switch(datatype) { case "junctions": ajaxGET(url, runJunctionsSuccess, runFailure); break; case "super": ajaxGET(url, runSuperSuccess, runFailure); break; case "waytype": var waytype; var waytypes=document.forms["waytypes"].elements["waytype"]; for(var h in waytypes) if(waytypes[h].checked) waytype=waytypes[h].value; url+="-" + waytype; ajaxGET(url, runWaytypeSuccess, runFailure); break; case "highway": var highway; var highways=document.forms["highways"].elements["highway"]; for(var h in highways) if(highways[h].checked) highway=highways[h].value; url+="-" + highway; ajaxGET(url, runHighwaySuccess, runFailure); break; case "transport": var transport; var transports=document.forms["transports"].elements["transport"]; for(var t in transports) if(transports[t].checked) transport=transports[t].value; url+="-" + transport; ajaxGET(url, runTransportSuccess, runFailure); break; case "barrier": var transport; var transports=document.forms["barriers"].elements["barrier"]; for(var t in transports) if(transports[t].checked) transport=transports[t].value; url+="-" + transport; ajaxGET(url, runBarrierSuccess, runFailure); break; case "turns": ajaxGET(url, runTurnsSuccess, runFailure); break; case "speed": case "weight": case "height": case "width": case "length": ajaxGET(url, runLimitSuccess, runFailure); break; case "property": var property; var properties=document.forms["properties"].elements["property"]; for(var p in properties) if(properties[p].checked) property=properties[p].value; url+="-" + property; ajaxGET(url, runPropertySuccess, runFailure); break; case "errorlogs": ajaxGET(url, runErrorlogSuccess, runFailure); break; } } // // Success in getting the junctions. // function runJunctionsSuccess(response) { var lines=response.responseText.split("\n"); var junction_colours={ 0: "#FFFFFF", 1: "#FF0000", 2: "#FFFF00", 3: "#00FF00", 4: "#8B4513", 5: "#00BFFF", 6: "#FF69B4", 7: "#000000", 8: "#000000", 9: "#000000" }; var styles={}; for(var colour in junction_colours) styles[colour]=new OpenLayers.Style({},{stroke: false, pointRadius: 2,fillColor: junction_colours[colour], cursor: "pointer"}); var features=[]; for(var line=0;line. // // // Display one of the tabs and associated DIV and hide the others // function tab_select(name) { var tab=document.getElementById("tab_" + name); if(tab.className=="tab_selected") return; // Hide the deslected tabs and DIVs var parent=tab.parentNode; var child=parent.firstChild; do { if(String(child.id).substr(0,4)=="tab_") { var div=document.getElementById(child.id + "_div"); child.className="tab_unselected"; div.style.display="none"; } child=child.nextSibling; } while(child!==null); // Display the newly selected tab and DIV tab.className="tab_selected"; document.getElementById(tab.id + "_div").style.display=""; } // // Show the associated DIV // function hideshow_show(name) { document.getElementById("hideshow_" + name + "_show").className="hideshow_hide"; document.getElementById("hideshow_" + name + "_hide").className="hideshow_show"; document.getElementById("hideshow_" + name + "_div").style.display=""; } // // Hide the associated DIV // function hideshow_hide(name) { document.getElementById("hideshow_" + name + "_show").className="hideshow_show"; document.getElementById("hideshow_" + name + "_hide").className="hideshow_hide"; document.getElementById("hideshow_" + name + "_div").style.display="none"; } // // Toggle the associated DIV // function hideshow_toggle(name) { if(document.getElementById("hideshow_" + name + "_div").style.display=="none") hideshow_show(name); else hideshow_hide(name); } routino-3.2/web/www/routino/visualiser.html.en 644 233 144 52041 13061246460 15026 0 Routino : Data Visualiser for Routing Data
Visualiser Router Data
Routino Visualiser This web page allows visualisation of the data that Routino uses for routing. Only data relevant for routing is displayed and some will therefore be excluded.
Instructions Zoom in and then use the buttons below to download the data. The server will only return data if the selected area is small enough.
Status
No data displayed
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ - Help
Quick Start
Zoom to an area and select one of the buttons to display that type of data.
More data options can be found by expanding the details below each button.

Data Failure
If the area selected is too large (depends on the data type) then the status will say "Failed to get visualiser data" - zoom in and try again.

Router: Routino | Geo Data: | Tiles:
routino-3.2/web/www/routino/paths.pl 644 233 144 2701 11763176234 13013 0# # Routino CGI paths Perl script # # Part of the Routino routing software. # # This file Copyright 2008-2012 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # Directory path parameters # EDIT THIS to set the root directory for the non-web data files. $root_dir="../.."; # EDIT THIS to change the location of the individual directories. $bin_dir="$root_dir/bin"; $data_dir="$root_dir/data"; $results_dir="$root_dir/results"; # EDIT THIS to set the filename prefix for the routing database files. $data_prefix=""; # EDIT THIS to change the names of the executables (enables easy selection of slim mode). $router_exe="router"; $filedumper_exe="filedumper"; # EDIT THIS to change the search type and base URL (must be a type recognised by search.pl). $search_type="nominatim"; $search_baseurl="http://nominatim.openstreetmap.org/search"; 1; routino-3.2/web/www/routino/update-profiles.pl 755 233 144 4536 12767517273 15021 0#!/usr/bin/perl # # Update the Routino profile files # # Part of the Routino routing software. # # This file Copyright 2011-2014, 2016 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use strict; # Use the directory paths script require "./paths.pl"; # The parameters for the execution my $params=""; $params.=" --dir=$main::data_dir" if($main::data_dir); $params.=" --prefix=$main::data_prefix" if($main::data_prefix); # Generate the Perl profiles. open(PROFILE,">profiles.pl") || die "Cannot open 'profiles.pl' to write.\n"; print PROFILE "################################################################################\n"; print PROFILE "########################### Routino default profile ############################\n"; print PROFILE "################################################################################\n"; print PROFILE "\n"; open(EXECUTE,"$main::bin_dir/$main::router_exe $params --help-profile-perl |") || die "Failed to execute router to generate profiles.\n"; while() { print PROFILE; } close(EXECUTE); print PROFILE "\n"; print PROFILE "1;\n"; close(PROFILE); # Generate the Javascript profiles. open(PROFILE,">profiles.js") || die "Cannot open 'profiles.js' to write.\n"; print PROFILE "////////////////////////////////////////////////////////////////////////////////\n"; print PROFILE "/////////////////////////// Routino default profile ////////////////////////////\n"; print PROFILE "////////////////////////////////////////////////////////////////////////////////\n"; print PROFILE "\n"; open(EXECUTE,"$main::bin_dir/$main::router_exe $params --help-profile-json |") || die "Failed to execute router to generate profiles.\n"; while() { print PROFILE; } close(EXECUTE); close(PROFILE); routino-3.2/web/www/routino/visualiser.html.pl 644 233 144 52520 13061246464 15045 0 Routino : Data Visualiser for Routing Data
Visualiser Router Data
Wizualizer Routino This web page allows visualisation of the data that Routino uses for routing. Only data relevant for routing is displayed and some will therefore be excluded.
Instrukcje Zoom in and then use the buttons below to download the data. The server will only return data if the selected area is small enough.
Status
Brak danych do wyświetlenia
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ - Pomoc
Quick Start
Zoom to an area and select one of the buttons to display that type of data.
More data options can be found by expanding the details below each button.

Data Failure
If the area selected is too large (depends on the data type) then the status will say "Failed to get visualiser data" - zoom in and try again.

Router: Routino | Geo Data: | Kafelki:
routino-3.2/web/www/routino/router.html.hu 644 233 144 76536 13061246454 14214 0 Routino : Openstreetmap alapú útvonaltervező
Beállítások Eredmény Adatok
Routino openstreetmap útvonaltervező This web page allows routing within the data collected by OpenStreetMap. Select start and end points (click on the marker icons below), select routing preferences then find a route.
+ - Útpontok
Kör bezárása:
Ellenkező irány:
Find
+ - Közlekedési mód
Gyalog:
Lovas:
Kerekesszékes:
Kerékpáros:
Robogós:
Motoros:
Autós:
Kisteherautós:
Kamionos:
Buszos:
+ - Út preferencia
+ - Sebességkorlát
+ - Út tulajdonságok
+ - Kizáró tényezők
+ - Súgó
Quick Start
Click on marker icons (above) to place them on the map (right). Then drag them to the correct position. Zooming the map before placing the markers is probably easiest. Alternatively type the latitude and longitude into the boxes above.

Select the transport type, allowed highway types, speed limits, highway properties and other restrictions from the options above. Select "Shortest" or "Quickest" to calculate the route and display it on the map.

Waypoints
Clicking on the marker icons will toggle the display of them on the map. When a route is calculated it will visit (as close as possible for the selected transport type) each of the waypoints that have markers on the map in the order given.

Transport Type
Selecting a transport type will restrict the chosen route to those on which it is allowed and set default values for the other parameters.

Highway Preferences
The highway preference is selected as a percentage and routes are chosen that try to follow the preferred highways. For example if a "Primary" road is given a "110%" preference and a "Secondary" road is given a "100%" preference then it means that a route on a Primary road can be up to 10% longer than on a secondary road and still be selected.

Speed Limits
The speed limits chosen here for the different types of highway apply if the highway has no other speed limit marked or it is higher than the chosen one.

Property Preferences
The property preference is selected as a percentage and routes are chosen that try to follow highways with the preferred property. For example if a "Paved" highway is given a "75%" preference then it means that an unpaved highway is automatically given a "25%" preference so that a route on a paved highway can be 3 times the length of an unpaved one and still be selected.

Other Restrictions
These allow a route to be found that avoids marked limits on weight, height, width or length. It is also possible to ignore one-way restrictions (e.g. if walking).

Útvonaltervező: Routino | Geo Data: | Térképszeletek:
routino-3.2/web/www/routino/visualiser.html.nl 644 233 144 52206 13061246463 15043 0 Routino : Data Visualiser for Routing Data
Visualiser Router Data
Routino Visualiser This web page allows visualisation of the data that Routino uses for routing. Only data relevant for routing is displayed and some will therefore be excluded.
Instructies Zoom in and then use the buttons below to download the data. The server will only return data if the selected area is small enough.
Status
Geen data getoond
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ - Help
Quick Start
Zoom to an area and select one of the buttons to display that type of data.
More data options can be found by expanding the details below each button.

Data Failure
If the area selected is too large (depends on the data type) then the status will say "Failed to get visualiser data" - zoom in and try again.

Router: Routino | Geo Data: | Tiles:
routino-3.2/web/www/routino/search.pl 644 233 144 5070 12767517266 13154 0# # Routino generic Search Perl script # # Part of the Routino routing software. # # This file Copyright 2012-2014, 2016 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use strict; # Use the directory paths script require "./paths.pl"; # Use the perl encoding/decoding functions use Encode qw(decode encode); # Use the perl URI module use URI::Escape; # Use the perl LWP module use LWP::UserAgent; # Use the perl JSON module use JSON::PP; # Use the perl Time::HiRes module use Time::HiRes qw(gettimeofday tv_interval); my $t0 = [gettimeofday]; # # Run the search # sub RunSearch { my($search,$lonmin,$lonmax,$latmax,$latmin)=@_; # Perform the search based on the type my $message=""; my @places=[]; if($main::search_type eq "nominatim") { ($message,@places)=DoNominatimSearch($search,$lonmin,$lonmax,$latmax,$latmin); } else { $message="Unknown search type '$main::search_type'"; } my(undef,undef,$cuser,$csystem) = times; my $time=sprintf "time: %.3f CPU / %.3f elapsed",$cuser+$csystem,tv_interval($t0); # Return the results return($time,$message,@places); } # # Fetch the search URL from Nominatim # sub DoNominatimSearch { my($search,$lonmin,$lonmax,$latmax,$latmin)=@_; $search = uri_escape($search); my $url; if($lonmin && $lonmax && $latmax && $latmin) { $url="$main::search_baseurl?format=json&viewbox=$lonmin,$latmax,$lonmax,$latmin&q=$search"; } else { $url="$main::search_baseurl?format=json&q=$search"; } my $ua=LWP::UserAgent->new; my $res=$ua->get($url); if(!$res->is_success) { return($res->status_line); } my $result=decode_json($res->content); my @places=(); foreach my $place (@$result) { my $lat=$place->{"lat"}; my $lon=$place->{"lon"}; my $name=encode('utf8',$place->{"display_name"}); push(@places,"$lat $lon $name"); } return("",@places); } 1; routino-3.2/web/www/routino/visualiser.leaflet.js 644 233 144 73370 12330730254 15515 0// // Routino data visualiser web page Javascript // // Part of the Routino routing software. // // This file Copyright 2008-2014 Andrew M. Bishop // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . // // // Data types // var data_types=[ "junctions", "super", "waytype", "highway", "transport", "barrier", "turns", "speed", "weight", "height", "width", "length", "property", "errorlogs" ]; //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Initialisation ///////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // Process the URL query string and extract the arguments var legal={"^lon" : "^[-0-9.]+$", "^lat" : "^[-0-9.]+$", "^zoom" : "^[0-9]+$"}; var args={}; if(location.search.length>1) { var query,queries; query=location.search.replace(/^\?/,""); query=query.replace(/;/g,"&"); queries=query.split("&"); for(var i=0;i" + data_text + ""; document.getElementById("attribution_tile").innerHTML="" + tile_text + ""; } change_attribution(0); // Add two vectors layers (one for highlights that display behind the vectors) layerVectors = L.layerGroup(); map.addLayer(layerVectors); layerHighlights = L.layerGroup(); map.addLayer(layerHighlights); // Handle popup createPopup(); // Add a boxes layer layerBoxes = L.rectangle(map.options.maxBounds,{stroke: false, color: "#f00", weight: 1, opacity: 1.0, fill: false}); map.addLayer(layerBoxes); box=false; // Move the map map.on("moveend", updateURLs); var lon =args["lon"]; var lat =args["lat"]; var zoom=args["zoom"]; if(lon !== undefined && lat !== undefined && zoom !== undefined) { if(lonmapprops.eastedge) lon=mapprops.eastedge; if(latmapprops.northedge) lat=mapprops.northedge; if(zoommapprops.zoomin) zoom=mapprops.zoomin; map.setView(L.latLng(lat,lon),zoom); } else map.fitBounds(map.options.maxBounds); // Unhide editing URL if variable set if(mapprops.editurl !== undefined && mapprops.editurl !== "") { var edit_url=document.getElementById("edit_url"); edit_url.style.display=""; edit_url.href=mapprops.editurl; } updateURLs(); } // // Format a number in printf("%.5f") format. // function format5f(number) { var newnumber=Math.floor(number*100000+0.5); var delta=0; if(newnumber>=0 && newnumber<100000) delta= 100000; if(newnumber<0 && newnumber>-100000) delta=-100000; var string=String(newnumber+delta); var intpart =string.substring(0,string.length-5); var fracpart=string.substring(string.length-5,string.length); if(delta>0) intpart="0"; if(delta<0) intpart="-0"; return(intpart + "." + fracpart); } // // Build a set of URL arguments for the map location // function buildMapArguments() { var lonlat = map.getCenter(); var zoom = map.getZoom(); return "lat=" + format5f(lonlat.lat) + ";lon=" + format5f(lonlat.lng) + ";zoom=" + zoom; } // // Update the URLs // function updateURLs() { var mapargs=buildMapArguments(); var links=document.getElementsByTagName("a"); for(var i=0; i" + id + ""); } } } drawPopup(string.split("\n").join("
")); } //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Server handling //////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // // Define an AJAX request object // function ajaxGET(url,success,failure,state) { var ajaxRequest=new XMLHttpRequest(); function ajaxGOT(options) { if(this.readyState==4) if(this.status==200) { if(typeof(options.success)=="function") options.success(this,options.state); } else { if(typeof(options.failure)=="function") options.failure(this,options.state); } } ajaxRequest.onreadystatechange = function(){ ajaxGOT.call(ajaxRequest,{success: success, failure: failure, state: state}); }; ajaxRequest.open("GET", url, true); ajaxRequest.send(null); } // // Display the status // function displayStatus(type,subtype,content) { var child=document.getElementById("result_status").firstChild; do { if(child.id !== undefined) child.style.display="none"; child=child.nextSibling; } while(child !== null); var chosen_status=document.getElementById("result_status_" + type); chosen_status.style.display=""; if(subtype !== undefined) { var format_status=document.getElementById("result_status_" + subtype).innerHTML; chosen_status.innerHTML=format_status.replace("#",String(content)); } } // // Display data statistics // function displayStatistics() { // Use AJAX to get the statistics ajaxGET("statistics.cgi", runStatisticsSuccess); } // // Success in running data statistics generation. // function runStatisticsSuccess(response) { document.getElementById("statistics_data").innerHTML="
" + response.responseText + "
"; document.getElementById("statistics_link").style.display="none"; } // // Get the requested data // function displayData(datatype) // called from visualiser.html { for(var data in data_types) hideshow_hide(data_types[data]); if(datatype !== "") hideshow_show(datatype); // Delete the old data unselectFeature(); layerVectors.clearLayers(); layerHighlights.clearLayers(); layerBoxes.setStyle({stroke:false}); box=false; // Print the status displayStatus("no_data"); // Return if just here to clear the data if(datatype === "") return; // Get the new data var mapbounds=map.getBounds(); var url="visualiser.cgi"; url=url + "?lonmin=" + format5f(mapbounds.getWest()); url=url + ";latmin=" + format5f(mapbounds.getSouth()); url=url + ";lonmax=" + format5f(mapbounds.getEast()); url=url + ";latmax=" + format5f(mapbounds.getNorth()); url=url + ";data=" + datatype; // Use AJAX to get the data switch(datatype) { case "junctions": ajaxGET(url, runJunctionsSuccess, runFailure); break; case "super": ajaxGET(url, runSuperSuccess, runFailure); break; case "waytype": var waytype; var waytypes=document.forms["waytypes"].elements["waytype"]; for(var h in waytypes) if(waytypes[h].checked) waytype=waytypes[h].value; url+="-" + waytype; ajaxGET(url, runWaytypeSuccess, runFailure); break; case "highway": var highway; var highways=document.forms["highways"].elements["highway"]; for(var h in highways) if(highways[h].checked) highway=highways[h].value; url+="-" + highway; ajaxGET(url, runHighwaySuccess, runFailure); break; case "transport": var transport; var transports=document.forms["transports"].elements["transport"]; for(var t in transports) if(transports[t].checked) transport=transports[t].value; url+="-" + transport; ajaxGET(url, runTransportSuccess, runFailure); break; case "barrier": var transport; var transports=document.forms["barriers"].elements["barrier"]; for(var t in transports) if(transports[t].checked) transport=transports[t].value; url+="-" + transport; ajaxGET(url, runBarrierSuccess, runFailure); break; case "turns": ajaxGET(url, runTurnsSuccess, runFailure); break; case "speed": case "weight": case "height": case "width": case "length": ajaxGET(url, runLimitSuccess, runFailure); break; case "property": var property; var properties=document.forms["properties"].elements["property"]; for(var p in properties) if(properties[p].checked) property=properties[p].value; url+="-" + property; ajaxGET(url, runPropertySuccess, runFailure); break; case "errorlogs": ajaxGET(url, runErrorlogSuccess, runFailure); break; } } // // Success in getting the junctions. // function runJunctionsSuccess(response) { var lines=response.responseText.split("\n"); var junction_colours={ 0: "#FFFFFF", 1: "#FF0000", 2: "#FFFF00", 3: "#00FF00", 4: "#8B4513", 5: "#00BFFF", 6: "#FF69B4", 7: "#000000", 8: "#000000", 9: "#000000" }; for(var line=0;line Routino : Planowanie trasy dla Danych OpenStreetMap
Opcje Wyniki Dane
Routino OpenStreetMap Planowanie Trasy This web page allows routing within the data collected by OpenStreetMap. Select start and end points (click on the marker icons below), select routing preferences then find a route.
+ - Punkty
Close loop:
Reverse order:
Znajdź
+ - Typ transportu
Pieszo:
Konno:
Wózek inwalidzki:
Rower:
Moped:
Motocykl:
Samochód:
Goods:
Pojazd ciężarowy:
Pojazd użyteczności publicznej:
+ - Preferowanie autostrad
+ - Ograniczenia prędkości
+ - Ustawienia zmiennych
+ - Inne ograniczenia
+ - Pomoc
Quick Start
Click on marker icons (above) to place them on the map (right). Then drag them to the correct position. Zooming the map before placing the markers is probably easiest. Alternatively type the latitude and longitude into the boxes above.

Select the transport type, allowed highway types, speed limits, highway properties and other restrictions from the options above. Select "Shortest" or "Quickest" to calculate the route and display it on the map.

Waypoints
Clicking on the marker icons will toggle the display of them on the map. When a route is calculated it will visit (as close as possible for the selected transport type) each of the waypoints that have markers on the map in the order given.

Transport Type
Selecting a transport type will restrict the chosen route to those on which it is allowed and set default values for the other parameters.

Highway Preferences
The highway preference is selected as a percentage and routes are chosen that try to follow the preferred highways. For example if a "Primary" road is given a "110%" preference and a "Secondary" road is given a "100%" preference then it means that a route on a Primary road can be up to 10% longer than on a secondary road and still be selected.

Speed Limits
The speed limits chosen here for the different types of highway apply if the highway has no other speed limit marked or it is higher than the chosen one.

Property Preferences
The property preference is selected as a percentage and routes are chosen that try to follow highways with the preferred property. For example if a "Paved" highway is given a "75%" preference then it means that an unpaved highway is automatically given a "25%" preference so that a route on a paved highway can be 3 times the length of an unpaved one and still be selected.

Other Restrictions
These allow a route to be found that avoids marked limits on weight, height, width or length. It is also possible to ignore one-way restrictions (e.g. if walking).

Router: Routino | Geo Data: | Kafelki:
routino-3.2/web/www/routino/.htaccess 644 233 144 3472 12640556437 13145 0## ## Options for Apache web server for language specific web pages and to run ## Routino CGI scripts. ## # For some of the configuration options in this file to be accepted the # 'AllowOverride' option in the main Apache configuration file must be set to a # particular value. A suitable value for the 'AllowOverride' option is # 'Options=MultiViews,ExecCGI FileInfo Limit' which will allow this file to be # used unmodified. Alternatively the specific option can be commented out from # this file and set in the main Apache configuration file. # The translated router pages use the MultiViews option to serve up a version of # the web page depending on the client language preference. Options +MultiViews # The English language option will be served if there is no other version # present and no errors will be returned to the user in case of problems. LanguagePriority en ForceLanguagePriority Prefer Fallback # The Routino CGI scripts are stored in this directory and use the filename # extension ".cgi". This filename extension needs to be registered with Apache # for the scripts to be executed. AddHandler cgi-script .cgi # The ExecCGI option must be set for the CGIs in this directory to be executed # by Apache. Options +ExecCGI # The CGI scripts that are used by Routino also call some other Perl scripts, to # stop these scripts from being seen by web users they can be denied by the # following entry. Order Deny,Allow Deny from all # The Polish language web page translations will have a '.html.pl' extension for # the MultiViews option so they must be allowed specifically and not blocked by # the above prohibition on serving Perl scripts. They must also be served with # the HTML mime type. AddType text/html .pl Allow from all routino-3.2/web/www/routino/visualiser.html.ru 644 233 144 55075 13061246464 15070 0 Routino : Data Visualiser for Routing Data
Visualiser Router Data
Routino Visualiser This web page allows visualisation of the data that Routino uses for routing. Only data relevant for routing is displayed and some will therefore be excluded.
+ - Язык
ИнÑтрукции Zoom in and then use the buttons below to download the data. The server will only return data if the selected area is small enough.
СтатуÑ
Ðет данных Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ - Помощь
Quick Start
Zoom to an area and select one of the buttons to display that type of data.
More data options can be found by expanding the details below each button.

Data Failure
If the area selected is too large (depends on the data type) then the status will say "Failed to get visualiser data" - zoom in and try again.

Router: Routino | Гео данные: | Тайлы:
routino-3.2/web/www/routino/documentation/ 40755 233 144 0 13061252066 14163 5routino-3.2/web/www/routino/search.cgi 755 233 144 4305 12767517345 13304 0#!/usr/bin/perl # # Routino search results retrieval CGI # # Part of the Routino routing software. # # This file Copyright 2012-2014, 2016 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use strict; # Use the generic search script require "./search.pl"; # Use the perl CGI module use CGI ':cgi'; # Create the query and get the parameters my $query=new CGI; my @rawparams=$query->param; # Legal CGI parameters with regexp validity check my %legalparams=( "marker" => "[0-9]+", "lonmin" => "[-0-9.]+", "lonmax" => "[-0-9.]+", "latmax" => "[-0-9.]+", "latmin" => "[-0-9.]+", "search" => ".+" ); # Validate the CGI parameters, ignore invalid ones my %cgiparams=(); foreach my $key (@rawparams) { foreach my $test (keys (%legalparams)) { if($key =~ m%^$test$%) { my $value=$query->param($key); if($value =~ m%^$legalparams{$test}$%) { $cgiparams{$key}=$value; last; } } } } # Parse the parameters my $marker=$cgiparams{marker}; my $search=$cgiparams{search}; my $lonmin=$cgiparams{lonmin}; my $lonmax=$cgiparams{lonmax}; my $latmax=$cgiparams{latmax}; my $latmin=$cgiparams{latmin}; # Run the search my($search_time,$search_message,@places)=RunSearch($search,$lonmin,$lonmax,$latmax,$latmin); # Return the output print header(-type=>'text/plain',-charset=>'utf-8'); print "$marker\n"; print "$search_time\n"; print "$search_message\n"; foreach my $place (@places) { print "$place\n"; } routino-3.2/web/www/routino/results.cgi 755 233 144 3456 12767517343 13544 0#!/usr/bin/perl # # Routino router results retrieval CGI # # Part of the Routino routing software. # # This file Copyright 2008-2014, 2016 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use strict; # Use the generic router script require "./router.pl"; # Use the perl CGI module use CGI ':cgi'; # Create the query and get the parameters my $query=new CGI; my @rawparams=$query->param; # Legal CGI parameters with regexp validity check my %legalparams=( "type" => "(shortest|quickest|router)", "format" => "(html|gpx-route|gpx-track|text|text-all|log)", "uuid" => "[0-9a-f]{32}" ); # Validate the CGI parameters, ignore invalid ones my %cgiparams=(); foreach my $key (@rawparams) { foreach my $test (keys (%legalparams)) { if($key =~ m%^$test$%) { my $value=$query->param($key); if($value =~ m%^$legalparams{$test}$%) { $cgiparams{$key}=$value; last; } } } } # Parse the parameters my $uuid =$cgiparams{"uuid"}; my $type =$cgiparams{"type"}; my $format=$cgiparams{"format"}; # Return the file ReturnOutput($uuid,$type,$format); routino-3.2/web/www/routino/visualiser.html 777 233 144 0 13061246465 20002 2visualiser.html.enroutino-3.2/xml/ 40755 233 144 0 13061252060 7004 5routino-3.2/xml/routino-translations.xsd 644 233 144 15101 12572577346 14023 0 routino-3.2/xml/routino-profiles.xml 644 233 144 52066 12634332507 13125 0 routino-3.2/xml/routino-tagging.xsd 644 233 144 10176 12156135452 12713 0 routino-3.2/xml/osc.xsd 644 233 144 13507 12051456324 10361 0 routino-3.2/xml/Makefile 644 233 144 3725 12531654133 10477 0# XML directory Makefile # # Part of the Routino routing software. # # This file Copyright 2010-2015 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # All configuration is in the top-level Makefile.conf include ../Makefile.conf # Files to install STANDARD_FILES=profiles.xml \ translations.xml \ tagging.xml SPECIAL_FILES=tagging-drive.xml \ tagging-ride.xml \ tagging-walk.xml ######## all: $(SPECIAL_FILES) #### tagging-drive.xml : routino-tagging.xml scripts/drive.pl perl scripts/drive.pl < routino-tagging.xml > tagging-drive.xml tagging-ride.xml : routino-tagging.xml scripts/ride.pl perl scripts/ride.pl < routino-tagging.xml > tagging-ride.xml tagging-walk.xml : routino-tagging.xml scripts/walk.pl perl scripts/walk.pl < routino-tagging.xml > tagging-walk.xml ######## test: ######## install: all @[ -d $(DESTDIR)$(datadir) ] || mkdir -p $(DESTDIR)$(datadir) @for file in $(STANDARD_FILES) ; do \ echo cp routino-$$file $(DESTDIR)$(datadir)/$$file ;\ cp -f routino-$$file $(DESTDIR)$(datadir)/$$file ;\ done @for file in $(SPECIAL_FILES); do \ echo cp $$file $(DESTDIR)$(datadir)/$$file ;\ cp -f $$file $(DESTDIR)$(datadir)/$$file ;\ done ######## clean: rm -f *~ rm -f $(SPECIAL_FILES) ######## distclean: clean ######## .PHONY:: all test install clean distclean routino-3.2/xml/routino-tagging-nomodify.xml 644 233 144 2736 11663245320 14520 0 routino-3.2/xml/routino-profiles.xsd 644 233 144 7431 11523232407 13071 0 routino-3.2/xml/scripts/ 40755 233 144 0 12324523025 10476 5routino-3.2/xml/scripts/ride.pl 755 233 144 3656 12306667762 12030 0#!/usr/bin/perl # # Special case tagging rule generator. # # Part of the Routino routing software. # # This file Copyright 2011-2014 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use strict; # Process the input while() { if(m%
%) { print " \n"; print "\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print "\n"; print " \n"; print " \n"; print "\n"; print " \n"; print " \n"; print "\n"; } if(m%%) { print " \n"; print "\n"; print " \n"; print " \n"; print " \n"; print "\n"; } print; } routino-3.2/xml/scripts/walk.pl 755 233 144 4214 12324523025 12011 0#!/usr/bin/perl # # Special case tagging rule generator. # # Part of the Routino routing software. # # This file Copyright 2011-2014 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use strict; # Process the input while() { if(m%
%) { print " \n"; print "\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print "\n"; print " \n"; print "\n"; print " \n"; print " \n"; print "\n"; print " \n"; print " \n"; print " \n"; print "\n"; } if(m%%) { print " \n"; print "\n"; print " \n"; print " \n"; print "\n"; print " \n"; print " \n"; print "\n"; } print; } routino-3.2/xml/scripts/drive.pl 755 233 144 3616 12324522764 12202 0#!/usr/bin/perl # # Special case tagging rule generator. # # Part of the Routino routing software. # # This file Copyright 2011-2014 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use strict; # Process the input while() { if(m%%) { print " \n"; print "\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print "\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print "\n"; } if(m%%) { print " \n"; print "\n"; print " \n"; print " \n"; print " \n"; print " \n"; print "\n"; } print; } routino-3.2/xml/routino-osm.xsd 644 233 144 13477 12051504736 12077 0 routino-3.2/xml/xsd.xsd 644 233 144 5261 11506610624 10350 0 routino-3.2/xml/routino-tagging.xml 644 233 144 101475 13000405564 12731 0 routino-3.2/xml/routino-osc.xsd 644 233 144 13542 12051456376 12064 0 routino-3.2/xml/osm.xsd 644 233 144 13460 12042033044 10357 0 routino-3.2/xml/routino-translations.xml 644 233 144 102327 13061246465 14041 0 <!-- %s = [shortest|quickest] --> <start text="Start at %s, head %s" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [heading] --> <node text="At %s, go %s heading %s" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [turn], 3rd %s = [heading] --> <rbnode text="Leave %s, take the %s exit heading %s" /> <!-- 1st %s = [roundabout], 2nd %s = [first|second|...], 3rd %s = [heading] --> <segment text="Follow %s for %.3f km, %.1f min" /> <!-- 1st %s = street name --> <stop text="Stop at %s" /> <!-- 1st %s = [waypoint|junction] --> <total text="Total %.1f km, %.0f minutes" /> <subtotal text="%.1f km, %.0f minutes" /> </output-html> <!-- GPX output --> <output-gpx> <waypoint type="waypt" string="WAYPT" /> <!-- For the route waypoints --> <waypoint type="trip" string="TRIP" /> <!-- For the other route points --> <desc text="%s route between 'start' and 'finish' waypoints" /> <!-- %s = [shortest|quickest] --> <name text="%s route" /> <!-- %s = [shortest|quickest] --> <step text="%s on '%s' for %.3f km, %.1f min" /> <!-- 1st %s = [turn], 2nd %s = street name --> <final text="Total Journey %.1f km, %.0f minutes" /> </output-gpx> </language> <language lang="de" language="Deutsch"> <!-- Copyright of the data being routed, not of this file --> <copyright> <creator string="Urheber" text="Routino - http://www.routino.org/" /> <source string="Quelle" text="Basierend auf OpenStreetMap-Daten, erhältlich via http://www.openstreetmap.org/" /> <license string="Lizenz" text="http://www.openstreetmap.org/copyright" /> </copyright> <!-- Turn directions, 0 = ahead, -2 = left, +/-4 = behind, +2 = right --> <turn direction="-4" string="Sehr scharf links" /> <turn direction="-3" string="Scharf links" /> <turn direction="-2" string="Links" /> <turn direction="-1" string="Halb links" /> <turn direction="0" string="Geradeaus" /> <turn direction="1" string="Halb rechts" /> <turn direction="2" string="Rechts" /> <turn direction="3" string="Scharf rechts" /> <turn direction="4" string="Sehr scharf rechts" /> <!-- Heading directions, 0 = North, -2 = West, +/-4 = South, +2 = East --> <heading direction="-4" string="Süd" /> <heading direction="-3" string="Süd-West" /> <heading direction="-2" string="West" /> <heading direction="-1" string="Nord-West" /> <heading direction="0" string="Nord" /> <heading direction="1" string="Nord-Ost" /> <heading direction="2" string="Ost" /> <heading direction="3" string="Süd-Ost" /> <heading direction="4" string="Süd" /> <!-- Ordinals, 1 = first, 2 = second ... --> <ordinal number="1" string="Erste" /> <ordinal number="2" string="Zweite" /> <ordinal number="3" string="Dritte" /> <ordinal number="4" string="Vierte" /> <ordinal number="5" string="Fünfte" /> <ordinal number="6" string="Sechste" /> <ordinal number="7" string="Siebte" /> <ordinal number="8" string="Achte" /> <ordinal number="9" string="Neunte" /> <ordinal number="10" string="Zehnte" /> <!-- Highway names --> <highway type="motorway" string="Autobahn" /> <highway type="trunk" string="Schnellstraße" /> <highway type="primary" string="Bundesstraße" /> <highway type="secondary" string="Landesstraße" /> <highway type="tertiary" string="Kreisstraße" /> <highway type="unclassified" string="Nebenstraße" /> <highway type="residential" string="Wohngebietsstraße" /> <highway type="service" string="Erschließungsweg" /> <highway type="track" string="Feld-/Waldweg" /> <highway type="cycleway" string="Radweg" /> <highway type="path" string="Weg/Pfad" /> <highway type="steps" string="Treppe" /> <highway type="ferry" string="Fähre" /> <!-- The type of route --> <route type="shortest" string="Kürzeste" /> <!-- For the description and route name --> <route type="quickest" string="Schnellste" /> <!-- For the description and route name --> <!-- HTML output --> <output-html> <waypoint type="waypoint" string="Wegpunkt" /> <!-- For the chosen waypoints --> <waypoint type="junction" string="Anschlussstelle" /> <!-- For the interesting junctions --> <waypoint type="roundabout" string="Kreisverkehr" /> <!-- For roundabouts --> <title text="%s Route" /> <!-- %s = [shortest|quickest] --> <start text="Start bei %s halten Sie sich Richtung %s" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [heading] --> <node text="Bei %s wenden Sie sich nach %s Richtung %s" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [turn], 3rd %s = [heading] --> <rbnode text="Verlassen Sie %s, nehmen Sie die %s Ausfahrt Richtung %s" /> <!-- 1st %s = [roundabout], 2nd %s = [first|second|...], 3rd %s = [heading] --> <segment text="Folgen Sie der %s für %.3f km bzw. %.1f min" /> <!-- 1st %s = street name --> <stop text="Stop Sie sind bei %s angekommen" /> <!-- 1st %s = [waypoint|junction] --> <total text="Gesamt %.1f km, %.0f minuten" /> <subtotal text="%.1f km, %.0f minuten" /> </output-html> <!-- GPX output --> <output-gpx> <waypoint type="waypt" string="Wegpunkt" /> <!-- For the route waypoints --> <waypoint type="trip" string="Reiseroute" /> <!-- For the other route points --> <desc text="%s Strecke zwischen 'Start' und 'Ziel'" /> <!-- %s = [shortest|quickest] --> <name text="%s Strecke" /> <!-- %s = [shortest|quickest] --> <step text="%s auf '%s' für %.3f km, %.1f min" /> <!-- 1st %s = [turn], 2nd %s = street name --> <final text="Gesamtstrecke %.1f km, %.0f minuten" /> </output-gpx> </language> <language lang="fr" language="Français"> <!-- Copyright of the data being routed, not of this file --> <copyright> <creator string="Créateur" text="Routino - http://www.routino.org/" /> <source string="Source" text="Basé sur les données OpenStreetMap de http://www.openstreetmap.org/" /> <license string="Licence" text="http://www.openstreetmap.org/copyright" /> </copyright> <!-- Turn directions, 0 = ahead, -2 = left, +/-4 = behind, +2 = right --> <turn direction="-4" string="demi-tour à gauche" /> <turn direction="-3" string="Très à gauche" /> <turn direction="-2" string="à gauche" /> <turn direction="-1" string="Légèrement à gauche" /> <turn direction="0" string="Tout droit" /> <turn direction="1" string="légèrement à droite" /> <turn direction="2" string="à droite" /> <turn direction="3" string="très à droite" /> <turn direction="4" string="demi-tour à droite" /> <!-- Heading directions, 0 = North, -2 = West, +/-4 = South, +2 = East --> <heading direction="-4" string="Sud" /> <heading direction="-3" string="Sud-Ouest" /> <heading direction="-2" string="Ouest" /> <heading direction="-1" string="Nord-Ouest" /> <heading direction="0" string="Nord" /> <heading direction="1" string="Nord-Est" /> <heading direction="2" string="Est" /> <heading direction="3" string="Sud-Est" /> <heading direction="4" string="Sud" /> <!-- Ordinals, 1 = first, 2 = second ... --> <ordinal number="1" string="Premier" /> <ordinal number="2" string="Second" /> <ordinal number="3" string="Troisième" /> <ordinal number="4" string="Quatrième" /> <ordinal number="5" string="Cinquième" /> <ordinal number="6" string="Sixième" /> <ordinal number="7" string="Septième" /> <ordinal number="8" string="Huitième" /> <ordinal number="9" string="Neuvième" /> <ordinal number="10" string="Dixième" /> <!-- Highway names --> <highway type="motorway" string="autoroute" /> <highway type="trunk" string="route de jonction" /> <highway type="primary" string="route nationale" /> <highway type="secondary" string="route départementale" /> <highway type="tertiary" string="route locale" /> <highway type="unclassified" string="route non classifiée" /> <highway type="residential" string="rue résidentielle" /> <highway type="service" string="rue de service" /> <highway type="track" string="piste" /> <highway type="cycleway" string="piste cyclable" /> <highway type="path" string="sentier" /> <highway type="steps" string="escalier" /> <highway type="ferry" string="ferry" /> <!-- The type of route --> <route type="shortest" string="le plus court" /> <!-- For the description and route name --> <route type="quickest" string="le plus rapide" /> <!-- For the description and route name --> <!-- HTML output --> <output-html> <waypoint type="waypoint" string="Étape" /> <!-- For the chosen waypoints --> <waypoint type="junction" string="Intersection" /> <!-- For the interesting junctions --> <waypoint type="roundabout" string="rond-point" /> <!-- For roundabouts --> <title text="Itinéraire %s" /> <!-- %s = [shortest|quickest] --> <start text="Débute à %s, direction %s" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [heading] --> <node text="à %s, aller %s direction %s" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [turn], 3rd %s = [heading] --> <rbnode text="Quitter %s, prendre la sortie %s direction %s" /> <!-- 1st %s = [roundabout], 2nd %s = [first|second|...], 3rd %s = [heading] --> <segment text="Suivre %s pendant %.3f km, %.1f min" /> <!-- 1st %s = street name --> <stop text="S'arrêter à %s" /> <!-- 1st %s = [waypoint|junction] --> <total text="Total %.1f km, %.0f minutes" /> <subtotal text="%.1f km, %.0f minutes" /> </output-html> <!-- GPX output --> <output-gpx> <waypoint type="waypt" string="ETAPE" /> <!-- For the route waypoints --> <waypoint type="trip" string="POINT" /> <!-- For the other route points --> <desc text="Itinéraire %s entre les étapes 'début' et 'fin'" /> <!-- %s = [shortest|quickest] --> <name text="Itinéraire %s" /> <!-- %s = [shortest|quickest] --> <step text="%s sur '%s' pendant %.3f km, %.1f min" /> <!-- 1st %s = [turn], 2nd %s = street name --> <final text="Trajet total %.1f km, %.0f minutes" /> </output-gpx> </language> <language lang="hu" language="Magyar"> <!-- Copyright of the data being routed, not of this file --> <copyright> <creator string="KészítÅ‘" text="Routino - http://www.routino.org/" /> <source string="Forrás" text="Openstreetmap adatok alapján http://www.openstreetmap.org/" /> <license string="Liszenc" text="http://www.openstreetmap.org/copyright" /> </copyright> <!-- Turn directions, 0 = ahead, -2 = left, +/-4 = behind, +2 = right --> <turn direction="-4" string="Nagyon élesen balra" /> <turn direction="-3" string="Élesen balra" /> <turn direction="-2" string="Balra" /> <turn direction="-1" string="Balra tarts" /> <turn direction="0" string="Egyenesen" /> <turn direction="1" string="Jobbra tarts" /> <turn direction="2" string="Jobbra" /> <turn direction="3" string="Élesen jobbra" /> <turn direction="4" string="Nagyon élesen jobbra" /> <!-- Heading directions, 0 = North, -2 = West, +/-4 = South, +2 = East --> <heading direction="-4" string="dél" /> <heading direction="-3" string="délnyugat" /> <heading direction="-2" string="nyugat" /> <heading direction="-1" string="északnyugat" /> <heading direction="0" string="észak" /> <heading direction="1" string="északkelet" /> <heading direction="2" string="kelet" /> <heading direction="3" string="délkelet" /> <heading direction="4" string="dél" /> <!-- Ordinals, 1 = first, 2 = second ... --> <ordinal number="1" string="elsÅ‘" /> <ordinal number="2" string="második" /> <ordinal number="3" string="harmadik" /> <ordinal number="4" string="negyedik" /> <ordinal number="5" string="ötödik" /> <ordinal number="6" string="hatodik" /> <ordinal number="7" string="hetedik" /> <ordinal number="8" string="nyolcadik" /> <ordinal number="9" string="kilencedik" /> <ordinal number="10" string="tizedik" /> <!-- Highway names --> <highway type="motorway" string="autópálya" /> <highway type="trunk" string="autóút" /> <highway type="primary" string="főút" /> <highway type="secondary" string="összekötőút" /> <highway type="tertiary" string="bekötőút" /> <highway type="unclassified" string="egyéb közút" /> <highway type="residential" string="lakóút" /> <highway type="service" string="szervízút" /> <highway type="track" string="földút" /> <highway type="cycleway" string="kerékpárút" /> <highway type="path" string="ösvény" /> <highway type="steps" string="lépcsÅ‘" /> <highway type="ferry" string="komp" /> <!-- The type of route --> <route type="shortest" string="Legrövidebb" /> <!-- For the description and route name --> <route type="quickest" string="Leggyorsabb" /> <!-- For the description and route name --> <!-- HTML output --> <output-html> <waypoint type="waypoint" string="Útpont" /> <!-- For the chosen waypoints --> <waypoint type="junction" string="KeresztezÅ‘dés" /> <!-- For the interesting junctions --> <waypoint type="roundabout" string="Körforgalom" /> <!-- For roundabouts --> <title text="%s útvonal" /> <!-- %s = [shortest|quickest] --> <start text="Indulás %s, %s felé" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [heading] --> <node text="Itt %s, menj %s %s felé" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [turn], 3rd %s = [heading] --> <rbnode text="Kijárat %s, %s kijárat %s felé" /> <!-- 1st %s = [roundabout], 2nd %s = [first|second|...], 3rd %s = [heading] --> <segment text="Erre %s, %.3f km, %.1f perc" /> <!-- 1st %s = street name --> <!-- TRANSLATION REQUIRED: stop text="Stop at %s" / --> <!-- 1st %s = [waypoint|junction] --> <total text="Összesen %.1f km, %.0f perc" /> <subtotal text="%.1f km, %.0f perc" /> </output-html> <!-- GPX output --> <output-gpx> <!-- TRANSLATION REQUIRED: waypoint type="waypt" string="WAYPT" / --> <!-- For the route waypoints --> <waypoint type="trip" string="Utazás" /> <!-- For the other route points --> <desc text="%s útvonal a kezdÅ‘ és utolsó pont között" /> <!-- %s = [shortest|quickest] --> <!-- TRANSLATION REQUIRED: name text="%s route" / --> <!-- %s = [shortest|quickest] --> <!-- TRANSLATION REQUIRED: step text="%s on '%s' for %.3f km, %.1f min" / --> <!-- 1st %s = [turn], 2nd %s = street name --> <final text="Az egész út %.1f km, %.0f perc" /> </output-gpx> </language> <language lang="nl" language="Nederlands"> <!-- Copyright of the data being routed, not of this file --> <copyright> <creator string="Creator" text="Routino - http://www.routino.org/" /> <source string="Source" text="Gebouwd op OpenStreetMap data van http://www.openstreetmap.org/" /> <license string="License" text="http://www.openstreetmap.org/copyright" /> </copyright> <!-- Turn directions, 0 = ahead, -2 = left, +/-4 = behind, +2 = right --> <turn direction="-4" string="Haarspeld naar links" /> <turn direction="-3" string="Scherp links" /> <turn direction="-2" string="Links" /> <turn direction="-1" string="Half links" /> <turn direction="0" string="Rechtdoor" /> <turn direction="1" string="Half rechts" /> <turn direction="2" string="Rechts" /> <turn direction="3" string="Scherp rechts" /> <turn direction="4" string="Haarspeld naar rechts" /> <!-- Heading directions, 0 = North, -2 = West, +/-4 = South, +2 = East --> <heading direction="-4" string="Zuid" /> <heading direction="-3" string="Zuid-West" /> <heading direction="-2" string="West" /> <heading direction="-1" string="Noord-West" /> <heading direction="0" string="Noord" /> <heading direction="1" string="Noord-Oost" /> <heading direction="2" string="Oost" /> <heading direction="3" string="Zuid-Oost" /> <heading direction="4" string="Zuid" /> <!-- Ordinals, 1 = first, 2 = second ... --> <ordinal number="1" string="Eerste" /> <ordinal number="2" string="Tweede" /> <ordinal number="3" string="Derde" /> <ordinal number="4" string="Vierde" /> <ordinal number="5" string="Vijfde" /> <ordinal number="6" string="Zesde" /> <ordinal number="7" string="Zevende" /> <ordinal number="8" string="Achtste" /> <ordinal number="9" string="Negende" /> <ordinal number="10" string="Tiende" /> <!-- Highway names --> <highway type="motorway" string="Autostrade" /> <highway type="trunk" string="Autoweg" /> <highway type="primary" string="Provinciale weg" /> <highway type="secondary" string="Nationale weg" /> <highway type="tertiary" string="Doorgangsweg" /> <highway type="unclassified" string="Niet geclassificeerd" /> <highway type="residential" string="Woongebied" /> <highway type="service" string="Toegangsweg" /> <highway type="track" string="Veldweg" /> <highway type="cycleway" string="Fietspad" /> <highway type="path" string="Pad" /> <highway type="steps" string="Trap" /> <highway type="ferry" string="Veerboot" /> <!-- The type of route --> <route type="shortest" string="Kortste" /> <!-- For the description and route name --> <route type="quickest" string="Snelste" /> <!-- For the description and route name --> <!-- HTML output --> <output-html> <waypoint type="waypoint" string="Punt" /> <!-- For the chosen waypoints --> <waypoint type="junction" string="de splitsing" /> <!-- For the interesting junctions --> <waypoint type="roundabout" string="rotonde" /> <!-- For roundabouts --> <title text="%s Route" /> <!-- %s = [shortest|quickest] --> <start text="Start bij %s neemt u de richting %s" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [heading] --> <node text="Bij %s gaat u %s richting %s" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [turn], 3rd %s = [heading] --> <rbnode text="Leave aan de %s, neem de %s afslag richting %s" /> <!-- 1st %s = [roundabout], 2nd %s = [first|second|...], 3rd %s = [heading] --> <segment text="Volg u de %s voor %.3f km %.1f min" /> <!-- 1st %s = street name --> <stop text="Stop U bent bij %s aangekomen" /> <!-- 1st %s = [waypoint|junction] --> <total text="Totaal %.1f km, %.0f minuten" /> <subtotal text="%.1f km, %.0f minuten" /> </output-html> <!-- GPX output --> <output-gpx> <!-- TRANSLATION REQUIRED: waypoint type="waypt" string="WAYPT" / --> <!-- For the route waypoints --> <!-- TRANSLATION REQUIRED: waypoint type="trip" string="TRIP" / --> <!-- For the other route points --> <desc text="%s Route tussen 'Start' und 'Finish'" /> <!-- %s = [shortest|quickest] --> <name text="%s Route" /> <!-- %s = [shortest|quickest] --> <step text="%s op '%s' voor %.3f km, %.1f min" /> <!-- 1st %s = [turn], 2nd %s = street name --> <final text="Totaal trip %.1f km, %.0f minuten" /> </output-gpx> </language> <language lang="pl" language="Polski"> <!-- Copyright of the data being routed, not of this file --> <copyright> <creator string="Twórca" text="Routino - http://www.routino.org/" /> <source string="ŹródÅ‚o" text="Oparte na danych OpenStreetMap ze strony http://www.openstreetmap.org/" /> <license string="Licencja" text="http://www.openstreetmap.org/copyright" /> </copyright> <!-- Turn directions, 0 = ahead, -2 = left, +/-4 = behind, +2 = right --> <turn direction="-4" string="Bardzo ostro w lewo" /> <turn direction="-3" string="Ostro w lewo" /> <turn direction="-2" string="W lewo" /> <turn direction="-1" string="Lekko w lewo" /> <turn direction="0" string="Prosto" /> <turn direction="1" string="Lekko w prawo" /> <turn direction="2" string="W prawo" /> <turn direction="3" string="Ostro w prawo" /> <turn direction="4" string="Bardzo ostro w prawo" /> <!-- Heading directions, 0 = North, -2 = West, +/-4 = South, +2 = East --> <heading direction="-4" string="Na poÅ‚udnie" /> <heading direction="-3" string="Na poÅ‚udniowy zachód" /> <heading direction="-2" string="Na zachód" /> <heading direction="-1" string="Na północny zachód" /> <heading direction="0" string="Na północ" /> <heading direction="1" string="Na północny wschód" /> <heading direction="2" string="Na wschód" /> <heading direction="3" string="Na poÅ‚udniowy wschód" /> <heading direction="4" string="Na poÅ‚udnie" /> <!-- Ordinals, 1 = first, 2 = second ... --> <ordinal number="1" string="Pierwszy" /> <ordinal number="2" string="Drugi" /> <ordinal number="3" string="Trzeci" /> <ordinal number="4" string="Czwarty" /> <ordinal number="5" string="PiÄ…ty" /> <ordinal number="6" string="Szósty" /> <ordinal number="7" string="Siódmy" /> <ordinal number="8" string="Ósmy" /> <ordinal number="9" string="DziewiÄ…ty" /> <ordinal number="10" string="DziesiÄ…ty" /> <!-- Highway names --> <highway type="motorway" string="Autostrada" /> <highway type="trunk" string="Droga ekspresowa" /> <highway type="primary" string="Droga krajowa" /> <highway type="secondary" string="Droga powiatowa" /> <highway type="tertiary" string="Droga lokalna" /> <highway type="unclassified" string="Droga nieznanego typu" /> <highway type="residential" string="Droga osiedlowa" /> <highway type="service" string="Droga dojazdowa" /> <highway type="track" string="Droga polna" /> <highway type="cycleway" string="Droga rowerowa" /> <highway type="path" string="Åšcieżka" /> <highway type="steps" string="Pieszo" /> <highway type="ferry" string="Prom" /> <!-- The type of route --> <route type="shortest" string="Najkrótsza" /> <!-- For the description and route name --> <route type="quickest" string="Najszybsza" /> <!-- For the description and route name --> <!-- HTML output --> <output-html> <waypoint type="waypoint" string="Punkt" /> <!-- For the chosen waypoints --> <waypoint type="junction" string="Połączenie" /> <!-- For the interesting junctions --> <waypoint type="roundabout" string="Rondo" /> <!-- For roundabouts --> <title text="%s Trasa" /> <!-- %s = [shortest|quickest] --> <start text="Start %s kieruj siÄ™ na %s" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [heading] --> <!-- TRANSLATION REQUIRED: node text="At %s, go %s heading %s" / --> <!-- 1st %s = [waypoint|junction], 2nd %s = [turn], 3rd %s = [heading] --> <!-- TRANSLATION REQUIRED: rbnode text="Leave %s, take the %s exit heading %s" / --> <!-- 1st %s = [roundabout], 2nd %s = [first|second|...], 3rd %s = [heading] --> <segment text="Podążaj %s przez %.3f km, %.1f min." /> <!-- 1st %s = street name --> <stop text="Stop Na %s" /> <!-- 1st %s = [waypoint|junction] --> <total text="CaÅ‚kowity %.1f km, %.0f min." /> <subtotal text="%.1f km, %.0f min." /> </output-html> <!-- GPX output --> <output-gpx> <waypoint type="waypt" string="Punkt" /> <!-- For the route waypoints --> <waypoint type="trip" string="Podróż" /> <!-- For the other route points --> <desc text="%s trasa pomiÄ™dzy 'start' a 'koniec'" /> <!-- %s = [shortest|quickest] --> <name text="%s trasa" /> <!-- %s = [shortest|quickest] --> <step text="%s na %s przez %.3f km, %.1f min." /> <!-- 1st %s = [turn], 2nd %s = street name --> <final text="CaÅ‚kowita podróż %.1f km, %.0f min." /> </output-gpx> </language> <language lang="ru" language="РуÑÑкий"> <!-- Copyright of the data being routed, not of this file --> <copyright> <creator string="Ðвтор" text="Routino - http://www.routino.org/" /> <source string="ИÑточник" text="ИÑпользованы данные OpenStreetMap http://www.openstreetmap.org/" /> <license string="ЛицензиÑ" text="http://www.openstreetmap.org/copyright" /> </copyright> <!-- Turn directions, 0 = ahead, -2 = left, +/-4 = behind, +2 = right --> <turn direction="-4" string="очень крутой поворот налево" /> <turn direction="-3" string="крутой поворот налево" /> <turn direction="-2" string="налево" /> <turn direction="-1" string="плавно налево" /> <turn direction="0" string="прÑмо" /> <turn direction="1" string="плавно направо" /> <turn direction="2" string="направо" /> <turn direction="3" string="крутой поворот направо" /> <turn direction="4" string="очень крутой поворот направо" /> <!-- Heading directions, 0 = North, -2 = West, +/-4 = South, +2 = East --> <heading direction="-4" string="юг" /> <heading direction="-3" string="юго-запад" /> <heading direction="-2" string="запад" /> <heading direction="-1" string="Ñеверо-запад" /> <heading direction="0" string="Ñевер" /> <heading direction="1" string="Ñеверо-воÑток" /> <heading direction="2" string="воÑток" /> <heading direction="3" string="юго-воÑток" /> <heading direction="4" string="юг" /> <!-- Ordinals, 1 = first, 2 = second ... --> <ordinal number="1" string="Первый" /> <ordinal number="2" string="Второй" /> <ordinal number="3" string="Третий" /> <ordinal number="4" string="Четвертый" /> <ordinal number="5" string="ПÑтый" /> <ordinal number="6" string="ШеÑтой" /> <ordinal number="7" string="Седьмой" /> <ordinal number="8" string="ВоÑьмой" /> <ordinal number="9" string="ДевÑтый" /> <ordinal number="10" string="ДеÑÑтый" /> <!-- Highway names --> <highway type="motorway" string="автомагиÑтраль" /> <highway type="trunk" string="Ð¼ÐµÐ¶Ð´ÑƒÐ½Ð°Ñ€Ð¾Ð´Ð½Ð°Ñ Ñ‚Ñ€Ð°ÑÑа" /> <highway type="primary" string="дорога регионального значениÑ" /> <highway type="secondary" string="дорога облаÑтного значениÑ" /> <highway type="tertiary" string="дорога районного значениÑ" /> <highway type="unclassified" string="дорога меÑтного значениÑ" /> <highway type="residential" string="улица" /> <highway type="service" string="проезд" /> <highway type="track" string="дорога Ñ/Ñ… назначениÑ" /> <highway type="cycleway" string="велодорожка" /> <highway type="path" string="тропинка" /> <highway type="steps" string="леÑтница" /> <highway type="ferry" string="паром" /> <!-- The type of route --> <route type="shortest" string="Кратчайший" /> <!-- For the description and route name --> <route type="quickest" string="БыÑтрый" /> <!-- For the description and route name --> <!-- HTML output --> <output-html> <waypoint type="waypoint" string="Точка" /> <!-- For the chosen waypoints --> <waypoint type="junction" string="перекреÑтке" /> <!-- For the interesting junctions --> <waypoint type="roundabout" string="круговое движение" /> <!-- For roundabouts --> <title text="%s маршрут" /> <!-- %s = [shortest|quickest] --> <start text="Старт %s, на %s" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [heading] --> <node text="на %s, %s, на %s" /> <!-- 1st %s = [waypoint|junction], 2nd %s = [turn], 3rd %s = [heading] --> <!-- TRANSLATION REQUIRED: rbnode text="Leave %s, take the %s exit heading %s" / --> <!-- 1st %s = [roundabout], 2nd %s = [first|second|...], 3rd %s = [heading] --> <segment text="Следуйте по %s %.3f км, %.1f мин" /> <!-- 1st %s = street name --> <stop text="Стоп %s" /> <!-- 1st %s = [waypoint|junction] --> <total text="Ð’Ñего %.1f км, %.0f минут" /> <subtotal text="%.1f км, %.0f минут" /> </output-html> <!-- GPX output --> <output-gpx> <waypoint type="waypt" string="ТОЧКÐ" /> <!-- For the route waypoints --> <!-- TRANSLATION REQUIRED: waypoint type="trip" string="TRIP" / --> <!-- For the other route points --> <desc text="%s маршрут от 'Старта' до 'Финиша'" /> <!-- %s = [shortest|quickest] --> <name text="%s маршрут" /> <!-- %s = [shortest|quickest] --> <step text="на %s по '%s' %.3f км, %.1f мин" /> <!-- 1st %s = [turn], 2nd %s = street name --> <final text="Ð’Ñего - %.1f км, продолжительноÑть - %.0f минут" /> </output-gpx> </language> </routino-translations> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/ChangeLog������������������������������������������������������������������������������� 644 � 233 � 144 � 1172635 13061250242 10071� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2017-01-12 Andrew M. Bishop <amb> Version 3.2 released. 2017-03-12 [r1903] Andrew M. Bishop <amb> * FILES, doc/NEWS.txt, doc/README.txt, doc/html/readme.html, src/version.h: Update to version 3.2. 2017-01-12 [r1902] Andrew M. Bishop <amb> * web/translations/translation.de.txt: Added another translated German phrase (via http://www.routino.org/translations/). 2017-01-05 [r1901] Andrew M. Bishop <amb> * web/translations/router.html: Change some HTML to improve web page format when zoomed in or out. 2017-01-04 [r1900] Andrew M. Bishop <amb> * web/www/routino/router.css: Remove some CSS to improve web page format when zoomed in or out. 2016-12-20 [r1899] Andrew M. Bishop <amb> * extras/statistics/dumper.c: Resize the array as crossings are added rather than starting with a "large enough" array. 2016-11-22 [r1898] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Handle more tags like access:foot=* by translating them to foot=*. 2016-09-20 [r1897] Andrew M. Bishop <amb> * web/translations/translation.pl.txt: More Polish translations (via http://www.routino.org/translations/). 2016-09-18 [r1896] Andrew M. Bishop <amb> * extras/find-fixme/web/www/fixme.cgi, web/www/routino/results.cgi, web/www/routino/router.cgi, web/www/routino/router.pl, web/www/routino/search.cgi, web/www/routino/search.pl, web/www/routino/statistics.cgi, web/www/routino/update-profiles.pl, web/www/routino/visualiser.cgi: When using 'require' in Perl scripts for a local file use './' prefix for filename because the current directory is no longer on the include path in new versions. 2016-09-11 [r1895] Andrew M. Bishop <amb> * web/translations/translation.pl.txt, xml/routino-translations.xml: More Polish translations (via http://www.routino.org/translations/). 2016-09-08 [r1894] Andrew M. Bishop <amb> * src/translations.c: Ensure that when a language doesn't have a full set of translations the built-in ones generate valid HTML. 2016-09-08 [r1893] Andrew M. Bishop <amb> * web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js: Ensure that when selecting a new language web-page that this language is used as the default for the generated route (previously it was selected on the web-page but not used). 2016-09-08 [r1892] Andrew M. Bishop <amb> * web/translations/translation.pl.txt, xml/routino-translations.xml: More Polish translations (via http://www.routino.org/translations/). 2016-08-20 [r1891] Andrew M. Bishop <amb> * src/filedumperx.c: Bug fix for error detected by gcc-6. 2016-08-12 [r1890] Andrew M. Bishop <amb> * web/www/routino/mapprops.js: Remove MapQuest as a default tile source since they are no longer available. 2016-07-12 [r1889] Andrew M. Bishop <amb> * src/planetsplitter.c, src/router+lib.c, src/router.c: Improve the error message when the default profiles, translations or tagging files cannot be found. 2016-07-08 [r1888] Andrew M. Bishop <amb> * doc/INSTALL.txt, doc/html/installation.html: Update instructions to reflect that the Apache root directory might not be '/var/www/'. 2016-07-05 [r1887] Andrew M. Bishop <amb> * web/translations/translation.de.txt: More German translations (via http://www.routino.org/translations/). 2016-07-04 [r1886] Andrew M. Bishop <amb> * web/translations/translation.fr.txt, xml/routino-translations.xml: More French translations (via http://www.routino.org/translations/). 2016-06-19 [r1885] Andrew M. Bishop <amb> * src/optimiser.c: Bug fix - if the start and finish of a route segment are the same point and the previous route segment finished with a fake segment then it would crash. 2016-06-06 [r1878-1879] Andrew M. Bishop <amb> * src/test/expected/turns-WP01.txt, src/test/expected/turns-WP02.txt, src/test/expected/turns-WP03.txt, src/test/expected/turns-WP04.txt, src/test/expected/turns-WP05.txt, src/test/expected/turns-WP06.txt, src/test/expected/turns-WP07.txt, src/test/expected/turns-WP08.txt, src/test/expected/turns-WP09.txt, src/test/expected/turns-WP10.txt, src/test/expected/turns-WP11.txt, src/test/expected/turns-WP12.txt, src/test/expected/turns-WP13.txt, src/test/expected/turns-WP14.txt, src/test/expected/turns-WP15.txt: Update test cases after ignoring highways forbidden by turn restrictions when determining which interesting junctions. * src/functions.h, src/output.c, src/router.c, src/routino.c: Ignore highways that are forbidden by turn restrictions when determining which ones are interesting for the HTML format output. 2016-04-07 [r1877] Andrew M. Bishop <amb> * web/translations/router.html, web/www/routino/router.css, web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js: Move the two route buttons to be just below the waypoints so they are less likely to scroll off the screen. Add another pair of route buttons on the results tab to make it quicker to re-calculate a route after moving the waypoints. 2016-03-30 [r1876] Andrew M. Bishop <amb> * web/translations/translation.ru.txt: More Russian translations (via http://www.routino.org/translations/). 2016-03-29 [r1875] Andrew M. Bishop <amb> * web/translations/translation.ru.txt: More Russian translations (via http://www.routino.org/translations/). 2016-03-26 [r1874] Andrew M. Bishop <amb> * web/translations/translation.ru.txt, xml/routino-translations.xml: More Russian translations (via http://www.routino.org/translations/). 2016-03-18 [r1873] Andrew M. Bishop <amb> * web/www/leaflet/install.sh: Update to use the newer version of Leaflet (0.7.7). 2016-03-15 [r1872] Andrew M. Bishop <amb> * src/version.h: Update the version number to note that it includes changes since the latest release. 2016-03-06 Andrew M. Bishop <amb> Version 3.1.1 released. 2016-03-06 [r1869] Andrew M. Bishop <amb> * FILES, doc/NEWS.txt, doc/README.txt, doc/html/readme.html, src/version.h: Update for version 3.1.1 release. 2016-03-05 Andrew M. Bishop <amb> Version 3.1 released. 2016-03-05 [r1866] Andrew M. Bishop <amb> * FILES, doc/NEWS.txt, doc/README.txt, doc/html/readme.html: Update for version 3.1 release. 2016-02-28 [r1865] Andrew M. Bishop <amb> * src/typesx.h: Change node_t to a 64-bit type by default due to the imminent OSM node number overflow with 32-bits. 2016-02-28 [r1865] Andrew M. Bishop <amb> * src/typesx.h: Change node_t to a 64-bit type by default due to the imminent OSM node number overflow with 32-bits. 2016-02-27 [r1864] Andrew M. Bishop <amb> * src/xmlparse.c: Fix an XML parsing bug found by AFL. 2016-02-25 [r1863] Andrew M. Bishop <amb> * Makefile.conf, src/segments.h, src/ways.h: Fix some changes found with gcc sanitizer options. 2016-02-24 [r1857] Andrew M. Bishop <amb> * src/optimiser.c: Change the FindMiddleRoute function so that it routes from both ends towards the middle. This will make it much quicker to detect some cases where a route is impossible but it does slightly slow down normal operation. 2016-02-14 [r1856] Andrew M. Bishop <amb> * extras/statistics (added), extras/statistics/Makefile (added), extras/statistics/README.txt (added), extras/statistics/create-basemap.pl (added), extras/statistics/create-image.pl (added), extras/statistics/dumper.c (added), extras/statistics/update.sh (added): Add scripts that will process the Routino database and generate maps with highway statistics. 2016-02-12 [r1855] Andrew M. Bishop <amb> * extras/find-fixme/Makefile: Use '$(DEPDIR)' rather than '.deps'. 2016-01-05 [r1854] Andrew M. Bishop <amb> * src/profiles.c: Remove a couple of lines of code with a literal type conversion error. Add special checks that neither max_pref or max_speed are zero. 2015-12-30 [r1852-1853] Andrew M. Bishop <amb> * doc/INSTALL.txt, doc/html/installation.html, extras/find-fixme/web/www/.htaccess (added), web/www/routino/.htaccess: Update the instructions about setting up Apache (tested on Apache 2.4.x). * web/translations/translation.de.txt, xml/routino-translations.xml: More German translations (via http://www.routino.org/translations/). 2015-12-24 [r1851] Andrew M. Bishop <amb> * src/optimiser.c: Remove a lookup in the FixForwardRoute function. 2015-12-21 [r1850] Andrew M. Bishop <amb> * xml/routino-profiles.xml: Reduce the preference for service roads when driving. 2015-12-21 [r1849] Andrew M. Bishop <amb> * src/optimiser.c: Add an experimental (commented out) version of the FindMiddleRoute function that finds the route in reverse (starting at the end working back to the beginning). Verified to give equivalent, if not identical, results to the existing function. 2015-12-21 [r1848] Andrew M. Bishop <amb> * src/optimiser.c: Simplify the way that the beginning of the route is inserted into the results. 2015-12-18 [r1847] Andrew M. Bishop <amb> * src/optimiser.c, src/results.h: Change the way that the beginning of the route is used to seed the search for the super-route and then to create the combined route. 2015-12-18 [r1846] Andrew M. Bishop <amb> * src/optimiser.c, src/test/expected/super-or-not-WP01.txt, src/test/expected/super-or-not-WP02.txt, src/test/expected/super-or-not-WP03.txt, src/test/expected/super-or-not-WP04.txt (added), src/test/expected/super-or-not-WP05.txt (added), src/test/super-or-not.osm: Fix a bug where the optimum end of the route was not being used because the search was stopping at the first super-node that was part of another possible end of the route. Add to an existing test case. 2015-12-15 [r1845] Andrew M. Bishop <amb> * src/optimiser.c: Improve the debug output (add debugging information to the FindSuperSegment function). 2015-12-14 [r1844] Andrew M. Bishop <amb> * src/optimiser.c: Improve the debug output (use a common function for all of them and add more information). 2015-12-08 [r1843] Andrew M. Bishop <amb> * src/optimiser.c: Rewrite FindFinishRoutes so that it does not find node-segment pairs pointing in reverse and then reverse them but find normal node-segment pairs working backwards. 2015-12-07 [r1842] Andrew M. Bishop <amb> * src/optimiser.c: Fix bug in last change (FindFinishRoutes is not the same as the other functions). 2015-12-05 [r1835] Andrew M. Bishop <amb> * src/optimiser.c: Rename some variables, move some lines of code around and extract some code into a separate function. Tidying up, no functional change. 2015-12-01 [r1834] Andrew M. Bishop <amb> * web/translations/translation.de.txt: More German translations (via http://www.routino.org/translations/). 2015-11-24 [r1833] Andrew M. Bishop <amb> * extras/find-fixme/web/www/fixme.html: Fix error in non-Javascript version of statistics URL. 2015-10-24 [r1832] Andrew M. Bishop <amb> * src/router.c: Fix routing bug where missing waypoint data still gets routed. 2015-10-24 [r1831] Andrew M. Bishop <amb> * web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js: Store the home location cookie with 5 decimal places. Fix the home marker icon jumping about (Leaflet version). 2015-10-24 [r1830] Andrew M. Bishop <amb> * web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js: Print an error message if the geolocation function fails or is unavailable. 2015-10-17 [r1828] Andrew M. Bishop <amb> * src/routino.c, src/test/loop-and-reverse.sh: Fix test case for loop and reverse and fix libroutino error that wasn't detected by broken test case. 2015-10-12 [r1826-1827] Andrew M. Bishop <amb> * src/test, src/test/expected/loop-and-reverse-WP-L.txt (added), src/test/expected/loop-and-reverse-WP-LR.txt (added), src/test/expected/loop-and-reverse-WP-R.txt (added), src/test/expected/loop-and-reverse-WP.txt (added), src/test/loop-and-reverse.osm (added), src/test/loop-and-reverse.sh (added): Add a test case for the loop and reverse route options. * doc/LIBRARY.txt, doc/html/library.html, src/router+lib.c, src/routino.c, src/routino.h: Add the loop and reverse route options to the library. Increased the API version number. 2015-10-07 [r1824-1825] Andrew M. Bishop <amb> * src/router+lib.c: Fix a bug with the change to handle reverse and loop together. * src/router.c: Simplify the ugly code for handling reverse and loop better - more code, simpler to understand. Calculate all the waypoints first and then use the points. 2015-09-30 [r1823] Andrew M. Bishop <amb> * src/router+lib.c, src/router.c: When using --reverse and --loop together start at the first waypoint specified rather than the last one specified. 2015-09-30 [r1822] Andrew M. Bishop <amb> * web/Makefile: Force the make not to be run in parallel in the web directory. 2015-09-30 [r1821] Andrew M. Bishop <amb> * web/translations/translation.fr.txt, xml/routino-translations.xml: Add new and updated French translations (via http://www.routino.org/translations/). 2015-09-29 [r1820] Andrew M. Bishop <amb> * extras/find-fixme/Makefile, extras/tagmodifier/Makefile, src/xml/Makefile: Re-implement the change to allow using 'make -j 4'. 2015-09-29 [r1819] Andrew M. Bishop <amb> * src/Makefile, web/Makefile: Re-implement the change to allow using 'make -j 4'. 2015-09-28 [r1818] Andrew M. Bishop <amb> * doc/LIBRARY.txt, doc/html/library.html, src/router+lib.c, src/routino.c, src/routino.h: Include the version number of Routino that was used to compile the library into the library as a string variable. 2015-09-28 [r1817] Andrew M. Bishop <amb> * src/router+lib.c, src/router.c: Make router.c and router+lib.c more similar without changing the functionality. 2015-09-26 [r1815-1816] Andrew M. Bishop <amb> * src/test/expected/coincident-waypoint-WP01.txt, src/test/expected/coincident-waypoint-WP02.txt, src/test/expected/coincident-waypoint-WP03.txt, src/test/expected/coincident-waypoint-WP04.txt, src/test/expected/cycle-both-ways-WP01.txt, src/test/expected/cycle-both-ways-WP02.txt, src/test/expected/dead-ends-WP01.txt, src/test/expected/dead-ends-WP02.txt, src/test/expected/dead-ends-WP03.txt, src/test/expected/dead-ends-WP04.txt, src/test/expected/dead-ends-WP05.txt, src/test/expected/dead-ends-WP06.txt, src/test/expected/dead-ends-WP07.txt, src/test/expected/dead-ends-WP08.txt, src/test/expected/dead-ends-WP09.txt, src/test/expected/dead-ends-WP10.txt, src/test/expected/dead-ends-WP11.txt, src/test/expected/fake-node-with-loop-WP01.txt, src/test/expected/fake-node-with-loop-WP02.txt, src/test/expected/loops-WP01.txt, src/test/expected/loops-WP02.txt, src/test/expected/loops-WP03.txt, src/test/expected/loops-WP04.txt, src/test/expected/loops-WP05.txt, src/test/expected/loops-WP06.txt, src/test/expected/loops-WP07.txt, src/test/expected/loops-WP08.txt, src/test/expected/loops-WP09.txt, src/test/expected/loops-WP10.txt, src/test/expected/loops-WP11.txt, src/test/expected/no-super-WP01.txt, src/test/expected/no-super-WP02.txt, src/test/expected/no-super-WP03.txt, src/test/expected/no-super-WP04.txt, src/test/expected/node-restrictions-WP01.txt, src/test/expected/node-restrictions-WP02.txt, src/test/expected/node-restrictions-WP03.txt, src/test/expected/node-restrictions-WP04.txt, src/test/expected/node-restrictions-WP05.txt, src/test/expected/node-restrictions-WP06.txt, src/test/expected/node-restrictions-WP07.txt, src/test/expected/node-restrictions-WP08.txt, src/test/expected/oneway-loop-WP01.txt, src/test/expected/roundabout-waypoints-WP01.txt, src/test/expected/roundabout-waypoints-WP02.txt, src/test/expected/roundabout-waypoints-WP03.txt, src/test/expected/roundabout-waypoints-WP04.txt, src/test/expected/roundabout-waypoints-WP05.txt, src/test/expected/roundabout-waypoints-WP06.txt, src/test/expected/roundabout-waypoints-WP07.txt, src/test/expected/super-or-not-WP01.txt, src/test/expected/super-or-not-WP02.txt, src/test/expected/super-or-not-WP03.txt, src/test/expected/turns-WP01.txt, src/test/expected/turns-WP02.txt, src/test/expected/turns-WP03.txt, src/test/expected/turns-WP04.txt, src/test/expected/turns-WP05.txt, src/test/expected/turns-WP06.txt, src/test/expected/turns-WP07.txt, src/test/expected/turns-WP08.txt, src/test/expected/turns-WP09.txt, src/test/expected/turns-WP10.txt, src/test/expected/turns-WP11.txt, src/test/expected/turns-WP12.txt, src/test/expected/turns-WP13.txt, src/test/expected/turns-WP14.txt, src/test/expected/turns-WP15.txt, src/test/expected/turns-WP16.txt: Change test cases for the changed output formats. * src/output.c, src/translations.c, src/translations.h, web/translations/translation.de.txt, web/translations/translation.en.txt, web/translations/translation.fr.txt, web/translations/translation.hu.txt, web/translations/translation.nl.txt, web/translations/translation.pl.txt, web/translations/translation.ru.txt, web/translations/translations-body.xml, xml/routino-translations.xml: Change file output formats so that waypoint numbers are included. Change the names of the GPX route waypoints in the XML file. 2015-09-26 [r1814] Andrew M. Bishop <amb> * src/Makefile, src/test/Makefile: Fix makefiles so that 'make test' works from a clean directory. 2015-09-26 [r1813] Andrew M. Bishop <amb> * src/router+lib.c, src/router.c, web/translations/router.html, web/www/routino/icons/waypoint-loop.png (added), web/www/routino/icons/waypoint-reverse.png (added), web/www/routino/router.css, web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js, web/www/routino/router.pl: Add a loop and reverse checkbox on the web page and replace the loop and reverse buttons with icons. Update router programs and scripts. 2015-09-26 [r1812] Andrew M. Bishop <amb> * web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js: Fix bug with specifying 'oneway' or 'turns' in the URL arguments. 2015-09-24 [r1810] Andrew M. Bishop <amb> * src/router+lib.c: Fix a bug with freeing the waypoints if routing a loop. 2015-09-15 [r1804] Andrew M. Bishop <amb> * extras/find-fixme/Makefile, extras/tagmodifier/Makefile, src/Makefile, src/xml/Makefile, web/Makefile: Fix Makefiles so that 'make -j 4' works. 2015-09-15 [r1803] Andrew M. Bishop <amb> * Makefile.conf, src/Makefile: Add a "SONAME" shared library version number. 2015-09-15 [r1801-1802] Andrew M. Bishop <amb> * src/version.h: Change the version number so that anybody using the SVN version knows that it is not the released version and let them take care about the exact version. * src/Makefile: Don't create the *.so files on Windows. 2015-09-14 [r1799-1800] Andrew M. Bishop <amb> * web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js: Make the whole row of the route clickable, not just the number on the left. * doc/html/library.html: Give each HTML header a unique id. 2015-09-12 Andrew M. Bishop <amb> Version 3.0 released. 2015-09-12 [r1798] Andrew M. Bishop <amb> * FILES, doc/NEWS.txt, doc/README.txt, doc/html/readme.html: Update files for release. 2015-09-09 [r1797] Andrew M. Bishop <amb> * doc/USAGE.txt, doc/html/usage.html, extras/find-fixme/README.txt, extras/find-fixme/fixme-dumper.c, extras/find-fixme/fixme-finder.c, extras/tagmodifier/README.txt, extras/tagmodifier/tagmodifier.c, src/filedumper.c, src/filedumperx.c, src/planetsplitter.c, src/router+lib.c, src/router.c, src/version.h (added): Add a '--version' option to all executables to print the current version (defined in version.h). 2015-09-07 [r1796] Andrew M. Bishop <amb> * src/output.c, src/translations.c, web/translations/translation.de.txt, web/translations/translation.en.txt, web/translations/translation.fr.txt, web/translations/translation.hu.txt, web/translations/translation.nl.txt, web/translations/translation.pl.txt, web/translations/translation.ru.txt, web/translations/translations-body.xml, web/translations/translations-head.xml, web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js, xml/routino-translations.xml, xml/routino-translations.xsd: Merge some of the translation phrases together to simplify them. Change the HTML output and web pages to work with this. 2015-09-03 [r1795] Andrew M. Bishop <amb> * doc/LIBRARY.txt, doc/html/library.html, src/output.c, src/router+lib.c, src/routino.c, src/routino.h: Add in an HTML-all linked list formats that includes the full set of points and the HTML directions for the important ones. 2015-09-03 [r1794] Andrew M. Bishop <amb> * src/router.c: Bug fix in usage information. 2015-08-17 [r1793] Andrew M. Bishop <amb> * web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js: Fix a bug with dragging a marker from the left panel onto the map when the left panel has scrolled the page. 2015-08-17 [r1792] Andrew M. Bishop <amb> * doc/LIBRARY.txt, doc/html/library.html, src/router+lib.c, src/routino.c, src/routino.h, src/translations.c, src/translations.h: Add a new API function to return the full names of the languages available in the translations XML file. Increase API version to 6. 2015-08-17 [r1791] Andrew M. Bishop <amb> * src/test/copyright.xml, src/translations.c, src/translations.h, web/translations/translate.pl, web/translations/translations-body.xml, xml/routino-translations.xml, xml/routino-translations.xsd: Add the long version of the language name to the XML translations file. 2015-08-17 [r1790] Andrew M. Bishop <amb> * web/translations/translation.de.txt: Replace one German word (via http://www.routino.org/translations/). 2015-08-16 [r1789] Andrew M. Bishop <amb> * web/translations/translate.pl, web/translations/translation.pl.txt, xml/routino-translations.xml: Delete some Polish documentation strings that were incorrectly formed (not enough '%s'). 2015-08-15 [r1788] Andrew M. Bishop <amb> * doc/html/index.html, doc/html/installation-ms-windows.html, doc/html/installation.html: Some small documentation tidying up. 2015-08-15 [r1787] Andrew M. Bishop <amb> * extras/find-fixme/Makefile, extras/tagmodifier/Makefile, src/Makefile, src/xml/Makefile: Use $^ instead of $< in Makefiles where it is simpler and where there are multiple dependencies that all need to be used together. 2015-08-15 [r1786] Andrew M. Bishop <amb> * src/test/Makefile: Compile the executables all in one go rather than running make for each one. 2015-08-15 [r1785] Andrew M. Bishop <amb> * Makefile, src/Makefile: Don't automatically choose the order in which to enter the sub-directories but hard-code it to make it more sensible. 2015-08-15 [r1784] Andrew M. Bishop <amb> * Makefile.conf, doc/INSTALL-MS-WIN.txt, doc/LIBRARY.txt (added), doc/html/index.html, doc/html/installation-ms-windows.html, doc/html/library.html (added), extras/find-fixme/Makefile, extras/find-fixme/fixme-dumper.c, extras/find-fixme/fixme-finder.c, extras/find-fixme/osmparser.c, extras/tagmodifier/Makefile, extras/tagmodifier/tagmodifier.c, src, src/Makefile, src/errorlogx.c, src/fakes.c, src/fakes.h, src/filedumper.c, src/filedumperx.c, src/files.c, src/files.h, src/functions.h, src/logerror.c, src/nodes.c, src/nodesx.c, src/optimiser.c, src/osmo5mparse.c, src/osmparser.c, src/osmpbfparse.c, src/osmxmlparse.c, src/output.c, src/planetsplitter.c, src/profiles.c, src/profiles.h, src/relations.c, src/relationsx.c, src/relationsx.h, src/results.c, src/router+lib.c (added), src/router.c, src/routino.c (added), src/routino.h (added), src/segments.c, src/segmentsx.c, src/superx.c, src/tagging.c, src/test, src/test/Makefile, src/test/a-b-c-d.sh, src/test/a-b-c.sh, src/test/a-b.sh, src/test/cycle-drive.sh, src/test/only-split.sh, src/test/run-tests.sh (added), src/test/start-1-finish.sh, src/translations.c, src/translations.h, src/types.c, src/visualiser.c, src/ways.c, src/waysx.c, src/xml/Makefile, src/xml/xsd-to-xmlparser.c, src/xmlparse.c, src/xmlparse.h, web/Makefile, web/www/routino/documentation: Merge libroutino branch back into the trunk. 2015-08-15 [r1783] Andrew M. Bishop <amb> (from 'branches/libroutino') * Makefile.conf, extras/find-fixme/Makefile, extras/tagmodifier/Makefile, src/Makefile, src/test/Makefile, src/xml/Makefile, web/Makefile: Add '.exe' to the EXE targets to stop MinGW recompiling the executables each time. 2015-08-14 [r1782] Andrew M. Bishop <amb> (from 'branches/libroutino') * Makefile.conf, doc/INSTALL-MS-WIN.txt, doc/html/installation-ms-windows.html, extras/find-fixme/Makefile, extras/tagmodifier/Makefile, src/Makefile, web/Makefile: Fully automatic host detection (for Cygwin, MinGW and generic UNIX). 2015-08-14 [r1781] Andrew M. Bishop <amb> (from 'branches/libroutino') * Makefile.conf, src/Makefile: Using 'make install' now installs the libraries. On Windows installation uses 'Program Files/Routino' as the base directory. 2015-08-14 [r1780] Andrew M. Bishop <amb> * web/translations/translation.de.txt, web/translations/translation.nl.txt, web/translations/translation.ru.txt, xml/routino-translations.xml: Remove duplicated words and whitespace in translations. 2015-08-11 [r1779] Andrew M. Bishop <amb> (from 'branches/libroutino') * Makefile.conf: Don't include '-fPIC' for MinGW compilation (stops some warnings). 2015-08-11 [r1776-1778] Andrew M. Bishop <amb> (from 'branches/libroutino') * doc/INSTALL-MS-WIN.txt, doc/html/installation-ms-windows.html: Updated documentation for compiling with MinGW64 and compiling library files. * src/Makefile: An attempt at creating routino.def and routino.lib using dlltool instead of gendef. * src/files.c, src/files.h: Undefine some #defines that MinGW64 uses to remove lots of compiler warnings. 2015-08-10 [r1773-1775] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/Makefile: Create routino.dll and routino.def when compiling with MinGW (based on suggestion from Oliver Eichler). * src/router+lib.c: Use 'use_stdout' instead of 'stdout' as a variable name (patch from Oliver Eichler). * src/routino.h: Use DLL_PUBLIC for the extern definitions of the global variables (patch from Oliver Eichler). 2015-08-08 [r1772] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/translations.c: Put the missing space back in the HTML string. 2015-08-08 [r1771] Andrew M. Bishop <amb> (from 'branches/libroutino') * doc/LIBRARY.txt, doc/html/library.html, src/output.c, src/router+lib.c, src/routino.c, src/routino.h, src/translations.c, src/translations.h: Simplify the HTML generation by making more complex format strings when parsing the translations. Add another field to the API HTML format output (cumulative distance). Increase API version to 5. 2015-08-08 [r1770] Andrew M. Bishop <amb> (from 'branches/libroutino') * doc/LIBRARY.txt, doc/html/library.html: Add some missing API changes. 2015-08-08 [r1769] Andrew M. Bishop <amb> * doc/OUTPUT.txt: Fix some text formatting problems. 2015-08-08 [r1768] Andrew M. Bishop <amb> (from 'branches/libroutino') * doc/LIBRARY.txt, doc/html/library.html, src/output.c, src/router+lib.c, src/routino.c, src/routino.h, src/translations.c, src/translations.h: Add a new output list format that contains a text version of the normal HTML output. Increase API version to 4. 2015-08-04 [r1767] Andrew M. Bishop <amb> (from 'branches/libroutino') * doc/LIBRARY.txt, doc/html/library.html, src/optimiser.c, src/router+lib.c, src/routino.c, src/routino.h: Add a progress callback that reports routing progress and can abort the routing algorithm if required. Increase API version to 3. 2015-08-04 [r1766] Andrew M. Bishop <amb> (from 'branches/libroutino') * doc/LIBRARY.txt, doc/html/library.html, src/output.c, src/routino.c, src/routino.h: Add speed for each route segment (text-all version) and rename the 'string' parameter to 'name'. Increase API version to 2. 2015-08-03 [r1765] Andrew M. Bishop <amb> (from 'branches/libroutino') * doc/LIBRARY.txt, doc/html/library.html, src/router+lib.c, src/routino.c, src/routino.h: Add a library API version number #define and variable and a function to compare the two. 2015-08-03 [r1764] Andrew M. Bishop <amb> (from 'branches/libroutino') * web/www/routino/documentation: Ignore the library documentation when copied to the web directory. 2015-08-03 [r1763] Andrew M. Bishop <amb> * web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js: Format the web links to only use 5 decimal places. 2015-08-02 [r1761-1762] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/output.c: Another fix for a mistake in output generation. * src/output.c: Patch from Oliver Eichler for some mistakes in output generation. 2015-07-31 [r1760] Andrew M. Bishop <amb> (from 'branches/libroutino') * doc/LIBRARY.txt (added), doc/html/index.html, doc/html/library.html (added), src/routino.c, src/routino.h: Documentation for the libroutino library. 2015-07-31 [r1759] Andrew M. Bishop <amb> * web/translations/translation.pl.txt: More Polish translations (via http://www.routino.org/translations/). 2015-07-30 [r1758] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/functions.h, src/output.c, src/router+lib.c, src/router.c, src/routino.c, src/routino.h: Add the ability to request a linked list output representing the route when using the routino library. 2015-07-21 [r1757] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/routino.c, src/routino.h: Add a user profile type and functions to convert it to and from the Routino profile. 2015-07-20 [r1756] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/router+lib.c, src/router.c, src/routino.c, src/routino.h: Add options to the routing function to allow selection of the type of output files generated. 2015-07-20 [r1755] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/profiles.c, src/profiles.h, src/router+lib.c, src/routino.c, src/routino.h, src/translations.c, src/translations.h: Add functions to the library to return the list of loaded translation languages and profile names. 2015-07-20 [r1754] Andrew M. Bishop <amb> (from 'branches/libroutino') * Makefile.conf, src/Makefile: Compile the version of the router using libroutino to search for the shared library in the same directory. 2015-07-20 [r1753] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/routino.c, src/routino.h: Check for validated profiles before using them. 2015-07-18 [r1752] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/test/Makefile, src/test/run-tests.sh (added): Put the test script execution into a script. 2015-07-18 [r1751] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/test, src/test/Makefile, src/test/a-b-c-d.sh, src/test/a-b-c.sh, src/test/a-b.sh, src/test/cycle-drive.sh, src/test/only-split.sh, src/test/start-1-finish.sh: Add tests of the router built with libroutino. 2015-07-16 [r1750] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/router+lib.c: Fix bug in last check-in. 2015-07-16 [r1749] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/router+lib.c, src/router.c, src/routino.c, src/translations.c: Allow choosing a named translation, the first in the file or the built-in English one. Make the routers use the first in the file if no language is specified rather than the built-in one. 2015-07-16 [r1748] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/profiles.c, src/profiles.h, src/router+lib.c, src/router.c, src/routino.c, src/routino.h: Validate profile parameters better when reading XML or router command line. Change the Profile data structure so that UpdateProfile() does not change the parts that are loaded from file so that it can be used multiple times on the same profile. Change the highway and props data to be between 0 and 1 rather than a percentage. Add a new function to the library to validate a profile and also update it. 2015-07-15 [r1746-1747] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/profiles.c, src/routino.c, src/routino.h, src/translations.c: Add a Routino_errno variable that indicates the error status of the most recent library function called. * src/Makefile: Fix bug with Makefile dependencies for libroutino.so and libroutino-slim.so. 2015-07-14 [r1745] Andrew M. Bishop <amb> * src/files.c, src/files.h: Merge changes from MS-Windows branch (changes for stati64/fstati64/lseeki64). 2015-07-14 [r1743] Andrew M. Bishop <amb> (from 'branches/MS-Windows') * src/files.c, src/files.h: Fix changes for stati64/fstati64/lseeki64. 2015-07-11 [r1741] Andrew M. Bishop <amb> * src/cache.h, src/errorlog.h, src/errorlogx.c, src/files.c, src/files.h, src/logerror.c, src/nodes.c, src/nodes.h, src/nodesx.c, src/relations.h, src/relationsx.c, src/relationsx.h, src/ways.h, src/waysx.c, src/waysx.h: Merge change from MS-Windows branch (offset_t). 2015-07-11 [r1740] Andrew M. Bishop <amb> (from 'branches/MS-Windows') * src/cache.h, src/errorlog.h, src/errorlogx.c, src/files.c, src/files.h, src/logerror.c, src/nodes.c, src/nodes.h, src/nodesx.c, src/relations.h, src/relationsx.c, src/relationsx.h, src/ways.h, src/waysx.c, src/waysx.h: Define a custom type for the offset within a file (because MS Windows can create a 4GB file but only seek +/-2GB within it). 2015-07-10 [r1739] Andrew M. Bishop <amb> * src/nodes.h, src/nodesx.h, src/relations.h, src/segments.h, src/segmentsx.h, src/ways.h, src/waysx.h: Clarify the comments surrounding the definition of the slim mode cache data structures. 2015-07-09 [r1738] Andrew M. Bishop <amb> (from 'branches/libroutino') * src, src/Makefile, src/router+lib.c (added), src/routino.c, src/routino.h: Update the library and include a version of the router program that uses the libroutino shared library for calculating routes. Currently generates output files of all types and accepts but ignores all options to change this. 2015-07-08 [r1737] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/translations.c: Bug fix when freeing the loaded translations. 2015-07-08 [r1736] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/translations.c: Bug fix for change introduced into xmlparse.c by r1701. 2015-07-08 [1735] Andrew M. Bishop <amb> * src/files.c: Merge change from MS-Windows branch. 2015-07-08 [r1734] Andrew M. Bishop <amb> * src/xmlparse.c: Remove a commented out line left over from a previous change. 2015-07-08 [r1733] Andrew M. Bishop <amb> (from 'branches/MS-Windows') * src/files.c: Use the same definition of ssize_t in files.c as other files (for MS Windows). 2015-07-07 [r1732] Andrew M. Bishop <amb> * web/translations/translation.pl.txt: More Polish translations (via http://www.routino.org/translations/). 2015-07-06 [r1731] Andrew M. Bishop <amb> * web/translations/translation.pl.txt (added), web/www/routino, web/www/routino/.htaccess, xml/routino-translations.xml: Added Polish version of translations (submitted through http://www.routino.org/translations/). 2015-07-04 [r1730] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/functions.h, src/optimiser.c, src/router.c: Move the CalculateRoute function from router.c into optimiser.c. 2015-07-02 [r1729] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/functions.h, src/output.c, src/profiles.c, src/profiles.h, src/router.c, src/translations.c, src/translations.h: Identify the best bits from the profiles XML reader and translations XML reader functions and implement them in both. 2015-07-02 [r1728] Andrew M. Bishop <amb> * src/profiles.c: Fix error with --help-profile-xml option. 2015-07-01 [r1726] Andrew M. Bishop <amb> * src/files.c, src/files.h, src/osmo5mparse.c, src/osmpbfparse.c, src/xmlparse.c: Merge changes from MS-Windows branch. 2015-07-01 [r1724-1725] Andrew M. Bishop <amb> (from 'branches/MS-Windows') * src/files.c: More fixes for MSVC, set permission for creating files and combine code with MinGW. * src/files.h, src/osmo5mparse.c, src/osmpbfparse.c, src/xmlparse.c: More fixes for MSVC from Oliver Eichler (include basestd.h and define ssize_t). 2015-06-22 [r1723] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/optimiser.c: Bug fix for latest change (logassert and LIBROUTINO). 2015-06-22 [r1722] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/files.c, src/nodes.c, src/optimiser.c, src/relations.c, src/results.c, src/segments.c, src/ways.c: Remove all references to log_memory(), log_free(), log_mmap(), log_munmap() and logassert() from code compiled into the library. 2015-06-20 [r1720] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/routino.h: Avoid defining DLL_PUBLIC twice on Cygwin. 2015-06-20 [r1719] Andrew M. Bishop <amb> * extras/tagmodifier/tagmodifier.c, src/osmxmlparse.c, src/profiles.c, src/tagging.c, src/translations.c, src/xml/xsd-to-xmlparser.c, src/xmlparse.c, src/xmlparse.h: Make the xmltags definitions of XML files be constants. 2015-06-20 [r1717-1718] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/xmlparse.c, src/xmlparse.h: Don't print an error when XML parsing fails but store a string for later use (for use within library version). * src/optimiser.c: Check for defined(LIBROUTINO) instead of LIBROUTINO. 2015-06-19 [r1716] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/files.c, src/optimiser.c, src/output.c, src/profiles.c, src/translations.c: Do not print error or debug messages when compiled into library. Return an appropriate error value from functions instead of exiting. 2015-06-18 [r1715] Andrew M. Bishop <amb> (from 'branches/libroutino') * Makefile.conf, src/Makefile, src/routino.c (added), src/routino.h (added): Add stub files for Routino library exported functions and Makefile support. 2015-06-17 [r1713] Andrew M. Bishop <amb> * extras/tagmodifier/README.txt, extras/tagmodifier/tagmodifier.c: Add the '--logmemory' option that the other programs have. 2015-06-17 [r1712] Andrew M. Bishop <amb> (from 'branches/libroutino') * extras/find-fixme/fixme-finder.c: Fix error with command line tagging filename selection. Change code to make it clearer that the error log file is not optional. 2015-06-16 [r1711] Andrew M. Bishop <amb> (from 'branches/libroutino') * extras/find-fixme/osmparser.c, extras/tagmodifier/tagmodifier.c, src/errorlogx.c, src/fakes.c, src/fakes.h, src/logerror.c, src/nodesx.c, src/osmo5mparse.c, src/osmparser.c, src/osmpbfparse.c, src/osmxmlparse.c, src/profiles.c, src/relationsx.c, src/segmentsx.c, src/tagging.c, src/translations.c, src/visualiser.c, src/waysx.c, src/xmlparse.c: Audit the use of file static variables to make sure that there are no implicit assumptions about initialisation conditions that would be wrong for library usage. Fix problems and add comments for clarity. 2015-06-14 [r1710] Andrew M. Bishop <amb> (from 'branches/libroutino') * extras/find-fixme/fixme-dumper.c, extras/tagmodifier/tagmodifier.c, src/filedumper.c, src/nodesx.c, src/osmxmlparse.c, src/planetsplitter.c, src/relationsx.c, src/relationsx.h, src/segmentsx.c, src/superx.c, src/tagging.c, src/translations.c, src/types.c, src/waysx.c, src/xml/xsd-to-xmlparser.c, src/xmlparse.c: Audit the use of function static variables to make sure that there are no implicit assumptions about initialisation conditions that would be wrong for library usage. Fix problems and add comments for clarity. 2015-06-12 [r1709] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/filedumperx.c: Correct an error in a comment. 2015-06-12 [r1708] Andrew M. Bishop <amb> (from 'branches/libroutino') * extras/find-fixme/fixme-finder.c, src/planetsplitter.c, src/router.c: Minimise the number of times that FileName() is called since each one will allocate memory and take time. 2015-06-12 [r1706-1707] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/profiles.c, src/profiles.h, src/router.c: Add a function to free the memory in the Profile structures loaded from file. * src/output.c, src/router.c, src/translations.c, src/translations.h: Create a Translation structure to hold the translated strings and have one global variable instead of 30. Add a function to free the memory in the Translation structure. 2015-06-10 [r1705] Andrew M. Bishop <amb> * doc/html/index.html, web/www/routino/documentation: Merge the MS-Windows branch back into the trunk. More documentation changes. 2015-06-10 [r1704] Andrew M. Bishop <amb> (from 'branches/MS-Windows') * doc/html/index.html: Update the index to point to the new MS Windows installation documentation. 2015-06-10 [r1703] Andrew M. Bishop <amb> (from 'branches/MS-Windows') * web/www/routino/documentation: Ignore the new MS Windows installation documentation file. 2015-06-10 [r1701-1702] Andrew M. Bishop <amb> (from 'branches/libroutino') * src/router.c: The translations are required to be loaded for the text output formats. * src/output.c, src/xmlparse.c: The ParseXML_Encode_Safe_XML() function now returns a pointer to the same re-allocated string each time rather than allocating a new string each time that it is called. 2015-06-09 [r1699] Andrew M. Bishop <amb> * Makefile.conf, doc/INSTALL-MS-WIN.txt (added), doc/INSTALL.txt, doc/html/installation-ms-windows.html (added), doc/html/installation.html, extras/find-fixme/Makefile, extras/tagmodifier/Makefile, src/Makefile, src/errorlogx.c, src/files.c, src/files.h, src/logerror.c, src/nodesx.c, src/output.c, src/relationsx.c, src/segmentsx.c, src/test/Makefile, src/uncompress.c, src/waysx.c, src/xml/Makefile, src/xmlparse.c, web/Makefile: Merge the MS-Windows branch back into the trunk. Code changes and documentation for Cygwin and MinGW compilers. 2015-05-31 [r1697] Andrew M. Bishop <amb> (from 'branches/MS-Windows') * src/errorlogx.c, src/files.c, src/files.h, src/nodesx.c, src/relationsx.c, src/segmentsx.c, src/waysx.c: Microsoft Windows does not allow deleting an open file and continuing to use it like UNIX does. For MS Windows rename the file instead of deleting and replacing it and do not delete open files immediately but wait until they are closed. 2015-05-30 [r1696] Andrew M. Bishop <amb> (from 'branches/MS-Windows') * src/files.c, src/logerror.c, src/output.c: Open files in binary mode for MSVC and MinGW. 2015-05-29 [r1695] Andrew M. Bishop <amb> * src/nodesx.c, src/relationsx.c, src/segmentsx.c, src/waysx.c: Ensure that allocated strings are long enough even if the %p format is extravagant in the number of characters it uses. 2015-05-29 [r1694] Andrew M. Bishop <amb> * web/Makefile: Change the order so that the translations are created before the icons (because the icons are more difficult to make and more likely to fail). 2015-05-29 [r1693] Andrew M. Bishop <amb> * Makefile.conf: Remove the -Wfloat-conversion gcc option since it was only included in gcc version 4.9 so is not available everywhere. 2015-05-29 [r1692] Andrew M. Bishop <amb> (from 'branches/MS-Windows') * doc/INSTALL-MS-WIN.txt, doc/html/installation-ms-windows.html: Add instructions for compiling with Cygwin (no source code changes needed). 2015-05-28 [r1690] Andrew M. Bishop <amb> * extras/find-fixme/Makefile, extras/tagmodifier/Makefile, src/Makefile, src/test/Makefile, src/xml/Makefile, web/Makefile, web/www/routino, web/www/routino/router.html (removed), web/www/routino/visualiser.html (removed), xml/Makefile: Update Makefiles so that 'make clean' goes back to the source code in the release tar files and 'make distclean' goes back to the source code in subversion (the difference mainly being web page icons and web page translations). 2015-05-28 [r1687-1689] Andrew M. Bishop <amb> (from 'branches/MS-Windows') * doc/INSTALL-MS-WIN.txt (added), doc/INSTALL.txt, doc/html/installation-ms-windows.html (added), doc/html/installation.html: Update documentation to describe compilation on Microsoft Windows. * src/uncompress.c: Do not try to compile the built-in file decompression on MINGW or MSVC due to the lack of fork() function. * Makefile.conf, extras/find-fixme/Makefile, extras/tagmodifier/Makefile, src/Makefile, src/xml/Makefile, web/Makefile: Update Makefiles for compiling with MINGW to include mman-win32.o and handle executables with .exe file extension. 2015-05-26 [r1683-1686] Andrew M. Bishop <amb> (from 'branches/MS-Windows') * src/xmlparse.c: When compiling with MINGW there is no strcasecmp() function so _stricmp() must be used (the same as with MSVC). * src/files.c: When compiling with MINGW the same mman-win32 functions are required as with MSVC. The open() function can not set the 'group' and 'other' permissions although it can set the 'user' permissions. * src/files.h: When compiling with MINGW the pread() and pwrite() functions are not available. Fix a signed/unsigned assignment warning in the inline functions. * src/uncompress.c: Only compile the pipe_and_fork() function if any of the compression methods are enabled. 2015-05-26 [r1680] Andrew M. Bishop <amb> * Makefile.conf, extras/find-fixme/fixme-dumper.c, extras/find-fixme/fixme-finder.c, extras/tagmodifier/tagmodifier.c, src/Makefile, src/cache.h, src/fakes.c, src/filedumper.c, src/files.c, src/files.h, src/logging.c, src/logging.h, src/mman-win32.c (added), src/mman-win32.h (added), src/nodes.c, src/optimiser.c, src/osmo5mparse.c, src/osmpbfparse.c, src/output.c, src/planetsplitter.c, src/profiles.c, src/router.c, src/segments.h, src/uncompress.c, src/ways.c, src/ways.h, src/xml/xsd-to-xmlparser.c, src/xmlparse.c: Merge branch 'MSVC' back into the trunk. 2015-05-26 [r1679] Andrew M. Bishop <amb> * web/www/leaflet/install.sh: Update to Leaflet version 0.7.3. 2015-05-21 [r1678] Andrew M. Bishop <amb> * src/sorting.c: Fix bug with 64-bit version failing 'make test'. 2015-05-20 [r1677] Andrew M. Bishop <amb> * src/output.c: Change a static variable to a const to clarify it usage. 2015-05-20 [r1676] Andrew M. Bishop <amb> (from 'branches/MSVC') * Makefile.conf: Add the -Wfloat-conversion gcc option to catch any future score_t related conversions required. 2015-05-20 [r1675] Andrew M. Bishop <amb> (from 'branches/MSVC') * src/optimiser.c, src/profiles.c, src/router.c: Typecasts for score_t and explicit float (not double) literals for MSVC compilation [based on patch from Oliver Eichler]. 2015-05-20 [r1674] Andrew M. Bishop <amb> (from 'branches/MSVC') * src/logging.c, src/xmlparse.c: Updated MSVC code changes after testing [patch from Oliver Eichler]. 2015-05-20 [r1673] Andrew M. Bishop <amb> (from 'branches/MSVC') * src/files.c, src/files.h, src/mman-win32.c (added), src/mman-win32.h (added): Added a Win32 implementation of the mmap/munmap functions [files from https://code.google.com/p/mman-win32 suggested by Oliver Eichler]. 2015-05-19 [r1666-1671] Andrew M. Bishop <amb> (from 'branches/MSVC') * src/ways.c: Fix uninitialised memory [found by Oliver Eichler when compiling with Microsoft C compiler]. * src/fakes.c, src/segments.h, src/ways.h: Add some explicit casts for some assignments resulting from pointer arithmetic [patch from Oliver Eichler for compiling with Microsoft C]. * src/files.c, src/nodes.c, src/xmlparse.c: Add some explicit casts for some assignments between different integer types [patch from Oliver Eichler for compiling with Microsoft C]. * src/Makefile, src/planetsplitter.c, src/router.c: Rename DATADIR to ROUTINO_DATADIR to avoid problems when compiling with Microsoft C compiler [inspired by patches from Oliver Eichler]. * src/files.c, src/files.h: Remove memory mapping functions when compiling with Microsoft C compiler [inspired by patches from Oliver Eichler]. This will only allow slim more to be compiled. * src/xmlparse.c: Remove <strings.h> when compiling with Microsoft C compiler (in which use a macro to replace strcasecmp) [inspired by patches from Oliver Eichler]. 2015-05-19 [r1664-1665] Andrew M. Bishop <amb> (from 'branches/MSVC') * src/files.c, src/files.h: Remove <unistd.h> where not needed at all or when compiling with Microsoft C compiler (in which case add <io.h> and some macros to replace read/write/open/close/lseek etc.) [inspired by patches from Oliver Eichler]. * extras/find-fixme/fixme-finder.c, extras/tagmodifier/tagmodifier.c, src/cache.h, src/osmo5mparse.c, src/osmpbfparse.c, src/output.c, src/planetsplitter.c, src/uncompress.c, src/xml/xsd-to-xmlparser.c, src/xmlparse.c: Remove <unistd.h> where not needed at all or when compiling with Microsoft C compiler (in which case add <io.h> and some macros to replace read/write/open/close/lseek etc.) [inspired by patches from Oliver Eichler]. 2015-05-19 [r1663] Andrew M. Bishop <amb> (from 'branches/MSVC') * extras/find-fixme/fixme-dumper.c, src/filedumper.c, src/logging.c, src/logging.h: Remove <sys/time.h> where not needed at all or when compiling with Microsoft C compiler (in which case add a replacement gettimeofday function) [inspired by patches from Oliver Eichler]. 2015-05-18 [r1661] Andrew M. Bishop <amb> * src/optimiser.c: Fix use-after-free error found by valgrind. 2015-05-16 [r1657] Andrew M. Bishop <amb> * web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js: Fix bug with moving markers on the map (OpenLayers version) and enable markers when they are dragged onto the map (both versions). 2015-05-16 [r1656] Andrew M. Bishop <amb> * web/translations/router.html, web/translations/translation.de.txt, web/translations/translation.en.txt, web/translations/translation.fr.txt, web/translations/translation.nl.txt, web/www/routino/router.css, web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js: Allow dragging the waypoint icon up-and-down in the list and onto the map. 2015-05-15 [r1655] Andrew M. Bishop <amb> * web/translations/translation.hu.txt: Add updated Hungarian translations submitted via http://www.routino.org/translations/ on 2015-05-14. 2015-05-14 [r1652-1653] Andrew M. Bishop <amb> * Makefile.conf: Add the -pedantic compilation flag to allow detection of more potential errors and portability issues. * src/errorlog.h, src/files.c, src/nodes.h, src/relations.h, src/segments.h, src/sorting.c, src/ways.h: Replace all arithmetic involving 'void*' pointers with 'char*' since it isn't strictly valid although it is accepted by gcc. 2015-05-13 [r1651] Andrew M. Bishop <amb> * src/xmlparse.c: Remove a gcc warning about overflow in implicit constant conversion (by making it an explicit type cast). 2015-05-13 [r1650] Andrew M. Bishop <amb> * extras/find-fixme/fixme-dumper.c, src/filedumper.c, src/logging.c: Use "%zu" to print 'size_t' type values and use Pindex_t to print 'index_t' type values. 2015-05-13 [r1649] Andrew M. Bishop <amb> * src/sorting.c: Remove some pthread related code that was being used even if compiled without pthreads. 2015-05-05 [r1648] Andrew M. Bishop <amb> * web/translations/translation.de.txt: Add updated German translations submitted via http://www.routino.org/translations/ on 2015-05-04. 2015-05-01 [r1646] Andrew M. Bishop <amb> * doc/html/algorithm.html, doc/html/configuration.html, doc/html/data.html, doc/html/index.html, doc/html/installation.html, doc/html/limits.html, doc/html/output.html, doc/html/readme.html, doc/html/style.css, doc/html/tagging.html, doc/html/usage.html, extras/find-fixme/web/www/index.html, web/www/routino/index.html: Add "meta" header to HTML to help mobile devices and tidy up some CSS. 2015-05-01 [r1644-1645] Andrew M. Bishop <amb> * doc/html/readme.html: Fixed some header links. * doc/TAGGING.txt, doc/html/tagging.html: Fixed some text formatting. 2015-04-26 [r1643] Andrew M. Bishop <amb> * web/translations/translation.hu.txt (added), web/www/routino, xml/routino-translations.xml: Added a Hungarian translation of the Routino routes and router web pages (from unknown person using http://routino.org/translations/). 2015-04-11 [r1642] Andrew M. Bishop <amb> * web/Makefile: Run make in the xml directory after updating the xml/translations.xml file. 2015-04-10 [r1641] Andrew M. Bishop <amb> * src/translations.c: Change built-in default HTML translation strings so that they work with the web page if they have to be used. 2015-03-30 [r1638] Andrew M. Bishop <amb> * src/optimiser.c: Fix bug with indenting of debug output in FindMiddleRoute() function. 2015-03-28 [r1636] Andrew M. Bishop <amb> * src/optimiser.c: More verbose, consistent, complete and descriptive debugging of routes found. 2015-03-28 [r1634] Andrew M. Bishop <amb> * src/optimiser.c: The new FindStartRoutes() function does not need to be so complicated. 2015-03-28 [r1632] Andrew M. Bishop <amb> * src/functions.h, src/optimiser.c, src/router.c: Remove the ExtendStartRoutes() function by merging its functionality with the FindStartRoutes() function since they were almost identical anyway. 2015-03-21 [r1626-1627] Andrew M. Bishop <amb> * src/optimiser.c, src/router.c: Make sure that all complete routes have finish_node and last_segment filled in. * src/optimiser.c: Bug fix and clarification for previous change. 2015-03-21 [r1625] Andrew M. Bishop <amb> * src/functions.h, src/optimiser.c, src/router.c: Don't merge the end of the route with the middle part of the route before combining with the beginning of the route - combine beginning, middle and end all in one function. 2015-02-02 [r1624] Andrew M. Bishop <amb> * web/translations/translation.de.txt, xml/routino-translations.xml: Add updated German translations submitted via http://www.routino.org/translations/ on 2014-01-31. 2015-01-17 [r1623] Andrew M. Bishop <amb> * web/translations/translation.de.txt, xml/routino-translations.xml: Add updated German translations submitted via http://www.routino.org/translations/ on 2014-01-16. 2015-01-13 [r1622] Andrew M. Bishop <amb> * web/translations/translation.de.txt: Add updated German translations submitted via http://www.routino.org/translations/ on 2014-01-13. 2015-01-09 [r1621] Andrew M. Bishop <amb> * web/translations/translation.nl.txt: Add updated Dutch translations submitted via http://www.routino.org/translations/ on 2014-01-08. 2015-01-07 [r1620] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Remove cycle_barrier and bicycle_barrier since these don't always block bicycles. 2014-12-04 [r1619] Andrew M. Bishop <amb> * src/typesx.h: Increase MAX_SEG_PER_NODE to avoid further problems. 2014-11-29 [r1618] Andrew M. Bishop <amb> * src/visualiser.c: Include typesx.h to get the definition of MAX_SEG_PER_NODE rather than having another one. 2014-11-08 Andrew M. Bishop <amb> Version 2.7.3 released. 2014-11-08 [r1616] Andrew M. Bishop <amb> * FILES, doc/NEWS.txt, doc/README.txt, doc/html/readme.html: Updated for version 2.7.3. 2014-11-08 [r1615] Andrew M. Bishop <amb> * web/translations/translation.de.txt, xml/routino-translations.xml: Translation of the final German word missing from the XML file. 2014-10-25 [r1614] Andrew M. Bishop <amb> * doc/DATALIFE.txt, src/nodesx.c, src/planetsplitter.c, src/relationsx.c: Sort the data geographically before pruning so that the data points physically close together are close together in memory which reduces swapping/paging and therefore runs much faster when memory is limited. 2014-10-23 [r1613] Andrew M. Bishop <amb> * src/logging.c: Comment fixes, tidy-up and one bug fixed. 2014-10-22 [r1612] Andrew M. Bishop <amb> * doc/DATALIFE.txt, src/waysx.c: Use the waysx->idata array instead of wayx->id when logging node errors during the segment creation. 2014-10-21 [r1609-1611] Andrew M. Bishop <amb> * doc/DATALIFE.txt: Correct errors in wayx->id usage when compacting ways. * src/logging.c: Improve the message printed at the end when using --logtime or --logmemory. * src/planetsplitter.c: Clarify some comments. 2014-10-18 [r1608] Andrew M. Bishop <amb> * doc/DATALIFE.txt, src/segmentsx.c: Use the waysx->idata array when logging duplicate segments rather than looking up the wayx and using its id, also saves mapping the ways into memory. 2014-10-18 [r1606-1607] Andrew M. Bishop <amb> * doc/DATALIFE.txt, src/segmentsx.c: Use the nodesx->idata array when logging duplicate segments rather than looking up the nodex and using its id. * src/nodesx.c: Shrink the size of the nodesx->idata array when removing non-highway nodes. 2014-10-18 [r1605] Andrew M. Bishop <amb> * doc/DATALIFE.txt, src/nodesx.c, src/planetsplitter.c, src/relationsx.c, src/segmentsx.c, src/superx.c: Free memory that it allocated by IndexSegments() when no longer needed rather than holding on to it. 2014-10-14 [r1604] Andrew M. Bishop <amb> * doc/DATALIFE.txt, src/planetsplitter.c: Speed up the database generation when pruning by reducing the amount of random memory accesses are required by compacting the database after each step. Unless there is enough RAM to hold all the memory mapped files this should be faster. 2014-10-13 [r1603] Andrew M. Bishop <amb> * src/nodes.c, src/segments.c, src/segments.h, src/segmentsx.c: Try to speed up the search for the closest node/segment by minimising the number of nodes that are examined in detail. 2014-10-10 [r1602] Andrew M. Bishop <amb> * src/nodes.c, src/relations.c, src/segments.c, src/ways.c: Record the memory used by the node, segment, way and relation caches in the slim mode router. 2014-10-10 [r1601] Andrew M. Bishop <amb> * extras/find-fixme/fixme-finder.c, src/logging.c, src/planetsplitter.c, src/router.c: Log the router time in microseconds rather than milliseconds. Add a note at the end about the format of the time and memory logging. 2014-10-10 [r1600] Andrew M. Bishop <amb> * doc/USAGE.txt, doc/html/usage.html, src/logging.c, src/nodes.c, src/optimiser.c, src/results.c, src/router.c: Add the '--logtime' and '--logmemory' options to the router to report the time and maximum memory in use (allocated and mapped files) during each step of the routing. 2014-09-30 [r1599] Andrew M. Bishop <amb> * extras/find-fixme/fixme-dumper.c, extras/find-fixme/fixme-finder.c, extras/tagmodifier/tagmodifier.c, src/filedumper.c, src/filedumperx.c, src/planetsplitter.c, src/router.c: Use exit() when exiting the program other than at the end of the main function. 2014-09-27 [r1598] Andrew M. Bishop <amb> * doc/DATALIFE.txt, doc/USAGE.txt, doc/html/usage.html, extras/find-fixme/README.txt, extras/find-fixme/fixme-finder.c, src/errorlogx.c, src/files.c, src/logging.c, src/logging.h, src/nodesx.c, src/planetsplitter.c, src/prunex.c, src/relationsx.c, src/segmentsx.c, src/sorting.c, src/superx.c, src/typesx.h, src/waysx.c: Add a '--logmemory' option to planetsplitter which will report the maximum memory in use (allocated and mapped files) during each step of the processing. 2014-09-27 [r1597] Andrew M. Bishop <amb> * src/nodes.h, src/relations.c, src/segments.c, src/ways.c, src/waysx.h: Be more consistent in the way that cache.h is included. 2014-09-26 [r1596] Andrew M. Bishop <amb> * src/logging.c, src/logging.h: Make a function static in logging.c rather than global. 2014-09-26 [r1592-1595] Andrew M. Bishop <amb> * src/planetsplitter.c: Free the segment list before generating the errorlog files (it isn't used). * src/prunex.c: Change a comment and the style in which some data is freed. * src/segmentsx.c: Free segmentsx->usedway in FreeSegmentList() rather than letting it leak. * src/nodesx.c: Free segmentsx->firstnode in SaveNodeList() like DATALIFE.txt says it should be. 2014-09-23 [r1591] Andrew M. Bishop <amb> * src/files.c, src/files.h, src/sorting.c: Allocate only the memory that is needed (but never more than the limit) when sorting files (i.e. don't just allocate the limit without checking). 2014-09-18 [r1589-1590] Andrew M. Bishop <amb> * src/visualiser.c: Update comments for the functions (some were wrong, all were unclear). * extras/find-fixme/osmparser.c: Remove unused macros. 2014-08-27 [r1588] Andrew M. Bishop <amb> * web/translations/translation.de.txt: Add updated German translation submitted via http://www.routino.org/translations/ on 2014-08-26. 2014-07-26 [r1587] Andrew M. Bishop <amb> * src/profiles.c: Limit the property preferences to a factor of 100 preference for a highway having a property compared to a highway not having the property (was 10000). 2014-07-04 [r1586] Andrew M. Bishop <amb> * doc/NEWS.txt: Fix release date for 2.7.2. 2014-06-26 Andrew M. Bishop <amb> Version 2.7.2 released. 2014-06-26 [r1584] Andrew M. Bishop <amb> * FILES, doc/NEWS.txt, doc/README.txt, doc/html/readme.html: Updated for version 2.7.2 release. 2014-06-25 [r1583] Andrew M. Bishop <amb> * doc/INSTALL.txt, doc/html/installation.html: Add a note about another Perl module required if compiling from subversion. 2014-06-25 [r1582] Andrew M. Bishop <amb> * src/router.c: Clarify the reason for the unreachable code (#if 0) and fix bug in it. 2014-06-25 [r1581] Andrew M. Bishop <amb> * src/errorlogx.c: Fix for compiler warning on 64-bit systems but not 32-bit systems. 2014-06-24 [r1580] Andrew M. Bishop <amb> * src/output.c: Fix for revision r1565 that crashes on 64-bit systems but not 32-bit systems. 2014-06-24 [r1579] Andrew M. Bishop <amb> * src/optimiser.c: Fix for revision r1553 that crashes on 64-bit systems but not 32-bit systems. 2014-06-09 [r1578] Andrew M. Bishop <amb> * src/cache.h: Increase the size of the caches for the slim programs by a factor of four (gives a large speed-up on virtual machines with low memory and slow disks even though it makes little difference on machines with lots of memory and fast disks). 2014-06-07 [r1577] Andrew M. Bishop <amb> * doc/TAGGING.txt, doc/html/tagging.html: Document the default assumptions about allowed transport types on ferry routes (none). 2014-06-05 [r1576] Andrew M. Bishop <amb> * web/translations/translate.pl: When creating the translated HTML and XML files give the statistics for each file separately. 2014-05-26 [r1575] Andrew M. Bishop <amb> * web/translations/translation.de.txt: Add updated German translations submitted via http://www.routino.org/translations/ on 2014-05-25. 2014-05-21 [r1574] Andrew M. Bishop <amb> * web/translations/translation.ru.txt: Add updated Russian translations submitted via http://www.routino.org/translations/ around 2014-05-20. 2014-05-20 [r1573] Andrew M. Bishop <amb> * src/visualiser.c: When visualising segments include all of the ones that overlap the selected region (not missing a few that cross the edges). 2014-05-19 [r1572] Andrew M. Bishop <amb> * web/translations/translation.de.txt, web/translations/translation.fr.txt, web/translations/translation.nl.txt, web/translations/translation.ru.txt, web/translations/translations-body.xml, xml/routino-translations.xml: Remove un-needed whitespace in translations files. 2014-05-17 Andrew M. Bishop <amb> Version 2.7.1 released. 2014-05-17 [r1570] Andrew M. Bishop <amb> * FILES, doc/NEWS.txt, doc/README.txt, doc/html/readme.html: Update documentation for version 2.7.1. 2014-05-17 [r1569] Andrew M. Bishop <amb> * web/Makefile: Re-create the xml/routino-translations.xml file if the translations are updated or the file is deleted. 2014-05-17 [r1568] Andrew M. Bishop <amb> * xml/routino-translations.xml: Add updated German translations submitted via http://www.routino.org/translations/ around 2014-04-11 and 2014-05-02. 2014-05-12 [r1567] Andrew M. Bishop <amb> * src/prunex.c: When pruning short segments take the highway types into account when sharing the pruned segment length between the two neighbouring segments. 2014-05-10 [r1565-1566] Andrew M. Bishop <amb> * src/test, src/test/a-b-c-d.sh (added), src/test/coincident-waypoint.osm (added), src/test/coincident-waypoint.sh (added), src/test/expected/coincident-waypoint-WP01.txt (added), src/test/expected/coincident-waypoint-WP02.txt (added), src/test/expected/coincident-waypoint-WP03.txt (added), src/test/expected/coincident-waypoint-WP04.txt (added): Add test cases for routes with contain two consecutive coincident waypoints. * src/fakes.c, src/fakes.h, src/output.c, src/router.c: Don't crash if the specified route contains two consecutive coincident waypoints (route instructions at those points may not be perfect). 2014-05-09 [r1564] Andrew M. Bishop <amb> * src/output.c, src/test/expected/loops-WP01.txt, src/test/expected/loops-WP02.txt, src/test/expected/loops-WP06.txt, src/test/expected/loops-WP07.txt: Fix bug with results output that would miss a segment and get the distance/time wrong if a waypoint node was passed again on the way to the next waypoint. 2014-05-05 [r1563] Andrew M. Bishop <amb> * src/optimiser.c: Remove some left-over debugging print statements. 2014-05-03 [r1562] Andrew M. Bishop <amb> * web/translations/translation.de.txt: Add updated German translations submitted via http://www.routino.org/translations/ around 2014-05-02. (Some of the changes from the 2014-04-11 submission were not merged last time, they have been included this time). 2014-05-02 [r1561] Andrew M. Bishop <amb> * web/translations/translation.de.txt: Add updated German translations submitted via http://www.routino.org/translations/ around 2014-04-11. 2014-04-30 [r1560] Andrew M. Bishop <amb> * doc/USAGE.txt, doc/html/usage.html, src/filedumper.c, src/osmparser.c, src/visualiser.c, src/visualiser.h, web/translations/translation.en.txt, web/translations/visualiser.html, web/www/routino/visualiser.cgi, web/www/routino/visualiser.leaflet.js, web/www/routino/visualiser.openlayers.js: Update the visualiser web page to allow displaying the "cyclebothways" highway type and the "roundabout" highway type. Also "cyclebothways" is no longer a property so removed from that part of the visualiser. 2014-04-29 [r1559] Andrew M. Bishop <amb> * src/filedumper.c, src/optimiser.c, src/osmparser.c, src/output.c, src/segments.c, src/types.c, src/types.h, xml/routino-profiles.xml: Remove the "cyclebothways" property and replace it with a "cyclebothways" highway type. This means that it is no longer possible to choose a preference for this type of highway when calculating a route. There was never really any reason for allowing users to do this since they can't specify a preference for oneway streets. It does however mean that the broken Javascript in the router web page (no entry field for this property) is fixed. Unfortunately this means that a database created by previous versions are not compatible with this one. 2014-04-28 [r1558] Andrew M. Bishop <amb> * doc/TAGGING.txt, doc/html/tagging.html: Add some missing items into the documentation related to cycling both ways. 2014-04-28 [r1557] Andrew M. Bishop <amb> * web/Makefile: Fix bug with updating XML files in web/data directory (Makefile error). 2014-04-28 [r1556] Andrew M. Bishop <amb> * src/test, src/test/cycle-both-ways.osm (added), src/test/cycle-both-ways.sh (added), src/test/cycle-drive.sh (added), src/test/expected/cycle-both-ways-WP01.txt (added), src/test/expected/cycle-both-ways-WP02.txt (added): Add a test case for the ability to cycle both ways on highways that allow it. Tests the roundabout exit naming as well as shortest route. 2014-04-28 [r1555] Andrew M. Bishop <amb> * src/test/fake-node-with-loop.osm, src/test/prune-straight.osm, src/test/roundabout-waypoints.osm: Remove unneeded tag from <osm> XML element. 2014-04-27 [r1553-1554] Andrew M. Bishop <amb> * src/test, src/test/expected/fake-node-with-loop-WP01.txt (added), src/test/expected/fake-node-with-loop-WP02.txt (added), src/test/fake-node-with-loop.osm (added), src/test/fake-node-with-loop.sh (added): Add test case for the bug with particular arrangement of a fake node (waypoint in middle of segment) and a roundabout. * src/optimiser.c, src/segments.h: Fix bug with particular arrangement of a fake node (waypoint in middle of segment) and a roundabout. The FindFinishRoutes() function was invalidly allowing a U-turn which the later parts of the route calculation didn't and therefore failed to find a route. 2014-04-26 [r1552] Andrew M. Bishop <amb> * doc/INSTALL.txt, doc/html/installation.html, web/www/routino/search.cgi, web/www/routino/search.pl: Correct the list of Perl modules required to be installed to use the search function. 2014-04-24 [r1551] Andrew M. Bishop <amb> * xml/scripts/drive.pl, xml/scripts/walk.pl: Omit some more properties from the special case tagging rules. 2014-04-14 [r1550] Andrew M. Bishop <amb> * src/optimiser.c: Revert r1462 which makes no noticeable difference to the speed in normal operation but makes a lot of difference for databases created with the special "drive" tagging rules. 2014-04-14 [r1549] Andrew M. Bishop <amb> * src/router.c: Check the number of waypoints after considering the --help and --help-profile options. 2014-04-12 [r1548] Andrew M. Bishop <amb> * web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js: Disable the route calculation buttons if fewer than two waypoints are active (more cases). 2014-04-12 [r1545-1547] Andrew M. Bishop <amb> * web/Makefile: Automatically update the translated files if the translation files or HTML templates change. * web/translations/router.html, web/www/routino/router.css, web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js: Disable the route calculation buttons if fewer than two waypoints are active. * src/router.c: Refuse to calculate a route if fewer than two waypoints are specified. 2014-04-08 [r1544] Andrew M. Bishop <amb> * web/translations/translate.pl: Make script work with older versions of Perl. 2014-04-06 [r1543] Andrew M. Bishop <amb> * src/output.c: Change routing instructions if on a bicycle and cyclebothways is enabled on the highways at the junctions (e.g. different count of roundabout exits). 2014-04-05 [r1540-1542] Andrew M. Bishop <amb> * src/test, src/test/expected/roundabout-waypoints-WP01.txt (added), src/test/expected/roundabout-waypoints-WP02.txt (added), src/test/expected/roundabout-waypoints-WP03.txt (added), src/test/expected/roundabout-waypoints-WP04.txt (added), src/test/expected/roundabout-waypoints-WP05.txt (added), src/test/expected/roundabout-waypoints-WP06.txt (added), src/test/expected/roundabout-waypoints-WP07.txt (added), src/test/roundabout-waypoints.osm (added), src/test/roundabout-waypoints.sh (added): Add test case for router error when waypoint is on a roundabout. [Test case also unintentionally detected the super-segment merging bug.] * src/test/Makefile: Compile programs before running tests (fix Makefile bug). * src/superx.c: Fix bug with merging super-segments and segments - an improvement on fix that was applied in version 2.7. 2014-04-04 [r1539] Andrew M. Bishop <amb> * src/output.c: Fix router error when waypoint is on a roundabout (stops crash). 2014-04-02 [r1537-1538] Andrew M. Bishop <amb> * web/translations/translate.pl: Don't use HTML character entity encoding for UTF-8 characters in the HTML. * web/translations/translation.de.txt, web/translations/translation.fr.txt, web/translations/translation.nl.txt, web/translations/translation.ru.txt: Trivial changes to the translation files to put them all into the same order. 2014-04-01 [r1536] Andrew M. Bishop <amb> * web/translations/router.html, web/translations/translate.pl, web/translations/translation.ru.txt, web/translations/translations-body.xml, web/translations/visualiser.html: Use '~~' delimiters in the templates for the special-case replacement strings (like the language name). 2014-03-31 [r1535] Andrew M. Bishop <amb> * web/translations/router.html, web/translations/translate.pl, web/translations/visualiser.html: Use '$$' delimiters in the templates for the multi-line replacement strings (to match the files of translation phrases). 2014-03-25 [r1534] Andrew M. Bishop <amb> * web/translations/translation.ru.txt, web/www/routino, xml/routino-translations.xml: Add Russian translations submitted via http://www.routino.org/translations/ around 2014-03-23. 2014-03-24 [r1533] Andrew M. Bishop <amb> * web/translations/translate.pl, web/translations/translation.de.txt, web/translations/translation.en.txt, web/translations/translation.fr.txt, web/translations/translation.nl.txt, web/translations/translation.ru.txt (added), web/translations/translations-body.xml (added), web/translations/translations-head.xml (added), web/translations/translations-tail.xml (added): Create the routino-translations.xml file from the translated language files in the same way as the HTML. Reverse engineer the existing XML file into the translation files for the languages. 2014-03-23 [r1532] Andrew M. Bishop <amb> * doc/README.txt, doc/html/readme.html: Fixed typo in subversion command line example. 2014-03-22 Andrew M. Bishop <amb> Version 2.7 released. 2014-03-22 [r1529-1530] Andrew M. Bishop <amb> * FILES, doc/NEWS.txt, doc/README.txt, doc/html/readme.html: Updated for new release. * doc/INSTALL.txt: Fix missing text when translated from HTML to plain text. 2014-03-22 [r1528] Andrew M. Bishop <amb> * doc/Makefile, extras/find-fixme/Makefile, extras/tagmodifier/Makefile, src/Makefile, src/test/Makefile, src/xml/Makefile, web/Makefile, xml/Makefile: Another iteration through the Makefiles with some small changes. 2014-03-18 [r1527] Andrew M. Bishop <amb> * src/profiles.c, web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js: Run jshint again and fix some recently added changes. 2014-03-17 [r1525-1526] Andrew M. Bishop <amb> * src/osmo5mparse.c, src/osmparser.h, src/osmpbfparse.c: Make two global functions local to the files that contain them. * src/errorlog.h, src/tagging.c: Fix some invalid function comments. 2014-03-15 [r1524] Andrew M. Bishop <amb> * web/translations/translate.pl, web/translations/translation.de.txt: Store the translations as UTF-8 in the text files and convert to HTML character entities when writing the HTML. 2014-03-11 [r1523] Andrew M. Bishop <amb> * Makefile, Makefile.conf, doc/Makefile, extras/find-fixme/Makefile, extras/tagmodifier/Makefile, src/Makefile, web/Makefile (added), xml/Makefile: Update the Makefiles by creating one in the web directory and moving parts from the src, doc and xml Makefiles into it. 2014-03-11 [r1522] Andrew M. Bishop <amb> * web/www/routino: Ignore the translated HTML files. 2014-03-08 [r1521] Andrew M. Bishop <amb> * web/translations (added), web/translations/router.html (added), web/translations/translate.pl (added), web/translations/translation.de.txt (added), web/translations/translation.en.txt (added), web/translations/translation.fr.txt (added), web/translations/translation.nl.txt (added), web/translations/visualiser.html (added), web/www/routino/router.html.de (removed), web/www/routino/router.html.en (removed), web/www/routino/router.html.fr (removed), web/www/routino/router.html.nl (removed), web/www/routino/visualiser.html.en (removed): Create the router and visualiser HTML files from templates and lists of translated phrases. 2014-03-08 [r1520] Andrew M. Bishop <amb> * extras/errorlog/summarise-log.pl, extras/find-fixme/web/www/fixme.cgi, extras/plot-time/plot-planetsplitter-time.pl, src/test/waypoints.pl, web/www/routino/results.cgi, web/www/routino/router.cgi, web/www/routino/router.pl, web/www/routino/search.cgi, web/www/routino/search.pl, web/www/routino/statistics.cgi, web/www/routino/update-profiles.pl, web/www/routino/visualiser.cgi, xml/scripts/drive.pl, xml/scripts/ride.pl, xml/scripts/walk.pl: Update all Perl scripts to "use strict". 2014-03-08 [r1518-1519] Andrew M. Bishop <amb> * src/xmlparse.h: Print the XML line number using the correct formatting for a uint64_t type. * src/files.c: Don't ignore the return value of the write() function call. 2014-03-01 [r1516] Andrew M. Bishop <amb> * doc/INSTALL.txt, doc/html/installation.html, extras/find-fixme/web/www/fixme.openlayers.js, web/www/openlayers/install.sh, web/www/routino/router.openlayers.js, web/www/routino/visualiser.openlayers.js: Updated to version 2.13.1 of OpenLayers (also 2.12 still supported). 2014-02-23 [r1515] Andrew M. Bishop <amb> * web/www/routino/icons/waypoint-left.png (added), web/www/routino/icons/waypoint-right.png (added), web/www/routino/router.html.de, web/www/routino/router.html.en, web/www/routino/router.html.fr, web/www/routino/router.html.nl, web/www/routino/router.leaflet.js, web/www/routino/router.openlayers.js: Add buttons to allow increasing/decreasing the transport properties and preferences (to help on tablet devices where typing a number in a box is hard). 2014-02-22 [r1514] Andrew M. Bishop <amb> * extras/tagmodifier/README.txt, extras/tagmodifier/tagmodifier.c, src/uncompress.h, doc/html/installation.html, doc/html/usage.html, Makefile.conf, src/planetsplitter.c, src/uncompress.c, doc/USAGE.txt, extras/find-fixme/README.txt, doc/INSTALL.txt, extras/find-fixme/fixme-finder.c: Add the option for automatic uncompression of .xz compressed files (not enabled by default in Makefile.conf). 2014-02-22 [r1513] Andrew M. Bishop <amb> * web/data/create.sh: Downloads from GeoFabrik only and URLs changed. 2014-02-22 [r1512] Andrew M. Bishop <amb> * doc/INSTALL.txt, doc/html/installation.html: Clarify that gzip support is required for some PBF files. Clarify that multi-threading, gzip and bzip2 are enabled by default at compilation time. 2014-02-02 [r1511] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Add some synonyms for "cycleway=opposite_lane". 2014-02-02 [r1510] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Handle "access=bus" like "access=psv". 2014-02-01 [r1509] Andrew M. Bishop <amb> * web/www/routino/maploader.js: Ensure that all Javascript files are loaded before calling the callbacks (better implementation). 2014-02-01 [r1508] Andrew M. Bishop <amb> * web/www/routino/maploader.js: Ensure that all Javascript files are loaded before calling the callbacks. 2014-02-01 [r1507] Andrew M. Bishop <amb> * web/www/routino/router.openlayers.js, web/www/routino/router.leaflet.js: Allow mouse clicks in the router result description to popup the details and not just mouseovers. Hopefully this should work better for touch devices. 2014-01-31 [r1506] Andrew M. Bishop <amb> * extras/find-fixme/web/www/fixme.leaflet.js, extras/find-fixme/web/www/fixme.openlayers.js: Handle the new format XML (using ''' instead of '''). 2014-01-31 [r1505] Andrew M. Bishop <amb> * src/xmlparse.c, src/output.c: Output HTML4 strict DTD compliant HTML (fix bug with using ''' instead of '''). 2014-01-30 [r1504] Andrew M. Bishop <amb> * doc/html/usage.html, doc/USAGE.txt, src/router.c: Add an option to calculate a circular route. 2014-01-30 [r1503] Andrew M. Bishop <amb> * doc/USAGE.txt, src/router.c, doc/html/usage.html: Add an option to calculate a route in the reverse order. 2014-01-30 [r1502] Andrew M. Bishop <amb> * src/types.h: Make the type conversion inline functions static so that compiling with -O0 still works. 2014-01-29 [r1501] Andrew M. Bishop <amb> * src/results.h, src/types.h, src/output.c, src/router.c, src/results.c: Refactor the code so that the Results data type has the start and finish waypoints defined within it and the array passed to the PrintRoute() function doesn't have holes in it. 2014-01-28 [r1500] Andrew M. Bishop <amb> * src/router.c: Remove ancient option that allowed latitude and longitude to be specified on the command line without the --lat<n> or --lon<n> options. 2014-01-28 [r1499] Andrew M. Bishop <amb> * web/www/routino/router.leaflet.js, extras/find-fixme/web/www/fixme.leaflet.js, web/www/routino/router.openlayers.js, web/www/routino/visualiser.leaflet.js, extras/find-fixme/web/www/fixme.openlayers.js, web/www/routino/visualiser.openlayers.js: Add close buttons to the popup boxes. 2014-01-27 [r1498] Andrew M. Bishop <amb> * web/www/routino/visualiser.html.en, src/profiles.c: Allow displaying the cyclebothways property in the visualiser. 2014-01-27 [r1497] Andrew M. Bishop <amb> * doc/html/tagging.html, src/types.c, xml/routino-tagging.xml, src/segments.c, xml/routino-profiles.xml, src/types.h, doc/TAGGING.txt, src/optimiser.c, src/osmparser.c: Detect the "cycleway=opposite_lane" tag and allow bicycles to travel in both directions along those highways. Based on parts of https://github.com/cgravier/routino-2.6-bikeopposite-elevation/commit/47d68b37f1ea0d2f967ea6aa1555991747491200 https://github.com/cgravier/routino-2.6-bikeopposite-elevation/commit/764832f2671e6f6d8176be65cea3992bd1a488d3 https://github.com/cgravier/routino-2.6-bikeopposite-elevation/commit/37af908880c045309fba1125c4d683f6925f7d25 by Christophe Collard. 2014-01-26 [r1496] Andrew M. Bishop <amb> * extras/find-fixme/web/www/fixme.leaflet.js, web/www/routino/router.openlayers.js, web/www/routino/visualiser.leaflet.js, extras/find-fixme/web/www/fixme.openlayers.js, web/www/routino/visualiser.openlayers.js, web/www/routino/router.leaflet.js: Fix bugs in displayStatus() function after jshint tidy-up. 2014-01-26 [r1495] Andrew M. Bishop <amb> * web/www/routino/router.leaflet.js, extras/find-fixme/web/www/fixme.leaflet.js, web/www/routino/visualiser.leaflet.js: Fix bug with Leaflet map startup. 2014-01-26 [r1494] Andrew M. Bishop <amb> * web/www/routino/mapprops.js: Reformat the whitespace. 2014-01-26 [r1493] Andrew M. Bishop <amb> * web/www/routino/router.leaflet.js, extras/find-fixme/web/www/fixme.leaflet.js, src/profiles.c, web/www/routino/router.openlayers.js, web/www/routino/visualiser.leaflet.js, web/www/routino/maploader.js, extras/find-fixme/web/www/fixme.openlayers.js, web/www/routino/page-elements.js, web/www/routino/visualiser.openlayers.js: Run jshint again and update some more in the JavaScript. 2014-01-25 [r1492] Andrew M. Bishop <amb> * doc/INSTALL.txt, doc/html/readme.html, web/www/leaflet/install.sh (added), doc/html/installation.html, web/www/leaflet (added), doc/README.txt: Add a script to download Leaflet Javascript and update documentation to match. 2014-01-25 [r1491] Andrew M. Bishop <amb> * extras/find-fixme/web/www/fixme.html, extras/find-fixme/Makefile, web/www/routino/router.html.de, web/www/routino/router.openlayers.js (added), web/www/routino/mapprops.js, web/www/routino/visualiser.leaflet.js (added), web/www/routino/maploader.js (added), extras/find-fixme/web/www/fixme.js (removed), web/www/routino/visualiser.openlayers.js (added), web/www/routino/router.html.en, web/www/routino/router.html.fr, web/www/routino/visualiser.html.en, extras/find-fixme/web/www/fixme.leaflet.js (added), web/www/routino/router.html.nl, web/www/routino/router.js (removed), extras/find-fixme/web/www, extras/find-fixme/web/www/fixme.openlayers.js (added), web/www/routino/visualiser.js (removed), web/www/routino/maplayout.css, web/www/routino/router.leaflet.js (added): Add the option to use Leaflet Javascript library instead of OpenLayers. Dynamically load the appropriate Javascript library based on mapprops.js. 2014-01-16 [r1489-1490] Andrew M. Bishop <amb> * src/superx.c: When merging segments and super-segments ensure that all super-segments are added to the merged list. * src/visualiser.c: When searching for nodes for the visualiser don't exceed the database lat/long limits. 2014-01-13 [r1488] Andrew M. Bishop <amb> * web/www/routino/router.html.en, web/www/routino/router.html.fr (added), web/www/routino/router.html.de, web/www/routino/router.html.nl, xml/routino-translations.xml: French language web page and routing translations based on https://github.com/ocivelo/routino-2.6-bikeopposite-elevation/commit/d426c7ff42e217ca5ace1244afc085c1433843c8 by Christophe Collard. 2014-01-11 [r1487] Andrew M. Bishop <amb> * web/www/routino/router.js, web/www/routino/search.pl, extras/find-fixme/web/www/fixme.js, web/www/routino/visualiser.js, web/www/routino/search.cgi: Change the search CGI to use latmin/max and lonmin/max instead of left, right, top, bottom. Change the Javascript to send the parameters to 5 decimal places only. 2014-01-11 [r1486] Andrew M. Bishop <amb> * extras/find-fixme/web/www/fixme.js, web/www/routino/visualiser.js, web/www/routino/router.html.en, extras/find-fixme/web/www/fixme.html, web/www/routino/router.html.de, web/www/routino/visualiser.html.en, web/www/routino/router.html.nl, web/www/routino/router.js: Update the web page URLs as things change rather than using on(focus|click) action handlers in the HTML that don't work very well. 2014-01-05 [r1485] Andrew M. Bishop <amb> * web/www/routino/maplayout-ie6-bugfixes.css (removed), web/www/routino/maplayout-ie7-bugfixes.css (removed), web/www/routino/router.html.en, extras/find-fixme/web/www/fixme.html, web/www/routino/router.html.de, web/www/routino/visualiser.html.en, web/www/routino/router.html.nl: Remove special support for IE6 and IE7 browsers. 2014-01-05 [r1484] Andrew M. Bishop <amb> * web/www/routino/router.js, extras/find-fixme/web/www/fixme.js, web/www/routino/visualiser.js: Replace the unescape() function with standard decodeURIComponent() function. 2014-01-03 [r1483] Andrew M. Bishop <amb> * web/www/routino/router.js, extras/find-fixme/web/www/fixme.js, web/www/routino/visualiser.js: Run 'jshint' to check for Javascript errors (fix the important ones). 2014-01-03 [r1480-1482] Andrew M. Bishop <amb> * web/www/routino/page-elements.js: Add a new function to hide and show sections (not currently used). * web/www/routino/page-elements.css: Make the tabs and hide/show targets a few pixels wider to make them easier to select. * web/www/routino/router.html.en, web/www/routino/router.html.de, web/www/routino/router.html.nl: Squeeze out a bit more space for the waypoint coords/name. 2014-01-02 [r1479] Andrew M. Bishop <amb> * src/relationsx.h: Fix error in function prototype (argument names switched). 2013-12-31 [r1477-1478] Andrew M. Bishop <amb> * extras/find-fixme/web/www/fixme.js, web/www/routino/visualiser.js, web/www/routino/router.js: Update Javascript to make map tile function more self-contained. * extras/find-fixme/web/www/fixme.html, web/www/routino/router.html.de, web/www/routino/visualiser.html.en, web/www/routino/router.html.nl, web/www/openlayers/routino.cfg, web/www/routino/router.html.en: Update HTML to make it work better on mobile devices (no zooming allowed). 2013-12-31 [r1476] Andrew M. Bishop <amb> * web/www/routino/router.html.en, web/www/routino/router.html.de, web/www/routino/visualiser.html.en, web/www/routino/router.html.nl: Update HTML ready for HTML5 but keeping HTML4.01 loose DTD (form action attribute must not be empty). 2013-12-31 [r1475] Andrew M. Bishop <amb> * web/www/routino/router.css, extras/find-fixme/web/www/fixme.html, web/www/routino/router.html.de, web/www/routino/visualiser.html.en, web/www/routino/router.html.nl, web/www/routino/router.js, extras/find-fixme/web/www/fixme.css, web/www/routino/visualiser.css, web/www/routino/router.html.en: Update HTML ready for HTML5 but keeping HTML4.01 loose DTD (align attribute and image tags with names are deprecated). 2013-12-31 [r1474] Andrew M. Bishop <amb> * doc/html/readme.html, doc/html/output.html, doc/html/tagging.html, doc/html/installation.html, doc/html/limits.html, doc/html/usage.html, doc/html/algorithm.html, doc/html/configuration.html, doc/html/index.html, doc/html/data.html: Update HTML ready for HTML5 but keeping HTML4.01 strict DTD (anchors with names are deprecated). 2013-12-30 [r1473] Andrew M. Bishop <amb> * doc/html/readme.html, doc/html/data.html: Update some URLs. 2013-12-30 [r1472] Andrew M. Bishop <amb> * web/www/routino/router.html.en, extras/find-fixme/web/www/fixme.html, web/www/routino/index.html, web/www/routino/router.html.de, web/www/routino/visualiser.html.en, web/www/routino/router.html.nl: Fix some changes that were missed from the last set of HTML updates. 2013-12-30 [r1471] Andrew M. Bishop <amb> * doc/html/installation.html: Fix links within the page. 2013-12-30 [r1469-1470] Andrew M. Bishop <amb> * extras/find-fixme/web/www/fixme.html, web/www/routino/index.html, web/www/routino/router.html.de, web/www/routino/visualiser.html.en, web/www/routino/router.html.nl, web/www/routino/router.html.en: Convert map pages to use lower case HTML tags and fix some HTML 4.01 strict DTD errors (but not converted to strict DTD due to use of target attribute on <a> tags). * doc/html/style.css, doc/html/usage.html, doc/html/algorithm.html, doc/html/configuration.html, doc/html/index.html, doc/html/data.html, extras/find-fixme/web/www/index.html, doc/html/readme.html, doc/html/output.html, doc/html/tagging.html, doc/html/installation.html, doc/html/limits.html: Convert documentation to HTML 4.01 strict DTD (from loose DTD). 2013-11-17 [r1468] Andrew M. Bishop <amb> * web/www/routino/router.cgi: Fix bug that did not allow more than 9 waypoints to be routed. 2013-11-13 [r1467] Andrew M. Bishop <amb> * src/osmparser.c: Refactor the length, weight and speed parsing functions a little bit and add some new formats. 2013-09-07 [r1466] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Add the same "access=foot" aliasing to nodes as previously existed for ways. 2013-08-02 [r1465] Andrew M. Bishop <amb> * doc/html/usage.html, doc/USAGE.txt, src/output.c, src/router.c: Add a '--output-stdout' option. 2013-07-31 [r1464] Andrew M. Bishop <amb> * xml/routino-translations.xml: Updated Dutch translations. 2013-07-18 [r1463] Andrew M. Bishop <amb> * src/types.h: Replace the macros for type conversion with inline functions where there is a risk of overflow for normal data. 2013-07-14 [r1462] Andrew M. Bishop <amb> * src/optimiser.c: Removal of some code intended to speed things up but that actually slows things down. 2013-07-12 [r1461] Andrew M. Bishop <amb> * doc/html/algorithm.html, doc/ALGORITHM.txt: Update the algorithm documentation with a description of the algorithm used for finding the shortest path. 2013-07-10 [r1460] Andrew M. Bishop <amb> * Makefile.conf: Add an option to enable debugging symbols. 2013-07-08 [r1459] Andrew M. Bishop <amb> * doc/USAGE.txt: Fix typo in documentation string. 2013-07-08 [r1458] Andrew M. Bishop <amb> * doc/html/usage.html, src/filedumper.c: Fix typo in documentation string. 2013-07-06 Andrew M. Bishop <amb> Version 2.6 released. 2013-07-06 [r1455-1456] Andrew M. Bishop <amb> * FILES: Add some new files for version 2.6. * doc/Makefile, extras/Makefile, src/test/Makefile, src/Makefile, extras/find-fixme/Makefile, Makefile, extras/tagmodifier/Makefile, xml/Makefile: Update some Makefiles for running 'make test' from a clean set of source code. 2013-07-06 [r1454] Andrew M. Bishop <amb> * doc/NEWS.txt, doc/README.txt, FILES, doc/html/readme.html: Update for version 2.6 release. 2013-07-04 [r1453] Andrew M. Bishop <amb> * doc/html/installation.html, doc/INSTALL.txt: Added a 'quick start' set of installation instructions. 2013-07-04 [r1452] Andrew M. Bishop <amb> * web/data/create.sh: Fix error with URL. 2013-07-03 [r1451] Andrew M. Bishop <amb> * src/planetsplitter.c: Revert r1268 which was applied between v2.5 and v2.5.1 and could be the cause of the slight slowdown in version 2.5.1. 2013-07-02 [r1450] Andrew M. Bishop <amb> * src/relationsx.c, src/errorlog.c, src/logerror.c, src/optimiser.c, src/waysx.c, src/xmlparse.c: Fix some comments. 2013-07-02 [r1449] Andrew M. Bishop <amb> * src/logging.c: Fix bug in time printed by --logtime option. 2013-07-02 [r1448] Andrew M. Bishop <amb> * src/segmentsx.c, src/prunex.c, src/segmentsx.h: Revert r1432 because even though it seemed like it should have been faster in slim mode it was actually much slower on the routino.org virtual server. 2013-07-01 [r1447] Andrew M. Bishop <amb> * src/output.c: Small optimisation for calling GetLatLong(). 2013-07-01 [r1446] Andrew M. Bishop <amb> * web/data/create.sh: Fix the URLs in the example download script. 2013-07-01 [r1445] Andrew M. Bishop <amb> * src/xmlparse.c, src/xmlparse.h: Forcing the xmlparse tags to be lower case adds a further speed-up (and was implicitly assumed already in other code). 2013-07-01 [r1444] Andrew M. Bishop <amb> * src/results.h, src/superx.c, src/results.c, src/queue.c: Re-use the Queue and Results data structure for all routes - saves a huge number of malloc/free calls (found by valgrind/callgrind). 2013-06-29 [r1443] Andrew M. Bishop <amb> * src/xmlparse.c: Optimise out most calls to strcasecmp the most-called C library functions (found by valgrind/callgrind). 2013-06-29 [r1442] Andrew M. Bishop <amb> * src/prunex.c: Close file and free memory (found by valgrind). 2013-06-29 [r1441] Andrew M. Bishop <amb> * src/sorting.c: Free allocated memory (found by valgrind). 2013-06-29 [r1440] Andrew M. Bishop <amb> * src/logerror.c: Avoid writing uninitialised to disk (found by valgrind). 2013-06-29 [r1439] Andrew M. Bishop <amb> * extras/find-fixme/web/www/fixme.js, extras/find-fixme/web/www/fixme.html: Update highlight size and help text as was done with visualiser. 2013-06-29 [r1438] Andrew M. Bishop <amb> * web/www/routino/router.html.en, web/www/routino/router.html.de, web/www/routino/visualiser.html.en, web/www/routino/router.html.nl: Add some help to the visualiser web page and slightly reformatted the help on the router web pages. 2013-06-29 [r1435-1437] Andrew M. Bishop <amb> * web/www/routino/visualiser.js: Increase the size of the nodes in the super-nodes/segments display to make them clickable. * web/www/routino/visualiser.cgi: Increase the maximum size that will be returned by CGI. * web/www/routino/visualiser.js: Fix bug with visualiser failing to run failure callback in case of CGI error. 2013-06-29 [r1433-1434] Andrew M. Bishop <amb> * web/www/routino/visualiser.js: Make the node highlights smaller (to match the segment highlight width). * src/filedumper.c: Print the fake XML for the visualiser with special routino:* top-level tag names. 2013-06-28 [r1431-1432] Andrew M. Bishop <amb> * src/segmentsx.c, src/prunex.c, src/segmentsx.h: Keep the next2 pointer in memory while pruning rather than in the segmentx object. * src/prunex.h, src/planetsplitter.c, src/segmentsx.c, src/prunex.c, src/segmentsx.h, doc/DATALIFE.txt: Revert the last three changes because r1430 didn't work and r1428+r1429 didn't give any speed advantage and was possibly marginally slower. 2013-06-28 [r1430] Andrew M. Bishop <amb> * src/segmentsx.c: The IndexSegments() function can now process the file in forward order rather than reverse. 2013-06-27 [r1429] Andrew M. Bishop <amb> * src/segmentsx.c: Fixed error with last checkin. 2013-06-27 [r1428] Andrew M. Bishop <amb> * src/segmentsx.c, src/prunex.c, src/segmentsx.h, doc/DATALIFE.txt, src/prunex.h, src/planetsplitter.c: Put the next1 pointer in the segmentx object rather than in-memory. 2013-06-27 [r1427] Andrew M. Bishop <amb> * doc/DATALIFE.txt, src/relationsx.c, src/planetsplitter.c, src/waysx.c, src/relationsx.h, src/segmentsx.c, src/nodesx.c, src/segmentsx.h: Revert the last change because, paradoxically, it was faster to create the database (as expected) but slower to route. 2013-06-26 [r1426] Andrew M. Bishop <amb> * doc/DATALIFE.txt, src/relationsx.c, src/planetsplitter.c, src/waysx.c, src/relationsx.h, src/segmentsx.c, src/nodesx.c, src/segmentsx.h: Sort the nodes geographically at the beginning rather than at the end. 2013-06-26 [r1425] Andrew M. Bishop <amb> * doc/html/installation.html, doc/INSTALL.txt: Add some more details about configuring Apache. 2013-06-25 [r1424] Andrew M. Bishop <amb> * src/relationsx.c, src/planetsplitter.c, src/nodesx.c, doc/DATALIFE.txt: Remove one usage of the nodesx->gdata array. Remove one call of the IndexSegments() function. Update the DATALIFE.txt file with both and the previous changes to mapped files and add a new column for segmentx->next2. 2013-06-25 [r1423] Andrew M. Bishop <amb> * src/superx.c: Change the ChooseSuperNodes() and MergeSuperSegments() functions to read through the file instead of mapping the data to help slim mode (since the nodes in the first case and segments in the second case are read sequentially). 2013-06-24 [r1422] Andrew M. Bishop <amb> * src/segmentsx.c: Change the IndexSegments() function so that in slim mode larger chunks are read from the file (since it reads sequentially but in reverse through the file). 2013-06-24 [r1420-1421] Andrew M. Bishop <amb> * src/files.c: Increase the buffer to 4kB from 1kB. * src/osmo5mparse.c, src/waysx.c, src/nodesx.c, src/osmpbfparse.c, src/prunex.c, src/superx.c, src/relationsx.c: Move some printf_first() messages to the front of the function and printf_last() function to the end of the function. 2013-06-23 [r1419] Andrew M. Bishop <amb> * src/ways.h: Fix error in slim mode WayName() function. 2013-06-22 [r1412-1418] Andrew M. Bishop <amb> * src/files.c, src/files.h: Make the changes required to handle the new function names from the last few checkins. * src/prunex.c: Use SlimMapFile(), SlimUnmapFile(), SlimFetch() and SlimReplace() [see earlier log message] and also refactor the code so that the additional ways are placed in a separate file using the Slim*() functions rather than being appended to the open (or mapped) way file. * src/ways.h: Use SlimFetch() instead of SeekReadFileUnbuffered() [see previous log message] and also refactor the code for reading the way name from file. * src/errorlog.h, src/relations.c, src/ways.c, src/segments.c, src/cache.h, src/nodes.c, src/errorlog.c: Use SlimMapFile() and SlimUnmapFile() [see previous log message] and also use SlimFetch() instead of SeekReadFileUnbuffered() and SlimReplace() instead of SeekWriteFileUnbuffered() to hide the internals of the slim mode. * src/superx.c, src/relationsx.c, src/waysx.c, src/segmentsx.c, src/errorlogx.c: Use SlimMapFile() and SlimUnmapFile() as the function names for the slim mode of operation to open and close the files (to hide the fact that they are files being opened for reading or writing unbuffered). * src/errorlogx.c: Use buffered file accesses for appending the error strings to the binary file. * src/planetsplitter.c, src/tagging.c, src/translations.c, extras/find-fixme/fixme-finder.c, extras/tagmodifier/tagmodifier.c, src/profiles.c: Create simple OpenFile() and CloseFile() functions for those files which are used by the parsers (they just call open() and close() internally). 2013-06-22 [r1411] Andrew M. Bishop <amb> * src/logerror.c: Fix for closing binary error file that only shows up after the recent file function changes. 2013-06-21 [r1410] Andrew M. Bishop <amb> * src/files.c, extras/tagmodifier/tagmodifier.c, src/files.h, src/cache.h, src/nodes.c, src/planetsplitter.c, src/waysx.c, src/segmentsx.c, src/tagging.c, src/prunex.c, src/translations.c, extras/find-fixme/fixme-finder.c, src/errorlogx.c, src/profiles.c, src/ways.c, src/filedumperx.c, src/segments.c, src/superx.c, src/ways.h, src/relationsx.c, src/errorlog.c, src/errorlog.h, src/relations.c: Rename the functions for unbuffered file access to make this clear. 2013-06-21 [r1409] Andrew M. Bishop <amb> * src/waysx.c, src/segmentsx.c, src/nodesx.c, src/errorlogx.c, src/sorting.c, src/relationsx.c: Use the new buffered functions in the filesort functions. 2013-06-21 [r1407-1408] Andrew M. Bishop <amb> * src/segmentsx.c, src/nodesx.c, src/prunex.c, src/errorlogx.c, src/filedumperx.c, src/relationsx.c, src/logerror.c, src/waysx.c: Use the new functions for buffering while reading when looping through files other than the ones already done that use the FILESORT_VARINT method of storing data. * src/files.c, src/files.h: Add a new function for seeking in one of the buffered files. 2013-06-20 [r1406] Andrew M. Bishop <amb> * src/errorlogx.c, src/files.h, src/relationsx.c, src/waysx.c, src/nodesx.c, src/files.c: Rename the function that skips forward in a buffered file to avoid confusion. 2013-06-20 [r1404-1405] Andrew M. Bishop <amb> * src/relationsx.c, src/waysx.c, src/nodesx.c, src/errorlogx.c, src/filedumperx.c: Use the new functions for buffering while reading when looping through files that use the FILESORT_VARINT method of storing data. * src/files.c, src/files.h: Add new functions for buffering when reading and also allow seeking in one of these buffered files. 2013-06-20 [r1403] Andrew M. Bishop <amb> * src/files.c: Fix the non-buffered close function assertion and re-factor the code for buffered reading (although not used yet). 2013-06-19 [r1401-1402] Andrew M. Bishop <amb> * src/nodesx.c, src/relationsx.c, src/waysx.c, src/segmentsx.c: Use the buffered write functions when creating the nodes, segments, ways and relation raw files. * src/files.c, src/files.h: Add functions to read and write file descriptors with buffering. 2013-06-19 [r1400] Andrew M. Bishop <amb> * extras/find-fixme/fixme-finder.c, src/logging.c, src/planetsplitter.c: Bug fix for the change to the --logtime option functions. 2013-06-19 [r1399] Andrew M. Bishop <amb> * src/files.h: Split the function prototypes into two groups for the ones in files.c and the inline ones in files.h. 2013-06-17 [r1398] Andrew M. Bishop <amb> * extras/find-fixme/fixme-finder.c, src/logging.c, src/planetsplitter.c, src/logging.h: Change the --logtime internals so that programs don't need to store their start time themselves. 2013-06-15 [r1397] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Add some more barriers which are too generic to warn about and fix spelling of motorcycle_barrier. 2013-06-13 [r1396] Andrew M. Bishop <amb> * doc/html/usage.html, doc/USAGE.txt: Document that --errorlog and --keep together will create the binary database of errors. 2013-06-13 [r1395] Andrew M. Bishop <amb> * src/errorlogx.c, src/logerror.c, src/logging.h: Separate out the type and id parts of the errorlogobject. 2013-06-12 [r1394] Andrew M. Bishop <amb> * web/www/routino/mapprops.js, doc/html/installation.html, extras/find-fixme/web/www/fixme.js, web/www/routino/visualiser.js, doc/INSTALL.txt: Add links to the OpenStreetMap browse URLs from the error logs. 2013-06-11 [r1393] Andrew M. Bishop <amb> * extras/find-fixme/web/www/fixme.js, extras/find-fixme/web/www/fixme.cgi, extras/find-fixme/web/www/fixme.html: Put the data tab back and display the statistics in it. 2013-06-10 [r1391-1392] Andrew M. Bishop <amb> * src/errorlogx.c: Fix typo in program logging. * doc/html/usage.html, doc/USAGE.txt: Fix typo in documentation. 2013-06-06 [r1387-1390] Andrew M. Bishop <amb> * src/Makefile: Tidy up the compilation and linking flags again. * Makefile.conf: Tidy up the compilation and linking flags again. * src/test/Makefile, src/test/is-fast-math.c (added), src/test, src/test/start-1-finish.sh, src/test/a-b-c.sh, src/test/a-b.sh: When compiled with -ffast-math don't expect the results to match exactly, display the differences. * src/test/only-split.sh: Remove a debugging message. 2013-06-06 [r1386] Andrew M. Bishop <amb> * src/test/expected/dead-ends-WP08.txt, src/test/expected/dead-ends-WP09.txt, src/test/dead-ends.osm, src/test/expected/node-restrictions-WP08.txt, src/test/expected/dead-ends-WP01.txt, src/test/expected/dead-ends-WP10.txt, src/test/expected/dead-ends-WP02.txt, src/test/expected/dead-ends-WP11.txt, src/test/expected/dead-ends-WP03.txt, src/test/expected/dead-ends-WP04.txt, src/test/expected/dead-ends-WP05.txt, src/test/expected/dead-ends-WP06.txt, src/test/expected/dead-ends-WP07.txt: Change test cases so that they don't show differences due to pruning or the last checkin for divide by zero which changed behaviour in trivial case. 2013-06-06 [r1385] Andrew M. Bishop <amb> * src/prunex.c, src/nodes.c, src/fakes.c: Fix some code that could, potentially, have given a divide by zero and which therefore behaves differently with FPU and -ffast-math compilation options. 2013-06-06 [r1384] Andrew M. Bishop <amb> * src/translations.c: Fix bug if using the built-in translations for GPX route files (present since v2.0). Make a few other translations match the ones in the XML file. 2013-06-05 [r1383] Andrew M. Bishop <amb> * doc/DATALIFE.txt, src/nodesx.c: Update the node id just before sorting geographically rather than relying on the pruning process to do it. 2013-06-05 [r1381-1382] Andrew M. Bishop <amb> * web/www/routino/index.html, doc/Makefile: Copy the style.css into the web page documentation directory, fix the link to it from index.html. * extras/find-fixme/Makefile, extras/find-fixme/web/www, extras/find-fixme/web/www/paths.pl, extras/find-fixme/web/www/index.html (added), extras/find-fixme/web/www/fixme.html: Add an index.html page to redirect to fixme.html, copy in a style.css file, slightly change the web page titles. 2013-06-04 [r1380] Andrew M. Bishop <amb> * src/waysx.c, src/waysx.h, src/prunex.c: Remember what types of transports we have so that we don't spend time pruning for transport types we don't have. 2013-06-04 [r1379] Andrew M. Bishop <amb> * src/tagging.c: Unconditionally execute the tagging rules within '<if> ... </if>' even if there are no input tags to match against the match-all rule. 2013-06-03 [r1377-1378] Andrew M. Bishop <amb> * extras/find-fixme/fixme-dumper.c, extras/find-fixme/README.txt: Reinstate the --statistics option. * extras/find-fixme/web/www/fixme.js: Nicely format the item tag information. 2013-06-03 [r1374-1376] Andrew M. Bishop <amb> * extras/find-fixme/fixme.xml, extras/find-fixme/README.txt: Make it easier to select arbitrary tags and store them. * extras/find-fixme/osmparser.c: Store a whole XML-like item in the log file. * src/tagging.c, src/tagging.h: Add a new function to convert a TagList into an HTML-like string. 2013-06-03 [r1373] Andrew M. Bishop <amb> * Makefile.conf: Use the -ffast-math compilation option (trivial changes to estimated journey times and distances). 2013-06-03 [r1371-1372] Andrew M. Bishop <amb> * web/bin: Don't ignore tagmodifier (not put here any more). * extras/find-fixme/Makefile, extras/tagmodifier/Makefile: Compile all of src directory before starting here. 2013-06-03 [r1370] Andrew M. Bishop <amb> * src/osmparser.c, src/relationsx.h, extras/find-fixme/osmparser.c, src/errorlogx.c, src/relationsx.c: Write relation nodes into the file as well as ways and relations. 2013-06-01 [r1367-1369] Andrew M. Bishop <amb> * extras/errorlog/README.txt: Make the README files more consistent with each other in style. * extras/README.txt, extras/plot-time/README.txt, extras/tagmodifier/README.txt: Make the README files more consistent with each other in style. * extras/find-fixme/fixme-dumper.c (added), extras/find-fixme/web/www/fixme.js (added), extras/find-fixme/web/bin (added), extras/find-fixme/web/data (added), extras/find-fixme/web/www/paths.pl (added), extras/find-fixme/osmparser.c (added), extras/find-fixme/fixme-finder.c (added), extras/find-fixme/web/www/fixme.css (added), extras/find-fixme (added), extras/find-fixme/web/www (added), extras/find-fixme/fixme.xml (added), extras/find-fixme/web/www/fixme.cgi (added), extras/find-fixme/README.txt (added), extras/find-fixme/web/www/fixme.html (added), extras/find-fixme/web (added), extras/find-fixme/Makefile (added): A tool to search an OSM file for "fixme" tags to create a database and display them on an interactive map. 2013-06-01 [r1366] Andrew M. Bishop <amb> * src/planetsplitter.c: Fix minor error with usage message. 2013-06-01 [r1363-1365] Andrew M. Bishop <amb> * extras/tagmodifier/README.txt, extras/tagmodifier/Makefile: Compile all main Routino files before trying to build tagmodifier. Small changes to the README.txt file. * src/Makefile: Use the WEBBINDIR variable rather than a hard-coded path. * doc/Makefile: Make the Makefile clearer with respect to the copying of HTML files to the web directory. 2013-06-01 [r1361-1362] Andrew M. Bishop <amb> * src/errorlogx.h, src/planetsplitter.c, src/errorlogx.c: Make the functions for processing error logs more like the ones for nodes, ways and relations. * src/waysx.c, src/nodesx.c, src/relationsx.c: Store the number of kept nodes, ways and relations when first sorted. 2013-06-01 [r1360] Andrew M. Bishop <amb> * web/www/routino/visualiser.cgi: Return an error if neither type of recognised request was made. 2013-05-31 [r1359] Andrew M. Bishop <amb> * src/planetsplitter.c, src/router.c: Use exit(EXIT_FAILURE) instead of return(1). 2013-05-31 [r1357-1358] Andrew M. Bishop <amb> * extras/README.txt, extras/plot-time/README.txt (added), extras/plot-time/plot-planetsplitter-time.pl (added), extras/plot-time (added): Add a Perl script that allows plotting a graph of the time taken to run planetsplitter. * extras/errorlog/README.txt (added): Add a README file for the summarise-log.pl script. 2013-05-31 [r1356] Andrew M. Bishop <amb> * src/osmo5mparse.c, src/osmxmlparse.c, src/osmparser.c, src/osmparser.h, src/osmpbfparse.c: Move some functions about so that osmparser.c can be replaced for other types of parsing. 2013-05-31 [r1355] Andrew M. Bishop <amb> * src/segmentsx.c, src/planetsplitter.c, src/waysx.c: Small changes to comments and log messages. 2013-05-30 [r1354] Andrew M. Bishop <amb> * src/segmentsx.c: Don't de-duplicate when sorting segments (now done in ProcessSegments() function). 2013-05-30 [r1353] Andrew M. Bishop <amb> * src/relationsx.c, src/planetsplitter.c, src/relationsx.h, doc/DATALIFE.txt: Merge the ProcessTurnRelations1() and ProcessTurnRelations2() functions into a single one now that segment processing is already complete. 2013-05-30 [r1352] Andrew M. Bishop <amb> * doc/DATALIFE.txt, src/planetsplitter.c: Move the first IndexSegments() function call earlier in the sequence. 2013-05-30 [r1351] Andrew M. Bishop <amb> * src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, doc/DATALIFE.txt: Merge the RemoveBadSegments() and MeasureSegments() functions. Saves one read/write iteration through the segments file. 2013-05-30 [r1350] Andrew M. Bishop <amb> * src/planetsplitter.c, src/segmentsx.c, src/nodesx.c, src/segmentsx.h, doc/DATALIFE.txt, src/nodesx.h, src/relationsx.c: Delete the non-highway nodes by searching for them in the ways rather than marking them when processing the segments. 2013-05-29 [r1349] Andrew M. Bishop <amb> * doc/DATALIFE.txt, extras/errorlog/summarise-log.pl, src/relationsx.c, src/planetsplitter.c, src/waysx.c, src/segmentsx.c, src/nodesx.c, src/waysx.h, src/segmentsx.h: Simplify the segments by using the node and way index instead of node and way id which avoids lots of IndexNodeX() lookups. Move some other code around to cope with it. 2013-05-27 [r1348] Andrew M. Bishop <amb> * src/planetsplitter.c, src/waysx.c, src/waysx.h, doc/DATALIFE.txt: Simplify the sorting of the way names (only sort the names, not all the ways twice), merge the generating of segments and separation of way names. 2013-05-27 [r1347] Andrew M. Bishop <amb> * src/osmparser.c, src/waysx.c, src/segmentsx.c: Redistributed error log messages from osmparser way handling. 2013-05-26 [r1346] Andrew M. Bishop <amb> * extras/errorlog/summarise-log.pl (added), extras/errorlog (added), extras/README.txt, web/bin/summarise-log.pl (removed): Move the summarise-log.pl script into the extras directory. 2013-05-26 [r1345] Andrew M. Bishop <amb> * extras/tagmodifier/README.txt (added), extras/tagmodifier/tagmodifier.c (added), extras/tagmodifier/Makefile (added), doc/html/installation.html, extras/tagmodifier (added), doc/html/usage.html, extras/README.txt, src/tagmodifier.c (removed), src/Makefile, src, doc/USAGE.txt, doc/INSTALL.txt: Move the tagmodifier program into the extras directory. 2013-05-26 [r1344] Andrew M. Bishop <amb> * extras (added), extras/README.txt (added), extras/Makefile (added): Create a new directory for extra (non-essential) programs 2013-05-26 [r1343] Andrew M. Bishop <amb> * doc/Makefile, src/test/Makefile, src/Makefile, src/xml/Makefile, doc/INSTALL.txt, Makefile, doc/html/installation.html, xml/Makefile, Makefile.conf (added): Re-organise the Makefiles so that all configuration information is one of them (Makefile.conf at the top level) rather than being spread between them. 2013-05-25 [r1342] Andrew M. Bishop <amb> * src/errorlogx.c, src/relationsx.c, src/relationsx.h: Rename the route relation structure parameters (r* -> rr*) to match the turn relation parameter names (tr*). 2013-05-25 [r1341] Andrew M. Bishop <amb> * src/errorlogx.c, src/relationsx.c, src/relationsx.h: Finished allocating coordinates to error logs, nodes in preference to ways in preference to relations. 2013-05-23 [r1340] Andrew M. Bishop <amb> * doc/USAGE.txt, src/filedumperx.c, doc/html/usage.html: There are no segments stored after parsing so cannot be dumper by filedumperx. 2013-05-23 [r1339] Andrew M. Bishop <amb> * src/superx.c, src/types.h, src/planetsplitter.c, src/osmparser.c, src/waysx.c, src/segmentsx.c, src/osmparser.h, src/waysx.h, src/segmentsx.h, doc/DATALIFE.txt, src/types.c: Don't create segments when parsing input file but create the segments later using the nodes stored in the ways file. This makes applying changes simpler (segments file is not kept with the --keep option) and handling changed ways is simpler than changed segments. 2013-05-22 [r1338] Andrew M. Bishop <amb> * src/osmparser.c, src/waysx.c, src/waysx.h, src/errorlogx.c, src/filedumperx.c: Store the list of nodes in the raw ways file for use by the errorlog functions. 2013-05-21 [r1337] Andrew M. Bishop <amb> * src/sorting.c: Don't waste memory in filesort_vary() when the pre-sort function drops the data. 2013-05-20 [r1336] Andrew M. Bishop <amb> * src/osmparser.c: Store more logerror information even for items that are discarded to allow them to be located geographically. 2013-05-20 [r1335] Andrew M. Bishop <amb> * src/xml/Makefile: Update CLFLAGS and LDFLAGS. 2013-05-18 [r1334] Andrew M. Bishop <amb> * web/www/routino/router.html.en, doc/INSTALL.txt, web/www/routino/router.html.de, web/www/routino/visualiser.html.en, web/www/routino/router.html.nl, web/www/routino/router.js, web/www/routino/mapprops.js, doc/html/installation.html, web/www/routino/visualiser.js: Make the OSM editor URL be configurable in the mapprops.js file. 2013-05-18 [r1333] Andrew M. Bishop <amb> * web/www/openlayers/routino.cfg: Need to include OpenLayers/Control/SelectFeature.js when building OpenLayers.js. 2013-05-18 [r1332] Andrew M. Bishop <amb> * web/www/routino/visualiser.css, web/www/routino/visualiser.js: Put the popup colours in the Javascript, not CSS. Set the popup font (fixed) and size (smaller). 2013-05-18 [r1330-1331] Andrew M. Bishop <amb> * src/visualiser.c: Remove unused header file. * src/filedumper.c, doc/USAGE.txt, web/www/routino/visualiser.cgi, doc/html/usage.html: Create specific HTML formatted output from filedumper for the visualiser web page. 2013-05-18 [r1329] Andrew M. Bishop <amb> * web/www/routino/visualiser.cgi, src/visualiser.c, web/www/routino/visualiser.js: Add the ability to select any item displayed in the visualiser and display information about it in a popup. 2013-05-18 [r1327-1328] Andrew M. Bishop <amb> * web/www/routino/router.js, web/www/routino/visualiser.js: Don't display the marker layers in the layer switcher control. * web/www/routino/visualiser.js: Store the feature attributes using the feature.attributes object. 2013-05-18 [r1326] Andrew M. Bishop <amb> * web/www/routino/visualiser.js, web/www/routino/visualiser.css: Change to using a popup like in the router and highlight the selected item when the popup is displayed. 2013-05-17 [r1324-1325] Andrew M. Bishop <amb> * web/www/routino/visualiser.html.en: Selecting the radio buttons updates the display. * web/www/routino/router.html.de, web/www/routino/router.html.nl, web/www/routino/router.html.en: Added some missing ';' to the Javascript actions in the HTML. 2013-05-17 [r1323] Andrew M. Bishop <amb> * doc/html/usage.html, doc/USAGE.txt: Add the documentation for the change to the filedumper program. 2013-05-17 [r1322] Andrew M. Bishop <amb> * src/visualiser.c: Limit the error log outputs to the geographical ones and make the strings HTML safe. 2013-05-17 [r1321] Andrew M. Bishop <amb> * src/errorlog.h, web/www/routino/visualiser.html.en, src/errorlogx.c, src/visualiser.c, web/www/routino/visualiser.js, src/planetsplitter.c, src/errorlog.c, src/visualiser.h, src/Makefile, src/filedumper.c, web/www/routino/visualiser.cgi: Allow dumping error logs from filedumper. 2013-05-14 [r1320] Andrew M. Bishop <amb> * src/errorlogx.c, src/errorlogx.h, src/errorlog.c (added), src/errorlog.h (added): Copy errorlogx.h to errorlog.h and create errorlog.c so that they mirror the nodes.h and nodes.c filenames. Add functions to read in a set of error logs from a file. 2013-05-13 [r1319] Andrew M. Bishop <amb> * src/logerror.c, src/Makefile, src/logerror.h (removed), src/errorlogx.c (added), src/logerrorx.c (removed), src/errorlogx.h (added), src/planetsplitter.c: Rename logerrorx.c to errorlogx.c and logerrorx.h to errorlogx.h so that they mirror the nodesx.c and nodesx.h filenames. 2013-05-13 [r1318] Andrew M. Bishop <amb> * src/tagmodifier.c, src/logging.h, src/osmparser.c, src/segmentsx.c, src/logerror.h, src/tagging.c, src/relationsx.c: Move the logerror function prototypes back into logging.h and remove the logerror.h header file from most source files again. 2013-05-12 [r1317] Andrew M. Bishop <amb> * src/logerror.c, src/waysx.c, src/Makefile, src/relationsx.h, src/segmentsx.c, src/logerror.h, src/nodesx.c, src/waysx.h, src/segmentsx.h, src/logerrorx.c (added), src/nodesx.h, src/relationsx.c, src/planetsplitter.c: Add functions to process the binary error log file and convert it into a geographically searchable database. 2013-05-11 [r1314] Andrew M. Bishop <amb> * src/planetsplitter.c: Rename the Nodes, Segments, Ways and Relations variables to avoid confusion with types of the same name. 2013-05-11 [r1313] Andrew M. Bishop <amb> * src/logerror.h (added), src/tagging.c, src/logging.c, src/relationsx.c, src/planetsplitter.c, src/tagmodifier.c, src/logerror.c (added), src/logging.h, src/osmparser.c, src/Makefile, src/segmentsx.c: Create a binary log file that contains the node, way and relation id and a link to the error message for easy parsing. 2013-05-11 [r1312] Andrew M. Bishop <amb> * src/ways.c, src/relations.h, src/segments.c, src/nodes.c, src/ways.h, src/segments.h, src/nodes.h, src/relations.c, src/router.c: Add functions to destroy the node/segment/way/relation lists and don't call them from the end of the router by default. 2013-05-10 [r1308-1311] Andrew M. Bishop <amb> * src/Makefile: Enable -Wextra compilation option (but not -Wunused-parameter option) by default. * src/sorting.c: Change data type from signed to unsigned (pedantic compiler warning). * src/results.c: Change data value from signed to unsigned (pedantic compiler warning). * src/waysx.h, src/segmentsx.h, src/nodesx.h: Make no-op macros look like real statements. 2013-05-10 [r1305-1307] Andrew M. Bishop <amb> * src/results.c: Change data value from signed to unsigned (pedantic compiler warning). * src/prunex.c: Change data value from unsigned to signed (pedantic compiler warning). * src/filedumper.c: Remove always true condition (pedantic compiler warning). 2013-05-10 [r1304] Andrew M. Bishop <amb> * src/queue.c: Small change to algorithm to match sorting.c. 2013-05-09 [r1302-1303] Andrew M. Bishop <amb> * src/relations.c: Change data value from unsigned to signed (pedantic compiler warning). * src/planetsplitter.c, src/waysx.c: Change datatype from signed to unsigned (pedantic compiler warning). 2013-05-09 [r1299-1301] Andrew M. Bishop <amb> * src/osmpbfparse.c, src/osmo5mparse.c, src/xmlparse.c: Change datatype from signed to unsigned (pedantic compiler warning). Use inttypes.h printf formatting for unsigned long long data type. * src/files.h: Cast data to signed before comparison (pedantic compiler warning). * src/filedumperx.c: Change datatype from signed to unsigned (pedantic compiler warning). 2013-05-07 [r1298] Andrew M. Bishop <amb> * src/nodes.c: Change the GetLatLong() function to have one binary search instead of two. 2013-05-07 [r1297] Andrew M. Bishop <amb> * src/cache.h, src/nodes.c, src/relationsx.c, src/waysx.c, src/segmentsx.c, src/nodesx.c, src/waysx.h, src/prunex.c, src/segmentsx.h, src/nodesx.h, src/superx.c: Add cache functions for NodesX, SegmentsX and WaysX to speed up the planetsplitter in slim mode. 2013-05-07 [r1296] Andrew M. Bishop <amb> * src/cache.c (removed), src/relations.h, src/cache.h, src/ways.h, src/segments.h, src/Makefile, src/nodes.h: Move the cache functions out of cache.c and into each data type's header file as inline functions. 2013-05-03 [r1294-1295] Andrew M. Bishop <amb> * src/cache.c: Revert to the round-robin cache eviction algorithm. * src/cache.c: Implement an LRU eviction algorithm for the cached objects - it's slower, but code kept for possible future re-use. 2013-05-03 [r1293] Andrew M. Bishop <amb> * src/cache.c, src/relations.h, src/cache.h, src/ways.h, src/segments.h, src/nodes.h: Tidy up the code for the last check-in and use macros to allow replication of the functions for each type. 2013-05-03 [r1292] Andrew M. Bishop <amb> * src/segments.h, src/Makefile, src/nodes.h, src/relations.c, src/router.c, src/cache.c (added), src/ways.c, src/relations.h, src/segments.c, src/cache.h (added), src/nodes.c, src/ways.h: Add node, segment, way and turn relation cache for slim mode. Approx 40% speed-up for router. 2013-05-01 [r1291] Andrew M. Bishop <amb> * src/output.c, src/router.c, src/segments.c, src/visualiser.c, src/nodes.c, src/fakes.c, src/optimiser.c, src/filedumper.c, src/nodes.h: The GetLatLong function takes a pointer to the node as an argument - must be an optimisation for slim mode if not normal mode. 2013-05-01 [r1290] Andrew M. Bishop <amb> * src/results.c, src/queue.c, src/results.h: Move the queue score back into the results structure since it is quicker but uses slightly more memory. 2013-05-01 [r1289] Andrew M. Bishop <amb> * src/queue.c, src/results.h, src/superx.c, src/optimiser.c, src/results.c: Try to speed up the priority queue by allocating less memory and storing the score in the queue rather than in the result. 2013-04-28 [r1288] Andrew M. Bishop <amb> * src/results.c: Set pointers to NULL when resizing the hash table. 2013-04-27 [r1287] Andrew M. Bishop <amb> * src/superx.c: Update for change to NewResultsList() function. 2013-04-27 [r1286] Andrew M. Bishop <amb> * src/optimiser.c, src/results.c, src/results.h: Increase the starting number of bins to allow more results to be stored before resizing. 2013-04-27 [r1285] Andrew M. Bishop <amb> * src/results.c, src/results.h: Use a linked list to store the results in each bin rather than pre-allocated pointers. 2013-04-27 [r1283-1284] Andrew M. Bishop <amb> * src/results.c: Improve the hash function to avoid node/segment correlations in some geographic areas. * src/router.c: De-allocate the final routes at the end. 2013-04-27 [r1282] Andrew M. Bishop <amb> * src/results.c, src/results.h: Increase the allowed number of collisions as the number of bins increases. 2013-04-27 [r1281] Andrew M. Bishop <amb> * src/results.h, src/optimiser.c, src/router.c, src/results.c: Remove the FindResult1 function which allows hashing to be performed on a combination of node and segment rather than just node. 2013-04-26 [r1280] Andrew M. Bishop <amb> * src/results.c, src/results.h: Force a hard limit on the number of hash collisions. 2013-04-20 Andrew M. Bishop <amb> Version 2.5.1 released 2013-04-20 [r1279] Andrew M. Bishop <amb> * doc/html/readme.html, doc/NEWS.txt, FILES: Updated for version 2.5.1 release. 2013-04-18 [r1278] Andrew M. Bishop <amb> * src/router.c, src/optimiser.c, src/functions.h: Fix a bug where the shortest route crossing super-nodes requires two U-turns and is therefore impossible to compute even though an obvious shorter route without crossing super-nodes exists (but cannot be taken until the super-node route is fully tested). Requires quite a major change in router handling of this special case. 2013-04-18 [r1277] Andrew M. Bishop <amb> * src/xmlparse.c: Fix bug with handling UTF-8 characters that are four bytes long (it didn't since v2.5). 2013-04-17 [r1276] Andrew M. Bishop <amb> * src/optimiser.c: Fix bug that corrupts the combined route score when combining the route (only important if comparing non-super-node route with super-node route). 2013-04-15 [r1275] Andrew M. Bishop <amb> * web/www/openlayers/install.sh: Default to downloading openlayers 2.12. 2013-04-13 [r1274] Andrew M. Bishop <amb> * doc/INSTALL.txt, doc/html/installation.html: Add a note about the *-slim executables to the installation section. 2013-04-13 [r1273] Andrew M. Bishop <amb> * src/tagmodifier.c: Use single quotes rather than double quotes when writing out the XML for similarity with filedumper. 2013-04-13 [r1272] Andrew M. Bishop <amb> * src/xmlparse.c: Fix XML character quoting for characters within the 7-bit printable ASCII range (bug reported by Dirk Eversmann). 2013-04-13 [1271] Andrew M. Bishop <amb> * web/www/routino/router.js, web/www/routino/visualiser.js: Fix the Javascript so that it works with OpenLayers version 2.11 again (bug reported by Dirk Eversmann). 2013-04-13 [r1269-1270] Andrew M. Bishop <amb> * doc/html/readme.html, doc/README.txt: Remove some differences between the HTML and text versions of the documents. * doc/INSTALL.txt, doc/html/installation.html: Fix some errors in the installation documents and improve the description of pre-requisites and compilation (prompted by bug report from Dirk Eversmann). 2013-03-24 [r1268] Andrew M. Bishop <amb> * src/planetsplitter.c: Prune the straight highways after removing the isolated sections and short segments rather than before. 2013-03-19 [r1267] Andrew M. Bishop <amb> * doc/html/output.html, doc/html/tagging.html, doc/html/installation.html, doc/html/limits.html, doc/README.txt, doc/html/usage.html, doc/html/algorithm.html, doc/html/configuration.html, doc/html/index.html, doc/html/data.html, doc/html/readme.html, web/www/routino/index.html: Remove e-mail addresses and replace with links to website. 2013-03-03 [r1266] Andrew M. Bishop <amb> * src/prunex.c: Improve the pruning of straight highways (more likely to remove larger sections). 2013-03-03 [r1265] Andrew M. Bishop <amb> * src/test, src/prunex.c, src/test/prune-straight.sh (added), src/test/prune-straight.osm (added): Add a test case for pruning straight segments. Found an error case related to loops and fixed it. 2013-03-02 [r1264] Andrew M. Bishop <amb> * src/test/prune-short.sh (added), src/test, src/test/prune-short.osm (added), src/prunex.c, src/test/only-split.sh: Add a test case for pruning short segments. Found some disallowed cases that had not been detected before and fixed them. 2013-03-02 [r1263] Andrew M. Bishop <amb> * doc/html/tagging.html, xml/routino-tagging.xml, doc/TAGGING.txt, src/osmparser.c, src/filedumper.c: Recognise mini-roundabouts tagged as junction=roundabout (as well as highway=mini_roundabout). Pass them through the parser as roundabout=yes. Output them from the filedumper as junction=roundabout. Update the documentation for mini-roundabouts. 2013-03-02 [r1262] Andrew M. Bishop <amb> * src/test/oneway-loop.osm, src/test/node-restrictions.osm: Remove the 'update' element from the osm tag. 2013-02-28 [r1261] Andrew M. Bishop <amb> * src/relationsx.c: Rationalise some of the turn relation error messages. 2013-02-26 [r1260] Andrew M. Bishop <amb> * web/www/routino/router.js, web/www/routino/visualiser.js: Clarify comment. 2013-02-18 [r1259] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Add some more tags to not be reported as errors (barrier, highway), add some more aliases for highway types, bridges and tunnels are enabled for anything except 'no'. 2013-02-16 [r1257-1258] Andrew M. Bishop <amb> * web/www/routino/index.html: Move the meta tag for charset declaration to the top of the head, before the copyright notice, within the first 1024 bytes. * doc/html/readme.html, web/www/routino/router.html.de, web/www/routino/visualiser.html.en, web/www/routino/router.html.nl, doc/html/output.html, doc/html/tagging.html, doc/html/installation.html, doc/html/limits.html, doc/html/usage.html, doc/html/algorithm.html, doc/html/configuration.html, doc/html/index.html, web/www/routino/router.html.en, doc/html/data.html: Move the meta tag for charset declaration to the top of the head, before the copyright notice, within the first 1024 bytes. 2013-02-09 [r1256] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Stop two contradictory errors messages about 'access = foot' etc. 2013-02-09 Andrew M. Bishop <amb> Version 2.5 released 2013-02-09 [r1255] Andrew M. Bishop <amb> * doc/html/usage.html, doc/USAGE.txt: Fix HTML validation error. 2013-02-09 [r1254] Andrew M. Bishop <amb> * doc/html/readme.html, doc/NEWS.txt, doc/README.txt, FILES: Update documentation for version 2.5. 2013-02-09 [r1253] Andrew M. Bishop <amb> * doc/html/tagging.html, doc/TAGGING.txt: Update documentation for the new tagging transformations. 2013-02-09 [r1252] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Add some more highway tagging transformations (motorroad, sidewalk, footway, cycleway), remove some rare bicycle specific ones and add some access tag values. 2013-02-09 [r1251] Andrew M. Bishop <amb> * src/osmo5mparse.c: Rename the local functions that perform the integer conversions (from pbf_* to o5m_*). 2013-02-08 [r1250] Andrew M. Bishop <amb> * web/www/routino/documentation, doc/html/limits.html (added), doc/html/index.html, doc/LIMITS.txt (added): Add documentation about the numerical limits (OSM identifiers and database size). 2013-02-03 [r1249] Andrew M. Bishop <amb> * src/prunex.c: Some trivial changes, same functionality. 2013-01-24 [r1248] Andrew M. Bishop <amb> * web/www/routino/visualiser.js, src/visualiser.h, src/filedumper.c, doc/USAGE.txt, web/www/routino/visualiser.cgi, web/www/routino/visualiser.html.en, src/visualiser.c, doc/html/usage.html: Add the ability for the visualiser to display highways that have a particular property. 2013-01-24 [r1247] Andrew M. Bishop <amb> * doc/html/tagging.html, xml/routino-tagging.xml, doc/TAGGING.txt, src/osmparser.c: Change the "lanes=..." tag processing because it counts lanes in both directions. A normal road may be tagged as having two lanes (one in each direction) but the multilane property is intended to allow prioritisation of roads where traffic can use multiple lanes in each direction. 2013-01-21 [r1246] Andrew M. Bishop <amb> * src/tagging.c, src/osmparser.c: Remove unnecessary word from logerror messages. 2013-01-21 [r1245] Andrew M. Bishop <amb> * xml/routino-translations.xml: Updated German translations from Alex Treiber. 2013-01-20 [r1244] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Change the comments to clarify what the way access tag rules are for. Change slightly the logged message. Add new tagging rules to transform (for example) access=foot to foot=yes, access=no. 2013-01-20 [r1243] Andrew M. Bishop <amb> * xml/routino-tagging.xml, src/types.c, xml/routino-profiles.xml, doc/README.txt, doc/html/usage.html, src/types.h, doc/html/configuration.html, src/osmparser.c, xml/scripts/ride.pl, web/www/routino/router.html.en, doc/USAGE.txt, web/www/routino/visualiser.html.en, doc/CONFIGURATION.txt, web/www/routino/router.html.nl, doc/html/tagging.html, xml/scripts/walk.pl, src/relationsx.c, doc/TAGGING.txt, doc/html/readme.html, web/www/routino/router.html.de: Replace 'motorbike' with 'motorcycle' everywhere. 2013-01-20 [r1242] Andrew M. Bishop <amb> * doc/CONFIGURATION.txt, xml/routino-tagging.xsd, xml/routino-tagging.xml, src/tagging.h, doc/html/configuration.html, src/tagging.c: Change the <logerror> element of the configuration file to lookup the tag value if not specified and add a custom error message. Rework the access tag checking to use the new logcheck. 2013-01-19 [r1241] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Ignore some more highway types ('no' and 'disused'). 2013-01-19 [r1240] Andrew M. Bishop <amb> * web/www/routino/visualiser.html.en: Fix link to documentation directory. 2013-01-19 [r1239] Andrew M. Bishop <amb> * web/www/routino/router.html.de, web/www/routino/visualiser.html.en, web/www/routino/router.html.nl, web/www/routino/router.js, web/www/routino/mapprops.js, web/www/routino/visualiser.js, web/www/routino/router.html.en: Added MapQuest as an optional map layer, added layer specific attributions to mapprops.js. 2013-01-15 [r1238] Andrew M. Bishop <amb> * web/bin/summarise-log.pl: Fix stupid typo. 2013-01-12 [r1237] Andrew M. Bishop <amb> * web/bin/summarise-log.pl: Sort the listed nodes, ways or relations by ID. 2013-01-09 [r1236] Andrew M. Bishop <amb> * src/osmparser.c: Reset the to/via/from indexes before parsing each relation. 2012-12-29 [r1235] Andrew M. Bishop <amb> * src/xmlparse.h, src/osmpbfparse.c, src/osmo5mparse.c, src/osmxmlparse.c, src/xmlparse.c, src/filedumper.c: Replace the remaining 'long long' and 'unsigned long long' types with uint64_t. 2012-12-29 [r1234] Andrew M. Bishop <amb> * src/osmo5mparse.c, src/osmxmlparse.c, src/tagmodifier.c, src/osmparser.c, src/osmparser.h, src/tagging.c, src/osmpbfparse.c, src/tagging.h: Re-factor parsing code to remove duplicated parts from three parsers (osmo5mparse.c, osmpbfparse.c and osmxmlparse.c) into a common place (osmparser.c), also removes lots of global variables. Change the node, way and relation count to uint64_t instead of index_t to avoid wrap-around (although it would have been a cosmetic problem only), also removes dependency on types.h. Make the node, way and relation counters be 'int64_t' instead of 'long long' in the XML parsers for consistency with the non-XML parsers. 2012-12-28 [r1233] Andrew M. Bishop <amb> * src/osmparser.c: Log errors for areas that are oneway. 2012-12-28 [r1232] Andrew M. Bishop <amb> * src/osmparser.c: Log errors for areas that are not closed. 2012-12-27 [r1231] Andrew M. Bishop <amb> * src/segmentsx.c, src/osmparser.c, web/bin/summarise-log.pl: Don't append segments if they are duplicates within a way or have duplicated nodes. Log errors for middle nodes that repeat within a way (can be non-trivial unintentional loops). 2012-12-26 [r1230] Andrew M. Bishop <amb> * src/osmpbfparse.c: Some small changes for similarity with the O5M/O5C parser. 2012-12-26 [r1229] Andrew M. Bishop <amb> * doc/ALGORITHM.txt, doc/html/algorithm.html: Remove the "practicalities" section because it is out of date and not very relevant. 2012-12-26 [r1228] Andrew M. Bishop <amb> * src/relationsx.c, src/segmentsx.c: Make the log error messages more useful when there are missing nodes or ways. 2012-12-24 [r1227] Andrew M. Bishop <amb> * src/osmparser.h, doc/html/usage.html, src/osmo5mparse.c (added), src/planetsplitter.c, src/osmparser.c, src/Makefile, doc/USAGE.txt: Added parsing of O5M/O5C format (a binary format but otherwise very close to OSM/OSC). 2012-12-24 [r1226] Andrew M. Bishop <amb> * src/planetsplitter.c, src/osmparser.c, src/osmparser.h, src/osmpbfparse.c: The PBF format does not support change files (the 'visible' part of the info message is only for historical data and not for changes). 2012-12-24 [r1225] Andrew M. Bishop <amb> * src/osmpbfparse.c: Fix memory allocation error. 2012-12-22 [r1224] Andrew M. Bishop <amb> * doc/html/usage.html, src/planetsplitter.c, src/tagmodifier.c, doc/USAGE.txt: Data can no longer be read from stdin for planetsplitter or tagmodifier. 2012-12-21 [r1223] Andrew M. Bishop <amb> * web/data/create.sh: Correct the URLs to use to download data. 2012-12-21 [r1221] Andrew M. Bishop <amb> * doc/html/usage.html, src/osmxmlparse.c, src/planetsplitter.c, src/osmparser.c, src/Makefile, doc/USAGE.txt, src/osmparser.h, src/osmpbfparse.c (added): Add a parser for OSM PBF format. Separate the XML parser from the data processing in osmparser.c. Update planetsplitter and documentation to use new format. 2012-12-19 [r1219-1220] Andrew M. Bishop <amb> * src/xmlparse.c: Use 'unsigned char' instead of 'char' for buffer. Renumber the LEX states to remove hole. * src/uncompress.c: Trivial change to not set a state variable where not needed. 2012-12-19 [r1218] Andrew M. Bishop <amb> * src/osmxmlparse.c (added): Copying osmparser.c to create osmxmlparse.c for the XML callback functions and shared variables. 2012-12-17 [r1217] Andrew M. Bishop <amb> * src/optimiser.c: Refactor to remove duplicated code in each branch of if statement (in each optimiser loop). 2012-12-17 [r1216] Andrew M. Bishop <amb> * doc/NEWS.txt, doc/README.txt, FILES, doc/html/readme.html: Reintegrate the changes from 2.4.1 branch back into trunk. 2012-12-15 [r1209] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Fix some errors that appeared in the tagging file after adding nesting. 2012-12-15 [r1206-1207] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Change the tagging rules to use the nested <if> rules. * doc/html/configuration.html, src/tagging.c, doc/CONFIGURATION.txt, xml/routino-tagging.xsd: Change the tagging rules to have an <ifnot ...> rule which can also be nested. 2012-12-15 [r1205] Andrew M. Bishop <amb> * src/translations.c, xml/routino-translations.xsd: Change one entry in the translations XSD file that used a different case from the other defined types (not consistent with other XSD files but self-consistent). 2012-12-15 [r1204] Andrew M. Bishop <amb> * src/xml/xsd-to-xmlparser.c, src/osmparser.c, src/tagging.c, src/translations.c, src/profiles.c: Change the xsd-to-xmlparser functions to output the source code in the same order as the XSD file and do not attempt to sort them into reverse order of reference. 2012-12-15 [r1203] Andrew M. Bishop <amb> * doc/html/configuration.html, src/tagging.c, doc/CONFIGURATION.txt, xml/routino-tagging.xml: Change the tagging rules to use the nested <if> rules. 2012-12-15 [r1200-1202] Andrew M. Bishop <amb> * src/planetsplitter.c: Change the order of the command line option parsing to match the program usage output. * doc/USAGE.txt: Add the --logtime and --errorlog options to tagmodifier. * doc/html/usage.html, src/tagmodifier.c: Add the --logtime and --errorlog options to tagmodifier. 2012-12-15 [r1199] Andrew M. Bishop <amb> * xml/routino-tagging.xsd, src/tagging.h, src/tagmodifier.c, src/osmparser.c, src/tagging.c: Allow the tagging rule syntax to contain nested <if ...> statements. 2012-12-14 [r1197] Andrew M. Bishop <amb> * doc/USAGE.txt, doc/html/usage.html, src/planetsplitter.c, src/tagmodifier.c: Update the usage messages and documentation for bzip2/gzip uncompression. 2012-12-14 [r1196] Andrew M. Bishop <amb> * src/Makefile, src/uncompress.c, src/uncompress.h, src/planetsplitter.c, src/tagmodifier.c: Add the ability to read gzip compressed files when specified by name. 2012-12-13 [r1194-1195] Andrew M. Bishop <amb> * src/xmlparse.c: Handle the output of the uncompressor where reading may return only a partial buffer. Makes it more robust generally against short reads. * src/Makefile, src/uncompress.c (added), src/uncompress.h (added), src/planetsplitter.c, src/tagmodifier.c: Add the ability to read bzip2 compressed files when specified by name. 2012-12-12 [r1192] Andrew M. Bishop <amb> * src/xml/xsd-to-xmlparser.c, src/planetsplitter.c: Use STDIN_FILENO instead of 0 for the stdin file descriptor. 2012-12-11 [r1190] Andrew M. Bishop <amb> * src/xmlparse.c: Reorder if/then/else statements so that most common ones come first (using profiling when parsing GB OSM file). 2012-12-11 [r1189] Andrew M. Bishop <amb> * src/xmlparse.c: Most xml attribute values are ASCII so optimise for that case. 2012-12-10 [r1188] Andrew M. Bishop <amb> * src/Makefile: Re-enable the optimisation option. 2012-12-10 [r1185-1187] Andrew M. Bishop <amb> * src: Change svn ignored files (don't ignore xmlparse.c now). * src/xml/xsd-to-xmlparser.c, src/planetsplitter.c, src/tagmodifier.c, src/osmparser.c, src/xml/Makefile, src/osmparser.h, src/tagging.c, src/xmlparse.h, src/translations.c, src/profiles.c: New XML parser doesn't use stdio buffered file access but lower level read functions. * src/xmlparse.l (removed), src/xmlparse.c (added), src/Makefile: Remove flex based XML parser and replace with a parser created by implementing the same lex rules by hand. Operates faster because tag attributes do not need memory allocated or copying from file buffer and there are no yylex() function calls/returns. 2012-12-17 Andrew M. Bishop <amb> Version 2.4.1 released 2012-12-17 [r1214] Andrew M. Bishop <amb> * doc/html/readme.html, doc/NEWS.txt, doc/README.txt, FILES: Update for version 2.4.1. 2012-12-17 [r1213] Andrew M. Bishop <amb> * src/optimiser.c, src/waysx.c, src/segmentsx.c, src/nodesx.c, src/router.c, src/prunex.c, src/logging.c, src/relationsx.c: Merge revisions 1191, 1193, 1198, 1208 and 1210 from trunk into 2.4.1 branch. 2012-12-17 [r1210] Andrew M. Bishop <amb> * src/optimiser.c: Fix the incorrect finish_score variable that was set to infinite distance and not infinite score (infinte distance << infinite score so search was terminating early). 2012-12-15 [r1208] Andrew M. Bishop <amb> * src/nodesx.c, src/prunex.c, src/relationsx.c, src/waysx.c, src/segmentsx.c: Stop planetsplitter crashing out in unusual ways if there is no data. 2012-12-14 [r1198] Andrew M. Bishop <amb> * src/waysx.c, src/nodesx.c: Don't crash in binary search if no nodes/ways. 2012-12-13 [r1193] Andrew M. Bishop <amb> * src/logging.c: Fix bug with printing messages if not to stdout. 2012-12-12 [r1191] Andrew M. Bishop <amb> * src/router.c: Fix error when searching for default profiles.xml file. 2012-12-08 Andrew M. Bishop <amb> Version 2.4 released 2012-12-08 [r1182-1183] Andrew M. Bishop <amb> * doc/NEWS.txt, doc/README.txt, FILES, doc/html/readme.html: Update for version 2.4. * doc/TAGGING.txt: Update with the tagging rule changes in this version. 2012-12-08 [r1181] Andrew M. Bishop <amb> * src/xmlparse.l, src/xml/test/good.xml, src/xml/test/bad-cdata-start.xml (removed), src/xml/test/bad-text-outside.xml (added): Simplify the XML parser by not handling the CDATA and DOCTYPE sections and also raise an explicit error for text outside of tags. Modify test cases for these changes. 2012-12-06 [r1180] Andrew M. Bishop <amb> * src/xmlparse.l: Some further small changes to pull out bigger groups of characters (only marginally faster though). 2012-12-05 [r1179] Andrew M. Bishop <amb> * src/prunex.c: Minor theoretical improvements to pruning (slim mode is still very slow). 2012-12-05 [r1178] Andrew M. Bishop <amb> * src/xmlparse.l: Change rules to remove all states that require backing up (only marginally faster though). 2012-12-05 [r1176-1177] Andrew M. Bishop <amb> * doc/html/tagging.html: Update with the tagging rule changes in this version. * xml/routino-tagging.xml: Small change to the tag processing for nodes for easier future expansion. 2012-12-01 [r1175] Andrew M. Bishop <amb> * src/tagging.c: Fix memory leak from making incorrect assumption when freeing tagging rule. 2012-12-01 [r1174] Andrew M. Bishop <amb> * src/superx.c, src/translations.h, src/visualiser.c, src/profiles.h, src/types.h, src/osmparser.c, src/filedumper.c, src/output.c, src/router.c, src/translations.c, src/profiles.c, src/types.c: Rename the Way_* enumerated values to Highway_*, add a new Highway_None type, change the HighwayType() function to return Highway_None instead of Highway_Count if no match found - all changes for consistency with similar types and functions. 2012-11-27 [r1173] Andrew M. Bishop <amb> * src/osmparser.c, web/bin/summarise-log.pl, src/segmentsx.c: Log an error about duplicated segments within a way while parsing the OSM instead of later (will have been removed by de-duplication code before tested later in most cases). 2012-11-27 [r1172] Andrew M. Bishop <amb> * web/bin/summarise-log.pl: Make the script still work when no command line argument is used. 2012-11-27 [r1171] Andrew M. Bishop <amb> * src/relationsx.c, src/planetsplitter.c, src/waysx.c, src/segmentsx.c, src/nodesx.c: Don't log an error for duplicated nodes, ways or relations because it can only occur when applying changes or if using multiple geographically overlapping files and neither is a data error. 2012-11-21 [r1170] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Add some more tag checking, accept more tags. 2012-11-21 [r1169] Andrew M. Bishop <amb> * src/types.h, src/segmentsx.c: Finally fix the segment area handling - segments that are areas are discarded in preference to those that are not (as it was between r914 and r1136) and segments that are areas don't have the wrong distance (as they did between r914 and r1136). Revision r1137 correctly changed to use a flag and fixed the distance bug but then didn't sort using the new flag. Revision r1153 started sorting using the segment flags but the area was not the most significant bit so they were not sorted last. Revision r1164 correctly cleared the area flag when no longer needed but didn't fix the rest. Revision r1168 reverted r1164 so needed to be re-applied. 2012-11-21 [r1168] Andrew M. Bishop <amb> * src/prunex.c, src/segmentsx.h, src/filedumperx.c, src/segments.c, src/superx.c, src/fakes.c, src/types.h, src/segments.h, src/optimiser.c, src/osmparser.c, src/filedumper.c, src/segmentsx.c, src/fakes.h, src/output.c: Revert r1164 - some super-segments are longer than 65535 metres even if no individual segment is. 2012-11-20 [r1167] Andrew M. Bishop <amb> * doc/html/usage.html, src/relationsx.c, src/planetsplitter.c, src/waysx.c, src/relationsx.h, src/segmentsx.c, doc/USAGE.txt, src/nodesx.c, src/waysx.h, src/segmentsx.h, src/nodesx.h: Rename the '--preserve' command line option to '--keep' for simplicity. 2012-11-20 [r1166] Andrew M. Bishop <amb> * src/segmentsx.c, src/nodesx.c, src/prunex.c, src/results.c, src/sorting.c, src/logging.c, src/superx.c, src/files.h, src/relationsx.c, src/tagmodifier.c, src/logging.h, src/optimiser.c, src/osmparser.c, src/waysx.c, src/Makefile: Replace all assert statements with a custom error message that explains the cause and suggests a solution. 2012-11-20 [r1165] Andrew M. Bishop <amb> * src/types.h, src/osmparser.c, src/nodes.h, src/nodesx.c, src/nodesx.h: Use a specific type for the node flags instead of a generic uint16_t. 2012-11-20 [r1164] Andrew M. Bishop <amb> * src/filedumperx.c, src/segments.c, src/superx.c, src/fakes.c, src/types.h, src/segments.h, src/optimiser.c, src/osmparser.c, src/filedumper.c, src/segmentsx.c, src/fakes.h, src/output.c, src/prunex.c, src/segmentsx.h: Replace the 32-bit combined distance and flags in the segment with 16 bits for each. 2012-11-20 [r1163] Andrew M. Bishop <amb> * src/relationsx.c, src/relationsx.h, src/typesx.h, src/filedumperx.c: Tidy up all of the recent code changes - Rename TurnRestrictRelX structure to TurnRelX. 2012-11-20 [r1162] Andrew M. Bishop <amb> * src/files.c: Tidy up all of the recent code changes - Fix comment. 2012-11-20 [r1161] Andrew M. Bishop <amb> * src/nodesx.c, src/waysx.h, src/segmentsx.h, doc/DATALIFE.txt, src/nodesx.h, src/superx.c, src/relationsx.c, src/osmparser.c, src/waysx.c, src/relationsx.h, src/segmentsx.c: Tidy up all of the recent code changes - change the name of a few of the functions. 2012-11-20 [r1160] Andrew M. Bishop <amb> * src/waysx.c, src/relationsx.h, src/segmentsx.c, src/nodesx.c, src/waysx.h, src/segmentsx.h, src/nodesx.h: Tidy up all of the recent code changes - change the order of the functions within the files to a more sensible and consitent order. 2012-11-19 [r1159] Andrew M. Bishop <amb> * src/osmparser.c: Unconditionally mark ways as deleted if they have been modified to handle the case when applying more than one change file if a way is created by the first of the change files and modified by the second it will not be in the index. 2012-11-19 [r1158] Andrew M. Bishop <amb> * src/waysx.c, src/waysx.h, src/planetsplitter.c: Do not create the way indexes when loading the parsed ways to apply changes (reverses r1145). 2012-11-19 [r1157] Andrew M. Bishop <amb> * doc/html/usage.html, src/planetsplitter.c, doc/USAGE.txt: Do not require that --preserve must be used with --parse-only before changes can be applied (reverses r1151 for the change to functionality but preserves the changes to the functions that enable it). 2012-11-19 [r1156] Andrew M. Bishop <amb> * src/filedumperx.c: Fix bug with dumping ways. 2012-11-19 [r1155] Andrew M. Bishop <amb> * src/segmentsx.c: De-duplicate segments when sorting only if they have the same nodes, way and distance - i.e. the same data imported twice. 2012-11-18 [r1154] Andrew M. Bishop <amb> * src/osmparser.c: When marking modified nodes as deleted don't accidentally re-include them as new ways with the deleted flag set. 2012-11-18 [r1152-1153] Andrew M. Bishop <amb> * src/segmentsx.c: When sorting segments use the distance flags as the tie-breaker so that duplicated segments with different flags get sorted into the same order when applying changes as when not applying changes. * src/osmparser.c: Mark modified relations as deleted before storing the modification to handle the case where the modification causes it to be invalid and not stored therefore leaving the old version. 2012-11-18 [r1151] Andrew M. Bishop <amb> * src/segmentsx.h, src/nodesx.h, src/superx.c, doc/html/usage.html, src/relationsx.c, src/planetsplitter.c, src/waysx.c, src/relationsx.h, src/segmentsx.c, doc/USAGE.txt, src/nodesx.c, src/waysx.h: Using --parse-only and --preserve must sort the data so that it is ready to apply the changes. 2012-11-17 [r1149-1150] Andrew M. Bishop <amb> * src/filedumper.c: Some small changes to match the new filedumperx program. * src, doc/USAGE.txt, src/filedumperx.c (added), doc/html/usage.html, src/Makefile, web/bin: Add a new program to dump the contents of the intermediate files that are generated by using --preserve or --changes. 2012-11-17 [r1147-1148] Andrew M. Bishop <amb> * src/waysx.c: Replace a hard-coded constant with the #defined value it should have been. * src/relationsx.c: Clear the route relation before adding data to it so that there are no unused bytes in the structure to get written to disk (avoid byte-level differences when applying changes). 2012-11-17 [r1146] Andrew M. Bishop <amb> * src/nodesx.c, src/relationsx.c, src/planetsplitter.c, src/waysx.c, src/segmentsx.c: Suppress some error log messages when applying changes (false positive duplicate detection due to modification of existing items). 2012-11-17 [r1144-1145] Andrew M. Bishop <amb> * src/planetsplitter.c, src/osmparser.c, src/waysx.c, src/waysx.h: Fix applying changes for ways (highways that have been modified to be non-highways were not added to the database so the original remains). * src/typesx.h, src/types.h: Change the type-casting of some constants. 2012-11-16 [r1140-1143] Andrew M. Bishop <amb> * src/xml: Ignore the automatically generated executables from the new XML Schema. * xml/routino-osm.xsd, xml/osm.xsd: Changes to comments to make them more like the OSC files. * xml/routino-osc.xsd (added), xml/osc.xsd (added): XML Schema for OSC change files (.osc files) used to create the XML parser. * doc/html/usage.html, src/relationsx.c, src/types.h, src/planetsplitter.c, src/osmparser.c, src/waysx.c, src/segmentsx.c, doc/USAGE.txt, src/nodesx.c, src/osmparser.h, src/segmentsx.h, doc/DATALIFE.txt: Code to allow adding OSC change files (.osc files) to an existing set of parsed (and preserved) data. 2012-11-15 [r1139] Andrew M. Bishop <amb> * src/nodesx.h, src/superx.c, src/relationsx.c, src/planetsplitter.c, src/waysx.c, src/relationsx.h, src/segmentsx.c, src/nodesx.c, src/waysx.h, src/segmentsx.h: Fixed the --preserve option. 2012-11-12 [r1138] Andrew M. Bishop <amb> * src/relationsx.c: Fix mis-use of NO_WAY/NO_WAY_ID and NO_RELATION/NO_RELATION_ID constants in route relation handling. 2012-11-11 [r1137] Andrew M. Bishop <amb> * src/types.h, src/osmparser.c, src/segmentsx.c: Mark those segments that come from ways which are areas with an explicit flag rather than an implicit one (also fixes a bug). 2012-11-10 [r1136] Andrew M. Bishop <amb> * src/nodesx.c, src/waysx.h, src/segmentsx.h, src/nodesx.h, doc/html/usage.html, src/relationsx.c, src/planetsplitter.c, src/waysx.c, src/relationsx.h, src/segmentsx.c, doc/USAGE.txt: Added a --preserve option which keeps the raw data files after parsing, sorting and de-duplication. 2012-11-10 [r1134-1135] Andrew M. Bishop <amb> * doc/DATALIFE.txt, src/waysx.c: Don't index the ways in the first sorting, but wait until after de-duplicating. * src/relationsx.c: Sort the route relations and remove duplicates. 2012-11-10 [r1133] Andrew M. Bishop <amb> * src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, doc/DATALIFE.txt: The MergeSuperSegments function creates the output file in the sorted order already, there is no need to re-sort it. 2012-11-10 [r1132] Andrew M. Bishop <amb> * src/segmentsx.c, src/segmentsx.h, doc/DATALIFE.txt, src/planetsplitter.c: De-duplicate the super-segments as a post-processing function after the sort so both operations are combined in a single function. 2012-11-10 [r1131] Andrew M. Bishop <amb> * src/segmentsx.h, src/planetsplitter.c, src/segmentsx.c: De-duplicate the raw segments before any other processing (to match the node, way and turn relation processing). 2012-11-10 [r1129-1130] Andrew M. Bishop <amb> * src/planetsplitter.c: Separate the de-duplication of the ways from the extracting of the names. Use the modified functions for creating lists of nodes,segments,ways and relations from r1123. * src/waysx.c, src/waysx.h, doc/DATALIFE.txt: Separate the de-duplication of the ways from the extracting of the names. 2012-11-08 [r1128] Andrew M. Bishop <amb> * web/bin/summarise-log.pl: Allow generation of an HTML version of the log file summary. 2012-11-08 [r1127] Andrew M. Bishop <amb> * src/osmparser.c: Add two extra parsing rules for feet and inches. 2012-11-04 [r1126] Andrew M. Bishop <amb> * src/tagging.c: Clarify that errors logged when examining tags mean that tag will be ignored. 2012-11-04 [r1125] Andrew M. Bishop <amb> * src/osmparser.c: Log an error for ways with only 1 node and for relations with no nodes, ways or relations. 2012-11-03 [r1124] Andrew M. Bishop <amb> * src/prunex.c: Append the new ways directly to the end of the existing ways rather than using a new file. 2012-11-03 [r1123] Andrew M. Bishop <amb> * src/nodesx.h, src/superx.c, src/relationsx.c, src/waysx.c, src/relationsx.h, src/segmentsx.c, src/nodesx.c, src/waysx.h, src/segmentsx.h: Don't open the input file for appending if there is no intention to write anything to it. 2012-11-03 [r1122] Andrew M. Bishop <amb> * src/superx.c, src/files.h, src/relationsx.c, src/segmentsx.c, src/prunex.c, src/files.c: Change the UnmapFile() function to take a pointer to the data instead of the filename (like the CloseFile() function takes the file descriptor). 2012-11-02 [r1121] Andrew M. Bishop <amb> * src/prunex.c, src/segmentsx.h: Fix a bug which gave different results for slim mode and normal mode when pruning short segments. 2012-11-01 [r1120] Andrew M. Bishop <amb> * src/planetsplitter.c, src/waysx.c, src/relationsx.h, src/segmentsx.c, doc/USAGE.txt, src/nodesx.c, src/waysx.h, src/prunex.c, src/segmentsx.h, src/nodesx.h, src/superx.c, doc/html/usage.html, src/relationsx.c: Introduce a new'--append' option for appending data from a file to the currently parsed data. Rename the intermediate file used for storing data to be appended to. Add a function to call after appending to a file which closes the file and renames it to a temporary filename which is used for the remaining processing. 2012-11-01 [r1119] Andrew M. Bishop <amb> * src/files.c, src/files.h: Add a function to rename a file. 2012-10-31 [r1118] Andrew M. Bishop <amb> * src/relationsx.c, src/sorting.h, src/waysx.c, src/segmentsx.c, src/nodesx.c: Add the option for the sorting function to preserve the input order of equivalent items on the output. Use this feature in sorting so that slim mode and normal mode give the same results. 2012-10-24 [r1116-1117] Andrew M. Bishop <amb> * doc/html/usage.html, doc/html/algorithm.html, src/planetsplitter.c, doc/USAGE.txt, doc/ALGORITHM.txt, src/prunex.c: Perform the pruning for isolated regions in terms of each transport type individually. * doc/DATALIFE.txt: Use the index provided by the pre-sort function rather than the way's internal id when pruning/compacting. 2012-10-24 [r1114-1115] Andrew M. Bishop <amb> * src/segmentsx.c: Remove a debugging print statement. * src/waysx.c: Use the index provided by the pre-sort function rather than the way's internal id when pruning/compacting. 2012-10-22 [r1112-1113] Andrew M. Bishop <amb> * src/waysx.c: Use the new pre-sort function to allow CompactWays() to delete the unused segments before sorting them. * src/segmentsx.c, src/sorting.c, src/relationsx.c: Fix bug with index parameter in new pre-sort function and change comments to clarify. 2012-10-22 [r1110-1111] Andrew M. Bishop <amb> * src/segmentsx.c: Use the new pre-sort function to allow RemovePrunedSegments() to delete the pruned segments before sorting them. * src/segmentsx.c, src/relationsx.c: Change the message after sorting geographically to be consistent with others. 2012-10-21 [r1109] Andrew M. Bishop <amb> * src/planetsplitter.c, src/nodesx.c, doc/DATALIFE.txt, src/nodesx.h: Move the UpdateNodes() work into the callback for SortNodeListGeographically() and use firstnode when saving the nodes. 2012-10-21 [r1108] Andrew M. Bishop <amb> * src/planetsplitter.c, src/relationsx.h, doc/DATALIFE.txt, src/relationsx.c: Use the new pre-sort function to allow UpdateTurnRelations() and SortTurnRelationList() to be combined into a single SortTurnRelationListGeographically() function that only reads and writes the data once instead of twice. 2012-10-21 [r1107] Andrew M. Bishop <amb> * src/segmentsx.h, doc/DATALIFE.txt, src/planetsplitter.c, src/segmentsx.c: Use the new pre-sort function to allow UpdateSegments() and SortSegmentList() to be combined into a single SortSegmentListGeographically() function that only reads and writes the data once instead of twice. 2012-10-21 [r1106] Andrew M. Bishop <amb> * src/nodesx.c, src/sorting.c, src/relationsx.c, src/sorting.h, src/waysx.c, src/segmentsx.c: Change the sorting functions to have a pre-sort and post-sort selection function instead of just a post-selection one (this will allow deletion of some items before sorting instead of after sorting in some cases). 2012-10-21 [r1103-1105] Andrew M. Bishop <amb> * doc/DATALIFE.txt: Added new columns showing when the data files are mapped into memory. * src/waysx.c: Delete the onumber parameter from the Ways file header. Don't map the ways file into memory when writing the ways. * src/ways.h, src/filedumper.c: Delete the onumber parameter from the Ways file header. 2012-10-21 [r1102] Andrew M. Bishop <amb> * src/segmentsx.c: Reallocate the firstnode array when indexing segments because there may be fewer nodes now. 2012-10-21 [r1101] Andrew M. Bishop <amb> * src/nodesx.c: Remove some unused parts of the SortNodeListGeographically() function. 2012-10-20 [r1100] Andrew M. Bishop <amb> * doc/DATALIFE.txt, src/relationsx.c, src/planetsplitter.c, src/waysx.c, src/segmentsx.c, src/waysx.h, src/segmentsx.h: Move the compacting of the ways back to the top, delete the unused ways at this point and also call the function again after pruning segments. 2012-10-20 [r1099] Andrew M. Bishop <amb> * src/nodesx.c: Mark pruned nodes in the node index. 2012-10-20 [r1098] Andrew M. Bishop <amb> * src/relationsx.c, src/planetsplitter.c, src/relationsx.h, src/segmentsx.c, src/nodesx.c, src/prunex.c, doc/DATALIFE.txt, src/nodesx.h, src/superx.c: Delete the pruned nodes before searching for super-nodes etc. 2012-10-20 [r1097] Andrew M. Bishop <amb> * src/nodesx.c: Move the calculation of lat/long extents to the UpdateNodes() function. 2012-10-20 [r1096] Andrew M. Bishop <amb> * doc/DATALIFE.txt: Add missing data (nodesx->super). 2012-10-20 [r1095] Andrew M. Bishop <amb> * doc/DATALIFE.txt (added): A description of the data lifetime in the planetsplitter program (as an aid to understanding it better and not messing it up when editing it). 2012-10-19 [r1094] Andrew M. Bishop <amb> * src/waysx.c: Remove one filesort and one read through the ways file when compacting. 2012-10-19 [r1093] Andrew M. Bishop <amb> * src/waysx.c, src/segmentsx.c, src/waysx.h: Change to an external index for the compacted ways. 2012-10-18 [r1092] Andrew M. Bishop <amb> * src/planetsplitter.c, src/waysx.c, src/waysx.h: When compacting ways exclude the ones that are not used by any segments. 2012-10-17 [r1091] Andrew M. Bishop <amb> * src/planetsplitter.c: Perform the Way compacting at the end (after pruning segments). 2012-10-17 [r1090] Andrew M. Bishop <amb> * src/waysx.h, src/waysx.c, src/segmentsx.c: Rename the WayX->prop entry to WayX->cid to disambiguate it. 2012-10-17 [r1089] Andrew M. Bishop <amb> * src/typesx.h, src/superx.c: Rename the BitMask functions to set or clear all bits. 2012-09-28 [r1078] Andrew M. Bishop <amb> * src/ways.c, src/segments.c, src/visualiser.c, src/nodes.c, src/ways.h, src/fakes.c, src/segments.h, src/optimiser.c, src/filedumper.c, src/fakes.h, src/output.c: Rename some variables so that pointers to nodes, segments, ways and relations use the Hungarian notation "p" suffix (only applies to the router, not planetsplitter). 2012-07-22 [r1027-1028] Andrew M. Bishop <amb> * web/www/routino/noscript.cgi (removed), web/www/routino/noscript.html (removed), web/www/routino/noscript.template.html (removed): Delete obsolete noscript web pages and CGIs. * web/www/routino/customvisualiser.cgi (removed), web/www/routino/customrouter.cgi (removed): Delete obsolete custom* CGIs. 2012-10-06 Andrew M. Bishop <amb> Version 2.3.2 released 2012-10-06 [r1083] Andrew M. Bishop <amb> * doc/NEWS.txt, doc/README.txt, FILES, doc/html/readme.html: Update for 2.3.2 release. 2012-10-02 [r1079] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Make the access tag normalisation consistent between nodes an ways. 2012-09-26 [r1077] Andrew M. Bishop <amb> * src/visualiser.c, web/www/routino/visualiser.js, src/visualiser.h, src/filedumper.c, web/www/routino/visualiser.cgi, web/www/routino/visualiser.html.en: Add an option to the visualiser to display nodes that disallow selected transport type. 2012-09-25 [r1076] Andrew M. Bishop <amb> * doc/OUTPUT.txt, doc/html/output.html: Change the example output now that the copyright notice has changed, the final turn is no longer missed and minor junctions are formatted differently in the all text format. 2012-09-23 [r1075] Andrew M. Bishop <amb> * src/test/expected/turns-WP08.txt, src/test/expected/turns-WP09.txt, src/test/expected/dead-ends-WP10.txt, src/test/expected/dead-ends-WP11.txt, src/test/expected/loops-WP01.txt, src/test/expected/loops-WP02.txt, src/test/expected/loops-WP03.txt, src/test/expected/loops-WP04.txt, src/test/expected/loops-WP05.txt, src/test/expected/loops-WP06.txt, src/test/expected/loops-WP07.txt, src/test/expected/loops-WP08.txt, src/test/expected/loops-WP09.txt, src/test/expected/turns-WP10.txt, src/test/expected/turns-WP11.txt, src/test/expected/turns-WP12.txt, src/test/expected/turns-WP13.txt, src/test/expected/turns-WP14.txt, src/test/expected/turns-WP15.txt, src/test/expected/turns-WP16.txt, src/test/expected/dead-ends-WP01.txt, src/test/expected/dead-ends-WP02.txt, src/test/expected/dead-ends-WP03.txt, src/test/expected/dead-ends-WP04.txt, src/test/expected/dead-ends-WP05.txt, src/test/expected/dead-ends-WP06.txt, src/test/expected/dead-ends-WP07.txt, src/test/expected/dead-ends-WP08.txt, src/test/expected/dead-ends-WP09.txt, src/test/expected/loops-WP10.txt, src/test/expected/loops-WP11.txt, src/output.c, src/test/expected/turns-WP01.txt, src/test/expected/turns-WP02.txt, src/test/expected/turns-WP03.txt, src/test/expected/turns-WP04.txt, src/test/expected/turns-WP05.txt, src/test/expected/turns-WP06.txt, src/test/expected/turns-WP07.txt: Change the all text output format so that minor junctions (where no turn instructions are output for the HTML) are labelled differently. This also required the expected results for the tests cases to be changed. 2012-09-22 [r1074] Andrew M. Bishop <amb> * src/test/expected/super-or-not-WP02.txt, src/test/expected/turns-WP10.txt, src/test/expected/turns-WP11.txt, src/test/expected/turns-WP12.txt, src/test/expected/turns-WP13.txt, src/test/expected/turns-WP14.txt, src/test/expected/turns-WP15.txt, src/test/expected/turns-WP16.txt, src/test/expected/dead-ends-WP01.txt, src/test/expected/dead-ends-WP02.txt, src/test/expected/dead-ends-WP03.txt, src/test/expected/dead-ends-WP04.txt, src/test/expected/dead-ends-WP05.txt, src/test/expected/dead-ends-WP06.txt, src/test/expected/dead-ends-WP07.txt, src/test/expected/dead-ends-WP08.txt, src/test/expected/dead-ends-WP09.txt, src/test/expected/loops-WP10.txt, src/test/expected/loops-WP11.txt, src/output.c, src/test/expected/oneway-loop-WP01.txt, src/test/expected/node-restrictions-WP01.txt, src/test/expected/turns-WP01.txt, src/test/expected/node-restrictions-WP02.txt, src/test/expected/turns-WP02.txt, src/test/expected/node-restrictions-WP03.txt, src/test/expected/turns-WP03.txt, src/test/expected/node-restrictions-WP04.txt, src/test/expected/turns-WP04.txt, src/test/expected/node-restrictions-WP05.txt, src/test/expected/turns-WP05.txt, src/test/expected/node-restrictions-WP06.txt, src/test/expected/turns-WP06.txt, src/test/expected/node-restrictions-WP07.txt, src/test/expected/turns-WP07.txt, src/test/expected/node-restrictions-WP08.txt, src/test/expected/turns-WP08.txt, src/test/expected/turns-WP09.txt, src/test/expected/dead-ends-WP10.txt, src/test/expected/dead-ends-WP11.txt, src/test/expected/loops-WP01.txt, src/test/expected/loops-WP02.txt, src/test/expected/loops-WP03.txt, src/test/expected/loops-WP04.txt, src/test/expected/loops-WP05.txt, src/test/expected/loops-WP06.txt, src/test/expected/loops-WP07.txt, src/test/expected/loops-WP08.txt, src/test/expected/loops-WP09.txt: Fix a bug that stopped the last turn before a waypoint from being described in the HTML output if the final section of the route was a fake-segment. Update the test case expected results since the last turn was not being described properly. 2012-09-20 [r1073] Andrew M. Bishop <amb> * src/test/start-1-finish.sh, src/test/a-b-c.sh, src/test/a-b.sh: Change the scripts for the test cases to use 'diff' instead of 'cmp' so that it is possible to see the changes. 2012-09-19 [r1071-1072] Andrew M. Bishop <amb> * src/router.c: Change the error message printed if a super-route cannot be converted into a normal route. * src/superx.c: When not marking nodes that allow no traffic as super-nodes don't route through them when calculating super-segments. 2012-09-18 [r1070] Andrew M. Bishop <amb> * xml/routino-translations.xml: Change the URL for the license/copyright file (not CC specific and points to openstreetmap site). 2012-09-17 [r1069] Andrew M. Bishop <amb> * src/superx.c, src/test/node-restrictions.osm, src/types.h, src/test/expected/node-restrictions-WP04.txt: Do not mark barriers that cannot be passed by any type of transport as super-nodes. 2012-09-16 [r1068] Andrew M. Bishop <amb> * src/test/expected/node-restrictions-WP06.txt (added), src/test/node-restrictions.sh (added), src/test/expected/node-restrictions-WP07.txt (added), src/test/expected/node-restrictions-WP08.txt (added), src/test/node-restrictions.osm (added), src/optimiser.c, src/test/expected/node-restrictions-WP01.txt (added), src/test, src/test/expected/node-restrictions-WP02.txt (added), src/test/expected/node-restrictions-WP03.txt (added), src/test/expected/node-restrictions-WP04.txt (added), src/test/expected/node-restrictions-WP05.txt (added): Don't fail to route if a selected waypoint is a node that does not permit chosen traffic type. Add test cases for this change. 2012-09-13 [r1067] Andrew M. Bishop <amb> * src/test/oneway-loop.osm, src/test/invalid-turn-relations.osm, src/test/turns.osm: Make every test case loadable in JOSM. 2012-09-13 [r1066] Andrew M. Bishop <amb> * src/superx.c, src/optimiser.c: Update some comments and make a few very small optimisations. 2012-09-10 [r1065] Andrew M. Bishop <amb> * src/relationsx.c, src/waysx.c: Tidy up relation expression. 2012-09-10 [r1064] Andrew M. Bishop <amb> * src/relationsx.c: Log an error if a foot/bicycle way doesn't allow foot/bicycle transport (it already overrides the way tagging but didn't warn). 2012-09-09 [r1062-1063] Andrew M. Bishop <amb> * src/optimiser.c: Refactor the code for the previous change. * src/superx.c: Tiny optimisation to super-segment calculation. 2012-09-08 [r1058-1061] Andrew M. Bishop <amb> * src/optimiser.c: Fix the FindSuperSegment() function for routing problem. * src/test: Ignore new log files. * src/test/Makefile: Fixed a spelling mistake in the printed output. * src/test/oneway-loop.osm (added), src/test/expected/oneway-loop-WP01.txt (added), src/test/oneway-loop.sh (added): Added a new test case for a real-life pathological routing problem involving oneway streets and loops. 2012-08-12 [r1057] Andrew M. Bishop <amb> * src/visualiser.c: Fix for highway type visualiser (was missing one-way segments). 2012-08-11 Andrew M. Bishop <amb> Version 2.3.1 released 2012-08-11 [r1050] Andrew M. Bishop <amb> * web/www/routino/router.html.en, web/www/routino/router.html.de, web/www/routino/router.html.nl: Revert the change to waypoint table widths. 2012-08-11 [r1049] Andrew M. Bishop <amb> * web/www/routino/router.pl: Fix for older versions of Perl that don't accept certain anonymous list syntax. 2012-08-11 [r1048] Andrew M. Bishop <amb> * doc/README.txt, FILES, doc/html/readme.html, doc/NEWS.txt: Updated for version 2.3.1. 2012-08-11 [r1047] Andrew M. Bishop <amb> * web/www/routino/router.pl, web/www/routino/router.js, web/www/routino/router.html.nl, web/www/routino, web/www/routino/visualiser.js, web/www/routino/icons/create-icons.pl, web/www/routino/maplayout.css, src/xml/Makefile, src/Makefile, web/www/routino/router.css, web/www/routino/router.html.de, web/www/routino/icons, src/xmlparse.l, web/www/routino/router.cgi, src/test/Makefile, web/www/routino/router.html.en, src: Merge the changes from trunk version into version 2.3.1 branch. 2012-08-06 [r1044-1045] Andrew M. Bishop <amb> * src/test/Makefile, src/Makefile, src/xml/Makefile: Be more consistent about what files to clean up. * src/xmlparse.l: Allow an unlimited number of attributes per tag without crashing. 2012-08-04 [r1043] Andrew M. Bishop <amb> * web/www/routino/router.pl, web/www/routino/router.js, web/www/routino/router.cgi: Don't send back the unused lines from the router CGI, add the complete command line and execution time to the log file. 2012-08-03 [r1040] Andrew M. Bishop <amb> * web/www/routino/router.html.de, web/www/routino/router.html.nl, web/www/routino/maplayout.css, web/www/routino/router.html.en, web/www/routino/router.css: Force the font size in pixels and adjust the table width so that user browser preferences don't destroy layout (using small or large font). 2012-08-03 [r1039] Andrew M. Bishop <amb> * web/www/routino/router.js: Fix some bugs in the latest check-ins. 2012-08-03 [r1038] Andrew M. Bishop <amb> * web/www/routino/router.html.de, web/www/routino/router.html.nl, web/www/routino/router.js, web/www/routino/router.html.en: Add a button to close the loop (duplicate the first waypoint at the end). 2012-08-03 [r1037] Andrew M. Bishop <amb> * web/www/routino/router.js: Don't add the waypoint items at the start and hide them if not needed but make them invisible to start with and display them if required. 2012-08-03 [r1036] Andrew M. Bishop <amb> * web/www/routino/router.js: Improve the way that the home marker is handled (dragging etc). 2012-08-03 [r1035] Andrew M. Bishop <amb> * web/www/routino/visualiser.js, web/www/routino/router.js: Add comments to the functions that are called from the HTML file (to simplify debugging and make easier to maintain). 2012-08-02 [r1034] Andrew M. Bishop <amb> * web/www/routino/router.js: Never-used markers now show as blank, not 0,0. Clicking an unused marker centres it on the map and updates the coordinates. 2012-08-02 [r1033] Andrew M. Bishop <amb> * web/www/routino/router.js: Refactor the code that inserts, removes and moves markers around so that all properties are moved including search/coords selection, search values etc. 2012-08-02 [r1032] Andrew M. Bishop <amb> * web/www/routino/router.js: Change the formSetCoords() function so that it doesn't change the active state. 2012-07-31 [r1030-1031] Andrew M. Bishop <amb> * web/www/routino/icons: Generate the full set of icons and ignore them from SVN. * web/www/routino/icons/create-icons.pl: Create more limit markers for the visualiser. 2012-07-22 [r1029] Andrew M. Bishop <amb> * web/www/routino/icons/create-icons.pl: Create marker-XXX-(red|grey).png icons which can get requested before the Javascript removes them. 2012-07-21 Andrew M. Bishop <amb> Version 2.3 released 2012-07-21 [r1026] Andrew M. Bishop <amb> * doc/NEWS.txt, doc/README.txt, FILES, doc/html/readme.html: Update to version 2.3. 2012-07-21 [r1025] Andrew M. Bishop <amb> * src/osmparser.c: Fix problem with not logging all invalid tags. Minor optimisation to speed up tag recognition. 2012-07-17 [r1023-1024] Andrew M. Bishop <amb> * doc/html/output.html: Change the comment describing the parameters for the example route. * doc/html/usage.html, doc/USAGE.txt: Add a note that too many threads and not enough memory will slow down planetsplitter operation. 2012-07-17 [r1022] Andrew M. Bishop <amb> * src/xmlparse.l: Some small lex changes and an optimisation to remove repeated memory allocation. 2012-07-16 [r1021] Andrew M. Bishop <amb> * src/sorting.c: Restore the shortcut that doesn't write the data to a temporary file if it all can be sorted in one go. This removes the slowdown with the multi-threaded code even when running with no threads. 2012-07-15 [r1020] Andrew M. Bishop <amb> * src/sorting.c: Don't call any of the pthread functions unless running with multiple threads. 2012-07-14 [r1019] Andrew M. Bishop <amb> * src/logging.c: Default not to use the --logtime option. 2012-07-12 [r1018] Andrew M. Bishop <amb> * web/www/routino/router.js: Another change related to OpenLayers 2.12. 2012-07-11 [r1017] Andrew M. Bishop <amb> * src/prunex.c: Fix bug with pruning straight highways (uninitialised data). 2012-07-10 [r1016] Andrew M. Bishop <amb> * web/www/routino/router.html.en, web/www/routino/router.html.de, web/www/routino/router.html.nl, web/www/routino/router.js: Trigger the search form only when pressing the return key. 2012-07-10 [r1014-1015] Andrew M. Bishop <amb> * web/www/routino/page-elements.js: Remove some temporary variables by combining statements. * web/www/routino/visualiser.js: A change that should have been in r985. 2012-07-09 [r1013] Andrew M. Bishop <amb> * web/www/openlayers/routino.cfg, web/www/routino/visualiser.js, web/www/routino/router.js: Make compatible with OpenLayers version 2.12 (but don't default to using it). 2012-07-09 [r1012] Andrew M. Bishop <amb> * doc/INSTALL.txt, web/www/routino/router.js, web/www/routino/mapprops.js: Move the maxmarkers variable from router.js to mapprops.js. 2012-06-30 [r1011] Andrew M. Bishop <amb> * web/www/routino/router.js, web/www/routino/visualiser.js: Remove some temporary variables by combining statements. 2012-06-29 [r1010] Andrew M. Bishop <amb> * web/www/routino/router.html.de, web/www/routino/visualiser.html.en, web/www/routino/router.html.nl, web/www/routino/router.js, web/www/routino/router.html.en: Fix HTML so that it validates. 2012-06-29 [r1009] Andrew M. Bishop <amb> * web/www/routino/router.js, web/www/routino/visualiser.js: Be more consistent with the .transform() operation. 2012-06-29 [r1008] Andrew M. Bishop <amb> * web/www/routino/router.js, web/www/routino/search.pl, web/www/routino/search.cgi: Pass bounding box to search to help find local places. Properly URI encode search strings. Properly check CGI parameters. 2012-06-29 [r1007] Andrew M. Bishop <amb> * web/www/routino/router.html.en, web/www/routino/router.css, web/www/routino/router.html.de, web/www/routino/router.html.nl: Remove all style definitions from HTML files except for "display:none". 2012-06-29 [r1005-1006] Andrew M. Bishop <amb> * web/www/routino/icons/waypoint-coords.png, web/www/routino/icons/waypoint-search.png: Fix icons to have transparent background. * web/www/routino/router.html.de, web/www/routino/router.html.nl, web/www/routino/router.js, web/www/routino/search.pl, web/www/routino/router.html.en, web/www/routino/search.cgi, web/www/routino/router.css, doc/INSTALL.txt: Display all of the search results and allow the user to select one. 2012-06-05 [r1004] Andrew M. Bishop <amb> * web/www/routino/search.pl, web/www/routino/router.cgi, web/www/routino/results.cgi, web/www/routino/search.cgi, web/www/routino/visualiser.cgi, web/www/routino/router.pl, web/www/routino/statistics.cgi: Made some of the perl variables scope-local and checked other perl functions. 2012-06-05 [r1003] Andrew M. Bishop <amb> * src/visualiser.c, doc/html/usage.html, web/www/routino/visualiser.js, src/visualiser.h, src/filedumper.c, doc/USAGE.txt, web/www/routino/visualiser.cgi, web/www/routino/visualiser.html.en: Add an option to the visualiser to display segments of each of the highway types. 2012-06-05 [r1002] Andrew M. Bishop <amb> * src/visualiser.h, src/filedumper.c, doc/USAGE.txt, web/www/routino/visualiser.cgi, web/www/routino/visualiser.html.en, web/www/routino/visualiser.css, src/visualiser.c, doc/html/usage.html, web/www/routino/visualiser.js: Add an option to the visualiser to display segments accessible to each of the transport types. 2012-06-05 [r1001] Andrew M. Bishop <amb> * web/www/routino/router.html.en, web/www/routino/search.cgi (added), web/www/routino/router.css, web/www/routino/paths.pl, web/www/routino/router.html.de, web/www/routino/icons/waypoint-search.png (added), web/www/routino/router.html.nl, web/www/routino/router.js, web/www/routino/icons/waypoint-coords.png (added), web/www/routino/search.pl (added): Add a button to replace the lat/long text entry with a location search entry. Use Nominatim service via CGI to get first search result and fill in coords. 2012-06-04 [r999-1000] Andrew M. Bishop <amb> * web/www/routino/results.cgi: No need to include paths.pl. * doc/html/installation.html: Move the filename prefix parameter to the paths.pl script with the other user-editable parameters. 2012-06-04 [r998] Andrew M. Bishop <amb> * doc/INSTALL.txt, web/www/routino/paths.pl, web/www/routino/router.pl: Move the filename prefix parameter to the paths.pl script with the other user-editable parameters. 2012-06-04 [r997] Andrew M. Bishop <amb> * web/www/routino/router.pl: On OSX the md5 program is called "md5" and not "md5sum". 2012-05-10 [r996] Andrew M. Bishop <amb> * src/sorting.c: Added some mutexes and condition variables to communicate between threads. 2012-05-09 [r995] Andrew M. Bishop <amb> * src/relationsx.c: Force bicycle routes to be bicycle accessible and foot routes to be foot accessible. 2012-05-08 [r994] Andrew M. Bishop <amb> * web/www/routino/router.html.de: Merge in the changes to the HTML template. 2012-05-08 [r993] Andrew M. Bishop <amb> * web/www/routino/router.html.de: Make link to documentation a relative one rather than to the Routino website. 2012-05-08 [r992] Andrew M. Bishop <amb> * web/www/routino/router.html.en, web/www/routino/router.html.de (added), web/www/routino/router.html.nl: Add a German language router webpage, and links to it from the other ones (patch from Andreas Matthus). 2012-05-02 [r991] Andrew M. Bishop <amb> * src/planetsplitter.c, src/Makefile, doc/USAGE.txt, src/sorting.c, doc/html/usage.html: Convert sorting algorithms to optionally use multiple threads. 2012-05-01 [r990] Andrew M. Bishop <amb> * xml/routino-osm.xsd, xml/osm.xsd, src/osmparser.c: Handle OSM files that contain changesets. 2012-04-29 [r989] Andrew M. Bishop <amb> * src/planetsplitter.c: Handle the --process-only and --parse-only options better. 2012-04-01 [r988] Andrew M. Bishop <amb> * web/www/routino/customvisualiser.cgi, web/www/routino/customrouter.cgi: Don't even bother checking the legality of the parameters since the JavaScript does that. 2012-04-01 [r987] Andrew M. Bishop <amb> * web/www/routino/icons, web/www/routino/router.html.nl, web/www/routino/router.js, web/www/routino/icons/create-icons.pl, web/www/routino/router.html.en: The number of waypoints is controlled by the JavaScript and they are automatically inserted so there is no need to insert multiple lines in the HTML. 2012-03-31 [r986] Andrew M. Bishop <amb> * web/www/routino/router.html.en, web/www/routino/visualiser.html.en, web/www/routino/router.html.nl, web/www/routino/router.js, web/www/routino/visualiser.js: Update the link URLs just-in-time rather than every time the map moves or parameters are changed. 2012-03-24 [r985] Andrew M. Bishop <amb> * web/www/routino/visualiser.js, web/www/routino/customvisualiser.cgi, web/www/routino/router.html.en, web/www/routino/visualiser.html.en, web/www/routino/router.html.nl, web/www/routino/router.js, web/www/routino/customrouter.cgi: Process the URL query string in the Javascript not in custom*.cgi. Refactor a lot of the code for coordinate handling. Simplify custom*.cgi so that they just redirect to the HTML page (will be removed in later versions - for existing link compatibility only). 2012-03-23 [r984] Andrew M. Bishop <amb> * web/www/routino/router.html.en, web/www/routino/router.html.nl, web/www/routino/router.js: Added new buttons to centre map on marker and to add coordinates for current location (Javascript geolocation function). Shuffled the existing buttons around. Allow "up" on first marker and "down" on last marker to wrap around. 2012-03-23 [r983] Andrew M. Bishop <amb> * web/www/routino/icons/waypoint-locate.png (added), web/www/routino/icons/waypoint-recentre.png (added), web/www/routino/icons/waypoint-down.png, web/www/routino/icons/waypoint-add.png, web/www/routino/icons/waypoint-home.png, web/www/routino/icons/waypoint-remove.png, web/www/routino/icons/waypoint-centre.png, web/www/routino/icons/waypoint-up.png: Enlarged the button icons, changed some and added two new ones. 2012-03-17 [r982] Andrew M. Bishop <amb> * src/logging.c, doc/html/usage.html, src/planetsplitter.c, src/logging.h, doc/USAGE.txt: Add a new '--logtime' option that prints the elapsed time for planetsplitter. 2012-03-03 Andrew M. Bishop <amb> Version 2.2 released 2012-03-03 [r978-981] Andrew M. Bishop <amb> * doc/html/output.html: Updated to version 2.2. * doc/html/readme.html: Updated to version 2.2. * doc/README.txt, FILES: Updated to version 2.2. * doc/NEWS.txt: Updated to version 2.2. 2012-02-21 [r977] Andrew M. Bishop <amb> * src/prunex.c: Refactor code slightly for isolated regions. 2012-02-21 [r976] Andrew M. Bishop <amb> * src/prunex.c: Re-arrange small sections of code based on results of profiling. 2012-02-21 [r975] Andrew M. Bishop <amb> * src/test/a-b-c.sh, src/test/a-b.sh, doc/html/usage.html, src/planetsplitter.c, src/test/Makefile, src/test, doc/USAGE.txt, src/test/start-1-finish.sh, src/test/only-split.sh: Enable pruning by default. Fix the test cases to run with and without pruning but only compare against the expected results when not pruned. 2012-02-20 [r974] Andrew M. Bishop <amb> * src/planetsplitter.c: Prune straight highways then isolated regions and then short segments. 2012-02-20 [r973] Andrew M. Bishop <amb> * src/prunex.c: Remove compiler warnings (when compiled with optimisation). 2012-02-20 [r972] Andrew M. Bishop <amb> * src/prunex.c: Allow pruning isolated regions to be run second or later. 2012-02-20 [r971] Andrew M. Bishop <amb> * src/prunex.c: Don't remove nodes/segments when straightening ways if it would cause the loss of a way name. 2012-02-19 [r970] Andrew M. Bishop <amb> * src/prunex.c: Some fixes to be able to process the whole of the UK. 2012-02-18 [r969] Andrew M. Bishop <amb> * doc/html/algorithm.html, doc/ALGORITHM.txt: Add a general description of data pruning. 2012-02-18 [r968] Andrew M. Bishop <amb> * src/prunex.c: Fix bug with pruning that caused super-node search to fail. 2012-02-18 [r967] Andrew M. Bishop <amb> * src/prunex.c: Refactored the code for straight highways and made improvements. 2012-02-18 [r966] Andrew M. Bishop <amb> * src/prunex.h, doc/html/usage.html, src/planetsplitter.c, doc/USAGE.txt, src/prunex.c: Prune nodes in the middle of straight highways. 2012-02-12 [r965] Andrew M. Bishop <amb> * src/nodesx.h: Need 3 cached nodes for slim mode. 2012-02-11 [r964] Andrew M. Bishop <amb> * doc/html/usage.html, src/planetsplitter.c, src/segments.h, doc/USAGE.txt, src/waysx.h, src/prunex.c, src/segmentsx.h: Prune short segments. 2012-02-09 [r963] Andrew M. Bishop <amb> * src/prunex.h, src/planetsplitter.c, src/prunex.c: Prune isolated segments if they cannot be routed to anywhere else, not just if they are not connected. 2012-02-09 [r962] Andrew M. Bishop <amb> * src/types.h: The latlong_t type is signed so must use an appropriate constant. 2012-02-08 [r961] Andrew M. Bishop <amb> * src/nodesx.h, src/types.h, src/prunex.c: Change the way that pruned nodes are recorded. 2012-02-08 [r960] Andrew M. Bishop <amb> * src/prunex.c: Don't mark pruned nodes as they are found but mark them all at the end. 2012-02-07 [r959] Andrew M. Bishop <amb> * src/Makefile: Revert the CFLAGS value. 2012-01-28 [r958] Andrew M. Bishop <amb> * src/typesx.h: Fix the recent change with the bitmask type. 2012-01-28 [r956-957] Andrew M. Bishop <amb> * src/files.h, src/prunex.c: Fix function comments. * src/sorting.h: Replace a missing header. 2012-01-28 [r955] Andrew M. Bishop <amb> * src/segments.c, src/prunex.h, src/superx.c, src/visualiser.c, src/relationsx.c, src/profiles.h, src/sorting.h, src/fakes.h, src/nodesx.c, src/output.c, src/relations.c, src/typesx.h, src/results.c, src/relations.h, src/nodes.c, src/waysx.c, src/optimiser.c, src/osmparser.c, src/segmentsx.c, src/nodes.h, src/tagging.c, src/prunex.c, src/segmentsx.h, src/profiles.c, src/queue.c: Simplify and standardise the included headers. 2012-01-14 [r954] Andrew M. Bishop <amb> * src/typesx.h: Change the bitmask type from uint8_t to uint32_t. 2012-01-14 [r953] Andrew M. Bishop <amb> * src/prunex.h, doc/html/usage.html, src/planetsplitter.c, doc/USAGE.txt, src/prunex.c: Add the option to prune small isolated regions out of the database to avoid routes starting of finishing on them. 2012-01-14 [r951-952] Andrew M. Bishop <amb> * src/segmentsx.c: Bug fix for latest change. * src/relationsx.c: Zero the structure before filling it in so that no junk is written to disk. 2012-01-13 [r950] Andrew M. Bishop <amb> * src/nodesx.h, src/superx.c, src/segmentsx.c, src/typesx.h, src/segmentsx.h: Add new macros to abstract the bit mask types. 2012-01-13 [r949] Andrew M. Bishop <amb> * src/nodesx.h, src/prunex.h (added), src/superx.c, src/relationsx.c, src/types.h, src/planetsplitter.c, src/Makefile, src/segmentsx.c, src/nodesx.c, src/prunex.c (added), src/segmentsx.h: Add an infrastructure to allow adding new functions to prune nodes and segments. 2012-01-11 [r948] Andrew M. Bishop <amb> * src/sorting.c, src/relationsx.c, src/sorting.h, src/waysx.c, src/nodesx.c: The filesort_*() functions now return a count of the number of items kept after sorting. 2012-01-10 [r947] Andrew M. Bishop <amb> * src/superx.c, src/nodesx.c: Move the allocation of the nodexs super flags memory until just before it is needed and free it as soon as no longer needed. 2011-12-11 [r946] Andrew M. Bishop <amb> * src/segmentsx.c: Remove unnecessary test. 2011-12-11 [r945] Andrew M. Bishop <amb> * src/output.c: Remove warning about uninitialised variable. 2011-12-11 [r944] Andrew M. Bishop <amb> * src/relationsx.c, src/segmentsx.c, src/nodesx.c: Fill the structures with zero before inserting data and writing to file (removes junk from unused spaces in database files). 2011-12-11 [r943] Andrew M. Bishop <amb> * src/superx.c, src/relationsx.c, src/segmentsx.c, src/segmentsx.h: Remove the "position" parameter from the NextSegmentX() function. 2011-12-11 [r942] Andrew M. Bishop <amb> * src/nodesx.h, src/relationsx.c, src/segmentsx.c, src/waysx.h, src/segmentsx.h: Remove the "position" parameter from the PutBack*X() functions (only used in slim mode). 2011-12-10 [r940-941] Andrew M. Bishop <amb> * src/osmparser.h: Update file now that the name has changed. * src/functionsx.h (removed), src/planetsplitter.c, src/osmparser.c, src/osmparser.h (added): Rename functionsx.h to osmparser.h. 2011-12-09 [r939] Andrew M. Bishop <amb> * web/www/routino/customvisualiser.cgi, web/www/routino/customrouter.cgi: The custom router uses the translated router.html or visualiser.html depending on the browser's Accept-Language header. 2011-12-08 [r936-938] Andrew M. Bishop <amb> * web/www/routino/visualiser.html (added): Create a link from visualiser.html.en to visualiser.html. * web/www/routino/visualiser.html (removed), web/www/routino/visualiser.html.en (added): Rename visualiser.html to visualiser.html.en. * web/www/routino/visualiser.js, web/www/routino/visualiser.html, web/www/routino/router.js: Move semi-constant strings from the JavaScript to the HTML so that they can be translated. 2011-12-08 [r935] Andrew M. Bishop <amb> * web/www/routino/router.html.en, web/www/routino/router.html.nl, web/www/routino/router.js: Use the translated total distance from the summary and not the untranslated one from the CGI. 2011-12-08 [r934] Andrew M. Bishop <amb> * src/visualiser.c: Make limit checking work with one-way streets and in slim mode. 2011-12-07 [r933] Andrew M. Bishop <amb> * doc/html/installation.html, web/www/routino/visualiser.js, web/www/routino/router.html.en, doc/INSTALL.txt, web/www/routino/visualiser.html, web/www/routino/router.html.nl, web/www/routino/router.js, web/www/routino/mapprops.js (added): Move the map preferences (N/S/E/W range, zoom range and URLs) to a separate file. 2011-12-07 [r932] Andrew M. Bishop <amb> * web/www/routino/page-elements.css, web/www/routino/router.html.en, web/www/routino/visualiser.html, web/www/routino/router.html.nl: Replace the "show"/"hide" button with "+"/"-" buttons. 2011-12-07 [r931] Andrew M. Bishop <amb> * web/data/create.sh: Generate an error log. 2011-12-06 [r930] Andrew M. Bishop <amb> * doc/TAGGING.txt, doc/html/tagging.html: Describe what the roundabout and mini-roundabout tags are used for. 2011-12-06 [r929] Andrew M. Bishop <amb> * src/output.c: Mini-roundabouts are now described as roundabouts instead of junctions. 2011-12-06 [r927-928] Andrew M. Bishop <amb> * src/test/expected/turns-WP09.txt, src/test/expected/turns-WP10.txt, src/test/expected/turns-WP11.txt, src/test/expected/turns-WP12.txt, src/test/expected/turns-WP13.txt, src/test/expected/turns-WP14.txt, src/test/expected/turns-WP15.txt, src/test/expected/turns-WP07.txt, src/test/expected/turns-WP08.txt: Updated test case expected results with the roundabout changes. * src/output.c: Use constants for the values of the "important" variable. Fix the missing junctions on roundabouts. 2011-12-06 [r925-926] Andrew M. Bishop <amb> * src/output.c: Output HTML directions for roundabouts. * xml/routino-translations.xml, src/translations.h, src/translations.c, xml/routino-translations.xsd: Add new translate-able strings for roundabouts. 2011-12-06 [r924] Andrew M. Bishop <amb> * src/ways.h: Cache three ways not two. 2011-11-26 [r923] Andrew M. Bishop <amb> * src/types.h, doc/TAGGING.txt, src/osmparser.c, src/filedumper.c, doc/html/tagging.html, src/types.c, xml/routino-tagging.xml: Parse and store information about roundabouts (to improve routing instructions). 2011-11-26 [r921-922] Andrew M. Bishop <amb> * doc/OUTPUT.txt, src/output.c, doc/html/output.html: Refactor a lot of the code, simplify it and fix some bugs: Names of highways in HTML format. Names of highways and bearings for GPX routes. Change the format of the text file to be more like GPX & HTML. * src/ways.h, src/ways.c: Allow space to cache one name for each cached way (in slim mode). 2011-11-23 [r920] Andrew M. Bishop <amb> * xml/routino-tagging-nomodify.xml: Fix the invalid XML. 2011-11-22 [r919] Andrew M. Bishop <amb> * src/osmparser.c, xml/routino-osm.xsd: Check that XML file contains version='0.6' in 'osm' tag. 2011-11-22 [r918] Andrew M. Bishop <amb> * src/filedumper.c: Refactor the code by moving the dumping of an OSM region into a separate function. 2011-11-22 [r917] Andrew M. Bishop <amb> * src/filedumper.c: Include a bounding box in the --dump-osm XML output. 2011-11-21 [r916] Andrew M. Bishop <amb> * src/filedumper.c: Ensure that only segments completely within the specified region are dumped when using --dump-osm. 2011-11-21 [r914-915] Andrew M. Bishop <amb> * doc/TAGGING.txt, doc/html/tagging.html: Document the use of the area tag. * src/osmparser.c, src/segmentsx.c, xml/routino-tagging.xml: When an area and a way overlap keep the way and discard the area. 2011-11-20 [r913] Andrew M. Bishop <amb> * src/test/Makefile, src/xml/Makefile: Fix some more Makefile oddities. 2011-11-20 [r912] Andrew M. Bishop <amb> * web/www/openlayers/install.sh: Change script to default to downloading OpenLayers v2.11. 2011-11-19 [r910-911] Andrew M. Bishop <amb> * Makefile: Fix some Makefile oddities. * src/test/Makefile, src/Makefile, src/xml/Makefile: Fix some Makefile oddities. 2011-11-19 [r907-909] Andrew M. Bishop <amb> * doc/html/tagging.html: Fix heading anchor names. * src/xml/test/bad-comment-extra-double-dash.xml (added), src/xmlparse.l: Fixed bug in XMl parsing that allowed invalid XML (double dash within comments). * src/queue.c: Revert back to r874 (itself the same as r867) but with the change that should have happened in r883 rather than being based on r868. 2011-11-12 Andrew M. Bishop <amb> Version 2.1.2 released 2011-11-12 [r903] Andrew M. Bishop <amb> * doc/NEWS.txt, doc/README.txt, FILES, doc/html/readme.html: Updated for version 2.1.2. 2011-11-12 [r902] Andrew M. Bishop <amb> * xml/routino-translations.xml, web/www/routino/router.html.en, web/www/routino/router.html.nl: Added Russian language translations. 2011-11-12 [r901] Andrew M. Bishop <amb> * doc/OUTPUT.txt, doc/TAGGING.txt, doc/ALGORITHM.txt, doc/INSTALL.txt: Small formatting changes. 2011-11-11 [r900] Andrew M. Bishop <amb> * doc/OUTPUT.txt, src/output.c, doc/html/output.html: Change the names of the variables for the XML and raw versions of the highway names. Output the text files with translated highway names. Update the documentation to say that only the header is untranslated in the text files. 2011-11-11 [r899] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Fix invalid XML file. 2011-11-11 [r898] Andrew M. Bishop <amb> * doc/TAGGING.txt, doc/html/tagging.html, xml/routino-tagging.xml: Improve the documentation for the tagging rule configuration file. 2011-11-11 [r896-897] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Add some more tagging rules from the UK error.log file. * web/bin/summarise-log.pl: Summarise segments that are loops. 2011-11-11 [r895] Andrew M. Bishop <amb> * src/relationsx.c: Make the progress messages more consistent. 2011-11-10 [r894] Andrew M. Bishop <amb> * web/www/routino/router.pl: Use the same convention to indicate the user-editable part of the file as used elsewhere. 2011-11-10 [r893] Andrew M. Bishop <amb> * src/translations.h, doc/OUTPUT.txt, src/output.c, src/translations.c, doc/html/output.html: Change the names of the variables for the XML and raw versions of the translations. Output the text files with the raw versions and not the XML versions of the copyright information. Update the documentation to say that only the copyright information is translated in the text files. 2011-11-10 [r892] Andrew M. Bishop <amb> * src/translations.c: Don't convert the highway types to XML numeric entities here (it is already done in the output functions). 2011-11-09 [r891] Andrew M. Bishop <amb> * src/optimiser.c: Change the condition used to terminate the search for the best route. 2011-11-08 [r890] Andrew M. Bishop <amb> * src/superx.c: Improve comment. 2011-11-08 [r889] Andrew M. Bishop <amb> * xml/Makefile: Delete the auto-generated profile.js and profile.pl files with distclean target. 2011-10-31 [r888] Andrew M. Bishop <amb> * src/files.h: Add a #define to disable the use of pread()/pwrite() but this must be manually configured, there is no configure script. 2011-10-31 [r887] Andrew M. Bishop <amb> * src/nodesx.h, src/relations.h, src/files.h, src/relationsx.c, src/ways.h, src/segments.h, src/waysx.c, src/Makefile, src/xml/Makefile, src/nodes.h, src/waysx.h, src/segmentsx.h: Use pread() and pwrite() functions instead of seek() followed by read() or write(). 2011-10-30 [r886] Andrew M. Bishop <amb> * src/nodes.c, src/nodes.h: Copy the node offsets into RAM for the slim mode since looking them up in the file is the largest single contributor to the time. 2011-10-29 [r885] Andrew M. Bishop <amb> * src/segments.c, src/visualiser.c, src/nodes.c, src/optimiser.c, src/filedumper.c, src/nodes.h, src/output.c: Rationalise and reduce the usage of LookUpNode() function. 2011-10-24 [r884] Andrew M. Bishop <amb> * src/Makefile, src/xml/Makefile: Fix long-standing annoying bug with dependencies for slim versions. 2011-10-24 [r883] Andrew M. Bishop <amb> * src/queue.c: No need to use uint32_t (just use int). 2011-10-23 Andrew M. Bishop <amb> Version 2.1.1 released 2011-10-23 [r881-882] Andrew M. Bishop <amb> * doc/NEWS.txt, FILES, doc/html/readme.html: Update for version 2.1.1. * doc/html/configuration.html: Update copyright year. 2011-10-22 [r880] Andrew M. Bishop <amb> * Makefile: Fix running 'make test' from the top level. 2011-10-22 [r879] Andrew M. Bishop <amb> * src/filedumper.c: Add some more typecasts before printing the values. 2011-10-22 [r878] Andrew M. Bishop <amb> * xml/Makefile: Fix the installation of the XML files. 2011-10-22 [r876-877] Andrew M. Bishop <amb> * src/test/expected/turns-WP09.txt, src/test/turns.osm, src/test/expected/turns-WP10.txt, src/test/expected/turns-WP11.txt, src/test/expected/turns-WP12.txt, src/test/expected/turns-WP04.txt, src/test/expected/turns-WP13.txt, src/test/expected/turns-WP05.txt, src/test/expected/turns-WP14.txt, src/test/expected/turns-WP06.txt, src/test/expected/turns-WP15.txt, src/test/expected/turns-WP16.txt (added), src/test/expected/turns-WP07.txt, src/test/expected/turns-WP08.txt: Test case for 'except' tags on turn restrictions. * src/osmparser.c, xml/routino-tagging.xml: Fix handling of 'except' tags for turn restrictions. 2011-10-22 [r875] Andrew M. Bishop <amb> * src/sorting.c: Revert back to something very close to r869 because it is fastest by a tiny fraction. 2011-10-22 [r874] Andrew M. Bishop <amb> * src/results.h, src/queue.c: Revert back to r867 because it is faster (although only by 1%) than any of the other combinations. 2011-10-22 [r873] Andrew M. Bishop <amb> * src/sorting.c, src/queue.c: Revert back to r864 zero-based binary heap but with r868/r869 refactored code. 2011-10-15 [r872] Andrew M. Bishop <amb> * src/sorting.c, src/queue.c: Change the binary heap to a 3-ary heap. 2011-10-15 [r871] Andrew M. Bishop <amb> * src/sorting.c: Bug fixes for the previous change. 2011-10-15 [r870] Andrew M. Bishop <amb> * src/sorting.c, src/results.h, src/queue.c: Change the binary heap to a 4-ary heap. 2011-10-15 [r868-869] Andrew M. Bishop <amb> * src/sorting.c: Refactor the binary heap to reduce the number of comparisons. * src/queue.c: Refactor the binary heap to reduce the number of comparisons. 2011-10-09 [r867] Andrew M. Bishop <amb> * src/sorting.c: Change to a unity based binary heap rather than zero based one to save some additions. 2011-10-09 [r866] Andrew M. Bishop <amb> * src/queue.c: Bug fix with previous change. 2011-10-06 [r865] Andrew M. Bishop <amb> * src/results.h, src/queue.c: Change to a unity based binary heap rather than zero based one to save some additions. 2011-10-06 [r864] Andrew M. Bishop <amb> * src/results.c: Swap the order of two parts of an && statement. 2011-10-06 [r863] Andrew M. Bishop <amb> * src/results.h, src/results.c: Change bin counters to 8-bit (reduces memory) and pre-allocate first dimension of pointer array (saves time). 2011-10-06 [r862] Andrew M. Bishop <amb> * Makefile, xml/Makefile, doc/Makefile, src/Makefile, src/xml/Makefile: Makefiles are more consistent with each other and 'make test' can be run from the top level. 2011-10-06 [r861] Andrew M. Bishop <amb> * doc/html/usage.html, src/planetsplitter.c, doc/USAGE.txt: Change the default number of iterations to 5 since testing shows that there is negligible improvement beyond here. 2011-10-05 [r860] Andrew M. Bishop <amb> * src/optimiser.c: Optimise the number of hash function bins by trial and error. 2011-10-05 [r859] Andrew M. Bishop <amb> * src/Makefile, src/xml/Makefile: Add the gcc options for profiling (coverage) and delete the files generated by it. 2011-10-05 [r858] Andrew M. Bishop <amb> * src/results.c: If there are too many results in one bin then double the number of bins. 2011-10-05 [r857] Andrew M. Bishop <amb> * src/results.h, src/results.c: Remove the two RESULTS_*_INCREMENT constants by swapping the dimensions on the 'point' array so that both have unity value and are pointless. 2011-10-05 [r856] Andrew M. Bishop <amb> * src/superx.c: Optimise the number of hash function bins by trial and error. 2011-10-04 [r854-855] Andrew M. Bishop <amb> * src/superx.c, src/optimiser.c: Increase the size of the hash array used to store the results. * src/results.h, src/results.c: Change the way that allocated memory is tracked. 2011-10-04 [r853] Andrew M. Bishop <amb> * src/results.c: Split the data increment constant into two for the different parts of the data structure. 2011-10-03 [r852] Andrew M. Bishop <amb> * web/www/routino/router.cgi: Ensure that the shortest or quickest option is passed to the router. 2011-10-03 Andrew M. Bishop <amb> Version 2.1 released 2011-10-03 [r851] Andrew M. Bishop <amb> * FILES: Remove another .svn directory. 2011-10-03 [r850] Andrew M. Bishop <amb> * doc/NEWS.txt, FILES, doc/html/readme.html: Update for version 2.1. 2011-09-07 [r849] Andrew M. Bishop <amb> * src/test/super-or-not.osm, src/optimiser.c, src/test/expected/super-or-not-WP03.txt (added): Handle the special case where the start point is a super-node and the finish point is somewhere within one of the super-segments from that node. 2011-09-07 [r848] Andrew M. Bishop <amb> * src/nodes.c: Fix for previous binary search change. 2011-09-07 [r847] Andrew M. Bishop <amb> * src/filedumper.c: Fix bug with earlier change to OSM file creator. 2011-09-07 [r846] Andrew M. Bishop <amb> * src/router.c: Fix confusing, duplicated, output message. 2011-09-07 [r845] Andrew M. Bishop <amb> * src/nodes.c: Make stricter checks for closest nodes just like in v2.0.3 for segments. 2011-09-07 [r844] Andrew M. Bishop <amb> * src/filedumper.c: Fix formatting problem with dumped OSM file. 2011-09-07 [r842-843] Andrew M. Bishop <amb> * src/nodes.c, src/waysx.c, src/nodesx.c, src/relations.c: Check binary search functions and improve comments, fix pathological case with end point and/or improve start point. * src/filedumper.c: Use macro test function rather than direct check. 2011-09-06 [r841] Andrew M. Bishop <amb> * src/test/super-or-not.osm (added), src/test/a-b.sh (added), src/test/expected/super-or-not-WP01.txt (added), src/test/expected/super-or-not-WP02.txt (added), src/test, src/test/super-or-not.sh (added): Added a new test case for the routing bug-fix in version 2.0.3 (route via super-nodes may not be shortest). 2011-09-06 [r840] Andrew M. Bishop <amb> * src/test/expected/dead-ends-WP01.txt, src/test/expected/dead-ends-WP02.txt, src/test/expected/dead-ends-WP03.txt, src/test/expected/dead-ends-WP04.txt, src/test/expected/dead-ends-WP05.txt, src/test/expected/dead-ends-WP06.txt, src/test/expected/dead-ends-WP07.txt, src/test/expected/dead-ends-WP08.txt, src/test/expected/dead-ends-WP09.txt, src/test/expected/loops-WP10.txt, src/test/expected/loops-WP11.txt, src/test/copyright.xml (added), src/test/expected/no-super-WP01.txt, src/test/expected/no-super-WP02.txt, src/test/expected/no-super-WP03.txt, src/test/expected/no-super-WP04.txt, src/test/expected/turns-WP01.txt, src/test/expected/turns-WP02.txt, src/test/expected/turns-WP03.txt, src/test/start-1-finish.sh, src/test/expected/turns-WP04.txt, src/test/expected/turns-WP05.txt, src/test/expected/turns-WP06.txt, src/test/expected/turns-WP07.txt, src/test/expected/turns-WP08.txt, src/test/expected/turns-WP09.txt, src/test/a-b-c.sh, src/test/expected/dead-ends-WP10.txt, src/test/expected/dead-ends-WP11.txt, src/test/expected/loops-WP01.txt, src/test/expected/loops-WP02.txt, src/test/expected/loops-WP03.txt, src/test/expected/loops-WP04.txt, src/test/expected/loops-WP05.txt, src/test/expected/loops-WP06.txt, src/test/expected/loops-WP07.txt, src/test/expected/loops-WP08.txt, src/test/expected/loops-WP09.txt, src/test/expected/turns-WP10.txt, src/test/expected/turns-WP11.txt, src/test/expected/turns-WP12.txt, src/test/expected/turns-WP13.txt, src/test/expected/turns-WP14.txt, src/test/expected/turns-WP15.txt: Ensure that test cases have correct copyright notice (Routino, AGPL3) in generated data and not the default one (OSM, CC-SA). 2011-09-06 [r838-839] Andrew M. Bishop <amb> * src/test/expected/dead-ends-WP01.txt (added), src/test/expected/dead-ends-WP02.txt (added), src/test/expected/dead-ends-WP03.txt (added), src/test/expected/dead-ends-WP04.txt (added), src/test/expected/dead-ends-WP05.txt (added), src/test/expected/dead-ends-WP06.txt (added), src/test/expected/dead-ends-WP07.txt (added), src/test/expected/dead-ends-WP08.txt (added), src/test/expected/loops-WP10.txt (added), src/test/expected/dead-ends-WP09.txt (added), src/test/expected/loops-WP11.txt (added), src/test/expected/no-super-WP01.txt (added), src/test/expected/no-super-WP02.txt (added), src/test/expected/no-super-WP03.txt (added), src/test/expected/turns-WP01.txt (added), src/test/expected/no-super-WP04.txt (added), src/test/expected/turns-WP02.txt (added), src/test/expected/turns-WP03.txt (added), src/test/expected/turns-WP04.txt (added), src/test/expected/turns-WP05.txt (added), src/test/expected/turns-WP06.txt (added), src/test/expected/turns-WP07.txt (added), src/test/expected/turns-WP08.txt (added), src/test/expected/turns-WP09.txt (added), src/test/expected/dead-ends-WP10.txt (added), src/test/expected/dead-ends-WP11.txt (added), src/test/expected/loops-WP01.txt (added), src/test/expected/loops-WP02.txt (added), src/test/expected/loops-WP03.txt (added), src/test/expected/loops-WP04.txt (added), src/test/expected/loops-WP05.txt (added), src/test/expected/loops-WP06.txt (added), src/test/expected/loops-WP07.txt (added), src/test/expected/loops-WP08.txt (added), src/test/expected/loops-WP09.txt (added), src/test/expected/turns-WP10.txt (added), src/test/expected/turns-WP11.txt (added), src/test/expected/turns-WP12.txt (added), src/test/expected/turns-WP13.txt (added), src/test/expected/turns-WP14.txt (added), src/test/expected/turns-WP15.txt (added): Store the expected results to check for future regressions. * src/test/a-b-c.sh, src/test/expected (added), src/test/start-1-finish.sh: Store the expected results to check for future regressions. 2011-09-05 [r837] Andrew M. Bishop <amb> * src/relationsx.c: Ignore relations based on all vehicle types (including bicycles) not just motor vehicles. 2011-09-05 [r836] Andrew M. Bishop <amb> * xml/Makefile, xml/scripts/walk.pl (added), xml, xml/scripts/ride.pl (added), web/data, xml/scripts (added), xml/scripts/drive.pl (added): Generate special-use sets of tagging rules for walking, riding and driving 2011-08-27 [r834-835] Andrew M. Bishop <amb> * web/bin/summarise-log.pl (added): A script to process the error log file and summarise it. * xml/routino-tagging.xml: Add lots more tagging rules based on errors logged from parsing UK, add some more error logging. 2011-08-27 [r832-833] Andrew M. Bishop <amb> * src/osmparser.c: Only log errors for highways. * src/relationsx.c: Improve the error messages for bad relations. 2011-08-27 [r830-831] Andrew M. Bishop <amb> * src/filedumper.c: Change the 'generator' tag in the dumped XML file. * xml/routino-tagging.xsd: Whitespace change. 2011-08-21 [r828] Andrew M. Bishop <amb> * doc/NEWS.txt, doc/README.txt, src/nodes.c, FILES, src/optimiser.c, src/router.c, doc/html/readme.html: Merge version 2.0.3 into working version. 2011-08-14 [r827] Andrew M. Bishop <amb> * src/tagging.h, src/tagging.c, xml/routino-tagging.xsd: Add an unset rule in the tagging processing XML file. 2011-08-13 [r826] Andrew M. Bishop <amb> * src/tagging.h, src/tagmodifier.c, src/osmparser.c, src/tagging.c, xml/routino-tagging.xsd: Add a logerror rule in the tagging processing XML file. 2011-08-04 [r825] Andrew M. Bishop <amb> * src/osmparser.c: Add more acceptable number suffixes. 2011-07-23 [r813] Andrew M. Bishop <amb> * src/osmparser.c: Better parsing of width/height/length and weight and more information about value actually used. 2011-07-21 [r812] Andrew M. Bishop <amb> * src/relationsx.c, src/osmparser.c, src/waysx.c, src/segmentsx.c, src/nodesx.c: Add logging of parsing and processing errors. 2011-07-21 [r810-811] Andrew M. Bishop <amb> * src/test/a-b-c.sh, src/test/start-1-finish.sh, src/test/only-split.sh: Use the --errorlog option. * doc/html/usage.html, src/planetsplitter.c, doc/USAGE.txt: The filename is now optional in the --errorlog option. 2011-07-21 [r809] Andrew M. Bishop <amb> * src/planetsplitter.c: Only open/close the error log file if one was requested. 2011-07-10 [r806-808] Andrew M. Bishop <amb> * src/test: Ignore the auto-generated files from the new test case. * src/test/invalid-turn-relations.osm (added), src/test/invalid-turn-relations.sh (added), src/test/only-split.sh (added): Add test cases for the new turn relation validity checks. * src/relationsx.c: Check turn relations more carefully and discard them if they are invalid. 2011-07-04 [r805] Andrew M. Bishop <amb> * src/relationsx.c: Change the termination of route relation way/relation lists. 2011-07-03 [r804] Andrew M. Bishop <amb> * src/logging.c, doc/html/usage.html, src/planetsplitter.c, src/logging.h, doc/USAGE.txt: Add framework for logging error during OSM parsing and subsequent processing. 2011-07-02 [r803] Andrew M. Bishop <amb> * src/nodes.h: Replace over-sized file entry with one of appropriate size. 2011-08-04 Andrew M. Bishop <amb> Version 2.0.3 released 2011-08-04 [r823] Andrew M. Bishop <amb> * doc/NEWS.txt, doc/README.txt, FILES, doc/html/readme.html: Updated for version 2.0.3. 2011-08-04 [r822] Andrew M. Bishop <amb> * src/router.c: If there is a route that passes super-nodes and one that doesn't then choose the better one. 2011-08-04 [r820-821] Andrew M. Bishop <amb> * src/router.c: If there is a direct route without passing any super-nodes then keep it as a backup in case the potential route that does pass super-nodes doesn't work out. * src/optimiser.c: Allow calling FixForwardRoute() more than once. 2011-08-04 [r819] Andrew M. Bishop <amb> * src/optimiser.c: Revert previous change because it breaks the dead-end handling. 2011-08-03 [r818] Andrew M. Bishop <amb> * src/router.c: Find a valid route if the start and end point are the same location (it doesn't require a U-turn). 2011-08-03 [r817] Andrew M. Bishop <amb> * src/optimiser.c, src/router.c: Add a new (less confusing) error message for when the start of the route has no super-nodes and doesn't include the end node and make clearer the error message when the combining of routes fails. 2011-08-03 [r816] Andrew M. Bishop <amb> * src/nodes.c: Make more checks on the closest segment to avoid choosing one that our profile does not allow us to use. 2011-08-02 [r815] Andrew M. Bishop <amb> * src/optimiser.c: Handle the case where the start node is a super-node and there is no previous segment. 2011-06-26 Andrew M. Bishop <amb> Version 2.0.2 released 2011-06-26 [r800-r801] Andrew M. Bishop <amb> * doc/README.txt, doc/html/readme.html: Update for version 2.0.2. * doc/NEWS.txt, FILES, doc/html/readme.html: Update for version 2.0.2. 2011-06-25 [r798-799] Andrew M. Bishop <amb> * src/results.c: Fix comment associated with results list memory handling. * src/optimiser.c: Free temporary results that are calculated. 2011-06-25 [r795-797] Andrew M. Bishop <amb> * src/tagging.h, src/planetsplitter.c, src/tagging.c: Add some functions to free the tagging rules when they have been used. * src/osmparser.c: Free some memory allocated when parsing the file. * src/nodesx.c: Free some memory allocated when writing the file. 2011-06-19 [r794] Andrew M. Bishop <amb> * src/tagmodifier.c: Change to unsigned long and ensure that printf format specifiers are correct. 2011-06-19 [r792-793] Andrew M. Bishop <amb> * src/segmentsx.c: If a node has no segments return a NULL pointer rather than random junk. * xml/routino-tagging.xml: Reinstate the line that makes roundabouts one-way. 2011-06-18 [r791] Andrew M. Bishop <amb> * src/osmparser.c, src/xmlparse.h, src/xmlparse.l: Don't use the flex yylineno but keep track with an unsigned long long line counter instead (if there are more than 2^31 nodes then there are more than 2^31 lines as well). 2011-06-18 [r790] Andrew M. Bishop <amb> * src/superx.c, src/relationsx.c, src/types.h, src/osmparser.c, src/waysx.c, src/filedumper.c, src/segmentsx.c, src/nodesx.c, src/router.c, src/typesx.h: Ensure that when printing numbers of the index_t type that an appropriate printf format specifier is used (ready for if it is redefined as 64-bit). 2011-06-18 [r788-789] Andrew M. Bishop <amb> * src/Makefile: Use the -std=c99 option by default. * src/relationsx.c, src/waysx.c, src/segmentsx.c, src/nodesx.c, src/segmentsx.h: Fix some more warnings from -Wextra and/or -pedantic options. 2011-06-18 [r787] Andrew M. Bishop <amb> * src/xmlparse.l: Use flex %options instead of #defines, force clean compilation with C99. 2011-06-18 [r786] Andrew M. Bishop <amb> * src/relationsx.c, src/relationsx.h: Rename structure element "restrict" to "restriction" to avoid C99 error (reserved word). 2011-06-18 [r785] Andrew M. Bishop <amb> * src/superx.c: Removed warning from gcc-4.6. 2011-06-14 [r784] Andrew M. Bishop <amb> * xml/routino-tagging.xml: Fix error with handling ferry routes (patch from Michael Günnewig). 2011-06-07 Andrew M. Bishop <amb> Version 2.0.1 released 2011-06-07 [r782] Andrew M. Bishop <amb> * doc/html/readme.html: Update for version 2.0.1. 2011-06-07 [r781] Andrew M. Bishop <amb> * doc/NEWS.txt, doc/README.txt, FILES: Update for version 2.0.1. 2011-06-05 [r779-780] Andrew M. Bishop <amb> * src/superx.c, src/visualiser.c, src/nodes.c, src/relationsx.c, src/waysx.c, src/filedumper.c, src/segmentsx.c, src/nodesx.c, src/relations.c: Replace int with appropriate defined types (mostly index_t, ll_bin_t and ll_bin2_t). * src/types.h: Add some comments to clarify the latitude/longitude bin types and a new type for latitude/longitude bins (two dimensions). 2011-06-05 [r777-778] Andrew M. Bishop <amb> * src/profiles.c: Change unsigned int to int for consistency with the rest of the code. * src/optimiser.c: Remove unused variable (hangover from previous U-turn searching). 2011-06-04 [r776] Andrew M. Bishop <amb> * src/superx.c, src/osmparser.c: Add missing header file. 2011-06-04 [r773-775] Andrew M. Bishop <amb> * src/osmparser.c: Convert integer and floating point values inline. Check that node, way and relation IDs don't need to be long long types. * src/translations.c, src/profiles.c: Convert integer and floating point values inline. * src/xmlparse.h, src/xmlparse.l: The XMLPARSE_ASSERT_(INTEGER|FLOATING) functions now don't return the converted type. 2011-06-04 [r770-772] Andrew M. Bishop <amb> * src/segments.h: Add a type cast to a macro. * src/segmentsx.c, src/segmentsx.h: Change name of function parameters to clarify what they are. * src/relationsx.c, src/segmentsx.c: Fix some more potential problems with a transition to 64-bit node_t. 2011-06-03 [r761] Andrew M. Bishop <amb> * src/superx.c, src/relationsx.c, src/segmentsx.c: Shorten the messages when running to avoid going beyond 80 characters. 2011-06-03 [r759-760] Andrew M. Bishop <amb> * src/visualiser.c: Remove hard-coded numeric value and replace with a #define value. * src/superx.c, src/relationsx.c, src/segmentsx.c, src/typesx.h: Remove hard-coded numeric values and replace with a common #define value. Handle overflows consistently. 2011-06-03 [r758] Andrew M. Bishop <amb> * src/nodesx.h, src/typesx.h: Move some macros from nodesx.h to typesx.h. 2011-06-03 [r757] Andrew M. Bishop <amb> * src/relationsx.c, src/tagmodifier.c, src/optimiser.c, src/osmparser.c, src/waysx.c: Rationalise the increment of the numbers used for the output when not --loggable. 2011-06-01 [r756] Andrew M. Bishop <amb> * src/relationsx.c: Delete turn relations that refer to nodes or ways that don't exist as soon as possible. 2011-05-31 [r755] Andrew M. Bishop <amb> * src/nodesx.h, src/osmparser.c, src/segmentsx.c, src/waysx.h, src/typesx.h: Fix some obvious problems with a transition to 64-bit node_t. 2011-05-31 [r754] Andrew M. Bishop <amb> * src/tagging.c, src/translations.c, src/profiles.c: Fix inconsistent C language version usage. 2011-05-30 Andrew M. Bishop <amb> Version 2.0 released 2011-05-30 [r742] Andrew M. Bishop <amb> * src/relationsx.c: Don't crash on malformed relations, give better reporting of number when processing them. 2011-05-30 [r741] Andrew M. Bishop <amb> * FILES: Update for release. 2011-05-30 [r740] Andrew M. Bishop <amb> * src/segmentsx.c: Fix spelling mistake in function parameter comment. 2011-05-30 [r738-739] Andrew M. Bishop <amb> * src/test/Makefile: Make sure that clean really means it. * doc/NEWS.txt, doc/README.txt, doc/html/readme.html: Update for version 2.0 release. 2011-05-30 [r737] Andrew M. Bishop <amb> * doc/html/usage.html, doc/html/algorithm.html, doc/TAGGING.txt, doc/html/index.html, doc/html/data.html, doc/USAGE.txt, doc/ALGORITHM.txt, doc/DATA.txt, doc/html/tagging.html: Run a spelling check on the documentation. 2011-05-30 [r736] Andrew M. Bishop <amb> * doc/html/algorithm.html: Describe new philosophy of alloing U-turn at waypoints to avoid dead-ends. 2011-05-30 [r735] Andrew M. Bishop <amb> * src/optimiser.c: Fix problem with test case loops WP11. 2011-05-30 [r734] Andrew M. Bishop <amb> * src/optimiser.c, src/functions.h, src/router.c: Change the philosophy on dead ends so that now a U-turn is made at the waypoint if continuing in the previous direction would lead into a dead-end. This simplifies the algorithm and removes a lot of special case handling. 2011-05-30 [r731-733] Andrew M. Bishop <amb> * src/test/loops.osm: Give the loops unique names. * src/test/a-b-c.sh, src/test/start-1-finish.sh: Print less information when running. * src/fakes.c: Fix error with calculating length of fake segment and optimise the ExtraFakeSegment function. 2011-05-29 [r730] Andrew M. Bishop <amb> * src/test/a-b-c.sh: Exit on error. 2011-05-21 [r729] Andrew M. Bishop <amb> * src/optimiser.c, src/functions.h, src/router.c: Find all routes in the no-super.osm test case. 2011-05-20 [r727-728] Andrew M. Bishop <amb> * src/test/no-super.osm: Add new test cases for fake nodes/segments. * src/fakes.c, src/optimiser.c, src/fakes.h: Add a special function to handle the detection of U-turns between two fake segments that sit on the same real segment. 2011-05-18 [r725-726] Andrew M. Bishop <amb> * src/test/a-b-c.sh (added), src/test, src/test/no-super.sh (added), src/test/no-super.osm (added): Add new test cases for very simple routes with no super-nodes. * src/fakes.c: Fix routing between two fake nodes on the same segment (again). 2011-05-18 [r724] Andrew M. Bishop <amb> * src/test/dead-ends.osm: Add a new waypoint at the very end of a dead-end (not super-node). 2011-05-18 [r722-723] Andrew M. Bishop <amb> * src/optimiser.c, src/functions.h: Remove the override flag from FindNormalRoute(). * src/optimiser.c, src/functions.h, src/router.c: Use the beginning of the route as the start of the combined route (since it may have special override segments in it). 2011-05-17 [r721] Andrew M. Bishop <amb> * src/optimiser.c, src/functions.h, src/router.c: Change the order of the arguments to the routing functions (move profile earlier). 2011-05-17 [r720] Andrew M. Bishop <amb> * doc/Makefile: Install the license file in the doc directory. 2011-05-15 [r719] Andrew M. Bishop <amb> * src/optimiser.c, src/router.c: Finally find a way out of dead-ends, might have some nasty side-effects though. 2011-05-14 [r717-718] Andrew M. Bishop <amb> * src/optimiser.c: Fix slim/non-slim variation. * src/test/dead-ends.osm: Add another waypoint at the terminal super-node. 2011-05-13 [r716] Andrew M. Bishop <amb> * src/test/turns.osm: Force waypoint 13 to go round the roundabout twice. 2011-05-12 [r714-715] Andrew M. Bishop <amb> * src/test/turns.osm (added), src/test, src/test/turns.sh (added): Added turn restriction test cases. * src/test/start-1-finish.sh: Bug fix for logging. 2011-05-11 [r712-713] Andrew M. Bishop <amb> * src/superx.c, src/segmentsx.c: Add comments to assert statements that don't already have them. * src/optimiser.c: Crash out if infinite loop (usually caused by a bug elsewhere). 2011-05-08 [r708-711] Andrew M. Bishop <amb> * src/test/start-1-finish.sh: Run filedumper, allow running under a run-time debugger. * src/optimiser.c: Remove clash of cache locations. * src/test/Makefile: Print an extra message after comparing the slim and non-slim results. * src/segments.c, src/segments.h: Make the NextSegment function inline (move from segments.c to segments.h). 2011-05-08 [r707] Andrew M. Bishop <amb> * src/segments.c, src/visualiser.c, src/nodes.c, src/optimiser.c, src/filedumper.c, src/nodes.h, src/output.c: The FirstSegment function now takes a cache position argument. 2011-05-08 [r706] Andrew M. Bishop <amb> * src/segments.c, src/nodes.c, src/relations.c, src/ways.c: Ensure that the correct number of cached nodes, segments, ways or relations are initialised. 2011-05-08 [r705] Andrew M. Bishop <amb> * src/ways.h, src/filedumper.c, src/ways.c: Remove the unused name caching for the ways (in slim mode). 2011-05-08 [r704] Andrew M. Bishop <amb> * src/segments.h, src/segmentsx.h: Simplify the lookup of the segment index in slim mode. 2011-05-07 [r703] Andrew M. Bishop <amb> * src/optimiser.c: Allow the start of a route to double-back to the initial node even if a super-node. 2011-05-07 [r700-702] Andrew M. Bishop <amb> * src/test/loops.osm: Rename the waypoints. * src/files.c: Remove useless assert statement. * src/optimiser.c, src/nodes.h, src/segmentsx.c: Fix bugs found by valgrind. 2011-05-07 [r697-699] Andrew M. Bishop <amb> * src/optimiser.c: Handle things correctly if the FindSuperSegment() function is called with a fake segment. * src/test/Makefile: Ensure that executables are compiled before running the tests. * src/Makefile: Require slim and non-slim versions of fakes.o. 2011-05-07 [r695-696] Andrew M. Bishop <amb> * src/router.c: Calculate an override version of the start of the route to get out of dead-ends. * src/output.c: Use real segments when making comparisons (not pointers or non-real segments). 2011-05-06 [r690-694] Andrew M. Bishop <amb> * src/test: Ignore files and directories generated by running 'make test'. * src/xml: Ignore files generated by running 'make test'. * src/Makefile: Allow running 'make test' in the source directory. * src/test/waypoints.pl (added), src/test/loops.osm (added), src/test/Makefile (added), src/test/dead-ends.sh (added), src/test/dead-ends.osm (added), src/test/start-1-finish.sh (added), src/test/loops.sh (added): Routing test cases. * src/test (added): A directory for routing test cases. 2011-05-06 [r689] Andrew M. Bishop <amb> * src/xml/test/bad-attr-character-ref.xml (removed): Remove false-positive test case (a bug in xmlparse.l previously flagged this as an error). 2011-04-27 [r688] Andrew M. Bishop <amb> * src/optimiser.c: Force going straight on if a waypoint is a super-node. 2011-04-27 [r686-687] Andrew M. Bishop <amb> * src/optimiser.c: Improve the FindSuperSegment() function when the existing segment is the right answer. * src/optimiser.c, src/router.c: Rename the variables in and around the CombineRoutes() function for clarity. 2011-04-26 [r685] Andrew M. Bishop <amb> * src/optimiser.c: When starting a super-route ensure that all starting segments are super-segments to avoid u-turns at the starting super-node. 2011-04-25 [r683-684] Andrew M. Bishop <amb> * src/output.c: Fix error with turn description. * src/output.c: Include a point number (hidden) in the HTML file. 2011-04-24 [r682] Andrew M. Bishop <amb> * src/waysx.c, src/waysx.h: Fix error is last semi-automated update. 2011-04-24 [r681] Andrew M. Bishop <amb> * src/segments.c, src/superx.c, src/visualiser.c, src/relationsx.c, src/segments.h, src/superx.h, src/filedumper.c, src/nodesx.c, src/relations.c, src/nodesx.h, src/relations.h, src/nodes.c, src/waysx.c, src/nodes.h, src/segmentsx.c, src/waysx.h, src/segmentsx.h, src/ways.c: Make the comments more consistent. 2011-04-24 [r680] Andrew M. Bishop <amb> * src/translations.h, src/fakes.c, src/filedumper.c, src/fakes.h, src/nodesx.c, src/output.c, src/results.c, src/files.c, src/nodesx.h, src/results.h, src/files.h, src/nodes.c, src/planetsplitter.c, src/osmparser.c, src/nodes.h, src/profiles.c, src/segments.c, src/sorting.c, src/tagging.h, src/visualiser.c, src/superx.c, src/logging.c, src/ways.h, src/profiles.h, src/relationsx.c, src/segments.h, src/sorting.h, src/tagmodifier.c, src/visualiser.h, src/superx.h, src/logging.h, src/relationsx.h, src/relations.c, src/functionsx.h, src/relations.h, src/types.h, src/optimiser.c, src/waysx.c, src/segmentsx.c, src/functions.h, src/waysx.h, src/router.c, src/segmentsx.h: Update comments throughout the source code. 2011-04-23 [r679] Andrew M. Bishop <amb> * doc/html/algorithm.html, doc/ALGORITHM.txt: Add description of U-turns at dead-ends. 2011-04-23 [r678] Andrew M. Bishop <amb> * src/optimiser.c, src/functions.h, src/output.c, src/router.c: Allow U-turns at dead-ends to avoid getting stuck. 2011-04-22 [r677] Andrew M. Bishop <amb> * src/optimiser.c, src/router.c: Handle failure to find route gracefully. 2011-04-22 [r676] Andrew M. Bishop <amb> * web/www/routino/visualiser.cgi: Another change related to turn restrictions (missed in last checkin). 2011-04-22 [r675] Andrew M. Bishop <amb> * src/segments.c, doc/html/usage.html, web/www/routino/router.cgi, src/segments.h, doc/USAGE.txt, src/router.c: Add in the option to specify an initial heading. 2011-04-22 [r674] Andrew M. Bishop <amb> * src/segmentsx.c, src/nodesx.c: Finish off the geographic sorting of segments. 2011-04-22 [r673] Andrew M. Bishop <amb> * src/filedumper.c: Use the common TurnAngle() function from segments.c instead of a local one. 2011-04-22 [r672] Andrew M. Bishop <amb> * src/segments.c, src/segments.h, src/output.c: Move the turn_angle() and bearing_angle() functions from output.c into segments.c. 2011-04-22 [r671] Andrew M. Bishop <amb> * doc/html/algorithm.html, doc/ALGORITHM.txt: Simplify the language used describing the highway properties. 2011-03-21 [r670] Andrew M. Bishop <amb> * src/relationsx.c: Ignore turn restrictions that ban going the wrong way down a one-way road. 2011-03-21 [r668-669] Andrew M. Bishop <amb> * src/segments.c, src/filedumper.c, src/profiles.c: Include math.h for files that use math functions. * src/types.h: Round the node latitude/longitude rather than truncating. 2011-03-21 [r667] Andrew M. Bishop <amb> * src/filedumper.c: Include some of the Routino internal information when dumping an OSM format output. 2011-03-21 [r666] Andrew M. Bishop <amb> * src/segmentsx.c: Fix bug with segment deduplication. 2011-03-21 [r665] Andrew M. Bishop <amb> * src/relationsx.c, src/planetsplitter.c, src/relationsx.h, src/nodesx.c: Sort the segments geographically. 2011-03-20 [r664] Andrew M. Bishop <amb> * src/nodesx.c: Sort nodes strictly by latitude/longitude within the bins (helps with regresssion testing). 2011-03-20 [r661-663] Andrew M. Bishop <amb> * web/www/routino/documentation: Ignore extra image files. * src/xmlparse.l: Ensure that UTF-8 is used internally when reading in a numeric entity. * src/router.c: Fix bug found by gcc-4.5. 2011-03-20 [r660] Andrew M. Bishop <amb> * src/segmentsx.c: Return early from the IndexSegments function if there are no segments. 2011-03-19 [r659] Andrew M. Bishop <amb> * doc/html/algorithm.html, doc/html/example0.png, doc/html/example1.png, doc/ALGORITHM.txt, doc/html/example2.png, doc/html/example3.png (added), doc/html/example4.png (added): Update the algorithm documents for turn restrictions. 2011-03-19 [r658] Andrew M. Bishop <amb> * src/segmentsx.c: Deduplicate in pairs only (i.e. if a segment occurs 4 times then keep 2 of them). 2011-03-19 [r657] Andrew M. Bishop <amb> * src/segmentsx.c: Cache the recently used ways when de-duplicating segments. 2011-03-19 [r656] Andrew M. Bishop <amb> * src/superx.c: Use previous segment in router rather than looking at previous node. 2011-03-12 [r655] Andrew M. Bishop <amb> * src/segmentsx.c, src/nodesx.c: Make the used nodes marker bit-wide rather than byte-wide. 2011-03-12 [r654] Andrew M. Bishop <amb> * src/nodesx.h, src/superx.c, src/nodesx.c: Make the nodes super marker bit-wide rather than byte-wide. 2011-03-12 [r653] Andrew M. Bishop <amb> * src/nodesx.h, src/superx.c, src/planetsplitter.c, src/superx.h, src/nodesx.c: Make the nodes super marker a boolean. 2011-03-12 [r652] Andrew M. Bishop <amb> * src/superx.c, src/planetsplitter.c, src/superx.h: Optimise the search for supernodes, consider traffic when counting segments that meet at a node. 2011-02-27 [r651] Andrew M. Bishop <amb> * src/nodesx.h, src/superx.c, src/relationsx.c, src/waysx.c, src/segmentsx.c, src/waysx.h, src/segmentsx.h: Rename the xdata and xcached members of the nodesx, segmentsx and waysx structures. 2011-02-27 [r650] Andrew M. Bishop <amb> * src/nodesx.h, src/relationsx.c, src/planetsplitter.c, src/waysx.c, src/relationsx.h, src/segmentsx.c, src/nodesx.c, src/waysx.h, src/segmentsx.h: Don't have both xnumber and number in the nodesx, segmentsx, waysx and relationsx structures. 2011-02-27 [r649] Andrew M. Bishop <amb> * src/segmentsx.c, src/segmentsx.h: Remove a now unused array of segment indexes. 2011-02-27 [r648] Andrew M. Bishop <amb> * src/logging.c: Handle the case where the middle string is shorter than the previous one. 2011-02-26 [r646-647] Andrew M. Bishop <amb> * src/superx.c: Use the OtherNode and IsOneWay* macros when routing. * src/superx.c, src/relationsx.c, src/segmentsx.c, src/segmentsx.h: Remove a pair of functions that are no longer used and rename the other pair. 2011-02-26 [r645] Andrew M. Bishop <amb> * src/relationsx.c, src/planetsplitter.c, src/relationsx.h: Fixed the turn relations with a few more functions. 2011-02-26 [r644] Andrew M. Bishop <amb> * src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h: Renamed a couple of functions for clarity. 2011-02-26 [r643] Andrew M. Bishop <amb> * src/nodesx.h, src/superx.c, src/relationsx.c, src/planetsplitter.c, src/osmparser.c, src/segmentsx.c, src/nodesx.c, src/segmentsx.h: Go back to the internal structure used (but reverted) during version 1.2 development where each segment is stored only once. This halves the memory usage (mmap files or just files) for planetsplitter. This is allowed because a new algorithm to create the node to segment indexes makes it simpler now that it was. This change is required so that super-node/segment optimisation doesn't remove mutual loops. This change doesn't handle turn restrictions yet. 2011-02-24 [r642] Andrew M. Bishop <amb> * src/superx.c: Change a variable name to match the one used in optimiser.c. 2011-02-24 [r641] Andrew M. Bishop <amb> * src/superx.c, src/segmentsx.c: Create super-segments that go in loops and preserve all such loops. 2011-02-23 [r640] Andrew M. Bishop <amb> * src/segmentsx.c: Fix latent bug that can occur when de-duplicating segments. 2011-02-23 [r639] Andrew M. Bishop <amb> * xml/Makefile: Fix error in creating web files containing profiles. 2011-02-20 [r638] Andrew M. Bishop <amb> * src/optimiser.c: Allow U-turns at via points for transport types that ignore turn restrictions. 2011-02-20 [r637] Andrew M. Bishop <amb> * src/optimiser.c, src/functions.h, src/fakes.h: Don't allow U-turns at via points (but doesn't necessarily include turning round in the score when searching for optimum). 2011-02-18 [r636] Andrew M. Bishop <amb> * src/optimiser.c: Fix the code that stops routes doubling-back on themselves. 2011-02-11 [r635] Andrew M. Bishop <amb> * web/www/routino/update-profiles.pl (added), xml/Makefile, web/www/routino, web/www/routino/router.html.en, web/www/routino/router.pl, web/www/routino/router.html.nl, web/www/routino/router.js: Move the Javascript and Perl profiles into separate files. 2011-02-11 [r634] Andrew M. Bishop <amb> * doc/html/installation.html, web/www/openlayers/install.sh, doc/INSTALL.txt: Change to OpenLayers 2.10. 2011-02-11 [r632-633] Andrew M. Bishop <amb> * src/output.c: Don't confuse fake segments with junctions. * src/optimiser.c: Fix problem with only one super-node in the route. 2011-02-11 [r631] Andrew M. Bishop <amb> * src/fakes.c: Fix bug with generating fake segments. 2011-02-11 [r629-630] Andrew M. Bishop <amb> * xml/routino-profiles.xml: Wheelchairs do not obey turn restrictions. * web/www/routino/results.cgi, web/www/routino/router.html.en, src/router.c, web/www/routino/router.pl, web/www/routino/router.html.nl, web/www/routino/router.js: Print a message if routed OK, allow web users to see router output (now logged to file). 2011-02-05 [r628] Andrew M. Bishop <amb> * src/filedumper.c: Fix statistics for ways (broken by change for relations). 2011-02-05 [r626-627] Andrew M. Bishop <amb> * src/superx.c, src/optimiser.c, src/segmentsx.c, src/nodesx.c: Change some output printed while running. * src/filedumper.c: Fix problem with dumping turn relations. 2011-02-05 [r625] Andrew M. Bishop <amb> * src/filedumper.c: Print out the size of the relations.mem file. 2011-02-05 [r623-624] Andrew M. Bishop <amb> * web/www/routino/visualiser.cgi: Updated the visualiser to include turn restrictions. * src/visualiser.c, doc/html/usage.html, web/www/routino/visualiser.js, src/visualiser.h, src/filedumper.c, doc/USAGE.txt, web/www/routino/visualiser.html: Updated the visualiser to include turn restrictions. 2011-02-05 [r622] Andrew M. Bishop <amb> * src/profiles.h, web/www/routino/noscript.cgi, web/www/routino/customrouter.cgi, xml/routino-profiles.xsd, web/www/routino/noscript.template.html, xml/routino-profiles.xml, doc/html/usage.html, web/www/routino/router.cgi, src/optimiser.c, web/www/routino/router.html.en, doc/USAGE.txt, src/router.c, web/www/routino/router.pl, src/profiles.c, web/www/routino/router.html.nl, web/www/routino/router.js: Include the option to obey turn restrictions in the profile for each transport type. 2011-01-30 [r620-621] Andrew M. Bishop <amb> * doc/html/algorithm.html, doc/ALGORITHM.txt: Update algorithm description to include turn restrictions and a note about how the algorithm terminates the search. * doc/TAGGING.txt, doc/USAGE.txt: Update text versions of documents to match HTML. 2011-01-30 [r618-619] Andrew M. Bishop <amb> * src/output.c: Correct comments. * src/filedumper.c: Put a "restriction" tag into the turn restrictions when dumped. 2011-01-30 [r617] Andrew M. Bishop <amb> * src/optimiser.c, src/functions.h, src/router.c: Ensure that the first/last node and first/last segment of the Results structure are filled in properly. 2011-01-30 [r616] Andrew M. Bishop <amb> * src/optimiser.c: Fix routing where the final node is a super-node. 2011-01-29 [r615] Andrew M. Bishop <amb> * src/relationsx.c: All nodes adjacent to a turn restriction must also be turn restrictions. 2011-01-29 [r613-614] Andrew M. Bishop <amb> * src/files.h: Fix assert problem. * src/Makefile, src/xml/Makefile: Make dependency filename based on object file name (fixes overwriting problem with slim versions). 2011-01-29 [r612] Andrew M. Bishop <amb> * src/superx.c, src/files.h, src/relationsx.c, src/waysx.c, src/segmentsx.c, src/nodesx.c, src/files.c: Ensure that record of closed file descriptors are erased. 2011-01-29 [r610-611] Andrew M. Bishop <amb> * src/optimiser.c: Don't check for turn relations in FindStartRoutes(). * src/optimiser.c: Add some comments, shuffle a few lines of code. 2011-01-29 [r609] Andrew M. Bishop <amb> * src/optimiser.c: Fix the code that allows overshooting by one node when finding finish nodes. 2011-01-29 [r608] Andrew M. Bishop <amb> * src/fakes.c, src/optimiser.c, src/Makefile, src/fakes.h, src/relations.c, src/router.c: When finding a normal route check for turn relations (considering previous segment). When finding turn relations convert fake segments into real ones. 2011-01-29 [r607] Andrew M. Bishop <amb> * src/nodes.c: Fix pathological case of rounding error for points almost exactly on a segment. 2011-01-29 [r606] Andrew M. Bishop <amb> * src/superx.c: Fix for route finding in planetsplitter. 2011-01-24 [r605] Andrew M. Bishop <amb> * src/results.h, src/superx.c, src/optimiser.c, src/functions.h, src/output.c, src/router.c, src/results.c: Finds routes and obeys turn restrictions (only tested with very simple route and restrictions, more turn restriction testing and regression testing required). 2011-01-16 [r604] Andrew M. Bishop <amb> * src/relations.h, src/relations.c: Fix logic error with searching for via nodes. 2011-01-15 [r603] Andrew M. Bishop <amb> * src/results.h, src/superx.c, src/optimiser.c, src/output.c, src/results.c: Change the results structure to contain next segment and rename elements to clarify prev/next node and prev/next segment. 2011-01-15 [r602] Andrew M. Bishop <amb> * src/segmentsx.c: Change to comment for clarification. 2011-01-15 [r599-601] Andrew M. Bishop <amb> * doc/html/usage.html: Correction and clarification to filedumper usage. * src/nodesx.h: Change to comment for clarification. * src/relations.h, src/relationsx.c, src/planetsplitter.c, src/filedumper.c, src/relationsx.h, src/relations.c: Store the 'from' and 'to' segments and not nodes (to handle fake nodes inserted in segments). 2011-01-15 [r598] Andrew M. Bishop <amb> * src/visualiser.c, src/output.c: Change the IsSuperNode() macro to take a single pointer argument. 2011-01-09 [r597] Andrew M. Bishop <amb> * src/superx.c, src/relationsx.c, src/types.h: Make the 'from' and 'to' nodes of turn restrictions super-nodes. 2011-01-09 [r596] Andrew M. Bishop <amb> * src/relations.h, src/optimiser.c, src/nodes.h, src/relations.c: Check turn relations when finding a route. 2011-01-08 [r595] Andrew M. Bishop <amb> * src/optimiser.c, src/filedumper.c, src/nodes.h: Change the IsSuperNode() macro to take a single pointer argument. 2011-01-08 [r594] Andrew M. Bishop <amb> * src/optimiser.c: Move the local variables closer to where they are used. 2011-01-08 [r593] Andrew M. Bishop <amb> * doc/html/tagging.html: Add information about the tags used for turn relations. 2010-12-29 Andrew M. Bishop <amb> Changed version control environment from RCS to CVS to SVN. 2010-12-29 Andrew M. Bishop <amb> * doc/NEWS.txt: Temporary checkin to allow transition from RCS to CVS to SVN. * xml/routino-tagging.xml: Pass through turn relation information. 2010-12-21 Andrew M. Bishop <amb> * src/filedumper.c: Add turn relations to the statistics and dump outputs. 2010-12-21 Andrew M. Bishop <amb> * src/ways.h, src/segments.h, src/nodes.h, src/ways.c: Optimise the node, segment, way lookup in slim mode by checking if the previous index is being requested again. * src/relations.h, src/relations.c: Optimise the turn relation lookup. 2010-12-21 Andrew M. Bishop <amb> * src/relations.h, src/relations.c: Add functions to search for turn relations that match a particular node. 2010-12-21 Andrew M. Bishop <amb> * src/relations.h (added), src/relations.c (added): Initial revision * src/superx.c, src/relationsx.c, src/types.h: Update the nodes to force a super-node where there is a turn restriction. 2010-12-21 Andrew M. Bishop <amb> * src/relationsx.c, src/planetsplitter.c, src/relationsx.h: Finish the processing of the turn relations now that the extra node lookup table is in place. 2010-12-20 Andrew M. Bishop <amb> * src/nodesx.c, src/segmentsx.c, src/segmentsx.h: Handle the SegmentX Segment in the same way as the other data structures (map into memory when used, open/close the file if slim). Create the real nodes without mapping the segments into memory. * src/nodesx.c, src/nodesx.h, src/relationsx.c, src/segmentsx.c, src/segmentsx.h, src/waysx.h: Make the PutBack*() functions be no-ops in slim mode and remove the pre-processor guards from around the function calls. * src/nodesx.c: Don't map the file into memory for writing out the Nodes file. * src/superx.c, src/waysx.c, src/waysx.h, src/nodesx.c, src/relationsx.c, src/segmentsx.c: Close and open the files for the slim case to match the map/unmap of files for the non-slim case. * src/nodesx.c, src/segmentsx.c: Make the last two changes work for slim mode. * src/nodesx.c, src/nodesx.h: Create the Nodes offset table at the end rather than during the sort process. * src/nodesx.c, src/nodesx.h, src/segmentsx.c, src/segmentsx.h: Don't maintain a copy of the whole set of Nodes along with the NodeXs but generate the Node from the NodeX when written to disk. Create a lookup table between the original index and the geographically sorted index. 2010-12-19 Andrew M. Bishop <amb> * src/planetsplitter.c, src/relationsx.c: Process the turn relations (apart from updating the indexes to the geographically sorted nodes). * src/superx.c: Handle the case of no super segments better. * src/planetsplitter.c: Change around the order of the functions. * src/relationsx.c: A temporary check-in that handles turn restrictions more complicated than actually allowed (ways must start/end at the via node). * xml/routino-tagging.xml: Add mini-roundabouts. * src/sorting.c: Bug fix for last change. 2010-12-18 Andrew M. Bishop <amb> * src/segmentsx.c: Remove the test for sorting zero segments (now that the sort function doesn't crash). * src/nodesx.c, src/segmentsx.c, src/segmentsx.h, src/superx.c: Duplicate the IndexFirstSegmentX() and IndexNextSegmentX() functions to create two distinct one for use at different times. * src/sorting.c: Handle the case where there is no data in the file. * src/Makefile, src/filedumper.c, src/functions.h, src/optimiser.c, src/planetsplitter.c, src/relationsx.c, src/relationsx.h, src/router.c, src/types.h: Add a Relations data type and write out the turn relations that have been read in. Still doesn't perform the required processing after reading the data or use the information for routing. 2010-12-12 Andrew M. Bishop <amb> * src/osmparser.c, src/typesx.h: Change the names of the enumerated types for turn restrictions. 2010-12-05 Andrew M. Bishop <amb> * src/osmparser.c, src/relationsx.c, src/relationsx.h, src/typesx.h: Parse turn restriction relations and store ones with a single via node. (Doesn't do anything with them yet). * src/nodesx.h, src/segmentsx.h, src/waysx.h: Updated the comments for clarity. 2010-12-04 Andrew M. Bishop <amb> * src/filedumper.c, src/nodesx.c, src/nodesx.h, src/osmparser.c, src/types.h: Improved version of previous change. 2010-11-28 Andrew M. Bishop <amb> * src/filedumper.c, src/nodesx.c, src/nodesx.h, src/osmparser.c, src/types.h: Add parsing of mini-roundabouts. * xml/routino-tagging.xml, src/filedumper.c, src/osmparser.c, src/types.c, src/types.h: Remove the roundabout type from the parsing. * src/fakes.c: Fix some problems with fake nodes, in particular a route between two fake nodes on the same segment can now be calculated. * src/nodes.c: Return the two nodes of a segment in the same order each time. 2010-11-27 Andrew M. Bishop <amb> * src/fakes.h, src/sorting.h: New file. * src/fakes.c, src/functions.h, src/nodesx.c, src/optimiser.c, src/output.c, src/relationsx.c, src/router.c, src/segmentsx.c, src/sorting.c, src/types.h, src/waysx.c: Split functions.h into fakes.h, sorting.h and the remainder in functions.h. * src/optimiser.c, src/router.c: Move some of the complexity from router.c to optimiser.c. * src/types.c, src/types.h, src/ways.h, src/waysx.c: Change the wayprop_t type into properties_t. * src/nodesx.h, src/osmparser.c, src/profiles.c, src/profiles.h, src/relationsx.c, src/relationsx.h, src/types.c, src/types.h, src/ways.h, src/waysx.c, src/filedumper.c, src/nodes.h, src/nodesx.c: Change the allow_t type into transports_t (and associated enums and macros). * src/types.h, src/ways.h: Change the waytype_t type into highway_t. 2010-11-14 Andrew M. Bishop <amb> * xml/routino-tagging.xml: Fix mis-spelling with surface=asphalt tag (patch from Michael Günnewig). * src/filedumper.c, src/types.c, src/types.h, src/ways.h, src/waysx.c: Print out statistics about what highways are included in the database. 2010-11-13 Andrew M. Bishop <amb> Version 1.5.1 released 2010-11-13 Andrew M. Bishop <amb> * doc/NEWS.txt, doc/README.txt: Updated for version 1.5.1. * doc/USAGE.txt: Update program usage for new logging option. * xml/routino-translations.xml: Add translation for ferry into German (patch from Michael Günnewig). * src/relationsx.c: Fix bug with relation processing. * src/logging.h: Add GCC attributes for the logging functions. * src/logging.h, src/logging.c: New file. * src/Makefile, src/nodesx.c, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/relationsx.c, src/router.c, src/segmentsx.c, src/superx.c, src/tagmodifier.c, src/waysx.c: Add an option to make the output more suitable for a log file. 2010-10-31 Andrew M. Bishop <amb> * src/files.c: Ensure that enough memory gets allocated in FileName() function. 2010-10-30 Andrew M. Bishop <amb> Version 1.5 released 2010-10-30 Andrew M. Bishop <amb> * doc/README.txt, doc/NEWS.txt: Updated for version 1.5. 2010-10-18 Andrew M. Bishop <amb> * src/profiles.c: Use sqrt() function to reduce the effect of property preferences close to 50%. Ensure that preferences cannot equal zero (error on division). * doc/ALGORITHM.txt, doc/INSTALL.txt, doc/USAGE.txt: Updated with information about the new features. * doc/CONFIGURATION.txt, doc/TAGGING.txt: Add in the footroute and bicycleroute configuration options and route relation tag processing. 2010-10-16 Andrew M. Bishop <amb> * src/files.c: Fixed some comments for recent changes. 2010-10-09 Andrew M. Bishop <amb> * xml/routino-profiles.xml: Add footroute and bicycleroute to the profiles. * src/files.c, src/files.h, src/relationsx.c: The ReOpenFile() function cannot be read/write because it stops the router running with read-only access to the database. * src/nodesx.c, src/relationsx.c, src/segmentsx.c, src/superx.c: Fix previous check-in on this set of files. * src/xmlparse.l: Ensure that comparisons are made with unsigned chars. 2010-10-03 Andrew M. Bishop <amb> * src/nodesx.c, src/relationsx.c, src/segmentsx.c, src/superx.c: Don't try mapping a file if it is zero length (e.g. no super-segments). * src/files.c, src/files.h, src/relationsx.c: Add a function to map a file writeable and use it for updating the ways when processing route relations. * src/relationsx.c: Avoid self-recursion and adding route information to relations that already have it. 2010-09-25 Andrew M. Bishop <amb> * src/osmparser.c, src/relationsx.c, src/relationsx.h, src/waysx.h: Apply the route=bicycle or route=foot tags from the relation to all ways contained in it and to all ways in all sub-relations of it (including recursion to depth 5). This requires all relations to be stored even if not routes because they might be included by another relation that is. * src/segmentsx.c: Don't sort the (super-)segments if there are none. * src/nodesx.c, src/functions.h, src/sorting.c: Rename the heapsort() function to filesort_heapsort(). 2010-09-19 Andrew M. Bishop <amb> * src/files.c, src/files.h, src/nodesx.c, src/segmentsx.c, src/sorting.c, src/waysx.c: Change the names of the functions used to open files, change the ReOpen function to open R/W. * src/relationsx.c: Remove the sorting of the route relations. 2010-09-17 Andrew M. Bishop <amb> * src/nodesx.c, src/segmentsx.c: Zero the NodesFile and SegmentsFile data structures before writing them (zeros unused bytes). * src/planetsplitter.c, src/waysx.c, src/waysx.h: Split the sorting of waysx from the compacting so that the route relation information can be included before compacting. * xml/routino-tagging.xml, src/functionsx.h, src/osmparser.c, src/planetsplitter.c: Parse relations and extract foot and bicycle routes to be added as properties to the ways. * src/types.c, src/types.h: Add footroute and bicycleroute properties. * src/relationsx.c, src/relationsx.h: New file. * src/typesx.h, src/Makefile: Add files and datatypes for processing relations. * xml/routino-tagging-nomodify.xml, xml/routino-tagging.xsd, src/tagging.c: Process tags for relations. 2010-09-16 Andrew M. Bishop <amb> * src/waysx.c, src/segmentsx.c, src/nodesx.c: Fix the comment for the Append...() function. 2010-09-15 Andrew M. Bishop <amb> * xml/routino-profiles.xml, xml/routino-tagging.xml, xml/routino-translations.xml, src/output.c, src/translations.c, src/types.c, src/types.h: Add routing on ferries. * src/filedumper.c, src/planetsplitter.c, src/router.c: Bug fix for last change. * src/filedumper.c, src/planetsplitter.c, src/router.c: Improve the usage information to tell which command line argument was in error. * src/profiles.c: Fix --help-profile-perl option and make perl and JSON outputs more pretty. * src/router.c, src/planetsplitter.c: Usage message has wrong option name. * src/xmlparse.l: Fix last change to make UTF-8 parsing more strict, also added strict conversion to XML-safe character references. * src/translations.c: Convert translations read from file into XML-safe encodings before using them. * src/output.c: HTML file has UTF-8 meta-tag. * xml/routino-translations.xml: Revert to UTF-8 multi-byte representations instead of character references. 2010-09-14 Andrew M. Bishop <amb> * src/xmlparse.l: Stricter checking on XML data (Unicode). 2010-09-05 Andrew M. Bishop <amb> * xml/Makefile, src/Makefile, doc/Makefile, Makefile: Move all of the installation pathnames to the top level Makefile and include it into the lower level makefiles. * src/planetsplitter.c, src/router.c, src/tagmodifier.c: Use the installed tagging.xml, profiles.xml or translations.xml files as the fallback option if no other given. 2010-09-04 Andrew M. Bishop <amb> * xml/routino-translations.xml: Change German translations from named HTML character encodings to numeric ones (works in GPX files as well as HTML). * xml/routino-translations.xml: Added Dutch translations (from Jan Jansen). 2010-08-30 Andrew M. Bishop <amb> * xml/routino-translations.xml: Change German translation to UTF-8, add comments indicating the origin of the two translations. * xml/routino-tagging-nomodify.xml: Relation rules are not allowed at all. * xml/Makefile, src/Makefile, doc/Makefile, Makefile: Added 'install' to top level (and lower) Makefiles. * src/ways.h, src/output.c: Change the names of the functions used to get the highway names. * src/filedumper.c: Only print the way name in OSM output when the way has a name. Change the names of the functions used to get the highway names. * src/profiles.c: Fix bug with writing out JSON profile information. 2010-08-30 Andrew M. Bishop <amb> * src/ways.h, src/output.c: Change the names of the functions used to get the highway names. * src/filedumper.c: Only print the way name in OSM output when the way has a name. Change the names of the functions used to get the highway names. * src/profiles.c: Fix bug with writing out JSON profile information. 2010-08-04 Andrew M. Bishop <amb> * src/output.c, src/segmentsx.c, src/types.h, src/fakes.c, src/functions.h, src/nodesx.c, src/optimiser.c: Change the way that fake nodes and segments are recognised (allows nearly 4G nodes to be stored instead of 2G nodes). 2010-08-03 Andrew M. Bishop <amb> * src/filedumper.c, src/nodes.h, src/nodesx.c, src/optimiser.c, src/types.h: Rename the variables that hold the node allowed transports and flags. 2010-08-02 Andrew M. Bishop <amb> * xml/routino-tagging-nomodify.xml, xml/routino-tagging.xml, xml/routino-tagging.xsd, src/filedumper.c, src/nodesx.c, src/nodesx.h, src/optimiser.c, src/osmparser.c, src/superx.c, src/tagging.c, src/types.h: Understand node traffic type restrictions. 2010-07-31 Andrew M. Bishop <amb> * src/profiles.h, src/types.c, src/types.h, src/ways.h, src/waysx.c: Rename the wayallow_t type to allow_t (since it applies to nodes as well now). * src/filedumper.c, src/nodes.h, src/nodesx.c, src/segmentsx.c, src/types.h: Add extra information to a node to store turn restrictions and properties. (Move the super-node bit from the first segment to here.) * src/nodesx.c, src/segmentsx.c, src/waysx.c: Assert if the number of nodes, segments or ways exceeds the legal range of the index counters. * src/nodes.h, src/nodesx.h, src/segments.h, src/segmentsx.h, src/ways.h, src/waysx.h: Change the data types to index_t where they are counting nodes/segments/ways. * src/nodes.h, src/nodesx.h, src/segments.h, src/segmentsx.h, src/ways.h, src/waysx.c, src/waysx.h: Ensure that seeking within a file uses a 64-bit offset. * src/nodesx.c, src/segmentsx.c, src/superx.c, src/waysx.c: Remove the assert statements that check the order of calling the functions. 2010-07-26 Andrew M. Bishop <amb> * src/filedumper.c, src/nodes.c, src/nodes.h, src/visualiser.c: Final part of slim mode for the router (node offsets). 2010-07-24 Andrew M. Bishop <amb> * src/nodesx.c, src/segmentsx.c, src/waysx.c: Some tidying up of the writing of the file headers. * src/ways.c, src/ways.h, src/waysx.c, src/filedumper.c, src/nodes.c, src/optimiser.c, src/output.c, src/profiles.c, src/visualiser.c: Finished slim mode for the router by adding ways. 2010-07-23 Andrew M. Bishop <amb> * src/filedumper.c, src/nodes.c, src/nodes.h, src/output.c, src/segments.c, src/segments.h, src/segmentsx.c: Added slim mode to the router for segments. * src/Makefile: Add the fakes.c file. * src/optimiser.c, src/results.c, src/results.h: Change the results structure to hold the index of the segment instead of a pointer to it. * src/types.h, src/router.c, src/functions.h: Move the fake nodes and segments to a new file. * src/fakes.c: New file. 2010-07-19 Andrew M. Bishop <amb> * xml/routino-profiles.xml: Reduce the "multilane" preference for motor vehicles. Gives too much bias with previous setting. 2010-07-15 Andrew M. Bishop <amb> * src/Makefile, src/filedumper.c, src/nodes.c, src/nodes.h, src/nodesx.c, src/visualiser.c: Added a slim mode to the router (just for nodes to start with). 2010-07-14 Andrew M. Bishop <amb> * src/segmentsx.h, src/superx.c, src/waysx.c, src/waysx.h, src/Makefile, src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c: Replaced the runtime selection of slim mode / non-slim mode with compile time selection that gives no runtime overhead but gives two executables. 2010-07-13 Andrew M. Bishop <amb> * src/nodesx.c, src/nodesx.h, src/segmentsx.c, src/segmentsx.h, src/waysx.c, src/waysx.h: Move the functions for slim mode out into the header file and make it inline. 2010-07-12 Andrew M. Bishop <amb> * src/files.h: New file. * src/segmentsx.h, src/sorting.c, src/superx.c, src/tagging.c, src/tagmodifier.c, src/translations.c, src/ways.c, src/waysx.c, src/waysx.h, src/filedumper.c, src/files.c, src/functions.h, src/nodes.c, src/nodesx.c, src/nodesx.h, src/optimiser.c, src/output.c, src/planetsplitter.c, src/profiles.c, src/router.c, src/segments.c, src/segmentsx.c: Create a files.h header and put some of the most heavily used files.c functions into it and make them inline. 2010-07-11 Andrew M. Bishop <amb> * src/segmentsx.c, src/segmentsx.h, src/files.c, src/nodesx.c, src/nodesx.h: Made the planetsplitter slim mode handle the output node and segment data in a slim way as well as in the input data. * src/nodesx.c, src/segmentsx.c, src/waysx.c: Change the names of the temporary files. 2010-07-10 Andrew M. Bishop <amb> Version 1.4.1 released 2010-07-10 Andrew M. Bishop <amb> * doc/NEWS.txt: Update NEWS for release. * doc/ALGORITHM.txt: Update documentation for slight modification to algorithm, also add more information about how preferences etc are handled. 2010-07-09 Andrew M. Bishop <amb> * src/Makefile: Default compilation flags include optimisation and not debugging symbols. 2010-07-08 Andrew M. Bishop <amb> * src/nodes.c: Fix error with finding closest segment to the specified point. * src/optimiser.c: Bug fix for not crashing when finding the middle part of the route. 2010-07-07 Andrew M. Bishop <amb> * src/results.c, src/optimiser.c: Changed the amount of memory allocated for intermediate results => routes much faster. * src/output.c: Remove compilation warning. * src/Makefile: Copy files to web directory like done in other Makefiles. * doc/Makefile: Change location of HTML files in web directory and clean up web directory on distclean. * src/xml/Makefile: Stop message being printed when make runs. * xml/Makefile: Fix error from last checkin and clean up web directory on distclean. 2010-07-06 Andrew M. Bishop <amb> * src/optimiser.c: Don't crash if the middle part of the route can't be found but exit cleanly. 2010-07-05 Andrew M. Bishop <amb> * src/superx.c: Change the algorithm used to determine supernodes. 2010-07-03 Andrew M. Bishop <amb> * xml/routino-translations.xml: Added German translation [patch from Christoph Eckert]. * src/translations.c: Don't crash if more than one language is in translations.xml but --language option is not used. 2010-06-28 Andrew M. Bishop <amb> * src/router.c: Don't crash if start and finish are the same point. 2010-06-27 Andrew M. Bishop <amb> * doc/DATA.txt: New file. * doc/ALGORITHM.txt, doc/CONFIGURATION.txt, doc/INSTALL.txt, doc/OUTPUT.txt, doc/README.txt, doc/TAGGING.txt, doc/USAGE.txt: Updated documentation to match new web site. * doc/Makefile: New file. * xml/Makefile: Add some new variables. 2010-06-26 Andrew M. Bishop <amb> * xml/routino-profiles.xml, xml/routino-tagging-nomodify.xml, xml/routino-tagging.xml, xml/routino-translations.xml, src/translations.c: Changed URLs to http://www.routino.org/ * doc/README.txt: *** empty log message *** * doc/OUTPUT.txt: Changed URLs to http://www.routino.org/ 2010-05-31 Andrew M. Bishop <amb> Version 1.4 released 2010-05-31 Andrew M. Bishop <amb> * doc/INSTALL.txt, doc/NEWS.txt, doc/README.txt: Update for version 1.4. * src/xml/Makefile: Make sure that distclean really cleans up. * Makefile: Make sure that xml sub-directory is made. * src/router.c: Fix the code that should stop routing if no segment is found. 2010-05-30 Andrew M. Bishop <amb> * doc/USAGE.txt: Add the planetsplitter tagging rules option (and remove the unnecessary options that it replaces), add the filedumper OSM dump option and add the tagmodifier program. * doc/TAGGING.txt: Describe the new tagging rules. * doc/OUTPUT.txt: Note that the HTML and GPX outputs are translated. * doc/CONFIGURATION.txt: Add the tagging rules configuration file. * doc/ALGORITHM.txt: An update to the current size of the UK database. * xml/routino-tagging-nomodify.xml: New file. * src/tagmodifier.c: A tagging XML file must be read (just like planetsplitter). * src/filedumper.c: Add the option to dump a region rather than all and to not output super segments. * src/optimiser.c: Fix printing the number of super-segments tried. 2010-05-29 Andrew M. Bishop <amb> * xml/routino-translations.xml, xml/routino-translations.xsd, src/ways.h, src/filedumper.c, src/osmparser.c, src/output.c, src/translations.c, src/translations.h: Translate the names given to unnamed roads (the highway type). * src/profiles.c, src/profiles.h, src/router.c: Stricter check on specified profile before routing. * src/router.c: Ensure that if no segment is found the routing stops. * src/nodes.c: When finding a closest segment one of the nodes must be within the search distance. 2010-05-28 Andrew M. Bishop <amb> * src/router.c: Make sure that some profiles are loaded. 2010-05-27 Andrew M. Bishop <amb> * src/optimiser.c, src/profiles.c: Fix bug with profile preferences (used incorrectly in route optimisation). * src/Makefile, src/filedumper.c, src/types.c, src/types.h: Add an option to filedumper to dump an OSM format file. 2010-05-25 Andrew M. Bishop <amb> * src/xmlparse.l: Fix bug with encoding XML strings. 2010-05-23 Andrew M. Bishop <amb> * xml/Makefile: Make sure that modified files are copied to web directory. * src/tagmodifier.c: Fix bug when filename is specified on command line. * src/tagging.c, src/tagging.h, src/tagmodifier.c, src/xmlparse.l, src/osmparser.c: Fix some memory leaks. * src/tagmodifier.c, xml/osm.xsd, xml/routino-osm.xsd, src/osmparser.c: Add the 'bound' element to the XML parser. 2010-05-22 Andrew M. Bishop <amb> * src/functionsx.h, src/osmparser.c, src/planetsplitter.c, src/ways.h, src/waysx.c, src/waysx.h: Remove the --transport=<transport>, --not-highway=<highway> and --not-property=<property> options from planetsplitter because they can be done by the tagging.xml file now. 2010-05-18 Andrew M. Bishop <amb> * src/Makefile: Add tagmodifier program. * src/xmlparse.l: Handle floating point numbers in scientific notation. * src/planetsplitter.c: Read in the tag transformation rules before calling the OSM parser. * src/functionsx.h, src/osmparser.c: Almost completely re-written OSM parser using tagging transformations. * src/tagmodifier.c, src/tagging.h, src/tagging.c: New file. * xml/Makefile: Copy the tagging rules to the web directory. * xml/routino-tagging.xml, xml/routino-tagging.xsd, xml/routino-osm.xsd: New file. * xml/osm.xsd: Small fix for OSM schema. 2010-05-14 Andrew M. Bishop <amb> * src/types.c: Remove highway type aliases from HighwayType() function. * src/xmlparse.h, src/xmlparse.l: Allow empty strings to be returned. 2010-05-10 Andrew M. Bishop <amb> * src/xmlparse.h, src/xmlparse.l: The line number is now a long integer. * src/xml/Makefile: Running 'make test' now compiles everything first. 2010-04-28 Andrew M. Bishop <amb> * src/xml/Makefile: Delete zero length file if xsd-to-xmlparser fails. * src/nodes.c, src/nodesx.c, src/segments.c, src/segmentsx.c, src/ways.c, src/waysx.c: Change file format to allow 64-bit off_t type with 32 bit void* type. * src/Makefile, src/filedumper.c, src/xml/Makefile: Compile with _FILE_OFFSET_BITS=64 to get 64-bit fopen() and stat(). 2010-04-27 Andrew M. Bishop <amb> * src/output.c: Fix mistake of writing GPX information to wrong file. * doc/OUTPUT.txt, doc/CONFIGURATION.txt: New file. * doc/TAGGING.txt, doc/USAGE.txt, doc/ALGORITHM.txt, doc/INSTALL.txt, doc/NEWS.txt, doc/README.txt: Interim checkin of updated documentation. 2010-04-24 Andrew M. Bishop <amb> * src/router.c: Merged the three functions to output the head/body/tail of the results back into a single function. Added the '--output-none' option. * src/functions.h, src/output.c: Merged the three functions to output the head/body/tail of the results back into a single function. * xml/routino-translations.xml, xml/routino-translations.xsd, src/output.c, src/translations.c, src/translations.h: Added translations for the HTML output. * src/xmlparse.h, src/xmlparse.l: Changed functions from const. * src/output.c: Add the copyright information into the translations.xml file instead of the separate copyright.txt file. Add the translated copyright strings into the outputs. * src/functions.h, src/router.c, src/translations.c, src/translations.h: Add the copyright information into the translations.xml file instead of the separate copyright.txt file. * src/xmlparse.h, src/xmlparse.l: Add an option to not convert the XML strings into decoded representations (saves converting them back later for the translated strings). 2010-04-23 Andrew M. Bishop <amb> * src/xml/xsd-to-xmlparser.c, src/translations.c, src/xmlparse.h, src/xmlparse.l, src/profiles.c: Pass the tag name to the tag function. 2010-04-22 Andrew M. Bishop <amb> * Makefile: Fix bug in makefile. * xml/Makefile: Move the translations into the web directory. * xml/routino-translations.xml, xml/routino-translations.xsd: New file. * src/output.c: Changed HTML output to be useful in web pages. * src/xmlparse.l: Restart properly so that a different file can be read. 2010-04-13 Andrew M. Bishop <amb> * src/xml/xsd-to-xmlparser.c, src/profiles.c, src/translations.c: Name the tag variables and functions after the XSD data type and not the tag name that uses it. 2010-04-12 Andrew M. Bishop <amb> * src/profiles.c, src/translations.c, src/xmlparse.h, src/xmlparse.l, src/xml/xsd-to-xmlparser.c, src/xml/Makefile: Change the last parameter to the ParseXML function to be general options. * src/Makefile, src/types.h, src/ways.c, src/ways.h: Move the type checking/printing functions from way.c to type.c. * src/types.c: New file. 2010-04-11 Andrew M. Bishop <amb> * src/xml/xsd-to-xmlparser.c, src/profiles.c, src/translations.c, src/xmlparse.h, src/xmlparse.l: Added helper functions for parsing strings into numbers. Added macros to perform common error checking. Change XML parser callback functions to return an error status. 2010-04-10 Andrew M. Bishop <amb> * src/router.c: Fix usage information. * src/translations.h, src/translations.c: New file. * src/output.c: Added translations for GPX and turn/heading. * src/Makefile, src/router.c: Added file of translations and language selection. 2010-04-09 Andrew M. Bishop <amb> * src/functions.h, src/planetsplitter.c, src/sorting.c: Add an option '--sort-ram-size' to specify the RAM to use for sorting - defaults to 256MB if not using slim mode. 2010-04-08 Andrew M. Bishop <amb> * src/xml/Makefile: Fix test program generation and running. * src/xmlparse.h, src/xmlparse.l: Make the strings const and add the number of attributes to the xmltag structure. Add functions to convert character entities and character references. * src/profiles.c, src/xml/xsd-to-xmlparser.c: Make the strings const and add the number of attributes to the xmltag structure. 2010-04-07 Andrew M. Bishop <amb> * xml/Makefile: New file. 2010-04-06 Andrew M. Bishop <amb> * src/Makefile: Remove special lex/flex flags. Remove profiles.o from planetsplitter. * src/xml/xsd-to-xmlparser.c: Don't print anything for attributes that are not set. * src/xmlparse.l: Change error message for bad character in a quoted string. Make sure attribute values are cleared before calling tag function (for end-tags). 2010-04-04 Andrew M. Bishop <amb> * src/xml/Makefile: Add some XML parsing test cases. * src/xml/xsd-to-xmlparser.c: Rename the XML handling function. * src/xmlparse.h, src/xmlparse.l, src/profiles.c: Added error checking. 2010-04-03 Andrew M. Bishop <amb> * src/functionsx.h, src/osmparser.c, src/planetsplitter.c: Rename the old ParseXML() function as ParseOSM(). 2010-04-01 Andrew M. Bishop <amb> * src/output.c: Wrap GPX descriptions in CDATA. 2010-03-31 Andrew M. Bishop <amb> * xml/routino-profiles.xml: New file. * src/xml/xsd-to-xmlparser.c, src/profiles.c, src/xmlparse.h, src/xmlparse.l: Call the XML tag functions for the end tags as well as the start tags. 2010-03-30 Andrew M. Bishop <amb> * src/profiles.c, src/profiles.h: Change the name of the --profile-json and --profile-perl options. * src/filedumper.c, src/planetsplitter.c, src/router.c: Improve the program help messages. 2010-03-29 Andrew M. Bishop <amb> * src/files.c, src/functions.h, src/profiles.c, src/profiles.h, src/router.c: Added command line option to specify a file containing profiles. Added command line option to select profile by name from loaded set. Use XML parser to read in the profiles. * src/Makefile: Better handling of the xml sub-directory. * src/xml/xsd-to-xmlparser.c: Add the option to ignore unknown attributes. Print out the skeleton file using static functions and variables. * src/xml/Makefile: Keep the intermediate files. * src/xmlparse.h, src/xmlparse.l: Add the option to ignore unknown attributes. 2010-03-28 Andrew M. Bishop <amb> * src/profiles.h, src/router.c, src/profiles.c: Add an option to print out the profiles as XML format. * src/xmlparse.h, xml/xsd.xsd, xml/osm.xsd, src/xml/xsd-to-xmlparser.c: New file. * src/Makefile: Added the XML subdirectory and xmlparser.c. * src/xmlparse.l, src/xml/Makefile: New file. 2010-03-20 Andrew M. Bishop <amb> * src/output.c: Add descriptions to each point in the GPX route file. * src/files.c, src/functions.h, src/nodesx.c, src/output.c, src/segmentsx.c, src/waysx.c: Move the stat() calls to find a file size into a helper function in files.c. * src/files.c, src/output.c, src/planetsplitter.c: Improve the error messages by adding strerror() to them. * src/filedumper.c, src/router.c: Don't check the return value of the functions to load the nodes, segments and ways because those functions will exit in case of an error. * src/nodes.c, src/segments.c, src/ways.c: Don't check the return value of MapFile() because it will exit in case of an error. * src/planetsplitter.c: Allow filenames on the planetsplitter command line. 2010-03-19 Andrew M. Bishop <amb> * src/waysx.h, src/filedumper.c, src/files.c, src/functions.h, src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, src/superx.c, src/waysx.c: Allow planetsplitter to be run with a --parse-only or --process-only option and append to existing file or read from existing file. 2010-03-18 Andrew M. Bishop <amb> * src/router.c: Fix usage message error and shuffle order. * src/output.c, src/router.c: Allow selection of which outputs are to be created. 2010-03-17 Andrew M. Bishop <amb> * src/output.c: Re-order the code for HTML. 2010-03-15 Andrew M. Bishop <amb> * src/output.c: Create a simple HTML output. 2010-03-06 Andrew M. Bishop <amb> * src/router.c, src/nodes.c: Speed up start/via/stop point search algorithm. 2010-03-05 Andrew M. Bishop <amb> * src/profiles.c: Change the format of the output for the --help-profile-{pl|js} options. 2010-01-21 Andrew M. Bishop <amb> Version 1.3 released 2010-01-21 Andrew M. Bishop <amb> * doc/NEWS.txt: Update to latest news. 2010-01-18 Andrew M. Bishop <amb> * doc/USAGE.txt, doc/TAGGING.txt, doc/INSTALL.txt: Updated documentation. 2010-01-15 Andrew M. Bishop <amb> * src/router.c, src/functions.h: Change the test output formats to add turn, node type and bearing information. 2010-01-13 Andrew M. Bishop <amb> * src/output.c: Change the test output formats to add turn, node type and bearing information. 2009-12-16 Andrew M. Bishop <amb> * src/router.c: Added an option to use only nodes and not interpolate a point into a segment. 2009-12-15 Andrew M. Bishop <amb> * src/osmparser.c, src/profiles.c, src/types.h, src/ways.c: Added wheelchair as type of transport. 2009-12-13 Andrew M. Bishop <amb> * src/osmparser.c, src/profiles.c, src/types.h, src/ways.c: Add bridge and tunnel to highway properties. 2009-12-12 Andrew M. Bishop <amb> * src/Makefile: Ignore the error if executables cannot be copied after compiling. * src/functions.h, src/nodesx.c, src/segmentsx.c, src/sorting.c, src/waysx.c: Add some FILESORT_* #defines and use them. 2009-12-11 Andrew M. Bishop <amb> * src/functions.h, src/nodesx.c, src/planetsplitter.c, src/segmentsx.c, src/sorting.c, src/waysx.c, src/waysx.h: Added a new function to sort variable length data - simplifies the compacting of ways, reduces memory usage potentially required for it and simplifies the code. 2009-12-10 Andrew M. Bishop <amb> * src/waysx.c: Write out the list of ways without memory mapping anything. 2009-11-27 Andrew M. Bishop <amb> * src/osmparser.c, src/profiles.c, src/types.h, src/ways.c: Add in "multilane" as a new highway property. 2009-11-25 Andrew M. Bishop <amb> * src/filedumper.c, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/profiles.h, src/router.c, src/ways.h, src/waysx.c, src/waysx.h: Store the selected options when parsing (planetsplitter) and display them in the statistics (filedumper) and check them when routing (router). 2009-11-23 Andrew M. Bishop <amb> * src/osmparser.c, src/output.c, src/profiles.c, src/types.h, src/ways.c: Add in "steps" as a new highway type. 2009-11-19 Andrew M. Bishop <amb> * src/optimiser.c, src/router.c: Made the verbose output consistent between different places. 2009-11-18 Andrew M. Bishop <amb> * src/router.c: Fix bug with previous segment-splitting routing. 2009-11-14 Andrew M. Bishop <amb> * src/optimiser.c, src/output.c, src/router.c, src/segments.h, src/functions.h, src/nodes.c, src/nodes.h: If a selected waypoint is not very close to an existing node then insert a fake node in the segment that comes closest and use that instead. 2009-11-13 Andrew M. Bishop <amb> * src/optimiser.c, src/osmparser.c, src/queue.c, src/results.c, src/results.h, src/types.h: Added in some more constants with the value ~0. 2009-11-06 Andrew M. Bishop <amb> * src/filedumper.c: Check the values for the --node=, --segment= and --way= options. 2009-11-03 Andrew M. Bishop <amb> * src/output.c, src/planetsplitter.c, src/profiles.c, src/profiles.h, src/router.c, src/types.h, src/ways.c: Rename Way_Unknown to Way_Count to make more sense and match the properties. 2009-11-02 Andrew M. Bishop <amb> * src/osmparser.c: Allow the tag "paved" as well as "surface=paved". * src/filedumper.c, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/profiles.c, src/profiles.h, src/router.c, src/types.h, src/ways.c, src/ways.h: Added the ability to set routing preferences using highway properties. Initially the only choice is either paved or unpaved but the code has been updated to allow any number of properties to be added. 2009-10-27 Andrew M. Bishop <amb> * src/osmparser.c: Handle the "designation=..." tag for bridleway, byway and footpath. (Also change to using a macro for testing if access is allowed and now allow "destination"). * src/osmparser.c, src/profiles.c, src/types.h, src/ways.c, src/ways.h: Added Moped to the list of transports (and incidentally increased the transport data type to 16 bits and re-ordered the Way data-type in response). 2009-10-26 Andrew M. Bishop <amb> * src/profiles.c: Ensure that horses and bicycles have a default speed on trunk even though they have a default preference not to use it. * src/osmparser.c, src/profiles.c, src/types.h, src/ways.c: Re-ordered the types so that Horse comes before Bicycle. * src/osmparser.c, src/output.c, src/profiles.c, src/types.h, src/ways.c: Remove the Bridleway and Footway highway types and use the Path type instead (also re-ordered the types so that Cycleway comes before Path). * src/profiles.c: Remove unneeded spaces at the end of the output. 2009-10-25 Andrew M. Bishop <amb> * src/output.c: Fix bug in code that determines waypoints for abbreviated output. 2009-10-24 Andrew M. Bishop <amb> * src/functions.h, src/optimiser.c, src/router.c: Fix missing segments in output if start and finish points are found by the start search. 2009-10-22 Andrew M. Bishop <amb> * src/files.c, src/nodesx.c, src/segmentsx.c, src/sorting.c, src/superx.c, src/waysx.c: Added some missing comments and corrected some existing ones. 2009-10-21 Andrew M. Bishop <amb> Version 1.2 released 2009-10-21 Andrew M. Bishop <amb> * doc/README.txt, doc/USAGE.txt, doc/NEWS.txt: Updated for version 1.2. 2009-10-20 Andrew M. Bishop <amb> * src/Makefile: Add sorting.o to the Makefile. 2009-10-12 Andrew M. Bishop <amb> * src/waysx.c: When sorting we cannot have NULL pointers now. * src/nodesx.c, src/segmentsx.c, src/waysx.c: Re-order the functions in the file into a more logical order. No functional changes. * src/nodesx.c, src/planetsplitter.c, src/segmentsx.c, src/sorting.c, src/waysx.c: Rename the tmpdirname variable. 2009-10-10 Andrew M. Bishop <amb> * src/nodesx.c, src/osmparser.c, src/segmentsx.c, src/sorting.c, src/waysx.c: Corrections after running with valgrind. * src/planetsplitter.c: Fix early termination test. * src/nodesx.c, src/nodesx.h, src/segmentsx.c: Remove the nodesx->gdata index. 2009-10-09 Andrew M. Bishop <amb> * src/nodesx.c, src/segmentsx.c, src/typesx.h, src/waysx.c, src/waysx.h: Free the nodesx->super array and the segmentsx->firstnode array when finished with them. Remove wayx->cid and overwrite wayx->id instead. Overwrite nodex[i]->id=i for later geographically sorted use. 2009-10-08 Andrew M. Bishop <amb> * src/nodesx.c, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, src/superx.c: Replace node, segment and way indexes with a single index for a set of segments containing the location of the first segment for each node. * src/nodesx.h: Fix comment. 2009-10-07 Andrew M. Bishop <amb> * src/osmparser.c, src/segmentsx.c, src/superx.c: AppendSegment adds a single segment and not a pair. * src/waysx.c: Use heapsort() instead of qsort(). * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, src/superx.c, src/waysx.c: Go back to the version 1.1 method of having each segment listed twice. This simplifies the lookup of first/next segments at no in-RAM index cost and now that slim mode has sorting of file contents the balance has tipped back. 2009-10-04 Andrew M. Bishop <amb> * src/functions.h, src/sorting.c: Change the sort function to allow the indexing callback to veto the write. * src/nodesx.c: Remove the duplicates when sorting. * src/waysx.c: Sort the ways using the same method as the nodes. Also remove the duplicates. * src/nodesx.c: Use the new sort functions to allow sorting the data in the file without needing to read (or mmap) the whole file into RAM at the same time. * src/functions.h: Add some functions to perform sorting. * src/sorting.c: New file. * src/queue.c: Fix bug with binary heap sort. 2009-09-25 Andrew M. Bishop <amb> * src/queue.c: Add comments describing the algorithm used. 2009-09-23 Andrew M. Bishop <amb> * src/nodesx.c, src/waysx.c: Simplify the de-duplication when sorting and update some comments. 2009-09-22 Andrew M. Bishop <amb> * src/nodesx.c, src/nodesx.h: Remove a leftover from the last change on these files. * src/segmentsx.c: Improve the super-segment de-duplication. 2009-09-21 Andrew M. Bishop <amb> * src/nodesx.c, src/nodesx.h, src/planetsplitter.c: Remove the non-highway nodes without re-sorting the whole list again. 2009-09-17 Andrew M. Bishop <amb> * src/osmparser.c, src/planetsplitter.c, src/segmentsx.c, src/superx.c, src/waysx.c, src/waysx.h: Added the slim mode to Ways as well. * src/ways.h: Add padding to Ways structure to allow it to be zeroed. * src/nodesx.c: Add some comments when closing and re-opening files. * src/files.c, src/functions.h: The WriteFile function now has a const parameter. 2009-09-15 Andrew M. Bishop <amb> * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c: Some bug fixes and some missing unmap function calls. 2009-09-07 Andrew M. Bishop <amb> * src/segmentsx.h, src/superx.c, src/nodesx.c, src/nodesx.h, src/segmentsx.c: Fixed slim mode for segments and nodes (slim now means mapping only one file into RAM at a time and none when creating the final output). 2009-09-06 Andrew M. Bishop <amb> * src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, src/superx.c, src/superx.h, src/nodesx.c: Slim version of segments code (still very slow and only works on simple cases). * src/files.c, src/functions.h: Remove the delete option from UnmapFile() and make it return NULL. * src/filedumper.c: Allow dumping all nodes, segments or ways. 2009-09-05 Andrew M. Bishop <amb> * src/nodesx.c: Don't re-sort unnecessarily. * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/superx.c: Improve slim mode for nodes so that no data is not loaded into RAM at all. * src/files.c, src/functions.h: Add some more file functions. 2009-09-03 Andrew M. Bishop <amb> * src/nodesx.c, src/files.c, src/functions.h: Remove extra argument from MapFile function. * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/superx.c: Added slim mode (--slim) to planetsplitter for nodes only. * src/files.c, src/functions.h: Changes to mapping and unmapping files for slim mode. 2009-08-25 Andrew M. Bishop <amb> * src/planetsplitter.c: Revert the order that the functions are called. * src/nodesx.c: Fix for assert statement. * src/files.c: Bug fix for mmap(). 2009-08-20 Andrew M. Bishop <amb> * src/osmparser.c: Fix bug with memory allocation. 2009-08-19 Andrew M. Bishop <amb> * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, src/superx.c, src/waysx.c, src/waysx.h: Remove "sorted" parameter in data structure and change assert statements. 2009-08-17 Andrew M. Bishop <amb> * src/router.c: Increase to 99 the number of waypoints that can be specified. 2009-08-15 Andrew M. Bishop <amb> * src/queue.c: Fix comment. * src/Makefile: Tidy the compilation options to make it easier to turn them on and off. * src/router.c: Remove the --all, --super and --no-output command line options. Handle the renamed routing functions. * src/functions.h, src/optimiser.c: Rename the routing functions and make FindRoute only find routes with no super-nodes in them. * src/queue.c: When popping from queue make sure that place in queue is cleared. * src/optimiser.c, src/queue.c, src/results.c, src/results.h, src/superx.c: Optimise the priority queue used for routing. * src/filedumper.c: Fix dumping nodes when they are super-nodes. 2009-07-23 Andrew M. Bishop <amb> * src/Makefile, src/optimiser.c, src/results.c, src/results.h, src/superx.c: Split off queue functions into a separate file. * src/queue.c: New file. 2009-07-19 Andrew M. Bishop <amb> * src/nodesx.c, src/segments.h, src/segmentsx.c, src/ways.h, src/waysx.c, src/filedumper.c, src/nodes.h: Include the number of super-nodes, super-segments etc in the database as useful information to put in the statistics output. * src/superx.c: Fix incorrect progress indicator message. * src/waysx.c: Fix problem with memory reallocation. * src/nodesx.c, src/osmparser.c, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, src/superx.c: Store only one copy of each segment but index once for each direction. 2009-07-12 Andrew M. Bishop <amb> * src/functionsx.h, src/nodesx.c, src/nodesx.h, src/osmparser.c, src/output.c, src/planetsplitter.c, src/profiles.c, src/results.c, src/segments.c, src/segmentsx.c, src/segmentsx.h, src/superx.c, src/superx.h, src/ways.h, src/waysx.c, src/waysx.h: Tidy up and fix comments and include files. * src/osmparser.c, src/planetsplitter.c, src/router.c, src/segmentsx.c, src/superx.c, src/waysx.c, src/filedumper.c, src/nodesx.c, src/optimiser.c: Check all print statements and made them more consistent and/or accurate. 2009-07-11 Andrew M. Bishop <amb> * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/waysx.c, src/waysx.h: Free memory at the end of planetsplitter (to aid finding potential leaks earlier). 2009-07-09 Andrew M. Bishop <amb> * src/segmentsx.c: Free memory correctly (really). * src/planetsplitter.c, src/waysx.c, src/waysx.h: Separate the sorting of Ways from compacting of Ways. * src/nodes.h, src/nodesx.c, src/nodesx.h, src/segmentsx.c, src/visualiser.c, src/filedumper.c, src/nodes.c: Rename structure members after recent changes. * src/segmentsx.c: Free memory correctly. * src/types.h, src/segmentsx.c: Fix duplicate checking. * src/planetsplitter.c: Ensure that variable is reset before using it. * src/types.h, src/visualiser.c, src/visualiser.h, src/filedumper.c, src/nodes.c, src/nodes.h, src/nodesx.c, src/nodesx.h, src/optimiser.c, src/osmparser.c, src/output.c, src/router.c, src/segments.c, src/segments.h, src/segmentsx.c: Change from float to double for latitude and longitude. Store latitude and longitude as an integer type rather than float (higher precision). 2009-07-08 Andrew M. Bishop <amb> * src/superx.c: Ensure that variable is reset before using it. 2009-07-06 Andrew M. Bishop <amb> * src/visualiser.c: Print all super-segments within and crossing the border. Don't display speed limits for tracks and paths unless set. 2009-07-04 Andrew M. Bishop <amb> * src/segmentsx.h, src/superx.c, src/waysx.c, src/waysx.h: Change data structure to avoid calling realloc() each time to allocate more memory. 2009-07-02 Andrew M. Bishop <amb> * src/types.h, src/waysx.c, src/waysx.h: Handle duplicate ways. * src/nodes.c, src/nodesx.c, src/planetsplitter.c, src/profiles.c, src/results.c, src/segments.c, src/segmentsx.c, src/superx.c, src/superx.h, src/types.h, src/ways.c, src/waysx.c: Fix some gcc pedantic warnings. * src/files.c, src/nodesx.c, src/osmparser.c, src/results.c, src/router.c, src/segments.c, src/segmentsx.c, src/superx.c, src/ways.c, src/waysx.c: Removed unused header files, change assert statements, tidy some code. 2009-07-01 Andrew M. Bishop <amb> * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, src/superx.c: Remove the Node structure from the NodeX structure to save memory. * src/filedumper.c: Print latitude and longitude in degrees. 2009-06-30 Andrew M. Bishop <amb> * src/segmentsx.h: Re-order the data in the structure. * src/nodesx.c, src/nodesx.h, src/osmparser.c, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, src/superx.c, src/waysx.h: Remove the Segment structure from the SegmentX structure to save memory. 2009-06-29 Andrew M. Bishop <amb> * src/filedumper.c, src/nodes.h, src/nodesx.c, src/segments.c, src/segments.h, src/segmentsx.c, src/superx.c, src/types.h: Move the super-segment and normal-segment flags from the nodes to the distance. Remove the NODE() macro and rename SUPER_FLAG to NODE_SUPER. * src/waysx.c: Replace memmove with structure copy. * src/nodesx.c, src/segmentsx.c, src/segmentsx.h, src/superx.c: Rename SegmentsX sdata to ndata. 2009-06-25 Andrew M. Bishop <amb> * src/waysx.c, src/waysx.h: Rename part of the structure. * src/nodesx.c, src/nodesx.h, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, src/superx.c, src/waysx.h: Undo part of the previous change - only update the Segment way index at the end. * src/waysx.h, src/nodesx.c, src/osmparser.c, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h, src/superx.c, src/superx.h, src/typesx.h, src/waysx.c: Reduce the number of ways in the output by compacting them (sharing the same information between identical ways). 2009-06-24 Andrew M. Bishop <amb> * src/filedumper.c, src/nodes.h: Allow dumping out of nodes, segments and ways. 2009-06-15 Andrew M. Bishop <amb> * src/segmentsx.c, src/superx.c, src/visualiser.c, src/ways.c, src/ways.h: Rename WaysSame() with WaysCompare() and reverse the sense of the output. * src/functionsx.h, src/typesx.h: New file. * src/functions.h, src/nodesx.h, src/osmparser.c, src/planetsplitter.c, src/segmentsx.h, src/superx.h, src/types.h, src/waysx.h: Put some of types.h into typesx.h (for extended data types). Put some of functions.h into functionsx.h (for OSM parser). Change included files to match. * src/filedumper.c, src/osmparser.c, src/output.c, src/router.c, src/types.h, src/visualiser.c: Add a macro for converting degrees to radians and radians to degrees. * src/optimiser.c: Fix weight, height, width, length restriction routing. * doc/TAGGING.txt, src/osmparser.c: Recognise tags "vehicle" and "motor_vehicle". 2009-06-13 Andrew M. Bishop <amb> Version 1.1 released 2009-06-13 Andrew M. Bishop <amb> * src/nodesx.c, src/planetsplitter.c, src/segmentsx.c, src/segmentsx.h: Handle nodes that are missing from the .osm file (ignore the segment). * src/nodesx.c: Revert the last change (Print an error message and exit if a node cannot be found). * doc/NEWS.txt: New file. * src/Makefile: Delete the executables from the web directory for 'distclean'. 2009-06-12 Andrew M. Bishop <amb> * doc/USAGE.txt, doc/INSTALL.txt, doc/README.txt: Update the documentation. * src/Makefile: Copy the executables into the web directory. 2009-06-08 Andrew M. Bishop <amb> * src/filedumper.c: Change help text. * src/visualiser.c: Change format of super-node/segment visualiser output. 2009-06-07 Andrew M. Bishop <amb> * doc/TAGGING.txt: Updated with imperial to metric conversions. * src/Makefile: Added visualiser.c. * src/filedumper.c: Now used for data visualisation and statistics. * src/visualiser.h, src/visualiser.c: New file. 2009-06-05 Andrew M. Bishop <amb> * src/osmparser.c: Improve parsing of imperial units (mph, feet & inches). 2009-06-03 Andrew M. Bishop <amb> * src/nodesx.c: Print an error message and exit if a node cannot be found. 2009-05-31 Andrew M. Bishop <amb> * src/ways.c, src/ways.h, src/waysx.c, src/waysx.h: Move function from waysx.c to ways.c. 2009-05-29 Andrew M. Bishop <amb> * doc/USAGE.txt: Update usage information with new options and copyright.txt usage. * src/nodes.c, src/nodes.h, src/router.c: Make sure that the chosen "nearest point" is a highway that the profile allows. 2009-05-23 Andrew M. Bishop <amb> * src/profiles.c: Change the default profile; horses are slower, bicycles may be allowed on footways (and similar). 2009-05-15 Andrew M. Bishop <amb> * src/files.c, src/output.c: Error checking on opening files (to read/write data and to write output). 2009-05-14 Andrew M. Bishop <amb> * src/output.c, src/results.c, src/router.c, src/segments.c, src/segmentsx.c, src/superx.c, src/types.h, src/nodes.c, src/nodesx.c, src/optimiser.c: Replace ~0 or 0 with NO_NODE value for "no node" condition. 2009-05-13 Andrew M. Bishop <amb> * src/output.c: Remove one more NODE macro and fix an output formatting error. * src/nodes.c, src/nodes.h, src/optimiser.c, src/output.c, src/router.c: Remove some node macros, change some node function arguments. * src/optimiser.c, src/profiles.c, src/profiles.h: Move some common code into the profile. * src/superx.c: Remove distance and duration from Result structure. * src/output.c: Better junction detection. * src/optimiser.c, src/results.c, src/results.h: Remove distance and duration from Result structure. 2009-05-09 Andrew M. Bishop <amb> * src/output.c: Add better junction detection for deciding on route waypoints. 2009-05-06 Andrew M. Bishop <amb> * src/optimiser.c, src/profiles.c, src/profiles.h, src/types.h: Route using preferences for each highway. * src/router.c: Print out longitude then latitude. 2009-04-30 Andrew M. Bishop <amb> * src/results.h, src/router.c, src/superx.c, src/types.h, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/profiles.c, src/profiles.h, src/results.c: First attempt at preferences for highways - uses integer arithmetic and doesn't work well. 2009-04-27 Andrew M. Bishop <amb> * src/functions.h, src/optimiser.c, src/output.c, src/results.c, src/results.h, src/router.c: Allow generating a route with intermediate waypoints. 2009-04-24 Andrew M. Bishop <amb> * src/functions.h, src/output.c, src/router.c: Split the output functions into separate head/body/tail. Read in an optional copyright.txt file and include contents in output. 2009-04-23 Andrew M. Bishop <amb> * src/profiles.c: Improve Javascript and perl print out. * src/filedumper.c, src/files.c, src/functions.h, src/planetsplitter.c, src/router.c: Move the filename generation to a new function. 2009-04-22 Andrew M. Bishop <amb> * src/Makefile, src/functions.h, src/optimiser.c: Split the function to print the output into a new file. * src/output.c: New file. 2009-04-15 Andrew M. Bishop <amb> * src/osmparser.c: Fix for parsing nodes from XML (no effect on results). 2009-04-12 Andrew M. Bishop <amb> * doc/USAGE.txt, src/optimiser.c: Create a GPX route as well as a track. * src/ways.c: Changed the license to Affero GPLv3. 2009-04-10 Andrew M. Bishop <amb> * src/optimiser.c: Add a waypoint to the GPX file for the start and finish points. * doc/USAGE.txt: Include more information about the output file formats. 2009-04-08 Andrew M. Bishop <amb> Version 1.0 released 2009-04-08 Andrew M. Bishop <amb> * Makefile: New file. * src/Makefile: Fix dependency file generation. * doc/USAGE.txt, doc/TAGGING.txt, doc/README.txt, doc/INSTALL.txt, doc/ALGORITHM.txt: New file. * src/Makefile, src/filedumper.c, src/files.c, src/functions.h, src/nodes.c, src/nodes.h, src/nodesx.c, src/nodesx.h, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/profiles.c, src/profiles.h, src/results.c, src/results.h, src/router.c, src/segments.c, src/segments.h, src/segmentsx.c, src/segmentsx.h, src/superx.c, src/superx.h, src/types.h, src/ways.h, src/waysx.c, src/waysx.h: Changed the license to Affero GPLv3. 2009-04-07 Andrew M. Bishop <amb> * src/planetsplitter.c: Remove the --help-profile command line option. 2009-03-28 Andrew M. Bishop <amb> * src/optimiser.c: Fix file headers (again) and fix segment distance/duration for abbreviated text output. 2009-03-24 Andrew M. Bishop <amb> * src/osmparser.c, src/profiles.c, src/types.h, src/ways.c: Added highway=path; defaults to foot=yes but also is defaulted for bicycle and horse transport. 2009-03-23 Andrew M. Bishop <amb> * src/optimiser.c: Fixed the header in the output text files. * src/osmparser.c: Add parsing for *=designated allowing passage along a highway. * src/profiles.h, src/router.c, src/profiles.c: Add a function to output default profiles as perl data structures. 2009-03-21 Andrew M. Bishop <amb> * src/nodesx.c: Handle duplicated nodes (e.g. from concatenated input files). * src/optimiser.c: Add a header to the output text files. 2009-03-07 Andrew M. Bishop <amb> * src/optimiser.c: Renamed the *.txt output to *-all.txt and added a new shorted *.txt output. * src/router.c: Renamed the --no-print option to --no-output. 2009-03-04 Andrew M. Bishop <amb> * src/nodes.c: Fix bug with finding nearest node. 2009-03-03 Andrew M. Bishop <amb> * src/superx.c: Fix the merging of super-segments. 2009-03-01 Andrew M. Bishop <amb> * src/profiles.c, src/profiles.h: Added more limits (weight, height, width, length). * src/segments.c: Use the lower speed from the profile and the way. * src/osmparser.c: Added more limits (weight, height, width, length). Added highway=living_street and highway=services. * src/ways.c, src/ways.h, src/optimiser.c, src/router.c, src/segmentsx.c, src/superx.c, src/types.h: Added more limits (weight, height, width, length). * src/waysx.c, src/waysx.h: Added a function to test if two ways are the same. 2009-02-28 Andrew M. Bishop <amb> * src/nodesx.c: Round the node location to avoid if falling into the wrong bin. * src/nodesx.c, src/planetsplitter.c, src/segmentsx.c, src/waysx.c: Move print statements from planetsplitter into individual functions. * src/Makefile: Compile with optimisation and no profiling. * src/profiles.c, src/router.c: Add new command line options to make it more CGI friendly. 2009-02-27 Andrew M. Bishop <amb> * src/profiles.c, src/profiles.h, src/router.c: Print out Javascript code containing the profiles. 2009-02-24 Andrew M. Bishop <amb> * src/segmentsx.h, src/superx.c, src/nodesx.c, src/segments.c, src/segments.h, src/segmentsx.c: Remove segment->next1 since it always points at the next segment or nowhere. * src/profiles.c: Remove track from valid types for most transports. 2009-02-15 Andrew M. Bishop <amb> * src/functions.h, src/optimiser.c, src/router.c: Change some function names. * src/osmparser.c: Add in tests for motorcar=1 etc. * src/nodes.c, src/nodes.h, src/router.c: The search to find a node given the lat/long now searches harder. * src/optimiser.c: Better test for failing to find a route. * src/router.c: Change --only-super to --super. * src/nodesx.c, src/optimiser.c, src/osmparser.c, src/router.c, src/segments.c, src/segmentsx.c, src/types.h, src/nodes.c: Store radians rather than degrees. * src/segments.c, src/segmentsx.c: Change to sinf(), cosf(), sqrtf(), asinf() functions. * src/optimiser.c: Set the sortby parameter to the minimum distance/duration consistent with the travelled distance/duration and the remaining straight line distance with the fastest possible speed. * src/filedumper.c, src/nodes.c, src/nodes.h, src/nodesx.c, src/types.h: Add macros for handling lat/long to bin conversions. * src/osmparser.c: Handle oneway=1 and oneway=-1. 2009-02-10 Andrew M. Bishop <amb> * src/results.c, src/results.h: Added a new 'sortby' entry to the Result. Changed node_t to index_t. * src/router.c: Changed node_t to index_t. * src/nodes.c, src/segments.c, src/segments.h: Change the Distance() function to return distance_t. 2009-02-08 Andrew M. Bishop <amb> * src/optimiser.c, src/results.c, src/results.h, src/router.c, src/superx.c: Calculate quickest or shortest, not both. * src/optimiser.c, src/profiles.c, src/router.c: Give appropriate error messages if start or end of route are not possible. 2009-02-07 Andrew M. Bishop <amb> * src/results.c: Slight speedup by doing a linear search when looking up results and not storing in sorted order. * src/superx.h, src/superx.c, src/waysx.h, src/waysx.c, src/segmentsx.h, src/segmentsx.c, src/nodesx.h, src/nodesx.c: New file. * src/ways.h, src/Makefile, src/filedumper.c, src/functions.h, src/nodes.c, src/nodes.h, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/router.c, src/segments.c, src/segments.h, src/types.h, src/ways.c: Split the extended data types from the normal data types. * src/nodes.c: Return NULL if the node cannot be found. * src/Makefile, src/filedumper.c, src/optimiser.c, src/router.c: Add new command line options. * src/supersegments.c: Fix some status messages. * src/optimiser.c, src/types.h: Routing works with super-nodes now. 2009-02-06 Andrew M. Bishop <amb> * src/ways.c, src/segments.c, src/segments.h, src/supersegments.c, src/types.h, src/nodes.c, src/nodes.h, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/functions.h: Segments now not duplicated in database. Routing with all nodes works, not with super-nodes. 2009-02-04 Andrew M. Bishop <amb> * src/router.c: Fix usage output. * src/ways.c, src/ways.h: Only sort once, don't store the index. * src/planetsplitter.c, src/router.c: Use '--*' command line arguments, not '-*'. * src/nodes.c, src/router.c, src/segments.c, src/ways.c: Make sure that nodes, segments and ways could be loaded. * src/nodes.h, src/optimiser.c, src/router.c, src/segments.c, src/segments.h, src/supersegments.c, src/types.h, src/filedumper.c, src/nodes.c: Sort the nodes geographically and take coordinates as command line arguments. 2009-02-02 Andrew M. Bishop <amb> * src/ways.c, src/ways.h, src/nodes.c, src/nodes.h, src/osmparser.c, src/segments.c, src/segments.h, src/supersegments.c, src/types.h: More variable and function name changes. 2009-02-01 Andrew M. Bishop <amb> * src/profiles.c, src/router.c, src/segments.c, src/segments.h, src/supersegments.c, src/ways.c, src/ways.h, src/files.c, src/functions.h, src/nodes.c, src/nodes.h, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/filedumper.c: Rename some variable types. 2009-01-31 Andrew M. Bishop <amb> * src/segments.c, src/segments.h, src/supersegments.c, src/types.h, src/ways.c, src/ways.h, src/functions.h, src/nodes.c, src/nodes.h, src/optimiser.c, src/planetsplitter.c, src/profiles.h, src/router.c: Intermediate version during code cleanup. * src/optimiser.c, src/planetsplitter.c, src/router.c, src/segments.c, src/segments.h, src/functions.h, src/nodes.h: Intermediate checkin, routing now working. * src/Makefile: Don't print out anything when creating the dependencies directory. * src/planetsplitter.c, src/router.c: Add command line options to specify the directory and filename prefix. 2009-01-30 Andrew M. Bishop <amb> * src/results.c, src/planetsplitter.c: Remove gcc warning. * src/Makefile: Move dependencies to subdir. * src/osmparser.c: Remove gcc warning. 2009-01-29 Andrew M. Bishop <amb> * src/functions.h, src/nodes.c, src/nodes.h, src/optimiser.c, src/planetsplitter.c, src/router.c, src/segments.c, src/segments.h, src/supersegments.c: Intermediate version while transitioning data format for nodes and segments. 2009-01-28 Andrew M. Bishop <amb> * src/Makefile, src/functions.h, src/nodes.c, src/nodes.h, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/segments.c, src/segments.h, src/supersegments.c, src/ways.c, src/ways.h: Intermediate version while transitioning data format for nodes and segments. 2009-01-27 Andrew M. Bishop <amb> * src/Makefile, src/functions.h, src/nodes.c, src/nodes.h, src/optimiser.c, src/planetsplitter.c, src/router.c, src/segments.c, src/segments.h, src/supersegments.c, src/ways.c, src/ways.h: Intermediate version while transitioning data format for nodes and segments. 2009-01-26 Andrew M. Bishop <amb> * src/osmparser.c, src/planetsplitter.c, src/segments.c, src/segments.h, src/supersegments.c, src/ways.c, src/ways.h, src/filedumper.c, src/files.c, src/functions.h, src/optimiser.c: Change Segment to contain index of way not its real ID. Don't store the real way ID to save space. 2009-01-25 Andrew M. Bishop <amb> * src/segments.c, src/segments.h: Slightly speed up the Duration calculation by changing the macro. * src/osmparser.c, src/profiles.c, src/ways.c, src/ways.h: Fix misspelling of Unclassified. * src/planetsplitter.c, src/segments.c, src/segments.h, src/supersegments.c, src/ways.h, src/optimiser.c: Change the segment->way so that it contains the index of the way, not the id. * src/profiles.c, src/profiles.h: New file. * src/ways.c, src/ways.h, src/Makefile, src/functions.h, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/router.c, src/segments.c, src/segments.h: Added profiles to define speed and allowed highways. Added new options to planetsplitter and router to use the profiles. 2009-01-24 Andrew M. Bishop <amb> * src/optimiser.c: Changed some variable names for clarity. * src/planetsplitter.c: Print more information about progress. Don't quit until 99.9% unchanged. * src/optimiser.c, src/results.c, src/results.h, src/supersegments.c: Change the Results structure so that the real data doesn't need to be realloc(). Add functions to access the first and subsequent elements of the Results structure. 2009-01-23 Andrew M. Bishop <amb> * src/osmparser.c, src/planetsplitter.c: Fix bug with not specifying a method of transport. * src/optimiser.c, src/router.c: Proper check that it was unroutable. * src/functions.h, src/optimiser.c, src/planetsplitter.c, src/supersegments.c: Remove "iteration" as function argument. * src/functions.h, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/router.c, src/ways.c, src/ways.h: Add command line options to planetsplitter and router. Select transport type (must be allowed on way for parsing). Select highway types (ignore when parsing or routing). * src/ways.h, src/functions.h, src/optimiser.c, src/osmparser.c, src/router.c, src/segments.c, src/segments.h, src/ways.c: Add enumerated type Transport. Replace variables of AllowType with Transport where more appropriate. Replace AllowType with Allowed. Replace WayType with Highway. * src/osmparser.c: Only include ways that are not Way_Unknown type. * src/osmparser.c: Include permissive access. * src/functions.h, src/optimiser.c, src/results.c, src/results.h, src/router.c: Create a large or small results structure depending on how many nodes are expected. 2009-01-22 Andrew M. Bishop <amb> * src/results.h: Increase the number of bins to 64k. * src/optimiser.c, src/osmparser.c, src/segments.c, src/segments.h, src/supersegments.c: Remove INVALID_DISTANCE and INVALID_DURATION. * src/optimiser.c, src/osmparser.c, src/supersegments.c, src/ways.c, src/ways.h: Removed the Way_TYPE() macro. * src/results.c, src/results.h, src/optimiser.c: Move queue functions into results.c. * src/filedumper.c, src/nodes.c, src/nodes.h, src/planetsplitter.c, src/router.c: Nodes, Segments, Ways - Nodes, Segments, Ways. * src/filedumper.c, src/nodes.c, src/nodes.h, src/segments.c, src/segments.h, src/ways.c, src/ways.h: Remove the choice of indexed or non-indexed data structures. 2009-01-21 Andrew M. Bishop <amb> * src/optimiser.c: Various small speed-ups including not-reversing direction. * src/functions.h, src/optimiser.c, src/osmparser.c, src/router.c, src/segments.c, src/segments.h, src/supersegments.c, src/ways.c, src/ways.h: Calculate way speeds at routing time. * src/supersegments.c: Add reverse-oneway segments when creating supernodes. Check incoming oneway streets as well as outgoing ones. * src/osmparser.c: Don't change speed on roundabouts. 2009-01-20 Andrew M. Bishop <amb> * src/planetsplitter.c: Add command line options for skipping parsing and iteration limit. * src/optimiser.c, src/osmparser.c, src/segments.c, src/segments.h, src/supersegments.c: Remove duration from segment, calculate duration depending on speed. 2009-01-19 Andrew M. Bishop <amb> * src/functions.h, src/optimiser.c, src/planetsplitter.c, src/supersegments.c: Iteratively calculate the super-segments. * src/ways.h: Redefine Way_TYPE() to include one-way status. 2009-01-18 Andrew M. Bishop <amb> * src/optimiser.c, src/supersegments.c: Fix problems with way-type matching and duplicated/missing super-segments. * src/functions.h, src/optimiser.c, src/router.c: Print out a GPX file. * src/optimiser.c, src/filedumper.c, src/functions.h, src/planetsplitter.c, src/router.c, src/segments.c, src/segments.h, src/supersegments.c, src/ways.c, src/ways.h: Added Super-Ways and allow user to select method of transport. * src/segments.c: Fix for changes made to ways. * src/supersegments.c: Ensure that supernodes are inserted wherever the way type changes. * src/osmparser.c: Fill in the extra way information. * src/ways.h: Store more information about a way (allowed modes of transport). * src/filedumper.c: Fix output printing. * src/router.c: Print an error if no route can be found. * src/optimiser.c: Fix bugs when start and/or finish nodes are supernodes. 2009-01-17 Andrew M. Bishop <amb> * src/Makefile: Add the option to create assembler output files. * src/optimiser.c, src/results.c, src/results.h, src/supersegments.c: Change the contents of the results data structure. * src/router.c: Added an option to not print the result. 2009-01-16 Andrew M. Bishop <amb> * src/optimiser.c, src/results.h, src/router.c: Speed optimisation by changing the contents of the Results structure. * src/optimiser.c: Don't bother calculating the distance to go, it takes too long. 2009-01-14 Andrew M. Bishop <amb> * src/planetsplitter.c: Remove bad segments and non-way nodes. * src/nodes.c, src/nodes.h: Remove nodes which are not in highways. Fix the sorting and create indexes after sorting, not before saving. * src/segments.c, src/segments.h: Remove bad segments (repeated consecutive nodes and duplicate segments). Fix the sorting and create indexes after sorting, not before saving. * src/supersegments.c: Use invalid distances properly. * src/ways.c: Fix the sort algorithm and update the indexes after sorting, not before saving. * src/optimiser.c: Fix the bug with merging the results. Fix the bug with not clearing the results structure properly. * src/osmparser.c: Add segments that correspond to the wrong way along one-way routes with an invalid distance. 2009-01-11 Andrew M. Bishop <amb> * src/functions.h, src/optimiser.c, src/router.c: Routes correctly using super-nodes (not Lands End to John O'Groats though). * src/filedumper.c, src/functions.h, src/optimiser.c, src/planetsplitter.c, src/router.c, src/segments.h, src/supersegments.c: Replace Junction with SuperNode. * src/nodes.c, src/nodes.h, src/segments.h, src/ways.c, src/ways.h: Some small changes to the nodes, segments and ways functions. * src/Makefile, src/filedumper.c, src/functions.h, src/optimiser.c, src/planetsplitter.c, src/results.h, src/router.c, src/segments.c, src/segments.h, src/supersegments.c: Working version with supersegments and junctions. 2009-01-10 Andrew M. Bishop <amb> * src/ways.c, src/ways.h, src/osmparser.c, src/segments.c: Store more information about ways. * src/results.h, src/results.c: New file. * src/Makefile, src/optimiser.c: Move the results data type into new files. * src/nodes.h, src/segments.h, src/ways.h: Increase the increment for the indexed array case. * src/ways.h, src/Makefile, src/filedumper.c, src/functions.h, src/nodes.c, src/nodes.h, src/optimiser.c, src/osmparser.c, src/planetsplitter.c, src/router.c, src/segments.c, src/segments.h, src/supersegments.c, src/ways.c: About to add the super-segment functionality using Segments data type to hold them. * src/functions.h, src/types.h: Changed after nodes, ways and segment changes. 2009-01-09 Andrew M. Bishop <amb> * src/segments.h: New file. * src/segments.c: Changed the format of the segments data type to match the nodes. * src/nodes.h: Enable indexed arrays. * src/ways.h: New file. * src/ways.c: Changed the format of the ways data type to match the nodes. * src/nodes.c, src/nodes.h: Changed the format of the nodes data type again. 2009-01-07 Andrew M. Bishop <amb> * src/nodes.h: New file. * src/nodes.c: Lots of modifications: Two data structures - in memory (pointers) and in file (array). Data is hashed into multiple bins. Each function takes a nodes structure as an argument. 2009-01-06 Andrew M. Bishop <amb> * src/supersegments.c: New file. * src/Makefile, src/filedumper.c, src/functions.h, src/planetsplitter.c, src/types.h: Added SuperSegments data type, but it does nothing yet. * src/optimiser.c: Tried to optimise the Queue data type. It was slower than the original. 2009-01-05 Andrew M. Bishop <amb> * src/filedumper.c: Print out the longest segment. * src/optimiser.c: Some optimisations. Increase the number of result bins and change find_insert_result() into insert_result(). 2009-01-04 Andrew M. Bishop <amb> * src/optimiser.c: Introduced some new data types to simplify the code. * src/filedumper.c: Print more useful information. * src/segments.c, src/types.h, src/ways.c, src/filedumper.c, src/functions.h, src/nodes.c, src/optimiser.c, src/osmparser.c, src/planetsplitter.c: Changed the node, way and segment functions and data types. Removed 'alloced', shortened the prototype array. Remove the automatic sorting of the data. Added assert statements. 2009-01-03 Andrew M. Bishop <amb> * src/ways.c: New file. * src/router.c, src/types.h, src/Makefile, src/filedumper.c, src/functions.h, src/optimiser.c, src/osmparser.c, src/planetsplitter.c: Added the ways to the output. 2009-01-02 Andrew M. Bishop <amb> * src/optimiser.c, src/osmparser.c, src/segments.c, src/types.h: Added macros to convert between distance/km and duration/hours/minutes. Shortened the Segment data type with shorter distances and durations. 2009-01-01 Andrew M. Bishop <amb> * src/functions.h, src/nodes.c, src/planetsplitter.c, src/segments.c, src/types.h: Remove the functions to initialise the node and segment arrays. * src/optimiser.c, src/router.c, src/Makefile: Print out the results. 2008-12-31 Andrew M. Bishop <amb> * src/types.h, src/segments.c, src/router.c, src/planetsplitter.c, src/osmparser.c, src/optimiser.c, src/nodes.c, src/functions.h, src/files.c, src/filedumper.c, src/Makefile: New file. ���������������������������������������������������������������������������������������������������routino-3.2/Makefile�������������������������������������������������������������������������������� 644 � 233 � 144 � 2603 12563636400 7673� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Top level Makefile # # Part of the Routino routing software. # # This file Copyright 2009-2015 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # All configuration is in the top-level Makefile.conf include Makefile.conf # Sub-directories and sub-makefiles SUBDIRS=src xml doc web extras ######## all: for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done ######## test: for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done ######## install: for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done ######## clean: for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done ######## distclean: for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done ######## .PHONY:: all test install clean distclean �����������������������������������������������������������������������������������������������������������������������������routino-3.2/Makefile.conf��������������������������������������������������������������������������� 644 � 233 � 144 � 7001 13015115414 10602� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configuration Makefile # # Part of the Routino routing software. # # This file Copyright 2013-2015 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # Automatic operating system detection UNAME=$(shell uname) HOST=UNIX ifneq ($(findstring CYGWIN,$(UNAME)),) HOST=CYGWIN endif ifneq ($(findstring MINGW,$(UNAME)),) HOST=MINGW endif # Simplify handling of executable targets ending in .exe ifeq ($(HOST),MINGW) .EXE=.exe else .EXE= endif # Installation locations (edit if required) ifneq ($(HOST),MINGW) prefix=/usr/local bindir=$(prefix)/bin incdir=$(prefix)/include libdir=$(prefix)/lib docdir=$(prefix)/doc/routino datadir=$(prefix)/share/routino else prefix="c:/Program Files/Routino" bindir=$(prefix)/bin incdir=$(prefix)/include libdir=$(prefix)/lib docdir=$(prefix)/doc datadir=$(prefix)/xml endif # Library version for ABI compatibility SOVERSION=0 # Full library version (SOVERSION.MINOR[.RELEASE]) LIBVERSION=$(SOVERSION).0.0 # Compilation programs CC=gcc LD=gcc # Maths library LDFLAGS=-lm # Language dialect selection CFLAGS=-std=c99 # Warning options CFLAGS+=-Wall -Wmissing-prototypes -Wextra -Wno-unused-parameter -pedantic # Optimisation options CFLAGS+=-O3 CFLAGS+=-ffast-math # Optimisation option (only works if compilation and execution use exactly the same CPU architecture). #CFLAGS+=-march=native # Debugging symbols #CFLAGS+=-g # Sanitizer for debugging memory addresses #CFLAGS+=-fsanitize=address -fsanitize=leak #LDFLAGS+=-fsanitize=address -fsanitize=leak # Sanitizer for debugging undefined behaviour #CFLAGS+=-fsanitize=undefined #LDFLAGS+=-fsanitize=undefined # Extra flags for compiling libroutino shared library (visibility of symbols, shared) CFLAGS_LIB=-fvisibility=hidden LDFLAGS_LIB=-shared ifeq ($(HOST),UNIX) # Extra flags for compiling libroutino shared library (position independent code) CFLAGS_LIB+=-fPIC LDFLAGS_LIB+=-fPIC endif ifeq ($(HOST),UNIX) # Extra flags for compiling libroutino shared library (SONAME) LDFLAGS_SONAME=-Wl,-soname=libroutino.so.$(SOVERSION) LDFLAGS_SLIM_SONAME=-Wl,-soname=libroutino-slim.so.$(SOVERSION) endif # Put the current directory in the shared library path for the router using libroutino LDFLAGS_LDSO=-Wl,-R. # Required for multi-threaded support (comment these two lines out if not required) CFLAGS+=-pthread -DUSE_PTHREADS LDFLAGS+=-pthread -lpthread ifneq ($(HOST),MINGW) # Required for bzip2 support (comment these two lines out if not required) CFLAGS+=-DUSE_BZIP2 LDFLAGS+=-lbz2 endif # Required for gzip support (comment these two lines out if not required) CFLAGS+=-DUSE_GZIP LDFLAGS+=-lz # Required for xz support (uncomment these two lines if required) #CFLAGS+=-DUSE_XZ #LDFLAGS+=-llzma # Required to use stdio with files > 2GiB on 32-bit system. CFLAGS+=-D_FILE_OFFSET_BITS=64 ifneq ($(HOST),MINGW) # Required to compile on Linux without a warning about pread() and pwrite() functions. CFLAGS+=-D_POSIX_C_SOURCE=200809L endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/INSTALL.txt����������������������������������������������������������������������������� 777 � 233 � 144 � 0 12031126065 12421� 2doc/INSTALL.txt����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/README.txt������������������������������������������������������������������������������ 777 � 233 � 144 � 0 12031126065 12077� 2doc/README.txt�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/NEWS.txt�������������������������������������������������������������������������������� 777 � 233 � 144 � 0 12031126065 11535� 2doc/NEWS.txt�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/agpl-3.0.txt���������������������������������������������������������������������������� 644 � 233 � 144 � 103330 11506610625 10251� 0������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see <http://www.gnu.org/licenses/>. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/extras/��������������������������������������������������������������������������������� 40755 � 233 � 144 � 0 12656433203 7523� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/extras/find-fixme/���������������������������������������������������������������������� 40755 � 233 � 144 � 0 13061252060 11540� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/extras/find-fixme/fixme.xml������������������������������������������������������������� 644 � 233 � 144 � 3547 12156135452 13430� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" ?> <!-- ============================================================ An XML format file containing Routino tagging rules - copy the input file directly to the output with no modifications. Part of the Routino routing software. ============================================================ This file Copyright 2010-2013 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ============================================================ --> <routino-tagging xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.routino.org/xml/routino-tagging.xsd"> <!-- - - - - - - - - - - Node rules - - - - - - - - - - --> <node> <!-- Add a marker for those nodes that match the wanted tag(s) --> <if k="fixme"> <output k="fixme-finder:keep" v="yes" /> </if> <!-- Copy all tags from input to output --> <if> <output /> </if> </node> <!-- - - - - - - - - - - Way rules - - - - - - - - - - --> <way> <!-- Add a marker for those ways that match the wanted tag(s) --> <if k="fixme"> <output k="fixme-finder:keep" v="yes" /> </if> <!-- Copy all tags from input to output --> <if> <output /> </if> </way> <!-- - - - - - - - - - - Relation rules - - - - - - - - - - --> <relation> <!-- Add a marker for those relations that match the wanted tag(s) --> <if k="fixme"> <output k="fixme-finder:keep" v="yes" /> </if> <!-- Copy all tags from input to output --> <if> <output /> </if> </relation> </routino-tagging> ���������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/extras/find-fixme/fixme-finder.c�������������������������������������������������������� 644 � 233 � 144 � 24757 12574075132 14347� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************** OSM planet file fixme finder. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. ***************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include "version.h" #include "types.h" #include "ways.h" #include "typesx.h" #include "nodesx.h" #include "waysx.h" #include "relationsx.h" #include "files.h" #include "logging.h" #include "errorlogx.h" #include "functions.h" #include "osmparser.h" #include "tagging.h" #include "uncompress.h" /* Global variables */ /*+ The name of the temporary directory. +*/ char *option_tmpdirname=NULL; /*+ The amount of RAM to use for filesorting. +*/ size_t option_filesort_ramsize=0; /*+ The number of threads to use for filesorting. +*/ int option_filesort_threads=1; /* Local functions */ static void print_usage(int detail,const char *argerr,const char *err); /*++++++++++++++++++++++++++++++++++++++ The main program for the find-fixme. ++++++++++++++++++++++++++++++++++++++*/ int main(int argc,char** argv) { NodesX *OSMNodes; WaysX *OSMWays; RelationsX *OSMRelations; ErrorLogsX *OSMErrorLogs; char *dirname=NULL,*prefix=NULL,*tagging=NULL; int option_keep=1; int option_filenames=0; int arg; printf_program_start(); /* Parse the command line arguments */ for(arg=1;arg<argc;arg++) { if(!strcmp(argv[arg],"--version")) print_usage(-1,NULL,NULL); else if(!strcmp(argv[arg],"--help")) print_usage(1,NULL,NULL); else if(!strncmp(argv[arg],"--dir=",6)) dirname=&argv[arg][6]; else if(!strncmp(argv[arg],"--sort-ram-size=",16)) option_filesort_ramsize=atoi(&argv[arg][16]); #if defined(USE_PTHREADS) && USE_PTHREADS else if(!strncmp(argv[arg],"--sort-threads=",15)) option_filesort_threads=atoi(&argv[arg][15]); #endif else if(!strncmp(argv[arg],"--tmpdir=",9)) option_tmpdirname=&argv[arg][9]; else if(!strncmp(argv[arg],"--tagging=",10)) tagging=&argv[arg][10]; else if(!strcmp(argv[arg],"--loggable")) option_loggable=1; else if(!strcmp(argv[arg],"--logtime")) option_logtime=1; else if(!strcmp(argv[arg],"--logmemory")) option_logmemory=1; else if(argv[arg][0]=='-' && argv[arg][1]=='-') print_usage(0,argv[arg],NULL); else option_filenames++; } /* Check the specified command line options */ if(!option_filesort_ramsize) { #if SLIM option_filesort_ramsize=64*1024*1024; #else option_filesort_ramsize=256*1024*1024; #endif } else option_filesort_ramsize*=1024*1024; if(!option_tmpdirname) { if(!dirname) option_tmpdirname="."; else option_tmpdirname=dirname; } if(tagging) { if(!ExistsFile(tagging)) { fprintf(stderr,"Error: The '--tagging' option specifies a file that does not exist.\n"); exit(EXIT_FAILURE); } } else { tagging=FileName(dirname,prefix,"fixme.xml"); if(!ExistsFile(tagging)) { fprintf(stderr,"Error: The '--tagging' option was not used and the default 'fixme.xml' does not exist.\n"); exit(EXIT_FAILURE); } } if(ParseXMLTaggingRules(tagging)) { fprintf(stderr,"Error: Cannot read the tagging rules in the file '%s'.\n",tagging); exit(EXIT_FAILURE); } /* Create new node, segment, way and relation variables */ OSMNodes=NewNodeList(0,0); OSMWays=NewWayList(0,0); OSMRelations=NewRelationList(0,0); /* Create the error log file */ open_errorlog(FileName(dirname,prefix,"fixme.log"),0,option_keep); /* Parse the file */ for(arg=1;arg<argc;arg++) { int fd; char *filename,*p; if(argv[arg][0]=='-' && argv[arg][1]=='-') continue; filename=strcpy(malloc(strlen(argv[arg])+1),argv[arg]); fd=OpenFile(filename); if((p=strstr(filename,".bz2")) && !strcmp(p,".bz2")) { fd=Uncompress_Bzip2(fd); *p=0; } if((p=strstr(filename,".gz")) && !strcmp(p,".gz")) { fd=Uncompress_Gzip(fd); *p=0; } if((p=strstr(filename,".xz")) && !strcmp(p,".xz")) { fd=Uncompress_Xz(fd); *p=0; } printf("\nParse OSM Data [%s]\n==============\n\n",filename); fflush(stdout); if((p=strstr(filename,".pbf")) && !strcmp(p,".pbf")) { if(ParsePBFFile(fd,OSMNodes,OSMWays,OSMRelations)) exit(EXIT_FAILURE); } else if((p=strstr(filename,".o5m")) && !strcmp(p,".o5m")) { if(ParseO5MFile(fd,OSMNodes,OSMWays,OSMRelations)) exit(EXIT_FAILURE); } else { if(ParseOSMFile(fd,OSMNodes,OSMWays,OSMRelations)) exit(EXIT_FAILURE); } CloseFile(fd); free(filename); } DeleteXMLTaggingRules(); FinishNodeList(OSMNodes); FinishWayList(OSMWays); FinishRelationList(OSMRelations); /* Sort the data */ printf("\nSort OSM Data\n=============\n\n"); fflush(stdout); /* Sort the nodes, ways and relations */ SortNodeList(OSMNodes); SortWayList(OSMWays); SortRelationList(OSMRelations); /* Process the data */ RenameFile(OSMNodes->filename_tmp,OSMNodes->filename); RenameFile(OSMWays->filename_tmp,OSMWays->filename); RenameFile(OSMRelations->rrfilename_tmp,OSMRelations->rrfilename); RenameFile(OSMRelations->trfilename_tmp,OSMRelations->trfilename); close_errorlog(); printf("\nCreate Error Log\n================\n\n"); fflush(stdout); OSMErrorLogs=NewErrorLogList(); ProcessErrorLogs(OSMErrorLogs,OSMNodes,OSMWays,OSMRelations); SortErrorLogsGeographically(OSMErrorLogs); SaveErrorLogs(OSMErrorLogs,FileName(dirname,prefix,"fixme.mem")); FreeErrorLogList(OSMErrorLogs); /* Free the memory (delete the temporary files) */ FreeNodeList(OSMNodes,0); FreeWayList(OSMWays,0); FreeRelationList(OSMRelations,0); printf("\n"); fflush(stdout); printf_program_end(); exit(EXIT_SUCCESS); } /*++++++++++++++++++++++++++++++++++++++ Print out the usage information. int detail The level of detail to use: -1 = just version number, 0 = low detail, 1 = full details. const char *argerr The argument that gave the error (if there is one). const char *err Other error message (if there is one). ++++++++++++++++++++++++++++++++++++++*/ static void print_usage(int detail,const char *argerr,const char *err) { if(detail<0) { fprintf(stderr, "Routino version " ROUTINO_VERSION " " ROUTINO_URL ".\n" ); } if(detail>=0) { fprintf(stderr, "Usage: fixme-finder [--version]\n" " [--help]\n" " [--dir=<dirname>]\n" #if defined(USE_PTHREADS) && USE_PTHREADS " [--sort-ram-size=<size>] [--sort-threads=<number>]\n" #else " [--sort-ram-size=<size>]\n" #endif " [--tmpdir=<dirname>]\n" " [--tagging=<filename>]\n" " [--loggable] [--logtime] [--logmemory]\n" " [<filename.osm> ...\n" " | <filename.pbf> ...\n" " | <filename.o5m> ..." #if defined(USE_BZIP2) && USE_BZIP2 "\n | <filename.(osm|o5m).bz2> ..." #endif #if defined(USE_GZIP) && USE_GZIP "\n | <filename.(osm|o5m).gz> ..." #endif #if defined(USE_XZ) && USE_XZ "\n | <filename.(osm|o5m).xz> ..." #endif "]\n"); if(argerr) fprintf(stderr, "\n" "Error with command line parameter: %s\n",argerr); if(err) fprintf(stderr, "\n" "Error: %s\n",err); } if(detail==1) fprintf(stderr, "\n" "--version Print the version of Routino.\n" "\n" "--help Prints this information.\n" "\n" "--dir=<dirname> The directory containing the fixme database.\n" "\n" "--sort-ram-size=<size> The amount of RAM (in MB) to use for data sorting\n" #if SLIM " (defaults to 64MB otherwise.)\n" #else " (defaults to 256MB otherwise.)\n" #endif #if defined(USE_PTHREADS) && USE_PTHREADS "--sort-threads=<number> The number of threads to use for data sorting.\n" #endif "\n" "--tmpdir=<dirname> The directory name for temporary files.\n" " (defaults to the '--dir' option directory.)\n" "\n" "--tagging=<filename> The name of the XML file containing the tagging rules\n" " (defaults to 'fixme.xml' with '--dir' option)\n" "\n" "--loggable Print progress messages suitable for logging to file.\n" "--logtime Print the elapsed time for each processing step.\n" "--logmemory Print the max allocated/mapped memory for each step.\n" "\n" "<filename.osm>, <filename.pbf>, <filename.o5m>\n" " The name(s) of the file(s) to read and parse.\n" " Filenames ending '.pbf' read as PBF, filenames ending\n" " '.o5m' read as O5M, others as XML.\n" #if defined(USE_BZIP2) && USE_BZIP2 " Filenames ending '.bz2' will be bzip2 uncompressed.\n" #endif #if defined(USE_GZIP) && USE_GZIP " Filenames ending '.gz' will be gzip uncompressed.\n" #endif #if defined(USE_XZ) && USE_XZ " Filenames ending '.xz' will be xz uncompressed.\n" #endif ); exit(!detail); } �����������������routino-3.2/extras/find-fixme/Makefile�������������������������������������������������������������� 644 � 233 � 144 � 12624 12656434157 13263� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# find-fixme Makefile # # Part of the Routino routing software. # # This file Copyright 2013-2016 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # All configuration is in the top-level Makefile.conf include ../../Makefile.conf # Web file paths WEBBINDIR=web/bin WEBDATADIR=web/data WEBWWWDIR=web/www # Compilation targets DEPDIR=.deps C=$(wildcard *.c) D=$(wildcard $(DEPDIR)/*.d) ROUTINO_SRC=../../src ROUTINO_WEBWWWDIR=../../web/www/routino ROUTINO_DOCDIR=../../doc/html EXE=fixme-finder$(.EXE) fixme-finder-slim$(.EXE) fixme-dumper$(.EXE) fixme-dumper-slim$(.EXE) DATA=fixme.xml WWW_COPY=page-elements.css page-elements.js maplayout.css mapprops.js maploader.js DOC_COPY=style.css ######## all: all-bin all-data all-www all-bin: $(EXE) @[ -d $(WEBBINDIR) ] || mkdir -p $(WEBBINDIR) @for file in $(EXE); do \ if [ ! -f $(WEBBINDIR)/$$file ] || [ $$file -nt $(WEBBINDIR)/$$file ]; then \ echo cp $$file $(WEBBINDIR) ;\ cp -f $$file $(WEBBINDIR) ;\ fi ;\ done all-data: @[ -d $(WEBDATADIR) ] || mkdir -p $(WEBDATADIR) @for file in $(DATA); do \ if [ ! -f $(WEBDATADIR)/$$file ] || [ $$file -nt $(WEBDATADIR)/$$file ]; then \ echo cp $$file $(WEBDATADIR) ;\ cp -f $$file $(WEBDATADIR) ;\ fi ;\ done all-www: @for file in $(WWW_COPY); do \ if [ ! -f $(WEBWWWDIR)/$$file ] || [ $(ROUTINO_WEBWWWDIR)/$$file -nt $(WEBWWWDIR)/$$file ]; then \ echo cp $(ROUTINO_WEBWWWDIR)/$$file $(WEBWWWDIR) ;\ cp -f $(ROUTINO_WEBWWWDIR)/$$file $(WEBWWWDIR) ;\ fi ;\ done @for file in $(DOC_COPY); do \ if [ ! -f $(WEBWWWDIR)/$$file ] || [ $(ROUTINO_DOCDIR)/$$file -nt $(WEBWWWDIR)/$$file ]; then \ echo cp $(ROUTINO_DOCDIR)/$$file $(WEBWWWDIR) ;\ cp -f $(ROUTINO_DOCDIR)/$$file $(WEBWWWDIR) ;\ fi ;\ done ######## FIXME_FINDER_OBJ=fixme-finder.o osmparser.o \ $(ROUTINO_SRC)/nodesx.o $(ROUTINO_SRC)/segmentsx.o $(ROUTINO_SRC)/waysx.o $(ROUTINO_SRC)/relationsx.o \ $(ROUTINO_SRC)/ways.o $(ROUTINO_SRC)/types.o \ $(ROUTINO_SRC)/files.o $(ROUTINO_SRC)/logging.o $(ROUTINO_SRC)/logerror.o $(ROUTINO_SRC)/errorlogx.o \ $(ROUTINO_SRC)/sorting.o \ $(ROUTINO_SRC)/xmlparse.o $(ROUTINO_SRC)/tagging.o \ $(ROUTINO_SRC)/uncompress.o $(ROUTINO_SRC)/osmxmlparse.o $(ROUTINO_SRC)/osmpbfparse.o $(ROUTINO_SRC)/osmo5mparse.o ifeq ($(HOST),MINGW) FIXME_FINDER_OBJ+=$(ROUTINO_SRC)/mman-win32.o endif fixme-finder$(.EXE) : $(FIXME_FINDER_OBJ) $(LD) $^ -o $@ $(LDFLAGS) ######## FIXME_FINDER_SLIM_OBJ=fixme-finder-slim.o osmparser.o \ $(ROUTINO_SRC)/nodesx-slim.o $(ROUTINO_SRC)/segmentsx-slim.o $(ROUTINO_SRC)/waysx-slim.o $(ROUTINO_SRC)/relationsx-slim.o \ $(ROUTINO_SRC)/ways.o $(ROUTINO_SRC)/types.o \ $(ROUTINO_SRC)/files.o $(ROUTINO_SRC)/logging.o $(ROUTINO_SRC)/logerror-slim.o $(ROUTINO_SRC)/errorlogx-slim.o \ $(ROUTINO_SRC)/sorting.o \ $(ROUTINO_SRC)/xmlparse.o $(ROUTINO_SRC)/tagging.o \ $(ROUTINO_SRC)/uncompress.o $(ROUTINO_SRC)/osmxmlparse.o $(ROUTINO_SRC)/osmpbfparse.o $(ROUTINO_SRC)/osmo5mparse.o ifeq ($(HOST),MINGW) FIXME_FINDER_SLIM_OBJ+=$(ROUTINO_SRC)/mman-win32.o endif fixme-finder-slim$(.EXE) : $(FIXME_FINDER_SLIM_OBJ) $(LD) $^ -o $@ $(LDFLAGS) ######## FIXME_DUMPER_OBJ=fixme-dumper.o \ $(ROUTINO_SRC)/errorlog.o \ $(ROUTINO_SRC)/files.o $(ROUTINO_SRC)/logging.o $(ROUTINO_SRC)/xmlparse.o ifeq ($(HOST),MINGW) FIXME_DUMPER_OBJ+=$(ROUTINO_SRC)/mman-win32.o endif fixme-dumper$(.EXE) : $(FIXME_DUMPER_OBJ) $(LD) $^ -o $@ $(LDFLAGS) ######## FIXME_DUMPER_SLIM_OBJ=fixme-dumper-slim.o \ $(ROUTINO_SRC)/errorlog-slim.o \ $(ROUTINO_SRC)/files.o $(ROUTINO_SRC)/logging.o $(ROUTINO_SRC)/xmlparse.o ifeq ($(HOST),MINGW) FIXME_DUMPER_SLIM_OBJ+=$(ROUTINO_SRC)/mman-win32.o endif fixme-dumper-slim$(.EXE) : $(FIXME_DUMPER_SLIM_OBJ) $(LD) $^ -o $@ $(LDFLAGS) ######## $(ROUTINO_SRC)/%.o : cd $(ROUTINO_SRC) && $(MAKE) $(notdir $@) $(ROUTINO_SRC)/%-slim.o : cd $(ROUTINO_SRC) && $(MAKE) $(notdir $@) %.o : %.c -@[ -d $(DEPDIR) ] || mkdir $(DEPDIR) $(CC) -c $(CFLAGS) -DSLIM=0 -I$(ROUTINO_SRC) $< -o $@ -MMD -MP -MF $(addprefix $(DEPDIR)/,$(addsuffix .d,$(basename $@))) %-slim.o : %.c -@[ -d $(DEPDIR) ] || mkdir $(DEPDIR) $(CC) -c $(CFLAGS) -DSLIM=1 -I$(ROUTINO_SRC) $< -o $@ -MMD -MP -MF $(addprefix $(DEPDIR)/,$(addsuffix .d,$(basename $@))) ######## test: ######## install: ######## clean: rm -f *~ rm -f *.o cd $(WEBBINDIR) && rm -f $(EXE) cd $(WEBDATADIR) && rm -f $(DATA) cd $(WEBWWWDIR) && rm -f $(WWW_COPY) cd $(WEBWWWDIR) && rm -f $(DOC_COPY) rm -f $(EXE) rm -f $(D) rm -fr $(DEPDIR) rm -f core ######## distclean: clean ######## include $(D) ######## .PHONY:: all test install clean distclean .PHONY:: all-bin all-data all-www ������������������������������������������������������������������������������������������������������������routino-3.2/extras/find-fixme/README.txt������������������������������������������������������������ 644 � 233 � 144 � 10536 12574075462 13320� 0������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� Find and Display FIXME tags =========================== The "fixme" tag is often used in OSM data to mark an item whose details are not completely known - as a reminder or request for somebody to check it. Since Routino can now generate a map of tagging problems that it finds it is easy to extend this to finding all "fixme" tags. The files in this directory provide a complete set of executables and web pages for extracting and displaying all items with "fixme" tags on a map. Editing fixme.xml and changing the rules for selecting tags allows for creating custom databases to display items containing any desired tag(s). fixme-finder ------------ This program is a modified version of the Routino planetsplitter program and can be used on an OSM file to extract the fixme tags and generate a database of them. Usage: fixme-finder [--version] [--help] [--dir=<dirname>] [--sort-ram-size=<size>] [--sort-threads=<number>] [--tmpdir=<dirname>] [--tagging=<filename>] [--loggable] [--logtime] [--logmemory] [<filename.osm> ... | <filename.pbf> ... | <filename.o5m> ... | <filename.(osm|o5m).bz2> ... | <filename.(osm|o5m).gz> ... | <filename.(osm|o5m).xz> ...] --version Print the version of Routino. --help Prints this information. --dir=<dirname> The directory containing the fixme database. --sort-ram-size=<size> The amount of RAM (in MB) to use for data sorting (defaults to 256MB otherwise.) --sort-threads=<number> The number of threads to use for data sorting. --tmpdir=<dirname> The directory name for temporary files. (defaults to the '--dir' option directory.) --tagging=<filename> The name of the XML file containing the tagging rules (defaults to 'fixme.xml' with '--dir' option) --loggable Print progress messages suitable for logging to file. --logtime Print the elapsed time for each processing step. --logmemory Print the max allocated/mapped memory for each step. <filename.osm>, <filename.pbf>, <filename.o5m> The name(s) of the file(s) to read and parse. Filenames ending '.pbf' read as PBF, filenames ending '.o5m' read as O5M, others as XML. Filenames ending '.bz2' will be bzip2 uncompressed (if bzip2 support compiled in). Filenames ending '.gz' will be gzip uncompressed (if gzip support compiled in). Filenames ending '.xz' will be xz uncompressed (if xz support compiled in). fixme-dumper ------------ This program is a modified version of the Routino filedumper program and is used by the web page CGI to display the information on a map. Usage: fixme-dumper [--version] [--help] [--dir=<dirname>] [--statistics] [--visualiser --latmin=<latmin> --latmax=<latmax> --lonmin=<lonmin> --lonmax=<lonmax> --data=<data-type>] [--dump--visualiser [--data=fixme<number>]] --version Print the version of Routino. --help Prints this information. --dir=<dirname> The directory containing the fixme database. --statistics Print statistics about the fixme database. --visualiser Extract selected data from the fixme database: --latmin=<latmin> * the minimum latitude (degrees N). --latmax=<latmax> * the maximum latitude (degrees N). --lonmin=<lonmin> * the minimum longitude (degrees E). --lonmax=<lonmax> * the maximum longitude (degrees E). --data=<data-type> * the type of data to select. <data-type> can be selected from: fixmes = fixme tags extracted from the data. --dump-visualiser Dump selected contents of the database in HTML. --data=fixme<number> * the fixme with the selected index. ������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/extras/find-fixme/fixme-dumper.c�������������������������������������������������������� 644 � 233 � 144 � 26637 12574075134 14375� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*************************************** Fixme file dumper. Part of the Routino routing software. ******************/ /****************** This file Copyright 2013-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. ***************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <time.h> #include <math.h> #include "version.h" #include "types.h" #include "errorlog.h" #include "files.h" #include "xmlparse.h" /* Local functions */ static void OutputErrorLog(ErrorLogs *errorlogs,double latmin,double latmax,double lonmin,double lonmax); static void print_errorlog_visualiser(ErrorLogs *errorlogs,index_t item); static char *RFC822Date(time_t t); static void print_usage(int detail,const char *argerr,const char *err); /*++++++++++++++++++++++++++++++++++++++ The main program for the fixme dumper. ++++++++++++++++++++++++++++++++++++++*/ int main(int argc,char** argv) { ErrorLogs*OSMErrorLogs; int arg; char *dirname=NULL,*prefix=NULL; char *errorlogs_filename; int option_statistics=0; int option_visualiser=0,coordcount=0; double latmin=0,latmax=0,lonmin=0,lonmax=0; char *option_data=NULL; int option_dump_visualiser=0; /* Parse the command line arguments */ for(arg=1;arg<argc;arg++) { if(!strcmp(argv[arg],"--version")) print_usage(-1,NULL,NULL); else if(!strcmp(argv[arg],"--help")) print_usage(1,NULL,NULL); else if(!strncmp(argv[arg],"--dir=",6)) dirname=&argv[arg][6]; else if(!strcmp(argv[arg],"--statistics")) option_statistics=1; else if(!strcmp(argv[arg],"--visualiser")) option_visualiser=1; else if(!strcmp(argv[arg],"--dump-visualiser")) option_dump_visualiser=1; else if(!strncmp(argv[arg],"--latmin",8) && argv[arg][8]=='=') {latmin=degrees_to_radians(atof(&argv[arg][9]));coordcount++;} else if(!strncmp(argv[arg],"--latmax",8) && argv[arg][8]=='=') {latmax=degrees_to_radians(atof(&argv[arg][9]));coordcount++;} else if(!strncmp(argv[arg],"--lonmin",8) && argv[arg][8]=='=') {lonmin=degrees_to_radians(atof(&argv[arg][9]));coordcount++;} else if(!strncmp(argv[arg],"--lonmax",8) && argv[arg][8]=='=') {lonmax=degrees_to_radians(atof(&argv[arg][9]));coordcount++;} else if(!strncmp(argv[arg],"--data",6) && argv[arg][6]=='=') option_data=&argv[arg][7]; else if(!strncmp(argv[arg],"--fixme=",8)) ; else print_usage(0,argv[arg],NULL); } if((option_statistics + option_visualiser + option_dump_visualiser)!=1) print_usage(0,NULL,"Must choose --visualiser, --statistics or --dump-visualiser."); /* Load in the data - Note: No error checking because Load*List() will call exit() in case of an error. */ OSMErrorLogs=LoadErrorLogs(errorlogs_filename=FileName(dirname,prefix,"fixme.mem")); /* Write out the visualiser data */ if(option_visualiser) { if(coordcount!=4) print_usage(0,NULL,"The --visualiser option must have --latmin, --latmax, --lonmin, --lonmax.\n"); if(!option_data) print_usage(0,NULL,"The --visualiser option must have --data.\n"); if(!strcmp(option_data,"fixmes")) OutputErrorLog(OSMErrorLogs,latmin,latmax,lonmin,lonmax); else print_usage(0,option_data,NULL); } /* Print out statistics */ if(option_statistics) { struct stat buf; /* Examine the files */ printf("Files\n"); printf("-----\n"); printf("\n"); stat(errorlogs_filename,&buf); printf("'%s%sfixme.mem' - %9"PRIu64" Bytes\n",prefix?prefix:"",prefix?"-":"",(uint64_t)buf.st_size); printf("%s\n",RFC822Date(buf.st_mtime)); printf("\n"); printf("\n"); printf("Error Logs\n"); printf("----------\n"); printf("\n"); printf("Number(total) =%9"Pindex_t"\n",OSMErrorLogs->file.number); printf("Number(geographical) =%9"Pindex_t"\n",OSMErrorLogs->file.number_geo); printf("Number(non-geographical)=%9"Pindex_t"\n",OSMErrorLogs->file.number_nongeo); printf("\n"); stat(errorlogs_filename,&buf); #if !SLIM printf("Total strings=%9zu Bytes\n",(size_t)buf.st_size-(OSMErrorLogs->strings-(char*)OSMErrorLogs->data)); #else printf("Total strings=%9zu Bytes\n",(size_t)buf.st_size-(size_t)OSMErrorLogs->stringsoffset); #endif } /* Print out internal data (in HTML format for the visualiser) */ if(option_dump_visualiser) { index_t item; if(!option_data) print_usage(0,NULL,"The --dump-visualiser option must have --data.\n"); for(arg=1;arg<argc;arg++) if(!strncmp(argv[arg],"--data=fixme",12)) { item=atoi(&argv[arg][12]); if(item<OSMErrorLogs->file.number) print_errorlog_visualiser(OSMErrorLogs,item); else printf("Invalid fixme number; minimum=0, maximum=%"Pindex_t".\n",OSMErrorLogs->file.number-1); } } exit(EXIT_SUCCESS); } /*++++++++++++++++++++++++++++++++++++++ Output the data for error logs within the region. ErrorLogs *errorlogs The set of error logs to use. double latmin The minimum latitude. double latmax The maximum latitude. double lonmin The minimum longitude. double lonmax The maximum longitude. ++++++++++++++++++++++++++++++++++++++*/ static void OutputErrorLog(ErrorLogs *errorlogs,double latmin,double latmax,double lonmin,double lonmax) { ll_bin_t latminbin=latlong_to_bin(radians_to_latlong(latmin))-errorlogs->file.latzero; ll_bin_t latmaxbin=latlong_to_bin(radians_to_latlong(latmax))-errorlogs->file.latzero; ll_bin_t lonminbin=latlong_to_bin(radians_to_latlong(lonmin))-errorlogs->file.lonzero; ll_bin_t lonmaxbin=latlong_to_bin(radians_to_latlong(lonmax))-errorlogs->file.lonzero; ll_bin_t latb,lonb; index_t i,index1,index2; /* Loop through all of the error logs. */ for(latb=latminbin;latb<=latmaxbin;latb++) for(lonb=lonminbin;lonb<=lonmaxbin;lonb++) { ll_bin2_t llbin=lonb*errorlogs->file.latbins+latb; if(llbin<0 || llbin>(errorlogs->file.latbins*errorlogs->file.lonbins)) continue; index1=LookupErrorLogOffset(errorlogs,llbin); index2=LookupErrorLogOffset(errorlogs,llbin+1); if(index2>errorlogs->file.number_geo) index2=errorlogs->file.number_geo; for(i=index1;i<index2;i++) { ErrorLog *errorlogp=LookupErrorLog(errorlogs,i,1); double lat=latlong_to_radians(bin_to_latlong(errorlogs->file.latzero+latb)+off_to_latlong(errorlogp->latoffset)); double lon=latlong_to_radians(bin_to_latlong(errorlogs->file.lonzero+lonb)+off_to_latlong(errorlogp->lonoffset)); if(lat>latmin && lat<latmax && lon>lonmin && lon<lonmax) printf("fixme%"Pindex_t" %.6f %.6f\n",i,radians_to_degrees(lat),radians_to_degrees(lon)); } } } /*++++++++++++++++++++++++++++++++++++++ Print out an error log entry from the database (in visualiser format). ErrorLogs *errorlogs The set of error logs to use. index_t item The error log index to print. ++++++++++++++++++++++++++++++++++++++*/ static void print_errorlog_visualiser(ErrorLogs *errorlogs,index_t item) { char *string=LookupErrorLogString(errorlogs,item); printf("%s\n",ParseXML_Encode_Safe_XML(string)); } /*+ Conversion from time_t to date string (day of week). +*/ static const char* const weekdays[7]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; /*+ Conversion from time_t to date string (month of year). +*/ static const char* const months[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; /*++++++++++++++++++++++++++++++++++++++ Convert the time into an RFC 822 compliant date. char *RFC822Date Returns a pointer to a fixed string containing the date. time_t t The time. ++++++++++++++++++++++++++++++++++++++*/ static char *RFC822Date(time_t t) { static char value[32]; /* static allocation of return value */ char weekday[4]; char month[4]; struct tm *tim; tim=gmtime(&t); strcpy(weekday,weekdays[tim->tm_wday]); strcpy(month,months[tim->tm_mon]); /* Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 */ sprintf(value,"%3s, %02d %3s %4d %02d:%02d:%02d %s", weekday, tim->tm_mday, month, tim->tm_year+1900, tim->tm_hour, tim->tm_min, tim->tm_sec, "GMT" ); return(value); } /*++++++++++++++++++++++++++++++++++++++ Print out the usage information. int detail The level of detail to use: -1 = just version number, 0 = low detail, 1 = full details. const char *argerr The argument that gave the error (if there is one). const char *err Other error message (if there is one). ++++++++++++++++++++++++++++++++++++++*/ static void print_usage(int detail,const char *argerr,const char *err) { if(detail<0) { fprintf(stderr, "Routino version " ROUTINO_VERSION " " ROUTINO_URL ".\n" ); } if(detail>=0) { fprintf(stderr, "Usage: fixme-dumper [--version]\n" " [--help]\n" " [--dir=<dirname>]\n" " [--statistics]\n" " [--visualiser --latmin=<latmin> --latmax=<latmax>\n" " --lonmin=<lonmin> --lonmax=<lonmax>\n" " --data=<data-type>]\n" " [--dump--visualiser [--data=fixme<number>]]\n"); if(argerr) fprintf(stderr, "\n" "Error with command line parameter: %s\n",argerr); if(err) fprintf(stderr, "\n" "Error: %s\n",err); } if(detail==1) fprintf(stderr, "\n" "--version Print the version of Routino.\n" "\n" "--help Prints this information.\n" "\n" "--dir=<dirname> The directory containing the fixme database.\n" "\n" "--statistics Print statistics about the fixme database.\n" "\n" "--visualiser Extract selected data from the fixme database:\n" " --latmin=<latmin> * the minimum latitude (degrees N).\n" " --latmax=<latmax> * the maximum latitude (degrees N).\n" " --lonmin=<lonmin> * the minimum longitude (degrees E).\n" " --lonmax=<lonmax> * the maximum longitude (degrees E).\n" " --data=<data-type> * the type of data to select.\n" "\n" " <data-type> can be selected from:\n" " fixmes = fixme tags extracted from the data.\n" "\n" "--dump-visualiser Dump selected contents of the database in HTML.\n" " --data=fixme<number> * the fixme with the selected index.\n"); exit(!detail); } �������������������������������������������������������������������������������������������������routino-3.2/extras/find-fixme/web/������������������������������������������������������������������ 40755 � 233 � 144 � 0 12216114770 12323� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/extras/find-fixme/web/bin/�������������������������������������������������������������� 40755 � 233 � 144 � 0 13061252060 13065� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/extras/find-fixme/web/data/������������������������������������������������������������� 40755 � 233 � 144 � 0 13061252060 13226� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/extras/find-fixme/web/www/�������������������������������������������������������������� 40755 � 233 � 144 � 0 13061252066 13147� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/extras/find-fixme/web/www/fixme.css����������������������������������������������������� 644 � 233 � 144 � 3133 12260524267 15012� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* // Routino (extras) fixme web page style sheet. // // Part of the Routino routing software. // // This file Copyright 2008-2013 Andrew M. Bishop // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. */ /*--------------------------------*/ /* Left panel - override defaults */ /*--------------------------------*/ DIV.hideshow_box { overflow-x: auto; } /*-----------------------------------*/ /* Left panel - specific tab options */ /*-----------------------------------*/ DIV#tab_fixme_div INPUT { padding: 0; border: 1px solid; margin: 0; text-align: center; } DIV#tab_fixme_div INPUT:hover { background: #F0F0C0; } DIV#tab_fixme_div DIV.center { text-align: center; } DIV#tab_fixme_div TABLE { padding: 0; border: 0 hidden; margin: 0; } DIV#tab_fixme_div TABLE TD { padding: 0; border: 0; margin: 0; } DIV#tab_fixme_div INPUT { padding: 0; border: 1px solid; margin: 0; } /*-------*/ /* Popup */ /*-------*/ DIV.popup { font-family: monospace; font-size: 10px; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������routino-3.2/extras/find-fixme/web/www/fixme.html���������������������������������������������������� 644 � 233 � 144 � 13252 12625131677 15215� 0�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="keywords" content="openstreetmap routino fixme"> <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no"> <title>Routino Extras : Viewer for OpenStreetMap "fixme" Tags
Fixme Data
OSM "fixme" Tags This web page allows viewing the "fixme" tags in OSM data. It is generated using a modified version of the Routino router data processor.
Instructions Zoom in and then use the button below to download the data. The server will only return data if the selected area is small enough.
Status
No data displayed
Get Data
The points displayed on the map are the location of items in the OSM data that are tagged with "fixme" = "...". Clicking on one of the points will display the Node, Way or Relation identifier and the contents of the tag.
+ - Help
Quick Start
Zoom to an area and select one of the buttons to display the fixme data.

Data Failure
If the area selected is too large (depends on the data type) then the status will say "Failed to get fixme data" - zoom in and try again.

Data Generator: Routino | Geo Data: | Tiles:
routino-3.2/extras/find-fixme/web/www/fixme.openlayers.js 644 233 144 36570 12304345114 17040 0// // Routino (extras) fixme web page Javascript // // Part of the Routino routing software. // // This file Copyright 2008-2014 Andrew M. Bishop // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . // //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Initialisation ///////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // Process the URL query string and extract the arguments var legal={"^lon" : "^[-0-9.]+$", "^lat" : "^[-0-9.]+$", "^zoom" : "^[0-9]+$"}; var args={}; if(location.search.length>1) { var query,queries; query=location.search.replace(/^\?/,""); query=query.replace(/;/g,"&"); queries=query.split("&"); for(var i=0;i" + data_text + ""; document.getElementById("attribution_tile").innerHTML="" + tile_text + ""; } change_attribution(0); // Add two vectors layers (one for highlights that display behind the vectors) layerHighlights = new OpenLayers.Layer.Vector("Highlights",{displayInLayerSwitcher: false}); map.addLayer(layerHighlights); layerVectors = new OpenLayers.Layer.Vector("Markers",{displayInLayerSwitcher: false}); map.addLayer(layerVectors); // Handle feature selection and popup select = new OpenLayers.Control.SelectFeature(layerVectors, {onSelect: selectFeature, onUnselect: unselectFeature}); map.addControl(select); select.activate(); createPopup(); // Add a boxes layer layerBoxes = new OpenLayers.Layer.Boxes("Boundary",{displayInLayerSwitcher: false}); map.addLayer(layerBoxes); box=null; // Move the map map.events.register("moveend", map, updateURLs); var lon =args["lon"]; var lat =args["lat"]; var zoom=args["zoom"]; if(lon !== undefined && lat !== undefined && zoom !== undefined) { if(lonmapprops.eastedge) lon=mapprops.eastedge; if(latmapprops.northedge) lat=mapprops.northedge; if(zoommapprops.zoomin) zoom=mapprops.zoomin; var lonlat = new OpenLayers.LonLat(lon,lat); lonlat.transform(epsg4326,epsg900913); map.moveTo(lonlat,zoom-map.minZoomLevel); } else { map.setCenter(map.restrictedExtent.getCenterLonLat(), map.getZoomForExtent(map.restrictedExtent,true)); map.maxResolution = map.getResolution(); } // Unhide editing URL if variable set if(mapprops.editurl !== undefined && mapprops.editurl !== "") { var edit_url=document.getElementById("edit_url"); edit_url.style.display=""; edit_url.href=mapprops.editurl; } updateURLs(); } // // Format a number in printf("%.5f") format. // function format5f(number) { var newnumber=Math.floor(number*100000+0.5); var delta=0; if(newnumber>=0 && newnumber<100000) delta= 100000; if(newnumber<0 && newnumber>-100000) delta=-100000; var string=String(newnumber+delta); var intpart =string.substring(0,string.length-5); var fracpart=string.substring(string.length-5,string.length); if(delta>0) intpart="0"; if(delta<0) intpart="-0"; return(intpart + "." + fracpart); } // // Build a set of URL arguments for the map location // function buildMapArguments() { var lonlat = map.getCenter().clone(); lonlat.transform(epsg900913,epsg4326); var zoom = map.getZoom() + map.minZoomLevel; return "lat=" + format5f(lonlat.lat) + ";lon=" + format5f(lonlat.lon) + ";zoom=" + zoom; } // // Update the URLs // function updateURLs() { var mapargs=buildMapArguments(); var links=document.getElementsByTagName("a"); for(var i=0; i" + id + "'"); } } } drawPopup(string.split("><").join(">
<").split("
<tag").join("
  <tag")); } //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Server handling //////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // // Define an AJAX request object // function ajaxGET(url,success,failure,state) { var ajaxRequest=new XMLHttpRequest(); function ajaxGOT(options) { if(this.readyState==4) if(this.status==200) { if(typeof(options.success)=="function") options.success(this,options.state); } else { if(typeof(options.failure)=="function") options.failure(this,options.state); } } ajaxRequest.onreadystatechange = function(){ ajaxGOT.call(ajaxRequest,{success: success, failure: failure, state: state}); }; ajaxRequest.open("GET", url, true); ajaxRequest.send(null); } // // Display the status // function displayStatus(type,subtype,content) { var child=document.getElementById("result_status").firstChild; do { if(child.id !== undefined) child.style.display="none"; child=child.nextSibling; } while(child !== null); var chosen_status=document.getElementById("result_status_" + type); chosen_status.style.display=""; if(subtype !== undefined) { var format_status=document.getElementById("result_status_" + subtype).innerHTML; chosen_status.innerHTML=format_status.replace("#",String(content)); } } // // Display data statistics // function displayStatistics() { // Use AJAX to get the statistics ajaxGET("fixme.cgi?statistics=yes", runStatisticsSuccess); } // // Success in running data statistics generation. // function runStatisticsSuccess(response) { document.getElementById("statistics_data").innerHTML="
" + response.responseText + "
"; document.getElementById("statistics_link").style.display="none"; } // // Get the requested data // function displayData(datatype) // called from fixme.html { // Delete the old data unselectFeature(); select.deactivate(); layerVectors.destroyFeatures(); layerHighlights.destroyFeatures(); if(box !== null) layerBoxes.removeMarker(box); box=null; // Print the status displayStatus("no_data"); // Return if just here to clear the data if(datatype === "") return; // Get the new data var mapbounds=map.getExtent().clone(); mapbounds.transform(epsg900913,epsg4326); var url="fixme.cgi"; url=url + "?lonmin=" + format5f(mapbounds.left); url=url + ";latmin=" + format5f(mapbounds.bottom); url=url + ";lonmax=" + format5f(mapbounds.right); url=url + ";latmax=" + format5f(mapbounds.top); url=url + ";data=" + datatype; // Use AJAX to get the data ajaxGET(url, runFixmeSuccess, runFailure); } // // Success in getting the error log data // function runFixmeSuccess(response) { var lines=response.responseText.split("\n"); var style = new OpenLayers.Style({},{stroke: false, pointRadius: 3,fillColor: "#FF0000", cursor: "pointer"}); var features=[]; for(var line=0;line Routino Extras : Viewer for OpenStreetMap "fixme" Tags

Routino Extras : Viewer for OpenStreetMap "fixme" Tags

routino-3.2/extras/find-fixme/web/www/fixme.leaflet.js 644 233 144 31554 12272743374 16306 0// // Routino (extras) fixme web page Javascript // // Part of the Routino routing software. // // This file Copyright 2008-2014 Andrew M. Bishop // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . // //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Initialisation ///////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // Process the URL query string and extract the arguments var legal={"^lon" : "^[-0-9.]+$", "^lat" : "^[-0-9.]+$", "^zoom" : "^[0-9]+$"}; var args={}; if(location.search.length>1) { var query,queries; query=location.search.replace(/^\?/,""); query=query.replace(/;/g,"&"); queries=query.split("&"); for(var i=0;i" + data_text + ""; document.getElementById("attribution_tile").innerHTML="" + tile_text + ""; } change_attribution(0); // Add two vectors layers (one for highlights that display behind the vectors) layerVectors = L.layerGroup(); map.addLayer(layerVectors); layerHighlights = L.layerGroup(); map.addLayer(layerHighlights); // Handle popup createPopup(); // Add a boxes layer layerBoxes = L.rectangle(map.options.maxBounds,{stroke: false, color: "#f00", weight: 1, opacity: 1.0, fill: false}); map.addLayer(layerBoxes); box=false; // Move the map map.on("moveend", updateURLs); var lon =args["lon"]; var lat =args["lat"]; var zoom=args["zoom"]; if(lon !== undefined && lat !== undefined && zoom !== undefined) { if(lonmapprops.eastedge) lon=mapprops.eastedge; if(latmapprops.northedge) lat=mapprops.northedge; if(zoommapprops.zoomin) zoom=mapprops.zoomin; map.setView(L.latLng(lat,lon),zoom); } else map.fitBounds(map.options.maxBounds); // Unhide editing URL if variable set if(mapprops.editurl !== undefined && mapprops.editurl !== "") { var edit_url=document.getElementById("edit_url"); edit_url.style.display=""; edit_url.href=mapprops.editurl; } updateURLs(); } // // Format a number in printf("%.5f") format. // function format5f(number) { var newnumber=Math.floor(number*100000+0.5); var delta=0; if(newnumber>=0 && newnumber<100000) delta= 100000; if(newnumber<0 && newnumber>-100000) delta=-100000; var string=String(newnumber+delta); var intpart =string.substring(0,string.length-5); var fracpart=string.substring(string.length-5,string.length); if(delta>0) intpart="0"; if(delta<0) intpart="-0"; return(intpart + "." + fracpart); } // // Build a set of URL arguments for the map location // function buildMapArguments() { var lonlat = map.getCenter(); var zoom = map.getZoom(); return "lat=" + format5f(lonlat.lat) + ";lon=" + format5f(lonlat.lng) + ";zoom=" + zoom; } // // Update the URLs // function updateURLs() { var mapargs=buildMapArguments(); var links=document.getElementsByTagName("a"); for(var i=0; i" + id + "'"); } } } drawPopup(string.split("><").join(">
<").split("
<tag").join("
  <tag")); } //////////////////////////////////////////////////////////////////////////////// /////////////////////////////// Server handling //////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // // Define an AJAX request object // function ajaxGET(url,success,failure,state) { var ajaxRequest=new XMLHttpRequest(); function ajaxGOT(options) { if(this.readyState==4) if(this.status==200) { if(typeof(options.success)=="function") options.success(this,options.state); } else { if(typeof(options.failure)=="function") options.failure(this,options.state); } } ajaxRequest.onreadystatechange = function(){ ajaxGOT.call(ajaxRequest,{success: success, failure: failure, state: state}); }; ajaxRequest.open("GET", url, true); ajaxRequest.send(null); } // // Display the status // function displayStatus(type,subtype,content) { var child=document.getElementById("result_status").firstChild; do { if(child.id !== undefined) child.style.display="none"; child=child.nextSibling; } while(child !== null); var chosen_status=document.getElementById("result_status_" + type); chosen_status.style.display=""; if(subtype !== undefined) { var format_status=document.getElementById("result_status_" + subtype).innerHTML; chosen_status.innerHTML=format_status.replace("#",String(content)); } } // // Display data statistics // function displayStatistics() { // Use AJAX to get the statistics ajaxGET("fixme.cgi?statistics=yes", runStatisticsSuccess); } // // Success in running data statistics generation. // function runStatisticsSuccess(response) { document.getElementById("statistics_data").innerHTML="
" + response.responseText + "
"; document.getElementById("statistics_link").style.display="none"; } // // Get the requested data // function displayData(datatype) // called from fixme.html { // Delete the old data unselectFeature(); layerVectors.clearLayers(); layerHighlights.clearLayers(); layerBoxes.setStyle({stroke:false}); box=false; // Print the status displayStatus("no_data"); // Return if just here to clear the data if(datatype === "") return; // Get the new data var mapbounds=map.getBounds(); var url="fixme.cgi"; url=url + "?lonmin=" + format5f(mapbounds.getWest()); url=url + ";latmin=" + format5f(mapbounds.getSouth()); url=url + ";lonmax=" + format5f(mapbounds.getEast()); url=url + ";latmax=" + format5f(mapbounds.getNorth()); url=url + ";data=" + datatype; // Use AJAX to get the data ajaxGET(url, runFixmeSuccess, runFailure); } // // Success in getting the error log data // function runFixmeSuccess(response) { var lines=response.responseText.split("\n"); for(var line=0;line. # use strict; # Use the directory paths script require "./paths.pl"; # Use the perl CGI module use CGI ':cgi'; # Create the query and get the parameters my $query=new CGI; my @rawparams=$query->param; # Legal CGI parameters with regexp validity check my %legalparams=( "latmin" => "[-0-9.]+", "latmax" => "[-0-9.]+", "lonmin" => "[-0-9.]+", "lonmax" => "[-0-9.]+", "data" => "fixmes", "dump" => "fixme[0-9]+", "statistics" => "yes" ); # Validate the CGI parameters, ignore invalid ones my %cgiparams=(); foreach my $key (@rawparams) { foreach my $test (keys (%legalparams)) { if($key =~ m%^$test$%) { my $value=$query->param($key); if($value =~ m%^$legalparams{$test}$%) { $cgiparams{$key}=$value; last; } } } } # Data, dump or statistics? my $params=""; my $data =$cgiparams{"data"}; my $dump =$cgiparams{"dump"}; my $statistics=$cgiparams{"statistics"}; if(!defined $data && !defined $dump && !defined $statistics) { print header(-status => '500 Invalid CGI parameters'); exit; } if(defined $statistics) { # Print the output print header('text/plain'); # Set the parameters $params.=" --statistics"; } elsif(defined $data) { # Parameters to limit range selected my $limits=0.5; # Check the parameters my $latmin=$cgiparams{"latmin"}; my $latmax=$cgiparams{"latmax"}; my $lonmin=$cgiparams{"lonmin"}; my $lonmax=$cgiparams{"lonmax"}; if($latmin eq "" || $latmax eq "" || $lonmin eq "" || $lonmax eq "" || $data eq "") { print header(-status => '500 Invalid CGI parameters'); exit; } if(($latmax-$latmin)>$limits || ($lonmax-$lonmin)>$limits) { print header(-status => '500 Selected area too large'); exit; } # Print the output print header('text/plain'); print "$latmin $lonmin $latmax $lonmax\n"; # Set the parameters $params.=" --visualiser --data=$data"; $params.=" --latmin=$latmin --latmax=$latmax --lonmin=$lonmin --lonmax=$lonmax"; } else { # Print the output print header('text/plain'); # Set the parameters $params.=" --dump-visualiser --data=$dump"; } # Run the filedumper $params.=" --dir=$main::data_dir" if($main::data_dir); $params.=" --prefix=$main::data_prefix" if($main::data_prefix); system "$main::bin_dir/$main::fixme_dumper_exe $params 2>&1"; routino-3.2/extras/find-fixme/web/www/paths.pl 644 233 144 2172 12153665547 14656 0# # Routino CGI paths Perl script # # Part of the Routino routing software. # # This file Copyright 2008-2013 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # Directory path parameters # EDIT THIS to set the root directory for the non-web data files. $root_dir=".."; # EDIT THIS to change the location of the individual directories. $bin_dir="$root_dir/bin"; $data_dir="$root_dir/data"; # EDIT THIS to change the name of the executable (enables easy selection of slim mode). $fixme_dumper_exe="fixme-dumper"; 1; routino-3.2/extras/find-fixme/web/www/.htaccess 644 233 144 2166 12640720765 14776 0## ## Options for Apache web server for language specific web pages and to run ## Routino Fixme-finder CGI script. ## # For some of the configuration options in this file to be accepted the # 'AllowOverride' option in the main Apache configuration file must be set to a # particular value. A suitable value for the 'AllowOverride' option is # 'Options=MultiViews,ExecCGI FileInfo Limit' which will allow this file to be # used unmodified. Alternatively the specific option can be commented out from # this file and set in the main Apache configuration file. # The Routino CGI scripts are stored in this directory and use the filename # extension ".cgi". This filename extension needs to be registered with Apache # for the scripts to be executed. AddHandler cgi-script .cgi # The ExecCGI option must be set for the CGIs in this directory to be executed # by Apache. Options +ExecCGI # The CGI scripts that are used by Routino also call some other Perl scripts, to # stop these scripts from being seen by web users they can be denied by the # following entry. Order Deny,Allow Deny from all routino-3.2/extras/find-fixme/osmparser.c 644 233 144 20176 12563633050 13771 0/*************************************** OSM file parser (either JOSM or planet) Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2015 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include "types.h" #include "typesx.h" #include "nodesx.h" #include "waysx.h" #include "relationsx.h" #include "osmparser.h" #include "tagging.h" #include "logging.h" /* Local parsing variables (re-initialised for each file) */ static NodesX *nodes; static WaysX *ways; static RelationsX *relations; static node_t *way_nodes; static int way_nnodes; static node_t *relation_nodes; static int relation_nnodes; static way_t *relation_ways; static int relation_nways; static relation_t *relation_relations; static int relation_nrelations; /*++++++++++++++++++++++++++++++++++++++ Initialise the OSM parser by initialising the local variables. NodesX *OSMNodes The data structure of nodes to fill in. WaysX *OSMWays The data structure of ways to fill in. RelationsX *OSMRelations The data structure of relations to fill in. ++++++++++++++++++++++++++++++++++++++*/ void InitialiseParser(NodesX *OSMNodes,WaysX *OSMWays,RelationsX *OSMRelations) { /* Copy the function parameters and initialise the variables */ nodes=OSMNodes; ways=OSMWays; relations=OSMRelations; way_nodes=(node_t*)malloc(256*sizeof(node_t)); relation_nodes =(node_t *)malloc(256*sizeof(node_t)); relation_ways =(way_t *)malloc(256*sizeof(way_t)); relation_relations=(relation_t*)malloc(256*sizeof(relation_t)); } /*++++++++++++++++++++++++++++++++++++++ Clean up the memory after parsing. ++++++++++++++++++++++++++++++++++++++*/ void CleanupParser(void) { /* Free the variables */ free(way_nodes); free(relation_nodes); free(relation_ways); free(relation_relations); } /*++++++++++++++++++++++++++++++++++++++ Add node references to a way. int64_t node_id The node ID to add or zero to clear the list. ++++++++++++++++++++++++++++++++++++++*/ void AddWayRefs(int64_t node_id) { if(node_id==0) way_nnodes=0; else { node_t id; if(way_nnodes && (way_nnodes%256)==0) way_nodes=(node_t*)realloc((void*)way_nodes,(way_nnodes+256)*sizeof(node_t)); id=(node_t)node_id; logassert((int64_t)id==node_id,"Node ID too large (change node_t to 64-bits?)"); /* check node id can be stored in node_t data type. */ way_nodes[way_nnodes++]=id; } } /*++++++++++++++++++++++++++++++++++++++ Add node, way or relation references to a relation. int64_t node_id The node ID to add or zero if it is not a node. int64_t way_id The way ID to add or zero if it is not a way. int64_t relation_id The relation ID to add or zero if it is not a relation. const char *role The role played by this referenced item or NULL. If all of node_id, way_id and relation_id are zero then the list is cleared. ++++++++++++++++++++++++++++++++++++++*/ void AddRelationRefs(int64_t node_id,int64_t way_id,int64_t relation_id,const char *role) { if(node_id==0 && way_id==0 && relation_id==0) { relation_nnodes=0; relation_nways=0; relation_nrelations=0; } else if(node_id!=0) { node_t id; id=(node_t)node_id; logassert((int64_t)id==node_id,"Node ID too large (change node_t to 64-bits?)"); /* check node id can be stored in node_t data type. */ if(relation_nnodes && (relation_nnodes%256)==0) relation_nodes=(node_t*)realloc((void*)relation_nodes,(relation_nnodes+256)*sizeof(node_t)); relation_nodes[relation_nnodes++]=id; } else if(way_id!=0) { way_t id; id=(way_t)way_id; logassert((int64_t)id==way_id,"Way ID too large (change way_t to 64-bits?)"); /* check way id can be stored in way_t data type. */ if(relation_nways && (relation_nways%256)==0) relation_ways=(way_t*)realloc((void*)relation_ways,(relation_nways+256)*sizeof(way_t)); relation_ways[relation_nways++]=id; } else /* if(relation_id!=0) */ { relation_t id; id=(relation_t)relation_id; logassert((int64_t)id==relation_id,"Relation ID too large (change relation_t to 64-bits?)"); /* check relation id can be stored in relation_t data type. */ if(relation_nrelations && (relation_nrelations%256)==0) relation_relations=(relation_t*)realloc((void*)relation_relations,(relation_nrelations+256)*sizeof(relation_t)); relation_relations[relation_nrelations++]=relation_id; } } /*++++++++++++++++++++++++++++++++++++++ Process the tags associated with a node. TagList *tags The list of node tags. int64_t node_id The id of the node. double latitude The latitude of the node. double longitude The longitude of the node. int mode The mode of operation to take (create, modify, delete). ++++++++++++++++++++++++++++++++++++++*/ void ProcessNodeTags(TagList *tags,int64_t node_id,double latitude,double longitude,int mode) { node_t id; int i; /* Convert id */ id=(node_t)node_id; logassert((int64_t)id==node_id,"Node ID too large (change node_t to 64-bits?)"); /* check node id can be stored in node_t data type. */ /* Parse the tags */ for(i=0;intags;i++) { char *k=tags->k[i]; if(!strcmp(k,"fixme-finder:keep")) { DeleteTag(tags,"fixme-finder:keep"); logerror("%s\n",logerror_node(id),StringifyTag(tags)); } } /* Store the node */ AppendNodeList(nodes,id,degrees_to_radians(latitude),degrees_to_radians(longitude),0,0); } /*++++++++++++++++++++++++++++++++++++++ Process the tags associated with a way. TagList *tags The list of way tags. int64_t way_id The id of the way. int mode The mode of operation to take (create, modify, delete). ++++++++++++++++++++++++++++++++++++++*/ void ProcessWayTags(TagList *tags,int64_t way_id,int mode) { Way way={0}; way_t id; int i; /* Convert id */ id=(way_t)way_id; logassert((int64_t)id==way_id,"Way ID too large (change way_t to 64-bits?)"); /* check way id can be stored in way_t data type. */ /* Parse the tags */ for(i=0;intags;i++) { char *k=tags->k[i]; if(!strcmp(k,"fixme-finder:keep")) { DeleteTag(tags,"fixme-finder:keep"); logerror("%s\n",logerror_way(id),StringifyTag(tags)); } } /* Store the way */ AppendWayList(ways,id,&way,way_nodes,way_nnodes,""); } /*++++++++++++++++++++++++++++++++++++++ Process the tags associated with a relation. TagList *tags The list of relation tags. int64_t relation_id The id of the relation. int mode The mode of operation to take (create, modify, delete). ++++++++++++++++++++++++++++++++++++++*/ void ProcessRelationTags(TagList *tags,int64_t relation_id,int mode) { relation_t id; int i; /* Convert id */ id=(relation_t)relation_id; logassert((int64_t)id==relation_id,"Relation ID too large (change relation_t to 64-bits?)"); /* check relation id can be stored in relation_t data type. */ /* Parse the tags */ for(i=0;intags;i++) { char *k=tags->k[i]; if(!strcmp(k,"fixme-finder:keep")) { DeleteTag(tags,"fixme-finder:keep"); logerror("%s\n",logerror_relation(id),StringifyTag(tags)); } } /* Store the relation */ AppendRouteRelationList(relations,id,0, relation_nodes,relation_nnodes, relation_ways,relation_nways, relation_relations,relation_nrelations); } routino-3.2/extras/Makefile 644 233 144 2657 12313271770 11210 0# Extra files Makefile # # Part of the Routino routing software. # # This file Copyright 2013 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # All configuration is in the top-level Makefile.conf include ../Makefile.conf # Sub-directories and sub-makefiles SUBFILES=$(wildcard */Makefile) SUBDIRS=$(foreach f,$(SUBFILES),$(dir $f)) ######## all: for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done ######## test: for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done ######## install: for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done ######## clean: for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done ######## distclean: for dir in $(SUBDIRS); do \ ( cd $$dir && $(MAKE) $@ ); \ done ######## .PHONY:: all test install clean distclean routino-3.2/extras/README.txt 644 233 144 2557 12225317162 11243 0 ROUTINO EXTRAS ============== This directory contains some programs and scripts that although distributed with Routino are not necessary components of a working OSM router. They are generally either programs that use some components of Routino (i.e. they are compiled and linked with some of the Routino source code) or they are scripts to be used to process the outputs of Routino. Each program or script has its own directory which contains all of the necessary source code, documentation and/or web pages for that program or script. None of them will be installed when Routino is installed. -------------------------------------------------------------------------------- tagmodifier - A program to read an OSM XML file and process it using a Routino tagging rules file to create a modified output XML file. errorlog - Scripts for processing the error log file (created by running planetsplitter with the --errorlog option). plot-time - Plots the output of 'planetsplitter --loggable --logtime' to show how long each part of the processing takes. find-fixme - A modified version of the Routino planetsplitter and filedumper programs to scan an OSM file for "fixme" tags and create a database so that web pages provided can display them. routino-3.2/extras/statistics/ 40755 233 144 0 13061252060 11704 5routino-3.2/extras/statistics/update.sh 755 233 144 6457 12660125512 13562 0#!/bin/sh # # OSM data statistics shell script # # Part of the Routino routing software. # # This file Copyright 2008-2016 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # set -e trap "rm binned.dat" 0 # Database location and zoom - PARAMETERS THAT CAN BE EDITED database_dir="../../web/data" database_dir="/home/amb/www/local/cgi-temp/routino-data" zoom=13 # Run the dumper ./dumper --speed=32,48,64,80,96,112 --dir=$database_dir --zoom=$zoom > binned.dat # Generate the base map ./create-basemap.pl # Generate the highway outputs ./create-image.pl highway motorway 0 < binned.dat ./create-image.pl highway trunk 1 < binned.dat ./create-image.pl highway primary 2 < binned.dat ./create-image.pl highway secondary 3 < binned.dat ./create-image.pl highway tertiary 4 < binned.dat ./create-image.pl highway unclassified 5 < binned.dat ./create-image.pl highway residential 6 < binned.dat ./create-image.pl highway service 7 < binned.dat ./create-image.pl highway track 8 < binned.dat ./create-image.pl highway cycleway 9 < binned.dat ./create-image.pl highway path 10 < binned.dat ./create-image.pl highway steps 11 < binned.dat ./create-image.pl highway ferry 12 < binned.dat # Generate the transport outputs ./create-image.pl transport foot 13 < binned.dat ./create-image.pl transport horse 14 < binned.dat ./create-image.pl transport bicycle 15 < binned.dat ./create-image.pl transport wheelchair 16 < binned.dat ./create-image.pl transport moped 17 < binned.dat ./create-image.pl transport motorcycle 18 < binned.dat ./create-image.pl transport motorcar 19 < binned.dat ./create-image.pl transport goods 20 < binned.dat ./create-image.pl transport HGV 21 < binned.dat ./create-image.pl transport PSV 22 < binned.dat # Create the property outputs ./create-image.pl property paved 23 < binned.dat ./create-image.pl property multilane 24 < binned.dat ./create-image.pl property bridge 25 < binned.dat ./create-image.pl property tunnel 26 < binned.dat ./create-image.pl property foot-route 27 < binned.dat ./create-image.pl property bicycle-route 28 < binned.dat ./create-image.pl property cycle-both-ways 29 < binned.dat ./create-image.pl property oneway 30 < binned.dat # Generate the speed limit outputs ./create-image.pl speed 20mph 31 < binned.dat ./create-image.pl speed 30mph 32 < binned.dat ./create-image.pl speed 40mph 33 < binned.dat ./create-image.pl speed 50mph 34 < binned.dat ./create-image.pl speed 60mph 35 < binned.dat ./create-image.pl speed 70mph 36 < binned.dat # Tidy up and exit # This is handled by the trap at the top # #rm binned.dat routino-3.2/extras/statistics/create-image.pl 755 233 144 13720 12660125354 14637 0#!/usr/bin/perl # # OSM data statistics Perl script # # Part of the Routino routing software. # # This file Copyright 2008-2016 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use Graphics::Magick; # Range of tiles and zoom - PARAMETERS THAT CAN BE EDITED @xrange=(120..129); # At zoom level 8 @yrange=(73..87); # At zoom level 8 $zbase=6; # Zoom level of images in basemap. $z=13; # Granularity of data points. # Base image dimensions $basescale=2**(8-$zbase); $width =(1+$#xrange)*256/$basescale; $height=(1+$#yrange)*256/$basescale; # Chosen zoom level $scale=2**(8-$z); $tilesize=256*$scale/$basescale; # Get the command line arguments $prefix=$ARGV[0]; $name =$ARGV[1]; $number=$ARGV[2]+0; # Graph annotations $annotation{highway} ="'highway=$name'"; $annotation{property} ="$name property"; $annotation{speed} ="'maxspeed=$name'"; $annotation{transport}="$name allowed"; # Read in the data %density=(); while() { ($x,$y,@distances)=split(/ +/); $distance=$distances[$number]; if($distance > 0) { $area=&xy_area($z,$x,$y); $density{$x,$y}=($distance/$area); } } # Find the maximum value $max=0; foreach $xy (keys %density) { $density=$density{$xy}; $max=$density if($density>$max); } $max=500.0*int(($max+499)/500); $max=500.0 if($max<500); # Create the overlay image $colour0=&colour(0); $image=Graphics::Magick->new(size => "${width}x${height}"); $image->ReadImage("xc:$colour0"); foreach $xy (keys %density) { ($x,$y)=split($;,$xy); $colour=&colour($density{$x,$y}/$max); $x1=(($x*$scale)-$xrange[0])*256/$basescale; $y1=(($y*$scale)-$yrange[0])*256/$basescale; if($tilesize==1) { $image->Draw(primitive => 'point', points => "$x1,$y1", fill => $colour, antialias => 'false'); } else { $x2=$x1+$tilesize-1; $y2=$y1+$tilesize-1; $image->Draw(primitive => 'rectangle', points => "$x1,$y1 $x2,$y2", strokewidth => 0, stroke => $colour, fill => $colour, antialias => 'false'); } } # Create the scale indicator $indicator=Graphics::Magick->new(size => "${width}x40"); $indicator->ReadImage('xc:white'); foreach $v (0..($width-2*5)) { $x=$v+5; $y1=12; $y2=23; $density=$v/($width-2*5); $indicator->Draw(primitive => 'line', points => "$x,$y1,$x,$y2", stroke => &colour($density), antialias => 'false'); } $indicator->Annotate(text => "0", font => 'Helvetica', pointsize => '12', style => Normal, fill => 'black', x => 5, y => 11, align => Left); foreach $frac (0.25,0.5,0.75) { $indicator->Annotate(text => $max*$frac, font => 'Helvetica', pointsize => '12', style => Normal, fill => 'black', x => 5+($width-2*5)*$frac, y => 11, align => Center); } $indicator->Annotate(text => $max, font => 'Helvetica', pointsize => '12', style => Normal, fill => 'black', x => $width-5, y => 11, align => Right); $indicator->Annotate(text => "Highway density (metres/square km) for $annotation{$prefix} per zoom $z tile", font => 'Helvetica', pointsize => '14', style => Normal, fill => 'black', x => $width/2, y => 36, align => Center); # Create the combined images $base=Graphics::Magick->new; $base->ReadImage("basemap.png"); $base->Composite(image => $image, compose => Dissolve, x => 0, y => 0, opacity => 50); $final=Graphics::Magick->new(size => ($base->Get('width')+2)."x".($base->Get('height')+$indicator->Get('height')+3)); $final->ReadImage('xc:black'); $final->Composite(image => $base , compose => Over, x => 1, y => 1 ); $final->Composite(image => $indicator, compose => Over, x => 1, y => $base->Get('height')+2); undef $base; undef $image; undef $indicator; # Write out the images print "Writing '$prefix-$name.png'\n"; $final->Write("$prefix-$name.png"); $final->Resize(width => $width/4, height => $final->Get('height')/4); $final->Write("$prefix-$name-small.png"); undef $final; # # Subroutines # sub xy_ll_rad { my($zoom,$x,$y)=@_; $PI=3.14159265358979323846; my($longitude)=$PI*(($x * (2**(1-$zoom)))-1); my($latitude)=($PI/2)*((4/$PI)*atan2(exp($PI*(1-($y * (2**(1-$zoom))))),1) - 1); return ($longitude,$latitude); } sub xy_area { my($zoom,$x,$y)=@_; $RADIUS=6378.137; my($width,$height); if(defined $width{$y}) { $width=$width{$y}; } else { my($lon1,$lat1)=&xy_ll_rad($z,$x ,$y); my($lon2,$lat2)=&xy_ll_rad($z,$x+1,$y); $width=$RADIUS*($lon2-$lon1)*cos($lat1); $width{$y}=$width; } if(defined $height{$y}) { $height=$height{$y}; } else { my($lon1,$lat1)=&xy_ll_rad($z,$x,$y ); my($lon2,$lat2)=&xy_ll_rad($z,$x,$y+1); $height=$RADIUS*($lat1-$lat2); $height{$y}=$height; } return $width*$height; } sub colour { my($density)=@_; $density=sqrt($density); $density=0 if($density<0); $density=1 if($density>1); my($r,$g,$b); if($density<0.5) { $r=0; $g=int(255*(2*$density)); $b=int(255*(1-2*$density)); } else { $density-=0.5; $r=int(255*(2*$density)); $g=int(255*(1-2*$density)); $b=0; } sprintf("#%02x%02x%02x",$r,$g,$b); } routino-3.2/extras/statistics/dumper.c 644 233 144 33743 13026207031 13411 0/*************************************** Data extractor and file dumper. Part of the Routino routing software. ******************/ /****************** This file Copyright 2008-2016 Andrew M. Bishop This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . ***************************************/ #include #include #include #include #include #include #include #include "types.h" #include "functions.h" #include "nodes.h" #include "segments.h" #include "ways.h" #include "sorting.h" /* Global variables (required to link sorting.c) */ /*+ The command line '--tmpdir' option or its default value. +*/ char *option_tmpdirname=NULL; /*+ The amount of RAM to use for filesorting. +*/ size_t option_filesort_ramsize=0; /*+ The number of threads to use for filesorting. +*/ int option_filesort_threads=1; /* Local types */ typedef struct _crossing { double f; uint32_t x; uint32_t y; } crossing; /* Local functions */ static void ll_xy_rad(int zoom,double longitude,double latitude,double *x,double *y); static int compare_crossing(crossing *a,crossing *b); /*++++++++++++++++++++++++++++++++++++++ The main function. ++++++++++++++++++++++++++++++++++++++*/ int main(int argc,char** argv) { Nodes *OSMNodes; Segments *OSMSegments; Ways *OSMWays; int arg; char *dirname=NULL,*prefix=NULL; char *nodes_filename,*segments_filename,*ways_filename; index_t item; crossing *crossings=(crossing*)malloc(128*sizeof(crossing)); crossing **crossingsp=(crossing**)malloc(128*sizeof(crossing*)); int crossing_alloc=128; float ***highways,***transports,***properties,***speeds; double lat,lon,x,y; uint32_t xmin,ymin,xmax,ymax,xt,yt; int zoom=13; int speed_count=0; double *speed_selection=NULL; /* Parse the command line arguments */ for(arg=1;arg] [--prefix=]\n" " [--speed=,,...,]" " [--zoom=<10-16>]\n"); return(1); } } /* Load in the data */ OSMNodes=LoadNodeList(nodes_filename=FileName(dirname,prefix,"nodes.mem")); if(!OSMNodes) { fprintf(stderr,"Cannot open nodes file '%s'.\n",nodes_filename); return(1); } OSMSegments=LoadSegmentList(segments_filename=FileName(dirname,prefix,"segments.mem")); if(!OSMSegments) { fprintf(stderr,"Cannot open segments file '%s'.\n",segments_filename); return(1); } OSMWays=LoadWayList(ways_filename=FileName(dirname,prefix,"ways.mem")); if(!OSMWays) { fprintf(stderr,"Cannot open ways file '%s'.\n",ways_filename); return(1); } /* Allocate the arrays */ lat=latlong_to_radians(bin_to_latlong(OSMNodes->file.latzero)); lon=latlong_to_radians(bin_to_latlong(OSMNodes->file.lonzero)); ll_xy_rad(zoom,lon,lat,&x,&y); xmin=(uint32_t)floor(x); ymax=(uint32_t)floor(y); lat=latlong_to_radians(bin_to_latlong(OSMNodes->file.latzero+OSMNodes->file.latbins)); lon=latlong_to_radians(bin_to_latlong(OSMNodes->file.lonzero+OSMNodes->file.lonbins)); ll_xy_rad(zoom,lon,lat,&x,&y); xmax=(uint32_t)floor(x); ymin=(uint32_t)floor(y); highways =malloc(sizeof(highways[0]) *(xmax-xmin+1)); transports=malloc(sizeof(transports[0])*(xmax-xmin+1)); properties=malloc(sizeof(properties[0])*(xmax-xmin+1)); speeds =malloc(sizeof(speeds[0]) *(xmax-xmin+1)); for(xt=xmin;xt<=xmax;xt++) { highways[xt-xmin] =malloc(sizeof(highways[0][0]) *(ymax-ymin+1)); transports[xt-xmin]=malloc(sizeof(transports[0][0])*(ymax-ymin+1)); properties[xt-xmin]=malloc(sizeof(properties[0][0])*(ymax-ymin+1)); speeds[xt-xmin] =malloc(sizeof(speeds[0][0]) *(ymax-ymin+1)); for(yt=ymin;yt<=ymax;yt++) { highways[xt-xmin][yt-ymin] =calloc((Highway_Count-1) ,sizeof(highways[0][0][0]) ); transports[xt-xmin][yt-ymin]=calloc((Transport_Count-1),sizeof(transports[0][0][0])); properties[xt-xmin][yt-ymin]=calloc((Property_Count+1) ,sizeof(properties[0][0][0])); speeds[xt-xmin][yt-ymin] =calloc((speed_count) ,sizeof(speeds[0][0][0]) ); } } /* Dump the segments out with lat/long in tile units. */ for(item=0;itemfile.number;item++) { Segment *segment=LookupSegment(OSMSegments,item,1); if(IsNormalSegment(segment)) { double latitude1,longitude1,latitude2,longitude2; double x1,y1,x2,y2; uint32_t xi1,yi1,xi2,yi2; Way *way; double distance; /* Get the coordinates */ distance=1000*distance_to_km(DISTANCE(segment->distance)); GetLatLong(OSMNodes,segment->node1,NULL,&latitude1,&longitude1); GetLatLong(OSMNodes,segment->node2,NULL,&latitude2,&longitude2); way=LookupWay(OSMWays,segment->way,1); ll_xy_rad(zoom,longitude1,latitude1,&x1,&y1); ll_xy_rad(zoom,longitude2,latitude2,&x2,&y2); /* Map to tiles and find tile crossings */ xi1=(uint32_t)floor(x1); yi1=(uint32_t)floor(y1); xi2=(uint32_t)floor(x2); yi2=(uint32_t)floor(y2); if(xi1==xi2 && yi1==yi2) { int j; for(j=1;jtype) == j) highways[xi1-xmin][yi1-ymin][j-1]+=distance; for(j=1;jallow & TRANSPORTS(j)) transports[xi1-xmin][yi1-ymin][j-1]+=distance; for(j=1;jprops & PROPERTIES(j)) properties[xi1-xmin][yi1-ymin][j-1]+=distance; if(way->type & Highway_CycleBothWays) properties[xi1-xmin][yi1-ymin][Property_Count-1]+=distance; if(way->type & Highway_OneWay) properties[xi1-xmin][yi1-ymin][Property_Count]+=distance; for(j=0;jspeed) == speed_selection[j]) speeds[xi1-xmin][yi1-ymin][j]+=distance; } else { int crossing_count=2,i; double lastf; uint32_t lastx,lasty; crossings[0].f=0.0; crossings[0].x=xi1; crossings[0].y=yi1; crossings[1].f=1.0; crossings[1].x=xi2; crossings[1].y=yi2; /* Find X boundaries */ if(xi1!=xi2) { uint32_t x,minx,maxx; if(xi1f; lastx=crossingsp[0]->x; lasty=crossingsp[0]->y; for(i=1;if; uint32_t xi,x=crossingsp[i]->x; uint32_t yi,y=crossingsp[i]->y; double d; int j; xi=x; if(lastxtype) == j) highways[xi-xmin][yi-ymin][j-1]+=d; for(j=1;jallow & TRANSPORTS(j)) transports[xi-xmin][yi-ymin][j-1]+=d; for(j=1;jprops & PROPERTIES(j)) properties[xi-xmin][yi-ymin][j-1]+=d; if(way->type & Highway_CycleBothWays) properties[xi1-xmin][yi1-ymin][Property_Count-1]+=distance; if(way->type & Highway_OneWay) properties[xi1-xmin][yi1-ymin][Property_Count]+=distance; for(j=0;jspeed) == speed_selection[j]) speeds[xi1-xmin][yi1-ymin][j]+=distance; lastf=f; lastx=x; lasty=y; } } } } /* Print the results */ for(xt=xmin;xt<=xmax;xt++) { for(yt=ymin;yt<=ymax;yt++) { int do_highways=0,do_transports=0,do_properties=0; int j; for(j=1;j 0) do_highways++; for(j=1;j 0) do_transports++; for(j=1;j 0) do_properties++; if(do_highways || do_transports || do_properties) { printf("%d %d",xt,yt); for(j=1;jf; double bd=b->f; if(adbd) return(1); else return(-FILESORT_PRESERVE_ORDER(a,b)); /* latest version first */ } /*++++++++++++++++++++++++++++++++++++++ Convert latitude and longitude into tile coordinates. int zoom The zoom level. double longitude The latitude of the point. double latitude The longitude of the point. double *x The tile X number (including fractional part). double *y The tile Y number (including fractional part). ++++++++++++++++++++++++++++++++++++++*/ static void ll_xy_rad(int zoom,double longitude,double latitude,double *x,double *y) { *x=longitude/M_PI+1; *y=1-log(tan(latitude/2+(M_PI/4)))/M_PI; *x/=pow(2,1-zoom); *y/=pow(2,1-zoom); } routino-3.2/extras/statistics/create-basemap.pl 755 233 144 4301 12660124550 15135 0#!/usr/bin/perl # # Base map creation Perl script # # Part of the Routino routing software. # # This file Copyright 2008-2016 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use Graphics::Magick; # Range and source of tiles - PARAMETERS THAT CAN BE EDITED $baseurl='http://a.tile.openstreetmap.org/${z}/${x}/${y}.png'; # URL of tile server. @xrange=(120..129); # At zoom level 8 @yrange=(73..87); # At zoom level 8 $zbase=6; # Zoom level of images to use. # Base image dimensions $basescale=2**(8-$zbase); $tilesize=256/$basescale; $width =(1+$#xrange)*$tilesize; $height=(1+$#yrange)*$tilesize; # Create a new base image $image=Graphics::Magick->new(size => "${width}x${height}"); $image->ReadImage('xc:white'); $xb=-1; foreach $x (@xrange) { $xbase=int($x/$basescale); next if($xbase==$xb); $yb=-1; foreach $y (@yrange) { $ybase=int($y/$basescale); next if($ybase==$yb); $tile=Graphics::Magick->new; $url=$baseurl; $url =~ s%\$\{x\}%$xbase%; $url =~ s%\$\{y\}%$ybase%; $url =~ s%\$\{z\}%$zbase%; `wget $url -O ${xbase}_${ybase}.png > /dev/null 2>&1`; $tile->Read("${xbase}_${ybase}.png"); unlink "${xbase}_${ybase}.png"; $xpos=(($xbase*$basescale)-$xrange[0])*$tilesize; $ypos=(($ybase*$basescale)-$yrange[0])*$tilesize; $image->Composite(image => $tile, compose => Over, x => $xpos, y => $ypos); undef $tile; $yb=$ybase; } $xb=$xbase; } print "Writing 'basemap.png'\n"; $image->Write("basemap.png"); undef $image; routino-3.2/extras/statistics/Makefile 644 233 144 4711 12656667677 13424 0# database-stats Makefile # # Part of the Routino routing software. # # This file Copyright 2008-2016 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # All configuration is in the top-level Makefile.conf include ../../Makefile.conf # Compilation targets DEPDIR=.deps C=$(wildcard *.c) D=$(wildcard $(DEPDIR)/*.d) ROUTINO_SRC=../../src EXE=dumper$(.EXE) dumper-slim$(.EXE) ######## all : $(EXE) ######## DUMPER_OBJ=dumper.o \ $(ROUTINO_SRC)/nodes.o $(ROUTINO_SRC)/segments.o $(ROUTINO_SRC)/ways.o \ $(ROUTINO_SRC)/files.o $(ROUTINO_SRC)/fakes.o $(ROUTINO_SRC)/logging.o \ $(ROUTINO_SRC)/sorting.o ifeq ($(HOST),MINGW) DUMPER_OBJ+=$(ROUTINO_SRC)/mman-win32.o endif dumper$(.EXE) : $(DUMPER_OBJ) $(LD) $^ -o $@ $(LDFLAGS) DUMPER_SLIM_OBJ=dumper-slim.o \ $(ROUTINO_SRC)/nodes-slim.o $(ROUTINO_SRC)/segments-slim.o $(ROUTINO_SRC)/ways-slim.o \ $(ROUTINO_SRC)/files.o $(ROUTINO_SRC)/fakes.o $(ROUTINO_SRC)/logging.o \ $(ROUTINO_SRC)/sorting.o ifeq ($(HOST),MINGW) DUMPER_SLIM_OBJ+=$(ROUTINO_SRC)/mman-win32.o endif dumper-slim$(.EXE) : $(DUMPER_SLIM_OBJ) $(LD) $^ -o $@ $(LDFLAGS) ######## $(ROUTINO_SRC)/%.o : cd $(ROUTINO_SRC) && $(MAKE) $(notdir $@) $(ROUTINO_SRC)/%-slim.o : cd $(ROUTINO_SRC) && $(MAKE) $(notdir $@) %.o : %.c -@[ -d $(DEPDIR) ] || mkdir $(DEPDIR) $(CC) -c $(CFLAGS) -DSLIM=0 -I$(ROUTINO_SRC) $< -o $@ -MMD -MP -MF $(addprefix $(DEPDIR)/,$(addsuffix .d,$(basename $@))) %-slim.o : %.c -@[ -d $(DEPDIR) ] || mkdir $(DEPDIR) $(CC) -c $(CFLAGS) -DSLIM=1 -I$(ROUTINO_SRC) $< -o $@ -MMD -MP -MF $(addprefix $(DEPDIR)/,$(addsuffix .d,$(basename $@))) ######## test: ######## install: ######## clean: rm -f *~ rm -f *.o rm -f $(EXE) rm -f $(D) rm -fr $(DEPDIR) rm -f core rm -f *.png ######## distclean: clean ######## include $(D) ######## .PHONY:: all test install clean distclean routino-3.2/extras/statistics/README.txt 644 233 144 2207 12660125417 13430 0 Database Statistics =================== The Routino database is a concentrated source of information about the highways in the selected region. By stepping through the database the properties of each segment can be checked and recorded. The scripts and program here group the data into regions that correspond to the standard OSM tiles (default of a zoom 13 tile). The highway properties are written out to a text file indexed by tile position. A separate Perl script is provided to create "heatmap" images from this data which is overlayed on a base map created from standard OSM tiles. The Perl scripts 'create-basemap.pl' and 'create-image.pl' will need modifying to set the range of coordinates (quoted as x and y values for zoom level 8 tiles) to plot and the zoom level of the basemap and data granularity. The shell script 'update.sh' will need modifying to set the location of the Routino database and the zoom level of the data analysis. The script 'update.sh' will perform all the actions to dump the database into a text file, create the basemap and plot the data over the top. routino-3.2/extras/errorlog/ 40755 233 144 0 12306670017 11354 5routino-3.2/extras/errorlog/summarise-log.pl 755 233 144 22600 12306670017 14534 0#!/usr/bin/perl # # Routino log summary tool. # # Part of the Routino routing software. # # This file Copyright 2011-2014 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use strict; # Command line my $verbose=0; $verbose=1 if($#ARGV==0 && $ARGV[0] eq "-v"); my $html=0; $html=1 if($#ARGV==0 && $ARGV[0] eq "-html"); die "Usage: $0 [-v | -html] < \n" if($#ARGV>0 || ($#ARGV==0 && !$verbose && !$html)); # Read in each line from the error log and store them my %errors=(); my %errorids=(); my %errortypes=(); while() { s%\r*\n%%; my $errorid=""; my $errortype=""; if(m%nodes ([0-9]+) and ([0-9]+) in way ([0-9]+)%i) # Special case pair of nodes and a way { $errorid="($1 $2 $3)"; $errortype="N2W"; s%nodes [0-9]+ and [0-9]+ in way [0-9]+%nodes and in way %; } elsif(m%node ([0-9]+) in way ([0-9]+)%i) # Special case node and a way { $errorid="($1 $2)"; $errortype="NW"; s%Node [0-9]+ in way [0-9]+%Node in way %; } elsif(m%way ([0-9]+) contains node ([0-9]+)%i) # Special case way and node { $errorid="($1 $2)"; $errortype="WN"; s%Way [0-9]+ contains node [0-9]+%Way contains node %; } elsif(m%nodes ([0-9]+) and ([0-9]+)%i) # Special case pair of nodes { $errorid="($1 $2)"; $errortype="N2"; s%nodes [0-9]+ and [0-9]+%nodes and %; } elsif(m%Segment (contains|connects) node ([0-9]+)%) # Special case node { $errorid=$2; $errortype="N"; s%node [0-9]+%node %; } elsif(m%Relation ([0-9]+).* contains Node ([0-9]+)%) # Special case relation/node { $errorid="($1 $2)"; $errortype="RN"; s%Relation [0-9]+%Relation %; s%Node [0-9]+%node %; } elsif(m%Relation ([0-9]+).* contains Way ([0-9]+)%) # Generic case relation/way { $errorid="($1 $2)"; $errortype="RW"; s%Relation [0-9]+%Relation %; s%Way [0-9]+%way %; } elsif(!m%Way ([0-9]+)% && !m%Relation ([0-9]+)% && m%Node ([0-9]+)%) # Generic node { $errorid=$1; $errortype="N"; s%Node [0-9]+%Node %; } elsif(!m%Node ([0-9]+)% && !m%Relation ([0-9]+)% && m%Way ([0-9]+)%) # Generic way { $errorid=$1; $errortype="W"; s%Way [0-9]+%Way %; } elsif(!m%Node ([0-9]+)% && !m%Way ([0-9]+)% && m%Relation ([0-9]+)%) # Generic relation { $errorid=$1; $errortype="R"; s%Relation [0-9]+%Relation %; } else { $errorid="ERROR"; $errortype="E"; warn "Unrecognised error message '$_'\n"; } $errors{$_}++; if($verbose || $html) { if(defined $errorids{$_}) { push(@{$errorids{$_}},$errorid); } else { $errorids{$_}=[$errorid]; } } if($html) { $errortypes{$_}=$errortype; } } # Print out the results as text if( ! $html ) { foreach my $error (sort { if ( $errors{$b} == $errors{$a} ) { return $errors{$a} cmp $errors{$b} } else { return $errors{$b} <=> $errors{$a} } } (keys %errors)) { printf "%9d : $error\n",$errors{$error}; if($verbose) { my @ids=sort({ return $a <=> $b } @{$errorids{$error}}); print " ".join(",",@ids)."\n"; } } } # Print out the results as HTML else { print "\n". "\n". "\n". "\n". "Routino Error Log File Summary\n". "\n". "\n". "\n". "\n". "\n". "\n". "

Routino Error Log File Summary

\n". "\n". "This HTML file contains a summary of the Routino OSM parser error log file with\n". "links to the OSM website that allow browsing each of the nodes, ways or relations\n". "that are responsible for the error messages.\n". "\n"; my %errortypeorder=( "N" , 1, "NW" , 2, "WN" , 3, "N2W" , 4, "N2" , 5, "W" , 6, "R" , 7, "RN" , 8, "RW" , 9, "E" , 10 ); my %errortypelabel=( "N" , "Nodes", "NW" , "Node in a Way", "WN" , "Way contains Node", "N2W" , "Node Pairs in a Way", "N2" , "Node Pairs", "W" , "Ways", "R" , "Relations", "RN" , "Relations/Nodes", "RW" , "Relations/Ways", "E" , "ERROR" ); my $lasterrortype=""; foreach my $error (sort { if ( $errortypes{$b} ne $errortypes{$a} ) { return $errortypeorder{$errortypes{$a}} <=> $errortypeorder{$errortypes{$b}} } elsif ( $errors{$b} == $errors{$a} ) { return $errors{$a} cmp $errors{$b} } else { return $errors{$b} <=> $errors{$a} } } (keys %errors)) { my $errorhtml=$error; $errorhtml =~ s/&/&/g; $errorhtml =~ s//>/g; if($errortypes{$error} ne $lasterrortype) { print "

$errortypelabel{$errortypes{$error}}

\n"; $lasterrortype=$errortypes{$error}; } print "

$errorhtml

\n"; if($errors{$error}>100) { print "$errors{$error} occurences (not listed).\n"; } else { my @ids=sort({ return $a <=> $b } @{$errorids{$error}}); my $first=1; foreach my $id (@ids) { if($first) { print "$errortypelabel{$errortypes{$error}}:\n"; } else { print ","; } $first=0; print "$id" if($errortypes{$error} eq "N"); print "$id" if($errortypes{$error} eq "W"); print "$id" if($errortypes{$error} eq "R"); if($errortypes{$error} eq "NW" || $errortypes{$error} eq "WN" || $errortypes{$error} eq "N2" || $errortypes{$error} eq "RN" || $errortypes{$error} eq "RW") { $id =~ m%\(([0-9]+) ([0-9]+)\)%; print "($1 $2)" if($errortypes{$error} eq "NW"); print "($1 $2)" if($errortypes{$error} eq "WN"); print "($1 $2)" if($errortypes{$error} eq "N2"); print "($1 $2)" if($errortypes{$error} eq "RN"); print "($1 $2)" if($errortypes{$error} eq "RW"); } if($errortypes{$error} eq "N2W") { $id =~ m%\(([0-9]+) ([0-9]+) ([0-9]+)\)%; print "($1 $2 $3)" if($errortypes{$error} eq "N2W"); } print "\n"; } } } print "\n". "\n". "\n". "\n"; } routino-3.2/extras/errorlog/README.txt 644 233 144 1532 12152437721 13071 0 Error Log Summariser ==================== This Perl script can be used to process the log file generated by runing 'planetsplitter --errorlog' and generate a summary of the most common types of errors. summarise-log.pl ---------------- Example usage: summarise-log.pl < error.log Generate a summary of the number of each type of error that appear in the error log file as plain text. summarise-log.pl -v < error.log Generate a verbose version of the plain text summary of errors with each error item (node, way or relation) listed. summarise-log.pl -html < error.log Generate an HTML file with a summary of the number of errors of each type with links to each of the items (node, way or relation) on the OSM website. routino-3.2/extras/plot-time/ 40755 233 144 0 12306670050 11430 5routino-3.2/extras/plot-time/README.txt 644 233 144 1001 12152440020 13121 0 Planetsplitter Execution Time Analysis ====================================== A Perl script that uses Gnuplot to plot a graph of the time taken by the planetsplitter program to run. plot-planetsplitter-time.pl --------------------------- Example usage: planetsplitter --loggable --logtime ... > planetsplitter.log plot-planetsplitter-time.pl < planetsplitter.log This will generate a file called planetsplitter.png that contains the graph of the execution time. routino-3.2/extras/plot-time/plot-planetsplitter-time.pl 755 233 144 4665 12306670050 17001 0#!/usr/bin/perl # # Routino execution log plotter. # # Part of the Routino routing software. # # This file Copyright 2013-2014 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # use strict; # Read the planetsplitter log file open(SECTION ,">gnuplot.section.tmp"); open(SUBSECTION,">gnuplot.subsection.tmp"); my $count=1; my $startcount=0; my $totaltime=0; while() { s%\r*\n%%; next if(! $_); next if(m%^=%); if( m%^\[ *([0-9]+):([0-9.]+)\] ([^:]+)% && ! m%Complete$% ) { my $time=(60.0*$1)+$2; my $description=$3; print SUBSECTION "$count $time \"$description\"\n"; $totaltime+=$time; } else { if($startcount>0) { my $boxcentre=($count+$startcount+0.5)/2; my $boxwidth=$count-$startcount-1; print SECTION "$boxcentre $totaltime $boxwidth\n"; } $startcount=$count-0.5; $totaltime=0; } $count++; } close(SECTION); close(SUBSECTION); # Plot using gnuplot open(GNUPLOT,"|gnuplot"); print GNUPLOT <. ***************************************/ #include #include #include #include #include #include #include "version.h" #include "xmlparse.h" #include "tagging.h" #include "files.h" #include "uncompress.h" /* Local variables (re-initialised for each file) */ static uint64_t nnodes,nways,nrelations; TagList *current_tags; /* Local functions */ static void print_usage(int detail,const char *argerr,const char *err); /* The XML tag processing function prototypes */ static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding); static int osmType_function(const char *_tag_,int _type_,const char *version,const char *generator); static int relationType_function(const char *_tag_,int _type_,const char *id,const char *timestamp,const char *uid,const char *user,const char *visible,const char *version,const char *action); static int wayType_function(const char *_tag_,int _type_,const char *id,const char *timestamp,const char *uid,const char *user,const char *visible,const char *version,const char *action); static int memberType_function(const char *_tag_,int _type_,const char *type,const char *ref,const char *role); static int ndType_function(const char *_tag_,int _type_,const char *ref); static int nodeType_function(const char *_tag_,int _type_,const char *id,const char *lat,const char *lon,const char *timestamp,const char *uid,const char *user,const char *visible,const char *version,const char *action); static int tagType_function(const char *_tag_,int _type_,const char *k,const char *v); static int boundType_function(const char *_tag_,int _type_,const char *box,const char *origin); static int boundsType_function(const char *_tag_,int _type_,const char *minlat,const char *minlon,const char *maxlat,const char *maxlon,const char *origin); /* The XML tag definitions */ /*+ The boundsType type tag. +*/ static const xmltag boundsType_tag= {"bounds", 5, {"minlat","minlon","maxlat","maxlon","origin"}, boundsType_function, {NULL}}; /*+ The boundType type tag. +*/ static const xmltag boundType_tag= {"bound", 2, {"box","origin"}, boundType_function, {NULL}}; /*+ The tagType type tag. +*/ static const xmltag tagType_tag= {"tag", 2, {"k","v"}, tagType_function, {NULL}}; /*+ The nodeType type tag. +*/ static const xmltag nodeType_tag= {"node", 9, {"id","lat","lon","timestamp","uid","user","visible","version","action"}, nodeType_function, {&tagType_tag,NULL}}; /*+ The ndType type tag. +*/ static const xmltag ndType_tag= {"nd", 1, {"ref"}, ndType_function, {NULL}}; /*+ The memberType type tag. +*/ static const xmltag memberType_tag= {"member", 3, {"type","ref","role"}, memberType_function, {NULL}}; /*+ The wayType type tag. +*/ static const xmltag wayType_tag= {"way", 7, {"id","timestamp","uid","user","visible","version","action"}, wayType_function, {&ndType_tag,&tagType_tag,NULL}}; /*+ The relationType type tag. +*/ static const xmltag relationType_tag= {"relation", 7, {"id","timestamp","uid","user","visible","version","action"}, relationType_function, {&memberType_tag,&tagType_tag,NULL}}; /*+ The osmType type tag. +*/ static const xmltag osmType_tag= {"osm", 2, {"version","generator"}, osmType_function, {&boundsType_tag,&boundType_tag,&nodeType_tag,&wayType_tag,&relationType_tag,NULL}}; /*+ The xmlDeclaration type tag. +*/ static const xmltag xmlDeclaration_tag= {"xml", 2, {"version","encoding"}, xmlDeclaration_function, {NULL}}; /*+ The complete set of tags at the top level. +*/ static const xmltag *const xml_toplevel_tags[]={&xmlDeclaration_tag,&osmType_tag,NULL}; /* The XML tag processing functions */ /*++++++++++++++++++++++++++++++++++++++ The function that is called when the boundsType XSD type is seen int boundsType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *minlat The contents of the 'minlat' attribute (or NULL if not defined). const char *minlon The contents of the 'minlon' attribute (or NULL if not defined). const char *maxlat The contents of the 'maxlat' attribute (or NULL if not defined). const char *maxlon The contents of the 'maxlon' attribute (or NULL if not defined). const char *origin The contents of the 'origin' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int boundsType_function(const char *_tag_,int _type_,const char *minlat,const char *minlon,const char *maxlat,const char *maxlon,const char *origin) { printf(" <%s%s",(_type_==XMLPARSE_TAG_END)?"/":"",_tag_); if(minlat) printf(" minlat='%s'",ParseXML_Encode_Safe_XML(minlat)); if(minlon) printf(" minlon='%s'",ParseXML_Encode_Safe_XML(minlon)); if(maxlat) printf(" maxlat='%s'",ParseXML_Encode_Safe_XML(maxlat)); if(maxlon) printf(" maxlon='%s'",ParseXML_Encode_Safe_XML(maxlon)); if(origin) printf(" origin='%s'",ParseXML_Encode_Safe_XML(origin)); printf("%s>\n",(_type_==(XMLPARSE_TAG_START|XMLPARSE_TAG_END))?" /":""); return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the boundType XSD type is seen int boundType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *box The contents of the 'box' attribute (or NULL if not defined). const char *origin The contents of the 'origin' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int boundType_function(const char *_tag_,int _type_,const char *box,const char *origin) { printf(" <%s%s",(_type_==XMLPARSE_TAG_END)?"/":"",_tag_); if(box) printf(" box='%s'",ParseXML_Encode_Safe_XML(box)); if(origin) printf(" origin='%s'",ParseXML_Encode_Safe_XML(origin)); printf("%s>\n",(_type_==(XMLPARSE_TAG_START|XMLPARSE_TAG_END))?" /":""); return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the tagType XSD type is seen int tagType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *k The contents of the 'k' attribute (or NULL if not defined). const char *v The contents of the 'v' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int tagType_function(const char *_tag_,int _type_,const char *k,const char *v) { if(_type_&XMLPARSE_TAG_START) { XMLPARSE_ASSERT_STRING(_tag_,k); XMLPARSE_ASSERT_STRING(_tag_,v); AppendTag(current_tags,k,v); } return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the nodeType XSD type is seen int nodeType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *id The contents of the 'id' attribute (or NULL if not defined). const char *lat The contents of the 'lat' attribute (or NULL if not defined). const char *lon The contents of the 'lon' attribute (or NULL if not defined). const char *timestamp The contents of the 'timestamp' attribute (or NULL if not defined). const char *uid The contents of the 'uid' attribute (or NULL if not defined). const char *user The contents of the 'user' attribute (or NULL if not defined). const char *visible The contents of the 'visible' attribute (or NULL if not defined). const char *version The contents of the 'version' attribute (or NULL if not defined). const char *action The contents of the 'action' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int nodeType_function(const char *_tag_,int _type_,const char *id,const char *lat,const char *lon,const char *timestamp,const char *uid,const char *user,const char *visible,const char *version,const char *action) { static int64_t llid; /* static variable to store attributes from tag until tag */ if(_type_&XMLPARSE_TAG_START) { nnodes++; if(!(nnodes%10000)) fprintf_middle(stderr,"Reading: Lines=%"PRIu64" Nodes=%"PRIu64" Ways=%"PRIu64" Relations=%"PRIu64,ParseXML_LineNumber(),nnodes,nways,nrelations); current_tags=NewTagList(); /* Handle the node information */ XMLPARSE_ASSERT_INTEGER(_tag_,id); llid=atoll(id); /* need int64_t conversion */ } if(_type_&XMLPARSE_TAG_END) { TagList *result=ApplyNodeTaggingRules(current_tags,llid); int i; for(i=0;intags;i++) { printf(" k[i])); printf(" v='%s'",ParseXML_Encode_Safe_XML(result->v[i])); printf(" />\n"); } DeleteTagList(current_tags); DeleteTagList(result); } printf(" <%s%s",(_type_==XMLPARSE_TAG_END)?"/":"",_tag_); if(id) printf(" id='%s'",ParseXML_Encode_Safe_XML(id)); if(lat) printf(" lat='%s'",ParseXML_Encode_Safe_XML(lat)); if(lon) printf(" lon='%s'",ParseXML_Encode_Safe_XML(lon)); if(timestamp) printf(" timestamp='%s'",ParseXML_Encode_Safe_XML(timestamp)); if(uid) printf(" uid='%s'",ParseXML_Encode_Safe_XML(uid)); if(user) printf(" user='%s'",ParseXML_Encode_Safe_XML(user)); if(visible) printf(" visible='%s'",ParseXML_Encode_Safe_XML(visible)); if(version) printf(" version='%s'",ParseXML_Encode_Safe_XML(version)); if(action) printf(" action='%s'",ParseXML_Encode_Safe_XML(action)); printf("%s>\n",(_type_==(XMLPARSE_TAG_START|XMLPARSE_TAG_END))?" /":""); return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the ndType XSD type is seen int ndType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *ref The contents of the 'ref' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int ndType_function(const char *_tag_,int _type_,const char *ref) { printf(" <%s%s",(_type_==XMLPARSE_TAG_END)?"/":"",_tag_); if(ref) printf(" ref='%s'",ParseXML_Encode_Safe_XML(ref)); printf("%s>\n",(_type_==(XMLPARSE_TAG_START|XMLPARSE_TAG_END))?" /":""); return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the memberType XSD type is seen int memberType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *type The contents of the 'type' attribute (or NULL if not defined). const char *ref The contents of the 'ref' attribute (or NULL if not defined). const char *role The contents of the 'role' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int memberType_function(const char *_tag_,int _type_,const char *type,const char *ref,const char *role) { printf(" <%s%s",(_type_==XMLPARSE_TAG_END)?"/":"",_tag_); if(type) printf(" type='%s'",ParseXML_Encode_Safe_XML(type)); if(ref) printf(" ref='%s'",ParseXML_Encode_Safe_XML(ref)); if(role) printf(" role='%s'",ParseXML_Encode_Safe_XML(role)); printf("%s>\n",(_type_==(XMLPARSE_TAG_START|XMLPARSE_TAG_END))?" /":""); return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the wayType XSD type is seen int wayType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *id The contents of the 'id' attribute (or NULL if not defined). const char *timestamp The contents of the 'timestamp' attribute (or NULL if not defined). const char *uid The contents of the 'uid' attribute (or NULL if not defined). const char *user The contents of the 'user' attribute (or NULL if not defined). const char *visible The contents of the 'visible' attribute (or NULL if not defined). const char *version The contents of the 'version' attribute (or NULL if not defined). const char *action The contents of the 'action' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int wayType_function(const char *_tag_,int _type_,const char *id,const char *timestamp,const char *uid,const char *user,const char *visible,const char *version,const char *action) { static int64_t llid; /* static variable to store attributes from tag until tag */ if(_type_&XMLPARSE_TAG_START) { nways++; if(!(nways%1000)) fprintf_middle(stderr,"Reading: Lines=%"PRIu64" Nodes=%"PRIu64" Ways=%"PRIu64" Relations=%"PRIu64,ParseXML_LineNumber(),nnodes,nways,nrelations); current_tags=NewTagList(); /* Handle the way information */ XMLPARSE_ASSERT_INTEGER(_tag_,id); llid=atoll(id); /* need int64_t conversion */ } if(_type_&XMLPARSE_TAG_END) { TagList *result=ApplyWayTaggingRules(current_tags,llid); int i; for(i=0;intags;i++) { printf(" k[i])); printf(" v='%s'",ParseXML_Encode_Safe_XML(result->v[i])); printf(" />\n"); } DeleteTagList(current_tags); DeleteTagList(result); } printf(" <%s%s",(_type_==XMLPARSE_TAG_END)?"/":"",_tag_); if(id) printf(" id='%s'",ParseXML_Encode_Safe_XML(id)); if(timestamp) printf(" timestamp='%s'",ParseXML_Encode_Safe_XML(timestamp)); if(uid) printf(" uid='%s'",ParseXML_Encode_Safe_XML(uid)); if(user) printf(" user='%s'",ParseXML_Encode_Safe_XML(user)); if(visible) printf(" visible='%s'",ParseXML_Encode_Safe_XML(visible)); if(version) printf(" version='%s'",ParseXML_Encode_Safe_XML(version)); if(action) printf(" action='%s'",ParseXML_Encode_Safe_XML(action)); printf("%s>\n",(_type_==(XMLPARSE_TAG_START|XMLPARSE_TAG_END))?" /":""); return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the relationType XSD type is seen int relationType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *id The contents of the 'id' attribute (or NULL if not defined). const char *timestamp The contents of the 'timestamp' attribute (or NULL if not defined). const char *uid The contents of the 'uid' attribute (or NULL if not defined). const char *user The contents of the 'user' attribute (or NULL if not defined). const char *visible The contents of the 'visible' attribute (or NULL if not defined). const char *version The contents of the 'version' attribute (or NULL if not defined). const char *action The contents of the 'action' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int relationType_function(const char *_tag_,int _type_,const char *id,const char *timestamp,const char *uid,const char *user,const char *visible,const char *version,const char *action) { static int64_t llid; /* static variable to store attributes from tag until tag */ if(_type_&XMLPARSE_TAG_START) { nrelations++; if(!(nrelations%1000)) fprintf_middle(stderr,"Reading: Lines=%"PRIu64" Nodes=%"PRIu64" Ways=%"PRIu64" Relations=%"PRIu64,ParseXML_LineNumber(),nnodes,nways,nrelations); current_tags=NewTagList(); /* Handle the relation information */ XMLPARSE_ASSERT_INTEGER(_tag_,id); llid=atoll(id); /* need int64_t conversion */ } if(_type_&XMLPARSE_TAG_END) { TagList *result=ApplyRelationTaggingRules(current_tags,llid); int i; for(i=0;intags;i++) { printf(" k[i])); printf(" v='%s'",ParseXML_Encode_Safe_XML(result->v[i])); printf(" />\n"); } DeleteTagList(current_tags); DeleteTagList(result); } printf(" <%s%s",(_type_==XMLPARSE_TAG_END)?"/":"",_tag_); if(id) printf(" id='%s'",ParseXML_Encode_Safe_XML(id)); if(timestamp) printf(" timestamp='%s'",ParseXML_Encode_Safe_XML(timestamp)); if(uid) printf(" uid='%s'",ParseXML_Encode_Safe_XML(uid)); if(user) printf(" user='%s'",ParseXML_Encode_Safe_XML(user)); if(visible) printf(" visible='%s'",ParseXML_Encode_Safe_XML(visible)); if(version) printf(" version='%s'",ParseXML_Encode_Safe_XML(version)); if(action) printf(" action='%s'",ParseXML_Encode_Safe_XML(action)); printf("%s>\n",(_type_==(XMLPARSE_TAG_START|XMLPARSE_TAG_END))?" /":""); return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the osmType XSD type is seen int osmType_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *version The contents of the 'version' attribute (or NULL if not defined). const char *generator The contents of the 'generator' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int osmType_function(const char *_tag_,int _type_,const char *version,const char *generator) { printf("<%s%s",(_type_==XMLPARSE_TAG_END)?"/":"",_tag_); if(version) printf(" version='%s'",ParseXML_Encode_Safe_XML(version)); if(generator) printf(" generator='%s'",ParseXML_Encode_Safe_XML(generator)); printf("%s>\n",(_type_==(XMLPARSE_TAG_START|XMLPARSE_TAG_END))?" /":""); return(0); } /*++++++++++++++++++++++++++++++++++++++ The function that is called when the XML declaration is seen int xmlDeclaration_function Returns 0 if no error occured or something else otherwise. const char *_tag_ Set to the name of the element tag that triggered this function call. int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag. const char *version The contents of the 'version' attribute (or NULL if not defined). const char *encoding The contents of the 'encoding' attribute (or NULL if not defined). ++++++++++++++++++++++++++++++++++++++*/ static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding) { printf("\n"); return(0); } /*++++++++++++++++++++++++++++++++++++++ The main program for the tagmodifier. ++++++++++++++++++++++++++++++++++++++*/ int main(int argc,char **argv) { char *tagging=NULL,*filename=NULL,*errorlog=NULL; char *p; int fd; int arg,retval; /* Parse the command line arguments */ for(arg=1;arg=0) { fprintf(stderr, "Usage: tagmodifier [--version]\n" " [--help]\n" " [--tagging=]\n" " [--loggable] [--logtime] [--logmemory]\n" " [--errorlog[=]]\n" " " #if defined(USE_BZIP2) && USE_BZIP2 " | " #endif #if defined(USE_GZIP) && USE_GZIP " | " #endif #if defined(USE_XZ) && USE_XZ " | " #endif "\n"); if(argerr) fprintf(stderr, "\n" "Error with command line parameter: %s\n",argerr); if(err) fprintf(stderr, "\n" "Error: %s\n",err); } if(detail==1) fprintf(stderr, "\n" "--version Print the version of Routino.\n" "\n" "--help Prints this information.\n" "\n" "--tagging= The name of the XML file containing the tagging rules\n" " (defaults to 'tagging.xml' in current directory).\n" "\n" "--loggable Print progress messages suitable for logging to file.\n" "--logtime Print the elapsed time for the processing.\n" "--logmemory Print the max allocated/mapped memory for each step.\n" "--errorlog[=] Log parsing errors to 'error.log' or the given name.\n" "\n" " The name of the file to process.\n" #if defined(USE_BZIP2) && USE_BZIP2 " Filenames ending '.bz2' will be bzip2 uncompressed.\n" #endif #if defined(USE_GZIP) && USE_GZIP " Filenames ending '.gz' will be gzip uncompressed.\n" #endif #if defined(USE_XZ) && USE_XZ " Filenames ending '.xz' will be xz uncompressed.\n" #endif ); exit(!detail); } routino-3.2/extras/tagmodifier/Makefile 644 233 144 3477 12602557232 13504 0# tagmodifier Makefile # # Part of the Routino routing software. # # This file Copyright 2013-2015 Andrew M. Bishop # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # All configuration is in the top-level Makefile.conf include ../../Makefile.conf # Compilation targets DEPDIR=.deps C=$(wildcard *.c) D=$(wildcard $(DEPDIR)/*.d) ROUTINO_SRC=../../src EXE=tagmodifier$(.EXE) ######## all: $(EXE) ######## TAGMODIFIER_OBJ=tagmodifier.o \ $(ROUTINO_SRC)/files.o $(ROUTINO_SRC)/logging.o $(ROUTINO_SRC)/logerror.o \ $(ROUTINO_SRC)/uncompress.o $(ROUTINO_SRC)/xmlparse.o $(ROUTINO_SRC)/tagging.o ifeq ($(HOST),MINGW) TAGMODIFIER_OBJ+=$(ROUTINO_SRC)/mman-win32.o endif tagmodifier$(.EXE) : $(TAGMODIFIER_OBJ) $(LD) $^ -o $@ $(LDFLAGS) ######## $(ROUTINO_SRC)/%.o : cd $(ROUTINO_SRC) && $(MAKE) $(notdir $@) %.o : %.c -@[ -d $(DEPDIR) ] || mkdir $(DEPDIR) $(CC) -c $(CFLAGS) -DSLIM=0 -I$(ROUTINO_SRC) $< -o $@ -MMD -MP -MF $(addprefix $(DEPDIR)/,$(addsuffix .d,$(basename $@))) ######## test: ######## install: ######## clean: rm -f *~ rm -f *.o rm -f $(EXE) rm -f $(D) rm -fr $(DEPDIR) rm -f core ######## distclean: clean ######## include $(D) ######## .PHONY:: all test install clean distclean routino-3.2/extras/tagmodifier/README.txt 644 233 144 3213 12574075511 13531 0 Tagging Rule Tester / Tag Modifier ================================== This program is used to run the tag transformation process on an OSM XML file for test purposes. This allows it to be used to test new tagging rules or to make automatic rule-based modifications to tags within an XML file. tagmodifier ----------- Usage: tagmodifier [--version] [--help] [--tagging=] [--loggable] [--logtime] [--logmemory] [--errorlog[]] [ | | | ] --version Print the version of Routino. --help Prints out the help information. --tagging= The name of the XML file containing the tagging rules (defaults to 'tagging.xml' in the current directory). --loggable Print progress messages that are suitable for logging to a file; normally an incrementing counter is printed which is more suitable for real-time display than logging. --logtime Print the elapsed time for the processing. --logmemory Print the used memory for the processing. --errorlog[=] Log parsing errors to 'error.log' or the specified file name. Specifies the filename(s) to read data from. Filenames ending '.bz2' will be bzip2 uncompressed (if bzip2 support compiled in). Filenames ending '.gz' will be gzip uncompressed (if gzip support compiled in). Filenames ending '.xz' will be xz uncompressed (if xz support compiled in).