pax_global_header00006660000000000000000000000064115366366430014527gustar00rootroot0000000000000052 comment=5f72db1cd6e10a4c09c3841a9f5d60ee1aa8ca7c pyevolve-0.6~rc1+svn398+dfsg/000077500000000000000000000000001153663664300160365ustar00rootroot00000000000000pyevolve-0.6~rc1+svn398+dfsg/build_dist.bat000066400000000000000000000003441153663664300206510ustar00rootroot00000000000000@echo off python setup.py build python setup.py bdist_wininst --target-version="2.5" python setup.py bdist_wininst --target-version="2.6" python setup.py sdist --formats=gztar,zip python setup.py bdist --formats=egg pyevolve-0.6~rc1+svn398+dfsg/build_dist.sh000066400000000000000000000003211153663664300205100ustar00rootroot00000000000000#!/bin/sh python setup.py build python setup.py bdist_wininst --target-version="2.5" python setup.py bdist_wininst --target-version="2.6" python setup.py sdist python setup.py bdist python setup.py bdist_egg pyevolve-0.6~rc1+svn398+dfsg/docs/000077500000000000000000000000001153663664300167665ustar00rootroot00000000000000pyevolve-0.6~rc1+svn398+dfsg/docs/build_docs.bat000066400000000000000000000004501153663664300215640ustar00rootroot00000000000000@echo off rd /s/q build_htmlhelp rd /s/q build_web rd /s/q build_latex c:\python26\scripts\sphinx-build -E -a -b htmlhelp .\source .\build_htmlhelp c:\python26\scripts\sphinx-build -E -a -b html .\source .\build_web c:\python26\scripts\sphinx-build -E -a -b latex .\source .\build_latexpyevolve-0.6~rc1+svn398+dfsg/docs/build_docs.sh000066400000000000000000000000661153663664300214330ustar00rootroot00000000000000#!/bin/sh sphinx-build -E -a -b html ./source ./build pyevolve-0.6~rc1+svn398+dfsg/docs/build_docs_inc.bat000066400000000000000000000001061153663664300224130ustar00rootroot00000000000000@echo off c:\python26\scripts\sphinx-build -b html .\source .\build pyevolve-0.6~rc1+svn398+dfsg/docs/build_docs_inc.sh000066400000000000000000000000601153663664300222560ustar00rootroot00000000000000#!/bin/sh sphinx-build -b html ./source ./build pyevolve-0.6~rc1+svn398+dfsg/docs/epydoc.conf000066400000000000000000000004771153663664300211300ustar00rootroot00000000000000[epydoc] modules: ../pyevolve/ output: pdf target: epydocs/ verbosity: 1 introspect: yes private: yes imports: yes sourcecode: yes name: Pyevolve 0.6 # The documented project's URL. url: http://pyevolve.sourceforge.net/ graph: all #dotpath: /usr/local/bin/dot graph-font: Helvetica pyevolve-0.6~rc1+svn398+dfsg/docs/pyevolve-graph.1000066400000000000000000000100221153663664300220130ustar00rootroot00000000000000.TH PYEVOLVE-GRAPH 1 "2010-05-10" "pyevolve_graph" PYEVOLVE-GRAPH .SH NAME pyevolve-graph \- graphical plotting tool for Pyevolve .SH SYNOPSIS .B pyevolve-graph .RI [ options ] .br .SH DESCRIPTION This manual page documents briefly the .B pyevolve-graph command, a graphical plotting tool for programs based on Pyevolve. To use this program, you must have \fBpython-matplotlib\fP and \fBpython-sqlite\fP installed. .SH GENERAL OPTIONS \fBPyevolve-pygraph\fP supports the following options: .TP .B \-h, \-\-help show a brief summary of available options and exit .TP .BI \-f " FILENAME\fP, " \-\-file= FILENAME Database file to read from. default is \fI./pyevolve.db\fP. .TP .BI \-i " IDENTIFY\fP, " \-\-identify= IDENTIFY The identify of evolution. .TP .BI \-o " OUTFILE\fP, " \-\-outfile= OUTFILE Write the graph image to a file. Don't specify an extension, just the filename. The file will be written in PNG format by default, but this can be changed using the \fB\-\-extension\fP or \fB\-e\fP options. .TP .BI \-e " EXTENSION\fP, " \-\-extension= EXTENSION Graph image file format. Supported options (formats) are all those supported by \fBpython-matplotlib\fP. Currently, these should be: EMF, EPS, PDF, PNG, PS, RAW, RGBA, SVG, SVGZ. Default is PNG. .TP .BI \-g " GENRANGE\fP, " \-\-genrange= GENRANGE This is the generation range of the graph. For example, 1:30 would denote an interval between 1 and 30. .TP .BI \-c " COLORMAP\fP, " \-\-colormap= COLORMAP Sets the Color Map for the graph types \fB\-8\fP and \fB\-9\fP. Some options are: summer, bone, gray, hot, jet, cooper, spectral. The default is \fBjet\fP. .TP .BI \-m, \-\-minimize Sets the 'Minimize' mode. Default is the Maximize mode. This option makes sense if you are minimizing your evaluation function. .TP .B \-0 Write all standard graphs to file. Equivalent to specifying \fB\-1\fP \fB\-2\fP \fB\-3\fP \fB\-4\fP \fB-5\fP. .TP .B \-1 Error bars graph (raw scores). .TP .B \-2 Error bars graph (fitness scores). .TP .B \-3 Max/min/avg/std. dev. graph (raw scores). .TP .B \-4 Max/min/avg graph (fitness scores). .TP .B \-5 Raw and Fitness min/max difference graph. .TP .B \-6 Compare best raw score of two or more evolutions. You must specify the identify as a comma-separated list with the \fB\-\-identify\fP or \fB\-i\fP options. The maximum is 6 items. .TP .B \-7 Compare best fitness score of two or more evolutions. You must specify the identify as a comma-separated list with the \fB\-\-identify\fP or \fB\-i\fP options. The maximum is 6 items. .TP .B \-8 Show a heat map of population raw score distribution between generations. .TP .B \-9 Show a heat map of population fitness score distribution between generations. .SH EXAMPLES The following are some examples on how to use \fBpyevolve-graph\fP: .PP 1. Output a graph for identify 'ex1' in PNG format (default) to file 'graph_ex1.png': .sp .RS 12 .nf pyevolve-graph \-i ex1 \-1 \-o graph_ex1 .fi .RE .sp 2. Output a graph for identify 'ex1' to the PDF file 'graph_ex1.pdf': .sp .RS 12 .nf pyevolve-graph \-i ex1 \-1 \-o graph_ex1 \-e pdf .fi .RE .sp 3. This command will plot the evolution of the generations between 10 and 20: .sp .RS 12 .nf pyevolve-graph \-i ex1 \-1 \-g 10:20 .fi .RE .sp 4. Use \fB\-m\fP to indicate that you have minimized the evaulation function: .sp .RS 12 .nf pyevolve_graph.py \-i ex1 \-1 \-m .fi .RE .sp 5. Specify an identify list for the comparison output options \fB\-6\fP and \fB\-7\fP: .sp .RS 12 .nf pyevolve_graph.py \-i ex1_run1,ex1_run2,ex1_run3 \-6 .fi .RE .sp Fore more examples on how to use pyevolve-graph, including sample images, users are recommended to install the \fBpython-pyevolve-doc\fP package. .SH SEE ALSO .TP .I /usr/share/doc/python-pyevolve/examples Contains many examples. .br .SH AUTHOR pyevolve-graph was written by Christian S. Perone . .PP This manual page was written by Christian Kastner for the Debian project (and may be used by others). pyevolve-0.6~rc1+svn398+dfsg/docs/source/000077500000000000000000000000001153663664300202665ustar00rootroot00000000000000pyevolve-0.6~rc1+svn398+dfsg/docs/source/.static/000077500000000000000000000000001153663664300216335ustar00rootroot00000000000000pyevolve-0.6~rc1+svn398+dfsg/docs/source/.static/brasil_flag.jpg000066400000000000000000000012211153663664300245760ustar00rootroot00000000000000JFIFddDucky<Adobed         !1AQ"#32Bb"!1AQqa2Rb3 ?/ y;pV>\S.yC,H bQ]]=?U@;H]ClVByӜ,udv*E]88oXRGfJ~QU +H'pR"Xf-MKNUaqΟ0JlXlr i^e}gk\N_0/L׬•}(g%XcJgdQwC~9s wV% 1>PgHPB:fcm>Óֻey}eV{fVB=֟VX[gGpyevolve-0.6~rc1+svn398+dfsg/docs/source/.static/default_patch.css000066400000000000000000000253601153663664300251560ustar00rootroot00000000000000/** * Sphinx Doc Design */ body { font-family: sans-serif; font-size: 100%; background-color: #11303D; color: #000; margin: 0; padding: 0; } .ttip { border-bottom: 1px dotted #BBBBBB; color: #A64E15; font-style: italic; cursor: help; } .tip { font-size: 75%; width: 212px; padding-top: 30px; display: none; position: absolute; background: transparent url(tip_images/tipTop.png) no-repeat top; } .tipMid {background: transparent url(tip_images/tipMid.png) repeat-y; padding: 0 25px 20px 25px;} .tipBtm {background: transparent url(tip_images/tipBtm.png) no-repeat bottom; height: 32px;} /* :::: LAYOUT :::: */ #contents { width:750px; font-family:Georgia, Times, serif; /* font-size:15px; */} #contents ul { /*list-style: none; */} #contents ul li { } #contents ul li a { display:block; text-decoration:none; line-height:30px; border-bottom-style:solid; border-bottom-width:1px; border-bottom-color:#CCCCCC; padding-left:5px; cursor:pointer; } #contents ul li a:hover { color:#FFFFFF; background-image:url(hover.png); background-repeat:repeat-x; } #contents ul li a strong { margin-right:5px; } #extraDiv2 { background-image: url(bottom.png); background-repeat: no-repeat; background-position: right; height: 60px; width: 100%; position: fixed; bottom: 0px; z-index: 5; } div.document { background-color: #005C8A; /*#155146;*/ } .inheritance { border-style: hidden; } .graphviz { border-style: hidden; text-align: center; } div.documentwrapper { float: left; width: 100%; } div.bodywrapper { margin: 0 0 0 230px; } div.body { background-color: white; padding: 0 20px 30px 20px; } div.sphinxsidebarwrapper { padding: 10px 5px 0 10px; } div.sphinxsidebar { float: left; width: 230px; margin-left: -100%; font-size: 90%; } div.clearer { clear: both; } div.footer { color: #fff; background-color: #363636; width: 100%; padding: 9px 0 9px 0; text-align: center; font-size: 75%; } div.footer a { color: #fff; text-decoration: underline; } div.related { background-color: #000000 /*#133f52*/; color: #fff; width: 100%; line-height: 30px; font-size: 90%; } div.related h3 { display: none; } div.related ul { margin: 0; padding: 0 0 0 10px; list-style: none; } div.related li { display: inline; } div.related li.right { float: right; margin-right: 5px; } div.related a { color: white; } /* ::: TOC :::: */ div.sphinxsidebar h3 { font-family: 'Trebuchet MS', sans-serif; color: white; font-size: 1.4em; font-weight: normal; margin: 0; padding: 0; } div.sphinxsidebar h3 a { color: white; } div.sphinxsidebar h4 { font-family: 'Trebuchet MS', sans-serif; color: white; font-size: 1.3em; font-weight: normal; margin: 5px 0 0 0; padding: 0; } div.sphinxsidebar p { color: white; } div.sphinxsidebar p.topless { margin: 5px 10px 10px 10px; } div.sphinxsidebar ul { margin: 10px; padding: 0; list-style: none; color: white; } div.sphinxsidebar ul ul, div.sphinxsidebar ul.want-points { margin-left: 20px; list-style: square; } div.sphinxsidebar ul ul { margin-top: 0; margin-bottom: 0; } div.sphinxsidebar a { color: #98dbcc; } div.sphinxsidebar form { margin-top: 10px; } div.sphinxsidebar input { border: 1px solid #98dbcc; font-family: sans-serif; font-size: 1em; } /* :::: MODULE CLOUD :::: */ div.modulecloud { margin: -5px 10px 5px 10px; padding: 10px; line-height: 160%; border: 1px solid #cbe7e5; background-color: #f2fbfd; } div.modulecloud a { padding: 0 5px 0 5px; } /* :::: SEARCH :::: */ ul.search { margin: 10px 0 0 20px; padding: 0; } ul.search li { padding: 5px 0 5px 20px; background-image: url(file.png); background-repeat: no-repeat; background-position: 0 7px; } ul.search li a { font-weight: bold; } ul.search li div.context { color: #888; margin: 2px 0 0 30px; text-align: left; } ul.keywordmatches li.goodmatch a { font-weight: bold; } /* :::: COMMON FORM STYLES :::: */ div.actions { padding: 5px 10px 5px 10px; border-top: 1px solid #cbe7e5; border-bottom: 1px solid #cbe7e5; background-color: #e0f6f4; } form dl { color: #333; } form dt { clear: both; float: left; min-width: 110px; margin-right: 10px; padding-top: 2px; } input#homepage { display: none; } div.error { margin: 5px 20px 0 0; padding: 5px; border: 1px solid #d00; font-weight: bold; } /* :::: INDEX PAGE :::: */ table.contentstable { width: 90%; } table.contentstable p.biglink { line-height: 150%; } a.biglink { font-size: 1.3em; } span.linkdescr { font-style: italic; padding-top: 5px; font-size: 90%; } /* :::: INDEX STYLES :::: */ table.indextable td { text-align: left; vertical-align: top; } table.indextable dl, table.indextable dd { margin-top: 0; margin-bottom: 0; } table.indextable tr.pcap { height: 10px; } table.indextable tr.cap { margin-top: 10px; background-color: #f2f2f2; } img.toggler { margin-right: 3px; margin-top: 3px; cursor: pointer; } form.pfform { margin: 10px 0 20px 0; } /* :::: GLOBAL STYLES :::: */ .docwarning { background-color: #ffe4e4; padding: 10px; margin: 0 -20px 0 -20px; border-bottom: 1px solid #f66; } p.subhead { font-weight: bold; margin-top: 20px; } a { color: #355f7c; text-decoration: none; } a:hover { text-decoration: underline; } div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { font-family: 'Trebuchet MS', sans-serif; background-color: #f2f2f2; font-weight: normal; color: #20435c; border-bottom: 1px solid #ccc; margin: 20px -20px 10px -20px; padding: 3px 0 3px 10px; } div.body h1 { margin-top: 0; font-size: 200%; } div.body h2 { font-size: 160%; } div.body h3 { font-size: 140%; } div.body h4 { font-size: 120%; } div.body h5 { font-size: 110%; } div.body h6 { font-size: 100%; } a.headerlink { color: #c60f0f; font-size: 0.8em; padding: 0 4px 0 4px; text-decoration: none; visibility: hidden; } h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, h4:hover > a.headerlink, h5:hover > a.headerlink, h6:hover > a.headerlink, dt:hover > a.headerlink { visibility: visible; } a.headerlink:hover { background-color: #c60f0f; color: white; } div.body p, div.body dd, div.body li { text-align: justify; line-height: 130%; } div.body p.caption { text-align: inherit; } div.body td { text-align: left; } ul.fakelist { list-style: none; margin: 10px 0 10px 20px; padding: 0; } .field-list ul { padding-left: 1em; } .first { margin-top: 0 !important; } /* "Footnotes" heading */ p.rubric { margin-top: 30px; font-weight: bold; } /* Sidebars */ div.sidebar { margin: 0 0 0.5em 1em; border: 1px solid #ddb; padding: 7px 7px 0 7px; background-color: #ffe; width: 40%; float: right; } p.sidebar-title { font-weight: bold; } /* "Topics" */ div.topic { background-color: #eee; border: 1px solid #ccc; padding: 7px 7px 0 7px; margin: 10px 0 10px 0; } p.topic-title { font-size: 1.1em; font-weight: bold; margin-top: 10px; } /* Admonitions */ div.admonition { margin-top: 10px; margin-bottom: 10px; padding: 7px; } div.admonition dt { font-weight: bold; } div.admonition dl { margin-bottom: 0; } div.admonition p.admonition-title + p { display: inline; } div.seealso { background-color: #ffc; border: 1px solid #ff6; } div.warning { background-color: #ffe4e4; border: 1px solid #f66; } div.note { background-color: #eee; border: 1px solid #ccc; } p.admonition-title { margin: 0px 10px 5px 0px; font-weight: bold; display: inline; } p.admonition-title:after { content: ":"; } div.body p.centered { text-align: center; margin-top: 25px; } table.docutils { border: 0; } table.docutils td, table.docutils th { padding: 1px 8px 1px 0; border-top: 0; border-left: 0; border-right: 0; border-bottom: 1px solid #aaa; } table.field-list td, table.field-list th { border: 0 !important; } table.footnote td, table.footnote th { border: 0 !important; } .field-list ul { margin: 0; padding-left: 1em; } .field-list p { margin: 0; } dl { margin-bottom: 15px; clear: both; } dd p { margin-top: 0px; } dd ul, dd table { margin-bottom: 10px; } dd { margin-top: 3px; margin-bottom: 10px; margin-left: 30px; } .refcount { color: #060; } dt:target, .highlight { background-color: #fbe54e; } dl.glossary dt { font-weight: bold; font-size: 1.1em; } th { text-align: left; padding-right: 5px; } pre { padding: 5px; background-color: #efc; color: #333; line-height: 120%; border: 1px solid #ac9; border-left: none; border-right: none; overflow: auto; } td.linenos pre { padding: 5px 0px; border: 0; background-color: transparent; color: #aaa; } table.highlighttable { margin-left: 0.5em; } table.highlighttable td { padding: 0 0.5em 0 0.5em; } tt { background-color: #ecf0f3; padding: 0 1px 0 1px; font-size: 0.95em; } tt.descname { background-color: transparent; font-weight: bold; font-size: 1.2em; } tt.descclassname { background-color: transparent; } tt.xref, a tt { background-color: transparent; font-weight: bold; } .footnote:target { background-color: #ffa } h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { background-color: transparent; } .optional { font-size: 1.3em; } .versionmodified { font-style: italic; } form.comment { margin: 0; padding: 10px 30px 10px 30px; background-color: #eee; } form.comment h3 { background-color: #326591; color: white; margin: -10px -30px 10px -30px; padding: 5px; font-size: 1.4em; } form.comment input, form.comment textarea { border: 1px solid #ccc; padding: 2px; font-family: sans-serif; font-size: 100%; } form.comment input[type="text"] { width: 240px; } form.comment textarea { width: 100%; height: 200px; margin-bottom: 10px; } .system-message { background-color: #fda; padding: 5px; border: 3px solid red; } img.math { vertical-align: middle; } div.math p { text-align: center; } span.eqno { float: right; } img.logo { border: 0; } /* :::: PRINT :::: */ @media print { div.document, div.documentwrapper, div.bodywrapper { margin: 0; width : 100%; } div.sphinxsidebar, div.related, div.footer, div#comments div.new-comment-box, #top-link { display: none; } } pyevolve-0.6~rc1+svn398+dfsg/docs/source/.static/pyevolve.css000066400000000000000000000230661153663664300242250ustar00rootroot00000000000000/** * Sphinx Doc Design */ body { font-family: sans-serif; font-size: 100%; background-color: #0B8185; color: #000; margin: 0; padding: 0; } /* :::: LAYOUT :::: */ /* Menu Esquerda */ div.document { background-color: #DCE8EB; } div.documentwrapper { float: left; width: 100%; } div.bodywrapper { margin: 0 0 0 230px; } div.body { background-color: white; padding: 0 20px 30px 20px; } div.sphinxsidebarwrapper { padding: 10px 5px 0 10px; } div.sphinxsidebar { float: left; width: 230px; margin-left: -100%; font-size: 90%; } div.clearer { clear: both; } div.footer { color: #fff; width: 100%; padding: 9px 0 9px 0; text-align: center; font-size: 75%; } div.footer a { color: #fff; text-decoration: underline; } div.related { background-color: #8CCCBE; color: #DCE8EB; width: 100%; line-height: 30px; font-size: 90%; } div.related h3 { display: none; } div.related ul { margin: 0; padding: 0 0 0 10px; list-style: none; } div.related li { display: inline; } div.related li.right { float: right; margin-right: 5px; } div.related a { color: #0B8185; } /* ::: TOC :::: */ div.sphinxsidebar h3 { font-family: 'Trebuchet MS', sans-serif; color: #0B8185; font-size: 1.4em; font-weight: normal; margin: 0; padding: 0; } div.sphinxsidebar h3 a { color: #0B8185; } div.sphinxsidebar h4 { font-family: 'Trebuchet MS', sans-serif; color: #0B8185; font-size: 1.3em; font-weight: normal; margin: 5px 0 0 0; padding: 0; } div.sphinxsidebar p { color: #0B8185; } div.sphinxsidebar p.topless { margin: 5px 10px 10px 10px; } div.sphinxsidebar ul { margin: 10px; padding: 0; list-style: none; color: #0B8185; } div.sphinxsidebar ul ul, div.sphinxsidebar ul.want-points { margin-left: 20px; list-style: square; } div.sphinxsidebar ul ul { margin-top: 0; margin-bottom: 0; } div.sphinxsidebar a { color: #0B8185; } div.sphinxsidebar form { margin-top: 10px; } div.sphinxsidebar input { border: 1px solid #98dbcc; font-family: sans-serif; font-size: 1em; } /* :::: MODULE CLOUD :::: */ div.modulecloud { margin: -5px 10px 5px 10px; padding: 10px; line-height: 160%; border: 1px solid #cbe7e5; background-color: #f2fbfd; } div.modulecloud a { padding: 0 5px 0 5px; } /* :::: SEARCH :::: */ ul.search { margin: 10px 0 0 20px; padding: 0; } ul.search li { padding: 5px 0 5px 20px; background-image: url(file.png); background-repeat: no-repeat; background-position: 0 7px; } ul.search li a { font-weight: bold; } ul.search li div.context { color: #888; margin: 2px 0 0 30px; text-align: left; } ul.keywordmatches li.goodmatch a { font-weight: bold; } /* :::: COMMON FORM STYLES :::: */ div.actions { padding: 5px 10px 5px 10px; border-top: 1px solid #cbe7e5; border-bottom: 1px solid #cbe7e5; background-color: #e0f6f4; } form dl { color: #333; } form dt { clear: both; float: left; min-width: 110px; margin-right: 10px; padding-top: 2px; } input#homepage { display: none; } div.error { margin: 5px 20px 0 0; padding: 5px; border: 1px solid #d00; font-weight: bold; } /* :::: INDEX PAGE :::: */ table.contentstable { width: 90%; } table.contentstable p.biglink { line-height: 150%; } a.biglink { font-size: 1.3em; } span.linkdescr { font-style: italic; padding-top: 5px; font-size: 90%; } /* :::: INDEX STYLES :::: */ table.indextable td { text-align: left; vertical-align: top; } table.indextable dl, table.indextable dd { margin-top: 0; margin-bottom: 0; } table.indextable tr.pcap { height: 10px; } table.indextable tr.cap { margin-top: 10px; background-color: #f2f2f2; } img.toggler { margin-right: 3px; margin-top: 3px; cursor: pointer; } form.pfform { margin: 10px 0 20px 0; } /* :::: GLOBAL STYLES :::: */ .docwarning { background-color: #ffe4e4; padding: 10px; margin: 0 -20px 0 -20px; border-bottom: 1px solid #f66; } p.subhead { font-weight: bold; margin-top: 20px; } a { color: #355f7c; text-decoration: none; } a:hover { text-decoration: underline; } div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { font-family: 'Trebuchet MS', sans-serif; background-color: #E3E8CF; font-weight: normal; color: #20435c; border-bottom: 1px solid #ccc; margin: 20px -20px 10px -20px; padding: 3px 0 3px 10px; } div.body h1 { margin-top: 0; font-size: 200%; } div.body h2 { font-size: 160%; } div.body h3 { font-size: 140%; } div.body h4 { font-size: 120%; } div.body h5 { font-size: 110%; } div.body h6 { font-size: 100%; } a.headerlink { color: #c60f0f; font-size: 0.8em; padding: 0 4px 0 4px; text-decoration: none; visibility: hidden; } h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, h4:hover > a.headerlink, h5:hover > a.headerlink, h6:hover > a.headerlink, dt:hover > a.headerlink { visibility: visible; } a.headerlink:hover { background-color: #c60f0f; color: white; } div.body p, div.body dd, div.body li { text-align: justify; line-height: 130%; } div.body p.caption { text-align: inherit; } div.body td { text-align: left; } ul.fakelist { list-style: none; margin: 10px 0 10px 20px; padding: 0; } .field-list ul { padding-left: 1em; } .first { margin-top: 0 !important; } /* "Footnotes" heading */ p.rubric { margin-top: 30px; font-weight: bold; } /* Sidebars */ div.sidebar { margin: 0 0 0.5em 1em; border: 1px solid #ddb; padding: 7px 7px 0 7px; background-color: #ffe; width: 40%; float: right; } p.sidebar-title { font-weight: bold; } /* "Topics" */ div.topic { background-color: #eee; border: 1px solid #ccc; padding: 7px 7px 0 7px; margin: 10px 0 10px 0; } p.topic-title { font-size: 1.1em; font-weight: bold; margin-top: 10px; } /* Admonitions */ div.admonition { margin-top: 10px; margin-bottom: 10px; padding: 7px; } div.admonition dt { font-weight: bold; } div.admonition dl { margin-bottom: 0; } div.admonition p.admonition-title + p { display: inline; } div.seealso { background-color: #ffc; border: 1px solid #ff6; } div.warning { background-color: #ffe4e4; border: 1px solid #f66; } div.note { background-color: #eee; border: 1px solid #ccc; } p.admonition-title { margin: 0px 10px 5px 0px; font-weight: bold; display: inline; } p.admonition-title:after { content: ":"; } div.body p.centered { text-align: center; margin-top: 25px; } table.docutils { border: 0; } table.docutils td, table.docutils th { padding: 1px 8px 1px 0; border-top: 0; border-left: 0; border-right: 0; border-bottom: 1px solid #aaa; } table.field-list td, table.field-list th { border: 0 !important; } table.footnote td, table.footnote th { border: 0 !important; } .field-list ul { margin: 0; padding-left: 1em; } .field-list p { margin: 0; } dl { margin-bottom: 15px; clear: both; } dd p { margin-top: 0px; } dd ul, dd table { margin-bottom: 10px; } dd { margin-top: 3px; margin-bottom: 10px; margin-left: 30px; } .refcount { color: #060; } dt:target, .highlight { background-color: #fbe54e; } dl.glossary dt { font-weight: bold; font-size: 1.1em; } th { text-align: left; padding-right: 5px; } pre { padding: 5px; background-color: #efc; color: #333; line-height: 120%; border: 1px solid #ac9; border-left: none; border-right: none; overflow: auto; } td.linenos pre { padding: 5px 0px; border: 0; background-color: transparent; color: #aaa; } table.highlighttable { margin-left: 0.5em; } table.highlighttable td { padding: 0 0.5em 0 0.5em; } tt { background-color: #ecf0f3; padding: 0 1px 0 1px; font-size: 0.95em; } tt.descname { background-color: transparent; font-weight: bold; font-size: 1.2em; } tt.descclassname { background-color: transparent; } tt.xref, a tt { background-color: transparent; font-weight: bold; } .footnote:target { background-color: #ffa } h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { background-color: transparent; } .noBorder { text-decoration: none; } .optional { font-size: 1.3em; } .versionmodified { font-style: italic; } form.comment { margin: 0; padding: 10px 30px 10px 30px; background-color: #eee; } form.comment h3 { background-color: #326591; color: white; margin: -10px -30px 10px -30px; padding: 5px; font-size: 1.4em; } form.comment input, form.comment textarea { border: 1px solid #ccc; padding: 2px; font-family: sans-serif; font-size: 100%; } form.comment input[type="text"] { width: 240px; } form.comment textarea { width: 100%; height: 200px; margin-bottom: 10px; } .system-message { background-color: #fda; padding: 5px; border: 3px solid red; } img.math { vertical-align: middle; } div.math p { text-align: center; } span.eqno { float: right; } img.logo { border: 0; } /* :::: PRINT :::: */ @media print { div.document, div.documentwrapper, div.bodywrapper { margin: 0; width : 100%; } div.sphinxsidebar, div.related, div.footer, div#comments div.new-comment-box, #top-link { display: none; } } pyevolve-0.6~rc1+svn398+dfsg/docs/source/.templates/000077500000000000000000000000001153663664300223425ustar00rootroot00000000000000pyevolve-0.6~rc1+svn398+dfsg/docs/source/.templates/layout.html000066400000000000000000000101221153663664300245410ustar00rootroot00000000000000{% extends "!layout.html" %} {% block extrahead %} {{ super() }} {% endblock %} {% block sidebarlogo %}


{% endblock %} {% block footer %} {{ super() }}
{% endblock %} {% block rootrellink %} {{ super() }}
  • {% endblock %}pyevolve-0.6~rc1+svn398+dfsg/docs/source/README.TXT000066400000000000000000000004731153663664300216300ustar00rootroot00000000000000To developers: Please use the most recent Sphinx version and just call the script to build the docs. Older versions of Sphinx have a bug while inserting example codes into the rst format. I've fixed in the patch sphinx06_code_patch.py and reported to Sphinx team which already have fixed it. - Christian S. Peronepyevolve-0.6~rc1+svn398+dfsg/docs/source/conf.py000066400000000000000000000152441153663664300215730ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Pyevolve documentation build configuration file, created by # sphinx-quickstart on Thu Jan 15 11:05:43 2009. # # This file is execfile()d with the current directory set to its containing dir. # # The contents of this file are pickled, so don't put values in the namespace # that aren't pickleable (module imports are okay, they're removed automatically). # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys, os # If your extensions are in another directory, add it here. If the directory # is relative to the documentation root, use os.path.abspath to make it # absolute, like shown here. #sys.path.append(os.path.abspath('.')) if sys.platform[:5]: sys.path.append(os.path.abspath("../../") + "/pyevolve") sys.path.append(os.path.abspath("../../")) elif sys.platform[:3] == "win": sys.path.append(os.path.abspath("../../") + "\\pyevolve") sys.path.append(os.path.abspath("../../")) sys.path.append(os.path.abspath('ext')) # General configuration # --------------------- # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.inheritance_diagram', 'pyevolve_tooltip'] inheritance_node_attrs = dict(shape='rectangle', fontsize=10, height=0.40) # Add any paths that contain templates here, relative to this directory. templates_path = ['.templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8' # The master toctree document. master_doc = 'index' # General information about the project. project = u'Pyevolve' copyright = u'2010, Christian S. Perone' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = '0.6' # The full version, including alpha/beta/rc tags. release = '0.6 final' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. #unused_docs = [] # List of directories, relative to source directory, that shouldn't be searched # for source files. #exclude_trees = [r'.static\.svn'] exclude_dirnames = [".svn"] exclude_dirs = [".svn"] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' highlight_language = 'python' # Options for HTML output # ----------------------- # The style sheet to use for HTML and HTML Help pages. A file of that name # must exist either in Sphinx' static/ path, or in one of the custom paths # given in html_static_path. #html_style = 'pyevolve.css' html_style = 'default_patch.css' # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['.static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_use_modindex = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, the reST sources are included in the HTML build as _sources/. #html_copy_source = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'Pyevolvedoc' # Options for LaTeX output # ------------------------ # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, document class [howto/manual]). latex_documents = [ ('index', 'Pyevolve.tex', ur'Pyevolve Documentation', ur'Christian S. Perone', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # Additional stuff for the LaTeX preamble. #latex_preamble = '' # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_use_modindex = True pyevolve-0.6~rc1+svn398+dfsg/docs/source/contact.rst000066400000000000000000000006501153663664300224540ustar00rootroot00000000000000 Contact the author ==================================== If you have any questions or suggestions, you can contact me at: christian.perone@gmail.com .. image:: imgs/brasil_flag.jpg Please use the word "pyevolve" in the email subject. Donate ==================================== Please, `donate `_ to support the development of this project. pyevolve-0.6~rc1+svn398+dfsg/docs/source/contributors.rst000066400000000000000000000015041153663664300235550ustar00rootroot00000000000000 Contributors ============================================== **Boris Gorelik**, from `Procognia Ltd `_, `Blog inthehaystack.com `_, `@boris_gorelik `_, Ashdod, Israel. .. image:: imgs/email_boris.png **Amit Saha**, `Blog amitksaha.wordpress.com `_, `@amitsaha `_, India. .. image:: imgs/email_amit.png **Jelle Feringa**, Jelle Feringa, Tu Delft University, Netherlands. .. image:: imgs/email_jelle.png **Henrik Rudstrom**, `Blog uniqueidentifier.net `_, `@henrk `_, Rotterdam, Netherlands. .. image:: imgs/email_henrik.png **Christian Kastner**, Austria. .. image:: imgs/email_christian_kastner.png pyevolve-0.6~rc1+svn398+dfsg/docs/source/examples.rst000066400000000000000000000164101153663664300226400ustar00rootroot00000000000000Examples ============================================================================ All the examples can be downloaded from the :ref:`download_sec` section, **they are not** included in the installation package. Example 1 - Simple example --------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex1_simple.py` This is Example #1, a very simple example: .. literalinclude:: ../../examples/pyevolve_ex1_simple.py Example 2 - Real numbers, Gaussian Mutator ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex2_realgauss.py` This example uses the :func:`Initializators.G1DListInitializatorReal` initializator and the :func:`Mutators.G1DListMutatorRealGaussian` mutator: .. literalinclude:: ../../examples/pyevolve_ex2_realgauss.py Example 3 - Schaffer F6 deceptive function ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex3_schaffer.py` This examples tries to minimize the Schaffer F6 function. This function is a deceptive function, considered a GA-hard function to optimize: .. literalinclude:: ../../examples/pyevolve_ex3_schaffer.py Example 4 - Using Sigma truncation scaling ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex4_sigmatrunc.py` This example shows the use of the sigma truncation scale method. It tries to minimize a function with negative results: .. literalinclude:: ../../examples/pyevolve_ex4_sigmatrunc.py Example 5 - Step callback function ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex5_callback.py` This example shows the use of the :term:`step callback function`: .. literalinclude:: ../../examples/pyevolve_ex5_callback.py Example 6 - The DB Adapters ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex6_dbadapter.py` This example shows the use of the DB Adapters (:mod:`DBAdapters`) : .. literalinclude:: ../../examples/pyevolve_ex6_dbadapter.py Example 7 - The Rastrigin function ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex7_rastrigin.py` This example minimizes the deceptive function Rastrigin with 20 variables: .. literalinclude:: ../../examples/pyevolve_ex7_rastrigin.py Example 8 - The Gaussian Integer Mutator ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex8_gauss_int.py` This example shows the use of the Gaussian Integer Mutator: (:class:`Mutators.G1DListMutatorIntegerGaussian`): .. literalinclude:: ../../examples/pyevolve_ex8_gauss_int.py Example 9 - The 2D List genome ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex9_g2dlist.py` This example shows the use of the 2D list genome (:class:`G2DList.G2DList`): .. literalinclude:: ../../examples/pyevolve_ex9_g2dlist.py Example 10 - The 1D Binary String ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex10_g1dbinstr.py` This example shows the use of the 1D Binary String genome: .. literalinclude:: ../../examples/pyevolve_ex10_g1dbinstr.py Example 11 - The use of alleles ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex11_allele.py` This example shows the use of alleles: .. literalinclude:: ../../examples/pyevolve_ex11_allele.py Example 12 - The Travelling Salesman Problem (TSP) ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex12_tsp.py` This example shows the use of Pyevolve to solve the `TSP `_: .. literalinclude:: ../../examples/pyevolve_ex12_tsp.py This example will plot a file called :file:`tsp_result.png` in the same current working directory. The generated image will be the best result of the TSP, it looks like: .. image:: imgs/ex_12_tsp_result.png :align: center To plot this image, you will need the Python Imaging Library (PIL). .. seealso:: `Python Imaging Library (PIL) `_ The Python Imaging Library (PIL) adds image processing capabilities to your Python interpreter. This library supports many file formats, and provides powerful image processing and graphics capabilities. Example 13 - The sphere function ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex13_sphere.py` This is the GA to solve the sphere function: .. literalinclude:: ../../examples/pyevolve_ex13_sphere.py Example 14 - The Ackley function ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex14_ackley.py` This example minimizes the Ackley F1 function, a deceptive function: .. literalinclude:: ../../examples/pyevolve_ex14_ackley.py Example 15 - The Rosenbrock function ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex15_rosenbrock.py` This example minimizes the Rosenbrock function, another deceptive function: .. literalinclude:: ../../examples/pyevolve_ex15_rosenbrock.py Example 16 - The 2D Binary String ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex16_g2dbinstr.py` This example shows the use of the 2D Binary String genome: .. literalinclude:: ../../examples/pyevolve_ex16_g2dbinstr.py Example 17 - The Tree genome example ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex17_gtree.py` This example shows the use of the Tree genome: .. literalinclude:: ../../examples/pyevolve_ex17_gtree.py .. _pyevolve-example18: Example 18 - The Genetic Programming example ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex18_gp.py` This example shows the use of the GTreeGP genome (for Genetic Programming): .. literalinclude:: ../../examples/pyevolve_ex18_gp.py Example 21 - The n-queens problem (64x64 chess board) ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex21_nqueens.py` This example shows the use of GA to solve the n-queens problem for a chess board of size 64x64: .. literalinclude:: ../../examples/pyevolve_ex21_nqueens.py Example 22 - The Infinite Monkey Theorem ------------------------------------------------------------------------------- Filename: :file:`examples/pyevolve_ex22_monkey.py` This example was kindly contributed by Jelle Feringa, it shows the `Infinite Monkey Theorem `_: .. literalinclude:: ../../examples/pyevolve_ex22_monkey.py pyevolve-0.6~rc1+svn398+dfsg/docs/source/ext/000077500000000000000000000000001153663664300210665ustar00rootroot00000000000000pyevolve-0.6~rc1+svn398+dfsg/docs/source/ext/pyevolve_tooltip.py000066400000000000000000000011741153663664300250660ustar00rootroot00000000000000""" Tooltip Sphinx extension :copyright: Copyright 2010 by Christian S. Perone :license: PSF, see LICENSE for details. """ from sphinx.util.compat import Directive from docutils import nodes import re def tip_role(name, rawtext, text, lineno, inliner, options={}, content=[]): matches = re.match("\<(?P\w+)\> (?P.*)", text) matches_tuple = matches.group("tip"), matches.group("word") template = """%s""" % matches_tuple node = nodes.raw('', template, format='html') return [node], [] def setup(app): app.add_role('tip', tip_role)pyevolve-0.6~rc1+svn398+dfsg/docs/source/faq.rst000066400000000000000000000010201153663664300215600ustar00rootroot00000000000000 F.A.Q. ==================================== **What is Pyevolve ?** Pyevolve is an Evolutionary Computation framework written in pure python. **Why you have created this framework ?** Python is a powerful language, the features of Python together with the Evolutionary Algorithms (EA) can be very interesting. There is no good GA library written in Python today. The main effort of Pyevolve is to solve a clean solution, since the Evolutionary Computation research field is growing faster. pyevolve-0.6~rc1+svn398+dfsg/docs/source/getstarted.rst000066400000000000000000001122501153663664300231670ustar00rootroot00000000000000 Get Started - Tutorial ============================================================================ Pyevolve combined with the Python language can be a powerful tool. The best way to show you how Pyevolve can be used is to begin with some simple examples; later we'll show some snippets, etc. so you'll be alble to walk by yourself. First Example --------------------------------------------------------------------------- To make the API easy to use, we have provided default values for almost every parameter in Pyevolve. For example, when you use the :class:`G1DList.G1DList` genome without specifying the Mutator, Crossover and Initializator, you will be using the default ones: Swap Mutator, One Point Crossover and the Integer Initialzator. All those default parameters are specified in the :mod:`Consts` module (and you are highly encouraged to take a look at source code). Let's begin with the first simple example (Ex. 1). First of all, you must know your problem: in this case, our problem is to find a simple 1D list of integers of *n*-size with zero in all positions. At first look, we know by intuition that the representation needed for this problem is a 1D List, which you can find in Pyevolve by the name of :class:`G1DList.G1DList`, which means Genome 1D List. This representation is based on a python list as you will see, and is very easy to manipulate. The next step is to define the :term:`evaluation function` to our Genetic Algorithm. We want all the *n* list positions with value of '0', so we can propose the evaluation function: .. image:: imgs/ex1equation.png :align: center As you can see in the above equation, with the *x* variable representing our genome list of integers, the *f(x)* shows our evaluation function, which is the sum of '0' values in the list. For example, if we have a list with 10 elements like this: :: x = [1, 2, 3, 8, 0, 2, 0, 4, 1, 0] we will get the raw score [#rawscore]_ value of 3, or *f(x)* = 3. It's very simple to understand. Now, let's code this. We will define our :term:`evaluation function` **"eval_func"** as: :: # This function is the evaluation function, we want # to give high score to more zero'ed chromosomes def eval_func(chromosome): score = 0.0 # iterate over the chromosome elements (items) for value in chromosome: if value==0: score += 1.0 return score As you can see, this evaluation function tests each element in the list for equality with '0' and returns the proportional score value. The :class:`G1DList.G1DList` chromosome is not a python list by itself but it encapsulates one and exposes the methods for this list, like the iterator used in the above loop. The next step is the creation of a :term:`sample genome` [#samplegenome]_ for the Genetic Algorithm. We can define our genome as this: :: # Genome instance genome = G1DList.G1DList(20) # The evaluator function (objective function) genome.evaluator.set(eval_func) This will create an instance of the :class:`G1DList.G1DList` class (which resides in the :mod:`G1DList` module) with the list *n*-size of 20 and sets the evaluation function of the genome to the evaluation function **"eval_func"** that we created before. But wait - where is the range of integers that will be used in the list ? Where are the mutator, crossover and initialization functions ? They are all in the default parameters. As you see, these parameters keep things simple. By default (and you have the **documentation** to find these defaults), the range of the integers in the :class:`G1DList.G1DList` is between the inverval [ :attr:`Consts.CDefRangeMin`, :attr:`Consts.CDefRangeMax`] inclusive, and genetic operators is the same I have cited before: Swap Mutator :func:`Mutators.G1DListMutatorSwap`, One Point Crossover :func:`Crossovers.G1DListCrossoverSinglePoint` and the Integer Initializator :func:`Initializators.G1DListInitializatorInteger`. You can change everything with the API. For example, you can pass the ranges to the genome like so: :: genome.setParams(rangemin=0, rangemax=10) Right, now that we have our evaluation function and our first genome ready, the next step is to create our Genetic Algorithm Engine, the GA Core which will do the evolution, control statistics, etc... The GA Engine which we will use is the :class:`GSimpleGA.GSimpleGA` which resides in the :mod:`GSimpleGA` module. This GA Engine is the genetic algorithm [#ganote]_ described by Goldberg. So, let's create the engine: :: ga = GSimpleGA.GSimpleGA(genome) Ready ! Easy, no ? We simply create our GA Engine with the previously created genome. You might be asking: "*Where is the selector method ? The number of generations ? Mutation rate ?*". Again: we have defaults. By default, the GA will evolve for 100 generations with a population size of 80 individuals, it will use the mutation rate of 2% and a crossover rate of 80%, the default selector is the Ranking Selection (:func:`Selectors.GRankSelector`) method. Those default parameters were not picked at random, they are all based on the commom used properties. Now, all we need to do is to evolve ! :: # Do the evolution, with stats dump # frequency of 10 generations ga.evolve(freq_stats=10) # Best individual print ga.bestIndividual() .. note:: Pyevolve have the __repr__() function implemented for almost all objects, this means that you can use syntax like 'print object' and the object information will be show in an pretty format. Ready, now we have our first Genetic Algorithm, it looks more like a "Hello GA !" application. The code above shows the call of the :meth:`GSimpleGA.GSimpleGA.evolve` method, with the parameter *freq_stats=10*. This method will do the evolution and will show the statistics every 10th generation. The next method called is the :meth:`GSimpleGA.GSimpleGA.bestIndividual`, this method will return the best individual after the end of the evolution, and with the *print* python command, we will show the genome on the screen. This is what this example will produce as the result: :: Gen. 1 (1.00%): Max/Min/Avg Fitness(Raw) [2.40(3.00) / 1.60(1.00) / 2.00(2.00)] Gen. 10 (10.00%): Max/Min/Avg Fitness(Raw) [10.80(10.00) / 7.20(8.00) / 9.00(9.00)] Gen. 20 (20.00%): Max/Min/Avg Fitness(Raw) [22.80(20.00) / 15.20(18.00) / 19.00(19.00)] Gen. 30 (30.00%): Max/Min/Avg Fitness(Raw) [20.00(20.00) / 20.00(20.00) / 20.00(20.00)] (...) Gen. 100 (100.00%): Max/Min/Avg Fitness(Raw) [20.00(20.00) / 20.00(20.00) / 20.00(20.00)] Total time elapsed: 3.375 seconds. - GenomeBase Score: 20.000000 Fitness: 20.000000 Slot [Evaluator] (Count: 1) Name: eval_func Slot [Initializator] (Count: 1) Name: G1DListInitializatorInteger Doc: Integer initialization function of G1DList, accepts 'rangemin' and 'rangemax' Slot [Mutator] (Count: 1) Name: G1DListMutatorSwap Doc: The mutator of G1DList, Swap Mutator Slot [Crossover] (Count: 1) Name: G1DListCrossoverSinglePoint Doc: The crossover of G1DList, Single Point - G1DList List size: 20 List: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] This is the evolution of our Genetic Algorithm, with the best individual shown at the end of the evolution. As you can see, the population obtained the best raw score (20.00) near generation 20. Final source code ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Here is the final source code: :: from pyevolve import G1DList from pyevolve import GSimpleGA def eval_func(chromosome): score = 0.0 # iterate over the chromosome for value in chromosome: if value==0: score += 1 return score genome = G1DList.G1DList(20) genome.evaluator.set(eval_func) ga = GSimpleGA.GSimpleGA(genome) ga.evolve(freq_stats=10) print ga.bestIndividual() .. rubric:: Footnotes .. [#rawscore] It is important to note that in Pyevolve, we have :term:`raw score` and :term:`fitness score`, the raw score is the return of the evaluation function and the fitness score is the scaled score or the raw score in absence of a scaling scheme. .. [#samplegenome] The term :term:`sample genome` means one genome which provides the main configuration for all individuals. .. [#ganote] This GA uses non-overlapping populations. The Interactive Mode --------------------------------------------------------------------------- Pyevolve introduced the concept of the :term:`Interactive Mode` in the course of evolution. When you are evolving, and the Interactive Mode is enabled, you can press the *ESC Key* anytime during the evolution process. By pressing that key, you will enter the interactive mode, with a normal python prompt and the :mod:`Interaction` module exposed to you as the "it" module. .. warning:: note that the Interactive Mode for Linux/Mac was disabled in the 0.6 release of Pyevolve. The cause was the platform dependant code. To use it in Linux/Mac you must set the generation in wich Pyevolve will enter in the Interactive Mode by using :meth:`GSimpleGA.GSimpleGA.setInteractiveGeneration` method; see the :mod:`Interaction` module documentation for more information. If you want to continue the evolution, just press *CTRL-D* on Linux or *CTRL-Z* on Windows. See this session example: :: # pyevolve_ex1_simple.py Gen. 1 (0.20%): Max/Min/Avg Fitness(Raw) [6.18(11.00)/4.42(1.00)/5.15(5.15)] Gen. 20 (4.00%): Max/Min/Avg Fitness(Raw) [11.70(15.00)/7.24(3.00)/9.75(9.75)] Gen. 40 (8.00%): Max/Min/Avg Fitness(Raw) [17.99(21.00)/12.00(9.00)/14.99(14.99)] Loading module pylab (matplotlib)... done! Loading module numpy... done! ## Pyevolve v.0.6 - Interactive Mode ## Press CTRL-D to quit interactive mode. >>> As you can see, when you press the *ESC Key*, a python prompt will be shown and the evolution will be paused. Now, *what you can do* with this prompt !? * See all the current population individuals * Change the individuals * Plot graphics of the current population * Data analysis, etc... python is your limit. .. note:: to use graphical plots you will obviously need the Matplotlib, see more information in the :ref:`requirements` section for more information. Inspecting the population ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This is a session example: :: ## Pyevolve v.0.6 - Interactive Mode ## Press CTRL-Z to quit interactive mode. >>> dir() ['__builtins__', 'ga_engine', 'it', 'population', 'pyevolve'] >>> >>> population - GPopulation Population Size: 80 Sort Type: Scaled Minimax Type: Maximize Slot [Scale Method] (Count: 1) Name: LinearScaling Doc: Linear Scaling scheme .. warning :: Linear Scaling is only for positive raw scores - Statistics Minimum raw score = 10.00 Minimum fitness = 13.18 Standard deviation of raw scores = 2.71 Maximum fitness = 19.92 Maximum raw score = 23.00 Fitness average = 16.60 Raw scores variance = 7.36 Average of raw scores = 16.60 >>> len(population) 80 >>> individual = population[0] >>> individual - GenomeBase Score: 23.000000 Fitness: 19.920000 Slot [Evaluator] (Count: 1) Name: eval_func Slot [Initializator] (Count: 1) Name: G1DListInitializatorInteger Doc: Integer initialization function of G1DList This initializator accepts the *rangemin* and *rangemax* genome parameters. Slot [Mutator] (Count: 1) Name: G1DListMutatorSwap Doc: The mutator of G1DList, Swap Mutator Slot [Crossover] (Count: 1) Name: G1DListCrossoverSinglePoint Doc: The crossover of G1DList, Single Point .. warning:: You can't use this crossover method for lists with just one element. - G1DList List size: 50 List: [0, 5, 6, 7, 2, 0, 8, 6, 0, 0, 8, 7, 5, 6, 6, 0, 0, 3, 0, 4, 0, 0, 9, 0, 9, 2, 0, 0, 4, 2 , 5, 0, 0, 2, 0, 0, 0, 1, 8, 7, 0, 8, 9, 0, 8, 0, 0, 0, 9, 0] The exposed modules and objects ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The :mod:`Interaction` module is imported with the name "it", you can see it's contents by calling the python native *dir()*: :: >>> dir() ['__builtins__', 'ga_engine', 'it', 'population', 'pyevolve'] The namespace has the following modules: *ga_engine* The :class:`GSimpleGA.GSimpleGA` instance, the GA Engine. *it* The :mod:`Interaction` module, with the utilities and graph plotting functions. *population* The current population. *pyevolve* The main namespace, the :mod:`pyevolve` module. **Using the "it" module** *Plotting the current population raw scores histogram* >>> it.plotHistPopScore(population) .. image:: imgs/iteract_histogram.png :align: center *Plotting the current population raw scores distribution* >>> it.plotPopScore(population) .. image:: imgs/iteract_plotraw.png :align: center *Get all the population raw scores* >>> popScores = it.getPopScores(population) >>> popScores [17.0, 17.0, 16.0, 15.0, 13.0, 11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 6.0, 6.0, 6.0, 6.0, 6.0, 5.0, 5.0 , 5.0, 5.0, 5.0, 5.0, 5.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 3.0, 3.0, 3.0, 3.0] Extending Pyevolve --------------------------------------------------------------------------- Creating the representation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The first thing you must do is to view the source code of the :class:`GenomeBase.GenomeBase` class or the source of the :class:`G1DBinaryString.G1DBinaryString` class; they are very simple to understand. These are the steps to extend Pyevolve with a new representation: 1) Create the chromosome representation class 2) Create the initializator for your chromosome 3) Create the genetic operators 4) Create the Mutator 5) Create the Crossover Well, let's begin with the creation of the elegant **1D Binary String** chromosome. This chromosome is nothing more than a simple array of '0's or '1's, like so: *"001001000"*. .. note:: This 1D Binary String chromosome is an Pyevolve existing chromosome, of course, in the Pyevolve implementation we have more features that we will implement here in this simple example. All of our new chromosomes **must** extend the base class called :class:`GenomeBase.GenomeBase`, this class contains the basic slots for the genetic operators and all the internal stuff that you don't need to care about. Let's code the initial draft of our chromosome class: :: from GenomeBase import GenomeBase class G1DBinaryString(GenomeBase): pass As you can see, we have imported the :class:`GenomeBase.GenomeBase` class from the :mod:`GenomeBase` module and we have created the *G1DBinaryString* class extending the base class. The next step is to create our constructor method for our class. I'll show it first and explain later: :: def __init__(self, length=10): GenomeBase.__init__(self) self.genomeString = [] self.stringLength = length self.initializator.set(Consts.CDefG1DBinaryStringInit) self.mutator.set(Consts.CDefG1DBinaryStringMutator) self.crossover.set(Consts.CDefG1DBinaryStringCrossover) Well, we start by calling the base class constructor and then creating an internal list to hold our '0's and '1's. It is important to note that we don't initialize the list, this will be done by our initializator function, and it is because of this that we must keep as an internal attribute the length of your 1D Binary String. Next, we set our initializator, mutator and crossover to constants. These constants have just the functions of our genetic operators, but if you want, you can set them later. In this example, we will use the defaults for the G1D Binary String. .. note:: The attributes self.initializator, self.mutator and self.crossover are all inherited from the GenomeBase class. They are all function slots (:class:`FunctionSlot.FunctionSlot`). Now, you *must* provide the **copy()** and **clone()** methods for your chromosome, because they are used to replicate the chromosome over the population or when needed by some genetic operators such as reproduction. The *copy()* method is very simple. What you need to do is to create a method that copy the contents of your chromosome to another chromosome of the G1DBinaryString class. Here is our *copy()* method: :: def copy(self, g): """ Copy genome to 'g' """ GenomeBase.copy(self, g) g.stringLength = self.stringLength g.genomeString = self.genomeString[:] As you can see, we first call the base class *copy()* method and later we copy our string length attribute and our internal *genomeString*, which is our list of '0's and '1's. .. warning:: It is very important to note that you must **COPY** and not just create a reference to the object. On the line that we have the *self.genomeString[:]*, if you use just *self.genomeString*, you will create a **REFERENCE** to this object and not a copy. This a simple warning, but can avoid many headaches. The next step is to create our *clone()* method. The clone method, as the name says, is a method which return another instance of the current chromosome with the same contents. Let's code it: :: def clone(self): """ Return a new instace copy of the genome """ newcopy = G1DBinaryString(self.stringLength) self.copy(newcopy) return newcopy We simply create a new instance and use the *copy()* method that we have created to copy the instance contents. Ready ! We have our first representation chromosome. You can add many more features by implementing python operators such as *__getitem__*, *__setitem__*. Creating the initializator ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Sorry, not written yet. Creating the mutator ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Sorry, not written yet. Creating the crossover ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The file Crossovers.py implements the crossover methods available in Pyevolve. So, that is where you should look to implement your new crossover method. The process of adding a new crossover method is as follows: 1) Create a new method such that the name reflects the type of chromosome representation it works with, and the crossover method name. For example, :func:`Crossovers.G1DListCrossoverRealSBX`, can work with 1D List representations and it operates on real values and it is the SBX crossover operator. 2) The method must accept two parameters, 'genome' and 'args'. 3) From 'args', get the two parents which will take part in the crossover, gMom and gDad. 4) Once you have gMom and gDad, use them to create the two children, sister and brother. 5) Simply return the sister and brother. Any constants that your crossover method uses should be defined in Consts.py (:mod:`Consts`). Genetic Programming Tutorial --------------------------------------------------------------------------- In the release 0.6 of Pyevolve, the new Genetic Programming core was added to the framework. In the :ref:`pyevolve-example18` you'll see how simple and easy the Pyevolve GP core is when compared with other statically-typed languages. Here is a simple example: :: from pyevolve import Util from pyevolve import GTree from pyevolve import GSimpleGA from pyevolve import Consts import math rmse_accum = Util.ErrorAccumulator() def gp_add(a, b): return a+b def gp_sub(a, b): return a-b def gp_mul(a, b): return a*b def gp_sqrt(a): return math.sqrt(abs(a)) def eval_func(chromosome): global rmse_accum rmse_accum.reset() code_comp = chromosome.getCompiledCode() for a in xrange(0, 5): for b in xrange(0, 5): evaluated = eval(code_comp) target = math.sqrt((a*a)+(b*b)) rmse_accum += (target, evaluated) return rmse_accum.getRMSE() def main_run(): genome = GTree.GTreeGP() genome.setParams(max_depth=4, method="ramped") genome.evaluator += eval_func ga = GSimpleGA.GSimpleGA(genome) ga.setParams(gp_terminals = ['a', 'b'], gp_function_prefix = "gp") ga.setMinimax(Consts.minimaxType["minimize"]) ga.setGenerations(50) ga.setCrossoverRate(1.0) ga.setMutationRate(0.25) ga.setPopulationSize(800) ga(freq_stats=10) best = ga.bestIndividual() print best if __name__ == "__main__": main_run() Let's work now step by step on the code to learn what each building block means. The first part you see the imports: :: from pyevolve import Util from pyevolve import GTree from pyevolve import GSimpleGA from pyevolve import Consts import math The :mod:`Util` module is where we'll find many utilities functions and classes like :class:`Util.ErrorAccumulator`. The :mod:`GTree` is where the :class:`GTree.GTreeGP` class resides, which is the main genome used by the GP core of Pyevolve. Note that we are importing the :mod:`GSimpleGA` module, in fact, the GA core will detect when you use a Genetic Programming genome and will act as the GP core. The modules :mod:`Consts` and :mod:`math` imported here are for auxiliary use only. Next we have: :: rmse_accum = Util.ErrorAccumulator() Here we instantiate the :class:`Util.ErrorAccumulator`, which is a simple accumulator for errors. It has methods for getting :term:`Adjusted Fitness`, `Mean Square Error `_, `Root Mean Square Error `_, mean, squared or non-squared error measures. In the next block we define some GP operators: :: def gp_add(a, b): return a+b def gp_sub(a, b): return a-b def gp_mul(a, b): return a*b def gp_sqrt(a): return math.sqrt(abs(a)) Observe that they are simple Python functions starting with the "gp" prefix. This is important if you want Pyevolve to automatically add them as non-terminals of the GP core. As you can note, the square root is a protected square root, since it uses the absolute value of "a" (we don't have square root of negative numbers, except in the complex analysis). You can define any other function you want. Later we have the declaration of the :term:`Evaluation function` for the GP core: :: def eval_func(chromosome): global rmse_accum rmse_accum.reset() code_comp = chromosome.getCompiledCode() for a in xrange(0, 5): for b in xrange(0, 5): evaluated = eval(code_comp) target = math.sqrt((a*a)+(b*b)) rmse_accum += (target, evaluated) return rmse_accum.getRMSE() As you see, the :func:`eval_func` receives one parameter, the chromosome (the GP Tree in our case, an instance of the :class:`GTree.GTreeGP` class). We first declare the global error accumulator and reset it, since we'll start to evaluate a new individual, a new "program". In the line where we call :meth:`GTree.GTreeGP.getCompiledCode()`, here is what happens: Pyevolve will get the pre-ordered expression of the GP Tree and then will compile it into Python bytecode, and will return to you an object of the type "code". This object can then be executed using the Python native :func:`eval` function. Why compile it to bytecode ? Because if we don't compile the program into Python bytecode, we will need to parse the Tree every time we want to evaluate our program using defined variables, and since this is a commom use of the GP program, this is the fastest way we can do it in pure Python. In the next block, we simply iterate using two variables "a" and "b". .. note:: Please note that the variable names here is the same that we will use as terminals later. What you see now is the evaluation of the "code_comp" (which is the GP individual) and the evaluation of the objective function in which we want to fit (the Pythagorean theorem). Next we simply add the "target" value we got from the Pythagorean theorem and the "evaluated" value of the individual to the Error Accumulator. In the end of the evaluation function, we return the `Root Mean Square Error `_. If you don't like to add the evaluated and the target values using a tuple, you can use the :meth:`Util.ErrorAccumulator.append` method, which will give the same results. Next we start to define our :func:`main_run` function: :: def main_run(): genome = GTree.GTreeGP() genome.setParams(max_depth=4, method="ramped") genome.evaluator.set(eval_func) The first thing we instantiate here is the :class:`GTree.GTreeGP` class (the GP individual, the Tree). Next we set some parameters of the GTreeGP. The first is the "max_depth", which is used by genetic operators and initializators to control bloat; in this case, we use 4, which means that no Tree with a height > 4 will grow. Next we set the "method", this is the initialization method, and the values accepted here depends of the initialization method used, since we do not have specified the initialization method, Pyevolve will use the default, which is the :func:`Initializators.GTreeGPInitializator` (it accepts "grow", "full" and "ramped" methods for Tree initialization. And in the last line of this block, we set the previously defined evaluation function called :func:`eval_func`. In the next block we then instantiate the GSimpleGA core and set some parameters: :: ga = GSimpleGA.GSimpleGA(genome) ga.setParams(gp_terminals = ['a', 'b'], gp_function_prefix = "gp") The "ga" object will hold an instance of the :class:`GSimpleGA.GSimpleGA` class, which is the core for both Genetic Algorithms and Genetic Programming. Pyevolve will automatically detect if you are creating a environment for a GP or for a GA. Next we set some parameters of the core, the first is a list called "gp_terminals". The "gp_terminals" will hold the "variables" or in GP vocabulary . Note that the name of the terminals are the same we used in our evaluation function called :func:`eval_func`. The next step is to define the prefix of the GP operators (functions) or the :term:`Non-terminal node`. Pyevolve will automatically search for all functions defined in the module which starts with "gp" (example: gp_sub, gp_add, gp_IHateJava, etc...) and will add these functions as the non-terminal nodes of the GP core. The next part of the code is almost the same as used in the Genetic Algorithms applications, they are the EA parameters to setup and start the evolution: :: ga.setMinimax(Consts.minimaxType["minimize"]) ga.setGenerations(50) ga.setCrossoverRate(1.0) ga.setMutationRate(0.25) ga.setPopulationSize(800) ga(freq_stats=10) best = ga.bestIndividual() print best And in the last part of the source code, we have: :: if __name__ == "__main__": main_run() This part is important, since Pyevolve needs to know some information about objects in the main module using instrospection. You **NEED** to declare this check, the :mod:`multiprocessing` module of Python only works with this too, so if you're planning to use it, please do not forget it. And that's it, you have completed your first GP program. Visualizing individuals ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Pyevolve comes with a plotting utility to create images of your GP individuals. It uses "pydot" and "Graphviz" to create those images. For more information, see the :ref:`requirements` section. What you need to change to see, for example, the first 3 best individuals of your first generation is to add a :term:`Step callback function` into the code. Let's first define the callback function: :: def step_callback(gp_engine): if gp_engine.getCurrentGeneration() == 0: GTree.GTreeGP.writePopulationDot(gp_engine, "trees.jpg", start=0, end=3) The code is self-explanatory, the parameter is the GP core, first we check if it is the first generation and then we use the :meth:`GTree.GTreeGP.writePopulationDot` method to write to the "trees.jpg" file, the range from 0 and 3 individuals of the population. Then in the main function where we instantiate the GP core, we simply use: :: ga.stepCallback.set(step_callback) And the result will be: .. image:: imgs/gp_trees_img1.jpg :align: center Snippets --------------------------------------------------------------------------- Here are some snippets to help you. Using two mutators at same time ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To use two mutators at same time, you simple add one more to the mutator function slot, like this: >>> genome.mutator.set(Mutators.G1DListMutatorRealGaussian) >>> genome.mutator.add(Mutators.G1DListMutatorSwap) The first line will set the :func:`Mutators.G1DListMutatorRealGaussian`, and the second line add one more mutator, the :func:`Mutators.G1DListMutatorSwap`. As you can see, it's very simple and easy, and you will have two mutation operators at same time. If you want just one of these mutators (picked at random) to be executed at the mutation process, set the *random apply* parameter of the :class:`FunctionSlot.FunctionSlot` class to True :: >>> genome.mutator.setRandomApply(true) Using one allele for all list (chromosome) elements (genes) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Sometimes you want to use just one allele type for all genes on the 1D List or other chromosomes. You simply add one allele type and set the *homogeneous* flag to **True**: >>> setOfAlleles = GAllele.GAlleles(homogeneous=True) >>> lst = [ "1", "two", 0, 777 ] >>> a = GAllele.GAlleleList(lst) >>> setOfAlleles.add(a) Done. Your setOfAlleles is the :class:`GAllele.GAlleles` class instance with the *lst* ([ "1", "two", 0, 777 ]) as alleles in all genes. Changing the selection method ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To change the default selection method, you must do this: >>> ga = GSimpleGA.GSimpleGA(genome) >>> ga.selector.set(Selectors.GTournamentSelector) In this example, we change the selection method to the :func:`Selectors.GTournamentSelector`, the Tournament Selector. Repeating an evolution with a specific seed ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Using a specific seed, you can guarantee that the evolution will be always the same, no matter the number of executions you make. To initialize the GA Engine with the specific seed, use the *seed* parameter when instantiating the :class:`GSimpleGA.GSimpleGA` class: :: ga_engine = GSimpleGA(genome, 123) # or ga_engine = GSimpleGA(genome, seed=123) The value *123* will be passed as the seed to the random function of the GA Engine. Writing the evolution statistics to a CSV File ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can write all the statistics of an evolution to a CSV (Comma Separated Values) file using the DB Adapter called :class:`DBAdapters.DBFileCSV`, just create an instance of the adapter and attach it to the GA Engine: :: csv_adapter = DBFileCSV(identify="run1", filename="stats.csv") ga_engine.setDBAdapter(csv_adapter) Now ! Now, when you run your GA, all the stats will be dumped to the CSV file. You can set the frequency in which the stats will be dumped, just use the parameter *frequency* of the DBFileCSV. Use the HTTP Post to dump GA statistics ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ With the :class:`DBAdapters.DBURLPost`, you can call an URL with the population statistics in every generation or at specific generation of the evolution: :: urlpost_adapter = DBURLPost("http://localhost/post.py", identify="run1", frequency=100) ga_engine.setDBAdapter(urlpost_adapter) Now, the URL "http://localhost/post.py" will be called with the statistics params in every 100 generations. By default, the adapter will use the HTTP POST method to send the parameters, but you can use GET method setting the *post* paramter to *False*. See the mod:`Statistics` and :class:`DBAdapters.DBURLPost` documentation. Using two or more :term:`evaluation function` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To use two or more :term:`evaluation function`, you can just add all the evaluators to the slot: :: genome.evaluator.set(eval_func1) genome.evaluator.add(eval_func2) The resulting raw score of the genome, when evaluated using more than one evaluation function, will be the sum of all returned scores. .. note:: the method *set* of the function slot remove all previous functions added to the slot. Real-time statistics visualization ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You have three options to view the statistics while in the course of the evolution: **Console statistics** You can view the statistics by setting the *freq_stats* parameter of the :meth:`GSimpleGA.GSimpleGA.evolve` method. It will dump the statistics in the console. **Using the sqlite3 DB Adapter** You can use the :class:`DBAdapters.DBSQLite` DB Adapter and set the *commit_freq* to a low value, so you can use the Graphical Plotting Tool of Pyevolve to create graphics while evolving. **Using the VPython DB Adapter** Use the :class:`DBAdapters.DBVPythonGraph` DB Adapter, this DB Adapter will show four statistical graphs, it is fast and easy to use. .. _snippet_gp_explicit: How to manually add non-terminal functions to Genetic Programming core ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ When you set Pyevolve to automatically catch non-terminal functions for your GP core you do something like this: :: ga = GSimpleGA.GSimpleGA(genome) ga.setParams(gp_terminals = ['a', 'b'], gp_function_prefix = "gp") The "gp_function_prefix" parameter tells Pyevolve to catch any functions starting with "gp". But there are times that you want to add each function manually, so you just need to add a dictionary parameter called "gp_function_set", like this: :: ga.setParams(gp_terminals = ['a', 'b'], gp_function_set = {"gp_add" :2, "gp_sub" :2, "gp_sqrt":1}) Note the "gp_function_set" dictionary parameter which holds as key the function name and for the value, the number of arguments from that function, in this case we have "gp_add" with 2 parameters, "gp_sub" with 2 and "gp_sqrt" with just one. Passing extra parameters to the individual ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Sometimes we want to add extra parameters which we need the individuals must carry, in this case, we can use the method :meth:`GenomeBase.GenomeBase.setParams` to set internal parameters of the individual and the method :meth:`GenomeBase.GenomeBase.getParam` to get it's parameters back, see an example: :: def evaluation_function(genome): parameter_a = genome.getParam("parameter_a") def main(): # (...) genome = G1DList.G1DList(20) genome.setParams(rangemin=-5.2, rangemax=5.30, parameter_a="my_value") # (...) .. note:: Due to performance issues, Pyevolve doesn't copy the internal parameters into each new created individual, it simple references the original parameters, this reduces memory and increases speed. Using ephemeral constants in Genetic Programming ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can use an ephemeral constant in Pyevolve GP core by using the "ephemeral:" prefix in your GP terminals, like in: :: ga = GSimpleGA.GSimpleGA(genome) ga.setParams(gp_terminals = ['a', 'b', 'ephemeral:random.randint(1,10)'], gp_function_prefix = "gp") In this example, the ephemeral constant will be an integer value between 1 and 10. You can use any method of the Python :mod:`random` module to specify the ephemeral constant. pyevolve-0.6~rc1+svn398+dfsg/docs/source/graphs.rst000066400000000000000000000307011153663664300223050ustar00rootroot00000000000000 Graphical Analysis - Plots ============================================================================ Pyevolve comes with an Graphical Plotting Tool. This utility uses the great python plotting library called Matplotlib. .. seealso:: :ref:`requirements` section. You can find the Pyevolve plotting tool in your python Scripts directory, the tool is named **pyevolve_graph.py**. Graphical Plotting Tool Options --------------------------------------------------------------------------- **pyevolve_graph.py**, installed in :file:`\\Python2{x}\\Scripts\\pyevolve_graph.py`. This is the documentation you get by calling the *--help* option: :: Pyevolve 0.6rc1 - Graph Plot Tool By Christian S. Perone Usage: pyevolve_graph.py [options] Options: -h, --help show this help message and exit -f FILENAME, --file=FILENAME Database file to read (default is 'pyevolve.db'). -i IDENTIFY, --identify=IDENTIFY The identify of evolution. -o OUTFILE, --outfile=OUTFILE Write the graph image to a file (don't use extension, just the filename, default is png format, but you can change using --extension (-e) parameter). -e EXTENSION, --extension=EXTENSION Graph image file format. Supported options (formats) are: emf, eps, pdf, png, ps, raw, rgba, svg, svgz. Default is 'png'. -g GENRANGE, --genrange=GENRANGE This is the generation range of the graph, ex: 1:30 (interval between 1 and 30). -l LINDRANGE, --lindrange=LINDRANGE This is the individual range of the graph, ex: 1:30 (individuals between 1 and 30), only applies to heatmaps. -c COLORMAP, --colormap=COLORMAP Sets the Color Map for the graph types 8 and 9. Some options are: summer, bone, gray, hot, jet, cooper, spectral. The default is 'jet'. -m, --minimize Sets the 'Minimize' mode, default is the Maximize mode. This option makes sense if you are minimizing your evaluation function. Graph types: This is the supported graph types -0 Write all graphs to files. Graph types: 1, 2, 3, 4 and 5. -1 Error bars graph (raw scores). -2 Error bars graph (fitness scores). -3 Max/min/avg/std. dev. graph (raw scores). -4 Max/min/avg graph (fitness scores). -5 Raw and Fitness min/max difference graph. -6 Compare best raw score of two or more evolutions (you must specify the identify comma-separed list with --identify (-i) parameter, like 'one, two, three'), the maximum is 6 items. -7 Compare best fitness score of two or more evolutions (you must specify the identify comma-separed list with --identify (-i) parameter, like 'one, two, three'), the maximum is 6 items. -8 Show a heat map of population raw score distribution between generations. -9 Show a heat map of population fitness score distribution between generations. Usage --------------------------------------------------------------------------- To use this graphical plotting tool, you need to use the :class:`DBAdapters.DBSQLite` adapter and create the database file. Pyevolve uses the "identify" concept. The value of this parameter means the same value used in the "identify" parameter of the DB Adapter. See this example: :: sqlite_adapter = DBAdapters.DBSQLite(identify="ex1") ga.setDBAdapter(sqlite_adapter) This DB Adapter attached to the GA Engine will create the database file named "pyevolve.db". .. seealso:: `Sqliteman, a tool for sqlite3 databases `_ I recommend the Sqliteman tool to open the database and see the contents or structure, if you are interested. When you run your GA, all the statistics will be dumped to this database, and you will have an ID for this run, which is the identify parameter. So when you use the graph tool, it will read the statistics from this database file. The "identify" parameter is passed to the tool using the "-i" option, like this: :: pyevolve_graph.py -i ex1 -1 By default, this tool will use the database file named *pyevolve.db*, but you can change that using the "-f" option like this: :: pyevolve_graph.py -i ex1 -1 -f another_db.db Usage Examples --------------------------------------------------------------------------- **Writing graph to a file** PDF File: :: pyevolve_graph.py -i ex1 -1 -o graph_ex1 -e pdf PNG File (default extension when using "-o" option): :: pyevolve_graph.py -i ex1 -1 -o graph_ex1 **Using the generation range** :: # this command wil plot the evolution of the generations between 10 and 20. pyevolve_graph.py -i ex1 -1 -g 10:20 **When you have minimized the evaluation function** :: pyevolve_graph.py -i ex1 -1 -m **To specify an identify list (graphs "-6" and "-7")** :: pyevolve_graph.py -i ex1_run1,ex1_run2,ex1_run3 -6 .. _graphs_screens: Graph Types and Screenshots --------------------------------------------------------------------------- Here are described all the graph types and some screenshots. Error bars graph (raw scores) / "-1" option ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In this graph, you will find the generations on the x-axis and the raw scores on the y-axis. The green vertical bars represent the **maximum and the minimum raw scores** of the current population at generation indicated in the x-axis. The blue line between them is the **average raw score** of the population. This graph was generated using: :: pyevolve_graph.py -i ex1 -1 .. image:: imgs/graph_1_ex1.png :align: center Error bars graph (fitness scores) / "-2" option ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The difference between this graph option and the "-1" option is that we use the **fitness scores** instead of the raw scores. This graph was generated using: :: pyevolve_graph.py -i ex1 -2 .. image:: imgs/graph_2_ex1.png :align: center .. note:: This graph is from a GA using the **Linear Scaling** scheme and the **Roulette Wheel** selection method. Max/min/avg/std. dev. graph (raw scores) / "-3" option ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In this graph we have the green line showing the maximum raw score at the generation in the x-axis, the red line shows the minimum raw score, and the blue line shows the average raw scores. The green shaded region represents the difference between our max. and min. raw scores. The black line shows the standard deviation of the average raw scores. We also have some annotations like the maximum raw score, maximum std. dev. and the min std. dev. This graph was generated using: :: pyevolve_graph.py -i ex1 -3 .. image:: imgs/graph_3_ex1.png :align: center .. note:: We can see in this graph the minimum standard deviation at the convergence point. The GA Engine stopped the evolution using these criteria. Max/min/avg graph (fitness scores) / "-4" option ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This graph shows the maximum fitness score from the population at the x-axis generation using the green line. The red line shows the minimum fitness score and the blue line shows the average fitness score from the population. The green shaded region between the green and red line shows the difference between the best and worst individual of population. This graph was generated using: :: pyevolve_graph.py -i ex1 -4 .. image:: imgs/graph_4_ex1.png :align: center .. note:: This graph is from a GA using the **Linear Scaling** scheme and the **Roulette Wheel** selection method. Min/max difference graph, raw and fitness scores / "-5" option ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In this graph, we have two subplots, the first is the difference between the best individual raw score and the worst individual raw score. The second graph shows the difference between the best individual fitness score and the worst individual fitness score Both subplots show the generation on the x-axis and the score difference in the y-axis. This graph was generated using: :: pyevolve_graph.py -i ex1 -5 .. image:: imgs/graph_5_ex1.png :align: center Compare best raw score of two or more evolutions / "-6" option ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This graph is used to compare two or more evolutions (the max is 6 evolutions) of the same or different GA. It uses a different color for each identify you use, in the example, you can see the three evolutions (green, blue and red lines) of the same GA. All the lines have a shaded transparent region of the same line color, they represent the difference between the maximum and the minimum raw scores of the evolution. This graph was generated using: :: pyevolve_graph.py -i ex1_run1,ex1_run2,ex1_run3 -6 .. image:: imgs/graph_6_ex1.png :align: center .. note:: The evolution identified by "ex1_run3" (red color) is the evolution in which the best raw score (20) was got first at the generation 80, compared to the other runs. Compare best fitness score of two or more evolutions / "-7" option ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The difference between this graph option and the "-6" option is that we are using the **fitness scores** instead of the raw scores. This graph was generated using: :: pyevolve_graph.py -i ex1_run1,ex1_run2,ex1_run3 -7 .. image:: imgs/graph_7_ex1.png :align: center Heat map of population raw score distribution / "-8" option ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The heat map graph is a plot with the population individual plotted as the x-axis and the generation plotted in the y-axis. On the right side we have a legend with the color/score relation. As you can see, on the initial populations, the last individals scores are the worst (represented in this colormap with the dark blue). To create this graph, we use the Gaussian interpolation method. This graph was generated using: :: pyevolve_graph.py -i ex1 -8 .. image:: imgs/graph_8_ex1.png :align: center Using another colormap like the "spectral", we can see more interesting patterns: This graph was generated using: :: pyevolve_graph.py -i ex1 -8 -c spectral .. image:: imgs/graph_8_ex1_spec.png :align: center .. warning:: This graph generation can be very slow if you have too many generations. You can use the "-g" option to limit your generations. Heat map of population fitness score distribution / "-9" option ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The difference between this graph option and the "-8" option is that we are using the **fitness scores** instead of the raw scores. This graph was generated using: :: pyevolve_graph.py -i ex1 -9 .. image:: imgs/graph_9_ex1.png :align: center .. note:: Here you can note some interesting things, in this graph of the scaled score, the individual's fitnesses seem almost equaly distributed in the population. Now, the same plot using the "hot" colormap. This graph was generated using: :: pyevolve_graph.py -i ex1 -9 -c hot .. image:: imgs/graph_9_ex1_hot.png :align: center .. warning:: This graph generation can be very slow if you have too many generations. You can use the "-g" option to limit your generations.pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/000077500000000000000000000000001153663664300212255ustar00rootroot00000000000000pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/brasil_flag.jpg000066400000000000000000000012211153663664300241700ustar00rootroot00000000000000JFIFddDucky<Adobed         !1AQ"#32Bb"!1AQqa2Rb3 ?/ y;pV>\S.yC,H bQ]]=?U@;H]ClVByӜ,udv*E]88oXRGfJ~QU +H'pR"Xf-MKNUaqΟ0JlXlr i^e}gk\N_0/L׬•}(g%XcJgdQwC~9s wV% 1>PgHPB:fcm>Óֻey}eV{fVB=֟VX[gGpyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/email_amit.png000066400000000000000000000125551153663664300240440ustar00rootroot00000000000000PNG  IHDRVv pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F IDATx[[oY%Sv`I\`4mݷC? d RhТ( n>@IA~X$E-hM;ih(%Gv)^և#פҊ6 9ss73B4(SLe|Ps.B08Bϻ GSs$QuBc,K<G|&T#q1 w"!H{4SlkT%FX#;Bߝ!cETlû5(Nh䧌}!ه=Hlj)І2ka*(J^IR3J:>NHW={?\|yuu5cknkF6wX,y 9 8=?m  G# ^~/'s׿qB0!ZVZVGWZv-z~>vG8G6 }TřTjuBq@akkou޺ȅ@cF) heeeuuu8bj٬vfSU ØrXvu]ezݲOumx8BwA11?ubCeĈ NF4o;oW6I!ИD1!qSJ'<zRRUnUAӴz>9F,G3 )B<><}@xeeexK2bb1aq懾_UTLtLt&mYDu۶UU,Ku(zt c(dmsB1p{J`;WsDB"Jc1Y8"Д()Fz*Ћm%iEj}7 cf%z|߇Gf0 1ƐTUhPn r'r$.UJ (U5 gV|@&mqBTU`PДir lr9W;>)44.i f?9\pv?Z_^}ѿqyc[7U=wͽtc_m?~|!P(uXеZMQ* B@4u]4MNiB: u!T*B #5W;*3>uUU-J`FMPԪBLUBaL([m[PB(&!vQ8$1aRJI=Hjd) icuFk8ZVu]F*-RR`^w8@T*A@mKR2[4M>wv* 80M 0|i}N:B?u]jm۶=Lf{kkkqq1#L(esJ`0  !1AɫJRiZɹDjZT*b^jeے]LҸ[i۶hl6ecώ %.U[?unv64~ z[ۃٹL($QH0()!F~o=$10?*ɖ5M3 4}Vaq,˂@uX,ڶ=ڝDIDӴȁ_4MYt]oZ,D8l05(y샋AJsh)3yc1RNrj5v | ngYxLyPTu}X,l4LiIXU.,/>=u]I@hNR2G#= {cmƆ{V pAQ&pzEpιv*8oQ}oFw1A5D}?jPA~g]Uztlr) ǍF8]ղ,V5]ժ 4ajr{b/f.R_.$ J>CU(650)Q]ҋܷ|绵?O_뗬Z^+/>o]3>K.0&P04X_x˲ 4h4+ A;y,}UUHt 8Kр^0, JP^ eB'I&'KJt:iN*R #, jI*4bW8^{p8 /EQq !E9ybS'fOO.n|ɧzܹsr.l6^jwyDl#J%>rO^O<~ 0 5 `=AE!77RF{ ɜ:u*Nk0@aK]ru 8۶p K U;yw vGct/ 0 a~a<)Ϝ9s\.7;;w H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F IDATxZoXVE 6 밊k$풚L8v8l}{8 #ǎ4 p(~w~XJ6Mݩ}>fBH)a[J@Wm4Nj@rv1Bء݈i\2Da%a| 3)N)PaD3Bp$b|(Ѝ"FXJܱm!$cM" ) 6^c?'cG;?䓧y$93 4J3 P:ziffffČL&gdr8^8uܹskkkQϟVyJyfFRmESA԰Ԑff$ ! ̩pk_~G)_߾xM)\mX,jxql6MSLr|1ضm۾۽jWCI&%L"z!FR"HHNŵw;~'N3caF1>VV˲!˲Zd&nm]Bg2xvq]-08pIlc+ bR0)d {{ W>%)RJS*Bp V;˲<ϻ>$VmLRJ9,bR$\qs9WVV/\KO=}P2N!s.@X\aܕ4iJ !(N8ب?J$a|}ɓ@44b0B%DDniBƉ@d2xj=r9fY)p\.%rYC,\.r9%ld2b0$vSY\=*XgQkf|qJ1sB![ǟ\_Yݸrm鍫]|^][^][~}襟<ΜyyyyR6Psnk&BH)K]VBjUJ HTjjF^`z]uu]ׅKv ,KJh4ܵZCp+pᶍFC]eFte8T*THʣ @V!Lݮ]q.)匉`. !%,"44dDRGPc HW6T]*۶=ϳm[ѩeYi€*[*lFZOU:_m$qy|߇;Vs.MׅB! 0U6 43BCo[[[K9 B0Ǝ=9)g J) Vﻆayir\nYVP.Ua:alnm!s(VD7Mvjs$8n.B\JR0QHaQ1JQG֠?J)]-sq%Ȼaq7ji)H.(fik{ߥRg?;;aADDQ(I: 19#4M}֜ǁC6ey{ mU|v0V-˩88Է}VLXVA}q`ܫbwgi7P݄T?3S_<0s?rݫ7n޼Vokla0AAN/\v="FBC}+C+aR zmېf =o~S:nz~˲ d2lP(uqrXv bu Z+ !ZEU{]U*@έƟyEѥK˯W^7_|~ӟ˿y7~|7W4_ٳgWWW91,iL7Bt]JPz] H8Anu>XPPxS^MTMC_t]W=&[x^jܬ阦 b[97pNiJo5׸Bz˗WVVVzh4 NBRjvdv\*udHjn6ydٽǾ>s'N4m"aؽfP:%f .caag>yDaAh4G0(zΥIdr&_ZbdJ0Эڙ2 8J"OR9,0 0Fa`d41F;vԩo4f o B&<+ a8c۶χưZg H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F GIDATxZoYwg4f VO !>>72D&3 7n]ۍׯBNI\n6<DJMCH0>?w"ǝ++MDJ"%D2Ăɛpuo|Pf* ?}uRbWzW,w T}?&aX<4N޶fY,u \- Ъ Jqǎܽ+@!RH"0J0y޽9y3 y(vqZaZVe> .B`vݮV18h4YXXJIhVPT:=,"$W+Nx2H>?/|i0*cqeR9ױv1Mqةmۻ "-ˎT**J\.JRgj(rc 81$w턂 啛77>;w츠'\PN)BH)Wjv|m]r "8ͶZl6 T*Ľ8mBe٤1Ω`|kozS'NKXrJ)N @xlhprޢF{l61i}P(` ֝r9m%Ч&L\ׅl6^q"UJmu0,J;nfB<<r ӴK|>='v]cw5tحBI)F)~3?{S(o1F)gI)5ۣbj684Nz)0 vAׅB!ݧeYKKK!u]ufZUJr9,ͦieiM\\\DR,WTJbYVTFCv*JV YB0ȡO*,1R1Qh('ŌŌFtrrw{=yh(sKX07vQ|c캮V:B,RAPm= R D mKR}m}\^4XzҘh֝uR~occcffF%`B1)8LJ#Gqn!ei]![dχCT*Px}44Z4 Mֿ-5 hBH(vtBIIXrgϘݍ~/bQ qRx{5.˹y^ZK}4wz:.Li^O;HS˲, =Fobb"8NbBJ BcѵNΥB2 KU֐sN)Tڥ&j:T,˂ * a\NVZ4M46ͧBK'@t3gƷKKwG°n`0(8Ąp&Uf 06g0tfv(znP@_pc'暊*De\XU.|Tڮ}`KؼHs.$C8+#=  x@nBȭ[/~k_r7YG?~VWw͵wz޵͟6_+~Օ!MYZZe-˂'ln4P ǁ:wV:xk4CV&P/۶a LPYk/YYµ~ Qbr0Ax`۶> )e۽sgyyyFQB)* 841yhrjCSC/Z[W/^xҥǏ jvٰx݊0 kNy\nDR$^/$I8AEA/8&$aB1x .?~vv@08mxJ翣S`T#A+lE}IENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/email_henrik.png000066400000000000000000000132441153663664300243660ustar00rootroot00000000000000PNG  IHDR\N pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F IDATx\o-7vTS$M u[F=+'H5ۊ +6 @LDQؖ @;L0*]Kj2q8ib-kǾ%N82I]{ι?;R8(LOD\IL29`qsC q!qL7J(jn-d$GI!$mEYnsn ! !#..B gP8ɒwdsXB!N$I<)I3e8띛ey8p & !(?;'<#mfP !4;;{kQɲ,nMLLʹ\n*'N8Ν[]]`٬VRJ*J̰uH9^<~Ԡv3bHF2blG7W׾׏f`{…O6668S1i{mۥR"Rd۶(NGP(]כfTo8S*9l.⫌8sBɉ+W!$9bHbbvڵ[~SO& %Da: XXA뺮(qE][eYiM h4aT̡zl |w]n?@˜3nRJvtjc2D8#Nb׾1)pB1 IBD9 D{k(a6*aZm\rY.#pi c`1bO-_4++gNd˶v}xRI|>n>m!TU#at:S*˲ccBP`b"K?<S!b$IpB$1dYFH=aVTVBP(=U>$4MW*!:";cfJ,p/ qB0ڕm%I*JA @L#q4XayՂEnEP _v j&2iJet("/԰P(mqâMzEQOb xYsG8gԖaXc3rʧ?v:ͫ]wͻtu{/埾·_yե%4MQHGDeYey^\Vt:ҝZ-9jysрoE'zyj5bY LQ]Eq`J g mۺЀ`WVVӴtx@zTb[ W4(TŲ,}n {vb$^ E@L+ iv 9Ϣ8t]bt1paYv9??O)b1P!رc~S 'rX@At:@P({`n%=q47p]7fQT)&C><y0yOM 1Ϟ祝3 x!\Z$ JZ0 AŦP 2סˆؼDŽ3ӣ/'_duK`0!q$IpeY>25}dzf#3S#Kŵ={?y,iST r۶UU8izNW^_*@^&'=3N 00 ~0[Aq`c=B13=z4= /6 4 aFKmfӲ,qh@g\6Msϔj eiEFxZ R(B) (AE^EQ2 I?~̙B0== l  ȡ4P(4vDZZP`[{]OA!~~suu.\X\\tR%Lv`)d餫M*(,h[s8:+2,~_}d$k&dx$0럗IENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/email_jelle.png000066400000000000000000000127001153663664300241750ustar00rootroot00000000000000PNG  IHDRVv pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F IDATx[[oY-ɮWv`Ǎ[`4u@HP%HQ@hm@$ElޒeǖDX.%p(*SΞ̮ 0}2pV y`d@ιB08Bhާlpԙ8e?GbU !0^ιJWL 0`X`$@!vQ0!N r0BX w !0n=Ԭ !cmb !`Bq cw7h`ꉓ3u܇ }Gb$8wPBjCw?Y}_QEQvcxxx8644bXl$kZ7_?{ԇק x8]f'''x6}hk@$q1B;{5   G# 7>Z]^Wq,6降 !P0MsrrVu{Ey|( cuSj!Kg0uGV s.r ZЧ4$$ ԣcԧ oq?uWךΦܾ1W~q/_~ͶmJCΩ .mۆa ljrUUUUŢg2qf~ èVX,8NX4?K(Bp' kuⅈ NoW^׿5H!А!!aRJDt%`6;<zZM&(UT岦i)˦i>d2Qv2R勏͟>}zĸ@xqqqu|⫊2Bb!aqWMpbHI=ey;M4Mud2zPm!zV#JR#0ƊȪsN4d!mob7{۾vV8G#$4a EAHx(3e]xڵZ-H/H08HH庮ic44X&''aL""ilŋ㉉'&&&&&s2/պ„ݩ<' }t'2q$E1QUUY+APG, ÀԑRUUpx@\|BL~970F':VT*%-,gҗZ߽'!hm4677O:Ř`&g29ĉV0J('8 c "mpdC`z_9FUL&S,MLёJdYVTߔJ%MӢ´=~($UUM$2w+J>ġn{䰻!Ąpͭq? O~PRB%ROVPQ(pkop2؏,Rj5˲f躞H$* ר]"dJEkONNNBp"Sl[###{ ' (1BHQx3AoJ{W"H$a>LӴ,+ZɹɶeYt:LӄX}]RpaJ%>94MIRH$J+PI!yu1t:rBH$L~wOR@6[*G4O6bPS&tXyL_/= /\w3??y?//oc7yw__{x׿ۗ^+WPthj*b({rl0i"LB"W!n2U}mX4X,M,0dԱ֡L*U4Y=(VU5L&:7Yr9(R uT*A(u㊎*U:0 (,Ip\^7vA\ 0 0B(rl㣣Ǝo}rzꩧ~ܹs+   ڳd2ŲiLw(S G;yO>q9|<jvn>q7փr|񱱱X,֝\S)VdJ ]r:.JaDCueXlQmfnS9s… ccc;o5@i&āWx >RCj677W秧oܸ177h4("ld[Gf)O~7a "Pd ]Їx, \0U X5C !`.8IENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/ex1equation.png000066400000000000000000000136201153663664300242000ustar00rootroot00000000000000PNG  IHDRFM( pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F IDATx{<ǟ1n!"ddB벖)fVe;v+IuJVڋ%m[$5w3 #ƽ3?js+%|>| 8`b".@//| | _ _HYyf: 69\<@U$@C}?XcNL*VKg{[T=wbݸ>q!/+HU(t]lەfSL@#})|{DҲ-iUِN|p _ _xיTnTϬv( mbϫ3"K/(zF^*` N&m9B!Kx60%sR,ā ltB3R}ĚA|_h|zaۀ7E\AoU`pw9t">ˌ:~]+6z|^NKnu]Д|mGx`|m8yٸ]&=QAKˣ|]Ų$qX|R}eTM=T L-g+f&frq4 -?V5EЂo]})+ So_ǵT>Ԫ$hˋHwkV_>ʔ3 :Ш;jp;nydx#?.hGn2A!^ŽKt%DU@]:^o45,"!tخ[C*Uk_8x&ΫJK.'֞37ImWP6d/~(>TVjmױO GyC,ڴ/_NVYcjjz1{\}s"~onڕfj3K !)*2XO!薼ȐG\fK*Y$1 , !$;64G~4]Fl ̴z#N5EkY-j=+lϻãl#)>G6GQe\m¦Ƚ X Ue}.2L87'CY,S|>IuL9O9U2BD"|8oF57P[J*GǑ;ktARMW5>(%gjq$+YN +|1-#bѦ59W3=%-LxR ۼd /5 YV.;z7W zp`X ={Āv A#(I5czLiz/7^nMeY,H2Ҝzxwԉ-^@U/xҫU7 Vב j?Btz߫#id1 cx8B%YY=[UIw J1GEX%ڢ.T9kx~DkK4tӔr*08BEUǦ!$hh0^d Cs| y͜6o#ْEԈ 3džĵ̖BoNjce'(zQ>1VWr,q a]b|˓=VۚeLQ {춲J9T =q̲lSc[8AAuvN.[/*zAkŪ-VV o͸е[IB6#gB_iF򀄭+Zo$'Zh!LUݐ!ċNʴ5+i~_U|4z\qْN͝/ҫ->}rcy.0l4c=me;RWk-[8Ք[~I:|%BҊZ4E$dv8(u[cSG]a[ #I>$գ(}EC@)5M򱸏*e綺#ΜJ/ۗ \QgօO]9i);N`N,O lb QhD6^Y=$JP|5cXy6+R"AsPg6(;VGf4jxfb /u +_T|||2D$, Z6J$/\Ep2 Ίަ̧ՋikII%|QEp~IR4i ]QF]=OT;-jo(hnH,uytI[sx3iE =<6׍V嗣+>JP}JutZ&9{݌Dz2.(;Orӆ~9Z0)a%' smq=&VENpvݷa-fGY St=y&']QWJH,C!#j݉Ƥ+'C.I:_g#AN<`6lpnqԉ 02[vm2CBXiTNn;?:0}'^^{@{9*Եf` 猠.\ rSfdIw\ӆԬ? $dE%0%A^ }z=lsw$Qf/ aA^.p>o,u%C qkZ05E)-7g(Z `x1Vx$+}xö< lϋePi"wL|f | _ _ƀ R38IENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/ex_12_tsp_result.png000066400000000000000000001053551153663664300251460ustar00rootroot00000000000000PNG  IHDR^ pHYs.#.#x?v IDATxUֶ1Ŝ(1@E1gŜb3:"ĄsӘ03EQ_[V۷o{N. ᘮ@A'  h@ $  h@ $  h@ $  h@ $  h@b=OߥG OAtW0 Ao_~9y饗zhb,gP@?|A2zdfJzl3Ϝx=c @mF }{?df?dJ6pdwN[ou-Y8CMrKszV׿]wwMYddĈW\a!C9$Yb%3A ûeFmd 7I~,$>ǕO ?*~m |8xO>IV[m5;veA  uv:<'MdUW]5Y}駟?w}w2<$ .`?)y:Yr%md'd?&~oT0;r>_|GmqmݶIL}vo~fP _u{/+GzA-H S/ ((~­{OLd+kߓ>үAc\+zs0yaAQK|xǒ6,0`@2|+LFkOz^Jw ~NG(YD1cX*.{o%@?+σ?:ꨤW^v'O~\z}y@+zVtħ7_tAI`+׀0۸ rNE2cǚ:cIyx'tΔ#b /`ߋ hB] VK^xa+ieG/n?'W_MsN D r_YT.5'p♐ߧ$Msh'ޝ&:<&m4&O?}r'o)Vr!p&s5yȇY{e]c(q}ƽA^ 2u]_<=i/z<2,8 kX9*ɮR|;ceZ 0xuY1 0 <AsSN5=&5\q||߉˔AAsWpXI*+Yy Cv[ߞ1v+@;o :Og$[.-INORJ2NGҟ~wL4.b bѧ4C$?^|͓Yg՞c3P OAAPc+]":s9t0RV->['APIG[nI9dg< nr[XQ$yA%rGdA*iM~&;S^{%guyL}@&O&ͯY\Q#J_>Yn9HY(2aA.}X MfnEdsq믵Z硇Gi{J q ˔y7޽{Ƹ&>q 2^WϧIߏ?;KAIN\u$gN/l2I$zJsA^B/2銕oVˏ_^-ןza=E% ޵/$Qw饗&ɋRMY5{Z`~zAPKѵrwr{*g5^B^hhHt!#K~}%U3i3E;K.$袋Js /C~۾nKiJ&MdϒW=ܳTWı_8Bb?i, zrȅrP D}𪫮'|bp>&/0ucŃyo׮_J}{P袋VO2 %4A!k"xar>\sMrV[me| -JGBuIg5JO<| 7ܐ,B]q-EhAZ$mfǮ|E!nT q< Kچf<ƍ Wu'5 fV eɜE^] *O? HV׮]n_ռA8!4x)aτbd=M>e(Sd vmy24I?ٟ;#>2\:ޛme>rFZ*O hksԟr{Ϥ|uOk`]%m[k' eq]v٤#2/{6 H&=/@I'oKVG 矟<M>K<* ]; Imo1>l߂zhE0(=S8@?̶nۤ7δiӒۅSzC+r =(/Rzl'%=k=N;]Dl8roP%CR,?>uV￿鑱J+f(Yl/NrPE䪍@5~IwgpQk;;@ZGC,R''Ԓt. csYv7dЄtGuY:&, .,ψ}6'7*)PXt (SCLs15jxA96'#oL.deg4~$pK#w}y!a dZ ,YpYA֘xɔ)S4 /LZj).2 O?njJg0t?jMz(&{Da8Ay@z~M7%{wryY6J?C茹 O@k$YP\(P┶$5 YLvU<&h9%2_}U2tdER7YfQ\rqk>4HulPk t_9THY69 Z 6'܀5j7d[eToQׯ ϧ #\b%9H8p%y>>hw} '(svyXD==fGU yMli v^ !-ž_(ɅFUP% V}.q~Z-{똰%hJ"-Cr@d߼Do?7 axx'v[ruJ|IYŰ4EFU>}ޫj͕s)C[ay d#̢_K4\>W]uUcZ/'A, y]4AFfB BR"Z joF=TQh1s۹b R>tbn~:,*ޏsHݴ|ZeU,i)Z!ARyBG)*+rbKa⋓!CZ?;ۅ&,,x(_޲y! NS ,~G"8A5})vcǎ?PޟW"=.[d5ht.<$!/9ȽFɗl*vX;p1+! jx!Dd␔ҤH MxZ=d}M}p3 x{@K/]* ?N%v'ONVXa{A^:3_zR)RY\ \jIOiO%OxjgP/:u,v;ЂU^.fg9e!g񼼡k H誫qS\hqg|19裏J/r_[9Zn<$P5ҌΠ wh7RB{]w]U< F'2 cIdgPU@$Ek28mX{{ꩧrf-Vm롳oOhS&z!sEAH8{yzr'!&CP}aÆ021O^z%ݻwOXcd ^{H/$ϵKl-Kqn -'/^k<W_}pC!1K<_~ySt\-AF 7ܐ;Fm׿&? ^~ ~$" $3wA4,tQʋ,dI0hO 3xɓyVN@^z=8`}Ie~{!QC#:e{NOҀJ?+[?>aW_<30 :o ˪Ɋ <p0`Z ̕F܍ 5@y,H\5jT$EUF"裏l"G*AkJ%XORI+*a\̧cǎ&1cڰr0aBf2o(ە7ꥳ>;2d}]oDoC D]믿~i?hQEeB ,nF^\ ^77[%FjvY8y,L8TU' r֗Wzl7tM?l>mzS6ۘV/2oh@R#G|-=?IA{ЂN)gis{|oXiyř IDAT6|2($ QO<ўݮ B d@}OZ-6^="u_Ufe-df"c1sqkԝE bcL4)ׯ Y)H dDHUH4P$tN[I~9;Z,GjK&LEI'\|\7}\-x^zt.@=+2gx-}vMrfNk&<,'ގZj){㯛5Acrky{qo =$fMƍKh'EryA;HN9{]1rpz-6,kGsa]_ý;D~YgPzEYi+A:cK~"M[ƞ~z{2egA|~ I;䓭+?_2]`l DΑml)iDuDk9Mʷ6`3j~m 銉цOS.O!coLN?R5QuO&NhjxږZ`B]vod@vj D('ĀXO㐛tg4w1#PF7|چ+_eU駟ZsN PJ~GИh}VA6Cq7 /2/h~60bC0zi#W _.F>;AZk-g0\{onYY'xbr-X('x!&WyGO!UxuFe;ZȌ< If)dHh2ӿ3h|EE?^ƂȄrwso:xܼ/|}|Q}A@V0zo,K2)s-0H|X> [p}/צoLb^4iv5P FLV089^lQL $WRX ƺxÙuYE_(agAdW\~(ٲڝcPǂ/rBȉ@| Tp&{9?t #kВ^^{D'U 411hQP['Ixo_yi04Fs1~yXp0X̐WeatQcK E=M];Ұ=Iaq'VDjE:A ;;̼i]q~nᆲj Q=!5| T:1nU$>ꫯ\wuKMt2c;Y(ĭV,ea POc!`TRRɈE` >r| cǚ0o?\ox;`h /ћ;6i/~,Z(3ڨ1)tTpetHo:[n9b뼇:wZ(2˚4 7Jeȗ+rg[ :OӧOrqiÈߑ ǀ y8_;t$<@K -7>^^)d;s''|KZtls۹,vAbhϘy{tjW^9bHq$!n5Nq؏7nsP[~׬s.۷o eS ?ȄFE 0I@%Wyn$;C UVY\ߔiɆx(1T;og;zHC0JC4o mB䢠u ? Z dJ4ʼ BX<<M L$pW+9yt8t;K߫9B>8CdF 螦p%? ^11f\Zgsϵ/&,Y8*iq]vŚPL @nr z{ed!-PN_8x$NT" T_ӥsnፅWd:dЃ3& +`I Zndw~tL3Y ? 4ËtmMo}b42eVVZ $E\pF[o$!C%D?i-4߬RVzs01Rc,{I2f.lYfIVXaK.iN~cc,{カc\,]믿n{v7|m!=]1 29+6mZ$s4,c^C ! &FM3q?lQjRWs9UEx/$C 5GoM`2~1t[%,`f0,*^W r>G P#_0-]HYR-`q{lTA#xPR5sKɂ_Cc1G߶n8㌶#9,A%Цqx7uT9z0ڈ?-M];}4b\@kBMQ.D=JHj.ЮӧOIpEt,3ڃ__Ӌ׷X#5h _AL1 v/ biaKfQ&lPD$nO u_i3x8wus#Q0>K1YBTT!t:~j 7Vata`č Jp#/?h-Agv=9 ի,j!cGQʸexEZ'4V s<1P!|u1q`a% 7 w9R_"$G&'ʩ3AM!Ǭ{Pi2Dԇ |@K/<.@P)A} 4ޣ@x=6aTYsdH"xog?F- 眧cePFdM"7A{  $iy A0*_( Zxt@}@n*O}'cǟΙQ <{:=+h<*Ez|㏷Pk0*,75N \lj٩1A[ܺXuBz&knT0JBo0ԫGLD83 ?} |9NdiU[d7~4i% Ry\Am  Z+rqzJ=$ zY6'4׹/P>vM\ dg yJUAzP! F@ܞ h UazjĄI݌&>*uӴ"DkW1/1,rÙgiɂ[< k.FP J=)B}2h+y&hPo0:`}ɰaJsx8mu*[P{?lcù*<Ai6Nhp h K,=BR@;̑n,|Yovy0D: H\fCto$)S勺H$fmyTڂbOva_q@Q<J9?띉 ]['W^y%ރE'9K ش馛&]vYhڸhbD])8ZCAƋ6s<}%f7?C袋Oz7QG瞥vsGsGgV7@ύ) @1ʢ{KD?h+o&+0A[ IDAT41|BWڥS}„ fm 0!F1ANZ^ ɐ[,Y6ǔz|&okv:џw5m\" v:,{.^ߧG-L_}UsYo4VX!ի%;6Yj[]/mj VJxH 6q@ÊβyO0B/+9NBDsu"M7t%w% G6mZX)eL?7Qdxq:nbd1Dy@I$KD@qb&|&bkHS߯G! ^Hypt#,SO'+%,RJD)\<ɁtAu]gyJyV@Vҋ?0;} b0Z -!/C=T|衇&w^-F?D쳏ң`W6nݺ:kx418;_D4*aA'x’LF nv\\r؉c'ڢO~O>[`agxɄi&i Y|_{o-?@ȻJZfK-1~cƌkӯUYw^[Td!eGnx$~ @)ҴcADNww8y<=?TgHc9Ǒ#_}O,WzќI?\arOk.Sq"nYgoEZV7bsx'믿-44aWAދNJtLNY"q%rE97|rI'^|1P < 3GBȃ4 V}͚L2%y7/8ҥKr 7{Hdw}-d#G@5 XY_{9ʁoW_mk<_~y&(DZ<!~9o09^ / #$!aʋґV<-xKo#g @ %rqqsKF^>v$۝|wmْ-Ї_ # j*s9mB'jA? QNʙIzܸqIkih׈F'2E^3_~žZ$6",ܿ5ܫlD0Ge-ˀ'q43ۋB!=8f Jn=M(}5 ;4n44z7s3-VMngbnxtL 믿q$t\` Q0ڎ} I䋰clvmbTB/hz^zd%,c˕ɥ(%IuI$c !LrN7x!1:I}x7zT/B֙^0/~*Kr2zy`6^j|,Prwaa\2%m=Xl౽ us5F6^6<݇_~[<\BrÇv6n""H 3 -ºfGA{奣GnR}#'&"&v޽{I6Dj*Og ?O(ǣ9.bseo+c0v<|ϠC%YC%oM<&x:sC#yWՀp T-(s7|  t#xZCO g Wpa5/"e,vY2BmZP(k[ܻL:<0'G w/iV}A<"4DGv$k/ᥤ,ݻ<$,\nc$!hΛq+(sɌ$B H;sׁ:{rYgR Mʅ%)Zp# r4SX)l>q},TʓG gΞ QDFrl\ n@cd3J:wtxGJ=W\JegQoLiK>CB! tG r^Фb/b$ΤLWDq۠;lR^<ܥ8%#vه~\@rFo:_ :w A,K!o-CB5/@C畅 4Dh.%H"E /=*u\G>(6K_#.\뮳Ok>Ԃ񀧅)ǹ<*#U2 %L (' oɛAR%uTWO=7Y-${!_\L]6sСV#7nȕ| 7Xʝ7?@"T__Ofι\{%QT8P#ϫ3n˕c;\i @. -ڇ /4:B(YdɲJ.ڸFm/~;:9R_Y*-4~n*F_5cQ+Yܖ>;M{J __NBdD#Ho"1DJE1bzdF#NC4j@w<<n x}xk!~OKZ{C  5Z"_+mpQK{^\ZCԧshE"\и]Ek :6sR39c\>(MA!6Yy{ř&+(@5N;W#T"aOGV E#@XT'9G0Y K>bePգH`?akSˢςϮ9L&=2)[;O>օ E@"E$~ -\4ǡ[1{#rЧiv*=b%24:C C g4 `mz~{]CV'<.kd)/]v5XS,ɓ'۵#PЯYLLgSzEt'h;ڥ&FY8~g,=Jx#1|;C-qj8{k~_I#g}ths$"I=,6 E:&=\Czn@35aO`Gc~Y0:F 0p@^ K[x0C$Q Ilpa 3D*("u74G |(a!!nC`g7Z4P X-tKAyVə$$"@S Zh!OlV#y0/@j.X~!˽\f>1㦲d:z4z OF M,$+`D%qd\Ҹ4X40[lRT[냖)O\tEuŇ.Y?yg(dQͿ[G˂D\I 2d\JzVrt>Ձ {yJXHgW/-1b&vr)3Ў~;i.⶛hM.h>]:FY mdbsGsݻNϨ\ k{}=|9=饗Z(O%H  hnhRj*S roޫ<^0F2Y$9K #? ?^zrxN%}) x㍭LǷ : )bɨA:;}%@`TiT@gvRZ볨`!DY8|H%ݣP ],sa倔d&7O!_UP'2R%("0-k1vEΨI9UbT-Rϔd@jBlkǀqɬj}zfaGj[F0xF:*Y-:ct3x&$4T^تe0ؽNvugy9bNxZ4Z d,R-H2AG'?A69*YnXgt>7`P1;ͳpPK-%Y3f;{Ik] ?52xP%6l=os42PH3X$j9j+=_;]}X'qePŝEx,?ɀM{<3r%k"}AԶ>P,kE S,oo8Mt" igUs'k[Yt{k9fpԩSy)c@a4 d*t*Aj' h&a w:{-+M=_p@"A-z/NZC}s0F!FmdZЈP@^yg3ȫ+K[jV74 1|#K1bgXLafj~^3H 4z(J9ueHj4R % h2cr^{msYBĉ&6U&/ TVy.X̿d„ sm]W>3,_|Q A%_~yUtt |'yxZ#ӽޛ%A@#8"YllO?I&kݻwݠd1)FhNHaJO<]ӝvɴ!hwT%%D] Œ'N,2ɵ^|嗶e)Ia#%mVwOvmg}}GT0F.PΟşg1/E]dO`ac9SO=nHNcWX]t(uj-ƺГ HPPm{V[m䥗^Љ+yOr-U_ 5pȑ<$j@H-kYLSL>k]wy30f̘CIfadu׵<(T%b`UtR 믿 J@HԽ 裏N^xdɋ/h د_?{F,@cǎMb!.N}M^~e{^ D`쭰 /ɊkT0F:? `гgO' vQ__te+_$:({=것j@HdF o>_W%*#F$mtA.sy睥zY@ ܀ywqGӄn}eNkY0@^"#pQhTƑB9#lc駟Z[?fZ _|loMY+If !fAAb';S) l:K5=A'l86pC{@aQ-}饗 &XW[B^?9ҥKr'rxhz2L3d f#ŧߢNf{t>=ڞ^u͞gs h@qI&%O?tہ')9O?}rm[lEү_?[fm6RI2m.Vr-g㦬=rA1Pqi=ur2t tW0qYg%7t=OXVbCI^{U:h#M.K~&L{u8oxw0nܸ9R7|%<G%믿=3&"KN:&e4>H $VXjӭuF#<+lFP]7lvdVH^x |k׮$Ώg;ca/^g\ w #ߋ\6/̚Fkm ?&xX]h`m$@@v7.hTs9ɐ!CJUY$h2p ׿5J\[Y Y]<Y$5Z|MGoP Pnڠ:P,{߷Ggsɗ_~\{f9眥3fJ=#ټG +ZYkwq82AV;cǎ\~svԌ9c:_]tQ3ڢJU@0 \q&K#"5<oG;Ua@+@';)21.|W69|>X|mO \>z|wV q#牧#Á&?/8-mBD0gk#{.r+㲹E% /"3l8HiJ!̽chB/kqdyȕa2bWj7Bt2rҌ#_,'x32TYdN+}Ϭj'1W<Zfe}9cr3\c}F[U(EͶ,H{%ݻt/#؈1oȁƲ -_ȀDd~uz~rgcQI_T4yd7fvp \0q `,0 P4hM$̢@)qM>v*Z0mgL*>rSJҥ_4bOW_m!4xw#xo;l(՟!\+sLJ Љ͢vfR44Bee#1IOIdeF{Nr@ 7?>l9<"fڎ_QrũSGd^%BK*b1w};Ygu30+r2:^t;;\R:Y>4dս뮻ډ{OvQ.fֳ"d`afgF ne]IK( b@;Ԩ(O^ [%X79%^K{%\z_x[ym1'd@)W~տZvݻy(7(1@QJw&vA=!e.>fK̓2@Gf"&R;(&v2g>kXhA_ݞ3<Sg /;@wqNU;IുKlĺ({;%#h" @yk "="d+ B!>A^P]ǛE,05Xnll[o -iܐO?%r!f -PļBڂ HUg|R+,=iYXoPX<!Bז[nYf$םkwAc q{|yt2EoeS䛃' B1"|< 8XYtj+~ 'XU\yqFY  51hӋYnԼ]<Inv=/@'ϗdS/eQp"ͫL4iL|/*80jvh>,x #'tG, %! !ءh86d"ĮȐ!sMH ?4Hv%!XeUL Pb\S|4q?ĉ1BB;~j2yL ef8dG#-?k ۾}ڮp tt)l{?DSOj =* g7`7f̘k *r` GB 21(S(@q[o$bwyiʐGSeu'TSnn 9x`UKoѸ%TxgG_loPUkzuz )ZzaVyu.F8:m^P Fi9$ NjBsc?\l{~zk K0 h y -_q 儸I|;3Lh#FV΄Ox$/QֈJѵk:%&Au\pn+/eBAcۚ&}ҵ2H7Aςv{: ;/ܼhyBrA[}Fo꠆)0P3!lwi!}M2o(h\P`m<_Jo'ޒWE s7pA[]‚0'|b#-|_{И^$Q!$?+xFE"hlDlСe㵢vT^5qIZgu8/gz<`ќr(<( aCѺQB,½WytNX GsH>{Oy-rFAJ Ƞ%AOEJ5Ą77v3k|N6-Yo_{g#EaѨDh"6x !xLBDSYehi g̙P4Z^-2uhz]Ӣ>ye%|=eQ 0&?4ϣ) K8۶mK-[f Az`…5~H8(h6墋.!* Mǎ;J{QZyS77-KZ/hS@5 Tx /8y饗qL-r}MުUd&.g}F#ϭˍue jZt5U('NL*Tb '_,^RzR,B4g?fRo%K$w_rA gH#{z !x(?|A(D9S|g};ɤI=z$zJ6oluDž*{JNǍgǖNbK.Mڴi<3V& k']t1p]v6vhgVQn¨@:Đ*6tݢ}\!<_[vE~ch&WĔ'V}m?DO$}-u֖6*M5q<, \@hnBGX:B`>]l*B/`q!Hec) kLc 0ud=( *n\8Id(Y1D哮&@LߠA,}&ݨHs>m"%C>X?_m7*V`ͱk?'LxNU믿nرC:(Y8U Q*͆\z'l=+ŐPp(P]xJ@kb.q\O?m6ٺu 8,뮫zw&לuYɺu뢽De +@7md,eUEՅ:t!h/On8`ϊ^!884{L#D5 lDEtAoV&bj Vx|rk(4J4@V-b jtsc2{@N*^?6nZl6!$L:,ۈ&ߧsb WbܹrM"|xS$@y ^ӸRTZW$Ys]x?Lz! 0~ NNT!lcMϞ=yJ'W59-H1 0)*&Wyq䑥a(N}InݒN;;1Ȍ6M2%9& 4㏷wllܸ19ӧgyW|.DIEHMTj 4xp#`ѢE;E*ِG{#;S n4رcZeѵ{lL׮]y֡MM8Hs'Olwud@1/f4f+!k"A8piNC@ySImG݈a.r{G#DS:ޒ%K~D؈ZVssdĉv}*v#ܪU| γj3rNXNJh{5eEku:b[Sأ.FQ5SGnTF@ Ⴅp-UʀBHs#0 cSA)!JK#fr} NQ74C Is79b@ ߲e$`Cp؇{f}af0H74JoŜcgSawsIVO>ԾJ.is!-ׯ&MT6GDC(ĊEB@!;oV2h [ُ1JX#c\f[>~<7Jԇbrԩ9Gׯn|6~x2r:u3gG!䈴8mf>8}|S|O>҇H+Da t^>\O݆x'Ӵ@0m_ ͡}=`O3QF=چ ѦMry=nGq->X|DPt 7X>}X`&99$݋<ޑsg+Nz&e4E50xӦM+Q)VIc'_~LSVo8oN"h%pVXa˪ž yB\s^QK@@)6 %1]q0/P֘7` Q_Ya ԤRDlpj~V *R}۰a=Gf?xe:* H9?GIaPLDB/ 0VO>dq6)Jk !%tiVh h;6#dqC"hCR`vI(H& slN1ʉh:=_byԨQEn,ad Q 7H U;R%@D$Yp2EJ!I%jA'9@:,+$s51)J7EFu1.KcЄMGM௸  bgxC13`!pB[xg@XV @(&215k֬`Bj֭[Wx텯CH (ߏV4[ aHt>ҥ5;bOXM=$DԖF؉HqVDB"dɄ L݋7$XB4Y%*9(Y94Q2x6(I3Ҕ]vp:|{!Ȣ.@JA(be3裏&{e(a(Mȿ!!QvC(AK@!Gh0']M}ʕСqK:ׇЇz2'B0o<+Cq$BFh^ 8)A]pվ}{|wV˨Sx!Ahҹ8R1z?EEz~idh Pz|eot7 ۷[7BiZ.`B!Q<|Om&˗/7m8xLTfͲFAL ؈V)%߆Sc7oV=zy HfϞm텉 <:;v{@"7v=4oo{ ʊwbСCaÆ! I$$X}K"۰KY_RcawE6!PY1FA5jGwSwHev4eOgۗA= k \wș噘5e:M\eO OO_h5(q\QMWNvхaϹn}-VpCuE[ʥ<Նs zZ6NjgM6~3DÒQǧ">xN2>hſu]OBkM.[` 洷۹{,k5Wou0k7=ڜpYxV?MV?c G{7JWR{dcGsOաac}{`7U^?=?M]َ<5N?Q~oZN'F{\W}[_?j]-ֻ q+`6},5S[lk\{^;{K+3ku9VX00 ;gHeL9 K_ Dx/_UC}7Sr&Cw~9y7sۿxE+) ՑKtoi"xs U(V[]qj??zq`b%Dχ3xDُKto՛ݝfUM"4dsgjs]!.ЍG R@"_Pxn!/$NCQ67;Oo{>#?jI;eoWdw{>/RKn=~^oZ݈Cgf7kW)%24vzKwg*f̟yG1_4$lۏxYO^Vwww52I}*v}#glwНz~w_2$~}3?6}۽N?3v/Ke/Ga1?럝nv[?_2~nG'uٝ|L__*zPhotoshop 3.08BIM%8BIM``8BIM&?8BIM 8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM8BIMO3v gp_trees_img1v3nullboundsObjcRct1Top longLeftlongBtomlong3RghtlongvslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlong3RghtlongvurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM8BIM #A JFIFHH Adobe_CMAdobed            #" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?VHy)&x'$gn "cKCZ.q;. kckMڪe9x憴{Olts\wj&i}8w \vZrs,ґZ#? gGID_@D&x&"um车ADSbȭ [ F50$OD(fȊ4R3n|w~N,h%6EȣnEP[WPie{ɒuDApBG}4S}Si?vJnNȳ[cH kkrQP8r q0^o}-6\zuz:5jݎu{G-?)HE Zz{2.k[sL5'ڬvWDKG#r.e9 p;}M?g6;@Q DxQ6I:IOaĞUWqA,wtU|{2/}5svϲ#>! I$$X}K"۰KY_RcawE6!PY1FA5jGwSwHev4eOgۗA= k \wș噘5e:M\eO OO_h5(q\QMWNvхaϹn}-VpCuE[ʥ<Նs zZ6NjgM6~3DÒQǧ">xN2>hſu]OBkM.[` 洷۹{,k5Wou0k7=ڜpYxV?MV?c G{7JWR{dcGsOաac}{`7U^?=?M]َ<5N?Q~oZN'F{\W}[_?j]-ֻ q+`6},5S[lk\{^;{K+3ku9VX00 ;gHeL9 K_ Dx/_UC}7Sr&Cw~9y7sۿxE+) ՑKtoi"xs U(V[]qj??zq`b%Dχ3xDُKto՛ݝfUM"4dsgjs]!.ЍG R@"_Pxn!/$NCQ67;Oo{>#?jI;eoWdw{>/RKn=~^oZ݈Cgf7kW)%24vzKwg*f̟yG1_4$lۏxYO^Vwww52I}*v}#glwНz~w_2$~}3?6}۽N?3v/Ke/Ga1?럝nv[?_2~nG'uٝ|L__*8BIM!UAdobe PhotoshopAdobe Photoshop CS48BIMChttp://ns.adobe.com/xap/1.0/ Adobed@3v     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?߾*Hi8`9&yX(T+UTr\ua:oP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺M}#]UKA.d+ih(gTUU)i))/$qf IߺJMd5glȬ͏M׹u9_4C14&QcBI_azwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eoucNe-=}nܘ}MCP, pJ^& "6hDfI#~يt:ۂ~qfu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}uazwP[{ пFf~{^36_V^/љߺ^fu͗վ׺0 ??fl׿م_A3eou/B/}tܙ:\&>Y"a[k岵 M2]1כ7VhT{.#E-LTTGO-lFc2ddSnojmn?ޛ6iuvofWlڜ.7~팤:Z* qq*,uUDQDWc/Ng7gmwm>Nœ-S~uFbg[Wr"45¾f|zUܛ^3ؘޙ|lRLݬUoP%<1C$"unm۶zrsy`;kei:c>sǘduЫu6 1ݸRIKl.Cy(9brEk!GŪ/;s&ܻ#q>qj =lᨫ˭=$U4 SgU0욽׺2#ec}7K9ivٙ GظڈvE{n 띍LNglzq r? A} ۅ}Sݠ'{b}}{y,^#qothPRk]u0G<{t,wBEL5^R341폏o|"lNznȤ!㜣H[pW{};_uo.[{nNl sSMYgm6OKRC3+LJYI}tޘ+ˢlbr_S.+ fsY4V22e=*UU4p=׺fM,F K&F]k+K.s j5fMzEWD)itI?mvC |e)7D3m`{.ml_ 0͗G9+!JxE^ڽW;gm]=;7%gTl^T\lESV5b-u$MD^n+ 7ꎝ*YI]ipRb9*J}Ƿiu>>*sTCLԊ䤪H}׺Onn&۸N+C8غF88;K!u ´۫V4̢q9#gX~Z5H}O#m:1s ܷOT=SAQ9פgs-ьCLNGFw?w쮟gs_o}鷫%W#CQ]L݈EߺK-ͷ4m>N|cwMQnُ;Nbm &3KG&Djhb{7SvwNm6.3 [ٽŊM6'sx Lf !h}׺C\4Rx?Wu$xݳ wU-O\=cqSQoNQlcYP6#-,dcu~g[Fރ~ڏ::'#ZABύ?\2MUv(=׺QBFǯbt^7bW:"[1pՔT4tңԔ_׺jkb6^'^csݙ͕&FwcxWU-VN E?e/^"y+{n/6m;C!2^ٹf/Nny4T>#lK-MPH1,>'>aFscolX x W t\xaZdSer{)-{%=jT,1G)_uE'10pwGJMw]ےM^*cf,vvD'H^oeΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺ^eΛ_?ߺE6~$~vb6f{C_lͭm{ye1ƦVRUVU@^ڐ|p۱#honny0ohs)mqԵu$f)IYQWUou|6_O5cF/r~~ymIv[dW+7&;dͯS> 'x<.DCS7S>|UԵ6O;a374j+Er)EfSYEhd^%TK]] ٝ|*n>?LX,;Tgr8|``*:8*k8}׺;'ǐF! $1?Xt@FAXqMo߆yn)zpgveVF#nlABڽѼ)e1{~NGA_8ig8̇{YoôO˷W~TeA4:,")q!$KSUIOt/M8 wL[oZnpο{Z ݗ0Sa+8C2_UMH"X袑B}׺ _px-˵{wdUy}וoOW|N6dk10I0HZ5c"tM4jo#EpmżJ9BSP&\jE =׺Nv|-}ԟdi eu#{?p'n/hdxn\tu9Jxg1tնE nyrM67_uN|6Vew y\HIOX{trt[LǞ9Tqu[wI_S|dzL<5JZ5ia<+ȺXuV߆{Cu7 2jܮ+kV7PlY61mn:lF ju_P u5"ѻu';'?P؛ɩܐ|mߔu:r8={kB-fxgH5L{7Gq2GWˠp>dVm {O):a-Űʜ_TQǏut׺/n|'oݹqy݉9oKQ}`{a溳;%sI$iҝ恞CGLi{nǍ.kuO]i1rI9}بp\\EZ^Fpl=Z/C]]zs)+|d!LfQ`R]^bv,݉Ey^KA{utw]edX͚[_smu$ZJY㍖H*jR!б'y|.rğ̦߫5v?ǜ]o]o&_jE_2ٜ6:loh6fG%VhjuA3w_~gnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽t ,g.ށósѸ68w%XyvL!y (f*e#ղ4m/=Ű{`ZovWxUnr[ieu+E e$ØfDPT%7m-3aWlm7.3Yf33ۡjjf"L50Ly#>F,\u5{u h}GQ;;Ӈcb3|vOpjL8bRhpsP H)|ȧ{}Gien-缧?=çpmA񻲫7n׫|>VeWM+x#O^??~DU3rng=,n{zn;OJ [{n93q%#M55 lSPACv{b*w>Ǵ3,Z[j-6f+bUPυm>>MHjթb! A'+/lwlպr-$mL4UE2xcI^fY v_hN]]76^sdJL#i, AkTχ3QKS*{׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺDעm~Jxl_T˲tn?޽u߿u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺_{wꏾڻ[)D>8,[GmczM\~BurnvNzɕS5; x*tu_^VlvujM; #~/=3Sv$ fYEM4u_iGP S-OG#0u?zuߵp}E[C/EA=U,b5UjQE Q6V4~4t Gvv~yl_`e3%T_eN٭R-,X\e3ǐbCvim׸<|=-0-;7 ˜}øyPAWTI* Y)cPήA?é:ulݱ7fm?yqy E{Sh`Cqd0،Fd0pQS- c ^h-ٛףw/vok qMEU&\\.zǬEE62:kmoMe mN콥?\dw-># WZ6"A)2xMA_xX#CciPyj=׺ڿg;= ;?0]1|UwZl*ݓ65~yN#Cxr5y@j=޸_ ٙ-MӛOדN˸jr]WG_,4*:(('Ou[=]{[cfUZóV;jc 4fଟE$3}׺D.qgW1aw4^ -smYn梬lN,+G_OY,Y'X7K\>-Lnu=͛T\gbuwࡏ#*h;е=-5Ouϥ\GGv35[v'mdw&]==䶥ELv:-4)"U, QGO"{t+ʳ_[ vjgb͖a|]ՁߝyTAg67, 52fyT ][|hϾ{r{1͘!-~}u%V,>aOg8֨M%L:b tF*gHkYyOE*nmF-FrpŸZ/ u8+ņ1Rh{ߎ4?񽥍ٿ"^Mhvڹܛv;ջ=4u),f`uu{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u^Q;u+'X|z[qݳܟzwV0w56ݝ[AܔGY (j*(S$`H{PoW\GevwuȊAMې!|^YJ`ZZj:=׺8+lvy^ܛWv~n~sognz qX'Ve%bI;KA @ZV{?;6Mݑ2Tn-vNw٘hqofbq "( YU ߺF'esۗem}GCNܸ V_|ݸmj"SF#* *c՝e{ovv6m7)(6L[jo=Mt6;1PmU*JtTA\Lcv'ivGw޵>\plxmcbNS'uiGr7&7wss|q{b3[SrvDݷ;xRԱ1_vתZ`t~Ѧ ';7~co=w^ZG{{9 0M[SKRfYj$Y j}׺Dc?*7fܽhwdw.Oemnh)m%cJk #>*/΅vi]q>7g񻪶m7q-ozN]19 Zw 9\ۊDy"R{yՙ[/w}}ve.l-Go6f+&7ds;}׷zy r q{klqTpVQ4X}$TPҥ$P^{tV|.ڝ׻:ϱWVoے`-F4;w37-b40~>))`vx^:9}׺yMƖ%6࿅P2=9zSbiw>ei4әV6u;xjk|nvmI Xv_C=лf̸)ܙ|IBT0KO⧍}tjwWibfJ}՞unLtT=Nc#ۮ;"jJ|:gG~S^؝}Ҏ티{O#Uj7`cpgj_Ȱ8^'ia -j'ȾGz/6F*m6\wdns7N3e1m.zY7>aqYƩeZY׺vnؘ$a6Vunh/zoFS1WOKMKI5=< N@{PFo'Q0<\ݗ6׺8׺gnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺMy Ttn2Sh2U1\=6ނ8z=5}콁\—,֑%5ˡo[aޟ>]S󛥡b)wb:8]tg[sڞm%t0?FM|cZn*?cW!xr,?ju[`yk\_$zOw4pc7+$(sO6rƌvR{md5+_.[׶WTz;\t=C*OMH#tautx A@++t *#N8/u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uO%E׺ؿe^X{^~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽t]QKCO%e\^jbSZI!T>-Sywp3P>>%|O=ۇ'Gmv*UCIKJ~ =W޷>M1GvlXЃUj0mAH_Ɉ?ˠ/KB)j:8W+?⫏q y%~y>C߸-HR|}>wG%6 @64?<\v2蟩q/bnw?Z.g$=Z%Gvpc& 8JPŐ8ٍ !NR{m\f+xZʞzA#P|)3y˞AjP5i=>]S S$r,k$R"ʞ}6׺u{&'dS8=+: FyT~)-,`Nj ?n_Yti{'Z%Ri)z/&g9* 0NY lZpܘTiضS*xFz-}ۋ1?!S\|-ZN~OjG7*W"瞿"s_zVaeFaҞ=4])ԟU:'}{;:SU$cHDwbH_Vd~ʊ vzۆ fxDuDE>rW;}G(n[Zں+ yn{6.dL?.?޽izߺ^׽u~{ߺ^׽u~{ߺ^׽tN[.'^ݾ׺8׺gnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~۸ޚu2Y ʄGCC+,-"y}K H$!EG߿yvObnlܓ.,YhICG w5q><1jI_s5-MwcL4XekSbyOr+}n|ݻ}RnܣOJΞVWO,?Bt!%`Jpf e' Vq+ B(8z..6:~ yF Δ`Cҍ{e&bt y}>[_<+iT>UTǠ?;{cf^PW5]G\o'gl&/Le445 ǒU 8#vcGז8<W΍Q_1;+Vn]Q4#FBD{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tO>z/=z/ԬHo/ߺF}ߺ]^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u\_OlِWBf鐪 Tih̿ +>Zj p?}Gˡ{ks)P` o =^t`:[Bu OvzuFsOY|t;-f1je+8Ii3(ϬM-u$sIk*}oL{.6& 1ۣeYV}D)>E9'-رpz+mgWm|+.O#a->'P3Gxr=lˏVMJMlRO@tז9x O,ut]x^xmW#ḘQ1c-YKv3eg@]:ֺ$(>z\ Sȏ">D:p׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u^Q;uOH]k};ߺFgߺ^w|=z뺄]#imY ^%%G|aTk$6{됷}qeƋ5hamkq"kA#/i̼'¾Lz>&rUFO1LMUUKURzIjK5|ܷMӘxnnҳĹ$&Ibj~g6lP)Fdt`eT`U!kȪy*.9r=8t.@ʋroЋ66b{kK*z3;(}>ۢ*WϪ;܃6ӘCWF16쪅X/r]lEƘ:^fn'iVm=F7ku޶*,ɧΐNj)匤ۑof;K;feK;]teYOI=~$曅%iJɼaַ^NJ]OG%V9ǩ)Tiq%. 1!YMA>I^HzP?z)]pIzįv@w_XN(x<GMO} 9w{{^׺u{{^׺u{{^\Nw}tq=ugnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~]e}y+{+#QLZe]'d^IPYC8G=ϕc݉g?:0p=ncgp.&d%BԏI9T-{/Ͷ<͈+9ϐҸTCduhl"pG|3e2ct8$2_~]gmT/y.7껆zw~ JVwDvtY.n{ee4ٜ+15rUb=5=dSIz䧢xccnnw#},M#E,%i 2; @cmo6kB@Ҡp N{j=v$s/?Sw.ߥl]}vnxm6v:JŌ62qښf}wplM.4;kW4 Nx`W~|fpFܵ}nP8ɲqFčq~`B{_3ڏe^֛fVBX(1_N4Xo:no > >]AyC@0:0r8u߿u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{EןT:={wWnyљ׽uK/7K7 29@%=.ZJp=\Ä2kH7*gWݭߝ/V̳[Mkx D!WS3ߔa탗A굨?1[%v];p{V*>[idqQcwo{stRnhr`UU k5[A bUG!jy% grڽÇqޟڱ)>"3#MH+BjWW z;۝K[!ğ>5x ώ?;h.s3gz/qۋud%Kl5Xetrn {E TbwTc}~-mr6ID(W"#mO NI_RA9{o'm՜M|8Y #;w켖C[eM]Nc44yl,&)OF" dx º֢'[ۍܗrpۥR 'hЦH-EAc!#:~vaܽ3SaagrwV; !?oqхS5=HH䗢S廽M&iSNf yK427y+"h^Wr&BƴFStWGQdn/PVEۆS$"`r^̪UV zݮɬE\>v,Jy} -- O˫:_yش}iF,'z(.GA21/?lWhk8l/P|ٷ휺ܟ ?ؤx?JGӟڪ)_/Njw?^u{{^׺u{{^׺uo|?{ߺGߺ_gnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺE~._gO϶w m;%ZǓ#`is{v>{q~8_YQ[I?v9ǓٸGAEr| ޔNr(s4 5^-0,/6exgO :ƛ݁C?@'f|m~ػ۲7V+Czn:Vj,KGJC!%fooᰰ4׊t*O~FReCϽ+/.'n%nZ&P\tk+OW++ \ UR#ol$ro- ZMU4xcO74rs bS56'63{[MžT1?esMǚrY,O+NEW!o*˴nK ]DH`'Ǭ Əv~{7=Y$Π $ljE?u9Óvա=0i_;]0Xs:EPK= 8OtsufNP=ĒhX ʚq:Expkھy o=fo.X䨒)7ci뚗ocuv*xos/(wG29?B1JXShB|j>g@!hV= 0KSG7~8T؇H,a!AlI}= vM7Q2)<ҔqÝqݝHP=>uQeQp ^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{EןT:={wWnyљ׽tYc(rh*hj*pE\Ad|l|˴ͿZ0 ?gto[; $_v6bY.٦1 JxbK o{pS{wIN.КF*GT+˟x.hکg`JbT:*knݩkvgQdhmlsRS>*xd}"RM=6޾ْv[ݻphjHi_%x&}JSp[Ϛ$>`y|cr0jRSQg9l7+D hrT@@R8e<"~xNbi/A@}((1AãsǷ +5ߓ6`ߕxM;fpa뚪\֗yh7_VceQRYEB M}sn6hMDۗһ}*8ҾXql?}*oZ+7L:ـGAT*Kwr7.<$):lswE6<U+q a{u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׬? p{ި:EOʯVa˰.On~+=u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~.wo~ >+twuϿu{{^@^|-:aU8J]:' 4pT.g(ݬFOXX,-~=PtwS;q٨j(s8Zjn\5lyvUAj<%OKU>*#bt|k=Ӻ7WVvjv JFYv'u )XPAij׺u{{^O'/;}) w~:lQ8 ɿ7M?_nبs͵F 7(W[ߺV9z~׺)?$vͯ)=M DXo`^VfOGlT9jIҎ9׺zø뷶;r㲸 jq&UiZIkLnFVZYO^Q׽u~{ߺ^׽u~{ߺ^׽u~|׿ou'ugnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺP* jd"Fib$^Y ,onnMzqz/ސڦjz󊬭W*3bKo2xz/by0}>1\m=Acˡ<T{H?cP.'L0Vݛ{+Í;kde*zcj4Sp}o oCgA\Wׅ }N#?Fqiǣ>7ȷv+jtUl~6@j`af*N>bWTյ2XVbI$[|iom?楓?1pǏ&7yfПE!yPa7JӏK$PMX?D23wŲ ˛3.?e~]7B^^oa`=iQVΝ*YHeeVVSpAr뗽{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uO%E׺ؿe^X{^~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽ui'wHYWX@~I>40@n. Q;Im6#5jC3ju/2q4ap8}}61C;Ԃ/HEdCnw@k}FZ E<*Q5G_;u/_U~GoEvЫwe]m]B< c$S7{X(H҇~5 .+V:~vo?;|`q~'fl)j[m3جJ>5I[_3'?nD^ڊY?".=V/p-[Gi GAm9Pa %~Vlk ʤZ۟<3%*VJ {k`=iQkHdDtedtWFV . sld A F#G@܃CǮ~׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^uί3;{^D]d_ۦctf}u~#7ڻUoJF,gAWt}.Mz*7jB%4T%E#Jco7=Az 7M;ߘ]6O&EwK)FE_oe3{Goⲋ<4ḻJ @h} W.?fz7^[Mڊah9`94xHFGKOb4n= PjAϬQ@Y&ȁ|YJꌸ R?#ߺZt_?/䟗73=صݛYMVݝm ao@[4[]-V{}rO"}>\~Μ:o[&yy!ĉqTdzʛ(?oA3}ݽwucgr&bjc`ww\tia|y*#cY"'Y#]Y.? LAZ0 |o~}{ߺ^׽u~{ߺ^׽tN[.'^ݾ׺8׺gnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~xnymWPFK'T/i$` u1Oorvoi9"wH=Nh:Gt$^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~ϞK^=u+-eR;[.ѸAz~׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{ngzK"B*+fqOAǒiYPc>s=ٽuߚۭOz7[cEd?~CT]؝]#3D-0i˺ګ6"D%ԭ*kǬlyck+_av1@+\@DlDh!:#$褂\SUG8}Ԁ=TS?П B>ݼ׺fۋ 6#mm<&_q,RN،Lc#R$)YqiSe'k6}x gtEm*ێ-|p?al]~}ac5.I娤1 ΌDɤ1եlOg?6؏Zi閼kI+?*tl:W`um:Sd*7Zebm#a&,Ԓh:? r'd>~7= =Օ9Z߉[4@Ns9Ժ(۷ BRt?tb7n$|NsOwʱ̚%t̑ho<?:5kV⤁Ujy#ݶݗt~( bEX8+:-{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^"*?_g|vЉ+M{^^^ßeq*Fx%Ү(i5{ TFs!ݘsnp?fO@v)Mkz"53TKWUNRbS;m=F~Mb!Jd f5]>}8E;A"_m:V[ۜEzN)J윆c%lWTOWK3ӸraFG{y-_Y`jQ=k/|$XUH7}}Ŕ=:UeuGzߺ^׽u~{ߺ^׽tN[.'^ݾ׺8׺gnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~i장cv^{ ܸ|m>> aMH ߗUxyOٻ_;kw^bWIU*[\@Pux)#)!)QcsMOy[{K 2*>`<|>n{gcd^!JLmOjû"nU{5LKb88fAMCL]%^FDRv{m|iʳǷ\5_ [+luU/P=sUW_uٵ>C*!b ډ̊!oǿd)d䫳WZ1%~DӮt(/ >j*: u{{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^<dcߺR^#~~w{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺-%)]I?3T[FV(>.<‚:wC-eTR7\[w!켯yy4z[{QiH\I%D D!nowvܮ-XjA_>`qՃRt:h橷jl}OKz7v* ڹ6&H#_e]8ys#qY[y/]m1=F&B1 L]dQfwc@%ZpӢr> vVY~*ΏEn\nVO:J~XRubk|yHٝj=cVxjd )v籇[7Zv0LsV"::'#Oc{ޭ7dU}N^5\;evXGrG1v-]IQd2y ҚFA b8` ϳn;ggp7Ј8` ?#w{UDAx:صs[?gL.x_52uTпbia:o>=9{dm-:YԵ: |Wv~~;zx[6З7L*)gV`ɨH?QmW>oL\ʖ{|"jE;܊E :Չ>dO>N|v]zqm uQo9ٶlm-Qylkxir\6{9%5ݮQTӣso[YQd eO"AgkbX},/ǧDUzzx:˜a1_U):6X~rǎ- [YNkp_uhQ(H@nA*p'H!~Ί[Q r֣ZVzY~2j?BT%\wͿ3Ms2ZnM"CN$'̞'}Ntc{7[f'}dGtr$/ TINA;^2z @ݿxue V-ޕĒ EH43jУb2+ 'ܹfQFX umU52+[@%kz4쮷K N,bPF$hP`}Lu1'h!~β{V׺u{{^׺uo|?{ߺGߺ_gnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~z{^F->~ynYUtd)RUJkQ\MSVg.h\E^}}_0Zp ➠O_3ԃʞs(VBrZT>)l l>[(iEf9 N\1x2hYVf`X5w_6%rKR.4N{_;k?^#ǟ7AGnG0 Ĕ۟ PѷuڎͲ̎P?ɏˡUܮ+|2T`6#rj+w6=~}KD&}}w]ͽk_ kM~|zDv? /:o|y >]>œzbuvőڝulhq&I]D^j)fOM`/%e]R? ztKJlv9\0+WSV] =Mj@O pe]rʄo}H:FOϳ+oʶA硭{Q8gP6s3ss.J0V Xt~׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^|_?z_ͱ{Yo/ v_u׿u׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~5fs8q8l]VG+Sx} &%_VEgi]Q>N_4_2qM˯()6TB207[tT"E;"v@ØpKq%>W QN9{_\g{eUN5Pp*IRAzr]VAQV~D yW{^gi\ZNiz/4KS[tfNP߬<%ⵥv)Rg:GS\l VV~fNK BU\=M<:2[#S;KA}\-}-&Blg!ASR0#2XyCa)S43{%)X~nԯ?ϣߩci˙qrUbB@#_jgm/wR3F <)A ͼڷ{F~@^5(s+׮^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{EןT:={wWnyљ}u.Bja⨧MÑQLmP5:b{{{smtV=h֌;;NW%2\M-l:W oWBj1U}A&?3½GdAP"HraϿ9kE5lǧ?]Zl' BN,0~=;Y(~x/Kl75y|3[6Ħ1Q=E}Jzʀ>.>8<n{@pVVnclj'=*z[EK_K5l0TTS΂Hdtab-QK6Pkt[[k 0M,{G.ANW%4w7K[UDo4۹Є ?n~k M&.dYZ0㉊7=nonx뼫]-`jdrߺEe1]7_~;ղkd|[/YTT &},FeQu^ꝧ؝s{3f`).mmm63B+TT 4SQ)ifYfs*uytި׺u`~~DǠ߶:ewVuŜ5%J5U^/3#;[=xe\QVRQKQK( S]:W|W/YC9aWGԔ/TY>QQ"Rc{I͖đi|%!_A^{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^|_?z_ͱ{Yo/ v_u׿u׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tV{/nާꍯZfmYCOf?bAX:e{׺G>1_%E>`n_kWPVA;Z*6V[+Ju$+(v#_~DEETEUTPUUE~uXOz ={{zxxfHDxhXT1 8<{^sn[fI{W+^fGEHjg/뼵d8d]Yb^CP˺ Stw=u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tKkZأv)VM+/ll.Sl{]Kem_7{6jMj>Krv/?^#'buJrv/?^׿GoN'z{|_׿GoN'{{|_׿GoN'~{_ïOcA׺-yؿ$;;{Oc׺-yؿ$;;{Oc׺-yؿ$;;{Oc׺-yؿ$;;{Oc׺-yؿ$;;{Oc׺mo}wW>W= Nѩ~m2]x',]6J zmxgnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^FUۯ-6]ܸyvHYp;ҕS0w_cRՊ'kb".jJJW5{tֿ){wO 5wk'huJ/nηURm7j+9jDqtj=u~{ߺ^׽u~ݱ+vNS,FI)jygVڹsWb⊷:ZXY}t]zXo|WYO,*񖖗ҵeFpEDc{H6_EOX}+{G]O^-4 I,>X&x55TZ$jTx[]YXu{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺uO%E׺ؿe^X{^~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tvxuHa(bÌzᶾ#{pH[d`!g2R(qtsˤ3j=׺.P%Im[(t}Z+yw3)fD[-Uã4mޖfS^οͫG:i`VӠyg ZXd3Z-=u}S-fBYjj$&IF,}׺}u~{ߺ^׽tY~Qu?*$N#zvJɣ(h&NWx߇o;QxS= }׺_-: eIkro-f쮺|jahId J^NXxfdE {td=u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^9,^oߺGߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽ugnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~Ex(bFYeqqyIi`=j4q~Ktii;SY%QgRLYssJOs3-X^yt:}!D#5. o:./ko#j{C>HVFA_ΕϬ7:JsijuVm o 6{U=jY2f~h0?#˵>y|_鮛huٯܹ:Jzݹ/_^cer5-:YTE"{/gmc (Pd&@-ؼCԊڵ_oi1"1/On zqmX_qf|v~K;͑"j#G1j띓O:kf}mu>3B+TT-u~{ߺ^׽u~{ߺ^)`7Į^ ]TRl~>}]n,>R?uࠣbNᣝqu%+iXU K0M:ҧ?"\ױXپbz=6QTJzlgVιJ LX|'m}ߘ&"x qJZt8ڽ] Pϖ: ZUowƼuT-&>wRu K8nGC8>H+ZGJJ?%9;^׬2'mN \K'_L~{hhmeކ80[oU\}mk2 hk ?s7+}ὒx[1GChe،+:<|ݍGZ}lR*@ pAsx GA/^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{yx6ǿue6/*Gk~׺7?^׺ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^if(i#5gI"F3X?$bYbq?֑Jm&)0ūAlXeW*K0s[I ۘA[gW:m~s[m2M#i?ˠGSmZ-m[iqhh,7*sV{"mVFA_ΕϮt7:Jsij7}׬.r8Lm6%\}vW~hhmO(-R Ul=hi(+2y$+jkx8ZIdfҊ `H;g92X^7R`|nBo"UO yTX^})a4äFkwY؏5;/+&+_YRA&RS43ǘSU"ͬKzVlv?Xf{#=Y64YQM/OG >;na16 <I9i]{{^׺u{{^׺u.u{W?;+t0[ aV|F+5BpU:IR0h"kI $<~?8nv[r S m{&<$~gUf(_Mcr7fG򻧫ܜ9 euOnO6j9+1LNW$S5L}>m-Thj$nHZh:]C {iϸc{ ;Қ.?p` 8Z]}Z wǦ}޹C|q}+q0.O.;gp9J(TQr?&}oXEO1={-E*yЃp?f:{n m\NJF5?N_R<*cŸqrM:oH=Oy_p`W~o>W˱{^Yp*I)0T&43z-T#ox>^ɼxxgcby"ҙYɾ#x64 ^#!AFHLq9UPQ,XzFTS$0En=sָtûN;[q}啦ۻKh`s+80[VI'I F*n=l{&Վ;D%qM{-$iE6˟/Ax xY!r{jAcp9ƫG&WEpj#Uö6.Q F"KڠFMŃޭ1aQ\hɾhkruh,1]-T`LO"JXmC${՞߸] `LK0ɫ[5 G<'-s p(`)_us[o=,FT NkM.%5dZHaYO`GskjNbٛ]Rxp?0jϬvF4yQҟ؇{ߺ^׽u~{ߺ^q=͙޹$xAG*d5.)rkFUEo/{ΛP>CZÛbE^V9WϪT^حjzLkbdIrcXRӮZđ 8ox~~ɻx_cb]*=G׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tO>z/=z/ԬHo/ߺF}ߺ]^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^?-޹H)ecqVT[/ܿp6oky2w :,o{Ƕ+PW类bOynHh"Y)0&5XjmmrZzUGM'Ky7]{ګ&+k")hIYɞr$[xֶ< $*TPkA4r؅K h_^5e>:u~@<ߐE[W材k|⤌|X3m6s^蘡 T|=+ا()׽~{ߺ^׽uX_$Un vs+םmX1C$"T|ح^; Do\eM:uUųs׶\Yi6mS]P[[W\PqjonkfB* "N5UWUY![3zڹ婩fs^-W,F-:&DvѬj0ZPì/7FBI7~x'kҊ#'O~S/30d?F1XrI#w'C~ M֒Swli4tYy)"аC,l{n}mWwqRJ"z1_,'8uhUf7nf;"hsU<{ks*%4:hL͊j4ft 5OT{۞w>6;cOԼ8=bZl9Ra^I'8SAc^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~j_tqu~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_gnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tVTugn,yJsP7|R42·ϼTc{_?E-Æ:.Vh ŹSo LL* hP$KAR?KXq0]]} G/2;v~[oe7Nz\FS tTw>êL,,.%4dX:̌|;^Jjio"{?FWكo/c*w;~^aK{kj>ʔ/Z?*C`j'h>9 m۴v;}}0iaG<^(Li&#y.=νvf1mo틯.uu.QSx'w-,YǚLjmkݮ6"?mAVDb @4*۳WXTJ[^yQ?ܡ ws<{cUÐz]?ܹNߛl7nu6S Kv;' .q`/1mScq+rS}=7ϝy.ͧ滆2xm_ҫ!,ah&=xֶP]PMݟP qa%'JS9['Sߛnl>#oo8nnLU+?⧅OR$=lt^hƫK;;}K z]^1[E52V!mfQff9 i@8 u^r/NZ>O]<6NwqQn~UK3oi0=Ƿ3l&FaiyVhd#{aipR/g,pUĻݻ"E{iP/֔ Ucnvӵ=ث4ƚlfT/>ϐ˶w{cWm}ߵx][{=sUP$y*Ivd,I,8!٣s=vא[)SpoemrK((VܶlUJPsqLGrxENG)JZ HzXF}~$o6]˘;=nFƧS 7-k;B<}:U}}/gdgl' VT&BIѩc*Ol.K 0$?ړN[4ҷlt?[-QQg{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^|_?z_ͱ{Yo/ v_u׿u׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^j7n<oQVPܧ}zVL] Y ݻZ~q䫍M[U gGV\6m<&[^Ȅʯ0$:cHBH6훿;KW(&/-|"8V׿gX]ۗw_vNٻ;wnl 2L(aNQ1\em9f%f!w}%FjjkXXɻyRKigv8bXNitNx:ٱn\UȌkO[_  )&f1yj2uUq$8xSٷ+K1|tF3ouy%T\f_Ԁ%B/wƤx'I=΂_n\LƛQ~n G_,Ur,N #T3"ʔG{˵{,6q ٪&/ۣh`sŖg!B%Aܭ7.Ldj>. vRd''FPBorl"ٶ}xض+CnB"z~] -;W$}_FzꝝL^=_ 5 2u4?R7Dr,{=f4K922%uxߓ}K/h? ?3 >t:^׽u~{ߺT7 s{'b󹌖{o—Pe*ڰ}<K)?=y_jڟu|S;nMJ]<_ :j@Y7?)ڋ:xiGȨ Ukn8] ,7.1Pw^/bbuteRbjixZ("'zys j&SqT3qTum$֥Hl mkNΟ߻'r}ӽ[abUD՝o>J&!]Z;p[M+M/s>϶.\nWŶC!{}œD i#sAySe]jm]TWW=]ϼzvm[m6G^jwl+u7,sN(P(*i$M5UM r&gpuԚ/-ZQdi,,FG<- /,[{[4^?g֣_+~Daq;ɨ;/:Ϩ(]WMۧ;q-ŷ6ᤨ DqDG[{> q{X4[7{sxnKVHe&%WS{b;`SV GZз׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~j_tqu~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_gnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺIݼVn6{;xtg/x<~E;CCΌ)w'kh_{7uJަjRo~aWvvtf۩vL2woH,^:er`tuU_ z:Ug QnNb5޵tMsѢVw^{}Ujr3K@<EK(owğ7_ݛ;o, CtÒɮӵ?t\?g}6r ZkWRݾщ9Wyݏ 7:B.Ou:_x\o,*m1x`UtU:Ҫ-VD!KM0iQby@?B)> >Q݊LJO:;}a}q԰m|>4U[.΍FR(Xc?5}練wn=XZIspvkӏ^8ҝ@\ϼw%|aG>ur8Os {{ߺ^׽u~{ߺ^V :-{RY \=*;nT5u2[%F'ZHہ }}}~fx^}vԇ~(gau\&#ODs xy6yu5:>^H6?]C[ vFwśR.>Χ]۾ذRQLc:vVl؛BCam|ܹ,fooTU6:7YtFH2@Q[Wiנ!ЪOoT~?|W^MJ5ۛ#tm4C-p+z)ӥOқlf_oKq*]]١CFW+VFqzh乧1ӛcqVv[>I..cvVB5xH;"&/t`QXj)Fӷgw_m}򕠞zw kQփ$d s_>O88;z/=z/ԬHo/ߺF}ߺ]^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{؟-:Gw m[J(Ou&/ڽ-'64UGFY* ^Λwj쟊{2Qw/yR)hf֦ۓ9 {z˦sj鳹-ӽW~ go-^v' -84Rb0t 1v 7@+(5R){<6ːmi~?otⅤjaA[#CJ0cn=u9 y]TsA}iT4}4]=J}jܐ4S<ӦC4ᆗX'eӣ~c֯y'ofrݟuC]m/wR< P'7{ݮO$QTV3^Xp?}{{^׺u{{^6^Y; bg=%l!8YBC"fHX~8rG)7,}Z?` ?5~Ͻn|pm|#5rYwn ,헠B}^(2B/E=\+ufpkt?_xр;EZqSˆ~ދW7vP;.=vu^69/rxۻ͓߅8+{aPm!pG/|Ф/ˤ(]6kG㸍ڿ޿F/mUnͳ_פdtaonȥ͍6v%g=->QcCzMMdZVUa]w羛txҕifKD`*3.#C_VCtj6/ \<%VhDjOߐrm₦eKB<1/)>NE"cs>[< :|X=V?M5>N,YnY9,ǖ$>yoyo>$䱧bOϨs7#ē^':S[؜`Pt߽{{^׺u{{^׺u{{^׺u{{^׺u{{^Rd/7{{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺gnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^,FEU4Ud+aC-EUeeK,qF ;6Mں7E`7 G"tF?h+40p6=VK &PF_3Ug7o[|VڳIH˹*|ɿ*^K>tn9{2MK=W]c0Unch!QĠߺFߺ^V{<^|-hG)C^=zAJ?Z =IPCí{ԯ{{^׺u{{^׺u{?{׬?mEA:Eo [e9̴{֨:3>:o?ǯXPR]lAlt\nM;jpb5f+p}Buc7Vxi)x\#ԙL]T0tJ c^L:iO.=ʝ{u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^9,^oߺGߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽ugnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u^n=aX[םub=_L>m|y7&W䴀s{_G]mWkLeEoȻ߹#3Eu]T[K6"nߺN 5]KAij>CuqTc OCjjm*X؍G{mGGG*Z::H"PS#DPQ8׺{{^׺u{{^WϏ>fGec:۝uٝ?׹'sdhen^V`6uvi+#hxy׺7>F=|vWQ(m]n N3:s5Q3OAKjpQ%jeW(Z2Cuo~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~VfUgXgGvO1ܹ{sU;siG>ݡKP`zGC #ߺF/e?>=oMRl^3pbvb}4ۚJʎPeߺCu{[ߺD||hmϛ폌[{7=US;RQH65z~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tO>z/=z/ԬHo/ߺF}ߺ]^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺9&߀?>׺*[WPr;/t\]Gdv7@aWgV15.56ۮ,s..,N~'S #?l'l>LuwlKVT0%t뎏/U~/wKl K_}LvgD7-CHHEtd׽u~{ߺ^׽u]CC|VEۛbcov?[v_OlWTY~_Wk6ajO2-P bt;|>-?,?lh;7r8n^/'lZzw5 LK_MQLdN=лnc~|&m XLs{2i>{/|i%=:io>yHH,rPZ n7#Nґ2fߺFi pt;cfmͿ.px:>"8i[hߺJO~{ߺ^׽u~{ߺ^Y(ic4gI"F.'ye( ZDtn_+̴] J L+LRL?y?d9$}>pH父ax־kw[}FGIQT1/?n\ClV~;v&^-ô[S3FBW)o7C%|-xDCD BW3>-m蟍.rc6HVLdR5mU g-=}R[S!iff$O,~wYe"Z7y?v[[|Q)x6|u.1÷ޭp 8́%ZV<O_"hc+et#b~zo<\l$WTS#E@ ]^׺u{{^׺u{{^龮Xi!jaMR3qDy$!@ԟhn73ζ*edgKp|=e%TڀbCa ϼ߱̐Jb:~oHGZǨs=8Na?ݻ&g#؛onΝ;sl6JEhdLUT2SoqޅMsx+2Wĵ q kq(П|A?~4t7ƍYqg:du DRS#>ET|>BTT9iff$OX}Kyi5,ZW&bEk=R؏pS[[貏? ;oտ A[VqąEEʟxey ;1\*VYMZ ?`=w@-qڥA뤑E@ qUԩVPU\G_sx1?~׺u^ͪ/v?t` m.V:UGgqdnmqrAe(ژ* ^U_.]ߒ&?RwOqI f*G=W^Tb2XzA '@2uBNx{W6[k7~j2eA[|mmQNchdWTIB|ߴ]1M (j$a/9ckE?:ILbuÛ5&רE6,' n_O\^];UC?`ĻZkq_#(?]Q|%fR[ZwA3JOowyk5,dO%nyV4@} k/MJ|.TKbmdZl܋>ژ6d#SjGh,~Λ.w Dj?5lExåVV .8 DWzC;Y}ֺu{{^׺u{{^׺u{{^׺uO%E׺ؿe^X{^~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^3soM~unL&ާ*]d(L~sY`dnM~mܭ6>sH}=mMB0>r%w gnR'Mܽ?wG?{.~Cfi|<?b2A}vo?Fw 8_A$4W>$ۚ8Gj_sx("ff>9grB>+IVPΌo럤ܭ͇U_A󷩛qe0jtl`{ wܸ=E>s?H-MuCKQJg}#nC0?ATl(p}{D M~x=ev1^(i_'s}|# _Z;gDStW;C׺5_jmmZ[~ڶ 1ɚ XXib7~:7cޤqx|8t4Me9IQU!ŌLLSUm(h;dVŻI#SEQOQ7\{{le j2R~keQZǏCOOnrc}%ԛ7bTUIe7;n]RdrWyyKOk˛a_K)~Gbz߰ڮ~#y>}Xޣf8p[oT.pV&H矢aoEeڟ:Gʿ6m֕mEE>ކ`ʬe 7pG hAE>Gtϟ\ۯu~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uCϷvvμsٖYҋ^v}^%p`w절LMDODI?/?76sеvbLNN#5(cJͤ}'-_,seg|WU(Z3S:_mۦsٰpTJbZg]w{{^׺u{{^׺u{{^׺u{{^׺'=;e?Կ?^{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺ugnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^m]꽙޹$Djry*u>5K#X𫩏 }{{K75"p>CY}ǜ9c^CO?,{v?kֻn X0W,xJXKM =Zđ >&xֻ_cf*ҙ'lyW-|K;_@(]b}xOH%+xᐠ]WHبQ~nE`?hH*QO," ?\v6pzvl-ɹO4x&Ly<{Ď"FVldwel>__pJ ,pӤ{]n ׃s>f7f۹0.'m(i3"l>9pCO>s_sO ڜ%'G=<Ӧk /E1"=.%+i|;w>J'\|fS^ Khj5DTUU92yq5&e9?b~I5׺/=,TNKjD XsV6;m$QJrX__嵾 UCutݕ-7L{}pqd4tM楎s%dڹb-뵽P}99K }Q%OȌc|g%׺u{{^׺u{{^8fo\J<\j T5.)m\kFQs‹O/qOi*7#k7o6=U4?g,{?ks٩pA\Wp5׳&ܸ7YJ]%76)zWe$wX)GVT6U&{[2o6;'/d&(=$ܦp4>O;nlɳT+~oq?fvږ vi$cb\j"Wڛdjp5駞VRQ\FNo{3\P`rO=1:Z\ }AgV"&NC&{-͞ݻ\`6lKȠW{Z&)"F-sۂ}Hzn&'qaEV+5奬ZkCʰ2U#rovi^aٛ]Rxp?0ju7{ez(F>])}:K׽u~{ߺ^׽u~8ٕ{#:cxɔM<0cEWi(=>{{~ ԱZY$AG'Yɜi~3GrjVS/B\mjCbi}n]C~<>V1K@gR28y>ۭXmV£5BzZ_:W[X.vmQ4|B?gKczH߅k5s#A6BUHV5(aRJco0a.vWe u|' k7;mo]R]UM'aퟒݑuQUݖla*棌ӆ)%\~#Az~vְݝlKvZ:n(JqRYr&ۇpnc"h8W^ihRGyeMN#,IS,,I$Oby@\Ni5>]IhbEYO$pyOvVC:W? m~,OGqT?x ׶ۧ9jJ]qmݹPgGMtc1ːxѼ_m ۶Z;>;Q3..=֋MIypz2O1jI6bZt\ :IK= ֎/{o=ok;vZKfr1-f}KW's>0 RX0ZA`obm,;639F1,CYARUxꔟSۮ}>siz*3R£KTWΕ`0ܹ\움84?a?KcEzu{{^׺u{{^׺u{{^׺'=?l{^V[bv]{p>a{u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~W?ym랺*l4ɹ(%\"xqe}ȌDaQy?-,xvqփ9!e16 z>'Ӫe2r9C5gyr53U&NYp?&w{oI-MI٪NkF''Ymm[^ЂjE\ iP1dxA`}H4`yKHX~GWqXpJ#rnTmM?SA:]Q3]ȱbjUr'jک tE 4`NMv7ՖdI-@>u8HWxue>Ouŕكف ȸjZ_oY<O]WoϺ#9fxl^l ǽr_'jU2UW |20SVQHuLOԃ( mNpdo@*ʤPH)gհH??Ji{`Ee4-_WhYj%S1탭,(#(>$vWCqY9.tqKJ)u~r9mw oJ׏W;7.'z.T}'7PJnj#G2GS`Gr6l6Ѳַʬ+I1 mϹ\4>X8' u~}{ߺ^׽u~{ߺ^׽u~{ߺUSdeg뾼} [e*:Zj}ONiKM"Rs{v˩ 6v9*j~~~h%B]w U~qᦝTcqFrU KAAIMQSQ+X7'ɲDEl/Z6nZ@:t//6#D*'yvm^ >C}q-\=eT01e9:Om.&d5:&&s7.hҷJz"u{{^׺u{{^׺+?*3؝I_CJ%Eg ya?!WӨS{3{ruW%~cKpié/Ni~wq?*c-:|ZH9#trE,ob>|o~`89az}Yս[s`#g II7tl9]v۴uq]odҒ~~]vJcF]-:gQ{wrAcr;;= Y_ `),jHѤ-xԷ*Q4 j3ՃQtܢW3_Tvfnq;|dwNb7>#-3cp4qb(y!d/ 4kݽ6lqiDq3ZM+Dո7v dГ$k5ʼnƕ'U|]O_e);3y&T;45QrZjY]hr[&D5D|rsٶ\F3#¶[mRֺ.ILˠrS^Os_0,o6'3$ 4j)#kw[ @< q*׏::p9O6}mo|JA检>b0z;V<]GvFkwmϔyW.ڋun~l% f"Rdxdb#IQ?9lyoa9$ bm"{y<__Otyf&E,jܶoz-d7SOcugZS/[zbvKO#ݭ۫_*k0 $1cK[6߽YI&xeMI_iagY/Vn^RCI8(ckrبHVnvmi rC$N=ܻGw؜Gc䱽Pm I [~H2r918j=SŎǪU=Cy*M|Ƕ{O;p7qb #WZ"ƶ=[ vlE2}<~ڍcpc5{/3gvQn (!V =EF(}=]:{{^׺u{{^׺u{{^׺'=?l{^V[bv]{p>a{u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~R_.Yڨ'o|.WC59O.K,ㅚDgR8i̜&̛sv$h>]dzgK-esv'O(=0~~}W6A hj [7'AOvon87ʃcc3Y=BҚ\ bj⩎_2{%{{GElCQ)RK թȅԦ>td{kֵ Ӣ9;?kݓtf:x_b Ay6&*/3g&9SC,qBshow9ӗ^֗[FCY|=gK@8B@Vm>}nu3WMHPȯCɞ'wo;do~}&ݩՇm-\HgxL kw\yȄ,{zڥAo弱Qdq)O9]q)m4ŗ:myfgȓOA.WudV1(7vIUcsۂ,\F?>pUD:dx֢}}.YΌ1HuYԩ:_rF#^b>6Q#8^S`2e5ֻ[뎨뮿gVv^Фuuih'zV/,Xq_`y-}M8•44` Hfc NңGVQ𧮳ƏOuc5곸ǎά\z2*xyCٍӖ9g7Cx^ jIԇg3r;V`cfG=RC` :Ymim]ӹ1?poZz{#̾ާm)qP _z$0"Ӑ^ZHBZxO^ʌdyC!K2w1 sn߻ B5C?qk(r`.?07sVe78>ݝv~]o6 4#_ȰhZxc0Ƹſ786inl!mmѠk"{a$iB#w5c&6Ȓw3dMNN@8*qzGeW_&O 4mڛpSo쾻ءDՓWxmtUNH3#F=XAVo6"SDm"4 U`Ʊ5X>c~6$h2N@tߐ#2#{arۢ9o\W|1e1SN՛#]<<2H%cܟy9}YKHB"ȶ}q9*.UJ@;*nO6˻u,q5$,c5*%[KRTWd+JZ**XzXFC w,';NY;%w&"q~Xw}eahw-FI<ӫ轑_םOvZDl3'EfFLE$R"3$=}߹g6>MܫZ[3H Vrdew4:^׽u~{ߺ^׽u~{ߺ^)|`]+orX,.3F >*{żN䕰;kj "G˴P6ۼe?ݹ%i#yzWWɬ>;m*h G0ۊJ]E1^i .F,MduPC╤Hskݶ8o7 gZD-Į5kG2!BjP ̫{.%BIkZ׈ʀpDKwKvM_w6w%Vo;%Xu{S|m[Og21)ूjibjT)ݾucmAm k -,M0Io;ixA E!nV76yhu3WMDr~ KS'֝u]_?uffn~iS25T!1wn5-=r<5ut{[׺u{{^׺u{{^׺u{{^׺'=;e?Կ?^{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺ugnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^Nk7۸w!Ab課Y\VbWAQM+(T>?>N~a_03u+i},m޼ܘj~ZS%hҢ`?:3l@XY<\\!ƒv~,p5R|zv7Ǿꭕ;xmx6~۹ٹ23&Ԙ, ,\$"c"l'['܃l4ŲہЦnЖCt{UN]FTWn\0jI}>7]UZ UENuSbj|59b)AVz=GS* O Ai曥{ fM*,L)f,8Ǘ@%;?7j*z;_:'l ٙhwa![*PF1Ӣ)y=jc1%S]J5ѯZ(JP7s4sݮGjS:J]w}{{^׺u{{^׺u{?mT>?>N/i^Қ/UnYhh櫘p)@TvA!yYw73zzOnullu S&~̏AuF6lh` oQPUmݺ^bvv决'/nO=gnQiipR`O{ircg-gON=i׵}6)7&_:2:{mu~=v<[CaܹL~kzMrrc&hᑒ(,Qs*9]ڜ1}?O y)O|=aJ}\!sqPMLnL"F4eҚY^OޝRmy8G=z~=iSsl uG&x,-6S)jU4SB>Py f)ZXzS,g'nSb& #zǩ+rۈDWɸ*:/ alXyگgyZ ·UkQO}s:sҞHJ+aG=G\uՇ퇽PVQ׺/ӭ{k]v>?p,B(&A5^*^9{mm>rp܊z{s$(Rʃ(7K 5MbbSVa+@D3Rcc9Cr0%8}r4߬MO -S7+4.:-][Aq5ml$s1Xј(k >xQ6x/Z-X'׏Ck}vvWƞck=;oaw^ %h=Í3H4N4Z,qreq~ҵh^=xT]OݷUXMq59ĶhBN6,K"R4DN^ERJ0\ytvsK%}1W< Jceb=XҿOBCxSؙ? eL[gr뎣I1H\aZ*j eWh{="rrܗqr3)@5<: t /jB?T?뗽{{^׺u{{^׺u{{^׺uO%E׺ؿe^X{^~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺEorТ_;{S>譗ϴұL lS<iCj7JFHj8kGf;'3٭uPDҪi)^ۆޭrcaIzDl|$}G;}9jztY ǩ8aMyid'<P5% u+?w*n*wkwv\|)9r#}*h/E1qS%2 # m}I%JVq&t'x˽=F_x  x|-~\|?ǥVJQƞDSt'lVXAUgm>g mm۝mjd5^"9tX 4R%F/3A|ї{r^0h5玅7NM݉ܕ'fRmso/?=vsŎ?/DgE#-b/ie-*DvMO)sU2UF-q'}HnqmZ ?=Cϸkb<6|Esqe&' b X)(()⥤EC (׋$ѳޛVA`HQTAEPyy>1bI'ԓ׳aæu{{^׺u{{^?{O^zt[{O/Xr8p{U-ۯ ]Dp`6j=v8>ս}~p۹gM G͔ |EkzO.t :H_ˢ[oyyp u*?;µ0c.=7wwl^'+o[ q̅f•]NO3elʥH L懎F1n5imsquqbݸL]S9C3WJ*YM)y>xMB1 qCt{xHi T*j>GЏN%ڸ]p?K'C=,uܒNujۛpoGpOu [3/$T4t5X TuI"Mrg 40 d}6ɵVcT?ώmԩ[w))&muJDTߔoV^7ki{tsNn9Kڣ8gӡ@ Ac9z}뗽{{^׺u{{^׺u{{^/xb*{+MN?#O9$~W[2AkyWf;3Z-d(jUʫCݿq6Žh|Џyz_6BIum)Ei7Y8k%LiĞS>-o~ͲHI> ړSZ0+Ov,_)QiZcs|) t(iz1I(3J9<ŗ ?Qߍښ>|>}Ix.IG^*#SOGyQBWad-q3  {fpMyW.Q;WF*+ p~]~W3ϣ0`<_<+= oՒ1{v7?k_:}_ucnmܑow{vnOP^w/!ZFZ^QOJ}۰:ګno<6occ;(22uɡZLZguVL4)=nj_t۽obێ3 5:̛N_Xsj(X<5V\V dvYd爺a7]"c%m,ah H +g˲m<ӲCqǯzn7pK1$N[gzdP׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tNzw~2׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~gnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺE_R`6^~JEl\lz*\FŊ#5W{>'h2*CZejc:غ{^%Ş\}]Õ%)+vBl略eg74}7rWߺGL"UUUUP@U*yu SJxT~wq㷬G݈Zՠ4пQ׈%<:^@x~{ߺ^׽u~{ߺ^׽u~{ߺ^Va@(0:ˢ-q*iKkD嚃{oRm~"sW쿋d2AxUNH?:@?:O{>ŝ?۫/2uWǟqB%>'~8%,e ӏP}ǽǮu~{ߺ^׽u~{ߺ^׽u֕~ @?PJZtAߺO^ި+Zgu߽u^׽u~{ߺ^׽u~{ߺ^V.:s|M>3kgmq~.c;Y%}\[ߊ+ר:SוY?F%뷮`]ػ#>?竲9R=>m#1֨=:\_߈^ =ؾ۸u6YoQv}{*9(PAShhjJ \>iFLGx7F>loe}ASS.IOc+2!sZ5 Du9xFcߺ^׽u~{ߺ^׽u~{ߺ^׽u~uap֨:ނ@=z1íTP0+aoP:H<ߺ?~=ztv*F6sfv֧dw?\mfI,]^ 1M[UPIݽM' (N>8Ru6ٮ4ZXO]75n-kꞮ6{tqۻ K7g9AO=`sXڵK_^Jzd[2K }t{{^׺u{{^׺u{{^׺u{sӿX?3Kx߿u7u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^gnA{^믏!:CYG{ߺ^׽u~{ߺ^׽u~{ߺ^׽txuHh3="ĜxmMAE}gCC峙2%p:t\۟$>J[ҷrR FMv=ݝ|vޖbQ́ݯWWެ6a%7uGZuvGi^Ӡyg`(RkjHzNK[J ydu׺u{m*~>|[I? C մ]םu]({sa-Fb&4az&O":kWQ^ԛrjo5&bva#RT2C]GQOhBYH'{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺD;s f]`7#M$Tۣudikv#TQ%>!׺<onv v/w`0Hql1،N6$T 1(U@Xu=u~[[suJ O%f*R,[g+/Ed)rxƺz!yO~ICL:{fSN~2xt]s] l;K6AqFN{{{^׺u{{^׺u{{^׺>-!,~3:ϴY,Mՙi0B*ĥ0}ώ6{W_K|齥/:u&Rmo%&fl'߰=KGPO_ISNd0fBPߺCǿu{{^׺u{{^!~5Wl|,WW+69GSn E.mPU-\}\+#A1_)tظڛGaln9%fv^A63MJe%x! Gߺ^׭^OYs{seF_||]gBw^J` UWbS$NE[tC 0iZ#ҷ~Law哪keO(h=YKVDk7wPZ ߂R޺fA2چu߿u{{^׺u{{^׺u{{^|_?z_ͱ{Yo/ v_u׿u׽u~{ߺ^׽u~{ߺ^׽uśM$?׺';^nMs-yXtQI}K R䩝6:Llm+Ӗ  7O&gIΩ3^'QAь| u*Б {tmm6'_~w{{^׺e7S;gN~Wh: Fr}A;'fu9%UT̰hehpo{~׺u{{^׺u{{^׺u{{^p_#'G=z767jl=]R uWRێ epD.Y@ǿu׽t\;*z`Xˑu7bI-e 퇾MH!ވ+ L>Kv 7IukVi'Vg24v_B")F[3]lGUGOф׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽uK[/{|y|yMoDܲZn{f$Z'ZIMut}u߿u{{^no9O{j/V.l^-UNie*AsIr^T_u6j w^'h|Cݽ2ٮ ?HSciCu=F&(?~{ߺ^׽u~{ߺ^׽u~{ߺ^׽tNzw~2׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~gnA{^믏!:CYG{ߺ^׽u~{ߺQ8ieeH""gfd(MZDM//F J mDeٿIxd!~z;vc@c:oU+#SUWiL9Z?۫VI _q%j{3[GC=ֿMn+em YiteI&gqATFf6{[}~wm{a )YZOL'XLU~o9g)vL6.2YL=~&uJ/{7V Hf`{nKSwM-1aFnS'EOBtYhĶt*b_#U%;G3MC;ójh݉_z YjjwTͮьߺ^׽uYc6V #<;DU,R},E A ܿ"ciik" d>jHb,oAs7>H_޹ݘ8a>l7o@i=St^jr}oTc([amW2 xxtY!{/@?+.Ijm 3 /R+J=O۲ryfgjW+qٚDӓ=}JM[R奕I>ް}v=?9VM%.֐貯F??[[w!T@ܶ P9_Ogy&N]+ jJPÊY&?xd~{;vc@:OO.{_|<kOAEW^kE5]۬ $ۯz=^Sxm EeZt'~xB6Ln UBlι-vFfϓzU(c,#[~o`yvܧ޹7r)74 W4=ϱ^m<;_&~^v}w:z+ig6FMjb՜NIR]źfh*w B(cW&[ٞwa Jڸ.Dlsʝw~L_oca$u8,󨨡[Q=˜1gu~FDHI""3y,x~IĒG&nZTu{n *|vWx`_2_^\:iupc+GAQ۵Αd&i<0}}y~MՍ'}1TO. g{mTΞH+εo]Q n:!A֮4fHeu ԯ]y.hOvzWz{ +eWʵm|ړLUn*MLͻ{m{a )߱Z.Rd;{v#~l(29XU>^WxyO}9>΀&~v#\~QOs t~{ߺ^׽u~A*hD$1BV h9,(VeEF'd n-L;Q_IlRѣĤ7?p6}7ew~~k~}FGIuNVomrcMU*1T}nM*QM{."fB Iղx p?a=W*+ZOFec2m}43m:L^EKTk澡K31$}zrMկղi^9x^{%{H+%_?J};Ĥ8.۵n=4ˊcp4<8P}ܩ\yRcne΂H+w>psSF=J?h^T`mb8#i{{^׺# IGsII@~ V+['^ 5e[( sgrx\Vd 745[o[G$s$ %h?i?U÷_? ~LX䳙ܝK߫]X'"bhsHq{roƻ˒+覡X4^{ )Q^"~#TV7_+UVf1{Sٵ튉+{sxK&*1suՔsrc u+>nb}Dm`$y ^wmwOoH0{oTUHZ ʷW16-&QbvnG w>syw.*1*\$:W^Ȝpz^xY C8*?6E `S^^KY=ֺu鞻 mOfj+ۣin* n -6S$l.C:Z|iu0=wr+n}~l-DC|ux6K;@WDj':TWSidMh{n/֬}W?/ՙ"I<řQǡHWʵm %>:dnJp5V팂4w6=Jsnu5%_?C>ޞ8۵N.1dW<cT9_ߏf6y~s~|oSq䎾eqEE>:? ?d1_u~{ߺ^׽tO>z/=z/ԬHo/ߺF}ߺ]^׺u{{^!Ty7oҕ.T@ ij3@}9yC#k-6>sJ#Vmvx5't>_tF(nΠl6)[ lU*^<g&wo5r?7H=l;FARI󇤵3ob?J=?7Oi9J?>Ͳ 옙d"=b"Md|1-W!4{2?7{~%^~TorkWϕE:n9<Ĵu=%@۸'9f@FYLMEs~޻-^yf-H8@[n;mܭ^R@T+zs3OWO*mʜgO>/`^J{VyopB>+YVU@ oMy8*aA'^׽u~{ߺ^׽u~$7N}Æ,&1Z%`\}y9G#k-v< ҄ϸXm{ k{>Q?ϗ[l$ 6*M Oyx\[_0+co,SC?gѭG?ˤ|/"MB]Oڑ ܒ#'' qN>i9?}k;߸l|8uEoadt/YoW;R':f&|xҝ4cGw[gg̖>($kϠǴYdd yFjG[cńܔ?8 e0نJV` ϹחyopCeY@֌h~Fpm_ms5{=蛡q=Xqs eq2@;b! TGK8^$?hGz_pv縧taS't;ńt&oqPWa @)~y˼˜i|Z^(Z3Sˍ:^n;}n6fSH~ޒu߿u{{^׺u{{^#vts6ń|&=\), @O0)rlS{އP uݟjO {PG%Ƞl6R آT+?x?}A[yg"G{g?PGf֣J>ey9kpB+UxVn;un6fSH03N׽t=r6޻?7/>&3Dq45-bIVX'KIdEVPgNPo_Poy ؽc׻ۯ; WNJ&oUe>LVik>zQiǺFc6.c}K_eqE>Bt}G)F%,br-jSC{:n|{mCsHq?F|Ȧ*8m7wx ?ϣyPGdȠl6R BԘV+~>w Ž,m]"_H'}AZ-Iq󇤵o8lR POǰJW?]Cz=-?9J?^ͲӍ12@;bb xRDa뗷|?1`Ӆ2C´ i=ۉYvtayrPg(AZVF#j[#0S ϼghZlPuZʲ њ:n[un6fގ @=*?޽|I~׺u{{^׺'=;e?Կ?^{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺ugnA{^믏!:CYG{ߺ^׽u~x^ٹ]2=1ie9,S|~6Qd`.xQ }{MW翶=Ocq`W/SyK}]ՒώkaIpKGDhCUIkj=~oƳڿpBfBM>}gO&]ʜkZDwPJ'cm 1& Ft܂F!O?R"\)e%\2}JtG}jui\rtY,XrHRm{I~dϭ-Wf7WfQUX 7]5ttu,Tyq=l~)ZyIQ><wk]4"хAy)-edw @ڏGLo.8swJ!}(?߱")w%i i ?_j6{M1yTorK&1/Ogyk-Mm?xsX 7t{Rx6GR$LTǕt=sLP?!-Ƕ DRhwdvd3s:6ih:%AnoT{oy_toWgѶ'h>΅Xy:7To$ '׈ |: J4XR6a{TZßx()@?DU+?VVbK}U{_֍A/A1bt=-[Ǻ400?iln"'tm`6boqlt˝dm,q0iu [A[쇜2vݦZvjӫz&{Ϡ4vqϣs_(WVRQekwv/5l\%6@I; ):T{ګ=}aM1y ov%Ӊ$LWÝ}p7;H]piA@3xӆ EJuBjJD3)Zԧn#p{fmwK[ A?>vn/E6*~D`^cgޓu~{ߺ^׽tvw`zgex8K(*\ScqYVcŸqϺlr]9(Gr,<ݿ{`gyK}߽ՒOkڸisJBK[\Tqwռ5F؝Vή}NHm~AA12JT4pɢĂ" >T1SԌW() 8%0kUTc X#\1AOQHmD7NM,g?:MX"Ii7l vovLm.} L,iқXk }H2M}DN~2ӴLA`ޠtYldƕ8ymkJ|{O37kzpA7mz4lTϧ?ٽ흖ޙ#Pb_,ENF=:7啕A<v<3'7 [DP*x#ZGUuī)(AB lTpiO: u iLX[բַ?ޚH0?io:R"'tmQ ZMr}i6X-tҗ ʶd#s|qD߻ZZv սh:C4/x,&!8ymkJ<}nzᆷ zRt,IgVc:W 3s7{fr7M6P+ؗN&V"F<-sCJrw;ݘ\VT^+3AMT)+奬ZCʰ2U#qys6h-yfoC)~`X;}cywKOȌzK׽u~}ٕ{) I(lZhXUM'B) oprq;n^!)fyիײz!PZ?Ă=եR*_BC8pQfWI,c#>* ܤT*im:UI..}%cZZ@0HV V)=RKWb\фQejw(ʙ @𺉋=oy!ޛe/mm#nfi`?Jf,i_*uǴvfoAUkN ?vN<>/1KTR#z^ʭ{oɶ| Tf+Uz}efF#yt7觤ݸ][=?a4+gƠG)%rƷaNt yb9잗e;z킯h?>/ؽWUOJkvZMdќl%dRD@>kOy}j 1&Z᧸RsQC&h:ξE6aoamL&HϋѥL"CiBUԠeEx=?|>r,EAJJT^Ov[\.vMRKCBGƇ##qoHȯAeo/X4:GOA iYP_rǀ}Ǿ{Yɷ r-<پl{`q]RgҬryʬ6v) j,JR1Wj"G,J*{wytݿݥX5t.p-:j׬jOZLË5A1KB SR sTOK,^C4ꨢ7'oVUމ'#ƞ=iʝs`JeaV}z|h %M.e 5 B-=<,U-V;ϱ/n#q,N=N0:MKkY^ jGVL9w&7f3H+kF09`W"{QoЏGg?G3S"[bPOkgxf闚K,*5gZNݻ4]Lqj]hyV}Gr3˶Dz[ *8=:ovG?" >^cGJb.u~{ߺ^<dcߺR^#~~w{{^׺u\T]M rF <8T HBI,Da ^y3{Q| g{zK֔Y /p4Np`<}+'r9G9fi+rUSսY,?ɭ~yS0Hv#/k{Ֆd@ Zf$^5Ėèy1qVmL12,"0Kh\}L)>6h܃s7>s?^KliT24aCQ|!6݃lj,?}\G5]j6n76S҅qc1aԭ,k`K [2}~{ g7߶P-ǨjqXrdv2iS !z:?<y\׽u^(~RevNVh`4ۋqT+&[RI$H0KO8{_j=!aA5 q%ˌkJWB{K$<.b:mS?/AVNS-UdsLw)PV䪧~oa,dXɍyS0Hv#5YmV΋cƋM*.tLvU[\GU6'}#`qFn#FksdRlLQroMcs`09ͥs9ZLfߵ^"-r(Q:䤠eLhǒ,L, y lY'+0PX30Q^${{g ?ۋhdcmlOoa`«U-$AEBFtJ*eͼ.׭PB.o&ͿX-9>lEz&jPϳ7pS\mVRҪIaU1jF@e'q+]ޯ,p Lu~{Y&Ih&M*x*!\ף>Ο%Pr:ߺ^׽u~{ߺU&Scg뾼wFqIT5q $$Ia \yS턩 e $qR2_i!xO0j`0qcr_.K;gr%nJzI0J]7k7ē$,519liUW:LKE*K#6$^= #&=6\ucy5F}#SRTs}G˦wNݨݵ1ҷl#JzmT1Ju[}ՔuT8cy"M36v(9#umJp{3y6kJW'm^ 9ON_qfuypDmٵk"$EhtV*G%pw/oBYJ l~̛k橸Y!T*iAɪyVH ޸6RK jezQU1jFK ],_tLDܓE`߬3[է }LM*rQ_0xz폠=o9W=Xap,IQ&%h)#"2{_'>J"}}((HhkR2 _i"戏0 j'?/>'V>W1UsLw)PVd{YV|zowNL;\Ԇb2sO.liD\ iU\ypu9Ut,iJO}G낣u>-G˦FݟwUlrRZ Aj49 pp4TRṖ7Rw`|=[u܆@ =è'iWΔ:`vx6gSfN_Pqx=asڵ1QfhҥMD E"2nTb[ӟ);, fE*K !MTL[5{k橸Yݝ #ɺіmw #VPiUaT qT@ȫeu%._}o}=?:~PoV#Mu߿u{C)rsu^K ;:h;XҠ`!-=:OCU+#5e>u}~e"E",aDP\N'i}n`>`OZgU}lQf76Kxi9CR"y#(r:nom9nIcH cRY|.v͛gّSh(iU\ypE2Z9U~dpI$FMɼCGQDwҺJYG_JP~}6t,֗koi4hnLƚJyʌ _ىwyշ]mLڟpm2ҕIkj:4Na0dqx=aP6C6B*,,5rQ $eei7R=lwN}w/nQfE( !MTt1&橸Yݝ Aqyn&cT-EFՔ:UXi 8)iiGUD GRYBeߺW޲4<`߬P9q@N?4bAɮw}64$c9Azc uT׽u~{ߺD~gڗ'y~o~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gnA{^믏!:CYG{ߺ^׽u~/=sۉ-vgn(5>2^L4tribA2rGJi7%Ye#ijh9Ö9;JjT>Y#ת\)JVVX"?*A盏|!+n>cupz~藵nݹvwOViʾ[] q;r+ dit5zccEx{{ܒ=k-쮟nuYeںHkYMY#wXK#Bvx]eJ4w"r( $f靣A{+s;, Nշ6;{o,#؉`lv -,=4l&1sVݺ߱[}2wX K0_2 dГ$i63;3ru$Vr-rͲ+I^Ozj*hO2hKQQ=Ua!۴s6d@KXTӨIX@XB^r/0]T}ҟMMLWƯk$+sPSm,|Vߟ%&;wdk;s9!Q(2邎Z`bI t2͏{ooa&&Č tfJϨ>#aA$>Z %bE)JZ<ӣd3 L%\S5'Ҵ߼0ErT |zA{îs}uq%BKɔZzHbQ,IP${Ͼ﹞ܭyeyXR<Ɩ4O,9c܍-nL2=~ީkL*Xtebܫ ?<{WP} ǟYw?joܛyǨ+quwU}6ڔnsqvǑ IpۧۤeAee.'[k]JfFB^i˽c҄N珳WxUFC'6VQ$H BF66nv{fۆ㸞N98~] wm;hItͬ=]v~JhS'Dr0C KJcS F>tKe-%j'Кu~qޓ{Qo>@`Wcܰ2+k{^׺u{s]u{q%`rt[ g)Cg/+YE{=E1pMl9cM-nT[uS d ^`̬Ք#xGVR ? #wQzݵkqPmPnJj*ؒnVեq[r &+xB e%~Ng93J{urOogt;+=,ߵ6],hQƬZ%N`{O ^YR'嘡@Hv]5WNCp37kE] w~KrL&!ÆvHVFɾl=o ͻ/mpik?܍]%'iaӥ2N+m\2MHbF4>@TӪw%ty]CYQ6nZn\L{Ǣw*U#W:4 VmՕuKx~ɒ`ym&0RqIJ璢%HaNs9;ݾH/gl`7 }B"H,'-#hrCu+r {Mn JMoǑ:?x}~Z*#5MUL#Hb;I<ۀ.M1gcجp7DDs cq *Ԓx=__L݁+g\9"W)Xc[/Cf=o2Y%MHcV ZuΎrޓ|Qnܕ_+:5]E_ERZ %Cqy2AErxybO:>Ͻ繾|yiwOXy4Л>hxq42ê dzJJfGVR#xU~x>gެTuN#:*;?}o]~*M>]Oi*{aQ&ۏېapTI_|uEx{kaj"M;rG 4Mgv^k^6<1ݼ}\nfٮH~aӥcdSڶpIr1#S V!Ay/G)z#ػ&}6n{sS?bjd|[޽7qTᢒ\{5U$<-4S3  jݒt&aFJn\_*z9l;c]?5E,5rHti:ogȝ-6݃GC.K9״,KAO%,R+咢%R[#󏳶|ZHt|4EYZ3H%PTC;ͷ[IJ*RCqLAA]b*+y (hi"ijeaCQܒIɲF5l=Y{nhjt7/vCn$*x}]1+vV쭟%a0Ő1?(&)Xc?]w&[&l,1%$綴'1UJݱ00z`Tt׺uO>Nv4;''SӫM=F*ki$,_Fx3y娍>9C0Fj鞦boko$"ޮ q*׏U16U& >E/pYp}:~胺i76ܛj|aݝm|mEL=eψ|Q|u>F#c#&C #olskcpv9شZP<6&9-2_6,ȥOPc~{m. wx4:?[սml{~Km6wjWGpTmd{ (qI[MҤ4Re}9{eAK w`UVC}IgnH}:}{na7f7_Sd(%}M,X?jP83}m{]<$&K#I E1zߺ\a{&] ~F8}gQ cdwfjjdOVb+cA?{ r>}w;%옼xR~9m=  }9c,7߂7>UEU44UU5Q--e%TM E-T pYH odݭl*pp3Clol~ŵ#dys_Jyתx]כ}vx t.-{cܿ݊- uL 5Vv IG̏we Yxi8ѡds3jY|H?P]Qs@5λ0O^Ŵ*4 <#΀8Yػò;whl[w`_cF-L 2AQ\i"j@x\c6໯+V%{|deev`nh=G#ﳨCl}o5n.Xޢ%"qm؈mExuU@@`Fɼ3ޗMN ֘5:}ݻ'rArAQblR8TkO 73KUi:⎫Q9ʼӴrt~3j%HiP"Jv6OޭnǻRW4@_a,EORM=DOOm,+噘xklӽ_FS8#-f}>Oz/-CSjZFcOL{ۀF#^}{{Y))y?l(4}scv,> (!V >T=PPyuW~Sk:)۫%fo xؘ?"TƟڐ+iG,=_pW'y+ӇROc㸚ZoLN#T22;":r9"7VRe?O<{7v?A|)uN&k;#w{pTVa;U*O Qq1=O_gbAUI㭚(gx9jYdDVz$<_k4iQĬ99xMSO;

    MI3YZ~MHf%$ i:{{@.aAa[:{{^|_?z_ͱ{Yo/ v_u׿u׽u~{ߺTs{+7&j l(M$Ջp4X>= 81ۙ9Gmco,/ j񢆈vB>\?oǸ_wZbH!XGt5"]4! W˶|pfI,m@3v5 >dOsoti{u<{Pm͵~Kn>ۛjqQfRT2SQQM8 dk]<^\l~$jc`I^*AuWa_V! >&[p8K 蝕n鮷3cjw\?\l VUٛ>mUaJf#$XP\V;ڹ=r8HŕJM_>mɶ͚nz`=@#&Qיc`%Juo}sì5~׺u#^_nnO.sݡON;fiwUqyy̍F)Z!FcTI<]v^GuPջa$kRK"ԎdRRJGηloo&x֕PM>]ߍ=G[sn~OPv7Wn}}+zm]]˚f ZX$ǭ]vwsv٭{Z^EkqZAO42ͥEGO t){^cx,mSBԊPH;vr]7=%fnv9t 0rVOQSI$h-OQWM<7퍎/3A^1KIntoã+.t#(1Uيj5-sgOuYװwm{[eK7ijK=6$4&xar1> [#!vH t){^cx mfjhXT@ԊP(f{fn.܋޸לnڻ7 ͇c#Z#&7p!6Nl~+a`w5fGpwB6ݶ$i>K]U?o/_׾ֹ^V&Þiv=gjq2S3Ɍ\}NS{M?.b&"+Dkҹc=gG˶\o؝Ġl7ʹչ=$>s3QS+-,RE}Y#\vKxz{{_CkqZ@lX,Nς%m/ B@\nvW>mv:٢az+Ztffn[7"7[y{[b栗9bmFA9I*(;_kܿ/zUrӮ'N #P-o1BښBO~v>~7ϵ/d`w=fGpWw?iU h#$RUՏpn]MW/ R=;1۬*iDY;$y7|[to[]nXi8RUFZjF?Uz;wGu[25Q |S9uuk]tp|c>n\ݱIjW_RZSc2BB^6ϱ썆#Zg :;7t&I%ȸhh,e,ąF}'k {]̼(ckه(ѩt"O)'u0SS\"X{mk׽u~{ߺ^'j]+;ʕf5SG,iY`e:#<ʑ#_}my}޹sΈlbn}37.WqgbW.3^{OapԒeܵDY4ԔMIAG>lv˳~ⴄرݕ}|I-.^9dKH1.m;͸3o- n"'֝ٻ7dRuN]q{5;g&f\~s Luux(kRDQw־\n-/zU)vԬKqDͧIB~/ SoMhS06-Yk_Ϡ;#Ͼ?{ ܆यfh֦q52̭ 4TQV=Fq%Rlm!xjٌm Q$OYjMV₫lJ\KpG"EG vW!z(qt$*4'@ ŀpky=_pe:60(􆡢SðQ'Ͷ휰yMs}1 -uTupW ?޽µ)^V|o{^~\uogvUP.57ʕfɠı̢, H&2j${k|&u+kkr+Dkҹb?vm?ĵ%I+/qopc6 S% zj s wt[#χJFŊJ%jicdHg{8nЦ3[RQ+mq4MT"s(dwN* kZvi@8cè{[³yþv+JoϓܝulS`VfpreLh)i外w5G>s-n{r߿--!+HMi9Z䷌itGR ˛FeznvI04l*~ KRRiќ>IveQnA39{cbf)f8c)s4tUuPY~Ap~p{vMNbDĎx$B~/*fL6lf;xlc}C[y>@;Z :c,luSJ$!cDg{wgo&ۢzvfl"fō83%8PĠrf/Z(*?(Cs%Ek@ @YN=e_`]Z*$$5㐺ȭk/9Ûv;I-;2[8LW/mmlpl o+Gܽ٫;]יԛ:y{>$gȺp+E*F#K>uXo27 Fղ+{!h% AQ/|ͷm|ܨ |:u+^f rE+ӻ\u~{ߺ^9,^oߺGߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽ugnA{^믏!:CYG{ߺ^׽u~uaaEAר1]?cf^}pM&ORiYt>}}h0t<.dԗ^s)[\ m} ƤG0}{xjjmḍo`SUKzkJ7WJ 5S)cܽ%Kf@xœ(`wھ\8f#QQN/:SP.gfғgl|Wun\c,&)e5D8,O%ڍ01Ok_NhY4eG*MCB/ܘD qR, 'ϹJQlF>;Qcx]ـd/^R_ZOcR:ɟSF'r⿊vޛun;wjQ,U,mD4^L@SjUO=ǀ=BO&[6b'^偟ТngjUotid+#ԧo73ea;j,cOEQyMWS0h+(%? W~W`8wޡ?<`׹oo7FWi̓o=R4 j{/E` /Ag';x573f`dc.7߼oiRz;]:&mZ7, F4uVxGOt?}ϴw?mE15S]PsLQځƝc7,hQ}gWm 3VN=>L1'NUd?)Hݯ`s<.Üԕ^)/ -}$R:]l,vܩU6 6~ZJl~29K OY%6sgvgx)W6 S0<}z|oVlj28 H5eGӻ"lj$X#xc6y`~1áE1%ieK'tmAݻbryv;wG_nzqS%XHd8%^#^ȬPWˏ}=fbEE<1ONh{ j{'EX $ɿWOVjng \1'|Z%Wc-v?=GOMU}ɚh,,#1FkQ|GrٛDf& kr<(isO8w[/j TC~4Pˠ?^ ר1vŮ3PM4ajL1?ꜢG)Hݿa$h 0l>|zKݞu!6"K_I;Ԩdz'ﶷ64^(^Co=7w{\bNZw1Vk204K۹ 7}f=>*Z뀭UD49lV秪D50C8tГu )&3,ClI6$Tf=[:6nb9$ 6fY\Y㧑GOOGyofmPr혞]Ps%zus\ .H>)R>}`">]^׽uU?Upi\׼:)}/1IV5MO%]G!af#f'x/t.}[vmψ!_πV/y9ÔM/=G} S1ۓj e J+pu0l$Q ߱<^Qkyᕚҙ2 ~c=M{W/4ެsZQ__#_{o6n ݶhlM-CdodlT򚉚:xde8T@K![& n/bJZ|<J t?;BhRC4i2WQht O< !lo[[mPב2xRq''׭ﯷpBkMݻyAW[ȍ0[SO? ?;JdJc1 D@ ɚ H>]PcnE{َ:TG#s{?Z^֢t89(ؽA\o87+ " +Oэ ,8O?Q()/~uO޴jt^;SZѓ!IB1\(tlHQaѳºx'ݣxKa=΀ ΋p)*$6KOxrs4e]Ÿ|5uI4.iMQͷ7,ۃni$x84]HG{w~?<w?+0=u cH?v9ה܉-}%&G_ v>5}6 yql~QǼGkI;Fh@ᏗS',xTTS>G$` =Xῷfَhl];-AdE8y L#Q] O/.׶- +L_DPSοBo{=}T*1$.ѡ9⪯X81Jh֞Yd>۾y;2IEbujUruSq+צ۫SObbzl/Lv^g:5mћg  ,1 =li6H)Y~#A9VտߩPm[dr:W].TELJx-}jO/}EZ"_3poiuDEQJ@X}!h:^׽u~ϞK^=u+-eR;[.ѸAz~׺u{{^%6zPg1Cr* )92FUᇰ7+s挡U4ӥflo10CCc5ìsjɾq9C.W)O_[Ttv&k^QSUu*i&I*炊xw;fvRT׼@x?[1| k8t?ÞJi*ۯ-V2f48dzwfFʖFd*wOW~ؖ7 #<}zkETTk'=T55pm)$x [l2CO~o-5둒SC H]JdB1"ƊE ^)Lz >uzEԷWAQZ(bڻz'#Yg>t^@&6sGneۿSs َ7/ M_H|ƀ+^!3E_wn2&L&*%WzRc-pr{_͞uܽʿ;56P8'u#oKb<ћȠ?ez<\o\m'AGAAO--4j-(a'~>˵lrm;,1b")Px<^\nSFBjYOOk{^׺Inw0EX:K&Ś92FU{ w':lb49(m'M*~ٹ[=LL<=AofS%L.⧓1W& DP<+{?w._v$S6R} 9wXe̶biJiV|~48ݒ6br ú1e3mZ%D?mO_B>ϸOP/4HPS<3ԗk$^)P~DOn՗qcY5d0L&:Ltx}-KKS;EiR=AffKK`pȽy?2_y{LE+|ϖOJ3 oۊ{_va1կ" @eXQsi}$rMn%#'ȟʽn~fzF ϣem Ld7ݳDL&H!*&Wz0"'=nN']ܽ?_=è˸)ؖy11Pty<60N&*ZZh[LPOl&jm;$1G**PQT>'=@7qK1$S|p>}3׽u~{ߺ^׽tSnL=^ s3x t"nXz! PG6+v.jKVCi>m-^&&hh~qWdT óJjܕ}>+[QD5s▞դZ Eƒ|Oݶw$SĚC*lic̖bp*| S J!6qdod+4-+^/^q3E_w%fɃ»ew?0ߑkw(3f۽mSDPHu+orKe_~fy,6Q0xF&*ZZx[LPOl˻jm$#h((|=@;rf$z>goLSooL=^ s3xj :MeԎTe-ͼlճFPO~kCsv{ܘy1zQ?lWuS$PI+8*Q?eo|9kplI>7V̂}]V Ys%ZR*Ϣ[ޘhqw>w 'NT}.kc~2*h  N>}IvxFS\)D쮈~g|&r%|\=/;cnx>L1Ք:9By"gDȾƚ?6:R)ãO1o_E5JWyuzz ݗG[##p_q20qs1_bhk2k䊍"Q%ELn[}7{O#h҃Ӣmodׯ xck¾l?K4UrVnȕظda]EDW2PD}EPo7rݧX+E0#}ϨØ<~ .Ķ@6R~y8]8M+ %g?oL~{ߺ^׽u~%76Wl~oX-QAIf^X#! AQrَ6{h٣(jUTևv7o10CCc-mfU̦I `|5d?XFRJw,n3~wm'թɭH!W:sXe̖WZctP;oodݍN߭#ܙ̎.g,xMtpMQU)448{#ݾIjCZx&=_y FGGy!;EfT}32[rd_Q_xi;^{ Zhjt}zgjkٛv ڕ&sm4; b'tN:c-w7'b=)A!K#{!\V.r_-npɃû)S8w?-_kw)Sn۴ ŷN CØ\~ .ĶUj)_?:ZZtc ?nOԒ}dض\#8# #@ *'̓}uL$Y3=O-= =1Ǯu~%w.Wl~oX-QAIf^To:"ya~l.Y\h2}WS\nܷov44#Qz_tuC,0IƫLpddEW{޼w?kwvٜ| ZRMH!W:sXe̖WZc_wyaECыrc 4A0'd>mUl[&|>_#ީ<?.z+!+gav-e-VDd٤VaI ;(WRBEjj">_lx4ң1O@:\e"/k7[B)]2C$0`WZ#YRE2EI^Xz$oc)F01@>]{jYp<1@|ׅ|z7c^Ϗ}(@bi1?f_Vz2Lm\ReqUb7dVRۿ]_uۓœ<4`:9w*E+ue,nb,]AAO--:b# ?RMvq"EPlj$[JI%IO>΅i㞻׽u~{ߺD~gڗ'y~o~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^gnA{^믏!:CYG{ߺ^׽u~{ߺD;z]vg_s]S)]{vllW1] 9k2䑁ݻ&;!Ιh׺8'd^ڛcl?jh{sn`袠Txihh)"hRij151uxUb>?@8@?}x{$cݽZ ={ߺ^׽u~u`a@QA׼?({AUHg[G= =&;,i5{Wer l-$GE˯qâu@ON &>ƞ5bu*z-y-ߔ1ñQKTAPVzOG~ uDǯ{[׺u{{^׺un>7go쾜eJRe~WK5U M`\E& ({ʝA5}S;{)7vBsw'cE%94 OZ3nv!Y]UQT ao{ 9âS+3q'q51L\}YZ|@[ހ (PRx?P{EouǢ{0Q׸ST0f3|m7sEܨG!}x.P~>@\gv]lWn_w2ivYͩ3h읷[cvR2ṋ̌T0 P}E?^ "!{wWvU*(rT5ڜ>ۏR fǔUI^7%I"IiO.]vp_Ck`{(snS}dSҪb.LۇoB*3WIZ =o{^׺u{yx6ǿue6/*Gk~׺7?^׺ߺ^׽u~;6qݻdd2t[kglD2߱gRm݃=vVi!$jz*z1֨:cw_x!N*qحquv? ;bV2W櫄qۻ K6FdŸOMMAUWBO/z7GK}?1ngO)ͿL}ͽhOA:6?~=zA]wat={׽u~{ߺ]XAjO]k{s(1uJmLlۮ-~GzniOvSʥKSӊH_+)#UWB=,zCx]WjNߛ!.w|vCLg%QQ]SְBQFתz^82##e`x ~TЇy=V|g-X8'g/ =#~j汘Q#g-#{WXAނ5=k=g|u{{^׺u{?AܞO5-;7-F'(\Qͻ]'} *PRᖡUWHJcu`H5QD""*UDQ`=c:OE!U Mӝͮ,ݳ}#ɤC7uM ?gF}uzaoz ׺~TzaoU] =`p:n>YEBn~G*}VY?VUОte\VdYf?1c>V f[j,7%ATȥ] ^M9۾r>u8!Q\7r%jrߕc٧M-4O!]S;65E~W)[=>?Gh`ZI{^^і%޸{ya[c>;u5e\y*NVRϜI >C{iحnB8)|n/ou׿u{6$t.{;zW`cvM6[K,L4TA4S(\{ul׺u{{^׺YW |wП"zg 螽ؽWs}׸"(Ȋr1UOJ0$+"Xuk>׺~^vp9ϓk6&4r| FB3G0*etm(cpPR;R4%EQXmѶt1Xi8|+F ^_gzj96*{u{{^׺u{k'>whmvXvRuGrW/dn^U6}F6R:ZY+xѪS>딢ۻmIpylWZzii*)AK!H{{^׺u{+nݛodX|3n ٜm$YmÔM 5umDtH@]uۻ;_TWjjGO~7zlNz+mN t>uu{?4aubPb>?VTGA$:@vzrËVmZꩤßWXhuo_v&}k]Fvjqm@Hk[OU9f Sbm{u{{^׺u|?+][E[2e'uuFr})*1 uM9f(k5Žtf2_3{aa;S Yn}m.1Yr=Ҹw,{^|a۽Cd=WSCkjpknL=J7]Eۻaoz#+*+㎊F-7$ԴS6۰$l% tsu{{^׺'=?l{^V[bv]{p>a{u~{ߺA7sw6ݜwv'_-~Nmlo~9̓2=~W 8PēUOGOQQ@Lo')]n26F.߱MNصۻ K.FT L{znu4%5Wi!3]זnYùF=lzNDidXY]uTu׽u~{ߺ^Cvo핱)گynͷ Iq$ආ0Vb(dGF Ut,z*~[7{7ӰqyFWF蝗JlX|v<0qrY7q8 i\F"[Ivuu{ޝ/nΧnu]wVg巅u IKAL. u^'CG:%=uTDi*MC{~׺u{{^׺u')[S_ߺDûSc-A۸ L~ˏC(.oMbcLɂLq{ti6ڝkvؘvٛG A1=:\Gݙ݋;;>+=t[~`d:|RiT」qavɻFO槥̥(w*H/2;Fm^ݳQiV쬲ghvgW\v;)n})\+`T{tsu~{ߺ^׽uZ @|iپ_p6={ i;;ly0lZ)*u̥"eGGۮ3qM ]yYGenMn=PR-6&I55]3D# Y }tqWag|=vP@?iS>7-PUǔn=)Qb롧TRUDL$Ou-_\2]ӳ0͛{i)ϑ=MGXNQ7A$텦P(rEW &3)ѹQ%-oߺY}u~{ߺ^׽u~&ww> v^׸ |^m|lk'Po㧥ITVc#k;Xݑq:v}ωx ncdvVdpEgaI o ^u{54|q~XVQ9FmX^1d|jcJhsK4#nL~\L'/.l|l0'?yo]++7}GStj璤 {Zy'̖ԥ#5G7i1GP48Ζ~׺dfxJS[Q)V]ގ)`-WQgWW]Aַ_/FF|d3{sst6տ,ՙ-CMW1$`@O41C{̟=.ym~94cf^5tqLX54/U %mCC[@Q*M x|E$ VXr\yNu߿ury^TxU63O4w«HEɷr}Optڮ uAZ|\K{z3.X6eL}֙lA+/UUGod]591za7^[in^|7댓c3- ?%ESJC1R{-o1֭noХEYG*`oE,4.-#%Ox K"(z%su{\g5|2MMprmnS6zEuy뽝P|: $]qkU$P0?n=[N|>R,Z"/?˻p|mgrۘzV_e[pu)H#WF5DdJVq[ʏӶ78I[6QVQ J*+)[SK2M xJ<GMmΠgSקO{9z?t._rmzf5ߌ}`&*fP.Xi20=N5־I+C=l5=%Mw}Oyo{JRA4Xڹc$}tHꁇ#ٸçAiS 5~lwxE/23%ESJԙ_,=㖷ٟ˭,$߷J!UTYM*:Yh\[2FH?gI%.tSW W{jt~[13OIml [h2JAD>ztHk%$ٰç3/>r`_{ ?~/|~r]OzꚢQB\OTfO>F,$}q[׭n~:< YCSe4xifIqo L<G= E͹^.O3SܾFJz⥎)?O۩M?,uA2sWm\џIP0${6:te0WPꏿ^9l&Gp{qn7:iTm ,uN+ I+-o6ْ>Z=Ï՝.[W/^Ǵ;_;W`n*ܶ^$!٠Èz8WTӴK" )p4(zC%c?׽uUxu2{=;[ 23|cidT0n,$UȤtTѴ5qE'R):mQgwWpX.ٕ΃7+3l/ʌnolnvpٜF۶sf'-ΡX",*jm-Gn9fg?˫a\d]c3-?*T-ͤbq[-noХC[GJ+)[SK2M e$&tRi#ȊKoru?z{^%aMn[#GSfxcE=lʧwWp.΃rs)/oT&k{jxK4v_b.U2& K{6: Ϝ3W|#t~/mtR쾾Jt1e\r᥯lyuA?PpĨjiSWIEb?-oH??^Y4IhRӥe Tҭ㩥&ſ?}:O)p4EB%Qsnu:)=?l{O+-eR;[.ѷ?޽t{7c+h2CҖUIr뵿>mvm0H?p}k7h?:Ӥ>,%lD/ُcx}>O-!~o>(|9j\( [{ K_^?H+᥁hij(/mM/:ٺ \+〥xR4Iz3m̏h\s.M׻zݽuҬUQ.ihϭ?ߺ^&_~rG$z*R #$;':oϳ]u2A?p}k7hxuM y%pg|v /&77d7 &X dsLg+7G?tMWU:GCs=AWPT73j@>.6FT}sǺs\Oi::׺6{ݏ$ J-B%=vOuߟf6>yO2A?p}k7hx>,؉_dz}qy[ZCk!>|p+Ut_`VtO߉%ݗB:>Ɛϳ:<.nQ<$J 8㧘lܬe/Ra71+?u?gmݻ~d68ݛsnFRКCSWtPCvYB>:V^m֯GgXks Z3_an>4Z*s%vܩ3Yc0KxQJ6c-=k;[j㦗5O-&SJF TQ *AW[0#و}#\NVGk;?s=CUP˨QjkT}ϵgr2Ø=ݣJ祸{I^DߺAw6FܒJ|J-B"Jz 뵿>-v} )7gض3vWIE}X)qۂOdz/}qy[ZCR쯑l1^xv_]eOd>uwUIMb1?{UUkfJs$SMٹ!ͫtW?o ~]X/gM0{G`?)s[wvb6jqMJ߸j՝SI(x#$9u6Q_>>cs}+=w2(h(2 J5~>C_AR@x*ae!f>{dJ Ù-ɻEi_+ʇf||kn v56_ _;EWna\>c}Vw. |jC9s5U AQqgn2Ø=G>Kq{^׺ݙ6ܒA4QX=+5}bySdvak|OAs6ǵңk汱~un#c]5ڿs#1M9LSJnNi1TqU2@XhEc.W93W_:wl퍳:SomW6VD1m1xZ u@FX$$Jn6яFTW?Ň1{v}jAG}{ߺT>!0l}z{6~qb&m3[s{p՛rnn ֝Ivfb[W%UIBtJ}X}#CmέI&Y3vu[%O״}er{bS3GUQMSQ KG;kl H9:!ycډWH`z Sǔ'poDg^V򚿐?Kal<.zPw4տQKT}u?qo=tpnϥs}tw~׺{={#m$mE\dfKDA?-v})7f3v}+ây3vdA[:?7nޛ3ja0{sSRk y*jeȋX9 ?GQ,O{nl+{Ini9KI$.b!|NZedu(v2FDZnxF>G}w{oUeå{3p}g/;;7h;Gc˼TzCJ3XܔM"df%g2?uC~F(⋱:xnm@r9TA/]v&;=SUܱSm+05Wj`mvע-Ǚv-VTT|ǫ 'DG^V򖿐?Kal<.zP-oAQqgn2֝s&źc\A߿u{{^?vVrI[pQEU!詙Қ;/h/)! ҟp]k7HxuCvE3y_ݹxГNkyE;7DƠ(YfF eYh?O?o8۝Xl MI[ ZOe^f*=i̛cQ^?μ@?P Ͽua{Wu6kml*){r>M;/"cM Q} 8Kld.̥9d_%~8\E|~n?9ٙ*tlNϊ=B1QM)qUO2 0K<^d>#OBF@-iN"ɾG+>q>O5!~۝x\ MC 9򢚬#M׺ٟ*=i̛#J祸uӿX?3Kx߿u7u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^gnA{^۲e|aޟ :]E~꺣fQGM]at,S~cضT7n\t232!f]bI /oXѻW^M?g'GH{"!vk *}Ed/qq߉'^G:Yl=͉+^Z<]DSfhigfi<K6%[e4#6dߪxIgc(r-#I e319:/b?vh^ڸ~βn.!ݔ/m秏Sj+UMjl6.>'o{7nLt23г ZHAENIX}^Mĵə, /oXӻWݒM?g#`F;r4.ā =Ed/qx}xG:Zع(͏iA%vkRU^u%{gY5saK^KH$~h:\NV5P<$c1 ?^Q6IKelže6y ޝRJ]E~꺠>ƒEGxb^ qlKI[S#12)(cq9%cAy?V%&d۬v/oXѻWݒM?gڛw/v=?Sv.*RrQmWB#뫞1b!G Cx A*iҒIƖۤ@i7wcdTI5G+QWBO#Mky׺I^MqEa?G2_rYRIű9Z<.+B4S3,c1 ?^Q6j?gY7irVum½1oMC=Q"WPc?o}l w-7n̔\t3,’67QSV4KOՉksc}%h+zƝz~=*i8t~ۙm籘bn qUݻon&1D0JٷEEHoA**O`W쩧zRX"EkpA$=4W}-6FlUx&iAb%v4UЖEImr [+v{=(8gaK^K:*I#NWr-#I e;1x@X~;4/ipm_~βn.!zc;ĕz?;S*EKMWT-> Ǔ>Xm]-|O:A[c_xnMϛݙ)2+*$f1Y%ln $h>>;=oK@ zW{] zTtƑ8Go"f*}Y :kqk~GOŞt{=rqTQF⧑?g)*knu?@wܿ{P"*I#S2 #I e31@X~94/ipm_M\ݲd0Lul͹TGjeHiڃ⥧>ڋ KH7=km^ rn|IIYQ#1-L)(cq9%cAX1m;}Z[ւXӼoWݒM?gLI#Fwo"f<*}訅q\}>O^G:Y(12KB҃#X}[\6n=gVϏG2_rYRIub|sAmtyHj-d{'.MRG&RnW]fg#THiڂ">Kt}#ض%7&ܔ\t3’67QSV4KOՉbOn쾒޴cF_owWvH4ߵvWg`v&hllet:ۺ!VXH@>jcLw{{TPšA*@HGbXI pA۵'MdYZ&&WcC_ oݼ_D*؃knu?oG1@YRIub|sAmtyHj68W>Q6IKUa^ٛs!iQ"Wj0jb.߁sEKgG퍸Kxn-՝Y)rUĬIG GO}1Xr~K\ --A_4{wD F0Hi]*}I :k\Zָ">t;;QVcj$C,5IHVqu%gY5ot}s/}T$+N[b2 #I ]9cf2GЏ=Ów#uw)wjv +6T3nd31*$tڊlEKN񩈹 j,lt[8Hw=lm^ rKIWr~K\ --A_4o{wdSJ}:s{jm7 =;cck1Ը $@5Pc bR=*1wʔO`T@QE*x~txU_t[;QVc*d!FjIR/U]InYMsEo#A\>ع>ΞjI#VX/E %I ]9cf2WG{;jT:;[|{n]2ƕ:jmE~r" \Ϸlt[8Hw=lmn rIW;a :(AENIX}8XϹn۬޴cFoWvH_JS#y$qDE.a~y>Պ訅q<[G{%,qt[;1Vc*d ~&IO%lT؛[m{ş\Xp4~}l\}Ug_5$+N[ qz%I ]9cf *WGnx?$~βr/-V!zhۦf̎~?7"GMMIi~59KgDZ퍸Kw]Ӝݹ)r*瑉 L(-`$j96,v --A_4o{wdyWmdvqg|ana6>:b{v6rw|_a|PJ>ZH2~CeM?>vJIb8 ړǦ 9ݏS$m 5dcC_ ?JEJ*lMԖEg4V4ϣ݋z,椒Űz,':TpӖ6`m?Mԏ=sw&#uWIyjv +F47nds15QSUY;i~5wKeDZ/U߹wNswdgkdٌ0jaGE(y2XuZ[ւhw SOà9FpN>>cVݯk|aHA@z.S*i#I 0ŏA'MU@,6^|U$2K#$h~)*ة]InYKsEo#A\=ع>ξjI Dӫ(؜~^RCWcg *nQ6IKUa_:i޻gm̎~?7ƉOM}&vRS~5\~;t{6ƿ]sf7Cc54T.,S(M% 5u1$cl6/h+zƭ~7ϩf SOZtđ#6? kxtNBӮֵğ>t{;QVdzC(jT1BOxIqu%i5z=>g_5$+N_<ĝŘ%[-\q*nGr{v6IKUΡ_3ҋ-eR;[.J!>RPLy:1'gKUFV,H[, q 8coPϸsMxH?f:+Vc~I#Oԟc8:k׸"ѰG$$V#r,mjU :JJncQCV-UA5U#wMqJRlHFDC}; ofWpT5^F걹OE]VYܑ]Jeܩcs^->_|ygݗM΃ʾ{}I:(9(23ݽU%Tʫ㪚yPH1NUFV,X-, qގrܛmC$coOԓ'O򀣷f:k׸4rY7HYac?ݪzP~i9)"ux䍌rF9#G`W=]?O>߳togWSpT5fF걙M*ⰞO*]rq{?Yg/*|>꿺/Gx>t?f'ҘwhϳvTQS*}<TKcdUGV,H[, sގzna&Pck=Eɿ( Q ojq<763 6We54`nک-^:))j<͏_a|qe7?aJDx9d`n$n^7^T#U0+c>M7 Wz^FSQUGzjܑ\nWQ9b <ϧS!TX>t?f(Rhϳ6TQӢBGIJ1N2*+Jj pvh}C|W0ns* }1XXL@QۏD, ɓzNmmߵ7S-ˍnͱME6;x켫fڪ-f:9)"ouS2Q%:/̅<Tq#+Jnug`[~v`luC Ry$I?RU1@ι\rY n#bBHPf^V<?ݪzA3+$lc7_ȼPG|`W=Y?O>߳of3. Y_MJ8H'rF,\]F9潈X'85\n`a>gFt}oR)OxJ!6RQ,ueW?hz~}f?g]*qYMjiaOb̎Eck؅x*pq.jE:ycz3?Q1Jͳ6LKhs y:d:d ơZV_Q\u;h{W6~۪$o0h~tU3 p5GXē@PcQ>u|ۿjoudιϟ[xm]G7rP۹6v)6}qn[%J}@0UyGy?gN\ZP y`>G,FDxؤdIGC|`?鴢ecnI6j)de$Roo#rnck؅x*z9 71w}`_>=JT:)}9*JfݩCBG1+)ur.8/wr.Q#y_LtU.yL]ӛvss'UP:޲m|둉,6*!Ur,H}ڭtGƒ ";n\Ϗ\nHѷتPv x$~}ڭ4Gƒtdtwetxn>ueW?n1FvC5,GpT5ml4T23155Ёrmh܋7+ss^,GY'gsgv8:4?b:S B]^3UYM4٣2Qfvum˷THH4?f:* j:DT:FSSNP r9vc'܀(::?zbp)lJaUr,H[hq MאG|@?F;;!M*i*1)*ƶdr.Vܭw{]g#ʧB櫍 @v2~&ow>1 zLztqu~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ_g^A{^V$tP#.34gcPʫв,?r!@_pl..[ei赏?=w3oc;zS;ֽ}Lcn:ōa&%ہ) $jRHsehޠoG[EVʺ8=z ۝w׻ou忏͹fy=UP|٥nWaYY>Y[ڛZoc$=M=KG8՞WeH@Y"G% =}}:Nxg%=Ff5g Jy1O. $qeq=›U|c )[K6& ׎s^})ځyqٙiZZx)ʢܓOX[M]\~gpln.[u#?D,rZcz.?+{wgJzۯx .spqqew~cJ2}B$jS$w=B9#/Kѽkq.T>8~] sozmܰݷv^ݛOUT3iq;o7OasOU5$>&S"R*K,Ruݫ]SF)n;/ +PPN^Y̓o7>v{iL/-3 $8),|ղӹbX%rVZ~gۤ7U|.GFT5Y$qXۘVI׸z6QcHy1O> S `mdbIW9J4ˈKa楦J/'BOY[M]\~g?p,.>[t<.H7G-Puz+'z33cp팲pW.cin~CW9Htǒ)Ȕ R]wjTъs߆@0A }Qsza}-ɲ&ڙRmaad76EIc欖&1bX%1Yh>kS{uBt <0^G*Ơ#D5$zNxg#=N{s [e:Tx ~޽=»U|cASllnM@?̓Th[M0Y楥G}(K>o =awۥtBG X~r^4/}b3['':I)[oc2OCdR4<# ѽjAmk FTWЃЫX=ŵ˭v̍Ǽv^l}umI[j0z,HMRzٽ@޲߱i$cӥ#;q,H#WĐ9VGטz,|?t O#ܦWv81?e//>ղZY$?!Zy椧K<ԴϥQ\aY[M\~gOp,..[tGosJʎޝ޸y '52x8;pchPjVcg Txsc1vR =~] a{S:joܛjr ʱVڴ}ǸV Dº꼳+5Kf1[1 @@AJDg`1U5GfƫbHo|Np3Ցuo콹Hl) S}]ݏO)y~щkI.6 _#O.*3%<`MJEW2Xkfm7K[-Y 4tAX~j1:f=Dc.EsGwWd턬|14rȇtG}Jg4rK]wlT)v};#| A]M]7G&؛WjgaJew[]2 嫒3+bb}-yϢۨ/Jp.DVvUcA/#iXU&o`VCXzZ!5K5[Ӓ8a8]o{ 'YI vNfs\-ns`.h_Wzm>{[ynaQYX7.ۛN 7dW=_p%o&}lߴJ1[0 @$cU -#ƠV8rX_oIz0ռVRc5HܘfwzrG'-Wt0 4C;KF&x?+޸ZyVRdYYg(dSǵt{HrGd*x]`n7\5ciCc7釤*qc.Eݰv_hn#0r&]=\n? _g yc 1CϹGd| t,uTu;#؛dM30r+E5٘R HfvclH;{_ˡT j 4*KsTds+na녫)1R7- NNHm=ۜU~CO:N]mcbkJ?-ޘJZiVR^0Y秣 "JxZ[=$o=rGd*x]Pn}˘s(|/(:xMzc1۩W]+:]MlE |;5tP:&iEL.!j+m^*W>^.Nۻgu?Vl{m[SyqS[Z76[J 7"N+aPd/H uc $ 4rgb4PYv:V4Qc~IhVAjv[KAUFܴ3UHNH6mo{I(vщ&c݁Zy^0ZI,ꈼ@=嫥GǗz)˖Tp r+Q9d ./ɮwE7Hψ>_hn#pcgXvtrѹk|lL7$BfP{Qٽ`2t*uS_nMɲ66ڹMߔbgĬdd-F20H!v*SUw[_ˡT (,;(䱿}}='&|=N;s\-[K@U5\X?oXC[s`i,jحmh+,%nw`W.=yuty y%U?g--><3O>n\$vBDo{oܻuYˢkMSb)\uyc/7uvCX(vuGkɛSF72~Ֆ<"h=۔vR_(>FOvf{::t,bn]̸r)AW9y5j,ҳH]1}U}uġWGHU,B,BƊ 4*Ɗ9,o_oqITcm#na놚jzۓ r=cS C[t]],kح-h zMw;+<ʪ\SƥPQUk9nm7z+ϖTD o{}r+Q8 .?]m{y9|Wl]^PPisUn9hݫdzPD qbmяqO/%Q\`=~].zmn=O|nzǯKS]Zv퍥Gܛkrajg!YfZ%s&}l}h@j@{1tIyI"!Tv!cE*Ɗ9,o_oҹ+v/|Um9Ep+[K:*J&j@mƧ$~c6p8{AN kV$> #-eR;[.[A/pa*݁zOl:'R+/W勁>XW{w3\JC^C@=ٝ{}:wl\l6[vTk$w&/.H70ෑ$iãYD!Tjhp~~]ߟy̏GNVoaH(j\>6 &ܱ @<=-X?{"Giv ר DU֊Ka{8~XsÜt\n]6&sfcvV-*2UrlWJwEz: A]C ^d/pNTˇG6x*8JyG#Ǣ}뙉H(j]E]NԐQg }tYW,j=}RwqPAqYww *5>j('h [x^,G_.<}8=cC'?7U^Ոm{NVehFvv?6'zMz:zڪJ 0u9f&Mzۼ7p5EVGٗϠr%mvLJ5mWQc3ӵ=6GS9ǰ7]Uu!{iey}~E'G}Ϭ35u3QѱT}ۥKe]H>^_oEG}u'UܘJ?`g& is!M B5cu(nVs8=c<]s=(acZOHv/`wSusl-ò6^-*2*6EvۓWZd}HeP!J|& җo#YSb4?5u3Qі.ʏ^~GnX /68A}0(}=:=-pYx^]˄njƟ58PTX $aԣ{ZÃ9s͕݇3\R0: }$|߽[~.{qlnʌN=nܻWZ\mHgP!J|&ȴTU4?^ܭTxPTqiA?=5>o,%e~- YQcWS==5[kg*>y{mKc.m/ѻ " Lc-aougz.75@f2bC:*Icu(IV[h1Ã9͕݇3OqJP: } dTGc}S0mg|l fL}݈Sm\TR5 ywF ZZ=4$}MͰXE e:;f>PS*ƒGW-mE[LTl꘻9Q sۥKe]H>Y^_vD?:>#-ˬU5<6nah)RX/F_V[h1XVWv=*C8,#\">M|_޽e޻ϲ*wV& QOɚ|}ӵvUA57*z 礬wFE!m\A$5Enm@ץ(h~x)}3 0eF \Օ>15m3S3bG%Kn6g]H>Y^_vD?:>#-ˬbuewcR0󎂯bE8$|][~3ݓlZ.'(Dx&XR%SEFJIⷑvI1J\=z>q`kAAQPtp~ӟn?2c-Ǭ.t R^\=z>q`kAAQW8n}c͎?oey a#|t,o~Z׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺ug^A{^V>  0A qDHǧHm|խ S1ibS9OHDZ~6-/[mm7lgѲ?ɤLxZzY:&^?jZ7O*Nd"琹~SZT65~FYX{5lR7[f:'tb:Fx29Fw;Y!Xh($+-wW$S`יJ:W*+G#k$V+)CAU`C(  A `j:1gޟymZذSleDM&*YY;S$nxU{slk>=EۃVF}#JΎI4DžOE+MCFI&^i[̃:\3 i:ώŮuJm.#msWdi qq[2ԩ'?խ ],&ў NQ5+°Zہ+G`יJ^O~[d.OJ|~]{ VA<AH5z'Ez|%bUNZi4efOHDZ~6-/[omlgѲ?ɤriKGd?KF/5lg@{Aa^JggjgQ?j3GDef?z歖?:ݿ s-?`F`th[)(bXqӪہ+Go5QjE~u$r m{#|r|WSvw xAPA A> F=:,7/4-YrMK+6h<`>I!C-o8][ ~ϏQvU7џ0t wd9H%2q}Sg@kAa^JggjgQ?j3*Yޮye'Ooy O?m)%C\+>M:uRQڜ +G`י:W*+ө#k$Թ>G+)vw xA,A} GZ N'"N^Y1RͩޟQ$Eb./]oml6E'YݓI&ΙtExih>;+f琹`(|wD5t(qk#LʃtFVb?>q;*3^ܠO:0pJx2IFw; ÏNTdgW$3ukҡ;W1_H^'~WSww xA,A} GZ o^'#^YqSJͩQ!C-o8]Z^ c.}[f3~.*ގI4DžNtEe󦥣q$4쭝D琹cH|D5t(qk#Lʃ-sNʠ$ݿ 5 :G ee\v! A&:hbnI w^f#QTWR?-ٲr|W?R:U X $=j'Ez71<=YrMM36h<~}F *=6pAix5i]oklgѸW֞]U4R<-=||Z,!EKF/5la?= 0hϥ3lwD5l(q=~F2z杖?ώoy O?ц#ulD58 4KFI,p$sq`י:TcN~[ e_~ϡJ|}RuEb~ P^''#N^Y1SJͩQ&C-g8]Zǯ24̨>GDebG\sNʠ$#nߐy~6&ӨeeC];+:M:uRK=nwGڣ~#r m,.R%>}RuEb~Z@Fâӽz|׬Y9y4ڝP~BDZ~V-.~.}ܟf3"ɤrih_be歕Gs<+E~z͏ƭV|e.3Ҳ:&}vZ~T?]zߐ9@ :C e\r!A&!iCq f{D}1W#Y\ϡaޤ/!T"#[߁ u4dX*̓O#&*y;#Ӗ?PEb.PZ^w_?x}rٛ"f]54i M^5N-'ؙyelԃ:\3 ?*u]Z)1qk#Lʋ(f$~q;(O~Ak[ 3х!ړ r!faPI9I o=QjcHFoA\ϡa!}xbXK{$@Fâս|׬[9id36xV?]9bM†[=pAiv5_?xZM[3}#q:Ξ]54R<-5||Z,C:*Z6Wؙ9eaă:\3-h~zˎƭV|]&.3ҲM+{4'OoyAфړ.w9SBh$`ԌIw$ysGڣFo͚A\ϡǰz˯R,@ @"Z@Fâս|ج[9id36xV?]9bM†[}=pAiv5_?x}roՑ_ZytwdR9X-NJLӲAyEhS?o=eWcVȫ>.sWdiYT~N&=vj`C[2(:0R-sGA.!9ƒ= ڣgR7-l n}W=@?ÙCA 0j:O^fjyb<lI <ڝXt剹oQ/9=|iۋ]ɾgon'W}i![ݓI&ME+-KFI&Ni[5 ΀<(etWcVL\fڦҲ_EJď\sNToxM]QO̹#NZA&!y6C(>3u1_#r߷f .sr'ϠtW9ǏR':ؿe^fi#&ZJ,3妚2U mo6ujj=<6Ymit(OtUe*vn׍'c+ "H Lڄ{-9L_fn= 1!r>cjfqXA?ۙm_e z"̿Noક&:v?Vcp&7Wg5|kv@=)S4I7F#7o|hfi#f %e ti o<mo6ujj=<>Ymit(OUw]~nO W*D  Zsg#}*31zcKݎKy3sڿFz!̿Nsક&:n a#Lvi}ݖG{{VyeD9M/-U*Ktx^JZ2 Ubb1k]sαm"}%BE͵O#I-wg\3ʊǒ.w M5@|]Kvg K td4cs4ږ6ii+ VPWO{q)[+w[ݦ]Z{6'~|z*Wl ~;5M*$_H  ^u3u>n a`/s5ok4lu|Zh}>9n Rm͓҂ 6d$PnQf"mbn5]_3~[oʠP+Ѭ;_ qb0tws}s**oS'sLnɯ4}qw\:cKr8s/G/2֚:^ώ{Ds)hmHBa DŁ]sI`gl7w{AW[vib`#*goS7ݏ$ p&7Wg5.lڭbJ_ic7x jXIWrDԳH*F+wKͪ]ZytQ{Z]UswU~jڣJ_H{-yCK7QV1_q+<hG=BQ/v=W"Mtx[%5 !AEɵ{.Xu|ЏmqWwT:5gka.,F)i#']EL?rcwc'aay\@|R۶YmV@'M:S{Kǣe`7njZZZme iRbA2U*۷Kݪ]ZytQ{Z]~|z*Wl ~;5Mkƕ1ȶd&?A܃kζrP- 1THqxѲPǢ\0縪Y6JKpd#!AEɵ]]sα'mW2wTz5cka.,F)i#IQU;ܨI?,=7 cuvs__v=ZY(8qӥ7z1:Go ޸ṚmhePWH{n`xtگաGGEgYЦ>!:9]9 vj׍*er$YD8X{-yC>?"}ݣHˤX2hGFJ=Pn|sUr$ۛ%E)Hd$PnQe2~{Oe\v.?B- a]Pz(퍭8:DKN~ETOp&77g?R۶YmVbARӉJoix=#\g6G2Ch(g5,%O[xtگաG~FYmit(X|CaU|uTr`25u2W D8X{-yC>>D{kTw~kKg:9] ~j׎:_&?A܁iζr- 5u*Gf]"KneKs77[FCt@9 ngK͹qȒl"%5 ,Oж#{.Xu|"۽ܦPz(m}:DK+1TNQU1;'`;q] >Cl,Agd)S&){K=6^zc35M̴P:bT վo/6uhj~âelSP>Ǣhfd1ku/2W{m9O=tEaFHˤX~bnf{Yh@cN!s7ãn|sur$%EMDFG!"Kc'[S=\I`~;o\ W[hbn%MT=uSS? `;q]Կm[MP Tq4R|c/7/b8go{^׺u{{^׺u{{^׺u{{^׺u{{^׺u{{^׺/~mHw*lu.ۋkUWG4Pn,D11~}{K=u"y.m=r(z"?qv޴NS׿_](ǯTGg.m=cV}wccm%e#y?0{^Eg\{5=xPE%ͿGin/?IsoQ^/.\{U|K=Gh.`?(_/.8(jzȡ/.\{[/&[{תz#y6e1h+_>D11~}{K=u"y.m=r(z"y6eAz"y6eAתz#y6e1h+_>D11~}{K=u"y.mjzȡ/.\{[/&[{^/.\{U|K=Gh.`?(_/.8(jzȡ/.\{[/&[{^/.\{U|K=Gh.`?(_/.8(㜞r(z"y6eAz"yeAתz#y6e1êV#w}e˜6KfUnM){KpUKI<.} н{chVwm?SMכr4y>vN';[O!KQMQDFVGW {tcb%eÇ^Gg.m=J#uEg.m=Jubb%ͿG@NoO]pxξTa4T8ee{JO<UQUT~}~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽u~{ߺ^׽upyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/graph_1_ex1.png000066400000000000000000001564301153663664300240420ustar00rootroot00000000000000PNG  IHDR"^t pHYsaa?i IDATxtG6:wߺ]s4s'g3c{0LDƀIјl2"(rB @H $('@9g!Wj$HH>Tաzwu޵GPPPPPPPP~d(((((((.QPPPPPPQPPPPPPQPPPPPPQPPPPPPQPPPPPPQPPPPPPQPPPPPPQPPPPPPQPPPPPPQPPPPPPQPPPPPPQPPPPPPQPPPPPPQPPPPPPQPPPPPPQPPPPPPQo4OƓ^`T,oΚ`$]!r;˟q)ixV0BWVII \J/w.11ǏGNNN0?lFSnoܮ111FdB*dǷڮF?}4***vHSYY)w޽x#""q>>>{.yO_xUUUm-ci`.a26CWa}0|pb}HH~m%7ڵHJJlZL\mbǧ:rюR}`xZy e~{5k؟ x}l#]VV~l?//Omu^_qHL(O*RIDL rZZRRRc??Dy2%9`֭Zsss[E{qx \~]܆}ol+gz6z$rww}) XBPP /...uqMիW[O>y(GO)3^/c[(M#H)S{6Չ~X[[+q3k|s$?r?BgW̙3`oK?/k nj#,$>'7 EG%BHeŗ 9/u%_կ0l0l~R9pO>󎰚%q@ ˲P><_Xnƍ_ŋ1gO~W_}JbÆ J_$"VĄc(J2Y&x饗|y.(;, \3١CeOII&ٿHڋ5u˶<'%k JdJ2Ai!UDƻty};ʍm}n#q[tZ{AH%5)g>Cl;wNl# 'InzIh!``_#Q#$9 ŏϱW+y%$6JAED]3l,4Qs[h.\oٲE(8QQr[!zڐ/mJ!HE/M*@Um׬Y#H4|$"TTƑ|9S,$""TK(ʆ2~iҝBkAT\o'C@"BYU"!IACgLAC&G+/oʐ˒"¯fIDL-b<I#|$e܆91Zh @}ǖc_#1ВBL7AR2٨Ly1(/iă`R^'26}QI!g?'5dgCy>C7O!#1yO(/BIo>엌'R@g`U*$@ˊW*p?SR Xb_mEG8Z'h_ϒH I Tte6 eM[*{*oY"A5˖q!BT*$)T̔-0#c) O8!5>z|$](` dL JlΝ;2 ]$$+ F{G<.QN ۈgtВ"iQ湸c$*<>x15sT$/={]wQy32QْERRѳyCM DCink"& f?d&֑S$*Rw[;i)*~ʖ2+&*nCkP$W_<7$fZ:cAʌaS~!cI乏1VA3PDDUDs.*tHX9̗ff~Q3Rf_0^ _ut$2\&W21ܗ$ɨKg 'nuR ȀHiQᾴ"#/|RPE/BB3 §/M0ցv4$i WBQ Y3lMmyPs OID$KgT77e:9L%Ʃott^k=GD#H{``'3݇c==Hb!1c4ȡsqpi?$(Kn8?KyBB??,BBBO``uaa~H]~AA2uZ7X j㵰k3|[Jme񰺰аve09 Y/'z]u'i3 7=|-߇o= =ҌL#Os'"HDِJ摨p ?q'.ivYOʁYS(/[I $vu=wvmo| 6/ջVկ_շy}Z?K7؄c8q˽W-/bb(ؿC9_b%jÔ?`ρ=byԊQb_mw.yzQbyݬ[{(~q|G{װj*Qf7xk[z3Dy鶥?u:+2}-u+"v2tr(lİt9~iQWrN\'W_3ێ]f1cJFSG#H""pcdcB܉7S&ΘSm@)EL`gJQ}6Ƈ74|-rv~7w@H+x;P+McBm74WQ79tƾ[ZV&ߨQ0cߒB" vV\^Ѫ ZvE[%ƄA|QT| &M@v6a\YfF릝*-/JRMFL枟=dK'g)ZΔ{2y+kᕥ廩0evL:idp|B\5n{R> f}LM1VIDdvC fLLyM_L^E(1A 8S4&bOHMi-\,Dz⯾^=w76(SR_˓r& &O&N }'|Z,ӂ!4MGy3|(*at.9嬲,FMkή(m>\~jq* 9]`۞ (Խ1XvFuN')ts'G=/d -r8p>I$ )7\==tdf/PKH Eɚkf͇Lڡ|6,͍ q&c4AW1f9hTn&"*"M^GeTD}gQ_E5 JKKuHO<+ega=@-9||ޓ31kD@FlD +K0mI^"rFKGDž"" ]EWHra2Ɔ}h("aɹ8{R0D3i҈+@#mt3a?]ì b:a`0vq'VGD@H""VED PD-ksrtѓ]GeqtBfZ@U9lO3]%"5xy˨(\;QkDD5 B([xfun%?CFq<C܇rqy֜fR&䮈Ai -# zraW p m\gː2t $uւMպ4|TՈeEDZȌX_Kp#SI5F%kyH%jzPNMD^s*"bPDEDfB"!#"IIjCfZȼy8]tvwoc"L"]x[;4E21s6ԃ]֜[u9 x8))`mʏMiTDƠH[/Y~9sFA4}[R. kR/{eueږ2zGq==og,"x{ۨ˶n9JG_{ĜZҴJO7;g[7։;GD('iWm۰0|UU@""m!+3aib-rEbbbu #AcvU:KAl;^.zك9s0m po>Z-<LaE QRL~xz8\Hu^*K4EiD$䙈ȉѐc 7dWmtъ bՃ"XUߕyDJD)ž+&PDƠm1JDFzDbF,/߽1-)שPcƊrBAk%xg]35385u -"!"kaiMx\ldVHhw__8j`\s :KDkFʰ;@""m!fe~Рeggu-cYd\g)L\J@rpj ",7{ ,>>c:*T*XIR2;I-KEm}E{-"AɚE$.}6%Ð&XK26{zSG0ϬUx}Wi cfݻɡzP̮@a*̪ܸZ@pPxEDjUQ>s^ *ԋ bsc[Z̪&La2 Xlֈ `V8|1p26tZDd]w""6EDl$"E;M9뱮l\1/D)E½$90)uDyMi'<"kF ED PD-C/}9.-)|E[9ԸZ`I"R;7;1sYE`i|yL =ل?~?8Nc8 fvvl^sʤwto("b""m!]3m6Q63 w^\)'i>E]3uoPVP&{ O#"ԛc='j6 5}c IDAT0 ~7a&$sʝxw5e;s zO-NED PD-C:ReeemΖ!e+**ZX"R/|[{ EDni´q̝_%%sv"S4kI5=}hPDƠBQ:koێf~VuEcD 1:ht;FD(g0+q[Epw.FaRkllT11.$'DŤw("bkPD-k 8 ff=*!l5#_r($Ջy;/s::no>4XaYzKc^ByQ75S0L *,4aµ 2+gG## 7^.NE߹1>.Sb́lYXt1nMCX& aNsy^ڊ+E\:AAaaKX:'H8)q-ݜu9sD2D$< ٰV"jg"" o!!qK Dv&ө[<gbK/uz36 knaV\x_hvIaO" LPDƠB@YJ7Em¬ӳ8_qƖK[D tJtqM)Y>߮]1ߞV!h^gܰruy~b7߈Q^ea4 rߋmw/ڤwg9]3"X1*y.뜖8"UgWab6GRe,1@jVVBC:CDDRSSE,"2z* PP]qan 9\rsD H##Ѡba]jq*#YGJ:H_$'/nƬYvm=1wcD)9%HzU:ޜ&ʵI֬"sK#"Z1{rB)>Exk0< 4s!2D`bF+=c-5ruu"Iż1t͐t("m?ʖu(׌u@i X%RDDCHHF[#"f9KHL=0'BBQM8*T $dt dHj}L3pVji3+D2@ _’?3ʬ"2-p{xCw}bR:Y'[dt͜9 x#"|a⪉lNDDj\304("bcPDDAk0N,ʐspy8v\oT\UnU;} 2!tɰ\RS"F@eZQ֝_'ʜNXY%Kt ljIX>qㄘe8׌E]3sKЈ[mC#8SX2<}14݆=4x  V~5єZDBMi=}1Owƺd?V("bcPD-CPRRb_A!%%EEEdC*/;PdN"tPeBH3;AKCI~y;_X/TA7 AbCK /}*Rm]ϛ" K7jk_PDdn7Vz EEc쀯\!~ -]wNz8 k<rGz 1("R&$$`>-ѐA111lnGyj Vw7wqһ*]g첮.X(~~1S' {%~>Κ`/J<^SZQn/""x("u!"͊`vlO:.TLz7*`3nEFD怂"?Op8SOӾ..x3pdx<;w&4%d9' 03PKh""=|TWWZgr\lyB]3N!":#REddTWcdЧHνmWO\µkBR5SبfBs<1=d]}w0Że_]EDz<i 隹z R{I:tlurz诟wNk/Ta*~ǰ*Ik}Ӄ4="Iz%5A""m,"-"P׷W6az=׌P*-"Wٌf0ku'\17dB91iMz'خ98|(53«% *kZ9H*g~PDED3C/c9ߊ^]Sv!sNmTry1"Ci)m >G7i|Jt4Ͼ>: ?ч(E,܎v }U5}< 1("jLǰQ3R<=2twni$ /n*_1~_ Ϻ"W_yL,"So_sY$4rQfߨ"RPYEW%[c")&9 |wE$4=Ӽ)b-X s戬naBcfo^1 wvxzHΉXw1~{1("*Hǐr`zwk#"!~I~:E$,O e!1{4g˷5B!A%—=A=m^G"]3*^$yDjD$2OQk+D-tq(36dбh@ ngT,?!0G#M@w5n!ěPh""6ED3tIsfI*>P'=ƃʀsS:Z98X&Yᶲnd8%7 nnfLq9]+-*\3YHZD q<Q@|i+*(AVAvak"*2Њ<"]ZD$^/jc<#z1("j![\ ds uS$"SuTRq/4$"`-i5JizQ3ΎpRs9eTgti=1?QL_>¦uw]{Вe1>[8'\!_%:?n ">1("!Ciiiu)2ֶZǒCeR㯣uDe$˺fqgxٜ.Ip!/Lh«b&̜ф[ocoh][ 1O3a+na*Ÿ*тU:̳&"M"Ay2/ acIY2Mdcwp!^}؄VR8%QNC&^SSg&[9](mLmdһa'EhO$1^haȬHQN-ImЬK,ekz, EDl |RƉ, )E4W625Dž"ft_(E Gzv,u,$5Dl3;t~n vGB϶ ?)ћMi0x;OoN u5{1?̾<,"7 o$wLNLNe̙q;~>;s$V[%ftq~,"-PDƠ _6T@TT %oi̹`:f6c& | YULjznH̝X:%Wk V)U)9jw#|Gfffn 吝ā`Uv,n ,ss*ZMLw g%l*&%Ȳ-_z:Rr͌E$J' ,C߉Bﶾ"D^'7 熡E.Y'~T5c""6ED$TRݣH** Ɓu#1k0עwOI.d5Lj,?2 xeVM.LƸpk^'! uDD)<>1("?%%'Nee2 += =߳\3JKxb Y̳ LhF7S#!oNNzW -i""-`>fy+0H7GW}"` DOz7K#"|}:ўɆ5@F=Fs"'NH7"9@v؁H>((۷o֭[,"m!I._,KE-FuOnODd1'~HHj3ik2)шYDb`I-5-_h.WLv}ݴ4|TiP0ED)؁oƍx1dQǛb^n?{VˇAF9vt_|-9rDwu٪͟?6VA |n?q?^?"`HExex|F!!OA-_L_qqLiPq\+uS|^UWPYKIsT`R/;w+=YThR$]Whu+0uj4[άV Wm+⴩0g8XJ`G@Zf Ssv cf9{#Njrnn;$S'~&,C!a= /kVC>9$fK.NƸS-f_X DWQ.h(piЬ%b7`eMըnNmQ{P-dĮ˻j]Nܯ%hQ,,G$lgyZ21_8iIǾvH]ȿa3cR/-/.7 OM2uOC$"daԨQ:4}0a„V_\ARR.\T*??_'8uLv%k&QܹsGG>Lٜ9)zL_˜&z*rr/t$$hʇ,55K-66wjʍ`nܸ!EEEzB.vtC)Aw6"1$~GII(쥥|:#,\)H21#!#l$lC}e.yS{r-syQPP ʔTyoy}c!eHyDD#2qqzʷHWxRMqP.´",X,x.Z׮cgN,:_N 롸sّK\zL ^;PRXdM86}dvII轪.FEE8{, MwpVF>(SgO;aS螆ID$McDh xG"<<\XMΞ=+ɸ`DGM0[ƣ!rw׾8p@t>GW| <==EZe,;>if_><6 )m .)ÇE>Rs=/aÆs<˃sΉ2 }`vR)ooo]|ؽD(O !_Rﯹ Hd<(|%w1}mDDBBBD/Ç_E%5sx3 ʚg;Z<=(9: n<;]$kmsŇ5s9rrsQZX1 `P}Ave6}VƮDtTh3p"Bi#+7Ā+F l? ;d: o߉Kq1ADNaֵ(/*K n\!߽#G{s0$7)o~CZhz{Wc?  </o 98uw ơSe70e 9_~g"/'OާK~` Dع0!CS G:5%6B]e2kf/J1G^E>(7]$r>NpsCxn8F,ؽ!B{w ;3[^n9ŻȚߍtU :xF"b#-Ǐ?{z$JYfHNd x7͖u|ek0u“@{oeƈ8:nvAZo;*h@53w4E9,+L#OĵBͺ*p8$Vj'*; _̤:9x2.kʀ!9g Ms55o؇ӟ5r쿲_0@4@#nt0ƁƠkf~U7M29pkbh24)!#V}qœSs!C^p}>-I_&^6-24":;Vc btٟB_蚹R)@fƅ8; DjV~Fc5&#$ \3;bv讙ZeX{q.'w\w,\I CA}S}1\KH.IFg4 Ei (Lw4a){3g ˖itH׌_ĘgDim&2iy!;icstw=A}m to?5ޅ`UC`U.z*#U*#U9ʉȸ VdedFh}aa`U{w{ڦLӃU/ɀE`Gy\lU$O V9r+rEdiMh Vv5[9Fd0eVfmbprC+DO8ZȤ Ov">]qp2=S<']fr2U5S;geQ'SOʠ^)C\X9LX#yt–Q!lN5.?\V]v[2XsaAeX&[~fNff<'/UMrJ+UyOe?A P%&0.ɾ/3,n]}d}gwGSe !o] tȸHh cq{֐ E!& @4w5ٛ}bJtJ' u7dV76֥ +5O264a6$`SCRCk]Q^]Y:eڇʾ< ]˗k8QMљ|8""!eC ꉌq @b+*LDq9Oz!p /epo") 1$fY駻iɽ@T tcՖ?i2.EDyGY5b6>̪Gmh0/Pܔf"YQZ LhwOJD8бfһIDB""m!]3rBf4H901f8fĒN_~\!FE~t-2IKvf}R"„f|LYDZ@]DYf4("bcPD-C2|Bʁ9dނʦ'Npx)[,"õ`w0;|a7 "L޲PS=R?O"ủNi}Mg4("bcPDDiBƲڣs΃qrb^H@zq sBQz*|K6rXi UC22jr`R3_qr{nODk#ßE^ӻ:8|?97IwsB;7""F9M j^wJ-ʣ,"{c*UbteỒ q"3#'r. q,杜'̬cJ""Mc>oL,,"1("e+PK("Aʁ`eVF=/@ ɥ2,S$"{EMٸf0^LG 2l]a> "xWtR˨k_RwZDx UxL&-qy(S>"B:QG #C sfI {edVGy6zV`3Z=A"" O 9 :$>>1]چ >5`*K/lY|R1lE퉈t͜iO5|E=ʛrbcgYYNMDńxYy{vA8bbɉh{k3rXrFiH~|Yy}Wi"e5ZXGC:ZKvK[E<-z询Zq1qq*^OA""m!&T'X?Tk&|'fE%}68׌O("bcPD-EYf4H90EM9ɶND:f 49mڎ0M۫թ,nIh,"99o:=-r,]CѠAAmm-[uH9:։<df Q7|&rVYhwMCX ͌DGDD,.GỲ-DZTVVb-rhPDƠH[ȇ@([BiK{V-نdBl""]3Np|;5"RTU~r;w8cOafUmYDFz&LlLh&!6irɬć>D]Gdqbxe(ú{Zݺuv="b$^c D}}2P Q aeEİL #d@۳w<6Em)هyyAXGr:OXDLd-8wcyX3!Qh""6EDB~0jxx(ۺT&yWә?z0 7NElT*9[DV]&YRoUU_ G]5%ŽVZpp~dI=Ywl:35JޏBDHlH1?A񜻉P i 2`eQu"BH0~2|*[v8s[ňl\3+7\шlaBuVBD]3tdd鯣6"80LwDuu31("S^.cqG@˯[*#cO8ݪᜰykoCCQX/mMD@R1պ)N:9-tt:yR?""WגAT֑ݝu4mb5C0b󢴦Bkiȱ!xp%χ""he*]iC""m!]3Lfm6QV"RT1bzw\@Iɺ٘8=XwZRS՜uupALT'::q9ӷy؉>N_'IHQQQKɓK֐/ׯYkp#XeLZIN;&\,9w0DRqJsp۬,Yfv]3Il4d",K^{8 -N; 7 GiyD,""] ABLtt|Q)t/("b %{o[`6YΥHkH@QF4ms1*GIJUbZ4gh]˻&-'Kd?&1Qrkj_=5LD nc_4 +-"~~i{`Ѐ5kAacdk)Q\ \dVfݞED6r'PRR7/2g6WhPD ]3|0۱=ZXE<O)fA0`Qf"BB!A{6(~_uS",=Lxx覡"'eE矜Dm4ogib'I~QB1* nZ4\(mfc$'^uF!PX}PwFm<"Oz!///ʾwwmfED4("b7M䌰mƹ鞰)ذyfO KNe>Z@osNxgdqFY}5!ڔ8bB+1F$99Y:99aƌpsskU4ΥHkȇ89CX㗊HAmZrO VE$,Us8ͯ Q171xXܩ4 ;klVYnptrngfDĘ W]`՘Z{PD #9Z .D>}h"5`~QỖ""¨5|7@DLL j/YN8s%dEmS<"2Nm.ѩwmg1n]6lekt[XdgtӦMt," G g7[Dn_&\B0s#"&G|W> N)"8PD$C7}szÇNN8Ql,"!@Y,EDrrPYݽSOED]t1'_6[= [u\Yշ`>LĐO)%f)InDDnWZZ[Gy(BE""Vcg̘sbʬlaIyDJuϸ̄f\I yDLzw.낰l$W r0 /B.fyD#$=O"$"O̳k`r1g:KDzD}!N4FzSw&w|vVZ۷o?r{[-0 (,,GILLՂ_g =a*[3<=RyDn] 82uͣAE 㽿Qbirغ>M!p:'7p9#z,"sB[^#]-aia"ģ,"Q9njg:֪`eAȲ""zxw /`РAG߾}b^fzDi:?DdMu*~z[8pLru&ҳKGYD(ì,lM̼FA+PD<<<0p@ >;w]4[Pg ={tpx*wʟ˅c6+Wļ/B1fV}fu"1NS5s*]hb~ דw+R-6 gȬڙwkf#NXk^ge">/^d L2))yCޏf6nܨqiAEE$kF""VC۷㥗^ʕ+źyci 2QV&OXb|?IBZTh 1*_ |5ɯ{?{VU>s{;3=={=f 9+b,ʌeŜ1 JNDɠ3(d yybsPAs9;kw w+c t?z*K'5$m/Z} ӌc4cмЗ2ݎ{~^9 Ip<ȐNZ.0,LŢwVĉ,~L֬@w$c<ƈ7P]\E]r=;co؊Y Q",7vK{i&b!<4c{_̽RΪk^>ȏ.4DL3K,;#JdS-**2U m:78a} ;Uފ(r=^4'>|G7?An$o*T9Ԋ&"2ϜYuke9a UD(R$"īSqvvN&.fĉM30aw8p >#|xwwY레_x̠m_(%[\\sM$U\_=ۥ|'L7'4{ZW!"U IDAT,`MPPΗ\u|tw MDzΝ;Qu an+B,G낵f&_k^-HV n2Y'e\|0X xYh"Pb1bHNӌ2(:ׯI;TT4VV*5"e xۙ~v!ivFnZ#b uU1/1115"0,5!L>i$NJe*x4'P cTIh8Z#$`ӧѝEיִԴ&2S3wk6xN­kp>,<Ȑکe9>G9x JKKE[3HX>"X !x2‚(Mʕ+W0d?HQN0_~"pE2p .lGL,Mu6qLQQ(mO3{)y1v-{ֹ96fԺ$<&ᤢyTD݊mi W-c ׋uLƉ,1[|q "l43!pAidIf چZDՃM"2u(1_ގWve$"݆H,#yY^^`7ED5THDf.%iq c%6 s/|m^&]m:ѐsEZ"/\Ze;5gwl#YȗdMU˛@s ٳgH[ڵkƺS o1k׮N? $oduy ǎ?}4+E-ͭFdVIm So,*+ė{OBs}!r+DS*S0mķ"+QP$4" zyr7}F; R6j%2ب̻>b={M0sHmK'L6wܗ~QGSbå ƹ;7Nhi\O,]n, sry6:Iak)^)MoqEq4X6#pbJ<"6le  WjD0g%4T=j15Qkq j`HmɦM8 5GԈZv{`wn~!ٴxeqn\t_XPS.CC\-*Bv&zODBih2PԷ`&5# u~o"Pܽ{>V\Gb0a QWXhN*)^a666,uDx̙3EMbb„^`g2f2jhϙapu=tDܺuK.8$۫$H WqX eX#!MNj;wbq6]#\{{ X+uY)>nBSC텙~v )7 p ,Xf:Oc"|g&&rqLGVf6?̠p sH*KCܧ)I,|KO:6 璥 +6-ɤ&M'Z ,6 C] mn#-/ n "QY]cn\0k g~_PXŴ͓Hp}X .Ff9(X^=jPfcsDyϝ@\6q8Hp|TE:sldѻ1cƈsg?Q<ޣPn)E 勒:CM *((0ʃm)^Weex6C7{۶m"ȑ#7A,ZD$..NgϞ5k,b;vEC vN.SδyzzoP4%l DEI˗$}F ޽۸]vԩS፠ qMJ.gMu >~C5XL<'=^q(f@X8pk[+b;MPRXCi0dE ߅Q٧2d#-Wẕ'$ٸr -n]7k"_3ecw:$_1>#N]xS`}|f"/#yy $Hj&9N¢ҿ"4[E|>s>z Vא?N#G&,[  ߍbq⛈op!ϸP!: GDd(ܴpq:=GlY8) bV;3gm6 8&}v7}dKÖ[ 'lٶ q<8ocש]pv8y$N=!'Y>cȽċtfp50ŻɒqDDhV~Y|X@&uC34m9ܧ 8آ%Oą Ĺ\9xm j!:slTFrl1˭2󞩜InF)?qhѨ~ SxH{r0uƲQnY%f:fl9`;:B43&p Ds"6\1f&M~+__;ӌ-nId֙8 pAf| κ 4ͤޗLla,f\a,$R5ilaBc΍1ڊ8!Qo4ͬY7Nv]k&ȷӍqkL3!vƁx>k"+EUL3 M4ӃԊPm7|pYRk* Ue'я~$*m/ge+#!w_SeQc[[ҙt1aNޙbH*N΍lsAXɖmcb ~Xv "$e~&ɠ~8\rvCsP}rQ2a1n8ƱcbRz6e4bE  ;(%K|I(9q&1To]D4ACVU%A6FKB^E̕a4|cTHrOYr kŌa]xj"SZ3:;|W;eCu_7|W54=(7qbyUp¥ rPr=EDhkc;ҡ3Dș}%٫bݥu”B֕j"FDjd ӻ]UsJ99%(f{Ќu9@L7V=ue.$"*jBxv~fLD44^X ,~_BDXKRﯫ[l>Y&D\.=#(#Y1}%nM~.oީO+z DD%4;:?Yo&"JNGM oՇgD'4DJn#eD>jF-1luӉ%&'J5DoxKݕY52_[!CZ,4 LуDy:?{o&"J6aaaF4&"fESE0,1N4˨'Ng=Ț<4seE[fzÖ6]XxDU|zؘk[HafiD]o&"/ MDdDŦ3K*cUng>f"bine>[m91dʼ/q!WݭQْ+~ח/"5ӪjA=w9b۱3h΋@Ɇ-FIP#^4FDB6l؀?":35'X#"}Dd(i&>036ǭ0q^.z}D^ eVU#|h'HCuɓ'?ȤǼ! :55Ja &ꊿ/ tqZq+B{b,4":jfw_Lc# 9Xdgb[WvLDQ3pLp2RעFWBv0'|"Cc 1aMV3߇ cفJ* 1A1Ο Be#byDGJ"!&_17M|/DDBVmD #9%+?A'e#|<"OB+ :cǎc~~QJlLDԵ bY+7tݜD Ir}Uӌi;s)׵iLD{ܺ4sԈG޷ [9 ;%0$" .ey]'{{'*jȢ{,4#HCU}Q׬Ye ˤf{!&ANsQ&"`6t2Ͱ;rz5k׊6Hh"bf̘49vFDDdŕ8%Kk֗W#{: u" K۱.A<1&Y}ׯ~=u &25 "gX-{ֈXBM*FIwMD՘"Z. 0C9h8x ;5cFkY{i-NgɉCߵ #I|D^D> GU%/y#mn; ;;h_)½j.{n Aӌˢw9GDC@ A|X`#rJ8;;t4yFdمشohkӌԴT<̆HR#}@^q%LA ۇ?\ƀ!X4El}eTߵJ"L3Wf,L3L1of0޽{E[f$4ȴ*JȳR[uw3h{Cqq]qR#RVلe|:L7a؜8ٌSQ@fr`]Jaya[]'"vgٻSw6Kӕ+Wp|~41UbbbD[xD 4"wqIDGGz*/xgnwftѻW/zWFDGl$1?wj[a6͌Zz #VMD^蝥xA}s6&({lԫ&Ce;e`ȑ#E̸qDUTxMD,9pa&]Mq*T^Y_) Q#u+Jl%Kv3|Z+*;fiDLz}zIއMeC-&|fMgojQ3*zgDDfN-[5"# Gم}jEG(wqEid'E KɆm,Ih"b3h8qB&"= u=*t !C`ذaׯ_Ǜiv/OԂQ5ɥɢvg˺4syrt;ifbD<\fi@jDjH9c[p}[QFD^] "E5tχ&"= ˼!-Bx4{e-e4aSHxۈlsR!Qڻ4&X6eьra*~#1"aǶeVmzw(LBxd>4Bz*-[I&a۶m7̷ MDS.|5]=&4Ӿ`o"VxԈl/鈹,Uk^n""4dgxDDWFkD̠,ɪ=4XvFf8rcܹBcM3SnVM)I IDAT3.z*xR7?E *E2&2R""޹iӌ%tѻ磶kֈ2mi&"= KDwҥ ͛7Y5y6Y E[kDD_ s̺˰5F~qM𧨪oˬ4"vpOK9D)D jD[EBF!Ϊ"M2kX31Ŭ ]Xnx>"5e˰_Vm)I@4ȏWS |0o6s/׋_]9~h/I/;;D&U&4b5[5"`ߊ*9kE::8'XoV ӌb)އ 7ҲyD_7nf MD̠k] MDzF/>|G}\3DEC)~33&.>YUPS4ฉooa: %MDDDB+;#?Wϟ/l:$"NbTE7Oc5:3 ?) [?Sy{rMN6"j"JPXY\u&K574S)HHg.,Dp<?oxh"*L "(3󠖓|""zx1h"bPo$|(7g᫯2"S:<]r g4w,О\5ɉ\y47Zퟆ{mΪ2jmvf!8'Di1di}dD/.O9nFy6FG/.0q?}%U>KD.5"_E{ic=5"XԠ$̔ HBBOnׅ&")zl z.|wXqk;P _$W}_쟉OdMd.r*rvHG9q+Qii+'+}ASw~,6ݎk)k">b]eٿ^3u"wwޭwﲌw%4( a' ~kyDԾLDfkq*]Nniyˢ==t8Pj8e"ä'z~GB<" ߝ%"fN~4|\4m$y'vkdTFrRE>KDi&Ʉf}hh,4w.>m3sR‘#)ީI.r|8s暸Ȓ[|0`d) ¬ey,4SߕYD[x珥$+JepI_HY<Q;'O׉n)ޟs֛!\$4)))XxqK;EVI"`ncQڒǁu"&=0 Gp/@D9 e^~*mX .rY LQ3bݎEiE:QcӦMS= MDJA'wy'Nׯ_WWsV$ۍ-2;ύ:3R [GE4"$"r,j̰77SG%+s*dRcE;0tOeh :=u 2KfOjD(CWL_H2 "jnyD]ܒjD.pzf$M8XM`=39rٳgŲyvoՈIbQȹ+' :bhW<`Ȉ_EΪ (tѻ6ȼE3"|LhF߇cFzGd8vH^a]a}yr̵L>q C+?32~qR%M9+󦉐'GL|LdɞY'FD';߹^43RhDrY9^>jſ9z%zߍ;%{ؓʐ}&$Qds"V]jj[q + ' ,?Liկ!Q;vtAߙ-[6Hh"bPƗ3|wРA,oE("4Ց"񻣿3A 9 JamxK˱~ 4U. ɐxW7|t#$Yh(ݞ#SDGTTJBӦ$AF]`j"~%IATJnG $I}%6==]d% N2_&"VE2XQ !5Cu^/k]M̜8( Ϭ\F1Ek;3Iq29@YF'2FG|LfE&2hhht4L :T3y3X`̙:Wш( 1MpV]dJ4lD|F"N6FFnd<ЉӢM3X,b8?1`dggXԌZX3gtωM]NY)^HqLwMDYvnֈԶiDaS&yߴ쉊GsƫWN"RX7o ̪=MD󘗗v+/Z#b_0\"ںHh"bPLڛ-IBii)&MM3"Bl+u|DR#R$ᐰkL"91isd^i&)ATf̙UCBB$ϻ-lCɁffa&"fڵK9OB+ʬJ'/Be}e:/a y&44"4XMD,f-NgJ'W5͐pU%'X[N\Td!ohȮloшPc`G6hӌFgB+ƃġYuPXV.2>;wRf…߉ڷhd*[-SߙQ31 ] N:-,o*;$\-HDf2M,U b4C^`1[kL\ Dq u.$"..l<驪Mʋ+q8h3 vKz@,oL]Y/#v^ىe(33Qbܫmb)G6RLω'1V}mɓmK91外rDn [o[CND,AԤbAD,JّP{VtLO6|;EDdPוcRF$l\F"B2!}id29' :'; "d]_ 3JNL,6 s|'^’b[շ̪Ԉ!jxlw6S^^nL*/+7ILMQGyYyv6d~Wĝ;w o֭[ Y7ear&'7&C jD-7qϪC9- 5_d,Om,̽8X6*bbD; _g_`N(KhYޙޢy7c=D17 [9a?9wH-OqM1xACK9f3EHB@ߍqR#6翄[Pd5#da]SbS< BjiDH s1YNMow> ɌƲYpԈ$'aY#bj'7lK.'ea"ToDyn+BWӈ vliCI5pT7UW$Fln2c%B=g#؟^8ѦV.x1;l9<<==_|}j b cAq צK+o"(6fK.->C:$/az^^^5jlll0zhQF9s户HOClT6V7roA**~3YYnF~Q>8Ay}9jk+hxЀl ek(73fꮜǺEp$AA3(·3RWBS R10q &Tʚn4'%ۖPZ]n]oJO^êXWgذaرk؃|`A<oM| )xprⵋͿ/Gt- ƌ͌N8qDn`ّaW"R%npxh f,o|}o{() 9N{/.7oreOˆ#2`ChP(\1 D}a8wTgbA" mÑb ._cth|>s1{CbP|i68| _ϼPP5o0,ۭZnm9C҄{wc ݋/f|-2ٻ6"%;EmXyTDG⭯͆8s,s3N8UkW߁~(/CGsIjBCzjx}B#iӰe8^r٬Xu=Ƕc:o$;5o߾H}Q|cN}6Qn&[{{{#ɓBsB׈ǎcǎɾ&6ol</ij~## NNND ۨIץww(Hxmj۶mx3gOุ8ݻW9PjdmF'N@p|waL(Xʃ׍p?.ܧ צ&HޛXYܹspvcIFF%^`yͼvv1_6p_'c0 c{sS`b$kxQj-y]Ƀ%05:ZQ)Y%SF2gjZZ^6EY/())I .`8ܲ/qEXײ ,$!<7}>+Vp, &z"4"3f .p>dSN뼎 7&J݉q$Y[1hé'~X"*ue(M3\vhaYY>w2jCLH;cٴilu' 3&E="6&˖D,W|`cc}|87y'| xFZsfNdmfFk̭Xkz}G@hANe40  %B̲~]) ^f9d.,'UJ3k}lNvZU&8z1|3SoqsQ+"M=򯑝&5C L3ʼ.|NmfFz!6M3:9O; r0w4Ϥ=u%h4tJK1wJ;no ۨ+fV*95^[glR)9tC\d}ѻV#dw{OCtk աvHiD^$DyPۮ2 IDAT] ·ztnCNd4!m_(B4y2ٷbai_fC]F.rRy %: H#Yiw{'~T1r2Cw%4f"hWZ.p)_M|}Ui}FB+ O3l/$!Z#l"g vJx'{ wa;rv8:-mU"RTX(*ZMD)Ī"auV9j"bUyMt|h"bP`:b)ΞYf<݁ܭñbs-NgDY3/U=?4ITvKDm]E﬙7Y:PVv+@ 3Q".bOQMY#/`^ߍƙ3R1O!+M[f,Ss[fVewKYEBJ6#\('F5(G`Ψ'eىUYaԌzeO~m"""蝄 ,riHG mΓD :cAA`$!i]Z ,5S|T\/9n鴃h 3u-eBCuaѻ Ag:fG~aviߐɦ֋Z3EO,cez0Z}'/O[F^ATYEMDHCC󠉈2* /]yg?5"ݣYqaE䢲D~ih̵c/Fi"%[a\+3ZV}Hi})>9 keNK SgVf 0 baj|Ԉ?'c}&q,ZOt+ˍ,_BA1MCjHhHh"bPS3 8Piβ%j"l"bweZ$i4Mry&"Z{2{G0WBS!ϏOaIDA]S8.'u&",#gq?R~:<.]4bmr?&BS#/ O&_חs~~+YUf$,Ӻz5~3L6Ihӌ&"VE2X@kvc@hLfVGSI5k 3y`B zU1mЈܹwGh6 fGGP3tbFA+@J,DBiH3Yy'b0wy)F38 X+HeÛNDiDD9ma=g9ZOo艶t4#H":)˃7c 5SnI54eK}an~^ѻFDD514c~YAxo%)`nH}FB2ܺu 6664hЊ/K޽['43!4_GZ78^#ƺEa6$c¹QHI֘6 C' 2( 4Жw}HѻFD444:06m̙'''W27ɾf">34¾B@[ [Iw?,QU1th M9e%ߖ;mlp4" /4w2DDdV,cYg^""B{ET5Wov=&<"aSe[Z)ܦ o}J4YLh  mDHӍ֮]k n]q!"exyMHD~T`zɆcۇױ@X/(<'h~+qx%]D^x!r*\3.b$"=,޹~-6}Dz an#DvPU5"L{<Ɯ98xJ(m,|iii"]..+_"ұSN $45 5_8rQ,?J&je9UIU %juez,qQ}FBꈟ},X۷w'OƦMD:ƓTeۃos}DmIDLor}lX!>vð`c ۲AvlRj`1a̚,2Cd-|7-HU̪4876͐< xq\{IP,""^s36Dm}cו]ؕ 'N`S&e{sc])g겏X#9zؖI͎8&R54:4a̙3";0 o-[&*,{]t;iB͢M6ޫFDD$|7n`iDžtnߑv~b\,t ؊ Wz$Y*Dѻ+p,7}k1( X*̳PUZ{OqP#BX%\46lZ#b'Z:9Z.1tY80n7^5 _ 6^{VH]TT+i^+1@dE@Mqnn߮{kܠW,zd׋5fZDt&*ӌJR7?lnZ(Q3S} |NpPMk|#+Ąf#BLѻ5Qkp2EV;iӌe @0lfyCCCHCwIH #|$75HcE0IY`8tv[* ̘4Bm%L5*|WGJ!BiƙU4"Wصcm k "?&ŽJ|W- %wWf-3N}1tFd9s1R(#\\=1 Km1gUF}+:a+Vߵ " N-ڭkEM3BD,dJ͕V'r9xzzCɁʓ~$4cL"!JN|GEnMq'@|>=2yS3Ca6h(]eLhu+'"+CV1QFF"kcti>"zh"<"T#GDD1yEN#G~F$օojk3o؀v:l\*t4" ,=4ti"(5;ܸqC:,c j[_fMl͠mNY@?K1\$_ٚ77#[Qm5y$q0yb=n팊 q*tȐu 3 E :^**wJ MD:jD GY]}͵ s.lFvԈW}0 lx!lwQ3XtC0tU;f"U5NHa]:c ïgЌXJ#B,^`lG\.,¼Djx"2ݲ!Er4~1{=ohhht4cxFdOԈԣ}>kœ_-r3(_NI2{.k(:VHgՓ7<҈,\ 'Le%Z^ӡF SL3&\= %j Lesv;[d]}^^(Z+;Τg=:#sS!ܞvoP*uo[_#D[kD`;oooϒ&"} ~Gmoכxƶ$e:FL t\b |4ePFSΉMD/[E|DHDXc j;LC^UкT5T@^IH,'YXtqOê5b;͝{w~3\ [XVW&<O2Uu\5?~P2`٘vu(9B3XYj^uDnLnW6x Q%Uƞ;9iaocMFa*UϩkDi&kM3/ t'L3/+EW0oKOCCCHif |w1u<"[enqE~U%֊ NDFdyr 'ڝGYQ)iO8>C _*d8*Y²~5CɅT ס䐖s<hSRRD[EB>3*e'lhޫ4MLhV-3}Ga|l*˄fϭCDa^tEҼ<!rFF񽶄f /Vv"b$4^SiD+F"D}6; ڕ"3S|]ډ҈ [qGE+RF"]2CɠQ|,Pr`](ItŤf&"} U7.zR>|Xe;vuwχ.z$4cD9U8{DFDBmϐC1R#¼uX'A.1X3DD̐wD;4?TLls9Hpt}I)KDDI\R]D<I?%e. Z"۵ ДLv&!a>EQۅ.0jb-hgmGuU *Gv MDP#¬ PoNj6K뀯_X#2sL3eVC&"ٰYsh>aDu?RTn "3)A0ukkDHTfUP^r]dh5~͐R˨F^rpסk.5PSuL% MDpeqN$v|gtCgMj"9yQ8GÚ58v(.jb XA 7#ŹŊoٌ{Xhf,ͬ$BhK^U#uc׏s%qK#c1=k߹݋BTTT/Cɀ>~Pr` MD;'M^RˤRIJILbbFqI nJ\BTVّe@@v 0 3 00 [@ED2jf5͹ssNw\vmHIE++'xK/2kNGн-j^yp6.D:y}xC[u-iYb -gAm;V}xwyt]3'l|y!$;ףz8¿vBt$D2FG"]3mq]31ẅ́f<{s8C[)lfZL[gu1|ve˖l:nW_}UxT'RHB$J%|H#h`U8[-[JW}?8lA{GmlzfNS+EPᙷ˪Ue̙3n"ӦM i ёH<}W-s]q/=c=4<Ŷn"zsk8LB!!1$DJHn꜇ld r, x}l2n۶m[v`UA< Vu/ޙ y}U&!Һ9=5{*33B@6.]*++m޼y۲aРAwސK ")X8!-!Rkou_i|y7KBD!>k$DRF\)655bvyDZgD  j {>\ٓK q1~t)|7n8볨OH}]m޵uGw ;jf7ζ{2o'mv#hYf7ϸ9rw_pJz?׆eOlw5>zhqc},|ɿ>%fُ']m;9v[/\G->Oq:>1,zWSSsuroGf̘c_֝9h{;c|'x"yTt{;ǰ]>}r1l2Fi#3B+M6\*aA)'y衇r 0F5:O!vsހ#C4Q熙7ǒ홪gM=Dޜq=w7NvK sOUw̾ŶMެ1\~m=zKCF}}z-ΏvMn}wY@A~ٔ)!N|uD+u׹][2a{I::8]bwĶѻR:{.(kDfӧos5ؒ%KB!ҵkW?qU̮.=ح/jSK^=Ϧnj v̓ݳ9؀[ES<"sm6l0b6z 6ĺ/ưì9^b^gfk.bgڥC/y0pd#v/)uSlױ]6s&ΙĬYv}3˟ k&X{e#/y-lؘa.TS6Qod?jUVQUa'L yÇQ+FS.!؄ۛ΁wZ&0qB8?#G۾ClV,]߶1oe.I&Y]M]r*'ٷM<֌z]gw̺l[`/ }MhIX"גo7jԨZG N{͚5!M-_cdž4])0iҤ0/^ݷIDATv'ax8n{R8ؼys=x _\/1=ztn0#3 }J]w6롲mܹ%@s\F`˖-6aB`o4v%cƌ;g/^:w;WF}fyxO{) Lb֭ 骪 Zf7.p dTpB{7rAxϕ-6lɓ<akW[g֬Y|fp{8~=,X~@KakZk/waM}9c۷'|Ҥijk!x^p+.eilC>xww ۃws,"<#ǂIcY_%^l'W!ǐs@$oyA<1xvmuȌq_(>awq\7+m}z[ؼ֯^ol V޶6`˫mxjVؚklְjj۰gUUWw6ڶ۬Hկuxjz˪m݁uuV]^k{85klU*;ön:۹+))<<߱Vկ-mf5dowwkmcFV[vկGwXCS5''?e5l ~UTYz|yV֎눽V2 (?z4ںufk>l kl5mMyևoeUJ*/djkksw!]b{.sr0m^r^~@큝\ ?"Ů {SyE5{ ك -ip) H*&ܰ Pۃ2c^Sٺ(a[=\da7n̉VD#4\|po={n'XCH=Sol~ pʳp5q ό{+ó㲀{t{_qYwm˻Ֆ=3ٹ=qY ۣ s E psOA7OȌ|%_xᅹ>zj; Ǐ$lk]CYJQ q6]$my0\&utr| n~غwnݺu++ҳg\:oQe;cti^9Nqo+`Փ[)ws1z:&ޯm>k_۹8,vĜF{6,egu[_US?@qw*Pہ>hwm6y}_#]ZiXh8黩"nŶNDž}T q;0ԻVkVq7c>$+6i WLHƐ) *quABEw&@4^ +!,K "CBD!DGBB$cH4=j%d 遺d2<&l/Ǟ]$D2H)5Cd?w͞v s1]g!$| 7fK "CBYE#۔GvirdRzg$D2BHƐ)[%,suC q;,]4A]P-͛g iyD0(~̙! !1$DJ )W@RIp;AtӦM۲`ax[q;L4) <>7n\HI"B!:"CBă+r&XX"m. ]zg䡢e. "CB/8ׯ_"b&Ǝk!-wr.Lݝ5kVv0`@n*<#,(/%Hd ! !!RJH\Ʌ;pnǏv8z,XlKHƐ)Żff6p=/kѻٳmԩ۲駟֢we`ѻ{,$D2H) ho:n"d'nk1BZ>Z( !!"#!!1$DJ 6بQBZnA4ۜ9s eË/h{ i]|BZy)AB$cH♀8>_1!, o2۷o/ؖuWU) p^jUHI"B!:"CBoв?~Hevx7}eʕax[q;L>]xɓ'RHƐ)EBu"ѴB$D!2eʔV^J"B!:"CBx[oj$hjy4Xuk֬`2hj)"CBxѣCZS1&L cgΝ[-^z%M-wV^JI0WlBё" ZeÑ#G=m"Zk({)4 . ")=﷾}Z޽Ç7H)n7m n!CXMMMH˝ˌ3r3 $x ۵kWH̓ӧOH+/%Ht22|ʋ]__omVWW맥帞={nڴ)T*Y#|ZI?nK… ev3f i*A1"M(\S%Dd BA F\B$QRpTD!, @̚5+T.bR~0L#">5s0aҤI Ҿ}+ \ro R( D~YEEE߬&N>Sv 74vm7l=Xq<vlp5C򩽯|XXK.ߏ뮻.Stp{WBFٳgۼy e.اfY6`]>YI]2&i+`S7mm\7O\uFR%Dd߷w}7/~F !䁸YHH0xP/  UywaW]uUA`N?҅mnMMM>m#fϞ=m۶ZZZBbwy9]OD&'M~;=x9.]a *e+iI\oJ*T"Ja?? ,ڮz_bկrz> wa|LLuV?1Hw׿mYxwb0n蒡뮻׿c+4!`e]?oGzWErK-ƽeرo}~YDlc`3{vm9ʾlg|h!m? _z#0lذ06<_ųiB9LyONg$B$e3HCf Y}СC e[. |lM”@]g3#.cXE]dׯfL K =  ϷK/ yst03+ A`4/G}OyBInnݺ|2)mv{!XX; H3ƒቤә /,ЫWPo Ko :TXx~=c7Bw v_Ҋ.JXjEsJ?׾\>z衇G E )BC T|q!ݯ_0q| ?ORu|?AIC]+o@Yy!-]܁Zxq-gq[0s\H'r(.T*X|cҎ(0Fa;J{g 0x gZȑ#駟z`ulߗ]([|AŹƃ38UcłƷŕY~n8/A&%ߏ(곢-Mm6d^FUxAW,Tpmoqcr)wUڭya:s!-Dڑ"E$=`::Wmu ЋׄYrf+qĞcXea !RO1/.,ȴH"g6×f O5o/?կ}^}0 ӽ97VT0i߬tMjLMDl| 5Ę@x9kbD{8 ]+"DEBDFJT*x AAXR8oAT]'#u ^~!~XH,谠Y]]](PEjXX˧n8<& $n!y r29H"<P6*@pw}@p:b nDv$P$ۻw\.ij'A|@x8|`UU Ģ΃wmA4y# ֮t<&>0!B0"!"D1xtPA8e %!(txL/ CE"./ڂ ^~Ș[7C\ UG߆.Gx(tVpEM!b+B%|:^fI#!"D€A@ !jAa`-cPƄ-/B p Ø @7 3vDi xG8bc:$`S:õ{_5Dp;>^1"e־?ZA)qc^4}W)8i,Z8jxUgۋ>kd05Q={&ǜ"BM2 m Xww+#k8{?kB!Ze\oq|Ǖs{z#!"Bd"~gs\k7OvOBD!(éx(iMPv\kom^d=h ! 'HOW,sx@ZyDBsxNUҖGdr*y:dޠEm!!"B&gmH!xDy$DBnH!ݐB!D!!"BvCBD!P8( OIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/graph_2_ex1.png000066400000000000000000001466401153663664300240450ustar00rootroot00000000000000PNG  IHDR^5N pHYsaa?i IDATx}tTWg͟ן?{zgz:vmI r0nc181$ш @Dr(_>:&6ڿcpmFxmߘyq0FqHR]rMlI]q+Xw@QQ4}cв0JÇ bHII999 ıc:rKػw/;`_*,]{/Ӽޣu˼n:KZSoWAA'uk{5Orٿ:1>}QRRl_.",)'v(,,:0ϲ2o߾o䞼<<3{0{l?_uk}ii\W'\;ŋ̃尓kMڵ >؇񈌌Ν;Ν6WGar?AO:cƌ.\kƷkYϰoO{c^}5~_>iii Aff5Ah+A O~^zI&_ؽ{Lw}78+E-Szi#**JYU %K?rw5ߏ˗/Kv{4]\\;vԩfwl#Gԛ&㷿ꐔ$͛7,H\(9ss}СCD ~Yu]Ȩ8(vAYkuKq͋/ڎ/rMLjNk..H'V,Xl6fɥ6z}TO={=I-Gh+AWĈ#0n8w BPP>@$i.&_U_ R08i>>SR$(ű|-[ۏ 'cرc cmϲ>l3J's|r<_K.o^|E˿矗::u =,(i~+!m۶]"fΜ)*iJeG3'O /s;&8kNZ'EJTMΟ?!U$? 7G,Aɕj>N6Du:@9ɳ9aٔX%f۟$q2gv|P ޳gO N G"HlONǫ*]fԁm_Hx뭷9I=>cN o)ϼyy J۷o6cwOۉe>:v(˸"c„m$DݩS'g9S a ؖl+^"N.;$%U\?#0`7W^/J${=}:qqPr?>VI7zCΝe0裏J{~޽{Krͱ̶;rlk.b̟c%ؿ*t @[ '/,)Px$Ǐ@50 _;4T$8Jw*rR~ L Ot}'M$J%M$ʼnDeNؘ/~ Y+z!R97'1'mN`P+'RJ  Q  )__"m-y_vv˾c{YAq~;@9R-糟Hڜ7Hr!Iq2$J _Ti;,aw9a1o#6bYNĹ$J"R#%JM7Hf{2 3I^\DG9C/۝#IR=L.H^Q }c8~XR%9.%PNJ MNSC/BՖ̛jc@I|6lp~P%PUSWJ?&uI̘YIT,$Aՠ.zH$PkGP*VU%7JZ\|]7 W dKIGҶPUh{+BMU宠F8ժԪ5_WI$hYvfyUb'A@нj .0IZw`\4gEj)8~Vޣ{̇ .]$u(qs|mz^H-C. 8qˤ׹z +xJn4 Ɖy*J:yq5ˉ - ^ 7vrEDONN#'n:"iD%r`JW\(PJ 7e)5$ 1II UmjЩʍmv$r1C7oo*@_qg}H|ܫ<<UNxɌR fWRҠrD"%&ĨZ$J( ??I ˦c$sB6 0!nX\qD)GV~"YoեƵP2qDw`|hCPsj|þ&!2/=NGeqL|XeXh\qAɾ!ɒ|W;m3Ib[rA I\ \۞Z?\^#qh;WDRO!V}iBcy~ _]];:OGjWǒ%n\R+ۺz!Hj{ZĨ֪:pOT8 +8`9pҢF'83oY^xt {E \pMh3YWJK091.\(АA JEJκ T&HT%; Y^bDUuMҵUU`NTwܫm~х}C6sI\h9t? 2!继vX ={VޠEeq8:nPϮMҶ'2_c֕Y>%7X6/܆@jwz5< ʹA}+UQ8ivoB$U<]L4YzdALgnoz#u.HܞBͨo[nC׃;ŲVد렿A'e7ߺU (/Ʈ>{t{Tk{`U\W_+K]sV+Ϻ^;QUNo]FǵՕTt}{y㵾vFڵ- >q5@r/6w~wuL~אw7c+AmT2UC*=Uyp/CI/ $5^i0}ao;ӎ-!P]UՁ{_*($ ?H_.,tr0~ʻb\LUրh]ֈ$KТ\u {fOh=ΦE\C6`CtIԐt- C496j7F gEw껒$M5Hf,](3O$~?Z7-5eko}jr>f}Շb ڸt2gs##ч _i:vZuc9h=ڿ VhO^_}`_>zn݆@u3&Cw:?S?W3:)3^$ M<Tt0x 螠X|]{2PDxiKOQ mTa8(%+ #v?,o?Z?aZ#yGwz\ď/5)\0zK2<yzj}鎗\˓,KFWbOh {x _{rn ۧ{(\__jҐjNRE!3,)ma ZWjx @\jjO֍'V\__nQh|O֍L_Dhݸ' mAJ64Aۀl n4@17ڿYW+,/ļaNL16܍|/vn fdWX/1!Л!P6g$6Ii9gw1{S>#b D [/O$rI@E5<0Aк2H7Ժ1jKc.[%I/bʼn"iF'F#thVIJ7Wyey]+R*ӆ@@=ZW+HdcuYgR@I7@V]P\Ax!Л!PV@]V6aS&;ϬG}[jwSK AKjO@IYY]mf`ԃ`7'Y떒R㹧[ҥKHMMFJ+J ;)Ǣٞp{w`˩-8vH/8SehST|B+ P^&0M0aIۀl /+$*Mi,g?#%?EHR%`kT ݑ|hX*WpXz 0AкRCy w֍.,6m;5ӧM&ioUVaÆ n IS+DFJ% Z{OwFvF3:$P] (Fas5{7C7I)2!=OA<G-; Ϭ~v]1sLtIZU+:UK|[|*]⇄SSnѵW RRz0Aкr^ZZz5O֭\p_Dm;=v.Mڻ-鈣xtHMR#Q%!GufS @J 0p/m)D>yAKssAk @H'N=!R͍0~y%K$n)$@&7Ę%#N[ 2#s]Uv ٩ͧu5~XQC=X@j6skK @5Obvدy"ߖy~HjT'|S⑹`Ž wp,"A!peDFҼ!JfBNQI9>/S/·%ImXV,Cno"PN߼#E(B/T IDAT %H|$PI;H\9I,e~ %Pftc)tXOظޘ6/dսHM!Pŋ'4n7oF\\5<ڿ<}jM“u۲e k$ Ho)qSďs1w#R# I7I­/uEvfpZ=P? )ĒUxbkoPØS!P77˗#io`w܉xI{rkhUк<+_WU-կ$mO BEH̓ގߕ_cp~AB|`z7(XP,_\ҞҴx'إKJk VU8{Ǣnf;L7gbuAW\ȳ$P|LIZLn,I910e9>5(Qƍ[ܤf)'ȹ wkJDiz5<EowH'HIR-{7-.&~q>B@@틃x7IuCSHF<3H8VZէV{hwQϊϦth@Dj=P(f UdSA_OshMε$Y3q,nkbAIKkʑ_FB EK tJ`@4vՍ  {aҤIr$> szhp!fހ'Oˍ#ٳGҞµ͢WuP ~8sZ~p"D&!&$KZԼo~$9B+ԢTwGFeԒTY0,TTGݐW_e'д4?_+%) cIg~y! +N[px7P Xۑ[Bt6NuC-CǎGYf@@+FSO9b̛5X5'̛ҮMQQY $$Gyh]LC d^vSZO{>=ڎZF}63g侵7cֶw B]9etgcǂ\i g]cNɼn/g~^>2s32 2;DI2::~HLgNgZ{NoOΖq'ɒx'|"iցuQj,׸t䯤ƶ3"\Di=٦l[+z6*_VSI}rJI;vLPv1>g #-R͙3s 79L0A&N(icw5rLΝ;W z*!QU}Qn-)i^*Uφ#:7/;W.EK T8UK}ZLE!*ǩ-);>Ey‚J, P-uYKE[ZY %~(*/Fai aC6DBOx轗آ(,/Bυ=߷#:a`%9>#xe_p>,[;Iռu}g7+aNq?:²"烊j,J3/gsq1w?6tl. WDNQJ{Qo W8K:(3M?ncDt Æuc!t/~7ZᲞ'h=ֿ8&nNuSQj8ڱ1i\ؼX18/XC`T!BdB^gPd¶Upt@RgX QV]BZ!?C<|;8PXs:wHwZ5`po!™HDκHD _wDd7@!%/+Vͩo"@ 3=_/'N-iC8 qkIQ @4"Hm@DQd8Ԃ4?jLH+x2tr.f 7 D2Kse"m 6H4@Q+wPn¥œbSos[$ k_zmkx6Y!@ $V"`A1!1- L˸ʭX}^)|BPPŃK1x\tT_#-cXʳPY9((wH~ hs-Ư&y} ^*Y _!1iI=B{9 ˪d ,ix(3zKY@# j+6ĥ/c+/!pc Qf[(งh\#iVHpbt؀ݯ`w|)銬(Rh߫j܁چ@[@=ZW  @ƓoP&'';OiKkG^H>*SvvOcmZI |yTT<О(C*$T]סk2  D38t3maԃu}z'Y%O/.8ja|yc2p y~gH= _(%Ћv*MgsID|*3s>n]q)8y:]crfJYPCm@ ;iRt2I(kNh =2:JȀ3h $7#w Z=)뜄 EvuV~vPrQf^{:@ 3 +p i h]yuֺlXlέ_;iiPpruq弃ovۖvFľKV(OPHꅝwJ5%ټ8d!JƞͭZUH>sFwp&Tr(0ԍu@{Lꁜ|# zOɓ%n1кEEEa͚5=Ф$L4Iҷ]'[;a$ I5O ƱcאԠ%݅$eC$P}zjIhbKe pV~g^}/GUwDŽ;.IB:X:40j``pC{=NhJ go]Nx5Nx)RB%<1*KPu-Wf]@OfZw,^v^`P_okoc a9{Z?AnQ $KceGI?" Z:.EUmJvW&PfrA*SOXR{/ĉ5?ҊSKz T 0r.9Z~ ?  z'OG}$iw-,,L\YoPRE"M;;4|p>&R&o" uU?VJ%TAN>Hζ$+!ҺgplwŞ@;DyuF()jә@/oځï=Phۅ!PֵH&Y“ wĆnu~ϯB"}*`s ;^chm>3|+mKE":yZN%Pg?!S"z6%*Zn,tuiUyOXjm0j`` :k1bl=U4j uƲ*XhtܑfuƒvRvu y">I'VYQ_%{V/,r! @f;P{qcq h])yUmϞ=^ᶣ˓vVRoER2;?ƌXsz "E-EeBl޵Yi@k0h/>jwmǧ_ ;*ܞHk )dz~$%f7 aX> z7o@׭[;v\sa?0}ܹnjPNkOaGږ.*K*n[ vXqoj4AI(.6NXV)U"zC2=n/@ DKh ;쁺 ArJrN$%,2ɱ|oF$18^NCJad!_ iRɬ;P^nQ z{^sa7)..'BVQQqwBjag^:%|b9 7kDj;W+ƊNf,XZ@9H׬^)2FDCB`HTtSzw%kW'k^iL @$G^ e*܆a(8GҎY:5#*[߉yV?,ةmUU7ƍ]Цs\J kOw:`h}ON쾰; Gn)@@$zvʞxV廬vF|~ =<2%d"2j7I@h1[!P3ia˽N%[MW đk@ZG:4-6jP0X<4^H5ѱq` ڿ ~uWNpk?R-+ܠ9{Kmjmh+6'@.Ϟ=[6 ]vn*ioP^pf͒tK声zI[gr Tp 7!-Q$~Q}XKC†cx|({7SSO:lD@B \qr_JUn]aTV!P;nrׯtsMHlvlк#!RyrkfddضtW\;'o8axIc[IRt72qQv6bIXfN=ݟ1+^EJa'`Iw\,L;*61n?з!;Z@.\ۋ"hbNm&50h(T}K-'^add@cg-BW DɽK(#:$~18[C74g[ۃ1xmM垠~8ziUsVJCHDm@́چ@ ]9oذ?я ۶Y/ds7ֵ'N'YF FD_ZZ7ӿuRk@'827&mtK@Xf k}q ܊1 f?k^  {v'3ݧNY0pU$[FAA-r-1"SzXnVS򓕕F~4օ͹'z)L8Q6 _UVIړUX&L =8qʈe#&0M w\5ko=1r/fbS ^y5;6m(.YDzX+DԿ}@o­TXFv2j Z@O|x$M#G7ߴTK,o"P 4iy݅Z 4r 1 ~tQ 4 kN#3"ij3ŵAng#,+\!Ј:PT>PMbCVU25Q MjWN4I6 [DD-={̙I8{$dIDK <)LCHH=*EXFDjn,_lU+-}KVԩeTV]|9c?mHG>z=Zs!%%k{6=/;-qΒ@gݑt [璵w9 j~8_w V4;ά Mh=PvqF>(c|[v_KzM?hG7+=:tnILL]83sJsh%@D`e:^uV(~HHDVj"7Cׅ='ӟ}sωU᫯*D43@6Y'4ncք}) OF /#pq4BTq{K=cG?qr=8C]?-{,GKH]H]Ъp/]$RSS1h e=y!^4 Fa'08Ueee־IFTi~vh²e5z~`3$e>s+jts}2 ^<.Zѡ<^}.qOC=#]w5G(C=kB ZE%Hf2i= O?U sbGχ q{e=x(?.*V!q${'^= /X?Ǔԩ]bɻ n)*FPPݻSNxzP~3 kϜ9<{b`G]cǣ;V^{z}ϔOgw%ȴ>F_/w -YO. ^[]O{7SO2\svkճyCSƊJkKGVCUUV 2<G}ԘAzn Yu qw)/{G#! M#+1~@YA؛b(Ԏ?o;Qf&p^:(a>/Ƀ@\l/_/2٧%O0_$$[ir D R;sN$Y@Y>a}@YޡVhhE}pEBK=7 PrDQ!K9IEE赠@}C}U%3 3@IŹr+ Pi7n4nz/nrISkh;{,.w}x7$ >,G>iQ:u*~i^{ !!!ӧƌ$_l 2*>Ks@W-)ɓU +^KLZ5 {s,b"a%Yd48z0v[#QaˇaYK=>x`]LG[Zus`/B]+1z8aٚ'iJ$r>wBðuAKț8XpGGJe}MSg:2e z)F%J#]t9s!  ;d'g:^w4I1 ,T}b"몉`LV_b9cSc&&&ʸ#8y9I5b'W{E<`_EKݸw^Oty1m6gy7%=tP<_s[ÔeSa<$_E=7dCbN"r2k¶!e=ޝ?,>v< r0f$|vlف'zw/Nuq#)? .\Bt~lݳU=&H,>eef8> Qpx q\(1+q{EZWDr`=RxybW"+/ .ށ_Wb\+ƐeC̏q9c7ŴӰk.< =c;8z(z!LDEY!~+#[&sM!cqi=,gt,\ۋj65=|H$ч=cI'=ձEK5E8wHcKcn K%Iﱾ[$٦[|/ns7>ӴpI!dM[ .`6kEI-43?Η[Ep铹Pc]' Q*\s*ܥȪ}"" p3jy|Zb-*ܠ ~N.ժN VZs]>wSn),()AWU[g- TUe wy -\qԪ*ܢ"X9^ڂ Q6LnÝw)jXOȴ4jHloǍ'B c z ٣؍u[U7}ca'_W]󰫸)!$LSYWǍڱe1BIZ%rͭ[QO<(ur6T]Ct cS1Pڐd-\>az"AQð;}3J _>te#jcŸ9Dm;$fD…>$.ߎ+-㩶mNݙuҖJt0XwBvDh57s؀ܣ$28% Fu\<\_'KQ:D },S`ޡyB4tQb$Bb(Z{YDΫ ӷ$qj#-mySRDOtW ^I-ɈD`hHO* yח!*\@+˅sJhP~T3%Tmgz8/%A:0 =C{/K@x@^ep?C"Rm)#JOYֶC ?M bB[6 l@=dYeXԷJҤKNJ4b[gI`Kb$I#}L(?7Aʎ[t)^ ׭[7WESMu3}j w֍Q*ܚO~O,sbv"K^@=G `O?9Ek,:<ІHJrwU_yGX i֝>Y-7Y^ap"l)U"ARrlh0OtFvQZ@mF y9Gp=k܆ >uֺqO]8)Rj^汌c2QRQ<ʱM閕+w#%Cc9+fǿNYlSWOci T@-?Pu]pm!kЍETGhો*>K >_IbU?$Ps!AU̓acX'ꫯm7o"P+l5L'YЉ[}Op_}N,Cѕ"!o+aS\s"|)6@E@|w(~x{|,Ek"P5OfYQhu^pm_2|߶ֳ;/6UCD~b\Eo @ ݑk$Pw@՗cٳ'Ə/)#؏x#2*C6 V=l[Ű]²_*iJ<|4V&<+1#OI*ȁ8<q(m:qcR(\qrv]aGDh?dj}Gzj!{j~e2=_c@B:qS+C@ 9N;,jD 8niC?BG.&'&"ƪp鮲|bcύZ?X9ZPe9Hrn v]؅w~,'y(%p}wy #@J~3#iG{ `%;y:>`ڒ 'X Z@q4♠< Na4haQiкi*-'9FaII8=ֽ$p)K$iz(Fr+ja _yD$Z@UU[Hl#!jE BPTmcIiU-'i wv:3qf ZMǣ¸ʃ_'z3&W+Lۀl n Fg%}tspbzɟak:U~pWY2R7Oaw:)H:e is[/l\U=E.t NJe`ȼ׽J$Pu]Q5[@|\οrt3%TJ+fujK*m۶mE>MNox]Pm  Ƹ/YbI=w~m?bP~1מTU? ,+k]|tK%=ݺ(E_TVILL(2Q](#Qc) f)V$8,wpޯ/Ƨ4*:E8/JHFv'?D ZnL@kJJ [Ǯmu}IjcV 2M"oLg]2W#f!YCEBYzYkh?-ʊkTG7"PJ,3C fc΁9Mj:WBDíISo^(DM$8#J$ Wտrۅa ㌝kTm@m~%`O_^z9ñ5Mjж1vX9AK%Іp)u*Y?z$ǭFP7ӗC=j$m b8UP~b,*\wԠuQc!JzF#") ڡ*\5."A#Y+ܶV9PСC0x`\h {t\MFDtj+FDNrq֧)WG* 5@iD4w\I_ψw^>wntZ@ roX1 eIדa]{"oJh(aRdg6 kfyHZ/@i9,Zj ) QI F3n,mr6{V K8pלDn,r6Rq\x\LAeM@u4T[PV^9jd֡@iy;k, pKy4@ mU51^kīaJ }f Zo~3ĚZׁm@olCZJڐ~m,,Ly+}#F!RҲRyUzU 'C%$A  T/22\4"R)9:כԠ$ڀ$McɕO*h]AQC3"÷݃Msؘl_6$P=EP|LD WU HyjL!$c>^{pµK\O@uϴ)0t5ZR MRX48=Pq|# "mA7#n9 c"88cƌ… D o"P+Hp`:Ae_?{Օ [kz[f͚L7=vnN6&0ؘsHH @ " P(K! H"'3.eETUUK['|wkKc3h4wqξ"j%vhxOV%2l`|O9\T9(3FB ;mhrLsjҿ0?kt5ŸH+H {Բ ԦH<+ֶܨSu8ܠt9zS&\(-# >M 9p ֭[Cۻwo΂kK(󬡍~h Gi iRrA}v:&6:!HsV,Z[>X6ȴ%2q & %޹J7)1H/}z 1A.cZ T_bTUƍ,vDTmuHAL8x ;8a846a%h=8{b8!h:X0 &v P%G icMUi,}wk2!~={؏Cs5@ {<7@$ $\;HdJ6Wiȣ~WW`>J~/*#P10 $ͧL_n+HaxR:N@ս Ն&1cPlajNDMȊ'fYd)[Ζ +D Bi)ڀz ASt%b9c5y/0v!u(&?Oo|po3O>5=Q bwvyլ8%LҗGcǎ=^cQALG)^ Y& ueH qzh -&P-lBV8G *r T8N˅ һKaaa©PV$JZ`m@6">ٳB5(^ؓhjT&'uhLbӮc0] +_6ݪDϿFF}Q ڲ a)=ma3ā} TM\W4G{C{*k{٧E^\佅-eUpMvE_~%MKK6DO{fDk&`T(.ErX:+ =bD|4 M?ӏ' C6$E}M"*>NY':{sJw"Py1'2s6DmJ5wr Ab /1f•LD;Ɓju=8ʼn(lΝ\άC2EAm@6"+<n)6nHF6:zb iujPPxQON/ܨUn8 l;ӑ=(2N/Pt>r\܁7vm 9ixkЅXC @eG-]û>E-| %zUHn޼ U”Bc.d?Dhu=8vkzmqiIlΝKE5{q 74_YDVDH_7F0 O Cj&=;zp:-Ee5= ׶^2e%SP.; k\ NPBp̹qQ~:? V_I Rb@qd܁+Jdp!)V8Ο?oOhcQё#t=&DM $G ܹ3 0__5;Zp ``@ÞbBy2񶭏@Ԉ~׹qM|}7|yPġ'^PLƒ|H؂ڵ(2@1bG?#M"dP s w$/GG~+2~˦w4=P$x7q@] NIz={:7/H]GtȰ Y H!@)# o஁d^I(AQC :0j%]87/ЬDK ǢEj0k&(]nvMs >-^ Ec }B&w{sSomݳg@QRM4;ӽF8 H( 5j,9<I\kE=y$W(@dH楖P\q#D @B?#S4 t %1uƦ- Rq(Pv^ݙsM/Ñ^{<ްdZu-8ńɿۿ>>czw_YfqLV"PWA[J_BTn-Ja{Ջ$ J&]+x&C9jR>քUHA+93ٓ żQq.51kC=8kuyb!.Hxb;y$kHpw5&P@(: Xڶmˤ9n8JJJ+Wpyqt}uuS"͛Oh*n*6tppJ8NUDӊpiAƂEhxiCa5<J?Aͭ"p%;xB{ c5 q$[ńXmu%C\-b ׵dlDG^z5{V"r㶻 Ȧ@dC&sp\XTu8hǧQGD4vʡ+ g.K=q 'X\TiYg ,e=||ψhuM*́[~3z{wq&6m… %7R6xu͚56ydٳU=BUVqdS !8RAeXPQhAl;6al&ܡFP©-t &dAkVvQ3F(&\(P *v͡(':fHo◖Ns89}${=nC%ǞYLA]t)Zum8%NpuVyᜒnU![+߿s)x~UDbGdC2,}\[UG)$Z_??n7ѐnD0b$RxƂ*vN34ޯIkU&BLIo?3(Vy!,%CQc!{*))Ӭy% M 6^mx£/8%rEVS'zS?49Ϛz=s%9ϚCκ&caKiH=džykBھ@3 1ch큵}%r>1"G~ɹé#yeM$@G]Rl.H΀xhtE4A1c' )(>;ͤv +̧ۚ#4Q .ic\cmc9lʘk58}/7|n'Pd+4Z} EEd7ҋO-'^_X 56jFC6HA޼yX{{q( :dǎ_ FJR:r@$OVLȗ ԧ< ߺ@gL n;QxAp(O&nF+ ~;!۞c~M&eEFHЄv->l?vT<)AM8n99W=Ż _{ͧ6p&n=2fU9նYxV;|0'W8vU\;Ս:ԩSz} :Ś0 o&;Pt5&/~I7~0@>)6p,e\̠kGЛ]4Hl#oiGAjr{LO֕[׏ڌlCɧp, $ϱS;:x~+~)Ӌ_SW/SBAzcЗ=Ʀ/|I{Ф=o-LBoS™]K]uah;/[f0& ?R(i)S޽Fi1Ow}a2D?`Lxxx֌3(ovv6M6ۘ[苳'GцP?d's qnxox9έe˖*9-^[HآރBfl9-[ \ k5Z\-I&ρ~uúT1rHzc9^6m6*7cXl]_,&fϚ!0mֵ#'YA!|~1%|L Q唹EEz`4+( g٫)im$dr $^@]OĢQ;0ʹH ,B>b6l/ n8r^|.gr--P!Zz~W,9p~@859}9Gm(ׁ"XjFG9TrdSt99G LQDY]ז9p9la;B9`]Ͷ#l/!<˃Rw?2wEpz#꿣݄g{6b56!s۶CnS~u(e3wnS'H~pAڍ 1YSڷΞ[59js;p~9 'nߢsb\ۗ6vaӥ؄v}[:w݄{E6 vY׹gwmmV';-d(OH^}Uկ~f\h?ȕ駟R>}k׮KgÉT~pV>cP^=!yzsۢ `hPRfLjmחICace:*y E@km9TA7mJ4 #ߖ#нGxDd#D1~p"=꽫v.΁6  4gpemVpy2yfl`^Tӫ Y ` (|W`B]uJ^0%4ۀl D6Ze=< П> 8>Z*cf[^"/LbR=z(\CuU*:yݨ^΃S F$98!ӮqJ &q2lVPg.H#/Zs`  ł Pmjkь4͓ y9 Ypʯ&|l ]x_(JxA#p0Buxբ i"BTPҞ$=K9'rB H­ wڿkjȋ,7usT.6[o+B9o"-/ksj oEJ~9n.i=M<ؼ7Em 54@{f[i"|skNV"PX,ڠf^XdžH F6!, Kpq$!1'䍠0m_FOr(ArD^Y3x(pLI.Uӡ+{ R¡F /.AkiԎCdé+(k ۀl Ē 9(Et=^XE"@RQ1n)h`߿+Gj, Qrbd Gx"Q])45νK?M'{Xpq< ۏd2+D6d3[A " dpZ*?-3sG.Tp "+rB0԰;s ?^' Gajz\x`FǍWc9YŪA32fPzU:ٓ21J64=c:6]wVM_%~SJ/r ಂeRj篟۬PWRYA^(Ƨ ԵT.r> & rKguŁ6V"P+B]]:1{O-4>@Ao IDATYZd{J)вDUxr;LD 79QR9Uikh44 S$҂1 + $vEn<q /ɜtp<ݶwkL5%i~o\ ޻نƘ1 ǩ[htO w(@a 4Tr).r-؏?؋J~a-vcBdCb󌌌3#D6c Zum85477|MĀ\^VsX@/-eQɴPec}܆u~ D tE42ܡ( 2s6DK^;OWͅĉZ,f Gs"-Dp5uҁ5P,tU*>="kz APT0yT4TTCkX V'*H%7V"PWSYl^P֘ޟh[q.L~M9`]߈z`;ygTOwuM#'hx?_}M; #cm[ƿep޶6 kHܷe8x^hu 8-p1{ = ֜v"j:DV8\TVVrUeFWCiS/4FY>ܤsUFMH8,74ʉhHoJӀD/}NoЊLcr|Vorh=k"@⩋64P-V["os@-yPb3@ŚP؎&P׀ӒɣLqR(ʊϴQ!"vT$ O԰0O *e˘D+TWϣݹSPhv=cQ`opGĎ'Bh/_F A7ONK~a&~E"(ahPie |Sצ/UjGY^,Ԟy.ݾDgn~._lc1-Xzs"D42Zum85.n\׮]飏>I=1cg@3 4瀬- hssٳ{]oA i0x K* hU9z,@bԜ4.|1u證S)X0sGŏE?%Phsr0YBO7=|=9sٲev)P&%ܬh"}46*yT~b^(~KÌ+ J' kq+?&P׀Sp1H`Mâhn!VTT4k9;W(&@@!GYYͯ@m:'@yRpq^Z'4Hh w 3q5.'׃(d0HBD6BdS3Vu5u!՛mi Ԃڒp &ɓ'ni*Z#vJ rHM9nݿ)F4bML(eLtG*}?n%jFye}sѲ)i0@=4=BK 05fR${23-\ɥȠq&CP aE6Gh!![km ,D_g@[qǮ#Gp1xy?ß@{lbT~?ڥaMiGѲR? Ȝg쇦OyO2)m/ޚK[Nc6/wP٠to(#F(DA9s)t>}kv$J:D+[Vjh(4DLD64'xqM]ks͸{ h.cS L==<GDޑ1¦!^I#Ǥ+LKs'L-WSu?a v7/87);&Ҫ#g_''S1Ͷ*0_Wv%ξgFlE}d=Ghu 8pA@ۣG6]h}6a,3gvS=69)Ps=C4mI>[irxe%oS!IҧSvКE]r F$RXxcuJaMkJ ӱoZA7yt?tIa,ӧO綻-8M>;@Nͅ;m4J,;vI&1ڄt2 ޶x&h2}[6"]=d9YF{e z}rێo ZQ1C wrDZ/5rJD F )Yhu6-` ϱFG'U@1$s I-xug#;>!ohu 8ՉۛߟnND.$!!Qn4ZS>\$j0IwhiQ H `c'ÉȈmZ*?D:,b2IU@=)||iCʪAB)*?7aMhu 8̈́C{>3r {5gJ*! |ڽk\:"c$R2 d2γޛ}R/^FF< #px.yFLD$RL@*..~]{7].jf n NS EFFR||<`EtZum8=.~4І|8X3ѨQR^`U58Lc},xɑq#95 SӦ>fga4y8b<}l։='`eD6/;n8 5PjYUŶ!a{ND {:0TO<046޴@ؑy+iDxNLSӍD 8"6{ AĎn)ǡضmYZ% ^=LlG=6o0bYp=? G(3n_@R8Pӽptoݺeo7@冇Oߐ1UI=Ӧ|&hs5]^^ΙAi;ffТ@P4shVf C2s ٵp-ZkrbC'sM|xЊv\̿a6:?Ϟ?D$K9gjAmD$sؕ䬫z!9ks;؎.߹Z} ݦvtuv(,8% /bjmF3Lmڴvڱ&Խ01^{5޽;'c@L|>zƅ>J*ƀ+go]H#mZ?B+%Ȟdy4MgiQD=Zc.%l&%DE=NS0;~Ϭ@c,f%䕂V@UUU~G{…I":9tZ'4PÛng>#]*[imD+S4 N/“55E㰈bKի/O}"vy*,,7o? i7 9ʸ8$ 7@!-@n`$+׈C~a{L{\8hKW.>miƱlޓFg4mM!g?FDCŇرhN*=X8Q`d ˭ʥvsѲ\cOX1W39{b}ETH%ĸR q#y@ߡ[I`= s`l+S~[%ȉDe[q(rB\ư:DN!cN䔄r|R:ٳ1'rzd̉|&rBsro):r֡C8PWkܒM[2dn T9q צ9\ps "'dk̝tIHAtQzCzpzpә3UWTRQ²[/2[m۶g@ tիFF巀N:)&&]a09:66ޙS;1ʦNUNY JQ䠎9a _~\<vm:IBV1 %䖾“VHר-B&-]v'ȉӀ-ypAX-!<$Șmn=[# ,p.S5I׆kB\{zz:w .{n:? rC!^ɇ=laC?P|6 XmX[6s+[yn%}-"[ `l`r7!c[n|M$,N&L ???΍Ԫ `!"BU!C }W0LXh=pܤ8< h.rݛ_؄Ǔ ^Axrg $|z8,T@=is8^z9C>{xZgp ыEo|xT;cG8H<ݻ?~>B[&%OӅ90z -_Fcȕ#~p“PT5-69qph.9F9UMssܾBm׷;}pF͋v'+;Wىvo֖m|m<0h'&@n,Rw`KR ^ J!J%O]uY4d0Zo6];KW(']$A(<[qy(dq'[KfΡ0OĴjyֿ0Ad3MgϞOsk4^REu63^eh3's=!<ʓL{ќi5!At&{ Oʙ9 ʺ Jbfc읡.n NSW;}ium8@1 _mr(˫V@B[II'Nluy 5hSԄS;3s&2i IDAT&V5uZo* 5`%sgs6"qRBhu * Uv~s;GcGS`aD4vb1;s.kTPLJ"d! M| w[p !ܿ"/Bx$! @AY쑋%M&ЖA ~&$$pBNrJ>Fpk'ʟ x*84]wѠw` yF͡{wV,fYE~{Sdy @}#W[rbH>!(|u9jI"n}}G|xY^5QZA^< JxcL~s{~Zm98@1!d{puUQsTu10b *+Gs\`zHpe>c>N9ՃwO/_#%DhJm]IX~ Cp%7C ί&{wа*T YuK飰a؇Vk-V%P9Ȣ~ T"f5w*:c} ѓ:l@J6q4?ɛ"?B$-ӧG&c55Bu$ۍ+qsC !UlxT+ȋx\Շgm6cM-hHe/\{9V)X'v`nW5?F}LT-ՏMښ#Fp=`yrN?<ۣipwsi^L>&l1M64LI/-C}ZpKB&{drߑ-8MȆtF+<6 wvBn[렙jn)(,"߷~K/HU .{yJ9.pǁD ov|Cчy^u80=S< J7 ]&,GZ|\s" 4"f,|&&ylEf"vKpm(@8i'Spp$B ^@-Bp5 eeȤ K% ?5~h($uB{3ٛ~> B74bY$ŝB+ B{'jo"^pZ[OOCCj JT\`̀ Y}d|pZABki"/H{&M˕v(犴i-2_CvQ}Yno>o1 +;y ale/)vmO?Db9-lMG6uZ'c `mi D6,V4%"˔7ƄH#PV/)6/HM5_j$118 И19g0f?' lFYXUJ=iݼo(d(NAEƞRߋ]%X@z+w#xpM1e-ʞO5MJ OI9*w)`"e\ʪِtEpE^4rvBăLm7h @k͌Cvsk]Y|ӌʥ4)fiӑ; #-ݻčgoΠWgRPQWI+?ϥ BNs7.҂t)_k4£a5Gk@M3&E4>iF 7 gfs^~~%:dܡE6f_< WuQp[@|ifd̠nۿcW(0ߏ&g˷єSGDMNRb8fv(K=s3dQCs_K)%kiKm*Z~? ;DN+%hZg9')x崵|+EEP! 233zόPnY^5쭩u"r7%QJl[9Ep@]yI-%[hbG9?2f_%q.'~1u&zý4`nZAh?ѿ^BiΊZd>y'M#)4"f4{fgh4Fc' "<6*l=C):oO B a8#mXE>)7F/^2r K/W6mv:](ΤSz7NVFQQ^{H{G̥iN5R3#D6dk>lJ%DRH%m ay{BJH4l,\{h{͵g8f_~Fv' #iǃ#`C"~_G蓠4 =FǍ;ii2k /F1>ʧXϏ6 -,,vm3?zԩܶBnذf_ۻނE16 `)USho1L-2z AmJ1lJ:V˟Si6r'RigiGfktStUt'$4tp=4TmLG4KU3#D6h'V*0לPsקJ\ylNxqh; 1@["к4PdA&KhHܴi8KPNb0)egg7V$ՇXE'oseTd^2ZT4Mu5ߗXRyxI[{" &ЖOs5xdžh|vbjoT(j J$9!u4JQGo>Oݺ%<_ٓN]?͛#젨4=͟уF'F_Vd5kpdS sQv&> W 0X?3\mZ uazsĈv'g1V[IvoQ0'ߏs}7蕷/+LX6erOؓcbfWǁ81' 'XRRm3 J^xIB۷q"olllq&Ж T@yx 6*K[KQxvgxGР.D괗YIWIKI^ az'!ÆYuۡm<5Myn?]/~CES_QɅV/QhL>HFiizPSS˝_)wMΧoFl0i={f~xQ:ԿNDj)M-蠡YhB'})mJO:y(::]zЄ::)YN eϣyqh'%IS{(h2;%aFlwMȶyfUc5kп[n(nE^0=6|}2ޛH#^LE̝c4!$tIa7/짿102yqlօw;@hj7&׿Χ8ZZ2FƌkOktIZHk?ջ׸)TG2OCCÕ az2tn+J1^tq*;]=JK]#5LShZ(XV"+jEΝ;6 E&>J w۶mm3;sLmu@ũgЁvV MBxOTE]IRqΆ\׍7Vp29~8V3#B؎Ȇf!+ȋ azU@>@\&̭ı(G&)j NVa,@M-Gsz%JK3 s%2\3k(ҿՔm+oQQ%,*"orrrTy"+L+W䶻 Ȧ@dD75U#ҽV_of_wɒ%t9nkumh0!4<4"+ ߻w߿{f_kȋUK/>+4<4"+ҼM>6 mm30iӦq qFڱcܿ"O M-M&Ȋu8".ڡgFXQ`Jj;(,p{UK@x= !p{8c+Zpf/&/ 999OgFH"iր{fȶvZ h ԵjBuϬD(d"ȳfc[bWdڀW~˗ ԵAA`7x޺tB3fϥC@M-'PÇ&P|M{}s8_x쓪h s9|S s859d/mF=>{Ar65wڮQ!MuиsW(u̝U4k~6F%?*;v/dzu­ /ʭ+T}>)]{󷴜2wvXX&PgA4Ν;ӆ b裏j`رNցi=e=2Xa̐4))^m 2e kCC|ۺۮ`Ch&V(̶pP );vŋ ReI;ڵ4A "?zjJOOvYY͟?~~;|0S2{ի|||<=j/K,ZMVXmhγfͲkY nCgxz}X|9ؿ?gS $o5޺ujOm>((~ͣrn#5kwsˢm - {{k d9s Ν}vncI@=Mvv6q,X`HHH; (!#p} dddp 8`H-ٳgI㬠{Kr #(`VLn#,䄌9sБ#G3̺u븍CBDn,\pPRL]E\Fe#U7]brQdnIB#una yzer s29-H Q\ms AN;.s[2N|6\#Kr:o1BBBs UI־hVJi3Q@|5s)tc(K|:060FT9E1ona,50/011ްvφ&Vp6㭷޲D~ĢN00D20P6J~rFXL<dXdpY1 0$I6EB,rP8,4(aAg"'H\΁ YU9$Z\! "]$D"rŒ{! )cM,SSZ&":)cr !qɂ9唅˘SKI_~1듇LS {ֹ:knɘ9e6d;2p.Pܳ-uws[/SqY1y88t{Uc}w^s c.9k[2Թ1ʉ9[xHNp{ i'Gl$jf4#Ҭ`Ţj.f]hvh(S@˄&V'\~zBjp9aJSzU3'atlCKiXfS8+s86z~qCk-9tsv"r27Յa,Pn@>X@Ef쁈eٰ"EfWɼdfyE6 fg.+*O7dS ^@/V_xhW78CiumhhuhuX@UȬԬDVW9!wfW8+\f j#\ BZɓCs+졈l y+ȋ@z+ȋ$V_Ir3˫ `%phuX@EVhC&/ 3k0sK"E>B"93 2iLD΄&P7 pn[aErIfn>V T[񀄢ڀWhuhhuhuX@U'`'X5Tʡ|P`{@`0Xa,惺Z-EJiumh5DV,2VxUޢ8k>l[H= TCCCCա `%U/]6 5xrr2lS/^Vh. E[b[-6"[II%]N5,VZZ{fȖAׯ_&P׆&P V&P7Tdv߿fYdC13#-,,䶙*++lgFlt-nk Ե DYA(Gm@6"s{dwPPпa嶙W={%huX@5444@@5444\@V"Pvħf"R͛7Ν;myL3 4"۷رc6"۹sŋ6cpܿYfWJ.xbᶙM^"jE8pfc[d-vD^,kC bdܶ4~yJ:u֭[m3+pQm=3Bd ZJ.< Hdq%2Xo޼{f 4H4}tnۀl D6栆)M6V_)!`y}||ĉj"V޽3#tZC^h`fy5DMn+ZpyժUvlH4m3a[bпqqqm3ȻtREj"cGdC鶲2n/]ġ;1(EDz*564jhhhh:4Dۿ42 ŴP?Qu2Rdmym#1`fy5HmwMȆgԅҿH6ˀ7<7n}Qd i1s!ӯ;BdEe˖qdS a ;i vš{fȶpB:{,/- S1uT@njC7oI2ǏkU^ddd/ՐñV|%zse`Q8P+@[xb1c͚5fΜ/x]r< ))z-Zz5Z'бcGZr%۶mW<@^" qoƽquKdCmL 8Z<* e֭_wʔ)\Bs]m 6P=B.p P"xر^HO>p('L@mڴ/:t{VG%׍Cw}QF=u9KU^wQmذaƳڿskyձX IDAT"۷~KÇ8.y^޽>/墢"^e{M} "\@ [H<`(tw{а2}_iI T} U_0sGڵ+u֍n`G.|$D^u9s***8}xM9L_5玉ձ8gMo6?B>]C?k׎q<a>!^_ F@֟w^~/77ڷoO6`:ۺt}frE"u{ x^bg4"R~A@XdD'% ,D:Z D>;"`I;,4Aq`Qy饗X?ܵq2_~e._`/(U@w@ȇpeffL#AA7 4˗/g\PTX駟Rzz:hwygW_}mS(6`V6]3COoдe2x] EMGk׮%^xm &>XĬ'tlKsΜ$ M[m WGE2"D $H^黛r0ǃ@aܰ"_ц։^cpx$~J(Pm۶cvM_ɓ'ĉӟ+i "Xxh0RNtƒwh( 3A`]`_L}رcZ1S5,c&Z䠙+KP`4CŠ⺱%0E^,n5U /c(> b(A@?79+C[L&4S*k#{Pz`=tձmj@O;<5Y<do<54ҩq'$ib+ L@xO Z711=Eq_kw_oQ  8 }XG-6%!Q_ #$1 n<<㤫( CqO~F! pž6%@~~>w%XTaWE pH8R <.ucnx:{I3;i(EX @(x`op(]w_ G'O & /2uA0_b?Zuqq1w8PmFD %`7t,V55аf:}ˉLdrşLgn5w||!R?8V,!"L)-¢2=lk$} HdDV7 LϓHELYnjyf/h> cS4,hpPQzl1cKwHߍ.qL}cK~/^w.aC>vR@KE_2yiGn}x҉c}wS#.87^k}8#Xܔ.q=89c:>wZǛ 89y'Ԙ)_Ҵحlxcb5Q؍ Tsgmn8VRmo0:GHK>*-P&">H`"d<%GFPc*l^>## H<:[#%DI)dhRu~q "&PBu)ۗ| 7-fX@"OJ$)2mxM6%)D{www}{>4q5(u ͵a`$Id'H~\C} zָb*#SOf3ّdE6,J2eKI]Ƭ 1YaޠcFPJp}~~x);Of_^^&Ep0֦='1v$aWzP& )l.1:8p8^1mrM9ǎ@Z@ D Q}x0&s&U&E6o$`" CQ0g=e"2xwY+Pc*a@K6k5ޯriJVY&IQqp9/Xͥ/cijL4@ B4RPTcx~IBh 3j'CnPC_Bt]o(-݇cG 1+Cύ>:nEU(&c+g6!X@1f溮c۶9f놾cv0,]%]u=:m_jcnk}X@1fǨ PϙZ@8ڎ#PcY9-Q[mJ/ն9DPk1j1+bcV6)c5cF`5cF`5cF`5cF`5cF l(MpfIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/graph_3_ex1.png000066400000000000000000001713021153663664300240370ustar00rootroot00000000000000PNG  IHDR^5N pHYsaa?i IDATxUo޼y'hޘf (Ec-Ɗ 6aw^t齷{۟9go}se=;k͚5lj .\p83… .\#\u… .@]p…z%P.\pp ԅ .\\u… .@]p…z%P.\pp ԅ .\\u… .@]p…z%P.\pp ԅ .\\u… .@]p…z%P.\pp ԅ .\\ axoYYY>W4<ʞRꂚd˭㡀iZUf=WY}һijmƇKa i(hhٵE>IfMhTa8|hY@fϞ-Ǐ7ҥK=#FO?mU,--5j7saٵk9nk VٽC=$ڵ{״5=[qNdܹfB<k GϯL8x7 <{Cg}wo7toݲ޽[:aΝҶm3,Y":tkF;󛘘XAd\qq9]vdddkH޽+ȥP9dŊ]U}NHHHZO.IIIʂr󮲳,wuyZZ[}ڲlu߀Ȯo./=3gee{4t B .0q$KNy嬳2K~o7i`FPw}U>23ȼycǎCkQei!/4~#|ݺu nHle߾}f?2NUrcҧOq:++W hW_} 8t 5k*MOO?%8гgOSjwuߚV?SҺuk9 swǔO'u1窺)WePE%~$GN;M2334-GaÆ?=6mGyĐ˴i1zh5qVM& ׿dժU/\p}٦BC{>kɽ+odhx ٶm[@cXaaoܸqm41_.'O64bW_Ɂyo$66V>@CB瞓L̟?W^ 6Ɠ&M2)xt^>#y ۼyyG@/BC> 4^zM}FZ 99yC:3G5it,_~i41cƘ0pT['4\&;Ŕ4" j1i*@0$xtVhL[o5Љرc71@O?ݘ! }CX;whtx g9y, _qk:udHOABS 6S?iy\ -s=fnd? 1iAke6r>GS|+W]u):^ dLȓR?(k;3M:;/PǵN=O&L0Q7p.;\K.&oӟTnFSnj:dX@@I=Fw@ {%wڄs=tN6E%~ 47&16/1|9{̄<o&?|p{*KgE1Ƕ~zH!n;&l2`Ah  \tE!4>JBFK.14340~`i,NcG %򩉐w amP.P^!?@'ByiY@ܶ m_ʹW^y{5vZӟ$[l {HrÆ Fȯ~J  E'wX; +u Te.E+;X,X`:GJt 1 IPL:g yR.hzf2OrPgwn:KMR qZ:=rؠcpO<)PË<@'Goe yh6ᢵЋthd4h!33 >=Wm鵢r\gh!7>xF͒ o;``!:3zЗ^zQbSmAaF_+hX!D+i30ldlF=rw8 B̽Uyb*Dy}MQn<>z& z?qѐ!O4T{|W4h4J>$IH!{: 92cS* .WҲ,rlHc`qq g)1Um !2ѐi@ȵ:F2Sh 3+<'`eNxt zm$ζ95z=ѐ/Oygeס#34`F+^-;]i2)wg{#3<|8])`47du~WttaP@uoU;ve7ePHs=}<۶]>aCc !cu uI.$\MǫkV5ߪyuES{uicCeWSZ/^ՙ;Uuc]kV:?TڦewK!+!߉ChuJcTeQ@p[;aw<+;oϵ{kwjjH.vرvze<\5Rջe,d,MM=Xv{*FU0u3.㾚ʾX,;響l?jrvt\eedOUuN[X-EVz̘a!0K\N%p6v8PbՈTزRD†@ׅUL'T <qa20M M)XË!h=6Z@,q*9R7v2FV5](6Ev a<x8[o)ln|5ȫ! m*N(cRDWBVC\iD27 wHݨ2?c3ѺT_<5[4(@{7@;@o^EНja  ]Ĭ$ Cr>v OMgi} :F>Bu`$nZXR4~4/ˇ *W ~I 6bPkĭH76sO;YoGڄeZ%^JFCk])eVc(,/ l654^ȫ-3"56Б HK~^(m=I}TKM ݡw.z_4 .ږꐵs]h,mK!h"Pfo$ˬH/C|?嵗cnXKCA,^۫$~ b|W};M1Fz>֐M@dK!h$Pkp-{]h"Te#Azn.PX8h?Àɽ^wuj*sK.ؘS~Oh Kah"P믿6bj l6liZx^G4ƍC|kr"x}dj~kׁ`NW ˀ\Ccs\;W\}c婮p 4 Jo9n.P|rɄzĈf?ʗҥK~ouRyx|Och"ԅ ̓"P2Uj:^_&UY10g>P\.o mb×*\ CD#2Ob *d]1+@4%"h(_?h" wu NX]aO@KE"l -ߖEKj u =lzڋruz.aG/r@+K.\pQG4*0K/5D3G@} ķ\UP^uB&B>|cL ;x16.!@ Bi lTj<_M K0&P)j5n Hc /`%@i>CK%th 묳Β3gHeet'4CwupO?tPVuRnCh"ԅ ̓j 8ӾKE]d?&!V^mHhzOGe -2ˤ-b%m̹訹&.XiD*EP84|ͪ! TʷFE k24~K8@Ԅ;awA \}{$n.{s1le -Dbl}mMi5GisjΛ7/05 &Tub={ :Ԝ+7Ϛ:Lh X­.p",*'q "˦ZtBhȴt4.!\u")faÆ-K'*ҕLy@:\ԉ7 J4=/ˈ5<КimaM .!@m. *d]M:5*R|?f2QwYR)`O~3}VD`챥ɇ \ CD#2 :T617>w˖-f?Ն5+Y}|ڵY픵*Y#oҷzKrrr}c|`bhx2&ct#uJTd|o߾fРAf,FMZ>9hp 4 ME$@ZZw}iLg h?a^{f#"@%_l?#fΝKڴicφwaWU٦6ڋvY&UYm,FJ}X$BK#DN6xN2м1㢁{暻[n;KT.<2rHɪɜJn`O^0%r-xϛS .o/m{q69ێJI.!@D2dn.P٘‚7$1#GS"5P(D?яL蹢"СLE S]s<ՀnY"e#5 RWWɗ0`m@D+0{6\' .B ڈҨ^}fƍF$if~GeLZ̲xb}uf,+c<;0wyQ!.D7x tR9V_LD`0?UY ytuc㻯!|"!8K0dI-gϣ/\ CDG"*S:ch)_9 mKIT4F",˟1881 veHkpw16%BRc eS 6T IDATa<޽{5qa:X /4^ܼdߴiS@2޼vZo~c4ܼChAeÎ5RM4p )UT%{<=Wvm@Mi=CC=vׄ=q=cҵ Ah8:I<1Oc קqIgDbZ_z%}1Q 9ҦSB] CD#RY>P09*䥡UɅE;s"к( H^SN#o/Dj^ւr)VNj˯_ WA!}t(pj"/1/s0Rdl@}v>I K.1a*繾|5j7qǚU~1ܤfc η}M%0D4 %`d ѣ2]{*N-@@D*+jlP*ވ Ra'RN|Q i2;Ҵ5M`2% wEtZWegK%FpE+HeD:? [ T6H6iX"im2g3FCs=fLxұD\ZջislosK- ?g|L+^4z "*[cXv4G;B8@Y4vpBj#8lSDs)=h xRj1?q0t =fǿv^tOeY@v!1on_҅u6R4 `mP_\^=Ѵ @X9wg!`M͵FC/cV1L*sD"bvHT}LUO;}#37VWF)j--^.xГ".$//vڙc{XzHWF M{[ k:/Lhc4B W˫PAiP! }q\?} ĪTRO* n1=Z ININ۔fi}-yg6ϰ,CNcus:i$ֹ\vY94Uɩc)rq'g; 7ϼY*7NQu4&2\7:cbz}bwyiD'<DLXSI2b 'ИhCAu44H7S(+@\:{P똂_I@N%$|ѐRtU<]#QɐJYx\4d-D |( S-mro 4\-VU,ͷz$5%U{>9eخaIdƮ^rMere}iO_]F-/XuoI?w͙oJ;eĶe nQFI2n87܀dQg8[ks`M:m0!={+-M'] k޵Bt~ :@;UXp);<Iѹf*% Sa8jWY VT@j E;=zz^8"(QLJ ZAӳƺ>iե_4=kJ!yo51T)gcEKifz|Ǯp]WKpa͊8ccc$0Y%6;l1Ysf߹_ss4dfJ[S^A>VfuUF+qND-zI0G4c9腫 },a7v5&ILIlI"))s%!7!}7H5ۓ-L63fn3+n$"7Q$B7#a5㮑 ͉#_@$#aH[z#9D>vITi&998z()/m 3Ndk\ aD#2Vᤡ*[@0yk[RTZ$GVYr,9?Y.;0ɷ뾕 7 ]oۺssֽtX:ݺJ뻙^.ҪUw9UҭG=ۜ&]u&7v*7t\Q/rC&u)a[t,i+)+1ot]-iiMfΝzX&}OoIK)eO<ˑ}Yq޽{D&Urjg,Y{йgj|FCs&IgH7I 5Ƴ.0@UVw'">+j ˆF|29:4;HߜN@/V$( mZ8cviX0Ð(2ik ݎfHZQ|6#fY}\ze~f\#_>!bBjvwHyYWU۔@]h*YEYƃ㨎&JO/J׉5o&v3wMK6&l6؄6˓R&܆0f˦  1/͓T Kv&H9Gm3!cۯfSus쿋?{l-T\ DL\#>PوхA^W#!5:sсEzHkTXZ(%6[Ai |TC:-{Qc'KC;&qirG r廍)FL.7fY2I-ŧC&\+V!.@Ƣ!­B*t5h02~+_Z1< >]6V4G~.' i,#M/'Z$Z#lܛ(wݗ'Y(yK_GI (qi $M o-޹s}pFD4D4hdd oK/cs~c&\6!8ZxRln %ϕĭ$,ۘuK8M 4WZrh  u,$- ܎3OJӀ%ȁDS *Ԍ ِqӾMߘ}|",~w)Ͼ#O#(S\"N\X9FRyWlZ!RU0 #cK-s}IzZӹO,/%0@4qg#6^mw S40&":rki,6ѩƉmziL&oɗS@,4f'ɕ^ϖ j[Cu0k+@Gӣx}GI-[/0Kah"Pm,R[Ŧ;o1߾ SGhXjddF4"2.X@\dqZ'D sirUEfɋem3n6x)F:y3J2dѲNGR` bvJqsŻyo,s>)iF7.sr@.FTVD3G.ZHVXQXs O?i<;:f槚#߽^>dME9e92yd`oLj/ޘ_!Gk V%ާfj6S`㚍JAfeI[$c: 8 y$uH)p< .W_*e7dLoz€Qv ` 9qB։̏$GF*o؂rb!؅S̢Տ)Z16Xgl($/IE*r:OR&w"7yٲ q:ʞ㎓|u,,Oh ^+33±H4_XsAk>F_gtK:Mo?}'y>򭡉c ,2]EyC6d$*Systկ͂͜.ZLʹDJL>(.\!뮔뮒NWI鉿϶m>'3}ijsGH,QVFݽ{w/Pƍ'f2eµB9mie2h aH˘cd~C8Ѩ^Lu曩-MtM4#ʰêf -'hz6,#בL)]hGBd L&^~Nʕӭsz")MhilF--- "*gK, sΑK^IInqo bj"lSL9XI [8d9tlB,>ِ)iw[DVR(9%<#"5=кKah"P]d{M{5LپvL9!cfyC "dJC|%/Ζφfi2yN6yIe2YJ` Φt -reHQ"6ze̴6 &a Kah"P{#GpuƔe˖01(τVR^":W'McⅻkxF 7,W&Κ(SM5 j yEQgo n|'x{~+#y%0@4zo5ũ&ZMgR}܀u6s,#e#%-e IDAT1N!IK{ʓ.[Kr5E2T}lP{M,)V6ڥ_z T)lsx_g @D*knnٳG*[LL$$$6: bdl -1aD}de7L3#7cýfG̒0[пDY9Y|,cK~{K ¼H#_H1iq6YlJș?DF lGLoHi6ɑ];wJ>ˑգ>\ D#۷Oǵ]¯B*߼y~}MivSjhmNәo@Ʋj*2+wg /8`+2 >Rz9޽%662\h E=i`eoV^[|L]|SScIh3Dm DyKVmMby\L<;MO}8Q(98̘ 6Ѷx{T 7LhAe% ю;~$ˬ>|X*-4PUL[e2jJM'$ٗO]M8|*E~2Y!Y2K9x;2۱ά@? EoA<'EW\*q8(%VSr ak۶mӧM@4 a2{l)**\" T&aÆpuKvL,[r+ lXK7Uh|{y%<4B{"jǭruUs5z3seŒ ~(v HuWwé?]rʻ2m*?\4Rh3Bɏ#<"rUtM|A:tt Ah PssiB''"Ora1i6fke2ob:v&I#>!Y' &_pix7yr>0Ev/g.XJIARBzKE;\mFh<|py'o6Sޣ=fi{TL9|w# }m5_]QDeiyln9"gp *8]FN3}948]ǭ준Sڏ6fsڀV|.8 ϭ,0w\V\iXh~I+5aceˁ8GkLǞʑK.ϓV"Uc$c2վ+\v|Y]R$8MK/js*{9=WRf 2 }bx$ k]4ƷUY}mC8W\\lL(|r]wIG >RYn6h=z-ôi35j,ۇ˕BO?,aD#e9|;hċdsl/㓜4v94(븞sO:.x\R^yȩ̂J6ӳL'iIΟob_eUˉƛ͑'NL f,3ۛhL+mۋ\vU<+RS%dJpT S1߽{٧)IHG RPOZ hm!m |T`I @dLxΜ9k|J|ȩ1A  Ӯ]pr/ihGڛ: aAd44|Iwx7#}| ީvx׼s@(OZvd퐝wic pO9 ,$8}tӈI?bHFs4_Bx:me8u +\7~I< slm 0sL0Izɚ%f끭FN re}QέظB͛f{4IcOs^|Ӊ!緟.?P.X ȹJ$! Mt: N2jX@wHC:V.9K%ə⢓9MGM!5r&䜽x,^o;͐vb\gAt|`,qnfccK5GwɴS^*s4߷ũssN}7unh)}[uU}[ . |[mhh ?ȶo bR$ x~[lCh -'mϧ:R 'W-[nۛ"2&J֪U+p Ʉ4z>Vmjc-<\5*IM6d P"`& Ș(evr|MLy,c~*29cˉ3i`e_1V 1=OnN30۰{ѼfLa~j_1< *Y쓓hrrV9*ɗ.pY3й9o*/`% j y,4ș_QNޯqI l*2ﱺ:iʢWr, OLyT,OSνq%Ezv}QlG kmU.kmm^o +"ofŕm'RoW{:\]Ӱ +cp^,MQ rVQ{kcCV\* ϛ&$//~Y|kyN'Yǂë6,ϱ4 -+(=ҷs̮Z8СTqrJe8ۘJ3f9[VI,1B[eY?|Ras.M|μ}[|J]7:uw ّ;ŅFs ^#j󰣡s"0 {%YN&>L}bkHDD֎7'}Wմ=Ư̰]&mWoz2&UYqHYecEvk`i9{H!zކjc[P1NmpiLFL+ѓӥS9ϥ2kT4kh~ :7c7 [[ϩSC8H"لh  }puʆ5n T5Pp/J~I>X[eG^{A&Oȑ@&y˹mYidi& C6m صMyũ>a$(ɒZ gJ'-h013G ̽Y [Y8*Y? ^=1'S?".@UV [ T6&f\5a7~39wrˤ㨎rȋїNz~ľI.4[r= 2AuqSe4L6~m30Y :]-IJ\Fn'Rjl{R\):[M&^ufĕf:cH6zsMڶν;u\NJwF~ X6\ HB,ƤsuR'!D쵤L9Mn+㷎7e_>Id<+ len"Q|Ԡ(NDx>AߔˌIhe짒:v M:y 8JO=U3gg"n-)I7 ?O||1:gwν"^"q…u:f6gk{6R}&@4u 4 MY%g}~,()rěhY&]1SgxϷ&SOK O:IBACNWa6ͽyؘf=zoMktd%0@4JX 2lN԰~e O<jt{63oNN@L&])qEi~-5_z>)W^{w_wy%i\)#P~~K3O \ m"bP}|kbȹ5gBNBxʦ&^k๞xz3Ko_,iq۶<΍ PP 7+KJN's,'˫сi{ {`"!]$>f/~{tϔ4IBbT2^)+:8+h ԞGfTl Eo轴66)(- %O~!VkՖ9s#RwIr^r-`nڻIkj>Olڗ(sgr$uX ]i,hlx&}/m4O=5P"}dYfx~Ѳ׹W[$']](h  4H@|sIOd`-5wk񑥽3utV6%ْ{חƱMNfC+VKTgV!@-Jq,^&*GF (SzBVn3Iw(:uJ|n䐧n5ڋb(59 5|O h)3IC|HIMsKw>\~$Y/IfIn< M[`MQiv;ɿ:Ι[lCLX@ MIlDDxhIB0{PԉpaVDɸ'.tMgӐ1o[(i}^wV5ѸsՕoph)kp&&M=Ȥxh?pks;|Œ=ZmaC} IDAT0Qx5P%]v?!222>D<Ů311r ^ S'H:"diL.-/- oLh N'"PGNm .fq[ٖ[:,S{\/#}5}*%%AGS}߹͛3%$}xSڜ=q#Yn>ʏi!7KuV[oUo߾f=zX3@C vȔXmŌ:i8FuQ¤Y0oJAi> 䌳JɒRgȵň"PBŧvu595L'L( ڈ\h6F,2}?_3A1yE%B n2cv-[H޽e֬Y末v0pEzA驲?o2N&~9`㑲o_+ov >mC|^(}軿RBT!~+f/ <\!dڵ|GteC@C ^X%xtޣr'˅#.'mm~x{9eĦQ!Urn6A9f8I/4G;+iҩ[vF n" fp{Qj@\I~ĪSL䪫D6m ?0]Ϻu'JW_%EF\m ~)rzMh"P533S6nh[Jf [+g~5Cr@9yAۡCr8ϤY&+60kdu0ǡ#3GjKCdܯOyEҺm/K66QU[{{{oѫv- UD)P7"*H. ("w!Id&LLf~֙=9HOf)}>9kU4.KIR7~ -ZeP? x[r~`\ꎔ̔{Q 83Wg5O!{ϰhX4vŹhb;ݜ^3/E#CA]?;i*BGӑ]gOz٥D!푦[ p&P^ΐ.!-1ajsL. [eqtEDx=נKfV&jLVžn/ܜfơ> pSt{;Us'u3t=) 5EB4diS&A3@~dԫ _dEg΍!Ni-$%$tEnO=6m:HeгgJL-4:&:Xwaͨ,j &\υɳ&_~n5P%D!>݊ $,v["^kZ#%B}LD%Ӕ:(U =pv|@P]2鰶0Q2aew}'d k߾=n*BqVj.]n&z|#udz2%7'9#\5P3xiHW^"q1.c)\ΚbELj b$-5)?^1 #@޳wcbb_Ut{ǭ*+r{CZHCd7|^CLDe[_pNDN{KO/Iө0N: qsہX @3˩{9Bm-~SgcIWJb2OZP ga(cx?+pJ+!-x#F=#b y^FGGcŊ\&/KjtQ9ViOSh>Ⱥҡ\aޥK  %m)u"AM&,=zl"xY*#rd\\sF?=jL3?>j?蹪'R3Re/*M$o岤jd/'FI<羓1XgA*,WĂ^U<9 ')aϐɰ /Cz5y_^-vqOznT+\ۙO!:{'oĐ/!-h/7xCH9J ߿?~W# ?DT`m}LHHȱ(Ex:SjPjf*iv88@Tj@s^z"ߘsmQ[:6S?Qe2Sw܉ǚÒtVuMQW3 IB<+H䅭 |ɵAkH@ԉ?YDzBU2 3n~’}DZJUݶ{QBZH_ۮ];tl/ Z4В}I _ubU;F4sIJme1fE4!f€DcbLlx %Kִ,2?bue(ƁJ#!-hpKNN#sl7/ 2t(m2=P58S*{D3grQvH3I¨vq[}-ĘT?bŲ\&\#Mt7&$ e O&wr߄CT}%|Sz5#f͸7=)!,W雺^ZCpժU9#ꗇ&S\dcbcqFY& P-@!xߖNDƘ]cra/yBeذn:lٷEKS 5 $+ĜHT|58a]Z|P f:>֓G]6x Kj3XɈJt:ͪwWC"?;|-ۻnݺ@B@˶ YX(̚5Kb(h>ݻwe7k כox+l5s^6-E]GqeIYeb9n$ͷf.k0m;7V$kqu/[D1֎$6m i@yG5֟,nh"%-]Zb mVz&ձj_gP P{Y.T@Y nV]TXɒ)i1 uv'M6xh"fZdoE:/fYḑѫWn]w4(lu˺z}~ a6m*o~c@c6~ah3 2)ٚiGz'9]5+uhMuHiL<\@@k\zlSkԙ]wlg`M?SYoL,[P%:k'ϯkyl8un#OڙG;LL1JmV̂ӞH Iw>a78zxnj7} Q@RCK}F(uNρą'q"ܘ~E9zhڴ,~@p' % ab e_1@ ƍC׮]e.-Zi^x1yٟ_9m9,XaÆ2p>L)4'̘1CIbݻwo_f1 h cWi0a,3<:.> o߾: {2M#Fw?73ޚg>C;'oAߺUѰ[C'ǝD$/'0F7Bwj>x}븹xg;轭7V 7C=}~|{v\wǶǁXl,A7xL~?L]w nL 6]?'9mgLĸ)dكR?=n31鷟9SNpz =>mq3TY>y$Ӗ{WC1ٲMt~,6||>s9 AW!綯'~;8~ix:D6-G-ၺn]`p~w>R1j$f7iyJ9j{ VNT{#G[zxxƴ^0y;v~_y\R@xƇ߭)S-Z-c֨Qd@駟zΜ9:ӧOxݳgԩ:w,x-^Jkcǎ_~ &M$cc`Yf'>}z@cc/}xMveLm4YV_BɆ dy߾}NQL,.,ktv۩5Ý F=bfoS{7?NP@È`_::t5 X[f_a-]G񺎫f!\FsZiFN5ŽsNc9s-!u9n7TEQzPJ1 \O>$~mfd׽ 4@#)i;A~ؖl"_e WۦAQ[+#k4I3JKwHҔcas[$VaRG6!@}#dGd|wW/z__񰍉F5DCҘ<v!0؛6$=624Rr eIԩSb_A4q0k~HALYF^[>Y\vST3pe)¶SfOEse8X'tsX Sy4-,CN_Euud_?_?;~DeCg$y>ϴQKF< =^pn)!&NmR.O*!/B(i 髴G,/Vy&RzZZ;ul8Ք6W!!+Uŧ[qw,)Usf~†|GǶ |! 3 `xiT8< klU/)CB+0kмI h!EwyMщ(9EZ`UCh ads5JL\E$'N3aBR}p7 cȌ$04s{:1JMaE+v )z2jH@ !)bd2z!xQ*R631*$+>8@, ;.xN-C㎴ȢXz{: e*h )\<.hcnϴG'!iy9hkhLL{>,hQ^o{*󬵐W5Pxq7>rd^inAX/NGjHXj#iI}WADnA8.m<_e+L{~ ѡ-0abҋ]tLhмgAAAGMWEI4*bf'7"9INn.Y IDATJzݱ,|;h e#OQHJccM幰IYWrzrޓg;'Ґsz<ߴB>߀ꀫQ=V4b3-!-h.I[l'xBȕU&,CzHYPjR[m)84ڀ">6^4+z Ȑe]BIi͡(d{- P"gɨuĤXϒ8}㦎㸾K\Ο]DF=rxW<5(R*|۶m9UDmc:FM@˶ ҥKyA('NXP@E/Ө:*'y΂#\K퓩:āܼvo74~DUV!"lB#he隂 Zb$-=e&?{=nK;Qͳ2 E"`&#ntx[~-glHBRT3o0sٲeT~|=Wqhn9w04$h-Wjy: qL#UcAe>PCq9j&.

    ߝwW4P)qa&\Yպ TZW !P(Lɕ͏kJEeFS3)J u_СCO 3|۸qcH`YsQ[-.=Ch4nލ~yN̷š}ܖ+jɫCFܦS\MҕfȤl[]R}O&VZîH[& ި%[.=%$!)I uIdz%P_ƿo?>EUR*BT캼+ϭ :l $ND lG `&˶(AdTL_@jNӪCpu@'G#G,t-jjLP۷:2otܹU($[b_u{yya/Ǎe}vr˗8T,CJP I񏛲tm. E|H Q|wIy)Nɿ1ԙZ[/mmih~شX?@c)lE⫬mܸg#.˗,0~Wn3'&JP-s|R&f$Ua {OSN?~\ *1#3PBhٖR&ʵO_\P$`z%=`K9Ǎ3$VmpX{f .cn<'o ,3g0A>E{1ۑϗ b;S_oB sdbc+u-mC\zHƛ0~M< -3iQs961͟/}:k)d>p?|Jc 4ӓ$$E%!-RX-gP}rulۀZɿ1[@z:s;Kb|:>\e47#& Px'e<\A%E =_&mj4׶~t+FF"=VUHQhڤ8 I鳾o?w@".5.mi0܎}VI$& &4(j&qS'aɚYxC>3I mTHH #n˟~caHmDO62'ޡÄYH̷E"j3RL%.'2{Cj pv]|WvG݅H&2K [Y$0ȝwt ~[]2ʎ)?ذu*)stAPf"T'0az8׃1D e<*ڧz^i5/>_?U2nlǨ(pI20CRT;Ñ^ |W~w`s])4),rޓu$g$XN3 M.9GE* 5R#$}޾S1xTԬ)ɪ}@7R4Y4)Qߵƚ s~3!3a1NuzC2Sv-z2$Ԅ/&fo߾H,qϗ)I-^'~fv+[5$CBZ0jS|q3jO-*tb&KЄ _޷O|0u&\."n+vsbR߄{b4FKB /*&Om7MY(س.lT<;"lfŠ2y_P8nm(fy3W;yVp|}f)H_*߄woxYG\v֭صkWuQtHqTZ%W9N$ZK̶533c$N'^5VwX#Vg{i>EV >EzjPq|X ?1sLؙP-i÷*Eh@ٹswm=H'l mgO I@ˁ\J}bN A /mOE+Xx cEÇt[M)CRJ:Qho"i5ݛl:;oCzL 2v3q(x_zI` =@U7T_tS X6@PQX9sϟϱ"nc^e9e[BMp& jLq'NCe$Z@jͶVU#{" uLt !l-v?Pԥs7< чv7 ;4I߰ar0kڡh$wª:JՏ:n4qzδ!x2 y5h^My=Gl?+%lCe0s^j˪BidcR#aNs hz5P?@o y9x۵m׌9P8|a~Y8k3Xv$1v^Mf … 9UDm۳gOH-'RjR O{o09&P~9]Gwa=yғNԨ)g\%BiWρΜ7 -(9P[PEďo#iCX;wƱcrlZ&̅[fArqxi$@aouNsQ^dtbN0́[|זqHf%Mhkį[/]`(ZOjԘ4M9ht|˗Y-(fΛ+8@+CPh@K\ ={6zc9A}Rl1j(2?-l-Լ565ǀ\G\H:1 RO :bւϹP^:E[ga(ک]V هDO:xz)"i@jzm!^Y'"͓m(x=Dwcnn7<p,z4+1u4Ȕhd=goc~yBBT_7|$\F>u03Vy[nKG:;n uu}RkvoZ۴0(בt~m)5vml/Ο??%HU~}t ]tL=0P>1 'ӓũS2 NN!9+Y4P:|c@MYTLj9.-v=\\ VLj Yc2wxu^n#a!=Y(7Xu~{r/l6 O_#lhh8ֹ;^LA3H2wjδSs5br3.9-̠v:up=D\s{{5څ,gYgT6哈RˑIi1:ݎ* auR/HIӻ'0ldr0 =GC@pEF"\*Xd>&ヷ\'&Z3Kxxx@pe9%,l6x̣׽{w曲^֛ba]g=h>9~UK;#~h;Sㅴ{Ͷ5Hqqزo =(H^~zYvi58rܩr 블pI~}'ݱV@@at\1e潛Ԫl_ dcu 1vZهnܳQM}H؋vڹr.6n8NOX<ν^Ȳ~z,wAlݿU /osplYix k5xLpؔc˶=CSv1?+1y.[>2gDRv.ک-S=-7"ot¦q vX օϕ gJ =,Yڦq!'plvu~  7`[tSNAcrE5o8m5ըer>}:PyFBLL qQُ;E]ʕ+嘳gbȐ!x7SOÇZxLjjKZ8y$bccNAp89spB/wő#Gp9DÏ_kb>~ncuG25N4I9y$p}6QK_ q1<ºXYh Cfj[SNI;)III8tPc>/0֑&yt9 u;u.QN>k ۨ=].W>RN8(Yu۩'dzHSh-0}Lϖ}<װaðxb2 F)@yL: ?- C ~ QXd8]Na%#Ácem끭p,~_~%v)Z,fE.:Aϲ?0d v$6$VlZ1aGxB8,`m-\&|>s\N [ 㧏s_b1v x8zN; (LE}Yca\ dv54.Xǒ5K|\&YK2Ũ/u-Ǐ6|3$e$IXseۜs-\>vTyOxo_& ƍKs_~NXȳ3o>E+2Яʳ=|pyܶlRS:x'NS@&fUO=-5p;6믑Y3 6Ó5+b^ 5 Mv)`W^yVonx99Fշ;Nlr L8QY6mS'R2ٴjJrhr# 24bx_#F6m4<p>(&O,ۦOMߖkИǏ\@s"zmxСC%yt-0|pl߾]z$5j;v>ի˹h;d?oY@U,X A)S2k,Yu 6uܦAX bZx.'Mzjb{ B 0aBiܹ/֡3C33u;1A31cF`d[40PGo>G{nY&w9IlذA/)U^YvͲLd۴So/wJ@KX ~akxs-?8p] 715Q2s; IDAT?ہ(aBtҐ !K!QLSD~.s@f߬A.뼎z΍@%[Jdff&4[#O~af<̙ٓ]NbpD }oFZ'ϭ\mGNWv;y.WoN}i5׳rf~hL#US f75pƍ0EٶeD ggV3a}'nݺ#Y86i7ƀ9uQ~j\-4=䓁 L_mׯq~ϠAd9xlРA :2?,@Zjj`VKP-!W.\q@KXy_|Y8 Oy̌LlYD"dp͏u4W͙LM!rnN,le [ uD&)2m6I\lw:Yp)xvv:ۙ_A E:MAr/_B6m+/2 jۼbfOFUwl g4\Լ7GG7~kNnU ~yM|?d[MW_ GG<@:7o.|rه2 5#)"-[FVTJѢrPC={b̙!({9 Tj{{1ٟw)Ώ ֥ṨA9ZK2%$*FImO\՟W):ծQב5N]iS;p !'2*f/\ׇtO:laPE.+ fcaDʫ%Xn1pdާߦm%vkuz'<2 oX|SL+p= g{힒8Q9˨^ ?W@9rfj[_>xa+.z,5y(;ܟ۴H"&x@ZjڵNhmCآ4fhޥij4Q4QXOu&?,8K[nEC5v>3S!̀Z{7{m"k02 n,ڵ>]YT'lgW$6gH!IB\chD#xmle^j otɈ[#3 NDf:#CBX|ެl GQ,ш?Y 8e (Ks԰06VZ~:(m@?M@ ֮E+%rB>OYI3رcEkpIW׋ MR sTa- 3iZ K $W[Vҿ#N=ge y<ލ7(Zvj:ԩS'8Ĺ:~詛>2y ܿI ۷Sil~B RɴX 11 S^p; BùQzjKs<'`ˤī5`W_ c;wF ܮ34Z8אHePD qz”nj>mEmh'DavЄrJ e =(:/5-6'jF)(i`$[̆ߌQK; J{ ߌ=sAVf׭ ds~9~ 1V+(\ f:&7i~Paj4ӿ :6}jy^nR?BZ(Zǯ ɝH: H-9/уo&%)-ȪR^h6! )shG{>S$Ν&ZJpۯf'8U<&Jnj1ZIDkԀ@ʲܴ3s?5l' Rk&8ab3 醚>;".7z֛/m'=̭(<&{jޞPyfn؎J@ˁT&ՠtgD]3p=n,]/UEo_|jkww2-Qz??78U W1!CaKVmkL[gfpoY+m3wM}W;Ľ*#оtjݺxSZ\탡(uWyÊ$!-RYT{Ƹbq" YRP~_'bRE# ,-Ah / ԯ}=f&d!fuX$,%Ͻ+xٲڵ *efX EA I~[?X ͝ MjISZ6WRS n~iq\[jj-ыY3gW h99< 6lǃ F !8߸4k vy4΁2 i:O#%v44&3쓊0rStͶ?4<+AXY 0Ąe$ً΢jrQ`J#MPk *.b73xfPjm:&*|G WK-d&U6^U:WހכǁH.S SH\@Mv6ѢMĐGjHʢHyP5#?g^i=_M`|YdlJ༚})yJN1S&TZkbaUڪ՝kaF$]Lx ً͚sqSN믿Ȍ¼:`4J@ˁ5yYYa2~` MLȰvuO&z~;1bL?8\&l @ L\pELJ$bet$~ގ SjFHnj,YvRR۸ϋ/^SȣͳHKmOh^Y]EM}8lKR| =SHYP3`j+އ(6ưoh85'p:(DR9l;qBK'MM)18xj?0ZMjj͛=/Bpx6m1ETUL)da2 09"ȭVk gEm+E:\Eno@ˁ5͡e:q0$%g dL42{IFNZ͍6Ϲ0c^q6J> &Hڮ"-(x\19Qx-B53 ǁ:x$N>1LCd"q~}i37%#^Y/VuxIe+j0mungB2w͊})!-Rmv5̭ZWdk.$y,ذ;O;$K #oq-|7}9N萰n'FZ%&o_2_re8ҫ՛oG"qd9$T@T6v:f $4kG!Yq*NA2۱Tɂz5$1+R vo&Zz8IHNM2x&oղ\MmI+n/ )! lK@ < y L x"Nc~@AF`Aړ¹ O#&L_@ ֨3HoT_n $ÌF}M{j)׬y_F넙h YEy9hsܨǎa~n߯m&w!l& "bתUKNJ:5m۷GPr5 y[Rǔcpr 93N,س`B+zƅu30y s&bLyO7o0M̴Q@4_i ﺌ$V3 м[H3{Y҄73!#A\bZ :9@5@yD'0nϏ?h䁤f͎{b/~gņə`TDy(QQ|O?j@v$yE[oW_}B"}ٳ%dƍѼystUf u I>VZInKzԒJzhР8frU @kڼZj^]3/x[q>O󭨢FZ>h~QMЮ5CqЃ!'w x&y"e&i$mgYfV}4mQaPhn&R=8v*/D3n' ڶ܎ {*}#4tVlZ 1P F"*07^/!5HvE|8I0Bf4shuPY1͹:c^ORz֬YSXJ`d0eժU[G\^D y>W^P>!8> Z.w`9jr9oAys>@ jflJZrc.`)jPYi&if (NFRA[Qd93X .E n:TOw1"]&d k6GL2`s@^?jGrcl鷘a$/QaTe_ 53?PҵK1~Dvm=~4\`Rlu-CQXޱoMcjK "8Oիwh ,| 5;'`1 ~/L9լ{^ ֚s4 lq!\9p'|5j7C޽e5OA15o/Aw.)X'|0tnZti{tIn |v gv&wBTU&ViF`ܥn0,s{39R8r76^=ڳK,ȱ#ѵgWhݾ5Zk|wSmZ6^VZ/?`ב]ՄY-B@AeƜW:ZW"Z p$Zj [~ hx_c\/Z,Z8q^` Brʛo)_\g~70Wk^P4pq@3:ч}BpB}/,z=z:4-7P^@i^y̘15 $&rwDN mڴkUSiY^q&.L'OEDsWíŅ;Ơtf>BcNޱn+3-~ll '`oL] +Z=ѰICGg(M>#La*&͚^{I^yT*W`Ȩ!xD^F d>Ac/KUoVfMQм)S ,b5/^v?h\h/Ѯ]`nxL1s""g>'L]f<"a=c8|_poB½w%SGun2C[n#<"LXRMKVlPb[`l~ ¼vKNY~e}B.5QzWRELgє}LtРA2UՓm͢5kDuӶYSYi9M-tvP jǎy>ӧOo~@z3P-1Ma$6zO ;fHMxc<#M)"ZX-(:'K5ry#&ng-[Χ;jt.$O5U* 4P6ú.7^y+w!8x& I:u3U)3fUFZeNv fM4w}Zd0RsvK1?b>3Z=kZ8Qy:?ˁY߇뽷+Kb=__&\}{=tSLj")N׿VH8jqZ;fZj[!g!PEBk u3>?xtum۶!- JCٴyi|uRRJr-ӧO<J 4Ki4|35{&LI8@.^tܤkk3QA)(:̀*d̏Hmނ#GȡC;ɯtm'dA?PX6fUIn>9aN _͒y N}-X-y|? f'5]ps$ىba5gA9zpn!y=(bP9@m&B\9- ON9PϞsl.5 ԩ#4tML5Ckt&ܧ~ K I˿L@`Hs~m?fŅڥ63\qZxlPU#&>.!11ZcHž4$i-R Ҹic3I[U[Vaxim6w6ڨ;!i=ej\YhG~Y&iLD;ǠTou35k(M4w&PVU׺nF|cwӌ\pD<5 (JPcnc4&QE;;lBaF} &** P%UEAAT({C^k͹9`r=# =V[g3']4r[nѽ̷3gcE/{$z bm,Ucx^LՈ_u< (_?~WPG !39,0+oi6{챇)ӷ"{?6n 9`)a:B`ݝz8&R, qTVc!w?uE4 h>mNt$F߂XN04eB0R<;",*.p]\QOa0e~!Pϭ4 IABhScEۃO>lÏlA첫/g^}Ƒ:s .|g_˶vs\k}̗"_4]cGXS/,׾Vf(a/Qj6D Ӆo"EYZk9VW1]mQ[߯-'lî53I))cis8=Љr7nz~qktPh &Mr8xI{Hj޽{;sxRQ<0t0'Ar0w)DtܓG.} j(t?Wnd Rr}r" ޷ ^P1<{!% <>3[TE4KH0AfwsxK1c8^_'"=kP|Cx!<3*_ix goyg'z|c\0?7+9hQڣ/ڈDh;%D;=s<:qAf~?7\l[d@vvKl \GHsp93]N9K@P0we V9n8է߱ Hzwmߞn7}]>խsn=Ht]>] '6x,wy,^ Iӭ[ih#{:¥1G#ن۪}v\M>TX4Mmm@LqӮOI%_*4|%ڌ45"߄'IYa:$^0!:{澈Յ;O"bfs,6ߎ,N&"aBv1P+NŒ$o)B\TF1?e 0ps6W̩$13#ΨΑRVHMGPtDAŇʬaSgΰ.ĬΙnW2h~z7"/>}Ǫ"d6?vյW. JۢmZ4ת>zE])~'zk`h='3}IXͫVYr kEb0뛗. 5m˚YutYH `i-3Ǐ`P ۾#5x]Zt\[xbܸq.&3#fG ^ BŒOI%?_LrB_+ ws : Ł?vUe-~%l'q|ꈬBolͧeCY_ﲅh[l< IL嗜V]쭷wE2X[c>l+Fn &Y_2"YVOie/W]✀Hl P?Ѹ#4Pн@M#N˓a sm5 9ؚG.IC13Z)׶M!ִbZ̶Hh|!Q #{LC&8yDLXMA\Gkh+'Pn|,31,6ߓew!x2yOMv! ˬ~ij7N1_ j\\ \a ;-(+c#o!̎ihTke{Yz=. Y3~azx#̺; 7 96;g|#uFʩSj$/0TSZXQرc3 L$ R7w\0 __ \ȆLELy֞x&qҌk[dYgذa.D*@XάQ@7Y4GEsm]^X7eF o`'o^yk9vo[ۯ"zp[okΓښ5G*Ҁ+h5m6eUsgGo0g(rkۚ۷EJ'g ?(򕒿Bluˆ˂ G#MZH6:e)ϽK`n!0X/U'3BxͧT?Z*ƦtIyL0%2v%v[htVs߭4h`f]>3FS3#ZֽlMűؚX1VwyMy|bVزۮ~kP(=.'14ѥS&XӈtIV;nl}+mc9*>u^FPϽ߄%܀ЎV7ltZ4 [5Z"{[UBh , HSmD^ʤ#MH <&MA"Rh @57|FX2:LUE@KiͰVyb-zHyLٚ%1^+.0r$Dd=[#8Dy6z}U?r5اŔ7OvˋgSX%%7|Yˬq<嘐8P!0+pDQgW2_5ni+59 }!%9Z48J$`zMHG HS bs ZɁBKFo4P53[~}Z;/d9?"R?X˝?6oRU"mMLV-„8^6Fi^m+?rcIkh[T󙱆~.K3OzοfrtV(]ye~믷>ј|﹇5ֺ H򂍃A[I5fÄ (QBCK|+!6̷XsZg$$\~_E5ZC:pb[д<".d>1vma!q߹faI]㓿G}=;1kw%RIs5jnrQ}8+F[aY]/u$\Y_a`" Ӹp5e+>>oΚ~Rd02uJ[6߶yG>w-\͏ْG  PFtG1>Ǐ߿G~rFZeT9 u2v{9N.~,r+oI9[ߙ2$aJO{B︔ %bnjABA n@?WLb<Ү2`𿷴[;X[?H6}N:flMƜ`=ۿY<^ǝ7gl׾f6G؄6w=ݱew[fǏbGciBg駟W(\{Iϝw)'k[m~wGV9@W;~1w]eE-wHߴywki^9~}&'~/^=qQi63gB>;d+l(tVM{1\J3BC["Z/ /,YV-U:XA`>b! |MTF@y<[@.S90CL{)T`<a?0Fp.\"ˇW$`u&t%Hj\]oUt N!R=g(Ṟ$`B6v=Ĕ]) jURY O WBڑy3uҔWmg֧xrZVx7ZR!Ib0yB!2q =~KSO=(e7,eWc,e$Z Ewy{<#,(-ꄴRc;KY'}i,}(9-bwߠ~v3q&[!O㬈:Qq1rh(W5 ]{ҽE|QH<,jD~tzI{7By!#/rF/QQaPչ| ŋm!kYC/jj{_QC,zl:KVX_(?rV:DNΨsS tSKANBHg";u=BR pLKY]xt0Rųk 0m7_N:M!KBr<^S9Eb[} uXS?5(|?|#3S>×Sri@AZ\TS$$'Wsl*|j4ׯP&@@,d<3/iE,˪~ &8%@SzcI6ka,Z:.hy#h Yd0bM$u)$@@,L~ʔ)n;i #?n;&>?_ﶳP3fpj4ׯqfk_!f͚e n;h@)dPGIkd#mO?=\ IDATMDIA  h@@@@!h%x7m'Av˄:4LDY45m4{GvW^x!QB4EV>mYfVUUen;Nwɒ%n;;MY@ @4 )d@%+#'xm%X+Ns~L%ig!lGb&Yhy#h Y?{v:X)RUVTTԩSvl3gtjvwfd4$@,dmll̄ HX"[\+Wh_m@,~h^zNZ$,9aJ_|BD)-Xm-oM$+0K.k׮h_7mkfy&Y"Ѐ h%\vdG H4K/4Tn}ꩧ^pi_;eZ"HVdÑl,4ױ귦ƅ,/1,\ge˖@@ݎ@ @wςF&XL; 'N&Y_LY_ɋMcfy&Y$PVꪫvdG xPKq]Yӧc=\4M@X% H  Kb֭[B4 |kL:7|pvI'O~qUH7Mx9~1ilt6w;g~Pxׯ ݂~|r/nwp ~VI ARY7"|z衖>`Cןs9v衇nÇwshoߤ}Tn?/m̘1n3ܞ.wW-N=T~VT$CWJ]k~?M~[,β__ykSJ^|v!ذa\ך^?rDh{A5DJi*M@@@@NcHeO(?h9{5ʍn0Ѫ"%(󑜉7iܕ6w\4'… [e1&}pK¢eOm'Ww* \uСV#;裝 Sn_A/wG=qn$beϫ2◂lpx ;#nLgmȑ TH'b`f~ru][D˱2:@/4/Q0߿{)qB@nuDId4L_ y 8OaIhAf NA[mݜcQR2=Nn2\>,UGȓz'"I$Gy,Yb QŐ(8Ow7t#QPC2?3d{1.gA@:!weʵm@[1du9VFgeFohz#[i.I%?)%\bw}Adɇ_4Ȭi  sKi hkX@W#( +H$Jl$_~-Q@q̀B['H*/$K"P(xwwυ%Af r'P]P`3 @=b*PuJo*s *6x\dHFbcqH`)G*Fu7ked!)/]~8ڍ)2xvQ:f.G48TENP00{@1Mj} <2F[c.N͇'I^=8`1Y9}H}cּ'OR 4,g=20b@e9Q02a9CsQh( jqrTzRIFq1:j-ɀQ折;BKᣉrl4:',OMXYL)m%hH~CI__V,À9ЙRL{,ks8}PJ82wOHV8Q9$Ե1E yF=?AJlYT,.@b3[tmZl_g$F(S{Z]ۗgQ"vey {G^.H%/v?dC;⩯$$zhd.ß/۵PvZf?֕r{iyԗϯ縌;+o|m_r9Е_bfr|ۋM)mA@@g4 50ɮ= *sf?SJo0ku /o *B -MpORFr @ڀ͋{xD="@\;mms="^M䔂&qoms=. CqǏw޾8'O?=h@4 h.͓hФ0-x7%Kr~#vWHMsp Bp'OS˵w]G'qSN&#ʩ*ڳ5Te:;Ax6W$ RċObN]YA Ѐ6 - ڧoB YfLl.?BzdRXzrmuXS)q2rrXAfŏSIv;R Tro_;ٛ$1~B(NuܓjH ",82^y.lW+B2SNuN2@AI$K뮻lw'ޥ߃U h| >,qL$~CWyyYm}/tJf@WyMFqbDV'n9 Qs'Eep,@JH1yb̧B@/܀"h@@ ڣuo7o^K.b&YyB8EiO'~3״@퀟4@ ID ʴOD_*IO^~%C~R'^x"beh-_rŞKz>4vw:+{g4 (6?~T H$]'^W<]uώ:rM Ѐ5i\)וڷm] 2G#R6,m!h@@@@tt5nY~O@2hmmT[@=}w[C Ѐ aS4 .8t@:@@ ЀN h@@@@@@'qE+IENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/graph_4_ex1.png000066400000000000000000001707061153663664300240470ustar00rootroot00000000000000PNG  IHDR&]7æ pHYsaa?i IDATxyvGVzY/+7o%/MMnns'zPAqYDE *" 2*̓2\nIy=ZM?V#﵎Npppġ`/jdFKɟYte8 Kqqdffe˖ +멲R2##5i$yebg=och[o%Q 7Y_8ryW%++뜺#߶=Ҫ`8}a箮+'O{?A;ȑ#婧={huz#n}sΕ5kքk׮]2edD^?=RVV&E{EZ7$T Q'uGֆyݻC裏';vțox.ujw}{6ގO힌2mz]onܸQv\1qheb/KoO>D=j9[o Xxau-_\~(9uꔮ]4M?mo9zh6PwuWoɨQ$'''`4uhRRRdĈQۏꪫUN=WFFt=l믿.2eʕ+ȑ#2f_S\wСClJL>]75: n^rߏ>??CPB_x]qW_eђ>vEno}}Z>Vb]huСCr饗*l!ሉC`/$ӟ{ח0W^ zUVɏ~#wڴia/o{iaO?U xoQ /€bVoVPݐZAA">)gΜ@lV.//WrBAnٲEĭmK,;w k_,ƍ~!$cxoڴ)7mbh"wu~~sĉE bY=8S;\%%%*3g~xڱuV<(cǎU-d_޽{%o۶M#?o>^ۿ[6lOk׮'OYIZVX}23gNrp_q}pn a=" //O16o,k'>~~1pm\k߯}fspġM m_ּoy_jEBKR?sy']b^X(衇//VH V qSk KKE+1X =7Y%//% x*!C_K֬YM?O¹^o+??*oȟٟ OOmJzė. =z~XV8c=& .Lۉb0^yJfX//~  I?fD=\c}G[nj U$OQv_(r,R\k!NK?qzϘ1: ǵz@`„ *wr7IÇ^ }{K ׀{}1Cz 7ܠ瞓믿^ - zRiR7fpwDB=Ո}!}O /yt9d//{cU믿ֿi{ァJ΀~y}2n1@/ V| ۵adpM/챖EP@_؜E %m`?\@/SX A(lYE`2eKKdk@Hmݦ$yk4bMa:7 6>B,bM;!Ffk`!? 퇌"YÆ "S'0>ksWGQϞ=C#3\Qser/r.A}JY}4pO!;oLpġM%#(T-XeW}ţ_9NQ7^]`A K_AXP46ܓ/@A}XI %iiiOKr,s Vc}dQ(s/uQ68b;  IGY _MUMFV|?Ah eĭr64` X{P/|A4QL(Z4ybk[+)PXF(zX x}hmMWWo$2`Bh??RqFt \d%?`[B@^+_ #WO!*c Fv"X uklY7h?$u>u½JIYp9k1A!܏Ts.e}H{qwp}qi8/1qh"_]9B]`Ah^Q<‰#c/@IA0 v%9&%"@Q Ukzb3P(` ~ &$~ ;i/_1︦IL̪\2})`=֤h@.fkETbFHd~pYY F!A}Yh ,(^b}Vk e%%\ XbNH e=ן6Cl_Yn6/( .O o@3@;q}`9" 9K(3xN’bVD< t f -óDKdDk7K&H)w"R9b&x_qI霿nbJ~r_ExŚ6qNfm û2 ؟KS03g =ır)\=Q/)X+/Cx`oIw‚K*KK~!(iεemGYpC[ ֭}7,q_yFvȋp ׃!ېe%>_9r Ȳ,׎k6's_p/`6N̥)m9@߹W;$CA4h[9= ˙w-޿fsyXzw"e"--#&mx܈|%zM~1cF2_iQ[@q`_o(`<;ڂEbW"h#BlD^H1R2Ai݀~sHAP~yK`&z!grS'F^dG[u԰/ m℥Ήe%e"nſ #GnY!1mA4+{vs`q36ܩ|P~q|@T18F>Fh͈$&^MDd%rX4 @lМ6^i{4jK,-5-VkKibn015ĆZro|^2搉oS1-Q 8Po0% WVBt '-7U@@R%H"cd}geal KC>~:',|$1hyނPc2@D>:Q4D~.DxI]\5^sddOfbe~5=.V2r6z zD㭝:^+@^|yͨ yL侑Y]ceێh<,I䰚lRѮ={hby8,fqjJFxuK6Fs]}mXdS\dk&[SL$X PƂEK)V_\X$ #j vf0ԇ  0(qJ<܄6rjUձ'Ґ$농ʘ6@0pC,\屯峁YXț 7wKp `:59 FY)ڒr]W] m8LNm /3=.EA\iO%w F<nLK RXLl?+ f85sM2- m"ˈua!!-8%@Xba}X-_%!\@fĵ>^\$%11`Fn1nLOb~U-nIņߝ&o;m\h6ԏ5uۉjx bP  biK<>X'8 e}LX( cu찰PꂕH:cgHkg7 $Al}&FyI#bo? V$0 !~Fa!`i&8x>!Аa2%@ !? @d7ԋ[efy샛v5XY\+#č@(VFb91C\ `uaE _1r<@@7?5 (0Ds M2$XqKP<ݎD\llllk/n }Sf9d:uvΰkc!a:ǰ/ۦb@!<@OX(c ebSHg@&΅{2J kɂ^>òBFa! )Ha]~yhLNĨ؜_MzwȡRG4IIL  W,mS@L,7Cp&U55%d*?ƾ{r:1b7.H >`ј`>73 sNBzcǎ -'{+;!#&]6D2> mAIIf;N607p  Elbʰd2lð˫^akɤׇӈ i9DZx&òd\by ǟ韆hz 2o BsA =_|[A`&wy >deed@YL8888tNR;$Ĝ0 >2z)%)XC-61ueNxg~u@LTd']Ä}XR ^XXy uĤ f9_Mt M8x8ٜߕVjϳ4brpGKb``;1Uv eV/2bIw}Wj xH n'LG.A H aq#s8(1 ùс0p _6QM8r$6<nTNI1qppp/ALb-Yi,w[ߑm>oGL81 +&6lb&ΰ\NI#&A 'p,&tsb_mX ښ9kiO鈉K!Е&6 p Jɦs,&^J[鮉$+k"qAሉC|O Cca6wѢE:z&qF0rlx$9# gKi1qP8b+ah 0;D#Oƍe'p|_+&&11N4]@!9_IfJkwJҔh0a6]~ }=;H-na8ل/QR'p01M|,&64"]wѣGͶ? >}ȴiBx-j̵q۷o_W 2rM7i^z9D@@I!_ ͐!C4}[.GL⋘Ĕ. )B%~-w1Dψ3F1GFϞ=lde E'Կ0T,_\ nӤlyQ% Sb#2.GLbY,&N6bd WNZ><&FW3f̐ɓ' rT eu IDATqmLH)B6a"ecv`ft;Caƍ5K,}ړ J:bp$610.$6xY l\9L·, |1r6jy8#6Xt2[02 8p@hbq!E!ƙ:ungΜd ѷ~:#& GLZLmbx`Jw!wI%r9ax; C\NFk@l2` |I9ߖ#& GLb壈 'p l~6_ $so{d"GL81 56\kQ &rV\SzYpIΕmh,{l9oۍ%X 8beep '課 Su!:rȄV^rum9bሉC r.ж![ȏX^ 72E|KDSFpAIl\hy$9WM8pZv #@ȥY6a4+!1KCVitM𜌟>^ m/4&'p'IM8P0$$XFRC) ^U'VI~yWRP"fLcF Ҏ=ڼ%%M܏Xexf! 333eʕ:o )I7O믿>d ,$e=ΝbӦMjEn0^IF4S}͚5r7yw5\#<)ΕGLb/ >;x!-\PN6%`-;لLE6a#W]7l+_)O,BN埒 %$b.iiR7a0?!L0.~-LorBոKwߕ_ךu޼y:Y&Zxbݟ2dʡ_dzd2eƚX*[, O?8%=u'}=5'N} b#&]8888!!eS.Ň+!(ɐT%$%/+1) b H}=K '|t]uUj X=/,wqsXd;vƘ`a!+Cʲebs  ,-Xl EoՊ̓I#&Cg-']{v Ml4Rl"1⦺ZוUɽ_+-OҋӥBB911w Gs`ζdƬ+ÒA OhˈKضm#(EvN'vNu]tU8b<$< s.N6dlq# 뀼-y}C2`64&y~uH4BFLG :3իƼGL1 Duё&\'pJTx71ڨͣ䊩W+k_ߌ-v[5rD.xҧw{A9rH-GCG̙r9(:uX)Ё^ur!ݿAv. GLb%뮳dȆ&X Q6ޠV\4`OM{Qo9{Lk\k:W~4ubW'oYu~#{o?W.ޛW^gY߯(1bp 2eY5[nL*|sʩ2Z!㿛5<3I#&ٙC}2'p`icdf%e9HCz;写7Ȅ'ș32>4[G֐bG0t<)as:L|dWdw9K[+?T*E>I-IaebI5t18bQLm!+6lB˔&(x7ĆB4Y\=jluՔV*)1MS٧dGc$*CIj1%>~jHJJOIsmiGL1qppH\7g]7SvOK?ToyGH3Eň7)AN*:e'Rސ&gRXB ,&djm8%1bp$6ZNdȆY&(xIRҚw39I?ok!wXhSjA{D, $%/@V$U0D.}|F@5I t18bd~}׵C[@^{MN62G.9<9e-;B24FtE| ֒eWV,&42Y9[k}r&?]]:On]tT'I"{GL6<9i!!;&H(AP:}"˩tֽ\Q9XQJ2y6H}4'$Eߎ888\滰T/yYz!JJ6m!&ćdL%&$Zk5~Y=CW2Ld\0+ .I&ɶmBmtɗ_~YLʉ ʉ ʉr嘥drC)I@+whWq|ՆlWY@L}r$5G~u]v\S%Z.GL.@1p@x5d[noH>}^1?c)%'E~ 05B eO)wV=}4U7]3ygdm:WNd{8J}=& i2sA}HSxJAU\rIYʲ.aW-͞dCRh/BghܸqC1e]&١~8888$4K'O/%0U$Xŗ2 CH-l++(VJ~m! ʚ2>-&_պRen#Sў@["(3Q;LW*-3 /[{O=k^u_@ %3@H}ͮ̓ ɐ_v;(^`L , Ҳ\`nFͰGɐ!CB,k={`]wL0A͛֓M67NːLXUQZ?Zg}dZ&#b~lٲE+WO>D˩!sI-O6-ھ}{hr4HְaBb;k.-/^XfΜcǎi}'N5k֜׬,mss߿_!#?*ղb⊳X}5k=*#G2כ\ߵkjy]:+[oi}zyo&ۺuWXkJJJ̾Zr]mB@kii=f̘P_-Znذ!L۞7|3׹sws+:uՒaYҞ{L-HF^~PB<%/Քɛ)/\b{ojy$ UM;76~`_'RR%W_l޹D+KcƎry'T z]`ʔ)Ludrpj/`2{l->|XA?^~nB.裏dCyL &2qd/M^`/*z^y~Qm% i iJucm;7uYȜpxnn3xsluv2WO(oR_)7Ք4+Ǵ֞lGٲۻkg%וh#$[Ҟܼ\uTVKeIL9E.r|e7#䙥Hy}eK9=dҁRX^nbL ʤ|?v8{~;rNiD@rJ~L=rPfAcnnausnʴ6Q{=2uTɩcNf=;e u%k)}8'\V%Wғ/ h|4P_$dZ𣢡za \W{Wya AOdCRk8{-+ o/,2DvppHnl\>r9}H!5RQSʺJ&2_jBа[?,*L0Yb3o;nQkǜS=MՍ[7cn1uGk3$zԟ#^Q%NʗLO)x%KT 6_/0''j2JW;&0n9<ܨ؀cxO_@lG5eJjcd2w\ypmn7I-L %H#̭,8w uIKk JJ4LO%Uv͐__Z%IHq zP,^nT{1_b@x9n޼9.<`F$$`5?M8HZ|PW-#h).)>(yoߗ,νUYpeY$$XH>/\_!?X*vf+9%hRHL>ҰrE:I\Ĥ-p$62xF#2x&`*\5;;e1wQ_u4&YOygM'?y;ɣ (r) ZEtIcHW""2?di]I#-TBRY]2w1Rrt.1I=[׬^o1bp$680dm t GKF(;i{)/~IZ,ș3[hX !r:[HB32dR`&`,$OghȕTKdL) /4IB-b)z7q$p$888I;RZU*RXY(ej t͠ɐIH4Rb]/Aw Vu۲Arb}4CJnBʩ/~Jݦ`.GLb,d0+,M8cYrM67[nwCzmnrfᯨ;OLW^ :*'4tpJQC6[ +o+o) Pj@Vp@HŶ j1)H`#&] (H \>p&:N&لMPn˦\&[Sj=YHRdՖU]y i [Nfʖ+ɔ7+/!IiS{ &ERnoMԐ`U1bp9`pGlE)aD yF7ײuuRAo^55*2_[Cr^b*B)N߾-xL;bIl0GsA2}IM8x$y"4Hȅ+}\1 @I?f M9)4q]gx#%*˚9 9+_,/ Ia ci")>xK;bIl+L ɹy8لf&l,|u]\?zodk#kЊ80]%$2S+d!хrC ޳\ZLTJNad6~ |j1)ݺ.#&] 8884 x5åߒ~RV]C~ӛ8͕CdxI!) b,1U9rU3%~{dUJHRYLj Rq9bIlxa-'c>i̝l#YdHɦMr駗*`8MOo ͜#I_g)nz<#]篹JY>['#G M M ,\<D`QC[@:7|SN6`7xCl"aYq0 c_kpᗆ$5Iʉtפ60w #XR zC?kԧ| IDAT 1iHK # v:bIlJff˷3dȆ $lq#{=_#7̺A[ޖu[qUq|CF߫8-&ȅdVHj|2"7pEJ6wد'{l8O|SRy{wiܷܱb_8bGLoܣ2tPnugqu933׍M5cPD`$pa#$&۶?K.lW*'ӥlPŏtld/ZLsBL".GLbw㵜C[@9' cq㴜iİ'c<1jU2dߩDHViV؄|m!$];oH^uMmdM^?@D˵92pHJ<;XyDn\n\zɴyR 9綬y]rs \_Vi$p$Æ , ~z-;لB֭[ΖMd*3gEӯw}Gܲ0H|O眖ϖ}& e59']|c"?dʽ}Jw7Vw 2|dv.[C`+ \6-mÙ3*rP1T~[XYL GL"CrrD< ]-mzMHyu&I#io2_:% gGtiΪӥKrٕJF *$C+oL+'"2l8WJC8b< *bb1&Hϯ|^mSZq#;b12jf`JhE}nPI~͵C0 ilbe'XL'JTV$% 1bp$610aah 1qbL>c-wlHɲiWJviZG-d#5"1&Ƥf~9!ϔovfɆY.h_oV yG:"UŘC6S#cb"uj1w$p$88$BÁ%,$W&/WK(I<)7rΚA:Q4GtY(Whߓ. Il>*'@b;CM I#&(N6;RreښT`%\^AV1'eBre2yvMܪ`HicxK-^n,T#ۤ4Ig.GLb̯ah ps$~!oZyi,͔GS<%X,뀗tXW/JRX3yƘu<5XΒzHHfyxlSY;r̯dōkyUoTŤږ.GLbC &6:C6 O_O \=Pf̭FJ:Z$llV░(M]"djI#iκ}GD-&Iu,U={gvĤ FJVùuc[!{GΠ%%MJ1/])d+I!EkOMg| &]Ċ/t18b2j(-'y7d\9o;J6^K9ȥ^*OIAEƓDZJ:ەsT^״+KJͫɓn,cO H'#WΉ2prK~T3xo'8bIlTUUɑ#GᨮÇk&-oL8B~>/kIjY@"XKlIOM;7)IivyS铞IGJ55R75 nol74KƶRyϝD  Ʊ0L6[),RRh$H"Mk&7gf)!^esxV6XMZ"v#&*Ux.GLb$bsr2> mAII̞=[N6(--Yfie9 _L,?\JJuD#$@JpWdR41%|icr4F֐5ƧÁ|T=Z*% i$cIb-S٧IJNUN|]9byT'x9II1 2x.\P.z8P ,вM8x~ZnO٘ :!&ե:p*k*C9J=ȉe74sRLjVeE2qF^+WeǡLuswR) \HdCI3&IveUW(>|1bp!+aBz鵰 Z3(8rO\ Gɳ/I{snrs%2eNe( !еѝS?g&MNNd#*OLP"Y?G snTNI1 &>|ah :Q݅\Cr{rԍ <<|),ؒNRf>9.sʰro2v[ҽLz=P&OP"#Fʛȭw r &UI 1&oux-#M:rIl|3 =YKIc7$p$ׁ &6K6!kIc"yoI:s#%r0lWTIJd:qޮ#$D ꂖ ?*'JNYbӕ"M-)b1YL6(!borudpZJjcT&M %Y~# Ɵ)QĠ3Z4j gIOƙ t18b+>C-'0Q|e'p0*rkdMf֒ʋ^ԀԢN < Z9ӤeP3y^̹ 9LW|U5_2,:*' 9,rbR&9_̐gvN#&p$6Ӳr8DoRل%Rk$%/yY.9$8lkoʝIIOR jiyLrҵK%"+.%%/E Ȧ<+ή1?Uj?+ܭ 1bp! gIcJvidd(1 R+ 4Y5K.MHaB~f~ s\ِ5i$&s?9I'8bLTW_iY&:-_\-7Xrd\ `ѹrrOϧ^s7gI-Hm)AI ;k4$;}6NBR^~^bKF͓zHz)dE#&A_]0${״dR4cZ2 oq?]ґJKrdy'|~Ov˔qBuF`ϧ@F/?/ΕY,Ab7m<ώt.8bi`n#"mZJ(ot"x'dԨQK1CL؟_#9G=ݏvҚcl?C{}cگ#ړ}mMCŎkgöurz) ·SSKCLlDnJ_SQ'P&|j@5$'{dւ\jy_\{}g3m~Louڠ)8=(hc:筻Swu"?=&y׼I+FI#{^M:iCɆ 󙃽78stM***=#ƍ'N:~*vxG4וS]WsΑ{ܣ|U 99PR,u54O2M8JHAm5Ia}7_?!/@D^",۷ǎ;a}v={=7]W"+}a޾r=<{ޙ2uKWE#/mmrJx2vXMJ?)tySeZ^eL;EˇR"8ٶȪ 勯 ,y_7{?@F#-pl~ʗkˌ/fj{O&}rAP{|n`V`/qF4sTȱc2ȴdMߢdy +}U[Vߔ_׏&$;mΗ+jyޭ2~xɫ̓9QQm'3?~/޾N d1P_[ ;6k1yo{r*甞keOptmMwڡm͐} pJeʜ)*ٜVhҾD~V/髿JƠA2=I#~ 0_X|1~An9^y9r9y߾}̠xA˚_^ n͛7+A__(o+WȒ9W>A^XW^JW\}exyj/=`o_9_F^Wy='o}ݷo_kS} yɖM>$?o}j=Ycvʁ3TygրIl6~e|@XVyfr8mI? 6|kӒW}F"p)*ɓ/, (>+aaU)N; wo#;UqSFIn>[>[m~}ݿMkfW.6~ʐ%E]-))bmh} h_ W޾٧n2r%k(+mԾٲdݶuX}UL8Q޾.+վIoH>gk{><7r{^yq |ʯy=3O|'pſ{W*)ńEE͋)^:ruppXx:)S&JFyF|_n|{'w; =.ʸF2/{R)l24V*ҹn%;pbI&Su7K2\.q'Xݴ2>2#lԙ+vj6\W+WAR2Gy\9a}+ Ҟ(}59rNlz SOCZ 9C^i͙РA\9 xb[_~2zhru%$׍7(]tu]6yݻhȊ,Eί7́-U94_dsLKn1`7Yl>4")Y 1緺&u]wrdR"%g _aG  n aW",WFI (3 ~m~mgǰO?1L-8/oEWt(mrF8ZI7C"u%~dnyu #~au8m-.( .]d\fn!>p)c#2%}R >cJJ&\$+P xg n``KF2kr`-~ʍq*%}##wO?[SW=%} zVfpÅ; 1rxњVa/Jq}Θ&ۜYsʚkLiWB tхr-嚣lz"$6fܒ$įз b<_U*֐Λ/US"s溔 rJ%ċU浔2 /gdƞ%˸n XCAWM$)2  vw!7͹IS3I\3dO![ B=R*_|#KZ+RȷTdK}Rԣ/ f~eꫣ^ Ѹ3b-O4ä+VYLp:!q#mD.rNGL"4AB#&- #%U%Q={L\\9Jkl!:R,E2J!%ix;BR"S? ;'$8ƂAE!;@h]&m&&Hk(^wJO"ir-虸!R)xA(1O@IbB "=ai)1 1'#lbFV_!LDZL3M23e]ȗd|#̸Y0MSFmSBAR]W7͝~bꓔsthk2N?R?ׂT9z0%ppwBG IDATHL?PGkfvM믖G_}oM#$Pklں0D'2,&KLP_|Grw&sIZ:[WDW_r2&MC6fo|eu2w\ytrń+z|C7(u<H .Э\$ IZĕxԚT#5^)c%CH  3ڲR|ug׵nWCdΚ(u/ H ^: hle!GJC5'eS. :b#kX"cG,)W/b:!oYD-#>)8[n^˫Q>d3Hk<~Mܘy;7fb{}'sd7Ga GH# B@]t5};;Ր jwUeV̽W~f}?gB}`1)1܋HƽD GAm[ mO"% -އ}Zw|CLd|6-eоpTr~I.5F]pR]'&uGLKBq BsŤv@m'*P rL# o XV4ZG |8f$]@0/_\ZIFdP3b+Vjw|]g,g!³l >UfϒC[N{DGXb.YH^!z 57Vʓ4*?Ɋ#غ7c'ڎA^78'|)Z"&.9պz!#GY;4eVNin:S{"'~I ЧO(IτrHpM~= $ _ oHo+W0|#!R"l{CJ\b! TGԨQ5ezȂRO2~\Ƞڵ;˅폻Ҥy(qfIEگ8n"*q1޹pw@j*6ݻrx #m1]9ȿ C۪895g#||2LYG|>$e P.8 g"g$>p@|wjg=UJ ɠ݃ޏopIq$'+\WEKJ &ik%v+04i8G|d>"5x[7)2&lq_`sU!aLlk j6c?CEr&nK7@yV&Iq3DwӊeH:*]9ͬMr: J;'h(ݻǯDH͛˗/zqI*(n}%%d%y}7w(oJ ǫ(bFh)H ]lhR&KdwL(8j ѫߏPP|*]>_#?%ͶX~t_g!DaGW1QVosjGFvʗ#_ ᾽a<ʂgZ6%L$;u>f iSX:cOJĶ__'&9ēnv13bѣRӃ_k.qo1۶D|vvPkKM_M'zWEԬ%=[wQ>r8[~tc%S%5w\Hrj?;$_y>$j5{7mڍ1{.otK}^:nƌ$A']I"m۶'||n:*p 1LVjBid*OU3pR;-\Oĕ+!Lh S& ~pqS6o2~M|< '~߼I^?<.߈ݾ-gP-YYHԭYcÈ͝ Ǵo.bəQ=VJa ظm\ĿJ&L҃#GtH,IJR\;iɐ⺢mzfMoÊ M*T _v_tbc֐wɓ@ńuI큳 kCuWrP+YKHH4- `-#v;rv5 b(_}տyxB3@Kӑ2EBLVkG(צ9џt%Cnl.>lHSC­%bwƸ{As@Hd¤I)ڨS(J% iɉҡ-vrC^BGt]RE֊~%`yN&'W)Q?~>7VQ %ȓoQܿŤ!)ŋ|R-T:1 PM0OP+!8ZDO~A! )!Wέ[ƕ#҂R|31$3=T:1 PUPFlꭜ[%X\ɪ|`pza|+RIΐZ(2P\6:npH|c !=\BI ?zDqw_> iO?(xUyيR7YCENL VD&[Lt a)8 qve*i# I*Kv k;j w`ՒDL*Mi9Cc%[&SӄW޶@j :a`۰{Wnj}I7 +  9P.ŋBz;KKXm "=#a!kla1 :b"Y}m {()[6h7RDIcߡ1D$"ֽ#{ Ԣ)LWNrpڏJ5D{p 2kZ(Uf5^""fQ'&uGLYGVkNL2K,x3T$>אFz""$13o'׼QjHL3хHQ- hAvፗ(89DJhg$mɀ2q{'#==c3d 1@|$Giɉ:Wn Br&:~󧱾!k`$/AHDS1_; cMo>[ۜI+o7]SCalB08 =b4AvoOjƷP;U"M1ݷ<%4iڌTNU &3Z"ܷ:1s4HbB ٱc`t n1PU [5d@ #G}Óա0j(ʓ"<dC$)KJhJ 9TĄ& 210ak ҥ8hQ*<^?hRPH2mqJynax 1wl2Zl //%rM.W_}|r/I˗ Sq 55 +H*7k`;we1ܹ"'b"-6-/=1k={dW"&ݻPQE-&b b"%K.,]XUdԥDk%!AE7,=փ^aR'<񒚯SUtaʿ2P7ӄBsXs݈I_wD|O'96|Py \a 5ct܃ ysҶyDƐj#ҙ9H65C(K\ujlDҖb uU 腐49ޑC*LHB7l0,yPZXZo]5"(K,gĠ)W;33gBPwdc !DRo^kM)$If)W .p#kI\g֩EK&2[(.RTa}Ҥ ~|XD(M"Qx&T|9_8U% uk>!Mpy9 Bo[$tי 6/}B 1!Ql*F}́âoBm ?wgx@OcLc116Ji|c WVń{md:x:11&T7nfS-&:tPxݗ7;5R"tY9F%%ĵoҴtoĘqi2" MQ%%5m-dɇɜ/AyISq(ay:"exw_Tw '+%:k&\>ȸ㓶% gMBIȎPHmuĵ̓sTFnĥKwjCFm[4AFY86CHKHS//W$bR pY!,TbRhĄ< ~,QO'K'&Qh}Ms7p9Ǔ*k6KN\%xR<|k6;8%艸hOjt(}5e1ErZT7}WΝVnZD׍5'W Dߏh&&!W3/ӟL:i7)\KpejDzPgO"}kg(]8ɓ*\K)"AV%aYM]LRfaZ)w/#ܻ*:"& Ip~ȽY'&9D.\r. tUW@7!w|" bKXb[pDV~uP(^\}3>܋W +ǗEZ tULCxs"g5bo+'z6nTwܸqܮuƊ\̙cF]E2#."bZ7ΣEWÇ+4Wh\{7X!8΍!I}8nT$XHXO0]]9ձŦ1J(VybRhpĄ,"t"ΤdȑZ,5렪ЉIf4z0\#7O^5JJ%$S0lb&{CGA= h|jiQ j/!#*M*!]W*Y4j{E@lD-[c2}TBC#h{ BTX߻oYc/m&pwŧLm70&0JWLߍH}1J74b5eX'<_ğ30\U Wn/FK-@'&9A:\.v:9s&9Љ}Qk=d];aYؚaT_Xc\'Kh_[f8D6a]zn &t$gmBq\zp*K;,G!dHNYf.gCfVBHڱQTr>u I)  BHܶSRstNf9]G5qXȥZY92޽pC*5$ bHȝ3K`?38\pA=A:1PiӦqIrL:7ZR"ypM5Er)! l8Z@dXz5.\7kf^ Ev!hcߞzEfM"0rp+YVhZwݤ.ʄV:w 9KKL2R,ɡrRYceqHBm< F"¢!O{8gA|ThTh$CM V%_H<wij('dE g1ꪞ+G"&QޱgCtbc@СC1qDtԉcK"lrjT9O>AV;Q>F;P*Yyy%-oĒ0(Ra#[Gfl6.3~=bž'),=[DL>.ꇻwW$vc( -.XƂhji% c亩J@-n"5Q }?Dl>ե$~;RH߽u.x:I(2%\7l/4eƇPP )ՖwlXD0D.]=j(1bI̛[Lt~4 ', `֮]'RIиID _S%Nut?2;WOPdݐuU]A_/`(X΅1F>IKP޹cU'Ǡ1)((`2+cǎyfUNL2۶mvˮ5(v]M:70a\9j$[BjȆ=lUaH$7YI!VYC%,|ri}{%$Jbl՚*ZE"F/IQ Ocϡf}|!}aݿAI}yF^y>0X/@z~ ̗#4d '`*[X$aDtImA'&9B)$EO>xV-tbG+ֶX1"Y]իU>U+I(1wX6LF(F5MJ M&ޞ]PWaٹ',5p?aa5}!gD z9X~ZY6rr4 m œNT23ڷB 5Sǵ@ @}=s1\3/+|^ÇUESX|2:6lrI+ʻw- tbcrHƙ&Lߩ*tb#!dAM {0杝_Ǚ7XID&1rȢNjX.G$֯} +Z!jהG}d'"=>[5$ "yg_>}N;UNL2 qE߈-sܓ\%R? F6GRz<~HI c-5FR@}u~#HUr=E T$~]844h48 lⅅ6{EB} RY+k!w"懷WWϝCcbRtaމy`: {-&CLdAcY;wr[ bR;"~X.@| koD <5 G0%YTK7a}hݾ e;&F[ŷ0bԈ+GIPe $Ofk\E|\jo6,<=H&CD:q7S'1=kӎ{j_CZDb U،Hرc1_;:?~1_.EY֬E۾ C8lƥs-GωNLr/N 4TSG'&A7I֧L˾%hN=]*nrL]5?s2xr_Cd tjb" pOdW5Y :)޽Ic(W D u5)8k1{\p.4a\JSڬbSΉA8cg|x$BmCES$"QD'+,&UΘz8pyע9$G nZ9}44iV wtW'$erVtU-Qp*}#]G|AepJ RkBUĘ(6qJ^2 ^A-5EWCYwZ+jh-&tUm܈ZCCOvH9[HG!zLߴԔbiu #y?ΰz/!sCJ"&7!<9:$G  Qj뿢UV&R2W}jX`ě:pݘ?>kە#8v?6&eT0)!Kɸn4k5XZDVηӾM#R͵JJٜn8OD>4L1iٵ ^=IHAAPEes1$>SM,wnq2$q@c᩽D@3gl-xh e9B]:}g|{:'Q% *c w-GωNLrA*tWNgri\xȒW}#2qD-VfS-%dPJ?a`Y7J@"%%%킍bXMbR*W`= =[`nI\]̦zʜ(A C_4I$1XmW)Ӈ55>֍+a9rF /oC@/75jޟ \cӴqٽ&zf1²}ʇ }ЉI{$fLH3_~\U^ 6+'6<] V8Ne*CJ(FNG[(WlX5`AT)Ѩ1ѾXcÆA L1(N}tǏx'O׽3LaL!&Dl,[נI_'&9pر+ga!MH!B$č:1 2;o֟A]BXK싱Vdd99eY\ߧQrYR",&vZK"'FrH1H[KO4xPt/7bu΄#ZPb -] ۷di۽{7{*dM}d^zvAtU8FAb*/^kk:Ą+EoZȰwubR?h0D)Sܞ8qbړX< ڷoZGH)o߾ܹ3ƌÃNL2VZ'fVonHl!L7\ۀ&r$/ZR0   rʹP]]Z8 "D(D>_hPtDz)@R`$Ṕ=RA "c?Ev>VT|rnT2h\!R;.q P͛(RNղrJX A'&GL(Ď D.iROYW{ǵ^?~<_TXL(/O61vzk״&Nێkǭ dN6ۮyR5E#2mx˯--o:%ov$]&&T^>X.AdT}٬C ==Z*: 1n> #F ШQ#,Z?~G& &ܾ}͚5㿉PMa6oތ?P])BDLG22+>ݓXyy,7x [nE0Dr[!H nu=L3gԅP) 6\xA\mCnEfs=i.m%oѶm9۴=v9p%vP< }.NIȆׁ7^EVrϥ;]=VJͥm?Xܹɓ's*JWѣGcM=ĦiӸM>|8>T6~cq4ұr߄`*6fI/,o,;dE韱bwǔS.Ya%[O\:1LO#w/gSfOÖ_7I{Źr.cg#Q(" _|?,Z~\탧 _vqȈ/FF l q`m[YWO&틜+=V[+}"[bV\mz0yԱL )q$F3WQQٴOz}%Di4UX/ѡ`1#jw Ҿ5>5/kpʅXn95k#5|z S֘O6؅GltX,Vo3R;V_c!/:o^y#ߨ?(C\O 1 e˖&Af#&.~5 t$KW"b۬J<1wŠG\iҢ ~Ѷ{K@! Cim  /&WiŶiiqaZ8Jcm籊Xcϳ=bbLJ%H ;kKD۵m18,>oFRXJ-<Jq 0̸g.nVM"G fq 86sz7nO~Cv9|n{ M&oRq%c'?#r$OA9"}vWz$t0#H^.W>ZkXmyMk{J+_JۭcTf:/:Vmж2_$"Җ]{D7QU^5p[""W$hVH#7azh{j0Bp\_V D"ɌJ:'B'D8Fn aԳr*u=ɐ)SL1"hcc,D:h!iyKRY4ma4HO&h@ezd)UVwͦJJ2Pnw^Z.X|FeKY >F4!U~/֧qy}1OȾ!? v b-"wI= 46j+ Fv4z)Y ]LRa#w2y,1Wݵ-| ܺJ_m:l(FQ'L7+;;\}!OHF{Z&z1= m`J/jm݂k2/оLD)*ıh6bION:1iк~槉#*.j (5Qkk#tbV@cRf-x{۰e lCcbH΃ݏqIJIU!K go"K_"KBrJﯿס a'cR4V vSD'Ǐ!q(we"E'eP @z?ء-LX1 &N-&'T:1 ]`-32 `q%gqt ]--) %'.YѺ} `sF (vr<84s 6sF!,B@y`>s_o{aߵnJ<͖]`-3T5ɰ: ELMCld#tbdE׆GIҳՎ[cں ,'MTkX7&A]'Q±$ldi!IubrjKj(E>&{Jb^zwEO?aC=7g<ŤKgV^MӦ0ܥ,p,Tu\9ٓ1]'&@'&:j ZUWׇfָIvT.\D^~DP.M5$why`ٳ*14X,6~FCn@{t#WGm??r!"6gNL:1INL2I$O2ɠ=m߈[k_c5WJ`W_լ%GYnġVyCDK^(ul(ݻ6Pk(ؐ!(]2cgBHɓɌ됭$E&l/DS,pz7IqJY9EtM:1G$:1 R$W“x3T$4|n Fxq.N VE\8&hнӀM+s1 Ja}&Rxz _;Y;wޔn( <;WQկd{t7iABg#IB{zh' O5,&ep}ĤDGu k1+`ꤤyqG[XK""KFC<2Q֒0Se򡈡9h(wғcpoDGȾ䪣!uº{D׽U8Kdb2n4+Ĥ$3$2Ad7"5ӽ(+/cRRU׍օS4q.?Qĕh%w=R$m=@Tl/mx $U+f< ؏kӟ&+Q>үRoQ>m0$|N,&~RI'&@'&Aʯx3T \cɅ%xpJLJʴ!VrۼN^%.vǐrFΖQd2bT\7z|;߹-^ ÕטObh@|*4sQAnAuPƎmoAʯb,+'&M0ńuubRЉI tb:3AK ą^ɑGhY#;QZV*TӅC7D0, IDAT cx$NJ,%{@_)6 gB,dK_9>f!@s*D(~_n2C}5]}Xؖέ:1q5`ubA'&:"&/x'QIId$p BҡkQC!KHIB(hx'OVӊ%m[0(~b[ ̙ ӿ%N"V*DZ63fp]7 ʙ>}:IMӦԣ\9,G9sP:u,rp}عS'&@'&AZW'oBC\\F\ Jߴ#+  pܴ^OʾIUwQ m I!D@nG^|5fCuޖHO Jʝoi(Θܹ؄ 5kw.</&eԤ[:.{ 纩+V7AK1r հs{P/$"tbA'&O-!񆽼B XQt/,,LZRb B ]bkVfn|4܋]h*8~*QII`rD\0~Z !M~LLt^Dk~z|eu:]:K,[ #9^1&q<zNLR̠Bu۶mv?݉UXK$n6ik'|ۧXt~ Bne }?Q9jK+8k:8inȇV"|c'j'DHl!W%%%\HRܮbōcgϞl ,-R,+ uVgrkP7A-[pqW}̰jXL 1qݫ pJs:1yʠ̠X 6p;oUL" P@3s2|p\1_--~p+/]֚0ΠV7蕶 g(<WV NGJQ2ń Q^K9-)ΈcLDI+eO~qniDNʚĽ{i$hհ G>׭[\n4]z$ y$1֯cGU'&=Kuv<=:'NzNLR'D,"1 =m755"&2>v\4^dqx׋)Ik]Z8O?gtq%}c.FALFp [b U Ǟ+U#Gu7`Gy9.&{ݺmTTO*+'e3J5,&Q'<;Vb)NL2򸝫]jE_9k* y l "a[y-7կ3Y!b >sś+%ba{Z%%Έ:0z JE`Orf6[aQdb3g t ں\[{YymnuS_1FJ[Heb}'qaYbRЉI tb.,fxTگX"Q]0^` ȝ;L<(U%.> r2bQcSBCgZ58Θ%|5>DJᗈHA~c)wߴu#\@[o"(H 8!W԰I N%QQtHɜx eFN R3-Q2 %HŘL9>[7 9g0ann"02 n¨Fw+tJwka1`Wf + Ktysj/>x~u7rbBQIDt?~Ʋ0 uE'9ㆈţ,$"'Z <{o! a2# W\fVޓIO"%O$qGXFRb8aZ'ab{^Al^ueanhR&=oL&g1%:*[L O6Ĥ$wM2ns;90"ݗҀq b@.uh{8)mjӴ%Iȓ'gP۳a=f7a@D#*gvtZgN@7+$އMS5Mul CЪ*!gk5!S$nސ YĤ^$3N',YڼR뉴\B_z. ]VXLRIkYV0m4NKf3χcDYJPxFqCy z#PħOWWAu (8VXhI.\ۏspth/-ގu[#tbd Gvm iEL=`G筝gGΊE6uv[~KY)~ÂgocB I^Bk/#a2UAJ\)x>|۹*XU_ Cq[dGrVj0 о5 {2k;wm9щS/RuJ$z9=N鉈r} I9b0J/]C^ s+gI1hј !~BE0 >u CGCJmX=HjʾrĤ$3f8z(kNJX9w|NqeSIRJ0ZL6܊0f$"}#AVDe+Ixm>˗t &0,#[L2,&zߤGe-&qAenC0[L(݇eZ"9zNtbA'&A1&/vm ] H/= 8U9lHq?2E2YKnaX)$oII&$qaH'K۠r RBLjcQŘ8 oA1&}c",&B>eE1),zNLRAjo׼ͮеg%%T) CG(/f~ºmvh"zDR>zIw!4z)KyoU",%FmV8˕o)1Z~{G ZCG]@ڴyCY[L t:P֮vubR/ЉI tbGaX]@k8Gf2!5h>-ЅE+bw.ò<(5qG ? Ѣ,X.UdX7FPfp}85ϛW]$3t̨lhK/۷i"%1TaRU.kےiy:1$:1 R~0akfH}Ch9_̺$Z9J .RbIO"$ΐq0BmoiGA~z{x=-Hk)QK ?b5!f#QDBN#9!ܤ1|U+estAeT.KW7R~z$\cǎoTIv0]:cC$&eh "얣D'&Otb)IMLJ>5kNpe/#OFyѹz!}ᠥUWBD$$}`)1li*"EGA!/dui۱ E\*EP+aUüp $%n$}M"!P0~+oyҰQ7p Ef.H/\1#\R&%>rp,g''MJ+}M:OBv^Y> =HP[ QZ*oW'&@'&a1m4nWfHg)9Qt-}7m7YLT].-#$o4=Fhƌh]3dHU3΃NqbN.ݱ`N;.vbԗ^+o0S"3fܒɤXZ; шv\AJ4#"D>5Sɓ'sIDX&=h$yc]9 ˑ]0PĒϙ=qCnޏ:1yʠø}6z&YJ xf3\0q%D^8~dl7scF~WW9ѳ}2.1%g<"89Y:^ :u/cK^~Hɼ%.nguWf qqN&-AJ쓾Biy|Z+ ңuƘ[nq[dPte&L}z; L,* $`|w-&@'& hI eݼU"5C)^؍h*^ f?K2 $3b aАкd{Jāe+ܨĨ[P.#2!3)%͛!. "mtQs-l;JDŽbPNGnޫ:1yʠ̠ ~ B))pUaٹ2)iH1)M:qWa7ǃp` K9W1q +W̠ơ*TYh8bIk9ƎBO7)sID`֭[moAk׮cUqQ<PgGLbbmZ"Q :1 o۶g7w\\嘒V2)ao)|P/e.-.TvS{aqFK>[othwނ}8$B~I>e,"ヘĶ[)#ߕ; nF8U&S|%iEL!noA7Mߨ~A[LP{=D'&OtbR3%##+\8d*G鿔7hz7%%]C17C ڬ)];#ԦB-#ڷY2^/={0Q1^ LMKQb_~`^]bZFēС~Wְg8?Ck[|x'"zԉI"&"8g4i:tHedӂ f"%z~z^>j-Ѫz{JR"מ)VHI͠ {$| M'KMi)KDBZ(&طV|Nm4d#a4;w!q׮!XI}*T7}4s7|3gIӳgc Ɏp-*-&vD{R<:1Zc5LS%z֯c55Jߣ}Mzn*6UOeU{O;b}G걒zǎIܦ6 lcI:UVUX;(?ݵpvu IQpbDFDiYDPAFE&eeTPDJRRC=yS'!*(LUk7''9=~<:+c*WW>|H5/ek_iSŲxy&Myk >ݻ>b)Xޯz.l7VW rm3RP"\Ar=|s 5D?>}?SR4@5An,Q=aܸAQ]9\N\cˡ &Z o}#Ph%<[>iW3GPN G]NcǎXjUcBJUmy'-=t.텱UJYwC_Әnkxɻ`(buUo| =bW3m>؁[ZUS r-D~-ծ\ؔE^vnk vS AoXSb_MyӒ~}  gme6wmx^ڔ6Qk"`}Dսq֞Λ5WR c-{⏖ySDfyrg^Z"|Jj>(dVNjhf~4yzEk]X>;F(O5D83m6tkqBIB☗$>w.DTE.Kv'˔abЅݾxs=p81s ^`T`mU fFΞEwRpc {T9uKLLܐY99a= yIn_r;:Ϊ4U]V'9EkN 0Nۻk2՚8MOVS1Զc̜#M9&_cArh8apՏt3]Y JfzLX"{09%L[XdDI"Wq/,a!u~%R(D$p 3>;ʇ1yUΒh5{+T3t"/6=$!AAR=&Ѣ"STlhW֩bva9rJ4&X(oI5j@+ 1PM.Dg bx6DI"{f CzPrx7X&GX-HPNzd('=2F pXPӫ; * *-X3vCIaz/ $6pq=qyZ0ҫO5o3;6tRWFTvv[ⅷoDl5pb#͵NE*xזh(IDM"66poC{ix# -8s!$\&iZmg^j/ 1ao(؉^ S9.B5d^e6WWZmz6 4O̾N$ƙ~*PQAhx=Ed &I0z't,Seml; K/iNaƓJEV:vEG1J}v5U'>qY,ˮ$ECXm&Ng)˗/WmM"DmbDOjC9,*a1A xL g#4,I"$s0I"IU0oo<5nmXi.}6TFy*T`+eƆ!P.9 ֍ғQH8ߝ5d68a7C^ (t&HbDx60TCmT. $N*sLL6SIaD G"K8VAz0)aơ*/ӟ>#EGTu`&***ABƉ\&a za`k!D fyyl3Շ `IM%ISbuѲl(&60wQmM"d1RrUѦ=&udvأ(>yoB{!dP JfOU]"L2$Z0^̕[V=pjJ(V(abb]Xuboߔ qT9ObN+m_֢MiSJGPDAu"^@;9y2>8{ǂ ׋NV;Iѵ8潉ЌL;ӔW$S`P ^2nV ש6Oo֧R3vbD$1H l exmZv<ԋ}aYr"SCPׯȔ)_oֺDru\3 lnN$a.Mj^SDCf׺Pu-•?Y/hqI <& \d&IEB"BK<#ṝϩUN=8SRQ!'6mC01jOfT+QY5 =σ:`\*@~ȁݟmkeQۋZv,HkcۤGlڣ1Eٶu(.>n"RScE#pݰ9.)I\z]FW ϔq//$È0I&MLJ*;.)ğ{وۖ܆7~\Tx֬15b4X\[1 wCCT➮*/ɑ=F!'* Ϣ[Gs?jkW|ؚ 7]/'88>%8<)2(N^BWПcR1?/Zdl0"L=I*øiMN,=RTn,k%UO_jS~1Uslկ̘f3%{P7?z̛ׅh' 3uS;X3pٳU;;ojmᬜ3Y bDx}7UAC9,i0q!2qc?O1s&1w+,y_<&FIPNS-sau~kXzN3D &qsI;a|$^AR/֮#j*gSX/0z|Gro* QO#~7uua%]:xDSsHx\ 8~jK>D6acGM"mDbqpgY2ދ.wwؘV](dKXn L!$-L1%GG(9\xXRhTY3V: `QOtZ Tftu_q֘ujJvl3ϥ:6(r%Ď/Jbsc*n>[WQ:u͜Q*\KsdFf x Q5q H(--CUMW.4I5*ƌBt1IM!$Ǹ$>&bNΥwbǹ V!]`z6XjUN%T!4_w0!P*cC2'Ε`L7Џ>0n`NJ2uVxUqw5ߐ,gw} w6w5 S'jlݺ̝#m glٲE7v7oVmM"L"i&$Œ&=zQ{}8k{vCq)ثIC9U<e('È0I)I4 ? 5Ryk᪳`T0rئm;d7a2 ~b0(A۫J^T[ p̙"j:܅Ț5)Ɖun:.O끱k׮UmM"mkcmfժ-Imc5כ^C`׫~8;ją*wpD6nLHqac40IkOux(j2JpOj<1ď"asVQʅ|w(EB .|5Ƕ(޻_1 yx~Eջ=6S 8f4ӧ!ZYY_L/J\3"BsG B/ju$a(پW S(䓘0IaĕI4 iI./̫,ehybgH!rkxSpM Aco\؞ wl]wu =0扁4u=>pƟz|eؑdA _ FMjx={V6m2Dl&͛ %:KW'ƅHCݱC<&FIIgKކxVͤaἾ@֯Fm|xVcߑC0ËM;h6 S+~[96}Įߋ^Ámۀ@ /"ND*} NeKh}'\K) ~_,bF\<>}/O끩g̘bDXp-IӦMSmM"N:UclߎPGCDh48ޝ[4VmXyLlʃR`DwaaD$Nkgm_^0g$׷ўyvy[;ΜIS@yU95^x&W⾮~TJB<৲JJ>Š^<ګoG;6 xD#]ZhpݎРAv?ᄓ;4AP a5Pt,Dmpܓcj S">5طOIaD0INOV\nwjf6Z/k\3ȥrVk(Ĭytl\#ܯ/OP~3=D^F7Pst1Q54B=bm#IOm#Xש1h=*_"XIEla*@Dd&IXI$Q!O 쿴_i vC=O/ 4z3a@k8%)GvUெTiSl݊_ƌ{cymd48~`ICPM:NL2Ed83yd$¡)pfŝ8qjml.]డSbTz |"Cs('ǀ#GDd&IPe7D{@͋oƦ3PUW߃o oU9FțĽދRcqWSuv`ڴqW|k#Ъ"wՋPwFdZDV~Ȃ\8>MLHrKbH^hB=bmË&5Mqqj76z͘&L{q2Ra+G>ѣg_EVImwi?nY|!NxCm TR0;k2}ѧO42C}j\ZlCuHҢx@3A:X8| [j= 8qRe&IX=&HTջe8x|b9Fvw*|wز wUm]̲" %3Lle=89ӌ&9)LL r]vb㛟ѡcsdpmqcEX |~ t:CpD̸u+9TAQޒ9@ {"Xcs$È0I"!.hH<Z5_"ŋ@컷홨qÌ0э=C_~,N$.JZX^ P|7 1oRj1oRj1ۤMj>Rٗuskj(~/1)9+"Lr PN0XoNΫF͑ p>u@1m<Ξt 1bEQBc"q0D(RG!Ib޼y$1&w:ԩpyvIJa3ĉ&z!$ PN P SE~ya`&DEG~BO Em>l[ۖ4 %i?哙5_{ Tr6&EIV ]&!x-|?q8RRJ݋G//a>RΖ}j*6<&<&ijl|5p"aWzL e|O&CI*D e+).OU5>N/IseX$kz$kz<d7MuvSM"zTot@kdT>/8MIa #$Z9" B$ 1I5)`"I&=b@=}a TZz&ZOab00"LHSwt -#H7azLMIq #$ 1ʁ8x7U;OC93fPmM",7}t$Kb;m4n>P@a;{LyL5tPZ*$È0I"a('FLjkkqYs" ۤ9sjma#I om0.ՏDV[nree$&CI"LAk=f1sIapU;Oaݺu-I+֮]bDxYfjmaիWvf5Аl"^cb&uf"L2$DP$IDAT[lQmI/7oVmM"D7mڤbDTl߸qj7mt.cXE4=&EgQGm&$s0IB B´*d\8CQozL NwD^s;&CI"L;'O%`Mjh'N&mRݤ5YW ֊O)alƿCIz8]x٪'즳fRmM"M9sjmLO /z ~Sh^NO>cR3jz$7kƿ,š(?&E,EA%+!>5|CQŒ1jzDN<&#I:nB&顈c m#I&=Ǎe3W;Prj)Ljk3&YB|z[(7aAAz^{NDp`ҤI'r6i0K t:M"&rsWwga Q|GzDǚۉ09%L8vX >K,AΝU-&ƍS2ؓe1ډ6c>iaJ_lbaJŋmR,&-ۤXHۆAMgְztCߠ0PHYs.6H06i̘1zd9#Lv:h۶R''" B"n۶mh|' ͖[f+4[tn rnm<_7MP6rF_ENw''OVEDŽ}ŗ_~;w _wޝӜ&W{6)~mR,$.۷o/h"f`=aԭ vO|ileϞ=6V6`pncR?^MC= e˰|r_eq{06'ߣ9.bئn5k`V,Y˖Ǚ-)pe+Zqȋ*M6&LQQ<0rM>~|XyudM $ۆh^_~Q$zMhE{_f;/^lѶaB)&T+VP"Q=8r䈺h  0;޹|W{ӻn:/;v{Vk.߬㏫ ;nݺŷƠF Ǎ>fxA}9Co +ݻwoH6zN>>Dq 1oϧgyF]p;tSO=c/ж,҇~8>ll9=ϫ>Hف:uAKMN T?PT<@|3/*V㕤~ݻWi8*hf38D矫B,{ャ+ [c=ܣ>Go \4j(|%{Rl>:v^ f ^}N`̤ C֯_ߢmDUC7ojsN׮]UВ-nZDñOz4mij /Two=\ ۤo:Z6 8m`uh8l mɜ8&煉p~wꎆ1$cL0.=%LߟNڊ.W /ҹ"ެ Ǭӟ=J x qIĘpayAA˘ +Q0-=%ָlFtsw<8DE^lx1a%klE/ teM7ݤG0R҃ +@OFo鑦mx}b9s׿UŚbKq8pʕƀ2!>-&r}wI6wJꮄ„A,xHK/)nSN=0,sEmC81F2sj͕pVۈ#8Ex.zm'.mXϘ#.RS$+ذZv6[]68]RmDkwA"L! I0V cD׊J#M%fw`ک<m (ib5`ߏWKI2[q7lp]Ah0,E SR3Gn1Xa:gp J M0,a&Nr;FyNlz]aǫi4 yCup虠a0 zCY>/q™&tK믿zO]{?mys=-QB-fU%{мa"Y5 MP8UϳP#fN{'2k"HX7`w4O/Ђo֭[GzI-ׄyXY@9 CA01+1}83'1y`b\ɷ#-&XgP0aރqnSy!zB^zBа QBO3RB"a,z[`Zw`JnzTo5[4AE 0bIۧΟB(`(dGZ"L!Kbc/B/rC(cz$܆IUW4J( †(|o5p:k2=2\"c:y=&,cBa?q(u"w:fe6c&Ufd]QdcPAFDB#dbκ# ,+OXٕYXA"^ױ)`](0|eFNVA|0 0!,iϢ1%q(=D(fh5iҤx5pL1,jDذԩS^/BE d1VqBo"/\ϠWU7E?Oѡ/"분bE0D0| ŐNѯzƐnzSus; (]N ~ARS[fl]&sKNߘp8S8Mpл4Ͻ4"L!źM|c>/~]5\>Ah:L;\_wa"B! J4f;Ah .ހ+=^uOSgckkD Bj%vt=e߯~AAh `XzM:u[wj~m{\ & vamxHަxHҽ_cG<& phjC+W\mxa*W5F$] & p\7BHD  \#R#DAfAA "LAAh60A DAf爪>IENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/graph_5_ex1.png000066400000000000000000001573431153663664300240520ustar00rootroot00000000000000PNG  IHDR^~tC pHYsaa?i IDATx pUG=13]3]]=QZܮrwm61` 6 6 v@,BĎ!VMBμO>up O>OmM>3'|Ó }'|3C|':<'|ɧO>3'|Ó }'|3C|':<'|ɧO>3'|Ó }'|3C|':<'|ɧO>3'|Ó }'|3C|':<'|ɧO>3'|Ó }'|3C8]xuϛ_h-oczW+RG]yUlw|j OFxyփ0 .^+Rh#õm[P [| G>3Mȝow2sk$K2].((l 3o7_*lY׬Y?O>Dɓ?s\!$HVVVBɓ'塇^zIb$w(CsqoOF'L$55oADzou+ǩS駟V>.Hu0vYt mٲE^y=߾}tU "Gm -ŋW_sÇUt1INNUpu =[zjچ pɧ }j52)[u)7yI||^.77W'k7xCxٸq>}ZbvvڵKϙ,ݺu;v\&DyqIio~ºuGz~! $2ٴi?at[NHkda00`cvY`HkC|j ЧV#Wӧ2 wU&8|a8>JELƀw7k[!9"C[nڈOF.3ݻJla~xa2F0ٳg+dgw}AL5{Br9!vE'bP -\P~maHC!(D9aR!y1~:i ): ,?P H̐v3FCP$^4Rԋԛs{9r9<)Ce?FK>v9t)I훠[X3c!|rU 5xj9tJU}Zd̾kOM%j2!\һ΁ 2$RL_W*ű3x1 A&_DE#\ɐ&f)..|QApL'Oe (I~ )c2) KLzBxRXXשDJRԖ&I۞!uGmS+?ctĉ*I702U:; bȃ{Ѻ^|',\PRMC[}3CZ=CT]VҿmE $#G5 {tHpIA\IPe(А̐LaҶ53tnX))Wͽw ]HB i]7rJ= -g}e7 Z_0~S]27o#SQUVKx$0V?D:Y{d!e&6zԧRbu"l2נ5ŏ4qͯ r;WN75s *]cnB)ҷ]|%:Ls3A 'erwgx>+fh SfڨPҺ?#ZP&i?vRGmǕ9ڣޮ16(Xűgb*L`"`ɧh".~>SSb1Ǩ=VN``ք:>FAkkrm]F$ n`yF=&NY{nٴqԷm]+qt13ې/"36+8TcYI164E" X'$eh[ԓ2X98s%&"Ia?U˿T?G^xD~jnw"mߔ5a[!e>ИXb`<`!N<oO345)XazfܛpTPME:+X'U"3bn6DaO%!ƏH~6)[; )烫cF%4TK\:YF8:dSmWH{İꃉk0 VcauBo:8chZ{Zޖ'G]cŊh-G RlZZG-N(]}+ׯiZutbiooJU#ں< )+D!*v 9P3>%d \k~v>jANT"G*08H̘+}U烎c~#7 㮦wfbŊgVV$ O-d3("sv6Ց;C[ gi]'HÕ%EZ Drv 'q \HyY; B綠Ugyҧ+I-Ѿ %|'C].\U4, 9&Ų. `y]4 Nw|ژks/FufhubumZOwR 笆 L'>HPi#=r3HeXͲ؁D8ɫA4]m6Kⓒyk=@H2HQcB#GUiӤRxPg&JiYiڪ="!\fdjT04;e!P#sjB lMА|$Tڇ1IF1ufh"k%ctt@h iڔ`Ђe$LHh&-`hΪw.؂L[lʞA^+x0XsbIa0GfmŠ'kշ/&i7wd57-,?O8c/. 0Ik EiY" CϸI̜ϸ=0* PK?1駟`ea$O\x 01Ödϕjw :217ԉxZ0f <*C`9 \wqwp =)$bݮC!3)Je2}  dO=H7Ι(1ѺԮ0> O%Az5E-}1\.^(chpФ"yj__ku7`1,LA6b j 7 X ML/4Чa|1&e'M}, KP"  ̔R `D24ƨ : 3:!Q1k%b@BvmPNyLPXv Ԍ(Bb!A #)4_$\1 X81χ` |ň̐m(3dC`_c[K5[&"gK=ڐ `NUnӺᓇeen\),.zFTz#\n4P]pƱѲG]v|?P:on!DR mp)k0H vBZ`h1 K M!EWC,Y2!'L07U+R'V6Fxc=aR_2b(̰%ɘ O0p-F@C2I֤]]e@205)$J9a0$x V'Vʤ\0d~70bҲ{X2`M'/NL23@V!bBUɤE Ճ啅螟THtE=徙}ԭѮBTמac ZX.&LL" I f*R@ʅ AǶ}u~YY2`^,aARe0(|a`v|/E2Z0%I7՛mUh  &zU#{8 >1@`K~Cd#!Hxc/|'w38m{0Md̚լلUGK |m̜*nНXwY6$;ĠDkLoaR®] Ζy穝%kGTWE޳ldbv2C}5o~d0veC>3BTabAQ N1P[Z*&cך5e0@ԭM;FGѷ1 Y|D5hrɩ!Gfs1͆=˯]ur);8wZ)\y,_ߖ<+0B$T(3l}rWH%X RGώ!{gya,i覽s=+ֵP M[W^nD]?S G5)ʮ_ei\'{1HN\9_T޵sE2 ]c$oQ?br⤜<-/$ KEUgmy/DH O=%O}JYsH:d M{DŽK ϕ.qT- [k疖>uוoC_`cñ>R | VjBcʏ,{bۣ^5{.=![&"[ʩLOs{7㶎ח.'Ϟ/ |#IWc%+@&A@U ]5{Sf1!9b hA `slC0X 1̎z #; 0 ĘmaeeNAì |0x/uAk]~P{56!S_@0x? 壜Vo~ԋY}7hVڅh/0VϦ5U'8V}ڃ6gei>U'ߔ˭̷8rۼDv&^%o,xCޘ􆼹MycfwƛWeL9s2芑Cn=UK ?ٻGߧǦ/`9r>[~䉔'7yJIUdgeKreVFP)3Ug$}]?'5-鷴L[9M#a `VFi`7pͭ-89%Osi}wLжCPWܐqKme0nQFZAZb*C1eL7yVo}'ȸe>SFc>}w2Rɋn\cn>ӎ!KK'|sq,ypns i6e }ɰ50X^aaffͪc>"RXpYg0 3M%bip`F0 M{{6Xɋ0P̥mܘHIgegeZPkorQ>>Q.ܧ Xm")QFړ)EI&5ksՇk־9`2ks&[A۶N02|p~|?\Fde-#_^ړe\0 Ӆ?ݖAsǷHΙ*ˏKl0w2Buɲb &Dfed]f[~W /;Y;g#ep`ɻ? -lhӔT1F9LڜИ͙ͬ4uiw0)Z";=A?(:Oqߘ7ר+Csǭ-xke h>[X2l9tr-6n~ߖ9y|͹RmZs1`Fj6nڜkgؠ,18hsιΕ\|{bY̰$C:&A0ߐk hgh !&,NJ]wWqB߹qBN]8^O]<κW~5Wj,ctct?}\.|9ſ`~_d|!VDJCݞ[L:QVT]$KerTPry0AI?4T!V4YšĂW^EhA4Xm`e4NC7]{nڇKk MoLZw4\޹R攱!ifjqCc4ݧu)*ay*=r MKl݃޷TLN5X1Ovdxȝ QV.@Gq:`{VOf.3hd`"mh*!רH9 }:ʸi, .>zeՕd9rQe-rDX ,7ISʓp[A IDATX\], va5>u7{ؚC6?}h-A>3RaS(k7anMM^R[(2FuI}dGuXl=ePH1VU!fy+<Ņ Fmmr|Iu;}Lpro½I>-3( bEff᜙ےԖ3( ]247*sjԯԗo;kDnpTꠔu[k N{[IQr>hMA-?!mVCEG[1Ėp)6gWG#qe}$5QN gNzn)wH1)՟Duf=jM )S=G 0TaS\'U%b4hVC<:eHF\sТٸ~aYRPK+M I T``xnq!ϰ=cI:dgR}pQWm }~ì x)_-WU\wl9E<)O]>ns'0 .j(S姤2z~_a$^X2‡g?+( ofFcPCⲨ/v=:ҺU+=쥅y!MΚ>칳K(6ʊY=r`r~(mBj^JsƄsAc9*~:rjw@J!zG4;{jOx$0k~8i fXW 7߲29yGw!˗U4OarVU#%x/?~)t@:q6G@m K/C+b='@6u05Kdu VU$E犂iϛfOTP&ɳl:KznwMKvҪҠc _ʷ.-;V3Բ>xo41_Pcoc.6/2aKW Lq$!4H.87h,3?4+Fy1XYZ`c %{ck<R25&:y m7={@<9IyhC UPX.mH>ȳ˞?{YJ%=eH3W^:)rq3\7:IY"YY'8w\9~ 6XΞ*=CX yG䝥u_'O'=-@;?&{LL}R=Q`~uAan^.|v junEd ӹ NhkF$~1%:a2m^I`Ǯhf ORȗksUa ܤu7pև"y~5eA5&2K]*W=},?\֮Y+%'KtE~r[d^<8TnY6Asԗt0rw宁wIqAN5G\p҇2gllڠeہmʠ&ԭSe'seⲉ2#g5Z~xqYb_p@zt2#mL\1Qv햤I"ɜusd mݤpvl9X|Pr(C5:k,X˒e뾭 )#pZv\ s {z0 g+ 1%=%z.M]$;Re7/N&WM +es͑}4?h & >j܉2-{L0ELst_<^'Y3-[LhL0.LMΫo䆵s|gk]-{.x&f"Ok2ls˘Mlp&fua mÍ[1wdq 6ɸ5kmK?q q2> |^a2 ϓ2?B67N(󋕑y'E9aqkmneV*=iscv, 6_`_ |fxt޽{Kup?sU F;',%٪V^JcwxEY䧃~*g/տCUU#6PpۗS~~0VJ|v|tUNT'p>lv-2_vOf,CyTr9u!UEys"էQuRFKK)>Q! iUMz~^BЇjϟ3ŪZ-,UTe [Fy i@Uէcio/)}k1X%װ$X&_MLrc 5&q7{!V~ 0@W[9BɀFÁ1E^'hNv\^]gH 鳧٣.cJdπx9<ܿRN*;1FET S1'r22qoʁ%ޅ Ӆy$51\J!oWIqYqgRYX9ƄE иik9x@eNW }Y}kG)V<0oussb̀c/J\)HRHW7"fhnz!ghV˷UH Nv~Lh+3T8 zHՒ V L32,c^ǷŔ_>J|sz~~o"B *4$hD_AfreoqPEo .-q$ ) ] \*t5l8AzTO]8>5|׊"W#֫:nk{j3亚WWZYE[cWRQ^F\R3"Qy{6~{l7v#ꙡTFgeb5B0*|`o-yK Ð]ryy'eўE fR^XҧLOl@@OV|i?$-!F+Y=1(2+mka 5s!!0FbGz{4=_"Ah $c乓D!, a&0Wԩ0~_RNV`VVS EryO=B )wS&s-G2Ur2VySM>\ Z5Lq(י{9fOM#hLL_yD؍hf1j'Gf={d^,ͲK15 OoR_y Z'/x5Bwȟ8 >ƣƸT@ٚC^u`U-Lm+}zP Ct5(g/Y2be5)jG]+[) 4V2)WuwxlcG9HzB[tU $? ipw'Y9ƍ!±v`n4̰U¿bM2 t z\fbjWˊzU!n9E[wn읳wx2}2&hLaH*INHU^&U+U04t\sɚrό{<iCU&EĪ7mo$lOĝz`ul{۶e- o@ec,͵Ќ̰ ɓ1{csfGR ]H&|Z~y:clC@.?cv߂@Y7D]npE\1@KscoHpl~0sm޽kkZ̐(mCFY,,0);`MM$h#Oā-1fٕ,z^ZG3X"2|Ӹ8׵g-Z27V0g U3MdY'pu] *{lkYޚ&0&TƑ[#[o>Q7~e^T -ِISN֤yYhZ|fBd*z!bĈ ]=C+K>@4C8$٪j!7UQx,iF+:q:iS.<9pHݓ SwYPD iPɡkL}@Գ=014GfsQnw_f()ٰR:8jSuFZ3Sm ] |3$aUj1BM]rn!>Ւa <{my_S's[s}`&e#{>0'{e؆M]kOcrn!Az{-a S9z>nN >?C;`,j>_󹼓NbLzulj'B A_@b WHyY[6S66@*8a ufT7|SJ?:{a#=$l`\pl^85'_} 'J 0 )$:WVgzs}Tw 5eEJކQOSJ!1@-BEK8:蜳O3D Fpl W2 γByB;!|PC@>JݑC-TQ3u5+HuUdjx[cOw5v66|YsñPfcNfhoQI5Ҫ:v'>3^Y#Ut/4ڜ-4[ h DE.þ;)NNKA`-G+ tPV۟$X/޷MMmWCZ"8_!:__z?H:Q l]q)5yV14sV+J'uCuW;Kx؇XJĎ@~f>Pl0 )\VO 3fs=ҽ{w "a1T0Z*#Ļ 6!,/0fmf$=fnI齥u`WsTO><ŝ}Lwnu26q)=";Pԥ+7ںNv3_:I_J[jl5"}omZ=Gs|%$s Ǟʵ+eT(w?4&9,^Xe%ܴ^Wa #! VLe޼ZQ%hYZ$N+7[.'ι~zTȣ@l(g 4/$]Gvym$K6ޗ9F;V0}\vHF`X} 2>[ . }~ j70c̔Z{y?<\O_KUg%]?cDy`uPW5 %]õ9WoY_,EWf2'Rhmr9Zo9~x`gRgG}#A͊m"_/:Q$Fqm;eW.o;n Ơ׸okS2$ȶA^+&}RbBad4}*H3H*9[̇5E{aCJEϚ5ˇpj &6k&?bF2ɐa!3S`ÇΞa ~I6l0:k^ v>d2--N{27gJ®d>_'KIݟ*s3JDL\(s~#o)N9ǮۺN'g]̃ /@@ЬFk@iQ11iqi-pN0 ̕/̜LYsd$,J])u0X50\@iq|l?]}&qjN!e0Q}mcq_6_!IYLG}Wn7 6y/><لo^ B'NS6Wp#e5ڜ L7׹O ɇ8'x/i)!dzև30Edច9If.q2gI=*3̔[KJNH!;vȶ}ۼ>D{mN{;2dcF3M:}ùd0vC;w^Ր{$6ӱbup;UK IDAT rՓWgDZt-1.}7+^=9{|QbJΔ/8|X\Tv0p UYSt?rHPVvS[pTvTд]ZQag U@% WFTv0ÐI׭*HS}ڷFS+4?ҚZ1>Os:>ʭQ26^6Ԥ/-mhWͫj&&o6>5jZetN{L!2⺲*hУcAZ\|7ֱ- hoTH75m̙2gIKKS>D(lmJfOտ0p0G?WsA1 hPS 0x 8h"SkV@m!ھI]'v={Uu*~Hbb)9W.7Z:ưdNz7z4~^7"nxƔ6+^d5a\؃D8i$yhCJ/mH<]T #ŷ0fmhs. M֮-E>3l!NY.78M#PL?_l>YQ>ZVTk7Uj;PWAjޞ$L0cj5&1 qSP{͞aB +U (+?*k˚k @@qG2*d֢О=ejuaA)!Tiqm ϽK3$ Ϫ)Υ±Ea|`##Ŭx9Pwݪ]ip,דQ$< anr;txlc @a n'‘m9phbʋ'hؖ[pc5aŊ|P3uB6}jya kmF,H}FpV͕ s$*}hsFXzH h墠t 2 /$8?Jpogؖ~Y 檼`3w픑ߏE5}(2.Pc8͒0kPK)/-/\aRw bQ[h(̰sqL5jJIZ:T3l!rqo~#7x:CuE2L4 dc$PT0l+_ Xm[Z7qF䒣ۗvc/R/ZON )ߘ[ 8Lɞ"O%=20TOS7 }|,! c1QjUJ*%喉读p焖 ˋEEaQT0Ck0 WDcPt; {y`$?JAJ&±?)IH%ñV}~8b6fXckt}ʚ^6g \'*U_b.R.z} ˔.Iٟܞ]z\w:.P/㺪:*Uxb-iaܠdžA jR?[tRT0CS~7ruIni('~ H~X͛E{w v1ӭneA@`Cgi my v $LvyXt5 lIkftLo=򳴼ǂ(MMieA2oC>V1>^sc_CH}8 H~6١mȿ 1>n wgCyE=m^ԛiҺmneڼX<*9'Y*IKQC2<({Sun+ۦT))>_Xn~\3  yRK,%+EWaVf`d1Bq-ZMsѫZ O!%{1w\& eŦ>G}Zmo9sL;M XN3M + %c[0Qܺ"0gs89xd iꜩ*0?A `mٳE'/0Fq#h0H \S.ʇQnB)I}z" ';½٩I2"A\I0͹ez'`84C@-CAE߻M9Ɗv{uϔs'N3CH?QZ}J w \; h8_{ x:>tJ+#OJbbL6͇pj*Y :T&O`dzMا=zxj:&̑NCB !A8;qˮ]*2itУ~KkL00 ;Ιpe_5:,1`܇Q2)r NLd}ҁ-$)c5o&H) Q@(̝RO=7Pz29Riz^3h0C&}NN 'p dGZ&f}2`L,(!-L`V 9ZaL恼0J&˻9m)Gv>uQ8HIK0tm-kjmimuy8:Xigi@9(և>m3BXnևhO5Rdͩ}ڜ$-VSVM*CX6#fkeu:NM+ۊ}?cև6_v?_o[.K2ȆdɆ%-]]/ V.#r7y:o@,!3FC:S0 & #+G~Lyd 3 1KO8ὗ9iLp nḃ̋2sg; F큢:__Z{1}뭷4M$kR{j:x`MjN8tHMMmQRLdQ@Pe /R5&Sḯ*@ަCd(T]ߦ#) 3 TUz1~S+#7u֧R}Po'| ׎1Z(C]i67WӘ6 Xڜr)m^7椵 Ձuuc pc1A+x 1+*X6^jY:_M 2fo>o=j%+px..m HθWe{0l>fS +6}VUBb`eqxYڲ6%/s!A"BƤn\67Ðz/RCEju֧ 9u ZBGH枟ozԑۯs΂JDNqTtۮkjkp`k&1+4ߺZiէ̀)7i"YFK/)Z=N|I4.e]}\QO`0J*,3DhraUAIDHJoAPDмk=ahO&=`:?|2uŊ4o(QkF;-@֩t< hYօghB Qr-(Wq&OO &-UhZu-;"S_l7Uu究5`bB bp(;$ 3l#h"Ya!R!HX@-",OA YѨ\ K@,<մ=_a4rHgLcbñ5R! ۲,v &T*SZ |/҂",tM1,4Hp{8t%{gO{CC멓UA!iuUC;bVu)-G뾿NzN)"//|Y '^U5‘]m Z, [L2W^Q>}*Xp-*%; v*(Grkcu?Ԥ}mVT[Ԋ~S=kҶ>fh)N|}\3l!( Ļåv~1N2EfAP5Ų}3 +b@bBõuyZVEAs_R6DM?SQFy~s%ڼ~wl}D o)壜 p3r=i/ wx/+i>0;gr5ڜ L<0d!|J9́mRճn=7Eks0 ث6_xӎ@]m${}H"C[jIKdT7pmNḿˑ906'yO6p }(Pn$-~ԓԛkڃv}i7ڏ'jmN{| Sfɺ6;=;A?>DYmN>DڸC-S JNI~ԓԛ[}c2V|B~$}&^&:O!9i͏nspl\eH3~\LVFztm~RDŽ9eijm.̀:k*b&Qhm!mp.~H; .-|\G^rX}Bۜ~^ ԛ[}hH~IFl7х^M}~&}ڋ鳔A? ڇ:{}(mpkm6mqqOu]A9h3hrrp9,GmY'6^sge74ĬJafyo<>15-(bc ] c܈?Ah@ DRx/s(DLhnXyְɓrYD6L _̈́2{Xq"޽:C I/^DFq1OMaU;8oUpLchnZŢQU_y3UPIyXt՗,-  IDATXtBum߭xa.yz!qGLԔQ4/os涹[ͽ4몏Rm![Z&|oV\1Lڼv_ևʏmsӜ6oN3T,'ΜP&z4&9t2(C5BIIX?^h{+Ck04O-+? nG#[sawfl [ϮrG0fmxM*y6oT}ڰS7$:e Hˡo'MkXVS^?))+iVN!4ӟ_[4ȍuˮԩ|,^8ñ27džt1*nT6b숨 ֐2Q}E,Y %?$kVѽCV&lҐ_~kioG3N;݉ɳ(ޫ+6kp;bnvuZ\,cT4p]HwMKu$;}fxu~'/X *EBdF=cYMQC5XIZiiUԟUUůSz*92}f6c~%KSiyOg[ϭODl6h`ﳠ7m[e[x>cHk}"|h}.!yzy]}(a6o*axC?}蘈17?Äed>b.xu\͙$HȻէl9uHT熹HRza.j9Zq >&{Cj.9־YƆǯ3Z2K C~{xR>i8zPEaV A>5H{V eiwksg L9ߑi}lmNy)2?'և?5;/և_I3<\Hy0qx6g1l:nW.h8Ssϑ?U6g܃x 7Tz-idƼjX3|6Mz$>S2tU~j<3Yrw, )11QXիE$8h֬Y<O96lؠ5ϒ%??_1eǎԽ1M}Y!̃s2 7: F$- դl :Ańbi`@`q.A^0c1 G̤Ƞ" ` `&LVL`p)aa@99ܔ0\n;M3 Bpi?H{3F&AE9{.9QO״,,,u1?ꠈ$x1 <&ZW SWՇ6\H&aCM"y懝67$4&e)C>͵a0(7wC67,Nmv3|Mp!y6Q/nwPXk:2nCڜi~KSFwj[QqGÌθ~ܪL7udl2x}h[>ˎ~ayp.aHn&%rk$+7K:p |?4CLc 0 Gk#~a#gqq2:a4!^A2}6?%!!AxxћQs-?K,j"65iM B'YZVPҢ kTF"֨(E TF-G`0I0ɟe'PNOCxxnQa֧)mnYd %ڦ&QZCe<{'.N_G=u/{o-UZVwUkuѫ{UY]UٕeevUj8< Ղ 2) Ƞ<<@@DϾw5⽈Gċ˺D'n}}>{hUùr[3a W׋kvOp3nYm/$Cփd\[HRѬ7;\þS)yg2 +?ƍݽ|IK4oA(eB/-Ņ*=y7sD\MΘtfxu=m9'gBm^1DAشTs\ؙ8f01RúFx'z}+&D)5 ىp]v={EL޽{ I9XqI;[<@,}eWnUW`[ԃlكwl\L,buZ|ov8zNOw{ŴyXvCOm,gE19H K}cHke mBik\1BsK8yhruYǐ;rM8ŝ3[:;#.dγ۷o7I bݲm,⍋/֛jaцEn[ܺ]K[UWenro5;׸e x]c%===Vo_oYneyך*gmj۰{[i}n ԑ]1zom+-ƫ"f NPThMA nWYڅ=GI~wKWn[iН)- i3os# 6&6_٪6߼$'59Ь:zxk [`y7c s'56669tf69ƹѓ6_eYKC挡yX5'r6g|mk7ihwdު[m^{Y,~Gj"筵9|݆/ICNrSNĿ?l&bϞ= d|]{|Fe<L2Vp K. Y+:Q\p^qȑ׆|r4Z7vCu+7t_ 4}u+xb7G?rw Y{{Vv{cݷߺC-_lqvnro }l&01̭ܰ>{h[zI8Ymfֻ_mwp[:f7n܄qnּYo y5jx65f9π_p붬sCbc11a+Kے*wгn|>In~[Cͫ_neXƹsg|㎍nۗ۲m>w\klGs:n߻~y6;Sԏzj ,tAtkN ^GYړvǻߵotɧ ~?W衟o|s`|0N/<81+Ɨ98s%6g2nk9qom A3_7js-mi3e-m\djޮZ0)y-m:6g`Ѽe}9tЎ#._{îFnȑ.X@Cc6lSBl\{|F<<:kgϞY`k9݆ ܘ1c tiR:}em;ݦ_*t ?})@RS64܆AMZϟu.;me@{Y) +shnju+ Xxe٭6Q6QG$ܴiꎲױtygd>|;rHEڼB7dSE:=퍡Z|e0o-RTvn2ѯXh1Seskۖ-[MNSJKU/t5W=Y.z[˅ZQa{w)P̰:Ph_$b^~>pA34ԧKԟk׮5^aޘ… ݚ5kZKpr^4 Dj5Z>8qbMӊnݺV҄  V)9s˗&H(F:2Z^i}BϏ?ح\ս4!0*E0C-(Eȹ3; 34\h{iBeZ!:9KKP0 9qfXfP ̰JQ/P4 IJQ0H']oꫯ*\A}J}ZўKt .*]r)A-`y9VXguY10CҎe˖͛7We+]Nr 9(;ٰ 06+od0k,wUWew$0BDvck.ф;ϴI^SO%KT>'x6OC!tmܸ^Y Hebcest$0XW^o߾[ᵖ/+Lu_y{\*S4'ѣMyZ>}-IjZ]Й?kVhoDߣlћ+IcuϬZmfPr)f[mt>3g{k5f߈ʛŅڔR%\|Iƍgi!K4߿,eQv-&L-ZdSiA̙3@+:?F“ѧl5~kN^M1cw֭eu.yb `I")% U=YWz+)S1`R bՂd$.3{;W괖!ug5 {m3pW۠lX*h6>;F]JUkϽK߶^oF_|H'x=:n s=vj O.[ :l hWjCIj@1-Fmk]}k]z&MM# $@&,3Q{nMq€+#GWY}V:'F3~&sFZKcWRuf^xa6\`C'@qWf[L"D'Znu?餓ܡC5\TqYj5 O;uQ࢖v_m+R+a]wXdXH}Rkd+R[ntMnժUF+ҥKkVIk&^E#b0F.$(}z"=s&/Ґ!Cl}?Z }]_|Lyφ H91m櫑I$U曳GV46KW\ajcb@nTc' ?Y OmGjkQ`y77v6 ͜h$ ՙ3N;cvG$8/34nߙ >Q0O_x۟4v!*|u%@2DڗdH_[k!-_1b"ݻWN3DwY IDATu 鵼$?я~d;]s` +r?!kVK f[o68(X4 c qҤI7 ~p0K 9O#w-i4ט;h@//MG-Zq_mH3 Tl!ڰB:UC,LQjPJzl$Z7&6:u>:D\ 0πj]0ۂ&֓3f0 g܀s3e7iXPxf?EDej1uP%b~e=,$i댾.|u3b}ɫ|r=m}^+(*1W;1Cᬕ P thBgmo{?nW% IzՈ\cfZrA͵YJ[s5C\W#R qF'|Rd\[4 Q?rkOHn08 pB 0Àv"uƱ)KOu 皜^LPg_[pW12Źf1"⹀z_ޘpK2 >0|4 tхI8P(<絳E@d #(X//f0n/׳\Bj1ҏchM1CMv2cC*0%43C A@DgKD0cVt_'Nj GQzHVE2"Bf iB52Cw`ߨmt_إ y> 0rW+&ɱfϞmF,0(dœHwޜ#KZN(mDƌa^hT tjrN HyxZ>%dդ>3|#v%&ҳgO׽{w %enpD[nus̱̀rSM5bc]OhgL⮺*KM{Ìeh\-QrԢM30]$*F0C,ɑݿ&g٦N ׊kҍI7҉}ʖnըȊUb5'E+ڳ'&q}c"2Z0% VKS>袋̏8w\c QkWuȻ`Hm07S뮳g̠碊gp盤g0M6V`60@… - ̏{0%TZ 猁V)jgi4A̐oݺu>tхڛsZF ^z1?8BR`JFD }8o&$>P 1"H2<ӟhqVbљRy& Rqw9.H!5bT>KcĤ\e^Qn{~k^>Q=կI}}e7)IGr6 }^a@@5@s6U^_X0~a38깿ۿ7`SqP[blo4@cXޛ-t3,mf8gM`tԏ+ :ܯ~+ H8## R0QRN0Q!{\o9<ꯆG~{Qw<0 2$H)#aSy6 İl_o Z+'f g%QP[|P?,%7Ceu)DYcpyܱH.į˖3" 3Pm^\hqK#@tAgШ Pv,a~a  E Ls<yB@Dr9XiV(Q!Hxas!&w)+0aEy~$ e^ߨujaXe護ޚ Iզl867'QwXu6~4F e\{M`e/$|@ݾˁ̜ke->h ]D-6\Yj+!%A'F3r\3mbrU^TqP`L~[ub~q p ju[Ʈns̩P}BCPhP qF3*15A2 r z -0YzVpH']/j861$g: Kj^> _LU3EYb5(xEqfLia-ṵӠ]0wyYaPp^_+!H3{_m}.T=gt&i6/w;ӯGW\1>Ic18s=+~$$W6mV_|?sgE0r&655Ghol s۶HbmvSOm2<:~y5igXfh@eE0Z|'c)Q C{UJ+4POqFT`\'bi*AeqVt;DȱƎu3q1j9r{ٲe61~P/YϩgBd\9r|dN}Up:vi О>=0Iڜy&osVC 4ul{m!yUcH9Clsjs mNuN:B@{.Hړv9cHl5,}폡d<׼y-͓os QޟCEkVݹt|'?9N=}X-^1<-sՎ?~'m6/f2.5W @ 4`c$ ba*L̐m{1FbΞx `*>CA# /@de`,pŀla0@@Jʳ $kV,2f"(?dR1TGbWE'QN 0t҂26Jv}Ņ:?L:~dl zX^z\js渝m3Y6mPudQ=BY0Yud,09  󪅆2g4Ġ]~z緹aЧ1 Kn=i|mN8"6?W@?ͩƉR=koު͓q<9omzg~+_ƐfH:h9qѶ!!3LDW-3,SYփM{ %, b SJ2:Fov ifX21 ,{o1QXX0C-(,E3dO|ĭLZ#ķ߶voK2䜱[76ՙ̰D!i{7f™F&G]~ƴN֠!嗷3D26lD`%"{$UbP/P4aW/|M{F:4hP]c#O ?IyQd暖IR){=Z!0AƙmlBU8/%\K;3 Htlگ\Hm!e|й=gfX<q;t~{6Ah[LB$:KKU4 DK+ԧqn OؿCs9-g1C&̐]af49"; B2<W^ܿfM7{1.,ꕎR8KchgՆ W\'~αj#{I:KAO[eud@VqY2==ztC,VRdᅬ}ͮw& eK/Cx]4[s5d[5|5(QTZ߽{ww=_|F'B *Tطo߾XZ(AzZ+87$cE7v Ν{s'Ui5H*jԗ|}Q = \s嗻 &d3}t,g#2`."T59~WepVڴiSVEc[o޼]gAѶ0yeeXvm4!H}(J?iP0`~G!ڠvСCVOу:tAȮEiDdA}eLP&\h|z,X`;l$ۜPjO9E*Ց:͡ZYH[e19G r$ۜyVͩڜzF@os~[utTA{6;UWGgEcaݠ΢Z46=I96_SW-Z\<9o}ʲVQmlY\Nj.m;w[tӧpn{b/ٛLM3]wi jsKZ/ͩm}O4yhzmɰ*sqǙd{WsXF LtT>{n q,hP5gmMSZ2Pa$1KeQL~?2%I8qc0 M0~ʢAOSBhTG&(ƠLD,t,L{$^LV9!̐ХzY _0!h/-.C6 Jh^m"E{?")zlv& "9ϢY˖-2VNud3#>+4,ڈ|m:04xY#cW:x<_ ڜz6UOce2}څ8h?@{mN{&\]gя' g97uƉ04_~34Zis-7׼ekyKim<#Q$-QcH ]ʒߠ1gquwkp=z|dqDmڱ:tbh8 `Y12ˬI{lx޾bKR IDATm~ʐjaj|mo eĈQ݆W^y> ̰c`0, XJ7M\y啦FeL>̴oᆬ>CFx/wyl׼·6y=o3b4`AMz ;_$C?/VufnH]2%tOjt`ώݧO{),KAO[e[R!Y'_YGbl9P9˶z!"MMhnr7jtƬ̶mG4Q͖-f >VVH*xBܰ=`ivP[F{i"yL :8ffZ6Tɼ6e2V )={Vpݥ )G0C1/1mjRvaڙ֋}1C01XA1CLk_J酇"}`{AU[ni af(5 :/'p;M uF:xpHUH#@t&I!k.śB e ar(D23Ė 4U E`%$:,Pb)+E<灴3Àڂ21,׆ΐːBψbm07zvg ہj4L1P(f%2?wQN4 DRDG ԧNqn O8&cX0pӥKD,Pd3hs\30cs^!̵^k?>^!rM#‰|H']|4P2?kX?+xDS/G1,$H!FǸOb r*Ag`%a!YfP[`b9~s}:׵kYygdX3V1D`%b[ݩjPj~BQ/P4)C[H)iO 0I>%N='mwݣ;Vq1#c I$pnA2,U }wyb2N}* 516Rح4pr&US w=pAmn!g]خ{6$*/@1GmڣGqjRS*!A2,U 3^s5wO=Th^a@@@u-L$&R R"<yĹ_cM>0g>HE*\'u}IX`@pl F:%E0F+tE eH#ԧV@Ls)qQobBx o97b$CZ3$? a f(Kgy=KT:X 3Tp'MCZ8H']~,4§3M}6 ͘^;x08֟vZ1-1<bR쁊a& 0+3,pOG+TLL sCJtErХNKiv9~`Z/uWLΝ_Cw7;'Pvs'O%b*0,HE*b \9U'!ub0d#Czas?F:poi]: up=c:thMY1{ #jle_]{-(3\t3Q9D`!qI uaMI$"QP'|]pN.[$JLVT1C]ZfP{{ 㖓N" y|\>jBψ0CE aq f3QH>}_~!IgϞLʍ3L332|9CV4 D :FOE\`o.) b_n60緺Z)nM ٟ,Ěg3 a\mXk"a|-K{ov!?/cy{Wl{l$ %Zȳtab#jrD*=jD}k lI~ݻ ^LF{f׽;gn&wnEk1 ׎ͦ"3ZQ>i9ѹV%$ 4)rJrOr_gUF.lPo oddBǀRh`<3[J g;}I/]ܼy-)X$K}uO"=2F8eS]:Z F$BLngԳH8d_@A:%w!2-b p_tEY)}b޽3L Oh\~OX|E$$V2Դ`MP_wqnG>y2-tq I0D /X86Ee `@ zR_@C زe=Cj2̉=KisՑ69r'\~9-i'vׯ@2 C,GmQNDjt,x&t6g,I]-jaÆgs1Dtm8ۜPrͪum2.k9W~ߧP?9\=Ч6nBhn=iW9M4:ha!ت#IYן~Vc8Ƒq&z-ҟ[ƯۜθgiѼݽ켥͵f1(?|p?j-8Xmȷsw{4G|ϣ6LwQvF{K̊t ;С~o{́}nݺG7fQ}3W~-7pذ?o7bhsC9y\jJڜqA pqdX$$^3v]uUO4&|bH^z l&goX?Ϗtk%r/g* CeY̫Fz:,XXKcirbn޼9©i,̹:tVQor]G5%4GYnFFcDG#d7fsmvo֬}"mhh>U{nz4sdϋ?o+~# bΝ9&=aahyVNbJ?xc|Hj3юkҀCs\^X2ʂV)i A_*'pѺ'ۿ-G27(e{|2J`@S$JIc"p%=̍݅o,ف{& 0@M*RHnM*ܿ&cH']! J}֜q#B_U3CSa94CtC f8dd7i 3l,RKg^z K5&g X"Ұo[~0-saf  X g͊%@&cb\&e+9q 3,||%3 .\mXM%N |TskIVuP ǿ[ϨLƤ@Nu82: eز1>/~֌.e0DkD%nD`%' za?ΆK#ıTi.ξV>*F. >:r1CI~_չ?3:xqĐ&By\"P ׉uZ\I&Fg=}rSCMd= D0CM &̴!Pw@@V7*!^"KbI^^(I!2R Iyyq uɈl\2nm K5WtꩧG}MK;3D*VÔiFI>gi.λ3B\OvQB>#[Y}`hCg{Iq(#hZ׉;3?~_su4I0>\0deҞu*'z_03` Vj5)χ>,6 ̰8T3$ DH6Ԥg4B/\\Y8wCJC] r[v1 |=lPw3`b`y|0ֵk#< Qn1&IЗc2tȳ8+؀fԨ"&l4|LfX"( Q˓ۨI$<I(֨/MMFKDqy*K6?c_:wM15—”P-o7g8hljuKF}4DvɄ´@՜aJ=O[{yg0lUg,PKZA<{̰8T 3Ԥ',{oVkT2Xtܤޘa(=ihb.tF_%3bjxcl(s׎Ն\k LSL6o4<ҥӎ]d&9Z^]3^{:sj&~^y,!-̰g-ͨ3m2M\pl QYa@ _HBP 3 (>P1XNTn)tS: J-RxLLa|-r7n\lKx^BCz#$:',lXPF$R2B1C?]M`šj xk֤z$|WqI{lR,-.g4CgRR|1]Oo3l鹏%'LSjˎ2r^Q@[m1KZ! sg$fX"(`b#XwG -kRIK ٘L։.ruÅ{T2 _a~-A{;\1!< LXTazHL3όU{>S)!e¬  cq&DjD?" ,ϥR_V%5f±ɏs_@̰OZH#~f$$=#/*4ԛtnu -C ԌyaZoYK/v38q˴b0TATs{VA&D8UH:BM 0Ө_֚^4 'QvdԤšj?s=q oM_l_Q 7lؐ&C̐XKpMg.\v@ ߺ?Sb[1?se_EKIP~D4x1%L%_BXa`jX"O8l6Io„YvC5k[hmqfÝ<9V!dbr#0AƮDYveoK2I,Oq/8L |כwv0ϧ@2mL2Ѩd:xh6㍁;g>/2nNHwJpMfb4 >y{%'} `0F23z9%LnڅH NGL?9R;m.z6?C 6gs$z2&  "@gk=l LjU&`++e3˦ -|\9sgG Eom"}RG.]̍3>㍱e|#j oH';g}_Q7i0s}f46?{| 7I%oʍ\LtIz { #h=㥗͛EcjwT!vysM: 6X#bc l=?p…ۍyR v֬oQoN{߳`bŗZrн@c|,c7x" QjW=Ecdw~_cL zl9͙њ248;^>t1);wnC{"w|44|o3f| Qϴ ˇn~ksMA޳onĄ[4AE;e31'Y5ohťyZ|csT*PΠFU1C4bEX63dQ04K:U/MP $Jәޒ+_r9ǪFf5m >קO>yA8_a}$؊2TRZdVd=sWK~#FL5UplޘB K9$󿫮=Nŵ&%M7djz1@@r ~YXV &yh> +yfh!Fwqr3bCrDKk!6i$_%Պɳ?EaYf_#TmH6|krR4H(Qu3,D-%bT\Ђ ׋ӽGy(JZD)!Ίֹ_RCcIƩp XüwXQijh^`v۶f{j7k1N&ƙ(1ge`#V&] +bbZݼpY89`).l83,U Yh4MNs]SdzNd'EjR^˫TI(F,J 48vuU`z#']&cP޽D q_6 _`,vbp,1DѢX0ysUj˧&FQƘA2,U "ŰSNq~z۽T2ר;ՋdCgyr[_e Jsƌ̊ŎJ{HHz!& fǹ(\-YQpe?4X1]ꟍ5|%W2o 5jHTZ`4`jC%5Pc5g9) )\0GRqӦ!C^CPsKslp,kb2X@`%Ur\ynVe E1CV;gbS%Ռ2^mq 3oJCLїR Gz_V.$C L`@S Eagt>Ik\L$-@l`2䵃Bz~m,0&""3,YObҟX xפIqt$=.vZx/qǽiLw׮F } s"0be=,W腔ĢFի3m IlJק|f9ωKŒc>֤ `~tT vHf% 8Ibs6dS.Ԍ3As6[/Gxؘ ~ÿe[ s(TRtfCV-D4r.*rЫlfe$Q̰H+3b)޽p cҜuwHOHl! 5$L``H{.aJ\-!Z}OO!d &Þ=)e?yU +I?pftՠ. qbÆ̐p @`ar2iΟW.6F&%7%#HU^ϐjS(,(h [8Cu&t$SkKXJ5c>,V1QoL#XM,uդz I5)jґ#߷@ Ƒx,e,F\̰ S|phc>pgUƿ1*+ Hh0`+/QpnQ @"3^fn^PT1r c))g2)ץc|ZiA2,5 sDyK2l/X @~ FCX$.Y0R^N_ YYv;$4 **OԠZ1XDD eyS&SZfu0'J^i5v :A2,5 / EZ!C} r 1CM}fFrh?3.L J\x ED2B-I9Hk]8w1CzlyML<q ,ԑsm[l|eL$Q&(s (ٳd8n{w׮߻j2F⋍SiNs$I5s '4z曛ܣ6{Fkͮo樓-zʆ F&MT:$x tlivMw;kD{6oQ޺&cpwn4Iq5f7ٳy\[ba٘Q6eSV0>kkKX-#wKYhϊ6l˳r7wY/g,0[ZnnG)-5qڼ<4IOqmmX,Cmr!~[6߲\MA2$qyHK@ *4r7$"j*Ӂh;tf$nڑQ ~dpV FiVt,L#eT6'b&I]8JUn ԕ_VbSYE,O4b+NUOQF^~s)G*蕫"蜄{|nHuyqėf3=:l{sUGU漪uԯe)idwsѓŶ?TVP:C:EOhs6HlH￿t &7`dcD|Í1֘1 ﻥKvkײO?x5j ѣ?~g4hjT[@~ ?\=o1c7gV{?pHR<--LYƏ_l|szT](…"v}?.&/f93>;w}w~1X㴨~ݺuEm2͘ѽ\{s>޿ƔH=V <7v{?|L۳444%KtÆ}dOMsoݶK,ߙ7oGD FL}<}|H>*;vslè/D'_ߪ׬sƌޏ9\lt$zW9nSiE̟:}ELτ K=}dɞF+˽O>,cǶnUe|Mjs=nt( "8@;qCcQx }dd =hڇvFۜӧoQfٳdO{3 m=7(e 1>'CƑq1cmg<ٸeƵڜθT {9Fm|Ro|4Zzmc<<ռKw=GXIG}";Cqkγeh;j#D9Z 8 #dQp|Qɶv8c%@4JQ 3ׯ_oGTĕ~뭷\/"o v$egss.,-5o'b\%⓷tbGիWM6D3{lH*wm1YuUڼ鉣$g {kcg)9t2ԙzV)[{ڣ!P EH[yj4Bt4cW}\+*!*Xv) mIM[dI{iY t5j(;I+ԧI՟ӧOϞɥqfXfP ̰JQ/P3hYQ$)Iif& q[S)ntT,ԟhn$ V)byV-x%K'@t͚5\ )*z`+VȺqfXfP ̰JQ/?Cl hD!N#@tCևiz0A,4  VA^ ̢H-i?t_eZ>=zt]XOGiV)dvfP ̰g} 5_JǦ i.ߘVO1J 㙍7&fIաL]d~_uwW Py?n8+4\ĉMUV:6䕍[ўKtΘ*]r) 'a*]r'yU4цϰѣe{v)3!WYA@Tzp=ؤ;vt5 k>He۞={M:tI DGMo{yYG^˙iD㏧NBڧOwקNkׯ)w^uU6+]r'ГO>^.h1b{W/lu hҤIĉuֵ*{)X(+(%g\ ,ȾKu޼yًI7tKE履~j.hj_s))DOg]X{Od~?B'4>x%0e?jS3̰=% /`C#ZT;r1jdB0C߀F; .ԡ8RR01cƸ$IȮJ^+Ԩ\P)#KtM&r5 -JX@sϹ΀$}ꩧ܃>nڪ=jRGdF7eʔ4d׵kW;#3|c~iC=}6qLZhiJ;o$~ҹ>s1'6FX3̰X̞=]z饦>ݘ!o4H toVY*[mH3cAARsQP I7={}bX|{v,[l15)fۏ676h~1HEarN;Z=*v>}r.cM!cBw@}ZjRO>Ź`5ICrcAa@@O`Եt*#C߿,-Χ~Ү]BYI0!@E@@`729|e1\H8{˜窾\vȑw1TZVέJ ځ}O;TdW^O7"kDm! D<L*x6bT!E$H ځ`J'tR6.RNԄP;")?3"ʠ2 jҀzE` T|]C_[H:O1 hA`)DHLBzԗR 0ÀG`U Wԥۑ b^iu(c`U| !):\)3 m1er|{T1 \}/k]ڣ-m!0À*F{y +YX$|+9A2 H S[%w#f!,9'ØB`5cZ#0ÀñHZa@@@@@#0ÀG`u =vʗCIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/graph_6_ex1.png000066400000000000000000001765261153663664300240570ustar00rootroot00000000000000PNG  IHDR^5N pHYsaa?i IDATx\ŕ~zw?/6a&Xd09'&'cl & &HH(! DYfFs잜gW}Z5$MH;7ԭtsԩć>|k4 Ç>b>Ç@}ÇO>|v'P>|c;>| ԇ>|Ç>|l|Ç>>Ç@}ÇO>|v'P>|c;>| ԇ>|Ç>|l|Ç>>Z[[%twOޯ١Me0D˃[u{ Hm7m?(op~ǎ'۱N~go#՟x/`"mP3DOCG孷ޒ>H***M6E]$oT!:WR+VHSS6҂9v2:5j򗿔?9OwjZhSx=]n ˚5kyN;M-[eYh:5/OiJNNeu>WTtΓp '=yyyrWȯ~+{>7N\5psW~NtR˥>Mw$ikE[:+[ݲvjH.wȱ%;;;|^ۙ{Yzum-y}ޣyl[Ѿo}lW#ˢ S^{_C? t@;pGa&wy~rur!؎8ڈRϥ"kkkij$mSz'K.4 O M `0أtuuMG.YGv:Zeeek\s̑;õŋKaa=~WsΑJ;@k:δcʔ)X;\71_dYxaÆCgTt˸q챶'%>~;`m{ӹzVϝIz_`OCHSNwy'| 2}ꩧvG_y:pQ?\lx 28 >Ώn ]>~Y 8 ո{ k3(O?4wwm ZV_–&_-[$H7|שּׁp{pґ<`sre Gveys\p;nK#y˶?\JKKmqZSO4?~%:cs=-Ix+"쳏v;zv||:0*ǟgᎌ䉇g}vx+oϕ@xL?6l0yw-@Jt<Sx76o~as%?ЁޖDxrRBLFx5(vjHQGeH:H;GL_pW۶ ?EȖĀNк:eIL qoFV)2>$'I'nLWPfR2 -[@7,h[n ;%y@=p^ i~1Iir'[L?m'd/2W|Pm  f4uC hB{ڢ eh`ZG'!@iAya!!q*4 {}%\N#.bGHHt=Na:@$\@H窠?0vztF rQ5箻j ~!!(([\_|aI A  ^:._iA ::̞=[?uBRG @t6 Nc[ :y:Ns?ʀ@ۀ: ; HP㈦ eI9hYs=`3H Esi jHFyfX#? ]@^n|̠:>M]2w]g@$ h,m)тC=Ԓ$,  no#p |ExOC.ƣås0Fp!:ŨNNuہp?dLw4#k[b#93-3Kw j9T&L tUx^IQvXt(a.2E<)_ .-;Ѓp{Q;CDgu(B'䤃:`+S$H`tJِW pC#SSkxԩS[xvR@dD> a \S۩J h7U+R3ycCgO1 wy`$+ڈQe̠S^HmW+_5$B'Ŗ'3bK`裏Z-Ֆ'4 "πo\JJ%\H-qFProxigIUcSu0ԁ>>D;**)>@])rC KMM S uA,[:w=<~$1W?Z$i4(lOJ FJ*i%]j @L0HDJM $Ҭe!0 0斓JN4jEW%wdx{()`k:ZJ.P)RF@){$0\-ih BxO)>ۖV.|FBq/ I h?HH[g mH#ʅv5I%Pڵ J;Q%NŔߐ_:1zF#uv A S>zT`H%*ҙn7o6sH́a3rgn iU3b@B!N t>/iÀ^,Od*t3HgPU"-f>P?Ύy7c(7Wզkt @6u.NO@!5O:<yBW'djo:qweYQn)75|aA !q0_\+\5$iӦ_l^5^1 IjWut7d4jЖm%T_$O[3R*VJx4ԉE9G Y$rUWbPG9(ɡq o "n N&TjX"T:wҽO kyLH.V=ZzȤE!#Gzxk?M4/hRsUF;2w>ALIwP]PD@gyM2h *O0gc>Lҙ5=+u7rFWwDJC1CFz.Ȓ y&6xt~Uy[9~~SH`'fTAAt abQjêe ,8Է@Ç!P@]HĬyPs;`1(!_&1hޘ'$J~g~[;]_ct'V3 \kx&aY/gkX'3Gk~f9f`捅񬃋j@5_c0Gx ,k99f`?uGިGnnNv0fT'q//vq5{,Yh`a2VXL.(Q,ށwu v2 8AoDA4} <,b@UM9< "p,Ÿ>)F+ނ揑՛J<9v׿[E€1Qú?p vxkAH ؤ-^0,G7c 1CJw"3.ԝ[y "#rvn 6@,Z~;Cg4~ܪRN籐ǠSO1D"P>.͗K*0aM@cڹs0XM)$]bswuq"aD%K\!`+=00es*;|E>}=F1JZFt̷F˗|#9*e z%a ~lhXK'</jā4 Ă ys0OZI%#P7gچt#컐YYbUK<;^uYv"@IJ"e _pa :7}E7^>@Qf ~Ykм:Keέ؉ʰdk]_ {~<'uFd\wup!n!!-B 4ݸT%AvzTY&FoF/!)'OZJtx*#nڴ\i[*Er5\.w!Rʁ~FDUu}c5@UCH$#0P*\%/ԟ7p=H%4^xuZre})b я~d%I 7HhPr|[IQ(va9xҤIrZt8jԨJTw} !jH "Yޥϒfc oR˓4J}E:Ja@ Fn\`@owm}42z:Y~Ue @AvyuUc};GBh !]k`T|Sg[ވ(QaUulD$@cHOXk捹 /@"pWc!HE!HKJ@VnzwJZzhqi 4jbxC$B~@~[uղ\ipϹy,tw=2H=MCwF{A$h  auvowzhG]@,XvֿE׃0N0VbzXb5| 4Hyŷ& U7.\\@}Htp^{ۿu?omɯ/C=Ă \r%V  o< p8Bpq2pqe?[uי/\tMw0py? '`ILw0q+s iCZy (NxcZw!8o)$V-@cDх9Ϛ7Ti*^tT3"m0\h/] {JP ~+$$ ܫpUB B<%n.BI<í$ҵH8ij|a? $-nId>!?Vu[=!_֓j]]Bh ! CZ 4o|>-UZ̟Pt=ٍ@Y&{(!/\U_v%>Ԝ;SU\4_ˎ*ޅ @;D3fLxsuQF@!fbgqȾu@#-gcu4_HQ2t/_#_H$#(}po IDAT"DU[dHGa2GTU%M@\#Ma79$8%I5>~1Ae> 4W?)@X ̹F R.OAfRff! rГ~M+ypc74^H#h "T/3yCƁ{.1.ΏjpLoW&(F=N9 `qK>}h}Ko =~7Ό ו]0 !?"XCli SO1D"P>hcv'Zc&|@ hX $mBXnwjt?Sfͣ.Q!6[Ҥr á7xC {rgwҁ q9dXdI9w}5%HEg`T_p?x8!^JGoB(H ԵAȑ#p.9 {iI/VS/Dx+]w%]wS_B b(5P յtEU?&jU\)顮U?*CH_I[#Oɫ/\W_:|6^SN>}!$9P\ѡ=ې.0n/:?3?X?5r}z?n &.s;9ӭ4; SV}BY}'Vˀ|1 FD1D"P+ 4f*M1p#~Q_dX=(0vz'p]G/-LdtܹV}KVԡP\)HyR 0y嗭!@;9v`FHyB).C<ʗySҮ~y]e>UB^ 9C|sɈ88H?B: @򱳉/:ct7$u=}G_+_8gYb!6s=I3ek9h !ԇDK(U"sep m\Oyw/\%4qE>ǽ/ݮ^;K7$B18//47m=M7ҹ_$d@cDWT0j!F&q#U߰_5s C%%D =#mzOQMg.J$Ŋ.6\*MwK"-Se/J΁2U/'Kf Zs% j"7WI~vi DJ5^>hkl 1+ 9fXqoV@u ԇF.W1 .X`5ˆYq[k:e1X ׁO %A o .2QX>s9b/T +:܍Xk T,A"pYV%#ul,g7 & uuu>"-2('x"-9o-Ⱥ 'GE_S޴9uiS\|m.2n]h>9'qmPM+r"ԜzN:ɺk=,)1:4MqgH 'x9Gqk&'hϷ|Z'1Jsm8xg͵z8d);I=jY=eHI1{%w?Lr,pYǑ2'˂{%v=\;H~|DZrgoϯNɐ}J=ڿv:e_e>Gn6VɰȰc3eÓhG92\3qv:{9q0?I^G$6#6ͻ],'<[}9sYrkYSϒs+'9IN{\uR\YlA[o@p]V0VpU:w\x Գ-vdU`z? *u*R=gow`L|pڵVUómoMp23g]V{DF{- WXBLX##GRU9WC(:N0`<uh=enh0FHk={8== ̼RpR%U.r]F *$0(e_—HQi9BsNrK$/P-VKOIZv jRY_--RP-ԘW77㪆Z*YkMuos݋^jǕd^҄*6ynܢԷyٖ˶55\^\>9\+\NE:^cdZbꮤ]rz=5ל޽/]=5*^Stǎq{7Juї˺ nՎD*_#U11q[5Z-t_opyKsE@xe?ui/T,ʐ 9p:4@*r%scdmʐ͙6p;6Ǚ_YrH!r)lJȯ̂ ߁mx2\k6./6ϭO1_2 P!5r{\VS&YYȭk:n߈h@CX&6X\< ݎ9^0D{ݥ5)IZFԘCE?w 6ٲINNԔIEa4Ue eݛeߒ-996E \],9UR%9ET!РW;@\#5fW HA 6x!XJmm(\G>3(|OD|ODMOD䑹UT_~版pVA"P^.~yԃR^)922+ j$XdْydIǫ7JvN* _WJ@!PBV!i ʦtH!PODF@*󤺱:7HDE RB AhpѴױ>ujNاRCef lڂz娃dҢQV\^)E,ΖmϗJUIdnB4 fI!jKiPsD:TT%lCIiRQI$PBv [Zۺ H$Sh'N'5TS2fx]e*/ݍR^*-A[9(BZ.uŽ%9uTJIk}E,S(?Il\+YF̎N*_Bsn6lCTRmZ#8#ϴdC`X4A}j} 4FHyeɇ|;^yca]u@]s &p=pd-YVA 6u,E.\s!w#ˣSj"?+j3 !M yV5&tKCAE*Զ[`խ(_oAWHDE} 254նK_޻Xhg=K/w̸hyqKrcgʅO'//{YFM矬5}B@} ci{ n=y8cHvLzO1D"P+z䞋Ghޅ!ԯzB6\SKI~[i3dTךP#<\>Fc,Sj˲4t*M֤&8,ʒ-HQZf[ y^cHkDWVK8G~2R^&Y,JMk3e=O $'ˮV!Ůʼn<:MH5Z&ҕeSFUF[oYmYX}$}H$c } ̛'_YعeӖM2Rf!l)4y(iSeav~ 9JbPt]b(QBWZ3ҧ|e!ϬUv =ewwԷ,eA` TWMhʄJYaiΑ,4H^zNJajs"-aXbADԿݜu[Bysu;͞' 4Hy Q7Y^ΓofȪ%riIk7HUqAlK[%Аnv^ ImgY(2풖@'ۗنTn@]d2Ь@g}+)|$"K/dcA>@f͚ea4 ^x9]g8G@E{A&챇-䉱PSyP9YY ?Eve`y y,oz9pfrur/d]ߗޝ y@3cW hvH @q ohM{1Y&y'CR*>[m%OoΓ=?qP^0OJjJ:,]%8A"vNH{IgDإ H\S 's3FڳIr׵y˰߯ReM~euƞ27#) i䙫[wcz؁BgQaP(ÄloOmʶXgaw=_Fh 'Pqײ)ScȊ)qFλ9f;\/]Pkg\2Bi*-YR+v|wTN;J &ڑ*せ HJs!}=V0r y%|$j^SRR駟DZ {;cDPᦥS/,r+j0Hm;DUAof1VJ/,M ؜aUj DHΐ*C0FqǙcO;D#'y$kYdHUODw}o[5J+JvͧmO1D$#u0 9Ϛ7v'o͛sMmʰa҆PC4etCK!Ϧ,Zynjkɮ&)ɛtk3k 3NafX\V-^icY ma1ͪpugDoԬW겕imGT 64vSHH$-+rC-_\{ U'bݛ޽M.|2+$+%SbD b TĮHv |o3 2_Ƣ(I2ZQ[v٧$N-[yҗ@DWDJռ-[,~j8ڝՌM(6 <+CVC/,2(͆*yBP`[-DZbR(4@mHÕ5\x53Oi5'^ `O yx{>_NwV*Y3f3"X[󛝞'k6\֙:2@nh{opסoU߆4n: 4Hn@*0hù!ڢGn=xi?4i?i?ɐHñHS%/r=Y?tȩ)'42Ct\sZ{i'>;F*2˭SIeKl^IRm1cD(]ArW%Im$MwamHɶ9Q˹N~!L=- Ȧ J궏c_ 4yݴiS6\QhަN*= nȚ6d]Dɓ7}8){voˢ&Ic$fBo??+L.o 0ykT<&_)/~:F^4lNԩMR]Z%4Rƾ66v8r6nʜgNniOqkssTUUu8м!}tD=3ӟ{DkH5ʛ,=ל4u xj!Z+DEOȉz f$Uaɳ;iy[r%u}nHDZ"Ͳa|j]b%yfG= ty.%P])3()Ywắ:rWJ Hk7PUqD"P1w9on$bi+3iC\}Qq;IYj2*$hBEzTI[E!рTo(򌠔WHcnϞ鰷lN0!buginIX 0[A$˕:8tRh́*yZ,K@g㖠=ܧgY2BY'@"ĉq5@ƒoCcƄ Wշ8?"Bm+eZeT4d:Ӊe^6.(>T*׆ZI>^VoX-{,\@Jҋ5r*`Q@ޚ4Uޝȍn]q RDϏF+\ݒik͞-\tShO8-CUfcO1D$b#|8&e;y[rlذ:V_~ȾZ,;X=myr8sMgyzZ[P+k壷>ƒFsOŠed eYe"E"/~1n&D t/dgcC u&d8YuS͐&Bumӽ_TD#oc@T]K>1No:\C^(7\ R[!ey]]a!]iә&9uܩ'Hep6wnq"Ɗi%PaBgv  2-W)2g-@'!D"Pkuul޼s5o999RP੕ň]&i緮NZOg̔6i*z8۷Ef}P-MVɩ:tbeVP{BjJlYV:,*PY&S6n&W̓^KHEYlR7|ᪿMf6y۹.p|ڑKVx(ʹv\TJ)|v iaHDMMMJbA7>QJ?wpn@Q ¢fT9[%FYpmHy~}i/waKuЃ_fE~.&t'ѱ|%V'.S ԓVPzk>=3մu+fx$*#n‰8Jhim@ GPF3>5HFD.G=˥+͝ FAA.IIIϮghUnU@ksjd؈arkGS 'F.|Q ߼P4XvlaBwT?9KWrvV^er?jܾLUAِqWZ4X͉O!}VUX \ԷgpOqW /Xkޓ/ W\Fd=xj+Ev9@$NB6 R u yhD wwk ד>묇F +֭)h:C rj-yjzIJ8vWᆝ'lI4ݩpy>Q{>,kvPF%O@hcw"uWv>@Bd9ϚLp:=@m6.))-)+Qh/-"s\"S\q^ʥ0RJ+<+ &FdK5nO0j)h/}!ݜlU雷HFJzՈhɷ!CvJ$.D!@X9esfAs Z_<ݐ[+M-Ma1!fԭ8 ڕ6_;D PU֎:J׽uk<*(MA9lxL[c}Vdn%J7xE܎e,ְg2ޒtDX\߷FA}[ܪ 2;d}yJdP[~QߺN'@"J%F:7o=NG W{K>cuz֭Elnd_v#ZvߵUr0 l#ev7g d'P#eiI{Q;^9Reޗ9}>R|1gH;RQsCnc YlȲt4)Үt%ͮH4O"fԕ(ׯ_/3fwo4T[o%|b:bD4ǍgcA7|7 5gDN;m >0{@Ji.c) w hOogήA$ɈGȕ>:tǩ6Io)2mʴ+f*Է Օߓϼ(+vЕ٘toַۙՒ蟖O%?馛d=?_zy7l!CMAUnQ^m-diB뀇!Ե-U9|W,2hM~Uh3LnA7oJ :5tA@D,$S9Ψ!ų0΁$[̎]YOA1$ sN= D>0[5Tշ_1CZyZǏn-|/Z3n7vJwΔJyW[+A;8k=MOp8tߑ|FÆ۝O u՚!-{%~RZ"#}Q42m4i9n 29t\kQB$/ Xmz= eVUR.QaR_`s5kG|=dβ(PR3R*A\S)]CuP}]c'j3.5W|4 bk}s7K;8ۑ!Y*չM~ul@ݜQ yeYVa*V8K(. eEm J5֒hm@ R^Wn GHµF{'O%+r뭷w}rWo~}wV x' >Yp=.j&,-]#r4'å^^d"%se巍<6Fέ KDV/lEfvNj82ZIRŮ^CM"+Y)qM\k.krHouj0ٸ9InK8sn$*:eCUmY]5ԧt5暒KMVSlT>\q M1:k{%*8a#td%Z%q{iqQy~FΚҭi$M%XƆU5p> 18\8w),30$Yb⯆Ls7t2(ZYԥ &X֘a]gݪLԧUԵKi.Yk8äg#>0 3х Q8h HiU$2X"Pb\isqM,K%O-i( o}~O !#F-ݨ4rˤIHc+w}'~'YlHה)SZ0{lYd=ϗwy'/iiiyޙ3gcFހ,X`NG5|JJͳ,,,/^8cKeeM#eXS ON#l2Hq;yf&m6YI^JYb@un'eÞP:'eJقKW_}em:Z|U4N;Tow_Ji'sON5hշ ɯlio{ytr/Egswt{|V4˘I4+/g|)Ngϒ#JIZԕeW5N~}(3eʤѓdҍOˌ)3N 68[cfr7ʙo)+W_)9iٖd^9ZPʋeg_1-o"ѻɴ+d?-)wirY6/GH29, }&SOdFıiM%η|[f?Ӿk+l>!BcҴ`Ͽ񯏷Iu|{&o-_kqOiRLx%L eBֱx^rץk>)~'e:9kYe$oɓ_k}ۖ'?[)7NjM6v%Y5S[>W>|L~})1aHJ˵Ͻcg_F29z&P'cOo_i1ﻥ6@]K]s̚;K>3k2m KL#iiИ%eZ|Ǻdl`vmXasss?00Sq0au]Q{EgK>|{NpGQ5:s$t  ІAkiW@cԒb!,76N?p@D$@>|&lx .5I:)Y)999' OlNޭ!0` y /7#Ck2)HˀRAꀈu@槎6 (4b9)RT$_~qo2emܔS}Q|4Y@&S̕5U#2ef>(y5G(FV}V} q_!N|ג`mi,|̝9n̵YTjjw?߬ג&?ۘ!UGڪ4{m׋-זJa L& U%K?_*>s\:[Əg 뭉Se%RVP*Fޛ 4yFKVDs)/:tVZ*w )BEVb5H떭}iHg c&X!_γq,nL0Ŧ)y;HR[,s QgPG i+.HR&0ib=)/06}4K KҪ 6]}|nI+74YS坏&ҪzYl-Cd qIMF WmQN0J3eZl~Y2wR{mwy 3ZN@Qq@dη=3X( J!zHF5}l Ys6٤<F7Sbnj?#6WW.fLdYT+~!yRh\q9M) z7󿑴To P$ bb~C"hK)9sȥ^*G}P:yDѣGmǩ+H$.X)& XKKW<3~ 8foH>2ndq!fC{]anx6%*r#7k=qVկ-- 7^S.]YnA"a2Q[[m54wg8qeYi7HSAT MhT֪pjVգHxyea&*PU:- 5VrG!%Ը%~U^UTjcOďU4d{U ij5&3.0ceikeUaCq^2 Rdֵ{E+fb-j6VV6z*\Ċ6#6y*\COVSόekoF>U69V5p~y}pփ׊ &v) C]ڶ9}͵Re56v0ꗝ~WTjzHx+FDH/yU}k>O6໊?Z#pUHHrܣ3Z7ʱiԏ IZ%r}8t: $ѶqZY! Н*m昿zN6n,SNhJx9!G yXȮ 5ȳ a 5{MDD¬//c88W͑0yWn-aBd"k")D^48%[!UP|n0=J#:CLֲ!J y PՐkY[|kklZNd5)mY䳰ڮ\;-( ܀$UTqS/#SN"s*ԷXi  RܣEΩ2(z㉈{Yks|ݗۊ f4`hS$zҔ\ZzMAX˦dz9E)#`{z͙}?$۪}}\3X4$AM'T|1s5o̱n?~2)"6$uv ]+r!PR@nE뤦˵Ґ ."I7HAZ m QŮ^J,]3pjc< 3gKV}H.BӂRԵ\${nؾ,=2Ak?QVWYv @cHX>8dwP~Geޮ*&qBFb;˥fВf{ȗ7&z g}`~ؤzψ ւVyrȫý=9SsbFE}2ѯqB1aFa6.K TUhl˴ߐh6T-&w뒨MU}'@" 0G6imi64IkY.!heok,r)˨ހ),VyGI6i-˟lJwM#΍.]G;>-=9>~QnHgH[_,v1ux=~= ;]ԳCslcޢ.,!"ԷM'@"hÕ,{T(t?!Ǡ<eFo+7# )Y[Vaxw[itf<#%_woܺblG+!<5fEBDΕ8 IDAT¦fr_mɲ2vg!Ԡ3d(5UQ*ydk'^z6ӕrd,\{%8T-o|c 6KzIT4D6oz!﹕ 8l<<9ߋ'9vCJ꾞xs̵!'c?\>@q,)w|"\&?>U|3Sp4mZ̆wm2uBp |D_xG_./MQ3d9Z>FMsz0L/^ ^͖Qɛ_Δ ߌ ' p/ o|1V^_7UI}iTeKeNTeU}5: EֲKe3=z eUk>8/3-_v /j3@M-jڔloh ԠKS6{DValV]*5Evnz\X[h#^ݛdAx.Ӟ̓ƪpP9Wm鼧{P!Q@cDWƪxʳoE<mvɢEIbE*//oVzuIåWɼ]i%x*P.F:ȬeҜ.OJyRY+iFZܔ-,OduR]`7ɳ}n[R-'BV5 s$LMru3qH?{&Wuμ^7<&c838xq6`&&#!D@$EPYjIR:Tʩr_vթVjj9vSsֿ@ws;eNy]Km8,T!Yl`]x, 8O܋NqZfOIHE 1m"t>W&酫t#>.@M9<͏ _K@5$эy`~<%d36(:uFeVkԪ]Y5 }5Q[O'zGS;>B$,^Ľi$ @2y(eԘ._\%̏ڰ̟ܠ&|"ka cLwp@" $߲xYhz,;yxQo J3^Rf2}jn@/qTn's"ӛOC>}@9WVۊ:l2YҬ;,t-<3Hjpfg" O!hn S(bſuG" *68cU}Tl.%Ȯ1պ d9f#>_#QOs eCI=kr%𠫧븜m6^ q'ܹT%pqC?Ǭn}<֔?9:*C:݅ BxV6J" BlP˒>[6f 0eqtr )ՔD2ǁ(i7.[(Vq`@Y%ƻJҋwv+,U}VH)LEegp-z>)ī݈Z h\'b6lLE@wفOMu6x>t^F;y?Pj=.nuf?]A3em ~TUJW?p`|Pf5oG}ܷ6o1y3@<,@)\)2Zqe0qF7p;F E6tBZ6SwD^xwߋ[x v7:U_]XDOڧrEոmɭscܾvܿ>\:R\=Gju2Ӣ kۘ")1–h2obmD0^c{؜WqF|XrҊ:l2>W]|U`z,YVڵWX:~tF]#p˝qg/I[tfp+Rkw l7LQg_,>"u5_K~݀m4&ܷ)kWg~>Kg}t<5$09>נͭ_5PA,y9CBXX D!6F1QpYww_hv)=[baD{@Ľ #iI#fSկ }%SE>l+8^˖-L^z\q.F AG'nk 9*hW1H>⺍KPH`>[iW qGL;<"*-f(ldn?&@dT sj{nM;m猴n_qIEm\V%lե$^'džG-OW YՀ~H uȗyc8tf 0Ҳ]O=}|g+ #b!f 7ԅ`eBz&-yϊ{w=,tղZ)+Ʊ ץ#/ݕ  \f֩۟E$݃p˿ѻ,@25˪ 9JU":j|ooδ mgQrm,X@GN%M&pADY3T tX az)rWKMKtmfft҅m]7<+RҷiFa>|Q "`ulfQyD_8c ]}Qa%۬殚S-K:] 5kѷ SH ' 1%&7c_X@GhqłEʡnj3h @'D}o;=ǎgb~ 82 Κ|O LGO4$CYmIE >,7.LuXD b1Qdm5/dgyoH1BlK`dZ>2UFopےڼF]gpt4wLmy1wZ`}>cpˠc>T.+V;JݻeHFHQ|Ț=/x/.ݓDzڏ: VGi:` :jR~'I08aU&Is*Y5g|MW6.Zqb rzTT5V߿CAaA<7SF NY L)a߸zaEi@en騨?UVɾ"s*#Ds,^ԋ})$E7cբUЅKmx݋y̤ <)&ݴ&ӯdt:O#u{1 7ͭk-nZj:IC(ҠYQk0 37ޒWTGI;`!6jZiԒjEi@zT&sb8r{Κ}ҒIz`MM#m4zglF!xf?⇿9<$I4'd3 pɶ6 _)xZP_W/ v"h F^UIGSN@@eFOc fV.9}9:hNhCIC5X NE(ۼ.=>*[uNZ5V>#d:B.܇zuVi;vIY]C7}V3gΔH~"ᔛ6\`iK k;F t,^ ?Dji5i_<4xx/,GoJ*0}t|ad퓩+㥦P胏| TOq\5O-PPa1"ZOc ڋ,¼EBүN f@m֪A1Xl->7?>g*JŇP@kD|jԩSEM1Ɋ:BU?0~?):|ypm2h}_7Oh(^=A,܃mSUzEFų,xAZZo~.\Z;Sj >wYɍWJΗ~/S@;J'BhmOg9Hh ]B ǫߒi~~#b)bCd:3Orc>Ԝۗ܎wz\oc:(Eպ0rQfczKA㏤q5VRᘾVǭ*:Cg9d /~[E%k_߶"(5H<u>ǖt'Pn9bMF}V88wƹC|œm:%Y֍% =R7#pԐάw@8i>?p7E[=M$/p̖(㫻92K5@zNjt֝-U3뤘<Ո_Uܺ(ܓ3}MMMXv%g{yv.b'@frZm0ܷu~Ľ)X4)|@LS'0m  wb=8:C<, .y3VKu-9缅74||?JE N7xSX~mمi,q'c0c4[{G\J1j|FnbDJh$G>ʕ+E |MOD+ͼfK*˔)Sm4o2(O-Z$T_:eeΜ =g: x9" 9oڹ+GdGo`6of-eZ>5S`8 ڹE_q7hE8s (Y{w+S>^#"<`V1=쳥 /[7*%4+djF_:lSɎa16p|$gV'csj|mm| ; ʜcي:BӀVSSS  &B\ҋŁ X|+ { 3a?n)n3Ar:aQF{G1mŗe_5Ckqh826, RrW>:#85豠Ɗc*$hCe!VԪ=.~ \8;֫FE+:`IdD,ݪۨݯHBmnLL/١[<dFɱxD??tԞy>J!3zcي:BӀ\"p1e/ '`?H~%:e婧o|]!{]$w!o1\LFxJGXTnZrw5J,ݯY-HSW N5`8wr (Xvoم{gi,fy8WO43P27[ $n7@p&LQ+:O3ܴ3=xPwiV),r hE ~_^p19^>]k'Ѣ' +S'ӗ5F8Eig IDATHhuϼ>wuK`nxǡ(_麭?V7Q-0TQ TےYk Uaq%KՀg4lK8<]]g'{{ъ:B#H馛P^^?GWc2pLgkU7Z-ί~M3=ݷN<gL;:=XpM0 8hZP>Q( Q붼69Hh(Lv*١2&5k$ɠ"w :zMcWll+VVttIg UUU6[r>>=裲#P58&" oOp!p7AWGȠkM+6j?90Pl ~8lp t_RP}wdTF\k 7-&pW {99ߓvܵ6)%"Yv.X[7濷-nQq6nj\LADhZ'(l.6G}(;FOGޢU0|MOD+MZdcdم[yu뭷;ѣGEpAH @5/-#Al۶]=}_<!B5סmS'#i&O1ꖪAIɽ_!},C 6ހI"P'[`ҷ=a#p{iC0 &۱q^lYXh;l,Vc]S@3%mr HY6 'f\o{HHL6oޜB(ض1@YFRXz-ɅF 1~tp:7ׯ~\cvyt'OhaWXp Do>h/cEMu/Z[3Dի["kf9D\Fӆ&uMi¾kȫWO(9Vxᓨ:oC}kN?}Yh΁I8Sɲ0`4о8G2(b+ׂ94`>'eʜκqu_G}fќ k5"w :Ub9AZ~3Xg eIQ JJmU2rVB7ާo_% o+өu';`19Nyǰ0Evx{.]TP(f̘!(h4* +VTgu]N=p=wߝ}A}-|+6o3] Fg' s["D/cmMmH1oiXPOʆy;tX~n_z;,;W߉ۗ.Uwbʊ)mm65֥⁵K} z[Hz<`9͎&F09s?(6\/$k d۹_uHs#w9Tu֖[uVD}ܸc{R}rاG1& ŅU,9&A<iO5Ӥi{4h2 hKc%tUkAiMPa~ l ʸTW =9`lmC#i5=Δ’nF;%:vXNt"3PmSVГ0ãi L]PK/[n>C*A{ٲeeLoh?? mK<# 9$8{PEMǕWwzYg=*ҋ3x\ /.P^ͤ+<ߠCq XZpߝaߦ}Hv`ɻḲϠ#Ň)7M=|_ƅ7\{6ݍ}|۟ [V܌7pצ¹?:ZK|53̞1/<7 pRwnf4V7#v65׏K@n6ܴho:~)Mn&FRݸȟ֜7eiʭS8wM6^/5aѯ79؜s/#Ij/n)~/9/^_2-9|/´gy+VP'Xr-<زv{s\<'A*_ra$=x7rMċ7}k6DC= o}/*f:W9w !|KW}+lƽ?PCSžs/̔Ft'QλSF с|'XR^5=5shjG y >:1xw!0ceۅy}XeZZfyt {DMc={lys̿b'5djǟzlݝX}=~u +au?0uY^lVVV Y?1灣2+"sR)C9l޿}K$* _{ |>O//1d֭?|TdDW_>KvgҊ:BK3J@閥o}KPitk.\Jdv>}L|G31'H?pnנ98qh>8Gz9@=tp޶~mWu[&یT-1bn(Cdr}F%G 70J)vl \zn˫qgXQ[ᆐK$C/4ۚD0̋̒*1m@ٗq1n }iܧ]6<8E #u9,'7TߥY) (m\l9W . \"+&+A;l \J>K6O}e649 Uۼ#X0!@##Uas5E㰺c uF!Mp\lHd‰0tn׿yNbG{_}n^ޏٟ7o^х;3- y}+kDtW(uqgۿn\{f7xwfh| 2\S{}p;f߼]嫹/u>YD}HO Ϥ2'L6q]M/KszE H!+p0>Ⱦ}*Oơ͡i@d|1R1I91)f˖yR} U'79!J%S qHw%rѴd\Lwŕʀqv*Lz*UɻX1IxkV&@!$Z:[Дjo48]dk BbW~ ,02YZ-wa& :6ڀ'*# Z:BTx:M7;]wAA_U+莠)֋w{HKD7z-A#| eq}p^) S@9>aR }dFbE'kՊQ#4;>Wi;@B_[ud" )S?8F1$A8JK@1 @cԧA-_>? DB U58st@h70tpwt&bHu wlڑ +QVYo)AmJΧ!?v`ɴ b ᤖm,EV'@F CFF0#+Uiq|DR'{akNQK6G20oH\\M}Պ:B?wz&UDon}=5k/.pUK׬`F_/7h`*qrm+V'EvzagXRQ^ .}R)Z=zh62^wU0=]s\c)n-!.Ԩ~E iv6)hFN3;^3΂tvn`ZWO/af+*̊:B3̨/G>"d\`ݳ nztKUDhMuZǪڍXS X:|D6 4I!ׅo-< :[ v]r2E=fܶlJJšr@.R0 +)PZ܊yR4 I:rM|;G 7'Մ :d7/^mYsYU+ ?A#$[5PRi=̡@.ԛ4l3^4FƇ 1g $qW贩6tEuk,5j c^7R)mt s/Bb=n{t&̀/|mD`S@7c%K/'l4اU7-巻SZ(- +,]kl2!.(сDwBX=j@ͻfCM{ڜz;٥#!IY-j3xM1 smxVQ0C9{?//rZ^Q5/b32xnp햻>~_ GMZsםO|y,l8tOψ<ݷzSy4T#MI[Z@`|V9#ȵjqXl}KOr`)̓E ir Z ڛ(vݧ[adK9rJ,[9%.UW-F:nnZB2 ܴtT{*v=849ndx ѹ1tnj5=D `Z@GhZL _җ2"ՅSVʀK/,ᶌby2:}yhYHΟqY?E\݄kp4:܌L2Cy7r_c6ԃݗTziKx󵹒2n\Jt~w*T;s5eO,i1eE-mWP[2WBl...[/:oZ@4 1ZhI%2Ps}Owr7^>0N1{JpƟ .ΊLJ  xPy TV;m ج' @>+y:(:jP,0媀l4juR]4X#):"*r}ͲYa࿹0Ь W ٢\ԬX/V{~j4|Ib)1PC(&%Dt.oݻ/rbd{gZDaH:3Hm?3BWm;S?K^ 2y㏕ @yk}Mk6J\DH[]Ժ-k޲<9t6Y8z(}7&= O>?^Q2{ IR'e((gh󠻧"IpM(+ЍK+ض @2XT"ƍK,}c@3f#d""vCw܋~6%GP*$כ֚ZQFzq34p@MzK^Wɚ58qATߟXWTUN-D? JY mRT6jy{n=7xCƇuG6>J>IAaw{j4_|oykh 5E@<ՍpfKZaV/Bl߃Hcё[ԫƦ e!f}}\#m}o Og3ݷ^f7*`P2=mI"XaV B>je6@5x\~@Ƕ}h T$胏(LĦ jyy IDAT9>>=6 JPYU-Xľ-0}:sl6@3/!8JpG!l@c3YXQ%/heϖSK,G<0%͉$DZ67+V`ݺuҟ .\#m""tJ}y7cam~@w +7휺A,ԍ'_BFmvSk_D&khf<5Gi&a=w^URX`zU6cATT|Pˡrl\|hS,SG mk/.󚍊d %)gTJ%BƲcTP*b.wuD䛛^m6N'r>7PyVбm wʕӟTiӍX~^wD4u2r>+ҏ>6ʗ?g?bPQ̤eG4B? GkFW Ҡޅm(#^P]>l0. 64zJ7nȘ_{b> $'= ><dPqyčF%P%ZcE6ݩCKeN!x;d]g(oga]4w͏s- Q%Nx[nM;}=פĺN,o3wQyj¡D쓮[E dv%PZ؝@J&DVAբ "&LrX5B!(AYŸ.?FChXΑYh4~:ۆSiD55 &h=Z.X\~9bXO`U4ѻE~Ȩ}>q_.o^<ijR3r~m?=yUtά{vPՠ_@cɆmxWԞ}v2pHU2mps Hy5l4՛׼qjO.= FJM_r@Y˓ &jj;2rs˖-ҟ kTb)E`NjФi5 -FH۸q#IzPlhHvw4_ԃB{ _ǃ ܷDBgc4 gnWsd?\vJ䭫9 +YXc8+0= j-!+fBugs Ker聻9cvQi2D*`=t pFֲx5.AE>6{Ck> (?nDŲzyJ7.Z#S%}dD߆ByKupcvkA:p">7c͊:dYUe0 ft@e UG~]Nt;q?1B&巟A0AeD^E+"*Ղ \47p| AۛA•8|dxw[R5[焛%jm&jT#do12) ^{WkKW#D \d o-쐌dX(٧TuQg5bMnѠKB( ̡xAg`xm55E%+80P}K/gCqXsH fJmO%yѧѭnj+JVVg;` h4DPUC{N ,=6pdЉb `"5ܽ{n,P(]l)Yj75n"Gu5HJ^sSL@ӽ[LiV, 40H+D{ejE7?Ol& e#pUWFzB!Dscn1Ϸ;̪e?Rakknຟu+ٍHPa[4]AMSЫX ?_3\I@8fNc'Mˬ j8:Ы)sǝ 6Íʮmrb5CܺrQs m.ll#:dUAw1HVL.0t~SÝڷtX> xɇePH[ 0S*dib$oį@2phj_[gsg{-ŞFe"}eJ7+-Vgsh s(faXe&qS-6 khύ 2ZJlcي:L`/EX,KX9J}{#OH9}u.CTX`zi .WW~}2b#T]Ou4wMlgԬ+;6TyU#C݈AZ*0nėĥ`vj[J1XnQ]N33zgLvTWCoPt!*( oh4S`ŧ__H#MoW>}:|> tlۤPc E$U7 )gx! \yg w^O^l "bK2Oi%,`|Aqػm?܇Nfp+$c5aa[G-Fl i7J=!Dshr^D^8E #XPh3x•z88Rǻ]њ<i&>J[wmj& 1 &|\\ИjބG8ovl}Auuuhll,6Ms^ "u4zdhiB=$Ov!-=boxKeH)* y>p6OZdvxԎ3jᩱ)gb5$xnay@5Wy8R/.[:J,_:Rﵹ`_]T]3XYB\Y,ӕl^믮E}R&wiΝje7QClAbhGY`ɀ@ԗGtl!xRE+Pc-:2PhZg(sTaWv{@׿iTFNa._3iN2n0<P QV"fu+u{p`vŠ)|0G=TY T hR3OB}$ x$Y 5!FY5(9e`P"[:,_ӈ%ua۞@R"'6t03p mݨsMej$/| Şq~@lۍ~|r_y ߚL/b\VoE l&ݸ B.'jXL3YfOyՖ9 u&4 44kFp):Pʪaiŕ?ڕJqs:GkO;3Sn$9T fQډtժUذa'iӊk=X{{;l6' ?uo]QxKŤ|qBeUS7b͊63`>-Oy-'2+,ک"3G^r%{qM7`5ж.9G w7GG1Z:\ |<5 O怺c 2{L)owxR@\v&`ʕ3攢jN؏6xbiੁ&ƵKn n(ZQ3R͡nP}+<ou@߷@Ü29٧];6m> <I1yv(=}ޚ:^}Q$rum̉:jAȥ4jwb&EL~#w3`=lA-j^K4<4>$ףڍ}:S B@y_( ˗Q;m:{p(~ap*|A?}cԠhgQutj53о9d jk%"n;917G}'{XۨDD9?8Ʊtzϗ-*ea>E;pzLg7"&$AF?pydĥU1_$w{B}P\&Q Ĵ UWoCkZ699AxkV!n3#{qmd,g81=<9>O9φ3$ïӥޣPQVH;.i4!?[ي)#$xv(i#u5 i%Z2G[XhsdbqXT"n:Ӫ3=.@J[B;j׎d2zq#cKw}D\$RQe`S[~xQFw.1Tzs{[o2tH]? ܧ1e9@To͸5WP{2 TzMѨXGoǯ~+ޕSv^C=} t]~/ >~bg|]_ݛw*phBcU֯\' pxax6 `m\eUB;6p KZV7 Rs: ,Gkaz5pP+SuV\cyuP¶=ط}au2c,y9P&S~zXkd;cז]2Gcq`sуgpҮmkQa~KKXx;v,wm9r$p8 6Ϛu^[^^y<X,p?@K$xL555I؜%Yqpq.}4yx,4x<Z,ѣGssTTT}S'ϝs;;wIg}ǤkrNol i𪮮>˪FiY[[{vg=SXl+0xFi»17r"<0[=[X1qS7*y͘"P\@G"(DZ{nٷd1kLQVXHͰw!:(A?=-6,=i} }o~oy[L#|Xlmƴxs\? >Sҝ yΞAyfN{ K-q'0';6[x)^:CCpX#yΞ5[>Jv1gxV>xkWԧ sxD1hżEi3lC͇yVD29:ս_ĵ?u+3Ϫ1vcx7kA/LXI|{.(mnx~s XRu_P`rmذu^{c6Z;sONV|,]TE3lSxyZ+7^W 2ήNQq{b5X|͘:Nl IDATmںZ1iؼcf: r,]^Bm]o붭XhcEw?gttwRg=+9Ϝ#%r[vnQRiu[E^*,9d9 ז{몴T3(̙#}/2V( 6y͛={H7ߗ_~9\^{h۷oӴT*%sMp'͘1#wO={v>qq.ΩǠ]<6.; f1sL$~Gdeϗ@9tE{he&~l 1̝;7wh`\vm- /D~m8p@0'uVYTy!^;v>_Ǻu{u]'; X_=n6٧A{!$"i8A JG[K1Xq!gЈbC h$Bn>ߴk3J " ^>9ծ$s5L q0 7;H ~r_\*ʹٲd[NrlI,JIIWfbbÒ4MRL˴Krܼ03$]`8, `;=>}*LK\Y9z>|?V2M脑>jJUNM$-'2/lLlc7y9c?T3>EΔ%')c^I-wRY9V_eoK{,|eZ{ ~oiO{'NND'fN1>3a450-3ƛ'@؜gF6fQwRژB5gDy6 Eqo4'ϑsAQ!Pn;ryv5$G?% y3Es9Ohsr=?!åV%Y'~@!U;|cSih|H*C ji%>HotbF`Ewt\uU (Vz>N1m42”#a;$B sc~RuS&P?N,!O ͛ń17i,Wn=b"A#rϭh +yW*)[/3/૏l@͔3ӍxxFA#vP@h%Up,3iS2cgɔ:&tOf[/so%Ɍ#V4%tTc*c2\jT)%'_%_jDY*ςBOrbĊf֕ۢ)N%j4z\fqWH5P~9:8@(f"zLMgµAfa]:䤥.DI ~nXp *{JK&d M !3_gU 16֨&YB&,zjlZ5ˉ ͢a96b%WhԄDKi~Y9${S$O{1xCj%iKz{~\rS24i&^;1i᳞8SRWE@:h``hM3}rlAv83Y>eF3׆>Ȉ6I=9jC=Q"PMiuz->KD%d$tk{4L $kԋygg:+LN~dim2ċ9RzڦY'f;䠡B8^ૅmUMyqEӫ5ڟ +$j{y3/ T62ߨWj4P2 i08 Fzslxӌsf"=iJZ g!3+Zx/50\6IbLMJfg{cn8Lvr!͚M9ckSlڞePIM4S/J 5/΂|*FdQkky67iB%||M)_5P2k-ݦΦɪê&\8>;)1YzZI֮<;l<Q$P>6Tz$p@K5/[ttJn LM IGG,#sY}`4UOV\(jb\'Y P59]'"+ Qoq篎L\Sa-pD@Մr7 uȘp=ۤ-/[ߌ[0a+~qi<[YXYrwBi+rvyʶm/]g_irblB&j/D MMq!0oģ9PS0k1lS/<9Z;:`½+jl4DuӔVӢ՛NY.XXYK?k&$_2)|ͨeiejM$H-f(\K&;MRYw} %I '-dg.^X-5 eFb3ctf9e2Z0KI3fyQ"POʓ-ƢZ--utI0%[n e`x?t}뇰$6>]3R.X#̜@AC:jiH秡+gjc scs~>Vh_́i3Q3U\apD@Gk5=V=Y!}H}Iǁ+QeG$ɛ}2\(!,h\بHKGx Аoýr_,y5ahz 6bDm03nlOWM(Lqj&M%63I6*@HtXT^<08 Fh{v~ prcj&~"ڶ$':}NV>cǁb)zC:>ݟi<\[Le?7,2r3+TT^ɗI^{'$ y$Iun{B",CcAmM3}޽tZ~]s87*o!;w\.PxS 8mn8m[.Zhi(y h=M:Wj]hʵXIow, ŰzҶCv%9:nb=M>o{2ҵWR6BaV&*?!єTftK1ӵ'n<&]H!p [ <;8 D*OGL=;6BHGĚ~,AmfJ~*ٞ.^w,=#^TAR tKHtf#nɍH+6k*55EkՅyĂnDj~{6R8GtƊ@t!dF>NɎN\v7V[$֭[7FL|.iL ֩^C[.rڀl?FlUy/RWP; pķhgL:<<%Bǘ^tH*'fۚijMeF_[3[RyI&ow)f=<}r[z/,vBb{]#v6"ͷVʙl T MεoPѷN 672J-@,7QM` xut`я)(}%-Jt=$̬>95g̪}!.b j Lh2ۑx@v324r`xxؐ 3lG *TW^yŁ@s j=#|rH̗ۖ=ͯx&\vIbdR%E{اX16I!RŽ7"eɑ΢tIy,#{si],t oⅸϴ3@bk!Q8d̹^ b!# Jp;tȎ;d(UI 3-ms$!ݩ= 2~׿J{"EڇowaD\39lnߝ4ȴY2tz*&Kf"#DL2޲!P11D<$M½eȫ'l6W'D!aRJuSSM<:ȗ ¬l$XM*oGGG$Q#PrɅx$?K>3ͯr(#:+xubp iK~NhM2wKƣ6sR7횲c 7biN"SYñ1BXğﻥ}؞|U\? .H,X:ڀlO=⋦f{W,Fh%U0עw$hBIvO޾?lN/U4Y3%AjR-;J؀_-ylr&s,^$xk?YkWIuhH~`&ύ_Wa}4"{2HaydڗÐg$:&ieChi;bEUJ0k~\$Ag)3V_TTQx')e̱sR*-@hw6J"?DMy_ԟ_b~pD@Մ덝ߑ\,xfR~P%$dd$mheU/ky5;XoZ3Y%D%Ja_tmsħr__x㍦g5PٞyٶmiU^;n0 o= m6y}ۛ6(\\JC#Q#)΄|YOk˒tϓOq;b%cύHg:+ ~zziR;,rPxiU-[#u"O̷IkMD ײ$v[[%ܿiom%*yte-Ϣ̥273' ]XiDs'+IY/ڬ}+Yq W[.U[p m,{tj;Mׅ@vwn<:^6R5ݛ3%&YZbHXGsRRDyēZveOydnUNf3'&ݩ GM> Fk6%cY.ɳT%HH.%ʂaN4a[oTW{侇@e{-y'JN>Z@T3.sT'm 5᡹{$l ,F{キ`]=#2;8 x":G P|kOJoKd1&5jUD,&{bxY)fA}s'+<>S2ldHd:X&PӾ^ɤoa#W_}ٮbt']<)>=`m joMvyOD׸[%s,'ž޿WyێɴLȤǼL#Ϣ<{Zd(I2~||~[h̓#&^s9FG?*SSSϖi*yC= MDw#A?6ͶդMUem1Z'd$r~@<Hv#Q̮ާ#;hm}4;8uHi#dX`j,v ݦmmOa>%Q(l<Ǩ?͔[&B ˹9&k5i#r}rf] eQ_3ymD{֭@T?-?'> SBqک svJ>>,}uSӒɘvߑ'ɗ&ՙ4xk ņv}fXʹ^L2q;d4%a|?>|ʴ>9Y2mA)gc2zez4-CyɏwtQr(ڥdeHFz[d[rUW!nb'K0 O ΁6#0yEaLA,:j;Qe]f5f}TA @7Jmq *O}Sr]ws=':"K_ztW?;&nƴ|_ֽ-G!~ɹgc/ʞ_t<Ƚr[dl~P.$ֲ|0_G=e+z!wdrT2cr %*#u7zwE|Qr޶bNj25=);nYyp6׃IoZ[ZTC=dR;qLZ[fQ}o4;v~Cn8zhK7pC;Y~ߴy$C??4mئwn3mΓR_X|߾}{pQC"0w@Jj˭*k.yMch oZj+彨\5'%M{߾}rw6i_|єdܻ xw5m"'2?n&5 G}Դ O_u楒)nvii_x McGI1wE#U@{6s/wi$'@_BpܹӴgzqzPvR1Px^{ʹ;jS /cu>[8ͫjpncs{LB}K\-*&=[܋K=[<OޤC;S~[o=x-$Xx{m<cn ޶L WxV-- &\-[s +E{Fۉ ((C֯ G ;7\UƢdk{.my+c145MNnk&lǫE6Z a*bLr:>azEk{b=t9aLJ ׿2 4Rݧu 23aYec~E,/ͼfyU6BeÙ+ Q@UV]xݐʆ7^ sڿhM sx3##PM# Jj՝%E>BAdUy!(d"rD@1=Ӧ$<}l&BDQmUy!G#PM# Jj;h%0ڙH*qND#!a,Rwa,=F-EK9mn8 TV(ځZo1 r T6%R:8888l:Q"P;wmA!W;oia6NӎBn۶a_[o# Jߴ,rWS lmmmf^^FlvRdڎ@@6@(Z,СCfU6i'|شڿ0YlӎB؎ʋdi G!c=fQ`I㧙,o:G}Դ,[o0Be{衇"avD@G@Te He+ˑT* օv.(osD@;;;媫2ݐʆ: avW\aQ_”6ܿ*-[$L##Ae&Fc #\FC^m}Q@(CP4x l$߱ciħy3(﫯*oiU޻ۄ67*+Yy0lnkoo70o>7; K/EAW}ץP(##PM# JjGA#S(IuWE&1@((:nF l<|QH]Kq.(O?-/iU^B667Oz-uE@GMȒǏR?:8884nl-~Qν+()jB9خM|zi\ T6l߾ݴlbr7v3J p u P\\rD J~krr d "TV-s=r5P٘b.aWe{饗Lh.Pnvf~oI /7/O>YG' xTP/^8ӧiؽ{ ܿQ^8pOcӀEE@nxcQƺ뮓k,x~}L|A[NO}J~Skg1(J3 B9׆6LF-*17h3=zҿh(O=TWLAòE /n?_Uh@Tgyg}VH|؟ٟ6E[|򓟔뿖7shw ڢg}M?ôo,Lzʭ} _/~dP>bݿguVŞY֫lgsYt4󲔼?/!k#GZEy(H @җd:7(ÞƚD@.,^0ѲO$/bn0jGKPGLA[d2eBx#ɗJjt9~:2c^;!H?Ȳj_ǘؿzހb0'''ϽBA{~a!Y cmkk31i?YDxM7^c"~3G$be澷W3CdɟIٷoYWU3fLg3k;U3i t1f~OO:<~76'ڌ B% ot˿lJ[ 4LkGG5G> @Ǣ߹XT~W~h0h+[eڿϿjʗT O |АF&Oc$D x)D^*_WL!QЬbCef|",eΝf.kxx};!7~\fCMLxxf쌵BWo5δ/ M HM[up(AF^M^=_(fYƊDF䥗q G%Y䂟GJ=s˿Kٵk);;;~Wo~{{4c_@ފ \x4OL|t`PL A4L:)S `o_@yc=Km!P%d?c1ܗL1aM-4Sd鵋.Ȅ\1JfCM_|y(AV55ڊ X:7A>ms]0hݼ׀T~ C|h8PfPݻtUl(P!nHu⭎<7填} ڍS44d>'?c1sq=Cȉ\ / ̡}#18c0ʠr%)a`5HyyܩAWOc,Ĝ>$IrcyO-Lxj 0fޏ= sXV ]E~F`_V4Jx-3fPZʀX+b-E'<0oI_3+y6 {%h---fo7jڲem > 3)} h̠=j ag Oyi%'$/ q$@L׶<1e Ԥ/Ȧ8_LըŰYPb -Vj..rg$ Lb\l]RYU< Ⱦsl~o@KvdԇvԧRyuÖݮ~[]/JaOlhˣۡ klͦ~]{kk\/R[l۶(s( a=a? nso|  G & $њ۵^4>jou]fxYlA[C ԓ[5>p`g<=fiVa3a޼8|G$+)kQuGGuJC8_n"غu|ԡ믿x؟Z#Q( й4OB8DICЂxSB$w`=7 |;& )xAļ^r%'~x0I$x'JSk9=\N?xGI TFEbN]Q#P%ZtVQJq߿߄`%GGM( .G!U9'~ʬ" R^!dA96'Avbᗿe?JL%mCʜ1>N&MwO _Ep~1d#P( 9CҐGM7pm#̣>j4<̝d@I3&Q,??0'ϚuzI0dKrϬY١ 8`dI'x´D^s.ΧBNTB:D@V?3?c(0O~__0ȨCPL.)%Cم MCXhJ p51Z@$WqٗM5;I:D_%0Z-U_X?FՌV/ǴG+v" ɻ4C'Sȅed'Ű! )Ç>|h7 Ç>b>ÇO>|G>|Ç>|t>ÇO>|G>|Ç>|t>ÇO>|G>|Ç>|t>ÇO>|G>|Ç>|t>v!|455Q8;~F yؕgj*1~ٶ ('ws{>vFd-Æ 1cHQQ=uVk%//VIs%rYl~GZpgU:'|"[o>"OwjZ4M`ҵkW*/,,+VH]]e^ֽe;5yɹ~HlٲŖ}AAAIJwU;ioZ˗ .ׯ~zIMM ^z-ox[>oZ;_fg,X wyvehh'F/'|<r '؎"==[VVV粳嗿eBĻ[oG r饗V6ƹtR)..nm}.J)t=$Zg4ZN;>0 W\IjjM+qEI߾}mX;c}oIV(h;ۡv߮v_6A>\~YlWZe}o;۫ <=IfJ̔ߴiI'N4e]&_;s駟+vH/~ңGz),v7@~<<ܻkG .SN9EN:$` ŤIl!3ѲsLo4-GW]xI#<{mU@2-+,$i /+--M{ ;CP-}#I(OʌLc[7x-?葴i`֬Yvp'tQޔ-㎓O?ܹseն]NIyo hc|+z #- K [֔~3!⤎ >Oy>yw4RM}SYʚ.g$wߋCː8x^ۑ/v >v܎դ~o~c?L:b:>`oCRtp&Nh;C,*c=~|C r>c9Fyoҏ{F F'sꩧJ~~%#8ª&yP[";蠃,qyaɁ\q6k&\&t x?H׈#PWt5iNk@ZOڼk⪓Nj(.]AeA9uYH/뮻Φ@ F%\bxti42NyBmoܸѶI 33Ӫ)koyOۥ-bx_x/a iaga#|Jfyg'(=stCD$;sV0Y>v:n: 3.{!9҂$ CN@ #UЉANT?f :_!:Z$e t|Hntmذ!|2h*̙3'?-љ:@}#MGH" ͬ[N~ӟ2Ay7'e䂲<9W6f wbF>’59C=ơ8m;fΜi :h͘^@ͧQVZG}viC*# @=5!8CX!GJ}ҁP|vBjnEWKhDBDLb"?䙲`PEhuho ])VS_>īje:={At0)w,6mA,Z}~6|5nh'%PqҹQ>FFB> @U҂PAD!h IѨ䡣{ޏT r0棇tH!0$:s l%x#9:ԐJjt L'sz=>R2jS:$@@_UªT@t^x-wɎFTr:Oi!Q()~$J@'N۠FK>_Λ4B!߼Q.:0}HM t0a)uJ:$q%V^bNQa ]A"yk'J2G57IM˽|]ʘp5[C~WZ `.uyw < 4R(`廧yRԡebJ.-ah{ >W*@0O/sDzNccVRܐ D](QdF'zwW}G'HG׼ṫᨥ):7 TS Th=\  Nhz4Q{d qBH:PYlke o?[~Z 25^M[F $mPǷ@*R}||JZJ|$4h:@@⃿ꪫ쨘g (>b:G(*.RЉ>i{- @ԙѹR__V:*BBdFX2QB\>8q05 M:&r>dDL'ų$-g$IU*RU_ $~_rA X?yUF,9(Ei,~S(_U'qO`. ,tG:"/.*;1߇ j`Rރ=jexD;R^#!(Bt 8G!vh3 :r~<\)}7,G\ $ @ 6H1HS60(~ P4H9 S#@οnIB|3 F}>3H0Nf& *` 12 ;x =MӞ('WR~ p%PG9H Z?#kN X#YB}rUU=|H)Ht̿qv;::dFҨhu" ڑ4g>ZߍAyR+\:EQ|Jt]uk% ɉT7yN˞ƠAZ&ާCjiQ[PC=@i+{ޡVWm d08jYfӨ !uyc")bdEuKyZ[m~^k%/OCV;s+"Ͻ?Zw&/i+֮]_[exTzv ZjG3P`JkM*wcA vݑ;o{6Y{}1Cm!IU?y}|DɋE(hؽp"޵l tnҍ_߫"DOkVx)oqiu"R;hx֭w Q[bhiQ{ۛF".ˆu& W*n{ּ3^F޲uۍix{몭=ԭk}w}!Pף *5202Q6dQU/ނ%#iv^b~:b@us(ttrc!Rg4}IWk;Fk!:!Ho,!K&1<.:[C:<OG"7VC1C ZK7g,01g]9 r>|3(#I?k Yf%I̹u ru x<4ȯs$J~iۓnݺړ?&III5H1C@ u_Xյ[^P,j::Y/ĉa~tC}{~~^e|/[ya7/l]Nמ8cF}c1Cj,Fd17*xyQ>J% T)z?!'TJ(uE(IzR c fTմ,Y8𬂇$Q,RGծu]Oo揑< !a]_Sj3SL>"4Oۏǃѷ _mxBڝn!KY>APWfnPy}KyּJ||p kWSK" <񑬛? ]Xf@DWm9Ϛ7\ӆ{.R7jɮ'EyDr%mt֞Q<;Zw wE*;7 Et 4eht Ě|{NjeO(R螞fRΝk=a?XԎ;mimr=mm=_j>KՅf-Hhk kW?Jwb5%.X}$p T:/Qg#lVyo@0HHNX_[}38 .--m  ~Ci 0a =o\[i+q̲=(klgp@<<决 k=`ރ8O~yܨk@l :}Gl U4 Plޡx3cm"RReSHRaP<XI:fOU\6XޞāOoAԤ=auOTxZKII; ٻWf )3̳*BZFr={|~_ɬYsƨ)}!$\>r*M _]MfTm55ԋm1mI:ekiB*U_$ԲHcHqJ|B;uaŖ/~OkcB0,߷z'@,_~V;=Ž,![=Is~swpn$V H  X~}!$" `UbA7^b'BBɀSv[e,ThIk/ GxwA |!$,u}5[eu]zBknSkqhk\z-R|nXzVA9/^n|2:[e9/"eO}b=>Z{ǎ5 j+|ƒ֝j!̳Ǐs9z`|ᲄ8(yPWw}RRXZÒfT O1D$P>8vx`мхsk 7:9ޑCueہ+k/ܮ5ju5H%@>K.$|%XGxy?.58Z!|M1ǺTȊ@!T^hҁ!xΞEٷo ~'… {]À'--N0-œ<#|"rw_VXQ""BJzH̤_+Q,2Wswo'^tOV}Rf!#"uQH]r Rn%puuЗ@cD>|2ښe\{?Wf@( sgB:׎\%\:r7ܽ11 RH `j*{ YAU DX(3TGM iR+Ⱦn"U1 h/Fq1,iđ 7"A$uc %>< v?UCxk*Yޡ~cYH] a 7՗-KFX`YH},e1. `ąib=EjDȜ(ć􇔥pb pA3χR>CkāW^|rR'!D| 9H`)*\M bQ%?E vgZ'/\gRş.\>h+Up!̼ElQ4NY2K1D"P+ _GԼ __(uxos0CiQ iL -MQը쩩_iosR̡QRԑs*!A:ӥX0`Ÿ$X7zIsF>< P #"2 V#&C>98O~)F˂t~UE5b[ @1&`D ⩃BFF \ZtQSu;6o.slJW[bW7UFQ;@h !ԇXK4uvv=^o/\{] @>Yy}j=l9ǜ&*^TEm-7MBHH>@5^t!Lмa.!ԯS~]eL~뜜~> {"mJغ'(F"( 70]˔4/HXO0GR m>F1@U➋G@ׯΑargX V,cY9{U׿{si{[Mw#?|y{ny{ǽ1{~mIS1tRH$#*, a>ݥ8&OM) S?\#SƎ)#GʔѣcȔeʁʔ_3gʔI*ֳ;ԩ'OsaM.3͹>$%x29_#&adQ2ha%|4Z~㍱2a(5n2t7R 9H~G#>f)y.vQmOQD"Pͫ.t t8 T,s*p#`W_<'A;տ]$bSS uj[N,Cz&6ϓ:z)jʎEMRZ(EMr"3jFi VӬ@HuagX힋G)?|S{"VTV22%$N 'ޅ8:^.9ВO>io66KkȈgo k$BRsK$#tRCF ~_'~TJTJkJ%P0TUC.+464}}$hv K,{,wM`"kpׁdwn֮*}j}"< # ``8%-GAq(y=^+#YfM9@HKZn]xL]K?W<4!9!ܴWԌt%ԜR)/ﯖ[nhIe0,rVzzpr[l!P_݋hÉtl@"(>p;Xm֯i8{u"G2"6l(nnFjQo~Ҥ"\$wKd\+?djr+](W~yd4Hj6 cW̒+\+WN&yzjP^iX]ҧJ5yj:kX%P$P#s}mpOT~_}k%`ՠDRHT}>$D˖X ֯K^),_Τ?/"lQfĻۈsXBҚ ejA,Y.&e RXI= ܻ?>_eQGn{'2hhjJ,JUأn1j@ T^ruF Hf{ Ȏ Y\:R[^'N<;sLKifΎLSOxWo$PP@a LCֶ\#r"+WQU&lKFBg]/YRmxJVnm\xș9T aXcH"j{sO(0B8ބRV؎@QS X1@.|vFP.|DDiAvs k@Bn]kuՎ΁h;W/朑6T?\P/(O?R+#>%r\& C25pz9C89U ǟʊu)RPZ%eE,Ҁ%70$V&ea$Zk7Q&eAbRFIy]@jBZYl o/gzTW۪U#F`jjj9:,κ;*qwyve{of$ѸqM?Zݎ.)t%=8l;J# 3#.Z̧)St͚5K)bWVwW>5Wvvvd>[8Zcq[GA.4.W]˻l[Tɦ"=]x@8@+ib%>>F- 5!kmACVF*oL9ǵ䙆/ބjfc@6kGȳHƠy&OM\EA)(B),R9SFR4o?e7 7=$F.j\SےYhԭ%G 4i V.N $}ޢ23F5IQ2uU2+ytECe [&rȐ!;wvivWpqG|THׯꪫ[n OO<vGԯ_?˓G}T*04>8C+VOi3ae?ߣGs_Jm6yӦMalҥx駭;ZXp@:oȚ`X/bXG'PÆ ahԓ-:io$47[)[}A.m0L3e¤yYڇ-+0az])gHew=$ҖL>4f<ŴM:/لgu1 A>n7ܷ 0a=n=)ǦZi0ك<$??I.CppyI_U}&SKj^7ҨLM%CTwK{W4wM!ϿSlؚ->#n2:І/Y)w%2f>-c'NF~1Ix)$xȢok|"oc߬(w!<#=3ϛ~r8{m´9cOI^Jww-0}TjN\pѿ{J]c&=x!tiwz#ח. ](=\xwAf_K/֫~ Pw (s袋lOQa ߉}0 S"Mw!$rQ;U}z2lj[YRM9 Y kgTUHqJPmVɳTiF4qo/k6,IKJ@dU3J~%UaJE>Ur+%܆o7UƑF6 7ۄ \+ *LBJBp}6m[e0p ܵ駟n۬#n͟?>Z>`FܧDݵX{)vwM T-tJ>jeO}hŻe\qh{oI gϖ矗?mZi'M7IK]wIp3(tjh~!_ZyW7HM-ڵq@XU5 5m]6"s_C@L( +J2'([0dH5Rj(Hjje?1_I],YɖB)nyR.[&Pk,d$L%B]EkD}#%0mqXD!KTYYmH w8QE͇ZqہZ+$;p܁B"j9²HZƺk0- u)!+u4sȅJR2TgyN$AGܵ{%_ּhcEPN:A^y)6 E-R'YU-%%<ӊ2RrSr尷?'e|JRdn4 iyۑ۞Xg AKIO UcҜp;p"(OcBIS я0&Y 39TN -Km*YSIsu$,n}JN8Aʲ!΀TdTH 92yd<|)(:9JHm33$s!U%=LrJA +<]M(Mim([JHs TZl4o 2HOD`:~t#{CEn=,=u9\{mh ~A RDi6h&#30V3G1Bbus6 / 9G>BALU.)L)fg=Wb%͙f/[KYə&3$cV0yV6=޴VhIifhnynK 4&[9Ϛ7,hv#~e;_/yBR[B⣏}O`>.f瘗5A2\W!HCk/ xBw(|%!sJP"Ɯt䵟5+ͩoʏ_]8V{\.9[%tIONp T˿LuXF>Q@ts$J_y$G'>Va{.sv>HWƝ%?yNtUZ7 )ke[Q&]zug?+eiXɯ>#UIvr63HHp!P#q&Xº;r*\$ З@cDW9Zxγuv4˲NHs*ryΩrsղް+5Ykت*jknmTh@4ęT*W_V'G Y,ڊum|W KfԳRhSN*ۜmio#Аks̯dcJvx)&͎HE+ ]@cH8.P )E"́A;Yu. IDATuZzc;RWA|c I#Gp+#ZY+䶿J^R΃B%i%RU#,#d P"7Iؒ'ĹKhIz%Yr@ے@!P_q$JJ󓟈\f{Ա9ԁS-<'V$>KUʳRZjxB9rQ2\R6m d Y4kM H`of[*ܝ!P_qGszo] 0:D Vg{zw'Zڍ˂R#o^iJy!A&ylܰi d[K,ci!Ќ=n@w0 7|I$j^ecA7|Ѫ/DPᢢw3mwt'e!N*\8 f7p_o;BֶuE+* ϯ70 giF<1B=ꝣԞ1BȺ#i@7n.|?E wGhYMDh# oM[ smZ@7Ux")y ވQJ;PTH^ٶV}$*\JƉ ~pc#9#9?K {hv|dx E%NTRrAZ>mXNYi6VsE^* F~2uC;%}z$P;ZXZRX"P_$j^*UplG뗝vu~y^}r/9s0†l@Dۻ~s7V][[+ߘ1;,uPu&OCͬ R,}+垮5rǭrkk";qw'|t,\i[Mo䆡74&Yr]ߙ9uH3b4.c)(CFM-fC[v@pۮ @cHmOl^.wBZWH9wĈȒgIPTiL],ũR$YM _`IHE),KRsvmgrzN/n @ ʬMib4DXEa@@ͯȷZk>@P A5@6tPA$ eJ/ Yi=}"֋ex2q{4lŏm|C\wE!*H*oѪEkccR.B:_%ḰM/cyeѷk~/Wp%h<$2D@]K`N+[^<] *7W1jja0T[dHTL2od}JYjZJF~=R~ڏ[ӵ8(.9$ZoƂc%G"a5N;-d n%iew;9&OHUM(N_o "'{I޿#{iwM g#ȝ%PCk7@sJ$hsĒK>  `ñ Kv͛gÉȐO?Ԇ۬_;@<ZDaU&ӾBLSV.y6M==yda`|fRYrYmz}q"u%nqyֳ|&)phn,*_K$"NpK$ EZXZPP`V]"\iF9yr:_}%k. e)ۼ }D-y3SzO7UH}Qm X+Zp5]E tݖ:` |IJJ)%Дm.|$a["~x!u,WnpO5/1vH䘏~$w?A8E$/-ER6Hj{t:yF {" QZ >yz%Т*@cDr f$1_,Azj6]ܰmn7!{3T-KsE۲B~2rh9HA$'MR7v9W5$pg_j*77Y W8@7o,o Zl4o||Zdzݍ_ԯw m(#(s9x7!E%T4ᆪVF,L$UY7ISYֿNyN32sR%mZFyv!ЭQI{9Yb}T/ca+HZTK1D"P>,hLJijde/1d} rsdIJu[k.򷛫_H^Vy2V3HH ӳm \c䩢J/)?M}F=FGX!y钖iEAg4ne tZ\U4}I$*ܷzˆcA#Gvlw-[JV-]a*O&kI[,&rΙ;Mf ɏd % ir'-CyK_'VȢRQ"9)% pV3/D 7)moNY[w9h  /5֭xγ-55U؆K;nF\ҵȍ7n+4 i.ߨ*HX' {+e9rpσ7JfRJAZH^Z`hyF9OTCPF>wlJ͉j#"Ti9ց~G.lm.|$H`m<9YE-Q۠4UH9^! RWP"FJ3IJ9Kxy'"\3%5)f8Cl%2XƒۺZ^S. hi>$@݅g϶xVijVX!ׯxcB5k 7uwM"7߼mdLIAiPHr߫+e`b̭­ER cc=.0dfHSqN tcu#Z3fG a 92IKem$HDEٯ_?hX2w\a'-yW"?Ȇ "8؏mBk9Y׹nqdˊz4r>^J&4/rwH :9 +W^[E+M@wF%ИF"}![z* Jsm@NM# J%XG"FHLY Hbeqy]63$PWÛPcyP:9z)N1qf%KArHSN|K837gXW|{ wUݔlcJ" VthXMhmHڮ 4W^yņcAaÆ%܆ݺu<mˀeGxmg)UArF JiF4>5&in{G+^XB{ w baC#Z@F%ИF"hmm?[/мxΐ_Ӟ0 ȕWnӕ45^y%sC W)O>\#G(^\'YA$,ϔ Y6\^.:N$gFr o]]R"fc冭5(*)h E ԗ@cD> ٰޓͲQ m<,h61֣'oVJYfP*,y8TJ I67Jmaee'k׭-Y6&?#Ȟ*<hlRj un ßu$.>܆Yy9s,dH6,WiAF\sH^ݹ$WTgZRgyJ*ԷJA|Isy@J4igВg}IL1A&`'O/1hĪ@3 p&_TV/o,_V>Tr@['P_$"ʄ l8 Eh"skxśR~|MHV NH5AE蔓jo~?i6sYJ%#"OBuEu2c Y0yo-mշ-WbP tF;:Z7pޘb)D'eR@m|#G"v_ Pֲ) cVZUAăru`ZIk@*in b#a rgJvr<ݍcP] p+~C퀬K* hFDXVW4[@cDWLs5oHxqoDd\UW'Ӧr4!}GUQr 6٧Kg$X"V&?(%i.an oGY<=i9du57d<hujdʄ QmD 4c#"@cH,sxe9C5@g%Z@7K}̧{@~Y:on܉ra.h ĉY`D,5 ATs>2gla:Nh@3$%ĐO<Ӳ؜e,@Z]8@u$D& KVќ*MFKe+Q$}$ }6G\gDA(I+ Iݜ*u7=)M }P̓pW +2r+J tsd D>vqnU[BoY<ޅ낲fa|Pk[tvLiҜ,7 I.tTgWIꦐѲ=^'F! 4mNF+FR$.{6k =м3F1'(q]VZ_ɻ,_1h`7 HSgS@Vr]43Umϩ &1}ou|&I㖷45h ~p+ҕZ 4Pmm u>@,_܆9Ϛ͛7ǷTf3P} -TTV檠 iR$O4=`? x>F5Oۖ@Y ȆQ6ha/G4B%OPZ{9r=Q4]"yjz-X y$Т"\'('d%eH0pNq|I.._+V2*vU/c9#R_y$j^Þy9ϚuY)=F7ʲ{|6eO$'nIE8U}RKCv<1̬{0RS!3'ϐJAF~\JVk Se}rfTni u -M'н ʒy(xqCM$ݺu|6k =м}֝9PhVN?.YWXf^k=?A|sC@fY!(ɡ+-NRfoM{KNג'%22l0 K K!eQ^|jck}ԗ@ $xU+߄BVmq(>h,mPNg4TںHhuVsjOle-V *r(sG,!9W[9(/C{Lx y77$Rw]˒\͛js1 Mv"Ctu4ykm"m HR9FY4\j XssgCN,M6J66I{@:q|CM ݒY&<] u%#!@w\l J~Aary?W]u;v>lvOL9Kow^4j {aD^ە|T1Om+MLeZ$RHkkJ~}-BcBuz4vJIj 졤I8t%Xsn7޲!Y wޗO|"eHUpC5%+>Z8ڸ)ﵝÄCFݒU$&y'ڪPL :ahC8bDĒK&KXtK*&PWq;}| ܎[,^Z233yog $8nA^z%7o^yNނ[F999{956V2y T"^ qMKF,PBrå NoQ\'\S |+KH8 Xf@As\S QS%UA9"cXZ^L Jm~pyfZ,,DE$~,X5_**|gNJlݰE6 YFZ7ZQV%"~rJ_~e x]%"Mͱrؐeo -ZQ`œ8MZ`]w!_| 2Dzmisr/C4+ݻw{G."ζDe˖YkMHZʞ$V:a,6l᪪*Ugky`ҥɚ5klI8jjBHk.Y$7#`Ǖ+W07⨠3شiw 8GuǶ^X=///^ la6\m:NWi@ț<!ہY .@ܼP[ɍ46@=Vd%ӗj>_듲4P (S2qv|ђSˑ:B[ f| |0qr_'u6&Shpʴk-v!2$3fH0,ZkE@k-ךwPO&\b_2kV M9/;W 's-eՂ6qҢ3op)Z) fWQ_-,[LkgY2Y>S* !R^jyIy2sL d$kQ=r?Jʊ2~aҙ3ul]ErrdE2ctKdr8I^ْҬ) $?#O/_grfˤ/&Ɋ%?3OYT"y3$qiFܼsAs\sS̳88w.50kL&6ΤOVMe7_M!Ifg~ϚT/YiX~i AL߮l}c<+Cx}7y]_ʵy˜&7dA=uւ#^a=єGhN7K)kf|f,YHk+ X 3ΰqŲpBoߖh;F Ccm'9j(;"Y`>nݺ{UEI'ѫW/Ä|ς믿ޒT9 0Ιm IDAT@>J HȺ<> W%ˈ#l2 J\Gt"Z$~;{:pҡ:qD4i CD~̱JABkSXjFA@ Nu_m%Ǝ+3L'x'Vbx!A-C3yGNJ~fy%2R[mU= K6Hh 7܆VIzHfrEd+ɷs+/uĄW\%Uʨ#ORb:{^Zя{,#|.30XƁf7d!!M;A}+ l*/?%D5 lœfqOn}Dq'q޵& ȦiIKϾ( 11|Cn=&9&9຿|ckgҷ`)*6ę+/ٔ&jd0nH0jW{ZI5/X-oL6yWvsjK/.[d l :†W|7$ۼ]S͠kogY$T޵pjC֦>'M4 2 2嵞IVA=h 9i465ZO>o6M?׿Ym@O?mJ ^ P  qd?{6#Q 1:Q䨃30{,yHuH-CZV%5F ª_[$gmҭDKX}nnAֈ/Fi*ᙊ N1j/EU,vNvS̩:9låfJ\7:9 2x ٜ-9RS)VM:H!j2/j%J#ujEJ_% #5 5Ȱ g ܪ_C\8Y%p]kAܐ6HZI3iL& 33o>/IF:4UƜ#* SYFe٪U b-7ť/*Z?<}5T%M,׆w}wcB%JPQTT| DQ,xT$K\r%M{sΡ:L꭮ٝe٫{+wO9O;.O!> #}Kl54@CqTVbyٱD4t\4K엿%k/P %es=e pvַ%]fbL""{+kuNgVL 76alh=gͽ~N[j?Fs'F  k|Q i)+U%Fk upUݩ5#Kw ^k̮By5wUM"tR=و5PT%`fY3ۖQqhR@0@WD$uELd}k{ѿ_οiXvf,] E\k, #*c &4 ,cɏLP2a;e,jOǪU6Y;2svAԾ16#D4<,c͌=fO @6lXuΕN  Uɏװj8aIK-ɞV{9UKgߗB% HWU)PS$XTe,o%"W " &ɲʄAkO4S@#Xc΁ .%1ɲhLM^}12Ў3+xr`|?|C|Կ3 xZERЁ&[eqsFω=2S?{ArJagί&)٧x%`^%xo.Co;t~[?V_c?;\w 2V } )l@W0})8|9 Te!LO\w43 ZO~_vtLs='&3;L7U,&6^{jp֓wjgӜKJ\2YG__?펏^Qs}Ge3(dO4M'@d (wZoOr[b`k$0i,/`IMe @վZƷ r&UɫW#qG@vesl `H&nYxZ^No1o:\Vnڊ`@)O 8[ige ]~۞;"^ xuE lHz z2+9$̋Z&WiBYSuY«C h˃Р@f˓($mt輚Xh⨣2*s6g@L  ݮH` ?{4PY5Q  ooa$'uu2Z K|ώ gUd,WnZMS6h0Ror=zGdʨT2b7.Ynm+L ۻЭmi}p{3 dh6p9gb7Pr=W@ tS3sZ$ͻYKM'$ul1뵪 lۓ<ٶ3ӔY<=e:CCVg c$w^Sorv!X~k̜IBAST۱pp"ʘι*7QSF'-3g~G[P~<N8 :zHhEh#Y4( LCqݕ>- 3Nb ,W]9h2D .rlAmB@Eh _uVfsMkx[8Ӑo<`I) rH_|+/+2bC:K%n];<9i4 }o>PJQoM)-,]tQ"R3{ rƏ\,T8L8-h:z0j_ևrw 80=95$ | bpDTm ɪs`*A裏neX3-T3OT-@x%cwީT)`ݳ!0#H: d3I&U6nuVx֧'% ޗ,ϹTj~1zQ2OoADAh|-$m%8Pl-=>%dg;M/C#/_MXVNx H狁×39j237'c:ϦX~ɶc̦؝$-hS C pecHs1f2QmH~FF_43ޏW D!o(8CA>u ֙٧d@Q!q~ {RUdB[v26Tj  1xy[;3JS\bM X5hv MRhj1[p8Se[tm1(4܇@)㧔6צb_u *&hRgZﯡc1lj?)o=s{g5bidZd5 _C݃^0P٧{ނn Yn.<0@tZLOh!D2B*FvtY4e\қbs@ H|rJia ]vw,=rrG %K7JN@}RR(VjSIDc?kX?I&6.&33W 6Fs#f3قt5u[?N;qX`b'mFs?"Evhe+RvB=v]<6 ȊJ5LBk:}10b " Ϡ@C$mj9`2p&V W&䌌aR!,HT%&XVWP<cy2 tGcAoo/^~eq,WvzO3-TL[^XmojPU{}~/Og$Nz|jFlSN7pFdj- 'W /)YhPð`\)\6ա2Pw^\`^mZЉ_]`aⱜ۠xZ/y2'_dO@ @?F p0!. IY)Jw('JVJW EД Nw!0x1nޓ'—e|2 /ҥKw:Y3vg|[9SvwࡇÅX KoByo,9Ekn)ú;e}<9^egVH/7M3s fc>b,4UV۾>D6QI'8 ]3#R*7l;&T _|Aw4\ ( œ1P+xfX2)sDA12Á$|Fܷ'{ 4D9(G2I `;:)Y)Y񷒅ol q-&xJ|@o%%|z8X\XX*$pRɇ 4KiKQ7Q,Ld 4 ݌f=VHulA#k[_};b@4o]`Z UuQ 6<>G ۵Zn{n/momKxJN(W6dV\'d!< t<)Q|gnM=$sͭ`" 0 T 0LX m& }r0gLz3j c@D#afttCHDrBO)$"u cu=WjQFs WҍL\[0 _,38hve2SDžt}?d0W(xr~k gbjq |p!yx?>)`4]X:ۯ-a@{qZXFS(Q|MY}culmV"dM* `\qekvN䞵WDU^^R~AqBu<]㪏z"ΐζ6N6)ݷ̤M93$C.ZA >#QLݕ3QFI=A;JNN '7g,J0B9Z DF#U@ܲ|mрa+ׯ9` u]ě W~?푠㕂PlLl=~60x5<+d~Dod"A*j}Uk*܆9Q:L9]\n 2Q/>YRL AK%=Y@Y'ey=쩧`4Z'YuؔLqϼ/rFL> W$O4m$]T2Фw(!~! h@ 3```d?Od&vlQC^K5 r#qì۴lFj.]{uXв-g<vܡ[eP™{dԯ::ȵJLW"xZ&L J2)~?Xǯ8awaw{`Z#Вlj؞LU`>>`ҍYMe,#l0]٧] IH*jC~yQhc @zU/6CE$1@o-O IDAT`~SQDC2 Lʬm܉ Ty,cj H\Im8hI<{y)I\P(.qM9yMVR)݂f-cao'|Cꪫھ3!|Y]aƑ0\9oׇl5K ȚLqɥe ZDb]M(₳c??FV8uWr|X  g_@:YdA]֏]! h4Sޤ]b_ 3DIlcn #8Bv̙g٩}u:R]31o{e;uym h}Jbl4͚1VaWqq5|}5Q t i&`nUuWU܃3~4OĀ^n{|g~&;]Ҿ <7b?1  z gc ~%2VTx}q%3er; ٰX`ƈqn UqUM:|=F: @ʿeo`͘/jwՓīlgp*%ݍ!)/8!oCaY@x\Vw}])c5>s2j'+D2# mj&A=7,s@9 (%()]zvOvvtL xVg?Y7.٦alfmMvzIC:83r jErk3؟[öWqҒlxM;g*A+y1po 1MS佯܋6kʰ &+?Uؿ~. G}|9J]#i=UF% *pk0)ݛX~f&X3 #E#ejbXW8-XwjemРG{P]R"na~oH;#̔ne]Own;iP6ٙˌxNCcEg']k-kRHՔ` DAõ CDVkd@=G/Gv HRctu6ř󷖍O )y}!do;xz2QKQ@$eE[ OtъWmAِYpZ?d,!A;f"fґSO\oFǁX,cz΀.^#75>p|v5'vf3 D˺ZbRXnαfVލoDsmիeFKc8HfLIe<x>~|r~k gbj8 r~ ֘:6ף@Ğ3̠%ES34JPs H9HMl$y*5,G  fsX/&kN 6gN偡b91k, H`e=QDE| G*!IG7(\*(!![ES_CRXvZ:.zכM53Y)BS2D(`e~%,r@F&vakdI}݇zlm1h6bVTaR v-*Q;{\Okoe~[!X4ʋ4ۣTL˅k0ٺp[v@@:[@0_D?rV t63q}:U}::opddN<,?s:1ɓ[M˞̺l?e*So~!*DVJuV6hK+qړvbN*8qmK=D]Qlxv3Hx&`Z]Ok<.Z+T,6ɾ:}N:`kaG8_2wq]W~Xu!PhXכG$Uਤt՗mˤ},j\m(HUJ^<6n[@6Φmқ@e2Ф %") k¡&18!=a}?DY28n@Qy2D,\nSU駟ƃ>hfvtz% LmmLL۲e6P[ϛߏvy Y^iӆeƌwӳg礫XtLq`f2жl5ǧ@|g_G"Cߠ'FS)(EabRw|@-6q咛p-w Sj lQ| z̋ EۗşYYZDٺސLTK_5/ 0k@C:zg5rviOlD"&'Su *"+r9rT*w輛j&~L܃:H&:t,sь|lgjϋ.NR,^-Jy߇VbuZJzϮ{x{➗-(.yb|θ+椐Fr2dX֑h X5j;3p-]չey} &9w(.C)"3ϛ<Ng7im$K _;ud6̘(p𹽈Er`uK.+{^0-wFmX0Ѐ0SDaܵrf⦋u shi) A)&@c}'uMcBON0J/Yʼ<JNքB<>tg׉cㇳMDAW!߇g@ ݔhZoXj8/ƺ82J o2AfcJLnTzzzbPt m1Fe|zM'7;ozZ]EZl2{3Ok%xƁo{ ?]S8(Dca`嵸ˑflhВ CujZYZ@δKtfutם1; KJ'ء:`\F`%#RLMoN&$P1XF֍z;  PvC Q(mǕPD&hPNuqW~H!b\} UY XhZJ|ޅ7o!fwuِOqf 5m J.MT&.p`ް2Cjl `c)gsad-YDfε-&*M,H$"]^RgjÚuXRGs_Kq0p_R55j!+x2֭b?ಈ'^^zEFU_J;*AHtUUi6+v91Ήܶje >j\Úp̕0䈢']q5Y)Ru]+ٴ\'MʇZ(ihkD1,+m"ﱡ-h(,mK9jeM˲,)x=%B3&3g\҅K?>ttL1P].}KAfiBDž;=SʆJqk gbob0}&m`]x>=;2*%LThtH, C ٲG窵XU}&' 'p" Izҵl (cn]f"?"$!5zT?ӤJΐ+o,~^qӍ}mXde6 eL5:p`gQ+7! U BA@\07z F(xm(e°3E)*s3Omr5TqAbJN`e=J7.ݯ d: nΣY9q_fLD5NQǦcrwy0Ў7uOSZՙg.`eh[Pf[T%4WZ '糓ޕCW$pϬ~FO2OK)ch(&v|\!TCzR<am0q9٦7d4Vw=W$8d(ExOZ`.A&6 @DŘ^)$_)k@P ȅkM._k&Rz+U2ǵ8{gWbu$fc.\R<:jU~SN9E3ugj_]..29]31OK/-N;>Jq rI1wJgZHQYb8+dw'?xdO~Jjp-;|X &7&p_Y2N=TZ 7hvueJϙ%+t0Cn_]7 1.B+۶G 9zݧ&z:)DP#3D/DII&/@6LfUnM.ΒNUJz>`A2%jH pit:mnFwu*ozfP]S>0@É<*9@AątGx> m>9IYc:dj da _RƐclGݡ XH>KT&\]~,>|ɇUܶyʸ]IwuRIYߊ{wqHq% «{Zh)^/W% iae,L;^ CЂPvWMm[2P~8.8q1xdk-fzxbI b(B@dݐv7^:AVF"s"SR`JF CufDxhQb!{˸'qt@@ЅkWԥ-~_v& @L@9O@ IDATe"&rŬ]VJ~@;3qꩧ⥗^jd6H#MR7>(OTk8b?B_?A}"O8- Q_`ճa貥-Aw;n^y,QI{SUi+cLU4e;wL,5ꋢO0w'ݹnZKDž@$X ! Ҝؖ,@֪;i}D K׬S7#uէ𝛿>[ApQ Ye AﵐcO^(:PUzB!.7cX]Ph OXLW ǰX_Ko13tCby@JW/ڒ% D&˿ [2pVFl %$_Yh|,ʄ:dii]\ϼ Aϟo"5ŀ]FXKB(l5 vDw5^le՜p&Rh}siqRY<V QcIE( b 49YX [eT!.w8\Ս/T {y~5iԯ =!..\ 1@Q-IWQc^jmM-'Z@iꆠόx ;@xf8 mկ~U 0<xdDS'e3JM*$ |.~.*ze-~G_C?7:TKק ס?~}jLm#' s]BaiF~ZqTW~Zq~uCXn'zŨ{GT8'U:pb@cИ#&_ )`΄CcSw_n|/'9g( 8D֛E-Vyg[jX7طP) KZ_|o;SvO!- Vv$8ANk$_ 1нF+hM;a 8DdCٲ =9 }BjR2Rsb&`mmב˟`0,'beds5N:&m ySJS\Gq_s:cwϼ6'&fsoUGX% MhId G>@%&y (*tߎ=L`L4r4*_~X0Q 51^8 >ov H72?+W fĵLI ,+ u> %Fe_V^WaqdIs ("[| )s;Ɵ nې |>|ٟ->y'7vg]!ӏC&FK8wO ;x_G1[w/9HZ|uQ(`t`k!\ũge`[-^˗/T65o!癰 xoP2~66*V_N3{ (^XXi_Ok=b}_B̧^c\HB\}:4q^hj:`=K7-Yr-*.s XhJ#&$1O4&9qdM epJ}X{V ʅȇz:.`)ORdPA(虅Xry(=c Fu7furϦjO|B{Y9Qn~s%lod )h *Y|fQJr~>̘QOճc/z"w #4FjZ ~tn=IAltiagHwH:39/^?J^RLɖzNeDZ"b b=eY\({NX \"$Xq jVb9 91Hx3roDun&c|Nfd&j"HpEro+㊼7ebsEݻVJ[ނ֒`ϱH -/gS.Vl)nl123P}I|TǪ!Ux^krYʑZ&] ]^x!q#:~{IJ6qƟ䉦tu18\An>m1d}K[[ FPl-ӳl[CZV J,(g ,Fxrx1mO3v6 %\ܜ,3,7j `~ZNC ^Ou̐Wd4Hfmʌ"g,D(4+u8+j2ۨ!w*ЁOMʅ;zYqљ.F?52ydlnfzQL~15O%-J1Nnf ome8]yQfԐ)ZOZXN#(a^{۝zz%(*69YjlwpkAOdbԿ΁7xv5};MEFͨ[1+r ňZQva[+}d-A1aG4҄90 m,TtDKfh{ugr=2'"9|[ !RٰP:.z`?bn 5jF駟>Soz`Pa)YJ kuF6%eu}V`@B\P T ><0^CI)ndSH;`}v RDͰ^ / * ^^2Nyd?)wЭakg ȂN3)gjJT&oPr-UmIyo?Ry|-5[]gcLfyO0-t6y256m$:gT.AS.1#ApT1P޻y.c-h1spe10TЭ.hS7bL{oxYd*`yy8eEg-Z"KW.ŗo2>zG뿆˟\v>q}5.(%At%"q ( @~l Z~zE(0 oxhn-͗yKK-A7Uаn\{cb|%ce";30mBz~SO=tD'H"ڜ1rH1_ qm@yJn񘔁; tj_Y\M ڂ 1O=6胏/X0gc(l "c{?}o ppo" K2b'f&-I% t *׮?>qFA_:RŬlFіy*rfJ|kx%ɚQG$$kXs⸳TBo6ԵKl uAw%K:_ p!'rd9݅֯&4TF fJ=Ћ9q X^k5+ +hh9$x2Im/>|*r,֭\7V?"KTT cErO '>zs \EsE^&b튢IyVW܊PUzO-ku1Pz<j֤XhI0Qԛ妮]fe]JT Ded6,si&ךݧg@#z@z[Ll"Im({LCƒT&xegS<ٮ]w o-va JL4-%TtնgR$>'(_|e\u_1h;@T0ТQ6rԠLY\h( ]5@r"F'ZDwqV(sS}.X Y"gS2W†7A3XC&kXv. l1ns؀mXPkaD9#Gp!Us:dYJ3ߌ/]*Q~Vᕕ/K/\~ػ W T&ߖFqˊ^Zj,WNd73dh0_ʧ tD47uRRmR *#@.b6> X6|3P[N-w0^ˢ&a#=Ukщm1(%E/Ȇ޿SҔeK_F晷6PQKEp \g)OP w;^yj(t nnC6V,tr -'~}vDYomHb{Tn< ܰ+L *H)E PnI'NbF]8a##nO%$ De壮] &[<JS I:L\,5U(+j 'ዧ7V r ӅptAťnCGwWnۦ:cL;Kxn5SQ(M8e?,o)җ%c>:!w;ȏQK<)P0E!AcC1B6`Wޠ[R)rjXZƁqH})G?xܜ3gZ|MuAKͧYoPe@dg\.\5F2@]}xiSwb╞pkw*J)Y@[LjuFF`tw{{n[Xg.OG=;5pډhd5$=麽ߍc&PO=ǚc 9~ i _;'CJ(^D.E>/_<L0V0scEZ%S aDwfKٖKu3o98!sMkoqSq&,T}Juh3ԁurTb{+;+ S1P.$9l1S"ROJ)|'{`AHϪOxv+.W=s,O9tE!v") +qu7^p[LY=GKj"~ e]&ܘ IDAT6"Sh2eC!M ;}lG,30T 5YgI Nf]]8S.rp. Z"[;T.[]-%"Uf@{D5g%Z{`]TID @%Ow#R w>oI~\f~GOI3bLj2߶z~8є&E3 :{wqH%ǧ&lvޅ5r~bVI &]ԲԄjAz @dA_ۦƢL)b>A1C7@dvґ V @Zڬ 4gԛUUebԵˎKѝdfM$bpFʉ T4:22mXF3J ENS39[u@tf ?{'YUm}azT@PEQ"9`BT`d4<08a`!LarX]+j}g[tuuߝusu>;;uȏ`V@7w$.fR\V|N}hhKUdIr6Xb}*} 6 Hic%VR)&Eb~x}N %{=H9Tli@v 3%4Ak/TAO,}}ZN5-0Й wZDw.= p['fT t|PkZr2-*/Cs*[ZYUa%g* 槽8}[UR+g֛E[ln< .{+{Z p(Iwm^V5Zz*vS1fD^3[% ( TRuȆp5ZEˆ +d^Jo* Flq=tc:Cg3Uӹ)2hu,SE#+ˮT>ʸ3ItB.JZcE[u*܁0lTf7v5ٴ*Ot\|c#3JM@N ZՉ갂k[WL[^E8b8K$@q,[ O,\,TTfm{of6Qխc](IDrG > P4 iAM}ߖv4lo֧݃hloĝݩWP%n<$h'Ťږ3k 5Z]}G4[XzuE7SuKl֫> S8H|hym p1Wf>DD ڟz˶m8NʍŌDvEܯL0&C@>xP.E#AKU_hJkB=ōW)|(s9LG25Fo8S߈H 62 ]YkSx;~L7kX <kc"Lo`}?ek$M_JǷM-)AyƇq⣴x[a6 m(+[xM+4CֵXcj#L( mNiDV)QNϹIWdTsƯS42hrTgvdW;l"`4"X{q@9v; h?ؚkB蜐[@OjM"geYؾuoai Ӷ#UjT% XjZL Y*ۤ'Y^ЙhlpҸ( dc+ ,mCa@ɨOG z gt.4մdH7K4i"xuN~NhQ|XFĐ4N_  !ܠ1SX2u 'Zur;Lu:S{VEj FYge87@e{6O*umoomݦϧ! |u:U-.8C(kME a8;گ3Җ*2Mi&$uEf01s=om[~gF3 n,[Oj[в>8SuTn\Hv6"t nFFsVilv[FBa YRz5ec$'CCVZypNsC!Q `c;^Pdgrl#TY @80{fxR>XSvT Wkd|at֖qT7+]ѬJs4` M D؈H m#9!@j|u)쳁/:Y#} `ƴ-w&R}&ܙ{ɠ',qZl| jC!IKO»z^ r$X}>bNiq| _YP(ljflڐhX@P,b& 8[P"%;muDw 9踱)T % Ԇ9rPeWO.ןCM{ _p&%AC,qz"{vdlK[[[ 1ڬ opK& n 5 0$ڵkǩL/R3NO,K\w(@9clfs@n\2 /X`Q6{xR ˧)wS<LqvR7_ߞ>|qVz5Q)%{&;}&xa'r 2zdcTzu0ejS[2sJ/T}Zx}J)eYZRoEΖH9>@&aX*vc1CEH&M ھHM.@VJ]i_SS'UҽSN?~8oJ9X6^b ИIשfKS z*ޏ/%ܼ& ;CV(Д`f C+XZj(pLQ}I5Mi ( l< fԠa8:;ӕERT]Y 9F *E7N9(Gp?*HgDMd^NؾdddTU[=$*bư̤R.#RS4@ 0;vuj5@sH֊F{t<#"٧:8Tmfh|V,ZHO!ͥ(bNzP=Is ˗ODm1VvoqՇc?V]ېdt%Fu쳘)^8n]x-nf垡z{c'R- jK@= F@:ٵL:DI}rD*Re=ej Z[hlh…O]<MܴΨ"<-U j(t]#6Ci/AM!3QKm;  LU)`dG΢e2~ک>o%#+}V xVHV8 Tbz d+ 4pT8?P10.`*@ǑR!Ց֒*$5 *) )dk쪟 +o<}[~WOI<~h{Muq5*ԟ1:'qi|)4zr pZhgQ^|ӞdMA1` &mv t|P 1,G,O<kOI?F [=~~r>l15)Oc+ގں:iQ[8MT9hv8k'idÚ\ˆ@ ( t!qhfQ7"-mmuDMT;N].&1 &%{^9"V4b @d:d>ԕVZGJU\߯ u|;w'/D֟BxzqGG >^NlhoB 7%NQ}7^]6oо2iŠA-&I0Ow'+ad Q˚~&@Le4UbL;(}>}>b5mץ~KȟtuUVXG7gI+gb~aCV1dխtR'uy8͠uIztţxgt ӥ`N5RDfiƫ-Eёª3 *w;&>Œ[{」wmx饗F\u1HTRP[=PC+zwE5$E*S P¥ WԈH\Eڙt|qO*Sg6]jH;7;u\ۄ+U On_t2L> Vf()=hyk'ҥ_+>M# VTm)h+Xu ٴOãSjy &aq IJjz1YR+ %pҐAʪp j<j OZ 72f9|U`=U uWu `ZH#xJ1Ƴ]c=]/lEivNvQ`tOX(,LtJ63@yҵ#Pi>TŒ7]҇Z4թ3ٞeŪ ;Vj%i9ڬ@d*ZP']el!@ Hf*ш ZjU^kCt؈K=F4ն=g%^51CGs5ޕlt0DOIImm%·C7&.}f'Z,Cq`2Y{0Ųq] K/- `Aո%f@v(a=26ĝ\W  iNWZv;F  zmf; ;Y4 1 &)c\.'N4L 7ٶ@@ ZFTpcqB*ܱ4m2bYv}߀o/ yz3}g=WVgNӐ pJ>Oa7}GA'mغY txICo"Ij 0Eu׺Fdz |tzhorNxH|RuCA+[QJԓԩƺkLiבǞ| ֬{}aAu;VPw"hX}Np`KIԳ Rs]wjp"Rg}/0*HK@@,PaW֣J}oi5[ NJDH)p 1µ#/j-5c˖!X ?/~},s;gTW@?6ؠ]W8-0"ʤ>y^ߪ&xt TQ]+)è%hs4\_Z^KQ>IQ1 j[n{O76p4{?\pNokމoy.Kb}RE43N"'}?tӥ'#Pz 1y#h`8D%(к*ڔ %-pND՝߁yT圓Ҙ@8ܔ[H_bNr{Pr@1P:aβ Wh&/qh FeeaBy28*\Q0*W61d[p?}$2 GCpLP(UpU ^&G8aTfafT){oUlڵA+&AbM3ZͪU#FOP!cclxҧˉԍ#::`Z,bLK IDAT$dJv*)O1B(R_1#FS *l,M c(@ {7YIC m T`f (vzQ wM+[mu DwRֵ:áEzQTHߣ@E=K!V0P WV%7P<ѧ p, Frsc U JNICrsN裁gyd|;]hR2qJ!aMWu͗ۃ=WD߳Ц#VNZ6:ip!,4:ѾOҮ&4niG{(3T,nZ t(oODE-)"nkkUcp"R~+Vվ2&. s 4?gRKfC[Lvk))ȍE 6Mv*{eg&bʣ ,pyd3yR:l%RIDK ohtZ0 ,GuYڒMy-Rh9<\zeumweaAѺ9Udn o @O KDCH8y#\SʁήKm);-#jmuڭuñkFZ:4xLf,moԟP?#37鵬m1j[*FD}D,&/#٥0Pc0(:EX-%n0e탆3#@[&`ze3Ъ.N'^}UDV h\yr3˘qNHĵdpPSgHinQG3Y 5;4sCУ3_ߎ#z귐z>ɏ_k1g-2—<1w CC{p`+ECn8unuS}76tZwG^$h #I@L љ,0ʤAThۊT_V]+id  FD O~򻙿,l~o?+cg}X k׮z2g~&u۾}{}yɁ>(OT8.} /0Сy _fbj]-8/Q<ޡn"1_yp.cT'Ni+\oI1.{ldTͶQ|e@gI_d (Ϟ򌷐4F}mm{ Š-w 8h2ՙԵlU+oxH>BH`q߀~yqе!'MF5H@j`9$C u;ҍ3/@z?\ujp[__]N -H( :u(ٍX.p)DJѕS)>Gb\N-ud.i@TUNƴA޻/D{[lG6MB&ýu~z˳\1D7# TJ\\pa9+\$>~M7i?̔.W" m FUcL'ءU8xH-տ\_N[6&{5 :" _#k{)}8>[хO\7__Xp=x=Xy:׷{GOPݨc/ڇ-pPPRK/Yxb^}Yt'h Ⱨ+C\M툦rxek Y2ZܵD@6oڭ:'bYElnܬVYllc._A{gN444vdu[R>qO,T)3sN}ޣV$l^+>0 Y݆ xWtS_ ٣b_C,M6ņ0G~'}IFIsLJXM,[>4,@W ߁zrLHURO|F0{Xadeq1[- B(b@=gtV;lii ~Y`a7o.ĄVu`]Y+i:(f֓ÿY|B߭E*_ S2lϱ U{oWejgTE Q|=M( ߐ%-)@2I ֓mGj#Ԙx [gU<^q+CӡjQ~;6Af8+Ĵ kbJ}JmIWghɧ?i}.щ'{Gv}ٱnDG8ms^xqqa_%wygIsmjr;vǷ69s1>ɴ( 7<:o\.9Vrpi߭ߠW/w|׌ =AXxt'JĚCHz嚛 pIێƢ .@æzx[p'3u {-Rl{G,@k6\xht׫@7._E7 :k`׭ڃXjzzl7^-kzqMWckܺm04ZxOӂ *yɁq-s[o/Ụ>9y=e2~衇,'fձmeb }c}}I&{キÕ zR8I>'ʔ /%P\{8)ɑ֪f=es.w"`)タ3![!lB`[oNg.XO~PؒwQnj8 h2 :O>AaD E< NKy}Px odgzjVKhu60MYT`a۲_R߀!'п%-)6I)\hHb]dıS 첛T[;qրa.EӸExu[]xZ!5}.Z`,U;6(R- UV\׉bhg?Y}. r&wZBpv˚Zbank)|7 !^ӯc}ҵg9 3wOI446S-.3M`Kpg&ρKV\o:Gs>v}%⤇O·:ߺ8ܹ]17# !Lۅ"s`^N]n5_T1>k(I# {!(:?e] WQc`gPb}VN|P`..ƴ*R}PT`s2ڂA ?[2DPuq!E .פTōܠt.I"2.{Fp@sl;; ՚X˶U$2a~83u;cFvЈ+IkfZټ3K?| 3w#{Cd@g,W嵥m8A|{dCj?}t|q'O`MoF :SK^o8St8`[ZׂvPzf B Y0x~l/CҕGX\aaC#\hhϢKcX?3 hN+cW鏼AvHf+egl33}QwW\= t@!j*zPA*AլgZрhQnsƥ 3p ̠!D>Զ.dBkkfGpHbذQ&2-1m#YTeP%@);kwȂP5o{UG-[jĮi3,Y)`-)U=sGůG{^xv) 4Ӆ@C 2bM.x[=:f-GPrtNܭn uO6EIki ̐2ZDY4v |o-U#_%j([POk** Ls\i.:$3/#jR ^\zRTךRt eV+4P<(jdvBj?!KI$r <Z2үi'VzTQK±?uq@@P,\Tڧ:9dOO 8>8y;pԍG7!#U(SyAWn܂o @L1R΂An'Y3ض:6l ܌UόY+U<=^7bMȄCݡeTߑ btQqEF#.jD$-iy*ћrŕ|uA:&@'LP*@U󢋀S&R׸OE@o/'i{gs@¥[l"Hɀ?*T+jFrLC 5"Cgg3nތ.Yi($R +li¦7M=hަF`P_D}[- }4Z3:5'ual!!XŅb.ԍn o|/ՙ۾RDJj9yԍn4 DY(ǟ[iյ@5'U * M]`|~r}*O/ S݉}o.A3_O"A{iMO1yg.Ψ/uk^WDYD<{c- gfh񤱳9RVFm9]d]}тit 6Ud,{ҍ.6LEn'W8}@ E 0P^X 0Sʢ"58Q` t$(cNdDd39"JnNmO\Ԧg<ѯԟ/A[ Zy۬aKՋs3<⁳ޭ3 s7!Vd2G+rrL=HAB 3iMkO~k%ۖE5Q)i ->I*P W(k %n5u~1{al(j39"@CCj}&Ӵ6"n<\F#tv< M;&UM;hwx5lUfG&ӭԋt؋#>[-mj Ҷ3 OSTVa-̔Nn QV *::$(pLkmlȬ,bVZ3a6O1;*.P|v47d{B3{~U`CB죕l4,k|%X:y5㤑P/ZjAPSf"A61,3^;[gН >KEH)0%-RV s@9x$N@"U *\_$DwMѦ[;@5v:'dWT=ےB}ʀś7er,ҧj8,OOw*[Td#[]C"DK-̽nAƝHEz\=Ow@&e4]X:;x_Qpޛs "_9SO7ѥgsrҼOi@24 0դA2k Q55k9 B_VsAt(`l2jѹZ7Հ)|TۺW|M^2 )*nl7e˅oQWۄ3153P*}ͽNФԍ@^{m1L(X;%XF-ASOwjEʯDc Ν ,;# +DO^SBΨAMvAҦ1. IDATzn*TѮ*b FZnM7"L ,B¥(P2P1)S zР_3д~MtmF,6C2--P1*2T}DJ,v)J|+C{ *aWꌷi-@m#R@K:-bq٥ IHǓ>OoWANC3L^/]~Ѫ$g[dβu! j5z=#~d-R7IM$&V"uoS3{նB/MI|>N6m]GDV#1H-3E17@@,HgP'6&{bOahD T.54GvX:GԞ Lu-^An:>V!}-HQ c o(HSo9>ӭ #<?]Qd}<ԶRR &}3\4Zk@9׉c;HubpU,3IQFD wH)Y;X!K ʕ¨tRuR<:Csya{ܗRϯϴއWߦ~㾇xk-R('邁P:ǩhae<+OZ1:U Ty&[g);EڷCp?>KM6k_p$Ђ/aR_Ld @FcHҏ]D ǵhGLhgXIF1PZ t uvcK]9~=看 u'i#et~|O7_" @aE$C6G&Vp>'m Ht'P}4 Yup(szB]K/-` &._\χI)U׾抽@ŭpԗ2jFd>~%k+ʲFoG@Ʃ!כjrn,36VH.X@:( wdG>}EuP}_:>t8:o}_?w"؞CHݨ6E4{+x➿ỿ{+־I?bIC i#]ZѺS6j/c%. UN [leJl\@gh&҈tMk5pbhl]}znt t0]~^t }NΎ0z }2 r(-\I$UO2hH+C?A_@S>qEsp ,lGg mۀѦHyZMEׅ8Q0Ȅ,eHZ)OEdvVJ@%剤=)aLI(ddT@y=),l F FD) =ZKZ 7ד6VH~8pW_vNއߍ\d)v5h1$;r1K=_O-|=s~~ck!+ !h,=0gRՆ:5 ` @F10xכUKn,sP X3"}*BȾR7J-'x@ų&+fGV_ @Ό$vcQl:w-Ps3sw ]'՛nhLv'w'D/_~ kZ ^KʚН76֬h,TSG 5nCWrT VZLmIɀ'ZΦT[%b(Iz}R7L%< )&jdk T3и p} tNHqϾǗ kjѩ8B̛@ܣWTqD]u 7n>ĭ?oybQ c4A5mLjMumL}Njفnwԃ'#Ia;\MbKykI= 1j\>\P:;bp#hj\U@%4@HviњGkϜ T1`UuZpkw} Mp{`0FO,'JPD5xFv۾]mjc`YmJQvq03;o!"f5kSMA}]./^CX=>-V@J-4U]w݌qY,P)󁒅v:1u #Ҋm&:pm:GD39[u7yװUw'-=zO䙋p#^=/苇 #.&Z][b.Q<ֿ~[!)-=^g]eÆ RMw4o$e.WV__kU%}ꖉ΢ uJhҞ+Bn6yDhDk蜐 3x ;׍@ wk6ߞ ~_{/|<~pO'W+t{#_G1P&V3P 8o0ͼ@_/`b-U dY4j,RO!kB7h|^: jF:#:="U&,<Ъa? qh!FG}q'W]! ie#yRnУ_ 0phؾ}>$Edn{ĵ(fncJڴڼVUR@FEe-[̺<3 "5Mj@ !`dLHe4uwOX~@@LRP֝B&{QōvN;ڑy4h#Ll8:yuӂ :\H#Ge'[kڂh Te;u%pRmr*"ucUV#{܋-}²rJ}^kD>+g,Y<[נ,Q"Z 4F׋Azh /LC@{,J* t=ݨy~Dd^=9IeR(R?:U$ұd.$}my SLӫߢ;m Qlԉ孕p͢@Iƕkb* )*UsaN \yv..mj6":C꼿 Zdȵ762ݕiØ턝ʗ ~u;#vǑB?FLQb*7bg"̍Aͦ 9A}~m "g)FDBd[GmhA$G\G #ѝq-T@{ԕ_~>91.ՁR*Ih>EZlq}^k2P)* g$Y4h{ai+޼hO3ЦT޴P}J8?OfsFFfc|=C}ӊ,FG68yP? ,gсAtv|Zնs4J.&)R`0m1|n0J۷@M)Ƴ. R]tZ,"2(KQ1Fg!=Nq[1Sy^aD444e+Rol[F-͢@&+dQ׭ lV>x@ZB^ 4qFCd-/[chUj&{WHbyU&)R7ܱc>ˌL7 ԍɴmGac0P/ a]ΖTfLR9@?G[ a0VW;9@S63bhU)ԕ'<>,I䥹\_i_χ%K\_?jתJD$s{fLe-~1UéG"@4Wځږ#wVPJbabK @-,qqFe!+?mM!xb4̓IdNP=P@'͘ h6EQLEnMNݣbE:Tvu1cYT6y(;|bd4)LDvVHIJ;{nd۲PI`J3.Z|Qlvt+f91/ϫR7Izo}y]VWe P?*JI o֮he(?kI$:|WV}ޑZff٘%)ЈhT2bh|PF g"uc궆}>X7j|h_2i:*۷Ҁ >sd̩p |5((0PvIʀƜ4&p'[*Pb42l|=db14k'n"%.(Sk39" @MȤnn{'ΦF&}D"JpDeԗlO2S T>R$'(''rK0P} VB}lrlW]u>9q͇ЅҾ 6Τ˔о=|I}^+ J$J4F.T ]W dH^ٌξNH+TlZbƫ5M,u>-R"Ίgo T",,b庚GFh46jo9  W3>UU$f#I>-R"qh%x:'umQjέdd&LG@+@ԏɖo}^mr*"u3v梘FSJݞz)a^*1u&*uAX̞'j0GbBdgG. @mZ%t'㮻>i9 ??g3*Ov1fL6nܨ}AWba׭[v1v7-K(jTŤ k*ǖ_{rAtt"ןC(s\/_ 3,0O=f-yαm6=wE%J0Po o}K_6-b|s4Dz+^OV?t3P`Ta?huuw!,h祡Y U#謁g :Ts]J[+*̮Biokkk1_--:{r]<ml[K c/+ۍig}9KrՐ4be #~㎛Sjw}^4P o|t{N8A[%S YX[tMkU-F1W*uI'imݦʚKkkF_JX_Wʖc^N~#}}ꫯơOzq?wl?^ʼn=U?Ou{ 1KW^w 7o^y|;{=a&L_Iڌ@U@Zjȥ>('>W@WWH̋B$CXJn2U$+mŲmLBKk/~EK>>q󨆉Him_5*~f0d+Gy6,<>яeSTul_ έjZ IX^f[N׉rWhpQLwy}Nc(R3'zF|k_K/?cߥ+ Pg*oW=Zr&5)p\ܹSU.ӫ72mlT+ ?K.w?|=mrK56TZ+z@Ks iQ@5S20H%(}#)c)ӯJy'R-zSv9Y'h@ W*Yo~xG /S>ſg>Jl9 Z+rOIZT ㉬ pwNQQ){`8~_sZTsUNF+Tk;K$d&Tk]}e jо"|_֋/| zKcrRf5c`?&rlW.DmK%P@@/}I7yf%YgKn1Q`[dln`BqaN¿3WMj|@me=C!cQ.\P1 2K, NF"2̠DҙI8ya뮻:BI8lod>`GvH` PNIg#X2A>%4z~)h`竈Nj|@mep{^EE*T:3>?A Tw~Tt ^T@!х|O"T0)dӘ|&@%$UP^'X\˽MQ; R_&e^>D"򙦣-7[&ӈɸT2"!ON . QF#rɰ @ܧ$dAU ň5Ty{w1}տdyGIE[`y}vJ@L-(1r3B ̎W$fy? Ԗ*6b$ Ađ}s:6xMK:ef cTϒd8&J>06-g db{LQ捆E40s"!( Ģ*`jX%mk|@meal& mmm-R.]&d`KR] 2 1H@ f aerM̼ &x$ )-Ci re/_r~ޖfDg Z]) 2\qL-%cH) &wʳ9պO76b-1D&r}}j-2d2|-7cX7޲LTwOl[lc2LJzXϛslj-2e2m"x tj'̩D{*`>j-2_6 3R0b?eswL pP@@ P4a\IENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/graph_8_ex1.png000066400000000000000000003116771153663664300240570ustar00rootroot00000000000000PNG  IHDR^5N pHYsaa?i IDATx}EI`Y" ,b @A%( HFHd$g.Wtnq?WtO 7/KP_|_|)//@}_|//@|_|ŗ/R_|_ >/KP_|_|)//@}_|Dᰣ`0H999 B}jCKa/'s~/.='_?"Tewa__|[_]D/B_~%}g_۝6l6mЦMee::mdddAc_lc%sΡvmڶկtU,k8Fϗq^þG=}vyms?m[Yc^uz]sMt^emC>sz"(51]>? oƍ)33Y>|8=1XZվ?9ݣ?^oߓ]`Gq_gcޢ{'̽Z|9<D iܸ1viԩS'jѢժU3Ϥu%k֬\^f;NJiiikJOR1g{Iu?1чAA%++)|MjٲSGG\$c]s5Fֿ;\Y}*K h֬Yk׮%K8uam}߉ѯ^H֭]+x ?8pzMwqٓ /QGEzsܮ] رs{KOO{wT;tyh̘1ԭ[7gI&9ڿ+;v d6\-B?S䚼D;o Dws/`?vmksL8ѹ;{ngj>J|I뮻CpHsq}ݎE@:\ٳ#w{իqz!9'}l| YayqK vرccuuE-[F?_|Y7xa_~9-Ծ}{ҥcsv{=XKkuo#G:/:`_Ǽ_n sW^ya@m<#G$0xu\WΝi۶mζSヒh+<\ZwFE+Vf͚93g}駑gxzqx=8ɓs9<(}DkםN hӦM饗^rEgqS<~p?8:Ap_~tꩧ:@C9gyTjU6m >*Tp@燿^/>3 O߾}c>Dp /!hꫯv$wlٲԵkW]XFyUV9CxP>}bA5;jAV kĻ{Rrm87>֭|PBa<[sF3,@\?:w˕W^^/_ 7V:ԢEw '2va:+[?,J:u8>k֬qX8{\ul̙3#CVXp |@VعGuYlsD&\t&LpLp aFB_3 `l' u@ s:3F:?ltTBB P 0:W6Lz:+t&5s :` 5lйqܾ}q9 f^eСCgƽFCkEǎx6`@28~с)KqXmK.JԸOk>[ O;+킕)Hx . ˸0k}`eǁ>K.g7 m ž0GGys^<'T ~`}V8Ǐwx&87ӧOիW;!Ç Lf6os ƇX!p0sK܎xn?+>K$vX ΝKrJ  /i `s[nu:Ss2!tUKc?*0s)P0Utlz~qB`JDǪ2!SO9 &N25a?|T`a-Rs.cp jPl޸O؝%ӳ:)hA`TƩL c|HT@y5L|*;Uӽ2PD6 ֫ gC<ǻzqEa|Q ̢:~o ,15}Ƃt%HЂ CcT Mp3P1& 8'o곁clu_9_".̝" f)щb7K gpY_`sa&7vNnfe0/ :qc>`؆/{t$!`\rQiǍqZ^B pt:=tq.th+VD (q=0hp>>(`q_XshX@'Ot90օq2`¤!@G?p8?ajD[jp\ΉqU>pU0.t]‡mRT0 , ֈ, ok }XDL0~h;H6`uJG}  )>ӫ z>A |(N(<1Ԁc F~OuXAALq |E?n _":`p׹, Ȱ fFt 蘽p,E sG'ht*I0/liIN&/t4UЙ(pi;S2ݦ`h`5Sa~2̹`x`7z?v'8N/hG6cu}=t`!0 (H׃{So[[ v{!0_.޾{?MlKq 6Nڡ |pa_8~SC x,a]g2 Of|)HA׆aLj`]`l2Կ!>bUwNjq:b{EX߉#>G%j2_ҵpm3ݞW$PJ/8ć$w|T,HHO|Al)뱯{> :0iw.9CAy"It=N¸/j ?wx\j~^?B-:ռl3 fi8|>ξi,L/-}^Y'n뼉ϾW/{鲚eaE2yz^Oۂ!u SD ˝ ɾ}&ֽE.nfF0Yu, )3YӥmY}2Ls[taȡ0Pj*eCLRXL#cpxC{:0W=싷# 7p⇃L-P c tmoRa_ 4Or*.ڝ ޠ=)Pڼ\ٛQnfWۨcQ(ReRƑX#_0JcHޯ4SzUlK"zP$W ȑvO9e}g֗d]g٧ԟ>v_f}j,C{Yer|?/?+8ow6E]e~QYٯ+>zͬw>z k;vk[ٷA۬mH71J~;e;dfin{~>:nn~X[`,_!XJlslk\7Frl3ۮbm,e\ǥO39_S*V Qqqښ7tQ @\楗^ԝw(qf$55&{3Z 6h/("hQ$^@p?29̤Z\BQJs܉7Nӟ1}ΣM|Y2r8#y1:_R2\?f9ޣ8fQ8wleR~er_ѣyR?b)v L| ok,*ʠUg/1) ,Ŗrw|~ /l'2U@Ud@_dq2O,eU)ׅ[%k4sd?5o (^m=~dz=+pK{rM~:T{NT2`kp#mh6rO~xVgk uF|X<#;Z`|X{ %`vl HcOf}Jڼ Pm‡Iy&<ˎr?]zJοO 4[p[jȀ|(%Y/Xb/aĭd$$D #~/_|5" RA u\CQ 5@)3(tNQ.ԃn' \7@PE.ePװ6XԯIz q4֪ nG1y}QneH˶}Ա"jY7 !.^חk)=p-M)^_~fX>u*^ٶH ^̠XmF P.pbdyuLg`*˘)d+Ty.?nc:ul[HJ[h`18g1cHkwd=Bf1/"k(}/YXFI{_K{d=7\΁cx?9[2Cن6H8H[nr|t{I[`H2t# j5D @7:h$)ЗSRhmN:RUQD]AjmN=m m+1Y`) tsa`JeH 2~P(bR-DQ?j?RWP+Wɑ\ύ)\;dwhk;M[628KX`&K9W ON}aӤ"m65rx1Ҧ3F֏86Vt<1)s"9,nREQVWup^γ*Q):wt( o3@/ Qe I ޷pĤx"C2Tu#v;`.lIZ:QJ/@{Ȁ'@n\v'\׵ `\\NᎸf0RgPYK{?ptS4S VA,e ?X:NK?PD:?{k<<^۾k)`}E@PSMmz?P + @of@._C_eekЌ .>#)8?$p[>F׈Rz M'+})d̷mvQ`ml]KYOg=^#EA֪d18^UUd{ʼ"X0KkIѢ,ڟ`͑z2Dyew ] 3dF)7R,7Yg]IN@|(@ ֩ގ@o30r዗KRRf0M).1תmzkf+K}‘,3<;P,U",`rYA(wt%G0 dZ<}xNxmnq]dHuyRbls9E4;~:&jpP<'- f;F@$[|Ct<&tco( _23~5 i@}IJ QSk! |Xfa7@QVqϺɀ&D'q$.fV:[aP5gfYA3i+p9HɁnAm]fX`bvZ˄y'QOmnkDQg~L_+)s:81 HB Oo۪24mM=l/IO;H:0JX?/Q y2f^xLx42':5 m*U2<{a 2d%e qb FcE#^fEpHRb[fWf-*8&߰< XEQX8R 0XP-Ndv rx ``0' `czfaՐ>C&_ʝ4P) 1 㹼&>DNf5"%^^ ݣ]q6L"1sfR̎fZ\c(vxP+@w%4's77j`q.0`Js* 9\@A)ċtc2D(CEK^ 4s] ?$לq\<6D $}):  `C`- $%>=j,be`33ġFtD[ bvRDL/'[nu:KFW{L,bd' U8ώ9CvdYg"@ͯ 7?IQF PتźRm)A5e|)clO,R0OȌjh F6`]<tЉ ӹ`at@}IJ MZdX kf1~:7Dh< Uoga͘hLܬ+$fp2j@&SNV Kx^6Iڞ)7liȵLU\a-zǛĝJiV֣d~7$_"V[9v8ɵ^4t8~ Śf  )>Mƌ`%̹} cXjVُ-_ /0 .d@NC'3沽@KRSRGOS=X0uX`e}7l̹Q2Yq|&e7۴DGa­OƑL$7Gus̶x*pObIZ5KusY] `pˤ^ =*CS3L|Ô$^ &\}s[j4OHھoeu++uv5|LZ@ \0ڇed@0U۩:~wxÜ6L-ﰾL&%1ѧ%Q;n>cƽ&KV%7. CQ+zkbe"ىyډe?r}H+2UH5waT:&U>}zLB!@ p~8m[U@;Әٱ #` 4?Ep*\2JʑޘTNFڇq%,.桳@ryB|q$%:zڃWܺl:H t29wsG92jf#xblK1(I`6S{n)wϤL0ua6@֭UJ$etuH2LTiQcϩt3xkNdH\& dēb_|T1d@v,/ZX1INmCP0PLt@N6ԗL;=HK差Qt~i`L(\k'zXB,ŝk/Mcfv)Z"~QMN݊ ط f}y0$ g@ռ4ˌ+\&ưWa09.cK433$rV '-,vbW'!ln01`L0` >Fp nJS)w ) o>p&Og1.rqt%wzP_t^1oRݿS];}Td- p<;`r!_dXMZ 4ċ>ch, 6^HCfܩ5V6 i 7I@%rO\sZKS5 W--=xڞ:OLq*}.ɤXh<լGoy`+,BbO;{"ƌ /Ů.e}q3R.K@Wsyo=l/IͤsNtR o-ۺ|Ls'<;o$+EՎ }A@R&̸aY%"f|qPͧD g󤌧BOauR@ԉ6jL2sz`C7hh2|8f>0O*Cp`sܟС9y1P/Xlu4RG&"/R FѤ^\u@16\`]} ~E]ɞh۞d۟T;KRbp3'+GSETJy-Y;пEz?~E?{}!saprC&ɂu&׌DWJ&x6e cЕ#<#a,a=ěc ƘvܼeɨAE@Tzb֙h7*v*X:2 ¹ްD)+?/.SLlq5D{y@*b" rW'f.WsKR1vJptTeF*>*:"ۘl?C0ϰJ`ԙY:>auYѐɑddUV- .0"ab>9 y= KuɡWw7'݇9,Iy* UL#eǼA-*Se\1а@.xz9d9c4|&x@ fHR üM v4EyyGu2s"*mф.~5\C0n}rޥKOm۶+rÇӽK<͞=Yibԗ$b}.:!N0i+j/A)o1( uxrߗIwRԛvû\KCTt +}0^A4DNej &eR-(Ʃb%%)Cr'B`amjraF r”ZJ_V=Y]m Ϣh)i'UEB8}.`%xxU ~ͷ41Xqy@ Aн8/… iРATN:u鬳΢_:hεoԗ1؝t N/XMe>C^ˤ~A4kwpt~G1׺ԎlcmU}GgZx%2 iV&ڼP0T88۰jNn^o~@v2*bR1`0bQ*hXKhR( f2 f3@nK[l tGꫯiӦ9uXy֬YC͚5-[KRbLtSwQnI3Q"r8ez.d/p8D/O3ߑ)ͲrzDE{٢Xu%%Nq[5PM嘩 7dN M{8bVZY^Ne}QHLI SkH[RϏ 7Y.i&xilLt)# 1d'z8W6~oQ+Q ;:.3С #ӎ],(So xN8 eee9 9cƌyԢE }k:p$/YT-tΜAttНT?w}By>z/a3a6Ӟ0N 86̳)3ͱ,(R+,mZ?l Bf?=n.yЖD͵]u@JI0SFP\W3Č0)KԾ"=N  KsL_2(;X-RK%2Cb_KȒhU߆41M#&\0Lx㍴uVߩQF|r&!>1l%MgSP7D_yiO*(:;aW8iz"]X`=6n0S2q``꥚eQ$@Str7 +\frzw .%cڍ^16#Uw: cf@G(T|˺t  '15'ٺuk3gS۷/u]m^xad|TCZ|@}I^6Ԗ+]q"|U7u|ȝꀐ|0ltl7&ReWnd8;7J$n/ܡI"w&zGsZ]`l"JƔ -?Z $ ђNeJ$ mI..ɠ܀+m#NEh'Qj?VΧ ^grI v  @D4h_855\ ю'נ=bÄcMСCi۶mԤI;믧:D̷ 7Kr0.|=]kٵY2 ts$;h+ NB6XLsF'Nɨ}5B=y;@Xt\q.ʏg+j::zV@@+k3ye9lFH`g8d:cԲ|LB?@^rNo9(y9 % ~`0Qw~y9,&%K/= 0NeL@*X+02}Teٷo͝;-[Fϧ?Y_dI>x->eeHw2qUZJOE>M _2j-N24&@}I^Roi_RM3 Tj~*Y&f6SL[d"#v]< ӳNe’;iLMBd2K;ƀ?ٱLphմۉsGȌ*01~*K,>hחIn/H/m0PTk{c(w :@H&\/'V܏ ٔJh *zBqʩpĚS Tlu3yԗ`5| 5tΊTiv* ûܩ$CkC6"E>5*ŀpcBעa,^h' -}#!Ht 3z㡋F )wE,(9s5`fMFKu{5UnE˳,W`p5z8I@w L&3QFTN* Z`› 2L3 z&@̷H7%)d]@< 3@})tԗ% '7QѹRi;>(bB1Jϰ,ϒHty3DQ Ю!By$O5ŬMܳ?}+Kz.宻K3. ŘQUκʁ@+bLAN&(0{)YDHRpq BWV fcd8NB+.uo2g8&"^&"fq].k$ @OCh!vDP_g &P[Ĩ *a6y=R^fRȰѾhvdLqPu*rg z[]*Bc⁨r> $j[̀h9=Rw 2wq ] TEd]I#̩s8a,ɂ! ? 0i1NPNP}_Dz?: 'syJb z<hP?$-KH',_M~Ie~MK%"C ݐɍ; Œ,EP4m̓z[Ȍf[ [;[Șqd<JS!STաNаi\`?Z   ʳ#n_KG,ʠ$Gpg<8dXh/Igi.d̾}$j`KE-Y뽴G P2G)1^I0 %v1cR=TJxQ/!xӐ: mh7b#& ec=˳kl@}zXP_`j?т^בeKÓ|:-N\JwR+PY`~aޢc)v9sAvdLbᐄR۫70 c_kub ?A*޽`p0Ev̝y=XщҚ;i8ל082@).s&#b3l<'"/!"/㗻D@Ĵd(6d%?9] gsyNb z:Y ~F">ӭP۴wD:+<~K-k=TtB&|[`PQ){ZC$co.z/qKV,C}V@3j… ^& lv5m 4^/@VfL XT]&.;$0Cajͧ IDAT̿8@2$6+e'3} Db'^0}n'h84RNt{P;e:d]v}󹬛Xu@h;3%>8 csӍnGcnx:K;˶RtJ;};WȄ=( (vλkЌ>6Ic.EհV9V (KewA P'Fi;QLF"MP#JHp>*v1Ix7Wu(fSB2csXΦ蜟`-Tq>a)[ ryQb ^is}zP_g {CpjH?P :=g>mUY,I~uLm&(ȫ{'*&1=wjN2R,#2FbmjM(  ܆dM ,EQzS?K֝IL&&C 3UF+$'hmśiBaI㕫jO"6 u3[;.O̸,C` |MΕW[w[9S-~$Blx[0^eli 9@}IZ`mX3E/@SKI?9T'C蔜tBJwڸNt3EܩL` !'Y`څc}(BW:)Ę(l/Fvս&TpnUƛ"n#& ޻MV02(P{X7 bnsn^Ɇ٭ ^r5=$o&I{0aﲾ WD_f}Yᅱ h0liz>=\LYTY ݬXZ4Oڡtjp ;Uسܺm:@)kC\X }[/ &{0nOڍL<һ0v5H#eܱןU TAEͥ~c\/3!M޻tQ/&@ DcX -)[)Ri O`^ 8* *}@㍇ t;r|?2&^=E{8Zha,`Hw-h3.'`H;]@}׏^猁vnEHC:&\:8 -&N97=ٹns-w+g (pg!^_ )~3Tv9Ql( &(lE[%0䋱ӫ%cuo$@3ky)p 9O07D ɞ;Y-; &Dj~&벭}Ի؝AfhsWiEb\ N"1c@v"R D}d̻^,pB&6.o,/aHw#hK.[%Pli }@cLsժU3Pr۶mݻwS.]{1r3_ L7.ԇ Jm#jN4Τyp֦LFJo#4X :;[.-HK<|^$SB{Q4A[T5~L|nz~i)p+^UHa꽔((/=VJ(&O] 8YqImL 7#C1Q)wORN`dkOzih0їv@@¯\^X0f4_<, ?>}ǴrJڵ+iqk׎y9s&իW,X`ӂ>=˃S=Agӂ8YL4,48r}!*1 =bwjS .Ìa;ȣ;i dd1CY6;q=bʝ4ׇ~5뗬ȺoX6?}P%2㧏pg[aKd ȻD0 É9?)u1 zEX(:빟35b2Ru|Rv`h#8]&%J6Z`Up5) vyzzw\evmJ.r_uUsdzFmֲLV#D1=3^aX~L=ՙ~@尰}?Y #@eE_Xu4WM0T5~'0V:Nu*m ={H E;@oƄ}xiLG&oF4h-_7nw}nvg`2Bt 骹]qg\J3б^ZfTèvO:qtT~F*;P`J d'٬q9o{w$~n%wz|`,`7;!}Qvߍ ?@X>5f@b͸ï72Z;+M{W!t>w܍Эp`-|ոSMb*|՗0RXcƶJ14ly,?ۨ׀^ MM2TZ%q?F|Uv)??#?@WUwQnm.񜈧C@qai_Z`aTaX[s%YYd`d\ft\ Bp//'"0P乽-L5؎ti ڝi;{ljժ]r%bŊ9~7m۶Խ{SA4USnN}Ώe;ofkM&3#ЉdjϦc>M5pߡg SrQ5sP; Nd̖rgcvjOo厱">% _$M#@|3tkxb iw*"g.ٔ f=5n>Upg&={#cpLri/mĢΠqOf^̤U< 2SU-s*LSIem t徎h9[c$c0[y~hKߪ y$QlI!:$g,r>YF„ER0X-z,]'yHc72a+!\/\`}̘(p/eWb(r>z+k=(' ;ƍ .M活uVjٲ%-\Y^vm:}M,>E:G{od}jj*]tE/8`|Sb @Z?߆p+Oͦs7Ci_\_̬s:>s9UHJ!*e?lN x;s+RI܉Nu|l֏! ȰJ[ !\Ch(L#$z*X)}3dhٯ{JÔ s0<|ً1Q F]'/chۄ󙶔}Ӯ갤HQ:?N30̼W4ͤ4lpBRB :9xN.yռu2]2Fy{iT,ˑx&ܠՄ㦨gJ=K@ hu 6ۄ @Iѐ/9wl w1r~G@?z;w&Н w06P'h>֭[GO?n B=Y&%eG"Ec=F;w_|q15k0n<1 œ-ʏZѭioRQT/8ʼnu5řzT#kU޿lLGlCEj=w|Rʼn(=D)\Pf4=GǢTp _8[^mAq*"X*o{ #Rf톚2Yax[ 5'6 %яXAӽf"jDszpKGz0D @kQb:h}V6O73 +\lBH'N ߅ "~kQxS}Dhc )ҾVYRtRGfSn>`w o+Lm9z^KQO`͈.̽DdT#lqNSu^zUBsŨzd/sV.+Gff0*ZH0۝8h^( .^يȍ;yā"|g|8>2)lTfɯ ^&MhN-rx#^/Ll¼"2K.iV;upHJOFtĶ=9U4-LV{;]S` ΅X˳`e2I[G>swvaVws X[d+KKaxjh?ьPӵ+z!ꙝ{-Y6R;!DKM#L~.syTw9fc)Bkz2ɕHBcJ,t-(+nr-]@-{V<}L.]I&tk>P/\_8f%.<ڐg@j*C(|tOz؉b믧5kW\Ao6X(A> p@}IZڱ9uJ wrᶢT~2p@ 0:Zh]T}5ts`V5t5*u(\' xVꥣ`;9_a;en QoJ֤|=ͺJkpHzFi-9d̩ g$w~'O0E;qEGSD@lTb4-P^0b )^ѫ-reZv #E <' ]jT8hc2>Snb vLqNf/\!lv;w:g/II׌^>ph()]`B:%g BGZj.֝tvV.ؾnT۸CƼ1Øz7dH]U̿G]EBLJx 4DtH0SYS[sL <|_}Wd;X 0븪ƣz%Z7nv$H=E8mAQ#W*R,\3=5B\5=䛫E\c -(!1 -O8!eqgJl oܑND lj 3`}|*);]Ye۶P_M&F@:L tm­\L'e-c SjMYoE63͝yx}0 ݔkul0ZmBa:sPnw>eq@rdY&`S(tQ0OLm0ǀCܙ>?˰:?~:Xϑa8}d&%UKplzR$߇yxG7tAuBjsU3;/VD6zn(830m ZsX\G%/w4h ~'R֑ U]e,TbBm|ںpL@1 KoЧaMgRSSeQfi^M|%iq3{4g:3hkx:~v@LEg0*5L\zR2:1s9\A'dj evm3nNy>wVcQ`W yYWuӵ\.e:i8%H7$Dޭn0: ;;۷2u, XAI4i~ogal &]7j.[egQutX^+I2/I%-d?o)Oi71_Z;lDZ+&^J˷=ـi%~{TAnQ̋Y^:Q;=BVBK&ڂ q%gz3ЌB|%>=eB[i0]Mé hD{!Msi uB[B)0O(@ꁵhb|̝rq*ڜeD7fD{wffyFg32hcLfаqX: eL?#3}޴ ep׺q^nj;0\rGhNj\^p Vq I}  IDAT3Xkg:&wb|4ZpSx.ib%CTd|`khC%>MeD}>khD1+i:.Lq& BOZ$W8gf Tl>*t%(0e!vd3>ӣ)=֤ gUf4qwAsw#E^7'8#a,P,d;V>lƣh%/^J{-DDjKu9t)MtLT k 1Ftvtw[wQAJ? e 4=>7͹Q間Qո Qb؋|i u씢fݼTE+?@ ȶ9ح`jEF%8] HRLE Z9Ο>2`5;j "!0 lTڡ2yOv?IW:&5JZ^% zɢ)kGM~f5)?3uxSab ,c@5c(1{L5"h?>=\/Izvn9ԓ0huWnT$Wqsh6NE!R';R:!c%UO]8UK]Zǜ `-k yRvd ThZ, l9mJ֍VqS Q6Op! \ XĜ~GYWb^ ɰP[S|VۃbMZ<&@qg$OgM :) d.,L,QYf"p(bIKŘbU/@.\_0b@|thK.ԗE =Kχ 3ԝ ~ifĩ@E4%H#I\3릌hH̚ c N `qC6۱(? ::z<Ӱ.8)<~֯R*d Ei:*iL}v|+̿uv6JFuT7z+@ 6MFF^.\e-cep[IbQd0f) )یY7ex1:dic+585V @}IZ %]z6ifϳ>ǀˎIZq,"pT/ O B,P5nfBHGOMGCYtԶMNݣvo9ux"Ateڍص=wY+a*IgM{/ǢdA&)\>!O 5zeq6)04d2%atP:ЪnҐɤt4[vnw 0E>`dBLhR9&>\7[ñJ^6RY߿fwӮ&xk3ֆayI2fgBpu#L4L Ff ̻ J7t(*b;"QEz,{/ );;{ 5PBm;segv _}zߝ!g-~B7LJQ{$ZzV@+KuODߔ<"mahPXX(j`17؈+w˛;EŮ5qo3֣@yEK߂`BYc]Q}%(aZþ F_R(&ԧN/q^%^PGTErġcNJQxMPSL {Mϖڼz7XHZ<_abktxt<,ua>gB%@ t1RF/b8XiC}}TOi`;&L ܋Ro=O=LM2(6PC34ʼnsȞA:=w:Z 8VG08-G7&톁hG,[ EE`(,b\f 0CgcPe 9T2֢"vE(a"Itԗ4-)Lj1`M5*-vBpS^JG D=S o .6Ρ1jx)o+ځm2 3r($qOoʳM4d@f[e {N"}%_y٦q[ޗtS 9Vi76όSa_*>eꙩob->~M2@#"#B@!;к ;?Z 8U^įI_GtP \Tu Oh :1 F*T\2 0}Xw-(}|7e(W ZZ+DE/q_)0".4v-^ s`W0;JLk<nKWYieLe"l@{2wYnX3;c3¿D( ekQ< hӡ.o}Hwk tyMLJY%^~ss:wZr>}*BmRPWЧ!]MVpd 4GwDgBt&hKȞOCczt*hW+BbvcLNVXG:O17Nhu]J }J[`yzhwx4*T2}V8'=n[9Sn!\-굵DYemV>M3dk^ |ߵ}&*`?41/ Bjv ܎ÒRUgά4-m4?{jwLZ Z܁?U z6?*Gda*GlH 1Jcאbp~dB3~Cً@tpL {X^x:qkahb L: hG };`(8jcE[_b907F٤(ML<3FŨ4ߡB04I8+hϽ$x, 'L%}ǵd+gjQ=^Msϩi=N̳Lo?ZӺe|aȢ$_г[wb%͂8afdM oA>8{ಎޯ ZܡRʷ5e)WF*izW(;=v|6e@EE\@D $>T @=ƴ-CsN,kuߜPl o¨)(>Wr0Kޣr[LfUٌ—+}LS,GrH3Qr>T5}GdL%L=,Fmqق48˃WvpLܳ @6 Z .(Vow[`$ZaZW|+xQ(Dkc.5W2x5v(k5E2e0=qKKže<yEz3Гa@H=-0> jLKW}IHsһ^WvZcUoe u͋*u/K@N@O]zZSv3nm PYRgO>g/1  0E]h{^K }s# Rie[ /΁6_n4_SXO~*/OXj0-ʎb#Γ৘$r51a > }dJ( rŒ +6Sh.$˜+BWڊNW ixQ/2X >O-2^/WA}ZFoj F~[]B>RִyrC\Pں|րoόQz H/MPODeB ЎArq^Hޫ2L@iJjBqIusPG2 6!Ezl{O]ۉ  mhdFXdžxZzmB4R𢋈tPpY<;"B:F!\q:lpOdOn![eo# 5TLzO&̰^¢dk閚#UR;%x}8GׅHg, EE::2WnZS~Y+Wxߣ?ug }^(JS^(Po@ v-,3M "Jp|gsa_[ .Iͻa+ bMXJF &˃!~"ۋqOnocWD\Ը8 Cm,GuT-"jd9[\ vqS3FOx&& DaQ%K|׏S+&YCxj2M˷±P-o+NG-QfY)gi@jޅF^fz}}ՔHhg!nkn)ߏ3 Tgd!6Z,;ԟGDA֠'=U@4PӪ^PJ?Bι9m,@GvPɕ{9:Ц`V@+(}m־Σ,v/ . Uz?÷2=3OΜ2Q} 1R3PW9"GZGy{Q F{HJ4{e:'앒QQa5Q'"݌]VbqF~w٢r?{DTS]&ǬҞl7Wci)C,wzV.@_;KA-EC\a%4ևv?zQLdJJT%bm\0n~U%G_rrs?R" m,@{G.P5{FOɟ{M̞=&M­[1fڦLsyV+e"~չȏm)/a#)s=lSnjW,bڒ'+ "slԺjsP`RW~)Ȣ | #8gIX3R$6ړM;l}ǵqZ DȧeN󼪺%i=z!M0dG: ;Hա/}eT5p+?tno3Q.&y-CJV5.'>HFE+!@3@}k9m͛ps>-۱x_7F޼y}vq_)Iׁ3fxJ{42L$_w?5 qpUhBW@ϖշ r<M+q {G͈.A}TLD ӥk?4h0mjHx8+VbQ^EL&kyp"6zRݪI򱶓UZpw vFL@MC'5su8w]ncy8:_I;j֔.HBuvAU΁!b`)%L˔:gO|D9,[&OcNڟnxrs:^4cwez<ȑ#hժ L6Ms݁V@+Kpܬ7B|@9;]y];eX;Ux Wʐ!P 3c_oZB<.ksRΝr! ؿdP؁]xة̾ߩk8d,J<93#YbWE sE0oFĵa99G#khKMzYX{mT%E^Ȣ$N1U4( *@t.\* hD"]H+kr·zPf )}UQmN}A`+|.RSX /oNw R!js3jHΒI5K]\QۜjٌGqHeM)to ;ՒJ5$(tY5yB*%9Ox 9S[d˳ Ep_$(-v=,]_W+zu1I!IrݲWJ D4d;m&ñS|-Ja]1LtM/[up?ҁ DYMa5-[b̓~C,Z![VX*zwBl <9FLvh LP"`>Mʠ';Lv$ ]@wZd^j)]VxI{)s’% U@"J\4ֵW2N rN_aQ \UDܧ IDAT8{]x{D;B} 0QUD#Ȑۗ tJ0^ =w+A}<<…qhc#;t/fڼ{Y>@/ "2F2P9G֭aoF||>;*3Pj^YbPO%/XgRL  dBzPuL"WP^9â6Q'B)'Nߕ"r=31d1ttYLabا=˹Q!:_h6˝v0.kX D"u(2;>#`ʑe>i` rXw Z vyy+/Kp; / A}硾k Gfڼ,nϽ,P8( ws'W'I9Ef-UK114^\#vmS&()ApMaZj]ݯҽJP5+B . <0LsEgCM{fZ JHu r(h3ZZ@mbCZq=Hs'g8+543pJW@$og$Fwiz~쟾 h`eph :66%rݪj\G3҉h.Կ_oIG.B0O:Yo66b|[Qɵ͵^k"iLy2۴',?'"/ oJ1['Rn[WDk~tLkrf'l3{pM'NH(#@גe/]IŮ TM>.OiPoR~5Ϲ:z'qW697(;jc"ʰ)j0~&K enh+s2I7Nz!ez>NzeAD)ʬ2%%EܓqŏR~_ .]"BPM eՠhDi*¹A\iජME6[s6^7^`˛;PQGQνϻ7*Yw[WJ֕(N&[Xh8V$帐 | w39}q)/29hT;O/{e"xڮѕBHZgfͧe8SV![V) E𭶴0(ոvZ{Bz=V ʲ}aڞPal<%&Wd9{f2C g7I_ɔY .YDeǗ3vc+^:TB\s Zb8ůN."XW:a͆،K3/t>%vK;< uxxht(z5ryVt&}ۙH(\%{;W@Ԇ24T[=g!c1dfv}\;揉j'Ns2>u+*"_#:yP='?6-\ [k/ޥ6@MXtVP'/zj} TW$֤iH0vXf_k6(2A K0^W h_,$O|h ]ֻ>9dˌ3O0#,J^Zc2~0ku+kQ:~1Py+\%Wʖ5 Qy!$rRB{': 9oDdV!&'奿Bl{ }ளx 8 }8C%[E湷s[y2:̗2Go"\'L 2(rn3-y;s LS{>v&"QC L5Q @_%+> Bh. ܺ列][4QLihf(M%:nO -:&δVDt| @˙I}N! Vf \ke.<f-[Vz"g9WTfJ(-&%܇\J #oB(E!]SVBm^LM`[{ zJnL*Bk~NClC Ʋ9P}vY?r/xHFb󃑚C6{^<-$ ma_)ef5 8Y^ Jyw{ Iz̴*S@ K\@c~`j42de 3qLz&@Lr +'].pP_s&σ(<. eqRZ"B qC:먨e <1H;\Ѹ9d9٣Y\6 t~îc<<;>t/!PG[K>v!eɀ%e6*N ʺ\<~+ݩ 2@푇- U~j\B r UwKZ/86΁rJtY_d9\ISV/ ALKH(ӾF㹵P'Qu,@yB å=\!!4d+q~ ػa p=9\[Ke(P!5l@X 8uyj sI6{ToƂ AѴZZtNj no}vy/yCt%Km얭-i,_Ô4g o|>0w @@Nl33< D:V]46zRl \K2 <0srHj 2uP'PާP :9{V(=O&]H7…hBjfԤQ7[$ok_T*ǔ<>Vbƒm BPj{/ddc!p)m7:~?qQ[X!\/\\A)懒%io0@dgGvv$F@Ƥo| \thȁޫ+<ԾZtzCccJE,5k1e!Kv˓."L,^ P!z%J]^ yv'=1y]]sV1;'Ol#17F$_=(V쳰l^*0|rHHD? j"Xv.R`9ᬟNѾqM v}{@9d; Vv?!IuϴiSv EFUe/1hrY9򅕸6.0zҳ=o4OD a΁XҷXb߾}DGOJo?F˺DBЦk9|7;-K,M4`YA0D[ GK1lhUy D}TjAQa*c*:ulT)](FW3?^R!c(zm=&

    L{nga VˢKqᘳRZT⇉ }[5T{?YihI`MU 3-pjc--3H{*XGL=eV)oș-YHԌ~[3WQ{yH61d]B!2'K t\Ήx⒲kYaPQzOV@%O`pav:4iGzs @k[ FNʏ| ls: e!R"H-,LYǍcøw&|pK91œѮY<E)$@IH>)=ٳgDe1>,bY6mݙҰ{u◁Bv!e e}N)zDUQFͫRN^_#X.7VVhL|oȽ@͏Jh|W9]iŔm/_@0j6jȝH)ʽϧVс@N] UD&gG+G)m; p lih9f86mڠe˖>}:*VgϪ7 tm >f2^: ,0kO F-1Af|ovE'+̱_IԐ=ͿF ʌt|brJ OCgt%gI)l AْŚsQe=VNPǸRWLIc'P}%R$;poqA!HƟ!fzU( !n[N>'͛U} z-(Xy7 ᒏuN4D$$ɞP=薅F?=lvm=LpKX[ǀ"+VB9ˣ˸+owN,0Sy~sSz? Hsd?s?@Q_4vFr97=d.x۩ԹvjڪQ+fZcCzͲt rG~ȝDD@x@4Y!'AV Ch-po$=w))W8tZtca8\O8* tn 'COi' 6OױEy2O <"cJEbz<$Uh"yp/?R\7$3=H,+gڛ[;zM="$pvA@x\{E鶧Ƕex+-+v:A!^_Wڜ~V kGϫLBgVg=]vB 4!0N׮ 9]"G+eh׮"##QV-5 ǏGժUx_|FX:Áٳsa/0zF\uǡ< {\o`iyq2 /Edh5Bz~Cw?wg ë?AVMnhNL(?1ѹ>?w~jc=^XMx?^ZZU(8 m/6Y|#ki Q AmԔJOD.=o(ڇȕKGtsM0 F@3d99%\(ry pb4rF"]įl#f}(N`"At1OssV1OvaܘB~Y@(8 |{A< % NN/ ZBAnn:׉ܨ=\(O~1Krw^$NԜ^Ǽ`k3eW6+&d$=dm74)0chd́H_:U(jq幖=I.u\$H43.Rը*=. M^鞝K}~VLkk,O',]7/yރwBL"'qt1~; p h!~6 7ۢE|Ν;Qre9sF\.Kz)+pGGo",!7“7Mɋ|ó&ΏcB8:`ɚ" HI=~AWScͅHCсj7F;.@A"[JIKioaʛ;QpDIw=ex9cG -w)@0ϓ]=#Q6q؆1z|NźI2$Ŕ8˅EfAWs:DGRL>#F>ҩ*P0)a`WaZ_a@uiR{mSPu uuP[.<%?Um@?!Fp#3~WDvѝxxޣ:իʟuE>}PF ܼyS>t#.Ң8}@䁬aYqYI>:6;bs>;"bõG,%,f9lLyK0Ǭi}r{ 6z3= uE?gW 0J7`)=HLz .MS8:E5}c.jz\2u9Șw]Exvx;dB-(dBv7vy;c:^ޔ^0u\ko0dG %E~CP`$(^*#'pQ/ IDAT[MpGqC9o]}bh{QDckU# /ZGJ[g.'X縚\$& S{;3飭U&#X!uV>Zw UlM:ֳ׊ܯYRLtz*d3-j`ٛjsGD^CvP*%[`HrYob < RFB=u)Kc.,q~C Eޣ٘.PLü){RG#t@XFEWr dDB-={L>73 wFA!p 3M璈 vD_-;{7H'6/;0?N z@6(ˇŒ)ˆ84)AtVbY ZzE In2'?d\}ShOJ&bw~Swjiu٨휁<Ԝ#zP޲ԏk= yHw-@ÿeWy2=h Tn7qF$@e^nG"NŴ;ڥtgyOj-{!jHϲ%bg}8,W 3TQCs`\*[Yt{K?85hS}Oߩm4T ._uE @ea(`6<= v?Kȇ @c"㐐 4ݺuÕ+Wık׮T=0bKW@rg)?q[@ 7f3$xF)%ς[r8Boxs.Rdf5`جA0F}'8`tdyhoBGtWxy*7'n;Q͌t|2\e|>sM x]4H:z̞kb*a^FY+_vm8tGuQef3EjIJrAhy !~d~DDv}ܼ5 J܇K0β12 1dTXxh =6^QtXBԔ}@ :]P3` o^2`r- +t qV>I@kڎ}@V%ZYr<Qp6 >iT ё\ۍ٬MdkͷĀfFL7j6L' ýplTZ/T{?(*ahos0 E~kl6s7|̞C aP?eWgo.+-W35\Ja`VK*kHKO3bg g!>OF[B\Tf, |r p Ǎd %_+woZ﹛0п+8_=,d?DqQ?*JuPKmn*E|@y0/>30SrtB\]Q4M;bB ne%u۷oOBCCQ\9/]ia߻?xS@V8B!At "z@4 eE4%܇F# *F)1E]w\ŨKPDD,Η*)H1Gtr \;"M^P9gDo_1}-4N<(>z2| PUk)}܈(gl% {B8r\x @l跜s+)O~)J\feCÅH`k-U _3dk0E۝Pwvm:} Ӱ^}סb.\BgUׂDCQߘZj&oD(ktXײdQ13ՓQ拻@"g䋑{_k1`~Q*!\VL⹦3e |qI$K*PЀʋ|}Ub9T.FzeQi\lĊGbPx <"n!*9oz+o"y?1ϜH* Jyzzv WґWÿ7*H6~/=o'fYpH![ z,ΝnHg[!AB۬ЛLʳ8..LPZDɝ%qI߰UĬob5bQUp9wfOk6 .2!-O5%ڭ==ڎ*\RtWKw m4360g =^l!L_z{I1˔C\[Fkz@dS!\]lg⩸<yOyOe8qkZ<= SD/ڻdRPFø9qRAe/:^oJ} 9}\=Sf [;O_j_^6itT &ܳ.Vs n /`+AtuREGP8G:7C.>:ڈ%G*à0M o.W6.(0-ٿ0wp<S."5h ,'Ʃk=n) DDaZ 'okû9K^׮n,mqBE|޹< !J_ O: ,XK.R CX ,G.dU7O{re %pj%|'bQa(b]<4] lvoB- <~D'! !YK? T(3P嶕O˜o5z)f*~cbyjLTV9 89V2yJV`QfUF+%1P_$? GWl^T&~z=Q"  PX5Q@D6Ɣm-bvS> {?@3V~hM .Y:st66_zg/(+$)miڏvzK+¥óW[R%4o\o4h'Oz]ytV t1f<.㒁f=!)O㤻T!2lOSW Rb&"+Km"{Xa\ _BP\Ycoը jjb>>&;+ùD-OnmQ'QKzv6]- ccm.wd;qxsn+Tރ;Mkz muUh-1|s !ȡ]aesm}Q ]!N9.`IL`\+b *GW+_jc9{~9p-TNm٣+z6Q*2-Hbm '_#9bee"n_ӅF PBf.I Wг؍PgNV+_sEz: p"޽{'kW Lv^[8D:s - tɗʊ[D{?C%g^ =j0Q/+Kk1~o9lX~>*Vx }Em/&kR(kGa23>ql'-N`( ܶ&r߉Si߾5~A;.ҫ0F&oطm# ʕ m[3y;QpYa6j=}%T8+z(o%<}Ej1/g9 ǚ]BSI1P[կGɈ]`#m8D)޶)緹,yy4 L9JmMy4de.F|1r; 7s-Y t=G_>r;b Bz]=Ӵ@3*?x_t~{{1Zzu8r=n2k#Iw?:3N#D &ѱ9 @ "΋2XAʑJ caG0.icbe? @Z&^D25_(u[ SZ4fyvz =}w`LeeZCV'8@VLψ#o݁kq{a{=Ƃ|TuR( $b T QaWb-DDxd&gk˛2F%C ˳|H?$+veʓ̀P̕QfLCMY; j2嶖h}9fT_}*BkK; @ ^K}T`e"ҽW 31="c, M ?2Rӹ2Lt5,;nF>DhYtJ~r\AFq=RG9-p_J5kҝn h1h 3ynS/Z-WFG&Zd"8ߠݕJĝ Q4fE; rxXVZTfzgzqI9r;^}lUm"R,#?4 EFFsᡘHK@W*!C6lѭD?Bvyv* Bvd.'&{7sqgaI0#8e¬'q^gI"`vv.^:sE-kY4` xb^k&ma+{y2 0UٺO{eAgcȽfY A%f.Ces *Q'h`D9{/]\ Dշo_&^Hqc0%@m1PO!dR=)gH@R{Dysb IDATey;$>v'qȝlf51 m(VیKoxggfaי amZho"DoʑO{Kk*ߞf_\ѫom3=[Woi75eiZ?'WEK,2硺o8-s$e\\+LًsdL)YTsˍhի*=Ge:x}kKw?ieR1i˻^[bK.% !߉* ;hY@J~ҳYH@S2 he9m41q{'&BuS tb%",%ۤTrjA+4&>"reއ [s`/`><:P5bq8Q84..a(N-Q^4lG!ǹY45Q_)mM0͕^75cI\٫h_O/tZMO7!n~h% UEÍn9E*GS[M40gk@P-7*`k󈩮[߾&^SZs/W VU= +#5r~4[mdȲ W-6ѡ/1Q V1 {HÔP:ԟȁfB̩s]P,nnp7/а=Z.~C+nr7n8oWɴeJ%NUJ 1.$b2Qh&" N Df&zM V Qga8s}X@#ѸCHհii<텃\>f]!Wr] y f 93-4*ED}j;tՑESg!̶§6X+t&?]1P_!D;+ZZMfjECo1W3r~6@-,m*)@x)#DLDpv#P;#So3OD±$gSt7grwR6b_zDhf2VA#r[i_FoA7=`bu /yoL$ۿYhH@-3Zp= :|={Ŏ  (@) ()ҋATA{5dwϙ{e&g>d7 ={fΜPmgbq `QT(sIf#ù!8= Ҹw9 1[8:Uu +~89 4 Ԥp| H;m0bYAJD-@/*ҾHD GӲ>ecsX1װMb$c@Ips4JB't $ˏ L|RAT=GH €At=U W$1P&0_BbeI7gi#ߡZ^'#X50\Z4n%СիW5k&Ak׮M7okrP>.SFb@>=8h5jNDmavf{xG(1vh`&b`PB{Y(j{oYE3ve {g_i|u| 5QvjS ^nIkm,65Y6C1H{I{_蠷/jBzlVš^ԯe) 7g`L2?ߞ*cj֨ [bСt[~~.]0uԎlf6jP[{ X~Cȉ}I#zz= 5h6^'!@ };1OiUY`oC˨OEeW@/P{@,Y;""Wp?,],\uЦӎSG\jgK 3Q L}0QE}kTxV908SPr$$3).2:t)%_FMdR+E[ (ϑȑ%0&t[nf[w*C{=[yK ;T/4oHC=zl赤T5n ^@` $tmHj$m.?>/5ԷFrkv[*b$fˎKQcgǵ!lAb.9Mpa})Njhr rNbN+֋MMHSr\YIn߾]Է]w+WN 0֬nݺb+F J+S: hy 'B8i D5p,Y!0XS#KMo(ySto|t,*1?vMARm4wo!j~IƴAA{hCjaZVx92ėb~ D3N }<,C;ߋdFEFzi`EX(kQ 瑏/8;Ra0 5na8>:evY#cdT FalngpSN}0; UC ]k*ia-5iݒG)Ҿ?eG9N2.NN$nGv %~Qm3aGq+?0:OǜT>ef3z53}ڱei}L_y }}Qx< g'lڊE?l Dؿ ꯁ> n}y5G-(kB뢺Bc\ZaU`9Ep5zfB7s #!̬sMQ=Ĥ?4}"4Q߽qwA4TK5>e-(,ęp&Tn{%c9@}# m-o%b΅e%o`^}@(}T&qGb#V?@rRm=Ls- !QG#ƶ umfjR4ȧZy>c4LԈcR7 Mwv0ܶ p/X0}`/rh?˔WT"0n!ZB%cd ]FJ+){ M<(jWB & 1o֣Άd/OUb+/;{k_*;>1oP:Q _qҥ }'~Qiĉr_OuZHG)\$}5m,=oXP/#*-i@3L@U j\o ;U/hA+]L 9oC{vjL6H$yMvFGD t'3n!s 6Po0:@@t0t3=#q"ᩡ{@Fh  +[ßb}x[x$qYF-?_x٧CuϏbPTwL0yFuX &H@=0 lAwS{8]Ł0W8z9CQnOUNDAtGx혫IJ79bn:z[׉jV* DV'?A0PSeNmڴoUV?Vf"z."@ԩS_=i@[FpM(Tu*f05 ZVV(g=+6٢G謊T HS`ӒdTthRƥ\*;3nI@b:ZibfBifuucE<,#laCkc5HBEmTuVr k{ȆLKMY'nDJ_waw:78xݪ j 4M}@lR9 +z/c-ݝLFwl;KP&ߑx3ѨͩtžQ+v7hZ736B'wD w,X^|E:t7wɹxE"\,~Ȑ!ԯ_?۷/уu&rӉ;R5TϪxG)pgX (Lm'-fl3}~ȴLtem-'3FSõ$R{v9SFPF!kDL =&bZ{J :{>.C5i^ ;H}jp85NkaQՠX+kGKHs΅_[ʉOqyog%k>*I"hEҘ!~#M=}SP1S3n4v?a*~Z0QtjWstgϷ ;庯T`- {@<P3e> ]sLsȚ[*F ⳛ?3t"3 -}NWڋ6QʔkgϞUVѶmdʲqFP!# IDAT5gD{ЋpH?59~ѦGE)/4넁N@}; ofs9'"fthD⳽sB#3{6_2rP%X.}P3+2B3Ո艔+Pֽ_- Ei{YW""N^(x[#[bƯzpCqi.jAtL@Go;Qzz9^}gd+;b5nHD$^o+ 31",q/mZ'wVl?hk5ߠ1Rդgnp'Sw UJG7~ʾ+=ΒvqDB]j/cݛAaVj oKکRGWDm:Gžο突ޙ:@?KW(=>5v0X+zE"\O's=GEM6QLL|ʭi,RO1]ms1ЖеVthf ԀhhKvҸ&$g"L}9z%KZj[=w!E:wXu54 HY 072nh5Dhaעf#{nerN4bl8(jH䶝`b#__cMjb?@ =\UDh#UqߥF.\܅T=]TyA)^M--[k/2ZxGԗ 4+̶G3+2ra߮];PrcccsG~nQ[}f cyO`iZHN,b.u<2Ѡy+RT_I`>$FбMΆg~CQ}\J~:̌Όh[΢EU_4r]˶b0O$4TN}*]`2E1)ܬ]YH]P m!ʬMЈ63GR1x65&Rg7qvtvh1d=H4􏓩2Lo'Q h%w*N/v6ϸ J¬R)޴-tk b{I`m)Recw?{^uxPsc͊Fֿ_H4CivUj̚5K-'@΀R(L>0tOG1Aӌ3\+m >mYxUj>]?-VDB"*%(žT&;tpC787{Mb{E}Mƽ[i;i w0ϕnlz0k4WYTJDy(Ղǜ'}NX$uQPfeޤQjNɋV)1ć(;Ez<"}t,ůI#ۄ8 JCO%#1܌b&c͹Ա;Q)\[·w{="Ƅ}tٱ9OOa>x|Ækj?sW)#>%' "K^˼ "zgDSO;-nGcz1  4Jqa3;)\Bf  5)R){ao>Wxc0|*<*]‚hgZ p8@[NM>fi Wů;t}vU"tmQ:;YH ]9@c(z]0E *]5@siE"\vٲe_ԭYOFsư,Qa0yZ]3QA QctAԝ20!3C1hKtj 16*.Ch]4CV[K& q$(R%$grǕt" 9>z%9um?{#ma*]W9*cttƙi[J/zZԷ}d<S&cju\v7L`C>RhANuG'G*=_(vM4ڴv{ 6o5o0SwUrSlq95Л+OG)~uLd탁]so3ұ XjAYltͥЋpE@w>}89rD 6?\m>F 7Xj8t.R V/Pm1֬ڗD\4 8hP<1P/n ic'ni -Tk8vm6F-7"QkE` H0=x9+h{76 pWqm}-=,`:[> pdγp#pШaQ[lZe#`+)j} {T }:cίOpCkv_MR3Z8}ݞa ( F1d}[Lc-[A癳MSט&_FW@/e۷K֭+]b^Ļw#F8apB6mz4Qy<8j8SYh`S&kһ:2 F@n1^zfHj=!41SoYx.xA ЫiWRHL3nouwFXt Xe7N:UT(Һn0Gf 0RjY2Ь-!6Bn3)B쁨 6vm<_S-:&;eQH QYLz(m)LAמ>L?շj \1s^F M:ޡ!CaA3# 4V@/ҕ!!u"Bh#m޼Y駟G#\93E1& R0hƀՈäqBap%B?x'[ lQ-GZj`,B*4KddSN25P}fJ@m4U놽߁ a,6{u~JH`U0 n[q0QW#s55)V 4)sҸJ\F#W̳b&慂'Q>7$Xkc Q#z3Mn9.?vRz@NP[ 9/|oH t3Їc;̖kyGpY_SOG OʊEHcǎ_љ3g%..b B5_Q͞=>0`XRJJb `2~8t(J B= yo3GG|_}B1}zD}Z0խg^M¡Mc }Ɖc"waŧ.V4f)@+P=#Cd2{R?p/J< K5q;8)@ҵڲ m-)攂Ͻv\qQ¡h 3q'9.RΧ_o=N{XeQ&&^5 *Z_MVݧܧhoMQCT=WUWpR]aWnmG݆4n!Y#:1j^c-im1-.<G>_?jN.#Z>20j[} *5!v6^RQu]-*E5|Z9c2N J7>DW?DW P dOR6|EhaHQZPŔ2Moʐ9y-7br |rA8'oz~v X&4qZc㟤Yy\[I2/oŪ H7(TZ}i,1iǯ-0[;oNAmOڃ놔΅J ϩnOAꦽR႑~Id(éjwwowYS@h<S5w?e,t?khhO_AntMR)oQר7ر)5x!+PKľO`t5}2ͥЋt l?0P0Ǐ 4u_6jJꨡ(_W)Rb(z9O@shh1*2;4&ydC#2:¡q9u] =w4|ktR'P?1]mE1?t]o`~J3`P ^a *8,&#͡E Ʃ3Sa8 (tďyhѪKFv뭴W6xa7w4;w69u?uz+-I-*iʻ(L=F&vؘn?+.kA:FӂĢq43QOSiǢi:}eZS^,}84eM15j4$ :YE@ggxxB5j5 oϵ Og_ǫ#|\iZF /EY:{NA.{^Zz|@_1x֙R/ ѻk*2uaXZi@څ-Ood F+C+QxT3cߠ ~xU ӕ*Itw_YӅ&7j?SS?*'stWO RÛ0)F OLjA/c܇ۖKa]龽=iꙿSSg{U:O-m?z38N:땉~hy%͊EwԬY3I.]߼R8lR""sKCO}?|ZT9׫4:4 =[A}Z0Ѿ@30N|oP뽕~2e9aH U*@ńa?ƀZj /}OͩWˎZ0GsPuOJcjweq>kjhw@cj;;6uHX:FxTXjQYut ՝׀l,;zk'T} zpD/jC_: Tna.T<ПN/ө'=2SzzԳX]5m.س3Пm3w"+M:0KOD׊0\Zkܹ6l So5}7RxiN6M@~A󫯾kܮX4(ӇPbv W0Eu:Su:-v*>[_Jѩ[c ү)Ǔ.߫3({:ۡmt* XᶙBSH U`r]R4>?䥿^B^_~:t9ť_ASAE'wmSۘ]n)o&RL,qmwu@,ǘ1-GkP/Ẕ}.3 /Jt*UOd`5IOPrb220NfȤpJMx@J&2Aѐ/8KMZ~$!55/-}FĆ(Fҹ%]㳓0Q% G=x.3a:=϶f[`*M~(1JmjdNGI7VC&JU̝Ŀ?ҳT #]:u5x+@P؏:ͦ!$KG&o@seE"]H֬YS{PD +3u k5XWݻO?tMPQ)i[Y3kjn}z9|+P?;u5z}:vzhC-"ҷ*׻ +kf2OݦT֒tFoL+J|@] _\#\Dd݇c#6KK6gDS XU?FڔQV{W7 0""kh!y r/_+bUXLS|%hQi@x_!Tz_)׭Fcյ(iv~!OL( b6;ʧ>32{Wm{>עnK>73_+5:yvuTVOw|QCwC j7A=w37?RM{ (k1T՝@ߨwݗnBzSʶm֭Ӆ.ۆ?̣Yw*U``Ĉ>t!;uN1ǮA&L(6k3}C+exǿcW(Z|umzY,t?Bω\0dm5m.1R 5h @28=4GYr*YN2Gw9>`o-AU"ôi~x@Dƫtd5dǰ>9@T o(6+TeJ.H3{t- ,Lz$*܀)n|VT癋~*.p$H1> H8בg!0EԘ}ܝ^ks:e{B½#=UTދ2f{T*NҊEljԱ!u;tPڹs\xrm$Jp=%?2 eOq :G} jFy14/ IDATT{qr8NUK'p k`` BRخřh;;xǜv})f7ZPď~Cwh!Rb^۟VvfNDrEE^~wt X]-@Z~: ͂iy1D_7 Y`w"T/@Gp `ߊ5|SMh`!ELĶdu#eS,f`,YwQү@G@ri6ۻtdˎ,ۑ^g28uxgГ4JFeW@/e^H]6h@rr ŋS-*f8n.S-p"(TA4AOX b#Bh%4ҩݏ8q0pзs#tw9.vA(k@)q˔P3yO%?FQT0ѳ>RnjHٳIyteD;$At)&8qmй"~ppZ4ڐR(mqӏB>-ҕ zl8IȪSQ]nhW'@:u|8}$?c륏 G @v;0>gp$C@Jv$QAݯw+y{ ^0@o[Vғ޿);e!=( 7D~_ЋjO8M:U!jӦDX10@E:B% O;OZ`ǛM9`B\R>UL %;@@'fͰbf \}ΝH>w2i8٢P+׿Hc RgWBtY7mPFX1dQҹnRпa3n-uǰ:kQ?; ~fjXjy= ZkFR/NEl4E,-1E!JHU@ O>KC %32.ćAǟ ~6Hrq܆:Ʒs^C]`}'6#ZbmxP"nez4Gh)+5TNg9},fOy/"z-ضm[1{HD8__ѥk1~8t(J.G1OJ傑Ӹ@ (Q#¹5*FVuFZ17g#[ǫoT{d=\DGMj?X{hX U1jհc;KCT14!c)WӑkHutح8bG2vu4???-JveܪR>Fa3Т8LT+}s~&.m42j ƒB#u7zRgг21 jhOuq-jI ,ҸJ<зǁ^B]ɑT ARgO{vXhfS]i1> 5P ~?J?ozm1r@@ 0_O70ΧGh=݀2 De=Qq;3Мkc{QiJy3]E,G\`CoYy~Qk׮Uz+2xTLÆ i̘1s``ɛ(0Q:NEm@ mВ{ڑ֗tB!4cFP~RF͞w43 wzzp`u23uG*VNVTw&XZ x˶̤ۡg^ѱV6C3 ߃a;f)p )b6&z$idN\AҮcSQ*ooCIL{B32<5&7 8Bܒf G԰˭4viH$ /F mTggUz˃|#yKҿ_1;0PFj YES*Q_CF3_/4DDW~r'=]0pKxB/u%=a)RC'4i"cЋpeԻO/ʡDQBDD DCEEUtBD]-,JHϏ&\DOg|Б 6X=ufY1+&(l{= 6Ms4؂bb%MqvI%g/8fPqgNU)-5 )$+6@@O  fj*wx7p_GR6V},l-.`e%hb4'͠[QҼaYW:Qóњk?נTkn-GD{IJk6 n*K"[39"'!߽pfzet)]I$8\ko5[u`G~X 2«oI& kW@/ xa3sr%\@7[MnB%[:L 4 'fVJ@#D?d&j  :\(DI)8\{wa9E 0V[ǴȺjl%{ۮ :TĩpVܟ%WJPשHsLN }vud?F)w[6 !!Th8..g$lZiH5CUBd[tr`PzKFPkzW5FtȨCXV u.`x>ܲ_6 t]=H>gEhFvSM{Z@1pr eF?^+H“ 0P(JtotzΤ'bnh=Ԁ(jHɭ bh m:͏5j_f^8ɮB6:Äk3Z;(x"=DK9Kt)=C `0ZiFM?I>|0Dy #iW1XAޤ! _S3i1B#B,U/tL*Kļ@F/t 4l_hq AZoݛmZ7pu]reQVX1u޲tˢ(2f/&, Pܡ)ZIf:`z!\onPDc 'L:@i /vCz0ef>8D pքW[JzK@7ʾ2 /Mߟo8wʡs߆ٸ7E'MrdRQ>r%Mvznqһ Dao 'ubw&uzЋ2_}//ؓO%h&:8/ UJյSc^/DK}?n!l16 ݩ|Lyڷe~7$kfGw#E[2Bw52-݄m9rDa"Y[!)x3:trI7PσDW@+ x֖'4©-&jlH"u E/LzkDmHƵ0}ZhX ()^ڬ֩zXwq8g4[ä p]} SKI`"4^m5~A ](C Jnϓۥe_Ƞf}\HxJ1kwl0+ {hr{{ޗ!Ŕ[<|,$l;YƝ|tnJtF1~ψ[-KD fFQ|~~s^ z "}DlQ(5-V6?^=R{[P40灒3~9s}Ԟ0&a.j- 'NJ:+pUT H 3~€qĊ/̹X| eסڽX77/%ERBbIe#H (L9Y{ ´NHj1U&+F86Gi휴Gi> guK E+9HԳXFɄ)ӌYigz>a: `Gzvm,vj'U6@" 5 L4 FZH ҋ(0=/MGRKu fMG^K˴qH :c$[/Ύ.q7GWZÁ=C,G#{_b|[Txf6m m(?5O5\^2gYfs{,=x\+~8pJ՛, O'_JGRd.7{}rZfCEIdm~2mIfh́'nB|yf5T%|}A= P40}9@At']t 4n渕%Rs+F q ! &nuZ@TZTw% e dcSTUR0!@B+ WaWm5}m4}Z䆂.p)9̷b!@ʘ"B0̽|T <M׀ho3?5^k?pnWXҽkI~9'ǸbkKgMTdЬǕyëyϝ0VF w:eNT c/;e\`}lND^-cWT@\%yր(gtaAuQbhē:s2@ VU~¨aE=$<\:j0ziwG 0OȮtǺ`;.X!T^3ae2f4Dpo'DKy(>2f7%i+6;E4O-` ){LHiҋ~3|q>`A}O/5/r:MBצg5Sas8Ad f=u W@R MX +Z¹ҧZ]¡aw+K/F{J1\trKR}mo6ԼD{j !1 z?84z0kp$b\H(ўg3"p {ݢsρkZFa9)/&Фh|#(ʊicdμ轌'+L]5ҫ'# jzM :) |hɇK{}b`}f{lQO8gI<1j7ucZ.GjS~d:a@tUa:Xq _=K[EVήFVf-Ng= 8|ίT3Єv~c-C-7 C# JcoiUNZDf]ϡEU(n,3RP ϊ1)@Ρ}]H}0mkҺi!`1Hs. Lz8LLŹg^;oV3V1H禝V0q0cO $>HshKE;LqJJ0{|r>¨a6ɇ8Qҽ~kUJz%<@CkxAbBa*1Qvez:-4BۗKKwOkIV)# TR~k]/]~]p2˸M{Z~IҊhdeo ?E|Q5C.qQMR,@H$ h6ḫ.LW ҫa&i epLG/HAw85C{QCaӾdQ3r7b^:L+$M^C32ƍhmEHBICȭ %FLD{3nfFvs'fڝqdfҵJBL*+ +>wsJ]hPYCE_yޥA bL wHrFɥKOe5NZ*H 7V@#+{Kaм~m5~AݤÙt&ey'ޥB[1=W@#+{_0{_Z(omop GVQ 2T@ ק1P7T@n$ӑ1Ƨ }}fDc1h0H%bYLH^[|dsUg -5pKNInh7~5%BћE3fmbfos[i~nk'k/t4:v^p{gfQCKjf )?)\Ls ?OsHb̓9S#9C'%ƽ?A455zͥ>z@f] y\?>QLnjM!ВV?۝(PDLB3a}wf85U=~ې3y IDAT aY0S3 L޳'km4DդxCEHN~ҼQj*R!aR- Fs}'%QqFZf33ԙUznjeO(i-YhV&0IMV#N3 hOO # v;20HB U)ő">\!"Pgs@ tdw߸w3@2p1#ƊhdeoimZt !K+`whz2L~_3)ܥu 7Q(F f|ҜݭU:P idfVHZrͪ Й= CܐlO_ӶkÆpYf&Vne:Apfv V: ??_(ȞboC]g .>9Dw)j L41kEJ& GDFͺ@;}H xBd-%B"e<hcQ m,PS(_q`2p!f"[+- `Dс|y8] Y@E*NMJXE]ԧH}@|NsJ:r F? 8--\c'. =OH7+p,5QC$J ?~V·p_b Ї| DH#ucct'" p2h2Pu,0uSV 7> 0JDF4YHB\%۽hU=4}=&>mf@ ](tcݗexk]@hN ~ ;oܛ=ls(\O{Wͥ޲jk@3ݩ[XDkˋ je'`CoT,_&cPvNі?r--t`hM'o` nL|*Rz?$Hh3e٭Zm|}?ƵA$|HV2>pbРyT ~\Bԓ \ة @ڲ%NNwB2bm0}``4nEvbPj+r|K/(eQfhH 47Y 3O@E8%/3E½T;]M[#DETm)\PD5xQ,kz@ϓt-39#n`+ hwf@q9^:.n'2+IXh{M[r h"+ KfN%.9U{G3,۷u_R?TF7'.zj+ kTIځs 'vͅKKK3X_@C fN(cA.KmL\x.՜Ayi3+BO'IwJpX/&*j>odrKm9'NY~1M4y1GWRYu%Xt%ɨB6`P7^Q{Mңz¢T IЮp􆊇z9[VfG!*#AI1ujG1G;F 0#}A.U\p/=oˁz ̝Ň%JЃJ/_\\^^?^{Fo/Dч,#AoKL!RG֭+WEEEiWh!!a]*" `eDDgEB QQ$Y5Eh=-I OaI(ƶQ~]JxnQ6 &b@Aq}?`J ԍp Gط#V/"*8xEIJ~]o#b>ܲS՛q>'Ԡz&lps.lEϯ W-[Xwlɾz%ՋC@v:NOuSRC-=OR66en5ENꑯo @oCPw}vIשSG|ͺo߾L=)L7-GX)?ԁ.cBY\ak==z gNi+7VQ0sL| [$"!܊o#n;ZޣʃlMۛG|[S" VFe+w&>Dfڧv ωCG++?FUGœDSk-hJwM@s޲0OoZ7ln]W|=Y;SvGԟ_?(Afnis?{)*@[NǯǣvTTGFk56 ѳgO}=ޱcG8Z S _b@Qzb3}@79`*D7 DG[?ԀmWiҖ3~ҽS&[$ mW[Geg8-y)j#XyDQzklc.b{߂&+|z\20iwCQdDeƶh)=ǷZ,z9OlC+IT+PK7*`dn/XFDҵCmFe R3 GGұ1v.d֒ͻs//+"z n]AuU5l>z Oգ6n:[O۞:\6k9*>F9tbI \%Z!ݼބpk׮5k7o6m/΋g!苏 @%JDqnLL|[ D&h#} &SCKN8d B 6ɶ0r@b `?#T| 3Z4X*uXci}B~ N2"Qny;IH )$mㆽ!/LQ3J(|c`}_Aez+d61Սo8~4noauX=sHD ߋ`UUo]MX}_ Yv^?}ߓ׿^_J2Ї @у{ `hNG_B ]Pb8 }sVZ髯B!MB -KFDGbay*ͻBT7JE({)A(Fnu=R/ IJ_e<%QMD?+xZO$-an08ݥbu昸_ M "ɱd}cK‘ۻR1*˰!WB8U$d=@L 2tHr]EJo8.(h <lZ9yY !(;DM;JO!:9%Go7Oߘ\ٳWר APq~NxԶJj;\GUtu-{zk:K_޼AS7G@h% #gϫI %07p-h!Mnʏ>/=H?z8F-DY[VtOJrhVN养rD EVT[_i+QAnP16SO#I)ep:v ԇ40@jH0P%31ZQj%kDw+CFBIICoY6 _-*+V *z55$}t=~;1([p#@_}U}M7իWnݺ6 hzĘ^M @_I2Paeq`Y&i/z8~3-0(hu.H+v$6PsqGu4w}`RKDUd&bV$ I@KlsJ+bE85}A/87F=~Y7*d3^v nE?Ԉ>)J}ˮ9W ߻DeϡkkTIz(8?&T{<oGW nl[7,]vۛ P.,M} hͧ @Q!1N GV-L(vt6D`*bnh*l3Q毀q¼gzX* `MMv7>]q*b=0f"{ߨ11[@{!+gڷ~ [P%G\{an5"'e_/@MVUzD[B禼&2Ts7dIF:h=|ݧZ +M@S VWd&`;E-*T21OZ2S̉@[Qd@+u<)?!+Ȍ]!vv~tr/W5!\hSEN^d nhJD2׉|CL}~7d|~:gpH @g$".o-6+v4љ9oWzͧ8!ijbû`̉F%snC  VD}ILC:ڎS #! QanQ#D=)n7t=ႉ" {#l ~Wmwҋp$-En`|?8@&QQ?2ESrrxz֯J"jLڏ= I=s'PL>5 AN7w@!2oꏾ~?扶K.VZE3`ZXXJ}w.H<\g(Bچpp,+Yo0Qw> 5o xKLr\ =+ h$%W_W* &WC*%P9nӊ>u $c>edV@|'l* **FXO-v]޲`ly (B\X"--%o#ieEKN3D}x;fBQ,Pz+\ZB^ Pڛe/«%.LI<mRV rLps0J}|}kfZ0#-(1%ZJ^‚he (gꖼ+-yCA.ji oGy[)KcRBCZ6cRb,6':1JF1( ǠTTXeʠYQ9FZ3[Ņ{5fO]:{^U#E_I=ق @w \ L] 7`Bx qi0͛7N;M/]_k @o |tc# kτWn˳@V;;0wka:ϾDc[aXyN;X5,xa~|lMlZCTY(QskJ%?8TEXEgY lxrMGĕyR)!NG6Wl[T P/nO" J %@!7TVCߺ~\'Z/[`4Z|f)´L3}|lRSe cɼ=_Rk<5亊R;{':gmzp@NntKW 4[3Pdǎ `K.ӦMӷrQ)9 .4זҗiGGي5(e|8yH%B` |g6Q[cԎcKi 䡴=1"!Z#0P-Ioq 0(; p@W9JGb  ?OkRSÎ{~}S|1NqѰ᳉빐 $湬*G-"V8: V>.{IٹQGH_]Im={l.ָk,5}l|zmwµ1 nң}ubb?N6-Pt|gW p/, Ռh@J`75 @aWJofs21۟筥OMw @󨯱Pdwcw{{b?'?K1R0od(`@b%}~C}Te z3hzp?GU'tN7+C͖?dyb }w]{']v5 2 ̍7ZEi Iz*b4qې&DD才F ' ~s_ͱ=i{ NǾ p|lo h{|5zMD>f"u, 'tue8t}@m}?ž}} IDAT==p,Gsضwyq1\@EZ~p {,0Aۅ:&PXuu@ |>~ ԱǾ;>8f։1!k @F{ @B7Cc`~C32gN@v(~N<@7 7S-& |}A[ x[c [ ޢ6>op0}.Z N=fʽoIIH$Nl;5is]Ӆ ]7L}CQzM )t0Z;b \_>ZW.PQmW cg#9^pe!m۶ġΝ;ɓ'mtBWnj5j~asb @/d-a _gYyK~n!]jΏωj>wRU&7sdO}'=3C3(!\7zpi{Wqm[ !}K:u?8q%Y6?/%'6h`wY`3@@1%1 JW5m9vw*"Op"{LLP$a܏db1o0GDbX_+O2"$hN$!T<+˚9&DE&߱,!fMYܝkVuA./ \ы00GGqw2a]̃ro\zЗݑi#g@/4[3s2kk/Bu]&KwΝeM5F\B sy3$-˱ EY۫ؗUl6/^#5ط$7bbvOӾ-!Qԉr$'HΓĤRgsuj |0CPMj+Fb$"\ ksEz$ڞћg% W$ @&}m ig)tgٰ@-ї8)cy5R@v097 M(#ER,5GZ PZ51zOz;mdŖ"1k:e/rmZ@e,"o['09Mp$ bQ:e,dD5M0`Po͎DW>SD``H(C@@Q@g䂪z͊=޺E=Yႁ^AuRs"4d2G@hIV/&\Vb/w\'B P"@qw:Qa`4fnl1DzvU>/vYmO"$b=E=n$`c}Uqu[c? x['!TATXs粟W_^CZb2x)gbm~qD:a:EeEĻPH4J}TEi_f1yb+{8Mb}|g.c}@Uqu}cgPe:G\2lY3g9[ ^ }ڏ@:T|>dbP.ɱjF@rF醼 Իy]JHD,Hz M1ckD]hG0pLtLi/a$2e,A;ޟT4=KPg-e9㯱`ZRcȹ|q{^ }4 ;#$qQ2$ ~ׇjCk/-Uz뒈|3Cv~#s .&h6,Ђ#&<߳˘5Dg C* (/b~s'Ŕ*<`;3U[GL VqWQWW2Lԛlj U|QpP^h*F~QRdqE $G}3LPcԊB!\PE?C PgY3vy^H<žSpQ@eꏾKʮ,~>F qf2/:i]wAtgN$M*B@{4?.6 ]i=}[אO!}@գ I';w; &tIJj C>[jO0OM~-5|MuL-\g8ې,-W8t,0a$aNhT= nY7t/@(ݦ1 ,gև|Ph#p_'Hs{N!fB -ɂڼK'З} E ;a\/tӻ &:bVcRծ̲@=a++Ë}/K8!ݰ]$%Jl0poTÉ+w5T4@)>k);ZH?Ԓ˛j,P۫{w1F?Htmwh\)q}MtXfe,hli3"(m(C˙C0=&plz{Na7[hh vRv9wyٸ}<}I>]*@aU[{n`RPtA3Oc8msV$)|뾼TqNfe4?\%5^Nes<Rhw9]kwD w'8 JQ ?$A$]EgEV붯f t!, `}׸R;P0КET'&MJL[p]Ph6,ЂO; @f|g" :6bV3@_LB@70эnl/W;_ jVzQ%{B2;x+LøE ¬캣y*PPqXȾDZKP r x" ̃"hE"T}Do\ݻ@ }:Gsh,Ђ=iP$dpz(A)@!Po5prwm+0.&כ.x~]Fm?- @Y aJ>JВdz+Q>A\ +*p/Q{ hPoxwwMu7 0Y/ng!:g&d @ vBmmOWp+[}xB, WXutokwlG|oY =O@'H:vs!\4(w:Z5'.N"Bp?Tԛ8Ty@!"JDGX Z,Y 0-]7b RN*x ' =N'X[RuYIo5Y.sYg;s2|iI""[Us%(UGC *Sz)^TLJǾD̻`l=z?>aARB+`1xe,`Xʢ`?ˆ޼*W/]7N{|(}Bz hzp%pM'mtN]г-uG33hḩEjRt8SeԝDH&ZJ֝ԉ@XDmoL^|Xbp<–- Gs5?}$ר-[3*1 VTp[ƒ*"\ۊA,#pvy]K-iW@w[[2P}B  ct<3+_-ѫEo3@O$mHCDZhgN~hE3,Ђ3P)ܦB We3oP/ :b@UĖTju@t\*+ s˨#ذe݋߇N7Kio}mі3.i#9,%2l & x31w*sNQ)ڻGsҵKII;yىozQbQ>V} J㥬[H w$~,s"@ߋr~ol&aNzY~=>=k8ި=uRHJu- FFcݠAR@C f_-ed3QPE FTH7&PH\h#FWp> = 9?ϖˠtO20ˉE9(osd.LjT(Շ& }`JG.j2"[۩_rp:ǂamX ,twQbl?+ČWzѻy3{a(z^ٽ+8Y,f@[S.jB"J;OD u}:& 0hQ.axbݤIV]2 EaX7u 4` TB^1!>@2Ţ)BWl'Ŝzf#2S/1HLg5o⾡ܹyH>ϘWAQ~n\ ̙8Q"j_í˾Tݽk?0Ԋ}X$㪼0=)~lRvzN2ѝD @ճEz3="Z{<o/#3t)ͺFnu-ĉu~tz̾g!̘^A˙}LfXROAܷŢ Z.ލ]dd#q`-#I@S?o*Yn[m=ɇ$!^ !7HF(n'!U/lD5 HX@*IFf߹Yv;zNsRT\- GH6kʲjIE dkJ ymKȷpQeVyӯ~ D/ȉ"h,;Jӳd@ST^=בS>ā:@7>K}K֭[뫯Z[.diZ3'{&s(ۛ`OgmBg Es\1zz$K .] o'zCp_k7ޗ'dki3EGٵObbs|\8}) :IG@hC,%KRȡ{1P! ku2{h"&Vۧ{D th12jݔ/(`L>nShb-2#&=zp_BzN+uiu aÆuM5k;L0&n!8 Iԁv;;$~bAC.2HQ̏NRV>%b3zgU!^&eñyy6Vƥ\f13drDbD!Kfzvl?Cʂu1a~]_쾴*K!ۘ(wx (=T0P #ǙEz5w}$mp_b t)E_ @/[:`V- )+ve-5 4`́BDh{j!"&WU,&$3wc1 Ҏbl8h%'2g @CK9 :,h<9Qo]Q9p(,V,@~Iq|d)s#%|([AL3FnE 9OK$ s];;L䗕`&}fX-BˏJ3Cb`aCzNOU)-u06>&JY-[gϞm%,ЂSrSkv  @U,&0[=͖l;fB<aF5tt:gxN':].0z1uKHoT=UZ@ V|DJYi4%Y"EW[(.Qs@??(ݶQ/у&Y:G΢sN'=֥qeЂ[3G@>Pvs@ D`f_zI^@#%'FC;O Q."^ʏρe[,oRN<7[n6g=sBVBa{p}ldB`$.1%82Pπ$H]LnTVii ,T KѶg=O'pՐ7@)Ih unle})=eJ e'<łc2JHzh(& 4`$K@3Ў E*•fgNM_0 DC2ޜW2>x ݭ^va߿ y}aĈgiBn A_$ NtB^_d@yοFeC2*߾d\(;w{p^Q(B/B&¸ϊv)Fb~[ O (]2ZphQcƅʑݛ`Z(93q]a[-MpZH.p|kw?cՓ&uG$0Mw߶RԒE\W()]i9~@I=r/cC͖Z0sBشr-¸< !xA4uf0.nPv Rl yXLM[%b,PsX[Hv6C% j@n0?*JEJ[D>>bmS)_׏0 W(h1 |K^=3PH:m/,@3hDxtQ ĢػEH(zÊ-cQ?C Kz=!p"7qlsvpzR'H IDATċr(@Hwp 씀s~JOn?[k:ɪe<29U%W<5^`zoxU-|5/ۨOE-- "@*/@(jB&yЪ`[v#tG 4[hḩE@]}]DKUBUX2f4 y%DK9KKsYaUU;x)2,RK!܄e,|m1vL5"-+W E{zRva̷B˷5Y@D{63LonVY|9E>Y8߄eB%Hꡡ'ZPݸtA@!>@#9EC͆Z0sm*Bxe*;i&;pG(~*6hxM kJ0&'q]oi ̅fJ@z64X~/w:Қ9#JRBuch ޤe4tLj{efpERCU^JE lBѾKߑ@g@? I=?7#C- 4`́^s>@Ea\[̯NS&1Gfj*SY!*kT$"?^Lw,%eՓ́&u'Ļѻ^e7y $vbecnG_7X M+ ֖&q'qbJR na J/0/0.$!ݞ2C 3uRK!͖Z0sBȸmanB3ʪ} -kIVGg}akd\IQ 0\\GN'$h K*^ؕgћw2<f˗Ledٻs8f̥4&fMm+ Yeً`}'j. =2Gsv#=<lY3 ^ <(4r&e~^t):Hv0yٴB[VA ZSѵ @3үDl#^$ 5Kz䡤u*78 4ZYДbYÛHH` e/n } @e w'pC'_蜪- 4`pPe"B@5ie[^fG8oA jsuI~ʃgEc@ؤ5 ,LC;dJEr,[% 7nGPRk}_oP7;i>Y&]-:@E'0( ) 9+!Ē[ʇp1P$5c}8tq_OXM'|h6-Ђ@W6:X'K}Av3܆ԁ1-4-s8hpw38Qz1gsQŦr?gbԥY,̋M1E}iEs1XxXa( +H]gp9PU\TBD]I.a=8e-4[hh̙EP  FuQ; REax T@dުZݱp=PT4ETmQWJ$~P-F*6s' VTƒ ǽ8 $ŲwwE(cOrķo& !peQHs|ۊ7tWC${{T#-~Hжehs6i74m0XxVf LvCg;, 5ڕf8 7TQ!ͶZ0s@N^lʃ5*F{(6Sxa->TTAЇP/& fDf2~ {f}XtzF)y@~H nғ IsBY=+_\~!,0Nd: LGY&ZZ>/bNYQm`@K"@#.>vIIIq?⡥n!p4r}?ޕJJX76X&oXU碪vGynsk"i |@4,`I`ӿ_"Szqe;\ԛsV:",G>G(!kAV@(#~Iv2+kk٨|PQ?ڂP@ɣI=)fm@C̼Z0s p(0+:{ºO?212*y3$"?P'1DF/]M6d"b%^ϱukr˕yfU6$%hID>atAƙÙ͛r^ݬokeyc,^rǚGm̵Z֒: KfT3` D% 7O#]G3 ƍ Ν;CZ0 PƒR1 uKeyQp#lygl L:!sXԁ>?Elܧq qU- npJsPƲ><<-WƒmͤOBKB;;”/Ǘ˓t?ty1l( 9}D6ځ}i$ɼ'dזUBK 8|cpE O"1J2MƤ2uϲ D,ףN>ti{@WK @s~w~UV+B73"\:aݩS'GŎƎ;t蠇j^ X=9rd|:]P;*KЬdv 0`ƴ @u1())( l Rf="D -b(*p.X%UW <ƶ셊 ^8I)d!B(?X$"nh KE.׍=tY\F2 ]Bл 5j<@ݪU+ݤI'a7= OjC|YvM_r%Nkk֬{/b9 /PDzOtew(@ ~sR6Ah/)@ RkLTMk !9X()LKܚѳMwL1\D4G"8g-hSցXBϟ?_fsҥaK%,?󙰟~Ʉnu:uk8073`]V-P"epEOZ"j첽nF Vbd /[G'>_#=bN1r銀-яT<b(y[>*.)o|V0_fJhwn_RO:ѼO:dž(d} >r;kVW} \s22ß,_5Ss(4Y/U½`mټE-6i3ޙoCRGZ0"f8v'51qz5{?"`ݱ]OlpHw'sQ 6 `<=+# (9/L،= >&`zXǓ ts?"ЌAx^-8=נ,n~4}<3Blp<^{D y;*E2 Zx?įk} Un>ctd'10fSE}'_3B~ GRoY3\:# =6ez'XgT kl/cX\k0;iW^}Hc !cټ/dkn%]@?lxwơ'Y]A`:1] }eеB[RD~1L.wst+@&ax*I&F<@N/"e,֢jKq"z[ev Up_}>Zu7=ZW7꽔nc5cuɯUqy-m|bgx~xA@ ݎǻ/B߃ne ɟY wsu yީ"=`ŵyyv3U1j>9VBQ S!єc86>U']X_ =QXK2Dz?wjø`Z0ı/Wr5Vtl&1mSδ}ȱB;8پc!CqnW>DgqvδÞmߏ^H9Ιsz$sީC OnX+b }ekV{fIGW]uC$vf hggScgU6t*ٵ,_{<{MGOU\SNh[3`L^DӇߎI|->>d`z%4܃r lR&%:APBc"F4I_Px>[*.P>G-gNPp1e-q 4R}5DM:ISz$2ڟ@@c!-2B 7Vt0`l褲\k 2T>@=.ټ"/NZ?wcu\B;Ee{- Cp*'3JW+/dʧp9eJy%p-Pɿ(,jǓOLȷLza7R| e_~ l@:K}"*=`$5me")u8ȘE(KRY5kw/Y&F2QQO2isg1Fτ~?2N+WZ|r%KLtFTTOԎ!#oLZ_ 4;hh7,p%1(!\I,dD<)o;){>#EP6ا; J]O ϥ~ :Wдw ?zԽάjlSC"-'ݝJ'OmM=4tny$ -hhY S˙Z$ !և<WZUPI?紩:P#>#Ke%, sKu!Iq<(9AJ1 ŏs~Ⴕ.Z%$!Bhb )##~CZW 4;hhYPtX.(@)@&!\@dz)gAs8s<|9 V('}ZI>PW1B(Wq3u3@eS2F@Ց%jLT<<v <0%,rtT2 ((6$j,@o!͎Z0s(a(@ Ͼl0{w+H7(yJ 0-XhL8JDe?WqL;%`OzTO>0G" !fB -9sxXsb8BK@;fxLg֕:{-`U(k\yA/9)]Ru+M_9-> UDI5=OHKyRD -(ޖAhb!̜.B^Pb שgb{½Yٰt6~RZ|FzP̻bNWp3]6>(iy]ltAtۛ*(NPREF tM}Ӥ1@ZPphv,ЂS9lׁBD:ٮEe@a L֛oQP "D9C# ˭U͔ϑ7Ax37 8/M3CN6.WXL1b`QRD>4@ZPP[ 4;h'_rIDATh >~o|N`PKBv,@ ֗_K`}ǜԽV&L,,t V7{@$ tNhPbmz$sz@Wo 4@C fNVRy* eWC5E:H[1(+=qěd/ER'~O}G CM1+IM.sHLk*.|ǎ!.Z-!; @16;I'(Ezhv,Ђ3l@s.c_Ƃ%հ<3YG,9m}#tp4!GQWɔ%,/c``xR4@0FyB7ȳ h5P*jb6$o&H ꐁfB -9!\PrWjdǑzl> }zKm0.Q]zY A @r:;Ep uh|, "obn>]X[Wz$\Cn/ڕ@C fjTοqY~xW `/p#snR+oJ\ OyyznFu @F=G"/jmAݡݡwA4U 4`pUbJeCvblpu*{ֆ?',v~ʞV BIM<Q0q %@<`9c?n2½.'H9j_ 0P۷GyD׮][u]zڵv_*L@C f% zS! }JR~8fcj+[tHe$goӚ?ZJ-wޓ A;+m{+!L-eu@M3䝓z$,^Ai@voFa裏;36F@S@C f@=}Cժ]N@m=3-o#1N''o&6=4$oqkg|ߞ ƩC8dt8A.3]ϟ#v 3UިU{g;'g;*w ^vezYwy,4= 4@/>YYQYp( #!tSx? =m"߾ލ7MbߥTMm nյk7AohѸfK/T67sL}m۶ 4M 4& `iرnРСb9-|l٢gϞ ."f*Nq\cvtv͚1u<۾*+/׳ff2eyb{Kl,,sU2g X4v)1 ۰~}g'cڹSܱC\lof_g >3͛cc`?>pƂmۺՌه??9V>;7^/Z 7l08ۥ}'rSX&{6mTtM[oKghhIM 8j]^=]n]jժJ}p\}-\ФW 7ܠ,X`:W#W_wuI&/'N4{ꥯ*3V[P_~eԩSG|zʕ&QwWo̽b2Ox{'M%OG֭>uwܡ/^l?S{N?`52W,"x?;m۶q7o ab[n|wgbe{Yn]@CKjZ p~>f5xX/'f=Z}ݱ1ZnmƄ`s[ZK.Do&Fu ' g>Ů ~3 @]f8pÇ7|i?~<3t2:ҦMϗ91N=TsX5\'O\}0>3?`]+$y)r^z|{b? }OQ,В|vءkԨaX !k=4eȑ# 8uTsO?k֬Y>}7 #7nyx=fex!Q(@g͚eX. Âè0 7UVse9zǑ޽{w}gF f:u2bnbJ*cȹ۵kg>/^On+Xg-a0D7>3/~`ofs, mB - A} F@G{{s@cQjtI}' g!C I|Fϟ?__~冭u|F2?1$qZjJ={4LwW)<xV p8pF]ti,В<&Ї 0lKeQʸx07)S @|A,cƌ1be2@>0YbnCZNJ+QGey~W xl2v9 V  d"Νkg5lO?mI5^Bs1fH$ 1?s?P"XPi$a\'؇U̵b^m2>?OF{< s t`&Mҿ ';?xVǼ5~ bs|*$0?tJ.\j-b?cS?l~DZ" 4 M=PÃT0`/e9s !-̷H#k֬ 8hx_"s.࠾syTFޗ1pk@HƩa>w'~ ҠAt3W1 AC(>7u:c !Y`0?B؇T~&HcEgZh,ВZP V&XG:5&2,+3N{̖e3 i!V 2rtCOa.cx~{!kaиŚHBf. yRH :! -Zh%*#J7e 3~h6sr˽sMkC -,+ !DRXz;kzksEWDdκ+32h!=Zh'D eW^`u~>S}AK@C  vBKՒHEw^eK}+.B -BYF~$D%zh_e異^ѸAHf!Zhɬ"Hd@+8ڱC@5PzHDޱ@{Ym՗mVɪ} j;1PA~;gq&P(  v#IENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/graph_8_ex1_spec.png000066400000000000000000003062661153663664300250670ustar00rootroot00000000000000PNG  IHDR^5N pHYsaa?i IDATxT҆{%! kpwww 8I\1 !n'egvvvvYrڧ>̙vUWW+ $@ $@r-}H QH H$h H AH H$h H AH H$h H AH H$h H AH H$h H AH H$h H AH H$h H AH H$h H AMZ)?#gp%דH v+@!W+߸ %@&Hn*iiil2Yv|z~(s|zYo㏺_~% 2>w.d-Jի'?vǸVSzy^N{gt^ݻ \1usc,_\Zn~Fݓ;w}_Eݱc|G믿UVI۶m9枵S^3讟wo?Sw:tOv1Q orڴiRR%q^W]Zj`3g\Y)/gwɒ%QVeҤIi&4h>'ݽK&Mu^6ɓ'}O<x^b֭/)SH˖-g ]m6YN{?%ݻwMJ6m^ xmZ͚5x[l _֬Y36L?w^ޓvx}n Yq~֮qDO?qD]{ ܹSڷo[bEx;BSN+aرQҋ/(5kosl'?Yg%v>[zGjժ%k֬6rH [wnFFt9+Bѷo_}^'L]W::tsyny߬ճgO/>@,>`u3:Ά 䤓N/ҥKϖ_X~}x;{y[j%O?tYKп9qnIzzWkRʖ-+*T/GZ#\'xV^-'|,\PÎ/b{q%L /%B+/ 7Neyr-r9ȼy4LO?t"1\/V̝;WCǽ{rO=T''VJ&__-W3FOe޽{4=\y.4~^ύ/AEѣ /Ԡ"q gǏ/v'x/Be3jԨ&oF򧰞UeBϚE9K/Հ=gq~~{PlHpc{ 0@KH~{]| !4bĈAv\Oذ~ޫk\;s"ycモ;NPt†l ҥKk7,! 5>?#Y{g뮻ϔϞ3ol8̙3G;c LIIc͚5eƍ|>+VMh/0[3_t߿_;E^gwע wpk׮* JB%6)ி>>3> PBڿא$a3^$Z>{6|ذr}_Y-ZT2Pat%Jc6&xc233A6pۨw 'aܶ_xqlr*uzx6V0pB/k~ұcG?g 䯓uci F /{ 3 [|+_B~ *@-ݻw6_T\vNL+/tX|qE|p\ ly|YeBqn7ė V6~&WdI9^706oެ-йy:s$拟K;#Xlh-\1-:ZJlx %Ry}oV9;0lJ&9 ;lyZxrFOzi9H|B}Z|f\=вvO2q%O]|]vܬ0NZL<ёGD+><=+^ގG}T{7Lxm=ݻWA^66L' mwGw;fÌB|no(@{|V?7|nc H>PbeK" _y ­w _@ Acŷ@ 'tWeNPڒˆkq,%ė=_NaK~,xJK/6w}I+/VRf=zП_t9ٰQL,}sRFrek(ta:=3g B -g|y{,E~7l9USw( rτCv>?W>0(o6j[BO ?=\y啺`6RZZZ\9NNSX?k}tS==z|Os@: 7? ݝnZtKQ2K}4|ys/_iAA5tR\k'ݸrJmѭDˍ t/Xː/Riy χ/e _Zl|r)-w=f?-AC x ~~ZI s;w/+@(l$ELP]I+v^%>f#`_Gҥq(yZ[>?/Üku9?AxMRX}(]|s-(6|9@,F67 %9䳣{>Ru;@J(lS6o~F^cÌ >?zw E~_.؉%'x}6VB ϲ䞿?vώnb~G6hJ qv6dxq iGMwEAZ aܹ,NH0¹ȸnFb˗a5A^n3_ξB.g@eK+A' rgsѶusN뒟<r}I;=G=κ=6x,!@z '6/M0)l eI:('g$6{y?6gvXn>b]C+ >wF~O~1sADN60\lDߑPɮL+6/-]? wūYC@s3>P$qFaA > ɏCVl@:ti&8\r(C^y"Itv~ o"~<6*A@b3߸ܿx?ؼ~Gӹ}"~|4N>=Ͽxsggzq[Wv¿xY#ݞ{_O&??O8ܲt{dv|A;4x=suQ` s^ ?#P'~΋b3!=d=~~w9Ic%h Q2\C$ll/8_yO~tN۷OK@-QGƍa-?u9zzoZ G`5"V6%=9AQw!7} bv۲.1ޑ@K@8w,?0\f82܃V}-@y[.5@1F;+N`|ib CaDu[*'?g5St A߷e`얓}X/߰Βaovo;E+o_K"[:~,֟ E~fn9.z[ר:R:~~}'>AXzcףbo7 8&ЌfD SF}́ėhqx3?fj!@0 ukwQ*=e?Q7u}'Q u\gQ)D)lW'PS8V o  m 8Zv_M1wquA:^r; ˗r QW)u*)sJ R PJr7 eT%}wRU2FtUJ_G=G먢P1u}2,u^Tws+*-g,+׫KQ!7@y-wK]q7v_Yz[Us^:Xa`:}܄s/RG9]GuXF,Er:^RzR!) TAhR)vlr nC>&ޗZ`p꽼+: '-hVZllJhݲ%$]jLahwoL9K@23sI+ouM*$m!QbWuVQGmx,6>}:/X xyMGYhàW@`}6t7A!9C{b>?zt=$J!{4^Wrj\:d˨>r9^(iFE_NzTS jtV5ڡq0@jJUZnPkNUKkש[?x< mU/ !^ukQ}h|܉A 5SxFyhuuuǽhQ-4Z㙵g&jO3кIxKEn9nkꬿ9MuAR=tW!ߖx, `y/<:u+5ˉX]QǢHs 7Eyw\JER9N gzl9^(e#Ta).ǝNHCy@]3#;k'O?YRJLV7J ?vhqn D s,- {!%h Z\+P:G?H2o-Oj hB9+Q= UkQşu ~ȻMOC7C_ ] } 7MQ.>]]>dA:\KQ@7jmo˛aKalU8GM‹v,^|@C-K}6E&b{o3GQwZA5Ǎ@{_-$fTg iq<~ =QYo{1z-;;2 w"A7LMAX65FA8.K'|lР j=ùS5Zh@vyOXP .!  qlRo|s.\m:Z8AVH`nj@  h`܃m 4^S/߃F {Ѱzѻu.W kuG꘰U? A^7|Rv>LB}멧dϋ/Jd૭XNC ^5EC=渵v9a> ]R**ZyHN9ZuY7Uo;@c!&`屰r&Os4O@LFcp<;?Q-cys$]_hsh=h-5B+Co-3@QiPsABC P }fшu2bx_KKr,ty%&# tݱfC 'aHkNeSFdڥ%M 6^TZ<./%0i6Pոo:vWSuebIMYߞcGcm:Jo]QJ1fl_P  ; w-?)_ HR$ūuWW ~[T?5,ʊ(^-aE< O/JFa`P yev-Րvݦ18/4K. ^pօ B]M.j1suf4B}UmJKpZޒ]nsi鱯K_{G-A#a7C`m2"A]_)3)=ɺBujהPWŰy{̖-nddE! IDAT]^:Zn|gt*Sd+[;t:%mНЦKvR@WHj-ELBca5Zb,gXzPNiPF>duce J e[qj\/mb8(k.gqyACdݴpYît}{(:/هI+rXx>=u-}]7g7Ϛ <}+>K`qlj9[Yq4u&3Q%pr*IYvz^/hZzhN6n,ۛ4I۠;9wv(L +@IJDB a:ohk =Z0@b^J 9φ]+ 5%:F}wo JK5Mk-{7,ĊJm2Je ԁQ.\ciQ q JM0jC(g5NPne*e ;VUZuw 2u@ d )HW?4 @eLQlVMWPAwV*MoY~" HRvn'NQS2 D{66_.y֍jB8S|+}v#1AE;>Wi].h֔,Ɩ} :NHU5`l3ҳ`F ]2 ADQ*{N9dvTw'suCV 䔮]aݏI(]KKM~];x:MNЎjvr|(] blkS-t?'Az:M'G`HlEm/2s$bEZl/]:n a$%?KE 7 [$ohFRA;H\ZPg3C ACnh W"E. a06 S? n` ,J#4Mk(AZhwXy#stu_ "- Xk q!d R@֪R{=uvvd=U{Ddq L,<1Lv ZB]ҹh .^f%"L*+@O:I2nU^{l믗W^)MJ~2  HRb@Ԧ$pY a-2P Ҷ:6"FbQ'-o!  O}Z[5oe Gu…[ֽׁ4cBH4@"D̢sXZ4F,L䢝P\(!:HMAM9Q[<_\7YK2ouVh?48XWoLå+D T -*T @"DWa52paɸ2zᅲegbK`Ha$%Z!8DB5n\n`6뇲ONvl(,%$øxEyLg~,&+J1YU/h黶|[Z˧w]Ul2y\ <NLqN/ `3щAupmӵKwZKU :Ua[hNwÓ,ﳛ(-Qma0̭ 0*%еk̕dul=~ ui㎓i#@IJ ik -xRԼb3:dCԁ^\A㜓ѽs*ffLkp}["I]e"e:5IeyFtz7X]-NkZk a9ut> A*9_L.:f 2"Y+tMv9}`͂09psӼ]n_4X E͍dp]4F١0&m$(}fb\&D¸s"s8Fr !Jfth\f\.ZlE=1;M ,$@IJSWԢUZ()j.Qpk`FVKO60a]b ,z{~XZ,Q1z^3 tm{Ъng-H uO>9- 5PSyd_+ (`de2kk3P_ PNP3`##)1l4(.,DIP'e239ڕ(]f!2˧$u{4@ Bdrmibz$h II؅۠*U%xeB,j>,Y\2Жh{lTu\ N)2CƵ@Qp@-R/as> ;d#zC-x7H)/oAb\j&R Vj1tܑE;Qq̄C[AJ(!:mcH`a6Km M YwCV%p52vyuNeW5x i1:n^bݹ2Gc&%NyGQe2ЈӚ1is8ľRXcQ(_A_@A,a$% ,EZFMDy@eXhfю6u \dV̌.9@:S5JQ*p,iUz @ǡ}(]ow||$%>UBTj@RX Vĝ;`rpfY Ӻs;>uW3ꅙf<н {q-ἤ&:7˜H^· ЂjJ j4h@"\uV$S u((o PcVj֍ G'NFU;2zAG}uvRH\;$xfB1xVV]N}Xʘt<V:+@ $)1(ZmQGB+fZJԪCD4\P;w` ,XOEU~TSED6TZ uVa.sP/'@yӍ;B̸]I&Nq&ޥ%7wx.Үr /+1r51byyRf2k+̷ Di :`' s?X`gpblGY8܍]./ gG՚BM.:c&#&g*@oN@}0wo-@ H@?xjKh4t 4tЖ+pcLje]8 :ω*\TE5@d, };qL0͞ngj\nn,xS$ NF'$-3!ِYa5m -f-=YuF RAyQ pͰZ@AǸi{hOMp~Xeu xk[2"%36`䜢 b0 / vi6*}n Q/ݬAK. Sx9.CenYcY%훬<PU2-ś.>D\ҝP3(n6CgňAEunsTuLP:O ~J t'is8$%a6&ZI -s!VtXmaM&jq -8T;<`] Me d .:b kunY.9BDv3Cֵ& Ȓ;;$BxI l,h3"z-@f<" s0azY$kPSEKc)zd@sJ%h&Aɡ32ڕj,5Irfl|.Y3g{IԖB]!JK K\EzbHf5:Z0hBfNF}0A@lYojJԩ#kZJZh![-[mP&$%ڕEOмCƼ(j䛢  qو28zD6t-/ZReJlܵ+:0e"zyox+Yc>!WF{(,C^!%j!^a#u`_g{l4 E`r^5 !CmN]e^~=uj<* ΕkC8woɎ0l4TR\,VP켣)k2Յ;@]9;>@L2EJ(!<瞓+B^}UYn\s5_{3% $)1}JZass`f^6]3, 9 x"qEl>F~н1!.mHgrݨ5%n4/Ux(t篳;4 _VD P.Ŷ챽mau&|^Դl9%MtT2yK3afU2Y[]ŮmK+yOJK0ѱ8LN=F"@_0nP`XjUyg2K:R|y&!@IJA)^jKhhQ`{GTo@z/n@ ;P^ =%$=M*rp :L̔f$OFr0sгbrߺeSFpېv’Vu /Yej ,? 7sFXDE`Rubyq6HLϾӞ05c4]&H"9l?,X+t<#)}–ܱ6(`B mso:r@LEg!,+09Г;rr4_O>TF޺WmQ8Ä 2&:EΝ;^ 6[hfng,Hh2 sL*!=&l/u?i=6j),9u#yJA>"@_tsCPέ>M &?kժ%{Rtiy 4 HR-?`VDS%41an5x^Y#/gf-xZ'M#&Ǹ9DwjoH= @=8@LYi,zކćj тv#} zcM 3T5f jmmuj{h72(l1Y-ĮX9N]ŇHVΒ6LӴoJ6X}9|;:LD3oPB23Bݑ J*/QFIӦMnpH| HRb`@;JhFEQ3LjAWD|WT76v'@se%m&̟'4;/~b٨FwY*):ygC`%yl̻F t Sotit֛L5SԾ"tu\pljEu;JYy_ٶ/wXjִ@|ˣ!>DHi |Kj)(J to` ~H7.6օK 3Rd!重&Kk%_S nRVUJ9)TbwtW&TA?@Gֳ@]`x&/@IJ\唄75{)oe m"Fv0|2I1ӏų>rBP;vt0u`aP&`hi1#t߰zm>BtPcyF2d"ʋ*U9c'#|n3gF)oS9NTM`.=XG.LJ?ZqrKiU1)\f:hrhIUA(:8: 7)HDX[Ui9Y&ERʗD B*e;4_8 HRD4 j,jZ-Q#@ 3"&n z*`f18'BEͫJ˓nH+9C]nƞ7ʬH K$%=\\&NV)U"-jTZ)\.9r7 TU*r.9֔vI@>]ɾɍr(}9+AH.I 12(,r 0;:zp+H &b.v>'xFhqL`#`u>%;jػlDg<U?=&F pRQPk I@ 6/(Z8[Ԝa<@ nFCY{dg~ųыpş: Quɗض!1OГ3#vh׭HDWqw1ٌDɫ:j1]%&P?P37te =C`erZv:Jeaz" Tsl\37sNAIMt@O0ۿa*, Qi[/3p2evX3.h m.\Ză(~ #] q4DW!3EBieE lEE_&ju2u@'ՄְZ3Fkp,)ϊOsuns,\>$?Z"e!ä5:NL@ѫ5AD&w}8n]5/ @;~hۣ|f,Z-s!P:MUKuN@0;lE+$o9G͇2 oshyqdLPY @WZ 17z4@ $) [z]NGD"j|uŰleT{pn8(윝nhϯEu+#.y&M`Rh,Dw[}n.N,IoXC)d f,f"J΅h@ٌTokt m ֡6-iw5`h  1Sqy^6trnW <pp,@sFI@zQۉZ= (jBQKEQ5nJ T˕dn ?c Dv4bJe'df)H3-}/LF8+z`] " ]hgѴ< :*)1]ݰ6a>`%rF<ݷ'gA xt8o$`P :Q[7x.<;ec> e [Dn_sП9a$%MкJBo::V(|OENC\D{gz}P Q׉*~ tZX+D dB-3YǀVPoEkKD>(&Hld6a,Y-h1iF2F9Q T@WQ&oG1R)0QQCtȘ!@!,~ϖ݄ypK020C@ 59R4$%>IhӥT5X+ZY\cVQcL02"cE}bwc240Vg2ͰIf7?'s*}F qC^kQR&vvɎ04AB5rq)"  uʩrZNN=-_),@pw=l4$"Q/xZZlNPԒ4Q 6[DVĝ;A33ڍN7:% Rh k}29vf7JUf:L M=%J+_PZu²kM @,/ ֵR,X%R#:X>zƕxցDRNWƾ!:H J˔ZB42Dܞ,@t`t3yϊ]dXl4(޴B?{Е2̄LP(,liƈ=#ѥ[Жni߄S~/Y=T7. g7t޲W2z9(% ,U7 '_uj;;(ݹ<l4:Tz;%&N_7څ~g7[+tkv֧ӟ듮֪ܣUF).3UQ9]Ùг|Vz| ;: RZʼn%y@/@A V9Nݬ vR?g,&@uh]á- Da-+RXb^7X5 e梡m}C-ӖfSZ52l-dCiƳB]@.[f1ev_!m>%]Q|cD-qb&X)u9(Fk:-M 8XŦ+ 4D]H` "꒍#fNҬ 뺞\nԹ&*,T!XtI- 0Ixe ^z:JKx?\hst]Gօ;€s(RmSqbڈs@@t< 2 L `ё6Kp!JmKzwT;:'>N#΃}f 4K42DDWv9vw$wH&ܳg[ڴi/0.oF/͛7Gy$|@(cAXj} 7lZ]=:z?υEA Xe9o}GԌu@e&X +n(4Gd:Z-UXKhE>xZS̘iuJk8VnqÉO@8(g]g.`Oڐ]bP6=z<@JS+w6I瓉Mӵ%k\õ*9l3҇mIj6S]trQ)EE8D8hy h9Fx{+@aB,e۶mh"ywer=wz_~ /_/۷o8(z*KD-)%j% 4hDծ\΅¸rKt٣bKXs_1|Xb3rvQcTz ctxY塙FapYf]ه}eP^KR_J )a]fd>mű\屄^ot=>0qe(.z\kH'w럴=%g?jtB1<E-Gyҫ#-A.ނX.=χEZFO{e2Yv6犝wF#FziLby3F@k/zo )=;q^CCUՀh u\Z/QWg?ӿCexe7@kX@@o)&uBm^b'$9 ȧ~*]wݻWoaÆI=.3b} Q Z3\ÓEk$QL4@]x>xcB7?,j&w5Dt)O`;:u5zY7e@df"t既}l$謯EM>XS4OTop:awj[ Qu36A} `1q ?uWX*}Gᜂ[ko5i2}`?1D_ȰWm?i=v=gen~ &_s ?en3s,F^k-MZ&H.])&Tvӽ:YPobQu@Z[G.c>۹2 gxsIg+SpX=i,jYbLKt>w#YA}u5)pRx(Hy\T'ZW>. ׫So^WvPvX'>i{  %믿Zjɔ)Sߖ2e?k,iܸ>@+"IP_caz6po-jlGQw t h/j NFM!=@Լu) V툩mQ4e~pg<_f!sq-XǦH{6ΨX^V=8 p@Tpߨcj=>uTدGÒNE> cAFw"kE4 5IY<cwh܇*Cipqʵ(XuJp tip Buv[XNXx`f<2LWVL|de\>R]{j5hL^Bݿɜ. 6B’nGc4i`Q6SQ|;YEa#zx^O5\g Oz2u2 3 UW ҁRQc?\G5򪺆iMuO,@m]b=m *&be\r-;ci֬ԩSGT&0qQΕۭ[7iԨ?^>}Q=;.^ZPB/.@8;d0 kk`s@,Hr.۱@(wE'X+xutXT)3ۧN$Xkݱ\j ڬDZEzUpKn`U mhz}P5@4KsL  ׯ:rՀhRtC3hp+%{q AE-%ٌ>lg-?'^hdAqh!4-Mg硼b4]h l_`my½1fz6v+!ݎD-9 fqq.xjܦZi|m}ޏc;MQ'1uTS==$= xgpm?.ΣEIkj!pcw>A\$M鮭%ϽGc?iyDIWѾ@t7JxTMKevG3eɷu͛ng}VKJ^~t` JѣGK-G馛d֭zܹsv2 ŀ,Go8 ] H>2seC:7ê\ʌ u.ukk.1\0,âTf?Y3L,þϱ߈ P ľH3ñ!>oq X>A_E"}"{1cRYA;jC.p>\\7fLa[umGh8zT+M Er72֏}c-;ήb!֙iws޶CMљ@G w 7Y0N39օ9 7%ƅt-1ft>b_hL܏օ;$ wj w>L4-iXyt2/@WU"H럃Сhbv6EƲTR% ХKJ͚5eҷo_̌zO<7n()))ҩS'ٳ9RW^-˗זgÆ ~?rh7%|({P0C:MtX+"=% +Y*jGmâŋr黠$l 0,Sr 0ҡ{ ohYH5O@9{veI|=w|DHcۅw!L|"@l4"J@?ǟ} "?&6E(>w(?շŤ|ZLcdtI\-q52 %,{z,3ȈYe{-Vcc79 fE yqѻng}#ϱcDgj.9۾E $.` .jzikj&^?p Zxe@zЕ1FϣC;R ׺ewgL0AN=TYf̙3G[J7%?L ;w>F2X}ð?^&膓 -Da,07ؾ02%Y j\8 S.}Xk ŸL4&`HG: l76:r *Wi2"V^is6&?.dJp[I3[o98kI8(m]tjݻn(Zk1a,.Qx KHȰ#tr%2"9KX"mbDq:\G2zw6rѼcG'k36_vI \tfL(\uJ&7g1 1^(gFm̨T(܃( *h ˓'OڵkWZ5YreԵ/@G{6QC4h*@wEd}̼ƕ2$ +VѴf\(u%Tg˶x}0ζJԕ3aUk\32rf|i: ,F3`_LSfe2fDdPgg@-Q\IfFC Srd㽒z)-gMm[}\Lf|Z+O 4>r V\-v]7@;J=򤦎(3QH熇0(O._.UY.Rʉ'O*hsй('Ѕ!3Q IDATJ[LI_ IC}e˖zJ렢NG3" x@%?L7oIe"2 \2vhhQhbd(ݸjkMRDy+OZ`%R.z)/ya1h͌Kӌ5㘻2̌L̬N ⹤첮]]5m;<}KL]'&cRV5I +%z4@ zfԜB/EyZ.5u"2(sr?uCݽD]u"c2~A:Zǁ^z]LgF W6KM][ Z& C8&}{ڿVws{4}m{qqi"gF`%-גpl;73AYlfl*S3LYeiOG)cyq7 Ÿꊺ]ha  9(Y$&2(A0fPr p~:]}<9Oݾa?=uB%9^@k6w)Hf-unv? .aPe -TY-DGoU];oQtv펆d7 (ҁ]C]]<곓VgVu&j"Jmh>v"ւ=\Zg^n#ijCvf>@o0?5 m/]Yބ,.Q(g`b(1xTxϑEkXj#q.%cN^T.N7G7p QaԫmA:_6`# stGo582;VWz p3LMBo*i)JW'. _х.rO{z!A@ʶv0qlvV> Y4!ӢAJUp9*֙.s."Vyx <϶hQob \@v\]I$^X1Vʞ BY2ىbt2Z|g6F wuV.z(r"\ +6h(PV# Gz.WjB9Iʩ9ѽ6Z“%iզװx6ϫdut`RQ@%+(%`|Oe\\>4 y.|U^ݢKԵK+:WUU+NvWb!9-@@WA|h|4kKhf2F3#Xy(=̚hT&so- "hAҝ f@*P;ܻT:j:TX#rI=Sz͜eb #vG9s8%ΆC=e%Uoֹ1G.a5l]:(Igݿw43}Séh=BcܱCz?W+|ܼzU_.+5*孑ƊŹ(yO̐47q=dIt)/&j 5USl,\i@.p wdKVSԍ/MvTD!V!:vb:}=T_!#ipIx8Xl,ڸt[K`QOOpQi= "!Q&RBǙ4BIq Q\҂"xqY؆@׮9P1/مn>q\b6)DQK_:0B`%Upcoqzb !KSu3DYr&M6*W]b5H}Ѭg1-`MSrS"u֥PK<j1MgVraY_oݫ2K^+M}G / mDO+[qXvWrʒEsEqh|4B;\6Sj42@tt u[;ú'kI&حkg^#sl;U\n}Ewԑyjm >hk 4HO!,- pJ4Rį7Uv`$| H dͺ#%U@+21.nI@$4:/+ =(u{j-+stZC\f%PT|XTj# @PoQA`j 5Bܓ:tGscU(Cvb>wឭh|4B\ӡ6!Vsas`ٕDbܸSXnc~m uF첋w ThI{trl*ƈ7=~릅*EP_LbM@"m͜䗲*孉.} ~Ye\B7X*k@j@)kddݜްG;I=Iug*- Jy gM~SO؍_{%?}[L~P)@ T문j!.[ ەJPZ MPl]r~(ѧDk4Hy~VKPt1L/1ڼ{X_ٟ 1N,@?@_+г5FHK:\D%E\藀k`虯^-L.{Y1|AXsA&jWGZb*PDkv)DRSH^v23W8ʞkizR\BܹL⋺-wܸ1XXoZ۳HKGI`@R$KuV7m&@q7[ d1zel QvrTom:Q6Y~OƦ&l7MRb~V)5^+$Vx]uӁITP I(/B^ Na3g]ut\?q(Њ^@?F>@W(jzBCF@ < ݹy`a9Pqs;RbʿTPcDZb Y/n޾ۅka <* N&uc1$.1>tA4pXbQe4L$8o!E37wuhl$upߐT uzm0klG>n?6_߬rpү%KKq%%vWXK)N,%}&k%(Pt*vx5U*u@( ]|e@.vb ^\h|44@~Bt Bt6lq%P:`9niWf 5zH i/W[33Jh- Uŀ,R_gjf7nшEc`8 %(ڴm0熨0exÜ4AI۱^6x7,=hHQ{vSɤZ>V_±G`w.kqҭ~SRi %NiՐZB]^4wsI tKA\]0 C tS1TP/qGLCqCܸXQ9tX2 Mە0]v0D`SXwt`ZO*yY"kR^},p,LM'հ笥ڵRt$vu%&؈+ F"Z@kelžu&0{(g)KjXeB;"{#=/$/Ial0?K.^ 24ZRQ1@;2\*]Q" k@? +VD:WOu+1 :j;ۊI$3]x]%e@o-jLk~9 /7'бPDc+еZWgk1@+J|Ǎ;ٞ#@*j4W@٢NSJcʬf>sxJFECv1\D3 m *S^Ct5 kc*J4o F\6xN[ŠpR|/K sn3k[-fQ,ҹ#I}kZ0_Pۑ͊Z6+г5F@6@qݭZtay1l}B5H 8fNᠣJƍ蝰&$@XD{<Ŋ҆@zhX Ks gd: (2DCFm0R Vf5su_.0?ئ[7D>9=zZ:t-mV rQgY(֫z%(~7x9R)GwKkJ\?qXβDrGL&J@/WtMU({kG_WPn`|eLk07Dk}t+E-=k#ip@7NiQ_( U Epsq:C\3(+ϛ0?.%;K(O!W0YF d uuemZ` Z Nj@)u纑}ådƄI SuڴBT6HjH-tqSe @ ʍw@ky6pL^䠡#e̽NRԧw[WekOZq}c\5.QQc8~iS"2aޛ@ȣ> a܅{F= 6@{Vo3lCzҝ.,\0J42LKR /L(pWb aL|.Ȫt0f "*pL qP#Hݦe64SC%uﭗ):󬻘6mtEզ^ ӷmn3(_Sr:S U“]``c 0e-7JGU"Xe;s~((pk6tJ FrQh%PVt ν"iھ|~@@ W:XȦv (Fh(P~}q=v3~?h|4mY]Ϸ =mWuy]NuI}"Ue7ߍ3!҂% 3H86Ty]⑸|!7'54-!4\^i4cXNl,PAK;D9 Xl4k6h4( )UZB\>Z30) w񦳜+WuI'rU u'+O^d7-oT*DQ+})yx)`i!A?vNg1-L^rv' cuD8hH|eL䡯ہM>:(ȯ噍8@#"b#Jh0AD^ZeڢX`i*#)sHGc8vKpLKQ\Lݶbk\YP)6*=Is :spi$hՒd-4O&(`irDJ͛K̬ܽQNq2.`5֐5P)p! 4mK.NW2DU54o](v~&QDtp*!VStQ:>F)P~slQA23Sh|eN_Bannщ=zΝ;iرL{XqZKKK>F@@?@ZFUeUuΖuOVhSW(cZ+*Fv)j4Ҝ04sNPZ+Q;׃TR{sG:V+,ح<>԰~?TB )P tEM̅w2t}\zp~,8T7 q; 4R:  qQ IDAT%8}?&JxSKhw E?~n ({NͰ,wN8J:(X O e&$JD/0rnϺX]BC&K}D\c5k\??s̡Zje]F/=v옞Y+y<!= J }@d@'7CgvG8p e%z5ai01:vWbxLԔn֗ʘ(ׂ`d :)3|3mZkfL Cn;u[NgsLR?i汵9 "4(iTIUOߋ m>EcU:s;~_M>0E5Po+`ϋqDUEZ CpƲKۤmཎ*OZE j%@yΤT1CT*Wʖb?ޅ f w = G*jѴ8W*5jcԨQ#W^'S;qDܵ[Έ4>bn q "]L B uDs]uCT+ʰlu")bzL֣ĴS+haf챱vfq{R!Iup+feFKdpfc7s#TO-)?"QkL|v.nto\R} mfHݢnR(hI7;i- phBQָGrM\.4_ P QR*\K<{O4@eK_Uc[5StgCMa_CB(4k O$О`}uh&E WB=-ZH_AYn]/Yfy1ݢLgBma/Dn]WzJ4NYrA\`'@_̰Xm[l=-kNS$}L RNA?굘 :pU F9Rj7F@m&^lClrjUfr6*ޓk Oۖ-\)wvѼՉbYehuz!j]UvẸ)+U"tYr-n.t'~?=aХjݬfѽj= h>ѣj𬡲J*D=H+ ič)J]޽ۣh>E{0+N &sP/HL\LꉪxlƾK"[/aW00ͭ(CHzM-I557 C ?TK*ϒU<@Tp-7T0״L @ӂ_.K~Qv= w_>sf5 #A`(+Xݹօ{G۲.h^.W#vPׅV\dMtb C{Ns0_-ûpW\۵kG?8Kt?Zb>#i}QW.+D**[(\j5df7QܸH/wi;dU2{iajݸRf[#~'@}m O\VJJ;2Cu`/Cu<<{=a=p($ ;AD6#P_#7F%h֭4p@^sjHݻ>L>(Oϸ-12i,:\ l][t(s9Bw iYO4)U7`ͬ/5Q͛ĤNҐvkD_}$ihʔ)!ݺׯ׏i,8@#pᶩUo@@ ɁǸԪvF*U{ XeAGxp}Xt+r($@PaW`e&5k)R^NϷ)XSqo֝x yDv%nQ"r ܂y!kP-qZjܴ25(י\P^ ˋe}o H-DdpxWɅjㆡ'eE\7Ô崖B xU j\]8 D@*<ы0WD"m%J @& jVH(\ER[)nrP=x|~O Li1@CDr(l%Z"Ɗt4R`̟m͕^U5Ѿ34<͸`_w{eu}'M@@!L2*3onIkL: 2/Ǥ#uÆ+֜ Fn"{. ?`1bɥ.ҲsHh$sl&f 4pQ NDq9"sD;{`i Rt%BٕZQU@m.Qx=]4~@$lB Q*t @z#}郰j Lb}ƒ: n,=6ѶFߊeUyq}M}_8^/h|4.ܖ= U7B-4׉;s`}l: /s437}P Z`m;`s~;X[v9s?~]g/'UqɬsH5K;L&tRqѺky 0nT*iL @/<#E emӼ[[X]JB.:(y?OWZQ!.ύ,ۇߗD :]rZ1V[(QVOeSMJ]"QEU"3U7G/ї5@~ć8@#"jڧѸ)ތ m)al3O ]\/kE]@K~v\L.U$wsɇeu1 9)Ab%0S6.r;B %xgzŞN;5=3QXZ`Iuzõ|nڙ )Ro]D63;iP'T%9%AMOyŸq蕀嵲z\@h_05,njehϏF5|uzuGE8@#QUfQEi2 @`@PncW-׾́RՎFyzC{ܙ[ۋx*D\ʏ#bGw"U^>ǒ?]cyf1Y"ohO.ødùkJ3\Y?wNO< eR;tۘYm]+}]B?)g3RNe65K` ~)4Uu}-QX:h%YT& w V1t=? |j4P+LY ]5EU} qh|4BNt9YٸPj4L;Ϲ_Po^s$kgbM&=CyQySyR"+(kb&c2ts>#8@ʈ4>be*-q},AXIkLu .?t5Ǟbb۸ams:wLE^7+)ɞQ੟g#l7(Gf3-ͲJBz^Cs:Gxg4m*4k*U6(q QOQV5.{qΗg:u` cື!U w!R[DP-JD3f lzDeQg~ h04Yh=䨢eǢۇG} >ZzF};-N? S.+pV6"Ʒ'55RmDXMG2jS̥\ ři],;ot$.ˤ)n+U$6=Lpr0klP/@q1Lɩ+34mܹzUCTS,n]FPGF*4޶"W׭ 7ܨ݁׻jFq~kl N/QJU5:6`W:P ^*h1RR l8@#az]z]Swc-5O$hhU1%@m_^i4Ru h2@sH@۶:W74ʊ٥+QY]`ZqJj=>?{uP V۠guP%SYlw$DmJK5P\-ib|nuxs]׭z@t%UVs(A),Αs$ _P' rv@n e1@ڈ4>b SN%ʮ C\n)*]U<ϴ$@qHM.ܞtz.\< >RO-%?(R3م z2QQSg, r\օ;ԭ{ ӌ]'C ISdD;ԅ'+ξ` ev9.0u!}^Fӈ-*otK(*sB9:*DV975~PZ 8@ʈg:J#u9ڻ$>LVթ2{|T?7K Po 8 $R4d-j@YhJmR^J|`.\.$9}KUiQ1ggu0lƠ )kw`!=%lQq%!^yZmyNP$0zX.,~YR6pvbѷ6h57" J|=RR؎,31m뽊ށ_׹ wa-Tp@5UB=@M kݥ!9Tèœ}*GqpNW߼>x?(SQDXBl2o`Q:kPn"lb<)>Lm9V(McyIcmܼ4N5Ӽ0X}N 4L:;i,幈=i,H ' 6v4o KĐԖԧK4o-h{FrYǔ4Zj~i,Y;\ n܂3^: *Qk2IsըLـ(̤sjӮ P @O(­TTwG mё8@ʈg:X]qݻ'|?ǎdzi͚5sI:x&nGNQW#:;( -r'Q$nlJ2E)K۰jKۍhqǔ®Nٽ^A`# )X(Fe Pa\禺D}RyM_L)vFFGD1޲jI9n^zgcٯ4ek+!sfaYjL4hykJM톘_=:IwInJx@#@jOy+-Jfk&&@@g8&Ph֩PG=+#ПٰEm !C]6mJק,׿E7n4ϡͫSlu%샩cVkpP{֝&k1TD+a /Ds2wLI4w;؞Ǯ_⺷)3׬-5I \uncRV wBN(# Kvl}lc~: 2-TCyγ>܉|̅aMό1`R;\$+ c Z%;T27nVe}ٍ\b6[RίĘޖccw}m6Z g;+*Ux@ݠr) Qtu v`jEYT7a/ aY*Qr,q giWwXNafiIxѿN4ANI Tc:s8tlO զ\LZGc`P QA`rʁH6e 쟅w.`>"+&?ceYY=R9IGIӷ:1H>Kjp۔}86 yקPP݌I_~<l!n7^s :m5;dv Sa,L;#I%%v ?Kk/y555p{;}W]x; 7x|@$@5ahOQ[@z.г2 ￧ڵqgk5jԈiӦMtwc ّ#GRݺub=y%Juj z]0^X^r Q]Y;XUx]t( H:]@h!@p();tZ /IC7a/Fx&_3.—x\KosLӿ%@Iȸڧ5ۀuhG'b; `q1q8wי=е1ΌP<p @5i ^0 | 0ecb\r`E~>^ A0s.q ~؟[1E t_oKaE94Nop@d+>?1 Ǻ.¹H@( nC:ޅ4RnvcM8֙E~'Zx8Vz?g&q^SxwFˤ9@g'8@ʈg4\m=yo>zhРAgѽޫ(Mwիg"uO`uzw&Ao۾UtcOE)QtaEؾc(.+;k IDATs@2@roj@ nx+ǮŗH5׮cϐ}#k1=//= j×<̀2_5 h٨K%sH#FN?plh{|7M>6}pm ORr2࣮M 瑾Q C>on{p{8f!y]<ʵ.ӝȀ@G(q3 xuj5@w҂K4CWp(,F6bINn6IO(ᬽ_i) 8*ED3qiM~q 1ZDZWrq x[~ƛ v`nhʠi]X]ܨSI\㿸Ɵkp쏸xS,5k]_i箍9:sZ}1.qhxs-5j@ٷo_z'SNCΝ;9'af-P˷h!8;ESaPX13g7Iq~Ņ۠q)AKe]cXΓ6枡B#{Sŝ.ۺ}%X'DS!r|~ 6ġ6H+ 3?mJymL*Cl9Ux5Q-K`6/Iv"e^$o/3< 2m 6b{9J})76?_,6\alIarx` \ .5K9"x5?79ƁNFI%%~L &M硲= 􆕚^F=k6碾i`XZ(7 ^H68I`7hr.x")0ud2޻ZL Ү -@o@@c 4Զʹг,ga{bXxV1Ci/eXr\sҙQ7`" T.VGM@Au3b@a=y5" 8U$#}' FRhl(A穌T10'O qOX ڇ4М0D|Ty&2>6NsZc1+ l6ƭEL  q#^2n`K@:KY,  4{$2IqyhR фW+DsޅV)yy3Hǧ&MѶ}J5]e9v09Zl_? 0ʼ2r ҵJ?mk_>"QENn+f`;TV W"M vy f5xyMՏ6s; of[ǻRZ-*5Ke[w䙆9n[9 1'U~S<6Yd}r_nfsAƸ/%7-9-~ k%m(}QUl.HCnezz+{v(?73@---nݺQi˖-z_=P:%%%p:>"8@Mk)>Nڅ۪UujZ->2DR;D-Dx\[`?K*ŕE[) FT%xnti11Efcq.@8qU|*r,[N p=/0iPI5jaR9 e9>oH& @ssXMȏBc;p>j-eprgqj}(<ρ0y8SkיIf-7Y̵t)9*n`e$(p@|nW %4 6*@7H7MШBZcZnm}j׮UVM{x,]zE5n8yo%#'8k Hʲ^U+fMzmV;a[+xP'GƝ;:ZOP>`āE{UAfq.sܼ6 P׈[}<\'L :ŢP'{E <>_Pt_MDznoėo @~sB;p(Ü5o0N=QSC҂ar- 7%5XuI!4j!\4/;] snj,D\!ߩrɨONycñ'(k ' .%*.ܵ%VRBKswIgth1oșaW~Ոg-/^\浶nJ_z虾ߟӈ':"a?x(QFՉl{w)ڽ@:q)Pqz\R 6afvA])x]tDYrw}QV| e[ 6߁lQ3Rٞti^˞K’7/0Gc;BBls$.9{8=:d=9EXX1vJ3QdT.WDVrTpo7]\~̱'M^罇r!Y#0ͽN;ü-ї&ډd7muU+ao?q̟ϪP[3wĊ "Mۥ\Dv9_(~5:u(Pf8r(_-[æGOpm۠  qCPWg{=& JAL(3a]a-1c`U98Ke X~@*QAk92g\,Hv1fz-򙠥1S|R6 k32`$r QSyn  4 `M꒮ďg[y@\h16sO FB'3gi f-4 \e7Փ@[^ P^% k<Ώ&7FӀiqvn`~%@ P.8I]!M?츦|Rn* }w[ T:q}vW^'xBp*Uh)}[@m@t Z- Oy?bגK,ze?D6q}@UE}kT;O@juՅlXry }qf究VC=*Mο ܠDuoS:䞦f]jqC'S;YY+k"}hG[trRۯ4j3sr,y%@ ٠Fj{Zc#{}+ 2Xrmv{ v۵f}+wq9urBݵ:@Ua (>Z.Z*+=ӁF?}Y3з~Kq}CWq Չ+: +s'( sYe,@q;1ZLU\T*+/DCb~1>;ۗNY|RV{8m5Z,%mafs$輸s.4LFy- m.QbEf"vmA@F (AD5LWQׅc&Z'h@43h8%j[ z{MgՙDⶑ1-aMd P}օ,1njZ( ;en8#]SPDQm۶+RN:UqC 7?NR7.SP S P.Wo"u9]2\uKZy URe^( Pi&i{s&%'jh*Cܻ̪Wu:P҃,e*9-SH8TjHne$ҍ/2x< 6.@ֽTf]/}lmY Y~DtiiHe MgtG@q3p*DnmT;e*MwM;squrn^z%Y&]6䜊>-NT(nvYXn<}tFy> b|.I)?WqSk\SnK<}Q˖K&Kv۲Dbk~^r"`,S(y^jJ_@^̜cX>h)v3-཮+uw[Mh\nDSS~y4@T OjQ0ہJU9?S5qFIk)q[E?Vq GZjZGŏ8@CϹ fCPjU(:0GGEmvv⮷5`x7 zw/!qk@O L}E̛B4@?@/XFy#g `i,VZg1K6V&ڷ@U6i,!v[KLхѱau,!-|T f~jy{sƅ늎LѱPk X} p}eMxO̗/Pđ>7愞R '_ ( u+t `mp*Ԃ;U :Nؙdvq(7f.!qG|mi&%@3g f{8P"F=z1~[J4A9T.h/xBqN>w~Qn^Spħgg.@@{)B.y' X}֍kqD! OoŢu*Ddg׽Z Wn_ig[h^^vߓm[7CƮT.x.2UR/Yv%Xffkw29<`,eװNт$pm^7=J'qOQ/jC Xg,DN ESlTLڋV덍PiՊsSݸ)hRcK͚)UXG1)GrCkaЪ (^%O{p4@ 8@?;vЪs޽W&.ݳ@XN*1 Z;ߕ;;.: 0>XPW_3 _αFf[ vaq[(Z@w^']$b~ @n*^|E<(rVb9E3B]ٸ~S2M5#mu1zUw0`l 3<.Dj\ c1 d_w5_m Y{Ag@ŏ Dʷus'TDSW i+c0 dq\+d͔J{*M3sd;J_7U^^n o5hY:tQ=K#П.\0rsC=^ìvUzPt4?SJۿ^6?`[VzSỀh.,:b zGsL*8VV(Z%ͼѼdZsqfj9CcH^VuwڝXx[:Jhdi9b\<_Ln*wʔp$cGI5Cj*j(dB  (~+UuYouUNyp94׶Q˅J͙ X6+X׭Zc| QVDJM$c.ȠM/R)Zh{}3@wp88nn/}Qת]gi6̜Ո8wtjj[øp[ 8dB\rEA}Y;B\d+nme IDAT!EF'Mq(L݊>GyV\yvN fu#>y@O-3acPMT[ۤw(Ct N8kh,GS|g51_Ѽ^ǾGr:}rk͔ Xw{#9 {E(ÒW*ek\/˱Lgf2!El)?Mv3DNeM98sIT]%Ηc_شk޹&@)PE-o B8]e $&/7SH=41DBh1]g p׬E?ǰ @Pc7hG_ѻ]K =sn@/@wT@aߛ\b >^a5ev"Gr.;aÆn%P'Z?TJà@OD@n-PL\[/$Јpsy?6P 8/MQ7 $XID*E"{}7Ppܵ[eͼ6_Ѽ3d7ACgl>swU{:fۭU\2alcr^JU^vg݅Zpv@j!.A&}ѡk"UHu{0%5x$/昪G{̪`Q@{-;cN@F β C] m1:68@0o8J-\N@N$ȨУtڶg(UPs SKw4p6s&5d[VJb!eYrq7 }Zօk@咲 el۪F6Xtl3]i*`#m~ {HJR$K> ՖtO@ީCQP5Q@h(~!ffBI{`QkKn]g@JCNcRergd.޿.ۘK1|Xܼ,4| 6•~%ƕˑnO0E7>]A8@҈'4)77W%z7矧 ޠkצ/BS.ܓ>moN+yQ* @В=z(sQpD?@t!{?PjKǍB\^.A:_J&4!eE;\k<_d6*N Kv' lne 撞uT[Ȃ:3n,erWXep *Mp;@ 7LD.7B}z$]=l.ur$(|+̧" 23Ϻ?(Pۏ]@9]t0@yKBٔ0ħo 5@ 8@ƒs@]tY ".Չ.(I(6TԩP(;i tWY;(n#?bu p4VK †2`X/Y+ Et.iu90sK\\@\a;VٻV#9w13X?(8ex/3'oy u `=ݎ8h?:V^W q}i&zGiƍe]D^8{i,xØZ]_v&*:~/h'_ܧ&B+L܃Pxnm3i- Q^Hw학-xm@?2] lllqE3N)YXX X[^U`3vn>\Nf^gT+jM{S( zîshu:Xܿخ=O4:%*`[ܷ R(Ddkv\(ΫFtWuR *mʲ9-2+bCr^ϥ¹~c}_ 8?lo^i͛Pf @/ϧ` m2֒m+lZ}e=溫ss3]$/J[s;;ϿV0ZZIhE*tw *\3#vf_WeU>[oܸ1_FG&]VC&۔F֕ˠxd^PӔS շkf@4W`Xp> ;Ԗ$4s,R>\'``TUsc",Dk|?:E:M`J.Q La@i7NRP2. Fa.̏d mV_ɌTڼܦeJKr?;6=OkZʠn?JcŹӇ{AlI@D,ŶT'opg:H=.6jܶP=I"OSWlD۰Vi>Gtk1dY~k瑩Dsͳh"v-T87fΜi׫W,qTOS[#t|?yKr4nXO>JazW#@* T9xRujQƕ Tt:[hMr @ p3!(̭ umf4I084GD|S=cjO.+ՐXR;v3X3jT=)U&7ԭ7z]īU5U eR0Zllzv5~iD*h{3Z'av&- qV .GgӰ0wY*z)̸@#% P﫥V qO;7@|OV'2\eQLw;:6y@/~Zn^),15E&GQ}օ(=Voɓu?IO4ɔ+taaadhf%%%'0ڵk nI7ΜSQt֧ d]L,[rxgp`W"Ȥ@ QB(#\O^[ el/`)@ "3@CAu^@2sLyAg0?~-1[ X N_SP DY-i_ GU`nʖIt3zxE`+P De ]TޮH~" ,6֝ sw\jJi,,j6i3=pSeя86}IH y7[1TFyp&q}2Q3>Ʋ :'` Ϲ7G3! Ν;|0~ꫯ'N4UEC8uT۵kZV AD( TܷQ}k4]i, Q]BMzcq"#2KJ 9i\eA5f<6Y"΍?߳l{m-Uܾ6/ba`~IftTc4 Z=L/*]cܯt:% *&6ƛm#L v}49ngb.g09FJWql`$k7VC;RJt]/ADiQK.(*3qa,תn}y(k;e~do褈Y 5 4*P/8~^uݰaxQ:uqNF'v=+ ~p]K\n@5@qӸ)jFΐ~sl#(Yw0'&=<@-0f<Tɘj h9!T9ؾ?٦5О߭[ ;?8j_7u*4$a2~6t\i.o*2&\߻w eh/̃`pgFu "Tvs7 }]:w] :#Ƥ1(ܕ"bO'?W]uԩ/N>[nmeYX|ǎ~?[o7x|sJD½>c-ii?6%7s.hQD^DD~@ص3<t>DIPB:k6>@.\7]a\Bt+2lYϴh"BR:I ePCwDꆹt,X8kse.ֆrt_,?PlsK.zѾ+2s= &y wj5ؾkZzVp1(~OHfH]NT 괏]72-f8}:wghG@_@dY4b\TyyyzzժUʲtRSԽLn#pt?*~x2(ВP8>nYFTȖ+ؐd; P?C~cncʔ6ƼP#t,ADq:šOaoEPV@K{6K*IĜ|'M TW 8˶(c.4-NNTI\sDzcԎq* >#D U)r/GZVMxXU zU)?C(k}h:ch?T @S>t1.<:)˖_4EE5.姯d ~dzb_;]Et &Yl]θʚ,U9?V"*Bd[#'\FQHW\hCX*б1["}ԶVkF\g\X Uχ'ye 1ѥi܊ThX`V >z)5S*uEƧ8/sDH{8Y3 $[_m*L߇Gm٘kjZ5TWۨPPwT}e#+u1J4玄u;gY 8  IDAT\x9Y<^2+wذa~R U&ʚl4VZw-=l A'f!Tb\kiՇl/х8oAΝpi<›YHSf*eQG)P'f{^v䘍ȭI+sKJ_ԛK{htղ+ [%JzonjP2J/ G.b}[YW$XEG>]\oe^Wۭ`O+bdȶaOhg_4)]Q,^Bk}ґPA2,$E[=@3G'pd24fF'>ssNuU"zmW@}_ZUUQcnyۘDt .mӡe" ,77Νl)=h! 9lfI0dGXh=6Q/ZJvDm0 (׃Y6R@Q}I{CYJE~D(``v[Ы _ȥdpNQ>ld`"s nMPvK,oeRs82LPwK1f ߓ2zh?+Th :u*R74.`U1ޜrLnfT 袋tݺu%+ ]YP#u7mO(@hm]W-vzk| ՙcgAWlZ.JW*] rH)mB7|fi۽%eKHQmFvFXmؿ6}=櫵%Tk W((>-,<pSXńge#YMҩPv_}Va\!+Rg8U[RoSшŲ_@ߎ4L5VڿUZ5/xPn(ܾD!4aeЌ 8EٳgtݺQr'E#%l   \#q7x e1W*ʀ7Q*QWah#TѸp"GTZ!ݺ+CAkOl^Lw$H\ܠ>|_huZ}:wGRxe]}[(!e3#p8QF1cƘD;v0Aoྤ&@:W%;h`ʚDN,܅%-<&AFVy i\ؽ|۳}\qr]tl\ѭk*P%D\dázE/cn,A%֝mFz^@X'lY{l7F| ~#}<. D]KcԯHtt*ۛ*Uiί~+dOEJʔ{UST K׹uima50pumƠ" \ .HQ&kuVUΌ ?,~",_-9ZM#p .̸nي6]ucq]h^Wшt颧M?)P~} ]E'wtbƷ^njβF,GX'(kӵ\ƍ)Ql t6 4t;S\E 7/f1 tX@b\n]06Eoa>fW*룡%7n n]Ѕ{4nT kauۮ=ou 4= ԏ֥ZkoX lժ3jI;~hQZ5ŸMgi (:$" ssNFVG1UC&)SL[ PFRBr׀eG+]DF" jlf XG4oJ4:=|Pve1Ѹl:ˁ@R+\-;A}/]uQb,̔L{9whh Db+ ,:Gۖg?m-AD/`)?+5o+ZLQK8NqN:B"kJ\#, SG Oj͹sX5QkawֲAE]rڀ[x>t@N:US ,-EDo72= zWL:{{7/Bo߾=~0Tl"B^zm ͭ}J WsKpM -e]TpSg-n{v$RYv9_ΰQm.=E.ݹv-t|UۙAD LJ|I2ukLoq5Z( *ZQ[3= K) )S[ݩ\u5\(Q$N"U*x$s-VF߲? iǛ*2CN ΐ"\35 )A %G~Ge XmUb s@R?tb>e+65Wtm/uUP .nSCФH&e'9V GJ%{n.qOu @&ŇW@[bpj'?1Jot_;JM7 vōpۍG^Bu nkqsn*T 7ɓJw:ϳ GJ/ql^O_?\cf5&8(`n O@`t#(i,k6ߟh S?Ԧ6oq9OCxqr.ǟ$@n'-`T䆿[ }W@J aܤ|fڄgGw+JG~|5w ~_Rm6jt@m<%7OXOEqߖRj}AQu'ޓ3bf}*ʬ?@@׹ ?W}sV{y?Z=R=:WܭR~.+ ~";7Zéj?@3UcdzWn|wc=fܷf҇2rr?ݲW "5^}USEw[51@ŀ]PdZ/C7R w$[k *ʘ:/Mv8 ;d[m8 a >7mx!b,n eK=.aC,pyKXo/-Í~jg0ncqS3LJEBO\#)=;CpS=o(V ge:Lm[b6ux퇱}?{^V%ȚJZ.0p0QT V( #HskY "h(X!@&rx=V *μ) (븧\ǘ9\}}}%5\ {7yx>*k, cM@vsy-Ty`&$_H`A܌nmQ k\ P ƹ⼮:u)?$@i-{=~K97@idzIk`%K&L~QV:(I9b?Ϻ[n93hCt jnۛ;Klp'"s5nz\݈2-x^օUĚga6'\.롃XQmн]ט/*`:KlOTm]^s'co6y6v} WLu'-pmд S[z*m+V@$ŽѻTtSs(p{%P\-npQ 70AC%cy=vD0/o웣F**Q|cpǾT5rh*PI˟QT\?RTf*7Tho8``hbso4}:w]ю@CY~ @pvZt1-rn>?@idzjoMpnذ@.XTѹ~.(eĭ+DZ`ݸqc=hРi. w+#YYֿabV}G6geLkXA9ɶnnmDjrh 0b)-vC[lݽut낈I5rۻغlĽĨ[Z *Me5QW'sF1`D5(].0qM<ǧADe*9"ry1?zxW6rq{rJTH1?/R [)D%ڣFnD(L\ {vJhx6eky  =@gVj~Sg}^a&ݓiRAz/OL- Jj=N% 꺾P2 }c7'bǙ/'o2QQV2:0Յ@ݪSc5'4,@ʪE.rwQ`KUJt Es{F-M`jiǾ njPc@=@ξ6!sW 3ЋPߴ銹?dZM#p(\v`׿/B}5~~I%֥R~O/h1RBAm@[01G3c?YC;i-s@Df 4|cDmNڵkǫMk. *¢A9&DZ03ؾ3h]k7%ql-@/aq܍4ElgxU)ʰ=*u }Cl{H3vq>Г%}ŭGcxMulEl܇`l b*#1kHu4LF="%[A%MBJn9NrBoM 3A`SH@(HGs ;ڷ.iՀGPU\g  uZ:疿FQ 3Ì @O>H\ (̙2E5ǭᭁ00 XcP~spo} _#|׸)iM.^BF\3RSyROn_i\JK4vtmY+%P^=R6ʙ͸eDZ)1G˼P JbP?f ?߅߈ٞb5i ,!J}vu|5rM*(3ꯃNlJn\3UQWF|RݺT|m@"u0 E\'Ezb#zk5>Px=yDLQ@8nV}s!$15aYHe裶bQ cil p+e{<8KYpv@< Ңն}؀#Ӌtg ۳ ?: 紃 EvtVIKo:+q֪Q`a,D]OkigCcj h:(7GHsU"ب"۪6*J([@4SlF~%@W1 ԁԹx SxYg|]vg{ } }**@htֈ0}IXީsn;葤k{If^0 IQ`>'3O?oV0Ŷf+dNJܹm+bhtu.zOOc7#S@=[1j.^b9`]S]4mBnMz AGұmʼÌVytXtF5FP+MKXXWa/ ωbJ?_fٞLg2z++ VÛ#AnmTBݼJAou $]NN@t4.5[_^/ nꃔGC"f;rPWV@Mgo 3X)E0!sۥ:VpXmfOcu=+mjY @O>H\ ?k6Qա@}@<,s 4hQÖBj@T37"F}O:./3[ty(yKeNg-x9ո)Z!ܜmky"ɶs/]`9Pɥ6w=$  6$`Cv5uQk={xCu_?w:aߑ~ց԰R0(f^oU@Q~$P"Gc+U)QfJ.]U~KU\y?Tԅ[sz@j蓗/C>Ui-2C^l%|LMC"= 4[ VX7_|qpyvfp#3@}7n*j$mОJ ŷRlwkO1e8sT(lqz.ފ,ͥF4YckKMF v3KR4^m7&J/,J|ys^KW0TMiT}ly,!Q[7a1kyU1IG.)u ê2%CQsVޒ-U LeERҥK4D] KqE,"rSl~zk:v(uct<p~Q:sGX+XKg̵طaOTtR,aQ;ׂJV$wٱDRM_JJ%Ꚁ PyeQ PrG`$?7UpPź ]>)]ST"(Pc`O{h(˫HӪ:k6Էܯz 5F ,@Ϧ<:U @O.3)wj_( ­@QL\&(󙰿b.U{;uF;YUj\=kWKQl 4T|7ü5٢PzTrPM6infMi[4έ9r.]Ȅ袢DS涺>)^pBJٷthbT 쎘-pW:a_BY"7y_~ 9{ruQh,*_'ݢGmpc(e.L?c@bC  ,(So}Ъ/{Hguc\&V-^9`"Uu:ZfsE:V\bq 7Ŀl9xj|dz r>eY\hZ~æDLhD5k\m':~*QJlH٨_,1WOHX%L2ueQJ̴UޜΠ^< jpcexU%WI)f*nȳ+`+ey-Dp- [0VI#JYIQ<{xN$qo-Uvn?UR [[ _ = ?dvQR(TST\n fӨ?0gAEg3v16ӷRudȇZHq*4 m۵kg:ؗ\rI12=Ga𢶡6݌y;J8ENh, LM'{eE[H|j 8)S>>3xBo]eӬ MZWP *YܔK<^=HJnVnUU'}5\/U1`n۴).m73f4 %XAGmVUꍹ7+ty`DtvKevD̑xV ui1T" )x|Cy.a+@#&#) :4}i:wͮghG #( 9胴`As[m/4`믿D^{iOdF#̨[n톹У(QFF_'׼'-Jy ң&x.ߺ߲ x.(R<] Ɩw4Ϧ޸jJ+Yqu~ŵѶ9ױHDmBT\9cجY @[>qcc 1ms!Ma:+LOeFjZ|ZQ0R. o>- \VzY-3މ3װt!EmQHltvy8˙<>TwKTA5rRR~i\[]P%*4U ̭R.p 4W>Fǻz %$ۦ8A;fFeG e)^+QV'5_Z,AF.J !\~W`IYWؾj|^=PݪLwR ` 5wG<:27.(T_r4eyBS4-ShIDj'm$wo{,Fq.4wCZ"eɅUSGmե}{c6r]ŀ/p:9jF$/T8DerTq]0kVQt6y]}PB}Z lv@oҺ*!#̨bjtPэFYh4X/ԕ[ Vh@GCiVkF 9O=x 2QI$=ޮsPC P ,qJU\_vF<"MrPN}wLv 5ؾTH6fu&^ 6 k\+7Cx?6L\`] [/ڗl/N7cV24e}`+ܐrJlk:h=O"ySUIr taU+Їh@SZ v@ V 3dd^ FNluѰ4ri-DYx> j̺ݎUՔEO^'^Qe"\#Y2plI6?X)~>(mIfJ`4OcAp&)֐ڷ2Ѽ`fZr7Qz* Lv.}A]Z t囏/[Wonf`\=`]Lۈ_Bt[:芫8+=_Z̮)yx%/_+\,?Q% X]NDJqR'S^;nW} HvOk3zs42͌  iY&wu%@ q}%l~<.Ms~oKkCYeo{\!9%S NNKT,M-,>Ȁ|/@Ol$ ۙsT ܶn?/O 7`:(Ŷ#6ElfSĦJe7om _>Փ|43 wڮ4b_4m}vFF^Je&0 \RDn5l*_ޏ%;G9I\uJ@dϴ9d\42͌ q>-,+K/YSH A @?l4neK[2qdz]*l vUcU 'O^d9@3 :FQ! ׽'t^HW$@@m*_hkʮί JwRW4}ghդQqAY,ښwRG9,sh Dgb~`QN5Og5:+SgL| P**I Ӡ [-;[[ZXPVٕm\5/fm9cE'lnN3qvFJw%8} >"HYVf D] ^mXf*,İ%utDY_L@WWhz:k(`{P9Cfh5 @3r)i)$JwJ1w@GE* S>H1³lEʔ 4l.]PԱ DN,ƶlT}Vz e%1@Q_X5j;A|S@~%*&[ xjڷmj4OC22@sv]fƫ"y׳_$@򐭖4Ė N yQ}f;._Bt 9ql!\~Hg@ExW%h`噺 , aR^U >X(PZ T 3dd JX.]*t)-'>"WgpO VX\]=@4FÞA%_WԪ L}"3X XZRDK T05AJ+$/̀C>]PEywVP7@(Q6H֚B X_oULز' D*KDvnQd}/GmzMēsޘ*_eY] >ZQ H$E ޞQ42͌ Y{zSٵOOWXPT'JT$:ͩs/DDT}lP74A iLqGV&usݭ5kTy}VFϸn`)9+̬ym+$g58@>g6aq o9衺Zdqr&Q\3%DY;[/Em3TLq wJ-QD}VgUFKkC2JvGFV43*7 }PouC[Eho]?_}4Q`<4('_Yhw8 :2E~q]Zdhu @3rEcEP H" [ p[PMke{鰳qyʔ,<}(!Z0.nҁ9jw `ʔu}ZlQ7II;x2d)Bt!toׁu] HY<|Yٲ:U_EQy4yG~%{FP~eysM><]*+@.(h:k Ҫش3ZA_Xfh @3ríb(匾RXuQ.h[{@=ŖD&aFyMi3LzSW 5^=5+ knoʻuMVCi nOl 2TgbfۃkRAIĢ 8VaklB'ω]&sJT+Z +:klz}ǧHqZ snGd @3rå׺]dgej%@sCSpyѲ}",]?ٛoQ6xͰ(;p@9u렮k(X/>R+g @Rb> ]_Ps!x^Uz!Io W؟` v69 )@TO^T5JWH(SXFZV}dV]Zz-971Qݫwܩ9r+32͌*PX]t@̭DU.tx^a%h9֐H -SݎݎÓK/#rcWlauj궤Jʸ~ϑux˧sn_B5$,cEy]56nLWtf毱@v'=.^2+eȵ4̽`M`/^= h>QbϹ0׺Ͻ0W @?OdU\S%ADPoԪ|Ei-sz9u2 Yf;wq~**)[zzw謁[]ƖH'ja?`ѵkW]^312͌ pa^t~3_R/?tV-@@ّ LsJ#Y.Gn4vhqjY.-GfàD,4fg 13ʺ߱ui0ƅKfUYUKkqs4 ;\ k- g^EI08eJcк~csΑB.u Nb!17a@] Ph,|Nu! nƱPsxNc a :ە}z\ޱ  V:k:Wnktjzm97?c [oO>~?onY=hfTz 7߯rsNK QWufٙv)3k\7.0 \H@%?Z%Η?`_d3w IQ;+=~'-m1g)[VAJa9aIp40b?}ߙ;ѿ&zoNSRe<r~7ؕfJZG-d)A/JKmpduʠw9g.ce}LQJP0J0g_ǽq iMy nSWU­ZgߣUPkR[˹:T>sjk\xk֬ѯ{ 7@~dLc))u:n߰^pzqN^Y3:NlcJWu.\-jXii9W1+K;vgJo3~;a a Sh6]k~sAKiz+_tǂGκzc}uU(xSg/ R* *&@a|@>R7kHK-=k.ig=]0Ƽ/<Нz^WeXgۧU{ˎ뒭Zߞ:@ :Z\`襗^n/bo>8z#̨zu:Y:>ծA9Fښ)->H,l(@=c*t4 ˸Ix#հ qFea.\oė:v hQU{  Sp+)heZvu}W6*H'Nr`{F 4L/Mˤ8߇hXrK ̺=﹔ tE_-{"\*\EfA@lvyz[{VCe[ںlב۵yPԩ5ڶmov{nݲeKF Ό=hfTz}T?czưazAz!.k8CQ#-4]s7 HYe LR&EzjY0"zMd;mţL2Je\3S{5]l~+̗)[k.7FSӬVaA 9EݧQq25L[~-٘.v= 4PJJZIwQw7U7^A>]gH9jJAmP_Kp}*z/h(Џ@۬KmHsc:VgpKJJ[oe"p~Ȭ43*=>|A|"=wh=KWK/4 纐{0JTD;8}]i5Ur'*S$k܎*SA?~_ҰT ?X<6MIϯ__/:ԫO>9 A3*9}E92ՊkDU\&0LV@+u@'F3͆ՓGY/5\KrFa.X?:,>Kr=ѸUrUg:%:[P&kLy)@vyZwPyX{^n;ا^֫Bw(>E>$d-@@Ͻ~62 AL77.܇֏{ѨUzQN^&ADBBe!O0)2.ɕ $DDt*ԁlpSf7%Ѿi5Pet^s`B]4tT5­9x2[eaʺm{6#)q.WchJp+ruOQ)۾Vz5+/a-boMsބMRaxх{9[^YE 8>E9͌~͆^d0a޳gO|_AA4iްaCDЃa] \~;zyvvzY%J0.MRVm*D (B+=Zstj*(0FVيI)S0VWTdH˵eo0W7 .D[V6b8oubB js dDnbLb "辽 I-])=fҟ{Sl@o@Ok,/(~S}]}g}V_veеkO<+ѣ5k̞߯E؎VgZ է&mm`5-0N}ՊP_&y.Յ*=M1߇[gmUz m86_"oZ]#Яp<'w_wd=

    ͹cihlĈS_{'Z"v^c'2^n;.ͱ50UғwUzktꔊLj>#yQҗ" 1a 5\樴G FB\JӲY @}PfJ@Jo틟; ZczuLU `݉[_:(g?"@wTht}Z493h L^-b\|T\p޺uk=~e tW~;z7rؒZu.]$YE;cKgeXV$x)61R( rj,tc^C`P1VtvPug*U\Yρϻ[S=EWbmcc=x{ 6sw^9U\55`_Ҷpe?k2eNs<6;7O{.2ϒk,x eҺnc$og-c`fbn[5, ,D9HR<.+Ō}Y/`mao<[o^V~ 8>E&uZ]#Яp% 6mjٺuk}uyT)97n?n][A{atNKM=m x<$0̓uxr-(2F*Plrl\cs ϙ(טlБ5:N L -U5Ŵ1*U>)*@MWkyx7nxxQσB.@wCbe@QP A0 |AX d7/'[ovfh#i-i ^Q52 yc_">O=nذ>f̃K^{5u{9VSO3O>YN<7`SvmzGYHPEFEIZHZF۾-0!$z ɱ60Չf(V;z#N^'eU'0ҍAKoL']$' IMwQ w/(8LGhy *n~5Z{U(bV?쨃vLVCSw= L09"@+}t}Սz*hmh}Zs@_{&U}_8UWֈk^sB*fŀ *TTQTDUDD2ӏ DT5-=N<{{^uϼֽ.w 4[wdoݺU'uޝ͛ =ht3v5jѸV Zb)At{ZfFK<7D"Pxk ےM UE37|%"v.3L?*6ɀ׆Ձ•c hJJU \dJ}lzK^^U1><$Hw-&A2G:gdWd RG\?nX} AW_U^3>2-X#BXY og:L;l#*!"r6CCVB `F(%^f>TEWmc'G??P²e?ṚeX! 0>xIRj`&Z7+V| خmYfVWEch18jJ_vXYخH"1+hԜ% "DK~'IJe݇ "8v ̥|0.v`c7C$ :QIk%}K0*3IDmkb m ƿF$xb^g]D,k>t#XD3>Dt5밒1>ڞђsf-?qURƲz\3(z_( ?5iINҥh9ٻ"%XV0&1@% ɖ@4$ٹU~h%N7T~]ӛ١VitXoʊE7 #DhvLX GD Lmh엾H*4Vom5[V0+~X Kܪ-#N5i} z)h' mJzazlߑIVL 2_>337͛\)>yJ$o)>4?Qg|l3Ul/v)abns + hら3QYm奖K lKR"LbUvهԉel_w8;3ײp s,LSp̄y1Dm5s:T)(FkE_7W]] s-Zf,`+<->T@Mxn#aTF(|G@28>X#p f:KPr/+<0=axe!_n1c&*OS'@/:HNBº[f[6{DQK$UGH9Vkn~2+Ua8;)N::֝ҪX@m<(C1:r}bLEtc`zS @m0(,fPYl!eY.Gl'jRq t @bpl\#@g4YʦCwI )XE^nuJ^tyG}%(@J}52"+\&2mD^bL FXmб Rid3 *)XL}(ڼ9y"̝(Y@*L5j$# jA?Q1-dAf*b&r~*Wk'$meTeŅm6 )!`%-=QEgً>x&]k4Y$aيn6b.T2ڲ>@/ksa4r@VA{"BT6UvaH&~Ķk_V!&=І ו$u|ε g3p s,e.;IVeyQZ"aCj&0и. eŜṙ*=BKU dtxWpƼdK*VVEP+I7+s٧alx?CO=۰c%Om=xG{5~G .}UqXc=y/ W",]6`'1d|^l[/fSVk1B2f l93Ga b=:z W$|N]3@Kf:K$dL%vy]?5g+aa @/`p$G.se=hMt>r yy;yHg@9Rj[TXi2%q ڵ|jiڹ-G`9.G g hg}j!€ω*Uf*`*}Mz IDATǶwb.!A -^]̎p;K}UL~3q7i|>u_Xx@.׭CZACOS_*Uћ?) kҺ0hн@`=䒤zhOmk;4 ID4nL# ?{i't (@\^,@ {}5*@, . 8B&Bs8s t|Llo;8p.t([֨3>R༨$1s;@U(5*uJ2}3EP8XfF-!ۨheܪNQ.lܟ5(cH" MbQq=rfaԁa 08$Gsd=P{dPg)[21c($$2fv&bSjnK:ѰAdDG%Ut's_sPxUk)gs 2c-Ch 3o ZENL}J?@։R#)־d.reϊX%~ KbrC\"v0 D1$%"@b=񰒤996h93rݺu!Cmt9uAB =/$"#`JA԰P-g8'FV.TuA6(i#" HVZ82t^je;iCF//ê1M?_5 +l4& ~x h?xR>ƼUvJkܖþ)+3,}-ºPg)ɯBnǎ=L8/ xYhy"#R/nU*AQ;560*"8XkGO*V (˩T)4ch޾z^.٦د+q? Xne dپ(,6FUE9&sBAR?Z.%-:J_o*3ѕ _#cC0 :0?23% A > Wo!Ҷnݚ>33f vmzcPg)N)sg.\W:W @<=}N`K9S^d)&K<%uIpL4o$+IT"+B CcF e@+Zٳʾ@:^mJSD+[Dٽ}*Z%3cKm1[ B/7OU4]m)a( rEuIa$J9mv{q_iaT=_ĉ/O݁cHlXVF-T5_KLT~\hӗ=2Gld/SNZ̀h L"]mf=a>nVzsΡ:&LwDPg)fwM0{e^x<0R$pBL/8bI4O E ]D1?"n[2kDL7O,Kxn* LUz) DK-7Ojg|7e,Tm_%!wcw~oU;mHA&GG>PnGarh<<+@b;LѯKhX݅h!ɏĀ"zn/M@h0mLH" Z޽n4Mρu))9s(AT~h^<ɟzje1 sK D7fF0bRaEn*d e$ 3 FU)Sb QϏL8 mefs[k((=hePw$;͑"|;ԝbJgmS2,Tx QVQ)t+c;nID:<n=I=4#JWE)˗_~Iz[J[g@l: SN4wl><*C^6]s/gd]Eyv?| aM 2I< EN9a/8 T -xo!rnvhז/\Q?Z~^}"zavx'owi˰Y)[I*C$gg+#!+e1@f&SWsE߭=hA( @Wqg@4G"yE@1N,=s,e j{/=:йsɃ}kG^ݺLT9P &4A f@ $kL (V{+?LO:.)G-hU,45x/S󄅮3.abIZFi .W!,P$-}hA~mfe=Y¶.¸H0z疱t39fH(k,-\D\)Cݲ^^ 44Z\yI=~6t9uI/h1cCMWw)~2q5ipBMZ XŻg%XhNe} J;'OrLCE(LVBTE_h تc 3 XH'/|%B(mb7甆}s3$Hd w Q̘Pg),Ty:&kWngvQ,4jfpϰL@4x$P6Q|[& TB8HV$AvR>7j%{7Xw*SGBsR:`_}]<(l8v_ 0xr6g-#t4Ƅw1j%Y;<_B\KxvEۅ@;3"S= @o@l5Ι3~~,|&W þZ3MKĢ2Q,2 E?-?+j߶&@ln!7)G"5R~f:K$۬YX,lO۟=48"rNda0z,'G'MڵAt9ChgsYfJFA8U!ه)l$!ܖj];nW(b[ p"Ϸ֞SM",`pGbVw{ evG`ڀaGЂAjA\-|P1)_3WDM(sdNԬ޲e)Iѣe=yW3ܛ1Pg)^P{hРA9¶O(X(Bǎ%kJ-RҒSda(;3&6Eln5}R.@PGŗ[a`k"JX|a~mpl4؂n0@6 mo DTß+?) kڀ,= ;=˟?-ۋ٥ xZܟqNVz8]zU&e.LbC!63JQ@ cu5햃91Dxd@o⫷(pf !;E  *,t,&NUnrRƲN%EĬ2m(u.`EH,foPRe+ $;u< 5|FSb헐R[9Vgp6i:2ZO~l?n۲{ikzKp{*IZ^jJy \fHW)Ԅb-Nv@zDhvMh}*!\I&6#cca\ &S G@f3dj(,n 5%.Kmzs}̀i_ LT>kKY>$PVBIgkP̟~m̈́T>M\F&Rix93#vu>BDaJg dL!R?R݁9BEc7FPkFF㘁͊9uC=TyQ5f|ay[7 9Po` +398) :e&L${Y / 7.c\gº~9G+1 󟉀: \uBU+ULNvV0лٻa}p.[IEwgv><K5rާ`:A4L:~Y7R6ŪZ W4"o .#K}/3 w_Z 䞏E 7Dtgh .Du (Vڕsl$ǐk}xatAnf57 @[[?fT~8%[;mY8du}ڑDt$L ~b*GV1E;1;<=w 3$: 0:s,e9uU[&!6+beу^ g{a\?ه Fx-.!Tc9P ZB&%0H*jD#)IE^e֬JPp:]fHAbTQ``) @o0)lhxA48Zq.q1]O&["AJ"СB@WV@G1+r&Ѕj]IAtN^h6M֭}p 2Dܙ3}yVj;MD^%㏧ /x ԮM󐈄}#IPJDSn(]3rk~ԖoLoy> y+DHT, @^di&JJJ0_xOk:P2 n3ҦbӺTƷYmL7(N .`ǘ$!#X)nnˣ%%Ey*""()"\|1*J_kjF1l+fgZ^=||i@WW@3sFMzA47IMt!详t:ݻw};9uI jA+$h9|҂֭ieQ}A^ǎ~Q#nEהh`tdTyA&.qc͚:{H(PTFH\#Ȕ$b{TBUXbe,a'B͕UL"Sbʼ<"zXjg% O IDATW(%NgGxk_@\^9#!ՏZ C7@6`ݪOSAA]{s$c8K:K )Tըo@wQ5y_(OS~mժ͝;LaÆQN>Ge0Xot`i*#i1w yAfE@SهZ30-ǠCUͥ… s5kŔgl`2,"fn_d9%nJh/;T/4*b= CVAצ $`+~?S⑔J"c'IL1z GP}n3З|W@F׫՜MF2&ViCGB(sR쯿>l>|xǰA6yh?L3ׯ_l9vҠߦKb8˥?a?*N{.-8TU]r x/9(+T@Mx);Vy6 \SQojAGic\ƛoTL|+݊e&(?/daW=ʄV$J 82 Px$p&?lvz+?V0r!puN43 ?k=[bd ޡs˷PyY9}7tWѣ>#n@wQ("l& j:V0iʔ)Η.-7>8c>=r`W x{}5/,ʯ_5h@Kـ.zؒ i1އcKV ={,=^4I@!$-%0/3c$/DZsHLZ`-2m7}7ǖX L uE\B $Ukه3dp)6MhWU%B$=y%k s}Bmo "ŵL_PjsLK_k9NfUAJ]D+ 1 }?0Q5iy:K9Yh22Jd(q&  ~˴Z^Ұ 0yxZH vر ;DfwXƌ >]->p>qԩ04a>qǦ3O Xf>cG3-|{]RȀ=XMD}}1ѽ;-ۗ<4)Wh4Ϙ/z ة}ص>o63QW/ZЧlIXg~8}(h yC`=f}w Ns lckޞp +׼]>>7>ol*73;>r;Jy?t^dfk2`}FM|gq>VMRļoO2,gȰZ٧ xa^rf{9U`k M5f?3-aX²ScTL-5f2Ӈ4f*V3)?[jXRm oaתۨgEYh2a=.kT4038Cg(K/H}Gf.? /P֭'˗kNEEEzcc7o^L۶mKC o^Ff͚9b= DhסC߿ل`L(b^ f]s`@>ce4,dnۣ~V1(e|p9q4/ݘ%쳴DgtjC4jӆ~:=r(Zf'H=rsb>6cМ ÷G2 TyL ՙ@g06cB~݅quaoMn1j>&{<(7= knۢSӜ˼̕`@i3 q;X86YbL5W`m @U"=H A|eam|0S0O::2J?`l?Ы-Bf/iM#/}Jrv 4Kt7 قAyD;޽{w]qzA6 IGW3{Ie, Q~Da$A` 10M~69u ]'@VB8c =5f̘A[节ΔbIL˸B5a!-c+}x1" /2  n;`c_ ,`=->Zy 4Ng -d&,<k 晐-n3!ܕ&g@Tp@ͱ %} [?3e:gIPZiByfUU`XuF 6HhgM/`pZK`hXaKCƀb9_7 -2l4`>9w-&%-Ga1YTjI1 t-.˥iYH ju3uOO /'Nl/h.lvmFrHyE$AIC>^~ /N"" a\~dlU#9@`{ 0>/^13c~ne&}&)}fyg:L4OQI/&fѾ}i2!S,5"&($ͳ8#`3 BdK*γ3`8[q0I$~UZY+ 0aдVWd+늭VVR0jdE^>&@:>vH * o2}QdD 3Ыff `FٗP¦x}>!e,_|oWd`S#=}lt99R;f y~Y/[% UfR,GYN KTFT2RxORIPO%H|I:BBFe:Hh[o*B }4DR5r㪇fɼc cY4%MWHȂ=zhH GXxub^s A02Py7iȑR|@^Ϟzq-߰!y ~վ?Aށ"0~m|ga]I.0DQ$!L2V$ǰ㨩7#-o} ,HDCr& Ys`OTRck"9!h}u== L'c2٥,'P)?agEbȸE/.DOf:K$f͚pB •ĢnXn}6:٨@0s2^3 @>iC+9CrP;.ׯWk*Z*Hr@Kh?$­"ms 4+Y& jc ΐ}b_Ҡ06@? *F\ iV3Rmpl۞h} $0Z6Ӵ)rwٙ9B±*]e`{oZl+-B&Mt }mH SrUShƵ=sn6 HbfP # 51EzHu֪kRotIn=_C}8M(a6(ZflYdP-8?8DBhA|G#1o_٩EvX3Νc}y>ꇙ9Gkg&93'zxՀ%PgQ&Q(61<,x+=b8C]`Ph,/2|D =W]Nmr&5UGn/ʽhM@#sG }n2nfsz^78h 6P?z>iR'L wx"3.g,e9PBTV+4C1N~^D(IL+o?_dTZ*9P04ݮ;Ui絠r/v%s,e,ve5 X2lfBO1e+{@ d @i-D%K.!f8BƑǬ6i93B2@2fMGx>WO @4jT!{0V1e:8OS~P/jRq#$uݕӒnT&uorKV9vo@lRlց}BD*/ ]W_}BZ0q'A>! M׃Lp~`h-K5 Bo/-CQȎ>Sf 5q5uqtE2t!ArIz \jB l@ZdP{ՈU$-t5wV!YYP"ʂ(իWW꺀((g&Q#*>\;dfU}q-bq$4ծM\VDdJyWb6 oPutԸ76fL]KuUi@kܳv,pPg)7nL嚅p j(-c5E1 \,˩eJFo?<  3Wd$^v+|#{ 5^bm5-ӧb;X-.+@C}nPl206e/ @njM=鸜:tMG$c"h:.*Jco۶sVMBXT;!\$ 2{챬p'OL͛7alp~iׯ_C~B˵SX⾲sjٲ%}zXcL0M/ @EGs2mɟ NM|'~],@ZĘE (屯&B_cHtd1Wu8RG$C#G`[&15r 7迕M6\YjY&uC UO)>|7V()S?:P,੨xhѢEKnݺž'Զm[-:9~D)C11Am6Ts"?1>m֌ Ie>~ۢ/Cб@SU~ꀤ@S;aڷod @7R6d>ݻl0a;<<}]o #aP4@q?`<}Pӊ%:;q>ls;v,L,[  Iߓ%jӼ;c =Kz/d򏮅 Ǐc5|n[oUPutq[h?@I}cW\q}?^;9uɂڍ5aiӦPH2V_"8(x2W& {{Сv{ {8[a/>'m vg{#Gjb|_a%Y%->[=23MSOˍ @jv_V`[ץ^>Pg}F3?+ER7Ϊ4BE ڴiSj֬Y>ᘓCn`a\.JXnf= zwh{{ypE`|67|[~m2??>'|.H_~|nC߁Y`P1ΪUpHRw<(0e\+/35?DtnFͼ89uԤ-:\sa :tuU[fWW_؟\$tH Z` SC©7t2ǾJ-q"UVw#`/qoӟuYu:uҟ:th";HC{|?!vZ3e p.]t&9+01B;@Ϯ{ټysR3ΒZV_>޶acr 6l{|O1a>\0?zκuO?D'tN837O+R'D!Y gc q EP>35Hcr;O;4LB{ѣ1qF121%V{D>t$,Peyꩧr^z +U@f=om@%5B3, ߠAf,ԖC$ pDӟs9Xk&!-0XV<CP" V ``0*`CC@{ǎ+E%2HGW^_Qb?JeP/f'3 ܵkWyaL|\r.!wy21ҧOjan4ov m:Kf@%5y`!< PCYN˴oPFa5ԨE5jŒ2a r-'pf&LR vdPr%10{{@:̧"r"X:ut &|2iҤ3w9kY|F2?>1p.X 0A|W)<dxV p~6зn&,Bf}/၍0}g5\R5 y"zqO< 'ڣPA(,(݇$a\'؇U̵b^m3}E:HQq?5s0 fpS ';O{Af+ `nH@m&2y f2LC2p_ Ƽ+(85sP L3W1 AC(>7u&c !Y`0?B؇T~d&bHcEgY"s, "dVx+֑Im}I ꌓ{aFf̜Yf'H=lPl~d,)K{u36&Gw TAƲ?ݿqR5Μ, sYxԙ,ƻᆱa< a"'HFO[Bm`rM:{,%:wYesYM} $!s:AKgV 6HC ҙusΜl@9˲ k!r)A}Y PA<r5(&rĉzꅡG$  hJ.qz 0_ܹs1<\\C$JJﯳQsYΜU6ΜelE--1PzM?>ZXᄏ,Ja?DJ9Y@BQ 0ov E!Q axH, .вvLv{キ1EP3PcΜ3gY6P Ry B bXDT^= haÆLyZLTt_ezK-]1l!ſc6̱Pgbԙ,(B/YR[F!V0Sh<(ڴiAA`HR+~- K"4j(¸6PC ]X(N}CTHRh3g9u,&IDߊN-jAfEhAbNڶDh@`@"S?p hX} Bn$,] ƄT e&8ewyG3d^# ;cΜ3gY6 `{@,aUYP 10BZ+An%0D5D0hbU$ !3y<)$eU@9PgG+@sS/߶e˖Ÿ\@9˲wLD l!7jF׾>W~E4AK-`o 9B 1]- {3y@9slD dW^`uOX}{^5@9ĂXt-TΫuUL3gΜb #x$D%zh_uKU^ո:s.fU@ <'lL_8̙3gsKURM@ڟ Mt*'3Μ9s;;g3gΜ:Y|s̙3gΜe`@9s̙ 3gΜ9s9u̙3g20Μ9sYH JIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/graph_9_ex1.png000066400000000000000000003021321153663664300240420ustar00rootroot00000000000000PNG  IHDR^5N pHYsaa?i IDATxEgsw(bp9#dAsNP1* "w'u7]S3ӳ;{wJmtWWǭoWŋ/^x)[ŋ/^~ŋ/^A<@xŋ:/^xRŋ/^ ^xKԋ/^xxzŋ/uP/^xŋ/^A<@xŋ:/^xRŋ/^ ^xKԋ/^xxzŋ/uP/^xl6KSTNt޺8u`L&kw[lb}(xH3YEs&o&h @uuqx~!߈?ܹs_~_yt뭷7(@C믿1X+VVN,6mwqҠAmQX-@:uvuC?{o:C{#h…Aj_sv˻z kZuksVǀUĹ eƍG?X"/S-֫g[/tvo{ur?ٳge=z꩹BV5/t߽T^<@#:t(% jӦ wye]kݺ5]zANn/_N ,?8V4J{g8uGY,8SLuQQ >7h; ^sܺԧOrr!:]S_9]^{{w[/"L]?#(y| UUU\Ν/ϭ{e˖% xb-K ?X:to6X`m ӧOkGN?<}tW`:NJ]t ~7fk^]uU>;35jDGy$]s5{lz4{.-Z|ɠa{3Π~:zZẼ[}]pA=ݺu :;/c7, lmXúz*!C^Tu]G۷O]tQpuY%<\^z) 3a]waÆ *LmV{B`A!wumt}Bkܸqm 6N5X#X{ =;|pF4x9:l3mgBp0M6ݻӣ>J[ou4^Jp)\w9%dqppvaթ ǁpp-?g L2v} /Pؿ}~'x"tAAU?Z9!^{99k.xi?~po7de?^N!8UVY%xpp?p!-Xe~ʈoD|t'3 XGA7xcn={ A)x4@ ^ӢbF@ث8/{DU?̙ClMRԋQEkU! 9hX0@۲bᦃEkEj?6 ,`UcVD/~4:sW8ik0@Ï PLt(^NpM E{w N?: 鳬}|ʕTҿAp[@]x93jb뎾qa:ýn¶ } 3h@a-N 47pC.X.N(>Ql4а!hn ,3gÊ`  htQ 7!o;_Ӏ\a߸o`JQ?lrXӗ%x8%c#C KHSkcZ7+ ֒S<8{Z˴^]*nժU_9/;xqg? ex>4Yg r\gt]`A <Z'^> /K+'Ǧ/f }9n]sQ3o%Ki7"v(mQXBb K}q-P}oh o0ՠ%=&)@m,P4hU&L4`hr*!,*Z @U E'`Kx!q L  '܄ŵw UK>/4ꪃຫ ը+E ǀqo} K`V0t@ ǁ[  V ,%@Cs(y`Z/7Įna ,tKP 1.1kT"\>H\i<`@5o}x6bcKnd6? \vk{xFDe 8\`CП "rX7b ?1K44jQbpܟ!uFV/j֡׆ʡq X M.nܹwEC mбZ25W$R\qDu!"e `!C .\}\>r7aIApM`Ap>^`„~/- ׯ -/D5\3PyZU h AXPѧ@.3 {~PZbx&kj2K Os#犗 j $cYi9|u;X~zݧ{Q33ȸJb˝qȝ{]ZZUoԹFگ{}鵰#d ]w&"v} \` ۖggҭؽz>th ,ƸTݾ`TlrgBr\sϰ}TV<@!RnԱLߋ@f cNu歸Fy`Q55෮k}3x* !<ܵKɖKeK "BW>+@B "LZ^IO?^iP/h tZ9cxzE`?z.X%Kh9W"V.ΝzTN<@6S'*@uXH6n^ړ"֎녲wbBʵmRֲk{V;m)Z":zq`]W۴uJ˶>/m.mܺ6mdʺrKȾZI$eRlE9_RO+oGY޺Hz|ZZLj_kY^U \'){ԥu_ 5(lKs+)r⋴W"At^ܢYPqPX!`jjl/nd* AҘ X~K#.뇲- 7XdŤϱz=HgYf}MbX?x g}[ZiFIr֧7s_0t֧Y\.=z+HLjx%]O 9a`(|כrАu$ Wʾ}:DK׺X`'.kcYͫr8ϛ*za9<LB[dRN2@1#뮔kk)gOO8[ȱauroq*]\:e"z\e+为ZU bHSҁ J9C;zR <p1 E':thPe sF,% +ҥH9C~<bIТ|2/H4u:LeEl/]3ҀJ7[F[Y9G9\y\%Q,9{ _˾ޒgq(u,>JsX'JRP&3i( $瀆KY\9o\q}'K>a#'WR \O!u Pdzrkl `\Rn`DHֽ+e82#_8E κgʺ)R'KPSn1TʽoՏ{#3OUI T]0@Ob ӛKM$1[lAo/K D[|`m̉ ?b(λ1@j2DP[!)Yq4XDϔuseE<lFeTit??J?W؟(16vXPrL!A, Or|u˺[i<[I~rJVS%?ѩg9oxqL$Y7Ew!ǪuLr",~:+\~c}LK^~#?:1Ro{l;VT+q1VL:uzc/eso\ea3KY/z_ Ў i 7%FMҲR7=3 y:-Y(` EΕ~Ų_@D͑eHgcX!F!d](ۮ  Ⱦ?I"'J嫀ԅmMe?Âfwۺ+1hj5Ntg9wop~o>~Ka2j[4Kj[.,г%>C-P/& v&U8liXyV?J "ss݄uUg%:@VK!wa! }庌]]׆ݚ~ʶ\k# 7_Z 4 e-9r>8}K+x K,1ER7QoEUEu&Q>ܴ>jŵlu獳W .:q<0€_XEYTB XYWiEDhkTwbK+ G8}>}`%xE PXU7fkDݾ8rb.HJu])9yגc~cmw%֫u_UWmQʔrgv|CgT9ӵ@چ`WB` &^bIŘK:D#ls&ۅm10C%4*'`]}b ?P@;:3,Iݘh\ el_!H-@m\sG//µ:LΫ7ֵ熾\p/e*35Ӝ>SBfI w?^=XaxMܨZDDΕ{t)0G }q.uQ=ږD@hǍlboֳe!A')5+xT~j={ j]q_ p&uMLQUuQE,Pp1賜>_Be"}6 UA/K,1cƂ0eP 7 5/yT;WǍ. c #~ jBֈ plcM]0X$񓵮!:f-kHQAbQ_}Dek\ g, aڏڙ)2@_+d) %V}3f̠'˂ ;.\;NETӃ2E|~O%DI_e5dP*Hm]l"緭6d5EcL> \/( ֆM2\Rm:NGgW]N)~T?% đ -o @ɓ'nݺх^:uj _.=s׏ڴi + KB.@EWPRKKb+U"/46`㨺ov (ʤe܈tuQp쫘YʬY6N]vT _hRmpEm'3QonI{_W+S,ОO)MN)g~Yjb;w.,oٰaj[ n۵ka]>{P/$" P֡B*HХVRigRmwp]d\:/хQ~?\gY1:}Tm1)JYqղgQao)vyRmWr]Zx ZlrUx!sE$  P@rXtD(\Ϭ0`@шGNoFu~KӦM ܸgqF+xz% ߄APY2[Қ2Jˤ^|.fc_+T۵n;,nE:uQ|=$yT5]}!2疱Mc;hW{3jG]Q!ס>/QQ߳<"7JLh7v]SPoUU׊pab e~z k8=f|w˹m!s ܿ}Fٳy+}'K,Yt *eFѬG>Tԗbɧu uuQ9Jv'B˦F,sv"g=eETc~ko9/$@ɔ_n{@Wq (,k0@ʏ藬_1@<@a]nV4bĈDYh^za,3f }WA$nSO(yz)a(\DU$j>)@մl%+%gY]RAl[֩z'Nw-k*Q.Vr緞KTr^ lK"kqde@w!_Uehz)?iϊ觬_qztk׮t!P۶mN \>3<3օ<4 %\%WㆭaYPAI1Yה B%8nU]_^&8tX )\]F $~uK\'ӗ|OKK~ vP8lnXb\ be o8miE/]Gzz)9n5Ap*UEHQG˲`pK!pZn={]kapEN~rE!7FwEWR\0A0TNO$uύ^F3e?io!yQjzTO0@o|t K]d}P.c~Nlin]$^bI΅ cY-3̹tqu[SUߴ\4~lT[J*5>YV lO%ΐNBF/nB}R­ib~w%kN[[K(^bI.h[DF~KɪMgƸ.X%v۶4(NpZq]Q;qsUg2V[F cZ(q.)dT;Ǻf v\Lqp^R1Cs8XB'0@qz, ^BK\E?.YM%"]A[jSblW개>dfA~y=S7=LG<^plkC0=_X:f'u .>ƨȸl nds2nYwhOGtxg@+ ϴ:)%tt`%\H*QVa $r-Q0uVG,/.xmwU҅ۗ-G@Y%t:[8mhCXsn ƅ[oNO]q{p$]aޒ_ᔫkp[]Ȼ7Z]A!hᎬ.=L?2u]*DbR7Pn-'}Js,sVM2.ޅP%䂈CSMn1^iro4O\-r )4~p_8D/^XQxV[WXW0@zXSpUiޟՒTo-ІP/$ݾCy\]hnXuKu}O'N@V]{(Thsq+u_UuUE,}ZҢtϸJ:lٔW-X@w|kr:?@Gf2{,hٳEAsh R*A?;hTsaMPe{o&Ƚ7RfpyϏyu=R1@D<*\oUZF,JR-Վ[z K,CNJkgJN LL!i*S؏։>A'Mh  ޏO 6\f~ @ QᆫR ʬS\k>D;oP%\H5q?@|K4jf"2MN8/'z *oBJ9ݠ7䇒-.x6xz%9K)AZet5+)YVI:E`OJ 6+( ]ڀk8β؏Fg?`Y] Y(T- -P|(6[R%(ۨ6-9 6^r%\;vgPd t>  P (x?Kpjn?Ӄ1T|j-0[o~CUDI[zb|C]Ak)DO{q4[$Z / d tN7-&@nm(K \3eܶ.Umv4+94UHpQ6fQD[iހkK93' eb?r0@7iqMo P%X:VfX 7m- eO]g˩nĝr蟸[rUqMog Е &xmH΅ńCpj[ȘtoXʲVm1hҌl&|2}yViZ7(ꇽAƻA8_*\V_4i8 t'Klj\ Э9ݦ%K %^bI;1@9Jn]E]L) 0ONZH{Oۺv3c(?'tDYP1 Ա`ޯ Rb}*.YG[_uB^p+…pvDkz .;znCXs6@f4!SUQ )j\A eZ ON7x#}ݴhѢ`,N/Rl,U-Xݹc܈6hS2 mLKWEj}QkIW|_V=rg:UQ\E[zh6 Wx0tX,O퓤 hx;g}ه @.KSO ܻ}ݗCmڴmdWFK\D-Qbs~6|Vi!@EB}ELW!UW M,U~S!E:ɲt~TKC/=]Ou!H&v]6Hc7;y ¾rfʃpї{K]0ژ+tN(BKŻJ{wZjEC>:|O>$n!'d…nь3|NKr.ܿua(d3VmAMTS S:Ո]jN4U]5)ߢ-Ԭ0DGʲLuPk8Oɇw]_uwEu{T1,]حmG)J!F8]X?;d-7"Q9~6*M#|Z B;IwOPk@ú~]|y`Q~t%\ys=+!m׮]Q#<2Vf+K,ɹpց͈s-?@ې)tKKjCյNsTz :`qu2S "j{bƶłVw6Lm(K؞V-ltN,͹c!an S>A'ԔfxL-{)Z5\ wq /KE]D_}PfٲetGШQ<@?+vH:1U5P^P&Xkݕ-RrG@h; AuD`ڔ Hojyn`$@-ѽp[Bk1-ڋc WB5DzN_lM]kXU!]кJf tdYH@uj5͈5=,,?\+@J08hey֪t (;z#Y8"A>ЌԩS kaѱc=Cg}v9s&4w:E<@Xztn [(2J S7UZ jgLܷ|pƔcQmo,s!gč<Y*Qsg˲tKZn_q9kxx58e5R1/;)67dY/P3Ng&T(7q &]!  Y+G&)ŠK.k#<n tO~t'Xxdbmf 㭲gϞtyo&\wDݸڅd@#_%TA@Uu9v IݔĮ*5Z.(OQL`pj+價!ԅgޝruAWhVPۚ-6FdT S-PLwXN+=:A]f &#`矧<#,YBO?4 4(wgϦ!C GJ&駟D|MVy1v#}iTtO+(7[% .i y{1cۥ PCjڤr*56[q~묁g$dr[evmnMdY3τreޜT4ɚMuMt]hT9.i:\ f"|c7qzlhƼyY#o@sQF.orA^Hղ.묋CC^or~= ~}Y?+lҲn:t{ݴk5W.  & eEhq,ݴ_fT >z.3@gӔ _Vvpx>D~87o^$_|qIaEl˹@Xݟuoc{2`M#.{RW%\~$KVpNΘ ҹ<\L.i{OmCT"XS|>5-ӡmױ%nB_kh7nF˚Rh^Mr: ̲Mjʯc?_)+=o_Eil E.VTҶWu2k|^ɳ@19 9=Ofh:?eh;A_dYfOӧq;>Ogt%}bŊ I'ǏO|p1Zkv*7֏Rrw܎1FpA3aYsc[Ym0&|&o /1(rي;~x>jŻ; o :!.2,n/y/ᆛqepJGqNennlV_3tۯ0u4[h@H^얿p=܄s̺&r\M~57훌2荹mM:1ul_}ΐ:pdV> ͖nWUL!d76bznysMߍ>4T>}+}7yo|Α:ZooH_a@>_ Ǜ|#>o՘ׯhcp B.ױb{}~6u/z|L(u|ǿx5Zn.?X>(q^KZͺ `kugu1ǵGAw_N_fO+G,Psےz \5}uُ-Кz7^"t%u' (K So FPf;a6V3T2܇f B4wF~y7 /2о3V (aup܂-07pmPmRm 97ێ10ݎ!*mҟ&p7ͺݤ)Ҧn)XnlۄϭdSn+fHrSvM81=tc>Ϳ5ےɛbM-g $yM @no"f_7g85z> j g4ícUo r/6i#cn7o`uuk2Y\GFøL`U ̰hYט?T>&3ͺF:p W_N IDATB}t^?H:L ]s@f9 |\kTrJ9p[3@>T ЕP4?r^YH`b.HM?߃A&%Vr<ܷ;,0ݽ$w<`7vۼo2\ʫvgZnN6;J_>n*w54uKV]$G RZnk :`Bul/,]3~Vru cpwS+& ɍ?Ц))7w+y嗅w GuGہg+t8jCK=kOndY\@w&-lN[t 9Po6xdK/D uЁuF]w]ύ= ygŋঃ؋]~r߳ Dg`p}3JLpw6lm^icvMIew`%V"LA`SZge]6f'v7{qE漮yFi~ln4ؔ2%g7m::LX-d5f_7m,]Z}䳒ZҒXHp]݄ ,mPINII>#po.0ŷgy5}%m(]D]s̡qȑ#[D۪e:iҤ`;YHrr?@M)zAd{Vz,G9W-WMtOw\*7+_H樺wZYe[Q;UP`BuClJUWRh 7ncZje=%;|r!KOj }I;3@[[\0@/`-ІЕP&R.fv3(y"7xc#=J#[y͚-a6=0cz ;7RDa ˷ $Ӭe.rYNB+KD ['!k~o/27-[i)tkHI01U(N!l8JݔJA.89j YDBNt[h[?P~bڟ-E&ҝ]b@ᥖxz%=,C:Qe!p?@籶 3%= d֓$uIaឰܔwV 磩0@˙# HqK# ] Ys B -5V|ԺZ)`?][$et?+lZվߗ=2ծ~Ssu};- 5,Vvs U5@aM Ўptdv9[ %^bIoYJՑ݉Ṉ ))eDh ldXv =Rʷ~)9mNp8 (=J[d9 ^WbRV` _Qz}AexAއ-rtm}# <U~T:?W!U3@gTŗWfv+/Niz6xz%}z15;[&wR wk;2 mV ж=_T /k9s$= SI)Sli?%UzS}u;e  OLmZCA)X+65]AuwϘrք.(=wl.b,r53ϘA-+0ݕjk bڟ\WnqM_ ..܆P/t +C]J^RXȀ}^dvRd؞6QCzK[P-F]33-33"9#c fgd˫E k T-(hw!Wmk-:kɼOҵ.B.RVS^C|9 ` (=X_ *=%e1@6REvV@&ze, 2@W)bXbс%'?@i7֋igKw' {0R@Ղ-|)߅Gϗ} nAzgKZm!m廒;mjz 9%֗ғ|`AS{Yw.lۭBT_t>jٿ]7N@Y԰(=TUQT;ઐ;Xurv=WpzUqM_Z-P/$OzLhJ]z^BYo9qdՊm[B̅YoѦ֙tvm9@vyw ieeyeki +u-Z. 6[8Ni,?nCS3`;X>V"Ų,K;,Ϛ!\ޟJd6,(W=lR(U+hSe3@Ի{1@a-ІP/t15;;70QZ ]'z-5Y{+@#BaVj' -N>A-W[;Zi\il{Ln@36ovjU[>яaeZ;_l[nA;_VnXPuY]mϘc8t[_c:&? uCs/70~(gzO%VVSR f#RI@ړH tmWʌI;`J黅^jvT%elm%]iWIwfvsTttTZZJG P3o7Rm붘,_΄}BWZ/+W3AiXePO U_!㸴x8k,VU9Ŕk)h%ÖJy&ߗmexkFnQ~PV˨eYe&+w&=4ʶJsfQ~ [=tZ\grݗz 4P>m*|~O%\'wPn^Pg})'Y cB'-GX)\#˰WAR@ U 2],p H]7r)Ey@-r(Gop~rotVKpC uM.bAa?53_Х(W&Re1ưLS>VB9dc5}!-o+;X+XLθ|a%4RhK}@q U5Z3wo>ۿc) }-dxKo 2B0kq`Ru%06۞;͔ *Zʫ߭Gi5}[lg[h;@[=kڀseŽl~W`ۂ[+*c):_F-^X$n_?W<)vڒgrڧb>=)[j;e;w4}`w}GW]uUW^t뭷҂ ujiN81(+h̘1rM+xz%9Ս>l. 2HQVw2}ׂi,r?gSc,TJ+vV@o(޿t UT-IW*mӹc,+M/RPqy+oׯZ Wd SAf7\aFAb=m@~ emYÚ' KnY8aSm:ߕ k>ԂaܽU+Чs<Db~ڗz|S$>ڴiC7?wƌ4h 2dHǦMRuuu ׯtAg믿]YK,1}K)QUnD5>G_ [RX)ܺo@SL]}`*@iMwI:֨'T]Zj!_'noMQˮb%6*E$Uu%_#uڮBj厶U].RN1iG4cs~WuRuZS- ~X"Y+M?G~"AOPn;>ZKoWݿ:ꨣhĈ/\~o% t [(\Jɍ9B,,U@5h@[,4kC]}R@W% }ZVkVQS~@UExh5gښТJÅ4-GL:b*[|Xv̘rm^=%`)0Zv _Ha/&h%Ň_g|>LmԿ}N:)-]anY\UݵO=s1F,r:s`nzz%l (9!0w) ҷ)oF+U 5 >`-2ݾ0jGB`Cj0CVqeQV"ji}r&]֭ +enܬ,R^{:͏^Vj`S@ZMb^ @~p,4R'e_ wAJvB4C2C*j.hnd>+VY+H&ݗ)}ئ(…W_'>(Xb\K)1(OFcNQiږk'\vQS]ШRT J== Ѕ@Xd ew([1q-7P><.}TƽB껪@vER /Z.:mmڪh16DsC`RAS+~ Nd,їM Iŧ6y:ydi7O?=Ln;?~}zn}ه}`wzCBn7ned :j[TH4Ќ:-OGک Vp.iXBS7p+%n?27]>Z|93TyQ\?cj_ .\E'xa6.]] dOصv~s6D5Um@WMTBhWn3@ $-ZivpR}=As5}P6lXpL&M?8(niӦ;g /r-P/^bH-r%_AQ OuߪUi( 0j@ d̲~dc?2CaTu#{BT)g\@ޗ6};3ŷǼځL R[fkXبmћe%3(>4`.?ױCkիӦ^g0ΓdԞ%J]3 Sf҅(PdG ȶ1_ڣhwn?`+l.5Krŵcrg *$+%\tܠbL_³P PDQ{(,>c-01Z}@'}JYhjB劆ejGs ?BCp"})[{xN5r78Gͅ?CX zJ=z{.d{Lk0vD/ Rz)7٣~.4_,PX:W,7L^lo֞ўT'""}AטBg>w^ + H+w2@m(KeK(1(9!0/Qq".:JUQ RCabQf3/P{WSoO9bT (}Aǝ"Ŝ ҢpN]]q3yj/=\5X.cCNPz57cZ\1@?f]\%^bq2@[1@1@ac+~t4q")# a:TD c{W%źרv_Q/@!զjƸIs1 mP}N+P5/DYN IDAT-_ RW?='2Z6HmuؾoFE.5{PMt.Pu ;8z[XG^0jܹwd ө׆i0>&cwθ{ Daij0; hvB= ud$?.Q /-*xK,1.%ԬM'ȗl.7:b~N (`5Bǿ5i;VhX/+) _b]1 cNi1B( s>OJjG/Guk1k,f1&md [?L-1/rDpڟEʼWq}%(e¨޼YvnԴ~/@1 Op#7p:?ec-ІP/$="J,'J~ύ:ĥkZ(0;wl`,l!Bao)g[}ۓ#?PBabjAR7xIh[Oɱ֥=^Vh_6FM5$`a8'B9R8dom$% TAzSW.ӆykn>N"5= @J<@Ē .l bZnܱBTSuo:2cgp# 4z+U ͠?T͗r#@S BR ՙZLmnM0lK >1n`fB~7z֢V-b@@ډl2u>.>=FZ 6eۼf^hqFsYcOou.\U+TՆ_mig&ڻB}z+7S:!K,M1K(m67U +º Tѻ 183ި)/1-Uq>=1T8PH($Sf./rWj}[5c`}&%ThڳPk-`T`VSA ng0@%벘1@'3@g.\[%P/$=%f%X ;1ز ejRqZ&c@b%k_t/y !*G/[.?~&miiTn;39}E@&{.X\xnCXbN{P=n@?p?knP'tRLuF0Al(Jyx`+G[d+%glg,j(ien3a|Azo\€'wAړ"K֔5R>[b\ ;ϑRNe&aͲ&pP (ȶ,S%PCi5f\v30o 76r~b#jGWyNo6p+M\!|m( oeƼB\Z3Jij0i?7m0B).-ha,@M[uHE5ЬjaF<_\q޼dND՚9EeXfbڋm]vp  ZJ?O7Cʡ=fM!t '%WWNeD!M=ѝ ֻ**6v '"~/v ]rj oZ:]I(mOoWg!RmP]#e4 wʹOv(ѣgbde_HJHI-QqrZ@% vKDlKTMYxM6¼Mxў~coDTS2V(|RSqc(A_`i1RTI73 |^3tbXBdVJ0Qv :0*>3=|S?KNDd 4#qQ~ZFDNj{'H[< 8F4 X',Hz0s)|ΉKʖ.gߎ׍Ӻjnއk m|0ѵkWlذA. 6 ;vĦM}BD n>,UL)YuL('ECc7l[dzIV`kU/_˛!c-%+p?QDŽrohpFccm (k vg%d=']no*8==iٛN/LߓH*_oҿ L{ڮpz6ƻ3swIOΑ"Й0=fopw}8D x7p 9hqqxi zҥIE&7;w-+Ys4\,e~n_פ8Ac/I" p~0h7"Ts~&v>~ܵa_ǚ3у*Fgt>Pהmmik3p=(">Wk7&pџA[p ^Is t&FGG8a݈Xܔ&NZ7h͸`eG9~_Gd]h-M~aɓ'hѢb4i> ZkaƚydNrp)ԩSǏ'B _8R1fR\nqDX6!X2"]$4ƬwYG^&I"TPM,=E8݈ bW$\O?Ӿ{8i 4GXb)"\|ι\;5yEГs"ssNVyn}_3Z>E&;|"&;k"{@g`zN*]KA{OU\n稚GMV D.tt9_z&\>o<q+7"M*7:Eؽ{"o[wRYo @v߬v9:go=}[$DtIUF 3[l'KVߠAPjU9.陏"{d2 9B#. 9@]c\w.G\*-ۍlHMIF#.ԏnK7tf0-ݼVӍ17dhd>BmDs˓UF;X 4믔,ƽ~G7J16]T%w1"2o3}Mw "ZRKR);vRS]{"ZKfR6Cת&IuiU.t'DDu9a7I73 x~nIZGu~U t#Fq9Ex2)ע[Jw_#d"9FP w>}ɩk*55*erD?ZϡTup" Frگin w~zhh~wceb.GrVW2sPRE`+_ףk~:Ν . sȝGDr;O':sGqd;I7}Iq R&=?H̢QIY"Vv`mF;4l]XVk1Lv+meVf>UFMƋssX2inXx)O$z٠3jtԈ6&>O/=_ds2=;\\?1]sl=T7n)~3:/c3gC|?ssE}҃˸8>L&mk֜g{>+ߑD=x}ٔcd9<5w̛<7ZSNd"8<]8aOމ†7J''\'mld̎F@JZmaZ"{r+UC={Dɒ%Ѯ];yJ=yR<6Qp=np-qqø"OG7]8D9OB;G#۱d;Gdx$dOr{z>㠎9msMU?gǨ7V.8N}tQexY| ֤~^?ԱS{br cE㑖lU7TU\Hߧi"݉h)ADZ)ѴC8<8QӸ@YYʃY{9a˗qqqj*y3gusԨQrouOZ@fBk׮O$ɦN>-jEB^l\qO]ȓ%=pW!䃸[øpG")Ƌpy"3gqݩq;q9H;D8sN@DטyݘaOAȶ)NR`e& n=o n hD{97cRmxY=6=Z7ꠞ*CҶ oQ 7J{#*ձqj8x)gJy'-ً*j6I:Ï!G,2 w:#e^v@}j7}Ψ6믿.fءC_r/_\믿_:モ˺iplz 5bZti$>/7R6 F8xd4;F"{ &=p A'e_m>b_eEkN\ǟ?f>'6^kJ^r2I!]&vxN iZw]bVpKr{k"DR?6F;1ٮK3T1-赉 3΅6Zc H'Fsx6fU UҺPΚUƋ؁Wex^/+_Rk HnӤNz3<,DNQ{.?*=gߋs6nĝ!a#M")^tQq4xbUOb86&n:icE yp2ُ&(#qpڤy0)צ+1%{p.]w.I׆em֯0#`bСz3ӯkuX߃cr-8#KLϚLMfceS7z !xM}pqP'd>+p=>.YЕG>׶R̪&Ыy݂/}:E|O/. yWCIJ "NJW}D2i%|86]ތxE~!݃<8v- Iۅ{TfR "#5FTIp )&-[=%oI8NUIgqcn57Ɖf"ˁfM%$z,NQوLDYq>d+.()8;4=:puOښXmMnC"Ψj]V w6J7i1izu^*{zCF^NzR!FN&{Z\]FӛPʯg"d7<f %HOrΜ5@o>V[|=.V[ѕEVYz6Qzu 8pxԕ(QBb8&&vI 8&[LʌFH!L6iuQC을]N H"윏;~Fۏ#oR@ ijnQܞzp9{s R3Dk`J Vw-{ $ŞWyB= dW$zAj4&QUHtHi51ndȤh,y[0yzD6BA̼Hl͈2W%{ gstDvʍ7CBdGn"ydBy{M< Be9foo5m=tեҕ4F7@ *mIʔ) .x-nˬfLo4DVf/dKɓ<44!Rb$J[^? y>`~"p yPITg bH ? Q&cG9NI&քr*24tXnRXaLWsbXfQ UL&WNL|qڽg'ڴ ƫ%< y>iLb2do>w]{q{ O!G";b=v*4LO NCqCY"BA!7;+Qsi^ý> .#؄4{l"m;l![lF*NIRQ)jmԁOuMOyd Ʉ,9n} 6Oi"*~{6/¡A#DɊpFw_C^ uR,2_ﺪl81嬐y&.wңi,^rzMK|#_"pS-LWa3.AkwrnK,ŋɬp[V+╄D8 VLD<{<~gLz} {uv\ǽLҳuqt\uU|,\oP8D';)EHz$L#8!G)jGѼzK!2Ƥk0槊YS( @D?HEUNz H|-@ *lƉm۶Uzt[$f|2lV/)!?],W!R6"}*PĄnf3eȗ[b!?}a"և;/~ οG>Tޔ4&&mwR=5wOd[FW*@2!%%Bժ61Bo#w77m%">Y+Il:En"T ̹9R3 b;b1[;/5${*ი*NCz%QK8ʕi b*DT&Pkky&/ xZyN .],I}G޿{6K (V^c]:<ϕiVz)>Q9eU1~o(.f[0Q>uRn *lf}*yZHظqcxJKH[ʡfQ% y8?=ニ`e\%ku$Y{d2zhn?1d5UV#&Z-5&a~ !NOƜcN!ER{q}@_ppYr2V>"_5vpP2%TL8/&hNOxDaNA昬S@} s8sʘM͹9!?r>ƱrrjsNc>y^)_IBkD⑍sMW[חA{K9ú4tzcWNV lNX|OhXfE UBD4gO-i ^y%J U,&zU2qZ@"OS'x^"Ɲ*eOj+)B:mZKJa!bu>Ξ^.0I!x~[*<`Aܻm.=poT9'}^URq+$תl\ n#a|ƉfOϸ x YU5VB߼-IDgƹKT`Gl2]#GlN I]z3&KhTdvg NĻ'YflV;tai\q'Uա=D;"vWhdct%LOևCDZ. $h0^͘pb,D5kD˖-gER~˲x>$Ci瘀R0u&"T"˜F%ߵjU+55x D6յHE4oʟg/D^{ {1^H>^o>h<&E{bj@QJ8ZQ˦WV?+<1MǤ~NGyc\ [[i<\*ak;vFkHGz?n&!'Zý}g2'IY+|KJjp> %C%.Vtn)p kˇ\۶"wB;KgļMْ\.)@^HD-ۑ7>"*>yp t.;ٶ&ʚq2@ل$ ̧nWb1]uEQ62oXfQ UL&MF!,QQQR1U!nv7.j*!0e0Vjq"☢1Yȵfs&Y_/L1 +R Xy+9ɚ-6/RKDѾf/kxEڬ|Wx/xӳbf^#IO^e~[T}htQ*IoJ mI>SuF1ksR^CfS6I-T8f`f/?$ 1DԪ躬 ǝЉOfui .7ŝ qu(a^]3~T5l@䛠v'Hr_ݙ9 QtESL*=L>Gb(?E-LWic/\@m۷?,NMJ5aDPiY"D_BO!֒T?4yFHLю }{6xuy>P?GFzl"ί7˧^k;fU+eUzSr[qo!ucrIʤENnOz{3GyBuE[ygM 1{LwHǴRYBzEP?.kLڜ(C2IQU" p%c|O\E RTHFJO ;T&(Љ@D?KWDyLJcit1*)Dp>5SZ@\رcJ-[PX1[.˜q>|sЋ !JW K$"#ɴ Q?NHMFPmsxO "ۿP$eԊ"ZVsC:sLʕ4!)c?h +|Y2UNR*T}K4=? gÒCD ѳoHϩ=Od*$j/0މ4^|~-#ȧLKNq_䱟+֬ųGfxɲ5a>Ok5%X/۟O xxlENPF)`ٞ^x$O~#~Xt*[ebU*0ly8O{.>1:u:!F:;3 cwx=N&@Dm0*#DEd$h0?Ў?8v">E "zv/@?"ЁyV}e!Ð(+Q6D12>2.}q"RDvd 5kH>4>e5$ZDfr(0zR/}IBxPle8LXONBaBcF4*3zz}(g&Nz}4^ Uycvz2Q=RevA]N)UJکÙ^Q܍"C*#)֛U][Uf$%d83q.{:u3>ݼ Nn*VYBt1*OWZ9|@CrB *j΅4q"݋֭[B ]-WmSOYaµ|yq|4%Gh5QUq02$}9/%R&Qϫ7?޾?,|Bju(V>Hm[D|U$ʦ߂~娔xffGRKf-]G&&|C_7TW_Cw0@,meW5=0;<_{Rx+>-J{Lfj׎PNqzNSpOpjRqknn>nq;HGp鍸姡4>!1B~ÓU*ScpkQJavboFO@nnnlk5V~j#jt1ԪHWW(veeg H͹=q ޏ)۟&Ы'Cw{YZ gƜ9s͓xP?3h ;7j(/&]F5"J*f)Dʽlb+JXfU0:S@GI|zl`_C ^Ce5w\"eD{k^f`Xy^VFl]Eq>퀔 BMKD,OD\oFZku.mJko=<Ƽ-.NOD#1$-14ށGlMxă G{PKʡIqH q>^)Z |@ 1:gϪ'cqe3@'`Z lhUŀB%Dc5;M6qb9C"\)o޼:~<֭u-LWQ3_X6߿| vލÇK+fioXbht Z:9 1#2큆Dj-QF2ͼմٷ}U!_E$:jk".M^0+[&R^ի-ZfЩqPg9ۂdjR^\m<7o͢}[6W` MHi9^81[ūvk>T+/ g~$3ǩ9]+IiSR7F 񚑍s'_}Syi(b'Y:QXX&Q'ui\4NQ X}&P.:Ne*z4+[z+ݸ] 7 B6&cEk|M_/]k *mm m(VJ 26X|8GOBq{dg2Y܌MS.Fq"lE*~0*)gb}t"(5%&VB6"~^`N ׌l'oNE6oSf<Z"K,yW6sE fӮÑ^#=$=tDO"[421.H-vUߜ+SLe|X$_P&\z=Oѯ_ 8K/t͓'0^{ѿgp`d>Hk'i(oDIS/ړNeRmoI\htےH-d$Lok&t ++[unиFDu>!7`f"V R]J<H17s02WFJ6';! Ǭ~{Fq"3^E\r^ 9O37}[ccjeދ:%r yD$&dcJvC~ RLu&xsDMBzk!T x8reEkܑ9&2ң\kDY uEWG/zC?@9Dɓ(Xey9ܹs<ę]xQze#ncn%d 7ܮU<޽,=~ag;%F쀗/2iZB;LFi"Uu22zi+]w"FEjLl.6:zs[q߃>qP>u4E]>'xHYzլ1U|xǠOGeHJNvN\n{1qⰸMeʘJ.-l *myDoe˲lm l9M IJ*ًt\m$D6~'&BF5_'팆F@OѦa&5&N8chH3 .tsDI?!QVkz׵՗1?PfW:vj} Xeq!A_zٍP?Q.&pC>s R{㭕i_PrCXź?95jjVGm<3'^=;y ߰9CC55]h@)[9NCң:D-vB$ )I>+q9PM`IZ'0^|iً 4Hb<ĄoȂmMBnFK3}xW ټˤlt)5w诋O-*!IԦqLj_CD[[en).Zб]U7֧uC [x?CXw[O'z+c?uW{ڡʱohLۙA0\' Ժfd㉬bYS!| "ؼm,JOvG˄[JMPq3N\D 7 DP{Kqݸ\`c+zSgrfkEKj4,JpS-LWij̘1IlUO)q@tG1&r^ce!ҾZk1i׬mv$*j+ӁfmSZiso?>ޚjZֶD 7G,ߢ/xճgv3YMJ%I?`|0KXPzCS7^mW5}E*GiIaI0Ts^`ik1*; eSG:e-N '{^$&N4]Dxu!^ oD_"x#+O&$P )H<^cf5iz[vc)QR*l$&W}0y;,n'צׄ[,}SC%,X|!']]ߴ0^ͬq֯_O?{_6kG$I%ڤfDO:yWBwgHBs1'$Fg&4kL>{6wіОvkʛX4NL %Ft]|ѓ_9!=#803`] Ôc5Vבi<٤;;A$bO "Iy~Xv`Bsޗڰ @zx_z7'DPsY/eǣtWe]<NMRΔ{(:4>i<d#un^oĤ[Wd{jt`‰Pv85'xcx>_2Vک}ukidȵU)0M!'vpрD3NLxif<ҵ2%(8Kbf^>޶y:kJ!)@?.Eߺhbm{hju; 4Z@c-[BxRd~ _LT@ C^5ɔo(tt{nto^~NSS7U_ *WO!1 V7{6jrgM"UZQ9hC6+=VC Ljk4 ~S*F97QOnx=T懢d|rQ0;siO,W<}l"&5 %FҾ=!`*_ tvc[Yp m vݙToV|A լ2>gkR)i/4:Kӷl=TT[U=@? +,ja D:e *gyFrTv7n̏ B#.U?A!_#Ʒӄx }N-8zm<ߩqRU&s^ .1ե%H a"e/oz6ӫS*67(5Y16PFuz0UFѹ9U99̆I%TdG#W47A8BJ HU&g4]g[)RtIJDRl]p `be}S䕜{p!PVF`4z>=4TN#?%wpS-LWa3UJ*%[l)ʦ\N孢L'1=Y)PC<j^/ݾpV.MP|}&DxQu/J;`&m0$gh03)BQqtltK\u`2NL=A) _;QQh74f]!W3I}tNFt|@=}dMVsƎkn~UO*kR.cW]+t*`[_NmC_*J+~VG k"U0c9KȌyA /HɀV$ZB\|=5c&3k2f=Γ &pz%4>iA9Z곈ڴ{GyzBm(s'*9&Jl vT)uZd9ZLJI˥NC=%aJ٤F}UJ*?K# kE|I %xډ<ka,LC?_48\g\}Z ͢&ЫI뮻hѢȗ/6l sLh>,ʗ/5j/֝9s{ϟߩ<&D"кm%` ^N,grN\3lzV(e0GoW=szjt{CeMڧvWWI%xUr*+CJɎ[@e sZ=8q8>w&WUf}HsiVN2>TݏDSFU(2׋2ל4T;޽h&ЎoJh(\F̝ Y-Xզ]Ԫj$kh$Qn$c+\v) t;@$0mt=\nt'K"be6~JG r5[ՁJ(3de(3C4S(. 3>%*i.I Ev<þ-Q4QP+=V FA7oىUpC,M7J"hnb>E$vgF55iuw7gJ:vħFp+F*,o/4kM.-R וǀ[Q'/;\_O@ۉ𒻣а/P+j_GJ}AmǏ]JǍP~SSkщѢ? (G\EuoՄH튷}9ϬZ_l턷Vo8V ۣ+oHG㓿[0~|oy`v}|C,[YQd7 Ql{7"i( Om@(mÛ?7'YDin&>;5SyQb*MmO('^d2gG61雿/G5Ǔ_}m/9'pQz͊( (D@$G(D* YPӒArX͉i3;,߹U]]33}T}9VRͩ@YО^v975otmH 4hW7l@wߡu|c5pyͲ=.ىѻwoɓ'~hZZ"^7rzMD)U1soM]w~}sXBV>i/1,)<ӚI7 #zG "U VW=UC1:+\VKڡ@C"iVU`Z{>zfh!hW|S9o7t]5aBDzA&]6tK翣2uCU ER3'doKHW6Ɨ9Ll+vD)>ZӇdMt"ε=-vGۣgFO4{7hקʃ>'>XTs7Gۈnn0Z[[q~tz+[mJ u:uߣDT9 6Asny КHr(:O&DC(=6iQwh3TF?%h}'z̡x{ghM#׭ і왛5쀏2F [{ޑ\+;* m. O3ͽHɑK kzɓ9[hIV{.N^I u.g7"nt\$L%B]'V~N}f↏_Gs~//4%#x6a7 dẘa7;7l:FUc>}3СCW_aڵt"5jedxbAkƔ)S= &j' vC vR\˜O|KѲH,k؍yG8 , =&pւ[hr Wh.!3B9f2S)(9!7WjkH4OڈȲ!5fToR,1>*6зb/]kD) 'sAgz5x=/O^_ԻOtd\pw5 пicSmŘٳ˭ \G^:{b;wzDDr݋-],zI$WX~ ͗Dk~:"$}`֕^滘/v1>ca&[* 1&DylS:[Vj1j-@?03_:8V5C]垏R|pN9x=[Şk? }ylI_ݾ^g f/qX9 y$LW/řawBdw7CdN&Rْbl.&5H^,;'WpsVnHblI12wqh+3Gn:6U=Ts<' "XI9E n:dh`wOW:=K 4/9?cD=e.9 kl+xF^{|?X"yۆ罿ފB7j$$ 9sfŁl|78I !l#0yxB"kVp-"ZH(sP!sw<-"UF љPį$:Y fP%F擭0BEn4UQ.*Qw;Aoi q$qN_V ]N8BuK垄zʟJ0Ω85\8.MdѦ1Q d:D8[{Źt7fHDXЃ~nKn6Y ^͉V M[;lzPfMۄ P^=-66;.:'^9^-@æ?\N:xꩧk_4|d_LSez>΃J"4췂jֽ݃Me爛 ɕt"ntmtCgAkbh3h'bLuwh*1]d=jhp*PMlo?FAˤO -r='cCoI`:c4t+S [M'+И\-miק+bNJ%xރDCWB"z= Ll=QNJM!"]NspoYЋ /:roXkYXp]Lrtte7l %yG[A?8bbb:q3kKOOsD~?I-@T;t;qD:u> ^@bɞ8[q!{q7Ec5vAlBD VE&D?EbzK3=si:_$+[KGE[; Nj1?&j*2h{# FWZ`2eRis*+Sߙj[]MwN[Pm:8ׯIv(xKik؂2E:s(j3tJC(+99hGLxWA_F}ǢYpVf^$,r4:1&T]?m-b;q)Л|I??wYr*c iX&p:ۛo׋ȑ#Kz K,㬬,vj;c iDG6*y Xu)ѻp5)C-AL`*U&R TVU_N_y&ńU" 5{ x_%\_ M9ILQ̪MVi"݄^ĺMؾ=Y#}4 ?뛣st篅S>*}{;)pɹ;+3o;;HL?qhm/欱dʦ]7*ITUU[^w'hi3P}A?&n.w;&-ȆyGc3FnN/_0 sp=zTh-s޽3Iry6,ZkM:uߍ0pbyT@dNeFn"܈SCfџR8IǬ[qw*3=ILI>k[Q%b.$dgD5FVHJ3o!MŌ%t+ZE]u_DBzxISpwurۏEXMyϣ0HG,5lMWO7H8֡ub|3eN Dmrj0*t+rLy#`.'˸is4]w{(ZFc_0m\bG r+[ImN""l 5E@[Bx̽@<]D}G /J'"}Pv$bK+'N=PߴiPƖ-[{\s"ߢ/y u6fvvMh`&5RK )4bs+ ¬p*.0Ly!\uH*=)SS=ppb;VV(`/C{黅ux?M&evtZ"J'Mp%خ2 ' d@b.<aVB+>]f55oi&Ru4 ]a_;*ՔP*cDŽ4n!bV1KG69D*wHpvщ v=X&S6f-gYTQa;d=G?~Uk~U!=3so3`=IT'ؾոk/egՑb#-9C嚑V[/z) F84pWQK:1,<Z} ĽZ cvX"cQoD?+x=j]„D8jR M|K?A6[vm'C&==.(qs ߮{rr2BBBPf0sL@[HKzt/;H,bDőSIRHt&qiB<縏wC iu""e ͈¿Jm8s Q"W[%R ى^Sf{мwuM-fHR]%rbd]/Z~'݃iʠ"WbZt8L4otf}qrN:^tTyj |-4۪QGr|veɮxRٷPOE ek?ϊ IDAT}!\%GRT Jĝ>u](HpYV\0>p/)ķ`CxksX^INus^?-@/* sۚ:h 3Uhjq"H%%Fd&zBv^:H.rʩjs_sD8v=BcyJgp${Po-}Vt/:N~g u(݊PuR5)_GگeDT63?3e~rtDPD"^ïV<ȳT?C |R&3ԏ14 [aR MU&S:ANLQ\9g@TS|V#'DwFݾ%گ`*9eIm}%`,'iQNݭ:J뚁wؽ!hC0"SК;g][!@+ пQ%Hbdy## تpрT1!;"Yf'+8z/ZG\)DNITB$QiVUDQG5\~^c$١ nCꁌmeG'V u;lF.,vt;GmǏ}5ju*KjVT:=gg(wE_uB|_RGDڜԿphl';D!JyP+B|ZVL+bMog3tHS;A*[6󾪎M&J:DF]dT1ج; G\wӣ@̂aIJC48ª"b`䌊'U{}pf8ʱZ9٣51aſ0g83:AIuTG:Vծ&t\ ̗DDpƒbN/yU$Q  m^;/87pf7-lo^.3u(O:̅uTg6-`;H]h-3ޮM)ҧA @+dSJ o dmNk/$ 'D"2DZYaAR$rhS H$$x?5)ʬ rIIs*7>7nσ#!#r#ȋCDq6eMXx_xMQrߕ[T Uz?<=Z9/f2B.P !fTL2AD_Ʒs됾]'6Wu&]@=ZmbxL6&ӵU@^ @+d t8 im "LJt'agyRDYŐQJ 5KqjN d{}E1$s"Ua8K H8nL8n"BlN>/ysnq Lʷ"kaj̏7&_=Dyߕt3TG !=}F:=_)ܫ}^zپb'c l*Ej}#XUgQl"> 1a5 Ds=sLMIT&ySO߯3Ϥ@"z.hcS_JknO=]>zMZ@B:hK&XO@L ""%0ў "v }7Un" d$!3-ёA8uŐBż0Πi.IiY糮Gx 8Q[^quMUWOSH/"K҅"^8@g}3Bx%'c&ReE2o#'0R&ԍFQ&/t>x=#[&$ƜDZ/w G&(PsT(oBI*DuqG%a޵8|n.s [zyjzqW%8s*oi Оb/TǛX^XRRLJLm1Ņ"PjO$:3~/Zs"qw֤@&khlҲ̓K@WgXn'p("T7z \]THl`˟q"+Avttʎ08=itYV@JFE>]](,KMجJ &S 9U.XOZ7;+YcI/܂A+cjat{N &RlBG$7 "m'DuL>~\`龡DwRg3TDY判jfw?S;Rk㺓7W/9dhrg/t o#* %&hSg5'EH5Qult›Dr~ 0EֹRhS/W<3+K0‘͸OʅŅt};*33jO]2 ++?~]i.7:h% (khl2@;5 V!-"]dbEL ! zP)֓j|X^}KgaJ뎧sD։D IAϾ(3  w]'AQgϐ8CZ,$FR59s +^낁("!hCȡ5D$ WX Q"b1z10톻!̼ȳHqΒ8N0fv%7s.g5p#H$2If~9ç܄MG9z6b/ۂ{D`EӢ2.ʲpa3ssUPM߇qo2}SlSTF%Ieo^&QmOygƣAf'QYWdk>p7&*$$LJg$-:Q 91~Q֔Rpgvŀ-@V&Mc@"5&? >DʦݵC^>ErI7j={e"N[}*jH9c`2:FĘ@sV=hnRHq1 s*Ⴋ pwU\Y ]g^5+a*1q.`>Aלsa6DY+U 1T,+V&Yqn=(=Ȅc) ?n%ߏxqw?.oSg&يTgu^g1%M?AǧW/)޼I0Z8S 2x_s| '3ۉL@yLZJ.\Dm"f p lQb ʥEyZS̝;:|0^ @+d tl,̳֯Dg"Ee@7;t$Ga|| 42aIٺO/oI"4Ok h%V$s1H&fE|V9eG3rʓB-*<9N}lvD*#Ժ./`qz8L:3+(+6ဣ/L> bR`BGdzX҇Dr~v05[acd~7+j"/N8R(:v1u9#+3#^+ҌU%uyl1Jt u'v?ٻ}s]*T/J5>ZZ!?:MKĹNJ2g" ϟ2RMApPD."R lA=^rȊYDdK\ n3&XTNI 8%(RE\W^r3F5:n༮NJp^luˉXr1ksfUvocUUWQ.Uggءr w:<)=*6'U2Z 3#"u"ZN?QB SUfRZ]Iheʩ4&.}Ɵ`3$"7SǞy[eS0+Q]M:~/E ߢ D4WʦwD 1-YGRih4 ,dӻ8ͩA cU{L]w<&\!bv!IMYy(&Kw"&9%1sԒHK/Tճo*+ fbdLxCҪHb"Us2 ^\p \(﫲a4" ĿdYDsRi'v+;r㝢^ٗ֫Ka;ys4.B42:gf BmLhN&Oqz"Jm!xIL*!>9(ADYkm;5j B6iL@$07>9Vt] UdЎEWњ4V{>5~{lcAe\(4e{w4 $HOcuNILLs9Y)PQDYF)01|\b3%aep}Ug ;110 ǺG*fW}JjB/ӰDZIZc)MGŒL[GLLXqH>챧|W}Yu8S3\uf\|J.[.1\0OY$:)d =AE@;-@Vf!g`y@OAR}2-rZB7`ߦU^OoR]je5ާHU9`H"ޝh!Jp K$ 1V^H2st>A,(S&Ĭriͽ l*m҄/E!eJ4¡H/<^3!7cutMMϽCy}CʁvJMأHxqwp un`V7DZD&{oNHXWS()ǞJGυ !Y؉ȓ Ꝉ%}HA&h^ @+d K`@$0I) OV^g'^nqhGZR/,Wjԩ`aO^Xz у*_gˊ0F|H* 2@QDV+̵ޤj4hV !2U/#$TEH&OmU Bp(Sie ׽8p:vDV'oN&VsPL1Sל&T]Rf{8z.*T쁾h@+6+\tCe3tH8>1=ImZٶM>ف;<'޸Qά(X1A&.F-@V&@; LD"$yFx%L*"uB'YةsmADŚP:'*HLDXSL}kƽLu*4f,,Ԟ;!' "H( d8&Qa^!S4^ӟV!Yuy:"Xjg0_"CM;/+Ri+4r@wQVa/:DFLe_Ӧ݅^{: E)cwiB_GkMs(Wd)v{SSs;|(Pc~JF҃H~kNJ?cy4+~ @+dFcGFN4D+,pZw.r=R?|2ͩ(h UU;h"T´?+ Z{c04xt>?,GYw;mHhdIDYr؋4󾬊sKL{ f!PUUT4^/cXjg#Sg!.LjCo){e%)(.=EœHҰ:PƑ3B io9.{z_B٦[N)웹ơ E@g"=IDѓA ͻW޲e &OyCӦM{n:<Xx1f͚L3,KR IDATn @+dN.D &ܙL7AlչqٹB*axB]|`)e@;*gX=N&a)K 5ǩ9MN\RH{I=# ۺ{jDFߝL*AdZ"d8-ڍq3VL$ǑpzL!2=VG*q:A ,Uè 4NIo{":sXޏVqXbtߚNX[/}y9bjhd/"n#)3BW8/&[ʏɓQTҮ+pwHcD=-EW@!=-DQ0vIRͻя^~e߿_srrDa1Idgg_{Z! c31t!frtc U;12!ṊO60!ThΖ{Iʻ6jXP&H"ޯ,o&&#B ~&0s҆ȫ;&"ږ^=٬36H(S6X 2Q\.UqUD4+$GE*hӨ<M(,!ͭ$ g,ɴ"QLx)U6r>_VZ8{ѪO5, *u7:=JRSR_/Q۫sXK:Zӛ@?RZ58NCEf]y]@z@-O< A"aE`+̵K,DcV5:>;wO?~MkoyZ!)Pu~+}=¡@ل;ݧD޹ڤ1}Q=*{kfdko^XSVݫbĕY21HEW Kq$셚V'pf:MK.TR)eZZgO^N!(VS.ϝϩx 3U6F:̽LِZ {3nm4AsY⭆]MM(ZS>g$i1^e=kǗHn^3*0NF?R %҆"ݬGل #G& ΄ /^zp!]qn~ c  tx>~i}-Z`ذab̤({ܴi#6w hYȠO׃0@DI-g)1+PN_\~&\ fqIT cGՎH}aax9+ <)\6 7haqj9K^یMN]1Ő+CĚWI%QN$}R';#E H/rsQn*%[EeDf;%ċ"F9?ۦa- l$MDJt((⏈2)i}F*]=h/*g&RhJفH&RId<RhX! *"е(DXM{i5dRR}QDEE}?111x'cm B6 i F0F=O/H7#&O'e[ V:9 Zz䶟!ruv|6yFI `x/թ}a{ΛP]aѿVwH&; Z wqHoY甋3aZ_0/H/dAT5fGJr$G\fgTD<;!eVD\:deC㘴 8}+ 6 a6F}QZy""oƔžJrvHaX&a&RV\[Mג͚8`=Hnqղ'iDfH+*UWP¦1HѨQ7x!䅢I&? "P\J><27́ڍvғ4 49Lmڵo0sLꫯļS4 ,nCM9=@ga"i>`s.;t&EL-(|mpI%)BtU'60K I%R_3BsXi pb EzB8Ŋ& O3 \(nL|x,u帗usNgbuE!;82K #$2J>K•V GU%qZlI/%'Ҙ֦%BrJiQ͊Q针u}m9H֥(E g%)O97FZs'߀_2 ߌMKS>; W٨ʯy1aRP}j_osyKr8w^:U>\wG\K$BFruLQAȉ.&TIeRIDĩ#DL"$c qMZ^dʈqpǕp mȪTUdQbS0{Aۜfauy!u(n>!EW@~|"Efh#Iyхx/m B6RJhnzvOCryTN'f\z "wZ"Ќd֞7[=ruyo B6 iR0Kӌ }|3>T4j8t 0V 40!r8L("eeQ _sn͵D?1s pAY uݓ_f3~$Nvlbͦ_{?#|}: mgߗndJmػ8⽘YIYe] Lrbr%E5ރJbrH^^$L|9DWŶ4*)Ϛ՞^|`~10)+Qd=|{U|rMd)ru,JJ[M1G^J԰V{7BHpC<eʔ[IJTf9Ҥ!A&x/B4:ɶ}?9I\e(^HP*N 'yWPgzWmq]E@!mG'=g9 %IF@[@aia9z| Џ)(':}ᆷdF ﺩ}'_Hwo08SD;v{\͹g9P6qaNyśW e8 Reug*RX1Uc&ߖr"_0e 3E_;i-g5UcxgJ4p)Ĭ0 ND1&-ʉJ $#҉[$_O2IGKI HKđ>a,Eq(n\4] I%DF#&ҔtK>]Ar3J#)$RKP؉o+ v^kq҅aof ,8v;P"?01:fpz>`WYz bњp[F'/&Қ)DLתԜU_]t / ŋx뭷g@Woa,WKcEwގN$V.&^kC6Xs {0h䃘P!;8H7xtc^JF[a,Wce 8&T%e9G3箷nAw5CYt҅7~ȃ8sfD͈@gу{< f";zZ@AM'.UG>\9j޼[z5^z%QA^'MH.x@f ó!@q4@LSEpOVYJeu1uDgI}NfguPtQl^u~Iy6ӄcys ~Kkx+q"w̾$21NJFJ BvgTqA7. b)7b^%p/x֒8XN8%(#* K:v(6VD*N7\;puNlIތ]8M;EVMD-EnRÐy/{BWvѹ"2y~ sWw3I #"C8~4Vl@z-Z@Aͩ@,?cu~d\'''~'q $}lڑmH76r >lҝyRtun:,V'W8Lv ;)J՚j 5f̐^LD&Q&/yKp#{2T]:O] BԊUݏUn{lVǻkx:qe]I?2͔kQ^=z&0NȠ͸I̫&PlH">·Ɇ9zչXu0u-P +% 6g5\ys7bH,3$,wippQ}fR>AKHt9RHr\ 0r 845fe+ y"P aW 0 7!(R RgUDGq?VNp/}Dy&cx= M E5Fr4=G@Y6&LDAӚ1Du Z&P&ȁ 3f x qXpX dk.puFO7 šv6Pl"H D$0-h0&\Rg3$Y \c2hgO )t.w$MtͩÐ=aG5v@? ÈG/Ӛ@ j5yU.{~h߾H=b1z ɊxȦ1zXڐ>BaM6.R"mK ҌC语ʕߜ6YiNnJy","aߍOs9?ʵsK 8*ߔ2.F&%$ L\^Gxy>&N4Y&5W*:yg@&ss%i\Nd#@3E(JE/.N|'s1ȋ[Q#K#֞wU+ \rE2z67BvoBn1 za/YXw`Eg}t =9_}Kk kjOн{wk&Lc>-Z֭[ /l}t:`$!RkW{C8"2u*8)7DAk\,&Bk?HDdҔ$M O tR”.) 8k1dFCVT1PFwRJ">sK%D K) .8VLyNWk Pu *8PV5sp jZz8|uWY2oa׭"guݏ&'܏bi]ܟ~Ɖh6D#B5"h\S "^ `+Kmj,L@:l)ITQ.qƩR~XϱZ%Tʉig$ã^':t 36:cNU2z&ՎHa`B'In\y_2$g\_ء뛮.ĵ$G7Y#:odZD D` OWzQә^ʄri>9nJ*qCBVyb2#]#ƕ‘rH"Ҍ2*GSpd"}3X'8,>ܝ{EТ0qrm'Pz :&D4 @ _9~Rj@^ @+d`FDӖsC*ҮL{8z';YQ 1cio "5AS(+Q]mI^ٗj2?̉,F52>""X魻cJ T TK.H$A 2qBZYdǜp:֔HR6D]*WymYDI7cқHY9kJ,i 9O'1A2^@U=P6J:݉{/z55^! h B6L3 |=p8omsEɁ>s]je/aDE<)+j̤9NK|-u\_R=;#-6lB\D)$fW@dJ}U"+ 8Q k8g^O0Ρ RV׹ NlxR(Q.ȴȪF?"P6v r(x1@ת4 ٤ @[D P$T('W5i ()tt$]t<49Zx)d j:47<&` HT60$jrIT;L:1=a/ʠBXf"Smaי?j+Xb8| -%z@JDœ,a5Ǖ^0WσK샲eŹcI\ciːۊN>Oڃܟ9~j'_WX9= C~~hlk@Ԑ:[|ˤq}͹Nul) Tx͇K’ǘ){괃o\[Ǚ2ahϛVS^geOѳV+Ogn0|S'rhD >}UoU i p1yM˵R6G"IAb-ZɁ ".b׭Ս[CJ]a̼Z^#DTSSO\.1a\&Q2y:"M]x[3c~ȱ7֛F)8E#Fck͑ʸ̙3ր[ٴ X?bzjy$v31;y@o"O֐1A(=@ qF C{MMP"Wv0غj.ݹ 2$4zBo'{sZie} U֕u$N1a< x8Z zRn0+O&O&ˤ!'O("DEGiHs?`%4TFh33-kRPsCeJ)|1pˊ!\w'EUR5 uM*͒<<ע-f8\N:PVC/_W^:@}WZhcРAСV\ӧ#**Jek7p-D2ޙO?\ffe>t""z8J'"qhY W%>}V$R'8T )C'mg*|_cJm~x =zR.#JL> :׭ː.?A:\6RwD"Qɉ(H_Kyr䢫6FdVQ%Q@!Q Ēt^"͎kR]N8A T|2X}P\Y89yOVaS}KXUx֗÷\GyΘx=.ߢl"DoҋE"Ǟpp#Zw'B~ Wu[oSNe}T;u&졇QؔB,,72F52ee\v"+oI}ה%2qx^~cE cUTٮ95sjo'S_@^ǤԆ;5/Dʼ9#8t萸'>}`=Ynڴ)Ze,19#5&!ܞW,G"ƛyϣX~Ro [?'x($:Rb$<% 3a7Q=W$aJ}Sy|49]ÎKFA4*/,5xO6杖(y$P"4ݦa' m3&ڬ׏3ꈥ4LRJlao"ґJe''H2HP  Ǒvc㴩Lfp{ ظk줔a,KqS N GM҂D/;ኽ,ye:EJu28T0/zuygE+^pZrN HY.*42<.?%xʳvx32P?ND@k:> 1>6^'NĨQ0n8u%K޿ݻwnGll,Zl)T(Dٴ X?br;D=jf}A ^=Mx)wejvR2EL&*NDytJ;BٔJ2uRye.<-'#ﱟ{dBeĮ<ùLw5ߪe \TSytVU*KnlYDSge?65 P~݆H'BJo|Ro#FAB!PPqQ .0qIp9œwᰫzV*q|(ARMŰ<"_=+>BD4hgzq%} nM D]m1HaΝbѣgQƤfXƎYfe.aӳYjo6L$&2Uph'5h`fFwu_$K`ȼ [Mx Rf"( FnSO7/DDZ_*dR,kRȝYjo&DTzQ%}}"m?u2<<%ƫxz@\"*D݄ȱ)֔0[ٛ=s٩hTKPvh[*4 48@'l8ņW 93=Xh@ADv7F^cg(Py\^H8|&Igm0ZB$þHqg(` P'.}.F+Fo ޒ'Z! r|9h}SK,7SXH ֐r;);4!qApWH! 89ϩ QԀeZf]"N-zg)@EfR~x_M8K T!C UxHB,IG9{CįQ= G7L oATLj.IbTa>(Pe!^/:_zIwGVk69es ;o.|=~](k6DPjFbXE)qe| LYUE8$r7 FozSISwZc9L@o(K^" [S.nh "P|35Z&P^rlpi9HD]<8ADgMinTcn:yQ^޺HdEf[\&<+/Qùj)1CaiXNMr"]gX& 3:$v L0{8)0$+6-QZK"©қ)($n$Ye79K=DOnN~ADžC͌v"hAbE5#-LZ^Չk+lP@X(7`! 2D<(C uV#4$_[z>-($Tt򜫣An{kCkxƇ뽴HF0&a&Us\I@'Uj0Z*]sYVBU@v&b%a#7Hp+^_KDg_y40C*h]y$QG0ѧE{VC%I;{<+ڥw v&Pb?U 8q;N8%q"T'PG@yw^C<#>7.Ά]_#?( ,eKo:E@[(7`!@@o!f D3$!&2rW܇TMJmհo~p]17UR~O]cTluXf\"#:_a[(YvuZΰL3Bey]8j(;Zݔ^&ׯK36$\)B"w~7%{-H0sa*ۇZ">. 4jt9Ka+Zǀ8vM~@ 9W؊S "л- Yjo&p?UF BA "M(AdJJ4nzA5$ %lCxH]OyT#/<j^>"=[2>D҄Sgͳ7hIV$ƛR_@lcsqM.A6|0UJ'eB.Ќa܃ZЭnppe pX`i0p~.v?DD9>dCrx"lz>׽ޠ;QWl)_ ؊zXxi+8hzq9+l%Z(2ߌYӘ !3l\^DeT+*ܜNR!T$1ʻRvrx]v%ڙH0/røB{587qoM)DU EHssY?)Mˊdj({eOE&!pqʻUW#!2izt #24N߅]%/s=$1{X`)u+ ;:`:^G;mg@h! 9ڐ3l$eh"P|3@IH )K^&Ez^)RWBpRMnD/*]^JS#\qz1ц5Sn$ϸ vxMpw>R)4m[^4L$$P&L ӈ]^?7q%cML{_e&1ݔNnя/COe u]-dzf*upD"Iu)eDx>4ҹ^qNu2 5> p.6v'ܨ?$3S TCn,F(f h$P ^a 4^r2tc}q{,76) (=ι@{ERHFMa$uRGCT-RRXJc85=f(VALjT ^'Q @g^UnCjNwuc \i7G:x-{ Ta90kshw#5 9r7_ۭ(7ns̐ b<:3ېz=)HN F #gĥ<%vgA$&sd'&B\j\ΨcΪb'ZF*pp$RǼu=~ &hA Ԗ}ܵj3{Ȁn$,7/P%3=ApHtaR(-j)"FlIe4\ z<֪D  9ysv̄N7<ôrЛ"0ݡs8_Kr(xV3̣ϋ×#-A\:iH=BODJiZt(BՔO)xQ^X4%Q R* zzEΡ΢2Π N68 w6zÀ~] AнfsHmL<]v />TDƍѳgOt K.H-nZ9D[yQ qLjia/asXɆ$zg XV#mD/' E$=:%+O\OJύ sw={NYg$NXLe^/vhH 2 @Jj<}c5ag9u By"H"hkK.L!b-k!;u>.3ҊY]%qU/-pM/k9S2].c)C>!t;prQL?ML] :M g :KNWjGR [a * ns~wNK˵Ȕs!}gR#m_0R8`^{ۀHM!@0B"+ˎ#,G*.PYNupؑs$x }Fjj(Wse7@-D[y$ {ep0hRkH)Q ɏ RJkE Ni 3,34% қ֝Osl{Ezp9qO<e˖a۶mbW^yR7EfIe"R$oa)vw3<)s@~~ Rvd u.)GdZR[u2-U{&oZ=s;]~| isqeWxā&Ͳc4n{ òƕn k;U,7Xc=tM.1{WTBt&Br}g m~<Ο8쨎"Aja^R("B_|o1 k_:8"D{( #}N<~84h Ԧ{bU ReAo6@ff7vOv˩ D>F"Н3%L'|#It+iA"DIqCYRe4'k#.cI'Bfe#Niq$v$Ku&4&q*#E윋v:&*gG$ޘ]Sj  \#ޓpi01-+8<4$F`(Mhxю|_5V쁻ٷkus_s׵h"͠K'*{7.v>mzJ欏j 0x9:4÷ g?x1w<<)\;;"iDJzp ҈@oq14jk׮|70Q([LL }N6 ͚5ø\ƽ,LfS9rXVn *m [R2O0a%&慄ߤݬd`Jo u"Ҋ*{LCr+z-!TimgCӋVyA.[t5ù/5-?/X^kT8njwAkȇǀ "NnysHæ4`/?F?Ae)Cp|%^{bwؕf`gizw4*ףX? -&%Ҟ_q7&!T@^C)hh軂@^uԪU ~!wshڴ8÷;vCڵÎ;D>=ER3+Pc;͛?`ŊXE5k9Az\*M$yU-+6*&YLÑ*NU# R^ )PWC$)D D|&tL0yr^l@V)$Onqx#&RegV dRcC&grMA}:ZlYf@_"@dt$8nǾsE*IRe֛6n-DiQ*'L.aoq ےHBli]4dM5i@{h8AeVD.:{@OywOzc2A}+ C.&O"Tvt&2p3)\N<[qJ8m㴑2tuǍC?TySoԱ~Άj'mSYH;WCt0.F"qBmؚ,tlW{r=wd͞zoo{x?p'E. %=Re"3>,d1/2eȳdd:<öh"<"*"-RݭfB*o<( 5x$U2djyqealSe>c`W6{iNXHxw0/)jn!Q W4b 8%fuѹV:].ɩ6&s *z׍ɺڀ uNLy) Me\b6I0'mg`k2]#<ָm6D0DJx!C|θdĄ<>ʧ 5ҨuqFn %8v\=ȧE璯N+=sm™0|P0_.$ϸNIY"p>.P{R`c]m1s{ޒ1|'6ÅRY %PfؔedlӦ('xvΞ=N7o[7GB-5_!ilcc= `G~cpSr}$ =Ob%UWJ`b_1ɥpq;_)ZIlW RN-m?^R;z-X[帒x8|h\dIl[ &8P.CEIH1\SJ\b 8%B q])Ply'c~Vb@3}0oF|}W/~76SX2q,h ' gf;)hh`/\oKMzTs6l`bܹsg&:3={ЪU+c~}Q͈@"ǒ_B_zJd@ #$qDxS*Ԍ` &)b{,ExUbD=1Yv68@~/&y"ѕAF{CR@5LJTJ{ҹ%tnN˒%5PvV""N$~"NR"Gc#9TRx+ GzjTpDj+G:YD@h8J+:Nb\'P#C<5)菎6";r3pDWxRv۱kvrC/]/c7*"J'ČeK˟J^}cŹib5+K@LEK%eD+A%pYWoFĹٛq%I%rĺ`ܜ7e ,iNm _G~'﯄/G)6!<7>s=|54 ZFF!?"1"9cb7l\<ho:o˔Y/75d{<3/ƍ'ڶm+7uTg:<+DL43"IRH[%|Nʺk/Io,_(k$9G.yl岍nm}ΗZ11_3jgYJ^P/m R\k3zq?|C%uDi8\H*1^"<DfDP)1cx#R&v$$0*;s1HN1&6.zDf?D:AbѾ279ΩlI`JUP{jý< <^3Ki?[_h&"YHrTVIN| a7)ի]IB sr\"0gpy"=(Be[Q_9l)Za`)LptwA@"9}^a5RH2eͼ,eҤIBQN8Q(/}eQ;3e,y"PV{s@H7fK sяR˳>H 50'uZ'MtF?:(@Mlsxl1]̗|?"?ĄWøa`l}UpBULjBuZG,2_ducWIjjz-lkc9Z`B8-[zb</"BX2I_ٿFw}>Wf}riY' "Ӕ$ m@_E1@6/H3Xg%k~C3ߒ_z~aD q6)4\$KoiHC)F.NGIWRwoE.EDk8Ar+It_|8ufC_8חB҈dћK#rci$*)Rs4N.+߆sxct{Lvv$W7Lvu%t&?\C,]Hz/t~i})ơaߧp?"1@zҭ^amJ54!Eb3/e/"EU)Mt"PvL1M͘eb~Kf(iz~O /acDD_k!f4S 4)Rq 4 RhDn_&Fd5Cs5 UwO}R_Ao̶"I-AH'dHh29`΂`!^_>,ˇO`jRW"~ݠ~K_3^(>/DKMEI6tBXn,wD)H6&JwK,7(LÞS@[`,~H"~Y0BWհ) I#_pz*?ދS"]]EDDb&6/D;Qr#/vn)u.7ֆ 42<FPtΟ}>v•kauc8y xULs,_ç?U8O0x1wt:[{;tGҵ ^ath:ُ/˔Yjof"P^?@p$ײ}38`"RDܷiXp!ª_P5 f?Ά5,aK{ H^ F@Ɔ|@]I} ]68@Y_`S_WD rm, `W} _[#Ey2W1q Ku056m ܵ a9חY 4:]#QڇvR~C3&MJVQEX 40fe$Pv"z ZN3~ B͘~~7f z> }D$B-pB^Zâz. WWS$(9|~Do AⰇ?Ű)谒;] qg$N'JY [7GR~dzi=nٻ!GF2<_PN ꂁH"څ \c:ô!x'ڻ栝>0mS<CɆ.)%#( "P\JX62TCC_@cZID$ &QV#e>P0Xp?g|NCތ DS+R}:X%X+9 _as=5pZ Rǯ߃5 \#q5R ٶ]Q|#ѳ®(I\[KӿB_W* fCVLc Q( S"P\HX6"A`h`"P|3"PVnc@H7FKbM~ʶY*c<щ%5]A䊤N+JdS~JѺ+݇W`KF#lGSM썰9'Q(6{m}&[cs?Ds:-03u#x, H很?x6OihhW:ŏ/˔YjofD/D$pDG<iPD?N#3DzQnJұ4tQұA|`J0VaLf{YuO`9:c߰8S35*},U~i5-s v%gxS:b隖X"-DXo'HoEFҹ1& ti*7KAKO3 sf%44yX 40fe$gn,#$3\xrfe |<s4fŭ BDУHK{bO50f?XZaArK,LyoDd.?=魱 U&槶Ƽ0'=t|3,oE5ndzMee܌v]tq:*=e_D'^aD Yjo&p&eOґD$#%r>T?Ln{$@7Evt ]*b`&1fhe/l7saΑ쯃b'0lW:~.FD|ݨ0!S;#"˹)᜾#!>3Q5.1NȯQ~D<{N EڙN2eZIXMDD~isЁ/K|X>0 _kF4z<}"џc賕w`R1Q_ݘ ]UMS |U C>'LD5Љ욙xvl ꯛgMCCy|*|}'Y" s vttX6-ZH6* 7(A@4"Nh`"P|36DP?c$Bf8 @?C$1j+Irg|kưϣyR"1%v`$*?JPzp)>r@Ka+?GL?B+D<9Wlv@cZxl>T?C<~6z6 -D?)R?DDH|R&m<;71 /̧k,9z.AQ>ypH{D0GP-z() k͗@5mWlц>CfBtK7–e7@-eX^h2  30}(?3+"Ӂ8!8}Uë5Zгv{H^^Dt mjGR{* ՞F.Ґ{UJe~G w0ik_}!ڑ^aD{uFFxI73g2Lzv&,fSDo еɔ]6t5~M~Y>(d3&0x2(ps|gb?Ѳs9%aD"V$~*Wʖ1re|OeKc}KB"1| ){s?I % ,W:^wPܧ(qiJK}{|JE!"w+(D60JG 9155}A.]o &&פF/t ;wƦMD[زfe}y(yx^d+Bma. ۪j/iEwuwW/Cûe4P?&?C D@~o1hOѷ|>ղYY~^B eTaڪ܁H;mx,U+ܖ{=wa1{w]|w{w Z |SҪFujk4/_#ʯQ~h"PL6J#r4ցx/{Hގ=z=<5jd-nZ曹tƵ1)4z э4aֽAx4O ysAH>ϰN6?3];my ߌNs9EOBS2#8ibyA qi0N7 5h0C]F›&epI%5bm7Hh_u‹yTy6w+uϛ۽wk?9< |'%:}vp=<>{w{q72K5E\;vlGNѥ딾^xw`M6XrhرcBd;v,zc&u։@o6@-j9yYfe;/,<K|:$z߾}hР_.~aDDDX 42LhrRNnaπn4/ȼ>=5W\FltlpOKMIS!RӁkv E׮ٳer,O3Nsˇ^`.z:qq,uttd!2"ts!;w "ݞ'3;?waV7r彏`KMI}?*?=1ͳgN>y._HEl;N]~??yQlfم }Ϟ=KEyn so&x رCO6 :t}}WSJ`֭v*^P\־}{l۶-۽T?JU2_|~̙~T#G#<>*.]$ʿ[>xC^E8p@_{5'{G:?oӧOC  So" fßy:˲Ey50~19دJ_ع1u y0왠UoG~2frbSu^*ٺuk$&&|춟r3]v_1o>^ Ur1cƈ!ԩS o"P6?\fTnZԗ&--Ṁ 2vaEyi_՚5ka8={:F&MּUT ƍ'dg54_2XdP<ɊZ͛7Uw޽?؆ >LI3UxtPK/9: 6Y 2ofe^+_jpaQK|^@U!' qiA^C /l_ (⫩!OJ]$;'`CrVÎ*gdsr2_V㗶Y7*ۯXFg_P3fuŶsN7].P~_~Y8[^=Wy>V ^7PjnLy| l(/eVlL33ꜹ;@TM TDӥjkR=W_SvOU}/bHu'1@ED~C*:9*""R*""R*""R*""R*""RiI8qIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/graph_9_ex1_hot.png000066400000000000000000002363031153663664300247220ustar00rootroot00000000000000PNG  IHDR^5N pHYsaa?i IDATx}E~owmzoל" 9'IL0 9QALT }=>Sgnݧw~]ugNVڋ/^xRwxŋxŋ/^^xKԋ/^x)B8ʲ:qnƍyOԏK>oume{3Ueyn̙3uϞ=Km=$߹l~oϏ=޽{N]?H?[^c~Nz۶m=w߭۷o_n]Q<{xԜ9sRJG}zӣF [1x5^D38C?AyR֭ ~h7A6f׮]z̘1 |,Y;w޷o_;;?^& >`y7@O?ܹ~'ڵkKx~h7'~+FzweϗCqh /Ѹqow/`+=_A2P`?؞{J]bt|pa:4\`͚5 Ý 1:I&uv>}衇@ˡS8fm \,;޶nݪk_v:}޺tz뭷d֬Y-3PZ5=w܀!PqJ :8 3f h-HCnb^g|o<Ho<;th3(W~p?l18ay,:zZ_jU=b}]w<04%RxnG}tKg/es³D}h+Q>5jMN0BX[nO9mW^,;B!_~uǎA9x~00oVQfՁ} z뭷o ~Kx-wp/;?餓:`< N!g |-Xx߾%# m۶ :gcN\pAp? Jˏ=:8#v#?< : sr9/$>ӟ : @vL͛= QO?>c}A@ -B@xF,PAذaCY@`YIpӁY``vK|.cC !`h3 `h/:~tuԍ{gVzn|  wP "l<1@}G`@;v,>-@wmXGZ}Le`p <Հ00s8~c`  ]ahѢySF>5Kԏ~#1;3??gx x> 3^wAwk/pn". `=}$0ر}t:9q-܉(NLD2VљY)@/tcs:v\իBY u[E4ht8-&샵9W\Q,'(ʡNF F Akk-[`07<{pA {u lMr!o:n?X:`L`(u< xƍ.a;p0F`LS w6ڎK[]E  vq ^zvi!;8oCG|O5tpSxy9 r P7ʡ~6&2 `Ġ'w끶 M6 +cn  #fo|.DY{ M_ t`m ~_p =w$^p7X4HvqCż.2A&p:Z@rWsxxf=-o("<Ve7ɃM h'ELx'0}Fޗ_~wyRܷ {DY7,+C\ W~.^?Q)dq"I7m>sKsҐBGi,Bցv$baA `h``1BHz*2`Z"I $@?3Qȝd[@dy^6:tvY! ]=|pIc c?+>g㞗㐽}fʺq;\v]j3_wkϲ.~2B6;sҵ1 p K}`.aKqߏ(읐gy߰|^^r_{qX՝:v^W8vD=D{kk\_ۛCԽ}GSԻG ieCöp/"ߟ="?k{Z6"kleOQFDz!r,'-vm, 3flFR/#@EPi966C=>Xt WR '=:F1t yjQ|$];>@e Ke@6N茪g9F 5GGe{ʿ'ٯNuFN8jE׸|M'_qhH*?٩)q ݗIgPNxRڶ5T8h9sCځ;գOtwamԦǑST8`թ~\EhcM{QGبINF-qը M 2:d&;^}٨Eykd(zuqd&}>D;lF-|,=wєvJ1xjMiT8Mx$ ~@@咜z#G/}t@8x/#v=ŨЦ&=CeڔR)@@zPH\gFd*<\k@ʶ;|k Χkq]@OW!$N'6tѵŵn@u6!Gm%Lu=6kǟP^U8h'<'qmavĵ:g6||uT/QK9$:h F;Q|F=ݔbKJkKXA<3 ^;`k<̛pV(FM ܤ6ic F*Tf38]0~dN8'z*dF-F.gz"=١}@^2 Ru TW.:d*ֲ> nN@Տ<c#0/c5' J?DLД.PġUYEYà@G]D TX~fpA5"_Cv2j ހ{  :*EWrxʀ'`r*I@{&g2=Vy1hP/ȍxYVj2ũ.X'kCJmPvi*:T.3bh *Oj5 bqZT1@1(T|d<'i*o2{4Xe&Ťj6W@KxL_@O3ʬt6ph} <!NS?sg[DROt\9sGPOo< e[̨p;Ѻb$j<V7Mm@xFnl hP/Ʉ 618$}6PJ&$RɌ̍ŁLZN>D}턔s5vsinlO d"4t5*mi3(k]R,M2Obp$+))$1` :$14 UUf2kL>VydB uPLEkP0/y0ٯ'3sTc| XR24\.ݷ]9Gq =:ix Z絛z \y:4]́gl~fqIj6F;,_<Ǜ^(C%E(\DV\v dE|fNE޺4* .B4P^E/c OT@V,Dě;`*< D)={ :fu|Zkd[ z9fqIWj6χ@{ӶC<%^cJ'Ocu }BFkԨ~RJ{Ooܸ1pv)g*@$S `:v@;=ILmq,Ie nGڑd۲mys `qG IDATLAr@ބ<Ԯ$Zy.ݯI9\0+ r1 WAt* .Ճ:NSeSS "M0GKJdz}Ӧm4һv};xoڵKݶ>,xԩSstɶmQGU?!@$zhv6IhGRWNX}]jkM̹(ALG~|,:T!+nY@9+ڍ)rPWcUBz\_3˫Vcz lC5TX l&3Ǥ:Rx}S])+ .\JnݺUp zܸqg0QSOuzA$t=@$Lpn&v%"rk,lS iQO{J@efl3JgU'% c풽;2vgJ RBY<*Pc3yΤs$L3LuNaf@O=Tݷo_ݡC/jժ:w̍Bn`DBx4q Kh$ гMzB A5N;u\~Gd*d( 8, mCƽ4:$(V.? < *B~K;H`PED..Χ-*D_y1l\ nH@E+ LiCtҟMwϟGzTiI=TX]@ʌ2Ju< ^'UJ@|ڑ::dK2[{~vLy3'Y xO8T%֔ɓ T<\ @pK6ܒBk٬Pw58gޱcg`#k-sVD9޵#txLDQ?)2)EK%o @%x`i]'+uS%3dvblq K5ul'|ڒlN=YM :2Ҹ*M:x31k]@`ԲSauhh{َ8F@1?Mpf23Mv@+HB-c==dnl@[zZAK2sD䊴nݨ|ڙ:&d?_$KVsCoZV=QPN(yш (0hi[.RÎD.f b7T:;yIlI@[x %" wr/cKRNdrډ[*@ߙ*i{< , Ί8U:Q^۶Hvvm_*De{'Z[i%Ev[Mz[f24@{nP/Dls cRL4n硸ݩiDvfTG0OQ!Ӎj5Pҵacߵ(wP``3Ǧ:Nq/v37(d޵Sk.v͛MzKf2!CZAK2!mH[6zIWHB׈s =r*ܴurթr# [33x֢csAPmOy5g˟ʫ~5_/˲mRЩ@; 8^oc57mf^ʈP/Ʉ\`LЏ_wKRd*5`ZUԕo$[ |UlZjy:8o(Q[u7U1TY׺V+61Ph{stkLzmf2MzЦ@+H?V3&eT@+Hm;&5:):=Ϥc5C;vd?@3Li<)̃6UZ 2ӤhIIBi/=xɥz뭷뮻NO>]תUKϜ9S޽[׭[Wp ۷ܻG 6Oo߾=K2!(}C )@4 ʹR} O>oc=:* Xr=:bg}SݕhwssRMNTPY I=Glߎl--SGo55I˅[ح*in1ګT w(½u^9stӦMKϟtIz1rW /t͛xL( GaRP!"ePuymW kCymR4?:TorIlJ`Eq/p靫ʲXWptgl>I%kԤĽ0lyIc+]х.U[Gz t:bn9ZR7իWֵԽ{2]-_曀Q.X@_{zȑ50-Z3fmE> @ypI&AY\,d"½t iR(ta"eePe`ڗU!Ʃ+2vScoK~lTI}^5G4 yBu\DbUpm0Qth5 7m&Ѥs$Lgn'O>QO~nXk%nvZ%\(k޼~]vi_uƍ//Z!cr<@yvbng ŜHJ`ep;Σn88h1w-U'X}xM@f6&eҶ6+\RoCUtq/-U@d`gPBjhցm2Ͷ&moiL'@ X|IݨQϘ}뭷rpM7][lժUӟ}YS^J%6T\M b6@lPH9 ؀,u*>mEuSD@]2k %o?G[ fIeiqfq k.t&{IAEO3J eLǩpq!f^F\n H `dZM)mkSZADC ѿwnΝt[nmvѣ0`@]t رC~ /m۶ X+2OJ&2$n ݺukpѣG>[?ӥeb2)\ltI,ʔY/P@kdCH:f\aQ4/iNfRe\ vbk<WYToTa樣.Ef2H<hI0{'х wܩ}۶mG9Y$UA,10xG哑$G;C Ivֱ{6Aޞxql9⸗*ˊ圴,c_R'f;=}樭aҦ mlxG/f#,@+?|,FXիu:uhu{p$Æ 3ˤm ykMzFX4R| y3 z l'P^B#xlZ~2W\\R7l^B{忀= T8:/R!x_Lc3#[E{ѵ*t9BI} [Q{`K2RnfD^QtZ=K@ySAF5]Jm:t 5B<6M@jI@?L @4G 8q mhޱ#khjm8"#V~YZɄc|mv^M6"wyGׯ_?8Xt́pj b#n%uWpKKTܺPs%u6+ltP!+F{Xveԩu2Qd5t)H<,cqDeFt]0[}C[*{1L= r}[{Eurf뭨%=* `B90,a6ߒQd #@xuUz|/gӵ3%B'ی61췠HE׺glJ\gZWzƗ&G7B`6|*duݣx =AYԮԮP=vO6Pogv6=lNFFd= 0@=wk]:sT88b>?ӎd gitC{>=@YvYϤj&Wuz)^>lR[x8]yTv0]hDQ+u:4a>GK0e L/(PG9ffz@9: ;JnmmҨeJ#['Qg% =ўVxd"Ŕ-sBgPOjކcӛI!fl1ozC: Q@k-u8(S̐JfЗ;/: cSh|KgP}…ۄ/):cI*FJ̲9ts3v-"e42RsAgQ&=:V3cLzп{ZAK21|(ցN2½@5=FRY.g *F-*z6`\z IDAT_S`E`.6Psԕ Wnbyإ8.] ƋkT90<>Fo'DZ$z8 * y'a.ŵTGTo5ܲ&="V3lw#=VxLȅ蓦Sj~N6 @nq,?#eS催 Ko)0#Le*ͬm^(m׉s;4 DosfkN%R[u{;`Kྖʸ9'a R$LٞvY{'3 βCLzhf2oGTxL.t25aҩF,BSYϡZ:IYKsʂ]1ʀ 5No26Ԇ[9֛6/=ڌZ2Q (Ŭ%˹jnNU8X6ٯ{ұ vYe03TJF'qMK Mi;<=VxL@;EЙ&䦒O::c)irw\lAP6r$Ţe-A*hy0W,vYی3Ež4}^Kc)dמ᤮ .3^ s<.5f(/!#b5ߤ{=Իp+Hd@D:tJe`e;=Blc]n(ʡwp>Y*&;螧бC%o%5F&rnZ1DijёGˤ]d5,R}@:isIe+ʹ8fyhTϓ"A]즖˗5T|!$\c醶*0u'3c5 2z ^mkl* QGWL-PY0u.%ͧ?I{jI66-Cu(NrN=m&mGEj]eQK•A^QXy;a59\hŊ6]MvGK\Vncy^GmG KGMf2t@ZAK29@_5IKH_U` cvǶ2؂;Lvu8H<T` 'X%(\{!ua?Z@٤*AKӑs??%% ADL7 D.P-Y\*PhUkQfOOQyI5V[lϓ݇T.$:ײ/vk?`twTv:+狟H7\dz򹫧IstO5 qQrF*$9_v,?LkF J +;8&^ p{j&}TJm@**aN J71ϻ; ,?p?HLͣLIPȏL.[gvaKW6KDb`Q M‚{#d4uHknxkf{lڔ0u3=#501_viҒ*g:@o뮻N?^oڴ)8rJ}EƍY/35kycƌofp~{Se^ ho_jM.S!`ʀX@u,`::ҹ".V<@|;YUHm7o>JmDlWr]뭒+ |:ychg:'U`YHkqMJ1GXbO*s*X0lȞcfSkb6;A蠪Po7oӧk/ݼyagy&ǪUݻw{!'O֧r~SO=1P/Ʉ@6&.wԥJΗ2Cǯ2.(t͝*+~稲,U*WKW M*~7[uvԲ #m O>.)wfZ=GU:K:jqTt5- M%dJ/+zy''m&}]/t~%"|f >]!5o\/XL]#G&L(:u>3… '帗xLcwMѷ)}G|soPee+G5y]:^Gr*| I?e>I XtFyɈs~m٫t ϊ:;`[ UlK\K؎hr*Ai ]&6FJZUؑe ԨQR}bo߮UWZ9v.^X0@_p?pi,@$e~@N-=+D.+w(}Ll:h yQ.RKi\J62.ʺ9`)2.+l~%|2E*S*?-VagxpU+.Cԝd?ΖA ]lm%,`{}6]2` ` *ē @4\-/3I220ڮ\y5_,t)EgD^{MiTБTZuEWaMoz)cGPNm@e7dxnX8t@FF>;ꈲgO{+_Ae5S7ʅk7%3h;@5i1~bZ"RW%H7#[/"n'MgΜܹs6]VAvnܸQ 1O6-(oދg^$о@zۨ9O82ZW.L nM+ѻr$\rl0-F]J*HŕH܍ƩhIj ܔRxg'@.щ[a}.ov1ɒoy4z "bەku咙{M2IXbtI?V@w*=_UA2Yٙ'P/Dl1r0$P 첵u ]C]jkiH-{δv˩T8$jXJ-#қU8e9YiR}FA]O)XFy(g-.dQQNwfLM>ܽʦ wc&@4ڷy%/O[>r>y]I ?u%=(:@7Y "Z|t2]F_pae]`,12}`:]^WRy:} 9jèm%˶Ѭw;|I9**MT n4xl4szI[{p~wS;YҸ(8;6?"RwP~нL'/$,||&<_* KJmh\;p#p1Ghel4?Ljj hEP/ɄtPtn[ bSm* rF1gAT`ӹ% Z)&J`kU|˒ @]oRYtsɆ Irɏ n) ҅#I#W#ڌ?_yxnq1 sFl0Εd(\ m.(jQ`7.S+M:^3+ n Bd"p>5)#tm.ϑ~P> >]v6~r0g>n[f˨b$0J\ASj]b1̓'y*"^¼$g~2I's =s2uomjG½KT 0xͬ0^@+Ji*:dND`W.{Х&]UW@J3K2Qp4 tEK1 R KA (nq.nT?oPSΥ{M e6B\K0xNwZ{#`1*Y{X~Qr]'/O;虡uEʍ7DeK @'`5@tifW \C dB P "Ekj_ BͷTsw։..,Ėdv![nW3nw #*|Z_%M <#g\>9;A0'1 dVkX@/7]@_1xͼjM=(%9@VjN}/Mdܡ7IA9WrM}>Kq*DVf(tpOm7mc h7[qN*e t]`EYh5P­%j߮s<)]rd}_m0oPuʲCtI#R]L*\Әd9G! `7Qz)Z2J9`y 4m-OlIx=gU4x2>HyQ] Uuq뽡uصiev@\)Xh3C&] .63Њ^p6:ePDR^R;sPؒ6]ҭr}8Ft<% R{ڰ% dip\ϊ|;WEEP;)SxE|/Jyhv"^[sL:?^3s lНiv^X˥::|mrY]bP屽vu ^lqMkٯ@_ׯBe䰽~JhgtБ5I̓@_g_f3g[>Co[n>cu.]tN3#y-[֭[˗y$+ y<ΝG{_5j[q wiD0h>717F?3?F:J7uWGu=\ʏ;"=?WYP\Ce8Xi:>.r@j'|>e\FP3`MoPkp0yOAUR ] 7全 ӹwT)Kd.WF<@r"*r9jntu=B{* x⵶3~ځ6O#K知| QGT+t EpTȪ=,z18lL:],YDm=cϓdlL-~=-{yq "^&1NB.g٘Eu?Nݬ6LmM O @!,>#Jd4plqzʕ+a飇 7oG?8dO818}v]V-q|Up'1_@#Hԑ G.ͦ ڭƍ* LK5T~@7P>Ae3h<lp'{@{{\Lac{5H`=znMvM#l?ϫ7ۺAU,ePlԨQh5,X}]=jԨi"bnҭ[7}M7 z3w0an۶m0<E:uUV4"ϧp/J|vp`5Cw9MWtʂn 6 }fDʂǧT/;>!(Nʇ3D#z ƴ|Fާ>@쭦zRo0{_Fla࿊~½~F^/ޢBV6I6GxyzKg^ שZ.]ZO^rl,|/ >/Q!_Jר ;aq6챫=ʏkoj_Bw˖E*tHeyT/bކe*誴#L>%"6|_UݣtU_ސ)6i$vAxF`VVZ-"ҢERꪫtѣQm۲:ЃoqLw~_%Bjߒ~EN l T oS y.u+oQ/Fg A]Uk>Ta"]G^{ ;Mz`ש܀+LU| tpf{"_[=Ozvd5@şyޘ7ڷޤc#SCr_Wa rP}񖑯RxSYٖ c9]F982}{2|}UU5]~=#o?}C;ocV7HW}ũSGcgVgD7_*oIpͩ%Hť,ne7bqWX^nKY̶Xq=Iw}l NsI:^ϯ]н,VIU&$ЕV\%UFP'Q/[/PMh@6.KDf[ v*2Eivn(3跕5s(ݻ_SU7wJ5jaOPͭ`@+YNcJn{pnp|O9SzLEm7 Ii@K14W &=XJCqǟd\VΪf{cg9VXGJZRjELj5:oJ\x֮ެ7 h9JhX9Px }Q}6PWM#;$ nJ"o$SWUލ"0~M6fY>}@w'Vs~uu>(UHGo[XlSŢ>)m:X4U- 0d[LG!ks2l7:>={X"m5sF"MU)8m[`%X"zh.gYRi/Rz>ކ ;Vhmc89l?3{&ZlYF 0~ kzD}%þzmk^U TW@'.,P9e2*\QJN>Ci@C5\7d4Ԁ͂eIP"w2maZj{m 58ki ]Hk_&iU)TKz,>Gݐi Z]I&WN(d,7pSItS^ujPVs19σF2'aMU(P2WlO ʖ`#;ۤ2ҋ<4oJK}Wj1ߴqy%Jj"uıTPzſj$G؄*?[ |?F7M H+Ўjuv&! µ;Y1_-*9fͻp@{f?n(m%p[*CdKƾ]eK\5Xow2|,dL`,"n=!4qT,`kTΏ͚/ mYߗucV g9~gڝkȼhZ~쇦 8 :Gu9 (|n@{ohH@ڴ/EmZ]4wy i[_]2&@O@@/z-}Cu!.=z,̕e'S@O@uρ~/P2*p)Ή2E\ch5 TA`t^SρV3)i+⮭6oTX¢i֊Vt5,v*RJlk40mFڞ::x).6PMiJT JƩtRז|/|G@_We 4=kF{ ҟ4q(Е5St~Eon i+S%#W8J@*@Ԗ nd(m`y_ U˯dK9*3؏ ɖ2T/4E7p%KT0kqLq^󚞛v.O6H VjON81"!huZ4TS3.z(>׷WՐi:@;{ɼ'W u6=cF; mėg:VV&9d|Ţ0ἆVz>5g`|޾TxJ4UՑ"L{ջG>Z&r!+g<ŖK= m–d]_3Ik0”,e\KY@"\Ē#Q<7Z-ECu!.E={v:F *2tk@j,M[4efrnomVxcـmy a+uMSRt`yջ@eֈE^jiP8_P ˾W"EhuZ% JX-/䂯Zk+eeWcկ T\C~_koh nYgYItkg:؏Td:ɁTK@/Eyy_^Z> MZ] _FV!:gmO^_&i,[7+˹ >>[ylc_+_j]Ͽ&tu~; n[O= V?0=O-l@ʯ9(gy+(gQϺT`[ˁ>sܶΓ]3o̢˺d\] .)DyF@WPNzI'B2 w%7^{0]]!ıޯݥ-}WΨ9y/4% >Ϫ}/wmڳ@;BhSXdxPlmݦڝ_m=LmM75EkS M%ܨaۨl]ھϲUcSqT1@ncoV# ezWʲD\:*YoB5-J/;-H/2lUկꃻJTWkR8C-ciG N{ z!['{hG:@hc.+֣Gۿd>b)U7Uܽx׃4m{ `nWn&0 єPJO3汚D΄<\s~[Y)<Wr"PwKrmUl4D"注t27:;%kq7=,jvt(Tl壔J.%g^MAR>$E^XZBu$vYR޸+s(o=]킍_(~q\sv7xc_\mvuO`|DsJ&ٔ>kS.ܚ)=q@ny˟y9Ўjo>5kVE} ja|9gJ)FdJݹ!Dŵ9Lbtn^ozTN-m(W"i9\~nFSKtOJAQU(KK1.gWMvጯjU>^< UZtrh%̫{*ZRn5LTϯW9P~.@B?Qi7*8 Bξz|?a8{'&k&LH(;6:_ IDATG5)PB P .zA"  ho SZ R3H G $(4Pa+}71e- xWK 9Zw58'zAp^ڜ]oyy FRjU*6"_"rVqe^U Ehb* R]6?hH]f# 9 2Dž+xS\ѿf:& YvvȑO?tb HAv )ک-_Na]B%RwGS+F(hkm@!ȶ4Lj _0 |<*"ZcJHaynO6o|ߍ[QJV 泦’ZoƅIjý/9۫X[͚l$>vmyK㉭68-Z)P@2q.O4(Ywux 6>GXGYtv>o|l&Ob/lLg@xcnDhxx/~0* ӛU\ (ɔF2g*:TGJ LuN*{B<~iJR OMqU`>&:I^[88qAASzmجD $x*CKceW*$?n=ADN@OG߽bs 6]. מ9s;vi!CN:Wvb- qr~ٿO/d3}V},''O{キ4i6mZRD#4wns(ˊ2}8Zfں{CKOPӔvhmM`%=^`s ICoIji x/qm0W1yl@.nGNkVE$#%|k[(.2P>g.|RelpA06m%I۬Te%=j@]z ]^+36x8t61bDR4(? ./||X{$v5״;cR@˚~IY*<{F{@|$Gs8K,qCAUSSFm/5Vq;@*wznB.02[T lhP۞&=) N?sTAQwPIXsӾ(%9{# ޴ǔ:OV[yU5F+tSϳFo5k qrnrz^#K%(yE @[g,$+y|oܵދmm9scd! OKKKsgm?prm*WuJ.:յ|c=(%h]c8=`xme@c`W ZV_߶)1Ǣv \\VX }b J Ҋ7b)ܻcQl3S:׫| gQAEPr frc?nAmɺR*\ɱsvSrlS]ڕ]z!L2*.^Wt]Z %DW+F'i7ds Z*P~@RU?O#ױ^qG>c{]rʹmloCr|[)O[(:}qO4EKk6Gvq*1J=;Pmױ(=}_czH,LWѢ|o8U*nc^ U|o|q+I TFp-mVT^Gߤņ̍{tUeąK:F܉e,)5̝ױ |.9soe9`$xx-JzF2Q}Q./9­.Ӵ.K&edk|;y^F(5a5|zM*Uzh[qǍ Sde,*9Bo[P 787iVTj`9n5b|u3޼HeΪ'|nT.ڿ( d:0 u7ƾe0¼۬zΥM=Skd9 z7 ZpDb>Nh1:eq2nܸd7<ӧOuӟ4 bZ\ݓq!DtA%]ξz[<.C0 e袋a:Nyr1TSDO_h{R=E)PB*6'=,-S fCuXmΓO{::@{O6+a t:P{ ݾe)A~@Ô!:WTp1kw|?gE+WSf1Tk\\@u1.Z(|Z4b~BiB1@R+9Qz\yא|v́!c6. Ui}x/<Quv&'t}饗7|3qO71y xre/ʴRAFuPsnCS F o$n\,3GU9R%jЇP;{rLyӐh%@3 E4E72UAn$(ЦVd03'eɁv)| / n݃}_ys+U*IT1TP3wqE%)+cm4@YyY9a^pPӓ6wE\%:9EVpTpqK|n\mWHKбD# 8 0rTR7\FmS9wW2g-(G_MK%zu3}b_Ra-im@4BJOUG+XDBć2l{z’V } ]PsM*W1:;nA{`Ǧ3Y{S+U=`] t tN(dfLhސ|vk@6t [q|v޼yf|Oj nՇa,lT`J*WaC*&Ѿ%FWĎ8D|W 27c_ZչFqZ`SFSqb(ᩗRD]9pjwu72%kN 2 Q]-JWJ$6i+ :(ޜmϯkP mH>Mѩξzk!Vb8^]r%vʔ)meO-W.AJ2Zr~TCOhH:0HS.*U~D9Y]I緦EE%jmzT؄ΪRk 4CVA* OimR5,Xna1Fӊ9j7j@JW⪅5mSWLg@j{e{ /0Ica4phdlnčBTN`hZDwHm{[NPǜzSh\Jv&0ڽ7Wn^t=WU),w&ƾ;&)sc]msNqVp,!UB pm RAvݫ Dq_`M;.V+v KcKOnw_ۻqVJS R ye; yK7Tn9# T-P8eu%&QZR!hW@叁WGXCuvT3}&_|vKjTӎ3&!h _Ṅ QQx#VZ;͈>7yrTSTNuSV$&-FK#Ѥuj5ܣ̱{1_T Sf[  D8DV#B*OЩ4&~J%C4AZ3> @(߯!ԴU݅Qt [p$>t<^EWM\ght_Sܶ4·n:JWvOqyGK'"DR2?*;ڔ*Gs!.Mex|.JK趿[c%TPNQEQVZL`D<[qR(" $IXg>틫) ,wT2 "ZWvt@$[^b]tR ckP!jhXJ<.@.SS\A[GRgL?RlU("ͧ,t^@T#BW;새QC.TtcwjH6p;ξz[ewvEj2$ Bbܬb4a„nmRhvKʖ\#&aӻ !**Sr7eojMJ,%PѴgXZpsiקԥSSy>9"enHBZ*!em 7,/Օh`QPV1Z֕qqP`c\/L*4s. ͟#Ha @c@syW.6IS9թOwQy7Bs+Q#?>mϻnPy<E]u6` #圷2H]HǺעR9վ3Durg+!n;똲p(qmzǑG~(¾?y&.M&G%? }|{9<؏Ea܇;{{(yυÜjǢNu1]9qsƑdQVـ 5,b9*St<#ш9y@4.P*)2RNmHiu:@`I~[߲첋}[nizd_ W\헿=o&_}G~gv*/E1kcf^IT=; rsro`P)7(ѥxԧ;}"i8*sݻ)*XQ`ʆn{N) u|7ŪFNlFeW~t}0UkfJ25fgTnHruQt ۊ5~ BIJ%9gΜ Zk=Ӓyemp`gPS[m,o2]}D1w^N9q 8g+ 9'}o"8~r!0׾<{wuqn0¹ի{Tާ8_=boٱN~z,;G;޾9Cz<i;:q-Ea<6p3w",A7 rtoᄃ;n;h7^=r@r<`u&y;1wnK3[Ƕ60v)AGˑ[9XLB̝OTZA.)\kf=q;7b<ѯa&{1㹛w\;@غC[v&~參PN_ιvOe_YNejhV Ipo Z]QHx^yOLܷ]hQrL tM AD^?s9Te1BPަRy8f g8? 5:zd<.8|?oZg8&O1 IDATw{>|)) qsOr&P8G3;`tPsl\g^l4y$\}@[8nџ4GtOqCw!8Gt74F3~ Tt8:Hj U^ݾs.Xi|Hg"!sp_rJ(ށ}pV7+7} }cZ {@h7שߗ92HgooN1?Zr|ךkg`]{z,HA@:p?:vO7ܤЗ08C\woL…omjs!<`t(&n4/}CBy#\qw=jP(#{@(߬!I!@x#m/4Mr4{7Ξ{_,6Dtu%'O<@s6}MyW'Ǻ/pd-hCOCLĢ n۫M1'\t}gҽo?ǿ>Ï0>׽~jn7`OR^pCe ,O w7I@)t/b#)%(+j&gd=cF#AHǘbac,pM$8硞z4I6+$PuMv5Jà"8@'Zy5X"_S"4x\rrQɃknRA*$i.l>༎JrGJ^$s;b{]H%H\+@^Y5Z>Z ki#p.W/b3}b<0'ONH,[Vtcq+Fm/"OkngloƗI@b H,pG*,0 0: I 1ƀ[ב$ DG~R!9ΏyL ŀhTI.())ir1}r\+Ϗc6ž"RDƱǑ_-'ٗu#爏 !x8Wr0%hj2TMZ}&:s>3#m6 }o81ԚG~>/` ny| Rĝ .V@joPv# (tϋ>j4RQz04ܦ:&Pt\^&&UH%*URitjT˲V}rm)QxDI`.Pٲ`5gt¬ tJ06w^ʥH R^ #_ S}_ػjP} Нݐu~/~B!7l$5NɔMf"sL)deos=` bZZnƾ || g N?k/D!&RSrDAG8QHe Ǿ_kwW|CUB?4@F{Fes#Q18ߐӜ!˪^{e{x>'L˖-K`mL;vl<j:&_$]}wȑv 6GuTfJ8_@O;z_~ƩPڝ);._J7UՃ4+WrSTZ #T*TKVz$ O K`hS:ҒT[HSZ}I!r.8#zV)jTi<T,-  Wqp_TZ\ vb@e=#('F7- 'l˗/O K[lt [Mrf~p'd 7TDz+bu~Җph~P8?sM^ם;/^YgYVb>*ow!lJ3\h5u}}y~r˲Rܨ)qj8/WM%ž`uc\w՜y޽{'FuϖlT=qu][h2pg&~BEt<%sk]_cu1vii||= {8>{mA㠫ݿT~4:`:ػq[FE^o \Y+ݘq  G~.Q+y;*W^ʔ.c穦n`Op=@*jj kDMAHKq}3Q#4 ͹\ihlRyin-p>xw( ι.*G딱 ɪ0g9I-AHDO{ẃ2_N79J6lXrϬ5YZ@K4"qΓ*T7 [l@ӏlu<^ės >>C{L`TER=+-* ӽ{)Ү3c{Y:I;]CRTVj%2lSR,՗S:WVz ÈTWSkIDv6+UJrۊf]Ȣdi 1άJJwhY] 9UY~\j7wu| !FѲ'kw_~AA%Fe>BM7ݔCMؾ[67Po7)_3m.BvZ. w[l,sFt0AAY d{BT)U+U s}`]FW/SQF6cQT$՘Urlq|IO)g竞뭪3}~ eą-x-.emؿn4Em;& NF>H#j\{3`i)SxCh H7,E(́(Wzayo۴uszRYX^k`@rM> .={L9ۯ_@vR9הTjP9uλZ%"~~-NSZr>ԣ[ſW?R8.UtDnZ`rrQp~\C]tMgY~Ўlo޺J=> r~ϻ 17MkG*{=ej0j^;(ʯYư?_@^hG57Po]Ŷy)wn)rN#؇I)Rt﵍JioSx9GʹQx 8gy%DB.aBo}oJ?k`(nT9%QZ>d,yǟ׮R"PuyŰ d@0$H&]y)QoVt*i5C{Zkϛ& &ʚ_+o;*:@;ξz*-K@CNrS8jH߁ݱN0#D_ ѡ.>&pA- 6Ż"6X2 Ey()TiyG*# K̂Ҝ{_B@%X": Xt;xl `!Tkau+IH^*POߠd";w r]:7ttoZJ=HSzԴJ.pϙ\Iܳ,|GW#bx 鍶SgYtq0=\L=A 5p^" ]@s#WF(0Tg\=uKΰI +0I0SH0mQ$QDgwVn-2lbXFQGR`%|`cjM iVi)P*ѕ{v+p[[ΡJ .g@C{qM-g5M?ҜvrǗs.L>1sL3StNP6>Θ0EPԶq4x_E9VRȧxPt֮2dP6eCe*@ U) DrfKT,>K& *9!(m㌲;-NWo,Ҕ.АUAz?O򁱔3 ;[*Hf[;s ߓi!<@4v cSMCrX{Q N"DRPL?kvuN|S~[XhWbj X(!J,n`64\78~69{e.*8H@Q&@Fź؃.Bn⢣t7`]k 틤./)ըr9i(XHagV>JmEUVZWLg@ufkOsr68q.T?HDwm 9puZ*N9)B#9F{˪'tΕӧMz)J𣦸zM8&%DF*+d. .biJ pb~V*eT3T$tVSuJ.iz!q\/{Z9P@SaVPTf:꭫4@7W^%<[aK{J]Ќʘ=T̡΍K<'ݵ&:}%x:0I҅z*L)pҗ8%/QYǷczcҼ6jnT=SmX qM\U(.pbtN YERw"W @.tWEB5+Ji@Ԥ8=5:6}`ޅ{zLg@uŋ :k]{%hK˙3tmKpRyP *Mp v;_˸ޛi(en)hΆb;΁[ @ w7vݝop)=4nR>K R Dž<+!*ӾZ;cݸUqYG'ń̥rTjc?dQ~UQ\jKzϊZ;~Ouvp^壘KBDs=7 @@]~i[iuvX3}Us~]srs(]ӌs8*2Y׫Mm]y+sTT/gZ/tW0M )*J嫡Y?kʵ0jZa]] ZfO To1՘| MA- T&R2*j`Σ򇄆'x9?~΅{B-@9z:\:ξz*͹pPQKW<JP@٤Snؿm2y7A\P@4W.,Gq09gۡ2V`%QҠH~KiVBXH0 IDATjSL]!D9I.UԔF.=S׈𰾎 a-L[O _-Ty1JgJ={kE,J(Us`w󞹿 RThM-e%H2vpco9k(YJ4 ^& eTRЬ _#}aNu2 %&Zyc8IYְ<zW_>@ڡt [WiNvﶞh2ͫ i,+U2`D(]|9-c mI2žr\#BhS5Wk5W~u^-t5P@*K ~xW!0[f]p3;B5+^M)[(͏e$f.,y4` *(bX\(~e$(n'H!Fjy)bR~5.&Otyl`YPoLg@uXNMX敝W *ݺ EW|8F+XC,Э>7KWV\Yyߦ#y+)J•.]~ԂXj:7譪 z?gZ*L8eOŠ0eKS`D^744FᲘOg%@2E~nr.d*P|>O}(Z"47Po]9goqْX ܕU 0 1:.] 0 e9Ecw=N@1UTgCwy Y~ޠK7'n4Fz_tMsVl,q dT+ B%i$#\ p˭˷ip/+s7/uY"kap–*[{n5c3'h57Po]ykF_DDPXU&"@4 )$2771΅6@e^7E_/y/{oyࢤ%Qw 1 /ٖ@42j L:S @@%DF@ou@5*-q떳U/AF+R88: ݾ<t^P j& j^bhϨ`O=@E 믷7pmzd(ѹs&ۯ:{QF%E[i3}UOc9}Wqͭamj2EM2ݯRLA :̘=#uEBW|D7%NpJ@(ݹt2uZmJO-?%wpkTV#ܿ@aÆ ~}Goo>䞖-[\cРAW}'knj'@nܶt [Wi>v֬UmnW\-1E])G*@cL:!e[ִb >e涷n~[ҶbHI^2G3%X 'Aw[o>=4+j4Ư<3qV!)j䖪L =){59nK(IJ@V$PSDRy67@TbTR>h w]woV2niiI^z)>i$|/J3}UOc9{C{.~7ں j\5"Z']%l_B<>4N Q*RR&%xH ["Ts *&Hύy] 8ڽa^+ UQ=n[kʃLCJB΅R7 5[P Hj!ktqMJ @J596(ڱeW+_0Wd.^힕Tcoʻ~EׁGTeYm^М` *i2RՈ@效^m X_8'STV&b~((B 5"DЅU&lbgΜY~fϞmb$жt [Wi΅{֙]Cl:UPL(ݷf%)|[x@͇"(O#}b"9Pt/q|K5)1^`sTp"./ă<)kZ!* KsΒ!ƎX;8])}[I~oi*OXKRXZXo_c b:$ #IQK`@ܑqm3зO,c`cP*E6_~*>J^|E{%~wݞ{vLLg@u>c kۖfa tJO㼨̃_ dӘ"‡*`'Bx \S4vѻƾb|$5~oRD\t k~½̛7y?7tիW!ŅLg@u&x+|~S],R$Јc搊[,SP ilIAYަm~-b^_k7Q4 bwX6ŽtR,k{qlK{&5*իcOϲ'Dş}5&jvIgEXžUi8*)5m> +cR/tẂѵ[U@|Rhf:꭫-ݴ=z}ڲQrͭ XRf-xC4Pv_q<ݿ+e>5b;LhƎ~Ν3ncTrR'88' x56m$! X_z+Aܹ+e?n @ ;D$IUX{bs x{Mi*^iMo9}o@w@F^NtYFt(\um$"WYξz*MX^}m j4P:m{,1@իbR*4m%W1vu)+7%|Tl8*rSŏ{D{WqS*%DF)q|\;e{r^8 H?ZHCG`'M)B{c~;_Z^" ]M:Ghz~˥d@ڽݽ6 OCu+(]f(zt [i. w+Q~< hC@\;-(R"YV*tz4T dwgEɶY>)/sM[9%)ת'w/g[I JJr)T@Msr.[B0,|IWi& lx GmJz9T r7Yp 6ZwvL3}m ̲]Di%Kɓ'9mmyg#ںv6@".bs\c?|ύ#9oLŭKw(jp}A/DyhZ)kHcu׉\TNbpۦX9cT!h#> `A$ADQXHzMQ_BK 0+'U/- JSZ0,Hf$8o@{q\E@V^@G?@;ξz5UW]ec۽{wN;%0]`g}I'|駓9%*i,[cO*8p7yPrۡ@ Dži,a<7]d e6MSow g)`rk1Tϊ%$eE]r^IYaN(;F-#nQ,U6IcEr,q)cmp 1`r(tIM 67Po&E뮻nG_J9ӟl8pe]U}tq6].]փ(s_BA4߲RA9RU旣*1`Y 9grSα̟nߥx 1PUzSRd]y;0xNlUES۞#9nZQ7ջpqoCަW<(h??r}Q^ Oru{.Ȣڤ{5U~quG9q9_]vZ/>sFz"?.D12.cOXEͲ1U)'ۣ`opF8?4q*.̷Ei];rė1+%A@9e׃2ō?&s ,Tˀ|ӡ^|ʃhU2ǵ^{ҍY4~.~ l>` Վ3c; YdwqOcPdW;aTc^܃Ÿ>w8Ǜܾsg9 -T(Ao_pkh'gƿ_o5{/z#lg?_@=ku~Dr_=S\sMmƌv뭷 .,=Mm sO}G67cY.X=<%!C} Eחn/0ލ!ЃnL8ގg2cx'sݾe؇T9xX{k}{ZT~~n7&\Tgt;u$:qg7 qwToS-A˝#77-8rLhԣC%N:`Q hB-@OA>kx_wԧ {:Ps.`sx7z0ympFctx;Cp!gp0p>@@:1x_P |kgKT‡458`{q ?;Cw]۫.q΁ޗ%&0@L:J/^}Y}9>{zL"k1awuM9 F#&DYs& A$((Q" 944 qrw{V8ӳ[yԭ[9umߗ }D2NALD[n%!IEP.]؂\,p 馛Į/2lR\'=m. |\: dIp[pQVuVB~+F;)|ܝXpyrs`r^3`P^ Dq&ޒeNG u\Y1@Ա^GkJ*Qҝ*P紋DPv"HNAà3aek&u~"Ԑ>֪s:8h$h*uNGs?sĨyB9nx:.-yNpIuZs~VΑyE vr9->I~r t.Sչi-?<"%+-w~UK|j#oú;[>Q'!h+D2NAD&@Z:oʿOuE[oQ>} |?^{5&gpT.ciȨΤv'c_]W]籵x:IWdT۝Us8 \WYcI4aB1="Zu$,PLZ[t˖3T=d뱵ꕗ)Kjֹ!@x ZzpX75J v88ڇAIrҡH 9-IdZ'(5ϫ׎JRX;Ļ5Z8u(Å>0CN8;Vg/Gnoe,֡vՒڜ q6Xc`(,g@J#$t'6(`qE{(š>A~Mn7GI"͈/dm-R?}V{$3ӣͫĉ7P^^mʸQ Udn\*wy\fa,S@a;eD/+4Q9MefB2D)GбehHIr27e~6:t Gž0` Ϗ\*ځDuUN lamHd}5QIV20 SB'up0'+_=yCI&X{zM\A S/W \Vhh k2S:7<-'.7ˇhXP4&[;l``0xXY*ܽz4쥈58΅{pCt.DSͱVhzCnCd&lXH&O` B9 2c 1UG z l=dØ@fB:"PkX۪UMj>A2#ifC8+EF$2X5H΃꼕VuqZ Z2&PpY(0Vi,"r|kd8DzLMZӖl"gmhXmB[NIz=g"s6Vh .Gx-DSיc(?{ P 4L?3A`&PXO@+Y,HaKyj4Z@̅@J 4 @^[!Cs 0e,z'%4!Q@1veFaQSJXvUvN/eA"N][0 l[Ve !uOX 7/\f '9P&v%Z&&fqSRRDnݺciiikLeh3bĈٖ<Ë+=]_\u,Ƃ*z6ÞB$Z<5hiiy _ RDANaMЅ;Yx Gs#xHhQ#Å% To:JL|Hї $O% ӝ,@~EFeTK2.ac OX} BIJRcD Wd3R}j+rϨnݺ4e2dzl {תUKd)L͛7/XfIX z5"DEmu )@:t$ڸ'?IB]8P xɩSм('IKT(ܸ,JWVRh"= i%I.:$z-#XR.~j OFh3JD~'{8zR3A,V5B RoYaԀHAE ULDÙ@"@ >Q2κ//z{ʲZ j%nly/}-@PjAUCv8^Z2Q@p" F3QaB=9.l{`e~ {\Q~sOiJ@]hۀL=*tK&6jip$G("x$uWJ Ս-ay-rK3}>&V8ͤ TH'W Ý 1-  RX.q]m8:2BG)zÝ`0Q/E<ް$MY׮Vr LC@{^Ǭc 3ѣ{-T] 777׺pc%P+qKvK13=O2QM$Z= Re,,UXȹRE$#w1ozS  m+ WD54[΍C]fr{m)iET9\Bh0-V(druƨ%υF=4X3d)Q0YَpÄؗ _@W&PCLuD %P+q ,ЦMPzzcn5M0fP}I'uvv-e\Cyw44&Œz5jkTB[>iUjm%i;+,uc!lЕ4nȲW\@M3A2AGqdLkzpz[3,gZ)|I>ń h_L  LӧST~%P+qKvv7Fmj˺5C{$e(xoGQǸwSQq-ktH EKhk0&,6شF Rvc {^#4}cUhpO9R$8ʑ^[-s: w8v m&Y=ݱp"h47Ȳ_HݷNpm&RWn[5 zbu"H%P+qKfZKԥ\'M1#3 O'/!.yRR~ [I`1WPHfFƩO0`'i}"ņ|ԻhʔE~q^)ԚFH"GZGσ&*Ιs2]+ TϿF&Q}>OR RRs@D";YvAL q:iI@H"H lt(n%LSG"sH#&<'"ہNCzs/P'֕Ϧ LUC#@cB T:DA{ #Zjb JnF¬;:$Pp"9`"iBSLZ#qNaDFphd}mI ^"asƼhZYi! Dz9Kh`Ok,u[n\sg*"/qN3t F ENpIz-Vx;h?Eޟ]h@[$/,G]Αk=# "PkXdeiӇh۶Oݞk@H΁xS'xI2ㄧetIT *GDCż} Ro@[I"M@۰n3hZjb JnVR6k>#I(c.OM",ҢEU髯`)>B'Ox+U[w8Hpw~d:_TXOb/{XFʥ1SitS:s-[V,"Qbޓ x%"1YVZe2AS&8ar[,8o ԰B>1 .|< PCsˡpv3!m%NQ+T'&(2s~΅=H"B+e&@ 8 C֭c@Zn%P+q ,&M2 Wfg1@",eyXv:Jd*rB!b2Cc[6$:?s= Rs\F\X](U8@ Oip]Dl7q(ve$\:K *[(u!YtrbSԘ&P0 UY4y@A 8 }L)h%P+q\rd%k Qr &B;̇>t"xH]H1֯ RD$L'ܩ`X% 3vzKo.XH\=*A\ ":~&ѝe“ u_Bnۦ5z.EH^ H '*a"aNkHEԷ,8S8.]D6h}dmh }%RKVLju)Hko (B"{dqle˪ӷ^GLϯ6)gk8Ё\&~xA5(HIȐ=sCV9s{*[fm[pCU֮SCu KtoYiA@QY]||,@HfYPmB(^NHP}Aҡ=s%{pnۨHN#3;yё~u)H)+ծڐXD\k@7%/&vLme `m4?Q#@-YY>jqZ9B/D9I+I4jR3ˡuR{ʏQZjUMѮߣa?ZX(?ӃV]1qʕ5RfN*y\-abT}I#YNS -8M n=rdwv@[G 6 ^ hЊ@} ,d/*/J1OAH\QVZ7lEB:)B;$Qd(¾zP,lzpJS[#!\-P.,QmFǜ7D]d5RyV"M'W_ AypV #/.Į߀yֹpߖS{ wAk rOY ר5]/tg>ˉuD\ll֒ꀠ \jC;VV9 }uk*B˝C;^Y J zm55c{vbݞ92W*(]-5j%nAQӦO9( H;QoLK^'9U' PDLDU8j].1؊.V @DleS0u"ԗy );Ǡ0e}C3g(IƦݞ#(-V:MȨ_H+yAHۅHt"Js!e3'.\}?yG1̄  L Zn%P+q \-Z#Oxm9C: ; w"hXj(2PCxOdoF;X8F0 gI&* -&@$„:s&ıy_ŹUj%nc}m c ?D "E]$aH65_~i ~?%H[\*GNCX*|~G x\BC]_NvZ{'y[:kha\LJ cr/޵ eb[ҡdٟm4W=|0(ܹ[wK6G8֩R\f-LI8e 4kS2SAD"qޠ wI2(ߜT~@o`B| c d -}/%P+qKvv>5j=?/aB@XLrƒ.$ݾpQ@^=u}\gyUO7[yg.c{&SeD)`XA.@MPXO4P$ڷF֫vR:{]rOSd KuStOQW$d zP#Vt$V?#s^DŽ"S&Pp0~izg8qBܓcժUTjUzg'zMV %P+qKVV5mÁ '%p%1O`kw48DǑRAR|) jgI^E֣e*s8co˖fٌ*ˊLRzV8t"/[H:|I eB<~\c>D:ck 3 N8I5s2<66]VL7o\Az70z"ND)p`mR@eBl$맢d}uU,X@6mÇSÆ }CgΜI?p[ZE.VG=\319d:-FݻyLr P)0> uZcsڅ}[yKrI_\Ow@ӦVr Dz#*!Z=[W00f",hf*Cuy; 2EȀ{"M}G"/.GdmshܰLn)^w]w&6ov'~"$*ǰ>I)@6@fBl8' :rǎ7eM;]}ފKzJaj%nڤs+ ϩIILfh :ҘOH.y\$@L|404)k;<σ_&RH0}[V }?=r T*܌ 8^XѳG%[z?'/};sWbn Q֏QC#߭L7 4qۄ,[nڶm'wBhҤI4|}ypZT,Z[0ڸ1|,ezf)a:7o0䊠IP0(湏MH;Ļh@ՉT:@xHp6ʨ|Hs_lq~QE!|_ߘ@–IDJIWcANK '[ CYc',PX"Cz$ >;)}ѐ,Ӭ0^(Lúd(@b}cy̔R6[nE*΃KP1,~/LhTK-[HݺI99 $.yp٬ʕӀp.{YD6\^3204n)=~~$*:m I7[FHa'٧WG'4,@ ~VeƸUi'\$7{ 辊r3lXg$dpxaq|$~c[&ە1]8x.VEż(r"V'G裀}=,[\%yC2^79襘d}CQ} D֯_O~;͘1CwC} ( *­l2 t&JDJwf*X$sZldk :5±waj$Bá8T1<<AzyJ?EXՑyou[X:b ՗a&+C@/'}oQ yW/ƍSݻwӝw)}裏 >H . /@bZC AΝK۷ɓ'cMfӧO/>;;5l蹔2]XOX2#7HfG=HF"@3}LaJO^/k=GhS'v"Z[,:VL`eK4Iti FYo"FDfڑ6@ ?Ym]Rj3 QX D@0={)l1uGq X)$aXL/@VW<̤SzzXscǎс %W(TtݻӽKzkA0~iqMSV-Q?{VNC ڵkȑ#mEZd a-"~.*(C1-*tN]we+Y3+Gs(/Pe311E,eeK{py0R &ztz^]purhÆ>R⺚|N(|99#[Jb}5WC};y7~yNc@^J9r׳5Z)K~)KVԕ`q8^׬)##Jorϥ\ wIpW6BǫBڭ,?fB +e>\)ޛ/xj DڗuG\@.>Y7b-|6IQ Ћ2ޭ9 hq$4Sb *|&d͚5%Hz d Au ?3?fA_}ՌYBB\Cp-c#i9.QUy:L]XέRǺ7вeCqyBohT+չ ԘK=/DvGLNT+i; >jI2ɥ3MI&o=Un5SǨGOkhbl{vvwPܹz;T]sHUe/m*\u1`Xz`\g?]" Z8TͩlAm":x&[f'{zBQf"xKEJI^Ȅ (v,AD!!X@A Oԣ{bqn֭i͚5i޼yPwK/=E{dkj m3+唒2ۂsdڷ.66oOC[ yZXF:xp65YXH2NM Σ#G~"I{+3s8 ھ]c~RZ~ |dmHBǏϣa!$rش+;GM_sхrs1i,5E9+k0c~N- 2~|Dnvs"`Uڳ~E97f>w s3^t |_׈z`ÆĹl}+?_ǫys߿:QF{\شj/LRr^ _O)I$:ڵg߉_L.+FыŴey| hDw"JY7 i_O)(oC1iM:͡:yFSyhQ>uJжA#'}/H%'|&@k<h5Ut*?+IKPѿuٳE hgҥKV#XCc1۝vmA?2a-eBĜN:3MyB}֘mb }&g,KC  ^$_A:+׍ӝF.&\^r1^>>Vuk%1vԄ v_;{:zt;L 4`4mZ?nӦ ԥ FI]6u@[K}}gg}ͤ(4|gl#w3>zhAK`c!DX_uUL|ƍF"/ Lލ<hK/2w u|ԩ]%q6?||= w<"n˖K[shKĹsA~7Gn+Chȿ1*ڳc/2>z~}6-Zp8tEUE9}/c_FCúMe:4,Px6$uc%<$Y:1ת{إ p]g2]Bmڼ&p˾שǘkT;TԹ>֨XkԳ< {4 #SkY+ 12,!V#kRq|y -TǺ]\>. ӿng]b9|qD[rkpR^$JCعN4$d"AN0YC1vu% ֟X9XMtUy:7DF>& yu=0P;V1P?Bpq?hqMoG.catD}Q\X/9z.\LUa(@LvJ%?C 4s=ڶm˖N .]_~Eǟ9ըQ-lVV5i [k\y F> c)캅:RıCl=-euY\>uy)a.-UlNylMT)}X9ÝCy-z)[HI8f2{U܊!-9p2X`Yg"*;JtsYJEٷo_A, _v 2\jVvpul6 \vmAbtޖE+0 5N 3Hڭ,-S?%If|ћ= \&l_AH&IǬ/D2: DWtB&JXN2YO) t+X̵Jq~htgUfx<=uu/`MWcb "PkXK$R̦-ޤca !Ur =ul6mo.q-{J~>bLX~&~;Gfɖ,q֏0fe m]S8q ^\/pɁihʢȏg}򵇙_j!v;E=R<~ޭ1p93&N@Kbӽ0}7˝W&W3.cq!: "?|U\lyQ:@ܟ,\T~dˤYɳqC)w:Eik\=@/u1p=(voZ&@-YYԴt&1K:<:rrӑ#2> IDATDJ4~cʺyG7*`e{+0qy؀;E_7dgO%z[eCڻTװu$[Ydq-qȧ\GRxW {NSzqd EW¡:4BzPӓ蟐 ^2bk@mKV,jժ1}a#Fw$$Yp$O=0h:BC/IG~SGqTGX[ގ׸e 2F068hJM_Uٸ bU73\s6 +@z:.L:CO8N,#Y%q We'5i( ?G l Y$^@C{HǜPۓb\v,9z @`}e \W[ h&oщ@σ`zXՕ8j0Myy8M­{HƵ~Ӄ{=L Gt'HmGRqmwP&L:w7,~albmh& \xd';F.+0\#!'&˥3^gƻ &`9&fF3et5}vCU+U]!Гe1p?Z tE΁%ʮ9#,+"Xn\Z3<F6$2$`UR|H}%_'hh_&q%Q3e>u)"M^cx_.~ (wgtKVx"z1?phMP3-НI@O!2²4.c%RKVp[lLz}A99pM:$1Ӛ5\>ߡR$I|N k?>4vp41N Q=E]?!ןSmh0ڰUNn>&Ë~MIK3fKz%?A~\>z?DRRUy^3z(pq}WҸ>9ǀS:ZW̢vpΡ}Pӡg9Th",K&PXcE+-X@7oDSr&mU6((K \ƹZxWYzu42muw*#Q H){3Mѡ8hE+V}PIe 1p>(R]jt%33ZjN|1[p!p]X-Y2z.'JavGѠA̙E9L8gX¾X6!Iic:I[7f1o!7c2:hJ}eZV Zp_i%y:~̻LZzY433N՗r]Jߙ4hڹiҟЄbg:z$*RZ,P%(,˿yLg!Z&@-p6n(.^yDJy ѱa<0N3+. T?[r8;p/=?6\qc:HVҮ~hݛЪgO>N+=&tXX_DyB饏ե5р\@ODV(CwrNnǺ w2j=bJ?Tr t"@aY0"sѥ P5.Nѩ /},KV#|<ƿs1N+ \Uussj!h׈g%a2ͤthd:0q01K|}_1V 1}0SZT输Am+TpO+Rz\= Ie=MhE1ITgdj%nޥN>$}R䦾sSo_,/02VA߿+>h4gXBo P:i}mB}I38͟ C|7>_i}f'K6grR:z]ӟJG70'_:NaB;ϡ3vQ5ۨv@ޡttZ<}}[b~t;UC팛7]qΩ? Ycz3c,&P$^DY ŜnEգ^{:TpNa'x~7QRX,Z[Nȣ-=?\3>~f=VNq\Lb`0u/.OUǑ}Πѣ[Ҽy<ƕgt@}ISߍ7-oIs:D $'/Ƌqr;/1.!{@zSȗSv._AR|uJ\G[_K(}x }:]<ڹsJ 9qO3@+c=(h@_~IO>$9r{=zWD=,Rۺun{|'NxR۶Ӂ3K:}3&uv SFFǒXυK|c<ӻ>G %4P}zŧW ;Nq>ՀׯW93NLkҿI߀A'lMCCgi\}N}1,M ]|3q<]}&cK& 'գY \@>2eoEt={ ܙ3g@%P+Q%Rd+V{D_ϿĜgGjCzjA˗/*U5~Xr-f-b J\I4++6n@>|}:yrh=q$776m 4@.' R(3DA c6oT?#8ϤG^muK<3gB=>c@?6m%֭ϲ{.:vn.8s}{ :se{qaa>SҾ}AV^]ݛ}QzᇅV(pb JTѿ<7l 4h@=(:Oϻ@c墋.nǎ"!۷oGz{.1nݺbO?н+R3O?-^P@pz!?~{KD8ڪxw+x~G"=X辻wNv5jԈ^z%ڵK}XPg;+W/_~Y|?D$(y0vq=F^^k׎^}Ujܸ{2dpab  `#,e|>Mo7zb JT1ׇrW| [_/aAк7,M6s3t۽{ /{wN8A^{} l8f7|C?x9C@۴ GԩS)z7o_vmZjxVXժU3ڊM Ƙ1cDA9[&@D‚K/[ ^ʚt탔'[ p5k m}W /R15'2v9RXЈbQ@I, 1ܨ'O_~ 8Gȯd90HI]] R/fJlɒ%PkŋXΙ3Gu7W_}UJ" 4d}sD^9O_~ |s9ԫW/A͚5+h-)L0AXEVܹsC]lY_|A-Zs@6Ak߀v |'nAj%XU_x[""|q@uxIeַo_a}lٲEWΝ egkh'\W^y *p{ḇcNJ}a%@a1׉30VmZD'(g 7*oСCmq -M6?h`}bknu[뵄CgE^c?l?AD=sM6-1bլYS|g-[?VDKVb~1 H /Ƚ∶u&Hvƍ`!/̷1.UM NK9+.`}\~}\yWyABz  pY$)n*#YX7(>7uq0gCG)Ò*F>SC89]hb|.;4Xd~VDKVJ$R-IoIۇwYYh^$ReIƉJ:F2F$3KVb ]1 A[PݿI6`)RM$o}f34 6F{Fmw #Z_>̒9s<-jHBXRb%yb ԊRMZH䀝0Ə/!fz6mi!zوSϭ"Cm :Yhp#o׊b ԊRĄ[dA`"W]'TՂ@p}@҂%<Jd ZRT,ZRʢF"Y!Xn2E4hN"RnbM'@&R'Fb DBGCbd BWs^x/t<-=ANKJ{ue,jJajJ)IXKXX矋E/{n{%r%P+V?Єl>+J4EڕHu%8DdzjŊ+0"4uk"a"G+zXG4jŊ+0E\hdhI,H%ڏ@Xb\bTYcg"Ṇ%P+VXXwV %P+VXXtV‹%P+VXbb Ԋ+VX)XbŊ+V!@XbŊb%P+VXb(.?vxIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/iteract_histogram.png000066400000000000000000001267471153663664300254640ustar00rootroot00000000000000PNG  IHDR^5N pHYsaa?i IDATx|E]wu]]{AzRHE],ػH"RI""QEtյ] vr|'g'w{yar>ߜ3g9B<<<<<<<e ãQx(v?м{̙#^xaPk;<< ԣH nf_"z2y}g93e˖->?9VZ+&!g-SNJ` L>]ZCLP`?Y;oTH'xyuEB`GyiUV;#G}YPnu6o<;370!Cmǽߞviү_?C).!Oe֬Y^`AC_YQ,z@AZG tРA233ͤcLLLL@LD TmL~:@+V HIc kS'z͓"+g2"+ H@3S'%M+Xdh]7lM@=A(HNN62[|饗x>gЇU `OE&P$--HL:31) dD`eFHr ɈH! QȔD V\i~4q|>.CrL t2Uָqc @Yݯ!>$,x .H ȆbtC!\5ܹs eT*} Q 2T T:,ߩ !j!yg?ܨdk׮m$V}& 5= 2A#AO׮]&n]7uɢ4u {T~ĂE"OZ"@=DQ{kLL$pt? 0bM[M^UMOO7X}[$I%7aKL Tr*2@!@M7\ӧO@!*RHeKh kO9C(?h?Ҕ^P>Z PW+ {-o)!P6[Vؖ@N~%`U}6E]Xx(u Y[eįOQ7zl } ! @=m&3JF ҁd3\ I VG( `V9AIٳ!j$*,dbCL Ԥ%$:(s/{i  0dA*CܦM;ށJ7ѣ%-@P]C<bDdA d 0D "ErG7 ]`='h9RnTRi xaÌǞ֫^,vG ~!"X`!F]Qf~CR"FHh<]V6fACEb=W0,Ftqҗ #/HC%" R4k\CbFŌH!u]y#'>1P+aGi>@MϚUu8+ګvԽR&;&~W! 7`:X_OqχVZIߗy?kUnuw^؞y  ?H: Z W*%Ce}}VΏ/RZ}..>Jle/Ygu]X>vGz*b~OA-oDz@Ӆ΋>>?in/zdD5ڃ(nޕ=j1//kcXP-GAoI8E2y^lyxxx$@UjN]a~:tZSz^Տ_Ϩ\0 Sߏ]ȭWP T ZaE BSkD$u3bⰾ}#p@ 1;G692+.΃{=1ls4.~?sX\k7GV0q,0rP~rY4ǔE&kP4E~s6 2g`]Յeߗ4U޶;:?( Nqj@ձes\X.[V.n?s=I\A'P$L6ՊC "aLxBw*<`9AaC "{umou6bxD5t},l6NWP >B$¨UI($J()M;^!@yFεZs\p[*MY8vDۑV.~<PEYै.F]hBs(|}t amv@'z"s|g}1υj.B_Swo.],\UomҮ3S dH(1d` 4Е tXM#=@a'P&V)uɀO arhqv!w1wAFq,jju՚Zq4pU&W%/JFmKC+@!*C{ʴidҾ}{6H֭eСd`̘1{y-+Yf47|s.;w`;w4R/p{~z뮻Lrի|Go.X¤Y V 4|~qQ,蚭΍3mqg"mRC\i  3t%OI[i.r۠$y,O})V74*xEG =F 7+*B1Y۸qQj-A`r*Ɩ]}TBbc|޷[~y/\\BZ.3"@+m1,Y\jc,P}@rMH8w:@Z&k=h;q=бNQr)qO>]%Pm t/ն| jY'8CUIej]>vZPa"P %PT[-u@=<O L*\s}ջZ.}tYk;W+\Wǎ @M Xޫэcxua$PL]I 3wjdž4sua4ߨekB:NH'в'PRVVky"r@=<O Le0"-pH]-K`DstIm#"m$ujj<`cS* Dڹ x 1 dp\\;6 1;ä]#@@>Hmtvo_e $;b#W 4Lmcgvr,zExua"P`RgãDڹplsu ThQΫp->y@CMձm]W@^UF86<:0HwFD 5p}f+Kҝ>ٵ+vj?>E=BMJA1<:0GDc,1jhA> 43<(q9"7L vuO La%Fpub@soB`a%@4Ձ{(+^ ã8DhDXρjz;`59rO{"*/' O Lj3 /\ɗ_nf|&<`}}"<:0GPg~bDf>GD>hA⁾K&ر>&$の^ڤ]@@ r@>ٽ{Ic2~Y{ʙ%s5yK晿_w:7ͺu낳mMXM op<-5aCGa T7} @=Ƿ_}+ϯ(?M*$~ndڦ|M' [[o5ã TRa P- A|߹G}$_|EboFRHt^-r?dKzJ] IDATtiqS h9S$&8p@\>3DwAw,hAP[~Sϟ\cL{~I>}d`- kРA92cƌc&%eA Cn %S|0v9rlxL81Ѷa1ÇkchZ:rr1j8M8/af~ꩧ ԩSǬa P@_uh7A;ƣ,hӎM%eqҐZ-%eQ$wN)HB qr }5N!\'8C M6dfEܢEKJ$)BǏ7i&fޭ[73|z1 w 'ߘlTH+2d 7Ԙ gGU?ʼUq Z%Ւ^{{}WՇ@CaOc09)x!@333M4*!PDHu3}t+ouTy'cƌ1g(ǎ+&M 5믿n&bvN 0 02e`bQwZ`С?f 1Ϟ=۸#G4a֭[͸P! W ܌W%:c=flhӱE0kj*Y`I/ߌx#,%gXX2"ϵkΌ=-'l%`"_tIT/ѳ>lPNx' 7E>G5m4x]cѣGPN{l' uF6he˖pD{lQ}>bS}kuž-ӗ߼s55 4PF:$[nm:NЎձcGC6th&c: [;׵2A9&RtiL Ўīd$d:5g(Iuw\+҉!kI +'h9-Ig;y}\ lwqgXH5>>iZF-ʨYPK`=t!YNblQ΢."Ix?.m8CzUs˖-o߾f3IT;4+š5kNlvݻY9b V:\+h%xDpγYf(-I3*VT)7p{];s>+\)ז Bв0Y$: $40*{!sP;t""EV2v`Z~naZAy3s!*FyPNo]Ms,Ibv*K`D2"-M9]=#޳0]󌈺 wOhYEQ16pmy~y(J~~u<:^QO"ͅ|4ވ(4.)n(0cGq @m<hYp>$]{vɟZ8 Wǎv5uNW<:0(U-}=]{wו{6nW8mp6I+tG'Oe OFUn=<O Le#!7)vӮ;M2#= ܞhqqDڹpڌ:tsm"Uc11%6z\?BuDdPXFW`SIzzC#"%5ZuzYX\'P& @=<O LX{v86e!FN^qv|M+ >3ؕL.ɆͽF>C;?s~. xOdu͞b8y,rڱ#=T2nwy'ڵkWT[,-OϥQF$Nb!6@,- *^>BRgN;#EKݻ7uM+n9cT{3dDQX{} s[v[h95z u=}ȣ>WҶo߾]9춈fvlEgh_;x#[lYn.ݲeih"w裏LeszhTAurhݺ >ܨ @噷zk`jh&Mԃ>}d<صkQ+oذA&Mdҟ~;):Bx:Qu?#1cƘ4|oIy[n%4FzȤ|Iб)'Feƌ&QyN \980#i q{4Tz'זkNޭ<=&FAO(,e[`I:Ug5:U_Vm[/k2%iJ|ɆD3WeʉO'm7`~ܹӤ7m$ƍ3i&J0|!}w'i $}i~pPCII:ud5y߾}H'^SM9ur㽛7o6i`ȗn R,B&Ol,.ɣFaI=w ѷTi߾}`5E_,/}Nǖ>I[8cvQ0a @^rI3OWZu}N… %''Ǥr7[n5i ޥQױEފ[v̺bq [kuy߾}f~T0ӗ:쳝ݟ./:>*-[̧c !X: R=mrQ$*\MUͻ6ϝc.@k!٫%unyW,5t #@*8@%LVIIIfew9+:5Y5a_/55H|fPBJM5J}z-g5=> V4w<層ϰfݺu˶8AirC5}0"J$:T(,]Pd,0FDwkßTCZ+=cbYN7@{h˶(;4*P! ma?kHŤDQ`[ѢR@}rT+U*usoxu\5&ҁYՐΟ}n?IZ@mPձF-̹V$б_Uh٢\0' m珱pODzODŁ'8>E^Td]$P;JޮJR5vGY wN9颓$ci8jQWв``hxua"P\Qk:W'67hZ6Ch,<渌˞m':vm|}CW϶XgD4nK. -(*vh),&m_ O L=PJ*>G1 @sDC Th8bW>[~}ʯCPzձmE:p]e:Ypplxua"P?ol].B˂] ~k7I_xQK3'5hpOCZ @=GY6 ãHxua"P?!A|`.#%;c$}[ڧP{ݻפ]u>m% @sՉM<: {'ТhC?x-G+X¤=-JeM L= ã|h)cNjHDZ(nDF}K$Ԉh9S7"vx/k|\\/7"*?( &2u1Lo13gc, a<Ʋah3 ykdӦM^D&w=# H!JA`9sϕ%K{Zе~@û(]V?Iݺun3adWQ4D&Gɟɗ'h8 媫?D9d`ԬYS:v(ڵ Ia Pj{xOx:pHSoܯS~t Ə/]tI#gyF>ߥw.$yFVk>C(zOw<層ϰ@쭷*,h_&741b^'h=cbYN:ߖg t߸d&xbOŁV0wFKE׹sg9x`с%[l1iL[liΧicɦaÆruɵ^ A{ȢZ?le0p .%Ys䙱,0YR{X~[F҅@9uO_Kza9]edΝeAk֬)̗D1m.%$@r8Ti. "?{2##(^Fzz9+ MGy睒f\dȑ#̈́=j(cxF^3/_\͛gzYsqwC%ؾ}LzƍAx$EǹGȨ<;V[nqƙ4 K PQ sMǎ+?I#1¤ ʉ>c&qD/PNm@N U7)R/Lkr`ja=;WoK,4 >ǂ-@l׭[go9h[`)O[k{8Lul=Z}QB;wI\[zz2dHGMiܱ4:zjf)ڞc,W׋4T ~[W❀<"o":((={L[ԑ=+Y["OO>Ic+} `lQN5x (*#+}-;>O(G@JLH=(W_}u9T0Ea46HN QБ!3\Suk~\:иILˬd^ o?zQ5}tr eb X@H_|YGʩLcӺukc/G*"FY%7ĺuhYX4*,H$*CYf(٨Vps%KmT`pu¯Z0ʼ;SjO-݆w3eܩUhBys1}E%KW-T' RgoAA=u%\bȓUUԲ\Ljkm6PaU{ Zd6 H1;夋NnնAݧLQaZpm#)*Z X? =~Vã8%T%|jj1vaO;͑i&H0IZ^\, Hx:Ox<@quh1RM *\OQB},0IZX(dPݻK~Ww.ӶZ:vc,jA$N IDATб͇Z {-[$ܙ<| \Lg͚J&VVw&Q xJ`qΎbXrV xHSa"P ",0wWy׍p~էJ=gqOqquњo<vCj׼Z8sq:t0Uc1M@m*\Gh, dž'(F=t`b*'X@,z5hp8Oo#HnD\?d⩵IpqTzG bpH155Rgj9c1_7iWǎc8wubLZ 4J1:3!̴ù|<&9sfU6sbK+UZ7ly@"9G2egedHխVZ9ר_tj;mGy$p$б΢fܹ&jY'(+ ǩmÙzF3${Ev<,|3gHNFvj€߹pu]oTղO%8fӎPP g&5p@PHx@cKP 4,X`Үc l5± 4Jh@m?Wp(p˖-=7&yg-._CFjWzǢa1崟O[իW M[Tk??(M:41j<%#4cP˩eٵwW>+\Cv2 v9 }H}?dDtSZelf /vs[&64EhmQƖ}$3*iUN}/mrruҋ-ZD@.s=r>qc@Uah#]}gϞf_ h^YԸ+fWq"Jsm .Gt%˜$Cl89@KZ$-v=Kny-N32SgKq517{pW\lڼI*$g;KRJڒ4XX~xfߪ]$*a].C[n5b =בX\C=$wIC<[U˨uE… >CO>{*]Y PeJI]t1zMCkJ˖- SI}PN\OM= mR!]UүIs-YվwrnMۖ<7`^E]h㔝k*Q7Đ,X*S< pvI_.)SJ*|fsI_.Ϯ(5ܪڲm|JsI;MMl&u1meny.zW}zQg@ b\{vdIԩCm'j [ آ]3ϑcKcFGQ>$L[j{44(=":yTc,c>g-cꘉ[\6MƖΕ[`]TNX}1Oo߾c ʄ@ݻxMz?iӦfV3t믿4Ggl!C}!%gTC; Qׁj\ܒ>2@"3PޔWٷG~}Yd/˖ZjIyU}+Yk2jӗ*܏b]o:"y*n :]'u6b^[ UV .eaڑe2t@eJjɁԤ@$%`mߧ f}_今 []#aKqXrǒ>k8AireD42"_#i%VRQ2gX_#"cQQ4}6"Zn+/_i?`䏴k?xFP#{6ۍ 1'Prʥ]n{Уc]/BF޵k"IQWMd>m> j$@6(Ԣ0*܄z"z~yHUS5.]Hrdivi3iۯ!O )۠Eh?:~xvplx(> fԪFTA8- @4>}IR3K$~{(ψ慨Raxi4D%Iu愚Ҽss7~n0Q#%Wl_O]'(ʯnݺrKvvTPA iӦt). zDj:h 9d/6C]ZJRN3aOgk@K̬96g0_漙5DI- ۃKw_[U#*7Pj!YKs~m8__zd G7An8:R[\ؐ趇s'(Q}T;zvU}(w o+ּǵ=|+=sܧzRkH-ɾ9Yն(t}Z>@#z$ Ur&_"=#8K3^hƍy*\ ԣjY4S&WcD]%P7. 8Oɸ'} tQKI,g6nKSϸF0J<:0GHx@n.jK%=<:0NԐ_@up|) IC?*\§վQG{%Rn6I+tL #9#IC N9Ұg@9ПN:RwT]9PֵIZc#l;hGpOD}DU'P&ղu3vm ӫRBv/=ٜt݈IgJMn&-F7Hn8˷uѼ`jCsv:c|ee珱(x ٸacYgTq&Dvȶ0nF)TT14Zk)MHAe܌q2n80{S<:0vq;cҮ@UˑܤW>[~so 8])UZs&}-}cmi4@\OZH՗XX׿%&M2idž'P&?矛s(1™yL8™ݝ.4HVwZC5{3$ i0\tEX߿9 \<:0GF*dȒ;bh%t D[4i8\bsKh 4΀lc=Yt}TO̰H{ L u/hY"zC:Sn,g8S2fJ $P}gL9hI4uM@s;64{999ct@} Ʌaj۪RNސ-zՒ7֐UF2+2qDvplxM|/]a =n3dV9Y wY%ip <LL ڴi#^{s9F*żkҾ}{ܹdff]wk$P4zsE@w4RK}I5u. f-?Z>P GzaSL1d H R%S*Wl[ng+ڇ fO}z-g5=_28P^|.%-gAy,3kϔ[l u[4!PZ@:%ɡ-|h[̓g<=\[|7! 7U0>iMs%C@ _ɷ_~_3waÆ4}G%`bju+I:mqQIVXU};?[SZleLM3KF׌R??I+3$eF$OMEhv#KuHU01VK'B'Ԍ@9Dn$LX5ȑ#嬳ΒA״AZn-Ç7Hy{[={IB}oһv2Q?˵aÆ3{mnӧ^z%ׯ_C;fqc1 -[ol-څ~h3wl?g}f" ПW\i_]/5:0uw%gH{V2o>sj pBcr=zlݺդz)3^>/+Eފ[vB-c1}W_7mœh+b直bQc ! L6ͤkQCׯ_oH̏ %K<>;h  Zjjj6+hFAGҥpD2C`{L kNtH扎|vT xOd\o?scd9CqI +'DSW<,(&VN1{OeA(.8!iکiE *.7ˮuG}W{Bm:k^~=2;幪}Pm❶_OU9eǎc,sdis_,Q߉Q,š4czŵ㉈c,{uOD񨡖kc$h*-,ˑ*+63eHtjإ|1{V2u^ݾC*\_!4RgJMBH m)b *+xua"xA;{J~%{yv LK[JbJB@\54{K ]4s.xua"P\ HUkB= ۊ5q^"Sw.PۨpPP IDATgK>M5E*\~9Sdž'P&s[,JJ:V'hD3;+5@ꏫ/Y=g&n8d~8?0p\ @-l](Hj?xua"P?by,T˂s 0 @w9.97xDci8WeJMƒqw('Dڹo;]%P#;5˓>7Ĕ@gI[J^T( ,0iOe O^[J }Kxj#%-N )K4ZHRvI^,)S5|\2L~] @,|I\@|1{n$PN3Q˜|zsi2Ijk>[Ji*-ے>vC l$ПjLO)lFD~mL}a<:0v4vYc ]@cBP쎱EX},' /`dž'P&ղ|g@KPX=7@Oo{zx$?I1 ]&T; (O; @Z:={bZoZ @s͜93`\j W-GU nN5Zᖕ w}[8믿.s5idž'8| Kkھ) }'g*jYzUI9Фk}7^jsCJA Bst&폱-5* L66{@W>vP*\Ph&ؽ{\yrEŋw*'e]f>Xa5}T/.> fύDjp~|n*nY_㛚OX|{W 4P E}5@m"iKZHu ѶacV#Rj}Eyx!zc,#FȫӟnmQsEy02INNٳ cN:رcMZW^ ȱN,G{s94-/\)jCԽn 8ܢt%˜$#y^ea0IZtoWؾCg;7k)7ܣ_qi&ԯ,I+.C|˪X_j%g;;X}k_%-[șgiTy˒%KT .]jh ȇ7l,y'֕+y"o`Ϟ=J2 {7#״gyƤYqPPhZ&+%eZTRGR!< sm7cƌm hsSW-y9FMUm_Uh,56r >9eyׯ7>H&L`GUjj3G)lT5Ԑ[oe6w'`ʕm6FsA_UL1]|M9{$ӭ!ʵUrA 3ȿ-ڵˤ{ϑ/)uE/Kͼ;]w.._}i , 'cɲeLZǖzYz[ޕn@*2["g]z ~8|G9UR?9MI3.3>S@"=T*crآހy Z 4c>}x,آOQNϡ^W BH$ ( BEJ*E) VD׵J/*kT‚s77$$I}f{=9y:؄E.$كdQFaҤI;( f1:uRߓdrҔɝBO!r"1x_ <'?#@9IOV9 d0 y`#{l߾Gu!IqLHp@96.EόGX5&M@Ĕ s2S:'ޣ2Nl 8g͚e(?zeAɒgg&$x-lN=Hݐ&k. HSN;N,J( AY$C0~;ef%3$D/=(Ȝ,(j=ݯƝ-DB| LU׬Wt'@{\ox_Qgh4>qw hxmcñ'[!I. eN ?GhDT'Q35韛m"<O FnMu˜LKO~f?DncKEqy !';Hxu4D޽q=Œ}"D6Ttl@vRD̙OyqDl !{$0pƪBcߊ`+y@%&\ 9a+4dnϬ4.'$*ŻW}XL$e~).?)Qk('":KF=_M=W { %&ܙc:+y 7}F؏'ڙ2>}hE#dol[LD4;y~D8?Q/&K?"_?IYfO<GOGϳTO;a$w|d|VY&J9{Ef͔ A-tĈ}ff>I4 H<:{Bm!-wWqf8:iptԪp"hK&NDk̿s9Q;eVz&Wox݇X( j:D{Ro}KDT&#ND(199q8WEe/ϔьkcTTPdSQp"Zar"Zj, ygPύbHbTQ_u=W ?{#n&<#Fb㿢c˙y/y4ZNDs'4^{bh*Z)5w/Ȥ}^1źbUD 4爹2)ܒ|o$RX1g#zj*L }yfG(&H=yj:Ƒcy τ[ zo%Rp/<@0O\r/d[ TIg( gDۜ`r T~"t@ve*?@oF!uͲ e {mcEUj~?s`e"rLDAC|',ƒ3*X\LLu10gC&@} z|I\m`v P9{2J˙urf)S^ח3Ӟ=rfUI^vJu"X%Y[8Ծ j*;!(SL)v}oE^_"P+6wj)ck.]C-48Y\ݜX&"cktxQKu/,`:bPAYF Z{@D2Q3u9Y ̙\* c9|?sr.7 5;UC;4P&1"VXEeOImʴuR@?8?zhL C#aqOk9!cUIāV!2Mu[^Xj2:bG{nF7AEoB6Y?_XO'Hiq<` /v+{ Wr:!dB'&BQw}l~.?cŮ K*%,Fx+ Y9rD#RZ <`@`"֕c=mw;b v}Bl#P )d^']/uQw"Xr"нpO+&gݴ HO:w~ŘҮi鈙#=XXP{[bĚ Xk7iz|@+ )&T.z&@{jiҳטl9R%LbeKۜxpUef/\ޗݾI$G:ub],\3nXEIrA5u+a,29 c X%W]e"qɯL-CrFKu iW@gҀi46fhbҖ֌[UU$R'2@@͛w崻C<; Šܨj9d(i>?{QyN K*OJ20%[oWˈQSi zV5Ç`[J &#!l1ދ޶0=s!jb {+fOHl\{ 4@p`l=3g',v}oE^_"ʂכpK 7k,zNhUž[{4-Fa,]Do?{pAm5A#a{"7 LƽOF#\equ|^iʌk%X%+IBd 9mS^ E1ʌ{ \[3_?dmrfc;>rNk2*Y cjj깹ʄg8%)jQ ql_e*XZɠp9Q' bG |@EƏ3-ZW^yE/ מΦ;Ɔy}=Ѝh8!fiyW/ +Kϐh8d-OW*(1.a#ԢXxd SAªnx< W{>l O?/bȑE`ׯ:^p7Ns'{i>}Y+$d6 Py?/"qq lYvµs[޸f+ydv׺eQe"f 4gDLJ[H NdH=އ^Rk:PGM2),M1̉3ƹ**s}Y}F?"|!(= qtb2gmp!p,#_"V' V3b.caa@ߡ"}agϜ5ŴFtA$Z i~(ǖAnD:qZ8K#9 &f9͙_vV/J:8B5k, HdiݻwAE3mzz"L9FۨQ IM:$\0;:gSOpn,?SSViעضӧqʒCp{l9zxL쓈Dy|7qU"R:02 A'_Y?sX\_[!\9B-OM$k^&܌^e;KV$HcܘHNSy~3e"Oqoy~-LV}" ˢ?"_?I Tg^|V~J_y Xj:FbΠ2憪ەR@XBdff*DDꫯ`ɓ/CN;Zz{{L n74YN<lGɁY5|7uᄑ~#Z}xms|jsH9n LwI;岮}>Hσz%u~4O,?suNyl>ua:b¥ s)/ggO||޼lExn^ԵE=O?Łqlq;T||4ӴN| .;8`|6|FKg*{᧏Fp`"Z IDATnHEdWZ\T55]>i'SIY=1AY9n~o>ܝ76dGH$=Eh֣8hhHe"J[||7lV{3U_$>2AnMu˭>-Ҥ?9%茇gor"XDMRhwX_u<6F;M2'[3[Nqgя?wk> 'mŃ2wQ^Gcee9qn,R& Eys7naԅkڴ)mۦ޳sSSSm 'C<!=-Z`ٲeصkVX=zW~i?w\cr$@>y:y^N{j+7nܨsduV4n,X`wҥPWVϿ1qZ[Ǽ9p͛g,XD$6sb;e`3]b,ZA>$\M xb9֯_sg;epqUktϟoq69~?} `e[ վ@$8 LBG/{rAƖ $-H;$-JB ɩ=}!M6p)3&AرCl؏{BM1kb"~y<'bú J㡼/dLܹS:gE/2TC):b1vX՟|a$i9NN`xY,\sÌ%3pWа_CE$cnG`4x/ Ƀ$nʕr.<! Qk=tE{pǟUx6>j'i1ζ|@p>d[U /gO }9 ُ%Kq,c =!>! 믿s`[˵1yCƜk !;v(͸\tQ%W< 7_Ջdq èעz!GF' i\LJ{s2V̛\ ;m4WM;wV&І̖-[Af'kB"ޜoWվZrdĭCzm! f4+H'_w7;rooOGʚ存-Ydx嗊|>;}pwц0 DȉHr->,ѥ7jD 3jK3iF\wrQ\ Qb;m0!Ej݉^z?ٜJ9ez'uԤl8-)r"lCFih3v3D4>da,Ex^ .k_a,q␶<]UQ& "sjLָiKB7 #%- 0"'vl(r"Zg=' fNDEi2y۫-iM"|t8㼥+VEeN6$ˉC!0>_Mz'Kz0֛Z-a'N#Gt:BX+aYnݾV5<@]kn$P1?m9ʼʫn P!:t$u[`[z?JUFH&":ٛ j2˗E9=1-v[RAmcɋMԂZEE=5еrrr2 L#Pv e2t:0ص^~GjU8o@i鈙' j;rWc_lOcnx%Sh[h,bUfO@=AYz|$P[:- dRMQƴZk*{Ʉn Mp %@X󏺥@d!sB&ThYrᚉm' kȘEE= T 'i~%Gݘtmp2@%^Mn5=g\k^U-޶ؤf)UI,ɍ}@َ_YEE%]qُ?Ad@RCӢ6!co˅ yr{UXY,u,-mݜZB"כpWjh?9ژXޅ=Ԋ}ƒ K@µ9Wn,+0q0U:='a,3-2yCBWĠpyz͋׀jF V' TSQ ̩ Zwp9 VdPwP9M-&\ WSMd27d js&h\06ҺW^QSIgQ?boBzfdذ0?^r T j?ȉZxO[fmGcyvMBͶ59&RWDDs󱮄E^|&Pmb RxlGM1-srJ.W@mE'f/\=XAʻU@_{FH4PjݑQa*ba,Xӧe*);ȔCh0ZL[{ .]ɚeXN/g3Q\ͳ5P,V̄kFq&e,x@@g.hVM0+cN}tJzU]Us;yڄ[ox=#emj9t7z]&" f ㏁ɓYO5ЌCdl"Mjљ4RX6|wq5sohpߗm@ T&p{_U3+pP njw Rn'":ȵJ*?'"-<kgs,`L7w jVA-TR yZe!^*X{:RV݉r4?INDLD\O\ׁ]\Gq(=%XzY3=Ee>, 6ڼmjkhW.C N,I\DW,V@u?uj^ӧoYS|"P/LXr6 y[TE<Q0`bǖ(@$#[ 'Oa~͘'mE68XP[#?s+ׯAc#bQ'F뙕4- q7'ݬ]គڮ cٞ)* jhlٜҷ7XjiIJUСCվ'E҆āZ<,u5N T+\~^x@@mwM]iH\eiJ9`49O w߱rtFS'=w҉͉{gJMUiAmWk#|~8f'|@YPz\p5&8Dϋ\ڍf7Bܬ87r"ʝHAOaoZPavvlMzH+FtLtjzt_i& "Pa=ǃٙDM"ddDl¶ڤM>A@M-\C/ES 3֑9 /\M Aj,4RThԲ(#ld"o72wg jvDȸc z=깷hs#+!3wUq]܉S[,IvF7@h5a`G:]ky mE\ M@5fDhyLD׾=c1?V4i*70M@@_WiȷΟ/vbڎ}Am 9k^oՈTzʼ3&=coݨoNiiu&ynmp酫;;snz47璪㍸;?®] 75߻h c4q-sk#--My ہ5eV "[@C,D3R{e-E!S`>`Nm~Ц^'\oWފ954J^ 覊-%Mn>Ck}@ lXPg T`'lIO~e@sd#^[oFtjZlxU/*"yv[ZiW/`Z۽Ǵ:?iB.C˃/M=q3u%,dz>|8ZlM&Q̬ՄYfx믫8ɄոUc0tXC 6 tBougՓ4on tS'ş7![R r &\:+2N\WP[<봬}+E£ Ɓ-U2--MiRn֭;~JThܡ6h㑾)I'j)wc"cA F&Y&S6!L;Ek G?B>U Jkdf D㭍U{T 3Ԅ; ?\k39'b fl3gmbp]dbD׈G[0MtH]-z8W17#{m~핻!"ZuLYHH忿!*GF:ԢXj܇眾g鏉OD 9"53 5v:f4&:xˮOѠw4~eܒ8%אڶsG}xscԛRO,}B :rjwQHx8ށ߻M;-f㐪ݒ]^=\mnƍEXBݻvdFF+`M#F&[H=dyx"\DĚ0.^ w/3Ͽv' =E1>:M=98GY^>ݏ[ߎh8!D㖼[63 v۶oSQ;.\}j.HQz\([ƹ3gP³)KI˾-QwN]n[G%hpAަ*&y}7תBkMZ߇>6!Jq_:~w3WZjݐvBcӖM-]0D-BqpbL5FP2kD/FQsPMuS2d߉}uC:-c<<&5]B8ԝQYݳ\"cWKW.7}T,nt&<:A+>2K_Pu 5fW[}5bǗz6Y׽;11n6.{{dH ]IDATsZn.\իWy-h/>;r0e!͛={&Ҵߊw6۠u/_]4h*ͿҎ8m:j鮝[b(t.J}E-յ5 UVhѱz衎3޽;Zvn!푿:B+.9 vBv-1߸&]vNص Dٱm1G4{}eDyev eeG;C>딜BmIzA-9팜c1{9K¿525J-;K.徖#}zEZumew喳ګ9+c%y Wh۶->3|HNN?r<[nŗ_~~gsɓj߇Ks(/uo_r2[?Oӏƽt1|m<3or//]_(em~믌k9ve/p7N9~ɸVYeLo/_O?TåpQcAT_zq*3??ƩSԿ94x|՗ƌ+YZ_9O3-t$Ԙєs ?\*K;a?dl_W@M!7%$VJL$O?TSN787Ľދ6mڨ9`< "P@VVWm93O8l{@ ϘdߪU+73PENaW"̦OO>QF]v_8n>M6O3<@Ͷpu$$9ĤI]V7ݲe:B:IfYX0jǕ푾JIC̜9S9q&di0th2EKȲed-9rj@!Ce!r)*550e“"{$P15˗x M$P;vT)zj[dŶ_^ zJ\OD93_T*1jj7/Zp!''6ڸɽMBj=6Ok9 90-Lx>;D-N>(_.gl 5%?-6\ 46MmDGOYD*KcG$}mzɒ%JӡG$zGtOoHtɀZۢEԱ:x:wDȶp6}t=zTŽ@i_BAk_L)0?JxF-dmaqFѣGq\xr‹\-Lb5jSFwظ% Z4QtZ!G7xsO q~(ߞ|{/m1?k\g#oJ:9*Q[Dnjn/' X'Q6F7fZ ς eE, f;_:PS3kQS(xh7"P L7eâ|+r-g~oǰԂ7@< v{)x22sϘBPHe=Y01 O`a n8030c-G0?gSx@~uR, =a,-3$[m1Vb,X6Xj` e87 шpijZZXj,hʶyʽMYk n}6jeI`a0% F $ZPѶW-`CI$b]o3TwU,o"P ,X1F"7"WG9>si~WYj >h濎~S]gˍ~"P ,X1܈KrǸ@8K:_yci,Xhm72he9gyFwyȼ4Xj ApFPZ`,8E,X`B` ,XPXj ,TZ` E,X`Be TsIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/iteract_plotraw.png000066400000000000000000001102241153663664300251360ustar00rootroot00000000000000PNG  IHDR^5N pHYsaa?i IDATxUŵA$%11hyK$/h$XF-D@t"*Q@"("2s~s/;|̞3{5uͬYV9(WDDDDDD@#"""""FDDDDD"8Dq 4"""""hDDDDD 2Ј@d@#"""""FDDDDD"8Dq 4"""""hDDDDD 2Ј@d@#Ğ={vmvܙ^ܻ]viPҼt8tND 2ЈQio~Cw"q(uq 4H… ̀L޽M~ŋm< 3 uǎ f;k,駟w*?w3͒%KwV= ;A m66l6eh"[F_?>Uwv(d ;_<.}Sy"-~]vef޼y/ؼK64n(ٳg744V2[l1W\q?M=70k֬$m.]5\?_~ݶs+2/'"(Aj̷mZy'QF4oرcm:}n{シ*lҳ^zi۶ټyٺukϸ%.`ثW/s9?:\[ni&3y#'؟g?3 kO>)&꓉Qf/-[f`bϼ+e,7hDjhDph-ܒǠ X6|_WgϞ{1vYz{v@d`'~`J`^]t]uoKL\ _WL`ȴk.4a0)cd,W ye˖? Rq#0h6M64`K@#@}Q.;(M2 @$ jcc|ݣYgp_#GZ裏 '`L)?!0^?NO yb%'Yk_Z}V\Шܿ 3\8.uwꩧA'VG+`w$L >̖ @ S Yge&`0Ppڕ@xzx?wІ%u0`ڤCdEe0?vɀA Q &+ fR`%dz F " Q db  de5 /z{R;we32aVV*ٝ~?Ć0B)1ha>0]ʕauGd_NDQ$\-\642 f0AA\U+V8R{TXh0hhE~Vjl5+*4d`c3as@L 0ɯ}k6-{i0-Z` ˡª qW_mT{ ->v-@ʑ!#"WsR/LX"""e%|C#7&]`@F(@OByY])-ce8Y(m@]1 @I F6Fb!\:!i4G˖ܭP TQ ǡh7D0 UBݞQyRTQ͗T)pρmFp ZU9h}ҡe-'E#.͌Ǵei m-*}<u4Z:.=q: 0)9<:0a,Д5=E]*S ҉C? f9(`d0˚Ќ2"!>/gCYs:@j3gXYAƊ r\ء=S(p>C&\v!KT|jF&ޮ @Ӹ:@E e|+N 1VR{F<1)غ)΅Ht^uLq7%Y!~43 {7ܫFRTtfV@C(g7N!-$+-ӚbPAV($"Kρ湬ӗ8ZeB3ge~/1/sfl,kWY rhDDD@@+PeH}/k)F;:PhF/ڡЌq|}zX+" 2P0@?3|ө- ZW;b:f3I]R4\.|/g7@Aw# 2Ј@#"""Cd T $.@("?{9f3pq-ھ+w# 2PhH( ߶ai} MeӦM,(f(auB'|b)PhfOٲe6;͑PhDDD@khYxߓv hHc}";c .vvW ӬrⓌlB3Ad"1}g;͑ :Za;tw^B49O٫W/f48І}Y}[i 4ܙiX]tOW_l⊶GP}DDDDġGd`ǎlw{+ʜ}#%ɵ;FXh@ &!,F3 Dn}hcAɍHU8_ZB̍99c*TH2\[rw#b*WO1AU^݆CfKGo|jCׯoþӬr,Ox۽ۯc,2$>򉮢K۶mm8.Z;vaivpwnþӬrƈk6{9> #u|Ed@NժUo>E!W4$uP(!Cذe=*իWQFٰ4WXa=Ph덜B3`w# !)/doﲗ͐BDDD@@" Eve}U ͮ,ʲgEB߆C"~;͑P(Xj֬iþ3#-Zjٰ#c=fþw^Kƍmw]o,O? reʔ)XRCG6;͑PhDDD@@d!2*E#p("\$ EFٰW퀽ħzʆ}Y-Cf  4?} eUs~"=0=E{qhqn3r+NUo+L?f~n9)WnKsͪUt565бxy5U>i4(ꗁO ާKxB\?Fu Fwiy ¹4$O…zVZJhT>EOhͥͧh,n>E|rġuԱnWn>si݅EIS`Aʸ$?|?g_yiDcI6y>3N3wOʥqs H |YGnݺ衆VT6E=*6wy !Ti4l0_ܱc/7Gq愉5,Y|zE߬Y BݺuS0a'5}{l҆1oH/i6XeԫW/UZ;vR `Lxٳ czic}̈́ l ׷a졇Jm?5S> 4y0e3 F #5<x w Z=V^}U8qiҤ B}^zĜ5p0QF`ƌS@AL6ml:-QG9u'33R<ugDP`ŦF E>'OlMMIdIf6Amȧ-L6{l裏r} :4=g64ʹ9׾[r ` lбrJ{O=ۆt@RBjs8@ } =CUvm{зg̈́[ o۷(Oڜ۷d y43ǏqFw |K} &=jhFMΠ]}<7<}y6L 5Q-9LwuE]PwTߢyN',V[T[Æ aڨ۷c7ߺSHb;wl+ =ܴӀ.sm2Tz5k/DDDD|'pKҪefuכs9\}a\o;Ϯ$z3#,#+̨Mh[sILJbaT"cg\ZKtfqdZn94{GqBV\Ѓ)COc5ΪUK>K.eL4T;j H|fV:J>xVq/(-!B4 Hݭ8ug ;ƲW9`[R's4$}C)QGoٺ4q N4#3 x 3)'Q P\fΠ@a@f7ޝ9¼""""BBd 13SĮ`_ee}&)pEBr8Ϋv>3.49"p1jf?0 3 4@9 E!Gw|/k)GoB7Xu'W =X{\h޼y|Ed Tq8#2*eT Tf=^! Tv]C̙3m8l^ T}92? t;vk3Cax*'w^wT |Y̠ޡCeCr{9HB|92 u1<Q 4wUg0SLK+`HghLe!dYs@AYLr kXY3jԄ+Ci Z":JQ Z"*D@7d c<Ҙ|q>cGlC+  JfWJhveq|#u7WZa+p8=roNsd`4hx4ZZ" te3" "]j9 IDAT \\'נX""-DWT>qD@*-YiРY=T'ҥ @vjþw^3"/Uf|"fŋI }tތ1†}/gYۗ^z@ 41|GVaA 2!JCtf9 f֭[q:+\ŧO>@}3Yvm8_hՔڡժUa;15jذ#~:ulciV9כP`M66{9 K)"2PO/G,4C24Y9q¥np%*hFDDDΈ 4@IJLR`EC/3ذWcXQ9ϟ??*ER#Nh!t-N*tƍf6 (](45e}r%PG{9>9 @@ 4"""pFd{3X@]TAAL34J4 e氜&^ٳgp(4c5G޲PhЂ lwEߊ+*ԍz| &(GP({zlw1dƍmΫvUPΝkZjeáN6-ݷƎ̾md h[nImՀP9C]FDDDΈ !*u /4wuӌ74'x9\62Јh)=q0;ôlp hʕ-UJ}atoߑVY"zǾh<|棱wUfM{hј9rdj>8':h)AJB͛77w_O~ٽK/ƹXj2` !a…eMB+BVhH@r$;ɡHo=w]89CM Ezj[ha0L6ͳ{=lNW\qI&vOX xvfɒ%}U!>MfY~>V1?uНNȪL;vh b uMBZ?PVF޽{uWV-;(L4Ɇ_{TA -ܹ Y҈!{ԨQ6c=҈ FmW_@B&f5Q(h32䁼h@ի R dYfMSve*HMCI<ڎOѥJmwȘ;}ӆ(Ͷ端jÜa $ hݻwaKOqXi<#(6۵kg8F ۷7Æ aаaC[~`ܸqi@bz|c 8I=iK N9ʁzG L0![F&v4fܥ[֫Ӫo{NҾ&۷IZ-)aѷKEN 9}4oiR!h-h' _b .tEo 8І)[oQj[rGS2b[7Iܾ=l@ߒ+8hH!<-D{_\@ N4*U0 n+ҋ/j`W{vQ[2 S x\ߑ O F1;D70@zt65bP'Cq]7}S4+bbqg  HߡAoht pG+[u=3p>ܦwg|+ͧ[C0_>r SXX>AqgqۜOA+dfBE>%&=о%OՅOȗO,Qڜ[Vn]շjs|RAfǎMYF,WBaԈp*+.{Fr{U;=gq%Ipq&r;͑ajs6+5IMMy84oc @a7JD X!V(4co# 9.on(Oa;v=ؔ/9]ɵy17cߍ4"""GD2_xatlW*]k?CrǎC@Y(_j.j8'divWF8{[1.f,>͜9ӆ}92p{\۶m071YJX?,\8*{(>O?8ؼys-Bvlٲ`W9*'J( fþh( -V3{T3mfBan>!2PR@sqE|3Oe ͮ;\V1ȄF3Pl.pP [)n 4 tO[9+P:>X߁իp("\j׮]ۆ}NCP'Eڥסv׮]mw# իW@'FNcԍ;n}[n5k׮-+DD(N# 2ЈP(b۰3IٯCC*w)Ӭr~(h;wn{9^{͌=@ 4@iHjT0PD^g,4^֢qmuY%gӬrͨQlAR4y[j<2*8hB+b/ s(4ju[BMBA(4#Xb B3ehi {B^Sw$4C=dþ3#aGCmy`QF6;*g 4k̆C92eӮ];Æ}92PO(N!4R D;!4:4>\: Z6mҥ5kVٳ6enݬ sq8#2Raz뮻l+5j0M65>9~Ľr6ZܾJpիWb4F>qݠA{OGF]\1BaWx(ieZ Oh'ʧK#aͧP&ŔOu)ЪOϢͧhT>)wV>Kn]_̡σisgq,+mͧtۜKSX]V߂|ksʫ[Vn]ͩo嫋|}KPU9X6/'4A?iV۶m㑁" .(LeTo:u8v5u +|I3x[nz,`B5jʼK6́ !n7o TZ{4Zj sfС6LФIt/6L>}}U:u/ zmA>-Zd1>2C: ZLX5p9@D0f̘6VV-S 9J=hnigJ{m2΋s„ 6j(S08 H :PG( vΜ96Ll҆i Cme6Lȧ2]nҥ2$@wuMVo{67bĈr#4j$? pƍ[0~_0CDP=B=/G?AmN}kɒ%p4&[(Dߒcs}߶aLi[g-S M3f̰a{. Џ+44]Spޥ|5dȐoA4@ J"o@1}pРA6LҷG[˗/7cm6注%N[İ=oi; 0jɷ.}Fz2`Cȍ7ޘeSfUV-}bbNp3k0 0jP׀12 b0< 0國"3ϴE]d~_Y43H(]%"ΐfVsW:w*O}w{.K\:\K:|,.|4$s$龣$ܡ̧S;JoBI̧M[EXvBr CQ+qGC;S e͢6!w!Ҭr(4ÀB9c)oP(S?d=)KD7|j읻Dž|P[}E}]C^o_G |92R:{L{BCcЪ P(?ECE*)B3W(Hhf<Il(# @#"""gDBe4$m}&)ʐgZ~/ @jutwUIPSfpQh ٳ ^.*@K.ՙP92Ed@@ Ze'(?CW"PhvB9*ZDBeˡPsscIi^K 2POQ!$C6J"ѐ¡E4P6 ާkN:X~= ڵ;?s;oQiҸߎC-;4;Jӄ8Iz7 `L%wUPDxFұ,Ymĉ֣@@ɯ@wەf2 }Gh6a֭| S^wSjG3`6aGf>`ٸqMdz%u0ݻiƏbUdjbUw`zկ3H3.:( r#- B3ɕhF!N|/gчK5q"2P t kb)Wnlr}\̹63M$~6nk#x1{m4 /M3__|C)t5]( K0UtK͊z}fEdhoޔ/oQGI$yP W`̯>frr Ȧm/Wܦ<7?4G1Ŧz͛We" PhF' 9ZCp hhˑ4>4ݍfӶd2NJ'Z?elNɵI37:dsu3[o=Py ]Lr.WmyŦy6;*z+=("P7φ}92pDݺ O%gNoڸG$ld?-sm̵6O3qcͿwsY;3:n{* OMkWOQq 2pq&ivhm`6mZk:wo5e&MLj}̧~0Aύ5Φ3gNmڴy֬\̠ԯ߰$M3t(8w~>¥g:AAGt"͑ Q\s <8R{6m؛{m8.\< y]KD5aiV9٬Y3EsvlrVPNsd%C  j*`\8סw&no;ix4ZX _{ٰﴊ>S>/Ѽyf{B3veQp̄PCO>I$Nsd%4ÓO>iZnmRm8pDZqmٲq,._@iHjT&@aZ܆}=^!ߚQy(5E3F0|92*Vwy vm}w"P(p( >2{U[Xvڵ Nk!G&|YL?es5Æ aYqf|Ed%5֕+WK/,\{ք5\c͖}W3"-̑B<3OS64~P ف4Bq@,Π, чdVnp֯__ Wٖp|Ed%Ua^z4P(dժUm qUfþkU yԫWφ}u-OcyWB#Fitbþh @@Bc 8R:Ch QW8Pм(.;kw|jf&v8_Yq=B+"-hIBl{ךz'a_X{v24*Zɵ4?Wq)[%@Kbj}4m2N(5T:*gEQ8$;3r,z뭦O>3@s&{]PDQR}Ƥ {&=L(-Zd Cg6mlΫg{CξӬr^`޽ B3bPv7Hsw#-!3FW ,ju]i4w+Wl9c^xᅬeL@L3q[gϦdQy6q۶I&{lq^e>sݾl5G _r=3Ɔ}g0}niv'MdáЌSp(43Q9s Nsd%wo~s>;uj*-h7K.;w6?lX 0WsW]JnΝu{n?b̙ӟ:T>}jf~G?lVi4jN=9餮Z>K.dN<9vf„Idd9td7oI旿4l)۽ϼVsEZޱuރ̧>6W4si.˾Uܶ)t;̥,VQb_$ TH3+p+G$QaYgfaUT) f͚mYkY\̱>nM99Nn5Ĺ|wSo0+vҼo4_c/^-}h1љ`BYC\,ߥG,Ybþ,\Ca2gbp0o|`J{džawm<8\}6=p=վ} ծC'tɆ1Ʊ i݆9s<ԩyd !$ IDATsQK&-:'̭VgLo M{$񫓫qrMLNMI}B=IKg$|lN˓&}'q=I$.ni֩S'e8O&5ʧaMS O81Y)7a4Waڎ ǎk3f0=XZ),0hРtAN(Whd/ŢE,1eV_.Ath:z)U$b5kmX"XC5Za.B]!CS9r/ t,:Hz_}|Mʊg~_ S'җ.WchTߢַj׮擾30znsG}rVzot,ڜDL0D4327mڴ([ ڠZ1†yȳ۷4ޡsYn0*+U&LHuEIJG]oQԵw1)Nbo?2Q1@e |/ "Oh9O1^y啶abJ?WBE,w95Hp&obK{J jp}i_̃x XT>[Q(6wnszG(o7gQuQ܁a&,Q{pX3eqaSOL/"zuYQ/@(wo#@ƍ-tI OVlӺ~9lpD2;k>$n@zmki IdU/|9s =d$ 2^5y4*9 H֠ΠEDDD ͌Q{Ќوb4rgG!,b.Uy.F챗i0+W.Z`ÆUfyf4ͪU+%L'O>y?Gkٹ3#fڶmMNj4a5J{U wUΈ&u)KDl3r\H qDpK 3~X6Yaqj(jgϞ6fʱ`߽4[QVEl޼y6{H\ 썱/ BМ3!>4GZP%3馛 MuS yɗ_̾QR ZGSЪeՉF"8]%e~@)9My6e-;bgјӬrF:4Ԭ>CqN-Iw#--{7pCޝ0?48T0PD:J{U[@L#w^˗qC̑PDoaiVQ(GB"=Hұɹ*Gs%yJec3"=Hhe''WTɞ ^hej_Bw(q7s: H'F чVyh6mPEzP);4 U ,mi1P,{;@a" |jhrFjZw#=Hұq_ҀYyMW}W2 >CYa w5Gp| M:j.4P$а\v%8@#"""gDz,f&*E%Ce1t[@.%gK1ʰiӾ}'kdm) qn9MFejybgrN;*g&7L^΢ˊ \CmJC=Ÿ+MIN{ɀ9i:6fkRo[ۜ4<=fYlWrsρ꼭mPI3GoB;qy f1w# 2вFf)Q&J:單fѢ9zN`8}_43gN7csY5tJVsLw2?yӮpۯ/noN=nIy.j~: :$IgO 2 1W^1v{?7o19WwGk@znsۛq^tG"2*V;- &c\=Yg+'m~^ɵGUo9∑߯7λ˕WdN<{I?no3WT8I3'Jq~WBKgr8,uVEXPhfsjьr|ӆB3Vw# 2P4-, v7Y'ʵH=a8ݞ\gʵJ۔M#]JP]ctI«'qi>˦\ 4;ޙܷ:ߘ_6fM)\X}"gV}gf!['&vnfР!a8>^zy^w%f.Ӻ44o>.FD@@ De.[6,X0l߲eyfb|Lsk3wh.|=Y aeG{V^_d?Xc[lw}=a5k4+WfW7w6[fu?tM|Bmᣏ>J&MlΫpVZPiV9VV}Bb;>;2$;͑P(bƌ6\@3vvgI5v~;r;ž\9sp(4cJCU(E Du|Ed T93[p[q}gu" 2PVU/ 8 ^*SW lw]O> "š<"^o8֭ Nsd T +WP(|ٝ ~/G,8_bٍoӦMݝ+Dz8 X̶1 R @#"""gD c@HkJP_74k֬Ihn 4Ҹ3:<Ը_|}ʽi2(rɤٕ7ЕK35{ͥ9-҆$}o9r %!fΜ@={ecFz+PR޽m8$*(뢘,% G;v&f˷7kVܸ}oaiҜ%U;x?oþ+D9 ĉmw#l~ߛ>}[ou]UHʕ A%}qJ8F>EoiиWtL2)IVlߙrO1Ief̘jMm-zۦYz;%mܬY̘1un~jr?̟1~fܸ̄ z͙ffΜA?_ lcmu2{8yϜ9y ǘ?\j,oLnOYfҌ>Xl+VrȔ^KO%n>)˾UwFO45foyv>ˤ;22fYUVM)ўT )9 . =;?Ŕ+ezLI'Ig%׋{;c8bTr|L۶/~aΦbc3]W^i>ziժ9;%^1^4k Ig$SOuNii!~5yַg:jWx{%t4?>W(] \ϚNbN=W͟\+my| D$+Uh}oQ(@߯_? !e]xS&$bE#bD-Z3?hx .L\<#~wJE wn2 իc)+iP2maa\s }ޡst|AK?wIh6n>В/Ю._>LDkNTomurh6Ьq$wӄ$eFe߿e?$8$זa~0-W)״B'rHO4:Τ`Pa],Z\"i*W$ۓyrML_M2>L3ِ\-s#9MI-oN˕ۘ=}-ɳkpw{a-哯aPumsAD>[:x }6W6'@mNC<ŻOPX߂y*nږݹ}Koժi޼y[ ڈO5aV>5ޒO|gzӼIJ6 >wߝ*rʴh 2ĴlҮH|ƍӆ0lذty;u;vSQ0:Oė$:ӳgT1$WZ/;'Ot:NÆ #" H4pnM6G2B|j`?W^6LgF R;wN' `=yyqLNlN;4!Rמր MISNM\̴6̀۶mk% $O?t{n+=\,PasrMmYwr7' b)7yv [d"ӨQtd@EmE:SꞾ uo?ކ[2c [Bߒr]nߢ=o8rgQ)SE-azlh-1*ԷF-hso[bjmunAnߢ.ԷKMco1-7bF2=za&NШaԡLo]}i~"-e/~#od&S̼WcfWO~f﷘oeN:l2sY[zΜv#Ilz0\׿~8afSҸ}mBxGٸ}$~܋s&4O~"]fLOwa~Np*IPV\wۊ3mUiDD&ڡ0E T+P*-+DrwiUxx5ţ {+p ~Q`6MW\ (HKcI6aGh<|ILf[%OW$KI&+-sUO&ZSVUPsm͕WJVDm7cd7yDs%,3={0_\vY[3t Z;%i'a[.j_H[jV̲eI%m|edi[Gvln"x#wnHf}{6`YdkrPy| ϒL:*:]}k_zv%4#5?ݳBʒ/,|+{6JDews1"(İnЎ@\V !$)uKGfS-}8){fO4mL<ʦ x͈;Cq\.#3Yq|E<5W}:4Է e #9O1:;{@\Fk{oqv}ogɥ8iyww}ʃr e"@d=kg E" T4^*SXPЌE ͬ@8 7|ӆ}/g`|92 p( H 4z- B${6{9 3 4@#"""gDBeq(+АhvECw+Ad TWΩ}Yj֬iáp1Pn]` ArivH("\%v0n92*V`3;͢' fNrV(4cMG&|C,9,v(# 2ЈP( EGBdowbglivW`#>Hfl[O4Ɇ}92*e N}j xאAliv-sa4FD2^{d 4^J1P0Ms@i.|7$4E{ 41;hm`G|ooƌ8 4@#"JLJL@d T (0xwEP.\'Z,f+V,1ժu674oپ}8Esw7fa6n\mjf4j+:K7wތ7lݺ4h+IԩlڴL>uW{kȐq͚37T٬Y̟{o$A:ӡʕzt4̾h/_l-[;oncڶ<=rK]OV5o5my -͝w7S471uvnРgBsƟ'lIȅX(mc&r;͑P(X pz6HmIJڵmchOWju9 /A:J[m 6Ơ3o~s9<ܴMĜsN=sq=:\pCYq3ll~^I嬣梋X3+ޗN>Ϛ۫\ٸfgYk]ѝuVC5-?L52fzs}ҚINH;%ms 16^x4GBe-gá0P7AquE/5͝ cu=)Sl8ߚk\;iK6'M7l|yko 0:,/Wɬru0#{3 3{fɻ6:4/:R7 sf;o^^dٹ 9m0@@ 4"`ɂ0vp*gilWI8I2H!+rI#4G䪛)_v~pr kK,wӰ^y3Z:*'HP(ߦMڰ3IaƍPDx yglΫvvpQ"\@mlS<&YjŊc57''+jejVt8b]_u293ZIk|9NSzGm|cx6D2W^= Kc_0?é43wW1dsmM7!vb257l/`u0GZg6lWoeW)_~dҧ'3uWXHaq@@ 1f": e27ΆC+f9ߵk9rs>={Ѭ IDATwL>M̧~l^|qM#GV-M!_3bOKc3e~dfߵdɻ6nڴGh;͖-١C;3~֜9M^̰a/$M7߰z٧$L_8^-ӻ 3hdQN}զY N7Ԭ[Qh;v|B@3qD#E)w8믿^ WDBe '܂q{fwPn|].s.2ο~ow'_L*ܲ(;DBe@g̼C(0ieڕ eh-/:ߕ2L M i9W}1/Yf;wn|~4,f]bB ,g9ч{@ 4@aF< @{1e35a;EҽfiV9<[jeáxc6mZjYrV`(PhDDD@@d!2*EpH"Zjp("\LJ{U;`I&6;*9s昧~چCN2Ŵoކ}/gѣѶiþhByP(mwEGop[|osj+Phfr-f< B3O˗gNsd Tq8#2P// b Ґlþ e-X]e5ʆ}YbŊSb9tԩ6;͑zPWC[nmá0PDm۶a;V}:vhþӬv{6;ͮ<^:V8Mٷ4hPL")k j0ϑ#Gzw [o5]w FDD: W8_:G\ƕ6{Ǭ]$lf|"|R(>e׭[6{5kWfywY}g7WDTUTΜ!hvX  ѡ6djlw{%7j .4ճa3|I.c,b۶m0W7>k9oe^ye9NeN;5#wS|wocoWǙJmN9KFe["Pjׯ@\(\{O7Ç7k.2W\Vk{`;ݏ)|Ҡ1;[{9)D}|€ϕD}t]LeB(sm;l\Lrfr6FwWկ6J~GgwY򩚹K4_a/_CE8wl*N>h'@ ܿӃ[l1{nz me5h kԨaEِJ*P Yf#3u[oe0qdpZUVhÜ?|衇wp^a\l*BFUV0a P |`SĄ 6͛#F0Fk׮H ʜghutu mu"W3q6L bxЫW/ӭ[7H6e@Y'x"ԣ>H8J R\:R>;Du;{le{wr:uJchC1H [0toծy7=y@sQGl3*/KV?O'W$IIgMŊ'?Ԍ'3G;Gw3vm(5KlҌn(P@CPff 8t| v,GL4ȹbgɢpY ҷn&g~(ݑ4:?*T,0v73Vo& d p0xw}o6^z]aU"\׽+w_~t()K#ZX}\QИ+>del_CO$J k*v[| A@ƕΈo߾T=JV^}̴i/J:~/:ZgO?9ĺIܽ;%v}/s=]wLVfw4^s)v]iړk`iՅV'pn u*հBS"(90Dƍ+̆ ˌ ;w~j>tn]ܣѺ#}ϖwolqoɋOZ!ߌS 4 Su3Q2,S^ۇhf04`736!%Wԙqtbcr^i_|F"\F]Z7ېm#2PPAq@H@*_P HJY? N3@YcqÅICDh{ۈ 48h 4"""?DBepu4$Ό"eϨaÆ6{U;C49s8H^o\1@@ r  e2B3F+` wMYB>(>2 ;͑PhDDD@@ $@Y͍=چ}/kj.Gj?~ N BҥKʹil89ބG;͑P(D0PlvꨂWma͚5A;;P4*ơЌ-☘+|ׁɍSc" fsd T?Nn227-+ haq|iB" 2P薧PVo(4>"y> fiV+DR y()*0޲壤|`tۘfim8c6gcvg6o{ǎt1IJٰa۷oK=^ΑPh1׆$9k4;*v?͈C۴icÅ^{{LvCsn[)j=9NOС/Od.={㻛OjZjƏh{gdUq$Fcb*)?+b4ո-& ĸ .DE 300QE!%" ̧hټ힜ի;owsNǎC96-^׆gApAi3sWrE4865ϛ\~BC2#* q#7q#-wm?t; $nۖcӲs6gssΝ>!7ɽ۶ݘˎْ~uʲלVvlx͵e&4JhFC gCTL$eV; S.9zcd&XE߶6H]xAFj-mhm[K_"1ks5˕_.> v.cI,aR%PЧBlQG%cǎ0e?˱TN2ŗc$% /h]߾=t;<07o4wٍv{5ܕw#GNt{]3';wތ$v߽`lksnyUfn\\C9: qӦ ,[#* 4Np}wz1kwo޼~Յs5$Eq{5G>]juy}5GMoSY>}0M(41hnyW:+$>]x,VH>6Y2c\O5O[vN]~4Du-~I @@UW]˱wG(LݳgO_n,{eV=cZTdTXH=x`_nl$"~ܵ ?p?:F#F4(s 0Mh+MIp3$<+RtchH@ 54JpoF_}&)PnTL~[|9Ϋv@r2.!꓊ 'L&?&T 1|_N@ِ`AuH:6@ R%Kr*29I c\If<9t"Mx,V&T `0Z3@@,}̙JYfru:%zSXN"3rih bgɇy?4Ifi4Ajh>}|9]n]a=1ARm@rZ*${25ŋ#Grv̘1F v^w`04 4ATuppsB0abdrJ@t<5ؔr HIB)L?LQfi˱\liőjss4xxYgڴi#u/؟SW.%]ve[ׯ|{'ksW^ye޷]B|MwcynyD"]H-<[YTk.;;po֭X[ ݧq1>mxZwڵo1cƻU pF艩~{nIǺ_޽Ӌcݔ)duwvnҤ)эs=t [>5 }ԨQFy@fi4~N: j@d8%"E*2 $VT&Nj[o:ԕ%%TN7K+_Mvz<"{v3؝vp~In]ƻSh}L0k3l1ڵ/~gkftRu ٲpQy.\XƲeܚ5k|r/XhQaXzwh\ ^?͈݊kcf -p4@︖vR/' ح,kHce;h eŊXЄ L*k{$N'a#u>ޫtA]/_ܗy\Cff g"mkh`ЦmAp O W}mN4fu=־[`B(TVYYN?B7 &nݺ3<Pz.<.׽vSd)u60HNɮ 0ڝrʝ٘9ĭYJ)p_N=Lc?k6[ml}=VX=lQ<1)RscAV}žA"C)5x昊̘!e&MEf̑2a*^%߆غj̍%g[W>F W\q/yznR[pcw^eV=|mr*X]'&aҤn _F3ݴ->;Iϱ90=jȯ݅hJ2#̄*5GR F U `0Z3@@KcI OחS1urW.W}bLc0|*>F UCȧ-|%Í"WKEf|(姛l ?k+Ɍ%^ϒ0HL0M`0f&T Y"ID2^תS"()rS*29DϒMhFX̒Yьb4J#F$H@˱; ˱ˬz&\BRYe20׳>D1M`0f&#P`vkһysu\}s_JaR%PbemG u={r7DԻwo_]f3Yi˩p0׳YNT̵KDe@#FJ 20"c>O)NUlTd&b;ad${;;].KrVu+u3(Dp2d;]NwӟpUUys.ܽNu I!)R%P` 6Uk{~ڒֻ=n)JJ>9}vMZݗ4upOV}*wIF?O04$|]ȸAg{]K>J9 Jϱˬz&4A*2cMQ"Td&ѷ7V?Rεo&5ї۵+)ݵmQ$[\6+c՜?g=GplkhH@1j%\YY/2gذaj+++}9vU/R2dHF&LYz:hxqcuzj*۷w1BSW6 5> w۶:uo"{L`0'ZcƝ>{QBO]w} Tx9\NW9џNqF.h*"w|Ac]0Qrc"Law}wc"LFX|Xhk 7Ϟ=#;Vp¹^]r\U{nƌiɒg]z7ۅ)R%P/ܗcJ+L}5rWPmaB[o՗Sqc;wn#>IDAT2Yo&O***|y{\<, G[w$oM(r_@.s95d4cBA$XݲМc-aRwHӗLЄ\H1R%P`hͰP~ Uev~4;×S1f w^\B ˱ˬz~}91;2'e6M( nذM2ŗckɇ|ԩ;fO˱ˬz&:"U}9(=_2&T `0Z3@@J@ʦTd|h8̃ۇdTJ0,HEf4}@TdfWy*q@@ ɽ"v2?|9vaRq Q; \BbYlٲx*n,oSYkV{ȑ#}9v@#@ZVS#P`h0A ߒ`0# Y@N>dwis=UUUwAj oTLh馛|9.[n;+Rpq]f>[pJńK`{חcgD14vz-_o gI@Εm˱w)6${|9v5驼ܗc'PɼtR^ϒWcnu,VF fh@.S&I!R5M1cIf+Yל ؁+Tf9s-F y39cǎ!q\s0Sx!䪫ev-Oc^oѣ/㶐<h/={e-W}/v^Y`oL&j̘C &B=),JKK}حH@L.D;yq尻ݥ^3FKrtO\r̼0"]׮]>/B׭[d?38Vc_?y\_=wy~*%8)5 ;Sp1-bKj^/ɓ (܅5%3kqD gh(sr1SȬԒo'ɯ6i_C 4ay˫'+W6-]ALȍY:̴ G,2_u_3rӦ%3~dnYz|RB'p l%@<XM zy#LܥK^{~'rr)bnâdp ~cն%A) vJD uJϘ:-<Θq!6FA[Ư#<һݰY6|O?ZV$ʌL` 묳yd 8~~--IfGHfH21Ŭ1w{\XO1h){mѢE~sX@Yȳmm`^fNrhCu]tQa=SOyOTW>?v~Z/L PHi L0\QeSMăb@b?^p 3ŋC&Pf6c&І4PcDB7g o 4Cc'[љ~ #@){\X Fh ze~[r}q;wv7ݣ>>@0{6 )A+D(8}H5O/0ص 3-ō5P1~i(w dfD-+\Z%qyո3k{6hؙȚf$nj2>0=+fĠ͚!p4qfÇw+V<m8ɚ"2Aa"64ޕ v,N6X(iąh[g#,-\幉HˀGN6@Z3}aޏh@#"4h지XaФ-^V dBCf֜Gĕo&S`5~Aqszn3Z%q1ͰKfcXb -H.gH;nT긬_V]2{2sdVҐ999_|E3)Fmz[.bih2&}3䎶̚(ho:NvvM$uLɀu3adbEA6oȌ%oVIBm`*Eɞ7#fB2uAbS>bm UhXZ{},K$_(wxFCPZZ꨾j]x^͕]\:.9U_-6|a'jk38C}8]Z% aj00BI!€̶Y2w+v+3$gsH\|i:䐜z aj00D\Ā?SN(&*BR5NQ|F:"b潱`HFC CN,X5DNPd!=Sk`>r쬭(탈>3S!B`1CҘb 8Od(.B$H:i{owkm"2#P!-+cBIӘM@c#,[yɩ|hd\>BXvاh<4]BN֯K(ΗIL5#P!'QA҄W,Mckj00p VDsj 8a 0HCx\98k?r oeh7GF#P`heD>d&OK]57FP4D-ض^9F0|7ua]s]ǶUm5`024DM%sZ@EzMi_hm T@:1l 6}7`0a[;05 lFgF`04F`04F`04F`04F`04YpKIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/logo.png000066400000000000000000000305571153663664300227050ustar00rootroot00000000000000PNG  IHDR};tEXtSoftwareAdobe ImageReadyqe<1IDATx} tՕv֒ŖWlc/8600@&caHfcL~b! IÄCL0`x-kߥZU_.$[;TZ^EH$N8-.ĉ'N8q`rĉ'LN8q`rāɉ'LN8q`r4I?8NL)cr+19 @EhG42d gC[m!sЂކge&ndh5жA;[2]MeҌv<&7 )B Ӽ1^xcc5 Tm!-ܣ= $7PECD"3ZUx:~&(T}( ns`[wwL4`ljÍ̾<8A,hdrYuvB; rsѣ9={2|o3&hP7+F{d>Gߝk,هx~qJ鴸vKDf9i?xYǬV7P&|?_㝾N{;JC㑠#n*;3ht["LW= ׾Åspe8% uFJT5t"zjh7[> MvSVIKnQSVAড䘀ZC?r-*'0ARf# şws&2Xr>!NJ]{[^o ڦN xay^I& WuTP5;QhRo뱳 0 D<":`gL]:9aog>za9ݦkz[n崾]}mт,X CY sVn@gu TMH}^7p>U?A)J! Esdg-썙P 2"7~l߁CIo‚|ﳿz/Z1F;Y`8i]v؜(XoF,ǥy#e09 tK3i4Z#lp(m/@IQJrp`J];}GAnXwa~q9>r껤]€m3\[NH#NKny}ûJvFA49"0qmyMpzpKvsg~[+ [_W[ygy)L fo\NuJ 0띁[΅Yup,JH4K%zsVs p c}~Cs0wLkۖ,%d'qdg,OべF{>Us)PU+뉕gePfny.3ΑA(JЄ O>@bByӸX.yi錖 >; [9t!O˔x$(FUAoL[2aƢS:Vn9hWkFE՛z`hcL2 j漽^qН  :& Y6ˮW&FwDZAo.-H)'e_Byf9Mkl."<sp44Y9u"jPZI KZx=sJ3k\MDP tFky8D\p[[\--1iIZ<μs/;!p ,T;c ܱIbZ[TyfumvB'j i:QTƨK 900Ow&`g‰&Ow0FcCihBm :"r3EPdjDimLt'Cq"m49\]htmq_ۉ_;M] (;ѴZ!ǖ-ϥDDPR7Vg'"gy`u6a>90O,hΠ lG @tvO>]ߥ3X2 7<gб&2b)Ic_Ww†#EC^:ցFj M,Ł<١s$Pr1`@WkLsE&g@g#Gp ;caG:X%`";/( :՜'`=k f^ [y$o[hrM䮸gΙm8yn$ZFEPu3^zCcD4D:ac9u2$˱&[h:5OD$׏EVU1`uN%Mz L|b €oGpoBao:X%y]DsfԚɨgepcpO,vۯ>s©S*׭Fk1F=H l/7]WDPۥK;hnL7ټ>Γ'~TJO3prvs`sqd EE}VW߈+Ue8:=q`J + Dd#YyY+=l<3 Nʠc.9LIZAgn'>h8|s`H\I?u҄5X4T PvU1~b6 .1lruP p=-]&E}|>fo d(,ʕCdU%ܑ_>N2wI} ~FhYe9Pͥ^pvDFypf^4n$$=iwڎ4:#'Iwrl"UK/ ¹_V8uImދQ+i!OK>^/MMT3}QtH:>> DuL- 8a~Ç'>AɅ5\WI3xzF9?[Gej&Z14 yPL\J>C&+/I kKKcVg7Wp za ׀.y4cʠBѠ$(LĢ [7,F{~?/[: /qصw^0gԫup< }nap5Rd]M' RbWֿg9c% + 9J%8y\^w?7m4a٥ kn]o_nVwi*\N]oi% n]N 6d\B ÝaCME-bDkl&Qˢ.+UWZ)q`/ZyP2{Fk-]2cqRm,p>؟xYK443?G R,=/-򃛓 D~"@`w3>B {9ο$D]vgӿ${Ҕ >NU>dРP P7Q@K=Ta`k2dAs?'ϼNXKTحrO)lpe,(Q\ yZ+d N@>{y^>u9Vof 0mY z s"ɢ)i/{m*%POKVUQZ$Rh$9% "["hN25+Jb&bDZW+=V GQN9SFcTq&yM- c@8F\2$@AMHUc)w|ZHY'9Y2(:* $!Z,bl_[չ-@{2 /U1Ǜ1x}&Q\RR= ]Y>ݸ 9CղJ7?Ef4Q#G+2gҊᵋ\D"Ɗw(96Su0Y)'$$z~ѰCӷ#keQW>JOwr)Iܥ~ ur šR[\l{bUm_2GEz]Ѳ([*۫u*9 j1qU6T r-YD&/m#YfH@YOT케 3kqoKH$"XSEPzyf@OA=fFϩ^:ƾ"qXBtxDpRM 'xB9]Me]X0 NSRHfv0)q9:pȵk5 *,e┗40/܋:r˦P[B9# `" cd~I97e蟞[h֧|owqڳgx' ֜V#G~)V렴ٟAkmp>Y/J6wvpRᖲs` &9Ij`uDӇBu%a`0S0[%Jus3Yp/$? (]ao \ ahf凊#6/~-ى&#!/&%mM-?i]PPy>ew~g^(w% U2g9ʔUX/hOqTAJ[g-_G#S_^ZZ){̨1*T/Yŀ.}t=M#,+pʂr -_u.{;+hnL 6hP9ݸ8vѵ=2-A?'&u#|b?z}rUQUȦ9 [|q Xq} nAΟZ\Ude L,}]e:Z弁k20/$33dp7|=t /*< AIh0:g76 8K\P?HݐfmuFLTI_;HAdi)Ju!k8 d\-`(oy\i0̄ JB2I3n:}Y#ő#(὚ML=Q:`90Nl07Qd|' FG9.Ȏ:((ai xM"S*pr`*&{ 4ن[ `Os6@e[ 9Pe9pn+(^?j5^kq(03ml/ Fl/ {;1ʤt0I'F`3`TEU@pZ^*}F"Z}끁1wH:c N)xhjrܥJtt_&9[~Ky$Y-Gu&WSQ8#tKJ&@0;osQvVA ɒ5ݸ(eWꁬAx*n%{TN{? s?"蓾UR/6i{ܲ,:Gf 崁N:gc mG/n=S2zh/hBPy0iE*LYNo::$:%qOѐ# 53.XK=o KZh8üyw<,@گx&AN7(Nfu@6 Ɂ ٲJg emՐdz߰hdyOH#!S7-MDg0ѥ Қ2]%,boٱ_5%DVP遆erȾy?uN6, Ҽ`'x|\gdΧl}ՅAvЏ"1b$|ڣdJ$;\FfbJEj4i L]5P[L%(-r z T2IVYNIW0 H0JfICceR&; W ݸ!|-\ڣ0"(&)f_Zga4V] |dD9yL'b}|CIGtsb-4L9C[c)9F )tN6RSӈXf0ÛP쓳w(O{d #P7"98wMd;?K"@COTN7B<\e<ޖ#:"Qk'c@abUش񴉋Ch#vXr>E[U.6&+Fѐ7_EJrHb `B=;(Y@_6aƒuyW:f2{ѕ7U[~kvvkkJ#mYZfO>ؙZM$zx\x%]v  7oUѥVR5߼tյy>R5gwBiAYRbψѸlV9guW@1[/cNY'9mKMC &ے>Lg2Drt࣏~,t *!@q¥ @_xOM9}U+b={}>>6?8YQZ]q mׯ;+9^o-vw[ } g… ]k#a &'zڟ {F%=X?iͯ<`w yt+] Rp.0tf"v9sQ,'.5S&$;*J}vϿ+%|Ŭ^[5|/}~<_~O~<Zë/[&]UINE`]{}?ޜ"׭o9ta_SKP0sl+5В7guAtƈ|LU4}S6 K$3Ȳ"x>l'M jk~rk ӹK/Uy٤уKT"fǃKή}iΘ}ϙ3 Ŕ,D"ܹ~p3ں,XظU]]~_j>7[YϩKw(;bNK ~pn9z_6e2` Y ʟþί]Nsx ю>ndMn7'^JAZwW|uD-koȲo[g~'_pi@ 3vHD+?#5{"Re02G%}ȮQl;'%%֕8) v7-*݈iFK3u~瘎Ǽ j]p8py6%Ks 1W*;pbjG{N&r?rМS\ SX5FGMZt ~V>ZCLXOoWƣ6;b`N+tψ|N0z3n8vz8O–R&~?|܇‚| kWU wq#fq'"9E'}pޘ2S\b0}{VY $SvN4)|cI31gģ!;[1͇$A>n$G9xQCͨQ!=ZEmsr đ|)_Z%H9\P\ (x,2=ŠR~avɝ;w0 7L'!cҋ}mUN/ ֜F {;1N:Js[(4k"X41p1l?S0o9Y3{bz,G,"\o߆*~^i^̎)z1-P~޳gt' L@λA?TeYuz*.]J%PV6(o #r)> hǙHĦ.$A)b=aB+Ԥ5p RWizYJ9ɛZ눹XJvnt D3Z¿,jk;1 8\@zalum!Lh8\9nYI ao$! ݍ#n &NU oacHn~xMe}8wԋL ݹZ\0 I44dCKh`ks4Ka+]5g"WyZt2|,Uh DSK& 8ˎ1)*H1RZ81sh9렗},ٍ܊#0b&fjm'.%Q+a6;,\p9zZVy 'c놢O"1'wd#`'`ndeap<%Pn+)l͠G`D\[Ϥ Kԭ,e5 ږ2-SHMB_tJ)(ܮ@W4R'ՔKQc7竂R!n,bDBj0 zYLO!Kr- ּ*DP>G2d>T ϔw7lF @ԐY\^9Fhju W&p)` )XvA΢[VZ[A9^Υ?{f||@W,k~e bN\VzZUAQ6k<9T80B !ga!ᦳ"G&1&p$DLZOP`U]NQ;:BGvL3"ɂf'/yl }Ƀ eLيiSP'`rU[rw`"kFb AbrJcO (YLgLp%9D9^ҙlA9` K`qՂV3?f/09\*WC)8}"! I^?_AsML`f+ZK:댖*xOLVNbl#5p+,)3U- reyNm>|p ?+?G$OL1 WP"|DZtOUJ$ZADu3r@Cp`rQTb>=E C:6k9R\؜]kHI,>{O|4)zPUA 65;$Md?6 hmZ bLX;<]nΙgy6cbIAT<~ 3qeN?haiiԭ ҒG`(9Ɩ&28j -E6"&>a^-|s`rsd)1~ć5'cri8q'LN8q`rāɉ'LN809qāɉ'LN809qāɉĠ/ %R`AJIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/original/000077500000000000000000000000001153663664300230315ustar00rootroot00000000000000pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/original/graph_1_ex1.png000066400000000000000000001330431153663664300256410ustar00rootroot00000000000000PNG  IHDR[{ 4MDDDDDDD$Ͱ:I%"""""""iy4FɼHd^DDDDDD$Q2/""""""(Ic̋1JEDDDDDD%"""""""iy4FɼHd^DDDDDD$Q2/""""""(Ic̋1JEDDDDDD%"""""""iy4FɼHd^DDDDDD$Q2/""""""(Ic̋1JEDDDDDD%"""""""iy4FɼHd^DDDDDD$Q2/""""""(Ic̋1JEDDDDDD%"""""""iy4FɼHd^DDDDDD$Q2/"nob0qDWr֭[GjȐ!5j:T^:ˣxX|9~=Fj+wێ'Nмysdɂb=X,VXb 'o޼4״,110ZnP$zE̙9yC7d^DC ۛP6mڵkg722 <2EBB/;vCDGGӮ]GއA7@2eر#_t?Ӷm[_Ζ-[5kgf̙=޺u#? 믿ϧ~o6mDLEDD{nBBBsT{n]]ٳM6ݶv\pK/W_[hт}0`so%99ݻ:vYdHܛ "88ա*Tl;Ν;8YdPB=䦀-ZĩS8r/"iqӤIx*iO۶mqcǎuu("f̋xW N֮]Kdd$!!!R`AzA\\miGq8^Nzkζ_vÆ tdȐL2QjU͛g7kbaٲeN_`X:thNU;ۖ^n[t]"GFuz}bb"=z <<___LJ~vךҺukBBB|̞=ںu+׿ș3'>>>ӥKq}ټy3/2Srem}LӴۯz'߿?p^jĉ*U ???rENl?pi̙3Ț5+mڴi #((+W8] /8 ̆}RhQ N:ovu ѵkW,ݩ^^^ ǿɓ'G:u8:t@[neT^qv=7ofΜ94lؐRJvu\z:ub ʕ+ǛoIRRs̡A|nݚ &0ydIW_M6<(멿yo߾r HRl5ks7nL??~u2bz-xk֭[G&MW߿իs ֭˿/N>͌3Xx1 ʕرcTP˗/ӠA .̍7صk}vxUƤIصk<#ctA0 F}SN5 0gk0ai9qD[[BBhׯ[F׮]M0۵yMUgoa8Ю=11Ѭ\c;vn[2gl&&&MauymViXkaX!e˖ak|ŷ Ŝ3gÆ 3 0yX 0Tb?Ξ=kf˖̔)y51x۵kgaǮ}…bqxϜ9cfʔ̗/yQyΝkavf}=a~vO44 ر6v:t4 l׮ΞnǾ}LOOO3W\fllիfM0g} yxxK,իØ=~eVRaY|iwӺiѢi9ydgϚ 2ef7mf3cǎ!!!fPPy;M6}ݏ4 ڵ~'""¼|C?{;aWڵaΟ?4 ì]a;wWX13$$۰uV0 3**i l㏦afbSN9L{I 0 06mj&''gmqcYa+V4}||e˖ٵ___z͵kט9se˖$$$0g'M`wǵիWo>ԩCdd]_n(TK,qz?88H.\y_\viӦPIN:ԭ[ao .пBCCׯO>}| svmQQQڎl>3Yv;NJRR=z W\vooo>_VZvm}!88ۘ͑#Z뤤$&L@llg#֙3g>}:jղ;RX9}4K,+V!CpA:vH֭9{,ƍ㩧8u?ḯ>Vֱzv?ȑK|@rrJSرcժU6XO9 2d=zhۿYfu6[l<==9rݲO=~:SLqXF&M(_]5khժ/oߞ۷N6n}'"N8|]eF x\?gRB/^̞={(Z}xٻw4ڳgʕkoMRZjG}ɓi޼}ʔ)dʔFzt_= wFݻ-[%a8P3gN{ O{ʕ+Ԯ]U?ڵYof?"\x3gp9K{9i=<< Djc@>ҥK]-ˋ.\hر#f/dȐ!,XǏӣG<=INN&11@Xymo&/&&&߶S'?/븕aɩյk5jӦMc\tcǎM_Z5Oə3'˖-B TR 2tR6l{>,E!&&XիGŊ)[,v8;phѢȑáז-[+Nہ-JFs,YZjQB/~ۘ3g p5(Dɤd^D\zPޫ:ok1 .Nw?_wiq ˶.\e˲xbN>M֬YYz5]vvG׾zd{yy9YPWj r|~]a\tn;ow=bDjN0;&s~8]6 `ĉ|xzz2~x _Oaլ^4|}Z5lؐcY̸4iy駉"[lxyyLj# լYӧtR֭֭[߿?T\CʏZ˖-o߾̘1V1cƌ|GO||G;yg۴ `˼uϟUVѷo_͛g=;wnțIt9#mmN~1l֬NIIIoժ7n`ڴiSYam51vvUSq=vGƝ[ϝ;wt{v;LӴ K7x3g0{l;Ƃ Z* LC޽;|0ݻw'((0h߾K.eyׯ_iԨ;wdܸq 0>}=V#ڿ +V 99VzuvɩSXlٳgBnYf/̙3ڵcR`AnwyR``=k/8TR̙3֭[LJ~HRRo]Ls۞ȭ̋HSti۩r k׮߮±GlzRH"dʔkג|EEEŔ)S~:3f੧r^amh?Oذay H>Sv0*?*O?4]i"fVSpWZrvÖޥ>ٸq#wlY׮]cݺu8v×_~Ʉ HNN}^ʕ+az>xWIHH`ɼ{lܸѡ&`!~ngYmg @ eٲe,] 2*[O2{).\7x+Wŋm}\t鮷͘1#cݜ R2/"iN  䫯]kիW/yW풞`N>cSN9r={:M~:3K,ԩSCG˖-6Xoڵ߿#F8'88wSbE *Ă Xp]ߨQؽ{7k׶+(yyy3g8\pBӶk׎3ҷo_Пt?Upp0i:aaIvhOOO bիWyw+X߿?ΝEc6K,+,YQFL&MkVٳgYf^QF9fǎ\x.իWӥK^z%)_*U؞g}̙33h tرcN]p$K8ܹN>m]v$%%o駟=ՙeNc`۶mNV}wvY94(C |W4oޜJ*ѬY3rU(T UZظqxժUJ*u=_~lڴO?yQvm9s 6mbÆ Roպuk͛G߾}1 în?rQJ/^LʕV'N￧bŊN$ժU3fЬY3/a4hE o'22ƍ?~6o̢EȞ=;cƌkӠA_߈̜9jժ9$:!!!дiSJ(Az(\0III߿˗SD)u̙4nܘ_|///J*eWAv;G~(Y$͚5g0 r̙ZjԫW&MڵkY|9|GNر#SNɓtա@/سg]ta„ TZN<ɺuؾ};"C \RdI]9<<<2e >,[f֭ؖ?h v <;h &L@FlO@*TuHLLtZvKj(Z('O+WǏ^?jԨɓ9}]AժUm{f͚DDDPti9s ?׮]{i_z%z!C(T5"gΜ>}KҲeK @=X`111ڵxf̘ABB#FHbbbQ7J*+WooobccYj}5sL D5(R8pYfy9&ID$=}oLk֬1ׯo'pwynjsŋoaʕ4-}o'5Swd?ެR9sf̞=YvmsذafBB{1_u3o޼o)Rl߾o٦4M3<<7n0}]3,,2-ζN~8qYdI̖-٢E ȑ#NvnݯǏ7K,i!!!f6mǏqyܱc=^$&&C 1˖-kf̘2CCCzƍ3]f;w|ꩧ̀s˘Ʈi_gӶMhHWjl)#9U:|ա}_k!pZCMоnW:݆J_Urh?~8Dü=.JE'B4L2ɡﲾ uO}ڇNd+8OcD}?/;?>{l38E;/; a}}/Nz&38qWuk]3j[ۡ K/q{c2.h~}Y=99ˍ_:}G|b׶aI:&`}rL:u2K?0vcwёy7׽{wƎ˄ xWo߾{~!qf޼yA܄ƂƁth!W nןuumvfφ6Dw,vsuh"LG|5j[v/_<9r`ʔ)v'OA%Nwt&/-Z@y3L{dW'Pȼ2d1͛7tҬ]֗9sfy<<<4hm۶?͚5?`k׎"Ep $_C7 q 7G:qU0sp]`e.;ڵ//WG&)wS ,0 OWҥKhݺ5_-[6y늰EDDDDc`@?|2 9c|}]ȣdM-[잧mٲ%-[|ȓ,**!X8 V+MEWp[ |`Fm_ߏ]#d^$wX8 U+M2OL*̚.)Kfx{BϞB.WqR2/ۍ )4jtь2G: qeB4JzYr8q蚟WڠD^-%"霎ƂƁo:qb70r/Ҧ O˕щ7%"""""XǧT>2.ܷri"""""X\O!, Maöhܚм]H#"*WƂƁܤjb09k:An3'%&?HEGb!~ط9_ÇORy:2/Xi,hMf/VS~ߎ 9rnn{ JGGEDDDD0y!##ظƎ磌Cyȼܗ`lX nyovU Oe"̋=3M8F\[ }+PI%"yt0 W nBcA@N%f2/;_؅cNxV\ WMu:ф$\MHegtяe=ʄQQndx`>YyѶT[zTa>nøھ;Q5{Z{x}P"L [s:y(ҾQavnhx=R_DDɼ$'R?b|n+rxr%TDV*'"""""l={Bx8T~?cO;ȋ!%"*WƂƁܤji/s!(Czj_ jӥ]8d^DDDD$:r^xv|Ս 9N0g?c@JDܛITZ44&Ur&LݺAL'o?b7<E^ȼH:q/ \'R|#"""""Od`k ~?_;wuT" ̋<_a,nV8U\`¸dDA4{tNJcA@@nR5)m0M??سTXMVkÇUqO:^DDDD$ ڲكZ 2r傍!zաcd^DDDD$ ?'RR 'N?’%쳮LD'f/""""F,\mU/0tEtʀыK:2/ΩrXi,hMf^\]n]_4S6]},ً''""""v쀨(ػF<ϯSKD\LGE9U+I]4ᏹ)Saz 4f/➔̋3ӶOcfiN癵kNnsh?w)[7o<6~4(SNʍ+}-fѵ'/d)$\Mp[vpա=.1)[pYUGVK.1e_8'8\ ˖Apdx j믧$ŋ:S.W9yJe/EB(ނڋf++ϼr_1%:^DD$C~G!oP^bbKhP%]c癝L6؄XB3 PBvqb`1,v,;l(<[Ϸ[nUGV;r˗fxMYwtŝ'#+SU [K't +̒K(CoXED*i[_ cؚavok?U\cy(I"?ПϵKDiFI%=5a\CsѢx TcoiCf5]_ES^f>w\LkFͮWy&3|]7X f)hWwJ]l]֓[)9$C_Jвv}-f䥓z> 1LVVJ(Z|щ|N+n}﹝ĸT#"JE=0t "W"|(7Q(W-_ݻæMSl+/LR%ͥr/j^&>Dܐ{cQwûܹP\ M־s:UH`_}*'vX\ UOK}:o(Ŋ-kBʮ{ґy4o n׊I#""""")>ڶHIG%"ȼ}X^.\{ W%"鄎̋s*4f/BJ5{qμKPl+Z!:2/""""r3g` ]%|ClfMEĽ)IT\4T^nJo쓓S ?~<̚If-<&S&ȑ}ᣵySA:6j UqOJEDDD$o>O?  'c|QY>p! X̋Hs$|8aŋRUr|ˮQD䎔̋Hq, ^^P#cfMD$UT^$SsXP5{IfhțFn`ןWڇd|5UqO:2/""""O?fp&.d Wn:2d^$SsXP5{If=z-13UqOJEDDD䉓QQhT=Fa<4f^DDDD(@ op!\ʂȓFɼ<1vl&"^k\ȣE90t C._̾s(&)I6ž3{bbKhPLLܸBvdϐwN&Lvk(<2bmɜ y<=<9{,EmWT(Gq{%kOJZ6hF\Fі^S|=d&{൤kV2e?{7f21{Yl%`Fa[zdJd+ ce̋CT_ Ǯܗ5KMʌWHܨvB moVծﵹ.yN_:MO1D{{,ڷakIЇ5Ӻdk+3vXyDT~s&PaN ]1{?#"E9+UR5-D۔?d|qOJEDDD$ZZ&QWN7tCɼI+W+@z0ly0tYD%""""l/r iSD$Q2/:Q w5{R?jf39='P. s怯#Nl '%""""j7n) F2儰0x꩔#ət(\CɼH:_JcA@&g`w$/Yȓ7_ӥi<뎞ӯ~B*O ➔̋X6nMR=|&PMӡCJEÀED %""""ip$?ۭ׺o3BȜJM3t 6fـΔ՛!")yB8atq3Y?r.^l4"j,x{\SP(=%z3/_ʭ;)\M""BɼH: b jiirǟamOIkJ7v~!Sl ;SoWm}>'%""""i֕Oa)ׯ//;{"h]6kgpwr4yI̋s]4T>-:v &Y2?&+BP#NrUI"Iɼm1l`ѵd F|&{!ЌxyxfļCfv}s -ǘzc3/L~fWZdWڵ]6K:.2YW#R=O;pDD1S2/Mh,]^ŋ%K{Fh,i>DܓNIcta{ċHd^$SZXP5`/2&LzT^ ➔̋q976m\I]K߀ YD$}S2/"""L:uy|]ytNjJcA@հaJWŠ=ЩXA=)qcKgO.=ለP2/ΩBXi,ٺZ aǻnU+}>'%""""nI_ Iom""r }, T7\g^DDDč&\~wïBܮHDDܑ̻cǎѥK*V?+V8Lbqx|'.ZU+Uw`Pө%67eD([u񨚽XA=ȼ;pӧOL2T^E9}35 zѻwo^z Fo':\U}>'%n^Oi2MSo"""n(X0mMӕj8%J˫K:RIkt0 fϞ?>>>*Uqƹ:,ti=*Vq{p?m?¹sy3P *U"/""EG5L2ϟx&L@NسgÆ sux""wu.]D,E\㷅y.,^TD~Yck 2S,/~*L'`ذahт^|EMF9r$G|ai0 Ed[%Zo̶"c"$BBRޗnT{rkPG]Nwu{4)ơo:Xo]wusS(YgvXS&I K,uh X~ F(Ϲs0bܸa0A[$MQn2frhqju ֹYvy?pUVNc:m*oEޭB7.}paWs#ǧ90 %ZP)O%Ool{sg̶[㨔mh{Q{j y%O(ٰam1Ms=nwծv?Q̍ܨt.~_-xF璞˙}Ӥ4MJ+}?l{}9N۟(0qc~ӜNȝiX;{uxzߏ}5'th?$$qs&BpF.\~{o$84[qZ`џnSiڿsjeСN}ڇNsZ6vȉwN8[*=ݽڣk GɼH:wmI4TNcrxR/rJICCa<غԈ&GKw_HjbkP'OÃe˺:4 \~Bv;wJ+MDD'%n.|rN:E SӦM㧟~⥗^"gΜ1a~wNpu!&f̀9F30 A=3f@>п?4mhDDD)IKXi,՞hW/WGf/V|qOJEDDDnJߎ%)Y 8R2/"""BJWxxDqSJEDD$];s "Eip-o39r:2S2/:T w5t4!nWIZPJsO[EWrvu& tk:IW`Y88 GA֐5+96ؗ?%"*ԊƂ_)xgÛ*7Ӗޫ(콇e8-@WQ/ ((-C K=[6?P'muy>''N9M<.+FŷwX {M;>&5"""!8MQۥF^DD,3/"""oAZn§ $""$5"""ٞu! 6oEN$""<5"&Ԋt8sXʕ!"vhA5ti9`Rj5ʕct"f^$ӄZK꾰RN\9~Q~䇙qFGr) “|-ۓ5+EDD$]k[߭|%HDD$娙4V/ioOnУ̜ nz4M;>&}^DDD467iȋHƠ; NjN@ڛfp`V ٠F>4{I '"""iR\cs\_ E/{"""&}lA,#""̋Hs8 o ftTf^$ӄZӾ 6?^&4{냈k4{ISOXN#""b 4V/4ȓ*4nltMN"Iͼ V?9sĉF1>f/"""ilctcȼe5x553:̋dpP+v\soAO)ht CN"Iͼ;~} #H""".AͼH b}AoAٲ097dt EN"IͼphV}kt$f^DDD\߿TukhVٍN$""zti: *laˆq!  GX,X-z=Wo]TR+1 L.7y7<=NQ(WaDY $GlkC2H۹y&zpnS.O9].Iz0ś""HͼHg2t.\e~:c9x}`RR[xߘm9 h],XP KWyϙbDIli%Cz "I0t(yܣȋ`$5""",܁=w`(j?2gmt,tIͼ8Eh̓ٳax0KDD$R3/iBiNP52q_]&.I}f/vz ;a]v uzaDDDRٍf~r^٬jJDD$c4{' 2Ν_|}޽pfϞm\@Ǡ 'lasP@u<=DY dٽd͔ҹKc`wfoKU`fr\r|_P /N4wbPѿbu=r;Ayș5gubu;*?.s3MǙf*|9| \RLR|K9i:~s0qGlwo"^A5wBxx8:u⩧b޼y4hЀ>{˳{n#H21  fvdHpڳjS"W ff|U)-PƯLe-xLXaiĸVZetmayYzdT$'dhݡ4+,>+ԖD\s~]Ő!FmwwwG㉓|KuDjmGD$-Q3ƍw^:uDӦMTvo߾L0L2QDDiõ%Yפf ͚5cذa 8^uك/jO>1:u@l,d~o\ŋhԮ Kз/?Vσ@DDDf g͚5|~Ŋc˖-曼;'y4M;MO~vD>kVظr@Μ0s&7 g`N>"E -i_qM}7oDL2ӸqcRܷ{74m v-8xdq/zw ""rGZlJIDD$#u X>p2e W.;UA[mժuI'sabbb-ҥDD$W{þ.>w`$l޼ Cml^I^jpڴi͛z5L&΅6;11>, ^Ȅ!mh_ G¡Cp0,x,vjՋxy= S.z}; "I{qEn ϦMٳ'  ""؀"".͘bd]C1^ߗ&CͼVX!CR  VZ̘1mPv4aj z~5S&>פf /^x⸻Ftttvȼ$}ॗE zɘ;!W\DGGc2 dN:۷ L'""+jJAX|HNxgػw/M6^`ԨQܽ{&L@:u(""95m*ٳHDDDf ԩS9G2x`V+*Ub'y4M;Mw-Ѱr%,] K z _ݮً^NkR3ڵk͏?իWsy50I7X3ڵpT ϾsE?|F's擙yISv4{c-[ O WOx9*94^ vD\'ц 0%a|pݺuS0uV+L䀠̞.5KDDD\$jРc7d2MT"(1wcp {{q{,Yֽ[tLͨB~{70:.lt"I;ŋ|ԪUŋ3k,&"".eh n݂f#'ёDDD$$y&=gڵҾ}{&L@͚5'"". h NM`ѩDDD$S3Dyd2Ѻuk{5kѱD&Ԋ';MkCٲFwf/vz}; "I|ݼy00LOr'tط}qUKi}ZKBF'z|f/vz}; "I|͞=""~Z `1:CfDzbݺuEDD\P\gln(^8otI'Ѿ}h֬y[n,[۷oKDD\ĢEpPfh0("""O-[ɇ~ӧy饗ȝ;7/ , **"Ibbt4=151:ctqz}; "I7`͚5;wSkFǙ3gD|}}|roSR/pDK7/n޽hٮӻwv_z([CėMtt{wo.$އ~?;#'߉Úck8#U\<擛խV+keID0ߺ߉'?9\G$\גapd\U)ճ{fI&dI,(o{&Q=GkB{n4)Yڅj;\I&>vDDD;?dԨQ%WX#F0x`àAx뭷 Jp&˗"zrŗ16Y|_KoƗ5FEɋ/-rgz\U/W - @X|}K>2yOy)˂, L:['&x^?k~# vMcڮi-Hۓ<S/s:@ŹvZo?w\r%Ѳ+W+׿UHeFv[Փn2cxvTWM- _G㹍<9Mڎ$-|qa*|*Y+%K^"v4 ,|?SH^]*g痞$_y c~,e&X6Y2Wc~n n);$\?cӳrOW>e]u9<(D! {@zץ]vvBPCʭ"{D45(QjiI',іDȨH N.0}֯߹hQikL #S?h_}u33qZ=&4NNc`ﬞ܋bP1#y~>?֥['RbPvNȈL5vF{9S4a;kuGR2wI!?/;o+Nn61?Yt ף;!,Zŋ?OTTÏ;~/bbbx""؅ 0e T%J(\ 2:d4:2wyܹsɓ .h";LƍRJoz0|v_7omڴImd4X`2A7N]^16d8jлwo9r$/oп2gΜ]d˖-Zθq֭z}ٳѣGӽ{wʕ+ Rһѷ/$(ar<\ 6~C7Shl˿w1 N!9Ғ1i_qMjokq._L\(]4O%"""wƍ[.)r<..nשS':uҡUy263:4..>ڵIuFJ5f/ĊפxN_>%J`ԨQ_F'ݎNp0  O?AtjH IDAT9zI;aҥTX1cPxq4hٳqDD$zư};ZG>&""".JͼڴiÒ%KX,?+ӵkW~g#ȿZ!<ׇ=>{BF'wjAܹӧ;wݛp7nlt4G ntq!A!FGH5qqwPqy Q(`t:c 1:dtqD\dt=9?^O|""%6י&5k;/~vSy+&7 yA|2رc{& ^xGpI<ً]Ffk˶mn4j}f/v`.vD\F8a̘1̝;#G3gNBBBڵ+UV5:Ý;0bPn_Uoa#<1w)^8~-gΜ?O߹st""9s% itȼ"## HT߹s'goҥK$ݹ~u[cCߍ#"""4wƒs4i*TZjL>իNhإi_}NA;ntibAb}A5ȼݻꫯXz5W^ 4F"".m=ڷ"%ov8OG}߿?^`֭tޝ۫4C.N+ÍN6hii_qM:2D*Ub߾}xyy/LfիF؏ʇ@r`9ft"f>G֬Y9r$ݻw'W\FG?aqreEnX,X-z3g_,Q}9~8ޞɖ':>}D[($&w̘}믿w^훊DDa8MJ5EGEDD$R3Dys,]WXbE&ODD%x9{.2:HQ3D}/^l6?ܹsuyݹ/׮Ao9-#5Iꫯj*Ο?̙3qwwW^͛M2m4Ξ=ktLǦib[л7lK@<#Yf/v`.vD\'/̢Ep/&RV-&NǍ*"} |%̘uFDDD$婙OYdu̞=sαf*U'|Bɒ%'4^4UtftONNkR3<< Owo @3s+WK蹾- Ҡ)fh ot q&IJ }AUwƍ/y嗍""&=v~~0:NeB&K %E1A5N@Fqً]JO?pMŌ_ݡD [ީWoMrJlrًĊפqANhժ˖-3:;u 77H/7oڎ/] c@V@D8#Nxӧ7o$88lٲ%ًHFw24kݩźit*MͼڵkiӘ6mZf/"]L n Ö-PFGI;aFGqً]rOwfۥ֯ҥ%iii_qMjP~}#a;k'94hԩS)S 4d29jd2"Xĭ=w7:HK%уZXVg_&"ÒM_6:H#Ikn>x%(UgZ dat$tKGE2FGZ,sK1벜iU#xةh_qM:2D'OL *BIDD\CtwsMёDDDD=5ITHǾ֦d"6VGĵi=4{no'N͐??p"Iqv#vD\'5kVڶmKɒ%MIj'X N$"""qOPϟς Z*;v$$$i`6䱈u}ad\EJ:5p/'R,>'x J*ys? o_L툈é`;}Qo-JHp ,3/KPy&dݚ&z8)]QVص%”~lڴK.+/_>, 9sx"J쓏 'fPl>y n%V2/\E -3`5 j7*~}]9LyeiHi_qM:2wұcGիÇ̙3[PDRհapz 2 LP ̘gip-#lf@;OжmnJDDDDy'1իWpB\௖͚5c͚50z4yi O9m&8ÔхO>ڴmو$;5N7oƍ㥗^"[l (Q?àd"/} o zγO.A߾wc+K HR3sQlه.M4"O&s  6lC81ǹ1cC6]^ ZM &XB4^7^sо ;!00;v8\k.+ʉD$5݃6mN=R5O,? tqqO~_F عmGEDDD$4{'Jiٲe|}Ν?~NhZhQX2gN͕. aas0bPٳp$ Gףx l%K&7I4^4\/&5N6l[n]vФI\B0` E$~0o5٭ZOq-[˜10x0yY+XEEm''΍˜ Kl痟3gdf Yfeݺuj*Ο?Oܹiٲ%;v"q&8[H(`V8tիmߺU|O {Qa^X7ߣشV~ 59KQ. rܓEDDD$wB >|8:uSNF$u >Pu4[-{v`}ݺᇐOgR=fg8:曶{'/J4+""""镚y'ܹOOOc8%s8dEEEA۶ok~hӝ{NeO.^8kQ.xyh4j\v//h8l^`[,tb}HPL'i]x L&Ε@R3*Uk.jժetIsE 8~ޛ'gӬTqW1͛3&Ȓ#n!""""Q3'ҡC|||h׮FGI6 h_tN5h}:+vD\3Ur zA\pssKsY-SyR:2ÇrɔJIDQnWsSZF'yrjjty3g`po)I""uEDDDDR>fLnݺř3guQ\ͻ7|r3Q>z(̀TOÍ"n܀#dIXr yjEHP\Rv*X L^FGIqMwg)S0 CӾ tdI 2;vժUcرԭ[xF؁0DW &g֜X,X-zryn޽I``^כ.i5΍Cm* L='iy.W\v fAf#%>VaDY `,=4v ""֨w† hڴ)eʔaȑsy.\H&MXf ed{swAQMS`鲴 _ee ꧣOfT!}M?},wn㕳С E*4cAǚ1<M0; "IͼNӦML8p m۶elذ"Gd$LLmTnt"s杰k.tӇ]vL$cVf%SVjEDDD$S3ܹpݻwuyTp.ooL^ёDDDDDRy'ԨQcrƍ7n0n8jժ5E\GZfoBްn|/~Hi hjܧ}A/&3cRNJ(A6mٳ,[ׯqF#k}3g¬Yи1at"ԡf *Ub5KrerM>|8ʕ3:#i{~*`04郦 hjܧ}A/&5N*_< .4:HW nJ0riDDDDDRΙwBTTO;.ӧND"pkB/A񉈈HFf =z`Ĉꫯr"_mƻ>+~D"""""P3M6ѢE ZlIDDDyie]FT)ҽ5Yo)4{M/פf /_2???.]ʉDҧ;I(S%H"""""R3OR9Hҹ4;l|ٲF>G_f/rӾ ;Yf; .$_pcҼyswOVI(_V] TReҮ];ӧYt)5*UrDDDаaCΞ=K޼yS%Hr:Wf3jx{HDDDDuwBعs'ÇgŊ\x44f͚~j׮S%GΜ94h_5۶mc>|5k& seّeQ4 7.$ZE,}痌M`~,oPѩ$=+[9y.|i_}iY%]꒨ɋS2Wd&"""Ιwbx:uC1uTʗ/O^%񛵔SOSO_jUZlIRxYvL&X,Xm%}ށ~c7kgK67Ehmt^a~/UU蕨58 ]|"C`}طڇC׫̨ӱq%WA_ݎUυBvN}~-* r=o(9q%W=w>909>eC&?NW}#aݞۯz};a=~n b|L3qMPo_Mwcnm3Dv ,y)xA0]{{ᜆa+xAp|mɡ%T__ooPympiO Kp{s3 sИ$^uUW]Q #,,K\y'xxxpMnJL^:`" ò͛ >U]v_'omZjy)C,3?pD /n.맣O?2crֿEڠk~vտKz.p%?K|jxqыs>;Yu9;|g^mf5~KBaiyG24o9rqZT*Q7~ȔS>&nOU?}]vevىWC%*ߊLO y:-GQ\0Q>\wXw䨏4&^ )b~{[/N\Z<3Af8F_7JPNzGn8w핢ꪫzڭf/F ;!((sMf͚ElG]G ;wׇaOqPp[n_.$(!vNk.M3 IDATy'1֭[3gXD|OMgΜaݺuqШDGƍP T"""""iy'hтsN~iʕ5k&wNũR ٳgСC;{1f̘T iWjMsu@\/QbRe4^_N Gi_qMjTdIJL|NkjJ*… ?~EºuX/"""",5߯O>DSs.t]wI>+==4.,ڣ ٳw^zWTV-M2EM4W\J)pRr4\8@m$ @W͚5%I. Sk!i`m UKKZ:mqtR*-Vwj1+II$IgΨYD3Kg=eZ%\ժ~J)#'C3uꨡfSFN$)*(J>߱]?N^A2OgVHQ6N_|H?6uhٷ˴bl6$ؑ=_իWkݺuϴsN *>>^'NT||K.["x_zթ#5l(R!\ׯR&ZUlZǩ/;ʏf[׈#ԣG5ieikJL Nջ/+ӋVovk> pQѨLj8h/;Ժukl\(!=]NK\6^?QvV\#m/]Gw) KjKҦMyTgJJ+oJ+_ko[I&*| CJL쑾B %8tz <]){F?_׿qWWWi>Z Y,_'|R̔$}駟 /QFڹs+ᇥQ{uu%ʂ3>ӛoIEZFEEgciڵ :gO/4Kͤ3]] \iZ Yg/ST~}[Nֽ{w}W.(aH~(Bo%'K @Y_uɓƍkӦMëpK_}%uV4v\]mcǎu7kȐ!:u9"-X@7tK2ǤޓZRRӮ. @9_ɓ'ۇߍ7NYYYZxΝ;nIo+55/궩("\7hН47hJCbj5LdpO4EjѢ$F={fϞ)?_ZJ;WZXF?&GV-WWRq|%ٵk2a~;g522)ﵰW 4{HLY,30 }:t"""'oezzƏ$(@^b6Ԓ Vږx:/lK۷o5mTׯڵk*//O=}YVߖ,ȹZHծT&r0a%&&M6JOOٳ5h mٲE{+&MTXaHɖ!]vYѯ .v%jz)0,(?Lkt!d4rJM8Q'NuYrn;.IRj}/RvTXZbϗ :]xLiZ YÊwZ޽$sAEpW!m*e%ږ>K/ 5im +ee]a(rX'&fUF 5s]pp+J9uJzu)&FAɴM(~O?F|PsQ۽|)(Be=LLj8xEؾ}Ξ=ks~~$i۶m_֭[0 I?uҰaҒ%R߾Ҵi:2y]onQ5KnKv%)iw$):$ZW$L&LP_+OQǓ!I R&Ezw׻P EF)20R#xI|V|x -*:EuC9iMz^q_(B3FUȑ΃l6 $ҢEҌHF&L_,ƶPoУ}zkkWi2>woq|[R .@~'UTͥ+xB mC9͟?% CڸQ?d@jwJ).~K7KIK*;o++̗C0eulu:~vi+,rOҕWJ=Wtuz`6m )|~<͛/4{V ,DzIgϤモ~Z[|[WZNґ_ժ̣'[7ib(򩿨^=^/mݩ+>^< gj֔&h=/~Gi0q9Y,fʆ ҵJGJ6I{W>as)1QziРÐ ;$fUX6z4 iCjJJK+jM̙҇JkJٶ[cMJM.ʂxw0hwHn !8Qn*}h83K3 i(_iW_7n\q^_PkQ#vy?$e|WG^}g4)w Ld&'&N# []zԹL󓼻]7C[8/?Fpa=gaYsHSHS,ru94{V ,DD3Kz}it<ڏvF3ٰA2D<㸌 |v/ɋ@ ө5.9axl\y~~.zH;E*l6E,DD3q ?N)ᅒ:YVIAAU^ yaHKJ>*>\[n&S]\ٿf|=Q[OQz_ji0q9Y,fP:]V3FZF[zwi]*mk<%V@`m4(Z4פ￟$oԹsGAi2OZ7T4(C54E Rg ݻ6lڴ}:$zY>r&|RQ=F\VlԶ^ӲNKE֎ RLx'ixS]|yweؕ%OMԋQ@b5 iTz @rkG;+-y_7=D҃JKv+ z}z6n!r_г,A1Vf+II$IZgY ePT`TVK'Iɐ$EEW+_߯3eE=$5ja+8˙_5Tb hgNNhV~L+D@`" {Ii- ӏQUyZZMFifI۬Z% $]sedeU1Z]YT%Ц < {]Q4ye 3DSWRS%9\a $rY˥ߗƏlm[wI>zo5vP< C;krOjƢsEG)"W7a7,D4{lU ;bvk`Ǚy8BO T!ĴbHd&'y,fbh4{V ,DD3i019Y,fbhy1&C"p 0=`1>.ծ~b/k1Ǹ"(F@W4q&r=_rVZc:ͻR~`}8F5C+q.ӊ!8h HڕI?ڭY_RFN2Ng(*0JQAEMo۷KhV UZ$}C7=qI*XSLuzW`m9wTRm3zJzˇW}Զ-s[4g˽‚zKUUϩ;g5X <|5)EEEiȑ:v옫KT\_||Xx9kV5jƍ5uTEDDh۶m )63D@ 8$rhHjj/fSAAAow?}@Y:๑v)--ӫW/髯*u"u̻ڵk+66BUXXX!UC+Wɓ'թS'W\3oq;wСCu5fiƍ1c"##`W`47x`m۶M*,,_}jĉ suyJ-nɒ%ڿrssu9߿_3g,Qbb"##;*%%U*YFwq}IDATpz[lۅ UVWtt&N<T2l0yyy{n#ۺut7*$$D~~~j֬z-m@n:+((ȞSP}dffj̘1ܹ 6mY#GhС Wڵ_!ÜQyʒL=cj۶jժ%jܹ%S~`_﯊x40 zJJJҔ)Sb 5h@}]]*oSNiҤIZnx ߿_]tѮ]۽;{uk_~Y#GtaL}Tc*C`K͚5]Vcƌq2PmٲEzҹsxb}駺[4a=BrA-YDTGy?{i&TXXݻk߾}UqHeGnҥKrJhȑ4iӶGUnݔEi…ԭ[7eeeUay.af3-Zd_7j}. رc2335jÆ 3 0u_{ f޽JjE9sqW/ѨQ#{Cn/Rې0ffN=z0 Qaa ,0l6amϚ5˰lƦMkN2ŒAUQR%'O4ݷwF@@qy?n?}~0|||'xǙytRiРA5oooyJKKSff Ce(0eeeeiСN}ݒ? E4i裏:Cu7o~M/ի5n8IdSy߳gO-sssu-UnݺuTݺu%IJtܹ.ӣTlիWغ9(zȑ#f&2;;[ZlrQաC![ff2333_W__HD~~~Ν;+;;[&MҰaȂ*^vlYlذAv;*Vjl6[gQqfChB({T(T?|M͛7Ot|w?*77\TԹs4bٿ~gm޼Y3gyZjUlyyyߪYfFk`ɂg)ޢEbIE?[+bQ Gqqqz:qƥ栤y]X4nӹs甜l_ג%KԾ}{EFF:Tk̙={bwIӻ봾h"IRNT:}_^uU۶mj|1oժUNVڷoOsT%%%%)**JgΜ)uΝ;k„ KpWzSPy.`Μ9zGԶm[1BW_}c-X@TXX2+D\\l6֯_~i۷O\s몫SO=QFMAA~)))I?moYSN4>.wqF3F{'//Ǜhرz\Xa T\N<￿m٣\o^R; ڵkWⶣG֣>qU Tf6mjԨ9s85&ͦGykȐ!:|65߯7|SM6U͚5մiS-Yvޭ(<<\СVZs='///)..NkV%Iz衈*::ZO<Ξ=k\\>smذA^^^Rƍ%69syYիÇ;^,ɼyԯ_?MZZ"##)ϛ*77Wez|<(((Pjjڷo.0a]jʕ7ovڥ8km6>S-\P/V\ƍkСڳg};wSNܹsW)))0`RRR4i$IO?kɒ%JMM㕔#Fo(&&Fڲel٢>|4zhr-Zff̘+W{N/8Kr mٲEn׿eÇ/5m4$Lj׮VX ;m_~ٳgհab;ǧtM>]G֫j}+`%&&J P^^֬YZjIڶmuW-$IcǎUhh֭[g߮[n5a˩ &{K?laС5dk _uԟ8qBӧOרQK/kkԩS'PP,Ν;UXX͛ڹs PϞ=jڲe_WۢE ]Owƙy.$_׬YB%$$(??Un]lٲ $)22R\sg^}v:s=zxEFFGJHHa}[l5tP:I&]8Kc^P;#BCCպukرcպuk;vLm۶UvԺuk5k֬}ԩS3"""B:tP$I˗/ɓYYY뮻}oٜ\UXX_]zmm6?(ZHH6ٳN<{N-ZP@@nݪz-ee^_nbթSGǏ/q^ 󾩩 Vf͔M6SAA ðk(vZ;vpll$oqOxx$)99YW\qE}wzzHH4tP3mԩؽ{vڥ{Owq}}߾}$z<^תUKݺuΝ;զMy{{{?]l[___ogNTfMNBغu߯'xuM6lڳg:vh_o׮dÇ[o֭[5zhf͚w݊pyDn4sL=cرZ6M?Oy{{F~Whܸq?~>nIІ ԫW/_R`q}̙ڵ5j(5h@999ڱc=ch۶"##5n8*$$D޽{m۪U+հaCUVŶ O?ɓ'VZݻ~G?^Z=S\hԩS'[NÆ ׮][ouQUttեKuܹ}h_z]pcƌQ.]ꫯjʔ):z|||Ըqcvϫy5kΝϫA֭vVqM6JKKɓ#(;;[!!!ujpm6[˕!C(((H7|f͚UO={ 6L999jԨ>|Xo^.]hٲV@E㚹yڵkկ6msPYv-4h T\ÇW@+Qk.4k JB1h prrBr吜}:t###qaɨ]6,--Q\9tNXoP(1c{= B떉 :tP;6l tQ=y2uTyn:c^L>Hk^̘1077G*U0vXڵ &MBRRֺׯ'ʔ)١EXfzgϞE.]`ggXYY~ruܒ1uTԪU ͝;wٽԩSի*VSSSۣcǎطozJ .J*+++h7nzߓ;v쀧'4z2˾ 8::0`<\c]q?t恨 +9ܱcǎܹs3gʕɓ`P2~$۹z*vڅݻA''l;رchڴ)FR]v[nXhFGPP6lؠallyKՕ'OԩS5@Æ uF̙3h߾=ѳgOT^W\ʕ+'Oju}޽{޽;LMMm6"%%?SAٳgǏGyxv|=z@*Up,[ ùs`mm{M4ȑ#͛7C|2jժ3gĉagg? Av퐖33l۷c߾}OѾ}{9sׯqAP/D`` n݊jGXX<9OWC֭qm|G޽;m6i[nUws?>N8S]v6-Z-ZhMy23gΠuZڵk>2KզM<|Pk}([{7x"ze?Ă kl21OaggK.aƌ8r9gF*U`РAŋ/py+W ٳ'ܼyׯ/Ƕmၑ#G8~8N>͛]d FssstÉ'?@ƿk};Ç#55U}^rEglѵkWm<s͛7hٲ%=zΝ;^z2{ߏ'O^c^^^8~8=N:ẍL$0QM6Z6m$ ۂDAĵkתDkkkBp{=ZA/5ڝD<Ūvtś & 3fhOJJ[l)RlY1))IcWAرcKT(m'OA;#GDAĩSjg^T*ի BܵkA۷o bV4Gllhoo/ZYY:cxx " jݻWT(ZDWWWɓ' AGnS}A-ZEAaÆii?EA!Ch+yݏ{bʕňu{JJ- ϟ3ddd$}T411[j^'NAnݚmү_?QqÆ hooqݸqC]]]ń122R˕+'>|0m 4(ϙ>8 =Z>csvg~M5Ęu{rrXvmH֭[ؤI˗h"Q_~QyxxK_xx;VAܷozoGxQEY.W~hdd$V\YwֺQQQW}[l)&''ۣjժ 'OT m۴;/s;~xIKKDEq ɓub10G?#|||0`( v˗/1d4nXc٬Y`eeM6۷(e˖z0a2sssL4 ؾ}}HHH]4W]<jQpiܻw;vƲ1c }l077W>>>HLLĿW<زe cǎܹk֭[DL6 ˺v͛#88Xunnn9rFq%LǦMT*k 655Un]t邶mj7oV+VN}7n+++#cUr]\vM ZTT r=}HNNFv`ddu믿4T}Ϝ9W^!&&qqq]5j??W^qL,n͚5޽{5>wÆ Î;j*̙3g<}Aq#))IS}'44]tQ1S駟C~?Xt}+V@:݋hFcĉ[.-ZS@}bٳ'z oooxzzz깊۷ǁШQ#h޼ֹ|ynUW\AҥuNu|5el׮1k,\v 1>C4lPHwQNXx{{z˗8 vTCb} ͛7꿻I&طoQ|y>}*|S\9ut,W~Zc?P(??+Aq|k|֮]3g+W /mq8}4N>s?*ݻwǟ Ay/]糮ϣYW;Ǐ-/^ya޼yXpL˖-qL>7nTOYfj*;vয়~† w^ѷo_̛7O}N /_ԺEy=7qL4 wƞ={dj~֝Qc1*1TWH RC܎%___T*1p@}[l jT?D@@ʕ+A_J5 .&+++of_}_`РA8v:t1Y6mp!$$$?~<ЫW/*U f“'O]~!֬Y?\=˖-g!o...ذaqUu?Yup*,,^1qYXZZ]nddHl'jժ+++={~LLLqFGժUf*}P]펌ZvE!O/666ҥ ~77nZ-[Č3pBkQ ggg 8Dj4?n֬DQxxx 11Q86~T÷~C֔@Fd#* ,^֭zj+h?#ѿy666O}WFFF>|8=z?:ٳgmر#Ο?sŋ0`@jW3 T߿_Uklll$nOOOaϞ=ػwƲŋΝ;h׮ƀdbb}"&&FK޽{.22dʔ)ɓ'ݻZ˕Je^n@EdA~Ƙ3gF\)))~OӦMC\\uڢW^8x /^ TP8}4/^s[nիW1>}FBN0e4os*5jBs>T]uM3f '''kĞ3TwTwA.^e%11Qcb񤤤h~ذa022„ L2THMMU!00 |.y=7ݻ8c:1/Tb.]WVEŊqI:u nnn5kkڶmK.O>'VZv1uT\| vލv111|2.^#Gh Jݻ1yd1X~OM6EVo>l^^^¶m]۶muօ ֭֭85k֠}AϞ=QZ5\z7*Te˖kA5k:ӧԩSh֬°}vxyyi͛駟^zORѣW㽀}v1LLLРApuuԩS1qDԯ_J*9O^^^Oлwo899ٳ8z(#1l0lڴ Ϟ=ѣajjctRbԨQ B֭QT)<{ Ν͛7ҥKĉ1cׯ57nDÆ ׯNf;w5k,z葫1X[[?Ĺs琔  ԬY*U† `ffN5jTfz_ڵtR >nnnڵ+\\\P;v zo ;OTP*8y$Μ9nݺ>qcΝhӦ `jj۷ocprroqƢQF[.7o{{{$$$?DDD͛^N:X`Fu{pqqA||x{{|ȋ/?\,_hff&֮][_ţG|CTTاO|򢑑qyo *W_i=o$XEQL"*\?3#ɓ'E[[[BlРrls*~hff&ZZZjKԩST]_EQtvvz>۷o~AtrrMLLDBz]v;Nk׊D{{{_~GtGV2ו+W-,,D;;;qРAӧO}P([nj{$Ι3GlҤXLDtpp?qŊbjj'VZU,Uxذa(إKvsp U[n|rQqΝZ˲1G%&Ncɒ%6l###4iҤ#""""*^XiΜ99s&={VlٲY&lقSNT^x {@DDDD$/,^g`k,Çp9qqq077GzoaNDDDD$Sm@ 1/92|̑<0O92|̑<0OLJT,x!>H'>J /DDDDD$ ,^HX,x!k#y` sd#*)X,x!gv1|̑<0O92|,^HX,x!"""""Y0:"} s$̓c h|s3 Un>\>Bȸ~W~u dF L'w#d#'mv@$K$'CncDz●cy2|̑c`1""""ʷ]Ñ65j;Z9J#6fx[jȮ!{>;nc1+6FDDDDDHO H91G(rӏOeK%}"c^(,S_pax:z"9-8s5/S^fvDHOj#y` sd 3G~u3r7.cfۙhZ[/zOUƼ4v#"""" o"mai""""ҚE[ȈaBDDDDa2{4BBE#ncDz;91G/?9JHIКAP Q ؅ P+ѼJsr;K;B#"=qd#×e"^xFز ˰ Q #v#Y"""b,s US/z[K[#/DDDDLRZ|gkg.bֳYn0U1"9`B'A1G<> M7'ģr򂕙!/DDDD@;,#/&XqTl^g_å @p>x1G<>1GTRx!"""B'^: 9v#"""3E&F""1M*7Q/oLвgYHHXL-OƜs42y1"~H'OqCcpb#WR~}{a賍EFʷF@G "u8$c,^X;,1obpsYKK_?)+paa?.`0DxHO i#y` sT2a9vm׵=ı~?Cm,<0A\`k!}""""*Taa@Y$mD;/DDDD(scEHx9y׫POЊLXP^{{&Eⅈe"6Dl !~!cƉRW$Áq""pdIHCd#C!d+, (_Ud1""""*4ii'Ņ 8cy2|̑~V_^ݡd[<@zzF1prfB"""|EoHa'V^^^W!ƪgU~<6-`_GJC)t:$Jq Qy' Op% Bȸ^RW℅ j ~XQyFH3BKpgOX>md/4&WJeLDlnc8̾S1G<>CQ.bWMpl^^ŪT9Cm,9iU\]3̤ ^N\bBDDDؠ? Q/_m=]\&Ux%^JlKj* T)9u&\"=UHd#g%GW9P媢](/XQKg猙tQaByE/`jj [[[t׮]Zw[.,,,I&!--MI/&aPRb+ee ,,ʕYPp̋VZ/_"00ĴiТE 9su]C СCxb\|&L@DD~7H>2?pf^/UhJp0u\]3C[,^tRij NNNX`V^o~@۶mlY`A///z 'OF@@j׮-ET@ uz9B2ί2 adrՀfE %r$IHTLۘ/\RJAdd$ٳx9 v*@$X Rv;/͛x9ׯuN:9;;RK꫐3H'>Cm 9/..@TC(X4 :6663f 66P\9W1W@B%DQ_|K.aӦMdDDDxRA3;MxbO#GĦMqFtAnkqŋZylr4#cA 0lg;v9lAlU34ZH0>}ݿw zNjc `fl'_el?9ouYͦVC =/;jH h)V6把TTBߢh߼ys~Qq|^zi,Suy&5jnGRRX]8u^xnCZfhqvgPav]y=L_f-976WoVXd\뺩+N>.Rwml cV_wB;_Beڛj>Mty}WF_j1Uȋ:׷e^ZYz~)F=Zgj<ST_}<:ƽ<~o?9i-g,^4qD̟?K,͛bŊظq# n߰a[nE+Es5ĬvвjK*He%- 8ض h5zu0^갨a9s`̙ӧ<<<Ο+8ht cR;lY#$*|,^ s$Sd~ eӕMѰRCB|fƤ%@P0f b&_/aeIlcD""""U :a;D;SXY :4"Ip yύ>M`Ϟ/&^IXXh(_ޅhn:u::"HOk#y` g+<XqWw%?x[/DDDD8zh >P~] 11޽СP!'gH2|̑<0OY)*q 8[;Z8J`8 h+cXZfrz&v|2u'We]i'*fX]oq}T)SLK'$H֛5Ѯp0Ъ0{qsUj\Z=Յ /DDD@uI8wįE:X\C('po0 t 3Y$:"A(̑<0OoK-RP ]wu0S5XC *,^$'Z` K^=az+O`H4C\1G<4ۘ(qK`1[؛7@X{x$@P0h0xg { [wטfp|{Y88H!Q$ŀ~F\9)ժ}{C :x6O cBDDT@^ '1Q̘,'qC3`ź8V{U;;AɃz h"2Hźx>|8~Wj-{) CI:CɃ!I58,Wnfb$%I:Xz:|}T^?A >e9I:ӧcS=pz,i31QVƘ͎d9R8 *|źXrr2>}gϞػw/P~}RGDDTdJU``Q*W7|}; 9h=,@b"pnӋ0q.\JҤI3`ԨQX`Q\Jcy*\`3 HHLLuM 4tEժ@ժͯe0g%B#^p'(GmJb}EE\pA]@rsN,X+V0:"")OL,8v xXqHD׮@@r86 \rXXX\6j(jժ#"""*J%0`0JG0~C""ʷb]dU4lذ"!""Cz%H~puS/oT|.j͞ 9o0ΙIQ( Fhh((ATTp$CQI0JXtn;#益ߎq?eөS@` 0alnނ gX/=B۶mq,aBDDI+K1ؔ)cRGDDTpqǘ>}:qU#$9}TpD8h MDw[߂y#*4mJb}СCX|9dtMppp cGIDDT0ر#cc"Xyy%*W ccc˗emڴs$9< @OG!"*K puuɓ'GnݺŮ DDX!BzT;w=2nh#uHDDX/͚5ѩS'?3`ll tQI8c䡰yf[C)*^".hOʕCa\ gX/SNU?~}zA># IZX4'O–-P_YRmI1a)T򒝮^ڵkaÆرF8F?GNaPBLL d~?Tu뒞"@uL"KPPPƩW`ٲeر?͟??5k8B!H ;6¦M p_|A%CBQ]ҳgth27AjrKB ?a.ϙxCcֽ!,ڴiCqqqQ4yh4lܸkג;C߾}ݻb1 ÐJVO<<%IHJsg7V 9BL1Lz h%RmI1a)T߿UV~z6l؀?]te˖=mMɒ%dҥۗYf=!C'`jXSm/O</^OOOx!Ve˖-)..w0wZ^}WM}@pަϲSR_yx M[F|<} ?]CirQeQ4cŹʞ4J^,oK<{g lw鞪=hcO11_n8blCT#4~%UwǿֶKվl&ؤ멟k7fR{```>SuriK<<ٕ+RH1'Ƅ0YPD  `ƌ/_Dn޼lСkFøqի/^ׯӿə3'*Ubɒ%# ! ;>DGDGp!ksX!PRXFAÞ2~U鐄.yx9*F!!!!$&&VZݻ7M>#y H`Ť^\y-Q~l3 ΝO3G鈲F>6&,꒗1cƤX "#_9jUn>ICφ-7A>}(<~ u‡cgqeF*I{ p=t[i纱TBu˪Ue޽0i$ Di۶-ڵK0BI'1\n}1ӿѐ/&H>^w`+,\2KvXj|F37oޯ8s#B]T營-gƍ5eVdW)od̃ӶmСC~C6Cʒ}~wŻTPш̐jcR2ygeeE hРfԩSqFL7nP:L!P'OU V.]~Go.U V7Zox1 ZAΎӸtHBaQTjժTZ'r%BBBI!TI?!y!Gn _o1rbUUsM:87G?5`b̓[ Z"Y\t 6L0BWvXNE&@2ZQb"< Í`HDŽ !2T/^<Ń(Z{+++^:\rJ)̔T2}2GIEfŭm8V[?O܅ //t[ꫀH ]m̧ ڄ^ƿZj)*s5ؘj'ƄPuݻLJyC~7(U[n姟~b޽Ԯ][鐅BWdXOHQEJB|LU8£ =4CBU'/UV̙3:u 777]E,]&M0vXvܩ`}'s~9X ը\l #>NC` lڔ|v}3GiC,mUDH1a)T̝;3gH\ (رc1bAAA 4?X(¼_A?x 9TAT)X%*bU;? LB*O^ȓ'O}sڵk c&fK pOQ]B݉.M7ѽ[EbͨX`FtffS:"!T,YƍS??PdIɟ?BOhFXv_͔CS /WJ3W:!Qu2~x:tkxɟ??>dÆ 8qkk.٬/2L*Y>#ЫZ/>~t??c@\Xf߮Xԩ(oLQ,2:RLTBKٺunKrjժuVZhyT!*-͹SI^L6wԝWB N^DDD₣a +OH! -E?~092oX *$~U t8*_?}/keKrJ/_۷qvvV:$a䊾92Ʈ6lU_l@u|sjc_#G Kat-&&uO…/)\0ܽ{WBќ9г'|߅&G! !U|'_'OP\9&OL׮])T_,B5ZwCga0e |{LVҿ5/6!*(P˽R Tt҅=zz{(X !r?\LTlU Vt)Th ҉)S`p"vk;o#8Tܽ{[[ml޼e˖{nbccN;dedҦ ;Ɩ-̜sOvW;w.n2f6%W379V ,-Kͯξ(݂Bg9QB?Zc $5}',ĉ,[իW9B!Rja pI^Dsq_{R~>r$X3Lfuo]Bd8V!NKruK?'L!CW0:a 92Ymlؽj ]M|v6%w/e,cwRX||<7oM63dZ-&MɓH"* CfPqBa[yqwwÇ+V!CHJT8:!2kܺOraZ!̞V^>|=;vL!yG/)QD>ŤI0`xy)yX"^yCXSҥ$6J"խڵK2o#`jc};Ą{a ^e:EX wRn%-ӧOgʔ)tRBBBX~= J'" Z1g5̟/s: ;<##~{Y>||sx{K7gŭlM=\] Oũ.y> Hښ-[ҲeK=zĪUBCyi ̣^YSzΉZgrg T.\uҮ];ڶmg˗78!q (wK1cQpRf a^_5Xn|颺eǎ0c B*Uh۶-ڵ|J'TD*>#jcЩ-O?lܲ1B!%ӗ9z ?򯕆MR݆MpB8tM4aTXe2|p=tB!2H3|}Ma !0"խ$h4ԭ[u2c /BBBظq#ӧOݝ֭[Ӯ];7nt UH'sdSm,6:O|˗'aH8cWo/?1O -Ì^J%h[.LWY@jNX &/T*Ubܸq\r7… BHXfgVY;*UozCL!Z2<"B I^,YC2tPݳ_B|%,ZPEӇ@M5im:ZVhP'/qqq?((H"$$&c윰at8D|cV G>C{솑";J5s*F@p1%!BQN^Μ9C@@nc$y%wLQ򇮗/su&C~]TL"qiR.>!q߆I"Ǥ9UR OrQ>ƒHX6U'/Ɔ7RBI!M򇮛OnRlN17{%W1%&BfQq7w{ 2r$k~ ٕNqr2B!'NfZnt(B Sr'I&hдqqУYO>ˬaLԉNv vg9f0ț7us̙ZKj"s$,ɣtBaP,=|ȦJZ]&B%)1֎v`NXa?>nbmxP;}4Bd;O?s\"DFI+9Ω e¿1w`Vh v˳$3}4B"U'/ʕc„ hтVZٰ/mB\d~M\[@dd7rp7ԫtB!DK>}s;vHI^DfIeӧ9q؄X+hI{YR>- nj ~aJzUŇ1bUj{/̑N^^tB%ʟ{hzU1 ez PCקрsr87z\B!Oɋ!+\O s|אE%p驥|w;$Kf7Ô~'g$h_)?s:+J' w^R;#a)T!vs1Cy\;!08̌F?a)_ƽ486u8Esfp!%Q]Rxq6mDʕ)^x&i4La2? OgO}`C IDATX5˗a&9$YO淘>Qc0%g/C%jחܹs~Fc"]? ]+ue(]mc- Hu9rFj!k'yV{*Iݸfs9mə#g,y/>#a)T!ȜCM iqi @dƷb,_IiC'm;$!0 K^8|||1frг'ԩ=+F۔}hۇoc'O˗qss#((1c`cci.O(wGr~t8dXF*{':kF\M`?לB{ K%(((jpիWYv-4lؐ;vy˗ӳgOzͷ~ɓ'9r$aaa,Y$ !Dz..wLp&DG?un|RBӤeٲeF^zܿ_7;RϰahҤ .חgϞ1vX B0b[$Bd'U'/Æ ƍ=zUbkkkҤ 'O;tZ0n8 իW ʊiӦd:t(cǎB%  }5߻ͱjU?!kyrBSu¬YQ)<==~zΟvAIeӧ9z~(jK`]Ƕ>U,_O_J,Pʥu=UmL5Msk傕uunڷ"9QuG}qqqiJa6? ۚqjU{ʖcǠbEXz*{MГMr,:)M!,* \z|N={}?*:'@mտ{ֶRY 5QuRD CwAJ\4}jǏa|;#:Sw;n 8C+rhJ(˧L %9BKϞ=5jt h֯__ʹiPa~'d`4JABda~)S#U~OhJfB!Qus_>_~J'013]||گ~BF#* sk >77'QF A!0IN^Yr%}!447o^Zh !LLLdl ܢ?|0cdom#!B:y)Qϧy! E>skp'7媈9Γ92}2GRΝ[0"f͂Xph4OPB^zo?PL+\#3'iuJc46OH K>sHLLm۶:hѢ D&M/ E!0IN^6m ĉ8qb~FCBBB_u<(6|-  )BaT,YD&J,ƞϊ?7B!YQuңGC*&]LߛH,re p৶?'ȡ['Oqeƌgg iJddL̑N^]xǏ7o^ʔ)t8Bo_ꭡ!/J6#gJ"Œ>yYr%ÇΝ;6wwwNJ.]L;ea.Nۈ;],ï!] FG/W0 .{%#hc5^Tef[k[>QsɀS!0)N^Ν;nj3֭FH -ZB/R@%)NF'!:w˗aٖB!̙{{{?~f_xx8FHTv1}sRD@*=t5\Шq ۷ömP\ 0m D\ {l"%'sddPuҸqcƌCڵ)RUְ0ƎK&MNam0>4ogܯjW)b 7BU'/ӦMnݺ)S ({8x L6M+\s8sNաM -ˠAЯz^Sʵ"S'f2GOHX U'/%J̞=sqssS:D!JFip!;MOrwll@7d^_vq.n}B!RT,XPVXPȾk(^p rJTQ,qNLZ5(W\Ƚ_ammE !PU'/7nѣGT^=U߉'pssxW+s&]lpqK kua]> 9r@Rӱa%>eGhT5B! EK~(SL˪U|2[lQ 2R%mWK-gSu}l !h6$TҴz)ll&SU=`cm`3e^2}2GOHX U'/Go߾i5i҄+V9"!%y%6! .P¥lsbW*:>HLСzo1n|KƍO|8B!dzgP֭4i.\H2ydڴiPdBSHkprPȝ[ޅ|C!PW^ƌΝ;T*T;wpAJ*Qa`@qkϯ\,?H\* !Ņ#G0{lvɑ#Gȟ??GfРA6KlIe30A~>)Vl_vDny/>#'s$,Hژ?vXƎt(B_ёTt/|ϩþ}e:v$\xBa4O^^m6Ξ=K&MV:a, ~CE\{M]M6~9s=;/^xv;:njsɘ1|9ZWoq/̒KJ K>ٙ~ пٺu+~~~J(ɘ{t.ޅQ7UKO.棭f4 7"o0`2%^mS_j.R t~ ._xw6bw0mt dt6-J9qB!̘#G0sLӧOK.,ZO>ɓ'K",+;)Rg%avںU(1%ı~>3r*k2c>>]? >M?{k5_2ElB!RSur=IzåKy&}t֍>@P 7U#uS܎b~8C22ڽN_jo.8;bbb O9>={ukp)`m9Q` {>#a)T͂ (V ,+|ի.\XJٷQ#xv 6YNV/Ps]"Bd)S{QBؽ{o֭ԨQC脹.f`\NРߚ8 'eL̑9BKZqΝ WWW]߇~HҥNJ^xwS`5r۽zPkt|э̙. M3 !"T8;;Snү D#rW7UbZi)6MU`vJT~ͅW:"!Bd7 !D٬88(B!2J!2*{xV: {pmJE$`%K'sddPmcBXWW#rF_ϣR)i3~eGJ$BLEL2.f͘cR\kgSk qE.f̀  >͇믦$w!R!W^ԪU)S0|p,X@*U6lVVV 4H(0C ȧB߾I{#'s$,W^M6y$C.R4!'C!Dɋ3nݢN:ts60Sx/792}2GR:yy7n=b̙lRSD "WZn ;>l6?+{K[9xh /Gض:]IHdcNÄ WjV\BazT̜9;2x`Vĉu}֭nݺ F'j!3AHÜ_˗kXP= w̞LK^v6$$|9!!жm_zˏ/,&iB!L r4BCC7rDB5)9!_Z}հ{7w<Ŋ>{}+ս-,}̔spT*Cg4)ZׇEaŜJ\N۶=eB!̏ 0#clg fr>#a)Tܸq///߿_ŋWH?=9{ӿf]-륩bH2: k@ǎ0y#6=4ڋҮE!EÇcmm "2@%0#PhX鈲ߧBaT-[۷ӰaC֬YCժUqpp޽{*sv-+ .4n\A鰌B* !`tiȐ!̜9tl2$ IDATn:u;}\ sh}{""^Fd<Köm0beZt"=^Y#sddPKPP>|jժ˟??-ZP0:!ҦSp~;ή#m. :ؓ_\/`P2ɋ#tbb轭7k@nB!̝FѨQTƍ3~0BU-NK^t9v { 4=r*IO K ͼ}v ͛7?y =._-pU"BaT?ՕKѢE?>̟?_00yspqn363T?PR!T2l0nܸѣGw^%&Mw^h`ptɓj)B!W^BBB5k5j=%'ׯ_W&0 &o011t)+NBԿp/Rx&gHJ>p3`^2GOHX U'/xxx'e7?O~ϖ-ozDgq/ۡzl 9Mv9Q';4gϰa"(,r{2=nLtO!OK%سg 4HwAxc*WW/u oOJ\]xpb( DC>t yUUVYTH̓92}2GR:yٳ'FՕN:믙6m 5н;] UͤhÀᒗe[,Y6kr޾Qjn{k_ɶOR{8y1BB! :y9s fԯ_]ү_la4n8;{1uJ"06m5k`YA&Mk/ɂ?{nwz6ֺ~C>1yDm" Tb tpRZm-I!BTX[[rJChh(< o޼hƲ`UKը1۲xÆ к5,[msg/IzC /BuQu~+W5k*0,*DD@ܪ Y-bJ^_9x \ޘ$R}<<>#'s$,E$/<'Z݊>_4WkL矞38-=d*H{28-0p@<S)Nː!C ƆVZcUw]~Wj׮m  h>v&ϳm, &Bs%AÇg5 CϞ=)Y$ʕ3e#a)T,YD(S k׮eڴiDGG/_>|}}5j*d' ?hQhJ9X#/ƫ V~ө8KU0kXe!BTC1b#FP: MKX݂rAIJl_7S$O<b˭[s~3j3{v %U]eB!:yiܸ1 ,+F/ҧOݫ@dB풓؄XgǠڃYZ~!ǀh4O6dE!$74>}PCU YmA`ees$R<<>#'s$,7yJ!,gIet8B!&Mu?̜9Sĉɟ?cbbbطo5j0vxBE Qey J w̃̓92}2GR.yy1-8q;ekmmmSSLQ"D!s.ŋ`A@!B7R]dӦMTRE٠ꜸsOoګu^#zҸ1iB!TJuɋ$FC/K|9?O#Fw򽓮$&DG:,B!S]rM ,-7o|E5BTB <<*oݝ 0MA&,b@AvTD}@@@E 0 `AB(ADYYU'a !oZNJ_՗ԩSЩOWթ./iYZu/w.\]m׿Lׁ9YYWTN:JKKS֭UNu8+))?z/ Rj/*\2w\իWg4νDlݯiZohzC1_zm1NҤ{$q{g+Jz&t2ec׾~M}Mx`-=|E+^ۧgJǻm{X-tMk4tW>vӺJWG][:Y/A7\/-X EDHJ|B)lMo#<" nH/O2>2xAt}#mRfv_wb$)Rv߭ YϠK>O>)X!-_.κ|;xouIRnn6lɓ'=vС\džKSXhDZ Sp`›==|pm:I_o慺۵ ,+t螋KQ Fiƹz5Uekt{ S _+^xKp=+{߫}Wp-:SA?^z)$Dxw{ ns[WUù0[?%>[HGaʻ4arJ?,=tڗZ2.9YYWP{u]ugYrsU?ky*/z,\8%$t7\ f{ i)׌U7's=^@KvYֽ?,IIֿە 7]]f՚U'z2W_qJOY&MS97*qSլޭ.z| id}dd}h߆UV^{޹OWƷu-/*(Ҋ%gY>$\Z>gV$Ce?s8o}g~=ߝ(/ֿ[?}9VIj ^Mi+j42Oj^zSK(U9ic]5(uBBtw݊ $lc yFMx .ʩJ~ruҬYҐ!蹯=i n7DnMz]ip't<`ܧ}')64VUc5ӱn}T˷.GF@NGFGF/p+~]nRbD:*6ܨ&MT'k={updU=[:Tzi]$eKiÆ1ZՇ!s͂i[nҴW+Y%%+8{B¥$s{ޅ;(^6ڽkmVkLMW#Z$tŨCr8 U+V*͟/]&=Wa1Oj6|u_} QXߧl =]|M na̰ &/?Om{Omb(.3;SsNFH~SݥÇVW娌 ~m:I?/SR%Iշ˿R~v| >;7[A41lGsR~XF žGnSI7KWK') P9c;$*9 f-]ܳO>9hɀ%kӟ?w;Rb.njVWOԡ\Z ?/׺_1>].GF@NGFGF/6snl2uOo~Ђdfwzvu'B/)yᆳ [Ы_ЫӉ_\(^f4igQG FIth)|e}ddd}dd}d_py#iK8.z_~|iH{mYYYR~~Mꚾ[lp楂Ζ-^}Am*M^ޑ$m=UAACyU5 Io%վfZ|q/>,&>v߭-/8QC/>ys /FIWڊ$>u隹רAdMIҁRb}}X0A ~8ݨJno3H5nZ>; ΝYlˑ-:|갖T031ҩC{53_G~nMaOSHK曥Y~S?㉺AA|eӾتng3X9YYWPXعuI)Z2`{>zS/ 4[=wyd;YpFEq+VH&կ/Zff-PR߾ҷJMݨN=aww i8έoH7$%'KoY y*>2r>2>2xJL,dϥ#ګ3#ֱ֦[W-]g~^4R{$u'X (_R"{N `%/6Sj yYJ>@YSJ-JIupKRUyZ Iwe@b9rFLֽkCB5:spHuPאˊ&tFO][tWbZMv%b3X9YYWPD$:D0* ;I!ΜXpY9YYWPXgN?8=/l(%!-P.GF@NGFGF/l-P-P.GF@NGFGF/l-P-PL9R111 V6ma1=|K3ƨwJNNɓl2ժUKݻwի=<6=nٲeJMMoJ:tx;V|Gg^ŋ[oo]ڿGK۲e4hƍÞ⥌edd(""£=22Rt`K3X9YY2հ2Ng5TO^~SƢ2r>2>2x` /l-P.GF@NGFGF/l(%fv>2r>2>2x` /l-P.GF@NGFGF/l(%fv>2r>2>2x` /l-P.GF@NGFGF/l(%fv>2r>2>2x` /l-P.GF@NGFGF/l(%fv>2r>2>2x` /l-P.GF@NGLIDATFGF/l(%fv>2r>2>2x` /l-P.GF@NGFGF/l(%fv>2r>2>2x` /l-P.GF@NGFGF/l(%fv>2r>2>2x` /l-P.GF@NGFGF/l(%fv>2r>2>2x` /l-P.GF@NGFGF/l(%fv>2r>2>2x` /l-P.GF@NGFGF/l(%fv>2r>2>2x` /l-PzJNոqco ]쁜+=_sʕ4(^I֭=\f=zpddd}dd}d_eci ңx)'111Wll9rClJ(77+/o*Ukgէ~ 6(<<, TõL-55U:u`?ábk׮zg4a„bQ Ѐ.~(3K-쁜%99YK.%KDR'O/o˖-ϻZjj׮,YRr<x84\6V!!!,J.V~~yp ^|r?~\m۶Pಱ2֮]; 4HW]u֮])S(&&F [x)c׆ o>z'xB`\6V.\;v(++Kڱc^~e%33S#GTLLզMxiԾmʕEEEwڴiG߷~[M6Uʕ'xB999^5 "ө;z,#'ZjnF+00P5ҬYZJ:uRժU]<fQۿFv)88XNSk֬)qA 4HQQQ QN^ֻR]LNט1cԢE URE+WV˖-5{"}vSaaa S^cǎ1|ӱcGa̙cVZekͪU=s3c 믻|Wߴk,]ԬYƌ383j(W?2*k׮5Ѧ[nk׮p5kxS=+s=E$"q|3fPzzfΜj;v옌1d](^2hСڰa,Y‡:r䈞{9oɓ'oYԶm[=zTӦMӤIz!͜9SsQ~ܖfyf={(++خ]Ç+22_*""B3f '/kڴ$ r:de?5j*\ %$$(//Z|2O*8VvкuԽ{w%%%ir:+WzSQD: ۷h"W[nn.\VZ)&&ƋM&L/ӧ;X޶m[ըQCwk7o$W^2N_TիUzuhB߿?9yYar:jժyY\\mۦ,‡֮][mڴ!# )ɿ>}h޽Zn-33SK.7q +==]ݺuSbb>~֧O}ڻwmϞ=/ջw}xuftDFF9sO?TTɬ^C9/q8o7iii櫯r}_p8}gV^zHX`P<RINյkWSZ53{lf3agFCF޳dt:MRRYtIMM5>q:~dT~-Zd-ZdFi4iYhY|qӸqcTm۶U(4f͚O>q;ꫯLvvk[25j0͛7w=Yf&&&>|[hY/iFaMPPiݺYb哒4~4i7999^9B=N2?5+0SLGF޳dsךWF'Nt;2˹s]Tn]~ǁMDD 6;v4ׯ/ݩ.S+:p:f޽n۾}ѣ 5gϞƮYØ\ Ŏl-P@(^ Xƍu]w^z\BBBԤI9R7n.oFׯhOMMQIɊӧӮ];=㒤;wtjΝn}}]ըQCe:^<,hƌzԢE >\ 6TNN6nܨ?a^IIIr8Zz['m6]uU -1={VW\qƎ#F'//OUVUrrzd蛐]g-@ܭ]VGV~`9$^GhhZn??g˖-RV$AJLL,Qj^@Eec`1=*U3f.xs*!!Au>u5sL]y ҕW^ zloӧTrenZ[zJNSJJJRHH:v(Iu׫Zj P\\y9sƵ~RR>sYFNSNSՓTec3fPƍ5jhذag;JE3gzʕ+'==]111t_~ҢE.Ex SjjZj/?aÆk5gJJJrgpO>o_|Q˗/Wz4h mٲS۶m~͞=[)))JHHP=W>}'J~WK .Tjj&Ld >ܵ믿lRiiiJKK|P~>S5jnf\RSLձcGb(ǎSZZ:u7tYCՁ\?Wz BaaaJLLԲe 08xq8;X*ggx 4ӧOwřhsIW[FF7O=7jrg1ݺu3|Ip8ܹsϻ_&'',Xcǎ]wucǎ^8fc1G5fȑnkp8̬YJEYjq8&--cѣGͦMw}gĉͦM̬YY~ٴiٶmǺC5u9{Ώ3/`n˩V\| 0@WդIˮTJϑѾ}$IYYYJMMU^.]oUVV61CiС4`c}ZZΞ=AnZ 4BYK:f͚)**JG-ܢf͚ȑ#jѢլY35jch% `!ժUSʕ/x,KOO$-]T&Mr>|XtW͈ן}!???J=|_ҿ/CGUll-<<ܭO~~:wǏ멧R||~zw}nx]ZW,::ZG-~Fẩ SF/BW_}d?^, 秤$}:r۷-[$}nDEEI-Zuzl[tjРA=zt}ϻ͛7~Ђ tmڷmVp?<豟.f*ȑ#nzsJJO.á<>|X5kּ,c_E3vXXB#G*(]tvڥ~]WRE:tw}͛ϯ(<3oG߀:ul۶4|Lׯ׎;#xEi޼l٢6mڸ.cwaÆwZ~FT͛7+!!᲌| XL/k̘1jӦ  ph׮]-???eQu5a8p@7to>YF]tQ^$I_ֵ^N:iĈU233qF:tHyE㕟p͝;W[n۴iS͜9Sj׮@5mԣ_DDƍI&J*֭٣ &iӦ;ݟ +22Rm۶ժU4dW{HHZl~Iw߭8-ZH۷Wvfff[}|@(^FW^ɓu!^zԩx 5n駟Vƍ5m4͞=[gϞUZԡCǻ9"͛7Wzz&Mx@ W˖-G ҥK5rH 8PUVU׮]5m4Ccǎ?!C(33SuѮ]ĉUZ5M>]ճgOM2 `e˖-S||$I˗/w++00:@9| 9{4hG}T%oe˖ܹ0:]L hʔ)zY8{2|g^g^ [x` /l-P@(^ [x` /l-P@(^ [x` /l-Py0((7IENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/original/graph_3_ex1.png000066400000000000000000002155611153663664300256510ustar00rootroot00000000000000PNG  IHDR/gQlsBIT|d pHYsaa?i IDATxy\?}T&e_0NĔ5_>f0ƌ-523:d+d|eIX";!Ԉ,wv^ǣ}_9uݒBH):"""""`BDDDDDz &/DDDDD^`BDDDDDz &/DDDDD^`BDDDDDz &/DDDDD^`BDDDDDz &/DDDDD^`BDDDDDz &/DDDDD^`BDDDDDz &/DDDDD^`BDDDDDz &/DDDDD^`BDDDDDz &/DDDDD^`BDDDDDz k֬YBkזu(vqxxx eR(J(v BROQt8ܹTX Bn3f@P ..brttDZ UWWϫ>̄:*SB {nYBz]~]166cǎi]OgϞիWQs3f ((|@V0rRϛTx15:bC!ʰ z[x/lٲ[nELLO4N>]wxϟǗtɓ'Q|yڴi .-G .ܼ(Prr2N}:O;vu됛 &ux?*VXƑ6333ԯ_666e~mq}گˊ+~033{+XXX_Ž{pM|BNA_~z>ÇG `ff 4k sENNڶi 'NT+ߺu+ .\X1HNN֨k.ƨ^:>#$$$DXX7n 333X[[ 6_|r8;;Bm,׽{0n8ԭ[Tsil… Gj`ddKKK4n#F@VVZݖ-[f͚,\m6Fs˖-`gg8,X;v@||#ԫWNʕ+c>|Xkח}")) 066?ӧ#++ _uAݻh׮cǎh۶-^ xyyiƎ;SSS5j tRݻǏ:/_R+ƌ[naƍҥ N<ƍBBBfܸqCm̊Zvƍ?EP_={6L[[[ >رc 仿`޽ׯ:wx_DBBlmmP(0bL>7oƐ!CԶq5ܹ3CHJJBǎG'6o,ws]p!:PxyyM6_~?#ڷonQ.c<@||<:t_ƨ[.`8t<<}^zAyf̝;W<<<~z?5Uw5!IX)$IkזÅ$IbڵrYFFfff"!!Am~$I1BAԪUHg?-ɓ$IoQ+nnnDܾ}[X*T 233_tIH$Kt BPID\\F$P9urrrDzB۷oWw IDΝ5b$IGT\Y/_^<\k oPP$IL>]|Ϟ=BPhuZZ(_]ٱc$I3F.S$I?Z Iȑ#5)8_.$IAAAmQPT^]ܺuK.JRHTן5d`` ~weSNոfSRRpww֔)S$Ibͅڷ6$ 6?~rjޙ3g]oZܸq#} :4Yq?$O?TrM6ӧ_o{#G IѣGk\v$ ///a`` ߿//kڴ-N>-$I кѣG$I4mTܻwOݻw߿k!Iׯ͕/_,lllv\.MLLD||ƶ۵k'LLLāʯ]&lmm\h"!IX|vօ(''\|N:^^c&L@jj*~wiӦ7o]#G" /_5k+R]9s1OZ}6lUuiݿ?0eʳݻwΝGǠB'KKK*UҨ[re5k-Rv:u0qDx۷/ڶmVv)cȐ!w41b={V>1@\Ն/_XFTm7nܐrիƏ77|=u LMM`޽HNNF&McasE[OQ%''^$~(2df͚ 6_.@ѻw"CI՛_鉋/⯿RP%IFbժUBy]rr2={///&:t_~EL5w||֤HKKպ깸h500m/ǟ 9ysfqӶ-###i{Q{ݍ9[lO?yvލL85!!z*JѣGc޽ظq#`ذarWIz7WIa\Xx16mڄ .ɓ'j۷{xx ** )))V8>X(Ԕ-[DƍqFܺu ݺuCv ccc,,,^;z^&MjժUq_˴+%%%EurY/ǹ4i{ƌ30fԩ>899s cȈJ zo(J>ЅCsjkFFF+~TC"))IN^'I>}*ݠAb޽HMMEJpQ\zAAAjw ֹzJr4T>X[[k]\՞K,s$ɓ'jǙxBQKǑ߹$)y)輿zxyynݺXv-fϞ CCC\$?.UTѣ8z:>U|}}k.HqWm+۫w/^շo_ڵ 6ĀPre!==?;"** G׮]qinnn{~aǻ/ $$ʕYfɯ_Z$5ڦW]'wݻnN:8|0BBBsNyP50}tlQ-6FToHUQG\?9992di&27u D@yTTo]O^w>3)))g8;WByPsQt_>a֭}6vލ:^zE޷<|iӦw L0֐$ #F(%%!!vB޽˗믿|ž}\LT")) ÁPJBY&!']䅨@zgϞرc077W\g?Eոqc/_ǎCnnn0`/^ ::5koAmDĉZב$Hj6m ** ۶mZG5.Μ9nn6T y!*KKKZ h߾=PjU>|GA U:uDy<<bƍׯ5knݺA+Wf͚{࣏>‡~###hBmxI8j׮PL2͛7IPZ"u놾}ǎCll,1k,9{.>Sűd$''cرG`aaw8{,_KKK:t| 7o.Ϛh``l8}4lmmϙ3.\o̙p@޽>?~Zg˫]<<<ФIlذ)))hݺ5RRRou=OOOlذj ڃw 3.^;M6pvv Ұm6<&L`ĉ7oׯ޽{ZjHMM1x`!'NݻqF?;wƃ EnƍG}wwwnƸu>Wwcbb0gxzzq077իWeX[[k6lX蘈ފ?;3ەs^YfP(Z/z!_N矋t?|^044 B$y)~7?999bʕ]TPA*U///w߉ uP(M6oJ爤ÇJ* ѤI?Xys*Uj%g!DRR0`R066O>̉bB3fBQgfu]bȐ!bŊLhB\2߶NNNU011qbĈȑ#r=AWQ(bҤIA Bo?ڵkEͅ\8py˫uʕyLڊC|ׯUP(ܹs_adffy WWWQ\9add$DnE͚5p66l $IݻwW+W=GP >e˖ I֭[53t  hԨ )zR]k B$&&-[p$I:{/R|Z[[[ѵkWo>l۶Mxyy +++ahh(D߾}ʼn'eff0ѨQ#ajj*سg6 ޞ.M&066O>"""Bw),6m*,,,ʕ+MLL$S5N8ݻ5jG)ptӧOaoo777gC~;v,/_W1/DDD?";;F*Pt9Ə_~8C<@xx8N"""EpMnݺ8{[M_dffQFڵk:*SbŸx"*W\i`BDDTׯ_GڵaddWWWOLD0y!"""""1/o066FŊ1# ƏjJK"""""*y)&???<|~~~hРn߾0\~s%jժMbڴijۣZje:^bRLiiij888`Ȑ!Xjɋ'V^]a3m^O\Zj۷2!D>} :{,ݻ͛e$a֭077 Zh˗aDDDDDɰxWxq޽{UVSQF!99}]FLDDDD_8 B 00D  IDATQQQرcto`͸z*j֬$""""o3شiS 2y‰'L^$IzaQ}aRB&Le>}mm={Ď;: H?tH.9&/%0e,\P6lbtDDDDD&/4o<̞=pvvƱce*T@Fi&oAjՐpl۶ &L}~aRLw$IBTT2RVZ~:ƌ͚5իX6)6$I6}l#v}l#uO>Ņ : 5...HLL,0kذ!5Z*9&/:c>~`;>'Oť gggrJƈo>mNm݆ ШQt1x䅈5ju"*=0^`BTL|Jcc`BDDD B!C4 : AAAeQ1y!*&ξFFI`oom۶ѣGrG{{{e#䅈=Qvm **J.BVPvmD522...077GrеkW\zU^;;;ܿ_.ڵ+:vg!C`kk+?/ᅦLMMamm x|xY :&/DDDDUBp|͚56lMB̜9rrлwoyԩSO>xb?~֭Ζ-[`ff'N`ӦM,ZW\={bcc8<={d@\\Zn SSӒ&q| {B$cǎŋ!ӧѷo_^ZAzj˨[. 6l؀-Z/ď?UVF 5J-+`bbR˗<gggTZhРbccQCz Q1I~:mNmT4jF̙3 B۶m1zh@.]0rH 2zXr%VX `ƌ={F=BTeJRm`DDDɓpqqAbb":!]|WrBTL| cc`BDDDDDz Q1cc`BDDDDDz &/DDDDDg}l#v}l#"L^H/0y!*&ξFFD+OOOuDjP(0deCB@PP\uV|o3D1y!"""zH{{{l۶ ==z۫M`eess(OL^>~`;>ѻvpqqATT\VZvj㛔J%BCC ֮] OOOAm;8::bΜ9񁥥%Ə] GGG'OFnn.ٳP(߇BΜ9%?!wTI`` 5k`ذa%IH\0~x\t  Djjj;w.d7-[իXl֯_ФI"66p!6Y@z Q1q6l'6zwH~̙3x"qiB}gѣjԨPرco:t(`oo 3jԨ=z`„ С"((Ϟ=ŋ ͜+e;ە0@߾}! =I]PbŊxA8;;kEDD`ѢE|2?lԨQC^+VEpdbbU6l'eaaHxzzQdd$Rlٲem"OBDDDZ?FyDD|}}K} 6DÆ K}?D?)}l#v]ӧOuV쯿BRR Q֭[@:u`ll +++tgΜ!ի#55U.OIIA*UЭ[7ncP(زe amm +++1YYY8u:vrʡjժo1c'k+W( W_}5j^^^~:>>"""вeK4nX~ZZU "..6lHKK`DDrssŠA`ddu9#cǎE:uc̜9k׮ٳ/{nu榭|ʕHNNƚ5k~z\p}^GDc^H+I0h 077ƍ1n8w̚7o͛SN^:"##1vX@*U~zx{{oEff&<}bŊBI/f͚pwwǡChЮ];l߾ڵ6V^R%1ܽ{GF~pԩyL^(O=z􀱱1~g888 %% @VV/Ɗ+/^j:wI&aʔ)iӦãP1ڵ ׯQP(P^=ܾ}P[-yR .SiΰCoH?t >|DFFBTZjZΟ?~):w;w?@BBTLɁ!ƌS,,,600+ dggz=L^@Gttց*`tZBCϟ?Qn]!884pzǏuI||< w^֡b ImN/77UVŋ/ЧO}Y{ٳ ?G Ԓԝ;wbѢEoѼysGƄ ԦUJܾ~aii?{Ş={УG<|I?~h|puuŚ5ke~~~߿Zϟ6ls=䅈Q:?űk.r1I0p@,]S{50f$$$ŋ6lX&HLL3h ?5j薵|r4mJh׮5k_ڒիcʕXb4h3f`<<<6ETjC$Imz""z]v 7o͛q bꫯ,'Opvv.8tDD5kJΰ*D ߀tH?tnW Kbb"LMMѵkWL0ݺuzގcǎΝ;pvvÇ1sLxP?Qa1y!""2w9a9y$еkWL8ݺueYHx9ڴit _yzk)}l#v}F/_SNݺuäIЭ[7XXX~p̙cL^譹t钜077G1yd0a!|1y!""R,',OwSe" &/DDD]pANXΜ9 !!!fBD䅨8Cc+l?^NXΞ= KKKn"*1&/DDDTlIIIrr9+W=z_? QL^>~`;ܹsr’rʡgϞou"`BDDۿ?֭5kYG?˗GϞ=1{lt҅ ;ٳg011$I֛1cpK@o󃃃QbE⯿Ҩ~z899 6m^xQQ[b:u}i,BӘ6m7n '''puuŎ;p=_={d'ܹTRFFF\2:w?CcnnCx_P(P(000Zl/o.;/O?Ç>}:4h۷o#,, ۷G||<k׮EPPxb ""zX;v,/aQax"*T___̟?^^^011)غwϨ[.RSSqc۷|r@_ԩSbɢ^z_~YYYl$&& "11C)!Iؽ{wu$IOZe|\(W>|4iP*ynB$q LѰaCѾ}{+V cccQV-xby4iCiHHP*"$$DTZUTXQ!DDDpvvfffR+W빸KǏ !+$IR[U]|-FYj`cc# =vݻ2d`(kV\`o_>ZlK wݻw]ظC7B 033CLL >}Ή'[l;wXj̙KٳҥK )qQ-[ӧoիWxbaƍcӦMjۉ=˗/8|0wfΜd>|ݻRDll\СC׏C5Pv";L^ސg޽{h޼93@ӦM9::\^NKp$6lgܸqOG+СCٳwի㣑-[͛73f 9"Q}9kccʕ+bŊ%K`裏PfMYfŎaÆׯf͚YfW^C׮]1~x\[n DFFbWFz}4>>>Gͱzj9s/_xxxrJ 4HNhbccQc㘗7ŋ ƍp#;3߱Uj굪j5C#~4(ȵK U8w& !CGa8q݋%Kرc\/)) fR+k׮@JMMѣGŐ5jT///DDD W\ABBB7n_t _}; \޽{uօ<>ȑ#̙块I&UBB|HLLĎ;PJH6n8l<}xq _ WOR:⳰@=УGbذa5kV fjժl/tAgDdd$5k&M仟W^~fFV*U 77 6DNN_07oG.]СCҥK|241&/%4fDFFbӦMҥ\՚Nzz:lll ܶ$IѣZΝ;h~zSa9Yrr0#4 .ѭGǿYY18 mG[慛|.-Z@tt$IR&M*GH #33+VYzr<6zBpp0~WlܸAAAEwJJ ]ݻwAǏkYf5̙3Qzuԭ[}믘1c0a-[pGmjٳg"_~ca)m겼_}ׅxXe^z-J.#Ƌ IDATCfu᯿BV {`llǏS%!&&F1cƠjժڵ+q1<|cƌXZZSLArrr]E pBy3&LШT*h"TRח/^ ??B'O(//)S`…Xx14mUVEDDZ @퍂4Ĝ u+PuX`QN?駟zsQZ5נ |FӦMqy92>nvvvpqqY3gΠqrÇcXj5j\j4hΜ9:a뉂1"""o>4jF̙35깹A=LT"77J2R铄.}-'͛I&}7+*T@F֭C`` F ???:u 'Ojժ6@m[""z)lEJcr3D8;;u8CN< < ~+9v+ݻwC$DEE!**JmRP(;w.V^ʕ+?GHHHYMDDݗv#3;>u}:"7K18puJ""rLA= ID?8慈<9v_ލ&F&/DCtH?޼}W!#+u۽c~Nг~2ݦz" 䅨8[cӛwuԭX Vƭ7w Ǵ}L^!oFT5wxUܞ:JTVB`u e-ꮻ" PDfWB*4s! {3y?̝y;9= [LOݻYa s,F\ S*;X6Q?,(lt+2!&5{lu*ct99YF${wkQr;zxlz)S) u?fN_]HD,I^B:sę4:r6Yxoȉǣ,7w[؉ bI@M$ɋ$>i 8m`o^n>VqKMy/!xm7_YY +\+\Xŝ27U4g?gz(ZJ`* E!G>HU1,]Z{2.=&6|{r*A!I>i)o,*sՒn/".L{,(2dL4$/B!D4bis.+rTE֠6"##-ZzykV>2:Zv;RLB4$/B!Dke jVj*Ͼ=~3QD>êZXcbG1I^B Q|䉒IE<3/q͍: ! x(F"œ$/B4TH }F!Ț+c18jc녵m̟dQ#C]wfp0OS uZ&z'x9 K.FG#"$/B4R)DF!کeۗ/D P|t2̘ö-VZ2"KB,V}"G!"2dR孊!c"pSx>[ʈ!c$!4w\tm6pXc.[xy|F2::+WTVR9.ps,7b;"bHX!)H-[xmG}YU/O]GJ@j%PV^3?Ǟ]Wh&8-Mi#Gb'/|/ɿW@$UD`I""xŵ/6c478C *~me667V^njnjyhVzg.FvCu5l=Բ گ $/B4}Fc^,?ǰ' O0}F1WT4hDefx8D-2~8%(P@!Dd3X[,Olt(B4\ F&P\<\! } ֽ?8ĉX`b}+ 9J!EFReLIoG=-:êY=&)6Lm«/G1bp+`eꭥS3ˠZcȶ m,/ٖyqJY9QW<ZnZB4 B4G& 6ЗcKzxBpVp:,m۠ o3̢ٿԙhodjE%ԉ,$/B4T }Fƛ=%/91R*ERUT+T+TT<[.<RxpHکpv 8/} ϭ=־`!@mFE!DP/ϺH钂FO""ż.|n^xFhoQ5C)۴Iŗ-ȠHR]MԒO=KF*D!seȘ0LYœ|/س)sJ;:Obt3qedKL@:vz mJϢ?`] D2&B$/B!"-; j.02^wϗ),ЈqMe\u}95XEݾ9zT! U72쯽odl5C&M9لh^RmLFJVO8ڵc9fd¥*(՚ҙb_s~&.F!c&02 zZ1^(=z&P!Hz^Bx|Fuet($fdXike E\q]i gF()ӆŗ+= υ*}D6"Hϋ$BqEUTFw}c#U 6r\skĥm׆o DZXxǎcQ/*c"H""JKY}#љht8"Rj| (bakl? sk%(@5 (5/hrB$/Br&´ӌG[ݿm;sN^C2eFy>BNq'0=_xׯ cb'{N!@#0E4^Gl{Մa&fٙ}Bh>mn"v"wM'Ƅ" 962XI\Dj,$&Hl/W~w_[nr ޙ/Q,mܿS* ӐE!МM5Cƺ1a.^/߱Vӥtjws~?Q.˂ I D#ɋ$]/hn\욝ᝆJR%+Q@Qߒ+$rs%P*U***bb}|AX=2k ‹"NI"a`A^ðÈE'r;%C5Zƴ8FG޴[oކSQ5ph6H+Ej}6PBz]Bߩ ?ػ 6~Etko0.25_eLM;!~M!3iiXT )]SE**`էv2Zac^ ];yB)o@Ό,|qhB!#ŕŬعIw0!]5FVTfJڟ%{ n^^ +6ѹ)lp}Z5p;sxƏrB I^h$y"oYL]#XW^[x6^/E!pBzAF#L](_\,5:RJJqXgE:h0֭C~Z3dLM!cB4$/B +w.)F"LfR;?G^{DUyEYVQRS4 ˰oَ[XW| hC6B)I^h$ E$OTjM?XbtޙOb _!mp节%ur6f2u?7,M_BI,$yB>l^qӳeO&qg.OJ?й̭+nֆ 3#v5_>Y=*B$/o>n BUUV\yq;vDUc~=D-I*l{sό:Jހ"d8e 7^Ⱦ=G\ F c]R'j18ۄsFȵ$BFھ};f"!!5cU{`Q1cưv:fXLReL4=49ᄊq%L`O_5[I}陨-ѣhwMdiR[deeVZѿ Mt]gAFO>F#"æ-d-td0aJ9>VbptexScvk#GrL_n$4B䥑:,Du"}w;vGUC[4ÎmXWٳˎO1rRT2<,V=qb8xGLZZnZ!N$/A( c֬Yx^zέjthE45W}G>&׊DII2(,PȜd2;뿰z;{Ձ(NuJNξ?2NB;Ǧ\cGc$B 8q"}K.oryf^xBy$8x@CaTa"8YGAUuzf ]PMմmǢqyXVqL\G7^Yq6Ju5 Q$y _'()))(7^N?t"M%oB_sC>͔^Sf{U6fbqrMӹ*&L et%qb6:&qK|?w0?2~B@{0 ફb֬Ylܸɋ(Ww W:2Gvۙ^ؑ~'ͽ= ;|!l?W^ \xQް.l7{Lv|Ph:ETz-Nʊ+Oz|zz:&L`Μ9{]":oq'9tχ6 wM'=/xw4~ v_28I\D*+aUl\gcJ)XFG&ú\Ml 70I^`Μ9lܸ+VGtt4#G?dҥ5vQXXțoyС&'/m4g;`L72Zg:S>ltHmt\YbFhډ=I$/Mp忔CTӧбcGoNNعs'wu8>lx nFcBLZvvÍE矎a/'7q~87~ɨaZ4wҕ `hn+Xg :eu:fo?zj"0_4TYhc' S!0FZv>' ScYewǓÛtCe$pf,Fƌ=BE!!-; j!Kѡevn6C hFj~5\:GSacBq+YsOH#pUukM'.ɽ Oʸ*Y%)Kp\gEXGӓEF7\/mT.g鶥FvC$B& !)Xe u1!C,OOgo7E=naz ٮH_(X&v"YH"`>HDs;&ƿtQs]ȫ$昗eOFqR/_-**d%ށ]_OqR!DU{Yug:$ͤDI-Ȝd\jCtlbt'e_9 _:O>E-ԉAad΋$]B_ChOzWRZ]n#ʕ+\;_1R|0jS ʋQu.ݗ:Ųu;=u}3RY eҔF=I$/BSQ5{֐q73{rT"(\ڂoq%<2E1:.e9Q q}_=}^-[rwq?܅RU#}1OMDbOKG;FŪzh:5BEF7\!m4{l$:"Bץ _-;+?ZDvܭ dYk|g,So;&OA 'H^re۵˷?sVZϨ {0BINiq2PC!`'(%Ve{P';|Pwv? N2Fݜ[g˂gIT&D$EaZKn:v4:Vx,5:faZZU/>m\Hrz.]ЭV'I^u-,'49n!DEaZs65[_{ؚkebn}!5G"|24+,YKQݐZN ޮn;9l[jw$웷S.8I"I"D#)>$rҰVFtLJ,Jw2vbaąJ\KWeoc@#c`M\~=9O{ {-w;5簦gs%cj7J}IR{0 I^TPQV1DۢG*?GV^fPlt8ʺlZyzD޽3i**p-]w@/س'χu{՟LF>_\,Όc92+ 2EH#ɋ$]B߉h^<]eȘь6)*Tyb[4!VSe2i i/>y'h#ISz͆whk/UTx%ށ$E ' EaJi9ih&d(g WTn7QYsJ.(dIc؏NC9^1-_iL?N$vt1'ԉǞ@$yBNIU ˶/_R?2QHmyӳ.`YKa1_=܅$I}Ά,$'֟Xjަę$i偊^B$yBNfn&U*2frOa^D|rdVNn}i˪hE$Ir,⋉k+Լ5Ir<;,~!DEF.xm47{.cipqUm/ErW]_ưU`(WRݺd/ǚFKmNzg݆/GNBu,|IR{0 I^R$kk}mt[uxaF4OO[7Ӟ>ltH߈5ԉu'Y,$Iݻu{DF۹f|:-.CZqd,^S6DjM!I*h%u4g1?_grVj.'&֜m ڤ_rNg%}u~I@8vms0 JgkJۣIR{0 I^rdnc D473U|O*\Kqe,{Zj~u*]☚wA:ntsTS7םss$92hJj*ǃ% a&B`__똷InLW<  'S* p:yPgZZmܿzr2YߣGG߱p yC'\ihmPG-=0#ڎf8 ;Q|>2&DE^u^zM=wj3G#pM de:0^+j5:c}V+r91 2nEś׶|]{q}WIRn-w+eGkVt R˭ZB;Q;aB%I^h$EQdquy9`:޵MZWRlRP|NV*ۿд]*$rMp1Sb\I7^:?mM%7̳&n׭ GmdرN3{0 I^ǼV1CUUO.qQʱއ{r*Z ܑEg%(Ό,*>~׺޳'>G3P+ދgDۄ&]+2a_F7\Mwh`J4;[%ikZV~]$5 Kn#{"tUœr)6koނ=w;qY*i[Qt?G0hЩ]'=I$/B3?g>q8u0T^~.N=|{? ]'dۯ*)eD-_w [oRSM׬ 216Ԟu{~&2&H"( } 4fY3R^2}f1v}NƗێ]P]]2ԊJIh#GrL?v. І ;{TYk/Zp6!yI"(s6`L1G"q\ )U'@nEWU=N=Q^k7,:N#Spnu>ڃ 6۩_}{|1X6Ys!"$/B4"BҼy8-NvJRlt;y?aLYlDܭ:u1]OJ_LM*~%: Eױf}̯2)f݊p4|& $aK^~G^{5z)޽{)//782!DS+Ǻq(<լw]|o/K7ƶ}VhM+Ve8t ǯg"|.'Q f̃m?"To>o(FEvر#>Qp"]BO퐱n!cb%'PT\0=/?C^{$ W?KLn畚^[{x/;cc 8\Pz Lt6-cTo#{0 L6,f͚Eaaa))),]MqiKE4 Gߞmx8TU5ÜT+$l[!jx{_%_j1X&kZmXnawY THs~ h!6vz`q+㢅rսCDd[S(+UlRSo-'HҔdOʿ4cZ{`>=Zoamu:uBQ$yBz^X~}6nHΝ9"KhINCS4FvYMSi']W_)h|0?W,@I\~͚ os(OOvrVVs(ʤ bۭ @3{0 $/W^y%ӧOgulذgykMQRUԟg {~_G~z VfaߺM5,GWU,^zrrRiLgacYf 'N$+K/CC7fRV]Ɓ'?-޲*o-*CCiOݘ7_ڸtT%OD۳$/:oIIxò~ދciٲI׭U3[Jc'e{0$/Ne˖xbhѢGkA4C",^n?!êxX={{ĵ72Ck˹R~Xnފ/!u릟Q k34zGs8M7$IM7}ƍ\q|ww-v9)I^WZpӕYegJXNUjUTR 9O5W]W΄)śVڦLQTոj'e{R8vj:$/I*R U_njv⌗`\q65a _I|n-OFU%ׯ٧v֬qn_7W]WY}dhX il7]Gqyk: {'N_wl !cyߧbCb 1ۯЂ+>\ƒ.tU ^e@đd}B"&y>}!ҲpX 4PDؾUߴ@#>Gvwӹwp' f;ˌTԞ/!4*++),,$!!at8BX{ \Vp0O.VtE9wil͵qnBHG\S&$/BceŊʕ+ .y"BEQekGH2G1R$(%K˱~0p"wMg27nﮓh]wƍ LЖ!c"|>>_\Z̗$q EZ D!4, s$5BsQP$y1*XΒ.rw@>BVQs6%4\3K^VV̙3/lފi(ݺf wF,L{[?Ơ7ZhСCy'KV"s(3oG7eKv}qtf¡Fݷe>_K%ZmtFقz!0i޽{3kT_o}Vh[4r>}3Dx6?P|>d C3^T:FvM߾ #zmہ/GM}ߙ0 E7={зo_<'N]v۷yaX~=:t0:Zؔo =_m7fcyo\E+S3d5u2_ 2]OO^T4&py?Yسg)v߾}} 4˅\cy:,N'gqqM _,*e)#knW$W:S{pdO_eҔ:۵a ,ƂYI 0Mr=Cٳ9sꪫHNNft۷3k,:t(Po 7^HVV{/?ONJJ =^x!O<)o8p r{f 2{zI?0VL؜AQ]_5EjSI6ظrN5:zEZ;Y>[V|}z꘮cݎGKI 0Mw^tݻGwq]אٵkגǵ^[gu] NB4((>PD3.{^bO2v6r>g\O;O8B$/r֬Yje$&&RVVkY93lر#.Kz^DU+ږE}hpD3K$G+7VF>1WRݏ_;2纯P5Jc!L4:,{= ol'uf~~> 3 z1: Cl:}< IDATrw) =CL)5:b]Yh`=D*Px%?yUE`9S* !"iiӦqeo*,Yyg`t"nɸ/O:d,)6)S4Ԭw]n&!1‡R;Y?_Chy7dvm66`G/|j֌z/yB0 $/FbӦMlذ>}Aՙ(-Z}$&&0nܸ:22<udl}wn2ݿ9w6zѯ4<88# ~PGJ<͵xZreNۏ x룏:[۽?B=XW :w{h=zO;j@Z|v}>GD)M[o1uTVX_\}\tEp wIΝyꩧxG=A xkc^c\q'ajns̛bV,;?/E|;ӡOv킯A;]UsQڵ(h(yk:L7i۶-^.Ǐ7",SINaq0pC"(VfcbJ nSOıw7Q!*˩nۮm$./u|Y7AQc9gBeac0g6n+#**QFi3go;/믿橧⦛n3tM^^YkaxḬ."<x^~6.T) ^nttaöe;Oonڤ)Xdw/7'S'Bs ^RQOK!o߾믿UUygx7hݺ5> ӦM3"dSINçmѡPuskW9j^}]BspݏV^gѡC?ov2P3TB$/M5l݄k*EeaQ-tI CB_$'K{k<So-Pi'5z(b* a~{?Fؙ't8'm$B漈T\Y̊+x@!4v]FڵS{aJ |>_ %Y/E RTe_Y7oAZKBfefҥTTTh r5xCBM8HhM?X\xnk}3XAF4: vІ "WFV6[6];׻xe 'm$4oȑ#/'dժUx<CA07{. wakMJAAW1+ss2%6m~ qcplEݺ*+ڋzst"XLW_O?ϐ!C'%%gyEY});VQGS}Ɣ1-;c'VxA>\PCA`۲_r2?vXz&ږ(>ipTB|L(B>}xXh,_AcE[QddבF"D03WB>mtHO=(KF+# 5_`@ B$6:| ˖-cZJ ᲈai., I±6g[?TrjiNG&dxG9k6O?@k2R*I 0M2ydV\I~~>gy&ÇncȐ!ąJʢI,ں3[IRlqt c%Fb*륄h`lgCW"0$/iii8N|AjctH"> 3[X\яYXɈhBq"o^^^\rÇs%fϞMڵ?~n;v(mD.lF0ڝ3zxI\n;iϡиU/jac۷o/ H{{{oƔ)SضmOO`@}2&6UV`NGFńoY;$ @iʑ! I^V:VK\\\ƾݻ3|+Fg3asg*]m I"wn# Ά/=QG38yPΪkܮ4-mJ s}F^MRren޼ @ݺuٷo_”'O7콸ItCRRa:"tM3zRRP\+X;EbȠ @RT]v>|}2b̙իWt|eEƐ12&J29Qx^fFm}T4Ҭ-Ԭmc \mrE!DMfL֟>}:׮]# T|}}Yd#?:NJ2dC6Uw>:8ԩg7Q &(W^zsmł!B(XE9uL)7Q|-4k/INH*Fʻ>i#a/TrNN8Yuj6xʑu\iw?гw*HR)gΤ٤#BWeEUU<ŋ[nt/… ̘1+WbHˆwJO~'xڃ%Yѓ^Wmq#_@&VFZAlR$KM @#r%Ome:yO>;v,c[ عs'۶mcĉF{9y+FZv|#6o#@HMv;^-b%Cw_:!DQz^x-[r-Zc=ơCׯ)]تv=B߅y:ɣ`:g8:XM:fk$ŵ<ߏR1|+]PB!UN^6m̙39sfƶ;ҿF˭]ٳ!lT6H-ZGC=0~XMf&k$|ca||BRDEEe,DyG3f"*֜^@Ivv"ih #=7V A)pD6JcEH{#m$Ey1LYd *X#2+ŔBHxJ*GINR=̃"t?&X;$qQ%B!ҕرcdJqQ3hleIHxv(%Fپ q/I[~K8ӣK!le>yy>a„LVY&ԚSC`H?UoT dÒNC9oDXP v(B!JXN^k`f#nW#j׶v8B ʱk:wKehl1h3Nn k"E&嗌]w薣b>JfF!(q89{WnnG!D 狢VZ5dLپ/]5 Xk3n y/6hB/ƈĽ6BQ(BPh+ԦgCk#D-ڙoT^}#lb%Cy UQId!GB9p>>}T}kqWݨS/TYk{IIJe;@T}F^H" eՀ ׊XUJRZmG CdȘB+I^Dʺ3R *v8Bj.S_@:&VmAj&7#Ba-\o=_2&J /?玓ʊhUĥTIKeLmZC͚֎F!R"i\c[mhqd]eދzQZ.Iz mLh/FV<~> (2Ȝ 'm$$/"d̺1y>ɓm/ !@p#8o ONv8T(;QT+~62dL!$/"5֠Q4k5&hK 2#.9KWX knZu3n*%502>+ↇynؽ͙P@}U@wO41X*zz\Kf3.bnmFyYyoEdvҦjԹp-.qg&.751$ I\$7njX#k64 ;nYo?DF)yɍatף1>,D! n"ŔB_E2 ;:vnuqS#c'SH-D^r# 1ٍY]hX"/uf6G?)E{q;;((yPWO˕+ЪymXaBMa5"=W4;;7IW tbrg~~pac#?FL?yB{oRw?+k3}XZ5:9z>Q_YC+U !kBJJ !RH2&WjNլNml:{4in_X:tPUeĘ$6;!z[qOxV Ѥq㼝hİ.}ȘvB_K!D'ɋ`թU h Cޫm`xzYXMʅ ?D MbS?(n)L@w߰6**Ɣ&/*`qqFw%*O߷TU*1oB*Y>i#a/$y-fÂQz(:g8:XM(0| O>*O\IK hٷ^lXģYinW4iZ5Qӡ8D2x`#t =͓͟v()+`6):MEv}''XCny9wjչAX,vFǑC~?d\ZAUx^z#QF1|&/Z*c wU40BtVZ Ȑ1{N$')xxZ2=-D]Ѳgw8pYAUY"v~>Ij0cYK#f O+U6S𮞾fiENQSa㤍<̕+<)hLr߾őRR"1b5FYUkTZ?FI~X2 SDDs% m-s_2k(/C.KvtAsB]ع;Um#)}Jh zpa#f&'yѤYӔ6U+ܞBjcٵSPg}|-'OH )bTUeݙuTrDjm(AkˋG L~--E&2 bLzdMOyD^=5QWq>rs__p̽B!ɋDFлno4W ˋ"?&SN\LAh/yQjN^ P.hc5daJ!acvb|x¢2mJLѿAk$Jfta.,,>R($]Y@IJFu.cp,T+UBj^܌SϠy!4]*"3I^RZ=C0{ӱ\]Ux9gF't:1o*bWiVZڨPNAnvþ9,oVjt9$/389*dg( (RI {!ɋXsz **?1C0 {"ftlVxtp2S߉n18%O>a"O^Xtף1[jН5hbofW; !(<NOokR5?;WD,>[o`8{-; h Նީ4ָ@]cn'^jhh'OH I^ʸ)7}a7woWwZui<_icEǢh[׿SiI&gFQUWe[j0@ݺ Q!䥌[f=& 6C>'OxzN*?j?^I.̣F`]6mV TO_E}dCX@'#B$/eS(חb QC=IKUfe nGa, I#\6ms ݮE:_֋r9{/EbiԨ !7anme Yx1<@mvUV0b4 Ii=ǒ(aw$+M3is8L Q5Bժ Kv' Cy̏`B+I^JH&Mh۶ml1!l <PC+.ޮVSq6TOqVqL,s\ZmTk 8|5ӡ|!,Kh w54ihbbx?ўh8=>EQd6}F^ȰjP}a7֓!ce/+Ջ"t$.eјn]X8VҠAcuAE,` /Pi@* !?I^JȰat3p@?^lZuR|x7^y7w5;!_Z^oW$8!,K:`0dڮ ;[ |o?PL&(E WK^ib'mdacݝiӦѵkW9us̡cǎ޽;C]y>t=5\kиb\_:&\G|SX=TYzOR ̺3- ?1:gDh͹:rlmgDN_E_ M/ì)d1!Gz^Y˖-3g}m۶3}3|}k'sJWV-֯vd@ϊ\eևq|s$.v@s_ >C  >(+OJű/drK~BFu]ve9…RvrZ/pU*C Ɨ[ҫW/<<a;˵eog^xO FYܲ8e{omDQUʯߜU@ƙ{.EAQ`)SpHu>|S1@!_...d\QUYfe(hZ@u{U]Z>}ݛm۶l2W_}E6mx饗2z*c۶my߻gСCqu~a/^Lƍ WE}ҥ&O̶mۈ7_r|ժUٷo_|k֬bCe~5xgСCdl+Wf|8p}2H*ٶmjH|jiÇP38l(Ukzw,ժf{ex6x2qOyf^96͚5UV0k,~7QU,\HjAs U</ V%K.\|4?;{ѢEL<{ҩS'S={_~8ܹssNvZ$_d&Ji“+boڡyǕMn!Qbbqws8mr)CesNAQ=sq{$6mڔ?ԩS1"񑑑5zapp#%asiFyGVZs\21k׮斧`رþ{lc+|||prrulؐPU\s-,Yi߾}ݻ7*TŅݻoe7o:˗/g;v… <㙶ߛTZ\<4/>UUYvmƿ׭[GZ2WWW ƍ3 3[.=PB$/lر̞=_MN0L̙3B('f3LRE+OitJ1yW{]BPf/bjY&1{W{]GQp ޜ~%&1=#@zᑾ}mŊnݚ&MNqUVe޽AjG+-j4cŊX,|}˺[,F^12m4Μ9jժ̙39tg`ٲeL8޽{k/LXXXW޽jݻ7c͛޽;{8^aȑ(?iӦ\{6nH5rMro]F˖-s<.-- S?q;N#RRRk׮[7]a HaيX]=rڄբ12;ۻSnX,8cW/_S8oBBtLw7nF1QsIQFQHLLٙ+W+de˖>$4oJj6vNڦM\2?̝;d1yq%Νܹsquum۶ :cǢ1 j zehX9s&~~~,^8c{&MhӦ L&O<-[iӦޡݻӪU+{=VZEʕӧ=ӦM8wʕL\cǎe}: F駟$q9gh!~N) ܇K'B7$}I e^DypA1mxW `0zjvMTTO<}_h-ZV'q p{nH^:u*3f`̜93Os"*VȎ;?7oĉL8^za6<244W2|L[nC{^1ٳDDD0l0, & ɄbW^ٳ'ѣGs9m<ԪU+{FEEQb\zg8z(T\9틏ӧOg 믿V4L/+UB$/BXYJ 6  k Mj*JӦeï 37}ݠZ-A( 8ڏΐKb ֭Uf_`޼yKՋ` Gn0ތҰ!w5jfNǤI-Z`ʔ)p%ƍǞ={X~}An ~\v iӦa02}-X SĠApww&wI;Ƙ1cro^I&+ݻwzBBBWݻw___&O{9JfƝwF! gg;EU3ܞ\ùC;4޵yYS.8OB|kݖhR0aFA޽)W|} O>̟?sB<* HHLD1PkFƍ_>7n`„ ^:_qݡxo8{›3,Y]vDŖ-[X,<Ù=m4ө O??/_KA$;Rv^}UK[Nnݺ۷WMڵ)WХK6miN9\;/#U!I旣I3#''Z;aM)) Spm' {uz4iFt![369mDUU=R F1ét=T/@є4x VZŲe /5Wfd{oumL<3 RJ~Lۏ;Fxxx;_3a5jD:u믿xۘ1c&((!C[nɓ'7c ,XE5jT_ݪTBӦM3bR =???.\2LT.BB! OfxE7,&z}&2^ݎho%a<EA5a I>4<mE}%7b))8 s\Q"#spB>:vȱ;v… 2& tܙ͛3h ׯ(9r>WJ*xzzb 5j#TZw} &s1|p"##y뭷XbO/]ġCX,DGGsA.]h_~ɘxb =z4*U"&&Ç[oql۶miԨ/2W^z4O?%<<1|Çȴ r h|Wmj׮Ͷm2͟?ʕ+Svm_pttd899eOO2w\*T|hw;2*ˉ'.^HϋVW./ܢOeڝ\t R,~1\D F`i Zsv8o BꟷYzٌ3>}˖-h4 mڌ˗/3vX iiԨ?8)))k ~!}חK2zhߏ3o7nгgOڶm_ >_|/>gϦI&پo;ҭ[7ƍ޽{y8}4}tl>}2*t=t֍_eѣVZt=O={Rf,G6mBQ~g:t@ǎ3^xLǚL$&&oӣGFE||<W^spp`tܙ'Ν;θqڄ~URutx._͊Qr邖+Uץ3j@,-{vڍQqgOA<_4o.קr=`)MTXA7+(ͱгȣŋ3gΝ;em[2e8H{$s Oz^(a pb|)oCƊz4$t:]Zaڨz$$$qD^>Bz^(!v߽"agtx/oDF .~\%[4wͅa{~~(?YeHܮ5B! ' \P%ӨUo0k+.*Wгwj Gk Sma6 iiPX&$b= m=z`qRF +A%?v{I!o}Z|uFcEђ'OH I^("+ٮh*Unƻ[ [6:Q~ڡܨ*Aţ۳#yt wR joBAS9d0 r$hi4iڨ?Lۗ}޿q~\puȾ}ҥ v*k !]Q8cA##8|nXXi=q ÅK8mw ބbΙnT eȐ.) P켽ӓ'sQUӧOvZ9vGy%Kg%DI"D!E2w-F-sƾ$+j1w[_ ƭZ`W,Mz=6޽PV/y>bڵk \r׏_~ZA !5΋u^l7g._^ ױr]4I0[Rjcmbq1՘:uӹ8*k{7t[޹JJ 0*F#9ͳdbϞ=n:"##b#X=deJi“gBnygN$.e6,3ǍA7q;yN^!1O1qM\ "00`bbbQC ϏΝ;K!H"D:=8?,g_epD6 fc(1 ]C' ѯ5ymێ&9Tܹs]kr4 ?0g(5B!$/BAxf'd:ʘx*V*xZa{2ݵc'̕+a ユ7_+UU3*888лwo-[ƀvB!J)I^U?gV8c6+<:8SDo9oFurD۷5,Rg07jiilىMkt5k2boe$,ҿf̘A߾})W}ϗ;OI {!ɋQř˝9}R@xFUt~Cr8 oב6mԻv ܈v-Z(~kشibiѢNNNӇ˗裏Q"H$'mdEؼh rbrgΤg ڤѸ߻ЯkEЦҼUKfU1`ќ>r$'s..2cv¯t sNh+U͐!(k,L#AFÜ9s1cF8,X3)ԩ{Ox0ywu`S#]UVFKR.ғD6Kku GKIIa̙̟? 0ԨQcr-BCC ̙3DEElЅB,Fƞ 5t¯n+yظޑ&JU3G&1|D^u GU~ CeAmS0o_bU78?rܳ;rGӴmۖ˗W_}ŗ_~ITT3OOOk,e^ pe(T MbNGzwޝ\OI7_t*_.ᷓ[ yJ\*Z)(O⳥0Ln~+G ԻW&.qqq޽O>ѣG0x`ϟÇ1bl=q-fΜIg4jԈ*UosyV\I֭Yd 5~_B!lبr_ Ϗu>ڴMc1TfajGxɍ[ /ȫe3H\ =8uBO.|4*UKP^m*u~N$>aeb{^iwFβp[^{L۫Vʵk2 :t@߿?-Zv!h6o̾}6lݻw[neԩ2~x~,sRYh ,ƍjՊ˗ӢE&UUYr%/2ׯ_gϞ|%<}FOڨtv*?~SuV nnn\v ^ϐ!Cxhڴ) .d…ܼy5k2uTy {?bbb:u*K.3fK/Z_n䗹6}FSIbl=y9zD?^߰'˯VjfѲX:tN+XEX,T][t;va>ږ@LY;:qTKnl-0bBBBxYf 5k4ƍٸq#aaa;;;ӫW/ @VXt)~-4mڔ_~]vb Eaȑ{TZu_k.Z-f|Mz)g&L3g(_^AљW4$&($'JRHIVhO1L̞d~~Ͽ4Ht}裏hٲek>}%Kp!^z% V$T~G>SN8(׏ɓ'ӫWmB3I^ OeZ5 C^VGT2g4Ts'~u1ƄFᣙw-Omi߹=]uiãc)q+իPHA||<Ǻu0L,Zg}>Ʋdz!zY"̎޽ ~z, =}^^X,jԨQfIRx([L^ohۋ",Zz:eg_9c6Hl|E qmOV{݉/?ϋGo?IZZ0AO:wLn]ڣ+5L:ͰinB;vзoߌVzuVZE uC~zVnĉy7;vlsq7o}*UbΝԮ]_BX$/'ɋ%1AaOI2\'SqDLW{\n$?N׮]h4,_5kJ (_<9ao, gϦzѺu\ ]vPV-z-F^GQ:u*.]v\p5jsNsaа0.^͛7rqqYf4k֌:uF{ lQ Tx(k%/1 k>/ u+ẍ́b(ɋ[8FoٌjU}os?cG1i$3-OCbcطk?]̉?NмUs~r&:.^Kܹstؑ7o믿H?OXbﱱoߞVZEhh(1111ԩS_|)SάYxXr%cƌۛ;wcL)))^ŋs\_7aÆxyyၧ'xyyѳgOtwMUUϟٳgҥ ;wVZev>|}FSIbJ:y1aŷ̝]ؘF|/. T)4hLۍ>v7 kܸ~ܸ~_L}{j?ĥ,cΉIKr ;r4ڵktԉsαj* t{~q3g7Se2۷/۶m>cҤI@z4}'66Vs=ǬY8Ŋ5Uc4ȚFDDdqttdذaowwwpwwٻ(5YQEM]A\pIMLp_+4MS,뚩Y .*J.0brdpaF3=v`琜ɓ'SNqj_@K,_ re{.fŊ+Ve˖ҷo_lms(($yy|&/iiqQ־`=Ϝ 3]t|-jNׯǒbLK| EQ_?v19[ZZOYyԉS̘<Իxī^uRJ>+ TK1[ȺpVLu;c<(P.ҧ%έ0ۺr>e2f,sݻw/GE۷oKxx8seСEkIwet‰'Vs̡]v.}C aܹ9~.ر#kV_~899oLDD @j:t(:{HBB$&&uV͛/W^vʑ#Gڵ+SNȑ#ݻSN`ooϻˈ#ptt,ph" d[1Ǐg]|@% ?0㱶J*4oޜoF{nSN &0i$믿֥KRJhтz oo'rOE1dbbb6h믙;w.W\RJ;|:裏ؼy3iii4i҄3fHb \Sd KZpCCY@yzIcJssGQ-%?ڿw?{vϣrqn&wkk֏GMW0sL֮Z(XXsοs,--Y^gMHOOF c㉋QF)σz,{/]Z ԩ;qqַ Z(T*:ۗ~8ڗšl. zD)aUb|s.͒5A+7O+LA(gϢQ#O<رcY~=666_ф3vX&MTT"믿fҤIҫW/kywa֭E^w`͚5Ӈ }Zf͚4nܘ~ѦM"Wͺu4h7odȑL6Cѭ[77nǏqD~WKf5*Klٲ%KO?D_,; O>ۧMƔ)S{.&L`ܸqܸq( o~_>NNN|'ԨQ[nq!VZšCeѢEN^&ONӷyxxd=>~8?ΝcĉԧԩSx{{s1<=='NdҤI36mڰ}vN1˽{hРweƌ1m4"""$y1VI^"<[6Y{u맳aMDsQ3^iO\v1~j2Ut9+RS0z^ԫ_ JmM}yf_nxyy 'mرL2SJ|ǧPKnO^*WΝ; MOOW^_`:w\*^{k׮mۿ F߸q+2`,Xo7Y|9W^)w}{޽{iѢyxxHbeY}+{ r6/VYڷnsW&P--f2u*fM=wF+WFMϚú򚰯( aٿwn8>-󼮢(\ΩIͥ(S D9r2t|7;烑#X&;]u?>gaW|"G]I6-W;*233!**%KpBt::t?QFGS\9< #11RVGcc?~<ӦMݝ ֭[Ea۶m̝;Cqڿ_ j5k2`Gxx8͛|L6`>Qff&ǎ#44?/1,%)FoF޽YrpȟIٸq#A۰'"M6믿毿RJL<^zۏ!C`)S&a^G9'Nù}6'O.PYs9+Uċ/Ȯ]}[n͛TV?N&MXt)}58~ȑ#-{u̞=7|S߾tRȮ]hݺ=,, ??\mrE.]d#&(.V~D2ǧ=MIF }OK0썲[V 0iLi2yU ]w2uT~36Lv:^WoU*|mˑ#,9#T*\˻Zޕo 4Y_b_v~NΝ0m6V^MPPg"1p:аIC4nu>Ez5Nrjƍs4ݿs+JR,t+ 2!{*t:>s&MDUiy5˟~Jtt4ii.ڪU+LBVr=V-$iӦ .\(Pb̘:u*۷˫WT*۷}Axx8xxx0`5j;FF۷/fb̟?/yfBCC`ݻWzlٲtؑ˗듗e˖Q~<=LRm6"##9s&̘1e0 a͚5c 8ѣGӠA\ׯ_ONhذ!6l.]ܮ];^|E֭[Gff&ӧOҥKD 8pjo4i_}nnnl޼7x4z-5j'KdbŴn:ݻw???^^^qޞSNѨQkזyČ7sM;fr[@/I&5Uź_R~цY&JOv(yO/E6ؖ2J;\̅ ?w9W\Yf|׸y [2 5AOzUW%dG&Lc>}ˇ_t`RR4hЀrٲ?QWE[@;v FzܫwYoBQ?aG߾}ٳgiӆʕ+AÆ y饗 ؗo!uN'+;w~777vĉ2e ӓ̂ x7o_^L!F%]IJ_~ 8۷ocmm͊+ CQٺu~(7άY&_'""aͩW;v4(퍅ʕI&sL<GGG6mڤ/0ahT$!!r1an߾͑#GsZl͛7;v,FRk1zhbbb_8qcǎhѢ|y,--%$d /[ְQPDáKHHql񒼘kK3CG n_^YsorNVТu $bW#l ȦMWV*KKKujG@|뷂 [7mV-ܾ۷r[) &0~x3N}Z,,,0mmxo [r׸qcwNݩ\2Jd$5Hʝ;]Nzܟ\G e{Xl5yQMft-ur*!ŋ  } ?:{{{\]],MRw1zhBCC9|0{aҤIRq4(cP =m^o B~  'ޡ%L3јSlllm(S /Tz2vTZj5QzVJiϴOJL瀘=Z^ lƝ g&|5k5znn?UҲi@zŸOB__+VРAJzT‚@-[;>>>rRr-h >B 9 .d̜9" "|w,--O7شiSU*鈋 ۷gɒ%|t:-[FnSB-IIIE[<III9%y1*݃ Yn IDAThE .>hU".W7l/q(ȳWrʫP~]}C?Յ!e7f.`DM |)h u֓sY1y8]GXmE;"rʱfZjE`` 0EZ%KСCX5|Dѯ_?ڷo-|MqwA1zhΟ?}ў[[~bcce˖#ԭ[iӦz̃ kݛGClll溺rƍs]N}ZS1yZщWq.cW{nvmŅ m+Uk4j҈℅[?rN*0a `c? X拧> 7 K ]T=s(260ݴz)m'/բ&/=Oh͖ܿd4jTFV2iڴ)~-Æ c?aEݻw:u*xyy养{s .䫯/Be>SwoMVdCJ...$%%=sxn޼I mekݺ5!!!̚5K?tΝ;lذ? : Foر#7oZj*{!l]tL2,^SG_>iiiDEEQrek[XXl2eҥXYYѡC|#ؿ?͛7J%Hb*Z|rTϒK{J%Ы/ZI&?s> IR=r~J^J Κ5-[ЧOSϟg̙җ0tT^>MұcG( _|ڇdE֭[?~ ɓ ֆm}QS&K2o<:ufZ*| ?)QRS} 1Wc`vk<.x*dR*f3g ?BFF@fhchv{2VR45ǧR7ogϞoa߾}/cٳg .kr(WvvvuVnJdC7oJJ*ԫW&Mлw\'$Zs]>sڶmɓ''Np\Ix7g\߿?gΜd|'|駴iӆ-:tpZjE۶m}nߣ~^ySٓ$,Y¤I>NNNjՊ+VT]6mC !&&&MyS[laԨQHaʔ)9t1^|Ej5uj/_Nz PL8crulll[.={q?~)]4ݺucʕ <`۸q(U=_|nnn|W|)Bffϰ;v࣏>bСѴiSv)Tس۱h֢@ߦeddp92gN鳜>q;vFYЛ~ã#$]<~QTlصU*?'OǾ?wǡ8sTR\vQwΙSg=a4#FxwT,a$t[i׮Pf<$sU2^YPH>ӓ7pۙTSg|^!ģ1~xf̘ӧOgĈjEaϞ=̜9 6<\//2ڵƆ?S:~<___Hn077gȑ|bŊ<ܿDIHH 11FClZZ6m_~aƍccc+.;GGG* G*Upvv'''Qd͛8;;ӰaF@=Nf4fO} ! ^#** ??? ÇQTtڕ!CV'..xnܸ'۷F߽{;vd>VVV&kBB~b||<͚5iӦ4k֌zannNTT۷ogرkL7?~2_&ch_{>̾A\Z QAUcWQpo棏>bXYYoPZ'v$V^/3f &L0ڿř>}WGll_ZekkW_}Edd$C aOd.(YH=Ý)SƲ wS9|0鳸{SVujԪAU+bEgIQ/^N;ssgq/~GeH=(koe?ژSǏ?n4mۢ+&9!T]Jx8ƍ9 l76@uH7 qz6mDxx8Æ +brQRRsS9[RR={dfu+)ROf4H$/F*y}bccC-e{йO^M_@ l/EnF.ΨFqP7PM%}}k˛i8 Fٳ\2k׮%33p"""ԩSTZVZK/ѪU+}%dO=ʱcǸ>o6/KxJzLIbJZb,{NyP Cg#^/&r _LEv0t+wcpduOBQ\ϟψ#r䄧'%{=<\t)yzz2|p P¸ݾ}͛7s&NcanI^$/F&/֓c'F͕??e3zb!i W lXO}{!9mg|ĝëGB9n4lێ"A{~5:g4WA1˛/Z{ܷwۼ; +ɴ+m|o&ss{n-9˶hՉ3ĆmD@״3.\*U g4rPx<P*T@ @'sN!xܾ}e˖1gN8awww]FRRRM64k '''X[[K$11 ֮]˶m۸>M6{, I^$/F$&/f(uҧM!* T!w]t@lw!qԯ_ :NrtDsV-QGD{$uO4¹$}0Ic ~՝;}֭aȐ;σ=M'wN!x(¹s爌… ? .+uտHJJbΝر;wy-,,pppGGGzs8֭[ڵkٵk:-[ҭ[7G'ɋ*ɋͰ[9Tիl*:؋ T*9uPeP) qAm1N;SȘL3ЎI9sY|;SQT*Wv#:uh,cpr^zse;|J B$LIWvSV-̙_3׃Op ӱ3 ڵkoY{C (ZF_Vg%#@ @;aڽynފ:=~7L^d1|],(}D^i=6xhboLI_AbjU;v`ܺu.]ЧOΟ?ݻwAOӅ >}:7ݝ8::xbbccټy3o$.F@aoMR]]jX (,TlvA׼8;x# t1!30 ϡ^J` [ͱMunh|},[G^W}\q= O! <ӧOӥKV\Iձ4iB=_IMM-.?Ofx{{SZ5&N+V >> -j$y/3[UNQE^I>/;QM@4ݺ`@g'^z*d39`f+X8_^Ws62_I^BA X~=~!e˖su~7zꅳ3 bΝgHQOƎKڵ/vڬYx֬YC޽)UTqwWA&4a_{86]HC̾:2Bݤ)7 mepsZ 4jn?yEAKnE}-&ߵLtP;L_LKzd[M@ !/{,,tB!D^_ΪUXt)@ւNNNjKNƍiԨ 6̱IqQp֮]˚5kx"eʔW_[nkg0L|E;'9'?Hݨ1*ba <_ AFOỵ=~*C+l$/#a @{#C6Mt:T<tH5VA=y2=%qɇo`$NObdF\\\x9|0gΜ>|򤧧ʭ[HJJ"&&5k???ʔ)CZ9r$)))O_ɾ}9r$4i҄~ ___BCCeѢE?E<(X+IN*'P0;[9 d>b|zu`CƲ野=02h#F :vQcs?Yz:QY3dB!ēPfM&OѣG9{~M(\Brr2aaa̜9={r=f͚Eڵ .u {~:0FAŊiٲ%+Vsp,X/y#$/@JJ Çkkk6mʖ-[[FAs "kG>'=ꖭttzC篦\*$̲e>Z*ootnlEAu6aн կh.ȀZOsJ͛QRhݺ5Fbʕ\x pm^}Uz ux|||>]vκuׯNNNs ѣGp3f̠I&2?)[~=FC޽ ڵkػ⥾s_B}۷o3~x;v,?~qi+%$$⒣ȪQ}(uf秤ͯ,e]T,[_X뱘C:,_oR }?'ځ=`U)sp@RK7.kM.BJOӦMٳ'o&{aرTZ` Ю];QV _ꁺ딨8y|MN(VV~^n-Ug_LJL(+yuwܛؔpCqW#q2~#gj1j֬Ge,^''';FDD)))DFFry/_Ε+WP;;;h䫻L!ק+mO`rRd qz5v*7+WqVѴz &#!>y4eT Mb$&[k @WmWB[ϻݤ]ڥ]ڥ]ڍ]1| -9OMMښKq?˗b }{HȓYAJ1T xjT* 4r# q2~#'12.+V`Ŋ9CBB$NIB}6ڷAnwtty]J !B<ac`kkȤ233.?B!B `ӦMܼyf͚wWB!02l)k޼9VZT*quu%<<;;B!&AW^DDDpU233ygرwB!02l)[j.\ 554.\Yr$.))) >WWWiڴ)[l)^l[ngϞann]v?̱%KSVVV1vXӋbРAj|}}sl8;wҮ];ʔ)5kdHΝ;tL:5GLw5{=7o5jݻwoAquoV8]v#G퍍 VVV4hЀ zHt邝vvv\pY܎QDT|}}e*?sN%00PjΝ;{%N=+?w^eժUbcc?~\ߢEJ :T SkRy7%[[[N5&q*^ .TZ2be˖-ʞ={9s(s#1*>PZҼys%$$Dٽ{2rHER)~?ѳw^IԩұcGER)wα_A㑚ԪUKqssSVZ*[VlmmӧO?z$N!!!2qDe֭Ν;A)*J;vׯ_Wu*JPPRNU}f$y1!!!JR.]oPjԨ4nܸ{V2hvbff 4HQEIOOWm7i$ER)'O|&}r]J*ʗ_~$/XYY)_~eH{ァT*իmڴQE=K?0={R]ߖ+=zxJw+Hn޼ddd8SNr}}ۨQV\|Yv%E*S&ƌ뱰G6FC޽ ڵkػ1G+XH'+<b-,{{{姟~Ro߮tM133SvU]+qf̘T*w_.xbER)k."akg-"ձcGQY`{ne̘1FQGbT|Z(!!!JXXGQJ^IիW+WVT*eĉիM6)h<ݻԮ];"JRΜ9o8={VWʗ/l۶ā4bcc^zE*֭*qqquFK# 6LqrrR,--&M(ݭGQՊJz%K///By>LIOO/&q*>wQ>#B RZ5e9`UV>Fƍ3p(gߋ<<< +hCaa!PWW=^x[p'"11\ѣqrrr|ִ$⵶>,JJJ FD_mcDDZ\FH"E{MM L&u֡SV۷gF@@fϞcǎ)kmmEff&BCCD|GrT*8NXVL0)))?K.EXXZ-"""uVV+Ξ=&T*T*DEEmiӐX<9tth4h4=deewt}""ᅈhfy۶mC^^,Y:t/^jݳ!I>9rolyꚛ@cc#L&֬YFz)dffeee8vl6JKKQ[[7zۻw/L&f3v;v;>,//GAAVZSN HII;7ׯ_nGjjػ Y/}vY1ydX,<]gwwϛjٽ+6MqN>jz}ܺqaEVov>GV{lݺu&>>$ ,[,8N!zj@AAl6| tWHDtbx!"gsN~;wbɒ%HMM͛>?]]]x7GCBBF#JJJvQSSZQ}xᇡ K/ cʕr JKKgy|ngSLARRN>{'Lٌo]]]ذa"""P__ŋcѢE>ùsaÆ^|cx!" xbڵ hT2003g_Ė-[vf˖-Î;興_d""[hZTVVbǎ+}tvv_K#"q先W^/0_`x!"""""BDDDDD~ᅈ """"" /DDDDD^/0_`x!"""""BDDDDD~ᅈ """"" /DDDDD^/0_`x!"""""BDDDDD~ᅈ ?l0kPIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/original/graph_4_ex1.png000066400000000000000000002251651153663664300256530ustar00rootroot00000000000000PNG  IHDR~-ZIsBIT|d pHYsaa?i IDATxy\M׹u[j2-1v1lEv-c c0elci| PY'ؗ1cאePG{{KQ|9sgDDDDDDDde]"""""""*w"""""""-H1p'""""""b ܉w"""""""-H1p'""""""b ܉w"""""""-H1p'""""""b ܉w"""""""-H1p'""""""b ܉w"""""""-H1p'""""""b ܉w"""""""-H1p'""""""b ܉w"""""""-H1p'""""""b ܉w"""""""-H1p'""""""b ܉w"""""""-H1p'""""""b ܉@&!66RdGEfPBd2u2Y> LR=OqֺYuܺu =z@Ŋ!ɔqxx8d2Wjerqqkj}-Ϟ>} gggm;<ڵk333d2 LWR駟 q̙. 0DTdʠA񣧧t$۱cGt魎Q>D۶m`РAGXXXc~&y0h 4hР<Իwo$&&" W_QEݐd ̝;!!!Qtuu_ť/###quL4I%=//:t޽{ѧO/N?~ҥKu~*_QFuQuqqqAhh(ߑd$&&x}ԩRoE#++ gȑ#K|,-- 5lΝ;.UΝ;##.k#--횮ѣGؽ{7:te˖lѫW/899Jy˛w9r$$IqΝBPܗ,/̙T\YeٳgqE 6 QQQ*ۦOq^#͛E>??:::1j(=z 6,"Q a; &N'æMb bŊe\fhhwwwXZZuQXxk޽{4ˊ+|m6ܹsW^E֭!(tmʕ+|QžWvvvpwwzLq@O>}uQ1p' sss\|Yh&55;v PjU=WQtͿzZ7.yl”ٿkϑHԫW*T)6m͛7ׯd2٣8 .L&Ü9s} Qt-WW?q˅q?ѳgOA__4h_W1ӧ=z4\\\```777L2XFAcï_XYY^^^HNN.XNBPP*U}}}`jzsIt022Bƍ3Bחwz//U3ydEXԩSǐ!Caq !qF4lưF߾}UZ{ <{LqZjdddQ9I&z022ڴiC2dd2Nv/2L\.GVJE_\\ ѦMIDD^Xp4o\-y\t SN 舑#G";;[c&LӧO\011\.5j|С ajjڵk㫯*}{"""GP9]vt:t]v`cc6m`*rsszhԨVZv̗IIIJﱢM Yֿ899AOOFFFR z;wU 6h|bWy"*q УGrÜ9si&9rI0w\P)yN<7" u8;;zliC"777nDN0| :hi 2W\ ]]]ޖ+&M!Pn](9r-[ijgХKTZ'NҥKi&>>hР ׯ#>>ZBZZ>#I+WQW5M_"##C:u1}t?VVVׯi&/|JLLѽ{wlGʕ+~oL&À0qD[}Q9˗k.l...:½{дiS={͛7G@@=z֭SpDDDOx֭?>5j򹽉t‘#GдiS?i$ddd 66>>>r]z\rZ~033S9cǎ[n033Ö-[0w\ܽ{+WTɻh" :666޽;pqL:{={ 俘6lѷo_TXǯ 6(5'N@f͠.]O<3grJ̞=.$$ׯGz0l0ƍؿ?> ///eÇ{HHH@֣֭G$%% C ANN8qBcvڅ)S-ZKn>y7իWѮ];ԪU @gǎvlllT۬Y3߿{E۶m_{ψDDEte!IU۶zj!IpssSEGG IDll2Ç\~M_|$I 0@%YorM}oFH$NSѸqc/nܸr-fffӧ*/\ $Imڴykh֬d*i&M$}Ϟ=B$^\>jժB&7䏌$-[U$ѤI?ajj*rrr4U&$I'NTIOII2LM\vMeM6 IİaÔi$Ib*W\)$IVW?]GFF$I:.^(tuu~2=;;[IS|tttĮ]T}ju͛B.&MkB$nݺ"[^z ID\\J?#݅J;}044nnnÇƍJXXX+Wz}={;w$/B/2}>CL왨^QyBWWW4h@{U>/M6رʶ/صk.= [ZZcǎx.\F5k`ee'lkӦ ڵkϊ+#L<*兄1l0={ǏLsLrqcѣU&3+R&:t@-T&NKKK+묝:v숃"==]777ѰQ2(L$$$E*X:6j(ܽ{vRרQf˗1x`%KQ9ޔOI8qJ}}} yyy8q2}ɒ%?6СCxeZvvvuVE|M 0eϟ?/pWϵxba{* SLQ2oootU%u{TPԛ7}aWy"*+W(:uȑ#ѸqBUo2|'ؾ};Qz7.cQsyeWJOOGVV5vU%~9 ӧM8Cj*sžW%]uϟ?]%$ITT ԭ[W o:OiDTl>>>ؽ{(p\ÇoVbGM(>{Eƫ$I“'O{xxAؾ};޽ kkk>|.]BXXJɻW%mb 8Uy,,,4nה<.\Xq%I¿rdo\Q(^IFUTAll,O]]],]$>>>|֘B@@lIzSkq4gMG6mZzxܸqX",XHDFFB$ **Jqعs'LUV)'3hRR;){ ((:h+}ŋXf &\%u ?5!Wl>▧oMٳ~ھfzq{%P7j=8p 2337nFӦMʪ>|ׅއ &w5 $  ((%r4*SN!336mB߾}o>jJez___/x!ߏq֭[ڵHa1c \v .]Bll,>Ġ_~|>33433+PۛMWWW!++ 'OTo5.7\ޔ迃;STΫ={TCSփ79Oq}G055Ejj*_Ϟ=!˱j*<k׮|6SxI]ƍjێ;qIu +"]$Kˇ~j ۧzR+WAZKRqCZ{rq-үX9998z(lXXO?!::yyy0`@?$Epp0>|87ǏآY/-f))^IzyyAFKKKt˗/W.xi|hܸ1N(IP...ӧvڅʕ+,ְaC!m۶^zxy+K|&uSA$ԪU #F/j/98迁;S:u9-[r"++ *%޽[V79Oq`Ȑ!z*Ǝ⌌ ܾ}[%bŊhӦ ~W̙3G޽KZ)xV믿0o|ÇG۶m///̙3cIƞdM MD> /q-Ϟ=S)5G2h>vƞ@+ȣGT&{<*<:::o_Fe{0qDH|fa[7/^y\=Q{?q'wB Xlrr@8t1c }ZhǏ}5k&MyDDD0{ll޼~~~077Gff&p1ٳGml޼&M$I*ɿ58|hҤ oߎƍYfu֯_ooo5-Zڵk5kB$t 5kx$IBLL Zl;K.\2NѣGSͭ@jPR%A___L>|xfkUձpB 2+}k׮X|9g^nn.|||\|-[눌TQΝÇf͚+pԫWOY#99IIIQs_n¨Q]WyAM4AZ`jj7n )) Վw^"r/@GDVak#d2uя9"+W_}5~?~,(텮dE6)K.M4fffBWWW ???)>|Ovv2L4lذĮG:B___T^]̛7OݻWηn=zBGGGٳgEϞ=NNNbjVV!2kbT/]&#*V( E:uҥK EFFF⣏> RS|4....j럿xB3F8;; \.d2vz vB___؈^zWj|_.]*j׮- ۷yf L&"(>}*f͚%4h LLL\.}bɒ%"''GܻwO|X;wNqqqB$ѡCt:2LGVTA/^,$Ij  LѣG055UQ}(x1ѳgO r011k_|8}2߲eDǎ/rrrT+$$DxxxCCC!EʕŰa۷_{Ϟ;vT深ڵ;wTɗ+D:u011jk+G(uS!/_z SSS+DnDZZqܹ#tttD޽_{H]tt$IH$٣=##C=<<ѬY3Sj/ 666"))If/*U$rz/_VѣGs΢r@ 1yd]/_\ԨQC [[[1`?9z UTzzzTՅG [[[f͚7oBNQٺsѠA:tSgϞ}:u*|(*T bbb^[Β鈈L<|SL1c xxxgϞe],2rH8::+P9ׯce]r{xd;Ξ=`ׯ_GHH*W ===C*+&!޽{W~Mڢ}4*߻w/d2УGXXX @vv6N8͛vvvʹ:Õþ.]&aҤI7nall ???ddd 33!!! 틧O~[999ܹJ% e"WҝQLخ];uRJHJJR<cbbvک-[ZQP "99,W"##e]*ԨQRYXXm۶Xz2M1YG}?33*U?}!..B"33@DVB^^rRڼ<C."Iƀt\26mڄ)S 66C`` z联`رj+jJ_t)+Wܹsڵ+v GGG$''cڴiXz5&MuV|022zm^Rkָŋx16mڄ 4I6+AhT.̙3'33NX͛xa( Uʄ ʺDDj$IBpp0BBBc!>>_~ƕ6j׮Eի1|p\mڴ̙3S߿JBc@\I&8pV^k*ƍvZVfM.(2ܾ}Cg}vkת*--M[`ĈpssӸĢbA,d8t LqUg}!ƏFɓ'Ѵi\aڱc ===TXj빺@&CDDDDD֯_}͛Y`jժ}}}rHOOWײeK3Ǐǔ)S0a4k֬Hez;=d2TZH] ҦMׯ_nݺkkBdggk׮Dbb" tǎ1qDDGGO>Xj~'<~.\@pp0ttt4!P0a֯_ j\@pw-O?8q"<<

    V2^dhh.ŋ"єQxqQl۶n򖖖4n7n //h"H!C`$ ]vE۶mjg̙:u*"##k MФI8;;cܹ* X[[s""""VZB ;wnV^֭[cΜ9ʴ/^jysrrлwoTR4h֯__*W^R=BJT&{Ynn.zꅝ;wbӦMhԨQ[n]+W ܍ʕ+5<<<ФIQQQ;v,"""0bĈ{6vRf4T,--U! BDDDDDoy氳ѵkegg+ckٳgjyk={֭òeːEx_*x)))$ԭ[W$pyyy ƍ??b jԨkkklڴ /^g}FѣGj~ՙ3g !P^9swQ$!99 Ej0d 4 KJDDDDTIT1mڴATTOoooa֬Y033Sidۼy3nС5j7n2m^޿CPɓ'#//QQQx;il׮'O,cժU1bfcc777ypy4oxRRRpBtuQׯ_?Xϟ?W%%%֭[裏={ 22&MB0x`4m]tQ)_a򂙙Yݬ0p/'?A_~2sΨ_>*W,DGGcȐ!HOOGdddy)SÇڵk#>>]v aaaԩʸ9sСC a``q98M*hٸWӭa9;v-뇆 +5 ȑ#޽{+gHs E j֭[~zܻwV~ :Te<Kd2/^ .@WWkFllr&~m۶A$8p|6\tIAaC(J$Z !lڴ Z*4Ϟ=n:\t |>>ؽ{7\]]aÆ޽{000@Z|rMܾ}[۷$fbt)N:Bc= ? `=|PZ.?{.bP1p'""""zOUVMck+iYY H1p'zITE -z@c= "N ܉a鰲L&Cll,ܞ2,!0p'zq`X(BCC!ЧOm}L&S KիW1~xDGG֭[ѣၸR-_8< $ 6lG`bbxTC>2224rE$QOOO$$$(P~}̫W'`bbvҥK'OݻLk׮7o1@&AGG@~OEK\0<111puuի ڵk*Xt)<<<777mO<`mm \?1cr666DDDDDT.(PDGG+cbb駟PdQ)S ==:w,XGŊ+4܏=[n͛s*'''SwA||<6oތ4<~ÇWn_x1&N3gҥKX`&Ox@dd$v؁ 6ʕ+ذaj֬ ǒ%K ܹM4y[MZ]cEc= Iн{w >ϟNBnݰ|r;99a尴ŋQJd2šN:;v,ϟe˖Q㹍aaaQ٦XXX@GGfffjy?+V(1zh }'O|롲w"""""*w$I… T҄ʀ fff_ƍ5jJk׮aȐ!9s& mV9v(*/ w^n*q"""0l0١]vxRSS 6 .ׯ< 戏Gvv65k@__E^lq'""""r_]OOV/jժaȐ!2eaaaСCZѧO<}Vp9r-pW˗cٲeV<==tRef̘5jVZ8ql\SSS,Yu되6AO`g%z@XiiiQ^.> [܉wߢz@X`= "V ܉w"""""""-H1p'z ?X`=|DDډ;cNP>Xw"""""""-|}}1y:Fvv6PBʕ+puuŊ+y={E%*w"""""*BCC!ЧOm}L&CXX2-99_}[sڵسg=7o ǎC`` ##FFFz[0e]"*;$q<#z@N$899aÆ xLLL=Bbb"TVG077s^|ժUCՕi+VT&QOOO$$$(P~}>>>P. ___Y8Axx8L͛\\\]*yBCCVVV011A~s={QF_>ݫ~En&&&ׇwEn`nn\WWW,XMo+i9D1&z@OQGCCCL~_$xc<|֭{k%% >K$?g"""TZZ<==qqԫWCeuuva;cNDDDDDD8{0""mH1p'zqX(DDڊ;{X~byYA @DDDDDG5˺(DT lq'""""z95\&˺8DT ܉c=z@UØc3'{ncY;vU[:< _}u\ ʺXaeeLX!,,L=;;yyyeXB/cNP>XkN>K#Z*wZ/??ӫȑ#dС;9իW1~xDGG֭[ѣၸwRzpr:""""ܼ\lѿGcsf89aK-lYV-[ `y&*UT+ THė_TjNDDDDTΥg_ヹ}|{qO?ڵk1sL4h111m RɟKKKekGЫW/TPvvv>}:||||d2BCC]}||p䉉+V^ WWW׮]S9ҥK}}}Tn{  kkkr888`\3就QO ܉ʩM6'/|X|l1|Ɂ8v#FDߤX֮] ;;;4k  &}޽yfʴdggsؽ{7ߏ48qaGFbb"֭[y&v>pttļyT;w͛7#-- ?Õ/^'b̙t,Xɓ'#>>;v`Æ r 6l؀5kdDGG###;wD&MaWytz@X`=(Oy Ú3kY?;HnTE+u˖-ç~ ѣF}Yfh۶- ޽{V^N:ڵk/?*nggWaaaQ٦XXX@GGfffjy?+V(1zh @&>,XSSS{.m###iӦ,V.\Ml ʕ+HII={п,Y۶m .^۷cϞ=3f fΜcǎ)i5g֠qifU]V]x+V@dd$~w{{{pooo8::"!!WF``r8 55UygϞ}db=/899)󙙙!((K,֭[cܽ{`hh̛7ǎӧqɷ.lq'""""Ry"wFdj$Z̖3aWe[lAVVIve˖aРA$ z¢EpL0A6l-[333L0AeB舽{uՅUaÆڵË/`ذaXp!P~}!>>VVV077G||< ===Ypvv.ֵc;7_t^?"6 `hٲZǏǙ3g?oooK,A5___x{{VZj벿`?<<G#lmm մ~aXlUOOO,]TnddwxlIOH( TP,X@EرףĂ E:*],޻H@$?NvoIy7x7[.gʕ̙3MLL }M4f͚L63f1 O0u3SSOu8G/ڱ&m..kWϿvZ^ۖ˗Ӹq}nK.O>9e\qb 4ig A`ѥ"""""dŁiѨB##KrA7nLJJ !!!9]*/R]TՁTˍ_rgR"sU^< .㪫ѣ,XpI+"""""JLf:&ӺJkF6(kZC䂨q)B>Dz}˘u. /dexM/ q r'bհՑ=Wv0 ܤ*6P>< ʦv#67zI?\$A%]7-ՁTe&9H=_?#c: Wh{^ζ _|$g&}8KEDDDXL^7`A2r3HM'='.ׯ{ލz[Vi.Y/qB%J?DɈENS.""""R'OW|;JWq}tGI;w!(YZkYYc.'dS8~eja2]DDDDY=Ƅv8M.ibu4 {wT%㬏Z?VČ"L&rԸc,:?Ձ@A7~~7zt_֞G=T#3;)<ʖr89t5b/jEDDD$}ۏI[^5z5nj.q>bJT|5/U8q\<5""""TiE;~+jv`PA,ku,)d{wIU<䦔бEJ`qq80׍ii2THRDv9 -H"F caXA@@u ~vCih=51)j19o;}EIh]DDDDl`AZm͑#Lk Զ:!qs0@ >n*d"C+"X0N :P]@ZṃLƴӨYՑ"{v>ߥx 9Ȏ%R`ԸdyhE;RSy:Hb=,%2{TO0X5.d"CH1fR0TSӗn4KV:NPT=T>Vp'ժ 1ؗRȩD 7ХKTBHHJC^sǏOzJ* 0\ RQbqe_8vrqQmqAv"D{OIIIa|5m۶ѲeK֮]{qѫW/j,XO>oC=dazN:P`鞥؁R =z`x<*UDzXhѩ^}U ڵkSNa-9t80?jL|uWB$년2xz>\.b|BNg_V_v *PdIҥK9|0ݻw?=zW_~P"y2 L>iv9~'N(s# 1HrY@gݺu>| ~z֭{yUV%""""""Ee\q$9{~quj>Ը@nn.=%K䩧ѣŝq~ll,III}^0h׮ifϞ y):\O^(ytܚ}<::ntR:MgWyuϊ@T+:y]gtz\ur $'r$G2<|ߔpcc-bLE[ {fN gնCG+]ٛ/G}I&1ySM;@RHNN>c)YdecՁ FM߹}iY%Ȑ3>RSIM'='4rNmjڋI"Hz=t'E9rq }ZO?͇~g}FNN{֭I&ܹ3})ji_cT8A+Q)Ů|ɀJt^}3>x>4U>@ |yW]u˗gĉ0awqG9߼~ a c-lE.Ԉw\ >oЮQCz- B׮]iܸ1K.=X%]6N7x޽{ӯ_?tʕ+yӧ_~)Ύe}z׼o|Ց$H&3$w߈KS;wP^w @]wK,9}f[?&L`СlݺeҫW/ <_4lB@u ~Ձ]HCY{h-[-iۓG$f$ axᴯپSKA t y䩴\= X:!?}_,j܋)}" Ou :]5|Φ# %Dq=Kv-?pB2S/^".Dpm=+/;&w9˽tAX&&&n7^/25""""\bz"7ޟq2pjIZ+ujY)0eBߊ~'fsT-oVHC*"""Lpa–[ؖ0;H Atӕ*^E͈ 8,:1QãسIN4j\) q[Q.Ri舀@T@n_Ȇ lKƎqg?uN2TBj\W:U#!6jƬ,L/0ӥ7|t$uIԺ q{QؘΏ˼f79/ϥ.7Q- q TFThũ8`H~IVAnc ð:?, XrsaI|[Ց ʋ.k{vMz7M2#A.3>CN^.-M 4NG*"""̍ 7ң~͝\e(.aD/ ;>ϧKVT""""g1!޹.eZOcF=Ϥbu*yT^lED10(:?AxYk1o6"JkWX'gN'C_Ve0}0DW`375b#VJ0^ z&qFLӿ9a̟ΆnBBL}:'*2<wm'v]iՁɢیnT-QZASg&EpnwqC,&n&*?<'w9!rԸ>͎̾g6a0H;t;JqYr{ ͯxO6j>T""""JH1rH^ꖭku$ `iŇE鄆ZFNnRy5""""E2o<ƬütفW:(&Ѥsp_t{:Wܵ؉U3 C@AQ0Mu1vX&(YΔ*ouD*T mhJ7OeF7f܀T*{ N\*o }ZEDDD IZvv,b|v"&4.M MQãxhjeD5̵:iؑwbLkS;~2 -͡RL%ysAj38yX#Ot>`/:0OL=b'jEDDD.i,ڱ~[vizISk7$@5.0X}LsX)MQMii|3F.ɦ#WAѵNWC'6s`!b1%;`;)jp:Uڝ~z|NZNUUVZY|1Mؾů?/!4]'t쒉Jx4NG*Ri@Tz B;.wO>Tjuċк.Jf Lt Vp0S?fѴyͯΡTiكNVHC*"""r-)Qӧa]/gطɛF3cJ8&11&a&&&>""Lz=sh4hiVL2Ӊq)ƴ&:?٭9?v1yWVP`^e-l) >QQD<,n2luw#UYeqJGr9 o;;k݉:|t$EVOiZEd*/j9'<}6ZkYG/?죱k y!?]{r8.P."""37d̪1e5rt!/E3(^ͧuX_]lau,PORu~1~9F 3 ==N'v]DDD4e/mАS23 3NLY/~N~85v VNT"ŘH Ou_͢~4e#Z4s`r7Gw΁N>}a:p:!UߞyFm#EAS&D0y|8G㰰?`~ϧ%עR`'. 8Hqb/ۓͽ3KxVǑB߆2il.b,~'u)tIX.R\/өb+jE10t_(uyf"o&7\hXձ,U1bPߜ D2bX)tA2(h)X\Zm{Q."""J'̰_+eWWɝ&suVG _wI<˽btz؉wb٩GfhQn~#oYWW&L;C9I./ѩv'H!עyOInmɴyG(_gu, p.RŊca@ `ἺUIhqlN}>/_Ky4Kة4NlFk&§Y'ϴx8RL3_'ǸKՑNr؉*VDDDw;W}hwY;^ozP޻/?(մ˅=bG]DDD#k]4Ј aǜ`4ߑV4^K{ w!}G)ƴ%:?ARFMXƴC3H?Ks}<8A+bոbEDDrtҁ#G}l㬎$`pտ=Ƴ/ZGL+bCXb,ئHߣ:o_ҽKqJ+#6GxIx 7ٴҹ[&/=,ا^Sm؋*VDDDlk3~x޼M8> !/Pa.MtAR5?u]ݑ[á=bi]lH+"""4uT0Mro{#yHN2xo.'g?772 22 23 23O0ZR tؑ*VDDDlge77U}8eyOM; 7g|n{޺!63wD.6)>EZ @^u3}<4!*|m PAM۶ul[,yv ?U^ʋbEDDV&+i2!V)<X{lwo{\N 3/yi G؎*Vi)XA']5U4oxfe0]ƱdeyXKx/uRsh,(bK tNS\5"""boyϭR,&%,BtPv.=H[]7Pեb?XCix맷Z+5K״:N1Mؽn֭vf$L6i3J۳H8Ex0ոͨbEDD0Z>gq{xAlj]<=/}/_KGаI.e, P.6) ð}RxT_c1i]H+"""k19靧c?H=nqm˛#$D"{ŎT"""`)&Wnnu%8`̣jEG+b;uz%:@4nt+˭_:N>9S"2, zŘb?^T^H+"""iZ'´ouc/]dбkqDlqQŊcguo' Y#ӥb;Xb,PHTO?OTh%+a|>-=EA?M\%|ҥb7XkK^Zl5yQF(s7d[G$x#L،qK8~8S_|M׃V >'Vqk;85"""bזFt(aF}{l 9nuՊؓwbLTWuz%5yS+_{v9ե$㽌Ӣ }OP{uGE{ڿ??8-Z ""3ΫZ*_oEDDg)Y{kulw\UYc$"DnTjǎL2+֭[`mƀN;^r墊*6i+:؞)ϖ$Vdk\X7˜?;[DDlL(kcPO| :p:)Uljٲ%`ر,X s˔)Cf͊*EbBcݰQ UZC~%忻tPnbi*p#'q7j^T*22~xm(!V)p۷:95~ fsxT6ϡ~\-XxpPEksa0k,Lv<>rky\qT^cǎgyf V`#0 ]!fn؛a% [z/Ø95 7I90޺_1bp,u`xtؓ*rm?RdIyᇉgĈDFF2bĈ{67|3a{OAvN;6{l!E'/q;WVqk|_7p^NIfҸNzi7YmiΩ:~1<za/bZf)PcܹL>F²ehܸ1Ǐglܸsرw},^ktЁӧӱcdz6)*)Y) i(.}{k׿fu r`p&dZ7*zGwwϠRx"r~ ZA#4 E+l̙ 6M9y) UVeΝ)b9{ywHM[n<c]GGb1,oqZ:-u،*;v,=sss=-bL0IӦM DDD*ۓe#y7HLSN<#p:5,!!okǖ,YBZ\ӧO`ٲe,^ÇE۶m/~:7DDD ǜ>]֎g[>KB\ձ.؆u.ㆶY v tbW֧O^|EJ,w @VVӦMfС~.]aK;vPZ5vɣ>JRRaaaԯ_1cлwkIҽK+:ztޙF1.SÇRj=|bմ4qɿ\5bONW^/zbҤIg<ֽ{wƍW$˟~PP@ˍ_uFWZTj; -tE'3:Z! ヺa| :p̛O X'ƽ̟?ÇST)n|M/*D2sL~7TG :}na(^\#Hs|=;|GV h)` 1[n8"""jچi;^ZUi'?mk2O'&ikdft2auex4Nau`Dtt1DDD ݔS6UOj}ڤp{;^9N۳#Ŕ{B_bu=bOj X˖-﬎!""RXgvM6|cN^eL7ɾq3[S yYVn'n}͒Mo5ӳgO|>wy'%KZqpp"0a!.:?Ձ 5;ז_͟{8+!: uC(_K=_.*3g5~YJ5lA]OuleeпSwqA`[Ml̘1VG7}1P_^u3}|-DrV2}ᩫ":^\fM ɾ4iøGi}Cv\p ;׺ , ڬBR2;vo$$X%x1΀؞YBoYwVGhi2g^^-5nk_jlU]GD%-?Fu."3ibFu08gǞ,l܃ .\)$r-[/eH1yd#,ٹ<5iaOnp0 >mvӄF%x**M;2 Pǚr/_/2cOx[,ۈq/&LRJԪU-[RV-*Wĉ&""КCk8#VZQqXEpd3\t՝(&vnsU .\n.<77Rx};K̤x銷Li\[H"dj<͚-x4NlIU[fΜIϞ=[:t(ʕL8=zNǎ)h{u⭔,̮3Yٛg3c F-ErIhäN0^21FNKXoH7xg]ʈtiu$9 ݻ Y쳜C]ʵzw(νub:u؏6x`zرcO;ޭ[7Ð!CԸHHJ턶x}^&t@\xW_W3ҽKeZkYK6ѩ7|Z^5qhIvNU#9#) dc8zE,o?C4kn=}N<^-j ؆ x뭷X=ۊ8H޴*:V9:L21O{a8hQ-*x,9سŴ9Gi8HG2 y=H>qZ諬IIGfiM3č/4G*vt9~_~-,4OЮ׃tbCǽsѳ>Dxxx'4Mz}ًGDuT蒎:Ү48:爚b* ^}p4lԅ;k_~ƻu fr2FNq:v.\VsXBy*Cʸ:Rx)S*ŶԸ믿wӎ۷AѦMHXwxC7ۿ!)#c a( a:8|GScuaDJ(SW:!!\J|:Uqָ#6uظhs6i x*8Up2<pcUm:t(-Z.k\r7.Nx_zHVaLK')EhtyOwպi -}ijib]~u8sp$re\+VX*^R+j*Zlyck֬B 9;MPie/t%O5?ZS|ɯ?2}"TU cn 8N,9ghho֯Oq˳|^~6_w9 [*M[8~/\אkݵ| Ƨ_*O|<4[coӊؔ./`wq:6~͛Fc!/EsCi4Z؍6[#9.Gc=zΏ74}(}^j\x@ƒgժIȖm=qb\Ys/_Nmӎ+F.[؏ 8 R~}ZjE ؿ?K,FVG9E@r80qDZ:JbMè]Wk |ϿjucN1 (WZ]w4lk1o8{LEؔd9YD?=>μ6!&<5x˔s gݓVw4w,[S׃g)D.X~űtR^xYt) 0_5EDx<8_ҰJ<,',7ZrGEWF|1܆qoskz=`o\ny;HL$d>s4fʸ,P~|Ku׋]lH{ '%%p """ζ2XE1%z4au{mK`患ԩ:R ٱ ҋo܍<ժjMD.]>pyg~|>3)Eu{OS603βɛiff=5ƙ켸-"e=W6x\vZ׋kN[~ W+bKj W\ȑ#ٰa#GUV8;vK.8XaxyyɃbffw\_.N)"RfL:]y퓾'OCd @*n=Nxłz\6IL'NA!oa:~q{s`^|;qD7KSx8z*ɥ_7nFR-0]6X6oMCr2z8ƿO?]gt +z|עcP$opy$h\үAŬ$7Kt/%3"PɌ{)Pm۶(i֭>J!DY;~zHuAٺEŵz9ǢY~;,s;9u ћ5qhۖ/e 4kę+p\ד9{/rmg{ %, wX(ZKVbNL;%[R<]*B\dUb}fȹ#̹gA _/_̶IQxuL(LEk_X{BAZڸCC0mMK nOgFqծ繤|ӿ/݄|cql7Ѡ>_E=8_i,KZ59KȼcK9?[NԸ)4ECa5矸Ni;:j3jڋiNs["KEw!]2;g΍P';Eʛw ^Ju(żg?F޻7jy_X'M{>\T-7+AjK>OlcJ>yQalZ3O:5uڬ٨i( ~%aTzENZ٬s{ܷj]Q50;qW/:wzDϳރ]V̹,d]*I܅B/c./-~͇5K 5>gF/p꫱mF7qZ<ٿWL4Ҡ!\К,t]wX(MysL ghub>OW0n]@-GmF LIyrZULM~_T̉pr ڎˌL !^p">?M6<[c rUɻ'EO+8omE|O5nz5?< _ﻷĉW6WzE( Waټ-;F0GS己eUSu^DGc>x(ϗmVwE2;u }9 {<-ZBTVw: !Lw!.cR(KoJw8>#45p>V%*%KZY0cS;B$dUR+lZl02}EA;s~Ӝhgb{U##01ƭMyI[yLPL/(Xnj%ձDg_HM-Q9p90pS'@?KLSo Sr Z\N yʛ}E&ٳ-[9--'x.]o02!E/OG|eU n#mWVw/wѮnQrǝAYǷqjWϫ1a'kɶa`ۼ #ٔM=Nx-hL_Zr׬O&70UR9>:ڽ!ñ?9s colB%/rX:u>tdJ_ʴk7PU[w$q7ߜ駟f?~QF1n8F'ŤޒJгAOT{F_UU?w/,(:m a+yÁҴ) onE/=xO֒}08ϊ5([6_BB5<#q-[J?1ӵXB ڵ _@{*a6m߯ jVϙ\^J/L,cbܘ"=˴+NmP_{ˮ=^:o ,3"He7o&>ӗSu+^z%֬Yѣ}B0i$NdPAo<+7FM[q]v_z -ܹ~k7*|74 sJ'$ m}ޅ鲙\a(Pg~gw8SvX X?O0^X i/+`/Vwhϥ߀)aa诽ByY{1zqΥ¡,!3"IeO&"³}^zСCvBq93 VG[ ^o(O=,s>ﶂЍ7wrJdd),fd)LwEUjW}ٌa&Ap-js0*|9<_qmrbZѫTFK$qO9}vNso6- ,ܗdք}q J֟j +˫I͙_{xۍbT^$IܽB 8هd*VH-n[@ !D9pBƀ&|IKUZWAuJ[qYax|1Yn#4_R{F(eVyof4iuv$[UǟUpAKV;䳹kTGK{vι_((O.?'1?IMub1L& 0Uk ~J"@{ٍ7Ș1cx뭷%&-[U Q E0~xjZ:bvUDW^ y*N!>9;пqصĐnT>罩,xߞ]L)HW*{\2X,wEA"LRPi^%jk<ȶn]'d\=/$3|x6wXW7j~a[6Ǻ~SPZ.[-}pW$qKFUZŋs/2oKpjHڝN'}Vp}JjWjUx^6[}?WL4v^ (N'>+VbJ>v^{{GG+V:j^/ntlܜy n|-a:x5ݏ{ܥ<{٫/|?hڴiCZرcBM7NL6P|&={cGЈ| BBAžżq3|{pVEy?4h鲹4ƶv!%EVs@?<}s~A\ Sv^{EerOr,]yV^kjo|ϳދ{qC5ۍ͉I(~K;8$qI&QJ?5F1k,xg}Bo1 '931b|O=ҳ[EfͰާ'yf4Qyi2l_N,+1skǴĽPMb߼t Z,y3X> yw?Z11(<{a`j ycXAlE/ⶄK9T-t"Ie^=Oa#GvZ^z%uƓO>ɢE|BZd׼qbiV>@PԪ[7کhLwwRdeZ;QV\Y(ŊZ̕ }ڬƍ05l5П NDYk>ۺ{97fIp, [SB_n| %BMMCv(x*s]jf:A׋u^*o]Iܽ0 \Yo +V@4:t@j8u/B%W'.2h wj|([:Wr9Ѵa JcWS|O+8?^T~}Wfj{J+*8ծpQeOٰ\*%tH)I}RF{rBDFBL ZHjT4`ݗ(YJU-1 s }ӊX]6w4Lu]*=uSź).̿Hw/9r^=Ç?Aƍ}BozE۵=ZdO )GhWւ0vNۿh+ zXn"{pCt4?ֆPKL4]UsB'{)kks3fL#D2\L< k&jO@|Z?rlb&29NeP=ʳt0`2 Nr0';.5cS9ÛݴX׈G=?g qj_Р~cJ؋N-.MJb)&#(Ldza{6UKoM۝e^nrN?;0Dƴ{JZ~ CӉ&ܹsYd 'N'::5kPfM*aIQ(ʌ;w[L0dE[?7>%%əO'm&npjuҪm&L  b)7JmނrwNX =al<s^ڥ[QXJ9iP+Uઢ_ߺ ڙ?P/N,q^ .{hu0m.\惇p_}5w3T^"^vuҥKɓ :h&L@PP&LuB!3y'7Ogӣ^4@\[gF3~9Εu?sӧ.deK08m3/\\fܦłϽNBLُ^ZU˅Sj@o[PLk qWCqrV~]mn\EyӉQ2y 'qץ8\RFž}Xj[뮻 0:!.&*d\jujMlb~~D+b_(A>4K7`Aڶ=mJ\-:aJ>6kN Y ISέካy톋g.q8pŲ-&ݐSd]0Iܽlƌꫴh"k111ݻBQ(sw̥W\zDZ)Wii;יKE*Uq3dq/y/u;\tt8[ eVpuJ?qI `,P{[vEL;wvQ:#6ˮEzr]9O;ˌ3)Wl;6A.ĺN E+P~H&̠u1:u{ #e>Y&Yː@O/-Z6e*K OymWzZjsyJ\O>/L )LL IDATN.n7Ke].qZjoڒ%KWO~ !yWn{ _&ce\}4OI;2 >#h"ogJ^\0,Lmsf}Fo,m^ (eL^{H/i(֟?fٽnE8 eB?K;p="RVAf?Y*/D Qe<G&""޽{?o믿Tpys`$yFʨO'1`^wx ]&^pkvT^4Y\E3Gה=$d<e޴{O^V%Ԩ1nd{އ;cs/jwe:;Ʉ~T^qIq:dqzɈ#V}уaÆ8B!n ^]>9/v|;>Iml?kapMˢ'cZ:y:pCMYK^: Ns&z&X9Б<+gӢq;v.0AQ0lVY*/Ȩ2MӘ ѣDFFҵkW:!@_Y8Xw 7pCx Ԋ"tVpʨΔ3m]=&*z_e_OߞSv[Tbae{..7-OU066΋ƁשVݜxF{lKq:$q/%'7v>̿gҠR95:ީ@i[NO ˊ/? Ux徦?aL36}ByGxٹJJt,wÆ qPZxHJBݹ (\C#.]{H+C C8z6+RyqK~ERRBhAX׿>"i?vTϝTX8]3 SQ؞ Ge+q]%80O?C)*j(JLlI%uZ (^gaٵpINFMMCJܱPe=k{YԦ&/;y$Ctx]Qt]AdBqy2 ?Wi̔S:>`/> "=MT%ٔu̷ޠ{˩zG< 0/_Vu aaE ͝I6_Kc?q5nw˓Z# X֮G=twڅ*za>zN@Xh?yVt Y*O3u=!"=̚5aÆqUW7zI`,޷GE/:i߽Sc,;gXւiFtHUͳY1 %8˯a<'[sP0K&3b^x ^x ׶-S%3zVHoC{ŋqDr2wł'+[b>y1ZW1L&\(5z]ݱ]KoK{(42"@Ȭ=S3 `\ :Fg'ؒpO'iel;c_ nJd$> slrPg-ԭ-Vj%4RLb}, ~G=y ?q=VLD6O'V態pmw*~R0p,_͘c"vSKm,l6$.k1(MS΄; ͏f]2.$^6rH>sx /*/>gϹ|yg(;orքzx+8۵AXsU̞K{voBY!s Et#wc{'ʶcZs\Jp01n\3aQpnNLm d`Q:t޽{yiذ!111sev!-p,u(JR抬]eadz_"\q텿FQ hV;:BX;о.X-Y:t~twX(?{|jzڍ7jʠp=_RzAƀ~X] +V+K_^MK7Kq1Kx؟빍SkQnԕ+qߜJFj*'pgpNvp2.\/߿CBުUIZÇ>u(lZo"b'Rm|M|ejr}?m6W͋rwo,_Mi\q,Z~ݵhoZV`"]ơWy*2HܕVpG&Y*e;w;vйs2Hɬ9].Ղѭn7_?Gu\LI϶Aqw+35l 3͛ctW] 7GF`rcǰo nLPy|?_\ǁkmŚ[nD:"}Gq{G0}n2*vlsp8JA]QnCY% u0+@+_3ev񸢪ccl%8'1Q2CGs(7]cN:}qgj,:E1P2r`TZ wIדI{50 V#"OVmp۬_8|Bs=+qHB,\ì$İrJZlILLL*I!ݭ>x7|;?C,_S-&|d Ҿ=`m(6 pvaMH2/df9H؆u P ,?.mj{1.nE;QN]E9ajU8yaeϟ5k^tay{ t0K#\/8q"j:w!e?_feJ[*+$Oq0)od"mYڴ}llh5tn῜1hV ?W^S_( g.(8f:bj]tnrf-̘(k;p/ )h(;`zuo_@" ?3Rt$'11Ϻp8ظqc#ur:)\  OPkD|AԊQԫ_Z{N`ߴ |2ki8LK<U#w?Y*/DĽAzz:TͽDBB}t | M4~/c=ƛoɐ!,̪q/x&E|A)T ŝmWm'rd GO/Gg2]WXo٧ƁXV>t #JVUyw~"/ITv8rs̡W^r5j]w~!;vdĈ<|l۶B_?y&U8653ǟ9Ssܥ>!15󮯣 \qݸkFUQ(vW9!+ng?̸#3"Ir]ʕ+9z(}O?eB ` 5N5;1@B䎞~PtϾ5a/LsQ,{CIɋtaػ$Kc*0wdzI&rn:Ξ=:x3W]uEcbbp82.x.5װd_ʊ$%i䝛)ԗeR KEV2y k㦾': ! ԡڲ*9]3y}⎮H.\/6lXc3fdsVBN8K qrzt+gá l<דLŪYj؋V[ѲzKla>0!4jIèT$]o r@VaƁZqX"gIye{e͸+.3"`@ݮ( zEf͚,J=%//UV]gg㡍l>fuQQE1p޸ 2`f̋S=:ZY%g0y<%=Z秧S 'N_0.Gr\T^[C]=<ԘkٌpAvҼ@IܽW###8ydNydwЄ3IчW4gZihjTq;rXO;vN+\]Ү]GŧƐ1?A:!ju~2۷((?SO2_o*ɿ{A@ƁV>TVݼgEw\.0]{D]!8u'=E0Tu{o{\wc:>>ED,OHRpW]F8]VmԪ< npq!~Ǽʚ!!`͆a-al) !@Ry64'KqIw!^Oz;*:*:<>LR=4C>WK㭟O Eݳ-(9{ KQ-}mϷ򅧍ӎ]TQ<<Q]qwQ Ew$q2&*J>^\"+W2D:"l\gf\;/B߁l(ʖC,="#qy!zB]+ֽPz!@@) ׉Sw$qBQl ,ե2Plpr+!ԉu4_R(ϾDZK%2xֽP.Oٸv%zBf};LOIE]!D$&sӴjSjպfjc3guoB ׀`.Y"sN/&$ -T8!(X*/3"I. à~<˄0AWB-w:B1jZ:_&Dȼ^}P,-s T^]6I܅c1Q3ƯϜsx7 ˧wZnaB#=Wdbq]oF[Z 0iXsN_ Z@Y3d@(#?QFqk쭾1 IDAT'OoBë|K`̶+W`k {FDຫ_Hih`mafd/tO,%܆$H.eL (88~zS!:TQ̲%igScp|Z1XnIJ/YϾyhuc/:O8JV;#͇EBRN8#܆{Cҙ$>!v!0<퍛erC/,c܃i0ŷ٠/&Z}vayB/O w,L2rB3=/~[?^z'OKZYӒ`)(i \QpDOKueMwQlY_ •5I#̸ !(Д-SxcpԈHTj5jq <^Uʟ.DMnB!r5tP&[>"*,eo{kZ8K~)̻s^6cfA{ePSxLV K, E7qBҢ=_*T^]!D'2Fu8?ѡ  N`ӌQ30=uV;RC8< )g w7mØ1fWbB@d#͇3Mw!9~g~uҿi_L<4]oKg L !i8;wBF2c&~DD߀ru00ZlBh)\*KfE]˘?eq0ff兎/(9Hb)u8Sv&hz XrvCQl|*O<@V@q8jp]ѳˌL !8o|5S)<;b RLwh=sՍżlLMTN"Z]OiIE鵸"`Y,=2.$B\Ƥz#EHG|QnxxPv41dTu{!uWg.e2a}b] dΝWώjkp }0jTwiދ@Q0lV _V"B s6o_~;rXe&3[6ٲ'|1 ,u,pPU,]An&?r.؄"V+/ʻ8l !@w댘?Uӫa/p"Ye?&v[79z3k]!M&32K.퓿UEN^/PcBfA;8.$BQ~ -} fvxmDԡnD]b#cQ >\!ۏmg3K8Á}v؝g''OxtU5S;Eᄅ\INGjݬ3'1A&IB°Kq:$q2(g,%K.ṅϱRVjH_lL=MѨWzM,W#-6ZTogd On]&22ڱ.ƹjz28%-Sep? d>_*Kq:d !9>ǯ Ƿ|Lb 7Sp2='k¯ =106J%Nu|~_{0mʽRNW­@(R1"<%i8;se%?ʗ/!Kw!.c2=N_~"&,q7w*@P(¢ӑM6_>O4.}Z-s@Њd~y'@Q*nqq:T(MBP+S2^U? {HҰrC>C_Moeo=.ۧj܆aLjtD2p7`^wڧI;siT˸<*\wC1|BQVϸ. SR !D =/v|ٻߦ|<5:zEرG ҳ89&dꏸ%8ا !De]0I܅&o̧?et4+\( yח, 7 y+wWlO?Fxɳ^wQ)-$t|_EX [pΜcF*߈ٻ߻}ӫ*""Hޫ 4PzGA޻ 'EE޳X@n69wsl<3|K(]ytBQh=+6!$Bb+w}KѳrO֓[|Pt؝E1x>ޕ_~vǷ݋BȐw>SC77k?IF <[Rk`=O^H<3=Bx+I܅",iZӊpp8-O>4})lƛL\Ptؕ%?/abt~ F?~ѽ]U0s^'6 b8sÏ7eˀ08KۮBBf,"$q9~;ż&7Y?ޗP9nyCg/LoRҥ\% _di y[\LXFwF8ur!y= q "T M'[8j !D6-q^FSyW9/L2as輡3+]&ӾR{1)QKP:%kb;*M@RnBb&wqNW!X1l@|<_y:V=#i@#ם?ïѿW_?ɩS;U;SO#=bޝC|I1W$\E7l``OG!䃥6J#DBdѿU|zS""$^w~7t^ߡHnS9 FO ,I͒5)TNj>NՈ.[8|򍱔sj%QX*߅"?Ry;Ry$qSPg7d3(W9gV?Pt׭c10eڮmKbF"#ӞIQߢ*UAOS"ZM?DDhq]GtMK 90uۡ`Q_ā</Wl6Tc [ ! e,ΨĠ5N"$Y8w_/ϗy7~zea֛=6jDo>;UW፧ߠn<ۏpZ؇>:ii$x'XzkW!l;vq^MWBΪl9/VJ":5(^Z5Jݲu1<]"oo|Ovvg02@JՁ).G*_2}W ў*V(L&ݹ ^NWQ?k[t|CZ=aeAk5x#%:/d2vRG>WNއ~]v`|΅Bx s{&{܅W]Qh3W4赲-;~R!θ{bqp‹I QWSRi}-[.'!+*:76/cF\LZ)RO=52%"MD 4>1<GaRX^87qG"S{p^!DK_$13 m7P̿UmPJt],~yqKٷw'9??!yO9H% QYmǕ8-R6/m?umJHxza^iyߟ8Gqpsgc,^Lw!D@h*ay3iJ}Vn%8 m6AvY(b^Cbt»I ! />_!131ύ{h2;VxG0~*+7pKQ9|GO!nbrθ+X88$qBڟe,Fd ԟBRW5ş~Ůݓk6l"Ȝ<sϻO!s8qNKw! R=Z5|Rx=?.uA3UAI~ cOX3?$hq)nSP^DHȫΥ򊇎s.3{I.jucW2ה .!ytJtJHWPGp1.BQ 88ow$z( ¬zr+ϓ=n̶Ox/Kt|5XMx,A]`pwQЩz rO@@ŁNӡdx(qpϛyCw! =N:Ѹ|cONҲrZ-i'owUX0׏yA[PQ(]jWB ıs'O!C5=xTMWR2She0hO ȧ{ _?W/k^ mFVK g3'5g*>K_z}QW:ӨфKF-A BTE"G$z^ߖ~\JW¤3yz8*]i泏}O=*YQZc2W5\.j97=#=Gm('tX2qSW=_ L9=aU{q }>'ХgZ|ayw$r5.!sܥr2!6[;ߢcQCbB 77K &JBE+=;u5/'Oh|8ӳ|clvΞ%앁X_q{9oG!D,NgC]x1^! 1o(:՟踡#ϖ|1uxz8C!\eG:? ,Qpzua͖LqQWn=r-V)agk*s>.%]ڀ /]! ox=yO@@ƁɈv@P%q^LWo]IBM d^yh5yT^= }cd_~I/byA[.RxaC1c^ qC psZ+9(af7> \|KH$E;.ؽ%4N!Dah0L&LK޴}͎Gx/^!DPtЉ߮ƚVk ti &1+k4*!,$ Aj>Ii<['9?-ZI:JU+]zQ*,xp"Ww} !(L&TWU,MW 9 70(K۶ᝡ,ė!#=Xmch=B6CIf;7 nK8v@+ !Rf3Os8Hq:$zCuo0,<3f5si+llb:tuVV sƤ=m1\k'UԱBSٮפ߷."X~l[贾k_˨gGɾ.m?)Qg~egGw*L/Gډq׮|O~z=#q @1xbz.3‹I !<.)#+rf5Eˇ[:ʥ ZVlӞ)-4{wՙ?VCBQxw$BbaVrej~^]f/a1LLߡHNˣ=*I{!^I80{gvI܅]1\?}(ֶ^˳uYۗ.hy Oeӎs׽\c>{є(Q !(@w/>d^#_z\撤=.VCF8m4LsěG=GH.D=="aRM\āpʳ819%KW6i4^Zllp\چa۷xQ~/ kǾocBx}y|gmgܵ%(9bwi-DgM?\HܷiVIҞ)Ҥ)at5H5q$q Ry7 X8~ !򜪪5gc+/*VY`*i&6DB IDAT3)5l "E==*!r}&3r($zyn¾ ac댥QF.i|Y0׏x6V+>d5C8n"h{[!tw.D"O-9ệӷJ_zT6hb^{#.\fE`>>e{BRC'3›I QuIyWhZ)#6Nπ4}9MvIp*%"`piw CŶk u:"-8N.o7qYNw$zy=bPo亽'ttkU-LV{'%_ ݉;yIwt4`+Dq%"Ҭ1j'?UE?oa#>(֣~;B! ݜqwsUyqp\w]B,/gU_;΢cxƛs_h8"E,XA`9+7IKG5ٱQݽc}XK&3g9tgϢ?;hg#3$V, IMKoބ+f̾L̮ 8N0y{]Jq:$zybĞ^n:6 %,/b }{h(jx(jh(jxɈ-_ﷇa߫  )ڠo2x h7g! XAr JpaaY Ԏԧ ypXziB:x,bꚚB!Kh4F)׫+z9Nx/I܅.wqϏG~ՙ-`XBB.]*~TnZ*şch?#sۄ~0HDL|&h2q[0t;aݼøqmӃJںJB"+W]Fj4DleJؿC*yB!rE5<] '+paQ:4혫v~=m0Jbc,!ySq3~w 7q-{Tj5VmOe)^qTc czčO1fg&\A߼%4kuv#tEC-VxÏ`Q8f-QBB\B!\L5P}DX^Tuz;Odv49C)]Ʋy<4BFҰ>Д(Dl7"cǰw}XQ{`xFƦ(^ +IiI@@Ɓj2B{gܕ3N _j2ڻw/==4iayB᥌F,tIs'n=6*Dˊ{po߳"4JΒu̼=0G*YY67>MXkWQuEdvMāp8q(n>F.7ĽPժU0D!fw{"Qllߟ0jH+Ҫ]'Ca;nS!(tLF'7qw$z UUQUnD [lh!qן:v -ӦcfvK4[,+s]B!j@UV3$z 6mڠiӦ=zCnώQL]Efoǚf-{c\gf׭Urkv- m;o!Bnjt6TdKx1Iܽ\pp0o6/L>ǏSF >|+4TUeȎ!\L5}i 1o0M[f՞|ؖܔL@o݅esBf~Bxg}"5aG_B3{v}C:$ā< g6Tֽ} b*UH hʗ/OժUٱcܤI[/ۋܸ^/X8%8&Ӿ5fB \Jt<йU(?6fl?~A:{כ㷟>}VǑ˿ȓq濋<=y\=xnSjT%7~oII -[cs9U䖪 6f00WY/暆C|Q˲<^ځ=GhSq|'cۡPBQ:4@ r8BqK.~9Fžn0m&!?F> Y*_r7WTU_gơ5"IZFLu[c\+Nxh*w[{:oaY%4q !n3籕*mCsծB!lwdkr Q'{+N: *sq DWY:I;v;AG ĺk;H}MW5I@@Ɓb2qRy. `!csLA[]}/7Y![ <.B!dBnw,bJ.DȷeI%s^rAAԭAӗ3r?TMҺ%IڅBe6;N?_iɌzTBtiF mx.is˜MKDQrߞatq hO}cB!Ed3]~VRyQH Q)s?џύvI?ֳhO" j"x'XQ "-@@8I808H]l /'s{Yl!\e[x +=`t`7E0='BQg38nI QH?8ꗭ ^pIsgq򄎭w5f'hj,b uANdvMāp8U7Yij%M Qŧycgz3cqI2c?^OJ6#c|}KB!\O9nw$(d6Wzk s_K9(m:0d@# Q|˒`4M!Bx)6;%M"XB"6-WVSd-֟JD@Du8`|Ȫ17Oym#:tvAB!󃂒twz"OH.D!UҟL{&MC(BD@.ݴT7F3KsWf>GźkhdGO^*$āYUޭ3v;nO Ť : 7Pt&0]I ѰI.߀㮽oK璱 !"9㞙>mv9Nx=I܅(_;΄X :3O#mPr:a==;`4lCw)FD/ݎDJ^2T)TՁ~[?p`{ѿ9$Gc'k$ā<*cO]]WU\itI Q|n&̀jQ,"J؉f */',q׶|J]1?|m|kM/p>5zREZāp8qw.Np`>㧒bk:"ɰepiCR+z˟b~8xM|yjVYf=q\h"~-y}sW_` ؄BQLw,N$,|ǎ>XS쒸 ',D>2쿰7 .='I!.=r/qyH.%]")QG"KؙQB&ȕ~'Idcƹp] q $}&gutaM!yՒ\'KEA ,D;}-ϖzby2yzv}{lRvLl-{뗋7LzQ4IS]6F!B0&aalCcp{&ǣO.Uw4M-9ϡ[׎ kEoꔮC*}nN1&3&k#Sܝe:q#f~7(ꕭ[ϼ轣6{%2 ;ֶè52l˩_:>!#z+.r+P0!!Ղݎr*;.;{e|0U2~!Bx)tgϢ9=H9Urܝb"^ci=2Tk*M7jpT H뵭{׽,qХC,oP<oB|/ c?v}F=(mr vq{P %vq<p="-@@8IpCUy MF-i@W ``<~㧒ny;="%cI|稨КW|A%olHYִ^C5mnμ t^.&ȫU_VZy:LXXd?6 鏿qDGሺz-5:bbp*R4eӑ !@1Qboyx $Vc;w#aԧ;Y*/ EU %F=~ 'Uf:=ډ>U?Cm0h _/}ztyCQUbx^Kni }E\|>Ob. !B䎥S{'O㋛V~8o@F}$m\x۰|!t:vom #wEn4_ٜJs+6^Qk=v2eXz Vڋjvm[R|lckLx[Ү!ٳ$B!SYgb;۽࡜u(KE , hy#28sUVcyώ~F/Pܿ8ycNek۰>nm{si-+jQZTjԲB^"Ə>vXB!nt׮s :`{}O%ilwGx7`Q:櫚sty w:l%TUeܷg$/?2S_^Jb]uc=M7U[7dd_Y؇ rвmH%o mz&]!B-q8tItwh;ԪOf;fGK#D(P6Lm\2-G2tܝ`[m.[3=ُF쨶ȀH<5 8cB֬!!^Cg25?FM1}DpI m[З*${H'n 8ZC_e'qWUM^Oc/hϔ|e-gZd5ַYO%৫?ݳL[&Vb~n4#%-UaR3MQ}_m]4(mYK56`y=^A !BϥI~NIjTr8( /', yGWit#>lm {M6i}'[ڬnٺwl+!=&+pa>jj控h - 4Apb5l\k&5EvL-~ ,v`ٶϖl#9OfH'n MPt>wE^_[%q^N"Xxi1x`>Җ)Qq6@MiuJ?~?| u%.j*du>-UkRS:H%>NC\X gO뉋ՠARi1Q-e t5W>V B!\@1P3@U{x}jhe3$`^?`t;c댽r@S +^^˙3gēfM叿umQ!Ba2V.YtKFSl6='tCܿ%`3m5TƙkhPé3mۋj4`k [~蟪. B!}n\B!tOB棿`m>k-nG6gmVߒ /',n6uF>l]ǻZV.a\R1i& [3|e%o]>g2꼐y^nu7g?F PgF_l] 8N$S^ǁb2v?MYX11ۋx}]8_!,رE>|ˈJƣ0;c6Fυ8Vw~aq0ph2ݸ^7$5- ӔϚXQahOY!%w#}'vcb(VAh>)6焉'D:k~_ìóQk":Ux}c||YL5-UYaMZdq Ueo tKaL@2vDi9MWf1qWe( $W9{ޛ{SL==ץ* y=ML@% obNAZK}4"r!oe[ ~-Qg2<;E_5iwQ 1 MBDPaBU!BH1`pWzgbŜr*>{ϸ+zI{w^#ӖI뵭73̻;sJKN!=J5+=;гo #&a4f]ۍJfӰi:׿([?jPpѠj4X5F\f0|8k%(=/I!"3nSS,ߦts5qMw5lh+s IDAToѿzws s|O|3"xa "̚kx*,-ZCajX6?ATxa[]^!j^=Eޗs 辱;}=gnwiPKo዇i!%Kl'v; x%#|e*}rgBk7o~,+;y1ra4bbUg>iK[H.Bj۶ݦ+6%RRtz}̸ o',jU~3GoҳrO|>d23OZi@o]ۙuhCv=]g4%{*34-L_Og,7[u6 йnGNLMꇵsF36hB51DȬdN͡9y,@@8I8N9xWQ/w7Ɍn__)Tv^\>B%:ܓ~Om/s4Zވ'>j>t~3GQl{D?& t|0%߁oz=acFw0|ͥSw9e"C=>oߘH8Nw~]Ge5j{|zrMbna0w_m)z/I cFPz8gOX*%k;it5Ea2]\IQH8NEҵ7ˌvpyCʇgyUHMQXg|9yBO,M*ma[ Ŋ;x8a\cEè3ޝFDr a<@K/ddX,(׻t8TuwJB!D>+_YfGU^NwqSLz yϛ~]8O|Y؇dFM3<;-\oʺ9ꑷ'K>a@}>I3(鼖?| шjr`4V2ŊUcH8N C&@(7+[rnKڿ`b` L&=nӈ(vVmŋatl/b 3g?0zBs{\ZCڎtB!7*V ml4߻,BEKzzu &3bc4mί_OWS=Js oH7B!B\6\rK U@~tAK!9q4hq6GڍyD7b0R+*ޝB8yB,hU,M8f2!aCg=$\a<'q @@8Iq@=G){E!Q,nq;?3!dCJC $ZRٗ}Y*"BsV+"XD@!JZ6 XMH-*2G$,,3y>ΙCysߐy~ncw#4͓߆M zg-"4%IY E=ӯ,֩3t/453LKӊ^GE>3WζʹCvK#E|55#9m'Oщ xp*}Үj1M Ii#2m}sNP?H5|T5e1Ѳ^##,N8)3(p._ѿ (o*v]i}wV'R~M+8bw UR"8|;QL X%7(`*[]sY8wvS~=)`G&&F.ޑw wfPM:ǧ9gjF Bѡ:XU!  (G@<_şn92d1\ҤP8Wdt 70(:j,jy<@9w!۹ 9hZ tSQ*?rRYP*ȈUZ*cpp1X5ՎUb<|;SD<r88 wUcQHʑ'LttJLp}1؈;qpuqY*k("P> `Ɉ;|;Pyê~$HޓVL xN% iGT*eUy wUcQHʑ'lM w+?>SQ:%I =Ty w^NJ ><>,F7H#TAc޲j,y<@9w偉{TyG+ V|<#~@=-Ƣz# yWh .P<|;pȿ𻪷<|;p*_A+Me#V@S+(܁z̛VE! (G@|$wފӤIGr@5SUe/(t*-a<|#^lʕ ԭj;Z~eMd+dqRIE@֭ۧ[+ }/3UVW<">,bǎSLLG{dd$5̚5kj;$Hޗ&&FA6$ !dq=U@! (G@"P+%x1 w/UzE[{e1w/\߿_ԡC pQ{Cٳt9N-_\ r8J`۷5~x9sF7orssiӦpX{LoԩS'͘1C ` ܹsUPPbh/**RZZBBBԣGmܸ"FMشin6* @QQQgyFcǎQ]yeffQF!|ۢEvol٢t'-;;[:{x m޼YԩSCZ|"""$G]9?sRRRk޼yz뭷TVVd8p& KɃO>D+VСCrJ[N;v222w:|,Yŋ뫯R޽UXXXSU?5k˲̒%K\mNӴm$$$bd.Gh3fȑcJJJLtt͘1Xe[#f>}\s5駟6-[4ɮmo;| 6O?t}ߗn,2~[M7dŒ1䁯)++sh"cYپ}[9s1ev)inj: \'O4N}5!!!ܹs &???s!WW_}e#.**Jn%O>3gvE'OfwJzcǎ)##C#G$9QQQoپ}W^q!˲˲*Ǖ=@\\rss=ǹ~I5wL0A… 5l0m}޽nRqq1yC_IIIZll6R188XZ2*[S W{=0tP={V6ө˗+!!ACu2e}Y 뮻<'&&*&&F[%K$I 8Q}㕕ڶmեKeeeo'|\E׻_^6M @=ح=''GԢE у@pZ}jLJJ4 .4[l1Æ 3f۶mSO=e,2wq6;vpꫯ˲}gmf? ׳bccݞn nӸqc`}v3ecMZZ9V^ml6IJJ2k֬1YYYG56~~o4&--XeOn233ͺu\}.9sƴoƚ˗ 6_&448p by駟HӴiSyf;v0gϞuĘΝ;իWUVN:a k zȌ74iݻ 6vX&IIIf˲<^l/6:t0:u)))QZlƐ 4'N4͚53k5gGիWo4lЕn_ʍ!|O{W_Ry~~>|0!!!&99ܹE<Ç矛Pjh8z27Z(aaaaaa\]twUV VÆ աCi׮]GiΝYYYlzwk!*iҥj֬N>]e={jԩ\l6y7jsܹsK.3fڶmڵK-ҧ~HJJeYڶm[Shhht9]{4iƍWiR5jHK.tR:vGxr-z';t(cY= IDATSzz e˖f$oY'N?_֌Pu޽V>_ɓ'u=Tg߾}*..VBBݺuCi5~Tb̙ܹs݊ ehWEEEiwӲeKs=?ڴi iF˗/޽{5dEEE)88XݻwL6M6M999JJJRÆ ,IZjn&5nX#<3gθޟw}W۷offSV$U=U~ܹj߾ѣG{r_qVf…8p쓓#!!…aT\\K| wSZZ,%$$誫M:UG֍7ިui…ڳgѶ,K7oŋ3hݺujժF}޽[ӂ qFkڸq~2d6nܨ Iҿo 4H˗/WVVLKj̘1͛7Oڵ+VTyӦMկ_?mڴIgֺu딜vAR2'NPvvRRR<u]`5j]߱cfΜvBXXu릵k^k*y;9sF-Zt:WÚ5kƏ{ε=!!A\s-Z4I1F%%%ڴi4h Iҥo*..N4qDEDDh֭~{7|S*55-SzL+]?cԽ{wizf]tZ'4k,7NO?+뮻Nz\.8+{n} ݻw>}w liǎ P@@{e˖ #u #\U1|ӦM*++ӝw)zEGGCS͓\Ŭ$EFFpo$+++K R``>SSS'mC 񈷠@Fᐟtw??;;[Νӈ#ڻw֭[{,nwJxPNG7:uꤣGK.֭:uvyI&.P1y7n`}rrr$Ik֬]텅믿}FDD~,˭`]#ǏWYY^|E}-լY3W[xx[2G'OԴiܹSw۴KUq{ttǶ&Mufee),,Lڵ￯믿^2ƸfCyve=zmԷk׮_n$effꫯb.ͦ#F(==>M4>ݫ={hٲe\X~89qU. w*;z۽YYY~޸q^xYRiӦW$Fj ;4i6lؠ4U&55Uv]԰a~7h@{ݻչsgGň#ϯG߀gbb믻.عsK=#ge:w,˲o>ޭ[7knFhܸqj޼k.K.r8] 4P߾}u!M2E;v]wU\"##[jȑ k׮TPP{WT^Գg*YTTO>D{E?*W^zO@~~~jժRRR/z>c o^sт t95o\{v[AݲJ?Ν;+''GӧO[o)??_?È;u#aaaaaaaaaaaaaaaaaaaaaaaam0IENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/original/graph_5_ex1.png000066400000000000000000002213011153663664300256400ustar00rootroot00000000000000PNG  IHDR1sBIT|d pHYsaa?i IDATxwXTg7:tKl*vEE1XRWEk4nCw׶k `A; \%y99=O9("H$uĄHpn"""""""`MDDDDDDLt 70&""""""&DDDDDDD:Hpn"""""""`MDDDDDDLt 70&""""""&DDDDDDD:Hpn"""""""`MDDDDDDLt 70&""""""&DDDDDDD:Hpn"""""""`MDDDDDDLt 70&""""""&DDDDDDD:Hpn"""""""`MDDDDDDLt 70&""""""&DDDDDDD:Hpn"""""""`MDDDDDDLt 70&""""""&DDDDDDD:A" <<\ߡTٳg @"wI#~~~Ht.&&-y4i[fyבcD!!!H$8vbrqqA˖-TW"".KKKR!н{w̙3ݺuSOW:o@@Aݻ_8y) Dӧ ...:=.N:SN_uzmN<5} ӧOG\\Ν;Wnu1?1114iU:4=>^&MBhhhWF\\␜ LGW>//=Z#14&DDZɓ';v`Νؾ};%&&?ǏcŊ={WšaÆjuɰʗ sss}Qŕ]u<{ GСC~zm1}]4o\'55aM6*&!"'&DDZ (EGGc„ 3gs$Ou\_vvv|ꉅ7n܀:w>ƍѿ pB Q/O?iiiѾ}{1@Mcҥaoo{سgQ\\  ۷СC3f ӧO#22Ǐǹs`ooDiӦaغu+&Lt[nׯ_RͅЧO1Ϟ=ömлwolݺU1"gժU8q-Zto>ѣRUkO$"ju(ػwom6lA]]]e bxxӧhff&;wN|(8m4rggge˖Z󨋷2_}(w)={MLL(]XPPT _|}}EDTpBQرc*=zTA\hRyy\>RTlݺ(Hݻw+DA~*ثW/#::: 62uN2EA\`RDDbÆ EWWW޽{JٳGA裏e ?T?22RAU:DA)SW׶^Ǎ7DCCCI&充(Bxam?T^频ثW/c}ע ֭[tnu}]Q1**J<''Gtss^{.]DWWWӧD{{{F}v4iR3"Cʉ֭[ AHH ǏD"+wx LN:)m[l6l 6bd2][W_}GQQo߮(?~<>}zdd$^m9unܸ" @iۧ~ 777>|X055Ulkk<{ ׯ_VR* ).\P5ulذRC&MXbEb:t(T`bƍlF'O"%%EQW*"44^}Meggc۷Ҩ56g<|Vi=nݺ?'NDNN~7hѢZq'RNDoV!500#ٳggϞ{E@>}TơCoojX\vM1WS)))x14iv|lDb„ Xd 0vXEytt46l#Gj| zXw޸v@ATLƍ@穿,%%/^? T`߾}JegΜP:4^]l* 뭷T޾ M#>>@=yYǎck׮8p?Ď;߿7o ۹s PPP 2tPE̙3q!lܸ0uT3Z17LG־O<r zi>:u NR[܈# ^ "qH9YYY@+%jyϩ L&SO*<;y„ ())M5Eu UVTMì\ޞIIIgm浦QѽE?8˯>عs'Ze/^3g`nnwwwEXsMyyyaÆ8s d2Y Q\\-[E*+Ok佊oY]t T*ŸqSDEE/ą Th ""pamm+Ǐ1n8>Ԩ:єf̘;w/P!33SaʕxƏk?(""B͛ckktnnnؿ?8mHNNҢ\dddwy*83eXZZb…vvTZUekk Q~-^ǻ CCC|JqbܹՊ?bdxbwUyaԨQ8|0V^ [[[=ZsrrBPPN:իWs)x)̚5  BHHu놕+W\Oy4ru9DDz֠A_cǎE=Fɓ-[O߾}q 2ݻw|}}ѫW/:-Z8X{?8?G~'N޽{pB:^wz¡CгgO"##۶mCq!c[lAPPڶm A0|pmV}aaaׯVZ!>>֮][iڴl2o]֭[ؾ};|}}UzaqF3o& wwwHRܼy111x7~Pz_oߎ@ 0FFFh߾Ң]JpuuŢE_]v R<[4nXvŐ!C0zh8;;̙3 ,Yv?6l@ff&>Xf RRR0k,ٳgqeA8q;kNDGGC8q"aoo8eː ˖-Chh(`ȑ| zzkp&J$ϵ>}8l0V466[j%Ν;W|Jݼ<>4i"D<[T*[Nիhee%NNN?O>U٧P%صkW]O?;w 44o._\#1&"""% ###t;<<<Un"""""""Z5kwsssH$GرcH$H$sN EJDDDDDDa]bͰ縖ŋ6m7n\a=""""""yLk=z 33CPPP-Z L:@DDDDDT0E4NHHUoqR"XZZrrrU:H*ᅬ.];""ҡ899k׮EFFC"""*b]Z XtC!"";|0V^ AI&իVZ۷o;<""" ͤ"$$aaax.FDT{,Qq}C 6TT8PcݺukXXXT\ӧOǺu0e*Sg> L "۾~cZ&((HApqqAjj}A ""y".\_~ϟ?UVpssC``ݴiSl߾*DQT$%{t>"""&ܵGD .… u NۿbHKKS;s5jwwwtǏWVlFFF:'OP$-9 N%f_l{Grr^c֭鞇3\<+Qv͛7QRR077WꡖuְUJN/Ӳ:yayދ[o0p:vRοkpЭSjk$ \\\TUiӦujNt@p $f>>?)c_TT<==^; n""sR)޽vxgV9r׺UV011hOF^ƖʶW*'e<==>Q`G]0|\~]խ[Əvss#ֽF ;w" f:KDDń aڴigV7nG Gx;xcgN\L}1&":V'v\`MDDTHU_,IФ!8$d$9*""JKKD";waaahٲRK$&DD]Yu9,, 111*o߾ؾh"޽{5M<~NNNعs<)) ~!:u?f*hv`ee+++ >7nP[~@֭ajj 777ZJСC1cƌ*u ;s;[3[8Z8"1Ky'cۓ&O|744DF0uT,[ 9r,>>C-ХK*Ӈbhܸq 33>>>}6[nYYYJu-Zy!88رc1w\,^X޷~W^R ڐۏo"+? =<Y"{;wvG}ﰔ*-6labbRfjjHcMTOԵjm6)GGGcĈ:?<<DFTïՕK$,\_~%5k #-- ٘8q"aiiI&uV)nطo݋5kh]гgO8;;+\\\УGڵKQvAaJO08xRypp0lقϟktZB_ł |rbXx16nܨtV7н{*h"\ѣQRR:(>>}E6mxC*+DFFby&ϟ)S 66ڌQdccAaÆ m^^^*ѸqcZ ڵkѻwo$'' ::ڵĉqd27FFFJY0qDٳ ={6 pYŰ稨(|hӦ tLuԕ[ݺuCXX>}YfaԨQhРz聝;w">>gφSC.]ٳg1cBBBТE*WPP[naРA*ۼp W\iFv>}Ga4$$?LLwo7[竊̼LLpŌn^"fz_ 8q())Aaa!&L4gΜÇcΝԩakkcǎ!00ǎÜ9s?޽oܸ666-[/iַ / Օ-YK,M6ٳn:+5d?,tP\zm۶Ѿ}{VZ?~ S|Ǐcѣkڏ 7J `ܸq8q"`nn7O?Uۻخ];kNT*E߾}ѤIlذf899!22QPPǏ?T &DxĈXd W^8q6l؀-[`J޽QJUW۷+b̙3M[l4ᎋS:Ka#ç,[[[XMr][[[PRnnn066ŋup%)Z+(}+L LXnDDܹ3_طorssѴiS=~-n݊@*_ =z}ARRaHIIcХKrT_r]tQ*{W}!ݻ3g*.4kLnǎ_١D_>d<>>jcKJJ‹/0l0?R-„ aÆ۶m3BW^HIIAqq<%%E^~믿̟?v.;(M^.H$hݺ58yF+ W (Ch4jFؖ ?&&:=oem %x \k:E]|v:LMM tĕ7 DFadaժU􄱱1̙ +ر#,--ヘ?~߻B2 f$Hgccjw=X5ϱk.Ž333+w?pQebb@DGG~~~hܸbѲVX?߱b B :T'bٲe011hU 勰P"(lUGyQW^]y]M|A'OP%692Aѣ-e#myOwY5L܊06?cbh"y_485pR*ĕW}:,Y͛#66.~_~]i/c֭~~~X̝;{{{cժUJN:&M͛|˖-ʵ-Z+V/[n눌իu_Ysŋ#%%7oXZZbܹ;wի_>&&DT5Bqq1FUnBER+exBg}$lݺׯǎ;tmdII 8uAm[UGELLҿ(]}ҥ?rHaXǼ 4&&&V?** fff8pRQTT:T*_;ơ ز15놃7"'?Gg筊0/hu*C_1QݦnPccc|X~=?EUVիz聆 <||| HгgO󛭬ЩS Ia8y$0g|7Jq*C{=X~=<==[oaݺuh޼yǩ~euqEo:t-[|7Xp![nݻwΝ;5Zj)'ZMܿzO?K{+++o݋~ ?b3gbΜ9ٳb'3TvCAxxbd2OxI@ <fB~~Jطoz{{{8::*檩k|{JΝH >| DQ4_~%-Zƍw8rBCCڑ#G`jjZeaG!3PQ6k N;KјuV{VF^L L`ilT.NLGXDT-/_(TyyDX2]vUy;CI0i$~~~*Sԕ=rqq)wVu͖ɓ'(}Jم٨c7:o1ydĠAelܸ֊ݻwSLÕm\xw=|s^rڵ ѭ[7U^M bǎJ噙 BPPmA AAA 4ud*`8::hѢƍǏWYmXbbMrJ̟?_\7oѣѠAJAuE$FPbQ^6ffJy"yT4JDDDz&Spm_ yѣ8wъt 922uETrr=sLJޅpw+xec8Z8*;*&&|Sן8[p#{ꉯ wŮ]V̟?ΒmHL!;He10"2Qlr^^(#)+##"""9&' g&o =G={9"#aillբ,})f-E꟯XEŌ|cl{zC_[uZXlΟ?xxGUZXb9ׯC&3fi=#!#.w`jh@b#ۅpqh|yPnӛR9?^!1eRSSyft ~~~8xb8qqqعs'L~q],^XO>BKWU7\.;] 5p?K8XOafhƕʉ.\wTxxx;ZG, U 7n܀wPkddTc1n2)6]ބ K.v\݁_ 3+my kY!b<bnn҈6UJ)ٖk۶- Ш[}n%/471{7s i<.(]8-  WOlڀ_#GAƍ䤾>uE}B*N.7k4 D$FT++]ntpH )M/8<~W}BW7Oㄷ"6X=xuG&FΓ;X濬J>Þ=ب#Zڴ=z9ŸbP PQ1AcY*nGVl匵Cj5.]_ON0uTǧz )Z4l0{P`g9YgeM!Bl `REU.ʤ.V9x8.&S"-Ġe˗_I')ʛ6l R}yyy#۲/O<\jZ~=ae|V ~mʤR Z,g9Y^7nƍ߻w/t];v 6l*,g9Y^HHE)~ F|:Bm}|X]Ø$N|U',>LP'ѿwOcpKY*=m״ţG*s4cibOR⑋q;_Ỿ߽r<,g9Yr#88X]:u C6mEq։L%щѕ~y(epi4'WzO۲/M'g)kK,ؙU{^νhረKQ2-FFDDDrcԩv CCV[MퟘD n=Xk2bp>Nũ*{qyzmΩvB^Q^ŇA1c/x9x._1e p0/vYaeH 0}<Oh-6]_ w-m6l۶ ϟ`۶m8p %% k\xgΜQ+**gDDZ[+ (Q/Ƕ+ʭ/".E}[Z3v̜HE)-_8U+DDDT=z   55OƣGﯴ uZhQ!SE3귚nLM7e3tmUv􆛝]݆ՃWDNAqv^ //x{ /FDb&wõkDi-^ywBf֎܎U_[¹|sxToGf]+MLS[[<3/@i6 zc7PDDDjp\~>-{F272ǀVp!> gj=Ho5~ V|e3Jd% 7HZyg+gim034yꗷP1 yY!R-OLHk!B/>{s^/~|}t#qlW*φLޢ=U] N~/ªBDDŽHK+ĥ; XqjwU_,-Ɩ+[Һ%:4TٻC#`l` "@q{_u4tmp@+VhSv#(O'""opuqU{pN[hYϳpAe.Fg^zTF{0^Օ4D?~m,,M,̲3_8hpWJyYF!8[l86}_ 7ȓM7XZ`^QdB${§U'/oDùuE> 0cQp1 e>8Z覇xNj&DW*yRiOѥi쿾_ 010A{+*E[ǶjCíR.ϵL9u?7?1&"zqu8FyB/owhʤxi#X6Af]1k Txܛ8s e EZw5j # $fUᴬY0#Sfl`nCڬODDL Rx^F "jׂSUi?SDz^:FzDO>5ETbTuD .W=< U7*rgrҕj_ 7+O=W^`054U.fDZc6f6*xAswn<)|S̍ª.e]xgsj5k4 tySuyf͚ݻǎS[722m۶1|saR m+^^`eގps֤(,)ԫ!B1j7lnͺ-P:^"H0kN}y{棛/h<*r} ~ol"c]ˤbͰÁ1i$wXӧOሉY 6^ވ s9O `wN3(""!V&VگzFXVKơнyw4jШ}}x{B&p)S^jIC#n,RsSkDDD&ܵL=}!(HsmKJJ矣o߾Xv-|}}駟⫯BXX\RQ~2Qc< #=FV8?nHI^pB`P[o0!2!QQ(`'{KpZ\f+p;Z~ rm""{p2UY̙3'Lؽ..򤣼r4BߛEv~ίM9]saՙU072!5kS[TW]Snvfv!w" w$nӦR MjikRQ1?ukZ9§sm:6JY翪kbi16_ +tlܱcxyr[ /Z6ECT<Ɩj|\\Pb>J{_X/JTol"3wjͭ鐨 A^q4ʿ0Gor?+|Kj*wIl |TqPkέkݾwNߊH@BfDQin>R_%/p 5kO?V?7!8[r]<4ۗݐw#r!Je?gFx\Tj}j5rz hw7}O=ѨY7x{EhTU_+F.9{3"98QV]=z6L'푊H3nlo/Xov7lg;Ӟw~'a1C&JJJСC7f]s:Mff^jvKfR{| ĩ, ^Q0,RFA.C*ik^uȿ֎_"`uj F~d_n4[V~>ڮy.t&s j5-K`eJtt=F49ѽFc_>\~1o<ee 7|6kVĄ5/H ^C7 t<]%i[{ۙm {b$^ O5CB1ZO)̿>>^`ؿK{+gˋmFDDn;t}sXreLBEFJHBٵ33QRUٛ[׾}pLL*{N2ZhM'V Do'} q2O3Z.ʥWZ5os\͹YsOnD}a$5ѶpnIl? 'lqiZ?X_Njg­{SWOZ؀HLmڵkvZ9rw^]۶md2|ؽ{7ϟ{⫯G}P*BOWYi!Ӛ='&,H7gy=O im֧rvaxcx6܀f~f;T^Lf5)ZbkmZTUG7nWV"wAwc2nJtXUɾb2GWܨQA1.h4u8q pJDŽ &&}$ }]k8gΜ91qD|WxWd#'Cz.¸q-V 7dpem%6dm_ N;Wq$1'%@U#ZY3R ;kt#<ъ+Z @:iK嘩PPvUuU-^jQ``H%#=O]9֖ M.orO?f5NQlӤi4/ZgϞmtc=tTUU…  =M%-TD8}xCܨ3[ϥK Et1I}'f*fB.#6MҪRl9Fzӽ WсjE-^WpW+Bh;MsAHlCBQT^嗅ŬbUp9""4!68CY>?pYVEbz"\`R?}8AxlZ,dAX<{̟P58LbRIpqptp{>]*cUVrwtGwO6Tlj,6zԂۺjD=WFir<6EHK {֞F/\cLx;{#;.rn""n"+8Wz!m;&Ӈna=c[D" \nxöR Vwy*N2'D^//9%948hZħ UIP7ǖ+N&azĺuP)l~ĭ%%E-']}R}}Zt7""]LL7ᰇ &FY?JyxjFuf'͆V+WkHHjXO~A8U\gŁx(ר(h5(nyElL G#W:"t(*Kt "DEd8ݿ3Uaսq^cڕ~J\FGDDB`mx0tPKѣGG kOEo x;cbCWg7 %#F>LoRDI)} JVVZd:Տ&+}so{ëVeBlYL fu #H Ō&o맯+?QV {RFA&!./u۷wVTur+"rСF]'"'; ltL7u! u'no?77&:uB"[t2vİɽ+ Q^S$x`hPqAp(r4{kQQ[H$:+.cǙmZ.Ht?螯[~iGuSuS큿?gwfQ2I}& At/RS[p*f*f6yg16ZnvRZ9"U i !Z͉RD /l7 1#tFuՆUmiOXU,Ry 7p+]zt)֜X]tLDYu.\`ukmoHЫ+~n~[U{ UmDNwJ屪XH B|CpTUY92""n 0+V{lݺuxG~GbGHߐSt8Vp HF;u[oy :|mg@ur!X ]=6^4ZMHxk"8RpRuk(*TpC}=$Z[PQ[W[3PZ-23YBqqp侓SO 5]fpgrˤ2lR%<Ө-u 9Vx krH$\+b"16ѴiӰdkشi_'.]q !YK1kcP\^9ʶO'׉RFZ`gYa,um=<1.Ȱ!xg;u0:w6:ӽ[s-`J)tl9~ فFi^YJJ𷟂iQ̟LZf@$(Yئ/աYf7L ""jpO?G}@qq1|}}1|p>d>rvQ($ ϙg:t0zXVX0MCV5np;t/g/L=z%+zzlsrZ^jFҏkp* 8݆ٛgw:nuz^8mR_ 5j$e$GW|0qc{uҋLߍ7?pGEnjॡ/O/=_M >.>&K"`lX3DUo΀9y`'6#?;@yM9VoVEbz"|]|1I(r{#Hc2"[n}P؄{(Y<}&R!!ȸVkt ""Owhoco&/^lH7o`S& <ȢɶCAYm1F뢍WB -TE*;p{xɳuU HvJ9`/Z mP JJWgamKG@`` ,YbH?e*D)M_W-fTnߺ=33M(@O&0 tDGҊT~~ fvc-a!" rrrЯ) gΜrD$XU,mm mUcKtӹ媮ڬFSF ^TV $~m'rCBqiTU 5kPYWif4N]7?peeez]~_czص]iTQM}(SzQ:4Z]O''w}33y~\Z_*@b""_LM4h =AY9"Xh5˖_dU7BƠkbUF۞xAcL3=?Y=T[/wcqupEVT*'^ԩS! ]tA~~>,YիW7MVE|Z<|}Z[ ?[]Gy v}3jPPH%҆i靺DOWAi֨áS`G1}&O7oƈ#ЧO97oƒ%K0uTC$ JNcjT8]U+6PBZ4uF.pqpAW`ÞiEitDWLDfӻh[kZ$%* hmCDDn3xg۷#>>۷oG^^~iC# UǞ6K@(!E"w`_l\9U!8!!,.C$ D``dgXu#Ⱦp8-]1v7""OLǏٳ1~x YXkNAwv(t8*DҬY8ZpLlV^i7jnid ?JJp֜[z;YR9_$Hx\m8p.]&̙cg&''?đ#GP]]^zaΜ9x7 g62$jYSNȑ#_b̘1nQFURYmgahPiOt\M+{n/m3:w4Z )B|C/ni ũgZO57pşU3Ń6916ѣG_ ""{F```/s'&xxx4jwww#+e[CbF"j56j }HH$ z""pwtGwVn]RYbH8Uvy Nh5F_#48e1N]=e |||tʫ%͛7xPPPr$&&b?iX*^gU<.7]Q[Y?Fu# ]0Ȟ()AemEju5{N ,p\w3ꚬY`U[ kM4k,c̘1V{fpp0كpԿdO/[-[Gv?pwjv['8 .-NnhtNSrD*"M~.C4{2?{;D/;C&\r8˝1-dŞќH%Rp"}~:Rb`vӈUbuj|=k8ɝ,WU]d#0"Ϡz븉ƄDJ>&Op59E1f 4K,'mۆmu[" <͛4-+b/8 A>A?0Co'<0 ~'i}F d^_ "&?Nw>9>6vM<]*..icߏ ud-l a-oJ;޽%v5_ IDATiOJJBRRR;?瓰$Z2T|FcgN:)))x"n}?>"//:u{m{~mʷx~bx#BCv SG!"Yo%ܻZWNƶ3W!<β<`J)_,ңK1yEYDԾ?6䖮RF6 4jΝ33A*.r&9˝14`(:w:" u@\v(\gvz ف+W,>Gqy1ˋ- ""[D[JyϞ=e9ѣٟiN_==ޮU%"vƘ^c?w?.\`VbEnvwhNEm6܀ㅡ/NSi+ߪBZjg &f?裏PPPt***_|׮]ɓ/~o~111ڵٟitoc1Bv^PmVFC -bSc~Dv\8l>ee͞ĺSifK"8NYz.GD$4&&ٳѿ}E&xf m=x2]]ˏ/7}ӋKe셱 #4ɹq8hF˲|覺~8uj5f?5 Dcm"(fj+F#>X~P7DDDh`šk̖xiu% ~ m=u/oOGO=M*bztaﹽf Ҋ J%~JjjqODdkp( )))z9rAAAVH\6foDYuQBBDDd4DZy[Nm1=\;*( mczAHHKh4Z˙<NۍF[pntWWu iDԾ16?w}?s_`ƢE0{lkTqIdTF  QXX~:nƒqiyφv]2oYV_0ÆPQk+)iy߱?N# ~m}ݘ1cƍСCѯ_?kG~cW. 1: cbqc߶x`hPl=%%&xQq4uHHBwu{E*#q&֟Xor\Eh5P/ ܙ J9p{A\\LcbܸqXbv%ʪZtr""{Q(ԨkhҊ u@}4}z7yf'ˋ1#tFY"ri~~_~T"(ŽbmѣGc߾}xǰrJڵ Vœ9s q*KO;&$t(vUō/ng3U&+(;̡QK$Tĵk/-N'uň#|.7 LKW m T^ABMEp@FQTE*L3 ..BCDDd' ?/3Wϴ>W+fAô;ń@ ol>ww>-3&,5EtDǭia+Vz4&Ddp{ő#GCt+խG#""w}M K\u읺zt}CdTU,k|tDBzBjȼ`Fu T|""ȅ}5k<==1c x{{ Y~|9ruMBZBÇ""`dHayrȥM?I A2a;-}tkKD*"q0 eh5.g3&UZ]4{=eeP)^ V8Z5WOD$&&2d`ܹ;wnjaٍ: H]auq9^zwѭ7}']W6~!"nm۶ SLAǎW_5өS',[LlVEBZ]1H!"" -} wG$BU]~kT*hmv {pup[|~\~CC&abV^ŖS[=Yn;;w.lق7:6h ;zsT&t8 t$ ۏiMI愠A m8fBUYs#R!!(hX7}]7=F $F=_X\HxLMٳg=R+GdbS7Y)} 8 vƘ1/Ks FgK# JJWVY[uYS4K nC6TYnʕ+zپ*ZPP*iXXo_t+./Fqyq*m eN+J:wn_h8l<7jn R(Ej5HH46tar"16ȑ#h"7jW0vX"]OnDYu"LDDDܾ'vix=X8 !-ՄN r&BB[ެN-LmhUB&!Jp8˝j:06|L⥗^|7{pq;Gh{TqJM~Qt{bcW.Fwo;ް'vKΕCymy/JH i~^t\wGw?/3WϘYn;BBBСC߿Gh[ˋ.<tt(t8DDDv=ujk:]cc[ ݽ#~kxf_G+맵&"UL`߾}qݻq \xׯ_Grr2 `81n8x{{ XdEii~QJōܹ'vZqww,; 4hOlq^-Q)S $%L{wʴ\V)'65jzJUVpssx ˗/DŽ ~ w /`t}'  ]SWO5)fI33[[U\*Go3~ h$'AU>\T~_1nGGdž"i/\{| /^cĈ?>}YbL/זգk=}\|^u. <8ܠϿ[W"7kS gs۾"" bK,O<?@}s'Ghh('ڵ+qppp0QEIFUú 2""':,ZP!Īb=4:__Bn<7jn`F H%OČTFa͉5Mn+DfЈ<!$Z51T*1thoa)44pqqg}ر|~a$$$4{D">ՙ=>xk[{>Ԫk1h TU!!ʬ571l4ƠE$EH~ujbܳhcnMO<Ys?#m㩧B׮]|r˪h4y&w}v/^{{nzDӻ6o Z/C˪˰:>ٞjz7>huS\cvݼ m![Jն sX6}z,axBB4{檙֮- 4 ɶ!8E+=Zgq9Ri)lcBv˴'%%!))IXnTCaȐ!Z~-[ <<k֬AdiU|c3c>3nOH|oT*$'bѸEM[''NS9tL\9O4/$sm {~[#xU<e2{E7vWko}?@YBзC_9u݅l S`x'0p@?22?mۆiӦ5o۶ 2 6 [cbv󉈈J"XXMٛ #mtRLV_DB4jy8aL8s?}a1o}S!";Ţi"c WMǦMHy:]=DDDDBRk8HpJ81 6Vy lnClQ"e߄{g֦۫DԨk:2@g_ž7MLX ]1h1G8)m 71@X(}?܇4> wGwܓ,č/nbߛn|x^Epqp:07m6h4 _YYYݻ7K\t 555_|={BkƟl ~7ŋ}oHE$nfglj -"16 /y_F.] ѵkWK/ EH]Vrm"""j"IdUŚ0HpJݱ}v >ɱ}aĉ 2M-Y7 SjqI^DDD$nxbzL3QJjܬN_tv;TRnX4DHIIћp>|nnnDe$-9ku m"""jb1{~/.{ #RiPQ5kPQ[eǗ1&&&zǰ`888`֬Y˗j*ۘ7o!jQxNF]jX8G/yL =G=*sŽ]m^kS gYcG8DŽD| .__|/bc<>S"3**-t(DDDD6G&GG?U"uE w^Yeexr#%B&"5f{իŨQP( }o:U^CB&DDDDFjl8kq sh܏}.c>Ƃ_`B :{%1 n3Q(6`H$TĿ lGxHZ-G?mga](./FGVۂ`V,MhQd_ԾS(sD2u:$%X)J"n"""""t]c-(*{.կ>9w2o0HLD"3@H@qczQVWcUƪ&jյX^yLBja*23-!۔e1&""""2QDHdNW5zz+T^LFIpLX }cM$܇U/x8yࡠp r4:pkG.HHZ6{LPM$<&&z7sNTVV   H߈uiU)ނ]gFK%RH>lPJphٲe8q"1rH{ؿ?hT("1=at9)# jD)^UZ-N"&&*..Ʊc_||Ax{{c„ XhUx'!J1zh<Kҳ8p ^'"B"^Ƿx6܀rkKDVD+[6lvڅ7|1ٳk֬'QRXV/ݾ'wε;qA5HTV`퉵f DŽ Z-?/ӦMCxx8~W :?-J̛7|||,,""""jYX0cmZ,=533!9bm(ts+Wʕ+8x >C>…/J"V7ŋ}o}33QZU}__ 5\:`TQ-7? O.tnpqqG}ڳ=oL&syh|g""$ri¢n| Q m ,H/lذ{Arr2N< ???==Ǝ <k=|3ڿ]^xB8˝w|$$%%an}߼y3nیJKK={`Ϟ=8u@ј9.\@HH/^[{:u]ٳ'~ѱɵ1ŋ}/ Zv: IDATzܢwhGX jt# ,f۷_=___DEEa˖-6lqɝ={xgСC<ifNDDDDg[9HH%RV8'Q6T*ƌѣGcرӧEyuTFmZ?0t邯AAA֭[k9MDDDԾ;mrC~~> %%/^ć~@ !wúC.HLOFk;=DbDŽD{ ???oobΜ9.pD8!nqc^<)Nǥ_D6 _]B.C& F?S興H,fH]!l DԀ :uR@PP~c|HDDDDV׷/w '7BpLM6tPfϞ? /7x'N8B""""HE$k˱:C!"J233qơ/2Q]]'bҥ:R.^T+nqc^|U^à%`=m)bRnp n.qc_DZ^hX<᪬EAmÄ6pJcڴiBAjŎ/nbߋS2z׷Q^Sn+pVqaԨQ\[HJJpou@8ɝ0 8f7x|m ,#ܶA.tի0a;_wƳ>Zo;#`DDDD$6Nr'L5'`~VWϼ?}/I?gҪR,O]΄no1o< 0oCa׿>}j&""""},ƧQS`魐@/_Dg$Cq6p wlݺo6/^z |q̞=6mdčō/nbߋT"E*sT\ΜrZĪb&QƄ 0f̘FmG/ """"""tva݇aG\ i atD|Z1@"@V[0hc81&>;"0HhZ<TV |ȥӳ,f -[&tDDDDD'cE ,1VČDtv=Of*fC_a2UlGE#|"7xŭj0!ʑR.[;&clX<{ϳxsKs1l0D*"6fY'p6h5J2yey{noc+T+f5jv׫[)R"DŽH$8!nqc^L]BK֣?7&Jju5Vejs&DDDDDH_0?TF&"$N2'ī*Mcmv܉ӡRځHe$k˱:@lZ,R9"nO'O ?.Z3T"ńN~:.\d?3g ==]E*"!H>=Fշkb1XU$iLw};v`ܹ>|8bbbk.믿:|Vk4|]|2}%+d k֥KtDDDDDDM2_{|˥rL ;h(l\|222P\\ V7ŋ}/ne5ew έ^3+l.ǗF=o5\"#rGP[[QF!;;ԩ$I=*f!*ّWw$Y݆zV8}k,vݖ0>qjxꩧpQlڴd[G" <<תk}vM߄lg;v]?.!q#r&୑o>Ql_{b-~=+$ 4Iٮ=)) IIIؼy34Ow;saҥXj"#oӠn""""2V\6goƳ[c>?GӢpMs {㏭&$nT+nqc^6pkx|Z<Ej7p۱z _}[̙3GpI)Su% BCdLO>fwߍC5|eee  V7ŋ}/n}.8"n;5zh۷OtQF!99Yu\MDDDDJGU]_ɇ\m5ܶ#v_ZFi\MDDDDd$ f*fre8CpLƄlF~ZBdLDjō/nbߋO r7~9 ʪ˄$LȦD+QUWU$,&2,FDDDDzu \2C' ]b4n""""")^^k,~;rKs͘p͉VF`4oL5\: !-Sn1& {TJ7xAip :6aMDDDDD6)&{rVQJȰJ9 VW~J ٙXp멧ObpttZj#Gh;,aiR*>_ژb߯~}  ;C(!!!Xp!6mٳgWi߽{7#GK.[ \JDDDD rQ&Gp4n=ԠAܹ٨Pի 2RH `mAV\4MYYY S 44-Z#""""""#zgϞĉ+899!((oѣG(N+6_ژb'>í={3gbϞ=x)7n [noݏJs/m̿1K/m̿n`-1#""""*_7n""""""" `MDDDDDD,47DHic6HXpi n"*K/]̽1DǂHXpi n""""""" `M$\Tژic6HXpi n"JK/]̽1DǂHXpi n""""""" `M$\Tژic6HXpi n"JK/]̽1DǂHXpi n""""""" `M$\Tژic6HXpףk׮Wc"%%EۡXpŋjժXn1sL]vvx|||i/m̿t1isE*= ={?btDDDDDDn=fQFa]?~HHEQvawܻw͚5CzpԩBL41K/]̽1: &&'rssѱcGddd~Cjz """""*XiM͛7G\\{38y[mtDDDDDDe#z˗޽;\h4nX!q[Oz }Kp1DDDDDD:CTT,Y\XիjժZ8\OdBW7os\.Gnn.rכӧO1~x8:: Z‘#G9iѣG1p@899ťKn߾5)0gdggk!jҔ#F@&Km_>EEEK.1ի7a˧(x{{RJ/ZH&̿JJJ¤Iжm[A&ĉ-j>|`/iVQ򟔔SI&X"LMMѬY3lڴc޸q}􁥥%,--ѷo_ܺu,.GXpc(!!!Xp!|'O1f-FO CJO[nEnP^=޽ &M2/bccѭ[7dee!88ǎC^_cʔ)~̿~sBCCamm OOO?浨y~q)᧟~\.⒨c߾}߿?Mb̘1j^=z: 11;v_CHNN.˒ʭ ;vPu[hȨ=~X-))IP8bQE1;;[tpp;wo b|||JKf͚~+:;;^^^m(~m}kҤI U;u$ZZZr\[ 'NPSc5(iT`` ,,,0ei͐d8qb}PJ90AA'prrRJ!K)r* Eɿ% 5jL)Ѯ];899)ۜ T.Ǯ\Zj)NW||<nذJ?gggAϝ;wWƍ O/~WԫW;v@Z`hh5j`6k̘1ŤIx8|0f͚ʕ+jLܾ}[R#믿 ۷Ua{|,X9*Uʧ]Tdggc̘1QǗ Voeeş=QFahٲe}))) IIIꫯl2ԭ[G7|?/ԩǏG8P,^KLq򜚚Z`??,_֭[8lذAٖQ Ϳ(PT:Xp3(bԨQ8w""",_?ŋ 1\ϟ#$$zniiiXf ϟI._ ooo4m7nDJp!̜9Qn7e2Çcԩ~p$w9fkk[৔ymydR2ac׮]ڵݻc͚5EFFE!'OĄ/lmmqmuڵ+֬Y .0جY ?жm["00#F`%8y-'N@-[l _Gdxw9֠Aܾ}[W^~iӦaÆ ؼy3T;>>^ݻσs駟F?ӰƺurQFj I&1Q^=eiӦUW/ߊ PfMKowĮ] zpuu-4D%ǂ߿?lAhh(ZhGGG-FGmXr%֮][F*UsN;v[&qRjڴ)bbbT&M && b˩:~!d2hт/ǜL8@5ЪU+_{ޯ_?$&&~S=}@^Ԋ4qqqٳ'7o})b_~pi$&&*޽ӧO׷•>4[7o,/XB1::ZۡQ)Zl(8x`166V}*7NMLLĖ-[vXT<==EL& ھ}ذaCX^_Z4Y-G/^O.VZU422k׮-.]Ts_>EDD۷͕ Ty-̿{7wqqQW{A*USKDDT\|7IҺu矣I&OQn]dgg… غu+]\0K'A@ttJgϐ¢Lcz5j׮3f`ܸqEJ^ IDAT>} $$&L@jjZߦMGXhC'""*2Cm@DDT~WL4 ~~~صkdMܹ3OիWk1²aaa-[j;wDFF^h+W 33-Zo޼y}'N)S`֬YeQa8$gŨP֭[RlZ-[дiSCŃT8;;cذaԩԩSjNjG~`kk SSSlR3oAOm[vvWwŵk*ۜD{{{ʶTP7oSNbjT(Sl޼s犂 [lyur1;;[ܵkh`` +uQR'::ZAoEDDb``OOO/x(kf>0b[YYA&&M*[˗/c׮]8p=!!X):>|vɅ.XV\y=~X^옘>r֮] Avd|#Qi`MDD3c >|ǏW{,XAuܹs~~~%>ŊѡC\x000(1Fj}ŋwu011Ν;UFϞ=[n/(vqww r Zjlo޼9 "zѣGgϞĉBMJDDD7INrJL:ZѣQn];w? S]\\0k,̞=<@affĉ֭ Eso_r%ڷoooo7ժUӧOq} gggܹsaggkbժUB>}tRE >ӦM˗/affhР*~A cccDDD&E(~j—_~ &x͚5C׮]dɒRt`DDDT挌tR,Y/_,ѱ~'..+VT~pBXXXRFTXpm۶޽{Ulmma``W_?y3n[[[m:tի,qJ9DT:ic###۫|8;;PL3di̓;TZfffœ'OǗXh\\\`bb777ٳG裏`ee *k׮|GFʕQBTZg.Zrrr0ydX[[3fPyvvvVd2`d?Z[޴ {);l0|7nyaÆ/,,,0rHdgg+dee/D5`ddlڴI=>>ݻw90tP+Xp}T츸8޽{C={V?'O?TW_aؼy3n߾9s`8}4`֬Y믿pq$&&bŊ8z(Ñp4jԨk?>vލ={?'Oo>)ohӦ ObjmӦMË/KKK9s.]=zw^"..v*~y1!""CPPr{@@BBB ?#lllIIIر#>C\t gΜӧO1xBHqJ9Q1Q畺LJ_aaaVcgg6SSSlٲE9>î]/^իqAxyy 'Ob@RR7nNJJBZ֢ECEaԩ`j&\y]+VTkۼy3rrri&eaԩSh߾=w}<~QU.]<I&ƍ Cdd$wZAAAhР.\l舿 n""""rEعs{SSb_n]푑z*^zׯ_+_;v,szB.]ÇG.]Pvmt ݺuC߾}!O}ЦMeL&CVJ|?RJ*홙*Û6m^ǵk(OOBcUP߻wbM$\Vژic=7G.ΑWݻ8tЯ_?cÆ hѢq!DGGcԨQظq[G L%hԨ~'my ^ wmwUVm{sDDDDDŠa@}b`llDtܹ~z#F`Æ KKK <Ѷm[<~+WV;Μ9:urssۻXqbǎS~ojҤ ::Z9M͚5Cpp0 \YM#pH/m̿t1RXEQTVZ5;v E^ӧOǗ_~;w޽{HHH  Xh~g$&&"!!Sׯݻqܺu !!!ڹAرc1{lDEEΝ;8q"y :||}}O_|*}{S:u1c 22RyG?/^!Cp%߈˜1cz\m,ܛ+kҥK}v8::*8+hm| Ν_]6ڶm}F̘1uA˖-S̰d4l7ƅ ?а 0`?ׯ_򷙚ɓQWWW :{ :mǎ裏0zh @y#N>\xzzf͚ϊ}/>AG{~#QQQj '%&&0w\̝;W#qxzzBDGGkڐubÆ ʢ,44;wD\\RRR`ccN:a…GU?GNNrrrp94kLKWDnϟLJ~X*MDDDT*V`;88fffxFʓw?myd899Z ժU÷~ gggܺu sA֭qETRbmsss̜9uk8J n"ড়K[={`ڵ022RܹaKCAW^_>>022ž={`Ȑ!*ڵkׯ_Gvv*t3f`9scǎEiO~]&v%ݽ{w@ݺuo߾wÇ\[dee)))Z>} ..iii ֭[ѥK|7o=v`` >Yf[nHII B 8}t_7oܹsѧOC~xbt1諙3cǀ0O*\ xy˗]|Pް&"""*c߿?v gggxzzwU|r̘1'OaccAлwq%K`ll &9+|o``jd)qzsssc"y,_ӧOtR~ aÔ0|pWOq9X*a+WpL:}􁃃FVZs9~ԩSw^###!VZ6eذaزe q8x ك4~Xr%Ə\.\.Widذan޼ CCCc۶mʕ>| _E6mT9;;Ν;jΝSrG}Q{yǗ_~h={VۡիWcŊy&*Tp4A =#ҡ``[ނu&""""W_FxxC)ϟcҥXdۢ:U23sE߇#ܤ8H")1KTroeej;Rann^{BF.]REu"[Ӌ#q-- v Xxw4bM$R1Ks/mj__^UI_!G###.I IDAT]R}v4jprrœ9sTQADDDDIiiL`Ҥw"`oT\}8M"** AAAu<<AvpaL<˗/ǘ1c=IIwJ@D}ͭx26rr~.C֯_;;; V͛3fSN tϟ?ܹs1m44(ΒDDDDD!+`|`UĤ}._ƍwEٲ3H8­C$%%bcc ~1` 6_{itׯ|9_EOM&d6mZs+^h07,u\|||R1Ks/ms YYS߹mw{,M)JoxEF¹sR; Qi;plg;vSWh4H~{??= (/Th_+ n..(Oł[GM0صkvl}tؼlg;vlv'`n_Drbɀп?`h(bJşߔ~[bJK/>d 2Dp RM 6`Sٖwv||Jݻwvo7&ddmԩ?( /MԋʻSI߰1gʕ+vZ9Zn*U`Ν*;v۷L$O96_{it n9Rr};d{I_qJoxb 4͚5Cllr%ׯ,YÆ øq0p@\p .+ """"HOVUo74TV.MιJ9+:$22 44*<==L&ҥKec;w6&=Q{a.^4ٳGY=_^Y%4:$::}h x*q&""""bIKS&z;DDDDDT,))ײ.9 n"JK/]̽i2e=J9GI߰&""""b+|&&WܤoXpIW6_ژbMOMUh*9ܤoXpQe}7 n7,X\XpQ=,I_&T+m̿1K&󟞮X9\hʕ+e˖E7 nGR^BSLAݺuqdggC.}GQOLc8 v+333I&ظqc'=]xYfe#ܤ8T͛f͚֭[1vX\~+V(xHqZic.^4tn+_ 9r$֮]]i᝿֭Aի1ydԨQ}AJہ/wMl/i;lgfJi pѣGTXQOqM+!C 44qqqo-Iga}vW{aֵ8ٮKqltE ȥ%[}J.h}Ȑ!2dZ?m%u,Khώ/OYDDDDD"ڛRnN)'}‚ &رhѢC!"""r3EѭG\4 ng@\\ &&077Gݱk.=z=z􀣣#ӱuVcڴi^6'"""r(-MʂXpQ'O"-- sA5pYԨQ:8;;Ν;pqqݻw1a7Ɩ-[0lذR2*OR1Ks/mTū nN)'}Ă={^zԩSAzz:Ǝ5j`ݺuX"֭[WckzVU%o[psL3f 11;>|)bNX1Ks/mnkR=l&}ڻw/VX-Z ''Ge3޽J nAP,Ip222 ],;;Ͽ#"""r!oJb02=ܤ_Xp+~|8,YHmǶmt?;>D{ic.^J;>>C@b~jmhs~}:u Brr2lmmѳgOtAa/$7W0}=<7~UK֭C=Ю];mCDDDD^~ HIƍ+x{FPRƔvc *]BiiivDDDDDMEÇ XZ]L*oXp?0[d$pUd]0 PREHpJy M:ׯl x0a5*#m̿1K[qh wtWLcH..]|7jA@nnnYEDDDDT$'N( +W+/fMw mٲE! G86_{i+j.T n@1\.rrCV2cZBÆ vDDDDDy1{wvmm[i+_JU+\M+%(ڵk8}4?piB+^==+9OFN+'lڴ pssCp ?֭[興]t4nhVl&Ssxx5j:q 7QA0. kw4j̣"ʝFZ>cՍW/v#wV̚pgks@6J[Nݍ4xiY.AT^#"""""5Y@'N* W}u۴f|m wѢr 7Y &O?!** ЪU+;w#"z6V8ԍW7_{_U_˖_e-uX^ŊזХ\7+d-p@%psThR+w.ٟ{"Eƍk רpxW1p@L0еk,Mtkf4MDDDDDP%q ceIÌNHlyzx~։[ҔrMւ wQN6u۶{΀. 7p(\cVK[0sLDDDHJJBHHZl˗/ŋQT)&MB\6adRbՍW7_{ӯ/ /d^|1AFAZʕe #vAHܵ'O=_5X,-p(--ͨ[Xz5ljUɗ-[yضm>̞=C 1XRR v8߀um(U hر8~p4K3$Y{'ۀ)hX&)p5x{{׮]{˗c7k w зmۖ圔;[-[ă0yd=5js:NucՍW/( 0b0o^lT.]Cu뀁%gmijvchdZ9np/?un+;<<o`Æ zN""""* ̟]隥Hb X*͒hQ1[v)' w,Y*UJ9sPfM㾾pvvN,˾}r=|tkC3gd+0g6GGiָ~5k 7Y&ofuag?t%SC""""<8p@##Q~[Er?sg`^i(V4\,#[4 t7gE}4^|W\AbbbD@>h!^e > `o  @zyt}ZXψ,+Wpe\|pwwo\~ڵk₅ 7n ooo/zWXSJ""""2]ô zn#GMIdqc`ꜛ=W2%br&ph?~Q2?d٫m "2㧥%J?*_Ӧ}tl&%IϯmdE3~KGe~ <<%cm & )) g7K:::bر0aGGucՍW/.]?. \ ,[&k?8rkƍI#0yqײv3&5FpDGG76ɖ`2""""$MN~)wBб#p aЩ ꦭgI 9M:wc@T p;ڷooa٤G-V^? }T;v!ܻ\(cƘkmY 7>DDDDd"#Mi,˗ƍc^Qdm IDATp!(?nvv ({q5`MOS5_˴@ &;{x]dI`;;-ZSȚNI~ l)kK{/;p@76|QminRNDDDDm*}$ݡ,7RYwORaa-[&IwnΟxŋz"`D;~~zٔݔrV0&R 6P7__& k@ժ}W6OkٿxM@V7m1|9о=)*C6^6I = ԭs%TlKybyALL$>ps3(ۊrݭ$ܹ@۶ΝRiILƏN}.UeFKe%{\tT"?T+e\\m<=9p8uT3f ڷo9sqdDDDdNKwGbVJvֲ];I𡜷?PԮ l| н;ԩ//dYZYa}:)إ n[Xreƍ޽{;v,[3!- 4shNtQ&JNI5[7[&O)HyHipv:0niL?/,ݺ?ܿr_xu RNր N<͛RSS?cԩ8r&NŋyDV:R0~hHioRc?t43{_~nk4o_`^B^6cV^^S\>prnRNd~L ?~x-Z?cQ!rE2?,ӌܑ)ѷn{t+?$XZR5`Lfis^-[}MF ԯoq"&dMpD~:`޽B*Uiii2-tcՍ/<+iս;0}$⁁yo<Uc9w(p"бck1CPvUi<*J5VsJ9Y&j۶-Ly믿FNo;u*UdQaZDh*xO/4sZR:+L3]w ol0@:Ϟ-*oȼ5RNք k,YFBٲeg믿i^7x$"""v60z4dz;nPiu~wm5~]n %MVz^Zf Pu5svfyׯrevmar&܇@ [ɩGDDDDMQr^#bd @ppܖ/݁ƍ͛gҥ$:z!Cd5ym70}$͚Ykt)IIQ^máCGpDf~ozV![Tuy 0mL1^V⦔؟>-kM%8XnF}p&麓b*oHWdVmK95am3fL%BBBP|y4i*U… 8:"""2{d-rY4v"PK&U?ioQ|-n=g4$I]NQt64Xl 7Y&ZlJ.رcQV-lڴ ʕ'󂨐XbZ*<1wL [NyѮP$hjq'˚c@^_w,?,יEH?) 5J%?Νw*ЧtNW|.Lɚ06իW{."""0uTt}BCC;@"""2X|?bcɓ%5KV4 Sjƍ@͚um:5arUV 7oF@@VZz2ܹ3*5 6 H7l(+JʔZod\9<'I/[Udޞ=uf@nrW/3|B[z*æw3}}Ç.] \fMs6qJ9YV 4zW{鷅N:fQv)V7_V>X%!aiտme}ܸ8 hp{}z<_̙Iĉr_~_JN~Ms>o(Id$d[Rno/3%X&k@ݻ1j(lٲOdɒ8:"""u:yRU,)kbno*"ͻ{tlF5/Y"릍e̙k/ ;{$-+F( 6oތcwkGAddGGDDdۮ_FJdv&k7lsun"oߖ]ݬ_?P`|л7e$?t;tj""d-L>gO/%i'۷ekY?]ZΏhT{{{`o@OOyv{e{?QN= gcmJ*a׮]x)P{FE-U(u_"ΞtJmѢyRA1' %W^W_k/ܹqΊt|YmQΩY ڶJyd4R븸w5'6 9n 8'Nz HJJš5k0{l̚5#$""<ɛev]Rَƌ>`+Ul@"un 4nۼYƲT{@|$zu/Z$ׅQ 9pJ9Y mT 0+Wr[~l2L+ E```ݹsr_gkȺ(41BӁeJuNOL89~;>ŋe+74>^~?ct`oVsݴTBifv䈼6"[ַHL4H,[V dgg+Vw֭[ OOOt- aAؼyP +=ؙHURS}s$wwK%B;b$eHwb6A8V\r2n7wSFܼ)Ҙl覔+v &FҼys4o޼Пzhذa?/Y~ʩnm7Od駙;,_.ccW^f͒˺ue-2IiuT(Vxc7l_) ʕ~Qnzm[RMf-IN6^O"S`m$)))̲5/_dϫ( Ea7t"">Tu&{M[D7ut^ ʸ}L15IR矹 EHkW99;,F__spǏpeaUll,zbŊlٲջTXѤkܹ3;f#ꦺ1euvŻW/bL޺ Ou5hT]\ի!ClgX1_2edVnOjuƖ㯫pS9Y:V bӦM6lj֬ BZ8qơe˖pwwٳg1}t4maaafNDUR9RN cs:rD?ynt(c.m{ܸfJ+W,5#"*<+D] ꊯ C 1PUAعsg覞=UbشiU<<^*OL ONɶ"HdM)nt\mѣG(RP,=KL٥<۷ochܸq<=us8I(^<͛z?߀4 ;|X?.h@]իWe.He;6V)k׮`CDLZpJϘhtX#8p *W ܹs1c޽08ȴزK`^={oo;"hxE`dE[җISL;߱wOn-zV;qqMe*""SZX ܵirn-Y,[jU^fBRRвeKL85k4˘.)I p<`g'åg`Ȥ4`pIOϽ8^TL|ol&Z5vmIՓLjy]KrHŝ6v)'k ."]%|9{V={sK~*SiQ`:믁E%R\^` 㿾4Qz=+{b߹>>/T ڈH~5 XܣL|oX6P`` ͛??,]p.c1.|k ,ݻv=~1طOm!kMA4Nl$ߧNɵk9=gq=\M BCC<󔄄rO9Ս7LZT/]^{ \Y9:J%psd>}H=r$в%}g?$=O>vR4Gu:k7LMlhL.d} =Y?[.f4tLM޽{pvv60@'.]9s ɻkWI} ߗiٟ}&ku*2+DDp`]O_g}%KcAyyDfꦺ1al'k Ҽ];f0{W@N?vNlEث-ǿhQrtL ::!!!ѣp}4i3LՆ  XTв%rt<8# `]-[ĕ+WX~=֭kAQ3Y2C`röNÆr!"hq=vW\aMDdgjUU+iNT?00t3<18vk׮=.T쁽? <(7n}/dv{~f˝)wruS4,Exx86l__\h4HMM-Ç)))ĉ-VfR~?r?/cFfDDTpLZ0.%KRJ_Y5U7)+S_Q\PI*wץY+{g,\O$.yS-[-Z3gŊk1[pѳ1f׭f4tL ͛x߂7|Ӽ!"2$_~$ ^~h4*% ֮6mE4/\R06 8uJ*s ț_Ə41͘8t[,Fa+ߴZmrHMMEZ|5$*,{Jqc`H#*o;ڝ#Gv''I^{}1mۀu͛9^o=|8Pt8:~~hn)DD %PC>x2m )) iii W1c2؇IŴgO`h~}ϔvܑe&H;%8~\~H={dJsnEEdmu|V  ^=3Dm@};rtp888 ""-5?R/5~^Inj1^C`tId۩ɓ…R^ɼ ϲ={|'InB4IU|(য়rREAA@ŊEQGEۖ;S{uW4oaX&5$pJKdO֑#ɰ\7NSW L* 7 ;t …fKdIdrrY(UʺT`XeK<{-eR>]ܲu\\joTˋ^].ueM?{"".dX.VyzݦM,\ժUr~- {9']112xVR%Y"ƍ7?dJ…ŋ$o[~.{zo!U2e2 (U~qCݼ)$sR\tS.}zIѣϱ6m:t0C""Mups2}e`]| }GjpLq~]˳gEs%I\^|=wVIo\"UΟ/KkR=]`;?زߤh4*]`͸.ZT>;V6DLL/^\D Mg""MÆ21s2}e`]?SηG I˔įB}>XSz9q[Nɀ)~ X:|X<(k֔jv׮ƭ;w˔whF_"#w5}{A OKnӧ'NHk8s3}9*`HDDd /$Ν3H,[&*_<$QQɺ^=Y Sd=ղ7377"P4U+:vL{W*ɱ'{|[mc$R+a];Y+'O+3 zܫ~9""$'˒-ʊ-n/zYBҤi};pTfcAA@_Ⱥ3 HUe=FZwsG~LQݻR>y2㘷T{k֔K&2]"<ҿuJ=zCJR]jjZْ=BBGb20VQaHJֳfIg-1tpN}&""+Mw2{,Q(t=Z'mhQnE[IbMDyOy^iV0~<0x0""""-M{Dv*!DLTXӊ._p8~NmβzDٲ,7Ρ1ث_d?~̄,n"z``يJQVdh!Uٴ .NJzvD„H%rnȺ%^}[ -3hlAcnݲǏ;0&aO7n׮I}yu+cJV>)vpȸܾ-{[{{#Go%`Mց 7 e ?/Ikݻ2i@ɒ@ٲ/J\ד'lѦ eM)OL48rÄlƣG@d$e"I&'5kjɥLJ)Y%g\wwD vsk~ p?c{[W˖q-+{yIMDDDd27M#TLj(t D DhЀo:p3&KQ1/Yb{/?.KbEKI7Θ+ӦON.\d}֮z0h,n)VHQtǏٳQbEԩv؁VZޕ-Z5jHնF Y{Rߴ ضMxU 4i"Ues^*DDDDDye)dXB:w˗o߾TԨQ8|phIK0|l"v&""""Sھ4Xx-smY={L?fgg޽{#""n꬛NLN/P3_bm05BgΜA*UkիNDDDDd˸-YBrdzi౱FYӧXucՋW7[r\M i4۴iu..qqqqq;^0t('| Wn֏#888ɼ4 5iӧݻ7oߎ_~9y~5VFtuhsY@͚51,""""""ʄ ޽;?~5k֤KIIիѠAqtd4]ucՋW7Ɵ uZᅬ$TPǥKcs5V7n֮]Ԯ]ӦMCvrr> LUxDDDDD-pn"""""""`MTn1ثOd~LL 7Ji1cn?1&""""""2&DDDDDDD&p;nz1n"""""""`MTn1ثOd~LL 7 0&""""""2&D*N^1DDŽp;nz1n"""""""`MDDDDDDdLL 7JS1cn?1&""""""2&D*N^1DDŽpn"""""""`MTn1ثOd~LL 7JS1cn?1&""""""2&DDDDDDD&p;nz1n+5eh,ի{hDDDDDD Ä}d 2ȌucՋW7Ɵp[ {DDDDDD N)c0r>>>G2e0dDEE{HDDDDDD@3L0! """""T4#""i׮<<Sxxx{xDDDDDD)Vjոx"c\x|Md;!!ÇѨQ#l߾L&Sٱc^{5TPD׮]qĉ,._jՂ*TO?f5ʠAjѪU,1iϞ=xQD 8:: .;M{A`` \]]c?},0֭[1b6m ggghZe{n^|pqqA``Q%n‡~uXbprrB?f.\@Ν777t/^,JLm(ڵ+_`([,:uꄐshѢEǤIg̟?/^Dfpԩ-[yضm>̞=C 1ɘvލ5k56mZt)ڵk???صkF+coѮ];<~+WΝ;ѱcGL8FJ?n/V^ www~׼9)) ؿ?ϟ~ iiihժΝ;W/!/믿 ̄{X~=lقzaȐ!4i޹wE-pUX˗/˗ѢE DFFRl֦MFX"XJJRZ5Af[TTTcnR) 4HQEINNVJ.iFiӦ)F9}tLѣGJʕJUZj~o^899)_}U0kĈFQn޼wu֊(-HKKKzҥFQO{E(O?xxx(={4ѫK└,С|+Wb۶m?~<_-3gd9tiKfϞ=Aҥ|rt?~\ôyNtt45Viٖd 2Y/Q=Xxwаalamӭ[p-|'/QZ5l߾}Y=+K.r[^x.\Pŋ+ŋW:w?xiQ\Qp 0&""""""2&DDDDDDD&pn"""""""`MDDu1 0*U\\\PfM >ǎ38rH㡡jػwFL2xQ4m'N\t Z.];gڵFBBIKDD_܇Tiܹ9r$֭ZjHNNƱcǰtRHKK30" !!!z߿s^@ uLO}~)]4j֬eJv@@+|||pM@bb"BCCѥK8::=fv_!11Q1uewo }(pB_xx8TLOOVQtl߾==zcccNY""ŋ~fŊswd2hѢ8|p466;gժU`|2n߾/O߰W}{Y왯>|ݑJbjjjκf͚#, )l>555Nchh(8ˋxyF:5`{9s˗/?]"rrr֭[Nq̙_|JKK#JūW|f|˖-100ӱgϞG8q""''͛d7SNEyyyƍ#JP\z5#Ӆ---1<<;wc}:&&&"77wݻQPPߟYZj+`MNNƆ ٳq^,vmmm ;X> eeeE{{{ouΝ/`a88nHnHnHnHnHnHnHnHnHnHnHnHnHnHnHnHnHnH (IENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/original/graph_6_ex1.png000066400000000000000000001775441153663664300256640ustar00rootroot00000000000000PNG  IHDR/gQlsBIT|d pHYsaa?i IDATxy\TUϽþj*) BYJփfO<[jY=(feX@@ *(h* "o8Î2K9s;|{.c B!wtB!B!B%/B!@ !B!D)PB!BQ B!B%/B!@ !B!D)PB!BQ B!B%/B!@ !B!D)PB!BQ B!B%/B!@ !B!D)PB!BQ B!B%/B!@ !B!D)PB!BQ B!B%/B!@ !B!D)PB!BQ B!B%/B!@ !B!D)PB!BQ B!B%/B!@ !B!D)PB!BQ B!B%/ѡ4[RRܠ !;xĀy|xGBZh۶mPUUEzzzGB^B*!+++2AAAm= gggl޼=&݆s"55ϟopy1͚5 111={6ehiqn<ٳgcΝ/|m6QQQ8##σ?V\ 3н{QykI{c/Я_??s! ((III4hPGD^"gaae˖Iٳ>>> jE>SNb@>}:: )Okkǃ?/;uD+i'OիX~}GBZ16mD y4sL#77W՘Dxzzݻ7/^a<<oђhΰ'-- GŤIпY3f bcc1p@̟?5558z(&NM6a___ܹr?h޽***9sfV'FHH@xWn#q95 O<ɓѻwo\x[nűc={{ԩĤI ?bٲe_|6Hܹs...y&Fƍȑ#q1xyyA]]o&u놬,ɓ'}}}m]www 0u݋ѣG#55vvv`#??%皼v|GƍѿL4 @K۱j*|g022;MMM;v #GDUU߳<'Obڴi5jΝ;ݻw#..ϟxǻヒe˖#77N¨Q|ٔ)SoooTWW W"[²YfF8p:L88{,K"..**s~Ϙ1-[[{=%:1 sssѣΝ,L:011iqG OPwLL L.!2gĈM?# ܾ}qqq8{=~-,XuuuL4 VVVx߿plq!XYY! O>ɋ/bݺu2:u ˗/DŽ kƍꮔ"33#FIC 6l 0n8@{ʯB$;cFH`(\qY8cVVVBΝ;q,""B(+++cLCC?^ 2ػ+Unnn,--[kk#/ަ|駌8b 6l0n߾-===VQQ!~NN83Mmpssc\xܿ0]]]S1>^(q~Gg̘8cRg}a&&& y=Jc}]~IdZwٲe2ZӆJ^q7nmqR%Ξ=+9sq,##Cn}z6JYuuǏkI!C0cccwZfj  UޚE&/-mGhh(8_^f .*y!ӧSNL[[[ꜝ2e 8eee eլK.Tjݖc2ˬ,))IǨ1=bDZ~[{~_rqǦO.w}8c6lhV<8qq,X w$yٺukm bk믿Es2''&_ IFSfk8,l޽86gL'/믿H$b#G-[0c8pq>&㔐&g̘mi+6F^~~0^$'NĿ/ 6m/^@uuu 2'ODvv6[cssUaXOKegg]t$! ;;[(ʕ+ ooo|Ϟ=ՕU{h,VիWq%tU(82w}_ϳ9"Hf+~g2ɘs!''GfG޽{xPCc$D"Z[iiiɳ[5TUU1h /RyСCضm֮] 8qxbCZ88::ʔ"''Gf8dew؁p ²۷owsW^y...8r9m6׷O^gɛ^%m1b!C̙3!C`mmӧO?DJJ >|جg4Ioprr›o  Cŋ1cFǴ%X#64=zKիW2dbcc1eu?݋_ 22RR]]ӧOGXXph̑*5%XI^{gϞٳgYo>Ν;?Ǐlj'%j~!>SCBm$54㑤\"G rjjjdj۷@ݍ%y婥^T4|+gfffTii;;V1`K4uܟ={=ܻw۷q w-p]|8p rrrcX˖-HMN:a۶mwۦzeMkUUU>}iii())bxxx .\3gÇ7+---^q"""0dw֓$1kN==oI^{q?\(--EZZ-]6mهit"QB^jg{  kkk\$ۦ짥젫DoiAUU{AUU~CfjZ.\ wZtURqZϋ ՑjxoH||s wLRRR6>}$hiiɜPSSöm۰sNֶ{{v`ԨQ2WR䵵0{ldff޽{ѧO^Iؚ)[v--- 8gϞ&Hxxx8믈3[|||p)SjA 35>Lh}8p 8k{q۷/>C 33P7l<ۊ(J^KmĉۅK.Eii)fΜ)!D@AA>pN:a̘1HNNW_}̚5빵A0]vI_~7n39>}ĉ_}7ȑ#ѥKf>}:ݻ'3_~>Pի2kjjL1d{ii;f̘]V*J,ZU1O8uTYhh(>>SNLCCߟmݺѾfsaLMMijj2;;;ﲄaƦ0f1 )ْ%K9SUUe8cre"Oyy9 annnȈ0}}}ೀbcc 7nߤ֫a_5߿?`:::Et㍽ITTTkײ0ʺvx e>ׯ_g .dLWW03336uT*SݻwH$bfj1#pTBH}wEn0`$$$tt8j…شiN#7߄3zRܹFXXXFL!Br{^c ~~~ؿ?;ѣG7[oƍѣ B!FW^A`` o߾&.yٿ?.\`q\{I!B:]7hJ^(((7oΝ;1et' IDATvNncǎutGʁIQ)>#@_N%/mgao"##!0`!B!,ڵkj*x{{2===b߾}_1vXt%%%عs'9 t޽[@!Br䥕N8~߿_j;N> KKK!00<:;vϯc'B!DIlc 8EQ)>#@Gzg999!%% 2~v((:>RO} ''!-%%2~v4lV7G}_K(22)BןYfuthB!]֙Bڊ!B!9(y!B!(J^i%zJ>RO((y!B!RjjjEa,^0^zJ4C>ROG~~~y&Lcccb"**JX7Aȑ#y[lF?\<݋~ACC...DZc`kk ;vQQQprr&ttt0n8ܸqCX]Bٸq0bĈedd ==&L*y&M}}}hkkc„ (((deeAKK {,3Kx{{CMMMEaǔ)S8$xG\\ &&<ԩS:qa}ssslذf͂^1xzzb-J^!ҫA>##4hPV^^#>>W^E`` ~m\p@Lܿ ###FXn6oތ˗/C$ 6l}\JŽ|rdgg#>>x7K.{=uIVRRvJ({1<<RO y>ÅXpc?jTVV嶶~?>N:Ç044Dll,&OXaƍdTUUť8BCC1d… t̙#ug̙w;v׮]C^<"##ѿ|'شioߎnݺ5իWann.Uo>TWWc֭Bҳyf!>>' C\]]h"foaXpp0BGGuHիW5)#GW^!0`.]$!::ZjUUUagg}}}ݻw%x8s JKKFll,uuF㰷oddB")?l,''SNEnݠݻܹ#ciiua͚58q"Oh =TYjj* ?͛7v؁T\r8c?es>|8HЕBZ)V|GʁI }. ںu+'`+W"<<ׯ-b1PSS#ptt\]]857?c3f ~ C cDEMM D"QkkkѣGRepppe֗$rD"ԴX,]зfs QB!-ûE">c̝;+WDݑ3f`>H?;~CBBpPTT\8q$ߏÇ#66ӦMÊ+lٲ뵶FddT"##addK.۷1sL4y-$ܹs=z\|/??ЧO86F!޳Ϛ5 =+{ơCpy RJ^9ObС~zܸqX`:5k₝;wbŊ8|Djֲ3gK.4iQXX,^yK.EXXd*!-- (**BZZ]֬2dGhh(_d,\Y=KÇq}!33Sjd "y(y!BK8Gb|oߎǏ#$$={1tPJ% 1l0uYMTYXb1ك˥'Ï=̓***aoo;vL(@\\zOOOXYYa̙(--6vڅh޽RO} '''j"""a\xCQٳ'\"5t}M !BペDGGwt( #,, &.Š i%DQ)'G}y5?gӼk֬:B!յkFΝ;h"B!t(HDñH=/B!@ !и\8>"( J^!B!JBZfQ|GʁIQB%/B!@ !BRSSzHe=^^^XvmGңB!/5???<硢333()):ݻ1cƴ[2e ,--ROe#=9ÄaZgEEzիWLΫ$xzz"!!W^ŤI~MX]vŎ;:0RB !B^zb&&&ҥ <==#55UX &b7ppp~?rxǖ-[#G?<<{_~Ѐ q1BCCcǎEii]TT 77nk׮xP6n81222 &H߼yӦM>1a{ DVV_~%&wߍqwwǢE0}tcʔ)B<#..q)B]]θr劰_~ =zeзo_9rD^OOO6BZfQ|GʁI }TǠAr?z*o… >XgffX!&&PUUDxxx4Ǻuyf\|"^^^ذaۇd"44T*˗#;;PWWǛo),_t),,,{Kk׮|@?p9\t &&&;v,jkkaccua(,,͛71w\Y666fټyx]EUk.Դ+K())TV# BIIIaXJJJ秵fϞD"f8nҤIO?e1V[[ˌclլsΌ1X,freDZ~I(;p8eddek׮ej10XNNPv ˖,Y455޽{mׂ dm6fnnjkkO2]]]+?yxx0www6f̘aaaBBBYnnnlرRe㖟/Uqי3gq$q+++5k0===vMqtz 绶+/By 0.]BRR-5Ԫ >ttt?ݻ ruuř3gPZZLDvv6bcc1p@7ɷvvvRe`ԩ֭tuuѽ{w;wu,--n:Y'NѣGҒ*KMMEaa!tuuǸyގ;+W <<qpttlԱ8p-[HtMj.ÇJG@!ՅaR[n=>޽rJcX,FPPjjj:#>>с+bbb77&Wf?T11c0~\@06H\@$5X6=z$UV[[ H䅐Vz (#@}q%X>۷oǏ={b:t(tuufpuu6l, &h~b{[[[`Rc?>`ј7o|||PQQ!7{{{888رcBУGxzz 3gDii)k.DGGcy͛q)[GGGܹs[l0ZSvvvŒ%K7yIlٲ D.]?PjǏ㭷jV?IIqcA!%55NNNHIIiӍդEDD`Æ xbG0RSSk::: k>ߵ]y!B!R|||PSSEa^}Y y1h1B!"Vkpr?Sf~:JtWQ)'G}D]6,uFC%/B!CD"9;4y![HG}!DQPB!BQ B!B%/B!@ !tDqP)'G}DQB!)555pppTֳxb̟?xQBH+;H9P?)zy<FIIIGav UUU3)S`ii nuAbXljjjuׯw`B!\\\P\\|8r;:ٳgkիV^ 333E!)) ׮]êUqF|:fffM:0RB !B^zb&&&ҥ <==#55UX &b7ppp~?rxǖ-[#G?<<{_~Ѐ q1BCCcǎEii]TT 77nk׮xP6n81+jHOODŽ o޼iӦA__ژ0a YYY޽{hjj"++ /PSSƸcѢE>}:1ey! 8ulmmggg\rEX6m=z`3f .\ U'IB!/322A e?~ܺ#33111*$&&ã8֭[͛7D† o>$''#77Rq/_و:|MaҥKaaa{@]]v5x#&&RO1<<JIIaXJJJS>V={6DL[[3㘯/+//otI&O?1Xmm-322bd1ꫯիWΝ;3gbUTTȭ+77q~'8!] TRR8c999Bٍ7.[d d{m] ,Ƕmۘ9ʞ>}tuuYllP6~x٘1c܇ i4gcJI[~~T9qB\gΜaDZ˗/ ˓qLj;;;;x3ѣGkڎB!7`\t IIICttP*?wNgΜAii)233وhvvvRe`ԩ֭tuuѽ{w;wu,--n:Y'NѣGҒ*KMMEaa!tuuǸyގ;+W <<qpttlԱh͛f庺:6*!ʊg'>ROe#uuua֭[aooO>w\X~=lmm!$5;{:::puuELL d<ʒ`a̘1pvvajj* P7M$!77555D ֯GIY_uí!PTTSS&bXwyCjkk]߳$j*|2KbȋGW^!b=cmPCH$} W0c L<BNNTnnnā.ߐ "CW^rw޿?>X`Ŋkmm-s]###XYYIhkk}CkFFFq cR" k֬ v܉+V 憒YfΜ.]`ҤIHLLDaa!xb͛sss,]aaaƒ%K:4TVViiivZ'~:pfW߶m|!22k׮z033uA%/Byq'3H,>cgϞ>|8 ]]]Y$\]]< > ===8;;CCC8*X,ƞ={_ IDATX|682 dUBǽc>RO} '''j"""a\xCQٳ'\"5t}M !BペDGGwt( #,, &.Ši%DQ)'G}yn|o5?ݺu{aɤcPB!B:T׮]M:w!B!ҡD" "BB!B%/RCr>RO((y!B!(煐Vwr~R|-?9EBbsB!j֬Y!cWضmPTT >!!!ׯԺwƚ5kp5˖-j'BQ60p666Ԕ)wmGK+xyyqm"//Ν "";w.OT|x뭷cǎFA'7!B? }k;J^Z޽{022*+**9|||}vTWW[npppo&_ 88W\}[Q)>#@r~j;mM\'Dܽ{Wfܯѣ?PB!BA(yi'{pKFFW^ZrG}>"/ mTUUaܹ044G}>@f}}}}?5oR,#TV4>AOk<kveW 7Z -/ bc sAJJ ;SSӎBiutǿ(el|՛䥃QF¾}0zwqre?ξGY$+*}xz\gs͝3@B"$=ꭖ|+I/U]9U_ N:MTyyڦ=ilܸqܶ>`i]v.e{a?X~KUA#(Cƿ/nrm Ōn'y(Nx9_ظ{F>v 1ό?_ZTۿ5\3`OS޳ۓo"m,_;.>O{駟fʕu]|S:,Z|;|_OylF}rOQya7 ܃pѸnޟޞvߏ]!ww](DZ. nq9G$0|_||;|ӟ梋.ro Ax ɣaGQ=)F~O?XL#A/mb*.)Аwiu?_/I𒃇zMزe [lܪUx'?|{;狼|+|tcB!DxyL^9oDsimIoсmOfe LʴX̌ 5{ԼxD !peY02o nu+g.9~8,y> _Z8 m3s=6KږP{,r}? !B13ɓp446,\v']А΍7D hvpJAhlm2!d;D]rʃ'~qWkI&U O{g,gF(*/}c)c=k6X~wuTLSVy !Bl55̋8ela.c ;¶Q>eHmt#U| "G}rʃ'y8|dMMgMצj <BӵthT9I)˶5'SC!B3!e>s_87ƺ#eLB2 O鲮H"BRuSWnۣo8.ump556-p]U(72`FÌJM!B8^{ 탫6G e܋q?^0vOUjxDl44I ^ȑtH>9GAΓw8!eZ#aYb.IbvH]ml"/ḛ j|5uYk!| #j6bI?+Tˏs;l ֦;+}+>hbyI&YLA]Hܜm 6Y(MIOX.^zQ5f$)'+WDS?iX I~XHKlN `Iϼ]dE!De{ 'piiEU82zWrI̔)[=KPF Gc~h8-}d42$ẹ!l<<~'X<즟ȳǏoo4Kӿap;zFP鄫ﮙ&+*H8k2GdaJ}!mVqFwaF\~.;"e" [F5f䖚´LBPG% E!r$OQy(yzmx92m{cz-S HA)?}tsX2̱ñaA>* ^BT.ui4k>ȑ~V^-Z&b J4=*H8Kヴ,'AIsTz˄uK9g3,i^;Re>~82ֳ,˙&x9t<\y[)cel,D!I"2> O=˖9Ĕz?,6,\6O)}(ϧX}/%cN1ymF~)ce 2m\HXZ`4)c @+.8m8e& <(0M5MR/q!Le{>}4HR6* BH:YyPM7"fxctԶN_Z2VZ.nchdeB!%] GY%܈OOq}xjI+)_f^F( XOBʲkrїo$I߱>] ]`\CI H$S9 tM/ʁ%!%2& SdX;?BSkgH 7ʬKQT}26#Qb1!riTx0<_¡CZZk\_poFqVﲰq_y;1zXsIQuBnJij46N]´q,e}|e\H";NowrCR:W[;3؟L,]lN(lQ~F)ЄvȍM*.c'FN&<%eH"D䎾9*Nr-O~ٳWٺ >f䧹b oOP~ 斷w))pwɰo5̺D°p>faB E!wxp</~'K(D9*ڱ&2dRvKY[16VZ<4Pl \m,*/B!c:Bpm-6+w^.c2VnA9 @$rj#9NV' < ɹJI?C=7n*CMf]*/B!ҳmxA;xK?t_gvwE 4g+w?=Cxmm8eʍ Üy6F(4fSMr%\(M5MyRx̡ #}r dn8zIK"M=fƇ*nz=ʵ+KȬK&E \q hi~sLjjs.QW ^B6"~fu,lQNˎ>8"$}Τn0)G4Z[sM$mH""5`6NqOEXLc#Rރ}5?#agDGQi5CO,ѥXBK/oʕN;4>2Hk80t+F@9/BYFFͪNW1> T̊Qos$x"Gi>xeʴky]rHnc90xW^嶺.(46'D2Vn"ՁmkgSLyȆôԕ׌/B!ƍiw3M{OcHIv+uʘȟ6:jj} ˜321:68֞M(MӤXB1[i_=̀Κ J`5.DdKn*^KI$FMYڮ8mܗıID!agq/szXt+#Gy \z1sҟ1y"`ZLTS2R #d}ruٰ!n  PWRƤvrf]z渓2&rŢP)cm̲ȩfi'u,w&٧@E!de活=cuI}R}eZG"c= H$%݌JKbpȩ5x1m.]H!r$OQN_X4XRw&vgN%MYڜ|tˑiK鿛A)-NcX <+2(!Eõ:(]0tlF??lHu{哏CFNa,e֥1;-Gr>(c=WrRkC"9I136q|r[ !<P_7"BxSO3ΌK fOuT./JImr66|9U$x"G8MbG~gF{e}m,9E\I,Y矾2m̲`|⾉ ^+l|J-=2b_d3fhB`ut= טw۴M./BNֹi}"հjoBK)c^bYӋil$1{iW_͉'ٵkW};;;y{[ !;}pUYE2VYbGsMGe\m}eIX2TJWxyܸol&ʪw#dqbI/ŧiB!GA]D(ztM.a"4m۶ /(9G۶9./7GtV]cPmltˀaAJޮoW٪Ysxݪv2Vdjh IDAT+Xx1p~ٳnOQ,;ws4p>gszί*kുX,D s byqSʩu)TƟ”tfe͚5hC/2oƖ-[x/qBI__0,#elg5>tnlpSCҗ7W2~{a{DZ:Ynw]|gt_F(Zi\r}cK2iⅸl6&E̟$:?nڦ~U{2kb blӄsJSmȸ॥ns9f'_eI|3|4ӟrݞ~Ӕ>wͭO<^;tM| i&w(WBOOAFV^W1\zߥ&wjEz8ւn$k 'Oh)ջ7X q~qC,n[\y\O]{"(4˂!/!`~Ka5.ELKcg;mÀ`: 2n45a#Hp؊?<O<'OkG}fΜwu> _e2'wOϕs3p$lLV|uk rHOiR7"oPi@-_u/ԫչ= B{bf[ >,Y1msmeP|%Gi~,XpBlۇBe9Ӑ) vLT õ}6'HG)A.mח$[g `;Ը V6oEK}'-5[Ňi'HGCGiĩל?ZjjV̌n$2)uIrW_DP__ ua{4l|?M&Ka:6YzRLe~'E~ =Zx|]`/:F?y{RpƢjr˶8=z%K&/SyMf +i,i[2xX#>YԺ@]֯r}?)B{ e w`+ܚ-S_3Y7H"Ţ+jjBvg``z:p>ԫX§2 \CDb u}vj~6~V}2l :7 ^eWǂ/M`烨Zn(A{=E}Q) (Rw vw/-g+;vV6mP@}My.P7evvVZ->=~B % .(|/<~ϫy:Nj}u]GT ?u@i \޹d۠3qFsRヴf3NPQITIį$O=KGJ|k]+CάOWCc ) ^ȑt^s1E㠖Q`f)cϟz\7:՛ N'+-GR/qiѩQ6X.2 2_ZƴMj_4ZZO6Ehsf~?eX2+ݚ+FVmܓ $eL/BNםŅXP);7v]WAnH܂ce vKØVt2KSJe\*PJaX AřkIHX `.OLŰ `VipB"9n!3Mط,R89_y W r J) a>xi-@;SY9R -a;ãmmk+ -Tʠ° ࡫p<<0ar+iFsm3CRiЄȆ/BuStia>e)c/̡C`SQKT#DRƒ4  W)*<%餌ef+ϟ̋i4L*CԶKw5?}n}l:563'Ld+Ȣ$xBdT.mCi9` ͓.c"z$ՙ]mm8Bk/ӇPE%-x Bj2RNNbJ)bV7J| +qva;]~͏a3,_EQ o+XW\~lCGgE}Q,It@ٿ)K8m=npH#}I8#59W@g 6mShAD2N4`#H±0m Ȁ/BH/i,Ul{2/===z]Rt'+K2K먺ڬS]$Mhi<T 44O;+ k:mVȼY{};Éԋ*0m@΋#l%BԼ`l`i-LVG"XY]CS-'w(S @rMh 1F)Ũ1JKtŴM 8B9Su3l?H$Q^$x"Gm]J=0k4Ȯȴۘa/ƼrԬ9dX;wMQߧx6e24I9ːϑ>n~K8]ʘlt *bf OfKW}gg .5`C mu2& K!DY:r`ٲsR̵ŝu9<|ߟ=]ƬYE}/QLӦ|>qRʕareO.l ]ӳj<ROLM(:BDbIۓk4s"o' !D_::G4 )s~`_=ns֯MX o =]CX;wm#HBcwVgbu2@JRE.^O˲$ iVߒ^ɯ (TN>G܌-2m/]Dɿ(!D8p] gOe`/Z<$w;׬zʕH< _BkPPSG%Ǟѕ[;vk޼i}dsY:\[qj5yw`YDzl0l~tMKin# N!riԽNz?W>A\Ω6n_fth%쾃Nmwk5MgaœޫR[6ߓ59Q645a͙Hu2}~w O^}" T>F:ҥ&Ȕ1p\Ԗ}`6w鴇2hKjȬŲEQ>nu?v}b^OAAuE,b[QKZ_-FEe۪҇餣e;#d۠"2uw,-GȪ} Lә&e $b}!|:ȑ̺رcw‚٫bӑ&p Nq>=,gg~* \P1.+~Xe2@0}Yu26[УѴ.$[ٕ [h&Y~'j!|h^fNcGgtQ)4D5 CNWV|tiBПR7 WufBdj>!ap-pfΜɟٟ`Qr"]Jdx{ fφ/>sf?6zuWRSٝjQ)ƴx k(Qp!ҥ*08np?V}mz85thK1\/D)|d׮]lٲq5k裏8:!DJ=8_Ek2&%C @NCF55Ĕcx ^F|BN8^y+CG\y%b \j|` ̨re ƒm%x9Kաآ'S0M'e,Ś-VG'zIWˠ47IIl ^5BjegϞs=7s?<-*D.%cN˺ug︾zvo8Xߡ^zHXTD1e;F+{!ncIybװ1(1,t%h:s*|rTe.;`ܵsQJ>=)IS 3muM]jjяYS y4` :l1ad5vf͋Hӣ ]r-"t&x۸曹{,]zݓFq:43[Oĸm_NN˺y\yQc[]XkCcE_cξLiXsN]IχtYFou挆46V0?ӧ5=}~4fk f,A5MNcBdjݻw{*-LB>_~ݱ`+4-,3zrVFc<}7.fYR#ŶQDTC#ɓNUċB2?5?X7̽| Na_b&<\gQlU_qwVPTYVʀG_t$OA]HWLKHM,͑3\.> Q&xo2\utv=4"aOk| oeltl\i&Twt(=ܬC{;߯ИLP;Ͻ4x¢FRƄ(I;_,رcb1"D^ o,]&VNv eW3ci׉u7} m#3jzjY@H$Wfxxo}[?3o't{Bdagq/sMvW77s{h;="C؍,Ϯiz싲3[lQ. v1?4- ãi6A:YERonիW}qžqM7qmI#vgˆ cZ?(|ÏhWhTb"t-Gvkip?Vczds6XF(4w:%˘2FM IDAT2秣NX6H#m$DT?I-}>eKQv[$K@c&sìjES ؁2 xD&SO||ND"cLuL]? S\# !R5'[0 YES׿w.u{4i$ىҊn&k.c0em4 աb<#Җzkb` ԱhjV)tv:hiiHʘ.oܫ;v###|ꫯvidBdovZ'64yڲ ηvRc(6?@nDt:ͯS S!>ԱLEcMͩO {MJP5;+Wd6ǒ38~8 K15M\1NH. e~Ku/Od$=szKZP1[6rJ3:6MkJ1Su/SusD2;ߗ~qK]Zš_0#( ^wol۶~Yjv]tCbڌ| >rsL}T}ի~|O=W33U }4jls+SHjj_I)4]I3gT, mMDDBӔ$wP-<~M(5ݧi=}ƞmÉuwO0 NFx*y.U32880f͚ѣGill1nBiB_46o> +50>zԦWB6[в]zqFGK1stCqF}C HDc"QWtf,l, ᖪ ^>~I~ ̅ 1_ vR.|{_~DžBcx\r=Q钝ƪvF3^EүbY>05b\_QTUMSO3uux'J; !qM/KQΎC;X7w#U2o,=5W`ep bF`jUMόSw̙3%(wL'mxA'uTS3W=yk:μe 1Qd'e]+RݒXBgt_s%QuӼeIU̘1}MoAG+1{"A?qkҊM;;3'~,m Rh8*B}1F{{ӭb۠Q)cѵ|sӷfN:5nS;X6;[HʔdeE{o=CXb?"2yFFӭL(ҮbӯL3c˲-tMǧ{oE:XjQ_qsWp~3grQmF0Cp:غչS믿 U.}c]d}Q:!:5폰Sqnԑ0S{l4Q&x3gwncΝ>}Nn&o1g(p6ضF]]y/1+F_R pS/s宻r{B*e @K^PΣ%a'X3gҰm'p8]XXXwpCp|EmU_~elok=VXA(Bu|)W.?>1U(+ź޶͹Z~sQ5-XLǺWɮwq<辊mQ(%N iީW>3u{߫rGT o~OOWz>.2>qseueZ[[Yj0Ǐc>Oq5װk./77ʴw/ \y%tvNx2C 5`yr#fZ`H$ǡ&fN}aiԗɒ)fd!I/}}}\zgog͚5K\s5vmYꫯĉܹ|#Sc&_׸G:??W^$U.<fuLg}YN<7 oߞ{ʷm8UrXBCat%ʥc[ڦ e[tg Ც ^~?<3J){&gV],X@(1ð{7\~9LNߓl\ym#4jUnGT @ӥX?Gpv)cI `Xi&YM\r s+V;+$86}a gΜus---=EFF_սoǩf]/l#PSzE8C >D@Q$=M \$xmFv)cI.f6Oagx!U+0Eᶪ ^oi&~:g{GX\ Νf (|So} =b+>YNFOz殝~,[6_^@ɶ<5cD I]T*ۆ5ftOdx-ȸ j\c˶81ri -ԏi9A҃Ew}wjles|83gduLeiR"w?ëݻ˹袋>bŊqhkK_$i'܆sVoOl//~0y{3~o.XtneӾ4|h|1m!>_sqoeu3εΝxAsG{t /`MBF}*|yޚv ĢJ_)S,^2{~{#쟰 qۓZl|e[On?'&'m7m]G)3.>/?O{nO^iJ}z<\{g?Ӭ\O}Sg߽ k?+{~?piA ! ebNaG"X z.c04i4YӉ j,\<ƙ>άY)3,h?KۗfT5Ϝ)spr$--91Mi/D (_r}?ѕW^Iww7sϸ?O؜*?HðnޛKV]gyy[TȚ$  Tz~BxarGa+l#ɊxVݭpm~x-u ,%=@BbU <WO}S 5bT74qcOm?9DĘ!; b( @j ؝23 C0(a~+R C$)%, >{>V$y}8xڎSW~¾pl&3(x)c?s _8Wn kkk>/~2mǏpU7sĘlzU\9zz 4 by|-/H˂4zp3-$l0ޚHnq z\ũ) 1 :o>x5*:L9%r] z ^4Ewwm w S~ZUÿ+ |c~㬥~T8_8?qn,66 4OBle08;`2d(b*C$TfW!Dj{<o)l*~@ BH!E̪h6}˯Lc"D)# nh\DŽ0|R͉ǕMm ^xb^ 3.Ģ0m݆#G +ė%|{߃X{ 8uJ.G Zr\ʋpF0a2_ *ꭳX dB^\1Tnt+`˘RJh ru*!``@M6EXҋ#N7qss?8nVa_%*qp W:!`]@{S2w?)ޓ{w"qs9hlgCfg3+,(aagyrj;[04 KGZhphH,ǂ0kꜢ9} 1:&xa=yw$z!\q~C$ƌw/#SdU1g 6ǫYyk̨0'ǁd\1<#;N\{g> AV3.cU Bė w&| .¹sGz-Byn*bВI&2iun C53 [cJS7^]ƹKz.fP/GkX]bzX;@ >9oLzHĄ%~`Ǐ#’g6a_rV{N #sumlVNjpw1H,Z!tD>-r˖^0Ő*ZD d1ٳr.!h; krY^(B, 8$nv|S=܃K.kkk_u^~I!R<vQJH!&Þ}\pRʑ]H>F.Ĕl~&bqbII2Bދe e0mnn @e pČ8u"]Jw5 AH)[f& ɼ|G?Qoz=ӟ4ڍ7O OnN7: ->zW3bF)U6[жZ6Kr2]IC~0džX1) [pdo>#鐒aeU)(V׽z.!Yl"!7`9VcиSS`oQV[ƕʞjȲ)$b,LRO0D0D ' #0pܺ>xRE0s*@Z9{:Ӡ5;{xoF~"Xb+>t:)D2SͤuHJFD[3.eMӰ/ͶNay9V$qfX[os2b}΁w],[^?[8CC-i]1{Cs$:?[~#d.7;z!cU| GA@o'` 2WޖPF=bd8 Ak |fS{Wy8S-,%$_S{\?_r%Σ'3(,_L˂q}Cems'$c|W8J[BFc+6Υ+ "QϗE0V.n|di+FJih`h À04em {_6݊ d^R;{9Ŗ׿/L`TĨvg7{eh?)K.\SRJ?q f}TE@Hޭ6MB\4Z28,sN2#Ȫmolk{[B hl'3 ԕtM68+NeA`a'OkK/v ^R U߂*ʱ$c?9NN=W!jz?E&A"y] S:ƊEH}ӭUT3&4$3͝ő44%TX(%=npy~AdadcGx/“O>9\8v+qud'x]c%c~H9nQeKKLn<۟ǭw-n{')UfAO)mn6t4VH阔`܌+sHv=d^|A VVc(ۇT*?<%1,zucބG]; ( bFBWG2mqudY2V^!˚Q){AAliǶ};+H2FT2U4 ]סit=GG F+8ܩaP x..]ǒCs4Z CI,kgr2XH\i<^la͆┐Bn5A` F%c>ƒ$B;Fd5TY__G*r;<|߯_~GQ7XEC;)'@.c2iF;1B$bq0wE/弒)g/5l,EOnq@^sl<!$$|6A$Y_8z(~7z+N> ]8rȤH e즛:ǶsޅG0!l!rg*㨕q;z8,ڭfNRDHd8h3θQixʶX{r,9 _/}V7csW IDATs_Q.qGH !o}K*}w9NCorቭ'qqb h bkxEf=ɹ.8r2c :!T 6q qe8 K [,%qNx1 =F6w]w0 |k_6cǎpLzSw>`tVvZ@{[g`]}=p3|܏?O?t#BuQö /xnH]oyi@@8*E+T2R]66ơ ɶ^dB}8hE6jWڕ4hL3)\rd}L\0}݇[nrKmW\}Cm?G7}<8k_> [poe]2 _g9 Wm*ӛHg6J&C08:Ɍx׌:`*33.Bw͚H JCcg:u  f|+H ;!M쫯mջG{p9YM?4G-v[x_-'@h۪=PEZ DUtjsV,ضuju8&$u#bQŶmMw|X?yH qZ;6 _ P[·_F_dHӎ(2/\kU;\%4O2!6Ko< t>1S7a9Vd1E9AS\GTݮ:'?A.k+ئg_Qy@N*T%(LmwE=d5QK}.6O3 )ںɓ hc4}nl+%2/wɿWS"1Opu9Y4GĢ0g?Y3JJ> R8~þn't6Q zEė: ɲl L`8)ۂo0\JHlVB.bKFIJvnxeq*N>UF1KurmMz3Ýw*Y‡?< /"\UsCRޓ"p9WMx1r Π>]z6Hn[ Ty~z tR΅[o1H)ʻVR(srNT:`CKzA 0 +O> \z)gϤG3d̮̏YGAk ɹ:X hzpK&w$c.+kNCxޘ:֋tLJulYW'iך\ )d b}7n]y㍓011X7|26$9YM?4G@WQඦrX4Cd%Btbqls:B2%%c>k\%X05ӳ CsD, X$W^wBTOv5]@D&yT ̭5T "%cnMs&0qՒP0R3-ƵRI9\(S6C2FA˂s; :4 nJ~ 's' bt_ 9YM?4G@ !iR/^9͐LkBbE" z UCˎTJWj*a+)) !7'%'X(xYpSIP 7x9J֘\eCG[&a|PDJB  [W%^ b1|Y+k<ЫdE:CAL,8nǰ`o'?wCn;?q7~#فe3H!AR/ze)iXa`:W*g=k``HX w0AČ@ v -s;8!r =L%}Ǻ}AA, T?8p@(|㿾{el7[pBR*ذx{A] ,'\Ww9e!T2N_8 ^:G2%R)dвU >hkalY*p$(xs~ж7(5 f ^攧^x?p{QrJa oFlKĴ6#U.l]8Wj0dpwbo $l.^bACaBZ<B5y ޗNE( rNdL~ 2}5wz394c@($Q,]pjUU+_BJv#hZ^mTC6 ī x@drUoqWMlU6(n@fY&YJz$kYQ\hE9;= +J]vŒV/bJh%\~QNP rMSQ njL2~j9t̑%S_j)!I&5TZ-r# ^搗_~SK={}.=#ZY_m3k9rl,6Mn@ fqB8Y7.^EJ UT)̶Q@ (@J8 X6SR!ݦ~@ q<%c,n<.j9" ^U nq=wB&komxcJb()s%*R!d).j)ZEm@SxB"n ׹LE:ðwa,VYaybaѳ^JTbdAD(xCC9z󟂟|Wm!=οb@ %x"vuY"Y /!CV-TnYTB+l1X\TlĊ[eީ! zc>; _^~Jo}7m߼.@< <;R],Qvy7m6Fܺ.UfftCi ӻcQss=7k\\XߣX$cm\ud%Uc/ `oBAe]]2F1MP2#>E_yOypYOjd8 o ۏΙdlA{rZH/{cۨך Jcl }5G©:i6t~f gT WMeR[H%>*ku/oj x;P!." lJclnj1F5S(P2#xi$OR[ /XOQ"1R<drJkmUI@pS3`GS&z: nҺ:vmS)ΑF[f"h׾\a۟7m)`8H+(x8g~ wtQI0ʺL?sē)3g:\v.c[j\VDcзx/2|˶f=޶#3gՓXBhs\mn"\ԣ;kd+3+YyDJ L7'( ٓ()0A,*2QEzJ zڎt x* я0 uݳ%_E%@.{?ML8"5Rx 1 zqTHQ=+$ =(^?_&7n60T%nk&DZS̵Ut I@gYZAB`KL}ag 2ϗCb/\ I{4ʽe`.|5 Bw9'p_5xb,d46gI@2y͛ ̀-tsnc1 PldO2`ar,^P6jRiҹKL%-P)3A!TS#]Rc.q(~h P}lnnøKq{Ӭ]~>5rq$/w=V MHcy3e14Lj+f)ͷ<38'lYq*8S: 58Z9y E.[g-6:\ 3<`ξdmg \^?Zє4$65&NNcر%,aj q|oC!b ڤC kmÍ7pX__z4?m^r`h8v>M_ V!WEwL!!૮'n8O,Kq IDATɶMcw\p$ Sm͝;2Ct>2^~vp:ۿ>_%cjۛeU38KkrD}}cA3^;S?ϧ )%Okna}nP)vNo׿u|ߨm?~8@ kkxx7hSgSx-XCncC;u 5d.* kH;ppO@:z8; /lWxqEqڐjQD.!_yw%p XwoY6.ZhO"- [/`odDCJ)q*{ ;5iCs4</Nƒ>} ALۆZ ӅqP5, ExL,ǂ NiC 7mr-kdD0u~~`L" l? >O{^a<3/mz뭓 (2X 8s@(,Q|Wu,@T)==qGR`>J`˕/]S_) R +W`Myn'(u9|0o8j| _e]{ }{'=<8r`>Ea9Dtnfi5 y2/#o7AZ2 MbSj*{R|>)%N_玘ri$M`L[)gbc&Ln f ^?5ysh|dam71l@'4DK#b9t['ƻDCulS iA1!8W?Nf(ײ1R=9+/S rL RJRL(5 l, g!#5}& /1 668 l9"1;A]g%\]e9V_ /\97؀DE ^٘6s%cZqJDŽ  Anc=PȃBm1a@:G88[8r{~<ʧ"9@gzQd=E}}Zp=%vB;Q$q08; Wn>$$xB39YM?4GĢ@ A#g2z:g _œ7fbIX dje ,i-16ҌrpjUxXYoFgK'.v{#{Ct]DzA/A )!Yv4iW+)kT5 ^?g1ahFXh(Thx#FvO٣aqmP)`=4 b6AӅT}{_0J h\Ym9`)ڷ S7B@uabq,UJa9ܲݕ?RXz􂩙 46q J|{$6JBnc]z&ڙ#ᚷ]rAo2XG6dj.Z#{Q$ a3zhs-lhLXcfwgA!C4(k5^6ehQ9"1U0d:BCaRS)%*NI: ,&.c &b >VsT%*~VB >5-ḟb bǷALr d }*YE( JAG8yca* }GcHΟ-go$5\k龶}fRBkCנpahF-xqb$0.IqtNmz=G(ϝ )CBYNe/`Mд[9D|6~ُARE:^Vqe[8>-1^/y+V7ב,&kR@cX?X bPBX$X[c2ΕX}~. _j/%|"#S a2MU |oG|<d)YIj];hv^&R 霸 .Z ["u]j\-ұBh%ENf)bAr〹Fhq7R-Ll[q7|Ƽh{w=vp1Ln%34pybhޡ9" ^>R,}8%lKAJ6 b}3 7,,j$u§\*N~?O9ИKXpŕ ).X~A7ĀX{x6O%wY/-,qk*L/x]b;aI v3S0562Vkl9<$5Ǽh0G(PB->2@$˗sU)%@Ȳ\l.cTU+xɖHsX "YJ?4P2 @)ï'=4 b^+A#U-\%) *>Z(%4T?JkzfP$/AA QQF6ɜˮZ<1m(]BuJmVw=QQq*swzA!ncnCsF!McT*t*owrڏ-,8(KkǗJ*i3j9$vyIRX V$P g7$S + #̋rZ8@>TqL++}+vM #]N搜cPɘKŹKB};7OmDB bDLAL1rsl0" ۆ)J` \HRFe *aĪVA8+!ZߑCK6<~- cq~}'dV-`Ix'װ^ncm%I\$+4GĢ0_ymCFJ% L 0:,%粵'S+ R"F*_Ep}!`DIHX Nw0zlAĢA A-2+>K 0Q+5HR;OYe[+B9-/ d4 J +M`R*iמZCwfpvWfL3AAB/8xe)a@$LW*Y(BbDahP$a Rq5" UH;.[0us8vk\q*mqLA/1 IfMVX'mLYSu2w˂`:4|F0FyR p@2TG\j#Iy3R ˁqmq0풷X_4oPqCs4/1nMSH$c$4G(PBc9Ҩ. {{\ 443ሲ\K'+]:xt$qS92XF6,J0 \K{Ml޳,H 4 y*nAA /1fX6 48 {lb:XU|7i` 1V. 8IѨDa'N@9@նŢ'2X .ʫ&kHRuHh3E@io|[A"B AȺXY.򐌩sy{W;j ܔҕ9;IÎ@#JeFЀfnHy.ʫFd .fcap$Ȗwr,AĴA A nc*E!,wa 5.+:Jx* %VVj$42%.Ju\[6ėʀpaXqT0T ̀4Y9D}ѡI!=f%UJa%2&"\dh#bQ ƉX ^T`ҡ O଴6_s!2߯K k~?&yj1)bDӀ &%2ey*X,ǔk -lnIA/1 -dmz #v /m[Y*7K\t]Il OjA3KJ:ɨ, cP4!-oo\%["dfN.$F<* O(x!q"*o^kZՋU:%pֺtauH]oubA# |\kqs%X]<$#<"?+fSbҥLց*{"%,DAA7duCCB adKlRC 02 ;;k_|ҷ#li(|)#Aˆ˞A0иM8S؄##fy V87,r%- l,Λ! Hcix LJcиro_AA }Āl>PR)oilmLHHMC>ǐwo`/R2 8?ā.Ou |{k :p0z u/_GXp~$xEG`Lmm/8 -#ڻ9iܨ<Cs4/1$)s %/V(CjAh*Om{GIzL92La@; R=*qpTA1jۖ >8=(; ..2-}ɂh` R(/[I:vZ*(jTuԱ@ Rдȅ;CAX)Jq5}JMMli\%۶2@= Nkw$oSB! ɕ ,ί:v洔m4ͪ~X5*35ssa}jwc* Jӻ2k~8:uVJ ;;~.Y FY[g)KH/3ugswk/ hkJD5s\*\jFNQuUIDUtP8t]Ƥ㝗-rk3 9/tT[)bq KnW8n`3)**Q:u ^)Uu+dTs^KR=k8)Ĵu QBy)1lҕW^4eI~Խ{]$7+Y[;p%d\5~hkVU؜eDNO]R[moIR +H9T.R4)p:#jg_tʱ:HKϐztU0p-;;N=]{mbK U( ɛC #˪\)2v۳ײJt`0zͪ*]Uܴ }uQF!l:lVMFO ,Y=izHnyA "gL@ j?r-t{=xbQ TfJ#F8- |lO P;wg 89!YP"u+A6lBYMv/)RՒ`8tІpV**(lTKEY"cd.Yj#VSي!/N+;5|UUENmlR'M5S[uK89!YP]Bm5Nw#mԱ`0rk\.TjC꒚i|ŒBU6|( 2e \(^.u2vL 2u_#b]P+E)&jV^WˣP8QUm}6SP]TU[FS$Y5~)'WYk hHIYS,)cD 6,tJ.{`(V_)(^f$c)NSmx"; ?)`dIϑn-\ui!EEWĴxR03 ,|Y\OsSX vXMLzZLdu릔Ӎ?/1IDATrLR^zrD/ZsQqq|>F-[$zXR~ͦ=#7$=]QY]W+Ȗib'3c"bn[^7erlMl}ɂ⥃ct뭷jժUw7G[}DaK>;{OdgN $wjdE4vpw]fϧq0%H"`7nTYY^~eu]nAc= a#kXm]< k7bN-D֛t*/e?%MXg4} %;/lݺuJMMmsݺ;U^^#G$ptmw\M`zWOV(k:%ӭ(&X#_O.%E;'e.ˣTwdױ`Ӳ/$KK۷o#7/S#2Ko#ӻblױP(sŒ'OSjj$_P@ -wgˀRANGFGFHvsI:yuמ!"Ƅa, O`@r\8;11jjey2$.]rSWm,GeEYW]JGJh*>Ou: a ŋCxR<8^;J1RvNX'?ϴ1+TWO;>&sDyyk>2V eŬi+ˣ\d\scg '####$ ݕ;0 ,K&M~n/KIR.vzR7%`lۓ n]¾Ϳ ϿKsvE˅?T[3g\vivio^{MVoذAh/zWr:?P4`Fےߢ4֗&.{vividڧO8ӽێnSmm֮]m ZfFpt'jر;wjjjTRR^xA֭[=QJJvܩ~Zo}]tpKeleee7nEYP([lф o[ ,h _>}OAXT@##g '####{YjVZ׾arj#8s>f6lXh̘1Z~}!mô̼hQ\p b~lڴI=zt8:ؘ1c4c ]{,K;wԒ%KT\\regg'z#Pt;C>p8/\&MғO>Dp u5k?Wmm>c=sqKuu̙b|>5J[lIШ֭[կ~U%%%z׭ު?/*==]%%%z'0j̜9S.Kcǎ{k۶m;(55U}cQl۶MƍS.]dL>Aכ_ 8cǎuKsذa,˼+Ѷ`0h3bĈ,98q"ȑ#&%%̜9cL 0EEE+_JLzXe)c1Ν3W^yozSSb:tȤ!Ě7o,>|8o42Lp8' )nIK.5e_Ѷ*gnzTYYi`s'Nh|>=#F?c}xƴ1XnRSSuGnNȑ# ])((k+..V^^^4]v1cFL$?PH.\,=Cq[SbXB.Ksm%91!+++=33S^Wu֒<֭[]wuѶ.]hҤIڸqEm@ÚSvvnw\UQQm[noV%%%Ѷ^zӺugЗطoAQ_~ǑX{5x`I_d2`~z#N?/_ rJ;wo߾zWԧOy<S ,'ĺyѣ:{^{5m޼YϗDFvӒ<O:p@qmۦbI~?7ӁT[[ô5'O[nqϯ>顇LrssY'5kfϞ#G6؇ȑ#:r䈾o{mٲEu!+d`W_}G&MR%E?3{gS-ɓ Eb,[LzmN1ќ1;xdѬYja#>N8gy&CA#Μ9UVo$=ZZt/^>иq4tP-_\]to\@ zԜM7o?[{oh/6o?8&qxkZzƏmϗɅN:EfO?ŋtRB!UVVJYRZZ9%X~~8#IǏҥKg2Jr闿RSS%EW>y.\3gʹ$sرCv&M+W<+˲ɲ$3ּ@u?CIZ9yZbMX}&{i?x~?uO>D{_~[Zl9%6Q8"}F zCU(OFВ<O|+;vo~r-*--իržNOOW޽ͩ5Ɏn6jڵѶ`05khĈ*..Nӂ swѣխ[71$iʔ)2d5tP|l߾]EEE2dtwSoFLo!˥#FQh1SF"#iԩSu!7UWWkÆ H}kĉ>|~_DwԩSoСCѶ֭YunԌqƙ.|c/Ts嗛'xRYٳ޽z檫2K,GF~zsכhF .yse u+<=j.k|>;vٽ{wgKr?.:t(z}4i2YYYfOS"^Y41!lɎ#Pp@(^8 Ԟ={ݻӕhΜ9ڳgOn~jqeeer\z뭷0*iժU޽Ν;h1c'$8p@.KLݺuSuuu -[L> {W\s٣'p8aRY۷Ǵ>}Z׵^NS]]*=c ԥKZJ'O֪Uɓq} &駟%͓bܹSӴiӴzj\_$Wo|v,92!_W_UeeF۷O~_#F4|Ν;W=ϟ\J663(%%E˖-)\Y|0}ʕ:t|>u]wѣ1}z{G/jꫯ֚5k⮷w^M:UJOOȑ#oYh\.UZZL;VoTAA^JJJ裏&R[ڱc\.\.z-ic˖-S~nݺiqw;Z:b M,I*++Ӕ)Ss͛nIc9uԸ;vLfRqq<^O.c>]vN3f̈i9rb1S󕛛A)??_'N??hРA:q℆ ÇkРA۷os Z`#JOOק~Xyy$iÆ Zxq㒤/}K ^3777g˲bs  aG?ҏ~eBݻw ?~*++h"_>Ow׿)^U(BUTTuFsʔ}* ׿/) #lvToN8aÆI~<'??_vZ]qqlV999r\1c͛`&w^}ZzկFߢu~gq.o'NYRVV&555-[矗eY Bq=~.v#$+{L7o֜9sJnM7$ۭO>DӦMk 7ܠ{On5\xz^={=zꫯeڽ{>c=-gC,˲o>5*>|p[nEg֭ުݻwkܹ*++SZZZݻw.cdE6s 7?QFiٺkdY>nwtZW\k:z^>O֎;tM7iʔ)$ȹ?s5n8ѣg;vLk2d5|ahʕ8P/~gϞJMMŋ'Z`ᄏsiڶmfΜm԰a?Qǎ׾5hڵ4f̘FY]]w׾vѯh мytu?رcx<ݻƍׯ_SO=~iҥz饗TWW=znP,j]>x`kzuIhذa1o-j^W6lМ9st]wK.0a.]wwӟ'͜9Sի>ǵpB~hZdIs=zGt9|6nܨDiӦ©!?ϕ3riίH"uuuӧoh n;[%p׫%Kn!:zo yq#p#Pp@(^8 Gx/#Pp@(^8 Gx/#Pp@(^8 G#9IENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/original/graph_7_ex1.png000066400000000000000000002605641153663664300256600ustar00rootroot00000000000000PNG  IHDR/gQlsBIT|d pHYsaa?i IDATxy\\EPT\@q5@]RCBI3 .MQLD+Jq7LS]\@ȕr/Ȧp|}3Oa깙W=]F~X"Fh4vTV-\]] W񘪪hтm-+sLM}[vQ2-qtLMMqrrLJcҲeKE)~QM6k;ON.]h4[SVggYf4k֌ŋ?y᭷"99#GPBBBHJJ7ޠf͚zu= 874 o˗/. ~~~pf9Ν;?ѣL:eZhӦ cǎse3_}2VZN8ABB7ndÆ ٳDwg4`Ϟ=ܺu({g,99;;;Zh/s.U~KOuY\nܹݻlȑ 0ի?Uaꫪ*|5OgYaϱ{LÆ U~Q3^{/~vqEjһ۶zjرcK{JO3!1/?3T\ j֬[o7g|?jժ%nnn̜9PFy4hвeK6nܘN>^o[O&<< `ccuaҤIdffK.E0{l8p޹ VZ@޽u {}O2ϓd/^LÆ ٙ!CUsv˖-k׎cjjJ 棏>/Я_?Tԭ[aÆq޽7UU7o^^^`nnNJh׮|^SN1p@k֬˻j*|||(W6664mڔ ϚݻwӡCʗ/~ܺu{^z ,--Y&gϞkjjJn8p)))O=^B]{ @&M p]^}U9~8K,a۷^zIo}̙3 sssKNʽ{ ]'>>>믴k׎-[r%G ncaiiI޽V ~)۷o~|:\p??? '>>;Lݺu6m9)))DDDh9 c̘1\ryѸqczb߾}ۗ@v9w{[so> J*dddpq֭[HMMUVdeeѳgOj׮ÇY~=sy=a]6o&vvv_gÆ fN?yu()… tܙ@ecƌÃ`9s`ii@2228|s}֮]Ν;ӵkWuV\IFF3f̠jժ:zA˖-YnzciiɱcNJT'WPzYGm9QQQE*si߾NԩSqpp >>^{V\@ۧ]ѣG,_ggg;EƍAVVgY֤I<<<8z6TbIȑ#R{Xz5Æ +hu''Ʌ= wՙf[Q'7 {޻wUU Ǔt 3޽{(bWXAff&ƍyzy̜9SɹvLYUرcu =1K9oy,ۘ(3RRRMLLpvvgϞ{i&u?@vYZZҪU+oٳgW^X;wNۭΞ=˭[pqq#e$22UV ~\z5vvv:џױ* ߟsq EQ3x|x\OngϞݻt+_СCoܹ׹qGӦM򚘘XGa?In^^^EжhѢ[n>|8 ,]s3?10EK/RJ?^;dβ//[?SN36!55 z~ׯ_uαKbiiscr>rwy| սrʀn {ξlٲh۶->>>z]zMDD|woߞVZѠA_gɒ%4lؐ>}ハޱ<|0]ty6?(?/[h'N[f((*P&M[.t 1777Xޜ cĿ/3}6@4rfIOO/Z |Epm0(deei]6l߾48p.]",,L:V%8ɻ9r& xQSB Eܮ(dff3>/#c(J.xvܟ<:t/̊+={6,YEQ:thms,s^r9r$| 5jԠW^A媪2}<>|8 bʕ$''sq 1->a).C^s688sssΝg}Ƨ~ <7^z%ǴiꫯHUԩS t~}'Kdd$x{ݙ?>ժUV祢(TP4e/ vbڴi|Iʕ+СCk}ވt/;8yx/ ͛sy-[ƬY:uD"շo_*VҥKu!+N1(5RQ^{5:͛7ٱc#G䧟~s\vMqlڴt~fΜɣGx7 ĕ)'N[=zZ Of~9s,-,^wwwbbb]/⅐}#))Ioݻw9t:OQSXuΎCݥOpp0fff^_PF }J9wl ukݯ?G^}_YsEћYYS:tݻw륵l}=r}q9ݦ cǎ<9,(Cۺ>?666zlXX,]˗] tkQYXXop{׷X :tn9qIݑ/^rСcdee܎)L|V{(G,j{1ə"Eyx~$x/={R|ybcc}s֭[:yj`zQSX&&&1W2qD_W\?IX";w|ܼygV/Օ+W_xy\AOデ[la֭:.\/Bt?Kfffߟׯuغu+[l[',,r1m4Ν;ѣGy{ɒRz 0SSSΝS{1nܸ"믿>c nܸي+kw߱pBӧO,ػw׵򖔷z EQ4h%u ("熈 8 vyB䧟~20w N x lmm29@ΤN޽>y)Pjj6RFF=2xLrΛ! JƼ-׏֭[DʕٷoÃ?Pgs1B|}}i۶m(ONrr2QQQ|Wڗ]~d=ʮ]Tz ⫯bڴi C/͛Ӷm[oN6mڵk|־}{ hРгg<*N@@꫼Kl۶J*iW֒3sLO-|26lWёxKÆ ֭kѣG\x$6lX^nذW_}N:affFƍ޽{q[z1}tLBF ҾEQTRv[nӇ5kr!Uv@nÇg͚5矌=:Å_ ͍N:}vZlIy&6liӦz/+?;w\]KE( ]ta\|Ygyܹ!CPV-XAQsvɜ>}vFرc|4kL 6OݺuҥK$$$PB˴i[N:ѣwZr%LJݻIff&R[֭[3fbbbWffflڴK.ѧO | =t9ڵkG-ׯf3=Q/dBx^s2 bj4M9xڣGA577W_z%uܸq͛7޹sG}7UTh4z%Ka_y#uɒ%j۶mU{{{TTڡC5::ZMOO[޽{j TFhѢg="7oT :99jzyIIIr5_~jbbs\z73g`RJZzu7{wC~eUUUP5wyoT+VZYY7V,Yo[={V:tZXXjݺuaÆ]j{?Ç &5kTTFz䷟SAcŊjFT Y0`zU˓uɒ%jFT+++Q}7?#]]]UF>}@{α.KOOW:;;檛{w1n9WX*iU,m۶111zˊr;wN֭s}:jw%h4?1UVښ^zqmKKK֭˗_~]F>}(_>.]=Yd k777>ӨQ#߿iܸ1<=:LJJBѐH:u033ĉ7ms1i$=L8QgѣG3~xZhg5kFŊu|I"B(;G !!k׮qmdN TXƏO`` [̙3 6L{޽{hт;vpf͚EDD N˗/g$''AHH#GԹmϞ=x{{-^SGq%.\Ȍ3`dff2i$s%%**8Ο?N[O?A:uK͛ ͛T /E.eqv2gGV߻w/ʕݺukmۦuYYYl2LLL>|8k׮ 337h/􃃃ٳgnݚT6lHӦMpqqn;55_~֭[krOdΜ98::2b&Lٳ9t=zIglπ8|06lW_K. :5jΓn޼IZZ5kI$22={PjU{=,YBpp0666Z ___lll?>III[Š; i߾=cƌzoߞ$ 5jR$B!7WmeeUk׮ \ugΜݻCyW1bAAA;vvѭ[7 # wwwڷoONٳgE^z:iNNNԭ[W'cٲeZjڿ[lɸq9s&'N'WQEWJtcAّQDɐE";eqvaiiRs2;;D}I=zʕ+lݺ;wһwoBBBXx1ޤuVvСC =Pʸb """?>^^^XYYӧu_pTTUʕ+zAғr ch"@(;;}ajjGq^zzS'w #=={{B'J/B!xtz :cUQ'֭[ RRRСC*UDhh(tڕxb߿?',, prr*TY~:wi/^{RBpp0 2~)2TP'''+U /^ܹs9wwcǎ\Aܹs:i'O|fL-N!BUUuUVoOOǪPS]\9ƍ㱴m۶dff{n0`4lؐ ƍ-ёf͚M||}:T\]C:۷ L6 6ЪU+5j3W^ƍĉϢEHLLˋ׳sN5kq}sھpOƍԬYS͎9ԩSTVQ|2ۘB!R~L^6gR>M̙3qwwLJ7RF LLL0a4oޜt֯_<~1~Hiذ!Ǐ믿_}6ȑ# {xyyqU~x} T^QU:I2N'mTIiҗ,`hÃ(zU)3FEff&?I>O!BH̙SE)3҈'""&E$wN>i# $DNr VHKKz]5/B!J| .{Υe/B!999%ƄB!FA!YJi# $$xB!B ^("!62NB! J!B!QE!/f̘ݻ򔯐֭[G˖-KeƩSpqq!##&B!Rhh(FɓlܸcjZ[[wR,qy'Of%Yfヵ5Mٹ u#Fsss <קYfĔbIE9k022CR'mdDqp5zQ|yllltʓ۴it޽Do]OYp!.]bƍ>|^z4h .ÇTR!B!V]'LLLcԪU xܕL@DD|TZkkkz۷&22WWW,--[._~vyZZ}|򘙙… bذa899affFժU2eJu eРA#QQQܹs\2VҮNPP...d --ʕ+3{lmځ`׮]y%>>.]=Yd k777>ӨQ#߿iܸ1<=:LJJBѐH:u033ĉ7ms1i$=L8Qvڬ^;RZ5ZnͬY8pӗ.]pMB] ^("WIi'Qy?h=z]Ƒ#G9y$IIIٳ'Ojɓ'Gll,/^',,0i$._OJJ qqq`)::;vHJJ 4h $$$PbE~Gbbb?~{2$Cݟ++`xyyaeeEtt4ORSSQU+WIO Zr'ŢE'lۇ)ϟsaj{(ޓ>)Ν;t333kIOO޾(E%@!Ї([q(MTrխ[ RRRСC*UDhh(tڕxb߿?',, prr*TY~:wi/^{RBpp0 2~)2TP'''^SG.^3?sr9vMǎYr% *~Eaoo׍ɓ,##.]`bb֭[6/%%]x$xB!+ QUUgYjǒ *|X'm鄇SrevÇ9to&<<Ǐ3m46l@VfԨQj\z7nh'N*zS[?-"11///֯_Ν;i֬Y㝑Aǎ"!!tӁ] sdeeq! QDr62Ne*9sG*Uϝ0m4fΜ;>>>lܸ5j`bb„ y椧~z1?CׯOÆ 9~8_^󴙴FI@@ݻwˋWj͛G\\(B\\wfҥyn788m۶t2d˖-#66OOO6mʒ%K^:cѭ[7 ΓSEDDФI6mʱc,K[`` cƌ!,,s ~m;ǎ~ԩS₋ UV~ӮeQ&I7 !Krr(ŋ';;^o7O_'/B!BF!22RG=ԩS;vL;ݲ(!B=AAADl4jԈp}7nLhh6ODDG~&h4$&&RN8qi~~~L4coo'NYgPjU7n̙3}6ϟi֬+V9%B!V^h=z]Ƒ#G9y$IIIٳ'Ojɓ'Gll,/^',,0i$._OJJ qqq`)::;vHJJ 4h $$$PbE~Gbbb?~={xbNG}ĥKXp!3f >> ɤI.##C̕(8̆ xWҥ C%$$Fagg$&7oF͚5u###gϞTZ{%K VϟORRֹcA>CڷoϘ1c^:۷'))@mիW3|ppuue۶mXZZlF2~I"Bի[YYjڵkkgggnݺ3g{.=zй}^yFAPPǎ]vt֍ݝөS'z@uEQWNu-#yXl+<)_(իGBBɘyLܹto;0j(mÇV-[2n8fΜĉs?EUuE{UR%гgOZjEjj*111tܙÇcggGFFF /M!H}FAIv KQ $rl$у+WuVvI޽ ax{{֭[ٵkC>{2$Cݟ++`xyyaeeEtt4ORSSQU+WIO Zr'ŢE'lۇXdj{jmNyqakk-nnnl \7 IDATGGG֬Yѣyӱ/ND1H"B+AfAg*JĺubaaAJJ :t3_J %44]2x`/^ =CZZΝؿ?;wfڴ/=) !88 O?g*TL*U /^ܹs9wwcǎ\Aܹs:i'O,lf^ГG-N!B ժUo333*Tm+Wq1~x,--i۶-޽;;; @dd$ 6AdeeqFEpttYfdggcVUU;w=rswwgܹڵZjrJ80e222?>666lٲCiӦ<ÇuҦONxx8+Wk׮<|Cqm9~8ӦMcÆ jՊhFvիWq60:q7uAh"bܹf͚{mL!F)Yr/3gqqqTRE{aohi|ӦMc̙ƍQ&&&L07oNzz:ׯ?~4lؐǏ_u{ʯ>OIkȑн{wzvp?<^x޼yakk(ű{n.]vٶmN!Cl2bcciӦ,Yիs=HXXݺuOԩS"""EQhҤ M6yd~ @ƌCXXĉzwl-,,oi׮5jԠsܽ{={9z(7})PyESTl\&;eQ'mdJ_rr(ŋ';;իWi5j\%+>y"B!th4"##3gNiHKK#>>.ʿ/B9)eSPgãgkR6 B0)R)"XREE"" J{,XiRETTP'Ai me?F@$ dݝ͞ n{{nw~g]'""N *D\\C j`_!Bĉyg |,22E!B] J(dژB!" H"J>i $rI"B!EI$6 Nw^ D@!E!!!DUny*Wrrrطo(w>TUU3>Om}~ aLƌ)_O“rqŷAbf>鹴h*3'ZbBc.9#,,ҿ+9yB!\XXM6wKJy *Jaw eDzq[3f@jrxbP&wI|cQjױDGGve;կNJ?@Q,`_I$6 N6;a֭%.3g |؛m4a A'.vÞ]D^hm#-ͳQtOM-$yB!DrbF#hl̞ *as&76bB)>rlZYb p&Q$/BxHꟴQ`v?]pzkZ_1($yV<DD|΋M=WFdW(s#/ȋH"B[ofr++Wzb C8]3gّTyI^BN+F hx*{D0P)ߕQQz!PV\QQ2RH"BrA߾`(]#/@lm-|̭ٟ;'tCN>`?%׷DOޣ;B(@H;.9Me &/F}>LTp)eQ/Zj00OK͓=E!gjovV0ټ>`<6h\uU7C=J;1-&P!Wc*)E(J#/2mLWdJ!<;6 N6zms×Qmh!Ov1rHy<8Q ?o.9y UZӽ^`zEF;j@U ّ<6!"9Ԯ [;9%- bcv!) *U*e3c5lk±YM->d ,F+l*RզG9 BZ^w"ƄBX}W[聬rɪ CӦ{TbZ"-dTa{`+GU7#LF~:O5}+lJ򉨳=بRQQ`_'dE!##zVǎ=Mn-ϣS"GD6HeH:?}_;RYd">~gbL3Y 2d92ӀWڗ QZO HTU ѦJ!<(>灋s馍23cG8y9ߙg3fS/1$*dfj(kU"GEp;x)ٰ?7..ͦF|,Í2qs|GLpK$!1En`l˗0~Fٍ*=.)ȡ\i&I!B_f&t7kLwy^82uV:>aɸz7/i6D6邗W֗pJ4jdb˟ONoćwj )# %6Kſd͋֬YC݉bKnصkE.\FJ||<ƍp!jQtqRI(0H;(+ :w}{ߘeђ5,T{|KF4V~ODBڊx8)N,m%3:/SqAm:X",EQ1=,5ṃ短8&^NF^<?ϕW^Ǚ0aZQF,X~1`x vs=DZcǘ;w !B'瞃 sgmt%&|Oж-,^ЉB)} }L  g? +KfS^M\5YX]vz1{x2X.̢Wr6#fT*נ(*F#8 wߗWs1/ȋwx`ٔ/_c7x#̜99st:5j۷Vҵiӆ,Əψ#hذ?B!!;[5}:h,> h Nرڴ6 oRUX s燅 S+?*5)OУ˽>^}7}śdd*df(de)dejfgs*]F2x࿉ @*UlڴӧOӳg իǏ?E!Dprem}d$L>X֯-[o . EUoL0ZګIpSUUUuSH{PHͼ-k7|qBqUV]iy- A=䥔ٳӧOӤI~7 ΫY&aaaK7wDZg ڦ$F#<}~śn>^z ;В_߇\.jZݺi~_`$fIի  ?WxR6Q,LTT G^B%y I^J`0l0S026y ! %-gt&@ݺ?jU~XZ(¼"iv/FrVz~:6"ϕǓ'&.#/I$y)!UUyGؾ};+WRJI)?i _~ /MA[ߴig 4| 3 ]wX|Z\WE{]A?P!z$_~KΎȂ}䥄̒%KXt);vn6CNv4c |Cr|\s%i7/_d ~goUnyylĈ̜9yѻw 駟7o}9w$$$0i$F]kp!O?ރkn  WdfBf$%+,_ͭR?D"X+0<;.5 5k}8q:u0=/-33fo^p T\ŋ_,Z],V!«T}TimKQ/N )Fg扜2s @P7x`ڴi+4mڔM6{,**c4\K\jՂٳQ d;``Ǻ=t;|ۇd^5v^ژ)t VBQ-[Ʋe.xofÆ )S;w.+V駟f[!DYvq#Mw=7,LoS'xiܽ&L3Z5X@Tx:SѹDE:-pSx!@R2Bּ܉BQ,{jcF#\u6`| #$;ˆp-̜ ÆA KX5N֬ȾVS5*;"zv q_vۉ 5|)_{ҿ+9yB!7hC6&_\].k@FCиU%3kKTP?6:EQr M\ >"zܗ? l0΍oQ|6$!ɋBx=u*LM˲۵m33_-t©SZ"Ӹx.Ahj=0\_sekVZUjŽ ( /E?}KodH!ho屧 essL\4Y,^5fa%ԷbV뷊)c ƄBo2C+?F\] ~<_3R -|+Yud lymvK8uzܵ,*dEID6 e>΅+_ `|Xi6_3rǭ6~u%=?Fb>&$~f+G[}@dE!(mǎiEL0g΅]mޏchisNeݭ9{WqL#+á0mb.U+oDcΩ=I:]KQ^>6VV/GFB!N'L͚ΝpmysK\ʪ_w#]:;kћOׁXc|H_=d*s ivJN֬?ѣ`iw_Xjc?m22u+ʻr񦋝]p;}h,Q ژɔ1}E!DpΆ o?`Ju+իC*{76`B׮0e T߯A\ Vx}J1۷C.ڨKСx#k8~\YS;WRF?yq2w۴.؛Of}|p`".5ټ]^:)B!f%mc Ӱq0gyX V_ٟ bhE_|y+_&^DPE!DHJ[o> };"QL.<>,͜N:?R'E. | /yyڑY~)Dz菏ؓ-$sL,ӗ'zJNZɔ1}PT-KrX!JYv6ma[uHy= GR.LM+'nvҡq'?XV9qqơl8k fS0O޽Vl~ OAU^y>АߗΫ:s4(SW M~_ٿm oȋBoqcm͋Hsv79sw]E=! 0w#}=>"߶A!<$ Ϻ IDATO(0xTsQ ]qKjlVb^ͧ6spdlgp"~VdRUUF^tB!eOТohƾBrQ9.Iٗg8ss*9&\;W>⼒.!ɋB1c'=ak*oͭ54ǵf梃Eoӽ}>,$/B!ʞ?;ChшbRU?xTwM퇐>FԍCجQ=fDMZTjᇈEPQ$yCєIRo'Sm?^7)6ֽItm\Oń#|ELƠȺ%ї6Yr 2hU6H"lYnݠQ#G#1hpsS WYG;4}1~J BxH럴Q`(vhcKu/F]4jOΜ}7ΥUKoH)إȂC!eǒ%p(tk;q%~[JaΕ!E幑!EE!D٠0k!eGLn <;f8h94wxB5/B!ʆ]ছ~}G#._;'yc\kGfDa6&.wl!<ݓ6 N}4t^Olu%YV(㚏ّ$'`&q]DZ>,嵑I^BÇ/ !:vw4Ai 3Q5"xWiaCűd 50뤥20w2`UVH".IRi^{ 򧭴][Jno͌J_CBX|\9\^j1?4[x bb܅_,jcާ3]PTKB\,^]K^~""QP9|Dyp ZMXuߙyde(\Q˳V#A\T]ɂ}!m|HO%qtr$%xvXuԭ䓛yT/+-n*lZZeS4k/G["2mlE!Dr)c;2S FϨ.LRUUϨQߒ-*1 ; N yud#&p$s. LII^ ꟴQ`(Q;^ mA͚ 9_N]In|&5ߚi~7^pW;ϙLj%p#M0(.6o=IRZ+dKT%~. RjI""p͜}8пqQ-#>#xXJNB|%r9GkC/vWMQ7{CsIZ<&w=Vic.ՅQ1^0c!Fvڻ֭ u J^b1|*,6o3e;LѼǞo 6SZG^m*fY 2]**&t@ZA!D`z ^Br!ԯ.n~ GU!;˝?ѵܿ~PaTQ j8P6-urC$Jvt 2!<۷GAZУ)s4ƻ*wy=(&.KX[uFR" BĤHYdB0rloƍo\ߐjc%OCvBofAŊa;#3K1 ~,دyTEje$/BxH*Y韴Q`(VA <>lrwS 4q6Y<;:){Vm/1*Fn!jcE+UU\NH"B~zЪ-\;rwYؼșM&^ͥ^@䆊7SZ .rC,E!w V{w- *DA.nh&.KLƔK1Oqbw4H"B_N[obQUxn3BPf6nrj/T{Q!˔1jcBxH*蟴Q`nEGaP7(3B\YoSgv$ Uª0bq\. ["ƊvɋyB|[B60yL)S ]n-7 뻸F \Qo_3S'ŊEU+y_u.U|B5'O\`*AWEb:!ɋJV'mε &h~EMZYo[غ7Tn:Y67w9'{& S|6V4[)т}{!Ї>={cGjG[YY< T>^_0\7r )k]vzɩS< jE*B)n7nIEE!Qgo,:R |N.Z6w;.UUq(ۓӶJ[F6 C}N(Aez!-!>viSG[N'̜mhTݧ~g;,C"xkҙd 7,W);'@)"k*tN(0(zv F>̑0h$Μ6iٵ lu/^K m"v6lߑ薪´׬¼砢ҫvG,ژN1IMI^B<HMָnޟ2cEø'Aֺ*=p[wFLEI^Bavx)GPv6e:ipv3R)tٍH1 `CǏgȐ!lْ0 EլYpԩSBy0g$$c(n}B>u{z$gII^!!޿{{1A9*_}FGȑ#lݺ\Br)*(iW6ݻjU:&4.?{<)ct>>Xk,:yTӇJ%Kρ? eڞ.]򒙙I6m;3gs%997| &EO?%,, W_;SBSUma /a>[,FnAZ_QV_&.2R6]2j(ټy3'OlٰaC^﮻b|\z1p@^Bs[:^Gpa+VEe3y^7ׯ'Jjn[ĥ5/+VW_t^X͚59|p^W_z+k1tPjԨQsE;_|\<469.q)S.09~9 -h{|Zܢ+NK|[Ttڞw ;]L}EnH:pK>\d ~go5&vZnFN'm۶ѴiS6lwANNN^s<|wtM<ʕt֍˗so(9i#6ɓah~OWl^ WG|Fa۷ԬlF~c<ƒPPXv\zue݋*Sp%+dK!TNRH$IJN ck]*LHH`ݺu>?P^=G$)xem& ?߫˷Ǿg-Xxp5kq.+q"؝M6\>ݴ~1vXbbbѣyyy|L>)Sx=Ea4~-=rD|gIƎ*U]v1l0 @ڝ={2hР~˗m6;N>Mxx8:ubҥYΝ;SJRSS7o}#F ..:!a|.9foޮy*oXII30d*J?s.HArՙ~tZVnQ>"o!oYXz5O&66n֫_U?=f͚:t͛73zh~7RRR q<۷ז9B]{U1aJhJn.=”VN>"9$D(D|UU@avلK‡TӸH(p͋( IjV1|AZ^ck8ߕ\%/ tߡIBݚ5KۄfƍndgÜ^a)Jyo>~a歹V22"U\bv1 Sf6 ˗CdDFj,7Ok3hߑՆ3Wߘ:6+u>SwWmQ0i;O<YVE%3]䝓yt񒝨Ù]_ܪ7ZABd_ gSf4+HA7mlݛGy)jH_aE!_ж-CGDh#.M6.9yJaP>MfRѳ.n[ulokFӡZ,G|y {lgp`#icgsuҦծb`Q+ {bj8ߕ\%/KkEr(BЬwddh33=\.xk1CT[Kh+Kg/o!)/'_]?K+6jv߱@aHX7'6W t;wЮj;^n>[tu9r gfHL[{G3^Υbޓ-if'< 1x"9RRpժ B~>df(\^?} J<ZU~O؝vr9ԌYXWrAFӧzŞ={|B0x0X,5]l&:ޥ%.U+f%=zt9.zEg$X:'Ex=qyaxڬlömԊuexa˒ wmѐ+K*t$蒗PΜ9Sc)))NB`]Bv6L ; 9lL&C8R'+MԾ&[ /2mb.dѩw׶LݳYl5[Wx"$$;7BnBd1hF*"@]Ү];y=zcǎ1~xڷoD0'mTSۀ%ۥ編*heЈPBAzn|NÞ>5q03 <;g86wkӭfWݿWkԍwAGUUTUL>q:d-T92 $TŞWl5/e˖dddpM7QR%N<?f㧟~"AȜH6?iB  fAr%>R IDATP<2O4SOdӨyyp6,ni*z?70LFX^n-,GW.641){N4{U#W_Tǒ2V\PiQn.>PAFBBmϾyIjj*7n$==z]v"qA~蟴Q,j@\.x GfuӬ *<Ϛ ~O4@0XC殚wDRmTՍ` J\dIpݠ(d(\xelF3$DY+W̔)SB֖-0`CP*|D n⪩T(~_ Ž]&BCTƏGX ~[=EYJ&^~o1JMU^Mh!3ˀ 1H14a1)`p)DT\Ɠ81 ƅ#_ĉw˕S T&D eӦM 8ڷo|DEwmZѣ#{;*@hɗXHK*+X*aT9de_ԿE Ǚ~L9;j8D]o.oXpn~tj{\b@6E 7퇚C1)K&.km_$jVI:Ϗĩ:p%ǙMV~'Nhۉ 5"蒗h6mĘ1cfӦM2n86o\z!=][0c+W~0iUU64O9X2ʙѥGI~XC+SRiJŀ`.^#pk{hk`d9 Zdu≷դftP\jdWE ʖd?ߡ@еѤI?{EgVXLnw;o+^:iĬ,(Ę^1c&Ɣ* JCe$wicLM]$U/IԪ-N@ אXY(#K|bZÉ}\.()44h/p&\RWWǔ)So /rI'矧y6666-_bp]8ln{h}yQ<92&#1%as hŘ2a# . o?9u*sJ)0lyZCš:t&@Č"YP䖞Pgfɹvj=mxp:C8ٹMIo>ybUP]!az*GuTeM>1;Ȍ~8IuUE Ӱ}+9SI(7~Ģ%d)%)>\>:#I+ݎYd@ay3FX2E(((}mC/+?׿3gJMyʕTV&:k$î|&9z?>b7N2#s9V >'8X7mb%Y GTX]š=y^U q,-ff9LeJIQ)Z`E+8IfHb\t =*1s8S*UU*Bz ^Fk<O ^n&~mvau-bvKllllR#l>q1A\cqeFs*>0UkT<9̽ LOH)%ϬxevE-GH^N430[p:pf!‚&qHƠGҿǨz<$+3L_"eb%U2dKe3Aȹewg͚5;ֲ{t;ӹ8:l"} { CO&Ov7aE?*>޾}2^oPsCס!M&X$[1߶-g(s*-]Lo"2̲h)PUԥv  J:$MMd ASF#߹5werkoIKs15h4T ]Sд4UQ+x%.(r.x|Y~!0k֬4&5nwx3 n䚛\lGw?8kꥡILLYQ_>ӚDED OPoVf8i3M{"KRn*{{i YfH#/K(ẌwPёB#f4"d,&kWJ{Zd$j }6sU.Z[[~zGOIM%4y{;69dob3tt aE(&}+c/#ؠ}TRU [׻ѨBE%K @iZwt1D`dudv9p_|N;t\kBRqԍ{wy%d\u O'6fJc8W8]OƟI~)ͭ#("r;ЇҞh@GXHSGi-݋aԶ%SM\DJ#p-wn=KgWBhߔ& =cPU˨"-zXM6r%iVK8qϓe8/EK0zٰQ"@ᬓ#|v;?;'L4 USL^..;$=]Խ"b9gMt8,LlǂPQbDd)%f)MTEKP; F;K6L ze u/ql ^L# McJ-7\fB Wf|ׁ[ vK.ŷ+F~O<` +,__̘>rLv[Xϵ\Ku1;G=ܗ%l#!5:تMq*PvFVUPRu/e$M1 ў]"pAiU4G 4gC`#h0a?-Yz4EC ,c1p)Z3@4χ`x=d)Sw|K]2Y\j*A.R: n4&9m3j gq酡A\eΠs#NonTU;V%)/@Ab/\t:xNjY|_90_[/! V/ⴿg喯ߑ#>ډ`L71P0m<ѾiXěbƆ}( ^f74)]q092uCbF(٪x&f-VJ0R>)a# b8ycJz4&iks!]~9l]LBH kovϯݯZ#Xk:; 0syy>YJi rه [vɵcf+?s>O{{%Nt^30JS fØ~K‘)H1"U0eRJ"MTz+w ] A ,G8IT䕳1{ـĆ>(m#3svI),1Ro >:qLS*x2 ^Z[[S~r1>ߦsx6Y&st _ `zSY! Ѩij=!RwT~ [GNW)+5ݝTtfp#FY|[!_w'WQOg(?|Ow#{*'1mFQV@cC鵤Dii Y@ U%Y6XUMߋ^/2/h'݃SKP !(V&H[Y3q3Y>gP.iLA;@SKƠGbHC6Ozf|);|]=؃~fΜ XBlL jkᮻ^w7y7&r8(/ſ:F'7_fSuzUD${~/n5G$w$\$s!ow-ps^wsV'$}ݻO.ߡrs3MCkbFٸ RQ$:f^a֮@:QU}Lsౚf>f(JOZ NJ{udFi8p[ӔG۩ MLcj*;T޲ANX˶4xo3bIAZ0z.l2afwqknC={W_}EM7"L(' J6_B!FrU#ޟpǍ!X{k7jbU($1 n2.ۘk>cޔy]~||hNj'&Xe{?nģؤ4{fxzŃ!z\ Lىnk*>\ wRuDƺ0Q6cŐjݳHXng45B$ HPTd~>M-*a頢rC6mV h*u,z(Bч~n?]xɷǢ)MD2v1ȹnc墋..]w]gy=3e>xOER(gcEor^^{SgTr&g_713]{>8RKy<)KNן^ǧ?Ői/kt xڏ3i.x;2`bA:EEo7t a'HdTb8BP6m&ޱ iC!Dk+FD7[1KP񛭚$bD\0yRI q;44D]q144@YW(Ŕd0 w&#u/D/,]4ŋn f .f-MOb>d΋q˯̚aϞF֗%3G1;}ly8qIRWm|0`;*9p1JK7B #;~Rb?ʺKDc0VɈ{LikJzO?$@|\I]nbv{G?0b-{ֻ`6n%U_׸"QOHFVəEviǙVXw=Y'uhSv 95cvWS2/z3Z#]7wy]j jxs.EU^KP1Va5(B@(v f6SYӁU5LN2: ]* 6 ^=kZORdD Mꛍlo"P *h|QR4޸H_ 96'w,:XJ ?R! +m!炗n 4կ~%K8CBtRf͚QdBT6m|{a*Bˈ}eE4_˂UV<C e x9.{Mhr_rvg$&.sq]hHMO4: YP L IDAT1Iied8eO {1Mhl!P;YNɒ!шuUH6nTN((C$t8|7hTPP  ~Ds3dxNlbJs˔T66# ! ?Xo@`3No/0{Cd Jf49w6}Q{j:,X;ȢE:u*W\qEGgcc3{**#Qw߹=ᔜ \M7|Oxk?vm.gKsyt٣TyqId k+;L!%b [ E,S3'̘!!1S2}GՕaZڔOf27A0enSGBɷ,.Do1" "#*AUKTIyvStCK֭&iTiv%.ǢhQlʄ"2/k֬am`ӦM|';/#2 !(^GN'|{wg=1"82`[Y?-{]՝Tz*9{^O8onⰪøiGoc&q[iZY,z,]D4L>K{fwSAD#G]KQT+Y!whr%s_{zBYIQC-ƤI)OE[2.Ɏe}Gsȫz#niqzP`teB2նKN;FH)u=9{QU}I&26669ʕpe0e 'Vpv-:tc8 {KoFgVQ3߿n?Di HKViPn#ʦM((V&f!YWV7l")S1K0  SǏFS@VYPg׽Kz}44"I@Rb@ǐJ䐥llLɀwwѮNeikb+  +K8SyGhllG^dvi & ᨣ ~S/0a^A%ӉwB-Z'y{U߿ ޻GzkqeyF)'I%(%xGRXB側zڡP&LI$ɺ}SǕ_2p$SG//Eil,{ٕ= R 0FheS^ "nDZޢvS t:4Q}mzs'ԩSye]8וrqt6D;Y٤]x!|)t\}_MÀ* ;ui7Ǘ_ҍKٺpkv*ytXal sỴsa'8s@d" MwB@Bъt8PFڙ2MeECd,a TTM#69S-zDtJ F$j}Yx:Q#C.X?~AƷ ^$2%͖#4/`}_y,XYgEmm-1iM`g]2-zO8L8g6ӝA5Msv9yinnΣ}ݗad--p ;$ݬN8M,&N&6i!lX 2ɝs+D QU:F݊X .d 'G[-X2$V:PP@ %/(HDPP8w_*΢<`&c1K ^de^R^Β/EѾ 挘% *̮%G6@m,X5kb޼y[iM‰'Zȧ'0f'aJpA)8 M LiuI{7-9$,*Fiz/5ːBJhm0fJp!B PZ6D#GEAVOTVB($.ra Y}xp(AuN0 4eVlAHBb6i,a_Od,_ ;~$:\ѯ> ~6^/9zZѫ]s"q%n Y8ƴ%{PVt= 1"L/Nsy}) B#N\ڲH`QZZ7)_ tnl4d2])[7IU{D^/}B{Gz/G%z9\RSSoto6lGdccUpV`n}faIyymcrCʚWq7Q,=#?=Uƣe?]_3IM=2AǢDccݱa4UÔ&i i%2"ǓZpPPAG8zƃU^օaUypTN乮Z-FU,Ncm3|>rܺvW^y%w- r뭷r7y6ق69Z>_?hlkpnmfY>d;7ª˪ONy" vEw͑ӏ䠩/dsh3{/ܛ5JuRuvzE>5t˩ͭ ag"kjd4ú4T,s qhP!ncDjD(:+}AUo6YN/_|1?袋袋={6'x"~:gcc\{'pVw8+V P⟘K}V=s];]eg qkn~7XnvL֎9F@ '9n{h'&&ey=Yռ 6MZZ5N1ٴIAVp0t)-D2Zt:*m >Ńof(Vt:ZoG]E/sxb|>MR_o\**,;aJ<,[L PZ21V8XЪC9ꐔ˸yߌ0S44/H: i44n0 Mlߪτީ9QKp抙1Li!yxtkZqkq,%TEV)qjxLw^QEXsKhEQCT[qgX녍k@޶K+r.x3{͐,\h58㌤p\vHDpܑ~{]a)e13u]\Us$3 f{h`AHRL (@(ʽ8ԾE(8 tsG)t&*ֵ4(qtBALN5$noYPT"!KP\dqi ;*/ЄOP"T%~ K)?.9s%Q__O,{UUUFdm!lK3f(N;-aucݼ#N="dGOCӗu]kjUQlpM9irL_2|)%}|r9 `s@Ԝ{[~~7-Y=7I `?ɡ:)! m bF.]1jUSimֽC,_)MyH2Nu &jOV]WT0QhT)3.ie3Jr.xinn'M\!04}lll2M`>b ?s.6)c RSڡlg։s(uё>$'lBfBs HBή8S@ӭ'e!tEǡ:L0ī{յ!pnf$ m=-ʼec"y^ !|&巳-~D5Z,i;n lJeTf컷h_AHSP4,*lX2κd9{,Z?v5Kxlҏu|FsahlI|e]p?5Era,4D0Y\SBČpg^:Ysq8%eV( Ҥ%DMLZZ$8|2'@ )%͡ffLi|B<3Yռũ%Q6>bJT xXX5B:#auu$fp}P!(}y Y5L(BQ(ڮ2y<))?'x`ajɃ\"`O0lll2M'#u`%,ףvW7gb __:'/9)%Ͼ0CsD Q5R$^tZsXz24BL)ha@)NI8%#rsn}阪ZK8 OYHXB͹C,@{&t'?OȌ3Z]rs~ҥK=  4-=6X̙s˫8ocpMjDŽ\X'u4o&db[vdžhH4v6P_muZUíȯ1x5E3ؘ`ȢBhoG( Ku+(vE&ڐXk+r&x-\Fe~#v#2/\r '|27fj٤6 uڬ`eBKIWny=À3 &G^\&ߜOLƸo{9q{Ys.x4#,<_/-B8F(Bga2AC3 NIԈRV0:,[Y] XJTEK >iM`ݠ2q ^i~+F̌%2a醲ԜMfsK__vH =<,tvZ0@!K6tdu1=ઃ=&+zىE}g9d B~~ jM>u*i mW=Qχ ^m鶃:˜iߝFR(-mzi ܆jP)ƅ }XV\ ,c=n=@ղ7xK2 ^~tf`g]2hr8k~?~:r lU:})gA f醥qD(wyN;tsYX mS=!뙔V@A:%7MkVC`ʻB@^$ z!>X -#6d ޥcޟ gmѨ+%/ MĹV"o\R7u:tS&P%M3Yae9zMX΅a}3ࠃH6p]}·" rynZp1ܹ^}X4(3/P?gruݙaV=K %h**+mf6(,L|W)1߷gngDW)MVOq!'`MUD % 1 >μdsb?Ou˖-c#oV \~3Kቁ#·bVN&5I9xg;cCVB.]t{0KQWvL_8t ^c(}'"kLE~eP2Exqx09Pq2R;*DIz.Vo BP]$1ȹ;mmmI׵}f\Y \֭6N\!sQ׬"rI>[~iེ8oG2B[9bRQ>DGۚ5RL_1kbj YtSabECkC5>64@uufHulP=7L!&>$tƔlmO2y"^݋Ms`444x= ,N#g>B́k_/6p>p7&x=?ur7~Bq娚fM 4HA`U̘<n)&Mr,fU9p}EGv\FeZSXLߕxJh  `C9~/H9r{FE"‰Q^g:[Y믿nu]Gii߆dp%Knm،kZ¹ 7$km{Q #x=Vq0 Y=_ç pnGyd#:;]Lew"qtuzeFZa 1A4#MT/4ܹ46thbVf&Wa;=4ul0]WQ3@&'K,`?SpjNbfb,E^d*9ȉॱ%Kt?Oq;cnt & 2,9LJżDx({~,#ccRQ n%qC^ۈ/Il>JF6;Wt (mĦML`vYyҤ!؀U56iÐ_Zm5)rQJFae]ڪdn\ǂ .5pw@Q4UAU ^/0x#SΑ(BI`*ilT9bv%Øؿ]̙3իWP]] /;A، =g2I~"<';Dgϥ&|S& IDAT9nD*N=s;;@ |Ps샃.KxCՆpK^fCi؎m j& ø7qӴ|G 0JXߚ䆢!b2UQa[*TV&qJ=l8↕Nֵ23 3ɆdH!e,3 5"Lհ}-nM,z 8:Mn7I}&!I(jY ̢O7LoױᖎҤ)ĶRZW}`]Oj1J|r3/Yr ! C=P$(m,QT ^jkkpP[[;UUU[`T6663@1\V"}kox@?ǛQ?+ZWpO˦/pWpϞw{#ۙ4A0}E(u0˓? < oD(-͖=bs[eZd2灛HiLo:Ձ&m e= [j3ӡ)BcPSo2\Ե%sjN`3b$ %Xwg'8(BAAO.y`ŜUHcg#.J`?9HN/||{ߣzmC`]+RclӃ S=,ؒTfiLA'8Or8`[%,Y:UK}Au Q֬[˂T͚6,݋1zOR 1 gL>& tU'j 8V D)Dp yVQenoZ^"k[l].bDa!`rdV4`>@2?؀μ8[FU I L:GC\u]B[tfb?LMMMǂ 6O>/P(Ē%K3gN¶=r ˗/O>}E669/U7~ ,01"fƸCqpݮqV'ɡ+e:̊I}QZ[aZWMSeX]H;C%=h 9l=Gd2ou+`cH٤Lye|wq #WRJ$cۂFZ9uɩ,ٰ)a?mѶco)ɜkiN,o^kHLi5]1,1#fe~zzcmS4rߌ>:g!ꚨ&g$_;D|LS#^~**վj7-GU UG#BPW-O뀚xl2USsB&nѾ4ЄaZa"%hj[/c,mYDuUW]źum/bkشi sLmb ,`޼y,\9spEqW#7ߌmllX}^\9f&ffe Vf KصdW^Kct+gB`WX:)Q-Ae}TCQ}.Xc=Xpk 6R.ťUHH#0J!(;׋3xMMDineJᔄ^UDh⎺2zX]ѻtdFU9L]߫{}˲o9(~ݘlѱ [n?f̀O>S] RYaLNؚc9fTx,#+o/nrǞw02с0N0䌥gڿT7y_~$UDg[)%M&['MTgm}m.% RW1f;A5Q7m()n"j]b(dFR}0NhJTM} ))b*14_u҉iܸBք0^eeiZADqE1LOx?fЦ5#"ie ^cbMZșOXv9$,>/~nnNL777S\<+OX~Yh" U$f/r{˄r!}|>Dw;p-MѲ%a0\'k--"nͫz]%bDض2l0 Wr߻>05ESQywesOIْe]T^& ȋ /TT;"PXA"eLf2ɴS'$ӒLO>YfNs2<HzFG>f~'\p>'{ݥQ_<2FX}%;: ?ϸ_ό3'lYgj]^~e׬YC"W #f[V^qG?+HM阾b",޻6IxxQz̈wsTQ&m5m߸ oƏcx7p#zun~pxy[s?~XXK@{5Y>6xlEnȡynhdߞnr40c-Y†'p4!lEp |sNa#ǿyrTGǿi`‘у|''󺔒Mo~`(#Z2AGǐ dUxհp8&wj"_2x K_h,L|fup.$_)kBC |d8볔#pd7o"m7tI/JdNRvɗ:v~ӟrꩧb >Y9.yynU.8?|[[c:j MIIN~$<|/7IsGw.߾q7α˦&]x,7t ~_~|yy)AG&_S-9;$tKN#F.ւ#50NVhnI1xQPPDNc֐WAbw!KfVV i3WsML:P)[s { !&nȊAO}I jt?#f;4 fk}j~9Q8 2]Wg'`֭A?pt]NskOgvW(ʇ.VGBO!:Q, ?u] 'N篛AC7,2r?zW8/gռz.sɄpػiR}vih;֦F İ['.JXV5MU4\|:` պlcQ}τ8ðdȥ5ƴMxtϘ ExtK1m05>(ċ&F"/% JR6F&V .dժUX믿7xVN=T/_k)uJșgm9~;뒅sqI4>~LT+?y1z{75Ǽ~<ְ||rӋL!.U+l)W0<^Im`Pi`B9qMdKѴ{+hE:[qET Vw}IIƋ~G,Z47K$ 꺨5}(xRMF׮iqeȕtڹ==YkfMuo jdNJA|PpQa&wi XIש\QRrmry)kTP(Xqss9 ?~|p)?NWI`=xCbEn;G93 VsK 7(.Ďc,;1L,\B:Q!H%$>,'dRRa ^$AUz" L&4T/ C)rƯLS@`EQ8Błhtvŋs@kp#0-G,B*YN(P9)_.4/ܿ5@YJkΞ\hBC]M l[Q >\G>J_?!D6ElDnl.`ёժd¤|;`*g{;GR}ǭcpY4l1w,3Efv\kX.9fB %^ %|le]S\PWk3»ޕu~vk_S-MưBԋi%46 RB*POr ACzA<.LeMi44J"9n'2ڃ@Je[6l pQ0R?cUXBtvTl>z.J(Y{./_/}߮iq##݇l&67)CKٹ~UH 5[ nKθ²@:]$kV K֭^[A+ Hjj蒬^4|˶p1֫R:v*UlɈ*N*i 4.'8ӌGU <(\r BN4Xu_&|TRJ|o 樅Ggcfvk(l;g-]J% ͒"`ЬAX8"4}i>45I\ݳKC[7]]ŋIFzk-9ﷴKt!Ĉ/%StI,Ǫ}UR~oBQ B1|N<ޗ&~s'ork>Gx=:7Y^aZHp: H6oS4)0! :X Y2-PR)YF+AkGqq']H~0SgJFz.*//EBQ:b18(g*+ . O{nK8g3b=YvB.B>~q ٺ5;bq=4)GWx!J9%8.54쌃aYL>`ZMh!Z\/ ET ׌`+qg 땒)?tNɋ1.R>ǹc[ڂAHt,F=KP"aA|P~;ے~?D_JGB8h 5Q/B8UJ1= [KH]^iKxRJ(p^{]BJX 7.S=X YYQ+&BJhS` $V |l BuVu!"ǔr IDATH=̧e>VHh?cf1T8 !E^Ų宮s7QM* EqH \uc?zguV9)FQ.~b44nxY+ `V,mؖy4J½m0"z`Qe3MK?rui#cA57,p17"UB[١ċB(Às΁ .pzX;vȉNu+؜iKOc尿 g%aYidgY`!IB:ei ]nzmGW,]'b (cMsJ65澑 Ű dYV`|ɚUW΢rоG҂ںQ]$"Er?OSi`.CMcL2ӎc5eje%^O [R3YvJJ(Y<^{ >؉470{.z4N>.ߗ}8fp-AwVVo/ ٸ=XRHCS 4Xn׸F)]dSJlSMXM"}>hjD#bH']0RD]v = 96p(/jj`֙߯i4 "F%.#R*yx] E\:Tve/ ET WxIGpIp%KʸtM7x#G&].2D%,;\bYC9cb{/m-cb0H_o[h%`2Qј%-tWt؜l,&ȆĶGkLѽd2nNj^ EDppY<w{mWߊØ=YT;"D.FvsN(4f&" lږ@HZf]wX.H=\8Gj G=E]|GM%TF|vPQ(P(ra8,¢G >sӂ@R0l+f_ V!"ŨUݡxy&~`B{R&4ߔ`NiN:Lj^*x %KH SN_jҡBY zz+ ތiӹ7nMo3t\W*# ?R+tJavG- @Ӑ-l[BI\8N5,isW_œy1ӬJ\]t.t{BE|9(XxQ( ] fV'ڢ:] ='[OMPrGa1<)h5LXŻIb`P9ϿPu4.mi{Cj^,BCzchhMf~1*9*H`:Nb&0ᾘԧnRe!#TTPL?R:evb7{.Ϧx) lis;7b 55c@ ρ#!7zI,"hha{(eJ+!mc\3{*@k#t%MKǢXCcĻpvP¥PE(J*.l$tWrw,^[O_j_t<9Qv*ND% fYi dm-R@ U6b x11\7 ^䨜ڠd̠`x SnrxvJF]f*,.2_)g΍"T5ri.I 5xtgDBl)ѕ~PBB"}I+bJ܋/]qk?+}} )^c mvgV՜)xk.FE!ac`vcY YԇζL7Iߠ̫-5}RIIRhB~v.~=SR(+ KċB-r?\y%k.~w8ܪΣ(<ڂ_*"a@\"0ɂ pQέqgֵmdAf7ui$/2Gըؿ tM BETP҄%Awp8A4U0JU(ٸ9z ; ;MEh'uXM/Ħ&N[z\KE* )CdZ#dap(\ơicֵ,GK`Gz&47JF@Z f˶p/W@x~&Ӵ*4%,4Q l15MwȊ.Be>.PE(|0,[?yQ,yYo܊\ķp+Ps{]X𾻗.(xX{5tx=&ֲj~ @m]vD,6lrgDܴvΎr~7\TfC@^#! q҅ipT#OċBw֭s΁o'q:?]6}~PX﯑9<_*½Vw냖6?~m,d0X Aћx5Asjlt'eH2^7^z$t?́Lu0 ~Yphe7%ٶzoB1T8t}7}UWWZӶ߻8?߸6AMuuZ8} J66K0z7ԃ;`NBS&`@q$DZ{ˬUۘ$U2V5R)/#^t|EٜqWU(v-9ѕ ୷ =TDr- 'xMƛH|_}OUX3Rai,lj!MjobK+ilG4 ې!ux \t=7|ŦX¥F(v`KgiB+ƣ \b:8PXÙ?D~DQ9:XBwi4:tWFUvd2"1_1vCe\^TJP~p9Lҗ>z?17J穧u^xY0m3>3Je4>w ܞzs5)hnD"4!gK[:CiecōLXH)߶gzOXݷ+56,QT-eX_d8^l,oOċBQ KE[pY8n!oѲnr]c#.Ydq~oϤs,aemcG.(HC2+7 F5R[vN&*Bci|N맵%eh|._ɷ]tvɍ5NT2u f:m,HO_ #/B8cEdTQCU_n:__ƲuOOq!&gPU^{}~VI aN=;AWņgmzj)ѧ҂`r$v5,z4 'bm ]ջT3> 8i#yVǔ/Շ*R3\7:M&WSOo|#;ɟsy6g2OHS[RVSOٰ'Pɶ]HeAIe+^ݠEEs 'K4VLgŰ ܚ{Z.Z $i$}KsUKQEf@mFZCүQL<]SE(PT"𜌗^#pj]N9n)QSO+lb,//wcytKf4 XαB hr˓ %uDSQ*$tMgAhoI1@7H(Yo‰J1)gA7 S(*>X."Yfxi6~=}6|[y?l,;tu=vzN!퇔f'0.G蕅a1[ s}6J46MJQﯟ}>MaFO Óm)ns]hvEQ}GBQi\=l7Kw'vѐL:і{gu=vȽGTpOmϰoӾp  O~~wAD].dII)+K7SCn],~S0ۘib 9T)% 5zz챟WJ'l `X 46A$"غűZ3+%P[7RJlicK۱ 6m3` `Xr YG礻u7Zf֒׽H)"4t  >}VM'Jw*9X%[s?)1~ͱy]^ ۘ(m%^Jꫝz/}I [ /^ )g춋%y;{޼6+w.z`'g3f<Ԇl(\#Cב!H$)shȎE%ض 9o2ErXȼAKGdX?mOq08 J=BwuoT?M&\κNln /wYҸFma&^}KsQ^& z )`R(rM TjB44j2B(PT+Vpi/#DQ^|6yK| [;]s/Omyjx>ȷi1v"IdE׻ O݇lm0]/uꊦY#ٴ mGv~1a[aь]`+«LzhW.aQ"Awǥ隓6Y9g{|;i+OEQLE/s`О#f&ZfKKċBQ \v33=9~I㾇#GVi&;_zl؋.}$G.8uxsƶXfEM~ ", >i鈗-[-- zZK|&Gܚ]N DivBl3, !Bm2Slo$Ci@RLt:2BS>xQ( dƜ]y)_N8av|.WswrʻْE,[#`I0Rӽt9&:q4yW"}Nz:u.RhmGee ! `s 2wtMǥ;u/$qj[J]ri.\J*ɪdF_HЩkM !ӨR'{sExQ(ʝ/}}e6~a}N-MuY[×2eقe|l9倲GI< x]m¶OSd+W㑼aDSQ6-h 4m`ۄQT?=3gcPB#/+Ue"̊.re,g\F@fdǝB}xZv;3KnJbB}MEڿoSʲE! Mqm;v:18ɋ=&C vHK.b}[luw. r-2Vɳsu&)GY7s_ɴ&B.xQ(ʕx|+Q' ]$GYb+Km.Ğgmi D2'"r95DBz1:SDR3rPX_z_=uP4nݍicTUA)䞜gAw>FZ19J(eʕpIp%߼eIgxMcEZJLGp=Υ]@sRaYh۷ۋjk.mo,).zQ 1I[M۬;H܌G"tDY<2yyLy lo{7PE(Gz n_-x3:ω_Ïc@==y/]{_ļҧFE65a7N^|>Zoܙ&e0l"i$u'tg/H7mp"eh 42/RJliϪuBQ2 MgDc~5SLCiC@%tz6|a&}_o39wlr~>憛}7_ñ?@5sv9#%Z_Y[4颖%z=DdtR1(z}x:lۦ;>sugx KsL6l;&]M@Bʦu/`_%J(kpqpm"O#nt]_6sm بRQ]ȋBQ.RNe91M]'1A^_C ~`$ڜt%>5=wӌ!Q`N#Ir냎N9=&&X԰}% IDX<;\"N#rS(JI!7L\tGDWFmsQ(ʅ>:*_|YJKsmp^%u="HRI-["htJc-X8Ml"qp邚;̴XU#\2dLLݳe*2I#GR(Qq .-ܨ }D!D*Zr뮃&''=O .:/e|]U\ųJeØ3LJغE$7*ۆH`b9mw)%H jqB$_FkNO!*.ؗR2DM IDAT)R2hN9y~< ho~ÇO O7Mp.w8{4 3(>ĎƆc{<8㭑w(AcOWHt4 &pBH䄟S?M@dDrXdӥj^HJ(gúup弚a~j9I)+tKfgDu[~hk$bʇO_>MXE$ A:m])% Jţ{ط}_U/ӹ er-iAVJ(R+?wky|?vOn?G_Oz%A մH !oϐi6 Y3@"MzZo-F.C`݃[+ZR-=\u6bISnccb!PT-VsuFݷ>eӄSk?<7`},]{C.ٝQJBB2 Gϸ(gLŰ.-Z- v85ЪfJ:`?oYR!)W(fӄOX cv<cMsWF~`=kζw) ǶO@P$Nmq3hDh-ڮ1Qƭ1,Z˶RVDB*wD{eױH gc`RB\ .'Gb6*x)808眬]u/өBo9}{mޚĖ6,9eVoZ$P?aL :rycM{F;#7D,џ?̶k<5P( 'He5ѝ & f6V~(P"cۆ/~niBd[o"-^C6qjhw~q-|CbNcmk iilcD d^liӗ죧gBWﯧ7Xi)i)تKE] 7˶G.Ӑ8}MHe_\#/R+jNB1S ±:¥~hk˺_O.8;'\~lIl#B8/Dݎޑ;u|jkְ 1Yok1/Gk57nݍaO&LG#OPTj%|>,JaS2ҨrGQ(PH^3\o-7<8O׬zN+5^锒lD, YI$#RRPS;f4F]V&Bo${ʥv⹂FY;C08^ iBC nT>xQ(g矇#:;']eW}SKPϹ5Ol|]B_~o 10ޙ!lN4e6I$'%ē-mƷ]=e=JajmQ()1kLtLmT)%hEj/ tNe&BOtyUgsI1uNLXg縞.I :єuivqMO~_F_#ԪѭVcI3Wj 2ڕ,>/sOȋBbؾݩqI$af.Ƈm pa2/l+)=1S  i!vII ۠5ؚ:-}9/ߗ죣c EQItjBögVCM)2eI'pp9mu}_>p*̉O= JcL6MpGSZZ`*Ǹ2zۘ-m'~q^O)%))ȑHlfߋ*O$5B)eGG^!}T5{{ gΥDY%J(ӀJc N{F>̙)þtluEeѫN)KgP_Jp/v{bN;~sX&.wPti.| R!ЅNksLj&O4-7bKM0)k^tbH*] V+J(Mmxt\Lk6OOwI޶7Gw?gO,1yl{6^{d ~?necE&P"ME@҉e66Rťb|3IJ- `ApAdQG],:7ɗ"Ăd.\#]yEBb'4U}bBQ O> =䈖^Y> ֳǮ\Gws{sF\$s˗JLRSfYJŋ//|[Gq|%_ۼ>7 mWpL>CJu/W5 8zQ%f^Ha'}t)kYloc^ݼI05)fE r-Ϥ& ˁ)Ƅ[sRǴ=ц6!(y9⥦>Qx=]0>xYG8&+Wo;/,ZPz{_?K[X\)Vgטq%mq6-Z_ ;suux1zϺ9,[ drvh&DVHDݒJ'.CFR(_o'0uw:,JFR{Z $_9+c"4_afܝ 2&Sߚ{ fk|+ B TH_P.kI7˧uNddWrf۶!J(9M7Ak+\wD"CwHu ֐>3v| '>v"8gs8icz&\& [jۄet&()qtJ+Tk\' nT5x |]gY|PEȁdN;1&t~&Dԩgu׳y1"!.璒lWHJm@ҩᩱpYЦ&H%1v=r$-2[iAJ3$mi P(0ve2&yɅ9TKѾ9{)F#ʷP(X:-Ƒ^}98bJ| >>a^0]ww|ML!4K\v|NG׿MM#__/C@?;c of:_t<43z=ӃnvTHXҀp{ :гdFؖj`qwq`CJ:B ް;ZΪ 񄠣3Dm5mSG&w:?e!yP:Q.ťr{6H(6KMJ(u>8M%3h~Q|9"W¾G>2~_"!uƦoNR"֯E%s}0zZo/V{+2Xp5ƺ6[w`|GFb7P6M\~7 A469ŗ>o~5eABP:S n36;.isE,Wr bBG mm)FPW\Q5Xֵ뮎pcx1Sg曡 V~۲|9dC"ё7cXs  {@Gm\ suuke"&$Ӣk:.ݕ[~EE]%^Uk;\x '17{pLZ!U"a;2]=؝_&)k?Hc3tJ%1OYWҌ};6b`ۚxr8VDj}LJD* :t%^s&zi 巒BPlr 3!9%nͅi9mSQ](2<h6֭[g*rjQ/x{K.J_9Q ګ8_m+N~;9c>wz>3b\1?s]}/DH5s_._b\t &X'TivC706 _ב5aqsGl x@P(ʁҿ\c~& t$ w(G>~jFz Rd٫y+c.t~Wͼx3YQڛ+[w)%XSљ=!vkڦ0; 7`mȾah,Y:VƖ6в[4^WY!+`pmOܧEE^Ƒ)q)- 4slK[z)Cx!vm7<>ᇝ+r|qD)`׳D|W&x=oOAhx^YìO<nﭴ۸u]NguO;<>|gfds @/"r-F6͆R&Za5E䥟(7pxVK/YE븿wί0ƍyᣘvms /*ؖ wp#l}2kĬ^qkWPr/rd0>oXIV [kkyB3vio =Lf'1Df&Z@F" kO3$ơ~ȷ9H9㣏>WG}4ׯM>nN9fφҞ㏭}[$.>|37?J)~R'ȕ㯈x3vz۾w;qV\-pw⎩wh:88"\y넖سGcԨSJQTIIfI@ts!Z?A!MZu80Z'0:3t!C^Z ;IsD|XnT*Ic2uTV^q@33f,_|9%~-_VqDmpoc϶mc;a|/uuvt8|>|< ϝ gLn{zx< pݗnϰ!˽?|p/{?glnt_˳1- ?x",WJ7<_p'󝰟?12xu//uGUU6LGLd&mm#'[y:gznY%CU|kk~=Ռ)쬟he,wu!aw>vd|'|ŋ"m#G85kW!.:͟o=}#u]O.3ό\I)شɚ~Vkb;_3'I"3'w;}…-[7?CcWϏ޸-SMᒱ0k,2mEioWەoQZ:owA󏓖U{&P&!![ZJcEV5e]47j\JAKnoJ-n;F}͌S/;w3|tNIivKsBTYYwѣ?<ض |ՐOD >zK+4R;(n}.R.ޤXrkF}9Z~ZWQ\v +VUֶ\ t8+wКM?o* -/?3\U4o󫩿$Ɩ+0 &yeUˎV*VևR MMa{/i XcciYg}~흃iH|'1Bghsz5.c8U nîuiw)T^`׮]7#8^z):pCeg[feY Ưm-{I7"ol> ˖Y6 { >-kTۮ*ߒvOfΙa7,84 ΅/9ltI'6w\FŔ)Sdyٳ3eʔ%?V"))+Ƕzk߄c/cQ94=wcYSɼuxmkrؠâZ^*eesP&^4 0[|4{4P+|:E!]%tIp:9DrR$/[6nn\X( [mYx~Az}9wϏ -]s-ƈO\*+u*B΀#LVkTq8(;z=8~cEs3Tƨ7 Qç׌MɇBlL)hiηS$i>Ш`,L8)0n%,F?'siO~☲y3ߟ`4\2/.m~EqɠA*QAQbh#L00jЪE0 ;l@M)If%+~5J,MzܦJ& C;A_'5yiw_xez}u46*'RT B>a&99]ocMi:à^>6՞j3qڜ],{n7y@s3dE&ZDJ^24zXXbE̟o}x1yBjrwro i4sJ ݡ1rIzw*R~UC_ 2)p9BTձgxcD3V^RhNwu;2{X$yILE-] l06eJy[_Nv 玻kq|)޻7h9Y&vo:47BcN`켥CM?U*FI:BHF~AU,mc$ W? M/ݫSTlhj0L0 p:#GZ M@nI9uǴ~jD&[јʤJn$cN<*:Su nK&U j# _H^"VHza?eEGpp=e+/oS.u k_7z G~^S7 )Xz5 ~ *mO ~O=y#q]RqB־-S]5MۉxͶmȕXFٰAA1$/".?c=F\Ѓ4\4[|o+46jdf*tu |j4F hho]mQv Lei7decWY8%>Q3 ]2q^JUW:kߔ Fӻ<I.y>N9&Nﱼ:νK{˵}Ǔ94=+yVĤ^﷚f/.6+a@]ǻPJuyn |wld!(pW Ng>J$Vf=TH)+5j6e-f_sɋtOH pi lﭸ qV8ɿ77SQ1 uu:F8gu!tzXCxJ22崮>?Z3phZQRGQFnG}4@>gY!D4 jj`mhcRcJ4 $I^g߇Nɓwmጧ1\Tp*'U+hB30z(9ĴFhhÚi5>4jHh0@[O_dUU9 lE)E3#d=S؂ҷE!%Py٬1*+:{wk:NkH׍S-]$/R.n+g<=<ԎuܻiC/)ž+u:F.M#c1ӄՐ悲2r3Yݽvk׳4cZSdRT6UR]ַ$T}'IĨ ;d{ybTQfcGӴHlRhe{9x]8s }OOcwN>^UuMgSϷ՗4^}M1yu%ӄaWG4^j[jq9i6lzhE)̨i5x^F as0`4_~ rrԐ i^'"4 be,@׭A]Zg"Wmu_TfI$Xǫe6N_:cQ Z8~bmv}IAg]ZlBkd(r{݋fV_l۬Ka^TA!Zaa3`Ms Vj[jQJfOcX0=xZ= ?&fPk:z4IX3T5U7h(H)IiPV]^z5r/Hu)q[ ;c ]ױ l#$/giVnSW`C]9sۋaffRsoC2lʭ/Z=An\EIfMip1 JTa!*+Jdjk1/]ThD%[ZyzO{{ZDLtlệ^#;Ǡ5{7xpv5KۍaM? Z-dP.r+I)IPg8H݃:]#}N$^Ë)u"I^R0oÇG糆OK^}k=z[|V?*>9WJOx^{՞RVe FOC-v͎ /=Lg&N3|B!Do>/azZyIQ{ǁښ|M iTyQtݩ_ć$/)x"^ thLXx /3q \qj&OaZZ12ɞ=0${H$B~Usd, ZwL^"͝k=B2\$yI!|C…pqoJ\NN(\|R\.<{v`jNJ)Iˡ$D: !X*/28%v%a?deHdltwy,:}x"zL?x5y=@VVk̄1cBG榗oor~!4-;Q~P]inFU]RiC+WT%UI)IP,E11 Y,Ɯi4 ͉~'K~jvph5ո{.n7||g y];?-~-?rwh_:gR7]JףFXy/nҬR!@Gwі0M ONGª/aKhcҗ%I~fδ&8}Ԛ=ӏq{:mXO; ~6lj }tZ61}G^q￝\Z3fYZo Mp.WpLj<58Nʲz-qI'\Db$NObԇ3)Lfc Vs]acҾ~a54\*T#KZfc#M8 "x5͐!蚴_B " m[6Kf՜nR*!L`9M%$+`,Brp%8i?s۝x4 cdZoYwq<4ztο)gPs fߴ >>jG֎ilݳm_AM-,k!~7EU͘K˰aM0MCki^怬,CpePMgӵi6X !H>о%]iia$VbUV $2ʋ3!Id/OiŸ gMދy?22i^'-1&Lq)\YsrF\uuV 251i~Ty$.-jZkѱi66;~.&NBOw䟲B$ӾzXSqJk/bO/*zB#%:lÌqfP]y4-߅sq Ք,׬ \: ƍ>F:+_>;wkwe[u^on3nUPjjʣO2RydT!1J'1C@w㜧RD:e$+/zWOx$yIhC8[qMah}VW[$1J'\Lb$NObԇ.Ucky؟T&6!h2% 8l&/_'*Px~r]+Tz*Y4j{bvVn{&3".(Ǟì38d 6NJkۀ[w1ڗ3'iB}5Z^JE!%r쳯ۍVy4B+/mXS@$K2uy)TLeƙz(?yL \0D+g,8>IX `Os%7㬭+QA܅BTwz@*/f|y 9N6&$&K0Ojd[6n\/^3YnE++d^lWvǑ'N${q؋Y**+ռO>as+{3jl.N:O.~Y{Gsŗ350\.BN׭V#`1Mh""}^A&)n92駪{hs3MyW&N3.ojvgaC5B?;h}EED*RҡCRyIPZ=v2ebǁLӤz'F]5NNn16 !0.ZV2ӑ>;&4-$%)1Ld4b IDATTa%-Q **/ρRU^b(wSF% )Vq:a "NbPY |jPS LBZP=iF-iai6bbdžϨQ8 P!ɢ%Z9ͺ=i/RR.9ZFr$*I&80ܤӢχVY*.&v[EUӴmo544ZɌiRh1 ۖVK]k=6݆f'ۙÉ^+I)I ^oclJ1 ()ʲfd_OCsYbPa}\4Ѫ0~ߧu%44ht!eVNghյ塿p22+߿?yi2P4xi5Zi6i9ɄBS#!C~tZ:ꘌtUyւokr$*I傒_bhkٮyWK+ZK jȽon(iugzoe )h®ۥB:mlҴ4~,XaQ(YKzp2Xb%IhAWﳚulFup:Pe;Kkxj:i:֟h/u=y#i6lM!Bn'/m1\z!yi۸v2L%Ihh4쭠z'lزswR\MQ[N#=BtO*쒪$FA$F}*/@V^ 4PDz J,#%I2s(t<-ZZ-n?wԂʔjBb7kkIH4j~~ K’%83pY\Le3|ԷkaML ؟ȴKfveKKR W%S*/谟j1 h3.NKSԱk$$l*/*6"$yIR㲻dCB!ā&y@OL "ELY݂ ;'<B!m,ilʸ)0*( <~!Bt&p:ϙiHyuh"_qx|ѓi2$y–$FA$F}(]xwz1xϳYbN6*9qI"BOܜLӬz%lٿZāML)%#%(I^!$FA$F}}J1ju5AXbK`nM!I\$/B!UslG갯-~?lfԉf#E!BxV9KĥK !1MuiEӢ,ME!"^:p[).pZl A.+/:K%ɋ=#Qr8%>Qv~ #aH ZDUL4ТR:D!Bx~7TUMMikkBrUE$.I^T%UI)IX;t=]ZtcQ)4="$/B!o6\@)^yoLKaDb!BS;t?K*q 6ژ%, isF^t$!I^B!)ZESǖ- .h7̊3:(d50#2 I%S^8$/i_Dm 0IG%ɋB!DE`B:_?r;di5E}]$&I^!i'$FA$Fqҍj1|h{ꚆOP9I%ɋB!Dc-y鶶,=%ɋB!D<9V%]?MYl&4ʋi+-/LCRVN| qJ|~i>nt1TyvLeEC9]$/B!þRKTfץ$yB!I)Z}شosuM*/v &ɋB!DQ?8sO=#y@f%:e˖r={vpfgƍTTTBwrcN]`v]:mN|fh:t䥏mڴѣGt:C|ׅB1E+H.EL^4 [Hb]vem [.}^4cՔ-I!F݅ c"cZptJ^LeJ&ɋ=|x(9HĨ|ȯ`H׭ᒫ/(.aufuدl Y9$yc+e L$'>Q%S%>$ycǏ'p8?#9䐈Ig1!B!BI>6k,Z[[Ytipgɒ%L:8B!C*/}Nc\}մP^^Ο'nK/B!"ihJ'nf~i0awqrJM!B!AVV .dϞ=x<z뭰ĥ+Rn7GqVl/{.8N 8y}8CIOO|{}m޼y^8ך5k7Inn..qƱhѢu$FfN8կ~a!I^EE\s G}4n]Y~}ucݻ3gdffr 'qƾ~+)-8UTTp3i$222HOO㡇O?3<rrr8묳زeKDܙO?֬Yf͚vZfMo={:_ꫯ%Kǫ _4MS?Ժu~;Νǣ^~errrC^8#Vʉ%N˗/WÇW ,P/Zf7o4M? YwݪXM0A=sgUz*--U{Ϸ$yI˗/W<:HM:5G60UUU-PC͛7O)SꤓN Y;P?_U(ܬFn5|E_۷oW(iڹsgOhěS^{-l߾}*??_͞=E%Nuuum{i)ۭ^op 7ܠvڶm[p_|v$7i6-[be6?7RQQǣx ÖśoIee%s Y.gvmdeequׅ 1.q~]׹ꫣ#1/'+++dyff&NXiN<-[Fyy9sLpYvv63f^4MDl&c9e˖AI^M=zt".?'cqÇv%f/YhQ S|꫌7ѣGc6lzkm(.r kصkMMM<䓬\[n%cӦM;x.\ƍyjkkQJER`#$ySJ).Rs#s=TUUqwPDiŋ98#cq>Bp '0yd-ZDvv6+Vo/"9ҼI+Wrssep$/ ӏ*|Iz)N>zbQmmĬ},X0eǾ}HKK8YAA[n 8䓹xw$Fqv-:?<. >jn6͛'1J0݉GAAA_Yf1c y䑐4-j4MXȤK?~<[n >۵q 7s9焼ɇ~|۶mx<Yimm.#???c^uXp)=аAu]bg| ƍ &.'O0Нx?>l=/n7Fۃ?3`ڴiiڴiJuiZW{Lr!rC+#' 8OSSʔTcƌQwuWzyԱ2331Bn9?F^صk U^^rjjÆ vRVWq L^~Bu}}jƌ*++Keee3t!HixBP*\s sO=H~I'?q<OPWWܹsi&<SN Ҕ)S"{Wsuq-{"&D !D;q8,\0$q 4k6l#<ɓqpk׮uܹsy;v,iii;%K?d̙Ί+Bֹu72m4233>}:>,'x"8N˹iii n?m4^y֯_ȑ#.\LZZ%%%|vt}Fsgu7RZZJii)yr9xXtiL?_!Dd!D1 u1uT v>{,/"?0|ӦM 鳡iW{_dȑ̙3M6{w9#ࡇbժUL<3fjժy1sLVZmW_}YgŒ%KXnz+/. n?ɓ'saoo3D}~;W_}5~:/wu/"ӧOIb}or '׿5d]zڵ+7x;3$ aʔ) l!]PB!ݻi;Nk>/+`۶mfk6d;v(˥rUTT˪nW~{pى' RJvijʔ)g?SGye|ꩧR6M_;öYv4M_^)TMMr\+ YﭷREu}Ffiz7^QzwUQQ{ァ-Zvڰaz͛öK;B!:'!HN3+М꥗^4M.~𫸸C9$մi=??Rv aݺuuY\}r)s̙aǻg.RJKK8N.R|~o&^9s,?=ztXg4v*_yyyL0̈́ bҤIL2 &0nܸmš !/ t˰6nY`Apyee%GuT}4->f4Mxxu5MܐuLOovٰa?Cx*Я8쵢"jjj>{"uaܸq~^{5:( @).B* f1m4^~eBva!tRFn̙3k&:EEE?>੧s .߼ysܽ{wY𫪪B[. ~j*~4M0VVV2x^9F!$yBsM7rJʰ#9Sl|s93228xw8q"6TV:V t:ijjrGy$iii<!U 6enng$'ND46mG\>e6nݿK[aHV"K/ڃ ťPP9iK5D8848Zy{o59gࣷ7 +kllL***J{{{o#T a~եp86Y,e2fE"EQeY ROOOPFGG%Io%KqxzzzJu}}P(J#^477'ϧd2 r9E@@r\rJB !/>b|yR,ez[,/״Z:>>USSAROw`0|>&e2/zmoo+LnkddDx=g)Z\\ˋ*++>;99$Wl6[#t;?C jiiI333{=׫>mnn~⯒j*kss%ё٬VWWiwsq #/JIDAT@0 #/@0 #/@0 #/@0 #/@0 #SEIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/original/graph_8_ex1.png000066400000000000000000003237031153663664300256540ustar00rootroot00000000000000PNG  IHDR/gQlsBIT|d pHYsaa?i IDATxw?gf6EXPA bE( 6WXDMitP@jE.ݝc=3;_w̙3g>yRJ aaaOĉ''|26~_+I0Lt cǎ|>^3f̙3o`ذai=ޚ5ki7_⦛n&WH)s݄Xb7of0qZ|ذaZnV1La $INpw^z%\veӮd~ ЪUa)//Gs )8a%\J|WcncСhݺ5p[oŮ]|A|LK>҉+\yQM6oG.]PVVΝ;cĉhllto4h*++Q^^: SLA}}}ض{cᨪB&MЯ_?,X ~c͚5u=xӦMÈ#p衇80c [=RJizٳ^aܹu_=4Mʕ+csÆ 袋о}{x^4m={W_۶>>(N>d4o81n8muV7vJKKѾ}{36lk] 6[oE׮]QZZZx}(--EN٘7oJx<l}ׯǵ^^zI&(//Gn 틫_D~ЬY34i'p}QaN}fVZ!C8S#>79 J4k ܹs1iҤ7P?۶RwЬY3TUU /W_᪫a2|+ J}wyTq]w'O%K͛7GqYgaڵmھ};nFt eee8蠃p`av ;wƷ~1cƠ]vx< `̘1ҥ JKKѬY3tIxꩧ\۪~ch׮JKKѱcG?۶m ۶z+:uꄲ2t{oQJݻ74im {?1L>\Rf̘.^F!{1{l,[ UUUhٲ%&N/o1XGuuuv$zUVa֬Y>|8;8@ǎ:_Xz5."4igƔ)Sb ̙3Ƕ#<nQYYcĉXp!/^>;wDMM :v &`>}:=\L6 Fؾ}; nݺaܸq {yhժVZaΝ={6.j{r)ؿ? =z?kxzyХK;-Z͛1sL\zh۶-`߿?v؁>]v6mڄW_}o-Z5~xlذ\p*++ѦMٳ1j(aĈС6l؀'x .'|JܹsqyUV5jڷo={`ʕ>}:/u{0c `ذa裏'O7ߌ~ڵï~+x^̜9_=}kal޼ӧZl۶ ӦMg+VgϞm?3>|8?p\O=fϞKk׮a}y>QRR_w}70eʔvG7n7o۷cٲeXh0yd&!+)555a^~e)]t Bsjkkeee,//lu\R!j[yǎeΝjk2qko, )|ܶm[Q8P !K/,߲ez[l 9b)wB)W\q|͚5BVUUɽ{f7]w[ݻWp R߿?XOH!|Wer,++ w\|ǎR!G<Bȿa'~*r̘1r)w~4hBGyĶ݌3BC,kޥKc>;w͛7]t ٳgK!ke4Mnܸ16F￷(_S`| {~ ߿_7>wB>裶_x)&LWWWK!|mi&{ク9{H"߰{QvIVUUuٶ#!CjW~zxd>}®>* -Y$XٳmO2E !o+ׯ,--K,WuֲW^;J!>|}.|rȐ!oֶ.ڵټys٢EJ!<ꨣ\ןyR!.],kSOmO•Sx%N9yA{R!7mɰw^)կln jX=˖-By]УG~,//} }7R!{c=V !Ҫ7.l݇~([o z7zh뺬ڦdmE!;t O8` gqF۶mByVX!򪫮rmm&rڵ;JM_||[R!y[y )s>=zBEG}UW]%r&M.]ȆΑar 1L|7{M66ln&zQ+++) bƍ8ꨣncٴi͵%Y'GEEVZW9~شiۇ&Mqy { V˜1cR:={iӦoߎǷ~?ڵŋ V^I&RJ1b,Yqͧ3bL4 ^{-aРA8Sk6n܈={ώx>]HǯEzj߶͕?`|a݋;wFUU.̛7èQ0`vXv;ygbݺuŨ&+W&ԸMy$fBhtkmk/GK&;II6o<̛7/bs.hllDuu5V\޽{+@VxW_瞋~F*Ϥ36p;wO?{ǃ!CGAR:0LhѢDHF]صkWX@wCm[0) GqD\9#GĞ={'`Μ9?: 7o}v<8餓؄ڸT_RǨ_Ht<P͛:+z9͛ٲM0a„5kV\믿?mٳYR!nǃ~K.+3go˓a2 JfлwofL'QQQ=zu]OxRd ^Xي+o>[fhi&tfun#ߔv5VT ;/ly!7,ʖ4`Tl6l؀^z)=Q<o `…Lf͚aҥ1SSE:rksf-]4U5kO?_qc1ټy3`aΑɍ޽{7?C"mmrT9Ǿ}BJ#s#]0dȐuDUw$ !RUڷo /oFЪsδ0醕4O?mt .䒠 ;vqRaԩ6_Fz`Kz%bԩ# 70l~rl͚5xѲeK :Զ e˖;ٳgc̙t:tܹsn:B<`k׺^Y\<&L={`„ 6wT^ŧC4h֭[̙ Gׯ_\m+ѬY3L86m [駟Gas;HеlΝ;JL=z]w7|3ޗr衇NÊ+/=Xf{T$?$aÆ#YO2_7x#~ǰ:]cO>81}t曮P\L8:)Za`߾}zaG /䀦M駟E]cԨQh׮.]?ݻwogРAX|9=\N:7D2IN: {,F ̙36m!C0zv:uƒ>믿w."4o .Ě5kЯ_0%9{8餓0p@رӧOGcc#{9ۏ֭[ѳgOt_}U6vX<økdtk׮ܹsqg`ѢE^~&?xh;v&)7x?jjjгgOTTT`˖-1cZly{1^z%,[ s5k-oLOk0gs1ؼy3f̘MgZniӦ /1s==z@ _~w}sL0fo1p@taxq'Tt3< .D߾}1h ڵ oN8`o7o?0:(9^f–-[pdxpꩧ+3pG> pYgaX 4*F^zAaÆ%oƀ0x`{Boᅬ=ǣ: p5נ{8йsg444`ƍx0rH<3 1m4ǀpI'۶mҥKe˖IH#1rHy睸n:3 VWW VB<h٤Iz塇*ǎ+˰C=${-+**dii޽0aܾ}mN^}ղCDkN3F~a;VjfK5dƍ򪫮;wBS^}? n7sL9jԨv#~{ikkk d6mdIIҥ馛5Z_xy)ȦMryG}4=vWSNСCe-dӦMeMM裏Y&sE]$: ?m۶oQCɲ2٭[7y饗yծdO?GrzYfc_-[jaH]]w%{%+**dIIر9rdXH׎ظq2dlڴw|G#-ڵv>}=zl۶,))z7n<3R4N4)l~S3ڶ]NPQQ\ذa7| e/Ƨ~baBa񨪪7駟-[ ۾?sV'lyav 160L2IӆgWBRss@ՏuѪު}p|Pe6g%`ߝ?̾ kBR]y^u#Dm3nLƦ;^3d؎lif?Ei(kF ]\7xfof?Q'q)?G^Fk &7q8Uz7YRYC}=T,'|=Ǽ;_o߾h׮^z%\q_|0lذ_xc*K O4 smۆۇ'myB4Lk{qwRSd塁[e@l{=(dA1v4ic!juRY;bvKH&b0iݜ>nLBr2l9_LAtwbrTL#N Nw袋p 7ַhGy$رc1a5 +Wߎ1c駟`B-/ ǜxgka̘1ߏӧO>KBdvz~R>CnIg:LXBj5ʹn 1d:qTݸ@H#ק2qHA湺)/ g:L:rB /Λ7BL>ӧOŋ_~94M^"D}rsN$7& 0Ŋ 8;e$* Θ J2 *" EΜ;+)@gfG<á96">{47*33Z>adaaW!'s>ݜrȹ.ceuI[\z%Ab^"8o6uHG+ĵRsÃ3!Eu4n1`)Teb 'Hgл 8c^V F>*kRYC tnnA- *t\ht^ x;GfSwTS|u<`cd`a B%$1uUMq,@V:.u#|9uJx1 i_ nԫ*F@}ҋӂ@4ya>O7fY 4K>I }j*ݴ/U S0J)- B¿3W4+YFvUexpOUP$%Le&BiЬ.@Ɲhx%lzTdqZ]=RB20Pj+.` S0 e #k)/49xw9Cv#7KPeLO|e(,oeD2REQoLn֝|TDQϑFRRyվu/zM&/aae0sb|XYycZ^T{u`4d:By: Ǎ=P֧̌`@AAݐf,eE 'j6TG#.\g>KKKD#6#0LΩB$QMWm]לV]srd UyULhm!E 4:! )3LQUdu֟d z‴HMX 0gU >n4ږɄϒE=_h V^B)VJ%vԔ!GIF0`w1ӣe uL"qNɎynFjs"ʋтEIhk ]Ȑ" Ь.@ڬBźAT `%bM~a7^'lct(ȆTBQ[]Paa&24ZYH&p.&ǩ39ڄ$kЄD< L"PKC^$)?<|c7ЀH#̙!^iuK P#uL?{nS`rIsU& Iya V^X0FK8a#S} U9#+Vd!JΝ*.>廚 2L-VtS>yG<'љ*/YiU!d2Titݔ jT>L*0LR.z7MiQ܁QEU!T b\vG/b9IoG%\ @Άz<: tia; )-B'T9$1 ߻ Sx$гԒd(PAm>Ku^z<[Im\O6a~LƽhLiV5ZY#,#-W^L^nl4hp N0-/ S ]>P5ؓ'rӝ)::Ch5]Im8{&̦׎~!D(saR0M7 Y% qԫ|dH/USS ~șh*0L"$e=PI#@|.dqѾs8(F56ulya V^X:C$!R+. P"Kjg{h>Y8OfOQ!Y(86o_R 4 {ʀ&u)r(T\ccSiŽf[۱V'pT\ȌJiҢD>{qC5!ZߝYNDzT_Qz Xd wHB".!4J(WHA錁Q^3‰]4 ɤdk-$/le3X i^{y,9RT_O8Z5A$͒9hrBcf>R?"eY6` S0E& ȭLњ/D\R*uu HXH@hnc2ȱEX)%Ba65u ^Cфa{01H!jSocHilk O.1nJe>Y]zi1W.@h4qb@P{a]RhD<(惁ΫlƤ Sa$O*/(6 [p~ap{LP&v {fɗeOfdӀzd|5E>iϏ&K*u&:A0 +/ Sz !`@@!uS* VZ$aW\I,U%#r1L0HIjJ|T2ec'#uo)JX|zc19]} h4bcR`A=/d&؛0L^ )e%uR?SR @jWǃ1'$J+ƒP\l0鍁^mJI,Q,+)/B!H8P/}>0B}R8 2 +/ Sy]y5 M Hi@@T-ǪQV*"M:B%TeLM ҫF?I8t*pKed;GKL""]?Z"L#4PD,Ҩq#;o@"F[xfY8PB])RJ<横G!`hh: 2k@DPYaw)'Y\2"oH, Ɠ1".ܔ:g,:^2RP}E#fdis- V="XBw*0dZubvU?ףZv0 )@WZ~tR@Hiſa(KUMc,)N9QM*TK3;m6.>v[#C "A֎gV8MyiTͼ9 fR\h\ R-Q@+0,2 ߻ S!itWh?Шh( `GhBEubEuBT~Ue}Gmt+QzcSB▍LD؇pXkY:!CKJLpPZ ˁL\u+k8Ug V^H`"u? 0 ÜQQAa)'"4´&$Sh@HvH4`+]{{*/BֆzN@ ;YQyo%3M#{8]VIN(LdKbt2]9f!FxPS*딑*@ %9h#).%E'C3jq=X^t6"ʶ[^B)R6: mzj]{/@~:.r,^Æ j)R4i@: :had@ euRd! p9&%ZWH)ⓝ;K7611!tY6%)2 B ɥ"T_2j9{bO4'$CF&ʋcNJӦM^7 c V^HgNHi h04siƹ8'ztZ*TLLzUM{q${[n~*@h{B)i Auq//̫[\N,1Fӭ.6 \(ˋI%I^zaȐ!_O>s 6oތ{'x"v2 +/ SzjYWc!\Ŋ)U=U0$~d OGG}3w%CٔMa.,_Jr.6 3$sK1'NP^ ,ŭFVXJ#] w*0KEus_SZ^ 44i޶2+/ S 5~nGA<hRjK֦`}I7&ӊK2V>mC&<7.%WwY.@\ZABDiWXRQ 2xb2#l KtO%n3=^"_a%w35`lLs IDAT*ΑS/8BPbz\̙3`k9r$ओNBnзo_<䓸w@ aa/뇧]z ut~g/ћ[. ~6dʅj!IjVtWKi0}g4 Hm-9dIME=ЉƹtQ}PPSmcmb œ۸q#㏷/")R4ۼ%D$ t ֏p@6K="tA6].k vq,Őf.BGMPA>>3yh':t).v9?payI7;v,_]t ;,'b V^HK6kDY` 0-IYQ3vv%&X99?ekY7EQ`*.X17@3SSJ C䈤 DvAPZ՝•=2_@Hyw}v4ig}6F; \s ~'}/q]w W^yeBdm +B 71w7Þf@r4-CCm9"cO{m>7n!"}NdeRhR}RkC5둫lc6$KSK+0ֱaug|͐ d*|@`?YI9hlKv4%ř"MNe֭[qw`ѢEعs'*++Q]])S#\-/ SXGBf1=`7 FQI R'Sv1 w+Yp+C#( #x)VT +0ʰZ0&iɁ0bPС{,)TXya"fUM  )!W=0М.j/(|4Ү0co1LȔ奨O&`a) @%h[}"_Ӏ}N,Mf"-Hre] ő(fd}֗D'O1_PTS5ytMB#= -/L)KM1@k!4F*.7BX MԘ9O3Gl5$,NKӻ"b: )LacuYi :Qc$iQS"xф6 Sjh#%SL˖3ܸ2$VpJjFvN%Clya V^H  MWiCjР4Hch0 T`XK\ )0BA2ӅM;ꤔ+BY .( /%mVbtRv%ވC -"mVilJ250BDVz ^4xa$aa afݩG}y9ʵ2Ku>?~ݴ!%Hh9@h~UH|4B*{<Ӓl^ +.4IqEU\aWf2 $iMHsΕH)CV +A !dQqDŽc^)RJE= {z:uy x O(ur@B F QuR) K Vc>H'#]iu! g3$(!&` i> [> Ƒ5h?LH6˫BcTQ:Hg,>naW0!M%>؏Th4%%VJGps-T-ivTFY O 6@aa t0@&O`@ S'!F@ )4Ojjl!BikpR/O\.Rb6ruH'gR 4Oxf68EzPaL*OVӕmiqPG>7CW.szd3a)bLkK:(%h&yK()o4x(s4 H&D 5i L<3*-nQXSYѭo0 =NFk4т $}GN~'0 +/ SK^Kq)&f0oϜH^V^@=h!5z yM\ DO\tWH:RD #n.$Ch97QnfR,(IA }Ù]YZ%/U"XI0 1dy/Q/<'̀ rǀVeF`4~@i^y 7ߙeQZozl yT%^E&Zh(6F#Bi)!kL(0?cm[h&\Rb(z.O{H@xiZSQ! T(Rj-%\ 4L =Weu5w㌋uN)ܲ Bü&u˾jFlRKVr֋P&3eteSgJX35`)=ፇsf7/$7H)Ova –)rL%iAڂ\4 hth5x@X(k Qԥ)\ d! P`)m 剄nzKqd 6#0t'y ȸZ'D(2i jKߢau27jq ~#(qXyawrbJ~CBfY]7 M¯CB"@J2`žP #x4(3*MYS|k"j?ߟ`lcNhsP[uWy|mVeLjf rm,6 BP&3M dr%.ad0?]ƈh }ΔЃKP2/--uoe )PeHnšR]7RM @ H~>~a*--9euh0j(} T$d`S!O 0t:ڠ|W5 ׬gÊiP:o 9 F.W`eal#KhMHRC@0tY"4 " i$J%n=;O ,ωze0N^IOf:R|q>CnBi;/5+ L:q*0 (E ~-2Z!%r`:ۄ%@@[a0%h€R&D  h_1KBV7UyID. CI %Q7'jO't*PRDc=_B!mފC.BJn Ih+΀޻rUߘUk y   EI>8\M`B$\.ޣ7ANCAiHLPr#"m9Fͮ~juwu|u1/Hʋy-)d?HiGCnN:0.ld~B nL>3[eM6-V1kcXU6ԧJd멳uP&ҟפ &^66똉[,H 1m9tVUuq_|_~9g'?p⢋.¥^ wy'^{W_=GZ9 2$Ȑl#!dXq ;C=s)} ,~9.iY8wR.^m=IF urӹi I=_–EycziP%2r1i.I.a~8 X1)7,"bx#Q8餓p~eN%/#o)e b袏N%|ݠߙQEZ!? +킌=qa`x;1jbNJp(%qC~F}$FtL"n g$3%ihPo;o ml)5ghK6oN=:ϣV".`*aT0 LEf_(o{aa `u^>|`߾}0D_pe1y .N8؏X+ӎ%q;>!:=I|[g6d] r7pܿH {"W伇gz՛OB>ի^Ͻroe[ j z963ꉑ_UÇ|dA~̸\z,Sz]}bθO`~H> XOyIP81=7ΆśR2$4wT?xJ;? JK? ڑbmlx C|ߋG?xކ>8|0>/v+(؏X2^Ww~w/xA|׻ޅWpWٿ?=\=mszbQ:qD\z\y~")?2m UfP=rV!ldmuvS@@t:;W z=\Yەu։ꮩU\a`p_^z_= *m4c /ca`~\k/q-~v=y{q뭷Y/UJ!z^""׾mԺ}/Z`~qo|64+} Um160uZt8j$8$,fJmCdе g6-*{ IDATtl֨u@e&2{f%3w=5‚5/u^>1\{D EԼDD, wꪫ𒗼dg>8+_=s;=iJb+$f4JO s&ZbP0|lIYץ ). 렌cئ P2n{$u>D{$(N]6ܺsYۺu՟M5w j`E  q nm3q}[w`Mlnn=a8s/|a# moW\?O{p뭷}8S$ Je/e];wu7㢋.F}9-S6dFqQZ0p&9ON)o.H (+vҶvyxI׼7-J%^ii @Ϲ Y7ֵn}:w=0>U\oHs՟Hm}c5q V qE/=܃}ӟ4N8%2bو%"b G? " 7܀ngn 𒗼-oW_??3?!G ]_Ew!}7ELȇ;C̅d0tG{#,H(QmF\F2xa_OOa,,`(5 uuוCg=]tQ$1߲/俀B`V"-|6GAt| `ɋnm~|;ߎO?/|YËXD|͍  U6uG=d+*lp<4єPEџsZI?7,%큑2ZĒ=+t1&gh61\r%o?<3q$"5[?͕bM KM`N_!-zKрnmGv*@ Ĩ|atmEI= ][ˤx[p}axs c ~/~W ??Çu{.[#VDDp!0J Nl֓Nwu\6- |v'HmjeŠbA۶.W}TcڤI +#``~ˌk_tJRrdmCD⨳9&`"Mnu'69_ԱKZE(/NLWt҅ՋFgY2 ?DN>d:tp#MS\q꫱o><9[V{챋tʁx%^#"""#.>` ;T7G9+H,OmbyzkMų GX*cmrE2% m^\:}<ҏRov tMqp^% Y]pYuo\ą"pK̵urɊ&6H$$ckVױ(̱_Rވ@>GnF!y!7H&NF2'7 x=F{YТ6"`ij0RpSE'!W0 eIP)4.ZK8%D[vq%0;O.dŠشKw4Z hFQK7""bb0]$U]eΕfk4F`F̤Ɨ6wg7y{i/1m3:/ӼXc4+nٮ&M6hEy_pE':q x~17^8]UYo Ո8ziϓ0P) c$' R:tКdp`06 8O\㋈X DqAgZ/:Xh= ? 0g +]e5hӥlb&weYdu`x&p՘mZ$%yѴo6<.乮qӄ=_4FIZ)R|MeQ] mkpsMZ%z* 6M`3MU<#,vM5X.tIVpՋ7ue:d+DD1~`Wօ+`%;}Ai@'S0 pLTzOrIYL:.:h4К!. _tĂjhX~+9-:8tÎ6.@5xB,R9~a1$uݵT19h$L!vr9 }g1`p_DdB2 N?z8DDH^""0X$ȑ"۷U } .]cnFfJ˄,O}Jz}L+( /MĠOPd<4#L`Jg쒛zף_iB܁tzM5!0uۄv(JEndڍ Tc4ElC%~B"+# =H^""+) 1aX=tEZ!} 2w"w"} G1! .مђ0,Dw[&.h juy0[zeZp"o#&w}T=[=e? M9J6,v}ݿ 4torEnbPJ(x[*;3[:/GKD-t9^ÿGX) ۃ0ćIJO 2Q@Eof׽%t5cA ݒ xrKL(vNxz]s:*O}aHrF#muonA⹒ZOqhk!GUFhb?I҇Q'`O\r\H8YČ_7F"8Hmxu*OhH^""Rb">SY%o+^iu~܅<-Ƹ0P[2qjmVq»%6BTtQauUFFSa{:Ia>rBdE欥˘4}3!1zކdC%9ܵwSAtha$רydG P20I?0qQX z^"("yXS?Ͽl@"!`mq>; 4ʺ=yXpe4Uh%4 S7{B&%'ஞ+MFnd8[!Lu4]W1T0n ׸ AD&&w*q6Z"0?:YL M5SF;~\]&DX+,(HOlfDDQDƐ00(5.B$T,a%qR!H|(! k"m: ى^?ɉ(kIT Mˊ5t]%r!_? ui!Y ݵ7f~.*sm1Q #mfh<瞸V'.VDz1)"yXS0޲qYƄLEȊ#1iQ2t!KJrq!ac{ ,Md(=,a У4XZ7ALF` %{XE|>ZO"P_Zd_iԺ!B;G`jI8!b<!/PXS1a\WY%DGKD#$0!Ӹ c[`J <5%q}r$qGU?9o&4,}@ՕG>B1vuqE!J A^BBA|'9eNz(Sq'~B, !1AU?ߙ#-zȗ;pr =H^""DW!ĢbRBI#H\#eą$v׊vA<3"}3ysnưK/1k* cj,`lcӀG?uО<)2u"_X2b"5v=%1abRb` /{LBċRGwAΓ 7]~ v8 KۜEf礁⮽33u^k`RfchL4LC>t`L҆"LBd=tiϐ؉p~ad7beF<@DQD^MWWC{N GYґ}0v]xȔu1M e!Fbrt{ns$Yw#K40a/>q }RqpF8s m|IXQ%qTc~jqɰpix8{̐V\($S\2$.O̪m#o&=jeny%YDKE$/k o)uЇEYR wM-R"?q9ia#C t*@daLC+CF8x-fA~˂yw:&`'yeZHƐe9v?(*WBâ& J!cڞo꼠Wk$@yh 1XDp5 `}tjC}tÆցER:T+H8h\$e;,2M5-.{A6@/"Ӳevcpd/|mv3b9-.#<0d49_ Qaa֫nm)en}$ٸu!!WF2QGNz,~d#0:r#m9rlcsCDD)$ӗu ~/,d)FSd޿#t/rB'i&sw Y [Ik'/@Sj,']Lvn!\!d!d-FO<x(x!'5Qs!=*n}ƭ$k&OgGE磳 ;{nC*}@DYDKlL( '7s0\X~FzpT4@ԓMt4@^4kȂM H ^?[T0rv^L>vt~:`]o+}' N/^;cT'4)ʢx0Ȭ6WZ`PCŴ⏫RwJNS]fB&Yu颞H 룪)T D #5x_P2ICsp$c4eV/Ӟׄ5cTc郈Aauޓ.dY$ +$(c$ Mnr{lc{7?!aqImb˚AmlVDMqT{bsƐ0߫I_#gfEl.hFQK7"b2}YY!_DžԻeװⓥ־,R XdȑS"AꩌP(5Q 7?syAp0 f>H[n\4b|}u[/mդM$H{2:8rD0H|wF1b5E}>:>X³$LYUn=5!B<2tCvml!l>uXQI'lT#.MSl%m(&#!4q5m 3E A fڋCdf?vu&E&>uQi#,FZW%c0 =r`.Ycg{ lcsCDD)ȇ%dJh/E+KvB IDAT4(Ո֬H}W:߇-S;@^HXЭiZ7(6E?a|i׽XT$-쵻7ydyEgz28_DJ45Z&!I=K@ `|J9z/?$uh G*"yXST\b"3XXrTkPAR`aJ]Ra&I\Ώz/yL,Fm;JKx:mft1 .uJa]΍x-ڨe1m[ڳ"E+1օUO.\ !/d!H^""IQ4*QcZh/ ȌE'9xQHΰ4ʡ_b:Tt&'%I Y0PFL\L`E?[.N`} 6POOX%x*`֭khr~>C %2 Ixj#_TE"""VŋC^eRn]"[.q^P)4qld+S"'jα+\>B1;j{D벍Ebr$&GH iGj['#M}t^m=t]tG4ɐDά2Nj=}v:6Tۆ:.]v1oT1wM6B)ֹS/,,z4na-O1fҕ-Q4F>y4f9nsDDD)|P>lW.}""DOT zA7-xMpI%҇.<E{BSf6 =8u+.Y@]}JJ|n;$\,)zYl<\_4I*Ƹ''Äo3M,S[#Ƽ"VTǢ.|lEiy%;$HR) 6ɐ V 1ÀC[@gf+:'ɇuQ5 ['.>|J8O!\J2T9GؽcIpP5Y\)x%>|cSq~m2&*`қÇ+ߎO~7ߌ:k9'/xcF0"yXShŠ>-B".Ӱ<-BƚxRTo<TԔkTd&X2iurJ oɑ2=9>L]ҎHl[RΉ-$)JomA 0{zM`  =5NsVsunZsu+4!>TL,ſ^pCng>7x#hM\r%xԣ{w#XuDxݍ -룋\;yB{㊫#T~y-]uM(l}K\ؾjxDGHЧN1fK[zgg Nyw*A(Y9BQñv}UF[q"zB1.l.pWoG/T퐵l۶|cg̋'bqc-|1絉 9 c8|qR4<"k,{$[j],Zfbs‚˳,|k_\s5G7矏7͋bA$/ku顫 #\{k&B \ICH>s0L۷3KU,Ĭ K~5>!.EY$Rpw6J&ni!Fya!d*$o(M0k [}4Y!kCĸ־2y(t_ztP 5W " Y688k[ Lk|.s)з < BM` 3<4Tf2Q}NJ)k0sc׶eɻC?ϐ);#\V)mQ3怰8C@i % C6f !IMcf?f!$bB&m' !mq;YQ@szB LƮf  < #1)"F ibgǐc w )XdmaFohB.  y60(X.PZ wQje>J MCMDC&)O깰?AyMK@ goGp!qԧ>z*>O/adH^""0+!^0zXQ5KR#% r{lk0*hRİl )/u([U2T9) 1(6XH/4Z "Et0@W<0!4i*L$CFJY*ֵ'h6bww~7Z%,bKD1DRSh:Ñc*+C*ݭ8_iGI8-PS[u p x)mcAfXBP^ܦlܚ8hEߩE)sabtfZOuC}WM.bK/tjԑq=YW?Jc|2Y撱{C~;[n}݇}.<́sn&3L<]`#VDD1PTRO&rd"4!GM>RagYw+GtUA] zf_y3"50_"vv ']fKTL{\&!NW],O˻g])׽~Aw"x>1|l6$V0ot`YQnIX|;yx-ΝZdE4-RQ6Iѫo5 i2nJ>"B8]MAuN6iϿbJLfQ""fBDD);½x_Bamw&”2 IRH\Sx\J),K;B(=7<ϧ@a+62Fzf\ {:ȪxEH$fy IP.ppPWc]Hjp-.أ5v~P$}1 wlbkgyYT&c,f 3M[EָLUq<Q

    0#^ӻh9e(*Ġg{%,b>a:xruE.68k^>?OAԼD wGD1t8XR鄯j_R^$y%lv2j[6B'FS_N?)L0i;B6M\ְ<}jc&`"`ߑejQQ;wqr7cKBHer^+UempMrYI('vΕE!e1Cba%L -8M^t:ALS볅hmlr=/{1XDp? 9-ixax+ +8mhQHʰ17>:3'BH௟ֺd6qe]1q?rB Dɻ`܋k{ LJhr`efI?|[~&~F%LaS̯ AV ?ͱ f%"@]fQzޖ 2˾^St&u 󎫏R sޛk䚸D=0]O>FJ`r:.@ȋa41e(M̲E"3z"P"9x"ޒ i0J~n<'rNjX"Xc|7}j!XȕU\1Ag| ,=})/ulإVf:e= 50rr5_YvP"6h]SJy^ PՌm֡c+$u>9"c=H^"" BB(.u$Qq=ZX^oPnN6H!,Қץlm[{y!bc`T"C "Ͳ5^ETԯ2L{_D,0܉ P7i#CiHm̺`YJKH]0lL%E|FA.G+b-KDĚ}<)n˟d d$CX%P vRd0 1C'iX ČCSqCyw.댕"0 ձ[Uqů0J3;Ңdw%OVk&cޖ:"zRf ;H]g}Mhu\y@ W6yLQ֞Wh!/\$#DD)6sgnEN(ނ#Ƭ! IDATi4θ6 ) bbrͣ 2 MٿF D@'2J"U&M YQI'05 zƊs "PZ0 B71u1ױ-n2C$EFܔ"b51)A6M6[إ yp]tb.6UMd&;buYF lc󄴯<$tijb0.Ә66\LzYבNVKRDwqLG˃m9,W0ߘ2Bf E㲯L#gBDҳ=̭;m,bn_r\s58묳p7W޻ַ_җp%/y 7óiwQ Mƫ^-My)P5tCML,Dya ujRD`Ղ )\k43̄Mleb@⎺12-4L}xv!˴BK*ԇ{L^/C"9C1Yk`=ɐ7 i u\U"*%"b~%"b }0Pcr⢋.¥^ wy'^{W_=ݔ3GJ EZhJN!ƻW>C,J@2F7c- .W t㭉EK a,i4a"g+gq0!7y<. 2Q&%pԨ23]Eԏ`*[&J#}(*dvfElMY e$.$CM>G4K f5nDDLH^""m\z8p~7~^eٟY~~ pYg&8׾xғ4msf֒t[nn'ȑ'72O:J-L}\wkzigÅUu2YD}=a)'+FɸuJ)X`a9, TrlQ[$0 /ӆ_Pԃi E]t̙,~CoQ/ !q5ci yz`:(?ߦE;G?n-I]v¨D$H^""7 8ꨣ׼W]uU[ow. /?䅘qe[B2@+o&R!W4qQKcL˥;^g 28*5& BncURZj^I O0zkdfxd V.UqvZw>>g%3ĈP?1]kiCɲy!$f^se8V[cxE#:9mƉ~JˊUrEDLH^"",pK.3c~;1#rO3Z "O,L lToeݢhKfFT 4D5rYV90)|D(ɥwkP9\`G*uam$E]]\qx ;.Tͧǟ~z N2I C.ëf  q0h8$07۴>%DmH =H^""\qsc1?`A|OwN* H?%? $>#%?nnwQ!"E 5.3pZYG~^ q.\c~ w}4g^ah %EU9>+$}|{}N0Hhb4wڻ*6i'ػ*,jwr_b>?D y>8@(&0Xs]󞖜"#/Aq~Y:*zMw[+I\ei^G ;@qԥ^֟s~AnSXc ]yQs2Z2=TfBJ_xS*> 1ȥ PuSf;!r./pȎYEG9R?oha9{^+FM^PYJaO3q*}qW9sŕ1Mɐ6t$ZO #5K Nc[ʼn[fBnCɜM;Ԕɹ~?$j9Նo\42 q)Rxa8Hd _/MT!B$i"%fث%"b8g?{`9{W^y%^.y睇 o~qEO|~M$% HH%4 8yj(DBĘN|62䪆`;fVtv {(RǪ0qf2'M^ VڼCB&25NFwb 䈕B !z% AILƥakV)P[2nr HN0 iR1i$kSۤ͑G% X~7#" j^""V{=7tSe_-?/}Kq{Dwpޕ韧R* N+rJУ.&v-R)"w =.6!-9 L}}M3Pf{zDS;iX MH@) HyGֹ'4io!% lD?붣{Y (}YT47Zs#yJt Ep50~(vQz5F{4i6m׸1ecMǠ7 5/Qsk蟣%bn%"b AD7SOZdK %O8L;f &vi9E(R$%.ק O죃( aJsBxrpf %AK]d`AȌeܦͺmaEA0K,$Y8THO(I rJEJg$ư!-@5dy[$5bU՚aO,arޯ`;F+$fKC /ּ>|W^y%nv|nfuYc㦛nEXkq)|%.䒅7buKDx >QN60+[Α3 ̮f!Ndy6ː2^JõC$;R&Ǐn|;}O6et1wݑ̊<4Mq'}oQxsX*_<I9"r>8l``eٱב.CtCM눪0'o[,*)LN H=;\):Hƚuǵ&mB-^0:tnq8q7y?΅U3{sA 1c4BDԈp ~hg4b@Q>@+ F0*F/_7\9{GժZ3{f̞P{fzkfOzI'g<]v^W?wn$$<Сn!LFQ4ȹsE,T.aFAE߅w eˈŅ ^THdZF+ !0KlMbi,nʱ ɦ.)@bd"Ϻ`2c]2֠ltͨ|V[h}A͢ma9ɩ-1 smqk@ѝ]Y+0chacv~>㪫9~6!ˢG#ďc83jzKxp!*D\Y(.PM8Ni` H{!gTԺQcި=ehE?E٘KN Z>|=MzcJj݌B^/{?~t]5z.]a߇0c}:6(岢ucc4*m+؞4֚Z jz1& CךK>M\$ۚ$,leitJܹ龜ɐKBz)7}/3_;;ٰ٠$EiȹtXzk s׋/AMԑ!d7H]Սh| s͋cF}GM>R}!J!@Nt]m @%٘``Fd FuPsTx m?5.M ("/D^y"W_}5oD\$ /F<,\&2}ݤ$kb"+ualK,k-| w!JޕNOM+6PoZS4ce5egO\ _-gDxRNŐ5ooFX*d+PveBX4A4>ss^M _W ?p7⢋.P$$oX CL Ntr{C׷Q( (F䥬\?$(G>'IR{Fl$BI@5%[SGXW$BJf}(L.ћfY{Ut:cnhK^ x.]7"(iۉE3 2g(|QyMt.oa4 G[wnNPhӍǗ쯈kZk]0A ([(m#~C۷?irn>v1x8QaKb&y{Z-/ܦFrԫ=$ybwi )6e*U—9g~IS#z`b!D]CNcYNQ޵'1ƐiEv#E+|OxRa 2Gh9'r tuM{l`xC)zAD{4+"C<0ڳP Ӌ4K{".ʙ=?$Fs+Xo~/| m6 ߱&l<yIHWr),O~x;px>m. GDE4-MJ((b ɐ`u<`&DG_g(Ih=r 0aћ`R^|}2q~lC?KS:1~VKKVXP ;Q3[k:/S"0E(j I6Pý;j"n/&/h8n-h֋BMףCx$?O}SyLՄ*7"!p-܂/yK~xl,#ZP5zFgEԠ eJWD&y}e-.1*cuLsǩu.9Ͻ~?c8Kj$?Iͼ%\6k?*?m yq0ןa&mIT㐞ckV4j&ќ8i7W\qGPk_nlݺ{oo8cuVmo7\9CAq'yIHs=x3pxC娟+FԹ[mXCh@XLykJ^GhWMxE| ƻ~Z0ʹDoyc6r sD^<>h}O?/| {z+8n 솻c2FLIfEW v 8zսN| )^&6H !i:VP|F6s5&ԇ6G``-gP!r!M חWn cpu J`ȓ|u3$Eb?q'n`6-y0{_%9G]zWxﳟ,gptc`3(աbu-? ؚ|VU,6:hO-UqӼ w /hbX j"BI>1 vX,8]ޗPz^ӵqmBi:Cx~+Q=KN !_pKlLx߲`*zANSN8cMx,V:&c#~Iy&"no5|^n&CI9 PP U.~HU,`KXbJP!kø0x|K|B Bx:U,T> 9fvdalԞ)mt6R22M ;3E}.17Ve+{9KJ1شFp"zZ .Z9 w b(_5%,/"w6^_󒐠}v\q뮻PEPמu'|V1}Z ’`LUI`V=, 13'O ?m>_ tN2yDYOi 3%Z+b Ei-[(icf끑az=. WKCKհ,RTHjc]\RYC'/2YGdpJ%a"|38,36p5] 2RR RI*Lu-zvFO]HNzuGjHȗ&1k"s%_f9yv0ƥ}"rϳ2!7f:<4}GfE` }я 9Fu j[H%!3QGO}SzEPn3Vk^""w>154aEړf^4j|>Jr8Iz~&lg)0s=Gz.MgXM^ i/zH֜`u^&m,!;ĩ".t>1ֳxɧa%VASh""lJnz?z|H_9!~9^{ 5WFy!2CY+ڻs&mLbE_wkg0- ^:T5 meKOY<ϳJdDn\o_֮R4xt-)Yɤi"y^<`׮] 6~Y=i#,ll0FobaB(YN6K 9pVSC 3(INL3:{2pdɑ@EB=)n4"#˨IzLg 6%+ndYk\2Gi6&t.ePZ9fť(RybќCԚίOzTF~ea_$"~ 4/ )XBE]K/_WuYg] "k,c{ЫmvO؇Ae(M+k%BǴХJʆ>V 8w@r-88TƱjzBw5Gb7h܏vj"Êc"lq9ڤesYTx첐6C!Ǭϒ eZ&XBnBi3OnH !~[0}ֹ ϤĥC.CYTq):L2IQ`i=ْ!m쳍}Z/kR!y^o(&d PU0dPg2s 8k=C]P$D&HSG~Rrm65q _[1[[x<ܖ3$$pҡ#(ᘴ1Lx^,Y!r)ˬ kx4{'GǢc8wr=Z$_aD53ha=u,1v"=}d( @6Fʚ&D^z v,42`> %6$k=xz h,8d7 DpzVaj3F$lV$򒐠O~ksN8#W w3f,xQ1'{2@nŅddjD Q  JAƯ9뱹:qNNP,]G Cu$ Y`9pqowtMm<:q'0zbP2T)e-li^~c;U%k O^Aa[ 5a0SX duXEFF6?&ej f4/ )XB=܃#<>n|{AkfԀ!"-O,n]K$'9Eꞣ(EB?s] Kr-g.Μ ~%[2Rf]FAe x%9:hc XhM5&q$+⮷6V6z_j^%oD2e5&<շ|Vup/Q/gMn\`qݲݲV%2 =54'۲Jn,Yiҹ'd$fr쳍~CR605$KB[s=;;a 7܀8|d#0@c[#߿(o.T=, V D^6)yIHkk6xDZ|~xq[ףIqdayڸ"9NB * )LJ`Ԣw%CR(q,Q)Z}6oU46\sd-*I ޟ PڙbQz> 1]1%2G,P hv$LZA״!DPJMQ{A]j2.lN}@ E"/ p/y_2~}Z,@&uĂwWe5ݾ *aq^"}f ,,;֤oYK}/]C(9sD-2"IhQhz&o 9\ǭGE5Xl5dBWY33avstKGnkTrΗ32W ݫ 3\v>ȳ\YC~!AmZ_'ݰ_ğ! BN_IQMIS͇.VkۜyIجH%!u{^cyyB 6H24M.~*Ym-cE 2Cl]@gcA!r5a\BBI.؊ߺk=-%t$ x5y)kh f쳍}pjH#eK%!A\wu{{C^{5롍eD-{Qްaӯ%tL Q/Ҥ+@?x}1' 29cR£@}"MV+.6:UtH2hכd;3`Cȹ6S@09d{`I~& ˹Z$x]TL!#)uM`~[D3LH$$԰^{y{ެ~F,¦+;kbR'"u {cMqdGd`4#="vgB$EK:yOBIC'9бP_FJVq>@M5هYWѶ1@ L tLt4`Z3~?ZϢwH9NfW{u8fB¸H%Am۶۶mx,,ˁ/_ G\d XBK\$x|ViwNATLxå2b!;l`) ɔV1MZ\ݕ̇Ŋ!lcZ$t ɘĠmlvk4U+@DBtp{v0_2cgNC:.M+K. cQ b˺1?6/EsBZ6y^6)yIxPꫯuV9AL40BJc}KObjChnXw^ւ&7dPRj,|z<>$/"Pz[ӱ˂1N=VL4Ge @%GFfJ )#-a((Hyv2y#zbkɧ6&֣]!D\]r-]a0R |\,V8"\8Y $ÂcmL{lBG9ಐhXasN? AA rǙj %'Z蘖k+؏6@"鑗@tE*O 'Kv-7K:3od؜d{r.Hz7q=(ͼ<-t lfxIpyb!ukFˆvc9V/Rٯ?x쳍]'N?lc SC$$xp?'=I=z8cqm`dcBBt.m!To\kRנ`e?ۇ>}`qLOG81AQ]XpVQqnlip}Z%uvgTF(ϋ 8{yszFǚ bʆiI2PP;ƯbX2WxY^Ή_VD~,iJ\9հ2nIYKB;{z~hQ}!2rCׄ%B$ɾTXq$)FO< ?Ψ2~v~96ekXC1C= qc@@V +j"db5)Cb_|Q~y8x*y|M!:z#&0fcx1fJOdʳ㽟JNGb j6BS`Bdtd"Ĵ1'F"/ jp 8S׾=$euur :ꨍ޺A4!rCZpL%i P)vI} + Za 2.01`jA,`UU9 |zV\9hmz 5Rkr E%˘!Y|_.r!z!V_~%rt=.Itm5'3ABtQQ25US~&.=OoG؏~tjk?RGϙԂGMi3=GlcB=^/3/W~[߮GFHeYKƒ\23Yn݊׼586zxPA z,JVJcvZӰV1x f%Xb}T Ϋ9"CªiDUq~o@Hۯ^G[=SڢVܔ\.E2` vsc#D]q=%Bt;*2)oO}_=cB,lYkP h wl2䞸1$畩gC5^$U~wWu1s;%$)XBǶmpɛD~&܍t.V ѼDg!pԽ. p3~(DEѤO,ڀ]x .KYV;~R bʽC˔cbj4i8 !렅U,v%{$=%Z:\6VˠJ IDATϤS"нYܤץ,9M{ qeNdU,9xuMBB &OZt"y)[X-X--ZչפfT*cbVU X!'/Uؘ>_IrpdE~d}SkP605$KB׾Yav|XHc%+G5{2mTmvH.jk^W;h2ܦiiՅ7SzcU'e4pPiôg7̛bkxDLq:A;5qxO U'C8i{%d&c͠8#q$/*1BK&4iJuD{eD-DݠNGϛ1%a">;VVVz;g0 B;za^ !.Pvt/(`#lܰs  *V$ǠKQ׳=ڛ"iie(X{o5+>G1N`F]|r>B ) X 7%lVrD kM(@܌\R<,./ȇxQ{ пmTb8ٌ! $$xOƧ>- e9'B\[ad¾U$H&8)V|h~^$v+w km9)06De_ನec5\ux!E=7-#3ܧ1İ:;PU&)BLlZM"W+VqP=֦`M0rS"u.Pl)Ԍi$0!PR=0}=0RWoanK$lV$qgꫯ_e <'|\p82᲍ih`2TŦU z]{갢`ys. FMH]hFUv $ۣ'a_S<5 hG38{Ԍl麟f~Gmo]_}OBՌOh=,΁Pzxu =W㗰 d뜋1'wm-V wz`D/.YB0.U] XƜ?{^x㍸[kGqDϱ^z){ggVrƒ $$x|řg;= r^r^Y:LqSñg :֧IQlRHPwba՘a.:,-fRĥNR\MgݻSN/`r4(0 2•A^`: +L_C|]2%b-n:8fuxt.~og៻KJeC Mc.PɾfJ^f|5b=A tIx_~馛p㮻_cNO$x ,aOO𲗽llB/MiҤi:w1BcdYǚm0u:L՟q#,T E3x ޜ`Zw>~{"A_ԡpX$)} JBCT5& _wPGCwHQK_Ok`љm7\!z .sS̺㞟J@Q[T DFMR,+ŽM K`%mlO~?q\uU=EN; Gu.BG]vᬳ)'>:C"/ {ADg}}vuHLyS8:q"!3h *ޖ+hd_Z'MtjML> -3%ψ%2GrQ22ip raYi^ Na)ќ谱&/K]wn'p:,| _H%!$l߾Gu^=yk/ym8Cf=@߀E'#bL/nmz-3}ü@e\m}qmqZP(dF"0nFmU|=9kU WMd`㇝1 կM{ȒHs%qIB!4jiR uh^>;>X##̔0dE\|Sbd\ѻy:ME11x`e-[H%!p9no?|ӟ=כEsؘ^A)@ЫC{Qē"ޗAI<6B`6EA0\*qɠdF-BP# /%2h7ii֋z&zjן;R?_++f2~?C`GS32L&T J ޲[tNm,EfD,uzƅ1ߓ. {A8xV#[r3Y?Z3ȷq\)17M{^{{bΝ=9D"/ {lxoƷmFݞCc1MX ӽȾeY C AƆEbú0 ɱ`31zBŷ ktO̤ ;'Ix^Χ'ʵ{ޞ^<X_ $$xp һ2lca'"y.aH ~ų/)/V'O\u{lIdӈRR.%'/L}̝3ZH4.uL\3? bWCgj#<&h"ZTk|蹱jƴ~!pk]U5͑.Z T U$6zq|)F6  %l /"~0fooe@ ]lk_b&0tVӸ(1,XMC{yew6X_vz5V{u<)a;ܣIxp">qaz(CcD"ܐEײ~EZ&)z_դK^g7OE@]kZR+x^ڪ_iͅ%(]oУu<wD3q%K̙l~tMxݔ%D{3'2yԼzx#/|+. @5;D^R^Qi ?Y^aC]S"ϯZ !5b;4%nKƶv7_Q YժE2%0Da?]?@BGS"Ϻ;EeE\'{ēkPE9 rsz↵ ~?B D^<>Ya:О%8=%BdE״NacZӸI΢fc? 7^}s bE@"ƨ#0yg|6eиe>H{] ZLG/EcQ}V"qqˢQ?o< @y^Zb!/Rӆv滬,NLV> ,xK܈_jX#O^NgO͘Xi&0a"%$4`yy;w>V s"? \</J^^ /4X;FBtYܳ%$LzA"2^'U`sJ`p0IZY&ZX%Zf| j=/j>;߅uF"|XOSzqrUR_Fg2F+x sY 0:9!`xQjW4P)ufֺ02g6F>w*m3No%C7|3җt#MRdԽ/<(5P<ݟ%Я9E.!v6ME1_?:4祚 gdN\b".Nu1$OG  Tyj:(/f$dge7c8g \ew>z: $$x\yxы^c971/|hBju;MDh$}["!pYO(\Bid*̔P!~j0E 'ֶd> J=uzU.>Ri+m>sBհ$\Dz@֢,Bܦ 敬%ptc`l~E{`:[ecBFn-ɉ YPPV2mXhC1Xh7eAZ2Xgߜ0q= 92c!G Zc6u)Z2Ȭգ( ?(2)ʺpz6d!yIج E 3­ފ6xD 颉d$KmQm:ܗyV 5zJе,%.-\z6lc@x1mY1 X5mtL]#Ɖ.S,G%CCvZE`ϣzc2[ܺې#.ŰYhOڬW;!]ːE,`mr`.wj6g?gߠ%,c 뿃[H aEh]UZY̔+2"I OH&%!c˖-Obo\at0ZV0*f8}y˓+UKX=51mISw.t̠$xJuE8h a[б~gEeaC<&1x=1(0cFU=`O幑 oI gYɣ!?ĆqZ%Eb$KfE"/ ~8;<s1XXX˲ć>!uQ38U+vfEG +)"u2Ri1@-qhޕ]>@O0'&d8Zz\Ɣ4{#VG6υ^xfl>H٥|F3K@U]߫b^F։yh/PhU:tM{wy!Le Vp%]VX{>'Y{$E"/ z׻p衇<=X__[nm݆|#3h(w;o  xIWn"g_JGioM,mZO.ARz :ԂpCH CZ =8YحRKQYŮhxE%Ѹ ½d'J9I5y,adZ#ᄏ,1 DP=![dtɅ/RYyxnmk P g~N29%a"<77]t.O|x7 j0MT, ~+%-vaqZHX'1]!6,x,#z`hE* סי/JХ],GE' HLABŠSh"#^Q&749RX8k ӏy[\ʢlS$p cYRlUzDŽ36C)ڎ4h]uq"Ox }s__޴lӼ*+p7e8 *wbܭ[S52s XƤ] P05 Nu4]K~K{1!@`32va4ȹ@Z1;°;iG._1Qgm3O(B9 F7&k<`Ɔ&D30=uܜyݨlc#~s-rCwrWyx + Q9J=.6Ci3X#‡u0Wim D$$(l߾W\q.E_W X:ǽ{/L `S.Pbm-HqKе 5-tRk26lc|P tZ#nS")TL?揢wi2V9li-mt< qi@~9o' "38Gu~;;vohW_}5`=pK/t83펐®I IDAT$)!R/B*yRۖԣ.n9.e`T`^+n [ڥڦ]6ee@Ee5ȓF\YĪYĊYĊYX5 R dg~ Eȋl%ʪk%:Z6hC$tl>PϷlpm]kAQN_$^dXL>-!aH;]tOK.'|2^//[oߟ'pI'կ~5>⦛n駟k5?a7хhCtXY1]r=Lg ! m :Bxd+p J /w,u(tyyuA,AyG(("5՜Si;0)SI`0l X& S%p6[Te_IؤH%!1y v5~Nuù瞋7a( vi8ꨣp8ڵ guN9hn4?ءgJ/NkĴm',2*a!MҙWu1LƇ׼` D$lVonBǛ&wy/~1~>׿}pw N| _XǮH\*`W d ~W> .d' ^>Y2V1HuUV~·d.2ڤClv vmw.rEƥO6iO[C8 lT1YJXB϶A]}И#gEI-?E?EoO&:M , MVVuWZBk%lV̔ rI~E7'!%4i"y^2LHE We1KV EHH *Q><BBe=(k%ܝ:޿u!Ks Kqy[ r"&m`c/$zN4&(C7+9VBoftMMx_LZ& H`rSb0(<`P]j1D bab)͉D^<Z-y믿]l~?!N?t}oo+_ w;e]{^{{bΝCu<죢r9@")%F[{.y~9NȑIK\ú ~h 灑00}lQ=2@]'7 [X*}̸oPmkĕfF-RE\EIIwܶ62X$"'01 ՎGدCS߅H$9CAe?15bE䲏e@:(MeHKn}XQbl ָ$ kd2<$ $$xرcCb׮]?C=;w\wL,~!]ޠlcMˠ^ZӏE``0LyQ07Z4m0⅐w)38=K$4<buy-^QޔuyUBқ}- QyG{I܊Ĵ7X/ygSMȩ@l``Ǔ.Znfed7srP{iV$$D^6{7裏?qo{\{o{P<s{o UP %ǧM??/׷Խ-_Yo~?BPiy*,;~/C]O`lyݻqҽ 9.C[+yxL -2L_1B|PA4r䃑 J;/Šx[Ѷj')O`u- FU[?_oޭ;}[+]~tOl3 g?G'{?e#J@ 7s l ~ﯸz.li\(7_%aXfMHxcݸKpbΝЇ>D^ޛp6As=@f1SHٵ-X.`XDjݕ6m 0.`E٩EzL/၍yIHя~m۶;n ?[:W%\~;8|ŕW^ Jc= zԣG>_~y\vec=v~=v刋Yh+@hh F P%0YV3z.9u2מýfX!r%=_,<X)ѩZm؅ ^ڍ5)ƪ/|ira104 Ox`DOgj s~q @݋{*;CɆk蓸_^W*Dx^:;:z'?߯yw_GO?}"s1xsWU8s=_WQ\UovI"mguq]Jv=Trq4!b[oek(29Kk60ؗ dkӨj>ߪ Շ3QTR]e$tMu{}(:EHG;UYX)Z/8! :A^= !l, O{^u19r7p.:tw^Wַ_җ>/x pu"v\~Ha=.p6F P& :,p_EI6z U} / D\ַàQ`8s RMzla`HgdB~FpI}`6 ڝ(¦l혢J>d<&OCZ66#K]lr~iRسjCpq pwma7p- ؃O^y<^ج(b X% }[ڱcJyo>\q+=oPecx5>kr$ :I*b@9".QԓqA^~6+mяn# G\dHD!!EC٥"/PxjI`ڝ{Hx^dd>GC{MD7"^~!$"Er10RM&('vcn2U+ f`(CCQfKѭ'9% я~4O{F^馛=njWjC?V_}˫ Ph`|IB'STYC7.2_}iXRJe!14"0.MЦѮSf2q)Ve,_43p>F|&EyHVwUa>Xa/O3 eL^4!$ FH.i^% /9?|cp9c*_[]Xr10,Ѭ`ÿv` LҬFYQ4%0$#*="׵r6\1r(BJ@`G2-H[GϽlVg?an=1jt}N4eS.E8j7+Ϥ@@ ʈR{oi`L7dKڐҶBИMwyW mNO cw$^Evc:v9P}qUBg!;n2X e~daY2d@%Gf\—Nh"B*6nl9S}+y Pxӛބ?G|xpgxĪ|x>Rab(4-CERȅxR߇rՏ*B 4=*9"9?$j5 q¼dKh]2rzS@ᫍeɜy-2󾌞|ؿ&~zk w ҹHy؉dYn B |3N:$< OX否`S$oI.@1@d҆_RCq4QdVi/<hk]eL]pLtېzHL&$ л*R"E3}cW#E趺 <Y͗.v. D ÿL}@φG:x\$IrQR'fIbH]!-2]#4G /{]wN=T\x#9r={X[s y&~e͌3c:쪎tHZZqxtr-FuX8dpZ&-HƉ?e9Vy4r rnJg86S[oF cL$E.ans_օ*_Qv}OR]()¶hi*.O(@ XohhD1BdUy XSO|{nqg|,shىSMȵJsB@s6~ȖֺhJ"Y|MLqㅨhˬ-ɛm(h(FhLL<@}g "H>#A2P.Lv>CH.9x/vDc;*Sm,7y֬)z<2 "܈} 8|hk6H]"-})_1[ĵuIڀ%E<#MlcUJ#cʳ5%ӟo9Q@Q ɯz? BCjT!sb2$.L}K@4%`O#MSzҾ8e<,̌$I9!ZIvd!lH 2k2Pe45Bj= k@ p6\קGLHj0wJaH''X >ˑLi@uV+ڳad1 z\";HPm2yDA)@W_D:IF zVyH}Š%+g-KVEbu?O1?pXoƛ&vm#*^W#B[@3<_ԧ>uq_=hIjw︰1ǻ2m8ȏOCMbDߢ*J"@F&kw|B`W U 7r]̿QFkav Jl OyS!Adz@dc@D_5ѩhߴ,Q/AP#G^qƹ~q7+"CzDF /: ny!u^U`Q^[g?Ozғ|ć>!\zW @^4N?t=ycȳ,õ^<)K] P ِ1dȋ-=0:lHq+E #MmωDSKK]"P}Y/amd9rcqNd@Ĺ2T?ʘ`(2Bj Hu*U.G.|^oh6"Ud?y=U/ecc[# /KƯO|">l^뮻җ~;V<[#H:q[ЙȤ$Z$ڐ4*x)ez, \!3Ay iu^`-WBrd^gESq+/r^9 L 0) iՔ0ׯW dFXF0hu?)Iaj~:̢ϣnlҟd% =Ly̗[%r좆M!i,[B|SUswb,K\ K"1 c)I<$3 %H\ԚNeρgTa0jK4!.ubq$fYPKT60E8k=G\+qh]+BƉWtxߏ /_~y6vM7ѣKKz8@ >)=zqℍӞ4կ^1";}lcfm}G\ޅy Z^Eև}a q+eoLוNO$J|M-U\m0vc7\CTxoE{PboGDyp_ o"d¤La2Ut*ǀ˴6Y>Mд*JVEgR;W󯖈K)= {D5őb [q;8 GwГWZ?Iww83-}Q\X6}9ӑ)<`?΀.!-<#7JP铊RvċSUFHhm| >9ǺNk~{ꔒ%)̃qQfBC\,[ ~Ó`XqF b05wX6"o|Qd.Y%}Ȭ:T%>>^ABRpS RDu)vwxN;4\s58x nF5p8%1 IDAT\/% `ADȆm hxu/"n2P;rƭ*ߎ'/=:4U^u\vnw<&Rw-)>4t/$MiB_:/yKpZf X>% `C!P!.ٸmp;G!ـjC}F)D_1mPK+yHEԂiږN xȅ *)VD@dL,Cg-[6$fJ)&3}սIrF"C{nĥ6L`B^/cGo }1t%AG s1(Zd"[?if0 DCe<0aCɘaݍuzcP%k,&@]NSTP+4?}Yc3ęg~6 !X@pӮN-Vٷ7&FxeBӖm!mI}nFQE4a*$)"Zvk^&!%Rǯˣ7aEL{47sHyVC^x c8#kMCP 9P'+Rt|¢y>:V5jZʵj1H#-(#Sms]yC_l6% `!$.J)ƟqFɞ%Ioi}^mns`d >Qš*L5 NƍUDfM5̷";ϑ&RsbDb*Y/+FIMa󹝖`Q4{O̒!NUa[¦(Y&eM׆% &`"ܹ{pb 's!_1r 4/lNA,թ XڳuHעJ$E 篋 #uE5fD /{ 7ǃm(8+P.#ԸXj+.9 bk-,FnֹT$ =E*F C#Vg.*4FM\^2 e{7b KZM`ro'ϘAfJ9BĜMכ%CԸLu+FTyфdH՜kF[`ٺ1:U@Wky `g偡̒N,yay`aHpjdeȊWP@ 8.iI` C6佷 c]Zj^UΪ$z,(5ikI.v9 1cuf\0@9p_.cN| C6E&_ [9v!e<2xtQF0z{g>ɃEG!nc-)7O:ĤkYS%mqVR0&23\ZcZ?cdҼLӎ1>PԿY X4,HDZSz@mEn6*tΫRsw(6`,AT|`(ŸwDHȘx[ҶQR8rmɬ _B_C_#eKm wNS? ܼpmNx EֱMd0yv2OjR ǀ00=$m3e0,6@?%KU_UѾ1q9O֕gk k.s(d X% `/C<0"MzQq(:|İI]pOVbZ]51(]i :/UOhuc/-iȊ`rqš 'ߛHh=MCiɪ&h[_:؆gR<%i - 7L.쉥pA#0 x|2r"=6Y/eǑ#Mvex\4Jܖ!rt;x]>He0*+}WTs3~ =֬bsC%$&.)E"}20j]?8uZyU'.") "G2/L 2d`\av Pl!s@DL5/Қ ,)Ђ) _mB&qU7)% J5P} "MTyX6+C^ P]p =Nڥ b)#[$Bl g#2Q^1b>y $ ZZ/ 3͘49iNN܇Ȳ.}4G /cl+m+ÜQOk/ Iћ,C,c k.i- P3PEML'G\75s2:H8Z _sDd-Q0Wrdm̔ 50c!E$'.)K]K&*3ty XO׬P!!"B R!#FN&Y2g3iix EoReYjZbIei_~=$a?~VS1bzz:u}{H]CRU[@`bxJ$[PFĈ8E/SoeboLƊݍM !$lȿ-Ѳغ-t;G.;!nE+y PܣrzngyT GveL"<:% k?lHت$:140Ƒ` OE*}yD%m &?,nG͜40BBfQ'LG`r5 Q9A%MOJ2dQ /F4J|"d f$'Ōx^r + 4?egV@^6 <1(JNe*R96#s/alUx󔠫~4oFhV7E f1O}ӡL=ӝEh.!ޱǎ#MN|y 'j41H9`cx[AiNX݌M!v`՚itΫ@R%)y P$YD_*.DlbA.el"Kq+_|yэE3e~qU5}UfMKH>Ӵ-\zMAł63zY(eL|>ª&B R682,O)1m>+fKH Q&%`* DPdFdƶv"I*FARGEDEebY5A;QG\9f:WA4&.\'Ovg0)w>6O\9mC4#s6a¤aH= bKR\VĤ(O0ik6cŒic a?WDuXED7/Yl6% `ATUQ3q}Z1?+"=OQJzcYX3.w2qB*Tu[PN4>FyͿo N03yC#ON'jLOtNhsL^-[3)]F]KNR0L>-s~]:y P d/mQlȒRAʾ#3~X;2hM R$ "k!VkbPiRR L=o!m3 lšZI˴]GϽ6>%Reȓy-~'fK^klLF\&t};VR*"taNa4/@^6yf[пLU.C N$NŪ\R !Jϱ&("PQkC2iˇNh ?lM6ӼW~K=R\BXmr*M\&.K~䢵MD.HHJe`VD Нl0n!=8laJgt79=Cv23qkӥ4V1$FϣJlA,. Pgzrٕ9cLI/4B̅[la;8sxFP<,aH1RAFeu=돮?*d1,t:ž"arKӝ+K@CG c~KY  &%ƶW 6`6O&m&!D]8.'0c#(d ]I OӱfF]<9~=M> `M[/Ly %*# d #f*bN ]R+v* U8DH5V, {*`MK@C!I 0T¿xNѡ7UyHߎ~Ѕs"{lbQ+NGv:.!@9Q7oA 4;V(3 r4`r/)g)J'H9=7fq)X0saMy>y PrhiH& l+Ad\ʼ"H˕ٓڨӤn]_RcMBVi69V/)(`]&0Pxҽny$Yht*M^^b7qcv`gl2d\~p_vb5ysM$-OѭQ  w*Bb.! ;[HP߉A^~I<4BxfBЭ-^4mR~>֊5KҽTa$lZ~NW|,RL² 2=r.6㟳ך̱<`u8]W@?QxVڀZTp LYO9<cWr ʋ]΂0k K&E2Ra1#/1@72Jy\u*dD=֦a)w sr=' ˛ eG9l ?҆(`Nx4(_*fDH[qlg'jIJN* F3wK3 3.n@)y `?KԵ ".ZN< P23i>d!*Vѷx`H_~y ۔̱;}3~A ⼺} z?PS.V_T= w0'y PhO9٭G%<'2 bd2H~b .KJ߆F'0إWR!إ.b>mOŠ.TWJ׉ 3S#{E,Ť0HFYLFRd LB/O8^ׇz6N`DZ-N>$ % `!^>n@D^h&;ngdhPd,{ޕcKFxZb7w0^+4(:)DJkCuf{OU;]:٤e[B31ZPnQalzurHw{mo<,AJ%CJ#H)QI"cDR-ħH{ >v% 5tD56E­#0 )$; φm<9eEmvPdk]XE޲f]"4ZU`J0@M_h@ IDATAŦ:N_9!lMIH̅Wm|x?=Fzti 8/о]\m @ז)! ,*mYhL3 3",="$n7_T,i.ɷFt/6GZ "x^63YK"E>LX^S0K딴bķQ<0 1̥\,gLfI &KiT|MI>ouxWhO JobbÈu7edO:>FG2C`Ȯʈ&F9#4YA:C^BX9p䀀 aosuhA u_Td-\-N }c D"U/[j7`MRr*bװ){SܱmM0/0x cW\C0R!~y՗bqc{,"d`H1c9  1 mӸ-u]U_D:՞7ߌGoopq<_Ç0+ ŸDESAqۢgɋ̽/1enLz]<4hLtH{ M5?mԱZ 4ӌIBZ6}2` ~4H{6LLt/ (RJsR,s!Ƕk52 Sbi 2X3@u+N{\p~7~;;;;VJl(jϹ4Ҥ}GUBQaƶ/x# "䥧k÷mTy,0B/F6PLԽ*tK?ui.o͒֔ }eRn"& Y ą9 `=816"`&dD* !Cap$o/@=NG>K wy'^җѣx+_?ӗ;G / )r~EG5,T5|Іd^jԫx umrP(BD#M:#>PRH;~q7gKknPT4V#Ɗc9\:f&[Ȓ e/j=#PcصHLwǐL>M1/˗q! q@'A-UN#),ٻi R >[~,g<#Z[wz*ئ=:kuo5 3y\g, )t G_y1a>~U_`L=?|l(b}4p䅭'&{ac# =)E Ej"d ,黲dO} z*z=z_WЇ>qeMn$ l,EFm !ƆNEm, mvu+$)޷ZqbI+3-Mx.lM_רy0i.aJl%;YϹq{"6 < < uZQbiF bVO1Rc)%m[oᵯ}-~~ ~x߈}k;E6 "wzp$Q}lMxi=.%̶+-AqtɋG5kMm*tNTE7{m%3:_}Yښg#F 4dQQ%siS2 d['6,6G= |E]+_җc?cS x^6'>o8-V ˟”n)y1 ͈Hr!lS*Rչ)ZS ck\G4@{Q^4sik:d\| <=o~$B')sd,d +7,rKU64/n p'qgq+}.F% `C!YP @nӅ\aYg"t&i m`'\um MŁ%BbSj,,}Ul}!H{-6?*^߻w^}7i'k82Ca&`u"d # s ?E8N?n>;:}cq뭷6Ex5} euهb O'Cbʅ(L3. #!l V"i[k^M邂MǢ2:tJ=&<󪽙@ Cd{wrA㒵.2ZBG̫|:?(c&ǣ}.~[[[˰}W gggkk8z(G(j\pU1`MK@/߇qCIG̅5U|e'ƴC[C. P7 :+V`yk H:tl M (,M'{&rӡt ;?Kq5p!mp\ve뮻p!\~xի^-B 2#Szf{Dߧ%i:lfǥ]Qm2pլ#bhO Y[sێ #%hQ FM7Ʊ; |d X BX@q-~6'<}CKoz׻s=UW]~xk_o~ݹƠ3TWرu&ʡC0⯐G(WQ޽!/[P"koHiNj.R%.|Lr- Î# -B#000= :n!l, `ɸ袋pWЇgn}$IcX_E~F9rwq~'~6"l$ o}d TM@e[b-K-^I@ P/BQeXY-rֈe&s_ϢɋF_y^)IDM^8}4m$KZ6DH i`malaH=>l !l,`q;cO>^x! {/>ছn%\{OO?_LI9p^s لuXt^+Liӭ{"?MT|͊gVZ ljyt>hN4ڝ0!F]lq +4m*Ew[[@4/Kƣ(|cÙgDQG/|~y}{_˿K.w9e`H Ep9TBrW9ޚj|xF2?y/ׯdR\46K7j0C AѡT~.hhޱ&0cMQ=(:K:&w*3 g9!sG{ k@^;x3pikq75y a}iza7aR{-B#?pIY> p~H^^D@Ah{},yV5Y!"&mW"Q LN+7 /k@^K.ٟ~'|2{~^TK%|ֽp`DZ2yC~]%YHc?!ZOQﯠl]kiC|OEg7P %WoE!Mz6W6/W9rk K/xLQ"H~ɕ"BC}b8('MlJ7}##!X@G>yCO~kÇH~:/xA~WUr)xn6l%m!0}RNC? `0 ~ 8t9ukַ_җ>/x pȑVL&2#,&%`6%MS:my~q1}qq^*F.t\ΐ%i}굶outN^L$FrͶнbJ2ub% n>ܱlYTnp|N`4pjE*߰! 4%rp1`6[PE(R.nG ,aqb@ En4ök+Z 1{on==rmlZR_ȋp߅yesi2'o|88Veݝ>N1HcGzr,!l8l5f %mdl>"czdC/t0l'@Fΰ(O,`-b@p'ys oIIP槨h #k޴5Vߋ'T|.؍az)(A#z!=:-sPNٗx]dd8CˠE#bN/!roeUVHao0E,[%^!,eh.A$mR4aMLӇ BJsA sT rWVlYĸ/7}Q ,Yt Fj,C{_6*z/~'j1@[ WGwH>lY#{3؉;y XStfPIxxW9/ 9BO i:Q&2K2y`1cOܧ&6%0Kͅ6|#6WcT]L]r+:ޢȤq/V ]T  A "E$x$@\#w֐()[_ԭj̑2H:ej{-I"@Q9Ds-[mj=bSheӬnuaR,RYU*:͹ֵ ab51H%oG7֫l^ X% `Ck " 4О}'}ٶ18ygxf^濣N@CW5!JxvrwB?gZ/F/CZEx"6r:+/F6'"7J),tml0D^ 7Տp6XK\sQp]1yNt^0E @0|b"b2Yrsɓ6DžIf<̵u>:ǐt!]D / @ARDB\pZB tԮ3VFϼ"*9ONuܸiG Űt}?vcHh^<&F+ BgY_ړ/&s =-0m6`ƋQָH8"U7?%1)qyݖ6d-lﱏ 7 %lZBc6 [P %4Li/AGt.t͒;,}PN5X0=o%tZ,lZǓVo@[sU,5UӪomB'5TTtXX2`xh_t;RhO<5M6:i {\$Q.)<=i 4E A6hm׽, Г:G.urBBhB(- Ug:v#QPqS澩@_kn4_ `dg/`~.X`WlcCl0>A!|ϙt] b.VX2NBߨ6{d|ɤ_|?XYC~&'Mu|QӅXbe'V@^43h/](騊E<+i W`8XypUޖuz\; AȈ0`Gd:A^:0YK@CkvO}[&{8ۈՃbo VfT=ob?E׊26OF~d5 S5ku{l1H)BJ2G`l#|H@@= p)\HNm"`uX4f댸 fI8*J IDAT%ltk-2B>cnwM{ܵ)uC|v=#mL>ncb- uq:]{Á^61:g4hc@ ɾb8pm"x^6bFjdq+u_TI#4ҫ/Jڑ $.0,Uߌ^[p>Euo)_{&]CM^t:=r H 'd=B M]CB=dԑu@2l0ހ2iɑ]$7~vY{k7F]$VD}J;+cwwŨh4A>ǍLJgLC"?mIܣ=,Y خgڃJREW!;w!|{^5gZ#KnLa{lpW>+&/~E3" ƥކ٫3uVƖ?J& AC#ƹ] 7ٲ ;),q?p7$%v!0mVN[9[4G>Ĩ/t:1a4duͼZx<.CJΚq#󦏏PY # A e` Q[#*DǏÇq^@l( ".M`Iʳu11؆YrHMgL) ܲ0|L%Nߒ9 G.[i Z7]x1§Ŭ< |ЏMżcEӿUeDp.cFL %Z+bj^^qUfZث% `q9F[{>n8 Ɍ`01eLƀy.{%myVTˉ _4050-ֽ.Q\qQ5φl 0XZi4_y_U91Dq&J6 Q:BKaEۿ[]§>)DQ0@^~/~3k6&u}1d1 OleE>l`)`bN4@E LBĭ=+i@X^/: Kt j U ޠ/D ? ‰Pa* f~VyIw?|C^XH nh|6u]8zh U"/~|Wu2 jY\nHY&i&qjߖM__NeVe^݆-ԅ@?=n u{͂c77^;oxpW"MS|dYp;;;#  h ( E3북zXD}^pn {%~UhDkcfK\qIm;l<97ǓqHMgM hoxO]38\UYǼ>L9ȗ(XeKd_2vww x? iL׏aEʮ8\u LlX tq: Y]]eN/ ]|sΉM~ E =0@;l~U+>qT"i13>l?8Sp7/n<@%5;OԪǛxѺ{z]d1")T8j.ZX L qQrFttQu uf!WiFަ ;U*!e`wvげ/XMQlU:%{^@])6% `CZ[kH{ڞىjø P u@M' ʹm/X"_FOa3%[?-t +_ʪf% `] \G;!eZvEՄGIA:XqǫkHrbEV)rym _UС[:R^e0OvN;N\F c{%EysDfx&*Ax5"Kb X,GYET@ɂ7hv6&Gn21PP~/U=95[UO]} ?zh|m*Eo*P ^ݱ.ye%c.'aawHIk* RRyH8^fkztLx]nN};!Lc@J8@Ce&F:>-EtaI<#)w*BeNX}=ǥYnhfZ5E, TTC != 3VTRFK)! Zi%=BզICJ9)-yuҁPuͥ"[+ziܟN46jK+e*\mu|Y =р;/$慐|a1B!v!ZoL;ǖ "1EjThPΗK!>F+$n+E/+" +{Z.0e!e-}]qy)r\o->gI|3F峍/%mg#$_hy!pS|/KXńaŽ RX %EZc`zw^`FϦ7*;a-u܌&X@zy>gW ~hy! != 큡=GX cBptAru,2zcL늮;kdsRʋ!e tF\^SVJ{_kAY\2b*.fF}h<]G>uʁ_'T^A{:9XۂHq:$U L\#eƧ'˧butQJe[dt'7#F Tnkw'˓Ȱ\y+"cVҫKFwv4܎_ӼDQMOCMHY+gB!/msI]MTA α&w-7=&C2&jؕP֚kF6Qn]T,X> p*.|MKp˺r?u&Nq8wgvҎ -eJPʇ!%BznpA}>tz{]MymËy;Ι19)1fE1^zo+-dPj뛲qzfJ)'EV+~x3J (6FHm̱qDVҝz!>oY=+9T:aſ6,RzR9:v%lX[8b*,1'SM'|I܅Ž۴ 6Vq(w1)qg+GG1M@\2 +Z=cE]jŽdFt ऐTq  G$ O1X؏JZa2Dñ+QB-Pba{H .,U=WšVzHɸi*b+/5PJVGnbdBهmE#Q\\ϓD]#T^u܋} a.p$D*2B6^+EH/U$,S*KsumeaҒmRe3wwWK!Spx$\2ͳmO/הT-T^bZ/%TV5?2Pl@6 [6v:pc5=^}ԖX"SJA"EյaI5BF> C.]l)0J؞,if.+APX ]ɘ)a&LKȘiQ/ Bz8v^֨>V`~qlZ5b!r٪6T-{l+,O;.LʓY>#8+nFUxU/ ލso Eؚ a4.XnKZR܌yu+.aX=Sjt1fqѯhs, 26FHU1Rk\S-c0%ccj,dE/Mc1%GK~(Vf2PeNb>ʬQuhTF0f@ry +-zA5G|Mk!c;5>6mZ^$]Hv?H)."5vw2SKq2Iiͳ{ { Xpz;F"eu^^+%)yt P g~Xv;#Bz0gtAhw6ewwb_gkV F2X'S[vBڮAs;4~!P4Z_+. d!jx]#T^B CzctM2f+F>_06֯HO*s a&ZJ+k])`aHPveqd>a<PZ64MRrB xt!ˁb OJ+"/8 Y p+'ELq5314^ι$,Fva x E9CB?"s k1U;QvIpa1BB9aLaX.uj_l*-fbIW#Z4NQQ~0R4rkX &w TʡZ˅LB+!t:g4"蚪%.V-S3.)mC2\p7_z.`zco9+7ݹ| z!8ar7=—HǬ,.äS9ː("FMQv ]3k T`r+O=6%|Ң=&[0!UH1u\--3akդL;q\ a k^/+`?KT| T܋!c&[,TrP j6VRMHRrLW'= K#AWLS?̚s00#"S/GSˤ|1-]s/51:& 8$]BmK'jHN8T8M10e{(FƘBBHYT-WvYr\90.D9sH`4xloc`~WEEL=@iLJ Nk6ӣWW'VH!Ć !lc5r}:QVq`\xh^8{ӊKD+w0:& +ɜJ`7$QQꂛ:W\Nz]|p&$zMꫯǶm?}gz꩕*/T1-(Nbcߣ&=.AK=0F8r+XΗ@+GCE.:i^]" +I“zT bB8gj7 o1)uj\Dk,.捝)VFYDziǁp]waذahkkýދ: կ0zJHBHETp*':Nʋ9N0'TKSU#G0tr(TF9nqG%,ˎ_ 3}r$2*(VR%q(^VNj`f >) f)oŋ>w,_B児*ƏVt 3_rc_n$f"b_/uN,ecVޒcXT/hV2k1œ/F}u+C> ⎇񊍩(5oyb t]$ %[oH)yw,0$ (iĹ@YcOatn'}shUcT6&oDcc#͛WQYHB5|*f`uT|$TK',+0َV]:bD{m(ֽ`h"d5@(JoLiҲɨߪRE~mbļ\kI)1gl߾?<XYHO !UL bl6w]*!9^2;Eg1Ӟ,a\ .dȐq@\{^pvY8c0Tt Q`m,@8dv+:H?my*/2~1=iN.=M]&7}u7gbʔ)E$B|95#pHӭdR^HY`tR"۸k]O8ʝЬf%~m-)0`W7"n5k\o8v7T{Ь 8 O/YʛmLsmaҥXb⊊@}!$!gqJ]`h֓W-s=cݞ/oʋWSPe]Z \js]4+VZBFpaEz}:U)pMǷ`<XhnT3BA–Dg.;KT-+ZqSȲ^Sk/|q#@RZL\Xr9$>A8<$nZqD3x_Pl|ĺRDz!<1cƌ[틿)<$ ֆ[o&L@CCB6owʕ=z4܌;X?> ^{-лwowyxwK}(Fy1kGM>Wb<\TP KచڥՖP}uRªVa52>mjbYd nDq|AyƗ_~BYgy&&L`Os-QꃖB5k`ر8q"^yewSOn7ވG}OO#G<裸[euYN矏gr蘗;ۘ_2n}V^4]_3 (}bS i&y $^!+& + Y67G?Gtluc%L+X.?>N&"V|LΊQԸ5E36Ƽ ](-A˧%=>RBH񲲸ٺu+كk~umeݺuhnn8ꨣp%`ڵH&Yjdnt|]Cj-'^f41IǴAZR,/f1/`g&FQHCV{.*/;wFh:t(رcӶ1b㣏>'q_~`䂟e6۵\+2zCez})9_Pbu\ L@L%q,IM2yy!{+, D5 Aot ?`Bׄ1PTnZ"$#T^)3Y)뗶裏}566/nF"R)1*u}/fi -wb`"}/E$Pv]ǴEKrKN$ ఺zA]g-G.De]crqCD S\mSsuEmXQ?v_P@@[?=vR8ig$z\;Y}xM+-jg[7 e%!q5Pk:bͿuvZsCKe뻈gGúIK g_ͫ `€}BJDe˖ᦛn¯kviuzӧc!CN /pB̟?~X5 "~xjtyH%+};1U#+P5 ʍ,32M ]Y^B5@H إ^?*F0` FRftˎ;wF{{#fȑi`׮]hhh'u_-Y x˭+TGҘtX5hD.YĐr+ӺRrNNTť@ݘ:u=hD(̮/.LɄoאifLՖd|! !ef4hm]ѬZ p饗m]v>򗿴<^x]t3J)/7Kyi|VQ/f,١sL>lS+0:Y%fJ, iJ߳ݕv&ՏJd U2yȣeY}b Q‰A1Bs=hmmŋq=`ĈիN x1k,?W_wq`:;;1f:t .T{xw0|pO6Fܘ]^*(;hVz\L1RLHLr!kPhjw{lfseTPN)ײ{%76FJBi BC?Z > ~cqw#qp_Fgg'8 ,\3_*/č[)R^Lk h`R~X-aX10*N+/9)AǾ=\s뎑*rbl/NBJB*/$^9sP]2[du0gYu_~oF:aAXIq7i&djUPIJDaR2*Bz|mIARZr_>T8)]43u j>! M<7ݤ͒GFƦ`B児*XEe)[f5 x㏔&X_6w)]^`~磸 k Ia'嶌T:BRŠB!c^Bҕ9WI")o{>Fm& &s }lJY Kx +3Xw!~)I.ۓR>t 1` !Uc^H>JK R,%"h9\ri%&kQmXEV *Bρ^ ^4^H@}~yi-&2慔 Z^!c0YB}.kFʍ-t冤iXCI˪\㍡#ulcK2)B!EFq7TH %, ''0-.Xʘ(c̺>qi1,/"\8`BB)զoL㨎z6f"3^5M,!-ťS!ߜ*/$Py!BH^t~!U~ôc2S@jyےH &U7m")/6FHL@0Ze6#j4>kQ%w ljq{{@ܖReˬ3<_~%vh~3gbƍ~y֬Yu}}o&NE/ ۱m6*.$$!jH&rҤI_~r7ߔ_~D"7߬xr˖-rrڴirԩR!7oޜ'B@uuun(W]u2e|-[5kȑ#e^R7xC?|go-_z%9}t)K.n^uٻwoٷo_9i$2Ƚi&)K,۶msLXwjx D7,7n(z-h"dGW^yEa9sLM)>T^"^x)V6l<+(E2?XSybr .p{R!wQY5{Mkkkk555rRJE2_1cO=:tCyZyR5~WJ)?Y__/z行}&s&,Y"W^RGnBH!UĺuP[[n Ø9s&}]UPj lݺ{^hׯ/l߿ZhOGu} ,]w݅>}`޼yi)](^z.˗/G(-ܒdēO>c=SL !݃ !UΝ;qI'!:Ga/;ZFwCǰcٳz*,D<_W|'Xjd'`k 7!Py!RbΜ9ؾ};y 8"ez+ۇ~sA,J?{(9qꩧ77nMSN9 ,kVAI&ꫯ⢋.?#< K5D+WĄ p'WZBH!UDSSEݦ-0~ 矧-+z 7|3y^+sss3ƌɓ'cʕ裴v G;vp޽;n K.qW8Uf77W_a9r$hOo_~XhQ`εy=zt |WX̘1w !Ł !U_N]nXf N?t <1h ^Ѿj*^Zv,X'xG~7mev#/~ 466b&Z[[ӦM0p@|@kk+f̘;o߽ 687l؀P(O?w2߿/.2DZrBH4BJy'믿. YSS#7mTiѤR]V]VΝ;W !dKK\v|>O=BțnInڴ.4몔 J!9sܺuկ~eOv̳gϖwu|/~ vZ9m4)/̙hnnN+Rg͚%>aeӟTp A׿S{Ln޼Y.X@a9w\ʬyGB*7!xPy!8x(  q"n~@aOP| '8\R5Jʯ}k__Uĉr{P-Z$8 ٷo_eSS //2g]R~yꩧ޽{H$" $g̘!?_ʫ9t萼+Ѩ<>O2kƎ+܄!J!B!>1/B!@@B!B!BB!BH B!B T^!B! !`|IB!{F:t(n|m֬Y8^ ڊMB! !,^[nŦMpuaɒ%:ujł"u>3L6 zڲ ֭+hB*@B<#Fqgu݋/ &TLQZ_zw!Rahy!irؖhIDATO㪫BSS0vX?wg6m´iЧOgƁ~wF(SO=X?SySOECC0n8%eݶr 7p{/o={1h aԨQXlOkk+B֯_믿GCC.B|'RB!E !4?b&L;wbٲex饗0j(\yXjUz]wƎ 6q饗֕؁0|kxqYg+o2dXyغu+n݊9sxØ8q"6n܈ W_Ņ^n ?7cs<ؾ};fΜUfB!ŃncBŰqF<׾;wxwqq&M{bkۙ1cm;s1+qF|[궜O<9Hs~EG47 'h™dO=~b۶m8s>7|3kK݋yO?#Z^! .@4E^pcԨQx嗱i&{w6wsϘ16ykaĉ8ꨣPSSh4W^y~aAkmm)b+.kضmK.q|5jcA'Bepi!`Ȑ!߿?`>|xZh?c0¶m0uTL6 O?4 p8v*h$=,WBJB!6lƌԄ>,}Ϟ=rwH$~_$M.e\f zrL4557MZ{#RY6F!$#'N[o?OիWc)h_fގs=e;.e@(r޽o_49rs;&M{iЀw)!A !?#z)L2---hllʕ+a\2uЫW/L<o1|}v~mm-.2,[ Æ ڊ+Vt)ԩStR̚5 f_u]0`#РAhjjի1|pc8z<#xtRw}8ꨣ{ !Z^!-=ocĈ.;vs=k&>]v/Ə~#L>=ͪd\tEqc힊!%\śoS\ b 矏qf}}=Z[[1e?L 6`Ÿ;r:O]w&RƊ%&>"F`DD%˶iǽν3}̙;[f|)FAAcz    EAAvAAA"^AAAhxAA] EAAvAAA"^AAAhxAA] EAAvAAA"^AAAhxAA] EAAvAAA"^AAAhxAA] EAAvAAA"^AAAhxAA] EAAvAAA"^AAAhxAA] EAAvAAA"^AAAhxAA] EAAvAAA"^AAAhxAA] EAAvAhey,GP2#˲5jT$-ԩS,o&CiΎʛoeYp   7+k N 6K/C|N)լtI(x饗OcTTTpqaYӧOsӧU)\3d _:}; r"YҧON @$?fټ <7El2,o6[l;WUoOr:Ch~!:u0 h\z衬\nݺmQ BDċ dI>}|mO>$gu^ziƍڵkG"),,d=0 1/Ђq_iӦF8餓֭\~l޼]端r}sd#ݔ{{v~7W檫_~зo_fΜI8NW^y1cPVVFaa!{77t)؛>S^^Nqq1Æ c0Xl{O?4'|2yyyqG0{l_?Zkw}핕B!,_wEaYK.mt+WdҤIٓP(DII  ϧηn$CSN{0m46m;ٓ)Srʔ1srJ.rO~~{m-<ٳ'Ӈ_icє ҥ |0v[`Ŋ\x ۜxԞ{ɵ^KMMMXp!FSNtԉc=O>$֭[%\€(((`vSOeŊ)Ӈ}70ezA0tcϟϔ)Sׯr!YL_ ż|gL<=zO޽>}:}ʺ#GIJ,jjjӧ׏7)F5ӟ8)..&//wޙѣG> B[B,/J42{l&MD(bĉ뮼[gΜ9,^rt̙3%\1rF|GK?޽{g?㏙4i̙3n?sֽ뮻)++OW^y3g`x |ٰaFw̘1u1k,N8~i&N8bݺu30m4***\wk]rI'ѵkW6l9s8S]5j=ׯgvw!7NppBt~;07n$gsq뭷@mm-s cԩtܙ5k /pg;f98묳Xz5>,yWrM>+WrꩧRVVF3g'NO>^zrJ>,XOYY/2'x"]veĉٓJ.]ʬYFs=ٳ5jƍ#[oz~`?y^z)wy'=zg?P^x.~{.3k֬aȑ|\x|<}| 4]O?eTTT0~x~򓟰b Əψ#|5̝;yq)pGdy>#/_^+`'8cÌ770k,^y/^L߾}_6x}??tޝN;nݺdnf.\… Bϼr-wqd}:Woo\%דc^/^QGEmm-r {K.dΜ9,ZSO=O?Ǔ7:馛 ȴiԩ֭cż꫾'AhShAė_~RzԨQ)=SZ)J)裏mL߾>."w޺o߾Mk6I78sRJ.w=zVJ'|m/t(;/X,O>d7|oJ)s}ٲeHm۶e~;O=݌믿vy{޸q^]]r}?Z)g̘k9rVJ'xnwez+}w_QQQwrmaݧO]^^/_[.((cǎh\M+V`0>}wk;ܶ ̙3ǷM7ݤR[n6L ڿKݭ[7=x`_{޽RJ?>u c`0{ +?7p{-/o?Z):(_GRzĈm߸q޽ԩn{yy۷Ͱe˖cAh"fҧO=sL=sL}WOŋRJyn-8p`hT>m믵RJxiǺ~iTiӦj6#Rߤo:芊ǔ>L x\KtAn})Z)O;4?J)}yӕW^RO>qz-ҟywҏ=?>gR>e?ϔ;<+Vpۊu~t]]]Qr B|xwθqկ~gM\ѣS+((cZ;1fիW\[?iJ@QQ}QFu]c=Xz5UUU^i31{>)S4k DIII֭[-+7|?H=x7زe 1_=FBk͛o'… 2s'ss1cpa׬ZJ;z`M}5j*1ÇΕl?~,[q6!C76s>3|wqV^v +kVJioimg}.]0`QYYw/ڵk F\z51ۮJ{\q<ワz 6aÆV"Y2rHwbTn @yyyMK.]RڔR~&'^mo/M8o99)++#tR^z饔`#G3w߱d8G栃7x/ݻwHߟE1sLΝ`Ջ뮻;d59Ie?׻MUUU3yd_}ؓ? /~$ZknᆔsR.]c7nċeYb1>79lIcr9{ꩧK)2IO&}4oඓi͛7y[9r$K.sΡk׮AK}ьhw296{w}C> 2vX.zլ}Bċ Ν;ԛ̴v 7oN ZuV6JlƕՇ97oaÆ,5zqmm-^z)@2Svm78>Cx {<˖-KUY˸q}ݹ뮻XxqZkFf KgmmmXL99C5k/buL\L&[uyLjذa̛7W^y=ʕ+9#e]23tB+SUUE(Jy$mqPRRC=ĤI>|8'NG,Zw}=ܓ[n1cưdN8 F #h6D6ir'NszjƎɓwE]ϤIԩ ,`ٲe 6,Eᄐ[r!=3k,0>w}ǠAݻ7_~emԩy\p,\޽{'/sGꫯܨQx8Ν;~z7IA&K.;3ޛ & x饗/8S}q6s=~s9̞='|̟?c= 1f}Y&NQJ1nܸ `wq1:_5o6yyy h> .`=Oo߾ձj*z-&L?2<ӌ5SN9#Fp!ϢE/RDŽ kY|9 r#GL[sGᨣ⤓NSN|G̟?w9PjugԨQ 0?]vم^{5/_E]Daaa} v%7IPt<#ڲ/^O]>XB!nSkצ}ꢢ"sO=c n:ߺ~>u^t^^ѣ2eR:u,˗j8UV;OW뢢"=h }w}]^'Nt?OUW]qꊊ =c ݽ{w_kCaKJJtaa>wߝr5vS>}^+V'tܹ.))ѣF?ݺ<˖-hI&vI5׿kqK.@0@yz޼y+}ɓC.--袋|iӥRxkՃEEE://O[O0!%z}ΰj*=vX]RRzйjh>S=yd;뼼 ;$EAAvļ  ʫĉݻ7yyytڕǧ3x` ݻ7^{-H$""^AAVغu+]wowk֬a|'z>(s~8/;`9Ж1AhTTTpW2{ln9cr=4AAȈ Q: IDAT6Э[7_ۏ?H޽9묳x衇FՋktM̜9O>{{]hcE0ZkƏO?7/L^;v, .A!# @Ϟ=)//~cݺuy晾:,N-mL0/2o&?8gq?O{ケ+׿ Bv,_uֱ~b gz}}_رˋ a^|E9ܶ@ 駟|ޭAD$a锗s%qFt钲~YY6mڮc&by6̊+0`yyyA.)S@6qM@bzM·#(jQy:Mt|3qzQzq,\*,'F("D#c՚hhbDlljD?mמ+E{\ː%KjtPk9Xd sawn /Іٸq#=zHi///.ԭ[sXMB=@%An#" 2շѐ8 yꩧxg8]yl޼'؈xki0H|T;K~$#4ƴ5NgØ-0qn3V¶@b4Nr HXS^.◎Ŷʄ8K%-Y`Ϝs=&s~m{#FܹD޻meOs[t$w̶m+FuTQ&6 TRAĉouHwzV:SK01m+>n4$.R~׿2a{&e>W_}EMMMJ,c"E0]vMk]1m ޅ?uakG7 u,5'<`Ӟ cYQӾT8δ>"BSxv63i}{}ɬ;CңG|I9'`ܸqmBEB'P(_x|3sJ,/@686l q8tn,0QP„@[aKM>B1-g7."+SJFNwGe4򒰭]KyliVs7߶K<͸,-/-/آꨥZ"xa[Oݫ N0uTSV6TZjڄ%/#Lٿo+I&qܹ3?Oxǘ:u*3f`ĉ,])SCژX^ s)s1e(fN+\2̊ٹ:<`k 6fnRFǸ~{MBà3ݷP( &rE3#Fm"&I0 P@)@v;+Dr֌bۣ(_?fڊY[X=,,g*|Z|6̳Œ"T(Bg1KeE A,7H`˖y桔b֬Y̚z97x>˲[y޽;]v3gL׭"E0a>y7&PaQ+M^#x(`>cY+ںs4o R UXMe~7v _/`A9\xh+)$nXV6v4gRR "^/_+ w_Νȑ#[n#FmyN"%:VHhw"i67o&l(0tO7E8v3ի[Q;%ʶZ!v"8d+[2ixm<$>sk&_'((WAnmB^wDw,.TQMۨj"7Cb^%A耸1/#!R,V**M@ÎS&ԅ1>D&ۘ5%)8.V`a4Ӆ8f>'4#< >T=m鶝l#k փDin"E SGf*6**Q6j!B$XVwc^'2mZNO؈E:*zq a[_Y_D ec.h'ev@q(K4yCv&4xc@M#2WzT윀4Ũ6 qI?''b' ڶ]*-3Ɏ+5o\/uQ SC5le Zjv]"#""q R A"z,&Ή $Z1 ٓMn|JCbMB)'r&W۩NA 6)[2oִ/+45| q̮uݕw"RM5ۨbۨJ'3ZQOV:VtBDċ tTL̻2bĔ7^-W${zyod0sb2;S3 uĤN0F>bR*)/9r\]@L a.'J0uQK'XnGtJ*\18e͸ݵ)*+s=A /Q75~Xx 9-~e>iQe  A5fCw3ohJ-hl7$Ba4hh8F%HWcZ\!0-{˸;lۇ&y25' R}S$F- 1TѼB-R q()P $*+GSϾbܚ vHWoROB ȧR%hzI$P((g}4 ,""E:*J{?w^36#R/H&Xy!a1 m"p ;j{[&ۜL](F"YaM)ɬŋ9*hhٲf3nOFXHدLUˠ*비IrO1Eweos$H)4ikS{7=YQ[BVxMYqP^J]y1-bLv2EYL?r.ue&iLdbD獩%.SW[Ic L_N昣&,L^η'EO'1e6N|r\FZrEZ'N" !H16K-8xJ&[GF! Y EhH1A(e[:[QVa^Wuua69K LNxr%e)kX1Ґ*-,is}x!'%cx31v#FOb';l2&cnXRf`img֟R6-l*"v„#B'u:NlcjC6&byJ.:*l^D@'[4&zf[r&%, jv,١P=L{[+s@ҳ&r)dJk."$KX<3N_1a[#iKsΛ{fGtQ@%Ĉ @1n~ܓ.@YI5$Lh;ǩz"^xȷ. V8dԟh;,8KH'^L1J=RSiS dkʝa%OצN7sٟ9FBN4Zr]L[WSӘY^ .v/H"B fQ"UH(RV%$ 6F"B{Eċ tTZ[m1[J%] 3Gy^xNH zkp#!l+L< rMpOl~"brfL 0c]hNO8#,A( $B%M*ĩ*'eJ$BVd]*BNJ™ǂ%R'Pe:+i3YL"8yR,[XmbgSssU%Y -U'Τ,'&EQbTbQE}]=yنE5:GŁY_Ɍ\! e#l{gܰ]HԐ $< (bRHO!B8^"f۶[ˋ tTsViGTu2 Y`2 0fqlyĶTa@3Yy^ \S2" ,jQnbNѼ֕<4Ehl[m1!|_~/oz\& ם4A׫[F_G mL: J)xfˇh1D Z ,g~[sM o-۰]nu^:3O'(7%]FmZzp1\@qJ;Ƃdل~;8%hԿ3ޠD!Ŗ ON1;ڤܿxmld?= PG[^;-%ƬsK1ˋ th2ϕ]oJxLgfla9mb)An#k_-^g&Iԏ"E0Kx)ul[i0ɂś`# ;mo/-8Q1l:ګvZpl-v,+5qO{j&<8\3,y(w{htEK!wR 28pi#8GaGCċ thpW^9+ex(#`>OQ@ZkY-BE$A=xKT%aK._37npS`j;ٯZ4!Z9A|# gL\*hGz}mb*”bUNd&kD*5cba'r{>>1ŽAh<lAw2niekvF$ Od/`Y I|S?˫4q&"TՖXHo60(#ML<-ML<*ّl'>u(ticvJ}G5sjos3-7lǽn^鯗\me|S6?r3F4]@!NBa_?d124m?ajrUl몷Y_="E:*nj#29DXר8c@1by-fub"Xku3c𚟲2GJ$~יij;Q,*-)C9ImnnMhtcܗp*_y ^IBfR-|c,\!B8( J8e'ÈQer]FQN$ӎX^dR f-A/CX܂H"Vr­l~5vML6fkϒNLc"j$n 'JhʍvJX>t#('N1S>hTD{fnW%F4%rxiK{|#8NJc]Vl?ld=l:_ֲA}ԊOnO؈E:,]DRIAPgvLT"ܴU4O$ s@~^fnfʞ%|n)j/v vONhF )"q1)yA4!o 둩4Ҷ ';+v &[#Lػ,Y'B[K !`A-A@ċ t`¸r(2SmAC o u!&PGj :lF^dkD6y}LDaG(796,mWe6k\ yh pc4&lEDY̶/`PL452 !'^)na0WEZ/QQsg⬴qy@.' I0y l'Sbי/WktcvEy&ɵ(*Hs;vQQ368#\:;S;YZz#,wj^*3ݏ;1v[jmW6jv썐KS2Ƥ-#E:,u0"x>帐9&˙XULEa (L:<&\KWD3֚|^G$B&a1V9XTaeROĕ$ۥ +9xG~ 6N)q@!k˕w!Cz+>ala+PARFI0q\#`"qgh{;%g#wVA^ `,5yRtBHl'Nj5A2z;mcwJGڎcT݊ӮDrsIVe uʶEkshmŮc̈́#|7;]fX:dR oB=K ;kYJWع[돬_[B]{en869&aZ.tL}bR-fNQ:%lc_K"_$H>Љ8qXTRC"5sch lDB%ƹh -.|GKL%", 0hYi^m?/QageZ{b\, IDATP%BSH)'N q1~fLA dǻ!""|c"ZsLoiIB4q) Am1.vȟY$ۘ^"AǝE;} bA9.c.Ʌ*KWc%xˎ]vڌ+3 b"hQnMHjuwɮkcm3Z\BXNx= ~l67=›ūi?~ʹlc G#\bQK dP& ^#rv loDBGf( 8K.ѐ-^ cu!UcyeUβ ?m"-5Z(ioP%L33oL5eWq)FS,)M#^nb:VXS5D-L{wp-q2b&tW⚍'14Cռ94qꨥj"DqKbĈ!F o/#paDċ tTX@,b|yJw.vy" qSRMq\-\j4Q9q''ޜf&8ĝ$;hG?`M1qWt&N'9Z=vMsXj,'c{&Ybړ )oN^ ccSJ0 E-EĈ-?q/ SG-QN?-|G}Dmm- .#n:^~e֯_O.]=z4o۷oF/%$ۘ t@R-8C^AE;xy @VKikW2FK ojJ+VäDKyi)w B&xI  KEyYLZ!~;h1x3Ŝr؎_F$sKKY66bD SG5Ul&溌Z]lmalZjqJu^-b„ 257?N<૯[na?+IJ,>3JKK[qB{@,/Q1.TD%xq2}V3 cuNC\m1inH" c*ZRXrlWikK&VIObd+v &:c0.SpkW F\)4QLDƴߐ8AB@G2I#Jul6f׸(Z>|8xG?~:1| o 6l@>7xqmq m/Qu/Q<8%bXmeYHjC:.VlgԎP;Uw\B,O{5mYĚJ&,sibw۲7c'Cб(8c5ĈPih;xQ-4ٺRRR@(J!E:*-v|K<Nve,.qwMLb\½u-c"kӱ%IϽ.[*ff{,Αa'&%'Z&Y-hR#TE[,;浘$ "[3q&d%B-Cȧ #RŶ cb;?zᆲYo!CpQGzB@ċ tTb?g+ ^0n8:lARߢb0XhJZ8|&?63oQ_:uA:A1✖]!WmijPT:yjP)T'/r.k`' ;I}w6fSd՘na ˉw R-Wp&t)z Z4QJg@S@f1#5dfϞgСCݶ#F0gADc NMvn}+[T[HY ~V)-MrU<+\ikȶhoX_)FQȅj!\}ӌ?]ĉw⎨1΄B)˕t],Dܛd7`JΔTζBR@ys.Fw#kb1N:$>xrW3fz-s=L!LjxJl 7U*\WTb&Ymy1o&abxeT X]DG;wO[vp 6;Fa^+t8S(Uآ]xd]w9ٍۘk: o m4D-E ۋxmbg7qu">nfds9##\@K[ /y0ar `С\z-E="E:*v T5X5X@B,9\kXu%3 D?7xd9&̩9+&+SԱ%*>ve",hb%&ɮH1I4]h ͈e^aͭc-`,,B|q5Y-q=,ϲUVp?<˞A:Z:-*Peܲ-pBe ;YȠ Enndde)xLNUg[^t\`6፧GS]ӎ [G+[ -޽{d9ж"q ٖ@%veg$3pI.||w\}ռlذ2FM7^{Պ byC } ba<~`&}q33v~^rao|LimSJ󘋃$mx8H".|Z/Zc$58SVuG´Xc3Jȅ%oq^xGhX^ RzcyC̶D!:*Qeeky1/–-Q͓b'Q ͯB;h~ǿƳe"lˋMt'F7'x11b(f0"^2#ז(Q"!F8q⁜[^ZL/[^%ˋ tTe΃x!P "@,DDJS.ao52'vA*i`l-!LnM-[E3 %)ԇ>xDEfŎ+$հDx$yqAӔ8M#2K'΄p SG5UPEuⶹ%Ah DBŹwCpQ;CD!\Dk~x}_E);6=!&io..8ry-c%T HlIFZ]tԟT' w-/w%=+"3:U%i tUնs h)4 {h@/P *!j#.(`SmR%>( ޙfČܙ;X957g:8~YIs<}p%.rtH^""J7w!ۅ;$UbMH«5\jXWukҤ)ba![ŔDi _L<-glZVO!: U&l+s 9ڍ=]+ \x\<!֓Q$8"z #"/4б u@BU˘Hm` nvb~&7[4%)8&ɑsnWjV2Hiۼn>wM̔צ; }Ǵ'3[ûh qL.s+\2eyX[`O͔Ȕ;Ѻ6Qj.Z>J\\m%-ZViգZҲx`3}m!S"aC___gk=u#? ^2|+//:Lc<縟Osa}9Xz-"yXW{ 9|EuՆ`IY[oVS )ͅV);Ҷ ;ptp9MΖLcnߥ>:CٖKrtS,Q7qRKDĺ" ƫPy_'>4B*f7F#,ii#lE>:T-4-dBN6ѷ!|J(bhnZȏ'Kb1G`j/e=uE\K%"b]" |C`MshBJսFͫOJXwu:,~y6Jʮ37HY]~=[H'%%ua4[ ).(]\ kJT)4?XDKIE$/늎7A~/B@Bˉh?)}-rB!̕%.y'g+\-.R y&Dsyx$l@JY\2s$ܹ-gGHBI^ o ?;O YzR}=ŢIu$$ų 񪆃 /ye,b4"%"b]~7z qCA$. 锑Y(dvmSz\Gq_ YQ}f\yM BӖw3Ne}<0R~2ǥ0FűK/eHzV e=p&''.fhDKIE6pm߅=_ b07)߀l-o@-,{"N15ذ1\>G0]ҏI`JZ _8S'KY;`~.x$740)M0FF*jMQ%#O/^fC<} i\ҳ]Y`;E, PK!>YT%{ICXQ⫖rY~\"}t)k\EǜCUP{7L?_7l' [k@|X$rBB?RL_pNZ`Qk)r Of@GBKQɑo0Rc Wa ,.h`T׏ ]qNSWKY B6дDzEZ^-itjUw]QDd%"b]Q8|BOW3- نLR  Y+aEI*ڴ du6™ %ɱGFO}#RQޗ5OOBf50Bϖ>CIH~,u_J~³tL B6'T_Ko^oc PQNsոג/b݈u3װE ai~ .y}ճczٲu䷀-r}N#CZay4q{;NE-597Wނ.8&Rſϴ q  WpES EkO2V/Ve&ңK^1@_r~W$q_BB-E"z^""9Eߡ(>Y)#CXe;fc]{^KInNU3N ld-a9mX.Az2'U}e}ݦM[-d_Ra$'^(ED!s䛐#hȮ~ & ~NC4d;aׂn*SZ/JlLJ%ptXI&ϲa&:<f<B!U2wTS7&|l#F2I2kfmwiOcW<.eFQELLh3pE 98{g$)lc CDD-_ar̞h_\(NຐfiPkAYt"/b~(e4^YT P6%* r4f`MZmIP NCc Fn{^,A @bI"0Ux WWEEqW~!#%Cmv8uhѣ˽wqED "uC~A*NtUDI o=t!U"4U88}ޔ.9@ӧ$<=*r"QW38aә#`e\e I=6}ryX,yRO%.~=|,]aHHf>ş.cv5H^""}Ep[B@.+#o*%}aAS'"3ʛkiJu<`X 2epM:zUAGJR+:e>.%iェƝ LY+ J,ٍ}+1iĥڳj(຺l^-F"yX[x>.HLOzN ]pJ@+ăbAed Kd#1Ņc2 ?wn  j$yWOY<3ެm[&^TSzZ^+8Z%|*rB a`:9 uAE.sㆪu7-$a+̫טi:ܺf]=1L`V JZZ@'( f/ʓBÜn_'ufrR3qWLló/V sJ˲,M: ɝ9]Sf|-ι)7LDlcktzOChh=қcN zB 6oA-ﳐdʓ :%3&F6d"ٶN] n͂mYeo~Ta/K'86&K͋Os9{ϧ 뤁T6gVV`ԫ-I8nf;䐫\2 ]d'$%CK6h1X=/kz̖7/P2/^CKHYB@+<KOvٶ)Re7f:[K!,-J=LZOi?*'_Bv00$"+dIzohxj(dsB%aɗF[Jht*9%γ>}z0>B$/&!|, u-IŜRHM8+nԓciشu:+U1^-n+ & +ߔ>ONб='geaϤqtqd䴐L]BD-n K`AV#">˻ѣ\ WLn]L5Jcw DDD4PABd&AW$IRzƳ+>#<0>lhLC64ݲG>lp IDAT%XYDIGR{=*$[X9)*e9T.۱E%q}$v !?)!l:P΄MhvIIdB&Q&R)J\l!z yHzqmRsVO4Yo fZ4X>PGKh#5c4LLCN: ۴%gѿtˋꗐǔ6!'E 6,FSB:~p">$#fXC\6a HGA>Sff#CAIJS-og40rqDjTi4+6*0`xݧ}Yo=1e!Gskj  L6_,s zrv(fL=IԥOV_We}N֖J5/,y}p,'No,OK\D(C:lV$%li& "1d wŭA8ӢѳeO6@X<Ȱi`l1$18Z}ѳ+.%$dddC ~AWZ"yX0"yX7s^%_%{シUiO{Gxvn^7??e/{y[2f/!ن$;6ĐQ.Y"c +!%@>"*d75㌘im\J Q %CV(AQE {m\Zs~t~ԭ2lX`50zm>jLKA dG6b)WBx!1^'#S%R*&%0Xe=zHrXx^Fv.qacƯacK>9nʼ|3|~!}s_e>x>կxWŗ7 S= ={ஃ S33Q0It7MeD/KކBҒ4zH؛05mkyGj^.ˢ2jZJط Y[2% RY\tDža<-`)rΐs]{A_W2`Gk|ڝTb{ u_.q\d/piacZ`"yXя~4_={/GyxsSY}.x+E}FH dFumâ\ ZejdR!@$Uoҧ-.}cƬ el82?8j*nHA7e~wzU2 9p pqxv&p[A8s_g=.ަu݄6m|p_tt·\v""fC$/+O|<z}c.G0\GĒjuTƓȲ&N.*ԯե(hs!,6d>&fVX:6pANz"N-z^ _zԔ,ՂҺxr|g7kb+o~(#H"-=i"ТZزLQ҄eybS*wF_tYweiɋ@Y :lpqj8dDĊ"@/|!_=??>3gֿx衇ƴ?0+'[o1(؟$\̚7!X}lꞚVSjrlK2QֆJt!.ֆ( Y+PFhͬz`U%/@\G2rP%7Gi_oK=( [QqBR f2k%y],(1_+yWz^C4 Z Ή{嵯}-wuЇu~n6~w￟믿'?ɼnh9ZC$/K?)~y#9e|5rK۫mSdo4X9@A>(Ȏ?Xjgh $(t59geO]m~$}H75wWIa]jĴた 4=sa-wK[HM1 Hqׂj >6#DG K^<zJ+/);Asne[Ls_* ! ]|T^^/T B ˨K5Sm}aޅ/EQh\rr^ˏq[ /R_@?OE|qY twwswy'Ozғxӟ>gOO|| 7tycýo#VQd/~x;w~w[o}cO?iF= &ZJtGBbRcu'|F|oII~@y]#> lȖayJzleZ>EȰJmBI٩_Td=9 IlBji#b~puOb}2rH5_Or6e{}/o#qIsƏ77G=Qޕ__۾7?,dC! $fڸR[ +a HfP`9ڬSiL&{^{v|iPM%e3NdAۜrꝭ~K-]8zH7fd[N,ʏDzr`a]Ǎ>$яN>͗~闒)}kn^q75[n˾E{!@Nin 5^&ǰƊ)7A1PIX!f]W ZkcOR`Ziy U>, 0gS= ZPBzI!7 ўC' \ 4" [!L8܊'IxC`fJ[t:0+Ls-WO؏__?qG-F$/K{syygU|?~}s3Pr"<@~AK)!iy)6Fi"] ^MƇ6iWj$c/-8p*WR3988FmZkCi-cM_M󣗷ctuJbk|b>9\چVz%v:&'/閣Ԇq$q\q O}PE<y\R, dS\׹ j}e")$^ ~a?%M\w ̡&J6-l6x;X|ܘ $\^Lw&ϴ(SHbcDo p\ |@hkF p}-JMoeiISjEHI{8l` ox㕯|%}c{8wVo-loog<׽u9s;rp~%^#""-Sm? M>ZwMOdԫZ 'mgȼJMiڤ$(>lMy-FɜTA`tGU}imz"qru <<z ?&NϑIY9hx qb)ΖЮ~;$E)K7vFl9!E O'(V$3Z'֍fQDg>g?N.d !fiw2Nq@Ckh`t5UkEA<@y9!:]=?[}SMqFh;RJ@x(y&!ő,!=9[z'*_^"""fA$/2<(>1 7KU&--L$@5.[͈+<0 RV7_{?/q,y#Ͽ1s+LR69qIj &B$lp]8;$&~Βyr>T^TQE$/hxM\Zz,(rjhcK7ӮKS{Z%_RbgnɪǼ?>«8jJΘ5E. ǵ,Kv¼f(K.eZ:d[:ep<5Ld)K|f9.h鹵uF7=ʅw8 MK\bj(Y|<)):rM2vz5~'Y֧O>YH\-d""y 2m7wE, wGD\Sȑ_ZCZpmpV~ ?N6̒.e )l]_jq%*>-'x` ~kOJ^lHۑ1}uYSa^p& ųE3UR2<-:SvЅw-cx?i; kg,D(ᩣÇ\G5I)ٳ$.P!\ \*.sr@O*.8nDĵRIJW<N-D-nS<2ualؗ -yuc 2HfT|Kdq&1P͹0ؔX[UiMekzձzqyq#HlP949 XO:[+ߗIw'ĥY|X/ ˔G\"W.qp@J^wGDKD:qC=x`TD ! 7mP%)vm&b voT8$+9OHwQg&s mi:jeVF ͊yI/:-*YCJXy=u"S[(/|NLv vrkL%THr22|"PIBϒ@[ wŌ>!dHVorGDDw ^x֡^_@|F )2h8ws-XrNMno_{OXH ֳ)3wIB,Q|RYxqZf1o: 9֖oQ&e[Zflc8 >B邓lm<$V8KThhkZR 4J&u]E]GVxW!؊piKDĺɕ"$ 7C)8 Y .vwԯ]&Zh^f7jE3GxdL*{ >]>)4qȬdZS{k| r)hXd ]JapgvB IDATr(Uyhq9ql y}>a~BBZhӦl'E "pGDDPlck|Sz!3F,E2Q~d%K :'YCHFCq֊m- T1IXށ|C·_@ֱUF=ދj3םMg135Ty1kxCsd8e1?-6Mu!gM2ZqA?ʍU~CI‡m l"yXgX}rܕ>\2ve}Gk8]Ǿ{!G6m?R%}rbJC $UאIGzU?%aSH;.RǤIgTe C䩣*p1l}> ;¾  |hyG+\{mK&6y"ZH^"N("yVPzzH!4ߤ*DH].;˘lÏ;p?ņ!DKGpmyBCB] Cֶ1}Bm =+uQ[/ȸN-Գ#.*m͋ 8*|Rj[ꁚ( Yfme-YaEdmĚg Hazy^,:dL.]< <\G!z LʛU0v؃R!F2T*̜Yirn$F2N|}dlc CDD+lIFe!K^j!K똝6imB ?&fi}l1yk`8&F '> Cj$믁9 wPCO^IBqhD󨵐p<..TY9z^"N("yXW-FAj r$oҴL} oۼx\4.柠k84y$Ar ]sS\ Ӥdh*B%c01{fJ?Px\vC Z"gj# _)'DD+6_"vMUCQH{wWT~R |=wmBrJ6M[p5Ο0LC_KלCsς;c悈!>CȞ$f2gB[o9[H25ydɝyo:42qZ~,~wf̓;oW8 ?zwu?mP6gvvA8,ٟFeu_^ yqA>,T{i#3a#g]<JG""D$/`ū;zC 6԰ߗ} O lu.fnhOiUE+AQswϾLB SdiEM_Ozllit]_S;Od`eS"Vm=ˮIyjj4U?Jϋ.H)zzǕT4m<[x8.[l"ǒ'𱌈bus2Cm6&b,GT{A+dҌb lf.$7@(H?/xa6(LufRwR|Bl5LB@(dd臹+wlc'DD\ $f|`;K`t^󶽌@\t=@z3emF/56#;= syuڑ=q)Rr)k}vPش+g +\N39`ueuTm SnxU\"G<-W< m"/k~x7pAv( *D:ZȠe1f+N4IRH4V2BԹۀx"֏Ɏ0Hy%a:g̱PtBͤ[ί‹Ζ\3TyNX wϳ>)Qi!I0mi+.Mg3 Q|6bm^FSl"UriPDv.`X$%"b]Q'-6ҩisT(05EBW0Gǐ_A2u~#(bE lK166x7JGp }8`=J6aAS)kOe0DtPF*Gڭ}IhV@%qED!s h[$$ˋVȯ=~f#ېвd7JcYN5uVȏ\5SgBzdL@njzl°$V_&,!ڔ+hrDڶY.".S2⼢K=\y\QFt/.L-iV"N("yXWXѤmU6٪SVs?DO.BBXjt;BfBb=/C2 8|raO޵L`%/M !eslFPI&0Ʒ!pWrIi<k 56_HyB7|>YI""bNuEx,e6 V,=;M\<0yCK8ysN^!EWDpaC;0{çsf0d1 i"YtC29MiF omֳU#Nu*DŽiY"CB.#ab(I(.3zfzf1]>R?Z'!'hB5޴]\byXWl^툨3j4G@me;!K)uǦ2e߅_Q3;f.k{T+yκ@\\/\fKc!KCXsgzm>'VQqⓣ43xZ8:azU6;b|9xw ~ k1XD9WoH}?]eL=ݎ$W@QY u`V %*,Y6q<4! ;f, sj|j&y[e[ F6X.o ?5ͨ&Y]c"aAw>%ysyc:n%$_Zp&X]T3L"abxNs7G_{m?-E, h׺Êd0F%1q26^\FG¿U ]pۡ !=I+|13x\3Ƹ }辩b~h<4a{aUu`Fϙ܇Mqk}8.{ݦ%{guʫ{|ڥ4Ff5wq[8} $*wKғ`0Y>KdѵHK&m<\GirVBWSDD6nD'8dף.St"*n򶐘|3,>n6u%@[@ԣiJg04m-Ch/ӛ˕DB5$)|ސ)J}h€D&0;ڲq$EFcS%iew x}ǧir%_V e7x[vI[r׾}C|mooSyc+H^"";l qwx5X.jݗYad؁z^\Xρ,G8B6H{MzPF45[; &_gZ&O ˏp휵ЕB$ndج$nQ9.c z=MޅQވlz=6 y[ 1j!˫4lX6i3&y St-m<x+r[r=pw'=?}!888/x~H^"")ae޿: 5{ _ g؏5_}yʔɌhgq z \ tIu$QD/i8Xt/> oRqt]Z8 /{m:qIm !.([S=eLuQEƅLKȊ>[>üFkLK y70\X^ c+ Zh=,^'?9DmUޑkB]݇K_eH p@Bӆ|J ]!3#kc>\M6355ӊ ]$Ebz|^ ;Iu⡳ajJbxg7F}Iְqag@}z^(K$ K.8!^:1hla!K%kJeѻd!/HV\2-&7o}]XQDhTjSL k(q|ڰ68Hʙ =!O$4m"geXwJ>Uи$ RbJGGhubGQ4_%gt۞4%U !w0>0a>^3_Y?^q 1l+=<[E"e%0.|q9$hc.f)1X1] [GoGq=WmͯስB$/fņYLka$MQԗτyyh+BY4s!b~͆<$ТkZsdRCH`fϷTx\hMF_M$. SKSb\1d>TU%0W?>9r(:ES->|eNף%KGh^ :$ߓfpk$S7^?[{ϓd雾u … \t)H^"" a\&OrU !1N Q~>{Y:|*k/x? s3u!C)`'wA5~N Y o] ܳߘ} 91BLQT<RpYѽL3Ju@`Yf66+,qѺ0m'lcٕ8 ^YJDDB٤+9iFFJ}xr򂺬yY/9s'< |W|ǗгUB$/꣜ fMumޟ׷M!w9@`&Y_g#a]J,$١>fzܐsl[ RZK]|vfij 4*AԅY2J㊴vL# K.)vZ$aUʐUx;8<<{[vwp%,bKD:KYg7jS$E' OKfU'.L aNĨS*k% )HfH{qT5b"{OQDD+$=WX'#!ckTroݶx}K\Z1v G@yR%c$dd2o#ԈwN:F,- MN ; 3ޠ0KBS>{33V;8GEsg HʉOlÇqE(wdw RZ<8Ub3|?4sŵYE7%"ZO4(kj բ̵ُ%/!T,9T .i4 SJyc~qa> B\ 27eU#ޗ#;x;OTTxqtqa>}ɓ%±ED}Cq!{!eFu^""!޺ Guڤ@tycDĥ%"مt竟0%7@zFvǥ0 q $l0#+I ,`C%oóSQK7F,M=. 2V Sz'ebw0ޮ-D\Tc/5}ğR6>x.GG!9>$\! HxHx\"င~M*,s~SD"=/UYh=Te{W ƅZ+n7hOvgwCg}j\ўXM :[,ւl8.JޖEVC_nͱ-Feu(IV5䅋1,~7}OlTCؖ<hx0N՞bg:xUBn+Pۥ 1kۡ% œ DKD9W5t(m]R7zi<]C7Qh)P.*A@oˍAHM= e_ū-y3E۱$-,:UgaHHJa$MY9aqUVklzQy>^A$،c?Lڹ1)υ6u8<[a`S%S@ ^Lx9/\///ލ!z^""NC}v4&%?ÌYr]K(:Ĺ4{ DbWKzC(!y3[]8@:\rhN5\Lɍk5LKzX2R'܏ U #.v}Yxq]SBzR^z~MhU>>Р$sTaW gt"z^"N*"yVQIBS<6G VҒa] IDRteO^ݞxbky;K@ 2aSx^XUFII8Oо' Ci[d9'uH^EuSH=A㙞 !hJ J*'DNh¦-'DD+FmuTEَ%mG34qgAnj.A\8V;v(˰W΃ S$ ճбL.bE]%-ZRx=dpd"FKЍ <;!$l#5.Rg m+m,_MDĔ%"bR:Q=4tejXc?π; W{H1Xs/;uܭwJq832,pYU_&9p |[? :&z4CzEXlm,q^2C~HMq|7!J@~鳷;zɋ7֚9MvдTT@\ nam:DKIE$/YX-5܆i MDCr܍Zz"lj Tus<.TZV#pņrM.\I.ߥ'0 gЛ#\$/5SN*su*Q]wV))KkX2o0VyR6H<:ixb~HV\0xF slc#CDDhg= aZedRq[f?n!nmL $W5_o;)LAY/d8vZGxx¡uB9&ӬG#'Ya9N/㉏@%hܿuVeR,/'-\m,b"e#wSDdX^Il+ڲP\Ey)80VNœ|iyź)הbb9U;ַa}d T,v*Ч5A,n,B˺I03"UVůX4XfO@1htp/+Le.%Ő^nckDD<fQ 3GoƏ=\6{sYk б+l:-D bU&%DQڒTOEx2T6Gn{bt&0>zO[JlS3`IR瀯㴌9`OU|}lGzoQ#&ʋ81vP( 28oq.bbsb&dZl-.Smocgf.V%f i Y4c߷LyoW\1̽"F0`/6}u*&s~ZLso9evSe;UTx$=N$"a/ IXư2%kXsxXSX8"b؈'"۵յBƥ '5󀎍_h.qej+].kt>Nme5uݘݥl%u*r^:O`P!auJ.^WI""1XDAc ƧC*),b'.H)%w7%¹z)a.XeS6MqXSB7MzUztƹYoňUEJc܆Ϩ k˺p[=/ L7#z c\tq=N{>Km| 0JP`=HhCHr3oxo;o/NE qBk&A_$P`!]}W,ec]{?`HԉHy#_)6i-+`CY_fA>S;Y%ۯ=R3}~tq˽-%{Vmٰf{uQlHHcKBuJ.FDUDqB77U?CC72Exw|]+ <##Av,&lmc4]҈^KDĄ|_eÆ @A8s9?w͇>!~a暶{XԌӗ$֒}][+NAi]U0V$ mXŠVqd}ԣƓU\=e\"~ b2W0ǯ:&G\Rw>Lev4D,qJ A[j,yc3C x}-ON@^t̚K~VL oa\}" bqq?K.|3uz .N; O>.>g=esAjg&ڒZeĭHFtE0kHrӼiF(Im Ə;Ҫ'.eyz+!ʴ?iWd?%`"E`&Q&x0^7 q eD^ ͬXv|@C/+ ,71"DDH^""&/C=}|ӟ.;x8묳 7s%o|-y&Gʂ/ h BIF؀kPm S&iP>߃q$(? &'.K}c] #JԵ1wWPr&+aH 0֓m> ΀=BZJF KHzGSۼXs =d#ic?n^7^#1aP b\%NXDYD1!?3';*Jg?مG}4VxT#oу2(f6h(ȇZdmQPhXw2^h}KȏhB bXb7 DvK^RWFz2Kg!/X:dу,ZZ SI9E<pdzAIg0n~ NS¡""zF$/@^y΋^mv͛mڴ;wj//O}̖?9O}*^{-|;;y ^Phco,?-:Ҳ= 4bFтDbSomvB2kK#hWz2a?#]R3FW%ـ5#Ce-Rf!3H0cK}ue'{\X_Y` bt!eO5u\׾X|l5;@?υF@ypQG <+Yy0z$Lt봍'(ąx"`a*>{Z碖.cúw*>Y,yR='}؉ZX@gSA6 ]EOD3aU9nI,/ߑ\F#"DD ˬyuQɟ {,Gy$Gy$7x#g}v 7駟޶eB:I tSH[ 3ː ZӔ2TY3m{CY[~&M/E޾5~ Y$(O~%^.]TnNhMWJ !qG^[)W %13 I '"y36nI'Դ|vvM6]~s9]3{.s|f~f/p f%촿U`{"Kr n4/ZLBFdl2O|jЧWM:4%& ^5t? ?1Cާ'Nd1n#ps]wqm'\+[o?!ig _~W.}̃ᆥg@Ej_QX<n~FFJ3 orn0y{k`mЪ![O0ۘ%Wq/,s)6޶oc߷b?7t'x"r r &HPqws=__Zr 7pCc:bKDALM*vUX.)$<GJfe:n |7+F 62`P(KN8dNZWb$(Dn;[ X\<‚si>ah<Һ?' XW@3[F!UKdh}ö2gHFN`JȦ_ 2[=/>/H@>b+ܧ nèL"@_Ɲ*e/{>(^{-ҜW~Wя~DRɖzg?8]tZml2GL'"y8XaanV|&j^׬Xr1q˽yقS6<Ә N`곜U) YjWi@4}9AˈަEo K N+¶캁? P.j+E{h?Qk,< D =O7 }0ËΩ= ѱ.M6Nv3 ̇dF_ԅ5^}#Dd7.^!IݗUZ74qY &q ,eظqc?o}[ܹ#8bآE1DqBq!u':jR< .2>1q12_JKv0ʵ珴8RKLJVi]lӲxڀ"YBA 䥆cSǥcuB\<.fXeX,.'d $ZַF,C+,QfI%Vw {z!ohp]wqWOZ)A$/)*j6:!S$-GIJ"0@Bc+a:%D׈QWպ2nVJ7 FR(πYF/t+$ BN.\΃>Oq)fkmqP,9a5u1[P JRB?XmHKJ&Ap0C܋OZmtYBCUo5kDDxmo/~1 g?<.$}U\Yym?^<5E^eXoqw}T˸ŹeajUI?J&/%m}W hSaY]ne=fkV:E%+LM:0q$#Iqf|! :P/֑Rwk}i20"'X_H+Zw+tcIӄ]<_>f-y:-8@%_-/6%E]wůگq'j5E;""cϞ=va{ٳ38N:)Ȭ%iiJ>؝t}3AѰFd^`"C2hנ^AX{^nOz++VO\AJo0B[h2 QߦćBO-Y3Tb*55X}ƌwD"n<#`/mݷw,)f(26k_AyX~=zիw^W~z>s=?e1H^""<6mC=//|?;4MQ?M0@-kámy!m10^UԇV:?=)iBFT9u8';̺"f.&0pfc ya?{uG/&``ꐬ8"nc#W 2кRF4hH#tAiX,d pikM$.R>h~]vaxEa_c ?OxS2N#DDxK/e|կ~u{s9~ d;}̒N!hfێb0mGn:$<,I(BvXoH`z M:R9 FHhmQ1TqI֓}3XaxJ'*VJMfO^3dś(X'*;y2Ƙ(yDM+mtվ{q~)=aˌp3BL@4m993a",v1y|IOz{xG?l7K_ JGU v` inZs=D'7ԋ"߯ e%įQKqڝۋq7^y75gq1 -á !tɒl|%{tZo5c[^UVY"TBQ};'($F6Kևi+gj[AťնSV 9gRot;Z_0t)[/&S#d1/g+vaCz h P?OZ}R7TUX$`r]cCR˥=@%ܨ 6e zth6G~ޔ9$%waƹ~%[$H68 ov2se(UK,)t}iW^o[5b\<͍9\1{)t2`߶Y$e7ǽta $/c 28-/ w_xᇩכGwTvX/ˣ;n[_YN)ʉvK $k]:qT9ğFm۵L AbL.-0:EXRՉ)MJ}E%"㦛n⬳ਣR˵[k\2n,Xt`Exĸ=~"yQgbVU^m/ڭM4m @_i` ШYnG2 $rk?s(Jf~TaCم^ ɂgJFVrNk>ocyvEoN 0LAcehH^""<."N;4/g^4dV]mɍO" ǥyF2&Rv݄GiI[ڏL)#RZB/Ƣh *gf̊_v֏Ldd٭e4k["qE:&Ū! SBg@iGJZA/nX2n7d|F4e8KqL1/k1XDǃ>?xTތǤ\DzqɄǛUD8oCMafMS(=,! #UXİiwbo  *e`)]tBMvL{Դ8PCZbX}g1ƪ@{O"mfaTslsZ ~+A[ݼ;diG.p/!w_.!T6U;)"b<),,,LZä4@YQ5ҊYą'$jGPV/ZƹI&nPLIV̄4fַ GnlCBF<bаm;p }.fq$Rjeڢq֛hfGA6f5ꎡI,ca{kbMePY&)ӥ۠MջAwM [A?˺k*C^v*A V[= DKE6qWs׬_~ c `k` ~DV&Pb soUa]&s$[ڥLbbmLgQ!ZYV >ezyJLٌ)IݶbtzXojH'gp3`}us#)vF_nd6R~6L ׽)+EdiGs%.tD`XҚ%60Oa=wG'ElB}i 7#d!=vaO"f%".1)RJ`T1`|+N/7[V1P;9 qFпǸLS49H贕6;FT֒n:o}2.[&O' 57I࿅4qQp3L)̸vģ /J* (8F+9Wb}3&6[d"ӃF_r>Ee\EJŕl6>:\DDQDqmQըV|-d[41>}]xTSIXI`6` yYgE1Z7ES~ ADUiACЬt?7hOU]"ts)[Vo۟:A1VY0MK2c' 1Āy+Np"J=aU'GOߴ~|+,K˂][K.k;"Kb IV)/1K;ȒRAbf"Ly5H^""<xI0XcxboRI=qi@xBz]4p/qxk]'w9$ٮAXe9 58nЄ5 Sv^yDZȦrNytLtp `8'*4BNfpE69a&NaƠ|sl0tXr`Vݨ:1[y*.CZjo?ϐ&#B^䶕yK/tmqFKDA s./S0gÌue&u46%b"%/qmsNl©[fgg'-p ZC$eimؗ%#q$}l#*qgM72:s8t,+V. 0 cevtoi>= yxJ,&סݶ=落Ǫ~SFk0-m%Ho[UH)́eA@ikH. aJ`BfݜV7X\]٘˪ BO0} 3fۣ)SrK ӓ2iDFEDxرSO=wqlݺ{Gvmkd "Z1n8o(CYY**>h?%;.K [(dJ6.<=_n*9 ѠǪ'uӆ,кx[(%^&,3"h62UBrT6YOܐe x:]Dzm 4;0A@WڨEK`e cFmȈFИƺ<ۙ-n- ,y>n =8B612DKDDž^Ȏ;;xы^-;y^\ J8XZ.`~k\ ~ =z@VSoUڔ\eݒL6iR+A4vҲ}(3*1+PeMk޾[ǑunJ+1^/SN5,4e7RMB`D>2.SRyLg4p~m(5|>tJJ:F DDx|+(\ve|\[KW"c;m@u{TIsco;P2z&V by8g6$颁}գYULjЮSq)OM` ְntj#,D?PM#vkҽ8EYcLa/17s3H`Ms)O`FC=Jۘt㚒~ݭ~g|fȋfM7FD{n;ٽ{%ǴlznI}vڦ4^IOo+ɋu$bGdc685]z3vkuT{! aJ+( .Zeh#vK?_~弅eVp7C6.0Lg~2m$".0^1Bi26ׄ IDATl\&IH Inf*־"o\Ixڅi馟V%"c&'tRӺ˿cT`xx[!2RAjiIKljoqy(YXۘ}CwT ꂋDKlp?]p^ N 8G-FdhLIŬ ,|Yg TH-.*֥[!_,gY!'Rm?K'۶M7M+<=uoR8Rh{a[j-/kDDx"guGq?ϸꪫԧ>5i{O.U"0:ER*n xi"0>ղ'E߭-It~~7Ue535eG^WxN<ɂh6o^ഓHK,:TYsyz_Z:^=F`KOn~L -4ڊbK//^x!_|% ' ~xvr6q.Y7g eol5qncKX8wFȌ5V8ϋGq3vAAvLtzIFtWLÐG+Xt ~1VŝK/f?2,.fާi Vɡq/Ƞ\ e]F.l98A!/*3ИsSZ)Y?r'y@ȳ"rߊ>x'ؽSm#lc#CDD(\z饼=;`ǎlٲ%l޼yҢq>ZWz^GeĈ yAs`\܈F)kWB4!ID?)[i(k)?d~vF'"7B͒ ˜TuewHt#HU!zhcw5'6VL_w<>.03.mJnɋR[""06L];bL+6lcSn'r%ؐѕ̚k%\W,*~22`͟ +Ͱ^$il{5O\TĎMKI*Ȇ &-FFĬ+r @un@d!UA}:|;_*zVбMNtem,=uqi\#K[byOaSCD5ߺ< 6,r}pؿ" ;ƍp\XS4å}+vAÖkX}Avĥ,SCو Lv=mR,+RU 0~YH%nKޙ]ezHôKwy'w5e^N;q70g&)?Fq!TK뮡Ϗ&SR4`;vnjjWɂ9k r" Θ@[BKe=#q,eJMEx+$/ݤ"("y{n~ԴNDC@8H)~b}:wg[t 3"%@w*}&@aҍG5Sda?ia iTZ燕 I#$nb_Yˤ rA^FU 2[+6lffM\1,藇 kS%/#MED=bXȶKh7"ׯ03'"yXZZ_rS, 83{h`aIFC]Bvb #9-~ɠ2c&u)7xB{ aCe#Yc!.!19˶>u&h1I$|E[shH^.c!c;&GarƜ޷&L&6ABBlչ3.C6qva ÐyDKEy'."nVnF\uU\/?I32"q.|i4tXaB>}k^_w)䃷5K$2m(ļ~95?C;dBLL}t{e %} y $Smֵ:"K ;<>o#/v'AxO1ɾ?t2fjtXnLm3P{ԁQjmbվʲҘ1-Ɯ K}0_7.ya e#xpDƆtS ywҗy$v_=<֭O}*]tF<-/7|3_|1x _ 'oo7??絯}턥֌CMd_Kt\x[b Z헮W)Ni ey¼qz9BA^;>, f2Zh:0ӢaAoC[-Lt|{^r-y! }*xE ]ž ktB'T(O6OPcoKOJde&)|wŁ }P0(Mc~ItMx≜r)r-.q@뮻s=?O}|CkSH^""(^{-rK6z .N; O>.>g=krGL"yذacغu+w˿ {NX!_I/%wXOXV+6YO:[`J}HMǜ$da楐^`'+H|Phr"+#l=Fqm kqA:nD ҿ|+Vk5~oYC7ofΗKe5 9ĥz6MtK-(Ei@ݐ$&{QZ2)8fzHx(O%wc=YgUX7K.o|DD!xs}iƯGGl޼jʇ?aN8I8.KZVmne "!e$FLO_ y>gaYڢǽiL 4h[h4 !q;X]@6CXq8tyeĩ. ?`%`Wa*M:ª;j1L6Ѿ8TO-*XObKz7'ur) iZ^N"}>l}DDx桇.;3ਣ+_$B?{QbYF"VjǚexȊ6:Cv8e-AˌȋmYY]f.rV O"DP+f&aZ2 DSFq:Fgq1LsIUD3;C҄]ߚJ 8B3 {4`EFj~;xXyz`gY MݺіhxF7퇖̲ PA'W^/r%5([%>Vw#[-fU!U0{!u;%+$v eS10cF-M[\d+dv/&ڐǁMAnӐevjڵkv:X%";\֕vh6ˈXrJ~0dqWLenc&w3[V)EjTzà[Ht%iy2G`cJ԰+8J1RWʊXI^P5[Ѝ<:Ƕ.L +?џ7ncYT,=$(v֟?FiE,j 6ͪ+dR_}is|Y~A*Zũ~ X/Ȗ?,..6D<1KDlj']w^I2\WU5/2*h}ts:bl׷({KͶ $FK* ufk(e?y؇D2y"Dh ΀Κ n-Uݴ Y_Z4K'5U\ Lk3C܂u .ZT nYS\LY)Lju/Ɖ)yyK^‘Gɍ7g-{wDDx\yl۶ 6׽M6MZM\E)<xMJ;Cr81PZLcg[sMbə+8 "y3*Y|L̻)s̏DhB d9~K؏ y+X\,_(B4oׁÙ*YhksGL 6>Nv0hLPU 1H`~/ .B\vlIӘqS*Yb[}@A7Ц&/+ ,U$^4ɬ2&J7 YBہ3>f\29QLКi˂V+R5YW^N|;ҩ23gHPTJ@ o0`9!_F/Rs̬KX6U_V ScEwx }z&~c/F)=>5d}ٺn+lݺ>K.j5GDKDD/n lM yܷxGP֑՛*Ң"un{[:/;2`])&..4 |w6O%18`r"Vn\ʮui7=cgC=~J]>X*P$%yd^Pg:m `w9G@^ˇ߄_8_Wɼ#(94/eTϴb~v<묳 UFD"yK'-p!NmYY㈌&*(u`%^a2X]FdYBK|CqPSStM&Y]-f^pF[^"? -BB".[Qeؗ&.,tʺ~/I^+XF EW R̺Xf&$x1CULnē&֡2B۷Bq2L{fM"""y(%{ IDAT";wd֭j;L)ңȉ Nl%&ߩςe8 ccu2ƗbaEta(òh.< ǝyqZxNr@GLBk)fJzԤݩD(9@H_:~$y-<ɹ1%H.a)ޤ6EXx!.c3ldMF_l8R#0 ]Զ7GDtH^""??\N8=/e۶mA@mYt qADnrFmkټ~1v &_%S6eЬ[0Jv B6I!ce54ɵ%4G``ba$}Y:\LYP!O JSN`EDDx\r%mosz@^O|b Wȭ,u;:C+/KZGo;$ng%jSCHz zy} x h _(xVDVڐvƝrmO"ʱ =<^H=_+K7άQMDTqICˤȴ^Hϊ[P)yJLDQD}+t݆ ؽ{% Bh]uO>ē'3)Y e6ſQ*U-n6%$r=&HԏR 7ۘ6eegMM̰z@: LY8Ghlh%qK8+.[Z֚/&*(hLq֪e:n\ ]vp9^ B۾dD8[f m B*֧uXM` {*.0op>="yx{{\}p tI\wu=ZBfSRX9ֽZiYO`cl&pf9G`'DKĔ"__nrl޼y5)$ K HἽjfmH=&)Od"ץ5j_Skї_lёqMiWoߦs^~}r!V&Rv=r*pG$}<h́{eE~V_Nd(' ǯ=2͑%CkN&`~j&(ĺ'.>&yC3o:$`jD%" r)݌5i xHgUbnM/+ΜL`HQE#KW3,4=>Dd65'gn¯p-v{qT-ˋ,O 'm6r&pa c;:L:hcBk. XS-e|:A2s0}eXuR&U`(oyL2$ҒH(4nLóQ y""&?i6m/CZ?jPr[`tbBaUf \5iXlPtObr?!04]D"B9~qTYѼ2U |Cf ] tzfڝ/'uqZT)D0]Efsio@|RDL)"y˿K^WpI'Q}k-fTA#/em گH$rǐ;닉Z0?LJBRZ&Onr-# ~/dnlF-ht{t}b(>%ά≫R LƖ(UYWtpGpzTZKm$[0.K2&z@UnbB8!\M19P)tږ) ,ָ0ƿq { 獋>vZY&FD }/{ɖݻws=TZM7į}v8g־/g>v>F!k["ZK#_]d f2|)fEZ0ͣRdF+ ,e/K~Y9ēS.yǀ=ޅӯKe"QiA>n;:ZѭĬLy͐aCQv qUzz.=h=dXgZpq)+jZaGDDQq}qWrqǍ7\|! yX/~ /.O}Svm\veY_uO\ e3DxJmm}lE %9$\ﯜ#H,ĕ$eZ1NsSyq6-{则(^ B ߲c&XD\74c.jٖsL33VRtbr,.d` o8)&v"";"yxғÇG^}Ǜfv;lYg7M.^O>Çswg<]KvjGpRn LSObYJd%VU ݈8e -QzCYڜ̈L*nDMאnZ3%'*BVV(Z]MI%T\,f;I1ťסsT:EE_ S(G$5'f0I;"bD;G9rH?O$-ox7#<^WpUדQ6օOn4uZ> ~gKt7Q-4Ǥއ/&"j6{}]Z%08R.\ )̷v^1 ~I.ѻhv]p[こ,<gD d"G-ryD@瀩SNa1קlV;- h"kcn&.b(] ~)zv*PݠQ6-F"*O:=VDDQq-prꩧr9w"~N?tZvݻ9y_~fff ęO~ٴiSȧ"WM@m'΂lIM+ƺmzH $Lzy{!:I'Im9XpzbSk\p3_Ee1|bjrnJ "&ku资b~=+_Ř eBta}8ÐΡH+Ů%]3gq"m3R z""DDx=333unBt*=<\ve|cO:>˵^޽{8c߾};Y)RR2?T"x#8Sn΁-"{-5‚1Nb-F V$>p- |]BӶNnb.`: Wb= Dc)Z{kS>ieu5/,(YP}C-oƴhLߗQ}?Vك(}vP݊fx1qؗdWxuĨ&fGXjC""D$/wK=iraկ򲗽 ?۷+??IS1UFo3޷Eu^k*&0ƛ5Y*aQ2o|bRXrpAr"%Ⱥhw.Qr3,6 Oۅ2A2j (+F֮]t0`UJfpO&3-0>pR="DD;v஻s-l?s+ٱco;}ED{b.Nml `j;.}ydm`n-h~o3O~B)ooLĿ%Զs%KigXnszHE*V# _U]Wiv 7)#[ggYGZ~{[PNڮ/Dȉ@Pΰ(p>mx_A9zGnPK*2{E%_"/)F^8qxսkq_W>9Xd20²GXvculֈ\}|g߾}_ _3 {޾o䪫beesoo989묳yk^{nN=T>q饗v]?:fADd<m#ۀ~L1 "2i-VugN `RkZY]ZI0oc 4Lr/ز q5WpdȒsq12Vnj66@M<;ODK& mDҭl=0_F HCKhVV/8SIrqO cXw|fH jYO1 ްw]/bc#j^""<|A9^~~nCoꫯ^s=[UW] 7_l 7@$y晜|<_r\{of_u o`^Ԏډ f;I_ &ġ_^8i ?Qikd3iѡKp .#&=a$q8Rkc?6|u .vn6QoO#"N,l.J9 ^׳k.N;4pWr'Gxk_˛&.nv>q= An75d3cc7LkSDh!Dp*4[TGqv/21zx!{&򆐗׼$yQH|WMV)w qY/Y7_.VCRXy_씰?`bXCG?6~*?jM'u% g2ϦKm,b R˄""D$/ַ?)B,;S^Y]]w_~9yGٹs'y׻ޕ{{$IG?Q/=w\~}׳ܲ+!P*[RN '2b66K>+QBQJIMOfz8?v?d-͍>w]M\Zj.:r'kun3kz`\S}]_TA#@Q?em,S#kߧ:pLk>Z~BGۚ۞̀X=)=@D4 %o^oqqY+6m?q>w=UzU[a`pdaƯ{36'4#M$f\k#E+$ WmyV6#45uִ4q)"Q (zz؏&̄A U %=5 ػ? TlZ_hMnToH cާYi4cUE KȲ/FDD$/Ok9眶}ַ_7d'.R@nv͙فK.N 8RnR/W[;_1/Fa/&b ON Iqyx8/࿮{jyL].)r|}ܸPEHu _$M4MT' P'|2춶*ψ8Ni{uٴ- DDx-o oxIW{oO}S\s55@-tz7 jdkpoyǂY(|YJq藨e &qjV9߭BtD#DƓ2jdϥiE ނ ܤL1Ks#Nޡzb~]41u#$f@5^h4ꖏ#ѿaL&E1"yx^wG>>Oۿj5.R~w~g[88L"%$:M7Vҷ7c֟I8틘?c&. #;yK=7C,@V`xS6wjfw呗$X&Z-eP؞$S!SK/M`h3~\/ M=ծeA1)H׻C!~ o;<<{.OySֻik oPt/mnyތF+OD Hѿ |KpM*E)&d͆L5Ѻ.&ofe"!ԯ-l5E+æԧyB. PGrpľLد"/8UwL(Bz:GcPenDPf" iON$fntԼDL'"ysNN;4N;41g?c߾}<^ \ÐS(C0 t2 z,'f y ORRlXgӾ`zF׳Z~ 4[yyU2+k$N^$)eM&.۷#o&7>GV"878h)Qm7 YN\KF"I% |wsd{}^ f Fba'LuCü#ZxD$$0餩ګ@Z#k U_i QNđqT㪫Oo}k۾/;w~~鸛X>~J@[ +yqZC/@.aCx!Yi7CAD(1!J\/Աm܍6q~A2݋frmW&kq%[Et~RNkX L43T-9**;BpL?&ye,r}?: ZmLuxPsF*nADP%??pbJV~Y* "IF-YXF8X}` =1~*Ȭ$ Ӊ8r#j޽38qz*w}ZT,d\#<=B_Q@ku-&vEA41>J 0ߑE,̗̌%ifO$!r@f605Gf8D#9FD* ^!Y>?MDhN*hȖp}8RP sKnb_a0тhe& 5#B)6V<˄D?ZBsP~gKymE0( $[px3HK1NL>hZuҴ(Yki6L#ipyS.:j rҒG1H#=!d_\b\*P!p&ef<98p^M$&k{YU@iiV}_&8lXhs QZ8uw Rm\um<'k"1aGSEGXmje@Fjyv2ʴ-e.#]udkhRw“ Kv馛?ȭ OyS=.jI闈IG$/G5N:$~pgw='? 'xZU}。w'iN6"#=jT`.f>e6S2AS eYoؿ~[s5Hl}7i1wX`Yb<C%J&zC#Y\zXXPyGm.:bqwm>}zP@]e3ʛfnvujp' `ĢJ bE (f,ňcPjd->G.D"ɮ@PXPN6_HD56 `h'*PpɶCOfҼ^I˚ɋ'-}rB`m maaɸkJA&NkBPG]4pA_<'`_Ё::qe;Y/#]Z}6/:u3%Ϥ;CnWffcI[n-l߲e &DqT3x[׾5LR'~+#0"-4,&ĴCfgk!b"Ƕ(:"2.}a-<:M\&a%$4ؚ?ϔ[VW.˗D?І Jc2>9Y5Qm kߊ2 Sۘ \0?}b]kl}/j4yv:Сntj{6l7͓z,pV8ieᢋ.ko}+3o}[ڵkmnDqo~3˿̮]??K^.䒩36&XH{QY -`a` ҀBy#ثm|d*=Ժɓh3>U"kެvx!*#¹7-Kj%Ȇo˶.Z~1pWb"&q~9+B4}BԖԩ#]&}\'I]V~|P!ʭ00SQG ņL(jTT5xQ7Nh#O2ft]iP~Cd&Xd->iƍ7)лvoX1݈%"rYgjسg~MBR {M~po鲴}N 쓋$a7Kmx[˭Kl4.k}cp&kuh ڨS)￘Ƭ-pAP"$_yܰX_=82OY m۱V=/ºU9  CrnzdPuif.ʗzb`~YGvw38|3l۶nw4 .ұ'bzKDBVʨbpב-h@ ;Irs8A# 0ʒ`&Iu"/kS;L+9^JpaLIԁ!r[V_}Ϭ<@˗hZ @~p}0(b%(\V4{!/[z!18y9Ǫ<޾LR + o@%C{?+@㠜ܔW~Ҁ $.J2!aMs#;:K/%Io077 ^׽nC}#FH^""68D^I*RY_>:n i?9؊sH>0!RU:I:S;y!tҼ4=aI/?M7/8w _*f&Zg67֭K̬\cC+K ٪uaPt些8!u0e0^i,*>NYLeWICБjfX쫃B]6g@rjen+0Yn q6'?Oψ3Πjq=D"y(#.Z2z%*]IZ pvr|q锼1:HuԺt+W{)smi[c}[1,dԕ|Wj0xdMܬi"Q9K6Lsa+nՁ㬫W˷Ö?9@Gɕ:ZpD1Z}eLi ʎֲtNxaM\BL3ӭ]WݟTKqnK` #zWMsNXX )oV,XNDD/LQ14e.VkYz?Q񃙥 өl)IQ0巸?LˬT&wc$DӰO5_@&r>kekRH:\,5PLIcY#j%`'~+jZ᩟R UX^@Xu:^YL:X? lKfVD?_~RhW`֭|䪫 .rDDB$/OVd2|Ҵp"B4`Rq~//EU0% uE`w\H@_?dm_l3&0dIך䲬>*ϖzhkh2V-4.8ɊEmkc/=!UVU .if~WjL .3m#qa8>WUv{^-ӍH^""68BeҊRLb_YaM0u(dU#>!Ѧ)jl~'=@,[lǂANrTaEB`c~=ውfa +4qO rدFHgi"HۮA BH ʶQ0M7N %}Fnr7 h`??Fl,D7$0B^D8PhH:kq &AgyC-tD~b.^i۫-y`H,@D̴֜FB3M`|zݦ#{]tY/g9ltoFW i Ͻm+l I,g+`8brr~`E@mv}ǃ~ Vb {J D$!τZye}w7'-&B""C$/G 4@@cO 4XĬdZҡtOYa"(2W٦asbYL' Y~ywmzgSgn%YYMUީ9ti׏EAX+|@P/s\h]?9+qX6f>y6/sb18:KDQ︖áPrDX%e]- mۉJ Egd%hϨ LDl⢂aV&QP(_F bfV÷QM<-n$_EדG.´p}}nc(&k1+S*GlL?GeJ6@(EDD DDeFцv?rJ/0wXk".%OV9iwat3 q^M*X%a LG@Ue Y1^0/$TB[fDL"'S`з~bEm]k~1cU֐ߦ0 MXFazUE54%g! hǫjR)Q0`= ‡m ~lG\q&fͼ T+VQp~/6#)0֓m^&9c1\^L1q䥞œ"qZ>ON_g ,64T$q%Ʉ+#ȤrƄDB.jX[K1=1Q"DDl`t6 "&1(H3b}5vt @4>"ViP󱐗H|2dF[q 5.tXߋ( Y '8:S0QH^""6(")@Yɋh]t>i"hZ6O 壜S"jOhAZ2)v"{B`d JP6܉oMEkMH=uij?nZZ)_ U-f2_nK˖!z4n}_ y"TIz$ȬZ׬ U`%.utg^Q1%"b"5Sͥ$f=<4q.ȳ&`lDF L5r?i<:S\~5MKpd8s|WO#5J y lszUꯩ[N0!&/18$H! Mm5/ I ^Zj=|nRr3Q }phΉ#"C$/iR2f-z9ڧB<[)/-1)k>%^-%-e8vĿxAF!Ga_oBV~AuS=qeq/e-T Mo H^""6*_7mʉ73B1,6 0˨>{ujŅ]%w~~j mm0Pqsٌ/\пe6w)Pw 4"I` Ѩ34rY& IDATۼ9UB>8^ܱHѿ#hmRi&jKSrV:h$B\ 1mY)m!1'q48X5/ӉH^""68 `3iRBeNnS)mr|,ڗn-_8+~0m84n=8Θ`\pҴP/aL JnrȯN yU@e 6s<獵)VY9 f#m O͢)?f;)Ӹ4*ӺD؈~/ ח)؏'cK#Kbp}G&iDqN51Zk:lbǚa,>0CA|K,Yb́\>^fDhV'~6HqdDYHOk؇Tb~YqyN}(YEn>/fQ*:NSĔ"̆`S0 :˕ZﳘnEtR$0 h54 ]'"ߌh ӂ bLUB̵l[oy"0yQ.C gpy]Q%.XpG91[xԓ1 ED'.$ VyIDCL'{Mk%Driݘ9\m7Vvnrcl$*]OD~ 'Q),LoVS LLdjPH9('1ad T @xYr_F?3f[Yfhrh$-k=HKxDD DDlPX9ܶi,Tą4u7bDCdU29^aPI1M^'9"Wn2{ 9I nB1t*Я'ҥ`^ p?ag@ $~=A_!b8xYrVm29#50 ⮡Յ<{-Q^ŤI%/ДUp1\ ,cme-4SҨyRđfaMHƼ^H^&O4dX8rbM†!yY;/+o*c&E`ru~Qό',ka|[[Fix_Gmq&.SU]Y+Jcg6B=/Dzѯ/bKDƭ7KN&./^3*:X;!O.9(y'(2 ׺:j]&0^7$ut@tԺ<7Ѫue~% 11`[nIMXmZ'?eI"xt/YJAH_ך<5Pb\" a5kigj?Vɲ%bJGnDF!#.:YeLLlZT V]%]" b]QfIB\zi̴F7ɰAt/ ԛu $'0mU1a)M  1֬XvE"RzKxyjBVf /OR5ZC#yRDa-(XKWf,!-.*pu+Zbcy}awPh)GNDL1tdnNV28=юƛXHĒEeAQA .H@*$~-OSL:#(,lL^G#j~p]*nRTeK1H^""6(4RK !_CBj0Q&zs'46 iUa9-@"Gy~.5YT; eS_O˚wMuĮKM)AEQ5ul7y͚h2633rU=8Ck_$wyj!Ivi#[]ӢmYh6 )E$/E~4?_0_ -l;Ը" DbEvfUgm6 3wy؏?A=: mlX0,En}*A4j:w٠-t9t6(WBL!,c04Õ7W1IIB'-?!;N˓:|N.!y\aPPf Ȯd3m}GZ6̊# }v&I2Du_!hk]}T"k.Z>ufRnjV 0Roj%5@ߠ6i><ܣ?,l'EEji]gւ٢.lj*-dh\1I%bJKDm6}Zr!ԟ&.Zp$vU,f`e@"HԀxMm]ggp6r(oTi]c UHz8 f8(S2LcE3/#\% i `փn.":u;qxm73E<(y27 &c:KjJ}ꍏ88PZ)[gqRvHi0Ob'% ꫯo|#_|1wy' A$/ssja a? LeOϺNxhqXҺe0\`v|a4eZ:|^duh۰*T~2 ^ fUѭzѺx&$ :k%=LXb֥*XɇC˛-[g#YCGG\) 7-4QCihE 9w%/wo~ٵk|;guX1%"bceuVVˎ9n~/e1\Y_w+a ,YXtLQkCȋ%?.,4 a(%'4 !/]]̯fYuĺG& smEfeYXg?> $x>QJ,dtN@#u$ tA:+q@}skf)Yz.W2ޗ9?Oke׮]޽O>Wռgffw!DaaO?=Ν>궥)ZgY4QESJ1ʺ*l`+tgiEZ}L[398npr׎=ӋH^""6*tCZ*(8FZ-zF1Г@NLtކA^* .= .}w( ›lٺP;l#O),Q:y{' HbF) L~B'Ѩ q?&?Ҽ4$x$\uY4!ߊ9 ۑ.0$ Kwل (8K˺׾GZXhf/yIӔÇկ~eeHڠ6m|￸BǛjcdeuwm=-j#v;FzU+An#;dlr!*2jYC:#Qz{5/miڤܿ1'-*n^p j5<6(bjKDFEs;[oل$nڄٺffaY^ ""G'(G|LP%l:}#`M0KWc!7AeC>uVh_iV(\끾at +iE?E;IbW5F_}Y^,㕖B^ƌ;=vN;W^y%_|1O|׻SH^""6*/Y.,D`u}i Y t|XjrD+#.=t/&-k^ZmX?ڑw(Wf7]#5)S%Lf(CP3I/[> 14!38s,m1f u]_~}Qvɇ?aw1S cY"""&nFeu!c<(ݻd^XZ´Z΄lm;:j* w}Z rlv98 y3VT[!cP`i֜MUj29G?aWg`=/c ]mO]؈ O4-n9ręPct ?9&0˔, @_}Bw`\eq_8[YIhEȾꯤ}iʢXL hrwكxbr>`|^&DED H^""60ng?s$(.>AvnDOv#:Ua倞m.KpfdsDʓ]pS%fqki!)5K`o(D xh&)4qi&0xcGѭq"DL)&`""M7ċ^"m~:i/g>v>!>}b n0BqXiS7|x{ػ>9mm*ę-qҭbMDRL闖,9yf=L,N0\58Ppo:YMʴq4RL#qo}._Wضm_=}{y衇'? E.B.">Oqmqeq/|ʄF}uJ$id(+G5-7pcgyELЎ&h8 e>pa()ZRYF~1rrSaS4/+r>؃iTGDKDկ~V__q/|!wq\s 'i6\r%/ӟ4g}6/xx3nC6AfLNZ&Ƙdih"*iRM"l[zC:Ba/p!X3Yuȿz $ָ_Yk$1x J#-p/&S<>"nD1^ws[n-l߲e <#U*W믿md%54Ih_Yd7Nml1/Ӂ۬}`ic+LF2w*ژv2F&`H4[uKڜ6s1N[$MH$5/Irey l-XV1BL6"bqEcַro}K//R'?lڴ)?, /MJG^bZ+M  5v0'LXp! goE\?eAaOɃ\ .-G8jnU ˊ:ߓiVOvWM>/Sh61fvix㍜r)j5vv vv IDATٷo__uhcx[ O\Gn%} :`Ԙ5pHp-q`!4&fdCLmhc=O~OXhehiܡqkאX/e{apZ,^c)@Gu"s3HL66D1fy睼E/33 ۶mn~7F#Ӿ ξiUB-1kFoSr]ĈHnTl_6&rCXK.]ޘ_eIZ ~$x/DM:izbafaܢrKĔ"1K/%Io077 ^׽;vq׳u )Ç=ܺm?˳}aM/>tOK $nr.NS5Dn5q{-$}-{xv_ߐPS?Hy_0g 9)c ~p3i"b7IWO*T0ZFrD1MP&c<6lMA0: Fҷdlbj}uIPg 3_[.,)fYL(c+5X$p:yu͵e5 > K,bcΝ;w oV'=?|_.s}Um "'2ưƴl7C%`24LGfs_Ņ!'\$Nc'(seҤoHoK[D~u99N'\O n۽ ~ ˲[KA3)̦0ۂZ Z)J!^`a0hcSh61fmox/}Ky;֭[7UW]\~G>k_Z7qp} /__]Fk]z!PQ!3IZm6-jɏg ^ȋ0ʶ NuߘAYT/pPȶiγhKΑ{(ڗI}p}K5>-hVuLɘLYzŢu눁%<8%@#"A4X|_8~;ܹW=rӴ|?){xk^_Ad)5ufb.$ū!2b☸\}M) $jr ~OwWM0PzSM_լ5u)z4`u1/0^^ٯ| 8Ɋl;Ix`M*fh!KkT !튈DMFFEJ&JQ36RN^Ww=;R⑩w>V, @>E& 4́qaE-Ak[HaT QI]BU%Tr ۿܚ0M+U#,vR!/+ ز1;#Pu;ra[씀zN{/ʃoɯ(֔oy#R"[Q `,3i0Bok&0xgJL >\6mąҀo_kB*IW`$ўԅP0B !튔;m3;wb"Ri~v`VnѺ%cF1$ɃlXdl&s@<],`zythi׊[4<a"Xj I-vYh_e\l}XJMAH}x!]q]֭_b懇MK:m2&ipxa.3V\ X+iz,̉Fj=wxVPTTq58_M6&TPY,fO l-+c=ފ2BBH/Nef#RK:m&LeI)fʸ|\laa%)0"f %L5Un'yD k|6;mQoHXo"}凃ڑ{ -HheR/L&lA3:%CI-ڠp10DEaʛ{&; 5 ;R"LQ07)'"\?YߍI9HTs50ܦ`*BLyNe #Z$Y>2F*^07fRfELN]iK0C ئM0($4*ʠx!]qъ4t#^ m2/ۥɡbv^Hw*DJyzI(IۑR xI8bC|`ofNL}sYMusJ^D*Jk30n#cQgBHuEePSvx»`z@nЌ> 7U3Q]z}y!-?VyOПm]eNJW~W /s9Y搈@BH2RN#՜o%Uz ;[m6+,o>-n&JNÄ'b@Vك" l7`b֕R\l,{ IĪ/pQF;UW&kWmh }?1  f0ؐ'x+WĴi&⅐vu.#T6m6n4CCF&%->\o͠ s(&ghJ퉒(f!cSq\ t:dm 4PHeXL_B9(h$,f/ԯ,oLP 8"MƧi%]+f&rF'۸A7N9fubc4ˆQ?BU)Jּ * =D|%E;c٫=QQF;f>ō7M7݄͛7n$⅐vEDK<75EJ$۽`i3ILHL6?΋{(W)r`]t4a0ښ3F#l T(fe'wLߙY WS){oJ0Jxf~oF93lN -yױxb|d2ؾ};u]R)رH$ybCBHO>L̜i^.ɤI52o@oorɓ xc ~aGIL@lda#cJxl-! )UrYxϑGV9зɎJVBĨO2Q-ڊsF1l2x}) U !+H&q|o`̙馛/~E@BH"zzY`5M+ÒA34K '""<&}_pюS'V$_AdD0JH.^/xUJbC 6 Qe2K{=VN Z=~)!*VH벶1;LN.ʻG$d/ ?>]6g-noxTH4x!]q <+kBfK$g2FЌɤ/n-G!K)a%dYRBxqYB&j^q64rx~J)@\ٷ!Vn+}lϑ70MPKߊ|!bn1i"fI_(T{jC洵kċ2mEüwISl22}t}y;;;1cƌRB::n3mI*緌R%OC$R]ʤe0?ȔCb +TV#jZIJ\N*[`"d{(*`]p1P1p]h7RR BBH"$hI&pq]#Vb1_Dmi)L\/w&g<4*BUʁj/:F56HQ{Y0вH ū0-+ԯ>QkغR苨re53+h=Jʛ?.a*y ?1(^iW(Y!xM\$۷;vF%#$^80}d*y1P ]rR-j=F)6,T͎: n VtK.jsMau[m mT}(Mj*hKyRk^?-RIHPv޼ {m`&`3mjL*~/ŪdxZ+zy1ZÑbd66jY<,C@n^N!P}oJ5`ۼ;CGWK=_l NNO[J(,WJɃ#Xܸd^{7OۡQQT !ubo lh^o7Ȉ/^xaD<0`V&hDky/ۆj :Fa ?d 2YV{OTG[7sN=J//[.np;L~yvVWy!ф⅐6f``#`RytԈ!?d,npiF29؍2&j^`r\(EyA`Y%,A 1yKoz PiXn&eK\x}CalwDN@/^NҼ2|EM(^,HBLIܗU]^k=ɃaLSi 혳DuۃKxQǶoyMy(I0U塺y!ф⅐ɂR~ձ)S>ぉ2#22ٳ旀)_́!BƟIkmB)IT?AM(^EBD&i_lu- C6 ރ DAKc^X&dF-\MRWF Yj8DN oi%n+T !Y*DB&3/]]亦4_FWj7~p}=+kIa(.faEĸ[A(Üde"^އżZ ^&[Ha!KkdGUh2_(iw(^ic^Y"ӧ}ex8tr3lmދ:6D.x,Z)^HX|)$L_l2^qK0׻whG% Υ;?R9SMǛl!%p3!x!ژ DD{ƕ .Q6Ķ;+\2J 4`pݜJLj޶J}`xuI"Gru T vxqb{`&BDJ: RfJߞd04}ўpQ@ױn6 >#7mkj>5`RL'H-"SBژ "`DhmˬYȈY>m A[$004֋hr4KM++𤼄J)/FYEԼ.@q5)Ǹ@_79wL"Z3[ ey]4̉% sr)c0K B@p H */\즕BWy3Ǽ6̈́'Jr-[HDV&^zɱ8-[.(v\Ze 5y؁~X,%3ȭ m)e/kƱ\`= |a{K1ʾ`R,#iDBHq twɔ'\#&ire<0;w1ɫ)gG;2abUgv\z, ¥!WԵ7SH3Q{]U|!ɁI~DIוxZ#B@D!jc!F T /~HZo795riMӫ ;tded_%qipijc R0z2J5)FY_qa!=09/ Tr" :i1/$PB&΁Cɀ"./3{&=ۯO3< l{R HJn(Zړi v%4,Uo";!TPP0ad;酏D0޲x!⅐6.^ACS؈ǁ>%110~}zu]#RFF[~%ob4(ׅc'(Vzܬ|E#.a۔X.Ph:ՒG;a]fm"WBT7L!/;^"b(^!QmE0 912⥜^//*f1۷/ʼ|ja5}!=gJ&Iץ^~J*u\J0K|`䅉ϓ K@u@=/$PBX=*vk+3j$$'l"ZJ `1 ГS;G޶y]L)5(RMBl1$a $jcV@HPB;aF1"N$welT(=6W/14e-*>[y(-M!G :+㉾p))Ae%c#qp݀BnLh'@5QqFKؘ|r4Qk-r]qqw3h $PDYvx5r9pK}:n,\=}Rՠy30y-bcONwoz&tg砻(9.d^0-FT/k{>,e(90&e- 4_Y# !u䨣[o{c孓N/} ЇtR1!\wu+0|w܁^z < :(~^pB{"]m, H`H<.5xI$eN`p'TʈdG2%R` W FB*.ؠpGijcv≄ :Cb WOBH-PRG yY[6m9眓su]z(+^|A̛7/+\`ڴi8SrJ Y9 ``|^.3o'7F e5Bjp^ J ^X쳍bH*`څJL[d৲HEu 616FHPd^x|=DOOOsYPnQw}+4 Rwy$iF4&\F!I#Z6ml KnN-65!g+*ezv3F-qH sS..P75 Pޙ=s -Ŭ-Dm@HCx!lٲ0s̼f̘[[h>Y4R^ {HJVJ/ u.ɤߧF\ Os`V6!m^݀Ɉj{K+KKXg.n}BBH)' 8s=:,W nWsWɠ$=c9O4W=kN2oوA`tY^Y瞹[^_7œ1YCCfy[?<@`}O'g? [5wHry{{/#7i/UB{ȭ^?(^HTQZ1BB=܃ /k׮˖-g?Y<8CsũxC[d *,6 gdªLRu+[@2YE+66iEx\htxac15cQ::)wxSv.fVRnmBlذ!GɅ?>6lؐ_|==={> U2@ƚZfbȱNf6¢.xR|1!mdJB]m b4lɖtVɗCTk{b>*BBH9#0w\<?]~>gvi_ Gy$`pp?0N>dV ;nY,rg) zH ,m_~,O&s{ad{%\]1{ԅ,\%Ph6!1B̏~#ڵkqm_*8D/'矏K/gu~ꫯ'?Iy}%Ir!ƒ%KM*_,'>1b|xJ$7+7EZ1"^Ǎ7?xu`f#hRI:j s]ļF6KWxK›b޲Z6{5|acaBH9묳J)|_`J!+;&.̙3W^y%}uvv'W^K/d~8|ɢ…j::|-.q3оi:ں.(LU4U#V}`q.g!:y! Q*,L d]T 2acolh^FFjQe8^Yv:G4ٹ?Xb􂑤~LC=/k?\A iBd #.oe _в1Ͷm~xyj kRv +f2.VfK6!<" $PDrWm"dGcIDAT%\1$FldX&*lJ3ޖT|BUmY!M@L;6uuݾFޱ1Wg'^zƢދF#:Yx!QBA2<싗b/L>M" hM!FramvFk%J 9YvrClc{a"^*y! a `#7^}x^K' 9Bb/:R%ǘ$Lu>E+IR5GNI[9nPi7y24l7B=/2ّ*d8L̙cBf ŨG^Q`S֑Z,jmM.' ;!"˧)KcPv/BHuPB1xp>T""kR<0EL j6*# T⸮.(-\d xq !LvϋR@g'0cFCmf/;N8ċ]fZ*ɵjm[|9?6q@n6$*[ >|xj0b5[C⅐6&2,h3MlY&4c##AէLg*{SLl7B=ƞ"juIS@Mrw &Xd{3${^0R$!mh[RF ly^26&ǖ8;w78bؓf#x!d(qM1o9h}K XjcaB!$z=Z13fЬ0 m1qcrq i*m) Gk3db=/ !p!)6S[DBƆrɘsH&s+fRvO%'@i_H!F0j B!0 EYLK*el޹oH,Wo]5\ [Bj⅐6-*`E(ze=F, 0쳭 0U R&l2ń600}z8khSADY3+m@H1<ښ=/$PB /gZFd2Ʈ^ܳǬNx<i*!V# t,̷z^HTa1BV#HTE3abCCq#?lW K[=4lHLqׅPDV٦Nƙ XjcaB!TxDŽIoO&MΝfPxc/%m)" c$ĆB(e<,3fbݦ 죎f|xAg200V@HUPB!Kw9ӈDOoDFBV :{4b\dpig(^icB_MQݴN!d8W#:眃~7R^K/P.{a$t oۆ33=8UOo%Iz^HDx!BꅝU#4O_fEڤFm[NIg-l5 ýF&R6FHjc)W.;J`<@ \1ÄutUT+ʓOֶ}4T>kbԧ>gǗ%OH6x> :;;qgfb1,Z_=6n܈w߽6hBB!"n4P`X [^>D"~NBʁB!0HOQ$ƚz-[`ܹy[nm=$P<ӭ6bh3Miss͡n68QMR/m$dڵ! ~5DcΝذaCXhV^?vC !mIB)F+G̟?<R:::_|EtH4,!B!9ӑL&rt:+VnBHB!4N: .?ya޼yXt)^~e<6DB!sN\uUя~A-z|ni$B0l6cppn~8V^j7ny8xꩧ |rtAƼy|T?8:,̛7Df©y8wDSL~|ͅ 8.\Y^v-)8mڴ)t<81c tvvbDzer ~kZI.SNŭފz xg)\HhBHຮ^p9s;O>O?tO>j3<̙O:$}'j~ꩧֻ{RJ_zzڵuWW ngO8}wgyFXBϟ?_ O<G@ԏ>>SRJ~9s=e=}tpœb5kRJ/]T?9S* ]wݥիO?oVt/]{Lb1hѢM?/?VJ?,NOva-nv.(^Ru]qJ)aÆ*l޼9oƍuGG ᳹wCZ摑{oQ9%Lvx)$0٫֯7xcufs1.]RZGnBHm0l6Dgg'\~k\Յ}{XhpڜNqE3 ,XPp0=sL\uU8c0sL7#<O=,X*{S4cƍ꫱d~Xz5^: q=0B& !]t֯_'u][m҄,^_ew}袋J|զ䦛n͛q 7ڔ87X`N:$=5\g-0bhh?p'8lݺ7|3/^b Kd|ryw}[m!0l6b֬Y.2YfmۖٶmZz]vy޼y8Cpc8qW J_/WUd2l߾۷oHRرcd2g|ĺuޘ5kR9/9իox]]kBHcx!?>^~弞/"X0"6nذ!gіW\owy'8㌜js}֭[1|W^A2_o%fΜ[o52Z0v:蠢q_===8snBH}x!8ӑL&rt:+VnB#ܹs,Ǜn5\o}[[py}Fh_}}}3gNl~އkLk֬Xv->+x qwo^jUUVqvaf֭xqiaԩ9nBHiafBH?wީ38Cwtt5kִ4+W+WԟRJ/^X\R?ͮsjg?׬Ym4'}Uɒ%KRJ/ZH[N׿N/b(m ^y_B\RtIZ)oP\y5 ׾WZy~W^G?W8ٳ=SOkFb1}.6 7|VJ'xaR?(^i3??9s议.`l0Ndk/_<@٩wZ,=;)8ͷz>u,ӳfG#XO2Eq=w\}g+{w}7ͼd߯͛7:aR?B!BHH` !B!$PB!B" !B!$PB!B" !B!$PB!B" !Lb8sO|ǶmZj矏ګcaƍu'!p@B!v֭[5ksҥKq',(*7I'y]{xa!oBZ :(l޼w_ Gyd쪥rmwb!C !<=P믿W^ygy&f͚?q~ftI:u*fΜ /;vȮꫯq{9[/`9W_}5+P.l8_pئM;w.pbٲe9]ࡇ§?i̞====G>^{KJ!PB3 J# /e˖GŁO|;sߏUV&z!|[X8X0;vફ~3<#8ꨣO|O<`w |+Xn֭[.1FFFpbXd q|#g?Y|_;e]]v?qw`Xhф6B #t:t:T*իW[n;N رcwpBl޼W]u9眜}Y/a]vgիWpvu]L&>q뭷C{l(Nv⥗^³>; pGcdd7peaO9tM7o__z׻j>?B!C !wqH$駟<?Ofs1Y"|ƍ??9>ݍz.vg?ñiӦD=?Vk=yOVԧ0::g}6g)UBHeB!˖-áxO<'t>b/V-[dŦ漏bBHx!rHYf7[iӦvB|&֭[r6XSLfE$ɒc֬Y~Bi- #Rc=O?4,{=yO+V衇0::c9ttt`Æ 9'?)iIWO笗H$copB/ίGqDI!4z^!_"^p Xx1|rZ ˗/[Doo/?xKꪫ| ىN; ˖-~k׮w]ҖO<~;?|x뭷pbΜ99IsŬY`GWWcnr?Ooi7oy~׾iӦz !z^!d3Qy9s%8\|8䓱aG?§>_G?Q?3N=<ҥKq'+G?Q_RJv)OOŋqYq}x} ,ڵkq 'p '`ժUpWuJw&R?}1!Ӥ /īʒB=/B!H@B!.0|BHa!B!$B!B/B!H@B!B/B!H@B!B/B!H@B!B/B!H@B!B/B!H@B!B/B!H@B!B/B!H@B!B/B!H@B!B/B!H@B!B/B!H@B!B?1*jIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/original/graph_9_ex1.png000066400000000000000000002627711153663664300256640ustar00rootroot00000000000000PNG  IHDR/gQlsBIT|d pHYsaa?i IDATxyxEǿ59HrD"AQ@J!(o]PcW.A!"ʥrH@T[ ~$=TtttO3UoU_[osAAAq   dAA x!  BAA/   _@ AAA   |/AAA2^  dAA x!  BAA/   _@ AAA   |/AAA2^  dAA x!  BAA/   _@ AAA   |/AAA2^  dAA x!  BAA/   _@ AAA   |/AAA2^  dAA x!L4 @'O(YbڵkJ*! "Ɯ9sТE "dgg~13O?4,YkQaѢExgb- ۷#_~ \%1D,ؾ};4h5j //W\vc,|;u>䓨҉ѣGq7"`R +lݺr jժGyiiiK^?[qơy \{(wat"2^rMvv6 8u֬Y3f࣏>_t֮]@y%KpaxK̙3N+][`AXbZ ["DLq=DD޵[.~GTRe"Bk1lذw}{m7^իX+^1ιc2AMbb".XACM/!ЫW/TZ۶m#_|9:uꄌ .O>C(}wlFGݯ_`>@6mSO=  %%qIy}TZȑ#q؛~]tAzz:*V<̝;P=h!/((}ΝǼcĈaqs8kFJJ 7nzK* &L@6mPreTX-Zĉ?~< 4iT$''N:С/_wʔ)9眃$dddM64i:ڽ{7z!99iiihذ!Nݻ7 SLA~~>UddeeW^駟B999HKKCjp 7믿@ CaWl2s=hԨRSSQbE^@IIIzJoˮ]p}C ;?cX\ݿuV5 5BJJ ֭'N;'wADy^BH3f@ݑnݺN:Xx1^z%̜9˖-Czz:UÇ' Q|wOХKx,Ce~ft+V̙31rH^f ꫯGEժUѣGTZ}yaHNN9g(((@VV~ݻ馛0m4t͐"h",^} Zj0x~ɓkqiy8y$M {9իO&M{ERRΝ{=ƌߧO|h޼9Tcɒ%Xtip믿nݺ뮻Pzu:t| >`G-Om;wD ؼy3ϟ]vf͚2q(,,Dff&z5j`Νe˖ .Pjݺ56oތ6mڠ{صk}|g(,,-&O?oݻwǭb \8y$:w bΝ(,,g}e˖oڵCrr2vlX~=L_|QNҮǏW_#`x70o7o l2bZ)̙3ѭ[7[n vRߊ+BgG-0p@޽ӦMu]իWI&UW]W_}5t~ ~! H=]t?n hذ!`ܸq/Ѯ];t Ǐ_|!C|k%։,۷7x#zM6ٳ1|AvTٳg'ۇ)SE."Qٶmg񂂂cg &Nc|GUTrʐ4y{oHxVV_)Y#7wugڵkݻwO<ɯjn0|֭<))רQoݺ5^RRoF Ƀ1c _v-OKK7,Çs_xq1YWanݺ3g7oSRRE]1>`ޭ[7EEEs>cM6Ҽ>ݼys^R%~!xZ̜93!CŽ:u;v,^ >GX9=pC-_'''toÕNOO7o9ɓ<;;ׇ[r%OII;v =1͛V#GUG{'OO63s=._y_rBcg /xBB]=pB@Ϝ93ȑ#9c=:$|+Vğu֡v=ztX3g6n@.-܂<\qHKK 9W^:t(6mݻM6ùk ^{-j֬ѣGc͚5Ѻuk\zHHH?q޸q#?k&KP:護š5kЫWcn+~O?t]v̙3駟мyso&vn vi3ʌ30n8^{P\\|BNN*TvNff&o?ĉhժt橶mb̙4_VV-g\={H+_|f~VʨlٲqX@齼~w}78QF=z_z%<䓨Y&nԭ[tgAR ]<ac7£A&xgٜ9sx˰RF%_]3]~Q_zmҥXtfUTInٳqEgϞY&p!_2t3iG."h! ,̭5#npС)98rHHjdS+rJO5 l2l0-*VѣGcؾ};KL4 &M‘#G7}݇bҥ1cy\wuغuRP~}L:s[ ,믿o8s0hР`+SNaߜ9sp 7:8~8g_ǭފ2N>#G"++ k֬ W`ÇKk"믿?t̔Q9E]d9H2/zRͲrJ̞=rKs Θf~íE"* ,ƾhѢcǏˑFL'b%hXxqXիK/5$Wqq16mڄ??("VT(]^s7nu~3}~vv6z81o}:l kbV:u -w{ݻmIƱcpԩSa݋m۶(]?B/8qDHW5(m޼{1tC=9瞰.1%%%ۤ$ CaĉHOOG.]teSܹ3;}WJJJW_aٲePꫯп\yEʕQ\\3f %% }xb p7###1j( /`ɒ%xtRaϞ=(,,ovZ$''?č7ވ+۷GfÎ;d$''ٱc⣏>BAA.B$''ǬYq͠T}7n7on 'NU"33PgA1_| %KEرc>C|͘9st +!=MtW^y%Zld޽_}n2G eip#777t5jlٲ-Bnnq@iw7ĉqUWbŊ_b _۷ouϴk999:u*ك-[bϞ=燝cZhӦ x̚5 ؼy3f̘J*Ed"XLqFFo&M@@:e7yrr2?O \'3K?<H>Ζ5ydSRR:u)߱cGر>oߞW^'&&իm#G{r9?3<۵k322xbb"Z*/((|AHzǏ:uIII<55_r%^м6jly޼ys^rekժo6zj9&Lyyyr<))ggg>}rA>x`ޠA̫W;uė/_Qؽ{7xFxJJ OII 6wy'3gN0… y>}xFxjj*OJJ>8p _# ka?3ի^:OKKZf #ˢ{H*Y뽤%Cw޴iSƓyVV[MMn7n*TiiiI&{_u0ֺ( Zc1cx-9Óx:uM7Ǎi];={={jժ޸qc>bO?IeӻVz֭˓yZwᇰz1ٷ$wAD ܦA}wqy9G j7 ¹{0qDlܸ4~< cИ KX7|{_|q\(塌ADy! P^=YfHNN?O?IIIkPF  NAh0`,^˖-É'PF tO=rssc--24   _@c^  dAA x!sQ&υAJEW&x^:[#];1 #\hvy9^ ?B\%劄Lf;F09d^H<уz+1E:<ݪcxP11Bk׮0a>qӧO-Z.gI@huQdGP-lgdٕu?!٭21frO=#E f& g83mO/hR B.Ax: Ǒ7x[l#0&/!Tf#}νLnEvŀաe_͘k0`1x,B3~6oⷫK d׿C ѣGYf!???™aoRf`h'`c~f2!\ 377Gg-ӏѮr)_1/y9e*N0<9.W~@6n@ pKn]"Zמ1y! o[jiԚ5ySzٸ|Q!F {$cd =I'! V7ZsyVZxMNau|u-#@ A-h>iɡE;KDc NDxȺϏ@˓*k'@¯нKqiCߋan§eCb^W:<vs!Jv솑x-'v!tӠmE;"Ekg" /OC5 GRN Ǽ/E&ixZEju%x;d[r9b cmR?%0B)_")mX"bDےxBR2b UD9^_c> Û -gf7ҹ!JySRޡv++ j>n/Np{#E6h;PȦTF)r62 ?.AJ/ǨմƻU h[0\.b5Ρ</]u[^=+dDܒ  Fݦd+")@y&쭒 `[竉fpvct3d7FZޚ>,z2;^gHy! /${=ŊfѢjrEm$~Ta9sfBDR:ed3ƴ71 uY1:=4/Ohi418泍`mp D"({+q2+]Ҋ6 j]Y7ukqx>幎Ï@x!8& Qnh^Xx>6FIn^$8X>/_.Py mL;` jXnz2&bY^ʓ?u_Ϝ)7Y]yi=nn֭իK.XfM0Nqq1q\r%X"RSSѼys?1TI&!m6y!@Bfff OqH3(<@[ekU#Ru`8uHI_HIb-.cZƋV^U1AVW5 luS(hsL߿!a{AVVzȑ#TB;tMXh>$|'M۷oyg[yoA(A5%0ulD4\pϊUwQ˓:.@em ?=q"^2\y}a~1\A pLԸRJM6űcpc284YC A5]4dFFL'DkJ&рkL̈qўUOFηZn7xqӪ?QB֯_{Yf,XL{mժQfMqغ xƼD!tZ]OLNFz-۱*yMdB c6 QE^y,[#w,=xl\lcN€{L3k"ӬSF֭[RJ(**³>-[bʕ_E by!8 >NļbrkZHA,>n_fc*i/E }Eaa!fΜ뮻Noܹܹ3zI&YeÆ Kзo_óކNΚ/V^?vԻTϋ3(놷ջo_9gx71qDz8K.EǎӧG=1u2/f"N W`OÝ~GdfHs;i=%(N{tRIԿ 5@bQf'1c4;d8ÌGN7˟r pСxWkO>8EEEС.r|GHLNuaڵJ4 -4D7EȌxT) x\V6 8uCqA)3ҰgQ^dAr\wyY`W 1fwG}4x*UиqclܸyyyHIIɓQR47od#0rHlݺth֬*TUV\YYYp Dxi 0m-nj0/Sxb9ӈ_<j^._RR~0N̙ QXXr,?? ,ep!00ưm۶ⓜs9s&jذ!Ə;vԩSDN0l0Z2 A!1 6oFϡEKj{ރ]We_gB8y^"^IxwJO ~F͉F$Z]pc㋼D,eֺ'^)c1_Y}?j/~|@¯нKmLxɤ]HUiXɬ@˦FW!YSkLK|R>JI#dDTrj1WpC-z`8eip/E#u:8Ifek.~]WTO"0+K]bK5>bb|SߐBxQFq;9QTR^8]'gj(/.b+AXWDE۪﹞B>Q>h֔nzdDri$>¾hܶcƀH;Qd'mHM&<ʮK?]&V&=Y+dDKX\60fu> ZA#K ?,0;*B=HkR8´d:+dDΏ̜c2EyN0Wd6ӟű,{~w4qdƎG"L2c? y^B A+FzN9iFc5|7 2?2ߔJ:z ZM_ICL+dDy$Fj55*ddYZiM"e4#V\h)F2Σ׍KM}LYE4׊gTd~Wt#>fi-eFO3zU#5L/!3r#fH{S4lZLx'K2^"^ 8U6ۘC("xgSuSFJO_M2^Y>07pDrFWo5^"ȷBׁ WJҽ w 9=ŗrN`nEeS$|qpsaS´jh  Sx!xgiy^z/=oeF΍&B§B=̪b6[y x C§BaR{Q0;P4{@)dDReVmLvsI2qS� +'b)8~:2[;IbG BJjgh,fo;1"YJۖL-Fe6aUFaw(y!| /$W7J0=Z"-B2 {rX-EOg̦=04$=n=dP1§B2%%3\!4 /43Z)qG%0B2^"^ao"[}/u>D:lf<W(oI"n k)^reH`'Tk S%x!Ѭ-.dcNAmP,nr<͘ 8æW/,g ?BH?Cn y!Z+`de NԿc}8Y=9Z A O! l>^OyPyMZ 0EcE>5&3hAfqlxMML "^u_ {HhיHf+&;X/Y#{}Ӫ?\GnݐdT^]t5kN2M6Ejj*N2TG⡇Bff&ЪU+̛7XWDEH[(P"}$CȬ§u兩(~ fy :S?3F7g,Ѻ⵼1/o69aÆax7yfi֭ ƛ_| X$9tiӦaԨQOQn]t .4_G'asDWu/[•V05ѤS^i#W5,~ b~18+gdeew?~uiӦσFÇcݺuwԩL^zJJJʕ+oD A+ &iN_LϮ-GYW/o`v;COĹFKb\ Yv;7 HOOGqq1`ػw/ΐx{|'EQB~g=z(oh>A+^τ0<ƨFT&M^^A=@_fʬo>,dBo<%n&^<@x֯_{Yf 6.xHKK bÆ hذ!C›4i<^vm'b/4:DNfe+G%(n*{=Ȕ?Jev[Vz6Ug 1gY 2Qnc ԩS0`c8VZXUi8pj OOOW max=E/|QIU*^Ӣ׫.XzL_i?scժU9s&=\#2^"^QkuS@H723<0Z2AhP+^ne,^^@ 6h=n",{gӧ W^pСs:hQzuwE t>x!xE t´/bglET"Lv(B~UT@R22KgO‹Fw"ƛo'[o 9uY~=.`qر0"999xwq)$%%ÿ CD[h̖ -LoKvl6l;Nmvm~a=;%uz{tgSqflhwxF&.6C+cǢO>aǯ ԪU nHԩS;w-R׮]q |ӧO-Z@ff? A+ʘHe/-za`A>-drG^c^ŊZuj5DygFg;>1uBfY7=7'Op (3f yt͛7˃ǪTƍ#!!GF߾}[no1j(/8k;`\uU: Ǒ7x[l*06dDplS$C&PFlv(Vӈd|C%ZvS݇l̑ZTA=-Zd֛Yo ̙ QXXr,?? ,@/&L5k'CK׿C ѣGYf!??߱x,x%rocŊسg9\yxg+L2?yfԬY}aB0ƀ`'Ye;cyCn!3b!:/d%(dϝsVFϱR'Tv ~1-ߐ bo#G`ذahԨ1bi˖-CӦM'OF~0`;WSO=ݻwc„ (j2!Ze@F2^0toMثz^}9W$E'z?y! AĀ####$lϞ=B޽1~x>}uEӦM9ÇǺu됓#M1\ рd,tei=+ݼFNպke%RoI7x^nr% y! .t/_{;3We IDAT ׻wo >|^Ȁvh9iAT eYQc%<jUEW+_,/ B,J› ߖ_jSx3!|CYBzE臲xq,\4J)\n)S_-pNg %e p.+k )  [.vA|shY^Ih>AĘzoO[o=;rܸqxrJ\ve!TX]t [X1\϶JQZ)g"ċ=dyyK bp'W<]ĺ{=0`O '}+PV0ԩS;GXaJ(akmb<cKk,i%u9Vd3"Q6d9~b){.^ٶޔ.d̶KRjda噀A8y^"3?,X?uT 駟PfMu]>|8cWLa@/mXmuꂡ>f9 6V 'X|no]ad)$'zI!YJAgŰ8TNДz j&Pw+]UO>eu *3xy" Sx!x%l_-jE4^|\e^ih$aLnɰ.Qd:,Iҋ"%YԡV+zsYSU5IJ˼ 2CUjlcO0ƀm-ŪEw?` 'V--FR ^텄~iml6F8y^"^QZVG٢q =>ؑSwb4EX7SnU6é{JIۍ0\"+r8>Ϫ"zź߯Fdy!| /(&b V@((G[i1v[SYaaeN쾧dZݒbIY"* dF̋u,a2^"^/`UA_neҪ{wE9Ok<ׯ<!W.ZR-ELoG^/OYX-xh5q^=FC3iSbNᶑgb",^HL>jcEi\q[-#2 B2^"^4-CTG0L#*1yWE'#RccEVQ DvnPbB2^"^Ip7&HTl{J G]o in$/0gQnQ1rKyI%H΋TbZB2^"^I*Gz](āVQ dy1źVs?8M]|vճ3f# hy@xZan2/O"a <ꏩMjzӏ4kY4J^^V4]rf+"qCqֻ>NkX`yp9yR"!]ȩm?4y!x%RKV V_z!Y+ls̢Vb6OF ʱױ#^;/_J 2IIb?h1I§Bbh#-JiPp,,O#hDb~v*G~eJEL(n(]281+~zQOM=Eً2D/vcQ/2k)G8CcĀӈ"]^q'nEJ#EEԏJr=j0~|'ɞY'P!3Ĕ i@(n̎gWr[X^ Q(T[&f4Z*%mv DEތԏڠtbKHYFgkڛ}/n/IY]lI6lb}Yq& Vg+bffvhiQ+jE ng hfыղ .qd ZY<'^ {1_52Kᕕ_y(Y<0{B4^w݌]^i0pYoӦ ~Ws9sвeːÇcʕҥ Tb(K/w^BW^UDKjCE֟]m46q2dG̢g|مhp[hzV5*wA^v+ʮSgH2jy1XSΫ:ΰ+bӧĉׯs8[Γ6dDpU%^}1uQ6q!8upXEXǘ1u _+Ny/3FZ`<*52ah'NDݺuѾ}{j CqgE pܺAF(- J| `䃯c~Cg-29z^o'Pt{PCk^Yd!Fg?O&ֹi~\C 1ESF֭[RJ(**³>-[bʕ_ RNC A+P/>&v0ڃP~}0QُV-EE  E0_$.! xgZf-E/eyձHֻHjd]Y^A屑*>'N۷۷дj Ks?b.[ KVkYG9R )6bTHh SrRd"Ġ]gV!5C-$F̢7cr{[}ϋ8dΤ]RRS"//\ptrrr+V(Kx!xK~ê,I0ː#Z2MʠmUu+)cmNTYrdڎFP $sR(0nNϡ|C#bVv9hy[z-/Oaس]&n>s_~ȑ#Ns^ dD -ޮbk\K&e|91\v/޵WDX;FqB$O@H4iн{Yn֮]&ɈXC A3Zݏdl[Yek-v0*Frpx]DmDZsl~MO|GD2`wro' ]9|"Ew^TX7xc01sLt*U5b9[nEz;vDAA5k *`ժUx琞C:\:-x!O[5L4" j:%] FWeSsFn?{d ֹ Fe5qH"enf~i@vv6n<{Ӻ98sLH bرcN:Lt Æ E+Ʃ# A1k)+[uW UJZqY^ʾ yx2[z.iniy9 )f^CPd+gMFq/VP˭U.'Bf-/F1[,0c3Lh y!x {-"ZB41VM#2C}3i>N*K}3e''AT=KYDܻQ -#쌅^msDkBqc X&yK ή"PETR"m4raD)ouuL4'Vhݗ=O&{ODfFs9߁u+\%.E*diC"E&)p^Цh6yI!O@'u}"%46KK{98#/#D#pHrW:yapF~>f/MzTgUg9|tR2-wl$>gH ^Inng~?-B> F*Hf qCҙI[f%e#+(Me6[GR<ؗn(1̤v_ Ҋlry6=z̶~R^DkW-m? J,zEQ3DtpH88TP¾>'3?U?P|D4צ`5J8^d oJjm|VLED]&/0-}$-_^eu.x8 (\1"  t)pS[= ̲Q̕6%+iԶIRrX{h=y(z.r ꕶR|D2KҤɘ-6'Esh 02diZ?Y3 #\l;q)Ny۬lۦ)lu߯u+Sn♔M!7l 2hVsݩ:9e-]i /Y2IY2+6:5Gy8sms’`Zy~m$ 0pF*|&27)"+msba1үʷiRoef)sRӎ_<3d9LYd(OR3pRsXG9e8-3)_I4Ңhh\=88TbenͿH;y'LE;f IDAT<<~N”T{4HXzi=jy~Y9s۫3fьx8 a@ᢍ98@.#0@e6&]W"-mQ4m2J}uUʮ22(ۈB?EkKu$Y$ .Q"uW3ma@ȋH xLo Iy`.,s Ah(~ئTj%rQ_l'Bf=MÆM"E"L'"eb6Rg G^F*ٯM 0Gt2) \E݊TA(kZ{ȶb1I?x(>6]G^L;')uX#W}NJRjlcMuXLJa@ᢍ98@Nh?2җ$0YuZ]LŢm iҨ-]ё$GO3HpraHJb.h+D{76a6RELoU\I )mtMhZ$5EcI 6يno敵JV{~,/ G^F*Bt⊂ۈf[>i$~W!w{X]LjRlwȋ2?nY aȋHhbʏA3TU|,A_JV\$Ġ(m$2ۤ |5,K OՕ5>['oPů%yiIF0vp _oZ^g9_U6>~E2zHH[Ks3] KרRs;Ϭ3lۊ`V;p;(F΢x}mP4[:O*nMutpí(Ic mlr!LIJ |{!c/o$#iY2ϣl:Pʛ皲u1߉e&Wt?ÀEsp "QŶMFv~bPYs(+i w=&y4(ӯL5$]RŢ֕|UxGm̡18ˋ>zXfԻpHgeے++eGiG"E p+s;ڔ<5#6R<^&~/8ˋÀ‘ $+I>&1Qc. \IJ^"/mQfKf$F`VF"cm~ RA|_Y(g}BׅJvP80Ra+1?&1IےPc.˗#u7<`ZJ*IxHEY+3IH&A.U$mz F*<;QYV44h:Yy}mRXS[ZT"Q<Q^'"Q/6!W[+~d}[^ME3ZζwL:~w)K 0QcCp twi-0ɪU\Yv͔rRzI6PFI}%_!d96AhggC9kkяb8餓p%ਣ̗`PGC" 4Cܛq_!ce9wyམbLYT:|{IMjtY˖gs9Ñ47 J['͊<$)M] [5/Nc<ƕW^5X>N[lQ[}G^ٳg=yկ/=x1sL9s;L%/a o:-| A!$ExD'UJSh͍cnY4wF )7pGFa=ǚ@%nA,:q(ץdF#yq9MBܫzȲ\s[n+ǂ ӾŎ;Xk__m 6xc̙3zk9ZG^_tE>i'NcF~F_QJ)]/po0-4isiu*(y[NY9>:|MC8\r%xWp7V;kޟ-,a [AqI|w!`4@JcW"H> KWأ|g*wkxWFzyǥhjxA#<-ӛnnF_u  egHwʎSx|=:~n_ H㜼A!|l9H>!G<y߅6@d`ɓ&7u]c9o;W_}:k@栟`c crf̘n /Ɔnn̘1?oQ;~5#įkN9c,^˗/ǑG#nf|Qywr:.^k-  PAX4b AZRf&<|ί-=#’"#qKSf% nT|"R2gi)Ü7DsEsuE!>I#sB6DWGAYMHqWJfڹ .r=Xpx'pCŖ[nZNׅA#?2&4k* A}"K--.yU5(%˰*Y8q˺VEl#JՍwȋ67,);a 9V;"eՋ~_.SKyt;|կ뮻|Mu]>}46BȋCK` #yA<\xᅸkSN9s2Pg aσr*"$yEDneDe2xxa3~,G0B*"ls9Xxqt~|_E]-Rb uY=C3p%Xd̙3c U  '-!e5 yEӬ/r>Yg"kcV,Dj<“V(Z謹 zWvZI_u+3W%gNS^̥2$̲mkyp>aܹ/^7K.WkXeU6k!%1cp}SNG˗cvߏ7߼Ut\1""HɋO#/ }LD2||߃'fQ}e0bspȢdY֊)Ii 7IurEuo;'颷R%k]P'y(z=/ˮZ۵?adY^F(:JN A ,1 䁈@ž_uE!CIRbCP0'd^l?3"CQ#"p.FN&0m܅ .s^ wnuiq2巔ҜG^F(:=6y!Y>β5W/ƾJF}p/o@ya0"`t'FgUD~'("/ uNV`}~QPefJ|ޔ!skݪgkŮ_(P* |IM/H6aMrZY-t~yqp88PHKM~\(]ȌM#j Ӆ&k(7dJQ '{3HFdR@^H`y3.op*@!oDtʊ4(3[x^SU&Q7݃z12>(QiyuI\^YlVEltdU~KȋÀyqp "l-Ss\̉v72~e :'ȹ1H2Er6r9IZ469J6~eV%jΏGTwam+<1zI@Dh_+!>WyTe~Ih<sAhn͓ѳn΋Ccp EAm)2!BB%\,2:$-8><ΩQQA #`@^hC+I9ʎҤgt;)^c3K>|ϋ PY0Ä"H^(hSN^!hȠ>Ҳkre-/(yM[7Z+ ta@ȋW)#rR7&CQhg,%o(͓st[=l,o)wOD@=\"ZS(LMs}I,faZdx6an2\'leo(Gm0焵mȋnyj_,1}Ee2=$!R @Pd̿!щJ򖦡Z NV-@ᴓȎE~YSE$~Έ}HZ|>b(Hi--Յ^I hZ:ońM۫ L8 *\upd䃈!{;VF֖:u2]l AX_!~ecs/A$ly7}_F΢۶TڬhjkܼpP¾L|:wȸfȳM<,/!;0N8v |Ʃ pI'Y"Pjڋ/JiI@("&yeق<5郚jRz\FQh}I3͉̇(`YBD|%pjݗ:cXcO Ct+>mkRSMҲ, /g*dy6k ߗeIp˰:)g4^>c=,\1묳nL>n묳OYgo]̴DCVe$+Yʽ"Sqz$3)#3`Ded/[:+YG&|?~v7bHAIjBWebOU`^o#3 ?/#I9?hc!>X;.ژCcp߱k|Ic="`A*5{liҦjGa?/H$.K6OH #1[RE:iI[#܄}PYr ;B'N[L,Af$YX_ 1tf!88Xs5c]v?uYn)}POf`ڹx|Q}CD(M4"aY^DRui! ye~'DʞT$I jf*\Ϻm+ eڒ[7ztsşos6r6z0ɉM,elԚX }supG^B^;w.K/>{ꩧ0iҤ>JWdi֗4fZ3bnb"rdnj׆A &Pv-)$yfZچOpȬ$VBaF#J[E,[^$fAR邕VvYKڒy^M.C\u\a@fk98K_WsNt[oŮGa!ؔ$15[rPz "˝frKvK/ XTd3!I׉+E{UiM 믖R26lJ% FBE7~M'um[Rͨ[MoiǭLq .#ϼ&x:3$$CK3UxRQPp%"32\.BUIm*E<yqp`Xhnv k U9([IOJI: >tY*91Q "KA"R "]ӨMv_$7^"5te7b:7bO+E<(#*W}Nesp`_bXʧ%pA#/!ϟ3g&LNGEE_Н N8 dN_ʋ*4*$.b(t$'[UPBG%5xg,gav~p $JZrS([eWDMmH5JHk$=EDx~-tK`#/!f͚iӦ?q C*|"r)fId. \ϝW5FT.+$.*#uU.Q*چU=}"-IƫZ BD3 7;B!y9=ňnƷT/FͺfB"Idy>MSc{yqT8UW]5" K~tЍaCY%~ -K:^wIIABiy$ב4Ce9v}KdE@P*FMyg͵1.Yۆcq/~a4Rd;l wd鲫)'3CnF>C*R߲,$ ʵ4*D&oٖ'-D3G$:[aPȋC 7oVŨ pOKuF\KiO fF5R$QZ~V!>(Hy~i}%*"t {o>HĕT\e&Z6 :EP˩P(X-"rVXvZre:J=' Ua*N#)I& <:.Ieps^$DIf 7t^7Tc_#]tE'Z3EB*r=& PFK"D^!m~Z,?8}t:w"$lcBdEC{ֲNRm-THSK )آ>ԣ6!@HFeq7d-"N~#7 ?cҤI2e R1isY伖$"-/ ά`\˒W$y,/bf!%&CEH ET% ?kX[ V%aHy$-)ϓTy|L$)wx, R1G;ŝ*-YYDa_v蛲|-"k$I `(+/>E!: G^B<5jF.68y࣋a%QeN8%$}޼L9=ˣ-v.HKG0^0ūURY @90#(AZL<!#ey֗!7Ec6WʅCniW?b‘K.bVhPoȵ /K#Vrk敇x-ٮn(D\ -/5AP6 -f U!v|x%^(vqc=z*>JX ҢF$b83F( MX^YZ dI`#/o̫)tzUe<WSLET/ yoy;yW Y{OI'f),R^GK(\{\sֈI_mm[6I"TnpA#/!.\xqv{.o y1'K>904F`#,Rv3KYzNԪ)%zHv8J >$,Y^k+S<MkЯWi[Q¾^%߅<2tI QI^-)*YA0BwJD~Y#T,ús$zŨ#/ G^Bx㍭&N7xUC< *AfEXnQ~rҺ])4дUL.s.;$^Pz eY ]/U'5Ǽ,^`e3IL'r:&{9dQhm!oEʼn 񛧈J} @@@hCI&ᮻ7l&=#/3c|hAU:=m 3`[H{Z׻2ɐr/#)"Pz7&,/!;8XlfΜ[/nf\y啸-b!(Q+ eT6@Ϋ)r,_AOi5/ T,zRz%Z+'6Y6!t+Z<6TM(/u٭X-efi@{"bJP&Tp]y=Q QS&Qv6ǖO. (QP {2-@Ȩp60w\\pxwc N;4̞=8qqtܬMe=)X5uE2ϣ&+ۢUV^r6 ] HmJ]k#.SQ{O^cN6劘^- ͑G8/"1OOnԪ|ZB|w;A1?Vۘ`e tT4Mwp ]ɺhc׋5!t6aܹ8裏W_;ch!焨 IHu8{TO!GNT*z4+YMx;eRY.),i!Phq m>68A3n7 D>&k4-ʨRha& BPE> 10AB.qJS3\98#/Zk-2I1rUs t"ci0 tɺ4цEE"FR*ഏ@+]}vG?zdk:\;Q>#@GQ=H5 Y  EՌIeNjH EV yʧME"88#/+5~alvx{ރ~83{A+x2E &dv5F ^rJ(-mz|Gz ii ehX^z5(OM2rp"ПWN,뷿D D2$Qșb"I\EgBr${f8ގX4‘SL2eJjZ"BcGgq"˜6L5HwSR>w,nd[,p'gORɒ۴𔃴4+&y1go\0ʲ]Y^8Ը[D# RюsE3$vZ=(sIO;jxvN^&seCW$˦eb2ۆ\4G%4*s[_EGfB05¶mJ3A rklwN"d,q5$I0f8"KNĖu^/ .… Ow<=SKs%ǟ'-s 82z|_3f -[Vk}G^VjpkKe@8Y vt <* {+"$/6N_,Hp Є:`Zx] ˇC{ tZa+v#"t &߇ z밐kZU'p߈ @Uėfl-LNn8  ^Z^[^/^cɘ2e ,X.";]vCCC7o:(<8suw`„ ֞Ip!ĤIpw`m{ꩧb}\ Y 'Y&$:2y&WNL79i $.+>^NR/w4ӈ>3yG >kG-w5k>G*-Gb-z'hmeZv _ xg(b5uTKK1k,5*na}; 88Xt)/_n=|r,]U>]9_ssdWœ‘G(Jz䯌"VLEL*AkHy:2=EUM)Bí~p\n(fFu9d6Qz_Y^7ٲ4{V@dXh]5"27IFX|V#zmy1,6[o5nkXo2B@:<8=V_}~QCfcׁ  L5Eŭ!Γ^W֋7@̺+K7|*66&k]ͮTqa?\ ٚPN #iHh5.`{L0y^H&BU 3D?&LN;W^yǏ??[&MԀd#/+5{1|߈?cc$ex'1mڴ^W sbwc %"IPG=t"ߏ)ل$^<2ٯPI3Xe TNVLGiEWKgZu^}e]ja…ַw=6xH4yqX!M׃ 7G}4N=^W n/f0I&q)bɋQXn6-}^Ϊ&L) Vr"M{d0USy|6:5.ok"U ۀ:Ή>ao,ȋ"9,tB U*}M;gevWLrkgY7Gu`Ŋ~W:Y^B<V0y醫\#]1JyM;^n E5`ld^zȅ>-˪ ZbZudpնD$m/# `u쫼u#=H;Hq,(-xZGHwoHN~! @kôuX^¯~+>2e ~TuGyqp0o#yع6NftB@r/3ҭ@4 ɓ';P5U~; G^B;8#86n>9 "0R!Pn0O\FeX0MVuƒdf^EGwݪ',P#됗j k6"G$βMZHbB1}Lh2'Y%iҘיtO -W?r x<7n{o'> 7gqx G}8sxbl}SNŶn1c෿-;<83zXS&ȋCYf7ߌ3f+joqe[B0@`&*(bQ\S6UtNsrWʈRLet*VF^xHqCQٺ,ex%-zfļ c~p/퇽2ɝr%~K0/il/iHƥ6%B#xH/uEK_H&_x$2M{K-/p@OD;w.`ĉXx1~__aҮ%",Y$Z|Rn)~3VX &3 fϞAp!ĭފٳg㳟,`vo/}Ko,e~F<ʑ(FbJY 󴥫e K)#KKL6%*ζ\$$fuy MuBW! ilyE"-"R,rtP`[Muˉ~F zE}ϴM!JF4 ŌiC!+9s`}nY.ژCѣG.삡!C]:VTVA=G+T7t&q Nq^ƝdnʡL^gGx% ZF^m! 888=\KUJ +bэL ynpB:4&Ps vWe2E94%sesL^ȯJ} tN/)z{`cAzZt6g,/eQF =M/ߵm8 *\1n2Ѹ]wN9+i# g*uIDJSԑ =E}Z]M%>ޞ\<5՛S7Mɋ^m$@AdA><7yߣ.f5yt6!ɓpA^d nI@cˣ~_\`Rܳ;/ϔV&ZgJ$P vJFҡя#Чb))<&9l,'~.:N-IBRkN#aPȋCK.cǚko*!PLҡ6ɉM )D >6cm;AM)JvE;g"T=˽N$[トȖ&)~M2WDϯ|ֻ!~\Ah!^l$ D7"S<:ˋàY^Bυ+#8T]8.j'`ATťSUZ\JZ7:l|}=v # '|:XڑeตU,YG3OjxucYtxIrm'ͯLgyqp1vXo_Xz66[:Wu dHj2SDL;O7QϪo5gՠȈ97\B>{T,9Mjh>FD00pBxqc̘1=z4.\m7|s"/ĮV`1cTs]Qr7/UyUǀ]lzrUƕ;iiX'oEmT%n}QF j}!Nu<94'AϝıY}xoG;\|]1,/!9|ͱ'ŋqWYbt1h\h҃F>EMY->(kJY%_>G^IVރ?3BTEƌTOAƋ՟ .'EVE4(Z|/í4<#D`y銀 v,/ G^B|C#EHkq[R$P]IP$a \2jAwǐ? >PF꬗[%E@yTE#نt2,kz > ɥk]^)-b~f}B|X_IP:8Xꪫ}{ xA qI3Nz׉/ '5lG֖WtgP3ڹz̥bSuSNjiNBDZ&9v}Oeg}ennj#e+X}I_]fl{qjMZ?6\FM880,Z~;^x BJo>NKȎeXk\[IrV^V2盾e`L +فE}-#',O|y$:.ʒYʄgn(\1̙3&L@&3 !@DXdI+"#b;W}M.:PoaSMlYuieasW^MìC f'}FcNy yg|ϫQIi uAWt#>s^ڼƾ$ Bs3ᢍ94GB̚5 ӦM_Wh|_ǪzJp衇⨣_~:^xᅂk0U!jrGkl7"2rw^V$4V[}xHr .-mpKA_Ӈ1Dg| G } }"'%%.cH7YqP8b 7[ox9=;88S{?<mGU=xL5/Tןs2_[Bz(I;DUAQ2i #*DB5qA! /6ZΏ~#x?>1ͣ>_~9#qr<NkQЁkp0Fau3L MR+'RoM837tn_uC”Ӽ?=.ό2lW)=,j\QVfכzpG.s4lԱoYsi-\^cCpo?&M”)Sa6_o9͛?K.??ܹs1j(,Z@p&ĉ1v|(tM 7EBRH۷}`P'eܕ''/zqu[NdzN?ܗL+Dge*/ oߤ>Koژ ɖ.T9UivNψ(oaLG4OjLzP#pLhc!&N"e6|sXuUqEa6=܃s9_0ocYk|~';8$cxg^{ik/\vex'0~x믿_mGz=GzؑV?S4-:/O?՗9lpE4 U--w̜ǃ:((hZ>?~!8*]Mk(id?L|ZAz:pBK[$a(xfkn<@\n(YqAI_LGjx`/3mh k~zW] psSmu]~ |wމ ni28JtRL4 {.o&AD"z!]1BCn|YYL}DF?ȿd?&&}|/B}=}~ t}& jֽM4h`[Y]xhx}N2r8}nc6]tssh v;8olv8{~bsVnxv;3_}|Zywr>&!U>j!I=X7+V+r#ՇxѬaKTJC7XgԷ剜&њ2s2] {vKZޏtIDaͭݻav8uv.z-^5cԟ$I߂}f_}/?hϣ~?lWע}_*`eٲ K_*֜]w;'9b:ѰV_sspq)`̘1xgzaѹ=~z-|'?Iva8~{/*}` \p9{8Osš-2X(蓞= 浨|$G/Y3Jm^Xml#BڮWDivO`+&qTyZQ2[4Exy,7yFݣ&;5]5%Epnc!ƏGo0<<ѣGc…~#`ڴiX|y-eۘ3gn+hpn޼y ? 뮻.>`̙3CCD_lYC( c1J}9 <VhA^ً?q4& 7SK :ש4.>L',gGgG1vIUY{bK^"{uncY^B,[ koYbbرq9sflʼQ‚`ԸH{VKj</"BqI9TȢRTee(S^ HWML+UaFֳ=EqM{PG40b{ .AuOrj3s`Pף.`9V;Ѷj6` c4h(wqE}|Qy6>A5of7}w-iUpI:U5œWe\^oz{t1* ?ie 1WQ_-H-6m:pڮ j5oѱ/Nc<T4 \Y\\HN ;/GFQ.$.Ȁ3@oϢ ^/'_Ⱦ;#[*ϳ+P֗n4s(>׆K޼I`Ř?>&O)S`b7p=PuQO /k6l!~'%\7_~9g{x:uj 5t7ܜ3<\p|_MCt:7>blFbb,L9V5}m@'gh]{N ZU9rJ#d'ѿR \fY4{]QKBIlgk.qTՙvu碞(@$/aH42QLq4o$?5>?5j_P?1*d(:ƉCD cתZ{WuuwUwuuw]޵ZZ1N.ڶfоɤ4/3D~\}~J疏.]&Љc本D\q_|xj@N IDAT; ׽p饗_җ׾5{챕~oo=y~\]4MqbϞ=+<͈!z^""O~O^{-p;~0z׻zh3ve$vjϠLq8ߍUnՏ>Bcogu'PUQ<ThzWςt=*!hRە<]cYO4L_mwdCc=y67?B^_pNh=kU#v؁G?$I>/yKQKs^-Y/~zb<=.TAoQ/s$~-J(\V5dJJ\}{Gy$vޝo;裏H#H^6D׸ꪫpzիp9pnk?.6I|_mT_/(nIhh}ȏ 0 - L\P+,_nR2gIP y| bZmD˾2o}G 6ETn҃}J.$ Ht\8`bo{p S?C&x0@$/5ַw;gMl;qG7o~3^W/{sðIFU'41&͋kɨ3!͑(w'Dar+p$uDD1)ܸ3>We4y*\ue?LJU͹p poE~ k뼪ˤץL}Hb&%bg?Y}X܇?8'̡-SC+5D`vM/e>d(脶EvYUދuh_y q8蠃7xĶo1ȺiG"yدq5㎛QG|;KQ{1:=," ,Xr?y`EAtD {?C~+q4T;@9 x}EU,E}'ͺ.>Ѩ2ޅ7YmhPFr>s5x9^iO`D C?\hMEbo>#=O2ˤ|=A^5"8_Ag+锹׿k-2q}/FaFF$/54-`PJ ̌x̡-a zmi%{f!0u.bB{$~:dv`UՌdՌ_y"Pm7n\O(6c9I4QhBlvpO\o~aBdmsMC/-. [M PN1jQrI'C{^uV`/<=|$ p:|8p衇v7!z(oS}[t% ?y#syZ,R )'P(VSc=آo—F6kNO_6\m| [JT6&}bH~+?hP˰Y{ Ҷ?uu;+%紋{U48k\CTGX}OW@';nh[)c,C?)y4A~C|_\qkq}C$ .B< OӞ4~ꪫ𲗽 g}v)iλn|3o>qx߈Ƨ?N7b%b'7xғcȭx[R*iƄL|# b( bZO@UؘO&L gڕr~y<& */TEƨCʰnyU1ysWQֿ,{0Qq/آW)=ϢEdj~{"<<43τ1]ts~9>?>=\'?}o\r%xEī,b\uU8G>;]w0/M"¾~ λbܫ5)&5I._!OC0ShL^šYLL{wڜe\>qZ$dkú HyݿFux˻O},g>ua]UgwY>ӄowJϷ1%O鴠,~Wg_f#z^"kwqxk^g=Y>N8~8.JcUZ"0c2bM#N $~xe*G[<. o6&dQ62 aR֔Y|7AbuH; Dxӟ{޸ pWoovƒ I'?}Jy/}|qFGSgHULͿ ¢X伞6 v=z3^ͿSjysm2<^9yЧИۆ:+ z){wYѵZͧO^c~(O,V2"bD}9䓑)~p; Iַe:lpl@2pa~Cٳ]f6il2}%HH =<=PTg6[̫ Oi45Aj.IV߻ W-"'.I\{9eʏfzߛ21M.0@],7ߟEIz"ʔP5,޻6)/U G|_xw/"b5/"^qI; ĽgCqZg_rXR1\v3!/,K&l$=U0 (qIHNWy< ڕ"/f+0y=/muJ1pz@@qu/'X_"Z46MѼUOo\+M:>j^":CDDl*F.c$ $GȆ[L~sQK3΄)efƆJΚPҵ:Fԍ@;YϾ.&375!z%[ngݑ&{?jҴl N΃J^ i'4M3!Ұ(HǜF|"Vc种sq|郇X5/H^""649`0&{W$'&S&q1kib`[:VKA`e-~AT!DJjݎABefyxϴ -xdhځ3r9CvM^Y 3߭oۋQZ5d70]@WÙ=mV+UY^j4!e՟kǨwW~YKDĦb$u`i[!LRK֑0F KаߪtkTyni NՓb=Sˆ(t Eb"Q*3e2B簘9ܿ40S>=13k5iB/e E.8r^8]?j_&.w/Y%"bS1d BA^%޻hoܿ~XTC~0Jde+`3\ko;tQ8N>d"Uܛ"Fܢz ݦ/J'%GOa;uk6L>g>~D\Y;Xz'MYC*HM#_BEҺ>Q<3<[i,KDĦb\5( @ dLC_"^KS@h0 Ȋe=6px҈1lg>.\` zVi8yS RٿPu]ꮛIڣg|hm51cuˢE(YVYEG;"(2jU7<Pw#& V~i̵w\B,?%D^L?05E6 " /#k. a<4HtqǕB_,eq]ם锤ec՝1]e< ]h4OԪ]M{/opӮv(I2^жE^l3Wmf'm3":CDDl*"e0VBȲ) !N`cT k 8{o\4ُfQciP y!j`1V?!kk375qMip[{6LgLknILT%1x IΟX: QD[ڳ4kxFDl*:#& #t0UBE[1dƊ(7eDn\iSFQ$Ԥ V^/ead| ՍVP,_^?l[s!ZԃJk"YսtNdj:"8w] ЕG6"bB$/yF?`6$v?(#3{G@0d` Ðu!p$rAe3<7YaX̭}L5?)/-GZ}&-V#,T>BJARoG!w¼"UV-uǷ1-(ZN%"bSk_Z]!/.,D^tsn`+q-]wQ `V'/ y ^+8XjP&EW@?.m-emlQTy$dG[wN\ЗY>[_pB @WR W_ȀNhP.S=x#DrDJ!] x9^iަKGBc#߉~Ecf MEV}RLMpD3@A`lQra6rA?K \l.vP9Vr˸8cX6ӱ![/;9S t 0JHQ.y ٝR 034h,2]A7*"C0rUch eA>i燋5-`Cy<tu战m,3DKDĦi ץ2|"~M!,od!!!GV%O+G@'ȒQ۬ U j'THU3+Z+az"UqvKA;rYimc义'߷KW%%K`mD'"yT4}襳mWs~ud|LoUMB%:NFt0qt8ݎUǵd1tC`fp3!S gvbC YJK^<5_&,Δ-БS>5a 7֍Si<׾ !P~H__kOS~fJH^""6Zxڸ"i6Ϋo~ּ۹{3yd} pF({mӨ.;20lGl`ʅ>+N҅8+WmzF<וm>M# 'N-$99&oZ;#i8|>Iƺ?&z?Tk㓖4iz q?1+"yT0@࿜8~2Q},:F߆ 䈊OZ@rސmɊi,&y R6sJ)$ljO85|о}SĥDky>SK-q2=>d $΅͟}lh'ch&Ϡ}|Z&UWXSR1 kMMW>qy! //WIyGT5кB3XM^9uE$/ B֨P_Du^uĴ9 "!v D K"X K@Y6}sSq?^#f$ bUH16 X ka`']B'ΕٵcR9Zd"?Si4hM!Fx O벆jޠrjjMb`r%bMEDl xaLiL?~ۇ#UoL:'wKJq` 02 Rc/ Fb9d*t%yU?^=Ny '(W>|UI>frf ӚP1nP]{U㨻_KO^y?qg߼1XDgME~ZdxE2I&uJkTl"f-T ۱h?7CRU 'ͅJx4<(ZA8%JQX`W.N^: WI:6U1S"U:mKt Q%"bS1¤!7P H&A6 B\2b"('<0> apF^\x]{֙h=]7 2g#j'9[+)v y1y} 5e W %*Ǜ켸H_8fvCS ҊZ@MS ގ3;?}{K\#" DDl*.˺@y\x+Y&HJY|&YU뛌?"P'\ S%G)b  amd%YkGD2gk_:㗌b+iLguDƉ1%7CYÌ^] UzN4Y,qQZk;KH39dEeVfW<~pKweW6%"bSS$a5zVF`PغגEԣ˚=6ک$$O )#r80}'H!"BxuЇ_UGko݈EZ/. _<(f1BSf9fЙxէAծ IDAT.R9_wj}SDtD {1x}2["B%;/bu!W~@1r,>~~|!|?Βw%`&pVȋtZ$XD@'{itbSb7*[5~価EѡRm͢7Nm<-T%.6ڬ5O IAE%Zx{QԼD'"yT{_;G J(VU_1+GBfj1[F6xҰ VG]j!) Ԣ$:@vGDl*$QKtZzgmhoŌ 7q/rД0wʶ9AGy3XH M1LS lcmatC3:74g Ds-If2KۋWx骉&Ke)1ͽh$;tqK4Z*OHA)E9_ %"CDKDĦB?p/Z.F3oV +ə|Іīf Čz3 5&[d~3؍L-jCW4%VT&0c[I+ Tp1oRB($;d+Z̪In`2"1XDEl+[Vu],kokH2#SEUv\T{ .`0p^& 1yጜ*k&R;0vFR,'0a|UM=)!I(ī~|"*I|IsRrbۢ6E_+X-"DDl*|"`IM{E{*v:yQ.RHCK^ @d\KF`|} /1v IyԼ~̾e^sqf_1M>&ePQڞs.O2C{^#"H^""6&uj})YH_|g>l 083̻'# c2RԎ3|,\v‰3袈u"p!MѦ@kWD/_iaI1#*֠zqBŬ=04_swˎ GD4@Ty$|υ%| &a@y5N/Qۺp2 , 1$uW;aF}QBFHEU<_M.CZ1O/v;.ל *,Iq}Yȟ)N^ra\KDD=EDD(*"za ob ; {]?>Q!rs.CL?=[V?q''0}}$uubd1ՏZXk(ӷku(?/׎V}\z392}&+Qc07m 1K؜< '\vU;<-4yd#gm~DG2jj޲!cLMyh B`Z1`rd%IZ(tQFl ?k!:U3# Gk2f]i/ c(\$9OZFb!qX`E/zٸ8j%"xPZ;ݩqFDDl*|{ W ?h[6忈'[0Uuh |} w&0NM X].&.LNoTV%]yO& 1'wEbG^М/Y Br|avMbB Ujlc+_FwiGu:Һ7M OxB̌={OpH^""6w\辷{_|7CE1X5ٷj1YU^,IDR0%f͌̊e㈋ܳ3L#f6g2g# Aڃ4:|zeHY٪Lx*z d-EC/ЃT|;q~^FzB#""Z}6%/'*>iev:VK-^^^C?7߷vw;Јށ8""6D~)2DY iCU/ZGCoy,Z`Sρ-B !c X+gXӤh * BdŤM&!6 î7. ZOx!Yw>2Ęw`M/?CZqIF!c!b>loon?qG3 <^Nn mxԣ~DKDĦb^AC4&i ݟ؁BA[?O_.ȋ̫hliu eyo `0;CH2nR 6[SsBDscT,7 Qۉ}B951"$86B( IdE=dcEw޽{4Žw!g?]w!~|+q9,k=B6 "SQdۉrƱlT}C&5T'TyC$pS'h,q;d2c׺J? i&th lm^STP5C# $/\zLEd'eQlcn6?;)  "ӍyB:ۖA1fi*9JY='MRط9WOi]`Ͳ%FT-f& XMY!j -ƨכLba ZBuqb5Mse/>qaKE%"bS]4yʼّf֝6 ?m̪Yt.M=~REs=9}箐inViJm0x'Kl6Z$ȩJڗy <:!3xBH``Y)^`3nDDl*B^&pacf|0ļEBeZ04!56~^ႉm?W\L?kZL99]K#ޅ#9}-9 `:{YHw1X:٥L6+Ɗ4/"M?Qj^yy>q^7Дċ$ }`,i]S1DfH@ky Q\Qwo-ky)131B\rzS(rc d˚go! HhQ#|~ⓛ.N.Vi"""A$/ MQ6$y 6nM`|~]ӆleЮ;n\Y4/Z[Bni9]5 &&OeXx&ו`tj'Ih.}D$/ ~AYQ/$2:fkXYmL4g$P?BT佮Vb;KTTș1@ DfYXץ :B&5(.Q*+(f@O1+"ydh#?wra=gG-b|^6Q4/DIeH1KD0MZ ]^W@)J~ M_: M?)) E"6wˢD3# Rys::аqSC%"b3E]ȋ6{[Z/qM^c4#t($n5~>Q1*ms9ri`nǦʋgx:/k.#"" ZWOZK ;C32V) Ot~:fOymX;?vUsc1@6[ZY<L?PW1$7Xnpr@.DDtytp*_32|͌LŠY9н%e=~]ƺ)lc@DJ#k8ϺO]@~fle5E$/ > a'!;fyʶ%fǬCtG:lχAZgbƈcN 1ZU ;f&dL,u(S$0>fd\H^""C X.rݻ{;p/ˑy{p{ vG??h09?׼D&KF7pkSo FnٳGqyG?^wSW/~oQ1?!B@=53?sE,2p>H~b'7I8 SV3 62}Tgd`P"(UE(dsbB^FbANT yDD99u}w?A—e;1;0^¥^җ>c새"E;-y b(N뚐mxzWIށu#Ӷw[(Z5]RYnk&0&H.|fC 1CYt$~ؙ^xc^"!0Ywb""O;lGD? v]imo{[lmmpޙkۿ]<hHQ"Y2u zmnޤ%~nd*RUv1(B'm3Od u 2Q5Nи$\,pjcZ b`з1x"Pl"6Bz}^@ XSDd<)OAg=Yn {O} {.ꫯ,{GbF.Zje-:Q7%5V]LY e- ő"c.|@b!sc`曤:㟇&Z@4,"j^""c9]v.w I\p}_8&onQ_xy^{?imlEZm+!MLeeEߍ$ gB<#R~ZxؿTФp^hB` u#$WE*#ɈXSDd|k_޽{qqϰg||F0j B֛i4iu^#&$gv JE=# PNx,%d7E#5E$/Kƹ c >cǎO|qAnƉoFxS? %Brw6~.菳/F)J?=)['xP2ql_%K'd%Q#GB!q}x}rrdS8`>v^ p-w9p녰0w"~?=%!|ƴ?n`qwr|t`*R;ѷ_{ȉu 0pX|%bMED, C=7SZOySwwH'|2wଳkpQGe/{Yd! J"˺c&@W@}klP}; m]K}2|gj)HB?3k˶ЖBg2Y2-,IL?E69,곍]aϏ"CDD,Gqկ[n]_~8>`r!x{["/_|1x,@g^Ԯ MhN[1@),M]FFOvT +Mpdg` V$}sH/Jt @D)"yX29vi8Sg?O|o}[q_.B< OӞ4~ꪫ𲗽 g}6q{Lܥӵ8BPf|]IXcekHg!/ިy}ޒ@`3@$/w{K8wHўh_S&70&ő1!A>;3ĸ/%:F"1l,"bKW0_ IDATW]uqG3 _¼ <-]toYg??S"&(]q ExU(gδ> D-פRBCE*'5ޔk- ˌLyd!jiぁML0/JO,~B>)PIݦMۇ M aՇϏac! go|H]W#E*݋+V؍bHtzuEbXDĦ*TgB_& Əhs5fj(m% $>|r}":i&T<%&7Lh% A<;V {s &' ~6EZ/}̸W7&0'2#"fE$/ B}_5 BvwaH>4}uu%m` YkY#OTB&,nP2kD<&z2' }_%m,}C㞘 f\>EKDĦsBa)+F& p-z*o_9O}I ЊAFʊ=*-#!0. 9V6<0& Rgs?u۷Ĩw^yގc~>1*9@o VF%"bSS€2hCM{_PW+kaƚA$}61YQuA϶:1Ckz>*"Y,cb39OH`ʡts=8Qϴbk`[E$D3OlLkcxK.\59S3;Jmg62K<-#:Vq. -^Tj9"×б|.&O=&΃*ʀټ9~r}-hIB -%"CDKDĦC<:JRGbƪ,ɴEaO'&liQ9,7e]DiҢZ=".#W.N,Y}0^z!Dÿ'-BߦeDχQH^""6|* #o pYWeL>xMF[(^ :ҳż%AR:`NZef+~f%#.a~vM֘\g{|`mr N Л_D)"yThC&FKWMX(uEgMWP1{ֹ ݗk|d9- $HeO.m%{{UVَ_t5^d&"U:el T@!oxY Z0B 'Gk@A\8+bd)T]ʪkQ %bM#"60}BlP3{(IƄDT#pAkV"I(F(QA F2 x` ~B\.= ` REPd(FClcaa'nn܌ݸ td%%+ƘrN>)xؽ{7=P<OӹO?b}=/ $}Le'5z& lDϨTǕL9U% ?FC-Ѵ7(/ZO^!{ȼ] gua`"#@MJ9(p0E{GҌ U˴~[!F gd"˜(uX.27qek(ދXDDl*b/_P\Rů$&!Y9AtxU㖱PE~L|iW&CJ^<6YjdBkӊP#㌴Eg#+@HQFb#0={8g:y{991x-uY'>SO=F1l,"bS?a9tWM+PUŸj=/GPQKk1/#ۘ{ rC p|{˭,E8)_|42y#E4,z/Śɶ l{3ܲ6&`f07B}W<11G?[[[G>Ҹ@DDl*~D,Iu 2P񡢚=#0Q(|, , ?J/]}]7i!x~yO^1}FE4MA6|^r^!v۟ S<-hOO(V_Mα O?t?ƞ={p'/~1;j=y;wnw[=bA$/ (. Ut 1"AXw_PՀl*dIP䲊mN|-mXur}NÌ$u'e mdheUwjJ6DFHPA\L͏6v>N9p7~d_}~|M M>#Lt>?gP19׮O<z*9/ĥ^E-"yTX>fC]@?&Yz˸P~_%_OIˢY.o`:@ALe$_Bdn.9ch߲"fY2:8GJ@j pAdL-9\kK D$CVWd L 0H5qRH[1mw|s~c޽堃xnᆩ"6DDl* \/UBd_hӧ8|W""ڋ1 B /j?N;>׍%tZWz! q>Y_}5[h18p9{ZC3X!ZրaAYAbqB$B ElrDLMa-mh^r[|lזjc=zԣwuY3%"bS_{\^ig7T}Q}HlD/ *?+2X;I<ЇN;mYÍ "yTȓ^]᧱lC &'Zw1 1X5z`H ufը=Z %%Ŀsl ,؎A)#y]fu ICH r2є<7}pZGH Q;F$}lcg}6v~n{&.c/;qG3)*^xxC>xSk}sw^<]DDDl*IZz`'.B^0ynΧ"&r~&=}*͔hz2& HzE\ M2Ox^R" )Lf՞%n8TF#6lcn0ŢZ s >ࢋ.¾}p;r ;R4MaŽ{K.^"u~ǭ O ^ IP`Z\oژ 0D _#6kw;v,59gu1B"Ɂ7i1lݘL^NF?&Onz %H%,"LHER!sG=JhGDH^""6u5{?BhEટ0WƇ,~e*#Ao qEpſ7{a{".0ʦB(,e!Y`LG>M%٩z dRm`l|;V5] ͋n:1|:x.}D @hLVO}\pu0|cTηE/+7kE߂Фՠmہ> m @t"Cl-lFiE$qHd<3ω$6лX;p3v60FgW6L \Zt i>AB Q0<>L2t.,ЏbeQ&rO ƚ{UtxQ̖rbB8FfmBV/q(ȐM kVJ&lL\y!0, 1U5E$/ ?O\_˺dc&P}Kahe2WR!ڇmៃ&cˡe+LoKk\ج^ ? r阦mgp#heLṢp*"B!Mo崵Z<;n~fI2ye2_0B:>@6J{|*'QmdFIMx'^=3D!R꿇*v\U?8_랝'Wݯbg!x ; nI!u_[B) !]ҞrB‘xNV׷!.`nŎ",z곍Q 1XDwMb|XBt;U6Uo!$GDڀu \O1\-:}\DI_ʐ'__7Xu>_By6E,.+Cs =oÀR x!X:öDR脼%R>L/7OD)"y5//Be t?!r1%XbjhOej̋OrB-*[8EfUz!A RXmA/JN2&%k}Wҕt$ 0&h=1+"y_=.c Pe#|&vΉ9|qLˆ&"R2Y<50uEe`wdabCrE.EHmQ ŀMIO&0_Tb`sbb| "yXS[* -@QA˾l8OQ}Y胫{>Fyζ?z bx,4;+cDd 윲@ Ls]Cœ%EuX 刋BHD3-%isr[qʒ-lcnN+-;p+xaؖӴ ,a 6!Aڟ│.DDtyTgFoc42x< ^dD/!c@^4?`j^|"}(yf\Qg_!Y. sAJ!c{N:ωQ iim,dD)"yT0wFh({ ;fFroaZm>-2X8]V[]`1kN/o,]l/<%)&) KՉadT~İ fq\=&{79Ћl]c%X/KĚ" UO,#'bXi*g$"_B{FD ~c_{v:-(-` lr92\{r8D[&;h\KjXj{c0&VՆθ:/I^f+5EOAc"/,%uL ZXY1*:\ h_3!(q{JC`1,ƐdvlBָ1e=G.yZ=/qJH y{c6 y\qLo`ⰱxmjċAH#"^I> 2(-\禕 Ey)tIP&IM(_-CkK2> a蘕ئЪ ߘL sbaSi]siL$CAċ 41m`[[MSqr-ŕ56^0'qjM"÷mddVq `eԉ<Ĺ&&9!}{ɒyLY?w640/x%&as/ۇIEf4c^pl| KBb\Xy_Rx^Eċ !e^bL1:6;u'Fx_܆.'mtOf11gO V+A&YaBԗQ /ӝ߲-V볠@7FE00LV叧 6&MR:K TtѠAeAEwpN6e⤷hTuq?SOoTI Dċ 4)z[=]҂) B6 PG/UNRmLhPDB{^쁉{Db=L'x\771yPqy"F@yLy}0  INPy4wͱ)$x9Xj]ʅU@2QAC`b_J>f*l?=EA\ )&71MBjcЄ(X?!6,֨ Y.\6I' h;^B(4P~GRUy] flC\סY#LlFoWs~ƭtWk<>Eu$bqdg2lW۸U6f@5^^0$"@qZQjc0ߓjc!AhRn$.Qo7r`0=/p9rvթi V$}bNF֍UyBi5mp-zU 6Z3}eʠ @pu(6|cUz4> ]dɓoYaFċ 4)~PE3e2XH( ,X~^dLmsh UvGD%{<8)^~H~qd5IZ:QiWyIT 9hJ,vUƠB P~-L9Jmt+PG$EhPDB2$KDRx{?2ɱx!ut'O uRh\Jc1 _2<LyfԎXğqNbv?\6F꾋< D^Bmo|,L1ג{ QȘM,I .CAċ 4))CQ 5ΟUaek$t QhZTvv$si`œ%\]`>M/ihm3BGC9_(P淄j.OE6ZF-c) QPXEHVEA\8~XQXUGlIjjXQEoϋ 4("^I˞Mg/ AL: myzf2Q8Z%{N6Aq2x_9 :1B%c04bPl.ÙSD[N$\!$L\P5AMX1*HyhF5҄}v01 (5б=/q pǨ~,} d^L9( .YdcU5⡇[n駟歷bԨQva\}~}n;sL˿pM7 BJ"MJ~~8*{ta&PCƔP; GIɭO_IVXz?߸`NELSケw6"}ktXGظG$)aS=8N|r-lڴ+ޛ5kp5p衇?}ݷmR=N;4f )Dċ 4)/PC`2O-J9,:j#!SyPȔH^HNNVf"lxm/LcύT2(W:CϩMRêD0"qXQ (bbkP̚n &,;Ø2e /W00zhf̘1f AhR /6$)Ҋ} w40*q>Jwrae(\yɄcEI3c'?ob̉0P|%t j˫IN0r 0_30T3e$apηA U0Xe 8@uQaM`)hӚ ѷde^E pDFE5>6hL9 јr0ydƍǚ5k^rh/ФT ^a1p$N[ P({?}k⁉0 >BRx_P(~^;UHTh@gUT\\l J'e d&,oqE%.z_>/.w&?|mժU]ߜg}ѣGŞ{gͷ-l[RmLYo#j E FA=1bQ$ HGr}ÒAIz\j{]ځGaW!o Uy[D!b .3բ0eX[E90U3%:hech:iM G]ⰱoRPm\e̙˼K}\s5L:~0opz2@JlnnqqDNK?˰[x48p AhRFf-2Kmrz{%`QlX<(U*R<7moEEƦ'aXpm3"@VBK(d !k_F9X`2 w4e(+nJt4qؗ/#*H7xLݖTIYu]Ǐ~#8 V\Y\7f>^{OӟO>vۍm۶siq!y4 Px({q:9To޸Q *l4 #g ňG97Iƙй-9iόA7.0$Dݘ1OAw͸w<;֖Ruja恲  `|}Υ.&.0Zq@TQLG51vusʘx/ffM3gG}֤Iغu+^z)֭q{o~o~sDAHR*Yۈa`=qeˁL Z! cJ'ϴg= T:f(`\ BLʨe%0ak}ݥ=W˒/5&m$K+t xdrJJ5|9T =v!G7,EKR.^ #Ҹ n&,/+ O/qKd(0dRҌA!/d̙<Rnv=\/s 7 /p_q]]]yttt0w\ƌÏ~#f͚3);@VlTZH 0t,~ 6B!WM%Wo+#mJ4x@' S >*0x.) mWJ~"%XQG$?]ԧژ /PC=Pyn6|c<6Gus#`֭\uU\|L6 [n?<:c=ꪫ9XE;sp3g]v/rŰ1w 9 {XdhG\@ utb6fqؙh{FUc+7hm^3:Lj3 Lwâ61uLdheaBC9c[uf #L>/°!Aa\UV_Β\iӦjժXz588Y>24dOUpg6 T6υˇuyu$M< 0聩r_U0nCRׂ07`0y 0OJ!O_XQCRbm߿0!e\9G؊&R(, d蠵X,O#4AC!xfҤI,ZpBN:SN9 /r!l޼{w?JcP_^]-~{{/YWbj[Qgč6 Px>tFdJ"FiNj}օ *~`:ohgxU`256z)L(6gm|T& G'Q,;E >]0&HfИHؘ Ԙ7Xn}{L:6=X9|?\~|e}ymƜ9sM*_xyg6( I*bGTOldt!eq3U1kF&@KVilciAa Z, :'dB,nMY0*Nf~H8pRqdf2KG?Q̙SrKj|^BI*Xb00*`-:FOECV3ZF!^횈9-eYסA:'_妔qE2D/S ^# E6DBbqRGX0;V#˶e%6qXxhnkgF@jSZ'V?y,fӵCYdZ,'TZ69xMЕѕRˊku8q?|''lac1u:3͌wOxyqgahaA@R1%TZiPpFAxhvdńLwL To-B*4|((e@)mȸ.lVTqVpdZ,:-*G0d.(MK ES[d)&;§t:krCGr^Dċ 4)9`Q  h34ьshnXCnL{}rҥu!#l )N7}4#d2Q|ip|Y}L-aSql''`)L%0X9 (TVvdl%@p9K&ބ$|W9aU1s"5gPAiK!a]Bc"EƛP7ИvN410?σB ]lz dIV>B "0 VT Rhe0ʏ.h+kQ*]%yZ.p) v(,:j8ŀ SV MХ ܴ|y2DBhi~(^0EKVB!l)+ߎ(5IΜ6@ei2AUt08 A+}#ge 9+_yS dQXA9lmvaEj3Ġ0lwlml|y/Фx2.`Srkw'5^; 1Qڋ.MIW`adxJe]rqJ,'gwaP8˨V|mTX5L-m _llVɫ >a9R0x9/K TN}1"MjL4@+eӡ[pCF[ .ãΰU=D6Xc٦[qzz(_u:toe+y녝y8:7K[];Їɻ'FLbD(Zm9<+C`9N takG:[[G1^Z^W&I˿ AjLZi0&cxd5f%r(z[\;G>JgK;]1NK)h4t<7Q.Yo͖m6~a3Br^Dċ 4)"^aL 0[<̺AFwQ-e5NK0E( ΒZli4f,GM+h/ØW7ikaͶB&h$.ϋxtEċ 4)p)0ކ FnFt7AAw]|Ϡ7óQF|wGO(y]Zh˱au;bøֶ#@;e g?U=u7뉕 ~˘0mɯ+^'xqX b /ФeύD# i\#!d xahjGy] lTK!m:lԑeK{+L;eG}QF o`/ثG`tx&0 xmwbB l$" QJz!#л +šb*Z`ie[뎬'L{}' NAP1 aS K+j1Y BCG-l-Y.MA_jc°!AhR䞚 cgn&aV :荴5x݂ 8T,@Ehǣ,*c@ٲ 6otuƈEAhVk ͇1q4YSa`|qq6Z#0x/ krɡâ@-c1iÐG91}a 0y.]#p6#EhLDBbY@f`@ 2dn|+CbUB餅Ơؑ hdU}< \0> %EDċ 4)-|~RoKF# i<24r 0K`U\:~8aAooP؊ES V%KU;쮛 S^F^l޼|;ylڴ}ݗkO|nr饗ϒf9iFr!Mx&e|+=7h34bД6~cJ'dlgkˠK"tQ`464cBvtՎAYCF6l'̋/_{ 7 'C=ĬYz^b֬YtAylܸo}[y䑼 d<ވx&epHgH4Иv#Cl0N*Vحm(q1`3b03-L1i!Y3FӺYb ,s~8ӦM6>O>$o&'|. e  0uQ\wuL2sr=C1s7|W^yݟ'f̘w6nȥ^ʨQxzT0  ]wٳw 'q @~i%}C<r)\p~<#"\CDByf1ydZ[[G?ʲemk֬rhy*]`/---L2~;C=g>LB&a|gjm~9u]d2}_WwZkf͚c]^bZ늏kצ$>(G}4;l}هy敌IsN׺%v 5owyN~i>OY|9Zm: /_ζmذa ,`v)Ӆ4aAh 0f2cǎ57>9SmGy'0'N4w9cR⺴O>pBk/lfv+(慤JOgᬳ* F[#M*X~=&M<@\qX~=cǎnv9˗eƍE]s=;\./~ fϞ f8Ȍ3*Icǎ.#`ر^r!z##acD?xYI3Ǐ`ƍ=mܸp_E!6O2ߟ> pGsnl~7{{Alڴ|>:˙8q"Gy$+W?~`&MĢEJ/\N:im+O~ 7Ygc}m.ÓO>ɸq8qblG>Š+J˗/gv0+V3H[<#|@^tiK栃JI6l)¨QJ֥nAjH4 0 yfܸqf6vq,_ަcYdYd׾fRꫯ6K,1<@qnR .0˗//6$s1J)3{lrJ?Xzu*m>̕W^i>O%K;(M7ݔJ{cʔ)=Ts9|7K.5O<ncj}sǚ &_3W\q,|k_K1?όR<#קnAjAh26olկ'\.gf̘QlRŇֺz=(`3}tf>%]G3gؙ|Ob7h>я1c˲'?Is}{IeLho?nl6&M2gqTm6s%]vd2|\{=ƥ2 ;_ٸqc]m;sc=]WW> k֬>At EAছnbʕ,_3}:Ypa^z%6ms=Ǯ YXn]vKsgwǎ;iƲe'>1d;__/̍7QGPIDATE&0pId~;y9蠃8?!^x!cƌ)?׭[E]ěon6AF=N_d;X޲,ƍc`x9c9;y睱,իWjׯ/KίeY@A/ {7Ǐ|ڵ˓ aÆ8۶˓lݺ_/^L{{;Q |m{c=v~ B}1AWfΜ?-b]v`ŋ#Bό8Zd=ӯ-]]]hK_uqLBPq?g͚+s=Z[[9KA9" oc9qƱ`.]ʂ z뮻hkk裏3]vvX1Y?r)0o<{ogVXگ-{,7|3ssW^y%'N,IŸ4iǏgѢE>r9ve&O &}g?SN?SLo>G%Ajx^As*O_իWs 'p饗r'̝;?K.N8RJv'G}c=.%z뭼uQ̘1_Š+8cַ1ҥK馛˫NwAj2Ci_, M*;<^u), yAA!"  A AA!ϋ    AAA/   4"^AAAhD  xAA!"  BC EAA@ċ    AAA/   4"^AAAhD  xAA!"  BC EAA@ċ    AAA/   4"^AAAhD  .XrIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/original/graph_9_ex1_hot.png000066400000000000000000002301761153663664300265300ustar00rootroot00000000000000PNG  IHDR/gQlsBIT|d pHYsaa?i IDATxwxǿ{BBEE%^@H`E@"MQ,`C*WPz**AD@DbP!(HPAg<<{;ewygVb1AAAAAA联   )/AAAR^  AAHy!  "BAAD   @@ AAA   )/AAAR^  AAHy!  "BAAD   @@ AAA   )/AAAR^  AAHy!  "BAAD   @@ AAA   )/AAAR^  AAHy!  "BAAD   @@ AAA   )/ &  aĉ^u֡u֨X"B5ϟ&M %%Pwq ++ kX:"|8FMÿe׶H: t߾}IJӧBoߎ'x]tQvm :N^`\}ըR RRRÇĉQa7| :uꄴ4TPXprP%//Æ #_sA}8󐜜z7o-ZRJP4iG=q~iԯ_)))HJJ矏nk׮;i$sAbb"ѢE L0AWݻ\$N:۱RSS#dڵ Å^dwy۷o]۷Gzz:QR%4l>2QR%/_]t C̽k.tHIIAF߻w/ztTP7ĉu3/puסrʨT:lٲEG.]૯Qryft (_<D=/۷G*U-[>#7 :HMMEժUqu> P(Ç .5k;Dݺu * ''FBqqqZueϞ=q|m݆o6*߹s'Fu"99j#<'OF]cYDV hYеkW$&&>VX^xs5kUbСx?p8rM/ć~N:{dff}݇M6k׮P̙Çcƍ;wnDW^y=TnݺJ*X`EaҥHJJ_E~~>233q=`>}:nFL:䑕˗cŊӧOxO*U}$I1ß:u m۶ř3gpԩS:u*$$$; gG6mׯ Xp!N|=zt8|^0sL4n @JJ rJ^:W_ŀPV-ժUÇcaG5Ol?#nv؁ŋcϞ=QF8vO t իWǏ??k֬%\LWͱch]vŞ={{a>}:n(yz)|ڵ+n喰i̺upԩSر#ԩӧOǂ f͚r_uHJJBΝ?[nŤIk p֔pܸqhӦ ڵkP(7^âEaTT)f?B̘1p]e"ߋ_={bx0o<,^Xs(,,D.]Pre̛7/28I&Y}eAAv$IbQL$Ib]tQoL$6qİ߱cX*UXJJ [~}D> $u]vچd5HXݛI;͎?/|Q_N&I{G"­]%%%4oNKKc;v숸ԩS,++[F[~=KNNf۷=#L$hѢ<=zT8߿:u*ԩL$Fڋ{aРA~)$]wu}a$gy&O>a wвe˘$I, 9sD>|8$92?77/_-[,׮],==5h@\F믿J*.ٳ'0 BF4i$s=v$M<9K/e5jԈwZn$Ib͚5cgTy9e&I[zuV]۷oW_$IbJY$Inݺ2eE'N`,!!>*eņʆn& XBB9sf8H_vw_TǏg+Wf*T`OQ^̤cEyy饗mذIڵk;2ٳ%$$:uDKف8p`d'P(i۶-$)Ba+Wl۶-z&Ikٲe|egg *; z1c$=1֯_%$$]vi;y$KIIaժUc'O:߿\ރ /wΫLYBB;vc￟I/^3OfHOOgmڴBʕى'S^zɓ'Yrr2;sYqqqT;ڮ\s5Q$IbzkoƍL$֯_?a|?8$mٲES&3y|L#Q~׭[7*3gXJJ kҤI,!!mVرc$Ilܹa?YyYdf~yn$IbÆ 7L$-ke$UVg)S1I>裰gAXƈ2?^󐐐5jcǎxGвeKk @6m%''yXhmۆl2Mgf34j/uuK.B s]vӣiժƌ/v|I͚5/9r*T-[ȑ#—mHOOGvd\q曑+F еkWh8sum۶QFM6kEѨQ#$$$oP^ko۶ 'NW_e]Go`ӦMѣG9يoSO=u~Ϟ=())w}ƍxѹsgtyyy e֬Y;v,6n܈#GD=(**y{!;;˗&##woqI4kLT˖-1gΜr{_͚5 b\g֭[m+T3G95kDζ_BZZZ+ 􈼭_%%%8~0o;w }aIN:1c`ڴioD'ioZhzcشiZhqNo[}UHy!4yyyspQx)*w:v9 #JժU$IB*U"0ɿ&_oW>Ddɝ]_TTVy$IŸ?k, >'O|nݺ_ ?Vƌ_|/"$IB^^^y啘 r*Uf<䓘;w.ϟC'W٩J#XO2E5MI8ۡ]d yuȑ#u /C5puסVZHIIc /p2{A]Ɋ|2jVƷw:?~Mm^|t7-ܓz곈 B AD[_mG2n#s-c8zhDJD[rT?,ڴiӨԨPF#GbO1aL0G{wơCzj̚5 ܹSS&SvmL<1lٲK.ū_8s0pp[Nkaw۔ot]|8qX`^}Ur-(,, oX!̙3>|8233iӦG f9rDx^ d^}Us=1G]vcC8jc޼y#kizۛn/> U2ADˣΝ8qk׮Ejj*֭OHH0=3XaŊQ~7nF钫۷o_1 5mA+oSL d)"sAzeoBϞ=/ƢEо}{ݻ7ۧIz| ӪX"ׯo?f<]vvZV˖-MBljj*yINNF˖-1b+())yq1l2Jزen콠z|Xn]̧~j(>3!5ԙ3y+m56m Il_6mΉ񺒟j'caYDf LұcGTRƍX ׿p#b=AZZ83g8Faw})3!54if͚a={0YH3y۷/9 :۷o:_\\B9sEAAV^1c|Wu'<uUV-\}غu+ƎqnܹXh֭\],"AbŊ7n\xbAAj֬UV>å^ejpWcÆ nZ5+4m 6DAARSS1w\l߾۷GᲲ_]RJXh6oތ\srrb 4mmڴ0}t:u 'N޳gׯpn!IbͨX"VjXv-&NUVGqQlڴ k֬[oW\ +D5p1̛7{ŋ/W^(..F^^.cժUXfM{(ZZ CVJ*fBrr2{bŊxp%ছnBzz:d1z5 +WĨQzjb߾}>}:cx뭷6P#)) 3g_VZ]vhذ!$I?+W")))̎3|q饗")) _5Ν̘ JIIw܁cǢqƸqI̞=UTAFFQo|=> 2+WD&M?`̙馛0gBwfCZL:ܹ3ZjM")) {ŪUsΈ5߿1؟ɞ~iֺukʕ+ǪTٌ3"7nС Xbb"KIIa_~95jj(ك>7n*Uʕ+j֬ɺt6n(fRJ,11eee^zE}СClРA좋.bIIIZjClڵQqjՏ޽{?֭˒Yrr2S-[z֭RRRXbb"ـ/L;m'xժU%&&Zj~_~EXZDP(O?=zjժT֬Y36wwyﲨJV{.}aO T233-bhs3yܶmׯ]6+_jBl2# pZO>f޼yС&M=zJ*?XB  1gFq뭷Э[7C  ܅B>櫯B:u_~;/6&O5%˸񻅂u( IDATZ>^G8SM؇>6z2|!SB>YfZZСCh5 A$U SBq6hh'fGμl7ҵX3/_qQψdrVOOZuZђٯ.\#d^pVpC9".VpvEg`D| f߁c;.c[ ?(p%>y\wӿ/9*=ʋJgU\^/:QxW[p|fBe\ 95.K gWrxᛕeNr"Z06F>_~xwq1$&&z) 6 {EFFFu$Z4֙赝30 dž&Vr+ @Bk2@=ϯDkY$I`촃'AΝ;ɓ1cF̙3>}:4i"T\d$Q 8s!iTf7Vy7[OXvu[2ϯ89l | 7܀| 8'N@ff&^{5|Xx!53pvR>jӋW+U Ҹݯ@:RPYlz۱(>F<{# m0ed*~@%AR^̞=?رcܹsy6:|);i93uISjlu^"b,8ZIGvEc5̚9(ݮ /g(Z0y!8D$p5v>87m`>y. 8]7ڃ>9gÚc_ּA3/ADkdK~F/G}—o qz^n^p M?zzͼ 4qjX0{)3Al-CjPS6rSf*d121Aůe{mHi1ͼSJ,p};71~,ukGDk9?ni5NYoevWYqNٯ Qa R^"N)Q٩U`).2A b6ϳ6j~b{*-"ncHkJk).vVO~}@9m|~+g4R~k:4Be >zAڮPͼSҸS趴nK=;fʙ9l-N"BqEoDن؎Y,NtPT-h ul9b/J-J gpv%$hiűԆr.VBВŬ[PN:e*qr9=sƨ[rss A) 2z#oE65B1΋Mx}dQ|J81S^VژOr}?d6Fm IСږFǬq[4n—3=NCY ?6ncc A)!gJ$߱;Sŷv%/_'FpѬm,yge*A"BqҶZdd hM%IO$WʃY%p'ZZ  `&A4w&BF@X]|bd#禃dź?\F/FAA233jժSNشiS8LQQy\~PRRRиqc曺r4aB(bl?C3/pKovlɫ6*qa3@{02ST{M#2e1kI"%Ƿ?/@[ePye @μ[8z( u뢨Æ C-f4h7n|}y(W&O㧟~°at ###?xS{,Ůtb݊%JZ=KsԖn HOOkժ233/cܸqhժv؁p|xO"111fZ5…^h{@(A1]J"EF>~ otu1׹.2NĀ Qf=.~YO4b3hx222"@ʕ# 8t萮1h8sX[X^vN+.~){"mp!c֭ؿ?6lnҥ瞫+f͚\rQn6ܹq @fc5Er픵di=nUeD2Ԃ$7׃ 3$nqiiiixUCaa!^q6l7o+< 6mףvvfH%A!$@_oLG;J_QHn2^_.N+^Nj^'G*:cO>>}:̙k.\;vD1aS|WѧOݻf^"N [[.>Qg^卟-.k'@z13#it':;u^ @FvC{S`ԏ _7`L2ӦMSU\VXΝ;㦛nomZl`ݺu )/$(v*.NNۋS2Sq:_BXX2IOxXӊ)۴ZX?cn/sܽ{[t$RfРAx1~xr-0WF푗iӦYꘌ 2#8D$92ymNV: iD׼*hԞo^Bll 7x`.<oOfcc A)jEשy݋|8ʍU_\a݋y/4BR^"N;%"%Vg>^V:-į~hKUS%YH7;j}yQ)[$c#7yrvgCـ" g`F.e{߄L^3ERy7[߭6k-\}!bKAo5ЫtQ#砙Sd ?KT0VuNOn_dVk nG' ~IhKc"ncHޥyEEn3HQQ C?`Dq!|F2^>mLTb$uǠcĽhQYťW* Z;ZFhb$rݻ-e 9̻`B ALh>"n׎[Y!'R`2Ic!m9'9AĆSԾ\w~APvN^v#RZlFg_vi Lh1S$K!oɧ=)v6uu^ˬU *n9#Np}PA}8GG7=҂ A)!pYxD('U3#Ԛ 9 Ef#`nCGcQ,918 Lh1C$IB߲"7~},!x]ncq΂v`wncc A)!Dv8'gŏGDeIr/;ݦ~x-AS$ű)3HsYQf܀n$jMWvplQ yQ)CTZΜh1 $|H%DQpu{J^Ղf^`xA@пNbɋZQH+2+[>=6 2޽jAͼD"qG_֌v ޯ߻!bt)FGEfQ}?˒f^`BD"I DLϮ51z)kک*8]w~),G{~mev#f^"N12(()TEQ,~6kG4יK LHy!8Ee-9uee93gTgίe^7JFZBe-1e b$W LexK Lh1cs1b . kwG`9J:{g77ZkAs=ŴBMX4n΢g5YGA3/(tg^}Q2eDPA=f h}VXi;YF?7ۑ?4Bm Ip?ξ,KG^P툃︊6{un:jQZXXl^VQ--/pKyуky*W;c2FMb9 幙v`Oncc A)JE%h3/1Rkt&HO޴MÖ́+V<^ԽxԻS}=D )/=/P#/XRb ՅaԩCI1"Bqh_ M"V4|?. m,ԩ9.75D@ Lh1SB^/=&+ „8' r 2 5mη5=qLAu^̗6MoA f^"NIPξ4ֺw"!v0 Zގ(>z7xY3myH 6Fq$Ixr~,%Dt^SӃd#VՅa=Zme?ߴ4Bq<Ӣ_Kyin˦&A؉vFmRjD'IDW-u?7S9ً@dE&E->RIR^"N^(^vﲆZ,=e\ۦ4s%TD0 B t""wы%x@XIoAӧOJرcT4k -;;BqV'A_v!s<_Ype{et8Q['8y뭷pQ 2K.k;vEزeK8ĉѻwol .C=#:uꄩSbĈ裏PV-o˖-3QF!1C$IcjczL:Ԯ1jc~v?nlVvħkoGxUsH;;~41SI]fT~WG۷ٳ'ƍ3gΠVZhР,Y7|p :[lAvvjC0i$P\\lTT $f^"NV6:2VqQɣǽoZ UEAt]g6##b㨱vu3,ٲ2&8|80_uDD! PyJ/?7cݨ3ޫ63*rJf~y外?~iLtb^z cƌA^_y啨Y&}ɓ':v쨙Ν;ɓ1cF̙3>}:4i `@fc/[Ț9.ų"3 ~(;V2#hNF66)+s*;$TkO^m !"NwKsxеkW4nk׮ \2ի9}}݇|1b5 yqXt)* 7܀| 8'N@ff&^{5|Xx%>RIq$I/ 3Qj*/jq]1FB'%y b9?u͢S^x`򗟟+W 󝗗KO<Fw}5jw:t(ʕk}ĉ;lٲb̙8vrrr0l0\{R^/^z ֭þ}p9UVxL4 cԨQz!C$IxLhQGUEw<*0^<*zYpXA4<}6 ?(/#2#x뭷pQ 2uEQQ -Z`͚5hР#K}E1flܸO<݋~[3 C~Kf| Wo$Qx7_%^7qV!2R3|Q>DD͌68x0 ͼHOO۷o233ѳgO7gΜAZРA,Y$n:t(lقla$YDKGmbvc(.~}P{1ǎU'A)753W"K{G3/cncHKKCQQ`ڵؿ?np={|ᇚi$ ~Rg_vbgKjaa)eE鞏qފ )vlw@v/\.Uq(^5'#1:ùtN;P# 1 [nk^+gee!555|^XRzT)13>&]Lc$Y^n;Qy+ع [(2`xʇSm#Ri2̘)gɬyR2`B AӧOHKK? 8x jժQT" hwX3So~vzt<ܼ IDAT6 M\nuc&ޟNك:TA LHy!a_~ذa̙s=זx /w)=ϿJ d\!G^1j)ܙƥ#c_·sG"JYzyTWJ_=_z| o_ .^Ix^R}a.KG^qy#?8aڜ.I1?x L6 rKر{~z\qTP:u $IxVv5]`_oN.RT~-ʷ_6gp =ްA"E^ 8RZO8WfA4h^u7.BqZuݻwQkab!/50W(.;_bVT;Cw}p}_|F}~)D;f-$DH}E2źN΋N2Med:#Z #Bmg7?DPg(?L]ct2ߠԣ Lh Ax@~~>V\) ҥK'OQFC5лwo :ʩ=H^5.fպ^k޴\L3ln(KQJ\7דڳ|~X`i D"Iٗc?)0z+_`|Yۉz{;y)1nԡZCyi`B8D4_VPEMN+ UySR`4V̘OQͪN[e1`-ABqr-HycdכQv.x1"]2;+^.#"HVD85`DIv3^ @"N)^ (ʩ8veUJYPe6r܌ 23>652;{,eӎYF>XЂ}1h yT|MFm&Q/SQS</ _"YY{bǵBR^"NI@;Lbx)DybYU\-cv:d13c=m+Z$HٷqJҌg>nDC A)5-r1ZUZiAMq :n jٚU\wg\6S\fgSc xy! mzAqwMw11s4weq2{]j(.Yd.ku^S:>4Bm I0fcj&f0j2&L8(^>a+ >LJOռYnr ê秖sv`h11h l!L62ND_u :|-WlVw[~8h.3꙽}^K>8]Tz8$v!D4aRZ33) ΅ul>#y)tmg:5c'=e$\c$>(x)/D0! 5U^&j Uzy;YU&|9b yJ+tNc femrC\feH<Ϋ]Hy!k ;ڎԮ@X{dr,3Sz89h ┐ht"G!%j~AUZD. tZlYWkSFQv[ʙ79*#;֜?b=+\gVEr+wodv#8D$,QRSS^I15 84&2sZ'ѪC$j{zېԊ{ƪ;mp y!8%A۬R헰޴\5F:>j3.~ϣQZ3NEXfzy3M24286sͼS(/s"E_ L,̌{W鋨9ռkv;(ۊVKŎ4 fLDDF鞞?(Z0)/]AG;:dFf쬈#%:s"֚%VVep{T+{ٟ_ߢu d)/$Z Ei&\*F/z(3(=:G|'k+.ѭ]\JnA܁w+f5^1>VGXtVI_yt3ji&ij!2?8 c@3/D0! (v; A4%-մBԁ4*7 &,g7LMI0&jnc2wBYz@=Ϥ(&y=!ncHaO(Y >X'=;(_'ڸy'Ʈls"H͆yv>~e= `d?AA3/wD4y6RƩ9~^P~Ijj%Ȭ_cWZ-e*%eT~/$REP)o~X{o^_6ʵ2_^Hy!8dC* (; ";qQ߮ jf:ZC 8IٱҎD1S鈋73ʍm_g=Wi}S[x-ASx%$wվQj?fFV` ZgG9"أU^%whghZ۠P*t5V HΆȢ*+1ZN+.>^ A?_\eq]g2 q眒KetuQ_j:e|^+P) 6:eٚ-^&)BW+e|+v (**<\" aŊa/_P({O{ &KIIS$ۨ/ql_$ ^9"ۚdԛ2-g];NbUf/Bfe4m͂ed^${S ~vXOa&ڵZqi_Oe;wb<,\Y2W\q֮]c=B\{ Fe$lSB/aF־q+;rJYVĐQc%> ͛bŊ(,,3СC3gv튊8Æ ñsN\p#?? 6Da}С B#$FwHg#D,j#j3!|6 48`5_zMZXa2 ܁x2}!#.u/{Į*Zi߯vπjQ`:+}j2ހ0$I;`i揈oh m;x23mudQzc4qr4i<hyv$[QG32ʣy͵!zJ{Z+|'Af^"$ ?p~ʗqY9~>.=՛RQN>DF9z;UNige*H/jACVXQN3/s A)76F4jucWb5:j㯇X嫅^y|N7Xv^͌)@m4_ ~BK4/Vh=[q^>QAD#$ڦ؎t:1z2b!2Qצ"VdoJtY1r=Qx̫w~xA)/[uʝE7V""T3rj =gnى+]=$LO[Q҂֦9-Tb)-ϤA[-~E*BqJ!Rq u>x%FO: l>*jy;$Mwc3֖VYLr>ybȽ]Φi x˼sG-| N&@ A)!Q)(xV`I.8Emqi'LGnzۡ {dfrcl9(7Rڴ2# 6Fq$I7u viuF2^ˎxܞr:m=ʋ[2Fy:5FdD46"Y,q0Z揈oh 刺yD5#Vru7nڝ6np2Meg" 8?;eZ_o#v~ ]^zk Xh)-Frb sBqO|87FETߏ ]fn)R*J[2C';md1hqU]Ƿ_( )/ȝ#yneGHї,CK.UvŶ2T8C&][jmu+/V75eDt^tc8<ּ%(K 0*"*u(Tiׅ(|]i9t5q|"?''F:N99-#jDMCt5|Zu֡xf^P~H(ϗ zO ͼ= A9˜GUm AyN%Zp2->NƮ\??Zβ8VdJ3bՔ 3j]|Lo{~oMCk^BD"IVM9T3geX'J?7w*-ɇ؅~"*Q۷c]Dl,ye}w`u A2?YGMQqSiQ"iG4VF/虹FuvޔB"[$O173̴(DGbWꔩuP&ܜs"oZ^ʶ9b4.E5lAD#/O|ɵAy:%.0i7YBoX+<\zoB$`q!! lD@@g@vd@¾(#  #C@ e@JAIۿ?[~ߜ}VWW>NUuڥoHR7JyeyOXz^%;ژt)WQ|ClRvmaIHu)I7)̈́i4d6Ay'd8'?cR4ۤZ߮rJ^iF6WP+ (9ER$]$)oJ;O\"'$J]H:TfIA 7?Dyײq&xy_iK(!I*(6(]1.(nc-/m ev,)I#+k K!2KyrA2$C n?>\u~mҵPjc/&ՖOn(]Os}/_TK%[YB+;MT4׬. -}݉epKf!|VN E CER%y v/EȝESni&$5IgCV#$4yǵJ 5^KO5^zvPd([$57lX$YH-P}X|*z$ ?o9.'3 yؼw0rs

    B!fsUQtjc҅c*_q2א,PLuÐvNEmV#.τtR]ϐ iY9~ Lj˧t7yQU-"My,y=e#^pZoZd1":Z+(JzxQ.57\Ӏb0g1Ue\ChAG(*~Exk8mHր鍏(uDER\ 8{Y1f[2,lIV8M~RrOY^I"SnQ(%mWxHEQ)Jb J9WOڒl۲xY|rWz̋K'M}rN-pgmIՠB6zKOMQ D=/ҥ4iGEΗaӦT&6&*=I'YgW(R[C|92Wޫ=3N6?7 g( 1k2+ݧQ%n27)F\I*I::T*ev'+:ջP|Ul}%Iӕn(3T{S:w(rQGF';&`Wرcq9`ҥiA~18xi>& 2IeYI;UU:|'~~C+ТPJ Fu3Ht>oh]+F(#<1bi}vm8ñN;aڴi׿+w\l|"ΑvȫPv|C(O>r0kR2\v @W[rqFa'N0Pڡ/^v [&O;Çhk7n84vPx r!5jV^ye|3̙3Dt΋TȢEpqaɸZ-[ gq&M믿뮻ɓqꩧb6r=áatnK_׆5!$\C/|CQae_A!;v[ԭ=IN'+_ Jd٘:u*j+L0ӦMkc k/s9-cXx1>>_UVY^z)&N~nanQCEs=o|^{m˱'|!~衇bxK}Ƌqʍk̷KɑVPFMAfa3#E9ɘ3ʒm;uB~ &GmnT,w|8qonVL6w56l8'x;#`:묃ɓ'{I'R+xQo}{x'ӾFάYoqKq0|.m<&R1mWs)YrW^haRQJ(pW୷¥^ZX+D}yR]XG6j}n>,՛ob@2> mҷ!#sX:pĮ  W ~c)"`}/0t@p:foY-K S#ڍܮC >ey-xSVIԄXQjw-܂|+x饗pUWyϝ?joN?3PEQJfܹ8q5נK.Żヒ}C5j`…mi,\pa좷n^XEq==j_jءiB|L!4<#ܖ6^?;p[?daY\Nst VŠȱTݘ ,y ܿqn砃0uT̜9k5JN?3PEQJf7nj3Z¢(1c.]w]ZXkpw;e=K6GR]5ru)dI5#N8:].FK!j.MѤA/tb}嶋`d_:;/6Ġw)԰]^KKڕl a,QjetK6h#m0|pYJƋ*]v٥-|ذa9rd˱. GqN8pxgq#ħ>)o>v5Ғ9Nȧ8uV# $N`nq>Wqe1^\qD2]B "3n< )΍;8GzxIh}K&( di/ {`3fy+㳟,~ƞ{1c`…[pSOmP\ /g?quƷ큏T.]~V AE ~!}2a k43N1CŒ=3`F> FR"IRz@C\uX%-~Ӟx-ZIznu$}M77|38∖(B___7a Gyv?x,Yn-O 6ؠ"*%`_Rc" m<@αFJk$uҋId8 J+ixUR- @WS:q< ygq4bc ՖOn(݊4e1cv5b펔Gk@BY6dٸi* +)VYzC4*9^4 DHwd1mϮy0IӴ@wyQ/ҭfn/i]$≡D9M!}9Tsk"kjTC|5XauB .ܡF O)h { 4R갺gWϳF2(Njy":&h0)M ˣC W%j(J`gı78/Ƹҡ }g7 N^%" g]~5Nf~F0Y*[Qe'q$2z<$ ˗wVt,j(JD%voi/9n" jj:4{\Z~|38yi*>wdW'Kfp.,5 Q޾Nb"ϲa'6(J2xQn%ڛA`iqHL21-ƀpt»ʝ(.?iH)ȷ !TUx9sv\R`gEPxQn%DK]҇Z|45#U#I\V|)[ojHJQ  >i@|@*[K)Cp# /dcH IOQ(J.qww$XQ{D"TT#|'h&U-ECZI1ZFs3Y,!%#ɖ@\ O8ҠU4s]uu!,#mL(y9dhuܦIȺ ߣGEirG㮻3g~Jy0q5t3b~9W$ɺ5놯/pC"Qϋ4;w.nᆎ7\hO@nbԤq]iݗ͏Yȷ6Bݪ|}@_FoTYX!mR-=~$93p\.9)-zFKZoBBwzsx\~6UJƋ4Y{W-F~؅{ >ٷo>od~,/BWZo x?6<&U$͗%oB }Eh93ٕ_ !cZn"ky$l>7I~4͐)|Skō/GСC1dvxE#])" 8U{0/ҭ h$3^\C Dcri Ev:aѨA2*B<4x 2)4a)eJ+qaˀ%i޶E@0KR&o]_+xrӣ8ip=jiCQEQ/ߎG} ,Q0qDva6L)=\8j YmF_zIߡ)LCZ2Z2G@r4Ò'[#OWv(|d+#D>n!@6񹦐Lِz([+ʒVAΕ\uV,YM9CveE@wɳ:PG*/0ՖOn(M$fgy?8 xJ .킔޲|y8Ew 7!iYp[pM^Bcv!+zl5ˬPo KJY&3)cDڧK!y6̔_{* (ӟT'-k: GZiZuʚ9Mr 2MY&ѓ}ߒ<ʦ(Jvt΋;<\ve?9}gy&=9cAw2mhϣysb ' RFRԜrK@ yf,)m^y*-G7h$˅`v&ősƼ D#Pܼ*)1KhXXN"&wh5hcPS Lj˧t7yQkO 7p`,K#MVP*C>#ɵRSy|)YڛDKa`:˛E|dK;9OCeO#p믿. 3gs=ŋGŮ+?}}}p |sLlַz+:ꨶaÆaѢE 5^ &]E$}*;N@ '4Vyu!Ycц)epdU)S#2q1IRe!،D#II''#,Z1,> 3N nCٳgcԩj0aL6 ƴp}#o!C`ʔ)8k .Ø17^ PEQ?w6lc/w_̞=R½-tq+TE$>?7#| וF(R^#P: "Ndoy]b E{]IK=WNc0Q<ܩL8*`wěo C2mڴ8;3򗿠g lĉx7pWsСCcE|ͱk_=j(J9s`ɒ%%K`Μ9 i"$TȪXse!sC !"HrQő*:V9t)Kac^\xU3 )j?sЌ(y 'H*b&l| ,kO Qtj(Jsň##=hUt뒑+q}5Jb1v"Ke VNVX*%oi+X,Y|g],i3:@-Ɔ5 CKsan-J?ӧOǘ1c vm[oaԨQ\tE?~|R*eƋ\3ONh3R,Y{&M*[l m@t(npyX\edL=R"2Ϻ~67 \*72u'$ӪnRc`dy@4:D!ϏuoC iieEQ̘1j.Bt!T#CeҫX% <y)vU(sҤ{yZ谹Pn8wi_l\+z]= cqUטZ-Q~~_cƄ (RO](wyӟxcZ27Nf'N)UJwt{gIb&MJJ'= bLfB<)~%=w|K*_; +{ ]ܪ%;6_^#̜9V[Ð!T^x?J3QEQ,^{,뮶0@%`W Wy[{e=C)RA4Z֓˃䋟WyGӱmDdnIlaZe@e<yyV"gks_<V@K;@{@x7oVZi%x饗{`Vgg}-+ .^ٳg8`ĉfaذaoK.>K/sqw⠃_W^~;?kZd;@t 1WCдLOxdQ+G_ѿ-7$]5)۔=o߆2\26I iU)p-5\yKC:;D\i8M[ ߺ-*77go~,\-c+ ||.C;[o=tMxWtR3qG+(MƎ>GuVXa̜9[lƐ!CpW,eDgr {ڃ'-vJSk%(_+x1hz]JWF@[|HÆb~D;%;'M%YB< D%sBZe5h\y8+_9g+~&E$y{"T?aQTj˧t7yQ&߱|ǎ:(tAJo:ߑ&[\_iO4=ο` .x/m\ B4;#r_>'GѮm(Üh+O>WSȥ2@qm/Z7,r^{OoZt\J@^! |vx\Lܨ5^Ɉ#h"c0zh̚5 ;I^&7@qI>}|*<^!> DMS\IHi+}ZP!%O CP#Z,yg _)OJwEJ/=dk/< <@1cpwW)^rxmj J+<7*C6OOHW>U{ƕJ_D^BikMdJ9O{|B(^\|_J+KJ:ܷuAQRA__^|E,^g1&| :!!- DA= 0b'b @W651DEk[) B<DQ}0C\ZR䘙D;D6w 9eǤtO?T[>Qϋ48q"=\L8h4馛V,U\i7XJO/K,vM^]!ݳY*K^#G2my`P#$TNZ.W>}7:>$@{XjNcHmkN=lP(MV^yeylRcޫ4yQC=/d̙3x {G @6E.R/jH^SߝVz;.|s(.yY=L!7+{6qc4I"/JOtB yQ:5^W\Lj#cȑU i!\m\OR]+%5^|qiIp]JpE ␆IQ.*qyRA8#i8_2"tWGY+6(M W+vFW1Ip/g8W2!$I5ĕfFWH]w)~C< EևL_Ǔc*WzNeMk|y'1f6oS(Js={ܘ:̙@t%Q^E:l0yq0W@t,/*crxyzOr*~~ /GYK<DGknʓ$ER6[ 2X$nBh!}]ug:6ԶP:5^yW h ?rš/t FR>SH+5\^:uV\f)#TۖsWGq1 \vdYMg,C9/;/JE`ѢEX`FCV-Nb1@KtYs[!IR _.O/T ܝF˅["WQ?Eu>F2rӔW&B3ZB [gRKxQ&'OG8Zm~Wdp)o"L^RT.s]e]?/W*Njɇ N88qy**e2.hex8C$p^nyQ FEi /K_xlĈxwJ(;?V\=I6v/js]CQbn/+4!w24?C6Zw|8~m_W5dr§DӾ|h/"_r!Jck"\uHmPд {I1m}WW6hj\9\Y28"!\JϮ"fHssƯS{Tҡjcd믿ӧcذaXa0sLlfg>}c;3c t6ƷWqw܃']DQJr%5BS*{:,/o5W9CK]9w?wݓ{Jb.Y}_5Qjc-0iՖOn(M.Blv` ٳq7V,aBQ`j" =Bw%Hg(e){=K 枘:&¯ f\Nl_:vDo4C5 /yVl8|FXUEEIz^sNÌ3ׇF]vW_}56l N`^wo ]fdI LQO7Zf~y*GUMq$鱺֙I@1.Ky$/!DϷߥajy٭8xQʑ#GbVZc](]R8e_E='Niʛ#M94ZC)ھswT~n ɪߵ7je͓׏Ԯ0k,@'Y\_ Lj(š)+~i `sB}B6lrr(2TN@4? &6ehKK뗶5gX0Os_Je!K$Y/(s^0k,{e˖UrF20"{C(_yUKJ*?[R_9y6\uH"^'e[φGBWxh:r giP.轢t(:lLQL:r`̘18E1xW/D{)tX?d K:LeT$JjL0~l$yҔ%伪q =rT:}:vm79Æ ljsw`M6+csҥK3C 1\B冗}CRLsEnJC*K 2i^7|x[72v i47(PEQ̝;~:V[m[{` 6=܃_8[zn6~i0m4|_W\;.y &2I=E{Hn<$-e,8!W-^OցW\o9`vΌ5`yQ:k|ΝO<^z)N;wy`ٲe830i$\]w>&OSO=m?#>wUDBS#vDS~UYn:!N:_t5A_g\y<7'ɼMV(MN9\~B馛h4pI'9<䓘7oˡ x329+ې6q6Z H6& >,D*k&Me!]7r}{ =_xŘUy;05$ex<#|CQϋ4yꩧꫯb0aLr=` 0e\z饘3g>Cy睇Cb֬Y7޸qaǽؗ$2{/u)1}_b_⢽T]9I{#i|[U}pV'*l7mu:utO4Hy8?f)JfjV}$~e9EEi裏bС2dz)3믿_guo㓟$z!\xxW1e̟?ꪫ?rH,X >#DVc;f7[c*}LJdtr27(`M )z]]F JDi+5 |Y}``d^ ˪kbww gI>IķުPt(M̙SJ>}}}xqwclvX`d75vd^RS"ɵ9=6̰}_"Q鸽.$Si kq⦡u;_E:|H[&z_sCT%j(JɌ5 /2v}w\s }Y5 p¶.\"9g3\|o= 1 6Z(f,Kߴ7Oc\ :Z nXIhQNL[:щ,_f?,9MBbnoҹN\E{0 {Kn(Eȗfh1`7ÿ$e~,9,ڷ6DA`5?Dž 2cmӛỢ6O4w"DMsw{9t3|<ŨyQ:H>r-xDZ`|'> <hzecC,YC}{/\sMθ[pę3gƏ/7dMEeW%iK= k+t~7T>|qyMukY$n_S#료JQ2;Zg[J9lTnU`3-jc;6|szx#ࡇ_K>_>`K>FmZk-y-qLw_*az[&5s#fb!i/\m8oՂU IDATܘZ I׎Cׇw|CiPe0tn<ǀqرEV(m~ǩpuBYvwSiPO]-uoe#m,#q9||u79/䓟$~򓟈ǦMM7ݴd2*C܆9Wh7ƅI߸y)yn@j)2ߪ7VveiEsC@$|C 2YDdo/:= 8䓱;`h4xĸwq6d;v,9,]4XNJ-PEQcǎ믏_kX`rapDڗ:Ъ`)u}hi 2k,o>n8 >|[myYf,T2\h 5|dQi} :$t|UpZno봆ʎ^Wysȓ׊?x>^#^\u2͟?ꪫ9r$,X{Zkj@JgƋ\lN>c'Oرc?w1= I kMntN+oB)={+&4=k ]9SNJ|6H7;~]Ih,GކAg;}BQ@xQk{1yX}[lW]uUe =&Q]y$UCPDd/=.qSPh]'ɟHCfHGq"牤@g͋z%ԻGH /W2&1 hu3`rc5j`…m.\8A/yWlXJgƋ\3glƏٳg Q >@/< {>%i\i#׀軞8Rvɣ\cCE@-A2 ߳I T{˪RknIU܋r誋#LH2t1?di¦A:09qǤ|]ڹ./b<9s`ѢEmsa8mN,]CВ٨,<`Ȑ!-K%@EXlYeCy-Qjz)-+gQQڧsQP$poz+6\ ޅX|zERF=Kْ胗_JE P?e mvXkpw2e `}/|7|3~WXlNcƌ)Nx4xQkƌ^z 7K/5\$rbƅs6^eӵC|i~$n^x}G[ $:D%raH)iU$L':$n0e2szm>K,*oTUex{0sL30o}Bրf'AH9AArIn5c6oNsV#y*B{f%yCԑ@7} H QV'77n`haF/7|3FN; 'On&}83o~6tS?ń 2M&R1>,zk| _u]5X[oO<?OSOu̷^1HGh],O #}%Ԉ2J =vyE@%*iڗb /C#uhCϊ$y%y.zE˽h~Q. c kՖOnxQ{:|:t(zks駟ƲepW)c '̍$)8$tT$Tvnd,rT5&ae1<$B W7yeÍ+!`c*ǟRj(šƋx'p饗bƌXx1`WĄ pgtܐ1c _f1ǵeD彽9fHROrO3s<@BzC{ K| .!p`._G1e3B{o{Bu@tb,Y i_cF==Jd2?ǥkŀqugS/d0ϫ(i9//;3z{{oV_}uĜYc7k>%w WL$1ذg)S8u |.=t|K"TiO9$I#|\#WyQ~t?lh *鍏(uD=/҅c=_>l{}9!ҴPഊ#OMQ$WTѓI-zMFK2f2Jo\fY.*d}I0iǃ?͏/^ɗ4(݊gN/kj|ˆ.墊kY鲑zI#/.5@Cң p&bO >ɕiW@·VE0G/߿Y j> v(xQEEVB7lEQ:|C6?O_ik884!BϷ+"6W9̿uR7sLѺ `Nw&F(f.xK= )'krOy3S|F=/ҭخ 你v޻{]nz1}rWvϬ=嫇\^pD;^^miڽ{x~]B ɻX_ޓ,6Ǥn(J ژt!D|lkӱ/kn*@V"kJZA@.9UD{ ?-R'Ax]F$pD>Dh6#0!>m³cӨ1SEiXJ$+oc2 ֻρ/|3,,]#tc!k&i $rIƵЦuIE]ڬz^EEVDᆈK/4_v)#o`EC-r2O=GD?rdk84>seNkQϋt+I3"y[e\0 @)s,1g/R|()_U֡:Z\LI^.AiN$K?.vsuy癔f:;2XӢCQEQFx܇rҏ^Gϕ^fumPŴ;SgC9e#gB ) CJC5C?&Yeauij(/ҭd5^C=d$[)oEWSR5p[ׇ{4aX#^"dI5$5MC [=:y^"$$n1UEQ:U>TŷQK|̆ieV ȻA~{4oISc:27i7[fz9L1_Eu~EPi6:wxٲ^]{a`R]y͹7sy @( W%z-y7}1W\Eԉ~Ԑi/Cz o{e.I10XOEzh~I_.Fy텧˵:W5-=|ҳƫ:^Tt1EB18RvC2 61_ګ[D`WeIbJ7ަ"w C ܴh> uMB *RbT,4/u*_moT)ݍz^[q u r)UaW,c3[e\02W>xͣa7R/r̓~D4ѕFz:0zs h\&׉ӓk5EQƋt+)bUX%}iP ؅|ʰС|cQ_za>EJ܀aY8)bޅ2f5=t˴^ڼGrτbcJƋt+xὯ`ҧV t ږnBKs~|IuXxIZ?E{<,-˼&M;CW^崫-EJb\ko6~鯌j˧t7yQ9{@>q)ԳZַ6's\僯& :9;|9 7,|YYHު.2r%9O_?<%8àS5^k!c"-_ҒRXeO]CT(|)>ĕ&w mcx tP7>'1l[V6@@|ihǵ fIyHtmJ dm&SQEQ6DԐaQ Db_M_ֱHci.3åioJRHŵn_ ,W<1dB D"ݿi+˯o|qmU^WZ 0)EQ2SĴGEQjYMCo{e6DxxIǤ'ӟ[Sf{R~[5Da jgES^)e%ls0f̑pӵI"KmN@N7͘s.dLX$q"yQ|wRUHoz^k!&"AB5UL=tRpV(3Twa_L_:M0*cXI0xEr u OJFe|E4\ÿHV S _mlEs޾>fCqRq4+tؒKe_w򌯍ŗzmҲJ}礁޿Io&kOet}) A rf6s6v鯎j˧t7yQgLsZr0TIJ=^P,qd)"a0\ Mqe:G$AjsnsC).m?zdAp-}?l uu%5^k1d̵5^@z]o(sA""HZ\aE(SU^k6yM@2rCC\A ۧuŠF2ĥDcRH>è!|s-(QEQc7(_9HK)~=E)6-2u:D.t^U'x`BimA=;./OV=H.`i!4/E2B2֨HEI6(]i_b@z@zbLk*q)ߌftPʹa呶օ6 IDAT ^mfeJ]fD5 i,te!?\$!:/[Er}2 iKc[ݍ$'}<:5\MQD=/ҵ^Z3s6Gzƕ#).K]=mݾq gt5Shl >z[zڣdq^^V RqgW>#]3SnEEQ(%]b'|J ] F-zRHk٢T/CFDO/'^~ J`2l6^^W&5]IWyu=Kk@ٞ#8FCV\qE&L;TҡEQ*KMҸo>Dž+%)-9'tҳYEڍY MsG Ԅ*{ iޥsNN(I?]~&iu'PÅ?R#sm36.\ \c b |o _s5sS?j(Jbo# \i[&N򿝤T]e\sŧ}:!kPú8{Օ5hwݿ!r'-v߮(IѲ :q<#9R-0~x?%n@__8QaĈfm PxQMDM#e1jX Z;BLОJzn]zt84dL/0G4)ҕ*Yaڶr*+YK P|kHe=ϖ/.12>jdA[oGՏ^*(]iӿK=0};CWaoBZPZ%J_c.EDJ@@ʼnmz??{|c_pXjxq}ա(Jaa(!In#<5m9ɅGZR^,O, i޲(EۆS}1diK"e[L;dQrگ.J<[zɒ6hƉb.yxq%}=Xjz!U^(Ja)b|6+0z}^()~Q~\:\J̨}׊qk-v=pޯ!V;m~u}1@%2c؊%قb%IaV%Xuzζ['E~y؂} iv:r *GQ)Vl&{F ӺQ ظq#֬YSO=-껞npa%4%'( c D{#x—g7R*Bc@Pgf?/,ȠߴvmNcCz8HmnRcuMip<f%@&|L>-s&@FO>:{'e2Z^d<`؞!3tMT*83w_^> /bʕs=m6|5\SN9~0dU^"g 1}#Mq!2#OlaNzJ]i+.t|;e-Rv=Q}}r\ssc ~/q3%NԱLU#/\Yφ]ޥPtjOAސrOYg{,!x ֯"$G5$G5c&N2l7$ݔn T$mNKRш^3kЮ@tsO9uMמеTˋWGE<@q)#d?z/|6}.,dؾιC֤aaAgTG/fye?t}˽6cʌz)yEE)0DǠ*Gu8R-yw{d7%RRAg{ۖz(XOwhiK)4ȈE5h!b[dWTyQB#DGi`+1vͣb {=eHIK ~}m*l_ Jhv(]f8E+(Jq8՛VhH_a[Z\\@eS% EF*.ŅR(y~;*CKF(=ʋYq1Ielmi9׸p&I ϸCqe%뗢u7wll񐙶f31^*Qa"3E118* 3mw6dmve3!g^TYkKmU1KX9}Hl!C1/i-&jyQW.c 2",߾Tb}+-[!,yvCmQFE4g!1/J^QEQ Q,2tAFRJX0L&'=XKť(6sm㶒S*^B1[9qŵt-F'r-H3gmLQFދ+V`Řk_Z|E:_<ҥKO} j\^$,?6>yɤZt03?\U>->B3GS#1\oY$86DG?4\_P5Zsp\LjO ׯAuE6|z1Vc5ke~ZpWxE_Oz-Z5L%h1E2ykn?AgG8#q3hy駱{3LG Mmh6le3?Ǜt閭HILyJw=tZ(z ;>~. my$ؤjss)Fmlmb})&cFLE)>K.œO>?i0̺{MozvuWx-en'H" EdOOZ0*IY2JKJ^pUԛ& eVz{x= mJħײLp1oEiB&N9y,ğ?Idf3m Ɣnc2d=\\<>aѢE;pWNkre >Ns|3ge˖8R\vJ.3ERRR2AƒHͲe:Z[?]^gU39o{5qIY8?ii\V [dBz 6(#`͚5JK.{|lUV᷿-vygqsD-YAۘTLx8`ʪL/"e=)hdդ%ĕE,Nr]"%GpT>j?>(ϓNKlenckR$ۘ(J T^J%X()J>\kޢ X[Lc:wt Un_)/OL? [/ʎC_y˟V? Ϫ(Jۘ :H'rtBW3F꺡tє59QM*M`nT*s\̞hfĽ4#k3(ʜ!jI¯JB1v]e,@:Ê i Y d\?W)<#FӬarEtYV ReEU^DoE3=h)Y&1L-%Hm;AC1ϣH *-d}&̮=ߡ@;@q t>qglhVǙA=Eh%u-}ٶ~}ɵ3j5#2)E.Z^ʋqg VP\uxwzioxPf&j p<Ӷ*Xhȱ ~@a|5GASL̰ԆA~Sp:A */RXJ 4CRncZBkJ&* 46@%$&q =f(VGd'{{}>t48} |>\nä$RHmvsG);]rƞ{Fu}%(E.g<9,ilm+6R Ԭ}Rߥ4kV4K$ jhU^?mť>T՟.%! E;Q' #i&)J,TyQ³5oiÙJnz 饇,Yڂ]c$\,X!S؟&eTI7[XmԿRqBu>+h+ &> ]օLr%(Em*}B<$ƕk{'>aMva%Iȴ :q\j~La"؂m`K*cd|E\N3/X~Ϭ+N&=~Dd*Jh蘢cVᄉԭaE3bYLbp|1cUkZnf/ hWZ\q.wlc=c?(\4>m!l9sxhKk~#$(JEQ Ӹ&BNHSJ-$jׅ%kaVuW1QBIi&ݤ쟌,g#{dDAD/tBE),S$o+(@k&r\{:xmnw!Pb^K#66 ,ڕ{ Sgk9xu% ](*vGq )J$(JaŤ XJuE覥PA_ }̄mAbA{,ҎUmW1 _^1?eֶ,NR3 f.cQب(sAJ+m= b2[~ML#V\htb5-z+ӹC.KV^".N/m7<׸PQcSRX`5:9 Gp|*e&1ޯDU(m06gbEŶ9É{RQ70Э)5;{܋DYLʾ Ό_qAa:s=Oʕ+j*(wb멧qzkLEQ K5א'%yk6;u ˧eH<B##Y{&h\(e\zw?ȺZpYY Y&?CIaW):\}vel&Ĩ,/v^z%,^Gy$>O oxCdp7ogveʋZߦ V}(%1T>r} IDAT/䶜_B _KCiP$ RO*#,f[h%" Epf]=hϐnuÜv >O裏ƒ%KO೟,?pd6lh望+sU^XZ-gAZ.ٟ+#H#=]$Hݐ#¾}dž e# z#n[/QQ?{6 Wʏǒ2t _}?>O{ސ[U^`WA~h #viƘGAtZ:!L0f D}06 ٦< ƧP2OZ4q+.,|=9Gob.7Ѓ I R%B-G7;V ZL(ݷp巅XWXyO~Xb] F\A;焟]*0ȑ?e{J݋$(+AH"0M%{q~ŵCWU4cnI.6X1w{ rJc z)q=M;(Ja)luK3w[B}\_GbIМ2B u [HAvЯmao:}|ㄎ ƒ:ۂnht[\dw;sb`xs={vXd=|0V^ /R0p7R`ʕjTyQw Kg^a@t;l+Q x:kvQI i\Y`Vp@^_Ckۇuv"aOR2e69b[n(1E3>샃> .ēO>K/Z gw_^.2wq8}O?4;y08^2F.S[1c4qČ(/fիj*`vG /% r^vҊ+f\tE8xbe]6P2^f R%c@t7,m̠oO-9Hin; iB9dl N?P(*Z]j>P>[]CTLK ΢֭>nN]R֩Lu2^A.~T㖗N9+X?\?+戾7&jLc 1_bE),%s9> `QwD.!{s/V7,/SyI:Ihz?c6hqdlI=x^26Tj4ꠗ~oIy&wn>wm&󵰕.J9:_z ">;˹mJD` ePCEQBE),&-)/"]aQ[`Ruʫ*z<4;JBM ͡S_{n`$ѧu"-D@xPk n8FɴfQ&~$Q!됏22HD'O/&f4CQzFE),>2Н [#DB|&QEΗHFX`1 454J5BxN^b?&^eFX:¶$K,'XcԮտ}?V>!(ӈVʋVFN;]hΦe`y,. ﺢ(MLig@Յ(H0)@7LAAkZ؏&?(ڏ,Z&"ʋt̛ildd3(Ja[iCy`l&k–Tx(TƼؾv ,?GI2-lQ>=Dg%ЦdIk+6#l Ͱ241[|ʟ f(JϨ(EQ :c偸=,}Iʾ,Na2y([Ký ߆TZ&1a(0QyUMWm+Cv_?>s{G-/J^QEQ 14r҃*V!* !F[sC|{6@ V5hy^@Me KLA 37y .'$`;@?C39aUZew89oĨ"`9RğRa!Cz*/RXq2VEਔJ粔T_cКYƄT^% tsxePF Arat+ zuޭn9̖f{P3(Ja1 _pI|^q!zGD v?~b T ͡[ ۝/ 0ܸehi2Quv;M׭ncyIғnq9G0. i;b+ ў[}Yw,]`2)FE)\8\i;um=J)((ʜJx<\NJ+.ZHdA"+:5S$Rcc| ەfep@8QfȎݎM +p} lBGH7@{gf9jS~R[ByC4K{gHPh7 *߂bޥ #2qXh>Rn=?<>!EI(Jaہ\ ѪD !+oy_@kZ+ިRq4~F֗ƈ<9p,bmERoTJdfY2XiqcudD-(Q(e:j|:jo+<Ã3R`Ihx J$&L2[ƀ ݱ`nYXaNLzpDdžps]CC#==G^nXN P^fcv(yEE),݆JY!Iˌޚ1񿇦T9-'"MQb: =s<wPDN_Tdݵ=$oق|nn K]|ڱ?Quz2(dTyQR겝%*50bf(ePɯW8,)͢9? &PX<G#ۘH?{A~cp"KʋTb: u*KBb/Q c%#KF @3(Jacy ˘XX␓(MuJJy.ifClIҚ6G֗aX#B |n.gFƕnb ݝkqCu§ävAƲp[ڏm  p)>Y8!_,\Rب(Ń1۩QgME8 /1/r*Űx1'Ð\%,chQIܒBW w(`3Yۡ!䞄 $גT`P?@I>֧yH'9@k{lcmb?FGL[1.GH(#R`TyQY6rGY='O& Ͼc2ۭ.Сi+0RjVѮ'ls ~xnUa mc%4Rr ϭb3 >aCqيLB`OiV'PPEQ +:l#3F4M$!:9FnqѭlfeAV"(;.{9Ke („?<os>uR {n9Bv%IXLN2ܓB&Ъ(%5c=JPvtGQCE)0|D_VJµp(.| DL8In1C@R2"% W4 Lh϶y@-3`(Lfj$<\=lSSGp!M~#CJLFBogTyQŁ˕5Ĩ#}d''"]ŪYQCMF@%T`eDc73Vt WYG!\>Y✓9u.kEQRCE)0ݭ.˵'VhuvK7i#~Ep":5auV;6Ғ5'%}z+VR,%>~y)(Ja.ݝxr9q%X̆J;e%uӨS oaM*R.利iY/Z|WqO#7F-/J^QEQ K/sKJ%4́yM" wWׯGd״8Cq򊭧xVd(l+᲼pRESO˕P*/RXU^/+0,4ǝpv&97 ( ݕӼ&E͐_rLR6q_kH,MWU+Qe "tJL.diҀ|YyqM r2p 3&PJQEQ ׽HOuIWp9< nd0/.Wd1*/L/,$Q&6bg5]36a:ٮCR/njjCܜ\\KYZO҆--hV~K4#8OFx#[^f,k"EuT(Ja)@>׷:ó|!c裍RR`Ũ617/q)#q_䟀#YQLTv =o3%2w+ 1渖[9fWЌ a4!]pO3Gk*B-OɐH3gTyQYI0țD[X2)LֽCǗ3'Xf`JeP@NIxp;RWDB(w5qɲ r|FNszX]|>F(o!Rye lUM) ]q}XZED 8O 4дPH,qR(嗕\irf nќCV -ޥQ3KǺnN#A7fp+e>pP1%(eXo(}:D(IA3:|)sهGm @ݬ/2f ht;CQG}:bLŭם*jn0i}?#.KRǑ h=w#-<^d(tr\8;u1|}ku]CâEpGӟ4^wc~}_jQTyQ’dDmtWqa%E0六-`yNV@ZE2kSw۰>CG=pqmM$·F5R ύ+$}L\''VО#Dncx\a7ꫯ+.?֭[K.Gq~:MQe]nATyQ’XRЬ'#9a>#B&a:`8`EJ kICVA<ړ&uH}qY:!Bę9d򗿌vکeݑGKq5DKDXx1=дU^s<uC}a9DrRҘ04 FQ s.R~5ǍÈCv DLxkAf~*kV2#kĖ[@[eULF4 ښHUC,h˰'DJ{2b Z8ҼTpq)0Qe2u([qv ;֭[uB)&(JaIstPQag)Ĵ,e c1q|F'f<CBb*OdBE2:MACA0еS>3[aL5"G?+(WVi܍K4ZTlWZ3Ќ{ ׯ</^83pyalLEٹ!Uepc@vH&F/؆e y''^$52˄`1o͡" (=f%65؏ؠG-g.l{+ʟi?G\\Ju^%4BV8c?xK.{-[)|͸ꪫp'[nIJQuUQ Kc^zдhWgcr Rĩ3~^"]Zxe'0uT3O+UZnSź%򔏰@ >Y/OY+.CNg7gۺ_tE-WXVCq}B+(Ja)o1yF磙5Ab6`U$D^"P!0Pqbf q~ͯ\ڼpؓp~2!UA3+.69眃n }=yVZzH9*/RX.ulPm hw\ca(/޼ChKZ 0zZǍĦe\2IK10I֌1|^{-N9eؓ*E@E),%s4uCzRi7_dt`Jũi1VG1m IDAT=%Ƙ;@tDkZ `JbЇb~B. :?[^ 369irf$luaK ǚa=?C4BZ|g'OO+|`na{dU^d9X7s #FT^J'Dv;}yvϪ0pJ)/tMQ`jaN5A-t%ChAtjeY>~5E*-9meL"DBfǺd_K/~qA'?Icvm׽u}{n>/~Xr%sOl۶ 7q5SN>3QF*/RX<=8FL{C'֥ڊS*)hN QF3Us}ҍL v&:Ca89x`q֎ۓi#+" bq0 nN"3ĥͬ F)FYUX!Xm儏1#3gL&wq1Xz5V^ݲc 뮻b֭8/\.c{C=%hdE) A 3̟*)p^A3'k[j=7,? ӟ6D1/ P@m&^j@5 oZ#: wȐN.b\d[12Q_+"y#O|\߉ўRlѫ(aݺuG??<9qbXt)>OZ{;#.\+V?i֘-l.v*yv^%;]`q.Ւh}P {qdh1Ɓ|`|P^1|/hi}z%{.@(/ ŎeQX[=ͲL +E<a], ӣ(inc O=V^>s ֮] cL[}k83qgK_}Q=?_j VX)\ynp饗c?v~\l%{rre?mM/Y ]@Y1@`ml}I@#y*4u++^V7 ?.W1,+ u4vrur>2e-IEEI#8/ڵj5|[\y>[n_}cX|9ꫯhߌWոCk<&=IL̊tboF,i pY!u.wa KF.0^m6DG `JcPg@5Ͻw09C~ PohkdFH^Wr,\-J ?lu WQQEQeeO~}{_ozXti\/I'o|}Yy"km-%Q<4ýgmq;pZ j@5yP#YѨKAw#0戁,vGpHQ9.Ahs]gCU^elذdɒmo=6nRUnvdz1`禙hږq.3^Fӕm ͏r?G7KN Lx>^06aPtlu_ )el@fN"o:+Zos6P6C5%!sF2a+JU^%qC㤓nYf_YeOeksxA>9*\e3)&\Hʘ{+] |?\%2\߬z~&HY;-恎m&Q(_&IK\Rz=gJќ^(PB+(ʐ9ð뮻ogX 7N>ƺw8sm޼k֬ '!:OIcvGܖ_e~ζ!~oC,I$# ĵ(A@9 s 0^COK963<˖-k׸+TVU|ӟ':c8BFhf?9k&l{.ń(/r~N,'Hlh)&UfCaN?agPq(՛^!;./]e{jcmwr::o˴au͒T:f W p38#PјEIi bOGlSO=v 7`ժUowgq.b)<;,7s3rq33S_ o~.h몯eOx)*/Ikĸl/׀U*0 "oannIX|\y9+^BXl0 _>M)4EIU^5~HձꉪaEdWoE"}Hg< eHJj /ԁ@q)^Dle47IŨ0ק ߄r@蕗CSa򢤇)Ja!IRe\KǎNK]Nuؒ[]^H^d$A`}و`Iot #Ld (B '++I 능UY yaщڑEʋu)xmvgϛmAT< hJQ*Y +sǔAyb{1YP5EUvP"`bb&=ib^=\SnFS'N.bQRP5m d3(Ja<6l7BAmE`QApd8)P-TfPB%)ƺ,L]i#÷ x^4kyO>Dk ?cyzzU^POCͮwjGn>fIU5GH}Lfa8`C2f5,%*? [m38-&f38ό1&Nsb]\#KlTUɟ3h`lAބ*벀Z^ʋ~ĂD+!G;#!ؓ~د[]jzJ8I;fwʀw̋$n @\M 6ևA~h ?Icr!kP`H6 4J楨#0FN¥PS>rl ,f(JϨ(%.Lh  , 2`vBe,8m"Q0# j~E-Brt:RC7qrQL#x(1Oeš86PB+LH3gTyQ¢ʋ bS0 IbrCrb̾Էm2 Ad_#!2j21aױ\ kA@QTyQ]Ayl3v7B?`^`$D4 `a A0{> zzu*Pj3@vlܶ4C ۧo_u~Lܡ5`,5z' d3(Ja3R7@>-S1:`6XT^W l*[ytM絘@Ed' 2}*(Ja@3yl3vG9֚Ǯx>0N-m,@FI:o3C׶4P3z( B 9nA>2-XExі PbR&a[f6yPc`X E+(Jaј%R cpЕ?|+Ȁ3ƪX:Ƶ-J/kZ]6`j&rd dVAp_?]q֞`o,P\ۀ@(BE),T$L9y2XV|^h 06xSm[Z 0XhT72yvM -Sy@i #xi%dR%qTyQ Rsd@yhJ LTB"(B*(]F A.'"0HNT*/R`Y|9@>۝6 !)b[aQދ8GP:`r7`,`Ɓz-awF.hUL) ]B.04S<7X<EU^EQ #xQƔ jJvʋiZ<},/"cn"yQAhdT??b4٘ */R`;M d2ڼ[{LH?0RU* `b1P^P f70%t #|:gu1:@DzׁzM ~T?L3j(TX굠=PU*̎1 ɋ(6(JaɈc2dҜG8#Z3 `@-1:>Q@S ,j-8_9vrUGTR9Y]۶ĠR 0S M0eʋ4%]Ly@ bs O , Ԫ%:V昗/ ef[PmBmfԧAZ`r~/nu -[g-ۀW*+u`kFDyQ*/RX(sV`ۭmN&L?ۓke*WbccDLDSqo' +3{P}e!5LmAec)j5g?91S!o B>}䇗bg#q\^///Ձ-2C)JϨ(ų>D dv2o.ؼduްw ͮ;Jֻd_wY"ZML* Q62؂_EVUk 45r L h74J20oj$Ovs(ïVQƶ05 3k_Z`:#l/2E@V|܉Ҏ*/RX4`_Q7-H҂:;Nab)(3fKDֱNN.kN墲Kw:$"j4^~[֯El%BݯyFד7d{P ;ۘWTyQEQy`%2wLy h>ȟtKޟ(P^03:ƫ0qM*`&*0Ư2[L Ps}3)F^n޼\pn+8q%# N:`g0fjh+WJvu;LO^~rww;ߎ_= pQGa?~8rߋ/m݆Ev}w}Ѹk|d(dU^< TQ7Gf 6`S07PǼ a+WŢ㘚Zju|?\/y`ؖ[o8SJN?t\r%Xnv}*nv~ 0 (kXx $|(.]~?8w__lYcKyyꩧ0;;8m۲e_"+EE),[:H m٘@/fҘy%Fϓ4ölذkvq`ɒ%}S*/RXXuJI Rn:5emDnܞcGMggk;D_w?Ǩ:Lj]6'َ^Ss]GW{:{qOk;15JQ#Y\ƞKI)<(JA1ږ9mewi%ulq6mrR\TyQRREQ%yFX|9nFTU'x1-{cx9|x⍺((Jy׻ޅY|hjXz59n2N8Y[4y3`ʕ]tVQEQEI-/~/K.ŕW^n wu9Fgyo=8Cq .MpcѢExG2)F-/((Jz8qOY-uý x;߉8ꨣp=2QEQ ͛m0997M;G,uя~~8&''y~g믿x ϟKSU;Tu]8ӰtRcwʕ+_2m~mc=0>> o~3n̶YgpǶmB>x\֯_J^moo UW]R&Km?lV-Z+/X*WkIDATCk)O=>A!ضm6n܈믿˰d R0O{,-Y{]zѽ;<@;3w1tCЇyљg96zjzhմ|rZ`Wd:s?!~rJ2WL礪 vmG{l˶>c+zeVk/կ~sΡ;3~W\AW^yef׮]KRN?̶[QQEQ Ě5kC7pCc]Vߟ9,^{SyV.[֖\r cJ[_|mݺu\.YgEDk i:橩)g}/ګEyRYyq)LKDϟO_~yd9+1vZ"Oo0? ."/)R Fo!L!͐0R1H6̈́H84FRP06dHC";. j]gfg{W9N#zk֬1) fLwUVV֭3j_~=dI34~J-`d2 RΜ;;;ĘU?Ojy333!˱}!H-P@ #'O6yqԩRןq'MJ%kEss3|||H7v}"66t3࣏>Bzz: ~)~`eeZ+V}R{xyy!//'O&Nxs!R<~ }6l`(-!7 $zɤV7VZ6czzz/C &&t3oڴ "##QQQؼy3t:ݠ}[V#..̓ZF}}= t:In4;wDJJ <==QRR$\|yyyKֆT$&&9!772eCicDV;_G`LM駟"??0nf777̜9/Fnn./^;vGr\D;quܺu ===@wwr ~7Z-d2/%y455һD`x!zL6 ɚLKQZtuuv؁ 33Fy3fmmm6mdteh4ի8wj5g19 秞zjȗ \.=ʂJBXXQs`BYjQPP`hő#G ggg3?~~~prrB~~Q{^^`ʕ=S||<>Cݻ6l0/ !pYh48::J.3P^^n)++1}t#,,Lr?p)Fz=r9|}}%Nmmm/;;;}RMD#Ȍi&`BшLqI*EYY !(((b۶mB&DQPP ?n蓓#d2غu(++3,4׿Ô"d2o5|%922R$$$bqYQPP L&iii<777E*;""B$%% ^/Μ9#<(݅J "##CTTTxP(Ķm$_jjdԩSjn"9,^1xW:ΰd2G.~vww7ꗛ+0ax7V-Xrjd޷oxرcBZV,YDJ \r''' 1faee%DXX%-bccP*bʔ)b&ٳ]H17wJDDDDD$|慈,""""",^"x!"""""ⅈ,""""",^eggC.>J&Mnlpwwݼy'N@cc㈝ !-- (++~;d2ٿ> 8yɾD4""2+s "":u*t:`Μ9hii7l`>ÉCDDfƑ""21k,+Wp%YZ* gѣGO?+++Cpp0VCr?T@111JJN3Iihh0(6m2L{w >m/`kk ooo)//\.GQQ6nT*,Y/_[JDD# ===G]]_WF^^qׯٳ{naʕ&vibCii)1g^N z DTTԠq )))ꫯdlݺv2h7G53N#""===())޽{1aաxGKK n:󄅅F9y7())s=7윟|羾>̝;/^ľ}pB(JL>Od999p ;w.nܸdDGGcر˗/Ǟ={ ---+W0qa_G^-Rѣj*x{{(++üy K_|矍ŒWXQFbDr" Rĉ'ptrxxx ~k׮EWWڗ/_n z~""w8BDDHOOǬY`ee888eVqm+ h4~EUUC o69[[[ roF +""zX<==1sLvV&fw>ׇ6C?+++C:;;ȑ#3f >sC}Q{~~>\]]a~"tuua޼ynX[[֨߱c͛F744FJ%J??{""#/DD4^{ 999 Dbb"4 rss둛kҿGŋqg5_5,ZȨ\.GVV] B!##cs5  믿@zaΝuzg""921勉p{H444DDp䅈,"">EDDE Y/DDDDDdXE`BDDDDD Y/DDDDDdXE`BDDDDD Y/DDDDDdXE`BDDDDD Y/DDDDDdXE`BDDDDD Y/DDDDDdXE`BDDDDD Y7pIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/original/iteract_histogram.png000066400000000000000000000714501153663664300272560ustar00rootroot00000000000000PNG  IHDR/gQlsBIT|d pHYsaa?i IDATxyxTd@0 D ? "1u!ZE\PX*EA 4RQ"e XQ I2̄IN<˜93ϜqXe j'Ah^ [y` 4/l-м@h^ [y` 4/l-м@h^ [y` 4/l-м@h^ [y` 4/l-м@h^ o*$$DoS5kꫯVݺudL,h޽X~~BBBc%D5k-6~xhŊ~IBZ!!!n"""ԨQ#eddh^s8Uz޽{O>UGEGڼyN?^C ǭ)w;թSj} T.gzԩS'=|q_y0' 8%I:yK͝;WӜ9syqFTw!+VPaaL#GVm۶?/wyAA f,*((P jwuĉ~ҥg]U_y0@zGb3f-ܢ|Yp!IRI`jݺS@ծ]No*ߗfPl VLLvޭÇ\ݻ4hZjUV5j9Zy޽{=.Yy%bC q= l߾]<7oZjYf7n\.ZHQڵ\:ٺu8թSGW\q>rs:܇yfs=o~:uvj۶u1WX!˲N^vW=/C=-[VZ:էOYc]}˗/K/:vں t]})((pխ[WڵwܡǏ{I JNNVzVZiСݿM*22R馛TPPoUPPQFEtƍxEFF*11Q{o^gZzRSSUn]ũwڸqu˻"5KLLo-cԿ7nt>CCC]3[bY^{5uAQQQjԨ^wt?FE./_~E&LPvTvmw穯JNNV:u [pBm;wp 0@55uT-X@VR\\bcc5n8=쳒xݻ̣a۷:v(IJHHs_jS,X\rss}u+&&FѢE4n8iҥp~PJJ4l0}M6*))֭[5{lM>pXwq[REVhhdeٖBBB܎e˖Yz\LǠe1b^ο}ݺuM6-[=^;!CT1|mr8VFF⬈kݮ5|=h?~ƏcǪw޺z۾5d۲I&^z9sJJJq5j."OK23fDFr$$$D/BBBox?,,LSLq7q]*qxZ;E^dI ͜9Sqqqz'ݖ%''kȐ!>߭~5Db>yPIRII^~eիWO/+:[o>-]Tڵ_~}v}gqsoGj„ jԨ۲^zs\?SڵKJMMu[6~x܇TUTZOTjIە2eBCC^k ?V-ZhԨQ:yf̘7?ARŎaՃ@{ф 4aM}g/$]s5jժ,e۶mUʱ}*=Sn}qPΝ+tc}EkVQڵYSo=?_[Ν;=^;ѣڵkڴi:NU0=/@޽Y %Iqqq^;'}~mu=sPLLJUTT:uq8Ո#4m45mT}u0nY{1+*#o8i|-Zhʕ7nrss5{lIRƍ裏$-39^'gSt8:vXy:|h*s_Nu1 zмpsyIR;j89rc eYԼM-ruuO}  oߦ{f5m4]~OZVTTtN~yt;v￯}׿iӦiС իW/M1grزeڶm[mΔc"*Ry8vׁk;cec\z饒~~tb^ZQQQjӦ+Zߋ8ǩ˗{>s;vL\rI:po߮-Zx|s\PPv9Zp~uU:5KZE\%Um۪VZZzב˖-9\ SN#$)//OԦMEGGkʕ>/Gr ʫOeR+WVhĉZzu5L5w,Tu[ޞm6lq[ۧz+wtt7oْcCM>}^{>cǪPv R7ןTO?,8qBF$׍ү㼙s(++߯2KQRRz-qFkU޽]dI-5kw߭q^{'}{&..NeU^p RњIoо+^ӦM\,K=^kj۶VX/--ȑ#l2dkVvޭ)S(""B7|sl u^յkW 0@ 6ʕ+駟u֚4i6Z~z+B]7ǩ/\o5`EEE)77W۷oWzz Z/11QSL}ݧ;jWqF]qM$uA˗/_kFrrrt [ngjVZW^޽{u%hݚ7oRRRܾ!/Ou+//O;wVjj99s.:P!55UsQu+<<\;vTzzz3ydXB'Og}+B~rrrdY^}*_͜9s4i$]vҮ]4w\ƺݿ1a^Z3fЪUh}Zx̙㺉^R׮]u]w)77W:tW_}snݺՠA͚5KСz6mڨT;wT~~:t3áԳgOx㍮yYf hUjS;P~TV-%&&_~t颁A㏵~z]vez5jnvuY ӢEx3,gQj֬YںuZSQQ{95mڴ! zw^y7j*W^AhѢCYGX~j]tEVXXgR9Sq.ݻɓ'[Z"##DGN8u?JMM;WUVYV:uh+55OୖO?mnڊzILL=~ٲe֓O>iiƊ."{uS+V۶m],.o_~Ś0au[jղbbbw^_gz4òW!o믿oWCBB4 T @ 9J5μT@QQxEEE)99BLOu֊TӦM_~15Xh^|,K}լY4qD-\P7Vzzys}i̘10`,YG}T222 e.>P޽;h~ߤ$իWOk׮ݾ}aÆiڴiy^}:#yat;[L[NڵkeYiiir8;wn 6oެ-[*""-ޮ];roN8!IۅI6mtS͋RllG<..Nta%%%I>SիeY:t3K5С*M:U?/BCUhhBB(=PaN_׳+Θ 7sѐ!Ct7ʲ,jذa]׳9GŇ$͘1C'OTxx+eIRݶAÇu5nXuQC|l׻wo-XiUg^ [y` 4/jLX1:C͠fPg33-0mb@`]q-м@Ƅ39 lu6:Nh^j(Q>Ug^ [y` 4/jLX1:C͠fPg33-0mb@`]q-м@Ƅ39 lu6:Nh^j(Q>Ug^ [y` 4/jLX1:C͠fPg33-0mb@`]q-;{ql?H5e@yqL a҆jsԘbu6'?+)i3vBREEE>|dܮD'NT6mzkѲe d ,R߾}5k,M8Q .Tƍ ?Y}Ւ%K_kz8&~Afw8͠fPg }Իwo;绪̋Wdd222\Peffjݺu:p@ۆ+::-Vn]IRDDD$ (6oެ-[z4ڵs-/Ovv>C{:v8#FA:th F%p!5l#'I:|p>oY%%%&Mhɒ%jٲe5dٜ|{1c luмT'xBƍ#<믿^?~ijٲej߾w8ի[,77Wu1+w.)jܹ‚By|zSS[t'Pw>?{|̙5k+}t颣GjӦMn{Oӵ^_5nXwu^xW_~QӦMչs3| aj6>U;wɓn-[HRgOvܩ2]r%nڵkuڱcG$ (ǏkٮXIIrrrԩS'{ݮI&׻ŏ;[iӦ՗4Ň4hĈ*..VBBO;w~Kjj:ҴiS_/bbbtuԔ)STTT_O %μT󕙙lk߾}U]딕mw}Wcƌ{ァ뮻NЂ fYnTĹEqޜ1mu6:Na.3ٌ؋cUXPXQܰ_5fPg39Ժ8~ i3vBh^ [yAPcŠ1mu6:Nh^ V̠0m i3vB0 IDATh^ [yAPcŠ1mu6:Nh^ V̠0m i3vBh^ [yAPcŠ1mu6:Nh^ V̠0m i3vBh^ [yAPcŠ1mu6:Nh^ V̠0m i3vBh^ [yAPcŠ1mu6:Nh^ V̠0m i3vBh^ [yAPcŠ1mu6:Nh^B +fةαVj#[TS&gicf阶3luмi:X6LP͙Sq[y` 4/jLX1:ô138͠fPg Ki኏WTTsru]27`Y 6hʔ)j֬^|EkJII)wիW{fΜ^}δQALX1:ô138͠fPg ͋ .T~~y |B)--ջᆱ.]u4G=΀AaژfPg33Ő<}2dSl}_׳+Θ /o4p ?P^b<'85!^sYM'Pe5%_9f>ɫF=‚J:=~:;@=>sL͚5w~~CѼ3fɓ wŷl"Ij߾}>|X ,PFF+ؕ]X޺ĉ\s8}WaAaz^u{t'Pw>?{|̙5k+y~^Ϯ8c30޶풳ڵk+Хc]X޺ĉ\$%%iΝ:y[|˖-{ݮE* @e ڇ={+VRRuI^ S^bWرcZb=w м1B>ceffjΝ#-ZH={ԏ? &~*ӷfPgs6fǴ ;y+33SJOO׾}ݻ)++SiivZҊ+oTHH>cuaUpm{qכ޽0iι@0]q-м@Ƅ39L3c luм5&~Afw8͠fPg [y` 4/lA +fPgs6fǴ ;y` 4/jLX1:ô138͠fPg [y` 4/lA +fPgs6fǴ ;y` 4/jLX1:ô138͠fPg [y` 4/lA +fPgs6fǴ ;y` 4/jLX1:ô138͠fPg [y` 4/lA +fPgs6fǴ ;y` 4/jLX1:ô138͠fPg [y` 4/lA +fPgs6fǴ ;y` ׼<ꫯl +fPgs6fǴ ; W^Q6mt k^8_|Q~DM8Qwj hu]ڸq>]uUzմiS 4H+VwB5/ڵ}]ٳG]tQNNw:h̙N5V̠0m i3vOsZ|jjԨnf=)l^>tMjڴx ]ڸq-[[-ɓꫯ;U̠0m i3vpKtW&M륗^Rֻ+uȑ HÇW||>>^s~"\Vh%&&\o…;CKu릤$=Zk׮=+ec3gԩS.2errr*+22RXhh233n:8psiƄ39L3c lu\O+$ SO=Um޼Y-[TDD[]vgrկ__aaaj֬~a;vR9 t饗z]V[n: z$I.w.LСʴh"M:U˗/ק~+pf l6:Aa'944T'N𺬼xu1b*%$$讻RNN8-+yʗ8qUy)AaAGɿPYyL8q9sf͚;?yi߾͛kcق Tկ_gy Kk֬ټT曐%Nxz;6FGz\W1mcqLGxy'Nx 䱜.y>|^~e;V|ʴ~u=TjIIIڹsN<߲e$y~ p-ܢ1c'T&MMjҤImV_Ǐٳ]SN}]IRΝ+߀AaژfPg33$.'oג%Ku]Wu9]ZZRRR4b+!!AӧOΝ;xbzڻwv!IڳgNedde˖*))G}{N;wB@6/Լys :k3fUTT:(77WݻwwSVVRիZj׷~5o\3fBCCInWGaژfPg33$`{j*))X֭[J+::ZӦMӴi]gٲen+8p˞={5kx]p8ΐk^N}WzgԾ}{.D5/+VЫnߩ =lĹ1mu6:NnTrTT7n4c׼S ,w i2:Y38͠fPgI]6ֿs=իW/թScN׼OK/饗^Xδ1yYtSP y9W_bu6icfpLA͠ΰk^95kСCѣ*ic?IJKKӭުZ57,|du6.fpLA͠ΰk^Nz_ G1;g+.{饗E>JJJܖmV[lSf"μ۷O;w,<<\Ǐ7s! .ܳ+6mR&M gp;@w Ac lu\һwo7N_|ۋqzꩧ\?b ^yyty.Sǎ%IvZj:u3DM„39L3c lu\R~}]V&LPzԢE խ[WZjի6&I;vƎT#w@` 3/)))NͰ,KCK.5j*Pgsi3vp͋w~ƍU~}m_k^٣={jĈfB7MfPgs8bǴ ; {^4vX7ߩ8 AӼHR||o4i^JKK /w*BmXIImۦ^=2CMĄ39L3c lu\mXDDzLp J @\R޴1i2:Y38͠fPgI[oq˙z՘ ؋c+͑G!@ eȐ!ZG1+I1@Ɩ,Y jĈO}v\Rsgi׮]n9KGw Ac luܙSjȐ!8q+ֲeK]q[L~3/+V(w 7ܠŋ5V̠0m i3vpKXXmuٶmpO Io߾VnnV.X@۷3p6gyFvR>}TNյkW=NY%&&F˖-S^^u!կ__ݻw 7D q8\ku6'?+^ 6:Aa'׼HRHHz=z;H"z… 5fqڻw$;?go̠p i3vpѣGuWW^zW~$M6M&L>4|p+**J˫>: .@!!!z뭷*y=z٣5k۷ ZtigYYfiĉZp7nt-[._F5/sՓO>N:y,KLL_]-\Pz?A)))zԢE =BӼyOTO5/jҤe'OY+22RXhh233n:8p;vLÆ 㕘XF,ٜ|8͠fPgI5/͛7ג%K.[bڶm[m޼Y-[TDD[]vg?I1119r$7Up c*..Nb͞=[SLɓ+CaÆ8IÇvڵ+W*$$Ā@Ciu6icfpLA͠ΰk^F/R<xIҕW^)IuwɓC/7@ %44T E_ԭ[J~^Ϯ8c30{gVaa$駟~}09c;-+[ĉztHN?QXPaA=,/ΧW>ĉ'n*>sL͚5w~~C\ҼysM6M=zpq$͘1C'Ot:-[Hڷou-[СC^o>|~Gi%Nxz˻+ml=<˧㘎|{\C8q& Xp 1>s={+VRRuI^3f=3nիwM l6:Aa'wk׮YIJKKSJJFb%$$hڹs/^Z/55U{Վ;$ImڴQ6mUVV&Ij۶Y]k^F[oUeeeׯ˲6mZ}Ο?_cƌQvvԡC{uTZZs_|QT<=l6:Aa'+X_#G v0{qF0i{^&^\L5. μ<2dKM@4/cǎ~;+++K[VZ++ YǏn:39~m\ %oՃ33$ :Yu6L`"%w^&39u1:{v0g^>sKG$%i駟<7V y1J. xd+ ,bŠA ;}@7MfPgs8`u633-м@p8BPg;@ ;y` 4/jLX1:,3wAa'4/l-м5&Aa  ;̠ΰ@Ƅ39L2:{vBh^ [yAPcŠ`A ;y` 4/jLX1:,3wAa'aN Jdj@MFjc:Vh 6Ts&j*.` 4/jLX1:,3 ޣa'4/lA +fPgseu6:{4-м@Ƅ39Lg2:A=vBh^Ԙbu6LfPg3GNh^Ki኏WTTsS.SllujڱcBeY۷f͚'j…jܸӵlٲ3n[TT ͜9S+VФIfuE~g0'PU IDAT-\Pzw4x`IRnݔѣGkڵncK.j֬Ԉ#5wp8lN~V> @͠f ;̋Wdd222\Peffjݺu:p@+@eѼyflRnvڹRRR'Oj֭9rY-r lRA͠f ;1: z$ISmjҥjРK4/[Nڶm&NnݺiʕJHH8vCzrJyqī?WOʿ=_'[sL͚5w~~CѼP~}gW13K%I:uRJJO꥗^:v9[޺ĉ\h \uCRRvܩ'Oŷl"Ij߾}רQ#ڳg9g739}+s:A=vBCuq͞=+))QNN:uJoǎԦMs*иl̇4hĈ*..VBBO;wjŮRSSw^رC7nSFFڴi}zꩧԠA9_O ̥y8{3A͠f ;yk̘1VQQ:t\uݵNYYJKK]?tEiʔ)ڷo,R&MGyDM435m4M6u-[u߮APަ^m@yAP56:u$~u6:{4iclAo̠- lѰ@h^ w A:u6:{4-м 1a lә̠fPg3xм@h^Ԙbu6LfPg3GNh^ V̠0 lu6h [y` 4/lA +fPgsdu6:{4wQYǿ Ve kg ш( # (guADYD!\(05DCnHR}yRT疈-x+PͣLP͡ZDŋnJӦM (2޲e/_|@۶m+&@/  nֆ x78p ͛7EDDDD<漘h߾}|\uU̘1nؒ%KxOӸgz%W6~# QeڑEД*}k7/zY_/duΝ˼y ~SϮ;,iiiٓ5jrJBBB\s1נ/gi}6^/$E񳬥vdnϴ$ڑUlܪmYNlzq^iy7Xf%}qSA=nЪU+vMnnnm۶кu2OOOgϞ.bT*^пΞ=… X`DEEnFFzԩS|ԯ_ߌMsvK.lug2lG17$$$УGFENNL>ݻwT\Ϟ=ٿ?v̙3Ӈ;v0c IOO/\iӦDDDH)rӲtGŋ;v,ƍɓİd )(( ??Gas8̚5!C+H%i7[˕4_GDܧM!!!L6iӦLrrr6lHAAAe&""""4E~Cy6Oimdb)P͡}؉/aʳyԝʳ9gsh-vEDDDDDlAŋ؂/aʳyԝʳ9gsh-vEDDDDDlAŋx5uX1lug2lGx[P""""""EDDDDDlAŋx5uX1lug2lGx[P"^MV̡N'̙'$ҥeĦ'S59 d6atTxak&u3rq2r r:[_E fYj2  ^w:yvWuodqYFKrɬPv{7] :u@勈x=/""$&NFv/G#9ȖfX5Hto/r]R9L ݝMJ~*5k~98BiShVA#"eTWs8%:sm͛?{.uCou#; ja_`ϞE 1۔pK24E1LZDŋ~ :uҗ{uQÖ-z1ad_B׮VG*""AŋHep:˗Ês`Bc.GiTT,__hx/ƿˎF!ӺщER""R/>34^ac}VGt.- >Ƅq&'""x+<:;CNWw|IYw/*1a|6WQM^S""R-3ζM~%wog zM9K0do'S"^M4y~&._ukò oqo+֙~|!;DIt!HK8쾢7E[WR""w8S~,| lnZֈ/;Fp.P]Y3*^DD\w7]ĎNHO3gVͷUWYm!x;yDTk[>r[.)CS+̳otch^zhkt;q”XL۳9촏Q""!?aβA\*RPsGA0nXx+,N'lGCt4\{-̞mM,&Qw&s\RیCݺl N4ED<ϑ#%; [ v::av0lH!/"Yo>_?2z#qΝТiEecn8y$#G$** tŠ+\tRUW]52!Z/׭> 7pi.5&?4\~ѭ!/DD,I~7o'Ofҥԯ_}\K,aӦMtڕhuobSܢgLx&M&MK(dDdKp@ǎ0mLj[@۳9t,;Q֭[iڴ)E[lYT<׸D楗gO[X|}PJ t` YDlch^zsu,[Te*^DjQԽ;oou4"4ֆH( bi|=TS5}ODKŋ %]9?v Lep8tMEƖ,Y>{;^]xU{x.TZvdp8L޲vd24l'vnx_xm雒 v=T-vږ q Yxϝ;y&ŅVZm6Zn]i}1J[Ve\UIW ;wΘrP~tڢx\ym2gZgid*6nvbK]UlhJ>sZ* w&,i Ybf  *9̙3Yp!wuyyy,XX,Sv\^ybT=sn7h ]¬Ypdud"Jz:\y%g!6gjDxqCHHӦMcڴi.\llС :#.>mZ\3~fφ6mwmAnR)^5RN=zg_ 6msݻarh{ ՃuL ţ\(b'*^DVG!"E`~A|1%:^~&v VDlƜ6h¾w8`]yM<jִ::^zɘ/Cб:Hҙ)8ҧ19wF>\ ˖Al,oӦAVQP"^MVJp_ÿm|)76fmP裰w/|1G *ʸI5psgs(b'*^DٳˢCD./x#,^ ĉ7p5zщxuVlϙDu۴E cO?K\۫*PN4a_ee0s&_u=71E.""%Q"֯SBBo)?meultCN5_C*Fŋڶ 7LKT)93;˜]t"Ҭ9/}l佱dZG,vEĆ| E0__}S)"t4"51mִ&c뛭 LD,ī٭J.n۴])7Mqw3.әJYDŋHuߥ4'HrI:4Ӝ]|l7K4*^Dytr|_߶~ YF)f 6͘w]muD"RTTQr}LJRb[!Tmyw7 o0 oūU+yogl_ۘy6Igs\t9s (H^WoiwڞNT-/`H8whDD>RRYhnѸ_@|qqIḷ\Cy6Gs@E$ŷɺ6alo\_{yRyqAŋHY>< Fr啺 LDDJTT.~w!TBY&m5x/|Pv1g*VDD-oӌnU"vq:o>Y;qyw34\|Tp8i|03-Yߞ_(c%.""ۛd{ׯ!5˥L:o>NfM=<t\>}xnV= y.?jwz6(:٘G6lOthze/Wf1Dg:"mۻCX_ -ki-rW+FO2ANj#?*^ľN.{gpp[`jiǙ%ob<ʵ9gsx]?~h͟lOgڵѣ;+m.bk*^ `nXx3?nohWJ"""Rk|a2w"B:|NT{8qogx n"""ڶ5Ç^~MбqG=,ڢj;bc駍k~;vpze7§cGkc)'u>mE58ke/E3pu^Ê9g(P͡<_~2TXڸrf=O3hp 48rhfJ_wx8ѼXEDD䒝/w|lʦѡl(we5Uf%HQ"%;wZٔ>[QA,V̚e:j0l޼Gy6M@t44l"IDAT냿.O.=ݙ3pс@d$LPzpIJcmHa^"""Red8ef ]`c#? x4sɓ'9r$QQQѥKVXֺׯGԨQp=Zљ+(GyEɯ~ '9؟YÊ9g(P͡\~V"""%+ N޻!g:G9u:Y-ɧme,U.]JJJ saѪU+ƌúuJ]wĉ駟b\7Z^=yFQ{?=s''Ȭ@f2kK`2k[3Rvg(P͡<*l5_^ߠN'!yDdp&UV (eL44իWl\.] ݻsWx8tex9S59UC>uV6mJ@@Z-[,|${ٳnݺs-[d˖-.[؅ BCCK](uxy(cS!x<ʵ9gs(PNNiuUW_ͩS]2p@VXA޽sNZh)Sxꩧ<?CJ}_7""""GG]hժ|Ꮀ۶m(qN @ƍ^zs[mVzi)JпΞ=… X`DEE?7x#K,ԩS_}_~'ecnٳ'6mbʔ)DGG3}t>S/\fڵp۷ӹsg:uĸq駟&$$ 6`&"""""ә7$&&2p@ƍG߾}9pK,),\ /^-Xjz+Ç'../BER←MѣG9s k׮O>EINNfϞ=֍%99l?K/ɓӟDPP>>>^3gmڴzDGGϒ[)'JKK/KNKK']vSzu:tow|իWハ7)R{<=z#FРAo69b{r7Zm< /ٳ Zx榤bg{[n,_W^y~˝\oذŋӿi߾=?0=Qۏy999gp&&&;vXZZy}9N +;ֱXxtdT}}E>JӸZj[lM69sǏWFhb1xט1cFyҹ={l2"}ϸ@HHH5j(n(6EXXiiiŝ\XX~< GKuV=d6lHPPPRyVZETTuֵ:<@Ν#}WҫW/Y&r ;w8:ѦMԩSYn999lٲI&ѩSo\,mٲtڶm XX.uit,,cax222 -\ڵ H%6mL8P>> 4#G2`xghР#F2|p[o+ÇA֭ٽ{7>,aaa 6maʔ) ytЁZjѢE  +;ֱɳһx)Q){F,7gg֭ժUs6h9agnnEQۓ\ i{ݦW/y裏;vt:œ r8pǝ<8p9dgdd۝۷o0r/qp8=z(Nu,,٦H‹p:K8ZDDDDDL,/"""""b *^DDDDDT-x[P""""""EDDܲrJzMXX\veoXx /""'|B>}wa͚5tؑ$/TKݻw޽}%""HDD\JOOv. y7oN`` jբGlܸkDFFH֭1cFIIILJ 2p@Ë̙3i߾=AAA3x`>\T9*^DDĥ]?0vXvAI'y6l+Wdt֍4N>M||<+V_&))믿Ç3yb裏Rn]-Z x޽;97o&>>ӧOWn"DDRlLDD\:vwy')))ԬYΝ;s3l0={6Æ #))^z:ӧOgȑ]#F0{lҨU)))\{s=̞=p}ѤI}QNZ8~!4i«ȑ#+' ""b9yԩêUشi l޼Gy޽{ϊ+hҤI ]yE s֮][d[o-sRR 4Gݺuiݺ5k֬_ZDD?!&&0.{G9s&| +QQQeAݺu(2Vt_?44Խ_DDDlIŋ\???F̙3駟SN3' gӦM%.Xp!5*|HHወ x9Bddd~ s3o< zYу JN ?ڵkq̞={>[Tm]w-";;'Oo>.\ѣiР:۷gռΝ;ywɡYfjՊŋ{AVVӦM7dĉeٳ:t(хqǤIppa[z-h޼UiJnc""ҢE?>mIHH`DDD}^&OٷoAAAtԉW_}mF粱cgEf5j?pгgO+y79w'..ӴiS2"""VP""""""V"""""b *^DDDDDT-x[P""""""EDDDDDlAŋ؂/"""""b *^DDDDDT-x[P""""""EDDDDDlAŋ؂/"""""b *^DDDDDT-x[P""""""EDDDDDlAŋ؂!l_'WIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/imgs/original/iteract_plotraw.png000066400000000000000000000615601153663664300267520ustar00rootroot00000000000000PNG  IHDR/gQlsBIT|d pHYsaa?i IDATx{|ln@P.HP8Q$\")*7"bՂ!(j+,`b@$ Q" A xd~$M2;ݙ{gdfcٶm B@}Pp@(^ Wx /\+Pp@(^ Wx /\+Pp@(^ Wx /\+Pp@(^ Wx /\+Pp -\PG>C]|jٲ< EsHM&L ǣTtdL))):3|f͚%ǣ 682&) |x<>bccթS';V,+5JGjqQ]~ڱcn6͚5K'Nl톊`?nM^xanMzu?7J]vj\ORRR4aIҏ?_˗//e˖5zm6y}[1nذAm|N/힗JSNUբE %''k*(({駟V>}t)}}>׺ܹSƍS-[*--Mz~ӟ nZqqq:35i$}>O5i$uEqqqС:ܹo jΝ6mRSS۶mtתCSJJ&O\YuT˖-QFi۶m_[=/,%%E=ʃ}Pm۶gTTTdضO>WN4yd=zu55F}]۸{͞=[iii:SԦM]zտK.UFFch>y"P]m]|ƍ]s5ԩ֯_Zr򔔔6mh̙ Io~S9nӊ+tWsϕ$uڵ^;￯q)!!A+WC=[jժU>}'_ZkիWk̙Zv֭[XeK 2D]v߮bhZdu]~}饗|r 2DGVYY6mڤG}Tׯ׆ ]k~̙Zp߯YfUÛcm=t={h7n>SZzrrr4feggkƍ;vF7|S ,ݻ[o<ѣգG?K/G}TqqqǏkذaz뭷ԭ[7M0Az٣_~Y_N;4Iz%%%u 7hz+^S~smiΝ/~Do^rJ]s5jѢƌΝ;kΝ_kת@u\]vem[cǎU׮]Aw޵.WofopBUTy_]qq233ս{wM4IGU֭nwZnZ1B|ImڴIovVzjw5?(33Sӧ>|X999+?Qw}߶srroꫯСC;hٲez}vƾ}l˲!C-^ض,֭[Uۂ l˲g}ѣvbb})糎{Ƕ,˾[}ڻvjq v.կl˲;ڟ}YU{ii}%ؖeً-j/**cbbd3fmYlò,۲,WOmx;))oƴ~}+**1g۲,{>_|x^m|ͶeY)S|X;))>vXU̙3m˲WQQa:Զ,ϯu ^Oz?nݺ%%%>|v֭nݺٟ~Oʕ+m˲Z^^nQQQo7}t۲,/omYV5$탶>}w~-[ow7}w&NXm5@={IIIvllo߾vw0>>w />ec@ڷof͚YfרQt(;;ˮXB_&N .oܹjݺ/^\6m:vXsLL{1Ix-ZHeee6m'Gӟx`GGGi;쳫.ZbE:t޿"AT/VRR̙ӗ'~_gYV$N^+**JTVVyu֚7o^UW\\\قO>D֭SZZ_njڽ{6mӧsرc={:u7rHO999u׷~[EEE1b233}f͚6mԹW-#4hIիW/\QQQ>ߵpBEGG'&55UӦMӏ?E-wn馛$o4(^0~͞=[g֣>wyGGVnn.J.-ZT]k׮X޽;x 4ȯo߾{WquIgy)ٳg."IFcA)))IxI:%^3F뮻4n8=3رc8pZlyuz?ڞesR2yyyU,oї_~Y/qGcccկ_zX_+--L >uYgi޽~ߝt1GU_uMhO_K{gymSm`eYJLLTIIIuQ%$$t}Tww멧R.]tWV0n۶|A*(vjj6nܨ3gjժUz饗$I;w<[nEtL0^ޢs۴,K~m۬7 룮QӔ܇4 >N=TIvB};^ȶm}>ۨ>@yUz۫o{f3 XO=[o)&&ѣj:sb w믿zJ&Mi#GVݴFdxBٳ^˜l\uCQ̚Z]ÛɾRw!9h|\6y'r?|ǫGUQQQ ~^v~z[oU߾}5jJMMΝ;}xy _]ֵe˖zY$iС>Jj=={T-pJ7|Se-::Z^xf̘^xAvZIR=ԪU+mܸˑAm4x/%۸qc^o2R7'Li_h>bڵKݻwx^'دnժu릝;wM-5> P1zh%&&j~i:r~_'%%A7כl'=OPZZiӦIRՍRp7WCEE~_"s)4uTm۶ijӦFU՞!I~r)((?_9/p$ٶ]{abbb_R̙3}l٢ ())IW^ye|A%ay/q߮cǎoU8vYھ}͛UViڵѣ P1N8QZ̙3ޛU^^^btJMM+7̙3}楾I?]Fgk 1|m߾g۶5uTUTT|Zj={jÆ ㏫5eʔ6ĉYo>=㊍__pѲeK͟?_ƍu5Oƍo묳ܹs};CÇk_\uzcm':st5(>>^Vݻ5b?u)))zu=sոqԺuk]V۶mӀIӧ֯_t]r%*))QNNJKK=z|X˖-pBL-[LW]u {1bDyGa=ڴi ɑm=,[LsՐ!CxijӦgV~~-Z<]qjժ>ckZlYMO?;CVR>}g-_\-[llXڵӒ%K4vXGÇW=T^^{*77W}3˲׿U]v_Uy)((PFFFYff~[o՘1cԢE 4A|zzqƩ]v׿wyG^N6M7|kVZzbbbԡC3,&6m^}U-YD~#G_ѣG?Q]t }h&N i9/,\x<g99ԩSÇo'Mdwю='N!9xk}.ľ}G}>38;%%~Ҁ˽vff}ꩧ-Zz>~kgvvիW\cV=Ϸ/^\{ =zԾ۱vn)S|Mח_ewՎ=36jw+{ﵻufm۶Gy-fͲ=~z@&ͻkvmv޽턄;&&~fO0޻wKKKwygqqqYge~vqqk?[o;wlڧ~}u~z'Lver-gavZZ}뭷ov+//̴VZٙ[op lhf=}Ygٱ~}]GRRR|M{Μ9v=츸8cǎɓ}S3>^sM4I:uRllN;4?^s`{Q***RNNڴiKߥ):trrrt+77WZ~.";v́C* 8P_|$i…Zfk}}qToQ֭ѣu[qP}n [j޲eKIRLLL S/Mֈ#?A7oǵ}v͞=[\pנxib˗/\~)>>^}QVsh&T^^QF73<|=:p233:=D5a Zf^z%]}Ւtu]O?{7:fF+W:= W";sdg̑93Gvtl uU;oٲEԥKfVy ҥK%T檸X 5fuEwq:޽{k޽)))I'NtrPkߖei֬Y)!!A7n}ݧ|P_~5x`=CСC#Dz"$Y=/ٙ#;sdg̑93GvEe^8 g^ Wx /;<ٙ#;sdg̑9(^(f/3/\+PpfA1Gvٙ#;sdg$lc!( w Wx /\aYP̑93Gvٙ#;8+0Xb6 ]8ҮĉTRR"I*))ĉӔvz3μI%mVj ZFO I%'';9dg^G*GݧkϞxu&LX kA(^ecK͛ s@!YP̑93Gvٙ#;8 _Ue-Z:ʿW ^/vCe>^Æ Svv:w\`̑93Gvٙ#;sdZ1 IDAT< ^8 p@(^vx93Gvٙ#;sd'Qpf QF^8 g^ Wx /;̂b̑93GvI/\BQǙ@(^ #;sdg̑93Gvp W`lq+PphSRRlPyyʔKYJNNvzxIqKjk"KJJԿ8 I I:Cyy9aSp=93Gvٙ#;sdgec"++DOT޽+++۹@!6o.T@2Nȃ93GvI/,J?qs]/":\Rm)8.&ނ@bt={_")C%BfP^^ ~#;sdg̑93Gv.x\6eee(\p*w~ڻaeee;78R0Gvٙ#;sdg$hBUq $D?,,J?qsp ].S'gQ@i j-8UY$ԅ̑93GvI6maUQlcJM"ٙ#;sdg̑93Gvx Qͽs{ysʢ]4W> Q%Ds=/\+P 0 93Gvٙ#;sd'QpnQ^8 g^ Wx /;̂b̑93GvI/\BQǙ@(^ #;sdg̑93Gvp W`lq+PpCɓ5`h~2e=\%$$SNy睧p/CEEEQ6m4x`IolݺU/*Ы}n<##;sdg̑93Gvp7m˻pBtMՠA^_e˖YvՑ#Gpȇ93Gvٙ#;sd<μ_N=TE>l}ꫯbh_ ٙ#;sdg̑Du֩C:Ӝ N mV{N;N;ζ/^XK,j!x/dꪫ4rH2 Fb{Bq^FBمx.TKk qb;?[3S[lڴI#F /!v8nb[lW\ .@/9r ٙ#;sdg̑đt.]*@\+!!A_~vڥaÆ)!!Aw}];<67!A~WSRRTTTT@$[}K.C wx Qq 3y#;sdg̑93Gvp WಱiE]8(^ WxAasdg̑93GvNx 6 p|<μp@(^vٙ#;sdg̑9(^(f/3/\+PpfA1Gvٙ#;sdg$lc!*f())QVV vAٙ#;sdg̑D:EGKҐ?܎uJOOTPKotibOQ6Gvٙ#;sd'QNYJM!)OxzVKHggg5~(hvܰB.sT6o.TYY˕PpZ߹Kb/vٙ#;sdg̑9(^(N+Ǚw}zJƍСCGIVX={8<:5E;='~[[nձc$Ik׮?-XQ."ϼL:Uqqqڻw}.bmذ10 93Gvٙ#;sd'E䙗5khԩ|:uO?ԡMDySlll3Y<̑93Gvٙ#;8)"=zh֬Y>}4%"/u뭷h}_|I=s@M_sUEEEU[TTOٳg;8J< p|-^$izT\\mjذa:3$v`93Gvٙ#;sdgŋѲe4fR+vnsdg̑93Gvٙ#E mڴQRR@ᗂ93Gvٙ#;sd'Ed2tZg"rZwu91c< 3h F6{XfMc lq|rϞ=5jT#F裏>j1ռoBI:C KIhuWS!ٙ#;sdg̑$&&? +11QӶm[IÇ>Y#GZJn"jYY$o^&(JR?۲j?]f$yTZĶkn;jlz<նx1r f=N; 񸭽&j/֒%Kڽo^D/Ç׌3 ڷl٢O#Fh[}vUE.EGK"I劍=Gv~z*dY'~|e[T(6JKuSmշ[sہןvvC(Hi8CsM'P'Gb9kllΜ9jݺ222ԳgO]|ѣպuk͝;Qӯ_?~ZhO?/I=ztl'&u6vhuW7Ke=S:ss=We˖zO?tR-]T[l$jҥZz$)**Jso;S~X'NTZ!;;K3TYdThr_SR*%ez>ީ"AD?2XO_fSRRTTTTGG}WfΜگ!F͛ UVr=KŤ_R>8 ^D/<Çԩ9Fvnsdg̑93Gvٙ#EecSLQ~~~<{<"ue֭8p`.0Gvٙ#;sdgई,^~%$$kѢfDd񒒒M6W׮]yD˵^GyDoO/=#kDlcǏe] 6(55U:tUTTAi͚5jѢcd6 sdg̑93Gvٙ#Ed"IeeeZh֮]/Rɺtu)**s̑93Gvٙ#;sd-^˵b ޽[;wUW]x f8 ^/O<^{5+Um? 6Tyzծ];'Y p|aҥ:3},X 6覛nRaaD?CP9Ҿ}{=3+~>'|hIc=oڵkSCDen8 ^Ĝy9|N;m͛5dȐE.B߿߉!X\̑93GvISjJyϻvѣGujMS7o***$I .$]z>裏Աc93Gvٙ#;sd'E𐕕aÆ)55Uz5x`u+V;yseСzչsg}w?\ֵ^(&bfsf//bμ r0 93Gvٙ#;sd'Qp. QV//bfUIIUPCъ*SFF/egg)99~I!;d?9`6B ꣸NMbKyTaK-R:.,,t?%e2($ǖ:...vDec!ӊi«% ЛݧkϞJm4ar-XX>wx Q")^If~Pl9*-ր~K ԘckڱD~ٙ#;sdglcE)$yd۱<'nBIш.OgJje6߮!o5nev'Fvٙ#;8p4IKc+8pŲ:CEBʼn IyJMO+WűJIcKMj*gܰ }ͅ*+RttuDy47Gع͑93Gvٙ#;sdgec\3/! p|<μp@(^v,rzEvٙ#;sdg$lc!( w Wx /\aYP̑93Gvٙ#;8+0Xb6 ]8(^ WxAasdg̑93GvNx /`ݺuKԺukũgϞzGT^^x#;sdg̑93GvpKװa?hz5|po~9/M{џ'}رcU^-[ȑ#cp镔(++[;T^2edRvvcsl Tq|l4)SؖeGi=z\r|4@*..SSR-UؒmK嶔g OIh ɱ9_W6NZP+GMl׮]vv &{ѢEv\\ع͑Hn„'6ݻ_~|7ۍ8PoHv'f„NZ*̑9 5m۶iȑO$IQQQ3gNZ2V4Gv")^IPl9*-ր~K Ԙc dwlFjǎ Omldg̑]@t%o߾7oZnիW?j.kYFӶj*I3}x\=Nl?l˶cS{%ω~OۈRii0:VrۥOlzy5]}=j{[GdKYYUs۶RqS/TO/^XK,j!x/MlxTMl׮]ٳgUշo_k߾} li j-P.mo')/Dtɳ\aF̴۵kgw>&M-˲?쳀M6ٕU'ƌWӌZ76ʆ2 MlժU+5h {jժ^}U=;v^xᅀqC93iy%ysʢ]4gԧU]a|~I6PohvueI";ۘٙ#Q4UVӻᆱRuUǏ}ݧ؀˰s#;sdg̑93Gv%Ds \+Ppȇ93GvI/\BQ n IDATǙ@(^ #;sdg̑93Gvp W`lq+Pp@,(ٙ#;sdg̑Dm,D1@x.xy /\!ИJJJ*/VTT22z);;K/)dV~Gc̑93ט۩Cl)ϖ*lɶr[ʳSS؅a֯z/2NIBcoXqqq'w6dgG!ٙ#;sdg10aꉃ_;MvYva&LmĶ̑]m,D14\^UX@ϡPl9*-%7ڱ.xܰeeQ |+Ivl;@xrIUBUΦ(^a#==MRA-ҥmc1Gvٙk~ml]9SwƪM5f ~{f 7Bٙ#q~.sdg̑͛ UVr=K$ _UZ^^RȌݤ15Gv.x/! p|;D~™&v%ѣ;4g}رn͚5K111}pT> " B b%`ZP@VbP[*;PS"* t4P!t"ı+%2#fe Iv9+{R#;{dg쑝]uuf\(i$zIJIyX˔1<ݒ$U(9AI}b}oTbbbNkid:V6`UUUSNSURR\Z~}8^vO4"Hoh?U IVV^̟wxieW\q8bx㍾_K._l QpLSޱQSS3?=.tpO %$$7n_qtR[Ak+..SiviZn:O ybظNVߏ? *+ Rr=<ڰa xieݻ?CoS75vivڣSCl|bb}wu$`Or \Sjx%ؿuJMhh_mbcV6i$I͛7o,ǣaÆcZQ쑝=GvSvii0pI8ӳ&z sk?qCƏ믿^siΝzGb ͘1C^zi@QJj(2kTy**Znݟ|Psz?8?<[=ڰaӧ+'x SEEjk=z딖%&&/)}](^"7@t.t6(^8 #;{dg쑝=Gv' w Gx/QUP쑝=Gv#; G`jхq#Pp@*(#;{dg‰#Xb5 ](^8 G{@K~R{dg쑝=UWW+''OwW]WO%&&:5΋AD?=Gv#;{-ѣGMJ(#HHuF*7))Lee=jٵ7d:VP|3dgQ~$I#_:pV^QD(naUYIR/oWL:cSS3?|q~:AmGO%-cb ^o>Mu ?(^u\>=¹=Gv^Kf*iwէO~q!(^B%K^RRR橨hrZ., D<x hJz)--5{Tڏ](^"7@t.t6(^8 #;{dg쑝=Gv' w Gx/QUP쑝=Gv#; G`jхq#Pp@*(#;{dg‰#Xb5 ](^8K6mnFB҆mۦBu҅:Z#;{dg쑝=Gv'6r ͘1C>=fVvN$NPvUWW?ѯmяjcmdΜ9zWg.ۛj TWWkKrIT%yᇋRRVq2ed m[oTbbbeu.߅ ݻWڵkҔL!;{'Iw҃_:pMlYYK\]mj뮻J5\3I47\;˶0wDo'x UWWkѢE罭RFF_[qq$TN;N;d{mG c_7.In:O yqWw˘_[VhÆ 7>|XZt_HUSS/R:uRLLLbScc{UP"q~pIg qR{cv2'T_3ڽ:5~ml?S r 9c^.ש/mmJm㶱Vɓ{}Gzz*hRZZMvTDnpm[a&/hС*++{G+UVVɓ'{Q|X#;{dg](%a5)j!+9'__J<-?c۶iL>66Z99yTmG^oR}AS}gݶ-# wx }o߾/wxPх +y#;{dg쑝=Gv'mcˊхq#Pp@*(#;{dg‰#Xb5 ](^8 GxAa{dg쑝=GvDXm,B@t.t\y/#P =Gv#;{dpx6X tUWS*//G:BG8BS]]kJ.%^RRRVq2edl~ wxPΞIF-W~su[?+Zz REE3\kGKxAa{dg쑝=Gv]mG r11hI/J^onӪuU-Q{I푝=GvsRviiv7ѻ[}$j%Q *(%aIjXLZy**Zުyy9C36X tRQQZ:|OKkQD(n]m QIDGv#;{dpx6]8 W^8 Gx/:b쑝=Gv!(^8E(V.߅+/#PpDVAGv#;{dgN/"QDBǕ@(^8K+ۺu&O$(!!A7t~pO-j =Gv#;{dpV6yd}嗚^YYnwѣGƒ[p۷oرcuC0`V\7eee5yuo,ھ}F.] oم ͨQL\\Yjپ}曍5۷o"Ʈ]L̈́  7`\.ٱcG|r=c̟'ӱcGYG[oՌ7fӵkWc ٵn/:t[ox={*YS_ѣGuwW$˭2H׭[^z)>>w|]\.uwLݹ͟?_]tfϞ 54|܂[jn&ǐ]w޾#ކ5."Ν;+&&Fٵ~wp7JMMy4h_{rrbcc4ѣG5dIdw.>Ӓ%Ko>=\ݫZr<O@?5mzĉo-]viZ~'׫>}h޼y Ȯy{=UTT;}XCv͘1C 5k9oFڲeΝ+Z K%GcǎgϞǏرc/,SSS3f(>>^gϖDv璝kJ:vg}Vljkk5}tu]JKK :顇u]8UVVj…JOO׎;FnMRUU~a*))?CidLoDv]qڶm222ԻwoI w,Zg[ c4}tݻWEEEѣG5k;kj骩]wE'xBZhQ(C ]4M0AW\q͛_a]d_ 6o$1BǏҥK:C]]֭[t]~N{w5zh :T+WT.]yf=C]}A(^"@BBBj -!!A}d){UAA^|E=ٝKRR$Icǎg}x@YYYdׄÇ+77WK.U]] I '555/ձcGkݻkѾ…܂KHH~qiҥz7ɮJJJ'h~dܹsvi&uAcǎi6mٵyxo$֘վ}?C8qghŊZj&MGvgСuq 8Pٝ>ɓ'uw+>>裏k)..N˖-;Op7x&9$1 WVllLNv0`pi4tPٵp7ɓ*,,jƍ6lz9ˈ#ԳgO ~ׯ$?Ǵ"¼yOꩧҝwOvgѫxuޝ0tPJKKգG]y*++Ӕ)Sȯ9m۶iĈ)l޼ٯ}r6lٝU\\_g]pIIIzt ={HÇ]K28ѣM||YjyW̤I\`JKK=RXXh ̙32Yfq\7)--}TGyyyrL믛r߫7M6̟?lڴɼꫦL0\.OƑ]%%%|I%2?ټyٵkygL߾}Mlly7|-nt|ڵx<&!!\fӦMcɮyF !CΝ;kziLb}݀o1>ݻ1_~Yxq8 ꫯ6IIIgCv̵^k:w;ϟoN<7B2,7@@(^8 Gx/ځ|nܹEwa_[rrMv9rFe-? :ҥyobŊV=)@hC n-<6PVV;wjĈUϞ=#߿_cƌQll.=C:uT>-Iڳgn /ѡC$mv{[nѥ^%&&*33UoA<h>s}ݺ{uV~ZpV\'hȑ:~6lؠk??rn5p@]6`ܚ5ktu))))`}^UUgю;b :tHcƌ Z"@;W_i֭JKK$'?۵qFs='|R'NPIIw.I3f~?>Nsȑ#ի$w[o|8c_{6eر;vϵK.D[lĉ h[\yv*11W44h>#ߟ"Bjq-ِ;C~z_ۚ5kIDATԹsgr-Mn{6F ,Pu(&&F\r$߷'Q@;uy<|q%&&;hJϞ=5n8[NTWW^xA&MRlllۅM={.\o]%%%z7TQQ!I:q~mjU=z4=X[0SNUff|M9rD~NbxTWW_+((дi4|_-h S>뮻N;wԧ~kWaaa8q.bYFk֬QrrFbٻwo۷ϯ(`'Oyݚ5k9@d S͹2{l=?~{1]xz'll;vԔ)S /oќ9s9yL=ZxoF_V^h*--  qډӯZ H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F@IDATx]g@>pAdi%5&H#/E^{ADMLzU/(E@nXH74Y"Km#8l ={ʻEP$&(- &A2Md4 i$$HIL &&A2Md4 ~$'%O75]dSW[G0n&'%=4k4L(?>~u..X,vXE21ҠޜP mjLP$:rh___OE1@FtQkk¢{ K^_hckK21q& f1|,KH$wSuu֬]Ɔr1-֮[pws E))̌r>nl,/+jBZRR.X35sYu&IRK:LπuHHD"A%O8vWfEssshJ _($^1-H6xzHgΜ177ܥSi$roJxH$zk-,,m͚ᷘ5[]]jllzfEOyYߟ;' _~e\\SY,@^T}z2eK+,,\lf>x-L&WWW'HqcG ޱP(hkp>z9 I{ @Ӛ> +H `('p87mbI:9gcCST^)::..ͼfRYȮ%^۵+'<$Ӧ/iffll[[#""bЀXrq\L_pdr{|7HidϜ{Xe0K.}D6{y#tOOOPPPGg2,~MMMҖL''dee &֟]~m2V$I鞞SNhh}oLa2zTT]uu3 > !:ϯb%\.711jV+ذZxjᄒV24^YFdijťݾM>>Q|}}dD0۷o>xf###Q|>?//ʔHKKpļ<El6ߘEI8 /M2H'JBQW3L766(*P=7A)~. ?3==)=,\ c؊ 8==߭%ɀ,_ns/R:EavqㆥP x'-[/.^jbj e4 t>abbbzz:6?:Pٖ?*a3]RZaӃ2;qppx}Ŋ+W O7 (*,R&etWfODL QQQp))eZ$>S_DD_|1}ƌׯ43Y3|s3g o^ =zKX*- vQ`o*0~V>߼!&XaE 8ehя?-y\T\фjP\;` K|6=/[J0ƶD"VVufiS&CZZZ"ZZZ>kJ,h'f Zۆ6lZF+l6s=a+ifc2UVVv@hJJ2Uc)\K>X9Hpw4f=J҉dKh'3m0k 1 ȔM ctKK˂t:*~/T*UAdvPx<3`Ν2V&ǎiֱ9PT I4YӍGa7(s0}Scu#:SǏw^T@ yO6 EǫGl9{ [M7MciikZ ٩~7 ^*B{/ZZq]4"x ŽgƆFe*iv? Ϯ mGd˚߬++Pݲ-C'''gkt:_{Q|钒s 8!!EEE(nٲ`ldxO_37\xer * TGaa쀀BE23 FwPn6Ty_"nZ4ck@#cTX´2F$F-_ =V, ΎBGuPPPO/..P.Xĩ(g YPf-?wZV(_7 4QC}D,^hm K4p8ǎ/Ͽ_t/\ncCp76r+ _СCEGS^V$C *2=RO NMj޾>~ _~ŋXZXT^V qqmvvf)ͭpo/L.Ƥf޾3fH۽ΎN&cxA ӧXƚ>tc߽{WOWOZ_;[Aoy@Wg77cVVL?%2$'O;lڴ)[QeCL՛Jj~PfNIIh4DZZ4=NwXW --m;ۋ߿saGd#gh.k{ B$4  vQPX0P&iblllh14diR(Ծs%7p̾޳g~)_ͮ](,@<o S~{[ÉEnڲe,MVLL :0A%S1N^=Ṏ΄x'G'!m s۷oOE{,ƣcKA(>4$^a&ԽV: :iv i!A%~!`3QlU̙KcDbq[kkC}}yEEqII{Xs+'44O* _P &Ɍ|eA P6rb554?'>!!99z薚o@`uAiwҒ{zzznnNiii[w ttt]\{i>x1-Bkjj󻻻"CMMS5m| [XL׊MXI (- &A2Md4 i$$HIL &&A2Md4 ic yܻIENDB`pyevolve-0.6~rc1+svn398+dfsg/docs/source/index.rst000066400000000000000000000043451153663664300221350ustar00rootroot00000000000000 Welcome to Pyevolve documentation ! ================================================= .. raw:: html

    "*We can allow satellites, planets, suns, universe, nay whole systems of universe, to be governed by laws, but the smallest insect, we wish to be created at once by special act.*" \- **Charles R. Darwin, 1838** Pyevolve was developed to be a *complete genetic algorithm framework written in pure python*, but since the version 0.6, the framework also supports Genetic Programming, so in the near future, the framework will be more of an Evolutionary Computation framework than a simple GA framework. See the changes in the :ref:`whatsnew` section of this documentation. This is the documentation for the release v.\ |release|. See some plot screenshots on the :ref:`graphs_screens` section. You can download this manual also in other formats: `Pyevolve PDF Manual `__ v.\ |release| (*PDF*) *This is a PDF file version with this manual* `Pyevolve CHM Manual `__ v.\ |release| (*CHM - Windows Help*) *This is the CHM (Windows Help) version of this manual* Get Involved ! -------------------- Join with us in `Pyevolve mail-list `_. Development information and bug reports are in the `Trac `_, and please, feel free to create new tickets with criticisms or suggestions. Visit the project `blog site `_ and leave your comment. Contents -------------------------------------------------- .. toctree:: :maxdepth: 4 whatsnew intro getstarted modules graphs examples faq contributors license contact Index ----------------------------------- * :ref:`genindex` * :ref:`modindex` This documentation was updated on |today|. pyevolve-0.6~rc1+svn398+dfsg/docs/source/intro.rst000066400000000000000000000524211153663664300221570ustar00rootroot00000000000000 Introduction ============================================================ This is the documentation for Pyevolve release |release|. Since version 0.5, Pyevolve has changed in many aspects - many new features were added and **many** bugs were fixed. This documentation describes those changes, the new API and new features. Pyevolve was developed to be a *complete genetic algorithm framework written in pure python*. The main objectives of Pyevolve are: * **written in pure python**, to maximize the cross-platform aspect; * **easy to use API**, the API must be simple to use to the end-user; * **see the evolution**, the user must be able to see and *interact* with the evolution statistics, *graphs* and etc; * **extensible**, the API must be extensible, the user must be able to create new representations, genetic operators like crossover, mutation and etc; * **fast**, the design must be optimized for performance; * **common features**, the framework must implement the most common features of GA: selectors like roulette wheel, tournament, ranking, uniform. Scaling schemes like linear scaling, etc; * **default parameters**, There must be sensible defaults for all operators, settings, etc. * **open-source**, the source must be available to everyone. .. _requirements: Requirements ----------------------------------- Pyevolve can be executed on **Windows**, **Linux** and **Mac** platforms. .. note:: On the Mac platform, it's reported that *Pyevolve 0.5* can't enter the :term:`Interactive Mode`. Pyevolve can be executed under `Jython 2.5b1+ `_, but with some restrictions: * You can't use some features like the *SQLite3* adapter to dump statistics and *graphs* (unless you install Matplotlib on Jython, but I think that still isn't possible). Pyevolve can be executed under `IronPython 2.x `_, but with some restrictions: * You can't use some features like the *SQLite3* adapter to dump statistics and *graphs* (unless you install Matplotlib on Jython, but I think that still is not possible). * You must install a `zlib module `_ for IronPython. Pyevolve requires the following modules: * `Python 2.5+, v.2.6 is recommended `_ * **Optional, for graph plotting**: `Matplotlib 0.98.4+ `_ Matplotlib [#matplotlib]_ is required to plot the graphs. * **Optional, for real-time statistics visualization**: `VPython `_ VPython [#vvpython]_ is required to see real-time statistics visualization. * **Optional, for drawing GP Trees**: `Pydot 1.0.2+ `_ Pydot [#pydot]_ is used to plot the Genetic Programming Trees. * **Optional, for MySQL DB Adapter**: `MySQL for Python `_ MySQL-python [#mysqldb]_ is used by the MySQL DB Adapter. .. rubric:: Footnotes .. [#matplotlib] Matplotlib is Copyright (c) 2002-2008 John D. Hunter; All Rights Reserved .. [#vvpython] VPython was originated by David Scherer in 2000. .. [#pydot] Pydot was developed by Ero Carrera. .. [#mysqldb] MySQLdb was developed by Andy Dustman and contributors. .. _download_sec: Downloads ---------------------------------------------- Windows ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Installers for Microsoft Windows platform: `Pyevolve `__ v.\ |release| (*installer*) for Python 2.5 *This is an .exe installer for Microsoft Windows XP/Vista* `Pyevolve `__ v.\ |release| (*installer*) for Python 2.6 *This is an .exe installer for Microsoft Windows XP/Vista* `Pyevolve `__ v.\ |release| (*source code*) for Python 2.x *This is the source code* Linux ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Installation package for Linux platform: `Pyevolve `__ v.\ |release| (*source code*) for Python 2.x *This is the source code* Examples package ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Examples package for Pyevolve v.\ |release|: `Pyevolve examples `__ v.\ |release| (*examples*) *This is an package with the Pyevolve source code* Installation ----------------------------------- You can download the specific Pyevolve version from the :ref:`download_sec` section, or by using *easy_install*. The installation can be done the most easiest by using the *easy_install*: :: easy_install pyevolve You can upgrade your older version, too: :: easy_install --upgrade pyevolve or install a downloaded *egg package*: :: easy_install /downloads/downloaded_package.egg or install from an URL: :: easy_install http://site/package.egg This command will automatically search, download and install a suitable version of Pyevolve; once you have installed it, you can perform test for success: :: >>> import pyevolve >>> print pyevolve.__version__ 'v.0.6rc1' The *easy_install* utility is part of `setuptools `_. Once you have installed setuptools, you will find the easy_install.exe program in your Python Scripts subdirectory. Genetic Algorithm Features ----------------------------------- **Chromosomes / Representations** **1D List**, **2D List**, **1D Binary String**, **2D Binary String** and **Tree** .. note:: it is important to note that the 1D List, 2D List and Tree can carry any type of python objects or primitives. **Crossover Methods** **1D Binary String** Single Point Crossover, Two Point Crossover, Uniform Crossover **1D List** Single Point Crossover, Two Point Crossover, Uniform Crossover, OX Crossover, Edge Recombination Crossover, Cut and Crossfill Crossover, Real SBX Crossover **2D List** Uniform Crossover, Single Vertical Point Crossover, Single Horizontal Point Crossover **2D Binary String** Uniform Crossover, Single Vertical Point Crossover, Single Horizontal Point Crossover **Tree** Single Point Crossover, Strict Single Point Crossover **Mutator Methods** **1D Binary String** Swap Mutator, Flip Mutator **2D Binary String** Swap Mutator, Flip Mutator **1D List** Swap Mutator, Integer Range Mutator, Real Range Mutator, Integer Gaussian Mutator, Real Gaussian Mutator, Integer Binary Mutator, Allele Mutator, Simple Inversion Mutator **2D List** Swap Mutator, Integer Gaussian Mutator, Real Gaussian Mutator, Allele Mutator, Integer Range Mutator **Tree** Swap Mutator, Integer Range Mutator, Real Range Mutator, Integer Gaussian Mutator, Real Gaussian Mutator **Initializators** **1D Binary String** Binary String Initializator **2D Binary String** Binary String Initializator **1D List** Allele Initializator, Integer Initializator, Real Initializator **2D List** Allele Initializator, Integer Initializator, Real Initializator **Tree** Integer Initializator, Allele Initializator **Scaling Methods** Linear Scaling, Sigma Truncation Scaling and Power Law Scaling, Raw Scaling, Boltzmann Scaling, Exponential Scaling, Saturated Scaling **Selection Methods** Rank Selection, Uniform Selection, Tournament Selection, Tournament Selection Alternative (doesn't uses the Roulette Wheel), Roulette Wheel Selection Genetic Programming Features ----------------------------------- **Chromosomes / Representations** **Tree** .. warning:: the Tree of Genetic Programming is the class :class:`GTree.GTreeGP` and not the :class:`GTree.GTree` class of the Genetic Algorithm representation. **Crossover Methods** **Tree** Single Point Crossover **Mutator Methods** **Tree** Operation Mutator, Subtree mutator **Initializators** **Tree** Grow Initializator, Full Initializator, Ramped Half-n-Half **Scaling Methods** Linear Scaling, Sigma Truncation Scaling and Power Law Scaling, Raw Scaling, Boltzmann Scaling, Exponential Scaling, Saturated Scaling **Selection Methods** Rank Selection, Uniform Selection, Tournament Selection, Tournament Selection Alternative (doesn't uses the Roulette Wheel), Roulette Wheel Selection Genetic Algorithms Literature ------------------------------------ In this section, you will find study material to learn more about Genetic Algorithms. Books ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Goldberg, David E (1989)**, *Genetic Algorithms in Search, Optimization and Machine Learning*, Kluwer Academic Publishers, Boston, MA. **Goldberg, David E (2002)**, *The Design of Innovation: Lessons from and for Competent Genetic Algorithms*, Addison-Wesley, Reading, MA. **Fogel, David B (2006)**, *Evolutionary Computation: Toward a New Philosophy of Machine Intelligence*, IEEE Press, Piscataway, NJ. Third Edition **Holland, John H (1975)**, *Adaptation in Natural and Artificial Systems*, University of Michigan Press, Ann Arbor **Michalewicz, Zbigniew (1999)**, *Genetic Algorithms + Data Structures = Evolution Programs*, Springer-Verlag. .. seealso:: `Wikipedia: Genetic Algorithms `_ The Wikipedia article about Genetic Algorithms. Sites ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Introduction to Genetic Algorithms `_ A nice introduction by Marek Obitko. `A Field Guide to Genetic Programming `_ A book, freely downloadable under a Creative Commons license. `A Genetic Algorithm Tutorial by Darrell Whitley Computer Science Department Colorado State University `_ An excellent tutorial with lots of theory Genetic Programming Literature ------------------------------------ In this section, you will find study material to learn more about Genetic Programming. Books ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Poli, Riccardo; Langdon, William B.; McPhee, Nicholas F.**, *A Field Guide to Genetic Programming*, this book is also available online (a GREAT initiative from authors) in `Book Site `_ **Koza, John R.**, *Genetic Programming: On the Programming of Computers by Means of Natural Selection*, MIT Press, 1992. .. seealso:: `Wikipedia: Genetic Programming `_ The Wikipedia article about Genetic Programming. Sites ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Introduction to Genetic Programming `_ A nice collection of GP related content ! `A Field Guide to Genetic Programming `_ A book, freely downloadable under a Creative Commons license. `The Genetic Programming Bibliography `_ A very interesting initiative mantained by William Langdon, Steven Gustafson, and John Koza. Over than 6000 GP references ! Glossary / Concepts ---------------------------------- .. glossary:: Raw score The raw score represents the score returned by the :term:`Evaluation function`. This score is not scaled. Fitness score The fitness score is the scaled raw score. For example, if you use Linear Scaling (:func:`Scaling.LinearScaling`), the fitness score will be the raw score scaled with the Linear Scaling method. The fitness score represents how good the individual is relative to our population. Evaluation function Also called *Fitness Function* or *Objective Function*, the evaluation function is the function which evaluates the genome, giving it a raw score. The objective of this function is to quantify the solutions (individuals, chromosomes) .. seealso:: `Wikipedia: Fitness Function `_ An article talking about the Evaluation function, or the "Fitness Function". Sample genome The sample genome is the genome which is used as a configuration base for all the new replicated genomes. Interactive mode Pyevolve has an interactive mode. You can enter in this mode by pressing ESC key before the end of the evolution. When you press ESC, a python environment will load. In this environment, you are provided with some analysis functions and you can interact with the population of individuals at the specific generation. .. seealso:: Module :mod:`Interaction` The Interaction module. Step callback function This function, when attached to the GA Engine (:class:`GSimpleGA.GSimpleGA`), will be called every generation. It receives one parameter, the GA Engine by itself. Data Type Independent When a genetic operator is data type idependent, it will operate on different data types but not with different chromosome representations. For example, the :func:`Mutators.G1DListMutatorSwap` mutator will operate on Real, Allele or Integer :class:`G1DList.G1DList` chromosome, but not on :class:`G2DList.G2DList` chromosome. Standardized Fitness The standardized fitness restates the raw score so that a lower numerical value is always a better value. .. seealso:: `Genetic Programming: On the Programming of Computers by Means of Natural Selection `_ A book from John R. Koza about Genetic Programming. Adjusted Fitness The adjusted fitness is a measure computed from the Standardized Fitness. The Adjusted Fitness is always between 0 and 1 and it's always larger for better individuals. .. seealso:: `Genetic Programming: On the Programming of Computers by Means of Natural Selection `_ A book from John R. Koza about Genetic Programming. Non-terminal node The non-terminal node or non-terminal function is a function in a parse tree which is either a root or a branch in that tree. In GP, we call non-terminal nodes as "functions", the opposite of terminal nodes, which are the variables of the GP. .. seealso:: `Wikipedia: Genetic Algorithm `_ An article talking about Genetic Algorithms. `Wikipedia: Genetic Programming `_ The Wikipedia article about Genetic Programming. Other platforms and performance ============================================================ Running Pyevolve on Symbian OS (PyS60) --------------------------------------------------------------------------- Pyevolve is compatible with PyS60 2.0 (but older versions of the 1.9.x trunk should work fine too); PyS60 2.0 is a port of Python 2.5.4 core to the S60 smartphones, it was made by Nokia and it's Open Source. All smartphones based on the `S60 2nd and 3rd editions `_ should run PyS60, you can download it from the `Maemo garage project home `_. To install Pyevolve in PyS60 you simple need to copy the "pyevolve" package (you can use the sources of Pyevolve or even the "pyevolve" of your Python installation to the smartphone in a place that PyS60 can find it, usually in :file:`c:\\resource\\Python25`, for more information read the PyS60 documentation. The Genetic Algorithms and the Genetic Programming cores of Pyevolve was tested with PyS60 2.0, but to use Genetic Programming, you must explicitly define the funtions of the GP, like in :ref:`snippet_gp_explicit`. Of course not all features of Pyevolve are supported in PyS60, for example some DBAdapters and the graphical plotting tool, since no matplotlib port is available to PyS60 at the moment. Pyevolve was tested with PyS60 2.0 in a Nokia N78 and in a Nokia N73 smartphones. .. seealso:: `Croozeus.com - home to PyS60 developers `_ A lot of information and tutorials about PyS60, very recommended. `Python for S60 - OpenSource `_ The PyS60 project wiki. Running Pyevolve on Jython --------------------------------------------------------------------------- Jython is an implementation of Python language and its modules (not all unfortunatelly) which is designed to run over the Java platform. Pyevolve was tested against Jython 2.5.x and worked well, except for the Genetic Programming core which is taking a lot of memory, maybe a Jython issue with the Java JVM. You're highly encouraged to run Jython with the JVM "-server" option; this option will enable another VM JIT which is optimal for applications where the fast startup times isn't important, and the overall performance is what matters. This JIT of the "Server mode" has different policies to compile your code into native code, and it's well designed for long running applications, where the VM can profile and optimize better than the JIT of "Client mode". Pyevolve was tested against Jython 2.5.1 in Java v.1.6.0_18 Java(TM) SE Runtime Environment (build 1.6.0_18-b07) Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing) .. seealso:: `Jython `_ Official Jython project home. `Java HotSpot `_ The Java HotSpot Performance Engine Architecture. Running Pyevolve on IronPython --------------------------------------------------------------------------- IronPython is an open-source implementation of the Python programming language targeting the .NET Framework and Mono, written entirely in C# and created by Jim Hugunin. IronPython is currently language-compatible with Python 2.6. Pyevolve was tested against the IronPython 2.6 (2.6.10920.0) in a Windows XP SP3 with .NET 2.0.50727.3603. .. seealso:: `Official IronPython project home `_ Official IronPython project home. `Differences between IronPython and CPython `_ Documents with differences between IronPython and CPython (the official Python interepreter). `IronPython performance benchmarks `_ A lot of benchmarks and comparisons between IronPython and CPython. Running Pyevolve on iPod/iPhone --------------------------------------------------------------------------- The Genetic Algorithm core of Pyevolve was tested on iPod Touch 2G with the firmware v.3.1.2. To use it, you first must install the port of Python 2.5+ to the OS of iPod. You just need to put the Pyevolve package inside the directory where you'll call your application or just put it inside another place where the Python from iPod/iPhone can found in path. .. seealso:: `Miniguide to install Python on iPhone `_ Miniguide on how to install Python on iPhone Improving Pyevolve performance --------------------------------------------------------------------------- Pyevolve, at least for versions <= 0.6, has all modules written in pure Python, which enables some very useful features and portability, but sometimes at a cost to performance. Here are some ways users and developers uses to increase the performance of Pyevolve: **Psyco** Psyco is the well known Python specializing compiler, created by Armin Rigo. Psyco is very easy to use and can greatly speed up execution. **Cython** Cython is a specific language used to create C/C++ extensions for Python, it is based on the Python language itself, so if you think Psyco is not enought or aren't giving too much optimizations, you can use Cython to create your own C/C++ extensions; the best approach is to use Cython to build your :term:`Evaluation function`, which is usually the most consuming part of Genetic Algorithms. .. seealso:: `Psyco at Sourceforge.net `_ The official site of Psyco at Sourceforge.net `Psyco 2.0 binaries for Windows `_ Development of psyco was recently done by Christian Tismer. Here you'll find the binaries of Psyco 2.0 (Python 2.4, 2.5 and 2.6) for Windows. `Cython - C-Extensions for Python `_ Official Cython project home. pyevolve-0.6~rc1+svn398+dfsg/docs/source/license.rst000066400000000000000000000054111153663664300224430ustar00rootroot00000000000000 License ============================================== The Pyevolve license is based on the `PSF `_ license, which is GPL compatible license. .. centered:: LICENSE AGREEMENT FOR PYEVOLVE |version| 1. This LICENSE AGREEMENT is between Christian S. Perone ("CSP"), and the Individual or Organization ("Licensee") accessing and otherwise using Pyevolve software in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, CSP hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Pyevolve |version| alone or in any derivative version, provided, however, that CSP's License Agreement and CSP's notice of copyright, i.e., "Copyright (c) 2007-2010 Christian S. Perone; All Rights Reserved" are retained in Pyevolve |version| alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Pyevolve |version| or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Pyevolve |version|. 4. CSP is making Pyevolve |version| available to Licensee on an "AS IS" basis. CSP MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CSP MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF Pyevolve |version| WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. CSP SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF Pyevolve |version| FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING Pyevolve |version|, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between CSP and Licensee. This License Agreement does not grant permission to use CSP trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By copying, installing or otherwise using Pyevolve |version|, Licensee agrees to be bound by the terms and conditions of this License Agreement. Credits ============================================== Pyevolve was written by Christian S. Perone and is currently maintained by himself and it's contributors. pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_allele.rst000066400000000000000000000000571153663664300236250ustar00rootroot00000000000000 .. automodule:: GAllele :members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_const.rst000066400000000000000000000000521153663664300235100ustar00rootroot00000000000000 .. automodule:: Consts :members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_crossovers.rst000066400000000000000000000000561153663664300245760ustar00rootroot00000000000000 .. automodule:: Crossovers :members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_dbadapters.rst000066400000000000000000000001041153663664300244710ustar00rootroot00000000000000 .. automodule:: DBAdapters :members: :inherited-members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_functionslot.rst000066400000000000000000000000601153663664300251100ustar00rootroot00000000000000 .. automodule:: FunctionSlot :members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_g1dbinarystring.rst000066400000000000000000000001151153663664300254710ustar00rootroot00000000000000 .. automodule:: G1DBinaryString :members: :inherited-members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_g1dlist.rst000066400000000000000000000001051153663664300237300ustar00rootroot00000000000000 .. automodule:: G1DList :members: :inherited-members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_g2dbinarystring.rst000066400000000000000000000001151153663664300254720ustar00rootroot00000000000000 .. automodule:: G2DBinaryString :members: :inherited-members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_g2dlist.rst000066400000000000000000000001051153663664300237310ustar00rootroot00000000000000 .. automodule:: G2DList :members: :inherited-members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_genomebase.rst000066400000000000000000000001061153663664300244670ustar00rootroot00000000000000 .. automodule:: GenomeBase :members: :inherited-members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_gpopulation.rst000066400000000000000000000000631153663664300247250ustar00rootroot00000000000000 .. automodule:: GPopulation :members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_gsimplega.rst000066400000000000000000000000551153663664300243350ustar00rootroot00000000000000 .. automodule:: GSimpleGA :members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_gtree.rst000066400000000000000000000001031153663664300234650ustar00rootroot00000000000000 .. automodule:: GTree :members: :inherited-members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_initializators.rst000066400000000000000000000000621153663664300254300ustar00rootroot00000000000000 .. automodule:: Initializators :members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_interaction.rst000066400000000000000000000000571153663664300247060ustar00rootroot00000000000000 .. automodule:: Interaction :members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_migration.rst000066400000000000000000000001071153663664300243540ustar00rootroot00000000000000 .. automodule:: Migration :members: :inherited-members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_mutators.rst000066400000000000000000000000541153663664300242420ustar00rootroot00000000000000 .. automodule:: Mutators :members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_network.rst000066400000000000000000000001011153663664300240460ustar00rootroot00000000000000 .. automodule:: Network :members: :inherited-members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_pyevolve.rst000066400000000000000000000020471153663664300242410ustar00rootroot00000000000000.. automodule:: pyevolve General Modules ---------------------------------------------------------------------- Contents: .. toctree:: :maxdepth: 3 module_const module_util module_network module_migration module_interaction module_dbadapters module_functionslot module_statistics Genetic Algorithm Core Modules ---------------------------------------------------------------------- .. toctree:: :maxdepth: 3 module_gsimplega module_gpopulation Genetic Operators Modules ---------------------------------------------------------------------- .. toctree:: :maxdepth: 3 module_mutators module_crossovers module_initializators module_selectors module_scaling Chromosomes/Representation Modules ---------------------------------------------------------------------- .. toctree:: :maxdepth: 3 module_genomebase module_allele module_g1dbinarystring module_g2dbinarystring module_g1dlist module_g2dlist module_gtree pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_scaling.rst000066400000000000000000000000571153663664300240070ustar00rootroot00000000000000 .. automodule:: Scaling :members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_selectors.rst000066400000000000000000000000611153663664300243650ustar00rootroot00000000000000 .. automodule:: Selectors :members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_statistics.rst000066400000000000000000000000561153663664300245600ustar00rootroot00000000000000 .. automodule:: Statistics :members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/module_util.rst000066400000000000000000000000501153663664300233350ustar00rootroot00000000000000 .. automodule:: Util :members: pyevolve-0.6~rc1+svn398+dfsg/docs/source/modules.rst000066400000000000000000000003431153663664300224700ustar00rootroot00000000000000 Modules ==================================== Documentation of the all Pyevolve modules. All modules above listed are under the "pyevolve" namespace. Contents: .. toctree:: :maxdepth: 3 module_pyevolve pyevolve-0.6~rc1+svn398+dfsg/docs/source/sitemap.xml000066400000000000000000000127101153663664300224530ustar00rootroot00000000000000 http://pyevolve.sourceforge.net/ 2009-01-22 daily 0.8 http://pyevolve.sourceforge.net/genindex.html 2009-01-22 daily 0.8 http://pyevolve.sourceforge.net/modindex.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_const.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_util.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_interaction.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_dbadapters.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_functionslot.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_statistics.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_gsimplega.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_gpopulation.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_mutators.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_crossovers.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_initializators.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_selectors.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_scaling.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_genomebase.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_allele.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_g1dbinarystring.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_g1dlist.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_g2dlist.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/graphs.html 2009-01-22 daily 0.8 http://pyevolve.sourceforge.net/examples.html 2009-01-22 daily 0.8 http://pyevolve.sourceforge.net/faq.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/license.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/contact.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/intro.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/getstarted.html 2009-01-22 daily 0.7 http://pyevolve.sourceforge.net/modules.html 2009-01-22 daily 0.5 http://pyevolve.sourceforge.net/module_pyevolve.html 2009-01-22 daily 0.5 pyevolve-0.6~rc1+svn398+dfsg/docs/source/whatsnew.rst000066400000000000000000000173111153663664300226630ustar00rootroot00000000000000.. _whatsnew: What's new ? ============================================================ What's new on the release |release|: **Optimizations and bug-fixes** Added many general optimizations and bug-fixes. The code is more *pythonic* and stable now. **Documentation, documentation and documentation** Added documentation about the new GP core, new features, changes were done to reflect API changes here and there, etc... **Function Slots - Functions now have weights** Added a new `weight` parameter to the `add` method of the :class:`FunctionSlot.FunctionSlot` class. This parameter is used when you enable the *random apply* of the slot. See the class for more information. **Multiprocessing - the use of multiprocessign module** Added a new method to the :class:`GSimpleGA.GSimpleGA` class, the :meth:`GSimpleGA.GSimpleGA.setMultiProcessing` method. With this method you can enable the use of **multiprocessing** python module. When you enable this option, Pyevolve will check if you have more than one CPU core and if there is support to the multiprocessing use. You **must** see the warning on the :meth:`GSimpleGA.GSimpleGA.setMultiProcessing` method. **Scaling Scheme - the Boltzmann scaling** Added the Boltzmann scaling scheme, this scheme uses a temperature which is reduced each generation by a small amount. As the temperature decreases, the difference spread between the high and low fitnesses increases. See the description on the :func:`Scaling.BoltzmannScaling` function. **Scaling Scheme - Exponential and Saturated scaling** Added the Exponential and Saturated scaling schemes, using the exponential function to calculate the fitness values. See more in :func:`Scaling.ExponentialScaling` and :func:`Scaling.SaturatedScaling`. **Selectors - the alternative Tournament Selection** Added an alternative Tournament selection method, the :func:`Selectors.GTournamentAlternative`. This new Tournament Selector **don't uses** the Roulette Wheel method to pick individuals. **Statistics - two new statistical measures** Added the **fitTot** and the **rawTot** parameters to the :class:`Statistics.Statistics` class. See the class documentation for more information. **Elitism - replacement option** Added the method :meth:`GSimpleGA.GSimpleGA.setElitismReplacement`. This method is used to set the number of individuals cloned on the elitism. **String representation - resumeString** Added the method *resumeString* to all native chromosomes. This method returns a small as possible string representation of the chromosome. **DB Adapter - XML RPC** Added a new DB Adapter to send Pyevolve statistics, the XML RPC, to see more information, access the docs of the :class:`DBAdapters.DBXMLRPC`. **DB Adapters - OO redesigned** The DB Adapters were redesigned and now there is a super class for all DB Adapters, you can create your own DB Adapters subclassing the :class:`DBAdapters.DBBaseAdapter` class. **The Network module - lan/wan networking** Added the :mod:`Network` module, this module is used to keep all the networking related classes, currently it contains the threaded UDP client/server. **The Migration module - distributed GA** Added the :mod:`Migration` module, this module is used to control the migration of the distributed GA. **The G2DBinaryString module - the 2D Binary String** Added the :mod:`G2DBinaryString` module. This module contains the 2D Binary String chromosome representation. **1D chromosomes - new base class** All the 1D choromsomes representation is now extending the :class:`GenomeBase.G1DBase` base class. **Tree chromosome - new Tree representation chromosome** Added the module :mod:`GTree`, this module contains the new :class:`GTree.GTree` chromosome representation and all tree related functions and the :class:`GTree.GTreeGP` chromosome used by Genetic Programming. **VPython DB Adapter - real-time graph statistics** Added the new :class:`DBAdapters.DBVPythonGraph` class, this DB Adapter uses the VPython to create real-time statistics graphs. **MySQL DB Adapter - dump statistics to MySQL** Added the new :class:`DBAdapters.DBMySQLAdapter` class, this DB Adapter will dump statistics to a local or remote MySQL database. **Genetic Programming - Pyevolve now supports GP** Added new support for the Genetic Programming, you can check the examples with symbolic regression. The GTreeGP choromsome representation is used for the GP main tree. **Interactive mode - no more platform independent code** Code that was platform independent from the Interactive Mode was removed, so if you are unable to enter in the Interactive Mode using the ESC key, try using the method call to enter in the mode at a defined generation. **Mutators** Added the Simple Inversion Mutation (:func:`Mutators.G1DListMutatorSIM`) for G1DList genome. Added the Integer Range Mutation (:func:`Mutators.G2DListMutatorIntegerRange`) for the G2DList genome. Added the Binary String Swap Mutator (:func:`Mutators.G2DListMutatorIntegerRange`) for the G2DBinaryString genome. Added the Binary String Flip Mutator (:func:`Mutators.G2DBinaryStringMutatorFlip`) for the G2DBinaryString genome. Added the GTree Swap Mutator (:func:`Mutators.GTreeMutatorSwap`) for the GTree genome. Added the GTree Integer Range Mutator (:func:`Mutators.GTreeMutatorIntegerRange`) for the GTree genome. Added the GTree Integer Gaussian Mutator (:func:`Mutators.GTreeMutatorIntegerGaussian`) for the GTree genome. Added the GTree Real Range Mutator (:func:`Mutators.GTreeMutatorRealRange`) for the GTree genome. Added the GTree Real Gaussian Mutator (:func:`Mutators.GTreeMutatorRealGaussian`) for the GTree genome. Added the GTreeGP Operation Mutator (:func:`Mutators.GTreeGPMutatorOperation`) for the GTreeGP genome. Added the GTreeGP Subtree Mutator (:func:`Mutators.GTreeGPMutatorSubtree`) for the GTreeGP genome. **Crossovers** Added the Cut and Crossfill Crossover (:func:`Crossovers.G1DListCrossoverCutCrossfill`), used for permutations, for the G1DList genome. Added the Uniform Crossover (:func:`Crossovers.G2DBinaryStringXUniform`) for the G2DBinaryString genome. Added the Single Vert. Point Crossover (:func:`Crossovers.G2DBinaryStringXSingleVPoint`) for the G2DBinaryString genome. Added the Single Horiz. Point Crossover (:func:`Crossovers.G2DBinaryStringXSingleHPoint`) for the G2DBinaryString genome. Added the Single Point Crossover (:func:`Crossovers.GTreeCrossoverSinglePoint`) for the GTree genome. Added the Single Point Strict Crossover (:func:`Crossovers.GTreeCrossoverSinglePointStrict`) for the GTree genome. Added the Single Point Crossover (:func:`Crossovers.GTreeGPCrossoverSinglePoint`) for the GTreeGP genome. Added the SBX Crossover (:func:`Crossovers.G1DListCrossoverRealSBX`) for G1DList genome, thanks to Amit Saha. Added the Edge Recombination (:func:`Crossovers.G1DListCrossoverEdge`) for G1DList genome. **Initializators** Added the Integer Initializator (:func:`Initializators.G2DBinaryStringInitializator`) for the G2DBinaryString genome. Added the Integer Initializator (:func:`Initializators.GTreeInitializatorInteger`) for the GTree genome. Added the Allele Initializator (:func:`Initializators.GTreeInitializatorAllele`) for the GTree genome. Added the GTreeGP (Genetic Programming genome) Initializator (:func:`Initializators.GTreeGPInitializator`). It accept the methods: grow, full and ramped. pyevolve-0.6~rc1+svn398+dfsg/examples/000077500000000000000000000000001153663664300176545ustar00rootroot00000000000000pyevolve-0.6~rc1+svn398+dfsg/examples/LICENSE.TXT000066400000000000000000000044571153663664300213510ustar00rootroot000000000000001. This LICENSE AGREEMENT is between Christian S. Perone ("CSP"), and the Individual or Organization ("Licensee") accessing and otherwise using Pyevolve software in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, CSP hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Pyevolve 0.6 alone or in any derivative version, provided, however, that CSP's License Agreement and CSP's notice of copyright, i.e., "Copyright (c) 2007-2010 Christian S. Perone; All Rights Reserved" are retained in Pyevolve 0.6 alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Pyevolve 0.6 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Pyevolve 0.6. 4. CSP is making Pyevolve 0.6 available to Licensee on an "AS IS" basis. CSP MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CSP MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF Pyevolve 0.6 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. CSP SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF Pyevolve 0.6 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING Pyevolve 0.6, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between CSP and Licensee. This License Agreement does not grant permission to use CSP trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By copying, installing or otherwise using Pyevolve 0.6, Licensee agrees to be bound by the terms and conditions of this License Agreement.pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex10_g1dbinstr.py000066400000000000000000000017151153663664300247150ustar00rootroot00000000000000from pyevolve import G1DBinaryString from pyevolve import GSimpleGA from pyevolve import Selectors from pyevolve import Mutators # This function is the evaluation function, we want # to give high score to more zero'ed chromosomes def eval_func(chromosome): score = 0.0 # iterate over the chromosome for value in chromosome: if value == 0: score += 0.1 return score def run_main(): # Genome instance genome = G1DBinaryString.G1DBinaryString(50) # The evaluator function (objective function) genome.evaluator.set(eval_func) genome.mutator.set(Mutators.G1DBinaryStringMutatorFlip) # Genetic Algorithm Instance ga = GSimpleGA.GSimpleGA(genome) ga.selector.set(Selectors.GTournamentSelector) ga.setGenerations(70) # Do the evolution, with stats dump # frequency of 10 generations ga.evolve(freq_stats=20) # Best individual print ga.bestIndividual() if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex11_allele.py000066400000000000000000000036021153663664300242540ustar00rootroot00000000000000from pyevolve import G1DList from pyevolve import GSimpleGA from pyevolve import Mutators from pyevolve import Initializators from pyevolve import GAllele # This function is the evaluation function, we want # to give high score to more zero'ed chromosomes def eval_func(chromosome): score = 0.0 # iterate over the chromosome for value in chromosome: if value == 0: score += 0.5 # Remember from the allele set defined above # this value 'a' is possible at this position if chromosome[18] == 'a': score += 1.0 # Remember from the allele set defined above # this value 'xxx' is possible at this position if chromosome[12] == 'xxx': score += 1.0 return score def run_main(): # Genome instance setOfAlleles = GAllele.GAlleles() # From 0 to 10 we can have only some # defined ranges of integers for i in xrange(11): a = GAllele.GAlleleRange(0, i) setOfAlleles.add(a) # From 11 to 19 we can have a set # of elements for i in xrange(11, 20): # You can even add objects instead of strings or # primitive values a = GAllele.GAlleleList(['a','b', 'xxx', 666, 0]) setOfAlleles.add(a) genome = G1DList.G1DList(20) genome.setParams(allele=setOfAlleles) # The evaluator function (objective function) genome.evaluator.set(eval_func) # This mutator and initializator will take care of # initializing valid individuals based on the allele set # that we have defined before genome.mutator.set(Mutators.G1DListMutatorAllele) genome.initializator.set(Initializators.G1DListInitializatorAllele) # Genetic Algorithm Instance ga = GSimpleGA.GSimpleGA(genome) ga.setGenerations(40) # Do the evolution, with stats dump # frequency of 10 generations ga.evolve(freq_stats=5) # Best individual print ga.bestIndividual() if __name__ == "__main__": run_main()pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex12_tsp.py000066400000000000000000000070761153663664300236360ustar00rootroot00000000000000from pyevolve import G1DList, GAllele from pyevolve import GSimpleGA from pyevolve import Mutators from pyevolve import Crossovers from pyevolve import Consts import sys, random random.seed(1024) from math import sqrt PIL_SUPPORT = None try: from PIL import Image, ImageDraw, ImageFont PIL_SUPPORT = True except: PIL_SUPPORT = False cm = [] coords = [] CITIES = 100 WIDTH = 1024 HEIGHT = 768 LAST_SCORE = -1 def cartesian_matrix(coords): """ A distance matrix """ matrix={} for i,(x1,y1) in enumerate(coords): for j,(x2,y2) in enumerate(coords): dx, dy = x1-x2, y1-y2 dist=sqrt(dx*dx + dy*dy) matrix[i,j] = dist return matrix def tour_length(matrix, tour): """ Returns the total length of the tour """ total = 0 t = tour.getInternalList() for i in range(CITIES): j = (i+1)%CITIES total += matrix[t[i], t[j]] return total def write_tour_to_img(coords, tour, img_file): """ The function to plot the graph """ padding=20 coords=[(x+padding,y+padding) for (x,y) in coords] maxx,maxy=0,0 for x,y in coords: maxx, maxy = max(x,maxx), max(y,maxy) maxx+=padding maxy+=padding img=Image.new("RGB",(int(maxx),int(maxy)),color=(255,255,255)) font=ImageFont.load_default() d=ImageDraw.Draw(img); num_cities=len(tour) for i in range(num_cities): j=(i+1)%num_cities city_i=tour[i] city_j=tour[j] x1,y1=coords[city_i] x2,y2=coords[city_j] d.line((int(x1),int(y1),int(x2),int(y2)),fill=(0,0,0)) d.text((int(x1)+7,int(y1)-5),str(i),font=font,fill=(32,32,32)) for x,y in coords: x,y=int(x),int(y) d.ellipse((x-5,y-5,x+5,y+5),outline=(0,0,0),fill=(196,196,196)) del d img.save(img_file, "PNG") print "The plot was saved into the %s file." % (img_file,) def G1DListTSPInitializator(genome, **args): """ The initializator for the TSP """ lst = [i for i in xrange(genome.getListSize())] random.shuffle(lst) genome.setInternalList(lst) # This is to make a video of best individuals along the evolution # Use mencoder to create a video with the file list list.txt # mencoder mf://@list.txt -mf w=400:h=200:fps=3:type=png -ovc lavc # -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi # def evolve_callback(ga_engine): global LAST_SCORE if ga_engine.getCurrentGeneration() % 100 == 0: best = ga_engine.bestIndividual() if LAST_SCORE != best.getRawScore(): write_tour_to_img( coords, best, "tspimg/tsp_result_%d.png" % ga_engine.getCurrentGeneration()) LAST_SCORE = best.getRawScore() return False def main_run(): global cm, coords, WIDTH, HEIGHT coords = [(random.randint(0, WIDTH), random.randint(0, HEIGHT)) for i in xrange(CITIES)] cm = cartesian_matrix(coords) genome = G1DList.G1DList(len(coords)) genome.evaluator.set(lambda chromosome: tour_length(cm, chromosome)) genome.crossover.set(Crossovers.G1DListCrossoverEdge) genome.initializator.set(G1DListTSPInitializator) # 3662.69 ga = GSimpleGA.GSimpleGA(genome) ga.setGenerations(200000) ga.setMinimax(Consts.minimaxType["minimize"]) ga.setCrossoverRate(1.0) ga.setMutationRate(0.02) ga.setPopulationSize(80) # This is to make a video ga.stepCallback.set(evolve_callback) # 21666.49 import psyco psyco.full() ga.evolve(freq_stats=500) best = ga.bestIndividual() if PIL_SUPPORT: write_tour_to_img(coords, best, "tsp_result.png") else: print "No PIL detected, cannot plot the graph !" if __name__ == "__main__": main_run() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex13_sphere.py000066400000000000000000000013571153663664300243130ustar00rootroot00000000000000from pyevolve import G1DList from pyevolve import Mutators, Initializators from pyevolve import GSimpleGA, Consts # This is the Sphere Function def sphere(xlist): total = 0 for i in xlist: total += i**2 return total def run_main(): genome = G1DList.G1DList(140) genome.setParams(rangemin=-5.12, rangemax=5.13) genome.initializator.set(Initializators.G1DListInitializatorReal) genome.mutator.set(Mutators.G1DListMutatorRealGaussian) genome.evaluator.set(sphere) ga = GSimpleGA.GSimpleGA(genome, seed=666) ga.setMinimax(Consts.minimaxType["minimize"]) ga.setGenerations(1500) ga.setMutationRate(0.01) ga.evolve(freq_stats=500) best = ga.bestIndividual() if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex14_ackley.py000066400000000000000000000030021153663664300242630ustar00rootroot00000000000000from pyevolve import G1DList, GSimpleGA, Selectors from pyevolve import Initializators, Mutators, Consts, DBAdapters import math # This is the Rastringin Function, a deception function def ackley(xlist): sum1 = 0 score = 0 n = len(xlist) for i in xrange(n): sum1 += xlist[i]*xlist[i] t1 = math.exp(-0.2*(math.sqrt((1.0/5.0)*sum1))) sum1 = 0 for i in xrange(n): sum1 += math.cos(2.0*math.pi*xlist[i]); t2 = math.exp((1.0/5.0)*sum1); score = 20 + math.exp(1) - 20 * t1 - t2; return score def run_main(): # Genome instance genome = G1DList.G1DList(5) genome.setParams(rangemin=-8, rangemax=8, bestrawscore=0.00, rounddecimal=2) genome.initializator.set(Initializators.G1DListInitializatorReal) genome.mutator.set(Mutators.G1DListMutatorRealGaussian) # The evaluator function (objective function) genome.evaluator.set(ackley) # Genetic Algorithm Instance ga = GSimpleGA.GSimpleGA(genome) ga.setMinimax(Consts.minimaxType["minimize"]) ga.setGenerations(1000) ga.setMutationRate(0.04) ga.terminationCriteria.set(GSimpleGA.RawScoreCriteria) # Create DB Adapter and set as adapter # sqlite_adapter = DBAdapters.DBSQLite(identify="ackley") # ga.setDBAdapter(sqlite_adapter) # Do the evolution, with stats dump # frequency of 10 generations ga.evolve(freq_stats=50) # Best individual best = ga.bestIndividual() print "\nBest individual score: %.2f" % (best.getRawScore(),) print best if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex15_rosenbrock.py000066400000000000000000000021711153663664300251710ustar00rootroot00000000000000from pyevolve import G1DList, GSimpleGA, Selectors, Statistics from pyevolve import Initializators, Mutators, Consts, DBAdapters # This is the Rosenbrock Function def rosenbrock(xlist): sum_var = 0 for x in xrange(1, len(xlist)): sum_var += 100.0 * (xlist[x] - xlist[x-1]**2)**2 + (1 - xlist[x-1])**2 return sum_var def run_main(): # Genome instance genome = G1DList.G1DList(15) genome.setParams(rangemin=-1, rangemax=1.1) genome.initializator.set(Initializators.G1DListInitializatorReal) genome.mutator.set(Mutators.G1DListMutatorRealRange) # The evaluator function (objective function) genome.evaluator.set(rosenbrock) # Genetic Algorithm Instance ga = GSimpleGA.GSimpleGA(genome) ga.setMinimax(Consts.minimaxType["minimize"]) ga.selector.set(Selectors.GRouletteWheel) ga.setGenerations(4000) ga.setCrossoverRate(0.9) ga.setPopulationSize(100) ga.setMutationRate(0.03) ga.evolve(freq_stats=500) # Best individual best = ga.bestIndividual() print "\nBest individual score: %.2f" % (best.score,) print best if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex16_g2dbinstr.py000066400000000000000000000020211153663664300247130ustar00rootroot00000000000000from pyevolve import G2DBinaryString from pyevolve import GSimpleGA from pyevolve import Selectors from pyevolve import Crossovers from pyevolve import Mutators # This function is the evaluation function, we want # to give high score to more zero'ed chromosomes def eval_func(chromosome): score = 0.0 # iterate over the chromosome for i in xrange(chromosome.getHeight()): for j in xrange(chromosome.getWidth()): # You can use the chromosome.getItem(i, j) if chromosome[i][j]==0: score += 0.1 return score # Genome instance genome = G2DBinaryString.G2DBinaryString(8, 5) # The evaluator function (objective function) genome.evaluator.set(eval_func) genome.crossover.set(Crossovers.G2DBinaryStringXSingleHPoint) genome.mutator.set(Mutators.G2DBinaryStringMutatorSwap) # Genetic Algorithm Instance ga = GSimpleGA.GSimpleGA(genome) ga.setGenerations(200) # Do the evolution, with stats dump # frequency of 10 generations ga.evolve(freq_stats=10) # Best individual print ga.bestIndividual() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex17_gtree.py000066400000000000000000000017351153663664300241370ustar00rootroot00000000000000from pyevolve import GSimpleGA from pyevolve import GTree from pyevolve import Crossovers from pyevolve import Mutators import time import random def eval_func(chromosome): score = 0.0 # If you want to add score values based # in the height of the Tree, the extra # code is commented. #height = chromosome.getHeight() for node in chromosome: score += (100 - node.getData())*0.1 #if height <= chromosome.getParam("max_depth"): # score += (score*0.8) return score def run_main(): genome = GTree.GTree() root = GTree.GTreeNode(2) genome.setRoot(root) genome.processNodes() genome.setParams(max_depth=3, max_siblings=2, method="grow") genome.evaluator.set(eval_func) genome.crossover.set(Crossovers.GTreeCrossoverSinglePointStrict) ga = GSimpleGA.GSimpleGA(genome) ga.setGenerations(100) ga.setMutationRate(0.05) ga.evolve(freq_stats=10) print ga.bestIndividual() if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex18_gp.py000066400000000000000000000022141153663664300234310ustar00rootroot00000000000000from pyevolve import Util from pyevolve import GTree from pyevolve import GSimpleGA from pyevolve import Consts import math rmse_accum = Util.ErrorAccumulator() def gp_add(a, b): return a+b def gp_sub(a, b): return a-b def gp_mul(a, b): return a*b def gp_sqrt(a): return math.sqrt(abs(a)) def eval_func(chromosome): global rmse_accum rmse_accum.reset() code_comp = chromosome.getCompiledCode() for a in xrange(0, 5): for b in xrange(0, 5): evaluated = eval(code_comp) target = math.sqrt((a*a)+(b*b)) rmse_accum += (target, evaluated) return rmse_accum.getRMSE() def main_run(): genome = GTree.GTreeGP() genome.setParams(max_depth=4, method="ramped") genome.evaluator += eval_func ga = GSimpleGA.GSimpleGA(genome) ga.setParams(gp_terminals = ['a', 'b'], gp_function_prefix = "gp") ga.setMinimax(Consts.minimaxType["minimize"]) ga.setGenerations(50) ga.setCrossoverRate(1.0) ga.setMutationRate(0.25) ga.setPopulationSize(800) ga(freq_stats=10) best = ga.bestIndividual() print best if __name__ == "__main__": main_run() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex19_gp.py000066400000000000000000000044021153663664300234330ustar00rootroot00000000000000from pyevolve import GSimpleGA from pyevolve import GTree from pyevolve import Consts from pyevolve import Selectors from pyevolve import Mutators from math import sqrt import pydot import random def gp_add(a, b): assert len(a)==len(b) new_list = [x+y for x,y in zip(a,b)] return new_list #def gp_sub(a, b): # assert len(a)==len(b) # new_list = [x-y for x,y in zip(a,b)] # return new_list def prot_div(a, b): if b==0: return b else: return a/b #def gp_div(a,b): # assert len(a)==len(b) # new_list = [prot_div(x,float(y)) for x,y in zip(a,b)] # return new_list def gp_mul(a,b): assert len(a)==len(b) new_list = [x*y for x,y in zip(a,b)] return new_list def random_lists(size): list_a = [random.randint(1,20) for i in xrange(size)] list_b = [random.randint(1,20) for i in xrange(size)] return (list_a, list_b) def eval_func(chromosome): sz = 20 code_comp = chromosome.getCompiledCode() square_accum = 0.0 for j in xrange(sz): a, b = random_lists(5) target_list = gp_add(gp_mul(a,b),gp_mul(a,b)) ret_list = eval(code_comp) square_accum += (sum(target_list)-sum(ret_list))**2 RMSE = sqrt(square_accum / float(sz)) score = (1.0 / (RMSE+1.0)) return score def main_run(): genome = GTree.GTreeGP() root = GTree.GTreeNodeGP('a', Consts.nodeType["TERMINAL"]) genome.setRoot(root) genome.setParams(max_depth=2, method="ramped") genome.evaluator += eval_func genome.mutator.set(Mutators.GTreeGPMutatorSubtree) ga = GSimpleGA.GSimpleGA(genome) ga.setParams(gp_terminals = ['a', 'b'], gp_function_prefix = "gp") ga.setMinimax(Consts.minimaxType["maximize"]) ga.setGenerations(500) ga.setCrossoverRate(1.0) ga.setMutationRate(0.08) ga.setPopulationSize(80) ga(freq_stats=1) print ga.bestIndividual() graph = pydot.Dot() ga.bestIndividual().writeDotGraph(graph) graph.write_jpeg('tree.png', prog='dot') if __name__ == "__main__": main_run() #import hotshot, hotshot.stats #prof = hotshot.Profile("ev.prof") #prof.runcall(main_run) #prof.close() #stats = hotshot.stats.load("ev.prof") #stats.strip_dirs() #stats.sort_stats('time', 'calls') #stats.print_stats(20) pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex1_simple.py000066400000000000000000000030641153663664300242300ustar00rootroot00000000000000from pyevolve import G1DList from pyevolve import GSimpleGA from pyevolve import Selectors from pyevolve import Statistics from pyevolve import DBAdapters # This function is the evaluation function, we want # to give high score to more zero'ed chromosomes def eval_func(genome): score = 0.0 # iterate over the chromosome # The same as "score = len(filter(lambda x: x==0, genome))" for value in genome: if value==0: score += 1 return score def run_main(): # Genome instance, 1D List of 50 elements genome = G1DList.G1DList(50) # Sets the range max and min of the 1D List genome.setParams(rangemin=0, rangemax=10) # The evaluator function (evaluation function) genome.evaluator.set(eval_func) # Genetic Algorithm Instance ga = GSimpleGA.GSimpleGA(genome) # Set the Roulette Wheel selector method, the number of generations and # the termination criteria ga.selector.set(Selectors.GRouletteWheel) ga.setGenerations(500) ga.terminationCriteria.set(GSimpleGA.ConvergenceCriteria) # Sets the DB Adapter, the resetDB flag will make the Adapter recreate # the database and erase all data every run, you should use this flag # just in the first time, after the pyevolve.db was created, you can # omit it. sqlite_adapter = DBAdapters.DBSQLite(identify="ex1", resetDB=True) ga.setDBAdapter(sqlite_adapter) # Do the evolution, with stats dump # frequency of 20 generations ga.evolve(freq_stats=20) # Best individual print ga.bestIndividual() if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex20_gp_dotwrite.py000066400000000000000000000026101153663664300253430ustar00rootroot00000000000000from pyevolve import * import math rmse_accum = Util.ErrorAccumulator() def gp_add(a, b): return a+b def gp_sub(a, b): return a-b def gp_mul(a, b): return a*b def gp_sqrt(a): return math.sqrt(abs(a)) def eval_func(chromosome): global rmse_accum rmse_accum.reset() code_comp = chromosome.getCompiledCode() for a in xrange(0, 5): for b in xrange(0, 5): evaluated = eval(code_comp) target = math.sqrt((a*a)+(b*b)) rmse_accum += (target, evaluated) return rmse_accum.getRMSE() def step_callback(engine): if engine.getCurrentGeneration() == 0: GTree.GTreeGP.writePopulationDotRaw(engine, "pop.dot", 0, 40) return False def main_run(): genome = GTree.GTreeGP() genome.setParams(max_depth=6, method="ramped") genome.evaluator += eval_func genome.mutator.set(Mutators.GTreeGPMutatorSubtree) ga = GSimpleGA.GSimpleGA(genome, seed=666) ga.stepCallback.set(step_callback) ga.setParams(gp_terminals = ['a', 'b'], gp_function_prefix = "gp") ga.setMinimax(Consts.minimaxType["minimize"]) ga.setGenerations(2) ga.setCrossoverRate(1.0) ga.setMutationRate(0.08) ga.setPopulationSize(100) ga.setMultiProcessing(False) ga(freq_stats=5) #GTree.GTreeGP.writePopulationDotRaw(ga, "pop.dot", 0, 14) best = ga.bestIndividual() if __name__ == "__main__": main_run() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex21_nqueens.py000066400000000000000000000032211153663664300244720ustar00rootroot00000000000000from pyevolve import G1DList from pyevolve import Mutators, Crossovers from pyevolve import Consts, GSimpleGA from pyevolve import DBAdapters from random import shuffle # The "n" in n-queens BOARD_SIZE = 64 # The n-queens fitness function def queens_eval(genome): collisions = 0 for i in xrange(0, BOARD_SIZE): if i not in genome: return 0 for i in xrange(0, BOARD_SIZE): col = False for j in xrange(0, BOARD_SIZE): if (i != j) and (abs(i-j) == abs(genome[j]-genome[i])): col = True if col == True: collisions +=1 return BOARD_SIZE-collisions def queens_init(genome, **args): genome.genomeList = range(0, BOARD_SIZE) shuffle(genome.genomeList) def run_main(): genome = G1DList.G1DList(BOARD_SIZE) genome.setParams(bestrawscore=BOARD_SIZE, rounddecimal=2) genome.initializator.set(queens_init) genome.mutator.set(Mutators.G1DListMutatorSwap) genome.crossover.set(Crossovers.G1DListCrossoverCutCrossfill) genome.evaluator.set(queens_eval) ga = GSimpleGA.GSimpleGA(genome) ga.terminationCriteria.set(GSimpleGA.RawScoreCriteria) ga.setMinimax(Consts.minimaxType["maximize"]) ga.setPopulationSize(100) ga.setGenerations(250) ga.setMutationRate(0.02) ga.setCrossoverRate(1.0) #sqlite_adapter = DBAdapters.DBSQLite(identify="queens") #ga.setDBAdapter(sqlite_adapter) vpython_adapter = DBAdapters.DBVPythonGraph(identify="queens", frequency=1) ga.setDBAdapter(vpython_adapter) ga.evolve(freq_stats=10) best = ga.bestIndividual() print best print "Best individual score: %.2f\n" % (best.getRawScore(),) if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex22_monkey.py000066400000000000000000000034651153663664300243310ustar00rootroot00000000000000#=============================================================================== # Pyevolve version of the Infinite Monkey Theorem # See: http://en.wikipedia.org/wiki/Infinite_monkey_theorem # By Jelle Feringa #=============================================================================== from pyevolve import G1DList from pyevolve import GSimpleGA, Consts from pyevolve import Selectors from pyevolve import Initializators, Mutators, Crossovers import math sentence = """ 'Just living is not enough,' said the butterfly, 'one must have sunshine, freedom, and a little flower.' """ numeric_sentence = map(ord, sentence) def evolve_callback(ga_engine): generation = ga_engine.getCurrentGeneration() if generation%50==0: indiv = ga_engine.bestIndividual() print ''.join(map(chr,indiv)) return False def run_main(): genome = G1DList.G1DList(len(sentence)) genome.setParams(rangemin=min(numeric_sentence), rangemax=max(numeric_sentence), bestrawscore=0.00, gauss_mu=1, gauss_sigma=4) genome.initializator.set(Initializators.G1DListInitializatorInteger) genome.mutator.set(Mutators.G1DListMutatorIntegerGaussian) genome.evaluator.set(lambda genome: sum( [abs(a-b) for a, b in zip(genome, numeric_sentence)] )) ga = GSimpleGA.GSimpleGA(genome) #ga.stepCallback.set(evolve_callback) ga.setMinimax(Consts.minimaxType["minimize"]) ga.terminationCriteria.set(GSimpleGA.RawScoreCriteria) ga.setPopulationSize(60) ga.setMutationRate(0.02) ga.setCrossoverRate(0.9) ga.setGenerations(5000) ga.evolve(freq_stats=100) best = ga.bestIndividual() print "Best individual score: %.2f" % (best.score,) print ''.join(map(chr, best)) if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex2_realgauss.py000066400000000000000000000017331153663664300247270ustar00rootroot00000000000000from pyevolve import GSimpleGA from pyevolve import G1DList from pyevolve import Selectors from pyevolve import Initializators, Mutators # Find negative element def eval_func(genome): score = 0.0 for element in genome: if element < 0: score += 0.1 return score def run_main(): # Genome instance genome = G1DList.G1DList(20) genome.setParams(rangemin=-6.0, rangemax=6.0) # Change the initializator to Real values genome.initializator.set(Initializators.G1DListInitializatorReal) # Change the mutator to Gaussian Mutator genome.mutator.set(Mutators.G1DListMutatorRealGaussian) # The evaluator function (objective function) genome.evaluator.set(eval_func) # Genetic Algorithm Instance ga = GSimpleGA.GSimpleGA(genome) ga.selector.set(Selectors.GRouletteWheel) ga.setGenerations(100) # Do the evolution ga.evolve(freq_stats=10) # Best individual print ga.bestIndividual() if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex3_schaffer.py000066400000000000000000000027461153663664300245300ustar00rootroot00000000000000from pyevolve import G1DList, GSimpleGA, Selectors from pyevolve import Initializators, Mutators, Consts import math # This is the Schaffer F6 Function # This function has been conceived by Schaffer, it's a # multimodal function and it's hard for GAs due to the # large number of local minima, the global minimum is # at x=0,y=0 and there are many local minima around it def schafferF6(genome): t1 = math.sin(math.sqrt(genome[0]**2 + genome[1]**2)); t2 = 1.0 + 0.001*(genome[0]**2 + genome[1]**2); score = 0.5 + (t1*t1 - 0.5)/(t2*t2) return score def run_main(): # Genome instance genome = G1DList.G1DList(2) genome.setParams(rangemin=-100.0, rangemax=100.0, bestrawscore=0.0000, rounddecimal=4) genome.initializator.set(Initializators.G1DListInitializatorReal) genome.mutator.set(Mutators.G1DListMutatorRealGaussian) # The evaluator function (objective function) genome.evaluator.set(schafferF6) # Genetic Algorithm Instance ga = GSimpleGA.GSimpleGA(genome) ga.selector.set(Selectors.GRouletteWheel) ga.setMinimax(Consts.minimaxType["minimize"]) ga.setGenerations(8000) ga.setMutationRate(0.05) ga.setPopulationSize(100) ga.terminationCriteria.set(GSimpleGA.RawScoreCriteria) # Do the evolution, with stats dump # frequency of 10 generations ga.evolve(freq_stats=250) # Best individual best = ga.bestIndividual() print best print "Best individual score: %.2f" % best.getRawScore() if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex4_sigmatrunc.py000066400000000000000000000022741153663664300251200ustar00rootroot00000000000000from pyevolve import G1DList from pyevolve import GSimpleGA from pyevolve import Selectors from pyevolve import Initializators, Mutators from pyevolve import Scaling from pyevolve import Consts import math def eval_func(ind): score = 0.0 var_x = ind[0] var_z = var_x**2+2*var_x+1*math.cos(var_x) return var_z def run_main(): # Genome instance genome = G1DList.G1DList(1) genome.setParams(rangemin=-60.0, rangemax=60.0) # Change the initializator to Real values genome.initializator.set(Initializators.G1DListInitializatorReal) # Change the mutator to Gaussian Mutator genome.mutator.set(Mutators.G1DListMutatorRealGaussian) # Removes the default crossover genome.crossover.clear() # The evaluator function (objective function) genome.evaluator.set(eval_func) # Genetic Algorithm Instance ga = GSimpleGA.GSimpleGA(genome) ga.setMinimax(Consts.minimaxType["minimize"]) pop = ga.getPopulation() pop.scaleMethod.set(Scaling.SigmaTruncScaling) ga.selector.set(Selectors.GRouletteWheel) ga.setGenerations(100) # Do the evolution ga.evolve(10) # Best individual print ga.bestIndividual() if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex5_callback.py000066400000000000000000000022241153663664300244740ustar00rootroot00000000000000from pyevolve import G1DList from pyevolve import GSimpleGA from pyevolve import Selectors # The step callback function, this function # will be called every step (generation) of the GA evolution def evolve_callback(ga_engine): generation = ga_engine.getCurrentGeneration() if generation % 100 == 0: print "Current generation: %d" % (generation,) print ga_engine.getStatistics() return False # This function is the evaluation function, we want # to give high score to more zero'ed chromosomes def eval_func(genome): score = 0.0 # iterate over the chromosome for value in genome: if value==0: score += 0.1 return score def run_main(): # Genome instance genome = G1DList.G1DList(200) genome.setParams(rangemin=0, rangemax=10) # The evaluator function (objective function) genome.evaluator.set(eval_func) # Genetic Algorithm Instance ga = GSimpleGA.GSimpleGA(genome) ga.selector.set(Selectors.GRouletteWheel) ga.setGenerations(800) ga.stepCallback.set(evolve_callback) # Do the evolution ga.evolve() # Best individual print ga.bestIndividual() if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex6_dbadapter.py000066400000000000000000000023451153663664300246730ustar00rootroot00000000000000from pyevolve import G1DList from pyevolve import GSimpleGA from pyevolve import Selectors from pyevolve import DBAdapters from pyevolve import Statistics # This function is the evaluation function, we want # to give high score to more zero'ed chromosomes def eval_func(chromosome): score = 0.0 # iterate over the chromosome for value in chromosome: if value==0: score += 0.5 return score # Genome instance genome = G1DList.G1DList(100) genome.setParams(rangemin=0, rangemax=10) # The evaluator function (objective function) genome.evaluator.set(eval_func) # Genetic Algorithm Instance ga = GSimpleGA.GSimpleGA(genome, 666) ga.setGenerations(80) ga.setMutationRate(0.2) # Create DB Adapter and set as adapter #sqlite_adapter = DBAdapters.DBSQLite(identify="ex6", resetDB=True) #ga.setDBAdapter(sqlite_adapter) # Using CSV Adapter #csvfile_adapter = DBAdapters.DBFileCSV() #ga.setDBAdapter(csvfile_adapter) # Using the URL Post Adapter # urlpost_adapter = DBAdapters.DBURLPost(url="http://whatismyip.oceanus.ro/server_variables.php", post=False) # ga.setDBAdapter(urlpost_adapter) # Do the evolution, with stats dump # frequency of 10 generations ga.evolve(freq_stats=10) # Best individual #print ga.bestIndividual() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex7_rastrigin.py000066400000000000000000000021421153663664300247430ustar00rootroot00000000000000from pyevolve import GSimpleGA from pyevolve import G1DList from pyevolve import Mutators, Initializators from pyevolve import Selectors from pyevolve import Consts import math # This is the Rastrigin Function, a deception function def rastrigin(genome): n = len(genome) total = 0 for i in xrange(n): total += genome[i]**2 - 10*math.cos(2*math.pi*genome[i]) return (10*n) + total def run_main(): # Genome instance genome = G1DList.G1DList(20) genome.setParams(rangemin=-5.2, rangemax=5.30, bestrawscore=0.00, rounddecimal=2) genome.initializator.set(Initializators.G1DListInitializatorReal) genome.mutator.set(Mutators.G1DListMutatorRealGaussian) genome.evaluator.set(rastrigin) # Genetic Algorithm Instance ga = GSimpleGA.GSimpleGA(genome) ga.terminationCriteria.set(GSimpleGA.RawScoreCriteria) ga.setMinimax(Consts.minimaxType["minimize"]) ga.setGenerations(3000) ga.setCrossoverRate(0.8) ga.setPopulationSize(100) ga.setMutationRate(0.06) ga.evolve(freq_stats=50) best = ga.bestIndividual() print best if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex8_gauss_int.py000066400000000000000000000021701153663664300247370ustar00rootroot00000000000000from pyevolve import G1DList from pyevolve import GSimpleGA from pyevolve import Selectors from pyevolve import Mutators # This function is the evaluation function, we want # to give high score to more zero'ed chromosomes def eval_func(chromosome): score = 0.0 # iterate over the chromosome for value in chromosome: if value==0: score += 0.1 return score def run_main(): # Genome instance genome = G1DList.G1DList(40) # The gauss_mu and gauss_sigma is used to the Gaussian Mutator, but # if you don't specify, the mutator will use the defaults genome.setParams(rangemin=0, rangemax=10, gauss_mu=4, gauss_sigma=6) genome.mutator.set(Mutators.G1DListMutatorIntegerGaussian) # The evaluator function (objective function) genome.evaluator.set(eval_func) # Genetic Algorithm Instance ga = GSimpleGA.GSimpleGA(genome) #ga.selector.set(Selectors.GRouletteWheel) ga.setGenerations(800) # Do the evolution, with stats dump # frequency of 10 generations ga.evolve(freq_stats=150) # Best individual print ga.bestIndividual() if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/examples/pyevolve_ex9_g2dlist.py000066400000000000000000000022211153663664300243110ustar00rootroot00000000000000from pyevolve import G2DList from pyevolve import GSimpleGA from pyevolve import Selectors from pyevolve import Crossovers from pyevolve import Mutators # This function is the evaluation function, we want # to give high score to more zero'ed chromosomes def eval_func(chromosome): score = 0.0 # iterate over the chromosome for i in xrange(chromosome.getHeight()): for j in xrange(chromosome.getWidth()): # You can use the chromosome.getItem(i, j) too if chromosome[i][j]==0: score += 0.1 return score def run_main(): # Genome instance genome = G2DList.G2DList(8, 5) genome.setParams(rangemin=0, rangemax=100) # The evaluator function (objective function) genome.evaluator.set(eval_func) genome.crossover.set(Crossovers.G2DListCrossoverSingleHPoint) genome.mutator.set(Mutators.G2DListMutatorIntegerRange) # Genetic Algorithm Instance ga = GSimpleGA.GSimpleGA(genome) ga.setGenerations(800) # Do the evolution, with stats dump # frequency of 10 generations ga.evolve(freq_stats=100) # Best individual print ga.bestIndividual() if __name__ == "__main__": run_main() pyevolve-0.6~rc1+svn398+dfsg/pyevolve/000077500000000000000000000000001153663664300177075ustar00rootroot00000000000000pyevolve-0.6~rc1+svn398+dfsg/pyevolve/Consts.py000066400000000000000000000365561153663664300215510ustar00rootroot00000000000000""" :mod:`Consts` -- constants module ============================================================================ Pyevolve have defaults in all genetic operators, settings and etc, this is an issue to helps the user in the API use and minimize the source code needed to make simple things. In the module :mod:`Consts`, you will find those defaults settings. You are encouraged to see the constants, but not to change directly on the module, there are methods for this. General constants ---------------------------------------------------------------------------- .. attribute:: CDefPythonRequire The mininum version required to run Pyevolve. .. attribute:: CDefLogFile The default log filename. .. attribute:: CDefLogLevel Default log level. .. attribute:: sortType Sort type, raw or scaled. Example: >>> sort_type = Consts.sortType["raw"] >>> sort_type = Consts.sortType["scaled"] .. attribute:: minimaxType The Min/Max type, maximize or minimize the evaluation function. Example: >>> minmax = Consts.minimaxType["minimize"] >>> minmax = Consts.minimaxType["maximize] .. attribute:: CDefESCKey The ESC key ASCII code. Used to start Interactive Mode. .. attribute:: CDefRangeMin Minimum range. This constant is used as integer and real max/min. .. attribute:: CDefRangeMax Maximum range. This constant is used as integer and real max/min. .. attribute:: CDefBroadcastAddress The broadcast address for UDP, 255.255.255.255 .. attribute:: CDefImportList The import list and messages .. attribute:: nodeType The genetic programming node types, can be "TERMINAL":0 or "NONTERMINAL":1 .. attribute:: CDefGPGenomes The classes which are used in Genetic Programming, used to detected the correct mode when starting the evolution Selection methods constants (:mod:`Selectors`) ---------------------------------------------------------------------------- .. attribute:: CDefTournamentPoolSize The default pool size for the Tournament Selector (:func:`Selectors.GTournamentSelector`). Scaling scheme constants (:mod:`Scaling`) ---------------------------------------------------------------------------- .. attribute:: CDefScaleLinearMultiplier The multiplier of the Linear (:func:`Scaling.LinearScaling`) scaling scheme. .. attribute:: CDefScaleSigmaTruncMultiplier The default Sigma Truncation (:func:`Scaling.SigmaTruncScaling`) scaling scheme. .. attribute:: CDefScalePowerLawFactor The default Power Law (:func:`Scaling.PowerLawScaling`) scaling scheme factor. .. attribute:: CDefScaleBoltzMinTemp The default mininum temperature of the (:func:`Scaling.BoltzmannScaling`) scaling scheme factor. .. attribute:: CDefScaleBoltzFactor The default Boltzmann Factor of (:func:`Scaling.BoltzmannScaling`) scaling scheme factor. This is the factor that the temperature will be subtracted. .. attribute:: CDefScaleBoltzStart The default Boltzmann start temperature (:func:`Scaling.BoltzmannScaling`). If you don't set the start temperature parameter, this will be the default initial temperature for the Boltzmann scaling scheme. Population constants (:class:`GPopulation.GPopulation`) ---------------------------------------------------------------------------- .. attribute:: CDefPopSortType Default sort type parameter. .. attribute:: CDefPopMinimax Default min/max parameter. .. attribute:: CDefPopScale Default scaling scheme. 1D Binary String Defaults (:class:`G1DBinaryString.G1DBinaryString`) ---------------------------------------------------------------------------- .. attribute:: CDefG1DBinaryStringMutator The default mutator for the 1D Binary String (:class:`G1DBinaryString.G1DBinaryString`) chromosome. .. attribute:: CDefG1DBinaryStringCrossover The default crossover method for the 1D Binary String (:class:`G1DBinaryString.G1DBinaryString`) chromosome. .. attribute:: CDefG1DBinaryStringInit The default initializator for the 1D Binary String (:class:`G1DBinaryString.G1DBinaryString`) chromosome. .. attribute:: CDefG1DBinaryStringUniformProb The default uniform probability used for some uniform genetic operators for the 1D Binary String (:class:`G1DBinaryString.G1DBinaryString`) chromosome. 2D Binary String Defaults (:class:`G2DBinaryString.G2DBinaryString`) ---------------------------------------------------------------------------- .. attribute:: CDefG2DBinaryStringMutator The default mutator for the 2D Binary String (:class:`G2DBinaryString.G2DBinaryString`) chromosome. .. attribute:: CDefG2DBinaryStringCrossover The default crossover method for the 2D Binary String (:class:`G2DBinaryString.G2DBinaryString`) chromosome. .. attribute:: CDefG2DBinaryStringInit The default initializator for the 2D Binary String (:class:`G2DBinaryString.G2DBinaryString`) chromosome. .. attribute:: CDefG2DBinaryStringUniformProb The default uniform probability used for some uniform genetic operators for the 2D Binary String (:class:`G2DBinaryString.G2DBinaryString`) chromosome. 1D List chromosome constants (:class:`G1DList.G1DList`) ---------------------------------------------------------------------------- .. attribute:: CDefG1DListMutIntMU Default *mu* value of the 1D List Gaussian Integer Mutator (:func:`Mutators.G1DListMutatorIntegerGaussian`), the *mu* represents the mean of the distribution. .. attribute:: CDefG1DListMutIntSIGMA Default *sigma* value of the 1D List Gaussian Integer Mutator (:func:`Mutators.G1DListMutatorIntegerGaussian`), the *sigma* represents the standard deviation of the distribution. .. attribute:: CDefG1DListMutRealMU Default *mu* value of the 1D List Gaussian Real Mutator (:func:`Mutators.G1DListMutatorRealGaussian`), the *mu* represents the mean of the distribution. .. attribute:: CDefG1DListMutRealSIGMA Default *sigma* value of the 1D List Gaussian Real Mutator (:func:`Mutators.G1DListMutatorRealGaussian`), the *sigma* represents the mean of the distribution. Tree chromosome constants (:class:`GTree.GTree`) ---------------------------------------------------------------------------- .. attribute:: CDefGTreeInit Default initializator of the tree chromosome. .. attribute:: CDefGGTreeMutator Default mutator of the tree chromosome. .. attribute:: CDefGTreeCrossover Default crossover of the tree chromosome. 2D List chromosome constants (:class:`G2DList.G2DList`) ---------------------------------------------------------------------------- .. attribute:: CDefG2DListMutRealMU Default *mu* value of the 2D List Gaussian Real Mutator (:func:`Mutators.G2DListMutatorRealGaussian`), the *mu* represents the mean of the distribution. .. attribute:: CDefG2DListMutRealSIGMA Default *sigma* value of the 2D List Gaussian Real Mutator (:func:`Mutators.G2DListMutatorRealGaussian`), the *sigma* represents the mean of the distribution. .. attribute:: CDefG2DListMutIntMU Default *mu* value of the 2D List Gaussian Integer Mutator (:func:`Mutators.G2DListMutatorIntegerGaussian`), the *mu* represents the mean of the distribution. .. attribute:: CDefG2DListMutIntSIGMA Default *sigma* value of the 2D List Gaussian Integer Mutator (:func:`Mutators.G2DListMutatorIntegerGaussian`), the *sigma* represents the mean of the distribution. .. attribute:: CDefG2DListMutator Default mutator for the 2D List chromosome. .. attribute:: CDefG2DListCrossover Default crossover method for the 2D List chromosome. .. attribute:: CDefG2DListInit Default initializator for the 2D List chromosome. .. attribute:: CDefG2DListCrossUniformProb Default uniform probability for the 2D List Uniform Crossover method (:func:`Crossovers.G2DListCrossoverUniform`). GA Engine constants (:class:`GSimpleGA.GSimpleGA`) ---------------------------------------------------------------------------- .. attribute:: CDefGAGenerations Default number of generations. .. attribute:: CDefGAMutationRate Default mutation rate. .. attribute:: CDefGACrossoverRate Default crossover rate. .. attribute:: CDefGAPopulationSize Default population size. .. attribute:: CDefGASelector Default selector method. DB Adapters constants (:mod:`DBAdapters`) ---------------------------------------------------------------------------- Constants for the DB Adapters SQLite3 DB Adapter Constants (:class:`DBAdapters.DBSQLite`) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. attribute:: CDefSQLiteDBName Default database filename. .. attribute:: CDefSQLiteDBTable Default statistical table name. .. attribute:: CDefSQLiteDBTablePop Default population statistical table name. .. attribute:: CDefSQLiteStatsGenFreq Default generational frequency for dump statistics. .. attribute:: CDefSQLiteStatsCommitFreq Default commit frequency. MySQL DB Adapter Constants (:class:`DBAdapters.DBMySQLAdapter`) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. attribute:: CDefMySQLDBName Default database name. .. attribute:: CDefMySQLDBTable Default statistical table name. .. attribute:: CDefMySQLDBTablePop Default population statistical table name. .. attribute:: CDefMySQLStatsGenFreq Default generational frequency for dump statistics. .. attribute:: CDefMySQLStatsCommitFreq Default commit frequency. .. attribute:: CDefMySQLDBHost Default MySQL connection host. .. attribute:: CDefMySQLDBPort Default MySQL connection TCP port. URL Post DB Adapter Constants (:class:`DBAdapters.DBURLPost`) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. attribute:: CDefURLPostStatsGenFreq Default generational frequency for dump statistics. CSV File DB Adapter Constants (:class:`DBAdapters.DBFileCSV`) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. attribute:: CDefCSVFileName The default CSV filename to dump statistics. .. attribute:: CDefCSVFileStatsGenFreq Default generational frequency for dump statistics. XMP RPC DB Adapter Constants (:class:`DBAdapters.DBXMLRPC`) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. attribute:: CDefXMLRPCStatsGenFreq Default generational frequency for dump statistics. Migration Constants (:mod:`Migration`) ---------------------------------------------------------------------------- .. attribute:: CDefGenMigrationRate The default generations supposed to migrate and receive individuals .. attribute:: CDefMigrationNIndividuals The default number of individuals that will migrate at the *CDefGenMigrationRate* interval .. attribute:: CDefNetworkIndividual A migration code for network individual data .. attribute:: CDefNetworkInfo A migration code for network info data .. attribute:: CDefGenMigrationReplacement The default number of individuals to be replaced at the migration stage """ import Scaling import Selectors import Initializators import Mutators import Crossovers import logging from GTree import GTreeGP # Required python version 2.5+ CDefPythonRequire = (2, 5) # Logging system CDefLogFile = "pyevolve.log" CDefLogLevel = logging.DEBUG # Types of sort # - raw: uses the "score" attribute # - scaled: uses the "fitness" attribute sortType = { "raw" : 0, "scaled" : 1 } # Optimization type # - Minimize or Maximize the Evaluator Function minimaxType = { "minimize" : 0, "maximize" : 1 } CDefESCKey = 27 CDefImportList = {"visual.graph": "you must install VPython !", "csv" : "csv module not found !", "urllib" : "urllib module not found !", "sqlite3": "sqlite3 module not found, are you using Jython or IronPython ?", "xmlrpclib" : "xmlrpclib module not found !", "MySQLdb" : "MySQLdb module not found, you must install mysql-python !", "pydot" : "Pydot module not found, you must install Pydot to plot graphs !"} #################### # Defaults section # #################### # - Tournament selector CDefTournamentPoolSize = 2 # - Scale methods defaults CDefScaleLinearMultiplier = 1.2 CDefScaleSigmaTruncMultiplier = 2.0 CDefScalePowerLawFactor = 1.0005 CDefScaleBoltzMinTemp = 1.0 CDefScaleBoltzFactor = 0.05 # 40 temp. = 500 generations CDefScaleBoltzStart = 40.0 # - Population Defaults CDefPopSortType = sortType["scaled"] CDefPopMinimax = minimaxType["maximize"] CDefPopScale = Scaling.LinearScaling # - GA Engine defaults CDefGAGenerations = 100 CDefGAMutationRate = 0.02 CDefGACrossoverRate = 0.9 CDefGAPopulationSize = 80 CDefGASelector = Selectors.GRankSelector CDefGAElitismReplacement = 1 # - This is general used by integer/real ranges defaults CDefRangeMin = 0 CDefRangeMax = 100 # - G1DBinaryString defaults CDefG1DBinaryStringMutator = Mutators.G1DBinaryStringMutatorFlip CDefG1DBinaryStringCrossover = Crossovers.G1DBinaryStringXSinglePoint CDefG1DBinaryStringInit = Initializators.G1DBinaryStringInitializator CDefG1DBinaryStringUniformProb = 0.5 # - G2DBinaryString defaults CDefG2DBinaryStringMutator = Mutators.G2DBinaryStringMutatorFlip CDefG2DBinaryStringCrossover = Crossovers.G2DBinaryStringXUniform CDefG2DBinaryStringInit = Initializators.G2DBinaryStringInitializator CDefG2DBinaryStringUniformProb = 0.5 # - GTree defaults CDefGTreeInit = Initializators.GTreeInitializatorInteger CDefGGTreeMutator = Mutators.GTreeMutatorIntegerRange CDefGTreeCrossover = Crossovers.GTreeCrossoverSinglePointStrict # - GTreeGP defaults CDefGTreeGPInit = Initializators.GTreeGPInitializator CDefGGTreeGPMutator = Mutators.GTreeGPMutatorSubtree CDefGTreeGPCrossover = Crossovers.GTreeGPCrossoverSinglePoint # - G1DList defaults CDefG1DListMutIntMU = 2 CDefG1DListMutIntSIGMA = 10 CDefG1DListMutRealMU = 0 CDefG1DListMutRealSIGMA = 1 CDefG1DListMutator = Mutators.G1DListMutatorSwap CDefG1DListCrossover = Crossovers.G1DListCrossoverSinglePoint CDefG1DListInit = Initializators.G1DListInitializatorInteger CDefG1DListCrossUniformProb = 0.5 # SBX Crossover defaults # Crossover distribution index for SBX CDefG1DListSBXEtac = 10 CDefG1DListSBXEPS = 1.0e-14 # - G2DList defaults CDefG2DListMutIntMU = 2 CDefG2DListMutIntSIGMA = 10 CDefG2DListMutRealMU = 0 CDefG2DListMutRealSIGMA = 1 CDefG2DListMutator = Mutators.G2DListMutatorSwap CDefG2DListCrossover = Crossovers.G2DListCrossoverUniform CDefG2DListInit = Initializators.G2DListInitializatorInteger CDefG2DListCrossUniformProb = 0.5 # - DB Adapters SQLite defaults CDefSQLiteDBName = "pyevolve.db" CDefSQLiteDBTable = "statistics" CDefSQLiteDBTablePop = "population" CDefSQLiteStatsGenFreq = 1 CDefSQLiteStatsCommitFreq = 300 # - DB Adapters MySQL defaults CDefMySQLDBName = "pyevolve" CDefMySQLDBTable = "statistics" CDefMySQLDBTablePop = "population" CDefMySQLDBHost = "localhost" CDefMySQLDBPort = 3306 CDefMySQLStatsGenFreq = 1 CDefMySQLStatsCommitFreq = 300 # - DB Adapters URL Post defaults CDefURLPostStatsGenFreq = 100 # - DB Adapters CSV File defaults CDefCSVFileName = "pyevolve.csv" CDefCSVFileStatsGenFreq = 1 # - DB Adapter XML RPC CDefXMLRPCStatsGenFreq = 20 # Util Consts CDefBroadcastAddress = "255.255.255.255" nodeType = {"TERMINAL" : 0, "NONTERMINAL": 1} CDefGPGenomes = [GTreeGP] # Migration Consts CDefGenMigrationRate = 20 CDefMigrationNIndividuals = 3 CDefGenMigrationReplacement = 3 CDefNetworkIndividual = 1 CDefNetworkInfo = 2 pyevolve-0.6~rc1+svn398+dfsg/pyevolve/Crossovers.py000066400000000000000000000511231153663664300224330ustar00rootroot00000000000000""" :mod:`Crossovers` -- crossover methods module ===================================================================== In this module we have the genetic operators of crossover (or recombination) for each chromosome representation. """ from random import randint as rand_randint, choice as rand_choice from random import random as rand_random import math import Util import Consts ############################# ## 1D Binary String ## ############################# def G1DBinaryStringXSinglePoint(genome, **args): """ The crossover of 1D Binary String, Single Point .. warning:: You can't use this crossover method for binary strings with length of 1. """ sister = None brother = None gMom = args["mom"] gDad = args["dad"] if len(gMom) == 1: Util.raiseException("The Binary String have one element, can't use the Single Point Crossover method !", TypeError) cut = rand_randint(1, len(gMom)-1) if args["count"] >= 1: sister = gMom.clone() sister.resetStats() sister[cut:] = gDad[cut:] if args["count"] == 2: brother = gDad.clone() brother.resetStats() brother[cut:] = gMom[cut:] return (sister, brother) def G1DBinaryStringXTwoPoint(genome, **args): """ The 1D Binary String crossover, Two Point .. warning:: You can't use this crossover method for binary strings with length of 1. """ sister = None brother = None gMom = args["mom"] gDad = args["dad"] if len(gMom) == 1: Util.raiseException("The Binary String have one element, can't use the Two Point Crossover method !", TypeError) cuts = [rand_randint(1, len(gMom)-1), rand_randint(1, len(gMom)-1)] if cuts[0] > cuts[1]: Util.listSwapElement(cuts, 0, 1) if args["count"] >= 1: sister = gMom.clone() sister.resetStats() sister[cuts[0]:cuts[1]] = gDad[cuts[0]:cuts[1]] if args["count"] == 2: brother = gDad.clone() brother.resetStats() brother[cuts[0]:cuts[1]] = gMom[cuts[0]:cuts[1]] return (sister, brother) def G1DBinaryStringXUniform(genome, **args): """ The G1DList Uniform Crossover """ sister = None brother = None gMom = args["mom"] gDad = args["dad"] sister = gMom.clone() brother = gDad.clone() sister.resetStats() brother.resetStats() for i in xrange(len(gMom)): if Util.randomFlipCoin(Consts.CDefG1DBinaryStringUniformProb): temp = sister[i] sister[i] = brother[i] brother[i] = temp return (sister, brother) #################### ## 1D List ## #################### def G1DListCrossoverSinglePoint(genome, **args): """ The crossover of G1DList, Single Point .. warning:: You can't use this crossover method for lists with just one element. """ sister = None brother = None gMom = args["mom"] gDad = args["dad"] if len(gMom) == 1: Util.raiseException("The 1D List have one element, can't use the Single Point Crossover method !", TypeError) cut = rand_randint(1, len(gMom)-1) if args["count"] >= 1: sister = gMom.clone() sister.resetStats() sister[cut:] = gDad[cut:] if args["count"] == 2: brother = gDad.clone() brother.resetStats() brother[cut:] = gMom[cut:] return (sister, brother) def G1DListCrossoverTwoPoint(genome, **args): """ The G1DList crossover, Two Point .. warning:: You can't use this crossover method for lists with just one element. """ sister = None brother = None gMom = args["mom"] gDad = args["dad"] if len(gMom) == 1: Util.raiseException("The 1D List have one element, can't use the Two Point Crossover method !", TypeError) cuts = [rand_randint(1, len(gMom)-1), rand_randint(1, len(gMom)-1)] if cuts[0] > cuts[1]: Util.listSwapElement(cuts, 0, 1) if args["count"] >= 1: sister = gMom.clone() sister.resetStats() sister[cuts[0]:cuts[1]] = gDad[cuts[0]:cuts[1]] if args["count"] == 2: brother = gDad.clone() brother.resetStats() brother[cuts[0]:cuts[1]] = gMom[cuts[0]:cuts[1]] return (sister, brother) def G1DListCrossoverUniform(genome, **args): """ The G1DList Uniform Crossover """ sister = None brother = None gMom = args["mom"] gDad = args["dad"] sister = gMom.clone() brother = gDad.clone() sister.resetStats() brother.resetStats() for i in xrange(len(gMom)): if Util.randomFlipCoin(Consts.CDefG1DListCrossUniformProb): temp = sister[i] sister[i] = brother[i] brother[i] = temp return (sister, brother) def G1DListCrossoverOX(genome, **args): """ The OX Crossover for G1DList (order crossover) """ sister = None brother = None gMom = args["mom"] gDad = args["dad"] listSize = len(gMom) c1, c2 = [rand_randint(1, len(gMom)-1), rand_randint(1, len(gMom)-1)] while c1 == c2: c2 = rand_randint(1, len(gMom)-1) if c1 > c2: h = c1 c1 = c2 c2 = h if args["count"] >= 1: sister = gMom.clone() sister.resetStats() P1 = [ c for c in gMom[c2:] + gMom[:c2] if c not in gDad[c1:c2] ] sister.genomeList = P1[listSize - c2:] + gDad[c1:c2] + P1[:listSize-c2] if args["count"] == 2: brother = gDad.clone() brother.resetStats() P2 = [ c for c in gDad[c2:] + gDad[:c2] if c not in gMom[c1:c2] ] brother.genomeList = P2[listSize - c2:] + gMom[c1:c2] + P2[:listSize-c2] assert listSize == len(sister) assert listSize == len(brother) return (sister, brother) def G1DListCrossoverEdge(genome, **args): """ THe Edge Recombination crossover for G1DList (widely used for TSP problem) See more information in the `Edge Recombination Operator `_ Wikipedia entry. """ gMom, sisterl = args["mom"], [] gDad, brotherl = args["dad"], [] mom_edges, dad_edges, merge_edges = Util.G1DListGetEdgesComposite(gMom, gDad) for c, u in (sisterl, set(gMom)), (brotherl, set(gDad)): curr = None for i in xrange(len(gMom)): curr = rand_choice(tuple(u)) if not curr else curr c.append(curr) u.remove(curr) d = [v for v in merge_edges.get(curr, []) if v in u] if d: curr = rand_choice(d) else: s = [v for v in mom_edges.get(curr, []) if v in u] s += [v for v in dad_edges.get(curr, []) if v in u] curr = rand_choice(s) if s else None sister = gMom.clone() brother = gDad.clone() sister.resetStats() brother.resetStats() sister.genomeList = sisterl brother.genomeList = brotherl return (sister, brother) def G1DListCrossoverCutCrossfill(genome, **args): """ The crossover of G1DList, Cut and crossfill, for permutations """ sister = None brother = None gMom = args["mom"] gDad = args["dad"] if len(gMom) == 1: Util.raiseException("The 1D List have one element, can't use the Single Point Crossover method !", TypeError) cut = rand_randint(1, len(gMom)-1) if args["count"] >= 1: sister = gMom.clone() mother_part = gMom[0:cut] sister.resetStats() i = (len(sister) - cut) x = 0 for v in gDad: if v in mother_part: continue if x >= i: break sister[cut+x] = v x += 1 if args["count"] == 2: brother = gDad.clone() father_part = gDad[0:cut] brother.resetStats() i = (len(brother) - cut) x = 0 for v in gMom: if v in father_part: continue if x >= i: break brother[cut+x] = v x += 1 return (sister, brother) def G1DListCrossoverRealSBX(genome, **args): """ Experimental SBX Implementation - Follows the implementation in NSGA-II (Deb, et.al) Some implementation `reference `_. .. warning:: This crossover method is Data Type Dependent, which means that must be used for 1D genome of real values. """ EPS = Consts.CDefG1DListSBXEPS # Crossover distribution index eta_c = Consts.CDefG1DListSBXEtac gMom = args["mom"] gDad = args["dad"] # Get the variable bounds ('gDad' could have been used; but I love Mom:-)) lb = gMom.getParam("rangemin", Consts.CDefRangeMin) ub = gMom.getParam("rangemax", Consts.CDefRangeMax) sister = gMom.clone() brother = gDad.clone() sister.resetStats() brother.resetStats() for i in range(0,len(gMom)): if math.fabs(gMom[i]-gDad[i]) > EPS: if gMom[i] > gDad[i]: #swap temp = gMom[i] gMom[i] = gDad[i] gDad[i] = temp #random number betwn. 0 & 1 u = rand_random() beta = 1.0 + 2*(gMom[i] - lb)/(1.0*(gDad[i]-gMom[i])) alpha = 2.0 - beta**(-(eta_c+1.0)) if u <= (1.0/alpha): beta_q = (u*alpha)**(1.0/((eta_c + 1.0)*1.0)) else: beta_q = (1.0/(2.0-u*alpha))**(1.0/(1.0*(eta_c + 1.0))) brother[i] = 0.5*((gMom[i] + gDad[i]) - beta_q*(gDad[i]-gMom[i])) beta = 1.0 + 2.0*(ub - gDad[i])/(1.0*(gDad[i]-gMom[i])) alpha = 2.0 - beta**(-(eta_c+1.0)) if u <= (1.0/alpha): beta_q = (u*alpha)**(1.0/((eta_c + 1)*1.0)) else: beta_q = (1.0/(2.0-u*alpha))**(1.0/(1.0*(eta_c + 1.0))) sister[i] = 0.5*((gMom[i] + gDad[i]) + beta_q*(gDad[i]-gMom[i])) if brother[i] > ub: brother[i] = ub if brother[i] < lb: brother[i] = lb if sister[i] > ub: sister[i] = ub if sister[i] < lb: sister[i] = lb if rand_random() > 0.5: # Swap temp = sister[i] sister[i] = brother[i] brother[i] = temp else: sister[i] = gMom[i] brother[i] = gDad[i] return (sister, brother) #################### ## 2D List ## #################### def G2DListCrossoverUniform(genome, **args): """ The G2DList Uniform Crossover """ sister = None brother = None gMom = args["mom"] gDad = args["dad"] sister = gMom.clone() brother = gDad.clone() sister.resetStats() brother.resetStats() h, w = gMom.getSize() for i in xrange(h): for j in xrange(w): if Util.randomFlipCoin(Consts.CDefG2DListCrossUniformProb): temp = sister.getItem(i, j) sister.setItem(i, j, brother.getItem(i, j)) brother.setItem(i, j, temp) return (sister, brother) def G2DListCrossoverSingleVPoint(genome, **args): """ The crossover of G2DList, Single Vertical Point """ sister = None brother = None gMom = args["mom"] gDad = args["dad"] cut = rand_randint(1, gMom.getWidth()-1) if args["count"] >= 1: sister = gMom.clone() sister.resetStats() for i in xrange(sister.getHeight()): sister[i][cut:] = gDad[i][cut:] if args["count"] == 2: brother = gDad.clone() brother.resetStats() for i in xrange(brother.getHeight()): brother[i][cut:] = gMom[i][cut:] return (sister, brother) def G2DListCrossoverSingleHPoint(genome, **args): """ The crossover of G2DList, Single Horizontal Point """ sister = None brother = None gMom = args["mom"] gDad = args["dad"] cut = rand_randint(1, gMom.getHeight()-1) if args["count"] >= 1: sister = gMom.clone() sister.resetStats() for i in xrange(cut, sister.getHeight()): sister[i][:] = gDad[i][:] if args["count"] == 2: brother = gDad.clone() brother.resetStats() for i in xrange(brother.getHeight()): brother[i][:] = gMom[i][:] return (sister, brother) ############################# ## 2D Binary String ## ############################# def G2DBinaryStringXUniform(genome, **args): """ The G2DBinaryString Uniform Crossover .. versionadded:: 0.6 The *G2DBinaryStringXUniform* function """ sister = None brother = None gMom = args["mom"] gDad = args["dad"] sister = gMom.clone() brother = gDad.clone() sister.resetStats() brother.resetStats() h, w = gMom.getSize() for i in xrange(h): for j in xrange(w): if Util.randomFlipCoin(Consts.CDefG2DBinaryStringUniformProb): temp = sister.getItem(i, j) sister.setItem(i, j, brother.getItem(i, j)) brother.setItem(i, j, temp) return (sister, brother) def G2DBinaryStringXSingleVPoint(genome, **args): """ The crossover of G2DBinaryString, Single Vertical Point .. versionadded:: 0.6 The *G2DBinaryStringXSingleVPoint* function """ sister = None brother = None gMom = args["mom"] gDad = args["dad"] cut = rand_randint(1, gMom.getWidth()-1) if args["count"] >= 1: sister = gMom.clone() sister.resetStats() for i in xrange(sister.getHeight()): sister[i][cut:] = gDad[i][cut:] if args["count"] == 2: brother = gDad.clone() brother.resetStats() for i in xrange(brother.getHeight()): brother[i][cut:] = gMom[i][cut:] return (sister, brother) def G2DBinaryStringXSingleHPoint(genome, **args): """ The crossover of G2DBinaryString, Single Horizontal Point .. versionadded:: 0.6 The *G2DBinaryStringXSingleHPoint* function """ sister = None brother = None gMom = args["mom"] gDad = args["dad"] cut = rand_randint(1, gMom.getHeight()-1) if args["count"] >= 1: sister = gMom.clone() sister.resetStats() for i in xrange(cut, sister.getHeight()): sister[i][:] = gDad[i][:] if args["count"] == 2: brother = gDad.clone() brother.resetStats() for i in xrange(brother.getHeight()): brother[i][:] = gMom[i][:] return (sister, brother) ############################# ## Tree ## ############################# def GTreeCrossoverSinglePoint(genome, **args): """ The crossover for GTree, Single Point """ sister = None brother = None gMom = args["mom"].clone() gDad = args["dad"].clone() gMom.resetStats() gDad.resetStats() node_mom_stack = [] all_mom_nodes = [] node_mom_tmp = None node_dad_stack = [] all_dad_nodes = [] node_dad_tmp = None node_mom_stack.append(gMom.getRoot()) node_dad_stack.append(gDad.getRoot()) while (len(node_mom_stack) > 0) and (len(node_dad_stack) > 0): node_mom_tmp = node_mom_stack.pop() node_dad_tmp = node_dad_stack.pop() if node_mom_tmp != gMom.getRoot(): all_mom_nodes.append(node_mom_tmp) all_dad_nodes.append(node_dad_tmp) node_mom_stack.extend(node_mom_tmp.getChilds()) node_dad_stack.extend(node_dad_tmp.getChilds()) if len(all_mom_nodes)==0 or len(all_dad_nodes)==0: return (gMom, gDad) if len(all_dad_nodes) == 1: nodeDad = all_dad_nodes[0] else: nodeDad = rand_choice(all_dad_nodes) if len(all_mom_nodes) == 1: nodeMom = all_mom_nodes[0] else: nodeMom = rand_choice(all_mom_nodes) nodeMom_parent = nodeMom.getParent() nodeDad_parent = nodeDad.getParent() # Sister if args["count"] >= 1: sister = gMom nodeDad.setParent(nodeMom_parent) nodeMom_parent.replaceChild(nodeMom, nodeDad) sister.processNodes() # Brother if args["count"] == 2: brother = gDad nodeMom.setParent(nodeDad_parent) nodeDad_parent.replaceChild(nodeDad, nodeMom) brother.processNodes() return (sister, brother) def GTreeCrossoverSinglePointStrict(genome, **args): """ The crossover of Tree, Strict Single Point ..note:: This crossover method creates offspring with restriction of the *max_depth* parameter. Accepts the *max_attempt* parameter, *max_depth* (required), and the distr_leaft (>= 0.0 and <= 1.0), which represents the probability of leaf selection when findin random nodes for crossover. """ sister = None brother = None gMom = args["mom"].clone() gDad = args["dad"].clone() gMom.resetStats() gDad.resetStats() max_depth = gMom.getParam("max_depth", None) max_attempt = gMom.getParam("max_attempt", 10) distr_leaf = gMom.getParam("distr_leaf", None) if max_depth is None: Util.raiseException("You must specify the max_depth genome parameter !", ValueError) if max_depth < 0: Util.raiseException("The max_depth must be >= 1, if you want to use GTreeCrossoverSinglePointStrict crossover !", ValueError) momRandom = None dadRandom = None for i in xrange(max_attempt): if distr_leaf is None: dadRandom = gDad.getRandomNode() momRandom = gMom.getRandomNode() else: if Util.randomFlipCoin(distr_leaf): momRandom = gMom.getRandomNode(1) else: momRandom = gMom.getRandomNode(2) if Util.randomFlipCoin(distr_leaf): dadRandom = gDad.getRandomNode(1) else: dadRandom = gDad.getRandomNode(2) assert momRandom is not None assert dadRandom is not None # Optimize here mH = gMom.getNodeHeight(momRandom) dH = gDad.getNodeHeight(dadRandom) mD = gMom.getNodeDepth(momRandom) dD = gDad.getNodeDepth(dadRandom) # The depth of the crossover is greater than the max_depth if (dD+mH <= max_depth) and (mD+dH <= max_depth): break if i == (max_attempt-1): assert gMom.getHeight() <= max_depth return (gMom, gDad) else: nodeMom, nodeDad = momRandom, dadRandom nodeMom_parent = nodeMom.getParent() nodeDad_parent = nodeDad.getParent() # Sister if args["count"] >= 1: sister = gMom nodeDad.setParent(nodeMom_parent) if nodeMom_parent is None: sister.setRoot(nodeDad) else: nodeMom_parent.replaceChild(nodeMom, nodeDad) sister.processNodes() assert sister.getHeight() <= max_depth # Brother if args["count"] == 2: brother = gDad nodeMom.setParent(nodeDad_parent) if nodeDad_parent is None: brother.setRoot(nodeMom) else: nodeDad_parent.replaceChild(nodeDad, nodeMom) brother.processNodes() assert brother.getHeight() <= max_depth return (sister, brother) ############################################################################# ################# GTreeGP Crossovers ###################################### ############################################################################# def GTreeGPCrossoverSinglePoint(genome, **args): """ The crossover of the GTreeGP, Single Point for Genetic Programming ..note:: This crossover method creates offspring with restriction of the *max_depth* parameter. Accepts the *max_attempt* parameter, *max_depth* (required). """ sister = None brother = None gMom = args["mom"].clone() gDad = args["dad"].clone() gMom.resetStats() gDad.resetStats() max_depth = gMom.getParam("max_depth", None) max_attempt = gMom.getParam("max_attempt", 15) if max_depth is None: Util.raiseException("You must specify the max_depth genome parameter !", ValueError) if max_depth < 0: Util.raiseException("The max_depth must be >= 1, if you want to use GTreeCrossoverSinglePointStrict crossover !", ValueError) momRandom = None dadRandom = None for i in xrange(max_attempt): dadRandom = gDad.getRandomNode() if dadRandom.getType() == Consts.nodeType["TERMINAL"]: momRandom = gMom.getRandomNode(1) elif dadRandom.getType() == Consts.nodeType["NONTERMINAL"]: momRandom = gMom.getRandomNode(2) mD = gMom.getNodeDepth(momRandom) dD = gDad.getNodeDepth(dadRandom) # Two nodes are root if mD==0 and dD==0: continue mH = gMom.getNodeHeight(momRandom) if dD+mH > max_depth: continue dH = gDad.getNodeHeight(dadRandom) if mD+dH > max_depth: continue break if i==(max_attempt-1): assert gMom.getHeight() <= max_depth return (gMom, gDad) else: nodeMom, nodeDad = momRandom, dadRandom nodeMom_parent = nodeMom.getParent() nodeDad_parent = nodeDad.getParent() # Sister if args["count"] >= 1: sister = gMom nodeDad.setParent(nodeMom_parent) if nodeMom_parent is None: sister.setRoot(nodeDad) else: nodeMom_parent.replaceChild(nodeMom, nodeDad) sister.processNodes() assert sister.getHeight() <= max_depth # Brother if args["count"] == 2: brother = gDad nodeMom.setParent(nodeDad_parent) if nodeDad_parent is None: brother.setRoot(nodeMom) else: nodeDad_parent.replaceChild(nodeDad, nodeMom) brother.processNodes() assert brother.getHeight() <= max_depth return (sister, brother) pyevolve-0.6~rc1+svn398+dfsg/pyevolve/DBAdapters.py000066400000000000000000000651611153663664300222430ustar00rootroot00000000000000""" :mod:`DBAdapters` -- database adapters for statistics ===================================================================== .. warning:: the use the of a DB Adapter can reduce the performance of the Genetic Algorithm. Pyevolve have a feature in which you can save the statistics of every generation in a database, file or call an URL with the statistics as param. You can use the database to plot evolution statistics graphs later. In this module, you'll find the adapters above cited. .. seealso:: Method :meth:`GSimpleGA.GSimpleGA.setDBAdapter` DB Adapters are set in the GSimpleGA Class. """ from pyevolve import __version__ import Consts import Util import logging import types import datetime import Statistics class DBBaseAdapter: """ DBBaseAdapter Class - The base class for all DB Adapters If you want to create your own DB Adapter, you must subclass this class. :param frequency: the the generational dump frequency .. versionadded:: 0.6 Added the :class:`DBBaseAdapter` class. """ def __init__(self, frequency, identify): """ The class constructor """ self.statsGenFreq = frequency if identify is None: self.identify = datetime.datetime.strftime(datetime.datetime.now(), "%d/%m/%y-%H:%M") else: self.identify = identify def setIdentify(self, identify): """ Sets the identify of the statistics :param identify: the id string """ if identify is None: self.identify = datetime.datetime.strftime(datetime.datetime.now(), "%d/%m/%y-%H:%M") else: self.identify = identify def getIdentify(self): """ Return the statistics identify :rtype: identify string """ return self.identify def getStatsGenFreq(self): """ Returns the frequency of statistical dump :rtype: the generation interval of statistical dump """ return self.statsGenFreq def setStatsGenFreq(self, statsGenFreq): """ Set the frequency of statistical dump :param statsGenFreq: the generation interval of statistical dump """ self.statsGenFreq = statsGenFreq def open(self, ga_engine): """ This method is called one time to do the initialization of the DB Adapter :param ga_engine: the GA Engine """ pass def commitAndClose(self): """ This method is called at the end of the evolution, to closes the DB Adapter and commit the changes """ pass def insert(self, ga_engine): """ Insert the stats :param ga_engine: the GA Engine """ Util.raiseException("This method is not implemented on the ABC", NotImplementedError) class DBFileCSV(DBBaseAdapter): """ DBFileCSV Class - Adapter to dump statistics in CSV format Inheritance diagram for :class:`DBAdapters.DBFileCSV`: .. inheritance-diagram:: DBAdapters.DBFileCSV Example: >>> adapter = DBFileCSV(filename="file.csv", identify="run_01", frequency = 1, reset = True) :param filename: the CSV filename :param identify: the identify of the run :param frequency: the generational dump frequency :param reset: if is True, the file old data will be overwrite with the new .. versionadded:: 0.6 Removed the stub methods and subclassed the :class:`DBBaseAdapter` class. """ def __init__(self, filename=Consts.CDefCSVFileName, identify=None, frequency = Consts.CDefCSVFileStatsGenFreq, reset=True): """ The creator of DBFileCSV Class """ DBBaseAdapter.__init__(self, frequency, identify) self.csvmod = None self.filename = filename self.csvWriter = None self.fHandle = None self.reset = reset def __repr__(self): """ The string representation of adapter """ ret = "DBFileCSV DB Adapter [File='%s', identify='%s']" % (self.filename, self.getIdentify()) return ret def open(self, ga_engine): """ Open the CSV file or creates a new file :param ga_engine: the GA Engine .. versionchanged:: 0.6 The method now receives the *ga_engine* parameter. """ if self.csvmod is None: logging.debug("Loading the csv module...") self.csvmod = Util.importSpecial("csv") logging.debug("Opening the CSV file to dump statistics [%s]", self.filename) if self.reset: open_mode = "w" else: open_mode = "a" self.fHandle = open(self.filename, open_mode) self.csvWriter = self.csvmod.writer(self.fHandle, delimiter=';') def close(self): """ Closes the CSV file handle """ logging.debug("Closing the CSV file [%s]", self.filename) if self.fHandle: self.fHandle.close() def commitAndClose(self): """ Commits and closes """ self.close() def insert(self, ga_engine): """ Inserts the stats into the CSV file :param ga_engine: the GA Engine .. versionchanged:: 0.6 The method now receives the *ga_engine* parameter. """ stats = ga_engine.getStatistics() generation = ga_engine.getCurrentGeneration() line = [self.getIdentify(), generation] line.extend(stats.asTuple()) self.csvWriter.writerow(line) class DBURLPost(DBBaseAdapter): """ DBURLPost Class - Adapter to call an URL with statistics Inheritance diagram for :class:`DBAdapters.DBURLPost`: .. inheritance-diagram:: DBAdapters.DBURLPost Example: >>> dbadapter = DBURLPost(url="http://localhost/post.py", identify="test") The parameters that will be sent is all the statistics described in the :class:`Statistics.Statistics` class, and the parameters: **generation** The generation of the statistics **identify** The id specified by user .. note:: see the :class:`Statistics.Statistics` documentation. :param url: the URL to be used :param identify: the identify of the run :param frequency: the generational dump frequency :param post: if True, the POST method will be used, otherwise GET will be used. .. versionadded:: 0.6 Removed the stub methods and subclassed the :class:`DBBaseAdapter` class. """ def __init__(self, url, identify=None, frequency = Consts.CDefURLPostStatsGenFreq, post=True): """ The creator of the DBURLPost Class. """ DBBaseAdapter.__init__(self, frequency, identify) self.urllibmod = None self.url = url self.post = post def __repr__(self): """ The string representation of adapter """ ret = "DBURLPost DB Adapter [URL='%s', identify='%s']" % (self.url, self.getIdentify()) return ret def open(self, ga_engine): """ Load the modules needed :param ga_engine: the GA Engine .. versionchanged:: 0.6 The method now receives the *ga_engine* parameter. """ if self.urllibmod is None: logging.debug("Loading urllib module...") self.urllibmod = Util.importSpecial("urllib") def insert(self, ga_engine): """ Sends the data to the URL using POST or GET :param ga_engine: the GA Engine .. versionchanged:: 0.6 The method now receives the *ga_engine* parameter. """ logging.debug("Sending http request to %s.", self.url) stats = ga_engine.getStatistics() response = None params = stats.internalDict.copy() params["generation"] = ga_engine.getCurrentGeneration() params["identify"] = self.getIdentify() if self.post: # POST response = self.urllibmod.urlopen(self.url, self.urllibmod.urlencode(params)) else: # GET response = self.urllibmod.urlopen(self.url + "?%s" % (self.urllibmod.urlencode(params))) if response: response.close() class DBSQLite(DBBaseAdapter): """ DBSQLite Class - Adapter to dump data in SQLite3 database format Inheritance diagram for :class:`DBAdapters.DBSQLite`: .. inheritance-diagram:: DBAdapters.DBSQLite Example: >>> dbadapter = DBSQLite(identify="test") When you run some GA for the first time, you need to create the database, for this, you must use the *resetDB* parameter: >>> dbadapter = DBSQLite(identify="test", resetDB=True) This parameter will erase all the database tables and will create the new ones. The *resetDB* parameter is different from the *resetIdentify* parameter, the *resetIdentify* only erases the rows with the same "identify" name. :param dbname: the database filename :param identify: the identify if the run :param resetDB: if True, the database structure will be recreated :param resetIdentify: if True, the identify with the same name will be overwrite with new data :param frequency: the generational dump frequency :param commit_freq: the commit frequency """ def __init__(self, dbname=Consts.CDefSQLiteDBName, identify=None, resetDB=False, resetIdentify=True, frequency=Consts.CDefSQLiteStatsGenFreq, commit_freq=Consts.CDefSQLiteStatsCommitFreq): """ The creator of the DBSQLite Class """ DBBaseAdapter.__init__(self, frequency, identify) self.sqlite3mod = None self.connection = None self.resetDB = resetDB self.resetIdentify = resetIdentify self.dbName = dbname self.typeDict = { types.FloatType : "real" } self.cursorPool = None self.commitFreq = commit_freq def __repr__(self): """ The string representation of adapter """ ret = "DBSQLite DB Adapter [File='%s', identify='%s']" % (self.dbName, self.getIdentify()) return ret def open(self, ga_engine): """ Open the database connection :param ga_engine: the GA Engine .. versionchanged:: 0.6 The method now receives the *ga_engine* parameter. """ if self.sqlite3mod is None: logging.debug("Loading sqlite3 module...") self.sqlite3mod = Util.importSpecial("sqlite3") logging.debug("Opening database, dbname=%s", self.dbName) self.connection = self.sqlite3mod.connect(self.dbName) temp_stats = Statistics.Statistics() if self.resetDB: self.resetStructure(Statistics.Statistics()) self.createStructure(temp_stats) if self.resetIdentify: self.resetTableIdentify() def commitAndClose(self): """ Commit changes on database and closes connection """ self.commit() self.close() def close(self): """ Close the database connection """ logging.debug("Closing database.") if self.cursorPool: self.cursorPool.close() self.cursorPool = None self.connection.close() def commit(self): """ Commit changes to database """ logging.debug("Commiting changes to database.") self.connection.commit() def getCursor(self): """ Return a cursor from the pool :rtype: the cursor """ if not self.cursorPool: logging.debug("Creating new cursor for database...") self.cursorPool = self.connection.cursor() return self.cursorPool else: return self.cursorPool def createStructure(self, stats): """ Create table using the Statistics class structure :param stats: the statistics object """ c = self.getCursor() pstmt = "create table if not exists %s(identify text, generation integer, " % (Consts.CDefSQLiteDBTable) for k, v in stats.items(): pstmt += "%s %s, " % (k, self.typeDict[type(v)]) pstmt = pstmt[:-2] + ")" logging.debug("Creating table %s: %s.", Consts.CDefSQLiteDBTable, pstmt) c.execute(pstmt) pstmt = """create table if not exists %s(identify text, generation integer, individual integer, fitness real, raw real)""" % (Consts.CDefSQLiteDBTablePop) logging.debug("Creating table %s: %s.", Consts.CDefSQLiteDBTablePop, pstmt) c.execute(pstmt) self.commit() def resetTableIdentify(self): """ Delete all records on the table with the same Identify """ c = self.getCursor() stmt = "delete from %s where identify = ?" % (Consts.CDefSQLiteDBTable) stmt2 = "delete from %s where identify = ?" % (Consts.CDefSQLiteDBTablePop) logging.debug("Erasing data from the tables with the identify = %s", self.getIdentify()) try: c.execute(stmt, (self.getIdentify(),)) c.execute(stmt2, (self.getIdentify(),)) except self.sqlite3mod.OperationalError, expt: if str(expt).find("no such table") >= 0: print "\n ## The DB Adapter can't find the tables ! Consider enable the parameter resetDB ! ##\n" self.commit() def resetStructure(self, stats): """ Deletes de current structure and calls createStructure :param stats: the statistics object """ logging.debug("Reseting structure, droping table and creating new empty table.") c = self.getCursor() c.execute("drop table if exists %s" % (Consts.CDefSQLiteDBTable,)) c.execute("drop table if exists %s" % (Consts.CDefSQLiteDBTablePop,)) self.commit() self.createStructure(stats) def insert(self, ga_engine): """ Inserts the statistics data to database :param ga_engine: the GA Engine .. versionchanged:: 0.6 The method now receives the *ga_engine* parameter. """ stats = ga_engine.getStatistics() population = ga_engine.getPopulation() generation = ga_engine.getCurrentGeneration() c = self.getCursor() pstmt = "insert into %s values (?, ?, " % (Consts.CDefSQLiteDBTable) for i in xrange(len(stats)): pstmt += "?, " pstmt = pstmt[:-2] + ")" c.execute(pstmt, (self.getIdentify(), generation) + stats.asTuple()) pstmt = "insert into %s values(?, ?, ?, ?, ?)" % (Consts.CDefSQLiteDBTablePop,) tups = [] for i in xrange(len(population)): ind = population[i] tups.append((self.getIdentify(), generation, i, ind.fitness, ind.score)) c.executemany(pstmt, tups) if (generation % self.commitFreq == 0): self.commit() class DBXMLRPC(DBBaseAdapter): """ DBXMLRPC Class - Adapter to dump statistics to a XML Remote Procedure Call Inheritance diagram for :class:`DBAdapters.DBXMLRPC`: .. inheritance-diagram:: DBAdapters.DBXMLRPC Example: >>> adapter = DBXMLRPC(url="http://localhost:8000/", identify="run_01", frequency = 1) :param url: the URL of the XML RPC :param identify: the identify of the run :param frequency: the generational dump frequency .. note:: The XML RPC Server must implement the *insert* method, wich receives a python dictionary as argument. Example of an server in Python: :: import xmlrpclib from SimpleXMLRPCServer import SimpleXMLRPCServer def insert(l): print "Received statistics: %s" % l server = SimpleXMLRPCServer(("localhost", 8000), allow_none=True) print "Listening on port 8000..." server.register_function(insert, "insert") server.serve_forever() .. versionadded:: 0.6 The :class:`DBXMLRPC` class. """ def __init__(self, url, identify=None, frequency = Consts.CDefXMLRPCStatsGenFreq): """ The creator of DBXMLRPC Class """ DBBaseAdapter.__init__(self, frequency, identify) self.xmlrpclibmod = None self.url = url self.proxy = None def __repr__(self): """ The string representation of adapter """ ret = "DBXMLRPC DB Adapter [URL='%s', identify='%s']" % (self.url, self.getIdentify()) return ret def open(self, ga_engine): """ Open the XML RPC Server proxy :param ga_engine: the GA Engine .. versionchanged:: 0.6 The method now receives the *ga_engine* parameter. """ if self.xmlrpclibmod is None: logging.debug("Loding the xmlrpclib module...") self.xmlrpclibmod = Util.importSpecial("xmlrpclib") logging.debug("Opening the XML RPC Server Proxy on %s", self.url) self.proxy = self.xmlrpclibmod.ServerProxy(self.url, allow_none=True) def insert(self, ga_engine): """ Calls the XML RPC procedure :param ga_engine: the GA Engine .. versionchanged:: 0.6 The method now receives the *ga_engine* parameter. """ stats = ga_engine.getStatistics() generation = ga_engine.getCurrentGeneration() di = stats.internalDict.copy() di.update({"identify": self.getIdentify(), "generation": generation}) self.proxy.insert(di) class DBVPythonGraph(DBBaseAdapter): """ The DBVPythonGraph Class - A DB Adapter for real-time visualization using VPython Inheritance diagram for :class:`DBAdapters.DBVPythonGraph`: .. inheritance-diagram:: DBAdapters.DBVPythonGraph .. note:: to use this DB Adapter, you **must** install VPython first. Example: >>> adapter = DBAdapters.DBVPythonGraph(identify="run_01", frequency = 1) >>> ga_engine.setDBAdapter(adapter) :param identify: the identify of the run :param genmax: use the generations as max value for x-axis, default False :param frequency: the generational dump frequency .. versionadded:: 0.6 The *DBVPythonGraph* class. """ def __init__(self, identify=None, frequency = 20, genmax=False): DBBaseAdapter.__init__(self, frequency, identify) self.genmax = genmax self.vtkGraph = None self.curveMin = None self.curveMax = None self.curveDev = None self.curveAvg = None def makeDisplay(self, title_sec, x, y, ga_engine): """ Used internally to create a new display for VPython. :param title_sec: the title of the window :param x: the x position of the window :param y: the y position of the window :param ga_engine: the GA Engine :rtype: the window (the return of gdisplay call) """ title = "Pyevolve v.%s - %s - id [%s]" % (__version__, title_sec, self.identify) if self.genmax: disp = self.vtkGraph.gdisplay(title=title, xtitle='Generation', ytitle=title_sec, xmax=ga_engine.getGenerations(), xmin=0., width=500, height=250, x=x, y=y) else: disp = self.vtkGraph.gdisplay(title=title, xtitle='Generation', ytitle=title_sec, xmin=0., width=500, height=250, x=x, y=y) return disp def open(self, ga_engine): """ Imports the VPython module and creates the four graph windows :param ga_engine: the GA Engine """ logging.debug("Loading visual.graph (VPython) module...") if self.vtkGraph is None: self.vtkGraph = Util.importSpecial("visual.graph").graph display_rawmin = self.makeDisplay("Raw Score (min)", 0, 0, ga_engine) display_rawmax = self.makeDisplay("Raw Score (max)", 0, 250, ga_engine) display_rawdev = self.makeDisplay("Raw Score (std. dev.)", 500, 0, ga_engine) display_rawavg = self.makeDisplay("Raw Score (avg)", 500, 250, ga_engine) self.curveMin = self.vtkGraph.gcurve(color=self.vtkGraph.color.red, gdisplay=display_rawmin) self.curveMax = self.vtkGraph.gcurve(color=self.vtkGraph.color.green, gdisplay=display_rawmax) self.curveDev = self.vtkGraph.gcurve(color=self.vtkGraph.color.blue, gdisplay=display_rawdev) self.curveAvg = self.vtkGraph.gcurve(color=self.vtkGraph.color.orange, gdisplay=display_rawavg) def insert(self, ga_engine): """ Plot the current statistics to the graphs :param ga_engine: the GA Engine """ stats = ga_engine.getStatistics() generation = ga_engine.getCurrentGeneration() self.curveMin.plot(pos=(generation, stats["rawMin"])) self.curveMax.plot(pos=(generation, stats["rawMax"])) self.curveDev.plot(pos=(generation, stats["rawDev"])) self.curveAvg.plot(pos=(generation, stats["rawAve"])) class DBMySQLAdapter(DBBaseAdapter): """ DBMySQLAdapter Class - Adapter to dump data in MySql database server Inheritance diagram for :class:`DBAdapters.DBMySQLAdapter`: .. inheritance-diagram:: DBAdapters.DBMySQLAdapter Example: >>> dbadapter = DBMySQLAdapter("pyevolve_username", "password", identify="run1") or >>> dbadapter = DBMySQLAdapter(user="username", passwd="password", ... host="mysqlserver.com.br", port=3306, db="pyevolve_db") When you run some GA for the first time, you need to create the database, for this, you must use the *resetDB* parameter as True. This parameter will erase all the database tables and will create the new ones. The *resetDB* parameter is different from the *resetIdentify* parameter, the *resetIdentify* only erases the rows with the same "identify" name, and *resetDB* will drop and recreate the tables. :param user: mysql username (must have permission to create, drop, insert, etc.. on tables :param passwd: the user password on MySQL server :param host: the hostname, default is "localhost" :param port: the port, default is 3306 :param db: the database name, default is "pyevolve" :param identify: the identify if the run :param resetDB: if True, the database structure will be recreated :param resetIdentify: if True, the identify with the same name will be overwrite with new data :param frequency: the generational dump frequency :param commit_freq: the commit frequency """ def __init__(self, user, passwd, host=Consts.CDefMySQLDBHost, port=Consts.CDefMySQLDBPort, db=Consts.CDefMySQLDBName, identify=None, resetDB=False, resetIdentify=True, frequency=Consts.CDefMySQLStatsGenFreq, commit_freq=Consts.CDefMySQLStatsCommitFreq): """ The creator of the DBSQLite Class """ DBBaseAdapter.__init__(self, frequency, identify) self.mysqldbmod = None self.connection = None self.resetDB = resetDB self.resetIdentify = resetIdentify self.db = db self.host = host self.port = port self.user = user self.passwd = passwd self.typeDict = { types.FloatType : "DOUBLE(14,6)" } self.cursorPool = None self.commitFreq = commit_freq def __repr__(self): """ The string representation of adapter """ ret = "DBMySQLAdapter DB Adapter [identify='%s', host='%s', username='%s', db='%s']" % (self.getIdentify(), self.host, self.user, self.db) return ret def open(self, ga_engine): """ Open the database connection :param ga_engine: the GA Engine .. versionchanged:: 0.6 The method now receives the *ga_engine* parameter. """ if self.mysqldbmod is None: logging.debug("Loading MySQLdb module...") self.mysqldbmod = Util.importSpecial("MySQLdb") logging.debug("Opening database, host=%s", self.host) self.connection = self.mysqldbmod.connect(host=self.host, user=self.user, passwd=self.passwd, db=self.db, port=self.port) temp_stats = Statistics.Statistics() self.createStructure(temp_stats) if self.resetDB: self.resetStructure(Statistics.Statistics()) if self.resetIdentify: self.resetTableIdentify() def commitAndClose(self): """ Commit changes on database and closes connection """ self.commit() self.close() def close(self): """ Close the database connection """ logging.debug("Closing database.") if self.cursorPool: self.cursorPool.close() self.cursorPool = None self.connection.close() def commit(self): """ Commit changes to database """ logging.debug("Commiting changes to database.") self.connection.commit() def getCursor(self): """ Return a cursor from the pool :rtype: the cursor """ if not self.cursorPool: logging.debug("Creating new cursor for database...") self.cursorPool = self.connection.cursor() return self.cursorPool else: return self.cursorPool def createStructure(self, stats): """ Create table using the Statistics class structure :param stats: the statistics object """ c = self.getCursor() pstmt = "create table if not exists %s(identify VARCHAR(80), generation INTEGER, " % (Consts.CDefMySQLDBTable) for k, v in stats.items(): pstmt += "%s %s, " % (k, self.typeDict[type(v)]) pstmt = pstmt[:-2] + ")" logging.debug("Creating table %s: %s.", Consts.CDefSQLiteDBTable, pstmt) c.execute(pstmt) pstmt = """create table if not exists %s(identify VARCHAR(80), generation INTEGER, individual INTEGER, fitness DOUBLE(14,6), raw DOUBLE(14,6))""" % (Consts.CDefMySQLDBTablePop) logging.debug("Creating table %s: %s.", Consts.CDefMySQLDBTablePop, pstmt) c.execute(pstmt) self.commit() def resetTableIdentify(self): """ Delete all records on the table with the same Identify """ c = self.getCursor() stmt = "delete from %s where identify = '%s'" % (Consts.CDefMySQLDBTable, self.getIdentify()) stmt2 = "delete from %s where identify = '%s'" % (Consts.CDefMySQLDBTablePop, self.getIdentify()) logging.debug("Erasing data from the tables with the identify = %s", self.getIdentify()) c.execute(stmt) c.execute(stmt2) self.commit() def resetStructure(self, stats): """ Deletes de current structure and calls createStructure :param stats: the statistics object """ logging.debug("Reseting structure, droping table and creating new empty table.") c = self.getCursor() c.execute("drop table if exists %s" % (Consts.CDefMySQLDBTable,)) c.execute("drop table if exists %s" % (Consts.CDefMySQLDBTablePop,)) self.commit() self.createStructure(stats) def insert(self, ga_engine): """ Inserts the statistics data to database :param ga_engine: the GA Engine .. versionchanged:: 0.6 The method now receives the *ga_engine* parameter. """ stats = ga_engine.getStatistics() population = ga_engine.getPopulation() generation = ga_engine.getCurrentGeneration() c = self.getCursor() pstmt = "insert into " + Consts.CDefMySQLDBTable + " values (%s, %s, " for i in xrange(len(stats)): pstmt += "%s, " pstmt = pstmt[:-2] + ")" c.execute(pstmt, (self.getIdentify(), generation) + stats.asTuple()) pstmt = "insert into " + Consts.CDefMySQLDBTablePop + " values(%s, %s, %s, %s, %s)" tups = [] for i in xrange(len(population)): ind = population[i] tups.append((self.getIdentify(), generation, i, ind.fitness, ind.score)) c.executemany(pstmt, tups) if (generation % self.commitFreq == 0): self.commit() pyevolve-0.6~rc1+svn398+dfsg/pyevolve/FunctionSlot.py000066400000000000000000000145171153663664300227200ustar00rootroot00000000000000""" :mod:`FunctionSlot` -- function slots module ================================================================== The *function slot* concept is large used by Pyevolve, the idea is simple, each genetic operator or any operator, can be assigned to a slot, by this way, we can add more than simple one operator, we can have for example, two or more mutator operators at same time, two or more evaluation functions, etc. In this :mod:`FunctionSlot` module, you'll find the class :class:`FunctionSlot.FunctionSlot`, which is the slot class. """ from random import uniform as rand_uniform import inspect from types import BooleanType import Util class FunctionSlot: """ FunctionSlot Class - The function slot Example: >>> genome.evaluator.set(eval_func) >>> genome.evaluator[0] >>> genome.evaluator Slot [Evaluation Function] (Count: 1) Name: eval_func >>> genome.evaluator.clear() >>> genome.evaluator Slot [Evaluation Function] (Count: 0) No function You can add weight to functions when using the `rand_apply` paramter: >>> genome.evaluator.set(eval_main, 0.9) >>> genome.evaluator.add(eval_sec, 0.3) >>> genome.evaluator.setRandomApply() In the above example, the function *eval_main* will be called with 90% of probability and the *eval_sec* will be called with 30% of probability. There are another way to add functions too: >>> genome.evaluator += eval_func :param name: the slot name :param rand_apply: if True, just one of the functions in the slot will be applied, this function is randomly picked based on the weight of the function added. """ def __init__(self, name="Anonymous Function", rand_apply=False): """ The creator of the FunctionSlot Class """ self.funcList = [] self.funcWeights = [] self.slotName = name self.rand_apply = rand_apply def __typeCheck(self, func): """ Used internally to check if a function passed to the function slot is callable. Otherwise raises a TypeError exception. :param func: the function object """ if not callable(func): Util.raiseException("The function must be a method or function", TypeError) def __iadd__(self, func): """ To add more functions using the += operator .. versionadded:: 0.6 The __iadd__ method. """ self.__typeCheck(func) self.funcList.append(func) return self def __getitem__(self, index): """ Used to retrieve some slot function index """ return self.funcList[index] def __setitem__(self, index, value): """ Used to set the index slot function """ self.__typeCheck(value) self.funcList[index] = value def __iter__(self): """ Return the function list iterator """ return iter(self.funcList) def __len__(self): """ Return the number of functions on the slot .. versionadded:: 0.6 The *__len__* method """ return len(self.funcList) def setRandomApply(self, flag=True): """ Sets the random function application, in this mode, the function will randomly choose one slot to apply :param flag: True or False """ if type(flag) != BooleanType: Util.raiseException("Random option must be True or False", TypeError) self.rand_apply = flag def clear(self): """ Used to clear the functions in the slot """ if len(self.funcList) > 0: del self.funcList[:] def add(self, func, weight=0.5): """ Used to add a function to the slot :param func: the function to be added in the slot :param weight: used when you enable the *random apply*, it's the weight of the function for the random selection .. versionadded:: 0.6 The `weight` parameter. """ self.__typeCheck(func) self.funcList.append(func) self.funcWeights.append(weight) def isEmpty(self): """ Return true if the function slot is empy """ return (len(self.funcList) == 0) #def __call__(self, *args): # """ The callable method """ def set(self, func, weight=0.5): """ Used to clear all functions in the slot and add one :param func: the function to be added in the slot :param weight: used when you enable the *random apply*, it's the weight of the function for the random selection .. versionadded:: 0.6 The `weight` parameter. .. note:: the method *set* of the function slot remove all previous functions added to the slot. """ self.clear() self.__typeCheck(func) self.add(func, weight) def apply(self, index, obj, **args): """ Apply the index function :param index: the index of the function :param obj: this object is passes as parameter to the function :param args: this args dictionary is passed to the function """ if len(self.funcList) <= 0: raise Exception("No function defined: " + self.slotName) return self.funcList[index](obj, **args) def applyFunctions(self, obj=None, **args): """ Generator to apply all function slots in obj :param obj: this object is passes as parameter to the function :param args: this args dictionary is passed to the function """ if len(self.funcList) <= 0: Util.raiseException("No function defined: " + self.slotName) if not self.rand_apply: for f in self.funcList: yield f(obj, **args) else: v = rand_uniform(0, 1) fobj = None for func, weight in zip(self.funcList, self.funcWeights): fobj = func if v < weight: break v = v - weight yield fobj(obj, **args) def __repr__(self): """ String representation of FunctionSlot """ strRet = "Slot [%s] (Count: %d)\n" % (self.slotName, len(self.funcList)) if len(self.funcList) <= 0: strRet += "\t\tNo function\n" return strRet for f, w in zip(self.funcList, self.funcWeights): strRet += "\t\tName: %s - Weight: %.2f\n" % (f.func_name, w) if f.func_doc: strRet += "\t\tDoc: " + f.func_doc + "\n" return strRet pyevolve-0.6~rc1+svn398+dfsg/pyevolve/G1DBinaryString.py000066400000000000000000000120461153663664300231730ustar00rootroot00000000000000""" :mod:`G1DBinaryString` -- the classical binary string chromosome ===================================================================== This is the classical chromosome representation on GAs, it is the 1D Binary String. This string looks like "00011101010". Default Parameters ------------------------------------------------------------- *Initializator* :func:`Initializators.G1DBinaryStringInitializator` The Binatry String Initializator for G1DBinaryString *Mutator* :func:`Mutators.G1DBinaryStringMutatorFlip` The Flip Mutator for G1DBinaryString *Crossover* :func:`Crossovers.G1DBinaryStringXSinglePoint` The Single Point Crossover for G1DBinaryString Class ------------------------------------------------------------- """ from GenomeBase import GenomeBase, G1DBase import Consts import Util class G1DBinaryString(GenomeBase, G1DBase): """ G1DBinaryString Class - The 1D Binary String chromosome Inheritance diagram for :class:`G1DBinaryString.G1DBinaryString`: .. inheritance-diagram:: G1DBinaryString.G1DBinaryString This chromosome class extends the :class:`GenomeBase.GenomeBase` and :class:`GenomeBase.G1DBase` classes. Example: >>> genome = G1DBinaryString.G1DBinaryString(5) :param length: the 1D Binary String size """ evaluator = None """ This is the :term:`evaluation function` slot, you can add a function with the *set* method: :: genome.evaluator.set(eval_func) """ initializator = None """ This is the initialization function of the genome, you can change the default initializator using the function slot: :: genome.initializator.set(Initializators.G1DBinaryStringInitializator) In this example, the initializator :func:`Initializators.G1DBinaryStringInitializator` will be used to create the initial population. """ mutator = None """ This is the mutator function slot, you can change the default mutator using the slot *set* function: :: genome.mutator.set(Mutators.G1DBinaryStringMutatorSwap) """ crossover = None """ This is the reproduction function slot, the crossover. You can change the default crossover method using: :: genome.crossover.set(Crossovers.G1DBinaryStringXUniform) """ def __init__(self, length=10): """ The initializator of G1DList representation """ GenomeBase.__init__(self) G1DBase.__init__(self, length) self.genomeList = [] self.stringLength = length self.initializator.set(Consts.CDefG1DBinaryStringInit) self.mutator.set(Consts.CDefG1DBinaryStringMutator) self.crossover.set(Consts.CDefG1DBinaryStringCrossover) def __setitem__(self, key, value): """ Set the specified value for an gene of List >>> g = G1DBinaryString(5) >>> for i in xrange(len(g)): ... g.append(1) >>> g[4] = 0 >>> g[4] 0 """ if value not in (0, 1): Util.raiseException("The value must be zero (0) or one (1), used (%s)" % value, ValueError) G1DBase.__setitem__(self, key, value) def __repr__(self): """ Return a string representation of Genome """ ret = GenomeBase.__repr__(self) ret += "- G1DBinaryString\n" ret += "\tString length:\t %s\n" % (self.getListSize(),) ret += "\tString:\t\t %s\n\n" % (self.getBinary(),) return ret def getDecimal(self): """ Converts the binary string to decimal representation Example: >>> g = G1DBinaryString(5) >>> for i in xrange(len(g)): ... g.append(0) >>> g[3] = 1 >>> g.getDecimal() 2 :rtype: decimal value """ return int(self.getBinary(), 2) def getBinary(self): """ Returns the binary string representation Example: >>> g = G1DBinaryString(2) >>> g.append(0) >>> g.append(1) >>> g.getBinary() '01' :rtype: the binary string """ return "".join(map(str, self)) def append(self, value): """ Appends an item to the list Example: >>> g = G1DBinaryString(2) >>> g.append(0) :param value: value to be added, 0 or 1 """ if value not in [0, 1]: Util.raiseException("The value must be 0 or 1", ValueError) G1DBase.append(self, value) def copy(self, g): """ Copy genome to 'g' Example: >>> g1 = G1DBinaryString(2) >>> g1.append(0) >>> g1.append(1) >>> g2 = G1DBinaryString(2) >>> g1.copy(g2) >>> g2[1] 1 :param g: the destination genome """ GenomeBase.copy(self, g) G1DBase.copy(self, g) def clone(self): """ Return a new instace copy of the genome Example: >>> g = G1DBinaryString(5) >>> for i in xrange(len(g)): ... g.append(1) >>> clone = g.clone() >>> clone[0] 1 :rtype: the G1DBinaryString instance clone """ newcopy = G1DBinaryString(self.getListSize()) self.copy(newcopy) return newcopy pyevolve-0.6~rc1+svn398+dfsg/pyevolve/G1DList.py000066400000000000000000000114631153663664300214750ustar00rootroot00000000000000""" :mod:`G1DList` -- the 1D list chromosome ============================================================= This is the 1D List representation, this list can carry real numbers or integers or any kind of object, by default, we have genetic operators for integer and real lists, which can be found on the respective modules. Default Parameters ------------------------------------------------------------- *Initializator* :func:`Initializators.G1DListInitializatorInteger` The Integer Initializator for G1DList *Mutator* :func:`Mutators.G1DListMutatorSwap` The Swap Mutator for G1DList *Crossover* :func:`Crossovers.G1DListCrossoverSinglePoint` The Single Point Crossover for G1DList Class ------------------------------------------------------------- """ from GenomeBase import GenomeBase, G1DBase import Consts class G1DList(GenomeBase, G1DBase): """ G1DList Class - The 1D List chromosome representation Inheritance diagram for :class:`G1DList.G1DList`: .. inheritance-diagram:: G1DList.G1DList This chromosome class extends the :class:`GenomeBase.GenomeBase` and :class:`GenomeBase.G1DBase` classes. **Examples** The instantiation >>> g = G1DList(10) Compare >>> genome2 = genome1.clone() >>> genome2 == genome1 True Multiply >>> genome = population[0] >>> genome (...) [1, 2, 3, 4] >>> genome_result = genome * 2 >>> genome_result (...) [2, 2, 6, 8] Add >>> genome (...) [1, 2, 3, 4] >>> genome_result = genome + 2 (...) [3, 4, 5, 6] Iteration >>> for i in genome: >>> print i 1 2 3 4 Size, slice, get/set, append >>> len(genome) 4 >>> genome (...) [1, 2, 3, 4] >>> genome[0:1] [1, 2] >>> genome[1] = 666 >>> genome (...) [1, 666, 3, 4] >>> genome.append(99) >>> genome (...) [1, 666, 3, 4, 99] :param size: the 1D list size """ evaluator = None """ This is the :term:`evaluation function` slot, you can add a function with the *set* method: :: genome.evaluator.set(eval_func) """ initializator = None """ This is the initialization function of the genome, you can change the default initializator using the function slot: :: genome.initializator.set(Initializators.G1DListInitializatorAllele) In this example, the initializator :func:`Initializators.G1DListInitializatorAllele` will be used to create the initial population. """ mutator = None """ This is the mutator function slot, you can change the default mutator using the slot *set* function: :: genome.mutator.set(Mutators.G1DListMutatorSwap) """ crossover = None """ This is the reproduction function slot, the crossover. You can change the default crossover method using: :: genome.crossover.set(Crossovers.G1DListCrossoverUniform) """ def __init__(self, size=10, cloning=False): """ The initializator of G1DList representation, size parameter must be specified """ GenomeBase.__init__(self) G1DBase.__init__(self, size) if not cloning: self.initializator.set(Consts.CDefG1DListInit) self.mutator.set(Consts.CDefG1DListMutator) self.crossover.set(Consts.CDefG1DListCrossover) def __mul__(self, other): """ Multiply every element of G1DList by "other" """ newObj = self.clone() for i in xrange(len(newObj)): newObj[i] *= other return newObj def __add__(self, other): """ Plus every element of G1DList by "other" """ newObj = self.clone() for i in xrange(len(newObj)): newObj[i] += other return newObj def __sub__(self, other): """ Plus every element of G1DList by "other" """ newObj = self.clone() for i in xrange(len(newObj)): newObj[i] -= other return newObj def __repr__(self): """ Return a string representation of Genome """ ret = GenomeBase.__repr__(self) ret += "- G1DList\n" ret += "\tList size:\t %s\n" % (self.getListSize(),) ret += "\tList:\t\t %s\n\n" % (self.genomeList,) return ret def copy(self, g): """ Copy genome to 'g' Example: >>> genome_origin.copy(genome_destination) :param g: the destination G1DList instance """ GenomeBase.copy(self, g) G1DBase.copy(self, g) def clone(self): """ Return a new instace copy of the genome :rtype: the G1DList clone instance """ newcopy = G1DList(self.genomeSize, True) self.copy(newcopy) return newcopy pyevolve-0.6~rc1+svn398+dfsg/pyevolve/G2DBinaryString.py000066400000000000000000000135671153663664300232050ustar00rootroot00000000000000""" :mod:`G2DBinaryString` -- the classical binary string chromosome ===================================================================== This representation is a 2D Binary String, the string looks like this matrix: 00101101010 00100011010 00101101010 10100101000 Default Parameters ------------------------------------------------------------- *Initializator* :func:`Initializators.G2DBinaryStringInitializator` The Binatry String Initializator for G2DBinaryString *Mutator* :func:`Mutators.G2DBinaryStringMutatorFlip` The Flip Mutator for G2DBinaryString *Crossover* :func:`Crossovers.G2DBinaryStringXSinglePoint` The Single Point Crossover for G2DBinaryString .. versionadded:: 0.6 Added the module :mod:`G2DBinaryString` Class ------------------------------------------------------------- """ from GenomeBase import GenomeBase import Consts import Util class G2DBinaryString(GenomeBase): """ G3DBinaryString Class - The 2D Binary String chromosome Inheritance diagram for :class:`G2DBinaryString.G2DBinaryString`: .. inheritance-diagram:: G2DBinaryString.G2DBinaryString Example: >>> genome = G2DBinaryString.G2DBinaryString(10, 12) :param height: the number of rows :param width: the number of columns """ evaluator = None """ This is the :term:`evaluation function` slot, you can add a function with the *set* method: :: genome.evaluator.set(eval_func) """ initializator = None """ This is the initialization function of the genome, you can change the default initializator using the function slot: :: genome.initializator.set(Initializators.G2DBinaryStringInitializator) In this example, the initializator :func:`Initializators.G1DBinaryStringInitializator` will be used to create the initial population. """ mutator = None """ This is the mutator function slot, you can change the default mutator using the slot *set* function: :: genome.mutator.set(Mutators.G2DBinaryStringMutatorSwap) """ crossover = None """ This is the reproduction function slot, the crossover. You can change the default crossover method using: :: genome.crossover.set(Crossovers.G2DBinaryStringXUniform) """ def __init__(self, height, width): """ The initializator of G2DBinaryString representation, height and width must be specified """ GenomeBase.__init__(self) self.height = height self.width = width self.genomeString = [None]*height for i in xrange(height): self.genomeString[i] = [None] * width self.initializator.set(Consts.CDefG2DBinaryStringInit) self.mutator.set(Consts.CDefG2DBinaryStringMutator) self.crossover.set(Consts.CDefG2DBinaryStringCrossover) def __eq__(self, other): """ Compares one chromosome with another """ cond1 = (self.genomeString == other.genomeString) cond2 = (self.height == other.height) cond3 = (self.width == other.width) return True if cond1 and cond2 and cond3 else False def getItem(self, x, y): """ Return the specified gene of List Example: >>> genome.getItem(3, 1) 0 :param x: the x index, the column :param y: the y index, the row :rtype: the item at x,y position """ return self.genomeString[x][y] def setItem(self, x, y, value): """ Set the specified gene of List Example: >>> genome.setItem(3, 1, 0) :param x: the x index, the column :param y: the y index, the row :param value: the value (integers 0 or 1) """ if value not in [0,1]: Util.raiseException("The item value must be 0 or 1 in the G2DBinaryString chromosome", ValueError) self.genomeString[x][y] = value def __getitem__(self, key): """ Return the specified gene of List """ return self.genomeString[key] def __iter__(self): """ Iterator support to the list """ return iter(self.genomeString) def getHeight(self): """ Return the height (lines) of the List """ return self.height def getWidth(self): """ Return the width (lines) of the List """ return self.width def getSize(self): """ Returns a tuple (height, widht) Example: >>> genome.getSize() (3, 2) """ return (self.getHeight(), self.getWidth()) def __repr__(self): """ Return a string representation of Genome """ ret = GenomeBase.__repr__(self) ret += "- G2DBinaryString\n" ret += "\tList size:\t %s\n" % (self.getSize(),) ret += "\tList:\n" for line in self.genomeString: ret += "\t\t\t" for item in line: ret += "[%s] " % (item) ret += "\n" ret += "\n" return ret def resumeString(self): """ Returns a resumed string representation of the Genome """ ret = "" for line in self.genomeString: for item in line: ret += "[%s] " % (item) ret += "\n" return ret def clearString(self): """ Remove all genes from Genome """ del self.genomeString[:] self.genomeString = [None]* self.height for i in xrange(self.height): self.genomeString[i] = [None] * self.width def copy(self, g): """ Copy genome to 'g' Example: >>> genome_origin.copy(genome_destination) :param g: the destination G2DBinaryString instance """ GenomeBase.copy(self, g) g.height = self.height g.width = self.width for i in xrange(self.height): g.genomeString[i] = self.genomeString[i][:] def clone(self): """ Return a new instace copy of the genome :rtype: the G2DBinaryString clone instance """ newcopy = G2DBinaryString(self.height, self.width) self.copy(newcopy) return newcopy pyevolve-0.6~rc1+svn398+dfsg/pyevolve/G2DList.py000066400000000000000000000146331153663664300215000ustar00rootroot00000000000000""" :mod:`G2DList` -- the 2D list chromosome ================================================================ This is the 2D List representation, this list can carry real numbers or integers or any kind of object, by default, we have genetic operators for integer and real lists, which can be found on the respective modules. This chromosome class extends the :class:`GenomeBase.GenomeBase`. Default Parameters ------------------------------------------------------------- *Initializator* :func:`Initializators.G2DListInitializatorInteger` The Integer Initializator for G2DList *Mutator* :func:`Mutators.G2DListMutatorSwap` The Swap Mutator for G2DList *Crossover* :func:`Crossovers.G2DListCrossoverUniform` The Uniform Crossover for G2DList Class ------------------------------------------------------------- """ from GenomeBase import GenomeBase import Consts class G2DList(GenomeBase): """ G2DList Class - The 2D List chromosome representation Inheritance diagram for :class:`G2DList.G2DList`: .. inheritance-diagram:: G2DList.G2DList **Examples** The instantiation >>> genome = G2DList.G2DList(10, 10) Compare >>> genome2 = genome1.clone() >>> genome2 == genome1 True Iteration >>> for row in genome: >>> print row [1, 3, 4, 1] [7, 5, 3, 4] [9, 0, 1, 2] Size, slice, get/set, append >>> len(genome) 3 >>> genome (...) [1, 3, 4, 1] [7, 5, 3, 4] [9, 0, 1, 2] >>> genome[1][2] 3 >>> genome[1] = [666, 666, 666, 666] >>> genome (...) [1, 3, 4, 1] [666, 666, 666, 666] [9, 0, 1, 2] >>> genome[1][1] = 2 (...) :param height: the number of rows :param width: the number of columns """ evaluator = None """ This is the :term:`evaluation function` slot, you can add a function with the *set* method: :: genome.evaluator.set(eval_func) """ initializator = None """ This is the initialization function of the genome, you can change the default initializator using the function slot: :: genome.initializator.set(Initializators.G2DListInitializatorAllele) In this example, the initializator :func:`Initializators.G2DListInitializatorAllele` will be used to create the initial population. """ mutator = None """ This is the mutator function slot, you can change the default mutator using the slot *set* function: :: genome.mutator.set(Mutators.G2DListMutatorIntegerGaussian) """ crossover = None """ This is the reproduction function slot, the crossover. You can change the default crossover method using: :: genome.crossover.set(Crossovers.G2DListCrossoverSingleHPoint) """ def __init__(self, height, width, cloning=False): """ The initializator of G2DList representation, height and width must be specified """ GenomeBase.__init__(self) self.height = height self.width = width self.genomeList = [None]*height for i in xrange(height): self.genomeList[i] = [None] * width if not cloning: self.initializator.set(Consts.CDefG2DListInit) self.mutator.set(Consts.CDefG2DListMutator) self.crossover.set(Consts.CDefG2DListCrossover) def __eq__(self, other): """ Compares one chromosome with another """ cond1 = (self.genomeList == other.genomeList) cond2 = (self.height == other.height) cond3 = (self.width == other.width) return True if cond1 and cond2 and cond3 else False def getItem(self, x, y): """ Return the specified gene of List Example: >>> genome.getItem(3, 1) 666 >>> genome[3][1] :param x: the x index, the column :param y: the y index, the row :rtype: the item at x,y position """ return self.genomeList[x][y] def setItem(self, x, y, value): """ Set the specified gene of List Example: >>> genome.setItem(3, 1, 666) >>> genome[3][1] = 666 :param x: the x index, the column :param y: the y index, the row :param value: the value """ self.genomeList[x][y] = value def __getitem__(self, key): """ Return the specified gene of List """ return self.genomeList[key] def __iter__(self): """ Iterator support to the list """ return iter(self.genomeList) def getHeight(self): """ Return the height (lines) of the List """ return self.height def getWidth(self): """ Return the width (lines) of the List """ return self.width def getSize(self): """ Returns a tuple (height, widht) Example: >>> genome.getSize() (3, 2) """ return (self.getHeight(), self.getWidth()) def __repr__(self): """ Return a string representation of Genome """ ret = GenomeBase.__repr__(self) ret += "- G2DList\n" ret += "\tList size:\t %s\n" % (self.getSize(),) ret += "\tList:\n" for line in self.genomeList: ret += "\t\t\t" for item in line: ret += "[%s] " % (item) ret += "\n" ret += "\n" return ret def resumeString(self): """ Returns a resumed string representation of the Genome .. versionadded:: 0.6 The *resumeString* method. """ ret = "" for line in self.genomeList: for item in line: ret += "[%s] " % (item) ret += "\n" return ret def clearList(self): """ Remove all genes from Genome """ del self.genomeList[:] self.genomeList = [None]* self.height for i in xrange(self.height): self.genomeList[i] = [None] * self.width def copy(self, g): """ Copy genome to 'g' Example: >>> genome_origin.copy(genome_destination) :param g: the destination G2DList instance """ GenomeBase.copy(self, g) g.height = self.height g.width = self.width for i in xrange(self.height): g.genomeList[i] = self.genomeList[i][:] def clone(self): """ Return a new instace copy of the genome :rtype: the G2DList clone instance """ newcopy = G2DList(self.height, self.width, True) self.copy(newcopy) return newcopy pyevolve-0.6~rc1+svn398+dfsg/pyevolve/GAllele.py000066400000000000000000000175061153663664300215770ustar00rootroot00000000000000""" :mod:`GAllele` -- the genome alleles module =========================================================== In this module, there are the :class:`GAllele.GAlleles` class (which is the class that holds the allele types) and all the allele types to use with the supported chromosomes. """ import random import Consts import Util class GAlleles: """ GAlleles Class - The set of alleles Example: >>> alleles = GAlleles() >>> choices = [1,2,3,4] >>> lst = GAlleleList(choices) >>> alleles.add(lst) >>> alleles[0].getRandomAllele() in lst True :param allele_list: the list of alleles :param homogeneous: if is True, all the alleles will be use only the first added """ def __init__(self, allele_list = None, homogeneous=False): """ The constructor of GAlleles class """ self.allele_list = [] if allele_list is not None: self.allele_list.extend(allele_list) self.homogeneous = homogeneous def __iadd__(self, allele): """ To add more alleles using the += operator .. versionadded:: 0.6 The __iadd__ method. """ self.add(allele) return self def add(self, allele): """ Appends one allele to the alleles list :param allele: allele to be added """ self.allele_list.append(allele) def __getslice__(self, a, b): """ Returns the slice part of alleles list """ return self.allele_list[a:b] def __getitem__(self, index): """ Returns the index allele of the alleles list """ if self.homogeneous: return self.allele_list[0] try: val = self.allele_list[index] except IndexError: Util.raiseException( """An error was occurred while finding allele for the %d position of chromosome. You may consider use the 'homogeneous' parameter of the GAlleles class. """ % (index,)) return val def __setitem__(self, index, value): """ Sets the index allele of the alleles list """ if self.homogeneous: self.allele_list[0] = value self.allele_list[index] = value def __iter__(self): """ Return the list iterator """ if self.homogeneous: oneList = [self.allele_list[0]] return iter(oneList) return iter(self.allele_list) def __len__(self): """ Returns the lenght of the alleles list """ if self.homogeneous: return 1 return len(self.allele_list) def __repr__(self): """ Return a string representation of the allele """ ret = "- GAlleles\n" ret += "\tHomogeneous:\t %s\n" % (self.homogeneous,) ret += "\tList size:\t %s\n" % (len(self),) ret += "\tAlleles:\n\n" if self.homogeneous: ret += "Allele for 0 position:\n" ret += self.allele_list[0].__repr__() else: for i in xrange(len(self)): ret += "Allele for %d position:\n" % (i,) ret += self.allele_list[i].__repr__() return ret class GAlleleList: """ GAlleleList Class - The list allele type Example: >>> alleles = GAlleles() >>> choices = [1,2,3,4] >>> lst = GAlleleList(choices) >>> alleles.add(lst) >>> alleles[0].getRandomAllele() in lst True """ def __init__(self, options=None): """ The constructor of GAlleleList class """ self.options = [] if options is not None: self.options.extend(options) def clear(self): """ Removes all the allele options from the list """ del self.options[:] def getRandomAllele(self): """ Returns one random choice from the options list """ return random.choice(self.options) def add(self, option): """ Appends one option to the options list :param option: option to be added in the list """ self.options.append(option) def __getslice__(self, a, b): """ Returns the slice part of options """ return self.options[a:b] def __getitem__(self, index): """ Returns the index option from the options list """ return self.options[index] def __setitem__(self, index, value): """ Sets the index option of the list """ self.options[index] = value def __iter__(self): """ Return the list iterator """ return iter(self.options) def __len__(self): """ Returns the lenght of the options list """ return len(self.options) def remove(self, option): """ Removes the option from list :param option: remove the option from the list """ self.options.remove(option) def __repr__(self): """ Return a string representation of the allele """ ret = "- GAlleleList\n" ret += "\tList size:\t %s\n" % (len(self),) ret += "\tAllele Options:\t %s\n\n" % (self.options,) return ret class GAlleleRange: """ GAlleleRange Class - The range allele type Example: >>> ranges = GAlleleRange(0,100) >>> ranges.getRandomAllele() >= 0 and ranges.getRandomAllele() <= 100 True :param begin: the begin of the range :param end: the end of the range :param real: if True, the range will be of real values """ def __init__(self, begin=Consts.CDefRangeMin, end=Consts.CDefRangeMax, real=False): """ The constructor of GAlleleRange class """ self.beginEnd = [(begin, end)] self.real = real self.minimum = None self.maximum = None self.__processMinMax() def __processMinMax(self): """ Process the mininum and maximum of the Allele """ self.minimum = min([x for x,y in self.beginEnd]) self.maximum = max([y for x,y in self.beginEnd]) def add(self, begin, end): """ Add a new range :param begin: the begin of range :param end: the end of the range """ if begin > end: Util.raiseException('Wrong value, the end of the range (%s) is greater than the begin (%s) !' % (end, begin), ValueError) self.beginEnd.append((begin, end)) self.__processMinMax() def __getitem__(self, index): return self.beginEnd[index] def __setitem__(self, index, value): if value[0] > value[1]: Util.raiseException('Wrong value, the end of the range is greater than the begin ! %s' % value, ValueError) self.beginEnd[index] = value self.__processMinMax() def __iter__(self): return iter(self.beginEnd) def getMaximum(self): """ Return the maximum of all the ranges :rtype: the maximum value """ return self.maximum def getMinimum(self): """ Return the minimum of all the ranges :rtype: the minimum value """ return self.minimum def clear(self): """ Removes all ranges """ del self.beginEnd[:] self.minimum = None self.maximum = None def getRandomAllele(self): """ Returns one random choice between the range """ rand_func = random.uniform if self.real else random.randint if len(self.beginEnd) <= 1: choice = 0 else: choice = random.randint(0, len(self.beginEnd)-1) return rand_func(self.beginEnd[choice][0], self.beginEnd[choice][1]) def setReal(self, flag=True): """ Sets True if the range is real or False if is integer :param flag: True or False """ self.real = flag def getReal(self): """ Returns True if the range is real or False if it is integer """ return self.real def __len__(self): """ Returns the ranges in the allele """ return len(self.beginEnd) def __repr__(self): """ Return a string representation of the allele """ ret = "- GAlleleRange\n" ret += "\tReal:\t\t %s\n" % (self.real,) ret += "\tRanges Count:\t %s\n" % (len(self),) ret += "\tRange List:\n" for beg, end in self.beginEnd: ret += "\t\t\t Range from [%s] to [%s]\n" % (beg, end) ret += "\n" return ret pyevolve-0.6~rc1+svn398+dfsg/pyevolve/GPopulation.py000066400000000000000000000330431153663664300225250ustar00rootroot00000000000000""" :mod:`GPopulation` -- the population module ================================================================ This module contains the :class:`GPopulation.GPopulation` class, which is reponsible to keep the population and the statistics. Default Parameters ------------------------------------------------------------- *Sort Type* >>> Consts.sortType["scaled"] The scaled sort type *Minimax* >>> Consts.minimaxType["maximize"] Maximize the evaluation function *Scale Method* :func:`Scaling.LinearScaling` The Linear Scaling scheme Class ------------------------------------------------------------- """ import Consts, Util from FunctionSlot import FunctionSlot from Statistics import Statistics from math import sqrt as math_sqrt import logging try: from multiprocessing import cpu_count, Pool CPU_COUNT = cpu_count() MULTI_PROCESSING = True if CPU_COUNT > 1 else False logging.debug("You have %d CPU cores, so the multiprocessing state is %s", CPU_COUNT, MULTI_PROCESSING) except ImportError: MULTI_PROCESSING = False logging.debug("You don't have multiprocessing support for your Python version !") def key_raw_score(individual): """ A key function to return raw score :param individual: the individual instance :rtype: the individual raw score .. note:: this function is used by the max()/min() python functions """ return individual.score def key_fitness_score(individual): """ A key function to return fitness score, used by max()/min() :param individual: the individual instance :rtype: the individual fitness score .. note:: this function is used by the max()/min() python functions """ return individual.fitness def multiprocessing_eval(ind): """ Internal used by the multiprocessing """ ind.evaluate() return ind.score def multiprocessing_eval_full(ind): """ Internal used by the multiprocessing (full copy)""" ind.evaluate() return ind class GPopulation: """ GPopulation Class - The container for the population **Examples** Get the population from the :class:`GSimpleGA.GSimpleGA` (GA Engine) instance >>> pop = ga_engine.getPopulation() Get the best fitness individual >>> bestIndividual = pop.bestFitness() Get the best raw individual >>> bestIndividual = pop.bestRaw() Get the statistics from the :class:`Statistics.Statistics` instance >>> stats = pop.getStatistics() >>> print stats["rawMax"] 10.4 Iterate, get/set individuals >>> for ind in pop: >>> print ind (...) >>> for i in xrange(len(pop)): >>> print pop[i] (...) >>> pop[10] = newGenome >>> pop[10].fitness 12.5 :param genome: the :term:`Sample genome`, or a GPopulation object, when cloning. """ def __init__(self, genome): """ The GPopulation Class creator """ if isinstance(genome, GPopulation): self.oneSelfGenome = genome.oneSelfGenome self.internalPop = [] self.internalPopRaw = [] self.popSize = genome.popSize self.sortType = genome.sortType self.sorted = False self.minimax = genome.minimax self.scaleMethod = genome.scaleMethod self.allSlots = [self.scaleMethod] self.internalParams = genome.internalParams self.multiProcessing = genome.multiProcessing self.statted = False self.stats = Statistics() return logging.debug("New population instance, %s class genomes.", genome.__class__.__name__) self.oneSelfGenome = genome self.internalPop = [] self.internalPopRaw = [] self.popSize = 0 self.sortType = Consts.CDefPopSortType self.sorted = False self.minimax = Consts.CDefPopMinimax self.scaleMethod = FunctionSlot("Scale Method") self.scaleMethod.set(Consts.CDefPopScale) self.allSlots = [self.scaleMethod] self.internalParams = {} self.multiProcessing = (False, False) # Statistics self.statted = False self.stats = Statistics() def setMultiProcessing(self, flag=True, full_copy=False): """ Sets the flag to enable/disable the use of python multiprocessing module. Use this option when you have more than one core on your CPU and when your evaluation function is very slow. The parameter "full_copy" defines where the individual data should be copied back after the evaluation or not. This parameter is useful when you change the individual in the evaluation function. :param flag: True (default) or False :param full_copy: True or False (default) .. warning:: Use this option only when your evaluation function is slow, se you will get a good tradeoff between the process communication speed and the parallel evaluation. .. versionadded:: 0.6 The `setMultiProcessing` method. """ self.multiProcessing = (flag, full_copy) def setMinimax(self, minimax): """ Sets the population minimax Example: >>> pop.setMinimax(Consts.minimaxType["maximize"]) :param minimax: the minimax type """ self.minimax = minimax def __repr__(self): """ Returns the string representation of the population """ ret = "- GPopulation\n" ret += "\tPopulation Size:\t %d\n" % (self.popSize,) ret += "\tSort Type:\t\t %s\n" % (Consts.sortType.keys()[Consts.sortType.values().index(self.sortType)].capitalize(),) ret += "\tMinimax Type:\t\t %s\n" % (Consts.minimaxType.keys()[Consts.minimaxType.values().index(self.minimax)].capitalize(),) for slot in self.allSlots: ret+= "\t" + slot.__repr__() ret+="\n" ret+= self.stats.__repr__() return ret def __len__(self): """ Return the length of population """ return len(self.internalPop) def __getitem__(self, key): """ Returns the specified individual from population """ return self.internalPop[key] def __iter__(self): """ Returns the iterator of the population """ return iter(self.internalPop) def __setitem__(self, key, value): """ Set an individual of population """ self.internalPop[key] = value self.clearFlags() def clearFlags(self): """ Clear the sorted and statted internal flags """ self.sorted = False self.statted = False def getStatistics(self): """ Return a Statistics class for statistics :rtype: the :class:`Statistics.Statistics` instance """ self.statistics() return self.stats def statistics(self): """ Do statistical analysis of population and set 'statted' to True """ if self.statted: return logging.debug("Running statistical calculations") raw_sum = 0 fit_sum = 0 len_pop = len(self) for ind in xrange(len_pop): raw_sum += self[ind].score #fit_sum += self[ind].fitness self.stats["rawMax"] = max(self, key=key_raw_score).score self.stats["rawMin"] = min(self, key=key_raw_score).score self.stats["rawAve"] = raw_sum / float(len_pop) #self.stats["rawTot"] = raw_sum #self.stats["fitTot"] = fit_sum tmpvar = 0.0 for ind in xrange(len_pop): s = self[ind].score - self.stats["rawAve"] s*= s tmpvar += s tmpvar/= float((len(self) - 1)) try: self.stats["rawDev"] = math_sqrt(tmpvar) except: self.stats["rawDev"] = 0.0 self.stats["rawVar"] = tmpvar self.statted = True def bestFitness(self, index=0): """ Return the best scaled fitness individual of population :param index: the *index* best individual :rtype: the individual """ self.sort() return self.internalPop[index] def bestRaw(self, index=0): """ Return the best raw score individual of population :param index: the *index* best raw individual :rtype: the individual .. versionadded:: 0.6 The parameter `index`. """ if self.sortType == Consts.sortType["raw"]: return self.internalPop[index] else: self.sort() return self.internalPopRaw[index] def sort(self): """ Sort the population """ if self.sorted: return rev = (self.minimax == Consts.minimaxType["maximize"]) if self.sortType == Consts.sortType["raw"]: self.internalPop.sort(cmp=Util.cmp_individual_raw, reverse=rev) else: self.scale() self.internalPop.sort(cmp=Util.cmp_individual_scaled, reverse=rev) self.internalPopRaw = self.internalPop[:] self.internalPopRaw.sort(cmp=Util.cmp_individual_raw, reverse=rev) self.sorted = True def setPopulationSize(self, size): """ Set the population size :param size: the population size """ self.popSize = size def setSortType(self, sort_type): """ Sets the sort type Example: >>> pop.setSortType(Consts.sortType["scaled"]) :param sort_type: the Sort Type """ self.sortType = sort_type def create(self, **args): """ Clone the example genome to fill the population """ self.minimax = args["minimax"] self.internalPop = [self.oneSelfGenome.clone() for i in xrange(self.popSize)] self.clearFlags() def __findIndividual(self, individual, end): for i in xrange(end): if individual.compare(self.internalPop[i]) == 0: return True def initialize(self, **args): """ Initialize all individuals of population, this calls the initialize() of individuals """ logging.debug("Initializing the population") if self.oneSelfGenome.getParam("full_diversity", True) and hasattr(self.oneSelfGenome, "compare"): for i in xrange(len(self.internalPop)): curr = self.internalPop[i] curr.initialize(**args) while self.__findIndividual(curr, i): curr.initialize(**args) else: for gen in self.internalPop: gen.initialize(**args) self.clearFlags() def evaluate(self, **args): """ Evaluate all individuals in population, calls the evaluate() method of individuals :param args: this params are passed to the evaluation function """ # We have multiprocessing if self.multiProcessing[0] and MULTI_PROCESSING: logging.debug("Evaluating the population using the multiprocessing method") proc_pool = Pool() # Multiprocessing full_copy parameter if self.multiProcessing[1]: results = proc_pool.map(multiprocessing_eval_full, self.internalPop) for i in xrange(len(self.internalPop)): self.internalPop[i] = results[i] else: results = proc_pool.map(multiprocessing_eval, self.internalPop) for individual, score in zip(self.internalPop, results): individual.score = score else: for ind in self.internalPop: ind.evaluate(**args) self.clearFlags() def scale(self, **args): """ Scale the population using the scaling method :param args: this parameter is passed to the scale method """ for it in self.scaleMethod.applyFunctions(self, **args): pass fit_sum = 0 for ind in xrange(len(self)): fit_sum += self[ind].fitness self.stats["fitMax"] = max(self, key=key_fitness_score).fitness self.stats["fitMin"] = min(self, key=key_fitness_score).fitness self.stats["fitAve"] = fit_sum / float(len(self)) self.sorted = False def printStats(self): """ Print statistics of the current population """ message = "" if self.sortType == Consts.sortType["scaled"]: message = "Max/Min/Avg Fitness(Raw) [%(fitMax).2f(%(rawMax).2f)/%(fitMin).2f(%(rawMin).2f)/%(fitAve).2f(%(rawAve).2f)]" % self.stats else: message = "Max/Min/Avg Raw [%(rawMax).2f/%(rawMin).2f/%(rawAve).2f]" % self.stats logging.info(message) print message return message def copy(self, pop): """ Copy current population to 'pop' :param pop: the destination population .. warning:: this method do not copy the individuals, only the population logic """ pop.popSize = self.popSize pop.sortType = self.sortType pop.minimax = self.minimax pop.scaleMethod = self.scaleMethod #pop.internalParams = self.internalParams.copy() pop.internalParams = self.internalParams pop.multiProcessing = self.multiProcessing def getParam(self, key, nvl=None): """ Gets an internal parameter Example: >>> population.getParam("tournamentPool") 5 :param key: the key of param :param nvl: if the key doesn't exist, the nvl will be returned """ return self.internalParams.get(key, nvl) def setParams(self, **args): """ Gets an internal parameter Example: >>> population.setParams(tournamentPool=5) :param args: parameters to set .. versionadded:: 0.6 The `setParams` method. """ self.internalParams.update(args) def clear(self): """ Remove all individuals from population """ del self.internalPop[:] del self.internalPopRaw[:] self.clearFlags() def clone(self): """ Return a brand-new cloned population """ newpop = GPopulation(self.oneSelfGenome) self.copy(newpop) return newpop pyevolve-0.6~rc1+svn398+dfsg/pyevolve/GSimpleGA.py000066400000000000000000000674571153663664300220540ustar00rootroot00000000000000""" :mod:`GSimpleGA` -- the genetic algorithm by itself ===================================================================== This module contains the GA Engine, the GA Engine class is responsible for all the evolutionary process. It contains the GA Engine related funtions, like the Termination Criteria functions for convergence analysis, etc. Default Parameters ------------------------------------------------------------- *Number of Generations* Default is 100 generations *Mutation Rate* Default is 0.02, which represents 0.2% *Crossover Rate* Default is 0.9, which represents 90% *Elitism Replacement* Default is 1 individual *Population Size* Default is 80 individuals *Minimax* >>> Consts.minimaxType["maximize"] Maximize the evaluation function *DB Adapter* Default is **None** *Migration Adapter* Default is **None** *Interactive Mode* Default is **True** *Selector (Selection Method)* :func:`Selectors.GRankSelector` The Rank Selection method Class ------------------------------------------------------------- """ from GPopulation import GPopulation from FunctionSlot import FunctionSlot from Migration import MigrationScheme from GenomeBase import GenomeBase from DBAdapters import DBBaseAdapter import Consts import Util import random import logging from time import time from types import BooleanType from sys import platform as sys_platform from sys import stdout as sys_stdout import code import pyevolve # Platform dependant code for the Interactive Mode if sys_platform[:3] == "win": import msvcrt def RawScoreCriteria(ga_engine): """ Terminate the evolution using the **bestrawscore** and **rounddecimal** parameter obtained from the individual Example: >>> genome.setParams(bestrawscore=0.00, rounddecimal=2) (...) >>> ga_engine.terminationCriteria.set(GSimpleGA.RawScoreCriteria) """ ind = ga_engine.bestIndividual() bestRawScore = ind.getParam("bestrawscore") roundDecimal = ind.getParam("rounddecimal") if bestRawScore is None: Util.raiseException("you must specify the bestrawscore parameter", ValueError) if ga_engine.getMinimax() == Consts.minimaxType["maximize"]: if roundDecimal is not None: return round(bestRawScore, roundDecimal) <= round(ind.score, roundDecimal) else: return bestRawScore <= ind.score else: if roundDecimal is not None: return round(bestRawScore, roundDecimal) >= round(ind.score, roundDecimal) else: return bestRawScore >= ind.score def ConvergenceCriteria(ga_engine): """ Terminate the evolution when the population have converged Example: >>> ga_engine.terminationCriteria.set(GSimpleGA.ConvergenceCriteria) """ pop = ga_engine.getPopulation() return pop[0] == pop[len(pop)-1] def RawStatsCriteria(ga_engine): """ Terminate the evolution based on the raw stats Example: >>> ga_engine.terminationCriteria.set(GSimpleGA.RawStatsCriteria) """ stats = ga_engine.getStatistics() if stats["rawMax"] == stats["rawMin"]: if stats["rawAve"] == stats["rawMax"]: return True return False def FitnessStatsCriteria(ga_engine): """ Terminate the evoltion based on the fitness stats Example: >>> ga_engine.terminationCriteria.set(GSimpleGA.FitnessStatsCriteria) """ stats = ga_engine.getStatistics() if stats["fitMax"] == stats["fitMin"]: if stats["fitAve"] == stats["fitMax"]: return True return False class GSimpleGA: """ GA Engine Class - The Genetic Algorithm Core Example: >>> ga = GSimpleGA.GSimpleGA(genome) >>> ga.selector.set(Selectors.GRouletteWheel) >>> ga.setGenerations(120) >>> ga.terminationCriteria.set(GSimpleGA.ConvergenceCriteria) :param genome: the :term:`Sample Genome` :param interactiveMode: this flag enables the Interactive Mode, the default is True :param seed: the random seed value .. note:: if you use the same random seed, all the runs of algorithm will be the same """ selector = None """ This is the function slot for the selection method if you want to change the default selector, you must do this: :: ga_engine.selector.set(Selectors.GRouletteWheel) """ stepCallback = None """ This is the :term:`step callback function` slot, if you want to set the function, you must do this: :: def your_func(ga_engine): # Here you have access to the GA Engine return False ga_engine.stepCallback.set(your_func) now *"your_func"* will be called every generation. When this function returns True, the GA Engine will stop the evolution and show a warning, if is False, the evolution continues. """ terminationCriteria = None """ This is the termination criteria slot, if you want to set one termination criteria, you must do this: :: ga_engine.terminationCriteria.set(GSimpleGA.ConvergenceCriteria) Now, when you run your GA, it will stop when the population converges. There are those termination criteria functions: :func:`GSimpleGA.RawScoreCriteria`, :func:`GSimpleGA.ConvergenceCriteria`, :func:`GSimpleGA.RawStatsCriteria`, :func:`GSimpleGA.FitnessStatsCriteria` But you can create your own termination function, this function receives one parameter which is the GA Engine, follows an example: :: def ConvergenceCriteria(ga_engine): pop = ga_engine.getPopulation() return pop[0] == pop[len(pop)-1] When this function returns True, the GA Engine will stop the evolution and show a warning, if is False, the evolution continues, this function is called every generation. """ def __init__(self, genome, seed=None, interactiveMode=True): """ Initializator of GSimpleGA """ if seed: random.seed(seed) if type(interactiveMode) != BooleanType: Util.raiseException("Interactive Mode option must be True or False", TypeError) if not isinstance(genome, GenomeBase): Util.raiseException("The genome must be a GenomeBase subclass", TypeError) self.internalPop = GPopulation(genome) self.nGenerations = Consts.CDefGAGenerations self.pMutation = Consts.CDefGAMutationRate self.pCrossover = Consts.CDefGACrossoverRate self.nElitismReplacement = Consts.CDefGAElitismReplacement self.setPopulationSize(Consts.CDefGAPopulationSize) self.minimax = Consts.minimaxType["maximize"] self.elitism = True # Adapters self.dbAdapter = None self.migrationAdapter = None self.time_init = None self.interactiveMode = interactiveMode self.interactiveGen = -1 self.GPMode = False self.selector = FunctionSlot("Selector") self.stepCallback = FunctionSlot("Generation Step Callback") self.terminationCriteria = FunctionSlot("Termination Criteria") self.selector.set(Consts.CDefGASelector) self.allSlots = [ self.selector, self.stepCallback, self.terminationCriteria ] self.internalParams = {} self.currentGeneration = 0 # GP Testing for classes in Consts.CDefGPGenomes: if isinstance(self.internalPop.oneSelfGenome, classes): self.setGPMode(True) break logging.debug("A GA Engine was created, nGenerations=%d", self.nGenerations) def setGPMode(self, bool_value): """ Sets the Genetic Programming mode of the GA Engine :param bool_value: True or False """ self.GPMode = bool_value def getGPMode(self): """ Get the Genetic Programming mode of the GA Engine :rtype: True or False """ return self.GPMode def __call__(self, *args, **kwargs): """ A method to implement a callable object Example: >>> ga_engine(freq_stats=10) .. versionadded:: 0.6 The callable method. """ if kwargs.get("freq_stats", None): return self.evolve(kwargs.get("freq_stats")) else: return self.evolve() def setParams(self, **args): """ Set the internal params Example: >>> ga.setParams(gp_terminals=['x', 'y']) :param args: params to save ..versionaddd:: 0.6 Added the *setParams* method. """ self.internalParams.update(args) def getParam(self, key, nvl=None): """ Gets an internal parameter Example: >>> ga.getParam("gp_terminals") ['x', 'y'] :param key: the key of param :param nvl: if the key doesn't exist, the nvl will be returned ..versionaddd:: 0.6 Added the *getParam* method. """ return self.internalParams.get(key, nvl) def setInteractiveGeneration(self, generation): """ Sets the generation in which the GA must enter in the Interactive Mode :param generation: the generation number, use "-1" to disable .. versionadded::0.6 The *setInteractiveGeneration* method. """ if generation < -1: Util.raiseException("Generation must be >= -1", ValueError) self.interactiveGen = generation def getInteractiveGeneration(self): """ returns the generation in which the GA must enter in the Interactive Mode :rtype: the generation number or -1 if not set .. versionadded::0.6 The *getInteractiveGeneration* method. """ return self.interactiveGen def setElitismReplacement(self, numreplace): """ Set the number of best individuals to copy to the next generation on the elitism :param numreplace: the number of individuals .. versionadded:: 0.6 The *setElitismReplacement* method. """ if numreplace < 1: Util.raiseException("Replacement number must be >= 1", ValueError) self.nElitismReplacement = numreplace def setInteractiveMode(self, flag=True): """ Enable/disable the interactive mode :param flag: True or False .. versionadded: 0.6 The *setInteractiveMode* method. """ if type(flag) != BooleanType: Util.raiseException("Interactive Mode option must be True or False", TypeError) self.interactiveMode = flag def __repr__(self): """ The string representation of the GA Engine """ ret = "- GSimpleGA\n" ret += "\tGP Mode:\t\t %s\n" % self.getGPMode() ret += "\tPopulation Size:\t %d\n" % (self.internalPop.popSize,) ret += "\tGenerations:\t\t %d\n" % (self.nGenerations,) ret += "\tCurrent Generation:\t %d\n" % (self.currentGeneration,) ret += "\tMutation Rate:\t\t %.2f\n" % (self.pMutation,) ret += "\tCrossover Rate:\t\t %.2f\n" % (self.pCrossover,) ret += "\tMinimax Type:\t\t %s\n" % (Consts.minimaxType.keys()[Consts.minimaxType.values().index(self.minimax)].capitalize(),) ret += "\tElitism:\t\t %s\n" % (self.elitism,) ret += "\tElitism Replacement:\t %d\n" % (self.nElitismReplacement,) ret += "\tDB Adapter:\t\t %s\n" % (self.dbAdapter,) for slot in self.allSlots: ret+= "\t" + slot.__repr__() ret+="\n" return ret def setMultiProcessing(self, flag=True, full_copy=False): """ Sets the flag to enable/disable the use of python multiprocessing module. Use this option when you have more than one core on your CPU and when your evaluation function is very slow. Pyevolve will automaticly check if your Python version has **multiprocessing** support and if you have more than one single CPU core. If you don't have support or have just only one core, Pyevolve will not use the **multiprocessing** feature. Pyevolve uses the **multiprocessing** to execute the evaluation function over the individuals, so the use of this feature will make sense if you have a truly slow evaluation function (which is commom in GAs). The parameter "full_copy" defines where the individual data should be copied back after the evaluation or not. This parameter is useful when you change the individual in the evaluation function. :param flag: True (default) or False :param full_copy: True or False (default) .. warning:: Use this option only when your evaluation function is slow, so you'll get a good tradeoff between the process communication speed and the parallel evaluation. The use of the **multiprocessing** doesn't means always a better performance. .. note:: To enable the multiprocessing option, you **MUST** add the *__main__* check on your application, otherwise, it will result in errors. See more on the `Python Docs `__ site. .. versionadded:: 0.6 The `setMultiProcessing` method. """ if type(flag) != BooleanType: Util.raiseException("Multiprocessing option must be True or False", TypeError) if type(full_copy) != BooleanType: Util.raiseException("Multiprocessing 'full_copy' option must be True or False", TypeError) self.internalPop.setMultiProcessing(flag, full_copy) def setMigrationAdapter(self, migration_adapter=None): """ Sets the Migration Adapter .. versionadded:: 0.6 The `setMigrationAdapter` method. """ if (migration_adapter is not None) and (not isinstance(migration_adapter, MigrationScheme)): Util.raiseException("The Migration Adapter must be a MigrationScheme subclass", TypeError) self.migrationAdapter = migration_adapter if self.migrationAdapter is not None: self.migrationAdapter.setGAEngine(self) def setDBAdapter(self, dbadapter=None): """ Sets the DB Adapter of the GA Engine :param dbadapter: one of the :mod:`DBAdapters` classes instance .. warning:: the use the of a DB Adapter can reduce the speed performance of the Genetic Algorithm. """ if (dbadapter is not None) and (not isinstance(dbadapter, DBBaseAdapter)): Util.raiseException("The DB Adapter must be a DBBaseAdapter subclass", TypeError) self.dbAdapter = dbadapter def setPopulationSize(self, size): """ Sets the population size, calls setPopulationSize() of GPopulation :param size: the population size .. note:: the population size must be >= 2 """ if size < 2: Util.raiseException("population size must be >= 2", ValueError) self.internalPop.setPopulationSize(size) def setSortType(self, sort_type): """ Sets the sort type, Consts.sortType["raw"]/Consts.sortType["scaled"] Example: >>> ga_engine.setSortType(Consts.sortType["scaled"]) :param sort_type: the Sort Type """ if sort_type not in Consts.sortType.values(): Util.raiseException("sort type must be a Consts.sortType type", TypeError) self.internalPop.sortType = sort_type def setMutationRate(self, rate): """ Sets the mutation rate, between 0.0 and 1.0 :param rate: the rate, between 0.0 and 1.0 """ if (rate>1.0) or (rate<0.0): Util.raiseException("Mutation rate must be >= 0.0 and <= 1.0", ValueError) self.pMutation = rate def setCrossoverRate(self, rate): """ Sets the crossover rate, between 0.0 and 1.0 :param rate: the rate, between 0.0 and 1.0 """ if (rate>1.0) or (rate<0.0): Util.raiseException("Crossover rate must be >= 0.0 and <= 1.0", ValueError) self.pCrossover = rate def setGenerations(self, num_gens): """ Sets the number of generations to evolve :param num_gens: the number of generations """ if num_gens < 1: Util.raiseException("Number of generations must be >= 1", ValueError) self.nGenerations = num_gens def getGenerations(self): """ Return the number of generations to evolve :rtype: the number of generations .. versionadded:: 0.6 Added the *getGenerations* method """ return self.nGenerations def getMinimax(self): """ Gets the minimize/maximize mode :rtype: the Consts.minimaxType type """ return self.minimax def setMinimax(self, mtype): """ Sets the minimize/maximize mode, use Consts.minimaxType :param mtype: the minimax mode, from Consts.minimaxType """ if mtype not in Consts.minimaxType.values(): Util.raiseException("Minimax must be maximize or minimize", TypeError) self.minimax = mtype def getCurrentGeneration(self): """ Gets the current generation :rtype: the current generation """ return self.currentGeneration def setElitism(self, flag): """ Sets the elitism option, True or False :param flag: True or False """ if type(flag) != BooleanType: Util.raiseException("Elitism option must be True or False", TypeError) self.elitism = flag def getDBAdapter(self): """ Gets the DB Adapter of the GA Engine :rtype: a instance from one of the :mod:`DBAdapters` classes """ return self.dbAdapter def bestIndividual(self): """ Returns the population best individual :rtype: the best individual """ return self.internalPop.bestRaw() def __gp_catch_functions(self, prefix): """ Internally used to catch functions with some specific prefix as non-terminals of the GP core """ import __main__ as mod_main function_set = {} main_dict = mod_main.__dict__ for obj, addr in main_dict.items(): if obj[0:len(prefix)] == prefix: try: op_len = addr.func_code.co_argcount except: continue function_set[obj] = op_len if len(function_set) <= 0: Util.raiseException("No function set found using function prefix '%s' !" % prefix, ValueError) self.setParams(gp_function_set=function_set) def initialize(self): """ Initializes the GA Engine. Create and initialize population """ self.internalPop.create(minimax=self.minimax) self.internalPop.initialize(ga_engine=self) logging.debug("The GA Engine was initialized !") def getPopulation(self): """ Return the internal population of GA Engine :rtype: the population (:class:`GPopulation.GPopulation`) """ return self.internalPop def getStatistics(self): """ Gets the Statistics class instance of current generation :rtype: the statistics instance (:class:`Statistics.Statistics`) """ return self.internalPop.getStatistics() def step(self): """ Just do one step in evolution, one generation """ genomeMom = None genomeDad = None newPop = GPopulation(self.internalPop) logging.debug("Population was cloned.") size_iterate = len(self.internalPop) # Odd population size if size_iterate % 2 != 0: size_iterate -= 1 crossover_empty = self.select(popID=self.currentGeneration).crossover.isEmpty() for i in xrange(0, size_iterate, 2): genomeMom = self.select(popID=self.currentGeneration) genomeDad = self.select(popID=self.currentGeneration) if not crossover_empty and self.pCrossover >= 1.0: for it in genomeMom.crossover.applyFunctions(mom=genomeMom, dad=genomeDad, count=2): (sister, brother) = it else: if not crossover_empty and Util.randomFlipCoin(self.pCrossover): for it in genomeMom.crossover.applyFunctions(mom=genomeMom, dad=genomeDad, count=2): (sister, brother) = it else: sister = genomeMom.clone() brother = genomeDad.clone() sister.mutate(pmut=self.pMutation, ga_engine=self) brother.mutate(pmut=self.pMutation, ga_engine=self) newPop.internalPop.append(sister) newPop.internalPop.append(brother) if len(self.internalPop) % 2 != 0: genomeMom = self.select(popID=self.currentGeneration) genomeDad = self.select(popID=self.currentGeneration) if Util.randomFlipCoin(self.pCrossover): for it in genomeMom.crossover.applyFunctions(mom=genomeMom, dad=genomeDad, count=1): (sister, brother) = it else: sister = random.choice([genomeMom, genomeDad]) sister = sister.clone() sister.mutate(pmut=self.pMutation, ga_engine=self) newPop.internalPop.append(sister) logging.debug("Evaluating the new created population.") newPop.evaluate() if self.elitism: logging.debug("Doing elitism.") if self.getMinimax() == Consts.minimaxType["maximize"]: for i in xrange(self.nElitismReplacement): if self.internalPop.bestRaw(i).score > newPop.bestRaw(i).score: newPop[len(newPop)-1-i] = self.internalPop.bestRaw(i) elif self.getMinimax() == Consts.minimaxType["minimize"]: for i in xrange(self.nElitismReplacement): if self.internalPop.bestRaw(i).score < newPop.bestRaw(i).score: newPop[len(newPop)-1-i] = self.internalPop.bestRaw(i) self.internalPop = newPop self.internalPop.sort() logging.debug("The generation %d was finished.", self.currentGeneration) self.currentGeneration += 1 return (self.currentGeneration == self.nGenerations) def printStats(self): """ Print generation statistics :rtype: the printed statistics as string .. versionchanged:: 0.6 The return of *printStats* method. """ percent = self.currentGeneration * 100 / float(self.nGenerations) message = "Gen. %d (%.2f%%):" % (self.currentGeneration, percent) logging.info(message) print message, sys_stdout.flush() self.internalPop.statistics() stat_ret = self.internalPop.printStats() return message + stat_ret def printTimeElapsed(self): """ Shows the time elapsed since the begin of evolution """ total_time = time()-self.time_init print "Total time elapsed: %.3f seconds." % total_time return total_time def dumpStatsDB(self): """ Dumps the current statistics to database adapter """ logging.debug("Dumping stats to the DB Adapter") self.internalPop.statistics() self.dbAdapter.insert(self) def evolve(self, freq_stats=0): """ Do all the generations until the termination criteria, accepts the freq_stats (default is 0) to dump statistics at n-generation Example: >>> ga_engine.evolve(freq_stats=10) (...) :param freq_stats: if greater than 0, the statistics will be printed every freq_stats generation. :rtype: returns the best individual of the evolution .. versionadded:: 0.6 the return of the best individual """ stopFlagCallback = False stopFlagTerminationCriteria = False self.time_init = time() logging.debug("Starting the DB Adapter and the Migration Adapter if any") if self.dbAdapter: self.dbAdapter.open(self) if self.migrationAdapter: self.migrationAdapter.start() if self.getGPMode(): gp_function_prefix = self.getParam("gp_function_prefix") if gp_function_prefix is not None: self.__gp_catch_functions(gp_function_prefix) self.initialize() self.internalPop.evaluate() self.internalPop.sort() logging.debug("Starting loop over evolutionary algorithm.") try: while True: if self.migrationAdapter: logging.debug("Migration adapter: exchange") self.migrationAdapter.exchange() self.internalPop.clearFlags() self.internalPop.sort() if not self.stepCallback.isEmpty(): for it in self.stepCallback.applyFunctions(self): stopFlagCallback = it if not self.terminationCriteria.isEmpty(): for it in self.terminationCriteria.applyFunctions(self): stopFlagTerminationCriteria = it if freq_stats: if (self.currentGeneration % freq_stats == 0) or (self.getCurrentGeneration() == 0): self.printStats() if self.dbAdapter: if self.currentGeneration % self.dbAdapter.getStatsGenFreq() == 0: self.dumpStatsDB() if stopFlagTerminationCriteria: logging.debug("Evolution stopped by the Termination Criteria !") if freq_stats: print "\n\tEvolution stopped by Termination Criteria function !\n" break if stopFlagCallback: logging.debug("Evolution stopped by Step Callback function !") if freq_stats: print "\n\tEvolution stopped by Step Callback function !\n" break if self.interactiveMode: if sys_platform[:3] == "win": if msvcrt.kbhit(): if ord(msvcrt.getch()) == Consts.CDefESCKey: print "Loading modules for Interactive Mode...", logging.debug("Windows Interactive Mode key detected ! generation=%d", self.getCurrentGeneration()) from pyevolve import Interaction print " done !" interact_banner = "## Pyevolve v.%s - Interactive Mode ##\nPress CTRL-Z to quit interactive mode." % (pyevolve.__version__,) session_locals = { "ga_engine" : self, "population" : self.getPopulation(), "pyevolve" : pyevolve, "it" : Interaction} print code.interact(interact_banner, local=session_locals) if (self.getInteractiveGeneration() >= 0) and (self.getInteractiveGeneration() == self.getCurrentGeneration()): print "Loading modules for Interactive Mode...", logging.debug("Manual Interactive Mode key detected ! generation=%d", self.getCurrentGeneration()) from pyevolve import Interaction print " done !" interact_banner = "## Pyevolve v.%s - Interactive Mode ##" % (pyevolve.__version__,) session_locals = { "ga_engine" : self, "population" : self.getPopulation(), "pyevolve" : pyevolve, "it" : Interaction} print code.interact(interact_banner, local=session_locals) if self.step(): break except KeyboardInterrupt: logging.debug("CTRL-C detected, finishing evolution.") if freq_stats: print "\n\tA break was detected, you have interrupted the evolution !\n" if freq_stats != 0: self.printStats() self.printTimeElapsed() if self.dbAdapter: logging.debug("Closing the DB Adapter") if not (self.currentGeneration % self.dbAdapter.getStatsGenFreq() == 0): self.dumpStatsDB() self.dbAdapter.commitAndClose() if self.migrationAdapter: logging.debug("Closing the Migration Adapter") if freq_stats: print "Stopping the migration adapter... ", self.migrationAdapter.stop() if freq_stats: print "done !" return self.bestIndividual() def select(self, **args): """ Select one individual from population :param args: this parameters will be sent to the selector """ for it in self.selector.applyFunctions(self.internalPop, **args): return it pyevolve-0.6~rc1+svn398+dfsg/pyevolve/GTree.py000066400000000000000000000521061153663664300212730ustar00rootroot00000000000000""" :mod:`GTree` and GTreeGP -- the tree chromosomes ============================================================= This is the rooted tree representation, this chromosome representation can carry any data-type. Default Parameters ------------------------------------------------------------- *Initializator* :func:`Initializators.GTreeInitializatorInteger` The Integer Initializator for GTree *Mutator* :func:`Mutators.GTreeMutatorIntegerRange` The Integer Range mutator for GTree *Crossover* :func:`Crossovers.GTreeCrossoverSinglePointStrict` The Strict Single Point crossover for GTree .. versionadded:: 0.6 The *GTree* module. Classes ------------------------------------------------------------- """ import random from GenomeBase import GenomeBase, GTreeBase, GTreeNodeBase import Consts import Util try: import pydot HAVE_PYDOT = True except ImportError: HAVE_PYDOT = False ################################# # GTree # ################################# class GTree(GenomeBase, GTreeBase): """ The GTree class - The tree chromosome representation Inheritance diagram for :class:`GTree.GTree`: .. inheritance-diagram:: GTree.GTree :param root_node: the root node of the tree """ evaluator = None """ This is the :term:`evaluation function` slot, you can add a function with the *set* method: :: genome.evaluator.set(eval_func) """ initializator = None """ This is the initialization function of the genome, you can change the default initializator using the function slot: :: genome.initializator.set(Initializators.G1DListInitializatorAllele) In this example, the initializator :func:`Initializators.G1DListInitializatorAllele` will be used to create the initial population. """ mutator = None """ This is the mutator function slot, you can change the default mutator using the slot *set* function: :: genome.mutator.set(Mutators.G1DListMutatorSwap) """ crossover = None """ This is the reproduction function slot, the crossover. You can change the default crossover method using: :: genome.crossover.set(Crossovers.G1DListCrossoverUniform) """ def __init__(self, root_node=None): GenomeBase.__init__(self) GTreeBase.__init__(self, root_node) self.initializator.set(Consts.CDefGTreeInit) self.mutator.set(Consts.CDefGGTreeMutator) self.crossover.set(Consts.CDefGTreeCrossover) def __repr__(self): """ Return a string representation of Genome """ ret = GenomeBase.__repr__(self) ret += GTreeBase.__repr__(self) return ret def copy(self, g): """ Copy the contents to the destination g :param g: the GTree genome destination """ GenomeBase.copy(self, g) GTreeBase.copy(self, g) def clone(self): """ Return a new instance of the genome :rtype: new GTree instance """ newcopy = GTree() self.copy(newcopy) newcopy.processNodes(True) return newcopy class GTreeNode(GTreeNodeBase): """ The GTreeNode class - The node representation Inheritance diagram for :class:`GTree.GTreeNode`: .. inheritance-diagram:: GTree.GTreeNode :param data: the root node of the tree :param parent: the parent node, if root, this must be *None* """ def __init__(self, data, parent=None): GTreeNodeBase.__init__(self, parent) self.node_data = data def __repr__(self): str_repr = GTreeNodeBase.__repr__(self) str_repr += " - [%s]" % self.node_data return str_repr def setData(self, data): """ Sets the data of the node :param data: the data of the node """ self.node_data = data def getData(self): """ Return the data of the node :rtype: the data of the node """ return self.node_data def newNode(self, data): """ Created a new child node :param data: the data of the new created node """ node = GTreeNode(data, self) self.addChild(node) return node def swapNodeData(self, node): """ Swaps the node data with another node :param node: the node to do the data swap """ tmp_data = self.node_data self.setData(node.getData()) node.setData(tmp_data) def copy(self, g): """ Copy the contents to the destination g :param g: the GTreeNode genome destination """ GTreeNodeBase.copy(self, g) g.node_data = self.node_data def clone(self): """ Return a new instance of the genome :rtype: new GTree instance """ newcopy = GTreeNode(None) self.copy(newcopy) return newcopy ################################# # Tree Utility Functions # ################################# def buildGTreeGrow(depth, value_callback, max_siblings, max_depth): """ Random generates a Tree structure using the value_callback for data generation and the method "Grow" :param depth: the initial depth, zero :param value_callback: the function which generates the random values for nodes :param max_siblings: the maximum number of sisters of a node :param max_depth: the maximum depth of the tree :rtype: the root node of created tree """ random_value = value_callback() n = GTreeNode(random_value) if depth == max_depth: return n for i in xrange(random.randint(0, abs(max_siblings))): child = buildGTreeGrow(depth+1, value_callback, max_siblings, max_depth) child.setParent(n) n.addChild(child) return n def buildGTreeFull(depth, value_callback, max_siblings, max_depth): """ Random generates a Tree structure using the value_callback for data generation and the method "Full" :param depth: the initial depth, zero :param value_callback: the function which generates the random values for nodes :param max_siblings: the maximum number of sisters of a node :param max_depth: the maximum depth of the tree :rtype: the root node of created tree """ random_value = value_callback() n = GTreeNode(random_value) if depth == max_depth: return n if max_siblings < 0: range_val = abs(max_siblings) else: range_val = random.randint(1, abs(max_siblings)) for i in xrange(range_val): child = buildGTreeFull(depth+1, value_callback, max_siblings, max_depth) child.setParent(n) n.addChild(child) return n ################################# # GTree GP # ################################# class GTreeNodeGP(GTreeNodeBase): """ The GTreeNodeGP Class - The Genetic Programming Node representation Inheritance diagram for :class:`GTree.GTreeNodeGP`: .. inheritance-diagram:: GTree.GTreeNodeGP :param data: the node data :param type: the node type :param parent: the node parent """ def __init__(self, data, node_type=0, parent=None): GTreeNodeBase.__init__(self, parent) self.node_type = node_type self.node_data = data def __repr__(self): str_repr = GTreeNodeBase.__repr__(self) str_repr += " - [%s]" % self.node_data return str_repr def compare(self, other): """ Compare this node with other :param other: the other GTreeNodeGP """ if not isinstance(other, GTreeNodeGP): Util.raiseException("The other node used to compare is not a GTreeNodeGP class", TypeError) if other.node_type == self.node_type: if other.node_data == self.node_data: return 0 return -1 def setData(self, data): """Sets the node internal data :param data: the internal data """ self.node_data = data def getData(self): """Gets the node internal data :rtype: the internal data """ return self.node_data def setType(self, node_type): """Sets the node type :param node_type: the node type is type of Consts.nodeType """ self.node_type = node_type def getType(self): """Get the node type :rtype: the node type is type of Consts.nodeType """ return self.node_type def newNode(self, data): """Creates a new node and adds this node as children of current node :param data: the internal node data """ node = GTreeNodeGP(data, self) self.addChild(node) return node def swapNodeData(self, node): """Swaps the node data and type with another node :param node: the node """ tmp_data = self.node_data tmp_type = self.node_type self.setData(node.getData()) self.setType(node.getType()) node.setData(tmp_data) node.setType(tmp_type) def copy(self, g): """ Copy the contents to the destination g :param g: the GTreeNodeGP genome destination """ GTreeNodeBase.copy(self, g) g.node_data = self.node_data g.node_type = self.node_type def clone(self): """ Return a new copy of the node :rtype: the new GTreeNodeGP instance """ newcopy = GTreeNodeGP(None) self.copy(newcopy) return newcopy class GTreeGP(GenomeBase, GTreeBase): """ The GTreeGP Class - The Genetic Programming Tree representation Inheritance diagram for :class:`GTree.GTreeGP`: .. inheritance-diagram:: GTree.GTreeGP :param root_node: the Root node of the GP Tree """ def __init__(self, root_node=None, cloning=False): GenomeBase.__init__(self) GTreeBase.__init__(self, root_node) if not cloning: self.initializator.set(Consts.CDefGTreeGPInit) self.mutator.set(Consts.CDefGGTreeGPMutator) self.crossover.set(Consts.CDefGTreeGPCrossover) def __repr__(self): """ Return a string representation of Genome """ ret = GenomeBase.__repr__(self) ret += GTreeBase.__repr__(self) ret += "\n- GTreeGP\n" ret += "\tExpression: %s\n" % self.getPreOrderExpression() return ret def writeDotImage(self, filename): """ Writes a image representation of the individual :param filename: the output file image """ if not HAVE_PYDOT: Util.raiseException("You must install Pydot to use this feature !") graph = pydot.Dot() self.writeDotGraph(graph) graph.write_jpeg(filename, prog='dot') def writeDotRaw(self, filename): """ Writes the raw dot file (text-file used by dot/neato) with the representation of the individual :param filename: the output file, ex: individual.dot """ if not HAVE_PYDOT: Util.raiseException("You must install Pydot to use this feature !") graph = pydot.Dot(graph_type="digraph") self.writeDotGraph(graph) graph.write(filename, prog='dot', format="raw") def writeDotGraph(self, graph, startNode=0): """ Write a graph to the pydot Graph instance :param graph: the pydot Graph instance :param startNode: used to plot more than one individual """ if not HAVE_PYDOT: print "You must install Pydot to use this feature !" return count = startNode node_stack = [] nodes_dict = {} tmp = None import __main__ as main_module for i in xrange(len(self.nodes_list)): newnode = pydot.Node(str(count), style="filled") count += 1 if self.nodes_list[i].getType() == Consts.nodeType["TERMINAL"]: newnode.set_color("lightblue2") else: newnode.set_color("goldenrod2") if self.nodes_list[i].getType() == Consts.nodeType["NONTERMINAL"]: func = getattr(main_module, self.nodes_list[i].getData()) if hasattr(func, "shape"): newnode.set_shape(func.shape) if hasattr(func, "representation"): newnode.set_label(func.representation) else: newnode.set_label(self.nodes_list[i].getData()) if hasattr(func, "color"): newnode.set_color(func.color) else: newnode.set_label(self.nodes_list[i].getData()) nodes_dict.update({self.nodes_list[i]: newnode}) graph.add_node(newnode) node_stack.append(self.getRoot()) while len(node_stack) > 0: tmp = node_stack.pop() parent = tmp.getParent() if parent is not None: parent_node = nodes_dict[parent] child_node = nodes_dict[tmp] newedge = pydot.Edge(parent_node, child_node) graph.add_edge(newedge) rev_childs = tmp.getChilds()[:] rev_childs.reverse() node_stack.extend(rev_childs) return count def getSExpression(self, start_node=None): """ Returns a tree-formated string (s-expression) of the tree. :rtype: a S-Expression representing the tree """ str_buff = "" if start_node is None: start_node = self.getRoot() str_buff += "%s " % start_node.getData() is_leaf = start_node.isLeaf() if not is_leaf: str_buff += "( " for child_node in start_node.getChilds(): str_buff += "%s " % child_node.getData() str_buff += self.getSExpression(child_node) if not is_leaf: str_buff += " )" return str_buff def getPreOrderExpression(self, start_node=None): """ Return the pre order expression string of the Tree, used to python *eval*. :rtype: the expression string """ if start_node is None: start_node = self.getRoot() str_buff = start_node.getData() if not start_node.isLeaf(): all_childs = start_node.getChilds() str_buff += "(" + self.getPreOrderExpression(all_childs[0]) for index in xrange(1, len(all_childs)): child = all_childs[index] str_buff += ", " + self.getPreOrderExpression(child) str_buff += ")" return str_buff def getCompiledCode(self): """ Get the compiled code for the Tree expression After getting the compiled code object, you just need to evaluate it using the :func:`eval` native Python method. :rtype: compiled python code """ expr = self.getPreOrderExpression() return compile(expr, "", "eval") def copy(self, g): """ Copy the contents to the destination g :param g: the GTreeGP genome destination """ GenomeBase.copy(self, g) GTreeBase.copy(self, g) def clone(self): """ Return a new instance of the genome :rtype: the new GTreeGP instance """ newcopy = GTreeGP(cloning=True) self.copy(newcopy) newcopy.processNodes(True) return newcopy def compare(self, other): """ This method will compare the currently tree with another one :param other: the other GTreeGP to compare """ if not isinstance(other, GTreeGP): Util.raiseException("The other tree used to compare is not a GTreeGP class", TypeError) stack_self = [] stack_other = [] tmp_self = None tmp_other = None stack_self.append(self.getRoot()) stack_other.append(other.getRoot()) while len(stack_self) > 0: if (len(stack_self) <= 0) or (len(stack_other) <= 0): return -1 tmp_self, tmp_other = stack_self.pop(), stack_other.pop() if tmp_self.compare(tmp_other) <> 0: return -1 stack_self.extend(tmp_self.getChilds()) stack_other.extend(tmp_other.getChilds()) return 0 @staticmethod def writePopulationDot(ga_engine, filename, format="jpeg", start=0, end=0): """ Writes to a graphical file using pydot, the population of trees Example: >>> GTreeGP.writePopulationDot(ga_engine, "pop.jpg", "jpeg", 0, 10) This example will draw the first ten individuals of the population into the file called "pop.jpg". :param ga_engine: the GA Engine :param filename: the filename, ie. population.jpg :param start: the start index of individuals :param end: the end index of individuals """ if not HAVE_PYDOT: Util.raiseException("You must install Pydot to use this feature !") pop = ga_engine.getPopulation() graph = pydot.Dot(graph_type="digraph") if not isinstance(pop[0], GTreeGP): Util.raiseException("The population must have individuals of the GTreeGP chromosome !") n = 0 end_index = len(pop) if end==0 else end for i in xrange(start, end_index): ind = pop[i] subg = pydot.Cluster("cluster_%d" % i, label="\"Ind. #%d - Score Raw/Fit.: %.4f/%.4f\"" % (i, ind.getRawScore(), ind.getFitnessScore())) n = ind.writeDotGraph(subg, n) graph.add_subgraph(subg) graph.write(filename, prog='dot', format=format) @staticmethod def writePopulationDotRaw(ga_engine, filename, start=0, end=0): """ Writes to a raw dot file using pydot, the population of trees Example: >>> GTreeGP.writePopulationDotRaw(ga_engine, "pop.dot", 0, 10) This example will draw the first ten individuals of the population into the file called "pop.dot". :param ga_engine: the GA Engine :param filename: the filename, ie. population.dot :param start: the start index of individuals :param end: the end index of individuals """ if not HAVE_PYDOT: Util.raiseException("You must install Pydot to use this feature !") pop = ga_engine.getPopulation() graph = pydot.Dot(graph_type="digraph") if not isinstance(pop[0], GTreeGP): Util.raiseException("The population must have individuals of the GTreeGP chromosome !") n = 0 end_index = len(pop) if end==0 else end for i in xrange(start, end_index): ind = pop[i] subg = pydot.Cluster("cluster_%d" % i, label="\"Ind. #%d - Score Raw/Fit.: %.4f/%.4f\"" % (i, ind.getRawScore(), ind.getFitnessScore())) n = ind.writeDotGraph(subg, n) graph.add_subgraph(subg) graph.write(filename, prog='dot', format="raw") ################################# # Tree GP Utility Functions # ################################# def gpdec(**kwds): """ This is a decorator to use with genetic programming non-terminals It currently accepts the attributes: shape, color and representation. """ def decorate(f): for k in kwds: setattr(f, k, kwds[k]) return f return decorate def checkTerminal(terminal): """ Do some check on the terminal, to evaluate ephemeral constants :param terminal: the terminal string """ if terminal.startswith("ephemeral:"): splited = terminal.split(":") ephemeral_constant = eval(splited[1]) return str(ephemeral_constant) else: return terminal def buildGTreeGPGrow(ga_engine, depth, max_depth): """ Creates a new random GTreeGP root node with subtrees using the "Grow" method. :param ga_engine: the GA Core :param depth: the initial depth :max_depth: the maximum depth of the tree :rtype: the root node """ gp_terminals = ga_engine.getParam("gp_terminals") assert gp_terminals is not None gp_function_set = ga_engine.getParam("gp_function_set") assert gp_function_set is not None if depth == max_depth: random_terminal = checkTerminal(random.choice(gp_terminals)) n = GTreeNodeGP(random_terminal, Consts.nodeType["TERMINAL"]) return n else: # Do not generate degenerative trees if depth == 0: random_node = random.choice(gp_function_set.keys()) else: fchoice = random.choice([gp_function_set.keys(), gp_terminals]) random_node = random.choice(fchoice) if random_node in gp_terminals: n = GTreeNodeGP(checkTerminal(random_node), Consts.nodeType["TERMINAL"]) else: n = GTreeNodeGP(random_node, Consts.nodeType["NONTERMINAL"]) if n.getType() == Consts.nodeType["NONTERMINAL"]: for i in xrange(gp_function_set[n.getData()]): child = buildGTreeGPGrow(ga_engine, depth+1, max_depth) child.setParent(n) n.addChild(child) return n def buildGTreeGPFull(ga_engine, depth, max_depth): """ Creates a new random GTreeGP root node with subtrees using the "Full" method. :param ga_engine: the GA Core :param depth: the initial depth :max_depth: the maximum depth of the tree :rtype: the root node """ gp_terminals = ga_engine.getParam("gp_terminals") assert gp_terminals is not None gp_function_set = ga_engine.getParam("gp_function_set") assert gp_function_set is not None if depth == max_depth: random_terminal = checkTerminal(random.choice(gp_terminals)) n = GTreeNodeGP(random_terminal, Consts.nodeType["TERMINAL"]) return n else: random_oper = random.choice(gp_function_set.keys()) n = GTreeNodeGP(random_oper, Consts.nodeType["NONTERMINAL"]) if n.getType() == Consts.nodeType["NONTERMINAL"]: for i in xrange(gp_function_set[n.getData()]): child = buildGTreeGPFull(ga_engine, depth+1, max_depth) child.setParent(n) n.addChild(child) return n pyevolve-0.6~rc1+svn398+dfsg/pyevolve/GenomeBase.py000066400000000000000000000424171153663664300222760ustar00rootroot00000000000000""" :mod:`GenomeBase` -- the genomes base module ================================================================ This module have the class which every representation extends, if you are planning to create a new representation, you must take a inside look into this module. """ from random import choice as rand_choice import inspect from FunctionSlot import FunctionSlot import Util class GenomeBase: """ GenomeBase Class - The base of all chromosome representation """ evaluator = None """ This is the :term:`evaluation function` slot, you can add a function with the *set* method: :: genome.evaluator.set(eval_func) """ initializator = None """ This is the initialization function of the genome, you can change the default initializator using the function slot: :: genome.initializator.set(Initializators.G1DListInitializatorAllele) In this example, the initializator :func:`Initializators.G1DListInitializatorAllele` will be used to create the initial population. """ mutator = None """ This is the mutator function slot, you can change the default mutator using the slot *set* function: :: genome.mutator.set(Mutators.G1DListMutatorSwap) """ crossover = None """ This is the reproduction function slot, the crossover. You can change the default crossover method using: :: genome.crossover.set(Crossovers.G1DListCrossoverUniform) """ def __init__(self): """Genome Constructor""" self.evaluator = FunctionSlot("Evaluator") self.initializator = FunctionSlot("Initializator") self.mutator = FunctionSlot("Mutator") self.crossover = FunctionSlot("Crossover") self.internalParams = {} self.score = 0.0 self.fitness = 0.0 def getRawScore(self): """ Get the Raw Score of the genome :rtype: genome raw score """ return self.score def getFitnessScore(self): """ Get the Fitness Score of the genome :rtype: genome fitness score """ return self.fitness def __repr__(self): """String representation of Genome""" allSlots = self.allSlots = [ self.evaluator, self.initializator, self.mutator, self.crossover ] ret = "- GenomeBase\n" ret+= "\tScore:\t\t\t %.6f\n" % (self.score,) ret+= "\tFitness:\t\t %.6f\n\n" % (self.fitness,) ret+= "\tParams:\t\t %s\n\n" % (self.internalParams,) for slot in allSlots: ret+= "\t" + slot.__repr__() ret+="\n" return ret def setParams(self, **args): """ Set the internal params Example: >>> genome.setParams(rangemin=0, rangemax=100, gauss_mu=0, gauss_sigma=1) .. note:: All the individuals of the population shares this parameters and uses the same instance of this dict. :param args: this params will saved in every chromosome for genetic op. use """ self.internalParams.update(args) def getParam(self, key, nvl=None): """ Gets an internal parameter Example: >>> genome.getParam("rangemax") 100 .. note:: All the individuals of the population shares this parameters and uses the same instance of this dict. :param key: the key of param :param nvl: if the key doesn't exist, the nvl will be returned """ return self.internalParams.get(key, nvl) def resetStats(self): """ Clear score and fitness of genome """ self.score = 0.0 self.fitness = 0.0 def evaluate(self, **args): """ Called to evaluate genome :param args: this parameters will be passes to the evaluator """ self.resetStats() for it in self.evaluator.applyFunctions(self, **args): self.score += it def initialize(self, **args): """ Called to initialize genome :param args: this parameters will be passed to the initializator """ for it in self.initializator.applyFunctions(self, **args): pass def mutate(self, **args): """ Called to mutate the genome :param args: this parameters will be passed to the mutator :rtype: the number of mutations returned by mutation operator """ nmuts = 0 for it in self.mutator.applyFunctions(self, **args): nmuts+=it return nmuts def copy(self, g): """ Copy the current GenomeBase to 'g' :param g: the destination genome .. note:: If you are planning to create a new chromosome representation, you **must** implement this method on your class. """ g.score = self.score g.fitness = self.fitness g.evaluator = self.evaluator g.initializator = self.initializator g.mutator = self.mutator g.crossover = self.crossover #g.internalParams = self.internalParams.copy() g.internalParams = self.internalParams def clone(self): """ Clone this GenomeBase :rtype: the clone genome .. note:: If you are planning to create a new chromosome representation, you **must** implement this method on your class. """ newcopy = GenomeBase() self.copy(newcopy) return newcopy class G1DBase: """ G1DBase Class - The base class for 1D chromosomes :param size: the 1D list size .. versionadded:: 0.6 Added te *G1DBase* class """ def __init__(self, size): self.genomeSize = size self.genomeList = [] def __iadd__(self, item): """ To add more items using the += operator """ self.genomeList.append(item) return self def __eq__(self, other): """ Compares one chromosome with another """ cond1 = (self.genomeList == other.genomeList) cond2 = (self.genomeSize == other.genomeSize) return True if cond1 and cond2 else False def __contains__(self, value): """ Used on: *value in genome* """ return value in self.genomeList def __getslice__(self, a, b): """ Return the sliced part of chromosome """ return self.genomeList[a:b] def __setslice__(self, a, b, val): """ Sets the slice part of chromosome """ self.genomeList[a:b] = val def __getitem__(self, key): """ Return the specified gene of List """ return self.genomeList[key] def __setitem__(self, key, value): """ Set the specified value for an gene of List """ self.genomeList[key] = value def __iter__(self): """ Iterator support to the list """ return iter(self.genomeList) def __len__(self): """ Return the size of the List """ return len(self.genomeList) def getListSize(self): """ Returns the list supposed size .. warning:: this is different from what the len(obj) returns """ return self.genomeSize def resumeString(self): """ Returns a resumed string representation of the Genome """ return str(self.genomeList) def append(self, value): """ Appends an item to the end of the list Example: >>> genome.append(44) :param value: value to be added """ self.genomeList.append(value) def remove(self, value): """ Removes an item from the list Example: >>> genome.remove(44) :param value: value to be added """ self.genomeList.remove(value) def clearList(self): """ Remove all genes from Genome """ del self.genomeList[:] def copy(self, g): """ Copy genome to 'g' Example: >>> genome_origin.copy(genome_destination) :param g: the destination instance """ g.genomeSize = self.genomeSize g.genomeList = self.genomeList[:] def getInternalList(self): """ Returns the internal list of the genome ... note:: this method was created to solve performance issues :rtype: the internal list """ return self.genomeList def setInternalList(self, lst): """ Assigns a list to the internal list of the chromosome :param lst: the list to assign the internal list of the chromosome """ self.genomeList = lst class GTreeNodeBase: """ GTreeNodeBase Class - The base class for the node tree genomes :param parent: the parent node of the node :param childs: the childs of the node, must be a list of nodes .. versionadded:: 0.6 Added te *GTreeNodeBase* class """ def __init__(self, parent, childs=None): self.parent = parent self.childs = [] if childs is not None: if type(childs) != list: Util.raiseException("Childs must be a list of nodes", TypeError) typecheck_list = filter(lambda x: not isinstance(x, GTreeNodeBase), childs) if len(typecheck_list) > 0: Util.raiseException("Childs must be a list of nodes", TypeError) self.childs += childs def isLeaf(self): """ Return True if the node is a leaf :rtype: True or False """ return len(self.childs)==0 def getChild(self, index): """ Returns the index-child of the node :rtype: child node """ return self.childs[index] def getChilds(self): """ Return the childs of the node .. warning :: use .getChilds()[:] if you'll change the list itself, like using childs.reverse(), otherwise the original genome child order will be changed. :rtype: a list of nodes """ return self.childs def addChild(self, child): """ Adds a child to the node :param child: the node to be added """ if type(child) == list: self.childs.extend(child) else: if not isinstance(child, GTreeNodeBase): Util.raiseException("The child must be a node", TypeError) self.childs.append(child) def replaceChild(self, older, newer): """ Replaces a child of the node :param older: the child to be replaces :param newer: the new child which replaces the older """ index = self.childs.index(older) self.childs[index] = newer def setParent(self, parent): """ Sets the parent of the node :param parent: the parent node """ #if not isinstance(parent, GTreeNodeBase): # Util.raiseException("The parent must be a node", TypeError) self.parent = parent def getParent(self): """ Get the parent node of the node :rtype: the parent node """ return self.parent def __repr__(self): parent = "None" if self.getParent() is None else "Present" str_repr = "GTreeNodeBase [Childs=%d]" % len(self) return str_repr def __len__(self): return len(self.childs) def copy(self, g): """ Copy the current contents GTreeNodeBase to 'g' :param g: the destination node .. note:: If you are planning to create a new chromosome representation, you **must** implement this method on your class. """ g.parent = self.parent g.childs = self.childs[:] def clone(self): """ Clone this GenomeBase :rtype: the clone genome .. note:: If you are planning to create a new chromosome representation, you **must** implement this method on your class. """ newcopy = GTreeNodeBase(None) self.copy(newcopy) return newcopy class GTreeBase: """ GTreeBase Class - The base class for the tree genomes :param root_node: the root node of the tree .. versionadded:: 0.6 Added te *GTreeBase* class """ def __init__(self, root_node): self.root_node = root_node self.tree_height = None self.nodes_list = None def processNodes(self, cloning=False): """ Creates a *cache* on the tree, this method must be called every time you change the shape of the tree. It updates the internal nodes list and the internal nodes properties such as depth and height. """ if self.root_node is None: return self.nodes_list = self.getAllNodes() self.nodes_leaf = filter(lambda n: n.isLeaf(), self.nodes_list) self.nodes_branch = filter(lambda n: n.isLeaf()==False, self.nodes_list) if not cloning: self.tree_height = self.getNodeHeight(self.getRoot()) def getRoot(self): """ Return the tree root node :rtype: the tree root node """ return self.root_node def setRoot(self, root): """ Sets the root of the tree :param root: the tree root node """ if not isinstance(root, GTreeNodeBase): Util.raiseException("The root must be a node", TypeError) self.root_node = root def getNodeDepth(self, node): """ Returns the depth of a node :rtype: the depth of the node, the depth of root node is 0 """ if node==self.getRoot(): return 0 else: return 1 + self.getNodeDepth(node.getParent()) def getNodeHeight(self, node): """ Returns the height of a node .. note:: If the node has no childs, the height will be 0. :rtype: the height of the node """ height = 0 if len(node) <= 0: return 0 for child in node.getChilds(): h_inner = self.getNodeHeight(child)+1 if h_inner > height: height = h_inner return height def getHeight(self): """ Return the tree height :rtype: the tree height """ return self.tree_height def getNodesCount(self, start_node=None): """ Return the number of the nodes on the tree starting at the *start_node*, if *start_node* is None, then the method will count all the tree nodes. :rtype: the number of nodes """ count = 1 if start_node is None: start_node = self.getRoot() for i in start_node.getChilds(): count += self.getNodesCount(i) return count def getTraversalString(self, start_node=None, spc=0): """ Returns a tree-formated string of the tree. This method is used by the __repr__ method of the tree :rtype: a string representing the tree """ str_buff = "" if start_node is None: start_node = self.getRoot() str_buff += "%s\n" % start_node spaces = spc + 2 for child_node in start_node.getChilds(): str_buff += "%s%s\n" % (" " * spaces, child_node) str_buff += self.getTraversalString(child_node, spaces) return str_buff def traversal(self, callback, start_node=None): """ Traversal the tree, this method will call the user-defined callback function for each node on the tree :param callback: a function :param start_node: the start node to begin the traversal """ if not inspect.isfunction(callback): Util.raiseException("The callback for the tree traversal must be a function", TypeError) if start_node is None: start_node = self.getRoot() callback(start_node) for child_node in start_node.getChilds(): callback(child_node) self.traversal(callback, child_node) def getRandomNode(self, node_type=0): """ Returns a random node from the Tree :param node_type: 0 = Any, 1 = Leaf, 2 = Branch :rtype: random node """ lists = (self.nodes_list, self.nodes_leaf, self.nodes_branch) cho = lists[node_type] if len(cho) <= 0: return None return rand_choice(cho) def getAllNodes(self): """ Return a new list with all nodes :rtype: the list with all nodes """ node_stack = [] all_nodes = [] tmp = None node_stack.append(self.getRoot()) while len(node_stack) > 0: tmp = node_stack.pop() all_nodes.append(tmp) childs = tmp.getChilds() node_stack.extend(childs) return all_nodes def __repr__(self): str_buff = "- GTree\n" str_buff += "\tHeight:\t\t\t%d\n" % self.getHeight() str_buff += "\tNodes:\t\t\t%d\n" % self.getNodesCount() str_buff += "\n" + self.getTraversalString() return str_buff def __len__(self): return len(self.nodes_list) def __getitem__(self, index): return self.nodes_list[index] def __iter__(self): return iter(self.nodes_list) def copy(self, g, node=None, node_parent=None): """ Copy the current contents GTreeBase to 'g' :param g: the destination GTreeBase tree .. note:: If you are planning to create a new chromosome representation, you **must** implement this method on your class. """ if node is None: g.tree_height = self.tree_height node = self.root_node if node is None: return None newnode = node.clone() if node_parent is None: g.setRoot(newnode) else: newnode.setParent(node_parent) node_parent.replaceChild(node, newnode) for ci in xrange(len(newnode)): GTreeBase.copy(self, g, newnode.getChild(ci), newnode) return newnode def clone(self): """ Clone this GenomeBase :rtype: the clone genome .. note:: If you are planning to create a new chromosome representation, you **must** implement this method on your class. """ newcopy = GTreeBase(None) self.copy(newcopy) newcopy.processNodes() return newcopy pyevolve-0.6~rc1+svn398+dfsg/pyevolve/Initializators.py000066400000000000000000000207211153663664300232700ustar00rootroot00000000000000""" :mod:`Initializators` -- initialization methods module =================================================================== In this module we have the genetic operators of initialization for each chromosome representation, the most part of initialization is done by choosing random data. .. note:: In Pyevolve, the Initializator defines the data type that will be used on the chromosome, for example, the :func:`G1DListInitializatorInteger` will initialize the G1DList with Integers. """ from random import randint as rand_randint, uniform as rand_uniform, choice as rand_choice import GTree import Util ############################# ## 1D Binary String ## ############################# def G1DBinaryStringInitializator(genome, **args): """ 1D Binary String initializator """ genome.genomeList = [ rand_choice((0,1)) for i in xrange(genome.getListSize()) ] ############################# ## 2D Binary String ## ############################# def G2DBinaryStringInitializator(genome, **args): """ Integer initialization function of 2D Binary String .. versionadded:: 0.6 The *G2DBinaryStringInitializator* function """ genome.clearString() for i in xrange(genome.getHeight()): for j in xrange(genome.getWidth()): random_gene = rand_choice((0,1)) genome.setItem(i, j, random_gene) #################### ## 1D List ## #################### def G1DListInitializatorAllele(genome, **args): """ Allele initialization function of G1DList To use this initializator, you must specify the *allele* genome parameter with the :class:`GAllele.GAlleles` instance. """ allele = genome.getParam("allele", None) if allele is None: Util.raiseException("to use the G1DListInitializatorAllele, you must specify the 'allele' parameter") genome.genomeList = [ allele[i].getRandomAllele() for i in xrange(genome.getListSize()) ] def G1DListInitializatorInteger(genome, **args): """ Integer initialization function of G1DList This initializator accepts the *rangemin* and *rangemax* genome parameters. """ range_min = genome.getParam("rangemin", 0) range_max = genome.getParam("rangemax", 100) genome.genomeList = [rand_randint(range_min, range_max) for i in xrange(genome.getListSize())] def G1DListInitializatorReal(genome, **args): """ Real initialization function of G1DList This initializator accepts the *rangemin* and *rangemax* genome parameters. """ range_min = genome.getParam("rangemin", 0) range_max = genome.getParam("rangemax", 100) genome.genomeList = [rand_uniform(range_min, range_max) for i in xrange(genome.getListSize())] #################### ## 2D List ## #################### def G2DListInitializatorInteger(genome, **args): """ Integer initialization function of G2DList This initializator accepts the *rangemin* and *rangemax* genome parameters. """ genome.clearList() for i in xrange(genome.getHeight()): for j in xrange(genome.getWidth()): randomInteger = rand_randint(genome.getParam("rangemin", 0), genome.getParam("rangemax", 100)) genome.setItem(i, j, randomInteger) def G2DListInitializatorReal(genome, **args): """ Integer initialization function of G2DList This initializator accepts the *rangemin* and *rangemax* genome parameters. """ genome.clearList() for i in xrange(genome.getHeight()): for j in xrange(genome.getWidth()): randomReal = rand_uniform(genome.getParam("rangemin", 0), genome.getParam("rangemax", 100)) genome.setItem(i, j, randomReal) def G2DListInitializatorAllele(genome, **args): """ Allele initialization function of G2DList To use this initializator, you must specify the *allele* genome parameter with the :class:`GAllele.GAlleles` instance. .. warning:: the :class:`GAllele.GAlleles` instance must have the homogeneous flag enabled """ allele = genome.getParam("allele", None) if allele is None: Util.raiseException("to use the G2DListInitializatorAllele, you must specify the 'allele' parameter") if allele.homogeneous == False: Util.raiseException("to use the G2DListInitializatorAllele, the 'allele' must be homogeneous") genome.clearList() for i in xrange(genome.getHeight()): for j in xrange(genome.getWidth()): random_allele = allele[0].getRandomAllele() genome.setItem(i, j, random_allele) #################### ## Tree ## #################### def GTreeInitializatorInteger(genome, **args): """ Integer initialization function of GTree This initializator accepts the *rangemin* and *rangemax* genome parameters. It accepts the following parameters too: *max_depth* The max depth of the tree *max_siblings* The number of maximum siblings of an node *method* The method, accepts "grow", "full" or "ramped". .. versionadded:: 0.6 The *GTreeInitializatorInteger* function. """ max_depth = genome.getParam("max_depth", 5) max_siblings = genome.getParam("max_siblings", 2) range_min = genome.getParam("rangemin", 0) range_max = genome.getParam("rangemax", 100) lambda_generator = lambda: rand_randint(range_min, range_max) method = genome.getParam("method", "grow") if method == "grow": root = GTree.buildGTreeGrow(0, lambda_generator, max_siblings, max_depth) elif method == "full": root = GTree.buildGTreeFull(0, lambda_generator, max_siblings, max_depth) elif method == "ramped": if Util.randomFlipCoin(0.5): root = GTree.buildGTreeGrow(0, lambda_generator, max_siblings, max_depth) else: root = GTree.buildGTreeFull(0, lambda_generator, max_siblings, max_depth) else: Util.raiseException("Unknown tree initialization method [%s] !" % method) genome.setRoot(root) genome.processNodes() assert genome.getHeight() <= max_depth def GTreeInitializatorAllele(genome, **args): """ Allele initialization function of GTree To use this initializator, you must specify the *allele* genome parameter with the :class:`GAllele.GAlleles` instance. .. warning:: the :class:`GAllele.GAlleles` instance **must** have the homogeneous flag enabled .. versionadded:: 0.6 The *GTreeInitializatorAllele* function. """ max_depth = genome.getParam("max_depth", 5) max_siblings = genome.getParam("max_siblings", 2) method = genome.getParam("method", "grow") allele = genome.getParam("allele", None) if allele is None: Util.raiseException("to use the GTreeInitializatorAllele, you must specify the 'allele' parameter") if allele.homogeneous == False: Util.raiseException("to use the GTreeInitializatorAllele, the 'allele' must be homogeneous") if method == "grow": root = GTree.buildGTreeGrow(0, allele[0].getRandomAllele, max_siblings, max_depth) elif method == "full": root = GTree.buildGTreeFull(0, allele[0].getRandomAllele, max_siblings, max_depth) elif method == "ramped": if Util.randomFlipCoin(0.5): root = GTree.buildGTreeGrow(0, allele[0].getRandomAllele, max_siblings, max_depth) else: root = GTree.buildGTreeFull(0, allele[0].getRandomAllele, max_siblings, max_depth) else: Util.raiseException("Unknown tree initialization method [%s] !" % method) genome.setRoot(root) genome.processNodes() assert genome.getHeight() <= max_depth #################### ## Tree GP ## #################### def GTreeGPInitializator(genome, **args): """This initializator accepts the follow parameters: *max_depth* The max depth of the tree *method* The method, accepts "grow", "full" or "ramped" .. versionadded:: 0.6 The *GTreeGPInitializator* function. """ max_depth = genome.getParam("max_depth", 5) method = genome.getParam("method", "grow") ga_engine = args["ga_engine"] if method == "grow": root = GTree.buildGTreeGPGrow(ga_engine, 0, max_depth) elif method == "full": root = GTree.buildGTreeGPFull(ga_engine, 0, max_depth) elif method == "ramped": if Util.randomFlipCoin(0.5): root = GTree.buildGTreeGPFull(ga_engine, 0, max_depth) else: root = GTree.buildGTreeGPGrow(ga_engine, 0, max_depth) else: Util.raiseException("Unknown tree initialization method [%s] !" % method) genome.setRoot(root) genome.processNodes() assert genome.getHeight() <= max_depth pyevolve-0.6~rc1+svn398+dfsg/pyevolve/Interaction.py000066400000000000000000000053551153663664300225500ustar00rootroot00000000000000""" :mod:`Interaction` -- interaction module ========================================================================== In this module, you will find the funcionality for the :term:`Interactive mode`. When you enter in the Interactive Mode, Pyevolve will automatic import this module and exposes to you in the name space called "it". To use this mode, the parameter *interactiveMode* must be enabled in the :class:`GSimpleGA.GSimpleGA`. You can use the manual method to enter in the Interactive Mode at specific generation using the :meth:`GSimpleGA.GSimpleGA.setInteractiveGeneration` method. """ import logging try: import pylab except: logging.debug("cannot import Matplotlib ! Plots will not be available !") print "Warning: cannot import Matplotlib ! Plots will not be available !" try: import numpy except: logging.debug("cannot import Numpy ! Some functions will not be available !") print "Warning: cannot import Numpy ! Some functions will not be available !" def getPopScores(population, fitness=False): """ Returns a list of population scores Example: >>> lst = Interaction.getPopScores(population) :param population: population object (:class:`GPopulation.GPopulation`) :param fitness: if is True, the fitness score will be used, otherwise, the raw. :rtype: list of population scores """ score_list = [] for individual in population: score_list.append(individual.fitness if fitness else individual.score) return score_list def plotPopScore(population, fitness=False): """ Plot the population score distribution Example: >>> Interaction.plotPopScore(population) :param population: population object (:class:`GPopulation.GPopulation`) :param fitness: if is True, the fitness score will be used, otherwise, the raw. :rtype: None """ score_list = getPopScores(population, fitness) pylab.plot(score_list, 'o') pylab.title("Plot of population score distribution") pylab.xlabel('Individual') pylab.ylabel('Score') pylab.grid(True) pylab.show() def plotHistPopScore(population, fitness=False): """ Population score distribution histogram Example: >>> Interaction.plotHistPopScore(population) :param population: population object (:class:`GPopulation.GPopulation`) :param fitness: if is True, the fitness score will be used, otherwise, the raw. :rtype: None """ score_list = getPopScores(population, fitness) n, bins, patches = pylab.hist(score_list, 50, facecolor='green', alpha=0.75, normed=1) pylab.plot(bins, pylab.normpdf(bins, numpy.mean(score_list), numpy.std(score_list)), 'r--') pylab.xlabel('Score') pylab.ylabel('Frequency') pylab.grid(True) pylab.title("Plot of population score distribution") pylab.show() pyevolve-0.6~rc1+svn398+dfsg/pyevolve/LICENSE.TXT000066400000000000000000000044571153663664300214040ustar00rootroot000000000000001. This LICENSE AGREEMENT is between Christian S. Perone ("CSP"), and the Individual or Organization ("Licensee") accessing and otherwise using Pyevolve software in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, CSP hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Pyevolve 0.6 alone or in any derivative version, provided, however, that CSP's License Agreement and CSP's notice of copyright, i.e., "Copyright (c) 2007-2010 Christian S. Perone; All Rights Reserved" are retained in Pyevolve 0.6 alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Pyevolve 0.6 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Pyevolve 0.6. 4. CSP is making Pyevolve 0.6 available to Licensee on an "AS IS" basis. CSP MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CSP MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF Pyevolve 0.6 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. CSP SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF Pyevolve 0.6 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING Pyevolve 0.6, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between CSP and Licensee. This License Agreement does not grant permission to use CSP trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By copying, installing or otherwise using Pyevolve 0.6, Licensee agrees to be bound by the terms and conditions of this License Agreement.pyevolve-0.6~rc1+svn398+dfsg/pyevolve/Migration.py000066400000000000000000000204771153663664300222240ustar00rootroot00000000000000""" :mod:`Migration` -- the migration schemes, distributed GA ===================================================================== This module contains all the migration schemes and the distributed GA related functions. .. versionadded:: 0.6 The :mod:`Migration` module. """ import Util from random import randint as rand_randint, choice as rand_choice import Network import Consts from FunctionSlot import FunctionSlot import logging class MigrationScheme: """ This is the base class for all migration schemes :param host: the source hostname :param port: the source host port :param group_name: the group name """ selector = None """ This is the function slot for the selection method if you want to change the default selector, you must do this: :: migration_scheme.selector.set(Selectors.GRouletteWheel) """ def __init__(self, host, port, group_name): self.myself = None self.groupName = group_name self.selector = FunctionSlot("Selector") self.setMyself(host, port) self.GAEngine = None self.nMigrationRate = Consts.CDefGenMigrationRate self.nIndividuals = Consts.CDefMigrationNIndividuals self.nReplacement = Consts.CDefGenMigrationReplacement self.networkCompression = 9 def isReady(self): """ Returns true if is time to migrate """ return True if self.GAEngine.getCurrentGeneration() % self.nMigrationRate == 0 else False def getCompressionLevel(self): """ Get the zlib compression level of network data The values are in the interval described on the :func:`Network.pickleAndCompress` """ return self.networkCompression def setCompressionLevel(self, level): """ Set the zlib compression level of network data The values are in the interval described on the :func:`Network.pickleAndCompress` :param level: the zlib compression level """ self.networkCompression = level def getNumReplacement(self): """ Return the number of individuals that will be replaced in the migration process """ return self.nReplacement def setNumReplacement(self, num_individuals): """ Return the number of individuals that will be replaced in the migration process :param num_individuals: the number of individuals to be replaced """ self.nReplacement = num_individuals def getNumIndividuals(self): """ Return the number of individuals that will migrate :rtype: the number of individuals to be replaced """ return self.nIndividuals def setNumIndividuals(self, num_individuals): """ Set the number of individuals that will migrate :param num_individuals: the number of individuals """ self.nIndividuals = num_individuals def setMigrationRate(self, generations): """ Sets the generation frequency supposed to migrate and receive individuals. :param generations: the number of generations """ self.nMigrationRate = generations def getMigrationRate(self): """ Return the the generation frequency supposed to migrate and receive individuals :rtype: the number of generations """ return self.nMigrationRate def setGAEngine(self, ga_engine): """ Sets the GA Engine handler """ self.GAEngine = ga_engine def start(self): """ Initializes the migration scheme """ pass def stop(self): """ Stops the migration engine """ pass def getGroupName(self): """ Gets the group name .. note:: all islands of evolution which are supposed to exchange individuals, must have the same group name. """ return self.groupName def setGroupName(self, name): """ Sets the group name :param name: the group name .. note:: all islands of evolution which are supposed to exchange individuals, must have the same group name. """ self.groupName = name def setMyself(self, host, port): """ Which interface you will use to send/receive data :param host: your hostname :param port: your port """ self.myself = (host, port) def select(self): """ Pickes an individual from population using specific selection method :rtype: an individual object """ if self.selector.isEmpty(): return self.GAEngine.select(popID=self.GAEngine.currentGeneration) else: for it in self.selector.applyFunctions(self.GAEngine.internalPop, popID=self.GAEngine.currentGeneration): return it def selectPool(self, num_individuals): """ Select num_individuals number of individuals and return a pool :param num_individuals: the number of individuals to select :rtype: list with individuals """ pool = [self.select() for i in xrange(num_individuals)] return pool def exchange(self): """ Exchange individuals """ pass ###################################################################################################### class WANMigration(MigrationScheme): """ This is the Simple Migration class for distributed GA Example: >>> mig = WANMigration("192.168.0.1", "10000", "group1") :param host: the source hostname :param port: the source port number :param group_name: the group name """ selector = None """ This is the function slot for the selection method if you want to change the default selector, you must do this: :: migration_scheme.selector.set(Selectors.GRouletteWheel) """ def __init__(self, host, port, group_name): MigrationScheme.__init__(self, host, port, group_name) self.topologyGraph = None self.serverThread = Network.UDPThreadServer(host, port) self.clientThread = Network.UDPThreadUnicastClient(self.myself[0], rand_randint(30000, 65534)) def setTopology(self, graph): """ Sets the topology of the migrations :param graph: the :class:`Util.Graph` instance """ self.topologyGraph = graph def start(self): """ Start capture of packets and initialize the migration scheme """ self.serverThread.start() if self.topologyGraph is None: Util.raiseException("You must add a topology graph to the migration scheme !") # targets = [ (ip, port), (ip, port), ...] targets = self.topologyGraph.getNeighbors(self.myself) self.clientThread.setMultipleTargetHost(targets) self.clientThread.start() def stop(self): """ Stops the migration engine """ self.serverThread.shutdown() self.clientThread.shutdown() server_timeout = self.serverThread.timeout client_timeout = self.clientThread.timeout self.serverThread.join(server_timeout+3) self.clientThread.join(client_timeout+3) if self.serverThread.isAlive(): logging.warning("warning: server thread not joined !") if self.clientThread.isAlive(): logging.warning("warning: client thread not joined !") def exchange(self): """ This is the main method, is where the individuals are exchanged """ if not self.isReady(): return # Client section -------------------------------------- # How many will migrate ? pool = self.selectPool(self.getNumIndividuals()) for individual in pool: # (code, group name, individual) networkObject = (Consts.CDefNetworkIndividual, self.getGroupName(), individual) networkData = Network.pickleAndCompress(networkObject, self.getCompressionLevel()) # Send the individuals to the topology self.clientThread.addData(networkData) # Server section -------------------------------------- pool = [] while self.serverThread.isReady(): # (IP source, data) networkData = self.serverThread.popPool() networkObject = Network.unpickleAndDecompress(networkData[1]) # (code, group name, individual) pool.append(networkObject) # No individuals received if len(pool) <= 0: return population = self.GAEngine.getPopulation() for i in xrange(self.getNumReplacement()): if len(pool) <= 0: break choice = rand_choice(pool) pool.remove(choice) # replace the worst population[len(population)-1-i] = choice[2] pyevolve-0.6~rc1+svn398+dfsg/pyevolve/Mutators.py000066400000000000000000000664161153663664300221140ustar00rootroot00000000000000""" :mod:`Mutators` -- mutation methods module ===================================================================== In this module we have the genetic operators of mutation for each chromosome representation. """ import Util from random import randint as rand_randint, gauss as rand_gauss, uniform as rand_uniform from random import choice as rand_choice import Consts import GTree ############################# ## 1D Binary String ## ############################# def G1DBinaryStringMutatorSwap(genome, **args): """ The 1D Binary String Swap Mutator """ if args["pmut"] <= 0.0: return 0 stringLength = len(genome) mutations = args["pmut"] * (stringLength) if mutations < 1.0: mutations = 0 for it in xrange(stringLength): if Util.randomFlipCoin(args["pmut"]): Util.listSwapElement(genome, it, rand_randint(0, stringLength-1)) mutations+=1 else: for it in xrange(int(round(mutations))): Util.listSwapElement(genome, rand_randint(0, stringLength-1), rand_randint(0, stringLength-1)) return int(mutations) def G1DBinaryStringMutatorFlip(genome, **args): """ The classical flip mutator for binary strings """ if args["pmut"] <= 0.0: return 0 stringLength = len(genome) mutations = args["pmut"] * (stringLength) if mutations < 1.0: mutations = 0 for it in xrange(stringLength): if Util.randomFlipCoin(args["pmut"]): if genome[it] == 0: genome[it] = 1 else: genome[it] = 0 mutations+=1 else: for it in xrange(int(round(mutations))): which = rand_randint(0, stringLength-1) if genome[which] == 0: genome[which] = 1 else: genome[which] = 0 return int(mutations) #################### ## 1D List ## #################### def G1DListMutatorSwap(genome, **args): """ The mutator of G1DList, Swap Mutator .. note:: this mutator is :term:`Data Type Independent` """ if args["pmut"] <= 0.0: return 0 listSize = len(genome) - 1 mutations = args["pmut"] * (listSize+1) if mutations < 1.0: mutations = 0 for it in xrange(listSize+1): if Util.randomFlipCoin(args["pmut"]): Util.listSwapElement(genome, it, rand_randint(0, listSize)) mutations+=1 else: for it in xrange(int(round(mutations))): Util.listSwapElement(genome, rand_randint(0, listSize), rand_randint(0, listSize)) return int(mutations) def G1DListMutatorSIM(genome, **args): """ The mutator of G1DList, Simple Inversion Mutation .. note:: this mutator is :term:`Data Type Independent` """ mutations = 0 if args["pmut"] <= 0.0: return 0 cuts = [rand_randint(0, len(genome)), rand_randint(0, len(genome))] if cuts[0] > cuts[1]: Util.listSwapElement(cuts, 0, 1) if (cuts[1]-cuts[0]) <= 0: cuts[1] = rand_randint(cuts[0], len(genome)) if Util.randomFlipCoin(args["pmut"]): part = genome[cuts[0]:cuts[1]] if len(part) == 0: return 0 part.reverse() genome[cuts[0]:cuts[1]] = part mutations += 1 return mutations def G1DListMutatorIntegerRange(genome, **args): """ Simple integer range mutator for G1DList Accepts the *rangemin* and *rangemax* genome parameters, both optional. """ if args["pmut"] <= 0.0: return 0 listSize = len(genome) mutations = args["pmut"] * listSize if mutations < 1.0: mutations = 0 for it in xrange(listSize): if Util.randomFlipCoin(args["pmut"]): genome[it] = rand_randint(genome.getParam("rangemin", Consts.CDefRangeMin), genome.getParam("rangemax", Consts.CDefRangeMax)) mutations += 1 else: for it in xrange(int(round(mutations))): which_gene = rand_randint(0, listSize-1) genome[which_gene] = rand_randint(genome.getParam("rangemin", Consts.CDefRangeMin), genome.getParam("rangemax", Consts.CDefRangeMax)) return int(mutations) def G1DListMutatorRealRange(genome, **args): """ Simple real range mutator for G1DList Accepts the *rangemin* and *rangemax* genome parameters, both optional. """ if args["pmut"] <= 0.0: return 0 listSize = len(genome) mutations = args["pmut"] * (listSize) if mutations < 1.0: mutations = 0 for it in xrange(listSize): if Util.randomFlipCoin(args["pmut"]): genome[it] = rand_uniform(genome.getParam("rangemin", Consts.CDefRangeMin), genome.getParam("rangemax", Consts.CDefRangeMax)) mutations += 1 else: for it in xrange(int(round(mutations))): which_gene = rand_randint(0, listSize-1) genome[which_gene] = rand_uniform(genome.getParam("rangemin", Consts.CDefRangeMin), genome.getParam("rangemax", Consts.CDefRangeMax)) return int(mutations) def G1DListMutatorIntegerGaussian(genome, **args): """ A gaussian mutator for G1DList of Integers Accepts the *rangemin* and *rangemax* genome parameters, both optional. Also accepts the parameter *gauss_mu* and the *gauss_sigma* which respectively represents the mean and the std. dev. of the random distribution. """ if args["pmut"] <= 0.0: return 0 listSize = len(genome) mutations = args["pmut"] * (listSize) mu = genome.getParam("gauss_mu") sigma = genome.getParam("gauss_sigma") if mu is None: mu = Consts.CDefG1DListMutIntMU if sigma is None: sigma = Consts.CDefG1DListMutIntSIGMA if mutations < 1.0: mutations = 0 for it in xrange(listSize): if Util.randomFlipCoin(args["pmut"]): final_value = genome[it] + int(rand_gauss(mu, sigma)) final_value = min(final_value, genome.getParam("rangemax", Consts.CDefRangeMax)) final_value = max(final_value, genome.getParam("rangemin", Consts.CDefRangeMin)) genome[it] = final_value mutations += 1 else: for it in xrange(int(round(mutations))): which_gene = rand_randint(0, listSize-1) final_value = genome[which_gene] + int(rand_gauss(mu, sigma)) final_value = min(final_value, genome.getParam("rangemax", Consts.CDefRangeMax)) final_value = max(final_value, genome.getParam("rangemin", Consts.CDefRangeMin)) genome[which_gene] = final_value return int(mutations) def G1DListMutatorRealGaussian(genome, **args): """ The mutator of G1DList, Gaussian Mutator Accepts the *rangemin* and *rangemax* genome parameters, both optional. Also accepts the parameter *gauss_mu* and the *gauss_sigma* which respectively represents the mean and the std. dev. of the random distribution. """ if args["pmut"] <= 0.0: return 0 listSize = len(genome) mutations = args["pmut"] * (listSize) mu = genome.getParam("gauss_mu") sigma = genome.getParam("gauss_sigma") if mu is None: mu = Consts.CDefG1DListMutRealMU if sigma is None: sigma = Consts.CDefG1DListMutRealSIGMA if mutations < 1.0: mutations = 0 for it in xrange(listSize): if Util.randomFlipCoin(args["pmut"]): final_value = genome[it] + rand_gauss(mu, sigma) final_value = min(final_value, genome.getParam("rangemax", Consts.CDefRangeMax)) final_value = max(final_value, genome.getParam("rangemin", Consts.CDefRangeMin)) genome[it] = final_value mutations += 1 else: for it in xrange(int(round(mutations))): which_gene = rand_randint(0, listSize-1) final_value = genome[which_gene] + rand_gauss(mu, sigma) final_value = min(final_value, genome.getParam("rangemax", Consts.CDefRangeMax)) final_value = max(final_value, genome.getParam("rangemin", Consts.CDefRangeMin)) genome[which_gene] = final_value return int(mutations) def G1DListMutatorIntegerBinary(genome, **args): """ The mutator of G1DList, the binary mutator This mutator will random change the 0 and 1 elements of the 1D List. """ if args["pmut"] <= 0.0: return 0 listSize = len(genome) mutations = args["pmut"] * (listSize) if mutations < 1.0: mutations = 0 for it in xrange(listSize): if Util.randomFlipCoin(args["pmut"]): if genome[it] == 0: genome[it] = 1 elif genome[it] == 1: genome[it] = 0 mutations += 1 else: for it in xrange(int(round(mutations))): which_gene = rand_randint(0, listSize-1) if genome[which_gene] == 0: genome[which_gene] = 1 elif genome[which_gene] == 1: genome[which_gene] = 0 return int(mutations) def G1DListMutatorAllele(genome, **args): """ The mutator of G1DList, Allele Mutator To use this mutator, you must specify the *allele* genome parameter with the :class:`GAllele.GAlleles` instance. """ if args["pmut"] <= 0.0: return 0 listSize = len(genome) - 1 mutations = args["pmut"] * (listSize+1) allele = genome.getParam("allele", None) if allele is None: Util.raiseException("to use the G1DListMutatorAllele, you must specify the 'allele' parameter", TypeError) if mutations < 1.0: mutations = 0 for it in xrange(listSize+1): if Util.randomFlipCoin(args["pmut"]): new_val = allele[it].getRandomAllele() genome[it] = new_val mutations+=1 else: for it in xrange(int(round(mutations))): which_gene = rand_randint(0, listSize) new_val = allele[which_gene].getRandomAllele() genome[which_gene] = new_val return int(mutations) #################### ## 2D List ## #################### def G2DListMutatorSwap(genome, **args): """ The mutator of G1DList, Swap Mutator .. note:: this mutator is :term:`Data Type Independent` """ if args["pmut"] <= 0.0: return 0 height, width = genome.getSize() elements = height * width mutations = args["pmut"] * elements if mutations < 1.0: mutations = 0 for i in xrange(height): for j in xrange(width): if Util.randomFlipCoin(args["pmut"]): index_b = (rand_randint(0, height-1), rand_randint(0, width-1)) Util.list2DSwapElement(genome.genomeList, (i,j), index_b) mutations+=1 else: for it in xrange(int(round(mutations))): index_a = (rand_randint(0, height-1), rand_randint(0, width-1)) index_b = (rand_randint(0, height-1), rand_randint(0, width-1)) Util.list2DSwapElement(genome.genomeList, index_a, index_b) return int(mutations) def G2DListMutatorIntegerRange(genome, **args): """ Simple integer range mutator for G2DList Accepts the *rangemin* and *rangemax* genome parameters, both optional. """ if args["pmut"] <= 0.0: return 0 height, width = genome.getSize() elements = height * width mutations = args["pmut"] * elements range_min = genome.getParam("rangemin", Consts.CDefRangeMin) range_max = genome.getParam("rangemax", Consts.CDefRangeMax) if mutations < 1.0: mutations = 0 for i in xrange(genome.getHeight()): for j in xrange(genome.getWidth()): if Util.randomFlipCoin(args["pmut"]): random_int = rand_randint(range_min, range_max) genome.setItem(i, j, random_int) mutations += 1 else: for it in xrange(int(round(mutations))): which_x = rand_randint(0, genome.getWidth()-1) which_y = rand_randint(0, genome.getHeight()-1) random_int = rand_randint(range_min, range_max) genome.setItem(which_y, which_x, random_int) return int(mutations) def G2DListMutatorIntegerGaussian(genome, **args): """ A gaussian mutator for G2DList of Integers Accepts the *rangemin* and *rangemax* genome parameters, both optional. Also accepts the parameter *gauss_mu* and the *gauss_sigma* which respectively represents the mean and the std. dev. of the random distribution. """ if args["pmut"] <= 0.0: return 0 height, width = genome.getSize() elements = height * width mutations = args["pmut"] * elements mu = genome.getParam("gauss_mu") sigma = genome.getParam("gauss_sigma") if mu is None: mu = Consts.CDefG2DListMutIntMU if sigma is None: sigma = Consts.CDefG2DListMutIntSIGMA if mutations < 1.0: mutations = 0 for i in xrange(genome.getHeight()): for j in xrange(genome.getWidth()): if Util.randomFlipCoin(args["pmut"]): final_value = genome[i][j] + int(rand_gauss(mu, sigma)) final_value = min(final_value, genome.getParam("rangemax", Consts.CDefRangeMax)) final_value = max(final_value, genome.getParam("rangemin", Consts.CDefRangeMin)) genome.setItem(i, j, final_value) mutations += 1 else: for it in xrange(int(round(mutations))): which_x = rand_randint(0, genome.getWidth()-1) which_y = rand_randint(0, genome.getHeight()-1) final_value = genome[which_y][which_x] + int(rand_gauss(mu, sigma)) final_value = min(final_value, genome.getParam("rangemax", Consts.CDefRangeMax)) final_value = max(final_value, genome.getParam("rangemin", Consts.CDefRangeMin)) genome.setItem(which_y, which_x, final_value) return int(mutations) def G2DListMutatorAllele(genome, **args): """ The mutator of G2DList, Allele Mutator To use this mutator, you must specify the *allele* genome parameter with the :class:`GAllele.GAlleles` instance. .. warning:: the :class:`GAllele.GAlleles` instance must have the homogeneous flag enabled """ if args["pmut"] <= 0.0: return 0 listSize = len(genome) - 1 mutations = args["pmut"] * (listSize+1) allele = genome.getParam("allele", None) if allele is None: Util.raiseException("to use the G2DListMutatorAllele, you must specify the 'allele' parameter", TypeError) if allele.homogeneous == False: Util.raiseException("to use the G2DListMutatorAllele, the 'allele' must be homogeneous") if mutations < 1.0: mutations = 0 for i in xrange(genome.getHeight()): for j in xrange(genome.getWidht()): if Util.randomFlipCoin(args["pmut"]): new_val = allele[0].getRandomAllele() genome.setItem(i, j, new_val) mutations+=1 else: for it in xrange(int(round(mutations))): which_x = rand_randint(0, genome.getWidth()-1) which_y = rand_randint(0, genome.getHeight()-1) new_val = allele[0].getRandomAllele() genome.setItem(which_x, which_y, new_val) return int(mutations) def G2DListMutatorRealGaussian(genome, **args): """ A gaussian mutator for G2DList of Real Accepts the *rangemin* and *rangemax* genome parameters, both optional. Also accepts the parameter *gauss_mu* and the *gauss_sigma* which respectively represents the mean and the std. dev. of the random distribution. """ if args["pmut"] <= 0.0: return 0 height, width = genome.getSize() elements = height * width mutations = args["pmut"] * elements mu = genome.getParam("gauss_mu") sigma = genome.getParam("gauss_sigma") if mu is None: mu = Consts.CDefG2DListMutRealMU if sigma is None: sigma = Consts.CDefG2DListMutRealSIGMA if mutations < 1.0: mutations = 0 for i in xrange(genome.getHeight()): for j in xrange(genome.getWidth()): if Util.randomFlipCoin(args["pmut"]): final_value = genome[i][j] + rand_gauss(mu, sigma) final_value = min(final_value, genome.getParam("rangemax", Consts.CDefRangeMax)) final_value = max(final_value, genome.getParam("rangemin", Consts.CDefRangeMin)) genome.setItem(i, j, final_value) mutations += 1 else: for it in xrange(int(round(mutations))): which_x = rand_randint(0, genome.getWidth()-1) which_y = rand_randint(0, genome.getHeight()-1) final_value = genome[which_y][which_x] + rand_gauss(mu, sigma) final_value = min(final_value, genome.getParam("rangemax", Consts.CDefRangeMax)) final_value = max(final_value, genome.getParam("rangemin", Consts.CDefRangeMin)) genome.setItem(which_y, which_x, final_value) return int(mutations) ############################# ## 2D Binary String ## ############################# def G2DBinaryStringMutatorSwap(genome, **args): """ The mutator of G2DBinaryString, Swap Mutator .. versionadded:: 0.6 The *G2DBinaryStringMutatorSwap* function """ if args["pmut"] <= 0.0: return 0 height, width = genome.getSize() elements = height * width mutations = args["pmut"] * elements if mutations < 1.0: mutations = 0 for i in xrange(height): for j in xrange(width): if Util.randomFlipCoin(args["pmut"]): index_b = (rand_randint(0, height-1), rand_randint(0, width-1)) Util.list2DSwapElement(genome.genomeString, (i,j), index_b) mutations+=1 else: for it in xrange(int(round(mutations))): index_a = (rand_randint(0, height-1), rand_randint(0, width-1)) index_b = (rand_randint(0, height-1), rand_randint(0, width-1)) Util.list2DSwapElement(genome.genomeString, index_a, index_b) return int(mutations) def G2DBinaryStringMutatorFlip(genome, **args): """ A flip mutator for G2DBinaryString .. versionadded:: 0.6 The *G2DBinaryStringMutatorFlip* function """ if args["pmut"] <= 0.0: return 0 height, width = genome.getSize() elements = height * width mutations = args["pmut"] * elements if mutations < 1.0: mutations = 0 for i in xrange(genome.getHeight()): for j in xrange(genome.getWidth()): if Util.randomFlipCoin(args["pmut"]): if genome[i][j] == 0: genome.setItem(i, j, 1) else: genome.setItem(i, j, 0) mutations += 1 else: for it in xrange(int(round(mutations))): which_x = rand_randint(0, genome.getWidth()-1) which_y = rand_randint(0, genome.getHeight()-1) if genome[i][j] == 0: genome.setItem(which_y, which_x, 1) else: genome.setItem(which_y, which_x, 0) return int(mutations) ################# ## Tree ## ################# def GTreeMutatorSwap(genome, **args): """ The mutator of GTree, Swap Mutator .. versionadded:: 0.6 The *GTreeMutatorSwap* function """ if args["pmut"] <= 0.0: return 0 elements = len(genome) mutations = args["pmut"] * elements if mutations < 1.0: mutations = 0 for i in xrange(len(genome)): if Util.randomFlipCoin(args["pmut"]): mutations += 1 nodeOne = genome.getRandomNode() nodeTwo = genome.getRandomNode() nodeOne.swapNodeData(nodeTwo) else: for it in xrange(int(round(mutations))): nodeOne = genome.getRandomNode() nodeTwo = genome.getRandomNode() nodeOne.swapNodeData(nodeTwo) return int(mutations) def GTreeMutatorIntegerRange(genome, **args): """ The mutator of GTree, Integer Range Mutator Accepts the *rangemin* and *rangemax* genome parameters, both optional. .. versionadded:: 0.6 The *GTreeMutatorIntegerRange* function """ if args["pmut"] <= 0.0: return 0 elements = len(genome) mutations = args["pmut"] * elements range_min = genome.getParam("rangemin", Consts.CDefRangeMin) range_max = genome.getParam("rangemax", Consts.CDefRangeMax) if mutations < 1.0: mutations = 0 for i in xrange(len(genome)): if Util.randomFlipCoin(args["pmut"]): mutations += 1 rand_node = genome.getRandomNode() random_int = rand_randint(range_min, range_max) rand_node.setData(random_int) else: for it in xrange(int(round(mutations))): rand_node = genome.getRandomNode() random_int = rand_randint(range_min, range_max) rand_node.setData(random_int) return int(mutations) def GTreeMutatorRealRange(genome, **args): """ The mutator of GTree, Real Range Mutator Accepts the *rangemin* and *rangemax* genome parameters, both optional. .. versionadded:: 0.6 The *GTreeMutatorRealRange* function """ if args["pmut"] <= 0.0: return 0 elements = len(genome) mutations = args["pmut"] * elements range_min = genome.getParam("rangemin", Consts.CDefRangeMin) range_max = genome.getParam("rangemax", Consts.CDefRangeMax) if mutations < 1.0: mutations = 0 for i in xrange(len(genome)): if Util.randomFlipCoin(args["pmut"]): mutations += 1 rand_node = genome.getRandomNode() random_real = rand_uniform(range_min, range_max) rand_node.setData(random_real) else: for it in xrange(int(round(mutations))): rand_node = genome.getRandomNode() random_real = rand_uniform(range_min, range_max) rand_node.setData(random_real) return int(mutations) def GTreeMutatorIntegerGaussian(genome, **args): """ A gaussian mutator for GTree of Integers Accepts the *rangemin* and *rangemax* genome parameters, both optional. Also accepts the parameter *gauss_mu* and the *gauss_sigma* which respectively represents the mean and the std. dev. of the random distribution. """ if args["pmut"] <= 0.0: return 0 elements = len(genome) mutations = args["pmut"] * elements mu = genome.getParam("gauss_mu", Consts.CDefG1DListMutIntMU) sigma = genome.getParam("gauss_sigma", Consts.CDefG1DListMutIntSIGMA) if mutations < 1.0: mutations = 0 for i in xrange(len(genome)): if Util.randomFlipCoin(args["pmut"]): mutations += 1 rand_node = genome.getRandomNode() final_value = rand_node.getData() + int(rand_gauss(mu, sigma)) final_value = min(final_value, genome.getParam("rangemax", Consts.CDefRangeMax)) final_value = max(final_value, genome.getParam("rangemin", Consts.CDefRangeMin)) rand_node.setData(final_value) else: for it in xrange(int(round(mutations))): rand_node = genome.getRandomNode() final_value = rand_node.getData() + int(rand_gauss(mu, sigma)) final_value = min(final_value, genome.getParam("rangemax", Consts.CDefRangeMax)) final_value = max(final_value, genome.getParam("rangemin", Consts.CDefRangeMin)) rand_node.setData(final_value) return int(mutations) def GTreeMutatorRealGaussian(genome, **args): """ A gaussian mutator for GTree of Real numbers Accepts the *rangemin* and *rangemax* genome parameters, both optional. Also accepts the parameter *gauss_mu* and the *gauss_sigma* which respectively represents the mean and the std. dev. of the random distribution. """ if args["pmut"] <= 0.0: return 0 elements = len(genome) mutations = args["pmut"] * elements mu = genome.getParam("gauss_mu", Consts.CDefG1DListMutRealMU) sigma = genome.getParam("gauss_sigma", Consts.CDefG1DListMutRealSIGMA) if mutations < 1.0: mutations = 0 for i in xrange(len(genome)): if Util.randomFlipCoin(args["pmut"]): mutations += 1 rand_node = genome.getRandomNode() final_value = rand_node.getData() + rand_gauss(mu, sigma) final_value = min(final_value, genome.getParam("rangemax", Consts.CDefRangeMax)) final_value = max(final_value, genome.getParam("rangemin", Consts.CDefRangeMin)) rand_node.setData(final_value) else: for it in xrange(int(round(mutations))): rand_node = genome.getRandomNode() final_value = rand_node.getData() + rand_gauss(mu, sigma) final_value = min(final_value, genome.getParam("rangemax", Consts.CDefRangeMax)) final_value = max(final_value, genome.getParam("rangemin", Consts.CDefRangeMin)) rand_node.setData(final_value) return int(mutations) ################### ## Tree GP ## ################### def GTreeGPMutatorOperation(genome, **args): """ The mutator of GTreeGP, Operation Mutator .. versionadded:: 0.6 The *GTreeGPMutatorOperation* function """ if args["pmut"] <= 0.0: return 0 elements = len(genome) mutations = args["pmut"] * elements ga_engine = args["ga_engine"] gp_terminals = ga_engine.getParam("gp_terminals") assert gp_terminals is not None gp_function_set = ga_engine.getParam("gp_function_set") assert gp_function_set is not None if mutations < 1.0: mutations = 0 for i in xrange(len(genome)): if Util.randomFlipCoin(args["pmut"]): mutations += 1 rand_node = genome.getRandomNode() assert rand_node is not None if rand_node.getType() == Consts.nodeType["TERMINAL"]: term_operator = rand_choice(gp_terminals) else: op_len = gp_function_set[rand_node.getData()] fun_candidates = [] for o, l in gp_function_set.items(): if l==op_len: fun_candidates.append(o) if len(fun_candidates) <= 0: continue term_operator = rand_choice(fun_candidates) rand_node.setData(term_operator) else: for it in xrange(int(round(mutations))): rand_node = genome.getRandomNode() assert rand_node is not None if rand_node.getType() == Consts.nodeType["TERMINAL"]: term_operator = rand_choice(gp_terminals) else: op_len = gp_function_set[rand_node.getData()] fun_candidates = [] for o, l in gp_function_set.items(): if l==op_len: fun_candidates.append(o) if len(fun_candidates) <= 0: continue term_operator = rand_choice(fun_candidates) rand_node.setData(term_operator) return int(mutations) def GTreeGPMutatorSubtree(genome, **args): """ The mutator of GTreeGP, Subtree Mutator This mutator will recreate random subtree of the tree using the grow algorithm. .. versionadded:: 0.6 The *GTreeGPMutatorSubtree* function """ if args["pmut"] <= 0.0: return 0 ga_engine = args["ga_engine"] max_depth = genome.getParam("max_depth", None) mutations = 0 if max_depth is None: Util.raiseException("You must specify the max_depth genome parameter !", ValueError) if max_depth < 0: Util.raiseException("The max_depth must be >= 1, if you want to use GTreeGPMutatorSubtree crossover !", ValueError) branch_list = genome.nodes_branch elements = len(branch_list) for i in xrange(elements): node = branch_list[i] assert node is not None if Util.randomFlipCoin(args["pmut"]): depth = genome.getNodeDepth(node) mutations += 1 root_subtree = GTree.buildGTreeGPGrow(ga_engine, 0, max_depth-depth) node_parent = node.getParent() if node_parent is None: genome.setRoot(root_subtree) genome.processNodes() return mutations else: root_subtree.setParent(node_parent) node_parent.replaceChild(node, root_subtree) genome.processNodes() return int(mutations) pyevolve-0.6~rc1+svn398+dfsg/pyevolve/Network.py000066400000000000000000000273621153663664300217240ustar00rootroot00000000000000""" :mod:`Network` -- network utility module ============================================================================ In this module you'll find all the network related implementation .. versionadded:: 0.6 The *Network* module. """ from __future__ import with_statement import threading import socket import time import sys import Util import cPickle try: import zlib ZLIB_SUPPORT = True except ImportError: ZLIB_SUPPORT = False import Consts import logging def getMachineIP(): """ Return all the IPs from current machine. Example: >>> Util.getMachineIP() ['200.12.124.181', '192.168.0.1'] :rtype: a python list with the string IPs """ hostname = socket.gethostname() addresses = socket.getaddrinfo(hostname, None) ips = [x[4][0] for x in addresses] return ips class UDPThreadBroadcastClient(threading.Thread): """ The Broadcast UDP client thread class. This class is a thread to serve as Pyevolve client on the UDP datagrams, it is used to send data over network lan/wan. Example: >>> s = Network.UDPThreadClient('192.168.0.2', 1500, 666) >>> s.setData("Test data") >>> s.start() >>> s.join() :param host: the hostname to bind the socket on sender (this is NOT the target host) :param port: the sender port (this is NOT the target port) :param target_port: the destination port target """ def __init__(self, host, port, target_port): threading.Thread.__init__(self) self.host = host self.port = port self.targetPort = target_port self.data = None self.sentBytes = None self.sentBytesLock = threading.Lock() self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) self.sock.bind((host, port)) def setData(self, data): """ Set the data to send :param data: the data to send """ self.data = data def getData(self): """ Get the data to send :rtype: data to send """ return self.data def close(self): """ Close the internal socket """ self.sock.close() def getSentBytes(self): """ Returns the number of sent bytes. The use of this method makes sense when you already have sent the data :rtype: sent bytes """ sent = None with self.sentBytesLock: if self.sentBytes is None: Util.raiseException('Bytes sent is None') else: sent = self.sentBytes return sent def send(self): """ Broadcasts the data """ return self.sock.sendto(self.data, (Consts.CDefBroadcastAddress, self.targetPort)) def run(self): """ Method called when you call *.start()* of the thread """ if self.data is None: Util.raiseException('You must set the data with setData method', ValueError) with self.sentBytesLock: self.sentBytes = self.send() self.close() class UDPThreadUnicastClient(threading.Thread): """ The Unicast UDP client thread class. This class is a thread to serve as Pyevolve client on the UDP datagrams, it is used to send data over network lan/wan. Example: >>> s = Network.UDPThreadClient('192.168.0.2', 1500) >>> s.setData("Test data") >>> s.setTargetHost('192.168.0.50', 666) >>> s.start() >>> s.join() :param host: the hostname to bind the socket on sender (this is not the target host) :param port: the sender port (this is not the target port) :param pool_size: the size of send pool :param timeout: the time interval to check if the client have data to send """ def __init__(self, host, port, pool_size=10, timeout=0.5): threading.Thread.__init__(self) self.host = host self.port = port self.target = [] self.sendPool = [] self.poolSize = pool_size self.sendPoolLock = threading.Lock() self.timeout = timeout self.doshutdown = False self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.sock.bind((host, port)) def poolLength(self): """ Returns the size of the pool :rtype: integer """ with self.sendPoolLock: ret = len(self.sendPool) return ret def popPool(self): """ Return the last data received on the pool :rtype: object """ with self.sendPoolLock: ret = self.sendPool.pop() return ret def isReady(self): """ Returns True when there is data on the pool or False when not :rtype: boolean """ with self.sendPoolLock: ret = True if len(self.sendPool) >= 1 else False return ret def shutdown(self): """ Shutdown the server thread, when called, this method will stop the thread on the next socket timeout """ self.doshutdown = True def addData(self, data): """ Set the data to send :param data: the data to send """ if self.poolLength() >= self.poolSize: logging.warning('the send pool is full, consider increasing the pool size or decreasing the timeout !') return with self.sendPoolLock: self.sendPool.append(data) def setTargetHost(self, host, port): """ Set the host/port of the target, the destination :param host: the target host :param port: the target port .. note:: the host will be ignored when using broadcast mode """ del self.target[:] self.target.append((host, port)) def setMultipleTargetHost(self, address_list): """ Sets multiple host/port targets, the destinations :param address_list: a list with tuples (ip, port) """ del self.target[:] self.target = address_list[:] def close(self): """ Close the internal socket """ self.sock.close() def send(self, data): """ Send the data :param data: the data to send :rtype: bytes sent to each destination """ bytes = -1 for destination in self.target: bytes = self.sock.sendto(data, destination) return bytes def run(self): """ Method called when you call *.start()* of the thread """ if len(self.target) <= 0: Util.raiseException('You must set the target(s) before send data', ValueError) while True: if self.doshutdown: break while self.isReady(): data = self.popPool() self.send(data) time.sleep(self.timeout) self.close() class UDPThreadServer(threading.Thread): """ The UDP server thread class. This class is a thread to serve as Pyevolve server on the UDP datagrams, it is used to receive data from network lan/wan. Example: >>> s = UDPThreadServer("192.168.0.2", 666, 10) >>> s.start() >>> s.shutdown() :param host: the host to bind the server :param port: the server port to bind :param poolSize: the size of the server pool :param timeout: the socket timeout .. note:: this thread implements a pool to keep the received data, the *poolSize* parameter specifies how much individuals we must keep on the pool until the *popPool* method is called; when the pool is full, the sever will discard the received individuals. """ def __init__(self, host, port, poolSize=10, timeout=3): threading.Thread.__init__(self) self.recvPool = [] self.recvPoolLock = threading.Lock() self.bufferSize = 4096 self.host = host self.port = port self.timeout = timeout self.doshutdown = False self.poolSize = poolSize self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.sock.bind((host, port)) self.sock.settimeout(self.timeout) def shutdown(self): """ Shutdown the server thread, when called, this method will stop the thread on the next socket timeout """ self.doshutdown = True def isReady(self): """ Returns True when there is data on the pool or False when not :rtype: boolean """ with self.recvPoolLock: ret = True if len(self.recvPool) >= 1 else False return ret def poolLength(self): """ Returns the size of the pool :rtype: integer """ with self.recvPoolLock: ret = len(self.recvPool) return ret def popPool(self): """ Return the last data received on the pool :rtype: object """ with self.recvPoolLock: ret = self.recvPool.pop() return ret def close(self): """ Closes the internal socket """ self.sock.close() def setBufferSize(self, size): """ Sets the receive buffer size :param size: integer """ self.bufferSize = size def getBufferSize(self): """ Gets the current receive buffer size :rtype: integer """ return self.bufferSize def getData(self): """ Calls the socket *recvfrom* method and waits for the data, when the data is received, the method will return a tuple with the IP of the sender and the data received. When a timeout exception occurs, the method return None. :rtype: tuple (sender ip, data) or None when timeout exception """ try: data, sender = self.sock.recvfrom(self.bufferSize) except socket.timeout: return None return (sender[0], data) def run(self): """ Called when the thread is started by the user. This method is the main of the thread, when called, it will enter in loop to wait data or shutdown when needed. """ while True: # Get the data data = self.getData() # Shutdown called if self.doshutdown: break # The pool is full if self.poolLength() >= self.poolSize: continue # There is no data received if data == None: continue # It's a packet from myself if data[0] == self.host: continue with self.recvPoolLock: self.recvPool.append(data) self.close() def pickleAndCompress(obj, level=9): """ Pickles the object and compress the dumped string with zlib :param obj: the object to be pickled :param level: the compression level, 9 is the best and -1 is to not compress """ pickled = cPickle.dumps(obj) if level < 0: return pickled else: if not ZLIB_SUPPORT: Util.raiseException('zlib not found !', ImportError) pickled_zlib = zlib.compress(pickled, level) return pickled_zlib def unpickleAndDecompress(obj_dump, decompress=True): """ Decompress a zlib compressed string and unpickle the data :param obj: the object to be decompressend and unpickled """ if decompress: if not ZLIB_SUPPORT: Util.raiseException('zlib not found !', ImportError) obj_decompress = zlib.decompress(obj_dump) else: obj_decompress = obj_dump return cPickle.loads(obj_decompress) if __name__ == "__main__": arg = sys.argv[1] myself = getMachineIP() if arg == "server": s = UDPThreadServer(myself[0], 666) s.start() while True: print ".", time.sleep(10) if s.isReady(): item = s.popPool() print item time.sleep(4) s.shutdown() break elif arg == "client": print "Binding on %s..." % myself[0] s = UDPThreadUnicastClient(myself[0], 1500) s.setData("dsfssdfsfddf") s.setTargetHost(myself[0], 666) s.start() s.join() print s.getSentBytes() print "end..." pyevolve-0.6~rc1+svn398+dfsg/pyevolve/Scaling.py000066400000000000000000000073011153663664300216420ustar00rootroot00000000000000""" :mod:`Scaling` -- scaling schemes module =========================================================== This module have the *scaling schemes* like Linear scaling, etc. """ import Consts import Util import math import logging def LinearScaling(pop): """ Linear Scaling scheme .. warning :: Linear Scaling is only for positive raw scores """ logging.debug("Running linear scaling.") pop.statistics() c = Consts.CDefScaleLinearMultiplier a = b = delta = 0.0 pop_rawAve = pop.stats["rawAve"] pop_rawMax = pop.stats["rawMax"] pop_rawMin = pop.stats["rawMin"] if pop_rawAve == pop_rawMax: a = 1.0 b = 0.0 elif pop_rawMin > (c * pop_rawAve - pop_rawMax / c - 1.0): delta = pop_rawMax - pop_rawAve a = (c - 1.0) * pop_rawAve / delta b = pop_rawAve * (pop_rawMax - (c * pop_rawAve)) / delta else: delta = pop_rawAve - pop_rawMin a = pop_rawAve / delta b = -pop_rawMin * pop_rawAve / delta for i in xrange(len(pop)): f = pop[i].score if f < 0.0: Util.raiseException("Negative score, linear scaling not supported !", ValueError) f = f * a + b if f < 0: f = 0.0 pop[i].fitness = f def SigmaTruncScaling(pop): """ Sigma Truncation scaling scheme, allows negative scores """ logging.debug("Running sigma truncation scaling.") pop.statistics() c = Consts.CDefScaleSigmaTruncMultiplier pop_rawAve = pop.stats["rawAve"] pop_rawDev = pop.stats["rawDev"] for i in xrange(len(pop)): f = pop[i].score - pop_rawAve f+= c * pop_rawDev if f < 0: f = 0.0 pop[i].fitness = f def PowerLawScaling(pop): """ Power Law scaling scheme .. warning :: Power Law Scaling is only for positive raw scores """ logging.debug("Running power law scaling.") k = Consts.CDefScalePowerLawFactor for i in xrange(len(pop)): f = pop[i].score if f < 0.0: Util.raiseException("Negative score, power law scaling not supported !", ValueError) f = math.pow(f, k) pop[i].fitness = f def BoltzmannScaling(pop): """ Boltzmann scaling scheme. You can specify the **boltz_temperature** to the population parameters, this parameter will set the start temperature. You can specify the **boltz_factor** and the **boltz_min** parameters, the **boltz_factor** is the value that the temperature will be subtracted and the **boltz_min** is the mininum temperature of the scaling scheme. .. versionadded: 0.6 The `BoltzmannScaling` function. """ boltz_temperature = pop.getParam("boltz_temperature", Consts.CDefScaleBoltzStart) boltz_factor = pop.getParam("boltz_factor", Consts.CDefScaleBoltzFactor) boltz_min = pop.getParam("boltz_min", Consts.CDefScaleBoltzMinTemp) boltz_temperature-= boltz_factor boltz_temperature = max(boltz_temperature, boltz_min) pop.setParams(boltzTemperature=boltz_temperature) boltz_e = [] avg = 0.0 for i in xrange(len(pop)): val = math.exp(pop[i].score / boltz_temperature) boltz_e.append(val) avg += val avg /= len(pop) for i in xrange(len(pop)): pop[i].fitness = boltz_e[i] / avg def ExponentialScaling(pop): """ Exponential Scaling Scheme. The fitness will be the same as (e^score). .. versionadded: 0.6 The `ExponentialScaling` function. """ for i in xrange(len(pop)): score = pop[i].score pop[i].fitness = math.exp(score) def SaturatedScaling(pop): """ Saturated Scaling Scheme. The fitness will be the same as 1.0-(e^score) .. versionadded: 0.6 The `SaturatedScaling` function. """ for i in xrange(len(pop)): score = pop[i].score pop[i].fitness = 1.0 - math.exp(score) pyevolve-0.6~rc1+svn398+dfsg/pyevolve/Selectors.py000066400000000000000000000135721153663664300222340ustar00rootroot00000000000000""" :mod:`Selectors` -- selection methods module ============================================================== This module have the *selection methods*, like roulette wheel, tournament, ranking, etc. """ import random import Consts import operator def GRankSelector(population, **args): """ The Rank Selector - This selector will pick the best individual of the population every time. """ count = 0 if args["popID"] != GRankSelector.cachePopID: if population.sortType == Consts.sortType["scaled"]: best_fitness = population.bestFitness().fitness for index in xrange(1, len(population.internalPop)): if population[index].fitness == best_fitness: count += 1 else: best_raw = population.bestRaw().score for index in xrange(1, len(population.internalPop)): if population[index].score == best_raw: count += 1 GRankSelector.cachePopID = args["popID"] GRankSelector.cacheCount = count else: count = GRankSelector.cacheCount return population[random.randint(0, count)] GRankSelector.cachePopID = None GRankSelector.cacheCount = None def GUniformSelector(population, **args): """ The Uniform Selector """ return population[random.randint(0, len(population)-1)] def GTournamentSelector(population, **args): """ The Tournament Selector It accepts the *tournamentPool* population parameter. .. note:: the Tournament Selector uses the Roulette Wheel to pick individuals for the pool .. versionchanged:: 0.6 Changed the parameter `poolSize` to the `tournamentPool`, now the selector gets the pool size from the population. """ choosen = None should_minimize = population.minimax == Consts.minimaxType["minimize"] minimax_operator = min if should_minimize else max poolSize = population.getParam("tournamentPool", Consts.CDefTournamentPoolSize) tournament_pool = [GRouletteWheel(population, **args) for i in xrange(poolSize) ] if population.sortType == Consts.sortType["scaled"]: choosen = minimax_operator(tournament_pool, key=lambda ind: ind.fitness) else: choosen = minimax_operator(tournament_pool, key=lambda ind: ind.score) return choosen def GTournamentSelectorAlternative(population, **args): """ The alternative Tournament Selector This Tournament Selector don't uses the Roulette Wheel It accepts the *tournamentPool* population parameter. .. versionadded: 0.6 Added the GTournamentAlternative function. """ pool_size = population.getParam("tournamentPool", Consts.CDefTournamentPoolSize) len_pop = len(population) should_minimize = population.minimax == Consts.minimaxType["minimize"] minimax_operator = min if should_minimize else max tournament_pool = [population[random.randint(0, len_pop-1)] for i in xrange(pool_size)] if population.sortType == Consts.sortType["scaled"]: choosen = minimax_operator(tournament_pool, key=lambda ind: ind.fitness) else: choosen = minimax_operator(tournament_pool, key=lambda ind: ind.score) return choosen def GRouletteWheel(population, **args): """ The Roulette Wheel selector """ psum = None if args["popID"] != GRouletteWheel.cachePopID: GRouletteWheel.cachePopID = args["popID"] psum = GRouletteWheel_PrepareWheel(population) GRouletteWheel.cacheWheel = psum else: psum = GRouletteWheel.cacheWheel cutoff = random.random() lower = 0 upper = len(population) - 1 while(upper >= lower): i = lower + ((upper-lower)/2) if psum[i] > cutoff: upper = i-1 else: lower = i+1 lower = min(len(population)-1, lower) lower = max(0, lower) return population.bestFitness(lower) GRouletteWheel.cachePopID = None GRouletteWheel.cacheWheel = None def GRouletteWheel_PrepareWheel(population): """ A preparation for Roulette Wheel selection """ len_pop = len(population) psum = [i for i in xrange(len_pop)] population.statistics() if population.sortType == Consts.sortType["scaled"]: pop_fitMax = population.stats["fitMax"] pop_fitMin = population.stats["fitMin"] if pop_fitMax == pop_fitMin: for index in xrange(len_pop): psum[index] = (index+1) / float(len_pop) elif (pop_fitMax > 0 and pop_fitMin >= 0) or (pop_fitMax <= 0 and pop_fitMin < 0): population.sort() if population.minimax == Consts.minimaxType["maximize"]: psum[0] = population[0].fitness for i in xrange(1, len_pop): psum[i] = population[i].fitness + psum[i-1] for i in xrange(len_pop): psum[i] /= float(psum[len_pop - 1]) else: psum[0] = -population[0].fitness + pop_fitMax + pop_fitMin for i in xrange(1, len_pop): psum[i] = -population[i].fitness + pop_fitMax + pop_fitMin + psum[i-1] for i in xrange(len_pop): psum[i] /= float(psum[len_pop - 1]) else: pop_rawMax = population.stats["rawMax"] pop_rawMin = population.stats["rawMin"] if pop_rawMax == pop_rawMin: for index in xrange(len_pop): psum[index] = (index+1) / float(len_pop) elif (pop_rawMax > 0 and pop_rawMin >= 0) or (pop_rawMax <= 0 and pop_rawMin < 0): population.sort() if population.minimax == Consts.minimaxType["maximize"]: psum[0] = population[0].score for i in xrange(1, len_pop): psum[i] = population[i].score + psum[i-1] for i in xrange(len_pop): psum[i] /= float(psum[len_pop-1]) else: psum[0] = - population[0].score + pop_rawMax + pop_rawMin for i in xrange(1, len_pop): psum[i] = - population[i].score + pop_rawMax + pop_rawMin + psum[i-1] for i in xrange(len_pop): psum[i] /= float(psum[len_pop-1]) return psum pyevolve-0.6~rc1+svn398+dfsg/pyevolve/Statistics.py000066400000000000000000000063101153663664300224130ustar00rootroot00000000000000""" :mod:`Statistics` -- statistical structure module ========================================================================== This module have the class which is reponsible to keep statistics of each generation. This class is used by the adapters and other statistics dump objects. """ class Statistics: """ Statistics Class - A class bean-like to store the statistics The statistics hold by this class are: **rawMax, rawMin, rawAve** Maximum, minimum and average of raw scores **rawDev, rawVar** Standard Deviation and Variance of raw scores **fitMax, fitMin, fitAve** Maximum, mininum and average of fitness scores **rawTot, fitTot** The total (sum) of raw scores and the fitness scores Example: >>> stats = ga_engine.getStatistics() >>> st["rawMax"] 10.2 """ def __init__(self): """ The Statistics Class creator """ # 'fit' means 'fitness' self.internalDict = { "rawMax" : 0.0, "rawMin" : 0.0, "rawAve" : 0.0, "rawDev" : 0.0, "rawVar" : 0.0, "fitMax" : 0.0, "fitMin" : 0.0, "fitAve" : 0.0 } self.descriptions = { "rawMax" : "Maximum raw score", "rawMin" : "Minimum raw score", "rawAve" : "Average of raw scores", "rawDev" : "Standard deviation of raw scores", "rawVar" : "Raw scores variance", "fitMax" : "Maximum fitness", "fitMin" : "Minimum fitness", "fitAve" : "Fitness average" } def __getitem__(self, key): """ Return the specific statistic by key """ return self.internalDict[key] def __setitem__(self, key, value): """ Set the statistic """ self.internalDict[key] = value def __len__(self): """ Return the lenght of internal stats dictionary """ return len(self.internalDict) def __repr__(self): """ Return a string representation of the statistics """ strBuff = "- Statistics\n" for k,v in self.internalDict.items(): strBuff += "\t%-45s = %.2f\n" % (self.descriptions.get(k, k), v) return strBuff def asTuple(self): """ Returns the stats as a python tuple """ return tuple(self.internalDict.values()) def clear(self): """ Set all statistics to zero """ for k in self.internalDict.keys(): self.internalDict[k] = 0 def items(self): """ Return a tuple (name, value) for all stored statistics """ return self.internalDict.items() def clone(self): """ Instantiate a new Statistic class with the same contents """ clone_stat = Statistics() self.copy(clone_stat) return clone_stat def copy(self, obj): """ Copy the values to the obj variable of the same class :param obj: the Statistics object destination """ obj.internalDict = self.internalDict.copy() obj.descriptions = self.descriptions.copy() pyevolve-0.6~rc1+svn398+dfsg/pyevolve/Util.py000066400000000000000000000206411153663664300212010ustar00rootroot00000000000000""" :mod:`Util` -- utility module ============================================================================ This is the utility module, with some utility functions of general use, like list item swap, random utilities and etc. """ from random import random as rand_random from math import sqrt as math_sqrt import logging import Consts def randomFlipCoin(p): """ Returns True with the *p* probability. If the *p* is 1.0, the function will always return True, or if is 0.0, the function will return always False. Example: >>> Util.randomFlipCoin(1.0) True :param p: probability, between 0.0 and 1.0 :rtype: True or False """ if p == 1.0: return True if p == 0.0: return False return True if rand_random() <= p else False def listSwapElement(lst, indexa, indexb): """ Swaps elements A and B in a list. Example: >>> l = [1, 2, 3] >>> Util.listSwapElement(l, 1, 2) >>> l [1, 3, 2] :param lst: the list :param indexa: the swap element A :param indexb: the swap element B :rtype: None """ lst[indexa], lst[indexb] = lst[indexb], lst[indexa] def list2DSwapElement(lst, indexa, indexb): """ Swaps elements A and B in a 2D list (matrix). Example: >>> l = [ [1,2,3], [4,5,6] ] >>> Util.list2DSwapElement(l, (0,1), (1,1) ) >>> l [[1, 5, 3], [4, 2, 6]] :param lst: the list :param indexa: the swap element A :param indexb: the swap element B :rtype: None """ temp = lst[indexa[0]][indexa[1]] lst[indexa[0]][indexa[1]] = lst[indexb[0]][indexb[1]] lst[indexb[0]][indexb[1]] = temp def raiseException(message, expt=None): """ Raise an exception and logs the message. Example: >>> Util.raiseException('The value is not an integer', ValueError) :param message: the message of exception :param expt: the exception class :rtype: None """ logging.critical(message) if expt is None: raise Exception(message) else: raise expt, message def cmp_individual_raw(a, b): """ Compares two individual raw scores Example: >>> GPopulation.cmp_individual_raw(a, b) :param a: the A individual instance :param b: the B individual instance :rtype: 0 if the two individuals raw score are the same, -1 if the B individual raw score is greater than A and 1 if the A individual raw score is greater than B. .. note:: this function is used to sorte the population individuals """ if a.score < b.score: return -1 if a.score > b.score: return 1 return 0 def cmp_individual_scaled(a, b): """ Compares two individual fitness scores, used for sorting population Example: >>> GPopulation.cmp_individual_scaled(a, b) :param a: the A individual instance :param b: the B individual instance :rtype: 0 if the two individuals fitness score are the same, -1 if the B individual fitness score is greater than A and 1 if the A individual fitness score is greater than B. .. note:: this function is used to sorte the population individuals """ if a.fitness < b.fitness: return -1 if a.fitness > b.fitness: return 1 return 0 def importSpecial(name): """ This function will import the *name* module, if fails, it will raise an ImportError exception and a message :param name: the module name :rtype: the module object .. versionadded:: 0.6 The *import_special* function """ try: imp_mod = __import__(name) except ImportError: raiseException("Cannot import module %s: %s" % (name, Consts.CDefImportList[name]), expt=ImportError) return imp_mod class ErrorAccumulator: """ An accumulator for the Root Mean Square Error (RMSE) and the Mean Square Error (MSE) """ def __init__(self): self.acc = 0.0 self.acc_square = 0.0 self.acc_len = 0 def reset(self): """ Reset the accumulator """ self.acc_square = 0.0 self.acc = 0.0 self.acc_len = 0 def append(self, target, evaluated): """ Add value to the accumulator :param target: the target value :param evaluated: the evaluated value """ self.acc_square += (target - evaluated)**2 self.acc += (target - evaluated) self.acc_len +=1 def __iadd__(self, value): """ The same as append, but you must pass a tuple """ self.acc_square += (value[0] - value[1])**2 self.acc += abs(value[0] - value[1]) self.acc_len +=1 return self def getMean(self): """ Return the mean of the non-squared accumulator """ return self.acc / self.acc_len def getSquared(self): """ Returns the squared accumulator """ return self.acc_square def getNonSquared(self): """ Returns the non-squared accumulator """ return self.acc def getAdjusted(self): """ Returns the adjusted fitness This fitness is calculated as 1 / (1 + standardized fitness) """ return 1.0/(1.0 + self.acc) def getRMSE(self): """ Return the root mean square error :rtype: float RMSE """ return math_sqrt(self.acc_square / float(self.acc_len)) def getMSE(self): """ Return the mean square error :rtype: float MSE """ return (self.acc_square / float(self.acc_len)) class Graph: """ The Graph class Example: >>> g = Graph() >>> g.addEdge("a", "b") >>> g.addEdge("b", "c") >>> for node in g: ... print node a b c .. versionadded:: 0.6 The *Graph* class. """ def __init__(self): """ The constructor """ self.adjacent = {} def __iter__(self): """ Returns an iterator to the all graph elements """ return iter(self.adjacent) def addNode(self, node): """ Add the node :param node: the node to add """ if node not in self.adjacent: self.adjacent[node] = {} def __iadd__(self, node): """ Add a node using the += operator """ self.addNode(node) return self def addEdge(self, a, b): """ Add an edge between two nodes, if the nodes doesn't exists, they will be created :param a: the first node :param b: the second node """ if a not in self.adjacent: self.adjacent[a] = {} if b not in self.adjacent: self.adjacent[b] = {} self.adjacent[a][b] = True self.adjacent[b][a] = True def getNodes(self): """ Returns all the current nodes on the graph :rtype: the list of nodes """ return self.adjacent.keys() def reset(self): """ Deletes all nodes of the graph """ self.adjacent.clear() def getNeighbors(self, node): """ Returns the neighbors of the node :param node: the node """ return self.adjacent[node].keys() def __getitem__(self, node): """ Returns the adjacent nodes of the node """ return self.adjacent[node].keys() def __repr__(self): ret = "- Graph\n" ret += "\tNode list:\n" for node in self: ret += "\t\tNode [%s] = %s\n" % (node, self.getNeighbors(node)) return ret def G1DListGetEdgesComposite(mom, dad): """ Get the edges and the merge between the edges of two G1DList individuals :param mom: the mom G1DList individual :param dad: the dad G1DList individual :rtype: a tuple (mom edges, dad edges, merge) """ mom_edges = G1DListGetEdges(mom) dad_edges = G1DListGetEdges(dad) return (mom_edges, dad_edges, G1DListMergeEdges(mom_edges, dad_edges)) def G1DListGetEdges(individual): """ Get the edges of a G1DList individual :param individual: the G1DList individual :rtype: the edges dictionary """ edg = {} ind_list = individual.getInternalList() for i in xrange(len(ind_list)): a, b = ind_list[i], ind_list[i-1] if a not in edg: edg[a] = [] else: edg[a].append(b) if b not in edg: edg[b] = [] else: edg[b].append(a) return edg def G1DListMergeEdges(eda, edb): """ Get the merge between the two individual edges :param eda: the edges of the first G1DList genome :param edb: the edges of the second G1DList genome :rtype: the merged dictionary """ edges = {} for value, near in eda.items(): for adj in near: if (value in edb) and (adj in edb[value]): edges.setdefault(value, []).append(adj) return edges pyevolve-0.6~rc1+svn398+dfsg/pyevolve/__init__.py000066400000000000000000000026441153663664300220260ustar00rootroot00000000000000""" :mod:`pyevolve` -- the main pyevolve namespace ================================================================ This is the main module of the pyevolve, every other module is above this namespace, for example, to import :mod:`Mutators`: >>> from pyevolve import Mutators """ __all__ = ["Consts", "Crossovers", "DBAdapters", "FunctionSlot", "G1DBinaryString", "G1DList", "G2DBinaryString", "G2DList", "GAllele", "GenomeBase", "GPopulation", "GSimpleGA", "GTree", "Initializators", "Migration", "Mutators", "Network", "Scaling", "Selectors", "Statistics", "Util"] __version__ = '0.6' __author__ = 'Christian S. Perone' import pyevolve.Consts import sys if sys.version_info[:2] < Consts.CDefPythonRequire: raise Exception("Python 2.5+ required, the version %s was found on your system !" % (sys.version_info[:2],)) del sys def logEnable(filename=Consts.CDefLogFile, level=Consts.CDefLogLevel): """ Enable the log system for pyevolve :param filename: the log filename :param level: the debugging level Example: >>> pyevolve.logEnable() """ import logging logging.basicConfig(level=level, format='%(asctime)s [%(module)s:%(funcName)s:%(lineno)d] %(levelname)s %(message)s', filename=filename, filemode='w') logging.info("Pyevolve v.%s, the log was enabled by user.", __version__) pyevolve-0.6~rc1+svn398+dfsg/pyevolve/clean_pyc.bat000066400000000000000000000000671153663664300223370ustar00rootroot00000000000000@echo off del *.pyc del *.pyo del *.bak del *.classpyevolve-0.6~rc1+svn398+dfsg/pyevolve/clean_pyc.sh000066400000000000000000000000471153663664300222010ustar00rootroot00000000000000#!/bin/sh rm -rf *.pyc rm -rf *.classpyevolve-0.6~rc1+svn398+dfsg/pyevolve_graph.py000066400000000000000000000536661153663664300214620ustar00rootroot00000000000000#!/usr/bin/python # This code is part of Pyevolve. # It requires matplotlib v.0.98.5.0+ from optparse import OptionParser from optparse import OptionGroup def graph_pop_heatmap_raw(all, minimize, colormap="jet", filesave=None): pylab.imshow(all, aspect="auto", interpolation="gaussian", cmap=matplotlib.cm.__dict__[colormap]) pylab.title("Plot of pop. raw scores along the generations") pylab.xlabel('Population') pylab.ylabel('Generations') pylab.grid(True) pylab.colorbar() if filesave: pylab.savefig(filesave) print "Graph saved to %s file !" % (filesave,) else: pylab.show() def graph_pop_heatmap_fitness(all, minimize, colormap="jet", filesave=None): pylab.imshow(all, aspect="equal", interpolation="gaussian", cmap=matplotlib.cm.__dict__[colormap]) pylab.title("Plot of pop. fitness scores along the generations") pylab.xlabel('Population') pylab.ylabel('Generations') pylab.grid(True) pylab.colorbar() if filesave: pylab.savefig(filesave) print "Graph saved to %s file !" % (filesave,) else: pylab.show() def graph_diff_raw(all, minimize, filesave=None): x = [] diff_raw_y = [] diff_fit_y = [] for it in all: x.append(it["generation"]) diff_raw_y.append(it["rawMax"] - it["rawMin"]) diff_fit_y.append(it["fitMax"] - it["fitMin"]) pylab.figure() pylab.subplot(211) pylab.plot(x, diff_raw_y, "g", label="Raw difference", linewidth=1.2) pylab.fill_between(x, diff_raw_y, color="g", alpha=0.1) diff_raw_max= max(diff_raw_y) gen_max_raw = x[diff_raw_y.index(diff_raw_max)] pylab.annotate("Maximum (%.2f)" % (diff_raw_max,), xy=(gen_max_raw, diff_raw_max), xycoords='data', xytext=(-150, -20), textcoords='offset points', arrowprops=dict(arrowstyle="->", connectionstyle="arc"), ) pylab.xlabel("Generation (#)") pylab.ylabel("Raw difference") pylab.title("Plot of evolution identified by '%s'" % (options.identify)) pylab.grid(True) pylab.legend(prop=FontProperties(size="smaller")) pylab.subplot(212) pylab.plot(x, diff_fit_y, "b", label="Fitness difference", linewidth=1.2) pylab.fill_between(x, diff_fit_y, color="b", alpha=0.1) diff_fit_max= max(diff_fit_y) gen_max_fit = x[diff_fit_y.index(diff_fit_max)] pylab.annotate("Maximum (%.2f)" % (diff_fit_max,), xy=(gen_max_fit, diff_fit_max), xycoords='data', xytext=(-150, -20), textcoords='offset points', arrowprops=dict(arrowstyle="->", connectionstyle="arc"), ) pylab.xlabel("Generation (#)") pylab.ylabel("Fitness difference") pylab.grid(True) pylab.legend(prop=FontProperties(size="smaller")) if filesave: pylab.savefig(filesave) print "Graph saved to %s file !" % (filesave,) else: pylab.show() def graph_maxmin_raw(all, minimize, filesave=None): x = [] max_y = [] min_y = [] std_dev_y = [] avg_y = [] for it in all: x.append(it["generation"]) max_y.append(it["rawMax"]) min_y.append(it["rawMin"]) std_dev_y.append(it["rawDev"]) avg_y.append(it["rawAve"]) pylab.figure() pylab.plot(x, max_y, "g", label="Max raw", linewidth=1.2) pylab.plot(x, min_y, "r", label="Min raw", linewidth=1.2) pylab.plot(x, avg_y, "b", label="Avg raw", linewidth=1.2) pylab.plot(x, std_dev_y, "k", label="Std Dev raw", linewidth=1.2) pylab.fill_between(x, min_y, max_y, color="g", alpha=0.1, label="Diff max/min") if minimize: raw_max = min(min_y) else: raw_max= max(max_y) if minimize: gen_max = x[min_y.index(raw_max)] else: gen_max = x[max_y.index(raw_max)] min_std = min(std_dev_y) gen_min_std = x[std_dev_y.index(min_std)] max_std = max(std_dev_y) gen_max_std = x[std_dev_y.index(max_std)] if minimize: annot_label = "Minimum (%.2f)" % (raw_max,) else: annot_label = "Maximum (%.2f)" % (raw_max,) pylab.annotate(annot_label, xy=(gen_max, raw_max), xycoords='data', xytext=(8, 15), textcoords='offset points', arrowprops=dict(arrowstyle="->", connectionstyle="arc"), ) pylab.annotate("Min StdDev (%.2f)" % (min_std,), xy=(gen_min_std, min_std), xycoords='data', xytext=(8, 15), textcoords='offset points', arrowprops=dict(arrowstyle="->", connectionstyle="arc"), ) pylab.annotate("Max StdDev (%.2f)" % (max_std,), xy=(gen_max_std, max_std), xycoords='data', xytext=(8, 15), textcoords='offset points', arrowprops=dict(arrowstyle="->", connectionstyle="arc"), ) pylab.xlabel("Generation (#)") pylab.ylabel("Raw score") pylab.title("Plot of evolution identified by '%s' (raw scores)" % (options.identify)) pylab.grid(True) pylab.legend(prop=FontProperties(size="smaller")) if filesave: pylab.savefig(filesave) print "Graph saved to %s file !" % (filesave,) else: pylab.show() def graph_maxmin_fitness(all, minimize, filesave=None): x = [] max_y = [] min_y = [] avg_y = [] for it in all: x.append(it["generation"]) max_y.append(it["fitMax"]) min_y.append(it["fitMin"]) avg_y.append(it["fitAve"]) pylab.figure() pylab.plot(x, max_y, "g", label="Max fitness") pylab.plot(x, min_y, "r", label="Min fitness") pylab.plot(x, avg_y, "b", label="Avg fitness") pylab.fill_between(x, min_y, max_y, color="g", alpha=0.1, label="Diff max/min") if minimize: raw_max = min(min_y) else: raw_max = max(max_y) if minimize: gen_max = x[min_y.index(raw_max)] else: gen_max = x[max_y.index(raw_max)] if minimize: annot_label = "Minimum (%.2f)" % (raw_max,) else: annot_label = "Maximum (%.2f)" % (raw_max,) pylab.annotate(annot_label, xy=(gen_max, raw_max), xycoords='data', xytext=(8, 15), textcoords='offset points', arrowprops=dict(arrowstyle="->", connectionstyle="arc"), ) pylab.xlabel("Generation (#)") pylab.ylabel("Fitness score") pylab.title("Plot of evolution identified by '%s' (fitness scores)" % (options.identify)) pylab.grid(True) pylab.legend(prop=FontProperties(size="smaller")) if filesave: pylab.savefig(filesave) print "Graph saved to %s file !" % (filesave,) else: pylab.show() def graph_errorbars_raw(all, minimize, filesave=None): x = [] y = [] yerr_max = [] yerr_min = [] for it in all: x.append(it["generation"]) y.append(it["rawAve"]) ymax = it["rawMax"] - it["rawAve"] ymin = it["rawAve"] - it["rawMin"] yerr_max.append(ymax) yerr_min.append(ymin) pylab.figure() pylab.errorbar(x, y, [yerr_min, yerr_max], ecolor="g") pylab.xlabel('Generation (#)') pylab.ylabel('Raw score Min/Avg/Max') pylab.title("Plot of evolution identified by '%s' (raw scores)" % (options.identify)) pylab.grid(True) if filesave: pylab.savefig(filesave) print "Graph saved to %s file !" % (filesave,) else: pylab.show() def graph_errorbars_fitness(all, minimize, filesave=None): x = [] y = [] yerr_max = [] yerr_min = [] for it in all: x.append(it["generation"]) y.append(it["fitAve"]) ymax = it["fitMax"] - it["fitAve"] ymin = it["fitAve"] - it["fitMin"] yerr_max.append(ymax) yerr_min.append(ymin) pylab.figure() pylab.errorbar(x, y, [yerr_min, yerr_max], ecolor="g") pylab.xlabel('Generation (#)') pylab.ylabel('Fitness score Min/Avg/Max') pylab.title("Plot of evolution identified by '%s' (fitness scores)" % (options.identify)) pylab.grid(True) if filesave: pylab.savefig(filesave) print "Graph saved to %s file !" % (filesave,) else: pylab.show() def graph_compare_raw(all, minimize, id_list, filesave=None): colors_list = ["g", "b", "r", "k", "m", "y"] index = 0 pylab.figure() for it_out in all: x = [] max_y = [] min_y = [] for it in it_out: x.append(it["generation"]) max_y.append(it["rawMax"]) min_y.append(it["rawMin"]) if minimize: pylab.plot(x, max_y, colors_list[index], linewidth=0.05) pylab.plot(x, min_y, colors_list[index], label="Raw min (%s)" % (id_list[index],), linewidth=1.3) else: pylab.plot(x, max_y, colors_list[index], label="Raw max (%s)" % (id_list[index],), linewidth=1.3) pylab.plot(x, min_y, colors_list[index], linewidth=0.05) pylab.fill_between(x, min_y, max_y, color=colors_list[index], alpha=0.06,) index += 1 pylab.xlabel("Generation (#)") pylab.ylabel("Raw score") pylab.title("Plot of evolution identified by '%s' (raw scores)" % ('many',)) pylab.grid(True) pylab.legend(prop=FontProperties(size="smaller")) if filesave: pylab.savefig(filesave) print "Graph saved to %s file !" % (filesave,) else: pylab.show() def graph_compare_fitness(all, minimize, id_list, filesave=None): colors_list = ["g", "b", "r", "k", "m", "y"] index = 0 pylab.figure() for it_out in all: x = [] max_y = [] min_y = [] for it in it_out: x.append(it["generation"]) max_y.append(it["fitMax"]) min_y.append(it["fitMin"]) if minimize: pylab.plot(x, max_y, colors_list[index], linewidth=0.05) pylab.plot(x, min_y, colors_list[index], label="Fitness min (%s)" % (id_list[index],), linewidth=1.3) else: pylab.plot(x, max_y, colors_list[index], label="Fitness max (%s)" % (id_list[index],), linewidth=1.3) pylab.plot(x, min_y, colors_list[index], linewidth=0.05) pylab.fill_between(x, min_y, max_y, color=colors_list[index], alpha=0.06,) index += 1 pylab.xlabel("Generation (#)") pylab.ylabel("Fitness score") pylab.title("Plot of evolution identified by '%s' (fitness scores)" % ('many',)) pylab.grid(True) pylab.legend(prop=FontProperties(size="smaller")) if filesave: pylab.savefig(filesave) print "Graph saved to %s file !" % (filesave,) else: pylab.show() if __name__ == "__main__": from pyevolve import __version__ as pyevolve_version from pyevolve import __author__ as pyevolve_author popGraph = False print "Pyevolve %s - Graph Plot Tool" % (pyevolve_version,) print "By %s\n" % (pyevolve_author,) parser = OptionParser() parser.add_option("-f", "--file", dest="dbfile", help="Database file to read (default is 'pyevolve.db').", metavar="FILENAME", default="pyevolve.db") parser.add_option("-i", "--identify", dest="identify", help="The identify of evolution.", metavar="IDENTIFY") parser.add_option("-o", "--outfile", dest="outfile", help="""Write the graph image to a file (don't use extension, just the filename, default is png format, but you can change using --extension (-e) parameter).""", metavar="OUTFILE") parser.add_option("-e", "--extension", dest="extension", help="""Graph image file format. Supported options (formats) are: emf, eps, pdf, png, ps, raw, rgba, svg, svgz. Default is 'png'.""", metavar="EXTENSION", default="png") parser.add_option("-g", "--genrange", dest="genrange", help="""This is the generation range of the graph, ex: 1:30 (interval between 1 and 30).""", metavar="GENRANGE") parser.add_option("-l", "--lindrange", dest="lindrange", help="""This is the individual range of the graph, ex: 1:30 (individuals between 1 and 30), only applies to heatmaps.""", metavar="LINDRANGE") parser.add_option("-c", "--colormap", dest="colormap", help="""Sets the Color Map for the graph types 8 and 9. Some options are: summer, bone, gray, hot, jet, cooper, spectral. The default is 'jet'.""", metavar="COLORMAP", default="jet") parser.add_option("-m", "--minimize", action="store_true", help="Sets the 'Minimize' mode, default is the Maximize mode. This option makes sense if you are minimizing your evaluation function.", dest="minimize") group = OptionGroup(parser, "Graph types", "This is the supported graph types") group.add_option("-0", action="store_true", help="Write all graphs to files. Graph types: 1, 2, 3, 4 and 5.", dest="all_graphs") group.add_option("-1", action="store_true", help="Error bars graph (raw scores).", dest="errorbars_raw") group.add_option("-2", action="store_true", help="Error bars graph (fitness scores).", dest="errorbars_fitness") group.add_option("-3", action="store_true", help="Max/min/avg/std. dev. graph (raw scores).", dest="maxmin_raw") group.add_option("-4", action="store_true", help="Max/min/avg graph (fitness scores).", dest="maxmin_fitness") group.add_option("-5", action="store_true", help="Raw and Fitness min/max difference graph.", dest="diff_raw") group.add_option("-6", action="store_true", help="Compare best raw score of two or more evolutions (you must specify the identify comma-separed list with --identify (-i) parameter, like 'one, two, three'), the maximum is 6 items.", dest="compare_raw") group.add_option("-7", action="store_true", help="Compare best fitness score of two or more evolutions (you must specify the identify comma-separed list with --identify (-i) parameter, like 'one, two, three'), the maximum is 6 items.", dest="compare_fitness") group.add_option("-8", action="store_true", help="Show a heat map of population raw score distribution between generations.", dest="pop_heatmap_raw") group.add_option("-9", action="store_true", help="Show a heat map of population fitness score distribution between generations.", dest="pop_heatmap_fitness") parser.add_option_group(group) (options, args) = parser.parse_args() if options.identify and (not options.errorbars_raw and not options.errorbars_fitness and not options.maxmin_raw and not options.maxmin_fitness and not options.diff_raw and not options.all_graphs and not options.compare_raw and not options.pop_heatmap_raw and not options.pop_heatmap_fitness and not options.compare_fitness): parser.error("You must choose one graph type !") if (not options.identify) or (not options.dbfile): parser.print_help() exit() print "Loading modules...." import os.path if not os.path.exists(options.dbfile): print "Database file '%s' not found !" % (options.dbfile, ) exit() import pylab from matplotlib.font_manager import FontProperties import matplotlib.cm import sqlite3 import math import os print "Loading database and creating graph..." identify_list = options.identify.split(",") identify_list = map(str.strip, identify_list) all = None if options.pop_heatmap_raw or options.pop_heatmap_fitness: conn = sqlite3.connect(options.dbfile) conn.row_factory = sqlite3.Row c = conn.cursor() if options.genrange: genrange = options.genrange.split(":") ret = c.execute("select distinct generation from population where identify = ? and generation between ? and ?", (options.identify, genrange[0], genrange[1])) else: ret = c.execute("select distinct generation from population where identify = ?", (options.identify,)) generations = ret.fetchall() if len(generations) <= 0: print "No generation data found for the identify '%s' !" % (options.identify,) exit() all = [] for gen in generations: pop_tmp = [] if options.lindrange: individual_range = options.lindrange.split(":") ret = c.execute(""" select * from population where identify = ? and generation = ? and individual between ? and ? """, (options.identify, gen[0], individual_range[0], individual_range[1])) else: ret = c.execute(""" select * from population where identify = ? and generation = ? """, (options.identify, gen[0])) ret_fetch = ret.fetchall() for it in ret_fetch: if options.pop_heatmap_raw: pop_tmp.append(it["raw"]) else: pop_tmp.append(it["fitness"]) all.append(pop_tmp) ret.close() conn.close() if len(all) <= 0: print "No statistic data found for the identify '%s' !" % (options.identify,) exit() print "%d generations found !" % (len(all),) popGraph = True if len(identify_list) == 1 and not popGraph: if options.compare_raw or options.compare_fitness: parser.error("You can't use this graph type with only one identify !") conn = sqlite3.connect(options.dbfile) conn.row_factory = sqlite3.Row c = conn.cursor() if options.genrange: genrange = options.genrange.split(":") ret = c.execute("select * from statistics where identify = ? and generation between ? and ?", (options.identify, genrange[0], genrange[1])) else: ret = c.execute("select * from statistics where identify = ?", (options.identify,)) all = ret.fetchall() ret.close() conn.close() if len(all) <= 0: print "No statistic data found for the identify '%s' !" % (options.identify,) exit() print "%d generations found !" % (len(all),) elif len(identify_list) > 1 and not popGraph: all = [] if (not options.compare_raw) and (not options.compare_fitness): parser.error("You can't use many ids with this graph type !") conn = sqlite3.connect(options.dbfile) conn.row_factory = sqlite3.Row c = conn.cursor() for item in identify_list: if options.genrange: genrange = options.genrange.split(":") ret = c.execute("select * from statistics where identify = ? and generation between ? and ?", (item, genrange[0], genrange[1])) else: ret = c.execute("select * from statistics where identify = ?", (item,)) fetchall = ret.fetchall() if len(fetchall) > 0: all.append(fetchall) ret.close() conn.close() if len(all) <= 0: print "No statistic data found for the identify list '%s' !" % (options.identify,) exit() print "%d identify found !" % (len(all),) if options.errorbars_raw: if options.outfile: graph_errorbars_raw(all, options.minimize, options.outfile + "." + options.extension) else: graph_errorbars_raw(all, options.minimize) if options.errorbars_fitness: if options.outfile: graph_errorbars_fitness(all, options.minimize, options.outfile + "." + options.extension) else: graph_errorbars_fitness(all, options.minimize) if options.maxmin_raw: if options.outfile: graph_maxmin_raw(all, options.minimize, options.outfile + "." + options.extension) else: graph_maxmin_raw(all, options.minimize) if options.maxmin_fitness: if options.outfile: graph_maxmin_fitness(all, options.minimize, options.outfile + "." + options.extension) else: graph_maxmin_fitness(all, options.minimize) if options.diff_raw: if options.outfile: graph_diff_raw(all, options.minimize, options.outfile + "." + options.extension) else: graph_diff_raw(all, options.minimize) if options.all_graphs: all_graph_functions = [graph_errorbars_raw, graph_errorbars_fitness, graph_maxmin_raw, graph_maxmin_fitness, graph_diff_raw] if options.outfile: parser.error("You can't specify one file to all graphs !") dirname = "graphs_" + options.identify if not os.path.isdir(dirname): os.mkdir(dirname) for graph in all_graph_functions: filename = dirname + "/" filename += options.identify + "_" + graph.__name__[6:] filename += "." + options.extension graph(all, options.minimize, filename) print "\n\tDone ! The graphs was saved in the directory '%s'" % (dirname) if options.compare_raw: if options.outfile: graph_compare_raw(all, options.minimize, identify_list, options.outfile + "." + options.extension) else: graph_compare_raw(all, options.minimize, identify_list ) if options.compare_fitness: if options.outfile: graph_compare_fitness(all, options.minimize, identify_list, options.outfile + "." + options.extension) else: graph_compare_fitness(all, options.minimize, identify_list ) if options.pop_heatmap_raw: if options.outfile: graph_pop_heatmap_raw(all, options.minimize, options.colormap, options.outfile + "." + options.extension) else: graph_pop_heatmap_raw(all, options.minimize, options.colormap) if options.pop_heatmap_fitness: if options.outfile: graph_pop_heatmap_fitness(all, options.minimize, options.colormap, options.outfile + "." + options.extension) else: graph_pop_heatmap_fitness(all, options.minimize, options.colormap) pyevolve-0.6~rc1+svn398+dfsg/pylintrc.conf000066400000000000000000000223611153663664300205550ustar00rootroot00000000000000# lint Python modules using external checkers. # # This is the main checker controlling the other ones and the reports # generation. It is itself both a raw checker and an astng checker in order # to: # * handle message activation / deactivation at the module level # * handle some basic but necessary stats'data (number of classes, methods...) # [MASTER] # Specify a configuration file. #rcfile= # Python code to execute, usually for sys.path manipulation such as # pygtk.require(). #init-hook= # Profiled execution. profile=no # Add to the black list. It should be a base name, not a # path. You may set this option multiple times. ignore=CVS # Pickle collected data for later comparisons. persistent=yes # Set the cache size for astng objects. cache-size=500 # List of plugins (as comma separated values of python modules names) to load, # usually to register additional checkers. load-plugins= [MESSAGES CONTROL] # Enable only checker(s) with the given id(s). This option conflicts with the # disable-checker option #enable-checker= # Enable all checker(s) except those with the given id(s). This option # conflicts with the enable-checker option #disable-checker= # Enable all messages in the listed categories (IRCWEF). #enable-msg-cat= # Disable all messages in the listed categories (IRCWEF). disable-msg-cat=I # Enable the message(s) with the given id(s). #enable-msg= # Disable the message(s) with the given id(s). disable-msg=W0704,W0311,C0301,C0103,C0321,R0902,R0903,W0105,C0322,C0324,R0904 [REPORTS] # Set the output format. Available formats are text, parseable, colorized, msvs # (visual studio) and html output-format=html # Include message's id in output include-ids=yes # Put messages in a separate file for each module / package specified on the # command line instead of printing them on stdout. Reports (if any) will be # written in a file name "pylint_global.[txt|html]". files-output=no # Tells wether to display a full report or only the messages reports=yes # Python expression which should return a note less than 10 (10 is the highest # note). You have access to the variables errors warning, statement which # respectivly contain the number of errors / warnings messages and the total # number of statements analyzed. This is used by the global evaluation report # (R0004). evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) # Add a comment according to your evaluation note. This is used by the global # evaluation report (R0004). comment=no # Enable the report(s) with the given id(s). #enable-report= # Disable the report(s) with the given id(s). #disable-report= # checks for : # * doc strings # * modules / classes / functions / methods / arguments / variables name # * number of arguments, local variables, branchs, returns and statements in # functions, methods # * required module attributes # * dangerous default values as arguments # * redefinition of function / method / class # * uses of the global statement # [BASIC] # Required attributes for module, separated by a comma required-attributes= # Regular expression which should only match functions or classes name which do # not require a docstring no-docstring-rgx=__.*__ # Regular expression which should only match correct module names module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ # Regular expression which should only match correct module level names const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ # Regular expression which should only match correct class names class-rgx=[A-Z_][a-zA-Z0-9]+$ # Regular expression which should only match correct function names function-rgx=[a-z_][a-z0-9_]{2,30}$ # Regular expression which should only match correct method names method-rgx=[a-z_][a-z0-9_]{2,30}$ # Regular expression which should only match correct instance attribute names attr-rgx=[a-z_][a-z0-9_]{2,30}$ # Regular expression which should only match correct argument names argument-rgx=[a-z_][a-z0-9_]{2,30}$ # Regular expression which should only match correct variable names variable-rgx=[a-z_][a-z0-9_]{2,30}$ # Regular expression which should only match correct list comprehension / # generator expression variable names inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ # Good variable names which should always be accepted, separated by a comma good-names=i,j,k,ex,Run,_ # Bad variable names which should always be refused, separated by a comma bad-names=foo,bar,baz,toto,tutu,tata # List of builtins function names that should not be used, separated by a comma bad-functions=map,filter,apply,input # try to find bugs in the code using type inference # [TYPECHECK] # Tells wether missing members accessed in mixin class should be ignored. A # mixin class is detected if its name ends with "mixin" (case insensitive). ignore-mixin-members=yes # List of classes names for which member attributes should not be checked # (useful for classes with attributes dynamicaly set). ignored-classes=SQLObject # When zope mode is activated, add a predefined set of Zope acquired attributes # to generated-members. zope=no # List of members which are set dynamically and missed by pylint inference # system, and so shouldn't trigger E0201 when accessed. generated-members=REQUEST,acl_users,aq_parent # checks for # * unused variables / imports # * undefined variables # * redefinition of variable from builtins or from an outer scope # * use of variable before assigment # [VARIABLES] # Tells wether we should check for unused import in __init__ files. init-import=no # A regular expression matching names used for dummy variables (i.e. not used). dummy-variables-rgx=_|dummy # List of additional names supposed to be defined in builtins. Remember that # you should avoid to define new builtins when possible. additional-builtins= # checks for : # * methods without self as first argument # * overridden methods signature # * access only to existant members via self # * attributes not defined in the __init__ method # * supported interfaces implementation # * unreachable code # [CLASSES] # List of interface methods to ignore, separated by a comma. This is used for # instance to not check methods defines in Zope's Interface base class. ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by # List of method names used to declare (i.e. assign) instance attributes. defining-attr-methods=__init__,__new__,setUp # checks for sign of poor/misdesign: # * number of methods, attributes, local variables... # * size, complexity of functions, methods # [DESIGN] # Maximum number of arguments for function / method max-args=5 # Maximum number of locals for function / method body max-locals=15 # Maximum number of return / yield for function / method body max-returns=6 # Maximum number of branch for function / method body max-branchs=12 # Maximum number of statements in function / method body max-statements=50 # Maximum number of parents for a class (see R0901). max-parents=7 # Maximum number of attributes for a class (see R0902). max-attributes=7 # Minimum number of public methods for a class (see R0903). min-public-methods=2 # Maximum number of public methods for a class (see R0904). max-public-methods=20 # checks for # * external modules dependencies # * relative / wildcard imports # * cyclic imports # * uses of deprecated modules # [IMPORTS] # Deprecated modules which should not be used, separated by a comma deprecated-modules=regsub,string,TERMIOS,Bastion,rexec # Create a graph of every (i.e. internal and external) dependencies in the # given file (report R0402 must not be disabled) import-graph= # Create a graph of external dependencies in the given file (report R0402 must # not be disabled) ext-import-graph= # Create a graph of internal dependencies in the given file (report R0402 must # not be disabled) int-import-graph= # checks for : # * unauthorized constructions # * strict indentation # * line length # * use of <> instead of != # [FORMAT] # Maximum number of characters on a single line. max-line-length=80 # Maximum number of lines in a module max-module-lines=1000 # String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 # tab). indent-string=' ' # checks for: # * warning notes in the code like FIXME, XXX # * PEP 263: source code with non ascii character but no encoding declaration # [MISCELLANEOUS] # List of note tags to take in consideration, separated by a comma. notes=FIXME,XXX,TODO # checks for similarities and duplicated code. This computation may be # memory / CPU intensive, so you should disable it if you experiments some # problems. # [SIMILARITIES] # Minimum lines number of a similarity. min-similarity-lines=4 # Ignore comments when computing similarities. ignore-comments=yes # Ignore docstrings when computing similarities. ignore-docstrings=yes pyevolve-0.6~rc1+svn398+dfsg/run_pylint.bat000066400000000000000000000000761153663664300207340ustar00rootroot00000000000000@echo off pylint --rcfile=pylintrc.conf pyevolve >errors.htmlpyevolve-0.6~rc1+svn398+dfsg/setup.py000066400000000000000000000011661153663664300175540ustar00rootroot00000000000000from setuptools import setup, find_packages from pyevolve import __version__, __author__ setup( name = "Pyevolve", version = __version__, packages = ["pyevolve"], scripts = ['pyevolve_graph.py'], package_data = { 'pyevolve': ['*.txt'] }, author = __author__, author_email = "christian.perone@gmail.com", description = "A complete, free and open-source evolutionary framework written in Python", license = "PSF", keywords = "genetic algorithm genetic programming algorithms framework library python ai evolutionary framework", url = "http://pyevolve.sourceforge.net/" )