color-spantrace-0.2.0/.cargo_vcs_info.json0000644000000001360000000000100141270ustar { "git": { "sha1": "15538366ffc69d3bae23a67fbeaf3edd7d08b107" }, "path_in_vcs": "" }color-spantrace-0.2.0/.github/workflows/ci.yml000064400000000000000000000033220072674642500174620ustar 00000000000000on: [push, pull_request] name: Continuous integration jobs: check: name: Check runs-on: ubuntu-latest strategy: matrix: rust: - stable steps: - uses: actions/checkout@v1 - uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.rust }} override: true - uses: actions-rs/cargo@v1 with: command: check test: name: Test Suite runs-on: ubuntu-latest strategy: matrix: rust: - stable - nightly steps: - uses: actions/checkout@v1 - uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.rust }} override: true - uses: actions-rs/cargo@v1 with: command: test # - uses: actions-rs/cargo@v1 # with: # command: test # args: --no-default-features fmt: name: Rustfmt runs-on: ubuntu-latest strategy: matrix: rust: - stable steps: - uses: actions/checkout@v1 - uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.rust }} override: true - run: rustup component add rustfmt - uses: actions-rs/cargo@v1 with: command: fmt args: --all -- --check clippy: name: Clippy runs-on: ubuntu-latest strategy: matrix: rust: - stable steps: - uses: actions/checkout@v1 - uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.rust }} override: true - run: rustup component add clippy - uses: actions-rs/cargo@v1 with: command: clippy args: -- -D warnings color-spantrace-0.2.0/.gitignore000064400000000000000000000000230072674642500147320ustar 00000000000000/target Cargo.lock color-spantrace-0.2.0/CHANGELOG.md000064400000000000000000000016440072674642500145650ustar 00000000000000# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] - ReleaseDate ## [0.2.0] - 2022-01-12 ### Changed - Updated dependency versions to match latest tracing versions ## [0.1.6] - 2020-12-02 ### Fixed - Ignore all io errors when resolving source files instead of only file not found errors ## [v0.1.5] - 2020-12-01 ### Added - Support custom color themes for spantrace format [Unreleased]: https://github.com/yaahc/color-spantrace/compare/v0.2.0...HEAD [0.2.0]: https://github.com/yaahc/color-spantrace/compare/v0.1.6...v0.2.0 [0.1.6]: https://github.com/yaahc/color-spantrace/compare/v0.1.5...v0.1.6 [v0.1.5]: https://github.com/yaahc/color-spantrace/releases/tag/v0.1.5 color-spantrace-0.2.0/Cargo.lock0000644000000210170000000000100121030ustar # This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 3 [[package]] name = "ansi-parser" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcb2392079bf27198570d6af79ecbd9ec7d8f16d3ec6b60933922fdb66287127" dependencies = [ "heapless", "nom", ] [[package]] name = "ansi_term" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ "winapi", ] [[package]] name = "as-slice" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45403b49e3954a4b8428a0ac21a4b7afadccf92bfd96273f1a58cd4812496ae0" dependencies = [ "generic-array 0.12.4", "generic-array 0.13.3", "generic-array 0.14.5", "stable_deref_trait", ] [[package]] name = "byteorder" version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "color-spantrace" version = "0.2.0" dependencies = [ "ansi-parser", "once_cell", "owo-colors", "tracing", "tracing-core", "tracing-error", "tracing-subscriber", ] [[package]] name = "generic-array" version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" dependencies = [ "typenum", ] [[package]] name = "generic-array" version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f797e67af32588215eaaab8327027ee8e71b9dd0b2b26996aedf20c030fce309" dependencies = [ "typenum", ] [[package]] name = "generic-array" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" dependencies = [ "typenum", "version_check 0.9.4", ] [[package]] name = "hash32" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4041af86e63ac4298ce40e5cca669066e75b6f1aa3390fe2561ffa5e1d9f4cc" dependencies = [ "byteorder", ] [[package]] name = "heapless" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74911a68a1658cfcfb61bc0ccfbd536e3b6e906f8c2f7883ee50157e3e2184f1" dependencies = [ "as-slice", "generic-array 0.13.3", "hash32", "stable_deref_trait", ] [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "log" version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ "cfg-if", ] [[package]] name = "memchr" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "nom" version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" dependencies = [ "memchr", "version_check 0.1.5", ] [[package]] name = "once_cell" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" [[package]] name = "owo-colors" version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20448fd678ec04e6ea15bbe0476874af65e98a01515d667aa49f1434dc44ebf4" [[package]] name = "pin-project-lite" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" [[package]] name = "proc-macro2" version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" dependencies = [ "unicode-xid", ] [[package]] name = "quote" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d" dependencies = [ "proc-macro2", ] [[package]] name = "sharded-slab" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" dependencies = [ "lazy_static", ] [[package]] name = "smallvec" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309" [[package]] name = "stable_deref_trait" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "syn" version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a684ac3dcd8913827e18cd09a68384ee66c1de24157e3c556c9ab16d85695fb7" dependencies = [ "proc-macro2", "quote", "unicode-xid", ] [[package]] name = "thread_local" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" dependencies = [ "once_cell", ] [[package]] name = "tracing" version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" dependencies = [ "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "tracing-core" version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" dependencies = [ "lazy_static", ] [[package]] name = "tracing-error" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" dependencies = [ "tracing", "tracing-subscriber", ] [[package]] name = "tracing-log" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" dependencies = [ "lazy_static", "log", "tracing-core", ] [[package]] name = "tracing-subscriber" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d81bfa81424cc98cb034b837c985b7a290f592e5b4322f353f94a0ab0f9f594" dependencies = [ "ansi_term", "sharded-slab", "smallvec", "thread_local", "tracing-core", "tracing-log", ] [[package]] name = "typenum" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" [[package]] name = "unicode-xid" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" [[package]] name = "version_check" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" [[package]] name = "version_check" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "winapi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ "winapi-i686-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu", ] [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" color-spantrace-0.2.0/Cargo.toml0000644000000043760000000000100121370ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2018" name = "color-spantrace" version = "0.2.0" authors = ["Jane Lusby "] description = "A pretty printer for tracing_error::SpanTrace based on color-backtrace" documentation = "https://docs.rs/color-spantrace" readme = "README.md" license = "MIT OR Apache-2.0" repository = "https://github.com/yaahc/color-spantrace" [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] [package.metadata.release] dev-version = false [[package.metadata.release.pre-release-replacements]] file = "CHANGELOG.md" replace = "{{version}}" search = "Unreleased" [[package.metadata.release.pre-release-replacements]] exactly = 1 file = "src/lib.rs" replace = "#![doc(html_root_url = \"https://docs.rs/{{crate_name}}/{{version}}\")]" search = "#!\\[doc\\(html_root_url.*" [[package.metadata.release.pre-release-replacements]] exactly = 1 file = "CHANGELOG.md" replace = "...{{tag_name}}" search = "\\.\\.\\.HEAD" [[package.metadata.release.pre-release-replacements]] file = "CHANGELOG.md" replace = "{{date}}" search = "ReleaseDate" [[package.metadata.release.pre-release-replacements]] exactly = 1 file = "CHANGELOG.md" replace = "\n\n## [Unreleased] - ReleaseDate" search = "" [[package.metadata.release.pre-release-replacements]] exactly = 1 file = "CHANGELOG.md" replace = "\n[Unreleased]: https://github.com/yaahc/{{crate_name}}/compare/{{tag_name}}...HEAD" search = "" [dependencies.once_cell] version = "1.4.1" [dependencies.owo-colors] version = "3.2.0" [dependencies.tracing-core] version = "0.1.21" [dependencies.tracing-error] version = "0.2.0" [dev-dependencies.ansi-parser] version = "0.8" [dev-dependencies.tracing] version = "0.1.29" [dev-dependencies.tracing-subscriber] version = "0.3.4" color-spantrace-0.2.0/Cargo.toml.orig000064400000000000000000000034130072674642500156370ustar 00000000000000[package] name = "color-spantrace" version = "0.2.0" authors = ["Jane Lusby "] edition = "2018" license = "MIT OR Apache-2.0" description = "A pretty printer for tracing_error::SpanTrace based on color-backtrace" repository = "https://github.com/yaahc/color-spantrace" documentation = "https://docs.rs/color-spantrace" readme = "README.md" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] tracing-error = "0.2.0" tracing-core = "0.1.21" owo-colors = "3.2.0" once_cell = "1.4.1" [dev-dependencies] tracing-subscriber = "0.3.4" tracing = "0.1.29" ansi-parser = "0.8" # used for testing color schemes [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] [package.metadata.release] dev-version = false [[package.metadata.release.pre-release-replacements]] file = "CHANGELOG.md" search = "Unreleased" replace="{{version}}" [[package.metadata.release.pre-release-replacements]] file = "src/lib.rs" search = "#!\\[doc\\(html_root_url.*" replace = "#![doc(html_root_url = \"https://docs.rs/{{crate_name}}/{{version}}\")]" exactly = 1 [[package.metadata.release.pre-release-replacements]] file = "CHANGELOG.md" search = "\\.\\.\\.HEAD" replace="...{{tag_name}}" exactly = 1 [[package.metadata.release.pre-release-replacements]] file = "CHANGELOG.md" search = "ReleaseDate" replace="{{date}}" [[package.metadata.release.pre-release-replacements]] file="CHANGELOG.md" search="" replace="\n\n## [Unreleased] - ReleaseDate" exactly=1 [[package.metadata.release.pre-release-replacements]] file="CHANGELOG.md" search="" replace="\n[Unreleased]: https://github.com/yaahc/{{crate_name}}/compare/{{tag_name}}...HEAD" exactly=1 color-spantrace-0.2.0/README.md000064400000000000000000000050210072674642500142240ustar 00000000000000color-spantrace =============== [![Build Status][actions-badge]][actions-url] [![Latest Version](https://img.shields.io/crates/v/color-spantrace.svg)](https://crates.io/crates/color-spantrace) [![Rust Documentation](https://img.shields.io/badge/api-rustdoc-blue.svg)](https://docs.rs/color-spantrace) [actions-badge]: https://github.com/yaahc/color-spantrace/workflows/Continuous%20integration/badge.svg [actions-url]: https://github.com/yaahc/color-spantrace/actions?query=workflow%3A%22Continuous+integration%22 A rust library for colorizing [`tracing_error::SpanTrace`] objects in the style of [`color-backtrace`]. ## Setup Add the following to your `Cargo.toml`: ```toml [dependencies] color-spantrace = "0.2" tracing = "0.1" tracing-error = "0.2" tracing-subscriber = "0.3" ``` Setup a tracing subscriber with an `ErrorLayer`: ```rust use tracing_error::ErrorLayer; use tracing_subscriber::{prelude::*, registry::Registry}; Registry::default().with(ErrorLayer::default()).init(); ``` Create spans and enter them: ```rust use tracing::instrument; use tracing_error::SpanTrace; #[instrument] fn foo() -> SpanTrace { SpanTrace::capture() } ``` And finally colorize the `SpanTrace`: ```rust use tracing_error::SpanTrace; let span_trace = SpanTrace::capture(); println!("{}", color_spantrace::colorize(&span_trace)); ``` ## Example This example is taken from `examples/usage.rs`: ```rust use tracing::instrument; use tracing_error::{ErrorLayer, SpanTrace}; use tracing_subscriber::{prelude::*, registry::Registry}; #[instrument] fn main() { Registry::default().with(ErrorLayer::default()).init(); let span_trace = one(42); println!("{}", color_spantrace::colorize(&span_trace)); } #[instrument] fn one(i: u32) -> SpanTrace { two() } #[instrument] fn two() -> SpanTrace { SpanTrace::capture() } ``` This creates the following output ### Minimal Format ![minimal format](./pictures/minimal.png) ### Full Format ![Full format](./pictures/full.png) #### License Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. [`tracing_error::SpanTrace`]: https://docs.rs/tracing-error/*/tracing_error/struct.SpanTrace.html [`color-backtrace`]: https://github.com/athre0z/color-backtrace color-spantrace-0.2.0/examples/usage.rs000064400000000000000000000006560072674642500162460ustar 00000000000000use tracing::instrument; use tracing_error::{ErrorLayer, SpanTrace}; use tracing_subscriber::{prelude::*, registry::Registry}; #[instrument] fn main() { Registry::default().with(ErrorLayer::default()).init(); let span_trace = one(42); println!("{}", color_spantrace::colorize(&span_trace)); } #[instrument] fn one(i: u32) -> SpanTrace { two() } #[instrument] fn two() -> SpanTrace { SpanTrace::capture() } color-spantrace-0.2.0/pictures/full.png000064400000000000000000003422700072674642500162650ustar 00000000000000PNG  IHDRsBIT|dtEXtSoftwaregnome-screenshot> IDATxwxսZiջ,Y$.5. G MB _H! p{ 6b n[,YVZhWޕd|^ϣ3gy?Rjj@ @ @ #p@ @ @ B@ @ @ F4B@ @ F@ @ @ ![ @ @ #!d @ @ `DW8k,Ź @ @ _![ "Odռ'+; @ @ _k@ @ @ h-@ @ `OvrpC .Z,@ Ol@ f,F3_s_(M]$@ es<]uA*],@ @BaDroW W [qefb61yl2-ǛNɦ.@ @ -d0jʤ^?ۏ~K$֥721g\`zTr&w_qzYdYƒ aX +-g1%(M(G[2k lKcu1~xyx V^=le b$.+ 'Fl)`+m5b2UQ\h4>HYEQsw@ _mF-4 LNxK$йh9K&/?5w"7/>ymJ ->9cmm|a,`0HmɑV'.):IbbL4Sbɶuh$Vv65S< "`e\l1&K@/i LƱwPV2 %/ >5EܤYe}-Z;f}ڼEPenzk>yG"zHҝR?sCR<$dc|eD,SA!7B~1V f3n羮յXŽ{y9Ɋ VȷFQhcl0">]mqxL3YO5X,SƆF<"E " qi̾kiG}i7LZ0t ʪWBPeg>ڢ.# .(V'֦g-=-vT>: /] [&)5s2SŘЄڝ~NSڍ"Q##1X6;?a2B.~ĎAUvNaIfj[&qh|#GRΞh[$XLш_Q8cv9aO$m0"+ ZZ_#G*sSpa豒a-Y!!j$H2p}NTf )bd-|UY:ko&~r+555<\E!W-CfZ4lwLvȾ K@l|3Q =YYlUob:!y-v[ +X8<tȪV?;HQB j%FV~kgu 7[MH06Y,Z|PS7MN6^1z㢭u\$ıy:IQxE!+/%35hW㒩*i܍q)zǘU[z3cINbAQ&vW߾5ҧuNh$xdC% 2h%4'f2zNv· _ޝ4L]j:$IdGG`==uul[iX MJ&:#G]e{u66B8s!!+#0џȦϝĥKH)* Wk+ ٵz-GF#.^Hefll1QCn}1l)Ɂ3'waU3v<p9Z9]|o&1g1a,&ģ7|m4*t>} O/^fnWwsLd.^Llj >Ň4=iE\tm3:1B2Q?= G;͚4qVOT\,Bڰ,bҤI\uUL<8<l۶_^-,,'fZ<, |/ad$=Τ,N#;y1Mܶf&-)O_ @Y0qd%eQovQ^Wx` ힾgI7t,F ^{&g G+Np0G+տSr۲{wbLEZ>.;ρn.nVb́Krݪ?.1Tǵ(&+׏scM2EiTD} I`IrJx~_aÆ>Yp!>UVpލF#s̡B08*++پ};NcB.e&ƪī >z=o77słN!``l|j]FÍqq|DMHHqQ+ƎQ={^,&u"ڇLAF iu \쩓~e4{1qh`̜"&M՟=ԧ)~NF#{'yf-$cKIf۲u 's_U cƌa̘1\}`׮]w_7zhn xGV/HjL^2y:FWDoY`E -F8k,GOಢe᭿|{~u'T5c6IKflf>W^/SuɌz#w^v3-KM"%6N x|[$X8aj~lT Q1>}%I驌( /aU{+oW`a.#ѠgBL4K(D8^5-\Nn馠ddd0}tnfV\ V ɡ ݴ'[Sn|.;:^Oz~*Y{-Ԝ6{OOUB¬Wf_%beW:!tKMiGJ= cnfdHM6q}jYxqBdb֬~̮]DpK/!66XƏu]ǯklrִ( { OToTUq}r2QQQqp&]mBvAeE}d[ugejqgt{;BM%G0>GeJmXX-aW!f]l’$=ur/d(px1Ǟk1V$b+W^FF#W=^px0K"m(? %ޝ\3C.3FYS:n89vh'>XFYMF?0nm_ It:vWWsTk4fs @q 53PE*gZ\= .d$a3eEJ0! Y)4DbUloW ) @  %!KǪtLGEv2qEAqKM-b"w ::.>)26#.Ow1暚zET-ύiU v6UGs1bHKY$f~Fg( ehh gXnfCn8pCGh(LB_" ƥ=u'w<~?ǶlG3}7$g&n/çRrG3m_ :VՑ G;q t^N+F4dNrMaܒtcr$$$p뭷ʽKiii` 7]w݅h{??3X~=o"k֬aϞ=<XbX8k׵l u3{|^w+$$I$g%h?>CG8| U & 3pe;->I9S_܉vE}{ܼy ǫJp{=XMav F%e<eyLN沙W+$8ʒy+g]$b=YLq!$Ib\V'SFOdᄹl,"vuS 5uh5Z23>FDl\^n6OGR#ЇhS|qK"epʇQ'Muuרht_>{ruR>zE}a;%7Wxپ(-xD`jK=<юUZ뙐n 2m1GQEUUT̊mHb$φ 9s&fYf矇\o@Gܴ)p_}kײvZ~i zk*dgZ .v>z1Bj! ؚU_* hZ%^71^@ϣ룢Mj$|}-hQj!{$nF]`AZֈQt o&o=ū~W@ zKTkom?IDlZ*oQnjn??mÙ )-g+`XQ/jKN揞1sths%!K-cvj^|FMH{_~> 0Z,|]8Nl}-}*ݽo{;so60/k~lOy|9Viu:2>v"0!z>G%d~`~pO8کVgKU.[_{+0)Zu%so.0o"&d/_Ù/JW_eٲe3k, )t:ӟ䃽~zo¸qCEnj6q.Gk":h4M]Ad1ʶ;X6u138~YkX3Z۝A{v_7a !;3Q=](;̚m21{\c4Q%,z|^zzxG+f,U{gZڼ&0q\f. PXsk5eSs'c"&bwoܜ>Fz^= z2D{FmwI 7efvs؝^#EÎ&8~^gq9N7#v %ƀ 0?$da9IhCpuA;NE[Wܮe!*2gƍ*{PB``ΜQS;wug믿Ce.\HQQyF-|T[ɻz=^CEff>?**o2-ׁ7QQABv~)\@#~jf}ɯ(|TfmkㆌT>;y6Z6N FН5)'ռOB8\U?ES49w41I]W_+ٹzj9Egw0=ǂL;؞[4ϿvKwLb -,WLkCΧvUĦvw"$I-q$%H[:3>+tewZZ8|<=lMz;H2=\v5i<&k8bgmkgʦ3|׭[z4 ӦMu=۷;zRRRB.~ϚmLSPږ!+Ks[ǵ&2nMM^g7ajw{ݼem@X$ L5Ęchqe3IaGOKdrq!K{F̏ r싓TeճbMi*gJp'"w)99yC3"[&?q3Vuvg.$\3zA:?GJTWڬX:.Ţ.X $3!ѓ IDATSj6Gbvv ܹsх(5kfsȐ!Xee1HlċOh)$$:] Y~t)>>/^>3;ъt$V I!PYC.!Z]BCMDRFڽZQV+t[23T>=rujԘOQXE%ddqb<pڢ W1;Ƿ=侻 :&O5]_vJɱm_"=m)ɘq9qPĎ3MszڒRtrnqNlI}T<|V: /YvtiWeW4,H(VkKO|E~᨟pӴ|>unki!&497G}C;rs;D{t9?//N I˙kWI.jۇ/r42oFu|_DНQn$=7hۘ` ? Lŭhs\ZN@2?;f>},uwƤ媦Z)}8$ٺڜQ-2mbHJ~NSC^3O8@pOje̙lݪ~n+қH/gƌ*b8>`j4Ը̊F/j^Qģ_~U7;I(uǞ`ʕm48+H2hTz|0 ©6-^_@N3pFba+rCzj =wf"|X;t i[#.۪@ D !go})yp8ӕ!kAuذ CQ>CAbJHJ̨3(\0s닃6uC<`C~ݸNUG@RN6WAq 1NeKH2=\vGj~'6RV93Quu} .rw:m(:F\ڦw`z$I AO՞h\iՏ,A:sq!jN 37yfV7nקxb)/m4?m3b7JK[ɶf75u$:!nojEN';ɶrx ۽m?KuJ>~M*B_d޼y$&&2c f̘ѣ9r[gϞd7yo;]] |ccni(9^p{և~E'2Cd$ݣumdݙTjy~ƻH>Le/]t̝^cǎۊ\tE<DhPQB&xVvZnJMMlժU\w]hPp1،FvTcRbA#$nN~L8m+u!wٿ e?'~cr!+(nVEf&3z~]lo !^jnA$Dut:] cotfu#`hqډ;vRRo?CECEiARV[v'>i|f߾' 20gLete$q۲ӻ tڅ/+/kkM(#|\[ϥ)I:mhcUǭg|KꏈHwyӟDAAǏӧIMM#ַ=M>[4pD.)RJYUݓA!bDZxʀ/av33;Ěio˻ک}NlU qVEԎ$Frlذ"6m;vt$)^ha+_Dz+Z}Gqqqy.[0tbJvt4S8R_[3>%[G|.|AQWGQd:b^ȮFȊeԐa42#!|!!H;?#^gXK2FGE`ۺʛqų'O Ysχ_QT:{Z NԬNBHFsݽucKN޶9Ě "R ?޿t:K,aǎhZ,X_~q[m֫ C,?yE%kZ[Y؄DZ팊2e_aeftd+ZfnuIt)z=G:'8L"J2?F+IܑInHgD졌vznAoi&#'{Ma Y#Fs A Y-63sb^wT䪏P-O$)gu^ 穦[jj5ؑ*Hpp-۲[5qB$Iĥ+dSĦF Z+CvՇ3\4 [_[Yٵz-KFM- e{a"o |np]-9,E$I_k?.yjmhREF<#st4K=;<||n[ 撚?&( ̻ΜQ'`1[TGe&x5Zo&4U[@ޣGF<OE9 zO28\1ςjuz&62]77[N֟4rIGޙcInbwLNZ /ыԶ@fmc!(]jˏp0;7n?:.Cc+JKKa֬Ys:H}{/ t|6t̲X4\t:,c20J,駴Ǣ7k4h+ I t:\h(wu&Jx-F!th+7?:D_ #O Pu-qױz=?3-:{Y9(vR|&*[=RW;Z-=rmmo<|| S'=e*2T$ U~}'Mg䉁y)ĮXr ϿDkcSt;8kyE3bm̻zzǷ`OG<# 5 /fŋ\ڊԜ8IJhRǐ'w9zCռwo 1s"eYF3Ķm--ԝ,#itoʘ\Rƨ?8is؏ G;dMOj~^`^LRb脡^x;ʳ>˚5k8r&y:t/R';_rrSsau׵ϳvռ6QuucxDž͙i)3ݢ  &'+w󝨨-A'ݣ(cbb.].W+WرcرRHHH`ܹ̞=6{cUT:H5`6h:4{e/AXdhvj*[֏K![6ɾlY?嫛Fi^ҤvG']8ܓLLg.2"HsNfϞW\8 W{뭷~V駟wرch4LŠ+$m۶}$II2y5t$df7mnVQsSة wNk% G„ K}=U:&E'^/ ;b# dk{2ߏm 'fsu(=.Cp"P"xNFEwHF.I{u1h@ Ν^>,L\$p*{=%ɘ3{/qhæx :& 7d;Y'{~@~-^@A˼SxC9>)chmlb7 d??}m#+B9v*YzXGe/ǵ^lZt_SNC %H%l NSk37-} &_Ym9ʆ7 Q}<Ɠ%`vaϋD"Ĥg676 Hnx+JP=un/+C+W䮻uwwܡ~zy䑠u;u#czp8/~kp>?cc !@ƓLI!?㪑 8\ =:>:5vǛZN4_PfG&mMOd#G"#~6lٳ"c,׬YɓYl&oQ?!$ܒ5320tnz r3t1TK~?zEaFb")&jjbv;A-.K Wj%z:jNsl",|x'Lx1aMCo4qhl~|gSe'f䉌[,6/zN-fe`?%ӯiSIJDHg91YƑ1~ YɄ;/;m;8>PeYǞdU3~B c;RΡW~3^q)9ӦbKN Zj(r'|@wC~ΤK1D&ӐE~N|3Z9~, -fdASU5GS{_Pp( O?4}W]u'O&..Kuu5[n_ 5 s錥L͝H-kc籽ݱ1?_1~T LL'Io'q ` IDAT=͗vЗpkN]Lac0j7yyu,?Y$Dc6>Vk8Qu'9^ya[M&LE3j%b"F ^E C8曙9s&f͢d .2mիinnga@V7{ WL5s &=.m)LSm(8 uX{4G_UCU -y̎*=OicQT/Qڬ&kDNFjlڴ? do߾}HlE:QGy[rWh{orQoIyuzis4XpSFZgzo"E$#@̶j4;9a4SRȴZp>#>ooӓӮvZ^l=U,F"8676qE Fa3 u{Zlo=Q@p"'>*q?AK|"%.Y5w{DazD#@ܲŇ8ac٤++.YbլD'k q zT ̖2#/2S2<9=Ah̯Fxϼ^fsQbzh{cWdk ,cv:y* OQj#>ZV#E93[V'?O͆@0ihtөxnkmejr7FN,ȀO0* ^]xtQqI[O!HC@ FÍ,+l9aw\7Cǭdk:2{DUx!N((Ljk ,XiCW$$&Dx 1յ x%76p(>D @0B@  @jOoOU.O^b^d2>=nVچ{@  Z-m z:b5u;jz& ((`AepZjk*GU[V[j[G[jJw"JdM~y9If{Cdeeit=BQJ!B;ϫQRR 11ǏGyy߿0B 8 ,޽3 ,,,pPTTLHLLDFF2}ALL-P(DXXXW011i6lmm<jj*fΜ)_|\{.?+W4򘚚СCpHNNƜ9s]>>A!$$;vSĉw28q 77cǎUӧwܹsfB@@3[ЩS'lݺQ߰e˖Fi&ilB!B!@<%0a,]W^UW_! @j5O>?3~wMbhh888`UUU}̴O*]g\\pttDϞ=^zal'88PSS===O@h`p\Wbb"add@OOOfOgU1| sAII =ulwmϞ=C||m^~] }jE $ދίZ!zԮB!m"3=xw`WWb͢(.\̆jkkk.mmm_<~)Νr1 b߸qK,ϥ泶Fdd$jjj$>t%Lرct˥W2gmm␜ܨu#))Is'''lܸׯv؁6.( 'OD޽RūW?СC'N\Ctt4gF~~>3]]3]svv”E-Ez)33SAlB!B!Upd}G**+jсGeSINN,Y|}}ն}2sOVD233ǼѣG ֭ڵkHJJµkԧQ(mۆ bڵ8{_ ᠬ DOДY[cÛoB!B!@f첒*}Myw{t/kO>ǏѱcGp\888ݻjVΝGaa=Hk'ĤKR1 Pҥ ܹ#wYkkk2fmm*_鉥KBWWUUUX`ZS4Fc6Y洠 iӦrСC29{l10tPW&>|8333TUU!++ /_-ă8@۷!JKKS$%%?ċ/T*˖-[LL4 \.Lj#бcG"//8trB<+W%%%9rxyyaȑ@ @uu5rrrpe۷OŖꅬ ""022“'OOR "" q :t7oޔ@ ֭[aff'O`ɨ9oPP/_,YÚ[O###J|ᇘ5kz聒۷{fΜ OOOعs րX">>ǏGammrܺu x*/6drGnn.C<6/B!9%f[@xtk|6r\7j1^|ɼ622Rv$H˳`^7SQ5-- )WX&>w٫NNN```Pŋ#551][3ya…033\WWᅬ>Hf>~ VVVR 7|Tzzzarɋ-// d`ʕ_UӥgQ5j-ZeiQiӦa̘1u ӦM.]2h̟?_kkk!,, v͛-**Š+l2#** V9 //WY)իѡC}?+++L6 5550as#??G>CCCpqqa>GHHz-[L9^lԩ7n}][s[=^BixpG f/ m;cF=[$o:JO˃-tm(P潺z᫪1ر# >yAPP~ˋ`ReV1wi]wm-x$>۲e |>^ 7Z={bٲe`/.\<ܛ<B7o͛7r|xxx`РAiԩFUURRR WWWx{{\fܹL$77Ƴg`ggL4IsfLw ЫW/cŌ3PQQף SN ?CܹsǏGii)\]])S ++K㥍zKJJpQܿ055E.]"5|Cl?lmxB!uS.yQ#;}|:ڥGH©055PlR_3yf={UUUj&dddL0tДz !|r QǏ7+z?N8ʺԘ &-4}mm-rrr$AF_~%\.B!VZ%K_>ٹs'N:"iGѣGacĉXpJ333ѣe˖I7$P|ԏ %;v~g= YXX`ĉ Bff&3ȑ#;v,>3xI0p@g75٬֭cðaà_P1}tAWWWnj+@0ӧϔgxR԰yo>}B\\֯_޽{+\[s[>^Bi )!i|D_]tU- VWW666۷/>C۷5/Ν;ѫW/_|f͚7n֭[vn޼*z#..[liU=^YY)[0%%y4((2OOFOY}}}XB"P*o ӖmUrԨQ?___Kȗ#&3j(!3 @@o>۹s.]P /eސ̔.`zc֭3gm8dt׮]R +`mmѶ)G˱n: S0eC&GfƢظq̧˱j*l޼<޽{櫪’%KO?A `Μ9Xp!0sL@FFlS<`^χinn.n<ݻÇ#22ѣM_6yѣGroz B+\[s[>^Bi8t`UTW ,08 %Ξ=:u v”)SGn݊ÇBBBǃ&Nuj,]k Ui]]č̒@k 3Y]&7 xpOI雎MD煵!ͥa}nNjB!P_cnbݙς\p=)Y[>o#Gk.<}T#+**¢Etssc򟚚>@XX>sw2@}pcǎ Bhh(BCC~<={dΕ=JJJ777) 4' @ 37߰~6Zߵu??}gΜQ:_eeٳg}9ܹ3 Ys677ǰa GGG37dddx/^lT$^"''vvvr%7rFE4ƣuEt^q\|8::)mnnp<(Mϴ{ngflܸQlӚ@1 Y=:0um:^"559˖-ݻڤ9j"BHR .ɀ8֏ȉ>BeFс%BBB`kkaÆؾ}!ѣGزe l///aС022L#]['O4  p8>5w~aΜ9h׮JーPW2 g>@(-Ap=QTԥ\4`(n0009-==j]%[nJS2({իWo/0m˗q!V=m[V< *>MRQWTW$Gcxi;v 88/{!11Q0Y{>E!M@v]ppG f-|fco0g?Ajkkg6mڄ }G}\;vLMM٘ed޽ׯ=RN\8eeeXt) &h$ݜp\@Y=RRR0~xi/dX_xȶx)^x (++xb='M$vuhn}L,io]b…rѣG\' """ rsm7z-ؼMrLF "h:e&=E9GSL .\ó)=ڋ6m’%K>>>V/^֭[񁝝4b)ڵ+cBy(0pvQc窨BMM ٳx">ʕ+jL}رcY ִ&&N. PhKʼnaU56@*P\Bmz&3 6|y`ӦM>C*\N1pSDKTXj֭[777xzz>>>Ӄ-֮]>Ϟ=Z5/B!}*mL0`ggb}˗ضm̙SSSغu|GnZ`YXX4y=D9-G<݅*₌ ޽޽{zs5IJ[=z􀡡!S IDATx):4Iޚ'18^cdee%-АEԳMSPPW^޾Irf+**b^[ZZ*WbXXXJ|inqMxEDDDG}ݺu%.\?Xn}m )G<Ieꪧ}6n߾ ̓ 0j(0[[6/B!Wnbttt9\׳<)F|=Kiαcǘ̋NࢢqyGo,7aॖ$~̚2G` Xv-֬Y#/..NjqL>}(YTϟ?/¼5X,ִ[3}rcvԩQq֜s4Uee%>@y1vF//\J߾}?^ʼ8pDpڵWU/$QݲFsB իWX|9^|d_ؠAd.T\=`nn.sZ~)))Jv\MqY.<jxB!( d[1(grhfzW0001c `GJ^^Gg̘5k_n޼^zaʔ)7 tuu1c Ҕޒ&%%)\׳gϐ ҥ6l 8q""##efB߾}^zUV1=F"RT[~n|puun``ٳg7zm!C\>رc1tPbҤIpvvT>{[Θ1݂+˼1c`&MR'N0;Ǐ܀7vX;'%%M/^I'#::Za%{{{̜92GDD0O4drƍ3g}Rkc=3gJ#GPݫJl/6YO~m&wZZt6gm;^B!" L ߢr?(?w[K)++C\\~mbȑػw/3=%%Cc$$$ɓ'C׮]l"7|||ׯ#;;555B׮]%.@O8{#8>=y$=zļx$ 2ݻwg?{ GQ޽{K<`kkqtP7TjjySWz(re888@GGi0+WļypѣG#11022+|||7n4fdd`޽7nttt0w\| GW7E]J+77W:q\\\rn:";;2d,,,ڨ YYYy&z-aɒ%8<3UyyJ=sZOsaٲeXl\.͛C… ˃>ѷo_X[[… R8x f͚. 6?Dzz:8u!C@GG/_FϞ=}ƍ8s gggl޼³g`ggw}fK۷o'|>7"66݃?EH***·~kWFRR:G̓Rz;99? 337o^UUe˖aÆ h׮,X3gJ]#j[=WTT>}`Æ 8~8ꊈfP~IAΛڮuV= Gdd$ӑL| b˗/>!VNjB!P0qU-Xcp8;v,:$o>aÆIC(en#;;>>>с%  <Ǐʕ+4LGG&LPi޻wJ-p* d+^VV+VhА #==]v;e0 ԟc)s}t۶mӧ`oo)S~h j~S~ݾ}U:K.h׮č,P+Wk׮حZ 6l1BCCLPf˗/cX` ooojjjd?ƀ``` uk׮@ XlŊ%1}Æ  خ] ;cƌ_55PW .\ /  sjJP 㡶|u۷c„ x뭷`۶mhc=OOOxzzJMߺu+JBMmW{V=(quuٛJKKh"Oy>k"B̍04-Ϯ^|[!iiO>?PXXX`?eee;w.0tPxxx իWqARY֮]={ $$ݻw,,, ֭[8~8n߾ƩBII >|$8q%%%Z]???dG"ׯ_Guu5 ]]]ϝ; :zPSSO8vJA]Eq͚5Xjdq֭&dV[̚5 | +++3۷oKWUff&N'fffMp4ו+W0n8#00:u c\|@tR$&&bĈpvvCAARSSq>!""FP[[ ٳ.]bzSzjRWW 6ܹs9r$!PSS$&&b߾}yy[u "ҥK7n-cccHOOǕ+Wp&Uȧ~ʌ}vmгgO>@RRu6SrL6 ǏG߾}accrܾ}W洫9^lcC@@amm }}}TTTѣG|2>py6g@!BɚɬPvaޗTa(X!:m۶ NNNv[8Qb ~cǎp6B!$p&BRfffС8BHˠB!"55B:󾪢I5V(B!hŋrsO8\n@'Od!F3!B2뉭g@%B!hV޽1i$\xW^Eff&akk#$$@@>lBțgB!er{$Baaa 9=11k׮p!PL!لBi3g@({prr ܽ{'NQW's_``Zgޟ9rl+W?JJJ0r-KK2dϟ/K_@2駟k֬Ç<Bb?^^^ذaic211 xi{x<v kkk|8tF?୷MhcC!(H;ᝉZey5bfE!m)tq!Ii&ٵtQ󚡎{8r+l;v`Ŋ=z4>Gi oDFF"00֨FVVN:Xֶx^x*3p@̙3G4KKKXZZ"88cǎŢE3|B!څZdDp:*a FC JbƍGUm!-Ѷ… !jNUee@ڎ1ceeemr޽K,Ahh(:wXYDi*GGGpE$''C=t邘DGGիW<555HOOǏQ\\ [[[k׮ɓQ^^E!Q WxQR<5*B4ECys`Ϟ=-] Dꗥ% 33E؄1ϝ;עO]t eeexwr+?M oٲ3Xf <<<Э[7Nܽ{sAjj*jj ,X~~~رc믿KB n2YtA!z>>>x/E !M>}`bb8}tΝ1`xRq >ݻ%WTT`͚5ؼy3 dU )**w}{BGG&7[ЬDѻ 14 }3S.>¾_`iGM}#sښ5kps###J|ᇘ5kz聒۷{fΜ OOOعs'X/nݺ4o~~>"##z*vm p8)6cر0`ڷo ܽ{BbbjD\."""0x`888@(ؿ?rJvU|= l˦M0Asgmv;}044Dii)>}$*-[4i\.#Fcǎ044D^^RSSq!A16gwsC|dVGnn.lw ><8~x%88y'3MGzz: 777XZZ"??՗'//V:?3!ͣ@v>݉yυ\Hs.zᣳuOb9k4j|sfޫy?򱗚fa͇5J6r55/64'W |;rJxxxH|///̟?_b0>0ڵ9!󈎎E>} zViڴi3fg:u´i憥K*\~A.`ԨQXh^U~^8_^za˖-صkW#]p8Xz5:t´iPSS &@}@?F~~>=ڒEVYsF[-jCذa_GϞ=ѳgOݻ?ek*\^^^{{{ۻE{5]e s[oJs333opҥF[OO1114g˥llw6GyNqI}noo{{{GxxqB!\.BBB4Vno+Yqu2˨&cnn#ߜ UL!D(88 `c'W?\Tu84Tw0]3}/G_:Y*݆yضvs b`-SEX`&ؒXxUp\̙3vpX[[c(**%/..Ƶk@룺Z{~"##()); ]]] 0ǏǕ+Wd.?~x&HRQQXܻwի|rLW2On[<ǃP(͛7qMdgg3=)=<<0h |`HOOWSNEpp0lp8[2lͭlgqݻwnϽwU{RwLЯGQ^^SSSt!!!uCGӦ-Lݿy-ߚcjj/y+%%E: !hҖ9 V8ߝCihM>0wZUؙ@(|WQ+|/_ ^.^袪R:(֯{TU_~!j7C'stLU^]uеyʿWa]wApt ^~!pCeT=.Fb8YHaZ1ܹ'..6m@ PSSS̟?\.#SLɓ'Q\,ًٳ󃡡!pӧ o ___:u ˗/g5ױpB!Cd౰ĉeeep;}x<0|HHH@LL SӧO#>>6l>O/J<+ #.ZiTUUI,cnnިŭ[III;;; 6 :::_qAO777Jbf)[F[m8@K.a…a``O?'OT@n^^^߿?DTT^=v~g=nbkWeWZr*ܹNyѣ8z(gĉ̱S GFJJ -[&|vrrgllw8KܹӨeΔax8_{nt޽ k:tGR4 IDAT-;: <QQQW_}۷oUqttdR|Ity9v)wyuτB4eP!\.V 8\˦_Y ;?>7'a߯䣙\]lǶA0S8"Y ].->-ke잻2csJKWA_S8"7\9 .IKGE}sV-8 䘓Gt16l \`J3zhf7S^^UV ,}&!!xG`` ?$XnTSN!7>zô"d!۵k^.{az(XSS#YM5k,899֯_/wP#)[F[mZ]V޿9cbbPk*Ql|m؆c֭j۾"iW٢ٷo'OܹäW9Orrr_A)YM:N50pѣGr MzN}Z飚P~󥧧3+))k%Xx/66622O<)wiGiڵk(,,9M89mWWW'Cy-BǓOeL0 SBUOj7*mkWݼyϟ?9M(\OsΝ;"OsU}~<ff?sF=&^*DO*Y[[nA릺tc`xėkILL${>B,J-<{\ Ew]]}PLO?y$ya(Cq3 ho`${9:K,/TuO{G ^TOt7ELe%@rL R`cchhH^ӊK=&Er2sw@}~VE#߻wyqCmmWSS#x߇2?'''̚5 ԓzVիWKd9qWZz.hmmWEÇiꪧLJ45H+--ENNdNW洫lQGcذa#'s^###7ZxQ_:U$jתRh)e˖aHMMmzddZiCӐP(Ć 0uT`ǎٮ:#J;waÆaիv܉_~E< !h)I ,c%JFy%@r4:EEY)/d騭QVSWàr:Wvڋ[⽺0uu@QK{()(??_nҒѭ[7۷Oq9DGGO>l]]]&lrrV%i.Wp^^mQ6VpbjLϸ԰iz@]x</^ j,^oUOj7*mmWŷ)Omm-ann +* P4nNumM~0gS6JFa|VW}g&˗׮ر/|}}QUU4ܻw~zuV7MzBW|_/SYY۷oHMMł @(b۶m2QL!D(Ƽjۣ iho/Gl^b.M^\6xv]= OyyeAOYEɝz*UV1By"tUU\.9t.([hf⏻[ttJyEتll9sDTΝ;3#s}ڮZ&tu=*.COC-G]s[ҵkW,\\.5558z(+O""" @7:U$JДO?0 ^^^DNNbbb=P^g]K?ըқ$[SyN8 Ɩ:gB!ElºJoe:Z;X 3`mjHSHH#ɷ&JY/E9{شiSvY=z@rr20#iv&BaИ㮨/MWWϝ71dbUOj7"/!C@/6I4).Ecvhumĉr! 7oʜO<HΦRo<zzz޿Xj֭[777xzz>>>Ӄ-֮]>Ϟ=Sy' SXZ1K˓{8u>B, dyl-[sS|Jհw?krӰ^->g`&s~_ 6$8#!!E߾} .+WZUZqSqq1,,,`eep>h6G(hbcnUܮ*[.BV=e?ʾV}n+| 6:Uٔ 777I2+++̛7~~~000Q71y=hLt=br;99WŅy6SS`BfEC˪q-1 ?8=/tt+[ ̺/yR }*9ʻkW#bSf.,,ċ/*w>?ʐVP(Ջ*ztٳކ&SxdN4QlmmNo>kڵcr* Zr\t֭yT[糺;S6cǎZ<,^)gc/*DTu'^ėi@)O4|&Y&w w'pO-*VSZwPYJ k>GcFI|.9Fz2ﹺ bɕKIIPsS{`1~rp y-|"7(c W|ػ&o$=",.;VVߪժ]vk[[[۫VkkRm *n ZDT K?D`߯y33gΜI''p(?oΉ-%11Qxꫯӧ׻_~EH1os Pԧ}Xp!,X4dddRڵC.]Rb aT՟1MAbwo kVĄ-Ǡm K,x&cpS6[ >CXAAAٳ5֯_9|0-Z~ Ehhֲ.~WbT*>Ln݊&M֩j,_;wn@6P(0ar9|:eJJJ{ ;N:i ~ o>7]t'z-9sf+oOZk۽{7>PbG& AF[[z'xALLubݧbn۱}96`6l@dd$ްavulٲepuuEHHOll,3Xfj~}6E}OHH@׮]1l0XYYiAsʕ+P(% ӟ|jl;kk.BPG ?Ql***»kp B 2x;1ןk׮;[[[_ŋ{5(֧ jܹeЃtRy՟1MJ?w c]^pP!Z]2d]'nѿVTY 9+$Ln %e]p:DHxWs0`X<`fdUqMl1c֬YJ\rqqq8p/_nо0yd=aaah׮Rpm8|AA: cǎ=tiEjTTT`6m WWW 55?#RSSu~6*;v,v B dgg#997o&OII fΜ)S`Ȑ!pwwGII0{Q՘?>bbb0`͙+61S1_7Z#S}]-++Ü9s0yd 6 P*8< L:VZZ^{ 9r$|||Rp%lڴ IIIB&DgS*|HNNƘ1cL\9s?30mڴf:q؟|?=pfϞ DFF~ѻwo"((nnnJP*v=xa\CHR!ݻ c:z(yL8aaapuuEEE_]v!!!Y?7>;v,z!Aؠ |2sN譋13 3#MGDdF ^ukBCCl2ܢ#`uYv-p)!5oѣGF3 {< 1a 8Ӑ!C ?P&GDDDDM4^ϟo5Mkϛ7oFII lmmOX=j&;|0DDD(L-BDyo`m{.JӧO&ڵkWsVՑHLLljjR.**¦MsaҤI_}T߾}Zzl"""j=&"""z 43f#GpIddd9rvǎzj זHG?oڴ G;e˖f=~M_zl"""j=&V8}t-#a%H듓rfUSZZI&i]WQQ̵i\VVzŎ?{;6 dQT*ut w^jt~~~ptt޽ .`Ν8t8xSUUU!;;Ѫ?=|<<<錈LyKWHȤ1MDDDDDDDDDD&l""""""""""2i-]"C=? ; Ϸ|]h(@RaƍPT-]%"""j"@6CŋxW!/DDDDMw""""Z!%K 111ׯ_KWZ˗c7qBBB~߿cǎ5걈tYtm#DDDDDuqDv s¢ϢS+QTnn n\?R2~V3א&ƿ/Xp!y4j_ppp@NN~7kJ5ӧOdz> 5kΝ;'1H<^d MDDDDD&F"16RxU tP;\pJG&q,ZGeee3~x --l#2f;KR7p9LOaee%<7n&N؂5j>쇦Kw""""ր쇀- Wl骴V%C"1[6>C6mн{wL6 ֭k*Q 1b `ӦM-\x^XXB5i~쇦DDDDD6in\ K.nprXߡjڣReEKWT*k-] jAfffx'YYY8|p ׈"S~hNDDDDTl廓) oQ&#&"„IsE dGaj9))<߱v^'xpeń`cAGaR>j\>;Ý"k?0F^?žmt>a62k8# 1ll'SY#zג<< 'r9cǎ_~ݻw ߚ5kСCddd`ƌH$1c \;w̙3غu+.]Tg9r$VqX|9B;Vo}0xyyyyy?uV={Vvb>&Mc۶mq0bx{{W^Ŗ-[o߾T*SO=ae4 IDATJ.\֭[s |7nݪ܂ 0fc=RG^/P(7n?Re뇥Kۇŋ)=&&gFii)y̟?=z@aa!6oތ~ ~~~;w.:uꄢ"cWhh(-[㏱o>L2pssCII Ν;8>}ڠvXEHHƎN:[n!%%Dfffhh?|1 """""ҏl{O#-5LOj'ׯ~3UOKC|$$$`̘1:  UUU裏P\\>bRK.+}YH$̙3J_|/QQQz<  Ο?;vL&Ë/ׯСCySu_ 4Hb۶m|2JJJ` 02Qlh?X%V?4 """""ҏl#~ e.5>hPmVWP+2%82+ ~:kk|Ah"5N[j,Ukr@_:MZFvvve@uPuY~=vލ:mۆm۶!66RӧOǢE گ#ƍ'N࣏>L󃿿ƲDDD2220{l7hW.\DRyt6?3>3_Į]PPp?u سgrr:wׯxPVvD|P(v@yB@RR-Z$Ӟ={g^z%ڵKb%f;޽;|||og>|8 شiN:Nb9;hӦ q?lƬY T{ <ŋk} 5k9"k_+f͚Kc}bb" 4lh?X%F?4 """""ϼ+@բkG0Pw8sq/kw'cJsԞ\fvNK+.'hXJ%YsNۃ4 m޼Yk0џ}􁹹a/?w#222ge5Y/34''~m7nêU%DH 0rOJd'NDRk~5A$ƺuݏ1GRaʕu/_8p`k,. ^bsYY,YJB_@uJs.]5k譓{QW\>ϫWs_/">>@u=zGSy׮]쭡Vhx?X%F?|/f dt兠kU,ĺ/ /BRVͶ4>~\ } ?@TUUa?L@Fu]v @?_~}F@uBרR~ :,[no锔\|mz }6RSSٳgOٳgqmjzw?M!VѦ1KvNKKڵkT}[otxnC*کm];өSu]Ss׫:5:}6b2yiS_?|/vL-bJk*h 6jڪREc?biL}ܽ4Gh*Ϳ4 \ĕwfZ?<㏣W^h۶-`i=劵΀Ӄ1<#--M EEEF6mE۶mTP7 ΅.4l.cƌuu>7[vvvGBܺu Z}իPՐH$h߾4XG^/c ]bUV!##À3~ kOW\\H9F;wƢE HPQQm۶!99nH σJSg#ѷfbCCDD0٦M ڦhڣ\iN5뭬HMc1a~~>@%yB߾ ?r\&K/{d AHHbbbŋy>'4M>JDDDDD?AUE%RgNbBGȞKur9ܼ9;N5kmθy>M!HV1o<={Vk!lЗܬoܸ_u|I#wm6>թf}7@XMc1+N4 ?ng ?Ӗ+//~)>sSNӧz KKKxxx`ʕxgqzט~~i!id&Юt+VrKGk-`:;7Dս~ g#u,oѣGթ t-s]ퟙ׷ЫW/lbpjmѷ/ !H k\[dm?j2V;!::@Ğ999077ǢEF2LHA* [o~ZH bee'x}4_4ꇏQk@ R*qxWƲ#!;^Uxnk9bȫq>J35>pvGV `欖QmHab[n,'HЭ[UyyyBp"((Hg9[[[xxx\_\\ׯv7pPiՌ,--E||ݻ 2V\׮];aR+WYTP_v\'VyPc1YP୷dggcŊQUU777̛7O綦v?H_Сpi?=T$|xН;w 'L`~s> DDDDDt?ic?6R ;* C< "\MH/bf FH۩oSяl֦8~8qC 7ذo>"""D_cڹ6???4&8q@HN:i-"777*<ƵݹsG5+(mꭃXFSoBPK.Ž{_@1bmM~GprrҺv=Z!_ZuCrTYnj?2D}%f?4 """""ᏼR ?lXZjɺvW㹽s {w"Сܣ Bz{k=&˾NN%8f~ax~@ }<_ o5_deepz{{Myy9222ZGbΜ9ճ> 9sԙKP`ƌ_~&7ozꥳΝ>}ԻƴsmO>$PYYo(<~W~ݏ1G"^F^Tl[VV&`zKSKvF~qqq8s挰nժU̝;u76KKK̝;N رcTdkRWS{QF\1ٳǏ/L^Mb_@K~hDDDDDt'{4aw#<0aiv,|-o {{{ ?PyyA?ol;#krnܸcbŊ oY~=1(vlذ֚xÆ ؾ}n݊F/j,_;w7&Vz5-,,h"d2T*|9kԩSѥKL6 k׮(c{QQQԩִ9~~)bccaggbºK.^кXEM*9틊jL8 X%f?4 """""lwpgF Q>DUwr5_~9%*=y_ `7XJQĹSYk/U :Z#&& / ZUU>3f !ɐ3gFZZMLgR=kh9>>>PTt6mڄ$պ$%%a=z4Ю];ARHOOqa4e2x sp9[b̚5 >|8|||PYY+W .. ڗSVV9s`6lݡT*qy՛Ǵi0d@Ц !yK/:֭[tm]}E@@Mcǎ!55UXo{̜9SL!C"..'Ol222/cӧ ΍.}Ow EPP JT*q5=zڈź8/1)_}f߰Q"4ptFxoll ֈvZԩS7o^KW^ј;w.w[FW Ųe"Cq}:$9w՜Uk '%hj"S~h~ADDDDZ1M srE W'^DY×#54hf̘#Gɓ@yy9<<<0rH 0c\zk[CaȐ!-]GFSCô """"֊l"%}_hj\HDFFj]+W6saCNDDDDd&2Іo?~.pTam+ejͽkrqUdftU ޽{Vѽ{wVVV{..\;wСC|Tѣ;Ãʉdta LDDDDDDDDDDd&""""""""""@64Ȥ1MDDDDDDDDDD&͢+@DDDD#Gcǎpvv9󑑑?ɸtm۵koV뺊 ի8~8mۆB[ܼzlEJJ ^uH$ٳGxSj-၍7 dbvvvxwZg^x| ~NNNprrB^0e|GHJJw۰0!H ݻw\.R4ѣN:ՠz7T  44SN|'Oӿ,XNNN-,,СCt&L;#C_""""@6Q+eaaO>:uT*:t(**3:uΝ;2}fff"11Qxnii  02 vvvXd ̙T P=ݻwQQQ d_~6lкo߾8p7nܨSR*Jc-&.]Yf^[S'""? HTwrr2rrr`mm;gϞ:7ob߾}Ս&"""jƌ#O,Yo߮S 111w7o?Pg .]XXXW^s?5AYصk [[[78=h 888W^ſ/@ Y^CRim{ر#d2^z%z… !HPYY/[na IDATEUUF9'''L>effl3""""ZÇ{Zpm|W N+R[NN}j@HHHtu 666cǎ #`fff1/_bXZZbȑeggcɒ%BW^ջMSgِJkb˖-ZyyyXr%ߐS"""""jv dR۷P˫q._,nnn PRJUo""""@6Q+eii vskkkjiii(**І>>>֭[C۬ݻ'<6@gС¨U&""""2 dRwP/9 YY;RZ^^^ hoܸ[n5˗I%MyT<==F7}jh$DDDDDl"""VSY,]#GL&3񼼼I=:֌s5,LO!"""j8Cp$wE۶m1|p iL6 x7ܺx{{_Թ| O+v (,,ĥK={B&MHHO7Xs]ᱳs#φȴpD6#,77_5,Yٳrwvvv',,A߽{7fΜ kkk5 nlUER'spqq+ÇNYʕ+իM; """""DDDD 9v CC/--Ş={QQQ :1ݻwk׮P|ĉZˉ>.\ѣA$""""2UˆIDDDD'scȧKMVV/9aǎc \tcc̘1C.]^il߾ӧO+&L͛7-V۷/"0x`ZI3MO!""""EZmڵk߿&_<==8w~We?.jñ~z4b̘1MT*n݊^z 7n{asMO>P(BDDDDDDDDDD1'&&Nt# pqqANN$ _h؜9yZMD'PkpZ *UTBq N-ĝrKlkmgKKH͡TW"E8b󓘙aBpIQYdbN.Nafhk ]Ի/].2)QRR=Õ{zc Xu ];YqO ? +*W|lDO: ;:ej5--PQY c_NAםȔ-ݭ[7ӧu;}4mS/<߱|W=a. "E&E :M=Aw:ѲB?k9:cL+,ֹ9fE{kk6ٷ >v--v㤼|lȼiOC\-Q|V Gn=θwm<0IcDor+ tV`͵L4DDDDDDDDD-hm 322t|X1I vZ伻,Eie%l,$h+#Rs347CeUSj=./GZ Drqt/g/eLy8 H-1 ѽ!vxffPWUB nRKwV\PRaQB.k,{}[H*-7F]U{`; (,-_Qaб}czm.sE K/^;Ȕ-(((@h#GٳwyD<==UGUUU. 4&.6geu)w QRYwIyw1ff^[[ ] et(G FvZG~f#`OW)Dm+XOw/@t_WxY:(? Gp߭@Aසsw(je|D:c;,0ˣA)MLQ&{Jx$ ϟ;;;`ƌ1YR)AѬϾXKZ)t$y|aBzժs%%\,dR+?IRjaBƜURȎs^ek]DvXKG/I-?.~|ICɑʎ۝/D6$ cW`͚5ZfñvIQ.> VwK[T\VB/%"}EXGqJGV$huKK]&|}Trנ@=3VjwsWQf%lVҋeR@lRwKO #6[  j42ˮLP #b[OTh?/yIKR=tD׵ҠL590P5&2B%zxZӒ)(PERM;2t0'W%*T!IԿ$_duϞNW&D% V}u^j]'*lV`٢b,]#ff|;F±cnj;Dgk 4KJdB9?ՓzCC%I6IIUGv́٩ھ}$SN1c͟?XkYÇwOTb {)aɤ[Ԫ_mUm{td1߉iKm6*,rT>ƶ5dz\&XhRM~Ls ɣcǎ?bhĈ1b1}Qٕh[#90@-|}53=|)FsxsdٌcWp&]!?I*$ZFr9h"[vܩ;C7x -[DǏ׆ f^h(! QnU)x6]G )}z[>_a>>RQMiJ֌L喺N$IՈɤR%ks9((T\TdiT U+?_Y% 1FZp ;G.YWEwEmh6j)T' ]N6J4'VMKHؖ-/$X|o2jˣy"\Ry{ee:n Ym6(pȶ·52"\], ViM%:MD@sպukCkJ~:G5v8.YQ~) D"3~%j)Ӆ7TX.sc@hmR 9:"X+/>,XX\Ȇ?IB58,9zdZGrF"=YeI݂&OY&rKKu,P_gei1;(պuk&Ml@F"Ф4i$RU IDATMl@'xBÇw[o8"#DL:UJOOG}1{lW$:x`#G֦M[}Q>}ԩS'fIo~%$$Ԫ٬1ch„ ֭TZZt8p@}8[#D?Wvtaٗ~Z)St76bD WSL$Mކ aÆjc;Į{n@YYYNoݺVXt_ll6o\e{bb>wކK!!!:u h*##C z]NJ^{Maaa:y:=vz'$I6mҢEsyڴi3g u뭷j8pwQǎ5w\K999of95tP=S'|R6m̙35n8EEE)//Oʕ+YC}}nP^)IJOOӧ{nmٲE[n$jڵ.޽^z%I7N[`zIҵ^žfN8jȑ#Zrl٢%KhȐ! 7Pm[wwyWԵkWnlָqt׫} ٳgo>JNNvڎ'Æj,:uqN2ʏy<.#W-[=,,LaaaիM\۷oooȑ/=**JǏo_rnffz)-^Xњ3g~*DžwsݻWEEEQ||4sLeffjʕUꫯf]׶m۪$,Xl6-^K+l6'P˖-_JfY< /HsBBB_m"[oUxx:+''GݺuԩS移KǏח_~Y_w/I꫍avv֮]~Ayyy U=4rz%I.GX{]>h$O>?PNR۶m5uTvmU&u]Is*iϞ=JMMdRnԯ_?x=l _}f͚%>383|pc4g}Dv=.k׮ڵktRjZp1VUiiiUIɾBhh~l6@w}p{ァg}Vݻw]wݥ 6U]vz_x5hђ~[{u>g{?v%Ij۶&O,///Zj$)00PbccRmk˖-Zho7nԦMx~}W~wsg]wu߽_'Npؿn: gTTƌ#׹r}=۷ƍ'IJIIќ9s>|'z饗~0M2E{ŋ$;v.]T9ϓacILLG}xjJo>8qBѣضm{ &4Gn:dB2dLLIҋ/X%9&IyyyF???9mH=JKKKz̝;WW^yژG9rXϣGJᲭ=U>CIu'zs7wWLL$رcUV6mT8oFfI5$wݗ;Êzޒ /T+tk!=%,,LiiityJJ6nXe'3W_U~~BBBtM7i4n8:uJ .… gX:~~~ khj6vXII?qIII:}$u9|/_.ɓCbX_]xRRyVZ#(]y뭷4tPO ,0FJIIUlx%%% Bdă}}}]taeΝ;zw߭y/++?߲X,;wz?w=ʣ\cKTgy.**2&H|w믿J4h ">|XvءoN E٬_K޽纋bÊ$T#IΝs222LhXx[ΝsOV /`+))֭[W_UTT̙;vOv ݻ.\(٬]H<)ԩS5m4I2OMUŨٺM>33SF"%9Wז-{t}ݺ5~xO}U߾}5m4iѢE:tP5n8c·~^^,wܗ;C25ۨn'Twmy=ll~dZ1sGqqqz8R>u4{lfYV͛7Opz\IIIGV+mm׿Vv[nE;v=)?ʎ/[N诌 =z^ziȐ!+֭[ӯ~+:un&I#?쳋~r{hݩ6'TS=lLf٨~I:ٿWݻwxl4GLX&IT^"URKZjPa]4rnkwذa:u$iƍJOOd… 4\33JPT/JbbV\zH3f0ʂg?Ym 4Hݺu$ZN 쓠&{}=4k-Z~oj60DM 吐@sE" ުaj6տ:]Q1ʐ㒤~U@p=C4=3z'ey<דbcc]ڵчG--Erٳlb4vaa>:]>W]mN:թjs_z322dvum-ZnrC{SSY]>7/P]iՎtl@c۴i$)**Jƍ|ALO<{n^ZR38qs=apoر={jl~nuZ:ŲlT;jСuyҿg]%}t:ԩ]gj/w_򄦫1cjLN{Nȑ#ڶ;=Xc$#""ԳgOǎ1X0.G$렸X)))Cs?111g}|Fe޼y4hc5w\keSN%I+WԾ}}/RSS%IsU6m>>>;wfݻnT(PI&MT_s̩61ܘ0uM7KeeeZreMQEQQsZ`Aںr{fc2qcxxnqgW6k,_!=Xeٴec}Nʠ_~F &ͦ͛77T4+LXGVe6tR}JJJdR5i$yyyiΝ+k;4aIҒ%K+%%ŨZTTd$=!33SO>-Z =3ڵkvڥt]v8pz-;{$_v_TTŋkҥ #>|{1}<ݻi /I״iӔݻw+%%EjѢn<|}G.%""B\s$i۶m:yḑ~]l6ך5kHM4I-Zо}j,+r{?\ƍS.]/שSԶm[x UjjjMCw 7찭K.ѣGqF/_QF)88X]v믿kQ5vX#A+))Ƀw@E"֬Y~i„ -ⰿT=`ݴiL>}M6F} rlݺU .? :(QYqqqZpTZZܡNlDӬYԧOsvW^ԫW*_{5Dm|X/Ԯj5m49R۷W```O}vM>]]w N:)88X:s挒_k֭U&%յkWIjG._\W^yu_ڵkzO3gԘ1cԪU+)11Q+W7|SRRRt=h2dj_f̘kС޽뫂;vL;wԇ~,qg?$:x`͟?_/5flRϟ7>$&&r{XXXN8kNJNNo۷+F~oj_Mw}ٳgkҤI1btbUzz8?X *MW֭m :TO=$''|5-SNܹs%Iӟj/_;j޽7o^cd0#b24m4I哖nݺ#jԮ];ID64bEGGKV\i:6m( ٳgl6K6lPa4 pQK3hjvmꫯ7(%%Ejݺ4rHIuFi! $ @Ǐ߱c{ # ?jՀԱcG_YYY駟/ynݚ bG@F"͛y@" hHd4&D6Inb劉QaaҔUVĉpI#}hӦz>}O>ԩf$7^߾}(""Bt%''/ԶmTZZh꼽eXԵkWuU'O֯k9rC.Y$/3fw햶|||VqqqUuQ;vԄ tw*99-l.͛'???EFFjɚ}ڣ15u:u2wш6ِ$ܹX8q㮾jcX,rFFF#F\HdCNRyz„ U0`IRvvm֠165^^^riii#F\ژoa}yx]yѣGq*s='ooo=#5jkwފl6-..OHd_BBB4k,ַl4'xB>4zh=ͦZ~{Ȇ7СC2e(y{{ܹsڷo{=%%%5vM}iFȾ;ݷpBmݺ#ϟ'7龏?XK,iPNӧ gϞзzK׿ju///]}պkԣGTڿ>#%&&n]W^$)>>^%%%;#Il:u3f}I\\#Bu/Tp{э/ xQoo(&&F^{V\e˖f]5SII$9ԨNJJST)))z^^ڌo^v~iM;+--Mɒ?ĸ3D4l.\X%]nFeffꭷru#D_m,?]vթӧO;wLFֻ-1_2z{z饗9"Gjd:$4kw>|ö$8p@>|BCC}3f;C:]R~wTOd'>@4;h޽ڻwnM:N ۗĐ_ߌuŢ^zIzΝuCz&$ׯQܹs:z|>^;wVppuXa/IO<_*op1yF1̙3GC _/___m޼YK.U``,XAjjΝztycРA8q-Zfܹs:p֭[owO. uR'%lٲC2NO>Xѣ5h {JMMuz^SOUV۽h_fͪm(^^^I&9lPDDvn͡z|||||Ԯ];>~xY,=CU#6>cxu!.ƲelO>]]v6;v(ժM6TGv(!3|p+Ҩ.Izt*<<\=zرc]Ƹg=czuM7ϟ /P'Nɓ'Ν;+""Wii}YuA7|H>bcc_BRXm߾8nU;vݻe24`]uUƾaÆkڵk>clͦzH_rJ˵.WP۷o8ũ}~ooo=ZGVjjV^u)77#e0 flOLL4w؞I0+۵kzrOkݺu>჆:uDs:w{wqضg\aaa~u[]VfYSLpX~6mڤ)Sl6K*/SyHk;cnpM7՘Ȗ _h~L5RZxq#&La7ԭުOW߯UVV۶m=S޽C9^9ۜdffO?5S噇W9rC:=Nvޭ3gθ!ں+**~*IlJE"S*ʄXVeffϞ=+I*..VNN=44X4hBBBLUb M;vK}pc#%k{c4ѣGo>Y,]y M&???=3 Abb]#FP\\j뫸8%$$XW$Ǻۛs";99YVXlȐb1U"WyzllVX/R;wԾ}-ymo֭Gii\RRb,?sc쟵dt)u222ԦMc=66VOvW}pc6FZ^Z/܊s=vIz}<S%%%ڼy6oެ]G5bhj5F;LWy$++ʶʣ{n%%%9Xӄ 4aI%=֭[UV͑׎(|ddþ^z矯U;#ox,}Ikٲe#4/jƶɓ'kҥ )___9RqqqXBRy`wխn(eZC:{դI4|edd\L׼%|NMַg< t(t2DŽ 奾}jĉ3fC ڸq Ueddh޼yׯƎCUFvQ ,#<1ڗpOHWXXXsM DvxxCU˾́${"CttM8$?֬YO?T~߿_RyI!Chʔ)ӧqUW]p u+J4"+|'z'@my$]9ܭ[7Wگ_?lOѣGotH|+..͛½+///:Ln(??_?aӟdL6I25}6mڤ^{M۷T}&KHe6JZ뱱 KID+T{Vcܡ)dtyc=$$Dsq(ЪU+{ULvn7p$vjj-[_ZxǓRd8ı~%''xNڶm#Gx<"66VUFWZuf٪m@eÆ 3ɤobٻwCh{.˛k̙_ 5@P%K8x`͛7a[hh 7ܠѣG;l{Ǎ6M_~۷߯ :ԡ6f~wTRm۶M~ҷo_cپV}=11ʨTO9rdf:u:x o[s=ڲe߯'OH?~zeotĉj<~úlSO=k:5CtIII-Z+{*66AGd>̙3m7tjڵKgΜ"""=zl6W)M4TId+::ړ,K }}}_u]} 1uA:tpիR۸裏+##cש-DHpu… _1&LЄ mݺU .X\tuU{ܶmj$uֳgOI26l59w\Ktt;v߈'k8pG֭[nh\i cEgϜ9zV#%׭[ E?4}tM"0Ոl헛`NJJr7^e˖a],+N<3$ (*(nUKZV;j;C3}kmhժV[7mmT n(\FHH @u>O >Ϲ|J_= F/""""""""2&Qի3gƎA *J(Iw^'lͭt@@PÇBI: @U *`Μ9_~}A޽ѵkW* EEEq=8K?ɓѳgOFo]hS_PPP^x^^^(//GJJ KKK[nŘ1cЫW/A& }$&&6k}Q˳pwwo"dJܽ{W17n^۷k֬iP&M-Mŗ_~Ϸ`DD^Chh([mD"ֶ!j~ZN&쑈X#GdYc"DDDDDDDDDDd֘ȦV%!! -5#&Ȭ1MDDDDDDDDDDfl""""""""""2kLdYtD^z% 0nnnJºH`tT*͛?;w4hѣv؁כ8J"j QFJwߵthDDDDDDf6} D=УGtb?.]2kkkL4 aaaL&CQQnݺx .]Z\]]P̛77n?Q5L& /x6n܈JJ#"""""jn4#5rss!dp 1\]]nB\\rssgy^^^oɓ'F=֦_~<,Y#[iӦA&111 ˖-Xl ]"==Q>}$ >ctRpqdee޽;!Jeزeu7ѣ{nmhs';vݻ[8""""""և6 ;;+\K.!''K,Q ncBɓXtVb6::~! =z`Ĉ3&... &[TI&J5SNrSL5kSiĉBҥKXlrrrjmꊩSCln7|s>x N:՜QkNXNMMmHZ/QK@Mwa|8r!4uT@XNN+VS- Q;;;o\ە̙3 Cn`ooU-ƍu8p j|عs'oood2ܽ{;L:[nչO1 22Rx}v 11-2r9bbb`aah|׵ٳ'&M 8::HJJ¶m\],-(( ouƏT!C 66mz YYYEIIIKڵ+͛(((w{}%3BCCzjUYfaĈpuuRĕ+W}zT_~GaccbܻwصkW9]5mڴ >>>9s 1bL8:u rssqEܹ蟚lll0~x 0^^^ppp@YY233{"//62 tv܉˗/7J$"""""b" ,7޽{Q޽{w>D6m{]tAdd$|0))):t(,,,W\7&FӰ|||sǹs <7vKV!ٝ:uBDD^{5aϞ=~zdii {2|޳BXXM6᧟~һ?UB޽;N>As---Ai OOO(ZlcO߾}dG@U`̙xWu0,Zr\}WWW9#GO?ox0Ml~F|ݼy3fzoӦM8w0 : CHHnܸx<|;v,$ FX>}ڨǢ[֭[: ==/O2*/_СCWWWKTO|>k,!]ZZ\~233qqKRj\|/_FVVJ%r93@.#** oF IDAT1^_ BYYΞ=,D""((H>cŊſ;N8\X[[Çޛ BTTb1T*~7?eeeĄ Yf۷oozQb"LOewwwdnT*$/j3DHHrJ@LL .\%KƎkĖZ&]ǫK$999Z1{lUl,X a}0}tOT*ł *i ,_zՠr5;v۷fsYlvڅ & <<R_DFF"66{ic:vMX+WoEBBBꎎ8vȑ#aee7x'OYc͈CaaauvfϞ-\&OgbŊnyyy JVgQ(Xx1b1j5֮]oytaooEA, .ujǎXn1|>|YKciT~_X@c...:۷ںYkJ%>ZI8ܿv InݺiDFTId,+2zh!O?i%5ѝ|k;wԻ}}'yZ\t +W?O>D(-"1e|0ba$)m޼Y({{ڵkꫯj7TEEسgq35m۶MgVիBɌ~[\wdggc:"99瞃=`֭:@ /7oެnD_Χ.J%֮] j41cn Kmz"""""ֆlP5bX,ƻᆱ6f=ۧQrrބFjj*ͭ9Cjrvn:/:CiսU(5ˊˇu"Ho"zOqqζ[R7ov){ᅬm۶a޼y&=b,XǎޓJ۷/fϞ> ;vܹs 9މ#7JsCC*֪\9_7o6IIC'<<@(_~6u>|8y߾}zMKKnի2XbiDDDDDDO#!/caaao|8;;c̘1Bbb" 񵵩ʭ[<.aee \nݺJd,,,"ꬾ]]vPU_zɑONAM @ըNc<_=iq>s|:t(&L^z/fΜ>@oM*,,ᅬΝ;c pS/2FwyG.7n@ee%,,,sN'''< AΝP(t>a2Lo0ɓگcmm-jjjJ}rt@Tpssg?!\\\`mm L:;v޽ELdQVZgggx{{JcƍB"ѣG-jT*~xs)S@PCw$ PQQKKKJdTZiJ Փܚ}I뜭U}ۜ&LOZZ.^بv8bɒ%H$2شi6mT={b7nd2:t耏>sYZ!eeeĄF >_akkkP>1뽠@ƌ?BC&mFYo۶͠L}jڵ^a׮]زeI?-c"iii={6"""0x`xzz ߰m6$F%?h&l֭ݻnݺСCJhjiBx_, ɮFVhH d2~r\Xns΅u۷oot"[*bС?~ ۷VWW";==pvv:'4Jzz: ԩSٝ:uj5DƳ>!ChMWTT`Ϟ=w^ F2P͍ ]|||sgkk+I]7)b1zUom1HOO`oo KJJN:!((,KwTVV")) >>>5?OT&DU͛'8|e6hӯ>-}YH$$''JveeeO>B}켼>@Uӧ7*&M1bD0a 2H$G׮]k/H?'O~xmZZZ⭷ނX,z&MPUy T Zu~~~x7={naӅ߈$ ̙UGc׮]¤ .Ԛ\&[ZeCk'$"""""j+6@PV&L@׷n‘#Gj3p@|ᇸ~:#8;;_~]Z?XHPےQF֬Y~„xeee:G떕!==pssCIIV:99N}uu k밶ƠAQ/ :R;wٳ0Q]c 'N4řU`#//.\@VV***Ю];j%L:ׯ^aa! #66%%%EDD0W_}<_oC,cصk ЫW/;HJJm}ZJJJb Xb.ƍ'N 77VVVFxx8\]]u^sXj`kkO>HNNF^^R):v>} 00@DDDDDDdnK/]?fǎәתAQTT5kԩSZ||<&O=z}xw֧ 22RW\ϟJ?*J7~ 2e lll0mڴZ(J|4>P8::O>FJ/++wT924ߜ }Kll,֬YSo?#&Lݻ{_JR 5 ֘1czJO?Oe"EoZUTTr ,YPۖ؀#%""""""sD6 ;dff"44:t#q]:u 111xaKI&Vocԩ CN ɴ&ʕ+BM}lǏݻ7T*RSSSYYѣ4i舊 dgg#11۶mCaaaѣX`1rF% Oℚ4~)޽{ ΐH$(--Evv6\:oTT*Yf!<<nnnP*HII۵TYY˗#11'N7R)qEرx嗍)x1a 0]tq$%%!&&z8u^|E?^hCP@R!''iii8}4N8ODDDDDDDݝ3Q7QC+L2Ek:C?Dee%ΝtEJիWVZpDDUFoKʧ9Z'{$ƶm۠T*!s5x3g*c$6~~~- QD6=5 1c0!???j4UD N2?< BLdS%::߇&L`~zwFFF#[nd2o?bʔ)-QRVVӧ7x  "zZ|wHOOѣ gg=BDDDDDc";v ǎk0Z%&MHNNFxxxKADDDDDDD&DDDDDDDDDDd֘&""""""""""D65&Ȭ1MDDDDDDDDDDfl""""""""""2kLd5T_~ 0xHHHgFGDDDDDd$-5BСC ___8;;<իWq!g~?V^ɓ'cϞ=} $"""""2OLdr/͛TZk+\]]1l0;w: \.'J@3-z( ,]iP̛77n?Q=ر#RSSȮOQ^^nɸz*0w\ l1IR{.***ХK@,#88k֬'#;w(N<3g@&aܸq@n ɓ'vd$ >ctRpqdee޽;!txi233eoooѣGqZ#j;ML4x-[`ٲe2dvtDIDDDDDdnGBk/֬Y/?B{ӦMu;vu^zaĈ3AQ2qD!}%,[ 999suuԩSkmխ[7\goo/$"""""ր#[9C&|'O@$SN:4h|% Ґ___yyyڌ]n޼zW2#44WZ 5kFWWW(J\r۷oDž  T_~GaccbܻwصkWqF;w",, L&ݻwqرjc7M63gb1F'SNAnn..^;w֚`S Ə (++Cff&wz32 tv܉˗/7ASߗ1/wwwlݺU:???$$$z?%%u}'N7zׅC;zoaJ2dbccQkDS * VVVzի\?/\___aƎ,4`cc/>>>{VVV i&OzѮ]Z;88ݻwԩSG\#22]tAdd$|rθ,--uC zJVӷo_,YZK$ 3gī8aѢEZU%iF#G⧟~·~[o<kt915hu}{j_t jbaaaLdS지ҹMΝ匌 mݼySXرqV/77/Қ+GGG\z(../""" J1|dff:JPո|2._,(Jrg\.GTTxzc CHHnܸx<|;v,$ FX>}P: 2={YYYDEPP}?NJ+ T%N8\X[[Çޛ BTTb1T*~7?eeeĄ Yf۷ooz5c^_1c{֭Cŋߘa޽!TֵkךtLu||| HIaDS`²;1c`ҥK{M5&ǎôi rJ|HHHhԄf8vGA||<֯_+++8yΒ7oF\\ kۿ?/3{l,YxBBB+W  .;>"b.?^_jZmi֫TZZJc SիWxdUpڢcǎ#"""""j 8c'K/JJJ믿J-V\\ xP(9sh[[[GO͛r...xg]ֈDCUTT>~:mۦ3qUC~ sT*uNX5dggcŵu@J{9nݪ3I T8/ИATwAff_xQXݻzs"CTOVHu>>>(tuBMں}IÇ gϞZWfGYV WWW1Qm3o<῰focח. m+׹/Meڵkr@@@ӴT*<(QkDv+P('* |AFJgeeԩSF͜9Sk ~muttt67ĺuЯ_?2 ?^gx뭷 ǤIT%Μ9PKu~~~x7={n1n8I$̙3޵ڵKo… yx뭷Я_?{饗h>lcח.Pd1 #u5^S}c)WM5j`͚5!LYVV&$k:t||| g!&&YYYpqqرc쌋/6K S8wBCCѳgOa n>:W2&[9WWWa[n:rD۷bҥ#-YYY\\\.XfMm㏘0awݻZK(PSLL 0j(X[[cƌZU*>S8::>lcORR-Zoppp@PPjmWQQU'N`ɒ%x`ggPܶyhj|nUS||<&O=z}xw֧ 22R;wĈ#Э[7jZƚ5klMu>|pttD>} 鮋淵ާZ&IKRRΝ^x @vPQQL>|111#D~)޽{ ΐH$(--Evv6\XԦRDdd$f͚pAT"%%۷oǹs[YY˗#11'N7R)qEرx嗍)x1a 0]tq$%%!&&z8u^|E?^hCP@R!''iii8}4N8!h-?r}դVocԩ CN 0o6^~e]v(**BJJ ~g)ãGbȑ#ȶ ɉ--Fhh(V^ Xj<Z+()))S&4Dxx8>CTVVbܹB}q"""""'{$"""2m۶ATB.kIO8$6=&"""2bDGGf̘!Lij?M"Yc"DGGprr„  OS|0QtDDDDDD捓=52L>-X.MDDDDDDDDDDfݽ 2TBB <|ؔADDfd؜ Z}(Ƞ}B{6k3ƾ 6dDDDDDDDOOt;]eX^fx`'G_/_Cٓ'z*!]ll`oeJ/~u)0 ְSV8W۵d?o߾...HLLĢE O.#&&JasuaϞ=u[\燄Z理 22Ҡoood2ܽ{;V܅π~xvP:B~xTT3; haOܽW6gΣI%,DpоQ+*QÚ5kZ.&z+Fs~.R+H'v:K}`YKĐKl%v>3 WmJ$];L ޶21xlD",-}q8'{Bl;cvwX O17&[QWVbݍ[)N|&Fo{EřQ\c48U `$޾Sk2ُ˰-V+TXw|]XY;@da'O>6n(m_?wN6֘ l Mao)8vR Obd;gLnK Lpdž[u/ř"lκ'-!B)3m.\= DvNN֕!;;[x=>jZk{Rj3THHrJ\pK,;lUY9_@85o&ANzF\c'i(߁ """""" -q$ƓK|=#mo?*ŕ)Ma Z9; ek%Eu~'؊]_+ jlͺ K :: >/v[Z_{H[ PNV[Hn>:pDa#}^8SXnpFϩPTH$֭?.DH$5YnMeEJ%>Zu0|! 3\3QLd}bKKL>kM6+ "&ʔp`?[LdwrZZZDOPt* د!N+ +GowSJX)eq3<*ƺJ,xw;QP^'+Ke%XڿӎB.,~PwӅElo eH.ԿmJzFH)} '+K8BM(//Ǎ7Э[Zu_xOBee%"""AU WMW9KNNFI󩩩pss[F:fޡ!ܫ'*N{ͦyz2?E㱞ڮVnJM*L,]:pNn(A݈']*L"F$W!:2KCߧ?R_Q$F$ vq1?JJuWj hL;UUTBQ3?JuՍ$PU;'L u`BBBp[ӈ[n]WTT=bXYY-iFkR*Ű9/.E}O* \;~$3Dv[q~.z+`/_n -ʟ>>Zrnfuյ]ٕr><\B8Iw(Il:a)- lq+..]ZE>uFOUo5QB2վ~xney-I+ uDv])6 q>$|KS`hVfekd{zF 6_^),D²pBI3LbKRhJRzrAe/^vv5yz((IŞO1lW| ۷ڵ {n#ݭ[7edd(""BҵU.Sc;Tܔ3gD80{Vxn>7u$IN*3Py)yz{+;=]_y2.%W+^PwTFuerj6u2JͷOKk!WOϯi#ק|L +']pEr G[%grs%&I~˙̱&\9:t蠟Y%Iݻw7ʊH.(( e ?#oee뫙+Yg\k 笢 &?nZkN˓jV}sْmj3+1V-8‘?gGH<Nָq_c4/$D<-9fX=n8_޽kV:my{rw=Q?ۆMx 5&<]rtjٜ2c>޺p^G5UQ<<4X,/(H/{$xKw545"_sDŽ[#Ԡ}p0=C)ΑϹ:~'cѣ%Iv2 m&I:xb)͙3g$IWFjڨO#?*Xrt 0ZEZ_Æ 7`=zTׯwdHv#9Uw6/&lmɩ:`OO@OR+?ra:32t6'WW(C1jPd)oSKmcdj j-Rt*;GnZꆐ`I5+͑,zY]g[/%R^½<5^L&]SrF[,׉]F6x:L]ϗ=O}>?gd\|V;"#c2iZv)E's@H*LCq眛#G(::ZWFFMzΝ9r"##%I(???l 36dggGo߾]NF8{l}:oP IDATvr~-k$]*d,{+^\eW eȓ*qOAh5h]9{WQ&5nܸ2٬o޼Hdonj#oI/V`ߧΪO좉#xOԒUP2Fn~$/wwXY|<hט0aMi!IZn?ƍ5bĨAzgm'$$hҤI bWq=Q6~CPc~߲yڶD6בkFYVqEKP==a)бlpQGܯI9Qm>_M|)O77^*)'G ښ K HNV|Zn QYJ˷pf6]9/"yW_린P R} $ֆ:n:)Rn[ǟOh:Y& V[t2;[?gj4D04 QK_xxrŪ<ŧehdcJ9>>^#F$>v8p@;wbѡC 4uT5J}U&M+wku-22졵U^lRfԼ#ǝQi&E cvr4$a򒹜R Eԓ$iWjP#A~=OKס,%*BfLrwWŢY9>5U{/A&HdF"Hd\lK# pi$.דW_}U{.u߯'NrD#"F ]xQ_Ѓ>(Iz䈀5h@:tPLLbbbԼysL&IO<{lVll:w6mڨI& ._CiÆ ڴi,Km,.;Tƍu!u믿.oooc}Ĉ뮻Q҈#$I$Ǝ~Fmr-zꩧJpGGK/gze$Zt%4'ERnVH>3'Ghu .d2)44m+11Q'O˗HCfYz7NMw}$̙3ںu#ʗK*>>^5}t |)))_ŋM}! @HdWlV^ԣGiF 4uܹS_~RSSK=?22R-*u_֭iӦ4i${F5rHKQQQUrr߯/B(} ӧN999ۻwo꫒7jƌ%s5jqԩSեK?/^f͚ij߾ӵl2-\PVզ={j֬Y^{M7nԽޫ*""Bג%K?VYCuj>|ڷopIŋu9ڵK7o֩S=#Iʕ+%MIIѬY4sLEEE믿^@=Ӓ 8s)5{=gwww͙3G7$իWO&MR~~ƍ0I ŋMVVm^^^۷nF͟?_|ISM'j̘1%GEE)**J]vرc5lذ*غukuIW_qq_z5{llر:vXwGԌ3ԧO5RFYj"a+Vٳ+# 44TJC"f t8p@N2FԵkNz5c =cJLL9… "sUÆ u %YZ}U{ӧf̘!$Ţ 6hϞ=UF4l0EDD{UJJ,YRoV˗/wܡaÆi۶m%{ӦMShhVfΜRs.%ɤW_}UӃ>(ɤ'|Rz뭷'*00PÆ +7}+$$D7|tEGGkȑ2z衇t mٲ O_t7ô4\R233m۪o߾2Պsђ$RkG}=|g$sl2={V 6ȑ#5~J%24qDGڽ{N:%wwwEGGcǎ矗$iNE".\u)%%ľ+Wjʕ7oh6())60w{N&Iٚ2e~'c>s͝;WmڴC=k%Ν;qzgenOgiϞ=eT\ܛo;wJ6lCM?tRI{1nZX,͛7kƌF_^7n4y͞uK*|{1^Z^#g;JppFݻwk̙%͚5S˖-K4mT}$aÆի?.\piZԤV{ase#FP``${$effBfJm+77W/,BBBSOI*,1ydI͟?ܘ=r䈱\>=*IPhhhm7,矵l2IuлtRf5ejԨ$%E q*y]wd2I/^\k^e$[%~pE}!ٷ%88XIIIzJa~1_vGUVz衇Ci̘1ׯ1͚8qb~pZk%&M  0 bŊ2KLLԹs$ɨ{\Ci :T>?ex,*777hѢjw^Μ9S~[ wq1ݢEjVuj*$$DRcZK=/==]IIIjذawI;=,lׯ7F{{{E:tnvxZp>'G "]  SO=%??Jڏ9<<\nnn Go?yr^y}$ر9_=ʵxbB<:j$?V>}nݺ[nաC?kP4Lo+dˮ]*}j%ItRlG[rrͯ*QBBw^⋺TPP2w\kgX]P4}tL&kʕھ}Ν;gS#GjԨQd$\UѨ٪L>%%E)))F"%k-_/^?ӠA#٬XjԨQJJJҌ3tJ]ką}Y){ܗ=e2**Q~G+`ڵԵkW;Vy>PבȮx@&I2e8PqYeeeˋ-һk}Q5nX{}v۷\9WveK_]oZn۫Gڵ<==7xC>Ξ=[a{w}֭q|WGޗ=ޝjC;Ԟ*]{׊ݻwk׮RΝega*pwwW.]$(+%Iׯjxp۫W/9RRa}؋/]ӧO7Fh՟syl6%(O0iO/JBB,Yg}Vcǎ5ʂx{{7MmtMђKVD${=:e$~WXXXᵤǎ_2[$Ϙܹseg2ԩS*]TeH222t IRǎM VVHH}YIRRR̙^{MVU2eJ:9C֭תU+9Ra[GV#,.\GEsrrlٲ*]/;;X.sͫ*s_zdv6m<_e~w5y%',7ɄAQs% T  ^p5qFIRDDXyʕ+zW]v髯TnRus.](44} 0w]a[GwWw'//OVU*]ݬY3Sjժ*p1*o˖-մi*[˞/p$uYIWvdO0׷o_mUys}Ud@@M_=zԑ!p"]yyy:v$gϞFZn'|m9sFRaj˗_~iL6eu֭c4ydѣ#GT޽%IK,޽{}u)IɓՠA;9ۃ&O,dM6>|„lQ)nȐ!㏗; :Tn\w}t-Y(!77^Z{{{kڴijepO>YbƐ?vW7n6=,Y>@C )sΆ j֬Y'N0c-]TSNdҼy_*11Qԩ "777رC7pCݾ},I={>c;v̘0077Hv;BJJ^{5͘1C~~~3gvܩ;wŋ2jܸt:H*}qf#H;fnnfΜyO/&Ol (l)))ׯ͛oFȑ#yT'NQ޽/k˖-Lٳ_4l05Jڵk;,w_]潄[n$m۶MOKfjJ&Io/_SN)<<\C QXX[aY{ܗkÆ 8pZl__|Ξ= ꮻRPPN:U,{{h/=zͶ-[[Ϗ=ߢE =s6m:cǎ)33S^^^j޼bbbbEs1F[$hر,ooos=6-x T)qF1B111jРQ_HBB&Md{(֭[5}t= TϞ=2W+Q6CӧOlb+bSHBBkܸq}ݧ l׿4l0o^۷/?4J@T믿y) @7tn&cÇ5a„Rϫi)*]cIJOOK/d3NE<"_|mϦ 4{luСD=˞YT^=***J?yW^jԨQA^jܸqeY߼yM"j@&IСqjzWm~lȮ"ժ?ھ}lRfY.]޽{СCnAANQFo߾jҤ|}}k}BNcƌ߮^zy b畘^[n5JyժU+IG}2`p }ݧ;w*!!l4i^_WffdUjرc8qxCWcǪ{ٳڴiyyy);;[Ǐ׎;l2lo~IR|| ԩSu}W._l|IHH(3!h{F85nXEg}N7x/=أ\I~~.])???YV]|Yo߮5k(33!"##3P={j֬Y^{MWvrDeȑP 6lؠuY͚5Spp~Ik֬і-[d2."##ɚ\=\l\S6mڤM69; D64F"<pX`5j%%%iZtN<:DvѠAuA111Qe2$IO<_UWVԪU+ :T>9:Dv0vX=.N]5efkС:tfƌW^yu:ht .d2)44)U)))$ǫSNRll#6u@RR.]x߿_ϟ5x`s=Z:|p:DvvZ]eڹ^dffJ*!*j,8 7K# pi$j*^ZÃr)--Xpb$@F"G7t#6!մm6%%%)22R<<==}v*--M TSVV|I]Vtwѧ~QF99: Ԁ˜p o@5kܹ UVVy}JMMՕ+WPgoThh$k'GMy۝ PXNNNvb$@F"&777cb81nFvѣGlkٲL;  IDAT???I 8#jpssStt$N TRDDf5d5lP~'Gm$J5k5kf-77Wp TAAA?שSP*i.1#4F"Hd\lK# pi$.>4h:(&&F111j޼L&$'+l# @7|zhM:x֬YoVVѷuرcרK&Ll./""Bׯ~ORjjjE"(y]… 2L tڵ3ڷoN>|5o\ݺudR׮]5{l=裲X,v( : ))IK.U||߯k|X111)RRRj>Dvqƕ?..f}%r۶mնm ~z"iuv@emڴIԿ0"Hd\lK# pi$.D64H,4fϞ=z>'FzĈlKcDvzjy{{oںuk-G8K/oŊ={v-G(5uY:uRvC?S(auQ:uR۶mfĉj*?޾wu jժϟ/IհaÔ-^XdZ5rH:3kV&MlZd#By/)5l2yyyըkԨQ QHH:uꤱcw_|Q]wn,ݻWdS:11JIlŢcǎ뙙5֤I?X?wQfJJJÇ%~kԨ=C@-)5m2j-٬ɓ'+;;[W뺚X֭s*y9M01Sg?azM6zR5-MB222ti[͚51=֬Y+WT:*///uXߵk$&]<]\C餤$8p@{ў={t=hȑUj811Qvޭ_~fƏ{ƍոmVb{бcG˥KtQIu$IYYYwZ,&'o)s_~~}q 4_=J^z!hB+W˕TV~4cƌRiӦM%jݺu˗kΜ9vkj֬Y}}'kر7|/1bnv5jHڳgϟ'O۞nvxj޼T]xQݻo>؜;|pM:̶ׯ_~WvRϹ;` 6L-ZP@@t-Za/IzmZp5i„ FcxգGqҦM4o۷oWrrï^zW^:/_+VʵGmڴ)s&N%yyyi̙%خfСܹӮ_<]$..c{쩰0]tf2E:uZ yYrnDvE%5k,]ɒ%Zڵݍ~x@۶mW_}~aqٽ{&L IСL">vшƍ6'Md/Cc}F"w}wl^[k{Ň8Nllv.^O>D&MDQFzǴtR=jذCcС|R_佖h͚5ݻK<󐐐]]gϞ'Ivm駟.Ė ?%rLHAARRR.\$)==d,wfՔ}%h"͚5Ku(Mɓ'%&%:ԩ׿j̙:2!!A oQqqqٳ1rKqqqڿΜ98'K~-'>l3j*99x$zz֭h"mٲE;v޽{.n֭Nbrg^ϺdRd^'99Y 40[nsΕWu(M$7lؠ 6 4ĉտI=m& ڴi6mڤVZ7n\+׎2JOzm&+֤vhk77ڵK6%VfK*,j*-]TyyyvrxxO><~՚6mGyDC ԩS\P%33֯Y';v;[~JV֯_olӦM\M[տrE~z}JJNN֔)SԱcG 0@]tQӦMKm֬M_|c,^!jhj&%%)--fϡ׋-ܢ[oI-_\k֬QVVCA۷OTXҢG1bbbbc飐 W׉.*5S.zjkv}6L6G]we,.//O6mҲetPG4gcO>,yxx6FKdk._uiƍդII#4iRn"wxru-֭[Z,WO"+ww ߳c_p IdjJ|xISNiٲeZjÒW_$I}hqv$vVVmVuM֭պuk^ȰV+#CCCPk}/DW^Qvvu]wZ,{QffK(=#zJ}BBB4tPuA/sk(޽Lb-((f}ׯͶW^yfg˖-KrssuYeddGQQQ9bhӦM5ʰX,ڶm-[~䧣7'j-ݷo-ܼy~E=`=S8q6oެ}UHH >>X,|>Zn]?ٳG&LЈ#H(H/Vrr.5kLyyyJHHG}>֟'-ZHqqqԩׯ/___Y8qB ھ}{ stNh8ի!O \ڴi{X_bfϞĈPY P~}2oĈgϞTa x.uZje91EFF jd\#.D64ٸlڴI6mrvjlK# pi$.D6y8;ZqƩW^_foҤIJHHpbt(l… /t~;HΝe˖9"L7?׼ykP~4x`lR!!!2㏵`g\Hd 4P5o\&IOhnk׮;wNP@@}]5l١ EDDҥKZbùfƪsjӦ4i:t6lؠM6bV@@nfS RSSuAYF~Vkb5k,1B˖-q˸JϞ=v),,LJIIѱcǴo>m߾]vv_~1cF/((РAjb„ 7nP ޝ5u{B0a ".h+UP[j ZGkvkV]j:nj]P[3 *"ZeSJ!bɹ $,11|?9y{~$9y5xW ҷ }?fΜ)$O>TUU 83=ڵ uuuFw}W:WWWbܸqҥKZΘ1qqqjO4( &L@ff&~[FFX,]uG-ǟ'jS~f7|]v!JŌ37|˗/C&A&9:""""΋l3yT^^Hggv>}@Ph짳=z4K,B0rD̙3akk$&&RlܸX:?둟_~UUU;F Dooo|g՚ص|2n߾z#GH$B@@֬Y ;wĊ+0~x~응> 4Ѐ'OpqqA0x`XZZjAanݺ;wj]7f 0۷okyA#۽{F&BII ~\v W\AYY,Yv憗^z HJJBDDDEl\]]EEELb?$ M)$ϝ;wБ=rrrҥKX?F;??ZGBB4ƚ5kеkWx{{3ӧORӧOǚ5kvgW\+PVV /9q6mڤu駟pGRn݄弼<#FBDDDDD,_rr2KjM&U||<$ vlIL,@I<&L@jj18w\J|'B]qimuVHIIW~~>KuXX^544 --  [[[)CC-[;eeeذaˊcG)Z#FBDDDDD8"3f QYY۷#22!/x ?~\ hP/}H 0}6~Gݻ:t(M899%%%HOOݻ[Klrpp@dd$Ǝ ݻr ۇWɷwŋzonħ>/my<3)S)S^^LT 777m' <%gC"`HJJ{[SoIII1v8_wl\Ɍ@^رcĉLk׮aϞ=:cǎѣ=z_?XGټy3PTT_~"'N3<>}tۧ1fG <<cǎE߾}ѵkWrܺu 8t***Z죣Ғ>eܻw `̙j ,>G믿.Ll$///F?K.X|zB^ 4}~F%Kk׮j[YY~~~+8y"""""2LdhxxxG1v8&5k{7oT*Eff0P]pp0F;v ;|}}1ydXYY!44III8{lbbb$vmm- kkkaܸqJXjbccQ\\l7n/_Hϸpr9zꅈ!&&سgc>|8.w999:?gΜQ콽bŊVY9::>F7?}Il]AUuuuqKKK/YDp#77@jjjkGyy9ooo緻ϗ^z NNNFRRHH$̛7nɓ'n/HP(pU\z“~~~T˗_\y0n8r?Ű7nӑg̘1Xr0˗q)^^^xꩧC\版1Mj<<< X%| %%%j)ύ\.X#G"%%VQOLLŋdɓ (qqqܹs555Xp!FTTϟD bѢE-ٞrttĢE P[[zK#w^[7oQUUbL~~~rvvvmܪ; OOOR)z쉱c fʰm۶6SO %3///١wz21+VH$`$%%N83gB$aժUǏ+'N`u#55ǎ!֒۶mCJJ *++59rG;wp-j)\ڵ+{9?+WԸaڷo_aRIUu~xbD"( |5mڴ qqqZ0u#>KDDDDD-c@RoB,ɓ#L'k$eRRRPZZ @=kaaa;vPKb+%$$sԞz 7nܨuL&ç~ iO?b<@S9_~Eg{j=///̛7Ë/ &@O8^{͉(Tٳgh?j{$wqqZ ?<֮]+J>}:n݊?'N<0m۶ "\]]O+=z׍\P"aw֚UJf=Zg dS>kӵkW`Z)**:mGg}NkhW_ uH²Ԧ'"""""&Izlܸᘽf@tݠ19RXNNNnre$rԭL&ÇG~~L6lX<]gGomp ̙3غukI4]}_ϰZX6oʐd2k!..~kÇҥK{n8pB8qBxO"`ԨQ;w.>sݻzѾpBG;vLX5jTVАH$f l۶ %e9?!!!F):lllxP" o~!5x ={믿9"wƍf)GD"b$h]QQl;=%J (((Y£ݻwG^Zl4=o5v*55U jmmcԩGPPmۆ-[h?pQ:t}&߅]AA lܸO>$"""0l0899aوƲeZ]E_Xt)<==#GG9s`ҤIxOI֦Y8;;cԩ9r$<==aoo/LL0[[fi\_=?5y C^ /޽{8`:DDDDD;w.PYY۷;NA&5Nu21dG[lVnӜ+,,,4۽{wQ'1LܻwO>}߿,deeҥK1g(V%'My^*h-jG)""ZҥKm귮)))HIIA`` ,YXZZv7obؼy3$ 'xSL-z쉿ZZir\O=}]'p}ݻj7fE(9Қ WU:~)+sNZl'f̘زeKS1D"HHVQ:"MWmӧo}}}Am)S ػw^QF>n޼ŋyT*YX899i]gϞ6'% |IcذaBPP~ksm!q9;w;wė_~ ǏǛV\3x`,Y"8rΜ9RkWdd$^xSs}}nN[5wQ=oCw$T*$M@DDDD1Mxyy aaa/ vZlN...pqqk7%|}}ׯ$ܺu }􁿿>]XX(LاONVMʴT{_~?ՉZJuk׮d2{=ܺuӧ\XX%KKK`ԩ?~|UUUqAW&!Mxyy O< 礥"Æ s} >>>pttlMC^;Jcc#H^z!??a&6l Zl#Ln:6669sFLe˖uHb]N:%K>m]]799prrˆ#4Fvj7>..ND࣏>+&cڷo&Nf) Yn6BH.]`BawŪUe&,8PQ󩩩z%CCC4B5*Q[# puuα6IIIXf>oߎ 4 XǎӺmbb" kkk2t>SLdwIOOǢEk׮Ffo:ODDDDD捉lNׯGZZM899%%%8s vޭWҰ>}/"1vXhhh@YYqY:uJxD]4,\4i^lsV__~sAHHu놪*deea׮]j61~ڴi1b www١UUU~:Μ9GB&=£k" ý{y >CBB1|p...Bmm-JJJp5$%%!++K>e2,X{dž={춍裏p<30`$ ܹK.a޽Ü9s:>>իDDDDD0MDJBBJKK쌈cC{7"z">>6m1}t#GGDDDDyqG"Tr9… =ƾ[",,  !""""22&r 8qa0MDDD\FFBBB=&X#LDDDDDDDDDDdҘ&""""""""""D64&Ȥ1MDDDDDDDDDD&l"6H$qqDFF7?~o#"""""""2/V:F=0x` 2C A~ o\bGk_yyyxW3H8::2v81k,Ν;8|իsy$"""""""2Ldh&ɤ<ݻ72(]PWWΆbcctRCIDDDDDDDd66ʑJDpvvnShv}yyy%23g΄-jjjw܉+V`߿? %`" ~kpaɒ% mSشiSGId$ MHKK\.ouOFMM R)O5kttDDDDDDDDf=d|HMMEYY!2k&L 55M}444 --  [[qD6;;|||pq`={3g`ѢEz[*"11HHHƍ5 :ӦM?PWWc޽/j[U?3!H0~x$%%/""""""""sDdtYYY__Vm k4ֿX~=н{wbHRxyy!&&۷oG@@#/_ƃZ+W@PQg٤| z HJ\z?Ν;gĔc֬Yj[={Daa!/^M}}W'.V&Õbbb0c @mm- kkkaܸqJXjbccQ\\sÇUe3''GSWW7n lWbȜ1M<==^HKKʕ+4'BZF5 DvYY***]\\0w\@MM .\"aÇC"`…z4%999򂝝z7oO""""""""s"޽{޽{k.$%%TX?a/9u<444b]tN~HXXb1`ǎjIl3~ ˿&U&""""""""uMFЮ\ǎ(`ii cƌ)Sp#EK榮8pF3f`hllDdd09=z@ȑ#f oooXZZbĈ:'\޽wp-7lД>zFU'-r?:C* ˺b%"""""""̘ȦVQ lgggHܔݻ2q .]lp}lB!5Y"˵:cTH$Z'l-Dj""""""""RD6jߚ#FBHV&P(pyhJn;:: f}lt֭jlӒRaAg{]TP훈1MzD^߾}ۈѐ)S(&hl e"}lj}:&IoSLďDSNQʤN +++dddh\\\#F슊 i),5?F\pAg|999²MR!P\\Xz5ITYXX駟F||ޮ]ex_ݻwG^.''G8wٳǔ)SZ9z01cLL &** ]xQ:*-$Wff&J+5GPƦMKgNިt}avCCׯG||$$؈X(R""""""""DD{nd2HR<쳭>::@Sml&tc"5kbێ3>>>P(زeB$"""""""2+LdABBJKK쌈3gS yalzF6QDDDDDDDDDDdҘ&""""""""""D64&""""""""""DDDDDDDDDDdҘ&""""""""""D64&Ȥ1MDDDDDDDDDD&l""""""""""2iLdIc"LDDDDDDDDDDdҘ&""""""""""D64&Ȥ1MDDDDDDDDDD&l""""""""""2iLdIc"LM]IENDB`color-spantrace-0.2.0/pictures/minimal.png000064400000000000000000002177510072674642500167560ustar 00000000000000PNG  IHDR553sBIT|dtEXtSoftwaregnome-screenshot> IDATxwx_{Nw:.KV^pS '%T( 5BK!7@6 66{%꽞uޝ}'x^ϣμ3F @ @  @ @ AW![ @ @ !d @ @ `@#l@ @ @  h-@ @ @ @ @0B@ @ @ 4B@ @ F@ @ @ ![ @ @ U@ ~P* ~*@ @  ^@ 0A#w}|D@X}-Rs<ۃb'rd:6¿kdw}CBJ~?4ɯ JdL 5}KNnn./2=˖-뷲F Wd,R̄=gzA&/ΤDmVO5'3IY:2PGpvH@F9\%b|K'!2RzJc [_bn~JI"B@@FCJ ht88eiaW]jpcN!i].*6v5[?,ZLee%~i_J`҈dLfTViᄙ8].,/狍XV+![pτŗ{*-7efrN}e5|cmD|D&]ٮBv8nJZٴjFM,NǬՄՌ4YWϿNb\esV Z Zr\qa&W")΄9T X ]UH %=̏2w?`9idf֣Q]r3JbT%ÚɲpHrʁU~gdscbjqRnդ#qCl &͑:6d? F% II2;J#VIWj5j5CM\k'Nq77L8Y}JR zR z&G[m}R6 9|LFRO &M̝WgVXN Wev >K$aJNUmDn;]NJ1l rTSp~Pc#ZBAUUHt;Q}9ԯ(s(;:C8]53gI080Q4؂+Uo~trVK^d$P땕v:h$TF~û_Zu=" !F}nݮܤRqy|l)=pgz*ɧ"q1k㐺4j%5g:&d?Rx+PP\R 7Z.>tXO%'c][ZXYVF+x3P%XS-}YKbkYiE 5i;Y\;mlj3û* Vt|bu9;<.7֝ IYxXgMy~G@WDw4|wRc ~#䞐Fj,-<,D i{m6J*-F2f:k :=fh).3̮op#MM̎dz;`h1a@f յ|WUM!۷)] mp0m0'9Ј\0Q|Q^٥2w۫PZ%~`\n'qiTާ[!;2944ST$jkS3'NRc}G%g4da0ipnvꚀPODy<ɉ_zC'sx͞Idt!!X:yVpbޠݓZe 7$!6;4UP|'a\~8]3cc<+Ƿd1ddLQX9w??\FmI˩uF#Ƒ8tQ1FFjq:X:q9zl2|Ռݿoeys:kaq86N=O^7i9MQ}~KwDxv<|(9ӧIHxn:Ge ÇK/eĈc(--eӦM{vd+;;W_}>Sh"1 rJ>Ѳo ,Sr9b*͇ku0:bW^\. _ D.qYI"9:S8ZAɊ"vǺ}huS־flR`M}YYY~#og3 ybɒ%?`Æ 77{o[O\IӨG8^_S2\3ws&Ihfʪzvd"}^O 8P(vu7ky>D\2+yS[ZsZͼ;n&sxtmdF^85|k:'呀Di03!af eދ)ʫCR1 %1wy._ݞSRqC"1'ۓfg)O'O=KA_Gqӫ/PU(ZᤌKQug nagzUZ H>wzKq=XwtZ-c}cc0Ɛ3c*G6l˗|;Jh ##.Gy۷|~;W_},m~deeOgBW~ɢI3,%dz=sTTJO#Dg_x?T>JZK1 o$Dqw*zZ=1 I y'9Q\Lr˂9g_lX4aL:MUcs{|nI2m$YzXH(a!u$II 7{~ urr; Bl.-V[BdQ+Ԓ )Ik*d6nȵ^{+Vp10 2S .GM6@ 5hЊ&C#O ؑn.|h H/avBnO$o[J5ԴR*.JLM??V' cǎ7'hu8q}Yo@wVd޽ݻSNԄh$''ya4yǸ;8rHq&H"f;N'/MJŎR.je4{ @5VEy}AoY*'J,^}(@B90Šgh';΄|BrQG I"z%~\ȄXmpv+.9nn5 8/n`֭<][&۶XWZR[ Bvi~űCG:UB$29>Vm sh\WVN]BBH?us=&8nF]bfmq)ee4(0sGG\[ZG>jEo%.#IJFNvSc7 UU)&F]|!N}(:pE46If=bnxB<)s|.Ȇ͸2& ZޡCqb>VJ 6m0l[7}Ur3Q?hc/[#bʼn{$IC0xhϾ#ə9kuY/gJdd$_=,]>kn VҥK<رcYz5O?Džٹs'?0W!;4Ն/&!2vmRc1oL"I1l9C"{[pIIbtzdaL:u{{6Q.)BIRT"a!N֟ ˿HKP,4]G? Ւͩɤ6lhd9jRZھj)"&.;IyP+W /0}3/lop;[g Ev6oo$2DA"1K l'TCyXڱQɾJ5CZۍRl:&#q!N XT۾ʚɦß@k2n8z=Ǐooƌ@k\@߬^?c+Vb ^|E4 _OlT.#N +Xl6>[2ʿ 8p UV``DFvWU+;(jkm I"h`w|-+D.d;7ĵ#~SUIK NLZ1h*o;.DM锵4h}?x@1/gҥl۶z_El% [ 0s`RE&?KXD ̊cLrW\@+/)$-Dȧ|CrWaqLY"_vؽ3VI \oМР`.߿ݑx(&>ϖdsl,}lh9F 睟5x[=W="ۭLN'ݟZ;vaoia5~v+d|˗Cm~٧TLN1OZ]Y9ueK6LvXmnc@SZ6 гU-I.Y hBܹsќ^>[o:?m;̙3LƏOLL } 455իNll,99}EZ\ NM,8̺ߣP(3j&Ukg{|o#neΨ(N:"L.~;neK=iC -5}%KWxV1,%j+(mmLȶmlް_^+.0S/-7B6@qu) e҆j"t&bQ˴.jǢX9zgDyZaw~:/7%%9 }D6Ng 844:IU0dIׅ˿zl)IV!{ˑ/4fUeY-z\,(csX?֭'dk4&Nl]5m6{ѧ?{.8p 60m4P(`|Z\|^^' j5ne@Ah폶}**NF1ldtD7F{eO}G 3,tf0+:=$6 IDAT$}QΧe61_r|^ fW8 3sMb5v?AS.n7+㸎,\_ر|k371ݳmw8yM~fWk{v63m j,/@BX\,m_jKJ)ײ[lH+IZcD8QFG\+Hoaّ:vprr>l^nM:`=Pv<<]ig}JF$%ܕMcǶ/;׶OP0zNl޼íw0p,ߴ|UYYj[5E}5 XNM(;jaY$ Z=0B# I.1*o<s'{ PCS`Եd |+~.#{_v _䅵FGi0Q ;Bfnt~0wʟT_gٳ#ebqdx} #.EMɘsm.Ϩsn<*Dnzgr@q8Nk .SD!_A#rڷ6'<20Qvnٌ%jC!{ O}}=;v`ҤIX?ueHMuCaawLMUT*O %JgyֱZ-fuPiQ]OjXnQNQI@]q%,IJ}^^IqKߪ1͢ J%:-3"pz=:jq\ ,{A$v"vvJ$r,mPa.160߼wX}!> vs]=G7wX?.#]]YxBfƑM[d&.ۺ"qG^1]Y+ZȶcRg9y;wS->"э[sMt4ɅW^ǰ97d .Tv4y,TGL~@O i|$d \WGhL{4&-J!-UĪsAСC;p$Cu]R٥O@QX~zmH5ZtRwt úcFtFLcl(iLz繠L65v 8xHPdħɶ+*J5mnjScQY`ۑ]}v?XS3o*a|W Nw76i ΗjiZ&Gm_$(>c)l^q)=Lq4:N Aggp e+[Vصk)))L&z)~mvK#s71wb,nɀZ5Jp[ﭝ\N'Nm=Ϟ]jʚ:;AEes˂)oR`l}5)w.2^h42n86n;Hࢋ.bرU`cbW((nB!SRT{ a^Ͼ6~#>NM /'`~E}f.\Z- v? 72":hRI=r6hPgwxxJEwjI.lm87k<ֱ?Ш=-Ef鼻U}gґ:ΏsW0qoF$\.O>d؉1>пxSklӰF>p ش#d{[V+8$\>#_}o2\.g:@HDX(OQ_?}{(($:=0J!{$NZ]__]+CR QՊIfūNM_pu,,~ѹ:\Lz~N#L>Уc*|ڪ륁;Gn,|PqF ހtYu5$q˸(oO8\t4h8[TJ'#%&{X+Z'IIiTj&grxǺ5؝Œ)=~0\}WX҂k@5>4@k+STBHߓmT^-8]"P{roɓbر;Ç9t7ndΝ}'l]~۩Fm⻝ՌiCS]g|Imopaq-KSl|rUh%n_Ɲ)nT.Z=@oF^R4_u֠ {  VSpII%YaF j1(ʪ Ci4FÜѹط^kF}}=OǦwaQO}_TN"u5@un`_CO%Z]l?:;Vd\ٳtAqYmRXq-p O5=ע\%I~Qa˵s!(t_z뭞 z+=.XD wW>u;Ycuݑ;N?ܴv0Fe3pָٌ[GOU}|'V§ǡ-;l=N.7.EhY }Q3@rX4Կ߈.Tk'_KCLVuXZj侻zRw&wdE[SNJgԝetYe1?zK~NjoU++)ht\Uk{N(+].%nFr q\;  M^svO|ܟu9pcMm?=ɐvokFHM$&'=6tPTZS% |x̞=^Ve >ŋSZZc=Ɓ_ i?\Y-{nJ%)ry`(Im<*^rXBIzĦb 6YxW;q?Dj444}v:u*>gT^^p+2tP~aJ%v+VqFd}ExqjV@1f711Z@dĆBB!Ihp!_Mrpl=Gˉ'yfx[[a7nV㰺y$) izle%Ol4I[U^[$Id<8k?ݑa|p1E"Q($_ÍǠz;Rִ߂8`9ŏ2RI ^F-gެ/+X6vj9r$f㫯߿[vCɭغ.7<1;IÓHxP<5d 3>B"`k (Cՠ;<ށ:>IE $ %C6"73w{N]'>stOʷx!MM82&㢻 hz~Ng$+Ӊ@RytFG߬QTO1GرJe.Xe2 O҄$/s4w^zsmwBVb#'98g-12\_>[@ H]8hQ~Rmo*ll._WralgyIb֚'cuxg$D<]tg}/deeK^^cƌAVǟg~QRwoQ󣘗ʇTao#%$Eu uNwu'4XZe83%{=,Nk 76);AM.B\Q~ɆY$r]+?Jױj1_EZE^d(˪^VM9N/Hjɔ"} ۍ.xbp \aJYm}gy5 N8l'vVUz>7@#P`vODD?u]ڵK&FU;>gsEM=y,Ťd$w2#xYN$|-jjeQ)H W(ѷnG11Vي+ E;*O ER|0[M&ƈyx̡4umhSGZm< ìylܷⓧ1H:S/k+H6u/j ng~Eooͯߥ: Km\.E^#zEG=ULz#Ss=j gtB &k&~ꍀ_ƣC2<ЗYt|^^I5BS o*XHyٿ?>w}7Ne] 6n>#pzEvvV+_.g}ZOh3U$[ Ud C"l+2ȉ Gx 0gݺuu]T*fΜ֭[Q*L:-[ݭHl6mTĆ mv8H ?T^W gHdu+k^$A%1ƈR!qXRclj)j5_Z]OjhbhhQVCZqO;W)IܔDZHE쾴vvTv0zi9*6%d9+P`z)V+%%%+}F~~_ݭ Z.a\n{lJяif"/ > JfuP5{Zzl;29Tߥ&˶ʻGm*@o7cOSSn%I ]J<$>:[%r7TTݾۂ'.MI '  9>?zLo9)x~رc(ť+_?Dly+,ǥ5,|`3O%>%I">"c]({ޏȃf%fhB0T t\*7uQv rv)ds8>beBBDCmK;[:VHȴ4mQ h%Ͻޙ'XpF̙3s+m\\ٳgUJ%وjH0oP цv*l4ٝgWosPlr1,:IILfTD""#I|d!{=BzA4Bs?i6qeB/\ݵQIw߯wݞ}:+%຤xFup Zl':NBMKJĢX$}cL[ʡ_W_?tZ߸[IJJ3G$9,>}YbKyPNMXT(v̾FOdbcQz(U'OP*HJ &= B>r} fO=iF cɟpn!!${K W}ear:=.E$IGd׊ϩ+ jd֦*@@o21nJԖ0Cɞ: O~MmIi=GW6n4 U 6G=vᣰ`g[1wi'>;7.aMM ?p/֬\v4ʪ_?vjk-ē6z|'pAjcRh=OY@x㍨j,Y† (((klLl޼r?gXĘ}% G7}Or˂yw5דOg]ө8ݑPk_#;8Ttrl;f9yd$ wݔtn%W(;f4%T5T{-V w~%{C^hvOucJj RQ(>xHLc|xǛ-jh:8UJ b-It#:_e[jl^8Ro-P?=*fzCB8X5π&%{* n}.lط3"m>X3$ ޺j".RB?vpQ>./!/fw|Rˏ@0#֭FRq0eo܊@TAA?L9"˓/~񋠗ZU* ؝N,t*6 V+PAPdѠIAmvZCVJvm0R?Vu'--$>*-z3dCԨF{ʼnzd}(f嫯j~1#ZGIcoC#Vg^n<K &(}׼\bccIJJԩS=:.P㯾ǕK/q}jy衇XtiPb]8)+g",{G]w? YZYKp SY([SPR :30:}&?B6!epe$IggǞ/&-o F 6ޤjmj|ղ|G7mes/< 1f0t֌.ߺ[eǎ> 䖆Jvl6*0u11rujL8^HeAifȗ?ҫZ} D;G$%.3ݓ:_禛nh4+|r:NcɞfkD]};l;jٽe!/K7=Dg`)>|;?v]S='Ii Jxl}&=}ɬzt#%ţWv)Vj)i=i5 ȗs[6:ZQX]Z,~+.\ŋ9r[nf"##4i&LZ> ܍#%-7$R IDATAQn,PDv)68\ߛl,PWnYzlo.o#޸7&޺#)${5JwGpWT7^F:UpDV?illd۶mL0/39fM?CnJ%/"1GAP0rHϟ$IlڴIIN˛,5`RlEion@jnj۴m$b%;2BJZYIJ\&*V J/ޮGH^@G㱞p|)C{rݼ_TmywH`cV+k*}҃ƍ3g< ovjZ)..9.P㯾ǭ\ӧ3i$rrrXd o6:3qm:;k4?@ U/ŒF͙٥%ݎ;`u|[z uzf=*&.# Vy78^Gyw|SI5gϞ}[t8O/pFcu ;>[Ŵt=,?\>`ٶSGOٷH D,`z-ù+\}>yoˉ'Z@V>ogll p:xa٫;1~4ֲjWhƕ]7 O/Q޷~\Ow?1;^t$'%b6"_=|'o*9V{mm_m橙27pl矟\?k׮e„ pY/_#F0gt:^{l3}"d%8Y_2I*I\rqUb"Zz *J-&k"BӉflT:aFQ}= ,]WaQn}09Ap8J*1XVs=6P㯾=_d2ӟ7j3i߱rx F 8r:Yw 5ᨵZl 5E%þTra4b93!̌fk՗rP_Q-c.Y@葄FG`9{/ouCsH!29wp9X,}y\z3aR@lSmb:zh-ؾ|% 9AS_f): Ng@S{K W0dr`Dm;44PSRJ$2иn^|E.RFAxx8vR6n{GM'#; NsٌJF9 `ۑ]%Yݞgo~GENrIQ ѩ8\N, (?Ŗ#;p`K'-elbx# U 9-_ﲭP'}Jz|N:ŋ3LQR(Xl1i$磼ؽ{7rss1sLԧk/գN H17Gy}=,-T +kZY#f 9hCNM 1\\!bBj\27u `?MsE Ja콮ГH&LE%n=z=Gh ;d J$XUeasr-BBBЫW/XYY_W^^> K.ᅬ_i9u1o!\Tֈz*gk/B 3WWWD0Usqf]z%."gegwR<݇yL,Auޤ҇C؈MՕN'Y!>=a/B}:gLGl5HFcyKܭI> 1%χ5~ Sx ss(TȥTS y<m>:|W^*0k!# !6ϯ@!"Y]@%cbE)aɮiJn^O>#߶O P9246Q*7CeE\ ! -sUUOa nbKU [X@333 FXAnfj8U]r9㥞= 4q}%؛phB!IFlB! 13tN< cJ#:y w,1G_7.zp17P#ߍ a=p]mq'7!`̨^S `n.F4P@ i\ܕ0# GR). BL  !balH˗m !C-у!*n0*3~]B'r$nr,/GTTx$jTڦ <~.BffTQ|>݈$BL !'bA-iT2M »]'^ؚ.+2>qAWa|,D~9#ssW*E@Y9zLsJP\OdB!T҄b`^Eq'Ն%ilľ] +HE34EQN_ 9\@ yM!t%f]!B!B!n$B!B!b(M!B!B!ĤQ B!B!BI@6!B!B!FlB!B!B!&لB!B!BL+@!݊+0df͚B#׈B!B!kلB!B!BL&[z5)Swb!B!B dB]]]I5!B!B40OoXBUE*F!B!B!Zrdz)`nn9u#B!B!B4ȮcxpfY?.frXZZbĉ7!QXX o(++Ӹ/GDD={555w233/ÇzeӦMEAA̙hL4 z%JKK{"??E7n<<< qMڵ 'OĪUjL}ݫ=/^I&Əz4x wŁ{nrC.񈈈;PQQ˗/c޽rD";ݻxWРq!C`ŊǏ#996m HLLDCCf͚EaΝ;? .DPPjjjo>lٲ Bp\'1c쌺:صk.^fC{jXPPeee())AVVN<"ϳ?"B!B29/_'dMWNb57h ,]j˹\.ӧ_ݻw[uV899Xnoo{{{!!!1T7 $''#22Rm<<[s| a޼yxԖ̓?-[f:(,YBPm3bbbm۶aƍ-ʕ+|r#11Wn-PZZ5kh [k֬gS$'''̛7R/4>_yaZ˳,xСCi&l۶Ml2esŴiZ,www;ӧ#..Nkl]?l|B!B!Ƥs=aG X1iZؔiʩRbԨQѣ,--5!q\rEEEP(D`` Ǝ Pd̟?yyyzoܹX,ƹsPTTsss!$$D>$)))}p}!>>si1I&3f`HMM!0tPDFFB(bŊxWuf4EEE!448~8Xp\=ٳgRSdp8d2;v .\X,3fvjQƙ3gI&!..W ŋѣG( ,_V;xp8Xb/`Xsqqq:ٳf͂H$իWqAxQXXSN > bWWWcq`gg>} ** |>_g9l]?l|B!B!Ʀ3]$f2 iw+dcc{rWƁZlx״e9r-߿GJJ x<fϞKU?{{{L2Ν[7㣶,88$&&|GrppٳHLLDAAԩSo#11K,s=BCCqXI!/2:66 daɒ%p8GRR]ݻvZ_ÇQUUբ/'yL1c`Ĉ;v… Zf;]n23na„ 033÷~={0|B&i,K$ɓHNNfGL}ϟ3g,E L8 0|ܹsGmc:aaB!B16=#d2D"Rz,\M6Tu͛7ת֭[RCkYRTsu۷h-<_pAl%\Ǐ,뇭;/B!B!<$ǣEV`jnȑFϭn|¶}6B\ܺlٲbX4DN=quxÇn\gnnn@6m=>5Enn.ŘUtFLߵnu\|RL0.B!$ -[us[N jD555k 3M.\ T j2%ٹ!Vܝ!B!blz ,`̲_\,Bsv@ SO=)HG{ & 44^^^m;sL 4}&mMkYcS^^2]~ym4͵r&A" MI( @Hi] ]\\l߾ ŋ6lĀ&lSThT= +nDyC|( 1mm:_";;9˗/ۑݮ~ꟻ"B!BM g#$~333$gG ̣pԨQxamm\~BmTgkA:@SZW [9Tg9kԩ!J]]u*e 4CvvAqttQ;wllltolloB{U>[hYՀ:T!ڼ* $G[|͛7#22 Ehh(b1rssquŋ;z?wE!B!ށlس}4Yn:cώd^l}bҥp8Jؿ?QRR">> !Z-]6ͷnCzaZAZ15Ci- jA3Uv;rh3੬Dee%֖9CS}*6\oee oW^ALL ,--`$$$ɸz2ظ~ꟻ"B!BMPy&7bV+\}}=#ٳg@.#)) W\ѸT*msm ?t23W\.L&mS9 @f3y~W_}Zo&<==_|EҥK:3d;ژr}Gnbehӊ ^֭?O/-gaB!B1Ez]l1zrڲcWaSFpwwoWfddh nƙ쯲ys[뫪'''۩OGj[ZF߮(>>SQMuL=~K.+ut#>Ϥ0T2CSL`׮]prr»ヒAA gifa6E!B!te#*̐0'͋V:bGCCn޼ oW~gkkkfq8ׯ}m &Xu;PWWWe)`3ו3wƨNT[[B@HH@D"}]@qq1֬YO> HJJҺeF+ۤ.#}竣NKKK25MVlB!Be=lz<yP(sˌsrN:>*+h={@H=mA#G8>>j% k?,XnuHMMe^/X`"siC1;g̘ooL:̙xA+n$b٪ ,^3֭/L$j .DXX2dLnذEEE gϞ-7v .Q[ɓ'h feeZdzׁ6ibb΀>Lb=[/B!B!+ә# xnv(,,n*ppܣP[[˗cp8xw1~x>}xȑ#ӧO(cϞ=Xh8RRR/ //ׯbccaff <8vネ7b޽0 IDAT>EEEZNyy9~k ذaRSSquDFFbС=ׯ7gcˡC u!55EEEpttDll,)i&J|'HNN5֬YLdff |>0`miı7 qFb˗/GJJ c…L%Sk*++1bIIB\rO?4 >Nb&[MlӸ8$$$ //YYY(((G!C0ѣG4VlB!Bt#FIwo>c݆%K߇=BBBb;TU)55!!!=z4^|E2 ~)D"d+WD)))ضm s/BmݻӧΙ\.ǪUзo_ dwӧtR_-q[D ^\..] >L?X-RNN~GKx1sL|jۘb;Uںu+;&>V^`ذa6l.??:zV;U(8jjjM뇭!B!Ui dՖ?sykDΞ=iӦ!..ݻ7lmm!Hpddd 55-U(Xl1i$磼ؽ{7rss1sL}[Ǹq L|رiiihjHMM RRRp L<!!!DJ(..Fzz:vܩ+JXhfΜ#G UUUL@4''H:&-- ӦMĉeccL //gϞӧT Jo|}}?3gDff&rrrN0o<̘1#G ꐓ]vGAAΝٳg#,, zOؑ61h # x۷}ÇZ`aL|B!B!]Bӊ __j1V/=:*G޸p::lggg|gػwQ/O?ݻw3})0B!Q ‡sC۴ϣ: З"BH;;;~BH૯[gWP?o8/"Q^^2bXr%L}FÓ 3$ qB&u 8k׮e@6!GҥKXɵ^}Yxzz"77.^`iii8r544g?ok7-N ;eDff&^@^.<<|B!o߾۷/ƍ%KÇ]>\.o%EP ۄlېnj["wbmL> ] Ҋlذ >L>t'־eeeXt)rQ(jW544x`eeZvZ=oߎ>Æ SO=7ovZ]Li////$''pdee Ǐ;d$%%gԩիr98>!EmzPvbj!<9˱cǎήCHwbjPPP)AlB|'NԧP[[ P{V괺(Z^?MuVfݻvZ_~Ƒ#Gd}1k,HR۷oG]]'%P -cnuk:ϝf!2azETW޿QZ\c(\ 덠=nK+ HrVQy2=JffDAprs)9#tac/Q#tn^o=D` wo8sܿS9D6.)S`ر@cc#nݺ={m*񈈈;PQQ˗/c޽roh <:GHL&C||޽{5nxbL4 0~x׷ZNTT+++ܽ{ݻɓ'#$$"Ν;u ʕ+| ?3f ::Ψ]vŋpuuO?q ''Ӹψ#q>$$$ 11 5k-Z;w? ooo,\AAA}e( g_~zm[VV۴b`3RSW5x:u*F={׮]޽{u?1%x7y&vڅ'ObժU Cuu53 96[j9 2Dc_6o<):?y>! ={%jjjp=dff_~lڴ (((9spI&W^Dii)w^(Yܘ1cZOEy=1O+YYY8y$.رc8q"|> NaJ["##И#//yyy󃿿?QVV֥3x`DEE[nE|||L!( =;k ‡fq<A.b16p$ Jm9k]x* `݇qN=3cas\L}- OtoYg!B#pl~,R_64o?=$ j*-Fpp0|}}.+** K,Qh * &&۶mcFN:up0bl@pM:mH /wޘ7ol2ϟ?_m0) ___<3p|ץ%֯_vxcl $''Ѐkfzf \tyΝiӦXwww 8ӧOoSz˗/36ToYqE1j!`7|Ӯ !o\4烱3{9,"Q==iqennWފBoV#$<>~h hV233ÔPVRa[ rxyy!>>ӧOkTSdd$p p1\pb3f̘JڵKm*\p BDDx<$NY|?~@ll,\.Fٳ1c$Gjj*_@C"22B+VꨒYfA$ի8x jjjx|(,,ĩS+--ŋ/lڵpss͛7{x/]駧燏>Hg5xp8Xb/`XsqqqlgʕLHM{Zh;UbL_mnڴiDŁP]] / oryw_II ۇ 3g[-ԑ~ƍ-M6A(+}Fv?!q\rEEEP(D`` Ǝ Pd̟?yyyzuܹX,ƹsPTTsss!$$D>l]mlgUs5T>|8q }ATTN_n݂/sssO<ʔxyy1 nw Wv @0L!(AB8|n9o?gʊ=bB`\l!7"_4 v_eQ6''F7p׿qF$b|x~aiwnM](; <~k>-.#b'w{\N+ES-tNJV=tea۠AsW^[o6yρW_A$,K,A}}=ZQN_FU(? %qi7bM9F8rVX=zh֭[L&L333|سg χ?\n\lݻZ|,]H$q;)[Fwej*H4,]T=zׯ@ oÇl"`DGGh L$&& ?_ͱށ+ePy=u1Dlق#Ghi~߿g̹k=Lsa-Q[F{g8R}իmwĉLϟ;w?p>s >v|}}amm OOOܾ}e)?lquu4D9dܸqHLLDqq1X-uGϞ=L}1}t_|Ѯ !W$F8s8g1Ӹo\̼fL6 [T45:b6 u$F9uƦN] 1Sŵ0ǰ~jˎ^w#8u(?=9 [GGEӏgɇL~ cN1HIIi(..?j9SLa&ڰa:uuuXz5۸q-oܜRTc}_tuueM TGݼyyz}ߺtvGl{-Z?\cVvV]ZJ&O?mNoܸܜŰaZ_{)gMk> }_l1DܹS'W^eR'x4.((hM{?N5 .éSڕ0L!ĸ(T7BZ!w~N ? RrF] ͓I5WSՀi]G?o 0Xj('B*yV-5nv_fҏH%r^- *p˖-mzM׽P>z 6 Ք3fff-^Sϔ3l0C*bÆ !gB!EEw ?ҭP42 `Hw/]9WŸ[wZ*4DJQeYQV/_T7^"T7M"|wrKQs666A֤%%%Z LVGŅМ2P(ĠA^5#OH`MX1SO=)?ݯ_μn8us|( 1mRZA644h\Ei,Xh [픭~-k֬Q ir!W^z.hSWt֭[ij=z`RB|"SSSbi\o(Wb;ѣ&LPxyyz3gPM~M,H՚l-_۷oGvvvD5cWe Osr)));w.yf/? صkݻ:z&b\X۝hFt͉Nؑw >[ǣh,,8 "zܯAu42~#{=sќ9+n(k9KBT?2J [uRki 8::2#"뇝;w~p8qIIIp81bZ 2gش"@Ө-mTLs8-o8)G| Jku\b13W[FuTS}XC"?D}{lSTUF& =z0yuh:~dw_e!fԨQxNio\QQm [׳;7 =jݵ57oFdd$PbHOOŋTmƾ̶ToҫJMMEjjڶZu?SٳJlݺC2L!ĸ(46 ӘF8|hFP/l\}5UjR䲭TGs-Կxj)n_Z١1[+++tòϟGXXzj&X)Vhha}[λ26\Z9]㮆W^l%)[[;62U驧brرEQ0~U:)Qqǰ[>q4p ?w'}ҥKp J~D#!!}s[ou=Iڡ=u-++oW^y111Gpp0b$''y"IwB6c:H$dr$Q]+o ?o:\_C^τBلu5U U'!瞶h{R-$I˱8TT6EW89??DX IDATXlll0`dee3L&_15rA[λѾ@אrFuRoϨK%]]?Psw2{lp8r$%%ʕ+SͩM={χEoEEV^uAAA aaaWWW|xq}U de4=Ѭә?m9_QXp\b|Ƿ?((yݿfS4>maBqQ ̭2ka-iW 壖:|V?H﬿ ۬6|Q-ږqr9T 6OvmqI$%%bȑATTٳ]*csss 3*888IvSuֶm3V IIIZϋvV]rZY\.IQя>Wkǯ2D]Nl5 g?gCw6`kkj$md2rrr]v . @gyM|[('$wm&y|}}w1(|>ɓKtt44-o-%3!Jp!_<#/'W ,e^#goSrO}w.jGv"<"\QQ6Ov:֢3/ez:t(U0&rݻ17ohaGs@@ƍ:TחiE˜:>dbbotWܯi޽)XEES_ puuպ;3Dl[[[3ru-9ױ ꁭP`S>W^*KUii)>CmhV.| egg3u;OwOk:z=B1. dV{>78͗\ވ9 ƵR4?~Y \[FMYCԖѷ`ǏqߗŚܹsF.>V*&&U|(RE"BBB0rH]3Hii)3Qۏ]xyy>ʛ0f)) \pAg @=45jZy|Zui{^jlݕ)pvImm| XP8<7'^u[/{?킩> PZbx RS4|?Y@<3?7 ﭙ瞆.*DY:7³bubKC9pg={v/L$j .DXX2O<|5j ~|+G )xbСCL~3f0QUSNeꙙ, .dFt*`a|ܻw@S PH铮=ycotWܯr8[-ک}YMZV?ʼ^`AD"̙j9ݕ!gSԞ~^"khz`ճ5l]φh{^xN֧O6훘׳>L\-u&|>iϟ"ݻ7O-bޱceK̿!C^ !$/_ #=lٮ5z#| 9$?_s^O=q*rFȶ=2vpߘe~k (_WWZYYYHKKÐ!C7b߾}@^[[[TVVB$i-| amm5k 33(++χ' }F62Ν1qDKrRWs!`ݺuHMMEQQ dggqrx  adnH$_2+++1bIKqK]1zhUyf0Ebǹ*kk)TGڶW__olښɋ][[h 4Mrb9[픭~2~ذa8* >>AׯZZlc/_Ʊc lܸ{vvv(**x3CϦ={h"p8_~A^^ѯ_? ~l|W߿?,--k!00YYYFll,sgggرcO\} u=B1> dV)ڐ&nCiI<7;=ڧŲKg哇1s p2Z >cYիoٲ}iuӧtR_-q[D'e2c]޽{>}/"N.cժU۷Qm6D"pD" 0@'Ūh|i*0zXSNssm| PC27ϔ_?Foj1L!(MXw V>}vY'B.oD] ʹqrῸduN^x*=,\ֈZ1JkPx.$R)l+Ch?9pNNT?Z̟?3f <==؈7ob׮]8qVZWYiii6m&N666dxpY>}Z Nŋ@vfffK+$Jh"̜9#G999(+cP(HII'0yd@$A*عs'3Uk0o<̘1#G ꘙUF.cѢEHHH@TTz++'6g.hlݑb ,i0zhW^Ů]Z LՏ544୷B||<ƍOOOd2cǎHKKcOgS~^P`ٲeHOOǤI>rdggc̙3Iؽ'N@bb"w {4hgggx<}rzsGG7C}~d2\_gxz ]tA~0c |'$ǏG`` `ժUj(..y^QQA-iDDDDD d{Gà7AAAP^蚨EΉ+:CG7F< @~;v3^ 8=߉,|J۔IvUȹTaQ5k׋<!])P>(iR9ѣO|#6e^4o,yi}C|3XL Gv6LSG/`#XXibxE9ܾغbB}1frO mltcnq79PO+Wݖm۶5y=++ >}T*RSS1x`$%%!""j(((޽{ߢ̥-[ Ž L1c`ʔ)Zŋq!]'OlRL&CZZ&L(L&>}k֬;xb <馛iiiHMMEdd$QRR?k׮Ç'v?;sw~frL:ǏGTT둓o[nmѱ[?(Jq7n"""p1]KJJ‡~?]n'|SLp tvˉ9~iZρg@mmݲCŢE[nł i>m4̞=_yիW_!..sA^PYYt|g06u_غu+3Ƒ#Gf}1=4BCC1vX;_|>ѷo_w}0H@`ٳHNNF||tR$%]JTbȐ!2d+{.?zmRxWٳg7hRO?4ŋx7E]*7Dtt4 $$>( O`ߏ"VZ6WTbĈ>|8-[/bxGp]w5y=220`nLÇ#??h4ٳ'ƏF `֬Yv< :߿JHHH@>}3A#==ΝC.]{キn 6 ,L&h?QQQ f+wR LE!$$wd2qt:;#<???L ?JKKl[~=֯_KBTb̙?K`ԩؿ?^y&8td3ٳg6n܈?L>kx ɠ0w\;f믿[o$z?FK,id .f0`zBcOk| ,_%IB@㥗^r8%\f͌Ԋ ujk;Ntf=~wz5\V5PL:/{WѕE_Ps~D/{P7I&a/ )W۽3[a ]F#((ܶkӚ~/h,_]^O,W@6T!~w8fuuuB-FHK}>S 6 ZQWW'N[n8Xqx5_u d{W݀r -3@&d} IڞzqdUXZӞiEjvUJԻwo̟?2 ׯGFFΟ?o$-- ӦM4W믩7ي-j^ cƌ [jKXfjOGOsmj垔Db{Zs9KKKQZZ*]M/rujcMUTT~?Ǝ Z Jd$''cڴi(,,Ă pk'fMc^MDDDDD FC=2wB Ӓׯ[N6 =;wN }׽y>=̙3!`20w\>|n9cy RpFxrJ|-jG{Xf O.\[B{Zs9!:Bwy'222;ϝ{[:~Ӗ׫o~m$&&W^$"""""[\ܜRK1mαq~\HlU;;T&pL0Txj vk7|rjqvvW8K. )El`Ta=bZ{ϩHKK`YسRw?v7欏T*;oFdeea͚5xgqw iAp77[Gk! eOkKqx_u d{ 6gۼ6rB"T^M' &?Cz5)̷ xDD 8u{gܢ!mK k?a9L}.())IIIi4;^UU<@>}nZ5XìZ_II @h4ILLtk׮¢On]ܳ]vuMXk;900>,o&^}Ufbܹ1g'>>^썟Ƭg򺚊ĝ7x"^|E+ Xv_pW]ƿ=9Oʮjxap!-H0zǁ*rMNvMz^6eL ʿ>_vرc[4-23Qcn  Ř1cDk_kZ\\RRR6lhb~z[fر? 7\ck/^f: JuN i%v??3 D}}=-Zdff`Ǐ' ۬O=lݖ|hz/}5mb_h~ADDDDD]NVg66uH2~j<8:s {~ {y yP͏o4)~Mv?p9y#qݤذNAAAK3**ʥ}z=rss)))vg&&&YnoW`` fo&Ν:,9s`ۚ~vC"k֬i6l?cMrc̙dx' w[n%gϞ& 3mE///<͞XA[C֬YC }̙&{nMP`Μ9MORRn&lC g8qmz͞=i`[n ^WWW^yK.bΜ9Bv[+--ŵ^KbӦMBBB҄{&dO^^>kC… sN8p6u_L<ӦMCvv6233cСBwx.bC@Kkz]@+--vDzJHuQ]YMk4dw+'G[;?G@&oE *qs5r~Vs8[nԩSq5 ""Bȣ ++ >h֭[>}`ܸqwih4bɒ% l믿$''#22g϶پtR"**iPk׮]?>))).}] Xf*6]rer_ƛo$4> =zhvƠb ;=zxŊظq׮]1cƠG& /F޽ 5~ĺ^mg\CRh4_ ++ _~%Ok3fmx?ɓѫW/is>c!+x ,]9r$F)l;y$|Au_4HHHpӾ/͂5ź8/1ǡ'_e d{? d1xd2^^jǦ(ބ%iQ*fwJ;w\wcFR(,\7MZ] 3L7oM#F &&5x饗)S{PT(..ơC_ĉ1cF;e1'xiii0aa4qIZ {\YȞ={p]woDjj*v ___F\pطov%|ܙJ7 8r9bo4UUUYf!-- _=Q__ӧOc͚5ؾ};/^R]bO]]qu]7n pQYٔÌ30zh\fee !cy?x'|l{,_C ABBf̘{"++K{j<裸{0zhYYYXf ~՗Gy3grnt1 BJJ  R N3g_Ezz=bC/1KqDDDDDt$<<ʛ6Jf>6 uo] >܁-,_qqq8pΝiVZZ̙xcǎnխ>RRR^}U3F/:#.H1PyC\B0z]3ɨ :mEOnlxx8V\ رc^x^ F{L&Ǝ+<߸q#ӧM6㴦h4?~>>{ 3SSS!H\:SPUUB &VXX  B8ݧ3{l(J7 V`ɒ%ضm[KN1MDDDIu %[RRlyG)3\uY:uJx޵kWe*sG.7o`} ,X|['44,/1͖!""""H duR Vsooo'N@ee.vF߾}[vUSS#@||r\ciZ⋐d#Gnن8|-eTWWCP`ĉi[rDFF{3<#'8G ;-5x`l۶ٟ`=؄\R9Q=zUVVb٘;w.FPT4h 3gXbT """p= 1bah|`wFkpAEߏzHR 6 ֭sS;,#FXDkYxBDDD9qG*-- /X\8p 1cƎ~ZHTTz!۫k?}Ȑ!±f@EEN$&&BRaسgK8y$;=z`ʔ)6裏Xwj1b1i$\p|:NF2K\׷X\lY!""""j-&"""!33K.Ō3Yqqq9r}ۇѣG ?ƍCZZΝ/i[&aȐ!,sssݐ+U֋>6rۓhĪUj*\.O۷C"s[)++l< gd]Ŋ`…-'q޽ `m8-~£> oooL8vjmSEc4kwj]vIYӈ ''m'ADDDD8#*wQ;gZpEHH]._[[-[&OܢcSMM /_n[N9v-S 3ۺj$]sȧHCd2wqaϞ=q 7s88q1eʔ6YLFk׮? FS??ΝCff&@u]ŒpGr9FcN0Q'㭷!H>|8z!Ν; s琟ѣ[tt@߾}[JJOONvm?K.3gĴi쎁@̛7qF6Q'6` 0EEE8x a0޽{#!!A(?niu}5[_ETT$ RSSae̚5 jUmu*lذr qM7᫯ ~axg!J1{lL:(..70`(JN|v?֭kQK1MDDDIcH$j7nò6mŋZ~ˑ>{ŭ 2[%lN-[xԂ ֬YSB*;ڵk!?6mBmm-ΝDEEaڴivk)H.]0}fە@6DDDDԒ%Kj*1C\\!ˡPXX#G`ӦMr[; ggff&P*8p`s8{d F`x(..v[l߾ 7܀Ç#** 0 (((qFDDDDDIn9t"""""""""""\ hM IDATȣ1MDDDDDDDDDDl""""""""""h dGc <DDDDDDDDDD&""""""""""@6y4ȣ1MDDDDDDDDDDl""""""""""h dGc <DDDDDDDDDD&""""""""""@6y4ȣ1MDDDDDDDDDDl""""""""""h dGc <DDDDDDDDDD&""""""""""@6y4ȣ1MDDDDDDDDDDl""""""""""h dGc <DDDDDDDDDD&""""""""""@6y4ȣ1MDDDDDDDDDDl""""""""""h dGc <DDDDDDDDDD&""""""""""@6y4ȣ1MDDDDDDDDDDl""""""""""h dGc <DDDDDDDDDD&""""""""""@6y4ȣ aaa6mRSS ^>$8 ?EKˠu!$/G*֣J1[ y{ۼ}Cϫ/GGB(yBAނ:{JJ"ȩ֡/b^-/Zɥǹ55M%il^dR@,;Uխm:Qs[ ;66VxܩSjG+M&dᬮV#Ji= f3NS] z=jM&e2z18jF㭓9SWk{" vހ]%(U*0*8BPd?_<Dٌ*pz3B DBC0vOQn0_Dzm^{[,J% jkaM16sjjr9  .;RyKm|VbRB*E~Pdk,:~~"""""""""O@vxx8K &`(,,?BT"jGz)l['sp6И2.(D?_l:e4lSR=%e=rCCљn(['sJki9jw5 DwT"A]}=>3Rl+.cbMaWZj禿0( d=՗gSx{@ewr෿BB: KN\m}OI)ƆcjD n oQJ"""""""""OJ%rK 0o<"!!{vqGsH@__ZHE%]l]977Z#""""""""Ѻ).8s8..ax戦jS; c2SöDzq J128>,* *KcV'?;n梹zV:5jHAٌUUȪ^x4Z d V׫@6]>t_~>z].-zZe#w&_ȏm>T*-;Ε,H Qf7^x2)Nuz񆤙WV, \^1ZTjBgDZ*Kj$V!uu,;pzrQ@ݻ7pv''$$ !!"~#F`0_ b60n,R0Uـmj{V<,!}DmLf.-TP`Ӳ-5%}3tPq"ٌK{ fR*ŝ.uk0kA¢~Φ58W[-em]oϮR.jW.ǤfQ\ ݥ H8 U)q[ptRPsXOѥ|AJB|XVe?F Ll8Zaɕ=Rp:,}ee‡Cagؐ`aL'""""""""5|~AVDϞ= L8QQQ,)E~gw6ET.aI$=B] B5g67`*C]}=r\^5cwI:v$̍Rj!ƐKѬ*>{Nෲr G w *  zJQ0[,VV!R)BT $9nȽR lYbBp)7 nkz!Z z!(mc@ /bJx(2_K ~$_mn4MAODDDDDDDDԞ>s ^|EwQUǿU2¬2DDPA%3zZ^ܾWTh{mJk"((j#B""4Ґ!@!GLuBRE*RkU>g}k=#1bDcRSLt6tdbLTjt;o"n$?_(ZyH6V~w6 hlK]<?ID6' 񦋿?fnmɉzF?yH6S 0HO׶lY/MwqyY8]Yerpf;Xfb+񛪏]g\hd9sPa"""""""""#&~~nfJTT=zkײzj,l4xlFG?$PooJ,VYw&etpib#0^At%o9d9/D xqҋJFoj Kؐ{c` f޼yӧ^^^$&&ȸqHMMM)""""""kDt) k!,, e˖s4"խsL&-g'Yz5ǎח={2vXL&7p._%E r 'N`s999Xtvӧ3gW]uU4h\r 'OdڴiW^ͷ~1 z|TVV~DDDDDDD.vJd ::|rOvZ֮]ۦ>oG5Hbپ};___t޽{t]_#%[l63tPLJJ qqqQ\\̉'ضm~)MҥKl޽;6lhyFFӧOwm8LZZC%!!ؽ{7+Wt)YXX.?~￟&6l/ׯgܹi8O<3gRQQwc=F)**?棏>SN̚5^zQ\\̪UXd 6A_C ᥗ^_dy睌=hJKKIOOgOkWh|o߾\ՋHrss9u۷ogƍdgg*n ֬Y𸔔x ?r&={6'Nkm>DZZcǎ%11ʡCX|97nd <"z}j]孷ޢ[ndeeq=`2=z4'NCqvʕ+9x`9BBBO<'Oˏf%""""""r1R"PBCCի'Oo[/55~GGG3fƌ|o|^z%͛GBB3g_nt\pp0O<P[wW^i2WhW^!)) (ONuu5SL!""M w}:Mt1z>ԖooyBB 0; &8ݻ+|gpWܗC___ϟO߾}|ޯ_?;rռ7se >ܰD;_ ~̟?7F܈sx\][MM Gq{\"""""""#%[l6cZٳg{!;;Rٳ'\s ̝;3fp9sƾBΫJ||<gitjÙ;w.& ·~Ν;$11 &͝wI~~>˗/oǖ-[Xz5'Nd„ |w{g&<<Ƽy=}`2x{d2#P^^kFee%=L0i"&,,{_S\\Lrr2iiifMѣGٴiS F\1_#G'Xf ?3УGRSS[R[ob8\a/W=O>=})VZɓ''--{fMqռC=édǎdggc4INN_~M=lٲ)SJo(..np̰a쫱/x"""""""%[aɒ%k֬a͚5,ZNʜ9scZi&mBBBx1L裏o߾|'ꫤ0m4֮]Kaaa?q饗ēO>ɽk_xWsWl2v0s} .d۶m3~x +Vߟ3fн{wX,Mƍ;w}֭[̘1-[]͕uuތ38vX/^{#G8hFԎQnnnh-Wݗ+þ}2zh9sf/p+x&W~ywP&MĎ;7o^|Nڵk >s&L@LL |_}ǎϏ=z>;,Xоx0c{p1㏝ۻw}1='MDpp0z@iiTlfرMUYYɳ>b!,,-1k,<[o4&WsUˋp}UWWpFIj*z\͕󕘘#G%XV֯_8ofL&P݅rsXW^k+\}]qk]BCCgiryVV֭k;+;PVVFpp0r gf='O2gֻ̙ogX/RuuNf3]y@m/px܁8uqS233Yx1P[w, ,>kxEDDDDDD<٭pWЬ㽼<{###1 @͏?Y9m&00~j]Z?1V~gssee}#@ww| >H$33uV~%M&7tP[e>U\u_m}8{DN]-//ц簽u҅ `6Yb͛7O?;̙3ٺu}5ggX=P޽3g&j֬YcO<)}ZZ'O'??|{"%{Ty\O}\|A>ƌf}ҷo_&OLNNse޽ͺѣ.[U+a2+ݝtnrs>f3V{cJJJ_ʬYfر8RϧDv M:ɄjGeϞ=MW]]}#k2K?e}?$%%vmlݺNqvVv~{%_f…tޝ^z1x` 7,X{w'O[n]a7ߴ9s5Kޗ+=;jCԕWW?d2k?~AsRRRH=h@m GI- V/w~JZZ֭#77Ȝ9s+lfU[kJFF˗/穧;n8o$99+VD$?OΞ\_o"""s=+jb|_j_5.-`Y S%\Ң3G= @~&+,,z ^y^|El6<u8Bu>:o_W6;ˑ3g__9X֭Ʈ`ժU-^Ν;wnQj}9˳' $66awOӚ簽n-"""""""kɄ@Ncƌq)uek5fm'$,,^xؾ};}P;F\sMs]7vW_ر}_^r p՝:ubȐ!|-̙3Uَ]vcǎ-)/W>?#Pt5jyx/55ե}BK뾊Ipz#F_7 0"%[, b/P_yGZ'm5>S{GeMHH`֬YJKKcذa,_]v^u5kqqqw87fd25<%%믿M֕Bpuƍkv 3g:M x 333u-`0a绍F*++퉼חٳg7ޗ+իW_?#6n {9o?sM2BrsX_{ݗfcƍgnW`llذB(""""""rQf-b {1L&-O?F.ƍ`~.kv[n媫`deekVVVړϋ/ܹs W^a۶ml۶\f3IIIߟ޽{M8ԩo@VVofJ͛ǢE=fͲ qv| -Z_MII ɤ7FԔGgðaxgٴi}~ii);wl2W K`.G6o̜9sw2dLĹbΜ9f, ?|:u222_ʔ)Sӧwu/np0azE^/h"˹mhWRM:2 l8xo^Szҥ;+W2zhzA@@@Z̟?޽{7rsK/E߾}IHH`̙ -ZСCILLt%Ӹ9t`L}ر oܸQ"<7фqw6ߗ_~… ȯ-dxغu+'Nk׮fΞ=ˮ]O䮻jQV{ɓ'J}~\wu :Ν;b8p͛77ڔ[n{NW.^.d.mFFF] L>;3QFCii),_-/++zS2x`BCC=m:wq bȐ!9r~UVQPP0 7@zz:-yǸ뮻5jQQQڿȰ6v簢iii;$, dٲe|Zu+qż{W̗'ڷoSNeܸq1]*77={_{UDDDDDDģbccm2d//"_}U;GYҘ5k[x1:ubΝ<f"&Fɓ'n޼#84TDDDDDDDD61b ,_^XaԩS1L]B%"""""""rQPliM61jԨ9{-[,eر_svVDDDDDDDij(-"r1fƌd֭[Y`JDDDDDDD)-"r|XV.R:uDhh(o>i&l6+"""""""r.Cll&""""""""""ⱴ٣x4%EDDDDDDDDDģ)-""""""""""MlhJdGS"[DDDDDDDDDD<"zņ ذa_vJJiii܍G#ޣWw8""""""""n ѻwoC>}ܹ3& w޽!o\ZZ!!!矷w8 I}zO߯k1׮wx90nCDuH@h("N<ľM[8c'6B/"""""""ƭ;|Н9o$233ȾL^^fuc~d||EFA9'2\5]Ι3g0L"+r)^u2229S, MGՊ4%[W{2)9BDDh4ԧyesRc6DDDDDDDă5Ê+HOOgݜ>}9spUW"+rY-[ax.(2!7ހba7g̨fw#VA[TLz ܑK^/rC"""""""ܚ^v-k׮u%DDă\q>l ʚuζ埒g.aܬ|"""""""1nצ/O$w9lk{QYS.FϏol6EWROErxH@zߗoo|Fʭ5VUQ\¦y4&#Bه`CY~*,fz jN 0<2>AD}5)X8XZƦ<7OT7_] Ud>qnp|}59]Y=7k36kq^|9lݺ~zj ˖-+;wnꫬZi߱,]ɶݻaÆFgdd0}fŞJZZ]vߟǏ_'`E&ηu]+Wol~}wy9}'*"""""""2]?_0 n檨Ȇ D}4=0"xI?Rx*Lzߏ+"xh6E%1ѥ]|5|s/$)I  >fPhBCX{:U-sQ^af~nȆ5޽L&L$ryDo&Y0:*gfbHcǝqn FIJJJ޽;twӧO[niYΝ>}:ݻwkڟۛQe+*pi*jLFo0k\_KCIRy//yhfPY9K8]UEՊDG?g4@$^=xcLw&ٓyUllU5>ތg|LX78;$b4lRjlDx3""PoobaUH{so d:w?;]E/8WT2~\``PX ) gFIXXќ>ݼy8nݺn>99g}19sP;>>C34:2p@<)**"%%qUW]_͏?X[#k.Ϝmթ#=[&M $&#GI_w\޿x6%Ѱ_JXm6^=xӕ [)9\䴟Oa{Al}^hNx #ߟ!TTÔ+C~!OtL&Lh0PYSâCG8rNi g]t~/dho/jeYϘ&m0pSB,>|i)l/dI j~)!]^>JK&ٞ2)))-Nd>}m߇7\>VuX,Fm5p@^x{W槟~bΜ97lKeEg5f-: iյ޶Ӈ}͠`՜$NK%A"""""""ۢDv;j&֙Yi{#(hSԈ0O4HbVWinOwz# 0FU 'x2 CBY{imPh^ u֝9ˠ}}@7NVVX|t"ǞĮ=1фx߯s=e333X,xyyѣG6mdo3xyyaxKd_LeEJKKYpa:| ӦM#&&={St#uI}{3M&G7&oo~޶}m1M]_}kg(ً/>p@F5&0|6n~SQI |FLU7\#(MXpPbnKk7e`H0PDݒWcUUMr_:jM?)A?:33bbZbu@:^4f[]2Q`DDDDDDDOd_c6o2P=2Hh{{1,,Ě{+e6U(-ˬVVWJsȮ$4kε^-ZO -:Ye}__q"d$z3qn& `00p@֭[4}1>|öy6LPuis//o+Ok7tut2}g_CDDDDDDD|ıtƹ=zp z聟k֬aȑ 81P[ٞE \:~,/]NFVf `K ^Dϋnbh.nZQf'KG?z=0/poґy8Dk#1 Xm6!$q^rIk$jΜӓulXm6{gOeM9''cFתs3SsT*&//,Ux\2F&wN/|׉ڙy||S"j-u.I·)Ve.+gCn^ܙO@|F.kPvƌIlp+r^ؔXx{dBO=lO猌 RSSI`Zٱc==p@JJJ.ؿ&ÆԷw?qҞ6/#v~݇_٣ xR^\^l^_( zI-_6kj ɶn??ѾB8O]U[~3p-pvx Y|19QY &C$q'9'sd|}}ݻ7理AˊMd[_*xXcAǓRUVg^&KDDDDDDDRV?/X?ťeP9qB4CWq8F]R: Ŷm8uߟ\N>}++ vMO\Ϧ%eӒ:=fФ eo-f  !?" , KU_ZCY.UDDDDDDD.~)S 6^f/a{۠h䶄՟)>ip&lt @/77X|)z `G6ͧ7S0IDAT :^ iX{|جs\Ϗ/ c"s|7nLqn}W=zl߾?ĵ^ ޽{KSN8@LL r~&y k^oDDDDDDDăuEvPP=Ukm5a.2Çn:w?pc| &Y];]^++ 沰P8XZF cTd+_RɊJ*kjOpj4Ƴyܚ`nt6 @@. jkhהCee!$T.lgftT&grb/GsD|M&fv2K)h$M:2>KJ'(3Ldbv|w6cx opPÊ9nƹCLLL %%% ۶m#--Xd?5,"":88Gr Hߺu+W]Uyʢ/d'2A!׾GE6hu^P=0I_09F\J2q)N(+,ቈpk";88)S8l;vl7n(ٛ104~LWjt;o"n$?_(ZyH6V~w6 hlK]<?ID6' 񦋿?fno0D񡦉R'uYT̛GODϠ@z:fM]m\hd9c Pai㜞NrrmqΝu- ^} &;<Р7|s=43i$C\\O=T OOg(R}mv=_/Ckp똮d~UlߐFv{lFG?$PooJ,VYw&etpib#0^At%o9d9/ xqҋJFoj Kؐ{ctG^G3$,V osSTl_u\aqמbkA;(8_3&Vj W\? %2RVшobIk0 l/pF]ĵ1Q.*&J5xsYX(Bjc_vVDDDDDDDDD~+ȖF#BCd{zq ϹQob 3h2c4Rbp UXv x,m(""""""""""MlhJdGS"[DDDDDDDDDD<""""""""""є 6ɶロG^DDDDDDDDD<"--rss;:u*{/3f ==#q,..޽{ӧOCΝ1LwcN7ۗK/:t@XXB233oٰaBܒEKlq7Dffٿb/2&MonLj.&M@zz|6qW7Idd$Ç[o'OlDDDDDDD~͔Ξ=}QQQ;Er]s5lٲvFĹuΜ9d"<<}UWWs;Faa!FXl&99 pSZZ[UQ"[D`0p-p 6o8Ê+HOOgݜ>}9spUW5}㏳k.A˭;P"[DnСt˗SSS8vZ֮]ۦ><=??ᣏ>`00|p%EDDDDDDP"f3CeŜ8qm۶駟RPP,]ɶݻaÆFgdd0}tWކC1tP'//ݻwrJyaaarq~***N:1k,zEqq1Vbɒ%l} 2^z _|sw2zh)--%==˗O?5{]u}rӫW/"##ԩSl߾7ݪo6JJJXfRRRx7ʕ+ԖooyBB 0; &8ݻs%g9r\q_z}}}?>}my~ׯ_Vjۛs2|'&&Hiiilw</?~oh\C_DDDDDDDEV0XVÞ={ζٳ'\s ̝;3fp9sƾBΫJ||<gitͦ꫺Ù;w.& ·~Ν;$11 &͝wI~~>˗/oǖ-[Xz5'Nd„ |w{g&<<Ƽy())i2sL&/QQQ{xL&yyר䡇"88 &8Md}݄w^kINN&-- ̴i8z(6mj跜+ `ȑaQQk֬zAjj*fUqzX,+U''O:ŪU8y$񤥥q=4+ywzÇSYYɎ;h4L~<ϡ' 1ر#\Jd’%KooԶf֬YâEaԩ̙31VFAmܶ !$$~Dyy9>(kp'|«JJJ ӦMcڵ6O^z)III<{ W_}5W\q˖-cΝcj8׷pBm@||<Ǐ`0;b 1cݻw d_aaalܸsmݺu_ό3زe\9_]wP͘1cǎ5h/y9rd㌎fԨQ@涸r}9۷/G ++3g6端7hrw}ww eҤIرy5Jwԉ]6:ϝϡ'ر#СCӧOdɒ QDDDDDDģ;dR޽{l_m&MDpp0z@iiTlfرMUYYɳ>b!,,-1k,vziLd:d]>> f…gժU@m;죭\9_9rQje-od2Gp}9 k5Bnn.8.34<++u5ܝϡ'֭ӦMcڴi~\q7n䡇_8\lwkXB͙:ϕݵ3|p"##8p L֭[駟ZP4LtM@mɖ۷7\Wq}9Kbgٳ;unh.w< 222صk뮻Zx4a@{fΜ9L&Yf [nԩS ~Jɓ'OUj'??ߞnnygg}_ec̘1a6۷/}e0w\۬k=ھqeZo[\/qrwJn.w<kr2`>V} """"""kDv M:ɄjGeϞ=MW]]}#k2K?e}?$%%vmlݺNqvVv~{%_f…tޝ^z1x` 7,X{w'O[{wSeq$#D Q MH%abXe jI ØmlsQk6RJ7D|+ ,N5 x~0s8~vuu{_]F 㯾jn-:/3sp)7x~N-HއSʼn't=(88X .Tccd CG*==]` OA-I={D k̜̜9Ӵ~333UXX(i0?s ㄶ;~GGHA\`L^`ͦ:mݺUk׮5҂hժU^Xh%I{)s40O#w˼ڇEWTTǶ\wc>Jv }"P۟񺠠 -X3OF˗/S4[JUWWRC*++f;wǶ$c g}9m*X/OΞ=_~؟)`9tիڿOʕ+r;'$$pYF0;%%urV\w_T\3 1󩹑Nyyy#tg(m@xx:tH1+22Rׯ_ӣǏO?4xz!lt͘1m<`>q׾O4^pHȐ$}>={q*S711QwqOm^fcǎIt6̓ɰ0!0eA__v$)##Hlܹڼy}oS8Λ(3iѢEUii/^춽PYYY:m󎺺$Iy0m4*(()))ZrP*8+((\M6^zQ0mqYF~MIvwk-[}X__o޼y ###~z?C߉d>t6Y ݻUPPP9sTUUe<ԏ?8ac`*أ٣rFS{{`( @GՒ%KFoss/_.Iڱc}v``oo.\Pee^yZ---jiiѹsdXtJr8>>^>$nk׮].z7TSSPK*--5R l .WMM8˗/+99YF1~9٩^iiiҫF~wwN:v f$XBEEEjooeӣ(eeeG}ǹ̘1C>$oѯu444())IAAAz뭷T__.͜9SRkk״2fˬ}wUbbvڥ{ל9sc[oUWW׈\wc>4KXXq%&&y;::_\w^Ж-[&ݮn+!!Aiii~UWW+>|r'piΝ;SСCzG#ͦ72OTQQ_|Q0D wCڈnIX,믿zfӇ~bD.׌}6|+Vh޼y7o b4|M(,,L˖-Ӳeˌ3ghÆ n72#99cIm6í^)GyΛ{*77WwuBCC]~``@;vPjj@2sVUUi֬YM6(33SvۈAZwc>4Kxx=.láiڴiJMM5. wym߾+l9kjnn#g3hݺuZx"""FcY!k׮սޫ (::Zr~=zTŋ=bhժUӧO>g׮]SyyJJJYfҥK1 h܇W^s=B+..N:s>c9rDK.o|OXwczk׮iʕJOO7dZ*áK.駟~Rss=CXV x*IReeI),,Tii$i۶m:|$hjU||N:ߠ#1 TQQMMM<)""Bqqq\@61Ztbcc%IuuuFc=[(_N԰rdFL0}ݧoɓ'e'ժ|eggK8I-! dS^^fܹsGd8xpB+""B!!!x~544Qw ZDM~bF dl_# k~@65F dl_# k~"-IENDB`color-spantrace-0.2.0/src/lib.rs000064400000000000000000000252130072674642500146550ustar 00000000000000//! A rust library for colorizing [`tracing_error::SpanTrace`] objects in the style //! of [`color-backtrace`]. //! //! ## Setup //! //! Add the following to your `Cargo.toml`: //! //! ```toml //! [dependencies] //! color-spantrace = "0.2" //! tracing = "0.1" //! tracing-error = "0.2" //! tracing-subscriber = "0.3" //! ``` //! //! Setup a tracing subscriber with an `ErrorLayer`: //! //! ```rust //! use tracing_error::ErrorLayer; //! use tracing_subscriber::{prelude::*, registry::Registry}; //! //! Registry::default().with(ErrorLayer::default()).init(); //! ``` //! //! Create spans and enter them: //! //! ```rust //! use tracing::instrument; //! use tracing_error::SpanTrace; //! //! #[instrument] //! fn foo() -> SpanTrace { //! SpanTrace::capture() //! } //! ``` //! //! And finally colorize the `SpanTrace`: //! //! ```rust //! use tracing_error::SpanTrace; //! //! let span_trace = SpanTrace::capture(); //! println!("{}", color_spantrace::colorize(&span_trace)); //! ``` //! //! ## Output Format //! //! Running `examples/usage.rs` from the `color-spantrace` repo produces the following output: //! //!
 cargo run --example usage
//!     Finished dev [unoptimized + debuginfo] target(s) in 0.04s
//!      Running `target/debug/examples/usage`
//! ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SPANTRACE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
//!
//!  0: usage::two
//!     at examples/usage.rs:18
//!  1: usage::one with i=42
//!     at examples/usage.rs:13
//! //! [`tracing_error::SpanTrace`]: https://docs.rs/tracing-error/*/tracing_error/struct.SpanTrace.html //! [`color-backtrace`]: https://github.com/athre0z/color-backtrace #![doc(html_root_url = "https://docs.rs/color-spantrace/0.2.0")] #![warn( missing_debug_implementations, missing_docs, rustdoc::missing_doc_code_examples, rust_2018_idioms, unreachable_pub, bad_style, const_err, dead_code, improper_ctypes, non_shorthand_field_patterns, no_mangle_generic_items, overflowing_literals, path_statements, patterns_in_fns_without_body, private_in_public, unconditional_recursion, unused, unused_allocation, unused_comparisons, unused_parens, while_true )] use once_cell::sync::OnceCell; use owo_colors::{style, Style}; use std::env; use std::fmt; use std::fs::File; use std::io::{BufRead, BufReader}; use tracing_error::SpanTrace; static THEME: OnceCell = OnceCell::new(); /// A struct that represents theme that is used by `color_spantrace` #[derive(Debug, Copy, Clone, Default)] pub struct Theme { file: Style, line_number: Style, target: Style, fields: Style, active_line: Style, } impl Theme { /// Create blank theme pub fn new() -> Self { Self::default() } /// A theme for a dark background. This is the default pub fn dark() -> Self { Self { file: style().purple(), line_number: style().purple(), active_line: style().white().bold(), target: style().bright_red(), fields: style().bright_cyan(), } } // XXX same as with `light` in `color_eyre` /// A theme for a light background pub fn light() -> Self { Self { file: style().purple(), line_number: style().purple(), target: style().red(), fields: style().blue(), active_line: style().bold(), } } /// Styles printed paths pub fn file(mut self, style: Style) -> Self { self.file = style; self } /// Styles the line number of a file pub fn line_number(mut self, style: Style) -> Self { self.line_number = style; self } /// Styles the target (i.e. the module and function name, and so on) pub fn target(mut self, style: Style) -> Self { self.target = style; self } /// Styles fields associated with a the `tracing::Span`. pub fn fields(mut self, style: Style) -> Self { self.fields = style; self } /// Styles the selected line of displayed code pub fn active_line(mut self, style: Style) -> Self { self.active_line = style; self } } /// An error returned by `set_theme` if a global theme was already set #[derive(Debug)] pub struct InstallThemeError; impl fmt::Display for InstallThemeError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_str("could not set the provided `Theme` globally as another was already set") } } impl std::error::Error for InstallThemeError {} /// Sets the global theme. /// /// # Details /// /// This can only be set once and otherwise fails. /// /// **Note:** `colorize` sets the global theme implicitly, if it was not set already. So calling `colorize` and then `set_theme` fails pub fn set_theme(theme: Theme) -> Result<(), InstallThemeError> { THEME.set(theme).map_err(|_| InstallThemeError) } /// Display a [`SpanTrace`] with colors and source /// /// This function returns an `impl Display` type which can be then used in place of the original /// SpanTrace when writing it too the screen or buffer. /// /// # Example /// /// ```rust /// use tracing_error::SpanTrace; /// /// let span_trace = SpanTrace::capture(); /// println!("{}", color_spantrace::colorize(&span_trace)); /// ``` /// /// **Note:** `colorize` sets the global theme implicitly, if it was not set already. So calling `colorize` and then `set_theme` fails /// /// [`SpanTrace`]: https://docs.rs/tracing-error/*/tracing_error/struct.SpanTrace.html pub fn colorize(span_trace: &SpanTrace) -> impl fmt::Display + '_ { let theme = *THEME.get_or_init(Theme::dark); ColorSpanTrace { span_trace, theme } } struct ColorSpanTrace<'a> { span_trace: &'a SpanTrace, theme: Theme, } macro_rules! try_bool { ($e:expr, $dest:ident) => {{ let ret = $e.unwrap_or_else(|e| $dest = Err(e)); if $dest.is_err() { return false; } ret }}; } struct Frame<'a> { metadata: &'a tracing_core::Metadata<'static>, fields: &'a str, theme: Theme, } /// Defines how verbose the backtrace is supposed to be. #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] enum Verbosity { /// Print a small message including the panic payload and the panic location. Minimal, /// Everything in `Minimal` and additionally print a backtrace. Medium, /// Everything in `Medium` plus source snippets for all backtrace locations. Full, } impl Verbosity { fn lib_from_env() -> Self { Self::convert_env( env::var("RUST_LIB_BACKTRACE") .or_else(|_| env::var("RUST_BACKTRACE")) .ok(), ) } fn convert_env(env: Option) -> Self { match env { Some(ref x) if x == "full" => Verbosity::Full, Some(_) => Verbosity::Medium, None => Verbosity::Minimal, } } } impl Frame<'_> { fn print(&self, i: u32, f: &mut fmt::Formatter<'_>) -> fmt::Result { self.print_header(i, f)?; self.print_fields(f)?; self.print_source_location(f)?; Ok(()) } fn print_header(&self, i: u32, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( f, "{:>2}: {}{}{}", i, self.theme.target.style(self.metadata.target()), self.theme.target.style("::"), self.theme.target.style(self.metadata.name()), ) } fn print_fields(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { if !self.fields.is_empty() { write!(f, " with {}", self.theme.fields.style(self.fields))?; } Ok(()) } fn print_source_location(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { if let Some(file) = self.metadata.file() { let lineno = self .metadata .line() .map_or("".to_owned(), |x| x.to_string()); write!( f, "\n at {}:{}", self.theme.file.style(file), self.theme.line_number.style(lineno), )?; } else { write!(f, "\n at ")?; } Ok(()) } fn print_source_if_avail(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let (lineno, filename) = match (self.metadata.line(), self.metadata.file()) { (Some(a), Some(b)) => (a, b), // Without a line number and file name, we can't sensibly proceed. _ => return Ok(()), }; let file = match File::open(filename) { Ok(file) => file, // ignore io errors and just don't print the source Err(_) => return Ok(()), }; use std::fmt::Write; // Extract relevant lines. let reader = BufReader::new(file); let start_line = lineno - 2.min(lineno - 1); let surrounding_src = reader.lines().skip(start_line as usize - 1).take(5); let mut buf = String::new(); for (line, cur_line_no) in surrounding_src.zip(start_line..) { if cur_line_no == lineno { write!( &mut buf, "{:>8} > {}", cur_line_no.to_string(), line.unwrap() )?; write!(f, "\n{}", self.theme.active_line.style(&buf))?; buf.clear(); } else { write!(f, "\n{:>8} │ {}", cur_line_no, line.unwrap())?; } } Ok(()) } } impl fmt::Display for ColorSpanTrace<'_> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let mut err = Ok(()); let mut span = 0; writeln!(f, "{:━^80}\n", " SPANTRACE ")?; self.span_trace.with_spans(|metadata, fields| { let frame = Frame { metadata, fields, theme: self.theme, }; if span > 0 { try_bool!(write!(f, "\n",), err); } try_bool!(frame.print(span, f), err); if Verbosity::lib_from_env() == Verbosity::Full { try_bool!(frame.print_source_if_avail(f), err); } span += 1; true }); err } } color-spantrace-0.2.0/tests/data/theme_control.txt000064400000000000000000000010570072674642500204300ustar 00000000000000━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ SPANTRACE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0: themes::test_capture with x=42 at tests/themes.rs:42 40 │ use tracing_subscriber::{prelude::*, registry::Registry}; 41 │  42 > #[instrument] 43 │ fn test_capture(x: u8) -> SpanTrace { 44 │ #[allow(clippy::if_same_then_else)]color-spantrace-0.2.0/tests/themes.rs000064400000000000000000000071400072674642500157460ustar 00000000000000/* # How this test works: 1) generate a spantrace with `test_capture` 2) convert the spantrace to a string 3) load stored spantrace control to compare to spantrace string (stored in the path of `control_file_path` below) 4) if `control_file_path` doesn't exist, generate corresponding file in the current working directory and request the user to fix the issue (see below) 5) extract ANSI escaping sequences (of control and current spantrace) 6) compare if the current spantrace and the control contains the same ANSI escape sequences 7) If not, fail and show the full strings of the control and the current spantrace # Re-generating the control If the control spantrace is lost and/or it needs to be re-generated, do the following: 1) Checkout the `color_spantrace` version from Git that you want to test against 3) Add this test file to '/tests' 4) If `control_file_path` exist, delete it 5) If you now run this test, it will generate a test control file in the current working directory 6) copy this file to `control_file_path` (see instructions that are shown) */ use ansi_parser::{AnsiParser, AnsiSequence, Output}; use std::{fs, path::Path}; use tracing::instrument; use tracing_error::ErrorLayer; use tracing_error::SpanTrace; use tracing_subscriber::{prelude::*, registry::Registry}; #[instrument] fn test_capture(x: u8) -> SpanTrace { #[allow(clippy::if_same_then_else)] if x == 42 { SpanTrace::capture() } else { SpanTrace::capture() } } #[test] fn test_backwards_compatibility() { std::env::set_var("RUST_LIB_BACKTRACE", "full"); Registry::default().with(ErrorLayer::default()).init(); let spantrace = test_capture(42); let colored_spantrace = format!("{}", color_spantrace::colorize(&spantrace)); let control_file_name = "theme_control.txt"; let control_file_path = ["tests/data/", control_file_name].concat(); // If `control_file_path` is missing, save corresponding file to current working directory, and panic with the request to move these files to `control_file_path`, and to commit them to Git. Being explicit (instead of saving directly to `control_file_path` to make sure `control_file_path` is committed to Git. These files anyway should never be missing. if !Path::new(&control_file_path).is_file() { std::fs::write(control_file_name, &colored_spantrace) .expect("\n\nError saving `colored_spanntrace` to a file"); panic!("Required test data missing! Fix this, by moving '{}' to '{}', and commit it to Git.\n\nNote: '{0}' was just generated in the current working directory.\n\n", control_file_name, control_file_path); } // `unwrap` should never fail with files generated by this test let colored_spantrace_control = String::from_utf8(fs::read(control_file_path).unwrap()).unwrap(); fn get_ansi(s: &str) -> impl Iterator + '_ { s.ansi_parse().filter_map(|x| { if let Output::Escape(ansi) = x { Some(ansi) } else { None } }) } let colored_spantrace_ansi = get_ansi(&colored_spantrace); let colored_spantrace_control_ansi = get_ansi(&colored_spantrace_control); assert!( colored_spantrace_ansi.eq(colored_spantrace_control_ansi), "\x1b[0mANSI escape sequences are not identical to control!\n\nCONTROL:\n\n{}\n\n\n\n{:?}\n\nCURRENT:\n\n{}\n\n\n\n{:?}\n\n", &colored_spantrace_control, &colored_spantrace_control, &colored_spantrace, &colored_spantrace // `\x1b[0m` clears previous ANSI escape sequences ); }