pyspread-1.99.0.1/0000755000175000017500000000000013604465726013431 5ustar andreasandreaspyspread-1.99.0.1/AUTHORS0000644000175000017500000000012713557333324014474 0ustar andreasandreasPyspread authors ================ Martin Manns Jason Sexauer Vova Kolobok Pete Morgan pyspread-1.99.0.1/MANIFEST.in0000644000175000017500000000035313604463054015160 0ustar andreasandreasinclude AUTHORS changelog LICENSE MANIFEST.in README.md THANKS include *.py *.pth *.bat *.desktop recursive-include share *.py *.svg *.ico *.html *.png *.css COPYING LICENSE recursive-include src *.pysu *.py recursive-exclude src *.pycpyspread-1.99.0.1/README.md0000644000175000017500000000157013557333324014706 0ustar andreasandreaspyspread ==================== **pyspread** is a non-traditional spreadsheet that is based on and written in the programming language Python. It is released under the [GPL v3. LICENSE](LICENSE) - Homepage: https://pyspread.gitlab.io/ - Repository: https://gitlab.com/pyspread/pyspread - API Docs: https://pyspread.gitlab.io/pyspread/ ## Install Fork the git repo at `https://gitlab.com/pyspread/pyspread.git` In order to start pyspread without installation run ``` $ ./pyspread.sh ``` inside the top directory. Commit your changes, push them into your fork and send a pull request. This page gives an overview how to do this: - https://help.github.com/articles/fork-a-repo You can find more more details about code organization at - https://pyspread.gitlab.io/pyspread/ ## Issues Please submit issues in the gitlab issue tracker at - https://gitlab.com/pyspread/pyspread/issuespyspread-1.99.0.1/share/0000755000175000017500000000000013604465725014532 5ustar andreasandreaspyspread-1.99.0.1/share/doc/0000755000175000017500000000000013604465725015277 5ustar andreasandreaspyspread-1.99.0.1/share/doc/static/0000755000175000017500000000000013604465725016566 5ustar andreasandreaspyspread-1.99.0.1/share/doc/static/css/0000755000175000017500000000000013604465725017356 5ustar andreasandreaspyspread-1.99.0.1/share/doc/static/css/bootstrap.min.css0000644000175000017500000042321013570762512022665 0ustar andreasandreas/*! * Bootstrap v4.1.3 (https://getbootstrap.com/) * Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2018 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} /*# sourceMappingURL=bootstrap.min.css.map */pyspread-1.99.0.1/share/doc/static/css/pyspread.2019.css0000644000175000017500000000645413570762711022317 0ustar andreasandreas.pyspread { color: #008500; font-family: sans-serif; font-style: oblique; } .container { max-width: 1000px; } #mainNav { padding: 0; border-bottom: 1px dotted #000000; } #mainNav .navbar-brand { width: 200px; color: #008500; text-shadow: 1px 1px 1px #cccccc; font-size: 18pt; font-family: Courier, Verdana, sans-serif; height: 50px; margin-left: 20px; } #mainNav .navbar-toggler { color: #008500 !important; } #mainNav a.nav-link { margin-top: 0; border-radius: 5px; color: #444444; } #mainNav a:hover { color: #008500; background-color: #fefefe; } .x-slide-img { height: 200px; } .homepage_slides { background-color: #444444; border-radius: 10px; } .homepage_slides .carousel-item > img { margin: 0 auto; } .main { min-height: 700px; margin-top: 30px; font-size: 1em; } .main .ximg-right { float: right; margin: 0 0 20px 40px; } .main p, .main ul { margin-left: 50px; margin-top: 10px; max-width: 800px; } .main ul ul { margin-left: 0; } .main h1 { font-size: 2.1em; color: #eeeeee; background: rgba(103, 230, 103, 0.2); color: #008500; border-radius: 5px; padding: 5px 10px; box-shadow: 1px 1px 1px #eeeeee; margin-bottom: 20px; } .main h1.manual { background: rgba(230, 103, 175, 0.2); color: #992667; } .main h2 { font-size: 1.5em; color: #333333; background-color: rgba(255, 178, 115, 0.2); border-bottom: 1px solid #eeeeee; border-radius: 5px; padding: 5px 10px; margin-top: 20px; margin-bottom: 10px; } .main h2.manual { background: rgba(230, 103, 175, 0.2); color: #992667; } .main h3 { font-size: 1.3em; color: #333333; background-color: rgba(221, 221, 221, 0.2); border-bottom: 1px solid #eeeeee; border-radius: 5px; padding: 5px 10px; margin-top: 20px; margin-bottom: 10px; } .main h4 { font-size: 1.0em; color: #1E51BD; background-color: rgba(221, 221, 221, 0.5); border-bottom: 1px solid #eeeeee; border-radius: 5px; padding: 5px 10px; margin-top: 20px; margin-bottom: 10px; margin-left: 20px; font-family: monospace; border-left: 8px solid #1E51BD; } .main h5 { font-size: 1.0em; color: #1E51BD; background-color: rgba(221, 221, 221, 0.5); border-bottom: 1px solid #eeeeee; border-radius: 5px; padding: 5px 10px; margin-top: 20px; margin-bottom: 10px; margin-left: 30px; font-family: monospace; border-left: 8px solid #1E51BD; } .main pre { margin: 0; } .main div.highlight { margin-left: 50px; } .main div.highlight pre { margin: 0; background-color: #eeeeee; border-radius: 5px; padding: 8px; font-family: monospace; } .main code.highlighter-rouge { background-color: #eeeeee; padding-left: 3px; padding-right: 3px; } .main strong[data-value="pyspread"] { color: red; } .main strong code { color: #1E51BD; font-style: oblique; font-weight: normal; background-color: #E9F0FF !important; font-family: sans-serif; padding-left: 4px; padding-right: 4px; } footer { margin-top: 40px; padding: 10px; border-top: 1px dotted #000000; } footer p { text-align: center; } /*# sourceMappingURL=pyspread.2019.css.map */ pyspread-1.99.0.1/share/doc/static/css/code_highlight.css0000644000175000017500000000552713570750134023033 0ustar andreasandreas.highlight table td { padding: 5px; } .highlight table pre { margin: 0; } .highlight .cm { color: #999988; font-style: italic; } .highlight .cp { color: #999999; font-weight: bold; } .highlight .c1 { color: #999988; font-style: italic; } .highlight .cs { color: #999999; font-weight: bold; font-style: italic; } .highlight .c, .highlight .cd { color: #999988; font-style: italic; } .highlight .err { color: #a61717; background-color: #e3d2d2; } .highlight .gd { color: #000000; background-color: #ffdddd; } .highlight .ge { color: #000000; font-style: italic; } .highlight .gr { color: #aa0000; } .highlight .gh { color: #999999; } .highlight .gi { color: #000000; background-color: #ddffdd; } .highlight .go { color: #888888; } .highlight .gp { color: #555555; } .highlight .gs { font-weight: bold; } .highlight .gu { color: #aaaaaa; } .highlight .gt { color: #aa0000; } .highlight .kc { color: #000000; font-weight: bold; } .highlight .kd { color: #000000; font-weight: bold; } .highlight .kn { color: #000000; font-weight: bold; } .highlight .kp { color: #000000; font-weight: bold; } .highlight .kr { color: #000000; font-weight: bold; } .highlight .kt { color: #445588; font-weight: bold; } .highlight .k, .highlight .kv { color: #000000; font-weight: bold; } .highlight .mf { color: #009999; } .highlight .mh { color: #009999; } .highlight .il { color: #009999; } .highlight .mi { color: #009999; } .highlight .mo { color: #009999; } .highlight .m, .highlight .mb, .highlight .mx { color: #009999; } .highlight .sb { color: #d14; } .highlight .sc { color: #d14; } .highlight .sd { color: #d14; } .highlight .s2 { color: #d14; } .highlight .se { color: #d14; } .highlight .sh { color: #d14; } .highlight .si { color: #d14; } .highlight .sx { color: #d14; } .highlight .sr { color: #009926; } .highlight .s1 { color: #d14; } .highlight .ss { color: #990073; } .highlight .s { color: #d14; } .highlight .na { color: #008080; } .highlight .bp { color: #999999; } .highlight .nb { color: #0086B3; } .highlight .nc { color: #445588; font-weight: bold; } .highlight .no { color: #008080; } .highlight .nd { color: #3c5d5d; font-weight: bold; } .highlight .ni { color: #800080; } .highlight .ne { color: #990000; font-weight: bold; } .highlight .nf { color: #990000; font-weight: bold; } .highlight .nl { color: #990000; font-weight: bold; } .highlight .nn { color: #555555; } .highlight .nt { color: #000080; } .highlight .vc { color: #008080; } .highlight .vg { color: #008080; } .highlight .vi { color: #008080; } .highlight .nv { color: #008080; } .highlight .ow { color: #000000; font-weight: bold; } .highlight .o { color: #000000; font-weight: bold; } .highlight .w { color: #bbbbbb; } .highlight { background-color: #f8f8f8; } pyspread-1.99.0.1/share/doc/images/0000755000175000017500000000000013604465725016544 5ustar andreasandreaspyspread-1.99.0.1/share/doc/images/screenshot_find_dialog.png0000644000175000017500000001602213604425560023740 0ustar andreasandreas‰PNG  IHDRJƒdÛÅš pHYsÄÄ•+ÄIDATxœíw\×ÇÏì.,t]zG°ÐE¬1‰ `‰]1jTÅK,ÑäåYž-‰ÑØk‚5–ØK4 ¶—èS±Š(½ˆ ´Ý¹ï™-À,.º‡óýðÑ=wn9S~sïÜ)‡JOO:o; Â/v.Iu³\|F×·3‚茄Kû@ mËó‹( (ÐÎ|‹"h¢ÙxÌzhZhâìâ3:áÒ>“,Ëe´MTÿJ S›‡ô ¥[BâbÕöûƒ~u;'ë5<Ê(!†Ò&ú‘½e{# 33/¦”‘ŒËÉÎíÜEŠC¨a¬ ÍJÛ*f Q¨ BfùLÞpQSmÖ¦ÆúBæë Çú» …Ô…[‰\ìÆú»Š„ìÁa /²2i’‘[D©)ºÒc-*g‚×_ í ¡³|ƒ×_Ý“Uûú‹ g™ÿ3|hÖžÉî:öì7ÇË€ÝSBÅQ£ìÉIyQ BÉÙ 0Bê‰HIÙ+š _˳ßÙ2 `ùiVHQÏ2›Õ¶RY!³|ƒ×_ä¬-=§°¤Ln / Êdò_Oß»—œåîhq#þ2ñÓ6b=!))“§çP PoO98g:ZíP¡'­»À,Uj{Òº ÀLΨeC³NLv·WYÊPuÆLaòúU™ €2Ð3¢!”‘ˆâ® M]š•R”é¡ mOZI¯T¨Ì—³6šÐÏs ™ù{D½ä,'ëf_ õú¸­ã½ä¬_ÿ¼Çìóg9/ ;œW æ*L­1ƒ5ö'Љë"Ãæôb½YI˜GÖ ¡Ý<šuaRо”j ¡ê¦Ù46ú}äuJæíWæÍ,{اŸ,2ûĉ™_#Dq$Õÿ òÑd¥L! eM\IåÝiB«,`¦ÑªÖÔ_QIÓ{½|Uÿ¬CkÛq½]õE‚±þ®¯KÊï%g2»ùlT"{˜(`åM¢JVÜRgÆþ×E„Íñ›¸6¢R:šuiªÔ ¤ÂRåA¢¸ä¢ˆêP !¤8sïéôý}‡~äO©ê©\UCZ_˜Š½Å¦T_ªºÚnÄ?÷mïàboºbr¦†úLmúBÁ´!íŠ^—OsnÄ?g¦ÍÕŽ ºŽYââ3ºðÙ] L¥@(B1µ¨›DC:šh¢YÉd¥H¡ª-U²IŠ„0¥‡N®6 Ô¡ D'¤oÿ3FV¦<Åhb×VõB(({oÂú¢ø LU¨.šh6z³’XˆBå5VJFÈÖ7ÛÜy:¢‡›•©±ž°¤\ž‘WtàÒý{ɹ”² T辕òfþQTF”¿+˜p§£‰&š•L¨(–êKU«,6…&äNbÖݤ,hÐM¶/Wd%Pqp^ù}o ˆZ u“uDÝTäPÍס‰&š**I†Ë¬¾6•ÖÙ¹mа£we¿ÏÝtŇR™å´ò ðF“Ô¼šh6³~›¨ôƘB®„ónÉÍ·(‚&šÄ¬GuT”7›B0·X˜;§o6ߢšh6³~›¥¼w}Óá ³eT|} A>òFÞ‚òFÞ‚òFÞ‚òFÞ‚òFÞ‚òFÞ‚òFÞ‚òFÞ‚òFÞ"zs–ÆÄ¦ó÷âÒ^ÜLήoG¼››{ØJ§ûyp.Ýq?>£ êIf{U—tjaéa#ÚÓMËü(o›Îß+%Ô¢AíËdr9!o.€Ô!±žhÏ”Í÷gTQø¦ˆû%rŸÖ·^|«K¼º%òÁô^îÚdFy«ˆK{±f¼¯X$416¨o_òŠJfô‘Î ¿XuQBzÁΩ}è7ÆÆ{ÿYÐ-hÛ_ZfFy«¸™œ]&“[73ªoGnLŒ Rr^r^:E%f’F3àŠJÔöå]&¸EQçXy¿kîŸ @cØkÊøÞÚ€òFx!¤1È»F4Ècò‡k}íÆüQô†l%q;'uoiejñɪò:q iÀЄ4´?YêÖ>f}w¤Ñº­VûmòþöÞ$ïäËü÷?üoç¦ ò$…Ô-µÞ{ÓI›ü;_wx‚™–ãcEì¨zUÔ@Å ‡ŽüØÝÁʪ¹ç'#¾ »–QV{~½yâýa»îíQÛh]ýÉsÇ4kbøòÏlHx6qš~>ûP Y"D§ŽÑ@èl­{ï’kËGÏŒüpíïQƒÜŒ^&FÙµí×kÞ zè¿ÅŽÐ ¤äu‰žX¯¾šG5¸V!„Ó#¢úPí#5½ïF+:ïúºa§m×G§ÇÜLwòe@{KC±±•›oÐÊßXm“‚[;ç êÔÊÆÒºeçaó<.€‚ý£­¤R©‰‰¹K·‘Ëþz.æºÚvÐüu_ú{:ZÙŒßóϯ³wnmcíäÕÿë½^)7)¼6£§£••cûA ϤU¼¸.Ø?Ú~`HjúΡ–Rón?Ü–ÈÒ#Wöp··²rhÓsâº+YòªÍ ŸÜӺ˲[²wßnHƒƒ°ÃsÝÀNÄ«#OÜâožMBdñk>6ôïu3ü\ͤŽmú.8ýLF!¤,åÄÂAmÌMš{øÍÞsÿµN½Rx¦-ÚÊ[`íÝÉ6éðÚ_ÎÄ$畨è§{&\—Ýoã¥G©O.­ô¾õ¯ÀUÑ¥ µ/#???/÷ÙÝ£ó¬Î̘µç¹¢XùÕ“±WF$<»ês4pÕÓVœKº}|‘ç­“WKõ–ÿï̽n?_HHypl¢pß×+/•¨»#µ/õäd;ë £™ùÙ×´Én›´÷ÞJNŽúuXáöÀà°DyÅæÒRòÀ‘mþÍñøgwþüÎâ¡XÓ{×ÏÔšÖ‡»A×EGvOhöߟ'õòplÞ¶WàÒÃñ¯äïüÇmÖª)Ýlô í|ç~3àʼnãwÊU)±©ûÐï‚Ý£Ï_-d“D^“ÿ3¾ƒ…ÞãC»®µüjÍÜ^΃¦]'¬þ—¿òq1½ÎSö43›´3Ì«0îAZuײø£ï¶™þ}—™e—©ßOvŠ>p"I®Þœ@ØjvDúõÿx½¿ó‰ˆftÜG‚üéVk‰±™Äج™Õ”S%ì4(3èuš²dd[S}}©ç˜€ö/Ä¥ÉËã~ÐyæòÏÝ›‰ í|¿^ô¹-¥ãa©¥™s±C¯k{Í¿J:¸lÆôáy’ë?‹RÓJ®Ìó0§ÌG5ù,‡(Ž?°táÆQO² Ëä„€~·¾4HÖB€²Œ´L±S ÎS %‘J˜”žXäryukEgef‹š[²U íì!;3›'Us¿!4èì¡TBh"°Ÿú×µº)¯½iš@MŠ&¨¦Í$@„úz +/§å™™¹Æö¶Öµ£0ŽÐ„®É|XõPPƒÇZÞf°*4²ï:î«aιÑQÉÄÒÚÒÈó£¼|%yO·÷ÓÉ»¾ž÷OËEÇ£Ósòrï­úHD«¯#B+«Ò¤'ÕvËÚ®†……YijJ[•<5)Ì-Í”kWƒ-‚¼§è¾‡äLU7ªä3 Ó¢§©ù4“({–’&×­_ж´C멵ÔÝ3—ì¹|ÿÙ‹ÒòWi7÷o=š(ñlï vÔ9võ¼ÿ¤¼,+ÉO‰9±:xñé" eÅ%´ž‘‘±ž<çÖÞeÛoT϶ØõѦ¹k/$½,)L½>oUD GÛZ ràqgË¢ðÛ¹¥%YQÛ…$zè\©Ï–?Zï‡Sk|E·×·„«Nª i@ ò"AëÁƒ\¢¶,Ù—_úêÙåu?î{N¿×Þ»¡3ÇšE¯›ØÓÝަŇÛsz¬Ø·¢oS4ÿëÁÙæçæõvwpî4ì_ÇåÃ}AØjÂò¯-Ïup°wõÿîn~9na œ‚B̵½øŸ‹S»ÁËo{ è*ÖÞõ ˆ\§ï - éiïÐaü!Ãà]¡Á-pDÞ˜Ð}I*_5ƒªû†Ê=9c ]§ìØì—¶r°»}û?¤2ÔS¯6<Óªë˜%.>£×XÔÎ6Ÿè²ôè™s¶à+% –Ĭ‚~+Ž\_<´Rz—¥G/-&×á5nCE(ø|ϱ*1ûPVÂ¥}8‰ŒðBHcxß[@ÕÎÌ9‚4dj:p­†æÖfU“ÓstRù;R£uDy#PXXØ£GÆð̹——×åË—µÌŒòFø@nnncÐ6ƒö ÚÊ;!!¡¨èM1ýŒ]\\´¬AtHã‘·öh+¢Ž;¾1[ttô»ùSCä×úõ¼9-~ïã:mAÞj08—H$µç‚¼;¡§¨ZþÎyÍ ¹{FXIMì~ËP¾‰+»»¢»¹Ô´ÅŒóÕ•?Þào7jß þï1Dèú{¤ í·IÝ<Ö"°qs¸»{ÿ6èWÉÕðƒe.®ðôµ\¤^Ðtèœ]ƒšŠ L†©”Ç.ó6`=ùL©nyG´ß&u#oªi¯ C öíŽ)’6üOë1cÛ*bsÆ-=ùE¥Ñ¯þšæd"•ZöÝ’LyÍN´úX¢ÀYPCS’wmãÄžm­lZvì;eóµfÄ¡! *ÂK„¶Ž·Ãö[“òòó3ÏNoÉ»&ä 'Z},Qš³ wSÙýß®Iëz=))æÈòéç®d“j¢ " ÝuŽ”Äoâð‚½;£J!tÞŸ¡'mUñÊŸŸûadgs‰Ä¢å‡cV]ÌBˆ,ne7Ó>óVMü¤µ¥ÄdTø?!Óû´µ3i*µõì?ï‡Å:s¯áõÞ l5z¬Kdø©ôøý»ûO`VµeŽX¢*ä5…}C,QÍ9¥ô Ä"ñƆbqS‡NŸÿ°x˜%¥ET¤ CùƒÎ>7>ù’ÈŸ ûÇ;hds!Û†,nÓ˜±» èàýô´Øð…[Gßñ˜ í e鲿JRöÍÞGFýœÕëÕ䬧W×tŠ™3êÇ%ºóOkêî•ÕÐñÝùvùÞ×Ã?1R[RເîîŽVf&&¦îó®ççTùž\c8Ñ7ÄÕP»Qaë/ÙÐ=aq€_¯~#¦}¿?6ŸÈÓØ(¨Rëá»2²²røüɾ÷]ЇZïz>ìÄó{w=ê=q ÅF ,pxß¶_­˜äe*6°ì:}Åç¨ß=‘zÞ_. ê`.z|0ôo÷9k¦~hk¤gh×ó›ï½8zøV™.=ÔŽ:|cŒ’øO˜{æ¢Ù˜1^úªdͱD)JíVÇ[‡å,¨¹Qƒ–¾ÝzøÜ…ó¬ðIý)àë£ùD¨! êÛo ¤Á#°ôqì/s—ì~ä£zª‚ÎÊÈÖwp²R…šv€ì 64­ÀÂÚR O{šV|yNë&F ¦ƒÂÒ3ë¥?¨ÓB ºÿ›“qî«–ê±ý4Æ43•R)qñ…4À;„å,¨©Ñ²K+&-;x=1¯DF¥E¯ÊA¨! *Ò ÐUߨˆåÛ´÷ÄA¹§#ÍÇzé)S eniVö49ƒV—=M| æ–æ!„„…µ¥QŸmÉ…EJ ÓC?Õ×¥ƒÚQÿï{kŒ%J™ô›1Õúôç­ÍM,ûnI†· 'ʇTS£úÝÆmviégìݬÉé¿aÅ JST¤A¡;ñ°AÅÝWÝ}‘1³…€¨…uò™ÇíMówÞÊ))μ¾yÁŽ'ÞŸ rb³05\FNê³rö¶ÿ&”ç%G[´àd¡®¬…¡7oÞìի׫‹ŒŒôööÖ¾yÑ ýúõ£ß=†ÉÝà±Ù믶S¢³ôì”ÖS…! [{ëCù³s?»t×…ø\ÊÜÝâ²Us}­„ OXíëssÆ£}Ÿ)ˆ _¾dÛñë‰/ lÛøŒüzá¬þ- ßÕ9@pæÌ??¿ê³Õ,BhÓ¦M###µÉ¦e…Ò¡LÇÎW%YÜw{Jû[Ï®÷üß{ϯ”Cè2ïJºªIû «MX]{Žj…¶ònÕªU­úQ{H¥A-òóóëÞ¤V©éÀõ=¥FëÈÿ÷½QÉÈ»Y³fÕgxñâÅ;6ñŽ ¼ä-©wõê”7Âpp^”7¤R)MÓEé`ò¼#hšæœNâåð‰DòàÁ77·}íགྷ¦é¸¸8í?¬‚òFø@Ë–-=zÃï™T©T*‘HZ¶l©e~”7ÂÞß{·µGý?”Š H-òFÞ‚òFÞ‚òFÞ‚òFÞ‚òFÞ‚òFÞ‚!„·¼!éç!ƒ»œ}4Ȫ֟7¬»¶èä-Ÿ~tqLìãÌøü%R¯`Aá-usíMçÞümÁX?¯–¶––6­:ö ^qüá+þ¿»§-,©ê@Þ$çü7ý¯Jðøjç帧ÏoZÞ_ÿì¾ /k¿iiÔÔ¾¼Ënnš¿W0)l÷¿··m*Ö36ï8tî¶Å% K\ØÃÝÞÊÊ¡Mωë®d±QÛÊŸž^4ÔÛÉʪy»~s~+VT¦E(? ±å×úÚZ¸±j°AMm©`ÊÎ_÷¥¿§£•Íø#ÅÜnp†,¿¾ ƒÛœ‹l c:e[?»€ß²Õûé*ÁåÜa ¤¦Ôº¼å/\Lu0¬ÃËn›´÷ÞJNŽúuXáöÀà°D9€*Kä®AjNÜ£Ìz¯>stžsìÚqÝ[ÙÚ8u¾ø¼hX`/ ˆ\§ï - éiïÐaü!Ãà]¡Á-„"·é¡›û¤­ìëêàÚïÇôC½˜k-Bùi H¨ MmUƒ7¸ÃR¦C–®êùt™³½{ÿ“:õó¬ZÅ`‰i]¸êAšƒ!„‡`Aá9ü!øîTúj<¿?µ‹ð üò›A=#ï)ø9á-(oá-(oá-(oá-(oá-(oá-(oá-(oá-(oá-(oá-(oá-(oá-(oá-(oá-ì ¡³eÕ¯‚è$\ÚWßn ¢{þGT¼)ˆƒ©eIEND®B`‚pyspread-1.99.0.1/share/doc/images/screenshot_csv_import.png0000644000175000017500000006412413604421377023676 0ustar andreasandreas‰PNG  IHDRk·d:…z pHYsÄÄ•+ IDATxœìÝg@SWðs6ÈLÙ ‚[¶u 8÷Þ»j­«í[µ®ZW‹­Ö]G­{ïªXµ.PTUD6Ê C6$¹çý¶I€„Àÿ÷¡å¹œ{ÏãI.Oî:aÞ½{7ô›=*í̦Œû˜„ç €jxsë!D•OqjDѯB)aHåBVAˆ!B„U5ä;8wõæÖ5ÉbQФ|Ò’ÿR¦aeÚ Dˆ!B„õ'¥D¨™8É1(!„Rɯ C «¬¤©ü°2m"Dˆ!ÂzJ¨ý@ !”RTk KêG!e !„aŠV£D²B„"D¨ÄBI™"U:¬p]–B ‡!,aÂS–¡†)_ K+>-ÞhqÛRQI(k9B„"D¨ÄP~› ×eBZØû~ÑÔÜHWS›/'¤eŸºú*:)Û²ø§¢ *9J¥„JÎø2’Ÿ )2Túr„V&äšLÚ¢'ãÄ¡gþu&+„ëA(9J¬zñ"„0„p¸ÌÔ¾­Û;™1E§X5Õ¹¶¦ú_ûº=y›´ûïg"-¬º%´ø,.¥…ÿ):Ï»cNW"ÃŒ-ÿ7+>dEˆ°…Œ¾Eã~®æ­Íµ Õ™‚¼üääÄ“WcB ˆš!`›Ž:újT(ed|¸z5äNº¦Ç ö#,™÷Ÿüø0›¥„Ê1³ÿaˆµ©8õàŸ/ïå–û˜L)-<…T7þ½ª~(¿Ma•“ÒŒB(ùz°[3kcò†aÜœÌt´Ü6|H(§°uNáÿYJØÂ͆ò5£Ö·á97ûnc7^þí+î Xs!<0‹£K(åèõë׬—5{ÿBà¼íVž}û¯€jr)¡yOß|ÆÂ‘oÅH6Eìy|É‹Mz–Sª#QòžÿÎø=Ø?£vÿD«Ï°.;ç|6ÑŽSgÆ!Âj å·‘³.¥íÍ%åsÖ¯þ¿Ÿ{.±„»ÿjÈÔMBšÛ˜´w2#E›*.‘eÎâJ)aa !Ó»E‘) ›r„ëIH´øƒ¾à1ÂGwB®Å )!¹I)þÿ!Œ¾~3#†ˆòbyb"HL¾z=Y²¤‡'¾þ¨­!ÏÈ®aû&Z*|ù&%‹JJ)%„pùS§·ìÈùpü`°6oÆÌ–n\"AY6'+G Tãhj3¢ÄèØ?¯Å†°„Ë›:½UGõÂf¬¨à]XÔŸ7ãb„ !¬º!ßûs›NÖº\6=9õN`øÕè|q¹U2„¦Ÿ™0„¨uöù¢3¡‘÷‚Ö?ÎfëÒ°#DøÉ¡”…»æuŸþÛ­âb)u]JØ^®¶’&mìMŸE$îºH§y·Ú}ñ勨Įm ÕÛÍþQH¥’Jþ++¬d3„U/ä66i©M¨øÃóè¶Üo…â\JMþÄ‘í¦t±ùÂAß[ø[6Gð0FD9Ú®Mõ8„¨5æ·kÄÐÜÔÀ(![¶£Â=NB ^¼÷Õ£<Ž®¾žY^Ü/{ç˜;Ø n¡I)^#ùÕßí|°-DlÕ¬éŒÎ†ê”MãƒZôµã<½¸è¯·ouù½Ûø˜sŠWIyózùŽÛ3ö½ÞwèÑ©JˆèÁ…§ýz{mP¶XÙãŒaÍ„% wÍëNÙ5¯{©6Rš1”±àéIö™)ý[vnnõ<*qç…Ï£;7·ÙÃIò+K“F´pÏ•¬MH©§YJ•dJBvÏë.Y8õ×› !”Ò=_yH–Lûõ&-jFiá%\„ëG¨©­®A ³DåËæ$ýláèÖHÛÀ°“‹a'"ÊJ=}áåµ$1C„Ïߤd71ã5áÛßÏÒtâ1ôCD«JIÙŽŠv¶ÂˆÍyú:=-K;6ƒvÔ¡oâcs…êÉBj¥iÔHƒ¡¹…«°¹A/’“óhêËä¤6fN¦Mî¦EÙYtÒgØ„„¢ó2iâÍ·v]u¾hap!I²JNÀ“ĸ|I¿…{|Ñß å3B„Õ’² w,BÈOûõ¦¬u›èiip%÷iªsÇöjÆå2ÿ<èàl5¶W35.#Ùˆ–†š¹q£„”,†”(s JJj4ºù¦äW{¾ò(]>§n¾I)-nF$«"¬/a^ް€¢®®Ëýø·¢7w/=úòè£øIBBÔôŒ´7Ѧ”Rš•ø,—rôù¬:8h04ÿÉ›´‚;’ìè’)!T˜•K ¥b–B²s…,¥´øFɺ„*ÌÌ¡„R6· ›FCCŸCéj¨Bs ²XJ(ÍÊRÂèèjj­’•[®_RwÆ!Âê K/Ü]R°þ)*¢²Ödæˆ%Ëò…â]ž?ø/¶…­éÃw».<Ï+KÖÈ+Å >HÖ¥”–« „RBKŠ6K;ů°ï=ó{H~˜â÷OáØRÍ"¬O¡ð½à¿\Êpõ[[«3R³’®ß{µùЃM³YBÔ4¸j’ß Sà (£Ù¾›£‹6Ã~H |ÏJëH¢ä&* KJ&)©v¤(dÔiJ(ÑT×e-(ÈÑŒ¬|!Œ¶º.!„]mu†Ðœì¼Ür[þ¸ß:0ÎVoX¼pÏüÂò9eó JÉÔÍ7$ážùR×e)û^)Ùcû¿y•dߨp®¯K—Ö¶/£’þ¸üR²'½dÐÂòKŠwÒ2wQZêGJJ'ûÝØûuÏÂl~¹A"YÎ #DXßÂܤ“wÌ=ùº5Ê}s;^¤clàÚÆ0õ^øSÆ||ƒ÷/â_Äg§ˆ4xº\BØwïÒ3 ÷Iñ›¤ÔVÖ&†Ú„ÐøÐÄÑG‘Â=¯Ô]<„ZúæwZ8‰Ja‹Â½•£Ý¾ ïæíV­MM9TšðVL "ßfðºðÍ{Ø$œû`èÑT‹gß}™&¢&¥·ÌPÊaN>¥„cØHƒCóÄuaœ"¬Ö¯É~7ZüÔ&¥´°xÉ]C¯K˜«"gtÉÈ.xòÎÕÉr\ïfjœ±½šåä _F%Jö¥¿EÊ¡’ Hae ‹§$(|ÔTr’x²ŸÿÞ¯='ÿâ_n9B„õ4¤É/Ÿ¯ù`íݾ±§Oç¡D˜ŸŸ”TD)“—ÊZvëÞv¶š—äfe? =”Å’Âu…ñ A¬ú2„Ízø&C,YZ®£âýš¡%{-ùE©P’Na+~ËÖZVTð.$tÿ½Ô|JHžàÈ©—Ù]íܽ?ëÁeÓIço¼½'¦E·7H6EBhþÓ'±îF–Î=>ßí!¼sæÎ¾hVÙãŒau†òÛÈ[—‡!ï=ÚÙ8[›ü4­›¾Ž†dk\ÎìAm³r %¯bCÞKnÄ-Ú% !„q³Â¹û¨Ìw/! eˆd£„2”‘l¥tHe,GˆaM…\þÌÙm;qÒì{|-ƒÖ•¬"¬c!#·œâ%©zj\2Ã˵C3 CJc) z¿óòQAÑÌ€„BYµ.ùv3R| J s)ú™” KÚyÍ"DX]!§è/e KêJVÖ±RémˆìâE¡ŒˆÒmç·z3¬[ss=-unžPœšuìÖ/£R˜âI™ƒÐâ *ùOÑÆhñÏeB†H_Ž!š !„BëVVÖ¡P~¹Å«p Ké󈤑I,a9”Ã2,C H‹šRRö,nùï%„†ÐRk” )µ!¤Ô¥„VW(JܱùꥧaÝe©Ê­K‹BJ‰dz¦äPUƺågõ“üž-.²†´ê« Dˆ!B„**s´¨"RJ†ÒJ„ ¬‚!B„ªtX¶‚.a‘Üû.y<­âPU"Dˆ!BU‹VÐý‹û¨„ù'“)ûE-PI¨ Š@P*(€"PA  TPE ‚(@¨ Š@P*(€"PA  TPETº‚Ò”¿†™›˜Û¶ò˜°áF¼¸&3«qد½¬FI§7¨NU:åØÌº’”–šñïæ.ï¶Lšóç;¶¦ò¨Û9‹Ëѱõ\<ÛCpëaâÑQæFFFÆÆ| çÎ#V]}/*j$ýÅÃrÀÿüföjckn1á´Œ–…Í6ÏêÕÊÆ¼±cçq¿Fü>µGKks çî_y[P¸=úá龯thjaÖØ±ãàÿË#$ÿÂôn+ƒ²¯Î¶7622ëû{+µÙGÉœŠ{ðÛä­lÍ-Û÷±õ ª¾ÊB Ñy$!---5åÝ‹3‹Ì¯Ìùê¯÷¥ª‘ðþ…àŽëýßÄÅl&»¥0àÚ›n›ÿ}´µó›‡ö];hçƒðˆ{?:Ýùߊ³Jacþš6Â/¹ßo·ÞƆßZïöô›ñ‚ò5}vÝþ¡½nŸm‘©ii‰iG¤6+ŸÌÎ.ù9®÷žÀÈÈ'§Ww‹¿öo2Î@)RAٜؿl¿ÉéÔ½ƒvá"FÓ¤…ï·S[]¿ŸYÒPÍeÚò ®¦Z¥;‘ÒR½ÓŒ¥Ã[kj[öâaJ:NùŸwS} {Ÿ!ŸsÞ¼Œ";µï^ó¯6Ìèl©«¡cå±p±wúùsÏ…å“Û¬$FCKSMS[OGSSߦÃèlÆ(0 Р©U¥1³½Ÿév†£¡g֬묽ëÇYç‡[¹ô·ó“2 Ä”Î}?°Ä °drL›r ×͕ޒB}â5ÔÕ5´ ´$£¦¡&‰!â¸Ø¸¼µ4YTœ ÓhøG'_å6+I†ë4sǯ¿ü0Ô3kâüùé_Žhg„ UR¥ ʱ™u%h­»zQÌFm_°è^›Ýç¶wµ3ÑáÆïØñ[¶¬1E-÷WÔR®Yc3Ý^ËžÃ+[éÄ C¥´¢fe’!DËÑ{É6ï%„Í ;¹pèÐöF €ªø¤çAiAn«®¥««§.<=´jçCÑ'·”ŠëŸmQï6sN YM춨 ª$""‚ÃátïÞ]Ù‰yòäIdd¤½½½²ÊÂîÕ¾Û¢‚ª’¬¬¬nݺQJ•—Û·o+; ¨ì>Pí»-*¨*IIIÁþ_wàd jÁw[TPƒ? ÃîÕ ÷â(´F°ï÷ ´¼?¡F>ðRä¾Ü5Æ¥q#Mö«_ˆÙ”S¯,T½ÍËvÄ_) ¼ Ê~ã€2Uû;gqk½Í§ëíQOŽŽ5©–ïµQè}@SN¯XöºÏé˜G 88• V ý…«!ƒÒ”C#-x¥™¶Xp« f;åØÎ¾}¬šÊ'©ä'hQè¦/L|¦²Eqø‹×œv]\õéÍã®ÿ8ªsS}=s箓~½ŸÂJmeUÓKªDbAàžEûµv°´°jêÚsÜò£/3ûg‰Ã·ô±}4ýS¥º¶#ÃG¯¡(éþ¶9ÞííM 6vê<ô›ƒÁé’wAàw- {o'.n[ðï׎†>û’Y©ë~6ìÛCÏ>°”¦b ù1-“ñgsûè—Yªm3Û?_î»Lôj]g=-þàƒ‰%{%+Ø?ÀÈiѽ‚Ò ¥.„Tï;ª!UPBáÚ̼/(’ôê—îÊN©ÐÜœ< -ÿRšttÞ¸­ïýÁ ©ïlîüfÕÈ%—3k7APšr}‰÷ˆm _,?ý("*ôîŸóš¯0dý£legV[¨àÊW=lŽïöã•W ‚wOŽ/t~ü]o¯ÕY ¬»À)è›Þ^?>Ê6u2=//////í¯Á:¼I2òòòòòrjB¸¶sÿÉÌ+’ý{O¹‚ ‚þ<œ6`lûGûE±Õôï†êÓÐ*¨4âP¿ž6ƒ–o×ßÅÁÂÂÁmÐò¿ãÄ„Bhúã½_ûº7³¶rtóYxøU6%„ˆâÿÙ8Ñ£µ……}[Ï©›ï$IÚaÌååC:8ZZ6qõ^xäu®dié 6²;*ˆ¾°Ì·} K—þ_mXÐKö5Ô2Ÿ¦ î/naÿeÑgXqä–<Ÿ½I¹g'º/}”uyjcm--}u~ƒù½·ÇÄí¥çºâ©°ÜG2QÌëÐ|×áS>3×RÓµõœäÛ,3ôMB½X*ÎK#>n\ÃïËVðxËÒ#܉;÷ÌëÙÔDSCǬÕÀeûîÿûŠ‘b" \Ö¾Uñ6z‡·íðƒYïÿ‚‹3=V=ξ6Ç‘ÏãYxm‹f ý|`Á NÎÖVÎîC—ž Ï/ŸM Ø:Õ³­ƒ¥µsG¯YÛRØòÛùýá¾aM<6¾*ÜÈ8ts/;¯m‘å+IÅ}·,-ÿáÏKr§øsa/'cMu³6ƒWÝÚÿýæoÿ¾À¿âòÖí÷ÎïÛ½a%G­Dê&ªò†ÌügßiýÉßoZ4(îàÁ¥ö]©Û©âÆë % ÂÀ+/Ý×û¿Žzyz÷袷òa£Lµ)öóµW^†=9ó}Ûà‹ò‰8tç”)‡È¸ƒ##v ÎÚ=qú¾H1!â7Û§y™¿àÜˈçç™Þ:,¬tG¢×¿OwÍò›‹¯"_^üÎòîùgÒ×%䣤ÜB(¡öÞ_ÝA¯ß®¸ìœœôK¾:™ø÷Lk‹©Ós2‚–·å–Û·Y?/û—§ö=HÈfEÿsàlLkONõ¾ÅU…±±1¥´Ü~X¼¼œz/ÖqØÍ[ïì½»h•,cŒ=‡ôÐyvónªÌ›ô÷¿†÷Ž›ËÝt{o Kâ.Ͷ%1‡fŒÜ,èûë?!Q¡7Ö¹;qãã²LDÿíùæ—øÞ;?:¹¢küµ“i¹í|ÙÁw|Ï„c‡J*bÁÓÃG#ÜG ±+ûW‹­¸¯b¥_>Qèõ±†¹j•zIz ï¥|ý¶€-|}˿䬫ýäê¿Él©ö„~B e÷ßl3cœs£.3Æiœ8p?·‚íTeãõˆwÛ†VAÅ1;¼_µ(>ÔSï0}ÙÈÖ&šÆmGùºd†„ijâГçlZÐÃÞ@K߯}ü†%žZ¢³Ç_´œµjb;M-³N3VN±{|üB”XrîÔëö_­ÙÒHS׺ûÂïGXIZ)‰B.œ}ÛqÎC›jèXv™ÿ?Yë"­‚–^FÊÜ+QþM#ãí§Ýiáæi¢ßû8ëó›=Î_¼yFK5ÅßͪÎÛÛÛÛÛ[VXZõ½-•€M¤ž©IÙ·—gjLS©²ÎÊzÿ—k&;½ÿ~ó¹ë¦»[êjèXu_°Ð+ýü¹²  MM5 m=M }›£V/÷5ûèfưׄAôì_ÿdB²ÿ=x*½çÓ²Í*ÓW±Ò/Ÿ8%9…ðLMÊÞÀå™Ó”ä1-©—e_ñŠÖMJ—Y¡ÜÄÑ[= tŠõß'ó®q̉?_õ™9€O(ÇyÂŒf×\ÿP>©é5@ÊÚmZ-{4îôDsÉîÈHÆ‚Q×T'"‘ˆŠã’4í,Ê ›œ(д±3/\ȵ¶·&‚Äd–MNLѳ²2,ܹÕ,l,¸RÒ+HLѵ°2(Z·±µŒu«AÖ±&ººººººÆ÷'SB½üÅwØQ›µw¢R>$¿½úµúoÆínЗ\||||||JÿPÿpŒxFD”Rö… ’R‰‘‰‘¬¿ ²Þÿ嚉ãcãóî,icZøQÕrØŸ ÉÉeŸ=á:ÍØî÷Ù›•#z÷ò9gí±giÒþ¶iu;’íàÅ$qÊ•ƒ—¹Þc< ÊÕÙÊô%}ŒùÆ$9QP6yQr¢d.‡!¬¸Ôo)‹ ‡Ë%„pŒx2ÖeLx2GOòï¶s==»HꥩeÝe(~säÏ»owy™êêêêê9L»~aÿùDÕþàV“”²Ûâi™¸ffù7"âXR꬇oÆË¿Èk!DKx®<'ßÌ$ëÑ»tJLBˆ(.6®üçr™8<3“ìÇï?PÂg!¢xyë–ýÅårD¬d‰8=-½ð”CJY––|,-\UwøQÁð2[cßÿ{õßgðÖ&j„˜w˜4Åsý¨«9lt+û¨¼½½œœœœœªýCkÁuôð°ò»túé‚6ŠNäÒTÿSÿäº|Ù…Ç0±\®H(*ü›‘þ"ûýOÃ0%IqM›êz~td´¼›Ðµšx-Þ굘°Yá§¾H#`¯~™íBÔšßzç_Çï|¸v‹?äÌgÚýC*ÕWÑ¿°ÔîÃqìÑÓjãùA‹Ûv*Ú*M½zÜ?×å«n<ÂX˜‘ØÈ!µ’ÜêCÓ#£Òõ,Ì´ ¥œ¦=zXn’¶n»¯ºýJ]-îž×­0×ü‡ŽÒÅÒÿתð¯tÞͯگ;9jŽ=#m;UÚx=Uû»mC;­®ÓqÞn]äw3*#?36ðà’þyjΆ´|±ý‡ƒÏS ò“íüáHסÞö\5g_ç -+O„¤便ã·öØ»JÅ©5óè¸uÕ©7 rãîþúÓq9ë–9Á±oé\pûÈÉÐÌ‚ì¸Û×x#"„Rʘ1Q¯^eŸN*¿f †ß²?öž“/SòE¹ AîóÏplÝL£¢³&õ_Ó¦Må7¨Žw™òh¸ÍY5B¸oÆ´ßn¼MÍæ&½<¿fâÂëVsWN°ç®]K'ácg²„¹ »×ý*"„YïÂ106db^¿Éd !„ëq¼Zصô^ßu`»÷uYÔZÌÙ½¹GÌO}›ÛµôZëÞ¿•º†ºìÕK½Œ}Woêµò ›ÆÎ}×DvèßFrý’õ›óeã #ŒôMzm‰KÞ72ÞPšŸ/?´¡KìŸææ&–íFíÉ´}ßW-ËßoåTí}W1¼>›.izg…¯«½¥M -W\8¹ÈM‡˜ \±Î#fM¦¶­}ÖEµïÛZò†”õþgŒû~9ÓüòØfæ| ¯mÑÄvÜ®cóù×—ôkmçè>ô»óbßñÝõÊt¯ÑyÌÃÛ«Gtnb×ÊÇ/¥¿ßÃøLùí°„Æ¨ÏøZ©9îc†6‘vyƒSq_¥•~ y}7ÿ}rŽÙ­¥Þ--yæŽ_L>o¹úïsKÜ´)¥”±»ëÄÿ¾íídηv½#cÀΓ+>×.\—߯x]+3[·›BÚ­º|ötʼK>®¡â˜ß{7*Æv(MÊ…P6ùÒK´kÖ¥ïHÐþ̳SÌ‘÷r>ÞŽ‘ûÏ…2B‰jÛ{Š0îcV8wµy¨i…MŒŒŒÔÔpâ·fåÝZØiýõ‰”GUoÞ¼Ù¯_?–mÐ)ë‡såÊe'R=ØÄs3{Í ~êÒÒuîô}Öõyî³3Wîlü)3“Èß}Ø„3S=f…Ž<õ‡Žun šTf·‰Diiiæææò75ÿdÒ›[GPë6ñܦL¿ñ=´âü7­9Ãí·¿£¬ùjæ“TU={8f~ÚøO¯)sWw¹úS·òwë(Í 9¸ý²æýý>©|nLöîØ Üð³÷I³~èzcC÷º4P}ª}·E­ 8ü/ºê|·ØkÁËÆÌÅë‡ýË»èÈhŠ ZGÔ»W1éóë“wÊ΢œ‚«³›O8¯ÕnÒ¯ ?ÿè"Èß}Œûny_Ô®z«qÄ–¾–=*û¤Ñè£!ÛúhÖV *hýÄ1qŸ³ëï9ÊN nÑè³-ºÄG IDAT \M춨 *¦I“&ÊN@Ua÷êÕÐæ$¨¨ Š@P*(€"PA{qULXXXfffzzº²iÐ ð4‹j ËÊ’ñÅ¡¥èéé9::ÖB>P ‚ª’°°0uuuWWWe'$222<<OG¨¬¬¬öíÛWØ,((¨’úT•dffzzz*; „cccegQØ÷{|?»ìxj¢y½²ÇÀÀ@Ù)@½‚ë ª'oë¼ *(€ê )‡FZ». (ù6I6z›—u· ÿ‰”˜U!ßÒÇvôÑt|÷ ÔTPE4Ô *õëi;îdÅ7æ¨ú!øÀ‚Aœ­-¬œÝ‡.=žO!äñ1–<Ï7·nþŨ5×Þ± c./ÒÁÑÒ²‰«÷Â#¯såoGê×ÓfÐÒͳûº8XXO:“[Ò±8Ô¯§ÍÀïýfz¶±³°rþ|̆[IìÇ« ”–!45`ëT϶–Öνfm Ha+LcùÖyý],,Ü-ÿ;NL .ÎôXõ8ûÚG>gáU¿¿–ꊆZAê6æÐŒ‘›}ý'$*ôÆ:·ào'n|\@1qè½@ HNŠ >µÀüï¹ ¿g !â7Û§y™¿àÜˈçç™Þ:,”¿BˆðÁÅg~ºöú]ì>_í²Ý œhµözHÄÓCcÙ?§Íù+–-³J̽ž&Hݬè¿=ßüß{çý°ðG'Wt¿öo2­ À+/Ý×û¿Žzyz÷袷ò4¼wÜ\î¦Û{kX²@wivm 84xµSAÅ‚À=‹†wkí`iaÕÔµç¸åG_f(v±B/uÔDÎìûm= GœÊË96Ô°Ï®DUøDâ˜ÞyELÝ–^‡Þ¿ùÜuÓÝ-u5t¬º/Xè•~þܳ’k¦„Ñ0i1hÉäA×d" 9wêuû¯Vli¤©kÝ}á÷#¬8nGÍeê²ñ.|M)9¸Í'-›ÙÑLK‹ß~úŠÉ6N\yÏ–ZE-Bæf MM5 m=M }›£V/÷5cä§¡Þaú²‘­M45ŒÛŽòuÉ ‰Ç—fƒÔÂÓ,4åúïi7l<½ý [íôÐë;ÿ÷Í€!QÇÎ~ÛA·æ»¨_¸63/®qW—Dlô6Ÿ/ŽBÇÇÆçÝYÒÆtIq[¦Ñ°JHnÈñÕ?l½ð(,)S(¦”h¸÷ùÀíäÄ=++ÃÂgWÔ,l,¸!r·CáðÍù\‰YÚXþAáZÙZ2‚DKt‹W)½Y®ÓŒí~~+GôNçòœ?ó6kx[#¹i0F’"Ψkª‘H„O‘ 5 ZðxËÒ#܉;÷ÌëÙÔDSCǬÕÀeûîÿûŠ‘b" \Ö¾Õ‚[…§fØèÞ¶Ã (!DÿÏÆ‰­í,,ìÛzNÝ|'IL>ºÔÍʺðSM¼÷k_÷fÖVŽn> ¿Ê–ìl4óùþ²—RˆÌ+Få¯%ʺ°ôQ_ù•ÍYÎE&€Jàš66ÕõüíM² Xräö¾lôEKî5ùþôðw‰ÉIÏÖ}®FYJ‡of’õî]ÑÉQ\¬dµ¢~d=-*~S´ˆßǼ§<3§Ô*r7«ÕÄkñÖWü¯ý±[ì†á‹Î¦ÑŠÒøÃ0„R”R¨=5^AÅa7o½³÷ì¢U²Œ1öÒCçÙÍ»©2ßìâÐS¦"ã>ŽŒØ58k÷Äéû"Åå/uØ9WJаѦÚûùÚ+/Þœù¾mðÅ’*ûñ¥"óŠ!e¯™Io&¥/Z•œå\d¨×yؤŽÁ?/Þ}?:£ ?-úé…Ÿ§¯¸œEh~n«®©«««.^³ë‘¤Î©9ûø:mYy"$½ ÷ý¿µÇÞ±ò¶Sñëý«w%çç žì]µ7Ú}H_ËÒ_äl¶àöúikNF¦æ‹XÊaH~v¶¨êip Œ ™˜×o2qBjKWP6MJx¦&e;âòLiª UÖ[]röø‹–³VMlg¢©eÖiÆÊ)v_ˆ—kVñ…BÄ¡'8ÎÙ´ ‡½–¾ûø K<%Õ\²WŒ!Ò¯•m&»¯Jæ,ç"SYËÙ7Ò ÑÒq2ýêt³z;‡ TÇvÜ®cóù×—ôkmçè>ô»óbßñÝõ·é„UóÍ®Mé`oÛ²ïÿ›yºžVk>{÷o}â6xµ°ké½.¾ëÀvêò¶Sõ΃:ÛÃɾíȽâÑ;·Œ³)û>–½YÎcÆÞ^=¢s»V>~)ýý~ÆgªœcÜ÷Ë™æ—Ç63çã^\¨5~”cÄ3"‚¤–”þ<*$¥##‘>« ›œ(д±3/\…kmoM‰É,±+ÓLî•’¢6‰qIšv%©—R¤_12 ¤ì –döUÉœå\d „1s4vLé%ÛÙ—b‹oèÈh™Ga\3 ³üq,±«ø€[rŨÍÎÓ¿w±3ÖáÆïñí|†-UùÍdôU¹œÅeº€ê…ïÒjWówi¸ÍY5B¸oÆ´ßn¼MÍæ&½<¿fâÂëVsWN°ç®]K'ácg²„¹ »×ý*"„5çCZ¾ØþÃÁç)ùÉvþðG¤ëPo{n¹K•¹RÂu2®ÓÛ­‹ünFeägÆ\²Ñ?OV²²®U²™ô¾ªž3Ô}µð<(Ãë³éâÑ™¦wVøºÚ[Ú´ð˜qÑrÅ…“‹Üt!ŒÉÀëjóPÓ ›&$$©©}Ò‰_6ñÜÌ^sC‡Ÿº´ƒVÙÍ›7‡ªì, ÐÉ“'=<<”T'‘H”––fnn.¿Ùü“Ion©íYý8f~Úè›±cîêÛðܨ®Úÿ†mƤϯOÞÕz·Õ 3Ë(@¨ ªÄÐÐPÙ)@ ¼ \í_Å<~üØÍÍMÙ‰ 200PvPaaaYY?y­§§çèèX ù@=€ ªJÂÃÃýýýÓӥφµÃÐÐÐÀÀsܨ–¬¬¬öíÛWØ,((¨’úTÅ4iÒDÙ)@&õëÝëɬÿÊOžÀFoóéz{Ô“£ceO°Yà´T/\P*(@½FS´àñx<>ßÌÂÆÙ¥Û é« ÊS  ‡oéc;úh:¦d¥C¨÷¸63/Æ''ÇG½ºs|íÈÆOÖê3÷|<¾ˆà¡‚4 =Ó¦Ÿ\yøIêgWn}X@!¢ø6NôhmgaaßÖsêæ;IbB.kßjÁ­ÉŠlôoÛá’£>šñt÷LÏ6vVΟÙp+éãJL?X0¨“³µ…•³ûÐ¥gÂó%Ë…1——éàhiÙÄÕûëM {ÛÞŸ@åô%-·‚‹3=V=ξ6Ç‘ÏãYxm‹fevPÓPA·},ãïÝ qèÎ)S‘qGF융{âô}‘œá>8Ðjíõˆ§‡Æ²N›óWlÙÊÆš1r³ ï¯ÿ„D…ÞXçüíÄ ¿Ù>ýËËüç^F7`º»‡Ýî zþæÜ³oÚêœ;õºýWŽliÄ£î ¿qbXˆœndæfW¦™¬îÜ:HýfB€ê„ ªJÂÂÂÔÕÕ]]]•ÈÈÈððp}¸ˆMIN!Æ61Q icg^x.ŠkmoM‰É,‘[A-m¬ ÿpp­l-A¢€%ÆÅ¿ÇÇÆçÝYÒÆtIñ"¦Ñ°Êf'¦èYY>í¢facÁ•WAÙd¹Ù•i&«» † : ‚ª’ÌÌLOOOeg„bllìïï¯ì,“óøüÕ÷æ½>oÂå°f¼ü;щ,±æBı‘±„çÊãFË E…+°饾ŒPü>潈ªþHy_ð8¤äD.×´±©®ç÷AGF—}4TôŸ™IÖ£w锘2„Q\lœät±Œ¾8|¹†a¥T~wµ×AU NÞÖ)*÷r°ÂA؃c+ÇNÝ'ô]ñeG ¢æ<`HËÛ8ø<¥ ?ùÑÎþˆtêmÏ%\»–NÂ;Ç΄e sw¯û+TT¼ñëý«w%çç žì]µ7Ú}H_ËÒG¸ÎÃ&u þyñîûÑùiÑO/ü<}Åå,¢æìãë´eå‰ô‚Ü÷wüÖ{')»2ú’™ÇÀ؉yý&“•×@-@¨÷Ä1;¼óøæ6·~sä}»oÏ^ýÍÇœCQk6ë=#E{G¹ØÚµŸ|RgòÞ]S¸„0&W¬óˆYÓ£©mkŸuQíû¶.¹ª¨ÞyPÇào{8Ù·¹W]k§pjB-TPšr}‰÷ˆm _,?ý("*ôîŸóš¯0dý£ìšï †Ô|-x¼eéîÄ{æõlj¢©¡cÖjà²ý?÷‰ÿ}ÅHqíL‰IÓïýÚ×½™µ•£›ÏÂï² §÷Ì|¾^ ·AËÿ–<œöáØKÇç›[7ÿbÔškï%7ñ‹CýzÚ Zºyv_ ëIg¥7“ÒW~es.ßEn;.ðij¼‚ŠÃnÞzgï5ØE«dcì9¤‡Î³›wSežØ¬Æ)1ÙèÓFmŠý|í•—aOÎ|ß6øâI•^yé¾ÞÿuÔËÓ“¸Gm¼•G1qè½@ HNŠ >µÀüï¹ ¿/zV\øàâ³?]{ý.vŸ¯™ôfRú¢UɹtÚÕ÷"@õ«ñ ʦ R ÏÔ¤lG\ž©1M¤Êú~¥Â)1WMlg¢©eÖiÆÊ)v_ˆ*?ãuᔘ릻[êjèXu_°Ð+ýü¹ge櫇ž<à8gÓ‚öZú6îã7,ñ”TsõÓ—lm¢©aÜv”¯KfHHé¯{b4LZ Z2¹EÐõ™…‹Ô\¦.ïÂ×,ýO)ÛLv_•ÌYZP'ÕøÓ,#ž$¥°¤ô¼%bAR*121â鳺T㔘âĸ$M;‹‹c`d Yʨkª‘HD É 9¾ú‡­…%e Å” ÷>Xb@!¾9Ÿ[¸®ôfÚ2ûªdÎ¥»€:­Æv¸ŽV‘—N?Í+YFSýOý“ëÒ³ ‘7%fltbáA¡dJL3Sbþö&YP,9r{_2 ˜Y˜åGEÄUêë„Ùè‹–Ükòýé‡aï““ž­û\²¥ 2#¿™Œ¾ª”3nMP 5ºPÃmΪÂ}3¦ývãmj¾07éåù5^·š»r‚=§¦Ää: ×éíÖE~7£2ò3c.ÙèŸ'%OB!4?7U×ÔÕÕU ‚¯ÙõHT•fÒûÂ4žu@XXXp%„……);SPµ0'Ãë³éâÑ?Öÿ²Â÷—ð¤ìªÖd¨ß…#šëÂ)1ïÏ^Õ£é×V†ŒîÛún !…Sbæ~·z”Ë·© ¯yÏÉ{âÀ%„÷ýr橯Ç6ÛñtXùàÂìq»Ž1k×,é÷cD¦–eˮþú®ü”˜»‰»‹V®ZÒÛ/žš»\°ÎWSV®Ü¦VÍZ<¥ÃöL-‹vý'xº]~V•fRûb4+•s_k Ÿ$++«}ûö6 ª…d ~¨íyqÙÄs3{Í ~êÒÒºŸ²¡ óâÖ)µ7/® MBÉFoóéz{Ô“£cëÜ—÷ìÙ³Âf7nÜh×®]-äuS•æÅ­í›>9f~Úè›±cîêÛ0GÀ'a£·yÙŽø«Ò_']™örÚTµ;€ú®ög–gLúüúä]­w   rßœúiÅogÞ¦rÌšvè=aþ×cÜÍ5dµæØÎ¾=»ò[¯LûÒmÄá[ú÷x0éÙ¡‘†ŒÝÔwxð ÎÈøqÌ|þì¿Â"Ÿ]Ù>³EèŽ}¯J PW°ñOž$Øœ>¤­™Ž†žyóî~Úÿ]ײG 4ûåÞ ÜÆì|–IËœV‡úõ´ø½ßLÏ6vVΟÙp+©ü#\µ´|kù‰-KÚ|4‰¦¨ôY\ó_ÊBS¶Nõlë`iíÜÑkÖ¶€V^Î27.u†ÎÊLí PPAU‰¡¡¡²S€Õþrp»¶·ˆ<µy×ßO£Só?~‚™Šo¬2æOÓÎîŸÑ¶ÑÇwêœhµözHÄÓCcÙ?§Íù+VþcÐR'¶,öÑ$šeþZÈ™ÿR Ñ{¾ù%¾÷ÎûaáN®èíßd*'g—:C'[‰©=j*¨*100xüø±²³B 200¨æjº/=y`¢áMS{µ±oÒ®×ÄU§CŠ¾Âˆæ¼>8ÃgÑ«þœÝàm­.u}nóIËfv4ÓÒâ·Ÿ¾b²ÍƒWäUµ &¶¬$)ó_Jm¥©©¦¡­§£©¡oÓaÔêå¾fL%r®Ä¬™•™Ú †ÔþD 8‡ððpÿôté³!Bí044400ppp¨ö-kØô˜½©ÇlBÄÙ±N¬™7wxšþ}?Bˆèå‘ßrø#ONr3”ù˜×ÒÆªp—æZÙZ2‚DK¬eL–:±e%É™ÿRZfN3¶ûø­Ñ;ËsþÌwÚ¬ám™9óB+=kfe¦ö¨!¨ *¦I“&ÊNjW×Ú}ìœÁ\¼ü8Jä¡AˆzÇï¸3uÒH­?~ÓÙXj¿y/"†j…?RÞ¼O;ËTfBÊÒ$[¶Ùyú÷.vÆ:Üø=¾Ï°r«–V¯Å[½6+üÔâáÃiìñÕ—ž3‘±q®™…Yþˆ8–Ø•ü³$Ód~tdt{ê?œÅ¨+ØØ¿æO\yèßÿÞ¥³ãžÛ~&Ü u[›ÂϹšöžÙè|iò°å7>ºIˆBˆøõþÕ»ƒ’óóOö®Úí>¤¯å'íáe'¤,­’ó_+¸½~Úš‘©ù"–r’Ÿ-’™3S•Y31M&(*(@]Á±4w ?hó4ÏÖ¶ÖN]&îJéöÓ¡ûè—´P³ôÚtzÛçæ ^xñÝÇ5K½ó ŽÁßöp²o;r¯xôÎ-ãl>ñÔ¸ï—3Í/mfΗ|9|1nÓ «æ›]›ÒÁÞ¶eßÿ6ót“~e¶ˆFç1c o¯ѹ‰]+¿”þ~?ã3²r–¹qŽÝÄ]‡¿¶¼µ¤w‹&®¾?>kçå®I8¶ãv›Ï¿¾¤_k;G÷¡ßûŽ/?µ'@ͨíYý F¨ÐÌÅj7爈ˆŒŒŒ ›éëë×ÄnPUšÕåÔE¨v8‹  ƒª˜°°°ÌÌL<Í¢\5÷4‹â¸N_߈VvU¤Š9”‚ ªJÂÂÂÔÕÕ]]]•ÈÈÈððp<\С‚ª’ÌÌLOOOeg„bllìïï¯ì,@™pT•àäm‚— CP*(€"j‡úõ´ws€‚jø4ÕZAiÊ¡‘¼ÒL[,¸Õà¿ëV¾¥íè£éø¾%€ú¤ÚŸfáÚ̼¸Æ]þ4Óª®VÎâÒÔ€­S=Û:XZ;wôšµ- Eò4ýñÞ¯}Ý›Y[9ºù,<ü*›òáØKÇç›[7ÿbÔškï%ß?!õëi3ð{¿™žmì,¬œ?³áVá×;ÑÁ êälmaåì>té™ð|)ýKéˆB3ŸïŸ×ßÅÁÂÂÁmÐò¿ãÄ„ÈO`ÐÒͳûº8XXO:“(½™”¾ò/ÎôXõ8ûÚG>'ù‚ é9—ï"·æ^øtµQAEÿíùæ—øÞ;?:¹¢küµ“)!lôi£6Å~¾öÊ˰'g¾o|ñA>!#½ÉI1Á§˜ÿ=wÁá÷E_©$|p: ÕÚë!Oeÿœ6ç¯X–°1‡fŒÜ,èûë?!Q¡7Ö¹;qããr§¥wD^yé¾ÞÿuÔËÓ“¸Gm¼•G*Hàâ³?]{ý.vŸ¯™ôfRú¢Þ;n.wÓí½5,Y ˆ»4Û–ÈɹtÚµðҀª½‚Šcvx7.¾j1xe445Õ4´õt45ôm:ŒZ½Ü׌!âГçlZÐÃÞ@K߯}ü†%žZ%›a4LZ Z2¹EÐõ™…‹¸Í'-›ÙÑLK‹ß~úŠÉ6N\y/ ;½ÿ~ó¹ë¦»[êjèXu_°Ð+ýü¹gÂ2 ÉìH½Ãôe#[›hj·åë’ÏÊM@Íeê²ñ.|ÍÒcV¶Yÿ(I>òr–ÖÔIµrÔ|Æv¿¿•#z§syΟùN›5¼­‘81.IÓÎÁ¢\­È 9¾ú‡­…%e Å” ÷>Xb@!\K«Ât¹V¶–Œ Q ŠÏ»³¤é’â 0†¥”¹eGFG„ÆÀÈ@²”Q×T'"‘ˆÊM€Ã7çsåæ©-³¯RùÈ˹tP§ÕÎÁŽV¯Å[O\ñ¿zôÇn±†/:›F¹ffùQqlévlôEKî5ùþôðw‰ÉIÏÖ}®FÙ¢z(~StµQü>æ=å™ñÔL›êzþö&YP,9r{_ÒÛ”Ú‘,r „0ò›Éè‹aBiáf¸äÌT&OPºÚ¨ ·×O[s"025_ÄRCò³³E„ë4d\§·[ùÝŒÊÈÏŒ <¸d£ÍÏÍcÕ5uuuÕÅ‚àÃkv=•lFüzÿêÝAÉùù‚'{WívÒ×RÝyؤŽÁ?/Þ}?:£ ?-úé…Ÿ§¯¸\vš©ÉJUn7“ÞÇÀ؉yý&“%„n%r€º¯†¯ƒò,FMWï‹‹ªPIåÇ*ï¿ÝÓÆ¯8ÿêƒóÒ€{£oônï?>äü$>Ê@m8pà€Š ýøyÐÊû„³¸lä¯&>û’QQ+¦œY¹üuŸ“1ÙY¿o…o(P}Ÿp ÊØÍûG0È=Y)~ûs÷Î÷f¼=5Ö¨¡l•=…¿xÍi7ÉUŸ¡”’¢ß(r@߀‡ N©á³¸……¢!^,;VlNNž†–zñÔÅ-Ø.! tHê”Ox”üͳãñ¯ÏNä1â ]¾ø§Ë÷¶wœ{šH»OØøÇZoÞÅI—>ʦëL#×ûϳWÁ›SRRîß¿ÿñòÏ>ûÌÄĤH?4Ô~꥿7-ôäXC¦xUcllL)-w»³d¹¬µJ•Áè‰V ZMmõ[ BY2tâ-cÆî7[uü¿ñÍEOwÍ3r‚ÞÝ‹3›p FŸHM¡ù)¯Î-?c¶íý3“­êø*6V5-77÷þýûňäüPyÕ8'‘†ûìUcÛò8„¸ŒêöÓÿâØ^vÕ·y¥òññ!Ew1maÓ¢ÛM“–C—ÎØïö÷ÝÌÉ# än­.¨¹±P˜‘‘ÑgŸ}¦´ïf!ÒŽA%Ë%„0FŒd¡š¦‰DlQãú𠌷··äèÊÇÇGò³üöe¯ƒ–|Æ)|ÑŠ"qbB²†YáÈq¬ímHrB¢˜:æ½>òÃw~gÃ3 Ä”Ïû¥‰©¾* iUÇ  –Õöw³*()¼­Tr·èçÂ_I"†0”²lýøêíííäääääT™N¹ Zò‘2CÇðÍx·£ÄÔ†CÇDľŸGì7ÿNÛ½wu³7ÑåÆíôr;ÁŠUgH«4Vª¨†ïBáš1Q¯^gVùAÕ:ÊÉÉ©z7¨ÖÌwx«g[þ·/8%?/)ð÷ïw…»èÀ¥9yT]KOWWC”üäàŠmBÉ ª3¤Õ>VuJÕ*(-ƒÐRËÊÿV£þs¿l|a¸½a#cÏß"Å´Þ“1Vå¨ÔÐq›Í9°´hÏÐææ[;®=íàÞiÊi:ùÇ…fWƵµ0wôX|¿yïê…°ÔŸ!­¶w1€20îcV8wµy¨©üv™™™ýúõS`Þ£†ƒÃá\¹rÅÊÊêÝ»w+ùŠÇÊÝÝ]Ù¹@ýwïÞ½ÒwIÕRÊápîÞ½Û©S'ù[›2éÍ­#uéYBÕ™å«ýè,®“©ã08 êp  ƒV'ƒVT*huB­< ¨:œÅPDŽAMLLX–eiHÅápX–•| ÆJ¾Òc ¢ªVA_½zÕ¼yóª~ÿKÁ²ìëׯMLLrrr0Vò•+eç  *TÐ6mÚ<{ö,888%%¥æR]&&&&&&mÚ´ ÀXÉWz¬” €‚ªPA%ì´µµ­¬¬j,Õ–““#%ŒU…ŠÇ @EU¡‚böµJ ÀXUŠ(¨.Ü‹  TPE ‚(@¨ Š@P*(€"PA  E+¨0êÜ·ý[˜êjéY´²Ú?ß@"[eÆ ã  j« Âçë‡;c¶ô߸´èK3Éîac·Gào¾t•+Œ'€êQ¨‚ îßÒyáÚQÍ ´M\¦ýô¥Óý?¿WwnõBeÆ ã  ‚© TðâE‚¥‹ _òÕ—\;×vúoŸý—W½™Õ•+Œ'€*R¤‚²Y™YD¯‘nÑwG3ºôØÌŒZ‰Õ•+Œ'€*R¤‚rô鑬Ì좿ð4;3‹ÓH_‡‘»VÃT™±Âx¨"E*(ÃkÝÚüýÓ§É’?ùâ¨'ÁMÛ¶ÔªÞÌê‡ÊŒÆ@)t'‘zÇ “š=øùGC>ä¥ïùî÷ÐϦŒjέîÜê™cUpuš©vŸ]‰ã  ’{šE½í7'þ”°ªKcë¾ÛèÔãg6ÁÜ ÒUf¬0žªGMÁõÔí­¿2h}µæR_I+>»“r+huŽt  TPE ‚(@¨ Š@P*(€"PAQ…9‰j.zcPïU¡‚º»»×\õI@@ƪ’ðQTÎâ(@¨ Š@P*(€"PA  TPE ‚(B± *¼5×Fa†á4}&¿šsª_*7V¨sßöoaª«¥gÑnÈjÿ¶Vs€ªS¬‚ªwß#¢4ïÂxC¦šªw*3VÂçë‡;c¶ô߸´èK3Éîac·G †Ôm8‹[îßÒyáÚQÍ ´M\¦ýô¥Óý?¿+;-Tù¨àÅ‹K¾ä•kçÚNÿí³ÿò”œÈ… ª|lVfÑk¤[t’—Ñm¤ÇffäP¥fò¡‚*G¯‘ÉÊÌ.ª˜4;3‹ÓH_—˜ê2TPåcx­[›¿ú4YRBÅQO‚3š¶m©¥ä´@.TPe)¸:ÍT»Ï®DJˆzÇ “š=øùGC>ä¥ïùî÷ÐϦŒjÎUv† b”&ÿÑO‹a´|þLË<2X‹a´¥4?~ £iúñ'µÏ „ m_qqqBB‚@Pߥ$„BŒøÂ 2(´}‰ÄÃÃC,×S‡ã8ŽãÒÒÒ l×¥ð À2(È | ƒð À‡ßfIIIi¼~´1ˆ@›gD h¼~´%)))ˆ•ðQZ/Åà€dP>Aø@à€dP>Aø@àƒ_­9ñN š¦iš‘N8 ®û—[±|ÖÉF$qõ{åË„|î)åm_ãÄÊ|ã ÐRðˠ Õ9ZBTq“ÛÑuËkþ^1é€óÂßóʲ̤ÖED­Íâê)7+sŽ'@KaÒ£¸5g7oJï7I¤Llï?íëYÞÉv\eõ–›³†Ä ñhL™AIñåËùnþþŽº}-A§çýl¯_º¢ÒWnÂU·: ‰â И2ƒr•ŠJJ"µyp°’¶‘J8EE5«§œ˜pÝ­MCb¥oYsŽ'@Ó3ee$R U©¨z0““*E%#µµè)§õ5d+}Ëšs<šž)3(íàëÛ>÷Â…"ÝÔÎÞJ½XáÕ³»H_¹ WÝê4$Vˆ'@K`Ò+‰„}¦Dûœ^ùÉ®ôrUéÅõ-ðÈn½åæÌèXiâ§9‰ƒ* ú—€&Ä/ƒ’¢ !"š…Æ”)v†‹hZ4ô‡Aø@à€dP>Aø@à€~´æÄ;,hš¦iF:်î_nÅ~4òY'‘ÄÕï•/ò¹§”·}+ó'@KÁ/ƒ ƒVçh QÅMnG×-¯ù{YĤÎ Ï+Ë>2“Zµ6‹«§Ü4F¬Ì9ž-…Iâ֜ݼ)½ßü%‘>2±½ÿ´¯gy'oØq•Õ[nÎ+Ä 0e%Å—/ç»ùû;êöµž÷³½~éŠJ_¹ WÝê4$Vˆ'@K`Ê ÊU**)‰ÔæÁÁJÚF*áÕ¬žrbÂu·6 ‰•¾eÍ9žMÏ””‘H%T¥¢êÁLNª•ŒÔÖZ §œÖ×hH¬ô-kÎñhz¦Ì ´ƒ¯oûÜ ŠtS;{+õb…WÏî"}å&\u«ÓX!ž-I¯$ö™íszå'»ÒËU¥×üýµÀ7"» ô–›3£c¥‰Ÿæ$þ©€è_š¿ JŠ6„ˆhZS¦Ø.¢iÑÐòE {.Ø3&ÿ‹.2÷kÈ›»·ÎìÂPúËÍAcÄÊœã ÐRÐu Š\5ΩþzgΜ nš>µv)))Í݋ֱ€¦‘˜˜èáá!‹ë©ÃqÇqiii}ûö­¿µ¹{ 3NìÄž È | ƒð f¡þ“ < ƒð À‡Esw ÑUVVfeerÿ~¨õ<12(´}‰$00ã8Š¢!º|Iá8N÷\÷'Š¢N:e`›È `vj3hÝlJa#Nn‘ASRRŒí¢ÙB¬Ú<#2(î¾f Ü©Îpø¨­Žâ€‰­=r«û744ôå—_6¶)|›ÌÈèÑ£ÃÂÂê–„†††††òh ÌKÝ$Ê;}R8Š fH—A !£FâñMPdP0GaaaºïƒònGqø@à€œ³CÓôãOjŸȈ oTÓæ ±2bMãøñã¦mÐÐ Ú·o_Ó® UÃyP>Aø@à€dP>Œø6Ë7 EIIIãõ¦ÙÙÛÛËd²Î;7wGZ Dà¿ WÒóËÏe4q¯šRï.ÎÝ]åo îf`}C3è7hš âÙ¯Ö#55533³K—.ÍÝ€–ÃXpEÅR[ÞÑ,½jJÿÚü}bÚ¬!ÏRÙÐ ªP(Èû'`Zÿ“'O6w/Z D ãnù¦·‚9®íGàóqý¢×z›C3hII‰9¼{tÚöcaø#ç² Ì'ç² =RmÄyPC—s59ö?oÔhT¡³~ôz~¸á@KÖH³§V«ùö4©LB=hŸP”²Zýãšu±º†xjËŽŒL?pà‘rÁƒÃf„ÂFëZ! ~°,»÷àŽ;yÙ•e99·7­Ýmª¾™Q·Æ5ñå÷,ì ½'Ó»—F¼öÉþ.~CLÛ>´%¹¹¹î®r·‡&¢s¿_m®þðFX6nüxáµks—.¥J—lX–hµîØqp̘1±±ŒEëþ%BH3èÖ,wëäèÒIVu½$:jfØ©5î}êkkT1#³±à8Í‘fÏ^ó¿¿Ï|éÓs¶•ؾlRÆÞ›ÀL4Æ|G¡¨Ç›mèLÍ[ýÃ__¯ËŠˆefM˜wü¸ºÎQPK©´ï¨Q<¶o_3'QîæªÁ½§dŠvÔ·õD€kX½rõo±PK)µ5ÚšjæÅ~Aœi_eîæê¡½“&§ïŸêÐIܨeø>(1ÀK¯~šq—©aI{;KVUpéÌbeu¡!˶ÆF Í3íS©TÛwlå8Ž¢VkJKËë>ÔªÓ®Î(ÆF€­©94nœøæÍ   ~ûM]UUw)MMMArràȑ⌌¸W_å´Ú¦Ü–ÇòR6Ò{àБ½nœ)ŠJ=izôܶöd&z§>.LœA{|˳_ä™l¹ºÆÙWag/pqí¦R×· W¼9ÌÖÊÊÊÊJ$–Ø»÷ žµáBgŠ0èh¯­èo?vk©áM3aºIT*Õ›3§Žß_XXHQ«5e¥÷ê>Ôjuíè-L^3{Ô N2i;ïÀˆ¶_*×d®xs˜Üûý?5ºÿU\üþO—~óæ64E¸qã¬sr¾öZ~RR££pÍÆÏO·ˆÀ×WC{züõWÿ#¬._>ù`9¶øìÆ"úû¸ÚI¥r·îƒ&±ïªÂ„_}Û÷ôOŒGq|Ǻwr.º—›_˜×Ý«³“ëÃØ´ev6ίn-d°B(Bø/~¿Έqaâ{Ñ42ý»À׿ÚU?×;È×o({¦êôìI¿ìî}åü µ²XÏr‚Žï$)TÊÊâôØÙòcs§,?¯5mÇ %P«ÕÓfF íO[²„ÂÂÂÒÒÅ=eÝGF7üIñ±9CÂVݸøXZ~ñÔÝïyÿµ`øË‹ÏU=Ü&WôÛg¡#—+gÄý&ÄUÐÄ[”?(**?1QSZJ¿ø"mk+X°€ñ÷tïnûÕWVÖÇ«++ï^ºÔ?$äF\ÜýMûeîàÅé¾ó¶ŸÉ**Éû;ni¨ðȶ„ò&î¼Q8Bø=Tõ_©ª˜’JuYzZökÑÖQŸÛ¶óÞË^8óóM–çZ8¢;%ÀñÚ‡á11ñ>(!äfÆ®œÛßö ëØ±kæ· ê}e=fŒ Fkþ<¼½GJÒôêÊÜ'|æ!„B[ÚûMŒì/ÊNKWB¸²óëfû>cg+wëñòû{®)ï×çJNý{b §s;;·çE¯:UÄꊟP_upjÀÂs•Gßt‹D¶ƒ¾Ëb ûu8üë§V«£§M2*°\Yèäâ=câgKXÉ(+±°îƒÕíFªÏ®üp«àÍ-1ó‡yÛY ­{„±ë¿!w¾ýhã öÁ¼Á©2ž1,ò@§åÇ÷ÎAf‚~š¦)B4eeE±7²IIB±ØæÿþÏvñbK‰D”T²bGQªÊJ²´®õÙ•la¦mݹp¬¿›­¥…•¼SïW¬ÿr´Œ²m¯´‰Db±Ä®Ãócÿuä¶î¶öê²~öÁþ{z·³LæìüaÜ]œ¸²³?¼=¢‡»¼}·¡³·\VpDÿäiÈk©7†E·°0ÿò• uKöìßæîm_Q]v==kBøt ‹G©<±9Ö6zÁòù£ò¶í¼üà¾6}åÇЗOÉËÝÁÞ³÷¸¥Iùl=åÿl›»!´Sÿ%W´µ-}3ØeÈ÷™Ìþ„'œ˜×Ëô”e5âÜ[9Þ=qï\áˉã¼ûÑö2MÏž/¼òꇶâ¢Ã;ýR_Ï¿s’ãj·ç~óœªèÂÖ§´Ï¾ÐSBØ[›§Žù¦ðå5É· s’WöN÷Ú’³*B©¹¼fÞҼͩwr¯Ä- Ê=–TÀ=õ-Ã6&Ù[òS^Uuõ½Äw:Ñfàð¯‡Z­Žš2!hDŸü²œêêjçgìŽz~àË/tèÒÞ½³síãú•›Ÿ~ô„íµ_ow‹x^Tghʇ½:Lœÿ{‘îp§òòÚñÃæ]s|]¤§UÃûHˆñô‘JìÚµäüyKkkK©T{ñbÑ’%,ÇqÅQÑjuí<Ø´^â'´'›°§´ºººª²(ãȇ·g¼½åöý‰’Ò$ù;ðÛS7ó3Ll{÷«ÄjBجõ“Æ|=`ERæô£‹üÎ<¥¬gò$ 8jÈÞÛÁ¸Ÿwîÿqûþï3oÞЕäܽ[˜YP‘­R©$×Þ½]Š+>ºåÄsÓ¢<%ý_²Ü·í´òŸ}JMò¾?»/;™ž}eûdnËÔé19l=åE(B8B;}}ÈÝí[O+9B8¢>¿m[V`ÔØNt+Øõè:1tÒõòõU MéC3¬¬)¡EÓTÍAM‚—ç3!#ßn'-¿œòîM¼`lö‡Ê¬­mä^\6|î÷že´×v¯?õ켕oºÙ­ŸüÁGa÷ì» !„PB++ K±ÄÚÊRÚ¡OÔÒ/Æ9S¤¾úFt¿¾7€Ù2büè1}æëCýsò3•ú ±§?š·( o!„-)*¡œìþÌ+pp²#%…¥,!E*R'+}Ã_ pbÞÁûŒÀ#ÕÝ»‹zõ²°° …6þþâ^½EqÅj4ì;ºvž¼i¶ki÷ì+ŸNï~ö—S÷×cðÖç{Ø[YÊý&른z%—Õ¦ÿ¼!Ù{t¶I;ô‹þö“á¢z&CCvBò¸z-ÕB®”?#\½îK•ªš²kï&{w±F£É¸œ==ú½ÇaoïÝ‘>üPGŠ0ÞQÓºþ“X^Û Ÿ×?ŸÑÇÙJäØkÆ—¯wLÞsø6«·œ¢ì(S²a“Ç’ƒ1 „ʤ˜Ý÷†Dv4ø]lø¸h”ßf¬¼¿ï0ǃZR\%¥Í¤Ø\Š-TUçU–Ä•üè('~þƒ¦v킎³½W¥(¹yê»õþïv]USl^Nžòä4hHí"Œ×àÁn7íù«úŸf¸’øÝ J¿¡/ÙÝÿn&Ó~Ø×‡vGW¯3vñŸF\o_`ïÜ¡*+Ù{÷¬úöµ’JUIIÅ‹çùå½½{++qÏžª¼<Ц9–ÕµÃxòLVܾóÕ7•µñݹx~vøRNq¹¢"}å!ûàt×Ã'"uÿcœ]Ûk²nä>t†OÿdHt—«š<}_ÉØâIDATµFŽÏ»YR£Ñ2 “–²ïÐÖ*®X£Ö–æj"ÆN~ª³;ö9'KòKÊuì}ã2vì¹uƒ¸Üì;÷Ï‹joçÜ!öÎt=åuz)ð™囲}×ɽ1IŽã&ˆˆá •AEÖí-Ev99—Ë«¬‹‹³KJrJKîTU•B¬å!ÕJæúõtß>‹k»[ûªRv#?˜é™¼ê?)îãßH]6wí·ÊÕÊÒ[\ýiœ‚BÔI_MýlçéÌe ËÑ4QWUjÓUO}Zf/§o¥¥Uv٨𘠣†ÿMsfpPhfF¶Z£®ûP©U—ÏgÌ}ëƒáÂZ@ØûÝ%¯Õ¬‹žúïã%JMUþ¥ŸM˜sÄuöWS=˜æ Jþâ§û÷ϱ\1úÓ„ƒG¹^ÆFÀý¥—RNœpíÛ—®¨(™3§pöìÛ‘‘U—.U¥§§GE¥GG_›=›¶°èìã“]Td)—Bˆð…9K£ØŸ¦D}}èb®BS£*»unÿ73þuè§®VqB+kkaMáù­‹Öœ©y0;>ÚŠ¢a¼#¦\ûnÎ7 YåÊŠìÓ›æ}_­w2¼‘ ÏrÑ¥½{{ûÎÖV¶,Ë9»ÙÛ8k•*envÁ”Èwh†y¼~ÅɘXnà@/Am‰°×ÐÞ×¶ÿ|¥†#„PÚô͋֟+Pª ÏoølSv¿1Á®T}å©mœv ›<(ó¿Ó¿û«kÄøž‚f¿÷é˜oÀÒKOÕPÞUU*¥²‚ã´Œ…ÔñµŠ*›”ÓÇ_¾KlãúÏköÏrï×ܾ߭ügÁ¤ûÞsúå½!Þ®üÃ>8  Ÿ:ȆB„ý&Oj÷ÛgáÏwpñ±¢hÔꥎ¡;Nyb}J2{–KÜøÎr[ûa«o>m„óaÔð¢™ÓgÎμSéo¤ß*ËÕTQªÁ§ï1"x$÷è"Ê1dÕ/{g;ŸX8ªû3Î{_‘î÷ÅуŸô¶~dÞ ¤½æý|p¡ãÞIaóßiÈíxD`äÞ½EíÛŸ=ÞuÐ ¡LV¾kDzºK‡8BînÙB >>y Å_jõ«'OêÖc?|eü¡:_øfB@gg'wÿÑ ã-§±e¼¢¿šïüËd?7¯Á&û ë-üg½u»ðà9Ýéõ{ÞwKz/ȳC÷QŸ_ôÕÏJïdhÀ-þˆŸRšWűDz,ËjÔ¹·>O¨ÊÅo;Júî^÷â\q¿ >·÷nKVŠP¾£û\úhàsÏEmdÇÿøýwšè-×}@øgSd猕TDílÜyrÃ0qQ× ÈUãœê¯—ÂqÆI?7ÌA.ðè쥪8miíÃ;Þ¼‘’sû¥QG¥2O£šj2 Ã;vlèСÍÝ€–‚ßð˲F¥R­ùqõçkÔ5‹?^åààÀ0Œ@  …"‘H$YZZ ›ï&ìú†ý`5š£òœœÞݺeÿñ‡²¼ü~¥(F(ìäã“]Vv…aÂýÕÆÅ¥ñ7¢AôE ïçN, g {ÄÝ}+/õž²ˆ¢¨œùËm±“;ÝöÚêC.θºaœÄ òÇUŸøVå¢s?„Û~¯>Ã}µÿÌgcë¯6woaƉÆý6‹QÉ™¢¨~Cw%è/‘:ÉÚõÎÉÉÈÌúÃÉ5hHøÏV"{c›j2-¶c͈Çð„.ƒVWWO?©Z©Œ=´Ÿ¢(¥RÉ0Œ……˲ºöuÿ5M§WÏ6ÖF( Ù½ûhDDÊÿþ×ïÅi–å´Z¢ÕêþMËͽ.‹Ù·Üy¯Vý0ä÷AY–ºdùÉÛù9°à)ídö|~X´Î•A•?ÚÝêk[×Ä[½òc°Ü¨#³ mDW7ƒ ­äGý’xà%š¦]:„ ½ÁFÚ‘jÙYª%÷  ¹4<ƒZXXH$±X¬ÕjÌÿxάy,ËÒ4­ûâ‡P(´°°4M7ãä—A©IôØ«¯þtôè#rôõ ?rÄÒÖ¶UÌ-¼#P[G¥R©”ÊÙ3þ%´ÚØØ…–<7¼Î%2•×¥‰ÏwÊQ±ßÄ•óûŠŒ[¿Qµý³žµÄ=tÒÍÆ^ ´|º|©ÛÅ”Hžv®µXZŽ:x°¹{ш ¼ÊF$‹ÄâºKñ\ãõÖ/·žÐ‚¾òº„ÃW¤ß]AQ”ñ?ôcT‡w´52‡m0†?"€<ÎÐ *—Ë9Ž£iºW´p Ãp'—Ë›»#-†?"àßÑAËq4Mx1Q+%`-Çùw4ôº'C3¨L&KKKëÖ­[ÛþjŽã®^½*“Éš»#-†?"ðœ›Ý·Ç.ÍÑC  )ÒFƒ@Žã¾ýåïîv.ahõôô¼~ýzjjjYYßÞµr¹\&“yz¶ÐoÚ4 D`ö°îßÿß§»Ï\ÈÖ÷#•mG‡îvoén`}#΃zyyñê´zþˆÀœáÏ5wZœF¹³<@›‡ À2(È | ƒð À2(È | ƒð ÀÇý»úÍÝ[ؼýh],(ŠÊ8±³¹»ÐÊü?’ëG{&…íIEND®B`‚pyspread-1.99.0.1/share/doc/images/screenshot_preferences_dialog.png0000644000175000017500000004511613604423215025322 0ustar andreasandreas‰PNG  IHDR”ñcéÖª pHYsÄÄ•+ IDATxœíwXK‡gÓ©¡„:"¨ˆ (b¹^š½Š‚Š(Š(ö^¯½`»ì½÷‚½+"–EEQQŠô^B  Ùï$$ÁyÍÙÌœ=;;ûÛ™ÙÉ–œœ<òßã@ d‡Ë›&bvžkæöÍ @HDtðT(ž_ñ Ìü…,ÈD&2‘ù‹&YÍÄÜÞ#:øE¸Y+T.øã_ˆI`J’™ÈD&2¥f rã)ê&@Øò@(ü`@$p¤u›’¤A&2‘‰LéšB( B*dN¤f?™ «È02‘‰Ì?Ù@PMªšõæ% 0@$$aXM!ªJeË«ÒieÚ*ÖSÜvd"™²Ywšzób Õ\{·ÕVU Sɼr<3ÿûÕ—1_“ò±ê)+?Uˆ—°mv11ágj˜¬};2[‹IUÑòp6´Ñ ÓID؃WGc‰–2[º)l5\7$26i€eW3-¬¢OG§’ 5•ç¹Ú¼ÿ–}äÁGŠï‡vUv!ýSѱ<8³Ô=Ï+“U6ÔÙÌ&IÙ}\ggeѹðù™9^&†æã q…u°1é©ENû°9„ËÖÊr€ÈlÉfÝiDSK2€`Þp›vújà'0 ³1Ó’gØl x I”º’èBäVdÖME2ˆÌ–cññáË)ûB¶†•ªêNøÇ¤¥A®ÈJò$ À¼ü’ò–pDÈ”³î4uä…°«¹¶P¹¦í ÜwóS¹€ðÄɇQ“¶=´7Pïj¦*\UªSµn#€ à»; l ‚Z%«ÐPd6·YY„8?1"3Þ–i¡¨ÖI|ÉPóñíhK9¢(uÛéØ$e —^vz Êd<73çÁ‹øÅa„íh]ÀÒ¹×AÇâ›Âáj.½ «$‹ ÉÁ!Yc’¯EM‡LVm)Y“ªìₜԴ³¢J€¬¬>°§¡‚ àÇG'žÿ_V†£ªü¼G`ôN=Úk§¢E'òs Ã?%Ý‹â~‡- Ø‘)2kÙxx¶½ïîàJª5/D_kCa’NÆšã³ß“wƒ,.<¡†D¦º #’²{¶×íh&üJW]éGc­‚jJ!„µýÈlû#sì̱šÂ#sìÌq82Û€É „Èl!æ‰Q ;j™Qœû)»B½ˆ’×a™|!”3fÛ11<3ýq››ñ2YäÕÿnC«ÒÌ&Ó­HVÆÍÍx™Œyu{Sš(‰È!d±¤Ì:d  S¾ýÈÉ.)ù–YPU¢‘`éô`b07ýægn1ŸŸ“”Š3~VV,ò£noJ'QÈT “×P·m£Ì‚ÅÁQÏ ˆRìÈ„°æF¡r ~—W[]A#cÀ0@§’Çöm÷WGƒ±é]L´ÇömG§Š¾bÐ(ÚjJUYDIª¢Ú ˜´óéѹ€£s&í ::×Q˜rÒΧ•5*Ÿ ³yMÑ$uéßçHˆóË3S¾ˆàA@¦+/.V’¢Y·íæÙm¨¦DÃ`é¯ÔšLU‰Fî –— k¦T»C:V™² ˆá¢Ñ !PR¤S ¸e¢ P«U%þ5õ~ sˆ¾ÎÈþ:@^!çÒ͈çy°ù‹™Un<2×AhVêÆ‘9“v>­5o‡[ÆÇ42_€»‘˜ÝÁPóMT*€pâ Žt*XÆÇ38… UÝ_µy^F(|ª‰aáãtlž# R¹|üƒ0 BˆaT&CfË0…•‚øpÿžhAµo+F8!€ ˸<0%jq@zQµJ¯¬†¢dÉÑK®¦ˆv!Ä0²FE" €EÅUþˆ B’f•úúãÉ„[Ì@Ud01È%DGÄ­ÜãµÔ‚jï„))è²:Û˜ Ðgõk¯ôòeÞüÅŽL¡fˆtãØ<‘rùì| 6iç“£sGç:øøýœ—D‡Û†­<‘˜m¬£2ËÕê\`TXLú±{Ó‡v¤rŠ €Àªs%H•uH@@!~NôR™ÔgÇ“Êí5’!³%˜•ÊPË· "4KãÓ^B2[op•Lei¨;9uÌÆ è.&’¹’„´×…¬«ëÒ†A#SÕ5Õ-³Qq %€hG%•MT E]ƒåìÔÑ…UFU5 ¡ù=>íU!ÄXì¡–J T*»m›~úØ÷Ê=šÈÑÉ5MugGËÁº€¤gìÛ[K—ÊKJÉ‹)@KÊÊ[H±#VщþO|v<™èÿ¤2Мèÿ¤ö¼{ø6Pôÿ6*Õº-{öpk:•4¶o»ö‰YÂêòàm<€$a^XQýD-/aó^´­b ™pòÙDÿÀãóœ'™-Ë$UUXíÛª…ÝK‚Ï9õ3÷/£ýíúNÁ‡O‰3ì‡ («–,—SðþSâÃL¢ŠAáìCÈã\¦ rþ)ñA:Q&¬w¢*1açüÕO…½zõ캽'/>*þÌKò9ç¯}æö®ØçÄGé„K{ªjä2ȤÂ/ù}ñÓw¢%;2aÅh“ø4uåàMTšCs}õM“ÿV–§ ½ÑȤéÃ:—ð_“9o¢Ò„±•`vžkÌí=¸©ŸÄ€Ð)€Ä„^ªšPÌvd"™²‰Õ™¦Ý … ¦¸XwkÇ&a *ï¢3Ý{/àWüÄ@€’žetð²^'{–‘%¿0«ò^ ~4Â`M³"Q=ɉLdþifiDÔ–@ỘŒ¸´|]–ƒN¥Ieåx*‡{øîû;¡qNˆ2Vä¥3µr#**÷€¨+P¹ËJµoG&2‘ù'›u§©S7D[?ÅgNÈ&A‚$#0(j‡U$… z·±æû¼ b6ÙϦ(ªfEªŒ­ ™Èü“L±ú Y^XaB(ú7±ê#ñ?å­ùó á÷D¥¾Õk†gA&2‘‰ÌƘ"ª½U¢BŒ &ìŽÖcþBd"™ÈlŒY]¼D[0„OÙ…srê7! 2‘‰Ld6¬@$^'õ! Ì È5~˜@ ²/!“ ñB 2 /!“ ñB 2 /!“ ñB 2 /!“ ñB 2 /!“ ñB 2 /!“ ñB 2‰”Ä‹HÜ7@Ïí Ö‘Ùá çy¥Xš>ÄŸÊŸÝòBúˆ@È, /"ïýÙ•^}mÌô´5µ ;ô:uËõ¯E-úÊÇcwõÕ}¡Öj’ŒfÔÚH[Û°SÿY[æ9é ;‘ Å…@ ~’ŠþíIPб‹k¹ú“Ƙà}xû˜øöØpî!¯IÇãEòUr-¤ãæ o‰/z'}¦ŸN!`޾™ŸŸŸ—›úùúBíû3çœM«C_/ÞžÞïhhBÂûkëÿÎxô<@$Ÿ<Ê?gàîào)qÁ[l>,ñúï>äð³Õ]úïOÈËÏÏz0ǧš9èæÑ—¿¾ÑckPtÒ×Éæo .@¹×gæ#Ý¥÷£’"ï/×}q#\ > ñ»T¼ˆ|N`i±D鋯xj«ªªªªªj{ßäUK)ˆº~ùsÇ~ÞV,C«û4¿ÉÆï.ÝJª¹½÷šé¶Z †f×)ë&†\¹WE§0ºz×¥“:¼{ FcÐ)t9Ey:]Ù Û˜ «‡ka½zâíçü7¥‡®M^ÏaÁ¢Á·n~*oHQ¨¶SV{tb1èj]<‡[q#¿¦‚¨›×blg­qo¯B—×í3ùh=Llâ·!©x‘TYj€“]Ñ7Rt?—™ŸŸum‚æOˆì¬º‘–è ²¾±>ÈÉÊf$ëê‰Öü ëêb9™9(º´Ô­WCm–ššz‡…ÏKó9…â›^d³©wõŠ^íæì4Ð}ºßÅð|žž’^ö|¡…ºPQUuFœÌÌÎnpOcª2…qcT: à8‰œì\==‘2QØl²Ø0ÄoCRñ"·utÐK¸s#¼¬^šš,^JR¶H8𔄠QÑdÃS“*F´ð´ä4¨¡­OÎ_ø?Ó•7ßÅgpòr#þëM!ˆ:U‡a:xñþ«‚_ÙdŸ²Ùmþõ|HÖÒÑRè»÷[^~%yɇÒÀ„Ë&Uä­aÖICSý{jZÅóIAz²h$¬¶0$w‹@ ‰Äö´®³6ŽÁz{m¾õ!µˆãeyñ¡ocKº`)æÃÜ,>í[yêc.¯,ûí•Gâm܇˜à‘'Ö~—]V–vlÍÑÄnu1~iAe(((Rq·s뽩{¼ž¼ÉgÝåÐø¼2Ià/dswoÛðm ÿ/©ˆ_–ŸôþÖ¶I«ï@RQWÅ’"£¸B9¬aJ¥Ý?®mC÷¬ ˆ.ä—¦¿Ø¹ñR*ømH>UÓè·íÁÅf_öø8´××f›Ú\÷ÉbÅÅuýéÕRÚÍ8yÜCp|T'}ëñò“NÔF¨]€ÚÓµû‡Åö¦†–#âžG÷yÈm'¬Ÿ¯õÀÛÚ@¿]ߥ¯Û;w¥Ö­Ç¸±*ÁkGÚë·¼ã²k“»&HFã]ž«ñha¿&݆/¹‰÷rPS8sšÎÝ1fjZö%Âê¦$Fé0óènÇä }Í Ú ðK¶s±¤P©T1a ˆßfç¹ÆÜÞc§›fsG"”=ßu:ÜóÑßÖÜ¡ *s²£ƒ/üÙ?’"ëÆ–Í7?e~/+øvgÝú«äAú#åB šJsÐò!iôî#¿tÁ€¹™˜¶õà5§×ô‘oú!±zÌ>úxvs‡@ ª‚ºB&Aâ…@ d$^B&iÀ˜WII ‡Ã!“Éd2¹éB &8Žã8Îb±äå%z$ÖñÊÉÉQRR’““Ã0 ÃЄL!5 „²²²œœCCCI²4@¼(м¼<•Z÷xøE0 +))‘0qƼPo@45’ëLÃìQo@4 Rô´@È$H¼„L‚Ä @È$H¼„L‚Ä @È$H¼„L‚^‰ƒh%ì ü•Qø>‰ÓÜ jÁÚe¡«:ͱ½}"ñB´ö~)ÇÈ«†Zñ8ÞÕ¡¿t*å웤}O¾Îpê -·H¼­¨ŒÂ鲚"£¹cAÔB^qÙÌþªóOIÑ'óB´Þ'qø)W‹EM‘ÁàÒíÔ#ñB´põ[(ÂýHý!ñB 2 /ñw2P,e·¼ÈS“û˜ëjêØoýŠKÕ‘´ßÅpÔÙ\Ô4j%”Eòè¤!G¦Y­û\½ª){”œ¦ÿŽSÄ €®.Ì»½Ù/ÆéLdfFð¢¿òö£ê0T¤-˜jˆ©ÛÅm÷ûÒ†æÍ½ºjÙ×73ËùVY6ß‹²þ8ñ*¾ºÊãoKc¶n+ûÑKN¼ÎäH†Óï&]«.Í7þàq{ú޹X #W/žð%šÔ©Wå_®Õ=4E‘6ÁûÌæ½,¯?aÊý5íõ” £ãw‡æWž1<ëÙï>mY J:]Ü6<ÉHì”'Þ\:¨ƒ¦C‘ÝeÄúÀL¢Ñ>˃gP0 Ã0’Ò˜ë¼úCÏþßÞi:ë©ÈÑåÕ»[x*¼Ptp˜êøÛÜ‚O~mžo>ô’/* #Ác?}%[ÿÝ•YgU!Òö;©Œº*Q ¿Æ&^¼×<çjL?û:6áãýS;Ä<ñšßÜQµ`Y)FoÌkrïAªP,]ú‘ßû(¨;™ b›ÛÈã`Ò¸‚üè‹#9[†N¾ øåò#N’½Ï}Ìʉº2¸{3 “Ì'(ÿ´Å}Üu­ÏÓó“îNGÜLj'é“j¿'YaÙm/‰n0çîŒ>·§;l ŒÍçæD\_ÒîÝbû¾«_U7ät­-u¸y"e•°Ä,-)£1šÕø?K¼ˆŒ÷ï3‡úŽè¬%OSÔno?~ÓÉûÐjvùI·WºvmÃÖ5±4ç¿ù} ‡ŸÌ„ñw2¶jïìAV&l¶‰Í°UÒq(¼ä©Ëb±44´õÛ÷öð{”&ðïLuXöýÑLS ‹í²?‰º²kÇùÁ"¥$’6y†SávÅÎé¬LØúÞçBOÍÖÝ\Ÿ­gnç¶âz\=7.ø=âøøn6ž‡>r!, ¯-/‘~ʽÃA(þhG—‡Þ°Û™qÍ›|qáÖà2sÔ¹4‡““~u¾öƒYóϧ€6øàÓU6 ýöÆæp8éw§ÖUÒå¯î|ì¶éQdòÿœnßɰ+(*1æÉf›ð¥¶†‰­¸PõdÍÏÓš«oœœÒY!åܔѵå%é õrʼtîPËøÎ_Œ·óaT5 æ¨s‰7'ééL¸šÎÉ|ùo' sÈÇçw&,!þõááÅG&øžHÀ«G›šrÂUN¬qQɵÆ)ørtÉŽŒ~‡BbãÞ¬é“ñèyNûÛ—ß” ðí‰SßþòöhC¢wwqÈ~p?ô=úuþø%‰§}}Xï:9³= H@*ß߉aVñá‹”¼~úF®õþ˜NZò %v×5Òp$ñ 9Ÿ?gêZYi½’¬»(ûø¥¬1>ÅB$÷tÙ”ýÏѰ,nNØžîïfXÊxô£ÇÉm\Gw“û‘SèÑ_áý眊¢%i?>L.^ D¢âu«èéLÝ©y°æ7ôAëÑék™xÎÍ£7ÈÃ'–Š¢½K¯we‹|É[ûøtÍü”ØiúB'UQ P­–]99¢È¿Ÿ¾’j§)!¶£TÔÕ(˜‚’"‰bé³b|gu†œNÏ9ÿŽTys'ˆ%ðIRTRÅÜïG¿s‹IJÊò¤Fø[žiIi¥A3ôÉ 1¹þ‡Ó³²r’º¦:ÈÎÌ©^Ù™¹@¥VyÙÝß¾5º÷¾ˆ‚¼3ÿÐ%,±êY™9J††jÅ©o¬÷»ž?þqâU YAßnìÌá&¹aa‰UGQH,-õïéiOe)éuNz"’N-\ü¿6˯½‰MÍÊÉþ¸¹ §c`å„1 ™,(¯ØQTPXíêÄdMMçÝÑ9œJr ¨µÏ@µ]~yGû{Þ£·¼Êƒõ楴÷ð²|söò‹+§ƒ5FŒé)W›Ëª… ¡Åâ¥$e‰ª>ž’XZ¬ÊÚòëÅÇÉhã²hï•û/nø;å¿‘ o4P¾FY¾>z&èÜ‘ÇZc¼ÿ-ZŠ©:¹Ø|¸˜@{tʪh§É}ã6Î:_yVémGîx™SÂ/Éüp´7ŠÞËÞš :viKÕCÀ0‰|b,KKí´D_<ñ}xQÛÎŒÆø[žÚºÚŠƒŽg°¢ðÌ?t²y¿~q×/¾­2æÞ¿ð°¤ë@ÇÊf7žUÚmĨÊ‚ÓàHHZÚܤ¤¼Šë%%1õ×& 6œ?K¼ˆ”³s'¬=÷üKj¿ü{úûK®Ç1-;TíˆPÚ jºwÝÕèB~iúË]›.§ÖÙŒ‚¼Ò2‚JWPP âœðó~‡ßŠŠÄTSÁ’#£¹Âìd# ³ò—®Ç——f†Ù|6æ§g²¹»·møöEGB’Šø¼ü¤··û®¹'n.*ÝÄ}ïõ­æw'º¯z’MÔ“—¤ëêe»wš˜Ù¨Ñë}"H1ÿg„Åç«Ï|ÊåórÞZ},ÁÚm°±n©ââä?Û2ÙïJhBO@@xß¿×,ŸzìsˆÙ6nch{¯ñ6•ˆiôdñún0€Ò°Mã–¥Ž;uúÀ©#ã–xmý(#+½sÞÎÀØü²â”ƒSf_Ó·ÜU”Žc'Û%÷;õ)_–ùjצËE½]50I|RmÇ{·{µ}ÙŨ²¼ð£ÿî‹ééãÑžÜ(ŸâʳƒçÔžïü¦ïy–PÈ/ËKx{ÕoÌâ\hÝnW~`ŒÇ–Q¹eå%™áËFL½k°x›¯iåUËË€N¯Úµkh$”n£:¼Þºäì—|~IJІ•§“Öíøuþ,ñ"é ›å©ñnçdgKC}³¿&Îý{Ó¹ ý•«%¢t˜yd§cò¦í,\6¦Ø êH¥Õ±Ò.¹íøusµùt36´°,´sÅ•ƒ© ˜1UûÞØvÚl—ýIP}èšÍÉ~Žm -‡lNì:ÀògŸ$Ãq‡/ÍÕx¼x ¥‘©Û¿·pW/{EñÇCÑuÙvm¯W3‡/¸“®[g^Lµ¿×PF^‰§[ 4ˆÒnÚ±££Ç=¬ ºN Ÿxü°‰TºbŽ‘ÖÃÓSåÙúQ=ÚuâŸ;ȃ»FÃÚw*ý&¸38ß{Oô4«(IwÀ 6/î÷Âp†1œ¦C@2™|áÞR­»3zê)«›÷›}5¹¯ÓrðùÝyÚA‹œŒ™ Eë1×ôÿ{þhew…*…† pŒDªVÐõGRJÇŽN]Û[G™ýת4§‘]×lÌÎs¹½ÇN7Íz“fffªªªR(Ö[tÊ‚tŸ w½ßaßüóZGñãÙvÓ¹ëBWk}«oöô»u–‚ß_ÓŠ¶Å\ñ¨63ÿâg78}sä~'é½rBV|VBd\kë9îñ‹=*ïhÄ÷oܺo5»ñmWŸª‚#õH0 ƒÆgÜt-dÅ?u¤ùùùÚÚÚu;œ|áÏjyI‘uó¿ÿn}ÎüÎ+øv×Ïï:yà0[YW.XuæÀ=úŸ­P¹„|;·ÿcÌŒ¡5çô“ÍõW ¼&Íø²â³’ŽÛîý£ vzÿ(üÉÌ?5DQ­ë¦ìA+¦ØÕh*5i$RäÏjFII£wù¹ÌÈÄ´¬\VŸ\õ—|sÇÔ(ø§·‹ÑÅ{ׂ^õ ÕË.Ãö•L;¾ÂþçSE±öû#åÉŠÏ`¬!Ç~ÌÅTÇß.ß,‘H $^µ@R·›yøÁÌæCjÐúïËÜßÜQ45_>=6Ñd6wˆßê6"Z ¨*·X„†¤~‚ÐG´¬ Yt%¯¸®Yˆf„ST S­ YRô‰ºˆÖ€…®êÞ‡á3ûwIâ¡÷A·4H0èÔÝÞ[ê©JÑ-/Dk`šcû}O¾Î?„Öml™X²,õT§8 uˆŸâ‚€™y!™‰Ix!™‰Ix!™=mD´bcc¹\nAAAs‚¨&“ibb"EŸH¼­ØØX*•jmmÝÜ Ä’צMi9Dâ…h p¹\ggçæŽQjjjRtˆÆ¼­Ô[” ¤{šx!™‰IZ°xU]/^üÚñ¿èð÷dD MF /™¦‰ô®eÊhù»5¶Z,KÇÉ?¦‘köÁœÓîl‹¥i6;/è­•ß)^Dîû3+½úÙ˜°Ùú涃}·ÜŠùÞ².Ã_ÛÓßpÌÅÑñ §ßMº4¶æb-Åmã#©¦æy)=ãÉ<³F.†ix]Iϸ7ÝÝUåÁ³ (†aIiÌu^Õoo.ÔAS¡Èî2b}`&ñ‹Û›†ßVG`nà’Á®Ûb,fŠHLŠ}}eÍ êËO‹~W¢V¨ö{’–ÝöR©vW,ÿ´Å}Üu­ÏÓó“îNGÜLj'~a{Sñ»Ä‹¶gù9’÷‘“Kþ鬫L£ÒU »›¿oÕ`&†Ÿš?¬»¹>[ÏÜÎmÅõ8^½þ*aÇç¹ÚµÓ×3µ²àü×ï€ÂKžº,KCC[¿}o¿Giµ­±\KÆòЕ];ÎuWˆ¤ƒƒ GžáÔhjÔêœgªÃº°ïfšj°Xl—ýI‚jý;AFÐÖ –Fl¶qgçI;_dã€Çø; [µwö +6ÛÄfتéÕ{]uºf_±kFÿÎÆl=óÞã÷†&¾ÞïëÜɈ­ßÞqÖÅØŠn—¸â­=ªÚ W3’:*¥„Á¼×{'9w6ÑÕ7·u™¶ÿun}õ¼ž³R¦üÍÉQ=lôhÇ”S·š¼i†Yȱó‘xƒ·7¿I¼ðاÁ©&.íkYy‹H>7eôN΀]AQ‰1O6Û„/°5LÂñ"éÔdm)½6Þˆ}}yçð;¯x0GKãp89ÙÉáWçk?˜5ÿ|ZÍ £öŒ’P«sÚàƒOWÙ(ôÛ›Ãá¤ß­ÞëÁcùøœã΄%Ä¿><¼øÈß ¢sZz?ÂnK`dbÄ5oòÅ…[ƒ«½„½N·Âìbúìxº»{ôÆQýR‡|ûÂÏì劵7…Ï:Äo]QýL½‘480Á—£Kvdô;÷6`MŸŒGÏsZËBër>ÎÔµ²-\N6²î¢üíã—²†noº“xùœ< ®©^ËîðØk'CÚÏÚìk§«@“׳Ÿ¿À¥àÖÍ-x‰Çœzm:sÛ|Gc&CÙÀÎë¿ÅÎUùÅhê†-žØáÝãWÜe”ñÎk ˆºqù³Å´uº¨ÓZݧ¬õ1 »|;Q¨Ôn¾+G[ªÓij=\­¸QQ jgSm}—¹[¨ÑätG8h[ï¥.¦Ê4y£!Ã{’¢#⋷ΨOýa4:B“S”§Ó” ºy¬_åªUÏHÙtö£Ô]ЯB~ D1·(*)TœLAI‘à•à ÜÞt·¤ßTHª,U›KÝšú…g¤d”½XÜIsqå&LÉ]²çixVz6ÝÈ„]ÃgiÔåõ«÷Þ~›Í-Ç!4»þ…`ÖŸQêw^"'‹C70Ò틬o¬8Y90`LU¦ð ŒJ§@Рs)«ˆ² •Ê`2+˜B£à¸ˆ/^⻘¨ ²ÿFF6›rÀŸï¿vT¿2˼§ëäi#;«¶ÖÕ¼e’¢’"(æV>Rƒß¹Å$%eyr·7Ý9ýM-/²©ƒƒ^ü½á?7"Éš:š λ£s8•ä$@“È­[‹—Ÿ^­µB$Z¸øm–_{›š•“ýqs/ ¬¹žL­F!“åC*DQAáOJ"Þ9†a¢õéj@ÒÐbñR’²DûÂSRK‹%aÉ‹u+!âŠWlTb ¡±‘ü£Ë¢½Wî>¼¸áï”ÿF.¼‘ú-Œei©öშ7'¾/jÛÙ‚ÑÐíMáï°§ÙÌòƒŸä½õîçŒâr¿ )ì¦ÿÌuw ÉæîÞ¶áÛ I*âóò“>ÜÞî»æ^±D^Éf#Æuÿ¶w¡ÿÓÄ"7%ôÌâ­eWZFPé Tœ~ÞïðÛŸGxkÍÈFfå/.]-./Í =²ùlÌO9Å:'1ÕT°äÈhîOÝ>Šù?#,>X}æS.Ÿ—óöÐêc Önƒ%›S Þ­„ˆ+^±Q‰+„FGRþ³-“ý®„&äñ$a€÷ý{=#ñhÀþ÷BµïÝîÕöe£ ËòÂþ»/¦§G{rƒ·7¿mª¦Þ÷¿;W˜|ôß§~›îîk©Ã¼™€d8î𥹴42µsû÷îêe¯(™W’Ñ„Ãççé/îסµë†]\ìèä¶ã×ÍÕzäÓÍØÐbÀ²ÐvÎ6TÉ2L}èšÍÉ~Žm -‡lNì:Àò§œbcjfLÕ¾7¶¶F͇q”vÓŽ-8îaehÔub€üÄã‡}L$<§u¸•qÅ+.*q…ÐøHªCëáé©òlý¨mŒ:ñÏä¿Á]õ›˜sl ÃCNçs/ g`Ãù`:€ÚyÉ•ÓÃ2×ý¥ÃÔ°Nº|fjhøö¦³ó\cnï±ÓM³Þ¤™™™ªªª /ET§üÝšÞãò7~Üå$Qg¿~oVõô*Øôi·³Äþž>}êææ&•½#šŽ€€‡:‚üü|mmíºýÌ ÈŽ¾€&2#¤Ì;7Š-­Ÿé ’BËÑêAÍ(D£¡v]ó&kT\a^WÒ½¤â ÑÚA-/!“ ñB 2 /Dk@EE¥¹C@ÔtO/Dk€Éd†……5wˆºx÷î“YÇOQ °G´LLLâââÑJ-´n#!).ˆ P·@È$H¼„L‚Ä @È$H¼„L‚Ä @È$èi#¢•ËårÑT‰– š*@ÔNll,•Jµ¶¶nî@bIHHˆ‹‹“âŒ$^ˆÖ—Ëuvvnî(u¡¦¦(E‡hÌ Ñ@½E™@º§ ‰Ix!™‰DÒ~ÃQg…ëKWùükð"OMîc®«©c¿õkcÞ‰ŒÇø;Ž l¥ß‘vt¨áð“™h2DóƒÄKºÀ¼Û›ýbœÎDff/êЄË>IƒÆ+µòwklµX,–´ÞaÏb±4Ífò¢•#Uñ‚¹çF³YU`>×è+C¶À¾D“:õê¢, w’áô»I—ƪKaÅ1LÍóRzÆ“yfÔkLÃëJzƽ醲P~­…òàY Ã0Œ¤4æ:¯ê7‰7—ê ©ÀPdw±>0“øÅíMƒÔëÙ`ꌊµ™Ó/zJãÊ!`Y)F¯e¡H¢¥Bµß“,€°ì¶—Jµ«µüÓ÷q×µV<¼øÈß 8МvEg ÛjIþµÓ±;Êš ˆäsSFïä Ø•ód³MøÒ [ÃDã å¡÷#ì¶F&F\ó&_\¸5¸¬ú>‰¤S“=¶¥ôÚx?"öýõåÃï¼âÕé°!’ü?§ÛãkóÃu.ñæ$= WÓ9™/ÿíD‘(|9ºdGF¿C!±qoÖôÉxô<Jv˜Bÿ×^wÜø8*þù±ÄéÉ3Ϧu(žÔ”Ã?Üà1‡||j9;xôß÷4æßŒˆÿts¡fððr‰Ê*ôQLŸO£ãBwwÞ8j _êЃ/cb_ø™½\±öf.¬ë¨-Èùü9S×ÊJ´Ž9ÙȺ‹ò·_ʺ½é"”ºxáÉëPFSî—@±š´ÒËJƒsãòg‹ië&tQ§3´ºOYëcvùvbUa.Oåòy9o­>–`í6ؘ $]ž5ñ¬ÞúÓËz0++/ÙÜÝÛ6|û¢#!IE|^~Ò‡ÛÛ}×Ü“lÎ&Ùlĸîßö.ôšXÄ㦄žY¼5°¬1«9ÿ%?uäâ?Û2ÙïJhBO@@xß¿7`L<¹þÈ»óþøºãIv#èR¡¸³C1âjþnÏÚ+QüÒ´þ/¥JéùQà Øÿ^¨¶ã½Û½Ú¾ìbTaY^øÑ÷ÅôôñhOnðö&ã7N§¡´›vìèhÁq+C£®ä'?ìcBéNßOJ¸âÓI«êÓF’á¸Ã—æj<^<ÐÒÈÔÎíß[¸«—½¢dû"M8|~žnðâ~ÚX»nøØÅÅŽÞ(‡Õœÿ’ñ¹h=<=Už­Õ£QÇ!þ¹ƒü7¸kHÞ¡öf¾ÔÑ̸óèãø˜C{Æ~%Bqg‡Ò~ú‘ÝýÓÿsé`d1xsFŸ¡]¤4¤qG"0çØ@†1†œÎç^ÎÀ0†óÁtµó’+§‡e®ûK‡©?`?œtùÌÔ6$ÐðíMfç¹ÆÜÞc§›f½I333UUU)4^ÚbÀcüûõ}?íË·_Ð`éQþnMïqù?îr¢IÇß›U=½ 6}Úí,±¿§OŸº¹¹Ie# ÀÁÁ¡Ž ??_[[»n?s²£ƒ/ ‰ÌióÎbKëçA:ƒö'5íÜlDk5£†ÚuÍ›¬5Rq…ix]I÷’Š+Dk‰—,C6›÷$©¹ƒ@ šÔmD 2 /Dk@EE¥¹C@ÔtO/Dk€Éd†……5wˆºx÷î“É”¢C4æ…h ˜˜˜ÄÅÅ¢•8Z&hÝFB,R\! n#Ix!™‰Ix!™‰IÐÓFD+!66–Ë墩-4U¨ØØX*•jmmÝÜ Ä’'Å-H¼­.—ëììÜÜQ êBMM-00PŠј¢5€z‹2tO/!“ ñB 2 /i€Çø;Ž høJD ‚yjrs]Mû­_›põF .B"i¿‹á¨³ X#¨4`/+À¼Û›ýbœÎEÛ*·Ì[Nõ‰¤ý.}žy¼¿8VÒå-ˆÑ2/ƒ&æžÍfiu™X$ºÿãq{úëÜŸ(#K=à _¢Izui^åÂãöô7s± ¶6TõI†Óï&]BÊõÁœÆ&c•ÐûìjÚ‹ë/ )©”\Ûp0‚ßÜü °¬”G£KiÑÄ&¡åGˆhjHz3Ÿò¡Þó9FMª/–x±ÝæºñûyÕçòЕ];Ω‘tp°áÈ3ð'ƒa+vÍèßÙ˜­gÞ{üÞÐÄ×û};±õÛ;κûCaч#S;±õÌ{yþœ-Ü, ?5Xws}¶ž¹ÛŠëq<@…ÛÓX™°õ½¯—VE´u‚ƒ¥›mÜÙyÒÎÙ8…—<†MÉ89‚ÍÒî½éSµE£kx;ZË…Á„Ÿçj×N_ÏÔfÈ‚ó_¿Ãz"\µwö +6ÛÄfتé8àß™ê°.ìû£™¦,Û¥êe?E(~œ«ö=¼×{'9w6ÑÕ7·u™¶ÿuîO7m´b6¢”xL±×ü¥½?íØT(ùØqy裘>;žFÇ…îî½qÔ@¿Ô¡_ÆÄ¾ð3{¹bíÍÊ‹³üÕµ×7>ŽŠÿpn,qzò̳) ’ÏM½“3`WPTbÌ“Í6áK'l ãW¤¿ó±Û¦G‘©)'\å~ì 9äãsŒ;–ÿúððâ#|O$àÌQçoNÒÓ™p5“ùòßN? UVxKþŸÓíñµï‘H:5Ùc[J¯÷#bß__Þ9üÎ+^݆ްۙqÍ›|qáÖà2ÚàƒOWÙ(ôÛ›Ãá¤ßnø£úÔabö(ørtÉŽŒ~‡BbãÞ¬é“ñèyÞ—=ˆÌSÃ5tMs‡I{^5ñš?K¼À4‡þ;Cç¶ßÁÏ÷©¶¾ËÜ-ÔhrºŽ#4­÷RSeš¼Ñá=IÑ ír{ï•Smµ ®¾k&¼ºr?­<öÚÉö³6ûÚé*Ðäõìç/p)¸uóc9ŠÕ¤•^Vôêg@uãòg‹ië&tQ§3´ºOYëcvùvb½EÞ(ñb÷ˆÇœzm:sÛ|Gc&CÙÀÎë¿ÅÎ ¼®©Ý|W޶T§ÓÔ:{¸Zq£¢2¤0‚!nN§Ðäåé4eƒnëW¹jÕ-#›Î~”²¢ zÈÔB¡9Hçå”&n°þ²ÚeÌ¡„¦ôúó*ÅlâŠÑgÆû]½A² ˜² S¤0*•Ád2*<Ñ(8^Ù‡!ëè‰J“¬g¨‹q²8‚Œ”Œ²‹;i.þáLÉ]t;"ihkÚ‘“Å¡i‹vHÖ7Öœ¬Ôóƒ0‘7¾ø=âYéÙt#v5±ÄëŠcªŠ£Ò©@ HáF*nänSøóý׎êW@f™÷tó)—ÏËy{hõ±k·ÁÆ?7Ñj‡,~d³ãºÛ»Ðÿib›zfñÖÀ²:Ò׉©¦‚%GFsµ; nüg[&û] MÈã HÂïû÷š§ Ø·lx÷–Ùxã}R¯”óåúòE'ózŽè¯Ó„ óGŠdSï•cU +lL}èšÍÉ~Žm -‡lNì:À²ÁOü©=†Ù†/u43î<ú8>æÐžq$@2wøÒ\Ç‹Z™Ú¹ý{ wõ²W¬Ó ¥Ý´cGG Ž{Xu ?ñøaIµ ÔµG’Ñ„Ãççé/îסµë†]\ìè ŽS0cªö½±í´5ª?mll„´žž*ÏÖêÑÆ¨ãÿÜAþÜ5P³K¦ ;øx—g:µQU1vZþÞbÍ‹SÛ4¥À`vžkÌí=vºiÖ›433SUU•Bù{šˆÎÓ§OÝÜÜš; D=888Ô‘@ äççkkk×ígn@vtð…?´å…@ d$^B&Aâ…@ d$^B&Aâ…h ¨¨¨4wˆú‘îiBâ…h 0™Ì°°°æŽQïÞ½c2™Rtˆæ= Z&&&qqqh%Ž– Z·‹DȨۈ@ d$^B&Aâ…@ d$^B&Aâ…@ d$^B&Aâ…@ d’†‰WcÞÿ‹@ uÓ …i€xáx½kØ D£\g0Ã^ ”––B…‹yÿR`Q ÂU¶KKKI)h€xihhp8œ’’2Yòwª#„Dà8Žã¸†††„é ^òòò¿@Hô´@È$H¼„L‚Ä @È$H¼„L‚Ä @È$èMª`oà—¨Ì·qYÍHÒ­–[ušcûZ¿år¹¹¹¹¿9ªß‰ººzƒ^Ä ÑÒÙø¥ §¦hî@šœ•—Cö=ù:éCí±±±†ÙÛÛ7GP¿•÷ïßÇÅÅIøFo$^ˆ–NtFá‰iý ¢õÿ®v­[ïÞÎårÿþûï?á—ÅVVVÏž=“01/DKçm|ÖŸpÝ y_K×877÷Ï)É»ÆH¼2lš7š‚3}•˜Š Â9 ô{Ùþ}G¤¾/I¨ã'Ãõ>Äñ;Qםרnìè8üΕ*…øZH¼2€ðW»Rw›––f`ÌVÕ­v¼})s͈ã·G¢ÆÄÌݼ#“Pìp ÿ;þưaÃnÞ$QZÛÅÞÚŽÑ*!šF¼p‚àg·h&ñªûU-âJâø-wwF\œý˜1éñªt»hJJÝþß7‡ÿçêÕfÖ/"a§£Í“ñÑ·¼5Äiƒ^Wƒæy!d(UÊÊÊ.\8C€ÇãçåVý+++—îîDCK//¿åæ&—`?fLÖÓ§¼ïß«æâ——g…„ô4H.:úöÈ‘„@ð;åg$9•’× $^€Ò_i)oúŒ‰ßÈÊÊ!Àãñóó ªþñx¼ŠÄxVÈ9ÿØšk«ª«³-z\~îS!xî©aê‹Bx €}:ànfÐkÑýT¼1±AB| ˆá¶››|ròߣGg•khP÷ï_qVÇ èIDAT'ué"ÌB¶´T=}35Íz÷®÷€ôÏŸïxxTäÃ9oŽ/rïÝŽ­¦¤¤ªkáàµîj$—’FÕ#Mõ§ $^€€P*¥ee3fNtÒ£áAdegåæår J«þ•ó„$²Ì8lWF¿ŸÒSÃÎÎ5 [Öoئ7Å—!¡ ;híÐAÛK}/ßÞÒW‡ÔÈZ2ñ:Œ›ùä ?/ëÕ SV&/YB²²"[X(ûùÑY,ù~ýxÅÅ?ö80öömó`®ãÀ Q–óÎ…Æç䦺½yõîÙÀB)Ÿ¶&‰B€Òè8òx¼iÓ'8îYXš­©Ãš6s܆-KL@—£Vý!ä½Ù½ô,Éçı¹Î¦jtªœVÇakO혺sÙÉ8B àÅ_š5Ðó–á–;çÛ(7:ÊZà*J@ †ùùùüøq<(ˆ*'§°j•ò† 4EE^PPî¶meÅÅÇ1¡Þ›í‹N‘&Ÿ¹°ÂÕJW™F¡«u±äèú¡LóÏŽPa0rrŠjÖ®+ï¦ûЂÈ-=Ôû/Þáko¦Ådjµë¿øvª° Jä¿98}@'}5UíöÎ3O}æB"?ìÈŒþ–zjʪº\^‰)_GRYƒÄ !4¾ÍUÆãMòë0À63?¹¤¤DKOíïÁÖöƒ»´ÑÖ7Ѫü‹ù’°xÑ*Âò˜À§©Æ.#¬i?œgwGù÷Ožçà–~>8và‚¨þ'omL—NÛP\ Ht©Cˆ8ÃÂhòò4%%AxxÎÆ8A@@èGóøIŠÉ?î6rµøc޹’WRRò½8'úîb­;S¦ŸJÁE{â‡ÜýÔÓÿeBfÜÝÉä³³ýž”@ˆÇ7lSÒ_Û‚âR£î­évãe)ÄON¶5ÛeHbvrÈönïçÞø¦Ln}ÚÕñBO2@C«õÏÌžéÓ«¯Urf\i^?ý¼pÎên¶Ý!„x^NÐÐPǪí—ÌÒTƒ_ròpÈ…?~M±þwd R#£Q‡ K€laÁ°±¡P(T*•ne%gcSüö-Îçã©©B?xnN.`iÖ8´šÐÔ:ŒXî{¢ëƒ—EÞ£˜@³›¶Ö³“: €.ãÜl6ú’†;ð/ 1›ºØÉ„€roÿ¢/}ÙaÞ‡i=uI(8.ZúÏéùW?,ïÚíGÓ«¡%S+H¼2$@c~D ”´„:Ò„¿‰š7cEž}D;bª«Âœ¬lœÐ©òð¾<'+SSW$ ¦é±wyÇL×ÑÄųӭ”¿& VÏd‰ÚËí:vTòó£))•ñËËÕÝÜLö쉟;7çöí²ÌL¨¬,J¦¦¡8YèýÜñ*‰¼°ú_ÿ¡±Y\>! õT@&`L5aŒJ§‡xfZ͸n5?xzrzé³yfJó~˜ÒhŽø‡¿ ê6"d€zûuƒa˜MèÏ e¥¼ZÿÂ^}î»ä¯¿+³LÿÖM¸w-¬ô‡"ïñ•§%]ì{«‰ÚH$-‡õ7Ny•ìvwÛ’'•gu¿Pxj*(.Æ èݻӕ”Ê‚‚86d®__@¢Óå:w.KOFà¸ÐÉÔÑI/þöÕ°’Ÿ]ÅŸ=÷…éê;“9…Ü¢¨íQq¢¢ÛXmàQh‘´ØÚüøØ4¼ª’¦Ž–Bÿ‰ÜâJ¸GÑ „Ö?z)y­@â…?–4~‚¯}o—¸è$ŸWõ¯ŒWö9,zÚäŽNýªe¡v²nTùqŸ)»Çä–òJ2?ß\;qþ=íékÇ‘*ž6¨v_zåì ê)O×µAY‚ß>æ¥ß§Ïëà`v÷îXQQîœ9Ù3g¦xx|ÿøñ{TTÔØ±QÞÞ13gbŠI»vI994UU!¤v³y,~xüØM·ÂÓ¸üò²üÄ·×¶NYy«€à•”Tº‚¼<µ<;ìÌšý¡åšU3„$3÷ñv1»æl Œ/,-JzubÞ¦‡%$óQ>vï·Ì=ð"±Wš—øîÆïå·¹°ây/ÄŸD}wk‰˜è3ݾ÷¤¸Ôr‚•ÈIåq³`qiþœ5NÎ ¢FË °úï¸vaºÆ‹•îÖ†mLm'쌲\}çÂânò•W™°”¬f_¸°TãÆÄaËî¥5r†kC aP@@޶ö›°0¶ƒ•É,¼x‘Àqá=aÆ©S™lÜ®]:—ûŽÇùì™p'êý¶?¼µÈäÃÖ1v&ZšúVCW<¤ Ÿà¤Ljëí·@ëW]¶Ž‹CÚõíFý±ßª!T|ÆŒ&¿²P7h¾½©ÅàµáVƒ{Ð!f8þøÕùšæ;™± ¬þYt]0|‚ƒBM =üŸÁì<טÛ{ìtÓlDÕB šîk¯¯Ž4Áq¼¼¼¼¬´ôøñ}¡á|^ù²ÛÕÔY$F&“©TA§ÓtÒ|¿a&“Hö~×BW»ÖØ8pà@BL à|þ=wwÕääníÛ'½xQZX(/HTªQ»vIùù_H¤á+èè4ýA4 ‰tÿþ}ggçº“Í ÈŽ¾€ì2„°‘ïóÂ8¯ŒWRR:|¸gIiÙý»×!¥%%‰D¥R'‰D&‘›í¢ aõtkÏE¥¼|ùž»û눈½za8NP þû5-훜œÛÇ uõ†6m~? ЉBø…>E ÈŠ‚¢"CNÇñÙ³Oñƒã8†ad ™J¡R¨T …B&“1¬î MK»®»„úuäÈÃ÷îÕøJÃÒrøÝ»4eå–¯\‰¢õñk?ù™L"“©4šœ‚ÂÏß6Ñ[Ã$§1ÇH¦Ñ߸!Å`Z>H¼2@ã[^2Á/·¼Z ¨å…hUX²aX#Çì[8dI@V†¬Ÿ¿RUU%Ã0qcö­‰D„ªªª„é‘x!Z:uÕüïœ; ™ŒØøyì- áÿàS'}µŸ¿d2™_¿~mß¾}ƒÞÕ'sÉd2%LÄ ÑÒ™Ù×b×£ˆå—C?$qš;–&ÄÊÕI_mº“ÅÏ_™šš~ûöíýû÷ùùù¿?°ß†ªª*“É455•0=/„ 0§_Çæ¡™iÛ¶ms‡Ðâ@3ì„L‚Ä @È$H¼„L‚Ä @È$H¼„L‚Ä @È$H¼„L‚Ä @È$H¼„L‚Ä @È$¢ŸÍ ÈnÞ8¢APÑÁš; hÿUŠñÅô‰ö`IEND®B`‚pyspread-1.99.0.1/share/doc/images/screenshot_chartdialog.png0000644000175000017500000037672613604430122023774 0ustar andreasandreas‰PNG  IHDR$rºÈ“ pHYsÄÄ•+ IDATxœìw|ÕöÀÏÌöÝlvS6½‡$„ZBB¯ŠAŠéŠ(Š"ˆ>{}Oô¡OAü¡€(HSE齆&„@HH%¤÷d7[gîïÙ]6›ÂnH$âùòù„9wν綽sæÞ;3Taaá¸WV‚ ‚ ÒÚ¨|ü¨„éï@Ôà©÷;3‚ ‚ iG·,žS‘e9E!@cb ¢ ˆ"Š(¢ˆ"Š(>à"Ï=,jðÔ´£[ø\°©œó´È¿„r@tDEQDEQDñ'šÊ³øaÀÍl!Üi ÀìqªÍ‹Žè ˆ"Š(¢ˆ"Š(þ3E¾å€!”ù,átˆ„ (K4\$QDEQDÅö/zþŒ­x׸, @SÀKÍ–"4ev°(vXg¶¬‰Zum¤;bSá(¢ˆ"Š(¢ˆ"Ší_l^ç®q)  S°û¸þ>n2‘€§72E•ší'Ó¯çVRõ5­G¼€˜Áž!]Muå@ Ü’#Å؉M…£ˆ"Šÿ‘ç9{n¯gã”uiÅYú¿À.Ü'öã±aýÅÕGnéí1{nì³qJmZQ–¡‰¸<9V}{ª:QDñ¾‹Íé4(šGÍMì:¾„ÒEÌçÑÀçÑJ™(¡£o€‡ËŸYÅ,K(°ÄàË<ÊsR,ˈ„˜ÿX¿ya 4Á³+Ž[ÕÌŠ(¢øŠ”Âß7±§OW‰R@túÒÒâmûn¥3Ä¢÷—äÊlóŽHˆØ¨2wš´‡šDEÛx·¡¦©¸ïÕ1Ð@QT¯Ho©¸×gÛΡÍÚhóÿ,Öœ¬Yl‹AEL<:v|㱃<õÇö\\¼êÌ¿wf&©ieÖ‚{4DIFL°êž³‚)‡âr°„0eß~süÙ•—ÕÜÍнgEQ|ðÄæuš‰KHl”çi=·üàÿý–l4±`0±ëöݘóÙ^ˆòˆôKR`ñ¦,{¶Ì“d„ÀÀ3_nÊ­!f50û|(¢ˆâ%RbÕ¸þ*7ÊxþDÚþ<Ж”<\@%ÀSLš9paL¥·ooÜŸsC @»M™3TN ŒÁPTP²ûxöÅ*´Çìgºô[S|ÖèÕ׃à'Œ$ûÔùÿ^Ô²6Ùù=9$°«»€ÏÝP!„%`IŠ®ÞºáòAµbÊÌn ̱– €Bˆ@é5ª_`| LÁc«J+N$eíËÕ12ß@;W®¼u¬ši7­€"Š(¶ØHàꃟùòèq£±¸؇zs*1¡^W²ŠWï"sGuY³+åjNñÀó©‡{…ž¿QHY'³ÀþÕÜfz € ( ÐPl*EQ|pD¾¯Gg Sur®…úgÍ’k×—ÒÄ$öš<±KéGç4,S¹åûc[š¯ ëðRbàÓ#Œ?åX¢”§§-?TTh€ÜÂIq|˜3¿Ÿú.ÇâY²A‰<''†ukÿv~—Æsæ¸ÈîRóHuÇ<1› xªp«¹[-B÷ÉEÕÞuvWµÛäqÇŽ’ ·_ÜQé>91¬»¤îèÎ ;k=Ÿ×!Æj¢Ý´Š(¢Ø6b½À5/ €Õ Ï]~ É¸P~ž.ÜØ2{dç-‡§SóVí$)¹%}£§ äNù{È-u¸ªïyBˆe4[³`ðš—¯yi0'BÖ¼4xÍKCÖ, pG‚"Š(>x¢H"€Ñ¨65< lÝù+¥%Úº›…:à&Ò¶I±¦ÒìÒL#<Ý"e”5ÊÙ‹E…bIêÎÈc— qww°eÅGoékË ç pžM´;q‰©äŽ9°ª!’P¿xWŠ--:œ«¯­,>zSGxÒþ²@ÎDÑá]MYÁ±1'ÚŽZEQluÑ.ó´8¸ã¦âúxÈÄBEEHÀ›ñPÇ]‚þÌ(èæ3㡎"ù”XÈ÷q—sq­Ø½Ô”³;s–ùváøö¥!s–þváPNsβ#`ÊX÷飈"Ѝ«3$ŒGÀTÿ,7\“ZG€cÙ”@¾,¾_‡Ä…·”ǧ) X¾T@ ŽÓ0ªµÜøec—àþÝÉ-‘ øDgP³€¨µF|«²Y‘“6aŽXt(™@´\RTm‘€D*ºÉ6ál­ÅWºvÒ (¢ˆb«‹¶káD«Ÿ³æ¥!s–i4naY­ÎÀˆ…<Ê`bÖîNIÉ)éìuîÆm äé‘]Dј²j h[{æ™-B¸†ÛëÀ¹^ìì/sg­žÖì/·[ÌF EQ|ðDc~Ù5-¡xŠ˜@4T6œhE¸Fu˜ÙÃÃG“ÿ¿5G箸šd°5f¬ž!°9[/ŒFc0Pb €ÈÄÊbÂ6)¹ÕÜêcs¿J¾cîN®˜šZ½ €’pI±2‰€R§Ñ—Û˜ f÷»ÚQDŶ­ßZ<­ÙËs–âÄoi4.KØü²ZnˆÙ|0-%§$ÔWù⸺§ä”¬ý#€Àí²„‹Kˆy$ª·Až›C!Oqè»EÃ̹ùü¡€ g-S`(¢ˆâ)]ɶÞ†«bEgkÓŽ™dnŠž1ÊŠS™—ŒæáaáÎh„E0¦:†ØÅ¯“Àœ²õùfn#(bÔè Z)a ~6t9Å—5ªxOïAA…;ÕžCù”ypª—e5ÇÒ]ü  ÍÎOªñ ò\ô[•rH„˜b4'S*Õ•ôŸU‚§÷À Â]jÕ`ÎÖ<¼¶‹V@E[p³Ÿóô‡(b~§Ãù9@h$.PûÎg??¶GÆpþÆíž‘þO<ÜQȧg<Ô±NgLÉ)榽糀pÓZÖÁÑâlQÜèb€›2ã^þõô¿[4üéÏÚ…£ˆ"Š´HJS’ÿS8*Öwøè>…`ÔëKJ ä¶6qƒ“yr˜G*ŠT¥Þü) ÓØa<nÁÌ^’M$B¥ÿób^‚›ÔÐ~ß1žØqâûlÖš V_¼y·D4-scIQáÏI7÷q[ÂÚO&QDÅV›×iÖÏ1‡°„$g•\Í.a¥ ÍR,EÌó\Uõ—í^ývo.´Í±-:@Š(¢ˆâßF4Tmûµh[ý1ò¾ç EQlS±IƱ¸Ä"¡ŠPPoç{ƒ¸öŸëáγ`ñÇî*磠ˆ"Š(¢ˆ"Š(þD3ÖeD.”P„Eâ€Ø‚((¢ˆ"Š(¢ˆ"ŠÿÑŒyƒ¼®²Èì ÅDAEQDEQ|ðE±›ï òë^‚ ‚ Hë±p[ Ø}ˆAAi]ÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCÐÙBAiCø­•V«Ý³g^¯wPŸþ4±wï^ÇM°,Û>K&þQ&°Ó:HQQÑÍ›7Y–uPŸ¢¨ÈÈHõoßÖíÛ·Ç`0 ±„òà.×Z.Œ†²l¯„ž=C{ÓÀsÐDmmíÛo½lÔ•Q”ÐUîîË¥&l•M&&ýæ©“¦õèÑÃÁô¡-{ÔŸ©9Ð#:ÄñÌ È_@«9[«V­š3gŽJ¥rPß`0lÚ´Éh4vìØ±ý›Ðt%ÕÅAªà{7±zõj§Ja47mÚd2™¢¢¢ŒÒLE•––¨T^v\) Cttô½›h”¿Wsÿ&¾;°FoÔ'Æ>âjgbͶU7J®÷íÚÏÍŽ&†¹vãšR¡ j­R|óÍ7sçεšÈËË ´U`fëÖ­ÙÙÙÇïÝ»·ÑhܼyskuÚÖ*ES&RSSíù-0ñË/¿PÕ»woA}¤†9sæ ˲&LpDìØµYYs¼ÂÌØïñœSnå %ú:j8‰øfR»ˆ¾Þ«»{Göu0K³§õ_øPy€‡9ñ£Å!5ÑÝ€˜$½zÄÙ*«Õµy$ëÓÕÿ}nÆüý8h®GÝÇ{”B.u0Mù+igËd2xxx8~?ÇçóŸ|òÉõë×;8Ý_×n]½póÜ“CŸ Dv&F{ôÇÍ?¶Ø„F£Ù½{·Á`€+W®tëÖ bcc­ òx¼'žxbݺu^·š)Eòµäßìx}Þ›|~½vçóù»Dmܲñ£?ºGvܸr¢<ûpmièÄwÚas „‚ÒòÒÒòR.Ĩ¯“… ÕëÄR…>˲‘‘­U µN­7ê FƒÝ)>ŸÏÈMÙU™ÑšNŽ8[v&®¥_Ûuêwp!FƒÑ“VÍ?[$ÙEiAE¹»»3 Ã…xzzZ­Lš4iãÆ½zõb†¦é3f¬_¿þÞ;-Ü̸ɰŒ»›»—Í}Â=þº×lZc :îTÒ±¤¾Cû€Bä:uüô›€šššgŸ}Ö*B «(«¸ª(Â/òÔ“ðXüxÛX¡¡¡_ýµƒ¥ ý¼€;áÌ7eµPBðœÉ«¯:èl™L¦ EµÕÓW¨ª1'jm­¾N«‰Å}FÇ8´ßAg«aâøÏÿsñÆ…šÊ*‘P<.qÂÜYs­§ïQ®R±#y@¿˜V›Ù¢išØþú<“—Kñé]{wtëÕM)v›?ç¡PhU°ZfâJJrQi‘Þ¨¿põœB%ô ~dÀ#®ò;—É{1aRßæ»pÇ)¹W½Ý|\=4¢G¢­¾‘1îºð»ãéB(в^QNœ8qáÂ…¹sçäUåe¦ûK|”A®#{úã?öïßÿÜsÏñx<.W-.ÅÅ3û»Å 弫‹7.ˆý…›ÛôÄø'mõ ‹ 'â œè Û¢Q* ¯yUüŸ¡J¤×ÿ˶é[Ñ„-Î6÷é«'õ¾«Èf¦rß'‹zõ˜ðrNVNXh˜ã3ÖRhòöפoȃ={‰=G²„x+¼–1Ì;,#;S*rôÝj‚²ûÔN¾ |OMjwøeÒ£SFqª¢¬‰[C š* ‘9 BˆUí^:­÷ý öŠC¦a~/¿nµ±–U¹c#mÔHj€Õ°vypÖŸÏ·M!½ m×ùߢ; x‚äœËr‰kVQ&B>\þ+b º¼úçÞkè7sYpnk.!Ä®ÐbVk=ÖÔvú55Õ™˜¢(Æáû¢†=ª¦¦zÌô1.J™@È÷ õUW«wÛQ[[³èÅ—ï±åéîê`6䯤uœ-Ö'êtºo×­Œé70’RO)ÂåF£þÍ¥oŒ"ndÏÎ=ïÑ„I}«`ÏX¯ÁߊU½J«KXÂŽì5êÇ›2 ÒÃ}#¬Q'ñ ÍÊÍqÐ7vs&:$‹g=3kçÅß”2·î¡=+Òª‡Åý{mînÐR>#¦~ØÐŠS&ø¾P|Çd<©ˆ‘'‘Jìô¥Rɽ”ÂP¥¹µWèÞ™C½Ã­y¶‹õHÏG×_]ï£ôuÖD~A¾ŽW'wŠ¢ ¤¦¤ÑÜ:UQ\´m‹êÂë×zsŸ|þ á³·rssJ²{uî5â¡GÀO¥ù% …b!ŸÏ³Ëó½ DË•p9,),-J+F[¼iÛÆiîLn9e‚ûÚêÓ-Jø4?Â/ÒU"— %cz“Ä„¹» qe€°\§rägβ¬ôœ@@I—únáÂåìå(r ¤DOÕqñÄÍ•p«½Tqb™]ˆ‰ºs™0š vg«j«ùBP{v=ª¼¼lÂÌñž~žbà øî^ÊÒŠ?ŽîØ@n½šÉ‚ü]hg‹»eä~<„Uß­î?| u€¦Ì·Ú~]½?ù[hp¨¯¯8yïkkŽŸ9!s“Ÿ?q¶[|O¥›2«$ç£WiF¹Œœß©”+‚ýCZl¤)(>8Eâ;°:u­Ð£GÊ­«ÑþKê6â÷s¿z+}$B)\ÏK©TWï7"ë|ŽãV†!„§¦¦>;Nmé‘á Kñi>WF…B1tèÐ7NŸ>,þ™S¥ÈL=WvòYyVæ¯ìÀI‡Ï–¸‹@$»v$8 Ä[å ?íÜb”h (ÊѺ²k H»–¤©.æ‹\bz µÕd-C³è¦ÀÃì(ˆÜ„ÛüüìäçÎý™tKwK$€3YÃU€Ò”õ†ßrMñ¤ç¦¢´¸¹†[ òóX–€‡§§D"uÖÄÄÄÇ'MšÔðÔ †AZ\ ¡g/¡g/pàšÔb</&°{jÕ5‘D†Ó€¾¹Sßü¸²–W$ üègMXç]8qìØ±ûöí8p mAÔ5j}†–˜˜(79±Ð‚RXI»™¶ëÌï|>O§ÓŠAØP¡Å¥×ëÏ]Lºq-](@~N¾ä¤y£¶ZwðÈA¡P8 ïgM€¥®¬bqu‘Þ ÷qóò…R‘ÔÏÝßUâÊ)d§åòD ¡¥Cúuuutå«©*½kE;5h+æT‰ò]c­KÚtý[2BHu]•«ÂÅÁÄ­&¬ÝãtÒéj]ÜÝUS«6hu`è„'~?Ùm@·KG¯¸û»/ýìãW¿Ï2âÓˆHû¤Õœ-ë(s+?¯§¶gyü;“‘¾´´ÄÓSÕ‚;!.JEMeaIQL¯nE· ûÇõµnw8xü@*?¥øZ /WXTàãíë¬ F¯.>4Í5z®4x,†N¼õç ?÷¾"˜Kª{HÏç·'ç\Nν2¸óP±K ÆbBŸÏçóùÙ%Y; &„ãoç~©q©\äûþѹ‰.:tèéÓ§ìÔE¥¢´àÖ¡Ò|.D!e.]Aùu±UÓ»èÖl\]˯)-n1åÄ¥±©Õ4û@R/Šƒé7g¢¾³•´ùñ0yD/8ÁÙæÞwlo5¿øéû:ø5¹i&“ô ŽèZYQùРa..N\WôE'l*£-¥ÅžÍ¨Õhk*ÕB¾Ð×ÍZ4C`2r裾)~ÙYB¾0nHoo/oBÃ05†‰§¸¼¶¬)/¶l§©.üÅP{»èæÍÓ¦T…_÷ènæ_:ÍãI\$–E4âìÌV£Ím4iÐЍØ_k[\Q…E¼üîƒc¸Sšªº.ý;Y5¯×%k3uýûôwÖ‡m©_;ZXY0©ïTo¥Ö õQú«B¸4Ãüù´‹ÞuHÿ¡àð!ÄSz2Á3 ”ÀëmºÈ…Gƒ`„)øÀKóÌœ—ÎU¥MàßÄ:ál•ÖÒÉ|=%-§¼ª}úHÝ=¬gùt½KFzú ‘›Ðš7ÇMXÿþvhèê´¾Á~2WñÕ3©×Î^ëÚ§ëåcÉ^þ*ÆhÚ±{ÇâEÿ²Ø<ø4"Ò>i5g‹Ó€'°_g©©¬©­RSEÓEÓ…èÀ¡“Ÿb·¿Áq“¡¦²º[¯îUÀú ìÝ=>iÛY^ç£ð¾™}ÓKåí¬‰šôõ’)S%¡“9C’°©¥Œì8x¦í|H§a?ÞÜ=Ð#ˆeY§L˲ÕÕÕr¹œeY^#»²,{ãöu…T¡Ï2ŽöØö³[½•>r±Nœ8áì$Á­Ë›Ú*u§³ ‘¶[ày<ºN¡9¹ÝÛjÂÚÖ îÝhhÍv ¦:¬&.žÞMƒ Â{Y_8[®2žÒ…€Ršv¶-!FÚ ×@¸ ;ˆ.mJ³Dþ¨W€7K£ÑèT)*O?ßѤ®+Š•ް ·»²fÞ<•vÂS®šÔw*Xv´8^ »¶ˆ‰Ž‰‰Ž±ÝHQÔà˜!™Ý{ö´†´ÀS€kIÛëòÀ•ðé6'ªkNA"{ø¸˰TÕ‚¶°ïQ ËØ)Ùõ®›`YÖd0éêÌO#šŒFë1‡V«Ójµ4M …BgMØêû»HE2!_ȲlvqVFQº·ÂÇMVï!S«çAسE)ãgÜÿ ¥„wˆ 3%TóÏ€dRË2¢ÊØÏ]–;¦È(K¦€>9]Ìïw°ÝºHx¸xÛf&ãvºÄÛâlÝ}~­^AX–ÍÎÍÖÑšŽ=#ëªt<–6茽†ô¸pøbH—PŠ¢|BTg÷œSúºedÜ w°¹ñiD¤}ҚΖu·=uúоN†ãŠËGM,ebaÀ`àk{¼Ä0L ÆJë¶0.`;@3&CLÉÆ5¾ÁÜÀê¬ ‘W¼4âië˜^Òj¡_Dm2ãbU“‰\FtéçæÇ™vÊE«Õ^ºt©®®Në¢ÝþÛ6Ã7ò jiMIEé®»ŒÓ¯lÍ£\yy¹³Ë%ÐØvPi¯Ü¾ Qõžýæ×w‹Y‡ï}­m‘“]£® Å\\–e›º^2 ãÔ¶-ÛæV§,íàš ·Ø/¬ ØÙâÒw¾G9ªkkÅñh´H©3±`Ù‡×E‹b!_Ø‚e[QåE©÷wb§Ö½Sîz€¥:Ûi­>D°Ÿ"ÌÏùa‰Ô(]<ïÕ–™àˆ çX–íÐÙß=ÀÝÅüœB· ·ø}m-M4ÞH Í±ãmÑp+¤•Ú"Mÿwö $?-pwb £­ ® —n\4Ô;tŠ ÜhµNs3+] âEõèpñПÆô=µëLXtXQnѯìxyþËö(|iŸ´ÚÓˆÖQ€1Öû­V¤þ1¥w½X.åâF>Æ)·l㈀/T¸+‹ ‹ˆ‘Õjµb±ùV&åä÷]ê®”Iu¹¥ºG´À„À½›í°•Vpƒ0±.ãIÐh[MwM2+“ÒB7kDM!ÄÍÍ-""b„ )yÉ•êŠу@­«ÝY±s„ »/ýÞ#´—Ÿ›?hµÚ8uÝjJ3À˜^Èö¡iÊš ͵Ó<߉‡ùÝEÄ™…®-N^=®Ö@ ¯§e#‡Ý O,—Ig¯¾vû„ì´WVªhz}ôv IDATƒ¡Íí¯ E€Éÿ‰·&×zaU~9èY‰DâT)Ü>´cÇŽ‰>ƒ›¿Ž†RUš ^BÆZóæx)¬s6ÇÖψ÷ÏJÙ¡NÚ®òö½N{åðWLu2_âáÕizpdœmDM€ÍÖ%׈ɹՃ¯¦¤tíÒÅÇ?ʚȧÿù ~úé§É“'sú¶¯8q¼œxþê…}FNÆ­ è«Nòõ䢪BÚÈŸ;å™”ÂÖŸÏŒˆT—Wqs½^Þ!öoú~¥Ð©æ˄͡”ý·Ênè–ÈýŠ9|•~¾J?kž}ƒ}¼•>Ý»ôp¶!B‰°«ÑÜ@Æš4Š(]q@±<ßó̯r1–Äaœ+EÃ@M©¶o·"‘y°½™‘^f*‘JÅÀ0¬º¨P¯Õ5ŒÕLAX–5iLK^ý¯Tj^øS«k—|ùqp¼Ÿ¾Ò”s-Ç 3Š¥¢ðÈ••åÎö(io´æÌ÷UÈ]««ªJ%\½t¡‹[†r1ÚÓÓÓÙKc=2¹ÜÝõ஽c&?~æ˜ÌP Sxi O¹×n¿Z:$(­Jèáîq/&¸€ô´‘ÝÇJ¶*® ܸ=ODò™¾à$ë\bÞù?ä” ëb· íßiÇù_.e_èÜS&r–ºz+ÙȽ]ͯ_:zôh¿~ý¼ëµ–¢Ñð^Þå[sR]Â:€ÉÈðRvO ¼™WõçÙ’XqÇøLB(Цy4ðh«£ÖT"-›ê°øjõmuÎ0}.1"èú´ ¹iÍmø¥½:V€¾2ßKnþQTh@é îæIâÈCsM•¢Xc £¾EñeV͘¨­©v£s) ÂÜÊoßÊôôò#„$ý²(RpøF(?s(‹ý64ª·³&¸îÇéGwM€J­4¶#=ßv ¶e=Êh}çÆ„R!¥RS¯>­¨SgO]ʺƒ¡¶Îüʨ²âò´bîX_­OèÙ‡;võqmYsLFƒIïÈ$¨m‹;R]„1u‹'HO&4˜—Í…÷0ÄËç€2I]oš_ý`,ê+¸tž;f<K¯–—Жêzwîëåe^C¼™‘ž^”"UJŒZ çTI‹ðÐþ¯ª·ã&¸Š?z‚­E©Töþ+ï/ùòß>^çœïýP¯¢Ì’ÉNïÖ¹[ 6l H»¢uœ-nXá~3£FŽúråŠQ¡iúú‘ ³ãê}ýêRžGßÑoX¯‹NMn[MtŠê´uË7ýÅëOüª–{øÆPK¡àTq€«¸Ž)»?ôÊ=š€‚Ê|¹Dî"–ëŸ¨ËøÁ5ö¿@Lµßd ÕÊ!Û‰¶¨æÂ«ú‚}Ò®o;uÝâ>vìØ€F÷{2íÄæSR…Ú½ª°2x×EB´ZíÍ›7GŒáÈ»^) çóÀG›ª†N­Vqs×ð [ÁnúöÔ‘«yåCœ3Ám7ûÝÖÜñžÃ¤_«©¨MŒ°†3 Ó²¶Ø[{Z0bÔ´—ͪ!Ä+ÀWê%‰DJœ|à‘a˜¼ò[º4Û@Iö‰>ç¸ã¬š1¡½úXOådf[W|ZP ½I¯3hy4O.±_æú ryR9W{êë_…ñ.«$Ú„ ¹«‚ œ•\xÀäÒãá} !™éWý™ý 0»,Òº¼ÛB"ãÀù§9ìßN^?»wïNOO¿páB¯^æ‡.[УÖn]SÃVWUuhJÙÖAq¶-ÔµÈ["È-/$»¥òµ¼ú®àzh´m,ggž!#bí² µµµ\Rb±X$uôv·Ü‚ê™5¾æq¼-ìr¢­Ñˈüá~C…–çÒÒo¤—¤Ê”mEy@ÁýüJœÍL£=ŠƒÇã=÷äümVz*k+Õ!ªðn»3›>ñiD¤}Òjo·øžœöĶß~ñ òî¨Èº£@àx†—w¯W":viÁÆ;Žž~yoú@ÃÆ+Y®‡HÍ#úž%†@Eï”-ÙPek¢V[s5ïJ¸ªÃ0|¿‘êkË 5¹uÉPboYï„â4X>`‹îæÚª#±‡>j–!eÙøøø+VÄÄÄÈåòQƒLŒ±VW»?ýÀ¡ÃÁ2¤®_¿~âĉÜq‹Y[bäy;3oFj“ú[y4 ¸•U¹u[¥£ŸNƒ×9Ë”å! >ÏÕGNxöïÙjY[¨ü}8J*q%š«EÛ:á^ÂÔÖ÷¾-0a-ÅÍ´¤Ì3.žczŽbªŠ'Š’ $¬[ún® ãךj²q¶lMôý À+`©œºÚ Oa½‹cªkñ¶0ÛækÔË1bDbb"MÓ¬eï¦S–KSê*1k24âyp¶ËKËwüU[§}ì¡qN½…3áëí[šiv4juN~®P((Í/½}µ@]­‰éc}3GËöà7ºÏý«M_ Üâ:aäDî!DkâŽÿ:Ĭ@Ÿ€‚•ÈYó^{J/½;P¬˜Ñ™WúˆŽÇXÀ™R€ÉhÒ”i•R÷nÁl>²yõZrne†L)Ñëô!¿ÇûU8˜¬‰fœ'w7½kt|TÞ•‚™/kÆÌ•+>óu9žU¬‘xÔñÃyêUËt LˆÄ’øÇ–¦_}ÔWº‡ÔÜ`#-(S>Ö¥ÿ,î}K-3¡3j¯æ]É)Í6±¦PUXG˲@ …£jŽ>& {Rõ!@Ì>%ê0Gà=vvÐwEá²4oÞ¼µk×öîÝ»G<š¯”ºcÎmuuõ† ¹õV§ÜBˆÉhjô”§ 3¨tw˜_#V˜›–1Ö9nÂÜ\®±Nqq5oÍ«µ!X–mñyÛuĬJH*z£$Öš¸ó¨šS&À¤ªÞuQmghÍo¬®ÕòneäZO••:[ŠiG5®µÅÕE*¹—ÝTkõ¾A¬±Ö%n…Àw˜],¾÷ Û¹7½%ì"j´¤‰¥®ðèØ+)á.79Ñ`__«¦SS¶&þøãììl±XÜ·o=ïœ{Ý«µ¯:õµ%ûÕ„ ú2^qµ®V¯×Û}ÇQQQæëefejÄ»\”.ùy]ýªòj¦Žš ¦vœòçþZ¿ýqµ‹Òh­PÉ@À : Z!„ÄP†‡yàbtª4û:úËzQ^"¥~7ÿM<#o§Y¼ãhX–õtQK#"†EÚ¾Ó•eÙ§h5R¥ÄYGí<-Öámav=ª!SÇO[»kMߨ~"‘تæ`§‘öIk~®Çî—ðÜ ‹jÚé8~ïÛ¨‰ˆ.¡Ë@;Í{1‘Q|³£)ªO‡~Ödz¹ÔÁShi0øñ†¿vÊ¥C%Ù§Õ&“ÉZ 7wî܃nÞ¼9000""B«Õ^¿~=55U£ÑÌœ9ÓÅåÎ>$“©qÿ©ÑRèöoy¶¦j¼6¹×¶°¤S?°þv«{4A€¸¨ª<àWÕ›r°¾„É)C†NxÔnVr–õ(¶±XN•"¯"ëôuÄ…Dút ÷а›)iÔ–öøïùë›b={8XŠ¦Ú‚Ïøõû(ý̧]Š<ÿñ=z·j:^ ®ÓZ¯y<òˆ¶¶Lêjÿž<–eR3S;Gt±fÌ©NÛT){§À½÷(¡@ -ÑÓu<½Z_W ÕWéÍ€ã&¬¿VF³}ßÏ2T+xÒ;¯á›{’†Åq¤ÎÝNpN6wXhxTT½oo—]¼zNèÉóÄÀ²$„äÔ·åÄ‹ìz‡ít MÓáîzÅÄÚÖÁ…O#"í“Öq¶x<^NNNuuµB¡¸»6°,û믿FFF¶+½,T®Ù›àIýyÁß» 𦳲²Ôjµ\.Š¢~øa(((ÈÈÈðõõeYö±Ç³ý& ˲?ÿüsxx¸ã¥È©”U¨+Ý]ÿ2¬<À6ÒÑÅPk[X†KŠeY î —¤Áô !dûöí-kn›wkÙ^(°=Õ{T×À˜“§NÒh ¹‡ ,¸ ø‰° Oês&š/…oPgß uuuu‰ÄÚ:-봆봠/Ï‘)ì'Þx<~—È®Ü1!dÛ¶mÎuZÛÅ­J[—%`ùüò§Wî¡Gq!‹g½ vø³GF\[g+Šsþ!&“©R]eâ™@[®c\˜4 UÍ‘¢‘ww9èlñx¼ü]mȕШj ×â Àf€¨°0KAÓtQ~‘º¶ÖE.FsárR-©’zÛ¼r‹>eûâX}˜›0´ajM™°ëQ 6`¸­èlBö•0ýý¨ÁS—MthÍ¢)jkkÓÒÒN:åø—ãŒFcddd=üüüþ9&ªªª._¾|îÜ9Ão5ÁÁÁ½zõêСƒ#úµµµ©©©k¾^JQú»kaaÐðLJîlEåÜ20hZƆ’ø‡õ€òвªÚ*†a<år½ºˆaXÏ€.ÑÑÑ-k‹Œœ ÎOðtS™SUM%ðxü€ÛSR‰´½5÷ƒaâ¯é´\)ŠJŠt­F£KŵZ&“Ó4]§ÑÈd2µF-‘JjÕj™‹Ô¨7FG¶¸G9^ §*J§Ó}òÉ'/½ôÇkf¬Q–/_þÚk¯YßbÓµµµé9'N?ÍãÑP|ËÃ0”‰"æc t–@†&F–aÙŽÁÁ}š|æÀss_8Ïçó ÷V.¡)‹º4‡O™gÐëô—0âÑGG;ØÜABöÃÂm%iG·´Ž³ÅÍœk4§ö7ˆÅbo† BHeeeuuµã+,EÉår777¡PèˆþƒQQh¢ý˜ÀNë  NwéÒ¥ƒººº:þkBHMMͰaÃzöìyWgëÁhî62qöìÙòòr«èáá‘à`úÒv´¦³… ò‡eÙ’’’ªªªÄU*•^^^Ž»hHCÊËË¿øâ‹ŠŠ pww_´h‘‡‡Ç]c!H[Ã9[­öêA24MûøøøøØïÃCþ<<<-ZôÅ_zZH{-AäA€ó·¸ƒû©:[‚ ȺYHû· ‚ ‚´!èl!‚ ‚´!èl!‚ ‚´!èl!‚ ‚´!èl!‚ ‚´!èl!‚ ‚´!èl!‚ ‚´!èl!‚ ‚´!èl!‚ ‚´!èl!‚ ‚´!èl!‚ ‚´!èl!‚ ‚´!Ž~ˆ:))©Mó rWâãã­ÇJ¥ò>æAªªªQsÔÙ€#F´43‚ ÷ʾ}ûîwAZ.#"‚ ‚´!èl!‚ ‚´!èl!‚ ‚´!èl!‚ ‚´!èl!‚ ‚´!÷àlé`ÕTPI@Ø®2­—£û›õyyâÚRrïQ˜Ô%±òÇ6Õ¶jþAù»Òrg«|;¼y~+ßЕ׊Yú⬯ÆÂçý!q-8áÛ!‚ ò÷¤åÎVF2ðzB¬¢3Ó0éKä£×W¶‚[ÓLRtØË'k÷ÌVQ&EÃË'aÏlpTÿÞa`iŒ^î‚ ‚üÕ´ÜÙÒÖPÜŠ9AAyi¡³õÃòä" º¼&–ÄÂÐEðdPŠaÂ×ðáp±â&Ãá"K4‹ÚÌPˆAÕ>='?‡¸@Ë ×,H34°Ä¤.‰uºè“™ A ±TÕeü§§2O~>-.ÐU,óé5k½%JÕc$EÑ´@æÓeÔ›»òL ÿeFÏדԻžr§)JÔÿó,cê’X—! —̈ tKUÇ|p ˆm`Ó”¿ïà =\ÅbEPÜä1$eÍ~‘TŸ_Ñœ ÛeDë„%±0d!̈W1¨:À5ç¶±Ú®ß"}ÂëI°ë) )õ‡¬ú"•I+ŸÖÑ[&u4ïû«jâpµ#‚ rZèl=ù;yüçž@Ê¿Íý9þ ôùŠj¡ÏFX °#*oÀ”Z˜0 2lvÐŸÜ ÃVCI|×ÞN„7rac ”'Côxmk£ë\†“»S‡­þ³¤"í»þ×ßNì÷FîãSÊÊ“?>²èµ­œ‹£|òw-!„eÔ¹Þòýýég¾ËcA4~ã¥Oâ]F­«` ÑŸ|9ŒÃñOt[~®¸2{çvõ”§¾Í­ïz0©Ë&MZ svdVUÞØ2¥vÅ„i_g0&Õw3ÑëäøÐm9WÂÎ9°z |› ÀÀ²IMÖ¶¹EêàÌqø$F­–€þ$ÔË<›µjÊ£ÿμüT~yö¡z^øå¸ÎájGAä.´æ«â^€g‟ /ÃËÿƒXH|aágžÛ3ï¨õ[3b@$…G¦‚ÀsB”dá0e\¿¦Fö[ðŸ1"ià#Sö¾Ï}8.J!”…O˜2ˆ¾~%³^JäÙuòûÏw=ûÇñšÆ³Éï2ï“E}}%ï„KŸ=±é·<[WÈtmëÆËÝ^þß¼X•XâÛoágóÓ6lÏtêyË»˜hˆƒuÒe,ê  $,€çCaÓo`¸Ö\ms-"n¶‘™ÔÍ«OF½òõ[#:(%ŠþÏüß{#%à\µ#‚ Ò­élyû€-†„ùšyÁ PX|GMáf±*¡”s¸@LãpJᦴD%JKJ 0&.Nݵ /%Æ(Å|šæÌ?\WQZÕ¸ƒÃ â[©’Â’zK‚Å…%¢0_Ú’ÿð`(),¾ËÔ”S&â`…Z¾΃Ð@()S³µÍµHó0…·‹Dá {‚#ÕŽ ‚ È]hý—šÒÞ ÒC¶eŸ“ ¹¾^­n§lÖêçæ‹üè`z¹ÖÄ2·V °, @Qb»äÅÜÊÎ3{ L^Nñòõ²­ÚÛG¥ÏͶì³br3sSi˜TSÜÅD‹¹•m™åb '¼|ïpmS4šwžo€¯>óæm§¼IAA¥õ-~'˜Ÿ¿—Ê@W Ë^…ŒÞ0¾C«Û©Ñ×iYØÅÅEh*¹ðý›_ž6r'h7Ow*;åZÍ_”²êg‹uº’s+__™Õê˜@ÛZàwz|ZÌŸŸ¿²æR™^W|fÙ«ÿ—Ñ{úø¼Æ’jŠ»˜h1)«`ÅYÐéàÜJX™SÇ€ÐÁÚ¦ÁÓ²S aæyÑSçô»ñÙsKögVëjrO­™ÿámkdAA€6ù\^Þ 3M0*\;Àf)ü¼"Úø­§¼ŽÏ~ö†ï®I ¹_Ÿ—NvNLr'(1‹úíë- - Nê{áÅ^*Eðȕ̬ÍßÏ ©_ üÎ/oýq¦éëQ!r×o–>ÿóæù¼F“jŠ»™h)'Á…A¥€‘+aÖf˜âpmS0f1øíoAƒ§éðy[v½x`~¼¯{è°·.ÅŽë¯ô@AVƒJ˜þ~Ôà©Ë&Þe/))iĈMžÚ&uI|ïs‹ vL—ßï¬8 KâáÜ"Ø1ý~çAîûöí‹·ŠJ¥ò>fAªªªšWX¸­$íèü5‚ ‚ H‚΂ ‚ H¿ßøkáE¿y¡ö~g¢EðàÍ ÷;‚ ‚8Îl!‚ ‚´!èl!‚ ‚´!÷àlé`ÕTPI@Ø®:õ1›¿ûOD·eúLê’Xùc›ÚÓ2e›ŸÍûjˆ|ø7øDA¹ -w¶Ê·Ã›×á·"0ü ]Ûø5ZoÚÚák?°ðyH\Ûè×ÄAäJË­Œdàõ„XE+fæ~À¤/M^_Ù†þöòÉÚ=³UÔ_cÎYì³DÔ©ÛÞ›Ò?R%“({Ž{û·lƒ£IÑðòIØ3¨6ÊjCXš£×7ãÞ1×—Ä iŘõÅ­]çMT)ûn¤˜¢(Цù"UH·¡Ó^ÿîlI»üEAÚš–;[Ú:â›Æ¤”ÈT‘ýŸøß‰Rû<·jñ+Bƒ,÷‰K×½>>.D)–ù%<3g˜øúåFcÎŽWŠp—HÜB<».¥®a±m—lk–ÄÂ…0#\Å ê ÖœÛÆzQýžÖg ¼ž»žšjð"PZ»M1÷ýå¯Ï_¿>Ùüo6oóã6ä2@Jw?á5üËTª «žå%IU^ôSºÎÒœ5ÕdEY¡…rŸŽƒg~ºó§y‚Ÿþõé)‡§A‰:[OþG^ÿy 'òoóÛºŽÿ}¾„¢Zè³ÖìÈ„Ê0¥&Lƒ Ïään¶J*à»þðv"¼‘ S <¢Àk[]2œÜ:lõŸ%ißõ¿þvb¿7rߘRVžüyô‘E¯mµî…2ÿñD·åçŠ+³wÎaWOyêÛÜ»º[¢ñ/}ï2j]KˆþäËa$uÙ¤IkaΎ̪Ê[¦Ô®˜0íë €i"¼ˆ©p�Æç¿‡·¿ÔË•jÆ\PÊŠ?ÊtóõòŠŒýŸËß}¨±µ®V*~ãEhPwz«+¾¸ný1ñ#£„ÌõϧÎÜáýÖÑüʼ£ïúìÿéB}Ç¢Qlëã?B·åP\ ;çÀê)ðm.Ë&5Ù‹Ì=­Î‡OâaÔ:` èOB˜]w&e¿¯=Ô}þ¬h×Áóg üþç=ÑSW­{ýå™ËRêr~x晽=—¯{!šŸóÝôG?.óíÅâÚÒ‹+â/¼8áÃ$=€)¹ùfª_Q K˜4:¨àØÑô¿ï !‚ ÒrZóÕq/À3qÀO…—áåÿA¬ $¾°ð3O‚í™wÔú-€1 ’Â#SÁà¹!J²p˜2®_S# û-øÏŒ‘4ð‘©û@ßç>¥ÊÂ'LD_¿’i‰Âï2ï“E}}%ï„KŸ=±é·öeÃsßdÞÖFÝ-‡¸Kñ›.‚]–îÄ{uÿÊS=ŠŽ¹a¢½}Tµ¹¹–ì™òrn·ÞšØ­lË,9yàå |‡{EA#yýÙï6‘7/‰íþ©×¾ßbÞ×eÊøöÙwÓ†Í}(sÉ‹ßg1<—‘ß•°V}ÂVo#€»5S½Šj,+š³?ï¼å7xp$¾"AäŸHë;[üN0->.•®–½ ½a|‡V·ÓSʪ7Vœ-ÖéJέ|}eVÿ©cï^<ÚÍÓÊN¹VÃð;=>-æÏÏ_Ys©L¯+>³ìÕÿËè=}|^Sá$(Š˜±îÐÊοN±xoÃMêõ;7õͧ2Êu&–ÐèÕj#öÍõ’ŒXíä» îRü&‹P?KP÷Ç¿Ÿ_±çrn•Þ¨.¸ôãGkÎ+ûô‹âó;MœÜé짯m¼Vi¨Ë;üÑ;?Üj½5±Ê± ù IDAT”U°â,ètpn%¬Ì‚©c@è`/¢ÁÓ²S ¦Afj®ÝÊ}çëŸâ„GúÝX·>Ù ½øñoÞ~bý_¯ÿ~RækO~zEÇë4}^ß ÿy~űìjƒ®"ûüöÿLû׎Z€¦š©‰Š²ÍkÔ”¤ÿáµ±S¾1NYúJ߯wt!‚ 8m°®Á‡—·ÂLŒ ×°Y ?o†ˆ¿â–^8pRß /öR)‚G®dfmþ~nˆ#[c/ôÛ1Ö[@‹úžEw~yë3M_ ‘»vx|³ôùŸ7Ïàð›o~ฯþ0øÄSÃçýrËÔŒ¹Ûýf?ívð‘Ýåþƒ–”>¶fÙtï¿£ênÅoªv5 {âícµ¡s·üñº÷îù}\=¢^ð33yîCrá€ÆšIÚDE09Ë)Z óŠ~ø…uy±>óÝ„¦6t!‚ 8TÂô÷£O]6ñ.ë|III#FŒøkòÔ˜Ô%ñ½Ï-*Ø1]~¿³r?øûŸ%ñpnì˜~¿s‚´{öíÛo•Jå}Ì ‚ TUU5¯°p[IÚÑ-x³ ‚ Ò†üSœ-&ã³>Bª>´Ç¬Ýúû1AAløwWù[À‹~óBmsç;¼rÆðÊ_–¿š»¿ýƒ7/Üï< ‚ H[òO™ÙBA¹/ ³… ‚ Ò† ³… ‚ Ò† ³… ‚ Ò† ³… ‚ Ò† ³… ‚ Ò† ³… ‚ Ò† ³… ‚ Ò† ³… ‚ Ò† ³… ‚ Ò† ³… ‚ Ò† ³… ‚ Ò† ³… ‚´9IIIãÆ ‰DÞÞÞ}úôY¼xñ=¦ùÓO?uîÜY"‘PuùòåVÉç=òÔSO¹¸¸´nšK–,Ù±cG릉üÅ ³… ‚´-»wïîÛ·oMMÍÒ¥K÷ïß¿|ùò~ýúýôÓO÷’fiiéO<¾wïÞ3gÎDFF¶VnÛèl=ðïwAœ¥K—†††îÛ·Ï7_t¦L™²téÒ–¥¦ÕjÅbqzzºÑhœ1cÆ AƒZ/§í ­V+‘Hîw.Vg¶A¶¥¼¼ÜÓÓÓêiqÐô EQï¿ÿ¾íÙ§žzŠ;^·nEQû÷ïúé§U*•T*:ujÿþý`òäÉE <.\¸0eÊ”‰D2uêÔÜÜ\Û4óóóŸyæ™ÀÀ@¡Pèçç7qâÄââbîTMMÍ+¯¼* ýýý.\¨Ñhš)ÑÞ½{‡ ¦P(¤RittôÇl{6##cäÈ‘...‹/ÖëõÖS|ðA||¼»»»««kÏž=×®]K±-õ¨Q£~ùå—=zˆÅâ>ø€¢(F³~ýzŠ¢¬%EþvàÌ‚ Ò¶ôéÓçÛo¿]°`ÁôéÓ{öì)ZÈÓO?ýè£nذA£ÑtïÞ}àÀóçÏ_²dÉ!C\]] '''**jÊ”)îîî………_ýu\\Üõë×=== ???..Îh4¾ùæ›111åååûöí«¬¬ôöö®««4hÐíÛ·¹S×®]{÷Ýw¯^½zðàAŠ¢ædíÚµsçÎ4hÐ7ß|ãå啞žž’’b=k4ÇŒ3{öìÅ‹?~üßÿþ·B¡x÷Ýw¹³999Ï>ûlPPœ={öÅ_ÌÏÏ·ž€K—.¥¦¦¾ýöÛ¡¡¡2™ì±Ç:tè!CÞyçàJŠüí@g Ai[>ùä“7n¬X±bÅŠ ..nôèÑ/¼ð‚S{ɇ ¶jÕ*«Ø©S'ˆˆˆHHHàB&Nœ8qâDî˜a˜Q£Fy{{oÞ¼yÁ‚ðî»ï–••]¹r%::šÓ™4iwðå—_&'''%%ÅÆÆr†üýý'Nœ¸wïÞÄÄD»l¨Õê—_~¹_¿~‡æ\±aÆÙ* †>øàñÇçN]¸paóæÍVwêûï¿çX–;vlzzúo¼Ñµkײ²2Ç™0aBó jµúµ×^ëСŸÏçóù...&55•;»gÏž!C†X=-[víÚÕ¥K—îÝ»›,Œ1‚¢¨£G6T>}útMMÍóÏ?ßè¤P5zôh«c»šyøðááÇ+ 'Þ}÷Ýòòò’’[ýx³ÿ?–{p¶t)«¦Æ¨$ŽªÉ,5‡Ò28ßN>lÉäèþJ˃ÙÊv¤P(Ê]†òä“O¶mÛc|öìÙÿûßæµ×^“¼øâ‹‹/^²dIÿþý?ûì3//¯j áééù裮^½Ú××7,,ìèÑ£qqqZ­ÖÞ`Ù²e?ÿüó£>ºpáÂN: †_~ùeîܹmÛ¶}ýõ×÷îÝûè£Î™3§sçÎã;wîüúë¯o¼ñF¯^½Ê ¤ÑhþýïO›6íñÇŸ>}z@@À7Î;÷ÙgŸU9É'žxbíÚµãÆ‹‰‰ÉÍÍ]³fMiuX:u:räÈÿþ÷¿   6mÚTëÈP5³l¶F{ø,9íËÁJ$ï¸øo'­ò—-é|.iïÜA-u*µ6¬ïÔ÷fôôxüËôjÿ¨Œ{‡«pDþÄÜ–Mfäl;ÝZ×ÏcXlñòŠšsVNè¦U¹?·ùø†Ûø»+ÝüÚ™³óš=*ËšŸor×z–ÒUŒ§Î“ÏÏ+réj( åáfÑ¢E:îã?ŽŽŽ>|ø§Ÿ~úøãŸ:uªS§NRƒyóæÍ›7﫯¾zòÉ'÷îÝ»k×®Ò:ÉI¶oß>`À€·ÞzëÙgŸMHH8xð`iÅÖ¤I“S§N9rÕªUÆ {õÕW ¼½½ÀÝÝýرc“&MÚ¸qãO<1zôèO?ý4$$Ä¡e ¦NúÓO?‰¢8mÚ´‘#G®[·NJåP%ܼyó… ž|òÉwÞyç¹çž³;=+á“O>iÕªÕ˜1c"""f̘áÔ± 44z_:qÓÕüªøå—_È=p‡_iÚdæA«ôJ¼ùレa±Y˜Â_ø ³õÄmò,Ew~·¿ŽQú" ß»»…Lò&åþddÑRœ7Ü-ìõcœ}Kéá*‘;>'<8æ×’9&}¥ºI‰øAw9ÛtÔç§2Íü­ØþÍžþø;FkQò¯‹¢ü:.øË"›wþç½ܲ–ž‹˜ÿß'dŠeçH¡Pêš_~ù¥ôEé~O‡B¡PH•òi⦫½Ç/u}¤·piÏÎ+‘ó>ßQ§t¸pù„¦Q–\ ¤ÜË»9êU¼½®ŸBŠØb<ÇÏUÄ2È#^Y ¿¾ãË£ßZ?»_¨FáÞtð;‹ŸÉß³ûo¾â©Q‹B¡P(J5p½ØÂY™9šÐ¦:[ðº,$,ÄñMì]Ë.üæ©{bÅj4"ÀˆiÉiæC/‡²¶Ø{õÐéz}6@*75X-ÖÒòŠ·Z±Z­¢‹P( …Bq׋-Æ?з(%%ß&Q„ÔÛ©²pYa² TîO‹ÿvÙˆH&cŽ·mdž<Ã=f)l`“@͈ÍY¥¼œ¸`[´±¨ÒéÔņÂRÓÇ…†B™Î[CÅ…B¡P(çp½Ø’u5ºÍ‰Õó·'8SêáUK¶ÝÁå[U×X£ÙðÎí¸CÛv^5ò¦ôëß»\.iÛ~üÌÈ„÷g­?z«€³äÝ:½÷ýqoí3Jo"m“`ENf®]m‘‚Ì,ìKE¤P( …â$uSÖéͱCo/îàµèvÔÓ]ä E戨hDä;ú£õCn-ìîãÒÉÍÞÑ]˧Ž`ZLßñÓü€ý/G†xú´2{·øÂôÁ%oz·há–‘¬·…p‰¹É©¤Yx -(I¡P( ÅYPïñKÛ<6vÝsþ•·‹:th 0œÙf‰»µap}åäríˆ|fÂïW¼¢ú·Ò KòŸ‡ÓBD6UU½…Bq5(ô¨©( ŵ †Ê¼¾'ëê‘ua¤Á»—o@Ñ1ÃÚ©S^¶ð[ö©½‘u«´êpDy`aÒ¿ªf‘Û¹¦W …B¡P(…º(òÇ<6Ðý»YQM½ƒû¾yæ‘÷®è^ÃÜ×) …B¡Pœ¢N¿~ó¶ŸœW]7˜) …B¡Pœ¡.,[ …B¡P(TlQ( …B¡Ô!‚ز\Ü0¶³ŸšUt]vÁA~T€S>à¨ZvEÛk‚xyE§¿1:=§²Å¶„Ï<óË‘k´Tö}#À ½ÌVKò‰ŸOÞ±8܃B¡P(7 _l‘ܽK&ÿ>“çþYÒ ÕP‚4ˆ1)1Cתù㾦j²®ú©[T!­ƒ —¯å9HðK¡P(”‡œ†/¶ÄçÙný{x1L‹¹Ç?OõkøZ¢>¯}ÔÛãɯóí:ç%%™‚¥䭂þƒA;:tØÞ¡Ãöˆy)w‹wWw{ÝPã²Ìªëô”Àƒö–¼¼ 0À@ ð À­jìËú6 !É7õåŠP( åa§á‹-b6Yªúʈú`C iœo ­œ,àßÇ^º4æó§÷(‘ên§Ø0à:@"ŒpÞ¯¼ýQfZNÝxÂ) …Òp©±Ø2lV#„FîØqäÂSœ²ýùÐQÛ’E ÙûcZù?þéåšÛH [£=|–œöå`%’w\ü·p¯ÏˆKÚ;wPKJ­ ë;õ½=ÄW9ž'ð·÷½9¸•·Z­kÞoÆWMPÅvÜc«_ˆhªU»ûµŽzñßDz1ð'æ¶l2ã mÍøÖº~Ãb³¤Y‘‚Óëÿê©róëýÞÁL R,—fÀë+Ên¿!íÀ²QÝB€P¹?9,þ»Ü(…‡_iÚdæA+á/.ïvOZ0áâš1Sö‡.=–aH;¶<ôðî3¼³ó1qíØ‰ûÞ9’–ŸrdIà¯;¤}+ÚîáüúW?H{b{bnÞ_WJÛÿ»¾Šû(÷Ç·Çùä”>ÿÖÿ¦ác&Å&ãJ·— ^^7ztLÛwÓeÇãúQ㾸!*Ÿýïß«ziF~•‡ ±ŸÛ™MfPª”õh–ªxEßéói|¦1¡Ï_,7órÝàÛ›Ç?±2+:öŒÞ˜}f}¯„WG-‹·ठcžX~û±ON¤åÞúýƒn ßýAÊ®ºô)ìø@Ù¦zü‡sý>;YöÛKì×/½wÐ Õ9ïEð5À0€0 àÀ¯% ¬r¥Š1›-TlQ(J#£ÖnD¤ôíôÂÒYþúéBä=dõ¶WÌ+Ÿ‰ñÆÕgã¾R~%lÉBÊýñ°¼›ó# —öì¼9ïÃñuJ÷Ð —OhZÉjî§pi׎‹½ß^3±³·JÓlð¢lûV´Ýq— •R¦tópW)½ÂúLZ»jLP2GÖqæª9‘Aju@ïÙÍj~ì›ïSpeÛí+Ýõß³Ìý÷Ì~*uPß××¼¿mï͆àªhæòˆWVÆDÈ.;5sñêŽ/v|kýì~¡…{ÓÁï,~&Ïî¿yñòöÇÛ¼ùÅ;C[jÕ^aQ1ÿyw„º’ÙTz ‘³WNìê§RútŸ<&¢ðÒÅ4\õ©Èü0ªÔ_ €@€D€Õ À%€‹k¼š|Pò­*¿/PE¡P(‘‹-Ó¥m¯ ï¢UɆ yù)/Û`nݦNí‘yþvçYoÒÕ•geæhB›–Œ qà?sW>‘£k܈²£F·9±zþöDgJ=¼jɶ;¶›,w`º¿zèF=©pž²öϽÐþ¯Õoÿ÷R>gJ9ôÁâ­Ò¾mw÷Û»cþ÷Ä\‹€ ƒÀZTİáÛq‡¶í¼jäMé'Ö¿wùîÃþÂÅ Öÿ¥·X²N}>ÿ󤨱ѡLeÛKVÚþùqÿYû榿s¬ýÉuóþs£çøg[²Àè|½Ñ­‹— m“DÚ&ÁŠœÌ\«-ñꇽÜÚ/Lpµ ¦3¿¶ýø™‘ ïÏZôVgÉ»uzïûãÞÚg¶ÝØi}¯¬yiů7 ,…É'6½¼ìgs¹UW{¸RTçT4Ì8 `Hø@ Р=@{€·òR8!ý—ÜìÝõnŠGGG&¼ÚÝϫوÏÅÉÛ·Lc*Ýn_i‡¹»¾(|12ÌóåóÛÝfíÞþr+ùD¿ñzð¾§äŒ2jmÆ»E ·Œd½$)‰uïŒo;tøvÖ÷\ñOǺvØÞuêõ,RýíBêí ¿>}‰–šÎ¼ L‹é;~š°ÿåÈOŸ6Cfï_˜>Ø€ Ÿ¹ãÇ…¡_îäÝ|Ð;÷x&JU~ÕÕ®f¸Œ˜ è ð3€@°   À G猘›œJš…ÖIéw ¥QAçyQA0™LF£‘ª.JCõ¿´Ícc×=ç_y»øøø¡C‡ÖÏœj†ùàÌ6“HÜ­ ƒ¬œ\âå½zžš“¾o¼‡Kúã3~¿âÕ¿•ËÜUÂé½ï:ðj‹{…T-g.^_Ý·Û‘™É?NònŽ5KòŸ‡ÓBD6UÝï™<À8p W¯^ö—Z­ö>N†r¿”– `—V„Œ1!!IJ¬\.—Éd2™ ¡Fpu¡ÜW Cå ^ß“uõÈŽúw6ÎØ½|ŠŽÖNúó²…ß²Oí|°”V ì1,Ð¥=Ê"V&ti|Öé3ÉÚf¡$„IÕ,rx³û= åA§´Ò² )鹆a¤.ÉÜ%m‘Ëå’𢪋riøä+ xl ûw³¢šz÷}óÌ#î]5н†o¬é£@÷ÂøLÞo­ƒ± ü¯µiùÚåAË^{´Ñ«c …℞ç%¥Å0n^’À’Édr¹œeYBˆÅb)***,,4™L<ÏS#å~ñ@[¶€ñë7oûÉyu< Ûò͓ܛuÖ{»… ƺê¼N©ÅÌå~’Tü‰k§C¡Pb$¥%Š¢ô{·Êö’?Q’\c‹Åb±X$£$ÅÊ5 ¥Žx°Å…B¡Pzì6-†aªë,£º¬V«ÕjµÀd2U]”z€Š- …B¡4\j£´J#©.(‰¦·Z­999ÇSÕE©k¨Ø¢P(J…Âqœ(еTZ¥±ÛºŠŠŠ ƒÇq!{4=U]—CÅ…B¡P"c)N«¥%¥{¨YÿRø—\.¯ÄÃHc¤¸*¶( …ÒàE±¨¨H.—׃â)×%y-9Ž£ª‹âB¨±”B¡P( Œqqqñ‘#G0ÆuªrÊ$ƒ°'Rsñ|P±Õà!Æ¤Ä ]«æš†ruª%ªÖA†Ë×òðýž…B©/0ÆÇeggçåå9¯´8Ë– E¤T ÒžšKR]F£Ñh4RÕõ RS7¢9a飃ÿoà'>ì«à¯|:,êÓð­ñFø<$¢ €ó’’LAÝåŽÞä3— >¼3»ä;'÷Ÿ¿ЋM*þªÛ@HKýtùÙÿ;]döðê;¦ëâ˜@ß2ÝZüç·ãv§žMÔÁ>_ìúÆ/TÉX¬o³rü¦¾½wõbS(?’ÒÂ× ¤©rIÑp,d.‡"­ŽÀ~8¨éÝNÝcAÜüƒM[8ää'ƒ´Ü¹5S–¦ß†å IDATóÝpª´\ 1¤ep¾|ØŠ0nã¾zò§M”Õj/bçœü½UÄÖ#¡ºÔ¤w_9þ¶×°Mc5¥wæOߨã;mm§Ž¡lÆç.:º\÷ÄêaJTñXÈ+Ðý•–#V¸, …òP`WZ ÃHŠÁù},˖˧ZFBUT›a…B!ÙÀ¨êj°Ôܨì<7îÝ í1oîO>¹|òGÅ1± ôªÕç,^^ÑC3ðÕSú†iU*m‹oü*bnË&3rR+|k]?a±YÄÖ~Ϊ‰½›z©Üü:>»úÄÍãkÇE„zªÜ»Oþú*w·Û¯¯øWD¨§ÊͯCô{31àÔ CuÝ–]탯ìéµö†Ý¹eØ­F1ŒÜ=°ãÈ…?¦¥&9gå„>aZ•ûs;3*kV~-\ÒÞ¹ƒZêTjmXß©ïÍèéñø—éˆ!aÃŒmüÝ•n~m‡ÌÙyMŠj²æç›Üµž÷G”’þï–ï¤×Ú{°Úv-çŒó8»÷v’xOyÔ#¿Þ§µ›‡ZÙzHÇç;óçÏŠthƒñÔyòùyK…BqŒ(Šv¥%i…ê*’ÊÛ×Rß4diRy6Wû‹Rþ³Ù\TTTXXh2™xž€jã¡61[ò¶¯Ä®hóäˆèõìë›ß•ü‰e°Âd@¨ÜŸÿí¨Oîøçú}v:³ í·—Ø¯_zï ¹ò9pÇ÷_´ñŸ¬¼«›£ ï» ùùÿ^ÌÉ=¿¶Ýá9oï²û°¸?¾=öÈ'§ôù·þ7 o3)6šŒŽž¾5i¸Ó[¾¾ÞoòØpûÑNøÁLÁbQòÁw‚~˜³9Û{ûîLŸOã3MÅ{^ª¤™ƒµ׌™²?té± Cڱ塇wŸáßÞ<þ‰•YѱgôÆì3ë{%¼:jY¼€˜MfPª”_°ùûÙ{»vÙÕï‰ß—|“c¨ò;Vöù× 9ºvÞÒ+Ô¤Î=Ùpƒ«°=1d'Ü`[·õ`«K®T1f³…^(”‡©¼´{d÷ˆa\hÍzC®Õ%®ÙròMÉŸ(©.‹ÅBUWävòlhÔ£áÅ9EÇý«‹Úa %lÉBÊýñ°¼›£öŠÈÙ+'võS)}ºOQxébZåßLEßÙïÿ«³Ò-tØØ!ùÒ²gÚx)ÜÃGéÏ$ž»)ØšÉ:Î\5'2H­è=û£YÍ}ó} шMvÅ(€¢ß6mÏ>eT`ùs)};½°tV§¿~ú£Ð¶IñÊʘˆSy3k.íÙy%rÞ‡ã;ê”î¡.ŸÐ”¯îøòhÇ·ÖÏîªQ¸7üÎâgò÷ìþ›¯tí \rdÌ©“ÏŸ‰Ž{Mwã³#óvUvÀª×ž˜Šp“Û?Yä&wÃ|QEú×Rðí‚„ø¶¼ñ„ U9½P(3‚ p')»h¨®eëÁr#ºœjI·2ªËjµÚU—d\¬»yRœ¡VbËzvõÔ FÏž¼òÕ¸¤*\GδÞZiNH®T€ •Ó—ÎÖär…Z«µ)$WÈE¡DkÛ´yS™ýßP”•‘…A5mbÀ±ßeŠÙßÇîcŸ2\[êÔ6]ÚöÚðÎ!Z•ŒaØ—™ò² ¶Ó• `«næ`-8+3GÚTgGˆiÉiæC/‡²Ò… ©‡nL×ë³1 •›¬«í(|ó´Í4¨Y¥Ž £TµÒåͧÈÈvâKå\{äæ.oWÄÄ›¹Æ¡¬6¶Ï=¼Ah÷ÅÚVÍï t4oµbµZÕpMø ¥†Hå¥yž‡rå n±åÚ©:iÙ*¤ºd2™ÝÖU\\œ—————GU×}¤bËtêý©k¬³¶|±zãçÑWÆ|~M(ߨºnDG ™Œ8ÞvcC^Õ¾²²ˆwnÙ‚©@L¹BüƒüYÇIÓ»žˆÝvè›MÆMîïvwœ´ñ¥—¶þà·k¹f‹wÖ?&¿ç$EÎ5+ ãè[”’’o[€z[Šäb›jFlÎÂÄ.Ø­PétêbCIÔø}6Ó åð/÷=¬î³ÊöºÖZ_}þå<éI»œ_ÜLÛRQ¶1æÆ½r8µß¸¾]w'ÆÂ…†B™ÎûaIfA¡Pl”VZåói=Üb \íF¬e¥m]—/_....,,,..¦ª«þ©±Ø2þ±dêäsãõrc|ŸXýå )K§­»T.œ§ºnDG°áÛq‡¶í¼jäMé'Ö¿wÙª«áâ†ëÿÒ[,Y§>ŸÿyRÔØèP˜Ð11ƒ¯­yqE|» »Ë;0Ý_=t£ž±šÌX®Òh4 !+aËÂOÿtèÒs²™Y‡Q£ÛœX={¢3¥^µdÛ À¶?32áýYëÞ*à,y·Nï}Ü[ûŒ€´M‚9™¹í†ÜçæmLMLç8‹õÆoçÖì㺠òcÄ«örk¿0A¨]{Y§æÏ4Ïùj]ò-£XpåæÇÛ]F…µ`øŒwû휾ÛBˆ!kýÌ£»´Ä®mÝZíÄX¤ 3‹ûÒG)”‡ Ii ‚k*W÷iÄÆL-[å‘ú‘ª1€ÝÃXTTdµZEÑ%^)JÔLl‘üƒó§oñ~'î­®*¤¼jÓ¤¼SWÿS™Á‘ïèÖ¹µ°»GHÿ%7{Gwu˜sª2ŽŽLxµ»ŸW³Ÿ‹“·o™fóïyŒy^•S5e|ë{nýlÛký8º•—GpŸ×ŽwÞ»œ=§Íî"ëôæŽØ¡·÷ ð ŽZt;êé.r…BÀ´˜¾ã§ùû_Ž ñôi3dönñ…éƒ=ï-Ü2’õŽTœ¢gøHœüÁ”úôþ~Ê'y-_î¿æ Bêí ¿>}[²µk2Ý´û ʹðâc»Æ\ƒç¢VÖ”9e $n9kIý寑ݶwè°½C‡í½¤q•Œbnr*iH“lQ(öòÒPÒ‚‡Ý²Uשjƒ=xN²uII"xž/..6vÕõíÔ{üÒ6]÷œåíâãã‡Z?sr1âå½zžš“¾o¼‡ƒwû§´P¸æÚî±÷!E˜ùàÌ6“HÜ­ ƒ+Õh|fÂïW¼¢ú·rÖï&œ^Ð{a𮯶p2V5Û× KòŸ‡ÓBD6UÕýX”‡ŠôêÕËþR«ÕÞÇÉPJ#)-QËi•!99977·[7gÝþùgxxx@@@E ¤A+ÒvU’žž®×ë»víZ³ÝËpôèÑîÝ»k4ŽžË¯>‡ŠŒŒT©\sLJJ²Z­íÚµ+³Ý´‚±=a=-€]] Cå ^ß“uõÈŽÆm] Å—b?Þ§·÷©zSZ8c÷ò (:fX;uêÏË~Ë>µ7² kÈ{ ¬Î ²ˆ• ë°}­P5‹Þ¬¾£P(u“J žeËåý»J H³ryñŸòÛËÀæ8Ža»Œ¦§wXlYÿ7!ðÙ=ê3c=æVusÁ<6ÐýµYQ1ç2PPÄ3î]5°‚r …BièØ½‡ÎØB\žÔ´A逆VÓº4UÖJ*£º¤§Bv[U]µ¤ˆ-¶Ý£ƒíÊ'·æó[ë}:Œ_¿yÛOΫ÷q) ŵB8Ž“yNfମe«³{€© Ë–“½U¤ºX–•ŠQÕU3Ø¢P(Š«Á§§§ ‚èü¼A¹]ŽkUH=¸+½L)F³Ù v#-ÅX-¨Ø¢P(JõÊKçååñ<ää^½Ør÷ѲU‡° ƒL&óóó£ªËIêáé3J­à3ÏüräÚÃR³Ù’|âç“wê ?…B©/$¥%•—®®xªnmÄHl5ð˜­?³i§tìììì¼¼³jꇦ™›?àU‹ÏR¼¼¢‡fà«§ô ÓªTÚßø!UþÄÜ–Mf´]Ä·Öõó›Elí笚ػ©—Êͯ㳫OÜ<¾v\D¨§Ê=°û䯯rw»ðúŠE„zªÜü:D¿w0NÝ0T×mÙÑ>øÊžžQkoØ¢¶F«B #wì8rá¶*Ö¶AWNè¦U¹?·3£²få×À%í;¨¥N¥Ö†õúÞŒž™N€6ÌØÆß]éæ×vȜפ¨&k~¾É]ëyD‰p!éÿnùNz=¬¹«m×rÎ8³{o'Ý[EKõÈÇo„÷iíæ¡V¶ÒñùÎüùs…UÚbÓT¼ç… Jš9X‹pq͘)ûC—Ë0¤[zx÷©à!¾½yü+³¢cÏèÙgÖ÷JxuÔ²x+1›Ì T)+Ö°Øüýì½]»ìê÷ÄïK¾É1Tùý¬Nûük†œ];oéjÒNçžl¸Q®Ô¸bÈN¸Á¶nëÁV1–\©bÌfKc¼„R(R²%Žã äÁ4û[ºÑå4ؘ­*“šÖE‡¥U”*€ýÅ_œ8qÂ…“y ¨ÔÕD-›…8àõvÜ›]”(aK.Rî‡åkc)"g¯œØÕO¥ôé>yLD᥋i•}g¿ÿ¯Î>J·Ðac‡BäKËžiã¥p5¦?“xî¦`k&ë8sÕœÈ µ: ÷ìf5?öÍ÷)D7"f4Ùw Š~Û´=ø”QåϤôíôÂÒYþúéBÛ&yÄ++c"TLåͬE¸´gç•ÈyŽï¨Sº‡\¸|‚ñ&^ÝñåÑŽo­ŸÝ/T£po:øÅÏäïÙý·£ÊÓ÷ \rdÌ©“ÏŸ‰Ž{Mwã³#óvUvÀª×ž˜Šp“«íkt“»a¾¨"ýk)øvAB|ÛGÞxB…ªëAºzR(éQžç¡œÒ‚ ž8޳Z­.ì°Æ¸v]uÏ^×nÄJ(S{×®]/^tádjgWTwèÜZ®iß9ÜawµAZo­4!$W*@„ÊO_䥳µ¹\¡ÖjmÊÉrQ(ÑZÀ6mÞTfÿ7eedaPGM›ðcìw™bö÷±ûØg§ ×–:M—¶½6¼sˆV%c6äåC¦¼lƒM+0ÁlÕͬgeæhB›êlãÈBÂBX1-9Í|èåPVº–!õÐéz}6¤rSƒÕbµ…ož¶™Uà «Ô‘a”ªÖCº¼ù´âïÙNüÊt®=rs—‰·‹+bâMŒ\£vÔÖlØ>÷ð¡Ýk[5¿7 ÐÑX¼ÕŠÕj ï£P6öâà0G|]§r¨¼}QQÑÉ“'Ož<ù÷ß§¥¥I¶·û‹ M[5óKJQ\V«ÕU¶ ê4`­ºnDG ™Œ8Þö}Ƽª}eeïܲS˜r;…øù3²Ž“¦w=»íÐ7›Œ›Ü¿TyDœ´ñ¥—¶þà·k¹f‹wÖ?&¿çŠ‚œkVÆ?з(%%ß¶!õ¶ÉÅ6 Ԍ؜…‰\°-Z  ÒéÔņ’ ¨ñûl¦AË/à_îkSÝïQ•íu­µ¾úüËyÒ+’v9¿¸™¶e¹¢ÙĘ÷Êá8Ô~ãúv*(óxÏX¸ÐP(Óy?,É,(”‡Ii ‚ÝVëÚ²UIû¢¢¢S§N÷îÝÛÏÏ/##ãø‰ãgÏžMOO—ÔáM]ÄlÝGËV¬V«ZíðwûÃLŠ­êºÁ†wnÇÚ¶óª‘7¥ŸXÿnÜe¡êîE¸¸aÁú¿ôKÖ©Ïçž56:”&tLÌàkk^\ßnÂÄîràL÷Wݨ'@¬&3–«4BÈJزðÓ?~wlfGÖaÔè6'VÏßžhàL©‡W-Ùv°íÇÏŒLxÖú£· 8KÞ­Ó{ß÷Ö># m“`ENf®Ãsîsó6¦&¦sœÅzã·sköq]ù1âÕ{¹µ_˜ Ô®½¬Sógšç|µ.ù–Q,¸róãíÆ.£ÂZ°|Æ»ývNßm!ĵ~æÑ]ÚGb×¶n­vb,R™Eƒ}飈JƒÅ^^Z2ETÔì~ÈÆS§N…†††‡‡+•ÊÐÐÐ=zè:ëtº´´´ãÇŸ;w.33Sª¸[¸öq?Wu LUÔagh±X”JG‘G5 >×òýÑú£æw÷‰Q4ë;nrt×÷ªÙ…âÑÑ‘ ¯v÷;Ÿ«l1è¥í[¦‡Ùü{Þ#cžŸ·÷«ÎKÇ·fî*¶íŒ5 þš5ºÕZ£*¤ûÓ3†÷VœqЯ“Íî"ëôæŽØ¬éóûLEAÝŸ}ñé.  ÓbúŽŸÐ¢…/G¾s£PÚyпæ/ìÀx·háv4YÏ—óÔ*z†L<÷Á”¿®db÷PŸ/÷ý Bêí ¿>}[²µk2Ý´û˜–}ñ±“fwϨ±Q«FkÊ|[ $n9ká௑¿ü%mñˆîÿÇÊ&Žbnr*iÖ3°ÁŸxJcERZ¢(–Ò*Ã0õŸ¾°°ðôéÓÍš5kÙ²ei9õéÚ”fÑÍš53™LYYYwîܹr势¿¿¯¯¯£]ž€ßÀ݈5VoÒó‰Ðˆz_Úæ±±ëžó¯¼]||üСCëgN®D¼¼¢WÏSsÒ÷÷pð®qÿ”¶ ×\Û=Ö§þZæƒ3ÛL"q·6 .çš+ Ÿ™ðû¯¨þ­œõ» §ô^¼ëÀ«-œL§UÍöµÂ’üçá´‘MÝ7R{8ЫW/ûK­V{'ó°b·i9 Ò*CvvöÕ«W£¢¢œìÜh4ÆÇÇ?þøãN¶¿pá‚Z­nÙ²¥}‹¤´ÂÂÂÂÃÃ@ )“„ÔìKk>j;[ÅÞ½žgeeéõz‹ÅâëëëïïïããSZuéõú”””=z89ŸJÀ9r$**J¡¨ô‚îF£ñìÙ³ýúõ«}Wñññááá¾¾¾®êðøñã;wöôô¬îŽ„öíÛóÍ7ýû÷wÕdî/ƒ¡ò¯ïɺzdG#60âK±ïSÛûT½)-œ±{ù3¬:õçe ¿eŸÚYÕSØcX`u‘E¬L8X‡ík…ªYäðfõ5…B©„ŽãDQtFiA½È$$$´hÑ¢yóæeZŠDÌá n™ÓÚiî¾åîîÞ¼yó°°°ââb½^óæÍË—/ûúúx{{7ä›}ÌV#´l5V±eýß„Àg÷¨{ÌŒ]ô˜[ÕÍ]ðØ@÷×fEÅœË@AÏ|¸wÕÀ BÊ) ¥^!„H%Vœ¼1×@<ÕXœ †„„„–-[†……•o™ÇbÀ7ŠSK‹-{'F£Ñ´hÑ¢¨¨H¯×_»vM___…BQvþ„ ñÀiD6%ˆ7X~7‹¯#ÆKdØ(`[‚#hÌ–óX,*¶:Øv Œ¶+ŸÜšÏo­÷é0~ýæm?9¯ÞÇ¥P(”JÀó<ÿçŸöèÑÃËËËɽêíiÄüüü3gδjÕªY3Ç–ñ®®›R*ïÍÃÃÃÃÃ#<<¼°°0+++==]…¬;ÿñמUÈŠ’Ã<˜!üÜe$a"ÈÄ?äü'Üæ1^1@NÀ£´ˆ¡©œZ¶( …ÒèÀKuTêúéBéö\Ý~~~BBB›6mš6mZQ›\Î7ŠSéaƒÖíºWsY ¿}nì „¬ˆ–±=0B`%Äʃ +u—$ @P,ÇûYóÿx‚Yİ ÄÈKD1ó´ó+ª’žÔTÊPT3±%åÈ¥b‹B¡P(»Òb¦ºOV·½„ó7~„ÙlNHHhÛ¶mhh¨ÃÒ?Ùœòø‚<¾Ð[^YÔ6Ãÿ¢äÞCÄ*"w$ã8©‹E‚A­”[K:‘ÈDà•DÎ †'*™¤·0(dˆDŒ3Y”¥ÀG礪ф}1µMóÝÀc¶¤½fZ, y¶( ñòŠOãÈ Z;pÊgJj`Ÿyæ—#×\]Ú’|âç“w,®í”B¡¸ÒJKJ©U?–-'Û[,½^ß®];‡J«4’e nWìIÄY óKJî=8„ L8ß½ ²ˆáYNĶé‰"€ˆ•`î&RÄ`“S"S¬6+M·ÅÉVDƒòú9ì *Nu[9Ry¥FhÙ¢bëá'­ò—]Å…“3t­š»:¥»*¤uáòµ¼FZâBi舢XZiAòfU·=8-¶rrr²²²t:]HHHÕùéÇžDlVXæ©Í#OˆÛœ-„ȉ-É¢@0€Å¶Ü<"€@°`«›î.„Ø ™áU„`¬’1,E2îs¦x 2Y¦Cê"@Þå–­š‰-ɲEÅ–Ó˜–FèyûD‘í5åÓA¾-c~Ê­à[„ÓvŒ ~æë;ö/¦pmýã~-§ïÏi )å|˜sžêWù7 ç%%™‚Âå.þXYßf!$ù¦¾Ú)ÿ)J]#…ÎHûm¸nÄêZÂÀ9±•ýÏ?ÿøúúj4gzÎ)±l•‰‘Ç‚ž1¿!3…c"a„A2`žˆ ƒWNÃ% 0›1îΓb!|€'"ƒlG ±_`匶rÝ25\W[F²–•€kX'»!ÇlÕÆhµZ¥'^]5™…šŠ-uqó5›¦-üÝ@¬çÖLYš>~ãêᥬbšŒùì?CÏΛþåuÀza픥éã7­áKkäÝOˆ!-ƒó ô‘~˹öcE^þ(3-Çaµ! …r¿ã8é\ú–Y³yçwqRleee={¶cÇŽ•7¶O>—³Y¶’LivÃð¸YŸVã# ÉEÄÄ[¥jlƶh-8+€'¶°ˆ<™RU]E‚ž)ÎÍbé)![ê d2Ö6.""°ˆ(Å=*ó“H¼RùzËÓÀä%;Yc¶¡Y jãFTvž÷nÐö˜7÷'Ÿ\>ù£â˜ØzUrì‘ôÚ£“Oùø¢Õ|fÕÔM370 ²=ªB¼¼¢‡fà«§ô ÓªTÚßø!UþÄÜ–Mf´}¯ð­uý<†Åf[û9«&önê¥róëøìê7¯ê©rì>ùë«ÜÝn¼¾â_¡ž*7¿ÑïÌÄ€S7 Õu[vA´¾²§gÔÚøžÉTÙ91$l˜1°¿»Òͯí9;¯YHî±Õ/D4ÕªÝýZG½øïcÙ%ý’¿¿,»@.iïÜA-u*µ6¬ïÔ÷fô”°lsX9¡O˜VåþÜ·—J»ùÛûÞÜÊ[­Ö5ï7ã«‹%qk~¾É]ëiÏ©ìÒ•ñÔyòùy®Ž£P(5D*/-•j.¿¬e ªƒåŒØÊÊÊ:wî\§N‚‚‚œE‚Ù\b@²b.Å’`ýVÁ-ÀÄl%n„H4a›¡p¥J´aB8¢``Ÿ§‰p¥ý ˆ@Š /$íe÷'Z±-¢K$ri™(YÈUY¦!áŸ*WQ—g킚zý*ê°Æ½I…]+%jsôåm_‰]Ñæ‡IÑëÙ×7¿Û·*k/Ò ^;­på‹ãÇM\/{só’Þå3zZa² TîO‹ÿvÔ'wü‡sý>;YöÛKì×/½wÐ\ù¸ãû/ÚøOVÞÕÍQ‰‹†÷]üü/æäž_Ûîðœ·wÙÛ¸?¾=öÈ'§ôù·þ7 o3)6šŒŽž¾5î„ôÓ‡;½åëëý& gª×9¾½yü+³¢cÏèÙgÖ÷JxuÔ²x+ç׿úAÚÛsónüºzPÚþßyÐÝ IDATõ¤â ׌™²?té± Cڱ塇wŸ¹¸ÉýñÝ™>ŸÆgšŠ÷Œ.õ¸‡˜¸vìÄ}ïIËO9²$ð× Ò.Äl2ƒR¥,uâ»òc•+UŒÙl¡b‹Bi”VZsÄ× f \*¶ôzý¹sç:wîN[ÚìÑñ7ŠSÌ_# RHJ‚2@’N*Æ<†»‹eÜëïãA]Tr$0¾Ep¹Ø”-²ÅØ’c(CDŒŒØ\ˆIQYGˆÙ‚ž˜–YHø£Ê…Øi8^¿Š:¬¥ØrÕL j'uÙШGËsŠ:ûW§äÔD-›…8àõvÜ›]o%lÉ[®“Ò<,ïæ¨CEäì•»ú©”>Ý'‰(¼t1­ò+…¢ïì÷ÿÕÙGé:lì@ˆ|iÙ3m¼îá£ÆôgÏÝ, /’uœ¹jNdZÐ{öG³šûæû¢3šìŠ;PE¿mÚž?|ʨ@T½ÎÅ«;¾<Úñ­õ³û…jîM¿³ø™ü=»ÿæ‘B¥”)Ý<ÜUJ¯°>“Ö®„*\ piÏÎ+‘ó>ßQ§t¸pù„¦w?FyÄ++c"T÷~°Â¥];.ö~{ÍÄÎÞ*M³Á‹>(½K9\ù±RE¡4$¥%Un®èNYÝ€w©çw©\leffž?þ‘G °·¯Rl!„ìÑñÙæ³Jn©ˆäæEP2dÀr„‹P9¢à@ÀÅ¥.PÅØŒñÝ—&Œ ± Îc*”! ¨È@8½hÖ‹Ö\¬(ÀV½`ÊÃÅ, †g¡€A2 †" Ö2‡ˆ7œ;e¸U³s1-9Í|èåPV2à#õÐéz}6fÛ½¶mSÿÄ·†÷êÙoĤE[Ïä•,ÃÁqVfŽ&´©®äUHXÈÝʪL@p@ùêöXŸ™íѬ™·myhsÛ.H妫ÅZú¨¹ðcå­V¬V«Á˜BiXØËKC¥î¤º x/½‹Ãö.\èÒ¥‹¿¿¿ó½IäZî1JE{|#Â"†)4Mš& ‚Á,]“ø’™X‰‚ (eG R€x¸ûÒJî–³EHŽ „yàdˆ° é($3`ÂÊ+CVÈYË"'WTnĆcÙR©TÔXL§ÞŸºÆ:kË«7~}uaÌç×\ðØYu݈Ž@2+p¼ídņG¶08‘ØN/Ã@‚1XeäŽhÝQår ¾ƒ«Meµ©ÕC݈ÕÂøÇ’©ÿ‘Ï[ÔËñ}bõ—/¤,¶î ^ý°—[û… 5¹IW×è6¼s;îжW¼)ýÄúwã.W{&ÂÅ Öÿ¥·X²N}>ÿ󤨱ѡ 0¡cb_[óâŠøv&v—w`º¿zèF½ÓbŽm?~fdÂû³Ö½UÀYònÞûþ¸·öûíݱ ÿ{âF®EÀ„A`-*â+ìDÖaÔè6'VÏßžhàL©‡W-Ùv§ªk¬ýs/´ÿkõÛÿ½”Ï™R}°xkÉ.HÛ$X‘“™kS[.ýXIAf ö-oi£P(õCi¥Uåí¶NófÙw)Ó>--íÒ¥K]»v-£´6vH¦µÐOá^È<\›Ìä ³ (Œ'H^„ V²9 ÁÀ À‚ aT2ÈÓ»–3\’”‹`KD)yÎÑ~Ce#`È8¹…A@D,°Efý˜³Üaæº[. §nÄP³£OòΟ¾Åû¸·ºª¤éM“òVL]ý@H½á×§oËûuE¾£?Z?äÖÂî>!ý—ÜìݵÚ.KÅ££#^íîçÕlÄçâäí[¦‡Ù\yÞ#cžWåGMߺFËcZLßñÓü€ý/G†xú´2{·øÂôÁ è7uŠî·#Úz{4é¿"ûéMëÆT|*Ë:½¹#vèíÅ}<ƒ£ÝŽzº‹\¡PTØ@Öñ›G¦¾äÜoIÚ Ñ=JŽ ãÝ¢…[F²žwùÇ*æ&§’fá.Ÿ …Ò@°{|P¿–­$‘/Ý>55511±[·n¾¾¾ûw¦s½Å¨D˜xA'ã­DT !Pƒ©H”!!„EæA¶§€'N¦áCá8NE‡:äÒ¥Kr¹¼uëÖÎrðàÁ>}ú8™z:Ô½{w///HII¹råJ÷îݽ½½6¾}ûv~~~×®]+êM*74êäæž²<œøU‹ƒF‘ÈY3&"¨˜ž¸ËÀ`Æf°3J@¨ôemæ¨<¬”#›íŠÆ³rÆæ\*Â^!¬!À„ð °`FÅ”<ÌH‹ÔH&CÈ(b%„€…ƒ °‡¬nH@8ˆ„»¿2=ÝÛb±øúúúûûûøø°ì=¿bÓÓÓõz}% ¯&“)>>~À€.é ôz}jjj÷îÝk°ïÆûí·ŸþÙU“¹ï U˜*_ß“uõÈŽ:°:È"V&t}· R|)öã}ªq{Ÿº¿J gì^¾EÇ k§NýyÙÂoÙ§öFÖTi€<°Ç°ÀªUûcU5‹ެ擢P(5cœ­P(Ôjµó&–®YTHNN¾~ýz=t:]m:'„d[‹ÜÍî“‚XôdYP3Ȉ ÞLŒñÀ(¬ „1 ñ˜é!C3Fò©ƒÎÆJqöþEÂX—‹µ¾¬ÁBX9c3Gá’€-‘€Ùþ‘1¨˜(­Ä¤bHdn ÉEOƪ@‚H³È‰€äìý]hè¦ââb½^óæÍË—/ûúúx{{ÛS—¹ÖØpŠÿ4ZËuñ8õŸÝ£î13vÑcÕw)LÀcÝ_›s.E<óáÞU˧,£P(ÉÞ“˜˜Ø¼ys7·j\­ª³Uƒ]$ýtûöí7nôèÑ£ró¤3b+3ñD¼]TÐÙ=£D/XÚd XëÅrE¹ñ<3*„• ¶`•²Å˜Ñ °»ÅÌ@4èî xXó1¯A GX9”õýa‚lº‹ÈŠ11à" b€S€E P„Ew†5,C…œÈà &X£Ñ´hÑ¢¨¨H¯×_»vMIu¹¶”¡k«PCí܈6f‹Š­r°í&lW>¹5ŸßZïÓqã×oÞö“óî÷4(JCCRZÒí°º†©<Èá.Õµl¥§§gddDDDHÎÄÊWÙ¹Þj€þ”[󅉈r†¸!9Ä(‚c.ÂŒHñ"aX„¤(ÁnF"GŒDáUíΆ'Œ¼$«H”žð&¢Ò“¹¼Å”2„ÜL‹UJ(f(€'À©ƒ@fÄr+áX7`M„ag2/Ñhb¥5zxxxxx„‡‡fee]¹r…çy¹\ž——§Õjk¯“ê¢øÙª.TlQ(ÊCBi¥Å²luÍTõàF!==½gÏžU*-';ϲà ÿ›Fûˤ ,ƒ@ HÉ¢LAÁ ¢cùbÌ0@€+!€(‘…X&"³‹- ‘ "ã'³•4㈠y @F,ó,‰ô’—”ð1ŠD-ƒLAïF„ǬLÆëUgwdµ`ΛA ‚B¬Ñ0F”,1Zð?¢hfÙ»i£B^^^^^^-[¶¼~ýzNNNbb"!Äßßßßß_«ÕÖX0¹ÖN4@¾FP±E¡P(¢(òyÇr¿§A¡<ÌHJKòïH7ˆ­šyÜ寷oßV«ÕjµSUÀÀI7¢Åp¥@%ƒD‚­ "zÉ8B^ˆÏež,€äD¢¡$1iލ’²Ë³@8l{Ȉ'Œ¬³ ÄÜ-B ÀH×y/+Qa‚б¼@ôÒ‹*0& D0é±Îƒ¨Î5JFíÅ2fPòXDXÂ(«‹Eø±¢EIò!äííݶmÛ¾}û¶k×NÅsçÎýùçŸ7nÜ(,,tþ“ª ±E“šVjÙªˆ1)1Cצs£Ì¥® i”ø÷µ¼ÎÞTÛS(u€(Š'eŠº›O«fb«.܈„7n¤¤¤ôìÙóüùóÕ*\]eã^ª,tc9Oe‰Ä‡%!ž€'ƒ_ŠˆY¡ˆXP³H`•ˆ-2ž2i (À^~L6Oä’ü2`USlÆrûñÄ%Š…ö2ç/GE!‘0ZƸ¤~" „ X ,ÄîÈjÆÀdÄ„V¢@x“!y2™ƒ´eäÃ0>>>>>>mÚ´ÉËËÓëõÿüóB¡<Œ¦r-åòùZÆl9¯¶&júœÍ#T!„VáØ~ÐÌMÿ£ÙÆâµz{<ùu¾ýx༤$SPX Àœ°4B÷ÈÛ'ŠloòW>äÛ2æ§Ü’æ·>YÊöYv£µøÏ¯ã§ŽÜÛ½ËΨ¿-Ù‘[PéÑOù ¼Çµ‚wqÚŽÑ!ÁÏ|}7½pmýã~-§ïÏ!.˜ëÛ,„$ßÔ» œ…B)T^º¼Ò‚š*'—ë3BÈõë×SSS{öìéááQ­/g7WýÊ0…ð2 „ÀBÉÍW("%²âÊ‘L˜€š,˜)½0s·öt¡ˆÀJlv›° 8r7#6.U!ƒ¬¤,ý*%Ó‡b” a|X(Ë/Ʋ|Q "…تdL*TDÀÊAiâb+Y{ù ÃøúúvèÐ!**ªeË–f³ùÌ™3ñññIIIÅÅÅuU1[µq#6NËVmÔ.öú1Ž`Þ˜ôÓkºý¯Œ[Q£=bHËà|}$ÓµºÇ‚¸ùšMÓþn Ösk¦,M¿qõp_ÇÀ»?‚…ˆ°ž,ØÑFþôÝ9¾ÓÖ?ròéͯy%®=ºü€µÆb—i2æ³ÿ =;oú—×ë…µS–¦ß´f˜ïVWL yú£Ì´œê=æD¡P*…"y¡œÒ‚†aÙ"„\»v----""BJ|ZÝ€z'ÄÖ5Oo9"§8ÃíÍ›|ÞÏV×sðšgÎÎ.yh ‹Ÿü±¹¥Ë÷Ä4¢eͲ‹æŒÈòøò&”^ñË5Möæþ·î8s|ŽÇ“=zá ß8/ýë¿=ïÉcWž2*Ëí;å+%?]üûÕ9”Wéò}\÷ûþ¬Œ¸B°kÚ’U½¶øŽ·«>~øš_„¯|äk™W.Çô2üà¼}ž·ð›{àîñ  ”NÿŸÛÇž2Á›îqM8kÊ÷¦™›?ï8 .CòÏ[þì…U÷]û?[õÈÆÇ¯ûïðÏ?rz¦4H]¢Ù¦¿õ„ YsààˆÀ¶iÙL«Gø/&f«c˜bÇŽuuusçÎKÌ÷ËxÖ'E›ûóÔðɉ€q±Cs©ÄÈ” •ð!Ë–‚EŠf@&Š$Cãr;S;D– €Æ£tJ¥¬•{Ã<±&63¯HJ;Í’¢né:K¶TD€»Ó -T+ KAFa~‰¨£#ÆÞ%€ð¼±,R©Ó#I’ ¦NZZZ:räÈ@ °~ýú 6TUUE"‘þ¶–"ÓèX¶¡7mzñÕ­)ófvÏo£ãš! ¤Û?÷mê©1cí_?_ø›²úöÚ÷~ ½ôƒŸ­Žô~rcíÛÛÏxöÓÆÖÏ—n»wÑ©wW}ïÕ­Í-›—Oú÷mw½Ñ»!Œÿ°fú¯64ø+ÿv=öâ«WVaØ…‹|yÕ:;pÛ({á¥Ý ¯¹dltB¬Í+ny¤öÜ×¶µ´îùç²3jßþWƒØ¶å—\õVÁ=Ôú|pá?_/O¤‹6>üóÆS~½¾>úøÃMÏKûæ‹­\}í’1$ŽÀåv%ýØ•“n^ùèÄ¿^=ç¼Ò­Ï?pjü9{eŠß=ìtÚšÊ÷HNJ?¬d”$ûÌÇW^ßñØ—]zÕ ùŽçïŸïÄ.).7D4‡l9p0°™–eY8t‚á/Ʋu(~&„ؾ}{CCÃܹs}¾„èòàºë:~㦬Ùt¹)³É¢ÆKV¤hSDéQÓ|ÉtSø¨t’JFÈjÕ 83©µvæÒEâáIÑñÉ;I¬X\mK%–K¸NRX:‘)€L‰ID´X®F&Ò¤H£åàE˜ øH I¡Äòë¯w×è‘,Ë………Ó¦M+---..öûýŸ|òIyyyuuµ®ëƒ.jê$¢î/ç°ýO.T ¡îüÙK*½úÿîšÚ}µwá…Ñ퟉‡KzjS]ð£Ç®š™çv ™uÍÅs:*¶Öö~ç«§þèç—Oâòã’³ ±à?1SõýÎŧÑmŸïù5å)7>~Û‚"§`þ~qÓè5¿ûË‘}Îâ Å«Þí|ï¹×ü‹®ýNaœN¨n—ìò¦ûÜ®ÌQ§\½üñ‹‹¬Š7~¿uþ]O\5-Ç6òÌ{¹rDbþ”97?¶xN;Å•ŠK¿26Ôœvéå3¢&UŽ—nç³ðÔ÷qîøšâ‡@ëñ`rCZûî._ÒôÛÏuwýñ'1Ý·Àÿ{¸{gºi¥®º‰ÿõÝÌ»VÝ1Ã5È]rx–ƒƒäôÒ½,¢_¢Q±mÛ¶¦¦¦¹sçvÙçß/ãYŸd+dm÷JLƒÀoz0’+‡âïµñL¥‰WE’FÉD…é6g)Æ(5: @$ ÄK”‡yÂuh%=Äh,—bÌ 2Ÿªˆiª4\Q|÷Hr#‹’<a(i4 r±‚\¦D„¹OE˜Šp»ñþ¡ÆžÂ õEQŠŠŠf̘QZZZTTÔÒÒ²{÷î`0XSS£ë‡ŠÛíSgËq#öv̋ԗ?ýMíO¼Z1בdådÙ}"ŠK…eY½ß–$3;ZŠ¢z²²¢‘(ªÂ¬x ™4bô9þ±˜4Ö5rxJ¯¿ªàï+ÿ\Ïšþ²ò-é‚keÅÝÒ¤¿òÜiÛî\4oîÂs®¾÷å­à õMé#GæDK)Å£‡'è%-Zгi‰¸½èZ§*ý³e×ý¢ýÂÛU=v˪}öíMqÕ³xè¿à&€„9ßÇŸ€»Çƒñf"m¯-ù÷3Ö¤§—Ý}ciÓ­^ìK õÎtÏäi”´“§F…Z—L]çO7:èÀƒþÁfZŒ±îAZ]ð(”öx!DEEEsssw¦ÕßSô^˜1KˆÖsK Ú9Í–"²$€Æ¥ Êp,)J¡š-I%ÑÃÈ“1Ãeâ¢Sd1L²Ÿ•‰5Ñ´ÉJ¸k¸°ðB"&€¡ÔúŠ×Ê“åtJD€™*‘ÈfËäÔCZš™@¦¤5[.²½i‘0‰pS¨ŒWsÞÕƒ3(Ž?EQ† 6sæÌqãÆ©ªÚØØøÑGmÚ´©¶¶ÖÞQ1`Žñ„ ?|éê.˜µø©'>œvý]/]úÎ⯀Žk†âÅÖÎ{ïúC.ù]@dY² 3zËñ¶Ö¶~[IXuå Ù2v`ÿ‘z>蔫o˜ùäÊWÞo{{uÁ¥ÿ:­ÓcÁ3áüû_<ÿ~ðÀ®×núÆ7ntí|ý;…y«Z ëÀþšNaRñ{ƒ’áèÎÎölmë`HNwxÃϯ{B¿éO?4öýöyW/~ê«ÿwË„ø¥ýc<ÕmÝŠ@Ëó·~øš{ò³+&L8Â/ ‡Û%ÞÑÖ!gO8!•/84ÄmZ=iuÁ—bÙBlݺÕï÷Ï›7¯GoÑøÜ¡0Þ“aFÀÓ¨è`Š‹Z‚Ì5Laš™/SŠ8h)>*L&q `v?㪤Èh&!#e3,¬f&Ú¸ÄÀ3©äQê2(8AˆƒŠöb™Ê\&Üœ€Ú›$A@˜%ˆL(€\ÚÖ`©º°Ò%&ÅdQ !H',ÌiD„"SV‹þ<ÏÉC¬)²!I’Çã™1c†®ëuuu»víÊÎÎÎÏÏÏËËS¥ï&:cÀ–-!„ X ¹ßºç– k–ýrM×mýu#öiì´IÆû¯¼¾3`†®[ñÀªíýÞõhm}æîŸ4hZㆧ~úÔ¾ÒKÎ+¦hñÅ‹ÏÜõÄ®ŸtåU³ïÞï9ûÙã½.Yúêº=-šÅ%ЃAòÉß½èäO–Ýõj…ßxÿ‘û^®îñ¹D³ssHåÖŠŽè·$kØPµ¹¾%ÊÌÞÝÿ*KVÝ;ÏKsÏ]öÛ‹ì´G›¾ýÜ“—ÈSnÿýó߬ùYiQÆÐ…÷מqáì{B†œwû­CßúVB]¥Ë÷qМ1c¼uU & ü«zà 9÷¬ºs¦°ãÒŸ»ºõÑë–}Úõ޶½ð™VóŸ|³äµÉ“_›<ùµùw×–aø°qè.±–ª1rl¡£ ëÀÁaRš"Ó€²JÌhWáœoÞ¼¹½½½¦ÕßSô^8hî2gÛ¸X^j°ƒÓwDÒ]RÇÅŸ.i*.J!îR wS.® îg‘078çJÒ|ÂÈ„Jz§èy\"ÄŒGmZ"Ü@,ØK%¢•E—’°°Z™ €tp€LD óP€f–`”ÂÂ2¬½=Ž=ÅYêÝ©›Çã9räœ9sæÍ›—™™yàÀµk×nÞ¼¹¡¡!•ßÌaJ?œ˜d‹Ì¿ìÁ‰_½äÉïæ÷^nýúõgŸ}öÓ§AÛþè¼¹n;øÖeÎ>×k IDATÝ7K·¯=éÊŽ'výñ’!ýýió¿9ãä·.Ú¹úÆ¡}W5ëËÿµ#³ô´ñ'ž+M«úèßµÃO_0âD¼Á "Þ}÷ÝyóæÅÿÌÊÊú;ó¥@‘z´MmmmMMMòŒõ‰ŽŽŽ²²²3Î8#õ*›7oöù|£GÞ¼ys0œ3gNï9Ÿ}öYffæèÑ£Si¼µµuË–-§vZ÷¯,¦mj<ÍMZwQÊ &q…˜<­•Q•2©°ƒâ…PÜ”¨12Fª\€Ä6R[‚»ˆê£ &8à%7 %4Ì£é¨ ÌCïç!Î]4J ÛYz¾¬…¸'È[Ú¸«P6D¸ä!\"hgjX¤ED‡„n ÝG‚2ÆgüM•¿ç;wJ’4nܸTf©OTUU)S¦ôR& 566644hš–›››ŸŸ?dÈIêÙQ^^>bĈüü>hCw!†¾fÍšéÓ§÷·îQ‹¶¶¶Þ Üú§ÆüþÄ66ˆPÅÊÿyË}é›ßê7Óê/”ÂÙß(<Âç8Já¹`ÑÈ/»藵㠓~°sö…Ãá¹s窪Ú{ùÁ5mÑþarød´35G èPèœú™ðIÌ-i‚–:D‰:È<4úA’‡Fí7Ð…¡3+‹¸L0•Fé…)˜=ÙAay!sð¸#Hˆ+™l™` jpdJZ¶)¤|ÔÐ…ä"ÜCY;ËÌ‘:B\ò ÓC™à’D 3hpçI¬ÑøÇpù’äQQËVwØŒyÔ¨Q¡P¨¡¡aïÞ½Û·o³®.v,Gúa8“Õé»2'kβÐÕ+îýꉘƒÜÇ3$I:ü­…© ¾¾>Ï™3§O¦…þ»õU“ö]0”\Dاeù¤3–f§EãG™ 6ýâ{B!¢MDX’¸ƒ%¢ó ºœÔeöÙaëø «#©€›êr#‰ˆv–íX˜KAaZ€ —‰ ¥M_“Ü¥/žlÙ „¤¥¥;vþüù%%%.—k÷îÝk׮ݶm[KKKü·1`7"çÜ0Œ“l–-iÒÒò@Ç]ÿõ²ß|ù0¦Å7ÿ;póa4àÀG „Ål¥¾6sÎ[ZZcóçÏO…i¡ÿ ò‡bfa³R"$ÄUŸdðIfs1o´ÿVlk³ÜùJŒl1%W.B¥¢C„ÃMeûÏx#\ fN,7¢)8!$$,‘8!ZÒ˜Ú˜bÁ[¬™ž/@ î2|)B8@„!¢•I™¢ªûØSœ¥>1¥BHzzzzzúرc;::wìØÁËËË+((0ÙÒ4 €³ÑÕH} ˜O)ë0Æ6mÚÄ+((H‘i¡ŸâPd‹1¦ñ‡² SÊ…>j6Zª œRcÂî ‰ïLìfÊ¢ºV¦Hh•q€íˆpÆ' )X\ˆ·br2AçÂBðPV¥G]$š`=]‘ÒÑÁÜüÜe‹¯ª$@¥š%5… <À™‘”·gp¥ÇëGÉÌÌ?~ü‚ ¦M›&IÒ¶mÛ4M«©©ñûýýí§­ªzbZ¶²åÀÇ!L¶R©e3-Ë²ŠŠŠúËŸß²Õ ¯×„p‘ˆ­ðn0µÞòJ”Å©•F·dJÑñ.¶[j¶àNÞmh bkãF4iLLBç‚ ˜Üƒ.,ÑS´1 €Ái¦Ô‘ãs” …ehã^€Jô SXH— gð*¤F=‘”úËr#öBHVVÖ„ N=õTÛC½uëÖuëÖíÚµ«½½=EÖe[¶²å`Ð`Öoü¿võ•wY«Z÷«û£øàÀ©A’¤ˆf!²e3-ÎùìÙ³û{–A5­ ¯3¹s7dªAå"KtªÐbšò|4ʬZ¬Dˆnr¿C<ð.ÑÁ­x…€DÐÈa a%rQQo 9&-1ÜÕÖn)5f†BY–iµ2ìã©3Ò‚ ‰ÚÆÂÜ…„$½*Á…é77Æ;s’­8ìÔcÆŒ9õÔS'Mšdoøè£öìÙÓÑÑÑûÅÕ4M–eY>â—ºÁ![ýß·¼4}Ѫ¦>"°o[]öøÑ}©<¸‡O(jÛ¾«uð¥É8pp¢ã¹-ËÚ¸q#ç|Ö¬Y²,÷+×!Ig«E«Ñ:˜¬€ •ÀKm—m—j·|¦ •ZæöH~£¥Vé­,Sã‰]„ÉÂɦ, <þX6!âD…#Ä;õ'"Qq2ᕆ7"¢«jO³?dËþ*Ó@%![DÞ¦>2 Á%D@Ìã`—±§2E©àp²ëô;f‹R:dÈI“&•––Nœ8Q×õO?ýôã?Þ»wo èñ°[1`²e¬þ~‘DºB™þàçýw?–@Ç,YøÇuy½ß¼uß¾pѨBDóóç¸ !„PIM/<ùŒŸû4ûJ¹#‡‹ª½ Çõ¤9pà`ðpDc¶ú´lÙL €Í´ÐO· )µ&Ú!tHnj†™¶½rœª„0„ ÈÔ=FÚ~KbR8"4·4Ø&:š6‡s,A™ñÐ.&„›$žÃ"ÌM;æ]ç‰ —‰èàæßÕEbÍ–ƒnÒ+5ªé\ p!Ðx€4jð’€%d…„  Ô oOt`PmQ‡³•Jƒ”ÒÜÜÜÉ“'—––Ž?>‰lܸqýúõûöí …BÉ5Ms¹\ƒÛ™c$[ê™ÏÔ1oÿè¾¹™ÃλýªÉ'¢y°3D[m‘[8$éõiÔ­k ÁÍÀ¾w~œýöÍ—>Z»«Ifa>©¯mîß–!8è 6­é¯Ù©òdYVyy9¥4δÐOò„Á°l5iû-b\¡ eUúUb Ò'5fz¥é1ÄÑñ^YOSýÛ µÆôÅ­Yš ñÏL@" ­œ a =D!Bg” L2•E¸Ü.¢êÙÔßÎT­\‹ë°TªE¸Bˆ0Ÿ‚ˆÉ©LdShÍÚÞØ‰3@~ЩbFÐ.$)//oÊ”) .=zt(*++[¿~}eee8FŒl VOŽ- †iѪ|åÚ -nyã…+F×bÛöµÛ—]{ê¨,·;kÌ×nÿk `®[2nØ÷WGƒyå“ Ó¿±²QDËßöøUóGdº½yS.X¶nïÚå—Î)Îpû g]óÒN#Ñìé·>zùœâ ·7oòy?[]ÏÁkž9;»ä¡-,~òÇæf”.ß{ʈ–5Ë.š3"ËãË›PzÅ/×4qtv#ª·Ðýþ°/+£»ò.uå•\uùWÜû+¶ãÇ2²3Lk_Ñ]8pÐ?¤íÞ¥VULÓ,++“e¹¤¤$YX¼¿1X‡)j*„X»ïO„BR¸€O2,B½ÔŽ1ªfæJRh]$V¦tIà“ô&&WQ 3!M €ƒû9’#»tPBˆ±+K€ƒëI³ÕÊ<–)êM€ >)’Oýä.n›»ˆì‰¬‹ó¨Ù²¯Hï~II’ ¦NZZZ:räÈ@ °~ýúßüæ7¿ûÝï222zoÿ©§ž=z´Ûíž5kÖš5kºøàƒº8ÕvìØq8#úbpØdK´ýgé7——þöO.Èè~9u\3„tû§à¾M=5g¬ýëç SVß^ûÞ¤—~ð³Õ‘ÞOo¬}{ûÏ~ÚØºóùÒm÷.:õîªï½ºµ¹eóòIÿ¾í®7âÁUƇX3ýWü•»ž?{ñÕ+«0ìÂÅ‹¾¼jŸn”½ðÒî…×\26:!Öæ·nû|oìV“§Üøøm Š<ž‚ù?úÅM£×üî/Dö9‹/o¬z·@ð½ç^ó/ºö;…ñ@HÕí’]ÞtŸÛ•9ꔫ—?~qQ?­{Ëö?¹P%„ºóg/©Xôêÿ»kjò\9<˃Á²l†QVVær¹º3-|nD!„­c®¤…8TB¸àR÷˜\–ˆ R«FËì€êŠq,oLBŽÑ¯KDg[ŒÐ!ªLIz³¤ÞY -,áö² `Ì Çìaͨ5K¥º—¶EXÔ–§ö™¶ƒ²Õòˆh4Óâ}Ë‘C– j¹¨¡„¬¦ø`ZËV/nÄ^ (Ê\°dÉ’)S¦\ýõï¼óN]]]÷bË—/¿îºë®¿þúI“&=ùä“ÅÅÅO?ýt æççÆp¨ŽG‡l‰–Õw\pû¶³Wýqéß õ‡dådÙ}"ŠK…eY½ß–$3;+–°JQ=YYÑ ¢¨ ³â¯5ÒˆÑ#äøÇbÒX×Èá)½þª‚¿¯üs=kúËÊ·¤ ®]”ÿ=J“~üÊs§m»sѼ¹ ϹúÞ—7¶öÔžzKÜ^tMO*oÇl±H}ùÓßÔþøÄ«zâ;S×¹Çã>ã8pÐo¤¾j¦¨ãнVr›iy<ž3fô¸¾Q7¢=;òlÇŽMMMÓf,à" €ÎeEâ,±.ƒ×ñt.ˆm»b"A¶<1Ý'ü‰1‘RÂÛyrLrÒÒÎ¥øD+Ö«6&#I¦K¥:€VËã–LJÄA3ê)“‰h‹/3æÊŒp@Õ5.E¸g{¤ • PâèЙ†£IÔ´;ì¾ ¬AMÓÒÒÒn¸á†÷Þ{oêÔ©]¾5 cãÆguVüÈYgõÑGõØÔÌ™3‹ŠŠÎ8ãŒÿûßèÉ“-½bÅ%—ý.÷þ7Ÿ¾`è¡[鯱'Y–,ÃŒþøx[k[¿‡¬ºò@ôÆböùEù§\}ÃÌu+_yÿwÏ­.¸ôšÓ:eHôL8ÿþßý¨ì“wžüzՃ߸ñéVpgg{BmÝbÞ©»`Öâ§ž8§ò¿ïz©:ö0ãmrvN_"8pÐ?B¦þ_éu]ß°aƒÏç›>}ú¡,ý=ÅÈç|çÎ sçέ4Ë$bjÜ Äeļ‡B Ž¥»d‰EnE˜çérTÎ%¹Õ˜Þ)hãJ Æ·H’S1ÌUJг‡Å{à,ög¦ö[™Mft ‰ÄÔê-A;DÔ ÆŸíÜ$ÕÆzA#ËÜndUy2¨LÌ=¡2õ–-Jé€ÉV/ÒÍÍÍvB‚ø‘‚‚‚úúú.ÅŠŠŠž}öÙ7ß|óÏþóĉÏ8ãŒ?üG=H¶DÃßo¹àžªo¿ôú3zÍrÔ_7bOÆN›d¼ÿÊë;føàº¬ÚÞo©kë3w¯ø¤AÓ7<õÓ§ö•^r^1@‹/^|æ®'®xtý¤+¯š¥Àx÷†|ÏÙÏ6ï=pÉÒW×íiÑ,.( š}žÅÉ6Tm®oéi‡!ÉýÖ=·LX³ì—kÂÑ^ß( ‡æ6PkÙ²«èº^VV–––6mÚ´^|FG:@Àž={êêêæÌ™ãõzhÌ\È`GÁïÓ†x€‹^ç¢Ö¸ä‹ñ*šÐz iRT•@2!¤Þr™‚0‰$iI:¸[b>F0(-LNbnhµÒ#±Èzoìt-VN|“c¦18£„˜ Ífv•  ÁÌ 2·í€ö9Žz²5àÖt]ïs7brã=ö|âĉ7ÜpCIIÉ)§œòÔSO{î¹O<ñÄÀúóEb`d‹|sùK»‚»žû¯Bš´%€z/zSï»vAr/üÅŠ³*—Î’>ü´û÷Î?o¦Òw¥ÎP¿rá‚ò[fåeŽ<ç)vÍk/Ü0*êýËùæâï¹›C¥×^6¡áQ^wmö{wŸsRNú°ÓmúösO^V²¼MΘ1Þºª†Ù™<éÆ¥ß ¿ôÈ+Õ`-U5bäØBG/Ó-MÓ6lØ‘‘Ñ;Ó€äû•®@mmíœ9s|>€6³Éª‹m–Ï-YTbqF–iWá1ÄbòWA+aJ‰‡Ìw˜î¸ò»%dŒÐZË“,šÀv)"\îòU­ÙÉÎ@hÆBãÓ$ÝÖ©ð4Ÿ¤ÛŽN‰ˆ+ €‹²F#}—–­P€B™ÐjC‘‰ég5Éc :up¸}ï–­ÜÜ\I’’MYɆ®1þüÝ»w¬?_$¶ÌÓa7½¯ß4È]4iiy ñgæå \nT'\þÜ'—?ÿj©ý_§òÊ‚_înˆÿ¥žý\ÝÞD[$sî~÷«{z8)Ó"Væ¢k¿7œÚµ£Û]#ÎüÉ‹gþ¤sa:fÉÚÀ’¾z ’>æäÂíØ,ŸFr¯}'tmR$û[/ÕÚªwZÕ®ºÌ“OâÈø;pàà``º¦¶÷0++kêÔ©}.ÒO½pUU€’’’´´hºÉZÚ-%_ 4¾¡îVnjVFrãÉ»·®ñÄÛyÜÄÕayÒ”èg T AjcJzL¦ Pbç§F“Óh'—JX¨™""'2^k‘(M–oˆÖ@$"üÌ—KƒÂ1%°FŽ" KpnjYT*E¸ᙆhÅ‘qü ­õ® ¯ªê¬Y³V¯^}þùçÛGV¯^ý­o}«÷6?ýôÓ¢¢¢õç‹Ä‰mS¡Š•ÿó–ûÒ7¿5dpƒ¦”ÂÙß(ì³”{ä‚E#õ¼88¾Ñ¯5xd Àž={òóó'OžœÊ¹àFL±K•••ö¶Û¦ duh!AT³ ÛCç¥Æ~‘¯¥h‡û`Å,R&§>%R‘$å-žÄК¸ÇK Û“¨ …ÆfÀ î`Bö[¾<%*šØf¥·YîÌXp˜D¼¦t™+W "æÄ´mbiùrH‚&• ט‹ FfŽñ›G¹¨é€[ëݲ`É’%W\qÅìÙ³O9å”gŸ}¶ººúÆop÷Ýw×ÖÖ¾üòËž|òÉQ£FMž<Ù0ŒW_}õÍ7ß|óÍ7ÖŸ/'0ÙÒÿveáò̾qå½_õö]ÜŽ-ô—lE"‘@ ™™™"ÓÀ)R$gû÷ïß»woIIɆ âå÷7rA  1ÉNXÈ8iâé’aEû×}Pcd+> ¿éÉwEã´˜HŠIêNóAG«­è,…  ¹rä„ð#$(\yÆ¿G‰PIÛîPQA¢Ç3äد ‘¨=°¸W&A“S·¤ árêò¾Ðf!2ŽZ7âáX¶ú$[]tQKKËC=TWW7eÊ”wÞygäÈ‘êêêâ‚[†aÜqǵµµgòäÉo¿ýö9çœ3°þ|‘8ÈV_®ÿzÙo¾ü…wǾPJK5X8Þ°aƒªª………ý˜è—&·cuuõž={fÏžžžž|¼FÛcrY¥–ßJ£°SôÐ÷ )&UN÷è%æþ Zî8Ù’’¶’¤ˆxª)¨B¸)(’¾ò3_¶IL VR—%< ‰©öHæ.3¿@ 12ê¦Vˆg4³4·drA(A&gQB@‰Ä„ÑjºÍ=CPrÔ’­Ã‰ÙÒuÝëíöqÓM7ÝtS×(¥_|1þùÎ;ï¼óÎ;Ö/N¸ŸHÝìd3­‚‚‚ôôô#䌗ï½ýššš;wΚ5++++®³eÕ¨×i.ŠwÙbZ~æ#” fÇB¤É:‹“8ëòÅÔ¶’E¶\R"‹&™¶©1³ao?Œ í;4.B(E»¥ƒ&¼ŠÙj$˜Dòý¨mt‹éã1þ”!EùÆäx.¢BB1åIë£!dBH;ž.c]~žcp)&€=#Ö‰ÄÈ%¨×¢›%Ûb-á  1×§Å…JMÓo†ž(«[ëBݪÃþëö |Ã![8pp|B’¤>ÉV0ܰaÃСC'Nœ8ÔAÔÙ:xðà¶mÛJJJrrrâ…#[Bˆ â°4&BTÊ4K¶b¡W¶F|ÜvÕ e|Ø6¾’åëDqÉBqsÅ…‘þI`lƒ‘«s)-ɰ¶(›QÙç­6³i’«1Âa®Ú}×bá\§Z ¯Kf´XØV“žæRƳ€åX­,z: À'ë\Ô&× áD6KgdÍ÷#G¶4f6j=êôMÓË–88®Ð's²™Ö°aÃ&L˜çý"[ƒEÎêëë+**f̘1dÈ._Ùå«Ã; ΄à¢f–e¢,NlÑ,[[kW0Ÿ™§º8“%\‡ eŠÂª¬´ÚÆðX¸UØJÈeIñ®’¤½‡¶)‹Éö$1’'I¡Sšô¨3Ñ%G¥¶šÍ4Ì–›% IO³åØÉ¯]”iÌE ¸ðx$Bã¼Qª=J¢¬úlíÓ¶Ú!®Tóõ9–-8pp¼¡wæ6lØP\\<~üøøÒ~DKª|CCÖ-[¦OŸž——×½¼ýaG°‚AL0njv·­ïO(€]Á¢&dÄ÷ ZÉùy(³ ÏúÀh;ã¡™¤Âe&mQ4!7[‰ðüøÎDÛ“h!Z’±?œˆ…d¥«f›éâ.-F”…d©5Z¶D™ÁÜ$¡0¸mëR\B"àd¿ÒC’æãˆ:%×·Tº3R¬ÛçnÄãÙràÀƒã½¸;::6lØ0bĈd¦…YªÓ²ÕÔÔ´yóæiÓ¦åçç÷Rþ@¤V&Ô.‰ppa*£²-¿.bŒªÍò6ÃG !±˜wÆkœGŠšLN%eQxR<ë´»¶²´øŸñS„¸j看£ƒ¹­$–V¯e°ˆ Ì¢ÞC¯l¶èéAá0¼d¢ëœÂÎðÈp®J„+õµ1[],[›ü5y®´^Ê'ñl9pàÀƒcƒ ßÞÞ^VV6jÔ¨qãÆuo¿¿nD$Ű÷‰.d«¹¹ù³Ï>›:uꡲ²ÄË7áœ{ ¤*8€ Ž˜«Ýt·Xéöü$å7Œ©’2ªJ±@xPB‘6´ŽIYÉc°„ªË´—‡Dja¾dµ¯jJRRt—P¹ ŠÌâ'²ÑfåR4K@H4%‰ D¥œ³„‰˜­f=²tšr㚦y<½¦S>~á-88>A)µ¸Õå`{{{yyù˜1cÆŽÛc•¤ßéÙŠ“¹–––O?ýtòäÉ……½%ܰ±ˆD &F#Då6²#ÙwG ãYŸ•ØÃXˆ",á.Œ›©˜›†z:À%„´2Ñ9;ucŒÒÙpË–N¢zš-[ê’“â»{²%pSHˆ`{™‹Z€¦úÑL¶â­­o©.ô¤êC„#ýàÀŽ?PJ-n&ikk+++;vìèÑ£U¥¿nAýÊ-m“§ÖÖÖM›6|òÉC‡í³}¿Þ¶%º)€ å’dX1¡ ±/”˨OÑO8çHFR¤<%„TYYFÜ|•dÛ²#è›Yºˆp•&q•°èD–·ÕHDˆ§»ŒZ=Ëþì–™§Æ>È4zE$*pËÆ!SÍàT":%œ@amVªz ½Cqä,[ë[÷¥°ÇèÀŽ?PJÆbûýþòòòñãÇ5ª—*GÚh÷dãÆ'tÒ°aÃú,/„ØÔ¶KçÂâD‚Xøy¼›†)5òL®˜£Ð3)ų&¿K1NÆ8|nsgh$!$ € ¥ÉJ‹Ë“Úйw/[¾Hç~–à^A+ÊE‚±(RØb€B£Š¦¦€i©^ÉB@…ðÍÁ½½ÏLа/Í‘Ø(„ØÐZ:ÙB8nD8pp¼RJ85¸ µµµ¼¼|„ v²¹Caïè§e˲¬7Nœ8±¸¸8•òBˆ]¡½\@ãî©v${ŒUGr!LÀ€°8‰‡gÅKYR |ü`ÄR)A€H-V2µB IDAT†OãJ²ù*žºÉÊè’$ÑR»• S:w“Î iˆ%L_SèL6‰²”ˆvÓ@gÅfª°D¦D¸ÅT€É›w8pÀ0Œ>§¨wØdëHX¶v›ZðÐ~ºË–88Ú1€yK˜---¶%iĈ}V鯂<úcÙ ‡ÃŒ±qãÆõÙ6ÙjÔë(KW$+lxe‰#´î×<’xLÂH2;ybÂWɳæŽåê‰X*B°Wdœƒñø-Š–”a6Ù2R¨ºPTÅÒ¬!ÓDÂÐeAhÐÒ AÀˆòŒé Q3d©4.Ò6zw¸p}Ûè•¡J„qéMMMëÖ­ûì³Ïêêê,«kì]Š8dËní“–*©ë>À‘~pàÀÇl²ÕÜÚ¼iÓ¦I“&¥bIXÌVŠd+TTTBzñcv‡"`EÜüqKV«îµãßíÌ|ܸqHï³%XeqÖnp™€™AcÑT*åካ¹Ç·Æ?X=ÉÇ[IÖ,$Bêb’ q3!` ©=–B1ãa†ph7¼vè˜"s;ÿO4eu]k·|¶]É#[öÔzeSg€Ãg{, F ¸"`èÐÒÂ*:º²RBHffæÄ‰O=õÔ‰'꺾qãÆ 6ìß¿?‰ô8ƒîF´-[þýÕ}àX¶8pàÀÁq‚†††Í›79²¥¥VŠbK [½W ‡ÃeeeEEEv^ xŒWêËU¤N DPˆ°å‹«aµhi„Ò8÷’iô8à1²•,o%™h’°!B'.¿éÍV TŽ)Ë[‚BÚ-oŽ Ås)Êœ ´{•%Ñ¢§å¹ƒ¦)`$JS¸í“åAKÍP BЦ{ò<¡€p»Áu}òʸ ­¦w¨+X«5jN(¥¹¹¹¹¹¹Œ±¦¦¦†††ÊÊÊŒŒŒ‚‚‚üü|UM¸JWd ±˜­ÝEýÙŠx‚[¶²åÀÇêëë·lÙ2mÚ4JiSS€L9§Å¬ÏU‹ú¬Û_ËSïU"‘HYYY~~þĉí%¿¿d‹ÒÊ•,!¬vËeç·±iµ¼£X‰¨,9ö!n⊘ªsê%oL”“ÒìØ)wjôìl%Ì“ÊØñ[}z~~~KK‹msÊ’s·?M…l ÌØcMÓÊÊÊrss'Mš§VHïa"Ü‚§… Ào¸¹LH1TœcÙy “¿2¬dùøDWU)á]•% $Üa¦d²Å% r›éÎR4+)Yu³žn I‰™Çt®X\¢T„HVÄP=ª ÝÒ%Y’,»Œ]˜ Ú¤û@¡›’*3û„ ›áMº’&Sœ%ªª>|øðá‘H¤¡¡¡ªªjÇŽyyyý0>¥ÎùgíÍ ÀP5+õŠ'òVD]1[|ßòÒôE«šú÷V5èж>sÉ´<¤Î|h ´VÍúÿ÷Á®à—<¶/üÀoNOÿúoWƒ?.åàXÇÁƒ·lÙ2cÆŒüü|$1'J©!RŠ‘˜±;yÒu}Æ ÙÙÙ'Ÿ|r²«¿dË3¹iq€f'$@›Ý!'OjLRËû Ä\‡Éd+¥Îy¢$çT‰jw‘*mI"dñ‹Íf:–´hjPX’ž©$!¤gÄÒÓò@$ʱâò]”(ì¡Ùù€lëšL((3¸¬q­¿VFgÔ¨QóæÍ›={¶Ë媪ªbŒíܹ³­­m­u‡b“¿)Ì,Å“£¤º€¦i.—kp}šÇŽ&²uT@´¼yÿÒm‹þRoŸÞ?Uê»Bj­öm«Ë?:í8þ™%\ypq\ÊÁqŠƒVTT̘1#//Ï>B)e,J8Ln0Þ÷ëã X¶t]/++ËÊÊš2eJ—ŵ¿Šó{D ·5´LHd¹@8&ë`[¤„nÅÀ¹°)Tm0spÈæ¦áÛ›‹ü‘„vƒ+®hÊ)惴X‚´sorÞž¸ D4GP²Rá /& (¬1”ÿÓ`nšGP¡™Q²å•£Õ¦;:T*¸d@¥D¢ÜŽšß¬Iq¢º#--mܸqS¦L±‰›7oþøã÷îÝ öÃ`Öœó­Vd¸+»È×?²åX¶Ž°]¿˜Ÿþ_/ùØâÇölÞ&•œ6;sPÜ­ûö…‹F*)pNöô»ÖÅ~ïæŽ_Ÿ‘;nñ;-‡¯ýý…ÇžÿRuüédíZñõ¼q7¼Ý|ˆÆêïI¤+”é~>@ â(zŸ|:fÉÚÀ?®Ë;2|ÒjxäŒßOžüÚäɯÍùÉÃÍ`‘„ãrPN<ÔÔÔTTTÌœ93δЙ9e+ ÆÁ>Û@ÌVË–aeeeiiiS§NínÆè¯âüø™`–à  RÞªyã¡í¶Óд¨ÍœtS© f}Ü<ºÒÈÉ®6ÅÛ$§Wêy7îÐÝH’]ˆ$©p™Vbó ’ßô%ý] ,H““SúHT„;ëÎ7é‰èoF$mšIŒM¢ã@»å¶3$Ú bpEbŒC" *dKÈ›;ªRœ¨^ IÒI'TZZ:a„H$R^^¾~ýúªª*;b½¿¨Ó#-z¸Õ K\-ðøú®ƒ®ë.—«ïrÇ)Ž5²uÄ!"aMu«}ìO›mµuFnáûvó̾{ÕOÓž»~é¿Ú þĵ¼ìÙe‹†bA§Ã.þÍÿžýÙOnøín ô-˯}ðàeÏ=qNî!j¨g>SÇD¼ý£ûæf;ïö«&»!zrÁ=ÿº¤¢ââ§¾¥?ÖÁãrP¾8p`ûöí%%%¹¹¹ÉÇ“ÉÖP÷ˆêpeŸM¦ôƒišååå>ŸoÚ´i=:ŒúëFlAK &ç.Y\kѼRŒmÙñ,¦hº§¹ ÊÌcTBÈrt 0åÓ`ñ–æ"%— › /†%h‹‘0ØÄý†„=+9Ö\³”€Ñio] ‰À É4]xl*$*†WªÝXê!0.°,‰P€J¥ˆE+Ãõ)NÔ¡|·70N™2¥´´tĈ~¿ÿã?Þ¸qcmm­iš©7XéÈv»˜à†©?¡÷¶eËq#öm/Ÿç!„Pªø §|séßXÀ¼ö½âáßy¥ŠMo/Ÿÿõ_oïòÊζ?:;íô[½|Nq†Û›7ù¼Ÿ­®ï~s[µï>ô’ánwæˆ9=ö~=ô?_^òÓõÁ¿_C q•.ß×ã3A´¬YvÑœY_Þ„Ò+~¹¦‰0×-7ìû«£]á•O.LÿÆÊFawæk·=vå)£²ÜÞ9³3NÿMUíoÏteÊ}›¬C €ð¯jñ'ø¼9cO»ñ…-A@´•?óý¯MÌ÷¹¼y'uÛë»ì÷Ýïû²2âw³kÚ’U½¶øŽ·«>~øš_„¯|äk™½üIþyËŸ½°ê¾kÿg«Ùøøuÿ¾ñùGNï­Fò=7¢Í´Ün÷ôéÓ{ß—:Ùjã¦É%VÈ’ ™²sÙž>Îa“'[Ñt{Sa ‹ »³„ܦ]˜Hä ËÞÙÝ%`&IžjfbJ-NƒÌ×èJîh«ÕÉ6•.ò§‘$ dC7e](¨œ˜ÒöˆÒ³@ˆÉ(%&¾% 7ì„ÙÄâBP ÌHƒÞ÷†ÄÞÑ}ã§,ËEEE3fÌ8õÔS êêêÖ®]ûùçŸ744Äν`»Ìv«9ª—òþÅÙ|¹–­>ø ›»‡BN?ýô/¦&[YWþ5"„à,Xµúž¢¿^»øù Å—<³ê[Û–\õäÖðþ—/þ¿’_½xó¤ìDƇX3ýWü•»ž?{ñÕ+«:ßÞlû“^¸ ׿µ·Í¿ã÷V|çÒ§÷0ׯnz|^Ú7_låBèk—Œé©ûÖæ·¸ê&þ×w3ïZuÇŒÔÞŒ]Ï]qñsÞ;ÿ¸ò⩼‚$æ!å9ìyꬊ7~¿uþ]O\5-Ç6òÌ{¹r€CO‘ /´@ˆnÿL<\’ÒX;£Ç t¬ʃ.Ø¿ÿîÝ»gÏžÝc.d+]Ψ4öÞfcªBl¦%IÒÌ™3ûTuJléÌ´ÀL.«”›œ @³îAlã^œZu˜îÑ饕'q))fXâŒBö³Ð¯ yõ±IX³‘Àä49HKcJXO¼èr®r*Œ˜ Ò0%â!,ɸծ{ˆ­ÔbmÔK+dÉ4Ó`o„”%”SÊ[õà ´MMÒÌãñŒ=zÞ¼y%%%.—kÇŽëÖ­ÛµkW{{{—+µ¥µ1"¸K!Â’Ž-²¥ªjaü~ÿO~ò“¥K—~ï{ßûb:0`²®xåÇ‹¦ ÏrË”JÃø~¸µ©-úƒõ–\wÝìúÍû§ÝtÇÙ‡¸ÈÒˆÑ#äøÇbÒXטüsç u®QcŠ¢Ý“FŽ‰Æº†”ŒÛÒ¤¿òÜiÛî\4oîÂs®¾÷å­}ÝÖ´`hÁ!ÈHÏÃdu5õ®±ã;óHV[Uyÿ‡Å±ÐtÏÙÏlhhâ n¯º¦'wCÿlÙu¿h¿ð¶EUݲj_j žÉÓ&(i'O«ô]-«ï¸àömg¯úãÒ9)Æ0&æ!å9ìyêxC}SúÈ‘9Ñ‹¯.½LÑ`£Ç t¬ʃdTVVîÙ³gΜ9YY‡Ô:êB¶ Ýë#û{o¶K•QUUE)))‘¤¾ßëR'[[÷ "49ìÅä õÚN>ƒÑºHFL45Z79бv ºD¶‹’„$iû¡Å$aî2¸—ÅŠ}%‡ôɛҌ>`Cš€a$ž·!žpëÄ7$Ê2SÀ›+›ÞÙŒÐV¦ ‚€˜Lg¢6tXžÄÔEM !éééãÆ[°`Á”)ScŸþ¹½1 Ùe>©¯*´…úK¶Žžù¶¶¶oûÛ§vÚÃ?ü…t€d‹ï{ö?üÏ„GÞÛÕ±8«^ñU%~wZ{V~ÿþgÜpæÞGoyáP<‚UWÆÂŸØýD~Q~rWhAaž^U åbU{«`!„ôùÖå™pþý/¾ûQÙ'ï<ùõª¿qã­D–%Ë0c’qm­mÚè™j˜RÑð"}ïîšNÏ#©pXaÚ9Ï7òäÐôWÎsîìlO¨­#1á ?¿î ý¦ž^öìSçí\ºø©]‡ûöÒzÅŠK.û]îýo>}ÁÐþ\ãø<ô4‡=O~SG óUU12cØ_Àަh=n=^ c}Pıoß¾}ûöÍ™3'33³—b]t†{Šõ–Þ[î¯4c,pÎSdZèÙÚ¨1(sÛšì!ELÂÔn§²uˆˆé]tm™1HRì`Üɨ’†PBí“JIdËö?Ò¤§Ã’L&…Y‚?é&õ(*#i¢–T86U!†¸ßƒP 1õ.„€i?N>ìï}–z‡7º_U!ÙÙÙ“&M*--?~¼piÆ ÕÕÕÕ SZŒ[–­88ç—^z©$I¯¾úê­?@²%ôp„+î´´4Õj,aé¯?Šýj"»biÍ/½üôK/\¸÷®+—}n ïÞï9ûÙXø”µõ™»W|Ò ižúéSûJ/9¯8¹+òÉß»tÚ§ËïxnS³®5|üäOþwÏÜË.'fçæÊ­‡~ï=pÉÒW×íiÑ,.( š€4vÚ$ãýW^ß0Ã×­x`ÕöøÍ¡†)MºäúSw<ñƒGÿ¹·]ë¨Z÷ÜúGD:ù²”ÿü¦ÿ©l7´Öʲ7~éo¬aCÕæú–(Û |xÿuÿ«,Yuï|xêiXR'[û­– S²d€f(„eD¢Csµ I•RÚµe+i§a2óÃãFõ·¦¯ÿÏÞ—ÇÙQÕÙŸ{oU½÷z_’ÞHg_ˆaMÒ„°‚ÊèÈ€‹"ÊÀˆ€ŽJppÑÊüeUÔQMd ’Î! Ù»ÓÝé}{[­÷Þßõª^½^_w Ôùð!Ýõî­ºUïuÕyßåœ@ccŸ]hç’-.HP¢ÊÕ}7dæÄÝîB“gei®ú'êg5fIJ” ÉU„ ¸VÖœ*L8œH JJˆÜ6Ð9î…âH):uê±Ç»råÊúúúÖή]}=ƒ¨+˜€ÈÞ5 ò«V­Z³fÍŸÿü烮­?6&I¶ØÑ_¾íÆÚ'.šWZ\·ü««w²²ÿùo^ò3õýà´Zv溎ßvÉ·_þw¥vъƯ,™Z:ãü»øçyàÊ™¹+QÝðûß^æüü£3‹KæþË#Wÿï#×Ìc©¼àk×Õ=öOÕ*­Q;õŠ/”?ãùGWuú-Ý¿çŽÏV)ý÷çì]µ¤²xÚé7ï>ù‚óHÆršsÕ£O¬ªîš“j+fuÓ†¥ŸX}å£O}«úÉkVL+©\pεÿË/¾òìb ³g´7wÚ€ìî[W>PqÓ}ß81 ¸¥ï÷\ÞwË·n4§µ©}êòSææÛä1âx±ÿ·ÿjGrÇ=«¡¦ ZpñÍ<1Ê5ÿâg óµGïÿhë÷VÖ–ÔzsÛY-u¯öè—h¿ðÉrI$UäžøRB -xQ®´Ðt‘à ˆCE«¾²À½ª,7 f2’–d¦•yÒ0%³=%4ÛÎìÖ0ü”(`Û*‡SMå.TŠV=žÏµ ňÚm`t¦T%%OèÞ³·««+ŸFï†ÈÖï~÷»Ûn»í·¿ýí¼yóó¡ÉÉŸýî‚3>}Ç…Uc{ã7Î=÷܃sL¾í–“–­½~ÿcŸXòˆ†ÝÑø·wJWž>o,ygÝ'¯ªûý3_±ÍòÀÇOnÊ»ï±Óqñž<©ƒgžy椓Nò£Vé½ Î¹ãäö|á…–,YâÇÀÞèÛ”rì3«Ƙòì³ÏžrÊ)……cÕz !Þ|óÍt:ÝÐаmÛ¶¢¢¢9sæä¹¤¿ÿýï'žxb>o߇ÿö³ŒjfÒŽÔÇzï`Qa™A RS9 1é£b°5`ŽŒDFJ-)Ñ$#E¥¦»ÃÁ‚‚" €Hs…2‹ö–¦ušÍ÷µ&J˜÷U\•Ö”XVÉe×àÂP&Ò3Êûl›íЫÝí3ÕÞ˜ùvçQ`nß$j¶FÃŽþ^E`])ýÄ)5³fÍš9sf"‘èììܺu+€ªªªšššâââøM#öôô|üã?ãŒ3>÷¹Ïutd¥bcAÓ…C‡#˜lñ]·­üÀ¿¿ž#­@*.ÿËþ>ò®hx"DˆC€ =;‡­êHyŸ5Ž5ÞˆÆÒ>\¦Ç]¦5îøá—̹x»¿ÝB(Dp°Aì´]Qmx)Âä`!§L—Rº%ðRH¦e]2Жèo䜺E4\£mƒåGÅ2Á ËRƒí1 [ã‚dŒ€|7kE`˜<º•²#BéMM›Zi¡ž2#„'ptÃV‰ŒÈÒ?ïE.Tƒi¤cýÉ2Ó°@UiÇѹÕg¤+¢Y{Ç á ¤ì'm@U{„ãVÇBJJJJJJæÎÛßßßÙÙ¹qãFMÓª««kjj rÖlšæ¸U†‡O>ùdssssssmmmpûŒ3šššÃþd‹-\Õ˜8»™ûõ5ÖÁ †"Ä{ CÈ¥T%jŸ5X¡úØCD^J¹eË–eË–ùmüy’ˆæÌÿ IDAT'yF¶6õµR0¤)™””ë’(&¼*øžt!:J›:”xˆ)¾ÜCæ_!²…ðܦģeÝvQp ‰e+¨pKBûÍØ”Xnm>›Êt:bFZ”ÙVÌç4¦P¤Í£¶ Ž­! (ïÿࢺ¥ì6J4¨½¶¢p1sj‚Û–Îë]ûΟ~ô¸WlD,²õzKS€¡êr-¨ !óçÏïíííìì\»vmaaauuuuuµûQ1M3ËKUòPà²Ë.»ì²ËþQGGèxè ZþçƒÅº{>_øŒæWÿºf_èñ"DˆƒŒáÌ©6Zµ51–IâhäIJ¹uëÖ¾¾¾eË–óAlå9~g¼›R NÐÓ(qÙ #R×Õ8¥DqZ™)¾©”Ò'[Ä«ç6óY‡t²üÔJ<‘Ñß·sªé!AÏ[Ú$û9Š\“†•½ ‚PøÖ=Jö\%Å §¨"$'-ãÕC ±Ú¡ƒ[r¦£˜F¡”B€¿90y‡ÄƒF¶öµI*8¦LÖcUUUÇ{ì)§œrÔQGõöö¾öÚk7nü¿ÿû?]×ÇÕٺ뮻fÍšF—,YòÊ+¯Œ8楗^Z²dI4={ö?°l¢ÉV{‚yù¾41Ñiók¶íè …0C„qP1ÙŠLy'Þ<ö”ádHJùÎ;ïôôô444 ©¼9D5[ûÒƒB 8L¡Ä éV`3&zâÅDd܉ÃâVÁmê oeK¹•}ÞÉ€¾¼”¤KÏtk9펠„¤§ï¼“vÄFöWÊÈ žôHEJ C0„´2$BeRJdŠ´"(¸€B¶ö• J‰$’J"A¨Ü׸Ã"ŒìKS‚=|#êrmë~Cò£bE$€£¢ã4êªZWWwâ‰'®X±¢¢¢â'?ùÉ“O>ùè£þéO2Œ‘# ¿ûÝ﮻nºiãÆ§žzêyç·oß¾!cöîÝ{þùçŸzê©7n\µjÕµ×^ûÇ?þñÏîð $[y€Î¾auâ¯WLIérô—&2†M™1M6ïî …•B„q01œlÍ*ªë³lkø)åöíÛ;;;†g‚Q±ÛLJ)m“‚ B©ÎOK r@hð8õoœ~Æ0`Œ˜­ÓÊZ!0©‡ÈT"‚\ÃD—x9DÑm€(´7UÆiν?h›È65Ÿùꆣe$ìßÕG:®~˜3àD¨R JJ¨ä’¤ -BY¯™óR…ƒÙÚÒÙ7Í„cNe1ƒˆÚ‚¢ªXžÆ$ˆD"3fÌX½zõòåËëëë¿ñoœvÚi#޼ýöÛ¯¸âŠ/~ñ‹ .¼ãŽ;êëëþóŸs÷ÝwOŸ>ýŽ;îX¸pá¿øÅ/|á ·ÝvÛÛáBH¶Þ ¥5U¤£­'_Å’!B¼_1Ñù!JHU‘R[ŠA+=Æ” y’Rîܹ³½½½¡¡aHɳ?þPD¶’¶É(¸K›¸´)óõJõ˜¤YùRâ/Ö«F—eQš5Fùy'‰$„´÷—òxÇKö𒃙)QX$goºS2"œeD‘¹hº©ú„Ïöµì… /Q@$@ÁA‘°Ì¨BeÜ™|‘ÉA![¯·´è3uÛIáÔE‹kK&¦h €s~á…îܹóñÇþªeYëׯ?çœsü-çœsÎk¯ íœ]³fMp̹çžÛØØhÛj×}0y²%û߸ëKg]]XP1çô«Øœ”àÛnYZtæõ?¾ìäé¥Ñ‚©Çüó­¯î^}ûgêK¢…5K>ÿ«í–;uà×Ä!”ª…5Ç|tÕã¾í–¥E¼î–Ï5Ô—D ¦.ºà{ÏuäùuéãCìûg–6ܲջ/ñ·./^qÛNž“ÌìöG—.ŸY-¼ð·[‚)B»é±¯Ÿ=¯"+Ÿuê—|;s3 N—½¯ÜzqÃô²XáÔù+/ùÉ+¾…-)/±ûû’¸e…"Ä8¦"„Tªå;’m£MB†vïÞÝÚÚÚÐÐ0šòÖ¡ˆlí÷q!‰WŽe;®lvfÖ`À?Ĭ1"ÏÒ ¿(>¸1Ørè¦ûÔwX wŽÇ‡íÜB@JFÎRNÎÃT˜E¾Ïõ`2y£(°mâíÜ)‰èç7¦E2K•! Q%W i¦í¡O¬õ‘4ñÓWÛz÷þ퇋ÿôrÆ–gõ“ÛÎú寮¾í÷¯ÜúíóN¹±ù_~óvOï[·/üûõßü½KJÊ.}\—R žl~î¦ÚÇ¿ð¥û[¼žõòo_9þ§k;û÷þå‹â—ŸºüÞf1¾ÇÜ-&{)ê/¼ìôÝ?¼ÉåÈÎÛüfëÉ—~jÎð”õòŸÖ/ÿÙéÔ. DÔùÖÛ?}ÙcÕ7½ØÖßòâÍ5Ïþ®qÛvÞºó+?lûÈ#[{ûv={ëYmOþÍó/‚‰R]7B²"Dˆƒ‡ÃNS´Ê½©ýcLñÉÓîÝ»›››ŠŠFdŠÈÖšŽf)Á¥P‰k#¨ D0’ªP(êíÄOèe=Ò”cŒdR3D·‚^(¤«» ·?¥hUHB•ìtn1ÃÊ%[„Ï©W öž!I“™Y¼xx"㌇¸{"’‚¤N%k;G%Çc##êѲ¬Í]EÑ™E¥•I€9“Ùa>FÔA^8M2Œõþ£0É÷€o{ä—«|ýç7;·,V:så—þßwÎwi‡vʵÿù¹ã*#õþô95Xñ¯ßÿÄ‚R­pÎ'?u:Ýúæîœ¢$™rìÅß½úØ×ŸzÙó#P޹êÇׯ¨ÅªO¾ö¿¯žõÊÃnãy̜Ťê‚KÏíþíCkLÖºß<Úzæe5ÂRþíG_j¨Žæ¾älùý£oŸüÍÛ.;®"Z4ãìoÿðÒéÃæ-Q"Å…ÑHéÌå—ßþãOÕ>6|B„bŒ¨ã0-6ezTÓÊÞ½{›ššŠ‹Çrû8òÛûz¤ ’C¡`9a@*íINø;ô’ÿƒ7u¬@v/ÍRyRÏH§Ã‰ù¦:„Ÿ”$$ž(’,;ű˜!³ßÃ… \!Ž••Cµœìqe$sº†BSº—:ñš%súÓ\á/.I¤û³#x¿.AĦ¾I6$xd«±­Ý¢8©T ŠbJ9S XnwÃ0¶¨é”)ScÁPVWWW0ˆå¢¦¦fÈEQ*++'±žÃŒÉ’­öÖŽÈœyÓ†O'¥åe™­ªªÅÊÊ2¡¢j*ÏXL¤·<ôÕóŽ›VU(eÓ®y!Ý×=à ÑMŸ5]ñ¬']í]ㆧl1Ááåç]zù‡‡þž‚þÊCÿ?ÿ² ¦Œô!¥ÕuÕÃã]¢³£»xÆŒŠÌ µ~Ö´aƒØÂ¯>tÏé[¿qÞIËN=ÿòoÿz}Ÿÿ—m›¦ˆÅ¢GA"ăá5[fU÷Ûi‹Ü‘ã’­¦¦¦Ý»w/]ºt\ÆC‘FlÓãÜÒfŠB„CÜ8£RJv¶¹/³`ùe\~¢´Ï…€k!Érâ…¬Ì(sx@Á! ëOåÐMÇf¦’ݳm2B1²a‹+~k$غ M0ê×ß3Eºåh’ò‘å.œpx´6á ’íIô~µÆÂ+Èohm0#éD46•E'Q°%¥tÓˆ£ Ð4mÉ’%Ï=—5Ïxî¹çV¬X1dØòå˃cž}öÙ¥K—ªêdÈßaÆd¨k§Õš»w¶NF«@ìùå¿^óÒü>¿£Wwßwçjö/•ïÛ›©àoij‘UµUt¼4â,f ϼôÂÈã¿þë¾gýòã—3êMf¤ÆÄêš©‰æf>9-M­#”»ÇæâæŸymÝëOÝñ¡æï~øªßgÆ‹ø@\)¯Ë91Dˆ!LAÞÅÔh‰JÔmñ‘ƒ%„ÞÞÞ]»v-]º4ÉF”R¶Å{l.lÎÂTá(•vZ“ÞcËgTt˜W”™j/ag¯•Ç` 8¨÷t–A=›¤õ,©’û|Zä°Ç¡R!f:Cû\ciËÈF³lAtöÛ¶¥«ŽÀÕ@äÌÖ詈[Î/ˆ ‰P$¤Bá(]æ$•À<²µ»·c´¹k0P›Ôé ãÚõÜpà ÷Þ{ïý÷ß¿m۶믿~ß¾}W]u€o¼ñÒK3îW]uUssó 7ܰmÛ¶ûï¿ÿ¾ûî;¸F‡‡“%[ ?ýÅSÞ¹í_oyv÷ o~õžk¾ÿW=ϹÒLëBiNWã«~öZ ´Éyû7Þùz§at­½ë[wíYùé êéxiÄY `=seUìÜ_fj§"Ë/ùÔÔ¿ÞqÕíO”\téiòGP>páÅxýÖoþfK¿•nyá‡ÿñë}ÃèŸõüw>½ê7¯îê5!)™Lº'/;ºdMÝ” ׆"Äè`Œv*U‹¶Ž\dFww÷’%Kò´ú>¸‘-Wf"n™ Ðm)¨€£ºA,JE*©ù9B?Ž•µèQ„‘T›Z+wVlê¨{«µ®¹»bp s#§^ŠäIE ô%lÚLÿv é–séL•3ð<µåfö(¶­Ø®6„B¨w*#’†êVkÙ®\q!`‚) TFM¤s´+66l5÷ ô¦uÊ › *RvÝÄ#[ Ûl]|ñÅwÜqÇ÷¿ÿýN8áå—_~ê©§f̘ ½½ÝÜš5kÖSO=õâ‹/žp ?øÁ~ö³Ÿ}ò“ŸœÄb?&[7Gç\õè«êŸ»æ¤ÚŠYgÝ´aé'Væk0ÉŽþòm7Ö>qѼÒâºå_]½è¼“u†Úi­hüÊ’©¥3ο‹þ‘®œ™Ç `1àžð¹ÏÎ]÷ôkõŸ¹d™6þð ”c¾öèýmýÞÊÚ’ºSon;뢥ÃB›Ú©W|¡üùÏ?º¢ø¨Óoéþø=w|¶šà½Í­rÆœš#ت2Dˆ‡ ù?>GóÞ©PËÛŒz¸ÚÚÚ‰D]]]yyyþ‹9ˆÞˆ»wïÞÓÚ¦"I厓ñ1¤L¤¸ší=tý¥tŸEÛºKw$*ãŠF@gÄê½¼¥¹’[”f½z‚[ÁÈ–CÒéþL60xJ†'x¬PÀ°3·x;M¤+›Ñ ª-‰Á½ol åhŒ06uÜh•€*™[­¯€–HKË–Î(júúÎÖAË/çÜ›¶k‹'C¶ò1¢¾úê«›ššLÓ\¿~½/Çõàƒ¾øâ‹þ˜ÓO?}Æ ¦iîÝ»× }˜üÓT.ÿÊ}/}å¾à¶ÓCuÅOvvú¿içÞÓ¾Û›yúMo¹);í[î?)]víÃ? ¼v¨íÜ{º‚q0¶ðÆuæ9{§³oX¸Á{9ÇØ1ø Íþäíûäíþ«7»ÿÆD¦ŸýïžýïC–o´îh/ýÀ+CÕ³!BTŒF¶fMÝ4Ð4$ì±ÿþ­[·VTTŒÛ56ä+ØÔÔÔÜÜŒéuòíÝQÓàÒÐ8–Â)Õ˰ÁšʹM‘«n*E–ˆ¸ÖŠDà˜95\ÒT ýÐ!€©wºã‰OXI€­«Ø³Š„ïä‘S‘èUdåQ@%Ô_¹J©ép0騨Ô;ªZÇ8²¥[öžž~‹óˆÂZúl[”jjD™p˜ÆµèùQÿÃ’­!B„xÏb4²55V\Èbû[Ü_;;;7oÞ|üñÇO:u´)câÀ¨;::¶mÛ¶xñâ²²²Ýý–ù„ƈc3W=‹8H; ¼ºx)d&®$н¿,®©Yyÿ¥ ©CL•µì/—2ŽAßAØK÷G¹•C¶%ƒYTËœ1"R¶Ç«,S`› ײâ–¼4¢í­ÓVí¤©Á+‡çíè^WpK•Tp"l{“qH<²µao{A`NY¹î8¥‘Þ„956™¸€K¶ÂÈÖ»láªÆÄcŸL›Cˆ!B„Ž1˜S©Z¸©¯@ww÷[o½uÜqÇUUU=eDxd«»»Û¥z®`Rg2©Knp®2êØ”¹ä#Í\Ã7ä›O§“‘>APØ!Ìæ9Ä#ZOs)Ñ,°8ôéÚ@¢À±s#[‚ÂŒk„CüÐXjp|ñAØî\B¸ž!XŽ©Àô™wIE\ªðKã×=Û!ž„BÉ!m[´¥&Óx 5[kvµÄTZ@yA´;9I²eš&ÂÈVˆ!B„8‚pàòê *ÚôžžžM›6{ì±¾€ä!2–m|ÿ¦M›-ZäR=ƒ¦A$±¤`‚3ǤG\(ˆ$„Eé̳?K¶\ lèÆöHÌ ¤sLx¼“$ê#E¡€®k#;Ýà lE*~Ä‹°½ª,¤m1x®ˆãîÙS• ˆt%*\Vä(€C9. úR£ÚYމl½¾³UÑéHÅŠ ª`2„É0 Ƙ2ñüã{!Ù "Dˆ÷,Æ [³ §˜–ýò†µ‹- ÚÕ”´à’­ÁÁÁõë×}ôÑuuuî)eÒ²(' ‚JB\ÝîYÄd"[â=røS,xº¾"¼¿‘žd‘Ï«dÀ·Çbk,°>”n0Íä63 CÀ·ÇÖˆ°¼%ù ‰6§ŽŸ»¤D€Tˆ„‹B2¥f‚JpH*À¥) ˜#D\ŸŒÝò¤ÉVS÷Àþ*bQËáŠ4 @õ¤ÈÖû¼:!Ù "Dˆ÷0Æ [UB±“†sT™OtÆ2"& K&“sæÌ©¯¯÷_Ý;Ðo A L7o(aŒê•”P%iÇ•¤ÔF0< z úd+°Ñ¤l°+ÓO'ƒ*£’öTÀ{GZÔõ_ÔU*%‚F3J„ bÄJª–—¶s¼ƒÚ v€JK`˜,„3@ø&B†Û~I9娥p„èI¥0ALšl½¾«€-Åôâ7þçp ¶`B”†‰DŽÃC„l…âCcc£¦MPïýŠÑ˜SÿÞ·ß©..ï`Ö—&Jž&ÙJ§ÓëÖ­«¯¯Ÿ5kVðÕ7Ú[!a @"m“2Áà—j ýñBïо uVöÁÉ>â‚ë“ º˜°©ÈV QÄ«¤™Ù‹`ÔŒkN0ÃHIJÏ ØXºê÷!ú?˜„òÍ B  ù° €S!]9+‡`‚B‘DBH©©LpLÂŽzÒFÔkv¶Hs›YƨˆÅÒ¶¡´f²d+Œl…"Ä‘„áŽi!FÈdËMÞ-X°`zYUS²wø”C-ý`Ûvcccuuõ¼y󆼺­§GÉ…Ç“Ž¥¸MˆÔoåK0‹f›Py`~Â.èýà:’IÎèàþ"aâG³dN”Ë$Œx&ÖAíx=­’Sx”´r~M›šôöÉUHaRɨP³Œ€I“Pê{eãn®Èª JAã’S €ìèúf‹ÉE¶ Ëy³¹À i¶w &m«¾¸8n›µ±hUqáD÷À4Í ‰·½÷’­!Ba°,˲†ÆcÞW8ùx<ÞØØ8wîÜéӧׯJ“¶­;öØSÆ=Ąș¢«««¬¬láÂ…ÃO¤-—Ð8Ë([)Ò“R-Hؾ볟ÓóŸfÜ[ŒxÀùÇp¹º”˜æ ‰‚‚$3ÅI"•ÒEa9ìʲrN!-mŒ”p]‘¦ „(ž…¶ p’*(á^–3«áå+ó?@LRéÁ!ööb‚˜œõ†=û-Î ALQûF¿a(éÓõ ¦ªÊd\åÜÈV˜F "Dˆ#a1 aN‰Dbݺu³gÏž9s&€£b”àÍÞGêCÚè8Ngg§¢(Çs̈޾´ABIÔV$¤„AA3eònŠPö)Y)-?QèàUYøÉEnòN2ÒÓŸUB÷s…™_3; v&ꪒ4rlsô\ÚÏ*æ˜ N泪øR[TÚº€3éæ ¥÷qvµ¾¨ÌV Sá8„I ÜßOb‚˜\d뭽ʊ¢S"1U¡º1ד–“trIÉ0²’­!BaÓˆù#H¶’ÉäºuëfΜé—IÍ/©T¥º3Þ=dÊ!J#rÎ7lØ@)­¨¨í™=˜Ö—–ãP‡€"Íൠº9C+¥J<ù+k>çï8¸(ßQÑTÁÛšÔ3£e WÉH\enÓ¢×;Œ¹ª:É9à@¡J4æ1)â½Læ˜^ò‘š™Ò1—u17_¨H§5¦FìJERHÑŸJ¹‚Uùc5[\ˆ]}J‹¢vÊ./)˜ZX 1Õ!“#[aÍVH¶B„q„!L#æŸl%“ɵk×Ö××Ï™3ǵ®¸T‘ʲ­C”FBlÚ´IQ[[;Úø¤e¦l[rXÒ^q¼ã*T)€[Ÿ¤S„ÐòÅ⽊+éWq#P¾OPòT£'Ãdp»Mp…Š>GNdH¦scW*¥zv‹!®tB†whÿ3KˆáÛT{$˜€¦2$µ…b‚K)…©ë*˜Ê¨Éù+«W¿ùæ›BHyyù‚ LŸ>}pppÍš57nloowg´Y¯mn–±Me47ÔW– ¦ÌòÒXKÇ`]yñäô芚†d+DˆGÂ4âpm ;î8÷¹8.yª‰sG®ïš$ÙÂ0©­žžžÍ›7üñ•••ÃF¶÷µqÁ%%®Â–`’ØÄõ$ 4N©Ç©üÇ}ö¹ïï/[Å(“ ¿³ìÈlÐJÀ je|{'‘t–Ù»<ÅÖ(¬œ‘ŽdhÍûB„J¾¤2+ ^ˆŠ'Ø{·x‹S ‡I)3ÝcÄ€ÑØ”ífîu®®®>þøãW¬XQYYÙÒÒ²zõê-[¶ôööÖmk hlΔr-ÂÔ(FtÓ©-+:È–_´÷þDH¶B„q„!L#Ž—iE£Ñã?Þ(ŽKžæ”Up!Ö{‘-— MZD¾¿¿ãÆ‹-ªªªmðˆ;ßÙÕ«~Mâò!IAt6<¢â3'¿]ÑÏ0’@ÒLM½^Ejeɵ GxŸ)GÍ©ˆ—‘RÛ; 2BÍ\d·(Þ—?õ… •øÊÂO5z¹-Ðuƒ`™r.â: :àDÐsLáùV[ç°+12ÜëìrîH$2}úôeË–-Y²DÓ´mÛ¶½úê«»víJ&3@ƒzk×PU‹©T01¦¨)-„W¢7Q†F¶B„âHB˜FŽã¬_¿^Ó´N8!øD—l5ÔÕNºõTʲ0fÁûhð#[ñx|ýúõ ,¨««mðhd«=™Te¦DI ÉL"¥t销œfKµ²YCŸ[I,AÅ€Jš4Ú¬°.æ 4 ||B ëÔEo†ˆ‰À‡KM8ÙÕZÞ"¤Î¨ ¾Õµ¥0Á½ËnG(jf"sQO”38¾&ª÷ž¸\°GÝ}K%Óƒ!q`J.¥+y!'-ƒ9 ‰cÀ}߇$þŠ‹‹çÍ›·bÅŠ… š¦ÙØØ¸víÚ–––_ÛÞŸ4XRt·'¨J¢ªbZ<¡£ÊŠ1Y²Öl½§É–ØsûÊâóîëëžÁ·Ý²´øãçûÙ¾O»cýÓ/îHN¬ácÂG¼òɯ®å>Xü¡»÷ÈžŒæWÿºfßø›!B G˜F^7ã2-ÆØ¦…<Èclj¤¨¶ xKoò)q=RJW§~öìÙÓ§Owðð탆TR¤%ÒåUê !$ —5ŸöÎQ'hŽ}1ÇVÓ,’¢1#åMd€"3³Ñ¬ oÛ®è¤(b!¨õÀm®3PW™ÔWG0ÕÌ©'ƒÔö& •þ%`§èø©FøƒÀÒ¥Ÿ%¥D)@$$áRµI>~ÍVæÈÖPJ+++-Z´råÊiÓ¦uww?ó÷7i€BHwwÒ˜UYƉ`”è¦SQ«))moã"ìF|O“­Ã™Ø³µ½|Þ¬¢É|üÞψN›_;°mGßÄ*CB„Â4â0¸τŋ3Ɔ¼šO V¥+bÚÖ¾nL–l麾nݺúúúÙ³g;xD²•4l!¥&('’1Â-øâWÂÎ}Tù~ˆŠ µQCÚD!~ý;å°4–ŽÐÝj–“:ù‚z®–„Qˆbä:!‚pI ¼äD’+ SŒ¶R”yÔÌ×\)1½“ò΂ÇÀâÄ"šWÎÅÀ1³î‡ '’*D:4óý𻊦cÓ#EQêêêêgÌ7<ñV}0 aš`ç3+Ëâ†9³²´(¦!ŒlMïz²Åwü÷ÉÅûUÿÁ,ˆ¾={Òµ3kTÀYÀ:Ð|30ôgÀ\ 7wØ{vÇ÷ÏxtÑ¢G2ÿðüCmî[ɦ̘&›wwŽÚ"Dˆ|à2-)åˆL y’­hL“Ì5í[¤tDB¶mÛV]]=oÞ¼|ßùÞî>Óq,Á¥-D9ËTZQSº$†Úž¨–ç*-4D;©e«~,J¹„¤´(:2ùAЀ ä`F¸‹RÒ•­ÜÊ‚ÔQø< €É ã9$Ʋsu+ J=·i׿Q¡¼ Àô¼¥ÝõXîùˆ(ª Î!G¶ålê—_ßUX@)!\ЛHíoîíM&‹™Ú›JWº­ˆ“Žl½Ï äCQÓhk·¦[9üþîÎÎÎÞ¾ ü¨ÌµA}_€|æÁÝÔ0”דҚ*òz[¯­áù"Dˆ< „Ø´iç|éÒ¥Š2òý<²5·¢b}Ïþ9èÁò0–²,Ó4+**.\˜Ï“xÄÈÖÚ¦VpX’ˆ@¦´ŒŒ•:^H¨ÔÊ0*.Õ85t^=Æ`¢QcM™é²8¼wy,K‰h ׋2À"Á—Òq‚€‚˜#snr’!¨» @aÔT™“]#Ô„ˆ€0bàŠ¤‚ˆÜ$©{²L" A@(#ÒÁæ¶Î§Z—=­¼•^~}·V¤(/‰ío$„Ä¢ÑÁ–„S Ò)iSò,kra-„ÒÙøõ1B¥jaÍ1]õD‹¢å‘©Ÿöɇš9Ùýä—æU}ègÛ†„çúßí0óOŸ[ü­7’O\^A ‰¬¼}ÏHwŒ¼:Ê‚Ý#®»ós õ%Ñ‚©‹.øÞs£¯gÌþþtaYÉÈ\á8à;À—€fàóÀ—€3óº²ÃpVηݲ´èƒ×Ý2lî¨Ç²›ûúÙó*b±òY§~ùÁ·ó- ´¤¼Äîï;Èån!B¼àŸ6mÚdšæ’%KFcZÈl>{–is)±£§—’¿úƒ[+F)1cFžÏõ¨··÷¢R·äÝUQw‡1/y瓷ȉ%`§UB)u²•XYÕxoÏÄ‘ D‡¦î÷”2CƒÇÏ ×cLêÁVDéKWÑsSîä<@‰M‚ߥJ-/üd¢¨¥¨N0öFÌJ¨3#žøÜЗלhÛ\P!J©ÀÆ}ÈyF¶Ú:víí& P[Zä8²´$ZSTX\¡”jZ¬$ªIÓܰaƒ¢§§g¢Ê Óˆ@¶Ê.}\—R žl~î¦ÚÇ¿ð¥û[@ë?ý‹ûþië —Ýñvºé×_úÒÓ‹úà¿-ÌmrÞºó+?lûÈ#[{ûv={ëYmOþ­S¢éþÏ~äG]Ü»¾3ѽþΓ¿òÉï¿aFþù7~|RÑGìRš«o˜=Òzó9èh X/ÿö•㺶³ï_¾(~ù©Ëïm£¬'w—ROëˆD#£~–ÿ X4 øÎįñ¡[ùhsG;ßzû§/{¬ú¦Ûú[^¼¹æÙß5f¾ šø|%öŸŠÿØàHè¾ö'žðûS?ò·›îÈÞáÔH”꺒­!&!Ä›o¾©ëzCCƒªªcŒÌ‡9E¥ªdÃþý%Ó7nSQ” eˆFŒlíï‰K)J 4 €p$\“fžUsÈÐG€jêJŒÒ@J-kƒãkq¹_¼)5Œî„Á8”ô™¡N@p‹™®YÐ~&s s²Š | µUjx§))‰Ø´0jª'¨˜Jm@IÀW>%¦€WÎ%UÀT …t\ê€2 {ºû‘ò$[/¯Ù ÀPÑ””F¥.JËc3+Kc…ÚŒŠ²ÅÇÌ_´h!dûöí¯¾úêŽ;âñxžáO)e˜F<àš-™rìÅß½úØ×Ÿz9¤âœ[ú7ýGŸXqþ×¶ÿó}wjÚ°ô‘(‘‚âÂh¤tæòËoÿñ§j øöGï~é˜oÜyí©õEZáô³oúOôÿá7Œf:t—ãtôP޹êÇׯ¨ÅªO¾ö¿¯žõÊÃn±'± ü ød` Nz€Ï±Ñ‡å‰ƒ¼òæŠQŽålùý£oŸüÍÛ.;®"Z4ãìoÿðÒé™ Á½rØ6~° ÖÜüâ§Ö®ù—õo\pßWËwýÏ‹ÿþûdÀ‚lâW!DˆRnÞ¼9•JË´·Hi‹ªÈ”m|7®&„8ñÄ'¤ƒ:"ÙêOëDHBGrH’!’€ôèNFNÝ€H!õ ØQKÿ™æs)æQ1¡P9ýß ®FšÙÇ d„΂6>Äœš J°d^!³¨m0* …ZÀ™? ¤¢¤'ôÅ,€€Ú©PBƒ)ä<5H_Z³ €nóˆÊlˆjmÍý±B­¨ŠÆTAꦔhš¦ªêŠ+\# 7®]»¶¹¹9# ˲ÂÈÖäÞòÐWÏ;nZYT¡”M»æ…t_÷@æ_°øŠ+–v¼ÕtÜÕ_?«|8©f ¿úÐ=§oýÆy'-;õüË¿ýëõ}àmÍmú ×Ô3·þŽÄÎýåþÎÎîüc•ãt̳鳦+þõ¤«½ËÎg=$Zƒi˜£Þ“6ÿ \üØ“÷©†•2WŒr,ÑÙÑ]iÄr¿ÆâJyE¨š"ÄD¡iÚâÅ‹ó¬8Γl0­&™2)[ãc§¥”[¶l\ºt©W›wõðÁm=ƒ¦åH;Í%³ˆ_.Dö¾á–OQ.µý”ÐS4pÍÊ=É!Ž®º’¡< Ÿc6M©Úã-5°#ıeÖ£X:°…æÔl1$ý=Zš ÿ¨Q‡øÅ* d°À?+j/h§1 Åa0·®v><Ÿ4âëoì‚þ„®YÐmÈ(åS…¶µ J‚Þ¾tUY‘K¶²'ÈXMMÍ 'œàíÛ·ïÕW_ݺuk__ßðµ…5[“$[ÒLëBiNWã«~öš÷™Ô×ÿè’U­—üê×?ÿÕíþ楷¾é~¬g®¬ŠûËN ëùï|zÕo^ÝÕk8BR3™´Á>ðÙ«V4þçÕw¾´wÐ2úö®ûã~æ%Z>¥‚ì}{K|¬{ÅhÍgÁœ·qã¯wF×Ú»¾uמ•Ÿ¾ ^m=9 eGÕi=½#²­›ø6@[àŽáƒøöÿ:©à«Gça‡få#Ï%£KùÀ…àõ[¿ù›-ýVºå…þǯ÷eÞŽñÒˆÖËoþû/[·î·,ÃÜõü›·=fpvíT r°£KÖÔM [C„8¤È“l6{¦mñ(eÚÛLjTI)wìØÑÓÓÓÐÐà³½L#®ÝÛÂmJ,Óqˆ ÜËÚ£nîNráê;P<¢"˜ûóÉÏnómy`goÐ’k,ÖJˆSÍ!^4é-5xo'T fÏ‘š šq¦eïgÔÊ6<* × ³‘-â­“3ÉlbK"À-SóXWÍÀc¤-%ƒE§°m¾³½ãa\²ešÎ;;:G´îè‰ë&3mˆ*¥ŒPV]QD)-)é-^¼XUÕ-[¶¼öÚk»víJ¥Rþ2ÂÈÖ$É;úË·ÝXûÄEóJ‹ë–uõ¢óNÖ@ö?ÿÍK~¦~㡜VBËÎüÑC×ñÛ.ùöKƒ9WÚ©W|¡üùÏ?º¢ø¨Óoéþø=w|¶š€Î¾òѧ¾Uýä5+¦•T.8çÚÿå_yv1@*/øÚuuýSµJGéFÌë £,8³¢Ó.ZÑø•%SKgœÿü#\9“Žºž!—¯böì‚öæÎaQÏ÷!Ó'\ÜÜl2ÎimjŸºü”¹£3ŽC´òçŽz,嘯=zÿG[¿·²¶¤îÔ›Ûκhé8U"þA–Íù¨hþá_~òŸ¿ðÓ¾¹×œ~ÛÅE®Íjos«œ1§& âÐ"O&Q”˜¢:¶Ø°¿}Œ){öìikkkhhÖ;`dkgkàRcTbC7­–éÑ£@½å¨ O)tXÑg@c^ú¬%mréšÉU–Ò³5$–„BcÀYf² ^)ƒõïnÛ ã%.‰N‰A„/ßEœl˜ª°0›õÓ¢¶ß;)ëÉ\æ:[{÷wWÌÍoÚŽ@l0 Á冿ñí¨Ç­Ùzõå–Ô”ÆæÔ”†Ý×+Jbƒ)€mrBˆc‰º)%/)Iq€N9å” †±nݺuëÖíÙ³§¹¹Àû¼@žœüÙï.8ãÓw\8²c¨7ÞxãÜsÏ={à 7TVVþ×ý×Å_œO|«¿¿ÿÚk¯}üñÇ\pÁwÞyçˆì—_~ù¯~õ+ÿדN:éõ×_Ïsmc¸î]Û_|ô]¯ ÿ®‡Z³ôÃgLŠiP~ÔøÜáfZï Dg¬8/dZ!BäŸã›QVj|ÀГŽ3|J[[ÛŽ;–,Y2„i!¿îEÃ#[Ý ]H)lA ©éW»,ëlèF¶”d¶qOða'åWÊ 3üû«'š€s…¥¼Á'jJB)¥èG`†p",{„Æ‹ ^¥ K{Åï„ða€,,̦ÕˆÃw>éÕàûµeÌðŠ·„‚Š.E1©Õck$fSÊ¡P& ÷÷Æ1ÆŽEíkîÝþNGÚ°(Ö¶³·¤,€Z´yEi¬³;QZÛß9XWY‚¼{}¸F@—_~ù_þò—T*õƒü ¶¶ö±Çwâg>ó™M›6=ýôÓO?ýô¦M›.¹ä’ÑF~øÃn÷ðÔSOå¿¶Ã#é1Ïwݶ\#¹ •Ÿr ©!B„`"dkÉŒ:i£º¨hO*=„uvvnݺuñâÅ#Æ08˜Ò-.¸”*cÄ!nKžê‰‹fäµ$´^!U6\ܾo´ßŸ°âñ‡µO)G´ÝÛnå-÷!RÍVx0SB¡Ú€Ÿ%Ììª(íÚW{Û½¢¡PBhÌ$±˜©(]¥ûœLñ #™š»+7ŸX0@œ´ŒP P°n! DrÈÞñÕÆ®Ùzöé· $ 1ÊÒ)+Z¨FU=i˜^U   ¢BÂO#NNAþ¨£ŽJ§Óï¼óÎSO=5n`lÛ¶mO?ýô½÷Þ»|ùòåË—ßsÏ=O<ñÄöíÛG‰Dj}ìÁkÖ¬)--õ N>ùäÒÒÒ×^{mÄÁ/¾øbUUÕüùó¯¼òÊ®®®I¬í°áH"[!B„b¢ ”òü|‹#ª% •¤5­ûä©¿¿ãÆ‹-^Â<Ä„"[x/6nÝHU ‚r€I ¤t5K¥”™&DSJ…Á••02ÙòÔª¬,¿>ÙÊqžRa…mÈ© '^d‹PªuJ®e¹…Ë|%-é‘$áÒ,o'N„ˆ˜ÄU·—†jΕÑÓ¢JWÙ!f_aKøÇr»/)ì‚‘Ž@…”RH’RH¢›‹]ûÇiHƒl½¶zg2i–UÐ46دÃm¨4‹0Me¶Éد›RR3¥Ù2 #‰äIÔ:::ªªrŠÈ«ªª::F°':ï¼ó~øá^xá'?ùɺuëÎ<óLÓ|÷&ºB²"DˆGò1LH—¡XXï0Œ”iˆÇãëׯ_°`A]ÝX¶ÇŠl¹lŸlíhïS(ƒ!%×9(žì§/¾@½¬"w%¸¤ôÙIöu‘@9÷ê´r§%n2 k„\ñ’¢nÑXæWBÉ×ùr=y²Ü+¨!¯FË ªà<ûfé– U¸ê‡ù”‘Gi†±Q@IJ¡@LsOØ]¸$!l"ÁÆmcУÕ/íPT0wZe€-DëîrfM¹%ùԲ¸nΘZª* ¯Ùò1D÷á»ßý.öÙ2^|ñÅùÈGŽ9æ˜}ìcýë_wìØñä“ONby‡ïi²%öܾ²ø¼ûºÇúÂŷݲ´øã C•ç>íŽõO¿¸ã`º)–eO~u-ÿóÁâݽÿ@öd4¿ú×5ûÆwx"ă1–?š_Uaš—rkGo2™lllœ={ö¸©Ÿ‰l5uôQ Â(ng\z”´Ïè ¶T<¾âFª¨-3|‡gB_¸Üd5 ¸š'ñ$RxL¶:CÃW.0äœàDþ?{_&GU®ÿžS[ïÛì{ö@€°DAä *«¬^П(¸pEQ¹n€W¸\/ÊŽ„劢¸ " ìH‚„¬C2Éd23™µ÷îÚÎ9¿?ªª»'™É2!ÈÒï“'OO÷9U_UwW½ý}ïy?Ju j]Õ¯ eJ†£$“ Bˆe—ë‘:—ˆÂ!#B¡Ä=j"9…NP“B˜¥Ò¨Ó¨„ð¢ \p"6÷î¦CâD4eÕ«[¶g¨-Zù‚  ÈzÁ*Xv€HyÃjŠ…F2…úPÀ™µ/eÄJÞ/|á ë&À‚ *§ í"«ê ©©©££ãÍ7ßœDxoª.Gû‘íZÛŸ½°jƒ¾7ðµÎjZ»²s´uaâ=Íö«¨â€½ÊlÜÞülwO¦½9’¬Y¾¼µµuÚ´i»µ·š-T­¡¥ˆN IDATLž3¡P©TŠ#œSN2G² iI7ß#¸pµ ™œû\*SéMê@2Eɹª2Ý%<Ò e(óW:qU̵ ŒØV­R9…ªŽ0½E.U ¡¾Lµ|-“Š`6C@ÀãL,Köi6fQK¢DB¦L&È:· €”çÌ'Y² ŒFÁ9]7”™¿O•tÁà/¡ŠmC»1˜ˆlývéËN*‹H´6,¤ÜŸ¾Â`2yCOåó‘•‚ne÷ ìKÑçó•"©­­­­­hð‘G™N§_yå•Ã; À²eËÒéô’%Kv½‹‘‘‘žžž¦¦¦I„÷öà¯c?:"ü±_&ß™-‹ùhWW¡iJ£8xàÀ™ÀéRø0p)À¼1ï XÛ¿wìCóç?èþ;èÉ¥ŽDRmG«èÞ40©FUTQÅÞ`¯ÈÖQ³:¸ÉüD~sx¨¾¾~æÌ™{2koW#¢‚ltËæDH‚D€+.½pò:´èjÕiÙ2Ô{àɳ„\óR\^‘Oªo»â$x·>3¨V<ˆ jB ¦¦*ÝçÝ9R†Q£b¡¢ßD…w<ìr“lb,æÎ5s@ p[ÔÎÊEê-`t×PR“¦ ny“Éð\^ á€(&¥”¦ »‘(K¶:W÷uuäóKð–DÈñ…Õþ-I*QU‘²i=[0Œ‚ÕZ©O„J[›ÙÚ!³µkÌ;÷#ùÈ¥—^úòË/¿üòË—^zé©§ž:{ölçÕ9sæüîw¿Ë宺ꪗ^ziË–-O?ýôÇ>ö±ÚÚÚÓO?}á½=¨f¶ö"ÕÛoÖP³ƒÿ;~üø<àf xd‡æ€ïÐÀ¹÷~웋wü‚’hc=y¹w˜55VÛõTQÅ~Å^‘-MU4F‚aÈtÊô{X6Ús >Æ’­ÁѬeX‚€ª €bF¼vœ«£€" ÂPQæ+7ŸöX5”Ü"¼´“!'NËy)9%P*RU\ªˆ-Æð0Ïq^@’òl µ´¥1÷R…ªT¶(œh€í©É  >øH0å4i¬ Ž¥®·IŠÛš«\ ÂB„-$…PA –µks‡qsQ¿]úR¬6”Mæè¦êÉÔ·'ÔÆ‚ÝÝ£‰ºP]Ð/×Ù‰ZM&R¯57FK[“¤É\°÷¶WÏ{Üìú ¨›sâ—Õ©Æo?}ð×—åþtQ‚2A»¾í¶“âï ï›ÎÖÝpX䨛7î0tü€=§_½åÓ‹Û"¾@ÝüÓ¾ûÄö‰ãÙF2YÆ"ã|úêÛo«ÀwÑ=;µû;l¶îúCCúÒõ;Íp_Ö–G¯:afÂïO=ú³÷®.ì¸ÅI€Fâ+9úVjݪ¨âý„ý$·mÛ'˜®3¢Ê«{÷t-ý¤ËˆË×öÜf–à¤È…D„Â1šrj‚”(ë”tW¥î=¥‚d•¯&eñV¥DÅí®´DrI›Å+úöæ×\S^^™ÈJÉ%ËY“¤·dR4m$è>o{‚³ñz )œŽì”—r*•–9^’•”H–«5„èܰYWï莩ÀÎT¬{ÓÐÊ7".õ ùÔä@ÖIÖÆƒÂq1©£¾˜¦RM2sfKÙzKò»E"‘¸ÿþû3™L&“¹ÿþû+­Ý„]t¿ßÿøãš¦ÙÝÝ}ï½÷¶µµM"¶· “&[± þPBp–ë~â›M¸ä²»{8@Ûιí®[û• ¼º°å¾Ë.ûëÁ?¹÷ sÕ13íU·|ñºÞ>¸vdtãßn<¾÷±§À·Ü}ÞGo<íÎÙ¡·¾ü‹ŸøÞ2C;ãþ•?<Úðͧ{“=O_Ûø·_-w“Þ.®!;ýSðí•ÞŽxñ÷W<²è ‡þèS×>0œ*_¡ÍG‹E½J¶ª¨b?cÏÉclåÊ•M!?cT!dOºï•v1¹2âÚMÛ™Íl“‚AB¡” N$\¡„-„,—Tð´´“’©—â"V…ÝCY)_Þ/¯$[š÷™ ;¨hýîU²”¾rw¡JÚ@Ò]gyB•åô˜óÉsöU‰‚T-Æ fR«´_… Ïš«Ô¾ÚaWÚsÂ2q¸†ø¶·“ÀÜÊٶ௯ßÕ‚ÄÉÖï–¾,¿@’©(XtÓ–%Ê ÀP·mUýJn¤È)ûÓõuáÒÖÞ†2â{û¬Ù"Zíg}çó¼üçg3@'Þ¸ô ÅN_rÊW7œq×/ÎnÝ©‚¤ú4Y „ƒ>-:åÈ‹nþáÙMlÃC¿xfÁ×n¹âè¶l?á›ß>=ù›_¯Ü©Áó¸!ÄO¹ìLñð]gäž¼ãÁäÉ—|¢q¢_}; @^ð¹~yI“ßßpÄ?úüÔçø}5‰x(ðð‰Šg¾p \5ñ˜=Ä[ö8sùû²×<üÐê#®¾éÂ… _¨ã„o]wA»û–j¸gBìôÏÂ÷`¥ñÚ§Ï~å¥O­XvÚ]WÆ7þìéÿx8W!QÝû³PEUì5ölqÎÿùÏrÎ?zĆ͸ÅWlÙS²µW™-Th¼zÒ‚ …PIrŸ!¦€BKBx©(@IYney9$ϰ¡dÜ0†liÞ D^™î¢å‘ÞcjpBˆê©‚™VYG$ä @‹cФDsƒ¡¶“å Ž\`JÎD™lQ  è¶œ-ÈBò~kÚ^¿k¦rÑ»3¨ ¸ÉH‚€™AH0cç\lÚ¶™­m]C/ýc= t¯îÍÓ:jœŽÔ>™rÆ%…öv'YЇ’G°Þ¶ÌÖ{“&[…5K¯Á¾øÀö¡pGGÂ=£JÛÔÖ½­ÚSÍ7ëă®ú¸ºòñ~/Ë0¸ßï{߉ت¨âíÆž-!Äo¼¡ëú!‡òÁù3ˆ%Lƒ÷g³Î x·Ø+<*ÈÙh6/(a–@Ñ­´)y@*嫸€–zÏïáRF-mÀo²‚› ­×,i¶DÙ*y@P½|6¨Îp¿ŸØœê¼ÒXËÙá€TS($;¬í±¸œ+?%Õ9|œÈ^´”Ø&-šå;QxéþkkÔa“\£Ô‚ RÉHBsÆÀ¯I„ΨBTNúwÙ!q‡\Ôoïzž3À´lmMQËd Md“ €™·¨” .%ÁöÙA~ßK˜$Ùâ]·ÿ¿ËŸ™uÝ“#E›³­·«”¾ÍöÆ;?{í†ã/=aÓõ_¼§k¼oªÖé×Þûø‹¯¾üç¸û;ùÜãBjli r÷ ¯èÄ“^zšæ¤œwû5–\té¢î\ú÷îx¢áÜ‹ ìMÀ`[7{ò$Ö³¥GÔ7Õ+ÆS _<îϧ2{ª Ý{쟰ǟ‹ öEë²ÝÝ£Þ°ž-ÛÜÞ“2bÆ|Iy&•‘㉪eFUìo8dkWQ!ÄÚµkÓéô¡‡ª(Š,K~I.d­PP[³g²­½*#«$2ÆóyK‘¨€ º{Yq{ Ú€”³á0žÒE¶ÜÇ«Áåyx½¡æTÙ BÖõ«9%´‰kýºsl¥2Ï!‚šåk¶óX¨’o›!éc®åN&ŒUbsj9:ºÓBjR1@¶@!Á1%ÛuRþJe^ZÀH‘òî®ý# 2--«d9ÞIÛb ¼j£")‚¥wÕ!±’½ð—7ú\«ˆlÎP‰˜ @4P©{u*]T)—5˜EËçW²)½e,Ùªf¶&I’-aŠ\ñ…B!Õ\~Ï5?}ÑûXWÜpþ5ÛÎÿå}?ÿå=gnºú‚_w¥T_Zï?éöóÉÿ<çšû_Ø8¢Û\P#—³ Í;ïsK–ÿàó·<³9m꣛_}äç~íÑ,@ãµ ²yõšÌ®˜Ñ¶³/;¡ó¦ó¯_6÷‚ Ù9‘4qÀìÕ·}ã–—t}ð•[¿~k×QçœÖ¦LÏXK³:¼}d’l‹mø¯Ãó®Y>±Âþ {ü¹d‚}Éó>yÖ¼—o¼úþ5I³Ðó÷ë¾}ßV÷½Ø]Ñ|öõÿ¸}ÛÚ>ÓÔO¾~Ó£æA'4Õ9?ÔÒÛEcsmu)bUL{%võ“µ³³shhhñâÅ%aM}Àg›<¢i{(ÛÚÛ2¢CÎVmè³L&˜ B΄8q @MqOÉ¼£vºS‡º Y—x`ÌœÚ\øÙð…×JUFj0xé®JæD<â%å ›¾â޹ƒ$©Û :ö"/ˆTYµ„$‰ŠezÔæ‚R³5½¨Xª|(œieÓTÉK¶…„ @ÈTb`™ ^wHÃöäöD€ E¢0xÖ0쉳¥2¢^0–þ÷ßdM‚Ñd~æ´:Ûæ"5Á)Íq*‘Tº8­=12šAß¶t¼.Ø·5ÙÒ8Fœ^%[“Æ$É–4ç³7}£éOgÎŒ†›¼òùù'¡€H>yõù?U¾¶ôûŒÐØq7,ý»éüo=“ó%WþÌ%ñ'¿qÊœD¸å˜ë‡>~ÇÏk  Ó.}èÏ_oxìò%­‘šÙ'^ñkvÖ¥'„RsÚW¿Ôüè¿5(t‚ÕˆHâÔË>åÎuÉy³Æ¹ƒO°ÑÏ\²ü‹‡ÔE;N¹•]üà=—N¡ƳÃéKL›èïØ#mÙN°·mé¯;ò3&fû)ìqçN¸/yÁWºûÔmß=ª)Ò|ôµ½ÇŸyèVEÕæŸÊ»¯»äGñûK~2:ãòcn:+D€toÓ«Î#UT±ßáÜ '"C›6mêíí]¼x±ßï/=9­>Ê,&²‡²­½Íl9ñ¼¶¶Ç¶mœq"QA„œçDöôJeÔ•º—º?{·,Úh ÕWº‰Ñ’›ƒÅBE(¤ p'I6¦tXa¸UZÞÈ‚>©¢HìræIN3n9:!e¸¼òˆ+÷— ÂÌ/ïÐ:£kcÒû É“‚• ,Œ¡œó@ulå+W•¢T¥ ¹Wpƒ¯ysœ¾n$ÙúÍmÏŒº)‹H"Èlžì6,ÀÒôÑB¼>Àš/˜MÑäH>ôYkiª–ß#ÎûÎìcÏùñ'ëw=nÙ²e'tÒÛÓ$‘}ì’9dnêüõ95ogmÊÚ¾ü©õÑ£Ž™¹×1ûÕoqMóÃq¼5–ûlÝõ‡öÊ—û=ï_eI¢w¿øÞÖ-i¿ýªØ+<þøã‡~xéÏÊáïCpÎ-k~æ1Æžxâ‰ãŽ;NUÕ^êîî~óÍ7?üð ŠþôìŠÿúJSS¼'“yúêÏ(ònrн½½Û¶m«|wvüã‹-ºñŽç^îì ð É‚[DPfL¦EÛ@K3.³¦Þ  yìÕÀE°«È£´hÙ!€:˜7ƒ”á¢UëG9e0aä+ƒ:‹»ßæœÙ쯯+c7EœÇR²8×ýPÉ9‹÷tI©‡m7FJñkÛm¢ 3ÃÀ…:DˆDlÅ`Q@x“®7hbfž†*4û£2‰W¤ †)í *IӬќ˜‹m~bóèZÃhòPs¶•¥¼ÍÂ2‰ƒQPÔà\¥K¢6`rEÐ}pî%gŽ¿Ü}íÚµ~¿_Eè?>ùsÛbmulínY¯F|›_ØT7¯i{zÁSÖ¼Ð5í€æÍÃÙŽH s(³haëÊÕ½ lYß5xçMçÄãAgk¯¼òÊÔ©Sëêêöð].áŠ+®¨««ûÑ~´·ßH¥vããÿ¥ß nxú¡w¼ƒüBä×Üù?úνüßÞV¦@i<ô#Çî=Ó /¾aùo7ÓzGÀ×±ää*Óª¢Š·e¶z{{;;;9ä­ œÚ ýÙ¢i¯ïÚí.&!BômO1!l›Q˵•"–à’ën ¦X…¾äƒE„¶E@óžñJF¦e5.S×f©Q~2^[>ÞP¢¬ðmhH”·µ–)…ˆ¦/šZúS€*+’›˜W N$@˺»`vP`¬±m!¬œÉ\%¥—cO¯&­’Bß©–,*FÈ&@¸`TpÊÄÖþ ;$rΙÅsë?½W*YàûŒ¡,FFr¨Å! øÕim %¨–vmÛ|j[M‰ia߬*ó¦ïO¼›îôlãMGª;ô§5?f¼ [|cþ¢[¾uìNÒø*ª¨¢Š÷ö¼ ã\+w [k×®]´hQ<ßyŠ$ш¢NêÃÁ5=»×ÈOB /„(M…&Gÿ.$ "9Æñ‚‚Z¶uðˆר6hpê^·œÒCQb]UB—¬„"õ´|³ožQîjÜ:³¹ô8ñe—Bùå²Z‚ ÈvùlÇü€X›ËÆÚšjœó¹M$…OµƒVŤ>v‰%(WáWäÊ£ð[”{µKU¢pê•6h „ɱ…®›&„)8c|pb¼â‘ÿyzd @ ¨‡l©R_ç`¬.d™L’hf8@Pˆ‚EU©¾6d˜vmM0Ó[ê"•[{«Q¿?ñn"[ÒŒ«^2ÅXð‘{>ªi»/iú^ºù”†êâ¶ÝCš{Íòì¿®†XEU¼ÝØÁýaxxxÕªU .œ¨0¥´Æ§J Á`gÿðn·?‰ÌÖÀPưlj ÷.Y‚Pâd¶hÁ‚R6vwäðB(y*•rW†]Z–ÈK6Z¥½˜¬”(šÒÞšð’+¬Â´Ê/Mõµ(nÆŽí>‘ÊXEÀ`2VUAÙ}ÉÒ€ªrå~HJyŠ(H´|†,p™pUèE׋ûep! ‰kl h¸/9íLžG«Ì…Úàà¹ôÎÝM\¼òØúOlÈç qo]¡)ˆÖ…̘Q72”Àº×m·¸hH„t‹5Õ„‡“ùX` CšôjĪf ï.²UEUTQÅ$PÙ»0™L¾öÚkóçÏohhØÅø¦ &9sëhZ7wÓ3~¯: „¬\µ aç p!$*„ 6„pâåÓ¥1JP‹{-( ¼Ü­ J%={Ý—AÖ×V´Hc˜&¹y£bVå¡ H!êVÍŒb™ÁH„d’å?ã¡ÒŽÐ¨»ßád@ÂçgA r}"3%RÎue@¸)è±Jü&LNA‰T´pŸ—ôÒm¼‚ ú$Éumµ˜$Q«h¦ÆIn­_±å‰{WÈÇfÏkÌ& |! €.æ2:¿"1‹å fn0›Êa±`@MDÇ”Šª«÷U²UEUTñG‰ e2™+VÌž=»¹¹yã !³Z"'©t1©ë«·L¸Þ­4~Ï3[BMÓ^{}³mÚBÒ¹P(ႚœ0J T¤ªUµƒ€^!cέÖò\UmW…¡Ð’. =îtƒ48•’2¡ðD]D¥ì¢iQ€ Y¢T&‚‰—–oÞá$w®Ørßõä6Æýù¬@ö)þ€:°¶wx €ÈÒ”©µ¶a Í çp.{RÅ¢e˜vc"ÔÚ–¨Üf5³µ/xï’-ÞuóQá“ïÚÕ€­»þÐðÇLJj·im_ñ×§;ßânÊoKä“®çg ø}û²%½û…¿¼´uÂÔwUTñÖB’$Îy>Ÿ_¾|ù´iÓÚÛÛw=žRÚ^ðI²iÙ†e/ß°m×ã÷ÜgKÁ;à€ryaMAˆdp.6—eÂ8%e¹W^&Hhl®¦]’D¼}ù5—N…|e^Uò£Ò”ò“6ãìí¶Li%ÁÊËù¢aXlf<€±ò%.âÓl&j=9W©ß¢Y`X…+Ds(¤A²ƒN6N€dIL"JÍ¡j„A!çÝìä]ƒš „м@’¼DAHµ)“ÔdŠBÌfkÖõWžäWÿöÆwÏúÙÀÖÑz7ŸÇ¦vÄ ^0˜6WL;óHÔ»×DâDÄo ·5ÅԀʋvkÛ=ߤ5[º®Wòï]²õ6@d»ÖöÇgN­Ú ï%|­³šRë:G÷¢ìPEUŒÁ^Ýö(¥º®¿úê«---Ó¦MÛ“ñBˆDÐ'ªÙÐ?²'ãw»Y‡iqÎEIçaq!˜ ”H:'„8©,)cA¦ð\¦`1!SÿÖ<áî!ËžkêÜVç¿‚W½Ê`¥c…£ÍêÌœhÈê.Á (ŠÅÊ—¡LAà7%x m„ý>1Ù-ù¥’içÁàp€Y±Î1"k–`®e!—ðuh£`ÎÿÈ;I/¡`æ 7Å(y+‹I·&(™ @Ñ´0Ÿfæ3²\¶¤ØvNLAj0fZ¼¿¯ì>ðÄý/ÞtéÝþ°¯²\@V¤õ/¾YRnIíúçVI•´4ÇÑúpq4N%Æ¡¡Þt]ý|µõ¾àO¶XçŽì—É·6yô–€vuš¦4*ÀãGO8–scÿ)Àëc‡½÷amÿޱ͟ÿ ûï '—ö:ï£TÛÑ*º7 ìFREU¼Uèì쬯¯Ÿ5kÖž vÊŽí5Q Xk´PÈÍ]Œß“2b‰iQJ #=š§” ™:‰"É) @ò2@ÎCj2R´%ê“<-üœÅÓ¼8Ýg¢¡²CAÎK\ÉÌ ¤ÍÚúæ¨_qW†µ²†=¨*6¶ö¤$BŠZ.¦¸tA¢îôdFkZ¶PÎÁ#¬XúKæ2Ëð–I:d±(Á#Ê\¥`ZÚë*åžx+’å<Í %* TɶD0Ë-!,*„äz:ôlè»ñ¢Ûîüæ¯9ã5-nHBI®?)÷…¼– Óæ’LÁ€`Ø·íÍ!Ù¯ôoV9”N/gIZU³5i¼ãÉÖ;"ÕÛoÖ6ÖììöwÀáýK‡§óÿQþ«AçÞ{öš5ç®Ysîš~øüÏ 'ÚXO¶÷ï¿¶’UTQ…˲ …B ˜;wîæÃòtଉA/š„’×6íÊJ~·eÄJ¦E¹÷Æ?s& „K°œ~8‚s9c–‚tº›û{ Päiv¸Ï{¶[ºáÖÞ´ yV®T¬ ¥Ò¡_Vf‡\"ªpy û\.•Í3≼^A.°­/M `VÔ £ £É\éÏLVOò2Ù"Œ¢$Ø„ $»ÂTBq[kd‰K™óø,÷K¤`#-ã{ž7„Lã~YQrLÈ”SRÌÿså}_=æÛ·sÆø‚îFLÝ0ÿ Öî5½¥jêÛ–oÍ3fÖ& JDp¡©r.¥ [ì,ØÂ^æS½£UŸ-ìÙJÝwšŸB©l\pê5rÚóž?ÕÖú‰¥Ý €zì²™õþéº~‰‘çnq0;ÀH& ÁXd7ÎÊ6p €{€É4§Ù‘³u×úЗ®ßiî„û²¶%a› ”Œ g‹C™BÁ`äMÜbš_IgÇ%[Uü¤1i²»àE!g¹î'¾Ùô‡K.»»‡´íœÛîú·µ_¹ðÇ« [î»ì²¿ü“{¿0wl‹{Õ-_¼®÷£®Ýø·ï}ì©ð-wŸ÷ÑO»sÅ@vhνÖR IDATÅ-‡/ÿâ'¾·ÌÐθåzï(Âxþ+ãÚ­«¹kˆ99Îì²ïÕ²ø3¶C÷¾ñ£˜Ïþßsþä•äæ?þ;¿ýì‹îìæ3v“¢X(Bói»ºz à`9𠲋q»À~ˆ|¢¹í‹­½ùœ møæÓ½Éž§¯müÛ¯–»‚N×€þ)øöJoG¼øû+YtÐÃGô©kN•¯JŠæ£Å¢^%[UT±ßÀ[¹r¥,Ë‘Hd¯|°² û#š_¡R.YXÞ¹+ü.2[Ór*PÛ{àû¿EÐ/8@@,Á ”œÍ&€2¡¢ÜžYød3Úkº›å­ï³< ÍË—H ùÊÚ ÛÓcùÙôæúT¥P°ÄkᇺÏKeâ5Ø—±+(”ð´bµª_¦´RS¯gÇtL²Î+nR†ÉU«ÜÑB0+=W$³aIµ¯‹œ°ë"!¡æZ°dlÝ œ1fA@”Á‚àLHAÓ«~¦GòdŸŽùß|q} æ’°äp~ÊÌz#¯H4D›¢Û6lÊ56Ç’#yC}éDC¸oËh[û²å|~&]F¬j¶ö¹ŒH´ÚÎúÎçxùÏÏf€$N¼qéŠ7œ¾ä”¯n8ã®_œÝºã.ˆêÓd-ú´è”#/ºù‡g7° ýâ™_»åŠ£ÛBj°ý„o~ûôäo~½r¯<[›î¹ð¬¥3~úÈ÷>€í-yÁç~øå%M~ÃWüèóSŸ{à÷=Ö$‚¡ÀSÀ'Æ>ypðk }—ÃöoqäãÌåìË^óðC«¸ú¦ &|¡Ž¾uÝíî[ªáž±Ó? ß? 4^ûôÙ¯¼ô©ËN»ëÊøÆŸ=ýçÊ»©ò¬*ªØàœ¿þú댱E‹9«÷|®“©BÔEƒT€3±±o$™-îzüÎÏ !8çÎKÓê\¾éÏ·?e.g„È„šn—j ¢¨BpªL…D!ÌçZ9$ÓîůTã㥂£·G¿Zþ¥]"Xá æ¬¾)M’(¡Ï—N”Óæp¨¼Á0Åý¾1—®±W5:¦~Á˜Qq$DädQ‘_2º-Sjçm±€Ë〚©& g°ÓƒšcP$a3¹ÀÁB¨*€á¾Y•‡û’bõÁ‘}Ìt™£/¤å2Åâ`Òa¡ÑúH@¦‘šP!oÔÄ|ÃÙú¦ÈömÉpÄG)™2¥¦òX&]FDµ]€} […5K¯îèH¸ï¤Ò6µu7¥Ó@5߬ºêãêÊÇû½`,Ãà~¿¯º³Š*ö„o¼ñF±X<ôÐCeYž„騳‘Y­µ°W$²rã„•DGãµ3ßrȼŒˆeÚ·^yŸ-IŒC’('²,dJ@ÿwš5„‘ˆÀôPù§³âsoØé¼»^¯${çÞ®}ËK¯*J„¡R™â5u¤"^ZA#ª¬pÉ*]JÕן‰ŒÍÐø$©!RÖæSiÌ݇’3Æœv»8† \ !Üžà÷ÊšÎQ˜6«‹‰­Î:t¨2§O‘ÃØˆÍ@¨lp@‘c ÑôP@}{ ³ùŒ…-*e…T@&UPÛŸ5¯q`óP.kð‡´M+»ãQM“óÉ<碹5@S•©SjšÆ4zw|&§Ùª ä1i²Å»nÿ—?3ëº';GŠ6g[o9V)}•íw~öÚ Ç_z¦ë¿xO×x hÿ¬Ó¯½÷ñ_}ùÏ?þp÷w>ò¹‡G…ÔØÒ:åîA^щ'½ô4ÍùÖï6ž_ñ_Ÿ¼ô•Sïèòyã¼£»ŠlëfO›Äz¶ôˆú¦zeÂ`*á‹ÇýùTf|‰÷à<àZàŒ]¾ìŸÈÇŸ‹ öEë²ÝÝ£î[`÷lÙæóž”+0æKÊ3©ŒOT]3ª¨bÒ˜èÎ'„X»vm:>ôÐCEÁÞ;¼—zW}èt˜œÛ9ž­kבìp¡æœ;¶õ¥ÚÓÒïþ&õ#†D¹µœV†„:‚R@Ó¬&A¿ò©[Ö ÚÞfuÏŽ¡$“Jå\ÖU*,*t§´,±Ò¢tʆ»³¢Â–§‡Šåídò®~+“Óë}cLÕeB‚.Ù–s’9#ÖØ·HŒý›0‚¦p(*:›p@½0g&édÁ0m4ìƒ\•çÎé"œ ²I„L HáV×:?R™sPkçs뜢#•é`o@0æïzu#(êOlÆmæú§N¯ó}„nsM“ ³µ9^¹ûæû šÙš$ÙF¡È_(RíÁå÷\óÓ½djqÅ ç_³íü_Þ÷ó_Þs榫/¸ñuçcj>~i½ÿ¤ÛÌ'ÿóœkîaãˆnsA Œ\΂4ï¼Ï-YþƒÏßòÌæ´©n~õ‘œûµG³×&ÈæÕk2_(ìÍK/þÔ]í7ÿîŒ{í™8ZöêÛ¾qË˺>øÊ­_¿µë¨sNkS& f H¬¥YÞ>²3ÛÎ>\µë³È6ü×áy×,ŸØaÿD>þ\2Á¾äyŸûúܾmmŸiêÆÆ'_¿éQó šê(ˆôöAÑØ\»·9²*ª¨b·èììZ¼xqI(3i²uÀìæ€¬(Bç+ÖôLô»×_ùj)§Ub„Ëÿ¶êÿûÄæ×·*5!QA‰“d"† fƒI·HÈ@·mš&ÏIÔèEÛöˆT¶h( Oö¤{2ë’*É–gW¡T”K}o†GòJE{i»ÂpK¡tp ïP4™Ò\ÅÊDuöÄ„&Ü=r•J/’AåJ —µÇü)|žd^×Ý |©pÉ3€dºèDX_%´hÁ¯¸PdH”˜LPZ¤R¢!:÷‰YkŸY @ÏØêÛkm“ÉŠ$sfä͚温[ñºPz$ ͤ%Ÿ2uZ­i±Ž)µ#£ùXxǴŤíãu]PÍlM’lIs>{Ó7šþtæÌh¸ùÈ+ŸŸò*ˆä“WŸÿSåkK¿ÿÁwÃÒ/±›ÎÿÖ3é1Ÿ?õèÏ\ò§ÌI„[޹~èãwüø¼:íÒ‡þüõ†Ç._Ò©™}â¿fg]zB 5§}õKÍþ[ƒB'XÈ·ýáŽßoÞxÿ™mò«'ˆÖ çƒg.YþÅCꢧÜÊ.~ðžK§Ð ƒÙáÜ%¦M ôw줈zèîh…ÏÝÙ^ËÞ¶¥¿îÈ̘˜qì§ÈÇ;á¾ä_}èîS·}÷¨¦HóÑ×öæ¡ÊÎêaÓOåÝ×]ò‡#øý%?qù17¢ÀFº·‰Žé“YŸYEUì]]]½½½‹/®Ì%L®ŒèTŽjÃAU¢dT××wŽß·§4Þù³´ü°TxÜ:üëÿ(„(ætø|Äæp<â9§¶ë­0³µÎakàÈRç<“RJI^·„=SM–L!•è—¡»Y(Ÿ"™K«d`v…>ÝW!¨²*&†ƒ!›‰éñ8€¨_#Ò»ÞÈ6Y!ëÞn„ ‹³ÊÁ*“%³LΨ-_Â%“B¸x …Jª¸tÞò©RQHf šê4òˆÇB¢0-PUBh&' -öpWÿêgÖn]× \éOˆÖG !SgÔeGòbõ‰˜6Ø› +RÍ!òESÜçSêêv¼mLÚ>ÞÉlUÉ9â¼ïÌ>öœ²~×ã–-[vÒI'½=1½‹`m_þÔúèQÇÌœL9Ì~õG\Óüðã_wåþ[wýᇽòå¾Gχ…½-л_üGo뇖´¿ß¿~UìüñÃ?¼ôg,ÛÅà÷,ËÚBmݺµ³³ó°Ã‹DƬ^¿~½bîܹ{¸e!Äã?~Ì1Çøýþïÿø/ËÖo5‰È*üøÚÆ\;Ž6‚1öÄOwÜqªªî`ô -~ýÃ×Ek¸o”YŒ-˜A|²Ò(„M8!’V¨ÞÑ´bCµÑ—-‹§5¯z­@¼5<˜Ì…üJJØZë"Ý™ €Úp`°àÑD‚š³Hpz"¸i4 &èɺÄëàŽ¦v¹ mfÔÄ7÷%ÇÍÁ Ñ@{ÓYÓBÑ­ƒ®5ü¢æ†5¶Ï[Øôêðö©‰Xïæ²?ûS[^ÜVÖ®Í Ä††s£a[fL,lsPù‡TFm+ær)9EDÉD=мd‰œÃ‘¾šÕ›†PBD€ZŒ+²dJì€æuÈ^×= ¥)ºm }À¬¦7:ûÎjzc}¿œ. B‰$Ké"1‹¨òöÙ°¹iFÃ@÷€™‹§m\Õ `þ1ócëž[§Å"FÑœ÷Á9…‚•íÉZæ1mýË]Í‹¦ ­ïóuÔÖ5­&xö¹‡Ï?xLO§d2¹nݺ%K–ìáG¨„-[¶tÐA¦iJÒ{³’‘J¥v=àK¿ÜðôCUSÓ}‚ÒxèGŽÓ /¾aùo7ÓzGÀ×±ää*Óª¢Š·}}}6l8äCv`Z˜Tf«4å y-T \dý–Áîñ’[¥ÌÖÎL‹Ùì_º¯{mïö̓s›.ÂAPÆeÓæ2¥&#’4cQG8 éY€$‘œn½’cÑ^’]iÞzC¿'{'¤l£å¸ **Ê™*^¡Í*êåZD6¯7«îøt®l¬Ål` 7 äðî Ÿ1bòµ+›Ó‹ºÕ *„ Ä+«Œ R¡!±ÌrTŠ Ã}®Ôƒ Ñ °l–hž¥=¾XÊçÁ[ 0saüŠàœ¥`Ã'P‚.§QýîU¡kž^Ó0µÎ(šGa0oŽFý]¯÷(š ª¡h ¡!¢…µÜp®}FÆb{õL.+ö^»éNÏ6Þt¤JÆ‚Ö\üØ86RUTQEïuTÞÀÖ¬Y³hÑ¢x<¾óȽ%[¨°Î:ú°™¨I5DÚ2oýÞ£;+·JdËA™i1þߗܶùB €u/mô7Õ‚HTäuÈRاTij}ÌéÓù„À̦ð( -€¨·èOU]2QîB­©¥Õˆ¥Òa¢‚qf³e“÷lÁeCª,u{ëÆQÇô![鞥ÛFFò-Ѱ66SÌ[­QwË!錠>à%£žŒê£»‡ ¶(?c™UÈȰôyÄÑv¹`C$سaxx$çèÔU™Ð @Ñ93š"Q)ˆD@ t[ÈT„ƒFÁÝB.]hhOL›Ó°îùuâ n&اJ›‡Ô€`Ö‚f³hÕ¶&òCÙXS”åMªJÅL1ÚqYÕ¾t¡®’-¼»È–4㪗L1|䞾߽ÒöÒÜk–gÿu5Ä*ª¨â-ÆðððªU«.\X[[;î€I­’uV,æù5MQ´mŠÞTá©G–ï0ØùíkÛ6c¬Ä´l˾ëê_øÝ«[×õÎ;rf3› „wÁݬ;p@ä,Ç7Á¹ÍLê¸dnMÎïs(^ë@U–Ô†óê57L¯‹5¥ÔÓP­p‡/ÉÖ%BJ}{" @>gÌ®Iø$Z¹0±Ô²É¤c×Qgs†.ýŠ|NÎLæ¤D¶J©,j:‹<îeÀY­MM LÎ@&êb®­WÔ[ÛH‹ºi2›ñÚDc®x @2]`X6€)3dŸU¦ŠD‘âáá­)È×8­6R7öÛ6+æ $ ­ñõ/m`¬®9fLÑÚPoç€?êïYß/K´mj­mÛ;©÷E _láÝE¶ª¨¢Š*ªØÉdòµ×^›7o^CCÃDc&G¶JSêc!Ø\Ud) ³„ÿÉß,í™õ•ƒ…„Ã0JL+—*|÷ŒÿYþø*E“t.ßÔ8­\Æ8¨9é+.ĶÎaNŸ_‰‡ý[Ö8õ>J=‘»Ç±7y‰’„¬Íâ!s]®°%¿qYÿàʺÑhb¾Æhc»PsϼԯH%{É|+ߟ ©cj…Ùœ+T7Ò©8m%™¬žuK{¯N—Oë%<»y°1,ÍMtÔ©Àa¿G%=#{sCòÉÿMd‰&3M‘RY€æSÂMq¡ÈEK5•æG3‘xpõ³ë˜ÍBq—ÆeFòµMÑX¯ç #ƒ™hP±˜ @SeÛdùŒ>efƒ£¯²mÛ4MÛ¶K Kì=œ2â$&¾ÇP%[UTQEïVd2™+VÌž=»¥¥eÃö‘lÍ™ÑHl.IT¢4%xO×à.ÿ囯ou^u\V®\ùú믯[öæÿ^qÏÏ®Ü:<{ñt–aËŠlŠ . û:hkmŒ:¾£AE6MÛ©ªª4-e6wZ<­RÅ^4D‚³¥0¶÷fhZ9‰õæºsCnqSS¥KTIÑ —]²˜ér¦ÁíÅöD¹öêSdÝSVõt2«|Þ¢Ÿ¢¯/©Ê€ GѶ¦Ë÷RªM.U¢^%Ç-MÈh……Ó yóKI5ÍrJ‘ €¡4.D]"$jkB#É<•‡Í+ª$Q! ¡Û¢)(fݪhz8@ñ+fѰ³9ªÈBñ`¼&ôæ«›R#¹H<èLÉçâ á­ƒ3ç6«ªªªjÉ×¶mÛ¶wÛn|\8™­jñÝ@¶Øºë üqÜ¢ÞE°¶¯øëÓ˼çg ø}ûÞýÂ_^Úºs‹î*ª¨âí@.—[¾|ùÔ©SÛÛÛw=rrš­’6ëøcæPØœZBŶ¹eñõ¯ô†‹RÉM¾¤Çªlæ •òЊ‡Q9 cÙœXå‹dħ°mÑ‘ˆP=þ—×*Î-!ü¶§Á¢Ô),v)N’![–áVG3E͉ð@ŸÛ›(è(̧RŠÄ„‚šÍxM<˜+˜\ˆPXn›Ó *¡Á@ëì&×ý!êÝ8 ezƒÐõÑþ”^0ÔuÔè£_HêK·¶Ç¶¥bµ¡îÎÚ¦¨ªÊÓfÕ ”*Š¢iš¦i”Òd2©(ŠÃºöê³TÍl9xñ®›?xàwýù3uïYê+²]kûã³¾· Ó}­³šÖ®ìm]˜x7ö*ªxaÛ¶m---Ó§OßíÈ}Ìlµ·Õ„4%YÔ©L« |]ÿì~sE×úW7…"ÚœÅÓ6ëyýo÷<N„M6‹€3Îmî iõí5Ý£&‰)µ­ñ¡žTljbdóHZ¥%=‡ä —Ò£@6ÎÇ‘r|äh­ÏmÉê @Éì´”5 ´‚·Ø°˜4f)Ñõ<¥È´èiÆ+Õî¤BæoŒˆçßô©ÉŠó©pÆ x\-ªh¨§Ç²Ê {\k¯E -y×ppRÖ‚1é´[¸Le‹þˆÒtöÊ~ɶy©YPCm´»/©*2½˜ ù‡³aŸ?l™Ý¼ùŸÝáö†X¯wã €–ÙÍ™Ñ\45eËëÝD¢}›‡„#þͯuOYØ–Õùȶ‘|Ö\´púk¯tB¾é³| ­cZPSJÓéôâÅ‹&›¶m$ÉYµŠ]¢ªÙrð¯¸I²ÎþØ/“î'NûÊóÙ¿¼‡™ÀG»º MSàÀñ;œî0aƼ°{·Ýü¹?}Èÿzì_®üÅöa¯;cmG«èÞ40±~UT±ß0gΜY³fíÉHJ)cã·ÛÅ”J~Ö J ÂäªO2Ãj&U,æ)s[6¬Øòâ^{ôŸüý­O>ûÈ«¾/=œyÈtC]ÉŽZôoìXД/DSfÐK„’ƒYE¦œqÓ´§uÔr&›;mðùë#Ažµ9õñ€dÊ5Çù5>¿€ªit#ŸÍ>†£¡|Á´Z¦Ôæ {õ³ë|¥qj­DDïÚžµ/nìÐ<½QÏ3´RyX¨¾>­Ã>˰õá\VohØqíT:îìì\¸pa ¨,/2Æý®?ZU²å š‘x R½ýfmcÍ»ÕÑÍNÝùå—žªYpßÓŸzòç3ðëç¯þUι“hc=ÙÞ;¼wWñ*ª¨â­Àž7ÞëÌk“$‰ø¨”|ëæ¡P"¨ÔBVŸv`ÇàÖ‘i ÛŠY}Úº^ßN„¤²¾ 6ý ¶ /u ë‘ÚÂ1C—Aœ1ñ  ÖlÆkÃéd@,îÞò™— ©êȪfó¼W,%±˜·’P«¨:¯n\30U-³‡Ê¥…~_Eâ"—“µ23Щ§;YrGJ^.¬¿7ELà TTŠè ˆœ!•m{ˆMhE¢ËbŒcß5Î\j ðõuˆ†|’é¢cr!K@±h°A4$¡°:šLmßžèOÉ>5œùk¢Å¬ŠW?·@óÌÆÁ­#b±éóš7¿¾¹wÓ Õ¯®y£ìW§Ì¨³šš£…‚‹ibhšæªU«¦OŸ^²)•UUutôŒ±’Ž;Á0Œ*ÙÂ>­Ô}§ù !”*ÁƧ^ó'§­1ïyðSm­ŸXÚ͈¡Ç.›Yÿ៮Ó;Çøí§þú²ÜŸ.JPB´£nî²»n>*|ò]C·S$—ÝzÙñs‚Äôc>wÏcUN"÷ú­gÌœ~ÚOVd&±u×úЗ®ÿôⶈ/P7ÿ´ï>±O°3þ¸/ßpÁ‘Sb¾à'Õ¿Ëa?¼ðˆö¨/P·àŒ_ØôüÍç.n‹ø‚‡\üË Î1Š‘çnõèÏÞ»º°‹WÂ~£ëw›k/úÒ”©a)6wÆ—Ï ÿó‘-n‡q‰G¬äè;G‹VEUì §ú³WSJÖŽ;nŽ$,.t›<¨6O¯ïí"u—*2€­ëúT¿RÌéms[¤3ó—ÌTUuÞ’YáÆx ̤R)- d‡²F)±ò&€PÄ !Ó\^ z¾SN‡éxÈŸ\7j-ÙœK¶J¬Ëô:í”Ä[òžŸ–9b.lv[¤T„R¾$Û6ïîvdïþ ²å¬¬ó¹<¬ä“šË›Í±H>o`ª»À°©°#—2ôòÉgĪì(%bA—å%YÏ» ‹œgêâŽÓ)Ì$4­6egÖ 6ÅÔæ:‹IºnË*É µÍÑps¢eVãh¿[­i©qh~e˪-Sê3#Œ:Ûº¦'“.fG²±X`úü–ÊÐÞxãH$ÒÑÑ I’“èRÅù´8«WÛÒ0Çgkçéï7LšlÅ.øCQÁY®û‰o6ýá’Ëîîám;ç¶»þmíW.üñê–û.»ì¯ÿäÞ/ÌU+'jgÜ¿ò‡‡‡N½w” a<ÿ•1ê¼ë¶³?úý-Çþä…Þ‘ÍO]wðòß>[Êè »ÿ¯_;ácw4þ×ß¹òÈ.~Ï™Ïþßsþä•äæ?þ;¿ýì‹îìæìŽÿíŠ#ºl{!ÿ›³šv1ìùÇÖûkƒ£î>jí·NþÀ7º?uÿêá‘U7ÏýÇ—¯~xHöª[¾x]ïG\;2ºño7ßûØSÅBšO'â6à.à+Àjà>à¯À½€ºó¸·âHÙڛϹðцo>Ý›ìyúÚÆ¿ýj¹{0pq Ù韂o¯€dgj¸!>×­â“–¹ñ`wj£×áUóÑbQ¯’­*ªxÛ±ç+¼öQ³ µ­& I„»†ŸþÖ¡4›,´ÏiêZÓŠ6­Úkˆf“ù™‡LÐùjW}{í¼#g,ÿëëk_ìèKÅ꣑HH/2%V¶m6˜ÞÖu. ¦È´oýá8#(îÁY®Ø*ù’#Á€êtŒ&„äò¦7ÆòbötQ@.ïR1E–†ÖŒ$‚~¶]ÎÂëF™"™º­¬Yu ¢Âq«&À½î‡ÅB¹ÂX¤3E0 d‡Ü¾9æ}!6±DùLÊÞ’!CšG­ˆéf^´Ž}¼sDÉLá)þ±IØ,—±3Cy6˜o‰%™6¶ÖDaÆm_S ›Ê%šb3M•)5˜uð”Y‡LÙðR§¥[ц€Ù‡´oxµ‹Pâ(fÑ …}ZØŸÉÌXP&>ºú1 IDAT[›6m2 cþüù»ø¤QJeYv]²,BJåEçóSÍl9Øç2"Ñj8ë;Ÿ?àå??›’8ñÆ¥_(Þpú’S¾ºáŒ»~qvë^ì‚­{ðöçg_õóož4#æN9ê²ÿýÏS²/ò«ï8÷˜Ï­úøÃÿß3:vÓY^ð¹~yI“ßßpÄ?úüÔçø}OÅ'}‡€(‹¿pÃe‹|•‘Ž3LýÀ?øôÂ-Ðö‘sNlÄ’ÿ÷½ÓgGÕàôOœ} ]ûú& ªO“µ@8èÓ¢S޼èæžÝ´óG”OŸðþ<øp:ðUà. u¼1oÅ‘Úk~hõWßtá„/Ôq·®» Ý=^ ÷Œ@ˆþYøþÁD!o# ”RË$ ¸åùÐUžUEïtì;ÙPŸˆ€ &I2, ôm!¡XY¬}^+g¼ef#€þ®!I–ã-3tÌo6Dµh¨izC(âkë¨É¤ºÚ¨à‚*2ŠÅt6’hˆ(‚¡èèÁ½»{Á0êhÚ’dŒ†ÝI(¤•Ö'Š;–ÂÁò«!ù¬ÙNÒ™²•|Ix P4(E`l§jgõbnÔu…O§ó¥—$EÝ„DÆ-ÉK¶,T¨á!éÂò=ÌÇ(ÈÿgïËããªêöŸs·™;ûLf&“}i“4éFKK[ÚÒ"‹¸°ˆ"pT@ùˆ ¢¾¨ðC_PYÅWÅW}YÄ.@K[º%iš}O&³ï˽÷üþ¸s'Ò¤¨”2Ï'ÌLÎ=sΙsŸûý>çù…ƒ¢½/«…Á¢Z­Õ3̈h®vÅ{ƒlC:%9\¦x,ݱ¥{É‚2½A'šD³Õê*+uÍ/í~«¯ë­Þš¥ã=£ß8D %¤SR}K9dª(ÔU]2Ö5æ™W*%Ó‹ &îœ?¾×ëX²d ÇÍj#š^Tc]…6]ÑhTæB8^qÔd+ÑúÄug/©´é9†a+¯}%˜å¾!†åŸÿüб}}K®¹qƒ}N²wythL7¯a~&íyôG3\tÛ—VÍ¢G¶º®šË?¬"ÞQ¯2Ó€™ÒòRíVc†fÄj·åFÆó‚˜Om^àeuwFóuO<|jÛ7Î^uÒús®¸õñ] €è "Ò©ô;²’ÏcÀ`Ã,ÎÑÑÎT›0×Ô8´íÇUu•³Óƒ‘C";I®ÙÃk"†l:­ˆ¢þ8ÞÝPDïüKÈÖ K«XBƒ‚´$¥Šy €x$ `¨sŒå˜àx¸yÍüy‹+w¿¸¯ukGëPÝâj‹Û*SÈ’lÔsáP x>1žæuz‰T‚D$³%·°äeX¢Àî1™s¡ƒfþi2Lf¦¢ZKÖ¤R…ÿU“¡=­Þ&»%•‘ Žš S©©É¾Ž £ŽÏ¤'Ûð NU•X(òä¢91 ¦h¶ØÔ”§Ø© -6 ®À÷§ …C<–À2Ð>®Fè|¾…K¦³e.s¨m‚åÀî°p8MÞÑ0”`B'°±x&“Ux†+­«\ºaqYƒ{`ßp&•Ng0+g¥¡¶AÕpË]a÷ ,%æž}ƒ„`^K¹:ªD"ÑÚÚÚÒÒb*0Ș †É§UýóÏ?¿wïÞ9ur\â(É–ÒóЗ®ýgã/ò'%E¸ÿ4>ÿ»”º~ùÅÛ:6\yF÷_y¤g:é4!‡W×À–U–¥»;‡_øµw<÷à¢g/<ç;›ýG ¥È½šNIì¤î27f0ßñ2Ó¼f±ñ¼Û}áµ7ßø¿û6ö÷¬«Ÿ P@o·‹ñPdz¹|ØtÌáæ:S¦ÔãŠö÷rgOìÊ èHiD{£Í9l¨­ép{0^c›¯.yJ$áìŽãËÒ¢ˆ"Ž7¼KŸ-§mh@t€Ë$E(18<ÖÀX¸¢¡t cÔYéû¢ó–ÕV5•…ÆB‚È‹f=€Å§¶ý1[©E6•åxV½ü‹ &2`õþárƒLe³Õ¤LZ2hE{òþ¥z½ö@Çå5[Y-ï¦×M†Žò Ìw0,ð¹~ô<—Îä•^lBõ’È* NGaœ,t‰"CH¾,4/VVI]ÁybSSë!Œ\P0H­ç#M>ÍmiäáóÇT8-‘PJ-Ñ“JKv«)Ñ*Ññ'$) D z!™Ì¸J­Äß1 ÄÇÇÂñpR¢„RbsZ]UNf§i m@eséDïX*žöE\å65œ¦†ÇM˪Ȳ¼wïÞòòrǃ£…èúÝï~7::úè£u?Ç Ž’lÑt"©ðz“É$HÞÜòÓ×´€lr×]›nÚôØã?ì‘‹ºoºìî½ê·3ó•nñ̇Æ)ÀØÒ{ 5rØoŸm¾ø kÞó¥;ÿÞNEú·=|í=§ETt —>úò ÿtÑ™_~læUC:ðàÍ÷¿1žJyw<ðÍzÖ]ü±*òŽžå¼f…ÌKß¹ø–'·uùS’B‚t,–@lå‚oÌ?-Ûº n¦¹;~¸ÊÐrËÎi æ0S®åÂOµ¼q÷MO¶3‰ÁWîøöã¹³x„4"¸ÅuçÕù½¯¿7*‡vÿø©è ÔÖ³@Ãc^ê)w¾_÷YQÄ*ÙšöwæCòO)¥îR‹EBBu\ŒaÂþƥUv €§Îí©uŒB`hb°}¨uk˱'lXÔ³ÐUå’³²$É,Ç‚ajkKTr£¤$` €:Í!Œh*·tûÇbùÜb£r¯˜“z ¼+Dþ¿²ÙÜ‹RF©rŽXæ‚ЗÕ8ùXf#/EcEÙpÖjÐʹ,C•Ûž+‰Xxãž™²‘„)X½‰9­eU24£P G‰¬Í¤/õÖ\„O}0ápX r €cu¢‘´ —ÍeŠ„“#ýÚJ›N‰Œ”‘y£>•ÈŒõxN¬[°jþ‚•u6§ Ñ@ÜTb ù"Œ" L6Ãp··¬®Ä7h>¡šRÚÞÞÎq\CCÞ8pã7>ùä“'žxâ»ìê8ÀQ’-vÁï¹¹ì¯5XÍåk®ÛºðìÕÐàK7mú)ÿ'n?ÅÂØN¿ë‰ëå{6ÝúÏðÔ_8)ùØ×¯/öã¥<£[woO!qbæ]ýô_o©zñÚUeŽº ßÚ½â¼uÂ:®ê¼Ÿ¿ôøi[®ØxõfðvN¹èä_9Ñe­9çù³O=re-óžå¼f aýç?géæs8̧Þ9ñ‰‡ï»¤”`õõ†ÑþñØÛKÀO' p:p=° ¿­‘4Ô7êZ³vþ4Œf.3å}ýé_Ÿ;ô½ue–òõ· o¸hŤoypö/üxÍßþM§ýþô«áÂu?¸ÈÄ€ìï¢5ó<Ç€5nE|ð0'<0}>a†CòdKõˆ§”zÜšVX‘7*€ÞnoÜ?8XVnzcÞÀîö­›Ç “ÊÇÃÍkËDà ßp( «ã N03Òå%,I$²<φ'b8$)`Í>ÖçÓF£ÔäK% ¼µòµnx¶p[b.,d4è:w”ÛÍŒúÉ¥ÝT`Ä5Òб“ ZFÑõÆÉR?8BRŠŒ©QT±<Éó-6äÉ“¡`HV“gq‰œ/ªJÚœV#2æ}¯pL¥³v³Xe1Ä¢1áP€wh]wjÜ3nÒ›7¯¾¥ü™¾R?õ«ÿÞÏ4ÕÿÚ?†+?truq§Iÿ ¼ð «V­Ê?µÙlïá`ŽPJ3™YYÅd³Ù—_~yãÆ³;hmmå8®©© €¢(ªqå3O¼þìŸß’"eät:cKdkMüÁm-'7´n98îݽ”RG™¸ªæò¾ýƒ•-U”2”LŒGMN³ÁcõvŒš:gÿ!¯Ñ¦ ÒÜP:1 Í+köuŒ‚@±ð‹J$ž=Ø3 ¬Ö88–в¸âÀ¡Q‹[Ê÷ÐTï:Ø7¡ŽYÇ³é¬ `IcÙþƒ£ê‹&žI$eenËø`hÞÏžA¥««Ë«6XPíênÏ=vÚ®JËž1õi½É:<R/][½k×`þüœPUz0ôñYT²Ca`Îr’_ ØI†¥tÊÈDæiÖBðaÊJ„Ršrè½ ‘¨y„¶,. ´úBñ-ez¼¶”ïïÐØP:¶cÀaÇÇâL&],–v»Í¾‰(ÔÔ9»ŒTVجV= HKRi=C¥H<“Hy}Þ>€æ“›îèpâYKvÿ}ÓÚ¦x,©04T,[e•ósß;w×®]Ë—/Ï»jE¹âŠ+ü~ÿ‹/¾8û¯Üû¡Phæ×ÿ·ãÕ§‹¦¦ÿ!ðžg6w¦€[y×ÎßÎ´Ž èkN>»È´Š(âØ‡¥˜“l+ﳕgZ Ãl<{Ç0$%Ñ”Ìê8ÙfêÚ;hu[úÛ† ±{OÿÂõ Fƒ¥µÎÝ/ìsV–H2eyN4éJ*lÃÝ:ÓJaÐv§€ˆ«õj$E`2éj<¶®ù@—ÉœÛ"Ô.lù™p\>±˜cZÀ¤ˆŠPšÒrv= {ßX½Û.8r 5|L!LçŸFcnò±)g/“ÊhŽé^&xM Ïkxµ0"£=UC\„eP ¬§,(ÀSšˆˆhÕ{’š[—JeSr$œ{êt[ØFE¡¥å¶ o€ÅaL¥$ïpPàÙtZVdš¥D¡ [Nn´yl’¤4¯žWÓ\vðõ.œ $ýq‹Ýn1é2éLRŠìÚµËãñ¼ûÛ˜‡~xÛ¶mO=õÔqÏ´fcð>+È]÷¬ÈT0%Ÿý[úȇQDE|°ptdKMªG©)K§Ûj7 ,aô"§× qJ% jAE<”P½ãnï®^XÙ°¢¾uËAÂ’T2#Ë4Œ'¢iQœ–Ì“ °Ñ@€hÖ•y¬‘‰˜¢P*[2™tÄ›@ØGÉ‹ÜY6—þ G¢Ú8µÂˆâ­¼}ƒNÏ*šÐJШ›UØ‚j9ùˆ?pÈg1èÔ×£‘ÉK 'OIÂ)E˜L¤ã‰¨?ÖxÒ<½Iç®ueR™š ¢(Ô]ãìÚÓO˜âÊÕ+T x—˵téÒSN9ÅårõöönÞ¼¹½½=qƒ…¢(W_}ussóÍ7ß<§/çE²UDEqücNd‹Rj2™ÆÇÇ÷ìÙ311Qx`ËÒjQà8–£„㉒P”Ê–rVà–Õ¦"‰L2S¿´š,Z¿ sw/Ç2”0™¬b³‰#!£Q ÅáC±X€Žd,Í ,^ÇÅ™¦J‡¢…­RšÉ{$šÀ°Ìá¬KÐåHI&]`RªÙ7z@(yÀÈh¬¾,§O§&÷‰«38ä3‰‚(LÙ°ˆgtšôÊbÔQv*™PÀ¨Xr&t² “¡Jb’ŸÉ™)`kL„#c½W‰ùm#·õÁžP2‘)q¡eH'¼>o”XU°%IŠ,+¥Uvâ wO„‡}©”$)4™b¡DÛ¶C ¨j*ííoê7ÚD)-é_õáÅFãdÌ € 555kÖ¬Y¶l¥t×®]o¼ñÆÀÀÀ {2î¿ÿþ½{÷>þøã,[´z;ÞdKn¿s…ù¿‰¾×ãxWÈŽízþÕCÇNÁfeðg2oüÅÈ»PªÛs¯¤ŽÜ°ˆ"Šø÷àßQ‘R*ËrIIɺuëGGGÇÖ­[»»»ó »Šr+Í*<ͤ4Çíy?'0={û;w÷vîê­]\ݹ«·¢±¼kwŸœÉ‚aS±”Ñ"ú¼V£He%è q«M´Yž7ûó£Tõ飠2 ³I§ÆVCòd+­™ÂÛí9Y7ÒZyA®À"›™d7ÉDƜʺdAÝÕ>^–”z§=_¬PE,”ðåŒy$(ÀÛÎ<¡ÔŠ‚0iZHÈØ4• Øž"Þ lÏHY٠ٱÊÚhíFc4àp˜DB ‰xÆ^bTZê±Æ¢)«Ã F¹ÌvCÀõ…9§(ÔbÕ‡q“Ãä®u–©ZP¾ë…}ЬÔ/«cXÆ^bêÙ?XµÐ-g”“>´Ób³ÙZZZN=õÔšššñññ-[¶ìÛ·Ïï÷¿-ÐõÚk¯}ÿûßúé§].×´]}Àq -¥çÞuæ³5qÌðh´§mÔÞPw|9­ë+ËBí‡s3¦.¢ˆ"ÞÌ’l©LKQ†aôz}]]ݺuëš››#‘ÈÖ­[÷ìÙãóùÖnl(©,‘0Œ7’¶{¬­[-Z¿a 'Œƒ«ÆÙµ»—ãÁ$Ú]ºT\f8f¼gÂd3$“™Úz§o4 ›UÌúj›1̪O CÔâ€ùZ=j` €Ù¨Ë_èó†ïyÚiÐsùÿ¦S“wƒ©ÔdH&Möì-/1cê–ÃT"G¼h4ËÐ)gcÑ´,ê²IJi:u1'HО2àâSš¼{))¥ f8J2ŠBt*G"\|AÈkêu€‰ñˆê1æ(1P •¸-ãAÇ)Þ‘°É*º«KLS&–ªiô˜K̽û—¾(ÎiÞ-%f"KF›Ñl×3[ÛèiZQÁ²lyyùÊ•+W¯^-ŠâT žL&x½ÞË/¿üöÛo_»víÌý|`ñ^-ùÐV›?úX0÷s`ê¿¶5úÜç]Ç™ %ÐÓ“(«õð €?Ì|À,Úü'! Ý{õ_ןøÛ§=wÝ/Æ|ZÁTgM%íïŸÁ`¶ˆ"Š8&À0̕΅L+3SE<Ë–-[»v­Édjmmå-1ŽR³çô#+2ËØkJØzháúæ%§4-â¼¥5íۻ̣Ùií%“¡ÁP8¬¨)ïóÛÜF–‰GÓГAÏwîèL¤Xl¢º‘Р9¼‹ùˆF]…ÛÒ\ëZVWZm7Ï«pè.7²Z&Eñyûx‰¼ËÄciPx8=Ç2ñÄ$ ‹iy:|…%mZÑÆR‹I…BHA¤ŠKQDz!Ü=¸Ô”0$—¤BÛbdP€r$à‹¨¯ø}q0„Ltæ\ÄÔÈœ$)¥¥Vz=€az‘Wê®°…q¥5NJ˜‰‘P_Çh÷[}ýÞ¥§6í~qßH׸ÙaZ°¦¡kwO`4”Qd9“ÑŒF³Èñ³MüƆ††õë×755E£Ñ_þò—§œrʦM›N<ñÄ믿~–|q D¶ŽÐÐðhÆé)y¿f±¥Ð/oxýå’E¿úÉ—~>¿ßzÓïrŽ3Äêq“±aß6«QDïò¾YM|!Ó*„(ŠóçÏ_¿~}sË‹•OÅÒYJNè,úÞ‘ðüëÈY©u[GëÖƒ:“XÓR1ÒåuW•xûý„(F“(KŠ«ÔÀ`]¥–¨F,T“-C¨LD")F- %h™5^àt·´¾Ô#³¡]£[úÞìxµgüõ!]oŒ DK,:bAaDQ/æ‡BZ\Ç¢W¸zÞ­tYó¦\ !ê[%…ÍLž.³&–Oø#ª'¦ &›ÉYjMbê²H¦*˜,å´ö$›Ë0Ê gÕ™,S«Y(s›FûüV« èËiä-V€,+’É Âù¥¥K*•Õé9A7>œYJÌMåΊ’[:šNš ˆ1  ăI&¤”ÂP,Yß„9‚a·Û} 'œwÞy•••»wïÞ²eËu×]×ÓÓ3×®> 8j²züc"!„ax£gѹ·üU­‡¬ >õÉªÊ žè—Љ¿]ÕàÞøÓö)_²ô/]þÍí±¿^á`Ñ­»·Gš’F¤Áí\µaA©Ñà˜wêÕ쟪r¢±½œß0ïc?Ùy‡UCn¿s…éC×ßyéÊ*‹ÞàZø±ï½¨VRœ~ÀjûÓo¸ë²5µ6½ñÂßÎØì—¯®¶ê ®Eçß½­{뽟YYeÑ='~ö±uŽÔ¿åîO­¬¶‰FWãºMÿoË„é`0a´Y¦áZË ~“í€èšÝ'0×™Ù¾go<£Á!Šöºõ_|ôÀlMT¤ý=êu^q}m™µ5Ï¿á3æ=èËUg,vK68v´hEQÄ´˜9˜³Ï)°Ôš¡ŸÒÒÒµZÌó,—ÉêH°[BþØâõMÛ»¤ŒdqZYVd%4I§Ò¼g2ÄZjuz¬éD §ç\vÑ`5àu\4’ª«w¦c,ÇD#I¢V|šãs×)«Ž·2ÿ솶ТœY E³íáeUnc¡„¶±Ñ çó¡/ŽÑü#$¹ŒŸtç2›¦T? "OzM®OQm)'š£ ˜‚òÒLf’KåÞ43u•¤DIh¦\Ú¶DYG²YÙjÉßnÑór€ÙÂðODÕL¢šFTÏR,’ZØàòíìÙÜô…Ûš›\<Ï„|1w•£¤Â‘ˆg:Þì)­wwîîk^ÓXÞàéØÑeu›Ë›]íޚEÕ‡võ.?½G‹ÎÎÎ_|ñÕW_ýË_þÇý~ÿQwu|ã¨É–í²ÿMRJ9Öÿâ·Êþ÷sWýzP˜ª‹üÕÇÛ¾vù}}_uÕóËòè—›§ÔÔÿäî¬2ûh@¡4½õkS¬Ñ•ž?ý‘ÛûNûɶaïËw,ßùÇÍùl:•FŸÿÆ}ØóÃWþp݉––ƒÌæßnYú“ãÁÞ¿|AyèÓWü²_y§çÚÿqךŸnKÄÿçSe34Ûú·ö ½å tüz]Û­g¯½¹ÿ“Oðù÷ÝÛünzf‚Ò¾û¿rÇðGžjóºþ~÷†á¿½:1´—ZFúü $Oøûž–%åÎJG$”èu×¹Q¯ÈJ_ÛPI™Íæ2‡FCÉP2I•«Ò£Âèèèç>÷¹»ï¾{åÊ•ëÖ­ûõ¯½råÊ£}÷dÑ IDATëê¸Ç»N#sñ§¾{Íâ7þosˆãÃw?ñåä]ç|Î×;ÎÿÕ/>]9‡·ÛŸzhkÓ?ÿÖ™óm¢µvÝUÿýsÔ?ððgN½zß'žyå¿Ï¯9BenÑÕ?¸áä2Q,]ýÕ]S·å7œ\cÞ>`üÊ/ßuÕÊR}áH§i&¬ýê÷/]R¢3Tuñ‡=8ùKÿu^“U0λàÓ§2m{»%€z§3˜zµvÍ÷þàÓe‡¯„ ð2pÀ\ü ž>©mþE3•ZŸyúÀê›î¹|‰Coª9ãÖ;.«ÎÍW‡Gü ô°¿,n_€&â |>O ¼AÉÆòz„"Ï*¢ˆ÷fÐlä™eov—ÙnÒÑT&# ¥Š,”»³©l×î>ïÐľWÛ(!’$¼¡T,[ⲂRè|³;¢N¦4̨Q$“ÍÐÔX:|h<O0Zsk £m$8Ö•¡=;¤¬V[†.Ÿ1$“r+*Aé U{lbñœÞ¼ÐpËlšô8H&â6MVdâ‹Ö—çXHFÚËz¢äß_[m¹4²+Všò”KPB´ÐŸ’¯á£õ£èV³I›ˆâíÐiá7–£ÆÇB…V;ÄÁ¶W…€»Â %Ê뜾є‘åx*1°Xõ6·¥¤¢¤¿mxñiÍ%¥Öý›úG‚®ú’ÀHxѺƾ¶‘“?rŽ ÙlöŠ+®Ø¸qãÕW_}t=| pÔd+ÑúÄug/©´é9†a+¯}%˜i¨–þó+Æöõ-¹æÆ ö9ÉÞåÑ¡1ݼ†iø™´çÑýÍpÑm_Z5‹Ùêºj.ÿ°ŠxG½ÊLfJËKµÀð ͈ÕnËŒçÑfË­ „xY’°Í×=ñð©mß8{ÕIëϹâÖÇw(¢7ˆH§ÒÓ³’/Æ€?,0·úès˜©2>6a®©qh¥»ªê*g§!##‡Dv’\%² †7å&ŸM§QÔÇ»Š(â¸À;E¶f™=<+Nk6Ñ (‰,•¤+”Í÷0,£7ˆÙ´äšgïß?`+µ7,­ b–(Š21tÜ`Û0€T* @oà]^ª¸[¯eÕ±VUÚS¡‰Á €t:ÊÛ¢‰â­b¾,"+±P2Þî›_éÈ‹ßuÂäzÇÌÔfµJ^Í(UšaY-zªP– Œ…ses²†ÉËSNAO‘V«ôäÏ®B‰B ïC9‰€Íj#ŒO¦‰<©¤S#[™Tî¿ùj@_ng¢Õl §SQª—ãI G qS›Ûê :+ì’¬ôšè-¯´Æýá¦åU‡¶w™KLÎ*w¥»´ºDVPÛXº|ãô¦3ƒRzûí·ûýþ_üâ³çèdå9RzúÒµÿl¼ã¥Cþ¤¤È÷ŸÆçÇR×/¿x[dž+Ïè¾ó+ôLw'EÁ´RM¶¬²,ÝÝ9tøŠÀ¯½ã¹={á9ßÙì?b(EèÕtJò`ß u—¹1À¼cÊLóšÄÆón{ô…×Þ|ãÿîÛØÿݳ®~&@½Ý.ÆC‘éo*Ë€'€‡Ï†iý fÊ”z\Ñþþ@îìIƒ}C¹)ho´9ǃíµ5nÆklóÕQ‰„"œÝq|YZQÄq–e_ÌòÛßf?|âsk (‘)£Œ:Ês‘”r⇗”xl VÕ0éX&K µw{MvCÏž~We‰,)‹ÊücaáP€ ‰F]"–†Vï€$É•öhÇxB­«¶éÐX€X<§ÏÛCȨEibéLw Ê“ó|ç l6iÁy ”ø‡"µåvTžä@jÚq¤Ã«VNdÀ @Öøö‹¦AÉIÀ4â>®€¢p3#O õ¹«Ã 6Eógž2P¹I¥ü ÈðGD@ݼ  ±±ltßH:“0>äà‹È¤³ÜÕξöѬwV9íì ODBÞ(Ë3í¯wú†Íë†ÚGÛGxŸˆ&*<˜;ž{î¹|ð™gž1›‹%ãf…£$[4H*¼Þd2 ’wç#·üô5í[”Üuצ[†6=öøÏ{ä¢î›.»{¯ú;ɼp¥[<ó¡q 0v§ƒôhÆbØæ‹¿°öà=_ºóïÝáT¤ÛÃ×þ×sZDE×pé£/?°ðOùõçÇfæ?Òo¾ÿñTÊ»ão>гîâU‘wð,ç5+d^úÎÅ·<¹­ËŸ’ʤc±,b«(|cþiÙ\Ül.Ÿ¶W¹ã‡« -·ìœÆ`a3åZ.üTËwßôdk0“|åŽo?> •j9nqÝyu¾GïëïÊáƒÝ?~*zµõ,Ðð˜—zÊï×}–EñÁá‘­ifÑ ¯¬´Ëɬ(rJ< €wÛÞ|nOëÖßh`ìÏâ2[ k©5“’åb,3•}2ÀòlÈ·ØD)–`uå®ÙT‰^àbÞD$Övæĵä C´ÚÒ†É,a"ž‹ft::5L­ÕSènšÍH¬”`2šò¯KÙ€x$UjÓH'e”õ.]ŸÉ]Fód‹MR¨õ(e €É(ªRMUÐ ”¨s:eKcZ¡ ÄMFÇ1Cí£eå6”¢Ôcà «3.Q²J&®zc‚Èz‡ƒF›8Ô=ÁpL:•2rMsEÿÁÆ]ãë›ðÔ•–! õ%¾hySùHçèÚ¯˜é3~ô÷÷_uÕU÷ßÿ¢EGû`â(É»à‹÷Ü\ö׋¬æò5×m]xöjhð¥›6ý”ÿÆ·Ÿbal§ßõÄõò=›nýgxj,Š”|ìë×—?ûñRžÑ­»·§ðçÏÌ»úé¿ÞRõ⵫Êu¾µ{Åyë ‹\Õy?éñÓ¶\±ñê?Ìàí$œrÑÉ;¿r¢ËZsÎògŸzäÊZæ<ËyÍÂúÏÎþÒÍç,p˜+N½sâßwI)À8êë £ýãïÀÜÎôÀ: qÚKC}£®5kçOÃhæ2SnÑןþõ¹Cß[Wf)_Ûð†‹VAú–gÿÂ×lðíßtÚïO¿ê.\÷ƒ‹L Èþþ!Z3Ïé‡"Š(âß‚£È«Lk£‡Ùࣗ¯%²¬$Ò™¤ )Qð<Á¨'ó–Vwîì))wVÍwé@"r”`Àá±* ­(5«Ñ£¶¯P’îR‹ïÀH"œÔ‰¼ñ2št­u$œ» g9Í¢À&*ÍýW4ÑHµ^dHÎTBEa}žd,  wψŤ— H˜ÙË2è%…œo»,0…[)C P%•;Š…¢@¼Åd).–g©¯¤‚DdJá ®Âl†RŽp;MÕ•ŽL*kÔ<ÆŒ€d"ãpšæÍw¥ƒq#!³Ý@)ªæ•°º ©DÆYa<4ÎëxIVâáäüeµ‡Þì)oðôî¬ZTÖrr£”‘¬žï®r„'"kÏ›3ÙJ§Ó—_~ùùçŸùåÓ‡Š˜dõ%ßm:íâû.tÏÜnûöígžyæfLï rû«NÚqÃȳ—[±ÍìØÎ—Z×Ú0MÆ- ,î.žîHéÍ›WßRþÌ _©ŸÊŒßû™¦ú_ûÇpå‡N®Ö¹mE¼k¼ð «V­Ê?µÙlïá`ŽH’tD«Rmmm,Ë655AÓiɲün˜–Š/nøQ$žIV¦2Q§pѰ³Ì ŠVã@ûHãÚæÐÏè¶÷]ø¡–öÍme-žážpÅ7xaxW¯¹¼$J4¯ªo;0 za¹ß3¦3~_\‘©»Â6>à©´ŽGŒB\c]žrÛØhÀÂ¥•­{‡°,QdEÍÓµ,ªhß3 ñ”y)ªêWr›Å|ªÎ®ã#¡$€†õuÑhz /ç\°¤±¬}g?³C³qÒXŠi+'é!'‰,(|lò fL`8†÷åØUV¤’‰Dz„Q³JÒÍÚ£$•ʱ^™‘ 3Ù›”˜„"D³Í'TEîØÜÕ¸¤²ãà€K+ÛÛFÌ_Xž F½Ñp0 aIe羡…+j[wô¶¬¨mÛÑS·°´wï°»Úìë ,q–Û T.ð ¶Ï[V3Ø6œN¤­.‹ ²æ#˾ü³ÏÎé㦔~ãߨºuë믿n0ÌMõr¼" ÍÜàúÿñv¼útQ×öïYqÖiÓ1- üЇ#¹•wí|ñíL똀¾æä³‹L«ˆ"ÞÈG¶Ô˜Ö¿„iXºªŽ* ’lª"†eùö×1;Ð> œÀÂ?íóP’i9# ‚€á™Ä¸O¹h(€h"ëT*[Â1J:«Ö6i/ƒYÛ3hšÌ7ä=HóþX›!¯Î/š‡¶tóµw¢ùÀËDµ|‰ød)éd"×&H5T¹PŽ€!dª†åí5y$ªOO¾#M%2©IrÌÔ®¥ DlQY‰Œ„øÇ5ß×@N¡où¡öѰ?Vâ±B“¸©3 LDP™`¶[ä¬b­0 s×– [zzsïžþt"  fQuiUÉ §/Äñì³Ïþæ7¿ùýï_dZsÅ1x Ÿä®{Öd*˜’Ïþ-}äC%¤p7pÿ\¥ñEQDs€J¶Þ¥Nëp\ô•zz†&CI±„%ãÞ8G¹@Ëê†Ö­‡*<™T¶~aÙÁ×;ø½Q%Vsp0bsçó±x!° Ì`Û°ÙžsgÄ\¢0ï#O4§žgóôH’r ÆT༥z¬…4Ñë8QÈk¶,}ž¥½1‡yÒn>Œåë² ™'ÞF¶˜©—"ƒÆ v*ÐÉ$Ï#A›¡ríã 6©³ª,Œ#HDS£Ýüã“EÀ;VS¥Dss•Y¨Tu¤ÏÇ ìø@Àh‡º½‚ž yã ½]ç¬2ïyñ€«Ê±pmSi+IFƒ«?ºsAggçµ×^ûÐC56N/y)b¼_É;ÿÆ×3t*ÿ#ѱͷìŒk9Äw„#À9s?öý5Ó"Š(â߀¹j¶f.Èsp–Ù.MgÏ ©” p¼Ç©3êâáDuS©”‘(¥§¥Äcá…šìÆH îp›£ã!6W.¬jÞëê­Û{è5Q&ï ªÙn™­9»Õ6y‡šJædXú?­¼Æ‹ wN4•Û˜ ö-š œNÍ=—˜Ôr)RÁùIÈTóe@!ÙR¨ð6›xÂ(…^¦  Ÿ `Ê0S"ašwˆ`ÓŠ:VʃžÏ«ÐJ=6²¬”–Y=åÖƒ¯w1­Gúü¼Ž“²ry“RZV㔲reƒÇ?j<±VO­¹o{ŸÍi0Ö;Ѻ­Ãâ±ôìéßpézŽŸƒÜ6™LnÚ´iÓ¦MŸüä'gTy¼_ÉVEQD³‡jjzt–Z3ãìËVŽc³áD2–’yaþªù†õ· )ÈœŽà¬,! 1 Œo4 €ÓâUÙ4mhr'½¹¬YVÎñž¼{–¬©ûE­La¡}|Þ¢P)¯´`±ˆ²¬t¾Ö[Sa/,æSh%oµz÷Ù4KÕxd2fE3’ÕeCž8.E92å:%Ž€%>EQ'd : ”‘¡ÓºÌËê)O˜¬T^•óSÕkƒ´Xô“.O—×:Æ#dI®¨u0Z =ÏrŒÃeö¸ L&½ÿå}ÙT–0äÐöž…ëš”5ºŽT.r7^‹MFïf†*ÕEñž{îù×~y>8(’­"Š(¢ˆã„x<žL&ÿµ”Éd’sflvQŠ$ô¢ŽÊ2€öcЬÌ[V—ˆ¦lf¸sLud0ØÄæ%•¾!_Ø +¯ã,V±G—­$èJ¥sɲ¤æJåxX>R¤'©R~b!ˆ„sz,³U@J&â¢~2œSÈÌ žÊ´ÄÀ0…|T €”–äÉ`Ñl² Ê ó6 WvêÖ{E~ÇLZ!„èT1=¥Dãm Çøú}FcŽf’¹3ÀÒ·«€Ånà šl³@ZíQê0²­¯ì÷ ú¾Ùcv›&zƒ-khÝÚ±pm“§º”¡¨_X+ÚôÛ·oß±cÇÈÈÈ÷X<ýôÓúÓŸ~ûÛßêtº™[ñNx?-¹ýÎæOü&ú^ã]!;¶ëùW#›•ÁŸ}ȼñ#ïf4©þmϽ>:rÃ"Š(⽆¢(.—KÅ×_ý­·Þš˜˜˜ÖVz®Èf³o½õ–Ûí^uz³(òЬäJŠz°¬RVïZ²¾±íµC„eF{'èEáà–6WU‰Úƒjëà,µDûƳi)Ÿ4¸\‚/Èq¬LFÛÁ§ÙÇs\Ž*™L:µ®"%_mšcâZQ£eã½~SÁU¯ðú§öê kx @<š ¦r.¢æþ(”&$%3…m±S—x#òV<%4Y ŽÏP$%`SJ>bĉœ(˜çX£áÜh%O£€~yªìÐhÖè€Á •íÿØÇsL<œ¬[Z­HŠ«¢À¡= e(è[/íO'2—ÜrÁâÅ‹O9åÇÓßß¿yóæöööH$‚éÐÖÖvà 7<öØcuuuÓ6(b68È–Òsï:óÙ¿š86xÈ¿4ÚÓ6jo¨;ŽœÖõ•e¡öC¹øëQDÿy¨F:nÉ’%ëÖ­³X,íííÛ¶mëëëËd2GÝ­¢({öìE±©©é’oœ+ê9Ž JRYæÍç‚jŽ¡£CRVP>ß“Jdìns ß+geÑ’“[}1ƒIçvèÃÞI#Rù ƒMBž·*ÍÛÇçÙ‰É2)½Êfs)«m’0ñâ$%È—ZËó6R6 Hϯq¦xcI¥`éf² >*ƒ‚RJ4:E²J6!‘‚>¹¤TèË%&› ú¡²ñ ò‚-€À²ð«Q¼p nsDFêLGz'Ô© `tÀOjç¹ãA9+›KLFz¼„%½{‡*›Ê¤ŒD–u£ÝãU ÊϹêôÒZžç«««W¯^½|ùrJéÎ;ßxãÁÁÁlvR»‹Å6mÚtÍ5ל{î¹(â]འ[ò¡­6ô±`î;ÈÔmkô¹Ï»Žr”@OO¢¬ÖÀlþ0Cë#5ø‚J=ßwã¥YwâïVŸþÜW:4”û²ÎšJÚß=>ƒ»lEñïÅ4o+È£×ëçÍ›·nݺ††ŸÏ·eË–„ÃṺ(¥PeÉ’% Ãð¿ñ“+“±! Ñ¸DI4!µ½ÑB†;ÇØJ­Î2+¯Èƒ‡Æ Õ«1ZÄT"ã¶é²ZÎNE†ý1zŸŒg0,“ÒbBÁ`.Ë‘÷h5&s[IMän2M’­BQz6•­´å¶:fÒ“¬"Î ˜„Œ¢+H/ò<ÏNYåTq§ye1ùH[B!šM¼6™>MÈT¦êä‰Ls%` óx)  ']Z­!—ÛìòXöªj­D,]Vë Ä$¢©%«êÛ^Ù§–•ìÙ?(ø¨/Þ°¼ŽR*èuôF]×ÎÞàXx¼ß÷ñ¯N)ÁK±Z­---§œrJeeåÈÈÈæÍ›8ÐÙÙ)IÒu×]çr¹¾ÿýï¥ZïÇ@dëø fœž’÷cQùÓ«ÜYß<ý¹×.øßÏó¯ÝøxX]ˆÕã&cþY9*QDÿq¼“ÑÃ0¥¥¥+V¬XµjÇq»wïÞ¾}ûððð,ýQtvvF"‘eË–±ZÍÁ‹®?Ë]jf%I`Íf$Ælª[RöEð:>Žl9+C \Ù=Öú:GïÞ~9ï¿0`-1©1'“‚²ØÅ¼GCR«â䬧Ýdà*ªÙÇë ´YRA´)Kunï­(·HÆ&{ ÍM¤oÏ ÀN^Í6‘NݵÇÈ e´`WžN©Ñ)V{+")Ù Õçk2*4ÏB˜Œ€MJ¹O„0i¡.ÏP Ä•Ûw)œ»Ä€Õf+1í÷ zÎUf•ÂQE¡=ûE“.È8kíÒ‰,€ž}KOoéͤ²>ñ•³\•%˜ÇUVV®Zµê¤“Nâ8îÒK/miiyþùçö³Ÿñül뎻rýõ×uÇŽšl…ÿ˜HaÞèYtî-Uë!+ƒO}²ªò‚'úetâoW5¸7þ´}J :ýÇK—s{ì¯W8Btëî푦¤ipûWmXPj48æzõ#û§¦Àilïç7ÌûØOvEÞá>Ln¿s…éC×ßyéÊ*‹ÞàZø±ï½¨VRœ~ÀjûÓo¸ë²5µ6½ñÂßÎØì—¯®¶ê ®Eçß½­{뽟YYeÑ='~ö±uŽÔ¿åîO­¬¶‰FWãºMÿoË„é`0a´Y¦áZÏ,@´?xqv§®Ó²}ÏÞxFƒCíuë¿øèÄìÞÄZýõ;[6.2šuœ{éü V3Ý#šSŸÅnÉLj­ˆ"Š(Äl,µL&Ó‚ Ö¯__YY900°yóæŽŽŽx<>sÏ###Ë—/„Ét!伫NÓë8ÊrzEbu1›xQ_Rn[¸f^ÿÞ¾7b°–ñ CÜ¥¦Ž×A3‹2Ù ª„ËâÈEžòÌÅî0-hö´4ºëÁ1EâÆHœ„¢åN®¢ÂÈÚÓLJynrÅÍÔ牆’T¡†Œœ_édn]“%…MO’N‰Ȥ(ð19JsA)™22 r9fÆ%RX01%«¨d‹Ñò†„>œÉwÏ+ ŠZ[ã—©xzìà0ßHP}%›ÎªC­¬wë¨4Ö;¡N³rA9E ©n©¨h(íz³Çæ¶.\Û´øÔæ ¾~äl Ùl^°`ÁO~òQ«««W®\y饗ÈïÍ7ß|衇–,YrÇg8j²e»ì“”REŽõ¿ø­²ÿýÜU¿T¦êâõñ¶¯]~ßDßãW]õüòŸ<úåæ)éoÝùOîþÁ*Ó¹JÓ[¿6Å]éyðÓ¹½ï´Ÿlö÷¾|ÇòÜœ—`Siôùoœñч=?|å×h™!¤™ÙüÛ-K²c<Øû—/(}úŠ_ö+ï4à\û?îZóÓíc‰øÿ|ªl†f[ÿ־ᡷ¼Ž_¯k»õìµ7÷òÉ>ÿ¾{›ÿqÃMÏLP@ÚwÿWîþÈSmþ@×ßïÞ0ü·—Ç)@“‰$tzÝ4#>  Pàv`%pÒì?‚¹LSn»÷âËŸ-ýÖ«ÃÁÁWoóüýw;s‹OŸ-!‡ýñøöî©o§ÈþÖž?ïd׿ÔnrxžI&SE²UDÇæd^ª†4V¯^½lÙ²L&óúë¯ïÚµËëõ¾­pµŠñññ®®®eË–î!~æeë-6‘HÙ„7,S–õùã¾þ‰T< ˆG“ÜU%T¡ó”&rÞñÄ7`/µ¨ýˆšý•Él¨¬q,˜ïÔ§S‡þÑvpóA9•MÅÓÉX:KûÂãû½c;CãUez޳XżUD!òJy–c"Á8€þýà Jó† CÂþIŠIµ×)Ie !…J,€äsˆ@Žq‰ý"y…¾DHoË«²TÉS ã ì!D  0ž“Æ+’ö†L ín3Õ‘€Íª8081¨i.à÷Œ÷ùª›ËØÜÖx  ÅÇz½­Û:ιrƒÞ8«í„¡PèÊ+¯¼ä’KöìÙ³ÿþ3Î8ã(Òˆ±Xì’K.yøá‡ívû\=þð®ÓˆDç\ü©ï^³øÿÛâøðÝO|9y×y'ŸóõŽóõ‹OWÎá-äö§ÚÚtãÏ¿uæ|›h­]wÕç5ŒLãþÌ©WïûÄ3¯ü÷ù5Gˆhr‹®þÁ '—‰béê¯þ蚺-¿ùóàä/ãíÀ¯üò]W­,ÕŽtšfÂÚ¯~ÿÒ%%:CÕY؃“¿ô_ç5Yã¼ >}*Ó¶·[ˆ ×q:ƒÙ¨×Yk×\qï>]vø÷“^.˜úâ#ÀÀë;4xwÓ”ZŸyúÀê›î¹|‰Coª9ãÖ;.«ÎMV‡Gü ô°¿,nÏ› ÓÌŸ¯ùíÂÅ¿;åSou¯9ñÆ‹“'ªÈ³Š(â˜ÃÑÙÄBl6Ûâŋׯ_ïp8:::¶mÛÖÓÓ“NO:N…B¡ÖÖÖE‹Y­Öi;¹ì›ç2²Ìò‘$  §)@X§ãFº'Ø<Öª*[Çk‡ÔÀ’£Ì¦Fž Ú@–g¸ÊLv7¼£³c[GÞÑTÔ,IM6C:odʉ#»Gø@Øfž4Â*¿‡ƒ¹–ÝnÌh2£Fs™-baûñÞ‰º:'ʵ0v¡‹ŒU%ŠpvÇqägQDïo¨.”Ruïá»éŠa·Û½|ùò5kÖètº={ö¼ñÆf³¹¬¬læ¿øÃ‹³ñ”’‘ "GáLI¦¬nK}³§ëÍ®±^€²z·”‘è´½„²LYŽ©m,‰ x‡Þ¢”æ5U -˜ÏŠUwB¾ÜþD( íq±Œ£ÄˆåQk æŽ*ðt•Lr8ªúšŠ†É×­vƒœ•{ßMÕ¼L K"rI™ÈJA?”‹Ë$oϤÐʧ“‚­Ü©-pçbR£ä4a¼LóŸššIÔ \M½+2õkj-Õ® CÐ±í ½¨NdëU<4欰Gǃ½{ZNÎ1üø—Ïrxl˜¶oßþ½ï}ïé§ŸžRƒƒƒ×]wÝ“O>©×ëÜúƒ£$[4H*¼Þd2 ’wç#·üô5M˜Üuצ[†6=öøÏ{ä¢î›.»{¯úϼp¥[<ó¡q 0v§ƒôhÆbØæ‹¿°öà=_ºóïÝáT¤ÛÃ×þ×s¹­%Ð5\úèË,üÓEg~ýù±™ùtàÁ›ïc<•òîxà›ô¬»øcUä<ËyÍ ™—¾sñ-Onëò§$…2éX, €Ø*Êߘÿp¶Õ |¸8应;~¸ÊÐrËÎi æ0M®åÂOµ¼q÷MO¶3‰ÁWîøöã¹Sx¤4bjóÛ3rp$“‘$o[ÿCÿ0Ÿàªc€†Ç¼ÔSî|?n²,¢ˆã*Ù¿´ Ñhœ7ož^¯·X,ÙlvóæÍœ¡Ò‹Ùn¼èú39 ”€D_bÑé˜áŽáÎ=®ê’‰A?‹3W×UÖ¢V:g7Þ×»â4T-×hHý—ºK@J3”χ¸ÌöÉ|¢*ŸïöJ~»]«K'WO¶ ª (ê#ÞXã|7¦ªé-6€lZ2XôyCz¢‘ŸÏ?}úô–-[ø|~ë—»>yÚlñ¼g­_j÷çøî&FöýæŸó{®¯€«8¹xÊÁûû> 3¦L‡¬Ù·€Y?å£ÓU÷梈ÅèwØÿú’€ ؘ¡8QÝfïÿó§Q!vænC?¼Ÿ ­À0Lddd@@À»ï¾ÛÁ`}èСñññ7Õ‚ƒƒ•µö™—|Ü‘¾“Wx…OÜôJ ÃË—/1âጩC˜¤Õ!Ï\Y˜ÿëd£–~ˆ…±ÿ»c2`P÷¶MºÑW—öýÀþÐ?óÜïý׳ëLiÖ…ÿò‡:c–=$ÿüóOHHˆæKSÓVM‹<ñ”ìšR­ŽO jã8îöíÛÕÕÕÁÁÁÚÍ–äry~~~nn.Ã0ŽŽŽ÷MÕ×HçöÿD"UÈ8д€O¤…eнGú­l°õ´/Ê.ã y>!ÝR.$[–äW€{€sFb>t pÎH*ë¼Ìràñ)ˆ2Ìr÷wȸžN)7s”7µq0+Ê)GëÜ”BC3}7k ÃÛ׳•88åg¨æãœœMsRŠÀg°‚æRo©.â×ÓáöÅtVO@›ŠYõ…ËÉÍ WPOŠåm¬ú¯Vn h'úH ´{ÐK µãµ°NNs£¬“Ó‚:š0O_Ä72Týøy©E<´œ.É(€’Ür+7sÈM.°uµìàtå÷XMN+ñ|ò¬o´&Ò€³gÏ®[·îÀi!¥GðS¼U˜´õý„ä^”Å´¿d-ŸŠBOŽû6äéÄ+çååegg÷îÝ»©2gBˆ¥¥e¯^½ú÷ﯯ¯wñâÅììlåæzAÏö7g(#“Óõ2Bˆ‘•i÷`w'ï`ï>®ew Ï$éª"*¡Hõ@Óí]éð…ªZ#3ÕŒ!¡ˆ¦Š‹SÏ虘h¶ýá©k°ªŠk ¶^_ ª®hÑ$ê©®Z¢Çož¤µrN$u_gB³¤ZU1F5t˜`)Xº!º"rúž-zx4Ë×ü0 †áÔòšÒ.ÂH{Å–òi>/'!'+)_ â£`Ý­ ¦´ÔÂEµ„ÓÈPõšX;Y¦äq—pîŽßoèÿò3ÏN­PXX8mÚ´µk×jgŽ;Ñ©S§žÔ´Vë=®7}àÊ•+W¯^}uéžND&ey<†a‰Hdéhžq+ô E¹) Ôe•ŧŠsË•W«(RÍ Ö«£.M4ilÖP¯™OkõF—¨û>ð¼òâêôØ ;=“†­©´kYÚš($´«“(›lUI@™»7xÓ÷¬ñõŒ!!DS¢Å£ Pÿ.() <õìjCi¼DNIäDÝU•0,­Îº­í±AÀ¢>½0³ÔPÌ€Úòz'ok`ÖÀRääg“z5-ùrº_/Ð3Mü`Œ¦Il38Ž[½zuAAÁ®]»:w]º¾¸!ô¸š>}z||¼³³ók¯½Ö¯_¿¯¿þº™¦ ­$‘HnܸáîîÞbK­¦ûúú†……Y[[ß½{wä{}L, ôxGôôLmÌ”¥]6îVʾívÖÊÖNÊæ[úÆzÕê—¦–B®ÊKiÇUšùD¿áã¬J½hÑÂFUæ•w=×ÕÕJs€H«bÝÀH²®g›ŠMÍõYum;!„¯•!Ý[‰ÅcX"gwO•‘ÒÊgØzUÀDÑ,h–2¬&[& ²†2€ºµ©f©£p @Öí<¡ž@9$YêG“ÕhnÁ«)¨ŽãÏ'û†zFmæìë­pòäɯ¾úêðáÃMm €: [!ô¸RiÓ¦œœœ¨¨¨Ý»w{yy-^¼8--­};+Šë×¯ÛØØ¸¸¸tplÀÅÅ%444°wà´/_RÔ× ÅBHVZ±ê^Œ*\0T÷Ä2Q7ß²°3ž€gag"òL- Í 4M¶(u\ejiH+T1ŠfêP äiæL6p”WXÙ©B í¤ŸÏY½ÜÑÞD äƒVÅ=«ž£¤$ ¦þžÞ=<xurÍeX‰(õñŒT<…ªÙ©BÎËòå ÛWGiÿ~$44,«éJ1 áó€Ç“Iä®>v`moR_]¯ìÁUx·Ä½§ˆD<–æœ|T;-yFÝõJJJZ|äää̘1cóæÍ͉:ƒ-„zìΞ=ûæÍ›GŽ),,ìÓ§ÏË/¿|ìØ±6µ‘dææÍ›†††^^^UF±°°8´ÿÇ?ÍçÇÑ35°õ²00Ðwò²sèn#ñÝý¼z9›Š½{9¹yZ™›‰DŒ\^T¦OؒĬò䜚»ùqfbps3Óñ»Y€‰V“-M(ffm¬‰3XÐúñi–/‘(W/Òò†¬’¦¼=õRjEivÏ-PWëó¥ ¹”Öþ–´FrO«R–Žãi¼€¾&´"„Hbªá%UÔʶGTÐr©‚z©—i^yiµ@$`9cqÚÕÔÂŒ÷@'ÕÈÖ+Ø-56½²¨ª ½È7Ô³ç ß÷wÍ366NJJ:wî\zzºTzoÇU5¹\ñâ‹/NŸÞªÒ.ÔAl!„Ђ¢¨ðððC‡¥¥¥õéÓgΜ9›7o.//oñ\Žã8Žó÷÷ïÜZ{%ÿ~ޛϭ07i¼ºTšr1-+>«ª¨2î߸ÔKÉ·Ï&ݽy÷ö™Ûé×2j+êë«êÀÐL•š²u·–Käe¹åé±éÙ·îf_N6r––úfVªd˜¦ß©±Vm–¤¾¡1©¤VšŸœß½»%híÿõ5ª}J„’KiÐÚQÙ8žÔˉŒ% µê­U4¬IªN¦™%$@Ç)jÖÇ™BV§•«—jv•U–yr%£:QG ¢,¢  31×ÕÇVV'€šÒ:åœiIV‰PH)Órº¢¨ê½ïçtëÖmÀ€ÞÞÞÊ®7nܸ/ÑÅqÜòåËkkk·mÛ¦‹ß5z[!ôD!„899­Zµ*++kåÊ•üñ‡——WTTT\\\SSKÇ%''×ÖÖê®Í·¥½ù¶«+íÝŒD†z’Zx<0u0RHààiWœ]R΀´^³ØPT‰ÄBåaùõ%U•éyÞþv¶Æ•ê©C¡V=OkÅ}EQÜþ/ÑÃǶº¬ö¾ç9Š€X¼ûƒž¦B_{;j­9D „G´šxŠPUV«OBßÓK‚fyêÐM ÙW‘æ4sˆœºõaàñ8–«­Pµc-É)óz¦8zÚÞú/ÑÒÑ¢[/WC3ƒe?-2V¿JEYYY)»rh'º$ üñÇß~ûí¡C‡ RƒH§0ØB¡'“H$zýõ×ÏŸ?êÔ)2dȈ#~úé'¹\~ß‘ÙÙÙEEE½zõ Û´EYÛp—t'iÚ¦±ÏE $_ Ð×+N+SV½c´£—½¤F „"ª/V&ÚºYišAÔVI9}ûT"¯¶Ö»§ƒªF^+ª¯Re°Ä¢Ju)}é\J=£'6Õ(Sbúb ´&û!D¦ Ø†5ƒÊà(ŽpÒ†—‘§½½4ðêïy‘‰ÖÁ ‘Q„’)×QÒŒ\ªŠÒˆ¢!³¥™² )ðí<,³®gÛuSíõ’›œïÑË%éb e–ä&ç/;¼Ð¡»-<@,k'º"""† ²páÂíÛ·ûøø0µ2N8yËÚLhïj¡Ù—Z äU«, cÍYF"3¾rúÌÜÚ8>ôT7•Tim‰HñxUÒ†àKä ¥4…V/Ó:)EkíØËq÷tp`X Ù†YH™X†£T¸Ô4He $œr‘cYœRp·”¡YŽføBHj¥< üx;ù8Å‚.ðîÛ½‘W\ós¨]Ë—/€ššš¥K—®X±¢ººº™³túô騨¨K—.8q‚¦éáÇ×ÕÕµ|Â` !„ž–––‹/NMMŽŽ¾r劯¯ï´iÓ¢££‡ Ò­[7]/þÏÉÉ)((Ðìü±â•9ë'Ée4%˜Ø˜:zÛW«¦öÊÕé˜Z«†$6•ä¨`šU‡ÖNæšÆ§€¼;ùqÀ©rH¶&šiSCí&[&âŒëw}ÀÐH@¨Ýß[+³¥ µ4”ý·VV%åŸÇ)M´*º@"Óžs„z)E¨Â/(B„+PßcÂq   €¬B=Ë©ÎAÊ¥ ðxÅžÁîн—ëËi‰çîTU}|äÝÀÁ~½ä÷ã8n÷îÝ4Mnß¾ýöíÛ÷íÂÔ¢cÇŽEDDøùù(Ã÷k×®µé O- ¶Bè)Âçó_zé¥þùçæÍ›`É’%îîîÿý÷_½V-y§+--MII¹/y6ìõŸþ¶HßX¯ºR"“(|ûyع[‹õ*òTé–ÊJU6ËÆÍZ3u¨ivjfÓÖ©ÓQ?õL²‡·µPO`¤`QÚ“ƒ|.ÉÎłǧ@À¿§šŠG:ž£ªê)­˜‰V°Àq|©BUY¥ùŽDF8Fkq¢T,×°…¢‚P(@ @©×!ÊËjhÍä£Tˆ¥•#ä8ÕÂq”X •t>9pˆouiGo·Ð1ÁëO¬Ù ±E‡þé§ŸmJUUà^Š­„ÁB=u!&&&çÎ[´hѤI“¶mÛæéé¹téÒŒŒŒö5èjFMMM||¼¯¯¯©©é}ßò~Æ#úÚgîþŽ¥y•‰ÒòS <{¹zövñîãnjc,«Ve•¢š’é 5).¾@•Ž")Ì,Q>6²)ç“-Œøú† mâåÒ†I½ºj Ð2š­ª)+ªXNS#E@ÕËÍ€V_~ $@I O°PÊ*~õEÀ! W%—«Ö-2(ªæÝ¸:™Ö¥êF²â 增€RÎu2B Rb3†™ôÑØÅ?̳u³nùwîÜyûí·÷ìÙÓ­[·VžÒ Žã-Z4`ÀÿŽ_íi€ÁB=²²²^z饵k×FEEÅÇÇÿôÓO999AAA¯¾úê‰'ÚÔ «2™ìæÍ›...Mõ£767ÜxzùŒÕDúB=cƒ›ÿ&Þ¾’t1ÙÊΔÇ1Þ}\=z9ó)U\efg¬IqiZ6ظXÈÔÕ親ڬ¼;ùtU½›¥òË*­å‡%ê 3K‹ó+A¹V³x œP&€{žJš­¯)B@¡p¬:ÿD@N]Y§¹°ê½ƒ”±­PÎqÅÐD.N&×´`à¤rV"Eº?ÇŸG!¦VÆÃ§ÚvmMÐð6t"­««{ã7Þ|óͱcǶþ¬fÌ;7..nÿþýrµ§Áãº5B¡Žèׯ_¿~ý”)Š2dÈàÁƒ³³³wìØibbùúë¯?˜Žj=†anܸaffæææÖü‘£æ<Û\ðoìHºœÆ1Œ¡©¸ànQMYmqv©…ƒYmEKw[‘‘­Õv½([•â2µ4.ÌPe¶8¦!U”{'_R/sëáš•RX–¯ª¾7³6ªP>&„é7dñFµ%"aY}š–ª÷ç! žfdYi~51h˜z# †­oÈNñ Ð4ÃѬ2râqÃ0À©f. WQ­™C™ 8`ê$”Pr…ò>áœD ø ÍB8™ŒÂ1Œ\ªè=ÔoéþyAÛ>¸•Y(“µk×vJW­yóæýþûïgΜqtlÕ¦@0³…BH‰âââ²fÍš¬¬¬>úèçŸöôô|ûí·Û1·Èq\||<ŸÏ÷õõmÍg¼¹Ùš–~~òC'Ž#5ê\”µ“¥¬^~7.ûÎùiq­“›¹«Ÿ­©¡f¡"¥Õ«D™Ù—VJª%w¯¦úõqcÔ¥WæÊJ/B@O$Ôª‹¿ç³a¥ê»!_}ýš:`ïIø y«ÕñA@¨•PšÍh À)*µÖî)h ,Ë)hÍ!òê: @ØÊjÀ§¬Ùb‚žõ_þÓ¶FZðý÷ß=ztÿþýïëÁqÜܹsùå—ÿý·ÅiÃ` !„Ð=ÄbñÔ©S/]ºtòäI¹\öÜsÏ9rD¡P´|²š¦ÑEµáƒÆ3Øý«+Ÿ½=þ»-áQ6nÖÉWÒ”ßêÖË57¹ +17ãj†½ƒ¹GO{# }(ÎW5€0·5©RïZmåd¡|ÀÈiYY•O°«òK‘X Œ´¥¤_óÇ‘êú†Úvž2Д+@NB8­*.ÍhÅRÀHpO€ú†&òb!†c ÔUð„®JUòϧ@•ãQÈ@³)Çqb}þ”Æ.;´ õ/£F||ü{ï½·oß>ggçvœ~Ÿ¨¨¨~ø!&&ÆÈȨ°°°°°PÙ%µƒ-„B „ôíÛ÷ûï¿ÏÊÊ1bÄÒ¥KýüüÖ­[WTTÔâ¹÷5zh«¾£‚¢o¬ûø—E润 ŽÕu_+ŠGå§¥\J«É/wñ¶ÔlnhlÙÐÇkøtc9.ñ¿xß>nP_U¯Œ´@¡Õ ‹–«SVÕu„a8­˜‰QV[¯ÊÏÉTõaMKŠ+9­â6¢­/0 O9Ž“UÕB8© u!DzœDª¼ˆ¼ªVy¤¢^@œ»ÛŒ‹ºê—·¿KÞ0vþsm¡ººzÊ”) ,9rd;NPtttUÓª¯ IDATUUxx¸ÚÁƒ;åÊO< ¶B5ÇÚÚúÃ?ÌÈÈØ¼yóÙ³g}||f̘qåÊ•¦æmôн†öX{âÃM>í;*Ⱦ»mfBŽòyÏ`÷ò‚ `V&“–¥—tïé`nkÌp qOeq•æq~j!$ügå`š™\ê\­`5¡Çr|P/QÅRÚÛ *h¨—u®«!ºª«å’C (WÖj¾àè:)ÐŒòUâ1 F®jÁÉåšt'“l]=Ÿâ”Áœò»£ç ûüć¯/çêÕ¾ ”X–;w®££ãŠ+:kDîrå'[!„ZÆçóÇ÷¿ÿý/66ÖÔÔtÔ¨Qaaaûöí»o"©™Fíãâë°tÿÛëO}üÂìg­\¬ º\]PEA}©”ã¸äËi9%fƆ¦ú Ðãköù±÷°©)¯Bˆ¾~I^%€öBK­ Š©®…Z‰ºÞª!A¥Ñ mظš°,™L•ÄRçÀŒ4)11c ¹œã8N®Þ“€«S·4chåJCp²’ Že9š6±4X²oδU:ö²Á®]»ÎŸ?ÃçãJ¸®‡ÁB¡Ö"„øûûGGGçää¼ñÆ7nôòòZ¶lYVVÇq999çÏŸo¦ÑC»˜èÏ\ÿúî„/æ~5](R|8û9Tª{œvr¿~"NQ_ïâæìmÏ©Q4Cƒ@B!Qç‡ôDZÁ‡º‹“ËÙÊš†üš¼WU#Ð*áB8šakÕ“2ãPH«ê€pÀÑ Ç0õš{š‰”UÏŠÅ”{u6ç«ÁFÃväëâ× Í:ôb¶´åB155?~RRRLLLjjj``àøñã_xá…?ÿüSwëÔ!ÏF úòÜ'³¿äæQ”Y„!ÊO/B$µ²„³w¤µ3[ (àñJòª EÇi Û%µZñ9ôøÀÕÔËi,Bˆ2éÅ“JÇÉk%Úcપ5s„P(ˆVê  Ó'QK©×0r4]WZM8I½²§E‘¹›§üpwëÜ}Sž_þòÔÑaaaNNN¹¹¹gΜIJJª©©ië«T^^>eÊ”>ø <<¼­ç"yƒ­VGTMâj2n˜uw3ìœiîü p à@{æâQÇé9zÚU&¥”³-Šj EQÇÿí·ßRRR***.]º´sçζîpÜ&)))Æ6Ÿý¾ô@~tä瓜}W]^ „"<>áñs“ +Kj !|¾ê3ŽBˆ:¢¨†úwB¸ºzIq%!D`©Ð4‘ËhårB­X•JAְƸºzN«.^O@êEˆÇÉ«ëÀ*¯ÀÉåÊ«ÿèÞïDG Ôwã†ïWPPPPPгgOÇçóCBB‚‚‚X–½råÊ•+Wòóó[Ùf–eÙÙ³gûùù-Y²¤³JµPÇ=òÁ“òy_£QßU49Ýw å¾è\ÍÑV¤•§?€-ÏȨ·sµ°C~80BÝÛî6À‹&fÏœmãÐ@·»¾v* /Àwê/}Mº˜¬îÂw—g¼øsPàÁÏŸ\¾¿¬J=,:/wãì??:Ga©êßDž¥‹#—•^ÔþD=BH‰²cÇŠ¢nݺõÎ;ïüðÞžž‹-ºsçN§oþ“““SXXÈçó !/¾5|ë•Ïv%|>rú Sk#BPÏìC³"±j9$_k}¢P¨ÜRšæ+d UsÆie¤@!gÕ -Bˆ²-–ÊŃœ‰\„žlþþþýõ—££ãŒ3bcc=Z]]:jÔ¨?þø£#åGÚÊËËSRRîÛAÙÒÞü­MߥmÞ»êÅÙCž±úÕA¯<ææÕk°wÐÅpµµ²Š«>™R…&ı'“±5µÊ‹¬VWZ*ãêê4m#¤Õõ¬BÁI$Ê©:iuPH¹œÂòÜ{8½2whäÚ kþY| ûG‡æwïíþàh9ŽKLL‹Å-nM133ëÙ³gXX˜¹¹yjjêÙ³gÓÒÒ´—‚GDD¬Zµ*44´/'z¨Úl™¾ñ»„ã8–©Í:ñ¡ÝïÓg~“ÃPNw~ýÒíES7%Ôg~?sæ±Þ›¿ësïtÜÖyŸå½s»¬<íøCóþú_Àf~3ù…5Å£÷\+ª)¹¶5$vÞ¸•—e¢—¸¾6ÄðÅoËYŽ“[äÞÈx›9¦ÙÓ¿#'©—€HOÔä\·€#Àj€«­/°þ` @=@,À\€ÙÀ§ð;Àœøàåð^È8p 7À`2@1À5€€€q²{oÔ艠¾ÑWUo¼ iúî÷ù @À·À¹¶¾kägœ Ø|¥¨âîo²»^‹Ø“Å6õþæöƉSµùðT^EΩå¶Çƪþ­“Á4 e%ì½°ìúý7ä*KbÓxžÞF<€Š”ÊR3Õÿ#‰ƒ™AVešêYH’H¤l!¤öööüqffæçŸ~òäI//¯Y³f]¿~½s‹ …âæÍ›­9žâìcÿâ¬a wE~üÓ‚?-X~pþG?FÅdm]¸+²×P#sMg{E½ 8ÎÜÖÀȈÏÖÖkzCÐ2šc¡ÇF^]ÇÉÊ‘‹ DC&ö á+6‰ÄW?‡©+Æí¹¾êËs+¾<»ü§â_ž[1qé˜!ûû„tofYYYÕÕÕþþþ­/® …nnnýû÷÷óó«­­=þü7._¾,“Éf̘ѷoßùóç·òRÚ¾}»›››žž^PPÐÙ³m­AÍépû "²ì1aÅœ=þŸ©ž9Ùˆùð/öÍ{㇑‰ ‚½e°·Å{€´êÀÒØËÞß½ G€«¯£A_ ™p ú}¶®V | ã,„tN L˜0aüøñ·nÝÚ¾}ûÈ‘#ýüüfΜùòË/‹D¢Ö\eÙøøx}}ýîÝ›‹]Zƒ2hB¿AúMÓ ) ! GæææVäWÝø3I^ƈ Åöf¶îÖÝ{»z¹gÅçܾ’}'?p°_øký M |²)åååéééÁÁÁíØ²biiiii)•JsssÇWYYÉqÜùóçÛ´9’¶ƒ.X°`ûöíýû÷ß¹sçsÏ=wûöíNÙäA2[õ‰ûæ?×ÓÑTOQ<ǨëËK*U³Kú½gÌ.ŒËì9çÝ¡f¾y>ó÷ítûýçBžø|ÄGß_+瘼¬<É¿QN<åt8Ø•_TT¢Ã¥bMÞ‘èé‹A&•5÷9ì  P0`:ÀÑ–îgßô·öôР¢ÊX€‘:¨ÒÈ8 È(¹÷˜FOTÒÔ ( Fé¦ïÞâ˜Û€çìæÌן/6Ôèéé‹ ºuëæíímh¥ÿܼAÃÞ yyų¯:vÜ‚ç{†ùêèùôí>nÑ wEžÚñaH¥Òøøx///“-•ÒÓÓóððøüóÏ »wïÞ³gÏÉ“'·oQÂÆg̘ñæ›oúøølÚ´ÉÉÉ)::º#cCÚÚl±»ÞŠ:íùÙÉ”2 Í2Ù[Új=:mϬåÉC#ŸM_=ooFcÕÇbϱ˿ýçÂÕKo–µbäìCåÏÖÁÖðùoŠÙ†]ت}£EÊU -½uš9¦Éo5}G=33q]eu«ê¦ Þð¸@xš)þÊÖåM2¢>(`¶ªc;@î½Ûpê?,Àè{iôĶÞýA¤Ýi &û®º"‹ÉÉÌá¬í¬¡‰÷eckU“•U®îF˜“™«ú5´b‘«)ûzî_ß][}üÔÿ¿4ó4µ,ªH*W’—TQçbê¡ü$[]YÍ73×Uƒ„PcÌÌÌ” ÷îݛУG×_ýÌ™3V|@nnnAArù¡NVWWwûömÿ¾}û†„„ðx¼k×®]¾|9//¯•mZ‰eÙ¸¸8KKËVN‰6/??Ö¬YK–,¹xñbbbâÈ‘#Û Êåòk×® >\óÌðáÃ/\¸Ðñá!¥v[œ¬^ ô …tqìÞ¶\PÇ’kk¦|;å»ï£¿Û;>}ñ_ÜR–5Éÿ‰´ØUÄüäÇ?øá|Z™”f9Š€¬¶V<ßɳCcWÍÙzún•\Z~÷êÏ«&½ÿk efiNî&$V7“äj昦¿Õä˜:Ø K ËšúË•0àµß¤ð|öÔä|¬UêÞ  ` ˆØ¢~Þ ?À[éջ޸„̸ ¸ 0 ྎwžØÖ»ß‡0Hh¦4žI^¢ïûAl#?2°séÖKERiñ•íK¶g ˜8Ú‰4ñþáû¾2Á÷Ò‹H¬×çüûÙ²ï³UwÁÞ2à¸þ(àÓÞ\eñÖÙ§™ìÙè驵L‰ßÃm¬[é·›²îÖ0UwÒ¿Œ© çêÎઠ‹9[{K\ÐÃÇãñžþù?ÿü311ÑÍÍmÒ¤I!!!»wï®­­Õ>¬¼¼<99¹gÏžÜf±EÊš0GGGeËuCCCŸ°°0{{û¬¬¬3gΤ¤¤Ô×·vÅNóRRRX–õööîx†L¡PDDD ><22<<<¦L™ÒŽë”––2 ccc£yÆÆÆ¦°°°ƒÃCí ¶xÞ³Ö/µûs|w#û~óÏù=×WÀUœ\ÇO¹ùó秦¦=zôÆ];–eÏ;·mÛ¶_ýuàÀ)))/¾øâúõëu}ß´´´Â ¹ÿÞÉd²¼¼¼ÜÜ\Bˆ£££ƒƒC[kÛkkk¯\¹Ò³gÏNéƒõ×_MŸ>ýâÅ‹þþþ¼”\.×××?|øðرc•ÏÌŸ?ÿæÍ›§OŸîð0Ÿp•••Ͱà§âäSû±©iã¶Á#Ã1Òj5~Ÿ5±'î´iz.¡Ïa¤…žrG=~üøCˆfZ‰¢¨°°°¤¤¤deeÕ××;vlóæÍåå庻iQQQvvv```ó‘ˆD"ww÷xyy•——Ÿ={6>>^¹ °57R(·nÝrqqé”H+33sÖ¬YÛ¶mëx¤B¡0((èÄ M£H8qâöëêDѧ#0iëû ɽ(‹iÉZ>!„Ð=ŠŠŠ"##÷íÛ§ër¨¶"„lݺ•Ïç'%%­Zµê¯¿þòôôŒŠŠºuëV§oþS[[›˜˜èççghhØÊS(в¶¶ êÛ·¯P(¼qãÆ¥K—rss›ï’¯é_êîÞHwÓ¶’ÉdS§N7n\û*´µhÑ¢={ö|óÍ7III .ÌÎΞ={vg]=N+>^Ù^«#CåñxŽŽŽ!!!½zõ¢iúòåËî]X^^~÷îÝ€€€N‰9sèСû6ˆì¸9sædffÊd²k×®………uîÅŸrl!„ÐhîܹIMð÷÷ÿ÷ß/]º$‰ø|¾2¬ ž:ujWº9ï¿ÿ~jjêÎ;¯]»æçç7uêÔóçÏ7Õ «yÊÛ´UN3!¦¦¦þþþ477OII9wî\zzºL&“J¥qqq^^^ÆÆÆ¿QjjjTTÔîÝ»===;~5ôПollloß ;rÔ××O™2eêÔ©¯¼òJǯ†&Ìl!„ÐSÇÙÙÙ_M™#éÖ­›£c£û|=Š!^^^[¶lÉÉÉ™={vtt´§§ç’%KÒÓÓ[œ[¬©©QvŠo}pÖŽáYYYõîÝ[Ù"µªªêâÅ‹999ÍÑ7ã¸÷ß_,ñÅØ뱃ÁB¡Ç•‘‘Ñœ9sâââ~ùå—¼¼¼àààW^yåøñãMm°#—ËoÞ¼éêêjee¥ë±”––†„„„……¹ººæççŸ9s&))©¦¦=ˆbbb~ûí·ƒ¶r÷nôHÁiD„zª¹ººvzK…‡Œ¢¨Áƒ‡‡‡çääìØ±cæÌ™ÆÆÆ‘‘‘S¦LÑn~˲l||¼±±±›››®‡TSS“””Ô³gOe»½½½½½}UUUnnî•+WŒœœ¬­­[ÙùýöíÛ‹-Љ‰quuÕí¸‘n`f !„PûeffΘ1ÃÍÍM,wëÖíã?–Ëå]2Bˆ³³óêÕ«³³³—/_~äÈOOÏyóæ%$$(£É‹/Êd2???]OÃ5Õ¿ÔÄÄÄÏÏ/,,ÌÚÚ:--íìÙ³Ê:ýæ¯VSSóúë¯GEE½øâ‹º5Ò!Ìl!„j¿;wî°,»sçN„„„ÈÈȺºº®íJ¯§§÷ÆoL™2åÊ•+Û·o4hPŸ>}zôèqèС›7oòùºýàSö/500hª©@ pqqqvv.++ËÍÍ=þ¼¥¥¥“““¹¹ùƒQ ˲o¿ý¶Í§Ÿ~Š¥Z/Ìl!„j¿‘#GîÝ»wøðáîîî£G~÷Ýwùå—®!$$$ä»ï¾ËÎÎö÷÷ß±c‡££ãÎ;‹ŠŠtz_eÿÒ›JB,--û÷ïohháÂ…¬¬,…B¡}ØÞ½{O:Óé 'ÑÄÁB¡NSUUennÞÕ£¸˲üñÇgŸ}¶lÙ²óçÏûøøLŸ>ýòåËíkÐÕ¼²²2eÿÒÖÇFb±ØÃÃ#,,ÌÝݽ¸¸øÌ™3‰‰‰pãÆ%K–üøãØ£3ÛûtÂiD„B#==}ëÖ­6lèêÜ£°°ðå—_^¼x1!dìØ±IIIÛ¶m{饗<<ÊÌÌìà’L–eãâ⬭­;˜…222òõõýä“OòóówìØ±dÉ’üüüŽ\áÙÞ§[!„šÓüÎ?Êcòóóܯ_¿]»vuíh[ÉÄÄdÞ¼y‰‰‰ÌÈÈèÕ«×k¯½öï¿ÿ¶{n199™eY//¯NÞ’’’RSS>œ‘‘QRRÒ)—Õxg{Ÿl8ˆB¨9Íïüyyyƒ Ú»wo+G="(Š6lØÐ¡C333wìØaaa1sæÌÉ“'·i*0??¿¨¨($$„Çãu|T—.]Z¹rå±cÇllllllÜñkj{4g{ŸlÓß „Bšüüüððp''§õë×—””võ Ú†âææ¶nݺììì%K–8pÀÓÓsáÂ…III­™[¬©©¹sçN=:¥ö«´´têÔ©+V¬8p`›N|Üg{Ÿl˜ÙB!Ô~ÇOKKKKKÓÞZñ1mI¯¯¯?mÚ´ˆˆˆ‹/nß¾½ÿþýúõ›5kÖóÏ?ßTw.eÿRWWW ‹Ž€a˜ÈÈÈÞ½{¿óÎ;m=wîܹ¯½öZ£ßÒôìf{Ÿl!„j¿ˆˆˆˆˆˆ®Eg"„„†††††®_¿~÷îÝï½÷Þûï¿ÿæ›oN:õ¾9ŽKHH000è”ý8ŽÛ°aCjjjlll;fcŸàÙÞ'¾Ü!„ºØöíÛÝÜÜôôô‚‚‚Ξ=ÛÕÃQ±µµ]¶lYFFƆ þý÷_ooïÈÈÈØØXMÞ.33³®®®Åþ¥­töìÙ/¾øâÀº(]f{kl!”lÆrÔIDAT„êJ\°`Á‡~xãÆ>÷ÜsÙÙÙ]=¨àÕW_ýï¿ÿ®\¹bddôüóχ‡‡ÿøã‡ž;wn›ú—6£°°0""bݺuÏ<óLǯö ålï¿ÿþëèèh§ÖÁkr7lذ#Fh?¹}ûv“Gê7ø(è@°%MØ9±§•˜'ìµ2žé¼!„zšlܸqÆŒo¾ù¦Ï¦M›œœœ¢££»zP÷#„ôèÑcÇŽ999“&MZ½zõìÙ³­­­+++;^ FÓô´iÓÂÃÃçÌ™Ó)£}PDD÷€^“²wïÞË—/ïܹSùÌÝ»w/^¼yófggçù‰Òî`‹+ûyù·Ÿû­P!¿±¼ÉØ8À蹯KË’H„B]D.—_»vmøðášg†~áÂ….RóÌÌÌæÌ™cii^WW׳gÏI“&>}ºÝ º8Žûì³Ï wíÚõØ•R999mÞ¼ùÝwß½{÷.Çq3fÌ:tèVÃ×)Ú] ϤÅÝæõ~3Ø„ Ü«YÔyÃB!ô4(--eÆÆÆFóŒÍ#^NCùõ×_…BazzzttôäÉ“mmmgΜ9qâD##£6]íøñãÛ·o?wî\;6ùyL:õÈ‘#Ó¦M7n\BBBBBBWèQÔþÌ–¤^*ÔvæXB=•´ Ì9Žë”zs݉ˆˆ8yò¤H$"„xxxlذ!''gáÂ…ß~û­§§ç»ï¾›œœÜÊIºœœœÈÈÈM›6èzغ³k×®Û·o/X°`çÎÖÖÖ]=œGQû‚­ÊïGþ*+odz""ð_vfï™F”gü¼h¨‡™žØÔµÿŒOf=c4lG>N0"„ºŸ¥¥%ÇÓNek'ºA„û²P‘‘‘ׯ_ÿóÏ?ËËËûöíûÒK/ýùçŸ4M7s¹\>uêÔQ£FMŸ>]ÇCÖ-kkë™3gúøøŒ;¶«Çòˆj_°eúÆïÕÿÍuv˜}BÆ)>í}Ïd$°þµé9­8[P™wöS§ÿ_StÊPB=i„BaPPЉ'4Ïœ8q"44´ ‡ÔnE 8pÿþýýû÷_°`A@@À—_~YVVöàÁÇ-[¶¬®®î«¯¾zÄ3y­Áçó›êûŠ@­èÄŸÞ }oÝd3‘Ó>}Ãù1+øC!ôð,Z´hÏž=ß|óMRRÒÂ… ³³³gÏžÝÕƒj?BˆƒƒÃ'Ÿ|’™™¹zõêcÇŽyyy½õÖ[7oÞÔž[üã?¾ÿþûC‡táhÑÃÑùq[\Xjèäl¦ŠÓùޮް/'B¡'Ó„ 6mÚ´råÊÀÀÀ3gÎüý÷ß...]=¨N  'NœxæÌ™sçÎ ‚gŸ}vذa”Édéééo½õÖŽ;|||ºz˜èaèü`‹²¶µ¬ÍÉ©PÅïtnf.váB!Ô´9sædffÊd²k×®………uõp:!¤wïÞ{öìÉÎÎ~ùå—W­Zåíí=|øðñãÇ7µ•!zòt~°Å÷7ÞëüKbnWÊësÿ[»|_v;› „BO ‹÷Þ{/%%eýúõÆÆÆ_~ùåPª¥±bÅŠ›7ovõ(]:(§â÷xwÿž™ËúÙÛø(sÀ˜@Pˆ="BéÞš5kúôécdddmm=f̘äää®Ñ=x<Þ”)S’““õõõ;ñ²2™,00‚Ï£©ÝÁ– |kVnô0UE¹/:Wst†•2JyŒßü_F•LZ™y~[˜ ÄØÉɸɉßB=²NŸ>uéÒ¥'NÐ4=|øðººº®”νÿþûööö]= Ô$],Ôd º“Œž9ÒGœ{tåx/ýŠ™-„BºwìØ1Íã½{÷Z[[?yu`÷9zôèñãÇþùç£GvõXPãtlQ6áC æÏ0óV±ë3vÝÏk‡àÂV„BYUU˜››wõ@t¨¨¨(22ò×_íÜyIÔ¹tÒ‚Œ²ø^ÌÅ÷tqi„B¨8Ž[´hÑ€üýý»z,ºÂq\DDÄìÙ³ƒƒƒ333»z8¨IØo!„Ðhîܹqqqû÷ïïêtÈŠ+Hbcc·nÝZ]]½téÒ®&j6×G!ô¤™7oÞï¿ÿ~æÌGGÇ®K‡Ì;·©v\®®®«V­ºté’H$Ò<µ?û£3[!„PËÖ¬YCY°`AW=~0ØB!„ZpõêÕ]»võìÙ³«‚Kl!„BÍ©­­>^óå´iÓ¼½½/^Œ‘j ¶B¡Æùûûk¾400°°°Ð~¡ÖÀÕˆ!„B:„ÁB¡NÆ0Lhhè¸qã4ÏTUU999}ôÑG]8ªŽ;uêÔ¦M›ºzèñƒÁB¡NÆãñ¾ûî»cÇŽýøãÊgæÍ›gnn¾|ùò®B]k¶Bu¾îÝ»¯Y³fÞ¼yƒ¾zõê®\¹" »z\u ¶BéļyóŽ9òÆoÄÇÇ/_¾<00°«G„P×À` !„NB¢££}||zôè±dÉ’®B]k¶BéÊ7ß|£¯¯÷îÝÜÜÜ® B]ƒ-„B:qñâÅ/¿üò·ß~ëׯߌ38Žëê!Ô50ØB!Ôù$ÉÔ©SgÍš5lذ={ö\½zuçÎ]=(„º[!„:ß’%KX–]·n8;;oذá½÷ÞËÌÌìêq!Ô0ØB!ÔÉNŸ>½mÛ¶o¿ýÖÀÀ@ùLdddhh(N&¢§®FD!ÔÉ DÓô}OþóÏ?]2„ºf¶B!„tƒ-„B!Â` !„BH‡0ØB!„Ò! ¶B!„tƒ-„B!Â` !„BH‡0ØB!„Ò! ¶B!„tƒ-„B!Â` !„BH‡0ØB!„Ò! ¶B!„tƒ-„B!Â` !„BH‡0ØB!„Ò! ¶B!„tƒ-„B!Â` !„BH‡0ØB!„Ò! ¶B!„tƒ-„B!Â` !„BH‡0ØB!„Ò! ¶B!„tƒ-„B!Â` !„BH‡0ØB!„Ò! ¶B!„tƒ-„B!Â` !„BH‡0ØB!„Ò! ¶B!„tƒ-„B!Â` !„BH‡0ØB!„Ò! ¶B!„tƒ-„B!Â` !„BH‡0ØB!„Ò! ¶B!„tƒ-„B!Â` !„BH‡0ØB!„Ò! ¶B!„tƒ-„B!â·þÐþùGwã@!„z"µ6Ø Ñé8B¨M*++»z!Ô*8ˆB!¤Cl!„Bé[!„B:„ÁB!„a°…B!¤Cmhý€B5/--­¦¦¦¬¬¬«¢C&&&îîî~_¯N&Þ)¬ºš^ôGõ0õéfãgoöÖŸVÁB¡Î‘––F ïêèÜõë×ÓÓÓ»uëvßóø l=™(eà»9#»dTÓ²C¶ýïvÔPßÖŒÁB¡ÎQSS3hÐ Žãºz :׫W¯Ó§O?ø<¾ÉU{ßÁ²Oþ+ðÉ+ý¦E·¶Ù;[!„:GYYÙÓg(5:Qˆ¯ÀÕŒ¢§ç¸šÑÚ©R ¶Bu}ÐÒ4={N¤‘‰!¨¯ÏHêe;·ïÖÅí:¢ÅW€c˜?'N¼säÈ}Ï» òòŸRΆöp~0 óÓ¯1¹ùYÕµÙÙ9{£uÖØ:!¤õc°…BèQ———çäfoæpÏgÖÕ3I]5žvãæ )) Ö®%<(ã†áhú|L̯cÆŒù{w×Ô‘|ÞËA•&¯EÄE­QÄ EÀ±"x q+jËÐztµUëÑz­vÝêvµV«" ‚¢X¥²V¬TjP¹!ÜWî÷fÿ r5! èç÷ý¼šÉ̼™_È'?'ó/’Ì7û£c¬e²õ¯Ã{,™˜ â5<«ð[õ,•½Ù¯(€¾¦'>1ƵíVÛõ.ë|U££QaŠŠõñáde9ûú_»&kñ5ÛÀ`œ‡Ç혘‹^^žQQ½œoÑ9§ÙßðÏŒ 0éhžD€Ö.Ùzœþ;W¥D¥B©“Æ;ÓÝû*Ó9‡¦;$.͈^f¬ÁÚTµ…d @·Ñ~U£%™L}~ñ¢%c™L^Y)~åY©¢®ytZ©¼´`77wНoéÏ?ËZ>+W(J““fͺ·`ÁœˆÕºWïÀiñRjù3{9òÝ1ÃêªSSÒÖ~´½û_bürzÝÜsÇদº î>R©ôÃUË.%D‹D"U²UUYÝòÉdMu•¢äÃAc›ò Þ1³vòÙx:­FµÀB—Ÿðä[z[®zTûðÛùVfãׯ)µž¦ˆóöÖÍÏŸ²hQIb¢ÂÄ„uø09z´ª cäH~XaeUúàÁÄ3t=º´xqS;ªüÞñu>mÌ| Û©K¿ŒJ¯£µ¼šóûóíF€FtWk7â- ˪‹JDŶCÇ MÍ_­@=Ùí$Ð.8%¢´8 Æã®7oì„Öà}É€>G&“­X0}ÎD‚MaŒE"QeeE]µ¤å¡+Báò+Á.ž_LÙyåIIyajÄëÜfï¼ßðjŸtÙÏ[æÌÚ#Yy1~ïLó×½n”0ÕÏ¯äÆ ye%1aahÈØ°´³cØÚîØ¡cl¬ëæ&«¯‘–6qæÌçqqS»2mæÎŒ‘¡§ïf—Uÿ÷õÖåðë5¯yð¡1îÚ!•ˤޖ’õ²ªŒ'y‹|ZבÝ?S=ÛwLJعª‹g¡±ê;é®7o>Ô $[ºM·,ªÈd²€K]<œj$"S3〕K¶ìÚ ÃC:\V˃R-NÉîí_Šñáɰµ®Ö–®p”×—gÿ=³ðÀÆãÏ©ÆLK³Î­t]|aОk‘kÇðºaœšF€ „±¼ª !D?N%&²¸\½/¾0ܹ“­¯/KL¬Ø·FHZ_)ŠPõ#»·ÝIrÅ©3›çÙY²™:üAó7Û>—‡qUøüw8—«/ðÞ¼Ï/(0Æ+Ów7r_ÿÏ@gk!'´q_W¨Š]uï?Íe)à÷>=èä£:cLW¥ýØ}d!ßbÔìOÏ?•¼œ]—# ^tE¢’GkYr>:ÜÒÚ¨V\õ,#Û×+Éd¶jRóÄEÀ {Öz‡Ÿy¤h,UfìŸd2gýžÀÉC-¬¼¿N,¡:)9;ªèû9ƒ&îz¬lîiï43—o³(µ&ÐÎ&ÂA² Û¨õ)Õ)™Læçïë|X¶kEÓ4B4BX©TõÓ45{n;ýñ|ÏWŠÅâ†ú²ÌËë…—V~t² 1G@òäË¿;ø%§$ëò Fø';nˆ1¦²}ðþWy“ö%ffÄoó‹S¹'–½¿W4ûpr®(?y¿Cjè¢]÷¤ÃírÔYЉ;w&ú»ÓÑßfåùƒ‘%W.—g>Ê XÓ¶ Uùc†Ûßæ˜ LZû­öSØšæ‘0m–o[9V¨Ã1±_¹}ùÀäó— ¨ËjZ~C<×¥ópLØõZŒq}bXDµ‹ß\µŠÕ_ÀÕˆú š¦1 Šr:©“v/ccÈ“'MQ=$ùÆTVZN£þ-–”e¥•„‘1ŸD!Rèwx/cÿ‡ž qä™`{m.ø×¦(Õ?È# vì`Hå …‘·÷C‡²CBÊââ¤%%ØÐ°±šÀD€Ê[O­‘8ýÌ–ÏÄÜ}^Z'§0Fì ³ªiÄC!‚'xGÕ€`é°‘RIaª¤¨”=ø/¯ôCçK’B­ B›‹ƒEåšlünwš4úÓ_×ch`B)*” šgÆ8úÿÆÚO$udÅ¢ÒºÚ†IöžFa›¨Ì3aÉÏÒ’Ì›ncK(b·¹ù cDZXö'iL#„ˆþ–¨¼¤LIëuP.P-ÜÑ4&ÇÁÏ×ÄóD\‰»kÒÉx†çQC5׬Mnþ+[ººk Âq¬S棩DÖî‘zçÉš?›:Õ¥¹ 9tÚ4‹œØóÄ/»¡+"®KFOŸ,h¼ÎŸìçúUlD€xßûóvÞ®ì–kùºª°Õ×SÕÕ:ãÆéHËwî,Ù¾½:2’ÔÑá¾û®´¸MQª~H«i.ý³ã¢RÄm»Ê>þIÈ-«-—ÒòËkêj3öObQtÓ׈¯lšR="…æýäÙÏ‹^ÙDšš õÜäÖÕ7«{ql«®Öë4›5ë8§B!W’$ù$ïרØS t¹\¦¬,’ûÌ[ÚNé½Ïãऊ’ŠÕ‘åùãùÜÆ ÑEy…{¸”ù…ØHhLtRÞb” ›%~#=}6)2,ÑÄ{‰#«Oý÷$[ºŸTüp•»óœ¬Ì<™\ÖòʤR2CV¯ssu¥Ëá“]‹G–ýóZf…DÞP’va‹oðeó Ë“¬cÄŸ°)::˜}Ìgî¦ë¥êm°œ<ù×›7ÍÇ#jk+‚ƒEAA‹7¤¥5dddøùe< "˜Ì!66yeel>cŒYc‚¿ö£þëï÷Uìâ:¹BZ•{?zïÊÏc«i™XJ³tôtuY QÊ©­‡ï*šr¬Öc@aLZûø;>ý&xïõìImÞB¿J“ÃþÍ1uwÈ‘[¹52IeÝ›âêpÓÞï.F@ÝNfý,û ÑÕ1¤(Zha¤'TJ¤’¢¼RÿÅ'H²mýÚ¤°‹ô”)CÍ%,ûéOOŸ{¬ 1ÆH™qbë±û¥©(åû-?äßÝuVŽps焹çÒ©YÿüæÁ0Ÿ…ï2àjD}_×ó—&«?vwž›—U¨ eÏ3r«Šäâ2$­`lúôËî³hºÕÊ2™yðjdðæfÛþÂö ÷eŒþ2>æºÍ5ÿ2°=³Ù$òϵ—š<º¤ ˜Y߽֯”ó©SY<^ÍÙ³4E©vÄÓ¿8y’`0ÛØ×Õ=É$%©Îcä¶?!vÝßöú:šZÚÍÝœÀôZæbH رVxuéh ³¡ÓÖ'Û¸:°^ž·åšþM Z~üü§‰kœ­Øzl{hç1^ýG­1½ºÆÅÚ|€çº J¯eSõZw¡iÔŒ¡—eqMÑ4EQ%—ÉÍøÖv£Æ¶S•.Kǧٶ¼<‘;ÞylAdx²#ŒXãæŽMÛ8eÄà~Ç©…ß}ëkIàËU¹äË©ðÜü=8bG¿yC4ÛÓ§þ›‚p\²u˜óâƒÞ¦ê·Úº~ýúÌ™3iZ«M?EÉår©Tzø»C·R®ÉeŠŸ466&I’Á`°X,‡ÃápØl6«÷~g3I’W®\™>}z«òÎ#@Éåñ>>üü|‡áÃónÝ’ÔÔ4&[‘,Ö ›¼ªªÇ$éõÓOzff=? ­tqÛ.ÜÜìE©÷3‘[œZ-)Cå?/Ù½õ¤€o¬ñP¨§‡f¸<\™þ½·¾ZåmÕ_[ë´º~ëýÿx Ô߇ŠIçÑw·Ìë¼ZH¤(óæØ  Ûhú?þ¶TÉ–X,ö]øX"¹’H$$I2™LŠ¢Tý«vÏ 5×É;‰ÉbÍŒˆˆ÷ñùõ?ÆO˜@P­Tb¥Rõç“¢¢g\®wBÇÈH˾GàO7È#„(Šrqž³kORAI>“Éòt÷‡g¤NÃÖïRÚæ¤•·®øé©Ã :ó¿sçkôÕ IÀÕˆzƒöÉ“ÉÔ××çr¹J¥rÃÚÏ‚?¥(Š Õ]X,“Éd0AôbFÒµd 5å[W,øo||«§LFŽôº|™mhØ÷3-¤EšëH¥R©D´òs›¥§§Çb±»8ñæmymnfÖ~yKò„5#ýã¹£—ì_;Ž£Ùù5ª É€¾E•Z©®ôõÿì; 7 ƒÍöˆ‰éíQô 57s¸\—Û²UÏG]}5·:*o‰å¶/ãÅ>„ê<)k‡F†d @·Ñ~eë åºÎ["+[zŸÏ§iš -÷È÷q$IÒ4ÍçóÛ>°h¬¤i‚ ÔÜ#ÿ†b¤’¦íª»’-݃Çã=yòdøðáÑ[7ihšNOOçñxmŸ‚Œ°¸’2cƒA ü–À4M¸úû(Kš- ÙÐ=¬¬¬ž={–ššZUUÕÛcéA|>ŸÇãYYYµ} "äjû͵?6EÜý-¯üõìµ±h<ÊRð‘‹­šõ!ÙÐm†ÚÛCèe`·½=„>î Ѓ ÙèAlô H¶z$[=’-€É@‚d  A²Ѓ ÙèA¿®'$RÔ»ãx+1B™7Ïôö0ÞNÿ¦ÒEø 9 IEND®B`‚pyspread-1.99.0.1/share/doc/images/screenshot_csv_export.png0000644000175000017500000005704613604422301023676 0ustar andreasandreas‰PNG  IHDRk·d:…z pHYsÄÄ•+ IDATxœìÝw@çð÷6ÈLÙKp†bmW·uÔ½ªÕºÚ_‡»Öª-¶Z­£Vk­ µŽjUT¬V¥‚UK)Ùa( +¹÷÷G&N ¾Ÿ?4ÏñÞ½IŽ'wïå=fÏž=?„¥¨³ŸV½ÃxO\Mqó™ êdZ†'a‡ !¤¢|Jrã+~ÄJ CêrX!B„"l©!ßÔÉÍg“°ÃÒÅâiù¤/ÿ¥Lº´Aˆ!B„Õ'çÄk˜9é1(!„Ré CdUVÚTyX—6"Dˆ¡š…R(!„RB*j­¬¤¾R–B¦b5J¤+!Dˆ!B„* !”T+RUÃZ×e)!”ð–!< eÊc˜šÕ°ªÊcÐÊV¶­½ -Gˆ!B„U*oSëº CHG{Ó 7ÛYšèkkòKË%yE'nÆ3sHOW ¦â«¶&ßÞÜðƒ {ÿeíùýXLeU÷e­<‹K©ìŸŠó¼ß/èK˜³íÊf•‡¬ªQÈZµênÙÅR×X“)+)ÍÎÎ ¹˜SF4Œ…Ãß²ëi¥g¨AËËÅÏŸ?»x1úF¾¶ïÏqÖLê_÷>ÿ«ˆ¥„ʳp\5ÊÖ\’{ð§¨?‹Uþ!D¨î¡ò6²*'§!„PòÁHö¶¦ä Ãx¸Zèéxl ù‹Pž¬užì–V¶YY¨\E3Š¡º…ŒÀ­ýÿF¸ô”^¿¹t÷õgã yú„RžÁСíÚ²·Î†¿¿óöš_ÿûCDµù”Ð’¿Ÿ<+'Œ•‹Ð†‘nŠ8¸„öÞ6ú†|INFöï7âneS·Ÿ êf'm:žðÔÐæƒq.íhÞÑ£ÿ\-09»sOM"ÅŠËžÆ&þt--¹\º)³€>v½lõøl~vîð¸‹I¥žÙŒª«<ϼSnþ†Cˆ†wà[Þ„&üy÷ËÈbVÕÏ3B„ ÊY¸û}ŸÙ߆UK¹ëRÂt·—6éêhþ >s÷9:+ óžsQÿ$föí*ûÑ Ç»ÑéLåa'!„¾MWC—ò‚lBa˜ŠsÉTö˜Ô-GˆPMB [»I 4$y¿_KO‘Tÿ)ßÀ½»ÀBK¿K;c+C-} úüyi1KChy ±°r7Ó2*Ë K.å[Û¾ÓÍP§Xtêzfû²#FÛtÂèÎ~æâÛçï}Yêìá0¸½^ztV\Ƴ\sO;c;Z¢ÓÕùMcÉ¿DM*§<=sk>Í~ôhý‰¸'z:ZtÔzv#±„Õ6}gLçæâÛçïmÿëEÛnö:™ò’Ó¿­’ód㱨Ã÷D÷ÿÉ.··êh ¹}æÆÚ‹‰7ÒÊi3xž"lè°æÂ=‹|!½ÎÜITR¼ÂŒïßAƒÏ#„tsä”GĦ¥dý“”õFÛ \ù<!DO[ó\x!²³Àšm„9‰QÕÊ)¥”Jÿ!dÏû>{ùìYä# )¥{ùìYä»ç}B^6£”"D¨N¡¶®¦!¤¼¼P\ó§ì‹¬ßïS¢mdÜ«‡Ó”÷ ïvhΣ”RþðINeÎBGÏÕU`ÂÐgñʪu¤ãhåmÄH2Ò.'•æ¦ßL=3m–F^¹SÀsèÕa” ¿0!öç¨éJ„¶8òŸììÒ’‡QÙY,#hgî§:ŽV½ 6;ãjRIa~æµÿJ(_ïÍNÆ|Ù*/îDf¤Ëz—m¦Y=Ï6lXc¡´|JI+Z×ÒL_G‹Ï0„aˆ¶&ÒÀöou¶û;6­»“å¤íµ5e?ÒÑÒ°4m#]·¯r¿¢”’*ÉÌÜzMú£½‹|)¥{ùJÙ[¯IS­È™ D¨NaÉ‹ò2Bˆ¦¦>ÿÕŸŠŸÜŒüôHÔ‘»éÿd••¢a`:ÌÓL—RJiqbæƒbÊ3zÙšx9i1´ôÞ“¼²j‘6úZ„hX·Ûø¾ïžEý´×`cÒF‹G [$ºüo% CK#ÿα²~ !„–?A ¥´¸¬ˆFK« O¶)Z\VÈJiá‹rJ=}-éNË ‹«ü‚•å³Ù<Ï6lXuáž—ëjEõU´nº¨ ¤L"]VZ.Ù}öáíS:Ú›ÿýt÷Ù‡%eé%eâtÑ3麔Ò”PJaIÅf agËúÞ»¸¿ôÁŒà«²Ø*Í"T§°Ë Oe«¯K JÅ„ˆ“Ÿ,ÝzeFðÕ™ÁWgl½úÑÏ$„eŒ¬Fw×gÄl9£óÆ›¶vüŠ~ !ŒfB(!:šú ¡e¥ÏIJM1ºš K)1ÐÕd}QTZRq‘Cµ_ð¥æò<#Dذa彋eåsÆÖ+”’™[¯T2_¹ë²”MHwš_BŸD%f9¶5^Ôã­.öQ‰Y?œ"„BžŠžSYù%•ûTE%”ÊRÂYmf)!”N¾R¹çÍøúJåòÍ"T›g…ÜåQ-¯~ü¬u´ù|c¡é€þÎ=t(Õ±œ2µ¿ss]>_KK Ï'„}ú4¿@¶®äItV.e uõš“/®ÙQQBêg”omí狼Í×057óëß%Àš°Œþ?çŽÚâÂîí{Rªaá0µ§¡¬0Bxºž]¦ÚZ]:››ó¨(&3NL‹SßSžÐÒ×N[ßHèÓN‡‘ÝŒÊ+«Ø·¥+XJ[^TJ)á·Ñ$ÍæyFˆ°aÃÊ…Óƒ¯ÌøúÊôà+•m¤áôà+ò×%ÌÅ» „çEew£Ÿº·³z¤»¶&oÒÀöì„Q‰™ÒÝé÷»ñ„ò¤ëR"ÛÍ*®$zžÅT–J†È®yg¡äôøá½¦Zc9B„jÒYYwSÅÚÆÆ½=œFö¶÷q56“üý8OD5í\,ût²ÜÓqDO›ÚÅÿ>ˆÙÿW^•­Ë¾›¶·rÑa[xõZüãbZ³#ñ‹G‰EL#O§ žVÝ,4óã¯Æ— =ºÌî¢[š³ýìØÔRËöí5SÒþ-Òóô²°á3úæ½ì¼ÌèÓ˜¸½a™"–ò_h÷ôtÑÃLÿ™èòÕGg“ËYFßÓˆ)‰z–PB !„‘ä½Ðp²nãÚÞa„·­ifòý<Ú žg„2TÞFÙº„¤å¸ÙšY™µéÛÕ¶wGK>Ÿ!”ðyŒg{˾]lµ5ù’EGÃ1„!„0”0„hšç$F1ÞW»ùL(xú!„¡ !Döe¤[¯RË"DØ(¡†ùÜù]{ñò<O›KV6¿QÚFIñ’V= >™ãïîÕފǪXJ"ž¤ï:O\V13 ¡„66]^ÞÝŒP*[Le¹T<&Õ—mˆ²f"l°rnÊRåû&B„­;¤…T~¢¸xB(#¦tÇ™ÈΓÇôë`if £É/)—dä û7*1‡©\‘ŠXBªÌê'ý§bc´òqµ!ò—#Dˆ°‘BÙ²EÍ%+„›[¨¼Òâ%[ÂRú0>럄,–°<Êc–¡²#ÒŠ¦”T+ ¯Ü”B*æNx5”%R5¬hC¡!B„ J2wn½¸Såi DØìC…EªnëÒŠR"…žyy¨ª`Ýš³úIÎVÙZCZÿU"Dˆ!ÂÊT­¨ˆ”†¡´!‡U"Dˆ!ÂV¯ ²% !”R¦âú…ÚC« Dˆ!B„-9¬ « û—&P‹C²©~£¨#TP.PA¸@à€ TP.PA¸@à€ TP.PA¸@à€ TP.PA¸¨s¥9?±4111115³´ïìûî¦+é’ÆÌ¬N$±ß ´8ŸÖÞ !Õë”g7ïBV^nvü[ßzºmÚ‚Ÿž²•@óÆå,.OÏÞoù|_ɰ¿2L°41115Z¹õ·öbª¸¢‘$æk_ëaÏØÕÞÒêÝ“ ZÊšm7°³e[—Þ“¿ O¸óÝÌþl-­Ü|Þ;ü_™l{ôÙß?~0Ì«•E[—ž#?>[BHéÙÙýÖD]œïhjbb1ä»DVn³W’9‘vûÛéý;Û[Z¹x™³ý¶ ¾8ƒ2„PB ÇÎÈËËËÍyúÏ©e–,ú9µJ5*¿uö~Ï/CŸ¤¥i¡¸eùKOúmýã¿„ˆí½Ÿ|>zÈš”»nÇÅÿù¹ëWÿ*¢„6ùçYコ‡~ö_J\Ø—8eSD©vàîë«<õïHÈÍËËüý="·YÍd~pûiÅWiƒö†'$Ü;¹®_ú¥?²qê‰Ke_¤\ùzç5^//]Ù"FÛ¬cÐG3;F\¾Uð²¡FY+ßu7שډœ–š½æ|:¶“©¶®õ€Q¾æ¤çŒÚjé9ŽêÃ{•(&D{âÇ?;,Ú4§·µ¾–žïÒåùgN?,¯‘˜Òf/“a´t´5´u ô´µ í¼Þù|ÕH †ÃÓ­šF}³É;‡šïdxZíûÎÛ÷ådÛÒè£k>ýöÌݸ¬‚2 ¥D«÷g,1’•Lžy[s¾lÝbù- !„14®XCSSK×ÈHG0Z±˜"IKI+ùcY'³e•¹0mƾròUi³—Éð]ç~ÿMÙ׫FûåóÍÜúŒšýÞ¸î&¨¡P/õª <»y"6xkVÄlâÎ%Ëþìºçôξfzüô=Ã{ž`«—5¦¢åþÚZ*÷hk¡?ð³{G' ªW: ÃB)­­YµdÑq X±#`a cC–޽Dë¨¡P¯õ}PZV\ÂjêèëhJDZ»ë/ñk·”‹ï6fZÏû[–íþ3éyYI^Ò½3[f®ú­ž±™ “ô8º€UÚ¬º²°/f¬=Ÿ["f)!¥…E5ÏÔâµ*(¿ÝÔuK,~ŸængÛ~àGw:øyj¾vKi:¼ûñÅÂKËu´sòùáiÉÈ)¾„0¦CÌkûÛ;®BS‹!ß%ͪÓê=y’qØš±=m;|%òÿæ‹1æ8€úa¼'®vó™°u´¹ª3h‡d= ;ŒYý¸@à€ TP.PA¸@à¢s½xñB$ñù|>Ÿ_{k€E"‘H$@ §§W—öõ¨ ÙÙÙmÚ´ÑÕÕe†a0¨J)¥´¤¤$;;ÛÞÞ¾.«Ô£‚jhhèééijÖo6!€–‚a˜/^Ô±q=ÆAqòÔ^Ý‹]ý®$ÂÉ[Pcõ*s¸€ TP.PA¸@à€ TP.ê1£4ñññ………999ªN¤U333344tppPu"P?Ø}Z³ÆØmQA[’øøxçãã£êD€Ü»w/!!ÁÑÑQÕ‰@]a÷ßmQA[’ÂÂÂ~ýúQJU=z\¿~]ÕY@=`÷ßmQA[’œœìÿÍN¶,Ø}€4ôn‹ ÚÂàOgØ} aáZ\.PA›ºw¸ýÈýò—rPµ{b¶m´õ<×ý#沨¡1^Y¨+6i‡¿ý¸Ÿs8¼ ª~ã€*5ø;gq›´#°ïõ ÷ŽL2kûÚpzМ“«?{<ødòÝÞF<œÊ‚V«‘þŒB«ÕšŽAiΡñV‚ªÌ;. +kÜNyöóK:Ú@å“Ôñ´8fË›fAsÙŠ8îŸÇ¼îo¹2ò›§]þ|BogsC#K·¾Ó¾¹•ÃÊmÕ5ÐKªBQøÞecûuq²¶²iç>`òÊ#QϹýZ’¸mƒíß9’ÿºOJCmGW^CqÖ­ <ÍÚ·uí=úÃ÷ó¥ïþ²ðÿu2´ó©¤²mÙ¸þ˜ÍÊ]÷1zðŒ¥4ÿ—QFÚ¯Ò1›òk±hÿ0ÃjKuíæ‡–*}—‰mìm #y0óå^ÉŠö3q]ögYÕ†rÂ+öÕš*(!„ðíæžKUÈzôµ–ªSj´øE‰–ނߔfyòvQÀþû¹Oooíýdíøç š6APšsyEÀ¸o®1ææOï·»¿zب/ï©:³¦BE ¶5½ßçeˆžÞ;¶Ô-òƒü×…rXw‰kćƒü?¿[d4!$¿¤¤¤¤¤$ïç‘z‚igŸ—””””‹ ×&„ðí^-(©ð"é»Jÿ•EüôKÞ°Ižw÷Mdè÷††ÓÚ*¨<’˜àv#VnÿíNVVN#Vþž&!„Bó#÷}äÝÞÖÆÅ#pé/Š(!Dœ~uóTß.VVŽÝüfn½‘%mKʓϯååbmíì°ôðãbéÒª6Š;*K:ûY§³•µS·mZ2PñjµOSe·–wt|¯â3¬$a[Aྫྷâ_§zz·ðü̶º::†¾ƒG íLNÛó¶¡Žûê¿Ëk|$'?Ž)u;ã K }{¿iAí bžd´ÒÁR‘HtF‘HôjãF~_6²²ÈmŸæOݵ÷ýíÌ´µô,:ÿlÿWƒÓ¿[} ABÊÃ?óì\y††Mú>À~ìA‘¢÷Ù¹¹¾k#‹.-p Vþ;’XBŸÝ?°dD/7[+7ïÑŸžŠ+­™Í½³}¦_7'k[·žþóvÜÉakn绿~ãì»ù‘l#’˜­üw$Ô¬$µ÷UÙ²ªÒ¿¾Zq?óÀOKºšjkêYt¹öÈö·S·~ôC¬Xö¿úŠ+[wèÓàöž.DÅÞ;õI·ûçn—IÌ®3‘É#âïìY¸gêì$„HžìœýÞyá’ÓQñO/3ûõ~y;?þnæû—¬?<÷(!êÜÿ¬ožy ]B^ÙAj,!„ª5lß­u^Cw§½x‘eÅ¢ÌßçÚZÍ<—ÿâyÄÊnü›à·êïuâÇÛÅå…IWüšÜ%Ðώװoñ–ÂÔÔ”RZc?¬\^C#½›†$öZØSGÿ‘=t^.cLýFõ×{píf®ÂßMþû_+àûk+=ôm͉Ò~›oO’Í¿U4䛫щ1W6zÜÿhêæÈê&â÷~øuú ]·bãî›~élZc;ïyMqôÐ_ÒŠXö÷/Gâ½'Œr¨þW‹­½¯JU_>qÌå+)NÃÆ¸ëTyIMލwÿòu+{}k¾äµ¬«{ïâÙl•ö„¾F eEçö_ë:g²[›·æLÖ:~àVq-Û©ÏÆÕˆ wÛÖVA%Éß´­µª<ÔÓôšýÙø.fÚZ¦Ý&õ(ˆŽNg%1!î¸,ز¤¿£‘Ž¡÷”M+ütÄÑ¿û§Ó¼µS»›iëXôš³f†Cä±³‰qôé=­ßÉD[ßÖgé'ãlä?µr:GŸýõ¿ž Vî`¬¥gýÖâ­Kˆ¼ Zu©v­DÍ7‚·Ÿn¯¥[g‰¿ìdj(ì0ú˜pùÖ94¸¿›[º€€€€€EaU ÷¶T6O”KæfÕßj|¹)Íå*:_¨èý_£™$öäþ[nœím­¯¥gã³d©þ™ÓÕ?2ZÚÚZºzÚZ†v^Ö­ ²xåbÆxà»#è¯?_- „ýqðDþ€‰æÕ›Õ¥¯JU_>INv˜›U¿8€/07¥9Ù9ú²^VÅk[7+WRm…[$m÷3Ò«`òöž4…WH’ÿôhðÜaBBynïÎiéÀåg53‘›^+¤ªÝ¶µUÐêã i'§ZJwGÆÈÄHú\0šÚšD,SIfZ–¶ƒ“Uµ§ˆÍÎiÛ9XÊòmm‰(3›e³3s llŒe;·†•_nr:bE™9úV6Fë¶µU°n(<:ÎL_____ßtøþlJ!⨯ƒÆ±Ûp#1çYö?ÐüvØäýI­zÈ%00000°êõÃ3˜QVNõZ"ÊÊ%&f&Šþ.(zÿ×h&IOI/¹±¢«¹ì£ªõ˜Ÿ2²³«÷„ï:ggðOÖŒ40`ü‚ GäÉûÛ¦ÓkÒx᥃ç²$9žçLô3ªQgëÒ—ügÀThJ²3EÕ“ggJŸ†Ïc+©òSJ%Âãó !<‚u3ÂgOú{Û/¸œ_T!÷·™m]e(yrø§›ÿíö7××××7pšu6îìþ3™-ûƒ[cRÉn‹o³(Ä·°²(½ŸÆ’*gxB Aé¤L–Øò!’”„"pðx¥f…wŸæSbÎBÄi)i5?—+ÄX˜E¦>£DÈBÄéÊÖ­þ1ŠÏç‰ËÊXéI~^¾ì”CJY–¾üX*[UìÑØj[cSÿ¸ø0pÓ˜.f„XzM›á÷å„‹á/ÞµÓ¯ë/ Ž\]]]]]üCk3Áwñõµ þíäßKºzUœÈ¥¹¡'®÷xï-äðùâr±ììóüg”ÅïB†yù5)¾y[s}¿O"¿£ì"tgÿåÛý—¶0îÄò±c—iÝÙdXm;„¦tÙõó±Ï.… GzC÷•_¤N}Uü†UvžKÿ6›ÏXÞ­WÅViîÅc¡Å=õ¦ÌÊ‚¤$$—Sé¥>4?!1ßÀÊB—PÊk׿¿õyëv_Ô×´â¨2ZÙ=©8¯[k®¥8B—ßÎÿ¸³ì¯tɵEž%LXàÈÈÛN½6®¦š~·mmÇ õÀw5¹×Û—_K|^Z~pÅæÐ ·a£:ý³sÕÁ‡9e¥Ùww­ú!Á}t€#_Ã-0È-bÛšãÑùeÅ©7‚7}Zç£8öÃ]·¯=ñäYYqÚÍo¾8¦dÝjç#xŽÜÊ®‰)(+J»½sý'bB(¥Œ‘™ “øèÑóÊÓI5×|‰vê,L9»7$*§T\œñÓ¡Ï]º´×ªí¬‰úk×®ò ñ.S-kÇ•ÿ8gÖ·WþË--/Ί:³~êÒË6 ×¼ëÈ#|‡N®å7ŽžŠ-,/Îß³ñç1!„(zÿž‘©1“üøIK!|·1ÓzÞÿjùž[IÏËJó’þ>ûÕìÕç«_áZvýËYë‡'ä–ŠYÊcHiQ‘˜ÔØ!„𬃦øÄnŸé:n|7ÍW~ºôU©Úë§éùþ†ñå{¦MýúÒ“œâ²¢Œ§V½³èw›Å¦92”iûö„¾GÖ~y)6¿´üEƽCŸßl;f\o-J)Õô’·îoV ÖOuäU{‹¼òž©90ª@Áµý'YŸ®/¯[ÐöòóŽùùçÊm§îWcM¼Û¶¶ Z}T`¥ì›g<‡©»ùÀ:lÅ ŽÎîAŸ?èîï­M4ÚÏûaïxñ¾ =ì<§‡èMß·{†Ÿó÷|;8m“G‡NÓûïþê¾®ˆFÇ{¶öOþbH‡NþR¼ß¥©xõ*ïÓ u[ú'®yÓ®­Ûõ ^ow•Ž_“¡ Þk{vœ“‰¡ÙÀm éûFÁJ»ÏÊC›ÞJÙØÁÒ̺û„½Å#vþ¸¨SÍë †ú½ïš#F0x˹#sÍo¬rw´¶ëè;çœõê³!Ë<ô!ŒÙðÕ}“×÷ogß%pc¢ç.Ò7¤¢÷?c:ä½¹–ç'µ·ZùïH"ö“w],¼¼bhïÑÿ;# šâcP­{­Þ'__7®·³CçÀàœ·ƒ?#djn‡%„0&ƒ§ ×É}á=q´³¼á ^í}UUõ5 Ùú{È‹°O:Y ,]Þœ~ÆzÝï§WxèRJ)c3i÷ñ]î|4ÈÕRhëþÎ÷χí YÝGW¶®phåº6öã¶Dw_{þ×½ôª½K^­¡’äï™¶©$s(OÎ@(›ýÛßhßþ]ª^‘ û†_¯äÃþ|ñêvL¼?X®`!¼Ô`{OÆ{âj7Ÿ [G›×Ú4##ÃÄÄDC'~WIØÒ^ è7÷ä|UõÚµkC‡eÙV=HÙLðx¼ .øúúª:‘†Áfžž;paÌØ¿}êÕìNß^~ß{~ÁÚð}#M_gfå»›qj¦ï¼˜ñg.®êÙìžh uÙmÅbq^^ž¥¥¥òM-Ézvå°9`3Oo9À 2ÀU'-tËúSü¡û{*šÿ q>IA}©Ù«À³öÅæ«g,\÷ÖÅ/úÕ¼ZG•è‹èƒ;ÏkÚ?7{™ IDATôµÊ§lcŠwÆbø¦¯B}¦Í[Õ÷Ê&Ÿæô @ÃiðÝ´9à ßì«÷¿åþK¢2‹þ«ö¯|KOASTÐfBí^Ælð7÷žª:‹Ê.ÎïðîîÓ¾YÚç•kˆ8P¾û˜Ùö0½¢]ôV'’ømCz}v·ú7}LÞ9½c°vSåÐz ‚ª'ž™÷‚Ý¿/PuÍ‹Öàq;TE£â;-¼œ½PÕYG¨ - ŽA› ¼ -vŸVÇ ­š‰‰ ˲ Ãàb"Õâñx,Ëš˜˜¨:¨ì>­\c춨 -‰¡¡á£G:tèÀ0¸ÐA•X–}üø±¡¡¡ªzÀîÓÊ5Æn‹ Ú’899ÅÅÅÝ»w///OÕ¹´j&&&†††NNNªNê»O+×»-*h ãìì¬êZ*ì>аZÛœD € TP.PA¸@à×â¶0±±±ùùùªN¤U366622·YZ–ØØØÂB7­ÂÀÀÀÅÅ¥ ò5€ Ú’ÄÆÆjjjº»»«: qqqøvD RXXèééYk³ˆˆˆ&HÔ*hKRPPàçç§ê,€BLMMCCCUECbS÷½q>(üÄTKµ²ÇÈÈHÕ)€ZÁ8hK‚“·Í ^€V å 9‡ÆÛºzçåÝ$Ù¤þ¶ý6ý+VaVÍ„$nÛ`ûwŽäãÞ+ÐdPA¸h­T<À~rHíæ´ ôÙýKFôr³µ²qóý驸RB!ÏŽN´B¡¥m‡7'¬¿”ZqÄZž|~å(/kkg÷€¥‡+ߎ$&x€ÝˆO·ÎÒÃÉÊvÚ©â—Kb‚Ø ÿ$x®_W+·>7…e±¯®r(\^z„ÐÜ;Ûgúus²¶uëé?oǶÖ4VnÿíNVVN#Vþž&!eçæú®,º´ÀE(Xù«÷m¹¡¹h­@ý°É‡æŒß*òÍÕèĘ+=î4usd!ÄhÜ¡T‘H”•|ÿÄËß.ù%•%„HžìœýÞyá’ÓQñO/3ûõ~¹òíBÊoŸ{àõÅ¥ÇOS~ Ò­Þ}ùí“w:o¸ÿ÷¡IìO³üœÂV[%ùÏgß•»Yñ¿{?ü:}Ю[±qwCV÷M¿ôG6­%ð QÞ_†>NŒ:9dÙæ°­€ï¯­ôд=6[$Jûm~S<áÐê5M•ˆÂ÷.Û¯‹“µ•M;÷“W‰zÎm°¢%u4FÎlêŽÆãN”¼8:ÚxðîÌ–ôtÀk’$ÐVPÁÜce¸lTT{rÿ­ 7Îö¶Ö×Ò³ñY²Ô?ÿÌé/ÇL £eÖqÄŠé#.ß. D}úÄcÏEkÇw2ÑÖ·õYúÉ8^­ÛÑè1ó³)=„Úrþrð;LûlnO ¡çìÕÓín¿ÊVYE#^áf-mm -]=m-C;¯ ëVY0ÊÓÐôšýÙø.fÚZ¦Ý&õ(ˆŽNÇM³AšàÛ,4çòŠ€Y×\–l>¹óM{Ýü˜Ë»>þpبģ¿~ä¥ßøÝ¨¾ÝÜsáë½5¥›´#ðÍ£„B$é)é%7Vt5_QÙ–i3&‡R}lݪígïÆf”K(%ZÞƒŸ±D7;3ÇÀÆÆXöÝ +;+~´ÒíBxBK!_AbÖv6²?(|{kF”)b‰~å*eŠ7Ëw³3¸,x͸Aù|ÛA³æíf¢4 ÆÈÄHZÄMmM"‹ñ)T ñAË"·}z˜?u×Þ÷´3ÓÖÒ³è<ü³ý_ Nÿnõ )ÿ̳ó’0Ù©6éûû±E”"N¿ºyªo++Çn~3·ÞÈ’W†:’XE?ÕÐüÈ}y··µqñ\úË£"éÎF î¯>”BŽÕÊT4°ôJ_¥uÍYÉ @ðÍÛšëû}û$[T);aç-6éÀ²:rò¯Ø§™ÙY6öÑ ,%„'´0+|ú´âäˆ8-Eº(ÚNE?о-*IM®Ø$©É©T`!àUYEéfuœý—o?~!ôâ‘Ïû¥l»ì×9+d¨ßmÌ´ž÷¿Z¾çVÒó²Ò¼¤¿Ï~5{õùBBK‹KXMm}}}M‰èþ/ëwß•Ö9 ·À ·ˆmkŽGç—§ÞÞpô)«l;µ‘<Þ¿nODvi©èÞ¾µû’¼G ±®ú÷EÉfË®9kýñð„ÜR1Ky )-*×? ž‘©1“üøINèBSiô Êæ‰r‰ÀܬzG|¹)Íå*z«‹£=öO§yk§v7ÓÖ±è5gÍ ‡Ècg%5šÕ>ðCˆ$&äÀ—[–ôw4Ò1´óž²i…Ÿ´š+J©>bD‘?T½™â¾ê˜³’A¦êxÖó¯ä¥£7.$ÿâl µCêƒg?y÷ÑÅÂË+†vqpñý¿3’ )>„ßîݵ‹-.Íðr´ï4äãðö~²3ÀæïùvpÚ&ÿŽ6¦÷Þ]SÙvj£Ù{DÏûõwuì6~Ÿä]Û&ÛU+Þ¬V¯×ÛÙ¡s`pÎÛÁŸ2õNƒ1òÞ\Ëó“Ú[ q-.4Få™Lˆ(+‡%U?JDY¹ÄÄÌ„GäÏêÂfgŠ´í,e«ðmm‰(3›%Õš))©h“™–¥íàdõjQ’;”"ÄȈê#@ –öUÇœ• 2˜M<’2±êžýüßR*/R”Ÿ¡¡á•+Wçÿ²Y­m¤½‚ò]|}m‚;ù÷’®^‡c47ôÄÕâï½%`˜>_\^1ˆÈ>ÏF !„'´”ÞHÊd‰-"IIH!w¯ÆP‡t¤ä“ˆÃï˜)< ã[XY”^‰Oc‰CíÜÒ£®»N~÷–ƒ©?}oPïSl•‚Ì(o¦ ¯ºå,©Ö4,ÜK\ã_I¤å±`í¸òçÌúöʹ¥åÅYQgÖO]zÙfášwy„ïÐɵüÆÑS±…åÅá{6þ#&„ ·a£:ý³sÕÁ‡9e¥Ùww­ú!Á}t€#¿ÆPG]FJø®£&÷úoû²àk‰ÏK R®ØZ¢(YE#Ful&¿¯úç Í_|” ÞrîÈ\ó«ƒÜ­í:úÎ9g½úlÈ2=Bc6|õFßäõýÛÙw ܘè9¤‹t$F£ý¼öŽï›ÐÃÞÁszˆÞô}»g8ñku$‘:Œ”ð¦îþåë°ƒ::»}þ »¿·¶¢\ŽÕ±™Ü¾8ä вð]?¸’tp4ÞÇк0ÞW»ùLØ:Ú¼Ö¦&&&¯uâ—Í<=wà˜±'~û_­·k×®=ZÕY€LHHˆ¯¯¯ª³€†$‹óòò,--•7[’õ$ìpSÏêdzöÅæ çß/\wý¾·-WÓßa›1üͽ§MÞ-@ƒÂÌò\ ‚p Ú’«:x /@+×ôã À‘‘Qdd¤‡‡‡ªadd¤ê, bcc kÿ测‹Käj´%qrrŠ‹‹ ÍÏ—?"4 ccc###ÌqÓ²zzzÖÚ,""¢ ’õ€ ÚÂ8;;«:hÅ$1ÁƒÞ›÷oÍÉؤ}¯O¸wd’â 6›E§ >|hkkkbbÒÄù@K‡qPhÕ$Éøñã;vìXZ*çîÂJ ‚¨5šsh¼•@ …Vvn=ú˜½öP„¨æ[IܶÁöïÉo¨)YŽ?þøñã‰'jk+œï@.TPµÇ·›{.=;;=ñÑcÆ·½·aÄà…gÒ[ó¨+ï•$‘HÖ®]«««»|ùr嫼  µài˜·ë3~Í/?LÓüuÍö¿Ê!Dœ~uóTß.VVŽÝüfn½‘%!„òðÏ<;/ +“®È&}`?ö HZuèó¿÷Ìõëê`eãÖg⦰¬W+1}vÿÀ’½Ül­lܼGz*Nvv´<ùüÊQ^.ÖÖÎîlY:È~äþ ª¤/y¹•›ë»6²èÒ¡@`å¿#‰UØ\™™™AAA_}õ•4”€ÎŸ?ßÂÂâõŸahmPAZ=ჭÓÿ¼'!’˜]3f"“F&ÄßÙ=²pÏÔÙ?&Ôr†·üöÉ;7\ŽŽÿûÐ$ö§Y ~N©^CÙäCsÆo ùæjtbÌ•÷?šº9²ŒÉ“³ß;/\r:*þáéeæa¿Þ/WÚüÜ´¾¿¶ÒCÐöØl‘(í·ùöDAw „‡‡¯[·.;; ðšp-n P€o³¨VKÿ6 ÏThÆ<Ï{ÆŠ£=öO§yNínÆ#¤×œ53Nø;›8í};%kó;LûlnO B!ŒÙðÕ}“×÷ogß%pc¢ç./G5{èyÿ£þ®ŽÝÆï“¼³kÛd»êFxö“w],¼¼bhïÑÿ;# šâc@ˆF‡ù{¾œ¶É¿£C§€é}‡w—nSQ_ s3òÞ\Ëó“Ú[ ­üw$ÝÕfÇŽ?Æ(¼Æ{âj7Ÿ [G›×Ú4##ÃÄÄDC'~UæÚµk£GVu âëë«ê,Z*6uoÐçƒÂOLµl¢yãããŸ?^k3CCÖ{¼>±Xœ——gii©¼Ùâ¬'a‡[k9T4½'¨)ÔEhp8‹ ÀEÓTP‰(|ï²±ýº8Y[Ù´s0y周çÜ&µlè)1›BKÌ ‘ñ¬gžN:Ùd§pCTPšsyEÀ¸o®1ææOï·»¿zب/ï5~ߤñ+hYä¶Oó§îÚûþ€vfÚZz‡¶ÿ«Áéß­> iš)1i~侂¼ÛÛÚ¸x.ýåQ‘lzÏ‚‡ûß»‡“••“Lj•¿K¿œöìèDk@ ZÚvxsÂúK©Ò‹ø%1ÁìF|ºuþNV¶ÓNeÊo&§¯Òºæ\³‹âÆ}]àõ4z•Ä^ {êè?²‡ÎËeŒ©ß¨þz®ÝÌUxb³§Äd“Ìš°%¥Ï† Q±÷N}Òíþ¹ÛÒ*[~!ÊûËÐljQ'§ñ,ÛVB1w(U$eg%ß?±Äò÷…K~I­ø®xùís¼¾¸ôøiÊAò›Éé‹Ö'çª]è6Ü‹ ¯Ñ+(›'Ê%s³êñæ¦4W”«èþJ²)1×Nín¦­cÑkΚ‘ÇÎ&ÖœñZ6%æÆÙÞÖúZz6>K–úçŸ9ý Ú|Õ’˜w\lYÒßÑHÇÐÎ{ʦ~Òj®é5û³ñ]Ì´µL»MêQ]õvOŒ–YÇ+¦wŒ¸|»@¶H£ÇÌϦôjWýUª7SÜWs–×4Kþmž‰À„ˆ²rXRuÞ‰(+—˜˜™ðˆüY]pJLIfZ–¶ƒ“Õ«E‰121’.e4µ5‰X,¦„G[·jûÙ»±YåJ‰–÷àg,1"„žÐRÈ—­+¿™®Â¾ê˜sÕ. Ykôƒ¾‹¯¯MÂo'ÿ.y¹Œæ†ž¸ZÜcÀ[FÙ”˜)I™²ƒB锘 ¦ÄüöI¶¨RvÂÎ!ZÕ°°²(MŒO«Óí„Ù¤ËVüéüÉÉ¿bŸffg=ØØGƒ²U 2£¼™‚¾ê•3.Mhÿt¡–Ç‚µãÊœ3ëÛ+ÿå––gEY?uée›…kÞuä5Á”˜|×Q“{ý·}YðµÄç¥)áWl-‘“'!„ZZ\ÂjjëëëkJD÷Y¿û®¸>Íä÷ÕÓx¾BòäË^z?Ž›¼"66ö~ÄÆÆª:Sh1š`N"F0x˹#?|ùõ꠯㲊ʨ†óèà³›ÇuÐ#²)1oÍ_Û¿ÝZ6½F½3¤ËÍdBdSbÿoÝ„å2‚¦ïûf†Ÿb:ä½¹'>˜ÔþûgÄkÍí³ó'ï>ÊlX¿bèçñ:ÖúŽYô¿šSbò¦îþE¼fíŠAÁéÔÒ}ø’AÚŠrå·{wíâˆå3¼vèXuû]?óêÓLn_Œvr®å¶Æ5ˆŸ&¦ {÷qÁ9_€º),,ôôô¬µYDDD$ê¡©çÅe3Oϸ0fì‰ß>õÒ µJ/çÅßýŸ÷ÇVÇ..tÂEG*Ótóâ¶ I(Ù¤}¯O¸wdRo6ÖTîß¿?`À€Z›]¹r¥{÷îM4Oõš·©ÿþò,†}±9èù÷ ×]†9z¸Óðú"â2ÊgkÇ&íð·÷³ÒÛI×·½’6õí@Ý5ýÌòŒÙàoî=mònZ‚â''¾Xýí©;ÿåò,Úy zwñ½-µµæÙÏÿ-i~Ý·^—öUÛHâ¶½Ýÿö´‡Æ3ºPw8ˆh6Jï|>qq¨pþÏwb\Ø9·cÌ÷?Þ)«}=P TP€æ‚M¿w/ÃqøìQÝ,ô´ ,;ø¼ûÅþÿõ­~J‹¢ö½ëå1q׃Zí´ª$&x€ÝðO‚çúuu°²që3qSXVͯp½Ò~ÄÊí5'¶|Ùæ•I4ÅUÏâ*˜ÿRš{gûL¿nNÖ¶n=ýçí¸“Ã*ËYáÆåÎÐY—©=*hKbll¬êà¥9xmÝ=­NlÝýûßI¹¥¯~ƒ™Š3¯¬5ñ'óU¿îŸÓ­Í«Wê”ß>y§ó†ËÑñšÄþ4kÁÏ)Ê¿-wbËJ¯L¢Yí¯…’ù/åÿ»÷ïÓíºw7dußôKdS%9+ظÜ:Ù:Lí Ð8PA[##£ÈÈHUg„addÔÀÕöþ4äÀTãìêèÜ}àÔµ'£+naD_<>8'pÙ£·øuS€­¦Üõù¦}6·§…ŽŽÐsöêév·_PVÕj™Ø²ŽäÌ)·•¶¶†–®ž¶–¡×„u+ƒ,˜:ä\‡Y3ë2µ'@#iú+‰€;''§¸¸¸ÐÐÐü|ù³!BÓ066622rrrjð-kÙõŸ¿¥ÿ|B$E)w¯áØ<Ã[Á¾„qÔáo_LJLó0Vø5¾µl—æÛØ[3¢LKlL–;±e)™ÿR^f®sv—¯7(Ÿ/p{#hÖ¼±ÝL…9 bêÅ*­Z:ÎþË·û/'la܉åcÇ.Óº³7ÈP~ÎDÁÆùV¥WâÓXâðò×’N“ùIÄáwšÝPAýá,.@sÁ¦ü¼xêšCüû4¿¬¼(íÞѧ⌺t³“}ÎÕv³ýÔf·ß¦Yyå•‹„!„Hï_·'"»´TtoßÚ}IÞ£†X¿Ö^}Bʪê8ÿe¥²ë_ÎZ<oïç!d¶‚V¯×ÛÙ¡s`pÎÛÁŸ2ŠrV¸qžÃÔÝ¿|`¶bPGg÷ Ït÷÷Ö&<ûÉ».^^1´‹ƒ‹÷èÿ‘M©9µ'@ãhêYý Q´ ™ÿ*5mÎñññÏŸ?¯µ™¡¡acŒpCKQ¯YýP U@]„‡³¸\à´…‰-((À·YT«ñ¾ÍÂßõƒ+IªN¢žZbÎU ‚¶$±±±šššîîîªNHBBB\\¾\К¡‚¶$~~~ªÎ!ÄÔÔ444TÕY€*a´%ÁÉÛf/@+‡ À*(­µ‚Jb‚ØOÁÜ_ÀQk­ ¯§A+(Í94ÞJP•yÇ%a­þ^·’¸mƒíß9’û-¨“ÿ6 ßnî¹ðõÞʧ™héšä,.ͽ³}¦_7'k[·žþóvÜÉ‘ÞãæGîû È»½­‹GàÒ_QBžh-„BKÛoNX)Uzÿ ILð»áŸÏõëê`eãÖgâ¦0Ùíè³û–Œèåfkeãæ=úÓSq¥rú—Ó!„<ÜÿþÛ=œ¬¬œ~!µ<öäþ[nœím­¯¥gã³d©þ™ÓÊ«%¤°#M¯ÙŸïb¦­eÚmBP‚èètVi=f~6¥‡P»êsV½Y-¿”4e9Ë뚥&µœ³3¸,x͸Aù|ÛA³æíf"ÉLËÒvp²ªQ+Š£­[µýìÝØ¬‚r ¥DË{ð3–BßÚÎF–.ßÆÞšeŠÄé)é%7Vt5_Q¹¦Í˜œj—ì(èˆÂ™I—2šÚšD,S¥ ð„–B¾Òï—²iì²_ó(ßÂÊ¢41>­ÚŽM:°lşΟœü+öifvÖƒ}4([Q%©É£’ÔäT*°h˜·5×÷ûöI¶¨RvÂÎ!ZU·)·#E”&@a”7SÐÃ0„RÙføµäÌÔ%OP¹¦¨ e׿œµþxxBn©˜¥<†”‰ ßuÔä^ÿm_|-ñyiAJøÁ›CKhiq «©­¯¯¯)Ýÿeýî»â—›‘<Þ¿nODvi©èÞ¾µû’¼G ±Öt3­çý¯–﹕ô¼¬4/éï³_Í^}¾ú4 r;R”ªÒjo&¿/ž‘©1“üøIK!ü:ä Í_#ƒ ¬Þ9’¯Ù{âDãëëÆõvvèœóvðçc„ á9LÝýËÖa+utvúüAwom~»w×.¶¸4ÃËѾÓÃÛûyT9¬Ù{DÏûõwuì6~Ÿä]Û&ÛñÏ~ò…—W íâàâ=úg$AS| jüŠr:R”½ÒêÐLn_Œé÷æZžŸÔÞRhå¿#‰Ô!ghöÝ|&lm^kÓŒŒ  UÜM}æÌéã³gÏž={–Ûvp ­HÕò)%­ þþþõÝ×cP6uÇãq'J^m¨•Þa»î×ââû \ ‚p À*(¨ \ ‚p;l·ŽöÐÐp À*(¨ \`V?P˜Õ ¹@àwØVãöЈp‡m5nwØVßöИp-.¨?\‹ Ð\ ‚p À*(¨ \ ‚p;l·ŽöÐÐp À*(¨ \`V?P˜Õ ¹@àwØVãöЈp‡m5nwØVßöИp-.¨?\‹ Ð\ ‚p À*(¨ \ ‚p;l·ŽöÐÐp À*(¨ \`V?P˜Õ ¹@àwØVãöЈp‡m5nwØVßöИp-.¨?\‹ Ð\ ‚p À*(¨ \ ‚p;l·ŽöÐÐp À*(¨ \`V?P˜Õ ¹@àwØVãöЈp‡m5nwØVßöИp-.¨?\‹ Ð\ ‚p À*(¨ \ ‚p;l·ŽöÐÐp À*(¨ \`V?P˜Õ ¹@àwØVãöЈp‡m5nwØVßöИp-.¨?\‹ Ð\ ‚p À*(¨ \ ‚p;l·ŽöÐÐp À*(¨ \`V?P˜Õ ¹@àwØVãöЈp‡m5nwØVßöИp-.¨?\‹ Ð\ ‚p À*(¨ \ ‚p;l·ŽöÐÐp À*(¨ \`V?P˜Õ ¹@àwØVãöЈp‡m5nwØVßöИp-.¨?\‹ Ð\ ‚p À*(¨ \ ‚p;l·ŽöÐÐp À*(¨ \`V?P˜Õ ¹@àwØVãöЈp‡m5nwØVßöИp-.¨?\‹ Ð\ ‚p À*(¨ \4æ·Yš%†a^}Pù¸Žp‡íÖÑ u‰D¡¡¡×¯_¿~ýúüqãÆ7nܼyóÖ­[·oß¾}ûvxxø;wnß¾]÷mâÔŸ£££®®®’6,˲,ûèÑ£:nã \ ‚pYý@ý]¹r¥îgq1«@#BàwØVãöЈp‡m5nwØVßöИp-.¨?\‹ Ð\ ‚@« ü”TP.PA¸À½Y@ýÆÇÇS*»õ£’u‡ êÏÀÀà7Þ`Y–B)•ÖKJ)˲ÒÇÒBnÞ¼YÇm¢‚@«SYA«VSJ)WÁMŒƒp ÀÎâ@+rúôéÓ§OWž¹•þèïï_ßMáZ‘áÇ6¬ê’ÀÀÀÀÀ@›B€Ö¥jå\> Îâ@+$­ ”Ò€€ß•B€ÖhذaÒïƒrÞÎâp À*(€V‡a˜WT>®£zTЋ/ÖkÓÍÇ¥K—vƒu­ ½zõjØŽZ4Œƒp À*(¨ \ ‚pQo³ÄÆÆäää4^6*gfffddäää¤êDšìþx¶‡þñìn\fgÕ”¼œ-:Y™Ìëß¡ŽíëZAccc†ñññá˜WËqïÞ½¸¸8gggU'Ð\`÷Ç3°-ôß 90ˆJ²jJŸ»õÝ•Gï èX—Æu­ ÿoïÌâ8²^ÝsÃ8Ã1¢èb… x" QT܈I¼â±«»š(Æ]5nt]o¼QŒÙ(ž ÄÈ¡rÂÀp3ww탈83€ Öï«Ï)_½zõº_½é®šîúz_óagg—œœÜÓV ½þÈÙ/k.ñ"Éßßù;…ìWõñAªfP¡Pø)œ=J>î5„º ðGx[þéxàA®ªwªÕXUÅ}…™)—þ«\&™¼ô€Å瞪+G ½™nš= Å⯲9:à•~€X$=°ï`wt×ÞéHqY—.µª8~¼_\N£u›iï ØéÓ€ ˆÈèÓÅ¥u Õ……EG÷Ÿï*ÛºµÛÅO–¿°=°?»†ÆÂÎo ˜õ÷¨¿Øºw­~ñ1QRRb:ИkòÆDôà™=eÆ@‚ˆ9“öìÙòmÛ0 (“ A@…âöéÓÑS§N½|§~Øoò€v2ƒþ¼o»‰™‘§ñ¹0$xñGpQ«Þ}ç€r‰ çhSIRvå?aaûþüãÞf«áa –^'Œ|¯¨ûl~â¡;æ;!o«íìL­1‡{VA‚ˆ `æä¸•^¿.mq”Îfòñ¹}ÙÏÏ÷âÅN¢dÞîñö‰ó²cB Úg ;—AŸfþÁÒ¦)€X!WÈEøh'W²k2™·w‚CÒܬ¨ùú™ÄÕj«ÆïA¡ Œ›±>û%.'`_b#Óï…‹EUÚöÔõ8ñÑÓµ!&‘HN>A’$„P*•UUÕ¶,R‰¼k»S u=@Èå1þþ¬¼<×  òß~“66¶l%“ËËSRœ'MbegÇΘA*ïs,o£Ê¡ì¦s æJ¤‰–𲼓ÚÚ¦‹ÎTÕ㢋3¨Ã¤%æN÷^µR9ߦž§G12"WvÔ†¬<æ«Ë`0 &KGÏt¸×ÒÃêÈ®pƒųcô¦¨R]¥ê>A >º. ¡D"ùrñü¸„(@!”JeÕU5-‹T*mŽ^Aʾ0Ÿ 9ì>F–ÎëN¥×*#™¬<æËµüö¶Lù©îñ/ÓÍœVÅ—t6E©ëX­ÂB—Y³Ê’’ä´}ûp[[eŠ 7"37/øpÌĉŒ'Oâ_µ#*ïY0ÆÊ˜ÇfsM¬Ýæ~1³¾ '¾ŽÆ÷n‰6=@RÓr=1ÞÔŒ_QSR&(µ¶É74~S€ÈøÑ™§ÍŸqB@t¢„š7oRBª]üL" ýC÷8ÏZ&à‰†:¸ÚØN î5Þ ›sí¼ÃÓÔRqe;í(¾Nª—ˆ*³.‡q¯.Ÿ·=Uѵ†!ˆÞ€T*]¸8dÂä1€ ‚ª*a}¸e‘Ë”á+¯.s÷ÝýÒ%üjFYeqÚù•–×z~þ ñMdÅo'OÚ.^t9þ'ocÊ{QnB‚[ppYb¢¬ª =ÓÕ¥¬]‹ÛÙQ¬­u·laèëkyzJ^¦§ñö~Û4´kËÇ{‡gÙ¬8u/·BXúGì¶É´+'oÔ¾gãÕ‚„P³"‘I¦Ý–àÂiuVFÁ¬€Ö2Ò'ÏÔ|4"5â\¡a/$T. hÞ¼¹¨î“.¾…æeŸ-,Ú5ÆÕwÀ€Á9»nH/V[4ÑÙÙ“ÝŽ;5ìnR¨¨¡¤ï<B1ºžíìÀ1Ì‚Œ¬z!Yzp©—M?ž.×dØß^x&n’'…·þ5Ûٜ߇g2Ô-d÷­ BY݆¼$z¾ã† ñ_±˜L]·=¹„j_ÒD T ÿŽ‘J¥! çºû8׊†Fú!‹foܺ–Á ­e!”—‘Òû;ל |yL&“ÅÒáõÿ|Ú?®)oi+2tÒóZó¯PWK>‡Ã·òZ[¬ôY}ÿ?_MfÊãö2!ìø“z¶?yªr,Ûõ€jÞÊž<}Ô²æBÔISK½:Qõó¬Ü ¿P*•ÚªIÃÍc—uCÖn_åSzòÌ“W÷ðY;ÇL^³=tœ…©¾ž¹ƒÿ¶¤2¢ƒú×£#JO6³õ©¢YÓOãÜÉQaö‡¶±0ß.]ŸA BF¥²Jò }s³æà‹DK'L#>|ÄôktYqglï&.(+N&Éæñ4©'%Nœ¾¥ølÄpHä›?õ'ÁûRò…);ÒVÌÚz_!„ò'ûVl+õ>–V\ò4v«kÉÕ¤r¶#O÷=’²ÙAÇû¿¥"QMâ×f˜ D o¢bøw€T* žä:qdYu¡H$â÷ã¹ø|îòňþék:ˆß\ž?Í[¿îŸBų_‹ù|Îlš\¬´„ÿU(owŠŸìŸé±"sbÄõƒæŒÎÛ¡ú´•±?LM¥kiÑÙlÅãÇ[·$I@ ¥žWC³gµ¡t¡J$56Td_YÃ[ôÕñ¢¦‰ÈR®üá¼ëV^YΕ…”“ßlIAHäš3õ‡‚±;’rгâ7Ù¦Fßw0yÂN¬ƒªrõ{îLÔSQ¿ää½PÖ”•¿|)È)¯+H$:c{çÖ­ÈÊøã7‡. 6׳ ˜~ñäñëkJYÊÅÛÖ?&g<=5—<>?4¢è ž@HBŒ?mûËS'îˆII(M=y2×9xšö\ƒ<{òœçµ‡ëeUî1‹úZ€6`?¥ÈoX˜÷óžôUví“»ß\:jöê€ÿžÀÑÒÒæö½6ÃóðÙ•ŸáŠgçÝúlÅÎ%Î&Ú4­~ãW¯ó­¹tñ‘ Bh •ÎÒÑbÐÙýGoûÞŸ`Gòj˜ßÑ „@|²¨?íºxó»Â²œúº†öÊËwÖ­Øä8ÊBH+„@ßPïÍï¼}C ª€ui×SÄ6~³ ñÎØ„ºh%F±¶fÚÛS©T¦mgDz·‡2Q\¬ÔÓöÐZë¥ó>›¾>Ôúþµ[uMýЗ|7{˜ƒÎµão_Ÿù´„Pd;œb¹|÷÷AºLv§]÷dv0ªrÚ™s óY•+æö£í=¸Y"AÏFÕ3eÉd²ì'¡!+ßnBEžÎòüëdqËà…ƒH¬m¶„jµà»E#ù ¦ý¢Í ¤\ˆ+"Ú­àÕ…2àxÌ£#nÔA’"Î׸O1Pù,V=.ºåÝ, Ã2ü[ýeq @‘ˆ@$¢Òalmù.´µsÃñæÞ)Â~­i¬æÝÚã-Ús6S ˆÒÂRqò K¶¶=ß#/Ë•$€2ø«C¿ŒÍ\?ÕeœÇ´ÐïN?ª† #yѳ$ 1XT’'ª—¶Wî$¦¯ùfø±.Ê&8WŸ*Ê[…°¢¢¼ ÓÓçâ€óƒ÷EÌ®Ýæ;swj}~ó…¡ü:”½e Í–$%5ÆÅÑutíÝ«ãè(­¨hÈΆuuMb<¨l=´&D™gVOiaÄÓÕÑa[¬HWWÔ4 b^変Ñt P(+)§ü‹É3y7M†$ ;.ºlBr’cD9xôçûnã i© ¨ª²n¬½¯ÿVEö™ˆ”ç§³ ú° /ŠÏ=SF$!¸‰i?\)‰õ35•eŠê!P©–édp,¶LQw<žâè® ße¼²t×N"UÓ7„B¾™[iqIbPžCJ3¤9µµ/ëê õ•¤¢§²KŠšŒ}ñ!€c؆ìÚê•¿sÃÉB`hÄ×öÚŸ_ßÐLýËC“èB™æ“׸œø¿ß¢¶»†Oùúb‰·+ BRMnêžXÄGZáÿ6†9ŽtÎ~’'KÛ,iw2V.ý›››{sÜbüx“¼˜ E¯Õ„ó7ĶÆñš~›‰÷õø!æ|ˆhÇÔiá·ÕØoßx€(. DM cÔ(›-IJª /Û¼¹&2g0XÇKJK†‘¡Ôƒ›wï—{1Uô¶ªÜ#ß,ÿÝ|c\zaem}]Öα4âÕr×› ‘ÊO8߸¯,÷EÉ+|íO†P¹]µË=Ð̤‰~¥yB¹LãxFÁÝ‹1'ÉJ™TQU" ˜6·’û§/ÀeÉÂ2a­²\ôÏ>}!¿i@dIAqÓº¨¢¨°êñõ±ê[XI±šls÷ÔÙäȈ$ÿÙŽL¨:ªÇEweP¦V_:“WXø¤¶Q«²²@(,¬76VCµ¸Þ"1þüy–ÍÈðfs›*àMZ½Ø¶B¥I[æoß=¶óqb´;ªðÈΟ~óªJI‚$ ‚ ™Tfĵ´6² Q²"ád<3Þºåæ\–“ëȢȓ)b  š22}ËÐCƒ3üdŠÁvë•_^…ã9χ)9O¤Þ:¹êA9ÎÞ4Ø5p·¿aÇr7nÜðöö&Iõî¤ßŒõÐçR²ÔÝ¡kYá´y/îó‰gsÌÕRõÞÀqüêÕ«&LèiCˆÞ‚fáß ‚ d2™D"Ùw`ïï©×eRyøßvëëëã8N¡Ph4“Éd2™t:Ösao/ü;ö!“Åp † )øýwqmmS§Ñ̬¬ ª«Ÿâ¸ß¯¿juÿ :E{õÝ¥›üÕÎØøóù¥i5â @ዲ7çqõÕ6…x¶w¢ûãE™‡ýuTª›†ë«œ—4lzð?žêÏê£à¸ë–¨{§u,¶÷oôûÄ<¢bɲWr¡—®ù é6!} PÉ$òãØÄfm˜,ë©S›w$?þy"üÖÇãUU“e3ejóŽäÇ3'Âol0^a³ašÒ5·ö É"¦öoÕÁÛžï«p9,w;³ÃÚ¿ˆáï¿.‘ Ù‡C¹Î—mÝ $ûG¾¹ós{3v†–+û€M½7Ù6Cz¸ur22c#±Xò±°àïë‘òQ-¶+!$ûúÚp¢QÅT~5¯°ÙðLusžé\ †·÷uµ‚*ÑÞÛÞˆ×þ׳ÿ"e¥åÈ…žF€‚:B£ªU@^ I?V°©÷&iÔß7вèúŧeRæÖíZÙ°ky2H²ü_è„A„a¿àè'WL@ +8Tö=÷÷eÛ­ Ã+l6LSuUçBG©ÊÏÚ~«¥‡Ýô-9lR$¡ÿ¸ý‹ûû¹Ywð¶•U¦êR*lÝB¦ï¸„âÇ‚²bòÏlê¹I›ùZ )MΈ$DVfÖß™Y ƒàXX èîÞÅÅØŒEåddÝxû(‹„XfÖAÝÜ»¸[€(.*ᇙ§o¿ön9‡óH@xõ켸-—öbå£Bše3uzËNY¥ôÇ”_OôžÚ¢YpæÄãíXì.ƒ>ë(þáË[¶­¦z³>„þ÷ë+VÛ/ºÎòeņ>ûåU©¼ ȶÿª¦…¯Ã—Ý+°hÛfuO³œç/W<,tìØþ§®Æ9/^®xDŽœØ¦)Q"QFÿZhüó|–Ugò{O-?‚(IVJÊñ› ‘¥„¬0YpæØ«[Å6S§·PV !c'· ®­¬8lBö~nxø²ûùT}/6ëÐTrpß·½§ï¸'“Z†sÐíÜ¥EZ{Ú…Çe¦ l¹ÿêÛ7 ™=[ËÞú¢½ç³Èt¤‹z¯”Þ¸%‚UM¦ãØÔkSL•" ¸v“Æ´Ë‹JÍ{›XG€€àZŽÒ¢§IÉ«O¯~´ž8Â{ÂŽðwa«QÃZö2½º÷r}¤ÐÒÃÙמLÏ-›Ì²ÿd&”½F9Q‘ÛïòÓ…X6½¥‡è¢‹'ž Fuá@=¾üð`\÷ì‚fŽž>vváI,‹¶n  ^Ä•ÒÒêÙ©ù¹ÈÌÚÞÌš(ru2aaíhf¥ŽF$’ĦIhúäÁû'€dÙ6ñšäúõâ´3IiPæLÔö;™éb¤ÔÄ÷~Û£âÖýÚvwn™µî¿bZ~9!$¿”ñß¿ßöoqëþÒbüuÏJ×ftP“¶†%÷®<»Rh;iX³ÖF²«Õûøb³NÍ ÷Ïë û¾í=mû=Æs œlL¤3mÊ—-NÞæ<ŠHÞ{½MäwósÓÇ[ú–³µiù5&§‚êK·B¥3uÿ·½÷Ïë½^o©‰Ú?¯÷þyû¿í-ŸÏ²ãØl &]¿ñª°×Ü¢³¿ç„íÖOlhK ž§Ss‚ÊHû'QP”›þo’Œ¬{{q =»š('íÒ›Â"‘():þN %ûîˆF |"Êõ€.yò"3MHW˜§)šR¯)éO ÛÖ¾³5pœ¬[•™õê#Rì#@¤µ™ϸ©=‘W 6fž†¦Mì >FgPå…iIV|V¬8¶–ÞÆòÆè’'/2ÒD´¢{ÿ…gñKJb2ÀÒÔ€Pð½ÜIºä¿WYY¥eŸBõIMOgçMrÎ&HL¬Íý[9ò"ß^K}\`ÓËÆiH«¬Ãï…ž®-JãÿNä {»p_åÙöòÞ•D4’+DKÛ•Ë$ ´¸Xˆ¦@H,È|Ô´YS7IÿETÿ»@óSòs™•‘$-5®ô#‘‰z55$øCJ‘ì)I)ÅriåÔœSEÖ¥n”]´ô’_9tÕÂe>#T¶}O#$d¼,¶íbcßË-ýj‘moO6!»àäým0ÃÍÚ3‘|:}½õ6ÊžvGÉ4¤7^«ž ÄßÏâgñÿX,z™ÒÎÛyü¾lò«@ßømB¦tBÞxHºœ/›—r¡'d/5d_¤÷½õÖÁ}¿Þr«Òql6*Q‚|Ú¹Wï6C Ù<”½ú/útXE²ÿ8ÿ¦°‡G×~]z’’ììü—on¦ÑˆÎþãÜë‚Ý»uØÜMwì_ Ä9×î§:æØu`îru”­?äk{¢ÌTPD_>OîbéìÓ§ûñƒ‹ÅÓ@_½Ë*öt0!èø~6BU»@ñó>]íx›žŸGKâS‹è¦æ$õ1*]B Ȉ9íÒ|ˆW“U³›Ê¯¸ W" $­ªÌÞ BaÕ$+¬è³¼*„!ZÈ?y5–Û׽ϰ_”7†dW_CnlÖž©ºŒªsþ‹L hëæãj½aZ/3#im,röÐ6E%"@ð>)û¿ÈTé#7å3€è2n¥Oï”7@H'¦ôDȾÁ*˜ˆá86±Yo¦ýœ­Ú“ùg=¿ñ5¯Ô›,߾ݿkcþôÙò‡¨¡x…ÍZ7 •eTh¬TœÙ,˜1 ]G_'’EhaQé{ÿz!•­™˜º´*OS e+z$óEþ*˜åe@U1lb³ŽLÒÜÕÊ“ ‚Ä´ÿ ¨ã“I´ìêç”–ø(µ„´q ô2IQXL¡ìþCCq›µk"¹Þ+/Ì ˆ ´ûò󖯓Föòs°6áqX1•‘[túÞ»· 9DÙ‰PaI_&ôÒä•¡²×L”Ç&6ëÁ$Œ¾Û}¤]‘|èŸÔÔ0¼Re¢¨ˆlŸ^­V661?#ýϧ1gP€/«Ædª.£RceGh„^ÇñßÄói IDÒM Ùú^^AÅ­›Êùèä»H‰)sDÑ”—PØ«Ä&6ëÀ„â¿NÜü«ÞÝÐÆåeœ½˜q¶â»Pß^a³.MF-Õì\$7i4¢|áÏpnåÒ÷é²Ïµ&Òþlb›ØÄfݘ2*ìÑË…!f7SkVãlb›ØÄfݘ…^v„>&ýs>õf5NÁ&6±‰MlÖ‰)G&ô‡¿ë ƒÑ/æŸåC¥¤f ƒÑ?°Ðc0Œžƒ…ƒÁ`ô,ô £ç`¡Ç`0= =ƒÁè9Xè1 FÏÁBÁ`0zz ƒÑs°Ðc0Œžƒ…ƒÁ`ô,ô £ç`¡Ç`¡S÷rz(©/Z_"Méîå`m×sÓ{Já8°«¿Kð±ìjºNEo p÷gQøXó4p÷Xè?Yt¼’1úʽ²~MTàÑYüÐ%Í <%0ÊitBnrs߯N¦Ðr[òaßP¯vónæ|ré1çFÊÙñ6„ŽõP¶ºŒ9™ÿÉ Þ¨ÁˆéZ÷.ŠÕ¦{[3@·)¡£'x•Ñ CQWBÐû+®89ýíåõzñbZ,®£v«0|Ó¯Ÿ¿ùß¼C±áû]sN¹}M µ®z‰ÁÔ=HP"àp9õí¦¡SGBÿæûï þùç³I“ºŒ#~þüùäÉuÓnUÛ uÛ†&¯›»;B(xµí›í¥“w-ïZ|gÓ„^Í]ÜZöùzk(Ÿ?]ÖÎoÁ]‘ôD:qOKðѬJŸÓ§B,--­¬l|ºŽ^ýwª¤{ˆÎƒÜ:3°µ»ƒÓÄãO-ܱ™“½£W§á?žÿ Pê›(áò²!í<Ü[÷ûfã‚Ïå»Ã’ôÛJÜSܺ‘6÷ÓŽ¹ýZ»;8¸·üÓõ4Jer„W¦÷ZVü÷lO+KKûþ»h†æ4îõ ¶LïÓÂÕÁÑ«KÈÆ»|ZÝñ²(Møýº²v锃Ýúl‰’{A}ØèòÅÎX PÁKuU9@Ê"&Nº¶|X{O6A þˆ(­\a•ˆ‰+ŽõŸ¡Ê§ Ê}¼ãë>-Ýœ¼:ôŸñÛãlZYðÕ{^¡€ë ýÉ釆Ù[Úv].aÞÍS(¥ž ÂðƒUâ£Ô+¡ÓðèU~ÿ€ŠÞú¹kÿ]q40Ml®;­ÜÓm 1Oeþ«Óz£.„>?<<íüù}û^½Zpöl³nÝ ž=ãß½[M+ƒ°X¹cBáÖÓ§ÎÚÇúæ·%þ){&M>N¼LHxöû𽦌«*nÊ1s2#///7'åÍ…Å×çÎ;ž*Yñ£+¯:m¼•ò¤ïå [³‚vÜ‹I޽·±ýËï'l V©IñÛ”¹7—^LŒ¸¾ÌùÁÅWrIÒÌ=ñ“ëo»þr'*ñýůY'n¼'`®³î }÷Wt0î·;>7//óƤIs*{}þQËŸïÄ$„Ÿš@ž2ûh2­æ¸4JÉ÷:ž™¡¬]ÒypH÷ø3gÞˆea:{&ªcÈOÐIǧVXU®*‰µkʬk¶‹®F$¼»ºÄîÎù—j#F*ô"-íÈPnձɻ}K6§}qài|ü‹ókz¥ß ÍBJ«ÒÄó²ÉW¦¹8N¾™—õxY60 >PÊ;¥$>ʽRÑÒqØÄ¾§Ž=• ¨è剓±]Ç{’Ol&4wOÇ)ÄЖrÿUi½Q^¼[ºÔ»{wÁ›7¢ädqffÉË—^íÛ¿ýþ{D×ׇq—¥;§Ð×o›Íûmn+Vä…3oZÎY;Ù߆dzï´}{ËÏ>Ë>phÚ`èP£_%¢dÕ*áÑ£@–#G~xóÆ"8Ø{áÂoýSGpwa‡ÙhgøÖõ…ë±Î PÑ[úöy>;òÄHŽcE7çvœY¸6ìð+ü'+uÉü³ü¨{'kkEO‹Dïÿ÷?¯NŠ<š6›7oAÀ›3‡02„ŠŸ)HÛ=®,êßÒÓ·ßòW-W]ÙÓ¨!Ö‰ÁhƒðÆLO÷€Åc7-îaXßÎ4Vjeë†*)¹Ù¢EÇà`ÁíÛÂøx‚Ç3»s‡´·é¢ ózöDl;;£Þ½ÿ»víó°0žƒC ú€Á`0˜Zܺ‰ÝµËÎË‹UR"ŒîøñŠ*Oaff8cHø|”“ãêå±zumxÒi¸)p+ý%=S"\ ÑñôO:J3ôÖRZc}¡á^•ºQóB/ÊËû°s§g‡…÷ïab›9“ ˆ2•—3œ<™´µ€’çÏ||Ò®\)Š­qg0:S1®†OûÔØéŸ ].k.­qCï)¦5/ôÑ¿üâÚªde‰SS€7u*ii)}«Lå ‚ ¾ý¨ü|Ir²G³fï–-«qgꈙ˜´†¨˜W]á¨-vVn!'ùòPT<]Ÿ5—;Z‘š ZÍ¥5®žÖ,z?Ù´¡†…^žžtâ„KÛ¶…¡¡@XZò¦L‘¾uýúõýû÷ïß¿ÿúõë@„áØ±,WW(}ýÚ¾I“¼ÿþËõªfýÁèŒ6‰pE/NœÊÒþÅñs‰´ö§cj<”úˆ5k<ýý©ÄDIVΚEA/^\¿~ýúõë/^¼(ÛÆápŒ.º¸XçÙ´é›ï¿¯Y”‚òÃ~Ÿ?¤“·“£§ÿ€…'Þ#³ kš£•)÷©º¸5—ÓµRÎ¥UÉ‘  >Gk•D¸*[zì’ùÄ¥?Ϙ~òä;I•ÓÃ.*ËàªÜ‡JþŸW•NI&s(´ÊšÉ­ˆæ „µÍê§5®ØS%˜ÕWH§žÔ¢ù„ÓÉ ì›óÛ7º7Z¤¦u%c§üÔÜU©Ô¤ÐÅÅeÞ¸áÔ²eÑÇ@:8pÇùމ‰ìe¤/dÏÔÆnÖ Jß¿·vrÄÇg…†Ö KJ O½)©Ç†ñá—–·~yå‘4 &Y…5ËÑ ¹OÕ§À­Ùœ®å¹s÷9Z%G®&Ùk5N„ (çú±û­¦Žõ6í1mœÁùO•Oï0´jWU>(äþ^é¹¼j'=f˜Ln0W?”2?«•;Z×àhjš¼W†² Ìê+|a3bëÎ/#—ÍÚQštjþ¼[m~Þ=ÍÛ@e댯q«þU©Ô¤ÐG,_Þ¤];QT•Ÿ†sç\nÙ=Xccci1“òÍzËäûï …˜OOÏ7ß}µ™ˆŠ>{ø±×7›}ÞÄœgæÖeÒ¯ßò@»¬Â*s´2å>Õ$næt-Ï«4Gnu³×*‡N¹p""pÚ ;X>ã§úÜ:~ç£ú³Tú "÷oõ“+Lnè2”PS¹£5©¶GSÛªÔf`f¨PbÙgÍÞi‚­_}1ò§˜A;· w"U·Î|ñV¿SÕMLý‰¡q u¼y“÷ì™÷¨Q¹GŽéæÆ5JñI›²}™âKÅáõïÏiÛVüê•0&Æ<0HNN»zÕiРšr¬TFZ&׳©SUñešÉ3—..{‡0%û2ZyzÕO;.?‹åŠ(„À kÿÌ+5ÁPÍ«š7²Š¼.Bì½Âï÷Åý£×XªÎéꮢ¯å¹sYÞ3ÿo»hËŠà¾ù,kŸî#¦ÏÝÖ’ÉOUác„Š>}üá‡ð{ο—U%¹Êk©æ4U>¨Èý«4é±Iù 2…Ë‹¥t0¹Aë2” qîèÕQÒ¤ÚMm«R:»Õ’¹BÃ6ã¿òß¹ða»ßô’EDEëÌoõ;¥ñP~ÚԘпûᇦíÚ ^¿¦‹ŠÀhÁ‚Ã…'mªnÝ”} ˜.]š;f ’H„QQîîîï–.u "Ù5æ›",'á?±i4xV.åY…—¿8=®ÊÒ$¨­÷_ÚÓÓÃÚˆ•¾H§sJr´2Õ yggSô,9Œ)p¥9]÷=Zpó®mð%…œ®ù4¸’ ωÚN}N×2x^—ì¸è¢g/4xvpSO«!°ãgÐÂYK[ÈFMpoa—_Î&Œ™V±\å ®ŒÑ¦*ù_ iÒc 6È“fKBiÙ)Œáb˜LnP: ¥RH[;ëâ°Ô²s•çŽVD£´·*æ­¶h_•’Ù5\Aê+”Ä¿!¦×Ä€×›—œ<<‰wõ IDAT>Þƒ¥²uå/ã%P“Wå§NÍlÝä<~\gÓ´iɳgÀòöæ Ÿ§TúJÕózöäöè„cc‹•üÇ5âXUXÞ#&t‰Ù¹hËø‚Âä§GoºUáF“ŠÌ¥æheªA£¸P+9]•æÈÕ>G«èö¼f#ó«¸]tÿØÔësïòÏf^ÇÏ;Çüqò]ÅýÎ*\«›'¶úI•N&7tJe0玦b¶õu켺ò±fiouɸ«cUÊ30«¯PðjëŒ5i£÷üßæ=»†Å¯œ¹ó­@uëÊ/^¦K@׫’q¶ŠÔ„Ð#ôfɯJŸ?§0Z¼HRQåAaEojjª¨òÒÍ~ø€¦‘‘n®®+WJ«ªyHÏÉN/r¾û]_Ï6CÖ„ûìRñw˜3—jš£jÐ$.@mätUž#W—­Š ìëÇþBŸõi¥øØžQ·¾’O{*ªÐ³*\«éƒI•N&7˜Žk:”Ê`Ì-IKʰéÔ¥òo h˜ö¶¦FSûª”Ï.5Žo¶bÆ^η{ìfJš÷\±wµsƺ‡‘ªÖ•ŽÓ%PÃWå§M äºÉ¼y3réÒ¶9‡!±˜Ý¦¹üJPPó¿þúkæÌ™°oß¾/¿ü²ªÖçNž\zã„I÷î±ÉÉ6“&yÏŸ¯{?IpNWèWÒãòÜÑä‹Uk›Þ@~O£ÔL®DÓo¾ÿ¾©¿ñÓ§H,£ï¾«ªòPñflU•'Âü‡€$!AT”«³sÌæÍâ‚Ýû$Á9]õ†ÜÑìv+î^À*© tU©çϘZZ Þ¾N·n=zHߪ¤ãMš4™1cÆŒ3š4iRõ]‚ 8¾¾ÆÃ‡€$+‹-ÙØØÄlݪ£{Ÿ8§«þƒsGcê¶nh‘èŸV­Z÷éC‡‡ ""Àâ¶¿?TÑqiù/^$éïïO’$TTyé Ibbz·nH,f™›sZ´xõêUß/¸öö5ÓW ƒidÔÀÖMâ±cæ¶¶†Žô×E úöeRy‚ –,Y2dÈAƒ-_¾äú^éñއ‡ÉW_UP@:ØÛG¬]«c?1 ¦‘S}¡§JK#×®õl×®èÑ#@Âhñb`Py¸té’ôijgÏVÒwÅ--"x<ÆÆ::8¤_¼X¯S1 ¦qS}¡Û½ÛÎÃ# cc€;hÛ×—I¾ ‚ðóó“žØ´iSÅØŽŽfÓ§]RBgg;ÙÙ½ÿé'ºˆÁ`0›j ½8??fûvwÿâ‡Øl£ TÈ7ìÝ»wÒ¤I'NÜ¿?S1é ËyóH33%%ÙÚØdÿûoÁ›7:÷ƒÁ`)Õú˜-[œ}}‰¼¡G9ÇG:µùñ‰¨Û]Ɯ̯ÿõ¦ <(”s|¤ƒ¥¥¥¥¥•µƒ{Ë€‰›n§Sõí”>Ñø„ƒÁ4DH·Y×ùy¹Yq¡Û>KÙ9yîÑüû5Fczá•é½V…ÿ=ÛÓÊÒÒ¾ÿ®ÅyEEo püã¶Y-ݽºŽßñ4þÉ®©}Z¸:8ùôžs2F$-Wp*ÄÁÒÒÒÊÊÖɧëèÕ§J€N;4£צ÷TYe[?wí¿+®êÄE…áçökíîààÞvðO×Ó(Æ:Ë\Ú:3°µ»ƒc·¶š¸§ˆ*¯$é·7MèÕÜÕÁÁ­eŸ¯·†ò)ñÓeíüÜ•ÕE'î r >š…*zâ4ñ|©B‡rïøºOKw'¯ýgüö8›VÑ®’ÂJ¼<´`pÇfNöŽ^†ÿxþƒ@›R„!°JÜÐìD©?í¨8‚š>½%ÀyÐ[¦÷iáêàèÕ%dã]>]y”&ü~]ɸ€(áò²!í<Ü[÷ûfã‚Ï]†ʨ:4™*ç’VÑ”öûü!¼=ý,<ñ¾i Üû~7;€zrï¿ÒJo)Ÿ Z+C%j{ W+c… •È›(~ûûøöþ!ÿ÷ª°ÒwW†îèFczî }÷Wt0î·;>7//óÆÊÁ?¹Õk[hL|Øo]£Ö÷_•wÞñTHÇaûfœ:öT:䢗'NÆvìY5Úâ'×ßvýåNTâû‹_³N.ÜxOÀT§¬ü£+¯:m¼•|?ØR÷aöŠŠÞ3iò1˜pâeB³߇î0õ`œšëRîIZÚ‘á†eG%ïö-Ùœöŧññ/ίé•~34 1¶«¬p•A¤ãÓFoÍ Úq/&9öÞÆö/¿Ÿ°)L¨ù)¢<°ÊÜÐèD†ÔbôÔòç;1 á§&Ї§Ì>šLWå{ÏÌP>.’ˆß¦Ì½é¼ôzdbÄõeÎ.¾’(T[>4öª<×*ztÂá)£7%õØp#">üÒòÖ/¯<jÕ3J ÊèÑL3A›ae¬DmOzÄT!c%€$™·W sÄnåå£3ÛšVÊï¢"¤Õ§1 ½Z8gü4ª…×ÐùóvÐiÊ›™yÑŒz›PზàZ7¶tjó°_LŠ.»SÅ÷ü™ß÷«ÁvJöp:ÍXÒچǵj;n¸aÄû4š©N`ûOûßÄvvœ;ôÐoÞ¦] Œ\}70ÿò¥×b­HÅ`iàóˆ(AGŸå7yåìNö<ž]‡«§º?úó/é%-‹-;šq\$‘—ÎGwúfåH? ®‘sÏ…ËÆ¸”ׯlh”y®Uô¨è³‡{}³yÑçMÌyfn]&ýú} Ouýªæ63tIòí-{î’{w4T<®r&(ñAé°ª¯DUO•ôˆ©BæJPÉû#Ó,x7àðå_¹r˜¡$¤Õ§wWafa.»X8CssÙÄ&ØlJ"½J#O¯úiÇåg±üB…tí_@ƒ9Éë2!ÄnÐÑ+ü~_Ü?z5ð` ¹2õ Ì-eM®P…ë ííä9<5q¯ʽ¢ù™Y\7{Ye,WOWÈÊÌ¢AÕD*zRË{æÿmmYÜ7ŸeíÓ}Äô9£ÛZ í2®•–œ&]ÜÂzqyÌLGɾ…k†ÀªwCň(A GŸåâîÂ.{éLdedÑ`R[Ó¸x±è,~ޱ‹‹…¬V¶“›+BÙШò\«èQi™\ϦN•–†ÚFFtÒž »=i`bïÛsÖÁã]IPøh`ž Z «Ê餺§Ê{ÄT!UÌT õæ%v!¦´·P¾žPÒêÓÈWô¡Û¯VÑ ‡.~èµüRX\zvnÎÛM=ØòŸ0gûØúéÑS¡¹k<®»¡šª4©Sêsµ½eòŠ´³³&'òePÉñÉ`koCÁb³(‘Dº ¯ B¨”zÂó¸d÷¹›wþùsCï䟃^ÈCLí2®0(,{G{ãÀßbróÊÈMÚÄ­Fß™«Üg NdD³Ñ§Rå°TjR*²u°•_¨ÒÖκ8%Uþh’$-©â8QmÏ™`989ãc+®Êk°þ²›±9™Iïïÿ1йÒ"”i&h5¬šL'¥=e C…Ì•°;/ÿs›ßµ #7<ÊU¢<5Òr·Ð“Ö–DbDdau‰D¥šÃ366áPÙ/O¬Þû_ùBˆt>1 ö·™[Â|BƶUñM‹:uG™WlŸ¡Á-^ïZ~$«;Q>qhÕ¾0¾@õü÷•º9+^ŒãÀö<¬ÙÓ«ÎFˆJÓl[:EÙr¥çË{Ä„.1;m¹ÿQP˜üôÈâM·Ú×/º=¯™ÃˆÃ|íWL3A«aÕd:)í©¶^©ª„ÛtÔîK›ý®NñÓm~e驥˿q =a4w–ãµ±Þ¶V•ŸºÑ V³IkÚߘÜÎÍÕ7p鿾.i²ÿÄ!Üœâ®_lªÅO¦¨¬Sw”yÅösø`ˆäàèÖ®ní&ž5šzøÀÔ¦,ÂzèªM}’V÷nâÚ|ÀúøŽA­Õmõtÿ•ŽU£:yºú Üœ=`û†‘²Íi%í*/\iPÀcâïgæÛÞ\üEs·&‡‰>!À¤:=g ,³ÏjNT‰&£Ïé6¬óË%½½Ü[:@;°k‚[Åë‘i\€Ý|î}’Öz»ùö_›Ôe@+6‡SÅ­šœK¤çä§9ßý®¯g›!kÂýváÖò\­ä€ò™ Ý°2T¢¶§Úz¥¦¶óÀÍ÷ôx<{ÈÂ+)”¼–BJt·Ò§wȶ`»š¨ S‘¢›s;Î,\vx„Uúå”úòªaF£öPÝ_*zKß>ÏgGžY­O­Šî.ì0í ß` {e½bþY~Ô½“{E_« ’È£»¯ñ‚§~Ùt­¾¼j˜Ñ¨=j½¿tæÅ?_zQ,ȹºzÍ9Ö—C;c•Ç0€…¾vÞ˜éé°£xì¦Å=4¾ [ëÔ—W 3µG]ô—´íÑÓèÊ¢þ-=}û-ÕråÑ•=j©)̧ÞºÁ`0½oÝh€n©AËi ‰™ÜжkÕèŽ âДî^Öv=Ësè%têþAÒlLƒ =¦@¹WÖ¯‰ ü#:‹º¤¹ }Ê4œ\ê˜FúÚçÚ­÷.ŠÕ¦{[³Æ4ßH97RÎŽ·i7Ÿ1 ›Ætáaê $(p¸µøŒ5ƒQAcz¥éC5I^ªP…êĶJ +Ïqªædò•i.Ž“/dæe=^Ö†­I¯Sžô½T“䥊h‘ض%9NUæVŸ«– •9lÕ$Õ%Å®X³0jÒkNœæ#Rýd¿ZM¦ã’È ç":Î[ÒÂ’gì°x¹b´ÕN#…ÁÔ.M±Ò¤š$/UD“üºUP’ã”1?°'h’«–©%•9lÕ&­~Š]1c+D[£^k1"ÕOö«Õd Š•§yülWWy´9ÎîN¬He~*›ªF ƒ©1гœ„ÿĦѠ°!Í5ºüÅéq•‘`”zž×À%».ºèÃÙEÁÁ ž^Aê5J€LÚÙÙ$òip%Až‡¶M™c„š2 i„I[;ëâ°Ô|v(Éa«¶ß؉­÷=Zpó®mð%•)v-Ø O±û™-‡)ŒPa%®I¯GD3OH(-«JEsZM*BùqÉ;;›¢gÉeÑNÕ"Ú:Ž£!nëFiúPmsáªMl«adyh5*ÃFXöŒT7Å.G³0jÒkmF¤úÉ~µš LÇÙ>C†û>Û¹âLd¾¨45tóºSšG›y¤ªŸÎƒ©J£zåéC5I^ª€ÚĶš&@V‘‡V“2Li„5ËaËLuSìjFMz­ÅˆèìW«ÉÀtœí7çÀoýÒ6ö÷uó ZŸÞk˜¿æß“u) F#p®ý§:9l?•”Â5šì·ÞÁÙ†15Îu£Çè–ö±¥®Op¶aL]ÐènÆ6HÛ=–.ê?ÿmáÐn 69l…7fúŒ¿ÄkûõÎÆ‘R¸žÑa¤0Á[7 £·à­ ƒi`¡Ç`0= =ƒÁè9Xè1 FÏÁBÁ`0zz ƒÑs°Ðc0Œžƒ…ƒÁ`ô,ô £ç`¡Ç`0= =ƒÁè9Xè1 FÏÁBÁ`0zz ƒÑs°Ðc0Œžƒ…ƒÁ`ô,ô £ç`¡Ç`0= =ƒÁè9Xèë:uÿ —¡‡2P¯S;¨è-.ãþ,ÒµAÄ¡)ݽ¬íznzO)§võw >–]=¬#ê(1Ÿ>Xè=u¬˜Ú5‡r¯¬_øGt?tIs¢±ˆ;S³4>¡G9ÇG:XZZZZZY;¸· ˜¸év:¥þ4ý…ô˜s#åìxBÇz¨Û]ÆœÌW£ÂÚ5GŽ‹bµéÞÖŒ¬IWµBÃ~ÕAU¨(êüŠž­<}zŒßò/þÀÃhJãzÒmÖu~^nV\è¶ÏRvNž{4…®o—0JA‚‡Ë©o7(çæ±Û¶Ó=ˆŒþwK§èMs6?×·O˜O„Æ)ô2H#÷¾ßÍ žÜ{òzK€óà·Î líîà4ñ|©$ýö¦ ½š»:8¸µìóõÖP~ù¢å‡ý>H'o'GOÿ O¼/F€ ^Z0¸c3'{G¯NÃ<ÿA +Ìp\œtmù°öžm‚üQªÄ»‚S!–––VV¶N>]G¯þ;UÒ½oçÁ?í˜Û¯µ»ƒƒ{ÛÁ?]O£4¬å>ÞñuŸ–îN^úÏøíq6 •÷RD —— içáààÞºß7|.ÝfnTŽðÊô^«ÂŠÿžíieiißW ¨0ü`åS›SêO…¸ÚŸœ~h˜½¥m×uáæm¦8«§ªôK]aªüº¬ß‚»"ii:qOKðÑ,¤¬Z%!Òjz6Ã×îšÛ§©ÏÔÝ¿…‹Åb)™6ŒµÐ Õ ñ£+¯:m¼•–vdHòžI“Á„/žý>¼pï„©ã¤ÂF'ž2zSR 7"âÃ/-oýòÊ#!ÐIǧޚ´ã^Lrì½í_~?aS˜SQ»¦Ìºf»èjD»«Kìîœ)©ê˜ù˜“yyy¹9)o.,v¸>wÞñT¹‰Ÿ\Ûõ—;Q‰ï/~Í:¹pã=FuJÞí[²9í‹Oãã_œ_Ó+ýfhV%É”Dü6eîMç¥×##®/s~pñUy%Ê-‡;hßýŒûíŽÏÍË˼1ǃT{ŠZÌÇœL¾2ÍÅqò…̼¬ÇËÚ°™Æ)ÎÄSÊûU>U†r•z¤¬Ú*UAõ¦‡ îÂâ±Û3·/숿ê`4£Q =]’|{Ëž»dçÞylÿiÿ›ØÎŽG‚$ò™7-ç¬ìoÃãÙwžµvšgØéËñPÑg?öúfó¢Ï›˜óÌܺLúõû@õáÜ¡‡~ó6Íèêll`ä°è»ù—/½3—D^8ÑqÞÚ–Ö¤N€Çes MŒ¸\3·Žc×­n_±Œ$òÒùèN߬égÁ5rî¹p™b%JU`5§¨õGC˜â¬¼tÅxVˇò©Â„&ÕVozþ³dȲÌÉç/-ÿ̪NïU`>eIz ´'ÈnA˜Øûöœupãx—â@Ú9ÚI¿ ÓüÌ,®›‡½ì:f¹zºBVf ^,*#-“ëÙÔ©Â%N¥%§ B·°^\vˆ0•MSÅÊÓ<~¶‰««…ì:å8»;±"«8YyzÕO;.?‹åŠ(„À kÿÌsKs©‡kE!š¯¾N–÷ÌÿÛ.Ú²"¸o>ËÚ§ûˆésF·µT :‹Ÿcìâ"¯„íäæÄŠ(s½j£êâ¬æµþhSü+–bˆgu|(Ÿ*LhÒ5&·UN*ýÍ›\߉AMyj|Ä`hœBOºÍº¶¾Kù_*d—igg#|ȧÁ•*9>lÛÙÀrprþ›Fƒg¹Ö³ìí—¿8=®âó T„òã’wv6EÏ’óØ IMJ«òÜpxá⇭÷_ÚÓÓÃÚˆ•¾H§s´Š%4i§¾Nž×À%».ºèÃÙEÁÁ žn®P‰­uqXjY%iJ+a‚ ÒêIeþh/õLñW„9žj}PÚ/y‚ÅfQ"‰ì]º ¯1wͬBULn«œ,ï…wSj!Lc§QoÝ0ÁöÜâõ®åGÂs„þ³=Ë÷ǵ9¨ XÞ#&t‰Ù¹hËø‚Âä§Goº%`ùŒœÜéÕ¯‹÷=Lü(ä%¾¸üëÔ׊€é8ÛgÈpßg;Wœ‰Ì•¦†n^w*¥Š<"Q©€æðŒM8TöË«÷þ§d¿‚ÏêëÝÛ0eõ™§q¹ H„EÅ·7ؾƒ‡5{ºsÕÙ¨QiÚƒmëOW­„ÒÂÚ’HŒˆ,Ôø &µþhSœaЧzT÷‹åÙÂ[zêBL‘¸4ãé¾ Ç¢)æj+VU­é! _×ÕiÀ^ü˜F+°Ð+ƒí;çðÁÉÁÑ­]ÝÚM!À³ýæø­_ÚÆþ¾n¾AëÓ{ ó¯òÍŠÕlÒš…ö7&·ssõ \úįo57Þ4¨Ó ëø¯,î­ÕÉÓÕoàæìÛ7Œ´«¸f7Ÿ{`GŸ¤uÞn¾ý×&uЊÍáhxǰ š;ËñÚXo[+ùS7jPï†0ÅY¦xª÷Au¿ë¡«6õIZÝ»‰kóëã;µf3W[©*¨þôÀ`´‚è2n¥OïmÁvõí ¦Á!¸»°Ãl´3|k€A}»‚Á`ªÅü³ü¨{'ñŠ£yqãÏ—^g òc®®^sŽõåÐÎXå1˜Oü£iÛ£§ÑÒEýç¿Í Ú \yteO£úö ƒÁèzLH›®ßøçÛúvƒÁÔ xëƒÁ`ô,ô £ç`¡Ç`0= =ƒÁè9Xè1 FÏÁBÁ`0zz ƒÑs°Ðc0Œžƒ…ƒÁ`ô,ô £ç`¡Ç`0= =ƒÁè98©£W|øð¡°°0''§¾©E¬­­ÍÍÍ›4i¢ôÝßn½‹Ì(x›YÇ^Õ%›Ú·p²œÕÇOÃòXè1ýáÇAôîÝ»¾©u^¼xÛ´iÓJÇwÞz' àÈìþõâU]²üÌ£]·ßÏù¼¹&…±Ðc0úCaaa¯^½´ü‰öOÿû÷ïW=•^phV?šÖÿ¬ î:yÏ߯BÁè999Aå¥(Ýžz—Ùx"ð,NÓí),ôŒ^ÑxdŽ Ô8‚@„úBr°Ðc0%¥g¯þ‘K,DÓ´‹£ÛÈÁãLŒMëÛ55 „jJè?fgß9q¼('‡ BLQöžcÇr>±_ØÄBÁèºËÜó×ÿ]øëôˆa#š´päç¤ Eb3c #ŽÙ¦Ý«úõÔ­cÏñST¬géšz„PØB;sssââDeääDS’£ËúlôïŽulBG´XÏc¡Ç`ô Ý׳â£? ™–›PRZ$‰(šÊ-äç¿C÷–ï>¼044jÛ¢}M9\ãÔÈŠþÕíÛï»òŠ33…B¡!Aj*¸{x<:w–gbìê«éÓõþƒ) F¯@º! ÚÓüü°T,S4…€–V^X’ïÜÄöòßg ‹M^öIDAT BˆJ=5ÖÓ}ä±$J~¾8zW'¿™eÓ::¢ÆÐ@ëö_Nzæ›Û·Zv옓–Vš- ÅÑòú?fe¹yxüsè D ;…Ê92ÔÂÔÔ{îJzD³¥—õçÛâ$:;Ãô_¹C€…ƒÁ”óìÕã!_ÏÈK,‹DB‰„BPARó‹²{|ÖíîÿH§QÛ¶†/µÿƒ@øvûôµé!{~îo­ÕÎBB#¤ãΟëöå—y™™%YYb@LÓ•D5?-ÍÕÃ#üÎí²S¦ÅgWí Ê @:{¢ú?Íc‚…ƒÑ+t\&GD¿5·2)~”«< B/IÄ" É¡ãbdËj››v'­œ¾ã­ äÅ/3~-™ºweO3@ÑyÏ÷Ïé×ÊÅÊÌÒ¹õ€ÅF—"„óï–qݼì-¬œ[LÞöo¥Â›ê­èuÊçg°X¬">_TT$’H$•ÂKÓ!GÇ/_”;ƒH§Qß*ܽú„ìëâhˆSÿÙ8®ksGK'ï>¹Ÿ!ÑÕE„*}« =£Wè¨Ù¹YEÂ<¡P(KhD—©‰D,ÉË)().•H$Åy"‰¸LoÌû¬Þ=ù㦯'Mœ²›=ïBˆJ8ËÆ·ÇÈY߆ø[Öì~>¢AÇVNÎÅÅÅe7`iŠ @Ó$‹UV&39¹iû޲†¢ 4é=é§±Ç'¬ücôF©Ó4¢23²¹nn¶„´0áâáY™ÝD§u6¡Í–xEÁè:.Û·é|ëÖ-KSš¢òs?ÆF&ä*ÖobhþßÓç=:õª¼ºD'ííûíI(,*£0ýÀ—ñ¼-Ý{évèÝó›’Ö ùæ\n5÷nj)¡Nƒ‡¾ 7´²‹D¥ÅÅ%?Rb±b–ÎÎéé~ݺWp!„a×…‹?{»íçùHvl쬅ɉ™²›’¤ød°µ·!ª4«5šÏ ,ôŒ^¡£vú"8!*#úuRlD¢ T¨X9Ï€¥¼­»XYØ(Q‹ô=¥Ë‹ó÷Áè G§ÊÉ_‘M¿þaœÕÇùã?,ŸéŽ”ü>ÞߥY‡‰ §ìÝ;Õƒ¬'5ŸD—q+}z‡l ¶Óeba0˜†À­[·‚‚‚ª<ö­E‰D¢ÒÒÒL~ú•[çÄ¡‘±1‹$ 9lv¿^C\œ\ Y ÖuI’ׯ_ïÛ·o¥ãW]¸÷ÓpJ‡MÓb±XPZZ›yçV^J²G!$‰ì›y{÷øÌÈÔ”Ç3är¹$YokeIö^{þéŠaª‹Í?˺wߌÅ`ô m×z• I’Ë嘘˜|3å;Š¢ŠKŠ¢LX,›Í&I’$IéS75è¶¶¨h!¤s>z‚Ã1`³9††F¶ã&Pb±D"‹Í60`‘$ÉbI%¾ß“~êƒi¬è(ôR‚`³Ùl6Œ”ej,kÂÂÂBi ùùù:ú ÕB_SB,6›UßRlÂÃÑFE% éÙ5⌠Ô‚…ƒÁTŸÚôj íJ݉KËRñn-9£UµXè1½¢׳ ™ºYÑ7dðŠƒi¤XZZÒ4M„.÷c>$IÒ4miiYõ-w M¡ãýØ‹$%4íï®jËH,ôŒþ`nnþþý{???­~g¦éˆˆssóªoµt¶Úz=|~ÿÖ,HOƒ@ š¦·ÞxÝÚÕJÃ3°Ðc0úƒ——WLLÌ‹/òòòêÛ—ZÄÒÒÒÜÜÜËË«ê[s[l¿ùvÙ™§/kåhÁßݦµ«ÕìÏ[hX =£W4kÖ¬¾]¨gæ}Ѳ¾]hp࿌Å`0= =ƒÁè9Xè1 FÏÁBÁ`0zz ƒÑs°Ðc0Œžƒ…ƒÁ`ô,ô £ç`¡Ç`0= =ƒÁè9²óÏòë× ƒÁÔlˆºw²¾ÝÀ`0Lmñÿ–¤È1Ú³äIEND®B`‚pyspread-1.99.0.1/share/doc/images/screenshot_print_preview_2.png0000644000175000017500000006524713604423136024631 0ustar andreasandreas‰PNG  IHDR¶Gº©– pHYsÄÄ•+ IDATxœìy|ÕµøÏÌH£Í’¼ï»c'Îê,6Æ€³°²²7 ´Pèë”î}m_iKûÚ×þZ装ÚW^K¡ík $@ v d'8‰í8ñÛr¼J–¬ufîï+ey´x‹p¾Ÿ|Í™{îÜ™¹stνw‹ÅrÛW~‚ ‚ Ï/a*ïyæ®Ú:Ó•AAdVÐXû¨ àˆÍM  Ä&N`QDEQDq–Š\báÜU[k_Rѯ…~ê‘¿„‰AŒEEQDEQ¼lD¡¿Y•T4Š„ÐÍÀ€ß ª‘ÅXtPDEQDÅËK¤¨Àø·ª3F$Ãv#@wBEQDE§O£žÂÁbÔ}%@€e@‰V$CXÆï0B£r¡²n4"†ûEQDEQœ>1²NÔ}`~^âm×§'4jÎ㻇ÿþ¯³gڙњò§€‹„&%ú Ddˆò÷(¢ˆâŠlÒöóËYÛß^üh¯}ÖÔ*XT%íØ>¿œú닾34kj…"ŠW°0±§30,Çì¸yÑŠ’4&Ш¹¼TÓc·-?ÞÔóÜîÐ þÿ`$Ñ@ˆÿO ñìª! Ÿùïwe5¿ß"Š(FÓ]Ÿ\rƒÉó ^o·¥÷í÷[÷‹a÷¥·$™¨]E‹ÿj=< NÁùkH¦¡­PDűbdÿ¨ @à±Û—ÏËI„10 ³¼$M¯]þ³ÿ;„õk`ýÿK$"ßî ‘ÐbB¨QD1v¤Þ~ÿßž~ÿ§¸’ò²îßX8ŸWRûžöÝÏüúÃ}CKftkï¼î7W}:ŸU¶+[üUÀâ¦ÂùüT‘¯÷¹gßý̯?Úg› ‹"ŠW¼Y'¾„¬˜›NýƒÏ>µ÷W¯žô xéo5ìøÙn(ÍMZQ’¢d`T¢!ÀHðÐ/k€†7ÆâW¿§‚"Š(Fèÿ’$‰­§º›+Ì â§Ó–¤-¬PÓí uüìEëª +XÛ_ÿøáÞáQ[‰(ôvtüéíÖqóÖeë“UåÆk+´¼ô'8‰l7Ø¢(¶˜¼ã¡£,þï¹6sòúkò*³ &NìïîÝýÞù½°èÆ«>_ª>ÿÞ‘ŸžpaÞpÕæ«[þuä¿>2l(PÃ!I?v_)yÙÒï]k´Ÿüè[µ¶ø%K¾_mêÿàÄwß·g”/ÿöÕ†þã'¾û/»8Ó'E/QáËß>²ê¡_ÖÊ·ºâ¾¤—åQ•Å©5_üí.òà†…Ïí:U×z±z±ÓMË Ž6X9p¡“éÐF€`D#†ûEQ /ˆ¯= 0ò(ïol|ªæ¢Å#*eÕ˜­=§Ï÷è*øí#«|ª ì¾ 0™Éqô†Ý¾nÁKûÔê/üf'9ÕÖSUš³eM Ý”•d t6#ÝÅ(Ú{xî‘UÏ=ºê¹GWQ‘òÜ£«ž{tõs¬ t2$Ðõ ˆ"бˆþûŒaÕ¹ Ò 9ý]”ü_KÎCÇ»»<Ò¨;Tþ$9|ÔÛãt6u» @‚‘g%ô”íÒ­Àªd‹'{1DÉyèƒn‹W"@´ù™•fFìîÚÓæ¶XþÕ.€>ye/tv0D¸Ô”¥f†ÏJY¤oG÷C:@ø}Iß`“›°I¦m\QÓ7è‚S¾ÖX”Ê€8t¶[˜'E/1äKêPèçpû¦'´<Ç0À0 Qs÷Þ8ﺅ¹'Îu•¦ß{ã<Ú¿IË«Òt_™¥“üøØñdÍó_\ Ï?ºzÇ“ï<ÿÅ5TsÇ“5øqB@5‰"Š(FýÙ²µÕ¿]KD¯ÏÒzá­÷šO{p€ø.â¿åýˆÿnâv úŸïü÷?½Gö“2Ùâs#[N²H 2F¯ಊüH1ø!‰F #Ø5:¯¯ˆ[VdèNL42‰†Þ!¹V@€@Ø}}¶³ÝRU¾qÎsŽÞwúÝî‚ꌹŮ|-#õX›œjΞs„"гX þò¹/®¦¢üt~îÑÕ;ž¬QÜ×Ògw{E-Ï0^AüÝë§NµöÌÏK=ÒЄ<°n¡FÍ·W´ôÙ`ƒíZa$ tæÃ0Òö_¼ó»ÇÖ€ìlÿÅ; CaY EQŒ.ú‡I'v¿ût½4ú> ¾ÿÊ‘ŒÞ:" LÐF2Æ®_Y:ñæ{¿j[ !LM‰`€ 9<¹Ððµÿë9Bs¡ábNJ¼Òâ[ jp]<Ôì“ ¸ÎöeÏu KÆùKÒÍ¢íí³V(Ï[T–šÀ’®Áš-UçEg±ÈžÎ¿{ÌïlrfÇ“ûžÿâõðüWoÿÅ;c÷•@êì³eÆ?ïm<ÕÚSÿðmK_ÜÛðÁٮ߽qês›@GßB»’1.€£øH€!ä_ìûýc×ûkóó}„ŽU D „PDÅÅ`/ t+}\b²2½_ƒ·Ê¿$ DœB€M0ªÜDÁ®_;ðPl l£Y ‰gsç![rufö†Â¿µ ÆDóÒEÚ†S»:ˆ0Ð}°;ÿîÌø" ¶SÝuXC®Uø}¥žNk?1¥&ê…®Îçs‘¬,Ò1Äw®Ã!BfÁIAÅËE$»ø_ìcFžã„ÿÓèÐıûóÖÑ–Ïm^:4ì=Úб¬$ë“7ÍãUì½7Îsº}§Z/Ò.e÷Ñf 4„0Òwø]ÆïPÁž 7ð¿ØûûÇnxàç{C¾GEÇ!ŽÜt„!$dk` ú`”rðV ü%2ž?¸P™U²æšçWûÞ{å½?´H#%@•G×Jî^ˆ§ï¥¿×ٯ˿úæÊjVèë³~x²uw—DÉu¬Áz[f"O<Çê<¢FJ¿¯Ø3xΓ“ª…‹µ¦Ó!™Yq¨±K˜'E/1²N¤}Ž4t®.Ë›“ôŸ®4éyZϱŸ»u‰ÃégÚûŽ4tÒé #w7SyÏãsWmµwÔC …aCK I˜ïQDEQDÅ陈:$ü¾@Pqð™õËÊçe² #8ÖhùÍÇo`g `Ì^ÔXû—½xUrþ"¯í¢_ÝÊ$~½1 E EQDEQœZ1‚Ž¥}‰cg-ç;³’ZZűnŸØÑgÿíëÇw>/‰’ÇÀ¾sZë)yfíz”MÊ"Êߣˆ"Š(¢ˆ"ŠÓ'FÖ‰øtö#r²¹§®¥G‰%¬ÄH ñǪF'B&=@ ÛIDE‚Å€‚"Š(¢ˆ"Š(N½ö)Û¾$  a†0£Ç!ŽÙ7tfº]‚€U$ãßEQDEQœÍ¢ŸQoz <ò †!$q» ˆ"Š(¢ˆ"гYí"ø¿aèdeºpKtq» ˆ"Š(¢ˆ"гX àwþöøí€ ‚ ðà - »’$ÍheA™]°ÑUAùø.‚ ‚ (­‹0ÓÔÕÕÙl6«Õ:…eÆÇÇ'&&Ο? ËD®ðbC`ðŽ@‚QEW¹´ÔÕÕ ±ìTF8$Ijkk;}úô‚ ¦°Xä²/6 ï$„Yç"Øl¶¢¢"†aA˜Âb9ŽËËË;þü–‰\îàņ Áà„0YaÏñ.B€"BøÿJ„"ù¿BBEú÷æÙ鉺­V+˲Á虋̄M¬È×&XEQ¥REŽžÕ××Ûl¶¾¾¾I¶É€ÑhÔét‘Õ-–§Ó„°,“””•©R©§°&ÓjbìÅ6%Är±!1ræÌ›ÍÖßß?™B’’’æÍ›7UµºR¹ÄÝïžã]’ä/V"D’»KD"D" b“¬CÙ²ª0Üíù K”ˆ(I’D‰ˆ„H |ãÿ›UgûÍ%ÓÔæ³œÉŽE 6]3rzý € @ÈÈÕCˆ$Ÿ`"JÒË5çé¦i5¡Tš²Å††BÈâÅ‹Çwü³ž'N¬Y³f;?~¼¡¡aîܹŠ[ÎáóçZŸoÎHKS©8›Ín±XŽ;¹|鼂Â9“«õ%2¡Hgggggç¸vÉÊÊÊÊÊûý¬âQëêê/^<µAæÉ[__K–,™|5ZZZêëëgÄK$éäÉ“‹-â8nö´v¿’D6_[¤PrÀçøKÍÙD£öšE™tþ´§!Â&JäÖ늨i¿¯#I¢DQò ¢OÿRۋ΄ïåööö¶¶¶qí’———››;¶&Pòd£¡ Gä?ö ô ›-&Àf³­Zµ*fõˉ‰]ÜK—.}÷Ýw79†¬ ç,™Ys 2ä/SÒRæ”ætö½ùæ{}}ýåWM°º£MdÈ–©5Ž®®®ëªW z†e†e€†ùÄk¯½¦è"\Fˆ¢xâÄ úÕh4cq²ÅÎ;W«ÕŽ·X«Õ:1w,‰‰‰ï¼óΔ5.!§®®N„¥K—NÕãœâõz§¼XEC£eùO„}bí~G•=ºd*Ñ ATˆ€†öA|¢$ˆ’O¼‚äD¯O,/I¦A‚¨:Ñ%,ííí7]Ý*‹ÿóË—ï¹Í«ï¨n½¼²—¹m-ûÏ·¤ÛoQýãMáŽõš¿¿î¹s“nïfÂ.ÂM7ÝAaÏž=—ÚE‚Î_èÅ3úô>¯ôÄÇÔî!.ÐÕ?¬å¹Ì丨&º.·lÖF5qáÂ…’’—ËWp~aÂþ¯b›ø¼žºõi¥iùº¶ÄQ[S³’×ÞuÛ?þø×„„†9ÅüÅl¢Ë >×wx]Þò…yq:.ir&‚Oº"„–e_Ûµëæ›Ö², ¹ÿÇÕÂíííííí8) ÃäææF¸Ã£Z8DQ<~üø… Àçói4šñ–µX¯×«ÕjÇ[ÂÀÀÀ”Ôd:J‹¯× ô¤/[¶lªç>ŸoJŠ|ÙLk/lƒy4NYGŠx+I’D™›“ §K$‰ˆ’$ˆ’ ˆ^ŸHó Qu•Kò·WêŽ×|ïñŒþz‡Þ©;®ÞtÙt5+9غãâmÕšÛW±ÄÅÖ¾ó&3!¥Ž(Q{• t;Ê.¡C‡®¹æQåáM>@Ð8…¸Íˆ2 ì$Åê!!ÐÕ?üìÎST¼vaÆÆªEoi?T‘ªm[='vW6Sînj:o &èNµ0 ãÿÇX[!5 UoÞµûù/MlÐ@° ƒD ¶þÇŸá¼åµW¾_6Çxv*LD†e™[Ö®eÇ8ÏîàÄÀowÉ+ˆK “ÍþQ„¸Ü¾¶‹öUK²‰Ò¿‰!/ ÒØ€ J^!¢Ç'®(N¦GUg2mxçFÝ7š€ø—0îêt>°‰ëïã4:µ>ŽÿΣ#=Øã_3NÆ‚ RMå,å±×\s ýRþnù\$è/m“}KŠÎ~$B´¼ÿÒ/Ì0mª* aLÜRžÛ=àl½h Ï*–>ö»Ë+a|‰ i¯Çy²S5hH´ ËŠ`Y`YààXà8èí…„4MrÁò¦Æúyó×bˆ ‰ Àl6Øõ¼ÆÀñ 5LÖÄØã eÙ·öìYwóÍç”^xñ½ m=Öom ²È0¾(E+„ƒAÿÚ®]·¬]K­ì~ë­õëÖ½ñæ›ׯßõÆ›6lØùúë›7n|m×®Í7¾ºk×­7¾ºsçæc¾3®ë™>È;::*++Õj5ø}îÉÞÓTìä¹ôu\­VWVV:thJb S^l¸–‘{ø’œø€f jø‡1úÇ"H¢ä§µû•$ÿÏ»y¹ #¿-‰\,‘?u•¢‘¤H§U$„Rœ(HEÉ'Š‚Oò‚H¤Xt"_9¶Bþo§ëŽë ÐßÚ†9gˆSéãx£[2&hô:>d— \¨ÝÝݧNºæšk@ÑKáÔ©SsæÌIOO½XewCþ%õ'=þÏ üW>ùÏ'Œ79:b"3É…¦Ëб³=Ë‹SM|ØÜ×vÑž—×ÖãH×ÅnâÊfbÝ¢bÚØÖßÛíŒS™¡s€ ³@8ŽáXàü.a$Ç5\jV¾¥ûè¼ñ¯•bBÏÐËJ£®oëõ qv‡8IQaYvÝÍ7³,k6&Ð_ó,ô÷Ø[;º‡]Âÿû·dåÖ‰˜ê몜nGõuW;‡®«®²;¬ÕÕU6ú×>X]]584P]]5h믾îêA[uuÕÔŽ"„ yEE…Z­¦/j éž&p ŠÅJ’$I’â!LÕ¸‡GñF£N?¨ÕꊊŠ#GŽÀDôË&äÓ4%ÅF´8=¼xö0GcÃtCTH&$"ÒÔaõ ’Ï?ü2¼>¡¬(‘†C¢êL¨ñüܹ^C\#%´t§ŒÞîðË™+&b¥££ãôéÓǰ(JšãTÇ2 CEIÇwúôé+VL‹pøðák®¹FùC¸ýi&8¡4êBà dd¯3öÇ5Aó 4ö¼q¸MÇ«æå&„˜8Ûa«9ѹ©*a~ÂÛÇ:ÆeâÊf 9 9œBJ¶Ú:ßúÑÿ‡ t3E°9~ð“G>½¹Ðn6Ùû&Òõ+›0À÷ØãÏ€G»}’&¢Â0 ýeowX†¡±—kê¿zÇüÿ~³kïÑúsÓ&U>ËÄLþCà¿ï½xìîë ¤„Œ|«4éÃHØÑѱbÅ žçåDÀ¾}ûŒFc\\œÑh¤âââôzýŠU©Tr±»wï–u4Mˆ‰”””ËÚQ „ôöö:»Ýn·ÛéǬC›B¥R­X±âرc ÃŒk˜¡Óét8!&äbyžŸX±Q‘{ø³¥ ü‚DF2 þ\C@¬šŸc÷+ûí^Aò?˜É+ˆ‹ ’ÌÞj&àô.…èT/Î$$Š/"JD¥‚ “?Bà¯*-GðúDº$šÎdÚðÿ^÷Ôw|÷Ëþ›è®/î›O ¾þkjj&`E„»Ý!‚׫Q«Õ*G]A}>ŸÇão&QÙE ù…àáþÉ!?­NÂ(ç2È9ðsbluº×Æ« €À²’†;Tß­Ó¨rSãä;z'Î÷­»*¯0Ã(Iäú¥™ô"žè‰%Žú¿ÿô{O¾´ïÄ_béêû¾ûóÿØ\À€Øõöý÷çöœêöè³—nxø§¿øâ5I!}›²±þù½ŸzâíNòíO¿üó[s8:_üĆ7ïÞýǻҦ¯ƒœBA5#€l|Fšèò°Z‘$Éá4êyB€ç@5¡~*Ä„äö0~hØIDÉ”‘¢b@´'i"*,ì_·Že˜xs’ Ã;;ð·ïn~qÿ_ÿôNûÍWO$»!à »ì£ú†ÙyÄr±ßñ_Û—B‡ 91uÂ}>ŸÍf3›Í4ì/ŠâÉ“'-˲eËT*•Ük\ýõtxÇq*•Šþ}AH±òûc¯¿þzúAþF¥RÑòÕjõ=Ï|µÝðô€‰Ûú÷¾?ß6®1—‡߫ºÏõÔ±_-'†}ï}yáúg;D&îî?·ÿϦˆšL&ƒÁ˜˜(Š¢ r“Ê“àc_¶lÙÉ“'9Ž[¼xqì‡o6› Crr² ¢(JháŠÅ†œ÷ ÷ð%Ù ázx98ïÿ+I1öðt¨ç$J• Œ$@Ññœ²NÀ‰ »Øl¢ã |÷Âë=>qiauq¢êL¬õ(w¬Sß¾J';MŠc 'Æ~ðƒøøx0 ^¯wppÐjµy½>­Ö«V«8Ž DDŸOp»=ƒƒƒõõõCCCÃÃÃV«õ;ßùNdÊcèXÙàá׌<¢5莊Ñç^‘µBLÌËMÔiTMVÏ%™´„~»§õ¢ýêùi‰úÀÕ9b"„±ê@wÿÏ.ÝÝ¿xûÙE)Îÿù»¶m1=ðõùìÅ?·åIÛcÿ<óÞÕ¦î=ßý‰;¿<çì61!Ê:ë/þö+?—;dÙÔòí?󣚛Ÿ¹A+u½ü¥Ÿ©¿ùæÓèL’ÆÑë4ZÉærC²Ùðä×?«â@Úµ Ô¨Xà8P308ŒèÔjÔðNBLõÀÜÿÝ_[;.>ûÇççëlÓ51ö¸B`X–Ž °ÙéSÜ2àL2rvÇàºeI|§½»÷¢Z=ìΠòFƒ™ #°g;ûÞmâÍÉ*Ž…°ó+'2h¹§§§±±‘Â0Ìܹs“’’NŸ>ÝÙÙ¹páÂày0,ËÒ¼Àˆk Q#+?Ìh±¢(2 #Š¢l+ª‰ˆ¨Wýw»ðßàÙu_ƶ°½V¸ÏîÞëXõý2U‚êÚŸ5Ø~ž7*ú´/rÐn‡>¶EQ$„ȉÅCS©T .<}ú4˲ ,ˆÅKO„¿‹ òÂÛßß|ÞSS#¹˜áo’=|d+Að1Ž 5 «$EÕ!Ÿ#’DQÌI1 AtÁQ’4¼Z’H,:‘oÈ[ÿþ†ï¶•#gŠÞôÁÎÁnsŠÓéŒ×jµF£ñÂ… ƒƒƒƒƒVÇ£Ñhx^Íqª€‹ x½>Ç388h·Û³²²èåêt:£RŽ"9r¤ªªJùC¸ýå³çñŠÜÓ°}ÝüQÃI€ùKä…·ÏÞU]¨âÉïcÆÔ Áý”›bÔñªþ!·N£Û°·4'>0ü5È«ÙD(LâÿõÿçøÊ‡v\ÿø–|0_Õ^ßèYñØC×eê(XûàóŸy¥¡[Üh ºÃEeµ­Mí%7­+ŽÏ,Xw•ïÉsƒd üõK?e¾þÆéÓì _ýýýtüsUUUIIIQ‹JÍÈÑxOt/ÓA§µ xÖï"¨XШ!N€V ¶®¬ì‰,b Àåö°‹W1F¨™Éšˆ Ã0ׯgX6ÑœDïæ—ö¿÷Ʋ¤„”Ïl¾ê÷oÿÌÀ]«'µÚ¼Ã9Exi_Ý÷-ûÖ›^y÷£ÕeÙ Ôk¤$M0»ÑØØh³ÙäÏ ‹¥°°pxxØn·Ë`YVDŒÎˆ¢ØÐÐ k³ÙH SN‹å8ŽÆ'T*ÏóòÑT#µïÙÓ}ÝWÊÇ=+3ù).Š¢×ë>È©÷ Ã0*•ª°°°½½ã¸yóæËKðz½îr±o“¥Å²,;88|Þ#»4uXéPÄ ‰ å±zA’D‘T–¦ÆØýJ„G MÖ‘$‚Oò âÂüD³—>‡Ë#tôÚCt®]˜AbH4ø|"u_ä ‚ J!^¥Õ¨iå£êL édn¿™“†GJö"x ±ÐÛÛ›m0 CBBBnnîSOý,ȇ#0:—‘›››˜˜'‚ÏçëííjBÙE¨ªª ùê0ZžÝGÚ{¬.¥Fy—#ì¾!÷G.¬\œnÐp±÷Á«g©@’I«Ó¨–eÒtê€Û!&Jh~_ŒÆÝO¼ðÂ~íÍ?¬äØ6½ð×ߨô¥«Œßùý?ږܾ6ô½­RÖá˜99g÷î>÷©MíoUn3wÿmÇO¤¯¾~wÆ´¿;¸ !;wî Vظq#ý>jQZ¾8]:Ý]¯Í.•†@9`¬ x4 $'‚×öþ¶K&²èM¨ ½Æ§IPÁ˜ˆ Ã0»ÞxcÓÆÖ¡zwý_í)ûŠÜ#§›Vò>ùòÕKR¢–¶|S\<"й§ZmOl¿á×»šÿøNÛ]k–MI÷!ãr¹ý¬V«õz½Ïçëéé¡m`í;¨ENã*A< ኅ@ÖÜãñx<N§Õj9nýÀ4"Yö¾ÝRõà5†ÉC;ŸÏçv»].Wð/+i4ôš’ ícºAE·Ûíñx|>ŸìŒ-–&žéðº#Ïó ‹ÜýÎÉ2ËÝoH´42 oÄÚýc¤(Ó 0j°Z g៰ åYE:"R‹IäåÚæ‘Yì Á˜ IDATšdÄË öu¢êL¬õ(ÿØ-Ö÷~ç®'Ä?˜Ìm^^^~ÿý÷ÓϽ½½yyyQw)))IIñ÷]t8Kd&?£BŽÔ_t¸}ð­ßŽ ¬å9§G¨k¨˜›L¢›‘L>¾–eTë•ü³g©g F¨ÆnBÑìà ›2îßåƸ`Çó»îÌd@_õ_öö;Ve~K Ÿ³þ§¯}aqhŽ/ŒNу?}dÿ§ÊS‹[¾ýé—J_ÿÊß—_½îØ—¯ûüsGí™7~ó…?}íjó´ÄBîÕ 6{ 7n¤ßÄXZåu«›^øsÿ¹ÄÂ…iÒ0€èO1èy0é!= 8u,/_ÑÜÜ\XvíôM'žùÚ§€ˆÙÉ"BFꘈ Ã0›6l`&1>™eÙîáì”øòÒ|zzî¨v½´÷ §6&šbÄ7Ö€}Ø&‡Z.ÚsS´ƒ¶¾ÍW¥>½ó|»¥Ë éMä&E())9pà!„a˜ÂÂB­Vk³Ù"‡÷åß¾±’’bµZc)$I¢¾ ÅÇz$ÓéÛ·ûLÅ]×ÅM¦ùÙLŸÜQõEQ4™Lr£‰‹MMM5™LG¥ç½¤d‚¯ÛýÊiùWÙø»_:p`$…2¸!à+DÒ‰<!–÷/Ä¢3±Ö£Ü¶–Ý| '·H8aFÙù³Ùlÿû¿ÿu—¯~õ«òR°Fcôe”Ç"Œ+Ñ ²bnj÷ ¾EÈHÿ5$I"O½rJÍ1ósãå-1zš~?QþCÈ€ÝcsúÒt^Iê³¹µ<§U^ì1âÒ* 3ˆe,“pßN÷}’»çôë?Þñàš‡ÇŸ½%®î'ë6½8÷É£ï^h8öû/|bíÝúÃ;wäuˆÂÉ0:æ«¿¾³éëäâß?u‹çK¯Ýqî?翵ø·;ç¼õÀšÇžÙüþ7æMãbëAlܸvîܹqãFú9c‡ç5·Ý¾áÕþ½ÍS•;¿,>85 f=˜xp 8:[Ï7ž==ì´Ÿ:uê豞î7ã­^°‰œÒ²ø$(Ê7hÔ@| ã¦ÆDä Øùúë·nÚ4hëgæ¹×NÞqmîŠbÝš¿ðož|ú¯µŸ»=Êä$E+„ÀÏ~dÿî­æ{oZš”²}CÅ“ÿ¨ßsÌòàærôô¢ 4qõ–«———’’ÒÕÕ•™™©Ñh†‡‡srrš››{{{SRRÆd“Ôz,ŽãL&-¶¿¿?)))òø¸‘§L ¹~i JVÈ`ÍîKÖþ*>Ìù’÷ _Á£ˆz,>Ÿ¯¿¿ß`0äää˜L¦X¢)!…+êÓбÑh¤ÅfdddffÒó®×ë#›·Uî~ÏwÚ$úø‰HOPQF–Nò¿× bnJŒÝ¯˜²x¾kÈ¿Z‘NXKsL:µÜŸ»gyÁ4…ÂݬÅÅÅv£tzÃõko²Y»:;\®fÆÇh4ÚԢ줤d˜3gNaaassó¿ö׬۰ù«_ÿÆOòãYh" ü¶k×­›6 Xûþã÷›-Ž^?t[u1ÝôA}çí×°äÇ¿~iÍŠ¢ØcÅþòÌÆ†e9–m¹8´b^Ö£w^Å0 ÉHŽÿÙK‡=¢6'-þìÙ³+«W!äàÁfS|,¹Æ¨pG‹={ölWWWvv¶ü8ÏÎÎŽ‹‹Ójµ<Ïët:Fã|¹ÈÅæååÉ”Z­¦Ã!5V«Õëõ“l1)œv¿Ÿ{Ó¿gNfLÃ0ƒaµZm0Ìf³ÛíþÝ&¿O„®®®¸¸¸¢¢¢”””¸¸¸ýÚhtœ#5áp8Ο??Éb£ÒýB ž¢ØÃÓ±w¿„)ðø *VžÎàÕU'‚ išßÑ ¯ìºãð­ÏŽ*Dö\.W{{ûðð°×ë%„Øl¶ÌÌÌØ _°À?nšŽ€‘¿éÛå[Œz÷Ýw¯¾úê£GF-²3$22-UŽɧPnî ±'²ëtjâ­cÖ®È9ÙÜ_ûQ×͹é :y‚DH’‰/É2Õ|dYQœTœi|ïÔÅʹɱ›E¿jÛºãßùÜõŸ<ÑîÔgÍ¿öö§ß||S°ò‡ÿ¥ï«OÜ÷é~Ÿ6m^õÖ?¼üµÅªQkciÃé¾_ÿþàþy_. šUÿþÔŸØ1'Åžqý×ÿðÙéÊ2L̈¥×6™ãMæx…ïM¦wß}wõš5Öh´·lØøíïüÇ?øþªq L(²yãF†a’R¾~ïª×-6 qzÏ®¡soüOnÈÏÏoù6û ý1ñük'6\••l”€a˜O¬)ü¯?¾ÿ‹ßùƧªzûzh˜çèÑ# Ã,\¸pªŽN~œÀÙ³g;::rsséã<##Ãl6sGGÒ“/6++Ëh4ÊÝ¢\8ý;ÇDz·.gÇnúËývíK ¹þ™æ=ÿ–å2ö{ëÝ”›¾?¶¤ïï˜÷ù=´ÀmÉͪ'ë^Ûž¡\ ¦a0‚§>!Än·SA„ŽŽŽ¸¸¸’’’ÔÔÔq=ÈU*•N§ãyžšEÑf³Qa2ÅFEîá[ºír xFƒH1ˆ"$I¥es’bìá% I€ö‹¯¼ Oô Rq–)N§"$‰’äñŠ]!:+Š“EeàÇlxGí7H+D¹ŸØØØXVV„C‡šÍ梢¢K¶ÛíCCCôó/ùËšš<-0:h¡ÑhÖ¬YóÈ#¸ÝnºWTÊch~"·¿ßÇ”ßÏ$»™#³cCcP¢è$û¨W‰Ã =ÝÎödžʼÂt#½ƒMd'ë—'½ýAg]«®«ßuÕÜ$B êÄÜ0G§/Úðí?oøö˜ïÓ²ŸÝ÷ೡßókŸëqEÑ`’7ýþø&Yd³6=ù¯MOF<ü™eÂa“É´çí·¯½öÚÚýûÕjõ†Í·~ïûOüÇw¾5…u›Œ‰(ÇÅ0¯îÚuÛ¦Mýƒ½â2â 0M‘Â2^Z‘#‡æÏ;ûQÑ ýÒlJdY¼q¤íGŸ¹IÅqôNNIb²“õz³îÇoTqmÔ?p»=Ë–-‹ñ\ĨƲ,M BšššèãèrŠ!½Xì—A„bÍfs„˜'|¥ÉŤlÓ½=ŠÒX+î®Ñ_ÿ|1«`?é“ïýdô(ò<Žäè±ü /..¦‰º>D”‡1A¡C'_läã’{øÜÔ¸ñö𱬋 Šd&é!¿ I’DQ’W)PqÌXAå‘’áŽk6¼£á•½ìÆråßô’$Ñç4½ÓEQ,+[ûés8ýýýàõz~øá]»^ÿÑ~Êó¼Z­¦K'qþŽÅŸ ùÌgxøá‡-Kqq±Ífs8Qm)GƵt’(I¡ïx ^B1(„@/ DÅq±g$–þahëq䦯-ÈK%IÑDq†ñT’®«ß¶aa≆+‹‰u¾“î²!11qß¾}ÕÕÕ{öîÕh5ë6lþÑþøß¿ùI{ L0·¢L  *êX,Ý‹/ž˜ EØþÓ½­ÝÃ?zaïço[ ÃÔžh³Ùí}VǶoþá‘Í%‡EaÙ²e“<"E‚ô755µ··ÓÏòÁNa±ò;-'Wå©ç­w¤Õ?_8%¯ÆS<:yÚg{{»^¯/..žÌý±&¦¤ØLk/"ˆôÍ 0úñ?2¤,ºN”DÃÌ¿£aóA´)W”$ÉãñPÿÀår/_¾|\%Ûíöîînðx<ÙÙÙUUUII‰ Ïó|`Ó‘YÇ’$­\¹J¥RY,úÂ÷‰OzMÅÊÈ=|G¯#d-Qï€ýÉ{‰@ùÜä{xI"‚ Ë ÛëGÞ¿à 3Œf=OˆÉ+HývOˆÎ’–a#gfÃ;^}GUw\ýÍž±›hÿàÁ„ñúðéOÚív;N—Ëõ—¿ü¥ºzeÀEPÓÎiïÀI"7ÜpÃ_þò—•+Wêt:N·lÙ²¨ ›N~F¥Ñ.Þè‘,þŒ€$IaXFű*§æØñDH’Qswu¡FͦÆkéE£h⪹I•¥ÉÖaŸ(AF¢£³‚‚‚={ö\{íµýÛßx榵·üçüÍoLe,ajMP·`s˜¹ „ÁÁAŸ/®´t‚¯˜ÌËË{÷Ýw£z` ÃdddÄž•œ0òãœeÙööö©zÙ|H±SþšÊË–eÓÓÓsss“““§ðA®R©¦£Øä>#Q?å=}`†cY†a8v´‹˜uNÇï­„Ašéw4äää¼sв Ò–~å­·Þ’·ÒU­òòò&|úèÔV½^×]w%$$™LFžçU*NqpÌòåˌƸ´´‘EØ¢Úì/o26ME³eX†¡õUqô r¬Šcc_¶`úL¤§§ËÃAcyCÁeÊÄž’$Ma›,^¼x×®]wß}wœ1nÇöhƒÊ¦ÓDðIW$++K^}ìò"ê¡E€v4tþôŽ˜d± SU“)/-F†áyžÕœÂút‚å”ù²™Ö^"D뀾qa–aX–aY–cŽe%‰0Qt"Ú™îw4D½érrrrrr¢µÄ`0ÎDUïr´“u$ÿ<Ð.‚Ndä¥M£ÅQ[ý_*8™3dâãã?øàƒ dƒf?èš%Iª¯¯§¯****^yå:½gš¸&®`Æ5¿ñÒ;…wå±cǦözŽàUÌþbC˜ÖîW’ÈKµ-þŤ‘5 ä7As,Û=芬uÒ㌿£áÒ™™9®bd².Âý7LI="°~ɤÖN‘¢¢¢sçÎÕÔÔÐ9$W{÷îï.ƒA«ÕNáD|Ê%xx£p%Q\\ÜÔÔ´oß>yeÙ‰‘_\\>~ÂoDE®HðbC`ðŽ@B˜u.½ A¦¼Ø$¼#`fÝXAAf~áСC3[AAf … »ÕÕÕ3ZAAf /ÿ¹dá½÷Þ›ÑÊ ‚ 2{(€àáŠÝÝ}3WAAfééÉôÃÇ÷õk‚ ‚D]AA@AAÐE@ADtAQ]AA@AAÐE@ADtAQ]AA@AAÐE@ADtAQ]AA@AAÐE@ADtAQ]AAPÍtËžûî»g¦«€ ˆ/¼ðâLW¹¼Á(‚ ‚  ‹€ ‚ ˆè" ‚\™<õÔÏßÿ_g¦+‚\® ‹€ ‚ ˆè" ‚ ¢º‚ ‚(€.‚ ‚  ‹€ ‚ ˆè" ‚ ¢º‚ ‚(€.‚ ‚  ‹€ ‚ ˆè" ‚ ¢º‚ ‚(€.‚ ‚  ‹€ ‚ ˆè" ‚ ¢º‚ ‚(€.‚ ‚  ‹€ ‚ ˆè" ‚ ¢º‚ ‚(€.‚ ‚  ‹€ ‚ ˆè" ‚ ¢º‚ ‚(€.‚ ‚  ‹€ ‚ ˆè" ‚ ¢º‚ ‚(€.‚ ‚  ‹€ ‚ ˆè" ‚ ¢º‚ ‚(€.‚ ‚  ‹€ ‚ ˆè" È‚Óéœîb1ññ©F,:—¦2M ‹€ Wz½~ºKˆÅÄǧ±è\šj È4.‚ ‚  ‹€Ì AˆQÍëõB"èø|¾p›¢î‹ ‚È ‹€Ì/^|õÕW-KssóË/¿‹Úþð‡}ûö@kk«Õj%„´¶¶+Ûl¶C‡Cu¬V«Ýnß·oÃ0Ós4‚ Wª™®òñ¥­­Íétxð J¥:|øpNNŽÃáÈÍͥʢ(ÆÇÇ Í›7çùS‚ [0Š€Ì$>ú(°,ÛÜÜœ——§Ó鮽öZB!„eÙùó燨Q‘Ž'`&//aBÃ0Û·o€–––ææf­V{Í5×М‚¬œŸŸ?Gˆ rÙ‚.2“ÈOýÜÜÜôôt:¿‹a˜²EÞJ?ÿ .'DAè" ³•J¥RMÁÕ8Uå ‚ 8AAð÷2c<÷Üsååå©©©Š[333ŸþùáááÛo¿ã8E…i® ‚ ÈÇtcýúõ‘n¹åI€ 2S ‹€ÌQÃYYY—¦&‚ ÈXÐE@fŒ®®®[333Ÿ~úé²²²ææfµZ½råʱ ÓY;A;è" 3Æ®]»ÊËËÓÒÒÂ)Ü~ûí>Ÿ¯°°_¬€ réA™1zè¡È '@™ApÒ#‚ ‚  ‹€ ‚ ˆ˜h@fŒÛn»­££Ãjµ™’’âp8\.WSSSqqq„Ý£*Ä¢s¹XÁjÌÂj\+MMM‘ë€ ÓºÈŒ‘‘‘±eË–¾¾¾¾¾>³Ù̲ì3Ï<³mÛ¶ŸýìgmmmVD(--%„¨T*QòóóSSS;®ÒÒRFsòäI8wîÜØ­<ÏŸ:uª¸¸XÑJiii}}}yy¹Ûí®««S´BM0 sòäÉpÕX¾|ùÉ“'/^¬X (//?~üø¢E‹8Ž“$I±eee‚ œ:u*\5\.—Ùl>}ú´¢•²²2Zɲ²2µZî˜óçϧ¯ËRܺdÉŽã8Žûðã¶F¸ƒ-++£­á`óóóÍfs¸SOE¥R…«Fðñ†«m󜜭Vëñx·.[¶ŒeÙØüùó ÃñãÇ#\Æ´(ÅjÈ»Ï;—¾¨,\!2­`¢™1žyæ™-[¶|á _xüñÇ¿ô¥/=úè£ ?üp[[[ä+**î¾ûîôôôp ;v쨮®ŽPBUUU8…ŠŠŠòòr³Ù|çw*Z©¨¨à8nÁ‚÷ÜsÁ`ˆ`âöÛoOJJ WmÛ¶%$$lÛ¶-œÂ‚ ôz}ee¥Ñh WÊÊÊûî»/B5|ðÁ-[¶„[d¢²²òÚk¯5›ÍÛ¶m3›Íáj²eË–ë®»Nq™KX¾|ùêÕ«ï¿ÿþ„„„pÕ¨ªª¢†Â™¨¬¬Œ|°;vìØ²eK¸SO%B5 èxÃ)Ð6ß±c‡b“Ò­ ,XºtiðÛÂBزe˲eË"(ÈEEÞ}Ë–-:.B!2­0•÷<>wÕÖ­9-ÝÝ}3]ä²ä¾ûî™ØŽ¥¥¥ÐÐЉ‰‰F£1ªs0åDøe|åUãcu°WR5&EX¶lùŠ+V”k4š‰•€|ô²q8r5ä«‚6ÇqcVžÔ Óéè5–žžÜærHƒžžççÌ™R ªàt:çÍ›çt: !c[ƒ^ØôÜñ<¯×ë“’’èÁ&&&Nìð— IDATìûÍo~›™™•™™9Q… !ÄÅéO %ô·žÂë™477GxwCSSSOOOyyy°~zzz}}=šX ®gp:ƒ.Ù ÃDÎwЃ N4X­VÚPÃÃÃ4UA³ r51Ñ€\Z0Ñ€ÌjΜ9ûÈš››-‹Õj áž9s¦´´”a!ô€šššÄÄD†ah@;$´z½¾¥¥Åb± WVVÒÀØ<‚\š ˜hày¾··×ívM4´´´TTTÐ\ƒb5 ±±qpp>8·mÛvôèQÅ)v4÷A+|ï½÷Òç(­ð'''+,͹8ά¬,›Í¦X ¥w8YYYgΜéëë“«¡×ëÏž=ÛÛÛ»mÛ¶æææÖÖV‡ÃÜæz½þܹs………ÍÍÍv»ÝçóµR[[K¡ê࿜°X,ÔQ€¸¸8ÅSð‘$ÉëõÔÖÖRÓ‘‘ASHŠKS?°ÿþ¬¬¬àzÊy„ÆÆÆ”””ááááááÔÔÔjP…ŒŒ –e©é”””îîn¹5Μ9cµZ·nÝzøðáÅ‹ïß¿Ÿçù±Ù¹ô`¢™,˜hÀDÃdz±XÁDr9‚‰dʘŽDƒÍf›p¢!9Úl³ÙèÏ>:_1Ñ`³ÙhX;\¢!.¦QåàtÏó4¹`µZCf4Ðß»4´mÅ 6›M§ÓI’¤×ëÕjõØ)TçyÐjµyyy!~·Û-Ï2 Ù“੉‰‰n·[ŽùÓ0x„yЉ¹Åh†††æÍ›çv»‡‡‡ƒÓ.ô¤ ˉšÜ‘Ï=õŠKœN0‘$I§ÓÉ rA­VËjhÚ%$Ñ +Ð)':.8íBOm 𶂉äÒƒ‰dVÓØØHiSX Ýn§!åp‰†ÆÆÆÎÎÎììlÅ wgΜ€žžžàjkkF#ÝkìŒÏÈÈ ¡õÞÞÞŠŠŠl }·¶¶²,+‚¬ Wƒísss].WGGÇu×]רØ\‚\±êêj†ajkkAÈÏÏžò@ãÿ´M‚ggÈVûúúRRRâââZ[[åy²BSSSooonnngg§ Û¶m ‰ðÓ¨~RRR~~>Íž„Ì"‘'VÔÖÖêt:§ÓY]]M%xÞÄþýû322Š‹‹÷ïß/¬â”‡«®ºŠa˜šš¯×œv9sæŒÛíÎÈÈ8|ø0}ËÉùŒ455utt”””´µµ…,mp“Éd³ÙL&“Ýn™EBèd‡žžšú I4P…ýû÷Ò¦ N»ÐSF¯êWõ÷÷c¢™ `¢™,˜hÀDÃdz±XÁDr9"'ÐE@&Ë„]„tvvº\®9sæDÐ9wî\d…udZZZ!:Žb2™zzz†E1¤úC OŸ>½`ÁÙJKK‹F£q»Ýt(]z¨  @V¨««[¸p!ýI­×ëÓÒÒ¨•áu‹…¾ ›ã8³ÙÜÛÛRææfÚé{<ž±Õ¦®®N¯×ó<Ÿ““#ïKз··€Z­{°ÍÍÍtl#]'Êl6‡(tvv $&&Ò¿YYY§N >Ø––P©T999´Yè±Óƒ¥_fff¶´´¨T*ŸÏ—ššb¥««‹.uåóù`¬Bss3}e3˲¢(†Tƒž,ڴу«ÑÖÖ–——Gk«ÑhƬÅb¡9·ÛMÛ\V V ƒÛí¦i¯×Ëó|HkÈ ^¯7//¯®®Ž&‚«Aéìì”$‰Î¶`YÖd2=õã]dbÈ.&ÙHMMMðÊH—†ÆÆFŸÏ—˜˜¨Z—¡#Ò{{{ B¦Ð²Ûí¦ñó?èõzºªRiiéØExdè(ú#GŽÐ©mmm!Õ càåñùáf4@`#i§ iyrG„¥“èâNt+!dl¾ƒ®wT[[Kÿnݺ5$ÑÐÔÔCCC4ŒZ—ÛjëÖ­MMMCCCV«uåÊ•!yº‚“Édây¾¿¿l¢¡¶¶–çù”””ÁÁAƒÁ0vFƒ<'Bž8’ï8xð`NNNcc#Ã0}}}’$…,Í’BèãŸrÕUW§‡¨Ëe0ZZZûûûÇ&¨Â… rrrôz}mmm¸Å»xž/++£Õ¾êª«pé$dfÁ(2Y0Ñ€‰†g5b±‚‰är È”1‰†–––¨ñÕ)O4D-¡³³ÓëõÒÞVÎçÀb±‚““Cƒä.—+8ÐÕÕECë,ËGøƒJÖÕÕ †a!cCë´|AB‚ór5, kÓjç;hùÍÍÍT¿«««¿¿?11qlê à­Fgg']@’$šì‰ðÓL!dÑ¢E4§á§ãóòòè±,;¶rC€b¾#š° ï†(**¢Õ y:m¡­­M¥R…Tƒ.çLãÇ=XÚž´Æãñ„´9Í#8ƒÁ Õjišil¢¢V«srrh•\.רDCKK‹ÃáHHHðz½ššŠ‰dFÀD2«ijjš…ñU:¿¿¿ŸÆÞC^Ž@‘ÉÓ 9˲Á)€ššš­[·Ò…‚#ü!Ɉ³gÏB5¢åÓ)6›MÎ{4¬M«16ßA‡ÍçççËÉ‚±Yº¸“$It¦±s jjjòòòX–mii1™Lc#ü´pºamm­Z­v:!3X–¥NLÈjTÁó&AÅ|G0t‚†ü–¹1é’Gôõ >Ÿ/¤µµµ4ÇD×> 9X:ý„ž›Íæv»CÚœ*Ð`€œf I4ØíöÎÎN“ÉDçÔìß¿_Å95sæÌ©­­5™L,ËŽ}c‚\b0Š€LL4`¢áãYX¬`¢¹ÁD2eLG¢¡««ËétζDC,:r¢¡­­¾yl¢áÂ… *•Êår‡¬åÒººº€ÓŽ6ÓQúÃÃà ñññc .—kxx8)))33³³³“å“MX,:´žfxžÀïììôxº^ÐØ¥“h2¢°°.Ôc³Ùä`FpX;Ü’D4[Á0ŒV« Nˆ„T£««KEŸÏWXXØÙÙiµZåjÐL!„Æ ´Zm„¥“xžW̪tvv€ ábïtÊ}ÂØ©ÁÇB3tù£ÿßÞ½4Gy^û»‘ZFî2–A€¹™ìªT޹…ÂÛ¸RIy’¡ãT¥*Ó3Ø_á|•=8•NRìAªBb##°. ÂtC½ëðî®î…Œ [æ÷¸TèU¿O˲õçYï³V¹Ã_<.ýDù`ãÆ­o6*GKKK7nŒZO4ÄwãáÇñA뉆øl|Iœžh¬wÄÂâS1¹{õæ]OODà§Qh £õööÖëõv¯ây)’Ÿœœl]EooïgŸ}¿öZ§'”¯s·ÑºŒ8òÐ××wïÞ½ô`Eñ¸òIenn. +±Ã_<.ýDùàÈ‘#­o¶œ-~äÈ‘ï¾û.Ê%Mà˷™¯utQ333q$NO4Ö;bao¼ñF¼]»v}ûí·«4ï‚Æ.ÏJ¡A¡áå\ÆÓÜE¡õH¡5ó< W¯^]YYY'ž}Ñ:)vΟt¢aãÆEQ4‰(O4D#åååøjSë¤xz×®]q^àiö´'''+•ÊÇ›þ¥”ãâïèÇ7bÊÃÊÊJôhj=J_;<<Gžt¢!¦fܺu«q¤EÓ‘‡Øÿó­£"¢åÑ®]»ÆÆÆªÕjSë¤Fåù‹ø…Ú8%¤ùä“rbEc9cvvvÇŽõz}bb¢õ|Gô_¬×ëÓÓÓ­Ë(Ç+Ç Ž‰‰‰¦ƒåÔŒT«ÕÍ›7·¾Ù8có»/(ïuŠjµºeË–åååÖNñcJõùóçûúúšZ'E144ôÅ_üâ¿øì³ÏÒÑØðâÙEàY)4(4¼œËxš»(4°)4°fžG¡¡(й¹9…†µ]F(ÇU—Ò:Âòòòòòò“¦'Dÿ¥¢(ÒžE1E¢(Š×_½uk½hQΕNEÇ.Ò â-,//W«Õ®®®ÖeÄ[ŽA Ñg)úM•=‹b=1£!jéÈé˜ÍÝ4Ä¡qätQ1u:=ßC«{{{8÷jún”:Š¢(GE+4Ð. t®øÅ°sçÎv/äç©WÍ‹jµZë$ˆ¸¦¯¯ïöíÛóóó鑇ÑÑÑ•••ÅÅÅžžžÖþ˜"QÖ æææšvøËQ1N"N+´ž›(Š"Iß¿¿õ‚x ýýý³³³KKK­ËQMˆVQq¶¢œI}ùòå}ûöÅœè{÷î¥o6ŽElÞ¼yûöí—/_náó»7lذ{÷îô|G ­ŽBC4’j:ßQè¨×ë[¶l‰QÑf4ÐvvxV /ç2žæ. ¬G ¬™çQhhÐJ¡áùÝ%j=±»ž%ñ~¹Þ8• džhˆÔÔ³¨œ€¼ÊŒ†˜ktqä¡^¯ß¹s'–‘BTOVVVöîÝãŠÇsb…Oz³qnb~~~Æ i»ª8+ߊJ¥ÒZhˆ)ÏÕjuxx86ÉZÏwDs§¸EZUù D~…:Wt’iÀ‹¿Æ®]»¶cÇŽ¥¥¥' ƒŽ'ðËýó¦‘Ósss÷îÝІHM=‹Ê È«Ìhˆ¹›7o.Š"~»7]GbžBy^ =¾Q<®ž,,, Ç8†âñ\†Xáàà`úf¯\¹2==½iÓ¦h¡Øz¢áÊ•+ãããï¾ûî—_~YE뉆˜ò¼aÆ8¶PÅ7¿çÎ{ã7¢çÕƒzzzèvxV /ç2žæ. ¬Gvh¿'mŸÆô¯ýëÜ_ýÁ ~ÿûß?û‹<û]:dkr—¦ÞJ±1Þ¸µˈjÑ+¯¼G zzzÊBCz—²‰P½^oúW'æççã9ÿéééò‚èþ´²²¥ŠÖeÄvÈÆ£=CѰÃˈþ‰‰‰jµãžË:By—‰‰‰;wîôõõ5´(ïµ’îîî¢(æçç[—E±wïÞ¦N±ŒK—.½õÖ[ÿú׿¶oßgÊFR?Sàùè8W¯^ýþûï8Ðî…ðDñëöòå˱1Þú T‹fggã(Á­[·š MÊ&B×®];vìXã§â$ƒ¦§§;víÚµÆBÃÖ­[£Ò?00кûú[·n™ƒƒƒ=‹ŠÇ…†³gÏîÝ»wbbbnn®µASœG¹wïÞÝ»wË#ªÕjy 4=ÑP­V+•ÊððpÚÁ)bèíí}íµ×ÒFRðâ)4ð¬^Îe<Í]Xh¿U +++ k¾Œ5¹ËS.#ªE1° ©YPÓ‹Ä©„Û·oÇœåÆ:B“ÉÉÉJ¥òðáÃò‚òÈCŒŠnlTÊQi½# Q‰QÎåQ‚ÆBCµZ½uëÖÀÀ@­V+/h¬#Dˆùùù¨­´«Õj¦hœIˈæN1uº(ŠÆN ´‘ˆ@lj¶|ýúõÖMQ†xýõ×/\¸³ª›†AÇLê;wîD‹ÆÖeij³³q˜bvvöþýû­£"bêttO2 šN ÐÀ³RhPhx9—ñ4wQh`=Rh ýœhxÁËX“»¬Õ2ÊÖI1Á¡±YPc!N+tuuU*•ô‚[·nõööÖjµØ±HVEÕ„h²”Ö;â™Ç²Cš~/]ºÔÛÛé÷ïßÿïÿûèÑ£o6fFG¡arrrff¦õ‚·ÞzëÆ=Š“ÓÓÓ±Œ8ÐߊJ¥ÒØÁI¡6è8ÑTÇþêÏ[T"öíÛÒfAQrªV«=*Šâĉ­Äóÿñ”@뉆¨ F5áÚµkM;ü¥Ë—/ÏÌÌìÞ½;z1•íK½½½_~ùåÝ»w7mÚ´ÿþÏ?ÿ¼ìU^0222==ýÑG={vaa¡õ‚J¥röìÙZ­6;;ûÿñewÅr²ÃÜÜÜ믿žö‰‚O¡g¥Ð Ððr.ãiî¢ÐÀz¤Ð@û­RhhíŸó£^¡Ô!;ü²Œ5¹K—1::zÿþýÍ›77¢¥R9j¹µÐ0??G FGGkµÚÌÌLc¡!†^NNN.--uwwdzMåŒrjv,£µuR4w*GZ´Ö;Ê9Ôåé‰ô|GL‘èêêºuëVãùŽÕ¿Wðüˆtœ´\¹råÀŸ}öÙÛo¿5©éééãÇòÉ'i¡annîÎ;ÃÃÃW®\™ššj144­=z´yóæÖþrjöíÛ·[g4Ds§ëׯoÛ¶myy¹uqÁ×_í¡fffšf4”«½qãÆ«¯¾ºk×®<ß/€ˆ@Û>^¯×‹¢Û³gÏ;wÊe4niLOO߸q£¿¿¿ñ.qAô`^^^9zôèììlëß|óÍÒÒR__ßÑ£GÿùÏ–˸yóæÎ;—––¿ÿþû7n¼ýöÛµZíÓO?ýÁMxNDÚæIÿã»yóæ‘#Gêõz'ozÿ¨»tÈ2Öä.¼Œ‹/nÚ´ivvöäÉ“±Œ›7o...9räÀß|óMt>þÝï~ ¤_ddddiiizzzpppxxø»ï¾KK]7oÞ¼yóf__ßÄÄDy—øÔÕ«WÇÇÇ«Õê™3g.^¼¸°°ðÛßþ¶é‚hÖ´¸¸899yìØ±ÅÅÅXÆ… Nž<922233óÎ;ï\¼xñرcsssµZM¡6è8§OŸ.~èaFhõñÇÍOΞ>}º^¯W*•¢(~ó›ßT*•ø­üÁ4]Ÿ#R´Þ"~8Ë×lôÁÄyÅJ¥òñÇ/,,´^P^w9tèP|êüc¬¡(ŠJ¥rèСÅÅÅ7ß|³^¯§Ë€CD mž¦§§çççÇÆÆVÿòÙ{š»tÈ2Ö{¡áÙ—155533søðáñññ÷ß?Î(Æ<ªJ¥ÒÓÓÓßßûöíJ¥òí·ßÆWU*•J¥íÊ vïÞw«ÕjwïÞííííééyõÕW¿þúëÞÞÞ¦ cŒÓ–-[fggcï½÷ÞÈÈÈøøøîÝ»ã²(X4.C¡vh›U £££gΜY/›Þ ëe/^<~üø¡C‡þö·¿½ÿþûQ‰8xð`¥RùòË/§¦¦jµÚñãÇËþx…¯¾úª««kff&:Ÿ8q".8xð`Ü嫯¾š˜˜8~üøµk×&''Ož<=››.˜ŸŸï½÷*•Ê… îß¿ßXï9pàÀ_ÿú×îîî 6¬¬¬4.cõw wžgÛ 5IDATψ@Ç9}úôéÓ§Xse%âÏþs|…ƒ”ÃÇ>ܸÃÿá‡Æ“Œe .(_öÃ?Œ:×üéOêîîn½ ¼WS½#ʱª(U´.^<¶Y¥Ð°¸¸xýúõÕ¿¼C6½Ÿæ.² …†Öe”…†èá¸}ûöÖBCWWWµZ­V«óóóåu„®®®8Y¯×‡‡‡[ ¯¼òÊòòòÐÐP::Z^ÐXG˜ŸŸ_XXرcÇÄÄÄ{ï½×Zh¨Õj7oÞ>D)áÊ•+‡j¼Ëøøx­V{ôèÑÐÐÐÔÔÔììlë»wïŽæÍQ°¸sçNÆÆÆ†‡‡§¦¦zzzë ´‹ˆ@Û<é|±m{âĉõ²é­Ðð2,cdd$Ž>...ÿüóååå¨D(4ÐF"'fïÚ_å%ôÁT*•ýû÷—Gü‡@UN~üß|G¿ûîV»úô§?}üÃ/ܯ~õ¿ßyçø;ïëééi÷ZXO^{mÇ_ÆÞ¸|î/Õv¯èD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$D !" Htµ{¬{ÿõ_ÿ/>øÏÿü?í] ÐèàÁÕJ¥R©´{!¬W"kæwŽ·{ ÀÿزeëŽ;jµZ»Âz%"°fÞyçX»—üÞÞÞÝ»‡Û½ Ö15ó‹_ü¯v/€5ãqE !" Hˆ@BD"€„ˆ$D !" Hˆ@BD"€„ˆ$ºÊ^{mG×t”ÿþ2öF{×t”®¢(.ŸûK»—t–ÿ2aÖÙyŽäIEND®B`‚pyspread-1.99.0.1/share/doc/images/Tutorial1.png0000644000175000017500000016727513604200500021132 0ustar andreasandreas‰PNG  IHDRju'¾”¦ pHYsÄÄ•+ IDATxœìw`Žø¿³åúé¤;éÔ{q‘»Üm\0͘^$¦›HBh/ÉË{ù%/ååAB^¡9Ä@H¡Wp·q·dKV¯§;NW·ÍüþØÓét’Nw*¶æC"ïwwf¾3{;3ßýNYtû󧔞zƒ€@˜8†(T¤"©HE*R‘Šÿªâù““IYk œÚ¶‰±l¨¿(1‘0T¤"©HE*R‘Š_ΛœL¢ˆƒ½Œ!ÍÕxœ#D= _L$ ©HE*R‘ŠT¤â—D<r2™e —”S@á“„ô߃Á"Á©P#Q‘ŠT¤"©HE*~™ÅáÏÀ Û)Z55LÈ€Ñ @âFĘ«q$½Ñ¹b`À Æ3l&#ùáÈ€úˆÎ(i@é<©HE*R‘ŠT¤"£ÏÄ?µÄ#†/õˉÄBC3‰¦Z¯]^ž•fÔò¬ )nÿ_??}²É§‰È € € õ FDdøóT¤"©øeQáÒªïÍÓyŽû½ø|É©HÅs/ >£ši#ÅÙ¦‚„#7“1êg’aцËfίÈDý®E-ÏÚSº¶ê‹ZÇó‘å¨ÔÂA€S-IBúǶÿï[+`îýÍŽH°ˆ¥KE*R‘Š_Q=8ŸrEE*Rñ\‹núÏÄ8*Xÿ¥Ñ# ™„:I ðÐuUSó­0„PUE¦AWõÄ›û€0Ñ©˜&åÆdhƒèF¨HE*RñË&öKçW®¨HE*žkqø¶b¤XqRK€i¶ù™‰ô[‰\¿;“@¾þÌ6¥Ã –ŠT¤"Ç ²é¾>c!*X[ëÿ¸µ½Yâ«.[øõ ¶nǾ'‡ps.YtßTöÌŽý¿ÝI*R‘ŠçV„Ág`p°çûí(xþ;«îùõÖSë?1ÆbÛfQ!Ép&\XWŒE‰²m&†E@˳ë/žÊ²hË¡úSòÖ_<•cÕbNÃeYÍ].ŸšI•ȶáEÞðôÖ\ /|gõ†§·¼ðà…aÝOoÊ0@d}©HE*Ž j*fþúò ïwÇsudàj¸É“¼„à è'€4š†€èÙUí»h‰iÁËÞfF¸¾®Û‰šZ>h±\™Ÿý•K³ˆàq¾þöñžp:}„þtÌ %|ÉTÕ!³Qð¹åÿó@9„!V³±Ì¢eekË-™–cÌxÐx€„D?&Ø”ˆúÖMÈyuŸ©HE*žkqЙè`Ï?¶#6ÕóßY½áé­#¥•àprÕ:Z¬ENoHTt‰²òâ{Ç7:¦Ú÷Õ´!w]>C˳$$*N&:.×ïpÅ@Ô…Ý!|÷S[^|èBˆØŽw?µ!BB‘`T¤"©_Ò E_U›2Þ¬â!HËAì“n«î<³ ¼ljùuDƒÏÁºLÏ{oîÚœbȳšgÏ/»,?ý’iæÏöÒŸôèÔtÝ cBéó 2i©ùî›í}y&æÊ9·Ïµ1ŽÆ_¾ÚX/[7|}Ö"a¿_”xoè0êx¤&JίûLE*Rñ\·u}Fýzñ¡Õa;êéÍ@І§7¿ðàxáÁÕw?µehjÐfÃӛé è·Á¢âB¿ºH¬º"bTôLBÚœÞÒœTòçOOotg§~ûÚ¹ú´æàéöß?~ÿÕ³ ÕÙG€ °ß|T-V6MA‘!ä®§6¿ôКp™ŸÜLÔuBp¸; T¤"©8ª:uì500àƒ£Ÿ?+}ëvOÞL»!ÎÓµ !ÄÓùYsIy‰)@nïþ¢c|^Ñ]Å¡­'\M­.}Yñ¥ù\ $¢H:nOÞ 5®32Á\ØzÄ@F¨oÛãI_‘“wEIÏ_še³Õ2wf¶®æøçjk,+AÌäÎÈ΃j#›ºû3¥g®,èxÇ—¾¢X]?CpØyz¾Üg*R‘ŠçVT[´Èõ?r×S›ûÍËp,Õ¦D`˜Ô`˜3ª†HâCCaÒÀCc Ê6úhÃýWÏíó‹ûkZçUäÞzÉT Ǭ¿xj $oìRU|¸¿C"Š€CÑRÿ“ªËà®§>}é¡‹îzòÓ˜óT¤"©8!¢ÚîdTÎ|¼°,¶ÖœÞ¸³G_èög™n¨s¸0©£mkZѺËKJ­ZN ž>vêµ#~ ÆaÒù¼'nûmD€œ›þzÌ{Aђ˯`d§³÷ðÑÆÛqŸ£öõ¼éW—•ü×ý¥ýí<výù=½ö¢ÂÕ×.¿xàBΫ;IE*Rñœ·fÑgâÇŠ—ÚclĈQ!‡‰5ÐôÅžÎ侚¶Õs ¦äÛ~qÏʃF=©a™û¯™í ˆ@àd³s_MFMõ'Œ®ûÑ›€ §¤ÆÉç©HE*RqŒ"›ñûg/bz7½|ðã>2L`>ëþo̬bz_ßxð#1)Îþûg-bz7m<øI/9 HE*RñK#‚jJõŸAqc‘‘SH4â Cb X±d¸ó‘Lr,Ü»nÞ‚©9 ‚h0§:ž{ÿ YhW "æ¼™§¶mêÿê pbýÇ0Hñ‚Q‘ŠT¤b‚"C­Á€aH`H)°sjlßß‹FN ¤CHÜvŒŠT¤"'G€è3â¶Eƒ qÕEGŒ “NÄx ¡˜LÊ„üï?Î8Ú|ãÊiY6“ŽgC’ÒÙã{}Û‰ã.4\€Ss09$"þ<©HE*ŽC $æ*Ò¯ûê²²°§³ååOÛ\„Äo‚Âÿ„OW¤"©ø¥ap?VÜ-ñˆ1!‹E†É$&äh½ãXƒfƒF$ì‹$ƒS‹8(ѵÿùÆ@6‡EC*R‘ŠT¤"©HÅUñüÉɤ‰)…³OmÛÄN]qÃÀE¹>ªH’BE*R‘ŠT¤"©ø/)ž?9™T‘èR³\ǹ~7&QÏ@ˆÄ1D¡"©HE*R‘ŠTü—¿$vQvÊ7ô” N/JPC*R‘ŠT¤"©HÅAñüÉÉ$‹º´lWãqäv»B¡P( …BßtœÚ¶‰9×Ù P( …B¡ü3AÍG …B¡P(JPó‘B¡P( …’ã6qão/Ë»á'=è„Ûž¿2ïš—;ϦNÊ—‰sñTS( …òϘÌÇó§s윜?%¥P( …B9?Í|$®WoÌJ‹"ëÆW]¨è›¶¾yk:šðì Q—f›òÐVqÄðLTN”º__œwó¦ÞäL=â|c}ñ”û>ðFŸÄm/]“?û»Ÿ…˜I+éð™înŸÓulwúólÍ»á¸ÿœ|ìË2Òl¥ßúdäŸî,A\¯Þ˜3û{¤ÈÜøÛËr.xì„|sE¡P(Ê?3‰x™‚û>p¸Ãtþe½mr©AêÜ®SO­ÖL¢6”~ùmëЯ¾ß=`8)u¯¿º7ÿ¦õKt“¨x$ÎòÝž˜œiÇ^yíŒ¢Š¡]xCœ2UÿOs …B¡P(I3Áƒ×Äsè凮ZPž“™]¶ðºü­.4šßûáµUÅYYE³×>ôçê`lN„w¾¾ò¿ø?º¿Øš––yÙoqüô0­¼õÛöWÿÞÒC<ôç×NÍYË .¦¤Ã–Î÷Ά²¥?;"€|ì¿—eØ/zºNéÀÿ[0å›' ìrÇæÇo[9=?+«`Æ…w=µÃ¡(§Ÿ\{ÕžúÆÅ³ ³²—ÎɽêOßwñŒ‚¬ì²%·>³·aÏo7\X™Ÿ•3eÕ77Õx=¯Ý’•––fµfäLYrÓO>j“Æq÷¥¬¹ãϦW¾€¸?üÃûÙ_[?³ßêV#é=ðâƒW/¬ÈÉ.ž»îá?ô“Á…ʹíņ)ø„2ú«œ~ruî•ÿþä×/¬ÌÏÊ.[|Ëc[ÉÝ …B¡Pþµ˜Ð•׸ùÕ{nzª{í3Ûj[Îl{¬êÐ÷n{ü€0)+§~{÷}ïe<ònuã‰w¿kßò·C±CÚ+¿ýGó—þoCÛÝõá7‹/™vþ×n)=ø§×O©ÆIà³Wÿâ¸àÖbS¡tÆE+ç¶~öy ÜþùNwA^ËçŸ; ( Ÿ}Þ=åÂñ;0•Ó¿»ãÎWà¶?jlÜÿâuÞçnÛðR}ØŽ’v½sxácŸžjÙ~Cš´çãS+ŸÞQÛpàÙ%§~~ÃeÿÕrÍs»ÏÔïüyÅg?øñ[[ßró¦N·ÛÝãj=ö÷G³>øÖw^mÃã¹{*Úù·Ýlþû¶ù·¿õÇ]ón¿±í¿6¬Fܸñî›o^þ‹«޼ýÃY‡ÞÙ% .Ô¶oÜ;BÁ'ˆDŸXi×ßvÍøŸ-µG^» o¼ûþ?¶P’B¡P(_^1póïÖÚÕ¹xÖü{ÞÑTêþúòÎißyüÞ%¹F!oõ#ÿvEï?Þ>*~tuiiiY×¼ÜIäš¿ÿµzÁw~vKešÎ˜¿úÑÞœ7‘£ì”›n]PÿúŸŠÄýÑŸÞ•/½õ {Œ†‘J‡Ò—­˜Z³}Wvïü¬qéƒß^pbÇ./îÞ¹£nÆÊ¥–¤ó{·åš¿¿qlÆ7vçÜt.sÑ}?»§øÀëÿhPÍ(nî=ÿïöyvü¢{ÿó+•V­>wÍõ«í°ðî\Qž¢1_yý2æÔñÆX{imÓ¯ýþ†é>Ùå’‰äaËoY?eóÞí¨y핺‹ï¸"}è“5X£rúͻ˾ý«GÖ”Xt)‹ïxâ{ë¢ ÅŽSð¤üDÙæþçÞð3™ðËN»óÇ÷/ÌÔéìóïýɆÂ]y¿Ú …BùÒ’äÜÇž–ç×iG §´·´‡vv¾ug‡ӔŸŸ¶ÅøÜÂ6~"IªÌ»öÖÕ=}u‡w¼õꧦkn]“fÄÒ1Ë—gھǹwûÑ«/½heÅíû»¶)Z±<;yïnìÝÆŽ®nmAQf8%6¿8º»ºÕ»Êسíýw¥¤ZÂx^£·XÂŽOÄi8EŽXÁš×¿òé…YéV«mú£;‚n§g"L!&ëÚÛ—yþ»?ýSàúÛV£® ¯QélïÒ—æ ½CáBÅ-xrY<›öÐÏñê…„ŸX6¯0‹æ¢îαäƒB¡P(” &rðšÍÌÎ4^ülmO¤§v÷4?·vDs3q»=Ý×ÒÒ¿,XnknÆ …!cZ¨Œlko]ï½úþ7þ¼;ÿ¦õ‹‡Ž9\:núÊeÚ=Ÿ¾üéþ‚ËÒs–/OßýñÆÍû,Ë.(Ÿ#—±ÛÓ…–¦þévJKC dd8÷’soâÆ?º³ì‡o¨ïpö¸Ž?¾œÃŒëî…3b¹øŽ+]lMÿÚ׿F-vI#›•“%4œiÖ C0zÁ'€„ŸX¥µ©ƦÒÖÜF2²2è†û …BùÒ2¡ñ”ï\xø‰G¿³©O ¹›¾øÇ~ôžoRæ¦\}ÝÔý¿ùÑ5½b°mǯ~þZëP;‡Iµ¥¡¦êï˜üBÆ•·^ŸöÉOïýýÉ9ëo©ä†ˆS:mÕÊE¾¿ÿïßuË.ÈcزK¤×û®´xå~,9‰›rÍ •GûÃ?q !Çþßýðùúª¯,£aJÄ`ó:£ÑÄ+ÎCúÉsûÂVÑøîžŠnÙÿvv~üí²è̤‘­¸þ¶Åµ¿yäÉ- }!oËÞ?<úø§ƒ–­LlÁ‡%á'V©~ù¿~À u|ñÇ/4.¹am.5) …ò¥eB;A¦èößx0ããG/™^P²àºï½­\wÛjS²© ž©––uó¦^ÂMûæ Ï^ÚþØeS ¦®ý×Îjà!ëÚoÝ—ýÞW+2¬É¯ÐT­¿¥¢³É·âÖë ‡½+qJg\¼ržè7.]1•àg¯\Êûä«&`Ù 7õ›_ºE~é¦YùónÓ°aã JÇjD±åwüôáÌïœW?õâïï™vÑü°‰;λ7Lñ/¼þHîÖ»hJñì«zdî‹»ý&´àÓèË/½vÑ¡ï®*+œù•”¯½ðÛÛ ¨õH¡P(”//ÈívŸëŸú(aŒEQÓQ…¢ŠÑ'U ,˜ÖÖîíu3ˆÉ@<~â˜(Öl6'˜fggGAAa‚ÍB¨¹¹)?¿ Ñ«*º: “QÑÔÜ”Ÿ—œ B°Ç9ð9†ŽÎ®šÓ§FV ‘ÆŠe5{sÓÔ©ÙöÌHHKzN2ošçcŸÏ7j0“ɤ6Ôgêêj˜={öÙTJ¡ŒŸ†††êêê‘,ÈsÛŒÝû(ŠboooZZš¢(NE=&„h¸ã¶žgëX¦!‰£ÇÛ!DÞpѨä®]»"i:Î%K–FQãÇâyžçù]»v%U–®ÿ+ž†+ÊË”1–dyWµó³#­޴Ш×$•T ªå8È~€!$øø@[u“çæU%Ìdö¾îOeïß äž'æc—óP‹ãCIöä¬8×y™©‘¿ªeɲl{{{JJŠÉdJP‹^¯ÏÎΆa¼^oOOO(JKK³Ùl,;ȻɀÃᘀâx}^Y’¦TL=uºzXó±£³Ãl6§å´´6OŸV™xÊ„Y– Éócl¸WÁqcTy÷+ãž# 0q¢Â83Ö™Óì³gWʲ#á8 à/î¶´¿Í2 "„e̽ðö_1ì¤ iqX-¦´Ãd$ãÚÚZ½^?B¨«««´´ôlZ½½½^xáYSG¡LV«uË–-#]=‡ŒÇ|”e™aY–eYfY–cq¬[ÃÖjùS¾1EF =s½BL ÎRPNœQì­[·j4¿ß¯&%‚(ŠÁ`°³3<öýŽ®³,˲ljjjZZZ(J¼mjsôí9Þ–Ÿ•ÚÜåqôxMF(‚XÂéøüŽŸÝ»Ò ãè*B±¦c´9hP¡,«yÞ´œ¿ìh¸rav‚é·´´TTTƒÁÃ{Z_Ѱ5†ôоž„z㈆7ØÒ¦6t¼áówL/¿)©¸É¢ˆ¯wÔzýdª5œaŽãAHÜ|T¥¯¯c|èСŠ)ÓA?Ä Héé©åy^mP¢!„$âJä–:ººléé’$çæä565Å(jnn,/›¢Þ‡¾>OJÊDúÑÕ s¶‹³ŠÞî6¹ç¨‘ q•ß°æV¸Ý}ŒW2„(‘7õ_!.³ä[Zª£õtç¾ÿåº÷õt¥f䎔ø˜Ÿùæ×ÿÝQb×>õð•c(T"zý~¿^¯7›Í½½½#…ÑjµƒAQ¿ßŸ gzÿ±:X0s\_GëééOt åç餎«w±æãž={–-[¦(Jä ¾Ž8>5ŽíàØ.ŽmEÌTÄΔ¤‰Ã»ÒŽ ƒÀˆv’Ñh ‘»¦ÕjÕé‚ D«ˆäAb2™0ÆGE&!¯¡/ žjꄤ²<ÓüŠtY!›>>¡1šd…H²bMK}öß½uI"I ‹j;† H†AQwŒÄ3N!X«å§–dþ}w목?qÓUÿË”4†CÆ¡³5çutYjt¸7¸wÿ±Ž3<×9š¢ëEä1úè@zzúØÜ0 ÃìܹsÑÒ•¯n­ŸRd×iô‡Zz}>áæå§OŸ¶ÙlÑ*&pHÔd2ù}>‹%M¯7t66ädgGOlh¨/È/”$I£áý~ŸÙœ2]!!$KRDŒØŽ,˃¯·/:0ÇózÝ(®¯aUH¢4ô<Ã0ãQ¡—Y\•[T©q8vþíÏ £'A”÷™ Ä`¬sãM™™YHkiÙÍrÜd<¤˜ôß¿yn70IéGˆ<öj9ƒÁ ÓéÌÏÏ “x‚)¦$~Ódû¯@ÀëõJ’d6›'oâ…2áLRGH½‹û¸lÙ2 „DFŠ©Îßj>FŽ$0LA~@éÀLEì"¨¡v?/§Þ›Íæˆ,ŠbIII èëëA=9Ô| …B.—Ëh42 £Óéœáäìõ5wôÞxñLƒ.ìbü·õ‹ŸÜ´ŸÑèD YÏ’ú¶žâœ4õ*Æ8©Î~d÷#ÚWÓµûD·Õ¬%€€=ͨȘe¹òâ¬5lÈÑC"%uÕþ§5»á:¢øÉRä!àϲ"ËX@Œ^”½ `Y~ÛÞ_¹ð¿“Ld”âoÛ¾ýLCCffæk×À‡}ÒÚÞúÕ›n2Æ5Š7’Þ¡õ†¼YEÝÝ&>™R[[[µhùÆ-õw_1רe½A©$ײ»ºãõÏ[W•k0Æ‘Á‹Èz‚éÇf·g=Ú‘šš&ËJaAa}ý™)S¦©—|>_ è7›ÍWS8˜¸R5¤ßï +²ÏÛ—ššFHøÃª¤¿8Èh4úü¯Ñ!¿Ï——_ áG|oV…·oŠpjª CÒ*"å%Œ±Õj½øâ+vïÞÅ’VyîÜyéééý³`$ö$;a½ÝÑ++ÊîãÍÎ/=x²q޴¤¢'¨W}ìÕéCêAdY6 ÙÙÙ„FÃó#_§¶w<ϯ\¹2fVA¢-Ç+ÒåVÌ+Ôð @€7(cŽå*Jó_ÛvææU¥ j‰V„žºïg, r- €aYÐêB=µß" çu3Íy_Cè¬:#eE8Q»Él@HÑÌ ƒbeEäzƒ¹àÃ÷]rÁ³ Jzyþ°œ©oØöÙöT‹©½½)7''';{ïÞ]f‹ñÅ/_wÍu¹9þïN‡C§Õ¥ZÆå-S‰©CMÉèÀêC;ï Ëåjð›VÎ-BÞ $ÊŠ¢Ïûe$ ³·³=///¢q½PTTÒÚÚ”™™ƒ1F êõô¦ZR ¡±>';W’$žç`iIù7ê¶ >Ÿ—ç9{†]­•ña¦!$Ä·íbTx½^Ž›xªí ‹òò†ŸêÝÿ„B˜¨1y§Ûk1xŽ à†¶îm_4†Deÿ‰žcÒ̆¬t‹Fñ Óë tÍXç’ÆÀ0ŒV«Õjµ Šbmm­Ú´··[,–ÔÔTF£Ñho? 3#-ñÀIõ_*ÕÕÕA¢9Ö²¦Z0!®^o¾Å|êÔ©ŠŠ µ ÊùÌ$u‰Ô»XGÚÞ½{Õ9㑃‘ˆ±‡ºÙ±cÈÀ$ði"ï$ò‡D9@p£‚³doSN'˲ZTŽãdYöx<Á`04AÔi‘’$I’„1öûý]]]1c%q°§³mæ÷Þ{¯jþÂcí˜;‚f­)5$H‚¤H²¢` æÅÖ£ØœŠµ¬bê[o½•`â€Ô¥3ÑãבÿÙ’ý!ÙT|!ERˆ¬`AÆZ­&##õµmõ‰+YpôÖ×^PIäÓ@D €¢ˆ'tüñÓQ£n—Žß᪹3Ø»sœŠ§¥sǾã?7[4ÙVk:§•½z„X„B”.÷gº”¾÷·ß:'DÝî={º»»:ÜÑÖ±k÷.p¸\Géìê|÷ý·Ÿ~öEQN×Õ>ñô“ëÍ|ùà_ŒSãHõ"ædL€1h1™L.wÀjÔH²ŠþÜÕðE^£ñ•ÖÖÖ-ã,W4)))¯Q°ºŽ/³±±Ž.³Ù,IË2ím%Åc|ùñûýÝÝÝÝÝÝ===¸ÍਨK “UávOŽ QÖ#8N÷pôôô8N¿ßOIÞ¥8"xû/>zâ[}ÐïÀkW,«Ìª*·/žQÐÔÇ5÷±cÇ&)“ÊDqn;‚Ø ¦úü£âg]\Ý;F0äaR*c°P‹ DÀä”"¶T§­ˆ7²®Õj%Iâ8®···´´´¹¹¥Ï/F<ú. †Ä"„¿ß•–f÷0‚“FËòš››™âóyKKK –×;»ýH&–0H”IÆ=^‚Mü®ZŸIÇ»{º/œ›7sæÌúúú’’’QïD[ ýväÀ¯ˆ$‚Ân–A„„G¯0 ϧXLÿ¬áÚ ŠQ4EöøZ~lË)WÄD"ì“ü›‰âQÃ`ùHjÚ"Ÿã1"ßcHËœú¤¨mz; žÉÎ,÷‡Z,(8¤("! `\}ÇÑÝçoȲ.þd÷}k/بáÇ5TÅ3 g„`PVPH9]1ˆeY£A{âè‰TkÚ“Ï< zƒ~ßIGV¯ÑëMUóæ³˜1õ¢*H´¨1.“c,Š¢Yov{ƒ Ûë uzB]½!†D‰ÑhŒ$«º¸Da"ו;~´¸¨$ Ùléíí­­Íe¥å¡€0ÍcÞxUu ">Ÿ7ØÕ ;ÁÐ AIù¬¦»³7È1P`3,bgú§$®‚Œ¶ò&f ¾:‹Èè>ÐÑá9¶,S{ÕŠißÙG0Aj›ºNžé°§ê%7¶»8–éé Õ·¹/™nO1LØ(-Ã0&33rrrNœ8qüøqõÒUW]¥>ê‘íÕ&ƒ¤ú/èêrlgVT•cŒe@†cÒÓ ]Bn©¹³³3+kÄVÊ9çÜv±s¥þ‰ê’4Ìtò˜|BB¡º½bŒy«(°$M‘‰F¯Ÿ×ègó¤2~C¬ÕjƒÁ Ƹ···²²rÏiw/äèµÜ XÃ% €µW06íl&˜ð,Ü{ù”QÊÏ }ûö-\¸P„;.ŸñÊGÕ­}ÄÙ'bBE9’:d{šQ‚?X_…1NMMݵkWqñèV:p1c¯À’°ˆÕq.À²ˆc–A€cb4辨n½†ªe„+¬p³€ýì¶Uäà^½Îê{=Èeë,“¸ÿb[×Oà„ÞÀûCíC¼ àD7 -Ÿ¥ðÃð‰8dâ„©««ó{= ˦Y-AŸßï=U[Ë!–c9YaìÙ9ÍMõ§Nà ¢tÃõ7ò7¥¢bœGªábƒ@@’$ƒÁ’’qØCòseYž[n?Xß-ÒÕã÷‹á, €ž0™……ÑÖ걯s-5;v<¿ä¾§9n´±×²Áq\FFF àgV¯3œ>]]RR †ôz}Ý™ÚùU ÆæL#„ƒÁ@ÀOƒ­.q0U…N7h€òÿ¨.´éߨÕX¢\43ûÑ«ç@ÿ¯“  ˆk¬!z½^=Äú“×ÜGŽež~ø w_ 7ÃòƶºT³ŽePFš©ÅÑš—ajuxüA©Ùá‰òÊyE×­™3j‚ êUolgg'ÆX}ö¢×xFöëfY6 ©¥NDéÁõPU™ÐëzâýƒA™02°ËH á!’Lx–A’¡··—š”ó8s'©#H¤ÞÅz÷íÛ·téRY–#ñ‹d6›EACÆæ ìbÑ)pÁÅ9‹ˆ1xür W:ê† Fu& B(H …EY1ë#ÃÔÃÇýwWuà1p ''de+Š¢( Çq¡¯]<åwoíåw@V†-EŸa€{¯˜Ê2 ÆX–åÄ÷„p>±ARXž‰GVˆÜ¿TЬç¶í«}ôÆY * ÃêÒ*~í¬ýž5kȇ Ràs¢xÒk$8ܸÅeÐ5ôuþŸÎò|ü4wïÞ=´#OOO_²dôÅéuÍÍÊ.‰Nuª%Æ2ƒxıX’€ÇW ,£ËÏX'M—,|,eÌÞ½{Y޵¤˜+*¦464H²rüä Ï3&³N§BLFSÇ˲KŠÅd2õz³9Ñ­sâ0´^€,ËÍÍÍé9ůWX¢h˜înÇq™™™ª3&){K]… GÁæ}µ–çqAAîêv=tMåë›^½îºë"÷½÷›yXkßétÚqxÆóW¯ /7ÿÐá/JKJ}>EŔֶ¶Œt»Ïï-(h°’!0ôêÞ>__¨©ÜЛ=\݈=q-z½A¯7ĨPiîöùü!Õv¬œjqEûLŸPÈ03£ç­G¬°¹˜ÌËC"œié®iì¾iUiO_ðý/ÚïYW™Ÿa(̶î<Òäì.[TØÔáiíêsº½éi‰ní>„#Gû|~Žã¼^od½³(Š‘¯g566¢þÖ<Ï™ººKJUÕüQOjåuRýBˆgY–ý!™gÇ2 &‚¤´‹›ÜÇÂ(”sÀäu ­¼Ž‘—.]s?ë{(úx° ò ä ÉgFMÔ ó¼^oEE…(ŠæD™Duç‹Ã1l5FTƒ¢bÑ1ó F7Μ9SYY©¾ªª(¿vaÑÿþ£F’µí=04ùVöšEFeY„ÐìÙ³?ÿüóåË—š>nÆ›zg0Æíé>L:nÛÞÓ÷\R@dhØñ´b¶òÇ\õ?IµdáàkDq£_.¥ˆ!ˆsòÌ%tñ¤Ñ\áïÞlÌX'µŠŠŠüãÑÛPY­ÖG}tÔlœ®ÏjËò[bRŒºDt²¬HbÈlHoëþT”½>%;í"$ç®Zøc.o·Ûít;µžaØÆ¦@¬^Ï)‚@2šô™©“^·3Ïléu÷dÚ­õ §1!¹cýúÈÒѱS/cÜÖÖfÊ,ÿì”;?Ë*c|´¹/Ëbœ›¯kkkËÏÏOÊtPåäÉ“ã/¾øbÁ‚«gÙîv{ý%™æë«Jžûݳ·Þzkä™Ù÷ŸÏžvÙqHÉ=ùÚ>ƒ¸¸hÎxŠCaA¡ËåÒë ¢(q‡ôööΜ1Æw„€€€N¯ë¿4¨ BÔÀ*‰»²T„½z`B¶žt´»ó‹S±‚‹lº÷4–1V´÷Ë!ý%%ú«°Ÿr¸“ƒ-abµÚ!„ B@x ž ³­7¬™™cO}kÛÑ;×N;Z×ÙÔ`·”åÛÒ½Ál›eÍ©uÍŽñÛŽ°gÏž%K–‚°eË–žžžèŽ‘©À^¯¢&8-Z´H£ÑìÛ·wáÂEñWW€&HRý—N§#XJÓsÍ®  +oÒñ‹X1Š`ÔêM¦sÿå[ e$&µ#H¤Þ}åud%zlnXó1Òˆ$…F£q¹\:NŽå9YQ7¶è7 2ûežeA*ȽòŸ>}zÉ’%¢(Š¢¨.Ö!„l¸¬ä™·NCºÉé –Ùu‹Ë4v‹F’$–e1Æ:NQ”ÖÖÖDJÔ½Á‡»-‚ ·÷†ÒL:u¦TŠI£ÓjY1ê¸?;zëŠLբ綒ÿçn|Ê ]…ȧDq)2ˆ¢UŸ~"uöº^N³fÉþ€ˆ@ÜJð@<óÑf³=úè£O<ñ„jAª¶côÎR#Ñë?a4óŠBˆK5V´wÔf_žjΪk~ÛÈ!—ç¨^›a3-ѳ•U³¾5žÂhìë D³³gÍž:eJGgçŽÏw(’D0œ¶±¹`9í=wÝu²ºúÓ­[AQR”e‹—$²7ÃÖ‹ÆÆF­­äp“ïÖËf!ÄøC’7”ùñÁæ/Z„½wèæ®qEqÛ¶m¡P¨¹¹yÊ”)MMM===Œ(æéõ͇[dGÎ< nÈô{>}õßæW¤)î?ʽí™eŸ½á?rŠgŒ§t1X­¶[>uñ¥ÝÎîœìÜ÷Í^4öMRÕ*ñ>jµ^AŒõ>Ƹî``X%ÒÆ¨±£œaÞÕüÊgõ€•ˆß°L°Â1DÜà §ì Z¾–x3ý ÅŒVÇœSÿÊŠDð„­¼Q’s,ÛçDIQßj‚!Q”IQI–• ˜kY__¿`Á­V«Ñh*++Õå2C-åèFc0BÓ§W666ÅIßžžšxf’]ya‡wêùžceE rm“si¹¹æäáhÏ …r^1ÙA"õ.vîcâÎÿè9:1Æb ²¿­½4’$étº¾â5:QÆ8œÄÀu$õ¼Œ±(cB@¯Aœ,ÛSG÷I Q1ÆF͘úeí»/)ø¿ò‹SKÒäé–H)ÔakEQJKKÛÚÚFýNqÌ݈¾!kî<Ö*!QEIØ8°¨jªQËoÙybU±hÐr‘X£N9ŠŸH-|°¯m# Ïí §×¦L˜®M©r×}7Õ¶P îC( ‹ŽQS³Z­<òȯ~õ+xä‘G¬Vk"Þ”¢`Ñb(li©Y6ï'Þ ­ïw÷Ðj¬)Ú9é¦UÓ˾šì›ÆHá‹ ®¿år ˜s²² #×\TXÄr¬N«uzÛ 2ËÚÛ;Š‹Šú„îåË—]°|ySs‹}ÓJgóܸæ\­™™™]çæcŽ›.-)„A˜a@á|»åtCGåÜ쎎Žë…$IªƒÇårM›6-55uÆŒêT3–e™~BÎö3‡>|lqe†¿ó°³«µ¾;˜õú²ykÇS´¡(‚ üþwµ§õ§ÿö7ÒÔÐóÐwM—_‘`ô¥*ý›2’@  7„߀£*Šš8‹Àf³õgx”{H!CUì­sµ(«gØY©0æ‚ÇÀ2º 5P—^Gÿ¬dp³¥þu:z½Þh4bEÁê´›ƒD~ VGÏæ}õ¥y©nOpç Ç=WΔ•ÆE•y{O´8ÜÁœ ó¾ÍV³!מšaMÔ9¬Þ@ÀO ü(77'f _µ1&oø„€,‹²ŒB.—³°°0Á ŒJRƒ×PXXX]]}ùÜô=µŽ¦…çÁÒ2‹'Á`ðµ×^»ùæ›'*oʘ‰©zg§#•±^BT?Ͱ®Ç›i  Y– !½RN”ÉP{Âí-`Bd…(ý»eH’œiÑé4£,»>pàÀ´iÓÔ‹BL&“(ŠªƒÝyqщ&Ïòyê/Áó¼N§“$IE„PNNξ}û®¹æšQŠú¿O8dámjŠqõÜ|A@0¬s´i8fûÞêkªLDbõz½N§SwÙÛ Œ!%÷_W*ˆÀkôÏ"ey‹1û‚çI k$œÐ#e³Ùyäõ Aí!…„8FÛçuÏ(¿[µ€¢ãSA™“Ÿq}YÁåI—jdÚûN?}ìÊåyë×ÿ¼£¯ö±ƒëæ§Ý¸~ÞÏ;új_%ÛË|ÿëçýcCõ¡õ¢±±Q",b@‘ep `L\½I€¾€‚}]‘)bñihh˜7oÞ¾}ûÒÓÓSSS³²²œN'!Äétªíäyžã8Wë±@Ã?f—Ù½-»Ú;õÁ’«¾õl—k"¿8âÞ·/ÐÐÐñÉ•>žéˆ(êñš9ûÅßw›ÌŠ£[[X˜¶`ARiªUÏh4ª;ºû|ÞÈ7îÕ[낌ràaŒùĈš‚ÑhP!‰ÐÓPmÇû.Ê]SÚÈCˆ`¬e³² ‰^P†¸T‘{ú—ÚÄqÀÀ"ý[mcOèØ5dÛ,e¹©û¼ñêÅÌÊôÅF‡ßÖä(Ì´Ì(¶°·!Ý¢]ž“:îO`‡BBww—Š‹‹öï?8gΠA1€XT«0FÇ«é FIšÈ¨&5x­2mÚ´ºººiXg0b1äêl®s»Fc{{ûÆï¸ãŽ Ì!…2~ΓŽ`¶ Wÿªg†: #nƒdMI“É$ËrGGÇ…˜RÔFXÁc‚_:£Ūy£„ÙlöûýãP(Äó¼úÅ*BHz:)+Êl6!˲ j7–’’âõzùB1Ú<§~¶ù*Cºæ¤òÖ/6×ô º`(˜àñÆ}ò­UÿÍ ùFHâÄÔ –eµ<B}~ž°‰^PË!Œ±†CR¿rffæ©S§Ìf3!Än·«ŽsY–C¡Çqêò¯–ê-)ÁÃÓŠÒðÔ‡ß[¿¸ÛX<5½$?}JQæÖýµ¥YæÜô”¢kYýH]×ÌR»Ëãx޽÷ú±×>Bˆ¢àæææúú†’’âˆÅY–ûú¼¼fôé¤I­¼öáPVV¦(Joo¯ FcÆ´iÓÀ;3‘‘áv»Ÿþù;ï¼3ñå’Êds:‚I_y3K,þ¶Úp'nDšÍf“É´gϧ¹ªpz^PR½„ƒÂÄJb‘,¹£·TõíI’ùŽ ø9«"Z !‘nÕÐÔjµ‚ Œòe‚Á;bÂ` R]ô-BGG§.ŸÁqÄÚø“’"zßcB2,B"_dG_BV ÚôK&Jo E9k[»ßã8£  Y&’^o2”eê–[-sC¡Bˆ‰b̺ÜΟm¾*³È|}Úov¶¾V«ý@ˆßœúúîö79>­{÷/‡Í7Îþ÷1w1õB¯×»Ýn»…¯nve§éŒ¤ç‹€EˆÈ’E‹.-A·–ÅbY¸p!Ƹ¦¦FýÂ;B(âìä8®nß_rô­¶tÆ]¿ýX“¨-ºrí•ju¦qNèŒ ´´œ¾öZ£$srz½¥¡Á/Š©·Ý™VµÀøË§OÝò®£›ãù–Œ ½(¦××7^sMþÿÈ'ñÎþIdÀ:fÑÉ0<ày>¶=EQx~ªªbíÜœf-ËÊmáQl‡0&„ š¯LJÆá-œbòù˲¬j8ªÍ}ŸÏK&èKK Ãt{•×>:òÝÛWÿuóE!z­&/3õ“M…9“A§á9kŠ./35ÿº£¡ªÜ:uj“X1¥¢ººúLý™ºº3$Üãðý¿ 1(#ݦ(ò¨&ùä­¼õÕ]–eY–†QëTOOÆxõêÕ›7o6›ÍZ­ö£>Z·n]âÙ P&•³ÐŒå›×ªÏŸ9)¦j‘À«†Xjø¡C8ñQ׋ôYÆnõúåð+ü`CS ŹfŽ}½NGG‡^¯W7˜TLJDÜÑçÕ=Yº»»,ˆ·¿Q7ÄÎpT¯Ê²ìõzëë ;÷èñ£.‡kåÊIÍK)°j›F2<`Aêç,ƒA`F 5ñ¬ŸÕV…úŒ›#IÒ8­·Ô!?žµi Ïl±ôAg¯§C§µªO¶mËj¢mGum»:#çëÐâ[ôöÅ3.Zl¼+•Ë»ºüû7æ–]i7”$x¼¹9mfÞòaSޝ7RÞ¡õ" ݼrösïŸÒ±6Ö¢U0øåP­cý…e½óׯ~õ«---£jŒ Þ½^¯€$I¡Æ#ïä™;-Œ×UäH_¸à•Ënl'%”þHÁ$§ööÛM’ä›?ê“O*¢X}źTB8­žÂ[RS¿r‹ñ…6[Ù3ϰMí£ÖÕµ}ûÛ9/½Ä[Fy‹©nQ!!„Øl¶‘ÌLj/~æ£T`5HÔ†ídueö´œÕAQ寀1(Ò­"˜`0„ +]6Ë5 ¨ˆ˜JD{C±Ù¬ÑF$Ã0DZ,ÛÚÖ*I"¸z\õÍ­ˆ(‰¤?j ϾùÓ«X†€›/»ŸÙ~¸)#E[÷×^0¯dõáN‹f“¡#8ÉèU¿ÈC[QQndÔ»¬ÄG·°˲¬(8¾ö¤¾yxÿ¥æ\’$Y–Õ)Iª§@Qµ äyþâ‹/Þ¼yó´iÓz{{ƒÁ ê0¦PÎ>Ã>ɓڌå›×Im»šª©ZÇIYE¢(:]®.œ™g±‡äAIÔÿÎô#ø³rÚ½OÍ¢(§NÒétêâAµeÜeµ¹×h4ÑMB(×Õõ(Š¢Ëår¹z-ZxèÈ‘¦úúË/_7ž £”~Të-r)@Pí¡‰g[Jº®»³O—û#µUÄ ± £µgX—{ü5s™ÛÕŠÀef…"†#Ã0cuÛ&5c¾G€n+Võ(BnœùÃÈ¥DŽo˜õ}F3!¿B„’’’íÛ6ß{ù…ïìm®irò,XSô·­)c” Ýn߸qcUU•Õš„hèK¤ÛÙÊ §rç­lÛýÊíæY—<ºxÍWÔª±ÉÆIësÏiŽÀÔ©Óž}–ÕéBuuF« wvjúWŽÊ+$Ro¯¶¬¬â™gšîº+»»ÛñÒK¹=?q­NçptaL°¹ûýý 9ðÁ€Åo ©N«ërtFT „‚Á V£UUØ-z=q3ªÓQçûØgúšÎ¿Cʸ3q*Á ÈRÿÈx$Ã`àLÓÞäõy;:ÛE¯gÔd‡\yKò3ò³ÓÞÞ~rAe()ŹéÑWÇù¤«_‹[\EQDq”Ž&Ã6ú8RtfbâÀ0ŒN§S ´ZmäeÔ·Y–e¯¿þúC‡UVVRÛ‘r2yA"õ.Ö|Ü¿ÿÒ¥K%IŠŒ“ô/ˆO$»Év`z½^c´éP¾«­i˜x‡ƒc9ƒÁPfc²SvŒ4ê¦<ê4DÕv‰Ì]‹„‰þ ?†h£Dõ>ú|~»=ãàáÃMõg.»lí„m¤ŸÈqÄŒ‹Ø‘êû }a6ºz{m¬ýûd0ãÏFtNTŒÚ2 `I±ƒ} ÒE¬Õˆ£12É!:îØ,9µ¿ŸR$ÅÐÃn·3 sÕUW>|xN6·º2‡ øú6ýñ…òòr£ÑhµZ;Ʋlâ3J‡ª8õùóz 4ú¤Ëo_÷dz ¦¹ê ‹wïÖ.¼ÕéÀùÁN#L< IDATZ‡#˜—§)-4¥¥]6›¹££ëwŒ>ÈêtüêÕÌë¯ã£G•@€5Ä[¥‘‘žsÆçóöy½ÑX´OpR{æ4Æ„ç8¿ß_sªæºkŠâ¨HO@E@{™Ixa ¬ìM$¥"  ÉRd?óˆ±1%IÔòšž—ÃÙ]¦./cö_‰L[J§³ovyVu£ãú5¹ñ'h4šP(¤(8âT$˜ˆx &„õŒ1!0P”Dƒ~"÷VL¼ÿŠ .5ˆ`ñâÅ—A e"9ûA4ãÝ6<úoÄäŠü6ô8>v»ý¦ë¯¬jlWd9ACÍ`0ð¾0Ûšžž>zhÕ|AÍŸ?Ÿ"/ ªÆˆíƒm²dË2ª"ã@·{ݺ+&jÈ8fÖi´q¦º÷8öƒTÍò¬æÒfGVûÇL9˜¨œ¨ª !Š¢0HkÐxsc¦®(^À'ˆ,QV¬¸ ÙÁýÃÆŠÜ‡(ë aŒ VEFÖ ýBÄêfÀpŒž}8!o*‘9ѶlÄ‹Q¡žX™¤jqŽ¡øgaõŽT/T¿¯$IpGGB(##Cņ††ôôt½^ßÕÕâ“…B¡öövEQÔ†@ý¡‹Êf=𓿤gÀUO}†[ZZrrrF­zÃÍÈð(J¦ÑØð›ß &ËåbD±¾²’Y³Æëp¨;^q§¹à‚†ÚÚ’'t7v¼óŽAQŒ:Ý™¾>ËÀB›°ŽèÀ„oŸ·­£Íž‘¾ò‚Õ¤BËq)a‚¬ŠÞÞ^I’yhÙ·±ýØ»0!@@ýHÁ0V'‘™ðV²š¸;ƒ!·Xá\.WŠm”]#ÆðÌgÚ̯üà­&¡=M׫ÑhŒFãâÅKŽ=*+Y’0ÃHáå2YÜê„S‚Ä X†!,Ã,\4Ç`0¨S†ªÛ½{wäKÙ`³ÙFý8j‚ý…òÏÅÐ 2yAâõnŒ£{!ƒÁÐÞÞþᇒ¨)™1a†žIMMÍÈÈHÊ¥4Ë8¢Ñjµ .ܽ{w0ŒãÖŨþÌàT‹¿fÍšø¶ü²eËœN§¢(êìlÕzPçh«1ÆZ­6%-íÌ™3‘<Ï«S0yž_ö¬¬¬¾¾¾‘®†§6Y 0àŠv N슙hÇ©3‰ZS"d´2>ñ‹?yÄÑ;l½PßCdYŽžª.µVÎ$Iòz½ëÖ­;yrô-ÔßëøñãÛ·oÇý»/Å‹a˜ŒŒŒ¥K—Æ¿±qŠÆñüÔgžéþö·ó].BHŸÉä_³ÆzË-ƒ"®îGióMûîÝåN'˲=VkñOÊéËI‚(„„ú´p,@ìõõ9]]ŽÎ¾>ß”ŠŠE Ç8Â8±*!¼!5 )ÔãÅ}Fî©uf6ýÿ ›“}GXнš2VkR§Ð ›þxžù¤–0'¨W£ÑäççÛl¶ââ’d§Ë«;éFöIWTT<ùä“‘\=üðÃÉf;BZZÚ˜ãR(ç–aŸÞÉë¯wÈãû”muÙZ¢[éªàiµ“dŽ@  …&¼á‹&b; ‚ .ñS·Šˆ¬Q &Žã4º—V«UíÈɘ½m·Ã¡áó$“Á°õ¢週¥¢.ÌbYöèÑ£………cV‡‰ªz}ÇŽùB:®²ÒXQãž~ÖÕ ÕÕH´³fYfΛºæææ@ÐßÿÎ6ðxu|@”Ā߿`þ¢ñl­?*B¡`Wk}䉀ây>3¯”.шÆår=ùä“ððÃ'»×l4µµµPUU5a9£PÎ @•——{u’:‚QëÝotžÚ¶i\æ#…B¡P(“‡:Ž6ÛQ¥¶¶¶··×ívOD¦(”³AZZZjjêH¶ã¤¿Þ©æcìÜG …B¡PÎÔ ­ÆßO•••MDv(”³Í91Ò©wçÑ82…B¡P( åü‡š …B¡P(”$ æ#…B¡P( % èÜG …B¡P(JPï#…B¡P( % ¸={öœëR( …B¡P’€š …B¡P(”$àZ]]íñxœNçäå†2á˜Íf½^¿páBU<·?bLf¾Ttö"ÇYVÃ9ÌÉ„§h÷ÿÙ;ïø¨ª´?ç–é%™tR B/¡風;Öµ°ÖuÝWÖîêª[¬ëººvE¬¨k R¥w!„ô2iÓo9çýã&“Éd’ÜI!ƒœ/|&÷ÜrÎsžÛ~÷TîäÁÍ1 ɦ¸gb;™ŸôÌ3ÏõTäg(UUUuuuC† ékCB ¶ícnn.!dôèѽm¥=öïß?wîÜ.¸oß¾ÜÜÜ!C†ôàIì¾1*÷¯¨u3 ˜€²pÚ´—_:hy6ÚÜ­Gäî¼êý'ê :\i|Fô„ÌØ0±5}¢P;ÈÇq6|Þøýƒ¹éKÜþ\Çc„‘f Ó…ö¶Ž3¦÷²6LÜoÿáyÄrºþã¢fýžé¯2*‡£‘cÙäääp54B¨¢¢¼ÑÑh6™û<‰³Ä‘ƒ€ÅЮR÷_“°eË–3f„•Žr!„a˜üèRUEeyÿ´þ*E*JMIë’1¸¡¦Ü,¯¨ÌÍË35Zm“!–Õ|ùùª¡C3“âü{Zcû!„ºbS\\¼yóæäää.ÇPZZ:sæÌÔÔÔöÙ²e‹ÝnÏÌÌìr*½‡ÚÒdž††Ù³g÷¦%”ÎéÚ£$++kóæÍÐÓ'±›Æ¨aw^õá‹Q#É ‡[“ní íĺ}¥eu>Žcª:çõó2læ®—ìÍ«ML´Õ¹‚!ÚfØu¬¦Ç³pzj[ÚË˲Gwýìüù‰"1î’«e¹ãx!QQQz½¾´´Ôf³)+«««ãââ”劊ŠÄÄDe¹´´ÔÿÔ...ö? {5kƒc*؆œø¡©¾ê5§žù õ¾ š¸t•±ñ<¯áù°îeg–Uû”> I„D’¤’’’.˜’’ÂqÝJú44rhúA凌3'.ãÁZ?¹ àô¤Ÿ››‹"„`Œ†€ÀJE–e•/(Y–wPŽEqÊ”)*Ó"„H’¤fÏ.Ÿ;,KÛ?XŽkÊÀÄ 2Sw‘9:~̘’$4éCŽÓ0 Ú·w»µì–‘!,H(.kî ÿbºwÅöãAƒM?{OÂ!„b?+м€”ÃèmýuG§o§¦¦šL&Y–Y–í½¼t µç€ÖYG]þUN_ÏžÄn£†'êmõ.Á0!Ö(ÓÞ¼ž×^AüšSÙ(22£óŠXË3qÑfAìúèú¹§j­}uƒ¯ÑíÅ\>ÞjÒ瞪šfëA›{D¡gffz<•û·—µéq…ÙÛ˾¾¿¦Ú>üêÇõ–˜NŸ’þˉâ¯ø \†Öu‹!÷éàšì‘¬UÔº¹zgeî©ÄaýcRÄÆmÄ.yLe„aá/QUB}žDÇÞ+**š1cF¸eB„­[·80¬£zœN. DøЦ˜Æèœµˆ uA,†Ž>êëëßzë­°Lò&ùaÆb±°,ëv»µZ-8žç•zíÊÊJå+Ëçó9Θ˜¨««ÓjµƒAÉcx¹VG— Fë«K¥ÚCFÎ˸ݖœYW×È8DƒÑHˆP™€AˆKxwLtTUI^Å®W¹Êµ•Qqí–ùµ—µÝ‡ó`⨌.ÝÄ›çΞ×4k;Ò|3‘€e €R‚$ÊÑã^R¿ÍfÃw¬½°!Îz>lû»ã–`ù¸cÇŽéӧ˲ì_èB¤”^"¢Zõ¶1¹§jcl¦ª:¯WÂ7ÉG§GŽ2ö¸ö äDYã‰J·ˆ4µ‚Ë뎱š­šnåt߉Z†7ø$ÉåpaBk”¬ávïÉ,œ…Ú–Y+©õÙÈá£ýÓPìM]<~Þe¢ØyƒŠzòÉ'Ûnê¸Î."4æÏ‡ÆFøßи´ÉP¿ÁeNÈ×AB-ìIƒQC`z5€Û‹£¢¢â¹çž›>}zÐú}ûö!„²²²‚ÖoݺõþûïZ‰1EQ’$¥pÑ_½«HöÀ+?¨‡ìæÜr^ŸWBÜ Ãx"²Øf3À&À ´øÚ‹mÆŒï¼óŽ?(É$·ÐûÑ;ÿàöækïéŸieØ–·ý7ÞØÖ0Œ±×ëEI’¤”«É²œsÒÛà`PÞ³¡”¢5 „tÎét€ J]64ËǶy ¹FYér¹Ün7H²ählŒŠŠ&¤•E €Œ£ÓålY‰ËéLIMÓðšPnn•.À˜`Œ£££Ï=wáŽÛÚ6¢e)+kœÉdÂB0†._«V£>äú¨BŠˆª; uà!*UÕàóBhgšÿs€d`Óú.4ëׯOHHhõ…€É©•k ^û èÔ‡ðEs–Às—ˆv‘U{E–Œ’S¢Ôd4<·|¶üT¶~ œNºvŽ{©¡q¯S]ïÄ5z$I&˜€Ïë“%™ÓêdLj]’…cªë==¥½yÿ缸¸¸b»Ûët.ž”úãþJY&@p—ßqûOØ5:]}£äóú¦I€ÿm+sbd´ðûòkΟÐ0ÕõABÁ‚ ¦Åé  §¢PQ/yI¡mÖ6­;/6üûÖt9ÿ»BíÒ5DÅ©¬Áð_NÝÑ=¥EÚ?k %.OÞø§ØiÃ9£Vs¢L7`B§Ú1±cÇŒºsO`‘š÷J÷“ð¯èB*g‚Õ v;TUiÍq7ÝýHjÚQÆ“ÿ¸lý²ö†©•p"P;vÊšÍ ï®±“Ú´D§ýåvÎ_:è‚k;©:D™Íf†aÜnwÿþý ¤¤d×1i_ž .eYU©™¦#322   Àb±(Ù;wî 7ëF£Ñh4€Ãáà8.>.^’$yg{0 S ŒÏëëX>B³vI’N•W6Ô¤Ï$„Œ=n!`2bCôœ(<9$c!€I×[r$Ä…ñ-†"À` 4, ™`‹Œ !6å€×€€Pz`b`|ÐÔ ²3æÎØÜKr¸ŽüåM׉ªñ<Š½Ò¡[ÞÚÅŽ=o„Í¢‹Ž, 'yÕÈ A*½„å– ‚åãÎ;§OŸ.I’!ø|ò…™c~¾éä÷Ëâ"¢ûÓÙDD=è{Õ˜'íZ®Òî“1áX†^’q­CˆŠÓîÏ·Ÿ7!¥g]õK~bBL~…K¼³GƤ%,7=満ŒññÒ½9šc‘€½™©QÀâ“,kpp¼Äqî8Ì2Ý{UÑ:u’àõMë…Ú–¶YC%šÑÚ]= Ž|qD˜zùæ^¤¦ÚZRSS£¨™ƒ6˚ઽlÛ¶­;z+ˆŽÏÚ!fü¨Ëž-]û¨Þjâ3λ4Dµl¸4NZ„„z¦îú4$ñ›Âp1@a5|ù…ò1åü¤ä´j‡ ¢Ù¨Ÿ‡Ã­ûÙ¨Ä_úèñ¸µZ­R{Îqœ_>*·6Ï7µ¶#„x½^ƒÁˆ±º´(UQ««¿ÏÙ >Æ£Õh÷;àòºç›áó nŸ§Æ];4qPzÚ€Óùì\5ƒ!`@è üP,¹XÅåM5×2€ àp4Àø”ž5ááÈ-ʾ÷ã þW=Æ™õÀÍŸÞï½5~û;¿e¯Üí½.Ђ壿‰FÛ¶M0—ou,W–å¼g§ßrÇ©Õ7D·k©š}zRýá¥C<öÞb‹%.~í¼ÏûæÈËszªdÆ}äãGïöÓ-¹v&qèÔ…·>ôð²ý:ùþ Ÿ½{Ätî‹edºú‹š/ñM#~óè­ØtÒmzþÏ¿òȹ‰!$NïÝÊ2Æ'Ë‹U’‰Œ ÂbF’°K’ ˜:7q4:æõ„öòóËþNk8Qé!’”ÇO™TQëB$¹ëÍ)°F»Sd‰8)³©ñä¡ñ»NºkÜ(Õ¦Ë)°×³[´ƒ¤f­Ã‘Äô¤BmKPÖBˆHßÿë†É졯³}IçιáqõÚQ!66V¯×ùßY­®má´iÓ”…-[¶„•bH:=kÅ)K’&{ò·%ßð ð|«²fùª«–6«a&\qVåõˆÃGŽEõc0‹²²Êòáu“fž'ÈPVRväÈ‘YsÏ1:+ª_f]qÜÅCt þ+¼ëk4ŸFAØZQ¡aÙes†¼ùHÿG±³,û—'gLÞþO¶à–¦\?ØßîI‘n²,ëõzBˆÛínp£òZ†2<…ÔUH K,˲F£‘âr¹4²Ü–>z¼AòN/¬.Ë2!.§‹ãX£ÑÄ2HibÑ/*aDæ0•…^¤¹Á­^¯7Z-iýRošu%ƒõ8»âø5s.S^2?eoˆ¨×ëë`Ò­fœjé\ù!ÄS„ìåL¥×guX„”áÉÀ9À-€¢9e.*idXÌÄîFƒEU¼.—KQÿßn=öUé·,N½ñ<Ä À>>ï¢+ê¿ÎÖ_ÙÔàÇ™S›{×¶”ßO¼¶×;¥·}ô?ñC>úñ7M Š[òû‹ï¿nÅ7U‹®o’¯ò±Vlëýs3z¬VÏ»å‘Å·¬ùÚ7¹—45ß±æÍ_Û2ùoóz\?vƒ6~ö˧¤—Á÷í IמkñÐ3W\ÿÕÈ×7—]wò½[—\qmïOØ£'¾ã'ZNÝj1–6ø$™0!"NÈL€Âíe4’L*ë¼é1Úœ“öQƒz¦ ö‘B{aà9ÀDî+gn.žÁ2&‚,w­íãÎÜjК8D·wÌ %†¬ŒØÇŽi8SƒväVvê>ŸØô‰Ÿ{ª–0|Iµ‹ix?k¹Ý™)Öƒ§œŽz¦_»ù`©¿Ê,Õä40kã§q,³òá¥sµ{¿ÉDCÒuýèóMy—ÏP;¨M`¢Ý¬¼îøðp³ÖÞY»eÉ_‰àBœV¥µþÝk– Lƒ 1V6(-ðÃkì¥2‰æ DiÓVáníÚ¦ÓI°eã\Õ±iCGŒÊryå#öß»nÒÔ™œQ7yÞå?®Ì€ ¨‹‡h7x忯nm3%ÑNJþ1i¢Ža5­{Ñ"-~r‚·QÐÉ„Èí6OÔét Ã(-ÀårVHûË0g“»»RÇÍ‹Š‡ÃaµZ•Êë'N„´ª=ç+òÔív[§Ó ‚PÙX½»äP?sb‚%F¯3lÌÝ&c¼hây^Á[ïj,¬-‹‡\Zù¼Y²fDò`¦ùKŒ7kyAã¿$§ »£ä€#ÆàoÙÑIämvØ›sÆP%ª:BIÎ)úèS#‡ €=µÕ¦÷?n11šFÉ%X‹Щ Â|2ü­Ñ*î»ìììèèhBHíÎã£ÿswÔÄLÒ›ƒkG>uÑñ»~´ÍLçcô%¯)~ñXò†Ç_Ñ_å–[‚.}ܵk×´iÓ$Iò/n•4-•×–¯®÷àNÙicnÍôÝtCé w.ym¶OÍZpÛS/Ü3ÃòuÐ>.ødêÄu3IÙñÆêýÕ羺vþÎÇ^øjg¡Ó~ÎuOü÷©¥™Êèzõï/Nºa!N?dÎÍO¿öäÂT@>úÏÉ×ÍøKêöW¿>P£ÉXpÿÏMÝùè=ÿþöp­aÄ•Ï|üÆ CZ‹6ó¹Ë®Ž]°âÓ¢kÿ8€ö¬|ÿèøÛVõ?ðÆm÷‡Hº)‰f ßË_üÑÀ–€Kwï*tÅŸ®ŸÄGοí¥ùÐy.fýuÀŽW¾Ü[ý¦-{ñýg§°Ä¾åù ÆʶÀ Ân·oÛ¶­í6mšòÈè"⮕ïæN}`õÕC­²nyêïŽ}ç㣷ÿeDðÀ½gÌÞ|;Ò˜¼ƘX <öøÒ“¬ÀâB¯wùdŒIƒ—Ùž[Ý#òÑÞèÙp¸ŠÑš}’ìsÖýéÊævcƒ(aIêÊøv§OF^6òef¢LMºÍjÒ&Û´åNRëÂtõÍ·ØûÝ­©ŠþÛúÝÑ·?ßÿf†û§åó/¿`ú¤›^û0{eJÍç·Í»ëÏ.üêºÖ2µSnºaðëï~päÎGG²® ï|\9çÉs6^ÑS¡“† Ç'耥íYÒ“ÝR*É·Ìí>VµhZY @ÜìQ&uÆaYd1èšÔ@ƒÃ+a‚xV³cx†¨¬ZRŸµ™c†lÙ¸Ö>^¯×øG3ùö[UúgõØ´iS˜Y ¦—ΚŸNk–†¹ôÒKýb!Ô…»¹½Ø"Öw1‰@êëëÝn÷c…sëÖ­rSôù|‚ ¨ÜY£Ñ(C$vsL¾ì…°ÿkÐšâÆŽŸêòɹ‡«Nî—¼Îc‡¶¥eŒ0D'™0ÿðÆO’@˜ y"Àávb;pàþŸJ=õmÁ·ûö)+·lÙÂ0ÌO<¡£JøŒ¦¢ŸöÌ>ض”a˜èèh„Ðöòò/«ªà›íëÉñ8à6d-ü¨¢¢GrÙ«« ÿ|ˈóS”øwïÞVö ·Ûív»šJõ:0ŒC4-ói¬:^§ó_Ecú ;å,Wÿ´oº›ƒ‰‰‰^¯W«Õ¬Q«×›µ"áyÏ'¢(ή·³Pº«¤c!È Ì¡qfN§æ¥Az†—ð‰2r¢H¶;AÄ ÃÈ2 ²,c‚£eY–ˆa»ó¦^}´Ì 0ðÑ)Û‡}sKzú_F!Mx3…å– ÂëyÝqãE¤Ñi9­ÁlÔi­¦ÞøÂÔövä'ÞõÔ­àèS¯oyîÝ3RÓüG½äÝ»þ·ï‰ÉSd*ÒÆŽZúøoü~sã­×Fh¦ßý÷ëFÇ0³àêó?.¹ãÉK†X¬—]5ëîåOH×ŵ–¹ìðë—Myö?+w>ðü4¾ö»_‰ ß±î©?vt“…­ëÚZÒŒîœþôe¿g^þÛUO唈qcνúž'ÿrõSGÇj¦ÝýÔ Yq Àø›®šøä;Ù¥x~g º,.\(Ú-Z¤¬éàu v:œ`2ýCåÍ&\Ôè&` :û½d̾ãUñõ.0ë9Ñç5p€²itºíÀÉ“&®Ö!6¸$3Ïî>Vݵ·¸Ÿw¾?b¶FWÔ )¦•JF"I [> ¢|¬¸l SWå0êÒ*ì-Ã[´œìs›´ºzÎ.¨;¢ Y;ÁfÖݵx„ JðËþâòF}ƒ´È;L|ZBKûÞâ*Ç·»+ì>Ú@†&°óƧ€†çl–î6ÙÌZz´1??7)¹ÿè±?¶7,8Ç›1ãš§?ÜiÒÚÂÍšÿRéÖÇO÷.þÞ;kÍæÁ˜1£GÕVϵ-l. w,îÐ…Ž=˜D{tOþpz&¬›| ™P¸Ò‡^h‰Itûä£û6K^'ùuÍôù— FÛ¨Içælýò^IH˜p5@ÈY¥1Æ©5IéX/ÖÆHDò¯„€÷¬=QçU4Z­øPˆ§ in´&h¹½ÂBIÊ`Ð+£ñ;Ÿà€þ†D·Û£L{CÑXµZÉÐ|iUkÊÀ©$yçϧV«eF«Õ6}ÏȘ‘_>€F£!„H²Hp×?ãcÃ(“SßóÚ`²H¼Yæ´D6›ÏdÁH–©Á£)súܲžcxŒ0!„Ór™™™„Çët¦ÚÚº¼¼¼NçÎËËÓh‚›ÁyDxs ~b¡Ò8«fFéUŒm©ü9J•5MýWVXn "¸ícÇe¶• ]Øaúà-áŸ÷_0¹Ž>ëª?.¿~¼-Ô½Î$ôK`„Ò¢RÏ/Heÿàß‚,×U+•;烇î}î‹íy‚Lhf,ªÇ€¬ÑQÍ­$x>ªydÄkx9ÔÉfÒ–.›ÿØý+Ö?>eÔÿÞùÑ|å7ç6~rW»I·XØ‘%­Ûjœÿç×Îÿ3€ì,ÚþáÃ7ß¼Àuä­ ØrekŠñZ H’DT;°…E‹Àš5k-Z¤,·‡Ê§ c2›Àép5ïL\'c¶Ô<³»oŒ Ê'+\oQÆë‰³ðµâO{J”‡E1Þb®ª÷aõöpý¼ ©á¾Åý|»½@BÚÒzÉÄɉfHŽ5–×8ü[k<’ŒeÀ‚$…[or¸ Šáu )٦כLn( ʳ¯©·Fg6pÅ5.³M{ødõ¸Ìn¬`”ÚgA”+ê|ŒÁ­oƒ3P;@j¼YƒJm‹W"Å56‹^ñ’š\t¼?k#Ó¬3†ëêkí:î‡Èš8cÒ”é+Ö'|W²F©¨¨PÞF{öìi6c¢šc•BÇqÔ¥¬a¯ãp±«—ÎZóëcŒU nà #!‰¶X­VƒÁðøã·ÝôØc!„BnZ¹r¥šDÑh4m_¥ >ò =«òaÈp×èÑš<Û#£®êÈöï•­îÚâ¼Ã{‡LœŸ’1ÒÖoHå©Ã©%ÐÒk&(¶qãÆ]ûxF!|= .Lƒ…ÊÊGy„eÙ–Õ¿ûÞx–.=Õzôu%*åuãû]&„Dw?½8Ö Bx¯<þ !D戨‘²®2B|:ñÔ©S¥¥¥„¥_[o„\C&Äßóš¸Ýn½A¡ÄÄeøB€³èt ûEÏk<oK݆šn*Bˆ2Ë¢ÿ(w½Ûçs’”Ѭ̎ˆeum+ú®Ú¢¾òšAH§Óixžá%åt礟×î’E™g9ŽaE¿þÖk®”Z†%ctS«Ëk~üñÇ+¯¼RéÕ%F£Qó2på{ÛILÐ’M†a>ËûP«ÅeŽ"k Öì«$¼Êë,nU²‡ Z÷ÞÜA±F¶ô¿ó†}ÒóQìâeßÿ»ßÜ<þÝ­ý¯æ#·¥½¤-ì‚%¬©ÿ9¿¿÷ªW¾üzÇIaȆ0sÊ2äu¶páÂÌÌL峦3GtŠ5*±tÿþj21 È…û4^4"Dk¹Þ0&»°š×ê*$  ÈáÁ¬!ªÆÓÔ‘@&€ôQ.Æ$LªE“M›]P–öò³/¯òD¥·AÒÅšy·ËYÞ ¯\_@ˆ¬ÈBhôƆFYfþô¶gWÈâñáŠZ/€‚1ȘJ2ƤÚådbw³[•w! Ù…Õ ¯«u‰)1zÉgøpCQ“,h®^g5𥧜昮{©½¬IÌm«*͉۸qÃðaÃR3F¿ñSI‘¹}º®e-11Q¯×çççO˜0AYó½ºÊëY³f) 6l?CõßhØüöî¡ÿ4)½tÖ”wÞÁƒ‡n¯’³K–, W]‘`‚ʃwPõ&> 9´Š€§ÌqC %ÉäÐÞžú²¦Í„ÚºzØ„YnY3rÆÅÿüèðD€£ÐÑÜ…¨ƒX#´?ŠV|<˜Ír#B(..!t¤îÈGüGp‰î’¦à9Ë…åñ¯{€lt×è>©iq´mIº2™aX#(—ƒÑhP&í¿¿óåÏÞ05I.=¼á£ïùƳ›øÜÌëL&“FªÚóþÃ/mã;*Íêӹˮ²÷ÈõÛkÆßûñhŽ…v“B%¸è[—çM»óÚsÇ Iâ«÷öïOGM?€ 3¡hL;÷ÎàÁƒ{ìÀOºá¦¡3þõð'3_¼$¾à½‡^É›öÀÕÃBïõ†1»V¹YeLÆ$¿Ü¥¼Â1&˜€2 ÆÄ¬õ0›”vA•Ùëö•‹« â‡À€VÆE2ú#>DY sÒÂÒêF§À80±ÙÓ@!BXÒTÔ¯! ˆ<†Ƭ¯i”£xRZݘgé<ê'ˆ¸²Ö‡Ph­#º<"†.+ÔYÓŒ‹&¦N6=r86&në¯[³Æe¹P싟í–eÂ0u)k=rw-סïßÿ5:%fÔþ¿¬õ†Í¨í¥³†19räÈ‘#‚ä]€ÈkU(H!$¼ºZåîh¯ž:(‰æÝè¾!¨+8çÒK¢Ñ€X~*À˜sý—by{Y!5pà°ñÛL1ÛööcH‚ÙI0»£=&N„>€¦ßÖB”.)&Ñ4Q;¢}=¯‡³Ðj³øÏÿ÷ñ­Kþ]O¦>ôçe7ïì¡ ïÙSä± žqÍ[ÿ¹6´ÞgÃ-‡3oYõ=úËØöH~£.uô¼ëüÛ|3;ô¶çÚq畃_pèRÆ_|ÛS4{»»4“o¾aèK_ðØÕé ´›tj,aÒ®¼ÿæ7Ÿꪇ¶ç×bcâ)‹ÿ³ú,„— ÍŒl¡koÇv®QRýÎ…©¿ÿQ™-áRÝ*ÐÎ{íäÏ·÷ãÇ<ð¿÷w<4#éF·eèùw~öÁíƒBÚӣƔV7z%¶^Ä’L0!ƒa2 @10!!‰ŸD0&u.laÃ~‹‹’¼â»Ö”à°…wË¢DpþÖÜÊ71 `1êKëAÃëy½3§\BA"¢ÛqÁ¸ø¤¸P@yµã‹må€tuvGNÅe³ÃÈ‚Z…ª–éºB D9q¥5ž›/öÉÇ®s»HjZÚ¤‰câž; Å,ãÒªÆp³F)--UvíÚMØäMyÛ¦:v­ Í[¸·jåÍ)YéÆXËÀºÜ©GÛ7ìáãzᬑ B ´¼S•Z¾p²t’8‹ÐZ⇙äôb“ž¿àª;e „†¦Z–ç«d½1q`Ö¼Ü-Ÿõª%„eòÏN»Àœ èR4–Q™"Wƒ)á0!Äg6{øhC\¸´ý<ž¦vá]+…R.•æiµý]¬š® ¡Ñçð5^QJ¡úÎyƒ¢n›ÛZ!„e¹ÆŠ:_µKN§GŽã8Žkt:êb;%赞×ÑQQ—^z©Ûí’}õVc=cb£H—‹éÇÆ¥è-QQÏüë™÷¼_í¨8Rž‘à“ä’ê²q3Æç’]Óµ $_'/—7ÆÇÇ€W$ÿZGVl#ËÏen;§é5Šú.ï»ÜªlAë3lTµ·ŠgxƒÕ²·&ûhMnÚäA:èäÕ“s^+Eµ„ÿBðÆŠ™ûäÏù-ó. ¼oåüû‚Þçá=-ÍËPÔø[þ»ö–ÿ¶± ÅÌzduÎ#-+lú;,ðp~Ú¿ŽWúCšóß*?ÑN>Øáì"l7i¶Uí[h­9ó¢?¿yÑŸß Þ *`½îÇu6?„{†6§Å-ûÁ»,Ô®ü€‹ŸùáâgzÅŒvŒØ™Sæ#¼Ã#c Z%$¯Ï)“¾`LAʇ4Ãë j‘G ^‘4ú¸_•^17ôË>$¯}s5Æ4¸e3ãœ=<.%>ô±Uu®ÿm.–±‘(Å꤉WrŠj½|°Ž²†$µ·g¢Íôî"‹Nç¹Cö §Š:Mðç\{ìÈ.ó+ÔYqh/·W(Zg{vùe³Uy©mNY–EÉO•öè#VWW§¥¥í۷鍊nЉ‰%²h5jX–eF)¢HеìÉ«i”Á)¨Í!$99Y¯×çååMš4©iåŽóYû{¤nÞ¼yæÌ™Êò† æÌ™£,¯_¿¾ãÓÔvkýº—ؘÕÇ‹Y¾¿½F0ªûÛɲ<äáг¦¼>œ““r¥¶ºYÕù4µ¤Pqù5×òJ’Œš² I´·C@la¨ò¶êmBš1xüyº¨`Ÿ»A1B0`„YÑçµj5Õ”>✼íß`©Ý9¯»oBÈjµ€S:h]1òÅ‚¹Ða8–Sƒã¿û¼xüøÄ~yáB~êTEyø?Ì:Í5!cLš§iUîèæ--çÙårJ ^Ùëó¯õ—ªñ@Óõ D’$ÿ5‰››B–•ÕÛk|¢`±X =j¯µŸÝp¤5y§Ä*°/$•oñÿýrÔõÕ.bÕxÇö7ŽôS’`˸©¤!œ{åW‚Æä°™õL'Šbóvˆ$fNúb—Ý!k%d8_1e¸ªi½‚täT¢PµÈ7jP\{IÄYõ~­s¸°ö"Õ^ cìõzQzîÙg~ùå³Ù|âÄ „Íf;tèÒòF«ÕjµZN§×ëõzýü‰iî•ûO‰ae-ˆÀµ·ÜÞþ*IX¶Òs|ký‡×‡¦_vÚã†&öÆYŒÉðáÇJÞ…üõe9þ$*¯CÔ\w?‰³VcÈ{ŽObœÕŸ½úènܪˆƒ±ç-K˺0vÀèèäaö¢½gŒ$IJ8ŒccÐRÀu±|£Í¦ÏAd‹¯¸‚âÓëM&tÙe`·Ù ¤¤ººš¢~ÒBVWYU1QäBÈãñh5Zÿ儞×8+꽂G–e¿pTÊÝ·ÕÚyg^„`%Q¹8EQp¹ÜûضkGMI¥qÏ¿ü¯ÑÃGõKH²˜,§£¼¢Lp4tmÄÅXÕï¬FiµÚ“'Ow4SeTT”*>uÄ£5š@çÓ±àó¡‚ÚrÑ8Œ&yÏ_†2â®uM !dþ€ù……•›önL¯€’ÎzÁè¤,++@'•×a¹%ˆàwÉîÝ»§M›&Š¢¡ËQSzœß°|cá<’×›Ñ/ÙápȲÜ^Éf^,L5Š¢€=ä™<,YMûrK…jbÜ£û›:NbJfô÷‡ÝŠÖÙ{¬tÚÈ®4¸QFëøvÍêwß}×l6B’““.\È0L]]ÇqÆçóét:¥8!”­×OªÑ«2k„åALÙ±c4+ Àù¬·lÙâÏãÆý/³õë×C7®s6ªŸìôQæŒØòä’‡DçÇØ‰={Öü٠¿>HÏùרWw§!‰³[ÊÐÔA£QÎ=´ÃQz$ä>y;×dŒãÁÚŒ :¿þúë-·Ü´rÏž=¡òòò õÛ¶m 9î£2… ¸SL ÜQnÐ,& !GL ãr9««-S¦BJJL&STTÔÔÔ¨ÌullðªN§£Ñáð_B’$3 ãt:K K<>¯ËãŽÕÇÉÍaYŽç8—Ë•{,÷Ò‹tž J¢r“!Äètºs¦LŸ9m˲<Ïó<ït:y"?¥:–Þ@JHHXºti§Q1¦¢¬¢Ô^š]­äÔZ¨.ꚌkR¢ûÍŒ[$wVy­<[DQD·WTŠx•O–eEQ¼fÌ5z½þ®OîÊnØbåµ—ºp’qZmy­×àezaÆZ?áõ¼¦Pz‰íÙe.²"aòºÜû EQ–eI’”¶;J#eŽãõ³0ûªµ> €’E²íPY§ò±ÒîXýëIƒÁÄ#¯†‘¯Y0L’$Y–eY&Í­ËýÂ1Hôz¬<–E‰cƘe;iyãåäD›Å- (9±ŸÉl®lh¬¬®LLLP3¸À$Aôù¼cIJ,DZÊ]ƲŒÇ㪨,-.9e·Ûkíöôý¹®°;ùƒBXÀËç.ç8î¾ÏïÛäüFkÀgÝ5î~I’:ÕŽ`0 ”`yyyRR8N„òQQ^^>jÔ¨Œ~é?ïý¢AŸ4=ù»ÕßUWW/X°`ĈÝ´¿‚Û>úûé¨v’rÚèÚ7à幯,[8Úá”"I’Œ:N§a1ÆmK€B,Ë.¿r´Û'sÍ£j™ šNíIˆ1/_:Q‰ÓjÒð,ãï–è?5Ã0ŒÑˆî»jœ$–2ªÉr½Ów¼ÜÃi•)’ULXD@ù§Ì5ˆJ³"q BPëòÔ9…ÄÎ*—†¹mIVƒÓ‹16hYƒŽï8¡û®ÎR´ŽÅ¨U†üí8‰¶;¸\.%Bå\ ¥xÀd2ù[å+ þóË0L´Õ˲J»I5ÞëØ’ö–;5¾Ó­ äÜú~ãÖwËs7È®:mêƒÁбK å%§6kŠß”šåÀBÁöJÛV+GH!×§¤¤„54ŒÂþýû:”­cbb¦Nmwª‰®±}ûöÀAO:H"(k ¯->‘í¨­p4ØíÅÙíÅ/û\~¯¦(G’d–o™á&0¶¨¨¨ŽÁmK 3•¨DQ,..V®ÉÝ»wB$Iªªª:~ü8‚°}ûvBˆòͳuëVe‡òòòÜÜ\h®m{úÔÜ’JTJÃD­V§Ñh—,\rÙÅ—ù+¬}>ß–­›ŽÒòÒø¸ØY3ætþœ¬¯E‰'îâ]+Ë‹45‚ŒecŒ‰DxñÚLê*<Þ:-¸±ÌÙívKL»mÊÛfMýeà§g…R'“ÛϾÓn·‹ÌMPJFÔÅWøƒÇŽ2dÔÔÔ0 £|(+çkÏÍ84Ššœ0uàÅÇu<¨d܄چPÝšF™ÒCtáÌ0 ÆX9}={»iL&ƒÖdc†±®u!NŠ ¯úC™wA=ÑfíƒÇ+*:±©w³jl‡Æ¨ç£Íª<®¯Ôç"11±±±1ä&¿"€Þ¨!„) ÊüéJŠóYoÚ´ÉoÆ/¿üâDj ;È –³ÎºÅ:+¸†±GE±¤¤Ä`0X­Q€(Cá*EB!ÿ (þn þc†ñx<.·Ç4°£Ù•z;‰Ž½Çq\ÿþýUù"“Éô /ÔÖÖ€Íf[¾¼ÝîJ]&33³Ó$Bf ‹¾Â]_¨I¢®h_]Ѿ›ü÷K7?œ`òäÉáÆÐ1ŸÐ |‚ÏëkI‡c9@2 ˜`‡³±ªª²²ª¢±Ñ9$3sò¤)ÆFá QnM=.ëNHµù \ޏé9ÙôeCc² 5:4¬Ö$Ër{Eþm³¦æ2èmdY¾sÖ]Q‰f=k^’q‰šrÇ(ÚbccƒVJ>ù‚ä !^¯×lîüM×}· †UÍQOœ81?~|¸ PzŠõë×wÁÿ„£GêõúAƒõàIì¾1Ý·B9Sp¹\'N1°µÓ£>Å IDAT”òNF“™9¤Óé›OC=ŽÝná…`ùòå½TBVJ½p÷ihhèÁ¨,–®·ˆz½Ä©S§Ü—òý㯠WZw¢àv¹&N˜ìïv­¯×SYrRõÚ!Äó|BÊ p¿êá´\ijP$¯úžL½M—Ýr÷gÇ6®R+ ??¿¡¡!htJ„c4u:_êõíI 2†B¡œå(Ï¢^}£Ÿ†$(‘½ BÒ5·(ò1¸ícУ3ÿYŽ„“Ø…ª …ò›Di¼Õ«Ï„Ó%ò¡—AHºã–^ìÔM¡P( …BùíAå#…B¡P( % ¨|¤P( …B¡„Am) …B¡P(N™ŒB¡P( …BéŒÀÍœ9³¯í P( …B¡œ|òq p]˜lŠB¡P( …rV’ʤ…çŸ~_›B¡P( …B‰hÖ®]«,О× …B¡P(”0 ò‘B¡P( …T>R( …B¡P€ÊG …B¡P(JPùH¡P( …B *) …B¡P(a@å#…B¡P( % ¨|¤P( …B¡„• …B¡P(”0 ò‘B¡P( …T>R( …B¡P€ÊG …B¡P(JPùH¡P( …B *) …B¡P(a@å#…B¡P( % ¨|¤P( …B¡„• …B¡P(”0 ò‘B¡P( …T>R( …B¡P€ÊG …B¡P(JPùH¡P( …B *) …B¡P(a@å#…B¡P( % ¨|¤P( …B¡„• …B¡P(”0 ò‘B¡P( …T>R( …B¡P€ÊG …B¡P(JPùH¡P( …B *) …B¡P(a@å#…B¡P( % ¨|¤P( …B¡„• …B¡P(”0 ò‘B¡P( …T>R( …B¡P€ÊG …B¡P(JPùH¡P( …B *) …B¡P(aÀÀÚµkûÚ …B¡P(Ê™7yòä¾¶B¡P( …r°ª¸ hå5…B¡ìÙ³G£Ñ„»@¡P(g-¨®®®¯m P(”¾D‘ƒ‚ „µÐ—S(JñŸWÛ¸Šëk3( ¥ñkÁ°( 嬅۹sg_Û@¡P( …B9#H¥çõ¼yóúÚ ;vlÈ!}mÅ™õ•z¨¯ÔC}¥ê+õP_©‡úJ==ë«M›6Í;c „Bˆ²€1V–•M°uëVeV^S( …B¡PšðËÇ@)Ia˜–þÖœ?J‚òŸ$JÇP_©‡úJ=ÔW꡾Rõ•z¨¯Ô ¾¢¥J9#s}þˆ9ƒ ¾RÏê+„P_›@¡üF ¥‘Âú8îzÛW!#ï ň=q!Œ±,Ë}mÈõ•zÎ8_u CnêY•IŸí꡾ROoûjõêÕ„… ¶·-}¤PÚHÀÀ`›Ú[!(¯y“gJP_©çŒóU[9è_£Ü¼;(Õ‚K¡üæY½zµ";PgYé£X´æ‰»]¹¥Àc2ÿÖ§ÿóàÜ„H™w'¾ºÄÍ÷ »àµ™–~RúÞm_[@Ïú*¤RT³Ðôœúåíç^|ïÛ]…}긋îxòÉeã£#╃’$I’¤¾6Äq[ýÒ3¯~¾ñp©•9ãšÿqÿ…ý#b—ÈóU3Rþ›—Î{p[Ò=ë¶>:6">ø#ÏWÂÆå£.]QÙ¬g5SŸÞûýi÷ èvºÐV_†K„=Û@®ÚòßGó»ý•|Æü;žù÷½s#âŠ4_ ëîÌX¼¢ªå3 i¦={hÝD„lè=_}óÍ7«W¯V–׬YCY´hQÛÝÎ*ù(~þ꛿ñòº“‹ã ?¼óò«oŒÞþííéq%DØmÜŒŽ;_ß÷¿p£eZÏùªSøÛ^„Íï¾[1áOïÜ—5@W²îé;ÿ¸t¹mû[Kl #®’‘ÔÿôáÚ%ÿøâùá1žÃÞwÓïo2®ûñî!l_¾jB:þÆ=o£¬L®cY–#ઊD_aL˜~·¬Þûôt¿ Â’¤¼öƒJBCêÈîˆÈ{¶ƒsÛc —®÷ÔÊÝ_4VüòꛫsgÜ2"îAˆ4_ñó^)r½Òðl^žuYÎå‹SQ„XØK¾ ÔŽ kÖ¬€‹.º(hÏùä8-ˆ{>x?oòŸ¿¸rˆÁ˜›ÿvûû“W~š{˃Ã#㾡œ^:PŠê€°³zgvS¤C/ú¿ß½ûñK;r……“#àÞBɲI¯yóE¾Ô´hʺþÚÏÜzè˜OΈ€²íÈó€tìõåïõ{èÕÑo/zŸDŒb‹<_ɘVúºãâÆ _BHÐoàþ5A›ÎHpÉÇÿxËwÚ7A >ôl_›t&@êZñyã¼ç®LŒò¦ÞcÉ’%‹/öÙvÜG?gQé#©ÉΩì—5&FÉ0“6f´ùéCGÙ¦óàX&" ŒD_ ¹¯ÞûAÒ_µú- D–"ĺÈó•$c¹ê“†|à‘L©YçßôÐ_nžh ~Ï·WâØñB¦ì‚‚Œ¬g»kç¦=ºÌ ko˜pùOùkæœeÿ÷ƒóûEH!Jdùª\þÕ;?ðKÞ¿Ð9‚©Ï}Å@$5aéEä†1´rSveÑ(Õ;DIÛ矓 ÃȲ'B’1,K’!O—òUª1¤^ìXM6ÿzòÞ¿óá-ÃîýìB‹àóu+—=Ã0¢(ú"Â?¤á‹ßOüóz1óªgVÌ#¾Èó•ïÈ+÷~˜¸üó¹f±\Æ„H¢Ïç‹Åy¾‚ÉOîÊ{ûìÇÖ¿öðC×Ýß¾w]*º¬±íB{[;ØS%‘öl'uÕµ¾ê_?Í{ñãÝoeß¼ãÚën´nYsûÀ¾ÄGš¯Z´bk•ߣ‹ë"ÁWgQé#2˜Œàr¸0! v9\ŒÉ¬„ü —ˆB±(¢L뾯:ÖŽí=v¦2ÝÇ>øÓ²×„›Þzui*ˆ¢ØYí6 ÃH’!Æø1,~=g1öÙo|ãáG®zT·úo³Ì}þq¾’޽ùð§I÷|r®UEY"@°$‰bD܇‘æ«KÆüå÷ï^{Ó·¿”]ym"*ta{åŽ~”Çöj·;&âží“‘á†ÿîÞ«GF³“n_~É—ÿ°©æÖôø>¿ #ÎWÍû?ø0gøµ¯å#ƸHðU´Ï:] ˜á#ʪ!ã€|êàaÇ  †F@«+ÊiG¥v씦¨ˆóÀ[¸ëCýío¿rM¦GL¥!$Â*[à¢2νéÒW½»ã¸pΘ¾Eš¯®üœE¥À»úÚÌ/?ñùÔ§Æ­züÍüIÿwY& Ù„/‰–âǾ6¥™núªcá¥ípûÚ±n×þ°ü»„{ÞþçÅxI’"ÇYJ%c•y7¿þ|ñˆËçŒÇ6äo|ó“ÃæÑפàH°0Ò|Å/xqÏ‚¦e\ññï}6ö½ÏïΑ01Ò|Âæ—=6òÆ‹&Бз®xæËú±wO‰–•¾×m«žÛÂ0LÇʵnø¨^DFܳzå ^å¹/xþÊAÂ7_øÊ1åÁY1‘ "ÎW@ìß½·Z8ÿÅ%‰‘Òå |åñx¶mÛæ°ƒ?g“|nÄŸV¾î\þÄ™wº-ƒç-{÷›DÆÑ¢E"RóÁ#ï^¯4nº.ásÐÎzáÀW7%öýWj7}Õžj€@™è_Vü½ÏBˆËúõo½»ß.À_þø@¦‹þ½îo3#`4C¥}L½æÙ¬ó§å¼ú·eçVxôñÇÎ}àåÛ§ë¥H00â|–0"GRåudù [¼ ç•¿/{ìX¥`J9ó¶—î¾$QEÜI‰£²•aŒ±_AJI†aHsÍuÛÒ5DÞ³I_öö{xꆴˆxFž¯ùÞzӒγF”e=î«èèèiÓ¦ù;\ûãoÛózëÖ­ÊúñÇ'OžÜSPºÃ0ÇŽ*¯ÉÀ£”5]°„>ÛÕC}¥žHðUŸ7¦PN7[Hý‡PÖüû³m}go‘¬¯-8s ¾RÏoËW÷\9 cX¦¨èEÐiZO–Ý…ºl å7-}Œ"áKâL¡;¾"¡ð(¶ÕŽ/þo;mI Œ N! ÊogAþ!4Hƒgm°ïpÕ–ÿû³mÿwÅT飿 šÛG*ÏEbª¯¼¦ÏvõP_©'|Å€ }hX–E‘ž5tÇW!µcP­´2™/i®×ÖÛ›zŸ#‚€€Îƒ@P¸‡Ð žµÁ>¼_”ÛÜS[áõz•:k–eý- C6ˆT¯ é³]=ÔWê‰_qІҷTTTôµ g ]óUÈÚêÕ$0@0¥Äˆº`¡ARÎfBŠÈ á1ÔôzG@RÚGÙß?¨\ÓÛK©^û5¦¨Aq:NöUTÚk½˜Õ𳆂I÷ââúÅ&iq]EM±GH~UyÅ-ØWYm¯õÈ„ã z] ‡0n¹œZŽ%¾¢Â¦N”AQ5Ë‚ !‘”Áž Ý/mýÐÁQAÇj5œÕ¬ÿöî;¾‰úÿøçF’îtï È*{´,‘%CÊ’%Q†ã‡ ¨ "EA܈ ‚€  ¨P(ˆ £²7å[hK -mºg’¿?®MÓ$-)´$m_Ïp—\>ùÜ'½»wÞŸ»Ï‰„\þß}gG;O'š¦yA¸›–SX¬nÝØGéh›WXRX¢•¶h©<¡lÛ7Î>½}HÐy ‹A‡”Á3F·.Q, ¥#–(révjé¹ùeG/ƒY‘Ý£ô’X_g…·›Œr2s‰¹!£DMˆ(R6ÁÁÎÎewzµ…·“óŠX[o7{g[VF‰š’’ôÌü,µ(R2ß@7–BD/))y *ÈåXow/9!„vñöt!¤(SŸÃ‰2…—›ƒKy y™j±B­(¹ «»^iéªüœÒLSÙ*P¶Azu#¢ ..JIÏÏç EDJf¢’2g׿nr.7ó†J+Sº6w—kr2ã25 ÷¦®2MNæÍL-ÑUƒQxIÍ¢Ê}P("ŠMžF'ýPŠÀ`½–‰OÑz9;SšûÉYZ‘¶±ô°w’Óå¿TÄÒÓ(¬ëÛ¯ÑYý'M.Ö¶±·nÓ3x—nI9«t°‘Jp°³É-(æy>ÐÛå^FnA‘ÚV!“6{¥ƒMA±F­áIJ­[J·z)pÔÏDšÜW  ²Ð ‰F*\:SMB¡ô&)Ï ÏŠzU/Y÷g)…#Cˆ¨É-ÄÒ§Ë^¥KL“Ÿs;½¸D$„Vø8»³\FjF§ôSøÐüÝìlN“’˜šB!”ÂÞ©±·} §—Rpÿnïïák#d¥¦'ŠÒë>.†%$ggsúµR''¦&BDJáàÔØÛ>ÀS(J)(©¸ Òœ:/ûv&çäåîoçàãXœŸÍ •T2§H«q“Ëmä2¢µµ‘Q„È2FälmXŠ…EZ]/3 mkã$5K!/FMWx”¶Œ@mã.½YÊ&ÀËQÉp÷UiZE ¿RÉ‘A4û/°.Îo/kÿ”!¤mcŸ ñ©Ulk'Ø(äÒwèíœx?;'¿„³ ‹Ô¶ Y·‹t1œBÆñ¼ ˆºâõ6|ãs‘d0€ì#4PÆ£ ‚ eG{]ϵ(vlê+rîVªÔoÖñ)Ý3÷+äD¤d“HÄz:KKws­@ƒW¥c¸Èeeñ!"ã`ç*#bqaZ¯!Eª"G¥£ÂÝžÎÌÊJK J ;7…Üž‹¸ÒˆT,; •Õ•PÈi¯*tT:)ÜìèÌ\ÞT%Åb½Òеú¯–YÙÅÅ¡JxÑŽ•³Œ héÊ*™«.àíÝä2[еSµ†“+d¶´ÖNAQ“_\~‘>%ÂèšEEbçáÙÌ…¥!BñíÛÙ9¥kÅefózmEˆ(Š”­­’%bIQz!§ùŒBG¥MD"…çVõí×älÅ' ©°˜nû"„´oâsþÖý ïÒ[RE†¡¥¯—¦¨`ç»ò²r ìm‚}]†–ŠfhF¤”néÖ-V¼ƒ@eLíK"d¡¡ÐßõL& EQJ¯c(]˜*KŒœ‰»ß¹™/!¤cSŸ3q÷;—E“gâîKå•?–uf‹õt–ãx†¦i" ¢á«"!„Z¾4:’34Ee«lÝT©k|ˈ„rõPz;Êlº´¿V¤BÊÒ™D$DEFWÂSå%ÈYFx¢û\ŠusWú8Êú¥QDÐ_Z¯n‚þå)DVY%M^‰èf/³wPرBnz±ƒ§ƒoOQ­ÎãDA¿q8ž'„¥h†A$ùééçrCƒm E"”æ>Ž/¯UYøH()ôä­HQÔp‚Hh"Q´ü×]‹³Ÿ$¤|1i[#zÛ]‡¦¾•mkj-¯Ñr2–!„‚ü /§ ØÎVQP¨N¸ŸâãL34!DËñj-¯Û¢Iir·BÿµÉÑ`7‚.lh°>BÃ¥x0™yäùÒkg!D$ºÓì Eþ»™ÖÜŸòcÛ7ïé^ÕE]þ²ÎòE%¹¼+#WÚQª<Ápáòf&D$Z­ Bæ\L.Ô–.%Bɜ݂]TIþ„¼Á¦ñSnn‰t**!¤ìØ.ŠýH…Z‘²Ï•99••–_ (JKAÔ[ÝõÒÐLeAˆ(ˆ•U’’_¨íåNζ2Q“–§&nJg[9E4EêQõ§¨$·seäN¶$#¿B4$è ¢ W«²¶’"rš¡iAÍ2R , ºô¦Õ|û5;kø$!D$a-üÊ·/‘üwó^Xs?i»ûïÆ=“ÛZ~¡ÚÕÉŽP$)-'· ÄN!oäëš’ž—Wpç¾Ø$Àˆ$¿P-׬û ž7<ßÑxç@  MôœšÄ½ïmçïªt ýÉá4Þø˜Z-–^;t‡ݬÁABÔ !®×¡¥?!e%co¤èÊ<}#E1¡â’b=žåŠ’kDÚÕÓÙË–¦Å*l¼¼œœéò8I·°¦  SK(;{_†"”L¡ðôróµ-K‰'PvÎöNté»QäB%“Q¢( "Ñ–•àãÀP„–+^^®>¶D¿Ve*ðÑ+ÍptUÓÍŠ¤ªJŠ¢X\¨V¢³”Z“ÏiòЉBÎPDÈ/ÒSÞ,®Þv -…ƒTÅ?8"ê×J×V\AQ6G(…­§ÃÈm=ì¥Kl¬ã뮵Yã'¥gNßH9}#%öFŠni6öFJeÛZzV¾ôuªr lü\X†ö÷rr°·Í/*‘þØÒ³ ôûªQÄòûNéTøºŒv ™~öQ{å‹qÓö†~sgˆGâæY#ÇMq9õÇ«!t¥o¨[ôÄèÀ`pØ(½òšˆÒ ÒDŠ”Oˆ”t9u-¹khÀ©ë)ºcŠ´XùcÙ’o¬O³%9™W4þîvÞÞ4¾¤¸0‘½”š µW’¤Òz:¹ûxyú jµ&+;ï~¡ -ÊI´s pR¶i¦ë/‰HD‘ËT¸Éí¼}½…ô»÷oç'$ª4^N>^^” Vk²²òîKy¤ÒZ•ä––Öº¼4BDQ0øú!„DEJWQˆ¤’J "Õê|Þц!ê"u‰À EZÑQN‰šÜBA0úº‹s2¯hüÝì¼ü¼h"‚¶DYTR$¶ !D¤õžÑ%¤°´£W wyý‰î¯Õª¾ý›5jÀj¼«â{ó Õ² <]:µð×5CÓMü]¥éô삼‚Ý-%]yÍ0Œñ®€T²ë@Ï54dz—ÎhÏlúåVø[;G5u¢H›)¿òK— ÛnN_Ђ±pjšñ‘À Ù áK3”Þ›¤ÈCwÆuâÚ]Bˆn–±,”1\²Ï–äÅäë.y(}•*Š»q7®âÂBIQâÝ¢DBU\X›š’šZá½¥¯ªó³¯Äåè/,¨‹“’‹’ Ö«¯IMIM5*ªB…¢¸ëwãÊÞ[ð õäƒò¢*©$Eø¢[7ïÞ*›-V¥T•\>+”äÅç癪FqÜ»qú% ÚJS˜{#>׸5¬ä뮕YÃí¥:ï2ÚÖîgj9Î×]©àI[7¹Ÿ‘wO•«—F,ݺù iGÃ]Ay)H=Bô³bæµk|Û·u—6&&¨]ÇåW®—ö–ª@m38ˆ†A „”¥­!D(› •Ïê?V½$f1‹Y“ÛKµÞe⥻i¹ªœ"O¥£BÆ2ZŽÏ/RßKÏ+,Q—ž,©Û¢ !"UÖ n"d$ˆŒ°„Žã!|nn¾hg§à9ŽBocoÏ'åäk9ôP¿U–uÆ}Ôå'ˆHEé²@•Ïê?V½$f1‹YSÛ ©m­°X—˜QÕKg !"¯wÖ#!¦S SÞyMÙ9Ø“ÂüBAiB ó iG[üì‚zIÿ8aü|YîQÌO$¤ìÀ#º`²òYé°TvpE]·f1‹ÙJf+>I¤€>tV‹«ÖÇ‘òYBˆH£Îký}‚þˆ~ç5åÖ2ÔëþåË*±ƒ7E÷Ò•üƃš+,X9€Ú`ò`:)ˆÒX†º¥ˆ(B•=Så¬9Ë`³˜µŠí…èú®‰ÑÞÀ‚HRáÒ¶ÃØñM~³xg×eÏ{$mýèÇø°7G4¥±©@ƒUÚŸEDBE(Rš%‘nDóY‘ˆÕ} f1Û`g-¸½H[wÙÍ%€èFП0j@àY«77®)˜»xPÓYENOõ¶aÍTŒÚ _v¯]z†×Ýÿ áQ©T111 SÕH;ùøŠw‘^¼sðâZª@#m*ç´tE MZqýlÐ988„„„ØÚÚV±ŒtKÏëׯK³z׃Îi¨d }€j@øÕ€Îk¨–Â󼥫uKá8ÎÒÕ€º%„œ8q¢ö>`Y«¼Ú+¼ž‰ŽŽ¶têŒGh«Ò»X ‚ ÒÏóúŽãtµQs°N±±±,Ë2 Ã0Œn‚aš¦õ)Š¢iZš0¸[e°o7ÚÊ|5ØV,Ë>|!ƒ·B"""jª¢¢¢ PK…×3ÑÑÑh+3=Z[ébG“ñ¢V«å8Žã8iB«ÕjµÚçÕFýÀ …‡‡Ëd2™LƲ¬ô(MTMJäC‹Å¾Ý|h+óÕl[>|¸ºoÁ•×P ŽK`‡ IDAT 0pT²ÖB¸·öÿˆŸÓÌû9ÇßZÙÛüoµ\)Cž,!ñ»þ#7©ó€:Š&ešÔK¯À#dß¼hâ³›ú{{zµì:ôÕå»¯ç™ØèàÙRvNp7kÀB!Åq;Ž~ºe ·wp›ž£æ¯?•¦©ÁŠT²OTš7pè²Ífýxøjâ½»×þòV¢]köÝ»ì’SKƾ~Ècö¯gî$]=¸fV˸Õ?Bü–ƒì#ÀcÓœûæ½_™i6½?¬c€³LnïùTÏ—oúj¼-¤è7ä½U¯>Û&ÈÛwÒï7õ;¯µwÿ\4¬cˆ·wpÛAÿ÷ëb£²…ÔóçRC"^ÙÎËNáàÝ¢÷”忼ÿŒ\zQÌ¿´~΀6AÞÞAí†,ÜŸ'„Ümc½]\\\]=|›uýqô=iøsþÖÊÞ~/¼»rFŸÐoŸ&]Æ.ÿ;] nÅÜ ?ÿßÎOùzù4 þÞ®ø’'ÑhPg!ûð¸øÿ>’2xX;ÛJÑžÜw1lyLÜýû‡Ùè½3î»i3ÿôxë‰×þxÛóÈ® Fwº¡}:vöKø}åûÏ'f•$3µ§÷_íºâH\Òõ¨©Ìֹ˖B”c¶¦eggge¦\Ù=Ï{ÿœ76ß+{›ö䮓­–ù_â¥m… Ófý’,áîæ—G¯ÊôõÑÿ%ß>º¼ã…w&~vV]ÍõÂG€Ç%d«²ˆ»—{éÖTðÛxoï){Jã0¶ýËLêàiSqƒãnîþýFç7"džºØØôž·hŒ¿ñ‘6]íÚ4ÙùøŠi}Cƒ‚[÷¸ø÷›…¥¯ÉÂ^ùplw…k»ñÃÛç߸®ßYN)ÜZ[0½åÙC'óKŸbZLùhV˜—g§W>žtò·¿îiãÿùD‹7>{¥«Ÿ½Üο÷[óŸÏٻ粶f›êýÎkÍ?ÿ×ÄÞÆÆÆÆÆÖ}âžt^˜…vqw%ªtUièæ0jKZvöƒ]“=˃EÚÓÇ“1z£ž®rp.e~A¾Æ ¢ì;gåö#n§Ü9±ö%žÙ#Þ‹‘Æë¡”.JéC(™BNxž )¾¹}ÁÈî-ƒ¼Ý]]ÝZÎ;Vœ­Ê-­ãäÏê&ý¨Œ´ íýäû%Çæ…ºI¯‹Ïˆ iéºu0¦Ÿ ‘õ\ù¿‚ââœßÇ+Í¿( ÁcžêÓÛ?ᨋUž3hb£¢==Ý ’“sJhq÷îJg/VúAö]&¼6¼QæÙ3‰F½Ü¥„Ä sçh²hÏÙ;©ª¬Ì«Ÿõ`¡,äS’JÏ„$ü½»÷Do™——ý³ßþ/+['ëîšAŠªê ›©Kg1ñ$²•‘wzí“qüº)—í½’§áù’¬;±gâ‹¶°Í†o~æ›wÜÌÑß;öÅÒm)Fo’7½>ñ£Íÿ\KÉQk ïŸÛöýî;Ê6íÙJÊ5Å%‚ÌÆÞÞAÆ«.lùxÍz&ãçÅ?žM/)É8÷ÓG뻎ä'k6jJØÅÏçýx")OS’t~ïçÓ?üƒ‘@åpî#Àã£<ú~ êí¦×¾™Ö»E€·o“./~|9tá¶TÅc[Ì^÷í€ûË6l>è“Ôg†µ7Š iÿa¯¿ä~vÕÔ>-|w›¸Fõ̧[?èTY‘ÌS“—Ìõ:0¥C`@ógœnѯ“¬üEY·aáÞîÕ$¨õ‹ëøñë¾›H:xÒO;Þô88¯ËÀF‡¿³‡>±·Ãc4Ôw,!„ã*ôƒq¼@Dç8ÎÔiX` íÚqBä¦ ‘Ư0Mçþ¢·`ðì)³ËæäÁC–î²T÷êÛFo§šôŸóeÿ9_V]¬Ó‹¿¦¼H!ĵû[[O¿UþÊ›Ò !$”ӿΓrŸ°óÁ‹U¬Ÿ‰Îk€ÊT6ö0TCQQ‘J¥b†a0Þ€Uàyžçywww;;;K× ¾Aö ddd8::ÚÚÚREQ¸é'€…Iw>+))ÉÈÈ ²tuêdj˲vvv2™ìá‹À“BQTQQ‘¥kPaÜG€€>kë„m 6 ó f ÏÀÚ`«¨%,!„çyKWê–Âqœ¥«uK9qâDí}@tttí^Ï ­Ì÷m%]‰)‚ ÒÏóúŽãtµQs°N±±±,ËJÃoé&†¡iZÿ‘¢(𦥠3;DZo7ÚÊ|5ØV,[í ©YBHDDDMÕÀ@TTÔ€j©ðz&::me¦Gk+]ìh2^ÔjµÇq'MhµZ­V»ãܡڨ?X¡ððp™L&“ÉX–•¥‰Ê¢I)‚|h±Ø·›me¾šm«Ã‡W÷-¸òªá#Tî0!>>>???''ÇÒœ•Je£F,]€ w0/“É:tè`éŠ@¥n߾ݸqcKW !Bø`(??¿_¿~–®TÅÕÕ5&&ÆÒµh Ðy `}Öu¾&KÁ¥3P È>@5 û„ð·Võ š°³ v?E}cãË=›ùyúôZq¯Ý€ÚƒKgàɳö-‹¼ÕwË£aNøá P‡Ñ¤ì^À¢Xœxè«™ƒÚú¹8¹øµzöÕÕÿe âã±ôÚÔ#bæ–1¾î^íþ/&¯tÓâo3 `Ð÷‰‚e+f.>áZݦ{;ãØQZ5wwwwOŸ ݆½µéJöõMIâÁ•/÷káa§°óhÚkúw±Yeß±6qÏ‚çZzÚÛ8ø¶±$&MxÈó`izûqͱõëÓÂçmŽM¸ÿ¿‹[^X4âõ]™ØƒXÚѹh×Ò®j,]‘G!–«å Y%¯2¯þ‘ªÊHK:¿ýçCïÌXu‘{¢µƒÚ¦9ºvmZ×;.¤fÝ=²4ôü‚!³~S‰„íåå£&ìöZxì~vÒŸ¯’µ£^Z}G¨ây°<½ì£ìÙ¶,Ø;Ô×ÉÎ54âíi Μ¾©EöÀzо#ßU°6r{ŠáaT»¨S«¹GKãJ!é‡çƒ^ܤ kUßÀˆ…_ÍÐ6Ä׿YI߯&žþ~F¿6Á¾-ú¼¶-¾<ó.¬}µ_›`_ÿfÝÇv4]ú1÷âÆ¹áÍ|ý›u¹p÷m5!¤¬Ø/g lßÈ7`Êîbýºp©GVLîÝ:Ø×7¤m¿é_Oç ÉÝ>>xèºäÔ #|ݽ{|z¹²Ø–»µ3ª«âîÍ[…•E!Ìhöô'—9BwuYOoŸþ_ßæ !Ú³†·|í`1!bÖéo§÷kÛÈ/ YØà™ßŸÎ4 <øø¯ûûw‹D˜ú„È.ýí³©ýZû+íÝ[|Fx~ì©›!Úÿ6ü|³ë[ŸŒm®´ukÿò§³›žüé×|¥Ï€¨ä $1ëô¿×­Ú6Á¹‘Ö„rè>wAË+??’kþÏ3mìÁ[=Wþw;öëð¸OFŠLúÿ·âG6ýwáâ=º>í©]§[}rèæ [^~yyÎædw·¼2æKÕÀ¯ŽÜL¼uxYÇ‹ &¯8§)[þK?=x#%ùça¶åŸÆßZ3mÚ2aÓ¹„;§^°vòŒŸxåè-‰{¦ûûLþý¾*íßwÛT¶k5™—·þvŠkѱµC%EBˆ}xÏö)ÿþ›"áþ¿'²ü’ÿ=¡ Ÿðï UÇžmwmÝ;+Sû¯9ûÌÎz¦<–ß³ÖCÌîî¾Íú.¼Ù÷‡_^oÉTQåÖýéæ7̲Oþ›Ôõ9¯;•/dœ<~;´gW%E(¹BÁÊmìr§ÀÎc—|0Ì‹2øD¦ÉëSN.l‡ÉOZñµï'¾v¤ÝÒÏÆzQD(È/ Žöe_eïè äçñ•<_Ö@ÿÒIáÕ5“†}®½cãÔ&ìcu]£ó 6°M§.S¼.r«Qv%('geiŒÇÊd6J¥MYIr–çu?ó¿@ÿÒPŠñò£TT\jrjÉñ·ÛxºKüFý’–‘Qš¯¤=¼=£2¨ÁޥȄՃŒ‡VU:÷1ýÞßPïýî·›š*‹¢ºw÷¹pìtæÇ®„öêß·çSçþ9«:uìrÐÓÝ}hB˜¦¯¬^Õ-nñèþÏ>?fÎ'Û/ecd /ûâÀ¥Ú¹ìxµ™ŒB;8:‚ü²ïG,Ì/ ì˜Jž7ü–P1o æýrÌð/©¹»¶¾ÑÞ[)€u²ëúæ;O_]µüPŽ.&¢X†á´e¡ —SÎíRü½»÷¸òIÑÝËõôñ´ï÷u\†J'#aõ@¹îSK¡=¼ÜÕÉIJãE>9!™¸{¹›9R­ðh;ñ³Åý’¾þx[ ©ª(¶eÏn6±1?Çœ xº»»o÷în±‡69ãÔý駤˜Ö¦ñàùßþ¶?&zÛÒg’?{q^H‹sc—øµà@ÔüNŽÒ_åÞºµ÷½ JO.àÏ_Ì{ªm¨MeÏ[¬ò G/û(dþ9rÌÏ®‹¢~žÞÒö1óŽÈ>Ô"Êcè{süö¹ùNY§0ÚT{|ûîømqZìÚe›oUûäþƆ%kÏf¨Õªóë?^ŸÔeÄ@?Y³QSÂ.~1íɤ<:;é¾/f|ôW•ƒ‹³Í†Œ½²úÃM—35êŒ3k>ü)¡ÃÈçCŒÓ”•¯œÛ ¹/7>õÍ÷g«*JÞ¡gXÁžöØvÚfš<ÝU³cõŸš.=ÛÊ!DóÏò—#‹MÈRs‚HSD]XhØ ¸tæÉ3ÿYôÜÝ–Ú1»}ùó²°ISšŸúâ½m7sK².®{÷»[ݦmÁTú<Xò”€˜sà«ob3wÏîìíììììììøêµë•bšLYô’KnnÙ<å6ô£e½ïFöy*¨õ Ë; l]Ù9•’u»¸ OÓ¶cÖóãÖ|3!&tЄ·¿éqèíA­ƒ›tùî^~ØÄ^UÃ6ŸùÓº1Üú±íƒ‚;MÝi7uýÓUï Ï6üCŠ·­ÜåðJEÙwéÙ^Shßõéf,!²¶=»±\çg:Ké)y×ñãÿY2ºkãàV/¬Ê|nÕÒQèP±$1{ßgŸŸL¿³cjs[Š¢(Š¢'îSBdmßùí—ˆ´ŸöQ ü^œ¾cÓ«é*žË£8Ð¥K—Z*ýСC#Gެ¥Âë™èèèXºu㵕(Š‚ ‚Àó¼ô(á8Žçy­V+]ï%MhµZ­VûÖ÷‡<ƒšmœ?ð¡…§¥¥¹¸¸°,®Â¨'þþûo컬ßÎ;{÷î]ÅÇegg{{{W]Τғ⾘õ¬L&“Éd,ËJÒÃ0,Ë2ehš–i𦍇ÿ&Á¾Ý|h+óÕl[>|8$$ÄÖÖ¶Še¤èõë×·&‡ÄÝÊBÐË fBOT²P È>@5 |0äììlé*ÀÃák°ã»ÎÔ$K¯À£P*•çγt- *gÏžU*•–®@ÅBxþ¡·£h@5jtûö혘˜œœK×LpvvV*•5²tE(–Âq¸ë@7¶t¬K9qâDí}@tttí^Ï ­Ì÷m%P! |*MèÆ7E\š¨š€uŠÕ nrœpé‘¢(Ý˜áæ N°o¯´•ùj°­áž,!$""¢¦j` ** #È› £í›ï‰ÝufǹCµQ°Bááá¸ëŒe¡­ÌWãw©î[på5TÂG¨Üuª¡Ú'K4ñññùùù¸Ç:aàËBø`(>>^&“uèÐÁÒJ%$$ܾ}ã+X:¯ åçç÷ë×ÏÒµ€ª¸ººÆÄÄXº .0„>ë:_€¥ ûÕ€ì#TÂG€º¿µªoЄµû)ê_îÙÌÏӧ׊ëüã%$}?8hôæLt|ÔE4)»°( ù7v}üRïV~®Î^ÃG}¸7A->K¯Ô1kß²È[}7ÝHK=:¿%céê€åèeÅœC¿üe;rÅWï¥\øu"ÙèÅM*‘ð·Võ ŒXøÕìmC|ý›õ˜ômlâéïgôkìТÏkÛâË#Q1ïÂÚWûµ öõoÖ}ügGÓ¥s/nœÞ,À׿Y—‘ wßVBÊŠýrÖÀö|¦ì.Ö¯ —zdÅäÞ­ƒ}}CÚö›þåñtžÜíデ®KNÝ0Â×ݻǧ—9ý7hÎ}óþzÊÚ ï iëç$—)\‚:EÌýîƒç••”V£ë.-öÁ·¯?×¾‘¯o£Ž¸ÏBĬÓßNï×¶‘_@³°Á3¿?ixðñ_÷÷ïy‘3|¬‚ö¿ ?ßìúÖ'c›+mÝÚ¿üéì¦'ú=bÖ&„på´ª_†»Ø9¸÷x÷FïO—¼à!pÃÒk`](‡îsô¸¼òó#¹æçæµ±oõ\ùwÜíØ¯Ãã>=(2eèÿÞŠ?Ùôß…‹÷è®>ÑžÚuºÕ'‡nÞ¹°å%á——çlNˆpwË+c¾T üêÈÍÄ[‡—u¼¸`òŠsš²åÿ¸ÔùÓƒ7R’f[þiü­5Ó¦m!6K¸súÇák'Ïø9WŽÞ’¸gº¿Ïäßï«Òþ}·þíªøø¿¦4<¼ƒ^)U—f~ƒ™»î±û¯vYs#ñê®)̶y+Ž–îÚºwV¦ö_s2þö™õL=x,Ý!uЍºr%ͯ}{)#Éwhçô¿K×J,\- „T¼tFE¢»==7ûAü‰Õ}®¼9xÞÁ×5‡òúîlŸ}‘?\1»[6ã½Q¡®r[¿>#z{’°) 7q’Û¿0¼w5¡ìWÓbÊ¢Wüll<:Íøhjà©ßößÓÆïÚp²ÅkËftñ³—Ûù÷šûÖàœ½{.i !„°í§/šØÞCQ±‚»µãJèÌ'·sSØx…¿²xZð¹û«Šø„lUqót3Ñ•ñ¥=ÒºË:ÏX4¦µ›BîÚvì°öù7o¦ ”\¡`å¶v ¹S`ç±K>æEÎ4yý`ÊÉ…ípëV«$äGû²¯²wtòóŠp\°&;¯iÐ^ß&ýøñ[È Ô(¶éÔ…cŠ×En5êÁ®åä¬,ÝPY™ÌF©´)+IÎò¼n eüýK!Æ?ÈR=Pq©É©%Çßnãé.ñõKZFFiÎŽöðö0¾~ZÈx R{—~ @T2ªª*íâîB2Ó;‡©´GZwJéRº%SÈÇq"Óô•Õ«ºÅ-ÝÿÙçÇÌùdû¥l„u íàè@ òu`‰…ù´£“ᯰ½ìcQôò¹?¼|7§DSzqççÎ+;‡7a}¨Yv]ß|çé««–ÊÑm"Ë0œ¶,òrªÑ¹]Š¿w÷W>)º{¹³ž>žöý¾ŽËPéd$¬¨;£ÙĘöðrW''=(ðøä„dâîå^Õ±L“Þ½ýïüuѸ[ѬÒj`ÝM²i=êÙ¼ío iäÛ¸ë„oï=ýùÎÏ9ã—@M£<†¾7Çoÿ—›ï”uã2Á¡MµÇ·ïŽ/ЧŮ]¶¹úyþƆ%kÏf¨Õªóë?^ŸÔeÄ@?Y³QSÂ.~1íɤ<:;é¾/f|ôW•ƒ‹³Í†Œ½²úÃM—35êŒ3k>ü)¡ÃÈçCªæQÞñµÈqüúéSVüy%µ@Ëir’ÎíY5çã?sÍ*­ÖÝÍ?Ë_Žü-6!KÍ "Mua¡a±¸tƺÉÂ&Mi~ê‹÷¶ÝÌ-ɺ¸îÝïnu›6¶F° úiÛó×¼p'-#-áòÑ­KÇ´r@ðP˜&S½ä’›[6O¹ ýhYﻑ}ž jý²ÄN[›!§*²®aôiÒvÌz~Üšo&Ò„šðãö7=½=¨up“.#ßÝË›ØË¡ÊbØæ3Z7†[?¶}Pp§©;í¦®ÿqZ£‡²)·g?ûã÷·]Z5©góÀ€Æá£>Š‘ELì£4«´Xwä]ÇwþgÉ讃[½°*ó¹UKGy`fÄŒŸÙP”Í ¿dçonCQ6ý~¸/"kûÎo¿D¤}ü´2`à÷âô›^mŒ¥XêÀáááµTzLLÌÈ‘#k©ðz&::zÀ€–®EÝðhm%Š¢ ‚ ð ÕJZ­ö­ïy5Û8àC OKKsqqaY\…QOüý÷ߨwY¿;wöîÝ»Š8ŽËÎÎööö®ºœI+¤'Å}1ëY™L&“ÉX–•¥ †aX–eÊÐ4-=Ò4MQÿM‚}»ùÐVæ«Ù¶:|øpHHˆ­­‰ñ3t¤èõë×·&‡ÄÝŠŸrP ,!׸€™}€j@øÕ€ÎkCÎÎΖ®<¾&Ka !<›Ð”S*•çÎëØ±£¥+•:{ö¬R©´t-(–Âq6 \£Fnß¾“““c麀 ÎÎÎJ¥²Q£F–®@ÅBNœ8Q{]{…×3h+ó=B[I7Ò”F®’&t@)MÔFÍ¡®hܸ±¥«OTll¬n|G“=JEé}4gÜG‚}{u ­ÌWƒmõƒ³„ˆˆˆšª¨¨( j& —j¾'6løŽs‡j£þ`…ÂÃÃ1l¸e¡­ÌWãÆW÷-¸òªá#Tî€j@öª¡Ú×Ú4߯\»™š{>Ie銀 ‚ÜCý\föiaéŠ4Pè¼0ômÌ5-Å|0´½†ãyì!­ MˆBÆnþ/é»Ã×g÷miéê4DÈ>º™š»rr˸:ØXº.`BVAÉœ.s7±tE(d ORi8ÞÇÙÞÒÓ\l’Ty8µÀRpé € ¼€ßÕÖH7R7¾ BøÕ@“²{—ÓÞún —CûÎk _ª&K¯˜ÂßZÕ7hÂ΂Úýõ/÷læçéÓkÅuþ‘J¨¬žBÒ÷ƒƒFoÎÄ.À"Œ/ÑÆ­~}-Ý©9{ßÕ€zBÌÚ·,òVß-7ކ9¡— ^1Ì>j®÷Úzÿ— r§Ó’È><)bæ–1¾î^íþ/&¯tCâo3 `Ð÷‰‚e+f.>áZݦ{;ƒØ1ï·—üÜyÍøSc¡š‚•ÒÄÌôe(EϯêÊ?@ýWqÏ®¹þÍë?û¸t°²G;:íZúÃÕ:W‰%Åj¹Bfø´Ó¨Í÷T*•J¥JY7ÄÖmÂŽû*•J¥ÊHúq°ÜÕ«FûÏù[SšŽP{#G&+AB¸R…VÎþÙwá’ç\NEQà¹Çd鵨Óhß‘oŽ*X¹=Å0é¢]Ô©ÕÜ£¥q¥ôÃóA/nR‰„¿µªo`įfhâë߬ǤocO?£_›`߀}^Û_‰ŠyÖ¾Ú¯M°¯³îã?;š.}„˜{qã܈ðf¾þͺŒ\¸û¶šRVì—³¶oä0ew±~]¸Ô#+&÷nìëÒ¶ßô/§ó„än½\å¾ wûx?wwwÚ¶½ IDATï€=ÆF¼WaiÓõ¬°„É:‹Y§¿Þ¯m#¿€faƒg~:Óè|ü×ýý»E^ÄŽ  šÊ;¯5W¿ys“ÿÂ¥C<ˆ(Q¬¾kt^<Ê¡ûÜ=.¯üüH®ù[“6öà­ž+ÿŽ»ûuxÜ'£E¦ ýáß[ñÇ#›þ»pñÝå&ÚS»N·úäÐÍ;¶¼$üòòœÍÉînyeÌ—ª_¹™xëð²ŽL^qNS¶ü—:zðFJòÏÃlË?¿µfÚ´-d¦s wNÿ8¼`íä?'ðÊÑ[÷L÷÷™üû}UÚ¿ï¶©òþÊÑ[î©TªŒô»Ÿë}൹¿ÞÓ õLÕS_%uæ®­{gejÿ5'ãoŸÙùQÏÔƒÇ2°Cª{„´Ã=löžÍzOÿ殕°å]êkç®$ü>¥©³R©ti9ÿßâ›_<ãÙ~ÑZ Ö ¡£<‡¾;Ûg_äWÌîÁ–…ÍxoT¨«Ü֯ψޞ$lÊ‚ÁMœävÁ/ ïFÇ]M(˵1-¦,z5ÌËÆÆ£ÓŒ¦žúmÿ=mü® '[¼¶lF?{¹¯¹o Îٻ璴`ÛO_4±½‡¢b÷!w3jǕЙOn禰ñ eñ´às;ö%>҅֔ܭeÄÛS[ž=t*¿üYõÔùJêLÉ Vnë`§;v»äƒa^”Áç1M^?˜rra;Ü{ËJÉû­¾¯ÎËÊ)ÊMˆYÚáÚ‡ƒÇ­IÀÉÖ¡ü®3ö£¶¤*}V¸÷ãNëÃ÷ÿ»¨‹›ÒXÛtêÂ1›&En³Ô¼7PNÎÊÒ•Él”ʲ»î±r–çu=µŒ_ iàÄøùQª*.59µäøÛm<ß./ÌqTiʇöðö`Œ>LÈx R{—~ @T2ÒØü5,¾¹cɇßî;Ÿž¯åE‘È» ÈHÙ:˜¨§@\uoæ+©3Óù•Õ«4«îŸÃ¸7ë6ìå™/¶u1 ¡N m<ÛŒütÅɨþ¿íOaéÚ!¸ç5€õ³ëúæ;O?óñòC#t¿ä(–a8mY((äåT£s»ïî=Ž8³¥“¢{wÖÓÇÓ¾ßûg·Žs«h•&MD_´‡—»úxÒЄ>9!™¸wp§ 17M$$mœ÷ö‰6kv}÷t°«“ºnX×Ýú·1QOZ¯p¦²:ÒxðüoÏ'BÁíßç¿øâ<ùéuÃ@Ö]øê¬‰éëØh¿¤ž^„Nk@y }oŽßþ/7ß)ëf‚C›joß_ -N‹]»ló­j_ÿÁߨ°díÙ µZu~ýÇ듺Œè'k6jJØÅ/æ¯=™”§Qg']Ø÷ÅŒþªrpq¶Ù¡WV¸ér¦Fqf͇?%tù|ˆqš²R¢º¸D)ìííe¼ê⯑?ž©¸*&ê©¿Ûb*©³æŸå/Gþ›¥æ‘¦ˆº°Ð°‰péŒuSÿõþ¸O¢Î'娋U×v¿?CV·|pí5€U0u×™šc鵨'˜&S½ä’›[6O¹ ýhYﻑ}ž jý²ÄN[ó0²®aôiÒvÌz~Üšo&Ò„šðãö7=½=¨up“.#ßÝË›ØË¡ÊbØæ3Z7†[?¶}Pp§©;í¦®ÿqZ£jD„yjÒÇozœÖ9$(tà{±Íûu¬¸*¦ê©¯’:Ë»ŽïüÏ’Ñ]·zaUæs«–Žò@þªNQôž6^Ø1§ocç¾ïŸýèm¯6Fô`¨„‡‡×Ré111#Gެ¥Âë™èèèXºu㵕(Š‚ ‚Àó¼ô(á8Žçy­V+6%MhµZ­VûÖ÷‡<ƒšmœ?ð¡…§¥¥¹¸¸°,öõD·È½ûßÞÈSi銀!Š¢¤ÜÄôÜAŸî:¹pH s—ííí]u™“VHOŠûbÖ³2™L&“±,+=J ð,Ë”¡iZz¤iš¢þ›ûvó¡­ÌW³muøðá[[Û*–‘ ×¯_ßšwtkù¥3…ž¨„P è¼0¿­­“/À‚XBÏ?Ò-"ê©Aî 9›UPâê`óð¥á‰SåÙ(d‚Ü-]€Š%„pÆ=(êçòmôÅ9Ú%©òxý3Ö…&ÄF!ûúÀùÖþ.–® @ÅBNœ8Q{]{…×3h+ó=B[Ic‘JCHº|ŒÇñ‘&j£æP'ÌìÓâ»Ã×çn8r>Ie麀 ‚Ü[û»¼Ò»E –« ÇäH=Ò#EQºQ{̸‡`ß^h+óÕ`[=¨s,!$""¢¦j` ** c8™ ã]™ï‰û¸ãܡڨ?Ô ³û¶´tà‰ Ǹ–…¶2_ûXÝ·àäc¨„P ¸ªÙG¨„P è¼€j@öªÙG€šíÀÚ`«¨%È>ÔÜ8À:aÛ¨ Õ¾M ã8®¸¸XEóïcµGºIiqq1î> Pô;¯5G^oöÂÚ4¡ô%y÷—Î B~à¡<<Ò~3£¯­ì)³Leê*;;»ÀÀ@K×àIÐÏ>Š¢X–ñ·l¥ÀZtM ¶Œ pqvl;pÖêØ,„‘PK);³˜î¹ò–j%!BIÆõ«Þx}ØDúø®i8ùthRÖ_]ŽR¸‡ýpÉxçS»¦ò†¯V‡¥×jXå©EŒ=Fô.Q\2ûJ‡×^ìÑ܃KˆùrÑ–ì°…}¼($ žù6æÚÍ´Ü3·Xº"µ¨sc¯P_—™}Z˜|5>>>???33ó ×êIrssS*•5²tEê!½{='Œº9ÈœË÷4N!.ØþáÔœøõË71×Jx²qÖ@KW¤Ö-Úqò»Ã×g÷mið|||sc„[èü“jáó.¯Õ4°ûüý)üãÔMªÝ2{†·MJzf̘´#G´²ï¿§Ûµ“^bZ·vùåªI“gÏö8P~ùòÞÑ£ËÞ'¨Îü4oDצÞJ;;'Ÿϼ´ø÷8Ô[4!„¯5–^;Q¬‘Å%%³çLí÷BJÎ ‚ð ýAfVf~N±þ?­šDQ…ôo Šø*µgdÔåûɉç6¿ÙôÜ{ý#>ý¯@…Ò_Û¢ Š\ú‘ÅCŸû¢xÆŽ}ËŸõ¡³†Õm™Ûô~饴Ç5YYT÷óÎ;tûöLh¨Sd¤ÂÝÝ®uAAê¥K= úßÞ½„BÄŒý¯÷z6òF›yÛÎÜÍÎM¿öçgCel:”[Ã_X šÂÕK¯€ bMtº¨Õ꙳&÷{¾[nqº§ûÌ9–._`£$ [™þ?ŽDQÕÿ}½`3=íçŸÞì×ÄU!³õj±xã—ƒR¾|oÃm^E"" ê;Û_4~oÐò?¶Ííèôص4q"fY T‚¢("ŠšìlB¿~=äˆÌÖÖþƒœ–.•;8¨Éüüs’‚‘ç)©uìçs¦^Ù²ãƒáíýä¬Â%$lä»ë—F(E1û—–ee2'¿6CÞÿã®Ô“ÏÝø4LÙoÞçÓžnìfoï֤߼½ÉRG¸»ú•g[ú:9z<Õ{æ†+ù‚(ŠBöÙ_í×ÂÇÉÎÑ»åÀ¹ÛoK«W媔µÔ–râĉÚû€èhƒÖ‚Ih+ó=B[IÇAA&xž×”p§›¨šƒ5x´Ìœ>F3cú„þC»¥eß%„xù»zù»/vxßéó?D‘¿ówJÈàäby—²s¿Q}ì^:|,cF0#±øÊ/ :š?rþúy2b Œkþ˜%ˆ"¿zµèæ&ïуeYîâÅŒO>A$D D,Û@ø[‡b’GŒîlg¢ç »ó'BDµêÚî÷Ç¿<38vïôšB4'ö]~iÛ©o[Ð×¾?xÎ’~ýÖ P$¬?d©øÚOÇv<ížsþ·/v±Õ€&Y.gCìî0׬cŸMœ8*2862¬¦ÇŠeY–a†at ÃÐ4­ÿHQMÓÒDC#éþÝ|h+óÕ`[±Õ¿ Ž%„DDDÔT DEE 0 – ¯g¢££ÑVfz´¶ÒÅŽ&ãE­V+¥Ì¥ ­V«Õjwœ;Tõ‹{ü¼Ôës¦u¶ýÝ´ÛU,súï+óÞø°sX¸(Š|VFñðp£*|.ãîé*^ËÈâEwBN³Þ}±«]3Y³Ç/„ µéØ‘eY™L¦hßÞ¶cÇ‚3gBx†OI‘–2Ó3‰‡·{•bR ÷V/~0s}»ýÇó¦s&„y××"'´ó  é0it§Èõ×î ýÔ[מh:÷»ýÑ„8wŸþMwBø›Û× wuNš‡~ï¾?tãë;/|ö¸kg <<\&“Éd2i}Y–•&*‹&¥ò¡Åbßn>´•ùj¶­>\Ý·`àhpD<ÎM A 4I¾—PÅ2ÿ»ù³víÖ³ôƒ”n.bƃt^ðÑ 8´²(W7g"ˆ‚HyŽýv)³rΰ1¶ͳÚ;>þ`4T•C÷T¢Še§­Ó­Z9FFÊKŽÑhµn#G6úæ›;o¾™±o_IZšèä$B¹z¸’Œ´ ^ô7þ¸¢ë[¾óÅ®Óÿ{§áE‘È{ ÎáE¥(Š„Rº(K£iV.#œV+p÷S(5ñ­ds)I÷‹ÿ~-DñZùŠ9ËàKTùKÀÌì T:çš>A°cÇ®qWJŠÕ&ÿ;u}ÖŒwž~¦î-t“>Ïø%üµë\qy1BÖ¡ßþ.j׫‡kižöê½$jãÄ¢¯G\q2KxÌZŠ¢Xýô£(Š|J )(àsráá GÇ’#GTK—¦-Y’³s'­Pضm[rÿ>¡(¡,Êdš>ûlÀí=;Ï•&$¬›óú±§–D_KË+V—Üùò™ Tq98ããç­¾ó¿{a¼}½­½§Öè¨UžWTwÕ aàhpÿšëI“gôê1øv\’Z£ÖÿW¢.¹r.næËoõéÛ¿Â[d^ùx´vý´W¾:t+³X]”veÏâ©sÿòžµx\0]vå5ˆKø‚ß6Ï–m?lñ‘Üc׳º-Ô«×é£G}Ãé¼¼Ì7ÞHŸ3'yìØÂK— oÞ¼ùÒK7§L¹5gŲš7OÊÈP¸ºBˆmïãS¾jaÓ¾ø}Ú†å¹õ\°ëâ‚òùù¥ÿ7çTù½‰rÜï™ãJëìÖeÖš˜Yk*®ˆs‡i_ý9í«ŠeÓ!oüùFu×jK*? ^Eñq.!„ð¯.Q>¾¨¸dÿŸ»E‘Q4-“É8NàA M34c±_é4õ(먋 O_½Úµ{wŠçŽ9Nz¼~ï^¼Ý¸¿ÿ¶uw¯ñ @]ì#48߭ɰ¬½ƒƒ­-Ïó¯¿öö+3Þàyž¢(†ed¬Œ•ɤ¡^(вàïó‡v^Wö*-“ ŠÚñã_¼äն혃J%ò ²Ðà˜˃ң›}âUƒ'äñ;¯%4ÃÐ #“Ëmíí_-½w}œudäòáF±cýf°ùW¶Àž€ û –þ¡Âøy„õ[¹¨¢êì㓬‰¥Tk5+Ûöñ“ÀÂGÓ©G*ê«öAîœ PÅW5aÇÐ4'íƒLœ¡èêêÚ@ÂGBˆ««‰›Išdr'€ý€Iã>rŽ}õrßP_W÷ °1ËŽ¤ÖÒ˜V¢ŠÔ#õU+?×Uû/ ¢À0CÓõóC ¢°rÿ¥6&‚'¥Ryùòeišª§¤µ»té’R©4óÃd º—ã/ ª},8ùá c¢;|ºáLT+û´#ßÿ¸/®çË¡Œ¥êP[ôŒÊŽPoÌy6ô«ƒWßß{!IeéºÔ¢öAîm\gõ 5~©qãÆñññ'OžÌÊÊzò{b\]]•JeãÆÍ\Þœ]v ½Kg„”_—®UOÚ»jBG!¤ñ ËIƒ9Cã#nÖ8ñ@ÓT¿Þz£+KWÁš4ibé*Xi“7™ƒ¬b×Ð0é ‹þûç¬MSÙÁɃÜ\<…^zè>o¹šÔªâ3&“ 4MãðРè6|ã¤n‚$!DÊ>rG³3²Ô'¶ßúò×3k›h.ý8süK“•Ç÷½Ú½×P?UÖQ¥‹ -]Axr bGュ+`EÊ/!vö4Ûrâ¼±­\6^a¯Î¦<·ÿ•PÕµ1¸têŒ*N`2‘}hhô·}ãþkÝ2&§½üŠ]ËÖXR1äÃÖõ•qšÁdâì̧7pÓüÅI’6­øõj–º8-võÊÝù]žÆT™_Döê4ãíÇÒµ€'GÛGàP5ý$Óhúº_&ðkG¶òì4y·rææ5“ƒp…zÅøx`;ê‘–­*²,+“É,]‹ºme>+o+ã°Ï KZ?ŨDR•œòˆØÀKá8ÎÒÕxBt)v$z'3\j-Å…úÇé-RÈh2éhm±#!„ak>Ì[´•ù¬¿­L†€Æç5wX?ôúkÝ4@CF8p ??¿ö>ÀÑѱö ¨.)¼3ø¤XP7!‚nZ¿ŸÚøQ£F ~„g2ø3(uÓD/OIô~U" õ˲!!!¶¶¶U,#õ¼]¿~}krHÜÑ­,!$""¢–*5`À€Z*¼ž‰ŽŽF[™éqÚÊd¾Ð :ÔïžÖ©Š¤#Ñ ­*|ü÷ß{ôèaéZÔ h+óYy[QGù®: i2i2¾4"Í}»ùÐVæ«Ù¶:|øpuß‚+¯¡Á1¹ß—º¤uÓ¤¬w[º 2R%VÒ8‚$V>2 òØÌÍ‚¶2Ÿ•·Uñ¼”ª™ %«Ž-½~–g½Û?@m38 DRP¨‹ +K[£¼#ÂÇ: me>+o+ãð‘TGš Mžû Ü U6`¸þ„îU“™Å‡ÆŽÄ*G‰õ_â`=ÐVæ«meD32‘•Ñ/àÄGd¡a¢Ê.£&z—`W±¤q®±²ó­-‚”†#±t-ê´•ù¬¿­ B=ã$©M’ʃKƒ·[j¬ ÂGhp(½ûšŒ BF]ž²êÞjk %VÞÉhUÐVæ«+mUY’E„•…’&—´ÔêXt^CÃ¥Aëo+ƒ„Ä(ø«"šDÔðPuàç#@3ˆãHý物`±²Þjk †±òüõ@[™ÏúÛÊøg¡þÄ£= Ð`!û ”qið’É>nRIàhµ‘õg‰¬ÚÊ|u¨­ŒÓ¤òL¤ñ“&'ÙGh¸Lžøh°€ñù‘M7ZU(IÝŒ*ƒ¶2Ÿ•·•ñ]u2²ê “4p¡¡Ó Mu ^²òxÑ@ÊYÚÊ|u«­Ì&«~ tô:¯51³Ÿº>]нFÉ»}véМ`ëý‰ PSôÆ}ÙD/F4>œXyøhÍY"«‚¶2_Ýj«*B@“/!dx(½ì£¼ßwI…ߕΛÛ~ĵ‘CëÌ ¦˜yD©" ´VÞÉhUÐVæ«£meÍ›*@ÝbúÒ17zýμ¾Ÿò§¬9±`IuâP¤| me>´@gòÜG!m÷úý²¡¿ vÃîô±„Žã*<ÇÿoËú½^ü³‡á+ÐÀ™è¼Ö\Ø´ùZËñ«ÛÉÐq ðÿíÝ}t\eðgÒÛ4iÒÖ–²¬€!µ¶h´kYÙ³¨›ÃiӆË(Ê«+{VP<ʺG]Ý]Ï*aYE^ UƒXÖ$¬l¢äPÖŠñ¥@ [”¸R²”’XH's÷”tÈK;×Ît2ÍçóGÏÛ;Ï}òüõ=¿ßÜço4ü·ÏüŸ;îþû/øÀì’Ù”€ƒfhõ1ÞþÃ;Zûê¿¶üÍ0ÌGg2¿ÿÏ;:¦4~·~ª‡fnH|,;êÒ{ÿ÷ÒâL€±oä}`D¥÷ÚŠHõ€TH@| ÍkˆBýýýÅž¥! !¤ÓébO€Òjkkëîî.Ü ª«« 78"Š¢ÚÚÚÊÊÊ}\“Éd2™Ì¦M›š:k7¯mŠBšPsss}}}?Ä´··[«Y«ÜY«ÜY«ÜY«ÜY«ÜY«Üåw­:::’~Å“×$ >€{H@õ€ÄGм ÕGP} ÕGH ,„¿.ý‡iÅ»gϪ©žzÄÜ¿ºèëmÏĤØy–U}Œ»îºbå ÛnÿÕóÛ;vý_<õùŸ¾¯»xS`ìɪ>¦Ÿ{ê龓ιhñQÕ1ï»ðŒ¹ÝOoÞ–V}`PVõ1šwú’Ú'îYõ𠯦{Ÿ{àΖçNhxÿ1Š77Æœ(„N§C!”Ÿ|åW/>ïüúc?—ŽSåo®ÿ§».›zý?à ÍëÝO\æî>ê kóÂömOÞwÅįŸqÁªßõk^0hoó:óüO~üÄÌ%—œ}ÂŒŠ¨òÏÞùá‹Þ›úÉÙUÄÉ0Öì­>¦fÌŸ?³ó‡·Þ³qûké]Û~±zUÇ+³Ÿ[®úÀ hïaÅ)Ÿ]ý¯»?ûoËÿ»—Ò“f¾õ”³nºíŠùÑèß`ÜÉN‡©êº¾õC`ޱEIDAT×m2ŒuQA—€yç5 ¨>€ê# ˆ$ y @Q¡¿¿¿ØÓ 4D!„t:]ìiPRmmmÝÝÝ…»Auuuáà@DQT[[[YY¹k2™L&“Ù´iSSgíæµMQ¡±±±@jnn®¯¯/Ðà‡˜öövk•#k•;k•;k•;k•;k•;k•»ü®UGGGÒ¯xò€ÄG°q ¨>€ø@š×$ ú@ª$ ú@â# ”…â×íîlûÂ9‹ŽYS3kΩßøÈŽL|`Šý×gYÕÇôƯ­8ÿŽpá÷7m{þ±ÕgmÿÊY½{›@–½ÕÇôÖ¶–ǬüÌEoӤЙïüÈÕ<ìG·Üó»~ÕGeUãLB*µçS*•JíÞ¸áÉtQ¦ÀØTBH§Óét:>ê¯ß?{ëÿ|û/ºz{Ÿ_ÿiz6½ë•—_K€bÿuäYÖ£3щŸ¸ã?–¿òïóŽ<úÝ{ø¤3ß3¹fÚ´2Ík½aãžIug|é?ߺíÅmϬ»ñÝOOZôž‹53Æ ì{ú¹éê›زcWÏï¾õŠOÝ{äåŸ\2-쫺¨ú0ÎDYÇO\rêrÅI+ž ~ÒÒËîúÞ¥'VmbŒEÙñ1L:úôkî>ýšbÍ€1/ !è2#ï¼ ÕGP} ñ€4¯H !ô÷÷{”†(„N§‹= JCª­­­»»»p7¨®®.Üàˆ(Šjkk+++÷qM&“Éd2›6mjê¬Ý¼¶) !466hBÍÍÍõõõüÓÞÞn­rd­rg­rg­rg­rg­rg­r—ßµêèèHúO^€ø@6î ÕGH@ó€TH@õ€TH@| ²B¼G߃Ÿ]UQQQQQ9ã‚–Wã½ú~Ûú˾yzÍ›Þò®|©c[œ›bÿuäYvõqâ©_}¦g×®÷œW“ʾf÷ã_9÷âÖï¾ëóO7_n;÷›ŸÍäy0&dWßP3Ì*=þ|õO/ºâº³çV1íÄ ?ÿ‘·>¼ê®§ÒªãÐþûo߸ñ…#,˜1P‘œpÌ«·<¾éÕBÏ €1( !¤ÓéìSéþLˆ3ýétzB!ô¿ürw ¯Žv€ñÃoH !¤ÓéìSéþLˆ3ýétzBÈå<ãÇHÍëxàßaÍëQÎ0~h^ÀˆÕÇÁ2cÈå<ãGvõ1~qõY³¦NõÁ»vö¬9ÖÔ©³–ß¶-ý<ãN”uœš±rÍ +G¸h´óŒ7#4¯`4×*++]¯ú@ª$íÿQ===[·nìEïã`æ5Àø5eʔŋg2™°çå‚ñÀA&“8ø¯ºuë¢Bqæ ÀX2³£dÇee{ñ…Òét±¦@iIµµµuwwîÕÕÕ…€EÑi§6ؼÎ>l^T×­[×ÔY»ymSBhll,Єš››ëëë 4ø!¦½½ÝZåÈZåÎZåÎZåÎZåÎZåÎZå.¿kÕÑÑ1pÐÒÒÒÒÒ2ذø·¡¡aÉ’%C¾bãÂòåË—-[–}¦¡¡¡¡¡aø•â#!¼1AŽ–ƒ{4ã8^ºtéhѶáìµlÙ²ÁghF¤y @š×$ ú@ªì‘J¥† ï9ÓÖÖE9=@³k×®iÓ¦åwŠEñâ‹/Nž<¹Ø³(ˆ²²²žžž)S¦ärñ„ röµ×^ÛûÖ™ÓN;-—ï<ôÐC‹/ÎñcÙ<0oÞ¼bÏ P¶nÝšcl{ðÁ.\˜Ë•ëׯ8HмŽãX›`ì+hl+¼ÁÍÍÍCÎŒveÉ)ÐRŒÙágx®;\4rõ±¥¥¥µµuÈ{G¼€1(;¶µ´´Äq¼|ùò¼Œ ¿AkkkKKË“ƒOÜ”z‚òèÀ¡j0¶Åq<î†ÿ´\´§ú88zkkkkkë[~ÔüûFŒm5Èáí夆ÆÇ!Ç#Nåo @¡êò’å†ÆÇ†††Â@R|(QÃcÛ²eËòCK—.ãøÞ{ïÕ¼(EÃc[CCÃ@Æ;ðÁGˆáõ©úP¢²cÛÒ¥Kó•Ãhñ1¼ž ÷1Ƭ!ñ1nÔø8Ú$øÇq&“)ö, ¥ ±mϾ¹ïúsì›(>ãAb[ª­­­ãpˆiê¬Ý¼¶)Z´hQ±g@ hêì !”{Eö裖——'=·R;vì(öŠi öõõ%:(挊äÊ5]›×6EÅž@‘ fÁDã–æ5 D÷ß}}}6²)++kooŸ6mZ!àà:* îûXPµµµétº#GQôì³ÏhüÁO:餼 PŠV?ÛN|Œ¢BÝe`ä_¸i”®(„J¥ µ)yé¿¢€l ñ€4¯H@õ€ÆH|L¯¿î/çÔÕÕÕÕÍ>áÊåÿ¯ýþ'·~fåßœ<îü“ß{î?¬þõÎ8ï÷öÄÇÔ~¥;ï»ö¬w{ÄÌ#æœrþ—×vÅûÿJ‚Îu´èÚuOoÙòä·Î8¬íîÝë¿÷½ÿ{ûßÞð_ÿrÝw®zë_¾ìšûvÉåX}ÜýÄõ+/¹wæ§ÚŸé|rÍÅaÕÊKnùmAÞSSO½êÆ«Ï>åmGTOžö¶Ó/_±°wï¶ô{V%(·ø¸ûßY½yÑÇ>wöœÃ*§/øðu—Í^çÝ›K3Å;ùÈ3“æÎË„bÏ •…:×᥻Ž\°`fY*•J¥¢c.¨þÍãO½–×þõÁñê3߾꺟ͻêÓ 3ÆÚÔJANÕÇLoOo˜2¥êõÀ•š<¥*îyeW©ýzðOÝù÷¾)}ñ-7ž{¬ü)rJQeUSªBOOïëq1þcOojÊa•¥T¿‹»}óå]]yùíßX9wr±gPªrj^—Í8þøYÏoxlûÀ¥™ç6<Ö=ûÄã*K¦yï\ýE—5M»êÎdG€‘Û£3O>oåœõ_¿öûO¿òêŽÇV]ûÍg}èì·åñÙ“ø¥»/œWW7ïÒ¼Ü{ïGçÕÕÍ[ùÝòÖ_î¸ù[¿ÜÞùÃO¿ÿ¸ºÝ%~²#ÿ»Kúrü àÄ>ñí[º¯¸æ}Ç~dWõœ÷]öí[/96Ÿ;ާ¦Ÿsû“çäqÀ7Ž>õÌ[Ÿ<³P£Œ'{Þy½ÿ Ëß²ì‹-˾˜lô±Ò¼ OÆÈK ( 9Wÿ$ª‡ÕG8ñ1“É”•åÿFeee™L¦¼¼¼ã ^UU•ßaJÝž'¯ Úeîêê:üðã(Ï/zÉd2]]]ååå…`pñ`ˆhúôé½ÁôéÓ+++·mÛÖÛۛߑ«ªªªªªŽ:ê¨ÎÎμ?8xÇ8D5556lX°`AÈk 2Žã† jjj „<€ƒ&ª««Û²eËOúÓ—^z)¿COŸ>½¦¦¦®®.¿ÃPDQA G6î ñ€ÄGH@| ñ€ÄGH@| ñ€ÄGöåÑG-//ü(>°/‹/Îþk”„¾¾¾ìªŒ`°g­y Àþ ö¬5¯Ø¿Ážµæ5£Þ³Ö¼`TÃ{֚׌jxÏZó€¡öѳÒ¼NíØ±£X³`Œˆ}}}û8¸rM׿µMš×ì«g=¤y]¹¦ë`Î €’öÿXδÝdIEND®B`‚pyspread-1.99.0.1/share/doc/images/screenshot_macros.png0000644000175000017500000001664213604417767023007 0ustar andreasandreas‰PNG  IHDRáü™Th pHYsÄÄ•+TIDATxœíÝy\åðÏìr,çr, Þ¢ÙϤ>iFPšÔHÍù —h^”ަ¥%¥ Þ×K›ÝâĦƒé×w„Çö7°ÑÖÒÙïõ'úE;Wð7‹l:í›™½Ëeö:[6» `Öî­Ïƾàjvó—]—ÛLY0¾]™ÌÍÿoùFï<Ïà,d–f–V¶Ö––ö:Ž\8ï 7º®xÊUe-¥ÊòEEŸ=I¯ ¼´þ£ù[ ‡¼h£·¦èú·tõóV4prrö›õ[QÞ»øŒ´LKß&®n]Ý]¥€•™mÙÈÇM[Aêåë…ìÌl€´ùä5+ºÞ˜7¤w¯ ¡ï.ØñO £&FÿŠÓøZƒ5+ø|”“÷÷JÎáS Fj§w//$„͘õGÓ¹û£ãÒïäæ\Yh& Ux(Tñ·Ó ^Ir$®® TɉYÚ |r|2\ܴ㳬éÀVï9zòØîÅ/%/2ãJ©iÑ ¨W•?Å—i…Ÿá˺.ùçNÆÑiM¥z…bq‘R0—ÙØØšówþÞúåÚ¿4·LÒæƒC:ßZ5sùÉø{Ê‚ä¨M³–Wê·fÖâµ!­ÿýaî¦K9*eÖùç®k?ô•ÆRŧ¿ù宨¸\¥Z%T÷”Tëæt ,½£ïh¤fPß>ÐTó¯¦D_õ>×67Æù™ã_øá¾Ìãù—Ç÷îpè€Äwü†êyŸØû›4ѽýk3—¶|ô}ZN -šýå°¶³s¹~½'†­šØD ]ÆŒþwÑÁsþN.²oÜeÈŠ%C]é‚ôiÕÄ×÷Ðþ½/¿úFù>>ØÄ×·|Í€î½J 51-SóÑÏð ylµø{&Ígø”QÂ.z6<(£„u”QÂ:Ê(ae”°Ž2JXG%¬£ŒÖQF ë(£„u”QÂ:Ê(a]%ÏæEEEÕM?ȳÌßßßÈÚÊŸíׯ_íu†²"""ŒW s=ae”°Ž2JXG%¬£ŒÖ=VF…dô°Ãš4£•”X;.V°h‡Ë¼Ñš€’Œ GNß¼/P&þq82IYé&Ä´=ñq4gæÄ`ŠÿÆsÒGV‰YÇ?ôœÂÖB*á,»¯L± .&ݱ™¯-@Ö°¹{þµ›¹4GÙ³í‰g4ö_H_@yù5ê¿W¾¿ð×+¹mæ]z ¨Î¼×H!7.®ÐÝGa®©!màÝPL¼©.¿1yv<ñŒÂBfp‘š!€3÷iÕL;»©˜Ÿš^Ü@á\:Ürr…+—‘z§ ×ÄdU;£% ˜ÕNVpôŤ0êÊÅ|¬„®°´F˾Øy6B–ÚÌÅÃñPH]ÝËîå°\báÎÁ2NêñÎñb¨òò mìõ®$öŽö%y¹÷Eü¯ü­ýæDÓ¨úŒ©fFy,}n8ŠäÓPE´fn&¡£°8 .  «ü1m0¢T9€SSá9*WæëýâUâùî‰{Ç9qàl†ïQŠ|Ú½-Ä¢Â"XÊ,õgÒ1·”IŠŠ”4IÙ3¬zU_Åö+˜½ m`ëÿ.D# ð7°æ >Z…n^°°AŸOñzv_¬•–ÆSÚbvTaÌ¢ôg&ž1Õ˨‰l;x;iͽÐP |*R‹0Å Žg…uiÈÌ®f_8™µTJ•þ Y¢R VV2š¤ìV½ŒJÜàR€Ä\í¢:)<HPØ"4 ¢¨û>¨º‘9:Z=È¿§w‡$ÜË¿gæèdK}†U/£f~懯gãj “±p.’úar¼‹3ñ(V"þ<ŒÄ¾‚êv†sðô°¸“‘SRñnF–¨ðh ¬éžéÙTÍ{&3ÌÜŽ)t‡G7¤öBsm3omÇÇn˜{gô}ü0ô±«~oœ7¶NOÌÔN’Ëç$¦ˆÞMtúL«dnǨ¨¨:~ƹ$#úÄuy`÷f¶œ2ñܩԆ=þ|•˜†ˆˆˆŠžÃ×ÌíÈÜe®èÐ_¡y)óò®ßÞÐsO„u”QÂ:Ê(ae”°Ž2Z5l,÷Ú„%v€ñØëe”°ŽŒòXÚ¯lBí?Þ$½€=ÀN  "0˜þh@à‹Zor°N0tHŸ062JHÅžpFy,ꀞÓÒ2 5ð4€½£ñqŽƒ„ƒe âT˜Ñ“Ži× ñèf‡ Ye[kÓ=gbBW8ÈàÐ3 v×Ï&®€5иYYýT`0`Èa@†ÑÊ<ÐøèÈ€Ö€f7×/àá\ìX@¾6@ ð»ÑF4åÓ.€ ­xG À<|ø<èX¾@X•ØVãèo{Ñe%2î#hç ¼±Kü10 ‚ÕY46Ú)mk鈳Ðí{dÜÅñw°é+zì¾ À( ¸dþÀ`@Uq}Ü®ÀHTþ³²Xäá@" ¤è*ütšÿ m@.ð5pHïÜZ¾½ÀJà>°§â9ˆ¡º}¸©Àià(PúÇ…ëõ¹³ºÈhÇ©x»#ÌoÕÎsКÖdxcÛAf‰öãÑñ®¤–«-Nƒa@„Þ±þàt_R½pÜΫ/ÀøÈŒtò*ðð à¸Ë€(àveû0¬€÷_`?àë>+¸l&`˜v€%ÐX¢· åј tnUaG8à9à]àº}¹,œo`¡^:,) 3zHŸ˜ºÈ¨›¤µõ´®5 'ípæ°ÔUlïÝý“f8éª+OŠ/]|­€4ÀH'3KÀ]·è­+4®ôo K/ 08dû)h¬>:〠•5À£ ;´d€˜ä غØá…‡ZØö•íדQw÷LÆŸƒæ8ˆ¥g1fRëN4B>òëìÿ3)[ K/Á`äam7@¥w ª9áºVö.¥k˜’uo´ÂõÀHÀZWçu øè ôr6R•‰¦ @V‚n_ ôÚOÖ»h±R€Ö•íדQ‡5ò´ œ÷4Kж­p27 P˜†Uóp­Îžkö€wx@ œFFÖöÚ³€;@&ð!Ð h ø ðӻѷøP«8]t$ÀÛº«…±ºšÇ9@, $€JïÑ`#UÙ ¶€ ¬ÔÛĘ äÉÀ\]vñègOu®?{2ò4‡A3á±næ° Dœˆà¥èöÎhØ·;£yÝuÛ7 pÞ†FÖ6vjÀh XÛt§È ‹ÞéR_00 «m€®| 溒n€#0°ë·Ê©tGZŸÁ€ð¾î¢B³/ÛÀèôêì°ÅÜ3Î&B tv-ç`:0ÊÐV@K`0ÂhãÆyÚ<}Ï8›3 ºš›ˆÀ@¼úDzôô¢Œ²A(+`ƒÞÝ@­kÒ ÆWK ï±1QôûzÂ:Ê(ae”°Ž2JXG%¬£ŒÖQF ë(£„u”QÂ:Ê(ae”°Ž2JXG%¬£ŒÖQF ë(£„u”QÂ:Ê(ae”°Ž­Œ–d\8rúæ}ͬ$Ê+kG´u±’Z´ûò2_f­2ñÑIJÝve‰Iy2°<A«9ªX“îØÌ×– æìùlNLÐþŒ’â¿?{NZf­¬as÷ük7sµi”Y$&åÉdT‚gqøM£sª•›»YÈ‹+t÷Qh&Çàcÿ‘¾Ð½ƒ\bh-¤ ¼Љ·3Õ‰)aç\/槦7P8k'Ÿ‹ •2‹ Öœ\áÊe¤Þá .RÍŒòXÔ=>À莰—Á¥5¾8åækÞ¡w®×¬*7árÙ¹›U^^¡ƒ½ò7²ïñ}bêš>–œy›¹ÕÐ_«í¹½£}I^®öâµì"15GÛçW 3¿NÄºáØ ›AX;Ãr!~.»Iù —ËÎÝÌÁRfÉ€CÈ{§¦6òœ|L%–\™ÿ‚™¨¿VËÜR&)*RІ‰É¨IFÛLÆôXY¡ó{x×[÷kçÔŸa¹ŒÊ'\® Ñè"15Éh#_Ý×xDDDôƒŠT’Qÿºé!¡sýc‰ŽŽ¶°°¨î R-\dddçÎóóóë»'O%M抋‹«õ¢>{üT¹~ý:XûbOÒÀUë©–J2U7ý Ï2ã·=•£ýúõ«½ÎRV¥Ñ=ae”°Ž2JXG%¬£ŒÖÕIF…¸åvA³Å2¯M—ü}»ÞkÒL{/룄uǪ̃x't€ïô³%¥%BÜò@›ÿ|ñ¯º–;fBînyÕ¦á”SôK¦¢q”°®–3*æG¯Ô³…«¥µK˾ÓwÞT¯¯Nørð íe2y£ŽÃŸÌàÕæ¯-ê`ÛãƒE£;zÙˬ]ZúâX†!em?Ǿ¼Ì—ÖZÜÉ>py¬1ç÷¯‡ulä`eãÒøýáñæoÓUûÜ.Ÿš˜ZtrŠ—”Ó°ê·.-33[¨¨!!3=ËÒ§±»¶Rï&ÞÈJϬ°¾¦V#ßFf¥/½¸¬ô,VǺܰ7ƒÏÞ¿aŸô A mõ~øúî1ùwê6`Ü7_È5@âæá&­dG ¯†¿Ô¶¡ƒÌL"‘6œr²07;_€™‘mçíí¤,ͽ|Ju]–ØÉíår{ºô¯¡Ú¨ü¸«{o7…‹*1>CJ>ñv"\Ý]w‰OŠ×]òÉ É¢f³6ãÞj÷džð“[×s9¾»µ¦†Uó×? ‹8wþÏÿ}×;ñóþ“wiSj¸š³‘âÖ½3åLó…Çoæ©>iÕKæ‚ hö¥ 1Q÷S NNH)½h±è».%ú¿­K3Kª§V3ê7jr@ô‚wW‰¿[¬Ì?¿gÁÈöTXßÌoèȶ/Ÿµþâ•23ò»ˆí4ê¦R€¿ñ•¿µßœhh©¯¬ýdÕŸ™JeÖ_«?^8b—€ÄkøÛ}n.³(ªUÈØöæ€âãóFÌÙòGlŽR-ˆªû÷KŒ6R…U…E‚¹ÌÖÖÖBýÓœ•çJ´û2d˜ßŸ_ÏÞr5¯¸0ùä¹›“JÏôÙÓã©Õ¤ñ[Ûÿ÷±Û¡) í[ô}o7?ì­>v×7k=c׎±êúØÙ7ºÍúÝÝÛ¦4“P§$¤»téÚÔÀÐcñbp@ô´ö.rï«ùñÛ~zËG³ œÓÀ·‡Êî<œ0ª¹v3‹noNp<þÉ€–NvžÝe¿¶þ»QnœÑF*ßiËIË>q?ÜLnçÑåý³­ƒ:k/tÌÚÌÜ:0å‹@w{nŸ¥ö î`þx“èTòÿ™¢¢¢êágõùO:ÏñØ1­ñ£Ñá¯-òïô×ô´}£ ¿àЄ–!÷–ÝÜ=ÂÙØ-´ñFH‹ˆˆ¨è9|†ÿ?“YÇÅÑǪ·‰øàê†o÷ÉFîyÕh@ÉSÈ$n6U¿†89tüúÁ¸Uÿ}ɺ¾;Cj“ãhE¤­æDº³|es^ÉæÇl„°Ê$ÆQbÒ(£„u”QÂ:Ê(ae”°Ž2JXG%¬£ŒÖQF ë(£„u”QÂ:Ê(ae”°Ž2JXG%¬£ŒÖQF ë(£„u”QÂ:Ê(ae”°Ž2JXG%¬£ŒÖQF ë(£„u”QÂ:Ê(ae”°Ž2JXG%¬£ŒÖQF ë(£„u”QÂ:Ê(ae”°Ž2JXG%¬£ŒÖQF ë(£„u”QÂ:Ê(ae”°Ž2JXG%¬«üï×GDDÔA?©H%õ÷÷¯›~R:×ÖQF ë(£„u”QÂ:Ê(a]åŸ=‘zP““Sßy‚œåryãÆW£Œ²(66–㸗^z©¾;òÄ]¼xñöíÛMš41R‡2Ê¢‚‚‚îÝ»‹¢XßyâÚµkwæÌãu(£,ÊÉÉyªQéõ e”QŸQžçwÿ²-)5áîý¼¤¤äðµ»k¥cuîëMÖ·?|%˜+>r©¥01äúîNÍQFÙ%>†ËW/ɬÍÕ(R—¨ÕE’zNS†‰"»“UDã(£gp:rü §·kv~jFVZÛnî®WÇ,éb+sy#<óñFÁÇíçÃVŒ¢Œššâ’⨠(%9÷Uy7¯%† ³\èÍÛòîp>lg‚P]¬&Ê(£ª8efe\ºò·~ÉöŸÃ6s¾W˜wëz\ÈIfffe6)8ùÓ^û Ÿ.›õZZxøåm©úÚW]œûÎúj\@¹£g»Á ŽgðFÊŽ¢|Êúnþ /«K[ZÚեNJXžÆQW•ïîžý;Âv­ùiתظ[š’ŒÌô¤ôØÌ{‰J¥RnîÙ¥cײÛw†j;iL »n“ÆXìÞt®èaXŠÏî:ûܲßÒ®íÇo3ñ§DÞh¹¦“œûà ýÒ·†i[REoÞ0f¨/G5qUùî^ºvAêPèÐÐü›5ó‹Š EQ ßêìeU\\|óJÒÔ7g–ß„OÚ½9¦ßäA.%-ÆNjytÓ±»¥Q1ó›8ª¿›LæÒñ…oûœÛñk2_aùÃò¾‹{ÂŽÝE±àdèμ~!¯¹VùJµÒCA÷õO1gWUÉu‰`§üº" Ó‹¢¹2-+³àÞƒ^^uuQ”Û‚¿±}óÙ[ÿœr]§-àìÔ2_íÆ€ÔËÇKiCŸ†\VF¶Û Êôšµê2n”kÿ°ý™AýO‡ý*}5¼¯œ«½Ý¤q”QU^{yHZ|NI±Z"‘\Š‹Üº'ì¾p§X¥ÎO+9d¬ ”mÚ!~™_çÎàk›wÅk/0ùä„díõ©:%!EtQ4à*.‡(–öRÚjÔøç#ÚvzGè ×àÑ]­ª:ˆVe¥Œ2ª*ß]Ow//—&Ö–ö¾ËО\…åxä£'Îsðøž±+&~ÝräÈÿ”½M£Œšªª|ƒGÏM{ ð‚Àó<Ï«Š5hÑá?þª Ù‡6_ìùœ~‚¬zû'mßôG¡(Š¢y××;]œÙÍÇÓïõüèÐÕc½4÷=†Ëí!ú{Ý2çA—ÑC›øñ¨q@A×£O;'Ggÿÿ¼x=):¿(@RlÆêÅË WåoM .[è¼-%àì;¼³qé‡å·4P.ñ™z4}ª~ ¯*âíûŽyݳ¶Ç=Ê(£ª8ÌðE+TEŲ¤'1›î‘ªÖUf¤ìRí"€oQýše «_±\ej ÷mål (Ê·¥­±À÷û·€°4µµhÏ E©aHEGeÐV#êÓ‹ž›”ȳբÞb‹âìçŸ^IW™Í;´57Bà7‚þ!~ÃíèëÇolO`G{kh‚U«V‹ûˆ-¥9ÇCï^~!#¦&î®v½L¹,¦âºD²å+[@s¤—YZæo< ¬k“©ØêªW¬Î!tò´W«}æ¡mÝl¦jËå°*æŸ Ñ×%lY4 µ‹u§–¶QY%ê.#xí` ˜þÓ%õù¢Ìé·M5íyGŸMˆ‡ö )åí«‘ç^( €43;4LÀ¶ž2½mg®¦S˜‚äïÿŽI4êîÒÕÉÄœMg§g¹ž¥",ËÑÚ›Q­P¤§fž¼Q`øâR¾e‡ö«̳#î-ÿ¯ÐÞÏw©¿IöÝ{˯ÐÚ0(xxO±¥¼}%òT¼‚@^Á£¼‚Gêc†-šZ®gvçNmÛ™•¿oçýÐbbï<>ÈÙÛŠËÑ 8 ! !@zwׯY¦°’š›æNÿé)é’Ê`úvtUWi×ÌæA\ƦdÚà¶›O<~”ÐN³¨Ÿo³Û‘i°@‡²_ËQš¯é5—.ͪÊõÖäØ[{Qå?LT0Pv©’õã…ô4%P<«±CÚ˜‡¸q¢P4axËñC¸ò=OoåîÙvy Øâæó:Oî¯Lý7éÈîÛ²÷ýFØÑׇoc€Xâ`Zvâæ‰ë #ZŽ‘ïyv»ˆ”n—ÉÛ³õò`±Åîó:Oî§LÝ—” :MЄG2Ÿ>Ýxíe»¾£\]G¶Íüúv1áY½_Y)y9ÄÜÚÖÜš*rv0eemon R7{cQŦ©JšÏ±Óí–Š]§í™¨¨/f¤ÉàˆÕEÀèÞAð2ìè/­' kÑÁXs’†ÞÝõiV,,Ssó¼@Ø47pÚ—ªÑ”ƒÈTÝ¿SÞñÚsþìÅŸÇÉãÄÌn­G·T/r´6+9q”¾Œú !4wW›çnž¸y^`ɉió¼ÀÍó‚6Ï (­FÑ{“oÄå€RY¤ª¸˜âéi B1jæÐÕ‚¢ÓSÏ'Ê ³Ó®%©ÀغWsU♨2ã³b•À [š)Ñ¥Ö³À­Äƒ¬0GíAÔ«9ª4HF•¥ö&¶4²K5±ÝºŸ•%-~ž.#B3>UuD’÷\FXÖæn“æ¶”$W "ófFfî6ÐÑé´nóùÆ%ÝBæ=»þ97pó¼ÀMµjÇÒaLñ»é©r¦ÌQGˆÀŶƒ 0’Œ‹I²BIڕј ¿»ëÓ,SX®¦ZíjÔŸ«rhgm"à±) ( ø\ö¸¾­z¶u¹“ÚÁÝn\ßV|®f‘€Ç±³2#:j‡ ÞhÎÌ`êÆ‹[æÀ–yAS7†m™¬®9uãE(9{@ÉÜ¡þš²b¥ÀˆË5aP•]ª«²HªÞ+,S€íØbÍÜÚN&Vf<ŠÍêÒÝc` [c6‡¥¾IãsKô ™æ¢Ì*÷À§ˆ´t»“ÎUx+m‚ú#Q¾”!„ÖÜÈ T•A*ó£Ó™nnf-<,œO®¤7 °oÙBÚL@1™yÏ‹ Òæ—ísåúGÏÜ¿ãæê㉔ôŒö`/i's9D¦xɦHª$êC±´bcÙûum–ê.Ú~œÙÆÕæVd22ù¶|.€Ètš$Ÿ–îöÊ|OQ õ·E1S6„ýµ JÔ>eCEB(  ¤šÞ›ÊÉ©­ŸÀÜÛ™{3FÁè.…REÊUäEä’©:}eîÕa‚5+#ñû]ñ1*«iÓÛuáh×Ôì † €éx( £L·[xz¨½­Û«M›áÝ…£>[ë4¡ŒgJç0«2H ¬˜”—L3³6íí,è‚sÑyàçêÝÁFÈ"9©¹™ €NçèvË)}œS{î*=¦Ëõóò¥BÀpM L\J}P“†ßÝõkêRZ­ýµ@£ö)/¡¦n¼°e~oØ2?hʆ°Š`R$…Í,È?¡Q2›Ù[~<ÌgwhdDtê_§ÏÒ’%DÛ§%û‚Uº‡€0ÍÉ™0€É.”T²þBIy¹júmiæ«’\ÂóëÕº£€Ïf[Š­z7÷’éOu¿2¤q)7ò ÛÁips—͉­{÷n;ØÒLÉÓªb†åÔÖ±f6‹0DY,'X–f<! âî.‡c-õéÝv¥h½Ii¶“·ƒÚ©ÐÜAm–¨¿Ê 0™ÉyÙ„YS’ü8iAt±¶4bULr‘ªlç0²Ònéçd$`SÆ&<U*q¢ÙºNTÚ¾’&fÜIX"Û^.<+û€fê™»F±»ëñ@*×ÚE“7\˜²þÂä JjªÍÉ.T·ã à¥âvdrÇs‡wäsYãú¶jí"~œ¡îå3·ã€°ˆf_2WxJwÌ¥ýŠ_}Êž¼!të‚>“ׇ–+7$“d=~¸:ßyp'û>ïúäR.ÏÌLÛ«*éF !€QHþ9ø¨°§›ÿ®,•D’wïaÂÙ4¦0ãù¿Nm†x¸¯œÕœ*9ð‘ß»û¢«ÐÑ3¸ûæ åÕÃW·%Jö¨= Ðx¸ÿ0áL*£UÞ³*¼iÇÜ:—[¢~j‹¨?!UI 3scäÎ6ÈIËËeTñ)ELs ]•¦ªÐ9¥ÝÒ{p×𡈪±kiÔ¥£z¶q±³sk²xëõtEm"C¤&Ô\ðDr~Ñ€!kžyÎÚtáqBJÒÓKÒ£øÐŸÇS™W¯ü d׿3÷¼xö?·ãŸûsV›¨ßÿºŽŠGº¦Æ‚WDüüù?ì)Ûw~1Ì×ÙRÀ器´·rçcYê›mÇ÷>ßðQßv®vFêé•I'— ómfgçÖ~à‚žI+øfÒîF¤5úÑȶÆ|S»ÖA“ÖþýE/žz!)|°uNÿv®vv®Þ[z:•Èß;ÆN(ZY‰<ýG­:›¢Mïþoýô`/g;{®cÖ^ÌTŸŽHþ½m Þóká`kïÑyøç‡bdoÖoÒ$©©àéçÂ^44¬ƒQ•U”áÇïw^•šºc˜@gͨ_§Ì<)þäij„''–Ø„º§ª„½¯ŸcüÁõœ¾›#+7`PÞ8ýØ]XTâÓ#“Ù{®½$‹Ñ{Òssss²“^dwzμ])ÚÕ”á‡ÂÛ® {žð`ïxfû”Y¿`€IÚ5mÔ†¬?]zþ"öÒZß{ŸŽÿ†MGý¡¦‚gr%9 ²iêík' …B¡Ý¤£åp|¦}9¡£ ¬KUäáƒÏüæ­ã%˜8-Z6Ú©â½ ë²C;'Z^]7¥·—«›wïñ+F¾Ô,ãvž±|L;‘€oÕaìpŸÂgOuo!(¾u›aŸMmsç|x¡¦ˆÝzÒŠYm›N3VMu ß*EspÛ­ç}7ÃßÑ„gìôÉâÁyÇŽ>TÖ¸—DO¨©àYB‘H2%±™†ìNÏÍÍ84ѦÔËÆÞ†]aE&3Sbêìl©Q9×ÑÕ¡b%¾Kï9ëÿ »›÷ßæqüã³G|ªþ6޲Z¨7Bqù< išH#ÿýld÷6®v"++ë6‹®Hs%ùšÐØN®Nœ’ŽTVz–2õEªìÊ"/kõ9Jh?b{zfI[Äp¨©àÙ-‚ƒœâO¹_í½o%³ò,QÑ‹yš¹|UJ’ú.¼Ê ™8wýðãáîÙwn'Tûk`¶/\ôŸÇ²£wâÒ$9Ù¿ëÁa­|éäDÍ=Ð)I)Dl'æÚÚÛšôýåyNn 9IäW‚è#5ž´ãuúø›è-“Ư9v/¹@AÓ²œ¸›·c¤¯úªã9dx«Û?/ß™§¦\ùáë½ÉVa^ìœ;~Å®ËO’óäÊ—©{;gÑ®ƒ §2‡@Rؘ˜riɽݫþ¼¥sj Ÿm[¹éN¦L–ñ׊- þ#:r=C&u¾ÿý¢Mÿ%(d¹‰w}?uùI|œ1ùyJPkg;®ï¯zèµtïªþÕ_)9­goù¥êÚ­\Z ü&­×0Ÿ :f9 ›;NtgÃäà6ÎÍ»ÿSÒëÛ=ß0¯Ê%»ÅįÚž™ÔÑŹUßÏn´îÓ‰[ºÛmX—{K=\½ßßBÝòëx°Ü&üµo¾øÜ¢~m\Üý†z”>>È´ÆMG}A“~ãH›†Ž¤. £×÷ Ž˜¹;ÕŒ e˜ 3êÒüñ ‚(x1 ªškš°[.¼˜ÜÐA Hã¯ðb@ àÄ€@Á#ˆQ‹{øââb‰DÂf³ÙìÊŽEä­CÓ4MÓ"‘ÈØØ¸&õk!ø¬¬,333###Š¢(ªæï¶@¤^ „Bd2YVV–««kMV©…à9ޱ±1—Ë}uUAÞE×°r-îáq$ “šk³v“v8’GÆF­T‰³ôb@ àÄ€@Á#ˆ‚G  A ýúy,RK~ }™–7QÒÐ •ÐÑUäå(œܺ}¢à —_BŸ()ö—C|*š&˜ø³qÁàs9»n%þzáéìÞmêÊ- Þp‰LË_?1˜Ïa[™ ^]yëäÉæô.ÜV‡>ñÞp¹›(Q¨hT{£ÅÊT PÑu{Ã…‚7hhGò‘’§eë|¡àÄ€0$ÁÓÑz»~x ž3ÎÈŸí˜àéhc¸îiµIµä탓vu É9¾futïÝÏ.u67¤“)ÒDhd%ÉÞ=ÚAdÛaAhæÞ…Žý¹¿óÀßšHªW:þI«]÷Õ®nšH$‰mì][wöÉÎGExÝTQ^úØ…CQE±Ì>8,×]’pô³wÚØ˜L:Œø*4yÍòú¡‘ €efY|èë?+:×Ȥr¿ª—±]>:‘&ÉJO¼ûï ËóŸNßp¿ª¹H#‡øs’ŠÙññ–e~®|¸6äÃöK¯¤æ&žü6‡Œû=Žyòú¢1 Þaäü¢Í«ÿM.ßpåÍeÚ.¼¤90‰ v}§„½¡·ËÐ¥?Îîß¾™ƒ“g ¿ÜL¸ñÛô>íÜœ[¼7¦ôÜA îmþ¨O;7'Ïîc¿»”©ÞÉ¿¿cáÐ.žÎNž]G.=+­Û³ø¸;8O:,ÕE•¶nb·›ƒC³ö}¦n¼šIäÿ;ÖmÈ–iÛG8ˆìz|û°*5³xÖíF‡øó“"£_Vá  èÄtÏžß]ŸÖïÏð˜ØÛV¤»’…÷ ‘ÏÜÅoÌW_³-ÿ²#¶ÇÜsÉáK;àäì[)*,S3ín LÌL™Â‚bº–åõ÷&¹Æ)xNËÉKGK·¬ÞSa\_”¹¥…¦1.W`a¡}~ŒÃãÐtɈ–íèâ¤9øÙN®Ž”$C¢J{‘&»º¤HcÈßéYYš1Kl'®ø~@&+CÂwq³ÓlíÜÌ$Y¯ U}Ÿ™òìÂ÷ýåÇ~Ý©¨Ö˹{wû{WndߺòÈ+°_ïH®_yèÚ³»= €ÝrÆïºE­Õ¯ïàÑs¾ù÷A.^à–©™)¾Ôîò²°ˆefnÌ®eyýíÇÆ*xcÿùŸö|¼aíù¼’ÖS6[¥ÔŠ—)È«Å_’”¢*ýHD¶"޽IŸŸ¢²$%dÅÿ>€W²ÕŠ^Xb[‘üEb†Fáô‹ø ²Õ°3Y|qûñß­ì“øÓª½ÉP+N›€n‚›¡ÛBo;÷ì.rèÞÝúæùa·Í»÷l¡> šZüËþÓ¡g÷~ÝëÅwï/:‚’oP(‘··]ʽ{š[+:áîý‚í½µ-¯¿¯àù|Žãé»â´Ce¶›WKåÕÇ)¥é77¯Ù]ë¹(úÙö¯6ßÉ’Ë%w·®ÚšØuÄG®gȤÎ÷X¼9<±@!ÏM¼wü‡é+NUûxÇó½^~_¾óa¶BžuûÏåÅw9¸Y-^ãMY\8­ùõŸ»ãR+^Ç€ÎEGÿ8jÔ½§#‹íÑÓ_±ï÷“Š®í¹ŠËk§­Þ3>G®b‹ùË—å;'íÞ.ÜÎ&µºþÃç{#óe9÷·üï×ènSÆ´f׺¼ÞhÄ‚`{LZ6N˜Ÿ¯µ)ë!+Ö%­náêýîš„N¼kƒë?´óýÏ‚[6k?z+ýÁŸ?è–뇛þ/>¿d ·›Gבÿ;FhZ­N«™m­Ú:ÆÇÕ­Ó䯓·nšâ^»ÝÄi9qÁ{Ò½ë™Î¨Æ•I×ÅKÿžžnû€nœ"•_/?õ%€ç?v¬åå¯Fù7wkûî†ìw6|"Æ÷ˆ¿HÖ_%x÷ïÜÂ=Ã%èóG*à¶ÿtÿßCÓWõ´·pð™ºoçGÍYPûòú‚ê:v…gà˜#m^Y5==](r88ÿ£'t[}ìôÿ†»ÛX4t Hy(Š"„@\fþÀo…/}¯šÊ*•*77×ÎήzŸódF]ÚÓ¨¯ð‚Ô-(x1 Pðb@ à Üý¢}Å`ï Üã†KGWŸÇÉ)ªÇ9‘7ARP,às;ºŠêÐ'N¹.^ŽÂ_ÎÞŸÓ¿C¢¤ßuÕØ`øÜŸÎÜõvÖ¡[¼á23¸õ¯ž.܆ï¥oœtty; gá{é‘:¢_xŽ4 ðA <‚(x1 Pðb@ àÄ€ÀYzƒ&&&¦°°0//¯¡A*ÁÒÒÒÂÂÂÝݽ}¢à —˜˜.—Û±cdž©’øøøØØØæÍ›×•C¼áRXXاOŸ†Ž©++«ÐÐÐ:tˆ÷ð† Žä›u»›Pðb@ àÄ€h:‚orÉž™Äß¹ŽÚ•?CC8i§ &{Fôœ:=¬õ8Ù3“}wç²ñý|=]œ=;ž¾öXôK¼~#ºÔ]éú¡î_¡£§ÉžIv觃‡}í5gkØã„ĘûW¼Ã=»÷bÁÛŽiÔÔUéú¢î¯ŸÉž?±›5ióöOßkïhÎãò…®†.üõËÁUx«Ó¶««}ùËÜw|ÜÜ}‡~y&•LÝtÐãtÑz™ì™Ž¹x)Ù}ÐðŽ:^ª÷Vó«iÛož~Üum賄LJ&±÷.ZwI†é¢› ú.Z“=3¹’°¶±®¤»^7utmÛÎõ›¾l´·5ŸgÕ~Ì0ŸÂÈÈ4ÓE7j›Fº©eÕ»dÏ,¡HÙ™‡Ì¯Ÿ:º¶m§,„šj—Ï•JE0]tS¡¶i¤›^~x=KöÌö rŠ;uä~ÅÁV¼ÕAÛ+ÓE7 ]´ž%{æù~¼úzëÔIëN>J+Rªy‰G7ÌYu2¿FÞê í•€é¢› †.Z¿’=SÖ}¿;qð÷&´rqnÞ%dE(wèø`‹y«ƒ¶W¦‹n|ÔUéúÓE./^9rdCG¼‚USÓE#R9(x1 Pðb@ àÄ€@Á.––– òjêv7¡à  ‹ˆˆˆ†Ž©Ž;wîXXXÔ¡CüŽÍpqww Å·Y6Nð½ôHS‡/*ÀÛÝÁV,¶ñ^rUš+É/uPIœe_E̘.Z/ „ŽË-Íx°­ßƒ‚?>W»±q^ïÒK—ƒIܱhÉÍ¿8t+&9#+óÁšîÂè´¦’qXñõ IDAT8u½³«ŒÓEë ,÷ðE}Ò/^Œ¬Ç—Æ"x}K/]"—Ê.ßÄÄ„KKîÿ³zÓí²M©$Î2‚¯"fLÝä)>õÕ¬ŸOßOÌ“+‹RïîýzómKÿîžõxÖh¯oé¥Ë6­Å„UómÏMñkæê5àó›­úø–mJeqêRE̘.ºÉcøÁ;ù;gõö°4±ññCrÐ/§yOX;ÓE.˜.ºI€é¢yMPðb@ àÄ€@Á#ˆ‚7\0]t“ÓE#u¦‹nü`ºh¤ÎÀtÑ|/=RÇ`ºhC‡ôb@ àÄ€@Á#ˆ‚G  A <‚µ7Aê š¦iš‹Å5¬_ Á»¸¸¼VT‚4 p–A <‚(x1 Pðb@ àÄ€À7Þè-¿„>‰LÏ¿›ÑÐÔ#~Ím½„3ƒ[Wº4&&¦°°0;;û-Gõ6±¶¶®Õk°PðúÉÏ¡Od4ì˜5 ¡©w–í ÿõÂÓÙ½Û”+‰‰¡(*00°!‚z«Ü½{766¶†o+CÁë'QiùÛfögýÿíÃÊ‘þ“~?[±¼°°°W¯^†ðëŸË—/×°2 ^?¹—aǺšÛq•ܶdggNÔü¶¯·úùu£J¥š=gº™…)héKÙo¿n®ómÕ„j~ÖñÊæš>1fLäáÃåÊ›?q‚Å­u~òÆ ^oQÿ²¢Îݦ¤¤¸4s:–9rn_yÖä.§„¦ÅŽž¿f ÅfƒúAÓD¥ú :ôèQ–Þ%G×·ö %0õ#xša*º%L ¾úŸmVÕ„¦…„bc?ø õÜ9¹Î˜gfÖeðàÿŽ9:|ø{6°æ™øÁ¾&D›$®ª¥µúé*~¯·:E&“íÙ³“a D.WäääëþÉdʺÝ\­¨mÐJ屑#âã?ø ãâEùË—ºk)”ÊŒððnï¼cuüý÷•êm¶¥"5Ù•5?*Pðz a€©£?©T>köä3çddd1 ÈåŠÜœ<Ý?¹\®­Lg„ÿ>ï½ÎžvBkk¯ï±ûa>  ½c¨µ×âp9 tÁÃßCZºt_|:™~“ØSuTÁñ‘#“’z¦‹¹¿ýÆêÐA½ ÛÛ[ø÷ß”‡GÆ;= à?ztbÌíz´äÖÖÅ!=Z9X™™ ½‚Ư:ø¬©#]¿Bί®Q3Pðz CHüIe²Ùs&÷y·Å£†ÉÈÌÈÎÉ.Ì“êþ)å*††0™gæ úcZÀê#S_$Dìšß2âó~C¿½UD£=tBT™a+‡¼óƒtú¾ãkûÚ³Þ0ÂÚöLÜÙ³AãÆ¥_¸ ÈÉ¡ºw§ÌÍÙŸ~Êòña{y™¯^͉Œûõ“¥=xÐcàÀ˜ãÇ€HÎÌøu¤÷‚Ý7ã²²S_ó.÷ä®Ðü:Þmõ ^o!u1¨—Ëå3gMì3¸[¾4ÓÆ^4s·_¯ýL`|#®îŸJÅBˆüÖOŸíbMÙö×ü>V|®‘mÛ¡+wl˜¼ñóí±4!aäqÿ~Žæ<_èæ7âÓ-_ ± $w×K@`ddjåÒqز“/Ô÷7ªgký­û/Y?=°¥­……m«þKŽ'«o˜Ü[ÌÐÎÙJh׺Ϝ B“±yvo'+s¡c»A‹öGK5í«¦%%}PcPðzË›_ÛerùÔ)ã‚tNÏM*..¶u²ê5¸cà`?—ævÎî¶%ÑOâ—,þ’!Dz1¹Ù y¥NÀ²OH°ñÝ W²hB ÒGŒøIdÿíÇÿÝŒ_7cªz Fò „þýwÁ36æ™™©îßÏúæša€¨Tj?ªèó^¸¿âkT‰?‹öç¿,ÊŠ:¹ÄöÄŒY;^К-)ÂO>ì¶áZ|zìÉiì]sW_(&„ŽÛòáÐo{~›yjE‡ˆ#פ„NØ>qèºÌA¿…'d&…ÿàwwÁèonÉ4á¾Jïµ<ÎÒë-µ=*2wΔî}}’Òc«©sãâ£Eó–ûuîB¡s²r@,¶¦Êl—-²±"O²rh" ÷ÏßàtüßûþbÖF§¡'5ì¶——À×—Ãáp¹\¾‘¯oÑíÛ ­PÐÉÉj?tvV6ˆlÊ5­<<«6#¾˜¾­Ó™k“FYàu¹rl;k@‡Gú~»ãI ¤ø÷¯ð–óo.éíÎ0÷Ÿ´Á@µo˵6 îÍìæÈ0 ^üÙ{/ îݯÌ*ÜN3VRn2ãÇóÑÙRyqú££+'/s÷ìùL|dòÐÏO¥¼áS;µí„wȲ³»áĵ°Èß»—¡iõ,CHÚŽ›Ý¬U«ÔÂÂ;rùû—/«7bÝÇ»ß[÷AWw[gŸ!KÏr†OìmÎj1iõ'¶gÆwp´o¼$¼U_?névuCÐ~¦Ü&oÝ¿È1la ‡‹×à•÷}ûó å:aëÁ…6gönéàâóÞâêáƒLÊ»¨mó+Bu»Â3pÌÆ‘6oph!Ž.+_Z:œfÞè&¦i¥R)“J·nýõæýP…\ùù'?XY‹X,ŠÍfs¹<¾€Ïç ø<§á~gÂf±Wº¹|X¹òÐÐÐ2Uô­Pœ &%ùµnxõª4?_#x—ëÖªUbnîkøùó&ööõ߈7‚Åb>}ºOŸ>ÕW› 3êÒœ´Ó[!oø{xZEËeòâbéðác‹¥²Ó'ÒâbŠÅâr¹*C3 !Àb±Yì;XÔ+†ô•¯ÅåÜ·ïTHÈÇý»w§hšQ©ˆJ¥þÿiJÊs#£‘gÏ ¬­k{ }ûÔ*B¼Þòã½r°9SS‘MÓs?^2cú<š¦)ŠbsØ\—Ãår86›MQÕYU¿T³éê{@­ùÓï¿¿éÔ©r‹ÄÞÞÃOžä™›7~µ QózV„Åf³Øl.gdbRqi=ýê¾æ¼IÙ<Þà#Gê0˜Æ ^oyó+|“൯ðz^áðq©†¢¨7œ·kä°Y,Ãø¸Š*. … ÃPUÕ¼~Àb±† …5¬‚×OÚ:Zm8ý`þ€vl6DOs{S„a˜ g¶s¶ª¸ÐÂÂâéÓ§­[·ÖïÔæ Ã<{öÌ¢†õQðúÉœ¾^?ž{üž›÷% K=âã*jçl5«·WÅEÏŸ?¿{÷nnnîÛì­! -,,<<ü1Ôû ÄbmŠ@Ê?¥¸>@µíùÃÛ˜  Š¢m šs×{„!¯]‚!ÿ?M€þðw4©ØL%Õë³(ûýøÒéÛìKcK“Iú-©m¹TCyX¬M±ÂSŠë+h‡'[¡,šLßteËé§ÅŠ$ôÞ‹~k/@[3'(iª4b”;äBP4|ýûuÅ=¨‚¼ZI\Ãb}K?BÓ’‚ˆ¤÷´ ‡Ý‚ËZD€ÝRo€›YWMm¦4ëMÆ…[1ÁÂÔõûº½ [¾-)JŠŽûûZJB1„.ý“"TËÑí{· iQÑ›”ôs7cCß „©­ãÝͼ«™fK(ЉŒûçNZª„b· p3/Ó×ëà ºa½WM¢HÊ?UEýsz~ýûõtUí ½:›ËªØ[ê?‰IÛñ/™:°ýΟ?‹Këa/ª¯£åÈTªt§J÷PˆŒìÁ‡«+*Y ‹ê(‚ìo‚Á±1nÎ’ŸBh¾bçmÁ»poá¡ØTÑ„!¶ŽšTÉ $ãå‹ï·ßÝ!5ic=͵%ûCS@©(pÏ©›®}½ùöÏ—³Ùf¦“û™ Á—ÃÚ´æ$Ý [´çÑá”fm  ÁÿrH;o FØ…û e}µql áÍiZŪŸú°pÇœž°cNÏ2uª¨FÊHWKöÇ0å‹v®mMžÆ¥m?ûìi\šk[ÓѽmdOë´ ¤$zÈ–ž6.¡P;çô”-ôÛtMvt¶kn/Ù’©›®‘’j„ȧ°XEÙ§ÈèÔÏ}G? ¹ñÑ[n‹Ä4-ºò(irÊåøÂ<’z;¡UÇ6:­5Bž]ò,#CL²Ÿg¤Û™Øè·¾-zYQ€ òŽhIFlÆëbC]¾f‚ÈØÐ•G‘Ì”ÓÏòò 佊MhÖ¦´/q~I_=­8Ÿˆ¡½WŸ±ÂSP¾ÂÎ’ívÎí9uÓµêÚ1ÔÑâj0eS±6sœW&“ºãlk2Ϋ ‹IÉáj°„‚o²ò©21¤Â…mã·ñÚ®y½`×Ü^~¯îš×[_6^+¬ì%sÃXTQþ©Ñ/ÜÙùFgâð¶.æ–ã;f¯ -ÐÒÔ`0­›c rDÐBC¾‹BŠóÞ „.(zG€ÒÐÐf–DB€Ù¼‹›•·5Ï 9“Å ( YÍÙÐB‹Ã óÄoå‡ÜhQU_ü "–6œ÷ª +.W¤ êåXlTE@Ö¨°ø©Å O)®¯p[–/¡ y“þ,6šA4ESD¾¿RR•@¹xRé~(2k”-ÊR¶XRäQ‹ »(IûsãÅ?ë}X¬ƒb…§ªÝf•h¶L”B@~ºèÃŽL5ëV¼ô^ö<]sj,’Ú¯‚E,b±îŠõ5¹rs(%‚ (B”(~Ä*XÄ"ë¤Xr(Q/c(PäK(Ùõ·²Ÿ‰Õ\üˆU°ˆE,ÖI‘ªÇí±„< ì]ØBècÍ;–Pþ§Ç!ô)0  „T BHe0  „T BHe0  „T BHe0  „T BHe0  „T†Us„>_\yñ&çáë´úHåÜÚ zï¶JÖÇ€¢QQQ¹¹¹"‘¨¾‚ªÀçóy<ž••Uå§6_y!–¾ýÕ?ªFdñ‘à-A/gö±S¦2”OÅd2ê{ ¨Z±±±ÑÑÑ•cJdjΞéýèò¿—E,óqõÝvQÉÊP>UnnnŸ>}ê{H@TyùØ´r÷*DÕx£ì!!”O…G:BuÀ˜¢%KÒ¤ (¨I#„`@Q! (¨I£[@¡“¶ p83âé~†µØqøµê¦A^‡"}µ¾—ÉØ£ù5T‡ï™âf%ÔÑï±æ¥T-CŸR¿¤1¿÷Ö¶'ƒ®ÍJê·òïgãÝC!Ùg]éuèÕ-íQc@hPÓI’µDëY— Kpúþ~|âÌË3 JŽ‚–'1š®£VĨÍ.J-JAä±_~ÞtânT6C߯¹ß$ÿã\…µžªHc^D2;Nè„Ñ}šZ=‡<„`šÍ¼ò[7v™¥µ gtÉJÃ<Ù­ôÖ(¾»bÌœËz3ÿyÿüÒöv‘Ûvß-ªË¡Õ€ˆß‹ÙvͪQãÁƒü”RYÒ˜-^ú>û2hBˆ$b]w½Áßo˜åÙÆ\—oÞ¾ÿç’$„BŠâÏü4¸ƒ¥žÀ¢ç¼/Þ«û€§¡KÙ€B§> MµúO'ƒæ-aÛ^¾«ÿþÑC€ä„í™?ØÙÚÈÀÐÊeø'¢ÅshŒÏç zF¶®£–_L–€l~Äxð¾ñ²7M­x\m³®“Ö~ëÅ-Yí2mÉ{].GÐiìp‡¼ð—)Šæ $'ܲôP¸¨ð]Ò ¿&Ó…NÜ?gÂÒ7^$½-,~—zhëÉž}'3ŽíH_—Çkv܉Ï-‹âYë·ä\>¢1Íæjjj±¥™a—oPy&”i3bB×¨Í Ö_Íç%Þß°æŠ¸Š¾•À²êÓîé–ÅûždŠÓn[¼3Æqä VöK¤Q=qR•¥ŽˆHÅÙ(ÝE)ûPVYVb¶™¶ãÏ”ÕCìL; ü%µÇ0{vã¿°a2lθ½l˜¼üA¬ˆn®oíä½*ð§þÚ@iOÜ}„Z¹" ïŠØ<®q;/çÿÐK ˜Ö“Vø?\àÛyK>רã_O§s+7jé»ë°dÉÒ…žëRˆ¡ãÐkFp”zù×ÑfæÞ¿ ¾]>ÊþÛlJ×ÎÓoïf¿ÖL¼‚)TÛoàO ø20ùK(;)A™ûý›è'‹ ëY—eCh1rwìHY‘i6èçãƒ~.]k|¨V÷¨ÚtDu»Ô¶ç˜>úu7 ÏÛ•+W|||ê{¨ÇŽóôô¬°°Ë²“×~&‘ªëšÓƉÅdôúåäý%ÃW›w,=òz žð@MZmwé?š…¡nå…q©™jèúÕÉ!BŸ%µòĤdTÙ»ºþDµ$Ô¤©m¥ñÂ=„”â`®+¡iŠ¢¤jûéncÃd0$4í`^ÅñZ•0 |*>Ÿ_ßC@5«òcjo,ØpþɼþöL&/Vª„"4Mo¸ðÔÞT äP>Ç utt¬ï j…„„ðx¼ÊËgyµÛtéùGî‡Å7‚ÉÑzá`®ko*˜Ñ§’õ1 |*++«èèè   ¼[uä /ÌíÛ^Íãù¼a@QêþXjjðçü!•Á€‚R (!•Á€‚Rœ”EMZDDD^^^NNN}¤âñx-[¶´¶¶V²>ˆŠŠÊÍÍÅÓÆ “‚ÓÆb±ØÊÊŠÁÀ]õªÑ4ÿêÕ+eêc@ùTQQQL&ÓÁÁ¡¾‚ª]9¦äååYYYQ%‘àM·ªÆd2ÍÍÍ£££•¬åSåææöéÓ§¾GAAA•—çää0 Œ& H¥R‹¥ü!!îé}*<ÒiðcR (!•Á€‚R™ú(tÜ–þ&>û3Ümm¤¯Ö÷2{4¿¾ÇPcÕôöPl8CŸ+"::ÅÎÊÚ~ò‘ôÒû8IÃ7 °µ²qúîz±¢U¥ É:0RÈçóù|޾‰m—!þûžæ7Æ’a1óBÒ±ñºH£7y™Œ|Û_jT˜B“ðÃ'äÙqAüàЩ"kkîgwS§Zí¡0̦ŸOeg$>>òMË‹‹üÖaÊ,„”Ó¢ûh3GŸy{íÐá;’g¥i·6ÏìÖÑήS÷asþ¼›!¾Þ6´Ã¸_þ ðñp°ë0ëXHàOã¼\:´mïÜwÒ/çb ëíÅTïcyÝŽc¾ìÆIˆxõHNØžùƒ­ ­\†ÿp"º$ûŸôÕú^ƃ¾_ÿuïv¦BC«®cV_K¯tëΜCc„|>_ Ð3²uµübrIŒ"oCvÏâbcdhé0ÀÿàËwDQ_%òÏúYu[ùD’g¿ºéé{nŒ–@qÈÏζ3/”=ä)<ûµÇ²wgX ø|ƒþ[âh yOþšÕÏÞ\(4ï4ø§ó)²S¢OÅéôå0­ÿß~ô›ÿ?´5Ä´d듾Þ3{öQõçµ°G—6|÷÷ÌùÿÄË÷eŠ^|îðóñ{OÏ{\˜ùgVŸ_OßúðôÏŸ-›¹ùIQ½½šê|L@!…™OKìœìµ€N80uÔ† ï߯G%¾¾¾Ú1ìÛ kB>„ÎâàÁí»÷äÐzï”'V)¼ÑoD"QvVÒ³“Âó³æH¦€ŽÛ;eÔš÷UÂcŸœ^lv6¸°¦¾4»x8$ݺHrûŽÈÌ$ñöíLÒØ[·3œ<\¸eërí¸±ÄI³ßÖØl‘(íÂL ß;ÿÜõW#ã_žšÌ ô_}ý#“£"T³õð‘V7_J‹:y4Öct_’ãiÔ¹Óám'?¦ƒ€ÃÕwœôý8³'§.$È" »Ãø€Ñöº¬øÿ¹oóõ’‰Î†ÍÙÍŒÜgÌê›sá¿ î+®V…NØæ­Ïç „Ö½~÷Úq`®S}|϶s×Ls5ÖÔhnÒkÁÂoÏœ~Z:ÑÄlë»t†‹—«ï4m¹ŸyðÑÿ’«¾¿8ÅѱöŸ]Èåà<é«c{ïZÍ^· O+W۬뤵ßzqkê €ÒuëÑ&âFp6-ºs+®Û¼ÙÎ/nçÑwnF·÷èÆ«ù•í2mÉ{].GÐiìp‡¼ð—)4ÓzÞ•Ôû?;àuÅè0ô¿ÕõÅþeëŽ Ý­yér:3#KÃØL_¾12ÍŒ!+C~Ú€ÒÕ×eÐo’Ó ï.q·±’i7éPzffvƒ»YÿGÌ¡d¥F^[׿ðÔæ#… MILß h§Ã—1±÷Mzzféëdš˜›°JSo2Ê¿‡¿óq³3ê :v7 D™94Hߤ¤q,[•^M}ÉÇèînvã^æýOÛ÷êçéarãafð'=Ü •xµÏ“U£Ø J¥8c‹T„Òî9º_vÐmŸö싺z‚¢äÄ’-Cšœ :z¥;0@CÏ@·yÏßDE—Šz¼®40qÈÃàêwš´v…WüÆ¥I”¡¦×QÙ¢RÙ Û½KsžK“âKfE¤É ÉDO¨W¶K:n¯À«Å§CbR3³³ž¯qgÑ4 À c_§” Ìú’aÙy¸qî]Ùså¡Y7]#wwÝ»—ö=à¹u·fVz-UË>>õ= TƒcÇŽyzzVXxåÊggg¼}b,ëáǕ߽ æK¼ˆç-ª[5¦mRþöE „êÖç/jT—…iã-©ÛG50Mïׯ•àñx4M3™•¯'@rL&“¦é*SÍW y>ŸÏ¯ï! šUù1µlÙ2..Î‚Š¡j4MÇÅŵlÙRÉúø>~*êèèXßAÕ ©ò;ÖÚÚúÕ«WÑÑј—§:˜—Gݬ¬¬¢££ƒ‚‚ð6È “‚¼< dº¤$ (*PãyA„šœ”E© „Ê`@A© „Êà¤,jÒ¢££óòò²²²ê{ ”ŽŽÇkÕª•’õ1  ¦+::š¢¨ž={Ö÷@´G½~ýºuëÖÊTÆ€‚𮼼<¼eŸb7nÜP²2Ôteeea4Q†ò‡„PP“†Eµð,BHe”ÝC‰ŒŒÌϯt?èJ´´´lmm?mH©UÃÚI¡c7öv šyÆW¯$>¦¨Z DÙ€’ŸŸïääTcµåûV¦qÛZTw! +  pTJ«ÅŠò7YA¨±PͦK²ö m5íb!Å`kê¶v<ç·U¾Z|Ä>FÉpi@©û9’u`¤/0ñùûMiþ ɳUnz|Ö³.+Èö,Þäe2:ðm£|_Q“Ã4Ÿ}5O\Ÿqzÿü¼‰kB›âÍôÕ3)Ë0jkölÿ¡×ò„òâà}GŠlÛ4k Lj¨ #ªRÒ¥¡Óiìwnüˈ<Ù3´(tçÌ~LÚ|cûG_Bˆ$|µ«N߀ՓºµÖãñF¬¼òFZº»$oTt`DK.—Û¬™–À¬ó°Åç‹II›þœÑßÞTÀ¶õœµïY]mG*zqJRO@¡´ûLš¸ÿQ!Ñ…}ÿŽס$/kΡ1B>Ÿ/èÙºŽZ~1Y…g¿öXòîâ KŸoÐK ämÈîyC\lŒ -ø|ùNö:IÞ“¿fõ³7 Í; þé|Š´R÷U­Xe§$ûîï“{·7Y9õŸöÇ]yæd’¶gþ`gk#C+—á?œˆ«á]Cj ªM®4¢Ð⌰ýÿÜ–Ø9uÔ"„iÜÞICÿ—>`kp\zBð:çGóGÿú@,[£èö‘ÛÖÞŠK ?>Iº{¼ßžx©¬¥’6y_Í~ÿþý»üŒÈs‹ þ6c_¢”"Ù5~èªøîk¯¾NŠøoi§ÐS· u¤Š×¦$u6æ8MÝâä¾ëù@§œú;¸óÄ‘R·òF¾‰DÙYIÏNÏÏš{ ™Π7–8iöÛ›-¥]˜iq{§ŒZ“à¾êBxì“Ó‹íÃÎ@ñ½óÏ]ÿw52þå©ÉÌ@ÿÕ×+lìt•+VÙ)H^ìX´.¥ï®û±±N¬ðH½t3ƒÐ ¦ŽÚáýûõ¨Ä××W;†};aMH¡šÞ9T§T³Á ÿÓ׼¹&ßÌíÛ—}wò·cB$¯Žìºm7ÝônÆšìæ&½~7¤?„á IDATøíÉãaE„ËÎoŬ.\®žóô_¾¶>t6QJÊí¢”´®!°ñã×í\¸Kˆ$âðî`›yõi¥Ímaæê»á‡¾Üê;RÉ«S–Ú®CaZg´ïßÔˆCû£½& Ô­Ü3ÅѱöŸ]Èåà¼JOJ_Û{×jöº}Zñ¸Úf]'­ýÖK–\”í2mÉ{].GÐiìp‡¼ð—åS¬W¿bR\‹ÓL«9‡£mæüÕ/K†P >¾çNÛ¹k¦¹kj47éµ`áÀ·gN?-Vñ;„7¦ù¬ËoßåeÅÞÞä]xbÓ¡ðBiJBJÁù6-4etÿ•š–.ßñešZ˜ÊO‹0M,L¨ô7å³l¿\8ÔÅÚP ­¥ÕÂzþQÆ[¤o’Ó4,[—Ë®¸#õQß…m á°‰îOv.Zqðýˆ =Êfy.ˆ8ü›¹PW б ¸Y ÊÌ©ô>Hߤ¤q,[U‡x|žl)Åæh€T*%J¬Xu§L›oþÜä¹Ädz÷È+=iJbŠøf@;¾Œáˆ½oÒÕÿQ¡º ’/pù—8B(Ž^'ß ¿ö‹[÷Ó)! }CÍ~ÛâòòKå¥îúBƒB@šW2+"IŠK"zB]Š D6,iÌ_sæÝ²Zòï“„Ìœ¼ÜˆuÝÙRZJÃÀHX,-Û¿¢ŽTñ┤Æ+e)ž×¤AYç¯éŽë ña1·×?àŽÕâÓ!1©™ÙYÏ׸³hš ¨2'ϘB#aaìë”ZoÆU®X}§\«‹¶¿tõòÑU=óñ?)"LCM¯?¢²E¥²¶{s>þ­@ †J¶7ROd_,üÆ*xãïwÞ†í¨)]­ž·íV\NaAv\ȩվ?žÍ“­"y¹{ɶié!;ïŒuù…1E ô‡.|/¦ÙÍæÍÙÅé¡û—n½_ aØŒœØõÕ¦¹ÿ»“SwÏüUß+èH%¯NIj½ôžëöÛãÌ7—f[•M¬DŠ Ä4›«©©Å–f†\¾ýül£¥ŸŠÈ£˜6#&tÚ¼`ýÕØ\q^âý}k®(53ZåŠÕuZt}Õ”åGîÇd‹%4aPP˜ÿ®˜¶#}]¯ Øq'>·H,Štf­ß’s5_6ŒÕls„”iˆi39`HÁÁ5‰RÊ|â_Çýõ/ø÷±12s¼ð¤dø¤^š²jl·a.t·0¶¾S:M)RæÂ6†µïÊ&t26´î½(¸—3[öe1ù¯£ÆWý{Z™µ¸ì±Ã@WQÔѧ½®Ú¨ÿ2­'­ð¸À·ó–|®QǾžNç%ðž5ýؼ¯l¶æç÷ÿ›é»ë°dÉÒ…žëRˆ¡ãÐkF(·À°¬¼"S³êN5\Ç{úë²/K,Ðnåê³é·‘ú€ÅÄÝG¨•+ú®ˆÍã·óørþ½ðÒ\TŠÒúŠë…††öéÓ§Ææ‚‚‚0åj,®\¹Ò¿ùÁ®šI#×õî:óÕ?_6ô¯&ƒqáÂOOOÅÕæK¼¨ìж¶vPP2Õ”l¡†à#öê+S©óíÛ·ÕvÜH~³S«*P”ÏEØÐT™Ô³ü!ª6j(À´]p=¹ÆRÏꥮaì@ 4Š}„úU'{(}~ø|>MÓEÕÏ4JcÀ`0hš®r7¿JPPÓÅãñ^¾|Ù¶mÛZÝC¨I¡i:<<\ù[—`@AM—••UTTÔ£Gð¸¸:|>ŸÇãYYY)Y jÒïÙ†† oRR (!•Á€‚R (!•Á€‚R<˃š´èèè¼¼<ås÷65:::<¯U«VJÖÇ€‚š®èèhŠ¢zöìYßiÐ=zôúõëÖ­[+SyPÓ•——×¹sçúEC×¹sçÜÜ\%+c@AMé(Iù7 yP“†?5V-eJddd~~Í·QÕÒÒ²µµý´!!„+eJ~~¾““SÕBBB>mEª°¯dëþ°á/{s¡ÑÄUƒdßý}rïöæB#+§þÓþ¸›I@ñý;·­HÖ¿ÍÛÄç_m…g¿öXòîâ KŸoÐKœ´ªvPݨU¾+ÙJC·Óø¯ºsã^¼Ì#„Тßx¶5ÔnÞBh×ßÿð«ù ’ðU.¼>óWMèbÁ×l!ì0tùåTé‡ã Y%ÑßCµX,›ÍÕ6¶üã¿ òÔ¤„ξ¿mš—‘v =ë^Ó÷>Ë£õõAu –í´¶/½!e”F_½–h9pxçfU<÷jÛ$ßý0á`X\ÜÃÝÃó¶Oðû+F Ü2eú9½ÿ†Ç½øw‘þÕa² @'˜:jC†÷ï×£___íöí„5!…å|#‰²³’ž žŸ5÷@rÉY|ïüs×ÿ]Œyj23Ðõuqõ}UT|ö±Ëê+‘))û†fT9 É‹‹Ö¥ôÝu?6öщ©—nf(õApí¸±ÄI³ßÖØl‘(íÂL“ðk© )ÌûûŸ[’v.-€ŽÛ;aðêŒA;î'‹Rïor 7r僓E·ŽÜ¶ßœœuj ½k씿â+|;´2¯¸¸¸¨ðíë ß ÏN¾7‘:vçØÁ¿Ä{l¸ŸuiEç“·Ä5õ¥°Au©ó€Bggd®nI"NyÖ~æJ_].× Ëô•S-CŸ‰•J"Nwž»rL;>WÓ´WÀâÑ&€4úøž;mç®™æj¬©Ñܤׂ…ßž9ý´¸êŽ)ŽŽÝ°ïüìB.çɱ]¦-c¯Ëå:îþ2…®®¯JXSžØYŸË¨v”—Ãâ4ÓjÎáh›9õË’á5‡®ªvªIãïÙœÍÖÐ2êð¢ß¾c Û3¥¯o¿Ù.`ã,wS- M3Ïïòöø±°Ò¿IV»¯ëjج™A—Y¿}cqûŸ³ÕlÞG·ý—?Ooÿü­\iDàÎ;6þ[¾ïÛºe3ž…›ßæÅÞÍjêKQƒjSç…!Ð@fZU»ítzZÇÌÂ@>¦©¥)d¤eÐtzz¦–©iKùfÄ667bHSSÄ7Úéðe Gì}“ž^±å‚ˆÃßù¸Ù™ u»€›¢ÌyŠÇçÉ:£Ø J¥¤º¾*¿}C}Ù3Õ ƒióÍŸ›Ü"—øxöñ9cå¡Ç¢Û±PU;HIJï÷3Íç\{W$ÎM¼÷Çâãë¾IR|JÁµÙ–¶L‹/v¥¤§eHKW1³0aÊ3L,L¨ôÔt))søDÞ½80 ƒ¹®WCƒc1ûÚû쌷R"IIJã´²2¢Êö_C_ $å:-ÿXuÇ; †€Â´êÝÛ4öܩǕg;úúº…‰ñéòÍ]š›zº †¾¾n~bbÉIIr‚l¶ƒi`h éõGT¶¨TvÂvïrŽé¸½þw¬Ÿ‰IÍÌÎz¾Æ¥0EBu}UEtª×jࢭÇ/]½|tUÏÄß|üOŠPLSZ$‘·Oçˆrªø€(ªÜù˪ÚA ƒkÐÙoóšþqkØŸH ´¼w&•*ÌÜ;°ôoRš—$?†–&Å%}¡~ÙMŽŽÝ5kÎMë_¼É-(Çlô`Ó4 À44ÆD%—ûËeÖЗ¢Õ¦î'e5gÿò•t—ïÄ5ÿ>MÍ/–¾9µ~ƲsX¶C}Ú=ݲxß“¬BqúÃm‹wÆ8ŽԊɲ2¼ÍÃÍKŽD¼-*H¾¹î—CI€i;Ò×åñÚ€wâs‹Ä¢øGgÖú-9Wþò]RT ¦Ù\MM-¶43ìàòíOÄW×—Õ £èúª)ËÜÉKh  0ÿ]1Ó²MÑÍC'£ò‹ ÞÜß±jÿ«Ê‹ÑR‡OŇGäÑPM;¨!¡t}?Ãúöº wÍ¿úÚ5ô×Ù[nÆå‰³ãBNþ:þû3y¥%/vþ´å~šXœþðÏþŒu5Ȥì&G ßÐl®¦––†$=tßOÜ•}ÔÌ6£'w‹Ü0ë·Ë19âÜ„àÝsV^(`¶UÜ—¢ÕF §)ݾkÏŸ hõxýx7kc#KçK.³†OèÃV›™{ÿ#ùk”½©Yç‰ÇšûíÝåך Àj;s×ýRV÷ocÖÆû×Ta²ëïw™§w) ¯Y+çáßž–ŸÐ«|ªi¦õ¤þ|;›™¶ñúî^[O'¶âÑU×—Õ CÃuü¸–×—}ébiÚvàºÌ›VÔ§€ÒºlMï„å=[™Ú ø5ÖÙÛ¾rû”À{ÖtÃs_Ùè úoIéRU;¨n(½ãO>ä"&„¦íÔo‡¿ß¿ê椿O/ÔÿoNwKa{ïùǤ#'÷Ö*]AÃ}D×Ðy]Œt­ÿ)ø÷ÎÉfTÙ†ßo‹„ç¾j«+0ïîÇ®_ ÙS”åÔ¿O~k4ÇÍÌÀ¦ïÏa‡tãÊbrõ}ÕÐàÇñÔê:v©mÏ1}ô× íÓ§OÍ9::*ß=BõèÊ•+C† ©ÕS ÒˆÕînçÄÓ¢NÚWŠ¢NŸ>íé驸ڼcé‘ו½ô^[[;((H™jJ6ˆúü(Pšr>¤ ‰]1ËÜ礶»ôµkÔý›.—[år±¸òI‘:÷C©Fô1˜m¾ ÎTsŸj ÕÁ;¶¡&M»T­Þ"ÜCAM—@ À€¢ @ dM (¨éâñxOŸ>µ··ŠÂsóÉ¢í“'O”¿ÔtµnÝ::::888;;»¾ÇÒ@ §d À€‚š8++«úÂg'eB*ƒ!¤2PB*ƒ!¤2PB*ƒ!¤2PB*ƒ!¤2PB*£ì•²‘‘‘ùùù5VÓÒÒ²µµý´!!„+eJ~~¾““SÕBBB>m<Õ“¾ZïÙ;tFÄÁ‘Z5Wþ4tòÎ!]Î 9é+ÄŒ!T µø-ò¿8D5Mu?‡B²ŒÊRb tôMÛºZz6¶¨Î»E©Ÿz&efÓϧ‹DÙ ¡ûGINŸ³·bŠW„Ðg@½gy\}ÇqÃ;K_GÆKròù|@ÏÈÖuÔò‹É%Y¹ÈÛÝ󆏨Z: ð?øò]¹Ûj‘wÏwwtóçã<’ÖϪÛÊ'<ûÕMOßsc´ŠC~v¶y± ú^¤¯Ö÷2üÆo¼ìÍ…Fãwœ\<ÌÑR(´èè=ÿŸð5¾+}6ÔPˆ8ýQà©Ç-\ºµaðF¾‰DÙYIÏNÏÏš{ ™:nï”QkÜW]}rz±}ØÙàÒóD’´dèè}úKÏüýM§”f‡¤[·i Snß™™$Þ¾I@{ëv†“‡ ·ú^ŠƒÏ>vY}%2ñšãѹçôü÷âßEúWO„)N8ˆªŠz °Í[ŸÏç m½VDuûñûåsáQ»aßùÙ…\ξ:¶÷®Õìu ú´âqµÍºNZû­—,9yÿrßÔó_ Ø{fí S6¥ëÖ£MÄàlZtçV\·y³_Ü Î£3îÜŒnïÑGUÛ °¦þ<±³>ëÕÉãáÎsWŽiÇçjšö X<ÚOï T{jCeg$>=:NôËðÙ§Ó DþÎÇÍÎ\¨+èØÜ,eæÐ }“’ƱlmTylÒgÿü~±Ù°ES[RÚvw7 »q/óþ§í{õóô° ¹ñ03øÆ‹î† ¨¶ÙÊú†úL:==SËÔ´¤Q¶±¹³îß„>;ê=ä¡XZ&n“|:f]ú/´踽þw¬Ÿ‰IÍÌÎz¾Æ%K=/4ƾN©}úÔØ\PP£££ŠÆ†j4æK¼¨ì±¶¶vPP2Õ>mT¡FLÙ€bmmýqðùüêžÂ$ä}fê|ª£BMÞ` !¤2PB*ƒ!¤2PB*ƒ!¤2PB*ƒ!¤2PB*ƒ!¤2PB*ƒ!¤2PB*ƒ!¤2˜,!¤2 &Yzms¡Óq[¾p¿6öñÑñºõ•ñsª#T&KG©L]ϡЉÛ¹,{$¿Ó<´c Ží¼«%w±Ï=1ÉÂfÖ%qµ „º( C÷­oßIÜ{·"Ím´ïÝz!‹0…¡·ïÓ.Î… „‡:?Ëòéî¦~S–˜«0俣6üûHƒoÇI@òòÖíû®òŒ¡$ïÉ_³úÙ› …æÿt^žlK’´f‚‡©PhÖ¾÷ä 7Ó«ÈÁErÂöÌìlmd`hå2ü‡Ñwy”È©^MGJæT'ÙwŸÜ»½¹ÐÈÊ©ÿ´?îfVNS†Ðg¯îO³;õpå>ºùà=@ñó[÷uºyôópL¼œE€N¼s;©uIÆP€â{矻þïjdüËS“™þ«¯‹¤¯¶Mò݆ÅÅ=Ü=.’ÆÝ.ìânÛ¹{‡ç7ï½£³ƒo¾Ôs—e `»L[2Æ^—Ët;Ü!/üe -‰8yäYû™+}t¹\ƒ.ÓWNµ 9|&¶\D‘Fßs§íÜ5Ó\55š›ôZ°pàÛ3§Ÿ—­ScNu…ÕœSÒàrXœfZÍ9m3ç¯~Y2ÜÏü ¦G …â»õh—yçVdZðíÇîßÕÝ,俣œ75síѱ4“Åãód¢Ø J¥„NOËà˜YÈÇÉ4µ4…Œ´ŒrÇÒ”ÄñÍ€v:|Ã{ߤ§W8æ¨)§ºÂŽjΩδùæÏMn‘K|<ûxœ±òÐcî  &HWÊ2ŒÝ»›ÇܺtòƳÝ»j0ͺ¹rï]=tõn¡“‡K3…ëêëë&Æ—¤1–&Æ&‚žn¹a3 4½þˆÊ•ÊNØî]a¢·†œê5uTcNu®ÕÀE[_ºzù語‰¿ùøŸÄ‚šµ\zÏjÓÃ]ðhÇæ;¦nn:°ÚuwÉ Üt6½}n|…‡,Û¡>ížnY¼ïIV¡8ýá¶Å;cGjÅ,[‡i;Ò×åñÚ€wâs‹Ä¢øGgÖú-9Wé²^Å9Õ•éHANõ¢ë«¦,?r?&[,¡ ƒ‚ÂüwÅ€ÐgO=¿åÑpèÑ•›‘©éêf!ÛB9ŽÝÞ¥g·êîf\ÃXmfîýkŒä¯Qö¦f'kî·w—_kfù: ‹‰»ÌÓ»Ð×ά•óðoOK‡OèUù‚[…9Õ•ê¨úœê®ãǵ¼¾ìKKÓ¶×eØ´j¤>N¢ &“¥#„T“¥#„T¬>“¥—…)ú `²t„Êà –B*ƒ!¤2PB*ƒ!¤2PB*ƒ!¤2PB*ƒ!¤2PB*ƒ!¤2PB*ƒ!¤2PB*ƒÉÒB*Ó`’¥Š8!˜,½AÃ@‰›ºŸC!YF ù|>Ÿ/ÐÑ7±í2ÄßÓ|Ì0¡ †ÅÌ IÇ0š ÆC=“² ³éçÓEÙ‰|Óòâ"¿u¥)<BŸµžåapt;Žù²'!âÕ;P˜á¼(îÌC:[…æöýf¯žßÇdèž7ŠïÿعíükE²:tü6oŸ¿+æÎ94FÈçó=#[×QË/&ËbWùœçO”]§Ê‘ÐÉÇ&µ³›p8Q $óÒ¨' Ð Û¼õù|к×á^;̵c*Èp.‰8}â•Ëì¥#Û¶ä47îáÿ㇜äµ@qtì†}çgr98O¾Hžóœ[þEW?Šß{Åö©â ãúŽü)jÐæõÃJ×d¶õ]:ÃÅ€ËÕwš¶ÜÏ<øè²°%ï‚Sí««2­z¹Öær¯"É|íß/„T@s(Y©‘×Öõ/<µùHD¡¢ çtFz–¦‰IINr–‘™SaóåDþÎÇÍÎ\¨+èØÜ,eæÈ·/yÎó æZoÖqü8‡´ íüf{´,³3MÌMX¥©Œ7²¼êò.´YeZõs­+Ìå^E’yåß/„TH‡< ®~§IkWxÅo\˜DUŸáœ¡§¯ó.)¹4'yJINrŠÉbJ‹$òåtŽ(§Ò†CÇíõ¸cµøtHLjfvÖó5î,š.ó}]Ůޢ\ë’˜¿ç­Šò˜Ø+vÝ¢ƒqeæ&¤IñòÉ&'$=¡^É[IÕÐfÕiÕkȵ®LÒx„êºÿ")/¦YoþãYµÎYm³¾¿yٱȜ¢‚”[=,ÏIδlgStóÐɨüâ‚7÷w¬ÚÿªÒô#)*Ól®¦¦[švpùö5N¿TŸk]üxô)£¶ý¹nÛ–a±K¿Ùü¼trB¾gÙŽt±8#t÷Ò]q®>Þå’4+Èß^eZõs­+“Ë¡z§þ¯8–¯ÿ÷뎰ÆW—áœe7k×ï½~ñ²1kÓeB×Xl6€ÒºlMï„å=[™Ú ø5ÖÙÛ¾ÒuyLëI+ü .øv63mãõݽ¶žNìGTu®uòöú’iÛÙs¶ÿЭƒ×cÉöéÒÍÓ~¹“+‹mìnú„-êieÞáË]Ò±»¶L0c(Ñ&@5iÕkε®L.w„ê[#H–.¾æï4ƒl~²¡—†jþXÒWë={‡Îˆ88R«¾‡‚PCÑ“¥Ói§þ·‡òžäiÃM¹²fÅqæwi Ñ!T½:O–þQzî=š· ÿ¼ço(açKÿ^Ú£¹»—©.Í»(ó¾šG‚PcQçÉÒ?C×uήËsêu Ò¼û_KRçHj,ð¼#BHe0  „T BHe0  „T BHe0  „T BHe0  „T BHe0  „T BHe0  „T BHe0Y:BHe>‹d顆“¥#„TFÉÒå„#d©3oŒ4z“—ÉèÀ·µëóãÖB¨iSÏÛfÓχüÚµæÐ#„³ú8ËS>©ø„Ýç«Èþ¡ÚÆé^íÍ„†V®ã¿{o‹_ïv¦B#Ûž3£Š*µ\EÊñ³_{, ywq†¥€Ï7è¿%ŽV*›zß/*¬¥Æ÷¡F«¾N—$O¼î|dZ59À øÞ¥H7£bCþpüŧÿ²Ä¡Ûホ¹ó‹Í­–žÊ¬p_`:õ¿¢Ò¤â¬W r€»Ë´Ÿ¾l'à43î3¢—>¸Lùa µ¶FsËA#Ü‘Ïã*d¬1åxùÚÊfSG)Ipb–,)IDATÉÒe)~w~¡QšT\ap ´[ÊÓ€›­ÑŒÇãÊ—³4XRIÅ,£5¦€È¦ŽRR=~S úàU¦§(BJR¬+›M½ÜZ!eÔóνjs€WrœÑR‡OŇGäÑÊgS/¿BHõ=[ ÒàU§§Þ³¦žûÊFO`ÐKbk岩—_ Ïò ¤ŒF,!Ôð5ädé¡F©a&KÿHU¦7W¢!¤Z 4YúÇÁØPýªïIY„Ðg BHe0  „T BHe0  „T BHe0  „T BHe0  „T BHe0  „T BHe0  „T BHeä·/˜w,½~Çú ° òz`}!ô9ø?Q Á%ÜÝIEND®B`‚pyspread-1.99.0.1/share/doc/images/screenshot_print_preview_1.png0000644000175000017500000002533513604423070024617 0ustar andreasandreas‰PNG  IHDR0ñÃZ| pHYsÄÄ•+ IDATxœíw\GÇŸÝ+tŽÞDTE±b‰¢ØbcïbT^[bIbbL4‰šØ5‰Æh¢ÑX{AŒ†Ø°@¥wi×vçýãîèÎ[ðù~î£<»3³ÏÎÎogvno*!!aÜG{Amsøë™”פÏ ­÷m;ƒ o5Qa€j52Ù1ê]ÔάG4ÑD³ŒÉ3sië=!*ì _¹Y‘¥T#)ù—Pµ0k“M4ѬÁTdÅðÍ]@ÙC!ÊÝ@J´Ê¤Õ›µIƒ&šhÖNMÅ‚Tn"¤¤ÏS)´‚IXJÝçÊLh¢ÙüL P¦Í—6kÌË4,°Ð a)BSTyq•¦¸‡,.´8m)«Ä¬j;šh6?³ú45æ¥(€öNf£û¶¶15Ðð¤r&-§àØõè§ñ9Tٔũ©ìC åð–Rþ PΤHåÛÑ |óÙ³Úw§_>p?ô5zÕôMeVw-(Fó¨Ùƒ;vkcM©Ç“:ž“•ñ’Ñ]ï>ÏØuîB¡Öt©^U=dUŽdIÉ öÇà~Ps¿ÿ§8YÉP¶Yš´QÀ”N~ƪ SÈdi©™®ÇÝÌa*I¬ºá©k’#§ÀM¯š„Y}U}V’LYßKÆtus4ƒ PÕµµ¾n×oÞB_%´ê–[,Jåà·ZÔÉH37UµóàÂõ÷·‡o¼Shîd?}„K{Ae‰å™»~ügs«-týßù)¸÷tgº¡NV,ŠÒóxç§ÿõžáL×Í+4+šÕ§©&/!ÝÚÚ(Õ8oë¥í'Ê,ÈìÞ󑳿=íZ˜wkc ꢊWfÈ „ ”Í0h[Tþà©ÚΪ³4_“*©d–‘Å=IéiânhæaI=I5›Ô¡‡@]¥¯“¾=ðÊ{v‡tîáßï_*(³—0ŠÌ¤¤ýâ"¥†#'tfNð{½Û·Øï¬(`‹KëvêÕz”›‰µ›“•{ÿa™Èבù°>N^Æ<&+-óܵ—áYz#ÊþôiÛöÊ-^ïöõûïíõ÷õgÕäUPvS};š øªÉ~ðà“«¯˜ò.ÅŸ‰Ì/ œ¹F4+ÙøóBï maÅÍ¢Ò¼Ø]œ”Iºµ‡¾ê„yJ—"Ÿ¬ Í¡ÍLº{ØuM‰¾šË¡k¤I³ÌÆ]‹¼àç…Þs¶†U£ (; Ce]Ïê~ð² üYâO!äq|FïvŽã}Û(wÙ›•écK ²Œ, P»*[ÌÞzEÙ2w/òQn™³õJé«êC›¥Yò´M€â;u°qá›—õ C=@a oÜMK‘(=SV¬c¶ðöƒÌŒ"xž*!Žú¦FBòuõBÔ:/9.%à (J`iÞ£'Î »,–0p³÷QLrÊÅxII½žàÒÉÍÜÛUxûaÅ¢H‰@€ÔÖ+¾£ug`3ÒBã$y$%,ιc{¾2Oé’…yW6Vœwõ²X¢î8q4fBÙ»Ôív-òž³õJUymÍ u…³·\©4oª8O"ct…<J¦`~9ýøq\F{'«[‘I@ÈÌ¡t<"‘1©â\ èÒÇ+ó=$E±@”³¹E±³6‡þ²ÄŠÕ8ks(EB(  8Y³6•çÍÞ?{íû(ªäôÕ­[y#e¯cù½êÍê!ˆªXÕ˜¨ÔqAš{êØ¿— - <º¶ìh1¨½AD¦T@¢VK~¥JL¡(J¿bQ¤´µõŠÈ]žfy†ºJå(ËJsO ¿l¬ï`fÔ©›ë`G‹A팮ý›ËråiʤÔZøe‰J³¶\BÍÞry÷â°{±Ï¬Í¡ó²À&‹óZÙ™?.E=ŽËhikò¿Ñž.EFD§üræñü‘$~M€(¯SA){¡!@2sóå=K¨¼Ùt™(Ÿ1 aÕ]i37©b RIbU{fK×[êÑa‹w¨Ly¡” MŒ„4‘0eK·h9ËYråIV\¢TÏEáïÈ+,RÆ&ßȵègo?¬UÖ‘x…‘™È³£­î³Ç!)ŠbÊ-¦F ©µW…ñi÷ ,½,¬û9¦žÎ·ìßR9³CX|ç™-%WždÅ'eé¹¶ôwäJäÊ1'®‘ÆL¢¾¬37_¦JTCQi”8óuþvìü‘ž¯ d·#“º´±Ÿ2ÈMȧ't+”ÈÇ¥+›Ô¹Û1@è2·èbAR*-* U׫ÏÜ|iÏ¿™›.•Ûþ–˜ÅmÔýú¹A½ƒ"ʧÿ’Ä¥{)U¥ê™E€HïÝMô2µoëÛg—üÚß×~g‹KV$'_1u6Ô¥•™_Vý(êÐÃVZðDZGyï8÷ò÷êG+²Ä¯î>Œ;ŸÆVV”ô~D¢—©}ß>»}ä׎_Û›P+¯HQÆÁÓ/u8ùŽî;HÝò”7"yj—°À¡k¤!³ú4Õ帙ìÓ¹E[Gó¯çô7Ö*Kòèù£:åÊ€ÀÓñ­Èdåk©f”פÏÛzOÈKz¡@Y(ŠPÊRJ›¤Šíh6/“vóí³¬³0õæ­Ï®ç±\ñêM›TµiªÑ‚RD|ÌÖ¥»›MAiXw¢R:sW!S¿~Œ:–üü Š{H¢òEý7”1KÒ@uÉÐlz&Ý¡W;»Ô¸ð$ ma7°µùwžç1@¸ää5‰Z—uÖJAÈŽ“&öogcn¨+àIäLZvþŸaOÇeQÅ¡LY,Hå?êÂHñßeL *ߎfÓ7Ù¨gb·þkÞ50yFZê‘›Ïϧ•~c‹ N¾Q³ú4ÕjAµ…%äaLÆ£Ø XšÐ,ÅRDÕ_ª“(;d-ÿ{Hõ·M•#¥Mu€R)h6AS–“väï´#¥ö¼Ò¢Ye›¯]^¢6 ÕtmIGZEÞò¯Î)÷³Åš­Ñ$uÏ‚&šhV4U”y†T Œ (BjaÖ# šh¢YÑ,+HR,Zåû?Êg‡šÍzdAM4+˜jT‚Ü»ÌÑ‹f”ýé‚ Ú‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ¢±ÉÆmìð»˜ÔœAòÔZ$k ©©©©©™¹SŸi.§2•”ç¼à\ÒÑ)T5E1/¶tðŠAÊQ§’n1ïlFNvfÌ?[ÞIú~FðoI¬¦üB·’ú Yi}'¿eó}˜a7nò±ññæ÷z8ÙØMû«¨Ì•‰Þäc?bÕ¶`'§Î#VMa@ÔÍ‚óó[š™šZÞWFÔ¹‡&Ø˜ššš™YÚµíõÞç“ÅEhÿ_—ŒèÞÚÎÚֵǘÿz!©!;‚4êý ©\Qäá!÷{¬¿•’²oŒ^…dòg÷ÚÿôøLÞÁ¥ëÃ$:ïþ|uu7ÿ±Ù99éç8—qA4þ`ZNNNvVÒ£¿?´9¼h²Z°ê%Ýð;9usæmaÏ_†­ïzoÅÔ w¤5fG&@}É&^Þ´ó ÝÓ»».ßsÎgÓºXéV^’ ÇÜÕ<,tuÌ:Oã™÷ìiJíB阷½rvû;ÃóT›TÄûõßv‹6Ìíeo Ôwðù`ÙðW'O<”×”Ašüš“”À&ìbµ“¢…†ÖnýæíY?Å¡`ÐV¶V¼*³P"S‘Rª”@G ÃT?•SùçšUÛNÞ~™‘'ca¯Á¹,ˆ@} YJbŠäŸÝÍ?,9ˆÑ81[]vüri"ÔIt‹ygï|å%(ÞÀD€jÉ×:@)—À«¸ƒÛ»ôÃ=vØÙÏÙ\Ÿ—ºkdcl©.•žµ­µÁÀOïþ9©ÂTnMÙ„ëh£ï MÌM©øg‘y´BdEV k``(`Ä÷|ñÓ­Š“2¼¶3zÜÿößÿ-“äÄß=ùíìÕ§ók›A¸Œ6I™ žg{zbK³r³¬¼ÖÓ¿\j}nF—ŽnWÞhç×MP1;í<í—Ë-/|8¨} —îcVœ`ÆLõ1¬uvá0ªø[¬´í ‚¼Õ,>šv§;„C  „C  „C  „C  „C  „CÔáMÂÂB±XÌãñx¼ª_•C¤ Ã0 caa¡¯¯_›ôudff¦‘‘‘žžEQU××åä­ƒB‘H$™™™NNNµÉRAòù|}}}ß~A:@QTaaa-×áGªR?j¯ºMêàHAêJTƒ³¬Â!PÂ!PÂ!PÂ!PÂ!PÂ!ê´ÈUsæÅ‹yyy¯^½Ò¶#H“ÁÄÄD$¹¸¸4b™(H€/^‚.]ºhÛ¤‰ûòåËV­Z5V(H€¼¼]¥2&16,¬-Šýg’’%’Òû¤~P;Ú$ß»—©T$w÷þëÖÜu5wÄ&ÓhùmGŒu´sõï³dÒÌÛ?­þ%¶KÀð–Å«ë1Ïö~¹ëN¦T*¾»ç‹=ñ^cÛ—=7œÔAꎠǴnÿ}÷ñ¡È\IöýÝmî=kB; ®‡Útž¨ønó~Ù]ôÑ—]$ÏÊÖÊÀï“;'šW_E!(T¤Ñ( G×Ý–R‡£{÷-GÇk8£Çýï–í -“æÄß ù.èó3ùÒÑ"3*áYT^å“`8©ƒÔ7ŽŽ›‚d~nk¡ÆnJê’?[^\>¤£³«WÀG'™ÑS½ +d¢Ì/xßæÌd7ËÊfY¤:­8òÛ¨´/Þ±9ÞAfk:å5éó¶Þ¶XÕ˜4--ÍÔÔ”Ïo£ÜºråÊ•€€m{4IŽ=êããSM…B‘““cccS}9‹fD…äf‰ o)(Há(Há(Há(H G‡4 G×ø`8:¤~`8:€áèz€ë²j G‡p²"‡@A"‡@A"‡@A"‡@A"‡ÀYVŽ©+øµ‡¦ÀptHýÀptÃÑ!õÃÑi©"õÃÑ!H³‰ ‰ ‰ ¢QI²Œ·S.ÝhieëÜ¡ÿ„5§âdÕf)CCÊ!ÚAwaÓ¿v–ú:ú–m¼go¿™­n’)¾ ìÖÂDW¨gæÒ{êæ5»f~£÷¼ïŸJ‹3ÓâníÇþ±`Ñ>\!á<²°]»Òz­<|/5;!tûÝ•#æ’~`þø-â‘ûŸædFüÐûÙgœÊÓ #²Ò:V]'ŽêÂÄD'(× W¤†nœîÓÑÙήe'¿Ù[®e0²Sïû”Š!·í×2æŽx¶Ò\Lôæ-F­ÚºÀ¿SK;‡¶}§ýp3îÆŽ ?g;Çv¾ÿ;ô¢’nW.GªF8xÝ‘ 3ý::ˆ ,:|Ô3ïæ‘ &áY”´Û„ wìô†-ýç´™ÖÃÑiæ½C'îvïå&&ú§Y³À”ß#bcnü<&×ô _cá𯔊!·pFs¾©4—òò›¢ûmºõòæ¶žQ_½7dmÒȯG¿¸¶¶ÍõUkN`,¤¾¬ðžèzx¶æð݇hõèð/áiEAüå=ÅwåïÜ”B ¨£XÚ·ó_÷¼÷'+†YRŠÈㇹÏûbzgs]ëžs×ÌrŽ8WæÚ\‚Aº› õì}ÇúXA+‡¹ õßÓ›Žz[¡#ÄptHm(z²cêÿB;¯Û0ÁšýÞ+wÌc¶zÛé [¾{ÐêãÁš Ø­©gHqfZܽ?'å¬ \x2“›™.Öiál£:ϱ¥#ˆÓ3kxº¬6el"Ríà º"‘:$_Èg˜"õ àá㯓/=uøý¶ÅÃõCGpÚx;½H^tu¹à;ÿq»ã48+¢±!+Å7tè=ml笋g#ä@[Z[HãÓUgÂ$Æ&‚…µ]!†\³ê\ÒØÜ›ëGÞ@­é)S0 Áõ±š¡tüý·â·_~º`@ûÆ* ™š»iº¯Ÿgf¨Áƒ#ÍŒì|I°¿éÒ½¡X&>CÜË ª©f†º2Ó¸9(H ‹#U¤¶P”r¬Æo6(HáMSLôæNSŽækÛid¸'H6~Ç0§÷öc,ämDK‚, \gieëÔ®÷è~”¯” í4ÿtüŸ“Í©z‹ÑìzRU8:’ÿìèêñ}ÛXè™8v½êDlõñŠ{HeÐÌ´ø»Î5¹¸"h3®aŒh‹*ÃÑåœûõ”޸͞g‰Ÿ™û&ŽßüTƒÁ¯80d¥…æã{é$DF”²ÊâC>Ý­•½‹çÐE–t³7MuëÊ{¸wáPO;;—®£>;—”n·£l`J\¹©šªÂÑQfö®ÓÝÙD×ÀÎ+höݧ÷#åtDû‚$²¬‡ü§h×µ£aù}ŠgÛg/¼`¿âÔÓØÇ§>²¿~òAI]Èož}ìµþÒ³¸ÇÍàúpc˜¤\p»ùNÚ?9¤ R:] ¬$=bᆱºƒßõjðàZ|S‡Iøq¸í”nëÉ?[ؾ|EdÈñç=‚ÿhgBÉ;‹?~ïPÀ3õNA÷ OÇw4§:Mí¹ñ@d*; E5‡ã¹.¼´P'‚4'Ôáè®*ÃÑÉÙ7Âvú))PFî³wŸ °Óä^ëÏÉÏ.ë/=¹ýHd…§eVœže`ç RU ßÖÑ®D³”ÈTŽŽè@¡PàTÒ@*„£ L§…HS”þà×AÞ÷ýßYMNj}TGëXvšºa_ü¶/%•‹»G[X›¤$çªÎ_‘š˜RÃót¹àvRk* GW Zת㘧{¦]¹©Áy­ €2²tN«ÿ¾ßq£¨Ìv¾Ûð‘®7øâXT®¬(åúÖ¯——l9Ê·+Nê USE8:(<óåüïÏÞ%•ç§Ü=´n×m“^}ÚjðA‚à·™¾dDÑ¡MåÇo¼k‹oÂ׃Û9»û*ÑkhPPM@érÁí4èiVTŽNß{âÐÜßçp51°ê8ö»$ŸÎþ0´>ߑג¦ŽNöAÏ`²õî&ïÆžæê½öäÙÆ¸X5抷H3†¢(å“QLFî¯ÿ _5¢šÄÍ)›~bÆ“Ò ¤¯žŸ^»öoÞQ=49éŒ Ú…ã?P¦-ûöÓÿhÙ°¥Ó(kÏa«÷~ö޾¶}BÍÁqAmîüó¹`m» oŽYßXHí)þj­Ñ› ¶C€.N:B~v¾DÛŽ M ñëB]A'‹F,“ëCÖ7ƒ»½éçïûwŽ¿Æµ<Ú@èê¶»ÛÑÁ´‹EAÌóm·ýòÓ¥{Cq]V¤ötq²èè`:××eÕ¸´&‚Ô|†D‚D‚D‚D‚D‚D‚DQ7AâêRWꤚ:’a4¹@,‚4_j¯:¼©£P(ŠŠŠ!Ê5ê傼EB!EEE Em—rªƒ ---Åbqaa!W~UA*…a†a,--k™¾‚Ô××oÑ¢º¥ˆi 8ËŠ ‰ ‰ ‰ ‰ W Ð?\z™–{ûeº¶Ñ Ý[Y»Û™Îó­|‘‹/^äååeee½a¯Þ$æææ"‘ÈÅÅ¥–éQÚáûKO$ ì›?XÛŽhœO‡o¿ü´â )/^¼ (ÊÛÛ[N½QîÞ½ûòåËV­ZÕ&1 R;D¥æþ:ÏŸ} V¸[ÐkÆÎó·çååõïßÿmx;ÚÓÓóêÕ«µLŒ‚Ô·cÒ߆¶¨ävL%Ãò¬¬¬·§j?,GAj ¢™_Ï(ŠÁAF"CPNŠ $;¶ïjôcÕ†j^{®ñô Üš0!òï¿Ëmoéë;æÔ)ººÈ„M¤ÖP¾yÜèÅ&''·higj_æÊÞþçY“ëŽļ÷ž :zñ7ßP<(Ì0D¡ø÷?Ž5êÄ Z{Á5Ds;Ÿ&«A2, P±XÂjIÕÿ,¨ª s20P÷åKï‰S.\–ò Œzþïñã'ÆŒq옖5ÉÆnñízyZÔÉ–Ui~…ßCj =+`õ ƒIDATÒ¨H$’ƒgY‘JeÙÙ¹¥?‰¼qW'êZŒ\~2 @/6Ö{âÄô+W¤¥sÉäòôððÞC‡êEE…ŒÇ*oò\*R›KYûV‚Ô„¶‘>EEÒù fž»x<==“eA*•åd¿*ý‘J¥êÄLzøÎE#z´µ157·sï;î“s`Y`™¬}£ÌÝ—…KY`Y`^?ÜئEŸeg“˜†øFª,_Uó ÐOHè?~|Zh¨ÜÒR°cݹ³2 ¯cGÓß~£\]ÓïÜé;x°Î£G§&LPçcÄ·ö, ìëfgfddjïî3õ‹cÏòØFÒ] r«9Eí@Aj –FùI$ ‚gú½Û—2,˦g¤gegå½**ý‘K,!,a3Î-2jkj¿µÇ¦$ÆEì_Ü&âãA£¾¾•O«nZ,!ŠŒÐ5#‡~Wt8dý@[ºÖµfbΟ÷™<9íòeYv6Õ§elÌ[±‚öôä¹»¯]«ca¡?h4??õÁƒ¾C†¼ ">·ØwȺȎKÜŒÉÌJyòÍ»‚Óû/å6òeÓ0(H­AcÐ*•JçÍŸî7¼wnQ†•­Å¼à)ëÖ¯ÔŽž ôG¡` !DzkÛÊýô¬_Yìçj¦#гî0j;-C’¶|¼÷%C@XiÌŸÿ2é¤ÓúS‡–v5n°—•<Ъk  (ŠBd99ÀìÙĆ ôô >ûÌxÝ:¡¡¡444ëÛoYI~>aJYŽôÖwËöÑs~?¸j´§½±¯cêÜ}ìŠÝ_Ž’³¬‰®®®žž¡Y‹.£?=¨¿+ž­ïeî¿|Swk‘ÈÚÍyH’røËæÜúqþ`G3S›v~Áû屄6'b×ÿŽfƦöÃ><]¤:¿jΤ¸j Rk4¼o”H¥³gMöÜ#-'¡°°ÐÚÁ¬ÿð.Þû·heãèb]ü‰~»|Ùg,!òèKW’ZÛEXR˜øúêß½üO&C ¤èÑ“‡|é¿7äÇñ-u§¯ªjÕ| avî$B}}¡‘‘âþý̯¾bX–`ˆB¡,G}ñr¢ËˆÀ®z•”'šx$»°°° ?3êôrëSsçïKdTG’…Ÿ~Ø{óõØ´—§çðö/\{¹&f÷”Q_Ç¿ómèˤÈ3ŸwŽ8~½ˆ0q{§Ú˜1lGx\FBøwÝï.ÿÕ-‰ÊÝšôXAâ,«Ö¨ë¥ªÈÂàY}z&¤½¬&Í+>\´º{ž„&;3,-Í©2ÇåYX™‘'™Ù ± ¯ï_¼ÁïòѸ^–t½SQM!µ¬ž»»n×®|>_ èxzêuíšû6 ÀÈdLR’²&+3 ,¬ÊZy„fíÇ~ôk·s×_ÏxOD@è5oÍ$s ó”€®_ï{’ÌøÈþü%¼Íâ›Ë¸Ðƽflî ˆ:¼ûzû%÷æõ¶§ |—­ñÛÒc÷>éÖ½¤‹¬kÍT Rkòê˲@Cbrl5iîߊ\²`U¯ÞýT™›’Ìô †µ-5/ÏLϦÌÌM€%,¡¬&ü°Ž·)xôxöÐþùžF _ËŒªá‹Ê!êeÚèŒÖ®IBCer¹y@€Ë÷ßÇ,^œ"IK#ÆÆªdf–f N³àPqÐWøìàê6¿ù"=OÆÂ>C_±  Df&Ê ”@G C˜´ätaËVöeÊaRRŠ®.ic´¤äČƋ«ž°ª/8dÕ5Žsª‡¢¨®]{E=Š•I+ýDü÷t~Њwúûg¡]}ûÛÇžù+¢¨¤6ûâ‘+…½ûš©ú2ÚÚçËãû¦n ØžÝ(s”õ¨&) òó™W¯tzöÔ12’„†Š×­KûòËWGÒ::z:IRR€¢X†Q–C»úpˆ 9QX±¨˜= _s]}êA‚87ïuäwïV=d-ó ¯´hk;YÌ‹d¦t!´•­µÿθ¼übòRwB€Ô<PûV‚Ô 6›6=ȻﰗQñR™´ôG"•<Šˆš7ç߃Êdt›ûÅ{ò=³æn½U$-L{tbÍÌ¥gl毙èL«gYÓž+ì_ Ø7iôšÐtņtì×ïFX˜]ÏžÔë×Y‹e'N˜PðàAAddääÉ‘3fDS|¾‹›[|f¦ÐÔ”BÝ}3™ùyÚä¯OÞOΓÉ%9q·ÿÚ8÷Ó“¯Xi¡„èèë 俾ã¦\­Ãò>!t›Ài^Ñ[m¼“[ô:þ¿_—|}¾nûÞ,¯»ëï¼—+-ÊŽ»s|ýŒOBòˆzÎ Ùô©é®Z+fΚïÝ÷Ýø—IrVú"2Nœ$ÍK'ù™ôÒEŸð²åz8°ðßô×Áù–×> ìâÔʵÇô-‘WŸ:¸¼»~qËQÞïÁÈsáÁƒ+-Ïõñ™ä¾UP×Jzôh¦Í­ˆ;H”{èË0ÊY–Ô}û(¯¥›[J^Þ©tÜիʃ˜úîüÉe.÷6Nôr±¶rô¹ê<ÌôÆtëk?°>7µ³½mkßåán» JŽ[Úõß”óÌ=G>´]êíÚÂ}øšûžÃ{éÊiÚžcK­Î-ÐÆ®…çˆe+ÆL÷1(_D]O¿"”פÏÛzOØ`Õ€¦…Ô™žkþ[5†aôÂ0Œ\.—íÙ³ýæýK2©üã¾33· iŠÇã B]]¡¯½÷°y4í½ö¯›«G—Û~éÒ¥!C†°UÔ#“ 4MHèÞ®]üµkE¹¹*Aг›[|NΚsñ¢­­æO¢AÐ4}öìY??¿ê“->šv'u´!¤¿‡dŒT"-,,3fRa‘äìé¿ ¢ÂBЦBÁ2,KÐ4æiíBÓT CÖÊs C>xãñã^}úP Ã*D¡Pþû49ù¹ž^Àùóºææuí‚ÞOÀð>ŸÏãñ(ªú/4K5‡®¾”š<;nÜÏgΔÛeÙ±ã˜Ó§…ÆÆÜW#  › õ{­¬"4Góx¡PÏÀ â^ ýê²ö4äyBáðãÇÑÔ ï!›õî!› ØC6<,,KQTçu8¦,ëédQq—©©)˲EU5¯Ó< išeYSSÓZ¦GAj‡öf›Ï>X<؃ǣ€4ÓØ~aYv󹇎fwŠD¢§OŸ¶k×®y‡6dYöÙ³g"‘¨–éQÚ!x ûÖ ?9|ó^¼XÛ¾hO' G³ùÜ+îruu}þüùÝ»wsrrÞ¼co SSS‘HäêêZËô(H­±hPm» eZ·n­m8¾©ƒ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ BõêÜâ£ÚõAP 2*ì ¶Ý@àÿ ¯Ã­ÈëIEND®B`‚pyspread-1.99.0.1/share/doc/images/Tutorial4.png0000644000175000017500000017607113604203134021135 0ustar andreasandreas‰PNG  IHDR$rºÈ“ pHYsÄÄ•+ IDATxœìw|EûÀŸÝë—\ré=!4 %tH¤@QŠØ{Ã.–×òúbû)Š…*(*  ]z'tH ¤Jz»\ÉÕÝùý±—ãr)Ü] ø|å÷™}fži;ûìÌì50¹¯×}€ ‚ ‚t6¤d;Ÿó´¢GÏú§3ƒ ‚ r[‘}`2MžS—ßtŠB€ûD'¢ ˆ"Š(¢ˆ"Š(Þæ"Ï3"zô¬ìëø\°©–ó´Èõ¿„²C´GEQDEQDñ_'šjóù^`v¶áNf‡ŒSm_´GEQDEQDñß)rð›@™ÏN§…HXŠjŠF€‹„"Š(¢ˆ"Š(¢ØýE ÐÌŸ±o—%h X`) ÂR„¦Ì@ÀËÌ–%Q‹®•t]l+EQDEQD±û‹íëÜ0.Eôóœ:<ÒßÃE$àéLE½f㑜ËEõTsMË/8~´w¾¦ÆZ nÉ‘âŽlĶÂQDÅÈó~|nÿ'ʳ+óõ7Á.6dÀ‚)ÃÅ û‹u„öz|î€'ʵÙù†6âò¼æXtôÝ©êPDÅ\hO§í¸@Ð=£e­²áúPJH_OŸ{ BK ))ºá÷Õç÷¨Ýg>œÐÂÛ4¢BÈ}' Iqq籊êºÃéù»Št €K@ˆ‰º Þ>ØÀt›V@E»@l%pé £ŸøæÀõq£µ¸رIaœJ|¸ï…üÊ¥[ÉÜIq˶ffVŽŒ7Ÿ×?üÔ•rÊ2™¶Ÿ~à6ÓS„E€–b[á(¢ˆâí#ò¼úH€˜.Xh~Ö ©ºtyáQM|Zÿaa÷ÆU|RÃ2õëV\GÐ|Ÿˆ^/¦…<6ÞXö[QYS”Úœì¯÷V” ¨|úÀiþÌñ¿ŽþXØä5eƒyÏH‹è'ÖìÛ|j«Æûá©Qý¤æ‘êºyb6@ñ|zZÌ—5izθ;v„Kã¾­'¶6x̘3e’‹pã™Mõž3Ò"úIl9½EåýÈÔ^ñݦPDÅ®›.{q4,}aôܯ´—*ÐÛ•[ŸÐgÝ^Á±¬’%[HfQÕÐØ™©QÜ© /YÓd®š{^„Ò4š-{aô²G/{q4'B–½8zÙ‹)Ë^ p]‚"Š(Þ~¢H"€Ñ¨6µ< lã© ÕUÚÆÜrð ië¤XSuAõU#¼=¢\(K”g*Ê ¤)©ë#M6Ä¡~ý\€­©ÉÞ~£BË·¨½G†ó)óàÔ,)ÊbŽ¥ƒã‚®›³  -(MWzðñO «Ø¬§DŠ)Fs$³^]OŸÓø ööZ¾Uí3š3„5¯Ý¢PDÅÎÜÀìç<öÕ^Š˜¿†Åép~PZ‰ Ô®SÏLITj §®\KŠ zp\ŒO?06¦QgÌ,¬ä¦§òpÓZ–Á±ÉÙ¢¸ÑÅ,7eÆ}ü뱯öü8oÌc_î± GEok‘Tg^üoCȤcîr¯Œz}UUù¯ÜÖ&np2O®óHEEVîoÁ½§ôŠøà™žM#˜ÙK²ŠD¡ôçΔ öŠN¶<ÅxxÓᕬ%¬¾rí6‰hLXÊÔác¯'D(Ò,©†š#„Õ׬ݘ©ÙcðÄ¡©<¶¾¦ê¯½¹[Ë Uë¶^ K:|œ• ¤;µŠ(¢ØÉbû:íÅ8y¥4¥_htˆ×‚¹£Ü¤B.5!~æîu£\.®9y¥”{‘"–Á ¨Á³ß=Ku-(B—(ŠP\*Ö"i#EQDñVéØ;†½– ,O?õÞ%Ó]r…"Š(v¾Hµ«CÚŽ „>žœ˜40&¦À–Àéìò%ÛÏš M?ùdÁ}³¬3ÿ\¡¡Ò¬n~p$f=±Iéj(¢ˆ"ŠÝ]¤â†Äöãi*U&±Oдa~þ´úÀ¡üËj¶;eEQì±3­ÅXBNç”_-­ò–‰E>Ö™k5ª¥ÛÎnM¿Ê2¬9bS\‘»ŸõÏõ€Å>¡ˆå¸™HAëá(¢ˆ"Š·šH²³j¢GÅp—‹«*Ê×§çîªà¶„uŸL¢ˆ"Š,¶¯Ó®Ÿca ¹˜_•QPÅKš¥XŠ˜ç¹šT 4_F´ùôØ|¹ÐJ4gÄZlÒBPDEoÑPW±áÏŠ ÍÇÈmÀľá6&–mXr¥êòоÃ<\=0Á0Ì¥+—äîòÐàÐÎ*ÅâÅ‹çÎk1QRRb­À0Ìï¿ÿ^PP0f̘AƒƵk×vV§í¬R´e"++«Õžï„‰?þøƒ¢¨Aƒ š{$íÀ0ÌñãÇY–6mš=úS¦¬ÈÏŸ àÛs¹úÅ»¯ð¨G-H‰¾‘z œN®R[‰~X KÛE µ3Kß?ü¥±µÁ^æÄTöPÆöB@b’ôOh­¬V«JHþçK?}úgG a§ ›uCìïQî2©i"Èͤsœ-“ÉìååeÿóŸÏ衇~úé';²ÖÄ¥âŒÓ¹'J}L$Ù˜˜4uâ¯kuÚ„F£Ù¶m›Á`€ .$$$À€, òx¼|pÕªUvÞ·Ú)ÅÅKÿÚ¿éͧæóùÍÚÏçÇÄE¯Y·æã?î  ®\8\[°OÕhJ½÷ÝnØÜ¡ º¶ºº¶š 1ê%B!hõ:±ÔÝFŸe٨ȨÎ*…Z§Öu£ÁæŸÏgd¦ÅÕXMo{œ-—r.m=ú¸£ÁèMûù¤E$„ @~E~¥¢"20êè•#pwò=Ö±ÂÃÃøá;K!ø!×à ˜n.Êb( „àý(\\ša§³e2™BÝ,ž¸BiNÔZ•¾N«‰ÅCîJÞ½÷o;­–=Šã¿Ÿþ÷Ì•ÓÊz…H(žš6mî£s-§ìïQnR±=y@›L§ÍlÑ4M¬¯~€Ý{v–Q|zëÎM ýäbgç<' - Öã‚s&.d^¬¨®Ðõ§3NºûÈB¼Ãîq§›ìúm²#&Lêk|×`î8³(ÃÏ#`ÆÞñ‰iÖúFƸõô_ö§O¡(ÊrG9|øðéÓ§çÎS¢(É+Ï ’øËCÝ&ôŸ´}ûö¿ÿþûé§Ÿæñx\®œ.Å™ã' L弫3WN‹ƒ„k7ÿòà=Yë—W–ﻸ—/p 3´l‹V©/¿ä[÷A!Òë_·núN4a£Í},ãˆ>@c٫ٓ°Q.Ì/Œ°Æ‚ÃR MÉßÊœ_²0ïA@ZÒ–?w¿–eŒð‹È+¸*Ùû€n1AÙvt ߃¾€§&ªM»ÿ˜>qfË(U”%qKˆA£Z™“ „XÔ:ÒimX³ëg±—0DÜcö”¬Ã;ru«*Vn䎴Q#Q«amòਠ>ŸoBNYöÖS›cCúx‚‹…çe·üŠ«@ùðëX µ ï>ýŸ–>qÛ8–%ǶæBl -fµ–cAm£¯T6H\ÄE1v?µìQJeÃäÙ“]å.!? <@Ý Þrp“J¥œ÷üË× a_òöt³3r3ég‹m‚u:ÝòU+¢âcŽL€ô¬£î=eF£~þgoM=yİ‘œšõÐì¨ M£æÈÉcîÞòʪJµJSp¥ Àä¯çë¾Ý3~à„¤>I4aR—í˜â;z¹Ø§uCKØ ý'ýzø—¼²œž‘–(û.îîáž_Th§ nìæLìÝ»W,?úÄ£[Îl–»xô OªËn¸#~,!$--­¾¾þûï¿öÙg)Šâ\4'J‘“qD{æ¥ÓÚwž©hP”6”H<Å×ô%ÇN2Àü˜Ë0Ìï»~zðÁÙ¶hYÀ–BXÖöN愉óÇþRm-å?~Ö‡-­8d‚/à Å×]@VÀ“Š( y©ÄF_*•t¤††|MñN¡gN ÷ëiɳM¬;“&þ”ñ“¿<ÀQ¥e¥:^£ ¸p§( ª”U­æÖ¡Šâz u[4”_–¸5›ÃøäËOŸ-.**¬*èß§ÿø±w‚#žJû=J( ÅB>Ÿg“çŽ DËVTTq9¬*¯®È®F[ùˆ5÷O»>¹å î:µÖ§)Z,”ði~d`”›D&J&š*ˆ !2OWâÆ+`¹NeÏeβ¬ô ™F@NW‡¬ãÂeìùhr¤D”L5rÉÄÃp«½T q`™Mˆ‰º~›0š 6gª¾P”Ý^ Mª­­™öð=ÞÞbWà øž¾òêòºí¶Œ>"1¡;yC[…Îq¶¸GFîâ!„,ùqéð1#-s4e~Ôìë÷בÍáaáà೯µ 8tü°‹‡ìÔá ÉIry~UžŒou^­ŒÛOm‘ËÜÂz8m¤)«Ü3S0²!k…Ð+1³8#6¨7aÉØ„ñüÓOî/JàrIf½º~̰ñù§ í·Â0 !¤²²2++ëɧžøíèºA‘ƒ#¢€b)>ÍçÊèîîžššºfÍšÙ³gC“æP)®f¬9òœ¿KmþÕ?Ù‘Ó÷ß'ñ€H*8xiXp??ømË:£Ì@EQöÖ•M[@ö¥tMC%_äß?ÕZ“mâ¹RÛ™~«&8tÊkA†¿ È”Ür%ËÑæÖ©õêªë3[úzm!Ï ªHqA±~iÉ5†a¸¹F'J!ôêçÞ÷¾Ä÷†MéôuáãíCtVöR¡”«%BHiÙµà 'L@“¯ÌoÚ´©²²2¦Ì4jÔ(‹‚Ú¨ò‰òŒ‰ˆb¶¤´„Sv¢Ó¶£Ã²Ä¦Å;2€ŒJNÙye«X*Ÿ|ÿh?.<¯4×ÚJG* Â}#ž÷ wÜ nØtò¾a ©}ǰ,kYøƒ&GÐÎR4ò¡„¦€/bKxõ\xORSJ€Œr©s—æA¨ž*áŽí÷„ZÒ@®¯˜X£íYMåÐÚcC;XWÔ›ÿ}Ý/ØGì"ˆøÞA>'.…ô ”¸H¤.â§^xêøþtK,û{‚t7:ÇÙ²žÞ±sGü€ëÕëÇ‘€ÿ~þáƒ×?G†2.È}=O:–š6¦º´Ê@é& K«k¬ƒ0¨½Vǘ˜­‡¶<3ó9çL0ÚêŠ=³äñ¯¸„N,Ý<ÌØXž[ž3{ă„Ͼa û3÷¦%NªQV§çž˜6x:aop“°ÆrÚ¶mÛœ9sÎåŸ ò êé׋eYÂPŒÑdàÑæF‰ŠŠ:vì˜^¯‰D=^@QÞ…ŠCÏI+ÀËp4÷ò©«¹/³£ ònܽþÉOŸ<—^¬+IàÈ@Ör :ó§`Ãæ"S2IJi+ŠÓÍÝ2Ür\VZ²¼¼½%©£&îM»oúôé-OjÔ„Ó¥z÷z÷;îIN›àñxñ!ý²—D!”¦CGr§ÿú½Š×* Ÿ1q¦£&,ó.œ8eÊ”]»v9Òº j¥ZŸ§%„0&&ÚCFšp¢²s³·ÿ‹ÏçétZ1[*8]Qz½þä™ô+—r„"!”–JŽ˜7úht{öï …#†ŽpÔ4Õ•E¬l¨ÐôþB¾P*’z¹IÜ8…‚ì"ž$´4ehª››½+_mUé +Ú¡)@k±P!*u`YÒ¦›?’Bnî®v&n1aéÇÒ5è”2O7JmÐê@ê´‘‡ÿ:’0"áì žAžŸ}±àµWÞ»gñmD¤{ÒiΖe”).-Þ{¤õYÿúdEA¤¯®®òööqâIˆ‹R§¬/¯ªˆïŸPQ\>|àPËv‡=‡vgñ3+/UñBxåeþ~Žš`ôêʽ÷»ÅΕ†M!Òð{‹Ï- ô*ˆ¹¤úõHÚtjãÅÂó‹.Œî“ê*vub,&„ðù|>Ÿ_P•?²÷hBˆ‘1n>ù‡Òµþ§ý+‡ÇŽä&º 55õرc£Gvè¦RW]V¼wQˆ´” q—2§,¢ã¬Õô®ºek–ªøJ‘¼É-¦¸5¶µšfHšE±3ýöL4w¶Ò×Þ!+€²Ø¯Žœæhsï:¸³_üœ]½ÛÜ4s• ‹ì[_W?vÔ®®ÜWôGÜÙ,F[M‹½ÛQSj•õê:!_àNÍX¢LHXP–/ä ¦ òóõ#„0 £4(%ÞâZUM[^l;XOS=ò‡Au­"7÷˜)Ë=°_l‚ùJ§y<‰«¤i8:³Õjs FÚhEÔlïµNWTYyY¯´ßèxî”FÑ7¼·EórãEíUÝð!Ã5Áa]êC—”×—M:ËOî¯5hýåa>=¸4C"‚ø^´«Þ-ex*ؽ@Fñ–ìrà 2áÂcA0Þ4øÀ æ™9_›v0—ø/¬ÎVµŠ¾XÆ×SÒZÊ·ÁˆÔÓËr–O7»eää\y-y³ß„åïæ½›@ר  tqgϺtâRß!}ϼèäÃM›¶mzeÞëÖÛßFDº'ælqc:ð¶ë,Êz¥J¡¦(Ц)Ц%î¢Ý{wϸo¦ÍþûMLe}CBÿ~в:@`¹õKNßpB§×ù»ûåäúúø9jB™ó“dæ,Iø Î$bVõö 1£¶¾ÈSzßñÛ±µñaýB¼BY–uȰ,ÛÐÐ “ÉX–Õè52±˲W®]v—ºëóSî¸{ã‰ßýäþ2± ‚ƒƒ>ìè$Añù_ÒF•[ÊuÇò QÖ[ày<ºÑ]-rp»·Å„¥-,AÜ›ÑÐ’m'¦:,&ÎÛFƒ ‚{ö·,¾p¶Ü\xrW ªiÚѶ „iƒNÜ=¡tu[šU²‰¾Á~,MŒF£C¥¨?öLŒIÝX1@2Þ:ÜæÎzµ<÷höao™Ïô¡³ iG‹ý¥°i‹øØøøØxëÝEŽO¹Z–×/)Éâ„§—Ò76–€ …àŸ0'ºïpNA"{ù{˰T åD[Øö(†el”lz—Ó&X–5LºFóÛˆ&£ÑrÌ¡Õê´Z-MÓB¡ÐQÖúAžÁR‘‹/dY¶ 2?¯"ÇÏÝßÃ¥ÙK¦σرg‹RÃÏ»">½¹„·— hÜÀ?Rp‘6-#ú‡yêOpÇ™dg)À<¤0Îü}ë­‹„€—«Ÿufò®åHüšœ­ϯ5+˲E:Z“Õ¨ÐñXÚ 3öOI<½ïL¸pŠ¢ü{øœØqRà‘——ÑÓÎæÆ·‘îIg:[–qÜúÔ±½»z¹Ÿ?`b) _›ø"Ã0NŒ•–ma\4 Àz€fL†øª5W”aÜÀê¨ ‘o²4ò1˘ÞÒa`¤ê"ãÙâæ"rŸ0!Ð#3í .ŠV«={ölcc£ÖU»qóÃ7ò j©²ª®z릭F‰éÏíEFó(W[[ëèr‰46½|´®‡èfï~ó›»Å¬ÝϾ–¶((,Pª•b¡˜‹Ë²l[÷K†aÚ¶eÝÜêÌÏz¹@1û•%[\úŽ÷({u­­ØÉu&šöáµEÑ"XÈ:Ñ£¬+ª®¶"ëÌßa1#ƒC{بõëØ¯w"4õ@G;­Å‡ t4RWK"Š*…þ¼®¡¡A&sëÒÇ:WŽ–jj«KËËòó¯‚À|šÓ±é]NW”¿Ÿ zµ4—»êkꪔʹiøäçÿIÒWžzÍ9{&s,ËöîäìéjþöDYa¹GGòˆ¡ÖΖ&Z o%ÐêØþ¶h¹Ò‚ªB3|äõ}é§Ž <ØÂhm‚+ÈÙ+g Jc¯Þ‘”­Öirós>¼èÄ^göž1yèÑ­Ç#b#*Š*þܾéåg_¶³GáÛˆH÷¤ÓÞF´ŒŒ±ÙµZ—µ}æ f/°œ- œp7§ìÜÆ_èî)¯,¯ FV«ÕŠÅæG™Ì#+û7^¨‘ꊪ{õ‹t„À3ÁzØÊ.»Â¾·1ïgIè]Öšžš‹¬‹”zX"Úi!‘‘‘Ó¦MË,¹X¯®;Ô:Õ–º-Ó¦MÛvö¯ÄðþA ÕjwïÞíÐ}«-Í`cN9;„¦)K64—Žñ"%^æoG¸¶8’qH-T‚’—Ô´‘ÃfÐ'M·IGï¾6û„l´×74½ÁàDsɃ#DkÕ€ IDAT‘` z°Ì£ÍõA^¨(­=+‘H*…Ǹ½›6mº×tû÷ÑpC–fµ€×‹)–¼Ù_ ËœÍÁŸHÊÏÜä#œ¾ÑÇ/ô:í…}ß2 ù/ß޳âZG´ÓXm]r‹œQÔ0:#3³o\œP´%‘ÏÿûüöÛo3fÌàô­?qb)8ñTÆéB}^a^qhl°Eçâ勊rÚÈŸ;ó 'Jam‚ÏçGEF©kÜ\¯—¯—_Û/ý¿^èPsCÓ„ÍÞÌ¿‹kŠÇ'¤qW1G€<0@hÉs@˜¿ŸÜ¿_\¢£ N„}þà‚ÖÜ ÑDîfË ¨2À|…«±j P@ƱR´ ÔTk‡&Œ‰Ìƒmn^N©J*ðêŠr½V×2V;aYÖ¤1ýïµO¥RóŸZ­úß7 Â’õõ¦ÂK…Q,õŒêU__ëhBîFgÎlq—¨»Ì­A¡p—Ë ãìé8<å2c¬···£·Æf&\d2O·=[wNžqÏ¡ã] e.î¾Úò£žªÊð”Ðl… ÄËÓ«#&¸€œòì ý¦ª~7Ôe<¸=ODù…¾l/\Թƿ- ë Ëb· Ô{Ó©?Μî–ä"r–Ê(¾hdŒ~næÏ/8p`ذav>õZJÑjx¿Úß ³\#z€ÉÈð2·Í É-Qœ;Q5@“ìÄ$!„¢hšG¶8jm%âÜTG“¯Ö,ÐZç83ä,#€!¬«ÍMóhnÃ/í£}}©¯Ì|QÔi@îžæIbÏKsm•¢X£’QS|‹¦&Tʺˆ¢ £öZñUoß@BHúó¢»`„Úã{óÙåáу5Áu?N?¶ï`¨×J o¥ç[OÁ:×£šâÍ£¯?€P*¤ä@”ÍêÓÑŠ:zâèÙüÓ`0TæOFÕTÖ–gWrÇúýà¤!ܱ›¿›sÍm0 &½=“ Ö-nOuBÄT1O ÞLx¯€ O4$˧€2IÝrÍŸ~0V œ=Å3^i­¥× -ËKh«uƒú õõ5¯!ææåäTdJå£V'(<I²#½´ÿ§d¿ ®bï¹kšµE©ÔåýWßÿß7ùGúžÜ}jÐØþW«fLœÐ'Á‰ Ò­èg‹V¸kfÒ„Iß|¿hÒ}“iš¾¼õã›ýúÕÙ¯¡w½e¹/:4¹m1Ñ;º÷ïëÿtøOµÌ+ žú ”G+ƒÝÄ´HÞoì«4eõ¥2‰ÌU,Óõ|°1ïg·Ÿ1©ÎÌg ò”D[¡<ýš¾l—´ï;Ý·8ÂÂÂ<8bĈ»’¦É>¼öèjw©»ÚSQ^_:¦ïxŠ¢ !Z­677wüøñöܰ›•¢µp>üµYjèmÐjÝs·Ž -¦(óгG÷g”Ô§8f‚Ûn ¶»­¹ãû¶gU^RÖ©Ò"ƒ-á Ã8×;Ž R ^MûZ­ZB|ƒ¤¾bH¤ÄÁ†)©-ÎÓe[J 'úŸäŽó•“Ãû±œ*¼Z`Yñq¢z“^gÐòhžLb»Ì!ôå&ò¦2®öÔ—¿à16Œ¸G¶’h&dnîlÈ£Ëw›\Ç%%„\ÍÉbþÙeñ’6–\ÙÐ#j 8þ6"‡í×É›gcÛ¶m999§OŸîßßüÒ¥=jÅïË”lƒ¢¢!´_p[ÊÖŠ£m¡Ö¨E~@ÖôA²kù>MŸ~ ëø“ÆÞeËÑ™'BÈøø4›¬€J¥â’‹Å"‘(& Ö³éìîTí¬ñµýma“­RïBdㆥ ›ÞCÊι’S•å"—hëjƒË¶ ¬r43­ö(÷ôCÏþzp­Ü[®ªW÷ðé™Ð'Ùô‰o#"Ý“Nû‚¼õÀ÷ÐýnØüG`¨_Œ{þu‡ò|ýú¿çÄÆïš}~gÎHÚ ùn{IšGôIÁeU†÷A˽œÙPemB¥Uf”\èéÓ‹a~àõ¥…eQãÅ(±ŸË E„â4L6b.w…bÿݬÁ®5ƒ¦!eÙäääE‹ÅÇÇËd²Ñ£LŒQ¥Sý³;%u 4 ©?ýôÓ½÷ÞË;=ÈZ/+Ùr57J›>,¸ÒÈ£aLpq~ýïêíýé4hqŸkš‚jzI‚Ïsó—žíw¶œk Ÿ Σ’J܈¦ÌbѺN¸0uõ³¯&,¥È-ÏN¿zÜËÕ{rÒT ¦F x" x HBÁ²¥/wE_eRæÛãlY›~׫¯BSå4ªê¼…ÍnfŒ©ÑémaÖÍת—3~üø´´4š¦Ù¦½›uZ.M©› ˆY“¡σ³][]»iÏŸÚFíÝc§:ôIÎD€_@õU³s Q« K‹„BAuiõµŒ2uƒ&>.Þòe2çöà·ºÏýÛ_¾x ‡kø´ ÷r/!Z·ÿê³ÆÜY‰Œ5ïµ§ôÐ{ÅŠy¥èxL“8R 0Mš­\ê™Ö'ØêG63.],ªÏs‘Kô:}²¿’ëìLÖÆD;Γ§‡—«Þ-69ºäBÙÃÏ=d=WjO·‘îIço™Löè¿è oQÜ¡ür`¬À«‘ßóÎG^õòòiy“v„H,I¾û³œŒ‰ÒDy…eŒ´8¸F~wÜðG¹ï-9gBgÔf”\(¬.0±¦pŸˆP¯,Ë%OR¸[ñ8ú9B€˜}JÔkŽÀolÚg§ îŽÂeé©§žZ±bÅ Aƒy4_.õƜۆ††Õ«W§¥¥që­¹)„“ÑÔê)oWfTõ¶ˆÀV¬-cl´ß„¹-¸\b™ââjÞ’WKC°,ëôyëuÄüzH/z£d€%pýU5‡L€ˆ¢Ù}QmåiÍ_¬ViyÅyE–S5ÕŽ–âpö›ª²¡ÂGæk3ÕÚ°kkT¹\$¸Ã&ßoÔµ¢\?I+»ˆZ-ic©«gì€ ™‘=]s9Ñ`AàP‹¦CSÖ&¶oß^PP ‹‡mæsŸ{µôU‡~mɶGµ¡ƒ¾†WÙ Séõz›ßƱÇDtdtt¤ùÇõ®æ_Õˆ·ºÊ]KKÊ‚û*J”³&Ý-¦vòçZ^­Ë]ê*wZD»ûÈ@À [: vZ!„ÄS†q¼:p5ºE×›}ýy½¨¤‘R™/dÏÈÛbV ïÚ[–e½]}¤‘‘wDYÓ•eÙÃÇökJ©\âü6žk÷¶0›Õ’Y÷Ü¿b벡†‰Db‹š= ßFDº'ùs=6WÂÓϽÒRÓFÇþgßVMDÆ„¸‘6š1‘W™cŠÒk˜åõl.5AØLZ* »¯åÕN¹öb¨tÛ´ÚÀd2YJÁãñæÎ»gÏžµk׆„„DFFjµÚË—/geei4š‡~ØÕõú>$“©uÿ©ÕRè¶_y¶áÓzmÒѶhJ§y`óíV4A€¸ú+¼à+šM9X>Â䉔Á©Ó&ÚÌJ>j9ÐZ,‡JQRWˆŒúFâJ¢üczúFÚÌ”´êFK?=uù—Þ‰v–¢­¶àóÃ>Î9þ¹D—©w^Ð=‰ƒî±hÚ_ ®ÓZîywÞy§VU#u³ýNË2YW³úDÆY2æP§m«­}S ã=J(h«ôt#O¯Ö7–iõ }«°ß„åjÕh4w­wqu€zcOzý3`õLÒ²8ö”层 îÀÁæŽïÝì··+«*ÎdœzóÄ<1°,éA ›ÛràÃ6=ŠÃz:¦éžž½úǰ.¬= ßFDº'ãlñx¼Â††ww÷k˲þùgTTT·2!Ñ»„»÷tw±5Á“ñÂîë¸ š¦óóóÕjµL&Š¢Æeeeyyy,ËÞ}÷ÝÖ¿ òìúõë{öìi) ë]êÔõž®öÿ2|¿›Ç{C-mÑ4\R,Ëu}¸$-¦O!7nt®¹­¾­e}C¢ÀúT7ìQ}Câ=B÷¢€æ^&hÂuÄo„exRÿšh¿¡}BW566J$Kë8×i5 ×i@_[èân;ñÆãñã¢úrÇ„ 68Öi­{·*mi\–@ÓÏ/_{¥=Š yåÑ×à\¯s‰‰­¸¶ŽVçüBL&S½Zaâ™@[«c\ ˜4 ÕÀ‘{+ßî²ÓÙâñx¥…:•drhÕµ†kq`-@tD„¥ iº¢´B­R¹Êd ÑhNŸOW…ÔÏê“[„ð)ë¯ÀÒ}¼ƒS[¦Ö– ›Õ’;FŒ±íQÒÝ Ï~?zô¬…÷ÚµfÑ*•*;;ûèÑ£öÿrœÑhŒŠŠJLL ü÷˜P(çÏŸ?yò¤Àư°°þýû÷êÕË}•J•••µì‡Ï(Jcm ,Œs_jêG+ª¤¬ØÀh ]i• % ŠH€Úº…JÁ0Œ·L¦WW0 ëë\[äæq~‚·‡‰1)”õÀãñ{÷°>%•H»[sß&nN§åJQQU¡3h5X*Ö¨Õ..2š¦5µF-‘JTjµ‹«Ô¨7F†E9Ý£ì/…C¥Óé>ùä“_|‘Çãµ³FÖ*_ýõo¼aùŠM[¨TªœÂÇãñh (~ÓË0”‰"æc tM MŒ,ò1aa}ÒÒüƒÛ|çÀssŸ>Åç󠨸ˆÐ­”E]]ȧÌ3èz8xüĉwÙÙÜ7¡G!H÷ᥠUÙÖu޳ÅÍœk4‡ö7ˆÅbWWW;¯·ÛÃ!¤¾¾¾¡¡ÁþŠ¢d2™‡‡‡P(´Gÿö¨(4Ñ}L`§µÓ„N§;{öìž={ÜÜÜìÿkBˆR©¼ãŽ;’’’nèlÝÍÝE&Nœ8Q[[k½¼¼lgúÒut¦³… ò/‡eÙªª*…BáD\¹\îëëk¿‹†´¤¶¶ö«¯¾ª««OOÏyóæyyyÝ0‚t5œ³ÕiŸ~@ù7CÓ´¿¿¿¿¿í><äæàåå5oÞ¼¯¾ú ÐÓBºèl!‚ ·œ¿ÅüÓyAf ³… ‚Ü& ›…tOp‹‚ ‚ H‚΂ ‚ H‚΂ ‚ H‚΂ ‚ H‚΂ ‚ H‚΂ ‚ H‚΂ ‚ H‚΂ ‚ H‚΂ ‚ H‚΂ ‚ H‚΂ ‚ H‚΂ ‚ HbïQ§§§wi>AnHrr²åX.—ÿƒ9A…Baš½ÎŒ?ÞÙÌ ‚t”]»výÓY@q\FDAéBÐÙBAéBÐÙBAéBÐÙBAéBÐÙBAéB:àlé2—ÌŠ÷‘ð„‰f0—£n†±âÌÎ9jº¢£;Žëþé!‚ r+á´³Ej7¾7ÿrÚæ £áÜ{}©ü/‡ËÒVT“ÎÌ[Û°7ËQå_.÷ˆ w¥@ ÈÊ©c»Ú*‚ ‚ ·N;[LÞÅ˼¤QÜi:âå#ªûP—³ëš'ˆ)+Ä“1ãæý–cÙ•¥¯¯ot‘»ñ®¦Ý<ÜŒõuê›´\Š ‚ È-sΖü¡¿”ûŸ zj·ž3?Jjö£?¦Ì/f>¶-äýÃåŠÒÃ…ì_ÆØ2=<êÕâŸÞ=ëpvì²hƒáÐg†|“^¡¾”¶qÚ‚ªÉËÏTªªÏ,J>ýü´Óõ@´Z‰EÖ“h‘˜Öjuèl!‚ bÿéÓ¥ ¿]úÚ§³ãÖ°oõoÙ*ccÙÑEÿY‘Õ⣠¼Þ³Ÿzú¿Ï,:XÐ`ÐÕœÚøßû_ߤâNRò @aME­ÅÛ" UÄ?л¦êAùwÐ?×Ãïûêºåã ßâç8üÂáw÷…]úˆ¶,RÞÓ?[4®`~/Yð¨÷®žœ(h—Ž˜»nû›~Ûžìæ=î…õÌŒ¹ceM'=#"¤åE•æ-\LmÑ5ÖÓŸß"AAÖ¡Ï~?zô¬…÷ú¶¯—žž>~üx' hw?ýYQ°dìÍú&WçZ4VœÞ{Å}ø¨HWJWtlipÊÐPq'¤‹ ˆƒìÚµ+99Ù"Êåò03‚  P(ÚWxiCUöu]1IÖ¯ÿh 5ù‰;c%×v|8ÿWÞ”C»ÖÓêB‹ÿwús‡â°¡ia“*‚ ‚ ÿº`h¿Ñ©.<3<Ô3pØ«g>ÝøIªK˜ùG-"‚ ‚ØE—l?¢}F¼¶öøk]‘t·±ˆ ‚ b]1³… ‚ ‚˜Ag AA¤ ¹œ-]æ’Yñ>ž0ñÃŒV¾Ú °%ߦ´ökÙm…ß4ŒgvÈù—ýîµ®èèŽãź+"‚ È­@÷ÿd©ÝøÞüËi[*Îu§ÍÿrxÂîGó·?îsûŨò/—{DÇ»Rlí…û²Õ„öè;nL¬ÛmUx]þ¡­§+XJ>|òÀZpùlN]p¼ç­ð,€ ‚ íÓý-&ïâe^Òœî4ñòÕËÿtžnl]~~c@’Ó—X)QøÈIý[: zͱ_3W¬¿vþšIè•ú`â+3½ÜÛqÇÕ·ÂxìäOæÕZý&€ )iëO1Áv¸EmÆGŒ¼·GÍùGÍåy‡“#W+{{tÿþ‰ ‚ 7 ûß̈¶Q'߬/¢v#ˆ¢´ÜàÝ×놿 d<•·¾Æ{Η}ãBxå‡.ÎçàG?¿SÔ–û䨾5‚¡ƒe 2 ºÊ'ÌM ´oÊþ¸”»¿/u¢´† ðÇ_FBAnuœ^§QüQÃü¿ÃÕ,€¾¾¾ÑEîvcoC0<á«Wz‰’Ê$¢¨qq÷Å/^P¶³¹ÍQý¶P¹ºSp_š‹èqi77c}Ý¿l³‚ r{â´³%è/-!„eÔE»ßøë±'~,aèYKVL¹üòà 3 ~â‰I_¯z.ÖvZJzEµø'€w϶°¢Üÿ\hÐS»õĘùQR³‰8Sæ3ÛòþárEéáBö¯?c´7ŸÀ\þrÖÛüÞ>PZ_rà=ÿ¿;ÍÅm+¼ã•À/üqöÄU“—Ÿ©TUŸY”|úùi¦ëL=ÿqéĵ—këòþþüŽÒm{+ Ñ6jA$¶k¾é:DQ}:#³sFÈQýë°Ú]ëKcz¦x8Óž¸‘˜Öjuèl!‚ ·>ÞL‰¼ûÎxÿ™¾'¶RPžã>_ýœvÁÔ¡^ɾgÅâ™­ìæÁÊZ ¤Å?#|”d¿eÓ¥ ¿]úÚ§³ãK“|@ÅÅÂøg^½Ã£ë^›c«*j\CB›,ðƒ{·2=Óz>ÙÊŠjYX˜§9® $œ‹ÛVx8P LiQ©vß³!<óH ¿´¬²²š^ì‹«—ºüzZò yçç3u(±TzÞn§C«Xûòþ%¦Ø¾Œ ·g+ž£úÍ`/ÿ™Ÿ1µÈž¸F½ž•Hvù׳råÊãÇïÞ½{îܹëÖ­1b„F£€¤¤¤ãÇ'%9ðHÿOqùòå>ø­Û '-6éÓÏŒúxON­ÖÄ2Å‹F XÖìf˜ò–?ù^ösÇ^ýßó+ó[Û dÿ2b»Y÷õ÷V—”Ô›½ÓµÂk-Œµ•OÚÏßGUTT×·Ä·­ðŽWÏ?ÈßuÂU,±À6¬ž,IÔÔ÷Ví:vêÄö…cŠÞ¿ó©ßë€ØÃC¢QØ·™Š¨jW<·Õ{風>vü,¤£ú¶h+7lÕ&MëæÄþu{â²J…’ïáéŠÎ‚ 7xðà”””ÿüç?¯¿þzAAÁ¦M›ÀÍÍmðàÁnnnÿtÛÃh4šL¦ë!·N:[DߨebWWW¡©êôÊùßkÚÚ¤=³àÁù×üéç~Z9ýê}~¡å×);g‘ßgÚô裟¿¹ö²ÂÐxmÿ'ï­.6{:†]s}%ã—V’6óÉï}ïŒÞ'>cÍ¥zCcɾßý™‹ÛVxÇ+×{öSCOÿ÷™E  ºº‚Sÿ{ÿë›T†=ÿ™5ÍѼZ‰%4zµÚ”<(PXSQÛº·u½Œ@U‹ž:ø»iƒ…¤~Ï~#x}õG#Ýhyê‚Õ/1_<øÎÁ†®ÙÃïûêºåã ßâç8üÂáw÷…Í7ã·‘O~Ü+ë~œtíƒán#Þ+½cúA»á¯UøÜuÛßôÛöìÐ`7¯èq/¬gfÌ+Žxü1=oMˆñ”ú_õÝËÎö£€öŒˆ–U¶·E@yàòÊóºk;OLJZÛ§ÏÚ>}Ö~«Ô¦k…å>C†õâuLßV³s}¹Ëøž#­;צ¶è ëéßý¿K‚ H·&//|||ZžÚ¿ÿ°aà ÅâÅ‹7oÞܯ_¿3f´åÖ˜L¦´´´>úhÒ¤IþùçªU«†Z\\lQضmÛ·ß~ûá‡nܸÑÓÓsêÔ©ùùùÜ©²²2//¯O>ùdçÎß}÷ŸÏONNÎÎζNÿ­·Þ*..^¼xñ–-[¦Nú¿ÿý¾ûî»ãÇ?~|âĉTÈ?ÇàÙï?¼,»þFìܹ“toÿ~2$ð‰¿õÿt>:Cù©ûsT,!LÍùí›O–3D6ž|³ÿ˜o®ÚÅQýΊK!„©>·mÓÉ2†¢-<ºýh‘Öé¤Û•;wZJÿtvnÇÊ•+àĉF£Q¥RmݺÕÇÇG&“UTTBöïßû÷ïç”cbbF£%ú¤I“¦•qì矀eË–µjüüü”J%'VTTÐ4½`Á‚–š&“É`0DFFΛ7 ár5räHkµõë×[géÎÜÐ}zxYöàÙïßÒ“lùú–P“Ÿ¸3VrmLJóåMÙ8ôöúú©ÀÀþ@ˆ¾àІ"û®‡?pÁéÝsT¿³âZý\ˆÃ†¦…9›‚ ÿr¸¥C޾}ûþðÃ~~~6:yyyW®\ùâ‹/À²Gj„ [·nÍÎÎŽµÑß±c‡X,~ì±ÇÚ2š’’"“ɸc???___ní’Kÿ³Ï>[³fM^^žÑh^©ÈÊʲŽ>mÚ4G‹‰ÜZÜÒÎí7:ÕåÅg†?q¡œË ‚ IDAT 8õÓŸ¤:±Ùû†0y_ ïýÚ‰f«y”ç#[ÊVNu¹Ö¡½&Ü—pÓÌÝTÄ#ïø§3 ÈíÁÏ?ÿËçóýüüZÕ©¬¬€W_}õÕW_µ9USSÓR¿ºº:00¦ÛÜxãååe-ŠD"­VË¿üòËß}÷Ýo¼1jÔ(š¦çÌ™c9ËÑV>‘Û†[ÚÙÚgÄkk¿ÖÅVx½^=n°½ AnHllì€Ú×ñöö€·Þzëž{î±9ÝRßÇÇçÈ‘#,˶ãoµÅš5kzè!nGMM\.·Ö¡(|õú6§Ã5EA[ŠèèèÈÈÈ . he5К´´4NçÜ[E‰D×WA¶mÛfùÎj[pú6³_È-Í­=³… ‚ N°dÉ’´´´ñãÇ?òÈ#AAAuuuYYYgÏžå6§Û0kÖ¬•+W>õÔSÙÙÙ))),˦§§ÇÆÆÎœ9ó††&Mš´jÕª˜˜˜øøø3gÎ|þùçÁÁÁíG‰‹‹€¥K—Êd2±Xn³L‰Ür ³… ‚üëHII9yòäÇüÒK/Õ××{yyõîÝ{úôé­*óùüíÛ·/X°`ݺu .”Éd wÞy§=†¾þúk@°`ÁµZ””ôǼóÎ;íG _¸pá×_=zôh†aV®\ùÈ#8Z@¤[A žý~ôèY ïõm_/==}üøñ7'O‚ -ÙµkWrr²E´Ùõ‚ róQ(í+¼´¡*ûÀ:ܳ… ‚ Ò… ³… ‚ Ò… ³… ‚ Ò… ³… ‚ Ò… ³… ‚ Ò… ³… ‚ Ò… ³… ‚ Ò… ³… ‚ Ò… ³… ‚ Ò… ³… ‚ Ò… ³… ‚ Ò… ³… ‚ Ò… ³… ‚ Ò… ³… ‚ Ò… ³… ‚ Ò…üÓÎ)úæs÷qËH‡©]õÛ W˜ÎÊÕ­’N·HjW}ã6dWÔ4NfÃÊt³,Y7C±æ[÷¤m™7¯æM»Ÿz­×ËyÆ[ Y‡Òl³†;›.ª@AnIÇ-¶pïè^ëÁxä·¨_eŠM…½ðZÃߣ©eáJFîÂëH"çæg£Ó-²W2*¤½ƒBxÐIMãÖ¦­³d}Ü,ÛÙ$Ü7ì¦Õ<Ñ\½ªîëÏïþÉ:–f[5ÜÙtQ"‚tO:îl5žÍÏH’“ElbÐÖSd¿ô&ŸšKQOÐüg|b¾¹µ®ó¦c³.){ùˆœ_½âk·á»ós;=vÙh–ÕN·H³.©"ûú :+ÁŽc¥¶²G³2½¼%7-W¦êœ"÷>±’NvD»"Y‡Ò´«Ø\/N]>]T‚ Ý“;[Læ‰k¡ƒÂd ?“^ÕwPp몬âÌYeä[oÉR£âƒ¥£ê¾zlÓ6uGm›1•gd‘ð^^Î>3™gËä !Á¬‹ŽfÚgµÓ-šÊ3²Å½ûÈÿéÅe+¬³ÔVöLWHx¤÷Í›RÔT_­ñëÝÙõÔÉ:”¦]Àæzqêòé¢ Déž8?Ús^ìñ$E=5äó²o½Ë§žŸþ{æ_¤y¯=³Ïd«¬->IÇÄùñx®>“Ž VUf—³`¸òLèÏí7Oréòν;ý“Ø $²×=|ð|kÞ˜ñZÖç~ëÿœÔs~ê '³T—_ªvõÓœ{iü»>Ò§åQß~uF@–Ž{š¦æRôbÏù©/)àvˆ®<òÚÝonš>àu7ñë©ýŸOý¾®äûÿQsÅcV´¾E‰=óö|½h¢Z;í%~Àš= Å‹¿òw°˜m;m•«Y6Þ|á sƒâÅâ1ͲZ^å ÅfRø|Ű^ó¤’Ã/ÿâ’ Õå—jüúÆðÌÙ³jš–ÕÞ¦•ÖRv¨&­M[g©Yö¬+¦¾üR¹ÔW}î¹Ô·=%Ïúõ[¾ø‚Áþ¥É:õæ”BÜŸ‘xÌOyáT®¾õÖQg!íƒùs¾ Ëm*) Š•Qoܶ’µ*^ÝX鉠7ùæÐócm[ÿÆió^éõò}Ÿz~Ì;ÞÒg<£-8ÒHZÔp+5cÛ w~6Æöòq¾¤‚ ·-ƒg¿ÿð²ìú±sçNÒ lͱ)KÖ7SÆÖ½7œ0¶¦Dˆñô½Åï½}†áDÅo‹å²ï×Ö&o×Ù×?V³„SÁÑ©A/ž.³Z§,¼üÎð—âÞ)²I)>yø¼!óNœ(P7T\Û0ÿç/Ï1ú½k‚xÏ„OúkËe•º¾ôû»æy, ŽñåÑo¹N<="‹ã4t²zM_T•V² ¤z=ÌÕ3ÿ^,~]KAz¬öþ'1ñ¬7~ºÈ{è”mÛ H^jz]ãÞêUMÍ…†³Ôýžü¯±xýõ;2¼Äp˜¦$Áª(âëþ•¸¦éª‹³*Џ4…†pft,×x¼fÍ·d~vHÍz¥<‰·jô…DY×è(S)IíbúÙP€`E†— ÓªýV-ŒÉ¢Y:é¶4¹šÄ É°Êî{äx,t–‹•â¤? z’kwìÒ˜è00VbÓí"*ë‡Ñšæ7µ­{lcèÌõ^<ðÒÐÀÉ#|™Z;þÀŒŽåÍR¥À‡æ‹no.à/kvlй-ôd½]W·±&¤ú¿×‡—ÇÄTÒûÐk.É$ÊnžWï܇—Ýò;ŠÍ*áJèÉ`µ›Æ_ „a‡tÄ vƒ£SYQÀ‘Ô–«©GøþBˆüh1‘кƒK¾j²ÚU‰|WF†—:iÕ$CuG¿2±å:A‘'®(]“wå·ÎÇÉû͆Ìô­ía‘=Â÷ þ^¼'¿ª¥‚ =ØW]ÄN÷I£Ÿ%ÏH •Uf†Ä‹õ¬-Þh½ +4šfe-GÀÖZ¹ÿ‰Œ+xì”×o7mËmx19ÆÐ°Ò*¸z8,¾TÀÊɸºíöÅtøyщ’Ö65Wä ÓÓÃËÕm-Èxqnl¾¤‘foyÈ}ûjÉŒûazöÊXý^W)Ž Y5³¸¬¤|ñå4yŒA—É ÞsG}ÙdŠÎºWû¨kƒ5=Ú»gù–öŸa®Ú(8Šöºsnýb¯õWõÒrå™vß±Z˜0#;–£Þ×¢æ‹6'2-Q[Çš‘4ì6®Rx4}½¼Úö_üxúf’rvzf”†;  þuˆvàqe±ù*ócx¬O7‹O]b­Üø#H ºLy¹ŒûÈI `TYi~˜-ŸÙ«:FQaˆjWã0ZÓü†¡²Û¸Çz0ÅÑ]ÊÞ-tZ+¯ø‡ÛQÜãÊœº˜0#;–­R}5~ÃCÓD·‹ØKÓ5·©'ëïº~Hõoð.ÊÎŽenÞªx~ÂZŸíQz¾÷§ŽVhM?P4Vú»ÙŸ1•óÔtºúÎÂõI€coòGG\íáá*ýÌTרn1J—j n,!ò¨µöàŠª¶~_‰zgeF0Õí,¿8ú­¨“¨ÈŠÈ2X¿IÎße¢á¡Í¡Ú̘¤Üà ªgÿ½4ZüŠ–"‚ôdX¿é[Œ†¸{ÿ¬Ô|¹àà`—®‰©Û™Çÿuû4òÁC™/’-éø¯/›y€_¬ëÀïî<^`` ƒƒCÝ"ƒÁèÆ`A€Éd6_`ÙÕ‚„ 4GµLsÞ’7Ý‚t&¢0*+ßÐÁýå#‚t4oA~$˜ð\SUY4v‹ ÒeÐ÷[ù‘PœîMèî A~,?ÞÈQìH¦`R›ŸƒMû’é÷ ±í¦Ú+;òyNÓBA¤Gûñ’-<>*fª®Ùæ§ãñQyâªZmÞÓöZUöÐI ¸AAзšl…'Ê8>Ji|¯©¯¯˜Sa`®Òæ+±v\L¹®‰Òww ‚ ‚ Ýé[M¶„Ña9 KMO•@55c´¹bAnT<ÙÀ¸W›¶Aù‘}ÕMM³âöÎÞg¢²„&¿~˜×û6+îÃÚ‰Û5eIÊ­êõá€Èé"ó×Á´šYKÜû§Uõ/¿æðb櫯ñ8ôÂÓy“"í7†á?‡ò€`á9ìpIæáýØ<ªóó<¸Iá›\ÿ4Q÷’”^e?ëyD%TÅ/Ò\5iíMWÛÕ2Ôµ^ÏO§ú2B¢07¦HÙܸ&ej2ZÑö21¤/%üwÇ ö‹>$rðÐ (ÍþXDÅ…ÉË(ªçW‘qäo•‘Ï3p€ªøEZk–<àåA{OÔ_N“\ªÛïľåÕ7Ý:¼ÄgÈ"Í%ñü¯8F‚ ‚t³v'[xæÁÇoÈ ò·'/nñbé„{‰8?>èç×âOy™y¨0tŠáãÓ³å øÓ¢´¬k|‹'…¤³ûh™Š0=3²¨òÕÓŠÑ>kÒr6í6NÙîÇÅ ï.™«¦ôû›#qœûÈI1ýÍ´!ç^Œº¹· úW—”›3÷dðÌŒˆ‚ò·ïwÿÍœ?9‘[aV¢œª©2¢¢µaYÙXGøéJ€“ó=®§×óÃv†’C^’WÎb^Œ’Õ²˜B~úÑÃùV8h‘Ï̈`ª÷5'ç\ý(K®o+)Ýõp—nÌõø„iM·ñI o¬„ÆÒAä;ÖÎ[?ìÛë/9L ßo«„}òΙ@TL¹•4yAøïÆR c9g,ÿku¤ÎŸV»ÔÌÝbÈKB%·ç¼?ðFvñ8ûß—”ÌwOÏJ¾ïLNdz¢––%À S‹y½tLt¥¨TÌ`Øp¿aûºˆÖ)‹ÿ›u¸}ÇAAoE;“-î§ë÷I.Z)ÕOr¸I÷‚¨coHÕ,ãee<9%)2TE†æëÙjÕ<‡Ÿõ!’l1O‰ x|X 7B XQ‘LÃaªbåáéIú:Vôš}ݼ_‘[ê«p¾nO}ò@:†'„eaÃ&ŒUÄ€>CÃ÷|)@°ÛËФ&#a|t‚™ªÀ­È óI•ùÇ/«nwwûü ]LJŽNaqË’ßxm´z¿ú›Óœ’âÂs‡âí—N1%ž–}(@2]2sÑÝÅN;05-çiC½ÜµäD¶®}AAoLû’-‚UQÄ¥é(48 I°Y%\ ½ÚÇ eñWaØ!qAÁÇX’éôšÓaœ÷‘ U™S€¨Œ /5tÒªIwøÙ!Q4ë•ò$F‡dÑ,tɵûâëþ•¸f•AÃsžDedx‰Ñ0-Ьϕ;×R„€3£c¹F³T)¢£c…ˆÚÐjÕÊ?rÏÌœvÛ:pâÀÚ;p“4VÙ}ï…βb±RœôGAOríŽýO‚^b8LS0†Î\ïÅs/ œ<—©µã€±ˆÖ!‚ Ò3´ïchXi\=_*`åd\Ývûb:ÉjÛÝ<›É”§Äí™vö¾ÅÄMc¨¸@ÀOÏ*fsRƒžÎÿíUŠ¢¦•:üì°ªu_…ê$L˜ž^®nkAÀ ò*Å1!KX³/k­Ü‹ÿDÆ ˜V­jyÃW¶vwH @@`À»Ž‹§Ý!-o¶|çE‚ ‚ íòc$[_Z@ÔþÜ@}ePð@`ÀÕî AA¾+’l1ÏLÄ0ŒD£«ô·þN¦ î%¢ìƒÏ ;M*MÑlÂÖGyxõZfÈÑÃŒ”è4Eã‘Ë/%rWI¿Üëf§Å¤+:ÎÜÿ²ïˆ@›&°XЀ à 0@@À ¯^É€áT€­Ò9À^-:€#ÀËÎ 2[DT]’8€1À^€…«ª¾êˆ £ë#AA¦tH²Åøå6‡ \X™þhƒêí_çŸÊ¬Íª^\|iyð}~iêsñcS=N¤ã€§š>vwÁ„¡ù…¡>!ž“·óÔ(øèã¹3{ì…Øâ’¤‡{‡gß}’ßøLf÷ ûâG 6…µ§×Tœ€d€x€ €iÂ꘦hä¼xPýè;.”ì¸Û '%…®MEÕõ!¹ä$~3!‰ ºõx!‚ H=”ެ “P0wÛ²èDŸ{/ÊçOgPú,üsùU @?¯¿·;+s¶sÀ‘ç}VÇ{ Ò H9oØô“ß’+a[ë=ô 0qªE‚&M§JÈêô÷8ÐÿËI€_1øµ.0À“†k¼¼«÷T{^l €ÀG€€EØ` `ð€€Àv€êgEŠP¤$úô¯­¶ÑÛUgˆ§óCj¤PúÍ„$*ŒÎ8^‚ Ò.2²ÅŽ9»t´…ƒJ!‘È‹Ÿ²K ™5C[d-]-JݯšXAn?;=›ót±&«&ér,'?¿áyB²ÉÒ³ÇbWv°4Æcã™Ð’}¨›³…L5ÈP­-¦]» ¤äj_Ò € Àq€Õö¡ X»^TT]R#E ÷Í„Ô½Ç AAZ¡’-<åØo‹Ÿî|œXÌà Ÿ!b8^›: 3Rkgp 3Ó2 %U%1u©1§ p¢^vv‚DÃZ% ÚìøæÃ»{Þ#Ò·ŒZx¹qºÕѧ«)ðêÍûI¥Ú+Jk_ʪ=]?¼0  ¤ýûo[T]Ò5Ão&¤oóx!‚ H=l<6£JII‰ BüÖzÃÿü¢ úè:Ÿwù\nÁûÃk§8ºOÐ3¾p@ÈŽE>ÏS˪¸%©®í˜¶úfÃ[ŸV=þÃ}ý¹×IÅ\N0àUVòíVüŠ ¾øáÃv›ö7ÆÀ`%@@>À*{}00X ÀÈØ PQ>X ðjç}&LØã@3]"€vU—…ÄHXpà/ño ¤æ{¾&AéHl‘ì[§zÇÕ@VZ­ÿÒWf£û‰~Q|°ë€Ï¾Š²Úc g_ð›§C’Þ¼€{k•ï. !ÓËh¤×¡Ûr„‰Lw†òMᦼ¸’‡c⺎ìTQš ‚ ]¢C“-’ÞŠW+:²ÆöÂ$t³S©N(ù;]ž^È#€6fÐ뽚5×ÿóó¶9?»TXû 1¥µw‡ÏT›‚”G±‡Ï¤¿‹c deì'™¯þMCC @uh{Ä•iÙS­7ÍWQhE.#LKœ754DÉ4à†¥¹íñˆj—¨òøØ¦ IDATx¨zƒÖ)ŠxðÝ1AAºÎp5"EyÃ÷ €?_}U£<ƒD›æ?~ƒ]«FyˆòœA”Qk‡ýa Á‰OÙ±üÍJºËù9²dóÄò·O ìÎiÊe¥ü±äÕÙQÇÝ¥Z¨TP~~["É\†’ßÎxD¶«}ñ ‚ Ò)Úû L¿Üëf§Å¤+:ÎÜÿ²<倣ôè“…@Õƒ9Šdì3²ê‚GU@0CŽ.f¤D— )\~)‘+²¶o &«õû.Ó}èÒ%KýÉýHÉñåATÊTe:ºÒd†‰þòiÒ×ÒR„ÍW†'Ÿ{EÅr¹µÃÏr¶+AA:I;“-ÁGÏÙc/Ä—$=Ü;<ûî“|¢AñQ' …AQ¼ÝQÝnÎ/öb€§š>vwÁ„¡ù…¡>!ž“·óZ® €³{†}ñ#›ÂÚ×À9·¼®Y[]4öÉæóEÌÆ{µ•°8&åVÙqˆ‚@i"³HYÎD¾ú5LÝDŽžÎLªj®þ§ø­WiKWjôjÔÿí‹§¡vă ‚ H§içiDLœ*A‘ IÓ©²:ý=ô€&r~²ß,·³ú‡žn(‹ ãŽ<ï³:Þk @ÊyæŸü–\ ÛjËhª¶$À¯üÚ¬(b*›ƒ¦nÀyܤç±[þZEuÔ­ÙÓmDÕ­Å××?ÇÓŸìpx¤$ 6K41ÉÚ"MŒ†³*9’"*©*õÛ’¬âå<\êŸBlOñðÔ˜(·—×û HxÿëΜ £Ñ)Àæsj‹l>›$&%2³Áý?\W³Xí,òbâi*Ä6ƃ ‚ H§j÷¬iIß6û¾ùðîž÷ˆô-£^þ"Ab…îùyÞûqç›R«×UÔU¤Æœ*À‰:xÙÙ ­¨­“N#ÖÓ†¹S$²¼¡æìIrEïóS„ gÈPÈ/+©~ÈŽ+ei3ôE>ñX˜UšyïµSŸ ffÃwæs“c\­ÿÛÑ8«j÷\®6ƃ ‚ H§jg²Uõø÷õç^'s8A€WYÙð:?AêÙÙSNj¸±c0£.m ›N_8 dÇ"Ÿç©eUÜ’Ô×vL[}³¢åÚjN#Ä?|ØnÓ¾&@Õ‹ÈUDzbsªª¸¼¤Ç‘ûnVY9«*’„ {h¦ëC Ës_Do?ŸŸSU%Ħ»Z"m¥¨KйîOºEþÞ驲øä¿/TXMÖÑ#‹ªGlœ[LÌ´˜˜i11îO6(S{›]¿ÒŠÔÖxD‚ ‚ Ý s¶ÄÍù5|óº1ËCÒ92ƒ¦?8]ƒÏƒ3xÖíã·R“ª\5ÏU¯ ©Ì~ÔYo^À=lãúÅ6$•S5-†ÏX»ÝYZDm†à][xcó«êè^Zßñ~v' ”ì{‹Üùë»ø<œ®Ùkèb§eÕ¤Yi¹Šýê7ÊO¨ö:ƒc#·ÿú6.W@U–µa{t±† @‘›ûwö¶ˆ™CÞrè2ŽîŽº6W(âmŒGd»DŃ ‚ H7ÀúMßb4ÄÝûg¥æË»¸¸tML_ /Ž |]e]wSÓ6|X×o½Úå@O½¯ËP¾µz/Šxðšo=ÝAùþ:88Ô-2Œn A˜Lfó–]-H è¡75%x©/®¦·ïq=»Ý!: †o­žzëéˆÚAi•ž˜l‘zYŽ™bÙÝQ|{¨zƒÖëî AäGƒN&!‚ ‚t"”l!‚ ‚t"”l!‚ È·ËÃÃcÒ¤IÝòUº;Ùª÷ìêÖn‘ùÏPéGr:ë&óü¼ÐA‰•]zû.ÀM}ÿm·›£ ŠýÉôLêþÇb·#Á£…«ôW$5¾Ü×`?¾º¢õ ©ßKDú¡½²#ŸwÚ‚ HÏÕÝÉÖ·†¨H‰Í•3ЕêÀû|}¨†ªÌ¸Ä’Ö>þO{2D?à9ø¯.z˜ÜæÇ5]k|TÍT]³ûo±ÚöHVr2ÏÈ\¥ƒ®)Áã£òHºŠÝÐmhHý^´½V•=tRëiò}ÊÈȘ8q¢”””ŒŒŒ««k~þçGíîØ±CIIIZZzîܹk×®µ²²ª^dooO§Ó ÆÀÓÓÓ»)öJ¶ÀKRRت:*b5Ë‚ì¬ ï ê{ÑvÈý¥GòŠZJ9Z./Èß9<ÀÌì‚™Ù»U™U­ˆ©ƒb +hkéÉù­¼=;,å“…ž¥‘ù>·ÖÑê7 ÁŽ‹©00¯ëÞJgÞÏp ã²?üÌð>–ß¡#*m‹…‰é²f&’"’£% O”q|”‚×P®¦¯(Ñ®è+â#vÏúK¿×" éU6®÷Ÿ·ad¸Å†ÔßOÛ{ A.@ĤI“JJJž?þèÑ£ääd77·ê—Ο?¿sçÎ={ö„††jiiùúúV¯“&MrrrúøñãÛ·oçÏŸaè«S×AÉV}3;·JA¥WÍhƒ€ybùÛ'½úœ šòØW®¼Zs©²¹T§5å)Êž¸ÇÄL=>>sæÌ™={¶¡¡áæÍ›ÍÍÍ«7)///++7n\ïÞ½MLLfÍš¥¥¥Õ­ø±´ÿ¿Q‚rtÁ0#%ºMÑxäòK‰\<óÂMÉgÓ…@Þo 4âP\õà0n—­ÔÐe»fØiÊPiŠf¶>ÊkbØ';pÛd *UVËÎm÷Ó¼šÄ€Ÿvs¥³¼¤¤œî þÑlÑ1´»9À+-eÓ2µ¹VTÊTe:ºÒd†‰þòiÒ×ÒRDç*m-ßIFN†_ZÒüt4~âR¶°ÿÞœwë6Q0O×Ëe7g.%‘W-zÚÄ +îÃÚ‰Û5eIÊ­êõáx1óÕ×xzáé¼I‘öÃðŸ¿Cy@æÆ)›“øæ®T™]{¼ˆÜ€#fW^±¿ÜCcܤðM®š¨{IJ¯²Ÿõ<¢O~:LnƒW€“í3zµÁÌé~Òïú+¦ìyá9b£m‘¼‘ÏîWl¢A$¢[PýÖkôVMÆ%Ëã>73ÓÕÕM¤1Q14‡`á9ìpIæáýØ<ªóó܂ܘB)eVø2—]ÔªÊÅtVœp[2NS]JLÆÐÂÕ‰^–RTŒ‹ìöfò^´÷ä@ýå4É¥ºýNì{Q.lÔKUñ‹´Ö,yVû™·wö>•%4ùõüÞ'°[9‚ "..NSSSSS³zÑÔÔ”Á`ÄÅÅ@BB‚½½}]ɺßååå=<<\\\ÆðàÁÜÜÜ®ûGÖÞd O;5}ìî‚ 'Bó+ C}B<'oû ä~ôäÄØ³¼£ÙigæÏ`sЉ‰xÝ6U/.¾´<ø>¿4õ¿¹ø±©'Ò¦[Â8oWד0÷f2³4>`j…Ïäi¾IBaì÷Y7•7e—fmVyx)„/2†`4ăٽþøƒMaEpØ JÔ| •&2‹”åLä«—0u9z:3Iô™¿¶–oAL‚Jâp¸Í&[b†ÓŽâE¿NT³»Rv\5ÉÖtÔ;þqB¸÷ð°ÆÃ[üø ŸG\‹<åeæ¡ÂÐ)†OÏ:”'¦gFU¾zZ1ÚgMZÎ¦ÝÆ)Û½ã¸üø¬D9USe €Òw€&;$%A@”Dm\Ÿ:b÷è´ºC˜öfÚs¯ F]Ü[ý«KÊÍ™{2¤ÞƒþüMìÌæ‰œ‚Ó¿üs€6áîI;m …Ù‘Yœ× ö®JËÛòo¿ÜmKŸÅ ëG"ºɯÜ]ngŽt}š´7ê˜ÖƒÏÓ Õ )"chÆXxwÉ\5¥ßß!ˆãÜGN½²â«*ƒ™ÎÞ º¨­•㹑§îrûŒ2Ö ‰ìvQ ©‡(8çêGYr}[I鮇»tc®Ç— z Ï̈`ª÷5'žùÁcðñrƒüßíÉ‹[¼X:á^"ÞžnAz¬¡¤¤¤îªg"¢ÑIÀúkê¿DŸÿÇ÷óó{ûöí€.]ºdhhøîÝ»®‰v'[„€#Ïû¬öñ¤)%N×rÞ°é§Ò«WÂò#÷ž]ÂÙýÓ€1¿'üïä‘©õë§ôYøçòª’’Êý¼þZ¤ûòü­ÌúÙ– æò¹ËûÚ*R%U.Û·¸wðÙkÉBAÌå€è~köͲ§Ji;oÜùKõ"14ºÆJüŠ ¾øáÃv›æÛH°Y ‰IÖ.c41ίätTùÖèèZ9µ‡ó&.ÔÂÄQšÈ{™X8ÐØ²É“ˆDåÕ·’&{œûÝXG†"¥g9g<#ê}VçcF‚œõžScÆKÑ*¶ft ÀÈÉ)5Ô0LÞ^_?%5¤„à½Ü~åNŸñÛÇ5º*S_ô;ó’ •fw•¹l¾2ûÖ†kï†L¿ºÃÊLABZÛØs–vúûôbÄìVþ4)íë`ïM•ηÏ9Šðc2b%·þßÏÖ²R2J?Ï6WJÉKÔ‹DT+öí?nF™î¿ÌÄ@ARÙaÈLLËL•&2†/¢mH˜œÎѰ5«K#òcrЬ÷7Τ^5×À&ð3"–Ž=ûÖaê¹ßÕ)¢º]TCËÂÔb^/E])*•n0l¸Ÿ·½"Vÿx'2=QKË’Á¾½þRô›ûtè2Êê“wÎ\nÉmSäH5jÔ¨Üztu<¬ªêë¾|"µLMM322233«cccËÊÊLLLÀÈÈèýû÷u%CBBêohmm½nݺ7oÞôéÓçÂ… ]ó®sq„ÙéÙœ§‹5É‹ëVa23 qšÍœ9¶û¾°;´r¸\ÃO²–®¥îWM¬ ·‡^u/ãù¹:zµOH&k÷Ö†‚Ü|çæJkkË×T&¦©«AŽi6†ö¨4IÈçòÇ0lþçD…Íg“Ĥ$EnÝÆò­Š¨Ccàóx¸¤4µ™¹b¼[3×ütŽE¼U%€XÉã$ãuë¢vé4x·p“îQÇÞ0ªYÆËÊxrJRdÀc²`à¸ÕGŒ`EE2 ‡©Š0>º@ÁLU ê90ž½ LW \všþû«þš-&þÜO7ïWä–ú*œÿÜ`úät “VíkÈ?¬s"i¨yMƒñôˆ,ŽÓÐÉê5M®*­d)0Hõ"áˆh÷ÓÍ@ò¸ËƲ՛⬢б¹…ßL ͨOOÒ×±¢W/ ã£ó%œ†:7ê¢fØžûøÎŒÙ¯) ~{»ÎH™ x|“Ý.ª! j#™.™¹¿èîb§˜š–ó´¡^îZrXýã…'„eE_# çÓõû¤ ­”êGՆȑMBBBEE¥þGGǾ}ûÀ¹s第¬ž~ü¨§§©©©ÇŽ›0a‚ššZBBBbbâ/¿üÒmíùñ´3Ù"«¨«HÙ™tg¶bÃÿNI'lN>Ï9|—§ß˜sôêMf¤f @ŽÂÌ´LBi¨ >O?")«(òž¥æá Mazr:(Ù+‘H<ÅŠ·é%¨` ÈLË6C<˜­þ%M4|cðƒ[T99Éhf¹¤) gÈPÈ/+>Š@dÇ•²´ÕõÅ¿¨ªV[Ë·FGÆ€—3Ë)r†ÍÝÕBbâYoüt‘÷Ð)Û¶¼ÔôºÆ½Õ« šÈƒ6«„+¡Wûœo¢,þJ ;¤#N°"ÃK ´jÒ~vHÍz¥< gFÇrf©Ö¼åÄ´ØTíqðùÞ\¯%¦-Ï'XE|Ý¿×4°äÚ|Ÿ¿Hý¦÷>q&oæªê½¢#òÄ¥k>ò‰ò[çãäÇýfCfúÖF"ªb•!Im¹š ß_‘m"Ö\ ÍF‡dÑ,t«[‰3£c¹Æã5i »c%¶ªr¼âå_§~9,˜yjýfgYJmï4ÙíXeb“ iT%ÆÐ™ë½x.ॡ“Gø2µvü= Þñ"Ø‘á%†Ã4%«—¦£Ð Âöv òc8uêÔ’%KÞ¾}KŽã&L——ùòeUUÕo¿ýæîîþøñc8}úôž={|}}û÷ïþüyoooàóù?ýôÓ¢E‹.]ºÄãñ‚ƒƒ»¥ì*A““UÊa²ù|!.À ç ‰¾ù©™dI’F–cPääÈÕ?ÒÒµ÷   kkëºÅY³fݼyÓÓÓsðàÁ$iÔ¨Q>>>Õ/MŸ>=%%eåÊ•\.×ÕÕÕÃãz ‹F£ÅÇÇŸ>}º¸¸XUUuÉ’% ,è¨ðµ7Ù2¾pÀ?;ùèý5«¿ª0;êÙù¿ƒûݪé=s}ÖÌë/÷X„Htýe¯íãµ–ÔÚÑG×ùŒ:õ›öñøÚÃ)Ž'h’ ís(¦S¦Y8°ò¸£¯‡©0ìßUÿ&Ù¯ýŸ>™Büìfú÷Þ5çx»éV¾Ú³éLn#:†¿&5x{K€_1øµ²YC]Müm^±P]™ @1×ýI÷±¿wºíZ ùìÔ¿/TXÍÕÑ#ö °>=üÅÇ]¶õûOdy~îÃ^äxM<6Eô¨R[ëlky¢,¯€P1Wh1«a§¿û¤1Á’Œg¤…Îd¦?>1Ym{ƒ¢ë§bçî6–ÍûtØóì}‹‰Ac¨ÀO ‹¡Z¯¨Ù0==¼\}¾øyÑŸdÌLiµ³ $í¨$ì<»KÎæü-½–&k` k­Ü‹ÿDŽÛln U•é÷TbÑU(¿¿ôWr¿ëwÆ¿â[ξyiÆÂéªò#¢øœ·—õ&Ë•>ó½¸:ÂüŸõ©ü˜Ï‘ˆh&T6R*¸êñË_&’Iÿ\ü ”l¶J„‰‹ˆ¡…/È«—²„ AàçE'JZÛôjÔE"X¯r¢4õМûŠú}3qŒF½cÉÏn²Û1™¦R/6"×ÿÌ£5sÍ­T)1y¹$ÅŸÕI Ž— +4šfõ» VZW‡MÛc¥Éɹ"B0küTõöu ÒãܹsGJª&ã=zô•+WÀØØx÷îÝÕ+ïß¿—––¦®®§OŸ¶´´ ·¶¶öññ™?þ¬Y³`ëÖ­JKK+**Æ_=BS}²¬óWò2K9Ù¥œ&'›ÉÉfrr˜œ&§”Ýô}€}9ÁâWš®KLŒÌSV×Õ•è­'®«'Ñ[O\[kÛíTüýýýýý¿\ëÖ­&ËoÚ´iÓ¦MÕ¿;;;ëë뀲²ò7Ú´_¤µ÷’~’Þ¼€{ØÆõ‹lH*§jZ Ÿ±v›]ðçCb«Ÿl,C‚a»Ï.6ræÆþ/÷:ÕœÁì: ij¯âÇb ½á¿]ð›§C‚ú'ý(f+._d{­§ãY„)™ZtåÄb2ôù=àTá¼5ŽªóÛŸuµ KÃvç¯û"A’×Ó£=OÏç+«‰PäæþÝŸ½-bæ·ºŒ£»ãŸ®R$d¥å*ö¨ß8mU¾>‚wmáͯªÛýÒúˆ÷³ çÇ8È`0jÜ:«mìL˜ð±TEVD–Ázo9—5 ™4ãÁvL˜¤Œ ?Õ‹DD+€¬¿öðð¿ù™¥è î¿b”.U¨n,@n*†–S Êà_‡hÏ=®,Æë5wiʪìXŽú‹Æ]ÔtTއð_y£@÷ÇjÞLnúoY笩YMw;PD4ä3Lqô@—÷w:O,!kX›Ï»2gnƒ^Â33#JÕf÷!P´×sËóºÖ_õY«·Û†©ja€µ¯[gèСu7v¢ÓkN›WŸÞª§££Si€………””T\\œµµuBBŠ+êJÚÛÛ¿yó”””f̘1bÄggç#F¸ºº6:SùõR‹XRKÞ§•¼O-É(iÅUÑ­Äç ‹„…EÜèèÏ+)q ccš Ͷ¯„±1FêÈ¿6›}äÈ2™ðøñãGu`ýHû`ý¦o1âîý³Ró傃ƒ]\\Ú¿aÜ.û÷ËsnNï°aÕNÂÏ y/ëèd òt›àú~ëÕ.zêuÜ_H[ëls Üô7ϲ5†Т¶\¶kðƒ×îpy9àís“º){ã¼¾læ~±®ÑM9{†ÀÀ@‡ºEƒÑÁ _òðð`2™7oÞ¬¿ÒÑѱ_¿~ûöí«^Ü¿ÿÑ£Gë HKK;vÌÝݽî—êõžžžoß¾­›ßöàÁƒÿþû/&&æÉ“'vvv_*ŽñyÒJÞ§–|H+)¨h|{ëùr‚uDlµIZZÒÚŠfkG³í+Ù§&þu3O8ÎøñãÃÂÂx<ž‘‘ÑÆÿ÷¿ÿ}eH3˜Lfó–]-H 蜹Ší¨æ¿5Qìv‡tô…¶ÖÙæ¨ÚFk·1¨N$,|qwùIŠ×½a”i…QYù†Fè-Ž ßSSÓÔÔÔœœ555øøñceeeýËèê’­F—ÑÙØØØØØ¬_¿ÞÎÎ.  }ÉV9—÷cî£Øü´’rî7qk¼¢‚õâ%ëÅK IIÑ9J.5Ä©Ýó½$%%«çÀ!ßôI„t5~Òr£}GÙêSþš»Á®ó„1á¹*¦ª²è‚8ùv¸¸¸˜˜˜LŸ>ýÀ<oÑ¢Eǯ~xŸ§§ç¢E‹lllúõëwáÂ…ØØXCCCHJJ:uêÔøñãÕÕÕccc“““çϟߦ „ø‹O…ײÇæóó ×΀WVVÜPqÿˆ‰Ñô—3Fjøprí8ä»ÖUÉÙd}Hž(‚ô`bú§ù»ÓwCq>º7¡Ó÷‚ H[H¤Û·o{zz:::ÖÝú¡ú¥Y³f¥¦¦._¾¼ªªjêÔ©3gÎŒŒŒ:ëççWRR¢¦¦¶lÙ²¹sç¶rw19e×òoEäU¶ÿDa7àóYÏ_°ž¿ÀÄÅ¥åܧÒêÍ{C¾G_›l•—Üʘöp›NÑ¡}wìãÔ¾Ó±„ªäU6——Ön0C3{AÚ¨É+æ^½zÕhŽŽÎÿý×d [¶lÙ²eKõïC‡­¾ŒNUUµÑ<°Tpo…ç\ ËŠÏû¾¿äUUåwï–ß½+ah(ç>Ufü²½»ƒBÚãë’-<ÕÏAˆõÍgºtº×ª2¯ «[ˆëNX5ídʪ_ys,A¤***Nž<9räH ÃΟ?ôôéÓ¶V—[þϳ¤ÑyB¼G=¿€—˜˜·u[Á¾ý2ÆËO›&a`ÐÝ!mó5c8xúë%ë‹Ü½-%Z.Ü:Döáý ·°Úñ^áËeké£_~þ£áßûu…ü´pV§ìŽÔg NÙ£èèobÚ$‚ È„D"ý÷ßŽŽŽ¶¶¶÷ïß¿qãÆÐ¡C[¿yd&sîéc½¼û1·‡eZup‹p1eÂÄ,OOnBbË ߌ¯Ùâî¸:dÊéΛãŒ3CÃÊ5¨~ì°(â#ÏtºÆW=G4²º¼rzV<ld:g‚ H“ètú“'OÚ±aD&óÀ£Ä‰…Ò7Š *=®xüDz”‹â’%½{ww@HËÚ=²Eä†þs…ì¾ØªúQwP¿HkÍ’gÂ/Kr“Â7¹þi¢î%)½Ê~ÖóˆÊVM2³¬wNvvD’”µ|uج¸k'n×”]$)·~¨×‡O5#TDYè‹#þP—]¢b}âß³W-OÜ`àåA{OÔ_N“\ªÛïľå_ÆŠ‘I$¼ŠÅé™_ŠAz”äÂÊ…gC'ýûúÊ´êDÅý)ã'd¯Z]•–ÖÝÑ -ho²E?Šx%o9¹_M"„gfD0Õûš7®O˜öfÚs¯ F]Ü[ý«KÊÍ™{2ZyšNŸÎQ²2—¨·&# ×´3'?>èç×âOy™y¨0tŠáãÓ³å „É/ÝÇÝ/ž8ýUúØS:Ö=M2Ò¶”$ ιúQ4¼€© IDAT–\ßVRºëá.ݘëñ%_äTÂÜÒ<1)™ït†?‚ È!¯Œ»öÚÇ‘¿x“×ݱt+/ÿï¿ä±ãò¶ïV|ßWôlí=ˆÇ†fm?«ÚSˆœÈôD--KFÃ4…`ßÚpíÝéQ;¬za Æž³´^I/&´”›Îg0õE¿3Õl\žžÂËÜl¾`sý€-'XÉb@T^Ýx+iò‚ðߥ@ÆrÎxÆð÷YU„LàÖÿbÇÏúèi(ÖŽSmoDhhj’ˆÄÔb^/])*36Üo|Þà‰ïRËMûYtØ4A¤Cáÿ&í¯ ~gR~PBaéùóå•W¯‘?®»£AšÐÞd‹(.d+h0jÓ†áŸÞsðÌ̈Rµ¾}È‚¢øO¸®±¢PtÖ¸ÚG]¬éÉÐÞ=Ë·´ÿ sURÃ2"ðcRÃýl>½ñ#RÂIš¶fdŠÆJ7›à3¦ržšNWßY¸> pìMë½Æ×Yé¿c½VõóŠ×pÔ¤[èZKbŠ£º”½[è´V^ñ·£¸Ç•9 të'Uxòñ‹‡°‘GWh Û™"‚|+‚8ó6ÍÅûÅ»tê°mª’’Ó¦¸ŸeZ_0Ñ_kÒÄì˜Ë‰—½žy±ùì®é‡’-A¤û”sÝŽ½ ŒÉïî@¾{˜}çkú6/²^Ìœ]Ä)êâ¨~p(ÙBAºY\nù¤_Ì*ëî@z‚ 7£âÍ嬱űÓïNOf&wYHJ¶Aîô,¡`Ê‘·9eÜî¤'(fó¯RË—×ç°rfÞŸù!ïC„„J¶Anô4>ÞéJºð°`šê«í>µ²pEUÅâ'‹ÃòÃ:5$¤J¶Aîñ!­dÑù0ŽnqÞÄÄ|ÿ'YJâ´~ Ž€³øÉâè¢èÎ ©†’-A¤Äæ”ÿêÿËÇ»;"ög«§´´¶nUɯ\øxaBIB'D„|†’-A¤«¥±~9…n[ÚaªìúlÕo¹\SÊxeóÍO)CwÜèD(ÙBAºT~9wÆÉà¢J^wÒC`½ä7 É#¾âq)%Ü’yó2Ë3;.(¤”l!‚ ]§ŒÍŸy28«´ S‹æ`Ø57µtJ CnQõ#} Ù…ÒJ¶A.®xø¿O̯ìî@zŽœñ¶eã;¦*VÎò å|!¿CjCêCÉ‚ ÒøB|ÁÙÐðŒ¯ƒAêƽט¶|W­Ö‹,ŒÜ¼³+Dª¡d Aé »îŽü„žÓa0:ýϱU¢ËÓn×>]»œp¹cëD(Ý‚ Òó=ˆÎõ{ÖÝQtnftyðµªüä1•%‡ÔÔGHKW¯'âßâ¢+̲r\hA¥nTV1h²†‡凊Š2ù|M1±e Šu5üW^öwa!Ç'Ë2V))U¯ÌæWÍÍ̼¢­#E&×ÕðÒÍ(\¼#‡µêì~¿[Ÿ¡o£lÓ•ÿ˜ÐÈ‚ Ò¹Ò‹Y«®vJZÐ]ˆ*®˜’žüˆ…ÖŸ,)9]ZºQYù²¶Ž…273“…71òÁáüž“3AFö†¶ÎÙ9Ù‘” ›óòV)*×мU^ö¼²frÛÖüüŠJõ3­ò¡6‡”;«K¸`EЊ|z(x‡AÉ‚ Ò‰xá¢óa=ì–Z’½måϤ ¨¿’ ˆ3¥% ä{9KKHHìVQåøòò/7?SZÒŸNŸß«—ž„Äü^½úÑègKK “Ï—"‘FËȘKJÚÓhIU<¸S^&†aεC_€iª­±OêÔs‹—-¯Vuê^~è4"‚ Ò‰X<¡ U¬Ã«­;‘'¬,QüiͰõú¢»³¢ŸÔW5RýeÓ%¼.{yŽÏÌc¨2ϤÖdN•1ϘÏO|®”ÅH¹¡¿V¯”åç_Ú¤:Ë›$ARŸ_$ ÓkvM"ÙÒhŽC®QÉg–œ|Ýâ@:ýLi h‹‹s "–ËU‹ærÿ'+Ë }ŠŠü5µ>oL¡ý½˜TЪnú QEQ¾‘¾Km–vöŽ~(ÙBA:‘<]üü\‡ÃAIÞ?uàc«OäI™;ÞÜÕè%ªn_…1ËjÈMÌñ²ãŠnía šA3ìÏN|[xkÊô¿$ÔŒ„ì²’>½Æ,£0T ®n•Ð2§õ¶€âÀÃrNÍdZP$€åóÉ>29‡ßÄ^‘@Ы^±^r‘P²dònÕu¹¹\Ÿ #ãH—Ú›;CN.›Ï_œ% ˆÅ ZóF<¦uÑÓ£ý¢ý†k ï£Ð§kv׃¡d Aé\$¶d˜AÿÞ K/†wÔíL%{ÛJö¶mò%Œ"F–j<˜ÔHyÈmªŽµlWí¯ÉÍŒ.¹¥8aµ€™‡IÐè&ƒ€ªeÁ/Ê€Þv¬Ø ŒLitÒP >ßÊu_wQÅFHK×M–Ïf}ªâmTV•’²OMMBvËÊÔ”OîªÏn!!Üøjãåñ—ÅÉâ]³Çžê»œ³ÅÏ }”XÙ3ž§p”}²°õ­Á3ÿ*=âHÎ7Ðþ® ¾5ûÆí²•žt¾¢#ëü£B®q®ÌnY3EújËÝ[:h¬…jgÇÂ͈Êô™ž}l~ñýCBVÓ·õâeÇKêZ×-JêÚð²ã€"¯NðyUùÉBNEUn¢¸¢ŽSÁ|y^Þ¹ñ\ø/))P(ø<”U,ÖÁú\’B)ªW¬D ìEn\¬ Ç·åçoQVɨªaG£é©¨Õ©¬v‹‘t ä²äÇ»r=Ò·”lµò3†¨H‰Í•3Еõ}}V!‚t¥Òt¸¿b®ÃGÈ|ßLAªØ¿ÓlöL6—k"é’z}ƯTžºSnØ^Þ§ü‹ë A·D²JÉtFÝ"™Î²J€L•R»¼èμ3+è}†Iêõ-}vRºï8AY~ŽŸWÎÉE¬øW¢v­!&¦@&¿e±ª«"„Ͷ’”ü²¤•¤ä6«nñ5›eýE1ßââAtº)•*`Ø©<¡ð¶tGGðñ*Œêê½ö,ßÒiD’ÞŠW+Z*…—¤¤°UmTDO·l]=‚ HÀq¸ùðʘà7†¬Çß$ò˼›V_my¯€ðØÜ&®ÔûJÕg@\QG\Å Û÷WNògëÈ#>ŸÊ£¨›,ÏÍøÈ/L—w^˜sl¾ÂøUdº\î™TÍ>˜˜„ 4·ºL6ŸÇåÊ’Éjbb¿ÈÉ+)Ö×?V\LÅHãddª‹­ÍÍQ¢PV(*ÀL9¹_22N“’zZYùŽÅ:«¥]?²O<ÞýŠòë:º '.N°“Ú²WSßóry’zMdoJH7¾Þxeüt2±Ý¾¥d«Ufvn•‚y¯ÎúR„ ‚´Å›Cþúó".€§; å9üï8Ȉ¿4õ¿¹ø±©'Ò~ˆài§¦Ý]0áDh~Ea¨CˆçämÁ<‚Ãæ€U¢z´WðÑÇsgöØ ±Å%I÷Ͼû$¿áD-ñQ' …AQ¼ÝQÝnÎ/öb¢*o±¶#ü Ô|ó[jµ0ÎÛÕõ$̽™Ì,˜Zá3yšo’@{À}ÖMå AÙ¥™A›U^ á7ÛKÀƒÙ½Ã¾øƒMÿgï¼ãš<þ8þy2H ÈÞ q+ŠàuTmµ¨µ¶´V먣C­¶ZµV[­ZmëžXµîZ÷ª{‚ !+ ÙB’çùý"# C$Aîýâ¸ÜøÜ]ÂóÍ}ï¾÷@ëÅ×åo?•:ëÑ–ŠÙ¯k$5£Š@ÐÎUq/%¹Ø?§çA®îƒ=ÀÓâ윿¶mÚ2]&)ˈ/ˈ /È(ˈ—fÒe’¼ËÛ¥©‘ò‚ŒÒ¤'Y‡` u]_„à:ùkÞÕ]å¿tYšð°àÎaYNrÁÃ¥¢G†]GU­¿,K$Žº&ôÿÇÄ«èñyqÜ}YNŠŽ•kCÕ¾ 7Çy†ê¤5g‹J‘*¤nÐ´Š–Ê+o§x¦>ã–Îð¹súZ!P&ƒW.YñŽß°¯¢ßݾi¼­Ò&8í¦­üÂÏJ °è1û—N×ÿú'¹ê£[½ÓÕvó7̰Ó×ѳôíâwòzPs“#¥Ãçqxºz|ž‘cÏ 5+Ç[)ß5/‹ÛùѸ`—õG~èeD©ª¼Þµ©Q(WÛý:z-8¸÷Q‡/ÖÕŒ/°ê5wõ̶wƒÄ)ä÷‡÷X°ú£ö&|}‡Aß-ÿО¥~”xØ™†©õ#òÎZ/¾!Ô|û)×)«G[*f¿Ž‘Ô*A;ˆûÏÎÕ‘çÞlí¬h5YÌ ù{'ûÎâÎa5àý]–þ,m×ì´]³ä]Þ–¶kvþõ¿@±Ê²3þ˜ºå³ìSk9&6–“VWÇ’f)Š+\‡|[OÓ‘ó‹Ã.>ß1«8ì¢ÙÈ—×fØÜ‚[ûsÎüf2hÇÀ´þ:_‘¢~ÖY>n¶æÔs2þdt®º©$¨¢Ñ{¶ÄÁ ¿^uävLza™‚a ðv> ! €nçÉ“»®žv­Ûú¯«øè°íì9•¿ÚQ™i™4^~³Q¤ŠR%—gÚ±gV&Q†dÑ øºd”JèPÛsNðÖ²ŸæõÍc›yõ?ëËI]LjµÈd;ú{ñWgÿz׆¥¦rvÏúÔV—Buݯ£×tFZ&ÏÑÙªÂÄa;´u@fZM—¦g88¼Ðµs²eG¨ÕP-Z<•o?:eõh«~稜¨Š@x=Ð4ÎW¯œáØÒo­@— UYX,jf?¿¶mfx˜œ[¯@\厼Úéã–©*bùþʪêyøëyø+ÍIQ”嫪¦èºt×ué^aMec5¿{\37ªš¡×„®ÙóªÛò‹199­HÚЗKÓO yì¶Ï–D˜2(î§Y;ã•ÜÀ Ф„ZɉɌ¹•yU)lKKýa;2i¦º x$à Jò _T+p{gÉ®s·îß9½n hé[ÓæÖô²”„þ?eÞºn¢EU rbë? ±{í8UO#ª¨\Emò”Ä4³ž½\j|ð•Tòi·»ê»_W¯9Þ_<ð‘|ãGC—÷öéÎ8´o¦+à´ûjÿŽ)ÿó·2´X’: °+·ŽQª­¯bÀ« âí§Zg=ª®÷RÝ4£ªº‡ˆ@x½Üü Å:˜V„CqõÐêö vµ;9ËßÛÚ°‘òZ>².^KÖODåFN8­i- ªÇÄ¥î}'¬k®>ßÝ»w‡ Ò4m*"òí~ï‹çÇ'ÖÇ.P‚,=äR”‘W•Aä›ùý…=Y<7ËùÕ¼r¯5IsŠoªƒi­CtîÜ9__ßÊ?…šQ‘ÍDáslèÙ«¹·ü1f+ Õy ËäôÊ3Q;o%hó2ÊFÉ]Çs‡š¶NÊX¸àSn<'¯î¬ÂÓÄóàÛ5­B+ÈÏWç0÷pfô•ý-.¨)p-»¾eÙ\qº­¹Ð\È€×2DÍriÙ«ZZD7°±Fý᪲èpXKÞö p5ýúÐãœ&Þ<(êøx»xN¤¦u¨#272$=¤«¥ò‹À µi]ߌ ðJ¤=ÁãýMS•$ÞÇ©¯ SиŸ‡ù™¹þ.ÍmA³¤ïú—P«-­röFîÕ´„–„&V¶Øž‹BŠêÎö†Ñ¢{ݢń&äÖ I½z÷·AtcwÀÜCUs~ðäƯ¹-Sh±OñÕqsšß®e\ùü_ò)E)¶¶šÒ2 +[¯R` :*`´RªßËÔ\”Šnž¹TÿB-J²ñôŸ¦¯63[ú"d‡š,EMïÛöÐ4?{ݦ PÁ/#¥TË8fL3ô¾¨}šVÑb ÆÖkãðHäÔ˜æáÛºYåGÆä’Ë „Fó`õ½T«aÈ%8ùþž‰º]áí„§fûêøfâº5Î+„§äÎl­åسc%²M«h4—±¥ˆù¥‡ÁÛ»óšr1£¡uÒÀà€~Œ[àx• ï/•È3–Øïí½ÏÛ{_·yɪvgÎ(€ €ªÿ…ž£z7WŸ{¼î|„Ö»²¬îÛ€9@¹séÀÆVfâX|{iBDÄø?G騉1Q¾á_ F1ÀoHsõ’DxâYäÜ/ã0¦÷Ù;ïZmŸ·ýê’Ó€<Û·/µi·çÊ{7ºàЗ›[”‘¥9•žšMœºBcxvùI¯½•‚dìŽ++A«û¤Žíb{rv@;›7$em9¿‡6Æ/­“b_ƒ[ùM¤ÑÆVþž‘Š¢X,®že»‹NVÜE"»ù¥‹Íg*Vè„uomË,=úAçoîŸ 2aQÏM< yê¹Æt¶5äóì»[q9]ŠÈŸºê÷›ûÓÝì ùºfÞ#ÿw¡âþ&ïîŸSxXèéš´í3mgX±’:@à¸ý¤«€_kÙLc$ð;°  €Åõk®©$19×Wëf/虹ùOúõz i­±R1}ŠÈŸºê÷ÿbŇ=…|½ž½Rê«UŸôròùBçþ_(¿’eñG¾àbÌ{MþßgÝ nz^s™ŒÉÙüYws=ž®™Çà/þީ׶*&ùZò3[çé&&™º#YµµÃ{w¾ú#våÒ #½ñ¥3¹.0p;>=—Ÿµ|ц1ïoŒ­øSvíÀõ¿ÝËÈKø÷SzËø m"tüæñ×%öýífjNÂ¥åCŽ^cjÖÉjÀ5vpb€XàÀŒ€¯€y€UcÇ£'€Ïi,«_sM$Iþdìå©Ã÷=ÍÉ=¿j@ê©KL­ñg©™¾²kGC{®¿›..¹}­¥nœxðûýô‚Ô‹ÓÙ»§ÿ¯ÿÉ)»¥×ÓòS¯/³ûïP¨¬–\:qÇÄá+2Gn Í(Ê Ýà2kÌw¥¨ûRÂò(‡/þÉRù³¼Xòbò³-Œ=M*Òm<õDù±Ö?—ÇgI$¥ÄØ"Jnâ.5k‹¢›ØäÈÕdÑá°¾áµ3¨›©¾ŽšlZNÌ»ÏêiÑmÓ å\â9MKh¼²‘â™úŒ[:ÃçÎék…õ.$8¸÷Q‡/ÖÕŒ/°ê5wõ̶wƒÄ•[[œvÓV~ág%Xô˜ýË §ëý“,‹Ü·å†û׿â"9úOýãûa‚ZµÖu ¸Œ´fÝ€€uÀ)@x(xÕ©F}š«Ožª]P¥Ãçqxºz|ž‘cÏ 5+Ç[©ùÚ§dú¸Ý>_1µ›_Í[CI)¿Ù+>êdÆçµéòñøn…á©´<âðßQ~ó~žØÎ˜§g×ѲíkÕ©ˆÞ¿éj»ùfØéëèÙúvñ;y‡=Õ9›”]/+‡¤„MGóòËèܰ˜Íÿ+Jeb#.‘C—[ùî t¹j[Uƒ IDATº´¬Xòâobg"d˜f?]"ÉÃßàäIÔäêën~fNï׈KÞÙëû¶Zz-O=!ÆV}h´±%Žž3´½­Ïa±Ø¶3/‹s³òëýI¤3Ò2yŽÎV­³Ú: 3-£¼<ÛÞɾ"üÛÞÉŽÊLË”¥¥¤óÚºÚ6Ý3 X©€°X ¬Ú騨dMÕ·¹&’Äöœ¼µÏÓùC}» únOh®2ûBÍô±,¬-Tì;USŠš˧‡âòt —Ë:3=[ßÎÞ¸ÂÖãØ:ÚÖªW‘*J•\žiÇ.¿»’ Ùò<##«ï$Žg»µËíŠw_ÐíÐè¥Ù>C-<#6¥«ÇøåfF,³¸úÆ—L*¥~Kw:ÍŒ\ŠGi¬õØÒOÕd13àíù¤û¡\vKúxSÆÂŲ-üK`L^LBA‚¦Uh;4_èø-Óg^u[~1&G"§Iúriš@q8ly™¬â­CççæWüJQ*ï gYXšIE Û± ʼn`ne^.F‘”P±ŠäÄdÆÜÊœkek%{–Rã\­ÎºOJa€ùÀÀˆ†B`ݸ©‹ú4÷ª’nï,ÙuîÖý;§× -}kÚÁ\¦ÆX©œ¾ *ÿ[5¨TMXæ–¦ÅÉÉ/Î2ÊSSjmxe[ÚXêÛ‘I3•ÐÁ#yõ™M–Ã[·žúxܵ#¾>%…:,¼80všfäEæVŒejd^‰ƒÐ¥ÜÅ@ærŒMšãJMáMâé?çhR@V$¶öW¿iŒ¢¨Ïú´=2ÝϱM‹ Äub¼}'WÓ*š€³‰g5-AÛi¤±ÅHÅšË×××בg†ì\´þVÅnvÛöže—ƒÿŽ.’‰ŸßÜðýöÈr»‰eljB%„GÒÀñzïýö×|½õA¶´4ãöºyÄvŸø®Kùº‡<|ó w2JK3ïýùÍŸñþFÚq='|Ú+jõôŸÎÇ”ŠnnùÃI:ëv#*å ˜P@[à,P\ÜÔö 0¤Q.©ú4W_IŠèŸ}u½…TePvñû ‹öÞŒÍ)•Ó ‹‚´¸XVsüUN_ Wêï1î7W}³ïi~™8å¿•K‚“j™fl¯‰ÓüB~œ±ájBAYinÂý#?¾?ÿxê1›òì=?GÝN*“ŠÅþ¾÷ÓEÝ?³Ràø8½ã”½k(¡HQ·v_QÇ1ŽÎl` Ò3KkÓ7ê¼8Ð ¨Ý8ÕLÈ%8õL„XuÒÞVxrvÀ;lšMW£ÉÞ-X¨n¹®q>ñ¼¦%h;4¶ØŸ­^hu2ÐÕÈÀºçœÞC{TìN¤LÙ08aQ—6¶}–ÄõÙ‰[žÞfäWs­²à²xþkâYÞ_<ð‘|ãGC—÷öéÎ8´o¦kÅ3P§w _Ȭ.fFÃþT|¼oçGXm§í?¹ÈîÂL_+§ß>èúŽ?¿fØN ü¬{1 ‹€G€ ¦`¤G>;àí}`Æ?e%§¯wòÞ×iò³ÌZÖv€ÞŠ>ÀT¥«£¹zç©@ž’˜fÖ³—KuÛA'`ò'Æó01°éóSÖè­ë&ZP5ÆJä¦bújиR•p|¾Þ¿mHâ➆Öþß%úîÈÕÑ©Q†åxö!Ÿ)ƒ Ô×[Q»É€îÒ=3ÿõ 8óíÎÄ?úLõdÇøÓµ=d‡Mê{¨ÿÔŒõ_¨ÏEŽ(…qhkÙ"/_'4†BŽø«šñ‚¨“؀ěj²èó8kÇu\ØAŸ§ÅvW§íÂ5-¢ÉˆÍ/h‘¡+š ªÇÄ¥î}'¬k®>ßÝ»w‡ òÚå("òí~ï‹çÇ'ÖëyÛª‘ß_Øc‘õÁs³œ[F°4É…iîAÌö„̓4sl¨Ttë¿TÛ~~öüºó´’sçÎùúúVþ) 5(¦!ºoiZDu(6z> ÀR·N˜]2ûÀÃ')M{Ü©&%wϪ;_(à—éf÷[T°ø:YØ}áûžïkZ…ÈÏÏWŸaîáÌè+û[Æsš N·!´ÛÒ¢Óýoéá‡Ï‹Kó¢Ž-Zt€=*ÐOc´ù~C‰¥E 4˜Ø‹šVP F«?c×pä'«ÉåhªwdºßÔÞÎÚˆëÎ8ï7ÌÒp/ýž¦%h5Úü¨&´tX}ûëáoobÝëëÐ?YÙ_OÓšBȽ i*HºMþê/Ææ²Y‹†yîþ¸»©>¯Ùt©§¤w§_­iZEÓ’B7p–ƒ–¹´Ùž‹BŠ4-‚Ðd°Ìæí»=OÓ2B#)ÎBÚM‹PMi>~ˆ.Axk%¸µƒ/VÐÛÍììÜ€¯>¾“ÕœêjCY[.èñfFI(<Ë{ænâ®i!Z YÙ"‚ â.µ€PÀ¡»°¥/2"Ôd1Õçíú¸Û·ÃÄdEakÜÛª& EQSz;™îçdª™í ±ïv>Ý’¯å©“ÇY5-A{ysŒ-YzèÙ+1Í}Ç0 øÛk¿P*ºyævR½îTÖ"˜œ]ë {ž‹­|´åÈ֯2|µÖ=ØoLήõ†ÝÏD½Æékè0¶†aƒ¡iÄÿ§iõF^ŠÓ_cÿûêqùØœåÿnçæÄ%ï乸…_ËS'2ßÀ½hMEK0¶èø5þC·g©ûÍÅ?M3vuÒšàà|[7«üȘÜúî¤/õuÙUÙ¿ÝÎÇifŸ!–®ëec÷†ý¤fÏ+8ßÇZ[Þ ¯:*,ådö:§¯¡Ã؆ý æùC Žoѧ°É‰7ÔdÑãqÖv\7®c³⢄FßÈmé×òÔIJqJ^iž¦Uh)-ÁØb9y£èÌd35ÿ¯éÜøx±•£%h`p¤¹ä½Q­]¶©ƒ-#ŠË«-S‰øAü³öθLò=Ýɱö•ÍÅõ¹ßp¨)ÔËŸéýÿ¬ÿ”uÁˆ##Š\}ʇQ³0YÛ3ô¿Ð˜PµMVƒöS½Œ82¢ÐÚŬާ®ZÃ^…ä;šVÐ( S±ûm\þ´ºEÞÑlNÍöï`×ÑÚNŽw|Æmifk£H,LÔ´-¥%[uÃ䧦•™Z¶ÑªÊÈÒœJOÍ®—OG~'ž»ƒ¤¡w3}ºÛ*ÿ¾Eç‡>(òZ²DÆle*~6^ž!l²I”§…Eó½¼›®ÂÆ£ð\ØÁîîõ´Ÿê}”§…E2N.õÿ´†!"¼ j·œk5 k«°s(ò“Ôärh£wxZÏÏú¼Þ@\™Ãºî6n±#Ù@ 5-AKiô¿Ùü=#E±X\=Ëv#,¿;šNÞ÷ží˜`‘“ujª«ùÀõ‘e¯V¶ª‘ɹ¾j\7{¡@ÏÌÍү׳hæå‰õ„†Ê2ùÀg€9  b^¤'ƒà, €ç€ p*·„&@&`$@,ÀXÔ½bÅ246”ååªßF&‹™ãøEMë¹êù…‹9Ô¬ÀƒÇ'Ía±ç͸\« IRH8Û»½ymS¬8ìÖ¬·þg'üÜÄ}Ûv6Ù|¨LÆõ!†¿ü–X! ôÌn+—ƒ7eS°eðt5…bMå›,ê?74ALVZD¶…G­qT‘tá•UÛ{¹|¡+˜ãÔcÛêk… ²Ø¯\¾|ïçk³~gª;ÃÄ}Êâr¥±®ô´™-0˜×ý£«^œÉ‘¥D®úxµ§åçº&‹úϾ]’¿ià¬þæ&ÿù+šÂt5½ê–EͰ›7ú›ã]çò¿™}%O‰6¦V Ò¨ö >ÿ¯Âò-‰¼ÿͨevF3Æ‹ú;ÿLªdf”«•FLµY´þÚ¬A‹Ít§ Ý~_*U5*Ç¿F®*”·¥tx_NJÍ>¦e¦Edé[”<œ;¤º6¥ÓW{ˆª²ªI,«6Œª&´ÚdUæWß‚6’ÑÂï“I¾‹Mþˆ8¦& —ÍZ8ÔsÏ'ÝÍ ^O .Çù>­ÅÒ *iZ‚–ÒhcKøá Ã0´¢Xtá[«ŸLÝ‘L,» ›·zúåGëÂʼn{¦N=Ûù·]Ÿ{Ö Þø²ò'f-O¾ïiNnìùURO]Ê`F"–€Çç)ùrBL È|1€P ¸œÔ_ª àÀ àpØQ÷qy|–DRªÖØâºý–¸™Îþd”u·C[åa£»z½uG¶•Q¬ú³M›J•ø°Ô¢½wM/Ÿ"îÆ„¡ÿ¦¾5îrüšØ^·ÿ÷_T[»vº=I 7µïdS>.tlˆHÜÎÞ‹ PFSÏo¤™­ŒâÏÔ«Ã,þùkñ))YTJŒ±•—E­qTžŸÉÜ¿7p'çó£?äæýtþ'§ˆ£Q¹ ˜¬ÔÇ)’›ç³ú¬š—˜¾ôi?Ìù琢Ä[ï÷Ý{Ãõ­ÃWe†2$þø¤Ÿ“ä|?¨÷ÖcÆ»îüœ9s¦Aôég†ÓN}þ©µùW·61ÌÖÒ },«(¢““eÞ¾ÃLص$S²r}_c%Ú(aÌS’åÛtñaE];ðHTï÷®'¯Ï }ÏíâîÖ§×xð«R«%?Î.¾q¹h膉ϯðˆ_¶.²TÅP¨ÿ]XëpWY[Êë¬2)5ûØ&:%ª¬øÊ¹üAëªjS1}µŠWdU“H'¿FUCT•*ùëêAë ÈŠÖ´ˆW¦´‡‚pbÊÄjr¸šÐ×ݬi§ü_G2bVO—7‡¤"uK‰­™Wv PÃÓ5ÐãóŒ{­Y9Þª¶…Å.cÑÀU``èßyÀ V&€°¼Þ#A>À à´Úv+¨çÓDr+2´½§¿“~=&«—GåND&÷¡(¾4q‘çg/6lMë¾2]ÁˆO|Ÿ¯çÚÀÎuÝÍ(È"’ž <~ØýîØNFú†æc?ö1O“‰ÿùöȾÿØÑÛ”gàà1ë#Ñ=Q->±èï+¾ïÿÕ××QÏÐÂfÌòI_td)âJl»z+Y«”<Eu^hô;íôù”*m¨Qƒä±(ÆÞ¾ƒS|ø»bÇíýÊÃÑ£ïÜaòÛ°{)ÕV_jHž$EwúyǰaúzBË®Þz,E) •ã_­ PÕ–òá­Jõ>2ÏsL;­Þ=b„gUmõ¢ª(ŸDyÕaT9D5&«"¿Šw A‹É‰…¼¥§VŃ=ØÒéêêÚèóvuûnxSâºØî./µ©jk=[ªhôY qDð¯W¹“^X¦`è¼OCÈ Ûyò䮫§]ë¶þëÆÊþŸ6¾,ÛsNðÖ²ŸæõÍc›yõ?ëËI]L(Н+@F©”NÍ"©€°«’BY@1`˜¼H´êÜè ¬b€2€€ºöˤRZ`ÀWóH‘þ3iÁ;{K¸mÅÚx*ØÊòX¸0ì'Çê³£x|?…5䣌ÓþæU«”<>~Ž=ü{…EKò XÞltPö84ù«½ayfYÊýÇìöSÌÙ€8úÁŠï/¼’’˜-•)†Ò›4]ŸETx¦©·•i-½*ò³¼>Ÿôkö©™}~¤¬í½ßoö{cŠ=J‘ôé7¦b9eyÅ%¦BÓ²g›Î¥åm4ý«²VJoL/=é³£gX#t4¯ÞhÑCQ¬‹cG%Ápèè)Tÿ‘Ã_<¨UhC~µèè)hßÅHbO_á?æªÿ¢Â‚©±¹~µé/}v\©ZŠŽz‚^#šPÀ”„=ÎwëoÅU>ªÆ¿zT¶Å2WR§šQRD…gðúôTS[=‡¨Ú +ŸDVÕaT%»ædUäW>Dµ›&hYQšVФdGck ^ßÏTe¡(êÓçÎmfïŸ]òŠ –t\eÝêB!$&3 CiÛm”Z@#Mx:~Ëô™WÝ–_ŒÉ‘ÈiEÒ†¾\š®°=ä±Û>[=`Ê ¸Ÿf팯½/ãUÊ·w–ì:wëþÓ늖¾5í`.ð%ùÊö€Xú@&À¼ø¡‘€PTFcIÊ S»ŠK1ÿÅâT<0Xä4°¡nK   ó 9Æ&ê¢QðF¯£+Öö6›ueS6o¶KÛ_b63ÌæÈš– È}(vñu0©^S\”)˜W̤"6ôï½öíXòÌ'OY^íÍËÍɽÇ糬:ûp Žœ7t߯aGüR(Ý,‹ã«o×£3t~øÓRw«šíªÊPBÇO×ͼùàÛÿg~uæÆn*yø£t3ƒŠ‡.SøÏ_‘&#:v*+Ê–9ý³™y¹µKñánz%EÙ¥ºf¦5Þ†ŠðÝNµ `Füøa®{7{Ý:´U¯?~˜ëÖÅN0â’ÜRžQ…¦ êÐ9ô˱ª»š)Q®VŸ)yü0Ï­›}…¡&K ÓíÔÙ„¥t(Tõ.¨lKùðª%:?üi©G;ÝÚê9DÕP>‰9U†Qµì“Už_Å»… Íä¼qá7Rœ™}ãÕâjgctr¶ÿØ.¶¯Òee±Àïͼ–G=¥ŠÒô’tM«ÐFil1R±„æòõõõuä™!;­¿õÂ>‘„®˜´(eÒî=wï Œ[ðáªÇå Ñe禘 †lÉ`Qö%e¿Ÿ°hïÍØœR9Ͱ(H‹‹e(¡µNvzNíß^€0HJûÀû@àx €< XüÂxbž@0P<¾±^ Ѐ> „ëë3F陌¥µiKfbÑg¶=:°é¤ÄpôuT1'ÅÉ!Ñü.Ý-kC”‘…»yæ?»£ž—H’n_ŸxòŽÂ¦“7  årYÜÔ±$áÊå©ÓoÄ›Ùu´¡èœ´§÷nvmMvûÆçœy`ëÜÝ‚‚,=ü™¡·—n ÛPE~¤íÚ=já[q%â’¢øˆô4–™« òŒGa²¢+·ÿŽ‘ˆ³žŸZ¶mþ#Ÿ_¾qm;Ù§øýqdŽ\.Çß¼½xÙƒ4”ж£}æá?DåÉKž'þáÄЙéÅ:”¢¤ö|ÊSBÃu;vª0-Uö¥F UJQFÝ]³ïxš,–ÆGþü~ð™ö£ãWRj!K}ÁïÔ¥bJ"ÑÃB›®íYʇBÅø×肊¶uV›™j}”¥‡Ç:unS]»¾CTm•O"¿ê0ª"å“UŸî´¼7ÔVˆ9ƒ~H¸¦&‹®gõ{~ßÑ q¸Øì]c3Y¯º6ÖBI)NÑ´m¤‘ÿðØŸ­^hu2ÐÕÈÀºçœÞC{è“wqÁ¤õÜùÁËz²„ýWÏU¬žôÝÕ¦©ÊêLþÄøâÂa&6}~ʽuÝD ËÄÙY7M”Qk" ØX~@`6008À~ °€@ùN% øHÚ}€/Ò=€…@ `̆Ö=DŠQ ãж¦mTYXÂGç®(MˆëжƒŠ-S²ˆ„‡%E;‡Ï¨ ²Åq8pMè¸|óÇ“£Ì½µ,£çHGž£ÇþÓo»HþXemõ¿‰;e}‡X|ÚqÀ²íöÝ<Ó ™X/ûp§ÔÅ[`ÜÍÙ›ERêS±¥{Íw„Šü”ÙÐ^C îLëó‰Ù÷ã6ÓA‡&æD1E)R\-6Þ5d™Ûú%¡¿ý`´ŽãÂýÝÃŽô¶›%tXñÑÆ¼žøX±ŽÃ½ãz<=ÒÓj¶CßCÿ9tnOœÞŸôu8·Õ‚;ÕrjDÕ“‚trò£<ë.íØjµ¡F ’ª¥8¶_ï×ùî/ãYv}ßixi¿Û± µtJò£|›n*÷%Æ88v²”…ªñ¯Ñm)Þ*«öQœ”úTbÓ¥} mT=‡¨ê «šÄjÊUM¨òɪOwÚFîjl(JÞQ¸ôêN•êhszN@džâŠ{·Ë)ýØWÐײ)”jZ‚6Bõ˜¸Ô½ï„ucÍÕç»{÷î!CšGS㥇\Š2òïãÚ˜ òÉ€ X7•œRÑ­ÿRmûùÙóëÎÛ„(nÏ[2LôNÒÁ®ÍÚn²›½ƒ°ói`/-ˆ‹JhÚ;‰çÎóõõ­üS(lŽp”­—5Þ(|Ó—(l»cÌ6;¨É"Wп^ˆÙ|5ŽVqÞi£ä®ã¹C•*:x|0,e½–v­iÍG~~¾ú sgF_Ùÿæ,ås-»¾Õ·Q–Ökïà7´¹--€‘DF¸t²Ñmæv_4Ÿ–’áfãÞLW`^d äe(z®i¯Ÿ”{Ø€ð£j²pجoyOö5¯G .Jh´dp^k¶´—ÕŽ¸GxC"È*§‡Eó|:Ô½Oìõ ˆx˜féee¤-/¡I$i×8I pøcü3eê¶Xõr1=;·w:\@§Ç9>ã´ŠkyÔP$+Ò´m„|}ØoÄÛƒë²6îWÍ5Ï´yUË‚ØÊ!“H Sô äá^$ߨí°j¯*‹‰žÎŽ n;n$¬<U&Wb‰f íºÓ¤ÕÅz¨M‰Z³µÕÒt+[ò Óæ¹|û¦‡ÊeDëW ¾ú¼¾ËÄLήõ†=ÏÅ’sî¡Å “hZA³“ƒmqg£ú\Ÿø;›áçlV+>][‡ž¾.m-Šbq#*¡ÉŒ-¦$.NêîS÷á»å0{^Áù>Öõu²ÐQaéº^6vZuG6@ ¨£µ­l•£âì7Ø7%ê\ÞÖF'gùv}ˆ‹âó׎¤Š©š×·NŠÊÞ?QSÓdÆ–<+Fdäí) ;=ªÁˆ##Š\},µí\@ ¨¦®lUsýUM]Î/c;l˜ÐÉ€Ïp?°Ýmþ›~r³Þ”ȉQ Mfl•dÅe[ÔŽÒÔÚ‘§…Eó½¼…d\BË¡u®lURœŽàѸ¸T} ®·;XŸžÑ­Í/6d«ÖK¸Y\P«Åá·gýŸðsó[7OÙØxP(‹ša7oô7Ç»Î7ä3ûJÞ–ÁÓYÔŠ5•o²¨ÿÜÐ:ôÛïÍ?~R€)Ú7f.ÇjïÅ2LÒ¦µ–ƒ¯&Ñ€4bªÍ‚ õ×f Zl¦;]èöûÚPiML²Êºðʪí½\¾ÐÌqê±mõµZù¨*XYJäªW{Z~®k²¨ÿì{Ñb ,j†ý‚ÏÿS¨ÙÓ«ŠÚù™¬´ˆl  'biìÃÅ+=mf æuÿèê#âÙ&ÚHk^Ù*‡¡qc-v A^¢š\v&ºÿµyÐ\šZ:lº3µ>ml)ânLr"ypàåØUa[ìÏ~w5ÑÍÆ:9éQfáí;Ì„]K2%+×÷5žz~#Íle¦^fñÏ_‹OIJh"Jå€<âÚoaF.Š’| mþ3cä—¾ö,(Dɳ‹o\.ºaAâóÅ+<â—­‹¬y{e¤¬r&sÿÞÀœÏþ›÷ÓùŸœ"ŽFå2õ)X :ù~Pï­ÇŒvÝù9=ræLƒèÓ14œô(ߦ‹ ¨ÙÓuÎjç—E¥Ä[yYP‰·Þï»÷†ë[‡¯Ê ÿdHüñI?'©ûÚD š[夆`S«z=[’ý(‹,kUƒÇ®; Y+¤‘ûÙñ‰ï‡ z<×ÓˆLûNòý7ÙÛJ<EuÞxhô;fÕ·oQœ6í:òü{oª˜†ŽÐD€âÒbZroÍ-£™#ºÿq/·É¿s9XÐûÌ >É“¤hãNÛw fBº]½õXÏU_$^­rnVBŽ´£§“>ŸO¹ö°³¿êŽT+È{iz2â‹þ¾âûþÃ_»šSôÆ,Ÿ ä¨(ÆÞ¾ƒBž2âãJò3Éžç¹u÷äŒøŸoÜé;1ìÇŽm(ÀÔcÖG¿å0öd›@Ð.Z¹±*ÒB™ŒŒp \ZûÅK¢Kt+ HVoÈÊ–Ril•>;~Ž=â GEäCº$;—ãácÎýäA Õäð––8úÁŠï/¼’’˜-•)†Ò›4]ŸJßXSRZwkÍM÷ù¿ÚÜÚ-ÉÍÉÚ»>ªûœ÷¼Øè¨)è5b  LIØã|·þV5<Á**gy}>é×ìS3ûüHYÛz¿ßì öÆT} VëàÑ3¬‘:šW+HG?HAû.ß_öTy~ETx¦©·•)Hž?S”–·Ñô¯ÊW)½1½ôˆ¥E ´yM7BkG…q!éB3 Ñ~ˆ±¥”Æ[LqQ¦Dà`\aŸÈcîí 1êÉ#~ü0×½¿}Åu1âÈyC÷Å}td‹«Ÿ{®W·ˆ9XB]Ã’‚3ëžH‚¦ 2â>Õ—ˆ.\¹”ÖmË»¦äñÃ<·>öúåõÈRCÂt;}mRÍR]9%tütÝÌOAç…ž3pc¾ýkýÙ•å IDATõ)ø²ƒ%EÙ¥ºŽ¦Õ½¬ŒøñÃ\·þv‚¿WöTy~:?üi©ûGVœò 2§_bÌs%{å ‚–C“ÕñY;-¿4?4=´ùµh9:,bl)¡qO~ÊÈÂÝ<óðÆG±’Ôл_ e[µsfAž®Û±S…Fç¤=͸w³kk‚´Û7>ÿàÌ[çîJ¨g˜r÷ç“6s§X±)¾‘~Á¡_î[Îìߣü6AYêƒ~§.×Î(D¢‡…6]ÛW‹U¥¢r¤íÚ=já[q%â’¢øˆô4–™« ««-1QBÛŽö™‡ÿ|•'/yžtø‡DLµÞUï©òü²ôðg†Þ^º@ m;Ù§øýqdŽ\.Çß¼½xÙƒ4€dÿ˜Ï Ç? ge ‚ÖÀ'—|WÁ¤-,ÛÕNþ/ù?9C¬Òš•-¥4r™EÇå›?Xžßémµhà·¢öo9ñ]mÜ)uñwsöæK¨gXXh8aðhS ßÈ@– ï/&µ©°ÒR’åÛtëPQäqbŒƒc'a5{HEå”ÙÐ^C îLëó‰Ù÷ã6ÓA‡&æTŸ‚Õ;ÈqX¸w\§GzZÍvè{è?‡.Ãí©ª½«ÑS¥ùI©OÅ–á08Ž ÷v;ÒÛn–ÐaÅGóz~àcÅäÙQÏh'3²£@ h ºm4­@›ðR²¬à‚ˆø• à4-A¡zL\êÞwº±uܯy÷îÝ!C†4&@¨Í¹sç|}}+ÿ ÉêËk#ù>¶Ô´­aʰé\#­¨¬¨Ïß}dô›~C]ÃYî¿|d[åæéI~~¾ú sgF_ÙO6¡:º&šV 5Ù×¶´\I¾B,-¥XéYiZ‚6BŒ-@ T‡¸+ñ|[iòEÑÅfÒR°Ô³Ô´m„[@¨Ž@V#½i(Û°%–‰o=¿ÕüZ´Å"Æ–Rˆ±E „Zˆ'0°‚oíäë©×K$™Lù¦\¹Q ÄØ"B-ˆ'€Ç(»¹„øUa¥O6l)‡[@¨…ž©¦hÊ|ˆR…ôZʵæ×Ò" »ãUAŒ-@ Ô‚HÔm‡^µ“o¦ÞËÉݑʱѷѴ-…[@¨…С…6Þ/k¿±ØpE¡áŠÂžÛKÎ<«ŽÀ0ÌÒ+¥Ö¿ –öÝU‘©PUѧ2¯?Šy?zýQ|,òel…¿žÈìÖ™ü\8ïüËÍR‰ù´Û†âB)Ó©uã1,vídâCTƒW/MKÐRˆ±E „ZXwlD![Cjå@^ÈT½©zýÙ£HÊíª_n–­¹]öû0þý)z–úÔ `q‘2 év²|ÜaɤöÜÇÓô&µç–ÜM‘ÈÓŸþ+Y=ˆî½Ýe§b*Œ°é§$+ò yJ¶U5ž£j§ÉhÙ•”+¯¥¹7SMKÐRˆ±E „ZX5ÆØzÛ;Ì•ëÖ†íÖ†½|__wR ì»[ömï]On;söîѱŒÙ¦$"躻eƒÚ²ð&|²A^ÄØ"B-LœÁ3jtiÍ—•ÈÐӎϤ3ƒÛVîâq¨>Žœ[)J<‰·“ƒ_Æ÷Ò–s+YÀÕ„%–1Ó¹æ~ª¢½;WÂ,ù¯ô÷¡üF+¬÷a`+1ãˆQ íL•\×M(‡„­#B-( Ví‘x½¡åÂ2=·—”Ê¡¯ƒcã^fì[Érú/}z”¨€®]6½˜±Ð¹`¡ÏJ/f ¨Ý£—Hḋ¸C\8Ÿü#™Õ]'!Ÿy@,S`i_ÞX¯&]âòTrQA+.']nÊVÞ,ˆ±¥bl„FHHˆŸŸŸ¦U´¬:4ÂØr7e=š¦Ÿ_Êy*ûèxéÕ  ã©ê¾*†ªmVª²½ãÉ}ç…ÇðJ¢<,Sñû0¾Ëúâýc–úT÷m%½ØæzMä«ÑÑGÛþµ“C2Bò¤yMÓD½É:™•q8£Í 6V­¤lMÉ¿ùòæc³ í’¶J Ü/È<–Y–Y¦c®c1ÆÂ°‹ayzþ­üôÃ錔10¶_í½,«,qubÛ¥mÙ%gêI»6ÄØR 1¶B ƒXZÍ„u§FÒaS.&€®ÖìûÏ¿Ý)[àÏ^ÌXTäÉW[ÁªÄRŸJ/~¹â•YBW]+G*gfœ*Ýû® 6—–ÓèãÈàÖ†u7Eñ¶{[®ƒÁUâ ¼ ºÐ4õ×q¼8÷J.ß®š}}›É(Žr«U+NÞ˜lñ®…agÃÂ…I&9/rÖm«+/’§îLµýÔ–kÆ­éyèt4ð|Ïs‹÷,^ÅÒYÙR Ù³E ZeeeeeešVÑ hÔùª0€T'!e©O]ˆ——'–)˜«‰r?[%Ïõžvì ñ/÷r—ûÙÕ̶ìšt¨ §³[ACNWi”) hÂøÊb™2 ÓÌ>DE©"esŠÍÇ6,ÝjOjŠCq…Üò޾ò“ìóÙúÞúf#ÌxÖ<³fúžú9çs”e•±l#_#]g]=O½Òç¥òoçSʨkã·èp4t4æ¿J o6ÄØ"-ŒM«h´i žaƒJ,ºTz]$O̧Ã2ß^*½’¨˜èÃ¥(j®¯ÎO×¥Ç"eᙊ ã].õ¾O…OðÃc’…+BgÍñÕ9'ÿù†4*[ñó éÅxÅ\ßj‘©ø;BþC?S‹¢¶?(;#‹Ê¦»Y¿ÒªÌK8¸®ü(ëQ–$«iš¨iÁi ô½õk¤—D•DΊŒY“º#U^(WZV+Ño÷² ¾¾8V €gÁ£Ëh‰H"/–K$|;¾¼Xžy,ÓêƒW=EØÛ¶÷+ÖðfC܈¡…A܈ÍEÁ²=D7ê_"£˜™tL’VÌñ¨ö¬³uµå˜ßKG"gfœ.Í“0¾¶ìó“t ^ÇJ* YTÅ×~?;α‚ï.Kÿ'mkÂú{¬À×öåCŠa˜©'K×áééP\j×hþÌÓ¥R9~Æ·1l¢µ—ÐÑ«ÜÌ>Äü;ù‘¤ö~,ƒöFÝŒ¸¦Ü²¬²Ì£™ ?'´]Ú–Å­Ùwyœcørè8†y[m;Å6ek SÆý„>)ÛSLšÈ²eI¿%1 Æ|´¹Q·Æ,qõµëÛˆR­bl„F¹QWWWÓBZ6dlm%PšNQÔÒ¾ü¥}•l„ºTͲëÅUu®¢¨›ŸTË<Â;­©ãly)‰eŠæ úP–S–¶/ÍñkG–NM+ÊÈ·ÂâÛòN‚˜¯bŠ)÷V;kðòWÃ.†•›å‹#‹¥)Rë¬cÄØM³ãqâ~ˆÓs׫j¨ÕCÃNæÙá×z nDРnÄæÃe ¦4/l¸ ©žžV’Öl*JK…Џ¥qោ‡.Žç\Ì ÿ$œ¡«mLã ¹\SnY†’ý‹£Š¥¬räErŽQMû‰–ÑiÁiÖY—e–1 FÏCgÅãYòÄq ¾ùÑ߯ŸÃ"k7ê £C ZÄØ|8ôÏÒMëh.œû‚¯d•¨™}ˆz^z.?ºTþ™º=UÇRÇl¸ŪvöP^,—åÈ8B%Ïq‹ 8¢ØtˆiùŸÅáź.5W‚³Ndéûè ‘/΀2rJ" ÕA?»~ .ÓÊ +[¡…AN#6l.\hZD3¢>Dl›o˯ü¡t(Ž>‡oËW”*Ò¤‰cÅeYeőŢu"¶Û°s…O0eKJú¡ôòßM™‡gÊ’>—fÊ*~ZÜfp›ªM”¦–Ü+°x×ÏŠ ¹Ws‹IÓ¤gå¾`UpXœ^6½š¢ßo2de‹@ ´0ZaPÓ   üüüãÇW¦\¹r¥_¿~yyyB¡ðõ¶í> G_oZ‹÷aµ“£s£“Š’š_Nm(%M‘ŠnŠh1Írô<ôì¦ÛUÇ*Ë)«Ü§¥ëªk7Ý.ãHFæÑLs»évºm_®l1 ó|çsË –, K‡eó©MZp#c¬&Yq¶ ®‹EƒºóµnZ¤±%K½eàßÇ­V¸;ÕÐñkzw¸ðqüéÉf¯ç‚ø&Eø_›¼êRÑÍÿžÛõëiÿÚî#^3­ÍÒÒ0®Áâ€VbàÂѺ&µ“›?–i œ:—ÿÂÒa9~íXg¶rŒº©:WHQ”ówÕ2v44ìØ°0• sRb¡jÐ݈LQüÓ4cW'%–¿Æß`èö¬& n×0hÀØ®©æëßÖÍ*?2&·á^yAK nÄ9rÄÛÛ›Çã9::þú믕éiiiÇNNNûöístt\·n]ùKK—.µ··çñxÖÖÖ³gÏVW»ÀÎ}_£zíAÙ}ˆ —O«Å€kð–ã[šVÑÐzcKóKƒ·wçUÚOtn|¼ØÊÑ’«äU–ó—7ŠÎ”¯]Õ*ØÐÀà€†@| +p`7€ÉMØd£P=€Ý/þ¬*`›:Ø2¢¸ŒVð=•ð†BN#V%44400püøñaaaK—.]¼xñ®]»Ê_úðß?~åÊ•#GŽlÙ²%33³<ýðáÃk׮ݼyó³gÏŽ?îããSGíÆ¾Îh žo×NŽ/ˆ+ˆk~9-…áÎÃu¹$KÝ´87"“ŸšVfêÓ¦‰b¿*sµ@ °Â{MKªÊÈÒœº“š­°²Ô’Q$Dët#ž}ºjÕª   ¨¨¨‹/Þ¿¿k×®¶mÛæêêZ^$))ÉÒÒràÀ\.×ÞÞ¾{÷îu´í1>䥯£_Ú‚]è›×N&ËZêyÏý=MKh4ze+ÏHEQ,Wϲ݈E'“å@'ï{ÏÎvL°H€É:5ÕÕ|àúÈëýLÎõUãºÙ zfnþ“~½žUîÑbòC6ÖßÝ\§kæ1ø‹¿cJéÑ:s·ød ‹¢xþkâii^žXOhÈ”¼*¯t#Ö.X]‚’¶^=`1 nÕr#æŸæ€.0ˆQV<˜ X&À4 øEú Àœ/GÀ,E@ùú”è |ôø@oà.P€?jãeÊòr‹5æm%^‰ÖéFìׯߣ*lÛ¶­<=22²W¯—gÁzõêõìÙ3…BÍáp:wî\žîââbl\quÝ{ï½'‘Hœ§L™rìØ1¹¼®un¾!\5}—´ í8‡Ø²è`ÖÁÍØMÓ*Z6¶„ž0 C+ŠE¾µ:ñÉÔÉ4À²›°yû¨§_~´.\œ¸gêÔ³Ûõ¹gõõ~ù“ ³–§ß÷4'7öüª©§.e0¸câð™#·…fe…nð ™5懻RÞ»{¬ôÕ±+—fé/)‰X¿ü¢‡Z¯¾ìš—Tµ@ŠÛ€¢jýp±øAc‰&™@(øci­<ãDà&t®½xéð;PL¦’‰  .'€Uª: ¬ÄÀ5ÀØ0À %“ÌåñYI)1¶-“ÖéFÔÓÓs©‚My:Ã0õr+Ã05~©ý’]ttôü!f̘ѻwo™LVGóo¸'‘RêCL)J‰Ìl~5-…÷ÜȲV}yå=[ÏÔgÜÒ>wN_+ÊdðªàÏ%+ÞñöUô»Û7·­Ù¥Ãçqxºz|ž‘cÏ 5+Ç[QPDïßtµÝü ³ìôuôì}»ø¼Ã‡ÔõùoªÛâag¦Ö Ë: ¸Œ©Uc ðÀ|«§GW € | ä5̶Hà°pŒ€©@åÁŽÙ@'€| ©UJQ€08]%ñs ›²)U"›ØY„Lët#ªÂËËëÆ—7êܺuËÍÍÍf{xxÈåò‡–§ÇÆÆæççWf#GŽ\¿~ý•+Wnß¾VG3Ãa`ýäk6]`dS;Yã絃!ŽJ¢í”ÒhcK|8uêT@P¾¶k×®íÛ·‡‡‡ÇÇÇ ‡:šasÑsF3tG3x‘sˆ fTÛQ| !T_ilÑñ[¦Ï¼ê¶übLŽDN+’6ôåÒtÅC_»í³%Ѧ ŠûiÖÎx…’Ò·w–ì:wëþÓ늖¾5í`.ö´±Ô¶#“f*¡ ‚GòŠ¢ª®‡ó%ù…/ª­ñjUT¾¤º­†»ç TY‘ªÄÐ2æÅ ÔøP[R Eyõ5‰fË€6ÔÞUÙ{5«Wta~!ÇØ¤QÊ‚¶Ò¹sçƒ8p ]»vK–,ùᇂ‚‚Ê_Ú³g……EïÞ½ßyç)S¦ðù|B¡pëÖ­½zõjß¾ý¥K—þý÷ß6mÚ¨k£œ.AJ¯²yPô!½$=,»®¿Ö —ÅýÈû#M«hI4ÒØb¤b ÍåëëëëÈ3Cv.Zë…ÃOºbÒ¢”I»÷lܽ30nÁ‡«—ï=/;7Å\0dKƒ²‹ßOX´÷flN©œfX¤ÅÅ2°½&Nó ùqƆ« e¥¹ ÷üøþüãEËØÔ„J(¬°*(¡µNvzN¹µUóÕª=Sù’ʶêt#6/À˜$¥À}à} ¨zO 0ˆ ­ÀÕJÐt€`½Šl,ÀWaŠ1陌¥µ)9ŠH ´víÚU5|<€¾}û2 S>~̘1eee"‘¨|Y«++«Ó§O—––&&&dffº¸¸=zô;w Š‹‹oß¾=`@ý.äá ë'MÙ+-Á²=Lœj'_JºÄ*í2ÚRÏRÓ*Z4¶ØŸ­^hu2ÐÕÈÀºçœÞC{è“wqÁ¤õÜùÁËz²„ýWÏU¬žôÝÕ‚jïW€ÉŸ_\8ÌÃÄÀ¦ÏOY£·®›hAåxö!Ÿ)ƒ ªÍȯæZeÁe•*d™8;릉2d€’W_¢æ%Um59,`?`øm€ÙÀ8À@Y;Àpþª+ô€0ª"|¸JN#*rD)ŒC[Ëõƒ@ 4ŒË—/Ÿ8q"!!áÖ­[ãÇwttìÝ»÷+Õè;l^©ÓTøɆ-UpXœO}>UõjPPPù.—kaa1hР;vTº¾Z-T‰KÝûNX7VI|‘ªÜ½{wÈmÙ 'K¹eäßÇ•8ÂN©èÖ©¶ýüÈu=„–ƹsç|}_Byíw¶|Î;÷ÕW_ÅÇÇøùù­[·®î½Yurbìi uZÃÌû0«¿ [’=àКií&‚RƸŽYê·TÕ«AAA;wîT(gÏž]±bE@@À‰'8œ7ðK~Õs'J™{83úÊ~­ ¯ ®e×·úK«qðü†K‹@h 2$<<\,gdd;v¬ ,-~³AµÈ‡rÌDULð˜`¡gÑ "ýû÷ïСÃÑ£G†=ztnnîÕ«W/\¸7nܸò<ýõ×òåËþùçÐÐP{{û7–§ËåòÑ£G÷éÓçÉ“'·oßž:ujÕ¨r-ˆ7pM@ ¯‘^suRÓ"še¶ ¤!é!ͯEû1à¨Ù­¥'Ož\¼xñÉ“' vvv‚ƒƒ½½½ï߿߭[· 6Lž<ùã?°dÉ’óçÏ(,,,((1bDÛ¶mxzz6i‡š²²E „†`× jò´Lœa©äîËI—åL]WµJfwžmÄkLøò{"##íììÊ--^^^B¡022@tttÕ;:+711 2dÈÛo¿ýÛo¿¥¥¥½r'41¶Ð@†®Õò£Ç¨ð!^L"±L•ÐÞ¬} {`ãÊFFF:99Õ¸Z Õ/›Rzë€;wÞ¾}ÛÏÏïï¿ÿvss»sçNã4hbl¡XúÀwš¦E¼2Ê|ˆÅeÅ·Ÿßn~-Z‡â|ßó{V£ÎF\¾|9,,l̘1^^^IIIÉÉÉåéOŸ>-(((÷ º»»ß»w¯²HHH57n§N.\xëÖ­víÚíÛ·ïú¡1Èž-@ 4œ~ q EÏÿßÞÇEUîqÎl,²È&bЍ˜K âž™âšK¥–×rËòV¶Ûn›]«[·r)Ë}O͵ÒîÕÔÔTÜEADPf`Î9÷ÔTÀXæa?ï×¼JÎò;øš¯Ïyæ9ή£¨¼CEH“ÜÍ[ã¶fkRË[¦ ¯;¼–OÛÌ“ÍfKHH¸yé‡^½z >Ü`04hÐ`èС~ø¡Ýn7n\ûöí›6m*„xòÉ'GÝ´iÓœ¬ýû÷‡…… !N:õïÿ»OŸ>ÁÁÁGŽ9zôèðáÃ%^§4„-@á¹xŠnoŠEeö™-uzçÙÌós ñùÛån¶nݺ   “Éäããsß}÷}üñÇ#FŒ0 BˆåË—?ùä“÷ß¿Á`èÖ­Û¬Y³rv:tèÉ“'Ÿ~úi«Õ=räÈœ.ww÷˜˜˜9sæ$''?~ìØ±2®Q6 Hêö{;‹ãe3Üû@î¶ŒìŒíñÛK¾–RnzËéæô7ß|“³¤VžªV­ºbÅŠ¼Ï2}úôéÓsþÜ¥K—œGK.[¶¬på–J„-@QõxWÌn%ìVg×QH•Eh‹ÜÍ¿ÆÿjUËÚµHÖ£z6!mdŸ%##ã³Ï>‹ŠŠ2 ,ظqãO?•«¥Î˜ (*ß0Ñv²³‹(¼:½D^kcrñ6U=«No9½N¤(ÊÚµkÛµkפI“U«V-Y²¤sçÎ%pÞÃÈ ÚNû—N8»ŽÂÈkÑ›jû9þç’¯¥Ôr1ºÌì0ÓÃâQçrssÛ¸±<']F¶Å`r=g Qv¢âî'ªå±(ëŽøéÙé%_N©õlóg#|#œ]E9AØOŽ¢íDgQ`µ{C+²²–éÍz…õPk€³«(?[€bë4]„utvsoßÜmÙZö–³[J¾–Ò)Ì;¬d¦jÝ=[€b3Eÿ¯„wUg×ñw\½EXûÜÍ;ÏïLËJ+ùrJ!7“ÛûÞw7»;»r…°pw_1pž(ð‚LÎQ«»0šs7ÿ[®(2£b|³Ý›5*Öpv!å a à Á EÏ÷]Äåõ­ejÓ©O5~ÊÙ…Ü]ж*_yeËøª!ÿdÓ³ÿ|­ñ-Äö?ßôȚЗ9ŸÿËk¡[íÎvH©€2«p]à—IDATVW1d¡0ç1E]:ƒIDôÌÝ|4åhì•Ø’/lj\®3ÚÎ^w¸³ ¹ë8~Ñ~pñ1­§¾=´žK…ÐNϽ6¼*㔀°öâá¥Â%ÛyrÝÓF¸ûæn¾Ûî!†z†Îë1¯wÞÎ.änäø¤%&\ô­êsm®¼©Jµ*F‡ŸPUm)FoþµKô¤y­e*„Ø{ÝCìÚáû^ßGøF8»»”ãÖ¡Reÿ«gϦ\›¤e;Ç*\€þ5ÅèÍâÞJètŠ!Ï [§.Ÿ:žz¼„jp*£bœÐxÂÇ?ö²x9»–»—ãÖ©îCѵ·¿;í»C©Yq[ÞzqÞÍá'”Y."z®èòªPäßøm)<òxpÐ]2¬åëêûy—Ï«ÿ˜¢°4“3I˜Neªÿô‚/£NOoèÜö…Ómû64[,¬¸Y› âáeÂÝOîYò¹‡x7LØjÜfa¯…-‚Z8»ˆ"/4gî0+6îÆW†°É¿¦M¾þ•KxôG[¢?B‘ùÓ㵿 õ"SnÖ^ŒÙ&>,Îí•sEÔÉc>x\ZÜáK‡åœ±T¨èRñ™fÏ0¾ôñAAíü¢W^^¼÷ÜUkJ̲çžûÞø@tkF¶¹U ¬–rðÆÂ»Jîæò}±Gõ+ú® i•*2¡`ìЩ„qmÇì;¯5{ðí%ourÆÊ*€²Àä"øD„¶ëŸ¶ËŽk™þt¦|ÞC ª4½åôvUÚ9»ÜNÊóª í¦~÷ÛT‡”Kµ¢ÄúçÅ…;f^Ÿy¼~á@Ò‡¢t0Lƒjz²Ñ“K˜×=Ä˶˻v9¾<É"|#ªùPϰžžOgׂ""lÊ£I4ˆ ¢ÅñbûGâÔÏùnéS]T®Ÿ»yËÙ-vÝ.±B‡ p èTµSßð¾LÌ*[€2%¼³ï,â÷ˆí‰Ã«„®Þ¾A>ÏCÌ´gú¹ú%[“¥WX Õ¼ªu¬Ú1²jdÿ<=ºÜ lÊ Æ"zޏtRü÷3ñç‘qñ¯oå³èÃàˆÁkÜŸ´ËÙ-Ûã·K=VJ&Ë+B©ëW7òžÈN¡Â*†9»8a Pfù†‰7Ä©­âÀ³Z¸z‹*MòÛÜ VjذRÃIM&]ͺº?iÿIìMÜ{àâôìô’,ÜËâUß¿~ƒ€ Ô÷¯ïíâ]’gG #lÊ8£éÚ½ÅìÄ¥“ÜÉÃâÑ:¤uëÖBUS¥Û›¸÷È¥#gÓΞM;{!ã‚ǽ¡¸Tñ¨R£bœ€UÝ«:w ï„-@yav÷a?£Áááq£%KÍŠ»——“½’2’Òíé™Ù™éÙéöŒŒìŒ {F¦=Sa2˜ÜŒn®&W7“›«ÉÕÕäêft«èZ1Ä#$Ä#¤ŠG•`à``‹Ñâ°ËDYCØàv£%Ì;,ÌûN3¨4]ÓtÍdàƒ_ŠÂ  ŠÁÙU  à·@"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° a @"€D„-‰[¶$"lHD؈° ‘©à›®_¿^^åRAÃV‹-¤Ö…’ššêì @¸ a @"€D„-‰[béîìøñãiiiÉÉÉÎ.D"???ooï°°°<¿K|²ñ`LÂå]'.”pU%©YÀºÁ>OtªSÀí [Ç8~ü¸¢(:tpv!ÒíÙ³çĉ5jÔ¸­˜µñ UsÆusJU%iúÂÿÚtè‘÷dcÂÀ1ÒÒÒÚ·o¯ëº³ ‘®Q£FÛ¶mËÝN9ùë'¢4­ü÷À+ý[ú´ ‹½¶Ž‘œœ|7äŒyÞ(¤v¼p÷ôÀ®“½UJØ8Œ¤7Z»Ýþø¸ÑžÞâúñu!23lŸÏþBÆéŠão{@WÕÕƒÇ,[v[{õNú­^m0›¥•VBôbÿ¨ªºxùwqçb¯\M9sæìן.tTm¤(JÁ7&lJ»øøøÐêÁ>!·¼gíúù°³ê)2]UW h>ztâ[o)F£ÈÉ%ªªÛíÛ¿ûnyß¾}W¬0˜Êö[³®ëÅ [Ï~'¤Z@P5ïôcÉ£†=^†ÊÊöOPÚÈxkÔu]ˆÜ‡-î›z‘ÝyT#¿ªtU]9`€ë‰† 9·aƒí¦ÛpOϽzm_¾|E¿~}–,qrÞÒN}ةɦGVŽ Èï:ïÐZñÂÖÁÃûÝ*˜í"ÓžmÏÎ0´iÕAsìOY;5«s³ÍÃc–Žô/ÄØT.…Ú—°p˜âjÜÌf³-Yºh𠡺®ÛlY—.eÜò]kv)óȯ4»}ut´ÛéÓí‡ ¹°e‹-=ýæïfeg_ر£u¿¬Zµ*:º÷Â…9ã^Ρë¢?Êbþ¬\³ø¾¦µÓÒS÷ìÞ7eÜkŽÿë]žƒœ?58Œî8V«õ±ÇG®^¿4111'l¥\J½ùe³Ù®okOÜ1{|¯¦Õ+y{V ªÕzÀ´o÷]Î`Ñ.~ÓǧÖÓÛ³r¾ºòÇ¿ j5em¼½˜å¶Võïï~æLûAƒ6oÎ0ÏžmhØ0gcýú>sç*áá~ÿ½m·n.¬<øú~êÅ_MÐ6"Ø×ÓÓ'¤nÇá¯.9œ¦³ø^ßßo‘ghB+êk浡Õ“RãÏÕ­Ù<°R𭨇Þní[!0z^¢ZŒ³èºÐõ¢ï~í Z!þ^¶¥ŽÍfýø¨Î½Û*U×õÄÄÄK—’ÓR3o~egÙ…BèœÙçÃóígüx(ábÜž…“kýþlמ3v¥ßzL-iËK½{¼“9vÅÚw»—ô¸ÑÉõë;–°iSÖ¥KJ›6Š——ñÙg ëÖõzýu÷®]mW¯žß·¯m÷îÇW­ºvië&vê>#¦þ¤oÿw2)ùÜþUoõ6¯™¿ñr _(š®íeͲý¾g»Õ|Õ–s(vЀQ·ocÛ5AjÏ!MwÏýá”ZijhzÎ=é¢ï~ãUð>!lÆ!ƒ*6›mÔèᑽZ_ÎL¬ä?jìЗÞxÖÅ[¸¸™o~©9ƒS¶3Ÿ™g|lÎÜ)]jùº˜Ýô{õûOºÇ}0í«ãêµ]³žøal—Á˪½³añ”¦Þ¨³°= (ŠÐõ¬”!„úÕWêæÍf7· /¾è5c†ÅÃöysò{ïiBX¯^ÕUUÉ9ŽmçÌ©s £ç-xáÁF!^“‹Oµf=ûåkxëzÊü‡*ºººº¹yøVmüàô5g³u]×uûá·[ùE=óþ˜µ½½#¢žY—ÓOZÊÎÏÆukêëS¹Nçñs¤iº®k)»¿øGTý*¾^>! z>½èhæ_WWä(Xï&&&8¸÷æ–EKç‡Öò»’‘r,æä~cL&Óm»\ÝúÍ ¯QϾ3¥×¹ù d_kµÇÌlÐû™wÆÜ_3Ôß/¼Yÿ·6'¨whÿëêÔøÿô®ÖöƒöGz·SPä¿N¨º€<&æ‹°p˜½KÝ‘Íf6bH‡nÍRÎdddVñmß«qûžM«Ö¨xãuìà©ç§½¨ëºýèO›Î†õÐØõ¦·AŸ.Ñ]Üö¬ÿ9)ç~[æOv™t¸ÛÜ _ w)~º^ø°uÛFê§Ÿê»w[ÜÝ-žžö?þHzã UÓ4!4!t»=ç8×/­‰[Çó²èRFFFúÕ¤#kž \=vÜœ³×2‚ÈÚ±fë~=•pbÍhãü§^ß”¡ëêÉ/îûfl»÷6Ÿˆ‹YûrÃÝËÍÔÕÓߌìûnbÏÙ;N'žÙ1³ÙžIƒÞØi½Vn‘{  cBËWý°`éçß.ý׉SÇsZ.œ?Ÿxâ•X«Õêa nÖ¤õí{i×ÎÙZoô°p¶ ³,™ÿ[æ_#UY;–l¯ûö¶˜Øƒß׿Œ3÷Œz‡vMèB×5] |ð‘ÈóßÎû-SÓuM·íž?ÿdëaVSÙ”^…-·óø#­;7:“p"íÊÕü^Wü6mÒË-[´Ôu]MNJþ•ü”[Žbô¯ä«''^Ru]ýÊž ;2ë÷Ô²’¡ø^Sظm3cݺ®Mš˜L&³Ù\¡Q#·&Mt!4!Ô¬,5..ç8y_ÚíǵøÞûÐócêî\÷ë•kç±´|â•¡ ü\,> îß$íðÁxÕóÃvÔšøá3‘a^®žU[ú๮®ö£ ¿üõÞI3ŸhRÁì^¥ÓÔi}R—-Ù›u½\÷ÀÍÝcòÉô©bžõÅkVk†®ëß/þÚ/Ô-++ëÈØ1£&çÞE=»ø»˜®öº¡Ö°Ñµš»éòJL¼2¶y ‹k@“±¯=rÏŽE«Ïªù¶ q}øMxwþ ¾|îÆ+º®_Ýþ¾"éÂEMT¹iøÀžtá’âçïcBCà°Ùïg>Ög ¾xÁ„&žÅùÀq誚óC½zž¯¿nñô´nÞœ•í׿جY''NLZµÊš {y]ÛÌ7ÀW\¼ýÒ®É8¼à¥~°üÇ/¤e©º.,mz¤jÂ[!oߊ9;(f‹°ÛU]Mˆ¿`©^#ä–ã¨çΜËÜ6©–ç¤MŠç ‹…™øçejâo×ãå f'Û³5ï ã_ܼI[ƒ‹í\â…´+éíšôñó ÌuõÈ‚¹;ŽíÛ|}[Å3{å+]‡*š® CHhƒ¦kB¥Jhˆ¸˜d×*äÓî›3p§iº"\› Ðç›U Q]¶ÍYkìóE¤WǬ”Â,þÀÈÀa :&EQZ6o}äÀ)k¦-ÏמßMþÇ?;vŒ¼±‹¡f§N!§V.ú=ã¯ÃhÉënÌlØù~ßkŸó7TîòæÊ…£2ÞëûàŒí—òY¾"ô€'®^USS]Z´pñô´nÞ|qÆŒ„×^K]¼Øàââvß}Ösç„¢hªšsCx§È*'W-Ù‘ûP'¿zjâ/á/­Þwæâå´+13Û™UíúmÄ[&Må|e ®œuòxü-³‘ •‚+D}z:íê iç¿ìaÑs>­'¡nèÑ­ß¹SÉÙYvƒÁp(ö¿KVÎK×.fÙì—â³<8<¬;¿[¤OØ–œ|9绤ÿ‘ï¾vAZ|lܵ9\ö³gât¿@åí7UiŒ:¬þ¿ý~Ûâ¹›úméª\Áÿ^¶Sˆwª|Œyìñ¨½O‰µeÙn~YmÖ»L|bj×.Q·ì`nöÔƒ²¿5òý G’3³Òö-{iÈ„5Áã_YÝpíUèºðióüÒ¥,_xàù 6úN Û¡÷ßÿß­[ƒ[´P®\Iž0!qüø³ƒ§ïÛ—3lX̨QGÇWL¦°ˆˆØ¤$‹®ëº¹é„·†©ÿ1ìÍ•ħee[SNïZúîØé+S5[†U3»Tpw7g'îž÷òìÿe_ÏX·× „ÐuC­#Zýh»O^μûÛדÞ\Ÿa¨=ðÑ–{Þžøé/§/Û2/þ}ùÛ£ž_•¦_Ÿû]Ä(Èl§ Ê¡•ýÂÜ]¼TU ñ«hÏ´fÆÇ^1øIÅ`Ƚý•msWhíÛ×4Þh17éÜìè·?ÌÖt]ö˜o^þr×…Lkâîÿ¼ôul«¾QÁâNíB¿qp%¸ÏðŽ'>óÑïµ ¼Ïȧ¥_ÑóËuùGT‡bOÄek¶ã1§Sâ³2’„5ÙøüÓ¯v‹ê¡i·L‰€î®[<>pë ½êV ¼§ÉÀ÷b¾ºvùsÍÜolqížM&ý°ü…€Å÷™²úú€G‘¡z,^œT¹òÎÝ»ƒ;v4{{_þþ{MUsfÄkº~~ÎÅh¬q.-íw›-zÛ¶œóøu¹~åÔ°½ïiX)´Ñ/¬7õée¨9êõ)ë†7 ªÙé™]š™ÿ:ïÍ%\ÿ³R푯=²yr‡ðªu{½òG£^­\tåž_-™\iÝäÈZÁUõ™ºÌÞodÇ ·¢°=PÀ>ÐoÄ¥s險iªªªj–-+ȧV£ÍóØTKZ?­Þ¶SÝ›?žèÖªCó³‹çïÈÔ….Ì-h¾oZûzÕë ûJøù¿†„*z¾í9Yò¯Kñî:¢—krFËa†nN_ÁÿR(-‡¾\»ÃàûW*ø>ä¶qãÆîÝ»kZ±&ý¨ªš••eµZg>ë—ݲlÙ3þù¡¿¿¿Á`0f³ÙÕÕÕÕÕÕb±˜÷ÌfƒÁðã?vîÜù¶ö;÷€š•µvÀŸ3gšÕ©ûË/™—/_ [BÌæj±)) †~?ýT!(HþEK~=Ðâ•e[_è§ìw`ÕÚ…§ÏíIÍLBœ9žðöËs|}ü ]ŠztV·È?ÆþOµçvuÔÖO\}y×gý| >Ëh0tx}éÿ^zðΛM\œxdë&Ȧ°ÿâÏ-'ledd øpFf投K…™™™ƒÁd2©ªšsüœ/StáÝáïг¹ûÂ…k øïŸ¶jÓFQUÍn×íöœÿŠ?ææÖýzW?¿böa ¸süíy!„ªª‘z¿ñζ³ gL&sŸ¨½ý ²ãí®­Ršë¤ùµß^nÆÑy³×»<ôy”O¡n >p†â‡-“Éäáááææf·ÛŸòÏ ÿ˜¤ªª¢(9«$˜Íf“Éd4Eqb")ZØ×óÖÑÑÿ^»ö¶oÔ¯ßoÍ‹—WéOZ¢=pc«ÕjÍÌ?vºÙb®P¡‚Ùl)â…ߘ–—k1³¼Ûo–µ~rýkÝ9¥…káÎ_¨­ [€Ò%'Zå \yxüÝ= ²Æh±ôZ¾ÜÙUHTÀÉã®nn®nn7ïUÄój>±îtGȯýfæ®ïÅœO!îÊòP¨‚ [‡)þÈV™PÌqr€`d à>>>š¦)ŠRÌ9ò¥œÁ`Ð4ÍÇÇ'÷·èF÷øÛ5MQ”Α/£Œƒ]ÓÝSÐéü„-€cx{{:t¨N:Šâ¬EÚK‚¦i‡öööÎý-z ^ˆï?î›Ø­Ñ¨½œv‚¢kšöÁºý B} ¸a àáááÇŽÛ³gOJJгk‘ÈÇÇÇÛÛ;<<<÷·èñ]ê~´áÏçþooìÅ’/¬Ä4ºÇ¿A¨ï¸ÈºÜž°p˜š5k:»'£&t­çìJVˆ° a @"€D„-‰[¶$"lHD؈° ѵÇõL\œèÜ:Ê%“âÈÖÎ. |ú?0Èá÷–Õ‚IEND®B`‚pyspread-1.99.0.1/share/doc/images/screenshot_main_window.png0000644000175000017500000026327413604414640024026 0ustar andreasandreas‰PNG  IHDRlx\`h*MzTXtRaw profile type exifxÚ­œç•%¹‘…ÿà š-Ì<‡¬ùû]ä+]=œá.›S]ýD D\Òìÿù÷1ÿú׿œM¥šÈÜr¶ü/¶Ø|ç—jŸÿµûÓÙxÞÿåiÃëÕ/¯›R­¿¿y^ÒGžÙÒŸ¿]çõôñ…·6Üøúº©¯w|}]èõÆÛƒZVSës'yÝ?¯»øºPÛ¯.·Z>wu<ý´óõÁÛ•×ãuÑÛ#ûüÛ|~!Fi% Þïà‚½?ãÓƒðü×ùÏÝŸÉë·Êï.$sÿr¯ž0 _nïíok?ЗA~ûÍ|ýñ6šßß÷×'·±Ì¯1â—_ßpé÷Á¿Cü©áðÞ#ÿõ 7|ýq;¯ÿÎYõœýÜ]™ͯˆºƒý6Búà`ÈÃýZæOá¿Äïåþiü©¶ÛÉ”/;íàÏtÍyfåÝrÝ·ïßÓMºýö…¿½Ÿ>Ü×j(¾ùyg,ê;¾„³æÃôÛ„ÀËþ½/î¶Ûn{ÓUZ^ŽzÇÅ_ùãóWoþ“?朩!r7bë+úå×tC3§Ÿ|Š qç5oéðÛŸ×ôÛOE¨2ƒéså»Ï%Fr±î<>—øûI!gÊz]€!¢íDgˆôèl&î]v¶x_œc+Ôé¹ÑfÀ¥äô1„ìMñÕ«m¾SÜý¬O>{½ 61)äP˜›:“c"~J¬ÄPO!Å”RN%U“Zê9ä˜Sιd\/¡Ä’J.¥ÔÒJ¯¡Æšj®¥ÖÚjo¾00µÜJ«­µÞ½é4Ô¹VçóW†aÄ‘FeÔÑFŸ„ÏŒ3Í<ˬ³Í¾ü ˜Xy•UW[};³AŠwÚy—]wÛýk'œxÒɧœzÚéï³öšÕþÁ¬¹×¬ù;Sú\yŸ5^5¥¼] N’æŒóÑ1ãE3@@{Í™­.F¯™ÓœÙæIŠäédÒܘå4cLaÜΧãÞçîcæþÖ¼™TÿÖ¼ùÿ4sFS÷ÿ1s†©û9o¿ÌÚÏÍ;cOjLm8â©ÐK2;¶žg¤#>m>JŽL*ÞµB‡J9q¯UèèÈ>ÊYÖ« ¥°kL«+›LÞäÑV4%rðƒy>ɆÖÛæý¦¹L×Óâšg§>kñ³´yBZí¤ÑŒß¼tVja÷RÕÊÉüºô[´m,áLVó=œÁå³Þé6®-ø᜚JŸ£æW>½NÝcþê3§±“ÛÛ¦È1ß'LøwtÞ=3…‹3¨'Ͳ͈eŸV¥}Œ¶cú1FÚ׳gYiœ]](}µSïl—¸Ðr©—ÕörŒ)‰¶Ö¬ÜÄl„ovM!ÖÀÒ>ls´ÙÊš¶Ïž _˜n·§'æSWÚgåGWÄWtF]'¯^¦6­xÂH“8mTh”Ù[õH¤3™} p1mëG¯iöº¶~–3t+{†ÝÌ÷!Jî¿ê×4Œ@ö'wî:$àšð^ƒ¸IF_éδóK&Tƒw•!µ\wH”á,nÍSB,æ½?ƒ™&rg8Gçú 0Hk·RàÆè{/Ääj>q×ÕÍ3šKí„ÜÇŽç˜Ïyæã*I;Êž;e hŒÚ«ã­›9nw2¨„!q˽dÒÚ×Jd“Vy¥c2g[Šm‡œÃܶDXdÔVŽM‡nÐT~¶|rꊑU«°n¦îç>\Û¦Œ| XfѤÊq%0  “­w»‚˜Œ`[Žsjäε¬˜}mVØ;›8ÈÇ8ÀÀRW‚Å™º¨$øm'©ì)U 7ü⾓BzÐon´9k7(ŽXÙœ˜Í戌LfÓ´Ø?ñ—â-ÒÍR"¡l[›hàfA‚¦ *ønC’ør%5Ø lÁè–'Øï¬2©2Í bÑêþrÛ`fG^‚šØgœ²©nž9N( bŒ…™š7 ³W¢­SâôÚÀ<íåÁãJÜÚ)Ê^ù–Æ,ÚD`éíŽìÈ‘$ÃæîöJ»zp…€$˜=’÷cws\˜4<Ô^¨qô#¤Ó^—¤8ë¨à-öàr=¦ (2/ñŒ—ßäÝšf®¼;¼áU@ «Ôk{LnáÐ܉3qÑ+KA0Û´“ô‰Ë•¸õÞP¸º˜çvP^ÍÞÍ޳܄‰DU`Œ ØDã ë¤Jé»0ë´ w'×zC2ɺláÄ K«’ž×é¤;ŸE8FŽ@÷‚"߯­#mš#¹ZÓVð™+# ÚõˆðCÖñ!acZ‚‘Û # wÑ›L¡Ýr$Ÿ'/Â݃Kq5ÔòA¢‰VÅ‘\$ÇEÌn[Gϵ1è¶nr¾ OjÍ© °Ë&8:ßIpHúð«”øË‰}-š¸$Uòæ‹/x- uˆ,f¾7!1¼h’p€é V'ðqï&Da®DäD¢õFÔ’Û ⧸‚©qiRŒ^ÜLö¸&•¤r0û¶ÊöPá’ŸŽÎœ$°G\Ò]ô/!V†áÓˆIRFñðE¦¸ªe¯Á‡:ôÙ\îî"f˜ %Ǩ ‘Á2Äþæs²šýK²)y7PßLà{%0òÚL&c‘+¶à¯dYˆOñèI—ù7‘˜0B˜&È¡‘ü©¹ÓsõÂK-H净úP~6A*>¿#ø ¶¡Я•l­äðk“ïÌ~›ü]¡¼µ7ÍmWS …=šßÓ½PÀþ£°‰¦¢WhÝ+6bî„f'IËíðÜÊ8C¬€Ò ú7ðpoÜñõvÉ|ƒò0™îô«“:ip;Èx™Ÿ|"wRJÀ¼.‹|¡O4Ь°óìç/Ös+8à â€=:•ñì¬ÞŒèôtâ±Ö-ðB:We€‹œGrCU-å­ž“/Ü锄c~0ÚJQàAJ°eRyùën’ªöîzQ¥Ó–zkˆ¹VE=•p7È­ß4êDi·˜,À}õì«0«2[Ãwø­#•ì#Lè± #6 O4äU ]h‰YbS¤PZÇ—j€l»š{J‰8<Å¢üB,Gø+W$Y[Éí ·Tñ(Dh¨ªíÐ4C3±xî¿F4ZÍÈ)´ÈKœÌ)w„‹•"ãœAçdP47nP àwÞòq1 ›ì/·JP¢X—ãÇ.×XQO9¨LüŸºbXD4š£"Í„2 ØŒôƒÁç Þ7™x›_2>eu.ëª8›&ŽŒ4Ù kp)èW“]$Ì>É p螸‚cg€Og10¬,!ýAâÄèa)üª† ° DœŸŽ¦÷"54pOcXÆàþÄ0·Q!^ B5P8ÀlCúj-b€©ƒi c«z X3¹hɨBîBQnP&kê ×ŠDpm.Dx»qSø„P)b„LÐÂŒ9ë͉‹œ W 였úõE ߎxÀ;¥Š‰ãnI‚Ù®¯nLÝD¾C¾Ê^>W2 -24Ê~7 É]+µÃ §‹;‘ÂG x¹ni!Ó˜n¨ ª:úTéA‘±K Ð0MŒ–†÷QʵQTpÑ€„ÙyÀF!ÓŠÅ®”HGœmŽ—B<íÊb¥!{¡©^ÅîÐ4< Q€ßH^FØaJ¹dœq âYXv"%µm1CJ‹˜Eeà™°Ùë˜4 ãg‰bŒV››œ’SIvLÅnKZŽg‚G ­€jÄG²&ÉŽ:*ûÝÙØv$AƒÀméD3r²¡ß¬šÀ7r%à¦^¤¯’Ü8d¯²6Qf?ø<¢ã~}Qú*@´ØÿÜM : )’7ÑβaÄ+Zfñ8î¹1 `,àÒ©þG¼ÈꥰÈ'»/=-4n`áÈw‘„ÊS%qÄ)$ç€éhd€ÎÃ!þn„Y(äHÞf0ÖÓ˜0P‡¹fÐÝuÔmi¦ÑmØ@B£xëˆÛ˜r¦ Ó0½$!Úÿ1§W!v) ”I˜`ɰ8‡¦P ˜5n-Ä>tÏà®m’‚n3H›©K@¼á옦:R…?ˆvUûðÕøŠÏŽáÖ8TsFßÁ´Ø Þ§EA DŠæ +JÀÒ‰Ìc­tùáÚÓ§û ³‚ŽÝ²H„"ƒyAÎË ºekÈ»%y—Ñ̘FÀg#'° ˆÐ=V“{@‚jXLðò$—Èz€xïʨ‘J£|ø§2¤„ïHˆ6øa›¦áÍYwÔ!ìå0ãû4"¢$l"FI29DÐŒ×ýB%ˆ‚þEæáþ–ŸcBÄbY¤|@ܹ$À í³cjIU²Æ®È”7q*Óá#'ÜìïD`RrŠv"Ð7V÷©"Àç ÌFysQ‚ìÇ”â Û{eÚØ h½•U@Üà',DÒk…Œä >ÌiVŒI‚Î ʲ¸Þ¬2!2d¥­ÀïWiƒ¸°˜l‘N„C6€ÿ€ õ‹yAÔ{¡@eðaD'Â<«ø±¤ÙÇÚd0¬'„"Mùœ«Ì7Ä*’Íbj8á„V€ÛôÕ-^½#Ê·AIÜãý"Dº6¡” 0¸í‰Å”¦F¹ríã‰JSÐ^x°¡ò±p|ù%±ì=ÙÜpº*`0MÅIò›gåà­!(PM}4ô©p3˜KÎâtX¤˜àÆf6x×S"-qÈ’‘¸šM”Ã*!=TŸXø-acnh Ö^¢¹L#q °¯¸ðkTmaò;‰ ФŒâ¹àHÐ 4rƒö<“!Ö‹©( To!ðN¶’/ŸcX€•¢1‘Ê4ˆQ’^"?¤+ª„ðåed!ïØi«q›t:¨ÈÛ°¤ÄÖ)¤ü<4Â['¢¹t±„®Ê@.Ò{™Ög°•êÒŸZÍ| rUVÅt¡‹áú.»‚ÊÉ.«ºG%—É1W¸TT¡Ìx3Í€¯Ä§uÜhóX)Ç{òÞW–©Åu¡k—ƒ& íµL&¦qbçC¯<ê(ºqѤ!½ž¢w<(ÁSÊÎ-š5žºÞ´Ì¯gT:ÃKIf@GéÚ|Ì6:©J…²FóE%7:B[dtÐu¦»a„BÚá ®’òdä˜B/Ðqr„ '@üÉ[3M›Hž×‚¦pû¬  :M•ù»¥=㦪֮+`(0cùŽ$Ì\ÝÒ‰ŒRi&2ú²d r* Ë“=ö­‹QL…¿´#6„Û\”‹½áøÈÐÙ]c.}¾Ä*ÏcÙ$| ´Sæ\yRtxÄ?‚9åÑAOxÐÓY‡AÎ óëåÕ/ùͰ.Ÿo ´ÀL&œCõ`/xD ’©^² Tq9CŠV‹€^Rl5€:G2 )¡»ªá^E§0}«iý*Ðáx@–Áä±#’×(zÙªyÚgà[SÁÓUX¯À€ó]ô" uLÒi­cÅÛÛaÈ`IhA… t3êWå0N•ÿÀó"¯<š$eØ$Aú˜Í£þ½Ähá-¬:Ï­HÇ=˜>Íí¡Å¾øV9ÑKAÇA¸¢@"2†°áSØ> ªš*l9b´rwª'íÃäŠ*>_/È48€!$ÙJÊ$º %7 Æ;Çà^ÛãGUýœ$4LÎî&çØ|ÊnF›!$'rPè𠢡F 1ï«–“v5í2tÄG¡¾÷FµÒΫêa+„ z@W*þ4nM0¡|V«„Ñmñi\†)#àÖ²îBâ{÷DîÙìVV0¨ÕTP%àÑÓaRÛ91¦e|XÕ”¡³qÕ¥‡r™Á6¤VU4ÕrÜÛeWiÚt •Çt9l7ñº LØÕå äËH©X¤ÙƒÝXžp)& I#ñ”´&§­kL"Bh(»7­µ ¬ >"Òbn™3°`4Ô,ÚŸ ‰¥e³ú:F‘p}H˜\bf®¢îÒÊVBf¢kðþƒ`DtVð‚1å#çuó°k}±+‹BPHìÊ"lJdƒ%‚¾ôðÂOå.ÃoæA˜OÆã€”×ÉèaÊÆãw¦x×ï/?ïÁeë×JvDÏD!XAß1Z=‚ó̬ ïÁ÷l¯D™saXŸbÕåifõƒåÇKçV« u aUQcžøƒUY‡Øí*!aæŽôÍCûÖp|f¶[£Þª~œì¤;V„äš"Vˆswm:à4:”o‡âœZ©ÈZîÉ€Â+ßä™aíKªHë¨ÊlÎ`о`&š–h¯„bÇ‘­Š-RL"$î§ É'QKlüÖ¶ ÜĤ5Dµì¬äDÎ è­Âõt«lVœÜBk‘þ˜Éô..1ƒZÎeøÁ…˜‘iØ)?Å£!X†£M½ÞG¤3ŠD¶Ð²B»fÆñ [$äÀ|$¬Î„ :“îJç‚VçÒg_ž  ÖQs5TG¼‘(c¤ºiûH­Ñ¢0ýDq¦§è>ìvN—âGx¦4$ÙÉf0íê0˜ŽVñ®0e>éßK@Kùv-»ªJ§µ8}O ÛiÃh«ÌQ½•ËÌ9®Xàöˆc° Ò´ÈðÒkï§Œ ð·vÅëžÏ+&Á8eiÜÉ´­¨¡$+k&Pà¸E"¯e48jÀDQxšÛê{›ÇD@™*Õ"ÐÈ œ›ç[üÙIáåÇÍî˜U{׊"Ê©]õüáé®Ñ#—¹Ó@R-ærC×ͯÝF=x3â„íœw‡ÁréýÉd®q P9oõTƒÚJBÍiøS‰0ÂÔk‘6)~^ªËBƒÇGT<0œA–Œ –ÚšFKfbÃD$íR-hÉü©Mv í®!䙼ò‡Ü*gDWS9Ùm™µT!÷BÆù[ý#‘ ·ÖÏØBë/ßå¶ h£?¤õ¨äowöhS£bªŽ\YI€cYxrñÖ"#% ‡JåÈlPª2˜¶È§ðDïS&iËŒEæÈɢΟ´–?A;Ä <¥:$4õ ÷Hla§zf&ù,*I*º @ u1SÀZm ÏÒ6Š#äqakG”ƒ¬ªŒF§rpF ,$ca ­“,¹”#?‰òŒanX1$>¨è rø‘8I©O©Ð-½dïrh—…3Å[#sC&n,a A)Kåë`µKÏ@„S;&‚²sjä5áÂд® |# ‰Ûsˈ¥ÙÀX•¹P¼ÚYÔUÏvp¹ú¨š &Kp_KˆÅ q2œÊ:¨’¬Š²ªlƒ>į™YµeЙùeoðá^»P5x^§VÜweb‘›‘}îÀ ìMz­¡…øœˆå-ZEÆ“<>2ÏékgÕÀuô­Ê™£Ë«iÅ/¹UWµX »!yú­X-?AÅ2´ÞC°b3®ô„Î7ŠجÍà"k8aX .3ÿ§ýì«Ûà*ï£"‰VÒë HŸnB®°ÑÜJס¶ÉÚ¦Íí&ð·%ù˜ ÷¯{yóéúª½LI¬T´)à†®Õ¢¬6w pwKd}»ûtöÕUoîüèmèá{›Ÿš\·šÒ&’(©4 ÷½Ý€„<@ibÈÇüÙï·7{ĪF•²‰+}eœY9ªÌ5¤2:$.þÁÝiNV·¤Nr:ñ€g¬ñ(/mÝÛZ‚%O6LWGVÜ™ !Jj‘Øcþ™ü\Š*Õd4¸dbƒØ´|9´ˆßbÖò¦ÎSбYdwOè"½íÔeFºDEm…챉[T0J¬"‡‚]òÕH”GäÀ;'Þ#Œ¢yUÕ‚ï:Š*éÚà  {”cAÛ¨ô½áBŒZnÕm-2M®œAUž ½ªðV­,„CÓİÓ+ñõçV’lT•Â$¤2`ë»ÜXjL»TïŽÌÈ—ÔP}p”Š Ô ä³@dhOŠ"T*Á 6Í!‡ª ÐÞ!gá¸[/kw×Og.*†H›¢ކ¬ÁK¼9&g Ú×ký¶Ë)„&­äµP®ý§qDÞ‘ÉÚw˜c¬áÀ¥L.’÷hÂeW,$b°iuòÙ鸸–‘¸í½Ô–*¯òÃÞ*Ôb Œ”U9'>hcÊ:É÷÷ #ƒîÄÜ\Ò$oÈb„IRìr£(€ÓT: ­á9ëZ¨#Ì“v$"š± w’;³…ÄNVü^Ey-£Kº¯Ú „t‡ïºWn[…=F« ÏÈ&‚MU§Uže»i¬Ùõ¯ÞUf9I¿r,dtPµÖ¦‰D¹_mLiÂYc‘TGØ+©JN¬×… Ðé‚™kp è)µ1Y†ÖØ*i®ÅҗɨA¶ )rU#ÓÐ{ÚøBäÞžîÖkÍõ]Ä·ÇËvp6 “Ö¥rŸ'æƒ Mb·y¹`Õ%a–1¬5»€þ×¹à™"m*Ùó¹v¼:² Ú·†qǽf{äs»bÇÈžûJÊh×Ð [žjsĬl Ð)‘Þâ3D½ä›ˆ–G Æã!5nÚ˜í«¡eÜ–hHûj­Êþx=œÃ¾¨+a˜O_uÿ¼/xPRNuxs÷.}¾¨ø>,fHŸ±§]þ{¡B~Í×3AF›£*/0H8´«žæp´À/8Ô•µUøû˜t+¢ð,(Èå [ÅÁ9§šŠ-!§‰›¨•Œ&¡9eV²öµ‡þïWI+ºåšüHá·ùÀÕŠ«>x ”é_-ɳÛit½¸À<†ŠCU[Cn€¡6âÆ»‡3£=] s5Æ{c„¸ç‰ÁAî==N O ´1˜«"‰û@Ç^GJÖ Ì2ˆÏÇ0¢*§t³H­„Ì)mhÁ›D˜iÛ`w¶*ô%•4Ú6Mê WÑtU{¦U5bÜŬÖµq+>Ú™ÊÂDäæ!ÚšÊÎKëú‰Øg a%âE}@ÍdÖR9R²ßÓzonIÙùÀèhDJI;]UមUȬk„Tpíõ1æÿbdÞ} ÖÀôŽ‚^„{F޵Œ v‰û´÷ jÝaúú>˜¸´ §Ã‹‰»M‘‘@žŒ-2Á[0•™Ätãat¤G[ .®FPž+¸*jïz·^]`„“èÑñ–|0#^N¦\À¸‡‰&–… ë§ |žÄ¤'Y¶Š|(W»ž[oÚIWnùùÖÄÇ8ò¢å¢©](¡hÝÚç·¦oôÿ½åW»æ½aÕ…µO¦®§maüÒ_»„xQÉ*zØš0ZSxë¡Ô4¤ÕU>ûÑD8­^ŸŸ¤Ž`¨jõiÂrˆh—ª¥“9U„„ÈfࢬÖUçh^ëð¤v¨FS¶¶Ý¼¾®¥><â•î—ÿôµ¯ßJ''Sool{յᡯ—²î£›îí": ðÞÂó=óËß› µ8Ðo ~¨å[…)¾ö4»b*š´]g ÷¢Ó! d ª=h.h¿£ikIë(dðèoW¹5• Ú+sÖ™`F5 7Ï™þèWA¡ãÒNU9¹Ÿ‹ Õ¯C…(ÎÜR×Î!„ýòEEm¼Ö¼ÖF‡Ö$öî¯Êሆ~‚sÝŒÏJi$Vb3òï<•Õeðn„û'˜ñXCp%1¯k—‘ªÓ ™§¥Šo‚âëYD6H²VYEvY}iKXMWÀZMΓ$‰¾›ïGöýÒ«0çKöqoÏ©÷+é"­ò¬á Z·(ùÉê®Ö,JA .m‚ôbü5¿‚'¿õÒüÖÍÿ¦—æÕMó •Ó—ù¿\ÔϺnq€ëšîé¢ùm$eÒ^Tž¢\äpÒvñ6-`»ƒÔ§­‡p¬ÑþÞ 2´[xõ/œßâEÃxQbadÇûÍëŠõOóüµw!Ò‡ Í§C¾ÕqAáø[[·̌26ª!@#çÚ®ös¬&ªUG7ž¹.Ç4LbüÞÔÒUt:ᯢSMÖ—Z|õýó¦¾<úªþö÷ß´_æOþëe¿"9åµ ¢ÓÔ °Žáâ9¥ó!Ò³L3ŽŒó e¤ Ž´éfÕ)ŒïÞJ¾ÜÒû·&}jñ§YÁÆ Kó©Xš@‘¥Á:-èÜÈ®¯}3­§%/rî"ƒŠAýÂ’ÖqxC§wÌváÅ>]Cv[‚âÂÀÀëèlï%‘Ÿº‰|éÄO_2ãíCyß:ür“T­¤WJ`íãk[â"n™©hU†k˜ÿÔÒo ¡âTŠ~}\ÕÆÍ5&qÝ5‡jbÉ·¯ø¯#¥qù·øÏBϵu"KÒϾŠpÚô7»¥¯~jEmd£/ø7®¸ Ro3”k¾ï)­òÑR½ß_zø9MÌ«°Fò½¾mé]ûÈ„ Å"n⣂&‰ ÍÅß^ÑN_iîôËß m#üÙ1=P¢ïbZdÌ÷ÌÛ›_ˆÕiS ^Áë1ÂZ³éx³£%-X öc=2^.qdÄhÎ:?O\ã]îÚ@~ò°/Ö/¿tL×i#¦1U\‰V%d„Šk°zè¦aèfÃ>åeûž/Ø'®RHЯ·ã^EåÓ=I›·õ%™[`¸Á{?ûöI­: q”Eük«ž¬½O=9ªî .æ× «i÷¡`§N BtÞ‹ÒãKŸÐ9·ª‹Â;|i¸˜ÛÌ«‘¦Ò¡ 7:Ûu K˵çkOH®…ëëÅÌÖ¶"¾XEľv/#zÙÞßÂq~¢|¬OCÅgš>c>}(â]oq™Hév¿hûÍD“…¾«Ú—[V9È…Þô/ÿ3†ƒ9/âÇýWˆÿ ðÍŸŸØ¾7õB}õO°þŽù_ß7Ÿ>ðõ¹“|è½6gf§S‰/,®°6¾H;¬´µÁ°F[·–žÒ$0{סŒ|píí §£Q.½6nÖ3ÌrwNê øfÄ߃×ÕL>r·ùöün4s!èÎô›Ücf¾½tš2¶ J1ú(y½†:ãVê5CP<)"T‡½È.;»6–´­ínÖÓk;ƒÑ¾Ã¦ýñ ¡Í>Ãxž¸î] |4Ü… ãf¤—ާ ‚Ü6‘Á´*KtmZi2(.õPÏ=ê\I›VBuUçµåT‡RPÐqX}Fû³Ó¬~®“]Ëäq›ÁÃC≓ôL ÞÕ2×ÑŠ씑$·f²ï,õËýaÚ÷W¯,V[: ü¨£ê}iYeá$’ÑÑW`8ƒoµnx'F”@oÓl[µ/(èˆxRtE%ÔÂö®Ôtêz¯u\Ä ÀZUc”€C…[BT™@Ó¢}¾¾ÿIËÇ«¯Sj]îS‡w˜õ¥ÝÚ“v90*ZG<ƒK2 ƒWÉÌ.ÓDÖêµ]·4¬Ö[kêÐYC{ºXzµõî¢×™»ñýHg»Uòež‰&m˜œ|¹–ïÎ÷ÞÅñ3ŠŠ*–õP#VD¦½¨Äµv‘ó;m2=¤VŽd^:@Éë,E´Ú)™’ÿZÔ-ÝL²riW°ßë-ÛîÁ‡ºõÜ $¦ËɺZ‚vsi§4öË#ÿ6Ødƒ9Ý—øéùçR¢÷Ÿòùí“f×ß²¼§…Ó?\áý³XpÀ:º[N>¢µ·/~¬ÚÖ˜ a‹–÷bѶ±º·eÀÊÐ9$Œ¾‰Ñ‘4zrHF‡]F#jKÐé°i³~šP§– = `.~ ±FÐA€`°“ö8^Á‘Y …¢­_KKd:áôÌ{z6P¡d<ªÈ•Y­ö±2öZÑžB˜®ÜÝ©Ã[=ÌÈ­ëìúÊXó¡ê:ãétœÉÝí¡IÕå€'ùXͰÚR³álX$îÜ-‹Ìâ"í.ôÌéËíIv e³.¢]H£“ÜÎ…2É Æ­1:Ú…ß&wšíÝZ´Tª}LÛ}¢DO KמȢmM$ŸÎfëœ)„.äó@-K+98´Ãô^Õ”ÓË=²’;ö;ÖQÇ tv†CÛâèmœ½‚ˆR5˜Dl(Ú§zj}*ßFˆP‹°p!Nbßz¶W_¶pQOmYhCazóÔ[ÄÏV¡P{À§ƒ &R£ñÀi×ßaÑHz„½)·­íLÄ…É{ê©LºW"vh‡x$`UpºÈÝI·u’º†ÆÈ¤*!éH^PçŽýö¡P¥†ÒÊÝoª;-Ijý{Ç·uäqŽ g¼Ø„[CQ`ÈO3Au™®eŠYÖîUÝñ)Z̨“aê™V|;«ëåÈzþƒÌÒHÎé +ÅL4(ÙáG!¿¶ÃXaë´PlZOÕñ «±+Zº÷Ä]:VôÚ=©ó®Ûl²ˆùÕk[?³E'=„«ÁIAR&¼ jGanaߣÎ5£S£Å]*Q˜züKT—•+ñ°)C¤dhå÷yäÆ@¶EPTëИ´ŒÔÚˆÙ ë»íÞS•_’™«- Ý ¢íÚL0-ÆQÿ‘eiΪˆ¨-7ÚÓ¾ZŒ=è<ï#tlT:’I‚מ€xìBN ÞVâ¾-_»¦òMÛ„aðn9鸔©£y#ëAü ÅK; ÈV2¶£hg×V#¢Î7ÞW“y$í3nÎÙBŠg3tÌ`¤.Mf Gø7 ã³øLŠíî Ð_wÕó%l»“ ®@s-uúÛP1? àÒž­‘µ†:bO[$޼!ÌKTòEGiMMHŬ'“d=kéäÖÚÚ8 ù»Ê„aÖ²ž=òâ±ëöàFðjIH¥¤n‡ñØ>o—VÞÛôyÑ¢›ÚÚú©MjÓæ\ýÒæ«¦Z> ·£×Áɤ'^×*¶ðÈ´DY”AB,¦ƒUtzD«z0ÃTWJ„ÐEp!oUzkK%~üšÄ»ääLˆe­fË:ãiõÐjâ.û9¥1Ÿ&èýæŸå÷o˜_¾RûîÛë´’–î7zÔÊßHù{è{Gìê±&ž6ƒ0Hmx~÷§å:w•PëYØ÷¢[ |÷¡ˆ]ÞñÓ˜ð 3EuàJ×F“û”#%>6Õ9<ž¥i£i¼ôT)œÄý„ªÍfÚ~T¶vÑþEÕ ü¢{US×3âO ¨¢é©)z'3è‚Ä\—]~ã\tØÏ3£F&=O%Š,w0+*ñqLQ5Ê÷g]V8oqV+5Öº'a8¯­,sÖ’XÄDQCXˆÓ®‘b"Mç ÿ ãÉ%“« FŽT¡Brüàð{¶farÂM '€à‹m ¡] Y·íïcÛnžgàJkû« `æ“ôz[‹½ÛÀÅu[“÷€Ë`àI— É‘´ü…ð~Fß”úož5wn­sœ>šUê88FŠ”½îñîîιýÛÓšß%Brˆ¢®X×bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEä Øu³ IDATxÚìwx\ÅÙög›Êª÷.¹¨¸á.l ¸`Ó =@0PL //$/ˆ!$ò›Ð „’ÐÁànã†mÜ-[¶U,[uÕµÚ~Î÷‡´«]mѪ¹¹¯K—¤ûL}Î9sæžyfFªªªR®|d§ÞyêF¤)7>¥äϸAXD@@@@@ »•OÿøsÚ*‹5Ÿé÷¾JÎøó:þQv|ý»?}Ñ+ÜÅLâ1A§kl¬¡þhYcgø4€ùÛ‡Ägsåo?$$"F< ?y\ó>w±æh(q "¢€D¸HCp‚œà'¸“Ç9ì6»yÐ?Èrk5ކÒÎ|”özß"¦å8ކˆë!;ìTme˧ÿ`Ôô«HÏÌ ø½VŒòÓŸZ¶·[p4•ã°4ˆçTp‚;-9a‡`9uÜPògÜÀÁ5ïw6{½S¬)ž¿©—œ4iNp‚œàwr9EQ:>žƒ EAQdWö~³ôç»Ì-õ•ì^ùå?~çŒÒQõõ[à ➠Û+ŠÒQjñœ Np§‡°C/9{} šø¡]3lÎÐMß¹Dž3r°\oà Np‚œàw*r'B«uÓcnßRߪ{8g™íV e»¿gÛç‹pXÛº‰¼Àõõ_žžãž,Û‹çTp‚;ý8a‡¾i*Áæ$•n“d®FÓçì“$φTéöœà'8Á îôâN„f“Åc&Kñ£V<Ãy–¹¶¼ˆ-¿`FÊ_}•"Qé!½â`VÄs*8ÁF\@o=ÑëM>rgá®MÜ9_Ú¦¿(˜º©$‘²,#¡ X7÷òk¸ž® Np‚œàwzrj–Ëç¿ìö •¼F=A¢ºd«—<æ%.Âs¸ôþ¿ ÖhýÆõig̺Ž3fý¼Çpîeö'òñå;=³Y]üɺfþñœ Np§ço} ôF_Óê Ów $ù­›ŒÌŽãʳsI‰Õ¢Uc±9¨n4òïï‹Ù_Þˆä#÷´4næë¢tü-ÑáB))®q,oNR_œà'8Á î„r9S'ò?CiÞ³‡ß®mÆ>Èùòßs®Ål7ùŒëOìõ÷§lSÁ NpøNãƒwÊœÐô1-ïxýÐ@>ê¦RKÜ~á&å%#¹M™…hÕd'E1ÿʉüx¨–ÅËva·wËÇ× ›³qtZ9}(ÿïWçöèÎq×ß×ùö=œà'8Á îDsZE9ñùv›Þ:6àÕØ£ úwð8Åw¹Üû*⹜àNÎËPé]ÛÚcHßÒòŠ×ç2)^uCùWM¤ 3ί†’$‰‰yÉ„‡NdáÇ?€¢òù]Ñx:w‚"IHΜä^xï»ÅQ¤Žé?Á Np‚œàN8禔”ðêùÛÈ °ÿü]΃ƒ·ƒ³;ì4U—a¨8ˆáØ!ŽÁn5œE|ú0âÓ†—6Œð˜Äàê¤M[›ê¨+/¢®¼ˆ†Ê#Ø,&â3rIÊ* 1;Ÿè¤,$Eê•MQdZ U4T–ÒX]FSíQškʱ›ÑEÆŸFTbÑI™Ä¦d“œƒZ­é÷½´™Ú(ß·‘ã·ÓÞd iÈ(Ò†#)g]˜xÏwZs.á5;D:A·}I«[tk»çÓõ·¤H¤%D¸âÍ»xï¯Ô²±¨‚E_(ì-¯å¬™\?+Ï&=>²Û÷Âç¶þÝ„[gÞ‹˜áºvû_WwÖAaɃ3]ü]ÝÍ.J÷r Np‚œàN& ›Ø¶»ƒE¡~oµ#³HÎKfØ÷M«bKs $&sfÂQ¾gT8ªêØÑ,£JP£•$´‰ñ—)5´²v¥³’º+ýí{ê¨3+48ÓÏMbøúFö9 !·³y{5UÖ1>$)ÑŽã•,/·ÐªTñýÑ¡Œ-ˆgú0Ûv™‘õPìÔ–ÖqÄ–JrB,yú£4¤%3NrM «ËÍ´)U¬-ÂØ‘oÚ`ÛÙ¿ÆRºâ™^ÀmöQºÂõá 8÷Y5©KÒw>ë+;(Úôû¾{³×eh7”³né¦Ï}‚¸Ô!½²©ÍØÈú-ÄÔm¦*¬-5¬[ú,3ù{¢“³|Ú¾½ÉÀ¦ÿ½×bÍ]Œnýäb’²ˆJÌð‘‡oaìpØ9´e57ûö]RëˆÏÌïõ3$8Ájœ¯öq»é €ÅÎèÐÁ|ã|h_pé¼ËÐS:>u‘Í–A¨NíÚš?D«æ¦9¨Õ«v”09?ƒ›æ QwÍÞ…ê4¤ÄERSßæª›ÿ6}Nàö—V³ä¡ã-yp&·¿´Š%Íê*ìK«½•gÇæ”‚œà'¸Ss}„l´¶w¶÷&+F$Ž((Öf6µ1{j“ó£9¢'R’)9\‡AV ¼‚o*¢¹,3•Ÿ_ (Xš |ðÙ>Ö5w¥ßÒÞ!(d·ô#U 8p…i39·eW¡×¡Ôé¹<û@®‡´ˆ‹Ô!©Uœ9m8åF“®F£r®CЮ…ðp-@1[1Ê  c4ÙPœŸ7…Á·³@)Ч aé)þÓSºîeOglœñë.ÖæçÛ~Ç‹w°å{ô6£m_.æÜ_&µZ‹ÅÜŠáh1;W,Åd8ê§îÐVjJö>b²‡íµ”l_á^¥Ó3ñ²»H6]X`³™h5T³oíÇ>gÅjËŠÈ?óâŽrÝòðw_{ŸÙcÎF­ÖöòœàN=Ω1ÜyÉMo¼>¿K¬Í{i%(·¿´’%ש?fvè?ùàÆßþÒJ·ö­s†ÏíÛâñw·ôÜ5{:K:u;癦gÝEḡ•ai1€Â{+²·¬–!©1ÜåxÞ]q€íÅ•¼þõ^î½ü ŽZº¼(œm‡—`Ãs«\ܶ¯”…Ûþ²’Î?¯Ë˜/®Dqºz* ²»?¼à'8Á îÔáœEU“Æ$²¦¾™ô1I$© ÅÕ²w4þŽæjÖJîÐ2{e-?¶È( h2s˜—cfÍÞzÊŽY>„ 25´›ì]£ÿª0&‘ÀêµÍd¸Ò¯á°CAV{Žd:E›©ä8››87-ƒK‡5ðQ¹¨ØhÆ‘J转wú“8ì´Ë*2F§3RÛUÇöòv93!™é™U|ÙšÀ¹C4.×B¹sýÐ`ÛÙŸâ‘QPõ6½@³8nß爄t®þí¿P$¨)ÙÃ÷o?é~ôù·‘Ö¥^gúÈ®|•€î“²òUÙC{]©Wøäü)^q/º°W|mH‰9#™öó‡Ùøñ_i,Ûåçàæ/És!¡yÈÖ}Ij-£Ïÿ%Ã'ŸJ¥vÕMEZÁ$¢’3ÙðÁ‹´UòžÑÚ±š”Üñ¨Ô—ík+â05yå1ñg÷5ú,:ûe(htáĦ eìsYY~‡Ù3^síQìvj­Î÷;èá‰C˜tñvý7çžàâNp‚\\pkqL Ç16Ö˜Ùc 2uG‹‚[ãƒÒqvÖOƦ²gíüÖM":#ž!0—WòC³£s‚¨§<|œ³ó_õìÚeQî8ütÒS¹óÞùŠ«ô°†Î_¾Ôžâ×ÜÚˆÃÜâ4:)I¥ P> .„ˆ¸/Áf¨(F–íg¶J«'2>Åé—äצj–”ác9ÒM°´7Õ÷é9UL­M´6TR[¶Ÿª¢-Þ"Wv +¯ò)Šÿ5y©ÃÆËvâ ¸Ÿ&çK38×fˆÞ€¾¥…ïo¡wúnÓg¾ÒqnÃß­nvEáÕÏ·3z÷Q®>‚”øBµjÌ6Õ m|°f{Ë껼+|”·›`ó\ËÖåÒ tscqSʾ.8Á Np}å‚mŠÃFsMQ =¦g3·SYücЛ2(ÊO˦îÛ¹û¬›ÎÅ7NãÚ™æê ÞX~œz9È<Ïí‘=·dÿ/xv•ÀëÀ”^¦뱇ûëûyî)ß@Þ”žq-ÆV/7C€ã»WóÉîÕôM5åØm64ÚmªÕ£ ÕaS }L²Ï4¬¦V»Äy¦§(2¦ÖFÚ›êhk¬¡©¦œcû·`k­ ¤£ø¯›¬(ì.©eOi-22*E…,ÉHŠ É« ïʧ‡mý»ü7½Üâ»q.ÁÙs÷ßï^Á Np‚ë‘ ~š­¶l?#ÎD’¤€y´5ÔÆ’¢x¬¡9ímê¨áÿþú-ÿ(œbäëw¿ãkí~yØ;ÓïKÜŸ§–k^“L/@‚n×|¿3~Äš¢È·‡üºÅµ[Í 4d» ‡Õ‚F«s«¦ïrI*5*µ*(›jCB}æç°[=ûßv5£¦_ƒ"uø In}çV×=qîuóg ÙÖŽÉØLHD\6•16ûvÖ…Euôy:ã–íÝèS¬%åO!·ð"¢ÓÑ…Fx”Ùµ1‘‘+KR—M;óUJR÷x'¸ŸD;)ìÐ{MÕ]°½ùèœ P…g¬Ûxa³'ŸšœÈå—_Î?þñ>?¼ÿ{x6jµÚgz?üð–X°»qCs²8ï¼óxíµ×<†‡êxþös6l˜¸AaãÆH.y×›Ïˈåõùç£Óézõ쿤)â뼯ý¿¹S?~¼Ïxëׇó³÷½ù[æŒä®».œŸºˆ?¬.¿ŠŠ‘Ìúê¯ žb(?ÆÌ’ù³Ñh4bS«ÕÊœ¯ÿÌî† Ïò:l\;.‚›n Üg1›Í\³öewãõz= ï¿”qãÆÐÚÚÊ¥—.ðŠÎ9çðöÛoã[8Ê27l{ƒ*Ïq †¦Çñ÷ŸGtttPõÉNå•ûÏ#>>^¼H^xèãZOÁ& p:`Ê”)¼ýöÛF·uëV Éɾw…Û³gGx€Ë.»Œ¨¨¨~•Åb±°ÿ~~üñGvìØáÊ'??Ÿ±cÇ2fÌÆŽKZZÚ€ÚÀf³±gÏ6oÞÌæÍ›Ù½{7RXXÈäÉ“Eð¿ ’ä{½–ÃáÐ|’““=z4kÖ¬ñà·lÙBqq1#GŽôº.^¼˜ .¸€ÄÄD¿avìØÁÎ;½ø””22ºv•­®®æÈ‘#^á ½D—;êëë9xð`¯îEo€€B° œV>|8999ìÛ×5´]^^Α#G| 6›ÍÆŠ+¼øI“&QRRÒ§2ȲÌÖ­[Y¸p¡Ï´9Â×_ tŒè?øàƒÜrË-$%%LWQžyæ^xáþšk®aÑ¢E¨T*>ÌsÏ=ÇÇ즼¼œ 6––ÆÿøG.»ì2´Z­ß:Üÿý¼÷Þ{|BB+V¬ ;;;`ýŸ|òI^~ùe^¯×³jÕ*òòòăz‚áov¹½½EQLèt:®¾új/Áf0xá…xî¹çHHHð÷›o¾á›o¾aÔ¨Qdgg“ššJRRqqq„„„]†Ý»wóüóÏóä“Oáuýرc<óÌ3^ƒ4]tqqq®ÿÍf³Ïpk×®åÞ{ïõëç7Þ ¼¼ÜëšÝnG–{·1‹l=A%L p:!""‚óÎ;ϋߵk—ÏðµµµìÞ½ÛKXäææö)›ÍÆë¯¿ÎÕW_íS¬u‡ÑhdÁ‚\{íµ~Ë EaË–-\sÍ5^b­;*++™7o‹/îuçQàô„?Á³|ùrÊËË‘e™††vîÜpGÉ`0sæLŸ³Æÿùϸí¶ÛX»v- ȲŒÝn§¦¦†>úˆx€wÞy‡Ç{Œn¸3f0räÈŸg_X²d ÷Þ{/[·n¥µµY–innfÍš5Ì›7Ï5xÑý½¿üòË;6ùèDxx8z½÷º¼mÛ¶ñ»ßýŽ¢¢", 6› ƒÁÀš5k¸ûî»ùÓŸþä·lv»]<ŠÁa“Ëxåâ³Y}ãN>º9Si I>¾˜ËÏüŠ«¶}­)btK@àtyU*“&Mòâ¿ûî;æÍ›çµ^èðáÃTVVzpyyy¤§§÷:o‡ÃÁâÅ‹yâ‰'zw÷îÝÜrË-,]º”Ñ£G÷:þž={¸í¶Û¼ê ,`Ò¤IŠçø¿` C¯×{ÍýðÃëÐÎ8ã –/_Þ«uuÝ‘žžÎO<Á}÷Ýçumýúõ¬_¿>è´ ¹è¢‹úTŽ/¾ø‚/¾ø"èðsçÎeìØ±\JJ #FŒ`Û¶m^áß{ï=¯èž`2™°X,âؾπwì.Ìàšw (§“Nv¹OW» œ$äååyŠïÝ»—ªª*NQvìØáöìÙ„……õ:ßÕ«W³`Á‚>—»¼¼œÇœÆÆÆ^Å+..æÑGí•XƒŽÙ½>úH̲ý ))‰””” ž _.€½ÅUW]ÅÝwßݯ4X°`O·C˜={¶_—Ë@˜6m<ð€—‹°^¯ïS=ôz=^x¡ßÜÜLKK‹x N²`SêYzm ±±±?)×.¥^Êá¾eÇøøDÂû)Sl|>óW[ƒ°B·r;ó×9\ÿ~Sÿ”bàÛ†Ï7´z‰´ãüóŠLÆþf=fÕI²[_ïó©¢*ê>¹×7.ƒkÞ®ö81ǾçOLKŒ%~دXn=Þn¥ž¥×¦1öñÍØ¼Ò8ç¹}œ®Ž;äääxpƒââbÎb±ðÝwßyÅŸ0aB¯×444°`ÁŸÝK.¹„o¿ý–£GR__Oyy9_}õ3fÌð »~ýz>ÿüó^å½{÷n× Àu×]Çwß}GYYƒÒÒRÞ~ûm툂’ IDAT¿ØÕ«WÓÔÔ$¾v?qDGG3wîÜÃ577ÓÚÚÚïüBCCyüñÇyðÁûذa¼ýöÛLœ8±Wñ.¸à-ZÔ+Ñvþùçóüï ½øâ‹{%Úôz= .äùçŸ÷r 5”––ŠR@@à$ ¶ÎhY÷|Cmc#?ÕÝD¼tr«Ò½LõùËLÝÉ+’”ÀÅs/Aúf)_×)Ý´Æ,Ý’Éu7M%ô~ú(/½ô“'O&::µZMLL —]vÿûß}®Å©®®¦¡¡A<4?qH’Äܹs¹í¶Û†3™L6ÉO<ÁG}´Û­^¯çÿ÷ùôÓO™:ujŸê9sæL>úè#fÍšÕc^O>ù$¯¾ú*™™™~Ã………ñÛßþ–§Ÿ~Úç;Ô}pæóÏ?çºë®#%%Å箘«V­³Ú§‚`óƒ \û”æ¼1ÿgLÎM#9u8…W=Λ½¢¶£_ñ»+'2$%…œ±1ÿ½"L>Ëmá‹;§óÿ¶ùöÞ!ÄÅÆ’|á+”õ±í˜~3×įeé'n³6Vv¼÷/Ž»‰Fk|Ú-Ú¾¸ág=Í.;€= ¦‘˜4›—w¨ Û¶ß39ÿ>¾5 ž=íU+y~îtFf¦’5šY·ý…uµ*ÇQÌ‹3ÓùÙãáî9g’ÊYãÒùÙã/qÏœÑd¥¤2|êÍümK)›_¹Y£2IIËgÆ}ïsÈc«™ÝÐ1Ë—HZþT®û÷·|Ÿ:»D÷K®h~Ÿw~ìXƒ 4.ã­¯S¹ñ¦1è‚*WçýkÚÆë]Na^©CÆsÉÃï²ß¨ø°Ms_ÿÆ¿-Ozõ^vÖá²ÿ}‘;g"3%•áSnà¹Õµœ¨.Š$I>×±-[¶Œööv×ÿô:/*''§×Ûì;>ûì3ŸÂùóçû=«)))‰‡~Ø«¸oß>öïßß«2Œ5Š»ï¾›ÐPßCcÕªUüýïçî»ïfÚ´i¤¥¥1~üx®¹æžzê)>üðC¶nÝÊo~ó­õûòþ7Ž÷Þ{5kÖðÒK/që­·RXXÈÔ©S¹ýöÛyíµ×X¿~==ôPPG\èõzî»ï>¾ÿþ{-Zļyó?~<ùùùüâ¿`Á‚¬\¹’%K–¸fèµZ­OÑøÙgŸQVV&HÉÝÖ_>ÊÒ;®ã/ºù,Zó>cÙð—;¸sîód­þ=“B)_ÇA^™w_ y–/‹®"§m/Ýy+Kíã¸Ñ+p—½¶–'Î`Óm{yÿ†˜þ¹)†LâÆ†ñÏw?àà¼G¡Ú׳ô£ZÎyârTàÕËíÁNÏœÎøcKù¾Bflv%ßoh$+ÃÀ÷ßxpx¥ë¿§nÒÝÖÔ£˜üòVÞI~’wwÜÈÇ.–üêæÞÁªOî`h‡ldã;yþ­¼4¦‰WÏ?›g¿;ÈßÞZÇKCM¬~âJn¹æB&Üø‹6½Jzýç°÷Éí~ͽþC®k ¿™<‡æOßfã„[øCöþæ ¸\*¹Œ7ç]ÇóÊݼºìm¦%4³ó?ã‹W3r–·m_:›×üÙR} ¼—>w…·±ñ?yòUüí ‰½ÿ¼Ÿ›çÝKòÚùeæ‰Ù|677×k“…#GŽPQQAAAŠ¢°uëV¯xsæÌñ+züÁ`0°}ûvŸ"ª§-ìGEFF†×™M»wïæ¬³Î º ×^{-±±±~¯‡‡‡3iÒ$㜛 .Î:ë¬^¯K $FæÏŸÏüùóû, &Mšäs@c0òs"44”ñãÇû=Ø»·Ðét¬]»6psÂØ±c½6érrrÈÉÉáç?ÿyPáï¹çî¹çž©€€€€?ô±g%sô‘ä\Û—É_õÜ!pþ7olÁƒÏßÅÔt=ºð fþúQ.múœÏvÛúÛëô,Sl,±)WðFµ‚ýÀ'ü»h2>}£bCÑgÎä‘ß]OÆ qqS“ÝÍL.ù€÷¶[…ÆoßåKûÜ|i’O‘Ñ“¤„iœ[p€µ7°¾ì,º2ûÖm¤U®cúÌž~Ñý®Ÿïûl?ð îÍ}OßÊø„PB“Ïäž§ï`ȶø¼Ôá Çï¹eB¡*-gÞõ[~>*ްtλz&I2ïñKÉÒ>ä2®ž¦âàÞ2ß몤âG^Éc·dÛò´âýʽá&òW¾Å—Uø×;‡™óËKIð÷¦ø(—£øcÞÜ4œû_ø5ç &4*‹)¿\ÈÿÌ õ²¦8[ð{?žßn±õó½T3âÖ§¸·0™ÐÐ$&ÝõnÏÞÈG_?a³l 6̃3¹þöµ~müøñ½^¿VSSã5SPPPÐãn{ 2ċ߾}{¯Ü¦rss–[’$RSS}^ëï6î§`ë¶¶©¡‚Å—ô<=樬 Ò¼ŽGFÅwuS¯æÍêZj r¿«âµ†­úSnM‘kk1Dd’ÓÕÙѦg“¦>AFθ’›g6ðï¥ë0ÊU|ºtWÜÌyQ}´“*‹³ÏNeÇÚͶ¬e÷è™\0{:yÛÖ²Õ°‘µ»r8÷ìÔðwõ}ŸåÚêB²ÈIîÊA9„Lꨩ“]q“R“è2±DTLtW™´ZtaÑD‡v]×è48<ί1qàƒÇ¸fÚH²Sˆ‹‹gä#ë05hDU J¹’[ÎÞÅâßü‘wÛ¯fî¹Ý×4.—£º’š! KSùµ«Ó6ÁÙr€ß‹ú<}¦¶Ÿï¥šŒìŒ®)zuÙéuÕu'L°………ù\ǶaÃdYæèÑ£^nI }rkllôéVøöÛoï½á‘ÛO||<Ë–-óŠë<ß)Xš]s ¶ððð&ØÄSZ°õ êäT’õsxùPCWç±±‘Ɔ£,º(dð*™”DB[M]ûñ£TúÀ²“#ÅsÑÍ—ÀWKùzÛ‡¼·)“ënšâw³‘ží¤aäôi„l^Á+¶’uî4ÒÎæì„M|÷æJ~ˆžÆ9¹êÁµ§¥‚òÚ®›£¢” Iö˜Šêߟ\ö&?²á¿ûŒm%UêÙûüÙhd¹S ð}r;š9¿¼ŒúoV“pãŒ×õ®\ê”4R,¥© Ô¡•ziËSí½tp¬üx×l¨ã8G+$¦$ž°FE’$Ÿ;Ì­Y³†¦¦&ŠŠŠ¼DÖСCýÎB‚ûº¸‚ÙlÆd ~¡i0nœÍÀx¹óN9'v¥€€€€€€l'¢c˜-·îdá#¯±¡¼«¹‘ò?gáíOòUÛàå«É¿œ« ¶ò÷'?ä@“Óñu¼ðÌ¿8æ¯O¢Š!>V¢¼è­4ˆ¬Ÿ~3WÇ.çw½Æþq7qÃ(M¿ì2q:g¶}«Ÿ„2íœ Têáœ;ÕÆ¯|‰mÊtÆiÓžWpͨݼò»·ØUoÁ\»•ün1%¯å²\t¥XM˜e-¡z=Z†ïò‡E?t‰„A¸O®Îñ´gÙi¨æ»û‡£îe¹ÔyW3wÊ!þþëYUÚ‚¹µ‚-o=Âó+Ì'Í–ÿ^:(zãÿñÚ¶ZÌæ:¶¿þKʦrÍEé'´Q>|¸×öÞÕÕÕ”””°qãF¯ðçŸ>!!½Œ*»ÝŽÕü9Áˆ1•j`¬L}m6?1Á†*‡[^ÿ‡¿ã‘óG’5t2WýÏg8®šË̈þ&îc­NlJÇ]šÜ·äe.¨|Ž ²(¸hUÓ¯d¼¿þÇE¿º‡Ô¯~A^bÜì>è&rÓ yT—·qîÍW“­ê§ôS˜>ÁŠQçh-c§Ÿ…¶ÍÎä…ƒ{T€¦€ûÞü'7ØÿÉugd’5á>¿7—ÜΰÔêÜ_òLJ“Yvë²2 ˜óØfFÌž„v0ïÓ@”K5„[—|À¯ÓWóèì|†Œ½œ?îÏ¥SBNš-þ½ÔrÖ•g²ã73ž=†Ÿ/qpã’W˜›ub›”ôôt¯íºF#Ÿ|ò +W®ô ?nܸ^¯_ú$ò‚<½‚%Æz‚Éd ÊÝQ pb M¹ñ)%Æ ¼tM’°†€€@ÏpóâìYl¿÷ï^1(Y(ŠÂ3Ï<à /¼àÁ§¥¥ñí·ßº¶W…?ýéOüùÏî1Í„„–/_îÚú^Q^~ùe~ÿûß{„Óëõ¬]»ÖcC“íÛ·ûŸìûtºÕ?Ø:î÷377—„„ŸÛî»cöìÙ=nÁïÉÉÉŒ=š5kÖxð[¶l¡¸¸˜‘#Gž–¶ë~ ·ÕÕÕãíß¿¿Ç0'I°Š»S¹Ãyºv†ÿÛFÏŠõ´:©óxxõ±S¦žiiiäääô(Øúº~ :½½ú꫽›Á`à…^à¹çžó9îˆß|ó £F";;›ÔÔT’’’ˆ‹‹”µqÁB’$’’|»ÂòÉ'̘1Ãç1<ûì³>98›€€€À©„ÐÐPfÏžíµžÊ :´_ùÌœ9“´´4*++=øÿüç?ÔÕÕñë_ÿš1cƃ,ËÔ×׳nÝ:üqŸbòå—_æÆo<©‚Í×Þü1IIIÌ›7ϵ©KCC›6mbáÂ…ìÛ·Oééé<ñÄÜwß}^×Ö¯_ÏúõëƒN«°°‹.ºè¤Û®  À¯;髯¾Ê«¯¾*0SE°UUU kœP…¶6ïCàìv;µµµ^›eDEECSS“Ïô&OžŒÁ`ðp‰T…––¯°²,SWWçÓpêÔ©ÜtÓM,]º´Ïu‹‰‰áá‡Æb±xµ»þê î—=µÓÍÍÍ>ùúúzŸqõz=³fÍâÃ?ìU˜9s&_ýµ—íjkk‰ŒŒ±€€€€€@¿¡ölÇ68e[\\œ¯ÕjÉÉÉñ:{-##ƒ#F°iÓ&ŸéÍž=›ÜÜ\¯<|­;S«Õdggûmÿú׿’’’ÂÂ… {]¯ÜÜ\-ZÄÙgŸÝ«zdeeõØNû[“–‘‘á7îÓO?MIII@—RwDDDðôÓO3~üx/ÁÖ“íz ¥ž‚-˜ƒRN”`ów¨´,Ë^í•V«åüóÏ÷)ØÒÓÓ:t¨WœÞæá„^¯çÉ'ŸäœsÎáÙgŸõ+»‹œùóç3wî\233ý¦Ý×2¹Çïmܬ¬,Þ}÷],XÀ[o½0ýÂÂB~÷»ß1kÖ,vîÜÙçr ±†M@@à´G óØbýZwhµZ.¸à¦OŸÎþýûÙ³g{öìa÷îÝ9r„””†ÎgœÁèÑ£3f iii§¬ý²³³yå•W¸ûî»Ù´i›7ofÇŽ¤§§“ŸŸÏ˜1c˜0a>]E±Ÿ3寧”ü7°èæla Sw½SÎÁ5ïwͰùs¥89P Á& Ð œb›Ž˜”:À R$ I8Ïè¬V+ííí½rût?¯I«Õ¢×ëO«»yófÚÛÛ;ê!IH}LÇbµrfa!111'­.ŠlCRiO»—Ë!ÛPŸ†å8µ Ë2u†Z’“zÞ8Åf³ÑÜÜDBBb¿ÚËššê>ÇOJN&DÒï6»¦¶ïeHNJF×Ï2ƒÿùŸG ñüŒZ,vž{îÏâÁý/Àþýûinn¦¾¾^C@àB||<±±±üôÛ@¯akjj¢µµÕ%|EqmõìÜöÙÉ)ŠBˆö ¡ºr´šFÀŠÍ¦#,|1 ç¢(™ý*ËÚµkÉÈÈÀn·»Êн¾*•ÊÅI’„¢(¨T*W]&MšDhhhŸËÐÚná»Í¥ì:R‹,Cd¸†©£Ó8w|Î ÜØöövÆO˜€$©P©$$ÉÇOGe]¿$`Oy#£³ã$0™L´47}RÐöú(r úÄ O»—ëpÙ×DêÓIMš(ZÏ~¶î;¯'&&ökçÅ’’ÚÚÚ\ïƒ,Ë8Wú‡EQ\\÷kÎ2Lž^]]]EVVvŸ¾ ’$qôh9™™YýªsuMÙý(CùÑr23²ÄþŠ"Ólð¸ÿvŠ:µZMee%QQQDDDô©aaa¤¦¦ºÞ•ÖÖV0›ÍÄÆÆZ­öÑï*kmmí Úªµ­»ÍF~^‹‹ ¶ªê*"##‰ÍÌ¢âØQFŽÕ‘¢`·Û{O«¸OJ_Ë Ñ \d‡Mï<ŒÜ° *IƒÕ¡Âx ‘±IŒ; »ÝHÎ1/4*•ÄÛ7]ùj•IQPcGJϬ[^@¥>ñÎ-G*j‰‹Ž 6êäË Ë2‡",,¬W⻦¦†aÆr¢­©©‰Y³f‰]@àE\\«V­úIôM°ÙívT*v»»ÝŽZ­FQ—`p6Äu#:õ!B´Ñi ©r=( DG–àP"PÉ)8¤4‚q\½z5:£ÑèÊÃb±`µZ1™LTWW{| ºœAµZMLL ±±±˜Íæ>,Ž×¶°yïq2Sb8ZÓLmC+úP¬6ER£hÂøÝâu<}×tÂCÎ}®ÃÖf×:Å™—ˤ$‘É„i|´®”Ë Sû”EEyyy˜L¦>Åo>ö:õÂòhi°Ÿ–…NN|l¥UÒf¬bdîuýJ¯¿6l[¾Þ´Ýß;g£©R©Ðh4X,–> 6‡ÃAKK ²,³cÇòòGb0é0šÕX$ ‡Ðjµ®†ÜWcÝÛÙ‚ÞÞÃÚšâ°Ù줧ePV^FNvŽÏ²=ZFîð|—}[Zš‰Š:13ãΦôTØlx ËÐTw{Ãnô3šQw—žGcc ªVáz=ŠâðTèøSTH’†ä¡Cí±bªxMÍNZjˆIL?¡ïûѪz~eC“BøË×Ð÷Ý £ÑHXX‘‘‘455õ>$$„ððpF£±O3Æ[÷`ò˜áþœ544ˆ±€À)Ž`ÞÓ“ÑèKûP°mÞ¼™iÓ¦áp8<þîhðì„y ¶*4ê4êcHª$õ$@)G#oDrT"Q…D- =‹½^O{{»ÇM q­c³X,^eè.Øôz=ȲLss3V«®÷3`míV–×Ñn¶1<#‚Iy Ø ï·>»CÁfwÃËnã77OÐÕ)ÖTÎû R¹DšóGAÂbõDE&$DKÁÐd>ÙtŒ'vý^}ÉŸ‰ŠU¡‘,Ȳ™Óõ|wE»Ý„.T¦É´…­{ª˜<æ!Ñ‚úiÜßYï(@BB€¶«T*6lØÀ™gMgéêòs’Õ…±£¢‰¶6 ןHqq1ñññ^e8®mÛÚˆŽŽ%,,œê²RÒRS½Ög•––•™ÍfC§Ób4¶5àå1[ÌØm6¿bM­Vc2µÓÚÚâý±Ñj 2ج¶€÷t Ëà@Cò‰¤çŒBW[ˆÿ¼‡Jåt•éi]¿$I…,‡0îÚëHNNA ‰¦b“æäx,DE„ñØõãihm?eÞ{gG:\ï ™™™>Ã÷§Þ}Eû?îhoo§µµ›ÍFddäI[b pêôzÛ>\Ã6mÚ4×5÷¿{î¨*#æÝ›ûÿ*É‚JeB%;„šªI=Åþ H¤JÀJ+ =/ºŒŒôPºV«•¡C‡ÒÞÞNKK ‹Åï‡Àù¿Ùl¦¾¾½^J¥"44´Ok) Mm­jâÚ9cíš={ô¦)¼øþVTºP¬6“ÅN˜Z¡äxCÒb]ádYîWÇÔ§;d·ŸÔ°i_q‘!(tÌ´%ÅêqØeÔj ¹CRøfG)·§§÷© ½µ[ý¡ß—: I>Œâ0‚*‡½E‘Ógí‡¢ÈØe ’* «½•ªµZËš-ÿËôÂýL;x›®Y»–#¥¥$''séE°ìÛå«<Æ/®»ŽðððA¨»Ò§öÁß NO¾¾®¿U…C‡1ñ̳ysU ó.>DM«ÉÆÐôh6UñÁ÷ǘ‘«C–e—w7ξälœ¤¤dvï®"&&»ÝAvV6%%GÈÏÑ50ÔÖF»©cB–ê ®õ[}-›3žÑh¤½½£“owØikm!&&¶ó}ì ïfÐëõ´ۼ­ŒÌ,tZ]¿ÊÐÚâ]W>Î2„÷¿ îöSYîX?Çœ9—²iÓFÔ~\;ãÇO !!ÁmíeG:½}fû»¾¼²¶ »ÃÁ¦½G™5iÛ÷—1aDö {ßÝÃI’äZjà„Åb¡´´»ÝNxx8©©©K%t:´Z­kMy_ì­ë³ ûÚÿ鎽{÷â@ÑÒñ|†6±‹˜0aBŸ‚¾Or2ú½mŸN]¸¯èíZ÷Y÷ =<:eª …P$¥”JÇVP (JŠ¢E‹BHPýõÐÐP‘ÓÚÚJBB ´¶¶z&P‡Ð™F]]é}+5 íÌ™šK¨NͪU« u­ÁÑZ±iR±ÙXí2º05Ÿ.ûžÑ™¡®“V«eúôé>}gƒ1è&ÎT>[}³…s'd£Ój Ã; h5Ù‘ZCÞ°Lþµæ×Ï6h/”ì°Ðpø1³&£ØbT¨Õj¦áЯPC:†ÈŒ‘¤SoÖÍî°°ïÐû´šJ‘$aᑳœjì 6{ á‘Y,[wçŸó2*I=¨å9RRÊšõk‰‰Ž ²²œô´4ÒRSÙ²e#‘Ñz^ó ®ºâ*ÒÓBµ{‰ŠØ>t#¡ÚuÔ¸SÓ†Sêe¯¨^Ç{Ÿ!2ZGbb*qq hBì´¶— Ij$I…¢8¨i\OhT _¯½v“aPË´iófêêjعc'Uǫظ©cóœÚúzvíÜEuM5_~ý/½ü7Þ)PÚ IDATұð¥ùäÓyóí7Øþãƒ:Úå¯}ðuÍWØ(GDDõíÄéuØìvÚMVŒf;5Mí´š¬hu:šMŽ;æ³'QQQh´:²s7ªdÊÊ:ÞÅÚÚ"##±Ùl¨Õ**«Ž3tÈÀ ¬Fêêꨫ«£¡¡Ùmw¬Þü82²ìèwOB:Å–‡02hllôûÓÐЀÁ`Àh4v>ïÊ ¯ïk7[¹åOß²ðíÕ´µ›ùð»íì:xŒiãs¹bÆ(ZM6c¹à¬ ÉHdé×[Ùw¸’uÛŠyàÅe<ÿÖªA–U*•k†M¥RqàÀÌf³×H·^¯'**Ê5Ãv2Ð×þ¥¥¥´X$öVÉ\4%i£R˜˜›Ä”ÑY”·h8Ú{öì=e“ŒÓ¥/°rºtÿ;X8ý½ý­a“$ ™ dev¹5‡0£±}’z¡!y@p¾ž!!!Øl64 MMM 6Œ£G+h1ZénS/—H•$u'ïÀh¬'66‰ævÚMDGèÑ?Ú—žE[[+Æ C‘íì-1Pg”°+’¢FQIXílv™†V9BËÆCmD„jil¨cÖø ÆŒCII C‡í½`s ÜÄ›ÇC&IØì ŠÔ5Z­VI(J—ûެ€N«%*:‚OÖ—rå9CìtØ›i«xŠø´\րУC´ÉmØŒ+QÍ®ð²}1±gÒVûŠýÂ.;é/û¡òÏh·!59£¹‡lÁ!›q8¬#쀄Šú–½X¬´KI‰›ÂòM÷pÑ9o¢ÓüA‹ÕÊ‘Ò#XL&ì ³ÅLmm ÍÍÍH* µZ><„}»÷Ë‹û&S+&cûk ÓÁÄ ­ìÞ>to+ü½§î®?e«ÕJdX$­&t:5Mmfª›ÍÔ4ut"Mf+Øôz½GžÎÙ«åÄl3$g({öîfHÎPÌ&3ññ TVUrìØQ†ËÅl¶ © B9 gF:g·$©c†­½`8g™ú:¿Ô}†Ídö.ƒÉæ`ý:ª›LhTÎYùI®]nûS†Žv0غ‚çz¶®ÍHd@‘ïÑjÔ OágçŽàÍ/~@‘$ •×°ÿHI1aØ2e•õhÔ*ZÌ”¯Çá™:2‰¨ðÁwÏS©Tèt:’“;Ž;HKKcß¾}ìÝ»×æg?û™ëw?^çD£?ý€ššZ¶Wª8wb.²,cïÜIT§Q‘NY…ôa‘TWW“’’‚€€ÀÉÁéÒ¸†Í涸Üf³õªòŠ¢`6›]g—ùR£Î¿LFR$PbqØk‘$+ §Õ¨E6­2*èmHH&“ Y–ijjbÔ¨Ql.n¤‰4ÂB4ÞéHÖAM=åŽ¢È Z5Üuq~ðÆUIüðÃb±XøåÅ£yçÛ"޵(Z¬ÈŠ‚Ã!c²Úi7Û)­²“ŽÊaâñ›&"Ë2111lܸ‘!Cz'’œ.fª\"Œf²Uv¹ýH€Z-¡Q©P«:|$eYAÊEǸBÉéU9C‡ìРÈj¹Ë(²ÑK¬9a7m!,4s˘4©„FŸ¼sÎŽ×l¦¹}aáZŒæJ¿”ÉR‹ÅÚè” „hSph5¨TÚ^û=þðáÃ[›Q©ÕÄÆEc2¶`4¶rðÐ!4’ZƒÝ¡")5£å%T×Õ©±Xm\sõµh5òóòe}VOíƒËf&íííØl6ÂÃÃ‰ŠŠò˜¥wæÕŸ5lv»ñ¹Il/©Ã®(Ô41Z»ê`io'LQ‘œí%"÷løMÅÖ­[ÌÔ{^B£Ñ è=ôhK4io7¢R© §¸¸ˆ¡Cs1™Ì„……qøÈ!&Mœ<`gj*ŠÒyŒ( ˜Lí„„v¹o † êŽ^¯w/½[¿ÕÞÞN{{»« ¡¡Þ.dú¼ˆìø0>ÜX ²³Ç¤òÈåã<ž“¾” …–÷n‘ÛE+ŠÒéV Ê ­aÓ¨U¼ôð¥4¶´“ž͇kŠZ%‘AEí12þ?{ç'WU÷ÿ÷;}f{O²ÙÝìfS6½7B M¡©‰ED‘ èE}@ŠHAÀ ú RžŠRBI)Þ“M6»›í}g§ßòûcv&3»³›™Ù’ðx?¯W²wn;ß{ιç~?ç|K–“8Ý~ªx|çÎ(äÊåÓê—ñ\lËúúú€io÷ûÔ3ºZxjQñx<¡zŒÛ÷V¢g–Å?ᙨþ»$U‡„ˆ^Ôá—UôÝ„Í/©D‚Þ€G ¤Ð› C‡X|ØÎ„.ïøÔï Û¶mÛX°`’$ElÇZAIIIȲܧ™Sp˜‘9U)BAñ!è¬t8%’õÅÄÌ×h4âõzC¶ò‚ àV­æ-°˜Úƒ´©¨§~W™P±êuè¥ø´,ËȲŒ^¯G¾rþ8žZ·‡:ŸD]› I>E”2’-dYáÖKÆ#êtY9IJ8¯YðúeDƒ.¢N$YE ‹ˆ•dÑóá¶£Üý¥)ƒ;ã*šI+}œæ£÷ž;¤] xñ»>F•;3ˆI ¸Q•SvUnÁj® ³þ÷˜Sþsy›7oîSÑÌÌÌdþüø"u–W½FnÞh<¾æ_¢Hè‚^DñûQŽ®£Dg&?k~· =4dÔÖ­[õ")ÉI”–ŽãDE~Ifßý tö¤YRUì6;­DÑHJr v» ›ÅBR’}HÐhãüEªªªÈQ„×`AUd£Ž¦¦Fôz=999¡Y÷“``‹àfÒè$¶mD4èAÐãöJ44µð½ËËxù¥?så•WFŽÿ|‚ЉìMÍ4îÜÀ®IcÖÒë‡ô£3jd>;wí xL1]]NJKÇq²¦†¬ÌlºœF.TÓ A«ÕÊ›ÕÕÕ‰',hS_u¹Ê˜ìH;Y,V,kT‚¨jê¢Ëé ‘5™ÃÕ-½Vºë'àñË\ñ¥U:\>ðŠý¯¾'ý^~ùeV¬X1 Û«nâЉ&®^RLk§›·vÔrËŠ2ò³¬䥳iw%Í^.š[@e]':ins™–4$ýVQî¾ûnžyæ™^Çž}öYŠ‹‹IMM í;qâ’$qóÍ7sôèшóKJJxÿý÷IOO©ìD‰ˆþ#1ºÄé‘0ˆzQ‡¬¨xý2V“Qþ£©kÐp¶º3¡ $%2,Xu;Ö ˆôUSû´û Í–“J~`‘E¿t,îŠætr8”––âóùð*z|’ŠË'‡”ˆp¢"i=Žヹ}2)f3FǧÀ;vŒ²²²Ðì\Ð?î+Ë ù݇ðK&j[ÑÏ’¬FòÓE.Ÿ›…Q'ãõzÅ€yæÔ©SùøãY´hQ| }ûë]QTt½ÌEÃu»Yχ[pË£Q%/ªQôLÆØi9þ©)¹(î¿¢ÊR¥³,Âë-FЩúf ºcÈžÝ2ì;€-©gÓzlYËc*§´´”7Þx£WnŽôôtî¾ûî¸d>rüŸ¤gäÒå>Ùí§&c3@PÍH’Œßç!ÉšIMÓ{ø$FC2yiç!H#Y2çÞ!|ÚÚÚhnkÆd4 Ó‰œ¨¬AÄbÑ#{½¨‚€Ín!'+EQiokfTR ím­äd§s¼âŠª²}÷nn¼þúˆˆnƒ9@ö‚Ê]MM öœ±l<ÜF~n:’¢°§ª“ÜÓóÍÔÔÔŸŸ?  Ë2@QvìØÁìÙ³Y:%›Gšhs8““ÄU3ÇðôSkXµjUDßöÆ1uÂEì#™‘þÊ6«y…Ó†åÃR0º€––,+>Ÿ¿{"(0K?yÒàM¦B` ¬n9À¶ÙbŽPJ£·käø‘èêHp ÊZaë–AQU>8ÐHm›‹YE©(²Ba†™~VŠ„¢È˜\ÿEÂc¹U0'ÜW•³ ¿\Ì}$//.ŸÌˆìTÖ}¸‡›¾0=åõT6¹÷US’ŸA¦ÃM^F Ë猧¼ªqÈÈÂã÷¸«±±‘äää¿Ö`ø{ob싱"…- Dÿ1›Í¨ŠŸ4‹žª7^I&ÅjÀn6 D€Nöb3Y°ÛmhРáÌàLêñŽOC%2Ü䣯°ÝÑ[¸â6FZZZHÐ#ôH²2IéEʉZØÌ° x|2Q‡×ëgtV|ë‘#G˜?>>ŸŸÏ †¢ª*_¿h ¿]w2í4w¸)É63¯ÄHvб;€€ˆ¢(˜Ífd9àè¿ÒÕ»Ÿ:÷z%jÛ=¤ÙÍ!_d»³É„W’±™õ¼³q«ç "‡HçP„#ÎóÚN<†Õ´A}UnA–ÀçKÇ’y9²¿žö–?’–ž‹ä|T¨mÈî@l„-##ƒ»ï¾›‡~8DÚ‚d­g~ӡݹ[’ÙïAô¤ÚJ©­;JAÞŤ&åR^õwlz–Ž=XLYdØçc˘9å;C:µwvâqù‘©S¦2~Ü8êêëÙðñd¿UÞĉªt€¨7qËÍ7sààAÞûà}\n~Yfá¼ùqGâèøpâÄ LcØUÙŪ‹¦ :œ?Oïl¯bGµ—ÑGŸ ,cÏçãÃ?ÄãñPUUŸq㨬¬¤µµÏÇ(‹…ª]ÕH#¸ãŽ;B {ÝÎÞûó÷™Uš†Üö'¤öóØ2%›©_¿—E“†åã’žžÁþ÷ßcÊùÒÔÜĈ¼‘ìß¾©sçrþ†¯°™L¼¾è+l§ÌC{"ÚZU…¸ƒnWÇ"WùNÉð?ŸTñâÆãUµ°•5 U‘ÑëTŒî-轇$$øCáóYQñù%dYA/ŠtvyñùåÐ$‰ÛãÃç—ñË2^¿„$ÝÓ?~œÙ³góé§ŸF=žŸŸßË?[ü~È\:’Y¨ªªŠy…-;35aÙ%2//¬lø×®z,†ô"’ìÇí•8ZÙÌ‚±I:°«×Œ½ †gZˆw|êׇ-Q“€ž6úшY,¤íÔÇ>¾¯¬Íf øƒÑŒORPTµÇêY$A 'r’¢à“T,F½$‘ßL±ÕjÅçó¡( F£1ô,’$¡( _»`4¿ÿWùE©ŒI“˜8:%¢‚¦²,S\\LMM #FŒˆ‹°õ*]¾0·€M{OâõzÄÒïåÓ].æÎÍdàýMûYRäÃjÒGMxK_ˆ©wÒY³2ý'(€NoÁ”<˜ˆ)y&må? 5c²{‚àBò5ÆUNzz:«W¯æ‘G`õêÕ¤§§Ç-«×ÛÅžŒ¬øH±P]}ˆ…3Àh¬ÄVœ|‹¦öÏ0ÓI6M#Ó¾„‰%× xRât׎ÍU×^Œ‘$FäˆMÖÈ$ õ"f“‰fG £sJ¨­­£¨°No‹-äœE‹¨¬ªÆG'Чbо]_ãCNN ͬßÛÈÕNÅ/«èŒzüìŽTÔQ6=ººº„Æ¿ßÏûï¿Okk+---L˜0ÔÔT&Mšò«ENú'ÍµÇØùï™W–…³~Í '9Þä&ÿ²ë)™ñ…!ñCŒªŒ{½xŸyŠ£ŠBªÍ‘×_G­¬ õ{?À~ñ%ƒJ¨UU Ëð?²X-½Ú-ð,‘þ›Bh‚äÔ³ÆÞ^óão_2l-o¡Ê,”è? Š‚Þ½Râ“!(‡C¿w#‘¾r²±•õÛŽS<*•¶7›ö7rË¥“‘äÌ-ÅÖýÕ4¶¹‘•ĶýU¤'Y™JVzÒ G•QŸÏõøÈ‘#(.ФpPñz}QÃÝ«ªJ[[ë ùiö‡˜DpðàA.žžÉ–£TVËô:D”¤`5|Dÿú׿rÍ5×hÚ³ C8®ž­º@B„-5 $ U">êÑÄP…Ä´Z­H’„ªª´{d]À$²/rÖýïΕ£"É*r˜ Œß/‘“bÆlŒ=BägŸ}Æ„ e9ô¶Ûíø|¾SÎø›Î/de‹& u ƒÁ€ÙlÆï÷ãóù#F°mÛ6.¿üòØ+BBf‘ÑÚ 5ÙÆÒéùx½^\.n·›òÆŒzm=Èå3í¨~‹Å‚Ùl%3J$¼‘®†TðÁ(@˜ï¡hHÁ–÷M¼bÓAð£&`¯”‘‘ÁêÕ«CÛ ‚€¬zÐëLt:Ú˜4ök!²|̆T§‘Ÿu%£/–Á©¶ó¿Ù{)‹F]ÏõEÿE]çQܾ‚Yi_âúßϸ–Y]§~‡O΃?½–YÎÀoa–÷5>œ8q¿*"è@–$œn½.àÕÒîÂïu¡.¥«!Âï%VTTT0cÆ ¶mÛFff&©©©äææÒÜÜŒªª477#Š"¢(b0Ðëõ´œÜ‹«â ¦–dã¨þ„ÚúfŽ»Ç°ò;khhq K›¶mÛ†«¢‚ºwÿEY—þð<»e…­’ôFÚž{†&{rc¦‚ÒfÏ”œÍf %WïêrD(ÞÁ6 _Uë%1¨ˆ+¡¨ ±Ëœ€³FÊàÈÐÚé ‘µÛÎÉòâð * &Q&I~ ÁçYF§¶%$CðCñy2‰ÌËH¡dd*¯|‚Ëææœ)98Ý>N4:ɨl¤ '…IEÙükk™)&¦ŽAj²uHdñx¼455ÐÞÖÖw#wGÒQª* v§œ‰6#î÷KÃR1‰ b„ ”——3!KÁlµƒ Cöyh©¯¢¼­ ›ÍFmm-k×®åÆoÔ4k † ŸG]`Ègÿö$ }‘¶žç'»ÝŽ$IÔÕÕq¬#ÕžŠÔ%+YàsiÔ øì‡999>|˜¤¤$TU%;;;´ .I½^ T}ð}’Ý»˜P˜FGåŽTuÐjœÆõ÷<‡Áh¥¡åÀ¶§ÔÑÁ¡¯} ãñ㈒D²ªÒ¡ªø¬Fæ<ôÕ¿_ƒ¸y;)Uµèîÿ)¢$áEŽRôÄè’²jÒc‚«‡åCôGøÛÜÜŒÕ \ñ›Dö±ÚÔ=vç&›hnwP˜iẲ÷0xwŸZmó*m9°ò&ò"¢7ÆÉ×Ðé^{ùOŒ, LÂ57·D%¨»wZ2¶¤ˆ[—[ÈK·±ø–IÍ9è}ÅíñqÇcÿæžëçÑÔábÞøLÆäg2®0‡>=Jqn#3“)‘NÉèlv—70¹8›–'O¿ö ½È­W-ô÷\–ÚÚ£¶à¤d´ýJ”ÆŠwöz Q"#q6¥È²L{{;^¯›-‹ &àr¹xóÍ7ÉÊÊ¢­­?üáÜtÓM Ó AÃçKˆw|ê7ÁɶmÛBƒGøv,ˆæûr:ÓÈhÉsARRv»-[¶pôd3ªN‡Û/ãôH¸½2^¿‚_Rº#!ªHŠŠ¬fQ•îU6E ¬²©H^/¥#Sâ’!¸å÷ûC+f&“ ]wôÇà¿àsÊrÀ?,¸2h41™L˜L¦Ñ3™LQ±ûfl½óßE#mÁH–^¯—ººz¬‚‹ËgÙÑlf………X­Ö!%kÁ—Äçó…š Ö¹xMסÇãñxp»Ý¸Ýnü~U@0áóY1¥]pF^øÂ_@¯KÇjÙ˜†$©!=vk E9«HO™z¦ /ãPø†µ¹êùÅú•ä&qsþ‹xΧŴÔÉ·Ç¿œÐï#Â?xeׯ¤°Ä:>X,¿›ì«Z8QßNmS^QQP%?)&…´´´„Ƈ””æÌ™Ã¢E‹ÈÊÊÂn·“œœLZZ¤§§“’’BJJ '÷¼Iû•©£íøGì*ïBq)_¸éqLfû÷/ou5—/Çzô(þœ%%ôzüªJêWo"mælÆÿú7¸óóüzƒÚ¼<©©d?ΉË/Ç_S3eûe 'Öá¹ÅN™O*Ýéz'¬ºWåѳ§ _˜>A‘H2‰ˆRÍ)óHY9µ­(¨ªˆ;éÒÉ (§ÒQô~~NK%YF†v²K§ÓÑäùëÛ»¹iå\2R¬È²ŠÅddTN*ÕÍNº<>ìV3Fƒžôd3£rRÉËHfËÁf\ÿ Ël·¬¬¬¨ÇwíÞÅÇ?fÃÆ lذ>úˆ?üˆ?úˆŽŽŽ~&bC²Ý’p¤Èè?pep»Ý8:;;ÑétØívTU¥µµ—ËÅÒ¥Kñz½$%%‘‘‘ÁÛo¿­iÒ4 Î] Þñ©_¶ €ªªÛ±(c=MžúûÛ“P Ô†?£Õ-¢ËNÇá”PÃfKûWN"árû˜42 ½_@”ºº:,K('\Ð ¬¯íðÙäžÇƒ¡Ï›šš˜={vÌ> ôKÔ‚çI’„Ãáàøñ Fs÷ôéìÙ·‡–ÆÎ=wñ€C§Ÿî£&Ërij†?»`™…ªøpw'ìÕétÈžJ ¢Ñ4O§ ½8¿ß2)jM« bFF‘”’B'õ´wÔa6¥‡ú~^ÆDÑ ŸÝ“:.ý3h/î«NS,ÙÌ›tól7“ªÅecÈ;•V¦—\J¶uLB¿×W¥1yÔ¢¸ÞÃXò°õ5>x<®9w*O¿u³˜˜bBVÀé•Ùy´‘ë—•ðö›¯qÝu×Q]]Ðø,O¦¾Áíà̾ œØý&£’êIÑ9h9¾›Ý5 f“²…×DLI´üÓ]ãïèàè 7`÷ûéš5‹ñ>Šìóq𒤪*zSÀŸÖ’Jê—¯Åöìs4fdPòÛß"½ûn ÊË©¹ývF<ÿ<†””¸dë9&E¾[ýjµÏdÑA¢¦×ë#̨c¿‚0xzdÂt•¥eyL±·ÏòkV%ƒÇ¼UQQ°â±ž‹Îœ‡h°aŒS†S„#`œL <{zÄs<÷eáñúT9¡oZ¬ç "¯þ|%bw;]sa éýæ]ÇøhW%YÉ&\./|z”sfŒáëWœ T3wJQ©ú»&ð®÷m†:rä(ŠÆÎ ¶¹¢àõz£¶ ~#b•3…-‘çJTÿ >wp6¸Š”;89t8ÿüóY¿~=&L ½½·Û ²£Aƒ†Á™8:uxǧ~§Œ’82*f~ Ñ"}>Í--4(9ŒJÉÆ#E1­ˆü/rø,·ÓÅ”‘ö„;ˆ,Ë>|8´Âf4Ñëõ!¥=|R§Óa4{‘9Aºî¿Îƒf---´´´2wîvîÞMåñã\|ñŠ!Í$kA’Ös;¼ÀRÕŽIÎ4ÓT߉yäý¡aðEJÒÖSάôEt8‘’TB[ËIl=‰'‚¨WXƒé'‚2Æê¥€ÀWÇ®A’¤rù¥É÷Eœïï/Nù!F£qØr3†>\Ï­/ãÍ­UªlÆ Bz²…¯./A'»ÉÎÎfíڵ̜93æhq}µe4´5ŸÄà=ÌÈçR³ùEvÔ&1å‚»™·ü˧Ra¨ê:Ÿ|úiL¸Ægš5ˆf3žòrlé(õõâdZÇ–"‚׋¿½SI ¥¿ý-•7ßL^SÏ?ÏÈï}/æ²Mf3 (J D8™><)’¬ôü+Šbˆ¨ÍJ\n))±ùšMfë#d·ÛÉh Éb,¨mºÐªš¹ëºì_ÁìÜ€?름e8õMPQ%X»GÔà³öåß«ÊÒ€ÆÉ'N°wï^8ÀÞ½{9vìF£‘‰'RVVÆäÉ“™4iÙÙٽߩü,òóÒøûG˜]6Ÿ_¦hdf”ïA|eÅ¿ß?¨ÖªªFè"UUUlÛ¶mÛ¶±gϺºº˜>}:³gÏföìÙŒ7.îï¢(TTT„êàСC:tˆææfrrr(..fìØ±¸ÝnÆŒCYYY¯):³Ù²²1™L“Áïoð»pÕUW±aÃÊËËùÍo~CMM ‹-bÙ²e,X° Ï‰€úúzöìÙþ}ûB²=z”ÔÔTŠ‹‹7nãÆcâĉLž<™´´4M{× á,Ѳ2â³Üë—°}úé§,X°¿ß±ëìh¢ x ŠÅbÁhËÀ,äÓRSž ;öŠõX­VJ2tä¥êêÁç†éú‰•õpžðó{þM´Nû"i=ë]’$ººœdgg±}×.*㢋¾0¤Ä§g„¿àv8! 'oÁ™Á³ƒ$[ ííˆÙ?Œ¸ÏP+Ñ=åþ³™J@…”ä ÜîNt‚9‚D†¯¢Ìೡ IDATÛû,¿üå/q8½ällläÈ‘#üë_ÿŠÛ~ñ‹_píµ×Æí¯AÃa;t¸Û@g÷üNPÂÿöõà‰VDvv6W_u)3OÔ"'è/dµZ1 䥓™™™Ð¬hðgÍš…ªBR‡Ï²å 'kÑÈÌPwŒ ,^EÁÕÔÆŠ— ¹ia´´=‰Mp5J/  8ÁÑÐW]Š>mjDÈÕ¡Š8ÚŸÜAƒf.:Á„Õ¹Bn Ù3?^¯§{Üîž@@’‚)ŽŽ>'Qâ½»ººøýïÏsÏ=U!§ÓÉO~òþô§?ñøã³hÑ¢ˆqå¡¿ícüS/ÂÖÕÕÅSO=Å£>Ú‹üôWÖÃ?Ìo¼Ác=Ö«, (kýúw)/?õ>ÇC–«pЬ„L#}>Î(I²Ýn7’,sûí·óú믟VÎgžy†÷ߟgŸ}64¦ô…]»v±jÕ**++ãêÿüç?Ù°ak×®M(§Z{{;«W¯îÓmÉ’%d­²²’[n¹…wß}7®rùÆ7¾Á'Ÿ|Â#<2 ë þ/ê#g›.Ð'a‹FÂgÅúš!ë ÇÃÉ“'q:!Ó¬p嵯Ük}}E!555.¡Óé(=ŠÂÑ£´*^f<µµµÈ²hƒ}±°d w<ð ™¹£O;Fß×êêjFŒ×Õ_‰YYtÈ296O<`4’ÛÒ‚ÎçãxYºåËq46†R„èõzŒçœCÅÑ£ŒÙ¿óÚµÔ½ù&VYÆf6s¬³“”ˆ|h‰·k ½ú_e *—‚ ÃÑé ¦®†ì¬LÎ=géË`B¯O>%ƒ×;`ÚÛÛñû% ª‹êmk©Ýû”n¿6¡ÛùYíJ"³¿þxSÔë½T5` Óô+ bïwÎëõrÿý÷søðá¸êãÊ+¯äW¿úUŸùÎjkkùÎw¾7Y ¯ÇÛn»‰'2~üø˜¯“$‰?üá¼òÊ+Q'%%1oÞ¼ÐïÎÎNV¯^7Y ÇÚµkÉÈÈàW¿úÕ§èÑ álÖIΔ.°yófZZZ"öedd0þüØÛ`*´V«•ÚÚZþýï÷rÊ‹v~_ûSSSÉÊÊÐêÃp¡è “ÉÄœ9sؼyswTC¯Æíkõ,ø7Ü—/X§Ë—/™É/\¸ææfdY9>•à tP.EQ0™L$§¥qìØ±ˆ@A3ŸàïXë377—ÎÎΘÚ'HX¢bk¯~N|†+ÐHOôz}HQì¤!ÚàNÚz®²ÅŠXëôL!ùú‚“’$õòe æÏ šùý~+V¬àÀq·Ÿ ìÛ·>ú("eD¬ãS°ïfee±`Á‚˜Û2–:Ò Œÿíoiºývò[ZPU•N»çòå¤_{m‘ ï[âêÕÔ¾ú*Ù›73¶;‡Lkz:E?ÿ9†AXÙðú¼x¼žP?׋ú€^-|½UÁÑÕIcc õtvv1®´”¹sæ Z?.TUÅ`MÅe,À¢T ·Cj-PCÿTZ£¯† ²„ÉdÃa,A4ÙC¦ñÑø'žx"a>Ùyë­·òꫯ†¬czF#ʲ‚„-??ŸôôtÊÊ&ñÖ[ÿêuíü ™/2ŸiÄ2>S<ô$&უÑhDEöìÙøqã⊪öy£,ÅŤ>ø Î;Ìf’ËÊÈ+-º1ðÝïâ^±‚¶ƒ¼^LS¦`).™ìö$Ì& µµ5a“I:»wÐrÀç÷‘•ÍŠ/\:¨³øÃ)ƒ Œ•ÏŠo=MÃÉã¡Íþ íÜ ¯ÝÙ[îÌBf\û$ùEãûí«›7ofÍš5QÍš5‹üà̘1ƒ´´4dY¦®®Ž·ß~›Ÿýìg½ÌN'÷Üs¯½öZÔ`$ÃUV0_4ddd““•°õ×f6›[n¹…k¯½–‚‚ŒF#ííí|öÙgü⿈J¾Þ}÷]6nÜȾð…ˆýÕÕÕ¼øâ‹½ÎÏÌÌä׿þ5‹/¥q:?~œÇ{ŒÿýßÿíuÍÇÌ7¿ù͘ƒHõôië‰/}éK¡IZEQX·n]¯sFÅ“O>ÉìÙ³IOO.s8”——³fÍšO_‡ƒÿùŸÿaÁ‚Ö[Uƒ†áÆgŸ}FjjêY§ dddp×]wñè£p×]wÅä‹?d‘ ú‹˜õŸ‚þ>TÃ… ©Òç5Lðç‘ìhmøÆ‡ÌŸícTòäÉ$÷X}ˆE^SY”• ‰L±oJ · f³…‚’Øê³©ÝýV…%eýš³»ÝnÖ¬YÕìŠ+®à¿ÿû¿#‚‰èõz ¹õÖ[™ù$êŠ×­·ÞÓªâòåË™;wn¯ý‡Žðûβ†_þò—OëË=sæL&L˜Ðkss3ÕÕÕû yyyLŸ>•+Wr×]wñ»ßý›ÍÖ·â¤Ó1bĈ¨Çâ5«ºè¢‹˜2eÊiÏ3™LQóßýùÏfÉ’%üæ7¿aÓ¦MÔÕÕ%lÚ¥Aƒ†³aÓ Aƒ Î $IŠjîf³Ù˜7o^L&†6›K.¹$ê±#GŽœ‘²™™™”””œö<«ÕÊÒ¥K£«¯¯O¸jjjذa=ôo½õVÔsâÑ_ºtiLy3u:]Ÿu^YYÉOúSV¬XÁ„ Xºt)>ø o½õ‡Æãñh/™ Ÿsèµ*РAƒ κººz™º¤¤¤Dø’õA(î#ÀLuuu(Ôp–5ØHII!999&ùúZ)lkk;íõ²,ÓØØHuu5'NœàÀ¼ùæ›;v¬…J¯û¹ãñÉ\ºt)W^yåisÐíÙ³'"ðJAA7ÜpË–-£¬¬L ç¯AÃç™°i>l4hРAÃР?6¯×‹$I½ö[,ÌfsÌßçž!ëÃIJ0Êïp–uºçŽ×‡-D+û’ÏãñôYæ±cÇØ´i¯¼òJŸAêùF£‘I“&1yòdòóóÉÍÍ Ev|çwzµãgŸ}FRRRLÏ#{öì‰j¢z:¤¦¦rçwrõÕWS^^ÎöíÛÙ°a>Ÿï´×677ó­o}‹‡z(©Nƒ g+ÆD¶åË—ku¢Aƒ 4$ˆ¾ò¬¥¤¤°téRL&SÔã’$ñÔSOE Ù^RRÂÌ™3O[¶ªªìܹ3ê±åË—‡Vc†³¬à¹}%ˆž3gNÔò¼^/)))Q‰Ü¸qã˜:uêiå‹–‡ àÜsÏÐwþøÇ?F%k×\s ·ÝvãÆëEjEáßÿþw¯k’’’X²dI¯°þ}=ÝngéÒ¥dee Jÿëì줲²’òòröìÙÃo¼ÁÞ½{£ž[SSƒ(Ššî§AÃYŽ¿¾PIØEÑjEƒ 4hHýù")ŠÒçwV/^Ü‹8tuu±iÓ&¦M›vZS;‡ÃÁºu뢒‚ÒÒÒPÙÃYV°Núª—¾ê¤¯zêêêbÇŽLî‘P¾'ÜnwÔH˜v»¼¼¼ÐýO=õT¯ó‚aòƒÄ«§<²,ÓÐÐÐ뺠]Ïóûzž¾ÎOv»²²2ÊÊʸì²ËøÑ~DEEkÖ¬áé§Ÿîuþ¾}û´m4|N ù°iРAƒ g‚ 0gΜ¨ÇÖ¬Y5árO¬_¿žôÚ_RR¸qãÎHYC§žzЦ¦¦~ÏÙ±cGÔU½¼¼¼ˆ¨Œuuu”——÷:oÞ¼yQWÄ‚hmmåàÁƒƒ£„Åèóçõz©©©açÎüóŸÿäÉ'ŸäÖ[oís%1HÇŽË7ÞØ'Ö AƒFØ4hРAƒ 1`Ú´iL›6­×þ'Npß}÷E]Ñ bóæÍ¬^½:ª~Ûm·õ …?œe 6víÚÅ/ù˨>aH+ð³Ÿý,ª|+V¬ˆ0ot»ÝQÏ{ÿý÷û ÿïv»yæ™g8qâD¯c‰äa‹ªªòØcQ\\Ìüùó¹êª«X½z5/¼ðO>ù$íííý^ß—Ü`™bjРaè¡…õ× Aƒ I±îïXÇSSSY½z5«V­êuìoûUUUüð‡?dæÌ™¤¥¥!Iuuu¼ýöÛüøÇ?ŽJ</^Ì¥—^Ú«Üá,+‘:9>òÔSOQWWÇwÞÉ„ °Ùltuu±}ûv~þóŸG ¢f·Û¹âŠ+!t«ÕŠÝnïõ<Û¶mãž{îáÎ;露¸NG{{;{÷îå¹çžë7šßï”:è‰ .¸€‡~¸—¬ûÛßðx<ÜqÇŒ?žÔÔÔPú†ÆÆF>ùä~üã÷9I é~4|Λ 4hРáÌáâ‹/æ«_ý*úÓŸzÛ²eK\þFYYYüò—¿$--팗5X·n]T?º¾pÓM71}úôˆ}yyyLœ81jÄË_|‘_|1.™\.gHžwÊ”)Üzë­<òÈ#½Ž½ñƼñÆqÝoÙ²eÌš5K{é4høœ@3‰Ô Aƒ ÎX­Vxà.¹ä’Ý'++‹çŸ¾ßˆÃYÖ`á‚ .HÈŒoñâÅ|ï{ßë•VÁf³ñío;îûÙív.¾øâ^û;::èèè’gE‘ï~÷»QËM¤Íxà!7_Õ AÃàaÀ+l¤££ƒææf­65$Œ¤¤$,K„3üç¥oE“]Câ¨ouEüÎM·j•’@éõzŽïÞ@FÎHìY…ÿq¦OÃÑ*«*‘$èwMíɨç¹=nŽWë3ì°½ F’““Ãïÿ{}ôQ}ôѸe7~?¹ï>ŠÆrìxùiÏÿáî!++“?þqmÜeM›6ßüæ7Ì;wXÚôâ‹/æöÛoçæ›o>mà‘ .ºè"üqòòò¢¿ôÒKùÎw¾Ãš5kb&k?þ8‹-b÷îÝþa]]]TTTPVVÓ½Ž=ÊÈ‘#‡ýÝhjjbÑ¢E ]ëv»1›ÍC*_¼«”>Ÿ†Æú„ËËÉÎÁh4 y½ßsÏ÷1™"Õn¯WâÁ­}Ô†´µµ y ¤a'l‰|Ì:„ªªL™2Eëÿ¡Ø¹s'Ë–-”{íØ±ƒC‡1nܸaé[C%{¢Ê¥N' (÷0¸}6‘•pØdIKüܧGšØy¬«9049Ý3KÒ˜UšyÆžõl#±Ô‘^¯gׯÒùÖ9Tt}ó×1‡¯¬¬ ùÕ¿ ñlŸî¼ÓåÐÊ:šàßIË¿Fõ˜ fzî×1d$T†Ãщ^9rdèÙª«£6“ÉÄèÑ}6A¨¯¯£ÓÑI’=‰ôôt~ö³ŸqÉ%—ðÇ?þ1&Ó<›Ýƽ÷ÞËÕW_×*ÔèÑ<úØc\÷•¯ðÔï~Çë¯ÿoL¤å¾ûîãšk®!++k@>Z}ëkÿ²eËX·n÷ß?ï½÷^¿2ÞsÏ=Üxãdddôy?³ÙÌý÷ßϨQ£øÅ/~ÑoäÄ•+WòýïŸ3f Ieee½z¼ûî»\tÑEˆ¢ÓóDïzPÉÍtˆ(øôN$%%ñío›[o½•˜¯Û¸q#çœsªª¢Óé†eâ'Þ2êê(]l‚ PYUIþ¨Ñƒ$»BGs]ľºú9‚ÍfÄd:õ|‚ ŠF^õ%Æ/%/;'⺔̧M±q6¢ººš 6 údDMM ‹/&???æ¾ÛÒÒBiiéÿ-–:::X²d‰ÆZþÃ1XøôéÓÙ°aðö­¡=årmF$9°O'€ÃågjQʰ“•hxoG µm^ôz•ƶ.V-/!=ipgZ·i%776§U´t+Û7kœ-¤1Ñ:E‘ƒÛÞ¥ëÝŸQéÏâŠkïA–å¸Þ‰ÔÔT, 555Qõššš"È@}}=¹¹¹ÔðtuuuÄÇ5Zd½á¬£±õˆûÉŸ·éMª|‘üï€1«(¡r Fƒ!4ŽôÑ?©:A‡A¯ÇØÃ$/| ÅÈkEQdÞ¼yÌ™3‡{}ûö±oß>víÚÅáÇE‘ñãÇ1aÂD-ZÄÔ©SÈÌL¬ªz=‹.¤¨¨ˆ{~øC*ŽWô*kòäÉL›6)S¦0uêԘ˒$‰ÖÖÖ¨Çjkk{%¥†ÀЉ×ëíµ_–eA`úôé¼òÊ+8p€]»v±sçNöíÛ’sîܹ̞=›1cÆÄ$£ÍfãŽ;îàÒK/eëÖ­lÙ²…íÛ·ãt:™={6“'Ofþüù”••…V— çŸ>ï¼óNĽ^ýun¿ývŠ‹‹ãoÁ£¾ÆÐðgt]ûÅUH¡žwpRÑïå_|1o½õIIIŒ?žôôtÎ?ÿ|ÊÊʘ~¿Ÿyóæ%ü-—$)~%X?x¡Ybó‹w¡´îFF‡*èñÉ:š³V”–ÍÔ©eÝ+òA¦×ÑévlßLJíßu2‚ª""!dMgÙ  ?_á&E¡¸¸˜Y3'¡xª@Pº‰§€ èº^@NÑÒ°m!HªuèÌÅ|¼iK\9 óóó±ÛíȲÜkå?ްif“ô„÷©áê[C!{¼Øu¬ÜÜtÚ>TU%%ÕÎö#Ígœ(lÚß@§_‡¬3ãñ+˜ :²Ò’ðù•A-çPU+)Éš:¼tº<(*8½RìUµ2~túYAˆ:óXZZŠÛí’:*+ÊâľÍÔ®ûÍM-L¼ö§X’3âúÈ…¿ªªb±Xúü ôû;Úõg²Žê[]èÛ»h8TEî„2FùéüäE2/ûÉ ôE‹áñ¸c¬g€ðÕ§èu£Óé3f cÆŒaåʕǎN<¹¹¹ e=eÐé ™}:Ó§O禛n”ö+**¢¨¨ˆk®¹&¦ó¿ýío÷ë¬#¤C°ZûX©7ÁïC˜º'8ìS1wµb$€dÆã¤" Ñ'`^}õU¬V+¼ùæ›Ô××S]]MuuuBu>!Ó³_&''#Š".— “ÉÔÝ' †±mhhMòx½^ºººÈÈÔu´C˜Êeßyçþwi=ôl™)¸ÛjÎȸsêßhŽg™ ¢(öKî»ï>AàèóœXÍ >w(.†óχÎNxå5èܦ‘Ðþnjé¢39´ò£™Ì8ÒÄ vñïÓÞº¾¾ž_ÿú×,\¸0ú»²cGhÅ2>þøc~ðƒD=¦( ~¿I’B«fá¦~AS¾¾RDö?5tÏÁ†ÇëÁïë{ Ôét¸Ý.ŽÎÞ ²Á€Ål‰»L=9E3YX†¡¡Mÿû:‚,Ëa“$§&KA‡¢˜˜úÅ/“››‡`J¡z³ˆ^?xæÉvKÂ×&ÊTUÆÀ12SL ùO û«F!rahn÷ÉØÔºm?Gü sÿö QÇ‹[UöÖ l,‡™ó U Ó!Q«ÔÔy¿„-ÚÇ4ø’«ª±­AƒFGöíå-˜mɸ|~”î\QU$dEÁ/Ø^Þʸü´a‡ÛÏ{»ë°Ú“iïðÒÞÖ‚¨Ó#+*аլ¶jjwãõƒ¤(ø}~Fe˜hpJt6Û\d¥Z†ô™·—· mx%‰®Î®€²Ÿš†lÔ³íHË µC"õÖ_YÓ-LÏq±ù‰o’é­à_ ßúί¢æ„ŠéééX,ª««™Ÿ/d&NØâõk ïN§—ËÕýœŽÎNRSÓPÕÞdPÐé›ÕF—3ÒwQœ]]ŒÊÑ`Œ«Uèž|UHKKã¼ó.aË–Oz™=‡ž,1}ú ìv;Š¢t›™2¨ïcŠÍ’ð¸/Ê,¨ ´„6À `€ÔlPuÐØ^O€´õbÑaÿô ȳòžÿtX¿~=999½' •ªµoRñÔ?P|UþeÅ2vŸ„__©âö l«Tyé3d‹Àe“eF¥ÆÿÞ¤Îû%lÑnœˆm°`Ń3á\{&eojwƒ §Ó-!Éäõx‘%½ÉŒ¬¨´:%’õ:šÚÝCNVzâOï!++‹êž®.VÎÉçß;eTeP'¼vkÁh6ÓÞ)áõxY85Ñí•OjéRlÉv”7sᬡ›eojwã“$UÁçó3:Ë‚€@}W4 g¤NWG¶qA)|ðØ7(’Ëùç Wÿð>¬©Y YDô4‰üõA ÈŠÂÑš,IièEŸâ¡4?0%*ÇE+=é༠¢nhÒG•ý¶N ŸÇË‚3@ã­#AÈMxû‘k™Ì^;àcþocÂüq›B†¿ÍÍÍ!%~÷îÝa ýô¸ï÷É'Ÿ :9H?Ú£›Éä«¢æíû°¤Ø1”\HÖ• énþ4 ÂÐZDž 2hèdàràD¼þZH,›w!y#GÓäð!ùü$Ù,Ì]z 7¿Iƒ|œŽ“I W³”]”s˜Ø|ÓTàáÝ»± ,YDn†¯· «A& £Æ$±åÅ£8Ý,¿sr¯Õ¶^ªœ¢ÐÕÕ… øý~jkk@jƒ)E:ò³ôÈ’ÈÌ¿4@È,IN§“ÊÊÊ¡òz½8ŽÀ;<.7á+lnwÀ·.h¾©×ë#[pŒ Ïϧª*«Õ†¢$ O7Ù Þ¿±³‰·ö€)˜Œ&>;¼ §ÇÅòçàõúpyÝ4»ZŸ[LÑèBN™LžH” *ÐÉ0" ãŒ,ùäÖAuÝ)sH¹ûŸp6À l °Ç¡JöÝý$¶âf¿ôôIÉWýù ñ›\ü¯FCQ²ƒß­3ÏVú%lávÏ}Ù@GvÔfž_1Нý+À˜{î_?ÿüJŠ€n w}ìà®ÐWö-œÉÆÛªxㆴÓWI¼çŸ1&ÐÄŸ¯Ç÷“×rø…•D¤§Tªyê‚2šðw<±”¡ž¯wøîûÁC¼¼ñ-º\ÆÏ¿„oüèÿñµsF`ŒG–‘Åχ·sÞšjd@°_ËkÍÿÃá‘åý'øû}ßâGÏÄqW ã/¼‡Ÿ¼—óruga“…ãu]X“SdYQ?%yV@àX‹„$|ÙÚ\*ŽNˇ¬„ãý'Ñ›¬kp£J%YNÊ£¾Õ ªŠ$îÇdE 6›–.?¢êgNé©(„sÇg³í¸‹f—@~º™ý-L)Î’ö)û:)LÙ׫ºá!ñÔ‘ ªÄ[ÜÀ\qëöyÉ›8Ÿ¥7ü4a²Dff&‹…ÊÊʈ0üo$àîµ`Á‚ÐöƇµŽúêGÕ£.#ov5îòOyÃÓ ¬=1G¼æš«ÃH¬nÀli &‘ee™4i²ÆØ†+»ç?¦µ@9è fæ,¾Ÿ µ'k9pàç.;²)ÓIQJ[õ~naÙ¤1±ÜÏñÆò¿ÓçããúzŒ¢È×–Žã™{ ¸÷ÞDQäÇ,FUTž}|>—ļUcIÊ>½f$@²,c±XPU—ËE‡K ®5`Â6q”J[}@¹—%Q±Ùl¨ªŠÓéÄh4†~z®°¹=n|>GŽåDÓÉ¡RddUÅÙåD¯±Ùìˆ:!dš<"5‡²Ò $²ª0c l[,l)ÉŒ‘ÏMç~]÷8ã·(ì«?ÊuK¯ ‘³wömÀ§ú±X,´©Ýî]ÊÙÑUãæ§,Ü•-u:<^Rœ¤äø5q$èàòA÷ÉÊszNvêI’“TZ\cýñ/9ÎÐ$@ý?>æð½DÑ-+É¿ñ]€=(*¼:q9+>|žöuû°|ù” @×þV}çF}}"¹_sÆÛ¡_¶ð~ì €Há9òØ" Їúmk¸iå |}ÔtÖß^„î?e0²¸ìë—óƒëŸçï—²*ûµ”¿ÈóŸ°ê×ç 9Yó‘{WÞÂÛ‹Ÿâb’½ƒ£[Þä™ß<ÅÆ¹?g¹ñ쫺è·%OT!=ÞÜ@Þuþ^„nσ_bÕÿNâ÷j¹"ë8/|ã2¾t}:Ûßù6ctgRöèÊeJ²š/’¬¢ÕϬÒ@D®›k0"É* mŠ2Lì?ÞÂäâ¡yàD 'š}8üzPT̸øò¹SÂfãdEÅ'˃æÃ¶õP˜ìèEð»ŒQo§Ã[51yÌÀë ÍáÅë?5{z¨ªUgàd“=G¤P×â tT »«ºp´ë‘*²awMDð‘DrÒÅ[o=ëhÆØÑèEkÿßÕ,3mçïû}ø­y\ÿ_xõ£#|ñœ¢AéÃCa9T>lñö£[.»ÕçDЛŒ°xꚞ我Á<¢¯j)Š2I :r Ä_%N•§†||Û‡-žóëœÏÅ7­˜ 8îà™£ÇS6y:NÌ]Û9ºý=æÌ_Œþÿ³wßáQUéÇ¿÷NÍd&$@è½ HEÄ‚EQ±¬ºè⮫ko뺿Õ]uuW±`w킊((H—Nè-´@H/Óïýý1É!½|?Ï3O&3wfΜsïóÞÓ­ u ßÏ lédO4E¸ð—TQÞxu/™úQž8«jÀ\άyŠª0ñÉóqåy°úutÕãȬV+ªªÇj•T’¦ûØ´7p~½¨—Ê®u¹$u §ß¨¨à’ùùùDFF»Dîß¿¿ÒïQ1ŽEEE¡ë6«ÕXX;/ƒuG·Ò‘HBD,aVKw­Â¯iLp .‹œÂ<få<­;<N;FjPÞ¥-ƒY¥GËNÁ` Àä°`ò˜K—0¸ýy¬9º9ð?aÓëíxܰýý{Ô<ð¨i,P’†äí‡øàá•âéû×g¡(Y´k³—»Š9ÏG¡'’#¹ ‡s§BŸª¢cVÁ¨h˜ àöÃSy…5>?mÛ¶èèèÀDZk÷ÒûÅÙD è’Æ_öB¦f¡ç³—³÷î ¦Ø0޾ºƒ#ÿÚMË»º?¹vküÕ%Ï+ ØÊó믿2tèP|>_ÈýjS­$º™)åá)øh‡9¤Kd_^ßÖ¢¯A æaϳsÙ¤¾p's^^ĶL­úŽåög_à#"øª¼íÇÇC°xÄC$­yù›2ýê"Ƭ}”¾\ËÁí†_Ïÿ~–)KÖÊá݉͹q E1ß…‹nþÿyr<­Œ€'4€Å#¦ÕêWùjóIÌÇrÿkÿǵð‡~Cr–×>LJ¯ÝH—rÇè[˜7–·þwˆë~ß¶8Xõ°~Þ»ìì;µÙÌk·ß_qƒi(õ½ÞÙÇÄÚWœîÓh©ëøõX&ß3þÍ@8=ÇÜÎKc¨Y>\øm×¼ÂÒ¡ÅPnù×»ü}bR¹'ˆÌÌLV­ZUé÷’t½ñþʼ·w1äÏó™Ö5…¾Üúì]¼}Þ›|¸óîa¨ÖÉ­¡Ò¾a_&ŠÙŽË˜2ÂfBsºi×<2p’×b5…Qèö£i:¹.•Õ»2ÎhÀ–™çäçä¨nŸwA6÷\Û'ôÒ¡^Ÿ†ÏW?³Å¦gàö+¸œá&ˆr¨DÙO?‘v -c,¤èdj˜tôÌcíu ÖÞX´“ÙøNÅkÞ)Ńš½:ìÏð‘’™ z`} …H«‚Ë£ñëþBv ¨Wðz}\7²51Ö3R.§çÑ€îq„™üÌ{l*cmk™¿ÝC†ÏÁO¿Å—›\¤f8ë”Gº®sâĉàã¦M›JýHö¯ñû•´ªÉ.‘µÚ² ë´U”V5^¬te00‹µ~N¥ATá' Èñ ƒFOƯš)Ì/bÇšoÈ8¸•C{·Ó¶kzŸ?„Ÿ>‹ÅSÉG,a ûÙÍa|T}.þ(û#>ËþŒ[ãneBä„ ·KèIþ©~r#Ñ“+¯dúý~233ƒ÷wîܨáx<\Ô[eh·ÀEj“ÁÇøß.7šrrr‚ݬ=YYY:t¨Öë¨.,ÌFXX`™€‚‚<\n7v»[Œƒ¾ô⊧–†ØYB¦+‡1ç$ØÒµóL#aaaÁ®•5;öÀ¯Ÿ€ÖÒ–€Ýk 96Máf,Š#äœhRŒ Jèøÿ œ+ë2camcûs™·Ñ‡®¨UÇ‹AUQ×{ñ£b4™PUC ˜ÓO3Ýi5¿ŽÏïÃërñ‡Âšï î£ÝžœYæyŸæ®Ð¸y˜J³Î­É¾¤+[§-Ɔ/O§÷—£°÷‰j”<¯qÀVº+KéûÕßs]_÷Ÿ®w0五]ÖÀÂUïoäo)¡]}[çªgR™ôÍ– çÄÆ/yéë%>µÜíñï<üòÅ^þl-¯÷uòÁƒxÊü ïm˜Ï ˜,–ýí:®»úIÚ®ÿ+ƒ,QÜ0ßÉ º›“Û¾àÁi7s[Û |{[«`pµâÛ¼ñÙ&^ïXÄsÆp͸a ¼é?¼¿mI'?ãöQwóçO.ãËëËgÌM7vâ¿o¿ÇŽ;¡§(ü™7?<ÎEOgéŒËy¶Ò4ú½ú'`U)U¥»TÌÜr ƒ“᣿¾Hÿ?^ɰ^m‰µ–Þªšù0 3>YÇ«ÝU¶½4•±¿{‚1cæb*'艉‰A×u,XP¦Ä'L˜|¾^+I'“INoIÿ¾§ÊÁжçE<Í–í.è^­€­!ÒžžY€_WÉ/Ô‚Ý!­.íOµÚôëǦC®Àd$dø1„iuV*óö÷»ˆŒ'3Ï‹ßÇ-c»`6•tuP-~ýôÕX¿çªÑ‚ÏžBÆ j^f›a=øßòT|~3E~#ëvŸ`ÂÐÚçŽN‘Ó‰ßé]Çë×ÉÎw¢iA<ƒB„Ízj†. 7ß…OÓÑ“‘Æâ¬1©§/$S¿NÏ£ útaùÒE8:]À?¯ao¶Î zšý¾üº'ƒh[Ýó(>>ž°°0RRRB¦üþ曚¿×ˆ#‚÷—-[Ö yÔûQi5鎨ª*W]uUÈÕõÀÂÁõ¨•œ•7ÙIý§át999ñ裯u·bÅ €J·©5¸Ün7§V¯5›ÍÁµÆêƒ£ š™aÓW`±7ã¼þC(tûỈٕ›ð¹ ؽu­;öÀÝ’.ç!yéÇ4ÇÃÅìÁ $W¹onFûPãp«Ã|“ò s7†\LQU•'žxâTਉŽûíúa[¶m©° œªªDGG£( «ÓÒøâÄ ÆÅÄpØàd»30ëâíJ$?D¤ÑímD÷4²m~ I±Í˜z\š\<}ݺuuÜÿ)na+<Õ–l¶pº˜¡eiÅdµ†}ZtãpAZ­çƒÇY©Çq¹\X,t á¬á!-à&“·ÛS|Œ‚_¯ßÊ%3ÖFmc»ÒÌaÆjµm¢Ckh×FÅäÓØLgÿ!?™*o`áu¿ß¼ é ŠjÁ`°¡ùÃQTC½×ç'ƒÅ#;þoÿÈ`Vwû‚Ø[ÛÑîá^(fµNŸY—<¯qÀV»™aüü×Ìÿ*þW £ý5/²àÊ„j7SÌV,F 6G8VK$m‡Ìä…!U½ÊÄ€»Ÿå¶ °óYþ»¬'÷ïšÍˆ$°3æ¡G¸òí»ùtã rZè¨Xˆë5…Çï|ƒžßýBÞm׈©Í ›ý4×÷ŽE%–±Ó.!ñãüîÉ+é D^ÍÔ g3gË~|×7+' 5Ð}Æ- þû‹Ì[ûgþ1ÔDÖ·oñ¥w<¯õX̳¿¯NO}¯2mD¦»ëpþúôxîežšú,ÛziÖg4Óþð$O뽚ù0tö³ÜØ·*Ðÿ¦© xòM¶¥jô¥ü&øñãÇ— |&L˜|¼¾iù`Ç^j/SÂqØ5å¡^îþ×i߸÷ºb ,”­ƒ#̈×]D¯ömƒÛônÃæ°[­då{É-ôá0X·;£Þ*™¥½ùÝ‘Ѥg{0éE\z^<Íc˹ àÕÀç«{ÀæñúÙ}$Ńͬ’}"ŸpkkÒ3C§W¶YŒøÝEØ-VrœÛR²¹t€ÿ´`²úbVîžØOqŸøŸ6!-/Œ\XcúÄÓ:!dÔ)GNäóͺt2&¢m:] Œêß:pt˜ŒÄDœ™ÎͧçQ»èpöíÛEó–mè}Þ>ÌÌeìpGLçoï¯Ån‰©sm³D6Ö~Tº’اOoz÷îUE—Ãòƒ¦’iý뚆ÊZÕ" Uþ®Wãýb¦àƘ¸<ƒ®‡.î\íº^FDl"En?;7þ‚ÏØw¬\À°1×à ¡×ÀÑl_ñôyh ¦®Ê~5V'›ÓN Û‹O÷…Ï%ÍFXXXq [>nO`N…6¶DŠŠœhš\3ÎiÁâ³…´tEZìtÔZ§ZÕGJ_··XPUµ8X+¾8â×P½Êi‹g. 躎ÏïE×ê÷2`|\í[Šj;K¤ÍÏäÀo´ [!&Æ=BCñûIôøÈuš9Và¦È†Q5¡)aF‹‘γj&''cµÚÉÊÊfÏž=ôîݻڟ¿gÏÌæòÇý8½ðúr'Æ+gÃifDêTT³Âòã?e¢oÔÐZ_ä©KžW°•wàÔ®´Ô6ÝGþ‘¼tó.½%šõï_CB5eèvïÍõð×ûÇ1(Û@³î2õ÷s˜Ñ?¦’ O%¡E ¨ñ¤"Õùwµ2pWÈ™:‚ë3J¥"¶¿÷ ü¿ÏY½'½?OÏùšµžk˜h*{Í>0pé £ó•2ïÊGAËgχw2vìXvÿ)‘åm_úú?[’h¿Œgö}ÃMÍʯªk^çww-£ï‹yçâÄ…Hý÷(º}¬Q¯ó(qL¼e÷ßð_ßÜŸ·W´aÆsà 7.¯2§¯úH·ÁÞ†á³þÈÔW¾à«5ðtù¹ÎùPÙÁ3~üx:wî¼ZrÆ®šÆõ¢Wb*›6e hŽønds^'&ô°6™´o;˜Éb%=ׇOÓAWÈwjlQœtjhÅ?~”°( Ýš>M'#Ï‹=ÆÂ¶”“u VBZûögÿq¹>+qE…¤åú™·$%ðcå/©ðÒe '7ÏßP÷£dõ¶t·÷>tªBK©)ÑMV"m&Ràˆ­ßr¨*|>Ó;†©ûˆ‹mÆÒ¥?Ó½[7ZuìÍk?åP¦B‘ÛZoy”˜˜HXXûöíãüóÏ>þ]-ºD^xá…Áû?ÿüs½åMÎÒ×Èýå Öu}9©Qö£SKl%99¹Æ¯¿âŠ+ê„T¿e­ümO¯LІ±uÙ Îp4ëJ‡®½ðùu¶nX‹3çXHÓÑÖóévþ…ùÍô1‰¿~Ì`'PÑÄ´ÇJáTcI’øxp8+ûÍUš5 ÌV»#{˜>àJ땤¨)lÖ70Ç3‡øÿ µS8EýÍX?δÖLŒ&æŠv4k˜Ñµ.³È–ì¾áá6l6[°…Íã ´Ž”J×B?ºæC.=9X­¥jµÌ@©iýuâÖ¼Sï :®<'ÙYYè½BAUU1™Lh~-0áHÙWk ¨V«£QŨ(ØUB—J¡×‹3W¥0ÇW2Ò]×±ÛítèÐô¸£ääã9ñE¸Ù³8áÇ»ÎVW‹-‚JË*„7Wé¼}ƒr1_UUŒF#N¦Ð<œOÇòŽÒ!¡gñbæ;mç^8ÛOáÑÕ¼ùñ:”.÷ѱ¼OS£‰‹QHÙ¶sÝò$5#J¾¦®âw梣 è:ŒÅcÇÌÅÝRt@5êãdžŸ(“NjF-›EÔKnëñ IDAT@äñjÏr£(•Wö½…N¼õ4V–Ga¶p& hG§–áìÜ‘L\l3V¬\Aß~})Tâø×'ëðûyf¯§<:“Çj}½wáÖïÈÿî1¢“béµéaõz˜pK£ìGš¦Ó³gOzöìQi—ÊZµëÖM¯ä£C*ëŠÁD汃¨Qíiß­?«ì±¬.Ȭöç4g$ÍY½ €ÁWðoÇrɤv¯–@ë{”3Š6¦6˜Œ¦@¢©(çŽ/o¬Š'\#¬øW„Fnnn°¤.âò.:èÅ}I—ßÓ»qæeæàÒÝè­Noé2•ju«q¼V<þ,ôbIɱçv»Ð ½ø²\¡“Ž˜LFL&::Z=Ÿ†ë2camcƒÁ€ÑhDÓ¼h> ¯­^TE'¶™B¼Ó÷„·ßŠÙF§N>|8DzSqÙNb1YHËOÇf³ÑºuëzéΜœªó»tFtPèQj¨³ÕfeÞ–yÉ<ÈÊ+=œBw?ìý–´Â#ôJèKψA5êyÌyj ›¢¨˜#ZÒcä-¼÷êèn€2Í6J,ï»—o»‚„æ ù;¼…›7=ʃ—ýõ‡œDtÁô¹/r]‚”³ýÏãN ÛsëGß¡<üîúûò¬´ê=ŠëxŠ1Å¡ëíüãÁ5Üym'^È·’Ô·ŒyÃ8+›qó]y鑽Œ}tíT€ªÓXîPÃt«­¯åþ›_çÏNåÁÕûÈÒÂIì2˜‰/Îçé ‘¨{>ÔW%¬òƒQ'ãÍËh5ë{ÜÅ\eý,£øÏ¹£…‰>þ”wóǃ#š3³(‚®—ÞÉ'ïÝAµ±Ó~ªîòÈñjÅÝ!uŒª‚jPAÀ@'ЧZÓu4EÁ§ë¸} Yv¡F„¡î•L¯ÏÏ[ßnÇ`OÀéш0á÷úÝDJµ*•d®¯‰FjN +a]¬Ýž†O1ãñéx‹ò×/žæÍ•¾&-#ŸÏW¥b%Ûi`Íöt®Yû<¨UÐhƒZ¿AcEûRêI'7ëÆÇ¾Ïââ.>­Z·fà€Ä6K$¯ÀÉï&t Tvͯ‘z"¯Îy¤ë:©©©Áû¿þúk©ceËöÔìû”´ªÕW+ŽëàNÌ»™¤¾í‹ }ö.†ì|”ÝþÂØ~ ¼é´ZU4…VæJ¦Ô¯C[Hƒ¨-KD<Ýû ¤À¥a31nêø½SÑ8u!Ï`2‘‘ë',<‘ö}G±kù'šî’.Œº®“`´0ÖX’•$s½l®†þ °'$º@:8MÑØšÎ.´´Àé´—ºð Õ[ÚJŸKC'Õ9@yòÜä»óÊ%-]µE(3í´ € #yéÙ¸3 ñx<Å-PÆ`Àf4É+ÈGW õZ^1KdtTW]uEE…øÝ9D†ç :<ÄEéœt‰ma YRQQ<÷üs¼»ù]2òÓÙ‘²vpûüÍ8F¿ýÙ¥ÿÊ0ËX|îê×=–.]J|qK±Ë«óüb·VéÌ­rûp%ä7÷Û=ß²ëÄ6<'}ºõ"Ãu“jÂÁ†“ÛØyr­uÀJDƒäy¥[y?¤%MŸº®‡Ü¯¸¦ÇÍß¹¸¹²O<}álb/~’÷=²Yû?ÍcÌŸÊýr·ÿËúÐñ6JTný÷"nýwEi凿³ý¡Ð‡ÞëVæ=MCŸgïñHŒK禱¿êë th=žÓ>«Ê4ʦ¡êtŸþ=t¾ü>^¿ü>^/wƒšç‘×óuþõ,I=3?å•{³[⺥’šÚ2é¹…Lz®qÄ*RŽáÖMä;ýhXL ‰6.·¥ø yÉúLJñ¸”Àbª)Y NŽË«“ç6²rk*“/vÔ:ÿùz †ðXr‹ü8ÔFvoFR|åïw"»O9‚_ ¤­–ë°¹<>¶ÊÂej†IѰªúvi^åëcì,üõV+^#[S2¹lˆ«ÙX«ÒPµ±ª{q¬:ïuάÃV¬SÿK°F%€ªâ.ÊÅçÕЊÇ_jÅeé÷ƒ×í"Òb&#_¡]áìYý5šÏ}F.@V7ŠŒ ,CSàÛBf\`’®Xÿ$<ŽƒäÛ]"#w"þÛoçþŽÑú÷'qáÂÀåýñã1 ¬T—¾PT“|,i+ÇÏ‹¡5Nl……ør]ø]î [ºjš¯§fˆ ,QPúxÓJkK;tŒœÌ“¸½"""H9˜ 3³29pø(Šî¯U¹V´mÉŒ…µÙGj ”<—””Ä_þò—@9(J°ûaI¹œ ¨uÞK~5©ËQÂt"›ÛÈóå¢j:æH+ÿŠÿÅ 38rlµ»ªŽ9’ÌÌLt]çê×4¼~oïRé’P:p?•¦·`ŠTˆ±90„»±äç»8š—E‚Í^Üó¨úùW—<¯4`+÷*|­Î¿5õµ36ÆqC¥Ýåñ±ïX>†|~š‘V ÕŸÏ´ Û•{RUUùßÏû±[ì8‹[â |Jæ¯V•ÌOÚI‘FF¡N¤ÙÅymÂéÝ>¶ÜÊPITUEók§®øÖaZÿ­ûŽCñtƒ“A]›áõzK]‘¬8 #{7çó_3É÷[ð)66ïKgp÷¤Z;gƒF‹â¦W‡fU¦¡YdXHe?ù`—ײÊ¿2«ár¹ðx}üßߟ㧟~Âáp°ÿ~E!&&†­[·ûÚ[,, V«•°°Àìhc´¦híq6öÖ)ª³Ÿ×tÖ·ú8Þn™‡sï rÞŸXCÏÜ‚m­gÒ¯kbƒïG%XºwïN÷îݪèŠXÑ_¨ë|pe»DVÜòL¥AÔœÁl£óyÃqûT 2RøäÕñå–û[pÞ%·ÐºïeĵíMtËndÚÜhi÷ù|ÁñAšG¬2%p?;S^ 1aŠ=^G&O´°……‘g·£\}u 8‰‰£GÉÈÈ(Lk×sÃj±rüD:šXOPQEÁétb1[Êmé2™Ì¤çàò8ñûý!ZIKW‘³ˆÈÈšÍô§Û~Ÿ7xìy½ ‹Ø”¼™U¿®áäÑãX#ÿxùyzwïE‹„æDØ#È/È'-ýžüÜz/¯f±‘µ~mMc‹ÅÂ8RΤ5削ŠÂÓÊCòáØbÈ ·ƒÕÕn·BJV6ÝŒG«ý¥\­Ð1^Ũ–ÿ»4¦ív¿jÕªJ×a /^ú¥0‘${`r¢´ü4lö@×±úìã3Sª……dd1x0º®“{ô(v»¨¨@PtòäÉZåc\\³r/(È'/??äðùü¨ªJAA©ât»(tËŽ]Û1Œ˜ŒF Ùµ{WMj[Ã20|Àëó÷–ÑQ«ÕÊðÁø`è &“ “ÉDAA>›·l&++“'38°IÍMj?­i,À”)SjôªY%ýX:©™©lKÙFX‡,‘á(ÙQLï8¤è\Ðlþt‰,9Ÿ{½^:Ä‚î‡"—7ØzZrÀ`0àõz™Þg:aaaÜýñÝlË]N¤ÉÂ5½.c`øP²Ò²pÙ\ÁY?Ù%RÀêmÇ(t+D*àWt Š‚«°ˆö-Úâõzñûýø|¾`þ’ÁºF£‘-"P7fhq£Ÿ„ü^U[Õ(`;ž™Ïü•°Ùì˜fÕÏô±Ýðù|øý~ü~ÈÀïÒ\½x¼×å$Ò¤á÷ú04MÃ`¨~_{·×OËÄ"Š|èè˜T;‹¶œD÷ëhš?puR] Ì‘¥(“£ª¨(ÅééÜ.Ÿ?Ø8¬&ÜV‹©FAѪmÇp»  Ñí¢gû®Õ·îíbùaC:­ÂÃðz4Vo+bp÷¤åCEÂÃÃ1 Üzë­Ìœ9¯×‡ÇëÁëñàr¹p¹\ÁÀ¬$M&“)Ø5ÀçõpÅ–¹“H»µFå¤ë:­Zµ",,Œ]»v…t\µjUÈoÁòåËCÆ^ºt)#GŽ þ¿dÉFüñâÅõ°Å´AksÇ6o ¦]sœ9œÈ¥úû²ÁÀ쫺ãôhµÊ£Ðü:Õ«ên‡åLÔqn⦆Ê*M>ŸÖ­[WyÁë­·ÞjRô䮃& MhÎ\v¯ù®ÊísŽíæÈ¾-$u>Ÿ=°é‡fxò3*Ü>11‘ûÂçKww®èùÄÄÄ Ÿ·Z­–3·;Ø=233“ððð`¦( ÑÑÑÁû999Áÿ322°ÛíÁÙÿÎÄyZ©sÛí¢  UkW±yÛVb‘(Æ(þûæktj×–‰-°;ÏÍãxÆqj¼ „N` ›Ïã L0¢i€Rü›nž‡ §³ôã©9z˜ÌÌL²23i×¶ áf?Ù›Î~Ú±€æÑ˜sñŒF#úìO,+ø‹MãüÄ ¹»ßýs»»f-°6›””RRR‚¥¥¥Ñ¼yó‾EQ‚ÒÒÒèÕ«[´ãÇ Ÿ“kާù°–|;ÿ[222;v,=zôhü€­¼“aéÙPj»pœ8÷Õw+UCþ07TÚoß›ü"Oðê¿Ïç#ÜjÄj6 iZ…-Š8ÑϹ¶7En?ÆRë•8læ¥?!ÖÁœ)‚Ÿi7c2¨!3t•~¿’n%%i WøÓÔ~øü:V‹‰¸¨ðçaN›½iNŒ–ðàÌtz£Ž¦%0™qÉ”ú€R< ‹ª–ôP#jñ{V¡“ì‰5è’¨ª*·_Ñ—Ü‚À©ÍbÀf5U;EáOÓú+ûá–àB¬uÝï ƒŸ\ЂWcív{ÈÀü’û§˜Ž´g0ÇÄÕ×¾^×.‘5IGeÛ©ªJÒmï’·âmÒvýŒ¿0K«Øl¶j—¡ÍVRqª]•”OIwÄÊ'ô€êvE<ÓP™¤¤¤:M×^bÓ¦Mlݺ•mÛ¶‹eÈ! wámõê2Ó„W' åå‘j²pdÿ6ò³ÒÉÏÍ$óȶ*?ßï.dËïpòÐv|>?“¥ÒÏ‰ŠŠªö¢9½ìJ>ÃëõräÈ‘àñ¶nݺÀ¢Ï>'Nœ`ïÞ½ÁºãêÕ«ƒ]ý~?+V¬n›––Æ®]»‚ïYÙ>U›õ.B¯³X¬˜Í®WOº:¤ ¤ÛífùŠ_ÈÏË'5-•øfq\8⢚ý¾åäàõú0éEùuÇ’¿A£øB Jñ€Ó’‰düø5 MÓñé&bt1v²Óqº²±P„æ7’™™IDlóZµÝg#(é)Ò*®™k3ÉÌô2îâ„àE횊gòäÉ!íÞ½›.]º]UUƒ JžcMçö]‰2E1(aí'uÄh4V{ ¸úÈóJ¶Úˆ•hEÔKEPUCÉ>ÕPûÖ™H{yì6 v›¥ÖŸQ_ó6«[W‹°°ºÍzí°Ð%ɆÓå FdÁõfJi”š¡²2áa&¢5Ï׺–Gmó!11‘¼¼¼jUÂKï_ }<:t(xÕªU!é*©À•ü¿lÙ²4ÿôÓO!ACM[Õª“GŠÁHä…·yá­ ~Îóz½=z›ÍV<Æ%°ç–¬ZÒP¼EÎTWœËeÎ!N§“Â"'ööö³" Õ-'£ÑH›6mêœçv»^x¬¬,bbb˜3gNƒ–{çÎk”†ÊòHóº9øëç5NCö¡dÚXíßµ3q¡`РA –ïÕÝ×Êãö¸q¹OM¡o4 ù)ž>_#¿ 'ŽsüD:yytéÜ™A×8L¶(ŠÌmÓRðgïÇ—µïÔ‘¦ú}+Yß³d ²ÓÛð –pòÍ1Xìøýþ*[ÿ+Ê£šî³Íï÷sç…w•è ÌààŠŽWÖ¸e­2%Á@\\\¹ÏùÜ~Ƶ¼ ]×q¹\8Ž3zž¨.eðuë]FNã¥kküâýû÷£iýû÷—¨å7jÉ’%õRþº®³sçNÂÂÂèСCƒì[g*íBˆs_aa!û÷ïÅãñžvq¡fä’–?³ÙLçÎ]°X,gURff&/¼ðsæÌi”‹ÆuICI·Á3%77·A>#""âŒ~Fmƒ³ò>|˜"ga°×‚¢¨”îyYÒ}ÚãõPTXÈ€ó…ÌYS.—“ãGàñxj,+Š‚Éd"!©C/’6•㦦JÔÚNDs.«f’Îî¥Õ-`Ø·o¹¹¹å®&.Du…‡‡cµZC¨³eß*/íB!ÎLE·‡OSHƒ²Ïþ6ò¼$`«t [uH‹‚¨O¥÷ómß:Å !DSR2Þ¤1Ï·M! BÈ>ûÛÊsU²T!„B!š& Ø„B!„B6!„B!„5Qç1lB!„B!ÎpÀ¶fÍÉ !„B!„hÚ‡l\pä‰B!„B4x44`[¾|¹äŠB!D 4H2AqFKÿs饗JŽ!„BTâE‹$„gœÌ)„B!„° !„B!„¨ cC}ÐË/¿ÌìÙ³ÏÈ{wîÜ™•+W×ä2855•Í›7sùå—Ÿ;Œ®ë<÷Üs<øàƒež[·nçŸ~½¼F!„Bˆ¦hÞ¯±?%¥Âç;´kÇÌY·×Û댒åg†ÇãaáÂ…Ì™3‡{ï½W2D!„ø-Ó3yÿÚü~‰‘QÿZÏ'7$»9ù’Ÿå‹ÿήˆëøxç¿c–ì¢)kI-[–X•X¼ðæ½ñZÈ6µ}H—È3bÿþýÜ}÷ÝLš4‰H†!„PiÑ­5Éï}Ì~Éc.V½ó ž.] S$‡„hòõü”Fd=òÐÁÛâ…ß0zÜø2-i%¯[µl <ô@Ès<ô«–-)÷u°Õ3§ÓÉûï¿ÏСC™;w®dˆB!JQˆ5“I¹ñÞF7zö÷¼ó]s®»¾§ÖrùxZ"ÑÑÑÄÄ4£E—!Lyr©¾Sï¤ç¬çÍ{¯``ç4o×—Ëç|ÀŽBü{xᢖLüË?¹cLoÚ$¶à†7ò÷.¤{«D[÷äâ›ÿÉ/'ü¥Þ,‹Õ/ÝÌÅ=ÛØ¢#罯>‰&&D•–­XÁSÏü-x[¶bE¥Û/üáÇ`VúoÉãå‘€­­Y³†3fpâÄ É !„B”e9Ÿ¦:øò¥ qì«wYÕïF&·1”Ú(’©¥“MVæQ’¿ü#‰ ïæž÷SA”vy·Láóì÷;IÙò5ôÞÄ‚Uîâ×{Yµ`3Ÿ[Ìî#KðÉí¼Ç |°é ×½ÉUù¯qì·8P³ù¶¿ÎýÏã’7Ö’’²‘/žº´~!C—â¢"%-k%A×â…ßTëuO=ó·àýÒ-m¥orÛÓO?¦ièº^ëÛîÝ»›ä„#"@QxàrËN&BñÛb Ó´ëé²ä¾IÛÅÇïícÌÌñÄUT#S,Äv¿’fugý«Èü{>cÞêŽüþùûÕ>kDkÏüc-~‘‘¾·>Êýâ1îù’O’{r×Ó7Ñ7Ί5a¿{úVÚ­ÿóS›b¶b1Z³Û°X"h=`:Ï6­ºÛUõ: Ø„B!’ɘ™È\ø3q×]GßÓf…ÔÎcÎWÒñ‘¯Y “Y™lûûpŒš†[èNaÿ±ÊF™šÇÔøxâÜG8tâÔ¶þ#)¡ Áf=+ÇßÏ«ŸÿÀO?~ʳ#ð·kæðe¶„lBÔDIk[uƒµŠºGžN¦õ¼^/›7ofÅŠ¬\¹’M›6Ѻuk† ¼5v—Ëììl¾þúk.\Hjj*Ççâ‹/fèСØív)»z.;·ÛMrr2ëÖ­cýúõlÞ¼™‚‚ºuëF¿~ýèÛ·/}ûö%))I !„5fö76ŸÍýVÑë2‰kz¼Â+¼Ãàç§ÓÅ¿•7™Ëþ`BûÀ¸9ÏÒgùÝ/¸íúÑôI2¢« ¸ (ôJ9 Q‘ ‡ ².>¼Z¯wÉþðc0X{ꙿñÈC0î’1¿Í€M×u}ôQž~úéǧOŸÎ»ï¾‹Á``Ïž=<ñÄ|øá‡!Û8p€¥K—””Ä?þñ®ºê*L&SÈv»wïfÀ€äççW˜ŽÙ³g‡,>yòd>úè# C08:t(7n yÝ+¯¼ÂwÞÉ‘#G¸õÖ[Y´hQð¹•+WòÜsÏ1cÆ ¦OŸÎ¸qãÊ|îˆ#øþûï±ÙlUæUJJ \pG y¼wïÞ,[¶Œ¨¨¨:•CmÛ>ÓeWMÓX½z5Ï<ó .,óüž={øúë¯p8ÜÿýÌš5‹ÄÄD9s !„¨†N3yjÎ:¯XiÑçrn}>ßn.Þ@mÇMoüßcó§ÑÏsLoNÿI÷ñ÷«-åÔôºr×¼·pþùI¦ôþ3YJÝGÏbÞ˳èP<ωyÈ ®ßúWž¸ö/l:â$¢ý®yñoLŽ—AlBœ®C»v|ûõ\~ÅU!Óû—¶xá7th×®Â× ½pTÈs%Á[y¯;綪¬ZµŠ3fT¹VÚÑ£G™:u*/¼ð³gÏZ !''‡ûî»/$X+mäÈ‘ 4ˆÞ½{³uëÖç6oÞÌ®]»èׯ_•Ÿ³aÆ2ÁÀÌ™3‰ŒŒüM”Çãaîܹ<øàƒ•à%òóóyä‘GøòË/™;wnµòY!Äo”ËõŸ¦r}O[.ýö•üðû>bÍ}¡ÛÜ[úíbpÛËßrÛ˧¿Sgæüú{nj9†ßå͒ÄE³_å¢ÙRLBTeæ¬Û™÷Æk•vaìЮ]™Å¯kûºßtÀ¶yóf¦L™RnR‘Ç{ŒÁƒ3dÈI£Ïçcîܹ|úé§å>ïp8¯¼ò sæÌ©qz6nÜÈäÉ“ùâ‹/èÓ§œÉ„B!Îñ ­!_×蓎<üð誊¢(µºMœ8¿ß_£Ïܵkwß}w*ü%Ї~ˆ¦5ÌR’ï¼óO=õT…Ï:”öíÛ0jÔ(âããËlóÁPPPPéç9r„~ø¡Ìã#GޤK—.Mê9Se÷ã?òØcÕ:]`Μ9deeÉYL!„BÔ›ßä,‘7ndÍš5̘1ƒÕ«W“Ïç#++‹Ï?ÿ¼Üàà‡~ ;;»ÁÒYY׼ɓ'cµÖ\éÔ©_|q¹ÎŽ;*ýœõë×—»Ø÷ôéÓ±X,ç|ÙeffòØc•›×W^y%«V­"77ŸÏGNN¿üò cÆ”úÓO?ñùçŸËYE!„BHÀV}ôQ^{í5LTTƒèèh®ºê*Þxã G™×¤¥¥qòäÉàÿ]ºt!//]×ùé§ŸÊýœ—^z)d±èO>ù¤Fãà ÀòåË),,ÄëõrôèQÞ}÷ÝîŽÇá IDAT}&“‰iÓ¦•ym~~>K—.E×ËŸš×çóñÕW_•y<))©Áº~6VÙ•X¶lëÖ­+óøµ×^Ë›o¾É!CˆˆˆÀ`0Ɉ#xï½÷ÊèåßÿþwƒôB!„B¶sVïÞ½™={6aaaå>?räHÚ•3KK~~>……… –Îøøx^y冎ÍfÃh4Ò²eKf̘A÷îÝC¶4hP°‹di|ðyyyå¾ÿáÇY¼xq™Ç'MšD«V­Îù²óù|åŽt8<ðÀDGG—û <øàƒeí[·’œœ,g!„B![]\wÝuÄÄÄTø|xx8ƒ.÷9·ÛÝ`é?~<}ûö­vpwã7–y<%%…íÛ·—ûšŠºC^qŨªzΗ]FF¿þúk¹Aa×®]« Ë j7oÞ,g!„BqnlO?ý4š¦…t¬Émþüùµšf¿K—.•Î~¨( -Z´(÷¹†št`̘1Õ›ÌSQÆW¦Õ'??Ÿ%K–”éYÑìÝ»w§ÿþMv§­Ï²KOO'##£Ü<¨jüžÝn§C‡e_»vm'ÂB!„¢Il¥²š’Jxxx£§³mÛ¶5Ú¾gÏžå¶.}üñÇäää„YëÉpŽ9BË–-eçB!„°ëÁZm[“úöí[nׯE‹áñxøòË/Ë<7~üxZ·ný›Êã„„âããË<¾iÓ&™éQ!„B4~L YPÑoÁ•Ïç«õ{ÖvòÈÈHfΜɺuëBÿüóÏ7nK—.-óš+¯¼²VK$œÍéÓ§?þøcÈã+W®dçÎôêÕKvl!„gÄÚµk%„ø4hl¡¢`§¨¨]×k|Õe¶Æ‹.ºˆøøø®àÞ{ï-Ó²sçÎMzíµ3Åb±0uêÔ2Û‰'øë_ÿÊK/½D³fÍÊ}í‚ øúë¯éÓ§mÛ¶¥eË–$$$WånB!À¥—^*™ ÄoÌ¢E‹j´½t‰¬çÊy.\HJJ ~¿ŸÌÌL6lØPfë3¡S§Nåþœ>½?À7ÞXåúfçªK.¹¤Ì¬šX»nêÔ©,Y²„ÌÌLü~?>Ÿ´´4>øàf͚śo¾ÉìÙ³™8q"ýû÷'))‰?üP!„BQ/=`{øá‡QUµÒŠ«s{æ™g$ªŒÃá(3Ѻ×uèУÑH\\·Ýv[ƒLûn4™2eJµÒ}É%—4éµ×Τ¤¤$žzê©rŸûé§Ÿ=z4qqqFL&-Z´àúë¯/ÓJ 0lØ0&Nœ(g!„Bqnlç’„„š7o^åv6HšHçÎ+ÝfÀ€ôèÑã7]vS¦LáÞ{ï­Ó{ÄÇÇóüóÏ+ƒB!„€­©‰ŠŠbÖ¬YUn—““C^^^ƒ¤)..Žo¼±Òmf̘Ñä×^;ÓÂÂÂxâ‰'øóŸÿ\«×wîÜ™Ï>û¬FH…B!„€­)ŠÂ¬Y³øÝï~WévN§“ÜÜÜKÓØ±cËíª V¡#FHá<õÔS|÷ÝwÕ^ÎápðÄO°xñbÉG!„BQïd–ÈzÍ‹/¾È 7ÜÀÊ•+Y»v-6l >>žóÎ;/x«ª›b}êÞ½;ÇgáÂ…ež›4imÚ´‘‚+f2™7n]tÛ¶mcëÖ­$''³yóföíÛGóæÍéÔ©}úô¡W¯^ôéÓ‡-ZHÆ !„Bˆ3B|Ýãz—‘Ó˜Ö*E¦–=G¹\.®¹æ¾ýöÛ2ÏýøãŒ=Z2I!„¨¡E‹Õ©+üÚµk¥î%„œ;*tïg'ؽô#éù[°aÃ~ùå—2÷ë×óÏ?_2H!„Bˆ&J¶sÜÉ“'yæ™gÈÏÏ/óÜ-·ÜBTT”d’B!„°‰3Éëõ’×ëE×u ذawÝuW¹c×’’’;v¬dœB!„MXȤ#‹-’9KpÏ=÷ššZ­í‡ Æž={Ø»w¯džB!„M=`“õ£În^¯—æÍ›W+`kÑ¢>ø Ì)„B!D']"σnݺU¹]xx8/¾ø¢k¢ÉY¿~=f³¹Î÷…B!$`MŽ¢(´jÕªÒmúöíË'Ÿ|"Óø‹&ièСõr_!„â\" gŸCÛ°aøçž{عs'»wïi}ûö¥_¿~œwÞyØívÉ,Ñ$y<žz¹/„BqNlk×®•Ü8Ë ÆǸqãÊ}~ûöí’IB!D=’9„ °Œ5JrD°{÷nºté"!å!¤<¤<Äo¢<–-[ÆÅ_Œ¦i躎®ëÁûš¦ÿ/Ù`ÅŠRèBˆ† Ø„B!!Û霮먪L „h„€­äd$~»E ùaRBÊCÊCHy!Dã‘ËCB!„BÑDI ›(C®Jy))!åóçÏG×uÆ/…+„h›B!„k%›mBˆÆÒ%²ôÀZ¹Õàæ9Èü‡&Ò§e41m0å–¤û%_åæaÙ½°Y,X,¬±7ð•Kò¥ñnNþø/îÛ›Q¢Zô`ôíÿá×LMò¦Qnù;?çÉëGÒ£E4‘ñí4ù1槸%oûæÝÃ+—Æ~nðJ~4ðít_ý5óçÏþ¿`Á,X µF!D£.‘uæ%ùÓ¸ùë¼¼ø›äý;¯aÚÌhVsíÎÂQ‚gw—##^ØKÁ àþnmgzA×9›wí³º<<ËxóÍtýñ}êßë‘E<5ëv®šǦw¯&V‘òhØÄgóÃ;ßa½úÿøæ¥Ä9·òÎ=Ó¹ñz;+–ÞG7ƒ”GcýŽì~õ÷¼®žOWã1tÎÞït.”ÇéÁZé  àòË/—ª¢ñ6Q›ßÙõ¼÷îÝ÷9×v‰D¡7?uïšÇÿvÝÊÝ ’Gâ·Ë| O|xÉ©ÿ#¯äÏ·¼Á»Ï¯a·ïj†š$‹”Í•{êÿ¨ÜrÓE<}Ãöx9+¶sâgdç«üþ­$ë<^ý¦dH#»âŠ+˜8qbÈšl­Ã&„ °I [Íé'·±ýx úö‰ ´äjë>ôvü­;œèÝÂϾïtŽ ×C¾ÏYü=Î¥Aüz&«WìÀÒs: gg¹œ;å¡á:±…Þ_ŽuÌã 0Iy4 Ï^úý[$=ö#—Å}Ϋ/%-lB!ÊØ|>ŸäH ùssÉ×mØ,~‚Ùç·îçPN>^Ÿ…³©×—ªªøýþsb_ðù5Ð5ü>¾³´åà\*p²óõ›™³´.¼Š¿Ÿ”G£\ÊÈùp îø7 ön7òïO'ÐLóáÓ¤<–›äîâí³è²h´Ô@+Žæ÷q6~¥së|%„M4`“«b5§Øì„SH~¡†®XÓ É/T±;‚­ngMU®’AØg]µT/ýÎÖïp®”GÛ_¿‰kž÷r×'psGãYùΕòˆœö?NLÓpeìä‡þžß_þGìËÿŘHEÊ£y·¿Ì½ï%ñð¢‰4CG#ð{q¶~§sé÷C!šY8»®[lwz$cëÖ“ÁÀÌx ÉùèÕÕ"$„žÇúMåª)Ìùâ#îékG‘\i§k³Løýuô>±œå{¤U¤¡¹·o 9åsnêEdd$ÑÝÿÄ ç.ž¿0ž¾üŠW²¨qߥ›ªJõIÑp¤…­Î9Øi×ufìËOðÙ¿1¾Ù!>züuö ¼—«;«g]žž[-lÁ&6iak´/ÅÊg¦1ó³<þÕ¸®“õ¬Þ·ÎúòpþÀßN¡ïÌËØ9cöþc#pGGƒœ¯XøäHŸ|ê-õu&žÿƒ®à‘óŒÒC£! §“U«V…¤½:÷…B¶³$ {Ü3ÿÌá‰q¹³(‚N£náí×n¢­rö %ûÀÙ»/èœ|o2=g/Á]üÈõ ŸåB^Øü%7%*R ™þì…üëåµd¸á®_rWñãJÄ>Üó_ÆZäøhPÖá\3f ÏÌ™Èí[RdkN×Áø¿O`l$geÀv.ýv¾†~Vw‰<[Ë#::š¡C‡†Ì YúûT4KäŠ+¤$„hØ€MÔ’©5—?þ—?.YÑøâf|Fú ɉ&QÑÓù$}ºdD“F»KÿÈ—þQ²¢ R[ÞÊ‚c·JF4ÁôôN×ué)„hœ€MZØ„ —òRRBÊC!š¹<$„B!„M”´° Nßä ©”‡òòRBÑ6Ç#9òg0ðz½²/Hy))!å!„M-`“ÙŽD‰ôôtÉ)!å!å!~åѼys)8!ÄÙ°Mš4©QñÕW_ñtJ3|ùy(ª,©Û˜ttžbæÒK/•Ìh"-Z$å!å!¤<¤<Π•+WJá !ÎŽ€­1ù r1ǵ”iNJ!„BÑ4™Y"E&¬B!„BˆÒšÎ,‘zñM!„B!DÙ€­qIÄ&„B!„¥I?D!„B!„h¢šÖÂÙÒÀ&„B!„ålO"6!„B!„(7`kÌ6Á&„B!„•lOB6!„B!„hš›ÄkB!„B2K¤®ë§nžƒÌè ÎKŠ!2¶-§ü•%éþÐmêé&„B!„¢Š€í/ÉÏOç–ùñ<°øi{¾bo1ý¦×IÑÎdrt¹5‰›B!„¢Él§Z×ÖñÞ»{tÏLî5º77=y;ÖÌãã]>iaâÿÙ»ó¸ªÊÄãß ¨€\qrÁ0—Ð\Bs´ÆMÅFͦ0+›ß¤ŽZYiY999Úä •å¸d9©#df¤´¨8âî‰Ûh:¹oAà.¿?&I¼çÂY.òy¿^ç%œý>ÏΗç9ÏÊ€á3lŽs{´çTCE†×•éçyÞM"ÔÎ|8…ŠJχ"@IéÖ­›>øàƒ|Ï£mÚ´I§OŸVƒ ·ùþûïž_{ðÁXìó°Ûí:tèvìØ¡Ý»wkïÞ½Ú³gΞ=«úõë+,,L-Z´PË–-uçwªM›6ªV­x¯¯:sæŒÒÒÒ”––¦;wjçÎ:þ¼Zµj¥ˆˆEDD(22R-Z´p{p›‚\¸pA‰‰‰Z½zµNœ8¡nݺéÞ{ïUTT” ÜÖf³éÈ‘#JKKÓîÝ»•––¦È××WmÚ´QÛ¶m¡víÚ)88˜ šÀvkïa@…¦fÍšiçÎyó>¬ƒ¶ÜÜ\Ãáü;wë:¤¿þõ¯z÷Ýw —Ÿ>}:ßùIRß¾}õÊ+¯¨S§N2™LnçìÙ³úè£ôꫯ˜rüøq­Y³&ïûÇ{L/¼ð‚Z·nírŸÙÙÙŠŠŠÒöíÛóÍ×È‘#õã?ê©§žRRRRÞ²””M›6Mqqqš7ož||œoñ‡¶nݪٳgkþüù†Ç¾þ˜f³Y“&MR\\œË ²A—H”³Ù¬Þ½{;Íß¶m›áú'OžÔ÷ßï´–-[ëøÛ·o×ý÷ßï2¬¹²jÕ*õêÕK+V¬pký;w*66VÏ<óŒÛ£[.X°@={öÔêÕ«‹õÙ.^¼¨çž{._X»^= ÃZFF†¦Nªûî»ÏeX»‘ÅbÑ‹/¾¨=zè›o¾ážÝS›Íf+—éºÈÈÄ # óööVçÎæñÅÊÉÉqšŸžž®ãÇç›×²eKÝvÛmE>öñãÇõÔSOéðáÃÅ:w‹Å¢§Ÿ~Z?üðC¡amàÀJII)ò1NŸ>­áÇy[«Õª¹sçjéÒ¥.ƒr—.]œæ_¾|YÏ=÷œ&MšT¬×&¤§§kÀ€Z±b¡­œøÜx!”YàЪU+™Íæ|aÇŽ:qℚ5köËÝßÏÝônãö{ñ®±Ûíš;w®SWÂâªääd—-|gÏžÕèÑ£‹ ¯ãÅ_TBB‚êÖ­ëÖ6 ,Ð\.ŠŠRhh¨SÈ›>}ºÞÿý›*‹Å¢áÇ«^½zºçž{¸ÀË3°ç¯%ez7?I™Ôˆ‡pÕÔêÔõ[­>ŒºáæÜvÛmNϱ>}Z?üðC¾À–­U«V9m×]w¹ýÙ5GÕ¼yóœæiÖ¬YêÙ³§j×®-“ɤŒŒ :tHo¾ù¦>ýôS§m6lØ ßÿþ÷N„8-Y²DëׯwÚÆl6ëùçŸ×C=¤Æ«J•*:þ¼’““5vìX>}Z7Þwþùçn„YXÇÌ™3 ×ïÒ¥‹&Mš¤Ž;ªvíÚ²Z­úïÿ«/¾øB/½ô’SkœÅbѸqãôÅ_0Iy¶ØØØr9‰„„EGGSôË–ú >@}P¨,õ‘œœLå•°êÕ««OŸ>N{¤¦¦ªwïÞyaìøñãÚ¿¿SÀ*Îók©©©N]+Íf³æÌ™£|0ßü5j(22RS§NÕÆ¶Û»w¯rrrœZùΜ9c€Ìf³ÞyçÅÅÅå yõêÕÓСCU»vm 4È)Íž=[>ø jÔ¨áöçìØ±£f̘¡öíÛ«jÕª:uꔾþúkuèÐ!ßz™™™š1c†a7È!C†èí·ßÎ7˜ˆBCC5zôh…‡‡kРAN!sûöíZ¶l™FŽYä@âó¢P’L&“ásl+W®Tfæ/=ªöíÛç BCCRäc>øàƒ:~ü¸¶lÙ¢åË—kêÔ©úÍo~Sàš4i¢¶mÛ:Í¿zõª®^½ê4?--Ͱ+dïÞ½5tèP—Cö÷ìÙS pšÿÃ?hß¾}nÆ   ÅÇÇ«[·nò÷÷—5j¤¸¸8§‘'wìØ¡o¿ýÖi¡¡¡zóÍ7 ùñž{îQ||¼á²Ù³gëÂ… \äeˆ>(q-[¶tzŽíÀ:zô¨Z·n-‡Ã¡ÿûßNÛÅÄÄ8uísGÕªUÕ¨Q#5jÔHwÝu—[Ûxyy¹ ‡7¾èÛáp¸éÒ¨;âõªT©¢~ýú©nݺjÓ¦š4i¢† *((Hµk×vû3>ðÀŠŒŒ,t=‡Ã¡uëÖ¶®ýáPÓ¦M ÝGtt´ºvíêôÈÔÞ½{µoß>uíÚ•‹¼<#¿ $ÜvÛm Ë÷ì•ÅbÑîݻպukeddøüZiÝ—Z­VýôÓO:xð Ö­[§ÄÄDÃun<¾ÝnWjjªÓºf³Y·ß~{¡Ç2dˆ† rSçÞ«W/·ž¹´Z­úꫯ ϵk×®nug Pll¬á¶r l@Ið÷÷WŸ>}œËøî»ï4hÐ ýç?ÿÑ‘#Gò- ÒwÜQbç`³ÙtòäI=zT‡ÖîÝ»µbÅ ¥§§|ƒìããjrrrœÎW’üüüT³fÍ2)SwZÆ®ãŸË“¤ÀÀ@·_‚m2™f¸ìرcr8<ÇF`@Ee2™Ô±cG§ùk×®Õ… ´gϧ.{aaajÔ¨ÑM×ápèÀúî»ïôñÇ>ÇåîùߨŒ^UµjUU©R¥ÔËÓl6+00Эu]«¿¿¿üýýÝ>¦«ÁP.\¸@`+¯ÀF—H””;î¸CAAAùùé§ŸtàÀ­[·Îiý>}ú¨ZµjÅ>ÞÅ‹5kÖ,½õÖ[ÅzItA­ v»½ÔËÒÏÏÏí°UÚAŠ VŽ ()·Ýv›š4i’/°Y,-]ºÔð}:t(v°X,zæ™g4þ|Ãåf³YݺuS÷îÝÕ²eK5kÖL5ÒK/½¤¹sçJªV­jøüØ¥K— G”,in·äùúú‚’™™©ÌÌL·:¹té’áü:uêÚÊ+°Ñ€’âç秘˜mÙ²%ßü3f8­äò™)w|ú駆aí·¿ý­F¥–-[:»Ýî4¤+U«Vuzøµ xöìYµhÑ¢Àí<¨7ÞxC U£F¬ºuëºÝªèîKÞ«W¯®FiïÞ½NìäÉ“n½6Ááp¸|Ö¯iÓ¦¶2Ä{ØP*L&“ÛCì·nݺØÏ¯]¾|Y³gÏvšï½÷êïÿ»¢¢¢ [•‡N:eŒn $^^^†ï–“¤={özŽû÷ï×üùó5nÜ8õïß_:tPHHˆf̘áV£‰¼¼Ü»u÷ööV=œæ[,¥¤¤¸u¼ŒŒ ­X±Âi¾Ùl.Ö‹ÍA`€jÙ²¥‚‚‚ ]¯wïÞªZµj±Žqí¹¸EEE8‚ã¹sç\¾¸úÆÀf2™Ô¡CÃu-Z¤Ë—/»<ŽÕjÕgŸ}f¸¬sçÎn·Ve½.]º.{çwtôèÑB÷±fÍà F`+ÏÀæp8~žrôÝ3·«úÏý_ýêSâUÇuËKvÀ­)$$D¡¡¡…®w3ϯeee2²víZ?Þå6ï¾û®>l°Œ¹ÖñFëׯ×ܹs•››kx¬uëÖé“O>qšß¢E µk×ÎíÏY”ò‰ŒŒTûöíæ>|X'NÔÉ“']n»qãF;Ö°LGíöh•(…Àö‹*ê>ã€2²²tqù# ¤‹*ŠÁ××W½{÷.p   ·^>íJõêÕe6›æoÚ´IãÇמ={”­ÜÜ\9sFk×®Õc=¦×^{Íå>†Å¯W¯žÆg¸þøñã5qâDíÙ³GYYY²Ûí:þ¼–/_®‡~Ø0üŒ3FuêÔ)•r¯U«–^xáÃeK–,Ñ Aƒ´zõj9sFV«UÙÙÙ:räˆâããÕ»woÃ÷¸õèÑC à¢.c…:â¸na( wžc WÆ ‹}Œ† ªM›6Ú´i“Ó²ùóç»9Ò•ÌÌLegg~–‡~XK—.Õúõë–OŸ>]Ó§Owë;vÔ AƒJuðŽ~ýúé‰'žÐ¼y󜖥¤¤¨OŸ>nï+((HùË_Üa%‡gØPª®½Í•èèè›zùtõêÕ5vìØ"og6›Õ¯_?§ù—.]ÒÅ‹ ·©[·®fÍšåV7Ï‚ÂÏÌ™3\ªåîïï¯7Þxã¦[Å‚‚‚´hÑ"ᣌ›ÕjužlvÉa—ÍhY M¸u5jÔ¨À!û###oº¥iÀ€.»+º kñññš5k–Ó0÷‹E‡r¹mxx¸–/_îr`‚„„„è£>R×®]ˤìëׯ¯?üÐe÷È´oß^‰‰‰ºÿþû¹=!° RÐ2@Á zŽ-$$䦞_»ÆÏÏOúÓŸ4}útÃçÙ®7pà@%''ëÑGUÆ Õ¶m[§u¾úê«ßÑ¡ÄÄDM›6­Ðã]ãÕ$ IDAT ˆ#GŽÔ×_­^½z•iùשSGS§NUJJІîv 1c†V¯^]¬`Š’ãC 44$~Û¶mÕ Aƒ9NõêÕõì³Ï*66V7nÔ¿ÿýomÙ²EW®\Q§N®®]»ªmÛ¶òõõ•$U©REÑÑÑZ½zu¾}-[¶LÏ<óLa2((H/¼ð‚† ¦ï¿ÿ^ßÿ½ÒÒÒ´cÇeffªmÛ¶ŠˆˆPdd¤"##êö»ÔJš···¢¢¢Ô¥KMš4I»víÒÎ;µ}ûvíÛ·O>>>j×®Ú·oŸwÎuëÖåâõ´Àf8èÈ/Ml :™L&M™2ES¦Lq{›˜˜˜"õ¬2™L?~¼Æ_äó Uhh¨}ôQ·Ö;vl±ž»¦~ýúЉ‰QLLÌM—mµjÕ´mÛ¶R«;///5oÞ\Í›7Wll,sà"â;tvÑ ׬©à¡Kt1c™ ®©šÁ4ï$© Ê‚‹.‘&Õ[¦SqxD`cðÐÀÏâp8tìØ1íß¿_éééyÓ‘#G”™™©&Mš(,,LÍ›7WXX˜Z´h¡-Z¨zõêåv¾Ó¦MÓĉ–mÙ²¥Ð—fǪU«ôÀ8Í_¼x±~ûÛßràÖ l´°y†ÜÜ\mܸQ~ø¡-Zär½ãÇ+%%%ß¼ÐÐмё5jDa˜EàYöï߯§žzJ=zô(0¬¹røða=ZíÛ·×Ò¥Ky19@`ÃͲÛíúüóÏÕ½{w-X°à¦÷wúôi 2Do½õ–²³³)` ¢K¤p8Z²d‰~ÿûßËb±”è¾_zé%hÔ¨Qåö¢FÅ“ïÞf³•ËTÙ%''Öºté¢Å‹ë‡~Ð¥K—dµZeµZe±X”žž®E‹©]»v.÷ÿòË/kÓ¦M¥þ9L&“&L˜ ‡Ãá4•Æ€#À­._ Ï;•½cÇŽiÔ¨Q†aÍl6kÚ´izôÑGe6›–(,,LaaaêÝ»·þüç?kÆŒNëY,½ýöÛjß¾½|}})t "¶G,KIII•®ðív»æÏŸ¯ôôt§eU«VÕ¸qãÔ¬Y3mܸѭýýêW¿Rzzº>ÿüs§e‰‰‰š;w®Z´hqKÕǶmÛ çïØ±CuêÔ¹e®•ÊøÿƒúõA}”ÙÍo9PA[lll¹œDBB‚¢££+]áïÛ·Oß~û­á²¿þõ¯Åzî¬]»vJKKÓñãÇóÍÏÉÉ‘$·Ê9))Éi½ .(11Q«W¯Ö‰'Ô­[7Ý{ï½ŠŠŠR@@@‰–‹ÅbÑ–-[”ššªÔÔTíÛ·OááájÛ¶­ºwï®öíÛçµ8ºj¿e®)£úõêƒú(9ÉÉÉT€ŠØPv‡V¯^­Ó§O;-ëØ±£yä‘b Ò¤I3F'OžTË–-Õ¸qc5hÐ@õêÕSíÚµ ·ÉÎÎVTT”¶oßžo~||¼FŽ©üQO=õT¾¿š¦¤¤hÚ´iŠ‹‹Ó¼yóäããsÓ/ζÙlZ³f^~ùe§sIOO×Ò¥K%I=zôД)SÔµkW.$ØPò222´xñbÃe¿ûÝï\†«Â˜L&=ÿüó%vž/^ÔsÏ=粋K=J¤+Ivv¶fÍš¥×_½Ð‘2¿ýö[õéÓG³gÏ.ñÖ=ÀcÃú—£GêÀNóÍf³:wîìçhµZ5wîܼ–-£síÒ¥ËMÇn·kîܹE š‹E#GŽTXX*G`CÙ9räˆaKRƒ âç¸`ÁÃPyMTT”BCCoú8›7oÖK/½Täí,‹S×IàV›”ËɃ‚\Ó°aCÃ!üËÃöíÛ ìž8xðà›~MÀµ®®Ž3räH¥¥¥éÊ•+²Z­:w’’x~ •/°½ð¸,¦ÊÆápèìÙ³†Ëš7o^¬ÁFJSÇŽµ~ýz]¹rE¹¹¹:~ü¸.\¨»ï¾û¦÷žž®•+W.›:uª¦OŸ®ððpùûûËÛÛ[µk×Öý÷߯%K–02*W`CÙ¹råŠá|·¶ûí·e2™Š4ëСCE:Ï   ÅÇÇ«[·nò÷÷—5j¤¸¸8µnÝú¦ËÁU+^tt´Få²/$$Düã=¦5x–U«VÞ}üñÇNë:½ù曆ëoݺµHÇ=qâ„V­ZE t-leÇd2ÎÏÍÍõ¨ó|àY*û¶Ûí._|ýøã«Fn©¨¨(þ€r—““£ÄÄDuïÞ]‡¦@P: eÇU9uê”G…Ø^½z•ȰýFl6›6mÚä4ßl6ëÎ;ï,tûjÕªé׿þ5(W‡ÒèÑ£KXC‰c”Èr`2™äò?|NNŽüüü<â\›6mZjûÎÌÌ4ì¨Zµj¹µÆsA€r‘••¥åË—ë¹çžÓéÓ§)” ]"³ôŸ5ÓÓ1ájT«†j5ºS½~?G›ÏÛéYBš4ib8ÿüùó:wîœGœ£ÙlV```©íßjµÊjµ:Í÷÷÷W•*UÜ>G€ò°iÓ&ÅÅÅÖPv-OÎ:Í›wRǤÔ#ÿÕ/'«õ÷¯è7cþ¥s¼[»D4mÚÔ°•íøñãn 2nÜ8—8==½D‚ŒŸŸŸÛƒ ‡«çø¬V«l6ÛMí (÷$&L0¼¯ºë®»( xN`Ë»8«ôÒ¿¡a=Û¨a Õn«žì¨Œ-›ôC.-l%!$$Äå`k×®õˆr p»¥«8ªT©bø|\FF†®^½êÖ>\¶ ÜrÍ%ÇymÚ°WÕî ×í<õV"|}}õÐC.›?¾Ç<°ZZŽHÿkÁ«_¿¾ÓüÓ§O»|OÝŽ=ÊÅ€[V¾»q£ç‰¤,í{ÿ =ûm[½ºúAÕ¶Ye¥ÜJDÏž=¢ãÇç›üøqÅÇÇëÏþ³ªU«V®a­4_âííí­¨¨(}ýõ×NËvïÞ]h„¬¬,}ùå—\Hx€ììlíÚµK[¶lÑÖ­[•––¦ŒŒ µjÕJíÛ·Wdd¤"##RìcX,mÙ²E©©©JMMÕ¾}û®¶mÛª{÷îjß¾}…~¾Ýf³éÈ‘#JKKÓîÝ»•––¦È××WmÚ´QÛ¶m¡víÚ)88¸ÄŽ{áÂ%&&jõêÕ:q℺uë¦{ï½WQQQ àâö¤ÀæÜ /S{Þ\ƒ¦çjÔ§‹õÄí>•¶ cihÒ¤‰ÆŒ£^xÁiÙ| æÍ›ëÿþïÿŠÔÊuõêU}ûí·%vŽ¥ùŒ˜ÉdR‡ —Í›7O±±±ªY³¦Ëí7oÞløZPvìv»þýïë7ÞÐêÕ«–§§§+11QÒÿ {á…4bÄÃ^6™5kÖèå—_ÖöíÛö¿téRIR=4eÊuíÚµHŸÁáphÚ´iš8q¢Ó²-[¶äû#òþýûÕ±cGY,—û3fŒÆŒ“÷ýàÁƒõÉ'ŸÈÛÛÛåñ·nݪٳgkþüù†ë\ÿ¹Íf³&M𤏏85hРРåTnñññ9r¤~üñG=õÔSJJJÊ[–’’¢iÓ¦)..NóæÍ+ÕW(œëæÇem}{¨|Û¤gÿõ‰ÆFˆáJ>°ÄÅÅ©cÇŽNË,‹F­?ýéOniµZ•ššªÇ{L¿ûÝï ü!â)M’""" ÿÒ¶~ýz½óÎ;ÊÎÎ6ÜîСCš0aB‰}NPt999š3gŽbbb ÚÑýÍ+¯¼¢¾}û:ˆ‚ÇÌ™35dÈB·ùöÛoÕ§O-^¼X¹¹¹¢ 3224uêTÝwß}.ÚQ9¾øâ‹êÑ£‡¾ùæ›b7¨\¼xQÏ=÷\¾°v½=zÖ<-°å b?§ ¤¡ÿ¨­Wþ¡­ýJe8ÿÊ<èÈ5õë××Ì™3]¾—mòäÉŠŠŠÒ¼yó´oß>]¾|Y6›MV«U/^ÔþýûõÏþSC† Q—.]ôé§ŸV¨Ï߸qc 6ÌpÙk¯½¦gžyF;vìЕ+Wd³Ùtþüy­ZµJ>ø ­k”#«Õªøøx=ºÈ@ݾ}»¬;v¸žÝn×ܹsõüóÏ»} ‹Å¢‘#GjÊ”)_†—/_ÖsÏ=§I“&ëÐééé0`€V¬XQä{j«Õª¹sçæµNÞÈl6«K—.\èÀ02;.~©¿ÍJÕ™liTÇõó|S¡úäÀ»ê]‚+I]»vÕܹsõè£þgMOOדO>yÓÇiݺµÇõëöòòÒ“O>©… :=Ë'IsæÌÑœ9s¸Hð0kÖ¬Ñk¯½Vìí>¬gŸ}VK—.UíÚµ ×Ù¼y³^zé¥"ïÛb±¸Ý‚Wžwúôézÿý÷oj?‹EÇW½zõtÏ=÷¸½Ý‚ tàÀ—Ë£¢¢Ê…î ÷ËF3Mµ~«OO]ÔÅ‹ù§ Çk¥¥ÿþJLL,•ÿf³YS¦LÑÒ¥K]¶ä•§ÐÐP½÷Þ{Å “111ù™¸•;wN¯½öšáš¨7êÒ¥Ky=‚Ö­[§^½z9­ûõ×_kùòå†ÇÈÎÎÖ¬Y³\¶<9Riiiºr劬V«Î;§¤¤¤"?¿V^6lØ ™3g.ëÒ¥‹>ÿüs:uJ¹¹¹ÊÊÊÒ¡C‡4kÖ,Ãû%‹Å¢qãÆéÔ©Snûöí¶ê ýôSíÛ·OS§NU«V­J}ð›e2™Ô·o_}õÕW·»…>ðÀŠŒŒä¢®H žÇl6ë®»î*ô%Ò7£Zµjù~(&%%«+ÉdÒ„ 4a„›:___uêÔI:u*tÝÀÀ@íÙ³‡ €2ròäI9sÆi~ëÖ­U­ZÁƒ¨yóæN-55U6›-¯Û Íf3 Úl6ëÎ;ïtëÞæ×¿þµG6«Õª¯¾úÊð³uíÚÕ­?º(66Ö)°I*R`ëÕ«ÃöWt‰€ÛΟ?oØ:4wî\y{{Ëd2¹œ||| ŸKÛ½{w¾w¯fffêÊ•+Nëºìry£Æ{dùY,ѱÝ~ÔÃd2),,ÌpÙ±cÇÜî5çNkÊ]"à¶ÌÌÌßçÕ«W•••%Iÿk…²Z­Nëùûû«J•*níÓSŸaËÉÉqùÙ®}~w¸êzáÂ9ŽB[êÌf³¹ +Z`³Ùl”\²Ûí%¾O«Õªœœœ¼ï]… «Õêöýª§>Ï_ÚçåîþýüüŠá!Í(íהƻ¹rrròÁ*Uª>[•‘‘¡«W¯ºµO£.•žR~Fe˜™™©ÌÌL—/¿‘«×êÔ©ãöspî¶Vƒ›Ñƒ‹eÅ ­Ì¨êÔõÊR ºP4®ž!{ýõ×5iÒ¤iAòóóSýúõ'9}ú´Îž=ëÖ³WGõÈò«^½º5jäôÙ.]º¤“'O*$$¤Ð}8¥§§.kÚ´©ÛuÀµ_[lll¹œDBBB©¾àEÿeK}P >¨T–úHNN¦òŠ 88XAAA:}út¾ùßÿ½l6[‰„oooEEE¾˜z÷îÝ…Žž••¥/¿üÒ#ËÏÛÛ[=zôК5kòÍ·X,JIIQ‡ \Z±b…Ó|³Ù\è«®k^^Œ?XPKp[ýúõî4?%%Eûöí+‘c˜L&uèÐÁpÙ¼yótñâÅ·ß¼y³ákJüFÚEà)è1#“ɤ.]º.{çwÜj\³fákÂÂÂÜl×Î6ÜBªU«¦¡C‡:Í?}ú´¦NjøŽ¶kV®\©#FhÖ¬YZ¹r¥¶oß®'NäÒÿšˆˆÃîëׯ×;ï¼c¸$:tH&L0|õ@I»öÞ¸eff8úzdd¤Ú·oï4ÿðáÚ8q¢Nž<érÛ7jìØ±†ŸoôèÑEù‘ÀV›Ãá(— Çý÷ßo¦–,Y¢¡C‡*99YçΓÍf“ÕjÕO?ý¤Å‹kĈúðÃ5fÌõïß_:tPHHˆ>þøc§}5nÜXÆ 3<þk¯½¦gžyF;vìЕ+Wd³Ùtþüy­ZµJ>ø`™´®] ¯FV¯^­#GŽÈf³éܹsÚ¶m[¾{ÞZµjé…^0ÜvÉ’%4hV¯^­3gÎÈjµ*;;[GŽQ||¼z÷îmø·=zhÀ€\œ· ž4@‘„„„hÊ”)züñÇ–}ýõ׆Ϟ¹ÒµkWõïßßi¾———ž|òI-\¸Ð0 Ì™3GsæÌ)×r0›Í2›ÍN­])))jÞ¼yÞ÷íÛ·×Æó¼~ýúé‰'žÐ¼yóœö›’’¢>}ú¸}AAAúË_þâö“¨Xè €"{衇4nܸ›ÚGPP¦OŸ®:uê. Õ{ï½W¬—`ÇÄÄ(((¨TË 88X 4(t½ŒŒ §× øûûë7Þ¸éV±   -Z´H;v䢬 .‘p‡ŸŸŸ&Ož¬_|±XÛ·hÑBË–-SçÎ ^Ÿ|òI‘Â×À5cÆ Õ­[·TË fÍš1bD¡ë]¼xQ—/_vš_¿~}}øá‡.»G¦}ûöJLLÔý÷ßÏYYà®5jhÊ”)úâ‹/ÔµkW·¶1›Íš|||¨8#°ÅÆÆ–ËI$$$(::šÚð _¶Ôõêƒú@e©ääd*€Çb”H °Š‚aýÀCÑÂ6@QÐ%<-là¡haE ØÅl‡ÃyÊMW|ï`ùDêÕí¹ÆëÜä($°9ËÕþ9c4×ë.µô¡° ÜÛ-_9{ãõ‡y!zmJŒêzI*…Ö5ZØÀÀ–OÎ^Íó…¼ö†úÖãQ7(kù::Z­ÖŸ¿ÊÖ®£ô†“”Ô§–ì'ìr8²Û¬Ê[PvíZ÷ÄÜ=³4nQˆ&%õW=9d—C‰.ŒP† û:fïÙ¦]G–ëñ5¨Z­Ÿ×†¬4ýWAŠ|e³r)7(u†-lÕ/ÖÉÁ¿Ì·Ÿx_ýΫ7蕟ÿ >BÙ@©b4ðPn½]Í«ÑïôùO¿£´ ¼Š€ç K$x(ZØÀCÑÂ6@QÐ%*B`³Ùl”xb`³Z­”xb`KII)·IJJ¢6<õA}€ú >PYêÃÇLJŠP1[lll¹œDBB‚¢££© úeK}P >¨T–úHNN¦òx,F‰ (Ö<-l@`]"ÀCÑŠ6ðP´° PìÀæp8~ž²•ü‡¦ò÷õ•oÞTC÷Íúlyë”ÜpæSP–kôt’öÌè®*””o`û¥µË!‡CÒµV0Ê Ê\ϰÙujñPÝV«¦ê6Wï‘s”zžèe%_ ›ÕjÍËqÝg¤ëì Iö«:³÷KÍ;F‡yiý¿žT†*€² l†€˜ª©n›zmJª>¸B_ý4\#’ØnVRR…ÀýÀV …PR:wîL!(”ñ°þW“ôú“ÕçiÇtñj–Îî[©×_Y¬ úëÞ`ÃúÜ`ëÖ­ªZµ*Ãkâf¾ÍYµîŠl׊çû+¢Icµë?E;ZNÐ?ç=¡fô†pE!Àå5q3_£rsÑ%ÒWM£Ÿ×ÑÏSBnÈÉÉ¡àòš¸™¯A`ËC÷D€âÙºu«¢¢¢Ü¾ÑNMM¥Ð€Jª(ϰúP\7¯8]Ø¢££)8 ’)êè°´°”º°( !PÕ ÀC1ª€Ò@—H€@—H¥Øl6%P E%ŠجV+%P t‰Pê-%%¥ÜN¤¨Ã[‚ú >@}€ú >JäfȧdÞrDË€Rl±±±år ¼‡ÄÃ~ÙRԨꕥ>’““Kd?t‰P% Ð%@ið¡n-kJC¾6‡ÃQ.@EÇ‹³”z`@ñÐ%@i K$@  K$€RltOÏA—HðP´°€‡¢… l€b¶üïG³êÔº¿é©ûÚ¨aíºjÒi¨Þüú'åò6(ûÀv½Œ¯©ßÐEò6_[Žþ¨‹ãd_½Rûm”ãAGìÇõñs•ýØgš×AÕ$©yŒ&L“$‡h€ÒgÜ–¹YßmõU‹*_ixÇ&ªS+H¡Òkþ+Ø läka³Z­’$Ç…3:Ÿ}F)ÿL×ÛoÑŠBc¤ IDATÜÛs´ãý§õȣø~¥~êMÉ@)3tDþªîå£ÖÃÆëá;k©šo°:ýþY ܦÕß•AG l[ÿÖjê#d)“‰B€2ly­^Þ-5ä±»ttÑ[úx÷yegTêœZaé¢~UG¢… Ê6°ýÂ[¡#>ÐÂ8›æºS!ïÒðzú£÷4¼ ïÚ€²àã:Ê«ûøùún<…åØèžžƒþà¡haE ØEA—H¨Íf³Q"à‰ÍjµR"à‰-%%¥ÜN$))‰Úð Ôõêƒú@e©*@Ål±±±år ŠŽŽ¦6<è—-õA}€ú >PYê#99™Êà±%l€¢`XðP´° Pt‰E x(ZØÀCÑÂ6@±›Ãáøß”½F#ûË××7ßäWã^Í:bûe½š…¶@}P¨,õáããCŨ-66¶\N"!!AÑÑÑÔ†ý²¥>¨PÔ*K}$''Sy<£D P ëŠ6 °Š‚.‘à¡haE x(ZØ€À(v`s8y“õ¿k4õá»u{p Ì5ë«å¯žÐ;ÏÉ~Ý:%5 l¿$·ÓZ26N³ÎõÓ?¾ÿIç~ü·fvùA¯?ü¢¾°PhPæ-¯ÕËzL?¤ç¨Ã'UßW>Õ›è×TKKºöŸ´ÒÂeØòø´RLßfÚ½|¾6º*ë•cúfa¢Žµí§^M¼)5(ù†õ·Z­?UUw›¡'yTÑ¡”ÕaRÕhýiÉSji²*o5@©1î™»[3ó>½mо=xJçNîÓc«èÃ4ÿ¨.‘PÖíûOëµfw=õ1XmëúÊǯ:B÷™ÖkÍæ,J Ê:°]kñ2Õm£6õ~Ôª—kϹlY³NjÛ¢ùJ¾|»îlY•6(>†s}»ê•EÓ”ûÊ_5àÎQ:o­¦za]5höPYêÃÇLJŠP1[lll¹œDBB‚¢££© úeK}P >¨T–úHNN¦òx,F‰ (Ö<-l@`]"ÀCÑŠ6ðP´° PìÀæp8ò¦Ü¿Ô”!Z/PÁ-ÔýÉ¿kó{¾uJjØòX÷èí‡Õ=®¥{Oê§‹4èÜt zúS$_@Ù¶k-^ÖÃ_*qOŽô„"ëT“o½Žú¿ CUã«´ü¨6(ëÀöKr³Ë!Édúe–Éd’)wvì³RjPÖÍjµÊjµÊq[Oõºý°þùÚvúŠ®ü”ªwßüDG¬Yº|);o½’š…¶¼nŠ>íôì‚9p9^±­ªñÝc´©Ãot jÕò¢K$”u`»^µæ5uÅ>yV'lÐßÛ[”^­³î ¯B©@Y¶_Z½r´yöÍþæ.deèø¦5ö…•j8r¼úÖ-lP|ŒgWQ»¾ÝµzüÃêðð1©Q=ð»%úçSíäK™@y6©Zã½úiŒ^¥Œ üÝÀsxQà™haE ØEA—H¨Íf³Q"à‰ÍjµR"à‰-%%¥ÜN$))‰Úð Ôõêƒú@e©*@Ål±±±år ŠŽŽ¦6<è—-õA}€ú >PYê#99™Êà±%l€¢`XðP´° Pt‰E x(ZØÀCÑÂ6@±›ÃáøyÊÑwÏܮ꾾òõõ•_ÝaJ¼ê¸n¹CŽœÿè³—("¤¶ë4U§‡¦*ù¤-ÿ:nN€BÛ/ª¨ûŒÊÈÊÒÅå(Ðtãò\íšþ[=ùY&¬=¬ŸÒ4BóôÛÇß×;… %Ø [ÀŒ–ålÑ¢…éê¤]{¯RªPò ëoµZV°Úì’Ã.›Õ*«÷ÿæÙ.]’Åá/ÿj6åmbóUõê6½hQ®µšL”-”\`3êžxmÖÿº/þïk“€ªëŠ,Wìr8~n¤³_‘劗Ì~Òu])ÅS¬.‘¦:­Õ&ø¿Ú¹ól^0³Û¡]–æjÛ²¥ %Ø äúy>íõð#-´yÖd-ÛIYçwjÁß×ÁNqúM /€’l×E7]4HÁ5k*xè]ÌX¦GƒkªfðÍ;éTEwŽ[ ÷úžÖ_bZ¨qëßèÇ0Íï 5ãUÜP"|Œg›T7n™NŰe•Æê;y™úN¦ ÔÝÀsÐ<-là¡ha (è !°Ùl6J<1°Y­VJ<1°¥¤¤”Û‰$%%Q„ú >@}P¨,õáããCŨ-66¶\N"!!AÑÑÑÔ†ý²¥>¨PÔ*K}$''Sy<£D P ëŠ6 °Š‚.‘à¡haE x(ZØ€À(v`s8?O9úî™ÛUÝ×W¾¾¾ò«;L‰WEX^´ PH`ûEuŸq@YYº¸üšŠºp³ tÄqÝ2£Æ°Â–ЇgØÀCåka³Z­N+XmvÉa—Íj•Õ[E^(ÀfØ%ÒñË2Ã.‘…,]"ÀC¹Ñ–ׄ梅­àå€âqÑÂæÐÙEƒ\³¦‚‡.ÑÅŒez4¸¦jм“7–n–ñl“êÆ-Ó©8×¶P‚ÍAŸFð :*=??? €G¢… <-là¡|(P™eddèðáÃùz¹ó5”y`㇨l%»Ýžw?tížÈápÈn·ç}mIÚ°a… l›Íf£D@¥w}`»1À9yyñT €rlV«•O l)))åv"IIIÔ†¡>¨PÔ*K}øøðH?€ ØbccËå$MmxÐ/[êƒúõA} ²ÔGrrrÞ׉‰‰JLLÌ×òÚ¿ýúõSß¾}©heŠØ?0`€ú÷ïï4¿_¿~êׯ€ÀàI¡° <1¬?À ®6‡Ã¡x€{$žØðKh»ö6(/t‰E—HðP´°€‡¢… à&“Éå××eØ6lØPädee©V­Z7u 4PJJŠ[ëž={VþþþÔ\)òòòÒš5k(êÔõ S^^^ÊÈÈP@@@‘·õööÖwß}GðüÀvï½÷y7nTTTT™ð7ß|£V­ZQs ŸÃ‡ëžä»ï¾SDDD‘·KMM¥Ð”m`+N—H‡ÃAWJPî¸'p+ò2úAg4%$$Î/l»’ž m…Ý¿poà– l JLL$°€ Ø màÉ|Œ~Ð]ï³Ï>Sbb¢á²ëGI*‹xŒÊÜ m×}í>¦ÿþÜ[¨ØíÆ¿4}öÙgúì³Ï eü… xJPsuOr­§Qh€ ØŒ¾/è$€'„6£{O¼_IJJ¢Ò?°õë×O’òZÙl "¶kú÷ï¯~ýúyÔýJçΩ07Ø$éÃáÐÊ•+é <>¬ÝxOÒ¯_¿¼û¸åÛõ¡6PBÛõ÷0„5·|`»>´Ø@E lÜ£¨­°ŒeõÃÐápÈn·Ss \ïI Ì›Tü÷‘”Õ{LlÀîI ÌÛ† е“ânW\{÷î¥æ@‰Ý“¤¦¦Rx@|¸T3yòduíÚµÌ?Gƒ ¯5j”ر‡>ùäÍ›7ÏiY||¼î¸ã.¬ÊkáÂ…Z´h‘Ó²wß}W·ß~{…ý\\J[‡(Túûˆ’´{ïNùúW‘UY²æZeÍòR÷¨že×ýÒ~DoßÛAÉí×g×SI¿$¤8¯ñ¨.‘Íš5“Õj-ûÔêã£#GŽ”Ëñ¯ÛÕüœœ”úy„……•ê/WŸÃßß_%Ö‡Ö¯_o¸¬U«VŠŒŒä§ë 啜œl¸¬uëÖjÛ¶m…ý\\”îïÚ’R+>_ªÿoï¼£¢:Þ>þ]:®ˆàRAAzSbA!*ö^bCLìØÐ`Ec‚¯ ‰QTlQA5˜ ÁXP¬t&bh.*•º»ïù-÷.lßEæsçè{ïÌ}föÞùNy§þÖ¨b½ÅãGÉØ¼"D¾{åþ——,žMl½ L•®¦¦¦Ð|‘¿¢ž™@ @P&ÁvýXt77Ä«·ãí›J8Û¸ÃØÈ„"62÷ …ûö\xMCôCéÍ„q¹<ͦ4‚­Å6¦°?@ Ð1©o¨ÇýGwP«Rêº7x–Yˆy3 8ù!N{ƒñsÜðàä<ç|ض!NG@ ‚Ȉ‡¬¬¼ÉiOøŽÿ}=útÃ?ïÞ '+ó¦øCMMòUñ'Óe!¶„¯ø4N§6ü—Þ˜‰}»Á+p ²„®º÷ŒÝ7JÁ&ý¿é5p¹l¼<ú Œ0444póæM¼yó¦Õ¿ØØXÊëQVVÖæõcÇŽ%Æ&|PÐh4¬Y³†²½“ýk@ È_°]º|'/~ÛŸÓt¼´¬/JrQöO!jkk¡«Þ ¦¾‡‰_Nþ gÿ¹°Ñ ÿ¹ˆŠ¼‹šæç ·/Þ†Sè-÷0‚––„`©Å]œ¿Zv›éÿ 6àâJ× 'sqédþárÁ­ŠÇñ oà=φàÊE°@ :4 ÈËËógÏœœâåË—ÐÓÓƒ••,--ammÝôG§Ó%礤©©©ðòòRJ»({ùdA}}=F”””Ç---GBPIH·®†¨k`¢±c|wü¹W½Ååe¨ú‡…Qî`h`,àldÿx ·sžâOÃþ;LÓAã•2øÎ1úŸóU˜Y˜ý'tT{À¢ 奯ÀAç6ÒõßËS̆ᘓ¸\6cNâªêœöÒ…¼¦œÚ±`kÄýÃ1÷T ØhÆ!üÑAxiÈ+ÿ:¼¼uá?\Àï_ F»;\F/À†sàÚµ}Ïr8 -- ÈÎÎFVV***`dd„Þ½{ÃÊÊ ÖÖÖ°³³ƒ­­-455¥’wQQ’’’ðàÁ¤¤¤€ÅbÁÕÕnnn0`¬­­¡¢"Ÿ•¼uuuÈÈÈÀãÇñäɤ¦¦‚ÅbÁÆÆ...prr‚‹‹ LMMå^GL&©©©HMMmª§7oÞÀÚÚNNNprr‚³³3¬¬¬ ªª*µMFFîܹƒôôt.\x…¾Ë°ÒÙ šÅ 8¸Kƒõqý/ôÚ©f+((@XXNœ8!°ãúþ‡ËËË 6l@¿~ýÄ^ÞZUU…óçÏcÇŽ`±X-ÒRRRpêÔ)ÀâÅ‹±bÅ ôìÙS¦‚õÁƒ Å7øÒóòòpíÚ5NǪU«0þ|¹‰ŠŠ \¼x!!!|vâu,šþ?cÆ ¬Zµ ¶¶¶å›——‡¯¿þ.\hq<;;»)?ìܹžžžB‹j.—‹'Ož ""çΣ<§ù('NÇúõë1}út·yïƒbçÎ|iñññBíc“µ½•¹­:ÿý7víÚÅ÷^†ÂÂB¬Zµ §OŸFhh(\\\DúÎÝAãæ´‘þ¢å’H uÇäOG"$p1¾®²ÅŠC®PkZ:){$PV H;0‹¯`ÃõeFcNbîâc¼kM€ú0¬;¼ SÛÀX§ôlÆbùLW°’Ÿ Ý>)99'N(Öñûï¿c„ ¸zõªXù–——cýúõذae§¸9ÇŽäI“ðäÉÙèð†DDD`òäÉ”è÷a±Xسg¦NŠääd™ÖOZZfÍš…   6íÄãüùó7nâââÄÎ711cÆŒi³S“… âüùóB½¼«««±ÿ~Œ?^ X£²÷öíÛñÉ'ŸàÖ­[2"k{+s[#>tJJJàïï/–XkÎÇ1kÖ,•7Ê^>‡ƒ¾^7x¸Cgu=46²ÑØÈÆ‹ÜR¬XØú…4¦-DÖÁÐâKÓôs/‘: Úÿ@·DÜÌB ³ÏFa«§ þ뢷’®bÏ/AÌ|îîîÐÑÑŠŠ ºté‚AƒáÈ‘#ðôô仿èÑ£xûö­Tê†ÉdRŠ:Ž}ûöaݺu°²²‚––TTTÀ`00iÒ$9r„RàDDD ªªJ¤2lÚ´ {÷îE¿~ýÐ¥K—¦v0|øp:tˆ2žÀŸšš|ûí·”%???œ9s^^^000€šš455aaa¥K—"**ŠR¥¤¤àòåËRÙ–‡½•µ­wïÞµpÄÃÒÒÓ¦Mƒ†F뮦 Hù{/..FFF12Ð 4 :uƒÁ€‘‘ôôôÚü݉Œª Ö%üsÓ:‹—þ>šcð}!¥YqØãe¨¾¾ÚûFÚà G8• 9¥p3 ûE2Rª¬àc¯-Ú½Úã’Hî[Ü?°+®˜`é¯1¥·f»ýñŒ7(--EQQrss‘——‡Q£F ¼ÆÌÌ ööö|B¯¶¶µµµÐÒÒ:Ìž=jjÔ³“æææØºu+fΜÉ×Ñ¿Tð1†óIDAT}û6JJJ$òÉf³qùòeÊNúš5kºª744ÄÚµk‘˜˜Ø¢\éééÈÈÈÀ Aƒ$®›ÔÔTÊ¥yžžž˜ß~û­Àø¢zzzàp8 Ñhbm‡éˆ¨¨¨€Ãáˆ<À,Á†+u8­=ƒcU«ìÙþ5:°ö\Š3‹Ñ[.žShПv™ÓcpZ×ɈȜܡYcc#ÊÊÊŸŸ»wïR~¬E9`0°²²jó¼N:aøðá|‚ ø×=³¤#tT^±lmmÛœ¦ïܹ3zõêÅ׉~ôèQ‹¶¸‚ªsO§ÓÑ»wï6¯Ÿ8q"&Nœ(‘mìíí[§ÑhG,ßî->ÍŸÇÃÃC¨™v:ŽO>ù„Ò{ã³gÏ$l²¶·²¶5¡£ ££CCCäååñu†ƒƒƒ±{÷nØØØ´yøûû˵ìÉÉɘ?¾È‘~ÿýwܹsááá?~|»¯Ã¢¢"¬\¹’r °5˜L&V¯^¤¤$ìÞ½[¬ååå8pà€Pž­;†?ÿüGms0\Qu[YY‰-[¶P~›`È!Åèêê"##vvv€AùÀáp™™ ]]]ñ›ÈÆÖ°ÀøË"¡ø!•¬” ª¬¬ EEExþü9222ðË/¿ð}äø”ššHõ©««‹.]ºÕFÒIº‡çÍ›7”#t§N;Mff&êêê ­­-v¹êêê(_ÞÚÚÚ"ÿÐÅE__¿Íz4óôþh[uu5å†|]]Ý6ƒ`7ÏÏÒÒRàGœËåŠý>‘‡½•µ­uuuŒ7ŽÒ±Ð7˜˜ˆ… bìØ±°³³“ê:IVè[[Û6g󕙪ª*lÙ²Ed±ÖœsçÎA__ÁÁÁPWWú:^"Q<[óÂ?¶¶¶JU· ˆŒŒ¤\¦ü;XÙÖö +++äääàñãÇÄk±èééAWWW¨É ‚бár¹ÈËËÃ;w%vŒQ:ÌjjjB¿0-a Ú ïÞ½“º-kkkQSS#Q'º¡¡üã$"}d$A˜ò ;³S__Où<ÚÚÚ"ÙIGGG p—D°ÉÃÞÊÚÖ„ŽFÃèÑ£ñÿ÷”³Ý, aaa N‡ŸŸ† XXXH¼OV¤z§= ¶„„\½zUâûœ8qcÇŽi9¹¤aˆ¾ÿþ{¾~Œ"ëöÇluÞÃýzõjó>}úô!/9 v6iÿKee%BCC1|øp¬^½Z¢€¢¢Ôgcc£Ð{Þ ƒÖ¦ë…ªÒ¦±±Qdo™¢~Àå0¶¶¾eý;—å’@iÙ»=¶5áCÃÒÒÁÁÁBuÐÏž=‹€€Œ9NNNX²d .]º„ÜÜ\‘÷k‹‹2„ÞQx!ÞÇÔÔçÎCff&JKKñúõk0™L<þñññ˜1ceÝFGG+< ‘"ë–ç(E~~~¬³šö™a# ººAAA|†›¿œˆAƒÁÚÚ={ö„©©)vîÜI¹ŒK”ŽyMM jjj„Zv"hv¢S§N=¿,^H wÎÕÕÕ)7ÇWVVJ<«¨´´´(—OòÚ€°#×ÿüóåq}}}‰D¡<ì­¬m@èHÐh4LŸ>åå娽{·Ð×ñ:ù¼ Û>>>˜?>†*p†»OŸ>xùò%€c'Rí3úòË/[Ý×Zè÷ï×<ôNRRßu¼Ð;¼w±4Ê'/jkk‘––Æw|õêÕ;vl‹cªªªÐÕÕEß¾}ñå—_BUUfffèÓ§zôè##£¦E¢Šµ;v`þüù-¾¼0D¶¶¶Xºt)å>ë .`Ô¨Q-VlȲn…¥oß¾ ‹‹ 455Q^^Ž›7o 턎Ðoã¼}úðu¦9ŽTF+++Ád2abbÒêy\.EEE”i­y1Ab1(( ›ÖÔÔ„¹¹9ŸW(‹…ŠŠŠ6×?çççcÿþýptt„……LMMa``€nݺ)dÔ¬S§N011ásšQYY‰²²2^Gßo¹¹¹”i={ö”¨®äaoemkBGCCC+W®DÏž=D¹<²-®]»†k×®ÁÓÓÁÁÁprr’IYzG™„6ÉÉÉxóæÀA?]]]>/”â"í0DŠ®[ƒÐÐPôëׯ阉‰ å¬$AÉ›"; ååå044øC•H,//‡†††Üóçå­HÁVUU…cÇŽñ:t(¾þúëVg¾^½zÅß Dt:Âb±œœÜ懮®®7oÞ¤í¦£ß†††`0|ìääd°Ùl¹¶Ç÷‹ýû÷§ôÆ™••V¯ÏÍÍ¥â_|ñÖ¬Y#÷ߺªª*† ·YœÅbáÞ½{puum³L, ¿üò e;t_†<ì­¬m@舨««cêÔ©¸ÿ>¢££ErÁd2±lÙ2ÄÄÄ@È"ôŽ2¡¢¢___J—ú………رcGÓÿáëë GGGXZZÂÜÜ\âYEE†!’UÝŽ9’ ¶7Á¦««‹ääd¸¸¸ˆÕé^ÃJNN†®®®B… …ç¯jkk)êÍ›7±|ùrJ!_[[‹'NPŽD666м¤4%%_}õ¶mÛFé òåË— ¡,çØ±c%lÐÐÐÀäÉ“ù:ÑL&û÷ïǾ}û.»üõ×_ñ믿ÂÁÁæææ011¡¡!ôõõ¥²ìÐÉÉ æææ|¶NLLDdd$üýý)=Þ½{·iŸÅûÂÆÑÑQaíÍÅÅÎÎÎ|!ÞÇvïÞ½044¤¼öþýûؼy3e;Xºt©Pá!moenkBG§sçÎpww‡»»;PRR‚‚‚¤¤¤àòåË”ðæ#<<¡¡¡2÷ä+¯Ð;ò@”>È#0iÒ$ÄÄÄ´Ù¯hþ177Ǽyó0räH888ˆU?ò C$Ϻ6¨7A‰›¥¥e“K÷ׯ_Ë­úúúÐÕÕ[‰ [:uê:Î× ~øð!¾øâ |þùçèÝ»7TTTPYY‰´´4œ>>X¶l¾ÿþ{¡ä¡¡¡Š÷155ÅáÇñÑG)M›344DXX¬¬¬ðÍ7߈|½³³3BCC1`À™”OÖöVæ¶F |¨ÀÛÛ›ï[C§Ó±fÍ‘œþhjjÂÃÃr/‹Å—Ë•š0RdèIiköŒÍfK$pUUUaee+++Lš4 {öìAQQòòò––†k×®ñy•ä‘{÷îa„ Bå%‹0DŠ®[ª?‚rBfØÐÖÖÆÖ­[±{÷î6G§|}}qåÊLŸ>ÆÆÆ”¸øøx¡7Óh4Œ1QQQ9rd›BqÛ¶m—™ƒlÙ²QQQpwwZÀnÞ¼?ÿü3(³zrrr¹sç°}ûv¡Fét:-Z„+W®`ĈJ×îôõõŒß~û ³fÍÚÖ!!!ˆŽŽ–™X“—½•¹­"†††èÖ­¥Àºqã†Hö¸\®@ÒŒqÖVèwwwKÂ¥zG’Ž?‹Å8ÓÔüùÞ¼y#µrtéÒ?~<‚‚‚€Pî›þ Ù"l½óµ…°aˆ]·jjj2 }@ d†Ðô"ùì³Ïàë다¤$$%%áñãÇx÷îú÷ïGGGxxxÀÞÞ¾éc¤®®Ž‘#Gò­¿|ù2–/_ŽÞ½{ -Ú\]]qîÜ9deeáéÓ§HNNFzz:TUUáààwww¸¹¹¡W¯^2·…ºº:<==1dÈdff"==éééHMMEAAŒŒŒš¼ÿÙÛÛÃÑѱÍ7ia``€U«VaæÌ™HNNFJJ RSS‘––†ššØÛÛÃÉÉ ÎÎÎpvv†………R¿UUUááá 00HOOGrr2²³³¡¦¦¸¸¸4=U‡«½Ú[™Ûð!~ç|}})CÒ„……ÁÓÓSèY¶ÒÒR\¼x‘2­W¯^”gAéÖfKäzGœò5·­ ò·/h´0ÔÕÕ¡¢¢¯^½BII ž?Ž´´4ÌŸ?_àžšš¬¬¬0wî\DDDð¥WWW‹4*Í0DÊVIÙ<†ˆ`ûà4hTF©,,,`aa!´ã‡€€´yž††åˆSs455áââ"±#†5kÖ`Íš5ÝGKK }ûö:˜¥<144ÄèÑ£1zôh‰ïE£Ñ°qãFlܸQ¬ëýýýáïï/QTTTЫW/ôêÕ ¾¾¾R±‘´Ú´íÝÞÚð¡@£Ñàåå…#GŽðíb2™ Ä¡C‡ÚŒéÈd2±wï^ÊÎ6ƒÁè}PÐò³wïÞ  ò ½#Nùxv´_÷§Ÿ~ÂðáÃùön@QQ¾üòK¡ör¹\„……!$$„/­¦¦ÖÖÖ­Šœ÷½ò6¯/QD‹4Ã)CX%"ØÚd.”@ B‡ÀÕÕŸ|ò eZbb"|||pìØ1dgg£ªª l6\.555(,,Ä•+W0sæLœ>}šò3fÌ€……eš x‰qqq(,,‡ÃÁëׯñôéÓ¦ez¼Ð;ïà ½“™™‰ºº:444€Éd"!!Ë–-ÃÞ½{Ú@PèqÊÇëô Zýäç磡¡ (++ÃÏ?ÿŒ™3g í¾žF£aôèÑ”¶ˆ‰‰ÁgŸ}†ÄÄD¼~ýº©ÎjkkQTT„¨¨(RÞ×ÅÅEdÑrìØ1,_¾<@UU8*++‘€E‹Q>U"yÖ-¡ýCfØ@ t455±fÍܺu‹rÖ…ÉdbýúõbÝÛÆÆ‹/¸,ºsçΔqO“’’ZÌ®;;;#..r ½#NùxØÚÚ‚Á`P: Gxx¸ÄuçèèˆÅ‹S:jŠEll¬H÷>|¸ØŽ›¤†H™Â*”2ÃF ¡Ã`ccƒððp±BÊ‚Á`ààÁƒ­†144Ê»1‹ÅjMò ½#NùxXZZbܸqb•sÊ”)B«ªªŠÏ?ÿœò¹Ä©¯àà`èèè}´Ã):¬6@ ¥åã?ÆÅ‹…öÐÚV‡<::ºÍÐ)ºººãg½ßñ®ªªjú?/ôŽ(úÐÐP|õÕW-¼òÄVAATËüë@iÕªU"íÃ¥Ó鯒%KDZÀŒ3Ä®/sssDFFмgØÛÛGŽI´yyyá»ï¾(„åU·"Ø@ Ú}ûöÅÅ‹ñÃ?ˆåðÇÙÙGÅÙ³g…r–E£Ñ0oÞ<,\¸°ÕójjjZÌ”È+ôޏåk.„Nž<‰Ù³g·i 777DFFbÑ¢E"o666Æ ggg‘ÄÎêÕ«qåÊ 4Häú–E"E†U"´/hÍÞε>§k@èpÔÕÕ!??999ÈÍÍE^^rss‘ŸŸèÝ»7¬¬¬`iiÙ¨ÙÒÒR £ŽÖhhh@rr2îÝ»‡‡âéÓ§000€““SÓŸ££#e<·çÏŸ z¾ûî;µ¸ƒÁÀõë׆ޑ¤|À¿Ž/ÒÓÓqÿþ}Ü¿ÉÉÉ055…µµ5áêê kkë&Ï‘Ož<á@t:ñññ°¶¶nÕ–µµµÈÎÎFff&²²²šþÍd2amm ;;;ØÙÙÁÖÖööö|³RTÔ××côèÑHIIiq<44´)ž[]]ÔÃɪn=¥¥%âââÆz#(އbРA¨¯¯Çêèrd'üH@ @ (<‡>ÍñI @ J@}}=ß1²‡@ @ ÄÇ›fÖšÿ›6@ @P0ÍáP9Å!K" @ AA4_I–D@ ‚‚´ ’,‰$@ #h$YI @  FÐ2H²$’@ @ €0Ë É’H@ @PÂ,ƒ$K" @ A³ ’jId“`[]N¬H @ J„d'üH,A @ JÆÿKa>…ËÑIEND®B`‚pyspread-1.99.0.1/share/doc/images/screenshot_paste_as.png0000644000175000017500000002057413604425404023304 0ustar andreasandreas‰PNG  IHDRÌ,º~ pHYsÄÄ•+ IDATxœíwXTÇ×ÇÏÜmaaéMQlˆ¨X  `A°÷Ñ(5¾1FMô—{cT‚ÑĨ‰]±a'6ìPzï mÛyÿØ]Xª‹²r?Ï>xÏÜ™93s¿;wnÙ#ÊÈȳ|00¨‡c[æ£>“×@÷‰M݆˜«aÀ…ÂèüxÅ.„ÕÌw(˜­Âd l;¸OŒ¹Æ–%Kód #• RÁT%c¶RSšÏ6°ÙL„Èv¹eYë7UÉØ­Ù”ÁVl ¤rn’«®†I0RÌ„È'4Æl)&¨r•Í·–Å€…F@Ñ#B!T]0ÊTÌd•VäU²*ͺÒ³¥˜õçykY„:Y Æô·7Õ׿qX" YPúÏÍØI¨jΊ-…Èds";µ"Ù6@5‘ÚÓ³¥˜²¹¦áÇW¦Š…æxwéé`‚ç2‡em¬»tŒËƒWÙûÂK¥ *Í~ŠÓ%©<]Ê6Y4ê`þ×+²UžF›ÊDºS» Ñ•÷I*gfä\¸™x'ŸnFl>fýyê* @`©¿‹£•j€rq0ÑÒpÙrô.Jž[%ÿÀB“xëE‘4?¾pë“]·6G•X[ÌiÛ‰ÛÀª@Ã+pÀžE}g´£š¾Gê3ëÏSOYBzv0•)lÁÎK»N<‘H1ˆ¥ø·óÑs¶„@Ƕ=L@QU…Šªœ.À¼®@í 9y:ViR³r0¦qâ³Ìø^|§6‚®FäyºÞ„é]=uB‹Å™éÙg®'D@¼®nö£õLx¸ ¯èÑ“¤³±dÈ—€íæ×ß H­û›¢JYz†#úY÷±ÔÖeÑy™9á7â"sè*Í@üñÓ»Õp@q»õ­ê"º¸´ÉÇ p­‰{»ÏûájÅ8ÖZ–ÚÃZ–¥«ñãø¬½§É\ßÎûN?{š˜5°«|×0›{Ѩbò€ê·0â®!€ìг†YWz™J_åe'!@è‚°ý׊mdk·ÄÇj–—$ýï¤l+ëi=’—ÏW]-¤ôt]»›»¤Ç?tO8Îu¬)ýß©ÈÐx HC0q”ÓÀ6e§ïœ~c0}¬Ã´QlQØË{%¤²¸0,ôZP,¹‹a’ôÃÉrÑÏWERú|×îæ.é1׊ y ]•Ä}KÜ`ïb÷¹;¯Ös| sÃ6²±=Ü)ì2'òeÊžSäYRvߎV<d», tjœd*oa($`ßbwYâœW!$d‰‡,eîÎ+JÍP܃k2³Rc@±Û:™Ø²ç=ÉÆ•™±4'!'Nbfb¨ï œÃfqâôjsK®^Ê H^!DV©f;ó>|D§¥_L“Œ›É¶Ý µçÞ,Ä5›QáÂHÉ…¡A/;œ[|õR®Xq/ i‡ª&îSSØ·Ä}îÎ+u•53h£ÁeÉ–û<kÊPG E<Œwí`9e¨#›%_kpÙ¦̼¥uõ›±•™³ãJH°„,ñ˜³#"$ØS®¹W*æÅDÚ¤¦¼åTw¯û¼-–d$¦œ¿‘ðLD€­Ý»Ÿ=ßD‹Å¦ÌÖâIRê¹¾Ÿ•Ù8/3"*Êýûijë ±Ùh m.€eaÿÝbû  txˆ”W6ƒ­Ý«v)µ¸È‡&«Šn }Ár…Uß}K<æì¸RkÙŒÜb¡˜Öà²XJÿzæÙ³ÄìNÖÆw£SYÃ;ó8,"Ó¹E(eUî“!„È®bBxööˆ_—z@…Âfo@ˆ‚@E¶&6å_üðÜ]Ñ´b/!ñ;ØMw6 ²’¶Š-6œ;¿Ko6œ>¡£ma¨ÝÍÅÁÛÊpXG›·¤ŠqÁ„ò¦D$ )Ñ+¦¿©ô[¥û.6ŠS¸@X\xúhd„®–…@§[O{…‹"º©‡)Žï¯Kå ›½ã24gÇåàÁì1{{DͲpZnq{s=ò祘g‰Ù6fzŸŽq>t):*6ý׳ςFu€ÔÜ7Q¾‡QeáOˆÒ&DȬí—C—–·fÛe"[³‚+ÎUÍ”wWm¼ü~6--£YVÍ;qäe)K›ÙÖÂ+/ò’RDší¥^V¬2¡i™ˆ ôt¸ÒÊâÓn4·ôµÍ?’,Õð»˜iD?;ZÙŒ å4˲‹Ü²´™ÝNxåy^rJž¦Â@SQ Ѭí—Q¥!òã+›»j) èü½„ QÎoJÅ÷¢S{8XLæÈeSS†:– %ϳd2 ¿„"ó °,»º¶ë"y“])<Héäyâvü(7ÛYÛ.UKo.&¥Ñ¹»y{ È|x7+ïæ—”òùí­L¼z·s·Ñâ!"Ž~’]VÌ7Ñß~Â@ÛÞ|Éëè¸Cwó ¥tmk¡ãàØnT+AFòüҗñ¥H—ßÓÅvŒ«y7NQ\âå¡*›¡ì£’‹œ²“ì' ’»øóN^!ÝÔcõ¶<õ•HÏ+î`e`n 3°«•['S …z:šìbÅã°^$çþ}õ$S*àêç%>C}&¯ëà>±8õ) ‚@þ‡ YíÊ&©#1[ЉêÍSÏñ• ƒÍ‚ù#z¸:šS•s&p?&cÏÙR±âÑбìRùªâL @ämQlC³2Ô—1›«IZkðñ‚¤„ü|2ªó“äÀAM ÚhpXB ™_ò÷ÕçÏóPEAÙT¦ Bd²?ŠÊHÅvAíéŒÙRÌúóÔ{|å)˜'ñÙO²1`ŠPaDäóš"+*«ñ>@åmÎꦼ!ʦ"€Ò+Æl®fÇQµ²Da"˜Ž*'¼:ÊV¬$Û+tøV“4¼c¶SN•5™B4„B„¨`¾CÆl=fU‘‘ʹ‰¤x ãíæ;aÌVcVÙo+¼€¡± >š Põ• uÀˆŒAí0"cP;ŒÈÔ#2µÃˆŒAí0"cP;ŒÈÔ#2µÃˆŒAí0"cP;ŒÈÔNcˆŒŽÝæa9ùHI#TÅð1Òšf2œ¸ËÛ2à÷\òö¬ IƒD†ó¢®ž2ÄÙÎÂÄÄܾ§ÏœoOÄ–¶œCFµ[žztª!jÜjé×;‡ZN+l9ñ¡Q]d$÷â ŸQßÇ8}ºÿÚËäÔø»G¿Á ‹x£ÆÖ1|¨,2qÔ_¢f‡þþ£º[èò8úízŽùl÷Z?>âÇ¡‹¼ºZ›šZwùå¹t¤—¿Ÿ6¨“•©iÛΞ³¶_Ï–%בNòÿûa–ggkSs»žÞóú/˪.z¸éHW{s3»^þ_üûZX½mtì6‹‘_ìX0´s[S3;·©?ÜI¸½kާ“•©y÷…a¯ÄPõt©b‘·{š7hýýÒóA6}}ïŸî„Žm7èûtEÓ¶¶òÞeýþoÛ7]ÉVµƒ-UEF¿Ž¸’bãëßC³öý’Ûçž¹mŽˆIzq|+lÙ¦«B:v÷Œ™¿Ã´Cïýê_¼gÚœÐxºÎtéó½+·¦ ¹“ðàßoe\¸žCpòsÇoÏñùáê«”¸«›\~>íûû¢Úp!fÐŽë¯îÿä³1À{}Êè=ÿÅÅßÚèpã‹uÇk]‡©PäíÞy~{¯­í©íõsB~AAVø¢^þÓ‡dþõû™PÄ…ŹM°‘³$òßÈÎßE¼J|ü×4üÛì ƒ)Xå¶`TÎÏÉCúòszÍ_;±«¡OÐ}²¿sñËéX}ìðÓÎ 7Ìt6ÔÐ0é½`Ã\›ûŸL ëJG\ ›§ÙF‹ÇÓmë:iãZôëößê¸äûùnÚ\-KÏVøž<ñDR³½ç9ÎIÀÓ´<ÖÃzÍþÂ×^—«eã7¶ó,QZ[›ßZDeï• ½a3F“c¿G@éµG ‡Li,_²:Î\ÔËDCøçü¯çXG9›&i¸‹ûíY€ àfV.‹Zu†øú|ÙÄáq¦i‚³³rxmÛ™Èó³¬l¬ '+caíé,·O~Ù)Þ¶6`H!Ë C¿±óŽï®O§§¤ ¯/w2X^éJgœüDZ¥ºzò‡ÃÕäó5äél.›–Ö¦1Ѝì]>Ó&û<•í5ìÚÁ3,ßС|Å¥ËÒÚ’]±ir2s$ï⢅¡ªÈXvžžVÛδ¼[O ÕŠPÆÆ†¢IÙ¬( SRÀ¨‡!E‰kOàØù®üÙw%à’×G? Xƽ:ÊÄÌD{èšOnì‹BU`©äÉ~¤Sa³;NšÞu÷Á¿®]¸bp¢_å ƒNMJ“‚è´ä4b4ÀˆÓ¤ü0¨¼ðçº|ºq2sú÷§Ÿd”H¤¢Â¤ûÇ·­?]TW v‡ÑNOv­9ð8O$̾·{;x—@?[V]éâ«ßÎþúðø|¡ ¨¤T¬3{=Ú²|ï­¤7baAÒƒ“[æ¬=ó¡îûªäÒ3ÐGI/£‹+fʺGÜOŸl»ßaâ¤îœÊ¬ôËýë÷ÞÏ s¢~]’èàcÁiÒ~T¿… ‡m9wl¹í£mSûÙ[˜Û¸Ž]{‘í?m0¿ÎlÇ…¿…N”†ŽïjÕ¶Çô£Zs~ ™ÓžUg:×m꽫ëÇõ²±êè»5wÄÎoPí¦ÿz8ØèÂòaÚÚºú~‚öŸæÑ¦1º® ªxGŸE ÌÎLr0˜xïJÄ€ô½§â啺M lÏRÊÊé;¦÷ÕîvÖ]ƅГCvMkK5q?òÐQ;Œ›º%%¹~R¼áþocò³ »mˆgTPô¡ÀKAõ|4[)tC#BÊ¢þ|F#ààpÁG»Îj­éÙå‡Aþ‰µÇ¥“¾_Þ¿Ž›Š­ f&klxÞ¿$æüR3å°ìJê‡oNs€™ÉÔ#2µÃˆŒAí0"cP;ŒÈÔ#2µÓ€[¯_¿...ÎËËS_kZ|>ßÖÖVÅüªŠìõë×!ww÷wlÃÇŃâââÚ·o¯JfUEV\\Ω05Ñ‘eèø†#÷ç`Bˆôå&7¯å›g°3æë[ô·-2îÖÎi}ÛñmûÌý=F$+SðÇX= MÍ6‚¶=Ƭ9“"‘W&Š?¶Â»“ _ÏÄÁ}þ†…ý }ö¦cB.ˆÚ·Ð«‹¥@WߢëˆåGbË+Ü'^¸1ÐÛ•›wsÛä¾v&z‹Î3wÜÌ¡ ¼Û˸ï¦RyVi춆ƒ¶¿’ÖãH ¤jW ò×Äö¶ã%I !8çl“¥ÏO/EªwœÔ¾fJnnîÉÚÈÍÍ­™Yý"#„(§€82<Ú}×í¤´Ç{Ü¢×òX“ä•’zw“㵫æ`BáO:’_VVVZ’sf¥ÉéùARhBˆäùö©óÃ-W_NÈx}é+Ëkÿ<”BèÄßfŒÞœ=âçÈÄìäÈ­®–Nøß]!!„:ýâùø~>}¹O^ú]ºÏoRÓžŸúŸ{Ú¹ˆ,Œ,ÆLîÿ×_Å„B$Ïÿþ3º×äªNG5†®Z²üi·oôÊ9?>/Mü#há…î[ö~Ò£zÇ«ŽU3F Bª)¬"½HdJë4nŸ_MpÒçjZ lBúÌ]ãg¯ÃѲПŠ~'©R+è4võ<§»á7ß"yñïјÞÁߌïÈçjY Z¾f²E!ÒØÃ!7;-ݺ ¯…6GËÒsŪ‘…Çþy(&„àœKçž÷òÐ8<›«ÙF‹ÇÕiÛkÊw_˜Ã“†æùó¶"ºÿçá´A“G›¡:"<7ÏB[KKKK«Ã²ë…‡'èkiiiii麬(!„м1ä“òÍã=F¯Šµû‡sÔ°Ž×6~Í_____ߺLeÔ"²zA|}½ZòÏárhZ% ìe؊ѽìͺmÚèØ/½V^Sˆçdåµ±´Ò“_¤²-ÚZ°èôäôòkKt´eŒ ÍÈÊÎŤðjøÃnÞúˆÕ!(d×€—«G8t̼õ>, €ô†M!:v½Ê#ÃŽ½ñš<ÂAŽxÞ{RKJKKKK‹c¶Ð–_ZZZZZZtÿ«îŠ+#­îÓ§÷Èz–ÜyÞw=¥ jU:ÞÂðóóóóóSÞxOÞõêRií„Pl+®¥*-ÙN:!tqðn¡§÷²1Ðf¥ïárÓ„ Cƒ’{)˜#¤%¥Ñ@¡ŒÍL´½Ö>­µŽ’ëçî8zg„ ;¿U{üV.y}8xô¨O¹ŽÕGZ'æM9tásáÙ“Ä/ij !êr¤ü¬ónƒ4~ÿ§ß¼rŸéùxóg‡…M·aÉ2ªÐq¢(C·Å!DŽ”i3CËC-3™¾¾>Æ!ôÖþ ÍŠ¢0Æúúú*æWUd|>ÿÅ‹;vlÐÛj %ã—/_òùuÙ¬Šª"³³³{õêÕƒ Þµm  úúú|>ßÎÎNÅü X“ÙÛÛ¿S“Z;-õ¥E†#2µÃˆŒAí0"cP;ŒÈÔN#?VúéÒóèÌ¢{qY[m³Âµ½‰“¹þÏŽµîm ¶Ô:J~¼ô\Hà ïF¬³y²æpä®Ë/îT-½õØRKè(UˆÉ(Ú¿À ãÿùæú·™»Ï×Lo=¶Ô:JîÅgµ†ñ•q/¾–%A« °¥–ÐQª@Ôóc|©TºpÑ<~PTNÊK…?ïÚ×è¾T¡ž¸oí>¡éÓ'F;V-ÝÆÓÓÿôiŠóþ&¾±E¦ž×ÒÒÒÚÚ˜ë[Tií½ë/[Ü´AhúÔøñœØØàï¾C,Å/žhšH¥·þüóøèÑ£Oœ ØÍâ%¿F¤‘ûƒÕ#2c€šÕÜD"«ÿE”ºF€ÐôÉÀ@¸8÷I“Ò/\)n¸::½}}o?~Âßä?ÿ4±ÎTˆuÕ —qù>Yãþ$F(†…ýŽ1BD"q~~‘òG(”¼½ µÑР%’“š î“&e]¹"*-U.%–H²"#û®sjÜ8,•ÖUχA•C©º*[dp#}ÊËEA g…_<ž••ƒ1ˆDâ‚üBåH$Rd¦³"w/Ù«ƒ©¾¹Sÿq«=)¢cÀtÞÑN+"E0úÍ“Ýmû­8—J¿OÛHÝ/nÖuHNh%'š0!3"BbdÄùùgª{wYV—.ú";»¬û÷û{{óž>==q¢¢{7tE`GsŽŽ¾…“Ç´¯ÿyY\=HŒ¨¯/•9T£‘E† i”O¹P¸pѬ!~ý—Ægegååç–+$")&œ¾ÄgôÎŒŽ?IOIŒú#Ø!ê‹a£¿½[BV &Dš±~Ôð­åóŸÚ4ÔŒzÏ6tdâÏŸ÷˜2%óòeq~>ê×éê²>ÿœrvf99énØÀ34Ô6LTR’ñøqŸ×§NÉ öôÙÝeé¡;ñ9yéON}çÇ9óÇ¥:ÿß÷æIcÏdq‰D ‚f ñí[Tžmlf¸`ÑÔ›Við§ÉQþH¥˜BDwXõ5{ÿ¯ÁCì<ަIçÑëìðIÝñÅoq4‘ý|›`QüߟúL>i½éô_Ë\tß»•µ,#P! D\Pth(ÁÑÔÔþê+ݹmÚˆ""ò¶lÁÂ’BÓHVèîÖ¨¹¿‡}9ÆÙB—Ëæé·sûyÈ7£øuÆá’E³Z¹mž»ƒ ŸoâèµòTªìÔ‹ îþäÝÕJ oÚqÈ¢O‹ë ÎU_O*Æ@ešÝL&‰æÌžâáÝ+³ ¹¬¬ÌÄR0È·‡»¯kÛö¦V¶&ŸØç +W|… ‘Ä^º’j3blne% 7$ÐSëÁåë94!HùÓ_¦ø|íõÛ©_&Øðg®­kT:$„лw“¨(®–WGGúèQÎÿþGcŒ0‘JeõHc/^N±è¢YK}uÄá"„€8òÌ“¾Ûo&dÆ™Ëúcñ†Ëe„Ðñ!SG›4`KD\jôÙuÝ£Žß,¯/8W£®ÉšÝ-ŒÅ‹f÷ꜜWOžÛWž._²ÖµWoBŸ“FF¨Š_–¡±€<Ïɧ‰!yóèâmvÿçfD½gëäÔS‰Š#ÀrrÒpqa³Ù‡çì¬éâRrï Åb:5UV—“†ÆÕºVY®ý=Ão¾™9ž/fµ~rW  ûÔ—o\ÐׂÐö\±jäÁeÿ<\ÝÓµr*kèÈÔJc‹ Ãûâ äѬ‡Ç©”&tfZצ½E•z*‚s-­ì˜Î„ÜÆÿ5Zóº…rqq‹yš ,Õú‰úïEмÏ ò¬(BÙy²H8ûoTye58ÿâ‘+eÝÝû äseâñÍñÓÊ~ Ø™ß(×fï0tj*””Ð……¼Þ½y::ˆˆÜ3¿ù¦ðèQŠÇÓìÖM˜žaš–ÕCÙy¶Œ?õOTYͪâCß°[{úqrnQñ›è­84Vœ.«,Œeebn*ŽF+W" ε;±¸¤‚âŒá\R[LSÕG &ÍnM6}Æ<÷þ#âb’Db‘òG(>ŠY0÷3ÏÁêáôœÿõxIèìù;/Ææ•‹Ê2ŸžX?kÙYÓ õ“ÚQŠ«KÀ ß{Õ‘?rL³>"KúÁ×dVÞ¾zÕ¼woôæMÞ’%Ù‹¥LœXúøqittô”)Ñ3gÆ.Z„Øl[GǤœ®¾>!„pz.ùn ½wú”oO>J+K„‰÷þÝ<Íɺâp‘𷏀Ê!pzŸØK6_Š/*“ôßþ¥ßž/«38—j±®TWEóšÉdÌšäÞß/).U‚E¯£sSEÅY¤$‡Z¶dÝà!>W›‰ÀÐkÛ¿aAF7Öö°no×kÆŽè.kO‡­tÕª y¤>çÅaa«ŒŽÏýÅÙ´÷¼“ÛÐA~ôhŽ©éݨ(sŸ_ô×_˜¦e+}LHƈŲqtL/.¾/»vMæÄ`ØÖó'WØ>Ü<©­‰±•ó¨/ϳýg Ö­3—¼i¤ú6j7+ôÈr‹ˆeîvm|×?röuãÕœ‹ÔTjCº_UCG©BïõÇ®~éO¿ßOÌiš–H$ÂòòÐÐ]w]‹$_|¶U``HQˆÅbq8\žÇÓàq¹ì¦{–Ì¢(÷ ÿÞY;¦Zzý¶h±øl` ~r²kÇŽI7n”ÉE@q8í“ žS”ÿÅ‹ÚffêïÄ{¡®ÐQª@yÏ÷Éh)-ŠÊÊÊýý'—• Ï9F”—•!Šâp8R)¦1&(ŠE±šì…Þrº¬½‡ãsøðÙÀÀÛÏž¹õë‡hK¥D*•ý}‘–öJS3àüy ƒ†Nžµ°ÙÝÂ`±ÙÚmÚhhjÒ4½øÓ•óç-¡i!Äb³8l›Ã.ý£U"IDATa³Ù, ¡ú/ìÕK=®ë™Îη÷ìÙj»Œºtñ?s†««ÛüM+²w{äRŠÅ¢X,—«©­]s¯šÞZS÷é#‹Ëõ=~¼Óüiv3Y‹àg²†&›Éœ­ ¥#„ÞsíßÌaQ”cgkÚ»ZI€-u…ŽR…΂íç{we±4Â"ãíáOºZ jîl%¶Ô:J uÚyáÙêÃw&å6bµÍ gkîV‚ ÁN5wµ’[j ¥ K†unÜ [L€­š0a Ô#2µÃˆŒAí0"cP;ŒÈÔ#2µÃˆŒAí0"cP;ŒÈÔ#2µ#¬|4»iÛÁðÀ˜«aMÝ †™ÿHų]™zêIEND®B`‚pyspread-1.99.0.1/share/doc/images/Tutorial3.png0000644000175000017500000015271413604201723021134 0ustar andreasandreas‰PNG  IHDRlx–>÷? pHYsÄÄ•+ IDATxœìw`Õµð϶]+íJ«Þ‹‹Ü{Ã…Þ;‚é&’ZÊË{ù’—òòà „¼ÓÆP( …B¡Pþ8±eƒP|ý¤Ú]×!€ 1q §P‘ŠT¤"©HE*~YųǒIY[É”Õ7ŸØ²ÓŽ(n̓$ J@L$ ©HE*R‘ŠT¤âWA„³Æ’Iwg/€°Iˆ–„}M-u|1‘4T¤"©HE*R‘Š_ñì±d2Ë.i؉ÔdBPø!ýWb°H0Bý§ÐN¢"©HE*R‘ŠTü*‹ÃïA¾S´8jn˜§+"€ œcŽFÄ‘ôF[Å À€Œ1fX##öD"‘‘cÍQÒ€8Ò~*R‘ŠT¤"©HE*Fï‰VüÜ?1|¨_Nä,4ÔH0½ÐvÍŠò¬4“ŽgEYíðøÿöùÉã48·È‰ýN$@ˆÖÝ´m€‘á÷S‘ŠT¤âWTD…Ëæÿ`ž¾÷ð‘ßփϫ¨HE*ž`ðÍY鬑}*HøÄÁ)ã£n°‘ ‹Ö]ÿá!E‰Ê-œ$ÒMHøOŸ÷ÿ}{%ŒÀ½¿ÝIñz©HE*Rè**QØñÃÝÊÙdÕäŠÚ6ÀÙd©HÅÓ.B¸èßÿ¬˜ÄQÉú~â ”I¨#ÑF‡®?5ßC@ͯÈ4êç?ñæ LtnÀ„ÿÅ0(=&C3D2BE*R‘Š˜`J—ÌüÖb{lNEÉ—ççÀ·ê´ˆýÒÙe©HÅÓ._9ŒtVœÜ?1úгžûÎÊç¾½rèY1F.˜’¥y÷ýæÓß½}XV0H ^ÿQõº'>€iö™™ô{‰ƒº³À7žÙauÂÉ âÍR‘ŠTüJ‹Jýá†c‹Kï›k1£Ôû,ï~ÖÖŽ$››¾î3ñ ©¥¶áO›Ûšd~þÅ‹¾QÁÖnÛóÄÁnÎ…‹ï›ÊžÚ¶÷“YK˯žšš©ÃwïÁÃïWûüŒm„|ØŒuߨ8Ô×òÄŸj­é—-/\’gJaUwGׇŸÚÑ¥&õ¦ÛgŸkAˆ*ImÎ÷¶5ìïQÀ”Ûšü™6ž wëB0!É——ŠT¤â—IŒÝ3L²?<°úÏl!Ã$Ž!®º‘R›ÁCÕEm æjÇg;Õuþá]rÏå3ž÷葆Ε³Â‡.œ_¼·º3`Cì?Ú$@´É?0Ti?©Hů´H0`è¯ÇBI:«pÔuüø“Ÿõå.ŸsÿŒò{CŸní9Råê-Ï.žâplêà¬s yP{¿¨1y·Í³ÉÕÇ~¸ÉÃØRÎÊ™ßvr«/*Ÿm}¹+æÜ?£ü^1ðÓ-=R¸$î“'~³±³]"Ho»åªÊ•æÀ¦ww¿Ûg¿ýºŠÛ®âÄ U{}=^Úº“QZþÝKòïºPnûkS»~ã%%sôþMoï{×o¿ýšò9ÆpEš|y©HE*~‰D€! %{þ»«à¬¾ç7[FÎ `4uæ.ˆlÆäÞ@夛µ”w_Z¹a#¿£ªù¹wÈÑFç²iù7[¡ʵ[D)€¨%~Â5 ôgþü«µë~³B^øîmÏ=¿ÙU"e ©Hů¬ˆŠfÎ4=»-ëÁ¼®ßÕ™®Y”UÿnSKòYàà¾#]]!Ò}´Ë9½ ³ÂQú¹çxsûîÞ¬‹22§7½o´WêAmï:Ћ™t–GˆO·/*Ãõ.ïÖ®`Ãùì?ÒÕ%·–O¹£ì3ϱ°ŠÀ®ýí!†¢œ%V¤¶¶}Òò’öÏ›JfOM_U*ì;Âa«Tg}×)9;3#­ÂØäÉÉœcÜÙ¹¹)ä%íÛŠgOç4·ù¬úQ¨HE*žVïÁÉžï÷£àù﮾ç7›GÌ­OÄ‹!ì›E¥$ùpa]1]ä m7ë!Ï®½`*Ë¢MêNÉ[{ÁTŽÕŠz˲Y:Ý>ÍH˜ÅÆ ¾îéÍ/<¸^øîšuOozáÁsÃ<½9Êl€È *R‘Š_i×î8ø[ýÔL rë‰SOŸ1±P1ó7—fðxï»Ûž«%GÃõ ì  %?$) ©wG•ïü¥æ…S¬§x»áºÚ.hlþ ÙzE~ö×.Ê b¯ëõ·në çÓ @éÏÇÂPÇ|AM²˜€Í-ÿïÊ! ±Ytˆe//»¤Üšid9!Àœ‘ƒ‘çHHòc€}A™hu)!gúW "©xfÅA{¢“=ÿ`؃ŒøTÏwͺ§7”[T†ÃA`HÊA¾ëhg (jwyC’ªX$)ê‹ï=Úàœ^èØSÝ„Üué Ϥ¶»z0ÑçZ'! D›ŽÂw?µéŇ΀ˆy÷S›"„ IFE*R‘Š1X}øÁ*¿¢RËEÕê7Þ¢ÒKŽ7! ¢Ô§ÜZÕqjayÙÔòk‰€ÔÞýµ!˜ˆ½ï½¹ccŠ1Ïf™½ ìâüô §Y>ÛEH>Р×ò{•èªHŸOTHsõ÷ßlë°™X*çÜ>×Î8þçÕ†:Ŷî³sûý’Àëy@€IÏ#-Sr¶ü T¤"ψ¨¹R‘=Ú@Ћ­ ûQOo‚Ö=½ñ…Ï€\s÷S›†æý{Ö=½1œ€þªu`#ê\èW9녇΀ˆuú€‘„V—·4'€üåÓGœÅÙ©ß¹fîŸ?­Þ²íÅ÷ÞÕ,hqõ @ÂìDjÞ+‰Ú$€¹ë©/=t^¸äOn$Z‡;!8Ü *R‘ŠTLV 8òÍjèÁ‰€1,˜•¾ykoÞL‡ƒ!®“5*!¤·ã³¦’òs>€ÒÖõEÆø¼¢»ŠC›¹[܆²â‹ò¹@H&D€H>žÞ¼Z>§‚¹°‰€Œ P׺«7}eNÞå%ÝmR,6ëÜ™Ùú꣟kU´¢1“;#w:š§lì<èÏXœž¹ª ý_úÊbmv Áá@êÙr©HE*žfQ«Â"{´ÿÈ]Omìw2Ãgi> ÃäÃìÑ4D2š€ “zÖ ³ÑG{ëï¿jnŸ_Ú[Ý2¯"÷Ö § ³ö‚©|´¡SSñáÞ: ‰(€ˆ‰¢÷õ¯K©Å îzêÓ—:ÿ®'?ÙOE*R‘Š“!jÕPFåÌÇ++RKõÉõÛ»ÅðQñÀ±.q–áúZ§Û[7§]viI©MÇIÁ“GN¼vÈÁ4L>Ÿw‡Â•fMŽ ¢kÃߎxÏ)Zzñ’•Œârõ<ÜðaîsÖ¼ž7ýª²’ÿ¼¿´¿òÁο¼gÐ_¸æš  @ÈYu%©HE*žþê+zOü³âå6ÄñĨ”Ü5P×Åî6rOuëš9Sòí¿ºgUŠQÐv ,sÿÕ³} orí©nEÀh™ þŒÑ’[~:eõÍÞ–#€ ç ¤å-’öS‘ŠT¤âĈlÆ7˜éÙðòþûÈ0‰ù¬û¿9s>Óóúúýõâ³âß¼Öb¦gÃúýŸô³¨€T¤"¿¼"h®Tÿ÷,2rn‰ž8(å³|Y2Üþˆ‘ ÷^6oáÔA4˜À¾íϽÿ…" T¤KÞÌ[6 þb¶A„#“ú^›â%£"©Hű‰ 鯔0`’R ìÅ„Úöö`€‘³Âù·Z£"©HÅ  z¸•Ïàă’A\uÑ'ƦŒÉ'âB> ¡#Bþ÷ŸûgnºaÕ´,»Yϳ!Yíèö½¾åØÑ7Έúì¡ö§ßÙ$"~?©HE*Nœ@HÌQd¸ìë˯ϽÍ/Úê&$~þ'¼ë¬* ©HÅ/§ƒ+¥øgÅ­Á?1&ebg‘aŒÄ„®s©wbÀ a0ˆ„ã’dpn‘`e¸;»¯ñЀ1ƒÏEÃ)T¤"©HE*R‘Š_Vñì±dÒÄ”ÂÙÝÙýÎ)оӓ H’?…ŠT¤"©HE*RñK)ž=–Lª.ì 1‘ýN!!€! ˆc8…ŠT¤"©HE*RñK)~Eü¢0lÞ¬ÕéE3CžŽˆs©3JPÃ)T¤"©HE*R‘Š_Bñì±d’E}Z¶»áh8¹þ{…B¡P( …2¾éæL›A¡P( …Bù׃:‘ …B¡P(”¤¡N$…B¡P( %i&È‰Ä ¿»8ïúW\dô¤n}þм«_î8:)_%ÎÄ]M¡P(Ê¿ ãp"Ïž&v²-9{JJ¡P( …rv˜IܯޕEÖ ¯ºQÑ·>lyóÖt4áF Q—fŸòÐfiÄôL”%jío.È»iCOrq½±¶xÊ}x£wâÖ—®ÎŸýýÏB̤•txc†»Ú§ÇÛÕƒ~›my×ÿ©÷ïSŽüjyFš½ôÛŸŒüÓ&ˆûÕrfÿh—Ùƒ~wqÎ9SΠU …B¡ü+“x$’)¸ï§'LÇ_×Ú'×¥¤Îã>ñÔaµ¡ôKo» }ðêû]î“Zûú«»óo\»T?‰ŠGâ4_í É™Vpä•×N©šÚñÇ7¤)S ÿ–S( …BIšIéÎ&½^~èÊ…å9™Ùe‹®ýÑßkCã°prÓ{?¾f~qVVÑìKúKU0Öño¬úÏ}þî/¶¥¥e^ü»?¿Ì«n½Þ¾õÕ4÷Ÿ!øËk'欽ySÒaKç{g]Ù²_R@9ò_Ë3ç?]«€¼ïÿ-œò­‚Pv¥}ãã·­šžŸ•U0ãÜ»žÚæTÔ“O®É½òGO}ó‚Y…YÙËæä^ù£§ï»`FAVvÙÒ[ŸÙ]¿ëwëέÌÏÊ™²ú[j"‚½¯Ýœ•––f³eäLYzãÏ>jUÆqõ¥œwÇÕ½^ùBâùðïgß²vf¿ï?¬FÒ³ïůZT‘“]<÷²‡ÿ|ÜO*ç¶?¦àÊèw¬zòÉ5¹WüÛ“ß8·2?+»lÉÍmv&wy( …Bùr1 ³³qÓ«÷ÜøT×%Ïl©i>µå±ù~pÛãûĉÈY=ñ»»ï{/ã‘w«޽û}Ǧ¿ˆíŒÔ]ñ‡­?Y`ºèë»=žÎ¿U”xùt n¹¹tÿŸ_?¡¹(Ï^ý«óœ[¯Ía„Ò™¯šÛòÙçÍpÛçÛ=yÍŸî" ÖöyׂU‹ÆÌTOþþŽ;_Ûþ| ¡aï‹×zŸ»mÝKuaoJÞñÎÁE}z¢yëõiò®O¬zz[Mý¾g—žøåõÿgóÕÏí¬ª?ôögxg‡8¸P[¾qïŸ ½cåß1ã¿7Õ4zí6¼þîûÿÔLÝH …B¡|uIÜMÀM¿¿Ä¡Ñ³åßóÞˆ^¡Zû·—·Oûîã÷.Í5 Ƽ5|ïòž¾}X)ýèêÒÒÒ²®~¹ƒ(Õÿø[ÕÂïþâæÊ4½)Í£?¾)o"»JÙ)7Þº°îõ¿ì—ˆç£?¿«\tëåŽ #•¥/_9µzëŽnìÙþYò¿³ðض^ܵ}[íŒUˬIÛ{µ•ê¼qdÆ·~qçÜt½>sñ}¿¸§xßëÿ¬×œ)nî=ÿïöy=üâ{ÿãk•6!÷¼ëÖ8`ÑÝ?º¼ÙábDò°å7¯²ñï¶W¿öJíw\ž>ôþ¬Q=ùæúeßùõ#ç•Xõ)Kîxâè£ ÅŒSð¤|GÙçþÇîð=™ðËN»ó§÷/ÊÔë îýÙºÂ}¿•z‘ …BùÊ2¦1‘ÝÍÏ_¦)ÚÖÜÚöh¥=ÜZg_·¾Ãét%ÛÚÙñÖY;.s~~jØ#ãs sØø™$©2ïš[×tÿíÕm~ÜþÖ«Ÿš¯¾õ¼”Ø4#–Ž)X±"ûÀÖ]®Ý[ÏXsÑù«*ömÝëÚ±õPÑÊÙÉÇ{c¯6vvvé Š2Ã9±ùÅùÐÕÙ¥]UÆ‘íè¿(%ÕNÄó‚Áj A'pªñ!ƒÕ¯ÿðúåÓ ³Òm6ûôG·=®Þ‰pˆ˜¬kn_qèùïÿüÏën[iŠ:2¼Fµ£­SW\š3ô … ·àÉ™6x”í_,æµ ß±l^aÙÌE]c±ƒB¡P(”/ßÍffgš.x¶¦;Ò^{º›ž»dD§3q‡#Ý×ÜÜ?uXimj& …!cšÌŒì—Üz¼÷êûûÞøËÎü×.Ú =ré¸é«–ëv}úò§{ V.OÏY±"}çÇë7î±.?§|\]ÆáH›û‡á©ÍõÍ‘9èK.Ô‰Ö?üèö²¿½¯®ÝÕí>úø c 0®«6ÄzÁW¸?Øœ~Ë-s£¦B¤‘ÍÊÉëOµ ëŒ!½à@Âw¬ÚÒØ?’Smmj%Yt±~ …B¡|e™'rÊ w.:øÄ£ØÞØ'…<_üó‰u?yÏ79sS®ºvêÞßþäê)غí׿|­e¨·Ã¤ÚÓPcUµwL1"Óª[¯Kûäç÷þáøœµ7WrCÄ)nþªÅ¾üï?ôËÏÉcز•Kå×÷®¼dÕ~,–ÄÀM¹úúÊÿûñ¹Åsïïü|Ýü®(£{J¤`óz“ÉÌ«®þÙs{Â¾Ñø®ž†~ùtu|ü²hãFÒÈV\wÛ’šß>òä¦ú¾·y÷}üÓA“Z&¶àÃ’ð«V½üŸØç …ºö¿øÓ–^I.u") …ò•eA¦èößx0ããG/œ^P²ðÚ¼­^{Ûs²¹ Á––uÓ†ÂMûÖ Ï^ÔöØÅS ¦^ò_í«®™;ÔÍC¶K¾}_ö{_¯È°%?¿@˜¿ö抎FßÊ[¯+öÚÄ)iɪy’ß´låT€Ÿ½jïS®ž€I5ÜÔo­éfå¥gåÌ»ýMãºõ/¬+«+Å–ßñó‡3?¼s^AþÔ ~¸kÚù ÂŽî8¯Þ42Åw¾ðú#¹›¿wþ”âÙWýüÐÜË— NhÁ‡'Ñ;–_vÍâß_]V8ók/¨·¼ð»Û ¨I¡P(”¯.hÉ-?²ú槯wœiK(”³õä“矻ÿþê?ßôû…B¡P(_2|ÓybËJ¡P( …B¡$Í0Ãþ†’––6t§Çã™hcâ©›Tq”N¶Þ-9Í6$Kœ«§qfíoÞY~m) …B9;Iȉ<Í­ìiÔÏOâì±$qÎr›'À<¶âáÍ-a …B¡P(_hw6…B¡P( %i¨I¡P( …BIšpwv{{û™µƒB¡P( …ò/ '²¬¬ìŒšB¡P( …Bùa{=DœÈðGï( …B¡P(” c") …B¡P(ICH …B¡P(JÒ„»³ !gÖ …B¡P(Ê¿4I¡P( …BIêDR( …B¡P’&¡ÏNADºB€,Ú CI!IR µç!¤mð¯"ËS*¦ž8Y5¬ÙÞÑn±XÒò š[š¦O«L½üƤÎM¶øE|½£>Ñw¦öœ3 Ãqœ(Љ;‘ªªöõõaŒ8P1eº+(øC¬ˆÔîîžçµj%BH"!¢D.©³³Óžž.ËJnN^CcCQaQŒ¢¦¦†ò²)ÚuèëëMI™È˜ºöÀœ†%%Ƭ¢§«Ué>lâB\å7m¹Oã•&!jäýAû€AˆË,yÀž–êl9Ù±ç¹Îƒ}Ý©¹#e>æ{¾©Ýýðï¶•8tO=|Å •ˆ^¿ßo0,KOOÏHit:ÑhTUÕï÷'¥Þ{¤Î×—Õº»»Çs:…r‰s÷NRC‰=wÃ;‘»víZ¾|¹ªª‘øšâÄ×8¶c;9¶1S»P:Fï@j‚vN#zK&“)D®N§Ó†EŠ¢­"bƒvŠÙlÆ÷ööJ’$ E}éDcW $—å™T¤+*Ùðñ1ÁdVT"+ª--õÙ7ö}ÿÖ¥‰d5,šv#E]1H”œ9•`ŽŸZ’ù-«§Nü€NwÝÿ¤¤11Þ±ñ %(èqOp÷Þ#í g>x¦-š¢Ÿ‹Èm<ôÖ€ôôô±…d†Ù¾}ûâe«^Ý\7¥È¡ š{|>ñ¦'Ož´ÛíÑ*&°“Ôl6û}>«5Í`0v4ÔçdgG¬¯¯+È/”eYx¿ßg±¤ŒGWH )²#$˲Á`Àëí‹NÌñ¼A?JlX²$ÝÏ0ÌxT¨ÀeÏÏ-ªœÎíÿ ÃhL‰&1ëæÜpcffÒY›w²7Y½)fÃošÛí LRþ"·½VÎ`0èr¹òóócÒ$žaŠ9‰ß4Ùö+B ðz½²,[,–ÉJD¡L8“Ô$òÜ ?&rùòåÚÎÈÆHçk㺆:‘‘m‰ dP:0S»(ªF¨ ÀÄK`Äù‹%â/K’TRRúúúDQÔvu"C¡Ûí6™L ÃèõúG>¹z|Mí=7\0Ó¨‡¿·vÉ“ö2‚^’qPT ,©kí.ÎIÓŽbŒ“jòGE¢=Õ;uÙ,:8ÒLª‚Y–+/Îúà@ýºÜ£1$RRwÍزK®%ª˜,U ‚Îðè+B°‚EÄ$ÅË0–å·ìþ·U‹þ+ÉLF)þ–­[OÕ×gff^~É%ðáGŸ´´µ|ýÆÆqõë¤wèsCÞ¯¢‰nt L©©©™¿xÅúMuw_>פc½A¹$׺³ªýõÏ[V— ãHwF¤W=Áüã's82nOMMSµ° °®îÔ”)Ó´C>Ÿ/ô[,Œ‰»Û¥ (L\©–Òï÷PTÅçíKMM#$üiVÒ_d2™|þWj„ßçËË/øß‡Uáí¤"œ›q]M IDAT¦Â˜´ŠHy Æcl³Ù.¸àò;w°C:©UU™;w^zzzÿèX ‰ÝÉdosö(ªºóhÓ¹ J÷o˜7­0©ÓÔ«ÝöÚ€"m(ŠõõõŠ¢ÆììlBˆ <Ï#„¿Û­&èª#$Þ~EsôèQX¿ˆaô¿è¯š7o^‚a å4§¹™¤† ‘çnøXTdÀP"#‡"eôì–ö’Ñèèñi#ê^ .B|„ð@xº8>Œ^¯øj^¯7==½»»ÛëõFŠ4lc¬ÒÕÕ•›°ÖÙ¸`i¹^`7mÚ¤×ëµ1j¼ä‘¹lYQ% ö­?Ÿ‘¯×j=žçW­Z3Ú ÑþcŒ/éîWÎ+x ÀT0Çr¥ù¯m9uÓêҵībwí3 ¥ˆ À°,èô¡îšo0ðú™–¼[:­IEÕlðëR F à „XEe¥Îh)øpÛ}žó,ƒ’žÂ?,§êê·|¶5ÕjnkkÌÍÉÉÉÎÞ½{‡ÅjzqýË×^}mnÎ@,¼ÃéÔëô©ÖqEÎ4bž‹¡etbí¦C¤Ðív×ûÍ«æ!oP–UU‰žçý ‘ÅÛÑ–——Ñ8‘H(**iiiÌÌÌÁ#õôö¤ZS ¾¡.';W–ežç`iIù27™LÚÒ >Ÿ—ç9G†C{*ãÃ0L0bHŒïáŨðz½7ñ*42"åå ?¼ÿ!„&0Q½ô.×j1òe†Aõ­][¾hIêÞcÍ<ǤYŒYéVAàX†éñŒzAëÓ†Ñét:$Iª©©ÑÚ‘¶¶6«Õššš*‚ ‰×Ÿ™‘–xâ¤Ú/ªªª Ž´„l©VLˆ»Ç›oµœ8q¢¢¢B+…r63I A"ÏÝðá´Ý»wk#Ê##ã5 ¹âÀI6à“DÙN”‰ºàgÈ (Þòz½^Q­ÀÇ)ŠÒÛÛ CƒEQ.)˲,Ëc¿ßßÙÙÓ{Gš)Ûnyï½÷æ/X`líK{Т3§†DY”UYQULÄÒ­Ú»U»Kµ•UL}ë­·Ì6±&ºG;ò?€€¨øBŠ?¤øƒª/¤Ê*QT,*X§22R_ÛR—¸¢aQDgOÝ÷•D9 D" ¨ªtLÏM16éwèùmîê;ƒ=ÛÇ©(qš;¶í9úK‹UÈÈȶÙÒ9â Ô!Ä"Ä¢vz>Ó§ô½¿õ®@Ð5!êvîÚÕÕÕyðÀÁöÖö;w€Óí>tðPGgÇ»ï¿ýô³Ï¨ªz²¶æ‰§ŸüÇ[o®ÿÓËû¿øbœGz.bvÆ$ƒ³Ùìöl&AV”@Pò‡”Ξ€7(ñ‚ÐT[ZZb´Œ³\Ѥ¤¤p¼ bm®_fCC8‹E–e–eÚÚ[KŠÇø ä÷û»ºººººº»»qÿ¼ÂQѦ!&«Â㙢|Hp¹\žáèîîv¹\~¿Ÿ2ß „¤ÛõÑÚì „Þøxÿ¡-Ëç–_½ºÒ”3R-›Vœ—ñêû{Õ¶mÛwò'?|ü#ÛO†a´H$Ã0ÕÕÕ¡PHÛ¯ÅKL&SJJЉœ(1$Þ~iÔ××÷‰èh;¾dIÅòʬùåŽ%3 û¸¦8räÈ$I¡Lg¶!þÓz¢7â@tÝFF60äaRªà^`¡Aˆ€Ù(El©^W¯Ç]§ÓɲÌq\OOOiiiSSsŸ_Š.~ôµ@ ˆE¨~¿;-ÍÑÀZÍ‚Žå•773Åçó–––¬­suù‘B",a¤¨²‚»½›ù5>³ž÷tw;7oæÌ™uuu%%%£^ˆöú½Éß!Y!…C ,ƒ ÷gaϧXÍÿø¬þšsŠQ4Uéõ5ÿÔžS®JÕˆ D"Ø'û7µWKƒ•C©i‹}ÎLjr1},#î“¢¦ñí€t*;³ÜjV±¨âªJ„€€q÷%OŸ¿>˶ä“÷]rÎzרPQ’NÕŸƒAEE!1ätvööö"±,k2êŽ>–jK{ò™g‚AoÐï;îìÖƒÁ<Þ¼q3æ¹€¨$ZÔˆ¸˜I1–$Éb°x¼AA`{|¡ŽÞPgO‚! b2™"Ùjá.IœÈHÅE%GŽ..* Cv{z[{[KKSYiy($"Ì&˘jÕ„Ïç $6ƒD æA¼èHd04HEPV?«îêè r ØË¦8˜þÁ‰« £Íˉ™¦¯uíb2zŸŸã8¯×™-IRäË[ ¨-¶ÞÞÞSµµ)Ö”ùóŒšyR³³“j¿B<Ë(Šâ)<‹8–Q1eÕ¨ãX„Øä>4F¡œ&¯!Hbvv Ë–-‹Ùˆ_€ˆW½=Øùò•S£f Ú{^¯·¢¢B’$s’B’¶FÆ€ûö£vj›AIµê™y£;§Nª¬¬Ô^[µ•·œ[ô¿ÿ¬–][w,F!߯^½8C`TQY–EÍž=ûóÏ?_±bŨù£áFÂiWcL`ÐÊâ‘FĬç¶ì>yÏ…D‰Àާ.³—?æ®ûYª5 _#ª à Q,E Aœ‹gN©¡C JÇM– ×FSÆyqr«¨¨øç?ÿ½l•Íf{ôÑGG5ãdÝ{6{–/Ø‚‹jÒç ¢WU–Bczk×§’âø”ì´ó‘’»zÑ¿¹¼<ËãÒ <ð Í€XƒSE‘ d223R1&=WžÅÚãéÎtØêêObBö:tÇÚµ‘é¥c#湌qkk«9³ü³žü,›‚ñᦾ,«in¾¾µµ5???)BUÕãÇcŒ¿øâ‹… ®™å8p²Ëãõ—dZ®›_òÜõÖ[#÷Ìžþrö´‹BJîñ×ö¥%EsÆS´ Ýn·Á`”$™ã8„ §§gæŒ1¾ù „@ üô}ÿ¡A!DK¬‘xX `@E8iÐ&dóqg›'° 8«¸È®o_=`cUx°2\HP¢_À Ç,‡Û9Ø&6›B"ÔWá  0Ûvýy3s©om9|ç%Ó×v4vØ£Íeùöto0Ûn=oÑÔÚ&çø=Hصk×Ò¥KEQÜ´iSwwwôôÇÈa¯× QCž/^,ž=»-Z?sm–h‚$Õ~éõz‚å4×䊊j5òf=ϱˆe£Š&Ál>óßÎ¥PFbR‚Dž»ñÎÎŽt»D÷Ö ëDFª’¤Áívëõz8–çU[£ßi$0È}쯚 @HRy–E¹ cô*àäÉ“K—.•$I’$m*!dÝÅ%ϼuÒÍ®Þ`™C¿¤LpXY–Y–ÅëõzUU[ZZ)ÒV¢ÒÖJ3ëµT)fA¯Ó‰ŠjÒsvøÖ•™,¨š_;ÎÅ&ì%ÿÏÓð”Q·‘O‰êV$›!ýjUîèq¿œfËRü‘€xÔà€xN¤ÝnôÑGŸxâ ÍÔ<È蕨F¢ÇÌdáU9„—jªhk¯)̾4Õ’UÛô¶‰CîÞÃ]†Ý¼ÔÀVΟõíñv@c__( ©˜=köÔ)SÚ;:¶}¾M•eB€át M­ Ëéî¹ë®ãUUŸnÞJ²ª._²4‘‰ºqö¹hhhÐÙK6ún½xBŒ?${C™ïoú¢Y,0x‡. I’¶lÙ …ššš¦L™ÒØØØÝÝÍHRžÁÐt°Yqæ<ðÀÚ2ÎA璘~oAEšêù“Òsþ®YŽÙëþ=§xÆxJƒÍf?¶éÓY\ÔåêÊÉÎ=¶ÏìÅc_TU{„#‘HÎ+J±‘Ș0 t4£Dêíì¨`gXÅ_v4½òY`5ƒ¬¬r ‚»8ñR¼Aë-‰WcÑ÷PLÿuÌ>í¯¢ÊOØìlP1‘dEU1Dz}>Q’UíÝ&’$Y•UU”E€1˜uuu .Ôét‚ TVVj“i†úËѯ‚ F„Ðôé• EEEqòw¤§&nL²³³³³³3ðÁÁŸÃs¬¢ÊAQ©it-+·T?Å¡PÎ*&»!Hä¹~LdâÝÑcwb\Æ8~d?zmi2™dYÖëõ}!Ä zIÁ8œÅ@'v$m¿‚±¤`BÀ NQ©£Ç'ŒF£$IcA4ô/tß}aÁÿ}PŸ_œZ’¦L/°FJ¡ud«ªZZZÚÚÚ:ê÷Žc®Fô¹dqáö#-¢’$I’Ž‹çO5éøMÛ­.–Œ:.rÖ¨C‘âÛ©…öµ®çAå¹€á º”éÓu)ó=µßOµ/Rƒ{ (’sÔÜl6Û#<òë_ÿyä›Í–ˆ¢Øk0§¨X² ››«—Ïû™À› ¾åý®ž}:Á–¢›“n^=½ìëɾoŒ”¾¨ àº›/À’“• ¹–¢Â"–cõ:ËÛZYÖÖÖ^\TÔ'v­X±üœ+›š%è›V:›çÆ5sès‘™™Ùétm<â¼ñ¢Ù²J„å;¬'ëÛ+çf···'ø\Ȳ¬{Ün÷´iÓRSSg̘¡ AcY–é!äj;uàÃÇ–Tfø;º:[꺂ùW­-›wÉxŠ6UÅ?ü¾ãT“áäßÿNë»ú¾ùÒË<=F©Fÿ"Ž$Œá·á¨E ¨E`·Ûû åBÁ„ÀP»k]C=H êšVnŒ¹à°Ž®BK´éÙÑ?+\mi].—Á`0™LXU±6'Û ‘¨ÅÙ½qO]i^ª§7¸ý˜óž+f*jÃâʼÝÇšž`N†eϱ&›Å˜ëHͰ%ŒVo à'„~”››Óõ¯yÉ“÷|B@Q$EÁ!·ÛUXX˜ £’Tw6VUU]:7}W³±Yå9†E°¬ÌjäI0|íµ×nºé¦‰²B31ÞéiFe¼ÝÙ„-f3l2ÆsF£QQBHˆT†“2Ôk„p­ ˜E%jÿº²¬dZõza”©Ùûöí›6mšö©rBˆÙl–$IÓa4 ;/(:ÖØ»bFžö{ð<¯×ëeY–$ !”““³gÏž«¯¾z”b þ/™œ›šbZ37_Å@  k­ÇlÝ]uõ|3‘YƒÁ ×ëµµyÇvcHɽÃ×™ ð‚þÑ¥,o5eSì}R`m€d‚º±ìvû#<¢m$¨ ¤’Çèú¼žåwk$Bô|*¨sò3®++¸4éRL[ßɧ\±"oíÚâ_¶÷Õ<¶ÿ²i7¬÷Ëö¾šß¼ÀÞŽìOɆÇöÞ¼ÀÃÚy¿DãX†}èsÑÐÐ 1 *Š?H80&,@_@žÎÈбøÔ××Ï›7oÏž=ééé©©©YYY.—‹âr¹´Ï~ò<Ïqœ»åH þŸ³ËÞæm®º`É•ß~¶Ó=‘_+ñìÙ¨¯oÿäƒJŸÏ¿tH u{-œàyñ]f‹êìÒ¦-\˜TžÚ£g2™´uà}>¯$IÚ!í’Æ†#£‚yãD>O¢å`2TÈt÷4ò¾ósÏ+mà!D0Ö±ªEÝ€$/¨*C< ª€È?ýqbŠ8àf‘þº±Š'´7²íÖ²ÜÔ¿ÞpÕ’‚sfeúƒRƒÓootfZg;>Ø]ŸnÕÍ.ÏI÷§´C!±««S ‰ÅÅE{÷îŸ3gP7@,„ zª0FG«ŽŒ&YžÈO°&Õ­1mÚ´ÚÚÚiXo4bT)äîhªõxL&S[[Ûúõëï¸ãŽ ´B?gIC0a‹kµ=Cƒ‘‘B²¥ÙlV¥½½ýT¯•˜S´ªXÅc‚ª`:Þ¥ùóFï" !‹Åâ÷û1Æ¡Pˆçyí›W„ôtRV”Y–BQQµÆ,%%Åëõ&ò¥c4¸'æB™ÍfŽãTU•$I’Õ-;«¯™o ¼¹9))):.©UyGÅä¸*à¶{×ˈ̠äÍå¾î,A°b’Áš ɸ©–B .„8¢ò©–’H *+Á@PœVxwnV¢•~"´öžøÅÆ+éÂqõ­_m¬îFµÁP0Áíõ{”[çÿ7äû"‰ó\°,«ãÙ êó‹ ð„…@Hòúƒ:aŒÉ ÿÊ™™™'Nœ°X,„‡Ã¡ÑE …BÇi“Ú«6¥N+JëmÜv²©·[˜³ö/ò‚±Ó}|Ì%ŠFéí­¾ûn¡®ŽU”Bz ‘ŒÂ¢ÇŸjþ¿gÙû­MmÌO~Ê*ŠÌ²§ŠŠŠû[&±O$CÔjhÄnÈK³Œ ÿu¹\F£Ñh4&Ö=ħ#@ÉJѹz¼E醯W~Ê‹‡Â!IVAU«*Ÿ@ˆ°?[Ð8’~b_½>ÜŸ®Õõ<ÏHð nt‚!é§>üÁÚ%]½%SÓKòÓ§enÞ[SšeÉMO)ʱ•8ÕvÎ,u¸{ýÏýmϱ÷^7ö§¢ª¸©©©®®¾¤¤8â÷ÇGQ”¾>//Œ>Ì4©ÙÙcXlÊÊÊTUíééEÑdʘ6mZ xçw222<ÏóÏ?çw&>™’B™lNCCpšfgÇŒ‹ß©­U߉»’‹Ål6ïÚµËe™_8=/(kÃAib%±HÅŠÜÑ¿ªÅùdYŽ|‰ bá¹­„H—·ænêt:QGùªÁà4a°©M E±½½Ãˆ-Èà8b]üABI½Z2!‹! ˆ/²0ƒ@%H'‰F]ú…¥7†¢œKZºÞã8“¨"E!²ž8o6–eêWجsC¡Bˆ‰b̺<Ž_l¼2³Èr]Úo··¼V£û@ Hßšúúζ7Ù>©÷¯-7Ìþ·171Ï…Á`ðx<+_ÕäÎNÓ›dà‹€Eˆ(²U‡U.-Á—Õj]´hƸººZûRyÍ5&Yæä k}½_’Ro»3mþBÓÿ<}âæ¯qí]Ï7gd$)½®®áê«óÿô'>‰oxöÿK"]Ø1SR† æÏó±õÁ(ŠÂãV5—ÌÍ9ÖÐaѱ¬Òî×VqxcBؠ劤T`^ì)ÆÎÈ_–e5÷Q«ôû|^2A_ib¦Ë«¾öÑ¡ïß¾æo©*1脼ÌÔOö5æXÍF½Às¶}^fj (ým[ýürÛxÔiUbÅ”ŠªªªSu§jkO‘pUŒÃÿõÿ‚d@Ä Œt»ª*£:æ“7;´xEQEaF{¦º»»1ÆkÖ¬Ù¸q£ÅbÑét}ôÑe—]–¸ʤr‚±;[ë „D6F:_óK`ˆïCüÈ¡Šy£×f“tYÆaóú•ðëüdCs ¥¹Ž}6O{{»Á`ФÔz!‡nDBÑûµÕ[ººº.Œ·Ñ–ÑÎ}ÔŽ*Šâõzëêê ;÷ðÑÃn§{Õª•IW)±æ¡F ð# –‚Á 0 £†yÖÏêæ‡úL›#Ëò8}¸´N@žµ g±Zû £§·]¯³i7O¶}5Ë Ñ¤6ÿ]Ø‘H vhñ­Ç’ç/1Ý•Êå]UþÃsË®pKÜÞØ”63oŰ9Ç×)ïÐç" Ý´jösïŸÐ³vÖªS1øEõ@sí¹e½ó·¯ýëÍÍÍ£jŒ ]ƒÁ m€,Ë¡†CïäY:¬Œ×]wèP+_¸ð›•Ëoì-%”ÿHÉäÞÞšÛo7˲oÁ‚©O>©JRÕå—¥Âé „Þššúµ›M/¼è´ÛËžy†„šG-¬­mýÎwr^z‰·ŽòRó¸EÝ„„b·ÛGr"#Á¼øÆG©ÀZ’¨eÞÉšÊìi9k‚’ êßcP!¤_M0Á` W1úl–7 ¨ˆ8LDC±ÛmÑ®$Ã0DZ,ÛÒÚ"˸»ÝuM-ˆ¨‰ä?jgßüù•,ÃÀMÍ€Om=ؘ‘¢ ÄÍ{kΙW²îšðü§Å³ŠÉÐÞœdôj_ó!„­¨¨W2ÚUÖ6b¶£kXŒEQU_{RßÎN¼ýÒ,—eYQm’/PUU«yž¿à‚ 6nÜ8mÚ´žžž`0¨)”Óϰwò¤6cÿvvR‹µ&‚æGjžrR¾‘$I.·»gæY!eЉ$êÿ{úýY¹ ­ö§Ù£ªê‰'ôz½6ÁP«ß#×Z«ôAˆ®BÀ¸haHI’Ün·Ûݽxñ¢‡5ÖÕ]zéeãHAíGóá"‘RµvšônII×wuôés¢U£Úí8!~d´ö ÛŠ^µÕRæq· 0E9[¡ˆûÈ0 ÆX[àI3c úÐmåÏjÑBÈ 39”Èöõ³~(„ü JJJ¶nÙxï¥ç¾³»©ºÑų`K1Üv^£ÇúõëçÏŸo³%úBéqµðâ‰Üy«Zw¾òE›eÖ….9ïkÚ£ñÌÆIËsÏéœÎÀÔ©Óž}–ÕëCµµ&›wtý³Ëå*E¹§GWVVñÌ3wÝ•ÝÕå|é¥Ü‡ŠŸ¹N¯w:;1& xÞý±ÿ„‚y`Àj7´T¯Ów:;"*BÁ`P'è4«À@<Œ€Ôû>ö™oÑû·Éw&®Bƒ!TEî¿ò†G §êO™ f¯ÏÛÞÑ&y{GÍ6qØÁoI~F~vÚÛ[/¬,dµ87=úè8ïtí{³c;WUUI¥¡É°Þ§mLÌF†ÑëõZg”N§‹¼r€öN˲ìu×]wàÀÊÊJêARÎB&¯!Hä¹މܻwï²eËdYŽlŒt>éŸ@JÿŠc IDATŸˆÑÉ6cƒA0Ùõ(ßÝÚ8̺½ÃÁ±œÑh,³3Ù© uDFª mùmx¢æÁDÆ´EÒDÿ…„‹C´k¢E"}>¿Ã‘±ÿàÁƺS_|É„¸n¤ŸÈvÄ™‹x“Ú» }a1¹{zì¬ã‡d0ã7#Ú “® XSìÁ`ƒôŸ5tŒ {ˆ>wlþœÖêOH)’bèáp8†¹òÊ+<8'›[S™C|}þôByy¹Éd²ÙlGŽaY6ñ‘¦CUœøüyƒ>éô;.ûæãÙÓÆüè ‹wîŒçžËêõàúàÓÌËJKEQ¡´´Ón·´·w¾óŽéÁY½ž_³†yýu|ø°°Æxs82Ò3böø|Þ>¯7Ú‹æiCPjNĘðç÷û«OT_{uQé ¨è.6‹/#,ƒŠ m’ùœ¤T„!€dEެ‚qy#N¤,K:^èîv;]]u§jó2&`½Æ‘È´§t¸úf—gU58¯;o" AB¡ªâH€‘`B }$˜B´0Æ„À@BI–Œ†‰\‹1ñö+‚6!N‚%K–LœÊDrú‚h&f±ñè¿Ç+ò7:ÙÐíø8ޝ»b~C›ª( ºkF£‘øÂl[zzúè©4'!´`ÁBH ˆ¼Œj#$ öÌ’-ËHhŠDŒ]žË.»|¢:‘cF£F»hZ¨c`?ÈU,ß+’5\ÚìȺ1ƒ&ÊM5!DUU錆ÈnÌPÈH'ãÄZr:ö¹`fÞ¼yàñxB¡Pqqñ#<²oß¾¦¦&›ÍÆ0Luu5ÆxÁ‚Ñ¿áCž©ªƒ›·mþ¨¤¬²lþ•¥í® Çw\¯×ëõzƒÁ ‚ö Æñ {<:EÑëtPQÑítº?ù$õ“O8“É·reW(„[Z!$®^më-ýƵGÚyç¡âbBˆcÙã‰ïD î_9aØ`ž$In—K¯7vööuvufeeŽaEÕAýê€îts,bôْ¸kv$«‚` Š$‹bc €X–E…‚ Á^ook[sSs£Ûíîv»‹‹ M‚êiHÖöäxü£SstëDjó ?ýôƒAϱ,ÇsZÌc2ЭFuj«Xð.±$«_|I___JJÊ„Ø3†ÙÙÊ¿.§¿!ˆfø1‘‘¹uñ'Ù…B¡––¿ß¯uF¼hßÞ4´yЩ©©£:L Ãää%ð‹d;ª‡çõz1ÆF£‘ã8Í~“É ÚE6b|ʈ[Éó<Æ8 ÆiT$Iòù|1×"WU¯?à%–¨+Wž“lw„aÏŠ\‡(aŒ VUUAab 3à>FJœ·–ÈXh6W¨ÐöG|ÍHlRó;ÇPüÓÀ°zGz.´°,Ë‘`p{{;B(##C’¤úúúôôtƒÁÐÙÙâwœ…B¡¶¶6UUµê@û¡‹Êf=𳿦gÀžv777çääŒúè [46#£WU3M¦úßþ B–ÛÍHR]e%sÞy^§S[‹ã8áœsêkjJŽÓ¯_ßþÎ;FU5éõ§úú¬«9& /Ú:b0b¼}ÞÖöVGFúªsÖL Ç¥„Uˆb²*zzzdYáI yÏú¶#ïbÀ„í;cÀXVBÂÛHÈfFàé†<:`•s»Ý)öQV–Ã=Ÿi·¼ò£ uBBk &®W“É´dÉÒÇ+*ÆD‘eÌ0rx2 D&Àƒ6• 1ˆ–aË0‹Ï1Ú …¡êvîÜùâ6ØíöQ?¯š`ûE¡ük1ô™¼† ñçn\=}!£ÑØÖÖöᇒ¨›1i†îIMMÍÈÈH*¼4“<¢Ñét‹-Ú¹sg0Œîõ6ܨýŒìÔŠÞyçÅ÷ë—/_îr¹TUÕÆnk>„6‚[Óˆ1Öét)ii§NŠÌày^šÉó|ü²geeõõõt4<äqÈÚÛˆ¢(Ñ#SµéØZWš,Ë^¯÷²Ë.;~|ôÅ´ßëèÑ£[·nÅýë4Å$zÃ0Ë–-‹aããù©Ï<Óõïä»Ý„>³ÙÞy¶›oޏÅ {?òHÛ›o:vî,w¹X–í¶ÙŠþs~L_]%1$†´»…c9@* ˜`¯¯Ïéììtvôõù¦TT,^4Æ>ljUAᩡЀëUÏ)¥»´Ûôÿ/ìTBôa@gò e¬Î¬ ª6ÿñÜóIMsNP¯ ùùùv»½¸¸$ÙaôÚʻƑãÓO>ùdäãX?üp²fGHKKó¹Ê™eØ»wò‚ÄŸ;´ä–ŸNY}ó3_ËJ´(CЦ¶%º¯¶`žN7INáØ¡Ph«¿h"¤(ŠÚ4@mQ‰ÈÌÍmâ8NmÕ!N§y““1ª/Ú{;ƒÅg‰“Á°ÏEÿ\Ô—KC›¶Å²ìáÇ Ƭ"õèõ9â?péõúÊJSEEL¨>úM X[+VU!QÔÍše9slêšššAÿ›ÛÀ‡æµ¾I–~ÿ‹dz ÿd¨…‚-u‘/$Bˆçù̼R:#·Ûýä“OÀÃ?œìÚ´ÑÔÔÔÀüùó'Ì2 å´°oß>„Pyyù°G'©!õ¹{àŽ[6L€I¡P(Êä¡õ¬ÇƒÔ¨©©éééñx<a…r:HKKKMMɃœTâ?wš9ü˜H …B¡Pδ¥¯ÆßN•••M„9ÊéæŒ8i‰ÏÌ÷™¡P( %dšz"wíÚu~ËA¡P( …BùÐ|"rÚ´içµ( …B¡P(”ߟ}X>ÒÊÔ …B¡P(”?8Ô'’B¡P( …2TDR( …B¡PB†NñC¡P( …B ÚI¡P( …B *") …B¡P(!Ã…zÀñãÇkkk{¢4”Âh4jµÚ‘#G*?Ïo#¶(ÌŠÊ:—o;Ö¢;%évÚ1㸂Ã[#b Q½~ž3ÝØjŧ‹%IìÄÇ¥$÷º@²øßF«ÕvK:n·»“Òh4Ý’”Çãé0Ž UÕ•Á§£R©»P¨³xôчÕê3ÊÄë•^|ñåîJüwJuuu}}}ß¾}ÏwAšOdnn.!dðàÁ=Y$J{æJøÙ …ç&ÿÜÜ\„!cÌ0 ø_P¢(²,«¼GɲìA9JÅÑ£G™!D’¤`bvºí°,íüx ®;,C'ÈLmÔ¥Æðè!C2%IhR‰§bt`ÿNsù÷,##BXPTÖÔ_eºvÆv ã´´´áÃbÏi@!€B B€ò™ÍHùÁ0š´í¿íêp¢î¤¤$ƒÁ Ë2˲=gKç­ è(ö…@§ßJ•æëÞFìba‚áP~}l¬¥Á)` &ÄfØŸ×ý ¬¿åTÙDFf4«y&*Ü(ˆŸ“?÷tÙ¤­iôÚ\LÀéåÍmîéº~É–n,s·èÔ’’’ŒŒ ·Ûdü¶LËL*ÊÞYþÝ#µ5Ö‹žÖš":¼WúN'Bˆo(ÐÎm §s²[L«¬sq ŽªÜÓ±ýS"EÛŽ#ç=d‚!áë]U~÷,Ú¯½âââ &„Ú?DÙ¾}{ïÞ½C:ªÛéàÄP©@u€aˆÆQ§‚0A?'2Àbhï©¡¡áwÞ ©H¾—% ØL&–e].—Z­»ÝÎó¼2Ò]UU¥¼ky½^‡ÃõõõjµZ§Ó)6†fuptº“´¡¦Lª;¢ç<\æ]–„Œúzcuz=!²ßÀ!.¦÷ýáaÕ¥y•{ÞäªÙêªÂ¢ÚìÿkË´½GOÀˆAé,tOžëÔ+¼ªYá‘æ‹‰øm„ò“ D9|èëÁ¤o±X0Æí+H›6åÁÅýAˇ\þ®TK`¹k×®qãÆÉ²ìÛèDÒ”â‚ò*ëéÂäž®‹°ªë= cÜ$"n9:Lßí ÌŸür[~•KDª:›àô¸"ÌF³ªK–ȯcxW’œv'&„1‡É*nïÉî4áÜèÔÖ4­´Îk!G¯|€i,ñ$]6lÚ|QìØQRWW§ô¦”””(ß• 3¿,(óm‡3Ž[£ÙåÎîQÓ !óî[íÌù¥.w¥>Òì®/ë8¡Ð!ghú}ágÁ²lk¥Ë–-C=ûì³­wµ?ŠwA–3f€Í_~ ¶] N€†Mn(wÀ) ÄÔÁ¾dÔÆÕ@Ñ!ø©­4*++_~ùåqãÆµ?pàB(++«EøöíÛyä‘cQ%IR:}¾Šp÷?ó[¸|(?»¸.Çë…—0Ã0n·Ën·ùr<¯Õå*“:,¡W&_UõÛ·«˲ìç@!1«‡\uMllR›Kv²×ɱl“!/Õà…!2ù‘f5`8óGšÿ%gËÊfj¼]¼èêöä佸rÔE,óñnr´m;ÃRÐè^¤—‚¡ ©ZZØ'R9× !¾Ng@¹ ¸ š2˜Âì?eÕèM.AÄ&D’AÆX”ùý§êú&…÷DÁìnqÃá ÁÔÐèm¨·² 'c‚ ‚;W5 n¯Æ¢ &F¨ *§Ôˆž…êzWTX÷xßï?eeUz¯$9lL.«¸=yÖÎÕR–4MgÑfŸv¾qW¤·p‡~Ï}/ˆ¢d‚‹E«Õ–”” 4H ù®&uä ´%|Cu¿ýö[ûyuÅ´F„ÄT¬}Š Žìõ§_™yÅ3ÚÞ£ÚOЗï¡C‡>L/¾–‚"~ŸÝ› 4pðàÁ¡f0<àÞvvAp™ž#5XÂÃÁUŸ§ ™’4ôâòxnXId1&3ÀÆ@j ¼m¥6a„÷Þ{Ï÷S’In‘gå{ãö–ÅNÉ03ì™gþM7ÝÔº`cǃ’$Iéc“e9§ÀÓè -ïÛTFQëPL*çp8@etšEdk†(N§Óår€$Kv›-,,œ³”(b¤×éNÇ™@„œGbR²ŠWªæ³ò%ŒqxxøôésvíÚÑÚ­B–¥¬¬¡ƒcLÁ:}®šõÚ€á F)Å@Pýq¨paÑ@¨®¯ZHw¦ù$ƒ˜³ßä³qãÆ˜˜˜³Þ09½bMá[k±€N² _:õp)¼|%q‹hO1Yµ™´hÞ 91,CC«–î‰ô9CéA9—t®¥{È ¹G SÓàÄÙÜ’$LÀëñÊ’Ì©52&uNÉÄ15 îîR`þ|ôK^TTT‰Õåq8.™ôÓÁ*Y&@p§Ÿtó­*¦Á&y=ÞqCâàËåŒô&þÀ©Ú™Ã»¡3¦¦Á-HH"XÄä(-TéPt*ê¡ZRhmÚÖãõgÀ¦Ü‘*Ÿú¡H½à±eº°¨ G3|§SWTEw)’¶[-¦´×U ›ÿ/rìN¯Vå—kz ïPAúsÑEC.º(ð§?þGÁ<]ºž…/ ¹ü!8|Ìf°Z¡ºZmŒºùþ¥IɽD#Lþå´ÛþM!ìïcª ß_AvÈš­¬±’ºäX‡õGwÏX6{qƒ‰!£ÑÈ0ŒËåJII€ÒÒÒ='¤y2<¶€ýuU$ezŒMOO€ÂÂB“ɤ mïÞ½;TÓõz½^¯»ÝÎq\tT´$I¾¾Ï¶`¦¯ÇÛ¾ˆ„f ’$.-©j¬MA!»]nBÀ`Ô#Ä»èÎ/*è›Þ—À¤ó¾1Q!¼Q‡ „0XËBzX"#ˆ ‡-9àñ €à”ï310^hòŽìˆ©S§ú;€Iv籿¼í̯öñ2쑎ÜþÎö¢‹3-& ˜4dî@¸dÉ«A: Ò &¤jiA`¹{÷îqãÆI’äÛh¼6qÈ/7üxkÔñ‰Ô‰ êvߣ…9T`Uk4UV¯Œ Ç2Dp# ´’ŒëìBX”úà)ëÅû7ÓU¿žŠ‰8Ué”ÏäÉ1z@ ËM7»N c|²¬Qk çX$`OFR°¸€euvN–Ú§Å,ÓÕ[ÅSo“wlÏèÔÖ´6 !kDë_]4Ž}}LsÕÝýÇ\Ì@¶!¤¶¶VÑ4‡n7-û²cÇŽ®¨®´ßjG˜aƒæ¿T¶~™ÖlàÓgF]` 6Tš NÎ!uÏhö9Èâ ÀåE5ðÍ×ʳ8sô̸„ä» ¢Q¯5eÎñkªä‚*(ˆó˜rN€ú>À+‡x~lBjlçõ:t¼lmboã®OÚ«ÝÓäß%鯨áp „DQ,//‡Ã18•IŠâ! ÈcæF€ÖˆœNgqq1Øív¯×k·Ûáì¯p‚Ä×év»Ôjµ2žÎqœOD*—6Ï7yáB<N§Ç8¸¼(·UQ«m5?ælÒaŽP«ÔûNrz\Ó†Nðz—×]ëªë›–šÜë\>;BÍ @ˆX âÃïÀƒ)b+ ¤¢i,[¼.=€ ¯òÝMhØs‹³ú>-eĪ'9£¸ãâ?\sÉÚ|’”e ´rµ÷¸@ ,"}®­}8š`z/Ùn_¢lËy/¶íîÓ«o o³¼ÁÄé9HÍ'Wö}Ø´âć—™|¸ä­‹3_êÿý±7¦tW/ëØ§Ëyéóm¹V&¶ß˜9w<þÄ­â;x n½†ÄÍJ›þï}]ûé¾IlÄ¢ï—Ýóøû[ \æ~3ï~å?K§Ç:=wAËT8t&³$„Åô8Ê·J’ ˜z±ÛìÓºCùøõ`)§ÖåW¹‰$¥GñãÆUÖ9I9…V½^ouˆ,Gf4}e<ª_ôžW­ %Y49…ÖÁiQ])öÅà ©Yñp¤1Ý©S[ÓÂ4„"Ò¯Þ8Š=ò]¶7nÀ˜)7>¼‚TˆŒŒÔjµÅÅžizVçs8vìXecÛ¶m!å[­$q^܈÷© 7.ZÝ9Ö¼pá‚fMÌ„*ñBÎÎÌ0pà ª"[r@@@9À)`xÍȉ 2”—–;vlÒÔ陃³Ââ3êKràv¸4³ ÏSð·íyl‚°½²RŲ·NéûöÒ”¥K­,ËþåÙ‰“wÿ•-¸¤Ñ×÷1F·ùDRœ,ËZ­–âr¹]¨¢Ž!„ H$õ•È˲¬^¯'„8N•J¥lw¢ü{"Ý· y'‹jJƲLˆÓáä8V¯7° Rœ.âÃb23úÙFšqµZ­ÞlJŽOºyÒ5 b@ÔâìÊ“×N™¯Guq×=µò«-yWMvúÿL»8œÝþᡚÖV«Ý>ï)"8§²´¾hþcÍ~§-;1Vv(þù¡9™Eó¢øº…”E¨{;·ë\Ò²åÜ5‘Éý2e9=ò±CûOîß0rÌDN¯5íªŸVä@%ÔGC¸ LóûoTó‚ÊwJŽî}Ñ®ÒCJŠƒÏ×£ƒÄ[EØŸSÃ2ƒ’Ví !ÿ,Žæ¯ü\Ï!`_Bu©)'MFe“œ‚¹¤n `Q1À!¬bÁ+Ãs6'qÝegg‡‡‡BêvŸü¯ûÃFdø²Þz¬X=ð…KOÞ÷“eb*¡-}óXÉ?O$Ü; úê” ¯¬ª¥{"÷ìÙ3vìXI’|þ{%Õ™álÓ·× }l·“ì¶07jܫǷÜXöÚ=KÞXŸm哲fÝùÂkž`ú®EœM³?3bÄ¥‰»–¯>X3ýÍõ3v?ùÚ·»‹ºÔñ×=óïd(³ñ5|tYÜk<qÚè¾Snùû[ÏÎIâäãϱaÂ_’v¾ùÝ¡ZUú¬G–¿ÿýàãc÷,È87½÷iÕ”gÇo¾þÒg gJ8,FÃ,h«$M0 #G'.[õü¿†=tŸA½"4¾íZ±úðõ_ì}s“ýúÂYw?3cÆ;ÓóÞøS« Œó3Æÿ²X,„5kÖøÛ:wî\%<`ã©=z´2aXVS²½†^dúëádê[Æì™ÂTZ2aìN¬ŒekXÜ·wSGÚÐ>‘‹=’L0†‡Ìjq¨ , ü”kŽˆ¶ÚDÙk»uV_ï“Ë`Ld¹3#(ûòªN- àœ3FÅùï—óù¶2IV¹dnï‰ê¹cC0q¹Ý²[BD™ÔÛÝ# „e‘I§iÒv„ à˜:Žàä`Sð¦MÒwÛæõÆ>Þ´ëd=¹áá¿æKi{òjÂu!›­Õj }óž¬]Ô¾A¶lÙ¢)-é¡VóÑáX3Ã0W^y¥O#„:q5·¡ÏG¿ðNfáOCCƒËåzòÉSfnß¾îêÄ$…^¯W„ #«T*eJÅN`Œ‚Q—ƒµ~jCÔEÃÆ8½raîÑꂃ’ÇqâÈŽäôL]xBßá3Žnþ,„©'m#µC‡áOñé¤Ók ×h< nÛ¶a˜gžyFùVʧçŠ>x8ûpë!T†aÂÃÃB;+*¾©®€ÙËiÖãvÀÈ\´²Â{ëÂrÙ«k e†)sf¢2oÿÞ½{C2Ÿp¹\.—³©'R«NßWufM#•YÃk4¾³hH|ÿÓŽŠàïöMgcóÏØØXÇ£V« V¯ÖjôÍŠ‘ð¼ÊëQtgç=/”σ¤}!äOZF¿(£J£QG‡óiÉšÂðÎ/'ùŲÕÁ"fF–Ye„5Ëê°¬G Û•'õ꣠æ`r€ÞËFïìÿMÄí©©„T¡­rRµ´ 3_g·ïÔˆT5§Öõµ¹×˜›^ÓVD~Ä}/Ü1"Ž¿ðß-ɽB"`˜±tÙÜ÷ågFñ«H9hÁÓ÷¼;ðÇ­¶;‡¨ÆÝÿ×ëG01kÑűŸ–Þýì}Íæù 'Ý¿äp¾t]ÔÙb—pý­£_ú׊ݾ2–¯ûáýoÅ9Ë37¼ð§v²n*áÙ£­KÒŒfüó?ÿâÏ-|!§TŒ2}ÑŸŸýË¢LC{ǪÆÞÿÂYQ À°›Žxö½ì2<££ lqrÌ™3Ç_ºÍ;W i§:;ì0õ¾iöõF.¶¹è[´~æÀÉj‚ø§€ µœèu êÝKÙ58Õr¨ À ÑÔÙÅF§däÙ½'j:÷,÷ñÞÇŒæðÊz'®™EÇEœ¥•€ˆA’B‘‚(Ÿ(iD:‹NÅÔWÛõšäJ뙉0tjNöº jMƒgÖÏ!û)×°5÷]–)ˆüz°¤Â¦mô€yf ‰NŽ9ã÷[Rm_»·ÒêæÃu¤_ ;mX2¨xÎbꪇ¿i©áúS§rãR_4âSkã¬ñžô ×þý“ݵ%TÓ|§J—^ºvò÷\«5† //¯ÃUˆóòòTª–ŽqnÞÞ†Ÿ™£øFgVM([Ȩжª_Â4aYacƒ× ©ZZØ'²ý^Ü*1Ð&lÿÿûøáùGfªg£LZø§%׳ºâ™˜ø@(+.sÿzo{¯o2]W£œZ®œèå¯wæUÚ™PM˜Û€! ™ÃÚ½'x•6¬yÄ«x9P“3É nñä#ïo|zô /ßûÉxÍ÷ÓmŸÝ×fÖgJØ^IÎöT÷šùà[3Å;?yâ–[fYÃŽ½3›mÇŠ0KSˆW«@’$tžaîܹ°fÍš¹sç*Ûmä=…1 à°;›#§ÝÁMº`îÜ]/Œ Ê•N‰7)3ûD™x[øó¾RåVBdQŒ6«¼˜@ƒ›=Zh½xxR¨ÏrkwJH]Ö 89Ö ‘úŠZ»oom£[’± X¤PGRŽV3¼¦Ñ-%X´Zƒá“MED¹6}ê­Òu\I­ÓhQ-¨šÑÎ…Õe¶óGe¯«®$ïèþ¾#f$¦´Ä÷­:}4  Î|SÓ"µ¡C‡.~:½¾ë—$Ã%péÒ¥,Ëž™†ý‡`ùrX°àôÙs¶+Iù†³ãï q˜¢]ñZñ"Há=ò°kM„™#¢JÊZh „x5âéÓ§ËÊÊ!Šc_ëÚB&Ä÷u6q¹\ZB±±1ÊD?„gÒh@öI=žW¹Ýž3ittbhº¨!Ê:¾£\ .¯×AÏHge}E,˘çsÒyÕšà‡³„4Šç^XNÃq.Aªõz¬NY”y–ã†Q$òßyË™XǰdˆfLMEíO?ýtÍ5×(ŸIµS½^¯Ì‘éøáN’b½Î˜É0ÌyŸ¨Õ¸Ü^¬cu½Tý»b~tf8{·—Õˇòo-mÆO®¸âIÀö¼Oï™5ë.õ‰Ï˜[Äi:ØØ„XÃ%;µöæV“á‚·ï¾wKÖÊ NM‹Ô³eÿžÖÿ³.Lº"/»õòGnxÿû[†}°=åúÇë¹mmeí_ÂN”„5¤Œ¿í¡…ÿùæ»]BßM!Z¨ýddÀ³mΜ9Ê+NGÑ1(rРزƒkȈ8 8dë373€]O&»¨†Wk*%  ÈîÆ¬.¬ÖÝô™LiÜ^Œ1H˜ÔØDƒE]X’óq ¯*¿ÊÓ(i"¼Ëé¨h”Wl, DVD!TZ}£M–ÙO½Ù•2¹½¸²Î Ã„` 2&„€2ÊŒ1©qº™X]ìö#0!»¨†á5uN11B+yuŸl*nÍCEÀkÌ:¾ì´ÃÑùZjË4I‚ƒ-Õe§"#¢6oÞ4 ÿ¤ôÁË.-¶"—WÓ9ÓbccµZí©S§†®„üÜpö¤I“”M›6…n@Ãæå[ßÝÛïUA•ØC­¦<ù>rôh[Þg1oÞ¼P5iI‹>È–‚zÿ9²J»ŒQýÒú ’drdÿnwCyÓnBŽl_Ýø$—¬8áòçWpÚ[ýн5©‡¶çÛŠŽ£¢£îDEEE!„ŽÕ[ɯ€+4W2…‡È!X",‰þ¯˜>z×0•æ³z. ·ÌKU–C iÖåtÐëuÊ’‰‡]P~*Ž}„8e‚%î;@£QcŒƒN¨yŠB€a¿žVâ±¹ëëêÈ 3§(Ã0<Ïcwa4;4‚ÎfXV£ÑpÃ!d`ˆÓÃ8EÑÝÈ8$ €!ƒ!--­2²´Á^.`·dòæm¨?~¼âlÐ>ñññÊûƒ:'¼·ƒ|pãS ÃpWP[§w®r[iZÌ@BHW*êÎ g§·8ˆ ´ Âìž`f@ØðÔ¿ö¹ï–ÙÃ’9 ð:bË8þ°ß5öß½çÞ/Ý8&N.;ºiå?v\þÒåF ^—óƒÁ ’ª÷}ôÄë;Äèöz¶:Ä0ýÖ…–‹—^¿³vØCŸæXh3ëS\üÞKòÆÞ³xúоq|ÍÁ/þñùɰÑÃz±!Z¸ý ÓÆÔ§OŸn{ð#o¼¹ß„WŸølâ?¯ˆ.üðñÿä}tQÿ]}=Q˜½Ç«È(ˆ2&crªÂ©<È1&˜€²x ÆÄ÷³ÎÍl9TÖ yTnµo8P!ªÌ‚ˆkíj«áèKxÝXe)ÄeËjl±cbÑ3²»‘B„°8B€Š€"õ£¶Ö&‡ñ¤¬Æ–eê8i?1'ˆ¸ªÎ‹P`Å#:Ý"†NëÔ€¦iuú¹#Rû$è;µý·íYC³œ(òŸ_ì•eÂ0tÊ´n9;—ˆóÈöŸ OŒtð/ë-·èÕ=Ôj“˜ÙBäùI½³: !„„6z«\m\·È¢9ð7õ%㯼B *ˆ§Oõ2Ýwz!–·–1a½{÷¶Ã±Óam;%€8˜“Û‹1b¬\ Mÿž !Dù`Å F¨G@˜;,…Oá9žÂ` 7€Áz¬n 7666/ô‚˜hñ^A¦ùDñÓz6kƒ‡xI’!ü+ ÅÁ‘øeH¯×ƒ¢Tçñ…ò<ÏqÏóHggìñ3äà‡³Y–å8cKXä@¯D"¢P´Û(VË^Y£Riûôé3~üøòú2®VÍ«+ì•:.99¹¾GËÈݫȄ4”Ùì°­ÑiV^Qb-ú­`ûôðñN¯ëç“?T8KÅd 4êp\û\=€…³VòA—=øÀ§wÌ‹ùGóÊñ_n½åà“_òç}ÅnSŸ ×¾ó¯Å1àì8›fŸ9œé}ûªÑ_ž¸wìÒS6MÒài×=öÜ #ÛïÎWßuÏ5}^³k‡]~çìѪý°ÑÕ¨[nì÷ú²“³ž\”Ê@›Y· ˜’0É×¶ïèËþµú¯sÍ,„f…jBÀ ÒÔ»>wÌñ'ôbÖИh5Ò‚€„gž¬Ê¸_(&ƒ,þ@¨MцŒtx°AËÏ^xŒÀÐôZËò|M£¬ÕÇöΚ–»í‹- !DY>4†SÏ2ÆšD•iN&„È5`ˆ9Jñn>\U Nu¼ÛÝä/Þ¹)åTi^žÛ÷VÓ$ؼv¯ÍÿŒRú !h¯EŒAѸÍÞ@aYÎVYï­q ‚ ÑhùÈqÇq6‡ Nz.A}vå•Wº\NÙÛ`Ö70F!2ŒÔz¸ˆx6*Qk {ñÕ?:ôQ½òXavjzŒW’KkʇN–KöŒSÏ’¼<\6oÞ ‘¼º¼¿ƒ,™ÎÜ9¾é1Šú!ï‡ÜêlAíÒP§šgxÙ´¿6ûxmnò¨4 tpƒêþµ³•Î[Bˆo£åqþ“Š˜úì/§Î¬ÙÐûá3nq@Ë8Oì;ãv†Â†Ýþïõ·ÿ»UéPĤ¥«s–ž x¬éÿýýçǾz²Ê÷K5óŠü–*°–îül3kö¬,Ú.‰i—>øö¥¾ÝrGPV€ùºïí×@òŒØ=´jJuë:Ï­¢ò½.qÝå/öH1Ú( Àîœr/áíncPó(V'y¼n@HY0cBR^ª^SX‡ÜñˆÄæå~;RvõÔÀü€¼õýaVÑè’Œcò€¨ÄèÀÇV×;¿ÜZ"c=Qº>ƒ(AÊ)®óðQ<ÂFÈê×VÌX‹aÝžb“Fã¹#…ÖKƈUàW»ÖìÊ.÷éÔYYQí(žovV*ŠggvÅüÉAÕRkKY–EÉ”¼léc555ÉÉɸùæ›#""‰,šõ*–e†Qº+â"Mûòjm28„`M#„$$$hµÚ¼¼¼‘#G6îÚå¿.¶ï«Õ­[·Nœ8QÙÞ´iÓ”)S”í7¶ßL­÷6lxè]s²„åS¬µ‚^W“bý5«ï’€‡CZMyJ=z4'''`eüºYÛùt4ùVqú5wæÁÜB8ú+ËNdÑV¿ÔB>0È˪§ XŒ>Ã.Ö„ÅÃx]’ˆ1‚ „È2ˆ^Y­ª±£ÔÌñy;¿ÇR›kgw½`!³Ù é°5r DÈ— Æ"»î˜N÷‰þáð¤§ãaÃb×­yÎ~ÌEø^Ï:´š‚1&Í ½*Wtóž3íìt:¤FìñúB}ý…ÁÔ@Óù D’$ß9‰›]$+ŠË¬µ^Q0™L…E…Š*µÖY N—""“~À!-ݱjLLL|â‰'B¾åÿÍâ›||ôã]eÛ–˜ãt6©‘ÁDeÖýVµG.KF›gµï0yòd«ÕJ™¿‹2ùá^¦oÌY%B(:Ì›‘Egdõ^ ÇÙížR[]ŒÎ€ƒ¸¾ºíì`æØ¤œ/:×Ò=t›îÞÂxéT¹ÝÁZ$YÂÌÌÈöE“R[\`!†a>ß”oPÜ€CâŽZç RÏò/=îÂÚ'1«<¥è÷Žhñ$S²`˸©×!”)~Žœª•Á#`#ëÕ/JÅæ·íYL÷õ«]VKHwèTåèA-äè¤c§ëªFÞAiQmeeÖúÏÑ¢ºKƒ®¥`Œ= J/¿ô⯿þj4óóóB‹åÈ‘#ŠGŽZ­V«ÕF«ÕjµÚ#’]»«žC2­þµµÝVü ‰¹u…ûäö†O®vU|vòMCûÅöD«ÆdÀ€ô$òþ Á÷ëø²ðÎ0–Ýõ,þ °*]ÆEã½ã¨)üâÍÇEW£ÿ^E"\tñ­ÉY—DöžÐßZ|¨ç #I’â‡qdZ¸>’·Y,Ú D¶äê« !^­Öf0 ùóÀj±@iiMM !$øe5jMUu%ÆDE!·Û­V©}§Bx^å¨lðnY–}òQé/t¹]fsÇü ƒ,‰ÊÉ)Š‚Óé:xôÐŽ=»jK«4ˆ{åWg2˜ì{Ee¹`oì0ÙvˆŠ09!¤V« JJÚ[ë2,,LHŽž>¦‹ÐFê  ñjXðzQa]…ލ‚“Þ+óQz4Ã=*H™ÑkFQzQaUá–ý›“†©`äÞSúÍ—ef"è`8;¤jiAàgÉÞ½{ÇŽ+Š¢o£ÓPºÿayød%£Ö;2Ç Ä $»2S´ö0M_›Pá a†¦êk²ÝZ^GD™ ;x²bLf‹DB¶*:Qéu£,¼kt¿x›Íæ/|BeY§Ó%Ë2ÇK²$“ &C!„l;\âu3&Î-y<éñ v»]–å¶²HO0òbQ’^üÛ÷¨þ Ádq ·LÑ©Æ58ÅÐ~£3Â<êRÏþecvÆG™×cíšÕ|ðÑh$„$$$Ì™3‡a˜úúzŽãT*•×ëÕh4J×B(6\«&î$½'HÓ!Ê혲k×.hÖAþëboÛ¶ÍgãæÍ›}´7BÎs6,^öÚ0czdEBéã¢#Ó~шîm5Ÿ9-ð…·Pu¾B˜à5Þ9Èâƒ%±_RÚ`A”sì²— 'o÷šô‹¦¸±:}ø¬vDäo¿ývûí··Ü·oB¨¢¢¢EøŽ;Ω,BÎØDÃp¨°WèÔ:“ÁÇÈ1Ü9À8ŽšÓèÑ„ÆÒRƒÁµµµAZÙrV‡Ãn³Û}§$É Ã8޲¢R·×ãt»"µÇrsX–ã9ÎétæžÈ½òò^çDˆ’¨\d1füèqÇN`Y–çyžçû¡Ã‡êê¬Õµ5ù§Ûoé ‚B111 ,è0)FÅT–W–Y˲ ³µiµYêîM¿61<~bÔ\¹£álåÞ"ŠbZ\QéîU^ X–EñÚ!×jµÚû>»/»q›™W_5è’‘ú±uu‡é5o}tæël ¥‡Ø™]îô"3!ÓÕ;¾—(в,K’¤øô(.Ìǥś˜5±j/@É"Ùq¤¼CYeµ¯þ­@§3ðÈ£bäkgõ—$I–eY–I³ï¹O(B8‰·™Ç²(q,³l9^QNˆµ˜\Â3†õ‡k‰L0nò '˜ 1À FQ%©1’Œ†1jx¯ iÔ|ûY`Œwd—{=¬‰sK^ÏÀÞýÚ·b@jÄÏû+“ôZQÀ;³]£$vhEkôz=˲·ß~ûM7Ý$Š’ ¢ x<Ç£HF%;žç•AmDaÞ˜—WfÆlÐtX{„¤¤$­V›››ëÂÞ±c‡ÿºØ¾IÅ7oÞ¬-Α$™åϬŽãŸZXXXû“æ¶Æ¿2•¤DQ,))QÎɽ{÷B$Iª®®>yò$‚°sçNBˆòæ³}ûv%BEEEnn.4ɶn¾`.I%)ÅaQ­Ö¨TêysæÍ¿|¾oÛëõnÛ¾Õn³—U”EGENš0¥ãûdCƒ(J“oÝmµZÅÙSc”þ‘`ŽŽŽ¾úê«}?Oœ8Ñ·o_¨­­eFyIPg¨§gôîƇŠÓûòtŽãÚŸ„²ÕÒ‚Ð\£º´3¥›èÄc˜aŒ±Ò|ÝÛˆ],L :µAÂeûÌ8.2´e͆à 7ªû&êÜQQ‹MŸz7kÇæßÑkùpcP5j]oEll¬Íf ¸Ë§K '†H!ÅÅÅʆ²»’£ÿºØ[¶lñã×_õÉ¢`: Û1 Ë™'ÝnžÔṟ[E±´´T§Ó™Ía€(Sç*ÝC!ßô)¾|Ç2 ãv».·¡w{+3õtí×Çq)))AÕ…ƒáµ×^«««‹Å²dI›3ušŒŒŒ³h½E{¾&‹ú›¥”š IDATâõÅîò]/]|}€Q£F…šBû´ß -ð ^·iÎŽåÈ@€`‚í[uuUUu¥Íæè›‘1jäèS#„ðº0—*E‹ åú|©î(§#nºO6½ß@þ]š,¨õvU:«6ȲÜV÷kÓ‚9 zY–ï™t_X¬QËç¥_Ld@ ‘‘‘-%¯<;áBˆÇã1;~Òu½ZÐèÅO÷¼èõkôœ·&??c×ÏA” z¤sÕ¢ˆÈÀ>‘í@{~¿øZùBhÄN îP(”ÿI§®½'œƒ,(>ô4HWª¥?ü¦P( …B¡ü¯BE$…B¡P( %d¨ˆ¤P( …B¡„LÈ>‘ …B¡P(J“ˆTV£P( …B¡P:¢7øDäĉÏkQ( …B¡P(¿>û´|"²ËUQ( …ò»£Û—~¡Pþ°œYöpæÌ™ç± …B¡ô4ëׯ?ßE Pþw _gS( …B¡PB†ŠH …B¡P(JÈpG¡P( …B¡üžYñîòüÂÂÖái©©7ÝvgçbRI¡P(J3ÄúÉ5™ÚÈMûç¾/nˆUF뤣/LšúR®iñgÇÿ=Cuž H¡t‚ï.OLHh!6¬[»âÝå¾]ÁÇ:œM¡P(ÊÙ0ñý“~üY¾¬üôìøð ¡o?-:¿¥¢P:O~aáôÙs”í ëÖ.[ú˜ò·aÝÚé³çø÷;*1wlÙ¸léc¾ÀeKÛ±ec‹˜@E¤±rÿO›óçsáOñoëvžöœÇP( ™¦Ýtyãªx€Ôÿôáq‹¯ÔÜÙøÙ¢Øððp‹%*¾ï˜Ï®/“šv†}ï=0odF|\jÖ¥KVsó^›’pÙÿ¸kÆà”ØøÞ[÷Ò “$ÅÆ&œzË?¶VËÍGÖí|ý–©SbãӇϺóß;kñ¹7šò‡aËöíÏýíïÊß–íÛÆY÷ó/ èHå_%¤ÿ+"¼6Þ8û½šNŠ@b/8VÞ'Õp>_45‰q Çóêè̓B¡PÎ/êá7,4~ûáfàòï>Ú1ôÆ«SØæ}æ…«*ëëë묥G¿}(vÝ}ÿ÷I\´âÖ/ÿÂOÇ ¿lðÁ5;¼ îXshä‹N”lñÅà +í}ïJûòn{¿@rÞ~äÕò‹ßÝ]Xxà›ç&Uü¼µ³3 ¥=”>HPú Û‰ùÜßþ®løú#}!þœ+Ijß¿DƒüÐ\ò~mW.9ï¥ÑƹÖ7¥Áô^²Ý¾î֨Ή@\WPàŠëË`€i_|0€€Tõ·i«23?ÍÌütÄÃ%ÂÙKƒ~#RÁÏGºnÍøaŸžºîþ×KKEqÇž‰ƒ>UŽUþ.º>·ÊØÈ”DRœ_%…B¡PÎ'lŸE×õÝøáÚŠÜÏ>>5ã¦9‘­Ÿ–H1àŠÇn°ï—v9ï«;ÓÿôêƒÓz›5¦äÑ7½òè pY·?yãÐh.ïÛ/޼÷¯7gEj41£îþëí©û>_](RiÔœZkЩզä×þí©+cèÐ9¥¦Ò‡¿j ¨ áÜöD²½Ø&&j”ø±#·½6'çÚœœksöO»6»hvR|Վ̱Ѩ²¬V¼›B¡P(ç&öŠÇ~ç‘çVºæß0Qï·ÇûùcWi±D xh«»¾¶ƒ\Y^¥NM p{g¢ã¢Y\]U£NîÓMJM‚šª lÆ]ÿý׸O]5}Úì«ïùëg‡êiG$åàïõØþÞ¶b¶¡fäãÏ7LyàùëF$™4º¨ÌËžù¥²›GYåãÏ7Lýó 7Œé¦Ñ_õ¹  á£Ë´!†áõ±ç<±¶ÄçhR¿ûÍ;¦õ‹Ñë,i“îúà¨ÃóÍuCÛíX{“…AH=þµé¬ál©lý³ó‡&š4sòˆ/üZ)ŸÉñÁ—o×+L£ ë=õÁÕ¥2€·¾Þ¥3µ©!Ûç'€ÉZsòƒÏ˜>PoTsÑCÒçfòsm-ºíÛórÄ]=[ߦtgLá&±¾î¼ºfR( ™gÜ4׺nSäâÅY~_dã¢Kú-}Ù÷û *jë¬Ù/ç0Æll|¬·0¿<à£é-)®nŠ —–@TLS§&}Î#o~ýó¯¿|ùÂä’¿_µä[*#)=Ò%pWëQì€:²žHaëgÛ†ükOU}ášÛðÛ oz·¸Åµá…›#¡V<,;\ù…­ßìóúîJ—ó«:€°V» !Xvÿ²4nõ-w¼_‚,_xésE“ÿõ[™µpã߆îûf+¹ò“e˜³¢âݾ¤·¿òñ^sÍ{pÛwù õ¹«Úߘí[§š:÷„í«Oø÷ÞÊÆ² w³ÞýÌ/nâv¹A­Qw¦c¬˜sVlÍ)ø~;~r$V¸{ý—eüô´)áí¤Ç«5ŒÛí¡w …B9ßhÆýýPmåÏJ÷ïb ‚Ûƒy^oàåÚƒ+Ÿ]¾Gé.`3æß0úä¾ök¡Íc/ÙýáC/m8ëCI®ïåWeùϲ[½žê½o-{§`ØÕs{³ l~áÖg¿Ø]Pç‘0axNñÚIùÃ0iüxßwÙ“Æo'æì‹g@³‚TþUBZÐÎ<‘ÜÀ»þþç±qÀèû_ºg刕ߗÜvŠŸZSÃVø øÂËEÿœ ú' ãµ_mË~Ä}/Ü1"¦e RGZðô=ïüq«íŽÅÆãŸ¾½½ïCG–ÎLcÂÆßñŸñÐöˆ¯”óÅ'‡†,ɹkx0îWî]5âã¯óï~4 TcïáÆ¬(`ØÍ G<û^vž•vöñ ÀÆæíÙT 0YùA„ïïýæ‰-Ÿ>Ô›kÏ’¶Å…_ïÓÎù V×~.T?R(Ê… Ûç¦ç–ì}ðæ¡ÿqhâ‡\zóôá?&õæw?—žzúá鯖“¸a—?øÒ|õYGrýî]ñ¾ûÑg ~´E˜~ÛŠ7nKcTc®¿îÈóÏ\óÄÁ·©÷˜«þõ÷«£//Êÿi©©?|ÿÍ¥ó®ôMôãcúµi©©­cŽ4ͨèÈ1¡]É&§&s¾Í$T]Q!¥ N”l¯¶åýc|S÷œ|üù癘xéÊùøñ‡^þzg^¥M Õ„¹ t¥•ê´>‰Á挫*ªÕ½zÇ5û¤¤¥@uE†4@a–0eâÕ*$‰Òè´Påñàñز,ʤš÷æÂyX®;UþΓ»où÷ÕSñƦ$ñ±o òúô~>³}3D¯kz÷ P(”óЏî˲ëZ«g¾UpJÙ´Œ{pÕ®ÏìzÀw¨eÄoüpÇþÇe,ÙTêûÁ'Ìxü“·ÎT8åþ7§ÜßÕ²S(mqÓmw®xwyÀ!éëÐÚ‘òé Â9KŠJHô”è³nއu­äà/»á¹¡íÛÓ̹„ Þ¾ûÞ-Y+7|85-RÏ–ý{ZÿÏ0`ãã¼ëN–bHóÏ!„è·cbb£¼› +›¯\œ_ Ñ#£ÛošðpmvƒMcÈ øüp©¿À°–Œ¤›/Ïû⣪9~ˆ’¤»ê«µî¡w÷JißñÛl\xÆyiˆB¡P(Êÿ¡ébÌv¤•”½üñ7vUy<Õ{Þ|ìÍ‚ñ‹.K:;¶>°!­þÄ äY¯ËyÁ`PIÕû>xâõŠOÛÑmãr_¹ûùŸó=¶âßÞ¹÷Ùun`Â#-¨0;ÇÖʉ™põµƒ¾öÐ;j½žªÿ|ø?§F.¾2½õ†ÂâUµ•ÖP?Švl˜ ž­ÙÏ­,Ï-Iª>VüöWuÆ‹¢R›3­ßtê1þꙺöû!Ice5‰ìä'> …B¡P(çŠvDjâ5c÷ýiX”9å’7å›?ýàö^=;ÛïÎW[{M³1~ÌÿmÏœ=ºé{8&í®UkŸHúåÞQq–ÔiK ¿b¼PÄe>ÿݼžQ­À_Jr™K¾øìFé­9½Œ¦ô«?ÕÝóå§÷öiW—1–Þ½uÅUmy2ï×w~–™ùÙ=ß Î·ee~šuëÉj»¢z€fd¯‰öÂçnY3zØ×—?p¼räðåKMJ"vþôe…~fÚDSû5 [‹KIJZ,]МB¡P(Ê…½øé¾“-J*œ9sæ™`ùøó£Fîùsùw‹ç¯lç±r߯\óøI}BJ~@ð|wÁS¼cSY┱ɚîJ‘B¡P(þ¬_¿~Ô¨Qç»Êïž¾ª>±yíôj‚>+6”$€ŸÞìÆ"hRÆÎNéÆô( …B¡Pz *"; pä|—B¡P( å<цˆdû?±Ï~nKB¡P( …BùÝp.×ΦP( …B¡ü@E$…B¡P( %d¨ˆ¤P( …B¡„ ‘ …B¡P(”¡"’B¡P( …2TDR( …B¡PB†ÎI¡P(J`vïÞ}¾‹@¡œ7:\Þ‰ŠH …B¡PÚä¬5)”? ëׯï0ΦP( …B¡„ ‘ …B¡P(”¡"’B¡P( …2TDR( …B¡PB†ŠH …B¡P(JÈPI¡P(JÐx`ù"ˆÒ‚* ŽÊ=šQöòEƒ£´¬*ë͈ٞBé,TDR( …,Ö¯á‰cð}%aÛsùë×O>qlö÷•¢pðÉî̼6Þ8û½Ò}Iú%¯‡ÙïA$~¡Ñ£5ù;ŠH …Bùÿöî;>Šj àøMÛH„ÒKèUj°  ¡†P¥÷¦ˆñ=ìXÐ'JQ"5 ‚¤H ½— ©³;ï6¤1+ÙÌlòûþág™9{’uOÎ{Pëô!áÔ@4ô¶÷y̧sjð|Cï'þš6ŸœØ´PÇ…1iµŽ¡â˜±›†øIOzܬĘbÓa—ƒgÉ,&6fU¶*ÑóÚ¥tŒíæE?IÅ——™t‘¨•/\yp%!>ÑÕèšgÊלʿ¹=YI“øËàb¹â³ŠHTY,^˜.®Ìn’¨õ¡Í⋆¢å[¢3ác]gŠO»ŠÒ……Ñ[4zYl‰zð²» h*¼Â¯–ø:Bì˜,•FOñô q"9Ãyî, .üÂô Wf½è&¹Ôúp¿lŽü¢¡WË·¾ì߬¼Ñ³ÛÏ×»K’d0¸x–¨Õá½ —ä´W*1»g oUÍßÓ£H¥çGÎ?—¸¦oƒq»ã6 ,b$·g&Ÿ•„•¯˜>íÚ ta£Ñ»l£—¿ÜeBˆÔÓ½ýõàæå}ŒFŸŠ-ß»lB(·¶ýr£²>îž~Ïô›´ý¦%Cà釳U¾k³ø¢¡xáMÑ·‘(l~5Å'¿ KZlYåóÑœ7{NŒÛ-6 I¸=#Îf èQÓ/Äm2™_Xo{¨æþ6XýÃDÙÑ¢¯,ÎήB³Bü¹FL[%f×Ó[ˆi%DèQS3†ˆ®½Åß¿‰Ê.gܱQÌ]%fW›ÇˆnmEãAbÉQ:ZŒh%þ»B¬í›~اؽ²£+÷•<;³µ«Â)DòŸköM[µ{öÓþFƒ/'ôB(IÑGÖ¼Ûkððòû6/c°œý¡gûÏ”7D¬~ÎïξŸ¿^ógÏ—ìÿß¹§·¿r1l€¯$„°œµžÇ9µGK|zfpMyߌ!Ý»ö.ô÷o¯UBˆäaû­ø{F Ñïz¶yå“_œÓúä´Ñ®„l8¶­‘çýk¿[~ý™ž%sìí©|×.ÿ[#æÔg‰®=EÉýbxi1µ‡ø1s>Eºœ?-ŒŠ˜Ø\lE„ P9†þh…Gÿ0 2ÙÆ]U¬ú—VD>öÛ ³F¯‰á„rH,ùGŒ9*ú !ě߈Ÿ‰ÕgÄÒvkþºè[G„hÓK”X&^ùTTõÂ[ô|^Œ9(ä¾Âå1çqiôÚ—Ãù?2ÇFr+Vûåñ¯Î­õËŸ÷†÷)¹löŽªc½TÉ „Ï3ÿF¤UºY’®XòOÝ1GG6ô3ÑüÍoFýÔhñê3¯ü·’Â5ðõ/Ô÷3ñô ž>ýñÈË‹®F7g7BžF7ïòÍNnöøä¨|×µFŠ·…³M_¯.K׉-²Ég%kÎr|wB!Ìç§>ë:55W…z¯Ú^3Ë4æy&ÛTÎ'ãÀùäm:·wï^WWW[Ð?ÿRÂIËuqÃMT,™¶Ñ©œ('ĵëÖݼ}|ãºWwáó åâ*̲PÁà_êaétñmë”ö1: N¥Gm‰¿}óŽE˜¯]Žr«T¥´ÚovËõk7ÜÊW,ixs¥râÆµë©CÂ’OŸÔ'$7W!˲âTýÅsž?öŸ¶M?Ûnà‹öÝ~ì4•ïºl…=-'Q¡Œ¸qMÈ9æ35ç*¤»&Òroi'×GÓ(´Ê¤ÊÃêE$ÿÅŽÂà/ü’Ĺ×Aš/ˆ B”,ž»'I°µœýʨm~?y+A¶˜/Nkáb±X„p*YºdÒ™S—3\(I’P”, ƒ ¿¤ ç¢,b>sA/Y<‡ÂÀ= óG L;ÿþë—©­/Œo3rÅãËHU.ži%¥Yœ¿$Š—Ϊó)I"«7—븷v™Ì'òÿ;ô 99999ÙÖ…s Ñ»Ž˜°X,©SŸBìØ±Ã¦"r÷îÝAAAv˜ÅMÄž·Dh­#Á£L&S–7WÝ8±õ'çìžÀ=,"ӔТ \Áä&k™åµ¢ÈK’$=ü_rF®Ô#Wê‘+õÈ:‘@#Nâ½½ZÇ€‹N¤¾ð—½zäJ=r¥¹ROϹ S¥C‡Zägt"ùJXXXjI Ø•õ*c¥àH>ö~pݧ| )×èå áQf­Ò­ämoVòpssss3효u8º–pþ·©#ÛÔ)åSȧTÍÖ#fî¹eÑ:$ݲÄF®þ´o‹š¥|½‹WlÒýã°sIZ‡¤{)'¿*îîYï£})Z‡¢Gé¿ÕÖ­[–úxýúõëׯÏÓ/U  )€ÃÙ)‡¿é5x]Íi¿Ÿ ö;¿äÕn½úîÚ0²‚>&íeþ¢¦œŸ|*n²Húehù)BW¡é-WÉÛ~ü1ªÉØ%ï?]ÁxÉôÙÐ]^/v`Q×¢¹³†Ú“ÒW®”˜Í 1výzÃw5‹%ZøFï}½vl}»º>ÖåÕW®Ò¤œ˜1z¶¡a5竊ž>‡:ÌUú 2UjÙ¾}{"ò³‚7œ²wñ¢“MÞ^Ý£ª·$êþlä¢& ~>>l\ }|ƒÁA¹¾ôɲ—Ò{wþ﹋&ýuBîè¢iTú$ùvþbNÚcŸÆC½ðyÿƒ'S„NŠHJ‰œ1z^éñóêÍhý£Ö±è]§N‚ƒƒ.™yH¹¨Àu"•è#G¯—ª_·hê6”­[§ÐÿKPª{jšºüË^‘ÞBÓg®„B¹µkÇ1·Z½+9é%@½æÊ’xãàÒ%Û/Žo䢗u—«äcßžWúãßÚ[=Cèës¨»\È[Ö"R–e ãÈ3æ»wc7sÚÛ5==ÍîĦÈnš< ³Ù¬Ã„l¶Åb–eY7½"ÝæJˆ„ÈÙƒÇl­ýѦ.E̺ˆO—¹Rî,{¹ÊÈ_“„äU}Àô•ý,²¬ƒV‘þr•txò¨ù¥>0µóµ\±(JêçPë „zÌ€¼Và:‘’‡—§¸{ߢ(!„°Ü½oð*䮇÷ŸåEâz‘®BÓk®âÎÔmRʨKWvÖIxúÌ•w¯Ÿoô²$ÞŒÜóчc+Õ®æ¦qXÈ”{{§öì2U³æ§7ê{i_9ƒÑ¯fÇÑ}êÜØ¾ý$ ­,$ÝwøÜêA>ÞÞÞ¾5ÞÙ‘p|ÒóÅë¸'EëÀtNÊ ÷<r]ëD ç½ú´™öɪfÿëàwá§ñ³O7~³k€Ao_·Ù+ÖV¤Ö¡< »\)·#&ô¸ªÔøÐ™}ªu˜s•°yâçêl×8 „s̱Mß,ØïÝhde]\@ª·\yv_Õ=í±åÊìà†óšlÚña=g=üÿZW¹JHHعsçÃ`rx ¼"R8×|cÁ¬¸1Ÿ´ x5¾p•VCæÿ0¨¼¤‹wŸ„.BI£D/î^ëõð$!„}ýW ·ç'ÿ³vP í»lzË•³iê´Ý7“ĨFkG !„ ¿¼ìä¬6:èqë-WÂøL·N<âÐåx’Õšvüzå¸6ÞºˆPw¹JçAhz©Ût•+__ßÀÀÀ‡“²Æ–yvöŽ;4ŒÈg Þ?B—²íǯj?^ë0€T¬ßª¨~ZGá$ßÞ+¢zk…£p¯4vnÐX­Ãp0†§†­¿:Lë(ƒ’¾âN÷˜m wÀN¤~éjxHçÈ•zäJ=r¥¹ÀŸe°Há/{õÈ•zäJ=r¥¹`-"“““5ŒB''§””~j+õÈ•zäJ=rÀZD2gM'¢¢¢´Áa+õÈ•zäJ=äªdÉ’Z‡DÖ"2$$ÄNç íÖ­›žÏ˜L¦   ­£p äJ=r¥¹RO?¹ŠˆˆÐ:  bb lF ›1;6£ ›QDÀf gÀft"`3:‘°HØŒ"6³‘ÊCÉçÃÞïT¯tï¢å¿üEx”Yy2¾=ØCæNdÊáI½‡„÷ûÙk'C‡Šy½Í>gÑ 2èV¦Ndòß‹lòÆ'Ý }ë útD•¿,?.Ó‰ÀC;‘Ê­£G¯—ª[·˜$„©\½:…Î>–˜÷‘@·¬KüȲ,„0ß½«xx¸™eY!„Ùèéi¾p'6Ev“4 z“qHÉÃËSܽoQƒBXîÇÞ7xrgI<”q8[*Z£¦ÿÕC‡¢SKFóчc+Õ®æ–÷‘@·2M¬qnЫOÀžiŸ¬:q7áö¡…ãgŸnܯk€‰5‡ eÅ``]d —9gÚâRëÍ…?Äù¤mÀ«ñ…«´²à‡Áøèô*::ú÷ßwrrÊaš@®Ë\D áR¶ý'«Ú’ç±`;//¯ *¸»»ç°Åb±X,ÇŽ˳¨€|/ãÄ౨€ÍèDÀft"`3ŠHØŒálØÌZDšÍf 〱‘²,kˆµˆŒˆˆ°ßiL&“ýžÏ+õÈ•zäJ=r¥žNråìœÕ3Ø™õƒb§s„††ÙéàùŒÉd"W*‘+õÈ•zäJ=ýä*<<\뀂ˆÙÙ°E$lf-"»Ñðí¡ Hùë?Î’$¹6ü"RÃe”볃Œ’$9üK²va`t"õ-åüºqíj÷4z•ª×õ³ß£,Z¤cR±ÁÌ­6 IDAT›’’÷¾WÝI‘²utYgI’$ÉP¨÷ڤǾ8ñüæÉÃZW÷ópóð h1ôûÝ·sþã'›ý%ÿá¦Ääˆ1rå-Ù ¿W€'F©g)‡¾êÞo­ÿ^¹°q¤˜Ó½ï̳|Ý«âÒbÚEYQ×÷÷‘Tìž¼uΜ¨fãV¸vûâ– 5÷ ~uete¤­ûë ¿W€\Àp¶Ž¥ìY0ÿx³·¿èUÍÛ½hýa_Ž Øùã2-kó/×6VNܺvioÏbµ»½?¼Iìî]ÇsX8ÕÖýu…ß+@n ©_JôáÃQOÕ¯ï—ÚJs*ß ^áS&jV¾§ÜÚùçQcúUT.ÁþŽ€ß+@nÈ܉tynò©¸„„;«ûx;Pw%r©ûß•‹B¢>}¶¤w™63”¡+¬DïXåæm’dì¸(&ö§.FI2¶žuUB¾|þš_³æ•-™”˜õ¿ÙyãìŠÁÕÜ¥ÔÕ%}ú¯O¶ïïø½ä‚l'Ö(6ÒIÔ’Kù¯6…|¥uŽGò²)qH¦Íò¡ßÿ®:vEÛ ‹GJEnL˜ÅalÝßQð{xbô_(ÑóÚº=涇ξÜûÛ芪ímÝ_¹>;ÈèÚ|òYV]äwÖN¤,?rÙ—l¶Åb–e™k¥ .M'ž”'jEêm‡ky ûál%m#ÃÙÈ€álØ,‡NäÃVd‡½Ë܉T¢wó÷ññï¹üNܪ¾þ>>þæEQHÀÊ9Ó©X¿U×ûi E¶ÃÙ@v˜X›Ñ‰€ÍèDÀf‘°ÃÙ°™µˆ4›ÍÆb-"eYÖ08ka¿Ó˜L&û<Ÿ!Wê‘+õÈ•zäJ=äÊÙ9ó3Øõƒb§s„††ÙéàùŒÉd"W*‘+õÈ•zäJ=ýä*<<\뀂ˆÙÙ°E$lf-"»Ñðí¡ Hùë?Î’$¹6ü"RÃe”볃Œ’$9üK²va`t"õ,eëè²Î’$I’¡PïµIZ‡£sR±Á›’’÷¾WÝI‘x~óäa­«ûy¸yø´úýîÛ9ÿ1“KûKþÃM‰Éc*:åÚÛ@Ÿ("õ̥Ŵ‹²¢$®ïï#i‹cIÞ:gNT³q+\»}qË„šûÇ¿º2:‡²ÐÞûïpÇäG®m&¬l“ö¸v·÷‡ÿ0ÿ«]Çåϸh´?ùHäwÊ­5Ö©_EåBröÞ€|N$ò·„£3úÞRo¶^þª. °÷þät"‘Ý?4½G› )c6¬YUÍH³½÷ ÿ`ù”rw÷Ä®¿÷xÿ×ÐQu<µß€ü%ó:‘ çûö•¶uŸò-ìûT­GÎÜsÛÂ:‘p0Ê­m¶ ž]tÂo+­ðÌ'¾jâQã½½²ö  È4œüç¼yQMÆ.Ù}îê©_?©qà¹E¨ åæm’dì¸(&ö§.FI2¶žu•Æã)1ë'~³óÆÙƒ«¹K© múô_Ÿ$„/Ÿ¿æ×¬ye';í@A‘ibˋ㗾˜¶©fȆÌ]4é¯ã)]¹âK’ßM‰C´ŽÂIEnL˜Åò¡ßÿ®:vEÛ ënæÚþ9N¬Qnÿµã˜[­º•¹rú§DÏkëö˜Û:7úrïo£+ªžOfëþÊõÙAF׿“ÏjxëEò„µ<”å —}%DÎý×'i@Vk|B&ÌNÛäÝhð >ïðD²RͨApœTdàÆÄZG…&ÖXoX²d»ñÅv]ó. 蟵)Ëòƒ‡Êe/Wùk’¼ª˜¾²£ŸE–-š„=Ê<±FQáÝëçwc®ŸŽ˜Ùòð›íÇn¾cab Êa8Û`ô«ÙqtŸ:7¶o?)g¿ œLÈxÓWcfm>tñNbrܵV}³`¿w£&•èDà¡L‹»?ÛýŃÞqèr¼{ÉjM;~³êݶ>ÜkV™ïXã^¡Í;sÛ¼£A,p™×‰#‡‰5@ÖèDÀft"`3ŠHØŒálØÌZDšÍf 〱‘²Ì½  ŠµˆŒˆˆ°ßiL&“ýžÏ+õÈ•zäJ=r¥žNråìœùÆìÎúÁ ±Ó9BCCƒ‚‚ìtð|Æd2‘+•È•zäJ=r¥ž~r®u@AÄìlØŒ"6c‰ØŒN¤ž)q‘«>îùL€Ÿ§»O™?Xw.Yë„ ˆÔ5%æ×ùÜ{LÙ|êVô±•ƒÄÂÞ=§c5O  gë˜T¤ÛÄi}šÚj|ÏާˆNZ èD:Kâõ} n3¶éØÔUëXèDêž³0¸äÀ IB*TsèÜ ÝJQö $Ñ9ÉwÀúDÅœpýàü—Žl9zÓj} =ŠH‡`0¯ÝeìÀúQüqœ[œíY‹H%ƒ”“ß·ñ÷ðªÿÑþ”ŒOÙH÷çØâùìÕi›þ¹p')%îêþåæüíÓ¬yUn ´—]'2åÄÌ×çV£bÑG‹Þíî.~µUeÏâµ»NºüÂôMÓƒ}%­ÃÈfbMJä÷£ç•þøÇz3_üQÐMÔŒG¥,ëðÖad”U'2ùØ´×ç—þxB{?®˜@¬HYN±‘txò¨ù¥>0µóµ\±(Šb1?xBdÎN9:íÍÅ¥?0û Å"åÁ„í"€îd°N:ºïð¹Õƒ|¼½½}k¼³#áø¤ç‹×ÿpOŠ&Ñ@—2v"=»/êž¶ÅrevpÃyM6íø°ž37´ÀCL€ÍrZÒðÔð ׆çY(pY¯ ä€álØŒN$lF'6£ˆ€Í΀ͬE¤ÙlÖ08k)˲†qÀX‹ÈˆˆûÆd2Ùïàù ¹R\©G®Ô#Wêé$WÎÎ9Ý8€X?x!!!v:GhhhPPžÏ˜L&r¥¹R\©G®ÔÓO®ÂÃõ(ˆ˜ ›QDÀf,ñ›Ñ‰tòÉi­|œ\j¾¿ô@("õ/åø´WfWgö!Ð k©Ø†o/H9öÝÈ9e>ÿ_? ~ &ú–|dÊÈ9e>Ÿ\œŸÐ&ÖèYÒÁoFÌ-óùöÎÅ —µŽ ®³Ó¯”C“FÎ+ûÙŽ®þ’°h @z ’êWâá=ÿœYÞ³¤A’$§²£·Æû¢¡±Ê;»R´ óÄš¤ðÑå=Œn5í¼™‰5Z(Ô'4áAͧµð¨ñÞÞÄS_7sÑ:0€,‡³ O½b::ù9Šd)óÄEQ´%µ ™ʼöÇý×´Ž M–×DZ®/íYÆ×§XÙºm^¹û6Å$aíDÊrê-õ ÏM>=YKâÍc¿NyãõÎý Û× )Ç <ý:‘’[±š>þl÷†Îk7_8´U$ À1™LZ‡èÔãÖ‰”ò$ ô§I“&Z‡èW¦%~MŸùfÃ?ï$&DG®ÿôÃ¥1ƒ[úK,ñÈOöîÝëêêªuHóðÇaÓh+Ó µÛsýº[Ö¾\¯\Ù:ÁŸ¬6îçyƒ+0” È_µV6=€¶2g˽37è b ¯$''k¬þ8lzme?±€ükïÞ½9—#»wïγx½yì5Á›X@~¤rH4((ÈÞ‘:¤f]:‘€‚ˆ!Qà 1eP1ÃxB‘€‚ˆ¾Àb8P1œ ;õÄÖ7Ês BV¤†-üPßÕ „’=öûS[Ò¯XeðÕ/Àøû?3Š ,Ù¦¬g ƒ|öÒͶ^ÚzWN>¯ÞÅú»bŽ4ÿÈÒ»yþ&ä!†³'D©s†Ò¯ýqzZ ­ãÐ=eï–}Oo®+ÿÖ^ÊðœÁ×7Ðõî·×}Oœå·øÏN­¾ì`î³ìÊYóÏfîúìÁ¾ [Öû¶Xô–{yýä1†³'Äkÿ•ªàSìҕòœðçé´MI±kßÙÁ£‚“8›nTÉͧKU§][££ø4#†Fuε°‹ŸÑͳxÕ†NÛu‹ÒÆv’k`ã3÷Òmsõð ®Y8ù\Ì¡GïÓT,Àÿ9Ëíµ§e @ÎèDê™kë™W“f aI¼qdÃW#†·ïí²oÓÈ Tþ¶Ü}ž-ûëå´j±pÍj¿µñuâþ­ëŸ®¹uSyd×öµ ߌ<º'E“Hp$Ô#ŽÀ`,^§Û—_ôݾrÓÃi6P§p9ßê7bþzЇ¼wôx“I»šÌ<øñyÏ÷{ThîfÝÓÅ߯S±ø°#÷©!x,ŠHÇ‘qºÔpjXÁëìÙ»1nMŽß²÷ÆqOïFE¦ÕШ¶Ÿß•chÉðxY®)_ÿóÛa­j–*R¬\ãžÿÛr-…u"5‘ôËû½¿ÝáNRBôѵ￳àv`× ’Ôý¶p)ôL餈óÉ!„‹ï°Ö%šw+ä$yxy5ñ¯™ûσ’Qr/Ò%@ÚqøÑn,–ø‰ÛùqÇž¦_.ø;´–gÔ–³×ŸxnXM§¼­Às{aHŸý¼ÖjÈ?—’ WjÜqü†/GV¢†Ì†oí꿾䓺pð¤7‹ óÝ s…ùú6Š¿³ôŽ"„)w7-5ªU ÅÝŒròÙ+·ÿ·úÒ¶Ä´——¨Z¼Yò­·Î2¥U2M¬±\^6aNÒ€°)ýžvBTj;î+Á¬¸WlÿÁ²öh†cˆ9Ùäp†mR§½ÏŸ>—öÛk¹|öò»g/gùòkÿkþ}# ?ÉÔ׊߳m¯1ÀeóÀFåŠú¯Øäå ¿]5gõJ@ï Ï–—þ:wŸ_`rµ)˲B‰¹y;éfÄÏ'§.û{Nå䃳_éÓw ÷öõ#+2ž Gc¹ÿýÂZ@þ”qbððò48×è?¶W-_7£ã‘c:{ïÛ´-ÚÂÄu+úØÊAbaïžSŽ™…È.ÿò‘oºõ˜'††ž¹sbyè¯: ûée$ €a8[Ç,—23q°éûAÝ„U:|8Yë’åü¯¿^kñnSc6ÏKEºM\öاéð¡­Æ÷üçxЍ!eóÉ_Ö®0ð‡á ýœ…húÚ‡}f¶úaå…ž¯—çO2@ÂמŽÅÿõÇ÷j.›z×ñ÷0*U¯óø_¯Ðˆ´™åªiÓ™g;<ë©b×Äëû,ÜflÓ±©köùW,ŠÒƒ^¦$IRÊ‘G¹ÐP°X‹HÅn4|{M¹wëvÒ?l¿øØí˜“«ú$Ìz¹Ï÷§)#m£ÜܼñHÓö- å¼WÌÂŽFÉɽD£w޽8åën¥ Ùæß©bPÛ€Ó >ŸwàVRÒ=3&,9+ÇÇÆQD :‘ú%yò28×òÁ€ºEî%ßx·‡Ïž [¢©Êm¡Ä„oÜW¿}ë"™®”|„ä;`}¢bN¸~pþKG¶½éŽ’mþ]ê¿·rA×{S^*SȷΈ{¾àéS´7Ì,‘:æY«^gñhÍ(å\ !£¸­wÕhÿRqUy3‹×î2v`ý¨?þ8.ç·*=&›"oÆ'ÇG˜Û(ö¸[ó \ì<ú•i8;é·WËzÓq/ÜrÚ93ÃÙp®ÕwXÓsó>_xèvrbÔ®o¿\qï™Î­ý(#m¿cãŸåÛ=•Ó_Kñ¿|öê´Mÿ\¸“”wuÿò sþöiÖ¼ªsöùOùkê[S?“wi笯¯yê­÷;åÇ(X2}·º¶þþÂý„4·M¯”ólÚ-¸, KM8U~uÙª!æïÛ•+ä]µÇ Ÿ7×,^ŸE–”›?¶5J’±ã¢˜ØŸº%ÉØzÖU%i÷Æ?Š·m[Ñ)‡}„G‹Þíî.~µUeÏâµ»NºüÂôMÓƒ}¥ìóïR?ä…S‚Šú7ô³çèõÞ«ŸÝÌoò«œ–øQîšæ­º×jb÷ÒýDJ´|ž÷µÃH~C6%ɰ1e×äß=‚–TsÊa!„G¥,ëðAGÍ&ÿn僿ØüÅ“G €ÃÊ¡­e‰Z;o“K§Aí¨ƒc’oÜly±]]æ¼ë¬_¯²üè%æSKçíðï±ñcÆgÇàÜàóC'µ€ü)Ûáìä‹—­Ñgf=†²ð¨ì†³ãÿ\¸âj³þ/WvÊÓpà²îD*·6. KšÚ©SjI–S,—×, ÷ YäÔd–ei(3lý•ay ENëDYâö'°HØŒN$lF ›1œ ›Y‹H³Ù¬ap Ö"R–e 〱‘ö;Éd²ßÁór¥¹R\©G®ÔÓI®œ³¼qû²~ðBBBìtŽÐÐР  ;<Ÿ1™LäJ%r¥¹R\©§Ÿ\…‡‡kP1;6£ˆ€ÍXâ6£©cÉ›‡—p’Ò1¸=;õœEë°("õÌõ¥ÙQf%Mü¯•÷ |¹s9~d@{ g;åΦ9+î½4¥gYjH ¬­å,×VÍÙàÒyyp1IëPHÇ`>µdîŸ%ûliå¥u$B:‘!yßüù‡k \ÐÐUëHRq…þÝß2wé•g†ô pÒ:€4Ö"òÁ,`E¾úÛ½šUö÷.äS¢Úóƒ¿ÛyË¢< ß^> D‡Í]Ô~X÷Rü@72&Êåoô›v«ãü×n]Ú5¥éñO{ý÷—X-BƒBX.þ<ÇT¨ûÐö¾L©ú‘©)_<~2ùéƒK=˵Ô¹ZìÉQ2HÊÚ{þûVîZN¦N¤sõ¶í+Y½à¯ë‰òý‹,Zw±vÇËq5¬¬³³eYBáÚðÍÉCúô ª8^V$×ÒAŸ/VMzð$ÅpvÊ‘)]_^Qæ³­§¯ßŠŠüå —ï:÷_pÁœãx5ÃÙKÆál˵í¿ñk?´{íbFg÷’n%mÿmO‚&Á@Ÿ2v"¥b5kú]Úøãꣷ’䄨}‹„ß«\«š+H<”éŽ5Ææ.þ*åÃo:Õu[vó«Ò¼ÛŒyoÔäÆ6°Ê\J…ê˜6`ŠÁÀ1X‹HÆ ·Ò€ÍèDÀft"`3ŠHØŒálØÌZDšÍf 〱‘²,kˆµˆŒˆˆ°ßiL&“ýžÏ+õÈ•zäJ=r¥žNråìÌmÕ X?x!!!v:GhhhPPžÏ˜L&r¥¹R\©G®ÔÓO®ÂÃõ(ˆ˜ ›QDÀf,ñ›Ñ‰Ô5óÕÍŸuoXÖÇèê^¤b`ÿ)·¨ô€PDê˜r}é«=§FwZr,æþÍ}Ó#?êöö†X­£H_D*v£áÛslæ‹‘'’öþl)w¯ AúոwâxkÂíщÔ1çš‚+^ñãΨDùþ…ðyk.Ô *ï¤uXL¬Ñ5Àq3^éÒµE©÷eEr-Óþë°×ê¸hH]“}Õ.xi¹¯ÿ¾žrÿò¶ÿ¸L ê1÷¼Eë°("uÌre릃ÅC^í]ÏÏèìQªéð‘AÒÖ_vÅk@VkR.ýúY&ý¼½ýž2}OŒ…‰5š0ø×©ã!tÖχo%›£þž7Çt7 ^M£ÖqdîDÊG§öê»P Zy,êÚ¡ÅÝnMêöÊŠ(ê@MŸŸ°ú»>o]ÎËÍ; dfB÷ËÿSÇùñ/°³ŒkÌg]w´\¿éƒëu¢Ñˆq=g·›»úB·WË1ð÷¤Â †Í 6Kë82ÈT*EIJû—$IRÊу‘r‡=³‘²,˲¬”yáÅÊg}9ßû÷¯ížõ¿ŸÎÉ ÷î&ÉO@÷{È4±Æ¹Î˜…3;Ýû>¤z©²Í^ÿëé®Ïzxûú˜X€‡²¸ÒÑ­Rç/Öþ}6*:êÔŽé bOº5y¶.+\À*ó?É{fŒ›ñÇ™˜„¸ËýøÆÖ—zul{ß'º³¶†oöy½—:íŸÛ4¶×Ó½.Чžî0|ùÏÃê°2!ÒËbÑA·²m?ZÑö£¼"ã:‘Àc±„8lF'6£ ›QDÀf gÀfÖ"Òl6kˆµˆ”eYÃ8à@¬EdDD„ýNc2™ìwð|†\©G®Ô#Wê‘+õt’+gç,nœÀÞ¬¼;#444((ÈT’‘|6IDATNÏgL&¹R‰\©G®Ô#Wêé'WáááZ‡DÌ΀Í("`3–ø€ÍèDêš|iÓø. J6}Ê7ðÝî }  ‘:&ù¦[ybhè™;1'–÷ˆþªÓ°Ÿ®QF°‘ŠÝhøöšùì/kWøÑð†~Fwÿ¦¯}اð¦V^°hH=S,Š’”ö/I’¤”#޲&<ÐHýrªÔ6àô‚Ï縕”tcÏŒ KÎÊñ±q‘@{t"uÌ¥þ{+t½7å¥2…|ëŒØÙ¸ç ž>E‹pc =ŠH]s«Òc²)òf|r|Ô¹b»5oÑÀEë ²ÎNÞöVeO£Ñh4ºë¿.1ݰtòù°÷;Õ+]Ä»hùÆ/ef8ÛÎRþšúÖÔßOÇ$Æ]Ú9kÄëkžzëýÎE¥Ç¿ÀÎ2w"]ž›|*.!áÎê>Þ”+)‡'õV|Üïg¯ *æõ4û…íË¥~È 7¦õo0ègÏÑë7¼WߨuL"‡;Ö(6¦mNù{ñ¢“MÞ^Õ= °$ê útÄ¢¦ –:®ºSF[ตþbcðZ‡Úk"•[G^/U·n±Ôî¤S¹zu 9|,Ñ~‘@·¬HY~díÙlŠÅ,˲“B˜ïÞU<<ÜÌi{™žžæ wbSd7®Ñ(h²ÎVÒ6¦><¼<ÅýØûE1!„å~ì}ƒW!÷Œ/@ v8[*Z£¦ÿÕC‡¢SKFóчc+Õ®æf¿È [9ݱ摭Πzõ Ø3í“U'î&Ü>´püìÓûu 0°Ä@”¹©D/îæïããßsù¸U}ý}|ü;Í‹R„p©õæÂÚߘØ6 l®s•þ ~\¥Ê ¤Ì÷ГŠõ[u½_Vûº”mÿɪöŸØ=&è\¶k€ì0 ›Ñ‰€ÍèDÀf‘°ÃÙ°™µˆ4›ÍÆb-"eYÖ08ka¿Ó˜L&û<Ÿ!Wê‘+õÈ•zäJ=äÊÙ9ó3Øõƒb§s„††ÙéàùŒÉd"W*‘+õÈ•zäJ=ýä*<<\뀂ˆÙÙ°E$lÆ?°H=KÙ:º¬³$I’d(Ô{mRúgί×®FqO£W©z]?û=Ê¢YŒ @¢ˆÔ3—Ó.ÊŠ’¸¾¿”~{Ê¡¯º÷[ëÿÁŸWc.l)ætï;ó,e$ÈCÖ"R± ß^þ”²gÁüãÍÞþ¢W5o÷¢õ‡}9*`çË"Y+ä:‘ŽG‰>|8ê©úõýR»“NåÔ+|êàÑDà k%.6Nxò|0Â-yò²\¸¯O)Çä:‘ŽÇàUÈKÄÅÞPô+÷cã … {PA€[Ò»L›ÊЋGV¢§ òP¶k”3t³Û;ü†lJ’Õ3.åC¾ÚòU^ŠþlfíDʲœþ ÙlŠÅ,Ëò£×Úe·GöÃÙJÚÆŒÃÙÙl@ÁÁp6l–C'òaËQ¨Ù€‚#s'R‰^ÜÍßÇÇ¿çò;q«úúûøøwš¥d¿Žs¦-R±~«®÷Ëb×ì¶  Év8ÈkÏÝÝ]뀇N$lF'6Ë<±GwöìÙ‡ãi9<‹Î86//¯ÀÀ@‹Å"Òn¨¦¤>°X,©SŸBìØ±CÃ8|ÆZDšÍf ã W<,"ӔТ \Áä&k)˲†qÀX‹ÈˆˆûÆd2Ùïàù ¹R\©G®Ô#Wêé$WÎÎ\ßhÀúÁ ±Ó9BCCƒ‚‚ìtð|Æd2‘+•È•zäJ=r¥ž~ržú`ݺuëÖ­{8„úߎ;¶oß^Ëø€|Š DùD§N‚ƒƒÓo騱cÇŽµŠÈß("ùGú:’ °+–øä+©E¤¢(:tà« °:‘z–²utYgI’$ÉP¨÷Ú¤Çn!Dppp†qm¹Ž"RÏ\ZL»(+Jâúþ>’šíy„álØŒN$lF'¯H’”ùÁÃÇr‹Ô´Ïøª-zõ*sNåŠÿ ¾¾¾ö Èg¢££=<<´Žpƒ!..ÎËËKÍÎNNN*›””Ô¤IõaìÞ½[' ªyÌd2åðaysÕ[²Ž-[¶TsÐ;wæBt@AòÇT¯^]ë(GröìY•_7Û¶m«W¯žš=wïÞýdA°²y8[Q¾öÆ×  s)"×­[שS§ ùTò@ú¯›,¿h(§"rݺuaaa™×k¥ˆä E¤¢(Ô‘€~<2™&ýÇ5,,lݺu6>œÝF ¨Ç´Pà_{øu£(Jê·R†ÖŸ/@+t"~VÃÂÂÂÂÂnOÿå< Peùu“Úä–†€d]Dfxœá5‘€<å—Q™L¦<;àX².";vì(„HmFRD4‘ùë&88¸cÇŽyödÓ¢’@A“u)„èСƒ¢(ëׯg8÷2ÝtìØ1õ»Iè<”m)Ô‘t"šHÿuÓ¡C*H@Wr*"Ń:2ÃFŠH@ÈPDòÕèÊcŠÈÌÎþEQ,‹ÖQŽ„¯@çY'Rýj[¬ËØ„"øwøºtËZDîØ±CåkÔï à¡cÇŽià`ÔÝìÞ½Û®‘©NŸ>{ëÖ-­±£¢E‹z{{W¬Xñ±{¦‘¬bƒÓ§OK’Ô¢E ­±»ýû÷Ÿ9s¦R¥J9ïfÈ›h€nïÞ½®®®¶>èGlllýúõ• ~ýú÷îÝ{lBœ»€'ø/ôãÖ­[J™é¥fÈž"È ÉÉÉÿâ@Wž¼ˆ4›Í+×.»xåüݸ˜‹/-þae®¦ †³òȔ￲¸$–(ïíäfÚÿ­Ãy"iÈ}ûöiÇЉ‰ ²Ó*ƒÁd2ùúúÚãà€¼ôôÓOkÛ“4#;dôp‘E‚œ"Ë †ç_Èåñq˹©-Ÿp"lß“,Ž¥ri-ëpv… dY~‚3fgçsçÎÙõø111ö8rzšŸÔƒó?Mž\꼓ýòµVÖ~: öþýû¾;zBî_a©("ï,h-"íu}dê‘í}|{sÐüäMr(ž¤>3…o|ª\ñ›w®Ü‰¹[§jãþ%=”9ò«g?ýÒœ#«úÿ—}ÄÑåM™®‰”ìIë7XrJòî}‰†[qI1'#/ôï9$Ó{-‹ îÛðï?ŸwœåŸ"À®T®³xýFÔÁ#ÒoùiÕâÒUŠÞ‹9uülÿn#œ3¼$vËü5…¿ÿÍØ«‹NIÛ*G~Õ¬èKc¿XÉÏÛ÷©ú]?ÿ=ÊœÃö‡}HÅ|yNÿ&Ë4±¹ß ßž6«| j²A  Ššòkõºå VÌš¿bÚé³§R·D]¿vñÚéë÷.$&&z»<Õ¬Q󌯱DoXðGýªzvD?ו w&X«¹ä+vÔþfûù«‘«šì7tþsŽÛSƒ”Jvtmé‚´#%í]´ät`¿î$ŠÈ,0œ ìJMùu0rŸ“O¼Oi—I³>KHˆWeñÏóŠ–qONN>yäâkCÞÎüóÅ•‹Ž öŠ¡ê€Õ6/üíîÃZιÆÐÏ^kâo4ú5zeÂðò;—¯¿dÎv»µ)¼_ÜUY½à·{Š¢Än™÷sLPÿâj{©ªŠHf]䚢>Å“R¢åK¡†™ó¾ lüœâ’xõÆõØ{÷[5îTܯD¦W˜Oü´hÇ©þ(>;mƒTH»Þ¾¯¿$„NeÊ—I+לJ—/-݈ºi^Ùl/’î°îÍö)ÞfÁºëmÛl]°Þ©Óâ—¼s·+fc'R¾üûÄÁAjU¯Ý¬Ã«Ó#næî•ŸòîOž ¨T©R¥J•k¿¹ÙñîÙ¡ÄŸÞ4õõ­ÖªQ¯yÇ‘“¿”b—ó˜Ï-ê[¯J@Ф#f»dEM/¤}·«çn¥$˃áàÙ]KW/ˆ³D''Éw®&÷î6 ‹$îY¸\yg׸¢ÃzD.Zq.í"Gó¥ó—Ò®‘”/Ÿ¿¬ø•(&e¿](ÊÃ(ª÷Tw×üe[—Ï /Þ£oswµmH•H›ŠHùø¯Ù\lÔò]¶ÿØ[,mÌÒK¹YF:7ùxÇÉ3g"çt.ü¯JåÇ J']Ú2}tpà þÅü+Ôo÷Úœ}wT ‚«=½rwÛª-Æö,ܲo¯izw±úÍ7æÎý2O>³ðÃ¥†º•h"·Ô”_O•,SƯ’‡[a³ÙâÿTQârBb• ×Gô{Ã`0dÞ?ök,-Z8=ÜâÖ¨uÓ“K–NQEùØÏÜs=!áÆÞÙÎ9׬{»§¤l· %}˜ÒS]µ<ýíЯ÷VëÝ»^ƹuêÔþýûcbb´ŽÅŽ|}}½½½+W®üØ=óO `WUªTÑ:É?E¤ýú…t"2àÞy°YZéééi±X †Ü¯)Sçø¸ººÚõø¹~ØÌ1?©÷ôT»˜€JiÃÙ^^^7nÜ(^¼¸³s.p[,–7n¸ººÚõø©í:îìˆùI=8E$Èui%KéÒ¥/]ºuÿþýÜ=§§§§§g™2eìzü"EŠäîa3(R¤ˆ»»»ÃåçáÁsñ˜"ýÄ{—v=~rròÁƒëÖ­+rµ™ºbûÁƒ½½½:?¹+ŸÌήT©Ò™3g"""nß¾»G.R¤ˆ··w¥J•r÷°-Ÿ‘Bê<€<Ã?°E$lF ›QDÀf‘°E$lF ›QDÀf‘°E$lF €ÇÛ»w¯««ëÃRDàñÓÿÓY«8à@’““Óÿ“N$²õp›ál¨õp›ál¨õp›ál÷? pHYsÄÄ•+ IDATxœìw`Õø¿oÊöÕJ»Òª÷â"w¹Û¸` ÓK€`º $„vI.wù—r98„ËšH „$zqwwK¶z—V»ZI[§½÷ûcV«ÕJZíªØ¼‰<ß™7ïû}³3ï}çûÊ µ×Üä1L …B¡P( %>^}ì´ø–Ç`ʪ›Ïµ1 …B¡P(”Noß ô{Jw]ÿ!„‚øÄ1œBE*R‘ŠT¤"©øUÏK&Ed­ESVÝ|zûfN="»T’ ü%(1ž4T¤"©HE*R‘Š_ÎK&Q”]uœ­ÔH$¢¦!_SM[Œ' ©HE*R‘ŠT¤â×D<,™Ì2†Jr"U™:DHÿ•, €PÿiÔ“¨HE*R‘ŠT¤"¿Îâð{`ï)Žš&dÀé ‹„ ç†Å¨£aq$½‘V10`cŒ€ÖȰ=áHdøXXs„4 Ž´ŸŠT¤"©HE*R‘Š‘{bŸ;·øO ê—ã9 5LÏ·^³¼4#ŨåYAR:ܾ¿~qæT£ Î-|b¿ ¢vw#u JDdøýT¤"©ø5QþÒŠÎÓõ;þo;{ðùb©HÅs  Þ£:k#5²OqŸ88eL#£Ô 6’aÑÆKgÎ/KGýaF-ÏæÛ“º¦âËjÇ •åˆÜBIÂÝÙ„„þô÷yÿßwWÀÜû›áda¯—ŠT¤"¶¬üçù?úÄ%ŸOVM®¨nœOVQ‘ŠT<ë"„*þ=±ÏŠJ‘¬ÿÐè'J™€:i$xèÚŠ©¹VB¨¢,Ý «xò­ý@˜ÈÜ€ ý‹ `2PzL†f4ˆþd„ŠT¤"1!À/žùE¶ ج²¢.ÏÍ‚snÕYû¥óË**R‘Šg]¾r鬹Åbä¡!g=ÿ½ÏwÅг¢Œœ?%Cõ ïûõg¿}ç˜$ce¼éãªO~ÓòlóËÒ2é÷ug!€o=»Bê0„’AØ›¥"©øµåúc 'ß7×lBÉ÷™;Þû¼­I4+6uã·f,äAËbKM÷µ5I|Å¥ ¿UÆÖìÜÿä‘ nÎÅ‹î›ÊÖî<ð?ÇȬ%¥WOMN×b·«÷ȱƪ¼>Æ:B>lÚÆo•êkyò5–ÔõËòç“XÅÕÑõÑçµ»»Â$ßtûì ͈QD±£ÍñþΆC= 3so[;ÓÊs¡nB&$ñòR‘ŠTü*‰Ñ{†IöûV}ëÙíd˜Ä‘"ÄT7RÊaó x¨ºˆ ²v^¾z|V¡ýh]çïß#÷\>ã…÷Noè\1+tèâŠÂU혢—øQ'á ¢Nþ€¡âHû©HE*~­E‚C=@BHÂY…꤮S§žú¼/{Ùœûg”Þô?¶£çx¥³·4³pŠÝ~¤©ƒ³ÌÉçAéý²>Èä”Ý6Ï*UüÑV7cM^0+«¢íÌoD>;û²—ϹF齂ÿ±í=b¨$®3§½¥³]$Hg½åªò&ÿÖ÷ö½×g»ýº²Û®â„Í•¼=›_Þ±“V\úýu¹w],µý¥©]“z㺢9:ßÖw¾ç³Ý~MéC¨"M¼¼T¤"¿B"Àƒ’½ðýUðûVÝóëí#ç0šºaS—„7£r m ‚²RMjÊ»/+ß¼…ß]Ùüü»äD£cé´Ü›.,SeÛÌ"@Ä?¡ú3áUêοކ!/~µºçž_o‹(‰°„ŠT¤â×VD³ógø›žÛ™ñ`N×oëŒ×,̨¯©%ñ¬pààñ®® é>Ñ嘞—^f/þÂ}ª¹}_oÆ%ié‹R›>0ØÊu ´wîÅL*Ë#ħÚ–àz§gÇg°¡|ïêˆKͧÔ^ò¹ûdH…v‘}AÖb RZÛ>m zHûME³§¦®,Ö<Ä!«G}W­”™ž–Rfhrg¥Ï1îìÜÖôö …³§sªÛ|^ý(T¤"Ϫƒ÷Ààd/ôûQðÂ÷WÝóëm#æÖ¿'ìŒEòÍ"R’á\¸®(.| È´™t!-ÏnX;•eÑÖÃu ¦älX;•cÕbNÃeXÍ.¯j¤JÔbãßøÌ¶\ /~õÆg¶¾øà…! žÙa6@x©Hůµˆkvù €nj:©õtí3§GL¬)›ùëËÒx|à½Ï×£¡zPòø ‚¢Òh’bïîJïEKL ¦Xjy›ẚ.'hlþ°ÙrEnæ7.É B¯ówNìì åÓç'@éÏÇÌPB‡¼U25›]úß”Bb5kË,ZV²®Ô’n`9!Àœ½çHPôa€½‰¨u)!çúW "©xnÅA{"“½ð`ȃ ûT/|õÆg¶”[D†ÃA`HÊA¾ëhg (jwz‚¢¢Ó°H”•—Þ?q¢Á1=ß¾¿ª¹ë²Zž AQiwö"`"Ï´N$Bˆ:!„ï~zëK]aòî§·"DA œŒŠT¤"Ãb ê؃•(vE1¤–‹<ªÖo¼Y¤— -oD@±O¸µ²£vAiÉÔÒk‰)½‡j‚0zßk÷–$CŽÕ<{~É¥¹©O3¾—þ| @§æ#ôÊ‘U3&>¯ 檼ÕÖ7`31—Ϲ}®q4üÏk u²uã·f-âöùD€×ñF€>£ŽGj¦ä|ù¨HE*žQu¥Â{Ôÿ€ —Zò£žÙm|fË‹®€\}÷Ó[‡æý{6>³%”€þªu`#â\èW>ëŇ.€°qú€‘„V§§8+€üù³Ó'…™Éß»fîŸ>«:t¦í¥NÜÕ,hqö @BìDªÞ+‰Ø$€¹ëé-/?´&Tò§¶µÃj©HE*&*Oÿv ôˆÀàÄÀèçÏJݶ£7g¦ÝÎ癎j…ÒÛñySQi‘)@nëú²c|NÁ]…Ám']-.}Iá%¹œ?(¢p>îÞœj>µ2Á\ȇÄ@Fà¯kÝÛ›º"+çò¢î¿4Éf«eîÌL]Õ‰/Ô*ZV˜Éž‘=ÕS 4vñ¥-JM_™×þ®7uE¡:»†àP õ|¹ÎT¤"ϲ¨Vaá=êä®§·ô;™¡³TŸ arƒaö¨™M @†É=kÙèãõ÷_5·Ï'¨j™W–}ëÅS5³aíTP:ÑЩªøè@†„@؉D‘ûú×¥Tãw=ýÙË]t×SŸEí§"©HÅÉÕj(­|æå€e±¥ê̦]ÝBè¨pød—¯0Äp}Ã… Hí­ÛR Ö_VTlÕrbàÌñÓ¯õa0“ÏÝÁP¥Ù_“#ˆàÜü×ãž –\ºx#;=GŽ5|Ô†ûÕoäL¿ª¤è?ï/î¯ü€@ óÏïëµ対fùÚ9¯®$©Hų_}Eî‰}V¬Ü†8c#ž‘r˜³êºèý‘Fî¯j]='oJ®í—÷¬L2hÔ–¹ÿêÙ^¿N59÷Wµ"`ÔLPÆhñ-MYu³§å8 ‚BùA©¹DŠd„ýT¤"©81"›öíûg/bz6¿rè“>2Lb>ãþoϬ`zÞØtèã^+f ÿ‰Q)ã;‹ c$&äXãx½fƒF$—$ƒs +CÝÙ}GŒ|Æ(âN¡"©HE*R‘ŠTüªŠç%“&&åÏèÎîwN€úž8E’ø)T¤"©HE*R‘Š_Iñü±dRÅPa‰ìw „‰CÃ)T¤"©HE*R‘Š_Iñkâ…`sf­J-˜tw„KuœQœâN¡"©HE*R‘ŠTü Šç%“,êR2] 'B‘ÈMÿr P( …B¡P(£ñà[`ε …B¡P(”>¨I¡P( …BIêDR( …B¡Pf‚œHÜðÛKs®ÕIFO:aà֮ȹú•޳©“òuâ\ÜÕ …B¡ü³0'òüib'Û’ó§¤ …B¡P(çñ9‘ÄõÚ )dÜðš |磖·nMEnÔu)¶)mGLÏDX¢ÔüzmÎM›{søˆóÍ …Sîûй·¾|uîì|d&­¤Ã3ÜÕ>;ìØ®ôÛl͹þ¸Ÿ|ü—ËÒRlÅßýtäŸî,A\¯Ý5ûÇ{¥ðÜðÛK³.xü¤|­¢P( 埙ø#‘LÞ}:Ü!:þ²Á6¹.Õ un×é§Wk&QJ½ì¶õèÃ×>èpŸ”š7^Û—{ã†%ºIT<gùjOLÖ´¼ã¯¾^«¨bp÷Þ§LÕÿXN¡P( %a&¥;›ô~å¡+”f¥g–,¼öÇ« ŽÃÂAHMïÿ䚊ŒŒ‚Ùëúse ÚáÝo­üσ¾ï/´¦¤¤_úÛ;¿L+o½Þ¶ãµ¿7÷Ÿ!þóë§çl¸yUÒaKç}wcÉÒŸ•@>þ_ËÒì=S£€tðÿ-˜òPv¹}Ë·­œž›‘‘7㻞ÞéP”3O­Î¾òÇO{í¬üŒÌ¥s²¯üñ3÷­‘—‘Y²äÖg÷ÕïýíÆ Ës3²¦¬úÎæêˆ`ïë7g¤¤¤X­iYS–ÜøÓ[e€q\=@Ikwó«_ @ÜýáƒÌ[6Ìì÷ý‡Õ@z¾ôàU ˲2 ç®øO§|dp¡²n{éÃa >¡Œ~Ç*gžZ}Å¿>õ­ Ës32Kßüø6Gb—‡B¡P(”¯“0;7½vÏOw­{v{usíöÇ+ÿð¶' ‘³rú·wß÷~Ú#ïU6œ|ïö­;Ý©½â÷;þc¾ñ’ÿ­ïv»;?úNAüåÓοåæâCzã´ê¢ø?í/Ž n½>:‡Jg\´rnËç_4cÀm_ìrçå4ñ…“€Rÿù]óW.0S9ó»;î|nûÓᆆ/]ëyþ¶/×…¼)i÷»G>þÙéæ×§H{?9½ò™ÕõŸ[rú×_úŸÍW?¿§¶n×/Ê>ÿñco‡=~ËM›;Ünw·«åøßÍøð»ß­çê©hçßv“ùïØîÜööwÏ»ý†|¶ÿذpæ»o|¢iù/?ª¬?úÎOf~w·0¸PÛ¼yïŸ â½c¥ÝÛ=ã¿·V7}ý6¼éîûÿØLÝH …B¡|}‰ßMÀM¿[gWÇèYsïyD¯P©ùë+»¦}ÿ‰{—d5†œÕüËå=ÿxç˜4RúÑÕ¥¤¤d\ýJ‘«þþ×ÊßÿùÍå):cîêGrSÎDv•²Sn¼uAÝ>$÷ÇzO¾äÖËíQF*J]¶bjÕŽÝÝØ½ëó†¥~oÁÉ»=¸k×Κ+—Z¶3újËUóøŒïüüι©:]ú¢û~~OáÁ7þQ¯:SÜÜ{þßíóì:øE÷þû7Ê­Z}öšëVÛaáÝ?¾¼4Ic(¼âºeÌé Ñ^7ÒÚ¦_ó£Ó~ºÛ3ĈÄaKoÞ0eËÞk¯zýÕšµw\ž:ôþ¬Q9óÖ¦=%ßûÕ#kŠ,º¤¼Åw<ùõºÈBqgb;?‹I‚*s®¹uu÷__ÛéÃío¿ö™éê[×$E§±tLÞò噇wìuîÛqlÆêK.ZYvpÇçîG V,ÏL<Þ}µ±£³K›WʉÍ-Ì…®Î.õª2öL{ÿ•@IÉ–P"ž×è-–PqN‘Ã>d ê]¿lz~FªÕj›þè΀ÛÙ;“qÍí˾ðƒŸýÉÝm+ŒG†×¨t´uj ‹³†^¡P¡b<1Ó²=üóE¼z î;–ÍÉÏá›٨«c,vP( …òÕ`⻳ÙôÌtãÚ窻Ãíµ»»éùu#:ñÃØí©Þææþ©ÃrkSÛ0)„Ódfd[wëzxÿµ¾ùç=¹7nX<´zäÒqÓW.Óîýì•Ïä­X–šµ|yêžO6mÙoYvA鸺ŒÝž*47öÃSšë›!-} ЗX¨7lzøÑ]%?yç`]»³Ûuâ‰åÆ`\W/dˆeíW¸>Ü–zË-s#¦B¤‘ÍÈÊêkÛ†uÆŒ^ð î;ViiìÉ©´6µ’´Œ4ºX?…B¡P¾¶L‚9å†;yòÑßïjìƒîÆ/ÿñäÆÿxß;9sS®ºvêßüÇ›U=b uç¯~ñzËPo‡I¶¥ ÆÊ*ϘbDÆ•·^—òéÏîýý©9n.ç†&ˆQ:mÅÊEÞ¿ÿïßuË.ÈaØ’K¤7~ûž´xå~,–DÁM¹úúòc¿ýÉŽº„ ãÀï~òB]Å WÑ=%b ˆyÑhâçá?ýôùý!ßh|WOE·ì¿8;>ù^I¤q#idË®»mqõoyjk}_ÐÓ¼ï>ñÙ I-[ða‰ûŽU*_ùÏßtƒ]‡^zìņ%ׯ˦N$…B¡P¾¶LB#ÈÜþÒ›¦}òèÅÓóŠ\ûÃw”ko[mJ4—Á#ØR2nÚÜC¸ißyñ¹KÚ¿tjÞÔuÿÕ¾òš¹CÝ<ñÞ±üÒkþÁª’ü™ßxQ¹åÅßÞ–G}H …B¡|}A‹oylʪ›Ÿ¹Þ~®-¡PÎc”3O]tá¡û«þtCÂïC …B¡|Åxð-Çéí›i(…B¡P( …’0à ûJJJÊÐn·{¢‰¥nR5ÆP:Ùzã´ä,Û(1®žÊ¹µ?¶yçùµ¥P( åü$.'ò,·²ç¤Q?<‰óÇ’ø9Ïmžóز‡·µL„- …B¡|E ÝÙ …B¡P(”„¡N$…B¡P( %aBÝÙíííçÖ …B¡P(Ê? ,„È’’’sj …B¡P( 埄]õv"C½£P( …B¡P‎‰¤P( …B¡$ u") …B¡P( êÎ&„œ[;( …B¡P(ÿDÐH$…B¡P( %a¨I¡P( …BI˜¸>{8Aé2°«+ %„(Š~¿Ôžw„ºÁó¼Ñh‹¥ÊÞ½{ý~?BhÀ²8DqÑÂ…ÉÉÉ“gÁbøÉË?~,±ç‡%”øÁw9éöŒ‘H’ÔÛÛ“ššž¢(vvvÄŸÞžž®ÕhãORáH@Eº=]“ Šüð‡ÿ¢ÕÔº‚ ?þøÿLTæ”Q9uêToo¯Ëå:׆P(ñb³ÙRRR¦Nz® ž ÙÓÓãñxT‰¢®„1Æ«"!DËŸÖiyÎ J’Fo(NN]AHnBŠvìØ‘““#˲ª"Òf†aT!DaF5lþüù:.~¿ðÉÞú£µŒÁlà–ÌÈZ1· !#‡â÷ûçΛ‡Ã0(è÷yÕ?ÇÝ3ò­A èëíµX,ãÔ>¢U®Ý÷Ó.¤ü¢¦á³1;Ó^q® ™Hây.Âêþ´´´¬¬¬øUÔÕÕy½^õVÂ+Š¢æ£( !D#wª*,X0!¬®9ÓÓãf3’›xâäqQ4­ÙlŽ3ÏŽŽö¼¼ü8«#„PSScnn^¼«*:ÛóQÑØÔ˜›“˜ Bp¯sà#íUgέ•ËjþöÖæ©SË2íéá”–Ô¬DÞ7Ï;0Æ^¯wÔd&“I­¨Ï•••0{ö쳩”B?õõõ•••#ù‘ç¶!o$RÅžžž””EQžœŠºMÑp'4lÏÖ°LB!Æ^O»äyÃE£ú‘»wïçét:—,Yb4EQŒ}Ïó<ÏïÞ½;¡²tvû^ýè$0\ANºŒ±$Ë»+ŸmyðÆ…F½&¡¬¢PýÇA^$ ñ#À'[+{oZUÄLf+âíúLöü@öyâDv:7;>’d_^ÖŠsmËÄÏsþ«ú—,˶µµ%%%™L¦8µèõúÌÌL`ÆãñtwwƒÁ””›ÍƲƒ"ýaÇÀãõÈ’4¥lêé3•Ã:‘ííf³9%7¯¹¥iú´òøs&„ȲOJžcõ¿ Ž£ ¬È{^}wU€!ˆÆ™¶ÞœbŸ=»\–¥p Çi}yh¥í–Q!,È(mî…·ÿŠa'¥›¨¶Ùaµ˜R’ “‘9`Œ«««õz}ìd¡ÎÎÎâââ³éGöôô\xá…gM…2QX­Ö­[·Žtô60~'R–e†adY–e™eYBH”kın [­åOkø*Ät[Ìu 118CAY1úµ·mÛ¦Ñh|>Ÿš• ¢(ŽŽPoTäûººÍ²,˲ÉÉÉ)))Á`0þªÕÑ·÷DknFrSg¯£Ûc2êD‰ÄNÿ“vþüÞ•íû[Šv #]ÉAÝÜeXÍó¦eýegý 3ãÌ¿¹¹¹¬¬,Ä™¾·åU [eH-ë뎫= hxƒ-ej}û›^_ûôÒ:7ÑâO±õŽú\DÞ™êsÎ0 Çq‚ ÄïD*ŠÒ×ׇ1>|øpÙ”é΀Æd¤twWó<¯V+‘Bâ ÅsI¶ÔTI’³³r ò ¢555”–LQ¯C__oRÒDÆÔÕæ,,)1f=]­r÷1#äÊ¿mÍ.s»ûd0 QÂïê¿ B\zѶ”dGË™ŽýÿËuéëîLNË)ó1ßóMí®‡»³È®}úá+ÆP¨xôú|>½^o6›{zzFJ£Õj ƒ¢(>Ÿ/Î(õã5°`渾¬ÖÝÝ=žÓ)”sHŒ»w’ˆï¹މܻwï²eËE oÄÖ#¾Æ±íÛɱ-ˆ™ŠØù€R4rx7RÚ´#pÑ[2~¿?|í´Z­:,R„HaÔSL&Ƹ··WE&®¢×/žnìò¥’Óü²TY!›?9©1šd…H²bMI~î̓?¸uI¯Ùœ4]A!(KRX {,Ë~§/21ÇózÝ(a°aUH¢4t?Ã0ãQ¡—^X‘]P®q8výíÏ £v0AD$š Ä`¬sÃééHkiÞÃrÜdõB$™ô?ºin·Ç?Iù‡ ßöj9€ÓéÌÍÍJ†I¦~ÓDÛ¯0~¿ßãñH’d6›'o(…2áLRCÏs7ü˜ÈeË–©;Ã#¯ŽëêD†·$0L€A>@©ÀLEì"¨ ¡6æ›Íæ°¿,ŠbQQ‘ßïïëëAÝ9Ô‰ ƒ.—Ëh42 £Óéâùäìñ6µ÷ܰv¦A 7þˆÅOm>Àht¢„‚¬gI]kwaVŠzcœP“?r(í¯êÜs²ËjÖ@ÀžbTd̲\iaƇ‡ë7fˆ"ž’ºªÿÝšYŒp Q|Àd(²Ÿ pŽG_‚e, F/ʆñ³,¿}ß¿®\ø_ f2Jñ·ïØQ[_Ÿžž~ùºuðÑÇŸ¶´µ|óÆ †qõë¤wèsCÞ¯"‰ltã L©®®®X´|ÓÖº»/ŸkÔ²ž€T”mÙSÙþÆ-«J5ãpwF¸W=Îüc'³ÛÓkONN‘e%?/¿®®vÊ”iê!¯×ëøÌf3ÆÄÕíTƯTMéóùü~?ÈŠìõô%'§ú4+é/2^ßÀ+5BÈçõæäæiøß‡Uáé²¥qM IDAT¤"”›ªÂ°Špy ÆclµZ×®½|ÏžÝìNjE‘çΗššÚ?:H|·A¢ÙÛ=²¢ì9ÑtáüâC§æMËOèô8õª·½: HÝ#B}}½,˃!33“¢ÑhxžGÅ·[ŒúQU‡‰¿ýŠäĉ °>ÃèÜ>ÁW9oÞ¼8ÃÊY Fs3I A<ÏÝð±¨ð€¡xF…ËÈÙ-í%£ÐÐ!âÒF”@œ„x áð´1|NöÕ<Ojjjww·Çã iØÆX=¥««+;n¬³Û¿vI©NÃnݺU§Ó©cÔxÑ-q™’¬ˆ2ÖèÙ·?úbF®N­õxž_¹reÔhƒDúQ¾¤«WX1/_Ãs€!@ž€Œ8–++Î}}{íM«ŠãÔ¬Ý5?JË[@äj ò Õ»«¿K@ÏëfšsnAè¬&eE8Y½Ù¨GHÑÌ ƒbeEä:ƒ9ï£÷]|Ás Jx ÿ°ÔÖÕoÿ|G²ÅÔÖÖ˜•••™¹oßn³ÅøÒ¦W®½úÚì¬Xx‡Ã¡Óê’-㊜©D=CÊÈÄêM;†H¡Ëåª÷™VÎ-@ž€$ÊŠ¢Ïûd$ ³§£-'''¬q#‘PPPÔÒÒ˜žž…1F êéíI¶$@}C]Vf¶$I<Ïùýâ¢Ò1dn4Õ¥¼^Ïsö4»úTƆa˜.`„ ÛËRáñx8nâU¨dXÌÏ/ÈÉ~xÿBL`¢zénÅlà96(H ƒê[»¶Ù•'›yŽI12R- Ç2LÇoÐi4ccÃ0Z­V«Õ€(ŠÕÕÕj;ÒÖÖf±X’““5F£‰¿þ€ô´”ø'Ô~©TVVˆæxKКlÁ„¸z<¹óéÓ§ËÊÊÔ‚P(ç3“ÔÄóÜ NÛ·oŸ:¢<¼1Q^ãÐ!v i˜d>Cä]Dþˆ( nPp4‚b-ÿ¡ÓédYV Ìqœ,˽½½@ 8AÔá’’$I’„1öù|Q½'1°§3mæ÷ß¿bþB?cm÷›Ûf­)9(H‚¤H²¢`â'ænÅÖ­ØœŠµ¤lêÛo¿gæ€Ô‰5‘=ÚáÿøÙ”}AÙP¼AERˆ¬`AÆZ­&--ùõíuñ+YpôÔýÀžWNä3@D €¢ˆ'uü‰$Ó1£n·Žß骺3гkœŠâ§¹cçþ¿0[4ii™Vk*§•=þ:„X„B”N÷纤¾vÜå8'DÝž½{»º:>ÒÞÚ¾{Ïnp¸\GíèìxïƒwžyîYEQÎÔT?ùÌSû­M|åЗ_ŽSãHÏEÔΨcÐb2™\n¿Õ¨‘dÙ}A¹³Çï ˆ¼FÓPZZZ¢´Œ³\‘$%%q¼FÁê\¿ô††:p8:Íf³$I,Ë´µ·ŽñÈçóuuuuuuuwwãþy…£¢NCLT…Û=9*Døàt:ÝÃÑÝÝít:}>!d¿æŠ·ÿòã'ÿ¸Íë¾ùÉ¡£§[–Í-½zU¹' ¥%.Y:­0'íµœ¬iÛyðÌO}ôÄF¶Ÿ( è‘H†aªªª‚Á º_—Ƥ¤$59Q£ˆ¿ýR©¯¯ïЉv¼nqÙ²òŒŠRûây}\S?~|’Œ¤P&ŠsÛ ÿ€©½‘±  :‰l#Ãr0)–q/°P HÀäó#¶X§-ˆÕã®Õj%Iâ8®§§§¸¸¸©©¹Ï'F?òZ †Ä"„ŸÏ•’bïõcð,&–å•7;=Éëõ,Ÿ¨svùL",a(+’Œ»=›øÝÕ^“Žwww]87gæÌ™uuuEEE£^ˆôú½Éß!I&…B ,ƒ õgažO²˜þþyý5Æ£h(ŠÜëm~Ì–UªˆUˆD$Ø+ù¶¥WMƒå£É)‹¼ŽÇ‰|!u,#ñ¿X›™^ê 6+XPpPQDB@À¸úN¢»ÏWŸa]üéžûÖ]°IÃkl¨ еõµB +((ŽÎÞÞ^Ä –eíÉc'“­)O=ûl à ø¼§ÝZ½F¯7UÌ›7ÎbF=ñ€DŠ*a3!0Æ¢(šõf·' Ñ°=Þ`Go°³' 21álÕp—(Lä ¤Â‚¢ã'ŽA›-µ­½­¥¥©¤¸4&£yÌ µªaB„Àëõøã›A¢ó î@^d$2¤" )ŸWuuô8òl†¥SìLÿ`ƒøUÑæåDMÓW»v1=::<Ç–¤k¯\1mÓ»û &Aucç©Úv{²^RpC›‹c™î¾`]«KQð’éö$ÄõÛ2 £ÑhÒÓÓ ++ëäÉ“'NœP]yå•ê­^ˆm2H¨ý€ÎNÇ¡6fEE)ÆX„h8&5ÅÐÐ)d›;::22FsE¡œsÎmC0ü˜H©»$ 3Ø<ÊzBH0T—cŒruÕ  ‚€¤(²!Àèññýlž”Ç®ŽµZm À÷ôô”——ï=ãî,½–tÖp(`팻š&< ÷^6e”«À ýû÷/\¸P„;.›ñêÇ•-}ÄÙ'bBDÙ”ëÛe{ŠQ?ÞP1NNNÞ½{waáè¾Ú•v£º³À”°ˆÕž/À²ˆc–A€cb4辬l¹šŒªe„#¬p³€}ì‹ô UäÀ>½Îì{#Àeê,“¸^ckçÞ^ÿI½÷Û†þxÁ!ˆn@Z>Cá9†áã ÎÄHSSSãóô2,›bµ|}>Ÿçtu5‡XŽåd…±gf55Öu8œ: +ˆÒõ×ÝÀsÜ”²²qé¹3ðûý’$ †¤¤¤pð)ËòÜRû¡º.™ÎnŸO ™$øýz¤ççGú¬Çw½Á5WíÜùÂ’ûžá¸Ñzcã0ƒã¸´´4¿ßÇ0¬^g8s¦²¨¨4êõúšÚêù ÆX#„¿ßG~­.ÔŸèt™Vµ £ÑØï> Ðï÷ûý~U…N7¨Ëò—ÿ¨Ì·éßÜ]X¢\43óÑ«æ@ÿ¯§ ˆé̬!z½^ÝÄú³טHŽežyørwŸ?;Íòæöšd³ŽePZŠ©ÙÑ’“fjqôúR“Ãå•ó ®]3gÔ ãÔ«^ØŽŽŒ±zïEÎ ¯òͲl0TKÒC'ë ¢<®—öøÛ/2ad`9–‘ÂB$™ð,ƒ8>(COOu")ç1ÆDNRCÏs7|$rÿþýK—.•e9¼»`f³YQ4¤·Bá\ˆ°ˆC¯ONâŠG]ÚA£Ñ‚ Ž°Aˆ!¿ #jehøzh»ÿ«Á< Žáä¸Xü_¥!°fÀ‚CU:ªgêÞ·Ú2¼„X„£. ,+’4R[»>e†OÊL¹ÉÙ«þÛ˜ËÆív;ÝN­†g¶¡±«×sŠ „Œ&}zZ2ƤÇíÌ1[zÜÝévk]ýLÈ¡£GïØ°!<½tlD=€1nmm5¥—~~Ú›a•1>ÖÔ—a1ÎÍÕµ¶¶æææ&ä@(ŠrêÔ)Œñ—_~¹`Á‚Õ³ì‡Ït¹=¾¢tóuEÏÿî¹[o½5|ÏìÿÇ/fO»ô$eŸz}¿A\\0göWÍ (*<Ë‚”—6zpæÌ™%K–ˆ¢(Š¢:•‡²ñÒ¢gß>©&go Ä®[\¢±[4’$±,‹1ÖétŠ¢´´´ÄS ¤®(>Üe¹­'˜bÒ©#¨’LV+ÈŠQÇ}òù±[W¤³ ¨~í8›°ý?wÃÓí*D>#ŠK‘A­úÔ«©£ÇõJŠ5Cö} DâV‡b9‘6›íÑG}òÉ'U?Rõ #W¢‰ßI£™W¤ B\²±¬­½:?ó²dsFMÓ;F¹zéµi6Ó=[^1ë»ã)ì€Æ¾¾ _T0;{Öì©S¦´wtìüb§"I„ÃišZ–ÓÞs×]§*+?Û¶Õ%EY¶xI<uc0ìsÑÐРµiôÞzé,„_PòÓ?9Ôôe³§÷ ]6¢(nß¾= 655M™2¥±±±»»›Å½¾éH³ìÈzàÔeœ¾ÞÏ^û—ùe)ŠûrÏE{gÙgoü·¬Âã)]V«íäÖÏf­½¤ËÙ••™}òÐþًƾ¨ªú‡#‘Z­G£#‘Qa<èhFñÔ1êÙÁΊ?ïnzõó:ÀJ8 X&Xᢠìå„ÓHö,·Ä_EÞCQý×QûÔ¿²"’$©Á—Ë5mÚ´äää3f¨CÐX–eúA9Ûjôøâò4_ÇggK]W ÷ª %óÖ§hCQAøýïª1N6êÏüío¤±¾û¡˜.»<ÎÓ£”ªô/âHü~¿ÞzŽxPÄ€Z6›­ßàQ®!!„L U±¯Æ9Ôƒ¢¬žag¥À˜ Ëè*Ô@žù³’ÁÕ–ú×étêõz£Ñˆ«q⸠âùZÝ[ö×ç$»{»N:î¹b¦¬4,*ÏÙw²Ùád¥™÷Ÿl²š Ùöä4k¼ÁÈaõúý>Bˆßï@ÙÙYQ]ÿª—Œ1xÏ'dY”eŒr¹œùùùq0* ug@~~~eeåesS÷V;›žcXKK,ž×_ý¦›nš(Û(”1õè†`TÆÛMQc6Æ!£<§1`0dY&„ôHa8Q&C½FÕº€ ‘¢ô¯«!IrºE§ÓŒ25ûàÁƒÓ¦MS?UN1™L¢(ª: ztçÚ‚“½Ëg䨿Ïó:N’$QBYYYû÷ï¿úê«G)êÿÂáɹÉIÆÕssAðûý@ ÆÑªá˜û*¯®0‰Õëõ:N]›wl0Фì;¼É ¯AÐ?º”å-ÆÌo ½OiX+ ‰à¸n,›ÍöÈ#¨qj')$È1Ú>{Féݪ „Ÿ ʜܴëJò.K¸T#ÓÖwæ™ãW,ÏÙ°¡ðí}ÕZ??å† ó~ÑÞWýÒ©›ç{CÛáýI™ðø›çûnØ0ïh˰}.$Â"YöÇÆÄÕã—?èó+ØÛ:›úúúyóæíß¿?555999##ÃétBœN§úÙOžç9Žsµ÷×ÿcv‰ÝÓ¼»­ÃY(ºò»Ïuº&òk%îýûýõõíŸ~Xîà…—*þ‚n™Ó¸_ú}—ɬ8º´ùù) $”§úèFux¯×#Š¢zH½¤ÑáȈ`Æ8žÏ“¨9†’Ý}~Õƒ¼ï¢ì5Å < ÆZV1+›‘èEaˆ;N^â§"NTÜ,Ò¿@7Vð„öfC¦ÍR’ü·/®ZœwÁ¬t_@lpølŽütËŒBû‡ûêS-ÚÙ¥YÉãþ”v0(tuu A¡°°àÀCsæ ê&Cˆe€AOÆèDåq½Á(Iù Ö„º³U¦M›VSS3- ë &@Œ"]M5n·ÑhlkkÛ´iÓwÜ1R(ãç®)ˆû¨’lÎâDˆ# Ÿl. · ’ð„iùwggÄ[éÇCkïéŸo¹Òª9¥¼ýË-Uݨ& Ĺ½i¿|kÅqC¾/?QÏ˲Zž Á>ŸÀOXðE/ åÆXÃ!)î_9==ýôéÓf³™b·ÛÕ º,ËÁ`ã8urXsåÖ¤À‘i)½;Ï4õvkæløáK¼ÆÐé:5æE"÷öVÝ}·¦®Ž•å$Bz  š…O<Ýüϱ{YšÚ˜ÿxŒ•e‰ek ó&¾O$CÔjhÄnÈK³Œ ýu:ƒÁ`0Ä×=ħ#@ÉHÒ:{<©úo–Æ GC!IV@Q+ ŸGˆ°?[P8’~¢_.ÔŸ®Öõ<ψó ntAñ§?úá†Å]½þÅSS‹rS§¤o;P]œaÎNM*Ȳ–äÙÖtÎ,¶»z}Ïÿu7ϱ÷^7ö§¢(¸©©©®®¾¨¨0ì÷ÇF–å¾>¯}˜iB³³Ç°Ø8”””(ŠÒÓÓ#‚ј6mÚ4¿ßÿî»ï¦¥¥¹Ýî^xáÎ;ïŒ2%…2Ùœ…†à,ÍÎŽ=»S[­¾ãw%Íf³ÉdÚ»w¯Ó\‘?=' ©ÃAi¢%±H„²ìÑ¿ªÆù$I ‰ b¡¹a­„p—·ênjµZAFùªÁà4a°©N ¡½½Ã€ü—ÌOã8bmìAB ¹Z2! Aˆ7¼0ƒ@!H+ mêÅ¥7Š‚¬u-]ïsœQP,I Mœ7JÒuË­–¹Á`!ÄD0f]nÇÏ·\™^`¾.å7»Z^¯Ö~(øÅïL}cOÛ›ñlŸÑ½÷—#æfÿ똛¨çB¯×»Ýn»…¯lre¦èŒ¤ç‹€EˆÈ’E‹.%ΗÅbY¸p!ƸªªJýRª•~Ÿ×C&è+M Ãty”×?>úƒÛWÿuËQE!z­&'=ùÓƒùY“A§á9k’.'=Ùÿº³¾¢Ô:uj•X6¥¬²²²¶®¶¦¦–„ªbú¯ÿ$ ¥¥ÚEÕ1Ÿ¼ÙÙ ¾À˲,Ë2Ã0ê3ÕÝÝ1^½zõ–-[Ìf³V«ýøãׯ_¿ʤr‚±;[í „„7F:_õK`ˆïCüÈ¡Šây£Wg“tXÆnõøäÐëüdCsòÄÙfŽ}6O{{»^¯W¤T{!‡n„C‘ûÕÕ[ººº,ˆµQ—ÑÎ}Tʲìñxêêêóóó;÷؉c.‡kåÊ W)±ê¡† ð#õó 0 £yÖÇj+‚}FŽÍ’$iœ>\j' ÏÚ4c¶Xú £§·]§µª7O¦mËj"=Huþ»:°#ž@ìÐâ[ôöÅ3.Zl¼+™Ë¹ªôGŸ4æ–\a7ʽ¥)efÎòasŽ­7\Þ¡ÏE0¼iåìç?8­cm¬E«`ð Êájdž K>~÷¯ßüæ7›››GÕF½>z½^ÝI’B GßÍ1wX«îèÑV>Á·Ë—Ý4Ø[Š+ÿ‘’I½½Õ·ßn’$ïüùSŸzJÅÊË×'Âiõ„Þ’œü›/¾ä°ÙJž}–Õhª}4¿¦¦õ{ßËzùeÞ2ÊK]ÔãqBˆÍfɉ ób¡«I"–y'«Ë3§e­ˆ(ŒA nÁƒ!hXÉè2YÞ¨‰C@Øa"êhBˆÍft%†á8ŽeÙ–ÖIÀÕíªkjAD‰'ÿQhxö­Ÿ]É2 ÜtÉ<Øs¤vǑƴ$­ß/l;P}Á¼¢×„æ?-šUH†öæ$¢Wýš!lYYY¨’Q¯²ºµYÃb,˲¢àØÚúvvüí—j¹$I²,«ƒ”Ôx¢(jÈóüÚµk·lÙ2mÚ´žžž@  )”³Ï°wò¤6cÿvvB‹µÆƒêGªžrB¾‘(ŠN—«§çXìAyЉ$âÿ{ú|þYÙq­ö§Ú£(ÊéÓ§u::ÁP­ßÃ×Z­ô5MdˆòûÇ5°@ CŠ¢èr¹\®îE‹>z´±®î²ËÖg i¥Õ‡ o„KPÛiÒ»=)U×ÕѧËþµUoÇ ñ##µ§Y—÷úª,æ·«1ÂÙ †ÝG†a0ÆêOªcèÐG€n+}N.Bn˜ù“ð¡x¶¯Ÿõ#F3!¿B˜¢¢¢Û·Ü{Ù…ïîkªjtò,X“ô·­)a”€Ýnß´iSEE…Õš@@hè ¥ÛÙ §³ç­lÝóê—mæY?ºxÍ7ÔG/왓–çŸ×:þ©S§=÷«ÓkjŒVîèÐôÏ.7”–)H¤žmIIÙ³Ï6ÞuWfW—ãå—³z(væZÎáèĘ 4ày÷Çþã æù~‹%ÖÐRV×éè«@­F«ª°[ôzâfÔ¤Îû‰×t‹Î·SJ»3~*Á ÈRÿ•0ÈêtüêÕÌoàcÇ¿Ÿ5ĚÑ–šµÇëõôy<‘~Xd0O‚R]{cÂsœÏç«:]uíÕ1T¤Æ¡Â¯½Ô$¼‚° ÖûwЦ R‚d)¼ zØå ;‘’$jyMw·Ëá쪫­ÉI›€õG"Ý–Ôáì›]šQÙà¸nÍD. & *  &ÂÑG‚ !DýcL $%Ñ ŸÈµão¿Â¨b$X¼xñÄH¡L$g¿!ˆdbüv¼Â#“ ÝŽÝn¿ñº+*ÚYŽÓ]3 ¼†ÏÏ´¦¦¦Žž@ubBóçÏ'„øýþð˨ª1ìAÂ`Ï,ѲŒ„ªHÀØßå^¿þò‰êDŽ颩¡>ŽE€} U²|¯@Vs)³ÃëD B˜(KTÕ„EQ¤5è"»QC!ÃŒkÉÙdØç‚a˜yóæ€Û탅……<òÈÁƒ›šš¬V+Ã0UUUãùóGÿ† y¦*lÛ¹í㢒ò’Š+óÊŠÛ·÷”N§Óétz½^£Ñ¨ß`’Û­•eV ee݇ëÓO“?ý”3½+Vtƒ¸¥BªU¶·ßÖmÙRc·§¬Yƒ !ZŒ%·;¶9,¸å„aƒy¢(ºœNÎÐÙÛ×ÙÕ™‘‘>†U£Tt«üÚ ´ÐͱˆÑeŠ2ãªÞ¨ €1È¢$AŒ1bY!eB&{<½­mÍMÍ.—«Ûå*,È7jwC¢¶'Æož˜š¥X'R_øÙgŸêõ:Že9žSc¶“l%¢S[ÁÊ€w‰EI¹ôÒu}}}IIIbÏfgS(ÿ¼œý† ’áÇD†çÖÅžd [ZZ|>ŸÚiö"}xSQçA'''ê01 S—S—“PÀ/œí¨žÇãÁ ŽãTûFc8hÞˆò)Ãn%Ïóã@ £QEÑëõF]X\Q<>¿WY¢¬XqA¢Ýýa†=+|"|8„1&XQ! Xƒô «g˜÷1rTℼµ„ÇjDz´á¸zX…º?ìk†c“ªß9†âŸ†Õ;Òs¡Æ€%I ƒÛÛÛBiii¢(Ö××§¦¦êõúÎÎN¿ß»ã, ¶µµ)Š¢Vê]P2ëŸþ%5#FxôÔ{¸¹¹9++kÔGoØ¢±ii½Š’n4Öÿæ7H£Ép¹Q¬+/gÖ¬ñ8êÚXÇi.¸ ¾ººèäIݦMíï¾kP£NWÛ×gXÍ1^HhÑÖƒy€ãéó´¶·ÚÓRW^°z‚Th9.)¤BUÑÓÓ#I2OüÍû7µ&¨Ø!Æê°"ÞJ‚VwG èÖ‚+œËåJ²²²Äîùt›ùÕ_¬Õĵjüz5Ñh\¼xɱcÇdc"Kf)4™ÂàAˆJƒÄË0„e˜…‹æ uÐÂPu{öì ql6Û¨ŸW³ý¢Pþ¹ú€L^Cÿs7®ž>„Á`hkkûè£HĀͨ4C÷$''§¥¥%^šÀI‘hµÚ… îÙ³'Döz nTÿ†GvªÅ_³fMl¿~Ù²eN§SQuì¶êC¨#¸Uc­V›”’R[[žÀó¼:4“çùØeÏÈÈèëëéhhÈãyB¡È0áÄΧ‰TÁqœÚ<“ˆÉQOEØŒ FÆ&vñ'z‡}.Ô·Y–#G¦ªÓ±Õ®4I’<ÏúõëO}ñõ÷:qâÄŽ;pÿ:MQ †žÅ0LZZÚÒ¥Kc_ØEãx~ê³Ïv}ï{¹.!¤Ïdò­Yc½ùæ°[ á°÷#´½õ–}ÏžR§“eÙn«µðg?ãÇôÕ%A‚BP½[8– ‚ öxûŽÎNGG_ŸwJYÙ¢…cìsœX„Þì×äëq½â®•»k@±@ÿÿBN%D^´F¦„ÕšÔA5Ãæ?ž{>¡iÎqêÕh4¹¹¹6›­°°(ÑaôêÊ»†‘ãÓeeeO=õTøãX?üp¢f‡IIIó¹ʹeØ»wò‚øŸ;´ø–Ǧ¬ºùÙodÄ[”!¨SÛâ]€W]0O«$§pløýþ`08áÕ_$aRu º¨Dxf‰ê6q§ÑhÔU‡´Z­êMNƨ¾HïívŸ'fLÃ>ýsQ\.uÚ˲ǎËÏÏÏË˳ŠLÔ£×wü¸ïða¤ÓéÊËeeQ¡úÈ7@MPY‰A;k–eæÌ±©kjjò|ýonšWû DIôû| æ/Ï‚ü“¡" t¶Ô…¿\!žçÓsŠéŽH\.×SO=?üp¢kÓFR]] f…rV8xð B¨´´tØ£“ÔŒúÜ=ðfÇéí›'À‰¤P( eòP{ÖÆãAªTWW÷ôô¸Ýî‰0ŠB9¤¤¤$''äAN*±Ÿ;Õ‰~L$…B¡P(ç êÒWão§JJJ& ålsNœ´xž»ó¨O™B¡P( …òÏu") …B¡P( CH …B¡P(JÂÐ1‘ …B¡P(ÿŸ½ûŽ›<þ¼’n/o;ñHœáì½BH€ vBʦýJ¡Œ”2JK[ »Pf $d’½á8Ãv¼ÇyÝÖxßß²Ïûlë<â y¾ðY§Ó;¤“½ï+ E ["B!„PÄZ"·mÛÖ³ù@!„Bg‰~ "gϞݣYA!„Bg‡ÿ¾Á 2¢7S#„B¡sމD!„Bà !„BE ñƒB!„"†-‘!„B(bD"„B¡ˆ ‘~áÈ‘#uuuUUUÝ‘ÔMl6›Édš8q¢úgÏnÄf™9§”U{ƒÓ)qæÌI—k£h‚ œÜ¿1>9ÕšØ÷l9Ó…[­àT,Kø¢ }2úFI?o&“©KÖãóùºpUF£±KVå÷ûÛ]FÅòŠ2íëLNJÖë ÈÔi~ó›_ M‘I ?ûìs]µò³TEEEMMÍ Aƒz:#aD6&2''‡16räÈîÌjËÞ½{/¸à‚|qÏž=999ƒ êÂØùÌh\¾¬ÚËq„RêÄ‹À‚„AÇÇÚ:u Ü™[¹÷D­Ù(€Ç';>+¡ ²xº‰SÛ(š ûÖ}RÿÍÃ9™‹æÝù\ÛO+((` Ý‰Ö>5jT÷mˆ´×ùíó„Œ}ÆÆœ».¾ÆU¹\õϧ¦¦FIBÊÊJë]õ6«­Ç“8ט 8<…Vãõà> ›6mš>}zDé¨_aŒq×…—^ZVUV^Ú'£ÆD !§ ÒÓ2:”ZWUü³´¬<'7×bÑ ù$„ð¼þ³O><8«WRrpIGBoBHRìr………7nLMMíðŠ‹‹g̘‘žžÞÆ2›6mr:YYYN¥ûDÖYWW7sæÌîÉ Òªc”1cÆlܸºz#v23ZìÌ­Ìί³[ô²Àpy¥Q™ŽîˆÀšY³§¸¤& <VQã¾qö€8[ÇÛvçV§¤ÄÕxDF!6μãhU—áÌÄ©-µV4žçìøÁýÃSRâåK~£(JÛëaŒÅÄĘL¦ââ⸸8ufeeebb¢:]VV–’’¢NÝ………Á£p~~~·m`|_w(ipz rÕ©gßMÿõ:}b¦Æµét:½NѯF]˜çµ«Ï@aɲ\TTÔ/¦¥¥ B§’>CˆÒî}o(sJƒ+uà(ƒï=wfÒÏÉÉ!„0Æ(¥Ç@èJ’$žçÕë(EQBP¿%IÒäÉ“5¦Å“eYË’ÞvT‘·¾»œVïW€cD®*ñR[lÒ¨QÃdYhˆAÏqdÏî­Ž’/yN!Œñ “Ä1Üü×¹=¶KPJû÷ï?~Üpê?„B!„# Á¢@ãQÿà8cÿÍ?mk÷AÝéééV«UQžç»¯,Ù6À^ìhÐá«RuóuíFìdf´Øw¢&%%®Ö#R`”eÌcÝÛõX3?*¯—8…3ú%jÐq‰±6Qêø3ùsNU;ì¦Êº@½×Ox:‡Õ”sªzpF\æ¹KâÔ¬¬,ŸÏ§qùÖŠ6,31ÿàÖ’/ªªt]ò¤Éßî±2¸;1Æ‚]¡ÓpzocØeÚØ'»¤heÕ^¡Ö]žs*eHŸø4©~Ë» ‹žÐ¸Âˆ[WÕ¿z<‰¶k¯  `úôé‘¶1Æ6oÞܯ_¿ˆ¾ÕåÚÙ1ôz$ÐŃ!À:Êè®ÖC<Øa°ò8à)´uT[[ûúë¯G”¥àÅRÇqv»çy¯×k0Àårét:µ§»¼¼\½Ö n·;>>jjj ƒÙlVËY©µép#ime±\}À"ø…awÆ¥fÕÔÔs.Él±0¦„t,à’ûÝSQ”[¶ã_Bù¾úêò˜ÄVÛÿZ+ÚÎìã0aÄ€fºÌŸë=þ¼Nßá±Æ ™„õOF@–”رײþ¸¸8JiÛd½ÖåÂECÀ¤‹8ÿ©–ðAä¶mÛ¦M›¦(Jp¢«FÝ$ªF•uwfrNUÇÇY+jü~™RÚDº}JRŒ¥Ë#°P'JêO”{%¢¯®=~o¼ÃæÐwª¤{NTs:s@–=.eŒsÄ(zaç±®,™‰S[ [´¢ê@Ë>òþ¯¸ºBúÂq³¯”¤öê1ƪ««ÕÖ”ÂÂBuâ‹ÂQÐtúÅÁéñÐ4pkcÛ‚ÝÙÝZ´=dÔ¢{WzýPó¾%Áá«)nE‘cMþŽþ$xžo©Àã?Nyúé§[~Ôv/^TèßæÌúzøß§P¿ ©P»Î%n8n„äjØ•#Á´JÈßßµ¶Ž²²²çž{nÚ´iÍæïÙ³‡2f̘fó7oÞüÐC5›I)•$I–eµ¡1Øá«î¡{~³!êŸ|/?à—Ä0?aŽã|>¯ËU:SÐéLFMãA’3Ç¥ö¦+/ÿéó9Ž*Š2€1Æá(5Œºêš””^Äà(ÜÊ Bû²íÖF©j„Stp"Áa Mÿ²Æÿ²ÓÃÊFUµNþèªwÊ}öýIÿðÜ»ÛYv ÙtÆõ!“û²¾q ý‚.¢ji&ü˜Hu_gŒ':œŠ*Qµ)µdf÷q§Ñb÷ŠeÀ(c² ¥’¢Û}¼zPzlwdÌå“Öì/5[íµuÚ'Ï e”c´cXYë H S*‰RZ¼)÷Èu„Xx¨¨ñ&ÆtÍèûÝǼÞew½›2ÆÅÄ*zaG®³cµ¤±¤a‹fŽ3Iön}ù΄@ÞqÀÝ÷>#I’ÆÆÅÅ™L¦ÂÂÂ#F¨s¾(„óÛ ´!‚]u?ýôSÛiu¦hu„™+ýêy¨-°¸®>õü܄˟2õ›Ôö ƒéîÛ·ÿþýZòpýõ×1Æ!,dÄg×&#F 9rd¤I„öÓ6>m‰ž᳑™ <±±åõ5+}ì%Ìëì]ó>S¤Þ0“>ú `!ÐÚÚ¦OŸþÆoÿ”–“ïÿ? Ûõÿ×'ËÁñMçü[n¹¥eÆ(¥~¿Ÿ"Ë²ÚÆ¦(Ê¡“þ:ý“é®uÅŒ1ƒ™$g n·DQT{·¡1ˆlYưsÔ™Çëõ€¬È®úú˜˜XÆN‹D Ç‹Ùâö¸›fâq»ÓÒ3ô:}¸j>-]@)£”ÆÆÆ^xáümÛ¶´V¡(ò˜1c­V+¥”1F)tx_uXLa燥%R³Aš#PàÄ$ã ¢~hºsÿ @àwú•\xk×®MNN>í:²S+Vå½òÉ©÷ÖÑK/Ø_Ï]Á|ÙQÀ>ÜEì&²h„’£¥ ‘UK3á["ƒƒ!4ŽŠ@gRǶt7 CîÖÌTÖú€õ>YVeðY F…²jl¸ÊZ_WE`¡Þù!711±Ðéõ»Ý '¦··\Q0Úá3ÝÞN½ÑX[/üi£zÀÿ¶”¸)±Øu{ŽWÍß1•µ>Q&2£¢(e$š2·§’nª%UË¢mŒ€IVhµKŒI4ì=î¼h|Z×&úáÇS’ã—ydÑ?sx|F²(JÃÁ®J×™l±ODêÏJžžäy³K„cE® ÇRžëì[Õˆ§¦^ý©Ý§¶Ô²h„YýÂ’pøÓÃ┫î2åR-Ù*ÆXUU•Óìß¿¿1¸iÞÙÖ–-[:u5ÓöV;Àqå_ŠW?nrXuæ&^¦£6Rg§Æ!]Ó›}’øY±\_ Ÿ}ªž‹‡MžÛ+5£Ò%Ê¢d³˜&Íšdëªråd9œLÇb˜µŽ…0úA àùýû­:ÝÔÔÌ”x!p›uJ˜ÒúÙ¶½{ÌUá›ý«¡M’¡(¥n·›"IRII ¸Ýî‘™\z¢Àã@™² L6âñx Àår—˧߅£Q°%Òçó µ?]„`©þ´uº†QxŒ1¿ßo6[(Õ–õ°*IRE}å7‡ÖAïˆ7è »Žîóø½³ÇNDoÀWå­œÒ?3£ï™<¶5"@p;ôŽÝ`Øs ¥ Kú² à°è ¨÷ÝDÆ•SpðÁZú÷™ðá‚Íœi½ß^uÉW7CRžƒ!I꯽Û´ðAdpèFË1 ¸~Ë7»–«ÓJî_¦Ûtש•7Ƕš_-ËtVùÞƒ~m_qôí…öàLZøÊEÃþ2äËÃ/ÏêªVïáè/mÊqr)ƒ§ÌÿÅ#¿]:½w;×b‘ëÒß´þ¾þþ£P Ö%ŸV}pyð!6Rþ—ßýÈ›NzƒçÞõü?½0%L Ó}?h…Ò“¥n³Ý!+L¡ŒPi@/39á”e(c5^æªwÍîŠ,èǽE‚Á|¢ÜÇdy@¢nÚð^eÕ`LV:^ÐCyN‹ÅâtK<“&f5Üe|F‘Í-0 à8p:ãĉ ”•>|øü .6rLL﬚ÂC° .M‚Ø10ðwðV õçþÔ‹âæ²2=Ï/5èµGû<ú¨“çùÇžžÁ(ûÏߊ^yòmI­ž‘ÔNQ“ÉÄóz½u^RZÍ1Ɔ¦±š2™çyÞb±0Æ<^¯W§;P¡-‘>¿OÅÜ“Çò+‹€¥ŠÂ˜ÇíÞb±òQ]ôŽI–5Dckˆk2™,{Fïô[Ï¿†#H&z°ìØu³®TO2ßÜ(2Éd2Õ0 ¬SÃ;µj? bÌW@œ¥\¹?àðä9’Å´¡© ¸À+‚y* <RTϰۘÓKJš:{=z PöÕæ£ü0sÙÂô[."Êà“¡³/]ÿfíM×4 rªÎ¹wKÚíCS®ïö[Ö‰ ÷ÞèY÷¢’¸èö˺áÍ/+ܘÔÄ*Gß}sKŸŸ›Þeý|þM.\¶zÆ+_æ\9ÜZwlÛª×^zeÓ¤ßÏîò(²ZJt3_>%¿ ¯nîu]è¶–<{õŸÿ÷Æ’ËO¾ý‹EWß·ûû{úué†oû¸v(Ïé°[Šë²Â8B“Æg¥@þÖzYaå5þÌxá“Îý»æ6íÃùÎü*Ñ% @™¼×œ?²±©†*”‰ŠÒ±1‘Ûs*Á`x¼þQýÓÔ5Œ°íèQ½`­ó¶œÊý".B+.÷sNU3NWTé@ÚÛQêô@Všcÿ)·«–ëÃoÜ_¼½Fã/µ”4´hcf<·â·‹/0ìþò(™{Ýð»÷?Ù{Õt­¿ M´“ÝÙm=Ò¢µ¶Õ–-ú=D0hÌmp±Ð¾æÆÓæ „”ª¨ãó#¦1‰Æ˜:Ö-¢$"ý´cIͳQ0ÀP 1x؈1¿rxßîc»×Lœ2C°';껇  j’ Ö ~¥q\ËBILr²¢?Nœ`äxýéwÚŽ,|z¼¿^4*Œ)­[4Ç©#Àãñä—É{)0k—³³ÒZÆÎŽIHH—Ëåp8Ôîì'N„ÍUk•¯©^¯—1ðù¼F£AÅòúÊEzÛR’íñ&£y}Î…Ò.ò‹þZO}~uÑh:t Ø?d×j¯ÎÃA^Ï KÈ5^él¨î’“ûÞV´O]#¥ëÑÎÊ[,°ûÐI7LShÕv šDö¡‚÷?²„ØUMHufŸcv+§¯—=¢£°Žœª` 3àÓs ªç! Àïë= áwwðàÁØØXÆXõöc#ÿvÌ„¬`Ò“†?sé±{¿‹›‘©‹7ýëpáKGSïštu¿¬ˆª¥™ð-‘;vì˜:uª,ËÁ‰ÐOe}Sw¶ýóÆ>¼ÝöÇq·€~Ú G6Ü\üâÝË_^}ЩK3ïŽg^ü¿éö/š-³îâÿN™°fú£iÛ^]¹·ò­ž³ý‰?ßžï6gžwÃSÿxfq–ú4¾Úwöºy•ŸÁ”4hÖm~åéùé€räO“&¬™þXúÖ}±¯J?`ÞC¯>7eûãÿ÷ׯ²«ÍîyöƒWotzèf»pé’„yo~Tpý}}9q׊wŽŒ»ãÃ>û^½ã¡0I7$ј÷/|¿_˜œ„ Å;w”ô¿ú—×ë%X†Ï¹ãïs ýRœÿ»¾ÛþùÙî2è=uéKïüeaÏœ›žoV‰¡Á[ènát:·lÙÒr N:U=pt´cÅ[9S~³rÉ`1Ëž¹ç­Ño|päÎdž5Ä@÷ef÷q'Ñ[ý"¥”ÙÍ:ê dörOó:“' PÊêüÜÖœÊ. "õ¾uÙœÁ•€»æ—×4Ž'c$™ÊrGžQPætâ÷Q‹bl\Œµ!zsX ©q†R7«öPceNwJ¼Uûjk\ÿ¬>®Óë€py%B8ƘÄàD¥œç,FcˆÃHü"ÝqÂs¤DB@’äëgfÄÙ;ûŒÐ¢Mš`Ò)+~wí<óö•‡ÄJÙvçÞü|¯¿¸ÒQÑcê!uïÞ½ÇÖqZ¾«6@j¾äóN¬i˜|ëÍÿýÖ»‡ï~|8àY÷Æ峞>oý—>>ihÊá¸d#°¸µœ4àR'NN{üÃ?ým܃—OÑ7Þü°ÍR¬ÜãÇ;ÿ5”;ø÷kçÝõÔœ9¯_˜ûò}-*°WHaBBqqqŒ±U«V…–uÁ‚êü°W V•]–:nLCò}ÇŽ¶ÿaÿ!? ³4_²{2Sæt+Œsy¨Ú—mäé ~ ic&ì-ðË £*Ý o¢‘F`a½õ]Ž#>ÉY/)ú¥óéuÁp™J™¢t¤eWn'dÜ¢gΤ^¡M–üѦbYÑ{açÑŠS#(æõùŸŒI «qù(%ÀÏ»ÙØ#Ô¹ü2e@GÀa3 <€Žc;›´mƨA›Ö¯¶ œñýºmÇjØM¿þà ¹ÿŽÜÊXsÄEKJJ2™LyyyÁçž|õ•¦/ß²aÆ‹Ò\7mµ vûš9Ž»âŠ+‚!1!¤¿æV¢Æ¦À1d~“U[[ëõzŸx"Ì#37oÞ a?êÀC €(ŠÖëõê#;À–“.g>ìý ÖÄÑã¦xJ^NvÅɽ²ß}ôÀ–ŒÃ̱©ƒÆÏÉ^ÿß^ ^¹@v+kÛ·oý€žJ?õUÞW{êö¨37mÚÄqÜSO=¥þS¤pÂZðýÞý÷·ìBå8.66–²µ´ô³Š ¸8.îï;äsÀÄ‘ÿ~Äö3Ç®¬€>sìÃæ¦©Ïíß¹sgDÅg ¼^¯×ëih‰4Àl¶ Ò7½ÓHï0êŒÆà^4ª÷SîRíGû†½±ñÏ””¿ßo0Þb0-#Óéô€È˜wv|ä…z²FmB¡úg N´éFCR¬®döát2=QÂN(N7'J”ã8Eá@QÊá ~ù[÷þoÏS“¦„«Ä0bñ“wÿgø7ëq} €~Úý¸ad<ñó–\”òAÑ]O_>Èà¸òÚóï_¾ÿ„|CâéÁ.?ôÆ¥“ÿò·ÛóüT]õ×o~.ÍuØšgîk#醞ÞëÐ2'ŒçýéûÏz?ûòï¯}æP‘”8êÂ%ÿ÷ôcK†YÛú®~êýÏÜ<&‘w뵞~ã`1Ó^6Û9æÏŸº-X°@ÓÆ6ju»Ü`µY‚ٷج´ ÞËÀÒlëwSfö«`DWë)›IÞýúªÌŒÛwò¤Õh¬vIuÙ¦ãw­ìع<èoÛ±e5¢ŽyçŽNêZ¬L$ ²q)JÊÑÂ:bŽ3빚 —ŘQælz†Ù (¯Õ`¬õуy5s'(!‘k;âlÆ{%~Ü[XZoªóƒøçŒJÊHn÷[Xáújg™Ó§‹5³ÁÉüìq × qöÎâ-Zf¬åøñœ^©}FŽžð³nÞyþÓ¯ûó{Û­†¸H‹ÜU:u Ô¹¿û¶Zcö`Ô¨‘#GŽhÕµl ll&Œô Þá »0‰Ö´±ž.|@Ä™yåݤ`Ð,€ü]9ø{|Š7 Ù³Qö»àðO«¦Í¹J´Ä˜xá¡ÍŸ=(‹éÓ–„};5¥4½ªW&5IÕñ2“ƒ3!ä<ëL‘¥Ùeõ=æhÃG$4›Ólºµ"¢&e6›Ôgø»Ý®€€>æ¯×§¾2‡1¦w ²¹qׇÁ:€¦³H‚¼`9 Çqƒ¡áªF¡œD‚A$èõzƘ¬HŒvü"8)!‚ö9íwg›­vYgS3B\\Àj§DQRD¹Î§/q¼ŠIàt”PƘ`²²²cÙÙÙF£µºº&77·Ý·çææêõÍÆù$xm}j¾:6‡~zñµœžl*ÿ!Æ3&fªök­ˆª¥™ðc"ÛnÅ-g ­â‡üòÝ×Å?=tñ¤>qèù×Þ·üÆqqá~ñ\rïd@,.(öýxO:Oðb¿¡Rݵ¼‡Þ}äÁç>Ýš[V/*Œ~ú‚Z 1ÄÓ8zB§7Å4>Äèô:%Ü&ç2/óÄCo®}ròˆÿ½ñíš//¬ÿï½­&ݔörrúACß¹¼2÷Å]°õ½ßÞvÛ>;ÏyÑøôHÏåA_mÍ“‰¡¸V¶ JŠ R,¥U®à§Uu>Y¡ PQ–#íIÉΫàtÆ:Ÿœg2Y­ï­Ë`ê°áVo½Ñf «<¶8CöÉʱYmü°šSû£EI)« pæ¸X=øëÜ¡$¤'Ùô¤8În÷ˬ°ª>ÎnRkIK)Ú^&X´áŽéCµÕN£Ñøíwߎ™0}âäio®>Æt)c¬¬¬L='íÚµ«1´|Wm€l ‘:T4êwezºi«5”Rª¡0ô3:°1’hÉáp˜Íæ'Ÿ|²åGO<ñ!$ìG+V¬Ð’h(½^ßò„Úí+o¶dÅq4 ¼5 ùŒ#&ÍôÉ઩8¼õõSouanöîAæ¤ ×{Pù©ìt€"hº§¦ÙÚÆŽ{ý“òá‹!pIÌWg>úè£<Ï7=†ýë¯áÕWañâS§?³]]U°;»¸©eŒ™%oo“4Ú,1Æt~eÜuvƘ"0I/¹ÖÊ ¥S§N3ÆÔ}-k#ìÆ(cÁ»³™×ë5™M@IIIVôÃv£”`¨§Óé}>Ó:ÚûRhøQ1ÆÔ÷4¿å­õn–Ö:«ïW¤ŠB€¶1—íW-iïÎæ1zŽÓÉ"/Á+ÊU¿Ó£HŠŽŽãÔù߯¿âI«æx6Ê8¥²´ê»ï¾»æškÔÛ¤ÚȉÅbQŸ‘:óí­¬OLèÛTLŽã>Î}Ï` %®3oî«Ò™âkÔ‘îìí",<­•ºµLY—?±âò'€ºr?¸{Þ¼; G?Zìh¶LÀOIM±^òÇã_ÝÚâaAôäkwݳaÌûkÞ¾ ‚…/þÇì!ÿíÄC÷IÂÂ¥—=tÓ›_Þ6î­Í}n|ö<‹°©µ¤CsØœðÖ>çÝþàµÿüì‹m'ÅAë",E¸ #ÃîmóçÏÏÊÊR/qÚ«ˆö‘„#RŠ÷î­dz%Ͼú †…E×™9˜_©3Ëêd™2`Ä壼9¦Ê×p›Â€˜b<J)È”UÖKÖ8ÃÁ¼ªˆ"° =¹å'Êýu²1Á¦ózÜ¥uÊŠµyŒ)jÐÀ½ÉRW¯(|Ä»ÞÖƒe"±û´¬Ú`¦ŒQ eŒÚËL)«ôøD…9½üæ¥(ÂÁüJNg¬öHiñ&9`~o]ACpÐØU:£Ã¬+>å¶Åw¼–Z+š,Ü‘qÅÇâׯ_7tÈô#_ý¾¨ÀI¼cÇŠ–’’b2™Ž?>~üxuÎ7Úº³Ï?ÿ|ubݺu‘ vý«uÿ³sð ¢>­›¶šzæÛ¿ÿ@vvkÝž§Y´hQ¤1k®Ydó4ÏAVAá>ðÕ‚-qpÿÁ#d…ؽÝW[Òð1c6¯2þ|¯¢>ý²?½Ÿ=à´õöC;ô3B‚ZÞVRØl”öCBHbb"!äpÍá÷uïÀåÆËó¸¼}l,—'ýÛÜ@‹wœÞøßÆÆ-ÊT_‡ÑS ÔÝÁb1«¯Lt»]¢$€ú§:°1¨ÌbƒûJ©ÖÇ 5>â‡1à8.¤¥•ùë}5ÕÕlDÓ.ÊqœN§£ íDovd´wgs|øðáÚy!¡Þi „Œ1Æ"ë½U­õ\7K¢q1|ào5…ç]q¹ÈôzJOï;êÂàîEx³$Ÿ‹é×oȸ-Öø­ngëkè3{Á̶–˜0Þþ{:ƘzÊU²N0L€_L] cŒq”#ãí Ås¢…šÆÛÀo§uuu/z‰ ˜hv]Áƒ†ç‰ëÕ;ký,ÀÒCÛ uÚ/I¨YH‚Œ1üÔ#ÉÕþà\N'‚N§cÀ:úÄ^€oCÖÞÍó¼ ”JT¦’£ÄŸH’|6©B (F½Þ4pàÀóÎ;¯¤¦Øo®2è ¥®2³Ùœ‘‘ѱÙÅì®ÙôþdXã€m£Ù¸bÿŠBgþO'7_{ž'àýþØ×¥žÂÉc†Û'µÛ¯}¦ïÎÊÃioò!ñ øÕ¿X”ü×Z6åù#?,½mï\ò» |öÓ¯{ýo×'€Ó—YwqÓ×¹~Ë>ü†<öÛ{¦>z¼Þ˜>rö ÿ~Ž €|Çól»ûš/ºŒiã.»ãâÉúÝ(cý¤Ûnü÷ÇÍ{bI&­&ÝŒ–œp×]š€âÊz¿Ì×JTVeLàÇÊ@FŽeŒ"3¥¬ÆCí|ÄçrIVÞüúoMö‰Ô®ó*’ÌÁ±Þêõ1 `·˜ŠkA”"»;{û¡R™èE™I^×Åc“z%†Û±J+]Ÿn)b¬ññÛ•]93‚"hSõÀsSC©®¸ÊwÛÅCþûÁ{k¼^–ž‘1q„øÄ”z·ï®ƒ)¥ €*´¸¢>Ò¢1ÆŠ‹‹Õ‰;v@Ã6iCnûyS ;Ö¨æÏß]±â¶´1™–{¿šœ)GžØ3ä·óÆ&wÃVcÍ„m h:³ªý~‘é $q1Ø“†ŽšèöS«Iwñµw+ —µ¼NWY§˜,)ýÆÌÎÙôq·æ„1¦¾>4Y0̳¥ˆÆ4½}„YaŒ)•`MÎfŒl6Ÿ.ÖœXCoŸ¯a¼xÇZ¤Ô]¥ñõÜÁ°ö ±>à Ô‡îQj{!hµH)¨1nãè `Œñ¼P_V¨ôˆ¢h4ÕðQAêÝ.F:8r ºíîìØ˜˜+®¸Âëõ(Z‡¥–³‰ 1¬Ê/Ä÷æÓLö˜˜g_xö}ïTºÊçÌ•¢Ê’±ÓÇå°Ó óä@;'—õë×'%%€_b/¬aonaË/äî8¯á4Jù:÷뜊ƒ¢Á7jȈJ…ŽÓ™öÝUTådLêo„vP]ÿîlµñ–1œhþ½Ð‡‰¿àéŽ7½³¡ß¯WÌùu³/4_æ·»š†‘˜qËþ±zÙ?ZäŽÄŸÿèÊC6Íx¸áÿCB¿®›ú±òà_ú¹¯—žSR?ôÑ]bÈ [Mš?-‰Ösš[[Ö¥¼vé¯5ÿ@S)Àq×® cN˜ ì-6%I\ú­i¸Eu}/{öÛËží–l´’€í‡JLçò)”‚AGR̲?àBÔÆPÊ#êE5§3æUŸÈü«?(¾ú‚ð§ü°^ùr?o‰¯ó*6Î=shbZRøïVÔxþ·±P¡¦6}j Pü¢|¨ Ú¯KÔjäÄ1ƒzµ¶dJœõÛv£Ñ- òœ—L‘Œúð—v-m;XŒSçIl#âùlk™ñl=XzåLMµÔ²¤<ÏBJ'Èxüч+++322öìÙsë­·ÆÇ'0ErXô<Ïs§6WôJ°ïÊ­ªWÀ-j-c,55Õd2åææNœ8±aæ¶m¡ïÅÞµºqãÆ3f¨ÓëÖ­›5k–:½víÚ¶7SËOk×üïWy¬×õqV‰seçc-ûuèÄVSÏ’ÙÙÙ‡ »€ÚÝÛãc„‡Ãny¿3aÄ+—‰¶|—yØO Lúúkð@ÇKùö[PæÏ×M™¢ÆÁ˳vKÍ£”²Æ½ª¿èÆOš¶³Çã–ëüŠ?œl/ÔR û'0Y–ƒû$m"YZPRë¬ H¢ÝnÏËÏS£Rgµóä©"Â-ë»@D/‰n?jœ™––öÛßþ–l Qÿß|³w³ßÝV¼‰˜˜£—¹^®ã(Ó;Ì?•ïP $³Ɏym˜9s¦ÓédŒ]ù*•öõ=Ü äÓrDÙ“¿_ç qfo ÁåòÕW'›­TÃï«ë߭囨§tlKwÓaºk3ãåã%.7'+2¥à0RNq-9?³ÙŒÂqÜGëNX VŸà–…y΢¬ñ\þ¿x©©ÒÃzÿè>–‘ýâ›ÉÔ$8Ž£ mhuˆä?Ž—ƒÞê©÷Mœ(IRãÕv˜$fŽìõé§K1ÈļïxÙ䡚^äèåçjÔ8Õ@#ú'¶–D¢ÃŒx²ó«/Õ\KÍPJý~¿(ÉÏýåÙüÑf³8q‚wàÀuDŽÁ`0 F£Ñd2™L¦92¼ÛË÷ž’"*Z3¡%jmºµå5J^ºÂwlsí{×—¾÷ÁŒ[ÆN鎭”²¡C‡:$\ö¿ ½]'˜DHwv˜¾ìÎ'qŽàõæ¬ÑçdÎ]™÷ñ¿‘¼u¡Ÿª!Âè‹–fŒ¹$¡ïÈØÔ!΂}Ý—Y–Õq”&Ä“Å@ktõqq¦,%¾ðê«c“©Þj%W^ θ8(*ª¬¬dŒií¡Ñ`,¯(£”©A!Äçóô†àîŒ1Nï.«õ‹>EQ‚á£Ú^èõyŽöoøeÀE–ÔS’DÇ»7{ß–ÛªŠÊDxþåFÑ;¹—Ýjw¹]¥e%¢«®ÝÕ¶!1Þ¡}a-Á`8yòdaa[ﺌ‰‰ÓÅìS‡Íñ¦‹Œ#É«.53½H#¤÷ü•d@'œÞ+È›ÓwNþ€ü¼ò¼ »×§Ó‹ÀÇÈýf ¾xd¯1.A„vº³#ª–fŸKvîÜ9uêTI’‚Nu¹Ÿq¹ÿXg°xÜŠÀ¢x‡õ1 ÔÏ5ÜmÊ@=…sŒ›i©<è3éÌ @R˜æ½ÇJ§ kç%ÑŒ±Mûò–¼ÌfÕ‰q:ïäÁ½ëëëCÃ…` Àó¼ÇãUEà™BeEV˜†‡¡0Æ6í/ ø8»à“ýþ½S].—¢(­%1 Õ¦“òÓ-’$ÒŸø& IÕ’Äžœb5NµrÞ‘}¬m'19+ö›l¯ñì>ZFµi’k20_ºÅ¯±hŒ1õpÌÛ¶m4ÆA¡ïÅÞ´iS°ŒëׯžÒÖ®] ØÏù˜ÞŠ_4ÅØ$”¦="¹‡¹FOèÚ­,N3ÁùÍ¢ºàÆ8í1ÞHâÜ—68½ÿHQRrls»LîöUFÏòQÀñóÚ"úé§eË–5›¹k×.BHiii³ù[¶l ûœHõ%„àII³Ž€RW©Ù`¶[íp˜¶ÎŸœÇ㮬´OžÌ«+*²Z­111PUU¥±Ô ÍßÂêv»ê]®à.$Ë Çqn·»8¿Èð{|ÞSüáœC˜wÐÔßmpXHMÌu®K‹í=#qÒ^w¶zl‘$©<0¼~ImîU/ xž—$éºQ×™L¦{ÿ{ïÁºM᪗L´L­.­ö›ý\7¼ó6¨#wg#ÔM¶,ñˆƒ€BOˆßãí×»¯$IŠ¢È²¬ŽéQ‡0 ‚п·ÛS™bPBˆ"±-JÚ "Ë®•?4›­:â×sÊuó†È²¬(Š¢(¬qìy0P`Œ ‘ü>‡Ž*’,ð„RÊóíŒÈ HJjJœÝ+3`:κzS¥ #Èe !p„S£’¬ÌdY¡ÇÙŒº€( º¶“ ”n9XðóvÁ'üÃû n»C3ã¿ß]–n1I"ÝzÐ;yhZ»¥hÉb±ð<¿lÙ²[n¹E’dQ%Qôûý~¿_ Õät:Ú© ²$.š’ê (Ç9¬Ævk1–žžn2™rrr‚]Ø[¶l }/vð¡âëׯŸ9s¦:½víÚÙ³g«ÓkÖ¬‰´hÀÇõ¡}f•ìÛ—ÙËW뮨ƒvv ž¿ÿŠ¡>‘j,ZH: C"¼¦8/lwú ô¨H¢%Bˆ,ËáòÃàÍ7ßlí£¨5xÒNÐQ_ÝÑmß´¶LmÉÑÂãûÓ²Æ÷6aï÷‰¢«²å2)))<ð@ËùÁ1-秤¤´œo4c@@í×v:‹E !ê» !µµµêtee¥ÕjUïÿíäÃ5iã!ð»Ýž-Û·ì;x ^p!æßo¼:0³jJo«ÍV^W_^Yž’’¬å1L €RE)ðSJÏó‚À«¿2žç|>OYyqaÑ)§ÓYítföícÑ+5ù)Gº0¢"]~ÁrA~ýɯ7¸¿4˜éø”óïû,ËíF`6›óòòòòòÔ?KKK{õên·›¢^Z”––Ž1b@ïÌvZ§Oê5-õë•_WVVΛ7oذả ÞË£ýa•èŒéØa7ä½™Y:¤Ë+ªÍ?²,[Œ‚QÏSJ[¶Bxž_~ÍHo@ŸÂe3ëÛÍOr¼mùâ ê:V½Žç‚·.¿Kqg±__;VV˜Ñ Kˆ±h)r­;p¬Ô'Ô×-µ¨”ñ„úú¶BÂP‡qDà€j¯Æ-¦´×ÝÌqÜ‹ÆÔ¹ý”R³7um—‚òë%cÔˆÇn1¨ n;‰– x<u…ê¶ jSÕj ŽÙW'‚Û—ã¸X‡5çÕñ”Zj¯íœ´6ÝnæÛý”㸴_¼S¿ù­ÒœuЧÆ>Ìl6·]¥f³zªÓZ4µÞÔ¾æÐÂÖZ[v4GIaç§¥¥EôÕÞ½{8pðàAõÏøøø)SZ}AEÇlݺ5ôñ(m$ѬhœÎPxâ «ºÌUçtlmýJÀ³ÿ‡·« ɲÂëšÞŽº¶˜˜˜¶šÛRheª«’$©°°PÝ'wîÜÉ“e¹¢¢âرc ŠâÖ­[cê•ÏæÍ›ÕJKKsrr ±O¶åæÓò“TW¥X4Œz½aÑüEW^ve° ;lÚ¼ÑUï*.-NJL8ú¬ö“µµ’$똷pÇŠ’ì¯(PÆ€†Á‘@©¢PJ)“™.Žùã¬jÊ|þx©"8N{|«cÍ[MûnÔµÚ?“žÐÛ¹ÝétJ_¬¶hùnRRÒÕW_üóèÑ£ƒ €ªª*ŽãÔ‹uæÃ…YýÇèb&%OéwÙAÚ~eª¥™È†Fuêų‹tà4Ìq¥TÝ|]»;™™f¬fƒÕÁ;Ê:v›q¯„È:DÔw6hk3 J3ûü’-6ÜêÝ;6þžÅ¤‹µiªHëJ{)RRRêëëÃ~ŒK _6<þ IDAT;ºHcê„úv5ÅÐ÷boذ!˜ü1ii€l£h@xÁqþ2ÇùÍû»„$IEEEf³Ùáˆ`L}t®Ú>%xCð»Çù|>×gí×Ö›™º;‰¶kO„>}úhª‹V«õÅ_¬®®€¸¸¸åË[½™©Ã²²²ÚM"lѨÈßñ©–$j öÔì ûQð÷ÒÉË'˜4iR¤kh[Û´™€ðž¹#ð0ʨË]_QQ^^QV_5iâävׯÓ™c¼ú>&š§Ôœ«ƒº;Ò†ãdÃõ ڤɀÁâÒà VEQZkþoY4-»AwSåîóïI±™xÛ¢—kiƒ K  !!¡ÙL9 \œz cÌï÷ÛlíŸé:_-dòõOš¹äïׄi9oéĉ”ÒqãÆEš ê*k×®í@ý3ÆŽ9b2™ú÷ïß…±ó™é|:[x<ž'މ¢ÚœÚî·Ô¶O½^Ÿ•5¨Ý×@Ÿ$ºœÓé|ñÅ`ùòåÝÔNQjOqçÕÕÕuáªìöŽ?™+”ö¨±™S§Ny}õ*„.Ø7®Ž÷%ÑëñL?)xk¶~¿¯¼è¤(ŠÚ#lBˆN§KNëéµ=œ‘=M 5ðÕ~ŸSwëpµÜÿqÙÑõFDÀñãÇëêêš=<E9‹Åb4ƒ_ÏnÄf™AãÔcQ·ž×Ï@(úánVǪE "Él¶½‚[96b:wB?Kê ®n=&œ$PôÃÝ ¬ÎTK7ÞøB!„~®0ˆD!„Bà !„BE,â1‘!„B5‘êÆB!„jO?‘3fÌèѬ „B¡³Ã?(‚`Ù×U!„B¡sR&„¾öpîܹ=—„B!tX½zµ:wg#„B¡ˆa‰B!„"†A$B!„Š‘!„B(bD"„B¡ˆa‰B!„"†A$B!„Š‘!„B(bD"„B¡ˆa‰B!„"†A$B!„Š‘!„B(bD"„B¡ˆa‰B!„"†A$B!„Š‘!„B(bD"„B¡ˆa‰B!„"†A$B!„Š‘!„B(bD"„B¡ˆa‰B!„"†A$B!„Š‘!„B(bD"„B¡ˆa‰B!„"†A$B!„Š‘!„B(bD"„B¡ˆa‰B!„"†A$B!„Š‘!„B(bD"„B¡ˆa‰B!„"†A$B!„Š‘!„B(bD"„B¡ˆa‰B!„"&§V¯^݃ù@!„Bg‘† rÒ¤I=›„B!tVø°°°;!„T»víÒëõ‘N „Ð9 ƒH„˜:uj&Bèœ%´¿BDQìÀB³‚ÈíÛ·÷l>B!„ÐY"B["gÏžÝsYA Ž=:hРžÎÅÙëJ;¬+í°®´ÃºÒëJ;¬+íº¶®6lØpÁPJ€1ÆS'(¥ê´úlÞ¼YÀîl„B!tš`P2Æ8®év¡ÙÒ¨B‚› µ ëJ;¬+í°®´ÃºÒëJ;¬+í¢¡®ðîl„B!1l‰Œ.=~UqÁºÒëJ;¬+í°®´ÃºÒëJ»î®«•+W2ÆæÏŸßÚ8&!„BfåÊ•jÙFÙÔÍÎbþÊGŽJµÇõ™°økË”žÎPÔ7üª¿Ù`0 Æø›¾ð÷tv¢š/ÿ‡—îœ7²wŒ-¦÷° ïxe‡“öt–¢uùôéfëëHê7éêß­Ì ôt–¢ž”ûϹI&Ëè'vK=•¨X{o“!ÈvÁËùxpo\¾ñ¥Û/Ú+6>cµÏüXŠ;VxîJÙ­ £mÖßó~ž{Vhtøå—_®\¹R^µjÕªU«Â‘ç`w¶”ýü’Û¾öòš“ óß»ûª%·ÄnýêÎÌèÚrCö(aú‹ÇÜ/Bà›ÛûÞ"ATe-ÚêJÜðÆe“|ïÑq™ÆÂÕ¿¿ýŽ+îOØûΕñ¤§3ÑVW¬æû·¿1^ùÜW–à;ðö/¯»ùëæõ á{:cmuÕ@:ú¯û^ãÆJX4ý£¬®.õ®Õ‡^œ¡ ™%ù‹²º÷–'æ/^=ö™;¿n)ûñ_¯­Ì™¾lþ[ÒÍþgçŸ ø6.så¡«¦“(Éa7ÕUh©RƒÈK/½´Ù’ç^w¶´ëÝwr'=ðé5ƒFÝöû;ß™´â£œeŽ_:Ké/zꃋ¦—ÿféÞyaÛQùÊ©º6¿un"±—ÿéõ†é˜‰Koõ‡›öçJ%Ad’Žüë¾7Óž|sô¿.|£§ó‚~hÑ|=póª—no€—<ò—žÎÒÙ€Õ~ÿæ'õ³Ÿ»&=:ZºÏ¢E‹.\|`dËçDs-‘¬êà¡òÞcFÅ«æ2F´ýùÀabéé¬DÛX#5CÑ–µè¬+æÜºù°aøuýùhÉ`´ÖõWìÿ½MÆ9ONÐEK£®®ÄÿïÍ´ßýpI§ÿ‚èúFY]1Æhù{‹ÓÞôʶ>ãçßùÔîœ}ÑVWžív³Æ¯¾yüUß÷9²f-ýÃ_žÓ;J®ã¢«®šÐÒÏßøV·èKâ¢'`êñºj "eYîÁ|œ1J]‹™Í¥¡¸ŠÑbQ j]’lèñƒ ÇqŠ¢DᆠŒ*²,GÉ1&Šë ÀwäµÛ–¯ñÄ·WÄ)Q‘¿¨¬+VûÁâw~bró?þ· ‘ÊróKÜ}uÈ~ñž·z?¶ú’XZLS‡=)ˆÆºâf¼˜[õ"õWþ¼ÿò›¸MŸ-íFÑVW¬¦²:PùÓG¹/}°óõâþ×îºþ†[›VÝÙ¯çñÑVWM”c9ùš¯Ï3FK®Î¹–Hb¶ZÀãòPÆ8êqy8«Í å;¸5¨9Šª¬Ek]y½vëU/H÷|üþm„(É^tÖ•cÉGK¨¿òÈ÷½ï¾K´nziŽ£Ç¯ã¢®®¤C/ÿêÝ´ÇV/LF±(hxжºjB Ãýî÷Û¿ºüóïKo¹½wÏG‘QWWf«…†Þôà’á±<ÀÄ;—_þêUßn¨úEfRÿ£®®‰{ß}ïÐÐë_5½&QQW=ÿë:ÃHüÐaÉ%T©µ®œÚŸíê?b°¡‡³…~Xý®—®½â%²ü³9ÆÚãÇâ³gL¶à¾ëGVlÚ”—öQ&phwvÞ§·fÅ8ŽØ¡¿ÞìËyáü¤1ïz:cgü¶Á¿ˆ}ñ¹ÿžmÜÑVW`<ïª9ûÿ¸|áмæ^ƒ'/xîÏsDE£®®B4f-ZίQWWúé7\½ÿ.¼7»X´÷7ïážÀc{k¸Ì¥ÿy»þ7O\5|¹“K6ç®wŸ¹9#**+úê hágo¯µ.zÿ¢è8N5êòºŠ:ujð¦ìàú[Þ½yófuâÜ{Äè2.}ò“KŸìélœHŸ”ÝØÓ¹8Øë>.»®§sq¶0eÎ}ð?sìélœe¸Ôe«J–õt.¢™±ïEþç"ܯ´á’f<ðÖúz:g.ýö•E·÷t.Î8zå2Ú£}¶DF¯èlÆNXWÚa]i‡u¥Ö•vXWÚa]i uuÎÝXƒB!„:["£H4\Uœ-°®´ÃºÒëJ;¬+í°®´ÃºÒ.êª)ˆE±ó€çyI’pChu¥Ö•vXWÚa]i‡u¥Ö•vÑPWMAdð^Ô³ÊÊÊz: g ¬+í°®´ÃºÒëJ;¬+í°®´ëºêÕ«W¤_i "/»ì²®ÊG3_|ñÅUW]ÕM+ÿ™Y½zõܹs{:g¬+í°®´ÃºÒëJ;¬+í°®´ëÚºúé§Ÿ"ý ÞXƒB!„"†A$B!„ŠÞB!„"væ["¥õ÷eêk¼m×}8ãé#„B¡N;óA¤næË§dÆü«nŠéù70#„B¡ŽÀîl„B!1¼±!„BE ["B!„Pİ%!„BE ƒH„B!±¦ ’‰ù+]4:-Îßwââ?­-SXçô`ñB!„PwhÙ)e¿pÝÒ•I¯9YšûÅíðæu·¾–G»0EVùÆÅFBŒ Þ©q}x…‘ã…ÿ.Á@!„BèlÒ¢%RÜùî;¹“~ùÔÕYvcìÈ[Ÿ¾cà¶ÿÍ‘»®%’$.ýÖú±ͽñ‰‘!„Bg“æ-‘ÌyèPyïQ£Ô°Žï3z¤íDöaÿ™ÏB!„ŠZMø‘e”º:3› Š,€b´X”‚Z—$°µ!„B©š?'’˜­ð¸<”1€z\Îj3ác$B!„PPóîl?tXrÉUjȨœÚŸíê?b°áÌç !„BE­7Öc—\Ÿµãå§>9Zç«>ðö“¯Ÿxã•Y\×ÝXƒB!„¢ ‡ãNk|Z|K7üWo¿ê^þÔÅYw{íg/]ñêm™øHr„B¡Ÿ¯ªªª5kÖð<߯2Í[‘ºŒKŸúäÒ§º<{!„B(Y­ÖÌÌL“ÉÔÆ2”RJéáÇÕ?›ßXƒB!„P»°£!„BE ["B!„Pİ%!„BE ƒH„B!1ìÎF!„Bk "EéÁ| „B¡³HS)Ëræ!„BEÈäëŸ4sÉ’ô<—ËÕ}ÉØl¶î[9B!„ê A´?lüÃÂÌ£ë?lj‰¼ì²Ëº)[_|ñÅܹs»iå?3«W¯ÆºÒëJ;¬+í°®´ÃºÒëJ;¬+íº¶®Ö®]éWðîl„B!1 "B!„PÄð?!„B(bg¾%RZ_†@!„³]÷yàŒ§B!„:íÌ‘º™/Ÿ’ó¯ºéÿÛ»û0)Ëràï,ìëbø…¶‚â·xÔ :™ižÍØòsEÌï4¯ÔcÚñœ“Šuìœ>Ô:Z–©¨«†º`e›má‘JÌ2üXÅ/J*Ñxç}ÏÀìì.óÆÌάûû]^^Ã;ïÓÜÜü¥'+3mï¤*R¥Ž¥¬Åq|õÄþ]婹¹Y®ò$Wù“«üÉUþä*…ÍUKKKÒ—äþì!%–i{{ÀˆJE¯ðF©€¾Ë?e'Uá/(wŽø)?qø«Ê›qvREåÎä€ÄŒ³Ë’¿  ¼g—'U$PÖt"ËŽoDåO'²<)#€²¦ˆ,KjH ¼ewgǬþóCß9÷¨v¶Í°ö=òœ[Å[§„€bÈ9âgíÿÍœ¹tüÅ·/Xü÷~~åÞO\vÌù÷½©ìi±ÿòø(™œ5ýœqÇ‘.íSÿ¥3n¾íêGŸ[÷™‰ýKe©ÛïDÆËß:pß“ÆøædŠßÊ[¶< Ãpó§V?{ãéÍÛïò?3<Óñ9ú²®Î‰|÷™O;öêuçÝsÇécÒ6ǰ©ÎÕñ;çäi7ºø¾Æ³öÔã!õyq`œ ”¹œNd¼ü7W5œ:{ÇM7LÛ½R€\;‘ñŠŸçº¯¯ Î;äþó‚ ‚Ô6'6¾ðýOìùØú¬8v~ PÞ:‘©a'ÝóÚI% €Þ¢«5””¿  ¼9²<©"€²¦ @b9¿ [bœ]~œ ”=ãlË‘™L¦„q°9=PÖ²Ed†%ŒƒM8k(w© ÓfŒ=¬¡aÔâ¶¶¶â½Muuuñ`k¤ÓéÚÚÚªªªn(Š¢ÖÖÖÆ%µ‹æ5f;‘õõõE «©©©®®®H‹¿Ï477ËUžä*r•?¹ÊŸ\åO®ò'Wù+l®ZZZ’¾Ä?$¦ˆ 1Gü˜N$‰)"HÌ8€Ät"HL'€Ät"HL @bÙ"2Þ j{ö¾¯œüñ}w>täèñÇ]1wñšxë”ðãP 9ÈxÅC·ý¬êØoþäé¿ýõ‰;O n?uúuÏfJå*wcÍÐú«nÜp©æÓOûø²pÑÚxÏÊ@yêæ;‘Ñ{Ëž¸ýöG*üÔ‡ô\@”¿l'2 Ããwž°û9?_¤†ìõÙëÓÜÜ,Wy’«üÉUþä*r•?¹ÊŸ\寰¹jiiIú»³HL @bŽø 1HSD˜q6‰éD˜N$‰éD˜"€Ä²EdÜÁºç¿ûÉ‘ƒ†xù×u|*¡~<Š¡«NäºE7œSÅÁ{¦»x€>¬óNäÚÖï~aæÎW|õ¨¹-JH€¾®³NäÚÖëÎÿÑÎW\5i;ߘ Ùqu†AÁš§®9ïG;~¹ùSâ¿EqG™Ï@¹çD®{æº gíüåæ)ÛqÄñÆivé" ìtX¯yæO-¾÷´=†ÖÔÔ Ûû’ù«Ÿ»úc8ð²ÇÖ•$:ÊRÇNäàãîXz܆+ÑßnœrðÌñοl\ÚÚÐÎÖëîÈŠÎþÉ«g÷X(ôÇÙ°EÆÙ$¦ @b:‘$¦ˆ 1ãlË‘™L¦„qЋd‹È0 K½Hj´ckhµ¸­­­xoS]]]¼ÅØétº¶¶¶ªªª›{¢(Š¢¨µµµqIí¢yÙNd}}}‘Âjjjª««+Òâï3ÍÍÍr•'¹ÊŸ\åO®ò'Wù“«üÉUþ ›«–––¤/±;€Ä‘$æˆÓ‰ 1E$‰g˜N$‰éD˜N$‰)"H,[DƬiùÂU¶Ûæˆëþœ‰·J ?ÅîìbÅNç6?sÍ¡ý{:z‡Ü5qolK–*(Ê[§ß‰Œ^»ãÄQÃ†ŽØå€O~þ†Ë“l&Û‰ Ã0‚ ¨8ôšç߸&¢÷^oýùµœÿéS*¹ïŒ]íÀ`£Ü5¥ŽØgê_6ôw÷ÿâÕ­ÚZSÂ@1l©Á˜ê‘(èUr:‘ï5åŒoýäO¯¬xoõÏ>ð•ËîxëCS™Ò‰ ]N'rà¡Ó‹î¿dʸ]wÙÊWîyéÝ3O¯õ…H6‘{Ndåë.¹¹î’Ä@/‘{N$lA5‰éD˜N$‰)"HÌ8€Ä²Ed&“)aô"Ù"2 ÃÆ@/’š0mÆØÃF-nkk+ÞÛTWWoq¶F:®­­­ªªêæž(Š¢(jmmm\R»h^c¶Y___¤°šššêêꊴøûLss³\åI®ò'Wù“«üÉUþä*r•¿Â檥¥%éKìÎ 1E$‰9â€Ät"HL @bÆÙ$¦ @b:‘$¦ @bŠHË‘qVøÚÿ}ç¬#öÙqøˆ]?tâÿüêÕuñV)áÇ :éD®üí“OœÕï”[~ÿ—% ï˜=øÀ¢LÏ@ùÊÙXýõΫnZóÙ¹×N?h`£ºôë]7l*§ùîc?^¹Gÿ_œzÈ®ÛûÀnãO¸ê¡¿kD°©l'2 à â·^_¾æõßÜýü·ïüýMcÖ.¼ñÜi'ŸZóÈçìÖ¯tAP^:n¬  \‘Þû”‹ö6°rä‡Î¹èÓ5xðá7"kØ(gœ=hïývK›~©TÅ@/sÄO¿=ÿìÁ™õÍ;Ÿ^¾fõÒ7\sÛ„£?¶mÐm¯Q' OÉ=â§ßngÞ|ÛôÌMÇî»ó.Ÿz͹·ÿàÔ]I@Vº“k#½ø–‡/îñXè%rΉ€-1§ 1HÓ‰ 1E$‰gX¶ˆÌd2%Œ€^$[D†aXÂ8èER¦Í{XCèÅmmmÅ{›êêêâ-ÀÖH§ÓµµµUUUÝÜEQE­­­KjÍkÌv"ëëë‹VSSS]]]‘Ÿinn–«<ÉUþä*r•?¹ÊŸ\åO®òWØ\µ´´$}‰ÝÙ$¦ˆ 1Gü˜N$‰)"HÌ8€Ät"HL'€Ät"HL @bÙ"2^oÍCŸßePå&ª¶9üºÅ™x+”ðãP 9ÈŸøî_V­Þ`y󹻞pì”]4,ÈêncMüvóÌÙïñãvNé'•îú©héý3ì?õ¶IÛ¦z.zl†áfÏd^¸cæü‘ÇÿôŸ+;>@×å8{í³nfïi7Œëo” ÀæºÚ1óîÿÝzÏß?|Ê cúõh8ôw"ã7zëܵußžº½-5äètcMô×ûnmRgÝP[jÈÕiY1ê¬þvVO‡@oÑÝ9‘Ð)?E@b:‘$¦ @bŠH3Î ±l™ÉdJ½H¶ˆ ð„qЋ¤&L›1ö°††Q‹ÛÚÚŠ÷6ÕÕÕÅ[€­‘N§kkk«ªªº¹'Š¢(ŠZ[[—Ô.š×˜íDÖ××)¬¦¦¦ººº"-þ>ÓÜÜ,Wy’«üÉUþä*r•?¹ÊŸ\寰¹jiiIú»³HL @bŽø 1HSD˜q6‰éD˜N$‰éD˜"€Ä²Ed¼Qø÷‡¾Öðá1#kª‡n¿çÇNÿßß¾Å[¥„€bÈéDÆËîº`úuoNþѯ¾¹äw×Nxî+ ÿö³¶R„@¹ÊéD†¯<÷üÚƒŽ?}âö•éÁ»~â´OïÙöü¢¥¡N$ír:‘齎šTûô½·<úÚ{áªW~}ÛœWö›|ä®ýJe*{ÄO†AÁ€ƒ/¼æŒi'×í6#ŒSv®û¯»ÎÚ3µñIèdœ½îék9ážQ_÷âko.}ögôÿßOŸrË_2ÆÙ´ë8ÎŽ^}ä¡§·›tæqû¨LWípÈ©§‘zä¡ÇV—$8ÊSÇNdjÄ>ûl·ä§?¼÷™7ׄ«—þaÖ--ïŒÙwÏ:‘°¥3¼IDAT´Kw¼Pù‘Ëf}}ÝeßšºïyËÃÛíþ‘c¿7ó‚}rn Ë­SÕ|öÚ¹Ÿ½¶ÁÐ;d‹Hsgòä·³HL'€Ät"HL @bÆÙ$–-"3™L ã É‘a–0z‘Ô„i3ÆÖÐ0jq[[[ñÞ¦ºººx‹°5ÒétmmmUUU7÷DQEQkkkã’ÚEó³Èúúú"…ÕÔÔTWWW¤Åßgš››å*Or•?¹ÊŸ\åO®ò'Wù“«ü6W---I_bw6‰)"HÌ?$¦ @bŠH3Î 1HÓ‰ 1HSDX¶ˆŒ7Z·äç_=~ünÛÕÔŒÜãÐ3®ì­(Þ:%üxCN'2|æÛ 'ßœöãÖ¥¯>9ëØ7¯>öÜ{–ªØDÇNdøòÏç<³ëôÿ8ýÀmVnwÈç.=q›_Ü|ï_2:‘´ËéDÆQ©Ô†?¥R©Ôºg>öpX”³l†a†ñ¨9æåÛþûGX¶jÕ« ¾ÿ?‹ÃÕï¼½&Ü %üxCÎÆšôþÝzÃÔw¾[¿×Ž»|øüG:棃j† «0Π]'Gü ýé¯Ýÿû——¾±ô…ù×ÿSÛóÇô€þ=e+÷ˆŸµ}ïÒïýú¥·V¯üë£?¼àKìøù‹' ºë4êDô1éœ+ý÷Ÿtèƒ7ÔðJ°ÓAGŸ}×Ýgí_Y‚À(_¹Ed0p—£.¿ç¨Ë{>z‰liî @žüv6‰éD˜N$‰)"HÌ8€Ä²Ed&“)aô"Ù"2 ÃÆ@/’š0mÆØÃF-nkk+ÞÛTWWoq¶F:®­­­ªªêæž(Š¢(jmmm\R»h^c¶Y___¤°šššêêꊴøûLss³\åI®ò'Wù“«üÉUþä*r•¿Â檥¥%éKìÎ 1E$‰9â€Ät"HL @bÆÙ$¦ @b:‘$¦ @bŠHË‘ñkþ×1ƒ+++++«Fœ2ç½8kíŸçþçÔq;¯Ùöƒ:ák-K3q~Jøñ(†ÜNdÿC¯yaåêÕ+îV“Úôúº§®>錹¸ô—/¿ú|Ó™ÁÌ“N»qqÔcqPFr;‘›õ7iCþ~ÖmÏ¿àÊãöئrØþ§}ås»?zË]Ï…:‘}P¾ß‰Œß|æ™×v<à€뻓ýv·õKOµ¾W¼È([Ù#~Â0Üô‰0q” ð_Aæí·ÛâAƒf6Ü•©<8ó—më› ½èº<'rýŸÚÇÑ©AC«ÚVEq\A­j[U1¤ºÊñ’}P¾ãìÔ¶{ï3òïO>ùÆú’1óʧÚFï·çÀâE@ÙêzcÍ&­È8Žãô?5LÛã±ë®œ½èíÕËŸ¼uÆ/~hú1{TØXÐåv"ã7f;rèБ'Þµbåì“G:rêÌ¥qôß÷Â[0iÙ7ŽÚc—½¹9>å–œ^ë¨r€>)s%5búìצwvoÿ]&]9{Ò•E €2×åÆèŠ4‰éD˜N$‰)"HÌ8€Ä²Ed&“)aô"Ù"2 ÃÆ@/’š0mÆØÃF-nkk+ÞÛTWWoq¶F:®­­­ªªêæž(Š¢(jmmm\R»h^c¶Y___¤°šššêêꊴøûLss³\åI®ò'Wù“«üÉUþä*r•¿Â檥¥%éKìÎ 1E$‰9â€Ät"HL @bÆÙ$¦ @b:‘$¦ @bŠHË‘ñkþ×1ƒ+++++«Fœ2ç½xK×·¬„€bÈíDö?ôšV®^½âÞi5©|®Ðçt¹±&Þx±C'±«ëô¾ @bÙNd†›>f¢ Ž2aö ò¹@ßÑõ8;Þp±ã8»‹ëôÆÙ$ÖM'²½åäs€¾#·¿1ëØ‘C‡Ž<ñ®+gŸDz£Ô„i3ÆÖÐ0jq[[[ñÞ¦ºººx‹°5Òéôá‡Þ>ÎÞôAû8{}'rþüùKjÍkÌv"ëëë‹VSSS]]]‘Ÿinn–«<ÉUþä*r•?¹ÊŸ\åO®òWØ\µ´´¬0gΜ9sæ´°×ÿòäÉ“&MêðGü°ÁÔ©S§L™²é•É“'Ož<9÷NE$Y›Ö‘]U#~è`}ÇñÑGÝU‰è°q:š2eJû›Ng˜q6‰éD˜N$›I¥R¹Úo¸Òþ‹5ét^›lV¯^=lذ ô€7ÞxcРA¥Ž‚RQQ±råÊ!C†äss¿~ýò\vÍš5±æðÃÏç•¿ýío'Nœ˜çÛåã׿þõ^{íUê(è9/¿üržeÛÃ?rò7æ-‹·ü’³ìôø+æ?ÿÒKÏÞôémŠ1_·àî»_?ðœë~òèçßñÅÝŸþÆÙ—ÿì­–‘ñÛÏþUå¤/ßú«?<Þ|ýqÁ½^0óÅ—yáK·^vGţݔN¢N产¯~æÛ}©ù…%ÏÎ>#¸eú™7ÿ¹(¿qSýýâõ—÷‘±ÛW6ö¨Ï7Œ[µð‰— X䥆ué7Ï©Ûçmyà‰'LøBëK…>><|ñ–ËîÞá¢/>¼¬šÈ@“¤Y÷‡;f-þŒãöئjø§^yö˜·Ý³¨wNTã|ì…{îóÁ~ÅX=ZóÆÓ÷Þ÷ØÀ1®A^÷üÌ/ß½ÃE—~b[{•€RÚlwv÷·ÆËŸyfÙŽ°]E*Az×qTý©çÖ¤öÜý Ëowö{/ÜþÅ+·×'(phñÛ÷=á’_­ Rƒw?á¿o>jd!û…kŸ½é?ïÞᢻÿeÛÔÒ. X‚'ZµrU0dÈàeWjÐÁñÊwVvsJñ½ûÜm_8õ{á7_Ònÿ^aªæ37=ûÒ ­ýô}ö²“g<üNÁÒ>wóe?Þñ¢ÿød¡ _€Ä‘ƒ‡ V®\µ±*Šß]¹*5d›ªÞTÒÄmúÁçN»1uξÖ~ƒ‹yÅÀmÇÖyÌÞ¯?ú»Â}érÍ¢…­¯üäü cF½û?_¹`õ‹ß›º×áÿóD¡¿u °e ÆÙ©ûî;òÕ…O¾¼}*2¯,|²m̧ö®Úò Ëdœ¯XpíY_˜»Ã—nûæ±» ,üú«ç]ÿ߯ìw⎙~kQË÷îzr›OÝ­`_º<õ­S7<Ž^½íä#ï8讟}qߢ|© {I¾²×ÿàiÓ÷Xð¿WüøùwÞ{ëÉ[®øÁ ã?{ÜØ1ñò{NÛkôè½ÎºÿíUœ»×èÑ{M¿óµ‚ƒã·[n¼éo.ù鿹÷èõ§QŽ»¸¥€§QVŸrXÛý—Ÿüñqûò©Ïß¼ôÃWμòˆšò(  *Ñ—ûïwÑí7·]pù'vûÜêê=>qöí?|xUUÕÒ¥KW­ZUØ• Macro actions | pyspread
-> Insert image

The Insert bitmap option in the Macros menu lets the user choose an image file and creates cell code that represents an image and chooses the image cell renderer.

-> Insert chart

The Macros -> Insert chart... option provides an easy way of generating matplotlib figures. They generate multi-line code. The last line is an expression that yields a matplotlib.figure.Figure object.

The dialog comprises a toolbar with several chart types, an editor on the left and a chart preview on the right side.

Clicking on a chart button inserts code for the respective chart at the current cursor position. The code is meant as template for users, who want to quickly create and edit common chart types. However, any matplotlib chart can be created in the editor.

The preview is updated when pressing the Apply button. If an exception occurs of if no Figure object could be retrieved then an error message is displayed.

Pressing the Ok button puts the code in the editor in the current cell and activates the matplotlib renderer.

© Martin Manns and the pyspread team

pyspread-1.99.0.1/share/doc/manual/advanced_topics.html0000644000175000017500000001103413604455233022560 0ustar andreasandreas Advanced Topics | pyspread

Cyclic references

Cyclic references are possible in pyspread. However, recursion depth is limited. Pyspread shows an error when the maximum recursion depth is exceeded. It is strongly advisable to only use cyclic references when either a frozen or a button cell interrupts the cycle. Otherwise, cyclic calculations may lock up pyspread.

Result stability

Result stability is not guaranteed when redefining global variables because execution order may be changed. This happens for when in large spreadsheets the result cache is full and cell results that are purged from the cache are re-evaluated.

Security annoyance when approving files in read only folders

If a pys file is situated in a folder without write and file creation access, the signature file cannot be created. Therefore, the file has to approved each time it is opened.

Handling large amounts of data

While the pyspread main grid may be large, filling many cells may consume considerable amounts of memory. When handling large amounts of data, data should be loaded into one cell. This approach saves memory, Therefore, load all your data in a numpy array that is situated within a cell and work from there.

Substituting pivot tables

In the examples directory, a Pivot table replacement is shown using list comprehensions.

Memory consumption for sheets with many matplotlib charts

If there are hundreds of charts in a spreadsheet then pyspread can consume considerable amounts of memory. This is most obvious when printing or when creating PDF files.

© Martin Manns and the pyspread team

pyspread-1.99.0.1/share/doc/manual/basic_concepts.html0000644000175000017500000004375013604455227022426 0ustar andreasandreas Basic Concepts | pyspread

Python code as cell language

pyspread executes Python code in each cell. This is similar to typing into the Python shell. Normal cells are only executed when required e.g. for displaying results. Execution order between cells is not guaranteed to be stable and may differ for different versions of Python.

Normally, only one line of code that contains a Python expression is entered in each cell. However, a cell can contain additional lines of arbitrary Python code that preceed the final expression. The object that the cell returns when addressed is always the result of the last line’s expression. Note that only the last line must be an expression. (The described behavior describes pyspread >v1.99. Previous versions supported only one expression per cell.)

In order to enter a new line in one cell, press <Shift> + <Enter>. Only pressing <Enter> accepts the entered code and switches to the next cell.

Example

Let us enter an expression into the top left cell in table 0:

1 + 1

After pressing <Enter>, the cell displays

2

as expected. List comprehensions are also valid expessions.

[i ** 2 for i in xrange(100) if i % 3]

works.

However, statements such as

import math

are not valid in the last line of a cell. In contrast,

import math
math

is valid. Note that multi-line cells have been added to make some 3rd party modules such as rpy2 accessible. Abusing the feature for module imports and complex control flows is discouraged.

Module import

Modules should be imported via the macro editor. If the panel is hidden press <F4>. Enter the code in the editor and press the Apply button. If errors are raised, they are displayed in the message box below the editor.

While it is now possible to import modules from within a cell, there drawbacks:

  • The module is not imported until the cell is executed, which is not guaranteed in any way.
  • A spreadsheet may quickly become hard to understand when importing from cells.

Variable assignment

Besides Python expressions, one variable assignment is accepted within the last line of a cell. The assignment consists of one variable name at the start followed by “=†and a Python expression. The variable is considered as global. Therefore, it is accessible from other cells.

For example a = 5 + 3 assigns 8 to the global variable a.

b = c = 4, +=, -= etc. are not valid in the last line of a pyspread cell. In preceeding lines, such code is valid. However, variables assigned there stay in the local scope of the cell while the assigment in the last line gets into the global scope of pyspread.

Since evaluation order of cells is not guaranteed, assigning a variable twice may result in unpredictable behaviour of the spreadsheet.

Displaying results in the grid

Result objects from the cells are interpreted by the cell renderer. Therefore two renderers may display the same object in different ways. Cell renderers may be changed in the Format menu’s sub-menu Cell renderer. At the moment, pyspread provides four different renderers:

  1. The Text renderer is selected by default. It displays the string representation of the object as plain text. The exception is the object None, which is displayed as empty cell. This behavior allows empty cells returning None without the grid appearing cluttered.

  2. The Image renderer renders a QImage object as an image. It renders a 2D array as a monochrome bitmap and a 3D array of shape (m, n, 3) as a color image. Furthermore, it renders a str object with valid svg content as an SVG image.

  3. The Markup renderer renders the object string representation as markup text. It supports the limited subset of static HTML 4 / CSS 2.1 that is provided by QT5’s QTextDocument class.

  4. The Matplotlib chart renderer renders a matplotlib Figure object.

Note that the concept of different cell renderers has been introduced with pyspread v1.99.0.0.

Absolute cell access

The result objects, for which string representations are displayed in the grid, can be accessed from other cells (and from macros as well) via the getitem method of the grid, where the grid object is globally accessible via the name S. For example

S[3, 2, 1]

returns the result object from the cell in row 3, column 2, table 1. This type of access is called absolute because the targeted cell does not change when the code is copied to another cell similar to a call “$A$1†in a common spreadsheet.

Relative cell access

In order to access a cell relative to the current cell position, 3 variables X, Y and Z are provided that point to the row, the column and the table of the calling cell. The values stay the same for called cells. Therefore,

S[X-1, Y+1, Z]

returns the result object of the cell that is in the same table two rows above and 1 column right of the current cell. This type of access is called relative because the targeted cell changes when the code is copied to another cell similar to a call “A1†in a common spreadsheet.

Slicing the grid

Cell access can refer to multiple cells by slicing similar to slicing a matrix in numpy. Therefore, a slice object is used in the getitem call. For example

S[:3, 0, 0]

returns the first three rows of column 0 in table 0 and

S[1:4:2, :2, -1]

returns row 1 and 3 and column 0 and 1 of the last table of the grid.

The returned object is a numpy object array of the result objects. This object allows utilization of the numpy commands such as numpy.sum that address all array dimensions instead of only the outermost. For example

numpy.sum(S[1:10, 2:4, 0])

sums up the results of all cells from 1, 2, 0 to 9, 3, 0 instead of summing each row, which Pythons sum function does.

One disadvantage of this approach is that slicing results are not sparse as the grid itself and therefore consume memory for each cell. Therefore,

S[:, :, :]

may lock up or even crash with a memory error if the grid size is too large.

Everything is accessible

All parts of pyspread are written in Python, therefore all objects can be accessed from within each cell. This is also the case for external modules.

There are five convenient “magical†objects, which are merely syntactic sugar: S, X, Y, Z and nn.

S is the grid data object. It is ultimately based on a dict. However, it consists of several layers on top. When indexing or slicing, it behaves similarly to a 3D numpy-array that returns result objects. When calling it (like a function) with a 3 tuple, it returns the cell code.

X, Y and Z represent the current cell coordinates. When copied to another cell, these coordinates change accordingly. This approach allows relative addressing by adding the relative coordinates to X, Y or Z. Therefore, no special relative addressing methods are needed.

nn is a function that flattens a numpy array and removes all objects that are None. This function makes special casing None for operations such as sum unnecessary. nn is provided in pyspread >v.0.3.0.

Security

Since Python expressions are evaluated in pyspread, a pyspread spreadsheet is as powerful as any program. It could harm the system or even send confidential data to third persons over the Internet.

The risk is the the same that all office applications poese, which is why many provide precautions. The concept in pyspread is that you - the user - are trustworthy and no-one else. When starting pyspread the first time, a secret key is generated that is stored in the local configuration file (~/.config/pyspread/pyspread.conf on many Linux systems). You can manually edit the secret key in the Preferences Dialog (select Preferences... in the File menu).

If you save a file then a signature is saved with it (suffix .pys.sig). Only if the signature is valid for the stored secret key, you can re-open the file directly. Otherwise, e.g. if anyone else opens the file, it is displayed in Safe mode, i.e. each cell displays the cell code and no cell code is evaluated. The user can approve the file by selecting Approve file in the File menu. Afterwards, cell code is evaluated. When the user then saves the file, it is newly signed. Then it can be re-opened without safe mode.

Never approve foreign pys-files unless you have thoroughly checked each cell. Each cell may delete valuable files. Malicious cells are likely to be hidden in the middle of a million rows. If unsure, inspect the pysu / pys-file. pysu files are plain text files. pys files are bzip2-ed text files. Both are easy to read and understand. It may also be a good idea to run pyspread (and any other office application) with a special user or sandbox that has restricted privileges.

Current Limitations

  • Execution of certain operations cannot be interrupted or terminated if slow. An example is creating very large integers. A counter-example is a for loop. Such long running code may block pyspread. This may look like pyspread had crashed.
  • Maximum recursion depth is limited. Its value is a trade off between handling complex cell dependencies and time until stopping when cyclic dependencies are present. The former may lead to Exceptions. The latter may slow down pyspread.
  • Python2 code from pyspread <=1.1.3 is not automatically converted to Python3 code when opening the pys/pysu file.
  • Some cell content is rendered in too low resolution - especially when printing.

© Martin Manns and the pyspread team

pyspread-1.99.0.1/share/doc/manual/edit_menu.html0000644000175000017500000002166413604455220021411 0ustar andreasandreas Edit actions | pyspread
-> Undo

Most user actions in pyspread can be undone by **`Edit -> Undo (Shortcut: + Z). There is a list of undoable commands in the main toolbar.

-> Redo

Undone steps can be redone with Edit -> Redo . Also a shortcut with <Shift> + <Ctrl> + Z.

-> Cut

Edit -> Cut behaves like Edit -> Copy and pressing the <Del> key afterwards, i.e. the current cell code is copied and the cell is deleted. If cells are selected then the operations are applied to all cells in the bounding box of the marked cells.

-> Copy

Edit -> Copy copies cell code of the current cell (the one with the cursor) is copied. If multiple cells are selected then the copied set consists of the bounding box of the marked cells, i. e. the smallest box, in which all cells are situated. Cells that are not selected in that box are copied as if they were empty. The format of cells that are copied is tab separated Unicode.

-> Copy results

Edit -> Copy Results copies a string representation of the current cell’s result object. If e.g. the cell code of the current cell is 4*“a†then aaaa is copied to the Clipboard. As in Edit -> Copy, if cells are selected then the copied set consists of the bounding box of the marked cells. Copy Results is useful, if for example results shall be copied into an external application.

-> Paste

When pasting cells, these empty cells are pasted as well as the filled cells. That means that an unselected cell in a marked area will be pasted as empty cell.

Images can be inserted only via Paste As.

-> Paste As

Different types of data can be pasted with Paste As. The keyboard shortcut is <Shift> + <Ctrl> + V.

The mimetype of the data to be pasted is chosen in a dialog. The data is then inserted and a renderer is chosen according to the mime type.

-> Find

Cell code and cell results can be searched with <Ctrl> + F or using the menu with Edit -> Find. A dialog is opened, in which search queries can be entered. pyspread allows searching contained text, word-wise contained text and regular expressions, which can be toggled in the search toolbar. Toggle the More Button for extended options.

-> Replace

Replacing is done via the Find & Replace dialog that is accessible via <Shift> + <Ctrl> + F or via Edit -> Replace. Strings that are found are replaced with the replace string. Note that replace only allows searching in cell code and not in results.

-> Quote cell

Quote cells puts Unicode quotations around the cell code of each selected cell or the current cell if no selection is present. Quotations mean that the cell content is interpreted as a Python unicode object, i.e. ' is put before the start and ' at the end of the cell code. The keyboard shortcut is <Crtl> + <Enter>.

Quotation is not done if:

  • there is no code in the cell or
  • the character “ appears in the code or
  • the first and last character combination is any of: "", '', u', u"
-> Insert rows

Inserts one row directly above the cursor if no selections are made. If selections are present, then the bounding box that covers all selected cells is calculated, and the number of rows of this bounding box is inserted above the bounding box.

-> Insert columns

Inserts one column directly left of the cursor if no selections are made. If selections are present, then the bounding box that covers all selected cells is calculated, and the number of columns of this bounding box is inserted just left of the the bounding box.

-> Insert table

Inserts one table directly before the current table and switches to this new table.

-> Delete rows

Deletes the cursor row if no selections are made. If selections are present, then all rows in the bounding box that covers all selected cells are deleted.

-> Delete columns

Deletes the cursor column if no selections are made. If selections are present, then all columns in the bounding box that covers all selected cells are deleted.

-> Delete table

Deletes the current table.

-> Resize grid

Changes the grid size. Similar to File -> New, a dialog is shown, in which the new number of rows, columns and tables can be set. The grid size is changed accordingly. Cells that stay remain identical. Cells that are added are empty. Cells that are removed are deleted and cannot be accessed any more.

© Martin Manns and the pyspread team

pyspread-1.99.0.1/share/doc/manual/manual.html0000644000175000017500000000333713604460351020713 0ustar andreasandreas User Manual | pyspread

This document provides a quick overview over pyspread. Readers should have at least some experience with Python.

© Martin Manns and the pyspread team

pyspread-1.99.0.1/share/doc/manual/format_menu.html0000644000175000017500000002336013604455230021750 0ustar andreasandreas Format actions | pyspread
-> Copy format

Copies only the format of the selected cells. Copying formats has been separated from copying content in order to prevent unwanted behavior.

-> Paste format

Pastes copied cell formats.


-> Font

Assigns a font including style and size to the current cell if no selection is present. If a selection is present, the font is assigned to each selected cell.

The fonts are not stored within the .pys file. Therefore, fonts have to be available at the target system when opening a .pys file, otherwise, the font is replaced by the default font.

-> Bold

Bold toggles the current selection’s cell font bold attribute. If no cell is selected, then the attribute is toggled for the current cell. The shortcut is <Ctrl> + B.

-> Italics

Italics toggles the current selection’s cell font italics attribute. If no cell is selected, then the attribute is toggled for the current cell. The shortcut for Italics is <Ctrl> + I.

-> Underline

Underline toggles the current selection’s cell font underline attribute. If no cell is selected, then the attribute is toggled for the current cell. The shortcut for Underline is <Ctrl> + U.

-> Strikethrough

Strikethrough toggles the current selection’s cell font strikethrough attribute. If no cell is selected, then the attribute is toggled for the current cell.


-> Cell renderer

Opens a sub-menu, in which the cell renderer for the current cell can be chosen.

-> Freeze cell

The frozen button (flurry button toggles the frozen attribute for the current cell, not the selection). Frozen cells are immediately executed once. Cell results are stored in a cache. Instead of re-evaluating the cell result each time that another cell is updated, frozen cells always display the old, stored result.

The flurry button can only mark one cell at a time as frozen. The selection is ignored for this purpose. Only the cell at the cursor is frozen.

Frozen cells can be refreshed using the menu with View -> Refresh Selected Cells or with <F5>. All selected cells are refreshed by this command.

Frozen cells can speed up spreadsheets with long running calculations. Furthermore, the number of callings of stateful functions can be controlled.

While the frozen attribute is stored in the .pysu / .pys save-file, the frozen cell result cache is not saved.

-> Lock cell

Lock toggles the current selection’s cell lock attribute. If no cell is selected, then the current cell is locked. Locking means that the cell cannot be edited from within pyspread until it is unlocked again.

-> Merge cells

Merge cells merge all cells that are in the bounding box of the current selection. If there is no selection the the current cell will not be merged or unmerged if already merged. Merged cells act as one. Output is shown for the top left cell, which stays intact upon a merge.


-> Rotation

Opens a sub-menu, in which cell rotatation can be chosen from 0, 90, 180 and 270 degree. The chosen rotatation is applied to all cells in the current selection. If no cell is selected, then it is applied to the current cell. Besides text output, rotatation also applied to bitmap and vector graphics that are displayed in the cell. Matplotlib charts may be dislocated in rotatated cells.

-> Justification

Opens a sub-menu, in which cell justifications can be chosen from left, center and right. The chosen justification is applied to all cells in the current selection. If no cell is selected, then it is applied to the current cell. Besides text output, justification also applied to bitmap and vector graphics that are displayed in the cell.

-> Alignment

Opens a sub-menu, in which cell alignment can be chosen from top, center and bottom. The chosen alignment is applied to all cells in the current selection. If no cell is selected, then it is applied to the current cell. Besides text output, alignment also applied to bitmap and vector graphics that are displayed in the cell.


-> Formatted borders

When changing border color or width, the command affects the selection, or if no selection is present. the current cell.

Since a cell has four borders, all borders are affected by default. The border choice box allows changing this behaviour by providing the following options:

  • All borders: All borders are affected
  • Left border: Only the left border of the smallest containing bounding box is affected.
  • Right border: Only the right border of the smallest containing bounding box is affected.
  • Top border: Only the top border of the smallest containing bounding box is affected.
  • Bottom border: Only the bottom border of the smallest containing bounding box is affected.
  • Outer borders: All outer borders of the smallest containing bounding box are affected.
  • Top and bottom borders: Only the top and the bottom border of the smallest containing bounding box are affected.
-> Border width

Choice box that changes cell border widthes. The section Border choice box explains, which borders are affected. There are eleven different border widths. The first width is 0, which means that no border is drawn.


-> Text color

Opens a dialog, in which a color can be chosen. On o.k., the text color is set to the chosen color for all cells in the current selection. If no cell is selected, then the text color is set for the current cell.

-> Line color

Invokes a color choice dialog that changes cell border color. The section Border choice box explains, which borders are affected. The border color is chosen as an RGB value. The color choice dialog may look different depending on the operating system.

-> Background color

Opens a dialog, in which a color can be chosen. On o.k., the background color is set to the chosen color for all cells in the current selection. If no cell is selected, then the background color is set for the current cell.

© Martin Manns and the pyspread team

pyspread-1.99.0.1/share/doc/manual/view_menu.html0000644000175000017500000001216713604455226021442 0ustar andreasandreas View actions | pyspread
-> Fullscreen

Toggles fullscreen mode, in which only the grid is visible on the screen. In fullscreen mode, the mouse wheel changes tables as if the mouse were in the table selection widget right to the entry line. <F11> acts as shortcut to the fullscreen mode toggle.

-> Toolbars

Toolbars contains a sub menu, in which the different toolbars can be switched on or off.

-> Entry line

Swiches the entry line on and off.

-> Macro panel

Swiches the macro panel on and off.

-> Go to cell

Go to cell opens a dialog, in which a cell can be specified via row, column and table. After pressing o.k., the specified cell becomes the current cell, and it is put into view on the grid. This involves switching to another grid table if necessary.

-> Toggle spell checker

Activates the spell checker for pyspread >=1.1 if pyenchant is installed. Code in the entry lineis checked in the English language. Words that are unknown are marked with a red curly underline.

-> Zoom in

Zoom the grid in.

-> Zoom out

Zoom the grid out.

-> Original size

Reset the grid zoom level to 100%.

-> Refresh selected cells

Executes code of cells that are selected and frozen and updates their cell results in the grid. If no cell is selected then the current cell is refreshed. The shortcut for is <F5>.

This action has only effects on cells that are frozen.

-> Toggle periodic updates

Periodically executes code of cells that are frozen and updates their cell results in the grid. The period can be adjusted in the Preferences dialog: Set the desired period as “Frozen cells refresh period†in milliseconds.

-> Show frozen

Toggles display of a diagonal blue stripe pattern on the background of each frozen cell.

© Martin Manns and the pyspread team

pyspread-1.99.0.1/share/doc/manual/overview.html0000644000175000017500000001013013604455227021277 0ustar andreasandreas Overview | pyspread

What is pyspread ?

pyspread is a spreadsheet application that computes Python expressions in its cells. It is written in the Python programming language.

At least basic knowledge of Python is required to use pyspread effectively. The core mission of pyspread is to be the most pythonic spreadsheet.

pyspread does not follow the traditional spreadsheet approach. Its approach is comparable to the spreadsheet Siag. However, Siag uses the Scheme) programming language.

pyspread provides a three dimensional grid. Rows, columns and tables are treated similar, so that each row, column and table is identified by a number. Therefore, pyspread allows editing three dimensional arrays. These arrays can later addressed as numpy arrays for further computation.

Cell functions in pyspread that are known from conventional spreadsheets such as Excel, gnumeric or LibreOffice.org Calc are not supported. Instead, Python expressions are entered into the spreadsheet cells. Each cell returns a Python object. These objects can represent anything including lists or matrices.

© Martin Manns and the pyspread team

pyspread-1.99.0.1/share/doc/manual/workspace.html0000644000175000017500000002223313604455226021435 0ustar andreasandreas The Workspace | pyspread

Starting and exiting pyspread

On Linux or *nix systems, type

$ pyspread

from the command prompt. If you want to run pyspread without installation then cd into the pyspread directory and type

$ pyspread.sh

On Windows, type

> pyspread.bat

in the command line or launch the file via the Windows Explorer (click or double click)

You can exit pyspread by closing the main window or by selecting File -> Quit from the menu.

pyspread main window

The main window comprises the following components (see Figure):

  • Titlebar
  • Menu
  • Toolbars
  • Entryline
  • Grid
  • Macro editor
  • Table choice
  • Statusbar

Title bar

When pyspread is started or a new spreadsheet is created then the Titlebar displays “pyspreadâ€. When a file is opened or saved then the filename is presented in front of “ - pyspreadâ€.

Whenever a spreadsheet is changed then an askerisk “*†is displayed in front of the Titlebar text.

Since all actions of pyspread are available via the menu, the manual provides a section for each menu. The menu items do not change position or content when working with pyspread. However, the state of toggle actions changes e.g. when selcting a cell in the grid.

Toolbars

Toolbars make a subset of actions quickly accessible. Status updates of toggle actions are visualized. Actions with multiple states such as the cell renderer choice are displayed with the icon of the current state. The state is changed by clicking on the button, which is indicated by a changed icon.

Toolbar content can be shown or hidden using the toolbar menu at the right side of each toolbar. The show/hide state is restored at the next start of pyspread.

Entry line

Code may be entered into the grid cells via the entry line. It is accepted and evaluated when <Enter> is pressed or when a new cell is selected. Multiple lines of code within one cell can be entered using <Shift> + <Enter>.

Code can also be entered by selecting a cell and then typing into the appearing cell editor. However, code highlighting and spell checking is displayed only in the entry line.

When data shall be displayed as text, it has to be quoted so that the code represents a Python string. In order to make such data entry easier, quotation is automatically added if <Ctrl>+<Enter> is pressed after editing a cell. If multiple cells are selected then <Ctrl>+<Enter> quotes all selected cell.

Grid

Changing cell content

In order to change cell content, double-click on the cell or select the cell and edit the text in the entry line.

Deleting cell content

A cell can be deleted by selecting it and pressing <Del>. This also works for selections.

Selecting cells

Cells can be selected by the following actions:

  • Keeping the left mouse button pressed while over cells selects a block
  • Pressing <Ctrl> when left-clicking on cells selects these cells individually
  • Clicking on row or column labels selects all cells of a row or column
  • Pressing <Ctrl> + A selects all grid cells of the current table

Only cells of the current table can be selected at any time. Switching tables switches cell selections to the new table, i.e. the same cells in the new table are selected and no cells of the old table are selected.

Be careful when selecting all cells in a large table. Operations may take considerable time.

Macro editor

Macros can be edited from within the macro editor. The editor allows editing a text file that is executed when the spreadsheet is opened or when its content is updated.

The Apply button executes the macro code. Output (including exceptions) are shown in the lower part of the macro editor.

The scope of macro execution is global. Therefore, all functions are directly accessible from each cell. For example, the function f that is displayed in the Figure can be called from a cell via f(). The result is the returned string “Hello, pyspread!â€.

Since cell evaluation order is not guaranteed in pyspread, macros can be used for operations that enforce state. One example for such operations are some module imports such as rpy2. Furthermore, algorithms that are too complex for a single cell should be written as a macro.

Table choice

Tables can be switched using the table choice. On right click, a context menu for insertion and deletion of tables is shown.

Statusbar

Status and error messages may appear in the Statusbar. Safe mode is indicated with an attention icon âš .

© Martin Manns and the pyspread team

pyspread-1.99.0.1/share/doc/manual/file_menu.html0000644000175000017500000002705113604455230021400 0ustar andreasandreas File actions | pyspread
-> New

An empty spreadsheet can be created by File -> New.

A Dialog pops up, in which the size of the new spreadsheet grid can be entered. Note that grid size has been limited to 1 000 000 rows, 100 000 columns and 100 tables.

-> Open

Loading a spreadsheet from disk can be initiated with File -> Open. Opening a file expects a file with the extension .pysu or .pys. The file format is pyspread specific. The formats differ only in .pys being a bzip2-compressed version of .pysu. pysu is the default option. It can be beneficial when using pyspread in combination with file version control systems such as git.

Since pyspread files are ultimately Python programs, a file is opened in safe mode if it has not been previously signed with the key that is shown in the Preference dialog.

Safe mode means that the cell content is loaded and displayed in the grid but not executed, so that 2+2 remains 2+2 and is not computed into 4. You can leave safe mode with File -> Approve file.

-> Save

A spreadsheet can be stored to disk with File -> Save . If a file is already opened, it is overwritten. Otherwise, Save prompts for a filename.

When a file is saved, it is signed in an additional file with the suffix .sig using the key that is shown in the Preference dialog. Note that the save file is not encrypted.

The .pysu file format is a UTF-8 Text file (without BOM) with the following structure (since version 0.2.0):

[Pyspread save file version]
2.0
[shape]
1000 100 3
[grid]
7 22 0 'Testcode1'
8 9 0 'Testcode2'
[attributes]
[] [] [] [] [(0, 0)]
0 'textfont' u'URW Chancery L'
[] [] [] [] [(0, 0)]
0 'pointsize' 20
[row_heights]
0 0 56.0
7 0 25.0
[col_widths]
0 0 80.0
[macros]
Macro text
-> Save As

File -> Save As saves the spreadsheet as does File -> Save. While Save overwrites files that are opened on pyspread directly, Save As always always prompts for a file name.

-> Import

A csv file can be imported via File -> Import.

After selecting a file, the CSV file import dialog opens. In this dialog, CSV import options can be set. Furthermore, target Python types can be specified, so that import of dates becomes possible. The grid of the import dialog only shows the first few rows of the csv files in order to give an impression how import data will look like in pyspread.

Importing a file always activates safe mode because code in the CSV file might prove harmful.

-> Export

pyspread can export spreadsheets to .csv and .svg files.

When exporting a file then a dialog is displayed, in which te area to be exported can be chosen.

When exporting a .csv file then an export dialog is shown next, in which the format of the csv file may be specified. The start of the exported file is shown below the options.

-> Approve file

pyspread cells contain Python code. Instead of a special purpose language, you enter code in a general purpose language. This code can do everything that the operating system allows. Normally, this is a lot.

Even though the situation differs little to common spreadsheet applications, the approach makes malicious attacks easy. Instead of knowing how to circumvent blocks of the domain specific language to make the computer do what you want, everything is straight forward.

In order to make working with pyspread as safe as possible, all save-files (pys files and pysu files) are signed in a signature file. Only a user with a private key can open the file without approving it. That should ensure that when loading a pys file, only the code that a user has written him- or herself is executed. .pys files without a valid signatures are opened in safe mode, i. e. the code is displayed and not executed. However, it can be approved after inspection.

Therefore, never approve foreign .pys files unless you have checked thoroughly each cell. One cell may delete valuable files. And it is likely to be found somewhere in the middle of a million rows. If unsure, inspect the pys/pysu-file. It is a bzip2-ed text file. You can read it. You can grep in it. It may also be a good idea to run pyspread with a special user that has restricted privileges. If you like it even safer then use a sandbox. Chroot may be a good idea. Qemu / kvm are also worth a thought.

-> Clear globals

pyspread lets you define globals from within cells via = as well as via the macro editor. Clear globals deletes all globals but the initial set. This option frees memory and also gets rid of any globals that are set via macros. Afterwards, you have to re-apply the macros in order to have them available from within the spreadsheet.

-> Print preview

When selecting print preview, a dialog box is shown, in which the spreadsheet extents (rows, columns and tables) that should be printed can be selected.

After pressing o.k., a second dialog window displays the print preview.

-> Print

Print prints the spreadsheet. First, a dialog similar to Print preview is opened, in which the spreadsheet extents (rows, columns and tables) can be selected. After pressing o.k., a operation system specific print dialog is opened. This dialog provied an option to start printing.

-> Preferences

The preferences dialog allows changing:

  • Signature key for files: The private key that is used for signing the .pys and .pysu files
  • Cell calculation timeout: If calculations for a cell exceed the time in seconds given here then calculation is aborted. This does not work for Python functions that are C code, so e.g. 2**99999999999999999 is not aborted.
  • Frozen cell refresh period: If View -> Toggle periodic updates is activated then all frozen cells are updated after a specified amount of time. This interval in milliseconds is set here. The change takes effect the next time that View -> Toggle periodic updates is activated. Too small values may lock up the application.
  • Number of recent files: The maximum number of files that is displayed in the list of recent files. Changes come into effect after the next restart of pyspread.

On *nix, configuration is stored in the file ~/.config/pyspread/pyspread.conf

  • This file is created when pyspread is started the first time
  • Removing it resets configuration.
-> Quit

File -> Quit exits pyspread. If changes have been made to a new or loaded file then a dialog pops up and asks if the changes shall be saved.

© Martin Manns and the pyspread team

pyspread-1.99.0.1/share/doc/tutorial.html0000644000175000017500000002407213604455074020031 0ustar andreasandreas Tutorial | pyspread

Tutorial

Run pyspread with

$ pyspread

Select the Menu File → New Enter 200 rows, 10 columns and 5 tables in the pop-up menu.

Tutorial1

After clicking OK, you get a new table with the typed-in dimensions.

Standard cell commands

Select the top-left cell and type:

1 + 5 * 2

The spreadsheet evaluates this Python statement and displays the result: 11

In the cell that is one row below (cell (1, 0, 0)), type S

As we see from the result, S is a known object. In fact, it is the grid object that we are currently working in.

Absolute addressing of cells

To access a cell, we can index the grid. Replace S with

S[0, 0, 0]

and the same result as in the top-left cell that has the index (0, 0, 0) is displayed.

  • The first index is the row,
  • the second parameter is the column
  • and the third parameter is the table.

Now replace the expression in the top-left cell by 1. Both cells change immediately because all visible cells are updated.

Tutorial2

The main grid S can be sliced, too. Write into cell (3, 0, 0): S[:2, 0, 0] It now displays [1 1], which is a list of the results of the cells in [:2, 0, 0].

Relative addressing of cells

Since cells are addressed via slicing, the cell content behaves similar to absolute addressing in other spreadsheets. In order to achieve relative addressing, three magic variables X (row), Y (column) and Z (table) are used. These magic variables correspond to the position of the current cell in the grid.

Change to table 2 by selecting 2 in the iconbar combobox. Type into cell `(1, 2, 2):

[X, Y, Z]

The result is [1 2 2] as expected. Now copy the cell (Crtl-C) and paste it into the next lower cell (Ctrl-V). [2 2 2] is displayed. Therefore, relative addressing is achieved. Note that if cells are called from within other cells, the innermost cell is considered the current cell and its position is returned.

Filling cells

The easiest method for filling cells with sequences is using the X variable.

  • Write into cell (1, 1, 2):X - 1

Then copy cell (1, 1, 2), select the cells (2, 1, 2) to (99, 1, 2) and paste via + V. Now the cells (1, 1, 2) to (99, 1, 2) contain consecutive values.

Named cells

Cells can be named by preceding the Python expression with “ =â€.

Type into cell (2, 4, 2):

a = 3 * 5

and in cell (3, 4, 2):

a ** 2

The results 15 and 225 appear. a is globally available in all cells.

External modules

External modules can be imported into pyspread. Therefore, powerful types and manipulation methods are available.

Open the macro panel with <F4> and type

from franctions import Fraction

Then press the Apply button.

Now we define a rational number object in cell (6, 2, 2) :

p = Fraction("1/37")

and in cell (7, 2, 2)

p**2

The result 1/1369 appears.

Tutorial3

Working with cells

Summing up cells: The sum function sums up cell values. Enter into cell (16,2,2):

sum(S[1:10, 1, 2])

yields 36 as expected.

However, if there are more columns (or tables) to sum up, each row is summed up individually. Switch to table 1 and enter

  • 1 into cell (0, 0, 1)
  • 2 into cell (1, 0, 1)
  • 3 into cell (0, 1, 1)
  • 4 into cell (1, 1, 1)
  • sum(S[:2, :2, 1]) into cell (0, 4, 1)

Cell (0, 4, 1) yields [3 7], which may not be intended. If everything shall be summed, the numpy.sum function has to be used:

numpy.sum(S[:2, :2, 1])

which yields 10.

Plotting

Pyspread renders a plot in any cell that returns a matplotlib figure. Merging the cell with other cells can increase plot size. In order to make generating plots easier, a chart dialog has been added to the Macros menu. This chart dialog generates a formula for the current cell. This formula uses a pyspread specific function that returns a matplotlib figure. You can use the object S inside the chart dialog window.

Switch to table 3. Select cell (0,0,3).

Select Insert chart from the Macro menu.

On the left side, Python code can be edited. On the right side, a chart can be displayed as soon as the code delivers a matplotlib figure in the last line.

In order to make things easier, examples are provided that can be inserted into the editor by clicking on one of the toolbar buttons.

Select the rightmost button (Pie chart) and press the Apply button. A pie chart is displayed on the right panel.

Tutorial3

Press the Ok button. Now the chart appears in cell (0, 0, 3). However, it is tiny. To increase size, select all cells from (0, 0, 3) to (8, 4, 3) and select Merge cells from the Format menu.

© Martin Manns and the pyspread team

pyspread-1.99.0.1/share/icons/0000755000175000017500000000000013604465725015645 5ustar andreasandreaspyspread-1.99.0.1/share/icons/pyspread.svg0000644000175000017500000120546513551171371020222 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/0000755000175000017500000000000013604465725017305 5ustar andreasandreaspyspread-1.99.0.1/share/icons/actions/format-background-color.svg0000644000175000017500000002417413551171371024547 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/format-cell-chart.svg0000644000175000017500000012555313551171371023335 0ustar andreasandreas image/svg+xml 2006-01-04 Lapo Calamandrei http://tango-project.org text a bold write letter Andreas Nilsson pyspread-1.99.0.1/share/icons/actions/format-borders-32.svg0000644000175000017500000000400513551171371023165 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/edit-find-next.svg0000644000175000017500000001153113557333324022642 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/edit-paste.svg0000644000175000017500000005631313551171371022065 0ustar andreasandreas image/svg+xml Edit Paste 2005-10-10 Andreas Nilsson edit paste Jakub Steiner pyspread-1.99.0.1/share/icons/actions/format-borders-8.svg0000644000175000017500000000400513551171371023110 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/edit-sort-descending.svg0000644000175000017500000004374513551171371024046 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/format-cell-rotate-90.svg0000644000175000017500000003660513551171371023757 0ustar andreasandreas image/svg+xml Lapo Calamandrei http://tango-project.org text a strikeout strike-out write letter strike-though jakub Steiner pyspread-1.99.0.1/share/icons/actions/format-cell-image.svg0000644000175000017500000257277313551171371023332 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/macro-link-image.svg0000644000175000017500000136632413551171371023151 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/format-borders-top.svg0000644000175000017500000000712613551171371023552 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/edit-cut.svg0000644000175000017500000005501313551171371021540 0ustar andreasandreas image/svg+xml Edit Cut Garrett Le Sage edit cut clipboard Jakub Steiner pyspread-1.99.0.1/share/icons/actions/document-open.svg0000644000175000017500000007412513551171371022604 0ustar andreasandreas image/svg+xml Folder Icon Accept 2005-01-31 Jakub Steiner http://jimmac.musichall.cz Active state - when files are being dragged to. Novell, Inc. pyspread-1.99.0.1/share/icons/actions/format-borders-right.svg0000644000175000017500000000735013551171371024064 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/format-borders-left.svg0000644000175000017500000000735013551171371023701 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/document-approve.svg0000644000175000017500000041203213551171371023310 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/format-cell-rotate-270.svg0000644000175000017500000003436413551171371024037 0ustar andreasandreas image/svg+xml Lapo Calamandrei http://tango-project.org text a strikeout strike-out write letter strike-though jakub Steiner pyspread-1.99.0.1/share/icons/actions/format-borders-0.svg0000644000175000017500000000335613551171371023110 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/format-borders-16.svg0000644000175000017500000000400513551171371023167 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/edit-paste-as.svg0000644000175000017500000002143413551171371022462 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/view-goto-cell.svg0000644000175000017500000000615013551171371022655 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/edit-clear.svg0000644000175000017500000004605313551171371022037 0ustar andreasandreas image/svg+xml Edit Clear Andreas Nilsson http://www.tango-project.org clear reset blank edit Jakub Steiner (although minimally ;) pyspread-1.99.0.1/share/icons/actions/format-justify-fill.svg0000644000175000017500000003202413551171371023726 0ustar andreasandreas image/svg+xml Justify Center 2005-10-29 Andreas Nilsson justify center format pyspread-1.99.0.1/share/icons/actions/format-merge-cells.svg0000644000175000017500000000461113551171371023505 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/document-new-gpg-key.svg0000644000175000017500000050246413551171371023777 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/document-export.svg0000644000175000017500000006061713551171371023165 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/format-borders-2.svg0000644000175000017500000000400313551171371023100 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/document-print-preview.svg0000644000175000017500000010202513551171371024445 0ustar andreasandreas image/svg+xml Print Preview Jakub Steiner http://jimmac.musichall.cz printer local laser bubblejet inkjet print output cups lpd preview Corey Woodworth pyspread-1.99.0.1/share/icons/actions/format-text-italic.svg0000644000175000017500000002604613551171371023543 0ustar andreasandreas image/svg+xml Italic 2006-01-04 Lapo Calamandrei http://tango-project.org text a italic cursive write letter pyspread-1.99.0.1/share/icons/actions/format-font.svg0000644000175000017500000003067313551171371022263 0ustar andreasandreas image/svg+xml Folder Jakub Steiner 2005-02-01 http://jimmac.musichall.cz/ folder directory storage pyspread-1.99.0.1/share/icons/actions/format-cell-text.svg0000644000175000017500000006627313551171371023223 0ustar andreasandreas image/svg+xml Format Text - Underlined Lapo Calamandrei http://tango-project.org text a strikeout strike-out write letter strike-though jakub Steiner pyspread-1.99.0.1/share/icons/actions/macro-insert-chart.svg0000644000175000017500000012145213551171371023525 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/edit-undo.svg0000644000175000017500000002202313551171371021705 0ustar andreasandreas image/svg+xml Jakub Steiner http://jimmac.musichall.cz Edit Undo edit undo revert pyspread-1.99.0.1/share/icons/actions/edit-find.svg0000644000175000017500000010512413551171371021664 0ustar andreasandreas image/svg+xml Edit Find edit find locate search Steven Garrity Jakub Steiner pyspread-1.99.0.1/share/icons/actions/format-cell-rotate-180.svg0000644000175000017500000003436513551171371024040 0ustar andreasandreas image/svg+xml Lapo Calamandrei http://tango-project.org text a strikeout strike-out write letter strike-though jakub Steiner pyspread-1.99.0.1/share/icons/actions/format-borders-1.svg0000644000175000017500000000400313551171371023077 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/view-zoom-original.svg0000644000175000017500000006053513551171371023565 0ustar andreasandreas image/svg+xml Find document search find Lapo Calamandrei Jakub Steiner 2006-04-21 pyspread-1.99.0.1/share/icons/actions/format-justify-right.svg0000644000175000017500000003210613551171371024116 0ustar andreasandreas image/svg+xml Justify Right 2005-10-29 Andreas Nilsson justify left format pyspread-1.99.0.1/share/icons/actions/document-new.svg0000644000175000017500000004177613551171371022442 0ustar andreasandreas image/svg+xml New Document Jakub Steiner http://jimmac.musichall.cz pyspread-1.99.0.1/share/icons/actions/format-text-color.svg0000644000175000017500000001452413551171371023412 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/document-page-setup.svg0000644000175000017500000007133113551171371023711 0ustar andreasandreas image/svg+xml Print Document Jakub Steiner http://jimmac.musichall.cz document lpr print local laser bubblejet inkjet print output cups lpd pyspread-1.99.0.1/share/icons/actions/format-justify-left.svg0000644000175000017500000002560013551171371023734 0ustar andreasandreas image/svg+xml Justify Left 2005-10-29 Andreas Nilsson justify left pyspread-1.99.0.1/share/icons/actions/view-refresh.svg0000644000175000017500000004074413551171371022435 0ustar andreasandreas image/svg+xml Jakub Steiner http://jimmac.musichall.cz View Refresh reload refresh view pyspread-1.99.0.1/share/icons/actions/format-copy.svg0000644000175000017500000003006713551171371022264 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/edit-insert-row.svg0000644000175000017500000003325113551171371023056 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/view-zoom-in.svg0000644000175000017500000005774613551171371022401 0ustar andreasandreas image/svg+xml Find document search find Lapo Calamandrei Jakub Steiner 2006-04-21 pyspread-1.99.0.1/share/icons/actions/edit-insert-column.svg0000644000175000017500000003364613551171371023554 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/format-borders-outer.svg0000644000175000017500000000677113551171371024113 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/format-cell-markup.svg0000644000175000017500000012041413551171371023522 0ustar andreasandreas image/svg+xml 2006-01-04 Lapo Calamandrei http://tango-project.org text a bold write letter Andreas Nilsson </> pyspread-1.99.0.1/share/icons/actions/edit-delete-row.svg0000644000175000017500000005705313551171371023022 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/format-cell-rotate-0.svg0000644000175000017500000003416613551171371023666 0ustar andreasandreas image/svg+xml Lapo Calamandrei http://tango-project.org text a strikeout strike-out write letter strike-though jakub Steiner pyspread-1.99.0.1/share/icons/actions/edit-find-replace.svg0000644000175000017500000013147013551171371023300 0ustar andreasandreas image/svg+xml Edit Find Replace edit find locate search Garrett LeSage Jakub Steiner, Steven Garrity pyspread-1.99.0.1/share/icons/actions/format-line-color2.svg0000644000175000017500000002072213551171371023434 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/document-print.svg0000644000175000017500000005544513551171371023003 0ustar andreasandreas image/svg+xml Print Document Jakub Steiner http://jimmac.musichall.cz document lpr print local laser bubblejet inkjet print output cups lpd pyspread-1.99.0.1/share/icons/actions/edit-redo.svg0000644000175000017500000002216313551171371021676 0ustar andreasandreas image/svg+xml Jakub Steiner http://jimmac.musichall.cz Edit Redo edit redo again reapply pyspread-1.99.0.1/share/icons/actions/format-text-underline.svg0000644000175000017500000003436713551171371024270 0ustar andreasandreas image/svg+xml Format Text - Underlined Lapo Calamandrei http://tango-project.org text a strikeout strike-out write letter strike-though jakub Steiner pyspread-1.99.0.1/share/icons/actions/document-save-as.svg0000644000175000017500000007625113551171371023204 0ustar andreasandreas image/svg+xml Save As Jakub Steiner hdd hard drive save as io store http://jimmac.musichall.cz pyspread-1.99.0.1/share/icons/actions/edit-delete.svg0000644000175000017500000015321613551171371022213 0ustar andreasandreas image/svg+xml Delete Jakub Steiner edit delete shredder Novell, Inc. pyspread-1.99.0.1/share/icons/actions/format-borders-64.svg0000644000175000017500000000401513551171371023173 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/edit-copy-results.svg0000644000175000017500000004011013551171371023406 0ustar andreasandreas image/svg+xml 2005-10-15 Andreas Nilsson edit copy Jakub Steiner pyspread-1.99.0.1/share/icons/actions/view-fullscreen.svg0000644000175000017500000004750713551171371023145 0ustar andreasandreas image/svg+xml Jakub Steiner http://jimmac.musichall.cz View Fullscreen pyspread-1.99.0.1/share/icons/actions/view-show-frozen.svg0000644000175000017500000005003613551171371023253 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/format-borders-bottom.svg0000644000175000017500000000721513551171371024253 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/edit-insert-table.svg0000644000175000017500000002760313551171371023342 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/edit-select-all.svg0000644000175000017500000003703713551171371023000 0ustar andreasandreas image/svg+xml Select All Andreas Nilsson select all pyspread-1.99.0.1/share/icons/actions/format-text-strikethrough.svg0000644000175000017500000003427513551171371025203 0ustar andreasandreas image/svg+xml Strikeout 2006-01-04 Lapo Calamandrei http://tango-project.org text a strikeout strike-out write letter pyspread-1.99.0.1/share/icons/actions/format-text-bold.svg0000644000175000017500000002531113551171371023210 0ustar andreasandreas image/svg+xml Bold 2006-01-04 Lapo Calamandrei http://tango-project.org text a bold write letter Andreas Nilsson pyspread-1.99.0.1/share/icons/actions/macro-open.svg0000644000175000017500000002346513551171371022070 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/document-save.svg0000644000175000017500000007230613551171371022600 0ustar andreasandreas image/svg+xml Save Jakub Steiner hdd hard drive save io store http://jimmac.musichall.cz pyspread-1.99.0.1/share/icons/actions/edit-copy.svg0000644000175000017500000003635313551171371021725 0ustar andreasandreas image/svg+xml Edit Copy 2005-10-15 Andreas Nilsson edit copy Jakub Steiner pyspread-1.99.0.1/share/icons/actions/format-lock.svg0000644000175000017500000042753113551171371022250 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/format-borders-4.svg0000644000175000017500000000400313551171371023102 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/view-check-spelling.svg0000644000175000017500000005537113551171371023671 0ustar andreasandreas image/svg+xml Insert Text Lapo Calamandrei http://www.gnome.org insert text generic pyspread-1.99.0.1/share/icons/actions/format-borders-top-bottom.svg0000644000175000017500000000712213551171371025050 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/status-attention.svg0000644000175000017500000010227313551171371023351 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/edit-delete-column.svg0000644000175000017500000010452113551171371023501 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/macro-save.svg0000644000175000017500000002470513551171371022063 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/format-borders-all.svg0000644000175000017500000000664213551171371023522 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/document-import.svg0000644000175000017500000005103713551171371023152 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/help-dependencies.svg0000644000175000017500000126151313551171371023403 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/format-text-align-top.svg0000644000175000017500000003077213551171371024171 0ustar andreasandreas image/svg+xml Justify Center 2005-10-29 Andreas Nilsson justify center format pyspread-1.99.0.1/share/icons/actions/format-paste.svg0000644000175000017500000011113213551171371022417 0ustar andreasandreas image/svg+xml 2005-10-10 Andreas Nilsson edit paste Jakub Steiner pyspread-1.99.0.1/share/icons/actions/format-button.svg0000644000175000017500000000733113604115641022620 0ustar andreasandreas image/svg+xml OK pyspread-1.99.0.1/share/icons/actions/edit-quote.svg0000644000175000017500000011052513551171371022102 0ustar andreasandreas image/svg+xml edit find locate search Steven Garrity Jakub Steiner pyspread-1.99.0.1/share/icons/actions/format-line-color.svg0000644000175000017500000001700413551171371023351 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/edit-resize-grid.svg0000644000175000017500000001361413551171371023172 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/view-timer.svg0000644000175000017500000001402113551171371022104 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/view-zoom-out.svg0000644000175000017500000005744013551171371022571 0ustar andreasandreas image/svg+xml Find document search find Lapo Calamandrei Jakub Steiner 2006-04-21 pyspread-1.99.0.1/share/icons/actions/macro-insert-image.svg0000644000175000017500000140622613551171371023514 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/document-log-out.svg0000644000175000017500000004526713551171371023236 0ustar andreasandreas image/svg+xml Jakub Steiner http://jimmac.musichall.cz System Log Out log out logout exit pyspread-1.99.0.1/share/icons/actions/edit-sort-ascending.svg0000644000175000017500000004241713551171371023671 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/menu-manager.svg0000644000175000017500000004623413557333324022407 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/edit-delete-table.svg0000644000175000017500000005147413551171371023303 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/help-faq.svg0000644000175000017500000001315113551171371021514 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/help-tutorial.svg0000644000175000017500000000076713551171371022621 0ustar andreasandreas OOjs_UI_icon_academic-progressive pyspread-1.99.0.1/share/icons/actions/format-freeze.svg0000644000175000017500000004125013551171371022566 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/document-properties.svg0000644000175000017500000006152013551171371024032 0ustar andreasandreas image/svg+xml Document Properties document settings preferences properties tweak Jakub Steiner http://jimmac.musichall.cz pyspread-1.99.0.1/share/icons/actions/format-borders-inner.svg0000644000175000017500000000714413551171371024063 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/actions/format-justify-center.svg0000644000175000017500000003204013551171371024256 0ustar andreasandreas image/svg+xml Justify Center 2005-10-29 Andreas Nilsson justify center format pyspread-1.99.0.1/share/icons/actions/format-text-align-bottom.svg0000644000175000017500000003025113551171371024663 0ustar andreasandreas image/svg+xml Justify Center 2005-10-29 Andreas Nilsson justify center format pyspread-1.99.0.1/share/icons/actions/help-browser.svg0000644000175000017500000035601313551171371022437 0ustar andreasandreas pyspread-1.99.0.1/share/icons/actions/format-text-align-center.svg0000644000175000017500000003043613551171371024644 0ustar andreasandreas image/svg+xml Justify Center 2005-10-29 Andreas Nilsson justify center format pyspread-1.99.0.1/share/icons/status/0000755000175000017500000000000013604465726017171 5ustar andreasandreaspyspread-1.99.0.1/share/icons/status/dialog-warning.svg0000644000175000017500000001140613551171371022605 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/0000755000175000017500000000000013604465726017132 5ustar andreasandreaspyspread-1.99.0.1/share/icons/charts/chart_histogram_1_2.svg0000644000175000017500000002026413551171371023465 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_scatterhist_1_1.svg0000644000175000017500000002326313551171371024026 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_scatter_1_1.svg0000644000175000017500000002126613551171371023137 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_color_polar_1_1.svg0000644000175000017500000002665513551171371024014 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_matrix_1_3.svg0000644000175000017500000004224713551171371023002 0ustar andreasandreas image/svg+xml XY pyspread-1.99.0.1/share/icons/charts/chart_radar_1_3.svg0000644000175000017500000002073513551171371022565 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_bar_1_2.svg0000644000175000017500000001771413551171371022242 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_pie_2_1.svg0000644000175000017500000001654213551171371022251 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_scatter_4_3.svg0000644000175000017500000001542513551171371023144 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_minmax_2_2.svg0000644000175000017500000002440613551171371022764 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_boxplot_1_1.svg0000644000175000017500000002164513551171371023162 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_column_1_1.svg0000644000175000017500000001564713551171371022775 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_scatter_3_3.svg0000644000175000017500000001536713551171371023150 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_bar_1_3.svg0000644000175000017500000002133213551171371022232 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_minmax_1_3.svg0000644000175000017500000002364713551171371022772 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_contour_1_2.svg0000644000175000017500000002156613551171371023167 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_pie_3_1.svg0000644000175000017500000001673413551171371022255 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_dropbar_1_1.svg0000644000175000017500000002001113551171371023106 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_area_1_1.svg0000644000175000017500000001602213551171371022374 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_minmax_1_2.svg0000644000175000017500000001766613551171371022775 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_dropbar_1_4.svg0000644000175000017500000002044513551171371023124 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_contour_2_1.svg0000644000175000017500000002252513551171371023163 0ustar andreasandreas image/svg+xml XYZ pyspread-1.99.0.1/share/icons/charts/chart_surface_2_2.svg0000644000175000017500000013027013551171371023120 0ustar andreasandreas image/svg+xml XYZ pyspread-1.99.0.1/share/icons/charts/chart_histogram_2_1.svg0000644000175000017500000001746013551171371023471 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_area_1_2.svg0000644000175000017500000001577313551171371022411 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_histogram_1_1.svg0000644000175000017500000001722513551171371023467 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_radar_1_2.svg0000644000175000017500000002624413551171371022565 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_line_1_1.svg0000644000175000017500000001602313551171371022414 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_minmax_2_3.svg0000644000175000017500000002577013551171371022772 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_ring_1_1.svg0000644000175000017500000002406013551171371022424 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_matrix_1_2.svg0000644000175000017500000004225013551171371022773 0ustar andreasandreas image/svg+xml XYZ pyspread-1.99.0.1/share/icons/charts/chart_scatter_4_1.svg0000644000175000017500000001510113551171371023131 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_line_1_2.svg0000644000175000017500000001601313551171371022414 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_matrix_1_1.svg0000644000175000017500000004145413551171371022777 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_histogram_1_3.svg0000644000175000017500000002455313551171371023473 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_scatter_4_4.svg0000644000175000017500000001542513551171371023145 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_contour_1_1.svg0000644000175000017500000002122113551171371023152 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_surface_2_3.svg0000644000175000017500000013052313551171371023122 0ustar andreasandreas image/svg+xml XY pyspread-1.99.0.1/share/icons/charts/chart_line_2_2.svg0000644000175000017500000002401113551171371022412 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_dropbar_1_2.svg0000644000175000017500000002020513551171371023114 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_minmax_2_4.svg0000644000175000017500000003515413551171371022770 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_area_1_3.svg0000644000175000017500000001545113551171371022403 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_pie_3_2.svg0000644000175000017500000001666313551171371022257 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_contour_polar_1_1.svg0000644000175000017500000002505413551171371024357 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_surface_2_1.svg0000644000175000017500000012740013551171371023120 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_line_2_3.svg0000644000175000017500000002325513551171371022424 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_minmax_1_1.svg0000644000175000017500000002016313551171371022756 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_boxplot_2_2.svg0000644000175000017500000002550413551171371023162 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_minmax_1_4.svg0000644000175000017500000002357413551171371022772 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_scatter_4_2.svg0000644000175000017500000001534713551171371023146 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_column_1_2.svg0000644000175000017500000001721513551171371022767 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_line_1_3.svg0000644000175000017500000001525713551171371022426 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_prob_1_1.svg0000644000175000017500000001644013551171371022432 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_boxplot_2_1.svg0000644000175000017500000002573413551171371023166 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_minmax_2_1.svg0000644000175000017500000002454613551171371022770 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_contour_2_2.svg0000644000175000017500000002251013551171371023156 0ustar andreasandreas image/svg+xml XY pyspread-1.99.0.1/share/icons/charts/chart_line_2_1.svg0000644000175000017500000002406113551171371022416 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_bar_1_1.svg0000644000175000017500000001616213551171371022235 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_histogram_1_4.svg0000644000175000017500000002517713551171371023477 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_bubble_1_1.svg0000644000175000017500000002023213551171371022715 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_ring_1_2.svg0000644000175000017500000002405413551171371022430 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_scatter_3_1.svg0000644000175000017500000002273013551171371023136 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_polar_1_1.svg0000644000175000017500000002175113551171371022606 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_dropbar_1_3.svg0000644000175000017500000002023413551171371023117 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_radar_1_1.svg0000644000175000017500000002073113551171371022557 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_pie_1_1.svg0000644000175000017500000002172513551171371022247 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_colored_1_1.svg0000644000175000017500000002204113551171371023111 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_bubble_1_2.svg0000644000175000017500000002351013551171371022720 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_column_1_3.svg0000644000175000017500000002115313551171371022764 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_boxplot_1_2.svg0000644000175000017500000002067513551171371023165 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/charts/chart_scatter_3_2.svg0000644000175000017500000001473213551171371023142 0ustar andreasandreas image/svg+xml pyspread-1.99.0.1/share/icons/pyspread.ico0000644000175000017500000002446613551171371020174 0ustar andreasandreas,9 )(,r ÿÿPÿÿÿÿÿÿ•;888ÿÿÿÿÿâââÿ»»»ÿ}}}ÿÿÿÿÿšNÿ¾¾¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâââÿ§§§ÿ777ÿÿÿÿÿ cÿÿÿÿÿÿÿÿÿö÷÷ÿèééÿààâÿÿÿÿÿýýýÿûûûÿÏÏÏÿÿÿÿÿÿÿ™Dÿ}}}ÿÿÿÿÿýýþÿççèÿžž ÿijnÿwx|ÿ×רÿáááÿæççÿõõõÿòóóÿ   ÿ444ÿÿÿÿÿÿ–bÿ¾¾¾ÿÿÿÿÿõõõÿÎÏÑÿ`aeÿÔÔÖÿ¶µ¶ÿssxÿxy}ÿÑÑÓÿÝÞÞÿììíÿîîîÿìììÿÆÆÆÿ–––ÿÿÿÿÿÿÿ€Fÿÿÿÿÿÿÿÿÿççèÿžž ÿQRXÿãâäÿääåÿåäæÿµµ¶ÿtuyÿxz~ÿÐÐÑÿÐÐÒÿÓÓÔÿçèèÿåææÿÕÕÕÿ£££ÿÿÿÿÿÿÿÿÿÿ888ÿÿÿÿÿýýýÿÞßàÿ]^cÿÊÊÌÿŽŽ“ÿš›Ÿÿßßàÿäãäÿäãåÿ´³µÿtvyÿprvÿwx|ÿÄÄÄÿãããÿáááÿßßßÿÝÝÝÿ¯°°ÿÿÿÿÿÿ>ÿ}}}ÿÿÿÿÿóóôÿÏÏÒÿ``fÿÒÑÔÿäããÿßßàÿœ¡ÿ¡ÿÞÝßÿäãäÿããäÿßßàÿÜÝÞÿnpsÿuvyÿ¾¿ÀÿÜÝÝÿÚÛÛÿØØØÿÖÖÖÿ­­­ÿÿÿdÿ¾¾¾ÿÿÿÿÿÚÛÜÿžž ÿRSYÿãâäÿéèéÿïïïÿêéêÿßÞàÿžŸ£ÿž £ÿãããÿââãÿž¢ÿØØÙÿ³²³ÿrswÿrtwÿº»»ÿÖÖÖÿÔÔÔÿÒÒÒÿÏÐÐÿ’’’ÿÿÿÿ888ÿìííÿìííÿÐÑÒÿZ\aÿžž ÿŽ”ÿœœ ÿßÞàÿêéêÿïîîÿéèéÿÞÞßÿ£¤¨ÿËËÍÿ‹Œ‘ÿÖÖØÿîííÿêéêÿ³³µÿpruÿqquÿº»¼ÿÉÉÊÿÍÍÍÿËËËÿÄÄÄÿÿÿÿ{{{ÿôôôÿñññÿÏÐÑÿdfkÿÓÒÔÿããäÿßÞàÿžž¢ÿŸŸ£ÿÞÞßÿéèéÿííîÿÛÛÜÿ‹Œ‘ÿÊÊÌÿ—™œÿÞÝßÿêéêÿïïïÿêêêÿààáÿstxÿ¶¶¸ÿÄÅÅÿÉÉÉÿÇÇÇÿŸ  ÿÿÿÉÉÉÿðððÿäääÿÀÁÂÿ_`eÿãâäÿãâäÿãâäÿêéêÿÞÞßÿ  ¥ÿ ¡¥ÿÛÛÝÿÏÎÐÿ‹Œ‘ÿÏÎÑÿÜÛÝÿž £ÿžŸ£ÿßßàÿêéêÿïïïÿßßàÿkmqÿ¸¹¹ÿÆÇÇÿ­®®ÿÿÿÝÝÝÿèèèÿÑÑÒÿoooÿžž ÿ”•™ÿßßàÿåäæÿééêÿîîîÿéèéÿÝÝÞÿ˜™žÿ†‡ŒÿÊÊÌÿÛÛÜÿííîÿéééÿßÞßÿžž¢ÿ¡ÿßÞàÿÙØÚÿjkoÿ´´¶ÿÄÄÄÿ***ÿZÿãããÿßààÿÂÃÄÿcdhÿÓÒÔÿÞÞÞÿœ¡ÿ˜˜œÿ›››ÿßÞßÿéèéÿíìíÿÕÔÖÿ‹’ÿÉÉËÿ¤¥¨ÿÞÞßÿéééÿïîïÿêéêÿßßßÿ”–™ÿabfÿ««¬ÿÄÄÄÿžžžÿÿ’PPPÿØØØÿÓÓÓÿ¹¹¹ÿ`bfÿãâäÿãâäÿäãåÿäãäÿÞÝÞÿŸŸ£ÿŸ ¤ÿÜÜÜÿÎÎÐÿ‘’—ÿÚÚÛÿâáãÿ  ¥ÿŸŸ¤ÿßßàÿéééÿèèéÿÒÒÔÿdfiÿÂÃÃÿÁÂÂÿÿÿ®®®ÿÍÍÍÿÂÂÂÿ¨©«ÿVX^ÿTW^ÿoooÿÚÚÜÿââãÿâáãÿââãÿÜÜÞÿ—˜œÿ†‡ŒÿÊÊÌÿÖÕ×ÿâáãÿãâãÿÝÝßÿž¡ÿœ¡ÿÒÒÔÿefkÿ¦§¨ÿ¿ÀÀÿ|}}ÿ™ÿ»»»ÿÂÂÂÿ¯°±ÿ]_eÿow…ÿqzŠÿr{‰ÿZ]eÿY[bÿoooÿÖÖØÿáàâÿÏÏÑÿŠ‹ÿÊÊÌÿžž¢ÿ›››ÿÝÝÞÿããäÿãâäÿ×רÿ[\aÿoooÿ½½½ÿ¨¨¨ÿÿÿ¼¼¼ÿµµµÿ ¡¢ÿSV]ÿqzŠÿ{„–ÿy‚”ÿt}ÿltƒÿNR[ÿVYaÿdflÿÆÇÉÿ”ÿÛÛÝÿèçèÿßÞàÿžŸ¢ÿ›››ÿÝÝÞÿÑÑÓÿXZ_ÿ›œÿ»»»ÿ)))ÿÿ±±±ÿ¤¤¤ÿÿMPWÿqyŠÿ{…—ÿ{…—ÿ{…—ÿx‚”ÿt|ÿqz‰ÿov„ÿORYÿžž ÿÓÓÖÿèèéÿïîïÿêéêÿßÞàÿ”•™ÿ½¾Äÿoooÿ¸¹¹ÿŽÿ¨ÿŽŽŽÿ—˜˜ÿSUXÿILSÿlt‚ÿqy‰ÿt}ÿx‚”ÿ{…—ÿ]bmÿ]bmÿpyˆÿJOXÿip~ÿ[^fÿoooÿ³³µÿéééÿîîîÿØØÙÿWX^ÿŒ•ÿ¶··ÿ'''ÿ’BBBÿÿwwwÿwwwÿxxxÿKNTÿMPWÿTW`ÿrz‰ÿrzŠÿ]bmÿ]bmÿnv†ÿNT^ÿqy‰ÿt|ÿsz‰ÿZ^fÿZ^fÿ³³µÿ«ª¬ÿoooÿ­­­ÿˆˆˆÿ„ÿdddÿ\\\ÿSSSÿRRRÿaaaÿpppÿtttÿ“““ÿZ\bÿWZaÿX[cÿmt‚ÿLPZÿnv†ÿx‚“ÿ{…—ÿy‚”ÿt}Žÿrz‰ÿrz‰ÿZ[`ÿ™™šÿ±±±ÿÿÿ«««ÿäääÿ¦§§ÿabbÿMMMÿ]]]ÿoooÿÿ“““ÿ ¡¡ÿ ¡¡ÿZ\bÿORYÿTW`ÿt|ÿx‚”ÿ{…—ÿ]bmÿ]bmÿltÿoooÿ®¯¯ÿ†‡‡ÿxÿÔÔÔÿßßßÿÝÝÝÿÓÓÓÿRRRÿrrrÿÿœÿ¥¦¦ÿ«««ÿ ¡¡ÿ”•—ÿ‘’˜ÿTW`ÿTW`ÿTW`ÿ]bmÿt|ŽÿTW_ÿ­­­ÿ­­­ÿÿÿ   ÿÝÝÝÿÛÛÛÿËËËÿYZZÿxxxÿ˜™™ÿ¤¤¤ÿ¬¬¬ÿ¯¯¯ÿ¯¯¯ÿ±±±ÿ±±±ÿ±±±ÿ‘’˜ÿ‘’˜ÿTW`ÿTW`ÿZ\bÿ­­­ÿ†††ÿv v»t†’ÿÕÕÕÿàááÿÿkkkÿ€€€ÿŸŸŸÿ«««ÿ°°°ÿ±²²ÿ²³³ÿ°±±ÿ±²²ÿ±±±ÿ±±±ÿ±±±ÿ‘’˜ÿ‘’˜ÿ¬­­ÿ¬­­ÿÿ&“Ø d¤Í€’D» q±ÿÓÓÓÿzzzÿ‡‡‡ÿŸŸŸÿ§¨¨ÿ°±±ÿ³´´ÿµµµÿ´´´ÿ´´´ÿ³³³ÿ²²²ÿ±±±ÿ¯°°ÿ±±±ÿ±±±ÿ¬­­ÿ†‡‡ÿh_nw"%|"uÄ#}ÿ/£S%&& &ÿÿ©ªªÿ«¬¬ÿ¯°°ÿ¸¸¸ÿ¸¸¸ÿ¸¸¸ÿ···ÿ¶¶¶ÿ´µµÿ³´´ÿ±²²ÿ°±±ÿ®¯¯ÿ­­­ÿ­­­ÿ%%%ÿR›É&9Teµ*€û ÿÿ8DKÿZn{€Mp†LÈ<ÁÿÿÿÿkkkÿŸŸŸÿ¸¹¹ÿ·¸¸ÿ·¸¸ÿµ¶¶ÿ´´´ÿ²²²ÿ°°°ÿ¯¯¯ÿ¬­­ÿ—˜˜ÿÿ\ˆ¤nŽ¡š\irÿ+ƒÿÿDHJæÁHm38; CBB —0(ìÿÿÿÿ&&&ÿ–––ÿµµµÿ²²²ÿ°±±ÿ®¯¯ÿ­®®ÿLMMÿgdqzUÝÿÿ*‘ÿ2:?ÿ}¿9u»r¶;OB Úa*öR&ç -$à4J® $3cÿÿŒŒŒÿªªªÿ¦§§ÿ™™™ÿÿS„¤ ³ÿz­ÿS³}ÿ ÿCØÿ@AB]]\J~^DiR6)Çk/ÿm/ÿ]»»ÿ>£ø sœ™˜(Lb~Q`ÿ}£ÿw2ÿ>ÿ+ÿ kÿÿC-ÿ***ÿ...ÿÿ þýSSSÔ‰ˆˆ$±®­1uK&h@¬l>ñp3ÿ;.ÿ=pwÿ"åU`Y*5`w)RGÿ€Àžÿ i3ÿ-ÿ#ÿ ÿ$ÿBÿt>ÿ:VFÿ;™cÿ:•aÿJŒfÿ_‡pÿ1;5ÿénnnG/uJ=(oDä&sDû r7ÿ;¡‰ÿI­žý À¤¤¤ ,>:xœjMGÿ]®ÿ i3ÿ" ÿ ÿ0ÿ A ÿvBÿC’dÿL¤qÿ7›aÿ/®eÿ0±gÿ0±gÿ1µiÿw½•ÿS•oÿâ››› .uJH(qEî)sFÿt;ÿF;ÿ ô_zkC 5f9"LAÿB£mÿt6ÿ)ÿ ÿ7ÿ$wEÿE£lÿP©uÿ(¢\ÿ£Nÿ£Hÿ£Eÿ6¸mÿpÌ•ÿ$¸bÿIÇ~ÿA¸tÿs„ý¸íí힘•/vJ<(pDê)sFÿv=ÿ;¥Šÿ 쩨¨ŒŒŒ7<9È=,ÿ&œXÿ^)ÿ! ÿ ÿW#ÿB–eÿc®ƒÿ2›_ÿ ”Eÿ›Bÿ§Gÿ¦GÿiÁÿ^&ÿ`(ÿIÄ~ÿc(ÿŽHÿ`”vÿ»ðï•6xP&kAÉ)sFÿc5ÿS7ÿñ¤¥¤ ’‘‘iii]2'é*ž[ÿf-ÿ/ÿ ÿl=ÿb¯‚ÿP¦tÿEÿ”>ÿœBÿ§Fÿ Cÿg-ÿ'¹eÿ¨Jÿ¥Iÿ¬MÿªKÿ+ºhÿ0xNò ZÛÙØž˜•ly T4n$rC÷ W*ÿX%ÿ#û‹ŒŒ&‰‰‰O&-)Ó5ŒZü„CÿDÿ6ÿD–fÿiµ‰ÿ ™Tÿ’@ÿœCÿ¤Fÿ£Fÿ–?ÿn0ÿ&SÿhÅÿ¥Qÿ¥Rÿ±Vÿ*¿jÿ@®où²ÒÑÑž˜•³±¯4'!v?Á&nDÿQ!ÿ(ÿ$U……„ÃCoUù¢Uÿt0ÿO!ÿ=—bÿdµ†ÿ?ÿ˜@ÿŸDÿˆ9ÿ[$ÿg*ÿd*ÿ„HÿkÇ“ÿ'¬`ÿ'¬`ÿ²^ÿ¸`ÿuÁ•õ333§ŽŽ$ÍÊÉÄÁÀ»¸·AA@g*M“ký'mDÿR!ÿ+É:\H8CCC:'''« øK˜lÿ–Aÿi*ÿ t6ÿ:«jÿ›FÿœBÿ Dÿ¢Fÿ-ÿ+ÿ\&ÿˆKÿ\ɉÿZÁ…ÿ>µrÿ8¹oÿ=ÁvÿcÉþ+++´°°¯ž˜•ž˜•ž˜•¿¾nnmB_a+êe£ÿ^’sÿZ/ÿ ÿ ÿÿÿPˆgÿˆ8ÿs/ÿ(®`ÿ¨Sÿ¥Fÿ¥Fÿ¢Eÿz2ÿ`'ÿP#ÿbÊŽÿlÌ•ÿTÃÿ3¹lÿCÀwÿ;ÀuÿgДÿæ~6ÍÊÈž˜•ž˜•ãääHœu5ó?›eÿl©…ÿA‘cÿE%ÿ ÿ ÿŠ:ÿs2ÿ|6ÿ–MÿžCÿ§Fÿ|3ÿa(ÿh-ÿ+‹TÿjÉ“ÿK¿}ÿ²\ÿ´^ÿ%¶cÿ4¾nÿHÇ~ÿYΊó ‚úúú‘ )Y%šw1ïƒ:ÿ7˜_ÿM°vÿ3‰Wÿb/ÿW!ÿe(ÿj*ÿw0ÿŽ;ÿ£Dÿ…8ÿ§Rÿ(ºfÿTƒÿ©Iÿ¬Nÿ°Uÿ>¼uÿdÊÿxОûcÎÞ†9Ššššýýýõõõñòò\b] $ e0— …Hô‘Iÿ‰Bÿ8›aÿL—jÿ<•_ÿ*Z=ÿ#]8ÿg5ÿŽ;ÿ£Dÿ°Jÿ ´Sÿ«Iÿ§Gÿ ¬Nÿ1¸jÿaÆŒÿVÁ„ÿ)²c÷y6¿ "KŸŸŸèèè÷÷÷óóóadb /3a1¥'›Wô# Wÿ‘?ÿAÿ$Wÿ+ž[ÿ3¢aÿ" UÿŸCÿ¨Fÿ¯Jÿ°LÿªIÿ2·jÿWÁƒÿ[Çÿ-°dûp/Ù8(ƒ‰‹,üüüþþþªªªÀÀÀõõõtwt.8—ŽJí*¬`þªXÿ¤Hÿ£Eÿ¥Dÿ©Fÿ®Jÿ¯Jÿ®Mÿ&¸cÿXćÿUÀÿ4£cý|Gæ$&$›ÉÉÉ3üüüüüüQQQ «««øøø—’ !'!-v^7â”Nü'¯`ÿ#¹cÿ!·`ÿ"·aÿ+¸hÿUÀ‚ÿ]¾‡ÿE¼xÿ0§bý0‚Så3=5«žžžNüüüüüüìì쬬¬ ôôôûûûæççN\S=FA[F)®h8À%‰PÔ?ŸhöK¯wúM°wúL®vüK­uú@’cÑ!-&’®®®üüüüüüôõõýýýñññ‹Q\T8gK6;Œ]§<^¥>ašC“dŒE”frk®ˆÉæÕýýýýýýM®wM®w M®wM®wM®wÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿðÿŸÿÿÿðÿÿÿÿðÿ?ÿÿðþÿÿðþÿÿðüÿðüÿðüðøÿðøÿðøðð?ðð?ððððÿððÿðàÿðàÿðàÿðàÿðàÿðàÿðÀÿðÀÿðÀ?ÿðà?ÿðàÿððÿðøÿÏðüþðþø?ðÿ€ððÿƒÀðÿÁ€ÿðÿòÿðÿþðþüðþøðþððþÀðþÀðÿ€ðÿðÿðÿ€ðÿ€ðÿÀðÿàðÿðÿðÿøÿðÿþÿðÿÿ?ÿðÿÿáÿÿðÿÿÿÿÿðpyspread-1.99.0.1/share/templates/0000755000175000017500000000000013604465725016530 5ustar andreasandreaspyspread-1.99.0.1/share/templates/matplotlib/0000755000175000017500000000000013604465726020700 5ustar andreasandreaspyspread-1.99.0.1/share/templates/matplotlib/chart_surface_2_1.py0000644000175000017500000000103613551171371024513 0ustar andreasandreasfrom matplotlib import cm from mpl_toolkits.mplot3d import Axes3D fig = Figure() ax = fig.add_subplot(111, projection='3d') X = numpy.arange(-5, 5, 0.25) Y = numpy.arange(-5, 5, 0.25) X, Y = numpy.meshgrid(X, Y) R = numpy.sqrt(X**2 + Y**2) Z = numpy.sin(R) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.viridis) ax.set_xlabel('X', labelpad=5) ax.set_ylabel('Y', labelpad=5) ax.set_zlabel('Z', labelpad=5) ax.tick_params('x', pad=0) ax.tick_params('y', pad=0) ax.tick_params('z', pad=3) ax.set_title("Surface chart", pad=20) figpyspread-1.99.0.1/share/templates/matplotlib/chart_line_1_1.py0000644000175000017500000000036713551171371024017 0ustar andreasandreasfig = Figure() ax = fig.add_axes([.2,.2, .7, .7]) # Data for plotting t = numpy.arange(0.0, 2.0, 0.01) s = 1 + numpy.sin(2 * numpy.pi * t) ax.plot(t, s) ax.set(xlabel='Time (s)', ylabel='Voltage (mV)', title='Line chart') ax.grid() fig pyspread-1.99.0.1/share/templates/matplotlib/chart_bar_1_3.py0000644000175000017500000000353313551171371023634 0ustar andreasandreasfig = Figure() ax = fig.add_axes([.2,.05, .7, .7]) category_names = ['Strongly disagree', 'Disagree', 'Neither agree nor disagree', 'Agree', 'Strongly agree'] results = { 'Question 1': [10, 15, 17, 32, 26], 'Question 2': [26, 22, 29, 10, 13], 'Question 3': [35, 37, 7, 2, 19], 'Question 4': [32, 11, 9, 15, 33], 'Question 5': [21, 29, 5, 5, 40], 'Question 6': [8, 19, 5, 30, 38] } def survey(fig, ax, results, category_names): """ Parameters ---------- results : dict A mapping from question labels to a list of answers per category. It is assumed all lists contain the same number of entries and that it matches the length of *category_names*. category_names : list of str The category labels. """ from matplotlib import cm labels = list(results.keys()) data = numpy.array(list(results.values())) data_cum = data.cumsum(axis=1) category_colors = cm.RdYlGn(numpy.linspace(0.15, 0.85, data.shape[1])) ax.invert_yaxis() ax.xaxis.set_visible(False) ax.set_xlim(0, numpy.sum(data, axis=1).max()) for i, (colname, color) in enumerate(zip(category_names, category_colors)): widths = data[:, i] starts = data_cum[:, i] - widths ax.barh(labels, widths, left=starts, height=0.5, label=colname, color=color) xcenters = starts + widths / 2 r, g, b, _ = color text_color = 'white' if r * g * b < 0.5 else 'darkgrey' for y, (x, c) in enumerate(zip(xcenters, widths)): ax.text(x, y, str(int(c)), ha='center', va='center', color=text_color) ax.legend(ncol=2, bbox_to_anchor=(0, 1), loc='lower left', fontsize='small') ax.set_title("Normalized stacked bar chart", pad=60) return fig survey(fig, ax, results, category_names) pyspread-1.99.0.1/share/templates/matplotlib/COPYING0000644000175000017500000000536113551171371021727 0ustar andreasandreasThe files in this folder are adapted from the matplotlib gallery. Adaptations comprise: + An initial line for instantiating a figure. + Changes from pylab to the object oriented interface. + Removal of features for simpler and shorter templates. + Addition of the final line that states the figure object. The files in this folder are licensed with the same license as matplolib (see https://matplotlib.org/3.1.1/users/license.html): 1. This LICENSE AGREEMENT is between the Matplotlib Development Team ("MDT"), and the Individual or Organization ("Licensee") accessing and otherwise using matplotlib software in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, MDT 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 matplotlib 3.1.1 alone or in any derivative version, provided, however, that MDT's License Agreement and MDT's notice of copyright, i.e., "Copyright (c) 2012-2013 Matplotlib Development Team; All Rights Reserved" are retained in matplotlib 3.1.1 alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates matplotlib 3.1.1 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 matplotlib 3.1.1. 4. MDT is making matplotlib 3.1.1 available to Licensee on an "AS IS" basis. MDT MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, MDT MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF MATPLOTLIB 3.1.1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. MDT SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF MATPLOTLIB 3.1.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING MATPLOTLIB 3.1.1, 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 MDT and Licensee. This License Agreement does not grant permission to use MDT 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 matplotlib 3.1.1, Licensee agrees to be bound by the terms and conditions of this License Agreement.pyspread-1.99.0.1/share/templates/matplotlib/chart_matrix_1_1.py0000644000175000017500000000076713551171371024400 0ustar andreasandreasfig = Figure() ax = fig.add_axes([.2,.2, .7, .7]) N_points = 100000 n_bins = 20 # Fixing random state for reproducibility numpy.random.seed(19680801) # Generate a normal distribution, center at x=0 and y=5 x = numpy.random.randn(N_points) y = .4 * x + numpy.random.randn(100000) + 5 # We can set the number of bins with the `bins` kwarg # We can also define custom numbers of bins for each axis ax.hist2d(x, y, bins=(50,30)) ax.set(xlabel='X', ylabel='Y') ax.set_title('Matrix chart', pad=20) fig pyspread-1.99.0.1/share/templates/matplotlib/chart_bubble_1_1.py0000644000175000017500000000057113551171371024320 0ustar andreasandreasfig = Figure() ax = fig.add_axes([.2,.2, .7, .7]) # Fixing random state for reproducibility numpy.random.seed(19680801) N = 50 x = numpy.random.rand(N) y = numpy.random.rand(N) colors = numpy.random.rand(N) area = (30 * numpy.random.rand(N))**2 # 0 to 15 point radii ax.scatter(x, y, s=area, c=colors, alpha=0.5) ax.set(title='Bubble chart', xlabel="X", ylabel="Y") fig pyspread-1.99.0.1/share/templates/matplotlib/chart_column_1_1.py0000644000175000017500000000205713551171371024363 0ustar andreasandreasfig = Figure() ax = fig.add_axes([.2, .2, .7, .7]) labels = ['G1', 'G2', 'G3', 'G4', 'G5'] men_means = [20, 34, 30, 35, 27] women_means = [25, 32, 34, 20, 25] x = numpy.arange(len(labels)) # the label locations width = 0.35 # the width of the bars rects1 = ax.bar(x - width/2, men_means, width, label='Men') rects2 = ax.bar(x + width/2, women_means, width, label='Women') # Add some text for labels, title and custom x-axis tick labels, etc. ax.set_ylabel('Scores') ax.set_title('Grouped column chart') ax.set_xticks(x) ax.set_xticklabels(labels) ax.set_ylim(None, 50) ax.legend() def autolabel(rects, ax): """Attach a text label above each bar in *rects*, displaying its height.""" for rect in rects: height = rect.get_height() ax.annotate('{}'.format(height), xy=(rect.get_x() + rect.get_width() / 2, height), xytext=(0, 3), # 3 points vertical offset textcoords="offset points", ha='center', va='bottom') autolabel(rects1, ax) autolabel(rects2, ax) figpyspread-1.99.0.1/share/templates/matplotlib/chart_histogram_1_4.py0000644000175000017500000000252513551171371025066 0ustar andreasandreasfig = Figure() ax = fig.add_axes([.2,.2, .7, .7]) numpy.random.seed(19680801) number_of_bins = 20 # An example of three data sets to compare number_of_data_points = 387 labels = ["A", "B", "C"] data_sets = [numpy.random.normal(0, 1, number_of_data_points), numpy.random.normal(6, 1, number_of_data_points), numpy.random.normal(-3, 1, number_of_data_points)] # Computed quantities to aid plotting hist_range = (numpy.min(data_sets), numpy.max(data_sets)) binned_data_sets = [] for d in data_sets: h = numpy.histogram(d, range=hist_range, bins=number_of_bins)[0] binned_data_sets.append(h) binned_maximums = numpy.max(binned_data_sets, axis=1) x_locations = numpy.arange(0, sum(binned_maximums), numpy.max(binned_maximums)) # The bin_edges are the same for all of the histograms bin_edges = numpy.linspace(hist_range[0], hist_range[1], number_of_bins + 1) centers = 0.5 * (bin_edges + numpy.roll(bin_edges, 1))[:-1] heights = numpy.diff(bin_edges) # Cycle through and plot each histogram for x_loc, binned_data in zip(x_locations, binned_data_sets): lefts = x_loc - 0.5 * binned_data ax.barh(centers, binned_data, height=heights, left=lefts) ax.set_xticks(x_locations) ax.set_xticklabels(labels) ax.set_ylabel("Data values") ax.set_xlabel("Data sets") ax.set_title('Multiple vertical histogram charts', pad=15) fig pyspread-1.99.0.1/share/templates/matplotlib/chart_column_1_2.py0000644000175000017500000000120113551171371024352 0ustar andreasandreasfig = Figure() ax = fig.add_axes([.2,.2, .7, .7]) N = 5 menMeans = (20, 35, 30, 35, 27) womenMeans = (25, 32, 34, 20, 25) menStd = (2, 3, 4, 1, 2) womenStd = (3, 5, 2, 3, 3) ind = numpy.arange(N) # the x locations for the groups width = 0.35 # the width of the bars: can also be len(x) sequence p1 = ax.bar(ind, menMeans, width, yerr=menStd) p2 = ax.bar(ind, womenMeans, width, bottom=menMeans, yerr=womenStd) ax.yaxis.set_label('Scores') ax.set_title('Stacked column chart') ax.set_xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5')) ax.set_yticks(numpy.arange(0, 81, 10)) ax.legend((p1[0], p2[0]), ('Men', 'Women')) fig pyspread-1.99.0.1/share/templates/matplotlib/chart_pie_1_1.py0000644000175000017500000000071013551171371023635 0ustar andreasandreasfig = Figure() ax = fig.add_axes([.2,.2, .7, .7]) # Pie chart, where the slices will be ordered and plotted counter-clockwise: labels = 'Frogs', 'Hogs', 'Dogs', 'Logs' sizes = [15, 30, 45, 10] explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs') ax.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', startangle=90) ax.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle. ax.set(title='Pie chart') fig pyspread-1.99.0.1/share/templates/matplotlib/chart_scatterhist_1_1.py0000644000175000017500000000256013551171371025422 0ustar andreasandreasfrom mpl_toolkits.axes_grid1 import make_axes_locatable fig = Figure() ax = fig.add_axes([.2,.2, .7, .7]) # Fixing random state for reproducibility numpy.random.seed(19680801) # the random data x = numpy.random.randn(1000) y = numpy.random.randn(1000) # the scatter plot: ax.scatter(x, y, alpha=0.08) ax.set_aspect(1.) # create new axes on the right and on the top of the current axes # The first argument of the new_vertical(new_horizontal) method is # the height (width) of the axes to be created in inches. divider = make_axes_locatable(ax) axHistx = divider.append_axes("top", 0.6, pad=0.1, sharex=ax) axHisty = divider.append_axes("right", 0.6, pad=0.1, sharey=ax) # Make some labels invisible axHistx.xaxis.set_tick_params(labelbottom=False) axHisty.yaxis.set_tick_params(labelleft=False) # Determine nice limits by hand: binwidth = 0.25 xymax = max(numpy.max(numpy.abs(x)), numpy.max(numpy.abs(y))) lim = (int(xymax/binwidth) + 1)*binwidth bins = numpy.arange(-lim, lim + binwidth, binwidth) axHistx.hist(x, bins=bins) axHisty.hist(y, bins=bins, orientation='horizontal') # the xaxis of axHistx and yaxis of axHisty are shared with axScatter, # thus there is no need to manually adjust the xlim and ylim of these # axis. axHistx.set_yticks([0, 50, 100]) axHisty.set_xticks([0, 50, 100]) ax.set(xlabel="X", ylabel="Y") ax.set_title('Scatter histogram chart', pad=70) fig pyspread-1.99.0.1/share/templates/matplotlib/chart_ring_1_1.py0000644000175000017500000000102113551171371024013 0ustar andreasandreasfrom matplotlib import cm fig = Figure() ax = fig.add_axes([.2,.2, .7, .7]) size = 0.3 vals = numpy.array([[60., 32.], [37., 40.], [29., 10.]]) cmap = cm.tab20c outer_colors = cmap(numpy.arange(3)*4) inner_colors = cmap(numpy.array([1, 2, 5, 6, 9, 10])) ax.pie(vals.sum(axis=1), radius=1, colors=outer_colors, wedgeprops=dict(width=size, edgecolor='w')) ax.pie(vals.flatten(), radius=1-size, colors=inner_colors, wedgeprops=dict(width=size, edgecolor='w')) ax.set(aspect="equal", title="Pie ring chart") fig pyspread-1.99.0.1/share/templates/matplotlib/chart_area_1_1.py0000644000175000017500000000052513551171371023774 0ustar andreasandreasfig = Figure() ax = fig.add_axes([.2,.2, .7, .7]) # Data for plotting t = numpy.arange(0.0, 2.0, 0.01) s = 1 + numpy.sin(2 * numpy.pi * t) ax.plot(t, s) ax.fill_between(t, 0, s, facecolor='blue', alpha=0.5) ax.set_xlim(0, 2) ax.set_ylim(0, None) ax.set(xlabel='Time (s)', ylabel='Voltage (mV)', title='Area chart') ax.grid() fig pyspread-1.99.0.1/share/templates/matplotlib/chart_polar_1_1.py0000644000175000017500000000057213551171371024203 0ustar andreasandreasfig = Figure() ax = fig.add_axes([.2,.2, .7, .7], projection='polar') r = numpy.arange(0, 2, 0.01) theta = 2 * numpy.pi * r ax.plot(theta, r) ax.set_rmax(2) ax.set_rticks([0.5, 1, 1.5, 2]) # Less radial ticks ax.set_rlabel_position(-22.5) # Move radial labels away from plotted line ax.grid(True) ax.set(aspect="equal") ax.set_title("Line plot on polar axis", pad=20) fig pyspread-1.99.0.1/share/templates/matplotlib/chart_scatter_1_1.py0000644000175000017500000000060113551171371024524 0ustar andreasandreasfig = Figure() ax = fig.add_axes([.2,.2, .7, .7]) # Fixing random state for reproducibility numpy.random.seed(19680801) N = 50 x1 = numpy.random.rand(N) y1 = numpy.random.rand(N) x2 = 0.5 + numpy.random.rand(N) * 2 y2 = numpy.random.rand(N) ** 2 ax.scatter(x1, y1, c='r', alpha=0.5) ax.scatter(x2, y2, c='b', alpha=0.5) ax.set(title='Scatter chart', xlabel="X", ylabel="Y") fig pyspread-1.99.0.1/share/templates/matplotlib/chart_histogram_1_1.py0000644000175000017500000000057313551171371025064 0ustar andreasandreasfig = Figure() ax = fig.add_axes([.2,.2, .7, .7]) N_points = 100000 n_bins = 20 # Fixing random state for reproducibility numpy.random.seed(19680801) # Generate a normal distribution x = numpy.random.randn(N_points) # We can set the number of bins with the `bins` kwarg ax.hist(x, bins=n_bins) ax.set(xlabel='Value', ylabel='Frequency', title='Histogram chart') fig pyspread-1.99.0.1/share/templates/matplotlib/chart_boxplot_2_2.py0000644000175000017500000000137513551171371024561 0ustar andreasandreasfig = Figure() ax = fig.add_axes([.2,.2, .7, .7]) # Fixing random state for reproducibility numpy.random.seed(19680801) spread = numpy.random.rand(50) * 100 center = numpy.ones(25) * 50 flier_high = numpy.random.rand(10) * 100 + 100 flier_low = numpy.random.rand(10) * -100 data = numpy.concatenate((spread, center, flier_high, flier_low)) spread = numpy.random.rand(50) * 100 center = numpy.ones(25) * 40 flier_high = numpy.random.rand(10) * 100 + 100 flier_low = numpy.random.rand(10) * -100 d2 = numpy.concatenate((spread, center, flier_high, flier_low)) data.shape = (-1, 1) d2.shape = (-1, 1) data = [data, d2, d2[::2, 0]] # Multiple box plots on one Axes ax.boxplot(data) ax.set(xlabel='Data series', ylabel='Value', title='Boxplot chart') fig pyspread-1.99.0.1/share/templates/matplotlib/chart_contour_1_2.py0000644000175000017500000000123513551171371024555 0ustar andreasandreasfrom matplotlib import cm fig = Figure() ax = fig.add_axes([.15,.15, .75, .75]) origin = 'lower' delta = 0.025 x = y = numpy.arange(-3.0, 3.01, delta) X, Y = numpy.meshgrid(x, y) Z1 = numpy.exp(-X**2 - Y**2) Z2 = numpy.exp(-(X - 1)**2 - (Y - 1)**2) Z = (Z1 - Z2) * 2 CS = ax.contourf(X, Y, Z, 10, cmap=cm.bone, origin=origin) CS2 = ax.contour(CS, levels=CS.levels[::2], colors='r', origin=origin) ax.set_title('Contour chart', pad=15) ax.set_xlabel('X') ax.set_ylabel('Y') # Make a colorbar for the ContourSet returned by the contourf call. cbar = fig.colorbar(CS) cbar.ax.set_ylabel('Z') # Add the contour line levels to the colorbar cbar.add_lines(CS2) fig pyspread-1.99.0.1/PKG-INFO0000644000175000017500000000233713604465726014533 0ustar andreasandreasMetadata-Version: 2.1 Name: pyspread Version: 1.99.0.1 Summary: Python spreadsheet Home-page: https://pyspread.gitlab.io/ Author: Martin Manns Author-email: mmanns@gmx.net License: GPL v3 :: GNU General Public License Project-URL: Bug Tracker, https://gitlab.com/pyspread/pyspread/issues Project-URL: Documentation, https://pyspread.gitlab.io/docs.html Project-URL: Source Code, https://gitlab.com/pyspread/pyspread Description: Pyspread is a non-traditional spreadsheet application that is based on and written in the programming language Python. Keywords: spreadsheet,pyspread Platform: UNKNOWN Classifier: Development Status :: 3 - Alpha Classifier: Environment :: X11 Applications :: GTK Classifier: Environment :: Win32 (MS Windows) Classifier: Intended Audience :: End Users/Desktop Classifier: License :: OSI Approved :: GNU General Public License (GPL) Classifier: Natural Language :: English Classifier: Operating System :: OS Independent Classifier: Operating System :: POSIX Classifier: Operating System :: Microsoft Classifier: Programming Language :: Python :: 3.7 Classifier: Topic :: Office/Business :: Financial :: Spreadsheet Requires: numpy (>=1.1) Requires: PyQt5 (>=5.11.3) Provides-Extra: matplotlib Provides-Extra: pyenchant pyspread-1.99.0.1/setup.py0000644000175000017500000000575313600154150015133 0ustar andreasandreas#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- from setuptools import setup, find_packages from setuptools.command.test import test as TestCommand import sys from src import VERSION class PyTest(TestCommand): user_options = [("pytest-args=", "a", "Arguments to pass to pytest")] def initialize_options(self): TestCommand.initialize_options(self) self.pytest_args = "--capture=sys" def run_tests(self): import shlex # import here, cause outside the eggs aren't loaded import pytest errno = pytest.main(shlex.split(self.pytest_args)) sys.exit(errno) setup( name='pyspread', version=VERSION, packages=find_packages(), package_dir={'': '.'}, scripts=['pyspread.sh'], include_package_data=True, description='Python spreadsheet', long_description='Pyspread is a non-traditional spreadsheet application' ' that is based on and written in the programming language Python.', license='GPL v3 :: GNU General Public License', keywords=['spreadsheet', 'pyspread'], author='Martin Manns', author_email='mmanns@gmx.net', url='https://pyspread.gitlab.io/', project_urls={ "Bug Tracker": "https://gitlab.com/pyspread/pyspread/issues", "Documentation": "https://pyspread.gitlab.io/docs.html", "Source Code": "https://gitlab.com/pyspread/pyspread", }, requires=['numpy (>=1.1)', 'PyQt5 (>=5.11.3)'], extras_require={ 'matplotlib': ['matplotlib (>=1.1.1)'], 'pyenchant': ['pyenchant (>=1.1)'], }, tests_require=["pytest"], cmdclass={"pytest": PyTest}, classifiers=[ 'Development Status :: 3 - Alpha', 'Environment :: X11 Applications :: GTK', 'Environment :: Win32 (MS Windows)', 'Intended Audience :: End Users/Desktop', 'License :: OSI Approved :: GNU General Public License (GPL)', 'Natural Language :: English', 'Operating System :: OS Independent', 'Operating System :: POSIX', 'Operating System :: Microsoft', 'Programming Language :: Python :: 3.7', 'Topic :: Office/Business :: Financial :: Spreadsheet', ], ) pyspread-1.99.0.1/src/0000755000175000017500000000000013604465725014217 5ustar andreasandreaspyspread-1.99.0.1/src/actions.py0000644000175000017500000012345313604454500016226 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ - :class:`Action` is a quick one liner way to create `QAction` - """ from PyQt5.QtWidgets import QAction, QActionGroup from PyQt5.QtGui import QKeySequence try: import matplotlib.figure as matplotlib_figure except ImportError: matplotlib_figure = None from src.icons import Icon from src.lib.attrdict import AttrDict from src.lib.dependencies import get_enchant_version class Action(QAction): """A convenience class for creating a `QAction` .. Note: Parameter order has changed comparing with QAction """ def __init__(self, parent, label, *callbacks, icon=None, shortcut=None, statustip=None, checkable=False): """ :param parent: The parent object, normally :class:`pyspread.MainWindow` :param label: The text to appear :param callbacks: the callback functions :param icon: the :class:`icons.Icon` :param shortcut: The magic kestrokes if ant :param statustip: The popup message :param checkable: Has a checkbox """ if icon is None: super().__init__(label, parent, checkable=checkable) else: super().__init__(icon, label, parent, checkable=checkable) if shortcut is not None: self.setShortcut(shortcut) if statustip is not None: self.setStatusTip(statustip) for connect in callbacks: self.triggered.connect(connect) class MainWindowActions(AttrDict): """Holds all QActions for the main window""" def __init__(self, parent): super().__init__() self.parent = parent self.create_file_actions() self.create_edit_actions() self.create_view_actions() self.create_format_actions() self.create_macro_actions() self.create_help_actions() self.disable_unavailable() def create_file_actions(self): """actions for File menu""" self.new = Action(self.parent, "&New", self.parent.workflows.file_new, icon=Icon.new, shortcut='Ctrl+n', statustip='Create a new, empty spreadsheet') self.open = Action(self.parent, "&Open", self.parent.workflows.file_open, icon=Icon.open, statustip='Open spreadsheet from file') self.save = Action(self.parent, "&Save", self.parent.workflows.file_save, icon=Icon.save, shortcut='Ctrl+s', statustip='Save spreadsheet') self.save_as = Action(self.parent, "Save &As", self.parent.workflows.file_save_as, icon=Icon.save_as, shortcut='Shift+Ctrl+s', statustip='Save spreadsheet to a new file') self.imprt = Action(self.parent, "&Import", self.parent.workflows.file_import, icon=Icon.imprt, statustip='Import a file and paste it into the ' 'current grid') self.export = Action(self.parent, "&Export", self.parent.workflows.file_export, icon=Icon.export, statustip="Export selection to a file") self.approve = Action(self.parent, "&Approve file", self.parent.on_approve, icon=Icon.approve, statustip='Approve, unfreeze and sign the ' 'current file') self.clear_globals = Action(self.parent, "&Clear globals", self.parent.on_clear_globals, icon=Icon.clear_globals, statustip='Deletes global variables ' 'and reloads base modules') self.print_preview = Action(self.parent, "Print preview", self.parent.on_preview, icon=Icon.print_preview, statustip='Print preview') self.print = Action(self.parent, "Print", self.parent.on_print, icon=Icon.print, shortcut='Ctrl+p', statustip='Print current spreadsheet') self.preferences = Action(self.parent, "Preferences...", self.parent.on_preferences, icon=Icon.preferences, statustip='Pyspread setup parameters') self.quit = Action(self.parent, "&Quit", self.parent.closeEvent, icon=Icon.quit, shortcut='Ctrl+Q', statustip='Exit pyspread') def create_edit_actions(self): """actions for Edit menu""" self.undo = Action(self.parent, "&Undo", self.parent.on_undo, icon=Icon.undo, shortcut='Ctrl+z', statustip='Undo last step') self.redo = Action(self.parent, "&Redo", self.parent.on_redo, icon=Icon.redo, shortcut='Shift+Ctrl+z', statustip='Redo last undone step') self.cut = Action(self.parent, "Cut", self.parent.workflows.edit_cut, icon=Icon.cut, shortcut='Ctrl+x', statustip='Cut cell to the clipboard') self.copy = Action(self.parent, "&Copy", self.parent.workflows.edit_copy, icon=Icon.copy, shortcut='Ctrl+c', statustip='Copy the input strings of the cells ' 'to the clipboard') self.copy_results = Action(self.parent, "Copy results", self.parent.workflows.edit_copy_results, icon=Icon.copy_results, shortcut='Shift+Ctrl+c', statustip='Copy the result strings of ' 'the cells to the clipboard') self.paste = Action(self.parent, "&Paste", self.parent.workflows.edit_paste, icon=Icon.paste, shortcut='Ctrl+v', statustip='Paste cells from the clipboard') self.paste_as = Action(self.parent, "Paste as...", self.parent.workflows.edit_paste_as, icon=Icon.paste_as, shortcut='Shift+Ctrl+v', statustip='Transform clipboard and paste ' 'results') self.find = Action(self.parent, "&Find...", self.parent.workflows.edit_find, icon=Icon.find, shortcut='Ctrl+f', statustip='Find dialog') self.find_next = Action(self.parent, "&Find next", self.parent.workflows.edit_find_next, icon=Icon.find_next, shortcut='F3', statustip='Find next matching cell') self.replace = Action(self.parent, "&Replace...", self.parent.workflows.edit_replace, icon=Icon.replace, shortcut='Shift+Ctrl+f', statustip='Replace sub-strings in cells') self.quote = Action(self.parent, "&Quote", self.parent.grid.on_quote, icon=Icon.quote, shortcut='Ctrl+Return', statustip="Convert cells' code to strings by " "addding quotes") self.insert_rows = Action(self.parent, "Insert rows", self.parent.grid.on_insert_rows, icon=Icon.insert_row, statustip='Insert max(1, no. selected ' 'rows) rows at cursor') self.insert_columns = Action(self.parent, "Insert columns", self.parent.grid.on_insert_columns, icon=Icon.insert_column, statustip='Insert max(1, no. selected ' 'columns) columns at cursor') self.insert_table = Action(self.parent, "Insert table", self.parent.grid.on_insert_table, icon=Icon.insert_table, statustip='Insert table before current ' 'table') self.delete_rows = Action(self.parent, "Delete rows", self.parent.grid.on_delete_rows, icon=Icon.delete_row, statustip='Delete max(1, no. selected ' 'rows) rows at cursor') self.delete_columns = Action(self.parent, "Delete columns", self.parent.grid.on_delete_columns, icon=Icon.delete_column, statustip='Delete max(1, no. selected ' 'columns) columns at cursor') self.delete_table = Action(self.parent, "Delete table", self.parent.grid.on_delete_table, icon=Icon.delete_table, statustip='Delete current table') self.resize_grid = Action(self.parent, "Resize grid", self.parent.workflows.edit_resize, icon=Icon.resize_grid, statustip='Resizes the current grid') def create_view_actions(self): """actions for View menu""" self.fullscreen = Action(self.parent, "Fullscreen", self.parent.on_fullscreen, icon=Icon.fullscreen, shortcut='F11', statustip='Show grid in fullscreen mode ' '(press to leave)') self.toggle_main_toolbar = Action(self.parent, "Main toolbar", self.parent.on_toggle_main_toolbar, checkable=True, statustip='Show/hide the main ' 'toolbar') self.toggle_macro_toolbar = Action(self.parent, "Macro toolbar", self.parent.on_toggle_macro_toolbar, checkable=True, statustip='Show/hide the macro ' 'toolbar') self.toggle_format_toolbar = \ Action(self.parent, "Format toolbar", self.parent.on_toggle_format_toolbar, checkable=True, statustip='Show/hide the format toolbar') self.toggle_find_toolbar = Action(self.parent, "Find toolbar", self.parent.on_toggle_find_toolbar, checkable=True, statustip='Show/hide the find ' 'toolbar') self.toggle_entry_line = Action(self.parent, "Entry line", self.parent.on_toggle_entry_line, checkable=True, statustip='Show/hide the entry line') self.toggle_macro_panel = Action(self.parent, "Macro panel", self.parent.on_toggle_macro_panel, checkable=True, shortcut='F4', statustip='Show/hide the macro panel') self.goto_cell = Action(self.parent, "Go to cell", self.parent.workflows.view_goto_cell, icon=Icon.goto_cell, shortcut='Ctrl+g', statustip='Select a cell and put it into view') self.toggle_spell_checker = \ Action(self.parent, "Toggle spell checker", self.parent.entry_line.on_toggle_spell_check, icon=Icon.check_spelling, checkable=True, statustip='Turn the spell checker in the entry line on/off') self.zoom_in = Action(self.parent, "Zoom in", self.parent.grid.on_zoom_in, icon=Icon.zoom_in, shortcut='Ctrl++', statustip='Zoom in the grid') self.zoom_out = Action(self.parent, "Zoom out", self.parent.grid.on_zoom_out, icon=Icon.zoom_out, shortcut='Ctrl+-', statustip='Zoom out the grid') self.zoom_1 = Action(self.parent, "Original size", self.parent.grid.on_zoom_1, icon=Icon.zoom_1, shortcut='Ctrl+0', statustip='Show grid on standard zoom level') self.refresh_cells = \ Action(self.parent, "Refresh selected cells", self.parent.grid.refresh_selected_frozen_cells, icon=Icon.refresh, shortcut=QKeySequence.Refresh, statustip='Refresh selected cells even when frozen') self.toggle_periodic_updates = \ Action(self.parent, "Toggle periodic updates", self.parent.on_toggle_refresh_timer, icon=Icon.toggle_periodic_updates, checkable=True, statustip='Toggles periodic updates for frozen cells') self.show_frozen = Action(self.parent, "Show frozen", self.parent.grid.on_show_frozen_pressed, icon=Icon.show_frozen, checkable=True, statustip='Indicates frozen cells with a ' 'background crosshatch') def create_format_actions(self): """actions for Format menu""" self.copy_format = Action(self.parent, "&Copy format", self.parent.workflows.format_copy_format, icon=Icon.copy_format, statustip='Copy format of selection to ' 'the clipboard') self.paste_format = \ Action(self.parent, "&Paste format", self.parent.workflows.format_paste_format, icon=Icon.paste_format, statustip='Apply format from the clipboard to the selected ' 'cells') self.font = Action(self.parent, "&Font...", self.parent.grid. on_font_dialog, icon=Icon.font_dialog, shortcut='Ctrl+n', statustip='Lauch font dialog') self.bold = Action(self.parent, "&Bold", self.parent.grid.on_bold_pressed, icon=Icon.bold, shortcut='Ctrl+b', checkable=True, statustip='Toggle bold font weight for the ' 'selected cells') self.italics = Action(self.parent, "&Italics", self.parent.grid.on_italics_pressed, icon=Icon.italics, shortcut='Ctrl+i', checkable=True, statustip='Toggle italics font style for the ' 'selected cells') self.underline = Action(self.parent, "&Underline", self.parent.grid.on_underline_pressed, icon=Icon.underline, shortcut='Ctrl+u', checkable=True, statustip='Toggle underline for the ' 'selected cells') self.strikethrough = Action(self.parent, "&Strikethrough", self.parent.grid.on_strikethrough_pressed, icon=Icon.strikethrough, checkable=True, statustip='Toggle strikethrough for the ' 'selected cells') self.text = Action(self.parent, "Text renderer", self.parent.grid.on_text_renderer_pressed, icon=Icon.text, checkable=True, statustip='Show cell results as text (default). ' 'Formats affect the whole cell') self.markup = Action(self.parent, "Markup renderer", self.parent.grid.on_markup_renderer_pressed, icon=Icon.markup, checkable=True, statustip='Show cell results as markup, which ' 'allows partly formatted output') self.image = Action(self.parent, "Image renderer", self.parent.grid.on_image_renderer_pressed, icon=Icon.image, checkable=True, statustip='Show cell results as image. A numpy ' 'array of shape (x, y, 3) ' 'is expected') if matplotlib_figure is not None: self.matplotlib = \ Action(self.parent, "Matplotlib chart renderer", self.parent.grid.on_matplotlib_renderer_pressed, icon=Icon.matplotlib, checkable=True, statustip='Show cell results as matplotlib chart. A ' 'numpy array of shape (x, y, 3) is expected') renderer_group = QActionGroup(self.parent) renderer_group.addAction(self.text) renderer_group.addAction(self.markup) renderer_group.addAction(self.image) if matplotlib_figure is not None: renderer_group.addAction(self.matplotlib) self.text_color = Action( self.parent, "Text color...", self.parent.widgets.text_color_button.on_pressed, icon=Icon.text_color, statustip='Lauch text color dialog') self.line_color = Action( self.parent, "Line color...", self.parent.widgets.line_color_button.on_pressed, icon=Icon.line_color, statustip='Lauch line color dialog') self.background_color = Action( self.parent, "Background color...", self.parent.widgets.background_color_button.on_pressed, icon=Icon.background_color, statustip='Lauch background color dialog') self.freeze_cell = Action(self.parent, "Freeze cell", self.parent.grid.on_freeze_pressed, icon=Icon.freeze, checkable=True, statustip='Freeze the selected cell so that ' 'is is only updated when is ' 'pressed') self.lock_cell = Action(self.parent, "Lock cell", self.parent.grid.on_lock_pressed, icon=Icon.lock, checkable=True, statustip='Lock cell so that its code ' 'cannot be changed') self.button_cell = Action(self.parent, "Button cell", self.parent.grid.on_button_cell_pressed, icon=Icon.button, checkable=True, statustip='Make cell a button cell that is ' 'executed only when pressed') self.merge_cells = Action(self.parent, "Merge cells", self.parent.grid.on_merge_pressed, icon=Icon.merge_cells, checkable=True, statustip='Merge/unmerge selected cells') self.rotate_0 = Action(self.parent, "0°", self.parent.grid.on_rotate_0, icon=Icon.rotate_0, checkable=True, statustip='Set text rotation to 0°') self.rotate_90 = Action(self.parent, "90°", self.parent.grid.on_rotate_90, icon=Icon.rotate_90, checkable=True, statustip='Set text rotation to 90°') self.rotate_180 = Action(self.parent, "180°", self.parent.grid.on_rotate_180, icon=Icon.rotate_180, checkable=True, statustip='Set text rotation to 180°') self.rotate_270 = Action(self.parent, "270°", self.parent.grid.on_rotate_270, icon=Icon.rotate_270, checkable=True, statustip='Set text rotation to 270°') rotate_group = QActionGroup(self.parent) rotate_group.addAction(self.rotate_0) rotate_group.addAction(self.rotate_90) rotate_group.addAction(self.rotate_180) rotate_group.addAction(self.rotate_270) self.justify_left = Action(self.parent, "Left", self.parent.grid.on_justify_left, icon=Icon.justify_left, checkable=True, statustip='Display cell result text ' 'left justified') self.justify_center = Action(self.parent, "Center", self.parent.grid.on_justify_center, checkable=True, icon=Icon.justify_center, statustip='Display cell result text ' 'centered') self.justify_right = Action(self.parent, "Right", self.parent.grid.on_justify_right, checkable=True, icon=Icon.justify_right, statustip='Display cell result text ' 'right justified') self.justify_fill = Action(self.parent, "Fill", self.parent.grid.on_justify_fill, icon=Icon.justify_fill, checkable=True, statustip='Display cell result text ' 'filled into the cell') justify_group = QActionGroup(self.parent) justify_group.addAction(self.justify_left) justify_group.addAction(self.justify_center) justify_group.addAction(self.justify_right) justify_group.addAction(self.justify_fill) self.align_top = Action(self.parent, "Top", self.parent.grid.on_align_top, icon=Icon.align_top, checkable=True, statustip='Align cell result at the top of ' 'the cell') self.align_center = Action(self.parent, "Center", self.parent.grid.on_align_middle, icon=Icon.align_center, checkable=True, statustip='Center cell result within ' 'the cell') self.align_bottom = Action(self.parent, "Bottom", self.parent.grid.on_align_bottom, icon=Icon.align_bottom, checkable=True, statustip='Align cell result at the ' 'bottom of the cell') align_group = QActionGroup(self.parent) align_group.addAction(self.align_top) align_group.addAction(self.align_center) align_group.addAction(self.align_bottom) self.format_borders_all = \ Action(self.parent, "All borders", self.parent.grid.on_border_choice, icon=Icon.format_borders_all, checkable=True, statustip='Format all borders of selection') self.format_borders_top = \ Action(self.parent, "Top border", self.parent.grid.on_border_choice, icon=Icon.format_borders_top, checkable=True, statustip='Format top border of selection') self.format_borders_bottom = \ Action(self.parent, "Bottom border", self.parent.grid.on_border_choice, icon=Icon.format_borders_bottom, checkable=True, statustip='Format bottom border of selection') self.format_borders_left = \ Action(self.parent, "Left border", self.parent.grid.on_border_choice, icon=Icon.format_borders_left, checkable=True, statustip='Format left border of selection') self.format_borders_right = \ Action(self.parent, "Right border", self.parent.grid.on_border_choice, icon=Icon.format_borders_right, checkable=True, statustip='Format right border of selection') self.format_borders_outer = \ Action(self.parent, "Outer borders", self.parent.grid.on_border_choice, icon=Icon.format_borders_outer, checkable=True, statustip='Format outer borders of selection') self.format_borders_inner = \ Action(self.parent, "Inner borders", self.parent.grid.on_border_choice, icon=Icon.format_borders_inner, checkable=True, statustip='Format inner borders of selection') self.format_borders_top_bottom = \ Action(self.parent, "Top and bottom borders", self.parent.grid.on_border_choice, icon=Icon.format_borders_top_bottom, checkable=True, statustip='Format top and bottom borders of selection') self.border_group = QActionGroup(self.parent) self.border_group.addAction(self.format_borders_all) self.border_group.addAction(self.format_borders_top) self.border_group.addAction(self.format_borders_bottom) self.border_group.addAction(self.format_borders_left) self.border_group.addAction(self.format_borders_right) self.border_group.addAction(self.format_borders_outer) self.border_group.addAction(self.format_borders_inner) self.border_group.addAction(self.format_borders_top_bottom) self.format_borders_all.setChecked(True) self.format_borders_0 = Action(self.parent, "Border width 0", self.parent.grid.on_borderwidth, icon=Icon.format_borders_0, checkable=True, statustip='Set border width to 0') self.format_borders_1 = Action(self.parent, "Border width 1", self.parent.grid.on_borderwidth, icon=Icon.format_borders_1, checkable=True, statustip='Set border width to 1') self.format_borders_2 = Action(self.parent, "Border width 2", self.parent.grid.on_borderwidth, icon=Icon.format_borders_2, checkable=True, statustip='Set border width to 2') self.format_borders_4 = Action(self.parent, "Border width 4", self.parent.grid.on_borderwidth, icon=Icon.format_borders_4, checkable=True, statustip='Set border width to 4') self.format_borders_8 = Action(self.parent, "Border width 8", self.parent.grid.on_borderwidth, icon=Icon.format_borders_8, checkable=True, statustip='Set border width to 8') self.format_borders_16 = Action(self.parent, "Border width 16", self.parent.grid.on_borderwidth, icon=Icon.format_borders_16, checkable=True, statustip='Set border width to 16') self.format_borders_32 = Action(self.parent, "Border width 32", self.parent.grid.on_borderwidth, icon=Icon.format_borders_32, checkable=True, statustip='Set border width to 32') self.format_borders_64 = Action(self.parent, "Border width 64", self.parent.grid.on_borderwidth, icon=Icon.format_borders_64, checkable=True, statustip='Set border width to 64') self.border_width_group = QActionGroup(self.parent) self.border_width_group.addAction(self.format_borders_0) self.border_width_group.addAction(self.format_borders_1) self.border_width_group.addAction(self.format_borders_2) self.border_width_group.addAction(self.format_borders_4) self.border_width_group.addAction(self.format_borders_8) self.border_width_group.addAction(self.format_borders_16) self.border_width_group.addAction(self.format_borders_32) self.border_width_group.addAction(self.format_borders_64) self.format_borders_1.setChecked(True) def create_macro_actions(self): """Create actions for Macro menu""" self.insert_image = Action(self.parent, "Insert image...", self.parent.workflows.macro_insert_image, icon=Icon.insert_image, statustip='Load an image from a file ' 'into a cell') self.insert_chart = Action(self.parent, "Insert chart...", self.parent.workflows.macro_insert_chart, icon=Icon.insert_chart, statustip='Create and display matplotlib ' 'chart') def create_help_actions(self): """actions for Help menu""" self.manual = Action(self.parent, "Manual...", self.parent.on_manual, icon=Icon.help, shortcut='F1', statustip='Display the pyspread manual') self.tutorial = Action(self.parent, "Tutorial...", self.parent.on_tutorial, icon=Icon.tutorial, statustip='Display a pyspread tutorial') self.dependencies = Action(self.parent, "Dependencies...", self.parent.on_dependencies, icon=Icon.dependencies, statustip='List and install dependencies') self.about = Action(self.parent, "About pyspread...", self.parent.on_about, icon=Icon.pyspread, statustip='About pyspread') def disable_unavailable(self): """Disables unavailable menu items e.g. due to missing dependencies""" if get_enchant_version() is None: self.toggle_spell_checker.setEnabled(False) class ChartDialogActions(AttrDict): """QActions for chart dialog Reads out template files in share/templates/matplotlib and adds a QAction for each template. """ def __init__(self, parent): super().__init__() self.parent = parent self._add_chart_template_actions() def _add_chart_template_actions(self): """Adds actions for chart dialog toolbar""" self.chart_pie_1_1 = Action(self.parent, "Pie chart", self.parent.on_template, icon=Icon.chart_pie_1_1, statustip='Insert code for pie chart') self.chart_pie_1_1.setData("chart_pie_1_1.py") self.chart_ring_1_1 = Action(self.parent, "Ring chart", self.parent.on_template, icon=Icon.chart_ring_1_1, statustip='Insert code for ring chart') self.chart_ring_1_1.setData("chart_ring_1_1.py") self.chart_line_1_1 = Action(self.parent, "Line chart", self.parent.on_template, icon=Icon.chart_line_1_1, statustip='Insert code for line chart') self.chart_line_1_1.setData("chart_line_1_1.py") self.chart_polar_1_1 = Action(self.parent, "Polar chart", self.parent.on_template, icon=Icon.chart_polar_1_1, statustip='Insert code for polar ' 'coordinates line chart') self.chart_polar_1_1.setData("chart_polar_1_1.py") self.chart_area_1_1 = Action(self.parent, "Area chart", self.parent.on_template, icon=Icon.chart_area_1_1, statustip='Insert code for area chart') self.chart_area_1_1.setData("chart_area_1_1.py") self.chart_column_1_1 = Action(self.parent, "Grouped column chart", self.parent.on_template, icon=Icon.chart_column_1_1, statustip='Insert code for grouped ' 'column chart') self.chart_column_1_1.setData("chart_column_1_1.py") self.chart_column_1_2 = Action(self.parent, "Stacked column chart", self.parent.on_template, icon=Icon.chart_column_1_2, statustip='Insert code for stacked ' 'column chart') self.chart_column_1_2.setData("chart_column_1_2.py") self.chart_bar_1_3 = \ Action(self.parent, "Normalized stacked bar chart", self.parent.on_template, icon=Icon.chart_bar_1_3, statustip='Insert code for normalized stacked bar chart') self.chart_bar_1_3.setData("chart_bar_1_3.py") self.chart_scatter_1_1 = Action(self.parent, "Scatter chart", self.parent.on_template, icon=Icon.chart_scatter_1_1, statustip='Insert code for a scatter ' 'plot') self.chart_scatter_1_1.setData("chart_scatter_1_1.py") self.chart_bubble_1_1 = Action(self.parent, "Bubble chart", self.parent.on_template, icon=Icon.chart_bubble_1_1, statustip='Insert code for a bubble ' 'plot that is a scatter plot with ' 'individual point sizes') self.chart_bubble_1_1.setData("chart_bubble_1_1.py") self.chart_boxplot_2_2 = Action(self.parent, "Boxplot chart", self.parent.on_template, icon=Icon.chart_boxplot_2_2, statustip='Insert code for boxplot ' 'chart') self.chart_boxplot_2_2.setData("chart_boxplot_2_2.py") self.chart_histogram_1_1 = Action(self.parent, "Histogram chart", self.parent.on_template, icon=Icon.chart_histogram_1_1, statustip='Insert code for ' 'histogram') self.chart_histogram_1_1.setData("chart_histogram_1_1.py") self.chart_histogram_1_4 = Action(self.parent, "Multiple histogram charts", self.parent.on_template, icon=Icon.chart_histogram_1_4, statustip='Insert code for multiple ' 'histogram charts') self.chart_histogram_1_4.setData("chart_histogram_1_4.py") self.chart_scatterhist_1_1 = Action(self.parent, "Scatter and histogram chart", self.parent.on_template, icon=Icon.chart_scatterhist_1_1, statustip='Insert code for scatter' ' plot with histogram' ' for each axis') self.chart_scatterhist_1_1.setData("chart_scatterhist_1_1.py") self.chart_matrix_1_1 = Action(self.parent, "Matrix chart", self.parent.on_template, icon=Icon.chart_matrix_1_1, statustip='Insert code for matrix ' 'chart') self.chart_matrix_1_1.setData("chart_matrix_1_1.py") self.chart_contour_1_2 = Action(self.parent, "Contour chart", self.parent.on_template, icon=Icon.chart_contour_1_2, statustip='Insert code for contour ' 'chart') self.chart_contour_1_2.setData("chart_contour_1_2.py") self.chart_surface_2_1 = Action(self.parent, "Surface chart", self.parent.on_template, icon=Icon.chart_surface_2_1, statustip='Insert code for surface ' 'chart') self.chart_surface_2_1.setData("chart_surface_2_1.py") pyspread-1.99.0.1/src/pyspread.py0000755000175000017500000004660013604454357016430 0ustar andreasandreas#!/usr/bin/python3 # -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ pyspread ======== - Main Python spreadsheet application - Run this script to start the application. **Provides** * MainApplication: Initial command line operations and application launch * :class:`MainWindow`: Main windows class """ import os import sys from PyQt5.QtCore import Qt, pyqtSignal, QEvent, QTimer, QRect from PyQt5.QtWidgets import QMainWindow, QApplication, QSplitter, QMessageBox from PyQt5.QtWidgets import QDockWidget, QUndoStack, QStyleOptionViewItem from PyQt5.QtSvg import QSvgWidget from PyQt5.QtGui import QColor, QFont, QPalette, QPainter from PyQt5.QtPrintSupport import QPrinter, QPrintDialog, QPrintPreviewDialog from src import VERSION, APP_NAME from src.cli import ArgumentParser from src.settings import Settings from src.icons import Icon, IconPath from src.grid import Grid from src.entryline import Entryline from src.menus import MenuBar from src.toolbar import MainToolBar, FindToolbar, FormatToolbar, MacroToolbar from src.actions import MainWindowActions from src.workflows import Workflows from src.widgets import Widgets from src.dialogs import ApproveWarningDialog, PreferencesDialog, ManualDialog from src.dialogs import TutorialDialog, PrintAreaDialog from src.installer import DependenciesDialog from src.panels import MacroPanel from src.lib.hashing import genkey LICENSE = "GNU GENERAL PUBLIC LICENSE Version 3" os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1" QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True) QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True) class MainWindow(QMainWindow): """Pyspread main window :application: QApplication :args: Command line arguments object from argparse :unit_test: If True then the application runs in unit_test mode :type unit_test: bool, defaults to False """ gui_update = pyqtSignal(dict) def __init__(self, application, args, unit_test=False): super().__init__() self._loading = True self.application = application self.unit_test = unit_test self.settings = Settings(self) self.workflows = Workflows(self) self.undo_stack = QUndoStack(self) self.refresh_timer = QTimer() self._init_widgets() self.main_window_actions = MainWindowActions(self) self._init_window() self._init_toolbars() self.settings.restore() if self.settings.signature_key is None: self.settings.signature_key = genkey() # Update recent files in the file menu self.menuBar().file_menu.history_submenu.update() if not self.unit_test: self.show() self._update_action_toggles() # Update the GUI so that everything matches the model cell_attributes = self.grid.model.code_array.cell_attributes attributes = cell_attributes[self.grid.current] self.on_gui_update(attributes) self._loading = False self._previous_window_state = self.windowState() # Open initial file if provided by the command line if args.file is not None: self.workflows.filepath_open(args.file) self.workflows.update_main_window_title() def _init_window(self): """Initialize main window components""" self.setWindowTitle(APP_NAME) self.setWindowIcon(Icon.pyspread) self.safe_mode_widget = QSvgWidget(str(IconPath.warning), self) msg = "%s is in safe mode.\nExpressions are not evaluated." % APP_NAME self.safe_mode_widget.setToolTip(msg) self.statusBar().addPermanentWidget(self.safe_mode_widget) self.safe_mode_widget.hide() # Disable the approve fiel menu button self.main_window_actions.approve.setEnabled(False) self.setMenuBar(MenuBar(self)) def resizeEvent(self, event): super(MainWindow, self).resizeEvent(event) if self._loading: return def closeEvent(self, event=None): """Overloaded close event, allows saving changes or canceling close""" if event: event.ignore() self.workflows.file_quit() # has @handle_changed_since_save decorator def _init_widgets(self): """Initialize widgets""" self.widgets = Widgets(self) self.entry_line = Entryline(self) self.grid = Grid(self) self.macro_panel = MacroPanel(self, self.grid.model.code_array) self.main_splitter = QSplitter(Qt.Vertical, self) self.setCentralWidget(self.main_splitter) self.main_splitter.addWidget(self.entry_line) self.main_splitter.addWidget(self.grid) self.main_splitter.addWidget(self.grid.table_choice) self.main_splitter.setSizes([self.entry_line.minimumHeight(), 9999, 20]) self.macro_dock = QDockWidget("Macros", self) self.macro_dock.setObjectName("Macro Panel") self.macro_dock.setWidget(self.macro_panel) self.addDockWidget(Qt.RightDockWidgetArea, self.macro_dock) self.macro_dock.installEventFilter(self) self.gui_update.connect(self.on_gui_update) self.refresh_timer.timeout.connect(self.on_refresh_timer) def eventFilter(self, source, event): """Event filter for handling QDockWidget close events Updates the menu if the macro panel is closed. """ if event.type() == QEvent.Close \ and isinstance(source, QDockWidget) \ and source.windowTitle() == "Macros": self.main_window_actions.toggle_macro_panel.setChecked(False) return super().eventFilter(source, event) def _init_toolbars(self): """Initialize the main window toolbars""" self.main_toolbar = MainToolBar(self) self.find_toolbar = FindToolbar(self) self.format_toolbar = FormatToolbar(self) self.macro_toolbar = MacroToolbar(self) self.addToolBar(self.main_toolbar) self.addToolBar(self.find_toolbar) self.addToolBarBreak() self.addToolBar(self.format_toolbar) self.addToolBar(self.macro_toolbar) def _update_action_toggles(self): """Updates the toggle menu check states""" self.main_window_actions.toggle_main_toolbar.setChecked( self.main_toolbar.isVisible()) self.main_window_actions.toggle_macro_toolbar.setChecked( self.macro_toolbar.isVisible()) self.main_window_actions.toggle_format_toolbar.setChecked( self.format_toolbar.isVisible()) self.main_window_actions.toggle_find_toolbar.setChecked( self.find_toolbar.isVisible()) self.main_window_actions.toggle_entry_line.setChecked( self.entry_line.isVisible()) self.main_window_actions.toggle_macro_panel.setChecked( self.macro_dock.isVisible()) @property def safe_mode(self): """Returns safe_mode state. In safe_mode cells are not evaluated.""" return self.grid.model.code_array.safe_mode @safe_mode.setter def safe_mode(self, value): """Sets safe mode. This triggers the safe_mode icon in the statusbar. If safe_mode changes from True to False then caches are cleared and macros are executed. """ if self.grid.model.code_array.safe_mode == bool(value): return self.grid.model.code_array.safe_mode = bool(value) if value: # Safe mode entered self.safe_mode_widget.show() # Enable approval menu entry self.main_window_actions.approve.setEnabled(True) else: # Safe_mode disabled self.safe_mode_widget.hide() # Disable approval menu entry self.main_window_actions.approve.setEnabled(False) # Clear result cache self.grid.model.code_array.result_cache.clear() # Execute macros self.macro_panel.on_apply() def on_print(self): """Print event handler""" # Create printer printer = QPrinter(mode=QPrinter.HighResolution) # Get print area self.print_area = PrintAreaDialog(self, self.grid).area if self.print_area is None: return # Create print dialog dialog = QPrintDialog(printer, self) if dialog.exec_() == QPrintDialog.Accepted: self.on_paint_request(printer) def on_preview(self): """Print preview event handler""" # Create printer printer = QPrinter(mode=QPrinter.HighResolution) # Get print area self.print_area = PrintAreaDialog(self, self.grid).area if self.print_area is None: return # Create print preview dialog dialog = QPrintPreviewDialog(printer) dialog.paintRequested.connect(self.on_paint_request) dialog.exec_() def on_paint_request(self, printer): """Paints to printer""" painter = QPainter(printer) option = QStyleOptionViewItem() with self.workflows.standard_zoom(): painter.setViewport(self.grid.rect()) painter.setWindow(self.grid.rect()) rows = self.workflows.get_paint_rows(self.print_area) columns = self.workflows.get_paint_columns(self.print_area) total_height = self.workflows.get_total_height(self.print_area) total_width = self.workflows.get_total_width(self.print_area) area = printer.paperRect() left, top, right, bottom = \ printer.getPageMargins(QPrinter.DevicePixel) clip_rect = QRect(area.x()+left, area.y()+top, area.width()-left-right, area.height()-top-bottom) painter.setClipRect(clip_rect) xscale = (area.width() - 2*left - 2*right) / total_width yscale = (area.height() - 2*top - 2*bottom) / total_height scale = min(xscale, yscale) painter.save() painter.scale(scale, scale) painter.translate((-area.x() + left) / scale, (-area.y() + top) / scale) self.workflows.paint(painter, option, clip_rect, rows, columns) painter.restore() def on_nothing(self): """Dummy action that does nothing""" sender = self.sender() print("on_nothing > ", sender.text(), sender) def on_fullscreen(self): """Fullscreen toggle event handler""" if self.windowState() == Qt.WindowFullScreen: self.setWindowState(self._previous_window_state) else: self._previous_window_state = self.windowState() self.setWindowState(Qt.WindowFullScreen) def on_approve(self): """Approve event handler""" if ApproveWarningDialog(self).choice: self.safe_mode = False def on_clear_globals(self): """Clear globals event handler""" self.grid.model.code_array.result_cache.clear() # Clear globals self.grid.model.code_array.clear_globals() self.grid.model.code_array.reload_modules() def on_preferences(self): """Preferences event handler (:class:`dialogs.PreferencesDialog`) """ data = PreferencesDialog(self).data if data is not None: print(data) max_file_history_changed = \ self.settings.max_file_history != data['max_file_history'] # Dialog has been approved --> Store data to settings for key in data: if key == "signature_key" and not data[key]: data[key] = genkey() self.settings.__setattr__(key, data[key]) # Immediately adjust file history in menu if max_file_history_changed: self.menuBar().file_menu.history_submenu.update() def on_dependencies(self): """Dependancies installer (:class:`installer.InstallerDialog`) """ dial = DependenciesDialog(self) dial.exec_() def on_undo(self): """Undo event handler""" self.undo_stack.undo() def on_redo(self): """Undo event handler""" self.undo_stack.redo() def on_toggle_refresh_timer(self, toggled): """Toggles periodic timer for frozen cells""" if toggled: self.refresh_timer.start(self.settings.refresh_timeout) else: self.refresh_timer.stop() def on_refresh_timer(self): """Event handler for self.refresh_timer.timeout Called for periodic updates of frozen cells. Does nothing if either the entry_line or a cell editor is active. """ if not self.entry_line.hasFocus() \ and self.grid.state() != self.grid.EditingState: self.grid.refresh_frozen_cells() def _toggle_widget(self, widget, action_name, toggled): """Toggles widget visibility and updates toggle actions""" if toggled: widget.show() else: widget.hide() self.main_window_actions[action_name].setChecked(widget.isVisible()) def on_toggle_main_toolbar(self, toggled): """Main toolbar toggle event handler""" self._toggle_widget(self.main_toolbar, "toggle_main_toolbar", toggled) def on_toggle_macro_toolbar(self, toggled): """Macro toolbar toggle event handler""" self._toggle_widget(self.macro_toolbar, "toggle_macro_toolbar", toggled) def on_toggle_format_toolbar(self, toggled): """Format toolbar toggle event handler""" self._toggle_widget(self.format_toolbar, "toggle_format_toolbar", toggled) def on_toggle_find_toolbar(self, toggled): """Find toolbar toggle event handler""" self._toggle_widget(self.find_toolbar, "toggle_find_toolbar", toggled) def on_toggle_entry_line(self, toggled): """Entryline toggle event handler""" self._toggle_widget(self.entry_line, "toggle_entry_line", toggled) def on_toggle_macro_panel(self, toggled): """Macro panel toggle event handler""" self._toggle_widget(self.macro_dock, "toggle_macro_panel", toggled) def on_manual(self): """Show manual browser""" dialog = ManualDialog(self) dialog.show() def on_tutorial(self): """Show tutorial browser""" dialog = TutorialDialog(self) dialog.show() def on_about(self): """Show about message box""" about_msg_template = "

".join(( "%s" % APP_NAME, "A non-traditional Python spreadsheet application", "Version {version}", "Created by:
{devs}", "Documented by:
{doc_devs}", "Copyright:
Martin Manns", "License:
{license}", 'pyspread.gitlab.io', )) devs = "Martin Manns, Jason Sexauer
Vova Kolobok, mgunyho, " \ "Pete Morgan" doc_devs = "Martin Manns, Bosko Markovic, Pete Morgan" about_msg = about_msg_template.format( version=VERSION, license=LICENSE, devs=devs, doc_devs=doc_devs) QMessageBox.about(self, "About %s" % APP_NAME, about_msg) def on_gui_update(self, attributes): """GUI update event handler. Emitted on cell change. Attributes contains current cell_attributes. """ widgets = self.widgets menubar = self.menuBar() is_bold = attributes["fontweight"] == QFont.Bold self.main_window_actions.bold.setChecked(is_bold) is_italic = attributes["fontstyle"] == QFont.StyleItalic self.main_window_actions.italics.setChecked(is_italic) underline_action = self.main_window_actions.underline underline_action.setChecked(attributes["underline"]) strikethrough_action = self.main_window_actions.strikethrough strikethrough_action.setChecked(attributes["strikethrough"]) renderer = attributes["renderer"] widgets.renderer_button.set_current_action(renderer) widgets.renderer_button.set_menu_checked(renderer) freeze_action = self.main_window_actions.freeze_cell freeze_action.setChecked(attributes["frozen"]) lock_action = self.main_window_actions.lock_cell lock_action.setChecked(attributes["locked"]) self.entry_line.setReadOnly(attributes["locked"]) button_action = self.main_window_actions.button_cell button_action.setChecked(attributes["button_cell"] is not False) rotation = "rotate_{angle}".format(angle=int(attributes["angle"])) widgets.rotate_button.set_current_action(rotation) widgets.rotate_button.set_menu_checked(rotation) widgets.justify_button.set_current_action(attributes["justification"]) widgets.justify_button.set_menu_checked(attributes["justification"]) widgets.align_button.set_current_action(attributes["vertical_align"]) widgets.align_button.set_menu_checked(attributes["vertical_align"]) border_action = self.main_window_actions.border_group.checkedAction() if border_action is not None: icon = border_action.icon() menubar.format_menu.border_submenu.setIcon(icon) self.format_toolbar.border_menu_button.setIcon(icon) border_width_action = \ self.main_window_actions.border_width_group.checkedAction() if border_width_action is not None: icon = border_width_action.icon() menubar.format_menu.line_width_submenu.setIcon(icon) self.format_toolbar.line_width_button.setIcon(icon) if attributes["textcolor"] is None: text_color = self.grid.palette().color(QPalette.Text) else: text_color = QColor(*attributes["textcolor"]) widgets.text_color_button.color = text_color if attributes["bgcolor"] is None: bgcolor = self.grid.palette().color(QPalette.Base) else: bgcolor = QColor(*attributes["bgcolor"]) widgets.background_color_button.color = bgcolor if attributes["textfont"] is None: widgets.font_combo.font = QFont().family() else: widgets.font_combo.font = attributes["textfont"] widgets.font_size_combo.size = attributes["pointsize"] merge_cells_action = self.main_window_actions.merge_cells merge_cells_action.setChecked(attributes["merge_area"] is not None) def main(): parser = ArgumentParser() args = parser.parse_args() app = QApplication(sys.argv) main_window = MainWindow(app, args) app.exec_() if __name__ == '__main__': main() pyspread-1.99.0.1/src/cli.py0000644000175000017500000000404413600704060015322 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ **Provides** * :class:`CommandLineParser`: """ from argparse import Action, ArgumentParser from pathlib import Path from src import APP_NAME, VERSION class PathAction(Action): """Action that handles paths with spaces and provides a pathlib Path""" def __call__(self, parser, namespace, values, option_string=None): if values: setattr(namespace, self.dest, Path(" ".join(values))) else: setattr(namespace, self.dest, None) class ArgumentParser(ArgumentParser): """Parser for the command line""" def __init__(self): description = "pyspread is a non-traditional spreadsheet that is " \ "based on and written in the programming language " \ "Python." # Override usage because of the PathAction fix for paths with spaces usage = "{} [-h] [--version] [file]".format(APP_NAME) super().__init__(prog=APP_NAME, description=description, usage=usage) self.add_argument('--version', action='version', version=VERSION) self.add_argument('file', action=PathAction, nargs="*", help='open pyspread file in pys or pysu format') pyspread-1.99.0.1/src/icons.py0000644000175000017500000002003313604443001015661 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- from PyQt5.QtGui import QIcon from src.settings import PYSPREAD_PATH ICON_PATH = PYSPREAD_PATH / 'share/icons' ACTION_PATH = ICON_PATH / 'actions' STATUS_PATH = ICON_PATH / 'status' CHARTS_PATH = ICON_PATH / 'charts' class IconPath: """Holds icon paths as attributes""" pyspread = ICON_PATH / 'pyspread.svg' # Status icons warning = STATUS_PATH / 'dialog-warning.svg' # File menu icons new = ACTION_PATH / 'document-new.svg' open = ACTION_PATH / 'document-open.svg' save = ACTION_PATH / 'document-save.svg' save_as = ACTION_PATH / 'document-save-as.svg' imprt = ACTION_PATH / 'document-import.svg' export = ACTION_PATH / 'document-export.svg' approve = ACTION_PATH / 'document-approve.svg' clear_globals = ACTION_PATH / 'edit-clear.svg' page_setup = ACTION_PATH / 'document-page-setup.svg' print_preview = ACTION_PATH / 'document-print-preview.svg' print = ACTION_PATH / 'document-print.svg' preferences = ACTION_PATH / 'document-properties.svg' new_gpg_key = ACTION_PATH / 'document-new-gpg-key.svg' quit = ACTION_PATH / 'document-log-out.svg' # Edit menu icons undo = ACTION_PATH / 'edit-undo.svg' redo = ACTION_PATH / 'edit-redo.svg' cut = ACTION_PATH / 'edit-cut.svg' copy = ACTION_PATH / 'edit-copy.svg' copy_results = ACTION_PATH / 'edit-copy-results.svg' paste = ACTION_PATH / 'edit-paste.svg' paste_as = ACTION_PATH / 'edit-paste-as.svg' select_all = ACTION_PATH / 'edit-select-all.svg' find = ACTION_PATH / 'edit-find.svg' find_next = ACTION_PATH / 'edit-find-next.svg' replace = ACTION_PATH / 'edit-find-replace.svg' quote = ACTION_PATH / 'edit-quote.svg' sort_ascending = ACTION_PATH / 'edit-sort-ascending.svg' sort_descending = ACTION_PATH / 'edit-sort-descending.svg' insert_row = ACTION_PATH / 'edit-insert-row.svg' insert_column = ACTION_PATH / 'edit-insert-column.svg' insert_table = ACTION_PATH / 'edit-insert-table.svg' delete_row = ACTION_PATH / 'edit-delete-row.svg' delete_column = ACTION_PATH / 'edit-delete-column.svg' delete_table = ACTION_PATH / 'edit-delete-table.svg' resize_grid = ACTION_PATH / 'edit-resize-grid.svg' # View menu icons fullscreen = ACTION_PATH / 'view-fullscreen.svg' goto_cell = ACTION_PATH / 'view-goto-cell.svg' check_spelling = ACTION_PATH / 'view-check-spelling.svg' zoom_in = ACTION_PATH / 'view-zoom-in.svg' zoom_out = ACTION_PATH / 'view-zoom-out.svg' zoom_1 = ACTION_PATH / 'view-zoom-original.svg' refresh = ACTION_PATH / 'view-refresh.svg' toggle_periodic_updates = ACTION_PATH / 'view-timer.svg' show_frozen = ACTION_PATH / 'view-show-frozen.svg' # Format menu icons copy_format = ACTION_PATH / 'format-copy.svg' paste_format = ACTION_PATH / 'format-paste.svg' font_dialog = ACTION_PATH / 'format-font.svg' bold = ACTION_PATH / 'format-text-bold.svg' italics = ACTION_PATH / 'format-text-italic.svg' underline = ACTION_PATH / 'format-text-underline.svg' strikethrough = ACTION_PATH / 'format-text-strikethrough.svg' markup = ACTION_PATH / 'format-cell-markup.svg' image = ACTION_PATH / 'format-cell-image.svg' text = ACTION_PATH / 'format-cell-text.svg' matplotlib = ACTION_PATH / 'format-cell-chart.svg' line_color = ACTION_PATH / 'format-line-color.svg' text_color = ACTION_PATH / 'format-text-color.svg' background_color = ACTION_PATH / 'format-background-color.svg' rotate_0 = ACTION_PATH / 'format-cell-rotate-0.svg' rotate_90 = ACTION_PATH / 'format-cell-rotate-90.svg' rotate_180 = ACTION_PATH / 'format-cell-rotate-180.svg' rotate_270 = ACTION_PATH / 'format-cell-rotate-270.svg' justify_left = ACTION_PATH / 'format-justify-left.svg' justify_fill = ACTION_PATH / 'format-justify-fill.svg' justify_center = ACTION_PATH / 'format-justify-center.svg' justify_right = ACTION_PATH / 'format-justify-right.svg' align_top = ACTION_PATH / 'format-text-align-top.svg' align_center = ACTION_PATH / 'format-text-align-center.svg' align_bottom = ACTION_PATH / 'format-text-align-bottom.svg' border_menu = ACTION_PATH / 'format-borders-all.svg' format_borders_all = ACTION_PATH / 'format-borders-all.svg' format_borders_top = ACTION_PATH / 'format-borders-top.svg' format_borders_bottom = ACTION_PATH / 'format-borders-bottom.svg' format_borders_left = ACTION_PATH / 'format-borders-left.svg' format_borders_right = ACTION_PATH / 'format-borders-right.svg' format_borders_outer = ACTION_PATH / 'format-borders-outer.svg' format_borders_inner = ACTION_PATH / 'format-borders-inner.svg' format_borders_top_bottom = ACTION_PATH / 'format-borders-top-bottom.svg' format_borders = ACTION_PATH / 'format-borders-4.svg' format_borders_0 = ACTION_PATH / 'format-borders-0.svg' format_borders_1 = ACTION_PATH / 'format-borders-1.svg' format_borders_2 = ACTION_PATH / 'format-borders-2.svg' format_borders_4 = ACTION_PATH / 'format-borders-4.svg' format_borders_8 = ACTION_PATH / 'format-borders-8.svg' format_borders_16 = ACTION_PATH / 'format-borders-16.svg' format_borders_32 = ACTION_PATH / 'format-borders-32.svg' format_borders_64 = ACTION_PATH / 'format-borders-64.svg' freeze = ACTION_PATH / 'format-freeze.svg' lock = ACTION_PATH / 'format-lock.svg' button = ACTION_PATH / 'format-button.svg' merge_cells = ACTION_PATH / 'format-merge-cells.svg' # Macro menu icons insert_image = ACTION_PATH / 'macro-insert-image.svg' link_image = ACTION_PATH / 'macro-link-image.svg' insert_chart = ACTION_PATH / 'macro-insert-chart.svg' # Help menu icons help = ACTION_PATH / 'help-browser.svg' tutorial = ACTION_PATH / 'help-tutorial.svg' faq = ACTION_PATH / 'help-faq.svg' dependencies = ACTION_PATH / 'help-dependencies.svg' # Toolbar icons menu_manager = ACTION_PATH / 'menu-manager.svg' # Chart dialog template icons chart_pie_1_1 = CHARTS_PATH / 'chart_pie_1_1.svg' chart_ring_1_1 = CHARTS_PATH / 'chart_ring_1_1.svg' chart_line_1_1 = CHARTS_PATH / 'chart_line_1_1.svg' chart_polar_1_1 = CHARTS_PATH / 'chart_polar_1_1.svg' chart_area_1_1 = CHARTS_PATH / 'chart_area_1_1.svg' chart_column_1_1 = CHARTS_PATH / 'chart_column_1_1.svg' chart_column_1_2 = CHARTS_PATH / 'chart_column_1_2.svg' chart_bar_1_3 = CHARTS_PATH / 'chart_bar_1_3.svg' chart_scatter_1_1 = CHARTS_PATH / 'chart_scatter_1_1.svg' chart_bubble_1_1 = CHARTS_PATH / 'chart_bubble_1_1.svg' chart_boxplot_2_2 = CHARTS_PATH / 'chart_boxplot_2_2.svg' chart_histogram_1_1 = CHARTS_PATH / 'chart_histogram_1_1.svg' chart_histogram_1_4 = CHARTS_PATH / 'chart_histogram_1_4.svg' chart_scatterhist_1_1 = CHARTS_PATH/'chart_scatterhist_1_1.svg' chart_matrix_1_1 = CHARTS_PATH / 'chart_matrix_1_1.svg' chart_contour_1_2 = CHARTS_PATH / 'chart_contour_1_2.svg' chart_surface_2_1 = CHARTS_PATH / 'chart_surface_2_1.svg' class IconConverter(type): """Meta class that provides QIcons for IconPaths icons""" def __getattr__(cls, name): return QIcon(str(getattr(IconPath, name))) class Icon(metaclass=IconConverter): """Provides QIcons as attributes for all attributes of IconPaths""" pass pyspread-1.99.0.1/src/lib/0000755000175000017500000000000013604465725014765 5ustar andreasandreaspyspread-1.99.0.1/src/lib/csv.py0000644000175000017500000000652313602661051016124 0ustar andreasandreas#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ csv === Provides -------- * sniff: Sniffs CSV dialect and header info * get_first_line * csv_digest_gen * cell_key_val_gen * Digest: Converts any object to target type as good as possible * CsvInterface * TxtGenerator """ import ast import csv from dateutil.parser import parse def sniff(filepath, sniff_size): """Sniffs CSV dialect and header info :filepath: pathlib.Path: Path of file to sniff :sniffsize: int: Maximum no. bytes to use for sniffing Returns a csv.Dialect object with additional attrinbute has_header """ with open(filepath, newline='') as csvfile: csv_str = csvfile.read(sniff_size) dialect = csv.Sniffer().sniff(csv_str) setattr(dialect, "hasheader", csv.Sniffer().has_header(csv_str)) return dialect def get_header(csvfile, dialect): """Returns List of first line items of file filepath""" csvfile.seek(0) csvreader = csv.reader(csvfile, dialect=dialect) for header in csvreader: break csvfile.seek(0) return header def csv_reader(csvfile, dialect, digest_types=None): """Generator of digested values from csv file in filepath Parameters ---------- csvfile:filelike \tCsv file to read dialect: Object \tCsv dialect digest_types: tuple of types \tTypes of data for each col """ csvreader = csv.reader(csvfile, dialect=dialect) if hasattr(dialect, "hasheader") and dialect.hasheader: # Ignore first line for line in csvreader: break for line in csvreader: yield line # Type conversion functions def convert(string, digest_type): """Main type conversion functgion for csv import""" if digest_type is None: digest_type = 'repr' try: return str(typehandlers[digest_type](string)) except Exception: return repr(string) def date(obj): """Makes a date from comparable types""" return parse(obj).date() def datetime(obj): """Makes a datetime from comparable types""" return parse(obj) def time(obj): """Makes a time from comparable types""" return parse(obj).time() def make_object(obj): """Parses the object with ast.literal_eval""" return ast.literal_eval(obj) typehandlers = { 'object': ast.literal_eval, 'repr': repr, 'bool': bool, 'int': int, 'float': float, 'complex': complex, 'str': str, 'bytes': bytes, 'date': date, 'datetime': datetime, 'time': time, } pyspread-1.99.0.1/src/lib/testlib.py0000644000175000017500000000274413575246246017016 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ testlib ======= Provides helpers for unit tests """ from functools import wraps def unit_test_dialog_override(func): """Exchanges return data if in unit test mode""" @wraps(func) def wrapper(dialog): """ A wrapping function """ if dialog.parent().unit_test: return dialog.parent().unit_test_data else: return func(dialog) return wrapper # @wraps(func) # def wrapper(dialog): # if dialog.parent.unit_test: # return dialog.parent.unit_test_data # else: # return func(dialog) # return wrapper pyspread-1.99.0.1/src/lib/qimage_svg.py0000644000175000017500000000457213600125426017454 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ High resolution svg support for qimage and :mod:`matplotlib.figure` """ from io import StringIO from PyQt5.QtGui import QImage, QPainter from PyQt5.QtSvg import QSvgRenderer try: import matplotlib.figure as matplotlib_figure from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg except ImportError: matplotlib_figure = None class QImage(QImage): """Subclass of PyQt5.QtGui Adds support for SVG byte strings and matplotlib figures """ def from_svg_bytes(self, svg_bytes): """Paints an svg from a bytes object""" renderer = QSvgRenderer(svg_bytes) painter = QPainter(self) painter.eraseRect(self.rect()) renderer.render(painter) painter.end() def _matplotlib_figure2svg_bytes(self, figure): """Returns an SVG bytes string from a matplotlib figure""" canvas = FigureCanvasQTAgg(figure) svg_filelike = StringIO() figure.savefig(svg_filelike, format="svg") svg_filelike.seek(0) svg_bytes = bytes(svg_filelike.read(), encoding='utf-8') svg_filelike.close() return svg_bytes def from_matplotlib(self, figure): """Paints an svg from a matplotlib figure""" if not isinstance(figure, matplotlib_figure.Figure): msg_tpl = "figure must be instance of {}." msg = msg_tpl.format(matplotlib_figure.Figure) raise ValueError(msg) svg_bytes = self._matplotlib_figure2svg_bytes(figure) self.from_svg_bytes(svg_bytes) pyspread-1.99.0.1/src/lib/attrdict.py0000644000175000017500000000204413566442357017160 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- class AttrDict(dict): """Dictionary with attribute access""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.__dict__ = self pyspread-1.99.0.1/src/lib/typechecks.py0000644000175000017500000000322613557333324017500 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ Contains functions for checking type likeness. """ from io import BytesIO import xml.etree.ElementTree as ET def isslice(obj): """Returns True if obj is insatnce of slice""" return isinstance(obj, slice) def isstring(obj): """Returns True if obj is instance of str, bytes or bytearray""" return isinstance(obj, (str, bytes, bytearray)) def is_svg(svg_bytes): """Checks if code is an svg image Parameters ---------- code: String \tCode to be parsed in order to check svg complaince """ tag = None svg = BytesIO(svg_bytes) try: for event, el in ET.iterparse(svg, ('start',)): tag = el.tag break except ET.ParseError: pass svg.close() return tag == '{http://www.w3.org/2000/svg}svg' pyspread-1.99.0.1/src/lib/hashing.py0000644000175000017500000000357713557333324016770 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ File hashing services **Provides** * :func:`genkey` - Generates hash key * :func:`sign` - Returns a signature for a given file * :func:`verify` - Verifies file against signature """ import ast from hashlib import blake2b from hmac import compare_digest import secrets def genkey(nbytes=64): """Returns a new signature key of nbytes 64 bytes is recommended for BLAKE2b """ return secrets.token_bytes(nbytes) def sign(data, key): """Returns signature for file""" if not key: raise ValueError("No signature key defined") if not isinstance(key, bytes): key = ast.literal_eval(key) signature = blake2b(digest_size=64, key=key) signature.update(data) return signature.hexdigest().encode('utf-8') def verify(data, signature, key): """Verifies a signature, returns True if successful else False""" if not isinstance(key, bytes): key = ast.literal_eval(key) data_signature = sign(data, key) return compare_digest(data_signature, signature) pyspread-1.99.0.1/src/lib/charts.py0000644000175000017500000002156213600112040016600 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ charts ====== Provides matplotlib figure that are chart templates Provides -------- * ChartFigure: Main chart class """ from copy import copy from io import StringIO import datetime from collections import OrderedDict from matplotlib.figure import Figure from matplotlib.sankey import Sankey from matplotlib import dates def fig2x(figure, format): """Returns svg from matplotlib chart""" # Save svg to file like object svg_io io = StringIO() figure.savefig(io, format=format) # Rewind the file like object io.seek(0) data = io.getvalue() io.close() return data class ChartFigure(Figure): """Chart figure class with drawing method""" plot_type_fixed_attrs = { "plot": ["xdata", "ydata"], "bar": ["left", "height"], "boxplot": ["x"], "hist": ["x"], "pie": ["x"], "contour": ["X", "Y", "Z"], "contourf": ["X", "Y", "Z"], "Sankey": [], } plot_type_xy_mapping = { "plot": ["xdata", "ydata"], "bar": ["left", "height"], "boxplot": ["x", "x"], "hist": ["label", "x"], "pie": ["labels", "x"], "annotate": ["xy", "xy"], "contour": ["X", "Y"], "contourf": ["X", "Y", "Z"], "Sankey": ["flows", "orientations"], } contour_label_attrs = { "contour_labels": "contour_labels", "contour_label_fontsize": "fontsize", "contour_label_colors": "colors", } contourf_attrs = { "contour_fill": "contour_fill", "hatches": "hatches", } def __init__(self, *attributes): Figure.__init__(self, (5.0, 4.0), facecolor="white") self.attributes = attributes self.__axes = self.add_subplot(111) # Insert empty attributes with a dict for figure attributes if not self.attributes: self.attributes = [{}] self.draw_chart() self.tight_layout(pad=1.5) def _xdate_setter(self, xdate_format='%Y-%m-%d'): """Makes x axis a date axis with auto format Parameters ---------- xdate_format: String \tSets date formatting """ if xdate_format: # We have to validate xdate_format. If wrong then bail out. try: self.autofmt_xdate() datetime.date(2000, 1, 1).strftime(xdate_format) except ValueError: self.autofmt_xdate() return self.__axes.xaxis_date() formatter = dates.DateFormatter(xdate_format) self.__axes.xaxis.set_major_formatter(formatter) # The autofmt method does not work in matplotlib 1.3.0 # self.autofmt_xdate() def _setup_axes(self, axes_data): """Sets up axes for drawing chart""" self.__axes.clear() key_setter = [ ("title", self.__axes.set_title), ("xlabel", self.__axes.set_xlabel), ("ylabel", self.__axes.set_ylabel), ("xscale", self.__axes.set_xscale), ("yscale", self.__axes.set_yscale), ("xticks", self.__axes.set_xticks), ("xtick_labels", self.__axes.set_xticklabels), ("xtick_params", self.__axes.tick_params), ("yticks", self.__axes.set_yticks), ("ytick_labels", self.__axes.set_yticklabels), ("ytick_params", self.__axes.tick_params), ("xlim", self.__axes.set_xlim), ("ylim", self.__axes.set_ylim), ("xgrid", self.__axes.xaxis.grid), ("ygrid", self.__axes.yaxis.grid), ("xdate_format", self._xdate_setter), ] key2setter = OrderedDict(key_setter) for key in key2setter: if key in axes_data and axes_data[key]: try: kwargs_key = key + "_kwargs" kwargs = axes_data[kwargs_key] except KeyError: kwargs = {} if key == "title": # Shift title up kwargs["y"] = 1.08 key2setter[key](axes_data[key], **kwargs) def _setup_legend(self, axes_data): """Sets up legend for drawing chart""" if "legend" in axes_data and axes_data["legend"]: self.__axes.legend() def draw_chart(self): """Plots chart from self.attributes""" if not hasattr(self, "attributes"): return # The first element is always axes data self._setup_axes(self.attributes[0]) for attribute in self.attributes[1:]: series = copy(attribute) # Extract chart type chart_type_string = series.pop("type") x_str, y_str = self.plot_type_xy_mapping[chart_type_string] # Check xdata length if x_str in series and \ len(series[x_str]) != len(series[y_str]): # Wrong length --> ignore xdata series[x_str] = list(range(len(series[y_str]))) else: # Solve the problem that the series data may contain utf-8 data series_list = list(series[x_str]) series_unicode_list = [] for ele in series_list: if isinstance(ele, bytes): try: series_unicode_list.append(ele.decode('utf-8')) except Exception: series_unicode_list.append(ele) else: series_unicode_list.append(ele) series[x_str] = tuple(series_unicode_list) fixed_attrs = [] if chart_type_string in self.plot_type_fixed_attrs: for attr in self.plot_type_fixed_attrs[chart_type_string]: # Remove attr if it is a fixed (non-kwd) attr # If a fixed attr is missing, insert a dummy try: fixed_attrs.append(tuple(series.pop(attr))) except KeyError: fixed_attrs.append(()) # Remove contour chart label info from series cl_attrs = {} for contour_label_attr in self.contour_label_attrs: if contour_label_attr in series: cl_attrs[self.contour_label_attrs[contour_label_attr]] = \ series.pop(contour_label_attr) # Remove contourf attributes from series cf_attrs = {} for contourf_attr in self.contourf_attrs: if contourf_attr in series: cf_attrs[self.contourf_attrs[contourf_attr]] = \ series.pop(contourf_attr) if not fixed_attrs or all(fixed_attrs): # Draw series to axes # Do we have a Sankey plot --> build it if chart_type_string == "Sankey": Sankey(self.__axes, **series).finish() else: chart_method = getattr(self.__axes, chart_type_string) plot = chart_method(*fixed_attrs, **series) # Do we have a filled contour? try: if cf_attrs.pop("contour_fill"): cf_attrs.update(series) if "linewidths" in cf_attrs: cf_attrs.pop("linewidths") if "linestyles" in cf_attrs: cf_attrs.pop("linestyles") if not cf_attrs["hatches"]: cf_attrs.pop("hatches") self.__axes.contourf(plot, **cf_attrs) except KeyError: pass # Do we have a contour chart label? try: if cl_attrs.pop("contour_labels"): self.__axes.clabel(plot, **cl_attrs) except KeyError: pass # The legend has to be set up after all series are drawn self._setup_legend(self.attributes[0]) pyspread-1.99.0.1/src/lib/exception_handling.py0000644000175000017500000000363313557333324021202 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns, Jason Sexauer # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ exception_handling.py contains functions for handling exceptions generated by user code Provides * get_user_codeframe: Returns traceback that only includes the user's execute code frames """ def get_user_codeframe(tb): """Modify traceback to only include the user code's execution frame Always call in this fashion: .. code-block:: py e = sys.exc_info() user_tb = get_user_codeframe(e[2]) or e[2] so that you can get the original frame back if you need to (this is necessary because copying traceback objects is tricky and this is a good workaround) """ while tb is not None: f = tb.tb_frame co = f.f_code filename = co.co_filename if filename[0] == '<': # This is a meta-descriptor # (probably either "" or "") # and is likely the user's code we're executing return tb else: tb = tb.tb_next # We could not find the user's frame. return False pyspread-1.99.0.1/src/lib/spelltextedit.py0000644000175000017500000004631613600125544020227 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- # QPlainTextEdit With Inline Spell Check original code # # Original PyQt4 Version: # https://nachtimwald.com/2009/08/22/qplaintextedit-with-in-line-spell-check/ # # Copyright 2009 John Schember # Copyright 2018 Stephan Sokolow # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # # # Python Syntaxt highlighter original code # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # (1) Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # (2) Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # # (3)The name of the author may not be used to # endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Enchant Highlighter from John Schember; Stephan Sokolow # MIT license --> GPL compatible # PythonHighlighter from David Boddie # Modified BSD license --> GPL compatible """ - :class:`PythonEnchantHighlighter` - :class:`SpellTextEdit` """ import sys try: import enchant from enchant import tokenize from enchant.errors import TokenizerNotFoundError except ImportError: enchant = None try: # pylint: disable=ungrouped-imports from enchant.utils import trim_suggestions except ImportError: # Older versions of PyEnchant as on *buntu 14.04 # pylint: disable=unused-argument def trim_suggestions(word, suggs, maxlen, calcdist=None): """API Polyfill for earlier versions of PyEnchant.""" # TODO: Make this actually do some sorting return suggs[:maxlen] # pylint: disable=no-name-in-module from PyQt5.Qt import Qt from PyQt5.QtCore import QEvent, QRegExp from PyQt5.QtGui import (QFocusEvent, QSyntaxHighlighter, QTextBlockUserData, QTextCharFormat, QTextCursor, QColor, QFont) from PyQt5.QtWidgets import (QAction, QActionGroup, QApplication, QMenu, QPlainTextEdit) def format(color, style=''): """Return a QTextCharFormat with the given attributes.""" _color = QColor() _color.setNamedColor(color) _format = QTextCharFormat() _format.setForeground(_color) if 'bold' in style: _format.setFontWeight(QFont.Bold) if 'italic' in style: _format.setFontItalic(True) return _format # Syntax styles that can be shared by all languages STYLES = { 'keyword': format('blue'), 'operator': format('red'), 'brace': format('darkGray'), 'defclass': format('black', 'bold'), 'string': format('magenta'), 'string2': format('darkMagenta'), 'comment': format('darkGreen', 'italic'), 'self': format('black', 'italic'), 'numbers': format('brown'), } class SpellTextEdit(QPlainTextEdit): """QPlainTextEdit subclass which does spell-checking using PyEnchant""" # Clamping value for words like "regex" which suggest so many things that # the menu runs from the top to the bottom of the screen and spills over # into a second column. max_suggestions = 20 def __init__(self, parent=None): super().__init__() # Start with a default dictionary based on the current locale. self.highlighter = PythonEnchantHighlighter(self.document()) if enchant is not None: self.highlighter.setDict(enchant.Dict()) def contextMenuEvent(self, event): """Custom context menu handler to add a spelling suggestions submenu""" if enchant is None: return popup_menu = self.createSpellcheckContextMenu(event.pos()) popup_menu.exec_(event.globalPos()) # Fix bug observed in Qt 5.2.1 on *buntu 14.04 LTS where: # 1. The cursor remains invisible after closing the context menu # 2. Keyboard input causes it to appear, but it doesn't blink # 3. Switching focus away from and back to the window fixes it self.focusInEvent(QFocusEvent(QEvent.FocusIn)) def createSpellcheckContextMenu(self, pos): """Create and return an augmented default context menu. This may be used as an alternative to the QPoint-taking form of ``createStandardContextMenu`` and will work on pre-5.5 Qt. """ try: # Recommended for Qt 5.5+ (Allows contextual Qt-provided entries) menu = self.createStandardContextMenu(pos) except TypeError: # Before Qt 5.5 menu = self.createStandardContextMenu() # Add a submenu for setting the spell-check language menu.addSeparator() menu.addMenu(self.createLanguagesMenu(menu)) menu.addMenu(self.createFormatsMenu(menu)) # Try to retrieve a menu of corrections for the right-clicked word spell_menu = self.createCorrectionsMenu( self.cursorForMisspelling(pos), menu) if spell_menu: menu.insertSeparator(menu.actions()[0]) menu.insertMenu(menu.actions()[0], spell_menu) return menu def createCorrectionsMenu(self, cursor, parent=None): """Create and return a menu for correcting the selected word.""" if not cursor: return None text = cursor.selectedText() suggests = trim_suggestions(text, self.highlighter.dict().suggest(text), self.max_suggestions) spell_menu = QMenu('Spelling Suggestions', parent) for word in suggests: action = QAction(word, spell_menu) action.setData((cursor, word)) spell_menu.addAction(action) # Only return the menu if it's non-empty if spell_menu.actions(): spell_menu.triggered.connect(self.cb_correct_word) return spell_menu return None def createLanguagesMenu(self, parent=None): """Create and return a menu for selecting the spell-check language.""" curr_lang = self.highlighter.dict().tag lang_menu = QMenu("Language", parent) lang_actions = QActionGroup(lang_menu) for lang in enchant.list_languages(): action = lang_actions.addAction(lang) action.setCheckable(True) action.setChecked(lang == curr_lang) action.setData(lang) lang_menu.addAction(action) lang_menu.triggered.connect(self.cb_set_language) return lang_menu def createFormatsMenu(self, parent=None): """Create and return a menu for selecting the spell-check language.""" fmt_menu = QMenu("Format", parent) fmt_actions = QActionGroup(fmt_menu) curr_format = self.highlighter.chunkers() for name, chunkers in (('Text', []), ('HTML', [tokenize.HTMLChunker])): action = fmt_actions.addAction(name) action.setCheckable(True) action.setChecked(chunkers == curr_format) action.setData(chunkers) fmt_menu.addAction(action) fmt_menu.triggered.connect(self.cb_set_format) return fmt_menu def cursorForMisspelling(self, pos): """Return a cursor selecting the misspelled word at ``pos`` or ``None`` This leverages the fact that QPlainTextEdit already has a system for processing its contents in limited-size blocks to keep things fast. """ cursor = self.cursorForPosition(pos) misspelled_words = getattr(cursor.block().userData(), 'misspelled', []) # If the cursor is within a misspelling, select the word for (start, end) in misspelled_words: if start <= cursor.positionInBlock() <= end: block_pos = cursor.block().position() cursor.setPosition(block_pos + start, QTextCursor.MoveAnchor) cursor.setPosition(block_pos + end, QTextCursor.KeepAnchor) break if cursor.hasSelection(): return cursor else: return None def cb_correct_word(self, action): # pylint: disable=no-self-use """Event handler for 'Spelling Suggestions' entries.""" cursor, word = action.data() cursor.beginEditBlock() cursor.removeSelectedText() cursor.insertText(word) cursor.endEditBlock() def cb_set_language(self, action): """Event handler for 'Language' menu entries.""" lang = action.data() self.highlighter.setDict(enchant.Dict(lang)) def cb_set_format(self, action): """Event handler for 'Language' menu entries.""" chunkers = action.data() self.highlighter.setChunkers(chunkers) # TODO: Emit an event so this menu can trigger other things class PythonEnchantHighlighter(QSyntaxHighlighter): """QSyntaxHighlighter subclass which consults a PyEnchant dictionary""" if enchant is not None: tokenizer = None token_filters = (tokenize.EmailFilter, tokenize.URLFilter) enable_enchant = False # Define the spellcheck style once and just assign it as necessary # XXX: Does QSyntaxHighlighter.setFormat handle keeping this from # clobbering styles set in the data itself? err_format = QTextCharFormat() err_format.setUnderlineColor(Qt.red) err_format.setUnderlineStyle(QTextCharFormat.SpellCheckUnderline) # Python keywords keywords = [ 'and', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'yield', 'None', 'True', 'False', ] # Python operators operators = [ '=', # Comparison '==', '!=', '<', '<=', '>', '>=', # Arithmetic r'\+', '-', r'\*', '/', '//', r'\%', r'\*\*', # In-place r'\+=', '-=', r'\*=', '/=', r'\%=', # Bitwise r'\^', r'\|', r'\&', r'\~', '>>', '<<', ] # Python braces braces = [ r'\{', r'\}', r'\(', r'\)', r'\[', r'\]', ] def __init__(self, *args): QSyntaxHighlighter.__init__(self, *args) # Initialize private members self._sp_dict = None self._chunkers = [] # Multi-line strings (expression, flag, style) # FIXME: The triple-quotes in these two lines will mess up the # syntax highlighting from this point onward self.tri_single = (QRegExp("'''"), 1, STYLES['string2']) self.tri_double = (QRegExp('"""'), 2, STYLES['string2']) rules = [] # Keyword, operator, and brace rules rules += [(r'\b%s\b' % w, 0, STYLES['keyword']) for w in self.keywords] rules += [(r'%s' % o, 0, STYLES['operator']) for o in self.operators] rules += [(r'%s' % b, 0, STYLES['brace']) for b in self.braces] # All other rules rules += [ # 'self' (r'\bself\b', 0, STYLES['self']), # Double-quoted string, possibly containing escape sequences (r'"[^"\\]*(\\.[^"\\]*)*"', 0, STYLES['string']), # Single-quoted string, possibly containing escape sequences (r"'[^'\\]*(\\.[^'\\]*)*'", 0, STYLES['string']), # 'def' followed by an identifier (r'\bdef\b\s*(\w+)', 1, STYLES['defclass']), # 'class' followed by an identifier (r'\bclass\b\s*(\w+)', 1, STYLES['defclass']), # From '#' until a newline (r'#[^\n]*', 0, STYLES['comment']), # Numeric literals (r'\b[+-]?[0-9]+[lL]?\b', 0, STYLES['numbers']), (r'\b[+-]?0[xX][0-9A-Fa-f]+[lL]?\b', 0, STYLES['numbers']), (r'\b[+-]?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\b', 0, STYLES['numbers']), ] # Build a QRegExp for each pattern self.rules = [(QRegExp(pat), index, fmt) for (pat, index, fmt) in rules] def match_multiline(self, text, delimiter, in_state, style): """Do highlighting of multi-line strings. ``delimiter`` should be a ``QRegExp`` for triple-single-quotes or triple-double-quotes, and ``in_state`` should be a unique integer to represent the corresponding state changes when inside those strings. Returns True if we're still inside a multi-line string when this function is finished. """ # If inside triple-single quotes, start at 0 if self.previousBlockState() == in_state: start = 0 add = 0 # Otherwise, look for the delimiter on this line else: start = delimiter.indexIn(text) # Move past this match add = delimiter.matchedLength() # As long as there's a delimiter match on this line... while start >= 0: # Look for the ending delimiter end = delimiter.indexIn(text, start + add) # Ending delimiter on this line? if end >= add: length = end - start + add + delimiter.matchedLength() self.setCurrentBlockState(0) # No; multi-line string else: self.setCurrentBlockState(in_state) try: text_length = text.length() except AttributeError: text_length = len(text) length = text_length - start + add # Apply formatting self.setFormat(start, length, style) # Look for the next match start = delimiter.indexIn(text, start + length) # Return True if still inside a multi-line string, False otherwise if self.currentBlockState() == in_state: return True else: return False def chunkers(self): """Gets the chunkers in use""" return self._chunkers def dict(self): """Gets the spelling dictionary in use""" return self._sp_dict def setChunkers(self, chunkers): """Sets the list of chunkers to be used""" self._chunkers = chunkers self.setDict(self.dict()) # FIXME: Revert self._chunkers on failure to ensure consistent state def setDict(self, sp_dict): """Sets the spelling dictionary to be used""" if enchant is None: return try: self.tokenizer = tokenize.get_tokenizer(sp_dict.tag, chunkers=self._chunkers, filters=self.token_filters) except TokenizerNotFoundError: # Fall back to the "good for most euro languages" English tokenizer self.tokenizer = tokenize.get_tokenizer( chunkers=self._chunkers, filters=self.token_filters) self._sp_dict = sp_dict self.rehighlight() def highlightBlock_enchant(self, text): """Method for pyenchant spell checker""" if not self._sp_dict: return # Build a list of all misspelled words and highlight them misspellings = [] for (word, pos) in self.tokenizer(text): if not self._sp_dict.check(word): self.setFormat(pos, len(word), self.err_format) misspellings.append((pos, pos + len(word))) # Store the list so the context menu can reuse this tokenization pass # (Block-relative values so editing other blocks won't invalidate them) data = QTextBlockUserData() data.misspelled = misspellings self.setCurrentBlockUserData(data) def highlightBlock_python(self, text): """Method for Python highlighter""" # Do other syntax formatting for expression, nth, format in self.rules: index = expression.indexIn(text, 0) while index >= 0: # We actually want the index of the nth match index = expression.pos(nth) length = len(expression.cap(nth)) self.setFormat(index, length, format) index = expression.indexIn(text, index + length) self.setCurrentBlockState(0) # Do multi-line strings in_multiline = self.match_multiline(text, *self.tri_single) if not in_multiline: in_multiline = self.match_multiline(text, *self.tri_double) def highlightBlock(self, text): """Overridden QSyntaxHighlighter method to apply the highlight""" self.highlightBlock_python(text) if enchant is not None and self.enable_enchant: self.highlightBlock_enchant(text) if __name__ == '__main__': app = QApplication(sys.argv) spellEdit = SpellTextEdit() spellEdit.show() sys.exit(app.exec_()) pyspread-1.99.0.1/src/lib/selection.py0000644000175000017500000004321313600125723017312 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ Grid selection representation ============================== * :class:`Selection`: Represents grid selection independently from PyQt """ from builtins import zip from builtins import range from builtins import object class Selection(object): """Represents grid selection Parameters ---------- block_top_left: List of 2-tuples \tTop left edges of all selection rectangles block_bottom_right: List of 2-tuples \tBottom right edges of all selection rectangles rows: List \tList of selected rows cols: List \tList of selected columns cells: List of 2-tuples \tList of (row, column) tuples of individually selected cells """ def __init__(self, block_top_left, block_bottom_right, rows, cols, cells): self.block_tl = block_top_left self.block_br = block_bottom_right self.rows = rows self.cols = cols self.cells = cells def __bool__(self): """Returns True iif any attribute is non-empty""" return any(self.parameters) def __repr__(self): """String output for printing selection""" return "Selection" + repr(self.parameters) def __eq__(self, other): """Returns True if self and other selection are equal Selections are equal iif the order of each attribute is equal because order precedence may change the selection outcome in the grid. """ attrs = ("block_tl", "block_br", "rows", "cols", "cells") return all(getattr(self, at) == getattr(other, at) for at in attrs) def __contains__(self, cell): """Returns True iif cell is in selection Parameters ---------- cell: 2-Tuple \tIndex of cell that is checked if it is inside selection. """ assert len(cell) == 2 cell_row, cell_col = cell # Block selections for top_left, bottom_right in zip(self.block_tl, self.block_br): top, left = top_left bottom, right = bottom_right if top is None: top = 0 if left is None: left = 0 if bottom is None: bottom = cell_row if right is None: right = cell_col if top <= cell_row <= bottom and left <= cell_col <= right: return True # Row and column selections if cell_row in self.rows or cell_col in self.cols: return True # Cell selections if cell in self.cells: return True return False def __add__(self, value): """Shifts selection down and / or right Parameters ---------- value: 2-tuple \tRows and cols to be shifted up """ def shifted_block(block0, block1, delta_row, delta_col): """Returns shifted block""" try: row = block0 + delta_row except TypeError: row = block0 try: col = block1 + delta_col except TypeError: col = block1 return row, col delta_row, delta_col = value block_tl = [shifted_block(t, l, delta_row, delta_col) for t, l in self.block_tl] block_br = [shifted_block(b, r, delta_row, delta_col) for b, r in self.block_br] rows = [row + delta_row for row in self.rows] cols = [col + delta_col for col in self.cols] cells = [(r + delta_row, c + delta_col) for r, c in self.cells] return Selection(block_tl, block_br, rows, cols, cells) def __and__(self, other): """Returns intersection selection of self and other""" block_tl = [] block_br = [] rows = [] cols = [] cells = [] # Blocks # Check cells in block: If all are in other, add block else add cells for block in zip(self.block_tl, self.block_br): if block[0] in other.block_tl and block[1] in other.block_br: block_tl.append(block[0]) block_br.append(block[1]) else: block_cells = [] for row in range(block[0][0], block[1][0] + 1): for col in range(block[0][1], block[1][1] + 1): cell = row, col if cell in other: block_cells.append(cell) if len(block_cells) == (block[1][0] + 1 - block[0][0]) * \ (block[1][1] + 1 - block[0][1]): block_tl.append(block[0]) block_br.append(block[1]) else: cells.extend(block_cells) # Rows # If a row/col is selected in self and other then add it. # Otherwise, add all cells in the respective row/col that are in other. for row in self.rows: if row in other.rows: rows.append(row) else: for block in zip(other.block_tl, other.block_br): if block[0][0] <= row <= block[1][0]: block_tl.append((row, block[0][1])) block_br.append((row, block[1][1])) for cell in other.cells: if cell[0] == row and cell not in cells: cells.append(cell) # Columns for col in self.cols: if col in other.cols: cols.append(col) else: for block in zip(other.block_tl, other.block_br): if block[0][1] <= col <= block[1][1]: block_tl.append((block[0][0], col)) block_br.append((block[1][0], col)) for cell in other.cells: if cell[1] == col and cell not in cells: cells.append(cell) # Cells for cell in self.cells: if cell in other and cell not in cells: cells.append(cell) cells = list(set(cells)) return Selection(block_tl, block_br, rows, cols, cells) # Parameter access @property def parameters(self): """Returns tuple of selection parameters of self (self.block_tl, self.block_br, self.rows, self.cols, self.cells) """ return self.block_tl, self.block_br, self.rows, self.cols, self.cells def insert(self, point, number, axis): """Inserts number of rows/cols/tabs into selection at point on axis Parameters ---------- point: Integer \tAt this point the rows/cols are inserted or deleted number: Integer \tNumber of rows/cols to be inserted, negative number deletes axis: Integer in 0, 1 \tDefines whether rows or cols are affected """ def build_tuple_list(source_list, point, number, axis): """Returns adjusted tuple list for single cells""" target_list = [] for tl in source_list: tl_list = list(tl) if tl[axis] > point: tl_list[axis] += number target_list.append(tuple(tl_list)) return target_list self.block_tl = build_tuple_list(self.block_tl, point, number, axis) self.block_br = build_tuple_list(self.block_br, point, number, axis) if axis == 0: self.rows = \ [row + number if row > point else row for row in self.rows] elif axis == 1: self.cols = \ [col + number if col > point else col for col in self.cols] else: raise ValueError("Axis not in [0, 1]") self.cells = build_tuple_list(self.cells, point, number, axis) def get_bbox(self): """Returns ((top, left), (bottom, right)) of bounding box A bounding box is the smallest rectangle that contains all selections. Non-specified boundaries are None. """ bb_top, bb_left, bb_bottom, bb_right = [None] * 4 # Block selections for top_left, bottom_right in zip(self.block_tl, self.block_br): top, left = top_left bottom, right = bottom_right if bb_top is None or bb_top > top: bb_top = top if bb_left is None or bb_left > left: bb_left = left if bb_bottom is None or bb_bottom < bottom: bb_bottom = bottom if bb_right is None or bb_right > right: bb_right = right # Row and column selections for row in self.rows: if bb_top is None or bb_top > row: bb_top = row if bb_bottom is None or bb_bottom < row: bb_bottom = row for col in self.cols: if bb_left is None or bb_left > col: bb_left = col if bb_right is None or bb_right < col: bb_right = col # Cell selections for cell in self.cells: cell_row, cell_col = cell if bb_top is None or bb_top > cell_row: bb_top = cell_row if bb_left is None or bb_left > cell_col: bb_left = cell_col if bb_bottom is None or bb_bottom < cell_row: bb_bottom = cell_row if bb_right is None or bb_right < cell_col: bb_right = cell_col if self.rows: bb_left = bb_right = None if self.cols: bb_top = bb_bottom = None return ((bb_top, bb_left), (bb_bottom, bb_right)) def get_grid_bbox(self, shape): """Returns ((top, left), (bottom, right)) of bounding box A bounding box is the smallest rectangle that contains all selections. Non-specified boundaries are filled i from size. Parameters ---------- shape: 3-Tuple of Integer \tGrid shape """ (bb_top, bb_left), (bb_bottom, bb_right) = self.get_bbox() if bb_top is None: bb_top = 0 if bb_left is None: bb_left = 0 if bb_bottom is None: bb_bottom = shape[0] if bb_right is None: bb_right = shape[1] return ((bb_top, bb_left), (bb_bottom, bb_right)) def get_access_string(self, shape, table): """Returns a string, with which the selection can be accessed Parameters ---------- shape: 3-tuple of Integer \tShape of grid, for which the generated keys are valid table: Integer \tThird component of all returned keys. Must be in dimensions """ rows, columns, tables = shape # Negative dimensions cannot be assert all(dim > 0 for dim in shape) # Current table has to be in dimensions assert 0 <= table < tables string_list = [] # Block selections templ = "[(r, c, {}) for r in xrange({}, {}) for c in xrange({}, {})]" for (top, left), (bottom, right) in zip(self.block_tl, self.block_br): string_list += [templ.format(table, top, bottom + 1, left, right + 1)] # Fully selected rows template = "[({}, c, {}) for c in xrange({})]" for row in self.rows: string_list += [template.format(row, table, columns)] # Fully selected columns template = "[(r, {}, {}) for r in xrange({})]" for column in self.cols: string_list += [template.format(column, table, rows)] # Single cells for row, column in self.cells: string_list += [repr([(row, column, table)])] key_string = " + ".join(string_list) if len(string_list) == 0: return "" elif len(self.cells) == 1 and len(string_list) == 1: return "S[{}]".format(string_list[0][1:-1]) else: template = "[S[key] for key in {} if S[key] is not None]" return template.format(key_string) def shifted(self, rows, cols): """Returns a new selection that is shifted by rows and cols. Negative values for rows and cols may result in a selection that addresses negative cells. Parameters ---------- rows: Integer \tNumber of rows that the new selection is shifted down cols: Integer \tNumber of columns that the new selection is shifted right """ shifted_block_tl = \ [(row + rows, col + cols) for row, col in self.block_tl] shifted_block_br = \ [(row + rows, col + cols) for row, col in self.block_br] shifted_rows = [row + rows for row in self.rows] shifted_cols = [col + cols for col in self.cols] shifted_cells = [(row + rows, col + cols) for row, col in self.cells] return Selection(shifted_block_tl, shifted_block_br, shifted_rows, shifted_cols, shifted_cells) def get_right_borders_selection(self, border_choice): """Returns selection of cells that need to be adjusted on border change The cells that are contained in the selection are those, on which the right border attributes need to be adjusted on border line and border color changes. """ (top, left), (bottom, right) = self.get_bbox() if border_choice == "All borders": return Selection([(top, left-1)], [(bottom, right)], [], [], []) elif border_choice == "Top border": return Selection([], [], [], [], []) elif border_choice == "Bottom border": return Selection([], [], [], [], []) elif border_choice == "Left border": return Selection([(top, left-1)], [(bottom, left-1)], [], [], []) elif border_choice == "Right border": return Selection([(top, right)], [(bottom, right)], [], [], []) elif border_choice == "Outer borders": return Selection([(top, right), (top, left-1)], [(bottom, right), (bottom, left-1)], [], [], []) elif border_choice == "Inner borders": return Selection([(top, left)], [(bottom, right-1)], [], [], []) elif border_choice == "Top and bottom borders": return Selection([], [], [], [], []) else: raise ValueError("border_choice {} unknown.".format(border_choice)) def get_bottom_borders_selection(self, border_choice): """Returns selection of cells that need to be adjusted on border change The cells that are contained in the selection are those, on which the bottom border attributes need to be adjusted on border line and border color changes. """ (top, left), (bottom, right) = self.get_bbox() if border_choice == "All borders": return Selection([(top-1, left)], [(bottom, right)], [], [], []) elif border_choice == "Top border": return Selection([(top-1, left)], [(top-1, right)], [], [], []) elif border_choice == "Bottom border": return Selection([(bottom, left)], [(bottom, right)], [], [], []) elif border_choice == "Left border": return Selection([], [], [], [], []) elif border_choice == "Right border": return Selection([], [], [], [], []) elif border_choice == "Outer borders": return Selection([(top-1, left), (bottom, left)], [(top-1, right), (bottom, right)], [], [], []) elif border_choice == "Inner borders": return Selection([(top, left)], [(bottom-1, right)], [], [], []) elif border_choice == "Top and bottom borders": return Selection([(top-1, left), (bottom, left)], [(top-1, right), (bottom, right)], [], [], []) else: raise ValueError("border_choice {} unknown.".format(border_choice)) def single_cell_selected(self): """Returns True iif a single cell is selected via self.cells""" return (not any((self.block_tl, self.block_br, self.rows, self.cols)) and len(self.cells) == 1) def cell_generator(self, shape, table=None): """Returns a generator of cell key tuples :param shape: Grid shape :param table: Third component of each returned key If table is None 2-tuples (row, column) are yielded else 3-tuples """ rows, columns, tables = shape (top, left), (bottom, right) = self.get_grid_bbox(shape) bottom = min(bottom, rows - 1) right = min(right, columns - 1) for row in range(top, bottom + 1): for column in range(left, right + 1): if (row, column) in self: if table is None: yield row, column elif table < tables - 1: yield row, column, table pyspread-1.99.0.1/src/lib/test/0000755000175000017500000000000013604465726015745 5ustar andreasandreaspyspread-1.99.0.1/src/lib/test/test_string_helpers.py0000644000175000017500000001013413570742625022403 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ test_string_helpers =================== Unit tests for string_helpers.py """ import py.test as pytest from src.lib.string_helpers import quote, wrap_text, get_svg_aspect param_test_quote = [ (None, None), (1, 1), ("", ""), ("Test", "'Test'"), ("ü+", "'ü+'"), (u"ü+", "'ü+'"), (r"ü+", "'ü+'"), (b"Test", "b'Test'"), ("Test1\nTest2", "'Test1\\nTest2'"), ] @pytest.mark.parametrize("code, res", param_test_quote) def test_quote(code, res): """Unit test for quote""" assert quote(code) == res param_test_wrap_text = [ ("", 80, 2000, ""), ("."*81, 80, 2000, "."*80+"\n."), (r"."*81, 80, 2000, "."*80+"\n."), ("~"*81, 80, 2000, "~"*80+"\n~"), (u"\u2200"*81, 80, 2000, "\u2200"*80+"\n\u2200"), ("."*160, 80, 2000, "."*80+"\n"+"."*80), ("x"*160, 80, 2, "xx..."), ("."*10, 2, 2000, "\n".join([".."]*5)), ] @pytest.mark.parametrize("text, width, maxlen, res", param_test_wrap_text) def test_wrap_text(text, width, maxlen, res): """Unit test for wrap_text""" assert wrap_text(text, width, maxlen) == res SVG_1 = """ image/svg+xml """ def test_get_svg_aspect(): """Unit test for get_svg_aspect""" epsilon = 1.0e-10 assert abs(get_svg_aspect(SVG_1) - epsilon) pyspread-1.99.0.1/src/lib/test/test_hashing.py0000644000175000017500000000404413570745033020773 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ test_hashing ============ Unit tests for hashing.py """ import py.test as pytest from src.lib.hashing import genkey, sign, verify KEYS = [genkey() for _ in range(100)] def test_genkey(): """Unit test for genkey""" keys = [] for length in range(1, 128): keys.append(genkey(length)) for i, key in enumerate(keys): assert len(key) == i + 1 assert len(set(KEYS)) == len(KEYS) param_test_sign_verify = [ (b"Test", KEYS[0], b"Test", KEYS[0], True), (100*"\u2200".encode('utf-8'), KEYS[0], 100*"\u2200".encode('utf-8'), KEYS[0], True), (b"Test", KEYS[0], b"Test", KEYS[1], False), (b"Test", KEYS[0], b"TEST", KEYS[0], False), (b"Test", KEYS[0], b"TEST", KEYS[3], False), (b"", KEYS[0], b"", KEYS[3], False), (b"", KEYS[0], b"", KEYS[0], True), (b"Hello World\n"*100000, KEYS[1], b"Hello World\n"*100000, KEYS[1], True), ] @pytest.mark.parametrize("data1, sigkey, data2, verkey, res", param_test_sign_verify) def test_sign_verify(data1, sigkey, data2, verkey, res): """Unit test for sign and verify""" signature = sign(data1, sigkey) assert verify(data2, signature, verkey) == res pyspread-1.99.0.1/src/lib/test/test_selection.py0000644000175000017500000002661513577703017021352 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ test_selection ============== Unit tests for selection.py """ import py.test as pytest from src.lib.selection import Selection class TestSelection: """Unit tests for Selection""" param_test_nonzero = [ (Selection([], [], [], [], [(32), (34)]),), (Selection([], [], [], [], [(32, 53), (34, 56)]),), (Selection([], [], [], [3], []),), (Selection([], [], [2], [], []),), (Selection([(1, 43)], [(2, 354)], [], [], []),), ] @pytest.mark.parametrize("selection", param_test_nonzero) def test_nonzero(self, selection): """Unit test for __nonzero__""" assert selection def test_repr(self): """Unit test for __repr__""" selection = Selection([], [], [], [], [(32, 53), (34, 56)]) assert str(selection) == \ "Selection([], [], [], [], [(32, 53), (34, 56)])" param_test_eq = [ (Selection([], [], [], [], [(32, 53), (34, 56)]), Selection([], [], [], [], [(32, 53), (34, 56)]), True), (Selection([], [], [], [], [(32, 53)]), Selection([], [], [], [], [(32, 53), (34, 56)]), False), (Selection([], [], [], [], [(34, 56), (32, 53)]), Selection([], [], [], [], [(32, 53), (34, 56)]), False), (Selection([], [], [3, 5], [1, 4], [(32, 53)]), Selection([], [], [5, 3], [1, 4], [(32, 53)]), False), (Selection([], [], [3, 5], [1, 4], [(32, 2343)]), Selection([], [], [5, 3], [1, 4], [(32, 53)]), False), (Selection([(2, 3), (9, 10)], [(5, 9), (100, 34)], [], [], []), Selection([(2, 3), (9, 10)], [(5, 9), (100, 34)], [], [], []), True), (Selection([(9, 10), (2, 3)], [(100, 34), (5, 9)], [], [], []), Selection([(2, 3), (9, 10)], [(5, 9), (100, 34)], [], [], []), False), ] @pytest.mark.parametrize("sel1, sel2, res", param_test_eq) def test_eq(self, sel1, sel2, res): """Unit test for __eq__""" assert (sel1 == sel2) == res assert (sel2 == sel1) == res param_test_contains = [ # Cell selections (Selection([], [], [], [], [(32, 53), (34, 56)]), (32, 53), True), (Selection([], [], [], [], [(32, 53), (34, 56)]), (23, 34534534), False), # Block selections (Selection([(4, 5)], [(100, 200)], [], [], []), (4, 5), True), (Selection([(4, 5)], [(100, 200)], [], [], []), (99, 199), True), (Selection([(4, 5)], [(100, 200)], [], [], []), (100, 200), True), (Selection([(4, 5)], [(100, 200)], [], [], []), (0, 0), False), (Selection([(4, 5)], [(100, 200)], [], [], []), (0, 1), False), (Selection([(4, 5)], [(100, 200)], [], [], []), (1, 0), False), (Selection([(4, 5)], [(100, 200)], [], [], []), (4, 4), False), (Selection([(4, 5)], [(100, 200)], [], [], []), (3, 5), False), (Selection([(4, 5)], [(100, 200)], [], [], []), (100, 201), False), (Selection([(4, 5)], [(100, 200)], [], [], []), (10**10, 10**10), False), # Row selection (Selection([], [], [3], [], []), (0, 0), False), (Selection([], [], [3], [], []), (3, 0), True), (Selection([], [], [3, 5], [], []), (3, 0), True), (Selection([], [], [3, 5], [], []), (5, 0), True), (Selection([], [], [3, 5], [], []), (4, 0), False), # Column selection (Selection([], [], [], [2, 234, 434], []), (234, 234), True), (Selection([], [], [], [2, 234, 434], []), (234, 0), False), # Combinations (Selection([(0, 0)], [(90, 23)], [0], [0, 34], [((0, 0))]), (0, 0), True), ] @pytest.mark.parametrize("sel, key, res", param_test_contains) def test_contains(self, sel, key, res): """Unit test for __contains__ Used in: ele in selection """ assert (key in sel) == res param_test_add = [ (Selection([], [], [], [], [(0, 0), (34, 56)]), (4, 5), Selection([], [], [], [], [(4, 5), (38, 61)])), (Selection([], [], [], [], [(0, 0), (34, 56)]), (0, 0), Selection([], [], [], [], [(0, 0), (34, 56)])), (Selection([], [], [], [], [(0, 0), (34, 56)]), (-3, -24), Selection([], [], [], [], [(-3, -24), (31, 32)])), (Selection([(2, 5)], [(4, 6)], [1], [0], [(0, 0), (34, 56)]), (1, 0), Selection([(3, 5)], [(5, 6)], [2], [0], [(1, 0), (35, 56)])), ] @pytest.mark.parametrize("sel, add, res", param_test_add) def test_add(self, sel, add, res): """Unit test for __add__""" val = sel + add assert val == res param_test_and = [ (Selection([], [], [], [], []), Selection([], [], [], [], []), Selection([], [], [], [], [])), (Selection([], [], [], [], [(0, 0)]), Selection([], [], [], [], []), Selection([], [], [], [], [])), (Selection([], [], [], [], [(0, 0)]), Selection([], [], [], [], [(0, 0)]), Selection([], [], [], [], [(0, 0)])), (Selection([], [], [], [], [(0, 0)]), Selection([(0, 0)], [(5, 5)], [], [], []), Selection([], [], [], [], [(0, 0)])), (Selection([(0, 0)], [(1000, 200)], [], [], []), Selection([(0, 0)], [(1000, 200)], [], [], []), Selection([(0, 0)], [(1000, 200)], [], [], [])), (Selection([(0, 0)], [(1000, 200)], [], [], []), Selection([(1, 2)], [(10, 20)], [], [], []), [(1, 2), (10, 20)]), (Selection([(0, 0)], [(1000, 200)], [], [], []), Selection([], [], [(2)], [], []), [(2, 3), (2, 0), (2, 200)]), (Selection([(0, 0)], [(1000, 200)], [], [], []), Selection([], [], [], [(5)], []), [(0, 5), (1000, 5)]), ] @pytest.mark.parametrize("s1, s2, res", param_test_and) def test_and(self, s1, s2, res): """Unit test for __and__""" s1_and_s2 = s1 & s2 if isinstance(res, list): for cell in res: assert cell in s1_and_s2 else: assert s1_and_s2 == res param_test_insert = [ (Selection([], [], [2], [], []), 1, 10, 0, Selection([], [], [12], [], [])), (Selection([], [], [], [], [(234, 23)]), 20, 4, 1, Selection([], [], [], [], [(234, 27)])), (Selection([], [], [21], [33, 44], [(234, 23)]), 40, 4, 1, Selection([], [], [21], [33, 48], [(234, 23)])), ] @pytest.mark.parametrize("sel, point, number, axis,res", param_test_insert) def test_insert(self, sel, point, number, axis, res): """Unit test for insert""" sel.insert(point, number, axis) assert sel == res param_test_get_bbox = [ (Selection([], [], [], [], [(32, 53), (34, 56)]), ((32, 53), (34, 56))), (Selection([(4, 5)], [(100, 200)], [], [], []), ((4, 5), (100, 200))), (Selection([], [], [2], [3], []), ((None, None), (None, None))), (Selection([], [], [], [3], []), ((None, 3), (None, 3))), ] @pytest.mark.parametrize("sel, res", param_test_get_bbox) def test_get_bbox(self, sel, res): """Unit test for get_bbox""" assert sel.get_bbox() == res param_get_access_string = [ (Selection([], [], [], [], [(32, 53), (34, 56)]), (1000, 100, 3), 0, "[S[key] for key in [(32, 53, 0)] + [(34, 56, 0)] " "if S[key] is not None]"), (Selection([], [], [4, 5], [53], []), (1000, 100, 3), 2, "[S[key] for key in [(4, c, 2) for c in xrange(100)] + " "[(5, c, 2) for c in xrange(100)] + [(r, 53, 2) for r in " "xrange(1000)] if S[key] is not None]"), (Selection([(0, 0), (2, 2)], [(1, 1), (7, 5)], [], [], []), (1000, 100, 3), 0, "[S[key] for key in [(r, c, 0) for r in xrange(0, 2) for c in " "xrange(0, 2)] + [(r, c, 0) for r in xrange(2, 8) for c in " "xrange(2, 6)] if S[key] is not None]"), ] @pytest.mark.parametrize("sel, shape, table, res", param_get_access_string) def test_get_access_string(self, sel, shape, table, res): """Unit test for get_access_string""" assert sel.get_access_string(shape, table) == res param_test_shifted = [ (Selection([], [], [], [], [(32, 53), (34, 56)]), 0, 0, Selection([], [], [], [], [(32, 53), (34, 56)])), (Selection([], [], [], [], [(32, 53), (34, 56)]), 1, 1, Selection([], [], [], [], [(33, 54), (35, 57)])), (Selection([], [], [], [], [(32, 53), (34, 56)]), -1, 0, Selection([], [], [], [], [(31, 53), (33, 56)])), (Selection([], [], [], [], [(32, 53), (34, 56)]), -1, -1, Selection([], [], [], [], [(31, 52), (33, 55)])), (Selection([], [], [], [], [(32, 53), (34, 56)]), -1, 1, Selection([], [], [], [], [(31, 54), (33, 57)])), (Selection([], [], [], [], [(32, 53), (34, 56)]), -100, 100, Selection([], [], [], [], [(-68, 153), (-66, 156)])), (Selection([(0, 0), (1, 1)], [(10, 10), (50, 50)], [], [], []), 1, 0, Selection([(1, 0), (2, 1)], [(11, 10), (51, 50)], [], [], [])), (Selection([], [], [1, 4, 6], [3, 4], []), 2, 1, Selection([], [], [3, 6, 8], [4, 5], [])), ] @pytest.mark.parametrize("sel, rows, cols, res", param_test_shifted) def test_shifted(self, sel, rows, cols, res): """Unit test for shifted""" assert sel.shifted(rows, cols) == res param_test_single_cell_selected = [ (Selection([], [], [], [], [(32, 53)]), True), (Selection([], [], [], [], [(32, 53), (34, 56)]), False), (Selection([(0, 0)], [(2, 2)], [], [], []), False), (Selection([], [], [(1, 2)], [], []), False), (Selection([], [], [], [(1, 2)], []), False), ] @pytest.mark.parametrize("sel, res", param_test_single_cell_selected) def test_single_cell_selected(self, sel, res): """Unit test for single_cell_selected""" assert sel.single_cell_selected() is res param_test_cell_generator = [ (Selection([], [], [], [], [(32, 53), (34, 56)]), (200, 200, 1), None, set([(32, 53), (34, 56)])), (Selection([], [], [], [], [(32, 53), (34, 56)]), (1, 1, 1), None, set()), (Selection([], [], [(2)], [], []), (20, 20, 3), None, set([(2, i) for i in range(20)])), (Selection([], [], [2], [3], []), (4, 4, 3), None, set([(2, i) for i in range(4)] + [(i, 3) for i in range(4)])), ] @pytest.mark.parametrize("sel, shape, tab, res", param_test_cell_generator) def test_cell_generator(self, sel, shape, tab, res): """Unit test for cell_generator""" assert set(sel.cell_generator(shape, tab)) == res pyspread-1.99.0.1/src/lib/string_helpers.py0000644000175000017500000000506213570737352020372 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ **Provides** * :func:`quote` * :func:`wrap_text` """ import xml.etree.ElementTree as ET import textwrap def quote(code): """Returns quoted code if not already quoted and if possible Parameters ---------- * code: String \tCode that is to be quoted """ starts_and_ends = [ ("'", "'"), ('"', '"'), ("u'", "'"), ('u"', '"'), ("b'", "'"), ('b"', '"'), ("r'", "'"), ('r"', '"'), ] if code is None or not (isinstance(code, bytes) or isinstance(code, str)): return code code = code.strip() if code and not (code[0], code[-1]) in starts_and_ends: return repr(code) else: return code def wrap_text(text, width=80, maxlen=2000): """Returns wrapped text Parameters ---------- * text: String \tThe text to bewrapped * width: Integer, defaulys to 80 \tWidth of the text to be wrapped * maxlen, defaults to 2000 \tMaximum total text length before text in truncated and extended by [...] \tIf None then truncation is disabled """ if text is None: return if maxlen is not None and len(text) > maxlen: text = text[:maxlen] + "..." return "\n".join(textwrap.wrap(text, width=width)) def get_svg_aspect(svg_bytes): """Returns width / height ratio""" tree = ET.fromstring(svg_bytes) width_str = tree.get("width") height_str = tree.get("height") width = int(float(''.join(n for n in width_str if n.isdigit() or n == '.'))) height = int(float(''.join(n for n in height_str if n.isdigit() or n == '.'))) return width / height pyspread-1.99.0.1/src/lib/qimage2ndarray/0000755000175000017500000000000013604465725017673 5ustar andreasandreaspyspread-1.99.0.1/src/lib/qimage2ndarray/qimageview_python.py0000644000175000017500000000504113570426714024001 0ustar andreasandreasimport numpy as np, sys from src.lib.qimage2ndarray.dynqt import qt, QtGui def PyQt_data(image): # PyQt4/PyQt5's QImage.bits() returns a sip.voidptr that supports # conversion to string via asstring(size) or getting its base # address via int(...): return (int(image.bits()), False) def _re_buffer_address_match(buf_repr): import re _re_buffer_address = re.compile(' ma = _re_buffer_address_match(repr(image.bits())) assert ma, 'could not parse address from %r' % (image.bits(), ) return (int(ma.group(1), 16), False) def direct_buffer_data(image): return image.bits() # I would have preferred a more pythonic (duck-typing-like) approach # based on introspection, but finding out which one of the above functions # works at runtime is quite hard getdata = { ('PyQt4', 2) : PyQt_data, ('PyQt5', 2) : PyQt_data, ('PySide', 2) : PySide_data, ('PySide2', 2) : PySide_data, ('PyQt4', 3) : PyQt_data, ('PyQt5', 3) : PyQt_data, ('PySide', 3) : direct_buffer_data, ('PySide2', 3) : direct_buffer_data, }[qt.name(), sys.version_info.major] validFormats_8bit = [getattr(QtGui.QImage, name) for name in ('Format_Indexed8', 'Format_Grayscale8') if name in dir(QtGui.QImage)] validFormats_32bit = (QtGui.QImage.Format_RGB32, QtGui.QImage.Format_ARGB32, QtGui.QImage.Format_ARGB32_Premultiplied) def qimageview(image): if not isinstance(image, QtGui.QImage): raise TypeError("image argument must be a QImage instance") shape = image.height(), image.width() strides0 = image.bytesPerLine() format = image.format() if format in validFormats_8bit: dtype = "|u1" strides1 = 1 elif format in validFormats_32bit: dtype = "|u4" strides1 = 4 elif format == QtGui.QImage.Format_Invalid: raise ValueError("qimageview got invalid QImage") else: raise ValueError("qimageview can only handle 8- or 32-bit QImages (format was %r)" % format) image.__array_interface__ = { 'shape': shape, 'typestr': dtype, 'data': getdata(image), 'strides': (strides0, strides1), 'version': 3, } result = np.asarray(image) del image.__array_interface__ return result pyspread-1.99.0.1/src/lib/qimage2ndarray/qt_driver.py0000644000175000017500000001115113551171371022233 0ustar andreasandreas# Copyright 2014-2014 Hans Meine # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """This module contains a wrapper around three different Qt python bindings. It will dynamically decide which one to use: * First, the environment variable QT_DRIVER is checked (may be one of 'PyQt5', 'PyQt4', 'PySide', 'PythonQt'). * If unset, previously imported binding modules are detected (in sys.modules). * If no bindings are loaded, the environment variable QT_API is checked (used by ETS and ipython, may be 'pyside' or 'pyqt'). In order to have compatible behavior between the different bindings, PyQt4 (if used) is configured as follows:: sip.setapi("QString", 2) sip.setapi("QVariant", 2) Furthermore, there is a 'getprop' function that solves the following problem: PythonQt exports Qt properties as Python properties *and* gives the precedence over getters with the same name. Instead of calling getters with parentheses (which must not be used in PythonQt, but are required in PyQt and PySide), one may e.g. write `getprop(widget.width)`. """ import sys, os def getprop_PythonQt(prop): """getprop(property_or_getter) Used on getters that have the same name as a corresponding property. For PythonQt, this version will just return the argument, which is assumed to be (the value of) a python property through which PythonQt exposes Qt properties.""" return prop def getprop_other(getter): """getprop(property_or_getter) Used on getters that have the same name as a corresponding property. For Qt bindings other than PythonQt, this version will return the result of calling the argument, which is assumed to be a Qt getter function. (With PythonQt, properties override getters and no calling must be done.)""" return getter() class QtDriver(object): DRIVERS = ('PyQt5', 'PyQt4', 'PySide', 'PySide2', 'PythonQt') DEFAULT = 'PyQt5' @classmethod def detect_qt(cls): for drv in cls.DRIVERS: if drv in sys.modules: return drv if '_PythonQt' in sys.modules: return 'PythonQt' return None def name(self): return self._drv def getprop(self): return getprop_PythonQt if self._drv == 'PythonQt' else getprop_other def __init__(self, drv = os.environ.get('QT_DRIVER')): """Supports QT_API (used by ETS and ipython)""" if drv is None: drv = self.detect_qt() if drv is None: drv = os.environ.get('QT_API') if drv is None: drv = self.DEFAULT drv = {'pyside': 'PySide', 'pyside2': 'PySide2', 'pyqt' : 'PyQt4', 'pyqt5' : 'PyQt5'}.get(drv, drv) # map ETS syntax assert drv in self.DRIVERS self._drv = drv @staticmethod def _initPyQt4(): """initialize PyQt4 to be compatible with PySide""" if 'PyQt4.QtCore' in sys.modules: # too late to configure API pass else: import sip sip.setapi("QString", 2) sip.setapi("QVariant", 2) @staticmethod def requireCompatibleAPI(): """If PyQt4's API should be configured to be compatible with PySide's (i.e. QString and QVariant should not be explicitly exported, cf. documentation of sip.setapi()), call this function to check that the PyQt4 was properly imported. (It will always be configured this way by this module, but it could have been imported before we got a hand on doing so.) """ if 'PyQt4.QtCore' in sys.modules: import sip for api in ('QVariant', 'QString'): if sip.getapi(api) != 2: raise RuntimeError('%s API already set to V%d, but should be 2' % (api, sip.getapi(api))) def importMod(self, mod): if self._drv == 'PyQt4': self._initPyQt4() qt = __import__('%s.%s' % (self._drv, mod)) return getattr(qt, mod) def __getattr__(self, name): if name.startswith('Qt'): return self.importMod(name) return super(QtDriver, self).__getattr__(name) pyspread-1.99.0.1/src/lib/qimage2ndarray/dynqt.py0000644000175000017500000000010213551171371021365 0ustar andreasandreasfrom .qt_driver import QtDriver qt = QtDriver() QtGui = qt.QtGui pyspread-1.99.0.1/src/lib/qimage2ndarray/__init__.py0000644000175000017500000003515313551171371022003 0ustar andreasandreasimport sys as _sys import numpy as _np from .dynqt import QtGui as _qt from .dynqt import qt as _qt_driver if _qt_driver.name() == 'PythonQt': from .qimageview import QImage2ndarray as _temp _qimageview = _temp.qimageview else: from .qimageview_python import qimageview as _qimageview __version__ = "1.7" if _sys.byteorder == 'little': _bgra = (0, 1, 2, 3) else: _bgra = (3, 2, 1, 0) _bgra_fields = {'b': (_np.uint8, _bgra[0], 'blue'), 'g': (_np.uint8, _bgra[1], 'green'), 'r': (_np.uint8, _bgra[2], 'red'), 'a': (_np.uint8, _bgra[3], 'alpha')} bgra_dtype = _np.dtype(_bgra_fields) """Complex dtype offering the named fields 'r','g','b', and 'a' and corresponding long names, conforming to QImage_'s 32-bit memory layout.""" try: _basestring = basestring except NameError: # 'basestring' undefined, must be Python 3 _basestring = str def _qimage_or_filename_view(qimage): if isinstance(qimage, _basestring): qimage = _qt.QImage(qimage) return _qimageview(qimage) def raw_view(qimage): """Returns raw 2D view of the given QImage_'s memory. The result will be a 2-dimensional numpy.ndarray with an appropriately sized integral dtype. (This function is not intented to be used directly, but used internally by the other -- more convenient -- view creation functions.) :param qimage: image whose memory shall be accessed via NumPy :type qimage: QImage_ :rtype: numpy.ndarray_ with shape (height, width)""" return _qimage_or_filename_view(qimage) def byte_view(qimage, byteorder = 'little'): """Returns raw 3D view of the given QImage_'s memory. This will always be a 3-dimensional numpy.ndarray with dtype numpy.uint8. Note that for 32-bit images, the last dimension will be in the [B,G,R,A] order (if little endian) due to QImage_'s memory layout (the alpha channel will be present for Format_RGB32 images, too). For 8-bit (indexed) images, the array will still be 3-dimensional, i.e. shape will be (height, width, 1). The order of channels in the last axis depends on the `byteorder`, which defaults to 'little', i.e. BGRA order. You may set the argument `byteorder` to 'big' to get ARGB, or use None which means sys.byteorder here, i.e. return native order for the machine the code is running on. For your convenience, `qimage` may also be a filename, see `Loading and Saving Images`_ in the documentation. :param qimage: image whose memory shall be accessed via NumPy :type qimage: QImage_ :param byteorder: specify order of channels in last axis :rtype: numpy.ndarray_ with shape (height, width, 1 or 4) and dtype uint8""" raw = _qimage_or_filename_view(qimage) result = raw.view(_np.uint8).reshape(raw.shape + (-1, )) if byteorder and byteorder != _sys.byteorder: result = result[...,::-1] return result def rgb_view(qimage, byteorder = 'big'): """Returns RGB view of a given 32-bit color QImage_'s memory. Similarly to byte_view(), the result is a 3D numpy.uint8 array, but reduced to the rgb dimensions (without alpha), and reordered (using negative strides in the last dimension) to have the usual [R,G,B] order. The image must have 32 bit pixel size, i.e. be RGB32, ARGB32, or ARGB32_Premultiplied. (Note that in the latter case, the values are of course premultiplied with alpha.) The order of channels in the last axis depends on the `byteorder`, which defaults to 'big', i.e. RGB order. You may set the argument `byteorder` to 'little' to get BGR, or use None which means sys.byteorder here, i.e. return native order for the machine the code is running on. For your convenience, `qimage` may also be a filename, see `Loading and Saving Images`_ in the documentation. :param qimage: image whose memory shall be accessed via NumPy :type qimage: QImage_ with 32-bit pixel type :param byteorder: specify order of channels in last axis :rtype: numpy.ndarray_ with shape (height, width, 3) and dtype uint8""" if byteorder is None: byteorder = _sys.byteorder bytes = byte_view(qimage, byteorder) if bytes.shape[2] != 4: raise ValueError("For rgb_view, the image must have 32 bit pixel size (use RGB32, ARGB32, or ARGB32_Premultiplied)") if byteorder == 'little': return bytes[...,:3] # strip A off BGRA else: return bytes[...,1:] # strip A off ARGB def alpha_view(qimage): """Returns alpha view of a given 32-bit color QImage_'s memory. The result is a 2D numpy.uint8 array, equivalent to byte_view(qimage)[...,3]. The image must have 32 bit pixel size, i.e. be RGB32, ARGB32, or ARGB32_Premultiplied. Note that it is not enforced that the given qimage has a format that actually *uses* the alpha channel -- for Format_RGB32, the alpha channel usually contains 255 everywhere. For your convenience, `qimage` may also be a filename, see `Loading and Saving Images`_ in the documentation. :param qimage: image whose memory shall be accessed via NumPy :type qimage: QImage_ with 32-bit pixel type :rtype: numpy.ndarray_ with shape (height, width) and dtype uint8""" bytes = byte_view(qimage, byteorder = None) if bytes.shape[2] != 4: raise ValueError("For alpha_view, the image must have 32 bit pixel size (use RGB32, ARGB32, or ARGB32_Premultiplied)") return bytes[...,_bgra[3]] def recarray_view(qimage): """Returns recarray_ view of a given 32-bit color QImage_'s memory. The result is a 2D array with a complex record dtype, offering the named fields 'r','g','b', and 'a' and corresponding long names. Thus, each color components can be accessed either via string indexing or via attribute lookup (through numpy.recarray_): For your convenience, `qimage` may also be a filename, see `Loading and Saving Images`_ in the documentation. >>> from PyQt4.QtGui import QImage, qRgb >>> qimg = QImage(320, 240, QImage.Format_ARGB32) >>> qimg.fill(qRgb(12,34,56)) >>> >>> import qimage2ndarray >>> v = qimage2ndarray.recarray_view(qimg) >>> >>> red = v["r"] >>> red[10,10] 12 >>> pixel = v[10,10] >>> pixel["r"] 12 >>> (v.g == v["g"]).all() True >>> (v.alpha == 255).all() True :param qimage: image whose memory shall be accessed via NumPy :type qimage: QImage_ with 32-bit pixel type :rtype: numpy.ndarray_ with shape (height, width) and dtype :data:`bgra_dtype`""" raw = _qimage_or_filename_view(qimage) if raw.itemsize != 4: raise ValueError("For rgb_view, the image must have 32 bit pixel size (use RGB32, ARGB32, or ARGB32_Premultiplied)") return raw.view(bgra_dtype, _np.recarray) def _normalize255(array, normalize, clip = (0, 255)): if normalize: if normalize is True: normalize = array.min(), array.max() if clip == (0, 255): clip = None elif _np.isscalar(normalize): normalize = (0, normalize) nmin, nmax = normalize if nmin: array = array - nmin if nmax != nmin: scale = 255. / (nmax - nmin) if scale != 1.0: array = array * scale if clip: low, high = clip _np.clip(array, low, high, array) return array def gray2qimage(gray, normalize = False): """Convert the 2D numpy array `gray` into a 8-bit, indexed QImage_ with a gray colormap. The first dimension represents the vertical image axis. The parameter `normalize` can be used to normalize an image's value range to 0..255: `normalize` = (nmin, nmax): scale & clip image values from nmin..nmax to 0..255 `normalize` = nmax: lets nmin default to zero, i.e. scale & clip the range 0..nmax to 0..255 `normalize` = True: scale image values to 0..255 (same as passing (gray.min(), gray.max())) If the source array `gray` contains masked values, the result will have only 255 shades of gray, and one color map entry will be used to make the corresponding pixels transparent. A full alpha channel cannot be supported with indexed images; instead, use `array2qimage` to convert into a 32-bit QImage. :param gray: image data which should be converted (copied) into a QImage_ :type gray: 2D or 3D numpy.ndarray_ or `numpy.ma.array `_ :param normalize: normalization parameter (see above, default: no value changing) :type normalize: bool, scalar, or pair :rtype: QImage_ with RGB32 or ARGB32 format""" if _np.ndim(gray) != 2: raise ValueError("gray2QImage can only convert 2D arrays" + " (try using array2qimage)" if _np.ndim(gray) == 3 else "") h, w = gray.shape result = _qt.QImage(w, h, _qt.QImage.Format_Indexed8) if not _np.ma.is_masked(gray): for i in range(256): result.setColor(i, _qt.qRgb(i,i,i)) _qimageview(result)[:] = _normalize255(gray, normalize) else: # map gray value 1 to gray value 0, in order to make room for # transparent colormap entry: result.setColor(0, _qt.qRgb(0,0,0)) for i in range(2, 256): result.setColor(i-1, _qt.qRgb(i,i,i)) _qimageview(result)[:] = _normalize255(gray, normalize, clip = (1, 255)) - 1 result.setColor(255, 0) _qimageview(result)[gray.mask] = 255 return result def array2qimage(array, normalize = False): """Convert a 2D or 3D numpy array into a 32-bit QImage_. The first dimension represents the vertical image axis; the optional third dimension is supposed to contain 1-4 channels: ========= =================== #channels interpretation ========= =================== 1 scalar/gray 2 scalar/gray + alpha 3 RGB 4 RGB + alpha ========= =================== Scalar data will be converted into corresponding gray RGB triples; if you want to convert to an (indexed) 8-bit image instead, use `gray2qimage` (which cannot support an alpha channel though). The parameter `normalize` can be used to normalize an image's value range to 0..255: `normalize` = (nmin, nmax): scale & clip image values from nmin..nmax to 0..255 `normalize` = nmax: lets nmin default to zero, i.e. scale & clip the range 0..nmax to 0..255 `normalize` = True: scale image values to 0..255 (same as passing (array.min(), array.max())) If `array` contains masked values, the corresponding pixels will be transparent in the result. Thus, the result will be of QImage.Format_ARGB32 if the input already contains an alpha channel (i.e. has shape (H,W,4)) or if there are masked pixels, and QImage.Format_RGB32 otherwise. :param array: image data which should be converted (copied) into a QImage_ :type array: 2D or 3D numpy.ndarray_ or `numpy.ma.array `_ :param normalize: normalization parameter (see above, default: no value changing) :type normalize: bool, scalar, or pair :rtype: QImage_ with RGB32 or ARGB32 format""" if _np.ndim(array) == 2: array = array[...,None] elif _np.ndim(array) != 3: raise ValueError("array2qimage can only convert 2D or 3D arrays (got %d dimensions)" % _np.ndim(array)) if array.shape[2] not in (1, 2, 3, 4): raise ValueError("array2qimage expects the last dimension to contain exactly one (scalar/gray), two (gray+alpha), three (R,G,B), or four (R,G,B,A) channels") h, w, channels = array.shape hasAlpha = _np.ma.is_masked(array) or channels in (2, 4) fmt = _qt.QImage.Format_ARGB32 if hasAlpha else _qt.QImage.Format_RGB32 result = _qt.QImage(w, h, fmt) array = _normalize255(array, normalize) if channels >= 3: rgb_view(result)[:] = array[...,:3] else: rgb_view(result)[:] = array[...,:1] # scalar data alpha = alpha_view(result) if channels in (2, 4): alpha[:] = array[...,-1] else: alpha[:] = 255 if _np.ma.is_masked(array): alpha[:] *= _np.logical_not(_np.any(array.mask, axis = -1)) return result def imread(filename, masked = False): """Convenience function that uses the QImage_ constructor to read an image from the given file and return an `rgb_view` of the result. This is intentionally similar to scipy.ndimage.imread (which uses PIL), scipy.misc.imread, or matplotlib.pyplot.imread (using PIL for non-PNGs). For grayscale images, return 2D array (even if it comes from a 32-bit representation; this is a consequence of the QImage API). For images with an alpha channel, the resulting number of channels will be 2 (grayscale+alpha) or 4 (RGB+alpha). Alternatively, one may pass `masked = True` in order to get `masked arrays`_ back. Note that only fully transparent pixels are masked (and that masked arrays only support binary masks). The value of `masked` is ignored when the loaded image has no alpha channel (i.e., one would not get a masked array in that case). This function has been added in version 1.3. """ qImage = _qt.QImage(filename) isGray = qImage.isGrayscale() if isGray and qImage.depth() == 8: return byte_view(qImage)[...,0] hasAlpha = qImage.hasAlphaChannel() if hasAlpha: targetFormat = _qt.QImage.Format_ARGB32 else: targetFormat = _qt.QImage.Format_RGB32 if qImage.format() != targetFormat: qImage = qImage.convertToFormat(targetFormat) result = rgb_view(qImage) if isGray: result = result[...,0] if hasAlpha: if masked: mask = (alpha_view(qImage) == 0) if _np.ndim(result) == 3: mask = _np.repeat(mask[...,None], 3, axis = 2) result = _np.ma.masked_array(result, mask) else: result = _np.dstack((result, alpha_view(qImage))) return result def imsave(filename, image, normalize = False, format = None, quality = -1): """Convenience function that uses QImage.save to save an image to the given file. This is intentionally similar to scipy.misc.imsave. However, it supports different optional arguments: :param normalize: see :func:`array2qimage` (which is used internally) :param format: image filetype (e.g. 'PNG'), (default: check filename's suffix) :param quality: see QImage.save (0 = small .. 100 = uncompressed, -1 = default compression) :returns: boolean success, see QImage.save This function has been added in version 1.4. """ qImage = array2qimage(image, normalize = normalize) return qImage.save(filename, format, quality) pyspread-1.99.0.1/src/lib/__init__.py0000644000175000017500000000000013551171371017054 0ustar andreasandreaspyspread-1.99.0.1/src/lib/dependencies.py0000644000175000017500000000224713557333324017766 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- def get_enchant_version(): """ :rtype: str or None :return: version number string of pyenchant if it is installed else None .. note:: https://pypi.org/project/pyenchant/ """ try: import enchant except ImportError: return return enchant.__version__ pyspread-1.99.0.1/src/dialogs.py0000644000175000017500000013335013604461462016212 0ustar andreasandreas#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ **Modal dialogs** * :class:`DiscardChangesDialog` * :class:`ApproveWarningDialog` * :class:`DataEntryDialog` * :class:`GridShapeDialog` * :class:`PrintAreaDialog` * :class:`CsvExportAreaDialog` * (:class:`FileDialogBase`) * :class:`FileOpenDialog` * :class:`FileSaveDialog` * :class:`ImageFileOpenDialog` * :class:`CsvFileImportDialog` * :class:`FindDialog` * :class:`ChartDialog` * :class:`CsvImportDialog` * :class:`CsvExportDialog` * (:class:`HelpDialogBase`) * :class:`TutorialDialog` * :class:`ManualDialog` """ import csv from dataclasses import dataclass from functools import partial import io from PyQt5.QtCore import Qt, QPoint, QUrl from PyQt5.QtWidgets import QMessageBox, QFileDialog, QDialog, QLineEdit from PyQt5.QtWidgets import QLabel, QFormLayout, QVBoxLayout, QGroupBox from PyQt5.QtWidgets import QDialogButtonBox, QSplitter, QTextBrowser from PyQt5.QtWidgets import QCheckBox, QGridLayout, QLayout, QHBoxLayout from PyQt5.QtWidgets import QPushButton, QWidget, QComboBox, QTableView from PyQt5.QtWidgets import QAbstractItemView, QPlainTextEdit from PyQt5.QtGui import QIntValidator, QImageWriter, QTextDocument from PyQt5.QtGui import QStandardItemModel, QStandardItem try: from matplotlib.figure import Figure from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg except ImportError: Figure = None from src.actions import ChartDialogActions from src.toolbar import ChartTemplatesToolBar from src.icons import PYSPREAD_PATH from src.lib.spelltextedit import SpellTextEdit from src.lib.testlib import unit_test_dialog_override from src.lib.csv import sniff, csv_reader, get_header, typehandlers, convert from src.settings import TUTORIAL_PATH, MANUAL_PATH MPL_TEMPLATE_PATH = PYSPREAD_PATH / 'share/templates/matplotlib' class DiscardChangesDialog: """Modal dialog that asks if the user wants to discard or save unsaved data The modal dialog is shown on accessing the property choice. """ title = "Unsaved changes" text = "There are unsaved changes.\nDo you want to save?" choices = QMessageBox.Discard | QMessageBox.Cancel | QMessageBox.Save default_choice = QMessageBox.Save def __init__(self, main_window): self.main_window = main_window @property def choice(self): """User choice Returns True if the user confirms in a user dialog that unsaved changes will be discarded if conformed. Returns False if the user chooses to save the unsaved data Returns None if the user chooses to abort the operation """ button_approval = QMessageBox.warning(self.main_window, self.title, self.text, self.choices, self.default_choice) if button_approval == QMessageBox.Discard: return True elif button_approval == QMessageBox.Save: return False class ApproveWarningDialog: """Modal warning dialog for approving files to be evaled The modal dialog is shown on accessing the property choice. """ title = "Security warning" text = ("You are going to approve and trust a file that you have not " "created yourself. After proceeding, the file is executed.\n \n" "It may harm your system as any program can. Please check all " "cells thoroughly before proceeding.\n \n" "Proceed and sign this file as trusted?") choices = QMessageBox.No | QMessageBox.Yes default_choice = QMessageBox.No def __init__(self, parent): self.parent = parent @property def choice(self): """User choice Returns True iif the user approves leaving safe_mode. Returns False iif the user chooses to stay in safe_mode Returns None if the user chooses to abort the operation """ button_approval = QMessageBox.warning(self.parent, self.title, self.text, self.choices, self.default_choice) if button_approval == QMessageBox.Yes: return True elif button_approval == QMessageBox.No: return False class DataEntryDialog(QDialog): """Modal dialog for entering multiple values Parameters ---------- * parent: QWidget \tParent window * title: str \tDialog title * labels: list or tuple of str \tLabels for the values in the dialog * initial_data: list or tuple of str, defaults to None \tInitial values to be displayed in the dialog, must match no. labels * validators: list or tuple of QValidator, defaults to None \tValidators for the editors of the dialog, must match no. labels """ def __init__(self, parent, title, labels, initial_data=None, groupbox_title=None, validators=None): super().__init__(parent) self.labels = labels self.groupbox_title = groupbox_title if initial_data is None: self.initial_data = [""] * len(labels) elif len(initial_data) != len(labels): raise ValueError("Length of labels and initial_data not equal") else: self.initial_data = initial_data if validators is None: self.validators = [None] * len(labels) elif len(validators) != len(labels): raise ValueError("Length of labels and validators not equal") else: self.validators = validators self.editors = [] layout = QVBoxLayout(self) layout.addWidget(self.create_form()) layout.addStretch(1) layout.addWidget(self.create_buttonbox()) self.setLayout(layout) self.setWindowTitle(title) self.setMinimumWidth(300) self.setMinimumHeight(150) @property def data(self): """Executes the dialog and returns a tuple of strings Returns None if the dialog is canceled. """ result = self.exec_() if result == QDialog.Accepted: return tuple(editor.text() for editor in self.editors) def create_form(self): """Returns form inside a QGroupBox""" form_group_box = QGroupBox() if self.groupbox_title: form_group_box.setTitle(self.groupbox_title) form_layout = QFormLayout() for label, initial_value, validator in zip(self.labels, self.initial_data, self.validators): editor = QLineEdit(str(initial_value)) editor.setAlignment(Qt.AlignRight) if validator: editor.setValidator(validator) form_layout.addRow(QLabel(label + " :"), editor) self.editors.append(editor) form_layout.setLabelAlignment(Qt.AlignRight) form_group_box.setLayout(form_layout) return form_group_box def create_buttonbox(self): """Returns a QDialogButtonBox with Ok and Cancel""" button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) button_box.accepted.connect(self.accept) button_box.rejected.connect(self.reject) return button_box class GridShapeDialog(DataEntryDialog): """Modal dialog for entering the number of rows, columns and tables Parameters ---------- * parent: QWidget \tParent window * shape: 3-tuple of Integer \tInitial shape to be displayed in the dialog: (rows, columns, tables) """ def __init__(self, parent, shape, title="Create a new Grid"): groupbox_title = "Grid Shape" labels = ["Number of Rows", "Number of Columns", "Number of Tables"] validator = QIntValidator() validator.setBottom(1) # Do not allow negative values validators = [validator] * len(labels) super().__init__(parent, title, labels, shape, groupbox_title, validators) @property @unit_test_dialog_override def shape(self): """Executes the dialog and returns an int tuple rows, columns, tables Returns None if the dialog is canceled. """ data = self.data if data is not None: try: return tuple(map(int, data)) except (TypeError, ValueError): return class PrintAreaDialog(DataEntryDialog): """Modal dialog for entering print area Initially, this dialog is filled with the selection bounding box if present or with the visible area of <= 1 cell is selected. Parameters ---------- * parent: QWidget \tParent window * shape: 3-tuple of Integer \tInitial shape to be displayed in the dialog: (rows, columns, tables) """ groupbox_title = "Print area" labels = ["Top", "Left", "Bottom", "Right"] def __init__(self, parent, grid, title="Print settings"): self.shape = grid.model.shape row_validator = QIntValidator() row_validator.setBottom(0) # Do not allow negative values row_validator.setTop(self.shape[0] - 1) column_validator = QIntValidator() column_validator.setBottom(0) # Do not allow negative values column_validator.setTop(self.shape[1] - 1) if grid.selection and len(grid.selected_idx) > 1: (bb_top, bb_left), (bb_bottom, bb_right) = \ grid.selection.get_grid_bbox(self.shape) else: bb_top, bb_bottom = grid.rowAt(0), grid.rowAt(grid.height()) bb_left, bb_right = grid.columnAt(0), grid.columnAt(grid.width()) initial_values = bb_top, bb_left, bb_bottom, bb_right validators = [row_validator, column_validator] * 2 super().__init__(parent, title, self.labels, initial_values, self.groupbox_title, validators) @property def area(self): """Executes the dialog and returns int tuple top, left, bottom, right Returns None if the dialog is canceled. """ try: int_data = map(int, self.data) data = (min(self.shape[i % 2], d) for i, d in enumerate(int_data)) except (TypeError, ValueError): return if data is not None: try: return tuple(data) except ValueError: return class CsvExportAreaDialog(PrintAreaDialog): """Modal dialog for entering csv export area""" groupbox_title = "CSV export area" class SvgExportAreaDialog(PrintAreaDialog): """Modal dialog for entering svg export area""" groupbox_title = "SVG export area" class PreferencesDialog(DataEntryDialog): """Modal dialog for entering pyspread preferences""" def __init__(self, parent): title = "Preferences" groupbox_title = "Global settings" labels = ["Signature key for files", "Cell calculation timeout [ms]", "Frozen cell refresh period [ms]", "Number of recent files"] self.keys = ["signature_key", "timeout", "refresh_timeout", "max_file_history"] self.mappers = [str, int, int, int] data = [getattr(parent.settings, key) for key in self.keys] validator = QIntValidator() validator.setBottom(0) # Do not allow negative values validators = [None, validator, validator, validator] super().__init__(parent, title, labels, data, groupbox_title, validators) @property def data(self): """Executes the dialog and returns a dict containing preferences data Returns None if the dialog is canceled. """ data = super().data if data is not None: data_dict = {} for key, mapper, data in zip(self.keys, self.mappers, data): data_dict[key] = mapper(data) return data_dict class CellKeyDialog(DataEntryDialog): """Modal dialog for entering a cell key, i.e. row, column and table Parameters ---------- * parent: QWidget \tParent window * shape: 3-tuple of Integer \tShape of the grid: (rows, columns, tables) """ def __init__(self, parent, shape): title = "Go to cell" groupbox_title = "Cell index" labels = ["Row", "Column", "Table"] row_validator = QIntValidator() row_validator.setRange(0, shape[0] - 1) column_validator = QIntValidator() column_validator.setRange(0, shape[1] - 1) table_validator = QIntValidator() table_validator.setRange(0, shape[2] - 1) validators = [row_validator, column_validator, table_validator] super().__init__(parent, title, labels, None, groupbox_title, validators) @property def key(self): """Executes the dialog and returns an int tuple rows, columns, tables Returns None if the dialog is canceled. """ data = self.data if data is not None: try: return tuple(map(int, data)) except ValueError: return class FileDialogBase: """Base class for modal file dialogs The choosen filename is stored in the file_path attribute The choosen name filter is stored in the chosen_filter attribute If the dialog is aborted then both filepath and chosen_filter are None _get_filepath must be overloaded """ file_path = None suffix = None title = "Choose file" filters_list = [ "Pyspread un-compressed (*.pysu)", "Pyspread compressed (*.pys)" ] selected_filter = None @property def filters(self): """Formatted filters for qt""" return ";;".join(self.filters_list) @property def suffix(self): """Suffix for filepath""" if self.filters_list.index(self.selected_filter): return ".pys" else: return ".pysu" def __init__(self, main_window): self.main_window = main_window self.selected_filter = self.filters_list[0] self.show_dialog() def show_dialog(self): """Sublasses must overload this method""" raise Exception("show_dialog() - Needs method overload") class FileOpenDialog(FileDialogBase): """Modal dialog for opening a pyspread file""" title = "Open" def show_dialog(self): """Present dialog and update values""" path = self.main_window.settings.last_file_input_path self.file_path, self.selected_filter = \ QFileDialog.getOpenFileName(self.main_window, self.title, str(path), self.filters, self.selected_filter) class FileSaveDialog(FileDialogBase): """Modal dialog for saving a pyspread file""" title = "Save" def show_dialog(self): """Present dialog and update values""" path = self.main_window.settings.last_file_output_path self.file_path, self.selected_filter = \ QFileDialog.getSaveFileName(self.main_window, self.title, str(path), self.filters, self.selected_filter) class ImageFileOpenDialog(FileDialogBase): """Modal dialog for inserting an image""" title = "Insert image" img_formats = QImageWriter.supportedImageFormats() img_format_strings = ("*." + fmt.data().decode('utf-8') for fmt in img_formats) img_format_string = " ".join(img_format_strings) name_filter = "Images ({})".format(img_format_string) + ";;" \ "Scalable Vector Graphics (*.svg *.svgz)" def show_dialog(self): """Present dialog and update values""" path = self.main_window.settings.last_file_input_path self.file_path, self.selected_filter = \ QFileDialog.getOpenFileName(self.main_window, self.title, str(path), self.name_filter) class CsvFileImportDialog(FileDialogBase): """Modal dialog for importing csv files""" title = "Import data" filters_list = [ "CSV file (*.*)", ] @property def suffix(self): """Do not offer suffix for filepath""" return def show_dialog(self): """Present dialog and update values""" path = self.main_window.settings.last_file_input_path self.file_path, self.selected_filter = \ QFileDialog.getOpenFileName(self.main_window, self.title, str(path), self.filters, self.filters_list[0]) class CsvFileExportDialog(FileDialogBase): """Modal dialog for exporting csv files""" title = "Export data" filters_list = [ "CSV file (*.*)", "SVG file (*.svg)", ] @property def suffix(self): """Suffix for filepath""" if self.filters_list.index(self.selected_filter): return ".svg" else: return def show_dialog(self): """Present dialog and update values""" path = self.main_window.settings.last_file_output_path self.file_path, self.selected_filter = \ QFileDialog.getSaveFileName(self.main_window, self.title, str(path), self.filters, self.filters_list[0]) @dataclass class FindDialogState: """Dataclass for FindDialog state storage""" pos: QPoint case: bool results: bool more: bool backward: bool word: bool regex: bool start: bool class FindDialog(QDialog): """Find dialog that is launched from the main menu""" def __init__(self, main_window): super().__init__(main_window) self.main_window = main_window workflows = main_window.workflows self._create_widgets() self._layout() self._order() self.setWindowTitle("Find") self.extension.hide() self.more_button.toggled.connect(self.extension.setVisible) self.find_button.clicked.connect( partial(workflows.find_dialog_on_find, self)) # Restore state state = self.main_window.settings.find_dialog_state if state is not None: self.restore(state) def _create_widgets(self): """Create find dialog widgets""" self.search_text_label = QLabel("Search for:") self.search_text_editor = QLineEdit() self.search_text_label.setBuddy(self.search_text_editor) self.case_checkbox = QCheckBox("Match &case") self.results_checkbox = QCheckBox("Code and &results") self.find_button = QPushButton("&Find") self.find_button.setDefault(True) self.more_button = QPushButton("&More") self.more_button.setCheckable(True) self.more_button.setAutoDefault(False) self.extension = QWidget() self.backward_checkbox = QCheckBox("&Backward") self.word_checkbox = QCheckBox("&Whole words") self.regex_checkbox = QCheckBox("Regular e&xpression") self.from_start_checkbox = QCheckBox("From &start") self.button_box = QDialogButtonBox(Qt.Vertical) self.button_box.addButton(self.find_button, QDialogButtonBox.ActionRole) self.button_box.addButton(self.more_button, QDialogButtonBox.ActionRole) def _layout(self): """Find dialog layout""" self.extension_layout = QVBoxLayout() self.extension_layout.setContentsMargins(0, 0, 0, 0) self.extension_layout.addWidget(self.backward_checkbox) self.extension_layout.addWidget(self.word_checkbox) self.extension_layout.addWidget(self.regex_checkbox) self.extension_layout.addWidget(self.from_start_checkbox) self.extension.setLayout(self.extension_layout) self.text_layout = QGridLayout() self.text_layout.addWidget(self.search_text_label, 0, 0) self.text_layout.addWidget(self.search_text_editor, 0, 1) self.text_layout.setColumnStretch(0, 1) self.search_layout = QVBoxLayout() self.search_layout.addLayout(self.text_layout) self.search_layout.addWidget(self.case_checkbox) self.search_layout.addWidget(self.results_checkbox) self.main_layout = QGridLayout() self.main_layout.setSizeConstraint(QLayout.SetFixedSize) self.main_layout.addLayout(self.search_layout, 0, 0) self.main_layout.addWidget(self.button_box, 0, 1) self.main_layout.addWidget(self.extension, 1, 0, 1, 2) self.main_layout.setRowStretch(2, 1) self.setLayout(self.main_layout) def _order(self): """Find dialog tabOrder""" self.setTabOrder(self.results_checkbox, self.backward_checkbox) self.setTabOrder(self.backward_checkbox, self.word_checkbox) self.setTabOrder(self.word_checkbox, self.regex_checkbox) self.setTabOrder(self.regex_checkbox, self.from_start_checkbox) def restore(self, state): """Restores state from FindDialogState""" self.move(state.pos) self.case_checkbox.setChecked(state.case) self.results_checkbox.setChecked(state.results) self.more_button.setChecked(state.more) self.backward_checkbox.setChecked(state.backward) self.word_checkbox.setChecked(state.word) self.regex_checkbox.setChecked(state.regex) self.from_start_checkbox.setChecked(state.start) # Overrides def closeEvent(self, event): """Store state for next invocation and close""" state = FindDialogState(pos=self.pos(), case=self.case_checkbox.isChecked(), results=self.results_checkbox.isChecked(), more=self.more_button.isChecked(), backward=self.backward_checkbox.isChecked(), word=self.word_checkbox.isChecked(), regex=self.regex_checkbox.isChecked(), start=self.from_start_checkbox.isChecked()) self.main_window.settings.find_dialog_state = state super().closeEvent(event) class ReplaceDialog(FindDialog): """Replace dialog that is launched from the main menu""" def __init__(self, main_window): super().__init__(main_window) workflows = main_window.workflows self.setWindowTitle("Replace") self.replace_text_label = QLabel("Replace with:") self.replace_text_editor = QLineEdit() self.replace_text_label.setBuddy(self.replace_text_editor) self.text_layout.addWidget(self.replace_text_label, 1, 0) self.text_layout.addWidget(self.replace_text_editor, 1, 1) self.replace_button = QPushButton("&Replace") self.replace_all_button = QPushButton("Replace &all") self.button_box.addButton(self.replace_button, QDialogButtonBox.ActionRole) self.button_box.addButton(self.replace_all_button, QDialogButtonBox.ActionRole) self.setTabOrder(self.search_text_editor, self.replace_text_editor) self.setTabOrder(self.more_button, self.replace_button) self.replace_button.clicked.connect( partial(workflows.replace_dialog_on_replace, self)) self.replace_all_button.clicked.connect( partial(workflows.replace_dialog_on_replace_all, self)) class ChartDialog(QDialog): """The chart dialog""" def __init__(self, parent): if Figure is None: raise ModuleNotFoundError super().__init__(parent) self.actions = ChartDialogActions(self) self.chart_templates_toolbar = ChartTemplatesToolBar(self) self.setWindowTitle("Chart dialog") self.setModal(True) self.resize(800, 600) self.parent = parent self.actions = ChartDialogActions(self) self.dialog_ui() def on_template(self): """Event handler for pressing a template toolbar button""" chart_template_name = self.sender().data() chart_template_path = MPL_TEMPLATE_PATH / chart_template_name try: with open(chart_template_path) as template_file: chart_template_code = template_file.read() except OSError: return self.editor.insertPlainText(chart_template_code) def dialog_ui(self): """Sets up dialog UI""" msg = "Enter Python code into the editor to the left. Globals " + \ "such as X, Y, Z, S are available as they are in the grid. " + \ "The last line must result in a matplotlib figure.\n \n" + \ "Pressing Apply displays the figure or an error message in " + \ "the right area." self.message = QTextBrowser(self) self.message.setText(msg) self.editor = SpellTextEdit(self) self.splitter = QSplitter(self) buttonbox = self.create_buttonbox() self.splitter.addWidget(self.editor) self.splitter.addWidget(self.message) self.splitter.setOpaqueResize(False) self.splitter.setSizes([9999, 9999]) # Layout layout = QVBoxLayout(self) layout.addWidget(self.chart_templates_toolbar) layout.addWidget(self.splitter) layout.addWidget(buttonbox) self.setLayout(layout) def apply(self): """Executes the code in the dialog and updates the canvas""" # Get current cell key = self.parent.grid.current code = self.editor.toPlainText() figure = self.parent.grid.model.code_array._eval_cell(key, code) if isinstance(figure, Figure): canvas = FigureCanvasQTAgg(figure) self.splitter.replaceWidget(1, canvas) canvas.draw() else: if isinstance(figure, Exception): self.message.setText("Error:\n{}".format(figure)) else: msg_text = "Error:\n{} has type '{}', " + \ "which is no instance of {}." msg = msg_text.format(figure, type(figure).__name__, Figure) self.message.setText(msg) self.splitter.replaceWidget(1, self.message) def create_buttonbox(self): """Returns a QDialogButtonBox with Ok and Cancel""" button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Apply | QDialogButtonBox.Cancel) button_box.accepted.connect(self.accept) button_box.rejected.connect(self.reject) button_box.button(QDialogButtonBox.Apply).clicked.connect(self.apply) return button_box class CsvParameterGroupBox(QGroupBox): """QGroupBox that holds parameter widgets for the csv import dialog""" title = "Parameters" encodings = ( "ascii", "big5", "big5hkscs", "cp037", "cp424", "cp437", "cp500", "cp720", "cp737", "cp775", "cp850", "cp852", "cp855", "cp856", "cp857", "cp858", "cp860", "cp861", "cp862", "cp863", "cp864", "cp865", "cp866", "cp869", "cp874", "cp875", "cp932", "cp949", "cp950", "cp1006", "cp1026", "cp1140", "cp1250", "cp1251", "cp1252", "cp1253", "cp1254", "cp1255", "cp1256", "cp1257", "cp1258", "euc-jp", "euc-jis-2004", "euc-jisx0213", "euc-kr", "gb2312", "gbk", "gb18030", "hz", "iso2022-jp", "iso2022-jp-1", "iso2022-jp-2", "iso2022-jp-2004", "iso2022-jp-3", "iso2022-jp-ext", "iso2022-kr", "latin-1", "iso8859-2", "iso8859-3", "iso8859-4", "iso8859-5", "iso8859-6", "iso8859-7", "iso8859-8", "iso8859-9", "iso8859-10", "iso8859-13", "iso8859-14", "iso8859-15", "iso8859-16", "johab", "koi8-r", "koi8-u", "mac-cyrillic", "mac-greek", "mac-iceland", "mac-latin2", "mac-roman", "mac-turkish", "ptcp154", "shift-jis", "shift-jis-2004", "shift-jisx0213", "utf-32", "utf-32-be", "utf-32-le", "utf-16", "utf-16-be", "utf-16-le", "utf-7", "utf-8", "utf-8-sig", ) quotings = "QUOTE_ALL", "QUOTE_MINIMAL", "QUOTE_NONNUMERIC", "QUOTE_NONE" # Tooltips encoding_widget_tooltip = "CSV file encoding" quoting_widget_tooltip = \ "Controls when quotes should be generated by the writer and " \ "recognised by the reader." quotechar_tooltip = \ "A one-character string used to quote fields containing special " \ "characters, such as the delimiter or quotechar, or which contain " \ "new-line characters." delimiter_tooltip = "A one-character string used to separate fields." escapechar_tooltip = "A one-character string used by the writer to " \ "escape the delimiter if quoting is set to QUOTE_NONE and the " \ "quotechar if doublequote is False. On reading, the escapechar " \ "removes any special meaning from the following character." hasheader_tooltip = \ "Analyze the CSV file and treat the first row as strings if it " \ "appears to be a series of column headers." doublequote_tooltip = \ "Controls how instances of quotechar appearing inside a field " \ "should be themselves be quoted. When True, the character is " \ "doubled. When False, the escapechar is used as a prefix to the " \ "quotechar." skipinitialspace_tooltip = "When True, whitespace immediately following " \ "the delimiter is ignored." # Default values that are displayed if the sniffer fails default_encoding = "utf-8" default_quoting = "QUOTE_MINIMAL" default_quotechar = '"' default_delimiter = ',' def __init__(self, parent): super().__init__(parent) self.parent = parent self.setTitle(self.title) self._create_widgets() self._layout() def _create_widgets(self): """Create widgets for all parameters""" # Encoding self.encoding_label = QLabel("Encoding") self.encoding_widget = QComboBox(self.parent) self.encoding_widget.addItems(self.encodings) if self.default_encoding in self.encodings: default_encoding_idx = self.encodings.index(self.default_encoding) self.encoding_widget.setCurrentIndex(default_encoding_idx) self.encoding_widget.setEditable(False) self.encoding_widget.setToolTip(self.encoding_widget_tooltip) # Quote character self.quotechar_label = QLabel("Quote character") self.quotechar_widget = QLineEdit(self.default_quotechar, self.parent) self.quotechar_widget.setMaxLength(1) self.quotechar_widget.setToolTip(self.quotechar_tooltip) # Delimiter self.delimiter_label = QLabel("Quote character") self.delimiter_widget = QLineEdit(self.default_delimiter, self.parent) self.delimiter_widget.setMaxLength(1) self.delimiter_widget.setToolTip(self.delimiter_tooltip) # Escape character self.escapechar_label = QLabel("Escape character") self.escapechar_widget = QLineEdit(self.parent) self.escapechar_widget.setMaxLength(1) self.escapechar_widget.setToolTip(self.escapechar_tooltip) # Quote style self.quoting_label = QLabel("Quote style") self.quoting_widget = QComboBox(self.parent) self.quoting_widget.addItems(self.quotings) if self.default_quoting in self.quotings: default_quoting_idx = self.quotings.index(self.default_quoting) self.quoting_widget.setCurrentIndex(default_quoting_idx) self.quoting_widget.setEditable(False) self.quoting_widget.setToolTip(self.quoting_widget_tooltip) # Header present self.hasheader_label = QLabel("Header present") self.hasheader_widget = QCheckBox(self.parent) self.hasheader_widget.setToolTip(self.hasheader_tooltip) # Double quote self.doublequote_label = QLabel("Doublequote") self.doublequote_widget = QCheckBox(self.parent) self.doublequote_widget.setToolTip(self.doublequote_tooltip) # Skip initial space self.skipinitialspace_label = QLabel("Skip initial space") self.skipinitialspace_widget = QCheckBox(self.parent) self.skipinitialspace_widget.setToolTip(self.skipinitialspace_tooltip) # Mapping to csv dialect self.csv_parameter2widget = { "encoding": self.encoding_widget, # Extra dialect attribute "quotechar": self.quotechar_widget, "delimiter": self.delimiter_widget, "escapechar": self.escapechar_widget, "quoting": self.quoting_widget, "hasheader": self.hasheader_widget, # Extra dialect attribute "doublequote": self.doublequote_widget, "skipinitialspace": self.skipinitialspace_widget, } def _layout(self): """Layout widgets""" hbox_layout = QHBoxLayout() left_form_layout = QFormLayout() right_form_layout = QFormLayout() hbox_layout.addLayout(left_form_layout) hbox_layout.addSpacing(20) hbox_layout.addLayout(right_form_layout) left_form_layout.setLabelAlignment(Qt.AlignRight) right_form_layout.setLabelAlignment(Qt.AlignRight) left_form_layout.addRow(self.encoding_label, self.encoding_widget) left_form_layout.addRow(self.quotechar_label, self.quotechar_widget) left_form_layout.addRow(self.delimiter_label, self.delimiter_widget) left_form_layout.addRow(self.escapechar_label, self.escapechar_widget) right_form_layout.addRow(self.quoting_label, self.quoting_widget) right_form_layout.addRow(self.hasheader_label, self.hasheader_widget) right_form_layout.addRow(self.doublequote_label, self.doublequote_widget) right_form_layout.addRow(self.skipinitialspace_label, self.skipinitialspace_widget) self.setLayout(hbox_layout) def adjust_csvdialect(self, dialect): """Adjusts csv dialect from widget settings Note that the dialect has two extra attributes encoding and hasheader """ for parameter in self.csv_parameter2widget: widget = self.csv_parameter2widget[parameter] if hasattr(widget, "currentText"): value = widget.currentText() elif hasattr(widget, "isChecked"): value = widget.isChecked() elif hasattr(widget, "text"): value = widget.text() else: raise AttributeError("{} unsupported".format(widget)) # Convert strings to csv constants if parameter == "quoting" and isinstance(value, str): value = getattr(csv, value) setattr(dialect, parameter, value) return dialect def set_csvdialect(self, dialect): """Update widgets from given csv dialect""" for parameter in self.csv_parameter2widget: try: value = getattr(dialect, parameter) except AttributeError: value = None if value is not None: widget = self.csv_parameter2widget[parameter] if hasattr(widget, "setCurrentText"): try: widget.setCurrentText(value) except TypeError: try: widget.setCurrentIndex(value) except TypeError: pass elif hasattr(widget, "setChecked"): widget.setChecked(bool(value)) elif hasattr(widget, "setText"): widget.setText(value) else: raise AttributeError("{} unsupported".format(widget)) class CsvTable(QTableView): """Table for previewing csv file content""" no_rows = 9 def __init__(self, parent): super().__init__(parent) self.comboboxes = [] self.model = QStandardItemModel(self) self.setModel(self.model) self.setEditTriggers(QAbstractItemView.NoEditTriggers) self.verticalHeader().hide() def add_choice_row(self, length): """Adds row with comboboxes for digest choice""" class TypeCombo(QComboBox): def __init__(self): super().__init__() for typehandler in typehandlers: self.addItem(typehandler) item_row = map(QStandardItem, [''] * length) self.comboboxes = [TypeCombo() for _ in range(length)] self.model.appendRow(item_row) for i, combobox in enumerate(self.comboboxes): self.setIndexWidget(self.model.index(0, i), combobox) def fill(self, filepath, dialect, digest_types=None): """Fills the csv table with values from the csv file""" self.model.clear() self.verticalHeader().hide() try: with open(filepath, newline='') as csvfile: if hasattr(dialect, 'hasheader') and dialect.hasheader: header = get_header(csvfile, dialect) self.model.setHorizontalHeaderLabels(header) self.horizontalHeader().show() else: self.horizontalHeader().hide() for i, row in enumerate(csv_reader(csvfile, dialect, digest_types)): if i >= self.no_rows: break elif i == 0: self.add_choice_row(len(row)) if digest_types is None: item_row = map(QStandardItem, map(str, row)) else: codes = (convert(ele, t) for ele, t in zip(row, digest_types)) item_row = map(QStandardItem, codes) self.model.appendRow(item_row) except OSError: return def get_digest_types(self): """Returns list of digest types from comboboxes""" return [cbox.currentText() for cbox in self.comboboxes] def update_comboboxes(self, digest_types): """Updates the cono boxes to show digest_types""" for combobox, digest_type in zip(self.comboboxes, digest_types): combobox.setCurrentText(digest_type) class CsvImportDialog(QDialog): """Modal dialog for importing csv files :filepath: pathlib.Path to csv file """ title = "CSV import" def __init__(self, parent, filepath): super().__init__(parent) self.parent = parent self.filepath = filepath self.sniff_size = parent.settings.sniff_size self.setWindowTitle(self.title) self.parameter_groupbox = CsvParameterGroupBox(self) self.csv_table = CsvTable(self) layout = QVBoxLayout(self) layout.addWidget(self.parameter_groupbox) layout.addWidget(self.csv_table) layout.addWidget(self.create_buttonbox()) self.setLayout(layout) self.reset() def create_buttonbox(self): """Returns a QDialogButtonBox""" button_box = QDialogButtonBox(QDialogButtonBox.Reset | QDialogButtonBox.Apply | QDialogButtonBox.Ok | QDialogButtonBox.Cancel) button_box.accepted.connect(self.accept) button_box.rejected.connect(self.reject) button_box.button(QDialogButtonBox.Reset).clicked.connect(self.reset) button_box.button(QDialogButtonBox.Apply).clicked.connect(self.apply) return button_box # Button event handlers def reset(self): """Button event handler, resets parameter_groupbox and csv_table""" try: dialect = sniff(self.filepath, self.sniff_size) except OSError as error: self.parent.statusBar().showMessage(str(error)) return self.parameter_groupbox.set_csvdialect(dialect) self.csv_table.fill(self.filepath, dialect) def apply(self): """Button event handler, applies parameters to csv_table""" try: sniff_dialect = sniff(self.filepath, self.sniff_size) except OSError as error: self.parent.statusBar().showMessage(str(error)) return try: dialect = self.parameter_groupbox.adjust_csvdialect(sniff_dialect) except AttributeError as error: self.parent.statusBar().showMessage(str(error)) return digest_types = self.csv_table.get_digest_types() self.csv_table.fill(self.filepath, dialect, digest_types) self.csv_table.update_comboboxes(digest_types) def accept(self): """Button event handler, starts csv import""" sniff_dialect = sniff(self.filepath, self.sniff_size) try: dialect = self.parameter_groupbox.adjust_csvdialect(sniff_dialect) except AttributeError as error: self.parent.statusBar().showMessage(str(error)) self.reject() return digest_types = self.csv_table.get_digest_types() self.dialect = dialect self.digest_types = digest_types super().accept() class CsvExportDialog(QDialog): """Modal dialog for exporting csv files :filepath: pathlib.Path to csv file """ title = "CSV export" maxrows = 10 def __init__(self, parent, csv_area): super().__init__(parent) self.parent = parent self.csv_area = csv_area self.dialect = self.default_dialect self.setWindowTitle(self.title) self.parameter_groupbox = CsvParameterGroupBox(self) self.csv_preview = QPlainTextEdit(self) self.csv_preview.setReadOnly(True) layout = QVBoxLayout(self) layout.addWidget(self.parameter_groupbox) layout.addWidget(self.csv_preview) layout.addWidget(self.create_buttonbox()) self.setLayout(layout) self.reset() @property def default_dialect(self): """Default dialect for export based on excel-tab""" dialect = csv.excel dialect.encoding = "utf-8" dialect.hasheader = False return dialect def reset(self): """Button event handler, resets parameter_groupbox and csv_preview""" self.parameter_groupbox.set_csvdialect(self.default_dialect) self.csv_preview.clear() def apply(self): """Button event handler, applies parameters to csv_preview""" top, left, bottom, right = self.csv_area table = self.parent.grid.table bottom = min(bottom-top, self.maxrows-1) + top code_array = self.parent.grid.model.code_array csv_data = code_array[top: bottom + 1, left: right + 1, table] adjust_csvdialect = self.parameter_groupbox.adjust_csvdialect dialect = adjust_csvdialect(self.default_dialect) str_io = io.StringIO() writer = csv.writer(str_io, dialect=dialect) writer.writerows(csv_data) self.csv_preview.setPlainText(str_io.getvalue()) def accept(self): """Button event handler, starts csv import""" adjust_csvdialect = self.parameter_groupbox.adjust_csvdialect self.dialect = adjust_csvdialect(self.default_dialect) super().accept() def create_buttonbox(self): """Returns a QDialogButtonBox""" button_box = QDialogButtonBox(QDialogButtonBox.Reset | QDialogButtonBox.Apply | QDialogButtonBox.Ok | QDialogButtonBox.Cancel) button_box.accepted.connect(self.accept) button_box.rejected.connect(self.reject) button_box.button(QDialogButtonBox.Reset).clicked.connect(self.reset) button_box.button(QDialogButtonBox.Apply).clicked.connect(self.apply) return button_box class HelpDialogBase(QDialog): """Dialog for browsing HTML help files""" def __init__(self, parent): super().__init__(parent) browser = QTextBrowser(self) url = QUrl(str(self.path)) browser.setSource(url) browser.document().setMetaInformation(QTextDocument.DocumentUrl, self.baseurl) paths = browser.searchPaths() paths.append(str(self.baseurl)) browser.setSearchPaths(paths) layout = QHBoxLayout() layout.addWidget(browser) self.setLayout(layout) # browser.document().setTextWidth(browser.viewport().size().width()) # docSize = browser.document().size().toSize() browser.setMinimumWidth(900) browser.setMinimumHeight(600) class TutorialDialog(HelpDialogBase): """Dialog for browsing the pyspread manual""" path = TUTORIAL_PATH baseurl = str(path.parent) + '/' class ManualDialog(HelpDialogBase): """Dialog for browsing the pyspread manual""" path = MANUAL_PATH baseurl = str(path.parent) + '/' pyspread-1.99.0.1/src/model/0000755000175000017500000000000013604465725015317 5ustar andreasandreaspyspread-1.99.0.1/src/model/test/0000755000175000017500000000000013604465725016276 5ustar andreasandreaspyspread-1.99.0.1/src/model/test/test_model.py0000644000175000017500000004061713570427023021006 0ustar andreasandreas#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ test_model ========== Unit tests for model.py """ from builtins import zip from builtins import map from builtins import str from builtins import range from builtins import object import fractions # Yes, it is required import math # Yes, it is required import py.test as pytest import numpy from src.model.model import KeyValueStore, CellAttributes, DictGrid from src.model.model import DataArray, CodeArray from src.lib.selection import Selection class Settings: """Simulates settings class""" timeout = 1000 class TestKeyValueStore(object): """Unit tests for KeyValueStore""" def setup_method(self, method): """Creates empty KeyValueStore""" self.k_v_store = KeyValueStore() def test_missing(self): """Test if missing value returns None""" key = (1, 2, 3) assert self.k_v_store[key] is None self.k_v_store[key] = 7 assert self.k_v_store[key] == 7 class TestCellAttributes(object): """Unit tests for CellAttributes""" def setup_method(self, method): """Creates empty CellAttributes""" self.cell_attr = CellAttributes() def test_append(self): """Test append""" selection = Selection([], [], [], [], [(23, 12)]) table = 0 attr = {"angle": 0.2} self.cell_attr.append((selection, table, attr)) # Check if 1 item - the actual action has been added assert not self.cell_attr._attr_cache def test_getitem(self): """Test __getitem__""" selection_1 = Selection([(2, 2)], [(4, 5)], [55], [55, 66], [(34, 56)]) selection_2 = Selection([], [], [], [], [(32, 53), (34, 56)]) self.cell_attr.append((selection_1, 0, {"testattr": 3})) self.cell_attr.append((selection_2, 0, {"testattr": 2})) assert self.cell_attr[32, 53, 0]["testattr"] == 2 assert self.cell_attr[2, 2, 0]["testattr"] == 3 def test_get_merging_cell(self): """Test get_merging_cell""" selection_1 = Selection([(2, 2)], [(5, 5)], [], [], []) selection_2 = Selection([(3, 2)], [(9, 9)], [], [], []) selection_3 = Selection([(2, 2)], [(9, 9)], [], [], []) self.cell_attr.append((selection_1, 0, {"merge_area": (2, 2, 5, 5)})) self.cell_attr.append((selection_2, 0, {"merge_area": (3, 2, 9, 9)})) self.cell_attr.append((selection_3, 1, {"merge_area": (2, 2, 9, 9)})) # Cell 1. 1, 0 is not merged assert self.cell_attr.get_merging_cell((1, 1, 0)) is None # Cell 3. 3, 0 is merged to cell 3, 2, 0 assert self.cell_attr.get_merging_cell((3, 3, 0)) == (2, 2, 0) # Cell 2. 2, 0 is merged to cell 2, 2, 0 assert self.cell_attr.get_merging_cell((2, 2, 0)) == (2, 2, 0) class TestDictGrid(object): """Unit tests for DictGrid""" def setup_method(self, method): """Creates empty DictGrid""" self.dict_grid = DictGrid((100, 100, 100)) def test_getitem(self): """Unit test for __getitem__""" with pytest.raises(IndexError): self.dict_grid[100, 0, 0] self.dict_grid[(2, 4, 5)] = "Test" assert self.dict_grid[(2, 4, 5)] == "Test" class TestDataArray(object): """Unit tests for DataArray""" def setup_method(self, method): """Creates empty DataArray""" self.data_array = DataArray((100, 100, 100), Settings()) def test_iter(self): """Unit test for __iter__""" assert list(iter(self.data_array)) == [] self.data_array[(1, 2, 3)] = "12" self.data_array[(1, 2, 4)] = "13" assert sorted(list(iter(self.data_array))) == [(1, 2, 3), (1, 2, 4)] def test_keys(self): """Unit test for keys""" assert list(self.data_array.keys()) == [] self.data_array[(1, 2, 3)] = "12" self.data_array[(1, 2, 4)] = "13" assert sorted(self.data_array.keys()) == [(1, 2, 3), (1, 2, 4)] def test_pop(self): """Unit test for pop""" self.data_array[(1, 2, 3)] = "12" self.data_array[(1, 2, 4)] = "13" assert "12" == self.data_array.pop((1, 2, 3)) assert sorted(self.data_array.keys()) == [(1, 2, 4)] def test_get_shape(self): """Unit test for _get_shape""" assert self.data_array.shape == (100, 100, 100) def test_set_shape(self): """Unit test for _set_shape""" self.data_array.shape = (10000, 100, 100) assert self.data_array.shape == (10000, 100, 100) param_get_last_filled_cell = [ ({(0, 0, 0): "2"}, 0, (0, 0)), ({(2, 0, 2): "2"}, 0, (0, 0)), ({(2, 0, 2): "2"}, None, (2, 0)), ({(2, 0, 2): "2"}, 2, (2, 0)), ({(32, 30, 0): "432"}, 0, (32, 30)), ] @pytest.mark.parametrize("content,table,res", param_get_last_filled_cell) def test_get_last_filled_cell(self, content, table, res): """Unit test for get_last_filled_cellet_end""" for key in content: self.data_array[key] = content[key] assert self.data_array.get_last_filled_cell(table)[:2] == res def test_getstate(self): """Unit test for __getstate__ (pickle support)""" assert "dict_grid" in self.data_array.__getstate__() def test_slicing(self): """Unit test for __getitem__ and __setitem__""" self.data_array[0, 0, 0] = "'Test'" self.data_array[0, 0, 0] = "'Tes'" assert self.data_array[0, 0, 0] == "'Tes'" def test_cell_array_generator(self): """Unit test for cell_array_generator""" cell_array = self.data_array[:5, 0, 0] assert list(cell_array) == [None] * 5 cell_array = self.data_array[:5, :5, 0] assert [list(c) for c in cell_array] == [[None] * 5] * 5 cell_array = self.data_array[:5, :5, :5] assert [[list(e) for e in c] for c in cell_array] == \ [[[None] * 5] * 5] * 5 def test_set_cell_attributes(self): """Unit test for _set_cell_attributes""" cell_attributes = ["Test"] self.data_array.cell_attributes[:] = cell_attributes assert self.data_array.cell_attributes == cell_attributes param_adjust_cell_attributes = [ (0, 5, 0, (4, 3, 0), (9, 3, 0)), (34, 5, 0, (4, 3, 0), (4, 3, 0)), (0, 0, 0, (4, 3, 0), (4, 3, 0)), (1, 5, 1, (4, 3, 0), (4, 8, 0)), (1, 5, 1, (4, 3, 1), (4, 8, 1)), (0, -1, 2, (4, 3, 1), None), (0, -1, 2, (4, 3, 2), (4, 3, 1)), ] @pytest.mark.parametrize("inspoint, noins, axis, src, target", param_adjust_cell_attributes) def test_adjust_cell_attributes(self, inspoint, noins, axis, src, target): """Unit test for _adjust_cell_attributes""" row, col, tab = src val = {"angle": 0.2} attrs = [(Selection([], [], [], [], [(row, col)]), tab, val)] self.data_array.cell_attributes[:] = attrs self.data_array._adjust_cell_attributes(inspoint, noins, axis) if target is None: for key in val: # Should be at default value cell_attributes = self.data_array.cell_attributes default_ca = cell_attributes.default_cell_attributes[key] assert cell_attributes[src][key] == default_ca else: for key in val: assert self.data_array.cell_attributes[target][key] == val[key] param_test_insert = [ ({(2, 3, 0): "42"}, 1, 1, 0, None, {(2, 3, 0): None, (3, 3, 0): "42"}), ({(0, 0, 0): "0", (0, 0, 2): "2"}, 1, 1, 2, None, {(0, 0, 3): "2", (0, 0, 4): None}), ] @pytest.mark.parametrize("data, inspoint, notoins, axis, tab, res", param_test_insert) def test_insert(self, data, inspoint, notoins, axis, tab, res): """Unit test for insert operation""" self.data_array.dict_grid.update(data) self.data_array.insert(inspoint, notoins, axis, tab) for key in res: assert self.data_array[key] == res[key] param_test_delete = [ ({(2, 3, 4): "42"}, 1, 1, 0, None, {(1, 3, 4): "42"}), ({(0, 0, 0): "1"}, 0, 1, 0, 0, {(0, 0, 0): None}), ({(0, 0, 1): "1"}, 0, 1, 2, None, {(0, 0, 0): "1"}), ({(3, 3, 2): "3"}, 0, 2, 2, None, {(3, 3, 0): "3"}), ({(4, 2, 1): "3"}, 2, 1, 1, 1, {(4, 2, 1): None}), ({(10, 0, 0): "1"}, 0, 10, 0, 0, {(0, 0, 0): "1"}), ] @pytest.mark.parametrize("data, delpoint, notodel, axis, tab, res", param_test_delete) def test_delete(self, data, delpoint, notodel, axis, tab, res): """Tests delete operation""" self.data_array.dict_grid.update(data) self.data_array.delete(delpoint, notodel, axis, tab) for key in res: assert self.data_array[key] == res[key] def test_delete_error(self): """Tests delete operation error""" self.data_array[2, 3, 4] = "42" try: self.data_array.delete(1, 1000, 0) assert False except ValueError: pass def test_set_row_height(self): """Unit test for set_row_height""" self.data_array.set_row_height(7, 1, 22.345) assert self.data_array.row_heights[7, 1] == 22.345 def test_set_col_width(self): """Unit test for set_col_width""" self.data_array.set_col_width(7, 1, 22.345) assert self.data_array.col_widths[7, 1] == 22.345 class TestCodeArray(object): """Unit tests for CodeArray""" def setup_method(self, method): """Creates empty DataArray""" self.code_array = CodeArray((100, 10, 3), Settings()) param_test_setitem = [ ({(2, 3, 2): "42"}, {(1, 3, 2): "42"}, {(1, 3, 2): "42", (2, 3, 2): "42"}), ] @pytest.mark.parametrize("data, items, res_data", param_test_setitem) def test_setitem(self, data, items, res_data): """Unit test for __setitem__""" self.code_array.dict_grid.update(data) for key in items: self.code_array[key] = items[key] for key in res_data: assert res_data[key] == self.code_array(key) def test_slicing(self): """Unit test for __getitem__ and __setitem__""" # Test for item getting, slicing, basic evaluation correctness shape = self.code_array.shape x_list = [0, shape[0]-1] y_list = [0, shape[1]-1] z_list = [0, shape[2]-1] for x, y, z in zip(x_list, y_list, z_list): assert self.code_array[x, y, z] is None self.code_array[:x, :y, :z] self.code_array[:x:2, :y:2, :z:-1] get_shape = numpy.array(self.code_array[:, :, :]).shape orig_shape = self.code_array.shape assert get_shape == orig_shape gridsize = 100 filled_grid = CodeArray((gridsize, 10, 1), Settings()) for i in [-2**99, 2**99, 0]: for j in range(gridsize): filled_grid[j, 0, 0] = str(i) filled_grid[j, 1, 0] = str(i) + '+' + str(j) filled_grid[j, 2, 0] = str(i) + '*' + str(j) for j in range(gridsize): assert filled_grid[j, 0, 0] == i assert filled_grid[j, 1, 0] == i + j assert filled_grid[j, 2, 0] == i * j for j, funcname in enumerate(['int', 'math.ceil', 'fractions.Fraction']): filled_grid[0, 0, 0] = "fractions = __import__('fractions')" filled_grid[0, 0, 0] filled_grid[1, 0, 0] = "math = __import__('math')" filled_grid[1, 0, 0] filled_grid[j, 3, 0] = funcname + ' (' + str(i) + ')' assert filled_grid[j, 3, 0] == eval(funcname + "(" + "i" + ")") # Test X, Y, Z for i in range(10): self.code_array[i, 0, 0] = str(i) assert [self.code_array((i, 0, 0)) for i in range(10)] == \ list(map(str, range(10))) assert [self.code_array[i, 0, 0] for i in range(10)] == list(range(10)) # Test cycle detection filled_grid[0, 0, 0] = "numpy.arange(0, 10, 0.1)" filled_grid[1, 0, 0] = "sum(S[0,0,0])" assert filled_grid[1, 0, 0] == sum(numpy.arange(0, 10, 0.1)) def test_make_nested_list(self): """Unit test for _make_nested_list""" def gen(): """Nested generator""" yield (("Test" for _ in range(2)) for _ in range(2)) res = self.code_array._make_nested_list(gen()) assert res == [[["Test" for _ in range(2)] for _ in range(2)]] data_eval_cell = [ ((0, 0, 0), "2 + 4", 6), ((1, 0, 0), "S[0, 0, 0]", None), ((43, 2, 1), "X, Y, Z", (43, 2, 1)), ] @pytest.mark.parametrize("key, code, res", data_eval_cell) def test_eval_cell(self, key, code, res): """Unit test for _eval_cell""" self.code_array[key] = code assert self.code_array._eval_cell(key, code) == res def test_execute_macros(self): """Unit test for execute_macros""" self.code_array.macros = "a = 5\ndef f(x): return x ** 2" self.code_array.execute_macros() assert self.code_array._eval_cell((0, 0, 0), "a") == 5 assert self.code_array._eval_cell((0, 0, 0), "f(2)") == 4 def test_sorted_keys(self): """Unit test for _sorted_keys""" code_array = self.code_array keys = [(1, 0, 0), (2, 0, 0), (0, 1, 0), (0, 99, 0), (0, 0, 0), (0, 0, 99), (1, 2, 3)] sorted_keys = [(0, 1, 0), (0, 99, 0), (1, 2, 3), (0, 0, 99), (0, 0, 0), (1, 0, 0), (2, 0, 0)] rev_sorted_keys = [(0, 1, 0), (2, 0, 0), (1, 0, 0), (0, 0, 0), (0, 0, 99), (1, 2, 3), (0, 99, 0)] sort_gen = code_array._sorted_keys(keys, (0, 1, 0)) for result, expected_result in zip(sort_gen, sorted_keys): assert result == expected_result rev_sort_gen = code_array._sorted_keys(keys, (0, 3, 0), reverse=True) for result, expected_result in zip(rev_sort_gen, rev_sorted_keys): assert result == expected_result def test_string_match(self): """Tests creation of string_match""" code_array = self.code_array test_strings = [ "", "Hello", " Hello", "Hello ", " Hello ", "Hello\n", "THelloT", " HelloT", "THello ", "hello", "HELLO", "sd" ] search_string = "Hello" # Normal search flags = False, False, False results = [None, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, None] for test_string, result in zip(test_strings, results): res = code_array.string_match(test_string, search_string, *flags) assert res == result # Case sensitive flags = False, True, False results = [None, 0, 1, 0, 1, 0, 1, 1, 1, None, None, None] for test_string, result in zip(test_strings, results): res = code_array.string_match(test_string, search_string, *flags) assert res == result # Word search flags = True, False, False results = [None, 0, 1, 0, 1, 0, None, None, None, 0, 0, None] for test_string, result in zip(test_strings, results): res = code_array.string_match(test_string, search_string, *flags) assert res == result def test_findnextmatch(self): """Find method test""" code_array = self.code_array for i in range(100): code_array[i, 0, 0] = str(i) assert code_array[3, 0, 0] == 3 assert code_array.findnextmatch((0, 0, 0), "3", False) == (3, 0, 0) assert code_array.findnextmatch((0, 0, 0), "99", True) == (99, 0, 0) pyspread-1.99.0.1/src/model/test/__init__.py0000644000175000017500000000000013551171371020365 0ustar andreasandreaspyspread-1.99.0.1/src/model/__init__.py0000644000175000017500000000000013551171371017406 0ustar andreasandreaspyspread-1.99.0.1/src/model/model.py0000644000175000017500000012675113604120166016770 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ The model contains the core data structures of pyspread and is divided into the following layers. - Layer 3: :class:`CodeArray` - Layer 2: :class:`DataArray` - Layer 1: :class:`DictGrid` - Layer 0: :class:`KeyValueStore` """ from __future__ import absolute_import from builtins import filter from builtins import str from builtins import zip from builtins import range from builtins import object import ast import base64 import bz2 from copy import copy import datetime from inspect import isgenerator from itertools import product import re import sys import numpy from PyQt5.QtGui import QImage, QPixmap import src.lib.charts as charts from src.lib.typechecks import isslice, isstring from src.lib.selection import Selection class CellAttributes(list): """Stores cell formatting attributes in a list of three tuples - The first element of each tuple is a Selection. - The second element is the table - The third element is a `dict` of attributes that are altered. The class provides attribute read access to single cells via :meth:`__getitem__`. Otherwise it behaves similar to a `list`. """ def __init__(self, *args, **kwargs): self.__add__ = None self.__delattr__ = None self.__delitem__ = None self.__delslice__ = None self.__iadd__ = None self.__imul__ = None self.__rmul__ = None self.__setattr__ = None self.__setslice__ = None self.insert = None self.remove = None self.reverse = None self.sort = None default_cell_attributes = { "borderwidth_bottom": 1, "borderwidth_right": 1, "bordercolor_bottom": None, "bordercolor_right": None, "bgcolor": None, "textfont": None, "pointsize": 10, "fontweight": None, "fontstyle": None, "textcolor": None, "underline": False, "strikethrough": False, "locked": False, "angle": 0.0, "column-width": 75, "row-height": 26, "vertical_align": "align_top", "justification": "justify_left", "frozen": False, "merge_area": None, "renderer": "text", "button_cell": False, "panel_cell": False, } # Cache for __getattr__ maps key to tuple of len and attr_dict _attr_cache = {} _table_cache = {} def append(self, value): """append that clears caches""" # We need to clean up merge areas selection, table, attr = value if "merge_area" in attr: for i, ele in enumerate(reversed(self)): if ele[0] == selection and ele[1] == table \ and "merge_area" in ele[2]: self.pop(-1 - i) if attr["merge_area"] is not None: super().append(value) else: super().append(value) self._attr_cache.clear() self._table_cache.clear() def __getitem__(self, key): """Returns attribute dict for a single key""" assert not any(type(key_ele) is slice for key_ele in key) if key in self._attr_cache: cache_len, cache_dict = self._attr_cache[key] # Use cache result only if no new attrs have been defined if cache_len == len(self): return cache_dict # Update table cache if it is outdated (e.g. when creating a new grid) if len(self) != self._len_table_cache(): self._update_table_cache() row, col, tab = key result_dict = copy(self.default_cell_attributes) try: for selection, attr_dict in self._table_cache[tab]: if (row, col) in selection: result_dict.update(attr_dict) except KeyError: pass # Upddate cache with current length and dict self._attr_cache[key] = (len(self), result_dict) return result_dict def __setitem__(self, key, value): """__setitem__ that clears caches""" super().__setitem__(key, value) self._attr_cache.clear() self._table_cache.clear() def _len_table_cache(self): """Returns the length of the table cache""" length = 0 for table in self._table_cache: length += len(self._table_cache[table]) return length def _update_table_cache(self): """Clears and updates the table cache to be in sync with self""" self._table_cache.clear() for sel, tab, val in self: try: self._table_cache[tab].append((sel, val)) except KeyError: self._table_cache[tab] = [(sel, val)] assert len(self) == self._len_table_cache() def get_merging_cell(self, key): """Returns key of cell that merges the cell key or None if cell key not merged :param key: Key of the cell that is merged :type key: tuple """ row, col, tab = key # Is cell merged for selection, table, attr in self: if tab == table and "merge_area" in attr: top, left, bottom, right = attr["merge_area"] if top <= row <= bottom and left <= col <= right: return top, left, tab def for_table(self, table): """Return cell attributes for a given table""" # table presence in grid is not checked table_cell_attributes = CellAttributes() for selection, __table, attr in self: if __table == table: table_cell_attributes.append((selection, __table, attr)) return table_cell_attributes # End of class CellAttributes class KeyValueStore(dict): """Key-Value store in memory. Currently a dict with default value None. This class represents layer 0 of the model. """ def __init__(self, default_value=None): super().__init__() self.default_value = default_value def __missing__(self, value): """Returns the default value None""" return self.default_value # End of class KeyValueStore # ----------------------------------------------------------------------------- class DictGrid(KeyValueStore): """Core data class with all information that is stored in a `.pys` file. Besides grid code access via standard `dict` operations, it provides the following attributes: * :attr:`~DictGrid.cell_attributes` - Stores cell formatting attributes * :attr:`~DictGrid.macros` - String of all macros This class represents layer 1 of the model. :param shape: Shape of the grid :type shape: tuple """ def __init__(self, shape): super().__init__() self.shape = shape self.cell_attributes = CellAttributes() """Instance of :class:`CellAttributes`""" self.macros = u"" """Macros as string""" # We need to import this here for the unit tests to work from collections import defaultdict self.row_heights = defaultdict(float) # Keys have format (row, table) self.col_widths = defaultdict(float) # Keys have format (col, table) def __getitem__(self, key): shape = self.shape for axis, key_ele in enumerate(key): if shape[axis] <= key_ele or key_ele < -shape[axis]: msg = "Grid index {key} outside grid shape {shape}." msg = msg.format(key=key, shape=shape) raise IndexError(msg) return super().__getitem__(key) def __missing__(self, key): """Default value is None""" return # End of class DictGrid # ----------------------------------------------------------------------------- class DataArray: """DataArray provides enhanced grid read/write access. Enhancements comprise: * Slicing * Multi-dimensional operations such as insertion and deletion along one axis This class represents layer 2 of the model. :param shape: Shape of the grid :type shape: tuple """ def __init__(self, shape, settings): self.dict_grid = DictGrid(shape) self.settings = settings # Safe mode self.safe_mode = False """Whether pyspread is operating in safe_mode .. todo:: Explain safe mode """ def __eq__(self, other): if not hasattr(other, "dict_grid") or \ not hasattr(other, "cell_attributes"): return False return self.dict_grid == other.dict_grid and \ self.cell_attributes == other.cell_attributes def __ne__(self, other): return not self.__eq__(other) @property def data(self): """Returns `dict` of data content. - Data is the central content interface for loading / saving data. - It shall be used for loading and saving from and to `.pys` and other files. - It shall be used for loading and saving macros. - However, it is not used for importing and exporting data because these operations are partial to the grid. Keys: shape: 3-tuple of Integer \tGrid shape grid: Dict of 3-tuples to strings \tCell content attributes: List of 3-tuples \tCell attributes row_heights: Dict of 2-tuples to float \t(row, tab): row_height col_widths: Dict of 2-tuples to float \t(col, tab): col_width macros: String \tMacros from macro list """ data = {} data["shape"] = self.shape data["grid"] = {}.update(self.dict_grid) data["attributes"] = [ca for ca in self.cell_attributes] data["row_heights"] = self.row_heights data["col_widths"] = self.col_widths data["macros"] = self.macros return data @data.setter def data(self, **kwargs): """Sets data from given parameters Old values are deleted. If a paremeter is not given, nothing is changed. :param shape: Grid shape :type shape: tuple :param grid: Cell content :type grid: dict :param attributes: Cell attributes :type attributes: CellAttributes :param row_heights: Dict (row, tab): row_height :type row_heights: dict :param col_widths: Dict (col, tab): col_width :type col_widths: dict :param macros: Macros from macro list :type macros: str """ if "shape" in kwargs: self.shape = kwargs["shape"] if "grid" in kwargs: self.dict_grid.clear() self.dict_grid.update(kwargs["grid"]) if "attributes" in kwargs: self.attributes[:] = kwargs["attributes"] if "row_heights" in kwargs: self.row_heights = kwargs["row_heights"] if "col_widths" in kwargs: self.col_widths = kwargs["col_widths"] if "macros" in kwargs: self.macros = kwargs["macros"] @property def row_heights(self): """row_heights interface to dict_grid""" return self.dict_grid.row_heights @row_heights.setter def _row_heights(self, row_heights): """row_heights interface to dict_grid""" self.dict_grid.row_heights = row_heights @property def col_widths(self): """col_widths interface to dict_grid""" return self.dict_grid.col_widths @col_widths.setter def col_widths(self, col_widths): """col_widths interface to dict_grid""" self.dict_grid.col_widths = col_widths @property def cell_attributes(self): """cell_attributes interface to dict_grid""" return self.dict_grid.cell_attributes @cell_attributes.setter def cell_attributes(self, value): """cell_attributes interface to dict_grid""" # First empty cell_attributes self.cell_attributes[:] = [] self.cell_attributes.extend(value) @property def macros(self): """macros interface to dict_grid""" return self.dict_grid.macros @macros.setter def macros(self, macros): """Sets macros string""" self.dict_grid.macros = macros @property def shape(self): """Returns dict_grid shape""" return self.dict_grid.shape @shape.setter def shape(self, shape): """Deletes all cells beyond new shape and sets dict_grid shape Returns a dict of the deleted cells' contents :param shape: Target shape for grid :type shape: tuple """ # Delete each cell that is beyond new borders old_shape = self.shape deleted_cells = {} if any(new_axis < old_axis for new_axis, old_axis in zip(shape, old_shape)): for key in list(self.dict_grid.keys()): if any(key_ele >= new_axis for key_ele, new_axis in zip(key, shape)): deleted_cells[key] = self.pop(key) # Set dict_grid shape attribute self.dict_grid.shape = shape self._adjust_rowcol(0, 0, 0) self._adjust_cell_attributes(0, 0, 0) return deleted_cells def __iter__(self): """Returns iterator over self.dict_grid""" return iter(self.dict_grid) def __contains__(self, key): """Handles single keys only""" if any(not isinstance(ele, int) for ele in key): return NotImplemented row, column, table = key rows, columns, tables = self.shape return (0 <= row <= rows and 0 <= column <= columns and 0 <= table <= tables) # Slice support def __getitem__(self, key): """Adds slicing access to cell code retrieval The cells are returned as a generator of generators, of ... of unicode. :param key: Keys of the cell code that is returned :type key: tuple of integer or slice Note ---- Classical Excel type addressing (A$1, ...) may be added here """ for key_ele in key: if isslice(key_ele): # We have something slice-like here return self.cell_array_generator(key) elif isstring(key_ele): # We have something string-like here msg = "Cell string based access not implemented" raise NotImplementedError(msg) # key_ele should be a single cell return self.dict_grid[key] def __setitem__(self, key, value): """Accepts index and slice keys :param key: Cell key(s) that shall be set :type key: tuple of 3 int or 3 slice :param value: Code for cell(s) to be set :type value: str """ single_keys_per_dim = [] for axis, key_ele in enumerate(key): if isslice(key_ele): # We have something slice-like here length = key[axis] slice_range = range(*key_ele.indices(length)) single_keys_per_dim.append(slice_range) elif isstring(key_ele): # We have something string-like here raise NotImplementedError else: # key_ele is a single cell single_keys_per_dim.append((key_ele, )) single_keys = product(*single_keys_per_dim) for single_key in single_keys: if value: # Never change merged cells merging_cell = \ self.cell_attributes.get_merging_cell(single_key) if merging_cell is None or merging_cell == single_key: self.dict_grid[single_key] = value else: # Value is empty --> delete cell try: self.pop(key) except (KeyError, TypeError): pass # Pickle support def __getstate__(self): """Returns dict_grid for pickling Note that all persistent data is contained in the DictGrid class """ return {"dict_grid": self.dict_grid} def get_row_height(self, row, tab): """Returns row height""" try: return self.row_heights[(row, tab)] except KeyError: return def get_col_width(self, col, tab): """Returns column width""" try: return self.col_widths[(col, tab)] except KeyError: return def keys(self): """Returns keys in self.dict_grid""" return list(self.dict_grid.keys()) def pop(self, key): """dict_grid pop wrapper""" return self.dict_grid.pop(key) def get_last_filled_cell(self, table=None): """Returns key for the bottommost rightmost cell with content :param table: Limit search to this table :type table: int, optional """ maxrow = 0 maxcol = 0 for row, col, tab in self.dict_grid: if table is None or tab == table: maxrow = max(row, maxrow) maxcol = max(col, maxcol) return maxrow, maxcol, table def cell_array_generator(self, key): """Generator traversing cells specified in key :param key: Specifies the cell keys of the generator :type key: Iterable of Integer or slice """ for i, key_ele in enumerate(key): # Get first element of key that is a slice if type(key_ele) is slice: slc_keys = range(*key_ele.indices(self.dict_grid.shape[i])) key_list = list(key) key_list[i] = None has_subslice = any(type(ele) is slice for ele in key_list) for slc_key in slc_keys: key_list[i] = slc_key if has_subslice: # If there is a slice left yield generator yield self.cell_array_generator(key_list) else: # No slices? Yield value yield self[tuple(key_list)] break def _shift_rowcol(self, insertion_point, no_to_insert): """Shifts row and column sizes when a table is inserted or deleted""" # Shift row heights new_row_heights = {} del_row_heights = [] for row, tab in self.row_heights: if tab >= insertion_point: new_row_heights[(row, tab + no_to_insert)] = \ self.row_heights[(row, tab)] del_row_heights.append((row, tab)) for row, tab in new_row_heights: self.set_row_height(row, tab, new_row_heights[(row, tab)]) for row, tab in del_row_heights: if (row, tab) not in new_row_heights: self.set_row_height(row, tab, None) # Shift column widths new_col_widths = {} del_col_widths = [] for col, tab in self.col_widths: if tab >= insertion_point: new_col_widths[(col, tab + no_to_insert)] = \ self.col_widths[(col, tab)] del_col_widths.append((col, tab)) for col, tab in new_col_widths: self.set_col_width(col, tab, new_col_widths[(col, tab)]) for col, tab in del_col_widths: if (col, tab) not in new_col_widths: self.set_col_width(col, tab, None) def _adjust_rowcol(self, insertion_point, no_to_insert, axis, tab=None): """Adjusts row and column sizes on insertion/deletion""" if axis == 2: self._shift_rowcol(insertion_point, no_to_insert) return assert axis in (0, 1) cell_sizes = self.col_widths if axis else self.row_heights set_cell_size = self.set_col_width if axis else self.set_row_height new_sizes = {} del_sizes = [] for pos, table in cell_sizes: if pos > insertion_point and (tab is None or tab == table): if 0 <= pos + no_to_insert < self.shape[axis]: new_sizes[(pos + no_to_insert, table)] = \ cell_sizes[(pos, table)] del_sizes.append((pos, table)) for pos, table in new_sizes: set_cell_size(pos, table, new_sizes[(pos, table)]) for pos, table in del_sizes: if (pos, table) not in new_sizes: set_cell_size(pos, table, None) def _adjust_merge_area(self, attrs, insertion_point, no_to_insert, axis): """Returns an updated merge area :param attrs: Cell attribute dictionary that shall be adjusted :type attrs: dict :param insertion_point: Point on axis before insertion takes place :type insertion_point: int :param no_to_insert: Number of rows/cols/tabs that shall be inserted :type no_to_insert: int, >=0 :param axis: Specifies number of dimension, i.e. 0 == row, 1 == col :type axis: int in range(2) """ assert axis in range(2) if "merge_area" not in attrs or attrs["merge_area"] is None: return top, left, bottom, right = attrs["merge_area"] selection = Selection([(top, left)], [(bottom, right)], [], [], []) selection.insert(insertion_point, no_to_insert, axis) __top, __left = selection.block_tl[0] __bottom, __right = selection.block_br[0] # Adjust merge area if it is beyond the grid shape rows, cols, tabs = self.shape if __top < 0 and __bottom < 0 or __top >= rows and __bottom >= rows or\ __left < 0 and __right < 0 or __left >= cols and __right >= cols: return if __top < 0: __top = 0 if __top >= rows: __top = rows - 1 if __bottom < 0: __bottom = 0 if __bottom >= rows: __bottom = rows - 1 if __left < 0: __left = 0 if __left >= cols: __left = cols - 1 if __right < 0: __right = 0 if __right >= cols: __right = cols - 1 return __top, __left, __bottom, __right def _adjust_cell_attributes(self, insertion_point, no_to_insert, axis, tab=None, cell_attrs=None): """Adjusts cell attributes on insertion/deletion :param insertion_point: Point on axis before insertion :type insertion_point: int :param no_to_insert: Number of rows/cols/tabs that shall be inserted :type no_to_insert: int, >=0 :param axis: Specifies number of dimension, i.e. 0 == row, 1 == col ... :type axis: int in range(3) :param tab: Limits insertion to tab for axis < 2 :type tab: int, optional :param cell_attrs: If given replaces the existing CellAttributes :type cell_attrs: CellAttributes, optional """ def replace_cell_attributes_table(index, new_table): """Replaces table in cell_attributes item""" ca = list(list.__getitem__(self.cell_attributes, index)) ca[1] = new_table self.cell_attributes[index] = tuple(ca) def get_ca_with_updated_ma(attrs, merge_area): """Returns cell attributes with updated merge area""" new_attrs = copy(attrs) if merge_area is None: try: new_attrs.pop("merge_area") except KeyError: pass else: new_attrs["merge_area"] = merge_area return new_attrs if axis not in list(range(3)): raise ValueError("Axis must be in [0, 1, 2]") assert tab is None or tab >= 0 if cell_attrs is None: cell_attrs = [] if cell_attrs: self.cell_attributes[:] = cell_attrs elif axis < 2: # Adjust selections on given table ca_updates = {} for i, (selection, table, attrs) in enumerate( self.cell_attributes): selection = copy(selection) if tab is None or tab == table: selection.insert(insertion_point, no_to_insert, axis) # Update merge area if present merge_area = self._adjust_merge_area(attrs, insertion_point, no_to_insert, axis) new_attrs = get_ca_with_updated_ma(attrs, merge_area) ca_updates[i] = selection, table, new_attrs for idx in ca_updates: self.cell_attributes[idx] = ca_updates[idx] elif axis == 2: # Adjust tabs pop_indices = [] for i, cell_attribute in enumerate(self.cell_attributes): selection, table, value = cell_attribute if no_to_insert < 0 and insertion_point <= table: if insertion_point > table + no_to_insert: # Delete later pop_indices.append(i) else: replace_cell_attributes_table(i, table + no_to_insert) elif insertion_point < table: # Insert replace_cell_attributes_table(i, table + no_to_insert) for i in pop_indices[::-1]: self.cell_attributes.pop(i) self.cell_attributes._attr_cache.clear() self.cell_attributes._update_table_cache() def insert(self, insertion_point, no_to_insert, axis, tab=None): """Inserts no_to_insert rows/cols/tabs/... before insertion_point :param insertion_point: Point on axis before insertion :type insertion_point: int :param no_to_insert: Number of rows/cols/tabs that shall be inserted :type no_to_insert: int, >= 0, :param axis: Specifies number of dimension, i.e. 0 == row, 1 == col ... :type axis: int :param tab: If given then insertion is limited to this tab for axis < 2 :type tab: int, optional """ if not 0 <= axis <= len(self.shape): raise ValueError("Axis not in grid dimensions") if insertion_point > self.shape[axis] or \ insertion_point < -self.shape[axis]: raise IndexError("Insertion point not in grid") new_keys = {} del_keys = [] for key in list(self.dict_grid.keys()): if key[axis] >= insertion_point and (tab is None or tab == key[2]): new_key = list(key) new_key[axis] += no_to_insert if 0 <= new_key[axis] < self.shape[axis]: new_keys[tuple(new_key)] = self(key) del_keys.append(key) # Now re-insert moved keys for key in del_keys: if key not in new_keys and self(key) is not None: self.pop(key) self._adjust_rowcol(insertion_point, no_to_insert, axis, tab=tab) self._adjust_cell_attributes(insertion_point, no_to_insert, axis, tab) for key in new_keys: self.__setitem__(key, new_keys[key]) def delete(self, deletion_point, no_to_delete, axis, tab=None): """Deletes no_to_delete rows/cols/... starting with deletion_point Axis specifies number of dimension, i.e. 0 == row, 1 == col, 2 == tab """ if not 0 <= axis < len(self.shape): raise ValueError("Axis not in grid dimensions") if no_to_delete < 0: raise ValueError("Cannot delete negative number of rows/cols/...") elif no_to_delete >= self.shape[axis]: raise ValueError("Last row/column/table must not be deleted") if deletion_point > self.shape[axis] or \ deletion_point <= -self.shape[axis]: raise IndexError("Deletion point not in grid") new_keys = {} del_keys = [] # Note that the loop goes over a list that copies all dict keys for key in list(self.dict_grid.keys()): if tab is None or tab == key[2]: if deletion_point <= key[axis] < deletion_point + no_to_delete: del_keys.append(key) elif key[axis] >= deletion_point + no_to_delete: new_key = list(key) new_key[axis] -= no_to_delete new_keys[tuple(new_key)] = self(key) del_keys.append(key) # Now re-insert moved keys for key in new_keys: self.__setitem__(key, new_keys[key]) for key in del_keys: if key not in new_keys and self(key) is not None: self.pop(key) self._adjust_rowcol(deletion_point, -no_to_delete, axis, tab=tab) self._adjust_cell_attributes(deletion_point, -no_to_delete, axis, tab) def set_row_height(self, row, tab, height): """Sets row height""" try: self.row_heights.pop((row, tab)) except KeyError: pass if height is not None: self.row_heights[(row, tab)] = float(height) def set_col_width(self, col, tab, width): """Sets column width""" try: self.col_widths.pop((col, tab)) except KeyError: pass if width is not None: self.col_widths[(col, tab)] = float(width) # Element access via call __call__ = __getitem__ # End of class DataArray # ----------------------------------------------------------------------------- class CodeArray(DataArray): """CodeArray provides objects when accessing cells via `__getitem__` Cell code can be accessed via function call This class represents layer 3 of the model. """ # Cache for results from __getitem__ calls result_cache = {} # Cache for frozen objects frozen_cache = {} # Custom font storage custom_fonts = {} def __setitem__(self, key, value): """Sets cell code and resets result cache""" # Change numpy array repr function for grid cell results numpy.set_string_function(lambda s: repr(s.tolist())) # Prevent unchanged cells from being recalculated on cursor movement repr_key = repr(key) unchanged = (repr_key in self.result_cache and value == self(key)) or \ ((value is None or value == "") and repr_key not in self.result_cache) super().__setitem__(key, value) if not unchanged: # Reset result cache self.result_cache = {} def __getitem__(self, key): """Returns _eval_cell""" if all(type(k) is not slice for k in key): # Button cell handling if self.cell_attributes[key]["button_cell"] is not False: return # Frozen cell handling frozen_res = self.cell_attributes[key]["frozen"] if frozen_res: if repr(key) in self.frozen_cache: return self.frozen_cache[repr(key)] else: # Frozen cache is empty. # Maybe we have a reload without the frozen cache result = self._eval_cell(key, self(key)) self.frozen_cache[repr(key)] = result return result # Normal cell handling if repr(key) in self.result_cache: return self.result_cache[repr(key)] elif self(key) is not None: result = self._eval_cell(key, self(key)) self.result_cache[repr(key)] = result return result def _make_nested_list(self, gen): """Makes nested list from generator for creating numpy.array""" res = [] for ele in gen: if ele is None: res.append(None) elif not isstring(ele) and isgenerator(ele): # Nested generator res.append(self._make_nested_list(ele)) else: res.append(ele) return res def _get_updated_environment(self, env_dict=None): """Returns globals environment with 'magic' variable :param env_dict: Maps global variable name to value :type env_dict: dict, optional, defaults to {'S': self} """ if env_dict is None: env_dict = {'S': self} env = globals().copy() env.update(env_dict) return env def exec_then_eval(self, code, _globals=None, _locals=None): """execs multuiline code and returns eval of last code line""" if _globals is None: _globals = {} if _locals is None: _locals = {} block = ast.parse(code, mode='exec') # assumes last node is an expression last_body = block.body.pop() last = ast.Expression(last_body.value) exec(compile(block, '', mode='exec'), _globals, _locals) res = eval(compile(last, '', mode='eval'), _globals, _locals) if hasattr(last_body, "targets"): for target in last_body.targets: _globals[target.id] = res globals().update(_globals) return res def _eval_cell(self, key, code): """Evaluates one cell and returns its result""" # Flatten helper function def nn(val): """Returns flat numpy array without None values""" try: return numpy.array([_f for _f in val.flat if _f]) except AttributeError: # Probably no numpy array return numpy.array([_f for _f in val if _f]) # Set up environment for evaluation from matplotlib.figure import Figure # Needs to be imported here env_dict = {'X': key[0], 'Y': key[1], 'Z': key[2], 'bz2': bz2, 'base64': base64, 'nn': nn, 'Figure': Figure, 'R': key[0], 'C': key[1], 'T': key[2], 'S': self} env = self._get_updated_environment(env_dict=env_dict) # Return cell value if in safe mode if self.safe_mode: return code # If cell is not present return None if code is None: return elif isgenerator(code): # We have a generator object return numpy.array(self._make_nested_list(code), dtype="O") try: import signal signal.signal(signal.SIGALRM, self.handler) signal.alarm(self.settings.timeout) except Exception: # No POSIX system pass try: result = self.exec_then_eval(code, env, {}) except AttributeError as err: # Attribute Error includes RunTimeError result = AttributeError(err) except RuntimeError as err: result = RuntimeError(err) except Exception as err: result = Exception(err) finally: try: signal.alarm(0) except Exception: # No POSIX system pass # Change back cell value for evaluation from other cells # self.dict_grid[key] = _old_code return result def pop(self, key): """pop with cache support :param key: Cell key that shall be popped :type key: tuple """ try: self.result_cache.pop(repr(key)) except KeyError: pass return super().pop(key) def reload_modules(self): """Reloads modules that are available in cells""" from importlib import reload modules = [bz2, base64, re, ast, sys, numpy, datetime] for module in modules: reload(module) def clear_globals(self): """Clears all newly assigned globals""" base_keys = ['cStringIO', 'KeyValueStore', 'UnRedo', 'isgenerator', 'isstring', 'bz2', 'base64', '__package__', 're', '__doc__', 'QPixmap', 'charts', 'CellAttributes', 'product', 'ast', '__builtins__', '__file__', 'sys', 'isslice', '__name__', 'QImage', 'copy', 'imap', 'ifilter', 'Selection', 'DictGrid', 'numpy', 'CodeArray', 'DataArray', 'datetime'] for key in list(globals().keys()): if key not in base_keys: globals().pop(key) def get_globals(self): """Returns globals dict""" return globals() def execute_macros(self): """Executes all macros and returns result string Executes macros only when not in safe_mode """ if self.safe_mode: return '', "Safe mode activated. Code not executed." # We need to execute each cell so that assigned globals are updated for key in self: self[key] # Windows exec does not like Windows newline self.macros = self.macros.replace('\r\n', '\n') # Set up environment for evaluation globals().update(self._get_updated_environment()) # Create file-like string to capture output import io code_out = io.StringIO() code_err = io.StringIO() err_msg = io.StringIO() # Capture output and errors sys.stdout = code_out sys.stderr = code_err try: import signal signal.signal(signal.SIGALRM, self.handler) signal.alarm(self.settings.timeout) except Exception: # No POSIX system pass try: exec(self.macros, globals()) try: signal.alarm(0) except Exception: # No POSIX system pass except Exception: # Print exception # (Because of how the globals are handled during execution # we must import modules here) from traceback import print_exception from lib.exception_handling import get_user_codeframe exc_info = sys.exc_info() user_tb = get_user_codeframe(exc_info[2]) or exc_info[2] print_exception(exc_info[0], exc_info[1], user_tb, None, err_msg) # Restore stdout and stderr sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ results = code_out.getvalue() errs = code_err.getvalue() + err_msg.getvalue() code_out.close() code_err.close() # Reset result cache self.result_cache.clear() # Reset frozen cache self.frozen_cache.clear() return results, errs def _sorted_keys(self, keys, startkey, reverse=False): """Generator that yields sorted keys starting with startkey :param keys: Key sequence that is sorted :type keys: Iterable of tuple :param startkey: First key to be yielded :type startkey: tuple :param reverse: Sort direction reversed if True :type reverse: bool, optional, defaults to False """ def tuple_key(t): return t[::-1] if reverse: def tuple_cmp(t): return t[::-1] > startkey[::-1] else: def tuple_cmp(t): return t[::-1] < startkey[::-1] searchkeys = sorted(keys, key=tuple_key, reverse=reverse) searchpos = sum(1 for _ in filter(tuple_cmp, searchkeys)) searchkeys = searchkeys[searchpos:] + searchkeys[:searchpos] for key in searchkeys: yield key def string_match(self, datastring, findstring, word, case, regexp): """Returns position of findstring in datastring or None if not found :param word: Search full words only if True :type word: bool :param case: Search case sensitively if True :type case: bool :param regexp: Regular expression search if True :rtype: int or None :return: Position of findstring in datastring or None if not found """ if not isinstance(datastring, str): # Empty cell return if regexp: match = re.search(findstring, datastring) if match is None: pos = -1 else: pos = match.start() else: if not case: datastring = datastring.lower() findstring = findstring.lower() if word: pos = -1 matchstring = r'\b' + findstring + r'+\b' for match in re.finditer(matchstring, datastring): pos = match.start() break # find 1st occurrance else: pos = datastring.find(findstring) if pos == -1: return None else: return pos def findnextmatch(self, startkey, find_string, up=False, word=False, case=False, regexp=False, results=True): """the position of the next match of find_string :param startkey: Start position of search :type startkey: tuple :param find_string: String to be searched for :type startkey: str :param up: Search up instead of down if True :type up: bool, optional, defaults to False :param word: Search full words only if True :type word: bool, optional, defaults to False :param case: Search case sensitively if True :type case: bool, optional, defaults to False :param regexp: Reg. expression search if True :type regexp: bool, optional, defaults to False :param results: Search includes result string if True (slower) :type results: bool, optional, defaults to True :rtype: str or None :return: Returns tuple with position of the next match of find_string """ if results: def is_matching(key, find_string, word, case, regexp): code = self(key) pos = self.string_match(code, find_string, word, case, regexp) if pos is not None: return True else: res_str = str(self[key]) pos = self.string_match(res_str, find_string, word, case, regexp) return pos is not None else: def is_matching(code, find_string, word, case, regexp): code = self(key) pos = self.string_match(code, find_string, word, case, regexp) return pos is not None # List of keys in sgrid in search order table = startkey[2] keys = [key for key in self.keys() if key[2] == table] for key in self._sorted_keys(keys, startkey, reverse=up): try: if is_matching(key, find_string, word, case, regexp): return key except Exception: # re errors are cryptical: sre_constants,... pass def handler(self, signum, frame): raise RuntimeError("Timeout after {} s.".format(self.settings.timeout)) # End of class CodeArray pyspread-1.99.0.1/src/toolbar.py0000644000175000017500000002207013600133114016210 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ **Contains:** * :class:`ChartTemplatesToolBar` * :class:`FindToolbar` * :class:`FormatToolbar` * :class:`MacroToolbar` * :func:`add_toolbutton_widget` """ from PyQt5.QtWidgets import QToolBar, QToolButton, QMenu from PyQt5.QtWidgets import QHBoxLayout, QUndoView try: import matplotlib.figure as matplotlib_figure except ImportError: matplotlib_figure = None from src.icons import Icon from src.menus import ToolbarManagerMenu from src.widgets import FindEditor def add_toolbutton_widget(button, widget, minsize=(300, 200), popup_mode=QToolButton.MenuButtonPopup): """Adds a widget as menu to a tool_button""" button.setPopupMode(popup_mode) menu = QMenu(button) menu.setMinimumSize(*minsize) button.setMenu(menu) menu_layout = QHBoxLayout() menu_layout.addWidget(widget) menu.setLayout(menu_layout) menu.layout() class ToolBarBase(QToolBar): """Base toolbar class that provides toolbar manager button method""" def add_widget(self, widget): """Adds widget with addWidget and assigns action text and icon The widget must have a label attribute and an icon method. """ self.addWidget(widget) self.actions()[-1].setText(widget.label) self.actions()[-1].setIcon(widget.icon()) def get_manager_button(self): """Returns QToolButton for managing the toolbar""" button = QToolButton(self) button.setText("Add/remove toolbar icons") button.setMenu(ToolbarManagerMenu(self)) button.setIcon(Icon.menu_manager) button.setFixedWidth(button.height()/3) button.setPopupMode(QToolButton.InstantPopup) return button class MainToolBar(ToolBarBase): """The main toolbar""" def __init__(self, main_window): self.main_window = main_window super().__init__("Main toolbar", main_window) self.setObjectName("Main Toolbar") self._create_toolbar(main_window.main_window_actions) def _create_toolbar(self, actions): """Fills the main toolbar with QActions""" self.addAction(actions.new) self.addAction(actions.open) self.addAction(actions.save) self.addAction(actions.export) self.addSeparator() self.addAction(actions.undo) self.addAction(actions.redo) self.addSeparator() self.addAction(actions.toggle_spell_checker) self.addSeparator() self.addAction(actions.find) self.addAction(actions.replace) self.addSeparator() self.addAction(actions.cut) self.addAction(actions.copy) self.addAction(actions.copy_results) self.addAction(actions.paste) self.addAction(actions.paste) self.addSeparator() self.addAction(actions.freeze_cell) self.addSeparator() self.addAction(actions.print) undo_button = self.widgetForAction(actions.undo) undo_view = QUndoView(self.main_window.undo_stack) add_toolbutton_widget(undo_button, undo_view) self.addWidget(self.get_manager_button()) class FindToolbar(ToolBarBase): """The find toolbar for pyspread""" def __init__(self, main_window): super().__init__("Find Toolbar", main_window) self.main_window = main_window self.setObjectName("Find Toolbar") self._create_toolbar(main_window.main_window_actions) def _create_toolbar(self, actions): """Fills the find toolbar with QActions""" self.find_editor = FindEditor(self) self.add_widget(self.find_editor) self.addAction(actions.replace) self.addWidget(self.get_manager_button()) class FormatToolbar(ToolBarBase): """The format toolbar for pyspread""" def __init__(self, main_window): super().__init__("Format Toolbar", main_window) self.main_window = main_window self.setObjectName("Format Toolbar") self._create_toolbar(main_window.main_window_actions) def _create_toolbar(self, actions): """Fills the format toolbar with QActions""" menubar = self.main_window.menuBar() self.add_widget(self.main_window.widgets.font_combo) self.add_widget(self.main_window.widgets.font_size_combo) self.addAction(actions.bold) self.addAction(actions.italics) self.addAction(actions.underline) self.addAction(actions.strikethrough) self.addSeparator() self.add_widget(self.main_window.widgets.renderer_button) self.addAction(actions.merge_cells) self.addSeparator() self.add_widget(self.main_window.widgets.rotate_button) self.add_widget(self.main_window.widgets.justify_button) self.add_widget(self.main_window.widgets.align_button) self.addSeparator() self.border_menu_button = QToolButton(self) self.border_menu_button.setText("Borders") self.border_menu_button.label = "Borders" border_submenu = menubar.format_menu.border_submenu self.border_menu_button.setMenu(border_submenu) self.border_menu_button.setIcon(Icon.border_menu) self.add_widget(self.border_menu_button) self.border_menu_button.setPopupMode(QToolButton.InstantPopup) self.line_width_button = QToolButton(self) self.line_width_button.setText("Border Width") self.line_width_button.label = "Border Width" line_width_submenu = menubar.format_menu.line_width_submenu self.line_width_button.setMenu(line_width_submenu) self.line_width_button.setIcon(Icon.format_borders) self.add_widget(self.line_width_button) self.line_width_button.setPopupMode(QToolButton.InstantPopup) self.addSeparator() text_color_button = self.main_window.widgets.text_color_button text_color_button.set_max_size(self.iconSize()) self.add_widget(text_color_button) line_color_button = self.main_window.widgets.line_color_button line_color_button.set_max_size(self.iconSize()) self.add_widget(line_color_button) background_color_button = \ self.main_window.widgets.background_color_button background_color_button.set_max_size(self.iconSize()) self.add_widget(background_color_button) self.addSeparator() self.addAction(actions.copy_format) self.addAction(actions.paste_format) self.addSeparator() self.addWidget(self.get_manager_button()) class MacroToolbar(ToolBarBase): """The macro toolbar for pyspread""" def __init__(self, main_window): super().__init__("Macro toolbar", main_window) self.setObjectName("Macro toolbar") self._create_toolbar(main_window.main_window_actions) def _create_toolbar(self, actions): """Fills the macro toolbar with QActions""" self.addAction(actions.insert_image) if matplotlib_figure is not None: self.addAction(actions.insert_chart) self.addWidget(self.get_manager_button()) class ChartTemplatesToolBar(ToolBarBase): """Toolbar for chart dialog for inserting template chart code""" def __init__(self, parent): super().__init__("Chart templates toolbar", parent) self.setObjectName("Chart templates toolbar") self._create_toolbar(parent.actions) def _create_toolbar(self, actions): """Fills the main toolbar with QActions""" self.addAction(actions.chart_pie_1_1) self.addAction(actions.chart_ring_1_1) self.addAction(actions.chart_line_1_1) self.addAction(actions.chart_polar_1_1) self.addAction(actions.chart_area_1_1) self.addAction(actions.chart_column_1_1) self.addAction(actions.chart_column_1_2) self.addAction(actions.chart_bar_1_3) self.addAction(actions.chart_scatter_1_1) self.addAction(actions.chart_bubble_1_1) self.addAction(actions.chart_boxplot_2_2) self.addAction(actions.chart_histogram_1_1) self.addAction(actions.chart_histogram_1_4) self.addAction(actions.chart_scatterhist_1_1) self.addAction(actions.chart_matrix_1_1) self.addAction(actions.chart_contour_1_2) self.addAction(actions.chart_surface_2_1) self.addWidget(self.get_manager_button()) pyspread-1.99.0.1/src/installer.py0000644000175000017500000001600713566256321016567 0ustar andreasandreas# -*- coding: utf-8 -*- from dataclasses import dataclass import os from pkg_resources import get_distribution, DistributionNotFound from PyQt5.QtCore import QProcess, QSize from PyQt5.QtGui import QColor, QTextCursor from PyQt5.QtWidgets import QDialog, QButtonGroup, QVBoxLayout, QHBoxLayout from PyQt5.QtWidgets import QTreeWidgetItem, QToolButton, QGroupBox from PyQt5.QtWidgets import QTreeWidget, QCheckBox, QLineEdit, QPushButton from PyQt5.QtWidgets import QPlainTextEdit from src.lib.attrdict import AttrDict @dataclass class Module: name: str description: str required_version: str # The minimum version number that is required @property def version(self) -> str: """Currently installed version number, False if not installed""" try: return get_distribution(self.name).version except DistributionNotFound: return False def is_installed(self) -> bool: """True if the module is installed""" return bool(self.version) # The required dependencies numpy and pyqt5 are not mentioned because # pyspread does not launch without them. # Optional dependencies # --------------------- OPTIONAL_DEPENDENCIES = [ Module(name="matplotlib", description="Create charts", required_version="1.1.1"), Module(name="pyenchant", description="Spell checker", required_version="1.1"), ] # Not yet implemented modules # Module(name="xlrd", # description="Load Excel files", # required_version="0.9.2"), # Module(name="xlwt", # description="Save Excel files", # required_version="0.9.2"), class DependenciesDialog(QDialog): """Dependencies dialog for python dependencies""" column = AttrDict(zip(("button", "status", "name", "version", "required_version", "description"), range(6))) column_headers = ("", "Status", "Package", "Version", "Required", "Description") def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("Installer") # Button group for install buttons self.buttGroup = QButtonGroup() self.buttGroup.buttonClicked.connect(self.on_butt_install) self.mainLayout = QVBoxLayout() self.mainLayout.setContentsMargins(10, 10, 10, 10) self.setLayout(self.mainLayout) self.tree = QTreeWidget() self.mainLayout.addWidget(self.tree, 4) self.tree.setHeaderLabels(self.column_headers) self.tree.setRootIsDecorated(False) self.tree.setSelectionMode(QTreeWidget.NoSelection) self.update_load() def sizeHint(self): """Overloaded method""" return QSize(700, 200) def update_load(self): self.tree.clear() for idx, module in enumerate(OPTIONAL_DEPENDENCIES): item = QTreeWidgetItem() item.setText(self.column.name, module.name) version = module.version if module.version else "not installed" item.setText(self.column.version, version) item.setText(self.column.required_version, module.required_version) item.setText(self.column.description, module.description) self.tree.addTopLevelItem(item) if module.is_installed(): color = "#DBFEAC" status = "Installed" else: status = "Not installed" color = "#F3FFBB" butt = QToolButton() butt.setText("Install") butt.setEnabled(Module(name="pip", description="pip installer", required_version="17.0").is_installed()) self.tree.setItemWidget(item, self.column.button, butt) self.buttGroup.addButton(butt, idx) item.setText(self.column.status, status) item.setBackground(self.column.status, QColor(color)) def on_butt_install(self, butt): """One of install buttons pressed""" butt.setDisabled(True) idx = self.buttGroup.id(butt) dial = InstallPackageDialog(self, module=OPTIONAL_DEPENDENCIES[idx]) dial.exec_() self.update_load() class InstallPackageDialog(QDialog): """Shows a dialog to execute command""" line_str = "-" * 56 def __init__(self, parent=None, module=None): super().__init__(parent) self.module = module self.setWindowTitle("Install Package") self.setMinimumWidth(600) self.process = QProcess(self) self.process.readyReadStandardOutput.connect(self.on_read_standard) self.process.readyReadStandardError.connect(self.on_read_error) self.process.finished.connect(self.on_finished) self.mainLayout = QVBoxLayout() self.mainLayout.setContentsMargins(10, 10, 10, 10) self.setLayout(self.mainLayout) self.groupBox = QGroupBox() self.groupBox.setTitle("Shell Command") self.groupBoxLayout = QHBoxLayout() self.groupBox.setLayout(self.groupBoxLayout) self.mainLayout.addWidget(self.groupBox) self.buttSudo = QCheckBox() self.buttSudo.setText("sudo") self.groupBoxLayout.addWidget(self.buttSudo, 0) self.buttSudo.toggled.connect(self.update_cmd_line) self.buttSudo.setVisible(os.name != "nt") self.txtCommand = QLineEdit() self.groupBoxLayout.addWidget(self.txtCommand, 10) self.buttExecute = QPushButton() self.buttExecute.setText("Execute") self.groupBoxLayout.addWidget(self.buttExecute, 0) self.buttExecute.clicked.connect(self.on_butt_execute) self.txtStdOut = QPlainTextEdit() self.mainLayout.addWidget(self.txtStdOut) self.txtStdErr = QPlainTextEdit() self.mainLayout.addWidget(self.txtStdErr) self.update_cmd_line() def update_cmd_line(self, *unused): """Update the commend line considring sudo button state""" cmd = "" if self.buttSudo.isChecked(): cmd += "pkexec " cmd += "pip3 install {modulename}".format(modulename=self.module.name) self.txtCommand.setText(cmd) def on_butt_execute(self): self.buttSudo.setDisabled(True) self.buttExecute.setDisabled(True) self.txtStdOut.setPlainText("") self.txtStdErr.setPlainText("") self.process.start(self.txtCommand.text()) def on_read_standard(self): c = str(self.txtStdOut.toPlainText()) s = str(self.process.readAllStandardOutput()) ss = c + "\n" + self.line_str + "\n" + s self.txtStdOut.setPlainText(ss) self.txtStdOut.moveCursor(QTextCursor.End) def on_read_error(self): c = str(self.txtStdErr.toPlainText()) s = str(self.process.readAllStandardError()) ss = c + "\n" + self.line_str + "\n" + s self.txtStdErr.setPlainText(ss) self.txtStdErr.moveCursor(QTextCursor.End) def on_finished(self): self.buttSudo.setDisabled(False) self.buttExecute.setDisabled(False) pyspread-1.99.0.1/src/menus.py0000644000175000017500000003172613604443426015723 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ **Provides** * :class:`MenuBar`: QMenuBar, the main menubar * :class:`FileMenu`: File menu for the main menubar * :class:`EditMenu`: Edit menu for the main menubar * :class:`ViewMenu`: View menu for the main menubar * :class:`FormatMenu`: Format menu for the main menubar * :class:`MacroMenu`: Macro menu for the main menubar * :class:`HelpMenu`: Help menu for the main menubar * :class:`FileHistoryMenu`: Menu showing recent files * :class:`BorderChoiceMenu`: QMenu for choosing cell borders * :class:`BorderWidthMenu`: QMenu for choosing the cell border width """ from functools import partial from pathlib import Path from PyQt5.QtWidgets import QMenuBar, QMenu, QAction try: import matplotlib.figure as matplotlib_figure except ImportError: matplotlib_figure = None from src.icons import Icon class MenuBar(QMenuBar): """The main menubar """ def __init__(self, main_window): super().__init__() self.main_window = main_window actions = main_window.main_window_actions self.file_menu = FileMenu(self, actions) self.edit_menu = EditMenu(self, actions) self.view_menu = ViewMenu(self, actions) self.format_menu = FormatMenu(self, actions) self.macro_menu = MacroMenu(self, actions) self.help_menu = HelpMenu(self, actions) self.addMenu(self.file_menu) self.addMenu(self.edit_menu) self.addMenu(self.view_menu) self.addMenu(self.format_menu) self.addMenu(self.macro_menu) self.addMenu(self.help_menu) class FileMenu(QMenu): """File menu for the main menubar""" def __init__(self, parent, actions): super().__init__('&File', parent) self.parent = parent self.addAction(actions.new) self.addAction(actions.open) self.history_submenu = FileHistoryMenu(self, actions) self.history_action = self.addMenu(self.history_submenu) self.addSeparator() self.addAction(actions.save) self.addAction(actions.save_as) self.addSeparator() self.addAction(actions.imprt) self.addAction(actions.export) self.addSeparator() self.addAction(actions.approve) self.addSeparator() self.addAction(actions.clear_globals) self.addSeparator() self.addAction(actions.print_preview) self.addAction(actions.print) self.addSeparator() self.addAction(actions.preferences) self.addSeparator() self.addAction(actions.quit) class EditMenu(QMenu): """Edit menu for the main menubar""" def __init__(self, parent, actions): super().__init__('&Edit', parent) self.addAction(actions.undo) self.addAction(actions.redo) self.addSeparator() self.addAction(actions.cut) self.addAction(actions.copy) self.addAction(actions.copy_results) self.addAction(actions.paste) self.addAction(actions.paste_as) self.addSeparator() self.addAction(actions.find) self.addAction(actions.replace) self.addSeparator() self.addAction(actions.quote) self.addSeparator() self.addAction(actions.insert_rows) self.addAction(actions.insert_columns) self.addAction(actions.insert_table) self.addSeparator() self.addAction(actions.delete_rows) self.addAction(actions.delete_columns) self.addAction(actions.delete_table) self.addSeparator() self.addAction(actions.resize_grid) class ViewMenu(QMenu): """View menu for the main menubar""" def __init__(self, parent, actions): super().__init__('&View', parent) self.addAction(actions.fullscreen) self.addSeparator() self.toolbar_submenu = self.addMenu('Toolbars') self.toolbar_submenu.addAction(actions.toggle_main_toolbar) self.toolbar_submenu.addAction(actions.toggle_macro_toolbar) self.toolbar_submenu.addAction(actions.toggle_format_toolbar) self.toolbar_submenu.addAction(actions.toggle_find_toolbar) self.addAction(actions.toggle_entry_line) self.addAction(actions.toggle_macro_panel) self.addSeparator() self.addAction(actions.goto_cell) self.addSeparator() self.addAction(actions.toggle_spell_checker) self.addSeparator() self.addAction(actions.zoom_in) self.addAction(actions.zoom_out) self.addAction(actions.zoom_1) self.addSeparator() self.addAction(actions.refresh_cells) self.addAction(actions.toggle_periodic_updates) self.addSeparator() self.addAction(actions.show_frozen) class FormatMenu(QMenu): """Format menu for the main menubar""" def __init__(self, parent, actions): super().__init__('&Format', parent) self.addAction(actions.copy_format) self.addAction(actions.paste_format) self.addSeparator() self.addAction(actions.font) self.addAction(actions.bold) self.addAction(actions.italics) self.addAction(actions.underline) self.addAction(actions.strikethrough) self.addSeparator() self.renderer_submenu = self.addMenu('Cell renderer') self.renderer_submenu.addAction(actions.text) self.renderer_submenu.addAction(actions.image) self.renderer_submenu.addAction(actions.markup) if matplotlib_figure is not None: self.renderer_submenu.addAction(actions.matplotlib) self.addAction(actions.freeze_cell) self.addAction(actions.lock_cell) self.addAction(actions.button_cell) self.addSeparator() self.addAction(actions.merge_cells) self.addSeparator() self.rotation_submenu = self.addMenu('Rotation') self.rotation_submenu.addAction(actions.rotate_0) self.rotation_submenu.addAction(actions.rotate_90) self.rotation_submenu.addAction(actions.rotate_180) self.rotation_submenu.addAction(actions.rotate_270) self.justification_submenu = self.addMenu('Justification') self.justification_submenu.addAction(actions.justify_left) self.justification_submenu.addAction(actions.justify_center) self.justification_submenu.addAction(actions.justify_right) self.justification_submenu.addAction(actions.justify_fill) self.alignment_submenu = self.addMenu('Alignment') self.alignment_submenu.addAction(actions.align_top) self.alignment_submenu.addAction(actions.align_center) self.alignment_submenu.addAction(actions.align_bottom) self.addSeparator() self.border_submenu = BorderChoiceMenu(actions) self.addMenu(self.border_submenu) self.line_width_submenu = BorderWidthMenu(actions) self.addMenu(self.line_width_submenu) self.addSeparator() self.addAction(actions.text_color) self.addAction(actions.line_color) self.addAction(actions.background_color) class MacroMenu(QMenu): """Macro menu for the main menubar""" def __init__(self, parent, actions): super().__init__('&Macro', parent) self.addAction(actions.insert_image) if matplotlib_figure is not None: self.addAction(actions.insert_chart) class HelpMenu(QMenu): """Help menu for the main menubar""" def __init__(self, parent, actions): super().__init__('&Help', parent) self.addAction(actions.manual) self.addAction(actions.tutorial) self.addSeparator() self.addAction(actions.dependencies) self.addSeparator() self.addAction(actions.about) class FileHistoryMenu(QMenu): """Menu that displays the file history""" def __init__(self, parent, actions): super().__init__('&Recent files', parent) self.main_window = parent.parent.main_window def update(self): """Updates file history menu""" self.clear() settings = self.main_window.settings for posixpath in settings.file_history[:settings.max_file_history]: filepath = Path(posixpath) if filepath.is_file(): action = QAction(filepath.name, self) action.setStatusTip(posixpath) self.addAction(action) action.triggered.connect(self.on_recent) def on_recent(self): """Event handler for file history menu""" posixpath = self.sender().statusTip() self.main_window.workflows.file_open_recent(posixpath) class BorderChoiceMenu(QMenu): """QMenu for choosing cell borders that shall be manipulated""" def __init__(self, actions): super().__init__() self.setTitle("Formatted borders") self.setIcon(Icon.border_menu) self.addAction(actions.format_borders_all) self.addAction(actions.format_borders_top) self.addAction(actions.format_borders_bottom) self.addAction(actions.format_borders_left) self.addAction(actions.format_borders_right) self.addAction(actions.format_borders_outer) self.addAction(actions.format_borders_inner) self.addAction(actions.format_borders_top_bottom) class BorderWidthMenu(QMenu): """QMenu for choosing the cell border width""" def __init__(self, actions): super().__init__() self.setTitle("Border width") self.setIcon(Icon.format_borders) self.addAction(actions.format_borders_0) self.addAction(actions.format_borders_1) self.addAction(actions.format_borders_2) self.addAction(actions.format_borders_4) self.addAction(actions.format_borders_8) self.addAction(actions.format_borders_16) self.addAction(actions.format_borders_32) self.addAction(actions.format_borders_64) class GridContextMenu(QMenu): """Context menu for grid""" def __init__(self, actions): super().__init__() self.addAction(actions.cut) self.addAction(actions.copy) self.addAction(actions.copy_results) self.addAction(actions.paste) self.addAction(actions.paste_as) self.addSeparator() self.addAction(actions.quote) self.addSeparator() self.addAction(actions.insert_rows) self.addAction(actions.insert_columns) self.addAction(actions.insert_table) self.addSeparator() self.addAction(actions.delete_rows) self.addAction(actions.delete_columns) self.addAction(actions.delete_table) class HorizontalHeaderContextMenu(QMenu): """Context menu for horizontal grid header""" def __init__(self, actions): super().__init__() self.addAction(actions.insert_columns) self.addAction(actions.delete_columns) class VerticalHeaderContextMenu(QMenu): """Context menu for vertical grid header""" def __init__(self, actions): super().__init__() self.addAction(actions.insert_rows) self.addAction(actions.delete_rows) class TableChoiceContextMenu(QMenu): """Context menu for table choice""" def __init__(self, actions): super().__init__() self.addAction(actions.insert_table) self.addAction(actions.delete_table) class ToolbarManagerMenu(QMenu): """Menu with all actions of a toolbar that allows toggling visibility""" def __init__(self, toolbar): super().__init__() self.toolbar = toolbar for action in toolbar.actions(): if action.isSeparator(): self.addSeparator() else: self.addAction(self._get_toggle_action(action)) self.update_checked_states() def _get_toggle_action(self, action): """Returns a toggle actions for a QAction instance""" taction = QAction(action.icon(), action.text(), action, checkable=True) taction.triggered.connect(partial(self.on_toggled, action)) return taction def update_checked_states(self): """Updates checked states""" for tool_action, action in zip(self.toolbar.actions(), self.actions()): action.setChecked(tool_action.isVisible()) def on_toggled(self, action, toggled): """Action toggle event handler""" action.setVisible(toggled) pyspread-1.99.0.1/src/interfaces/0000755000175000017500000000000013604465725016342 5ustar andreasandreaspyspread-1.99.0.1/src/interfaces/pys.py0000644000175000017500000003735513600131213017516 0ustar andreasandreas#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ pys === This file contains interfaces to the native pys file format. It is split into the following sections * shape * code * attributes * row_heights * col_widths * macros """ from builtins import str, map, object import ast from base64 import b64decode, b85encode from collections import OrderedDict from src.lib.selection import Selection def wxcolor2rgb(wxcolor): """Returns rtg tuple for given wxPython binary color value""" red = wxcolor >> 16 green = wxcolor - (red << 16) >> 8 blue = wxcolor - (red << 16) - (green << 8) return red, green, blue wx2qt_fontweights = { 90: 50, # wx.FONTWEIGHT_NORMAL 91: 25, # wx.FONTWEIGHT_LIGHT 92: 75, # wx.FONTWEIGHT_BOLD 93: 87, # wx.FONTWEIGHT_MAX } wx2qt_fontstyles = { 90: 0, # wx.FONTSTYLE_NORMAL 93: 1, # wx.FONTSTYLE_ITALIC 94: 1, # wx.FONTSTYLE_SLANT 95: 2, # wx.FONTSTYLE_MAX } class PysReader: """Reads pys v2.0 file into a code_array""" def __init__(self, pys_file, code_array): self.pys_file = pys_file self.code_array = code_array self._section2reader = { "[Pyspread save file version]\n": self._pys_version, "[shape]\n": self._pys2shape, "[grid]\n": self._pys2code, "[attributes]\n": self._pys2attributes, "[row_heights]\n": self._pys2row_heights, "[col_widths]\n": self._pys2col_widths, "[macros]\n": self._pys2macros, } def __iter__(self): """Iterates over self.pys_file, replacing everything in code_array""" state = None # Reset pys_file to start to enable multiple calls of this method self.pys_file.seek(0) for line in self.pys_file: line = line.decode("utf8") if line in self._section2reader: state = line elif state is not None: self._section2reader[state](line) yield line # Decorators def version_handler(method): """Chooses method`_10` of method if version < 2.0""" def new_method(self, *args, **kwargs): if self.version <= 1.0: method10 = getattr(self, method.__name__+"_10") method10(*args, **kwargs) else: method(self, *args, **kwargs) return new_method # Helpers def _split_tidy(self, string, maxsplit=None): """Rstrips string for \n and splits string for \t""" if maxsplit is None: return string.rstrip("\n").split("\t") else: return string.rstrip("\n").split("\t", maxsplit) def _get_key(self, *keystrings): """Returns int key tuple from key string list""" return tuple(map(int, keystrings)) # Sections def _pys_version(self, line): """pys file version including assertion""" self.version = float(line.strip()) if self.version > 2.0: # Abort if file version not supported msg = "File version {version} unsupported (> 2.0)." raise ValueError(msg.format(version=line.strip())) def _pys2shape(self, line): """Updates shape in code_array""" shape = self._get_key(*self._split_tidy(line)) if any(dim <= 0 for dim in shape): # Abort if any axis is 0 or less msg = "Code array has invalid shape {shape}." raise ValueError(msg.format(shape=shape)) self.code_array.shape = shape def _code_convert_1_2(self, key, code): """Converts chart and image code from v1.0 to v2.0""" def get_image_code(image_data, width, height): """Returns code string for v2.0""" image_buffer_tpl = 'bz2.decompress(base64.b85decode({data}))' image_array_tpl = 'numpy.frombuffer({buffer}, dtype="uint8")' image_matrix_tpl = '{array}.reshape({height}, {width}, 3)' image_buffer = image_buffer_tpl.format(data=image_data) image_array = image_array_tpl.format(buffer=image_buffer) image_matrix = image_matrix_tpl.format(array=image_array, height=height, width=width) return image_matrix start_str = "bz2.decompress(base64.b64decode('" size_start_str = "wx.ImageFromData(" if size_start_str in code and start_str in code: size_start = code.index(size_start_str) + len(size_start_str) size_str_list = code[size_start:].split(",")[:2] width, height = tuple(map(int, size_str_list)) # We have a cell that displays a bitmap data_start = code.index(start_str) + len(start_str) data_stop = code.find("'", data_start) enc_data = bytes(code[data_start:data_stop], encoding='utf-8') compressed_image_data = b64decode(enc_data) reenc_data = b85encode(compressed_image_data) code = get_image_code(repr(reenc_data), width, height) selection = Selection([], [], [], [], [(key[0], key[1])]) tab = key[2] attrs = {"renderer": "image"} self.code_array.cell_attributes.append((selection, tab, attrs)) if "charts.ChartFigure(" in code: # We have a matplotlib figure selection = Selection([], [], [], [], [(key[0], key[1])]) tab = key[2] attrs = {"renderer": "matplotlib"} self.code_array.cell_attributes.append((selection, tab, attrs)) return code def _pys2code_10(self, line): """Updates code in pys code_array - for save file version 1.0""" row, col, tab, code = self._split_tidy(line, maxsplit=3) key = self._get_key(row, col, tab) self.code_array.dict_grid[key] = str(self._code_convert_1_2(key, code)) @version_handler def _pys2code(self, line): """Updates code in pys code_array""" row, col, tab, code = self._split_tidy(line, maxsplit=3) key = self._get_key(row, col, tab) self.code_array.dict_grid[key] = ast.literal_eval(code) def _attr_convert_1to2(self, key, value): """Converts key, value attribute pair from v1.0 to v2.0""" color_attrs = ["bordercolor_bottom", "bordercolor_right", "bgcolor", "textcolor"] if key in color_attrs: return key, wxcolor2rgb(value) elif key == "fontweight": return key, wx2qt_fontweights[value] elif key == "fontstyle": return key, wx2qt_fontstyles[value] elif key == "markup" and value: return "renderer", "markup" elif key == "merge_area": # Value in v1.0 None if the cell was merged # In v 2.0 this is no longer necessary return None, value # Update justifiaction and alignment values elif key in ["vertical_align", "justification"]: just_align_value_tansitions = { "left": "justify_left", "center": "justify_center", "right": "justify_right", "top": "align_top", "middle": "align_center", "bottom": "align_bottom", } return key, just_align_value_tansitions[value] return key, value def _pys2attributes_10(self, line): """Updates attributes in code_array - for save file version 1.0""" splitline = self._split_tidy(line) selection_data = list(map(ast.literal_eval, splitline[:5])) selection = Selection(*selection_data) tab = int(splitline[5]) attrs = {} old_merged_cells = {} for col, ele in enumerate(splitline[6:]): if not (col % 2): # Odd entries are keys key = ast.literal_eval(ele) else: # Even cols are values value = ast.literal_eval(ele) # Convert old wx color values and merged cells key_, value_ = self._attr_convert_1to2(key, value) if key_ is None and value_ is not None: # We have a merged cell old_merged_cells[value_[:2]] = value_ try: attrs.pop("merge_area") except KeyError: pass attrs[key_] = value_ self.code_array.cell_attributes.append((selection, tab, attrs)) for key in old_merged_cells: selection = Selection([], [], [], [], [key]) attrs = {"merge_area": old_merged_cells[key]} self.code_array.cell_attributes.append((selection, tab, attrs)) old_merged_cells.clear() @version_handler def _pys2attributes(self, line): """Updates attributes in code_array""" splitline = self._split_tidy(line) selection_data = list(map(ast.literal_eval, splitline[:5])) selection = Selection(*selection_data) tab = int(splitline[5]) attrs = {} for col, ele in enumerate(splitline[6:]): if not (col % 2): # Odd entries are keys key = ast.literal_eval(ele) else: # Even cols are values value = ast.literal_eval(ele) attrs[key] = value self.code_array.cell_attributes.append((selection, tab, attrs)) def _pys2row_heights(self, line): """Updates row_heights in code_array""" # Split with maxsplit 3 split_line = self._split_tidy(line) key = row, tab = self._get_key(*split_line[:2]) height = float(split_line[2]) shape = self.code_array.shape try: if row < shape[0] and tab < shape[2]: self.code_array.row_heights[key] = height except ValueError: pass def _pys2col_widths(self, line): """Updates col_widths in code_array""" # Split with maxsplit 3 split_line = self._split_tidy(line) key = col, tab = self._get_key(*split_line[:2]) width = float(split_line[2]) shape = self.code_array.shape try: if col < shape[1] and tab < shape[2]: self.code_array.col_widths[key] = width except ValueError: pass def _pys2macros(self, line): """Updates macros in code_array""" self.code_array.macros += line class PysWriter(object): """Interface between code_array and pys file data Iterating over it yields a pys file lines Parameters ---------- code_array: model.CodeArray object \tThe code_array object data structure """ def __init__(self, code_array): self.code_array = code_array self.version = 2.0 self._section2writer = OrderedDict([ ("[Pyspread save file version]\n", self._version2pys), ("[shape]\n", self._shape2pys), ("[grid]\n", self._code2pys), ("[attributes]\n", self._attributes2pys), ("[row_heights]\n", self._row_heights2pys), ("[col_widths]\n", self._col_widths2pys), ("[macros]\n", self._macros2pys), ]) def __iter__(self): """Yields a pys_file line wise from code_array""" for key in self._section2writer: yield key for line in self._section2writer[key](): yield line def __len__(self): """Returns how many lines will be written when saving the code_array""" lines = 9 # Headers + 1 line version + 1 line shape lines += len(self.code_array.dict_grid) lines += len(self.code_array.cell_attributes) lines += len(self.code_array.dict_grid.row_heights) lines += len(self.code_array.dict_grid.col_widths) lines += self.code_array.dict_grid.macros.count('\n') return lines def _version2pys(self): """Writes pys file version to pys file Format: \n """ yield repr(self.version) + "\n" def _shape2pys(self): """Writes shape to pys file Format: \t\t\n """ yield u"\t".join(map(str, self.code_array.shape)) + u"\n" def _code2pys(self): """Writes code to pys file Format: \t\t\t\n """ for key in self.code_array: key_str = u"\t".join(repr(ele) for ele in key) if self.version <= 1.0: code_str = self.code_array(key) else: code_str = repr(self.code_array(key)) out_str = key_str + u"\t" + code_str + u"\n" yield out_str def _attributes2pys(self): """Writes attributes to pys file Format: \t[...]\t\t\t\t[...]\n """ # Remove doublettes purged_cell_attributes = [] purged_cell_attributes_keys = [] for selection, tab, attr_dict in self.code_array.cell_attributes: if purged_cell_attributes_keys and \ (selection, tab) == purged_cell_attributes_keys[-1]: purged_cell_attributes[-1][2].update(attr_dict) else: purged_cell_attributes_keys.append((selection, tab)) purged_cell_attributes.append([selection, tab, attr_dict]) for selection, tab, attr_dict in purged_cell_attributes: sel_list = [selection.block_tl, selection.block_br, selection.rows, selection.cols, selection.cells] tab_list = [tab] attr_dict_list = [] for key in attr_dict: attr_dict_list.append(key) attr_dict_list.append(attr_dict[key]) line_list = list(map(repr, sel_list + tab_list + attr_dict_list)) yield u"\t".join(line_list) + u"\n" def _row_heights2pys(self): """Writes row_heights to pys file Format: \t\t\n """ for row, tab in self.code_array.dict_grid.row_heights: if row < self.code_array.shape[0] and \ tab < self.code_array.shape[2]: height = self.code_array.dict_grid.row_heights[(row, tab)] height_strings = list(map(repr, [row, tab, height])) yield u"\t".join(height_strings) + u"\n" def _col_widths2pys(self): """Writes col_widths to pys file Format: \t\t\n """ for col, tab in self.code_array.dict_grid.col_widths: if col < self.code_array.shape[1] and \ tab < self.code_array.shape[2]: width = self.code_array.dict_grid.col_widths[(col, tab)] width_strings = list(map(repr, [col, tab, width])) yield u"\t".join(width_strings) + u"\n" def _macros2pys(self): """Writes macros to pys file Format: \n """ macros = self.code_array.dict_grid.macros yield macros pyspread-1.99.0.1/src/interfaces/__init__.py0000644000175000017500000000000013551171371020431 0ustar andreasandreaspyspread-1.99.0.1/src/settings.py0000644000175000017500000002021513604457557016435 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- from os.path import abspath, dirname, join from pathlib import Path from PyQt5.QtCore import QSettings from PyQt5.QtWidgets import QToolBar from src import VERSION, APP_NAME PYSPREAD_PATH = Path(abspath(join(dirname(__file__), ".."))) TUTORIAL_PATH = PYSPREAD_PATH / "share/doc/tutorial.html" MANUAL_PATH = PYSPREAD_PATH / "share/doc/manual/manual.html" class Settings: """Contains all global application states.""" # Note that `safe_mode` is not listed here but inside # :class:`model.model.DataArray` # Names of widgets with persistant states widget_names = ["main_window", "main_toolbar", "find_toolbar", "format_toolbar", "macro_toolbar", "entry_line", "main_splitter"] # Shape of initial grid (rows, columns, tables) shape = 1000, 100, 3 # Maximum shape of the grid maxshape = 1000000, 100000, 100 # If `True` then File actions trigger a dialog changed_since_save = False # Initial :class:`~pathlib.Path` for opening files last_file_input_path = Path.home() # Initial :class:`~pathlib.Path` for saving files last_file_output_path = Path.home() # Maximum number of files in file history max_file_history = 5 # Maximum number of files in file history file_history = [] # The state of the border choice button border_choice = "All borders" # Timeout for cell calculations in milliseconds timeout = 1000 # Timeout for frozen cell updates in milliseconds refresh_timeout = 1000 # Key for signing save files signature_key = None font_sizes = (6, 8, 10, 12, 14, 16, 18, 20, 24, 28, 32) zoom_levels = (0.4, 0.5, 0.6, 0.7, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.5, 3.0, 3.5, 4.0, 5.0, 6.0, 8.0) # If `True` then frozen cell background is striped show_frozen = False # Find dialog state - needs to be stored when dialog is closed find_dialog_state = None # Number of bytes for csv sniffer # sniff_size should be larger than 1st+2nd line sniff_size = 65536 # TODO def __init__(self, parent): super().__setattr__("parent", parent) def __setattr__(self, key, value): if not hasattr(self, key): raise AttributeError("{self} has no attribute {key}.".format( self=self, key=key)) super().__setattr__(key, value) def add_to_file_history(self, filename): """Adds new file to history""" self.file_history = [f for f in self.file_history if f != filename] self.file_history.insert(0, filename) self.file_history = self.file_history[:self.max_file_history] def reset(self): cls_attrs = (attr for attr in dir(self) if (not attr.startswith("__") and attr not in ("reset", "parent", "save", "restore"))) for cls_attr in cls_attrs: setattr(self, cls_attr, getattr(Settings, cls_attr)) def save(self): """Saves application state to QSettings""" settings = QSettings(APP_NAME, APP_NAME) # Application state # Do not store the actual filename. Otherwise, after saving and closing # File -> Save would overwrite the last saved file. settings.setValue("last_file_input_path", self.last_file_input_path.parent) if self.last_file_output_path is not None: settings.setValue("last_file_output_path", self.last_file_output_path.parent) settings.setValue("max_file_history", self.max_file_history) settings.value("file_history", [], 'QStringList') if self.file_history: settings.setValue("file_history", self.file_history) settings.setValue("timeout", self.timeout) settings.setValue("refresh_timeout", self.refresh_timeout) settings.setValue("signature_key", self.signature_key) # GUI state for widget_name in self.widget_names: if widget_name == "main_window": widget = self.parent else: widget = getattr(self.parent, widget_name) # geometry geometry_name = widget_name + '/geometry' try: settings.setValue(geometry_name, widget.saveGeometry()) except AttributeError: pass # state widget_state_name = widget_name + '/windowState' try: settings.setValue(widget_state_name, widget.saveState()) except AttributeError: pass if isinstance(widget, QToolBar): toolbar_visibility_name = widget_name + '/visibility' settings.value(toolbar_visibility_name, [], bool) settings.setValue(toolbar_visibility_name, [a.isVisible() for a in widget.actions()]) if widget_name == "entry_line": settings.setValue("entry_line_isvisible", widget.isVisible()) settings.sync() def restore(self): """Restores application state from QSettings""" settings = QSettings(APP_NAME, APP_NAME) def setting2attr(setting_name, attr=None, mapper=None): """Sets attr to mapper()""" value = settings.value(setting_name) if value is None: return if attr is None: attr = setting_name if mapper is None: def mapper(x): return x setattr(self, attr, mapper(value)) # Application state setting2attr("last_file_input_path") setting2attr("last_file_output_path") setting2attr("max_file_history", mapper=int) setting2attr("file_history") setting2attr("timeout", mapper=int) setting2attr("refresh_timeout", mapper=int) setting2attr("signature_key") # GUI state for widget_name in self.widget_names: geometry_name = widget_name + '/geometry' widget_state_name = widget_name + '/windowState' if widget_name == "main_window": widget = self.parent else: widget = getattr(self.parent, widget_name) geometry = settings.value(geometry_name) if geometry: widget.restoreGeometry(geometry) widget_state = settings.value(widget_state_name) if widget_state: widget.restoreState(widget_state) if isinstance(widget, QToolBar): toolbar_visibility_name = widget_name + '/visibility' visibility = settings.value(toolbar_visibility_name) if visibility is not None: for is_visible, action in zip(visibility, widget.actions()): action.setVisible(is_visible == 'true') manager_button = widget.widgetForAction(widget.actions()[-1]) manager_button.menu().update_checked_states() if widget_name == "entry_line" \ and settings.value("entry_line_isvisible") is not None: visible = settings.value("entry_line_isvisible") == "true" widget.setVisible(visible) pyspread-1.99.0.1/src/commands.py0000644000175000017500000004677213604123614016376 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ Pyspread undoable commands **Provides** * :class:`CommandSetGridSize` * :class:`CommandSetCellCode` * :class:`CommandSetCellFormat` * :class:`CommandSetCellMerge` * :class:`CommandSetCellRenderer` * :class:`CommandSetCellTextAlignment` * :class:`CommandSetColumnWidth` * :class:`CommandSetRowHeight` """ from copy import copy from PyQt5.QtCore import Qt, QModelIndex from PyQt5.QtWidgets import QUndoCommand from src.lib.selection import Selection from src.widgets import CellButton class CommandSetGridSize(QUndoCommand): """Sets size of grid""" def __init__(self, grid, old_shape, new_shape, description): super().__init__(description) self.grid = grid self.old_shape = old_shape self.new_shape = new_shape self.deleted_cells = {} # Storage dict for deleted cells def redo(self): """Changes grid size and deletes cell code outside the new shape Cell formats are not deleted. """ model = self.grid.model code_array = model.code_array rows, columns, tables = self.new_shape shape_selection = Selection([(0, 0)], [(rows, columns)], [], [], []) for row, column, table in code_array.keys(): if not (table < tables and (row, column) in shape_selection): # Code outside grid shape. Delete it and store cell data key = row, column, table self.deleted_cells[key] = code_array.pop(key) # Now change the shape self.grid.model.shape = self.new_shape def undo(self): """Restores grid size and adds cell code outside the old shape Cell formats are not affected. """ model = self.grid.model model.shape = self.old_shape for row, column, table in self.deleted_cells: index = model.index(row, column, QModelIndex()) code = self.deleted_cells[(row, column, table)] model.setData(index, code, Qt.EditRole, raw=True, table=table) class CommandSetCellCode(QUndoCommand): """Sets cell code in grid""" def __init__(self, code, model, index, description): super().__init__(description) self.description = description self.model = model self.indices = [index] self.old_codes = [model.code(index)] self.new_codes = [code] def id(self): return 1 # Enable command merging def mergeWith(self, other): if self.description != other.description: return False self.new_codes += other.new_codes self.old_codes += other.old_codes self.indices += other.indices return True def redo(self): with self.model.main_window.entry_line.disable_highlighter(): for index, new_code in zip(self.indices, self.new_codes): self.model.setData(index, new_code, Qt.EditRole, raw=True) self.model.dataChanged.emit(QModelIndex(), QModelIndex()) def undo(self): with self.model.main_window.entry_line.disable_highlighter(): for index, old_code in zip(self.indices, self.old_codes): self.model.setData(index, old_code, Qt.EditRole, raw=True) self.model.dataChanged.emit(QModelIndex(), QModelIndex()) class CommandSetRowsHeight(QUndoCommand): """Sets rows height in grid""" def __init__(self, grid, rows, table, old_height, new_height, description): super().__init__(description) self.grid = grid self.rows = rows self.table = table self.old_height = old_height self.new_height = new_height self.default_size = self.grid.verticalHeader().defaultSectionSize() def id(self): return 2 # Enable command merging def mergeWith(self, other): if self.rows != other.rows: return False self.new_height = other.new_height return True def redo(self): for row in self.rows: if self.new_height != self.default_size: self.grid.model.code_array.row_heights[(row, self.table)] = \ self.new_height / self.grid.zoom if self.grid.rowHeight(row) != self.new_height: with self.grid.undo_resizing_row(): self.grid.setRowHeight(row, self.new_height) def undo(self): for row in self.rows: if self.old_height == self.default_size: self.grid.model.code_array.row_heights.pop((row, self.table)) else: self.grid.model.code_array.row_heights[(row, self.table)] = \ self.old_height / self.grid.zoom if self.grid.rowHeight(row) != self.old_height: with self.grid.undo_resizing_row(): self.grid.setRowHeight(row, self.old_height) class CommandSetColumnsWidth(QUndoCommand): """Sets column width in grid""" def __init__(self, grid, columns, table, old_width, new_width, description): super().__init__(description) self.grid = grid self.columns = columns self.table = table self.old_width = old_width self.new_width = new_width self.default_size = self.grid.horizontalHeader().defaultSectionSize() def id(self): return 3 # Enable command merging def mergeWith(self, other): if self.columns != other.columns: return False self.new_width = other.new_width return True def redo(self): for column in self.columns: if self.new_width != self.default_size: self.grid.model.code_array.col_widths[(column, self.table)] =\ self.new_width / self.grid.zoom if self.grid.columnWidth(column) != self.new_width: with self.grid.undo_resizing_column(): self.grid.setColumnWidth(column, self.new_width) def undo(self): for column in self.columns: if self.old_width == self.default_size: self.grid.model.code_array.col_widths.pop((column, self.table)) else: self.grid.model.code_array.col_widths[(column, self.table)] =\ self.old_width / self.grid.zoom if self.grid.columnWidth(column) != self.old_width: with self.grid.undo_resizing_column(): self.grid.setColumnWidth(column, self.old_width) class CommandInsertRows(QUndoCommand): """Inserts grid rows""" def __init__(self, grid, model, index, row, count, description): super().__init__(description) self.grid = grid self.model = model self.index = index self.first = self.row = row self.last = row + count self.count = count def redo(self): with self.model.inserting_rows(self.index, self.first, self.last): self.model.insertRows(self.row, self.count) self.grid.table_choice.on_table_changed(self.grid.current) def undo(self): with self.model.removing_rows(self.index, self.first, self.last): self.model.removeRows(self.row, self.count) self.grid.table_choice.on_table_changed(self.grid.current) class CommandDeleteRows(QUndoCommand): """Deletes grid rows""" def __init__(self, grid, model, index, row, count, description): super().__init__(description) self.grid = grid self.model = model self.index = index self.first = self.row = row self.last = row + count self.count = count def redo(self): # Store content of deleted rows self.old_row_heights = copy(self.model.code_array.row_heights) self.old_cell_attributes = copy(self.model.code_array.cell_attributes) self.old_code = {} rows = list(range(self.first, self.last+1)) selection = Selection([], [], rows, [], []) for key in selection.cell_generator(self.model.shape, self.grid.table): self.old_code[key] = self.model.code_array(key) with self.model.removing_rows(self.index, self.first, self.last): self.model.removeRows(self.row, self.count) self.grid.table_choice.on_table_changed(self.grid.current) def undo(self): with self.model.inserting_rows(self.index, self.first, self.last): self.model.insertRows(self.row, self.count) self.model.code_array.dict_grid.row_heights = self.old_row_heights self.model.code_array.dict_grid.cell_attributes = \ self.old_cell_attributes for key in self.old_code: self.model.code_array[key] = self.old_code[key] self.grid.table_choice.on_table_changed(self.grid.current) class CommandInsertColumns(QUndoCommand): """Inserts grid columns""" def __init__(self, grid, model, index, column, count, description): super().__init__(description) self.grid = grid self.model = model self.index = index self.column = column self.first = self.column = column self.last = column + count self.count = count def redo(self): with self.model.inserting_columns(self.index, self.first, self.last): self.model.insertColumns(self.column, self.count) self.grid.table_choice.on_table_changed(self.grid.current) def undo(self): with self.model.removing_rows(self.index, self.first, self.last): self.model.removeColumns(self.column, self.count) self.grid.table_choice.on_table_changed(self.grid.current) class CommandDeleteColumns(QUndoCommand): """Deletes grid columns""" def __init__(self, grid, model, index, column, count, description): super().__init__(description) self.grid = grid self.model = model self.index = index self.column = column self.first = self.column = column self.last = column + count self.count = count def redo(self): # Store content of deleted columns self.old_col_widths = copy(self.model.code_array.col_widths) self.old_cell_attributes = copy(self.model.code_array.cell_attributes) self.old_code = {} columns = list(range(self.first, self.last+1)) selection = Selection([], [], [], columns, []) for key in selection.cell_generator(self.model.shape, self.grid.table): self.old_code[key] = self.model.code_array(key) with self.model.removing_columns(self.index, self.first, self.last): self.model.removeColumns(self.column, self.count) self.grid.table_choice.on_table_changed(self.grid.current) def undo(self): with self.model.inserting_columns(self.index, self.first, self.last): self.model.insertColumns(self.column, self.count) self.model.code_array.dict_grid.col_widths = self.old_col_widths self.model.code_array.dict_grid.cell_attributes = \ self.old_cell_attributes for key in self.old_code: self.model.code_array[key] = self.old_code[key] self.grid.table_choice.on_table_changed(self.grid.current) class CommandInsertTable(QUndoCommand): """Inserts table""" def __init__(self, grid, model, table, description): super().__init__(description) self.grid = grid self.model = model self.table = table def redo(self): with self.grid.undo_resizing_row(): with self.grid.undo_resizing_column(): self.model.insertTable(self.table) self.grid.table_choice.on_table_changed(self.grid.current) def undo(self): with self.grid.undo_resizing_row(): with self.grid.undo_resizing_column(): self.model.removeTable(self.table) self.grid.table_choice.on_table_changed(self.grid.current) class CommandDeleteTable(QUndoCommand): """Deletes table""" def __init__(self, grid, model, table, description): super().__init__(description) self.grid = grid self.model = model self.table = table def redo(self): # Store content of deleted table self.old_row_heights = copy(self.model.code_array.row_heights) self.old_col_widths = copy(self.model.code_array.col_widths) self.old_cell_attributes = copy(self.model.code_array.cell_attributes) self.old_code = {} for key in self.model.code_array: if key[2] == self.table: self.old_code[key] = self.model.code_array(key) with self.grid.undo_resizing_row(): with self.grid.undo_resizing_column(): self.model.removeTable(self.table) self.grid.table_choice.on_table_changed(self.grid.current) def undo(self): with self.grid.undo_resizing_row(): with self.grid.undo_resizing_column(): self.model.insertTable(self.table) self.model.code_array.dict_grid.row_heights = \ self.old_row_heights self.model.code_array.dict_grid.col_widths = \ self.old_col_widths self.model.code_array.dict_grid.cell_attributes = \ self.old_cell_attributes for key in self.old_code: self.model.code_array[key] = self.old_code[key] self.grid.table_choice.on_table_changed(self.grid.current) class CommandSetCellFormat(QUndoCommand): """Sets cell format in grid""" def __init__(self, attr, model, index, selected_idx, description): super().__init__(description) self.attr = attr self.model = model self.index = index self.selected_idx = selected_idx def redo(self): self.model.setData(self.selected_idx, self.attr, Qt.DecorationRole) self.model.dataChanged.emit(QModelIndex(), QModelIndex()) def undo(self): self.model.code_array.cell_attributes.pop() self.model.dataChanged.emit(QModelIndex(), QModelIndex()) class CommandSetCellMerge(CommandSetCellFormat): """Sets cell merges in grid""" def redo(self): self.model.setData(self.selected_idx, self.attr, Qt.DecorationRole) self.model.main_window.grid.update_cell_spans() self.model.dataChanged.emit(QModelIndex(), QModelIndex()) def undo(self): self.model.code_array.cell_attributes.pop() self.model.main_window.grid.update_cell_spans() self.model.dataChanged.emit(QModelIndex(), QModelIndex()) class CommandSetCellTextAlignment(CommandSetCellFormat): """Sets cell text alignment in grid""" def redo(self): self.model.setData(self.selected_idx, self.attr, Qt.TextAlignmentRole) self.model.dataChanged.emit(QModelIndex(), QModelIndex()) class CommandFreezeCell(QUndoCommand): """Freezes cell in grid""" def __init__(self, model, current, description): super().__init__(description) self.model = model self.current = current def redo(self): row, column, table = self.current # Add frozen cache content res_obj = self.model.code_array[self.current] self.model.code_array.frozen_cache[repr(self.current)] = res_obj # Set the frozen state selection = Selection([], [], [], [], [(row, column)]) attr = selection, table, {"frozen": True} self.model.setData([], attr, Qt.DecorationRole) self.model.dataChanged.emit(QModelIndex(), QModelIndex()) def undo(self): self.model.code_array.frozen_cache.pop(repr(self.current)) self.model.code_array.cell_attributes.pop() self.model.dataChanged.emit(QModelIndex(), QModelIndex()) class CommandThawCell(CommandFreezeCell): """Thaw (unfreezes) cell in grid""" def redo(self): row, column, table = current = self.current # Remove and store frozen cache content self.res_obj = self.model.code_array.frozen_cache.pop(repr(current)) # Remove the frozen state selection = Selection([], [], [], [], [(row, column)]) attr = selection, table, {"frozen": False} self.model.setData([], attr, Qt.DecorationRole) self.model.dataChanged.emit(QModelIndex(), QModelIndex()) def undo(self): self.model.code_array.frozen_cache[repr(self.current)] = self.res_obj self.model.code_array.cell_attributes.pop() self.model.dataChanged.emit(QModelIndex(), QModelIndex()) class CommandSetCellRenderer(QUndoCommand): """Sets cell renderer in grid""" def __init__(self, attr, model, entry_line, highlighter_document, index, selected_idx, description): super().__init__(description) self.attr = attr self.model = model self.entry_line = entry_line self.new_highlighter_document = highlighter_document self.old_highlighter_document = self.entry_line.highlighter.document() self.index = index self.selected_idx = selected_idx def redo(self): self.model.setData(self.selected_idx, self.attr, Qt.DecorationRole) self.entry_line.highlighter.setDocument(self.new_highlighter_document) self.model.dataChanged.emit(self.index, self.index) def undo(self): self.model.code_array.cell_attributes.pop() self.entry_line.highlighter.setDocument(self.old_highlighter_document) self.model.dataChanged.emit(self.index, self.index) class CommandMakeButtonCell(QUndoCommand): """Makes a button cell""" def __init__(self, grid, text, index, description): super().__init__(description) self.grid = grid self.text = text self.index = index self.key = self.index.row(), self.index.column(), self.grid.table def redo(self): attr = self.grid.model.code_array.cell_attributes[self.key] attr["button_cell"] = self.text button = CellButton(self.text, self.grid, self.key) self.grid.setIndexWidget(self.index, button) def undo(self): attr = self.grid.model.code_array.cell_attributes[self.key] attr["button_cell"] = False self.grid.setIndexWidget(self.index, None) class CommandRemoveButtonCell(QUndoCommand): """Removes a button cell""" def __init__(self, grid, index, description): super().__init__(description) self.grid = grid self.text = None self.index = index self.key = self.index.row(), self.index.column(), self.grid.table def redo(self): attr = self.grid.model.code_array.cell_attributes[self.key] self.text = attr["button_cell"] attr["button_cell"] = False self.grid.setIndexWidget(self.index, None) def undo(self): attr = self.grid.model.code_array.cell_attributes[self.key] attr["button_cell"] = self.text button = CellButton(self.text, self.grid, self.key) self.grid.setIndexWidget(self.index, button) pyspread-1.99.0.1/src/test/0000755000175000017500000000000013604465726015177 5ustar andreasandreaspyspread-1.99.0.1/src/test/test_actions.py0000644000175000017500000001027413600720515020236 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ test_actions ============ Unit tests for actions in pyspread """ from contextlib import contextmanager from os import chmod from pathlib import Path import py.test as pytest from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QApplication from src.pyspread import MainWindow class TestActions: """Unit tests for file actions The tests launch a hidden application instance and check if the actions behave as they should from a user perspective. """ def setup_method(self): """Sets up a basic pyspread instance""" self.app = QApplication([]) class Args: file = None self.main_window = MainWindow(self.app, Args(), unit_test=True) def teardown_method(self): """Sets up a basic pyspread instance as self.app""" self.app.quit() param_test_file_new = [ ((1, 1, 1), (1, 1, 1)), ((0, 0, 0), (1000, 100, 3)), ((9999999999, 0, 0), (1000, 100, 3)), ((1000000, 10000, 10), (1000000, 10000, 10)), ((1000, 100, 3), (1000, 100, 3)), ] @pytest.mark.parametrize("shape, res", param_test_file_new) def test_file_new(self, shape, res): """Unit test for File -> New""" self.main_window.unit_test_data = shape self.main_window.main_window_actions.new.trigger() assert self.main_window.grid.model.shape == res param_test_file_open = [ ("test.pysu", True, False, "fig"), ("test.pysu", False, True, "fig"), ("test_invalid1.pysu", False, True, None), ("test_invalid2.pysu", False, True, None), ("xxx", False, False, None), ] @pytest.mark.parametrize("infilename, signed, safe_mode, res", param_test_file_open) def test_file_open(self, infilename, signed, safe_mode, res): """Unit test for File -> Open""" infilepath = Path(__file__).parent / infilename self.main_window.unit_test_data = infilepath @contextmanager def signature(): if signed: # Create signature self.main_window.safe_mode = False self.main_window.workflows.sign_file(infilepath) self.main_window.safe_mode = safe_mode yield if signed: # Remove signature sigpath = infilepath.with_suffix(infilepath.suffix + '.sig') sigpath.unlink() with signature(): self.main_window.main_window_actions.open.trigger() code_array = self.main_window.grid.model.code_array if res is None: assert code_array((2, 1, 0)) is res else: assert code_array((2, 1, 0)).startswith(res) assert self.main_window.safe_mode == safe_mode def test_file_save(self): """Unit test for File -> Save""" grid = self.main_window.grid grid.model.setData(grid.currentIndex(), "'Test'", Qt.EditRole) assert self.main_window.settings.changed_since_save save_path = Path(__file__).parent / "save_test1.pysu" self.main_window.settings.last_file_input_path = save_path self.main_window.main_window_actions.save.trigger() assert save_path.with_suffix(save_path.suffix + ".sig").exists() save_path.with_suffix(save_path.suffix + ".sig").unlink() save_path.unlink() pyspread-1.99.0.1/src/test/test_invalid1.pysu0000600000175000017500000000143013575752523020656 0ustar andreasandreas[Pyspread save file version] 2.0 [shape] 0 100 3 [grid] 2 1 0 "fig = Figure()\nax = fig.add_axes([.2,.2, .7, .7])\n\n# Data for plotting\nt = numpy.arange(0.0, 2.0, 0.01)\ns = 1 + numpy.sin(2 * numpy.pi * t)\n\nax.plot(t, s)\n\nax.set(xlabel='Time (s)', ylabel='Voltage (mV)',\n title='Line chart')\nax.grid()\n\nfig\n" [attributes] [] [] [] [] [(2, 1)] 0 'merge_area' (2, 1, 11, 4) [] [] [] [] [(2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1), (10, 1), (11, 1), (2, 2), (3, 2), (4, 2), (5, 2), (6, 2), (7, 2), (8, 2), (9, 2), (10, 2), (11, 2), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3), (7, 3), (8, 3), (9, 3), (10, 3), (11, 3), (2, 4), (3, 4), (4, 4), (5, 4), (6, 4), (7, 4), (8, 4), (9, 4), (10, 4), (11, 4)] 0 'renderer' 'matplotlib' [row_heights] [col_widths] [macros] pyspread-1.99.0.1/src/test/test.pysu0000600000175000017500000000143313577147315017071 0ustar andreasandreas[Pyspread save file version] 2.0 [shape] 1000 100 3 [grid] 2 1 0 "fig = Figure()\nax = fig.add_axes([.2,.2, .7, .7])\n\n# Data for plotting\nt = numpy.arange(0.0, 2.0, 0.01)\ns = 1 + numpy.sin(2 * numpy.pi * t)\n\nax.plot(t, s)\n\nax.set(xlabel='Time (s)', ylabel='Voltage (mV)',\n title='Line chart')\nax.grid()\n\nfig\n" [attributes] [] [] [] [] [(2, 1)] 0 'merge_area' (2, 1, 11, 4) [] [] [] [] [(2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1), (10, 1), (11, 1), (2, 2), (3, 2), (4, 2), (5, 2), (6, 2), (7, 2), (8, 2), (9, 2), (10, 2), (11, 2), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3), (7, 3), (8, 3), (9, 3), (10, 3), (11, 3), (2, 4), (3, 4), (4, 4), (5, 4), (6, 4), (7, 4), (8, 4), (9, 4), (10, 4), (11, 4)] 0 'renderer' 'matplotlib' [row_heights] [col_widths] [macros] pyspread-1.99.0.1/src/test/test_invalid2.pysu0000600000175000017500000000143413575752460020663 0ustar andreasandreas[Pyspread save file version] 12.0 [shape] 1000 100 3 [grid] 2 1 0 "fig = Figure()\nax = fig.add_axes([.2,.2, .7, .7])\n\n# Data for plotting\nt = numpy.arange(0.0, 2.0, 0.01)\ns = 1 + numpy.sin(2 * numpy.pi * t)\n\nax.plot(t, s)\n\nax.set(xlabel='Time (s)', ylabel='Voltage (mV)',\n title='Line chart')\nax.grid()\n\nfig\n" [attributes] [] [] [] [] [(2, 1)] 0 'merge_area' (2, 1, 11, 4) [] [] [] [] [(2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1), (10, 1), (11, 1), (2, 2), (3, 2), (4, 2), (5, 2), (6, 2), (7, 2), (8, 2), (9, 2), (10, 2), (11, 2), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3), (7, 3), (8, 3), (9, 3), (10, 3), (11, 3), (2, 4), (3, 4), (4, 4), (5, 4), (6, 4), (7, 4), (8, 4), (9, 4), (10, 4), (11, 4)] 0 'renderer' 'matplotlib' [row_heights] [col_widths] [macros] pyspread-1.99.0.1/src/panels.py0000644000175000017500000001002413570426523016043 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ Window panels * :class:`MacroPanel` """ import ast from io import StringIO from sys import exc_info from traceback import print_exception from PyQt5.QtCore import Qt from PyQt5.QtGui import QColor from PyQt5.QtWidgets import QDialog, QVBoxLayout, QDialogButtonBox, QSplitter from PyQt5.QtWidgets import QTextEdit from src.lib.spelltextedit import SpellTextEdit from src.lib.exception_handling import get_user_codeframe class MacroPanel(QDialog): """The macro panel""" def __init__(self, parent, code_array): super().__init__() self.parent = parent self.code_array = code_array self._init_widgets() self._layout() self.update() self.default_text_color = self.result_viewer.textColor() self.error_text_color = QColor("red") self.button_box.clicked.connect(self.on_apply) def _init_widgets(self): """Inititialize widgets""" self.macro_editor = SpellTextEdit(self) self.result_viewer = QTextEdit(self) self.result_viewer.setReadOnly(True) self.splitter = QSplitter(Qt.Vertical, self) self.splitter.addWidget(self.macro_editor) self.splitter.addWidget(self.result_viewer) self.button_box = QDialogButtonBox(QDialogButtonBox.Apply) def _layout(self): """Layout dialog widgets""" layout = QVBoxLayout(self) layout.addWidget(self.splitter) layout.addWidget(self.button_box) self.setLayout(layout) def _is_invalid_code(self): """Preliminary code check Returns a string with the error message if code is not valid Python. If the code runs without errors, an empty string is retruned. """ try: ast.parse(self.code_array.macros) except Exception as ex: # Grab the traceback and return it stringio = StringIO() excinfo = exc_info() # usr_tb will more than likely be none because ast throws # SytnaxErrors as occurring outside of the current execution frame usr_tb = get_user_codeframe(excinfo[2]) or None print_exception(excinfo[0], excinfo[1], usr_tb, None, stringio) return stringio.getvalue() else: return '' def on_apply(self): """Event handler for Apply button""" self.code_array.macros = self.macro_editor.toPlainText() err = self._is_invalid_code() if err: self.update_result_viewer(err=err) else: self.update_result_viewer(*self.code_array.execute_macros()) self.parent.grid.gui_update() def update(self): """Update macro content""" self.macro_editor.setPlainText(self.code_array.macros) self.on_apply() def update_result_viewer(self, result="", err=""): """Update event result following execution by main window""" self.result_viewer.clear() if result: self.result_viewer.append(result) if err: self.result_viewer.setTextColor(self.error_text_color) self.result_viewer.append(err) self.result_viewer.setTextColor(self.default_text_color) pyspread-1.99.0.1/src/entryline.py0000644000175000017500000000533413604373442016601 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- from contextlib import contextmanager from PyQt5.QtCore import Qt from PyQt5.QtGui import QTextOption from src.commands import CommandSetCellCode from src.lib.spelltextedit import SpellTextEdit class Entryline(SpellTextEdit): """The entry line for pyspread""" def __init__(self, main_window): super().__init__() self.main_window = main_window min_height = self.cursorRect().y() + self.cursorRect().height() + 20 self.setMinimumHeight(min_height) self.setWordWrapMode(QTextOption.WrapAnywhere) # self.setWordWrapMode(QTextOption.NoWrap) self.highlighter.setDocument(self.document()) @contextmanager def disable_highlighter(self): """Disables highlighter""" doc = self.highlighter.document() self.highlighter.setDocument(None) yield self.highlighter.setDocument(doc) def keyPressEvent(self, event): """Key press event filter""" if event.key() in (Qt.Key_Enter, Qt.Key_Return) \ and not event.modifiers() == Qt.ShiftModifier: self.store_data() self.main_window.grid.row += 1 elif event.key() == Qt.Key_Tab: self.store_data() self.main_window.grid.column += 1 else: super().keyPressEvent(event) def store_data(self): """Stores current entry line data in grid model""" index = self.main_window.grid.currentIndex() model = self.main_window.grid.model description = "Set code for cell {}".format(index) command = CommandSetCellCode(self.toPlainText(), model, index, description) self.main_window.undo_stack.push(command) def on_toggle_spell_check(self, signal): """Spell check toggle event handler""" self.highlighter.enable_enchant = True if signal else False pyspread-1.99.0.1/src/__init__.py0000644000175000017500000000014013604442520016307 0ustar andreasandreas# -*- coding: utf-8 -*- APP_NAME = "pyspread" # Current pyspread version VERSION = "1.99.0.1" pyspread-1.99.0.1/src/workflows.py0000644000175000017500000013746113604421645016633 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ Workflows for pyspread """ from ast import literal_eval from base64 import b85encode import bz2 from contextlib import contextmanager from copy import deepcopy import csv from itertools import cycle import io from itertools import takewhile, repeat import os.path from pathlib import Path from shutil import move import sys from tempfile import NamedTemporaryFile from PyQt5.QtCore import Qt, QMimeData, QModelIndex, QBuffer, QRect, QSize from PyQt5.QtGui import QTextDocument, QImage, QPainter from PyQt5.QtWidgets import QApplication, QProgressDialog, QMessageBox from PyQt5.QtWidgets import QInputDialog, QStyleOptionViewItem from PyQt5.QtSvg import QSvgGenerator try: import matplotlib.figure as matplotlib_figure except ImportError: matplotlib_figure = None from src.commands import CommandSetCellCode, CommandSetCellFormat from src.commands import CommandSetGridSize from src.dialogs import DiscardChangesDialog, FileOpenDialog, GridShapeDialog from src.dialogs import FileSaveDialog, ImageFileOpenDialog, ChartDialog from src.dialogs import CellKeyDialog, FindDialog, ReplaceDialog from src.dialogs import CsvFileImportDialog, CsvImportDialog, CsvExportDialog from src.dialogs import CsvExportAreaDialog, CsvFileExportDialog from src.dialogs import SvgExportAreaDialog from src.interfaces.pys import PysReader, PysWriter from src.lib.hashing import sign, verify from src.lib.selection import Selection from src.lib.typechecks import is_svg from src.lib.csv import csv_reader, convert class Workflows: def __init__(self, main_window): self.main_window = main_window @contextmanager def progress_dialog(self, title, label, maximum): """:class:`~contextlib.contextmanager` that displays a progress dialog """ progress_dialog = QProgressDialog(self.main_window) progress_dialog.setWindowTitle(title) progress_dialog.setWindowModality(Qt.WindowModal) progress_dialog.setLabelText(label) progress_dialog.setMaximum(maximum) yield progress_dialog progress_dialog.setValue(maximum) progress_dialog.close() @contextmanager def disable_entryline_updates(self): """Context manager for temporarily disabling the :class:`entryline.Entryline` """ self.main_window.entry_line.setUpdatesEnabled(False) yield self.main_window.entry_line.setUpdatesEnabled(True) def handle_changed_since_save(func, *args, **kwargs): """Decorator to handle changes since last saving the document If changes are present then a dialog is displayed that asks if the changes shall be discarded. - If the user selects `Cancel` then `func` is not executed. - If the user selects `Save` then the file is saved and `func` is executed. - If the user selects `Discard` then the file is not saved and `func` is executed. If no changes are present then `func` is directly executed. After executing `func`, :func:`reset_changed_since_save` and `update_main_window_title` are called. """ def function_wrapper(self, *args, **kwargs): """Check changes and display and handle the dialog""" if self.main_window.settings.changed_since_save: choice = DiscardChangesDialog(self.main_window).choice if choice is None: return elif not choice: # We try to save to a file if self.file_save() is False: # File could not be saved --> Abort return try: func(self, *args, **kwargs) except TypeError: func(self) # No args accepted self.reset_changed_since_save() self.update_main_window_title() return function_wrapper def reset_changed_since_save(self): """Sets changed_since_save to False and updates the window title""" # Change the main window filepath state self.main_window.settings.changed_since_save = False def update_main_window_title(self): """Change the main window title to reflect the current file name""" # Get the current filepath filepath = self.main_window.settings.last_file_input_path window_title = "{filename} - pyspread".format(filename=filepath.name) self.main_window.setWindowTitle(window_title) @handle_changed_since_save def file_new(self): """File new workflow""" maxshape = self.main_window.settings.maxshape # Get grid shape from user old_shape = self.main_window.grid.model.code_array.shape shape = GridShapeDialog(self.main_window, old_shape).shape if shape is None: # Abort changes because the dialog has been canceled return elif any(ax == 0 for ax in shape): msg = "Invalid grid shape {}.".format(shape) self.main_window.statusBar().showMessage(msg) return elif any(ax > axmax for axmax, ax in zip(maxshape, shape)): msg = "Grid shape {} exceeds {}.".format(shape, maxshape) self.main_window.statusBar().showMessage(msg) return # Reset grid self.main_window.grid.model.reset() # Set new shape self.main_window.grid.model.shape = shape # Select upper left cell because initial selection behaves strange self.main_window.grid.reset_selection() # Set current cell to upper left corner self.main_window.grid.current = 0, 0, 0 # Exit safe mode self.main_window.safe_mode = False def _get_filesize(self, filepath): """Returns the filesize""" try: filesize = os.path.getsize(filepath) except OSError as err: msg_tpl = "Error opening file {filepath}: {err}." msg = msg_tpl.format(filepath=filepath, err=err) self.main_window.statusBar().showMessage(msg) return return filesize def filepath_open(self, filepath): """Workflow for opening a file if a filepath is known""" code_array = self.main_window.grid.model.code_array filesize = self._get_filesize(filepath) if filesize is None: return # Reset grid self.main_window.grid.model.reset() # Is the file signed properly ? self.main_window.safe_mode = True signature_key = self.main_window.settings.signature_key try: with open(filepath, "rb") as infile: signature_path = filepath.with_suffix(filepath.suffix + '.sig') with open(signature_path, "rb") as sigfile: self.main_window.safe_mode = not verify(infile.read(), sigfile.read(), signature_key) except OSError: self.main_window.safe_mode = True # File compression handling if filepath.suffix == ".pysu": fopen = open else: fopen = bz2.open # Process events before showing the modal progress dialog self.main_window.application.processEvents() # Load file into grid try: with fopen(filepath, "rb") as infile: title = "File open progress" label = "Opening {}...".format(filepath.name) with self.progress_dialog(title, label, filesize) as progress_dialog: try: for line in PysReader(infile, code_array): progress_dialog.setValue(infile.tell()) self.main_window.application.processEvents() if progress_dialog.wasCanceled(): self.main_window.grid.model.reset() self.main_window.safe_mode = False break except ValueError as error: self.main_window.grid.model.reset() self.main_window.statusBar().showMessage(str(error)) return except OSError as err: msg_tpl = "Error opening file {filepath}: {err}." msg = msg_tpl.format(filepath=filepath, err=err) self.main_window.statusBar().showMessage(msg) # Reset grid self.main_window.grid.model.reset() return # Explicitly set the grid shape shape = self.main_window.grid.model.code_array.shape self.main_window.grid.model.shape = shape # Update the cell spans because this is unsupported by the model self.main_window.grid.update_cell_spans() # Select upper left cell because initial selection behaves strangely self.main_window.grid.reset_selection() # Change the main window last input directory state self.main_window.settings.last_file_input_path = filepath # Change the main window filepath state self.main_window.settings.changed_since_save = False # Update macro editor self.main_window.macro_panel.update() # Add to file history self.main_window.settings.add_to_file_history(filepath.as_posix()) @handle_changed_since_save def file_open(self): """File open workflow""" if self.main_window.unit_test: # We are in a unit test and use the unit test filepath filepath = self.main_window.unit_test_data else: # Get filepath from user dial = FileOpenDialog(self.main_window) if not dial.file_path: return # Cancel pressed filepath = Path(dial.file_path).with_suffix(dial.suffix) self.filepath_open(filepath) @handle_changed_since_save def file_open_recent(self, filepath): """File open recent workflow""" self.filepath_open(Path(filepath)) def sign_file(self, filepath): """Signs filepath if not in :attr:`model.model.DataArray.safe_mode`""" if self.main_window.safe_mode: msg = "File saved but not signed because it is unapproved." self.main_window.statusBar().showMessage(msg) return signature_key = self.main_window.settings.signature_key try: with open(filepath, "rb") as infile: signature = sign(infile.read(), signature_key) except OSError as err: msg = "Error signing file: {}".format(err) self.main_window.statusBar().showMessage(msg) return if signature is None or not signature: msg = 'Error signing file. ' self.main_window.statusBar().showMessage(msg) return signature_path = filepath.with_suffix(filepath.suffix + '.sig') try: with open(signature_path, 'wb') as signfile: signfile.write(signature) msg = "File saved and signed." except OSError as err: msg_tpl = "Error signing file {filepath}: {err}." msg = msg_tpl.format(filepath=filepath, err=err) self.main_window.statusBar().showMessage(msg) def _save(self, filepath): """Save filepath using chosen_filter Compresses save file if filepath.suffix is `.pys` Parameters ---------- * filepath: pathlib.Path \tSave file path """ code_array = self.main_window.grid.model.code_array # Process events before showing the modal progress dialog self.main_window.application.processEvents() # Save grid to temporary file with NamedTemporaryFile(delete=False) as tempfile: filename = tempfile.name try: pys_writer = PysWriter(code_array) with self.progress_dialog("File save progress", "Saving {}...".format(filepath.name), len(pys_writer)) as progress_dialog: for i, line in enumerate(pys_writer): line = bytes(line, "utf-8") if filepath.suffix == ".pys": line = bz2.compress(line) tempfile.write(line) progress_dialog.setValue(i) self.main_window.application.processEvents() if progress_dialog.wasCanceled(): tempfile.delete = True # Delete incomplete tmpfile return except (OSError, ValueError) as err: tempfile.delete = True QMessageBox.critical(self.main_window, "Error saving file", str(err)) return try: if filepath.exists() and not os.access(filepath, os.W_OK): raise PermissionError("No write access to {}".format(filepath)) move(filename, filepath) except OSError as err: # No tmp file present QMessageBox.critical(self.main_window, "Error saving file", str(err)) return # Change the main window filepath state self.main_window.settings.changed_since_save = False # Set the current filepath self.main_window.settings.last_file_input_path = filepath # Change the main window title window_title = "{filename} - pyspread".format(filename=filepath.name) self.main_window.setWindowTitle(window_title) self.sign_file(filepath) def file_save(self): """File save workflow""" filepath = self.main_window.settings.last_file_input_path if filepath.suffix: self._save(filepath) # New, changed file that has never been saved before elif self.file_save_as() is False: # Now the user has aborted the file save as dialog return False def file_save_as(self): """File save as workflow""" # Get filepath from user dial = FileSaveDialog(self.main_window) if not dial.file_path: return False # Cancel pressed fp = Path(dial.file_path) # Extend filepath suffix if needed if fp.suffix != dial.suffix: fp = fp.with_suffix(dial.suffix) self._save(fp) def file_import(self): """Import csv files""" def rawincount(filepath): """Counts lines of file""" with open(filepath, 'rb') as f: bufgen = takewhile(lambda x: x, (f.raw.read(1024*1024) for _ in repeat(None))) return sum(buf.count(b'\n') for buf in bufgen) if self.main_window.unit_test: # We are in a unit test and use the unit test filepath filepath = self.main_window.unit_test_data else: # Get filepath from user dial = CsvFileImportDialog(self.main_window) if not dial.file_path: return # Cancel pressed filepath = Path(dial.file_path) csv_dlg = CsvImportDialog(self.main_window, filepath) if not csv_dlg.exec(): return # Dialog accepted, now fill the grid row, column, table = current = self.main_window.grid.current model = self.main_window.grid.model rows, columns, tables = model.shape description_tpl = "Import from csv file {} at cell {}" description = description_tpl.format(filepath, current) try: filelines = rawincount(filepath) except OSError as error: self.main_window.statusBar().showMessage(str(error)) return command = None try: with open(filepath, newline='') as csvfile: title = "csv import progress" label = "Importing {}...".format(filepath.name) with self.progress_dialog(title, label, filelines) as progress_dialog: try: # Enter safe mode self.main_window.safe_mode = True reader = csv_reader(csvfile, csv_dlg.dialect, csv_dlg.digest_types) for i, line in enumerate(reader): if row + i >= rows: break if i % 100 == 0: progress_dialog.setValue(i) self.main_window.application.processEvents() if progress_dialog.wasCanceled(): return for j, ele in enumerate(line): if column + j >= columns: break if csv_dlg.digest_types is None: code = str(ele) else: code = convert(ele, csv_dlg.digest_types[j]) index = model.index(row + i, column + j) cmd = CommandSetCellCode(code, model, index, description) if command is None: command = cmd else: command.mergeWith(cmd) except ValueError as error: msg = str(error) self.main_window.statusBar().showMessage(msg) return self.main_window.undo_stack.push(command) except OSError as error: self.main_window.statusBar().showMessage(str(error)) return def file_export(self): """Export csv and svg files""" # Get filepath from user dial = CsvFileExportDialog(self.main_window) if not dial.file_path: return # Cancel pressed filepath = Path(dial.file_path) if "CSV" in dial.selected_filter: self._csv_export(filepath) elif "SVG" in dial.selected_filter: # Extend filepath suffix if needed if filepath.suffix != dial.suffix: filepath = filepath.with_suffix(dial.suffix) self._svg_export(filepath) def _csv_export(self, filepath): """Export to csv file filepath""" # Get area for csv export csv_area = CsvExportAreaDialog(self.main_window, self.main_window.grid).area if csv_area is None: return top, left, bottom, right = csv_area code_array = self.main_window.grid.model.code_array table = self.main_window.grid.table csv_data = code_array[top: bottom + 1, left: right + 1, table] csv_dlg = CsvExportDialog(self.main_window, csv_area) if not csv_dlg.exec(): return try: with open(filepath, "w", newline='') as csvfile: writer = csv.writer(csvfile, dialect=csv_dlg.dialect) writer.writerows(csv_data) except OSError as error: self.main_window.statusBar().showMessage(str(error)) def _svg_export(self, filepath): """Export to svg file filepath""" with self.standard_zoom(): grid = self.main_window.grid generator = QSvgGenerator() generator.setFileName(str(filepath)) # Get area for svg export svg_area = SvgExportAreaDialog(self.main_window, grid).area if svg_area is None: return rows = self.get_paint_rows(svg_area) columns = self.get_paint_columns(svg_area) total_height = self.get_total_height(svg_area) total_width = self.get_total_width(svg_area) generator.setSize(QSize(total_width, total_height)) paint_rect = QRect(0, 0, total_width, total_height) generator.setViewBox(paint_rect) option = QStyleOptionViewItem() painter = QPainter(generator) self.paint(painter, option, paint_rect, rows, columns) @contextmanager def standard_zoom(self): """Decorator for tasks that have to take place in standard zoom""" zoom = self.main_window.grid.zoom self.main_window.grid.zoom = 1.0 yield self.main_window.grid.zoom = zoom def get_paint_rows(self, area): """Iterator of rows to paint""" rows = self.main_window.grid.model.shape[0] top, _, bottom, _ = area top = max(0, min(rows - 1, top)) bottom = max(0, min(rows - 1, bottom)) return range(top, bottom + 1) def get_paint_columns(self, area): """Iterator of columns to paint""" columns = self.main_window.grid.model.shape[1] _, left, _, right = area left = max(0, min(columns - 1, left)) right = max(0, min(columns - 1, right)) return range(left, right + 1) def get_total_height(self, area): """Total height of paint_rows""" grid = self.main_window.grid return sum(grid.rowHeight(row) for row in self.get_paint_rows(area)) def get_total_width(self, area): """Total height of paint_columns""" grid = self.main_window.grid return sum(grid.columnWidth(column) for column in self.get_paint_columns(area)) def paint(self, painter, option, paint_rect, rows, columns): """Grid paint workflow for printing and svg export""" grid = self.main_window.grid code_array = grid.model.code_array cell_attributes = code_array.cell_attributes x_offset = grid.columnViewportPosition(0) y_offset = grid.rowViewportPosition(0) for row in rows: for column in columns: key = row, column, grid.table merging_cell = cell_attributes.get_merging_cell(key) if merging_cell is None \ or merging_cell[0] == row and merging_cell[1] == column: idx = grid.model.index(row, column) visual_rect = grid.visualRect(idx) x = max(0, visual_rect.x() - x_offset) y = max(0, visual_rect.y() - y_offset) width = visual_rect.width() if visual_rect.x() - x_offset < 0: width += visual_rect.x() - x_offset height = visual_rect.height() if visual_rect.y() - y_offset < 0: height += visual_rect.y() - y_offset option.rect = QRect(x, y, width, height) painter.setClipRect(option.rect) option.text = code_array(key) option.widget = grid grid.itemDelegate().paint(painter, option, idx) painter.end() @handle_changed_since_save def file_quit(self): """Program exit workflow""" self.main_window.settings.save() sys.exit() # Edit menu def delete(self, description_tpl="Delete selection {}"): """Delete cells in selection""" grid = self.main_window.grid model = grid.model selection = grid.selection description = description_tpl.format(selection) for row, column in selection.cell_generator(model.shape): # Pop item index = model.index(row, column, QModelIndex()) command = CommandSetCellCode(None, model, index, description) self.main_window.undo_stack.push(command) def edit_cut(self): """Edit -> Cut workflow""" self.edit_copy() self.delete(description_tpl="Cut selection {}") def edit_copy(self): """Edit -> Copy workflow Copies selected grid code to clipboard """ grid = self.main_window.grid table = grid.table selection = grid.selection bbox = selection.get_grid_bbox(grid.model.shape) (top, left), (bottom, right) = bbox data = [] for row in range(top, bottom + 1): data.append([]) for column in range(left, right + 1): if (row, column) in selection: code = grid.model.code_array((row, column, table)) if code is None: code = "" code = code.replace("\n", "\u000C") # Replace LF by FF else: code = "" data[-1].append(code) data_string = "\n".join("\t".join(line) for line in data) clipboard = QApplication.clipboard() clipboard.setText(data_string) def _copy_results_current(self, grid): """Copy cell results for the current cell""" current = grid.current data = grid.model.code_array[current] if data is None: return clipboard = QApplication.clipboard() # Get renderer for current cell renderer = grid.model.code_array.cell_attributes[current]["renderer"] if renderer == "text": clipboard.setText(repr(data)) elif renderer == "image": if isinstance(data, QImage): clipboard.setImage(data) else: # We may have an svg image here try: svg_bytes = bytes(data) except TypeError: svg_bytes = bytes(data, encoding='utf-8') if is_svg(svg_bytes): mime_data = QMimeData() mime_data.setData("image/svg+xml", svg_bytes) clipboard.setMimeData(mime_data) elif renderer == "markup": mime_data = QMimeData() mime_data.setHtml(str(data)) # Also copy data as plain text doc = QTextDocument() doc.setHtml(str(data)) mime_data.setText(doc.toPlainText()) clipboard.setMimeData(mime_data) elif renderer == "matplotlib" and isinstance(data, matplotlib_figure.Figure): # We copy and svg to the clipboard svg_filelike = io.BytesIO() png_filelike = io.BytesIO() data.savefig(svg_filelike, format="svg") data.savefig(png_filelike, format="png") svg_bytes = (svg_filelike.getvalue()) png_image = QImage().fromData(png_filelike.getvalue()) mime_data = QMimeData() mime_data.setData("image/svg+xml", svg_bytes) mime_data.setImageData(png_image) clipboard.setMimeData(mime_data) def _copy_results_selection(self, grid): """Copy repr of selected cells result objects to the clipboard""" def repr_nn(ele): """repr which returns '' if ele is None""" if ele is None: return '' return repr(ele) table = grid.table selection = grid.selection bbox = selection.get_grid_bbox(grid.model.shape) (top, left), (bottom, right) = bbox data = grid.model.code_array[top:bottom+1, left:right+1, table] data_string = "\n".join("\t".join(map(repr_nn, line)) for line in data) clipboard = QApplication.clipboard() clipboard.setText(data_string) def edit_copy_results(self): """Edit -> Copy results workflow If a selection is present then repr of selected grid cells result objects are copied to the clipboard. If no selection is present, the current cell results are copied to the clipboard. This can be plain text, html, a png image or an svg image. """ grid = self.main_window.grid if grid.has_selection(): self._copy_results_selection(grid) else: self._copy_results_current(grid) def _paste_to_selection(self, selection, data): """Pastes data into grid filling the selection""" grid = self.main_window.grid model = grid.model (top, left), (bottom, right) = selection.get_grid_bbox(model.shape) table = grid.table code_array = grid.model.code_array undo_stack = self.main_window.undo_stack description_tpl = "Paste clipboard to {}" description = description_tpl.format(selection) paste_gen = (line.split("\t") for line in data.split("\n")) for row, line in enumerate(cycle(paste_gen)): paste_row = row + top if paste_row > bottom or (paste_row, 0, table) not in code_array: break for column, value in enumerate(cycle(line)): paste_column = column + left if ((paste_row, paste_column, table) in code_array and paste_column <= right): if (paste_row, paste_column) in selection: index = model.index(paste_row, paste_column, QModelIndex()) # Preserve line breaks value = value.replace("\u000C", "\n") command = CommandSetCellCode(value, model, index, description) undo_stack.push(command) else: break def _paste_to_current(self, data): """Pastes data into grid starting from the current cell""" grid = self.main_window.grid model = grid.model top, left, table = current = grid.current code_array = grid.model.code_array undo_stack = self.main_window.undo_stack description_tpl = "Paste clipboard starting from cell {}" description = description_tpl.format(current) paste_gen = (line.split("\t") for line in data.split("\n")) for row, line in enumerate(paste_gen): paste_row = row + top if (paste_row, 0, table) not in code_array: break for column, value in enumerate(line): paste_column = column + left if (paste_row, paste_column, table) in code_array: index = model.index(paste_row, paste_column, QModelIndex()) # Preserve line breaks value = value.replace("\u000C", "\n") command = CommandSetCellCode(value, model, index, description) undo_stack.push(command) else: break def edit_paste(self): """Edit -> Paste workflow Pastes text clipboard data If no selection is present, data is pasted starting with the current cell. If a selection is present, data is pasted fully if the selection is smaller. If the selection is larger then data is duplicated. """ grid = self.main_window.grid clipboard = QApplication.clipboard() data = clipboard.text() if data: # Change the main window filepath state self.main_window.settings.changed_since_save = True if grid.has_selection(): self._paste_to_selection(grid.selection, data) else: self._paste_to_current(data) def _paste_svg(self, svg, index): """Pastes svg image into cell Parameters ---------- * svg: string \tSVG data * index: QModelIndex \tTarget cell index """ codelines = svg.splitlines() codelines[0] = '"""' + codelines[0] codelines[-1] = codelines[-1] + '"""' code = "\n".join(codelines) model = self.main_window.grid.model description = "Insert svg image into cell {}".format(index) self.main_window.grid.on_image_renderer_pressed(True) with self.disable_entryline_updates(): command = CommandSetCellCode(code, model, index, description) self.main_window.undo_stack.push(command) def _paste_image(self, image_data, index): """Pastes svg image into cell Parameters ---------- * image_data: bytes \tRaw image data. May be anything that QImage handles. * index: QModelIndex \tTarget cell index """ code = (r'_load_img(bz2.decompress(base64.b85decode(' + repr(b85encode(bz2.compress(image_data))) + ')))' r' if exec("' r'def _load_img(data): qimg = QImage(); ' r'QImage.loadFromData(qimg, data); ' r'return qimg\n' r'") is None else None') model = self.main_window.grid.model description = "Insert image into cell {}".format(index) self.main_window.grid.on_image_renderer_pressed(True) with self.disable_entryline_updates(): command = CommandSetCellCode(code, model, index, description) self.main_window.undo_stack.push(command) def edit_paste_as(self): """Pastes clipboard into one cell using a user specified mime type""" grid = self.main_window.grid model = grid.model # The mimetypes that are supported by pyspread mimetypes = ("image", "text/html", "text/plain") clipboard = QApplication.clipboard() formats = clipboard.mimeData().formats() items = [fmt for fmt in formats if any(m in fmt for m in mimetypes)] if not items: return elif len(items) == 1: item = items[0] else: item, ok = QInputDialog.getItem(self.main_window, "Paste as", "Choose mime type", items, current=0, editable=False) if not ok: return row, column, table = current = grid.current # Target cell key description_tpl = "Paste {} from clipboard into cell {}" description = description_tpl.format(item, current) index = model.index(row, column, QModelIndex()) mime_data = clipboard.mimeData() if item == "image/svg+xml": # SVG Image if mime_data: svg = mime_data.data("image/svg+xml") self._paste_svg(str(svg, encoding='utf-8'), index) elif "image" in item and mime_data.hasImage(): # Bitmap Image image = clipboard.image() buffer = QBuffer() buffer.open(QBuffer.ReadWrite) image.save(buffer, "PNG") buffer.seek(0) image_data = buffer.readAll() buffer.close() self._paste_image(image_data, index) elif item == "text/html" and mime_data.hasHtml(): # HTML content html = mime_data.html() command = CommandSetCellCode(html, model, index, description) self.main_window.undo_stack.push(command) grid.on_markup_renderer_pressed(True) elif item == "text/plain": # Normal code code = clipboard.text() if code: command = CommandSetCellCode(code, model, index, description) self.main_window.undo_stack.push(command) else: # Unknown mime type return NotImplemented def edit_find(self): """Edit -> Find workflow, opens FindDialog""" find_dialog = FindDialog(self.main_window) find_dialog.show() find_dialog.raise_() find_dialog.activateWindow() def _get_next_match(self, find_dialog): """Returns tuple of find string and next matching cell key""" grid = self.main_window.grid findnextmatch = grid.model.code_array.findnextmatch find_editor = find_dialog.search_text_editor find_string = find_editor.text() if find_dialog.from_start_checkbox.isChecked(): start_key = 0, 0, grid.table elif find_dialog.backward_checkbox.isChecked(): start_key = grid.row - 1, grid.column, grid.table else: start_key = grid.row + 1, grid.column, grid.table return find_string, findnextmatch( start_key, find_string, up=find_dialog.backward_checkbox.isChecked(), word=find_dialog.word_checkbox.isChecked(), case=find_dialog.case_checkbox.isChecked(), regexp=find_dialog.regex_checkbox.isChecked(), results=find_dialog.results_checkbox.isChecked()) def _display_match_msg(self, find_string, next_match, regexp): """Displays find match message in statusbar""" str_name = "Regular expression" if regexp else "String" msg_tpl = "{str_name} {find_string} found in cell {next_match}." msg = msg_tpl.format(str_name=str_name, find_string=find_string, next_match=next_match) self.main_window.statusBar().showMessage(msg) def find_dialog_on_find(self, find_dialog): """Edit -> Find workflow, after pressing find button in FindDialog""" find_string, next_match = self._get_next_match(find_dialog) if next_match: self.main_window.grid.current = next_match regexp = find_dialog.regex_checkbox.isChecked() self._display_match_msg(find_string, next_match, regexp) if find_dialog.from_start_checkbox.isChecked(): find_dialog.from_start_checkbox.setChecked(False) def edit_find_next(self): """Edit -> Find next workflow""" grid = self.main_window.grid findnextmatch = grid.model.code_array.findnextmatch find_editor = self.main_window.find_toolbar.find_editor find_string = find_editor.text() if find_editor.up: start_key = grid.row - 1, grid.column, grid.table else: start_key = grid.row + 1, grid.column, grid.table next_match = findnextmatch(start_key, find_string, up=find_editor.up, word=find_editor.word, case=find_editor.case, regexp=find_editor.regexp, results=find_editor.results) if next_match: grid.current = next_match self._display_match_msg(find_string, next_match, find_editor.regexp) def edit_replace(self): """Edit -> Replace workflow, opens ReplaceDialog""" find_dialog = ReplaceDialog(self.main_window) find_dialog.show() find_dialog.raise_() find_dialog.activateWindow() def replace_dialog_on_replace(self, replace_dialog, toggled=False, max_=1): """Edit -> Replace workflow when pushing Replace in ReplaceDialog Returns True if there is a match """ model = self.main_window.grid.model find_string, next_match = self._get_next_match(replace_dialog) replace_string = replace_dialog.replace_text_editor.text() if next_match: old_code = model.code_array(next_match) new_code = old_code.replace(find_string, replace_string, max_) description_tpl = "Replaced {old} with {new} in cell {key}." description = description_tpl.format(old=old_code, new=new_code, key=next_match) index = model.index(*next_match[:2]) command = CommandSetCellCode(new_code, model, index, description) self.main_window.undo_stack.push(command) self.main_window.grid.current = next_match self.main_window.statusBar().showMessage(description) if replace_dialog.from_start_checkbox.isChecked(): replace_dialog.from_start_checkbox.setChecked(False) return True def replace_dialog_on_replace_all(self, replace_dialog): """Edit -> Replace workflow when pushing ReplaceAll in ReplaceDialog""" while self.replace_dialog_on_replace(replace_dialog, max_=-1): pass def edit_resize(self): """Edit -> Resize workflow""" grid = self.main_window.grid maxshape = self.main_window.settings.maxshape # Get grid shape from user old_shape = grid.model.code_array.shape title = "Resize grid" shape = GridShapeDialog(self.main_window, old_shape, title=title).shape if shape is None: # Abort changes because the dialog has been canceled return elif any(ax == 0 for ax in shape): msg = "Invalid grid shape {}.".format(shape) self.main_window.statusBar().showMessage(msg) return elif any(ax > axmax for axmax, ax in zip(maxshape, shape)): msg = "Grid shape {} exceeds {}.".format(shape, maxshape) self.main_window.statusBar().showMessage(msg) return self.main_window.grid.current = 0, 0, 0 description = "Resize grid to {}".format(shape) with self.disable_entryline_updates(): command = CommandSetGridSize(grid, old_shape, shape, description) self.main_window.undo_stack.push(command) # Select upper left cell because initial selection behaves strangely self.main_window.grid.reset_selection() # View menu def view_goto_cell(self): """View -> Go to cell workflow""" # Get cell key from user shape = self.main_window.grid.model.shape key = CellKeyDialog(self.main_window, shape).key if key is not None: self.main_window.grid.current = key # Format menu def format_copy_format(self): """Copies the format of the selected cells to the Clipboard Cells are shifted so that the top left bbox corner is at 0,0 """ def remove_tabu_keys(attr): """Remove keys that are not copied from attr""" tabu_attrs = "merge_area", "frozen" for tabu_attr in tabu_attrs: try: attrs.pop(tabu_attr) except KeyError: pass grid = self.main_window.grid code_array = grid.model.code_array cell_attributes = code_array.cell_attributes row, column, table = grid.current # Cell attributes new_cell_attributes = [] selection = grid.selection # Format content is shifted so that the top left corner is 0,0 (top, left), (bottom, right) = \ selection.get_grid_bbox(grid.model.shape) table_cell_attributes = deepcopy(cell_attributes.for_table(table)) for __selection, _, attrs in table_cell_attributes: new_selection = selection & __selection if new_selection: # We do not copy merged cells and cell renderers remove_tabu_keys(attrs) new_shifted_selection = new_selection.shifted(-top, -left) cell_attribute = new_shifted_selection.parameters, attrs new_cell_attributes.append(cell_attribute) ca_repr = bytes(repr(new_cell_attributes), encoding='utf-8') clipboard = QApplication.clipboard() mime_data = QMimeData() mime_data.setData("application/x-pyspread-cell-attributes", ca_repr) clipboard.setMimeData(mime_data) def format_paste_format(self): """Pastes cell formats Pasting starts at cursor or at top left bbox corner """ clipboard = QApplication.clipboard() mime_data = clipboard.mimeData() grid = self.main_window.grid model = grid.model row, column, table = grid.current if "application/x-pyspread-cell-attributes" not in mime_data.formats(): return cas_data = mime_data.data("application/x-pyspread-cell-attributes") cas_data_str = str(cas_data, encoding='utf-8') cas = literal_eval(cas_data_str) assert isinstance(cas, list) tabu_attrs = "merge_area", "frozen" description_tpl = "Paste format for selections {}" description = description_tpl.format([ca[0] for ca in cas]) for selection_params, attrs in cas: if not any(tabu_attr in attrs for tabu_attr in tabu_attrs): selection = Selection(*selection_params) shifted_selection = selection.shifted(row, column) new_cell_attribute = shifted_selection, table, attrs selected_idx = [] for key in shifted_selection.cell_generator(model.shape): selected_idx.append(model.index(*key)) command = CommandSetCellFormat(new_cell_attribute, model, grid.currentIndex(), selected_idx, description) self.main_window.undo_stack.push(command) # Macro menu def macro_insert_image(self): """Insert image workflow""" dial = ImageFileOpenDialog(self.main_window) if not dial.file_path: return # Cancel pressed filepath = Path(dial.file_path) index = self.main_window.grid.currentIndex() if filepath.suffix == ".svg": try: with open(filepath, "r") as svgfile: svg = svgfile.read() except OSError as err: msg_tpl = "Error opening file {filepath}: {err}." msg = msg_tpl.format(filepath=filepath, err=err) self.main_window.statusBar().showMessage(msg) return self._paste_svg(svg, index) else: try: with open(filepath, "rb") as imgfile: image_data = imgfile.read() except OSError as err: msg_tpl = "Error opening file {filepath}: {err}." msg = msg_tpl.format(filepath=filepath, err=err) self.main_window.statusBar().showMessage(msg) return self._paste_image(image_data, index) def macro_insert_chart(self): """Insert chart workflow""" code_array = self.main_window.grid.model.code_array code = code_array(self.main_window.grid.current) chart_dialog = ChartDialog(self.main_window) if code is not None: chart_dialog.editor.setPlainText(code) chart_dialog.show() if chart_dialog.exec_() == ChartDialog.Accepted: code = chart_dialog.editor.toPlainText() index = self.main_window.grid.currentIndex() self.main_window.grid.on_matplotlib_renderer_pressed(True) model = self.main_window.grid.model description = "Insert chart into cell {}".format(index) command = CommandSetCellCode(code, model, index, description) self.main_window.undo_stack.push(command) pyspread-1.99.0.1/src/grid.py0000644000175000017500000021067513604124346015520 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ **Provides** * :class:`Grid`: QTableView of the main grid * :class:`GridTableModel`: QAbstractTableModel linking the view to code_array backend * :class:`GridCellDelegate` QStyledItemDelegate handling custom painting and editors """ from ast import literal_eval from contextlib import contextmanager import numpy from PyQt5.QtWidgets import QTableView, QStyledItemDelegate, QTabBar, QWidget from PyQt5.QtWidgets import QStyleOptionViewItem, QApplication, QStyle from PyQt5.QtWidgets import QAbstractItemDelegate, QHeaderView, QFontDialog from PyQt5.QtWidgets import QInputDialog, QLineEdit from PyQt5.QtGui import QColor, QBrush, QPen, QFont, QPainter, QPalette from PyQt5.QtGui import QImage as BasicQImage from PyQt5.QtGui import QAbstractTextDocumentLayout, QTextDocument from PyQt5.QtCore import Qt, QAbstractTableModel, QModelIndex, QVariant, QEvent from PyQt5.QtCore import QPointF, QRectF, QSize, QRect, QItemSelectionModel try: import matplotlib import matplotlib.figure except ImportError: matplotlib = None from src.commands import CommandSetCellCode, CommandSetCellFormat from src.commands import CommandFreezeCell, CommandThawCell, CommandInsertRows from src.commands import CommandInsertColumns, CommandDeleteRows from src.commands import CommandInsertTable, CommandDeleteTable from src.commands import CommandDeleteColumns, CommandSetCellMerge from src.commands import CommandSetCellRenderer, CommandSetRowsHeight from src.commands import CommandSetColumnsWidth, CommandSetCellTextAlignment from src.commands import CommandMakeButtonCell, CommandRemoveButtonCell from src.model.model import CodeArray from src.lib.selection import Selection from src.lib.string_helpers import quote, wrap_text, get_svg_aspect from src.lib.qimage2ndarray import array2qimage from src.lib.qimage_svg import QImage from src.lib.typechecks import is_svg from src.menus import GridContextMenu, TableChoiceContextMenu from src.menus import HorizontalHeaderContextMenu, VerticalHeaderContextMenu class Grid(QTableView): """The main grid of pyspread""" def __init__(self, main_window): super().__init__() self.main_window = main_window dimensions = main_window.settings.shape self.model = GridTableModel(main_window, dimensions) self.setModel(self.model) self.table_choice = TableChoice(self, dimensions[2]) # Signals self.model.dataChanged.connect(self.on_data_changed) self.selectionModel().currentChanged.connect(self.on_current_changed) self.main_window.widgets.text_color_button.colorChanged.connect( self.on_text_color) self.main_window.widgets.background_color_button.colorChanged.connect( self.on_background_color) self.main_window.widgets.line_color_button.colorChanged.connect( self.on_line_color) self.main_window.widgets.font_combo.fontChanged.connect(self.on_font) self.main_window.widgets.font_size_combo.fontSizeChanged.connect( self.on_font_size) self.setHorizontalHeader(GridHeaderView(Qt.Horizontal, self)) self.setVerticalHeader(GridHeaderView(Qt.Vertical, self)) self.setCornerButtonEnabled(False) self._zoom = 1.0 # Initial zoom level for the grid self.verticalHeader().sectionResized.connect(self.on_row_resized) self.horizontalHeader().sectionResized.connect(self.on_column_resized) self.setShowGrid(False) delegate = GridCellDelegate(main_window, self.model.code_array) self.setItemDelegate(delegate) # Select upper left cell because initial selection behaves strange self.reset_selection() # Locking states for operations by undo and redo operations self.__undo_resizing_row = False self.__undo_resizing_column = False # Initially, select top left cell on table 0 self.current = 0, 0, 0 @contextmanager def undo_resizing_row(self): self.__undo_resizing_row = True yield self.__undo_resizing_row = False @contextmanager def undo_resizing_column(self): self.__undo_resizing_column = True yield self.__undo_resizing_column = False @property def row(self): """Current row""" return self.currentIndex().row() @row.setter def row(self, value): """Sets current row to value""" self.current = value, self.column @property def column(self): """Current column""" return self.currentIndex().column() @column.setter def column(self, value): """Sets current column to value""" self.current = self.row, value @property def table(self): """Current table""" return self.table_choice.table @table.setter def table(self, value): """Sets current table""" self.table_choice.table = value @property def current(self): """Tuple of row, column, table of the current index""" return self.row, self.column, self.table @current.setter def current(self, value): """Sets the current index to row, column and if given table""" if len(value) == 2: row, column = value elif len(value) == 3: row, column, self.table = value else: msg = "Current cell must be defined with a tuple " + \ "(row, column) or (rol, column, table)." raise ValueError(msg) index = self.model.index(row, column, QModelIndex()) self.setCurrentIndex(index) @property def row_heights(self): """Returns list of tuples (row_index, row height) for current table""" row_heights = self.model.code_array.row_heights return [(row, row_heights[row, tab]) for row, tab in row_heights if tab == self.table] @property def column_widths(self): """Returns list of tuples (col_index, col_width) for current table""" col_widths = self.model.code_array.col_widths return [(col, col_widths[col, tab]) for col, tab in col_widths if tab == self.table] @property def selection(self): """Pyspread selection based on self's QSelectionModel""" selection = self.selectionModel().selection() block_top_left = [] block_bottom_right = [] cells = [] # Selection are made of selection ranges that we call span for span in selection: top, bottom = span.top(), span.bottom() left, right = span.left(), span.right() # If the span is a single cell then append it if top == bottom and left == right: cells.append((top, right)) else: # Otherwise append a block block_top_left.append((top, left)) block_bottom_right.append((bottom, right)) return Selection(block_top_left, block_bottom_right, [], [], cells) @property def selected_idx(self): """Currently selected indices""" return self.selectionModel().selectedIndexes() @property def zoom(self): """Returns zoom level""" return self._zoom @zoom.setter def zoom(self, zoom): """Updates _zoom property and zoom visualization of the grid""" self._zoom = zoom self.update_zoom() # Overrides def closeEditor(self, editor, hint): """Overrides QTableView.closeEditor Changes to overridden behavior: * Data is submitted when a cell is changed without pressing e.g. by mouse click or arrow keys. """ if hint == QAbstractItemDelegate.NoHint: hint = QAbstractItemDelegate.SubmitModelCache super().closeEditor(editor, hint) def keyPressEvent(self, event): """Overrides QTableView.keyPressEvent Changes to overridden behavior: * If Shift is pressed, the cell in the next column is selected. * If Shift is not pressed, the cell in the next row is selected. """ if event.key() in (Qt.Key_Enter, Qt.Key_Return): if event.modifiers() & Qt.ShiftModifier: self.current = self.row, self.column + 1 else: self.current = self.row + 1, self.column elif event.key() == Qt.Key_Delete: self.main_window.workflows.delete() else: super().keyPressEvent(event) def wheelEvent(self, event): """Overrides mouse wheel event handler""" modifiers = QApplication.keyboardModifiers() if modifiers == Qt.ControlModifier: if event.angleDelta().y() > 0: self.on_zoom_in() else: self.on_zoom_out() else: super().wheelEvent(event) def contextMenuEvent(self, event): """Overrides contextMenuEvent to install GridContextMenu""" menu = GridContextMenu(self.main_window.main_window_actions) menu.exec_(self.mapToGlobal(event.pos())) # Helpers def reset_selection(self): """Select upper left cell""" self.setSelection(QRect(1, 1, 1, 1), QItemSelectionModel.Select) def gui_update(self): """Emits gui update signal""" attributes = self.model.code_array.cell_attributes[self.current] self.main_window.gui_update.emit(attributes) def adjust_size(self): """Adjusts size to header maxima""" w = self.horizontalHeader().length() + self.verticalHeader().width() h = self.verticalHeader().length() + self.horizontalHeader().height() self.resize(w, h) def _selected_idx_to_str(self, selected_idx): """Converts selected_idx to string with cell indices""" return ", ".join(str(self.model.current(idx)) for idx in selected_idx) def update_zoom(self): """Updates the zoom level visualization to the current zoom factor""" self.verticalHeader().update_zoom() self.horizontalHeader().update_zoom() def has_selection(self): """Returns True if more than one cell is selected, else False This method handles spanned/merged cells. One single cell that is selected is considered as no cell being selected. """ cell_attributes = self.model.code_array.cell_attributes merge_area = cell_attributes[self.current]["merge_area"] if merge_area is None: merge_sel = Selection([], [], [], [], []) else: top, left, bottom, right = merge_area merge_sel = Selection([(top, left)], [(bottom, right)], [], [], []) return not(self.selection.single_cell_selected() or merge_sel.get_bbox() == self.selection.get_bbox()) # Event handlers def on_data_changed(self): """Event handler for data changes""" code = self.model.code_array(self.current) self.main_window.entry_line.setPlainText(code) if not self.main_window.settings.changed_since_save: self.main_window.settings.changed_since_save = True main_window_title = "* " + self.main_window.windowTitle() self.main_window.setWindowTitle(main_window_title) def on_current_changed(self, current, previous): """Event handler for change of current cell""" code = self.model.code_array(self.current) self.main_window.entry_line.setPlainText(code) self.gui_update() def on_row_resized(self, row, old_height, new_height): """Row resized event handler""" if self.__undo_resizing_row: # Resize from undo or redo command return (top, _), (bottom, _) = self.selection.get_grid_bbox(self.model.shape) if bottom - top > 1 and top <= row <= bottom: rows = list(range(top, bottom + 1)) else: rows = [row] description = "Resize rows {} to {}".format(rows, new_height) command = CommandSetRowsHeight(self, rows, self.table, old_height, new_height, description) self.main_window.undo_stack.push(command) def on_column_resized(self, column, old_width, new_width): """Column resized event handler""" if self.__undo_resizing_column: # Resize from undo or redo command return (_, left), (_, right) = self.selection.get_grid_bbox(self.model.shape) if right - left > 1 and left <= column <= right: columns = list(range(left, right + 1)) else: columns = [column] description = "Resize columns {} to {}".format(columns, new_width) command = CommandSetColumnsWidth(self, columns, self.table, old_width, new_width, description) self.main_window.undo_stack.push(command) def on_zoom_in(self): """Zoom in event handler""" zoom_levels = self.main_window.settings.zoom_levels larger_zoom_levels = [zl for zl in zoom_levels if zl > self.zoom] if larger_zoom_levels: self.zoom = min(larger_zoom_levels) def on_zoom_out(self): """Zoom out event handler""" zoom_levels = self.main_window.settings.zoom_levels smaller_zoom_levels = [zl for zl in zoom_levels if zl < self.zoom] if smaller_zoom_levels: self.zoom = max(smaller_zoom_levels) def on_zoom_1(self): """Sets zoom level ot 1.0""" self.zoom = 1.0 def _refresh_frozen_cell(self, key): """Refreshes the frozen cell key Does neither emit dataChanged nor clear _attr_cache or _table_cache. :key: 3-tuple of int: row, column, table """ if self.model.code_array.cell_attributes[key]["frozen"]: code = self.model.code_array(key) result = self.model.code_array._eval_cell(key, code) self.model.code_array.frozen_cache[repr(key)] = result def refresh_frozen_cells(self): """Refreshes all frozen cells""" frozen_cache = self.model.code_array.frozen_cache cell_attributes = self.model.code_array.cell_attributes for repr_key in frozen_cache: key = literal_eval(repr_key) self._refresh_frozen_cell(key) cell_attributes._attr_cache.clear() cell_attributes._table_cache.clear() self.model.code_array.result_cache.clear() self.model.dataChanged.emit(QModelIndex(), QModelIndex()) def refresh_selected_frozen_cells(self): """Refreshes selected frozen cells""" for idx in self.selected_idx: self._refresh_frozen_cell((idx.row(), idx.column(), self.table)) self.model.code_array.cell_attributes._attr_cache.clear() self.model.code_array.cell_attributes._table_cache.clear() self.model.dataChanged.emit(QModelIndex(), QModelIndex()) def on_show_frozen_pressed(self, toggled): """Show frozen cells event handler""" self.main_window.settings.show_frozen = toggled def on_font_dialog(self): """Font dialog event handler""" # Determine currently active font as dialog preset font = self.model.font(self.current) font, ok = QFontDialog().getFont(font, self.main_window) if ok: attr_dict = {} attr_dict["textfont"] = font.family() attr_dict["pointsize"] = font.pointSizeF() attr_dict["fontweight"] = font.weight() attr_dict["fontstyle"] = font.style() attr_dict["underline"] = font.underline() attr_dict["strikethrough"] = font.strikeOut() attr = self.selection, self.table, attr_dict idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set font {} for indices {}".format(font, idx_string) command = CommandSetCellFormat(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_font(self): """Font change event handler""" font = self.main_window.widgets.font_combo.font attr = self.selection, self.table, {"textfont": font} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set font {} for indices {}".format(font, idx_string) command = CommandSetCellFormat(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_font_size(self): """Font size change event handler""" size = self.main_window.widgets.font_size_combo.size attr = self.selection, self.table, {"pointsize": size} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set font size {} for cells {}".format(size, idx_string) command = CommandSetCellFormat(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_bold_pressed(self, toggled): """Bold button pressed event handler""" fontweight = QFont.Bold if toggled else QFont.Normal attr = self.selection, self.table, {"fontweight": fontweight} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set font weight {} for cells {}".format(fontweight, idx_string) command = CommandSetCellFormat(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_italics_pressed(self, toggled): """Italics button pressed event handler""" fontstyle = QFont.StyleItalic if toggled else QFont.StyleNormal attr = self.selection, self.table, {"fontstyle": fontstyle} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set font style {} for cells {}".format(fontstyle, idx_string) command = CommandSetCellFormat(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_underline_pressed(self, toggled): """Underline button pressed event handler""" attr = self.selection, self.table, {"underline": toggled} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set font underline {} for cells {}".format(toggled, idx_string) command = CommandSetCellFormat(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_strikethrough_pressed(self, toggled): """Strikethrough button pressed event handler""" attr = self.selection, self.table, {"strikethrough": toggled} idx_string = self._selected_idx_to_str(self.selected_idx) description_tpl = "Set font strikethrough {} for cells {}" description = description_tpl.format(toggled, idx_string) command = CommandSetCellFormat(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_text_renderer_pressed(self, toggled): """Text renderer button pressed event handler""" attr = self.selection, self.table, {"renderer": "text"} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set text renderer for cells {}".format(idx_string) entry_line = self.main_window.entry_line command = CommandSetCellRenderer(attr, self.model, entry_line, entry_line.document(), self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_image_renderer_pressed(self, toggled): """Image renderer button pressed event handler""" attr = self.selection, self.table, {"renderer": "image"} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set image renderer for cells {}".format(idx_string) entry_line = self.main_window.entry_line command = CommandSetCellRenderer(attr, self.model, entry_line, None, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_markup_renderer_pressed(self, toggled): """Markup renderer button pressed event handler""" attr = self.selection, self.table, {"renderer": "markup"} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set markup renderer for cells {}".format(idx_string) entry_line = self.main_window.entry_line command = CommandSetCellRenderer(attr, self.model, entry_line, entry_line.document(), self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_matplotlib_renderer_pressed(self, toggled): """Matplotlib renderer button pressed event handler""" attr = self.selection, self.table, {"renderer": "matplotlib"} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set matplotlib renderer for cells {}".format(idx_string) entry_line = self.main_window.entry_line command = CommandSetCellRenderer(attr, self.model, entry_line, entry_line.document(), self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_lock_pressed(self, toggled): """Lock button pressed event handler""" attr = self.selection, self.table, {"locked": toggled} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set locked state to {} for cells {}".format(toggled, idx_string) command = CommandSetCellFormat(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_rotate_0(self, toggled): """Set cell rotation to 0° left button pressed event handler""" attr = self.selection, self.table, {"angle": 0.0} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set cell rotation to 0° for cells {}".format(idx_string) command = CommandSetCellTextAlignment(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_rotate_90(self, toggled): """Set cell rotation to 90° left button pressed event handler""" attr = self.selection, self.table, {"angle": 90.0} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set cell rotation to 90° for cells {}".format( idx_string) command = CommandSetCellTextAlignment(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_rotate_180(self, toggled): """Set cell rotation to 180° left button pressed event handler""" attr = self.selection, self.table, {"angle": 180.0} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set cell rotation to 180° for cells {}".format( idx_string) command = CommandSetCellTextAlignment(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_rotate_270(self, toggled): """Set cell rotation to 270° left button pressed event handler""" attr = self.selection, self.table, {"angle": 270.0} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Set cell rotation to 270° for cells {}".format( idx_string) command = CommandSetCellTextAlignment(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_justify_left(self, toggled): """Justify left button pressed event handler""" attr = self.selection, self.table, {"justification": "justify_left"} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Justify cells {} left".format(idx_string) command = CommandSetCellTextAlignment(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_justify_fill(self, toggled): """Justify fill button pressed event handler""" attr = self.selection, self.table, {"justification": "justify_fill"} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Justify cells {} filled".format(idx_string) command = CommandSetCellTextAlignment(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_justify_center(self, toggled): """Justify center button pressed event handler""" attr = self.selection, self.table, {"justification": "justify_center"} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Justify cells {} centered".format(idx_string) command = CommandSetCellTextAlignment(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_justify_right(self, toggled): """Justify right button pressed event handler""" attr = self.selection, self.table, {"justification": "justify_right"} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Justify cells {} right".format(idx_string) command = CommandSetCellTextAlignment(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_align_top(self, toggled): """Align top button pressed event handler""" attr = self.selection, self.table, {"vertical_align": "align_top"} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Align cells {} to top".format(idx_string) command = CommandSetCellTextAlignment(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_align_middle(self, toggled): """Align centere button pressed event handler""" attr = self.selection, self.table, {"vertical_align": "align_center"} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Align cells {} to center".format(idx_string) command = CommandSetCellTextAlignment(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_align_bottom(self, toggled): """Align bottom button pressed event handler""" attr = self.selection, self.table, {"vertical_align": "align_bottom"} idx_string = self._selected_idx_to_str(self.selected_idx) description = "Align cells {} to bottom".format(idx_string) command = CommandSetCellTextAlignment(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_border_choice(self, event): """Border choice style event handler""" self.main_window.settings.border_choice = self.sender().text() self.gui_update() def on_text_color(self): """Text color change event handler""" text_color = self.main_window.widgets.text_color_button.color text_color_rgb = text_color.getRgb() attr = self.selection, self.table, {"textcolor": text_color_rgb} idx_string = self._selected_idx_to_str(self.selected_idx) description_tpl = "Set text color to {} for cells {}" description = description_tpl.format(text_color_rgb, idx_string) command = CommandSetCellFormat(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_line_color(self): """Line color change event handler""" border_choice = self.main_window.settings.border_choice bottom_selection = \ self.selection.get_bottom_borders_selection(border_choice) right_selection = \ self.selection.get_right_borders_selection(border_choice) line_color = self.main_window.widgets.line_color_button.color line_color_rgb = line_color.getRgb() attr_bottom = bottom_selection, self.table, {"bordercolor_bottom": line_color_rgb} attr_right = right_selection, self.table, {"bordercolor_right": line_color_rgb} idx_string = self._selected_idx_to_str(self.selected_idx) description_tpl = "Set line color {} for cells {}" description = description_tpl.format(line_color_rgb, idx_string) command = CommandSetCellFormat(attr_bottom, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) command = CommandSetCellFormat(attr_right, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_background_color(self): """Background color change event handler""" bg_color = self.main_window.widgets.background_color_button.color bg_color_rgb = bg_color.getRgb() self.gui_update() attr = self.selection, self.table, {"bgcolor": bg_color_rgb} idx_string = self._selected_idx_to_str(self.selected_idx) description_tpl = "Set cell background color to {} for cells {}" description = description_tpl.format(bg_color_rgb, idx_string) command = CommandSetCellFormat(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def on_borderwidth(self): """Border width change event handler""" width = int(self.sender().text().split()[-1]) border_choice = self.main_window.settings.border_choice bottom_selection = \ self.selection.get_bottom_borders_selection(border_choice) right_selection = \ self.selection.get_right_borders_selection(border_choice) attr_bottom = bottom_selection, self.table, {"borderwidth_bottom": width} attr_right = right_selection, self.table, {"borderwidth_right": width} idx_string = self._selected_idx_to_str(self.selected_idx) description_tpl = "Set border width to {} for cells {}" description = description_tpl.format(width, idx_string) command = CommandSetCellFormat(attr_bottom, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) command = CommandSetCellFormat(attr_right, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) def update_cell_spans(self): """Update cell spans from model data""" self.clearSpans() spans = {} # Dict of (top, left): (bottom, right) for selection, table, attrs in self.model.code_array.cell_attributes: if table == self.table: try: if attrs["merge_area"] is None: bbox = self.selection.get_grid_bbox(self.model.shape) (top, left), (_, _) = bbox spans[(top, left)] = None else: top, left, bottom, right = attrs["merge_area"] spans[(top, left)] = bottom, right except (KeyError, TypeError): pass for top, left in spans: try: bottom, right = spans[(top, left)] self.setSpan(top, left, bottom-top+1, right-left+1) except TypeError: pass def on_freeze_pressed(self, toggled): """Freeze cell event handler""" current_attr = self.model.code_array.cell_attributes[self.current] if current_attr["frozen"] == toggled: return # Something is wrong with the GUI update if toggled: # We have an non-frozen cell that has to be frozen description = "Freeze cell {}".format(self.current) command = CommandFreezeCell(self.model, self.current, description) else: # We have an frozen cell that has to be unfrozen description = "Thaw cell {}".format(self.current) command = CommandThawCell(self.model, self.current, description) self.main_window.undo_stack.push(command) def on_button_cell_pressed(self, toggled): """Button cell event handler""" current_attr = self.model.code_array.cell_attributes[self.current] if not toggled and current_attr["button_cell"] is False \ or toggled and current_attr["button_cell"] is not False: # Something is not syncronized in the menu return if toggled: # Get button text from user text, accept = QInputDialog.getText(self.main_window, "Make button cell", "Button text:", QLineEdit.Normal, "") if accept and text: description_tpl = "Make cell {} a button cell" description = description_tpl.format(self.current) command = CommandMakeButtonCell(self, text, self.currentIndex(), description) self.main_window.undo_stack.push(command) else: description_tpl = "Make cell {} a non-button cell" description = description_tpl.format(self.current) command = CommandRemoveButtonCell(self, self.currentIndex(), description) self.main_window.undo_stack.push(command) def on_merge_pressed(self): """Merge cells button pressed event handler""" # This is not done in the model because setSpan does not work there bbox = self.selection.get_grid_bbox(self.model.shape) (top, left), (bottom, right) = bbox # Check if current cell is already merged if self.columnSpan(top, left) > 1 or self.rowSpan(top, left) > 1: selection = Selection([], [], [], [], [(top, left)]) attr = selection, self.table, {"merge_area": None} description_tpl = "Unmerge cells with top-left cell {}" elif bottom > top or right > left: # Merge and store the current selection merging_selection = Selection([], [], [], [], [(top, left)]) attr = merging_selection, self.table, {"merge_area": (top, left, bottom, right)} description_tpl = "Merge cells with top-left cell {}" else: # Cells are not merged because the span is one return description = description_tpl.format((top, left)) command = CommandSetCellMerge(attr, self.model, self.currentIndex(), self.selected_idx, description) self.main_window.undo_stack.push(command) self.current = top, left def on_quote(self): """Quote cells event handler""" description_tpl = "Quote code for cell selection {}" description = description_tpl.format(id(self.selection)) for idx in self.selected_idx: row = idx.row() column = idx.column() code = self.model.code_array((row, column, self.table)) quoted_code = quote(code) index = self.model.index(row, column, QModelIndex()) command = CommandSetCellCode(quoted_code, self.model, index, description) self.main_window.undo_stack.push(command) def on_insert_rows(self): """Insert rows event handler""" try: (top, _), (bottom, _) = \ self.selection.get_grid_bbox(self.model.shape) except TypeError: top = bottom = self.row count = bottom - top + 1 index = self.currentIndex() description_tpl = "Insert {} rows above row {}" description = description_tpl.format(count, top) command = CommandInsertRows(self.main_window.grid, self.model, index, top, count, description) self.main_window.undo_stack.push(command) def on_delete_rows(self): """Delete rows event handler""" try: (top, _), (bottom, _) = \ self.selection.get_grid_bbox(self.model.shape) except TypeError: top = bottom = self.row count = bottom - top + 1 index = self.currentIndex() description_tpl = "Delete {} rows starting from row {}" description = description_tpl.format(count, top) command = CommandDeleteRows(self.main_window.grid, self.model, index, top, count, description) self.main_window.undo_stack.push(command) def on_insert_columns(self): """Insert columns event handler""" try: (_, left), (_, right) = \ self.selection.get_grid_bbox(self.model.shape) except TypeError: left = right = self.column count = right - left + 1 index = self.currentIndex() description_tpl = "Insert {} columns left of column {}" description = description_tpl.format(count, self.column) command = CommandInsertColumns(self.main_window.grid, self.model, index, left, count, description) self.main_window.undo_stack.push(command) def on_delete_columns(self): """Delete columns event handler""" try: (_, left), (_, right) = \ self.selection.get_grid_bbox(self.model.shape) except TypeError: left = right = self.column count = right - left + 1 index = self.currentIndex() description_tpl = "Delete {} columns starting from column {}" description = description_tpl.format(count, self.column) command = CommandDeleteColumns(self.main_window.grid, self.model, index, left, count, description) self.main_window.undo_stack.push(command) def on_insert_table(self): """Insert table event handler""" description = "Insert table in front of table {}".format(self.table) command = CommandInsertTable(self.main_window.grid, self.model, self.table, description) self.main_window.undo_stack.push(command) def on_delete_table(self): """Delete table event handler""" description = "Delete table {}".format(self.table) command = CommandDeleteTable(self.main_window.grid, self.model, self.table, description) self.main_window.undo_stack.push(command) class GridHeaderView(QHeaderView): """QHeaderView with zoom support""" def __init__(self, orientation, grid): super().__init__(orientation, grid) self.setSectionsClickable(True) self.default_section_size = self.defaultSectionSize() self.grid = grid # Overrides def sizeHint(self): """Overrides sizeHint, which supports zoom""" unzoomed_size = super().sizeHint() return QSize(unzoomed_size.width() * self.grid.zoom, unzoomed_size.height() * self.grid.zoom) def sectionSizeHint(self, logicalIndex): """Overrides sectionSizeHint, which supports zoom""" unzoomed_size = super().sectionSizeHint(logicalIndex) return QSize(unzoomed_size.width() * self.grid.zoom, unzoomed_size.height() * self.grid.zoom) def paintSection(self, painter, rect, logicalIndex): """Overrides paintSection, which supports zoom""" unzoomed_rect = QRect(rect.x()/self.grid.zoom, rect.y()/self.grid.zoom, rect.width()/self.grid.zoom, rect.height()/self.grid.zoom) painter.save() painter.scale(self.grid.zoom, self.grid.zoom) super().paintSection(painter, unzoomed_rect, logicalIndex) painter.restore() def contextMenuEvent(self, event): """Overrides contextMenuEvent Installs HorizontalHeaderContextMenu or VerticalHeaderContextMenu depending on self.orientation(). """ actions = self.grid.main_window.main_window_actions if self.orientation() == Qt.Horizontal: menu = HorizontalHeaderContextMenu(actions) else: menu = VerticalHeaderContextMenu(actions) menu.exec_(self.mapToGlobal(event.pos())) # End of overrides def update_zoom(self): """Updates zoom for the section sizes""" with self.grid.undo_resizing_row(): with self.grid.undo_resizing_column(): self.setDefaultSectionSize(self.default_section_size * self.grid.zoom) if self.orientation() == Qt.Horizontal: section_sizes = self.grid.column_widths else: section_sizes = self.grid.row_heights for section, size in section_sizes: self.resizeSection(section, size * self.grid.zoom) class GridTableModel(QAbstractTableModel): """QAbstractTableModel for Grid""" def __init__(self, main_window, dimensions): super().__init__() self.main_window = main_window self.code_array = CodeArray(dimensions, main_window.settings) @contextmanager def model_reset(self): """Context manager for handle changing/resetting model data""" self.beginResetModel() yield self.endResetModel() @contextmanager def inserting_rows(self, index, first, last): """Context manager for inserting rows""" self.beginInsertRows(index, first, last) yield self.endInsertRows() @contextmanager def inserting_columns(self, index, first, last): """Context manager for inserting columns""" self.beginInsertColumns(index, first, last) yield self.endInsertColumns() @contextmanager def removing_rows(self, index, first, last): """Context manager for removing rows""" self.beginRemoveRows(index, first, last) yield self.endRemoveRows() @contextmanager def removing_columns(self, index, first, last): """Context manager for removing columns""" self.beginRemoveColumns(index, first, last) yield self.endRemoveColumns() @property def grid(self): return self.main_window.grid @property def shape(self): """Returns 3-tuple of rows, columns and tables""" return self.code_array.shape @shape.setter def shape(self, value): """Sets the shape in the code array and adjusts the table_choice""" with self.model_reset(): self.code_array.shape = value self.grid.table_choice.no_tables = value[2] def current(self, index): """Tuple of row, column, table of given index""" return index.row(), index.column(), self.grid.table def code(self, index): """Code in index""" return self.code_array(self.current(index)) def rowCount(self, parent=QModelIndex()): """Overloaded rowCount for code_array backend""" return self.shape[0] def columnCount(self, parent=QModelIndex()): """Overloaded columnCount for code_array backend""" return self.shape[1] def insertRows(self, row, count): """Overloaded insertRows for code_array backend""" self.code_array.insert(row, count, axis=0, tab=self.grid.table) return True def removeRows(self, row, count): """Overloaded removeRows for code_array backend""" try: self.code_array.delete(row, count, axis=0, tab=self.grid.table) except ValueError: return False return True def insertColumns(self, column, count): """Overloaded insertColumns for code_array backend""" self.code_array.insert(column, count, axis=1, tab=self.grid.table) return True def removeColumns(self, column, count): """Overloaded removeColumns for code_array backend""" try: self.code_array.delete(column, count, axis=1, tab=self.grid.table) except ValueError: return False return True def insertTable(self, table, count=1): """Inserts a table""" self.code_array.insert(table, count, axis=2) def removeTable(self, table, count=1): """Inserts a table""" self.code_array.delete(table, count, axis=2) def font(self, key): """Returns font for given key""" attr = self.code_array.cell_attributes[key] font = QFont() if attr["textfont"] is not None: font.setFamily(attr["textfont"]) if attr["pointsize"] is not None: font.setPointSizeF(attr["pointsize"]) if attr["fontweight"] is not None: font.setWeight(attr["fontweight"]) if attr["fontstyle"] is not None: font.setStyle(attr["fontstyle"]) if attr["underline"] is not None: font.setUnderline(attr["underline"]) if attr["strikethrough"] is not None: font.setStrikeOut(attr["strikethrough"]) return font def data(self, index, role=Qt.DisplayRole): """Overloaded data for code_array backend""" def safe_str(obj): """Returns str(obj), on RecursionError returns error message""" try: return str(value) except RecursionError as err: return str(err) key = self.current(index) if role == Qt.DisplayRole: value = self.code_array[key] renderer = self.code_array.cell_attributes[key]["renderer"] if renderer == "image" or value is None: return "" else: return safe_str(value) if role == Qt.ToolTipRole: value = self.code_array[key] if value is None: return "" else: return wrap_text(safe_str(value)) if role == Qt.DecorationRole: renderer = self.code_array.cell_attributes[key]["renderer"] if renderer == "image": value = self.code_array[key] if isinstance(value, BasicQImage): return value else: try: arr = numpy.array(value) return array2qimage(arr) except Exception: return value if role == Qt.BackgroundColorRole: if self.main_window.settings.show_frozen \ and self.code_array.cell_attributes[key]["frozen"]: pattern_rgb = self.grid.palette().highlight().color() bg_color = QBrush(pattern_rgb, Qt.BDiagPattern) else: bg_color_rgb = self.code_array.cell_attributes[key]["bgcolor"] if bg_color_rgb is None: bg_color = self.grid.palette().color(QPalette.Base) else: bg_color = QColor(*bg_color_rgb) return bg_color if role == Qt.TextColorRole: text_color_rgb = self.code_array.cell_attributes[key]["textcolor"] if text_color_rgb is None: return self.grid.palette().color(QPalette.Text) else: return QColor(*text_color_rgb) if role == Qt.FontRole: return self.font(key) if role == Qt.TextAlignmentRole: pys2qt = { "justify_left": Qt.AlignLeft, "justify_center": Qt.AlignHCenter, "justify_right": Qt.AlignRight, "justify_fill": Qt.AlignJustify, "align_top": Qt.AlignTop, "align_center": Qt.AlignVCenter, "align_bottom": Qt.AlignBottom, } attr = self.code_array.cell_attributes[key] alignment = pys2qt[attr["vertical_align"]] justification = pys2qt[attr["justification"]] alignment |= justification return alignment return QVariant() def setData(self, index, value, role, raw=False, table=None): """Overloaded setData for code_array backend""" if role == Qt.EditRole: if table is None: key = self.current(index) else: key = index.row(), index.column(), table if raw: if value is None: try: self.code_array.pop(key) except KeyError: pass else: self.code_array[key] = value else: self.code_array[key] = "{}".format(value) self.dataChanged.emit(index, index) return True if role == Qt.DecorationRole or role == Qt.TextAlignmentRole: self.code_array.cell_attributes.append(value) # We have a selection and no single cell for idx in index: self.dataChanged.emit(idx, idx) return True def flags(self, index): return QAbstractTableModel.flags(self, index) | Qt.ItemIsEditable def headerData(self, idx, orientation, role): if role == Qt.DisplayRole: return str(idx) def reset(self): """Deletes all grid data including undo data""" with self.model_reset(): # Clear cells self.code_array.dict_grid.clear() # Clear attributes del self.code_array.dict_grid.cell_attributes[:] # Clear row heights and column widths self.code_array.row_heights.clear() self.code_array.col_widths.clear() # Clear macros self.code_array.macros = "" # Clear caches # self.main_window.undo_stack.clear() self.code_array.result_cache.clear() # Clear globals self.code_array.clear_globals() self.code_array.reload_modules() class GridCellDelegate(QStyledItemDelegate): def __init__(self, main_window, code_array): super().__init__() self.main_window = main_window self.code_array = code_array self.cell_attributes = self.code_array.cell_attributes @property def grid(self): return self.main_window.grid def _paint_bl_border_lines(self, x, y, width, height, painter, key): """Paint the bottom and the left border line of the cell""" zoom = self.grid.zoom border_bottom = (x, y + height, x + width, y + height) border_right = (x + width, y, x + width, y + height) cell_attributes = self.cell_attributes[key] if cell_attributes["bordercolor_bottom"] is None: bordercolor_bottom = self.grid.palette().color(QPalette.Mid) else: bordercolor_bottom = QColor(*cell_attributes["bordercolor_bottom"]) if cell_attributes["bordercolor_right"] is None: bordercolor_right = self.grid.palette().color(QPalette.Mid) else: bordercolor_right = QColor(*cell_attributes["bordercolor_right"]) borderwidth_bottom = self.cell_attributes[key]["borderwidth_bottom"] borderwidth_right = self.cell_attributes[key]["borderwidth_right"] painter.setPen(QPen(QBrush(bordercolor_bottom), borderwidth_bottom * zoom)) painter.drawLine(*border_bottom) painter.setPen(QPen(QBrush(bordercolor_right), borderwidth_right * zoom)) painter.drawLine(*border_right) def _paint_border_lines(self, rect, painter, index): """Paint border lines around the cell First, bottom and right border lines are painted. Next, border lines of the cell above are painted. Next, border lines of the cell left are painted. Finally, bottom and right border lines of the cell above left are painted. """ x = rect.x() - 1 y = rect.y() - 1 width = rect.width() height = rect.height() row = index.row() column = index.column() table = self.grid.table # Paint bottom and right border lines of the current cell key = row, column, table self._paint_bl_border_lines(x, y, width, height, painter, key) # Paint bottom and right border lines of the cell above key = row - 1, column, table self._paint_bl_border_lines(x, y - height, width, height, painter, key) # Paint bottom and right border lines of the cell left key = row, column - 1, table self._paint_bl_border_lines(x - width, y, width, height, painter, key) # Paint bottom and right border lines of the current cell key = row - 1, column - 1, table self._paint_bl_border_lines(x - width, y - height, width, height, painter, key) def _render_markup(self, painter, option, index): """HTML markup renderer""" self.initStyleOption(option, index) style = option.widget.style() doc = QTextDocument() doc.setHtml(option.text) doc.setTextWidth(option.rect.width()) option.text = "" style.drawControl(QStyle.CE_ItemViewItem, option, painter, option.widget) ctx = QAbstractTextDocumentLayout.PaintContext() painter.save() painter.translate(option.rect.topLeft()) painter.setClipRect(option.rect.translated(-option.rect.topLeft())) doc.documentLayout().draw(painter, ctx) painter.restore() def _get_aligned_image_rect(self, option, index, image_width, image_height): """Returns image rect dependent on alignment and justification""" def scale_size(inner_width, inner_height, outer_width, outer_height): """Scales up inner_rect to fit in outer_rect Returns width, height tuple that maintains aspect ratio. Parameters ---------- * inner_width: int or float \tWidth of the inner rect that is scaled up to the outer rect * inner_height: int or float \tHeight of the inner rect that is scaled up to the outer rect * outer_width: int or float \tWidth of the outer rect * outer_height: int or float \tHeight of the outer rect """ inner_aspect = inner_width / inner_height outer_aspect = outer_width / outer_height if outer_aspect < inner_aspect: inner_width *= outer_width / inner_width inner_height = inner_width / inner_aspect else: inner_height *= outer_height / inner_height inner_width = inner_height * inner_aspect return inner_width, inner_height key = index.row(), index.column(), self.grid.table justification = self.cell_attributes[key]["justification"] vertical_align = self.cell_attributes[key]["vertical_align"] if justification == "justify_fill": return option.rect rect_x, rect_y = option.rect.x(), option.rect.y() rect_width, rect_height = option.rect.width(), option.rect.height() try: image_width, image_height = scale_size(image_width, image_height, rect_width, rect_height) except ZeroDivisionError: pass image_x, image_y = rect_x, rect_y if justification == "justify_center": image_x = rect_x + rect_width / 2 - image_width / 2 elif justification == "justify_right": image_x = rect_x + rect_width - image_width if vertical_align == "align_center": image_y = rect_y + rect_height / 2 - image_height / 2 elif vertical_align == "align_bottom": image_y = rect_y + rect_height - image_height return QRect(image_x, image_y, image_width, image_height) def _render_qimage(self, painter, option, index, qimage=None): """QImage renderer""" if qimage is None: qimage = index.data(Qt.DecorationRole) rect = option.rect if isinstance(qimage, BasicQImage): img_width, img_height = qimage.width(), qimage.height() else: key = index.row(), index.column(), self.grid.table res = self.code_array[key] if res is None: return try: svg_bytes = bytes(res) except TypeError: try: svg_bytes = bytes(res, encoding='utf-8') except TypeError: return if not is_svg(svg_bytes): return else: svg_aspect = get_svg_aspect(svg_bytes) rect_aspect = rect.width() / rect.height() if svg_aspect > rect_aspect: img_width = rect.width() img_height = int(rect.width() / svg_aspect) else: img_width = int(rect.height() * svg_aspect) img_height = rect.height() qimage = QImage(img_width, img_height, QImage.Format_ARGB32) qimage.from_svg_bytes(svg_bytes) img_rect = self._get_aligned_image_rect(option, index, img_width, img_height) if img_rect is None: return key = index.row(), index.column(), self.grid.table justification = self.cell_attributes[key]["justification"] if justification == "justify_fill": qimage = qimage.scaled(rect.width(), rect.height(), Qt.IgnoreAspectRatio, Qt.SmoothTransformation) painter.drawImage(rect.x(), rect.y(), qimage) return qimage = qimage.scaled(rect.width(), rect.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation) painter.drawImage(img_rect.x(), img_rect.y(), qimage) def _render_matplotlib(self, painter, option, index): """Matplotlib renderer""" if matplotlib is None: # matplotlib is not installed return key = index.row(), index.column(), self.grid.table figure = self.code_array[key] if not isinstance(figure, matplotlib.figure.Figure): return dpi = figure.get_dpi() width, height = figure.get_size_inches() width *= dpi height *= dpi rect = self._get_aligned_image_rect(option, index, width, height) if rect is None: return image = QImage(rect.width(), rect.height(), QImage.Format_RGBA8888) image.from_matplotlib(figure) painter.drawImage(rect.x(), rect.y(), image) def __paint(self, painter, option, index): """Calls the overloaded paint function or creates html delegate""" key = index.row(), index.column(), self.grid.table renderer = self.cell_attributes[key]["renderer"] if renderer == "text": super(GridCellDelegate, self).paint(painter, option, index) elif renderer == "markup": self._render_markup(painter, option, index) elif renderer == "image": self._render_qimage(painter, option, index) elif renderer == "matplotlib": self._render_matplotlib(painter, option, index) def sizeHint(self, option, index): """Overloads SizeHint""" key = index.row(), index.column(), self.grid.table if not self.cell_attributes[key]["renderer"] == "markup": return super(GridCellDelegate, self).sizeHint(option, index) # HTML options = QStyleOptionViewItem(option) self.initStyleOption(options, index) doc = QTextDocument() doc.setHtml(options.text) doc.setTextWidth(options.rect.width()) return QSize(doc.idealWidth(), doc.size().height()) def _rotated_paint(self, painter, option, index, angle): """Paint cell contents for rotated cells""" # Rotate evryting by 90 degree optionCopy = QStyleOptionViewItem(option) rectCenter = QPointF(QRectF(option.rect).center()) painter.save() painter.translate(rectCenter.x(), rectCenter.y()) painter.rotate(angle) painter.translate(-rectCenter.x(), -rectCenter.y()) optionCopy.rect = painter.worldTransform().mapRect(option.rect) # Call the base class paint method self.__paint(painter, optionCopy, index) painter.restore() def paint(self, painter, option, index): """Overloads QStyledItemDelegate to add cell border painting""" painter.setRenderHint(QPainter.SmoothPixmapTransform) zoom = self.grid.zoom rect = option.rect unzoomed_rect = QRect(rect.x() / zoom, rect.y() / zoom, rect.width() / zoom, rect.height() / zoom) option.rect = unzoomed_rect painter.save() painter.scale(zoom, zoom) key = index.row(), index.column(), self.grid.table angle = self.cell_attributes[key]["angle"] if abs(angle) < 0.001: # No rotation --> call the base class paint method self.__paint(painter, option, index) else: self._rotated_paint(painter, option, index, angle) self._paint_border_lines(option.rect, painter, index) painter.restore() def createEditor(self, parent, option, index): """Overloads QStyledItemDelegate Disables editor in locked cells Switches to chart dialog in chart cells """ key = index.row(), index.column(), self.grid.table if self.cell_attributes[key]["locked"]: return if self.cell_attributes[key]["renderer"] == "matplotlib": self.main_window.workflows.macro_insert_chart() return self.editor = super(GridCellDelegate, self).createEditor(parent, option, index) self.editor.installEventFilter(self) return self.editor def eventFilter(self, source, event): """Quotes cell editor content for + and + Overrides QLineEdit default shortcut. Counts as undoable action. """ if event.type() == QEvent.ShortcutOverride \ and source is self.editor \ and event.modifiers() == Qt.ControlModifier \ and event.key() in (Qt.Key_Return, Qt.Key_Enter): code = quote(source.text()) index = self.grid.currentIndex() description = "Quote code for cell {}".format(index) cmd = CommandSetCellCode(code, self.grid.model, index, description) self.main_window.undo_stack.push(cmd) return QWidget.eventFilter(self, source, event) def setEditorData(self, editor, index): row = index.row() column = index.column() table = self.grid.table value = self.code_array((row, column, table)) editor.setText(value) def setModelData(self, editor, model, index): description = "Set code for cell {}".format(model.current(index)) command = CommandSetCellCode(editor.text(), model, index, description) self.main_window.undo_stack.push(command) def updateEditorGeometry(self, editor, option, index): editor.setGeometry(option.rect) class TableChoice(QTabBar): """The TabBar below the main grid""" def __init__(self, grid, no_tables): super().__init__(shape=QTabBar.RoundedSouth) self.setExpanding(False) self.grid = grid self.no_tables = no_tables self.currentChanged.connect(self.on_table_changed) @property def no_tables(self): return self._no_tables @no_tables.setter def no_tables(self, value): self._no_tables = value if value > self.count(): # Insert for i in range(self.count(), value): self.addTab(str(i)) elif value < self.count(): # Remove for i in range(self.count()-1, value-1, -1): self.removeTab(i) @property def table(self): """Returns current table from table_choice that is displayed""" return self.currentIndex() @table.setter def table(self, value): """Sets a new table to be displayed""" self.setCurrentIndex(value) # Overrides def contextMenuEvent(self, event): """Overrides contextMenuEvent to install GridContextMenu""" actions = self.grid.main_window.main_window_actions menu = TableChoiceContextMenu(actions) menu.exec_(self.mapToGlobal(event.pos())) # Event handlers def on_table_changed(self, current): """Event handler for table changes""" with self.grid.undo_resizing_row(): with self.grid.undo_resizing_column(): self.grid.update_cell_spans() self.grid.update_zoom() self.grid.model.dataChanged.emit(QModelIndex(), QModelIndex()) pyspread-1.99.0.1/src/widgets.py0000644000175000017500000003632313604117235016234 0ustar andreasandreas# -*- coding: utf-8 -*- # Copyright Martin Manns # Distributed under the terms of the GNU General Public License # -------------------------------------------------------------------- # pyspread is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # pyspread is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with pyspread. If not, see . # -------------------------------------------------------------------- """ **Widgets** * :class:`MultiStateBitmapButton` * :class:`RotationButton` * :class:`JustificationButton` * :class:`RendererButton` * :class:`AlignmentButton` * :class:`ColorButton` * :class:`TextColorButton` * :class:`LineColorButton` * :class:`BackgroundColorButton` * :class:`FontChoiceCombo` * :class:`Widgets` * :class:`FindEditor` * :class:`CellButton` """ from PyQt5.QtCore import pyqtSignal, QSize, Qt, QModelIndex from PyQt5.QtWidgets import QToolButton, QColorDialog, QFontComboBox, QComboBox from PyQt5.QtWidgets import QSizePolicy, QLineEdit, QPushButton from PyQt5.QtGui import QPalette, QColor, QFont, QIntValidator, QCursor from src.actions import Action from src.icons import Icon class MultiStateBitmapButton(QToolButton): """QToolButton that cycles through arbitrary states The states are defined by an iterable of QIcons Parameters ---------- * actions: List of QActions \tThe list of actions to be cycled through """ def __init__(self, main_window): super().__init__() self.main_window = main_window self._current_action_idx = 0 self.clicked.connect(self.on_clicked) @property def current_action_idx(self): return self._current_action_idx @current_action_idx.setter def current_action_idx(self, index): """Sets current action index and updates button and menu""" self._current_action_idx = index action = self.get_action(index) self.setIcon(action.icon()) def get_action(self, index): """Returns action from index in action_names""" action_name = self.action_names[index] return self.main_window.main_window_actions[action_name] def set_current_action(self, action_name): """Sets current action""" self.current_action_idx = self.action_names.index(action_name) def next(self): """Advances current_action_idx and returns current action""" if self.current_action_idx >= len(self.action_names) - 1: self.current_action_idx = 0 else: self.current_action_idx += 1 return self.get_action(self.current_action_idx) def set_menu_checked(self, action_name): """Sets checked status of menu""" action = self.main_window.main_window_actions[action_name] action.setChecked(True) def on_clicked(self): """Button clicked event handler. Chechs corresponding menu item""" action = self.next() action.trigger() action.setChecked(True) class RotationButton(MultiStateBitmapButton): """Rotation button for the format toolbar""" label = "Rotate" action_names = "rotate_0", "rotate_90", "rotate_180", "rotate_270" def __init__(self, main_window): super().__init__(main_window) self.setStatusTip("Text rotation") self.setToolTip("Text rotation") def icon(self): """Returns QIcon for button identification""" return Icon.rotate_0 class JustificationButton(MultiStateBitmapButton): """Justification button for the format toolbar""" label = "Justification" action_names = ("justify_left", "justify_center", "justify_right", "justify_fill") def __init__(self, main_window): super().__init__(main_window) self.setStatusTip("Text justification") self.setToolTip("Text justification") def icon(self): """Returns QIcon for button identification""" return Icon.justify_left class RendererButton(MultiStateBitmapButton): """Cell render button for the format toolbar""" label = "Renderer" action_names = "text", "markup", "image", "matplotlib" def __init__(self, main_window): super().__init__(main_window) self.setStatusTip("Cell render type") self.setToolTip("Cell render type") def icon(self): """Returns QIcon for button identification""" return Icon.text class AlignmentButton(MultiStateBitmapButton): """Alignment button for the format toolbar""" label = "Alignment" action_names = "align_top", "align_center", "align_bottom" def __init__(self, main_window): super().__init__(main_window) self.setStatusTip("Text alignment") self.setToolTip("Text alignment") def icon(self): """Returns QIcon for button identification""" return Icon.align_top class ColorButton(QToolButton): """Color button widget Parameters ---------- * qcolor: QColor \tColor that is initially set * icon: QIcon, defaults to None \tButton foreground image * max_size: QSize, defaults to QSize(28, 28) \tMaximum Size of the button """ colorChanged = pyqtSignal() title = "Select Color" def __init__(self, color, icon=None, max_size=QSize(28, 28)): super().__init__() if icon is not None: self.setIcon(icon) self.color = color self.pressed.connect(self.on_pressed) @property def color(self): return self._color @color.setter def color(self, color): """Color setter that adjusts internal state and button background. Parameters ---------- * color: QColor \tNew color attribute to be set """ if hasattr(self, "_color") and self._color == color: return self._color = color palette = self.palette() palette.setColor(QPalette.Button, color) self.setAutoFillBackground(True) self.setPalette(palette) self.update() def set_max_size(self, size): """Set the maximum size of the widget size: Qsize \tMaximum size of the widget """ self.setMaximumWidth(size.width()) self.setMaximumHeight(size.height()) def on_pressed(self): """Button pressed event handler Shows color dialog and sets the chosen color. """ dlg = QColorDialog(self.parent()) dlg.setCurrentColor(self.color) dlg.setWindowTitle(self.title) dlg.setWindowFlags(Qt.Tool | Qt.FramelessWindowHint) dlg.setWindowModality(Qt.ApplicationModal) dlg.setOptions(QColorDialog.DontUseNativeDialog) p = self.mapFromGlobal(QCursor.pos()) p.setX(p.x() + (self.rect().width() / 2)) p.setY(p.y() + (self.rect().height() / 2)) dlg.move(self.mapToGlobal(p)) if dlg.exec_(): self.color = dlg.currentColor() self.colorChanged.emit() class TextColorButton(ColorButton): """Color button with text icon""" label = "Text Color" def __init__(self, color): icon = Icon.text_color super().__init__(color, icon=icon) self.title = "Select text color" self.setStatusTip("Text color") self.setToolTip("Text color") class LineColorButton(ColorButton): """Color button with text icon""" label = "Line Color" def __init__(self, color): icon = Icon.line_color super().__init__(color, icon=icon) self.title = "Select cell border line color" self.setStatusTip("Cell border line color") self.setToolTip("Cell border line color") class BackgroundColorButton(ColorButton): """Color button with text icon""" label = "Background Color" def __init__(self, color): icon = Icon.background_color super().__init__(color, icon=icon) self.title = "Select cell background color" self.setStatusTip("Cell background color") self.setToolTip("Cell background color") class FontChoiceCombo(QFontComboBox): """Font choice combo box""" label = "Font Family" fontChanged = pyqtSignal() def __init__(self, main_window): super().__init__() self.setMaximumWidth(150) # Set default font self.setFont(QFont()) self.currentFontChanged.connect(self.on_font) @property def font(self): return self.currentFont().family() @font.setter def font(self, font): """Sets font without emitting currentTextChanged""" self.currentFontChanged.disconnect(self.on_font) self.setCurrentFont(QFont(font)) self.currentFontChanged.connect(self.on_font) def icon(self): """Returns QIcon for button identification""" return Icon.font_dialog def on_font(self, font): """Font choice event handler""" self.fontChanged.emit() class FontSizeCombo(QComboBox): """Font choice combo box""" label = "Font Size" fontSizeChanged = pyqtSignal() def __init__(self, main_window): super().__init__() self.setEditable(True) for size in main_window.settings.font_sizes: self.addItem(str(size)) idx = self.findText(str(main_window.settings.font_sizes)) if idx >= 0: self.setCurrentIndex(idx) validator = QIntValidator(1, 128, self) self.setValidator(validator) self.currentTextChanged.connect(self.on_text) @property def size(self): return int(self.currentText()) @size.setter def size(self, size): """Sets size without emitting currentTextChanged""" self.currentTextChanged.disconnect(self.on_text) self.setCurrentText(str(size)) self.currentTextChanged.connect(self.on_text) def icon(self): """Returns QIcon for button identification""" return Icon.font_dialog def on_text(self, size): """Font size choice event handler""" try: value = int(self.currentText()) except ValueError: value = 1 self.setCurrentText("1") if value < 1: self.setCurrentText("1") if value > 128: self.setCurrentText("128") self.fontSizeChanged.emit() class Widgets: def __init__(self, main_window): # Format toolbar widgets self.font_combo = FontChoiceCombo(main_window) self.font_size_combo = FontSizeCombo(main_window) text_color = QColor("black") self.text_color_button = TextColorButton(text_color) background_color = QColor("white") self.background_color_button = BackgroundColorButton(background_color) line_color = QColor("black") self.line_color_button = LineColorButton(line_color) self.renderer_button = RendererButton(main_window) self.rotate_button = RotationButton(main_window) self.justify_button = JustificationButton(main_window) self.align_button = AlignmentButton(main_window) class FindEditor(QLineEdit): """The Find editor widget for the find toolbar""" up = False word = False case = False regexp = False results = False def __init__(self, parent): super().__init__(parent) self.actions = parent.main_window.main_window_actions self.label = "Find editor" self.icon = lambda: Icon.find_next self.sizePolicy().setHorizontalPolicy(QSizePolicy.Preferred) self.setClearButtonEnabled(True) self.addAction(self.actions.find_next, QLineEdit.LeadingPosition) workflows = parent.main_window.workflows self.returnPressed.connect(workflows.edit_find_next) self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.on_context_menu) def prepend_actions(self, menu): """Prepends find specific actions to menu""" toggle_case = Action(self, "Match &case", self.on_toggle_case, checkable=True, statustip='Match case in search') toggle_results = Action(self, "Code and results", self.on_toggle_results, checkable=True, statustip='Search also considers string ' 'representations of result objects.') toggle_up = Action(self, "Search &backward", self.on_toggle_up, checkable=True, statustip='Search fore-/backwards') toggle_word = Action(self, "&Whole words", self.on_toggle_word, checkable=True, statustip='Whole word search') toggle_regexp = Action(self, "Regular expression", self.on_toggle_regexp, checkable=True, statustip='Regular expression search') toggle_case.setChecked(self.case) toggle_results.setChecked(self.results) toggle_up.setChecked(self.up) toggle_word.setChecked(self.word) toggle_regexp.setChecked(self.regexp) actions = (toggle_case, toggle_results, toggle_up, toggle_word, toggle_regexp) menu.insertActions(menu.actions()[0], actions) def on_context_menu(self, point): """Context menu event handler""" menu = self.createStandardContextMenu() menu.insertSeparator(menu.actions()[0]) self.prepend_actions(menu) menu.exec(self.mapToGlobal(point)) def on_toggle_up(self, toggled): """Find upwards toggle event handler""" self.up = toggled def on_toggle_word(self, toggled): """Find whole word toggle event handler""" self.word = toggled def on_toggle_case(self, toggled): """Find case sensitively toggle event handler""" self.case = toggled def on_toggle_regexp(self, toggled): """Find with regular expression toggle event handler""" self.regexp = toggled def on_toggle_results(self, toggled): """Find in results toggle event handler""" self.results = toggled class CellButton(QPushButton): """Button that is used for button cells in the grid :text: str: Button text :grid: QTableView :key: 3-tuple of int: row, column, table """ def __init__(self, text, grid, key): super().__init__(text, grid) self.grid = grid self.key = key # Key of button cell self.clicked.connect(self.on_clicked) def on_clicked(self): """Clicked event handler, executes cell code""" code = self.grid.model.code_array(self.key) result = self.grid.model.code_array._eval_cell(self.key, code) self.grid.model.code_array.frozen_cache[repr(self.key)] = result self.grid.model.code_array.result_cache.clear() self.grid.model.dataChanged.emit(QModelIndex(), QModelIndex()) pyspread-1.99.0.1/LICENSE0000644000175000017500000010450513551171371014432 0ustar andreasandreas GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. {one line to give the program's name and a brief idea of what it does.} Copyright (C) {year} {name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: {project} Copyright (C) {year} {fullname} This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . pyspread-1.99.0.1/setup.cfg0000644000175000017500000000007713604465726015256 0ustar andreasandreas[aliases] test = pytest [egg_info] tag_build = tag_date = 0 pyspread-1.99.0.1/THANKS0000644000175000017500000000100113600150701014310 0ustar andreasandreasThanks to ========= Pete Morgan for the apidocs, the gitlab repo, the great tips and all the code Shai Revzen for the cycle detection algorithm Bosko Markovic for setting up the pyspread wiki Andy Throgmorton for testing pyspread Andreas Noteng for creating and maintaining the Debian and Ubuntu packages The Translation Project for making localization possible The Tango Icon Library project for their great work. pyspread-1.99.0.1/pyspread.sh0000755000175000017500000000020613551171371015604 0ustar andreasandreas#!/bin/bash # Calls pyspread from top level folder of extracted tarball export PYTHONPATH=$PYTHONPATH:. python3 ./src/pyspread.py $@ pyspread-1.99.0.1/changelog0000644000175000017500000000211413604465610015271 0ustar andreasandreasChangelog for pyspread ====================== Note: This changelog does not comprise development of pyspread for Python2 It starts with the first Alpha release 1.99.0.0 1.99.0.1 -------- New functionality: * Command line interface * Basic help system * Button cell functionality * svg file export * csv file export * csv file import Missing features: * Better help browser dialog Known issues: * Figures and images are printed in low resolution * Operations in large grids take too long 1.99.0.0 -------- Initial Alpha release of pyspread v2.0 for Python 3.7+ Basic functionality is present. However, the code is neither complete nor thoroughly tested. DO NOT USE FOR IMPORTANT WORK! Dependencies: * Mandatory: Python3.7+, PyQt5, PyQt5.Svg * Optional: matplotlib, pyenchant * For building the apidocs with Sphinx see apidics/requirements.txt Missing features: * Import and export of data * Help system * Button cells * Command line interface Known issues: * Figures and images are printed in low resolution * The topmost and leftmost lines of grid are not printed pyspread-1.99.0.1/__init__.py0000644000175000017500000000000013551171371015517 0ustar andreasandreaspyspread-1.99.0.1/pyspread.desktop0000644000175000017500000000076713602625776016666 0ustar andreasandreas[Desktop Entry] Categories=Math;Spreadsheet;Office Comment[en_US]=A Python based spreadsheet Comment=A Python based spreadsheet Exec=/usr/bin/pyspread %f GenericName[en_US]= GenericName= Keywords=python;spreadsheet;matplotlib;math; Icon=pyspread MimeType=application/x-pyspread-spreadsheet;application/x-pyspread-bz-spreadsheet Name[en_US]=pyspread Name=pyspread Path= StartupNotify=false Terminal=false Type=Application X-DBUS-ServiceName= X-DBUS-StartupType= X-KDE-SubstituteUID=false X-KDE-Username= pyspread-1.99.0.1/pyspread.egg-info/0000755000175000017500000000000013604465725016751 5ustar andreasandreaspyspread-1.99.0.1/pyspread.egg-info/dependency_links.txt0000644000175000017500000000000113604465725023017 0ustar andreasandreas pyspread-1.99.0.1/pyspread.egg-info/PKG-INFO0000644000175000017500000000233713604465725020053 0ustar andreasandreasMetadata-Version: 2.1 Name: pyspread Version: 1.99.0.1 Summary: Python spreadsheet Home-page: https://pyspread.gitlab.io/ Author: Martin Manns Author-email: mmanns@gmx.net License: GPL v3 :: GNU General Public License Project-URL: Bug Tracker, https://gitlab.com/pyspread/pyspread/issues Project-URL: Documentation, https://pyspread.gitlab.io/docs.html Project-URL: Source Code, https://gitlab.com/pyspread/pyspread Description: Pyspread is a non-traditional spreadsheet application that is based on and written in the programming language Python. Keywords: spreadsheet,pyspread Platform: UNKNOWN Classifier: Development Status :: 3 - Alpha Classifier: Environment :: X11 Applications :: GTK Classifier: Environment :: Win32 (MS Windows) Classifier: Intended Audience :: End Users/Desktop Classifier: License :: OSI Approved :: GNU General Public License (GPL) Classifier: Natural Language :: English Classifier: Operating System :: OS Independent Classifier: Operating System :: POSIX Classifier: Operating System :: Microsoft Classifier: Programming Language :: Python :: 3.7 Classifier: Topic :: Office/Business :: Financial :: Spreadsheet Requires: numpy (>=1.1) Requires: PyQt5 (>=5.11.3) Provides-Extra: matplotlib Provides-Extra: pyenchant pyspread-1.99.0.1/pyspread.egg-info/SOURCES.txt0000644000175000017500000002611213604465725020637 0ustar andreasandreasAUTHORS LICENSE MANIFEST.in README.md THANKS __init__.py changelog pyspread.bat pyspread.desktop pyspread.pth pyspread.sh setup.cfg setup.py ./src/__init__.py ./src/actions.py ./src/cli.py ./src/commands.py ./src/dialogs.py ./src/entryline.py ./src/grid.py ./src/icons.py ./src/installer.py ./src/menus.py ./src/panels.py ./src/pyspread.py ./src/settings.py ./src/toolbar.py ./src/widgets.py ./src/workflows.py ./src/interfaces/__init__.py ./src/interfaces/pys.py ./src/lib/__init__.py ./src/lib/attrdict.py ./src/lib/charts.py ./src/lib/csv.py ./src/lib/dependencies.py ./src/lib/exception_handling.py ./src/lib/hashing.py ./src/lib/qimage_svg.py ./src/lib/selection.py ./src/lib/spelltextedit.py ./src/lib/string_helpers.py ./src/lib/testlib.py ./src/lib/typechecks.py ./src/lib/qimage2ndarray/__init__.py ./src/lib/qimage2ndarray/dynqt.py ./src/lib/qimage2ndarray/qimageview_python.py ./src/lib/qimage2ndarray/qt_driver.py ./src/model/__init__.py ./src/model/model.py ./src/model/test/__init__.py ./src/model/test/test_model.py pyspread.egg-info/PKG-INFO pyspread.egg-info/SOURCES.txt pyspread.egg-info/dependency_links.txt pyspread.egg-info/requires.txt pyspread.egg-info/top_level.txt share/doc/tutorial.html share/doc/images/Tutorial1.png share/doc/images/Tutorial2.png share/doc/images/Tutorial3.png share/doc/images/Tutorial4.png share/doc/images/screenshot_approve_dialog.png share/doc/images/screenshot_chartdialog.png share/doc/images/screenshot_csv_export.png share/doc/images/screenshot_csv_import.png share/doc/images/screenshot_find_dialog.png share/doc/images/screenshot_macros.png share/doc/images/screenshot_main_window.png share/doc/images/screenshot_new_dialog.png share/doc/images/screenshot_paste_as.png share/doc/images/screenshot_preferences_dialog.png share/doc/images/screenshot_print_preview_1.png share/doc/images/screenshot_print_preview_2.png share/doc/images/screenshot_replace_dialog.png share/doc/manual/advanced_topics.html share/doc/manual/basic_concepts.html share/doc/manual/edit_menu.html share/doc/manual/file_menu.html share/doc/manual/format_menu.html share/doc/manual/macro_menu.html share/doc/manual/manual.html share/doc/manual/overview.html share/doc/manual/view_menu.html share/doc/manual/workspace.html share/doc/static/css/bootstrap.min.css share/doc/static/css/code_highlight.css share/doc/static/css/pyspread.2019.css share/icons/pyspread.ico share/icons/pyspread.svg share/icons/actions/document-approve.svg share/icons/actions/document-export.svg share/icons/actions/document-import.svg share/icons/actions/document-log-out.svg share/icons/actions/document-new-gpg-key.svg share/icons/actions/document-new.svg share/icons/actions/document-open.svg share/icons/actions/document-page-setup.svg share/icons/actions/document-print-preview.svg share/icons/actions/document-print.svg share/icons/actions/document-properties.svg share/icons/actions/document-save-as.svg share/icons/actions/document-save.svg share/icons/actions/edit-clear.svg share/icons/actions/edit-copy-results.svg share/icons/actions/edit-copy.svg share/icons/actions/edit-cut.svg share/icons/actions/edit-delete-column.svg share/icons/actions/edit-delete-row.svg share/icons/actions/edit-delete-table.svg share/icons/actions/edit-delete.svg share/icons/actions/edit-find-next.svg share/icons/actions/edit-find-replace.svg share/icons/actions/edit-find.svg share/icons/actions/edit-insert-column.svg share/icons/actions/edit-insert-row.svg share/icons/actions/edit-insert-table.svg share/icons/actions/edit-paste-as.svg share/icons/actions/edit-paste.svg share/icons/actions/edit-quote.svg share/icons/actions/edit-redo.svg share/icons/actions/edit-resize-grid.svg share/icons/actions/edit-select-all.svg share/icons/actions/edit-sort-ascending.svg share/icons/actions/edit-sort-descending.svg share/icons/actions/edit-undo.svg share/icons/actions/format-background-color.svg share/icons/actions/format-borders-0.svg share/icons/actions/format-borders-1.svg share/icons/actions/format-borders-16.svg share/icons/actions/format-borders-2.svg share/icons/actions/format-borders-32.svg share/icons/actions/format-borders-4.svg share/icons/actions/format-borders-64.svg share/icons/actions/format-borders-8.svg share/icons/actions/format-borders-all.svg share/icons/actions/format-borders-bottom.svg share/icons/actions/format-borders-inner.svg share/icons/actions/format-borders-left.svg share/icons/actions/format-borders-outer.svg share/icons/actions/format-borders-right.svg share/icons/actions/format-borders-top-bottom.svg share/icons/actions/format-borders-top.svg share/icons/actions/format-button.svg share/icons/actions/format-cell-chart.svg share/icons/actions/format-cell-image.svg share/icons/actions/format-cell-markup.svg share/icons/actions/format-cell-rotate-0.svg share/icons/actions/format-cell-rotate-180.svg share/icons/actions/format-cell-rotate-270.svg share/icons/actions/format-cell-rotate-90.svg share/icons/actions/format-cell-text.svg share/icons/actions/format-copy.svg share/icons/actions/format-font.svg share/icons/actions/format-freeze.svg share/icons/actions/format-justify-center.svg share/icons/actions/format-justify-fill.svg share/icons/actions/format-justify-left.svg share/icons/actions/format-justify-right.svg share/icons/actions/format-line-color.svg share/icons/actions/format-line-color2.svg share/icons/actions/format-lock.svg share/icons/actions/format-merge-cells.svg share/icons/actions/format-paste.svg share/icons/actions/format-text-align-bottom.svg share/icons/actions/format-text-align-center.svg share/icons/actions/format-text-align-top.svg share/icons/actions/format-text-bold.svg share/icons/actions/format-text-color.svg share/icons/actions/format-text-italic.svg share/icons/actions/format-text-strikethrough.svg share/icons/actions/format-text-underline.svg share/icons/actions/help-browser.svg share/icons/actions/help-dependencies.svg share/icons/actions/help-faq.svg share/icons/actions/help-tutorial.svg share/icons/actions/macro-insert-chart.svg share/icons/actions/macro-insert-image.svg share/icons/actions/macro-link-image.svg share/icons/actions/macro-open.svg share/icons/actions/macro-save.svg share/icons/actions/menu-manager.svg share/icons/actions/status-attention.svg share/icons/actions/view-check-spelling.svg share/icons/actions/view-fullscreen.svg share/icons/actions/view-goto-cell.svg share/icons/actions/view-refresh.svg share/icons/actions/view-show-frozen.svg share/icons/actions/view-timer.svg share/icons/actions/view-zoom-in.svg share/icons/actions/view-zoom-original.svg share/icons/actions/view-zoom-out.svg share/icons/charts/chart_area_1_1.svg share/icons/charts/chart_area_1_2.svg share/icons/charts/chart_area_1_3.svg share/icons/charts/chart_bar_1_1.svg share/icons/charts/chart_bar_1_2.svg share/icons/charts/chart_bar_1_3.svg share/icons/charts/chart_boxplot_1_1.svg share/icons/charts/chart_boxplot_1_2.svg share/icons/charts/chart_boxplot_2_1.svg share/icons/charts/chart_boxplot_2_2.svg share/icons/charts/chart_bubble_1_1.svg share/icons/charts/chart_bubble_1_2.svg share/icons/charts/chart_color_polar_1_1.svg share/icons/charts/chart_colored_1_1.svg share/icons/charts/chart_column_1_1.svg share/icons/charts/chart_column_1_2.svg share/icons/charts/chart_column_1_3.svg share/icons/charts/chart_contour_1_1.svg share/icons/charts/chart_contour_1_2.svg share/icons/charts/chart_contour_2_1.svg share/icons/charts/chart_contour_2_2.svg share/icons/charts/chart_contour_polar_1_1.svg share/icons/charts/chart_dropbar_1_1.svg share/icons/charts/chart_dropbar_1_2.svg share/icons/charts/chart_dropbar_1_3.svg share/icons/charts/chart_dropbar_1_4.svg share/icons/charts/chart_histogram_1_1.svg share/icons/charts/chart_histogram_1_2.svg share/icons/charts/chart_histogram_1_3.svg share/icons/charts/chart_histogram_1_4.svg share/icons/charts/chart_histogram_2_1.svg share/icons/charts/chart_line_1_1.svg share/icons/charts/chart_line_1_2.svg share/icons/charts/chart_line_1_3.svg share/icons/charts/chart_line_2_1.svg share/icons/charts/chart_line_2_2.svg share/icons/charts/chart_line_2_3.svg share/icons/charts/chart_matrix_1_1.svg share/icons/charts/chart_matrix_1_2.svg share/icons/charts/chart_matrix_1_3.svg share/icons/charts/chart_minmax_1_1.svg share/icons/charts/chart_minmax_1_2.svg share/icons/charts/chart_minmax_1_3.svg share/icons/charts/chart_minmax_1_4.svg share/icons/charts/chart_minmax_2_1.svg share/icons/charts/chart_minmax_2_2.svg share/icons/charts/chart_minmax_2_3.svg share/icons/charts/chart_minmax_2_4.svg share/icons/charts/chart_pie_1_1.svg share/icons/charts/chart_pie_2_1.svg share/icons/charts/chart_pie_3_1.svg share/icons/charts/chart_pie_3_2.svg share/icons/charts/chart_polar_1_1.svg share/icons/charts/chart_prob_1_1.svg share/icons/charts/chart_radar_1_1.svg share/icons/charts/chart_radar_1_2.svg share/icons/charts/chart_radar_1_3.svg share/icons/charts/chart_ring_1_1.svg share/icons/charts/chart_ring_1_2.svg share/icons/charts/chart_scatter_1_1.svg share/icons/charts/chart_scatter_3_1.svg share/icons/charts/chart_scatter_3_2.svg share/icons/charts/chart_scatter_3_3.svg share/icons/charts/chart_scatter_4_1.svg share/icons/charts/chart_scatter_4_2.svg share/icons/charts/chart_scatter_4_3.svg share/icons/charts/chart_scatter_4_4.svg share/icons/charts/chart_scatterhist_1_1.svg share/icons/charts/chart_surface_2_1.svg share/icons/charts/chart_surface_2_2.svg share/icons/charts/chart_surface_2_3.svg share/icons/status/dialog-warning.svg share/templates/matplotlib/COPYING share/templates/matplotlib/chart_area_1_1.py share/templates/matplotlib/chart_bar_1_3.py share/templates/matplotlib/chart_boxplot_2_2.py share/templates/matplotlib/chart_bubble_1_1.py share/templates/matplotlib/chart_column_1_1.py share/templates/matplotlib/chart_column_1_2.py share/templates/matplotlib/chart_contour_1_2.py share/templates/matplotlib/chart_histogram_1_1.py share/templates/matplotlib/chart_histogram_1_4.py share/templates/matplotlib/chart_line_1_1.py share/templates/matplotlib/chart_matrix_1_1.py share/templates/matplotlib/chart_pie_1_1.py share/templates/matplotlib/chart_polar_1_1.py share/templates/matplotlib/chart_ring_1_1.py share/templates/matplotlib/chart_scatter_1_1.py share/templates/matplotlib/chart_scatterhist_1_1.py share/templates/matplotlib/chart_surface_2_1.py src/__init__.py src/actions.py src/cli.py src/commands.py src/dialogs.py src/entryline.py src/grid.py src/icons.py src/installer.py src/menus.py src/panels.py src/pyspread.py src/settings.py src/toolbar.py src/widgets.py src/workflows.py src/interfaces/__init__.py src/interfaces/pys.py src/lib/__init__.py src/lib/attrdict.py src/lib/charts.py src/lib/csv.py src/lib/dependencies.py src/lib/exception_handling.py src/lib/hashing.py src/lib/qimage_svg.py src/lib/selection.py src/lib/spelltextedit.py src/lib/string_helpers.py src/lib/testlib.py src/lib/typechecks.py src/lib/qimage2ndarray/__init__.py src/lib/qimage2ndarray/dynqt.py src/lib/qimage2ndarray/qimageview_python.py src/lib/qimage2ndarray/qt_driver.py src/lib/test/test_hashing.py src/lib/test/test_selection.py src/lib/test/test_string_helpers.py src/model/__init__.py src/model/model.py src/model/test/__init__.py src/model/test/test_model.py src/test/test.pysu src/test/test_actions.py src/test/test_invalid1.pysu src/test/test_invalid2.pysupyspread-1.99.0.1/pyspread.egg-info/top_level.txt0000644000175000017500000000000413604465725021475 0ustar andreasandreassrc pyspread-1.99.0.1/pyspread.egg-info/requires.txt0000644000175000017500000000007413604465725021352 0ustar andreasandreas [matplotlib] matplotlib>=1.1.1 [pyenchant] pyenchant>=1.1 pyspread-1.99.0.1/pyspread.pth0000644000175000017500000000000413551171371015756 0ustar andreasandreassrc pyspread-1.99.0.1/pyspread.bat0000644000175000017500000000005613551171371015740 0ustar andreasandreasset PYTHONPATH=%PYTHONPATH%:. src\pyspread.py