pax_global_header00006660000000000000000000000064130365075220014515gustar00rootroot0000000000000052 comment=85c1947f4a0a6b579a300fd3bf7a4aea066ee4e1 twitter-6.1.0/000077500000000000000000000000001303650752200132235ustar00rootroot00000000000000twitter-6.1.0/.gitignore000066400000000000000000000001301303650752200152050ustar00rootroot00000000000000*.gem *~ .bundle .rvmrc .yardoc Gemfile.lock coverage/* doc/* log/* measurement/* pkg/* twitter-6.1.0/.rspec000066400000000000000000000000271303650752200143370ustar00rootroot00000000000000--color --order random twitter-6.1.0/.rubocop.yml000066400000000000000000000016121303650752200154750ustar00rootroot00000000000000Metrics/AbcSize: Enabled: false Metrics/BlockLength: Max: 36 Metrics/BlockNesting: Max: 2 Metrics/LineLength: AllowURI: true Enabled: false Metrics/MethodLength: CountComments: false Max: 15 Metrics/ModuleLength: Max: 150 # TODO: Lower to 100 Metrics/ParameterLists: Max: 4 CountKeywordArgs: true Style/AccessModifierIndentation: EnforcedStyle: outdent Style/CollectionMethods: PreferredMethods: map: 'collect' reduce: 'inject' find: 'detect' find_all: 'select' Style/Documentation: Enabled: false Style/DotPosition: EnforcedStyle: trailing Style/DoubleNegation: Enabled: false Style/Encoding: Enabled: false Style/FrozenStringLiteralComment: Enabled: false Style/RaiseArgs: EnforcedStyle: compact Style/SpaceInsideHashLiteralBraces: EnforcedStyle: no_space Style/TrailingCommaInLiteral: EnforcedStyleForMultiline: 'comma' twitter-6.1.0/.travis.yml000066400000000000000000000005511303650752200153350ustar00rootroot00000000000000cache: bundler language: ruby rvm: - 2.0.0 - 2.1 - 2.2 - 2.3.3 - jruby-9.1.6.0 - jruby-head - rbx-2 - ruby-head sudo: false bundler_args: --without development --retry=3 --jobs=3 env: global: - JRUBY_OPTS="$JRUBY_OPTS --debug" matrix: allow_failures: - rvm: jruby-head - rvm: rbx-2 - rvm: ruby-head fast_finish: true twitter-6.1.0/.yardopts000066400000000000000000000004551303650752200150750ustar00rootroot00000000000000--no-private --protected --tag rate_limited:"Rate Limited?" --tag authentication:"Authentication" --markup markdown - CHANGELOG.md CONTRIBUTING.md LICENSE.md README.md examples/AllTweets.md examples/Configuration.md examples/RateLimiting.md examples/Search.md examples/Streaming.md examples/Update.md twitter-6.1.0/CHANGELOG.md000066400000000000000000002342641303650752200150470ustar00rootroot000000000000006.1.0 ----- * [Update faraday dependency to ~> 0.11.0](https://github.com/sferik/twitter/commit/6eb494d7c4ac1b06730d22bc9183e6a9035e3643) 6.0.0 ----- * [Drop support for Ruby 1.8.7 and Ruby 1.9.3](https://github.com/sferik/twitter/commit/27980f45fb357e34b86e46cb9134d86ed29b3ce3) 5.17.0 ------ * [Add `email` to `Twitter::User`](https://github.com/sferik/twitter/commit/1d3aebcd0186d36c7c657ec913ac73bfa802d6ff) * [Add `current_user_retweet` attribute to `Twitter::Tweet`](https://github.com/sferik/twitter/pull/819) ([@ysr227](https://twitter.com/ysr227)) * [Add `quoted_tweet` Twitter::Streaming::Event](https://github.com/sferik/twitter/pull/800) * [Dump `Twitter::NullObject` as JSON properly](https://github.com/sferik/twitter/pull/815) ([@okkez](https://twitter.com/okkez)) 5.16.0 ------ * [Add new settings to `Twitter::Settings`](https://github.com/sferik/twitter/commit/d047ce00034d26a99927076c28679ce08fd69308) * [Add `Twitter::Trend#tweet_volume`](https://github.com/sferik/twitter/commit/e797b62e5e6a768e8aeafde6186e1f5310e6bfc6) * [Remove the encoding of profile urls](https://github.com/sferik/twitter/commit/6d46bd689ab4a4f119d1d692488aab37e4e99893) ([@TimHaines](https://twitter.com/TimHaines)) * [Fix issue with port number in streaming connection](https://github.com/sferik/twitter/issues/709) 5.15.0 ------ * [`NullObject#as_json` returns 'null'](https://github.com/sferik/twitter/commit/2979e703c09a45f012cb2c5b2d6663bf1f4d3351) ([@lukevmorris](https://twitter.com/lukevmorris)) * [Add methods to get to parameters of quoted tweet](https://github.com/sferik/twitter/commit/afd41a3e36cc94194a2110ba9adce13486ced9fd) ([@couhie](https://twitter.com/couhie)) * [Add additional mime_types for multi-part upload](https://github.com/sferik/twitter/commit/947fcdc9f7348f267d74933ffa43d191cf248a9c) * [Fix bug where flat_pmap can return nil](https://github.com/sferik/twitter/commit/e22a5601ec702632510b3e983e50929ceb334b95) * [Add new error codes](https://github.com/sferik/twitter/commit/1ce6b2f02d0f5f78435ee898e8f5b6d3db18d6f1) 5.14.0 ------ * [Add `Twitter::NullObject#respond_to?`](https://github.com/sferik/twitter/commit/438e311d93f382960650e20898203c880ade6b25) * [Add `Twitter::Media::Video`, `Twitter::Media::VideoInfo`, and `Twitter::Media::Variant`](https://github.com/sferik/twitter/commit/158193f85843ebac7b3188bbad26d73907577f6a) * [Add `Twitter::Media::AnimatedGif` media entity](https://github.com/sferik/twitter/commit/76cb6645a54969edc7c9195e9e27e3728f5fd683) ([@nidev](https://twitter.com/nidev)) 5.13.0 ------ * [Deprecate `Twitter::REST::Client#get` and `Twitter::REST::Client#post`](https://github.com/sferik/twitter/commit/65773c7d741098490f4164fae9e4433365cd4292) * [Rename `Twitter::REST::Client::URL_PREFIX` to `Twitter::REST::Client::BASE_URL`](https://github.com/sferik/twitter/commit/73e2b9be19acf1403f324e5be48a550d3756d822) * [Extract `Twitter::Headers` class](https://github.com/sferik/twitter/commit/e0d4c36bade95253b98b3ee657af409bfeadbbb6) * [Move `Twitter::Request` to `Twitter::REST::Request`](https://github.com/sferik/twitter/commit/a46d9f21067724c437d40c7cb9c609f6cd304df1) * [Add `Twitter::REST::Request#rate_limit`](https://github.com/sferik/twitter/commit/0c9f9d6a15835a0260a5a56a8aaffdc3f3e39eed) * [Rename `Twitter::REST::Utils` methods](https://github.com/sferik/twitter/commit/2b1cceca0d37a038d3afd0b5763f2308b3db1b2d) * [Update default `User-Agent` to comply with Section 5.5.3 of RFC 7231](https://github.com/sferik/twitter/commit/e5eb8d451d8be2d2751e6dda132c65039e5c879c) 5.12.0 ------ * [Rescue `Twitter::Error::NotFound` for safe `#favorite` and `#retweet`](https://github.com/sferik/twitter/commit/5e6223df20217fd6b0ac78b44b0defdb46d1e018) * [Make `Twitter::User#profile_background_image_uri` methods return a URI](https://github.com/sferik/twitter/commit/d96194c0c3b17076e48faed1b05cd48d043a6778) * [Un-deprecate `Twitter::Base#to_hash`](https://github.com/sferik/twitter/commit/f45ce597408ab2bae2b55db6456543bf6d9ea081) * [Add `Twitter::Tweet#possibly_sensitive?`](https://github.com/sferik/twitter/commit/917e8f14f7707eb646e8057827ed0ba9d1766eeb) * [Namespace registered Faraday middleware](https://github.com/sferik/twitter/commit/a96931171e32c142f36318547f2cffa6ccd5c199) ([@godfoca](https://twitter.com/godfoca)) * [Fix test failures on Ruby 2.2.0-preview1](https://github.com/sferik/twitter/commit/74fb2e676f5882c62a6d4f07d7bbf8ca1f469fe2) * [Make Twitter::NullObject Comparable](https://github.com/sferik/twitter/commit/9635db5128708525f3368800f11c519d6b14b1e4) 5.11.0 ------ * [Return a Twitter::NullObject for empty attributes](https://github.com/sferik/twitter/commit/bca179eefb1c157f19b882a88ba608f6817b76bb) * [Add `iso_language_code` attribute to `Twitter::Metadata`](https://github.com/sferik/twitter/commit/7bf3a1b6ad0c35dc608b03ba2b3321b594e4da1c) 5.10.0 ------ * [Add support for extended entities](https://github.com/sferik/twitter/commit/ed7c708e4208de1df27d141678c14e23422504a0) * [Add `Twitter::REST::Client#upload`](https://github.com/sferik/twitter/commit/f5a747b53c4866bb378d6022f309d6176620122e) 5.9.0 ----- * [Use expanded URIs when available](https://github.com/sferik/twitter/commit/f1d5d1f4c0ea75ebeaf9e7eb760b9efd245a5df2) * [Deprecate `Twitter::REST::Client#middleware=` and `#connection_options`](https://github.com/sferik/twitter/commit/71b0a38670102841fda9642de586e6cb67d33083) * [Ensure predicate methods return `false` for `Twitter::NullObject`](https://github.com/sferik/twitter/commit/f1b42bf82440f2dc0ba61761fc8f12460e20aadf) * [Make `Twitter::Place#id` attribute accessible](https://github.com/sferik/twitter/commit/a4fa4739283a325886d44f97b2648e3b00f933b1) * [Enable injection of custom TCP/SSL socket classes](https://github.com/sferik/twitter/commit/3629a1edfbc6b35099d4b0fc165b938a67c02d86) ([@neektza](https://twitter.com/neektza)) * [Deprecate predicate methods without question marks](https://github.com/sferik/twitter/commit/0305a8535357b6114be73e6b94744eed6b6d3bb5) * [Deprecate `Twitter::Base#[]`](https://github.com/sferik/twitter/commit/2ab6c0d546b7c1d3635ac9c319fb5c2aa2514da0) * [Remove statement that TweetStream is not 2.0.0-compatible](https://github.com/sferik/twitter/pull/553) ([@melaniegilman](https://twitter.com/melaniegilman)) * [Dont allow unacceptable IO objects in `Twitter::REST::Client#update_with_media`](https://github.com/sferik/twitter/commit/f22f1e2efd29200f157af041a470678cd4ef637a) ([@tim_linquist](https://twitter.com/tim_linquist)) * [Add support for new REST API endpoint for bulk lookup of Tweets by ID](https://github.com/sferik/twitter/commit/0d23c5ed65a7e7728cd096d611e5edeecdbc6e79) * [Make the streaming API raise exceptions for status codes](https://github.com/sferik/twitter/commit/b571e03ed18cd63ec1d1a57c03e5744b284111d6) ([@eroberts](https://twitter.com/eroberts)) * [Call GET users/show if screen name has already been fetched](https://github.com/sferik/twitter/commit/0691a62ca5b43d33aa2f7b63aeb039d9155a24ed) * [Add the ability to set user_agent and proxy](https://github.com/sferik/twitter/commit/e72185e1b0299221448650760b91c74ff1bec3e7) * [Use (immutable) user ID instead of (mutable) screen name](https://github.com/sferik/twitter/commit/ceeccb08bbc7cc65c3e6eddaf408b236b8a98677) * [Implement mute functionality](https://github.com/sferik/twitter/commit/dfe206cae5f2189ce2b5cd5db6307d5d5e8af4ef) 5.8.0 ----- * [Alias `Twitter::Tweet#reply?` to `Twitter::Tweet#in_reply_to_user_id?`](https://github.com/sferik/twitter/commit/57147287d25e21a5e740ee69c3e9aeec6abd1b06) * [Add `Twitter::Error::SSL_REQUIRED` error code](https://github.com/sferik/twitter/commit/0cb7e6c132b73766bc978ccb45dd8d9cba43f660) * [`Twitter::Tweet#retweeted_status` always returns the original tweet, not the retweet](https://github.com/sferik/twitter/commit/70fede7fa09a87b7e1cba5b8b4be82127c9eaf51) ([@IanChoiJugnoo](https://twitter.com/IanChoiJugnoo)) 5.7.1 ----- * [Only warn if entities are not included](https://github.com/sferik/twitter/commit/82ed19e69c03ccaccc366744421b3bb3ee444625) ([@matthewrudy](https://twitter.com/matthewrudy)) * [Fix typos in documentation](https://github.com/sferik/twitter/pull/531) ([@attilaolah](https://twitter.com/attilaolah)) 5.7.0 ----- * [Remove `Twitter::Base.from_response` method](https://github.com/sferik/twitter/commit/6f9a352adaa5eee0611fa8d2e45fc7349b5cecae) * [Remove `Twitter::REST::API` namespace](https://github.com/sferik/twitter/commit/f9c4e8214bfe0e4cbd13681a6454956f2c6ac21b) * [Remove `descendants_tracker`](https://github.com/sferik/twitter/commit/4cbcb0fc58c55b84b642bc7c66085bb581e9b20a) * [Remove unused `HTTP_STATUS_CODE` constants](https://github.com/sferik/twitter/commit/b45d89bc96f11079b31976f14ade4f89d50b4dc9) * [Remove `Twitter::Error#cause`](https://github.com/sferik/twitter/commit/a5748b925aa3220e7388311bd0228a62d45d09a4) 5.6.0 ----- * [Replace custom `Twitter::NullObject` with `Naught`](https://github.com/sferik/twitter/commit/bc3990e3588f889569f1c92e465c329c508ce32e) * [Use `URI` and `CGI` to convert query string into a hash](https://github.com/sferik/twitter/commit/6dd9d97aaef3917868b870e01896ab937cbacfbb) * [Increase default timeout values](https://github.com/sferik/twitter/commit/350536926d1c2c0656fdc79948c5f543e306e14e) * [Add `Twitter::Error::RequestTimeout`](https://github.com/sferik/twitter/commit/3179537af41b2e2f85c0bc74be799faea0817e48) * [Remove unused methods `#put` and `#delete` in `Twitter::REST::Client`](https://github.com/sferik/twitter/commit/eaaf234b84a6e2e1f7695f73befaf11f30664f4a) * [Deprecate `retweeters_count` in favor of `retweet_count`](https://github.com/sferik/twitter/commit/ea39bd013364dc24f02e9a1eb25b4b48b99a5480) * [Deprecate `favorites_count`/`favoriters_count` in favor of `favorite_count`](https://github.com/sferik/twitter/commit/ea39bd013364dc24f02e9a1eb25b4b48b99a5480) * [Deprecate `to_hsh` in favor of `to_hash` or `attrs`](https://github.com/sferik/twitter/commit/63e2cdd693aece2912564988d06786cd23a2cad5) * [Deprecate `oauth_token` and `oauth_token_secret` accessors](https://github.com/sferik/twitter/commit/ac246717557ea02565a1d93b3f9a975e7fd39874) 5.5.1 ----- * [Fix bug where `Twitter::Error::AlreadyFavorited` would never be raised](https://github.com/sferik/twitter/issues/512) ([@polestarw](https://twitter.com/polestarw)) * [Fix bug where `Twitter::Error::AlreadyPosted` would never be raised](https://github.com/sferik/twitter/commit/e6b37b930c056a88d8ee1477246635caf579111d) * [Restore `Twitter::Entities#entities?` as a public method](https://github.com/sferik/twitter/commit/234a9e3134eeee072bd511e1c1f1823ceb1531a2) 5.5.0 ----- * [Add entities to `Twitter::DirectMessage`](https://github.com/sferik/twitter/commit/d911deb456cb2da6e14d0b3c69ba4d068ca85868) * [Add conversion methods to `Twitter::NullObject`](https://github.com/sferik/twitter/commit/4900fee474feaa1514c06d459a9da6d52c45a60e) 5.4.1 ----- * [Default to maximum number of tweets per request](https://github.com/sferik/twitter/commit/1e41b5d4dde8678f5968b57dafe9da63b092646c) 5.4.0 ----- * [Fix enumerable search interface](https://github.com/sferik/twitter/commit/e14cc3391ebe8229184e9e83806c870df3baa24c) 5.3.1 ----- * [Add `Twitter::Utils` module](https://github.com/sferik/twitter/commit/a1f47fbf19b859c8e680a0a92eff5e225a015090) ([@charliesome](https://twitter.com/charliesome)) * [Remove `Enumerable` monkey patch](https://github.com/sferik/twitter/commit/818b28d1621e843c0c6f9ef471076f4125623e52) ([@charliesome](https://twitter.com/charliesome)) * [Don't spawning a new thread if there's only one element](https://github.com/sferik/twitter/commit/c01ea8309c16eb77eeb368452df1dadd1e405532) * [Introduce meaningful constant names](https://github.com/sferik/twitter/commit/215c80890d702535de83d8f849885a95ec153920) ([@futuresanta](https://twitter.com/futuresanta)) * [Automatically flatten `Twitter::Arguments`](https://github.com/sferik/twitter/commit/a556028ace04cb00c3c2b9cb8f72f792a86f04d6) 5.3.0 ----- * [Add `UNABLE_TO_VERIFY_CREDENTIALS` error code](https://github.com/sferik/twitter/commit/6a47e715ef7935cd36a2f78ed877deb3c09af162) * [Don't suppress `Twitter::Error::Forbidden` in #follow and #follow!](https://github.com/sferik/twitter/commit/b949c0400dabc6774419025e7b131d0a18447c3a) * [Update memoizable dependency to ~> 0.3.1](https://github.com/sferik/twitter/pull/501) 5.2.0 ----- * [Replace `URI` with `adressable`](https://github.com/sferik/twitter/commit/7ea2f5390dc7456950f55c90aa4e48f29dcd4604) * [Make `Twitter::Streaming::FriendList` an array](https://github.com/sferik/twitter/commit/1a38e5e8182823c3060fc59c270ef754bd49a179) * [Add `Twitter::Streaming::DeletedTweet`](https://github.com/sferik/twitter/commit/084025b5e348bd33b4c29c6b9e40565c0e77319c) * [Add `Twitter::Streaming::StallWarning`](https://github.com/sferik/twitter/commit/b07ac50552f5063ee43a490fa40da8b6889df772) * [Add error code for "User is over daily status update limit"](https://github.com/sferik/twitter/commit/76c088d38e594703ee391f2a524142aa357b0972) * [`Twitter::Streaming::Client#site` can take a `String` or `Twitter::User`](https://github.com/sferik/twitter/commit/e3ad4f2da1f8fc82e1d3febbc2602f626bced8a8) * [Update `http_parser.rb` dependency to `~> 0.6.0`](https://github.com/sferik/twitter/commit/6d2f81bfc5bd469d558868a0f65356f30ca9f5e7) 5.1.1 ----- * [Custom equalizer for `Twitter::Place`](https://github.com/sferik/twitter/commit/79c76a9bed4f0170c8c09fe38ad4f0ee6aa4505e) 5.1.0 ----- * [Use `Addressable::URI` everywhere](https://github.com/sferik/twitter/commit/97d7c68900c9974a1f6841f6eed2706df9030d64) ([@matthewrudy](https://twitter.com/matthewrudy)) * [Allow use of `Twitter::Place` instead of `place_id`](https://github.com/sferik/twitter/commit/c2b31dd2385fefa30a9ddccf15415a713cf5953a) * [Allow use of `Twitter::Tweet` instead of `in_reply_to_status_id`](https://github.com/sferik/twitter/commit/6b7d6c2b637a074c348a56a51fb1e02252482fb2) 5.0.1 ----- * [Fix `buftok` delimiter handling](https://github.com/sferik/twitter/pull/484) * [Started handling streaming deletes](https://github.com/sferik/twitter/commit/8860b97bce4bc36086116f380a2771af3c199ea2) 5.0.0 ----- * [Remove `Twitter::API::Undocumented#status_activity` and `#statuses_activity`](https://github.com/sferik/twitter/commit/7f970810af251b2fe80c38b30c54485c55bd2034) * [Remove `Twitter::Tweet#favoriters`, `#repliers`, `#repliers_count`, and `#retweeters`](https://github.com/sferik/twitter/commit/77cc963381a68e8299ef6c6b7a306b440666d792) * [Remove identity map](https://github.com/sferik/twitter/commit/ec7c2df78a200e2b0b1cd3a40983c6ce9dee552d) * [Remove `Twitter::Cursor#all`](https://github.com/sferik/twitter/commit/72be4148b973153c6d3044c406b768ad832555ff) * [Remove `Twitter::Cursor#collection`](https://github.com/sferik/twitter/commit/9ae4621610ba6c26950e6b77f950f698cdfc8dac) * [Remove `Twitter#from_user`](https://github.com/sferik/twitter/commit/d2ae9f1cc1f5224bcdff06cda65fabdf9e7fbcb3) * [Remove `ClientError`, `ServerError`, and `ParserError`](https://github.com/sferik/twitter/commit/72843948d8a6f66345adc254fa91cf1097592b22) * [Remove global configuration](https://github.com/sferik/twitter/commit/239c5a8462fabb8c8ef9ec6a4cdded34561d572d) * [Remove ability to configure client with environment variables](https://github.com/sferik/twitter/commit/17e958579f65abf8932841f20058a5989abb994f) * [Remove Brittish English aliases](https://github.com/sferik/twitter/commit/572813b373a1c3001ff6c1bb729f092434d17bab) * [Replace `multi_json` with `json`](https://github.com/sferik/twitter/commit/e5fc292fee078567664acf6be4ed31a8ad077780) * [Rename `oauth_token` to `access_token`](https://github.com/sferik/twitter/commit/d360f8015c487c4599460abd0dd0bc7e59a522a3) * [Move `Twitter::Arguments` out of `REST::API` namespace](https://github.com/sferik/twitter/commit/8faa15309d906dd46fccc1b914ea4aa7a5da7c2d) * [Move `Twitter::Client` into `REST` namespace](https://github.com/sferik/twitter/commit/5b8c3fd243227888fc0886b0bf864ecd3a018f99) * [Add `Twitter::Streaming::Client`](https://github.com/sferik/twitter/commit/23afe90aa494229a4389c3e51f753102b34fc551) * [Add `Twitter::Error::AlreadyPosted`](https://github.com/sferik/twitter/commit/e11d2a27dd0dfbbe16c812a81b9c2ab2852a7790) * [Add `Twitter::REST::Client#reverse_token`](https://github.com/sferik/twitter/commit/39139c4df35b54b86fae29d1ac83a08f4aa293cd) * [Add `#url` methods to `Twitter::List`, `Twitter::Tweet`, and `Twitter::User`](https://github.com/sferik/twitter/commit/a89ec0f4e81097cc303b6c204e0375eb57ffd614) * [Add `Twitter::Place#contained_within` and `#contained_within?`](https://github.com/sferik/twitter/commit/23cc247bd20001ecbafa544bfb4546bdfc630429) * [Add `Twitter::GeoResults`](https://github.com/sferik/twitter/commit/be1a0a1425a6700267aae0f94a8835bff24dad56) * [Add `NullObject`](https://github.com/sferik/twitter/commit/17880f491726cee77c1cbcf914887e95d5e6ae7e) * [Add predicate methods for any possible `NullObject`](https://github.com/sferik/twitter/commit/eac5522edededacfc2a22d6f6879da43b8136d41) * [Always return `URI` instead of `String`](https://github.com/sferik/twitter/commit/341f68d1a46667a820754d30ffa6ec2f50034afc) * [Allow `URI` as argument](https://github.com/sferik/twitter/commit/c207567e674f108e4074e12c9e7343fb74e8a97c) * [Allow `String` in addition to `URI` objects](https://github.com/sferik/twitter/commit/89a46fbd3560109da87d5f87262dcf6bd2a336c6) * [Collection caching](https://github.com/sferik/twitter/commit/d484d7d7d7a0956f9b4fa6791a911ed7c9522cba) * [Implement `Twitter::Cursor#each` without making an extra HTTP request](https://github.com/sferik/twitter/commit/8eeff57f5c6d6ca0a6f1ff5ebc31e652a71fc150) * [Make `Twitter::SearchResults` enumerable](https://github.com/sferik/twitter/commit/d5ce8537164912e79dffc5a054ecd9ae6ecb8075) * [Make `Twitter::Base` objects immutable](https://github.com/sferik/twitter/commit/69b1ef7edad32398b778c8449bc3605739a6c59a) * [Missing key now raises `KeyError`, not `ArgumentError`](https://github.com/sferik/twitter/commit/f56698caff608527b9f3c2c3dd4c18306589cb3b) * [Use `equalizer` instead of manually overwriting #==](https://github.com/sferik/twitter/commit/a7ddf718b119e9c5fc8b87e6784e8c3304707a72) * [Give methods more natural names](https://github.com/sferik/twitter/commit/e593194fb7bd689fca561e6334db1e6af622590a) * [Fix `Twitter::SearchResults#rpp` return value](https://github.com/sferik/twitter/commit/28d73200490ac2755c3e68d8d273fbc64a8d7066) 4.8.1 ----- * [Ignore case of profile image extension](https://github.com/sferik/twitter/commit/73760610e959ae868de23de3da661d237fbcb106) * [Allow use of Twitter::Token in place of bearer token string](https://github.com/sferik/twitter/commit/13596bc60db36ecaf5a1df09ecb322d85d8c2922) * [Add Twitter::API::Undocumented#tweet_count](https://github.com/sferik/twitter/commit/795458a25ec7b143a995e7f2f2043e523c11961c) * [Add missing dependencies](https://github.com/sferik/twitter/commit/e07e034472df8b7aa44c779371cf1e25d8caa77d) ([@tmatilai](https://twitter.com/tmatilai)) 4.8.0 ----- * [Add `Twitter::SearchResults#refresh_url`](https://github.com/sferik/twitter/commit/6bf08c008de139aad3ec173461e8633bfa5a3bd8) ([@mustafaturan](https://twitter.com/mustafaturan)) * [Fix issue with wrong signature being generated when multipart data is posted](https://github.com/sferik/twitter/commit/65ab90a6d51755e5901434a3568f8163ca3e262f) ([@mustafaturan](https://twitter.com/mustafaturan)) * [Restore compatibility with Ruby 1.8.7](https://github.com/sferik/twitter/commit/fb63970c1bd19792955d092a38b6adf53b558ec7) * [Remove undocumented methods, retired in the APIpocalypse](https://github.com/sferik/twitter/commit/cf6a91f8df833dce5bffc7a0292402860e7d4da7) 4.7.0 ----- * [Add support for application-only authentication](https://github.com/sferik/twitter/pull/387) ([@paracycle](https://twitter.com/paracycle)) * [Add support for `Twitter::Entity::Symbol` entities](https://github.com/sferik/twitter/commit/a14a0cdc57ad5d7760392f71a280c7100a5b5936) ([@anno](https://twitter.com/anno)) * [Add `Twitter::API::OAuth#invalidate_token`](https://github.com/sferik/twitter/pull/372) ([@terenceponce](https://twitter.com/terenceponce)) * [Add `Twitter::API::Lists#lists_owned` method](https://github.com/sferik/twitter/commit/9e97b51c20aabf4485a91ae7db697ee3be131a89) * [Add `Twitter::API::Tweets#retweeters_ids` method](https://github.com/sferik/twitter/commit/8cf5b2ddf3d2647084496c7c3f205b2468d84cbe) * [Add `Twitter::SearchResults#next_results`](https://github.com/sferik/twitter/pull/365) ([@KentonWhite](https://twitter.com/KentonWhite)) * [Make consumer_key readable](https://github.com/sferik/twitter/commit/a318869c4827d6add781730cfb67fd2bdca5c584) * [Loosen required_rubygems_version for compatibility with Ubuntu 10.04](https://github.com/sferik/twitter/commit/41bd5655c2e7eca813807d742cb7fdec8f0bb027) * [Remove default SSL configuration options and override](https://github.com/sferik/twitter/commit/113b14bc05a9f8e513245fda057e7f16f8965357) 4.6.2 ----- * [Fix `SystemStackError: stack level too deep` when converting to JSON](https://github.com/sferik/twitter/issues/368) * [Add `Twitter::Tweet#favorite_count`](https://github.com/sferik/twitter/commit/de8a356d0d5e757bfe383b58744efa1c2d842b79) * [Add `Twitter::SearchResults#next_results?`](https://github.com/sferik/twitter/commit/d951db4bdaa1ef72383f2026ec6236a289ee9074) ([@KentonWhite](https://twitter.com/KentonWhite)) 4.6.1 ----- * [Convert nested classes in `Twitter::Base#attrs`](https://github.com/sferik/twitter/commit/e56c34c640189eb8b25a16994676a5e82b783cb3) ([@anno](https://twitter.com/anno)) 4.6.0 ----- * [Make `Twitter::Base#attrs` call methods if they exist](https://github.com/sferik/twitter/commit/ff4f2daccd1acdfddcea7139d4dd6490b55129db) * [Allow `Twitter::API::Tweets#oembed` and `Twitter::API::Tweets#oembeds` to take a URL](https://github.com/sferik/twitter/commit/0d986fa4b0c254e8c816bce086c3f6648d8fd3d7) ([@bshelton229](https://twitter.com/bshelton229)) * [Add `Twitter::Tweet#filter_level` and `Twitter::Tweet#lang` attribute readers](https://github.com/sferik/twitter/commit/283aafbe1219e55f19a76517d9edce497001fca2) * [Add "Quick Start Guide" to the `README`](https://github.com/sferik/twitter/commit/afc24ee1bd07f19ef7fb8fd6b85aede34f3ab156) ([@coreyhaines](https://twitter.com/coreyhaines)) 4.5.0 ----- * [Add no_retweet_ids](https://github.com/sferik/twitter/commit/cab8d6ebf3afdbd24463932262798a132d70a6f1) ([@tibbon](https://twitter.com/tibbon)) 4.4.4 ----- * [Fix documentation bugs](https://github.com/sferik/twitter/commit/45213d16efda0bd78e8c4c3c80892b824393e37c) * [Relax `multi_json` dependency](https://github.com/sferik/twitter/commit/46327e740a03ec783cb62863d40eef5efa68c0cb) 4.4.3 ----- * [Add `Twitter::API::Arguments` class; remove `extract_options!` helper method](https://github.com/sferik/twitter/commit/65972c599ced8da27fbbfa72aeead92464355583) * [Ensure credentials set via `Twitter.configure` are of a valid type](https://github.com/sferik/twitter/commit/fc152dbe56b99639896bcaaf7fe158659e8c50b9) * [Delegate `Twitter::Tweet#profile_image_url` and `Twitter::Tweet#profile_image_url_https` to `Twitter::Tweet#user`](https://github.com/sferik/twitter/commit/7bd6f8f589a91a8c82363d07da77ec012890c6cb) * [Fix timeout bug; lock `faraday` dependency to version < 0.10](https://github.com/sferik/twitter/commit/01e2781e4a78137ca4e5e6d3e4faf2552ee9ec76) 4.4.2 ----- * [Fix to `Twitter::API::FriendsAndFollowers#friends` and `Twitter::API::FriendsAndFollowers#followers`](https://github.com/sferik/twitter/commit/d97438f5de89a1a15ad8ff5e67e8e0c7d412911f) ([@nbraem](https://twitter.com/nbraem)) * [Alias `Twitter::DirectMessage#text` to `Twitter::DirectMessage#full_text`](https://github.com/sferik/twitter/commit/dde92816beac5076507b3c0fb5b036222e2a4889) * [Remove `Kernel#calling_method`](https://github.com/sferik/twitter/commit/045d6e17178520641509f884ed4ce4e4f2f765fb) 4.4.1 ----- * [Do not modify `Thread.abort_on_exception`](https://github.com/sferik/twitter/commit/6de998ced1f3dce97a24e500ecf2348192ae9316) 4.4.0 ----- * [Add `Twitter::API::FriendsAndFollowers#friends` and `Twitter::API::FriendsAndFollowers#followers`](https://github.com/sferik/twitter/commit/03e1512a8e5e589771414aaf46db34718f1469ce) ([@tibbon](https://twitter.com/tibbon)) * [Add `method` parameter to `Twitter::API::Users#users`](https://github.com/sferik/twitter/commit/4885c8df5f36fcbe39bd435ef12b6e0bed06dcb5) ([@thomasjklemm](https://twitter.com/thomasjklemm)) * [Correct endpoint of `Twitter::Client#report_spam` method](https://github.com/sferik/twitter/commit/e59c0c4c31a9f7eed3d202c276628a3ea0df6d28) ([@uasi](https://twitter.com/uasi)) * [Refactor `Twitter::Request` class](https://github.com/sferik/twitter/commit/2d70b64674bdc204c85c47327afa571f9641e545) * [Remove `Array` core extensions](https://github.com/sferik/twitter/commit/2d00f99f4ac43e13e24bf90fcc813252175273f2) * [Remove `String` core extensions](https://github.com/sferik/twitter/commit/5a9144c3f5104a7ee13b4c50f32cf71151004023) * [Remove `Hash` core extensions](https://github.com/sferik/twitter/commit/0a8591efce268119e29623317382a1f2de2d0aa6) * [Do not `require 'identity_map'` by default](https://github.com/sferik/twitter/commit/da38eec199222ae2292650313ce153e2b3986369) * [Automatically define inquirer methods](https://github.com/sferik/twitter/commit/a6da19baf82656af118a4ec27e845b46c22a3d7e) 4.3.0 ----- * [Add Twitter::API#profile_banner](https://github.com/sferik/twitter/commit/5879ef3fcc486ac3849426ef0d44ee0288ed9599) 4.2.0 ----- * [Use new resource for `Twitter::API#retweets_of_me`](https://github.com/sferik/twitter/commit/d88ca1e91af06e748c31dcda287326028cf28258) * [`Twitter::API#favorite` no longer raises `Twitter::Error::Forbidden`](https://github.com/sferik/twitter/commit/65c01133a96106a6b0c61bc16cb2ffec38fa5e25) * [`Twitter::API#retweet` no longer raises `Twitter::Error::Forbidden`](https://github.com/sferik/twitter/commit/f1322ab12c573229ea3dc8decda2e2ea8b36fc31) * [Add `Twitter::Error::AlreadyFavorited`](https://github.com/sferik/twitter/commit/34710927e00d4dc5abc049bfc198bdd337fba1bd) * [Add `Twitter::Error::AlreadyRetweeted`](https://github.com/sferik/twitter/commit/2a231a0888dcd65dbef2dc92571e06d50f845cca) 4.1.2 ----- * [Add abort_on_exception to `Enumerable#threaded_map`](https://github.com/sferik/twitter/commit/15c9a7c221f24226c1003b76b287d2b2ed9306cb) ([@aheaven87](https://twitter.com/aheaven87)) 4.1.1 ----- * [Fix bug in `Twitter::Tweet#full_text`](https://github.com/sferik/twitter/commit/9646a5bed6d2d119b1cc1d5757113988de2516d6) * [Add `Twitter::Tweet#favouriters`, `Twitter::User#favoriters_count`, and `Twitter::User#favouriters_count` aliases](https://github.com/sferik/twitter/commit/60fce1ea0cdf8239262ca46588b4fe766f07288e) 4.1.0 ----- * [Handle new API v1.1 list response format](https://github.com/sferik/twitter/commit/2aace25fcf946de995e5ce1788f24ad35bc79438) 4.0.0 ----- * [Update all endpoints to Twitter API v1.1](https://github.com/sferik/twitter/commit/f55471a03dd0a428d5c0aa57a3c34809dbfde5cf) * [Replace `per_page` parameter with `count`](https://github.com/sferik/twitter/commit/e112ce6f779ca2a204a86caf71a11125a65de961) * [Use HTTP POST for `users/lookup`](https://github.com/sferik/twitter/commit/ff68ff81a8586d70fa021afaed6ff261d2a4b178) * [Add error classes for new Twitter API v1.1 response codes](https://github.com/sferik/twitter/commit/154b00f8c0cbbcf9177d367f19a90ef256d5b6a4) * [Cache `screen name` in an instance variable to avoid API calls](https://github.com/sferik/twitter/commit/dfc5641511bd99da857bf524af8449afb1843f8e) * [Update `Twitter::RateLimit` class for API v1.1](https://github.com/sferik/twitter/commit/540cbb2d90f3b2c53f09a9727cbad1d2489e3fae) * [Remove search endpoint](https://github.com/sferik/twitter/commit/37610fe6d54686238aedaee53914e70e67040d59) * [Remove media endpoint](https://github.com/sferik/twitter/commit/e4a70152b1a6f00299d3b659497c02adb791c18f) * [Disable identity map by default](https://github.com/sferik/twitter/commit/c6c5960bea998abdc3e82cbb8dd68766a2df52e1) * [Remove deprecated `RateLimit.instance` method](https://github.com/sferik/twitter/commit/bf08485942428c26ba595c4e092dcdac1ec823ff) * [Removed deprecated `Twitter::Tweet#oembed` method](https://github.com/sferik/twitter/commit/16f09cf7053f2109a740ea43461e89b504335c50) * [Rename resources for v1.1](https://github.com/sferik/twitter/commit/03c4c143082fc1e7b2355d77d98da77f401fddd4) * [Remove notification methods; use `Twitter::API#friendship_update` instead](https://github.com/sferik/twitter/commit/3b2d2b86599b4d054e7daa0d69b5e088cd776450) * [Remove `Twitter::API#end_session`](https://github.com/sferik/twitter/commit/23668bc68209a032e9193ade1cdf6d8462980954) * [Add `Twitter::Tweet#retweet?` method and `Twitter::Tweet#retweet` alias](https://github.com/sferik/twitter/commit/1e6ad051f488cae7bf18a45eea8008b448323fe4) * [Major changes for Twitter API v1.1](https://github.com/sferik/twitter/commit/eab13be653c1b54aa679dbf16f252a2b6977b80e) * [Remove `Twitter::API#no_retweet_ids`](https://github.com/sferik/twitter/commit/e179ab6d81c1c4931b67940463f414693671fb96) * [Remove `Twitter::API#retweeted_to_user`](https://github.com/sferik/twitter/commit/e179ab6d81c1c4931b67940463f414693671fb96) * [Remove `Twitter::API#trends_daily`](https://github.com/sferik/twitter/commit/e179ab6d81c1c4931b67940463f414693671fb96) * [Remove `Twitter::API#trends_weekly`](https://github.com/sferik/twitter/commit/e179ab6d81c1c4931b67940463f414693671fb96) * [Remove `Twitter::API#rate_limited?`](https://github.com/sferik/twitter/commit/b2ec0107bc1a2a73bd6b004348f1e6413822845c) * [Remove `Twitter::Client#rate_limit`](https://github.com/sferik/twitter/commit/3a4be52a50ad20875b1cf48871f7754944593c95) * [Remove `Twitter::API#rate_limit_status`](https://github.com/sferik/twitter/commit/ffebee6638875d5cc8363599fcfab2058bf1baf9) * [Remove `Twitter::API#accept`](https://github.com/sferik/twitter/commit/e4bcec169faafb78772e60d6cdeb5583a40f32e3) * [Remove `Twitter::API#deny`](https://github.com/sferik/twitter/commit/e4bcec169faafb78772e60d6cdeb5583a40f32e3) * [Remove `Twitter::API#related_results`](https://github.com/sferik/twitter/commit/e4bcec169faafb78772e60d6cdeb5583a40f32e3) * [Remove `Twitter::API#recommendations`](https://github.com/sferik/twitter/commit/e4bcec169faafb78772e60d6cdeb5583a40f32e3) * [Remove `Twitter::API#network_timeline`](https://github.com/sferik/twitter/commit/93c65f25eafb3051a86140ab7e980d03431040f1) 3.8.0 ----- * [Do not attempt to parse redirects](https://github.com/sferik/twitter/commit/30ee1c733cfea091f60b18a51d01eab1d0cc6f30) ([@twoism](https://twitter.com/twoism)) * [Add profile banner methods to `Twitter::User` class](https://github.com/sferik/twitter/commit/d0200d72e71639ad3e7f7e2b7243889f2f39e8b3) * [Add `Twitter::Error::UnprocessableEntity`](https://github.com/sferik/twitter/commit/fca4d174e8237655c82992edf67fcc846497fd54) * [Add `Twitter::API#update_profile_banner` and `Twitter::API#remove_profile_banner`](https://github.com/sferik/twitter/commit/74b17f58549b06885ab49c56271cb571886e67f0) * [Add `Twitter::Tweet#reply?`](https://github.com/sferik/twitter/commit/029d815815c99a7921a9b396c6c45b9f4cbd8fc3) 3.7.0 ----- * [Remove support for `IO` hash syntax](https://github.com/sferik/twitter/commit/bfe842d714a77b8edda90d0e2b547be434dc0148) * [Allow `Tempfile` to be passed to `Twitter::API#update_with_media`](https://github.com/sferik/twitter/commit/79dc8197250f0416a9a44524be0aaea9d3f31d83) * [Set `Content-Type` header to `multipart/form-data` when uploading a file](https://github.com/sferik/twitter/commit/24f759b7a128de2bceff27ee0e4699e8d927e5a5) * [Do not attempt to parse bodies that only contain spaces](https://github.com/sferik/twitter/commit/2a191ea051b20a492a3325413dcdca11b593ba50) * [Add `Twitter::Tweet#entities?` method](https://github.com/sferik/twitter/commit/43221b1d5fc1a3333a4718c79fd95f9ad42f143e) * [Add `Twitter::User#status?` method](https://github.com/sferik/twitter/commit/255dc305ed886ac1e062b96001cb09484e5ad98d) 3.6.0 ----- * [Rename Twitter::Status to Twitter::Tweet](https://github.com/sferik/twitter/commit/6d25887ecd371b9deaf4b70bc2f2ee1e6bff98bc) * [Make Twitter::Cursor an Enumerable](https://github.com/sferik/twitter/commit/2582f2ed3518a11bcad150778da18618dd9a0d37) * [Always define respond_to_missing? when overriding method_missing](https://github.com/sferik/twitter/commit/23cfaf9dec4bc58fd9b3fd8366fb0e087c7f1e51) 3.5.0 ----- * [Add `Twitter::API#related_results`](https://github.com/sferik/twitter/commit/15fb81202dde3bbf4d64407cb79163095603cdbe) * [Alias `Twitter::API#status_destroy` to `Twitter::API#tweet_destroy`](https://github.com/sferik/twitter/commit/ec16ed28538b2cf828183999df90da1942b7bcd6) * [Alias `Twitter::API#status_activity` to `Twitter::API#tweet_activity`](https://github.com/sferik/twitter/commit/ccbdc6776a6780277e6ec813d3ed579f42440631) * [Move `IdentityMapKeyError` under `Twitter::Error` namespace](https://github.com/sferik/twitter/commit/f1491d2fe1827140ea42b2618d0a25dc03110394) 3.4.1 ----- * [Prevent MultiJson::DecodeError error from bubbling up](https://github.com/sferik/twitter/commit/d870b7b8605e48bb0cd40e4b60684705ec06a846) * [Add British aliases for "favorite" methods on `Twitter::Status`](https://github.com/sferik/twitter/commit/07b1f410a8865ea3736d53d637fb513b4731a3ec) * [Correctly handle `nil` response body](https://github.com/sferik/twitter/commit/7fc785fa2ad43187fee2ba4808ffb3d09e8533dc) 3.4.0 ----- * [Refactor retweeted_to and retweeted_by into multiple methods](https://github.com/sferik/twitter/commit/7600cc3d529599cefc8d9c715e5f308ac4ca7319) 3.3.1 ----- * [Fix authentication bug](https://github.com/sferik/twitter/commit/b1fc6eac21293f2f87df9ca6684c30ef8155137f) 3.3.0 ----- * [Refactor `Twitter::RateLimit` class to be non-global](https://github.com/sferik/twitter/commit/6e9da0d0b8ae61e077eb631514922635a78951a7) * [Combine `Twitter::RateLimit#retry_after` and `Twitter::RateLimit#reset_in` into a single method](https://github.com/sferik/twitter/commit/1702f05a60016013c198626339c57d53031cb17d) * [Create proper interface for `Twitter::IdentityMap`](https://github.com/sferik/twitter/commit/8996c37a17484dd8ffe0d6a0ab278eb0b4e5e1ca) * [Move `Twitter::Point` and `Twitter::Polygon` classes under `Twitter::Geo` namespace](https://github.com/sferik/twitter/commit/059cc5545195f99ba1b484e8359b7246f29be37e) * [Move `Twitter::Photo` class under `Twitter::Media` namespace](https://github.com/sferik/twitter/commit/979ed718c6c31140a5698cbb6c7bd311b799f39e) 3.2.0 ----- * [Make identity map configurable](https://github.com/sferik/twitter/pull/288) * [Decouple identity map from object instantiation](https://github.com/sferik/twitter/pull/286) * [Make `IdentityMapKeyError` inherit from `IndexError`](https://github.com/sferik/twitter/commit/5503704c8601fa533299e22b49040cd073b85a6a) * [Break up `Twitter::User` class into `Twitter::BasicUser`, `Twitter::SourceUser`, `Twitter::TargetUser`, and `Twitter::User`](https://github.com/sferik/twitter/commit/9d4f1e5dc4001adb124d07584f64322555e0e73c) 3.1.0 ----- * [Add size option to `Twitter::User#profile_image_url` and `Twitter::User#profile_image_url_https`](https://github.com/sferik/twitter/commit/bd4c63c327308572f2d4b7ae266216d50ee35beb) * [Make object equality more strict](https://github.com/sferik/twitter/commit/537a5463d568e9a07ef5de5ce4dcad701b068ff3) * [Pass options from Twitter::Client.user to Twitter::Client.verify_credentials](https://github.com/sferik/twitter/commit/8d99cfdbc7614690769c1682664cbe8cd9ea9c93) 3.0.0 ----- * [All returned hashes now use `Symbol` keys instead of `String` keys](https://github.com/sferik/twitter/commit/d5b5d8788dc0c0cef6f2c28e6fa2dc6ffcf389eb) * [`Twitter::Client` methods now allow multiple arguments and return an `Array`](https://github.com/sferik/twitter/commit/78adf3833ebfcafda48d31dee7befdcfa76f2971) * [`Twitter::Client#users` can now return more than 100 `Twitter::User` objects](https://github.com/sferik/twitter/commit/296a8847aa9bea0881369649a91e38fc2e9b3076) * [`Twitter::Client#search` now returns a `Twitter::SearchResult` object instead of an array of `Twitter::Status` objects](https://github.com/sferik/twitter/pull/261/files) ([@wjlroe](https://twitter.com/wjlroe)) * [`Twitter::Client#follow` now checks to make sure a user is not already being followed before following](https://github.com/sferik/twitter/commit/24ffbca370f6957bc9a6c43cb6a1ee55cade7bb8) * [Add `Twitter::Client#follow!` to follow a user without checking whether they are already being followed](https://github.com/sferik/twitter/commit/24ffbca370f6957bc9a6c43cb6a1ee55cade7bb8) * [Add an identity map](https://github.com/sferik/twitter/commit/218479f71c861db79ccce8e12c4cb59d0a63cc77) * [Attempt to pull credentials from the environment when not specified](https://github.com/sferik/twitter/commit/32e3fde7ccc7aea15b24159302d7c0fd934a6a0a) * [Add default timeout options](https://github.com/sferik/twitter/commit/bb8a15d60e930233050e96964823b2f569e0943f) * [Middleware is now specified as a `Faraday::Builder`](https://github.com/sferik/twitter/commit/2bd5010fc38b235ee9cc09b75e1ae89f23409f94) * [Faraday errors are now captured and re-raised as a `Twitter::Error::ClientError`](https://github.com/sferik/twitter/commit/ccf3ddeb4cae937fdf3335546c17884472855149) * [Replace `Twitter::Error.ratelimit` methods with the singleton `Twitter::RateLimit` class](https://github.com/sferik/twitter/commit/4c63a7378305df791b6fbcd3d3beb83ccd360f95) * [Remove explicit proxy and user agent configuration](https://github.com/sferik/twitter/commit/f6e647f73eaa0f39b4306256789ded414ea9a8c2) * [Remove untested gateway middleware](https://github.com/sferik/twitter/commit/7e501a99fe15ba9be69d2b791fc1d99c1904542b) * [Remove deprecated `Twitter::Status#expanded_urls` method](https://github.com/sferik/twitter/commit/50d2613b1ade92c820f553d6e8389a49ec53dac1) 2.5.0 ----- * [Remove `Active Support` dependency](https://github.com/sferik/twitter/compare/v2.4.0...v2.5.0) 2.4.0 ----- * [`Twitter::User` objects can be used interchangeably with user IDs or screen names](https://github.com/sferik/twitter/commit/2dd5d32ca1a67a88d61d2f762e011295cab8a9bd) * [`Twitter::List` objects can be used interchangeably with list IDs or slugs](https://github.com/sferik/twitter/commit/621e1ee428ea9fea024b26c8775baa47a7c235d9) 2.3.0 ----- * [Merge `Twitter::Client` modules into a monolithic `Twitter::Client` class](https://github.com/sferik/twitter/commit/396bb15fe8a273e01370e6a22efbf1e7f6a7805e) * [Add `Twitter::Status#full_text`](https://github.com/sferik/twitter/commit/a03eb945df6a58f92cc832f5ffc1c8973c57339e) * [Add `profile_image_url_https` accessor to `Twitter::Status`](https://github.com/sferik/twitter/commit/5991fa395fcd94bb88e88ed6c9bfae51896978b5) ([@terryjray](https://twitter.com/terryjray)) * [Make `Status#screen_name` return `from_user` attribute and vice versa](https://github.com/sferik/twitter/commit/82afc66a342c51258f80d1ba26959358be1a9c73) * [Add `created_at` attribute to `Twitter::List`](https://github.com/sferik/twitter/commit/6d408ead1cfa83dd0539fe771495b5f5e594282e) * [Add ability to pass a user to `Twitter::Client#recommendations`](https://github.com/sferik/twitter/commit/19f5796ba618e634ed56e936eb8f3bcb9822124c) * [Alias `trends` to `local_trends`](https://github.com/sferik/twitter/commit/b4eb89c33a6b00f9fd685fd7dc95b79ee9e403bb) ([@Tricon](https://twitter.com/Tricon)) 2.2.0 ----- * [Don't create a new Faraday instance on every request](https://github.com/sferik/twitter/pull/233/files) * [Add `Twitter::Mention#source`](https://github.com/sferik/twitter/commit/6829994f4d8ca1e6d444fa75dc78c06bd01a5d74) * [Add `Twitter::ListMemeberAdded`](https://github.com/sferik/twitter/commit/b40c79d59e8a4cfc71078127542c1f434c3ca517) ([@aamerabbas](https://twitter.com/aamerabbas)) * [Add `entities` attribute to `Twitter::Status`](https://github.com/sferik/twitter/pull/245/files) ([@tomykaira](https://twitter.com/tomykaira)) * [Add `Twitter::Client#list_remove_members`](https://github.com/sferik/twitter/commit/025c5281c9e695ad7fd21bcc34d4df4aaf0f3fb7) 2.1.0 ----- * [Add `in_reply_to_status_id` attribute to `Twitter::Status`](https://github.com/sferik/twitter/commit/9eeb74a5f724681dad1a35b3e052ea78142b532f) * [Remove `twitter-text` dependency](https://github.com/sferik/twitter/commit/9645fde056353a4fe85a64632ed58f043cfe8871) * [Add `Twitter::Status#retweeted_status`](https://github.com/sferik/twitter/commit/617ebccb890f612f0cd8883a524d199e838a58a0) * [Add optional parameter hash to `Twitter::Client#oembed`](https://github.com/sferik/twitter/commit/ce9cf63f84c74d3c0f616524f6674b58e2a45377) * [Fix `Twitter::Status` object returned by `Twitter::Client#retweet`](https://github.com/sferik/twitter/pull/228/files) * [Add `from_user_name` and `to_user_name` attributes to `Twitter::Status`](https://github.com/sferik/twitter/commit/d60ac38e4a1623688a5ac8a29b6a4e79295fe9d1) 2.0.0 ----- * Replace `Hashie::Mash` with custom classes and Ruby primitaives * Any instance method that returns a boolean can now be called with a trailing question mark * [The `created_at` instance method now returns a `Time` instead of a `String`](https://github.com/sferik/twitter/commit/b92b0ca44af35fc9f72b81690a8aa72fa4bdfbce#diff-5) * [Replace the `Twitter::Search` class with `Twitter::Client#search`](https://github.com/sferik/twitter/commit/591cbf1be86707584de0548365cc71c795683b2d) * [Add object equivalence](https://github.com/sferik/twitter/commit/a52e0d2296db55fc0d1dcc184fb6eacba6183642) * [`Twitter::Client#totals` has been removed. Use `Twitter::Client#user` instead]((https://github.com/sferik/twitter/commit/1ad0928a6232324072e8d960242a99949016cf50) * [`Twitter.faraday_options` has been renamed to `Twitter.connection_options`](https://github.com/sferik/twitter/commit/221cb650ba126effb3447a3b9e0d58da2bdb507e) * [All error classes have been moved inside the Twitter::Error namespace](https://github.com/sferik/twitter/commit/1245742f030415ebf5f1054e85fe93bca85cddfb) * [Remove support for XML response format](https://github.com/sferik/twitter/commit/e60b9cac2b14d11dcc703c87b9a74328c173f35a) * [Remove all deprecated methods](https://github.com/sferik/twitter/commit/5f59f1935d31df2756fd5bc43ae0f7e57879a5a4) 1.7.2 ----- * [Update multi_xml dependency to 0.4.0](https://github.com/sferik/twitter/commit/01105b7e7f211a140ce61bdbe5e3fc7d68c9b301) ([@masterkain](https://twitter.com/masterkain)) * [Add support for passing options directly to faraday](https://github.com/sferik/twitter/commit/4cc469761ea9e663abaf761e061a89e848ce9beb) ([@icambron](https://twitter.com/icambron)) * [Deprecate Trends#trends_current and remove the XML response format](https://github.com/sferik/twitter/commit/f9f0c1f1ddc5057cdb655f645970f771e1ebc702) 1.7.1 ----- * [Refactor connection and requests to accept options](https://github.com/sferik/twitter/commit/f7570de9f38f57e9fc6f15aa275f308a5ea69bc7) ([@laserlemon](https://twitter.com/laserlemon)) * [Include X-Phx header for internal APIs only](https://github.com/sferik/twitter/compare/f7570de9...34f29fe6) ([@laserlemon](https://twitter.com/laserlemon)) 1.7.0 ----- * [Add `Account#totals` and `Account#settings`](https://github.com/sferik/twitter/commit/6496e318ec49f5b054f93a13ea91b4f1d4bb58c0) ([@gazoombo](https://twitter.com/gazoombo)) * [Add `Activity#about_me` and `Activity#by_friends`](https://github.com/sferik/twitter/commit/35e96108c450e76611137feed841f595d7214533) * [Add `Help#configuration` and `Help#language`](https://github.com/sferik/twitter/commit/a0c88b43990a64b22b82e32301f2b91c094ab721) ([@anno](https://twitter.com/anno)) * [Add `Search#images_facets` and `Search#video_facets`](https://github.com/sferik/twitter/commit/1cc1f3cd75128f5e2c802fe95524a1afffc3962b) * [Add `Search#search`](https://github.com/sferik/twitter/commit/327724b8edcefaf726d9d92c7e9d8f5380003097) * [Add `Statuses#media_timeline`](https://github.com/sferik/twitter/commit/f1a78ea183663e9853b4b5dc128dee9ce79391a3) * [Add `Tweets#update_with_media`](https://github.com/sferik/twitter/commit/cdf717b366a9ac73133a6f576391c4c3f46f9bb3) ([@JulienNakache](https://twitter.com/JulienNakache)) * [Add `Urls#resolve`](https://github.com/sferik/twitter/commit/b8d92b9f3b9669cc7267774b563bae543295350e) * [Add `User#contributees`](https://github.com/sferik/twitter/commit/2b88f819775b9a90f4969fe03dc66ef1ecc2fb38) ([@GhettoCode](https://twitter.com/GhettoCode)) * [Add `User#contributor`](https://github.com/sferik/twitter/commit/1bb9f2000a322f9026681b78d1e8966409a333a2) * [Add `User#recommendations`](https://github.com/sferik/twitter/commit/52d13cd4711931539686a483daa15666bae297a5) * [Add `User#suggest_users`](https://github.com/sferik/twitter/commit/15dc1812f270be0f635f65091044d7cbb88cae4d) * [Move API version out of endpoint and into path](https://github.com/sferik/twitter/commit/d156fd54a8591b44b22f72890099fce0ce4d58c8) 1.6.2 ----- * [Update hashie dependency to 1.1.0](https://github.com/sferik/twitter/commit/fb86f58203fb7c7dfec30068de663624416e955f) 1.6.1 ----- * [Update faraday dependency to 0.7.0](https://github.com/sferik/twitter/commit/59a50a8f08999fa7a90b0e332171079a137c6752) ([@ngauthier](https://twitter.com/ngauthier)) 1.6.0 ----- * [Add a custom OAuth implementation](https://github.com/sferik/twitter/commit/5d2e7cc514b13842d7fe02fa7bc724136ef9f276) ([@NathanielBarnes](https://twitter.com/NathanielBarnes)) * [Unify naming of boolean methods](https://github.com/sferik/twitter/commit/b139e912ef70b55f7af7c03a27346f15ff472c7e) * [Add convenience method to determine whether a user exists](https://github.com/sferik/twitter/commit/a7fc8616e5733e4c64f98f2ff5562e74e025a1f3) * [Fully remove `Rash`](https://github.com/sferik/twitter/commit/3b39696902cc05a29bac35e7465ef352264b694d) 1.5.0 ----- * [Change interface to make `Twitter` module behave more like a class](https://github.com/sferik/twitter/commit/df5247de490f7448c35c8f84112a9e7c14ce4057) 1.4.1 ----- * [Update multi_json dependency to version 1.0.0](https://github.com/sferik/twitter/commit/9ab51bc5536e5eebea10283d771cfe57e2fccbc7) 1.4.0 ----- * [Update list methods to use new resources](https://github.com/sferik/twitter/compare/v1.3.0...v1.4.0) ([@erebor](https://twitter.com/erebor)) * [Fix copy/paste bug in `Error#ratelimit_remaining`](https://github.com/sferik/twitter/commit/b74861e75f0cdf7eaafc37162e2f040ae27db002) 1.3.0 ----- * [Update faraday dependency to version 0.6](https://github.com/sferik/twitter/commit/2b29c2109d2ca95a699ebe3822b98091a96256d8) * [Include response headers when raising an error](https://github.com/sferik/twitter/commit/6db6fe2c2504f566333c6742979436580f5264d4) * [Fix typo in README for accessing friends and followers](https://github.com/sferik/twitter/commit/2043ab4a6b723cac2a8ed77e26a4b0e3f4f55b03) ([@surfacedamage](https://twitter.com/surfacedamage)) 1.2.0 ----- * [Respect global load path](https://github.com/sferik/twitter/commit/6a629a6a06e115388cce6f1de04f45a4b0707cac) * [Use map and `Hash[]` instead of `inject({})`](https://github.com/sferik/twitter/commit/a2b0b51618f40b526f554c019a6c83b0bf9a8cdf) ([@wtnelson](https://twitter.com/wtnelson)) * [Check headers for `Retry-After` in absence of `retry-after`](https://github.com/sferik/twitter/commit/924253214efcedfeb80b4c6fe57dcbb2a7470177) ([@wtnelson](https://twitter.com/wtnelson)) * [Fix name of `#list_add_members` resource](https://github.com/sferik/twitter/commit/3adcc1592240be2679f0a2c7d0c390b574abe8f1) * [Don't strip @ signs from screen names](https://github.com/sferik/twitter/commit/38c9dd0a720ea857ff6220b28f66db4c780a7fda) * [Make `#places_similar` method return a token](https://github.com/sferik/twitter/commit/351e2240717a34d6575a802078077a1681fa4616) ([@nicolassanta](https://twitter.com/nicolassanta)) 1.1.2 ----- * [Opt-in for testing with rubygems-test](https://github.com/sferik/twitter/commit/7d92afc138cac1b751b17682fd166b2603f804c6) * [Add support for `Twitter.respond_to?`](https://github.com/sferik/twitter/commit/ce64c7818f9b62cf91f1fa5dc2e76a9d4205cd2e) ([@fernandezpablo](https://twitter.com/fernandezpablo)) 1.1.1 ----- * [Don't set cached `screen_name` when creating a new API client](https://github.com/sferik/twitter/commit/ceeed993b16f95582c648e93de03738362ba1d7b) 1.1.0 ----- * [Overload all methods that require a `screen_name` parameter](https://github.com/sferik/twitter/compare/ecd647e414ac0b0cae96...59cf052ca646a2b79446) ([@gabriel_somoza](https://twitter.com/gabriel_somoza)) * [Rename `user_screen_name` to `screen_name`](https://github.com/sferik/twitter/commit/4fb4f8a28c967f7d5a2cf295b34548a346900cfd) ([@jalada](https://twitter.com/jalada)) * [Handle error returns from lookup](https://github.com/sferik/twitter/commit/0553cdbe262f006fae149309ce51a03985ed8fd2) ([@leshill](https://twitter.com/leshill)) * [Use 'tude' parameter for attitudes](https://github.com/sferik/twitter/commit/8db1bf9dadec3a660a281c94cab2fc335891ce30) ([@ALindeman](https://twitter.com/ALindeman)) * [Add Enumerable mixin to Twitter::Search](https://github.com/sferik/twitter/commit/c175c15d320d10db542ebb4cc13c5f5d583c89c4) ([@ALindeman](https://twitter.com/ALindeman)) 1.0.0 ----- * [Fix conditional inclusion of jruby-openssl in Ruby 1.9](https://github.com/sferik/twitter/commit/e8e9b1d7232bf69ac5e217e2e18dc9c8e75f2fc4) * [Allow users to pass in screen names with leading '@'](https://github.com/sferik/twitter/commit/fc3af84e0d7358ddacf49acefe7d950ac11983e0) * [UTF-8 encode `Utils` module](https://github.com/sferik/twitter/commit/4a62f181c2ae7b931e17fcfa6532b3a3f0ed0c8e) * [Copy-edit documentation](https://github.com/sferik/twitter/commit/7873b0306d5fb1f27e4061cd024ab43589441fa4) ([@dianakimball](https://twitter.com/dianakimball)) * [Add methods to `Search` class](https://github.com/sferik/twitter/commit/1871913342a5621edfebb9a7c8be705608e082d5) * [Changes to `Search` class](https://github.com/sferik/twitter/commit/e769fabc0232cbbcb9d0fa5a07277fb9f50b17c8) * [Add proxy support](https://github.com/sferik/twitter/commit/1df33b7495093bc1f136d61b8aac9c9038414bc5) * [Make `#suggestions` method consistent with Twitter API documentation](https://github.com/sferik/twitter/commit/8393a06a9e8ca03be9adffdbfd042c176e2f6597) * [Rename default user agent](https://github.com/sferik/twitter/commit/2929e533f441bea2313882c4e0ed5593fe999491) * [Make all global settings overrideable at the class level](https://github.com/sferik/twitter/commit/66f3ac223d6f0822c8b3acd4cdcd8c84c8dacfe0) * [Expose a property in EnhanceYourCalm for HTTP header "Retry-After"](https://github.com/sferik/twitter/commit/7ab91f9d26351f52d3c803bb191d33bdacff5094) ([@duylam](https://twitter.com/duylam)) * [Merge `Base`, `Geo`, `Trends`, and `Unauthenticated` into `Client` class](https://github.com/sferik/twitter/commit/eb53872249634ee1f0179982b091a1a0fd9c0973) ([@laserlemon](https://twitter.com/laserlemon)) * [Move examples into README](https://github.com/sferik/twitter/commit/96600cb5611965788c41b3788668188d37e16803) * [Rename `Twitter.scheme` to `Twitter.protocol`](https://github.com/sferik/twitter/commit/512fcdfc22b796d39dd07c2dcc712aa48131d7c6) * [Map access key/secret names to SimpleOAuth correctly](https://github.com/sferik/twitter/commit/9fa5be3a9e0b7f7dcb4046314d8c6bc41f4f063d) * [Improved error handling by separating HTTP 4xx errors from HTTP 5xx errors, so HTTP 4xx errors can be parsed first](https://github.com/sferik/twitter/commit/f26e7875980a7b2b16285c31198601b92ac5cbb6) * [Add tests for XML response format](https://github.com/sferik/twitter/commit/54c4b36b8f9a5a0ad7c741e53409a03a7ddaade7) * [Switch from httparty to faraday HTTP client library](https://github.com/sferik/twitter/commit/80aff88dae11d64673fe4e025cc8f065a6796345) * [Switch from oauth to simple_oauth for authentication](https://github.com/sferik/twitter/commit/76cfe3749e56b2b486f2b5ffc9aa7f437cb2db29) ([@laserlemon](https://twitter.com/laserlemon)) * [Handle errors in faraday middleware](https://github.com/sferik/twitter/commit/466a0d9942d1c0c0c35c6302951087076ddf4b82#diff-2) * [Add #NewTwitter methods and tests](https://github.com/sferik/twitter/commit/0bfbf6352de9bdda2b93ed053a358c0cb8e78e8f) * [Fix tests that assume position in a `Hash`](https://github.com/sferik/twitter/commit/c9f7ed1d9106807aa6fb27d48a92f4b92d0594a7) ([@duncan](https://twitter.com/duncan)) * [Enable SSL by default (add option to disable SSL)](https://github.com/sferik/twitter/commit/c4f8907d6595f93d63bc84d6575920a14774e656) * [Use HTTP DELETE method instead of HTTP POST for all destructive methods](https://github.com/sferik/twitter/commit/0bfbf6352de9bdda2b93ed053a358c0cb8e78e8f) * [Change the method signature for `Base#users` and `Base#friendships` to accept an `Array` and an options `Hash`](https://github.com/sferik/twitter/commit/0bfbf6352de9bdda2b93ed053a358c0cb8e78e8f) * [Add `Twitter.profile_image` method](https://github.com/sferik/twitter/commit/e6645022aefdc11860fe88b45725a08bb24adf55) ([@ratherchad](https://twitter.com/ratherchad)) * [Improve website style](https://github.com/sferik/twitter/commit/4cdf4e76b6d71d5d4760b46d1a894c00929c0ba3) ([@rodrigo3n](https://twitter.com/rodrigo3n)) * [Make request format configurable](https://github.com/sferik/twitter/commit/d35d6447b25fa84447ae97558958431fa9f6aa29) 0.9.12 ------ * [Rename parameters to be less confusing](https://github.com/rorra/twitter/commit/cd7ea8de6663d6ed5ea22b590d39adc72646fc1e) ([@rorra](https://twitter.com/rorra)) * [Update `user` method to match the Twitter API docs](https://github.com/sferik/twitter/commit/cb31e4a26b20d93006d568fab50ccce5c4d1626f) ([@nerdEd](https://twitter.com/nerdEd)) * [Add aliases for search methods](https://github.com/sferik/twitter/commit/05dd3e5a058ef69f874cfe33ae35b01f574e549b) * [Add `Twitter.user_agent` and `Twitter.user_agent=` methods](https://github.com/sferik/twitter/commit/0fc68f1c52e3b754194fe8a9cfbd9d4499eacbe1) * [Add `Search#locale` method](https://github.com/sferik/twitter/commit/584bcf9eb896530a87e4122fb1a020c35744f0cf) 0.9.11 ------ * [Add a `Search#filter` method](https://github.com/sferik/twitter/commit/0b37998055158d4fed0e3c296d8d2a42ac77d5d9) ([@pjdavis](https://twitter.com/pjdavis)) * [Add test to ensure `Search#fetch` doesn't overwrite `@query(:q)`](https://github.com/sferik/twitter/commit/2e05847cf70692b760c45dd54b6bad820176c9bd) ([@pjdavis](https://twitter.com/pjdavis)) * [Add `Search#retweeted` and `Search#not_retweeted` methods](https://github.com/sferik/twitter/commit/9ef83acdcbe682a8b5a325f89d566f7ef97fffc2) ([@levycarneiro](https://twitter.com/levycarneiro)) * [Switch from YAJL to MultiJson](https://github.com/sferik/twitter/commit/60a7cb179e77319e03c595850119b63fb413a53d) ([@MichaelRykov](https://twitter.com/MichaelRykov)) 0.9.10 ------ * [Specify Twitter API version for all REST API calls](https://github.com/sferik/twitter/commit/76b1fa31588bbc20166464313027f75e3771e385) * [Parse all responses with YAJL JSON parser](https://github.com/sferik/twitter/commit/c477f368fde6161dbae59ea7bc7c7d182b15721b) * [Ensure that users are tested](https://github.com/sferik/twitter/commit/108019e83d745c23ebc92fc8a3f9f8c605b2e884) ([@duncan](https://twitter.com/duncan)) * [Remove redgreen due to Ruby 1.9 incompatibility](https://github.com/sferik/twitter/commit/83e1ea168da2e38c3f393972bf1d8eb665df2510) ([@duncan](https://twitter.com/duncan)) * [Make all tests pass in Ruby 1.9](https://github.com/sferik/twitter/commit/7bead60774fb118ef63fb1557976194848af6754) ([@duncan](https://twitter.com/duncan)) 0.9.9 ----- * [Bump dependency versions](https://github.com/sferik/twitter/commit/ac8114c1f6ba2da20c2267d3133252c2ffc6b6a3) * [Remove Basic Auth](https://github.com/sferik/twitter/pull/56) ([@rodrigo3n](https://twitter.com/rodrigo3n)) * [Flatten `ids_or_usernames` before iterating](https://github.com/sferik/twitter/commit/956fb23f82cc1f91f6beefb24cf052cf48475a3f) ([@jacqui](https://twitter.com/jacqui)) * [Add an example to list followers and friends sorted by followers count](https://github.com/sferik/twitter/commit/fb57b27e8a48abcc82810fe476413e8b506cebe6) ([@danicuki](https://twitter.com/danicuki)) * [Add optional query parameter to `list_subscribers`](https://github.com/sferik/twitter/commit/a608d4088edf8772a3549326bed1124c9a2a123d) * [Change trends endpoint to api.twitter.com/1/trends](https://github.com/sferik/twitter/commit/39ff888b243ba57098589d4e304dd6dec877d05f) * [Use Bundler](https://github.com/sferik/twitter/commit/ebcb1d2c76d45f691cc90c880d13d19bc69a6f32) 0.9.8 ----- * [Geo API](https://github.com/sferik/twitter/commit/0e5aa205f9e29db434d84452f59694d9b64877d2) ([@anno](https://twitter.com/anno)) * [Set `api_endpoint` for unauthenticated calls](https://github.com/sferik/twitter/commit/ff20ecb4f4fef12c58572fb31e5c06162f8659d7) ([@earth2marsh](https://twitter.com/earth2marsh)) 0.9.7 ----- * [Add `api_endpoint` option for Search](https://github.com/sferik/twitter/commit/3c3d73fb8eedb5d322aeb1e4431d9936226fef9b) 0.9.6 ----- * [Deprecated Basic Auth](https://github.com/sferik/twitter/commit/878c09527037ab8ec5ac11a48afece61f03861e1) * [Add `api_endpoint` option for OAuth](https://github.com/sferik/twitter/commit/be937cf93db35f60cd47288aeea45afd2ab42288) 0.9.5 ----- * [Saved searches](https://github.com/sferik/twitter/commit/d5f0b5846b24468f323cc4f96e583fd267240615) ([@zmoazeni](https://twitter.com/zmoazeni)) * [Handle null result sets in search more gracefully](https://github.com/sferik/twitter/commit/f6d1f995dc7757dda4f4ac71dda2487d56d51c85) ([@sferik](https://twitter.com/sferik)) * [Add `report_spam`](https://github.com/sferik/twitter/commit/91275b549ebdd1cad795dff9f7a1772a4ca37749) ([@chrisrbailey](https://twitter.com/chrisrbailey)) * [Tests for `friendship_exists?` method](https://github.com/sferik/twitter/commit/e778d7f5f2bed73428c854d5d788d4a2d58540cd) ([@sferik](https://twitter.com/sferik)) * [Replace JSON parser with YAJL JSON parser](https://github.com/sferik/twitter/commit/1f480a85925025aec1ac5c91cfb45b4e74e4c9c3) ([@sferik](https://twitter.com/sferik)) * [Cursors for lists](https://github.com/sferik/twitter/commit/d283cefdbcaeee6005b0ec747e8d6bded14911b2) ([@zmoazeni](https://twitter.com/zmoazeni)) 0.9.4 ----- * [Rolled back search API endpoint to get around rate limiting issues](https://github.com/sferik/twitter/commit/f9c7af99b4560f39b3542582934ae07955b6c9cc) ([@secobarbital](https://twitter.com/secobarbital)) 0.9.3 ----- * [Restore Ruby 1.8.6 compatibility](https://github.com/sferik/twitter/commit/b725b1b8a105fa3488783cef43b7db8b0dbb7c99) ([@raykrueger](https://twitter.com/raykrueger)) 0.9.2 ----- * [Make error handling consistent between authenticated and unauthenticated method calls](https://github.com/sferik/twitter/commit/f62a1502ba9c4a764d25a4179982fabd3bff2210) ([@sferik](https://twitter.com/sferik)) * [Test error handling for unauthenticated methods](https://github.com/sferik/twitter/commit/4de5c9212142ceb0206f979755e6e151280b16b9) ([@sferik](https://twitter.com/sferik)) 0.9.1 ----- * [Add cursor to `lists` method](https://github.com/sferik/twitter/commit/a16ad354be4fae3d3f86207d8c5ae8b4c2a11b52) ([@sferik](https://twitter.com/sferik)) * [Add Twitter API version to trends method calls](https://github.com/sferik/twitter/commit/6f23c5eb3ffdac6eac65fa2b6d36f08aa7b6e1fb) ([@sferik](https://twitter.com/sferik)) * [Add Twitter API version to unauthenticated method calls](https://github.com/sferik/twitter/commit/fb895cc7e645499826dcc96e2cf8727c94eac83f) ([@sferik](https://twitter.com/sferik)) * [Remove rubygems dependencies](https://github.com/sferik/twitter/commit/0f7a9ee4a1aee45bfb7136a0f6f48f9b7632e663) ([@sferik](https://twitter.com/sferik)) 0.9.0 ----- * [Add `Base#retweeters_of` method](https://github.com/sferik/twitter/commit/7de2d6204028b6741ce7a72b12efe868e074331c) * [Add `result_type` to search for popular/recent results](https://github.com/sferik/twitter/commit/c32fa818f8331a7ff02f04f6cba8739423902029) * [Add `users` method for bulk user lookup](https://github.com/sferik/twitter/commit/5723b60f042d98b630040fa076ac86e9b735dee8) ([@sferik](https://twitter.com/sferik)) * [Add Twitter API version to authenticated method calls](https://github.com/sferik/twitter/commit/69d4df515fe95f727221dad19b92665dc24f06d0) ([@sferik](https://twitter.com/sferik)) * [Search exclusions](https://github.com/sferik/twitter/commit/cb05e77adb2d771170d731ad2e55ba17bcb13766) ([@abozanich](https://twitter.com/abozanich)) 0.8.6 ----- * [Bump httparty version](https://github.com/sferik/twitter/commit/643517da3d12442883d90918b280e968809a4750) ([@dewski](https://twitter.com/dewski)) 0.8.5 ----- * [Add `Search#next_page?` and `Search#fetch_next_page` methods](https://github.com/sferik/twitter/commit/767ddaa62e8fa9e3872ddd17323f323d9f1393e4) ([@cyu](https://twitter.com/cyu)) 0.8.4 ----- * [Add `query` parameter to `membership` method](https://github.com/sferik/twitter/commit/f09b3121d4c721c34f40a11580a7a1d4ffc0df22) ([@mingyeow](https://twitter.com/mingyeow)) * [Add `Search#phrase` method](https://github.com/sferik/twitter/commit/e3e8f7e4b1ea8a315f935805e409a3fff6a5483d) ([@zagari](https://twitter.com/zagari)) * [Add `Trends#available` and `Trends#location` methods](https://github.com/sferik/twitter/commit/39b8d8dd3bb25cb5cd081cae23486fb47c25ec8f) 0.8.3 ----- * [Add `Twitter.list_timeline` method](https://github.com/sferik/twitter/commit/aed3a298b613a508bb9caf93afc7f12c50626ad7) ([@spastorino](https://twitter.com/spastorino)) 0.8.2 ----- * [Add `Base#update_profile_image` method](https://github.com/sferik/twitter/commit/10afe76daef3a2b8e10917b9550724cc9c3a6c19) ([@urajat](https://twitter.com/urajat)) 0.8.1 ----- * [Add `Twitter.timeline` method](https://github.com/sferik/twitter/commit/dc26a0c9b5a6a98aec4ca9c0a48333e665c9bf18) 0.8.0 ----- * [Make API endpoint configurable to use services like Tumblr](https://github.com/sferik/twitter/commit/c5550f1317538638b754d6b0dbbb372e069b5580) 0.7.11 ------ * [Add list timeline paging](https://github.com/sferik/twitter/commit/591d31a45b1a360d5743d2bf3966e7e9b563b9b7) ([@kchen1](https://twitter.com/kchen1)) 0.7.10 ------ * [Add `Base#blocks` and `Base#blocking` methods](https://github.com/sferik/twitter/commit/0eb099001f060431c56c1884d86abb2e53a09c6d) 0.7.9 ----- * [Add `Base#retweets` method](https://github.com/sferik/twitter/commit/a1a834575000bbb8fb430632b6bf88e19daeb8fb) ([@ivey](https://twitter.com/ivey)) 0.7.8 ----- * [Use `cursor` parameter to `list_members` method](https://github.com/sferik/twitter/commit/9f393f05c127623f4c58a68e2246a3553f225349) ([@ivey](https://twitter.com/ivey)) 0.7.7 ----- * [Fix bug in `list_remove_member` when using OAuth](https://github.com/sferik/twitter/commit/b20b770af3d6594f8e551cade3cfbd58a0647c2d) * [Bump oauth dependency to version 0.3.6](https://github.com/sferik/twitter/commit/3eeed693180d15ba4ca2370c41bd5547f715fc88) * [Add `Base#update_profile_background` method](https://github.com/sferik/twitter/commit/3eeed693180d15ba4ca2370c41bd5547f715fc88) ([@kev_in](https://twitter.com/kev_in)) * [Add `Base#blocked_ids` method](https://github.com/sferik/twitter/commit/2a5046500eb30141f55552d9b151857d08a1436a) ([@rizwanreza](https://twitter.com/rizwanreza)) * [Add `Search#since_date` and `Search#until_date` methods](https://github.com/sferik/twitter/commit/9dcd340817224fa34fcb515f79a846886ffa1427) ([@jschairb](https://twitter.com/jschairb)) 0.7.6 ----- * [Add `Base#home_timeline` method](https://github.com/sferik/twitter/commit/2de3786e75e6a1725572d3f08f6886f64e507851) ([@coderifous](https://twitter.com/coderifous)) 0.7.5 ----- * [Use Hashie instead of Mash to avoid conflicts with extlib](https://github.com/sferik/twitter/commit/365f8378b45c93ed6219ac49afec5c7f7eb85fe6) ([@hassox](https://twitter.com/hassox)) 0.7.4 ----- * [Support for user search](https://github.com/sferik/twitter/commit/54e046924431a08e3dfce06f571f71ebb76f7bbd) 0.7.3 ----- * [Add `Base#list_subscriptions` method](https://github.com/sferik/twitter/commit/2273c8a4e7c5d496922fc34551b46b22d30b68aa) ([@christospappas](https://twitter.com/christospappas)) 0.7.2 ----- * [Add `Base#friendship_show` method](https://github.com/sferik/twitter/commit/693f95a6a19dd51c047078ef969e14357930bcd7) ([@dcrec1](https://twitter.com/dcrec1)) 0.7.1 ----- * [Bump dependency versions](https://github.com/sferik/twitter/commit/d6bf8c5693f0ec4eedd641b97a7e6f0fdce75e2c) 0.7.0 ----- * [Add support for lists](https://github.com/sferik/twitter/commit/be4bffd79c2bdcfd2988ef6a65cbca8a8f6abd6d) 0.6.14 ------ * [Lower oauth dependency to version 0.3.4 as people are complaining about 0.3.5](https://github.com/sferik/twitter/commit/dd144c377bc888388099e029a0e1505a66392bb1) 0.6.13 ------ * [Bump oauth dependency to version >= 0.3.5](https://github.com/sferik/twitter/commit/555ae1fc13146b74b8df0346caea1a6b065b344f) 0.6.12 ------ * [Fix `fakeweb` test issue](https://github.com/sferik/twitter/commit/cdd9dba19f6edc21f1b7eefb66db133dec682423) ([@obie](https://twitter.com/obie)) * [Add `Search#user_agent` method](https://github.com/sferik/twitter/commit/e8fbad6a9cfdcfaad4938f7243fc971a1ea8ac8c) 0.6.11 ------ * [Add the ability to sign in with Twitter instead of authorizing](https://github.com/sferik/twitter/commit/68b6252a21e7e773d108027f693b8378593e21ad) 0.6.10 ------ * [Add `Trends#current`](https://github.com/sferik/twitter/commit/549f34903be38232c24044d9972629a86a0503a4), [`Trends#daily`, and `Trends#weekly` methods](https://github.com/sferik/twitter/commit/dc8046aea5794303f6f36622221a412a4e80f9a8) 0.6.9 ----- * [Bump oauth dependency to version 0.3.4](https://github.com/sferik/twitter/commit/88d4612b50d2be7cc300120278d53c80265e8780) 0.6.8 ----- * [Fix httparty dependency](https://github.com/sferik/twitter/commit/44aa418a22233c84cea1dae74b158cd490589b10) 0.6.7 ----- * [Bump httparty dependency to version 0.4.3 which allows `response.message` and fixes errors that the lack of `response.message` was causing](https://github.com/sferik/twitter/commit/a630b1c77792641794745d2f3cbba6c64d168d62) 0.6.6 ----- * [Add `query` parameter to `user` method](https://github.com/sferik/twitter/commit/33ae7dbd7593235efb8ea1df13638891b621244f) * [Add `ssl` optional parameter to use HTTPS instead of HTTP for `HTTPAuth`](https://github.com/sferik/twitter/commit/f46cdf9ce957b03539bd4dc76a83ce439535d349) * [Add `Twitter.status`, `Twitter.friend_ids`, and `Twitter.follower_ids` methods](https://github.com/sferik/twitter/commit/55813617c5b4cf672800bf7f9e7473904e3c3194) 0.6.5 ----- * [Fix `friend_ids` and `follower_ids` bombing on mashing](https://github.com/sferik/twitter/commit/f01c2878033cd6afc1e718f2140c82b9708e5603) 0.6.4 ----- * [More explicit about dependency versions in gemspec and when requiring](https://github.com/sferik/twitter/commit/5ce3eeb25c5b8bcd8caa8704c5d125174781781d) 0.6.3 ----- * [Add `Twitter.user` method](https://github.com/sferik/twitter/commit/cb46975eaa8aa7e02ad798ba8b7b62017f15604c) 0.6.2 ----- * [Add `Search#max` method](https://github.com/sferik/twitter/commit/e79cc1fdb306da24462c6617b118e03ccbead9f1) 0.6.1 ----- * [Rename one of the two `friend_ids` methods to `follower_ids`](https://github.com/sferik/twitter/commit/051d19db49dce2422d06181c5a3b595e3a9b85b3) 0.6.0 ----- * [Add HTTP authentication](https://github.com/sferik/twitter/commit/d713ecfbe80edde688009fa6bfbf32a2de687a39) 0.5.3 ----- * [Only send `follow` parameter to Twitter if `follow` is true for calls to `friendship_create`](https://github.com/sferik/twitter/commit/5ebf39c0538a3dfd48c6a1dbdf8558305737ce69) 0.5.2 ----- * [Add mash as an install dependency](https://github.com/sferik/twitter/commit/a8693b27791e966736415cb90335600d075f60dd) * [Add options to `search`](https://github.com/sferik/twitter/commit/096d56ed9a62a0ea53bfe3a8df588ddef71df1c9) * [Add missing variables in exception raising](https://github.com/sferik/twitter/commit/e21a4f69c68d28148045e7c98ce1841d72994e1e) * [Add development dependencies to `Rakefile` to make that more explicit](https://github.com/sferik/twitter/commit/de57b1c2834653ea4c336ed426ee8fbbebcd80b2) ([@technomancy](https://twitter.com/technomancy)) * [Add workaround for `Mash#hash` that allows using return objects in sets and such](https://github.com/sferik/twitter/commit/2da491308766e82c797c7801bdc3a440b7f8d719) ([@technomancy](https://twitter.com/technomancy)) 0.5.1 ----- * [Add data error hash returned from Twitter to a few of the exceptions to help with debugging](https://github.com/sferik/twitter/commit/72d46c4804a30b28ab351a5a0d37d6bc664e577e) * [Fix bug with `friendship_exists?` throwing a stringify keys error because it was returning `true` or `false` instead of a `Hash` or `Array`](https://github.com/sferik/twitter/commit/1e9def65277125f23739be034abd4059a42d2b87) 0.5.0 ----- * [Proxy no longer supported (someone please add it back in, I never use proxies)](https://github.com/sferik/twitter/commit/dd2445e3e2c97f38b28a3f32ea902536b3897adf) * [Identica support killed with an axe (nothing against them but I don't use it)](https://github.com/sferik/twitter/commit/dd2445e3e2c97f38b28a3f32ea902536b3897adf) * [CLI shot to death (will be reborn at a later date using OAuth and its own gem)](https://github.com/sferik/twitter/commit/dd2445e3e2c97f38b28a3f32ea902536b3897adf) 0.4.3 ----- * [Make `verify_credentials` return a `Twitter::User` rather than a Hpricot doc](https://github.com/sferik/twitter/commit/6a8efc464dcb174e41b2eb0197a79e778dae1428) 0.4.2 ----- * [Add `Base#friend_ids` and `Base#follower_ids` methods](https://github.com/sferik/twitter/commit/b70718cc31684af6ce2d1c2a11adaaba29ea7b92) ([@joshowens](https://twitter.com/joshowens)) 0.4.1 ----- * [Add better exception handling](https://github.com/sferik/twitter/commit/2b85bed874902d184e5d53c0a0bd249fd1ed3b8b) ([@billymeltdown](https://twitter.com/billymeltdown)) * [Add `Search#page` method](https://github.com/sferik/twitter/commit/977023126fbe7fdf13af53d840ca3b6807cd2d85) ([@ivey](https://twitter.com/ivey)) * [Add an option to display tweets on CLI in reverse chronological order](https://github.com/sferik/twitter/commit/40d2f1ae631dce3c31c6a13d295989e945b22622) ([@coderdaddy](https://twitter.com/coderdaddy)) * [Add `in_reply_to_status_id` option for replying to statuses](https://github.com/sferik/twitter/commit/2ecceda9fa74d486e3ba62edba7fa42a443191fa) ([@anthonycrumley](https://twitter.com/anthonycrumley)) * [Fix a bug where the [@config was improperly set](https://github.com/sferik/twitter/commit/9c5fd0f0a0186638aae189e28a3a0d0d20e7d3d5) ([@pope](https://twitter.com/pope)) * [Fix `verify_credentials` to include a format](https://github.com/sferik/twitter/commit/bf6f783e8867148a056d130f00a03679ea9b414b) ([@dlsspy](https://twitter.com/dlsspy)) 0.4.0 ----- * [Remove Active Support dependency and switched to echoe for gem management](https://github.com/sferik/twitter/commit/fbb792561ea2aba8c8e7abb946d2a5e6e3d64fb0) * [Remove CLI dependencies](https://github.com/sferik/twitter/commit/906d34db1a81314bb8929d9b5ee61519ed6dc080) 0.3.7 ----- * [Fix `source` parameter not getting through](https://github.com/sferik/twitter/commit/e3743cf22df3ad9406bf8c2e4425f30680606283) 0.3.6 ----- * [Refactor the remaining methods that were not using `request` to use it](https://github.com/sferik/twitter/commit/8a802c4b461be0d4d7f374888591a9af6ef8b8d2) 0.3.5 ----- * [Remove sqlite-ruby dependency](https://github.com/sferik/twitter/commit/9277e832daf9539e70f446b8b4f7093d8eb98484) 0.3.4 ----- * [Add `Search` class](https://github.com/sferik/twitter/commit/538a5d4b1a72ed2bf97404704699f498ab082ca9) 0.3.3 ----- * [Add Identica support](https://github.com/sferik/twitter/commit/ed06aaf27eea8852198200eb3db510d56508e727) ([@dlsspy](https://twitter.com/dlsspy)) * [Update methods to `POST` instead of `GET`](https://github.com/sferik/twitter/commit/ed06aaf27eea8852198200eb3db510d56508e727) 0.3.2 ----- * [Add the CLI gems as dependencies until it is separated from the API wrapper](https://github.com/sferik/twitter/commit/52af6fd83bb2e72b90abd6114e264a88431cfb34) * [Add cleaner CLI errors for no active account or no accounts at all](https://github.com/sferik/twitter/commit/dbc9e57d0a66ee585893b0b5955078575effc616) * [Add `username` and `password` parameters to `add` method](https://github.com/sferik/twitter/commit/013b48229786c1080ee79a490e731f4b1811a7e4) 0.3.1 ----- * [Add `open` method to CLI](https://github.com/sferik/twitter/commit/84e77a1d515f762d7a24f697786f5959d4f1cc2e) * [Add `-f` option to timeline and replies which ignores the `since_id` and shows all results](https://github.com/sferik/twitter/commit/84e77a1d515f762d7a24f697786f5959d4f1cc2e) * [Add `clear_config` to remove all cached values](https://github.com/sferik/twitter/commit/84e77a1d515f762d7a24f697786f5959d4f1cc2e) * [Improved the output of `timelines` and `replies`](https://github.com/sferik/twitter/commit/84e77a1d515f762d7a24f697786f5959d4f1cc2e) 0.3.0 ----- * [Support multiple accounts in CLI and switching between them](https://github.com/sferik/twitter/commit/35eddef783492990bf0bebcae1f5891a556988e4) * [Make `d` method accept stdin](https://github.com/sferik/twitter/commit/25ddfe33a10a252ff7d9ba74d4d16e3e25719661) * [Add `Status#source`, `Status#truncated`, `Status#in_reply_to_status_id`, `Status#in_reply_to_user_id`, `Status#favorited`, and `User#protected` methods](https://github.com/sferik/twitter/commit/d02d233000667c74101571f9362532a57715ae4e) * [Add `Base#friendship_exists?`, `Base#update_location`, `Base#update_delivery_device`, `Base#favorites`, `Base#create_favorite`, `Base#destroy_favorite`, `Base#block`, and `Base#unblock` methods](https://github.com/sferik/twitter/commit/eeca67c5693dc175cf1990c2657a6efd8c4cbd6d) * [Rewrite methods that had `since` or `lite` parameters to use a `Hash`](https://github.com/sferik/twitter/commit/eeca67c5693dc175cf1990c2657a6efd8c4cbd6d) 0.2.7 ----- * [Add `Base#rate_limit_status` method](https://github.com/sferik/twitter/commit/2b5325b1875574805fde77f30d0df84e423272e5) ([@danielmorrison](https://twitter.com/danielmorrison)) * [Add `source` parameter to `Base#post`](https://github.com/sferik/twitter/commit/215b2ca687014e042f991192281ea1dfbe100665) * [Add `twittergem` as the source when posting from the command-line interface](https://github.com/sferik/twitter/commit/d94b6bdb23dd27ff25cf170cd7ceb5610187d176) * [Raise `Twitter::RateExceeded` when you hit your limit](https://github.com/sferik/twitter/commit/d94b6bdb23dd27ff25cf170cd7ceb5610187d176) ([@jimoleary](https://twitter.com/jimoleary)) * [Raise `Twitter::Unavailable` when Twitter returns 503](https://github.com/sferik/twitter/commit/d94b6bdb23dd27ff25cf170cd7ceb5610187d176) * [Make `Twitter::CantConnect` messages more descriptive](https://github.com/sferik/twitter/commit/d94b6bdb23dd27ff25cf170cd7ceb5610187d176) * [Make quoting your message optional when posting from the command-line interface](https://github.com/sferik/twitter/commit/d94b6bdb23dd27ff25cf170cd7ceb5610187d176) ([@bcaccinolo](https://twitter.com/bcaccinolo)) * [Alias `post` to `p` on the command-line interface](https://github.com/sferik/twitter/commit/d94b6bdb23dd27ff25cf170cd7ceb5610187d176) ([@bcaccinolo](https://twitter.com/bcaccinolo)) * [Unescape HTML and add color to the command-line interface](https://github.com/sferik/twitter/commit/d94b6bdb23dd27ff25cf170cd7ceb5610187d176) ([@mileszs](https://twitter.com/mileszs)) * [Add gemspec](https://github.com/sferik/twitter/commit/d94b6bdb23dd27ff25cf170cd7ceb5610187d176) ([@technoweenie](https://twitter.com/technoweenie), [@mileszs(https://twitter.com/mileszs)) * [Fix stack trace error on first command-line operation](https://github.com/sferik/twitter/commit/d94b6bdb23dd27ff25cf170cd7ceb5610187d176) ([@mrose2n](https://twitter.com/mrose2n)) 0.2.6 ----- * [Found a simpler way of doing `stdin` without any extra gem dependencies](https://github.com/sferik/twitter/commit/2ef6c3e7280b64d5d4a956ca245e631b126001b0) 0.2.5 ----- * [Command-line interface can use `stdin` for posting](https://github.com/sferik/twitter/commit/d4e710bd3184f33775bf969b0993cbc9dff0ed50) ([@reclusive_geek](https://twitter.com/reclusive_geek)) $ twitter post 'test without stdin' # => twitters: test without stdin $ echo 'test with stdin' | twitter post 'and an argv(1)' # => twitters: test with stdin and an argv(1) $ echo 'test with stdin without any argv(1)' | twitter post # => twitters: test with stdin without any argv(1) 0.2.4 ----- * [Add `lite` parameter to `friends` and `followers` methods, which doesn't include the user's current status](https://github.com/sferik/twitter/commit/0de3901258de5b2a4a3fda308e495ee373d07ea6) ([@danielmorrison](https://twitter.com/danielmorrison)) * [Update `since` parameter to use HTTP header](https://github.com/sferik/twitter/commit/90b5b5ebb2a7d94a278e3ff374e4fde4cf850234) ([@danielmorrison](https://twitter.com/danielmorrison)) * [Add `since` parameter on `timeline` and `replies` methods](https://github.com/sferik/twitter/commit/90b5b5ebb2a7d94a278e3ff374e4fde4cf850234) ([@danielmorrison](https://twitter.com/danielmorrison)) 0.2.3 ----- * [Add `d` to the command-line interface](https://github.com/sferik/twitter/commit/a9ecddd3323ef202248dae59d049b00b88b76b4e) ([@humbucker](https://twitter.com/humbucker)) * [Add progress dots while waiting for confirmation when Twitter is being slow](https://github.com/sferik/twitter/commit/02a24d9042f3fa0235759fbbd6f34ea639a01578) ([@HendyIrawan](https://twitter.com/HendyIrawan)) 0.2.2 ----- * [Add `Base#leave` and `Base#follow` methods](https://github.com/sferik/twitter/commit/4878689063574ad88ea76343387094fc634ccead) 0.2.1 ----- 0.2.0 ----- * [Alias `direct_messages` to `received_messages`](https://github.com/sferik/twitter/commit/c2d8c55516747627452224af8faecc15ee6b5fd4) * [Add `Base#sent_messages`, `Base#create_friendship`, `Base#destroy_friendship`, `Base#featured`, `Base#replies`, `Base#destroy`, and `Base#status` methods](https://github.com/sferik/twitter/commit/c2d8c55516747627452224af8faecc15ee6b5fd4) * [Add Active Support dependency](https://github.com/sferik/twitter/commit/c2d8c55516747627452224af8faecc15ee6b5fd4) * [Add `Base#d` method](https://github.com/sferik/twitter/commit/139a820de0bcc97ece7e33435535985555231bc8) ([@jnewland](https://twitter.com/jnewland)) * [Fix `since` parameter in `Base#direct_messages` method](https://github.com/sferik/twitter/commit/41a9006be9221d7305752639ac4440b3a8859cd0) ([@jnewland](https://twitter.com/jnewland)) 0.1.1 ----- * [Add support for Hpricot 0.5+](https://github.com/sferik/twitter/commit/4aa2fabaa62c60e9f11f29510db10b6ed406e510) ([@erebor](https://twitter.com/erebor)) 0.1.0 ----- * [Add `Base#d` method](https://github.com/sferik/twitter/commit/13e031f8d2e8db6ca8ace18a25886fb690d580d2) * [Add `Base#direct_messages` method](https://github.com/sferik/twitter/commit/0f4d699a5310dc8a4e2997b82853f5466292b320) * [Add `Base#featured` and `Base#friends_for` methods](https://github.com/sferik/twitter/commit/21ca95ffa3f42aaf7728c3d5c2aa5f1f9ed84fe7) * [Add tests](https://github.com/sferik/twitter/commit/ff1ae65766109c75f80c4b15797e12a69d7c29ad) * [Remove `relative_created_at`](https://github.com/sferik/twitter/commit/ff1ae65766109c75f80c4b15797e12a69d7c29ad) 0.0.5 ----- * [Code cleanup](https://github.com/sferik/twitter/commit/abd6eb31089975e3dc65f7e0bb4156feacc97a1c) 0.0.4 ----- * [Add `User#location`, `User#description`, `User#url`, and `User#profile_image_url` methods](https://github.com/sferik/twitter/commit/e6737ec8b07b9fd1ffd96a21074a100a6fb3cf7e) ([@al3x](https://twitter.com/al3x)) 0.0.3 ----- * [Make error message more informative](https://github.com/sferik/twitter/commit/1763cd85c4fd85cde6815cc7c1b74937dd7aeeaf) 0.0.2 ----- * Add command-line options for `friend` and `follower` * Improved docs 0.0.1 ----- * [Initial release](https://github.com/sferik/twitter/commit/cd7aecde450157ae2ec0c07a2171d7149bebb74a) twitter-6.1.0/CONTRIBUTING.md000066400000000000000000000036631303650752200154640ustar00rootroot00000000000000## Contributing In the spirit of [free software][free-sw], **everyone** is encouraged to help improve this project. Here are some ways *you* can contribute: [free-sw]: http://www.fsf.org/licensing/essays/free-sw.html * Use alpha, beta, and pre-release versions. * Report bugs. * Suggest new features. * Write or edit documentation. * Write specifications. * Write code (**no patch is too small**: fix typos, add comments, clean up inconsistent whitespace). * Refactor code. * Fix [issues][]. * Review patches. * Financially pledge using [gittip][]. [issues]: https://github.com/sferik/twitter/issues [gittip]: https://www.gittip.com/sferik/ ## Submitting an Issue We use the [GitHub issue tracker][issues] to track bugs and features. Before submitting a bug report or feature request, check to make sure it hasn't already been submitted. When submitting a bug report, please include a [Gist][] that includes a stack trace and any details that may be necessary to reproduce the bug, including your gem version, Ruby version, and operating system. Ideally, a bug report should include a pull request with failing specs. [gist]: https://gist.github.com/ ## Submitting a Pull Request 1. [Fork the repository.][fork] 2. [Create a topic branch.][branch] 3. Add specs for your unimplemented feature or bug fix. 4. Run `bundle exec rake spec`. If your specs pass, return to step 3. 5. Implement your feature or bug fix. 6. Run `bundle exec rake`. If your specs fail, return to step 5. 7. Run `open coverage/index.html`. If your changes are not completely covered by your tests, return to step 3. 8. Add documentation for your feature or bug fix. 9. Run `bundle exec rake verify_measurements`. If your changes are not 100% documented, go back to step 8. 10. Commit and push your changes. 11. [Submit a pull request.][pr] [fork]: http://help.github.com/fork-a-repo/ [branch]: http://learn.github.com/p/branching.html [pr]: http://help.github.com/send-pull-requests/ twitter-6.1.0/Gemfile000066400000000000000000000004641303650752200145220ustar00rootroot00000000000000source 'https://rubygems.org' gem 'jruby-openssl', platforms: :jruby gem 'rake' gem 'yard' group :development do gem 'pry' end group :test do gem 'coveralls' gem 'rspec', '>= 2.14' gem 'rubocop', '>= 0.46' gem 'simplecov', '>= 0.9' gem 'timecop' gem 'webmock' gem 'yardstick' end gemspec twitter-6.1.0/LICENSE.md000066400000000000000000000021531303650752200146300ustar00rootroot00000000000000Copyright (c) 2006-2016 Erik Michaels-Ober, John Nunemaker, Wynn Netherland, Steve Richert, Steve Agalloco 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. twitter-6.1.0/README.md000066400000000000000000000455111303650752200145100ustar00rootroot00000000000000# The Twitter Ruby Gem [![Gem Version](http://img.shields.io/gem/v/twitter.svg)][gem] [![Build Status](http://img.shields.io/travis/sferik/twitter.svg)][travis] [![Dependency Status](http://img.shields.io/gemnasium/sferik/twitter.svg)][gemnasium] [![Code Climate](http://img.shields.io/codeclimate/github/sferik/twitter.svg)][codeclimate] [![Coverage Status](http://img.shields.io/coveralls/sferik/twitter.svg)][coveralls] [![Inline docs](http://inch-ci.org/github/sferik/twitter.svg?style=shields)][inchpages] [gem]: https://rubygems.org/gems/twitter [travis]: https://travis-ci.org/sferik/twitter [gemnasium]: https://gemnasium.com/sferik/twitter [codeclimate]: https://codeclimate.com/github/sferik/twitter [coveralls]: https://coveralls.io/r/sferik/twitter [inchpages]: http://inch-ci.org/github/sferik/twitter A Ruby interface to the Twitter API. ## Installation gem install twitter ## CLI Looking for the Twitter command-line interface? It was [removed][] from this gem in version 0.5.0 and now exists as a [separate project][t]. [removed]: https://github.com/sferik/twitter/commit/dd2445e3e2c97f38b28a3f32ea902536b3897adf [t]: https://github.com/sferik/t ## Documentation [http://rdoc.info/gems/twitter][documentation] [documentation]: http://rdoc.info/gems/twitter ## Examples [https://github.com/sferik/twitter/tree/master/examples][examples] [examples]: https://github.com/sferik/twitter/tree/master/examples ## Announcements You should [follow @gem][follow] on Twitter for announcements and updates about this library. [follow]: https://twitter.com/gem ## Mailing List Please direct questions about this library to the [mailing list]. [mailing list]: https://groups.google.com/group/twitter-ruby-gem ## Apps Wiki Does your project or organization use this gem? Add it to the [apps wiki][apps]! [apps]: https://github.com/sferik/twitter/wiki/apps ## What's New in Version 5? ### Configuration Global configuration has been removed, as it was not threadsafe. Instead, you can configure a `Twitter::REST::Client` by passing it a block when it's initialized. ```ruby client = Twitter::REST::Client.new do |config| config.consumer_key = "YOUR_CONSUMER_KEY" config.consumer_secret = "YOUR_CONSUMER_SECRET" config.access_token = "YOUR_ACCESS_TOKEN" config.access_token_secret = "YOUR_ACCESS_SECRET" end ``` Note: `oauth_token` has been renamed to `access_token` and `oauth_token_secret` is now `access_token_secret` to conform to the terminology used in Twitter's developer documentation. ### Streaming (Experimental) This library now offers support for the [Twitter Streaming API][streaming]. [streaming]: https://dev.twitter.com/streaming/overview [tweetstream]: http://rubygems.org/gems/tweetstream Site Streams are restricted to whitelisted accounts. To apply for access, [follow the steps in the Site Streams documentation][site-streams]. [User Streams][user-streams] do not require prior approval. [site-streams]: https://dev.twitter.com/streaming/sitestreams#applyingforaccess [user-streams]: https://dev.twitter.com/streaming/userstreams Unlike the rest of this library, this feature is not well tested and not recommended for production applications. I've decided to ship it as an experimental feature and make it more robust over time. Patches in this area are particularly welcome. Hopefully, by the time version 6 is released, this gem can fully replace [TweetStream][], [em-twitter][], [twitterstream][], and [twitter-stream]. Special thanks to [Steve Agalloco][spagalloco], [Tim Carey-Smith][halorgium], and [Tony Arcieri][tarcieri] for helping to develop this feature. [em-twitter]: http://rubygems.org/gems/em-twitter [twitterstream]: http://rubygems.org/gems/twitterstream [twitter-stream]: http://rubygems.org/gems/twitter-stream [spagalloco]: https://github.com/spagalloco [halorgium]: https://github.com/halorgium [tarcieri]: https://github.com/tarcieri **Configuration works just like `Twitter::REST::Client`** ```ruby client = Twitter::Streaming::Client.new do |config| config.consumer_key = "YOUR_CONSUMER_KEY" config.consumer_secret = "YOUR_CONSUMER_SECRET" config.access_token = "YOUR_ACCESS_TOKEN" config.access_token_secret = "YOUR_ACCESS_SECRET" end ``` **Stream mentions of coffee or tea** ```ruby topics = ["coffee", "tea"] client.filter(:track => topics.join(",")) do |object| puts object.text if object.is_a?(Twitter::Tweet) end ``` **Stream a random sample of all tweets** ```ruby client.sample do |object| puts object.text if object.is_a?(Twitter::Tweet) end ``` **Stream tweets, events, and direct messages for the authenticated user** ```ruby client.user do |object| case object when Twitter::Tweet puts "It's a tweet!" when Twitter::DirectMessage puts "It's a direct message!" when Twitter::Streaming::StallWarning warn "Falling behind!" end end ``` An `object` may be one of the following: * `Twitter::DirectMessage` * `Twitter::Streaming::DeletedTweet` * `Twitter::Streaming::Event` * `Twitter::Streaming::FriendList` * `Twitter::Streaming::StallWarning` * `Twitter::Tweet` ### Cursors The `Twitter::Cursor` class has been completely redesigned with a focus on simplicity and performance.
Notes Version 4 Version 5
Code HTTP GETs Code HTTP GETs
Are you at the start of the cursor?
client.friends.first
Θ(1)
client.friends.first?
Θ(1)
Return your most recent friend.
client.friends.users.first
Θ(1)
client.friends.first
Θ(1)
Return an array of all your friends.
client.friends.all
Θ(n+1)
client.friends.to_a
Θ(n)
Collect your 20 most recent friends.
client.friends.take(20)
Θ(n+1)
client.friends.take(20)
Θ(1)
Collect your 20 most recent friends twice.
friends = client.friends
2.times.collect do
  friends.take(20)
end
Θ(2n+2)
friends = client.friends
2.times.collect do
  friends.take(20)
end
Θ(1)
In the examples above, *n* varies with the number of people the authenticated user follows on Twitter. This resource returns up to 20 friends per HTTP GET, so if the authenticated user follows 200 people, calling `client.friends.take(20)` would make 11 HTTP requests in version 4. In version 5, it makes just 1 HTTP request. Keep in mind, eliminating a single HTTP request to the Twitter API will reduce the latency of your application by [about 500 ms][status]. [status]: https://dev.twitter.com/overview/status The last example might seem contrived ("Why would I call `client.friends.take(20)` twice?") but it applies to any [`Enumerable`][enumerable] method you might call on a cursor, including: `#all?`, `#collect`, `#count`, `#each`, `#inject`, `#max`, `#min`, `#reject`, `#reverse_each`, `#select`, `#sort`, `#sort_by`, and `#to_a`. In version 4, each time you called one of those methods, it would perform *n+1* HTTP requests. In version 5, it only performs those HTTP requests the first time any one of those methods is called. Each subsequent call fetches data from a [cache][]. [enumerable]: http://ruby-doc.org/core-2.0/Enumerable.html [cache]: https://github.com/sferik/twitter/commit/7d8b2727af9400643ac397207185fd54e3f6387b The performance improvements are actually even **better** than the table above indicates. In version 5, calling `Twitter::Cursor#each` (or any [`Enumerable`][enumerable] method) starts yielding results immediately and continues yielding as each response comes back from the server. In version 4, `#each` made a series of requests and waited for the last one to complete before yielding any data. Here is a list of the interface changes to `Twitter::Cursor`: * `#all` has been replaced by `#to_a`. * `#last` has been replaced by `#last?`. * `#first` has been replaced by `#first?`. * `#first` now returns the first element in the collection, as prescribed by `Enumerable`. * `#collection` and its aliases have been removed. ### Search Results The `Twitter::SearchResults` class has also been redesigned to have an [`Enumerable`][enumerable] interface. The `#statuses` method and its aliases (`#collection` and `#results`) have been replaced by `#to_a`. Additionally, this class no longer inherits from `Twitter::Base`. As a result, the `#[]` method has been removed. ### Trend Results The `#trends` method now returns an [`Enumerable`][enumerable] `Twitter::TrendResults` object instead of an array. This object provides methods to determine the recency of the trend (`#as_of`), when the trend started (`#created_at`), and the location of the trend (`#location`). This data was previously unavailable. ### Geo Results Similarly, the `#reverse_geocode`, `#geo_search`, and `#similar_places` methods now return an [`Enumerable`][enumerable] `Twitter::GeoResults` object instead of an array. This object provides access to the token to create a new place (`#token`), which was previously unavailable. ### Tweets The `Twitter::Tweet` object has been cleaned up. The following methods have been removed: * `#from_user` * `#from_user_id` * `#from_user_name` * `#to_user` * `#to_user_id` * `#to_user_name` * `#profile_image_url` * `#profile_image_url_https` These attributes can be accessed via the `Twitter::User` object, returned through the `#user` method. ### Users The `Twitter::User` object has also been cleaned up. The following aliases have been removed: * `#favorite_count` (use `#favorites_count`) * `#favoriters_count` (use `#favorites_count`) * `#favourite_count` (use `#favorites_count`) * `#favouriters_count` (use `#favorites_count`) * `#follower_count` (use `#followers_count`) * `#friend_count` (use `#friends_count`) * `#status_count` (use `#statuses_count`) * `#tweet_count` (use `#tweets_count`) * `#update_count` (use `#tweets_count`) * `#updates_count` (use `#tweets_count`) * `#translator` (use `#translator?`) ### Remove British English aliases Earlier versions of this library aliased `favourites` to `favorites`. These aliases have been removed. Ruby is implemented in American English. The `initialize` method is spelled with a "z", not an "s", and Ruby provides no alias. Likewise, this library does not provide aliases for Commonwealthers. Merica. :us: ### More natural method names All create, destroy, add, and remove methods have been renamed to put the verb at the beginning: * `#direct_message_create` is now `#create_direct_message` * `#direct_message_destroy` is now `#destroy_direct_message` * `#list_create` is now `#create_list` * `#list_destroy` is now `#destroy_list` * `#list_remove_member` is now `#remove_list_member` * `#list_remove_members` is now `#remove_list_members` * `#list_add_member` is now `#add_list_member` * `#list_add_members` is now `#add_list_members` * `#lists_owned` is now `#owned_lists` * `#saved_search_create` is now `#create_saved_search` * `#saved_search_destroy` is now `#destroy_saved_search` * `#status_destroy` is now `#destroy_status` ### Null Objects In version 4, methods you would expect to return a `Twitter` object would return `nil` if that object was missing. This may have resulted in a `NoMethodError`. To prevent such errors, you may have introduced checks for the truthiness of the response, for example: ```ruby status = client.status(55709764298092545) if status.place # Do something with the Twitter::Place object elsif status.geo # Do something with the Twitter::Geo object end ``` In version 5, all such methods will return a `Twitter::NullObject` instead of `nil`. This should prevent `NoMethodError` but may result in unexpected behavior if you have truthiness checks in place, since everything is truthy in Ruby except `false` and `nil`. For these cases, there are now predicate methods: ```ruby status = client.status(55709764298092545) if status.place? # Do something with the Twitter::Place object elsif status.geo? # Do something with the Twitter::Geo object end ``` ### URI Methods The `Twitter::List`, `Twitter::Tweet`, and `Twitter::User` objects all have a `#uri` method, which returns an HTTPS URI to twitter.com. This clobbers the `Twitter::List#uri` method, which previously returned the list URI's path (not a URI). These methods are aliased to `#url` for users who prefer that nomenclature. `Twitter::User` previously had a `#url` method, which returned the user's website. This URI is now available via the `#website` method. All `#uri` methods now return `Addressable::URI` objects instead of strings. To convert an `Addressable::URI` object to a string, call `#to_s` on it. ## Configuration Twitter API v1.1 requires you to authenticate via OAuth, so you'll need to [register your application with Twitter][register]. Once you've registered an application, make sure to set the correct access level, otherwise you may see the error: [register]: https://apps.twitter.com/ Read-only application cannot POST Your new application will be assigned a consumer key/secret pair and you will be assigned an OAuth access token/secret pair for that application. You'll need to configure these values before you make a request or else you'll get the error: Bad Authentication data You can pass configuration options as a block to `Twitter::REST::Client.new`. ```ruby client = Twitter::REST::Client.new do |config| config.consumer_key = "YOUR_CONSUMER_KEY" config.consumer_secret = "YOUR_CONSUMER_SECRET" config.access_token = "YOUR_ACCESS_TOKEN" config.access_token_secret = "YOUR_ACCESS_SECRET" end ``` After configuration, requests can be made like so: ```ruby client.update("I'm tweeting with @gem!") ``` **Performance/DNS settings issue** When you are using the gem in production (running for example in a DigitalOcean VPS) be aware that DNS settings on the server can affect outbound traffic performance with `Twitter::Error::RequestTimeout` as a result. Don't use the public Google DNS services (4.4.4.4 / 8.8.8.8) they are rate-limited and have very bad response times. Use a DNS service close to your data-center. ## Usage Examples All examples require an authenticated Twitter client. See the section on configuration. **Tweet (as the authenticated user)** ```ruby client.update("I'm tweeting with @gem!") ``` **Follow a user (by screen name or user ID)** ```ruby client.follow("gem") client.follow(213747670) ``` **Fetch a user (by screen name or user ID)** ```ruby client.user("gem") client.user(213747670) ``` **Fetch a cursored list of followers with profile details (by screen name or user ID, or by implicit authenticated user)** ```ruby client.followers("gem") client.followers(213747670) client.followers ``` **Fetch a cursored list of friends with profile details (by screen name or user ID, or by implicit authenticated user)** ```ruby client.friends("gem") client.friends(213747670) client.friends ``` **Fetch a collection of user_ids that the currently authenticated user does not want to receive retweets from** ```ruby client.no_retweet_ids ```` **Fetch the timeline of Tweets by a user** ```ruby client.user_timeline("gem") client.user_timeline(213747670) ``` **Fetch the timeline of Tweets from the authenticated user's home page** ```ruby client.home_timeline ``` **Fetch the timeline of Tweets mentioning the authenticated user** ```ruby client.mentions_timeline ``` **Fetch a particular Tweet by ID** ```ruby client.status(27558893223) ``` **Collect the three most recent marriage proposals to @justinbieber** ```ruby client.search("to:justinbieber marry me", :result_type => "recent").take(3).collect do |tweet| "#{tweet.user.screen_name}: #{tweet.text}" end ``` **Find a Japanese-language Tweet tagged #ruby (excluding retweets)** ```ruby client.search("#ruby -rt", :lang => "ja").first.text ``` For more usage examples, please see the full [documentation][]. ## Object Graph ![Entity-relationship diagram][erd] [erd]: https://cdn.rawgit.com/sferik/twitter/master/etc/erd.svg "Entity-relationship diagram" This entity-relationship diagram is generated programatically. If you add or remove any Twitter objects, please regenerate the ERD with the following command: bundle exec rake erd ## Supported Ruby Versions This library aims to support and is [tested against][travis] the following Ruby versions: * Ruby 2.0.0 * Ruby 2.1 * Ruby 2.2 * Ruby 2.3 * JRuby 9.1.6.0 If something doesn't work on one of these versions, it's a bug. This library may inadvertently work (or seem to work) on other Ruby versions, however support will only be provided for the versions listed above. If you would like this library to support another Ruby version or implementation, you may volunteer to be a maintainer. Being a maintainer entails making sure all tests run and pass on that implementation. When something breaks on your implementation, you will be responsible for providing patches in a timely fashion. If critical issues for a particular implementation exist at the time of a major release, support for that Ruby version may be dropped. ## Versioning This library aims to adhere to [Semantic Versioning 2.0.0][semver]. Violations of this scheme should be reported as bugs. Specifically, if a minor or patch version is released that breaks backward compatibility, that version should be immediately yanked and/or a new version should be immediately released that restores compatibility. Breaking changes to the public API will only be introduced with new major versions. As a result of this policy, you can (and should) specify a dependency on this gem using the [Pessimistic Version Constraint][pvc] with two digits of precision. For example: spec.add_dependency 'twitter', '~> 5.0' [semver]: http://semver.org/ [pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint ## Copyright Copyright (c) 2006-2016 Erik Michaels-Ober, John Nunemaker, Wynn Netherland, Steve Richert, Steve Agalloco. See [LICENSE][] for details. [license]: LICENSE.md twitter-6.1.0/Rakefile000066400000000000000000000012441303650752200146710ustar00rootroot00000000000000require 'bundler' Bundler::GemHelper.install_tasks task :erd do FORMAT = 'svg'.freeze `bundle exec ruby ./etc/erd.rb > ./etc/erd.dot` `dot -T #{FORMAT} ./etc/erd.dot -o ./etc/erd.#{FORMAT}` end require 'rspec/core/rake_task' RSpec::Core::RakeTask.new(:spec) task test: :spec require 'rubocop/rake_task' RuboCop::RakeTask.new require 'yard' YARD::Rake::YardocTask.new require 'yardstick/rake/measurement' Yardstick::Rake::Measurement.new do |measurement| measurement.output = 'measurement/report.txt' end require 'yardstick/rake/verify' Yardstick::Rake::Verify.new do |verify| verify.threshold = 59.3 end task default: [:spec, :rubocop, :verify_measurements] twitter-6.1.0/etc/000077500000000000000000000000001303650752200137765ustar00rootroot00000000000000twitter-6.1.0/etc/erd.dot000066400000000000000000000216311303650752200152630ustar00rootroot00000000000000digraph classes { graph [rotate=0, rankdir="LR"] node [fillcolor="#c4ddec", style="filled", fontname="Helvetica Neue"] edge [color="#444444"] ArgumentError [label="ArgumentError"] Array [label="Array"] Exception [label="Exception"] Faraday__Middleware [label="Faraday::Middleware"] Faraday__Response__Middleware [label="Faraday::Response::Middleware"] Naught__BasicObject [label="Naught::BasicObject"] StandardError [label="StandardError"] Twitter__Arguments [label="Twitter::Arguments"] Twitter__Base [label="Twitter::Base"] Twitter__BasicUser [label="Twitter::BasicUser"] Twitter__Client [label="Twitter::Client"] Twitter__Configuration [label="Twitter::Configuration"] Twitter__Cursor [label="Twitter::Cursor"] Twitter__DirectMessage [label="Twitter::DirectMessage"] Twitter__Entity [label="Twitter::Entity"] Twitter__Entity__Hashtag [label="Twitter::Entity::Hashtag"] Twitter__Entity__Symbol [label="Twitter::Entity::Symbol"] Twitter__Entity__URI [label="Twitter::Entity::URI"] Twitter__Entity__UserMention [label="Twitter::Entity::UserMention"] Twitter__Error [label="Twitter::Error"] Twitter__Error__AlreadyFavorited [label="Twitter::Error::AlreadyFavorited"] Twitter__Error__AlreadyRetweeted [label="Twitter::Error::AlreadyRetweeted"] Twitter__Error__BadGateway [label="Twitter::Error::BadGateway"] Twitter__Error__BadRequest [label="Twitter::Error::BadRequest"] Twitter__Error__ClientError [label="Twitter::Error::ClientError"] Twitter__Error__ConfigurationError [label="Twitter::Error::ConfigurationError"] Twitter__Error__DuplicateStatus [label="Twitter::Error::DuplicateStatus"] Twitter__Error__Forbidden [label="Twitter::Error::Forbidden"] Twitter__Error__GatewayTimeout [label="Twitter::Error::GatewayTimeout"] Twitter__Error__InternalServerError [label="Twitter::Error::InternalServerError"] Twitter__Error__NotAcceptable [label="Twitter::Error::NotAcceptable"] Twitter__Error__NotFound [label="Twitter::Error::NotFound"] Twitter__Error__RequestTimeout [label="Twitter::Error::RequestTimeout"] Twitter__Error__ServerError [label="Twitter::Error::ServerError"] Twitter__Error__ServiceUnavailable [label="Twitter::Error::ServiceUnavailable"] Twitter__Error__TooManyRequests [label="Twitter::Error::TooManyRequests"] Twitter__Error__UnacceptableIO [label="Twitter::Error::UnacceptableIO"] Twitter__Error__Unauthorized [label="Twitter::Error::Unauthorized"] Twitter__Error__UnprocessableEntity [label="Twitter::Error::UnprocessableEntity"] Twitter__Factory [label="Twitter::Factory"] Twitter__Geo [label="Twitter::Geo"] Twitter__GeoFactory [label="Twitter::GeoFactory"] Twitter__GeoResults [label="Twitter::GeoResults"] Twitter__Geo__Point [label="Twitter::Geo::Point"] Twitter__Geo__Polygon [label="Twitter::Geo::Polygon"] Twitter__Headers [label="Twitter::Headers"] Twitter__Identity [label="Twitter::Identity"] Twitter__Language [label="Twitter::Language"] Twitter__List [label="Twitter::List"] Twitter__MediaFactory [label="Twitter::MediaFactory"] Twitter__Media__AnimatedGif [label="Twitter::Media::AnimatedGif"] Twitter__Media__Photo [label="Twitter::Media::Photo"] Twitter__Media__Video [label="Twitter::Media::Video"] Twitter__Media__VideoInfo [label="Twitter::Media::VideoInfo"] Twitter__Metadata [label="Twitter::Metadata"] Twitter__NullObject [label="Twitter::NullObject"] Twitter__OEmbed [label="Twitter::OEmbed"] Twitter__Place [label="Twitter::Place"] Twitter__ProfileBanner [label="Twitter::ProfileBanner"] Twitter__REST__Client [label="Twitter::REST::Client"] Twitter__REST__Request [label="Twitter::REST::Request"] Twitter__REST__Request__MultipartWithFile [label="Twitter::REST::Request::MultipartWithFile"] Twitter__REST__Response__ParseErrorJson [label="Twitter::REST::Response::ParseErrorJson"] Twitter__REST__Response__ParseJson [label="Twitter::REST::Response::ParseJson"] Twitter__REST__Response__RaiseError [label="Twitter::REST::Response::RaiseError"] Twitter__RateLimit [label="Twitter::RateLimit"] Twitter__Relationship [label="Twitter::Relationship"] Twitter__SavedSearch [label="Twitter::SavedSearch"] Twitter__SearchResults [label="Twitter::SearchResults"] Twitter__Settings [label="Twitter::Settings"] Twitter__Size [label="Twitter::Size"] Twitter__SourceUser [label="Twitter::SourceUser"] Twitter__Streaming__Client [label="Twitter::Streaming::Client"] Twitter__Streaming__Connection [label="Twitter::Streaming::Connection"] Twitter__Streaming__DeletedTweet [label="Twitter::Streaming::DeletedTweet"] Twitter__Streaming__Event [label="Twitter::Streaming::Event"] Twitter__Streaming__FriendList [label="Twitter::Streaming::FriendList"] Twitter__Streaming__MessageParser [label="Twitter::Streaming::MessageParser"] Twitter__Streaming__Response [label="Twitter::Streaming::Response"] Twitter__Streaming__StallWarning [label="Twitter::Streaming::StallWarning"] Twitter__Suggestion [label="Twitter::Suggestion"] Twitter__TargetUser [label="Twitter::TargetUser"] Twitter__Token [label="Twitter::Token"] Twitter__Trend [label="Twitter::Trend"] Twitter__TrendResults [label="Twitter::TrendResults"] Twitter__Tweet [label="Twitter::Tweet"] Twitter__User [label="Twitter::User"] Twitter__Variant [label="Twitter::Variant"] ArgumentError -> StandardError Array -> Object Exception -> Object Faraday__Middleware -> Object Faraday__Response__Middleware -> Faraday__Middleware Naught__BasicObject -> Object StandardError -> Exception Twitter__Arguments -> Array Twitter__Base -> Object Twitter__BasicUser -> Twitter__Identity Twitter__Client -> Object Twitter__Configuration -> Twitter__Base Twitter__Cursor -> Object Twitter__DirectMessage -> Twitter__Identity Twitter__Entity -> Twitter__Base Twitter__Entity__Hashtag -> Twitter__Entity Twitter__Entity__Symbol -> Twitter__Entity Twitter__Entity__URI -> Twitter__Entity Twitter__Entity__UserMention -> Twitter__Entity Twitter__Error -> StandardError Twitter__Error__AlreadyFavorited -> Twitter__Error__Forbidden Twitter__Error__AlreadyRetweeted -> Twitter__Error__Forbidden Twitter__Error__BadGateway -> Twitter__Error__ServerError Twitter__Error__BadRequest -> Twitter__Error__ClientError Twitter__Error__ClientError -> Twitter__Error Twitter__Error__ConfigurationError -> ArgumentError Twitter__Error__DuplicateStatus -> Twitter__Error__Forbidden Twitter__Error__Forbidden -> Twitter__Error__ClientError Twitter__Error__GatewayTimeout -> Twitter__Error__ServerError Twitter__Error__InternalServerError -> Twitter__Error__ServerError Twitter__Error__NotAcceptable -> Twitter__Error__ClientError Twitter__Error__NotFound -> Twitter__Error__ClientError Twitter__Error__RequestTimeout -> Twitter__Error__ClientError Twitter__Error__ServerError -> Twitter__Error Twitter__Error__ServiceUnavailable -> Twitter__Error__ServerError Twitter__Error__TooManyRequests -> Twitter__Error__ClientError Twitter__Error__UnacceptableIO -> StandardError Twitter__Error__Unauthorized -> Twitter__Error__ClientError Twitter__Error__UnprocessableEntity -> Twitter__Error__ClientError Twitter__Factory -> Object Twitter__Geo -> Twitter__Base Twitter__GeoFactory -> Twitter__Factory Twitter__GeoResults -> Object Twitter__Geo__Point -> Twitter__Geo Twitter__Geo__Polygon -> Twitter__Geo Twitter__Headers -> Object Twitter__Identity -> Twitter__Base Twitter__Language -> Twitter__Base Twitter__List -> Twitter__Identity Twitter__MediaFactory -> Twitter__Factory Twitter__Media__AnimatedGif -> Twitter__Media__Video Twitter__Media__Photo -> Twitter__Identity Twitter__Media__Video -> Twitter__Identity Twitter__Media__VideoInfo -> Twitter__Base Twitter__Metadata -> Twitter__Base Twitter__NullObject -> Naught__BasicObject Twitter__OEmbed -> Twitter__Base Twitter__Place -> Twitter__Identity Twitter__ProfileBanner -> Twitter__Base Twitter__REST__Client -> Twitter__Client Twitter__REST__Request -> Object Twitter__REST__Request__MultipartWithFile -> Faraday__Middleware Twitter__REST__Response__ParseErrorJson -> Twitter__REST__Response__ParseJson Twitter__REST__Response__ParseJson -> Faraday__Response__Middleware Twitter__REST__Response__RaiseError -> Faraday__Response__Middleware Twitter__RateLimit -> Twitter__Base Twitter__Relationship -> Twitter__Base Twitter__SavedSearch -> Twitter__Identity Twitter__SearchResults -> Object Twitter__Settings -> Twitter__Base Twitter__Size -> Twitter__Base Twitter__SourceUser -> Twitter__BasicUser Twitter__Streaming__Client -> Twitter__Client Twitter__Streaming__Connection -> Object Twitter__Streaming__DeletedTweet -> Twitter__Identity Twitter__Streaming__Event -> Object Twitter__Streaming__FriendList -> Array Twitter__Streaming__MessageParser -> Object Twitter__Streaming__Response -> Object Twitter__Streaming__StallWarning -> Twitter__Base Twitter__Suggestion -> Twitter__Base Twitter__TargetUser -> Twitter__BasicUser Twitter__Token -> Twitter__Base Twitter__Trend -> Twitter__Base Twitter__TrendResults -> Object Twitter__Tweet -> Twitter__Identity Twitter__User -> Twitter__BasicUser Twitter__Variant -> Twitter__Base } twitter-6.1.0/etc/erd.png000066400000000000000000030116641303650752200152710ustar00rootroot00000000000000PNG  IHDR ( "bKGD IDATxw\sr^e,A"nT-GM,ʆYߟViZY.P7r˸?n{>s}?|(fk'ྡ:8Vk25 !DP42S {YJ"rt-áP(BakhGРlA/t:`P*ZN+UJNo4,=F*l6[p\:`0XlX,PfY,@ d2-/B@  l6Ec UUUd2LVSS#T*HT*RR*Nmy#Ng9Lۖa 4:a0Y4[ǧld2L*r !\B0Xl[[[p!\B0Yl:թTV`2zlԩ!:h4 &d4 zVX_5L^44ԫU*dZ.nkk+H( "P$YzBoT*ͫ 0UUUeeeꚪ*L.Z>f |B@ ,/GP(V,Z:ZTu*T:eRV)5u*uRR)JEm] E,%{^ܓ"J]]]lmmX<<4]T^^^ZZZQQYRRRUUY__or%NN,$P$ى"D 3Lґ466jk JQ[+V*ER!WʕVY+T7wpptrrtussJR'ݽSN\.׊=B>>~~~~3`-h<+())|Zvv\F}<}=|ܝ]ݝ\\"5 ҢʲҒ7s+J !L?((K.4ڑ h<GNק-ڵFcccͣ_'N\¼Ey7 otT*ׯkH{{{kxDnnnrrrrJJZZzի:N?KW.]BcBQo2^ʻy3;NR޾BEF􌌌޽;NvRG6Z Ν;w|rrrLVbBwKOeY )ZKi5U &3{XTTd^"##R3))ȑ#Ǐ_zA3(gPXo`JvF]MKZ>p`cbb #oG9|H||Fvrq itMR^͸p5=%-TN sĈÆ v@'^ݼysӦM۶mv-buݳotxhOo_kGxp*Bē'eՕرcMַo_t ?dm۶mظ)5%Nb?(v| ׳RO&؝umsSMֵkWkxnl6㊣GP1Ç}gT*Gl?<88f l6ڹ#h<[566n޼yҥYa#}nQ.Qx:- bDkKjalYYUNjd0spv>MkV*+^ժ odBl[8Y'2%!d4nu:UHxԐuXя[α>_/cvt=f ˜s'2rw?nȘg6Yq%-Ju›2ֱ3,Zo22~j^ S>\=;%Fm)bܸn0흤CL9q`ع~ل yP$;_8ީϕ] m]q!*|矿^Hi5zzq|^!GߊO `Ѳx絞'\\\3c>6,^uBx|Aɧ-o5`wfFexϦu666gBrBn/2G,^EbO@ׄ{fO|!ٲل#YӖ}ʯdf fnYӚ gŽ3}|֥tPurol!+j}߿+x\fT37?$1)6|oDA5_8g=Ēރu?~3)frNQa%"{,ߎoTQRڄa׮`s'}Ԅ{goEm[DU#FtV`]8੖dɒKW 9Yng߁L6;5ԨI !WR('aB.$"KW^|qԀ)9ztBHHx-#|QU^IWO/BV/ޙE*rqqg:B]zey ;{[ y$+iɯ7߷Ϟ{2nn~cQ̱C=2!3#y6۽G-)+htگ{ёgO}vZuEYʙe-q˗ȶ|bE-uw߈jՕ?m=h9IynlCC=v;>XrXj/ wrG &3ളmK)gC}2'Y&&b/Z:nז3j2y/ONI<5`0!D]q'kEZBm N!.? yBruE}g1'ܾIY+ډ !py[{: Ͽ[[!MTMRBx-~.[΄3j2F CMtB okz4ʯ>p^n ؓg_حǥsaߺA2̴sg1-1͉]Jo4 kW-G.]wk6uyRwO^&Mi{Lo˟ LxƓq`22SG_J9Xe<YW rf\PK,6չSGt g@C bQIA^ScPh~A!^3|ܤ())iܸ0GjL&Փ7Q1tmJ Ny{dn}/_8JNoXVB|Q\,s읥mY !o`P; !Sj,O%k[;\3O%_kbږkM };Ϛ\LTEi}{,,*_Dg6dnMM7x E2{o,wzw!T`h d|dObn v/;B}n[̓MMM: [[F茞^T{H`J!466lrww~Y;@{ÉGOoݺ䛟llP3|ܾiߧuw׆_ GHD9WSSSDήGy/O~cR줗^K3R6Yٵ[mܽᷕ_/1a+4B9csӷ3zVzK,Čy b&C>s<:\՝ȼX,veYiv-WTt][{Eow˷쏿hٓG:d߿KQSVo۰m6 ?g~ Tsrrڴiѣ>^cH=e$4<"ޡIeԤv_L9hήG" ~|Ϋ#]!ܾ`DAxtK,2fʌ[G-2ykR׹ y/O^y˿|ev,[s-Ebɬ4?WCcQԀ7^URi?[^ALͫGvlZ{3<߳:|;v؄\q@UU:I]lux+ 4l1fsgc>i Ok3f̘_;::ZƫΞ={Lֽ{}Ӈpx"˿Wmc'M܋RWkۛ;cV6him,!齛(ȽNظyz 0ߐ`8w kod3担 CBBn;SR?ٳiiiT*W^ ѣCFO-4mdUV*\֣wƌpy~.;o# I}{h4?~… L&3***&&[n Qh7h<;2۷o߰q㉄:ݶנ1'DDZ;#t#ʱ};OS]Yeڴ^|ETK'$$1bذa\.3?4غu /^ }# 7Nbohmh0\J=|*!t|Ia){_l6_v cǺ?OƺZ]__hL&Vm9Hk`L&bY} #/;v8zhjjjccאEfCZ;}++.L9|:>#9ɠw3vAQit;v7.::FFV.rFP(k~[Vk:ZPfRTWjL`l[-<O B.x<[Xlgg'tzxRR}z-Jzȑ#[nÆ F;^uʕ̫rB/pvٽSg'SvTYZRRp fYQAi2B #7n\~997rrrJ !TC.upvu EN d4G! IDATUWUWկv(Okhh[~=J}jcccPPT/^t˗rsC|hh.B)-Ϻy)r9nttСCcttAtL J&TWWd2LVS#2h0d. 8<>\ҙ`2 &O e0LO d0 Fx‘A3ZF FiFNi5:MJӪU:ZSiu؈Db/88;::J`oo/HlllUl6?~|,kΜ9={v"h37nعs瞽.fSll7:@.]W<̉ēigOשbc'Lзo_*jt^jZ&T*nyP(JRT)UzFfL&di`RiTKBa2Yt[[bs!cy۵ E&;v?[+ t4kշo___E͚5w߿='Mu-Nzi֣;'&Vߺ~!-#lVٯB.۲'7O#΁Eb >}CGjv"x"Q.\h h4ZTTu]Iӭ꩓:hЈKnIs/$0gڲi͊n=8\ed vmC-wMkV#؝|*V/vgfZF*JlZgccC|6)!DY+W)*z2q1Q$tM8g-+M8u1mzAfFPo؝u19^Bȁm<}xtrxƆ櫭()zm°kW9\oq>|uj=y׳,NHM:rҢ*joL{= 4pѼٿdδyٙ!Ue_}Vݖ{^u3ޙ>>R_PN~7om?UBYϯ"FO~jz̙ްm}Gݷ~={q 맽O v0̨Ξnjl$\J95`p$˄ē^],=4EQ2f rW~\]YB*ee4t?eKӝFnHP,?m6ܺ C1&X!l98I'>H,qtqډc8:;9X5ǟ͋2l6WWޗ'2K nZF֖}x;СC/<_`0,XbŊ/r٣GvիZϠarCcOޟ}b`RυN`0Νs ssfskқF!$ը !.]-plN@tpAP|DMUe%yMA- Z$N -nKћGh~~/UK=[d ! 9:w/o~=" 5pHۇ_`CCC===[~w#+V0L'NvLRBB**:NMI<%'ʫ jjj|چ:Ν9oM\=ذս c HTRR2sL.صkW???I #nڴi"haڴi֎aBJ }_8\^.$ AP",oIL6',هhs3jljji5 &zVndd؜A0]I<-u"hN^vV˷UWfRkll7ջ{NyuWg Mk~}?V~|g}6;;;++֭hޖ& @Ω1wgȑo7nh,V.]:w>cOmwf]NO?%;"t쓑t!Tw?A88I;޵ះmeP˷]d4)#ER :e!d6(ܙkJ<<R)䖑ƆrNsrXeZ=@շgx!nge0gC딊';ܸq~͛ݻhѢŋO8_jUFFFCCC;'N<x*9|rB=z(k 3kpk1×~훦}NO^}wmP(o|moDw555Ez?7&Nzu1#%i!w*V~`Ą)h=rh&UBc.\ vmqrqѻngR)k[_0xݫ~jB*=g~+b[&+ $c0Mz慙gxϰev,[s-Dbɬ4=oԩ~Lc0={ٳ[oUTTdɒ={FEEyzzWjx\P;}k׾۱i4聅%ջKWki'uIdBPb/aQ㛯urO&۵a*e8:Pm^贚|ڥǎEDD:]zz s pqqyi1#κum۶hѢ0kg4ͳ&%!_WS٤!.-Y_f933ԩSgΜQ*>>>4hH$jx.\]VTTlذgϞvvv֎N:}\=:uvf'uufƅ__dsř^W^R 6# Bqtt8qb׮]bq8@fY,H$bX¿q8ksΕ+WzyyY;SA&mذamRS}cFD$xx%7O;s@NUWWg}fƌ/Z6..n޽2,::zڴiGt2F&d2RP(J_RR*1Lht[`2m O.Ŧ bsht:֖dP.mll,ht:nۺ zlԩ!:h0FVCQVPoRשM&AjL&Fm4LFޤhZ.NP$ EBP$ BH$ $H$jۺ466:nʕ q";vغm{FzH, 3 v{kG'`zBҩ3 9R3L|g(Qcc3g6o\\\|+b,/j:%%ܹsΟ?|]"uu%ۿw@.]nRs3g4h޽{իwޮ֎ht[޽iΜ9Nw#K.eeef}].BBQ'>޾R7OgW7g76 ~ },!!P!h4 տW[615{)*,JOMLKLKJKLKL{Y\\Da0vvmll^;vqӧOSPx5ӧ7o޼y捛72FMܛpmţ[c6CuLKJR=~HJenn׮m[-[rm.\}v&Iu1YYY/^HNN6|O~"))ŋjؘmfiiniebna.6131545 &bYAL/dfffeffedg*rCOeckذ#99yʕo&:GPRRRΝ;w׮Kl6ǽY /fZ7n ]ܓG޽}N~njٲUϞ=zݲeK:Nuƺ(##o6mZݩ\nnnFFFZZZVVVzzzfffFFFzzFzFzffF.bML&&BPl"41Ħt萛/bmmMu"@TN ?w3g<~lddگfڸ7kbQ/ED~ /²W{޽ 6{tt;P?YYYy)T*҂</ E4'it@`0| &FSjEMqQQQHj:VV JR*+|T"h AAAyyyӦMСq>u(<wSRRrҥݻw:}Z.94lݡoǮmڲ\T^QĵЈܣhm۶9D" ~/ҩS'@R,(((P( JKKR^d%%%2\ VT*ZU!bTddd^mq\.p86p8r<O P(|~C}Zv֭!!!]v!.Pŋ'N1-=mC/¤;N |@{yZ<;֦C'g7炼[wlTVSC\ɵ+<*VL;z'ݲ[-U{7]2o@g-;ȨϠvĎAnL'S5 .|7TgF9rdÆ 7>oT'#x+N7w+Vw󰥵mMRYljFkب[ 懚wGW9df-]p!\}*bN|Gt:KٳyM`gؿֶvP`tꫯ>Nm۶k׮3gɓ-[fiiIu"O _ z꜕{JuW=.XZ/ uZc6G KkQݲ.73cr $>%:uƇ=JG⢢?sK)yu?ص]<׾s/v΍Hpp6m?5!fU"޷eݣ oo~ndl\1Go{7%>)28y`YKJWdft|%>1BlZwmX%21oc=Q|@hb{ /w1Y,?[-*,<}CLԝ.n{t|P22z}-[^ mҤ աjIϞ=:ժU+觟~ZlՉ>~'J'ضVBBѥSn_d8T*vltXLCK˔; +ܿ}#<tc/ @yWC/:6ahĸgLOI^2cAF㛕tON+\!Mu뺋GSPt4x~c gs2Fe۟JKWkM`Uc#׵NZXG*Rۻ^t oaffb kkYf%%%QBN8s{:KZr_;t!QdFwa;W!{juqOb1?6J !dc¬;O9:BTJŤ//k !VE3KɮלB%i ʶkߡL-^e_ʖyy{_qpⰀ'VW;rklݒyNoOLԝ쌴q3U핖3S"F\ 5kզykߎ]$6v|g&./6۹neMer2ozk/ 󲳼|`BL9`⹫>lx6nߵ!D=;;u BĦf:m?M;88sλwtL&~uP( ?3~wGGG|̰BȢE;YW1ױk䍫Bȃ͚}5VÝaNʡwR*oʮcq="d:"4nŨцݹqW4jUY@8rfgk~6ۭ;ׯH -NBC Vlpy5{B:pz7?!+f(<"J݋;ױGB&}>!޾}=}t_VKJ"o^{e*J---~O#>/ڹn%!$ImFMi[vʗmDz6 LV!%jÿ.)х!KJΞ c6#xNdk',_'~nV[ͭi4ZP,c#9ֶݏ"!.%)Y6ϲ\) qUZбgù|2Aj}DDAdΙ3}Μ9ThH^^!l :˯S7(eZ۷] vz}ûFF5r Na_35-%91gͫrN]A_2Yvү_6iѪW*eedT֒Ow013'/2HNxnNCN&HLuӺuG|`ddxsϫW:Ǧbdd4xût6uK<!۷]ׯtJ_bieoϦ5=;G.+-VV6NIMJKK#o\%4kAV:|sZX6h*wr8w4?CI Ϥ5ЎMBW^T=l6TxL&300P,Ϟ=[.Sc# fشbAޢ}^Ӈz3x:f5 !ɣ2Җ $Mz&AkWoX۴Oc۽wKU fUzhpVuѪfńo=o:JգEjZaPm.~Ys'g~3‑ߙK<~5kagOLz`jRɳt*_t'P=̟< gҚu?ƞk-QX,ww'OPpe˖̙3GPࣂB5jeQFKJ~:QD&f}n{[xǏ"65k"!Kk۾CG]:u~č%kPM#pIc !t:sS,ئCnڊ r_<ܩW?Ys6ovoAQbc7L(߳zWdm /{jBjz b8۪mǿ}ތ3&Z4kɟ}&A7.i/0a{\"""ND"ҥKL2%KX,|$ho^>!cƌ \’8P*YV6vl.,AG}ߎ]q\ZBTHmm*/<~٢JШU9 F]s%%kްjȐ!ﭯ_xǏs8gϞ͜9sSL: GG?n߾=dPL6~!#tl^ouܓ胗~>uܓQk  VBrrrFj*OOOTǽ{̙:,Ƃ uݘ1c*勯;)61spvhT7s/'~OskUƯ=^8s@OϦn!!!Ϟ=S(@ PxgJ$ƍS:lll\֭[Pa#\||… g4{}1>> i~n>F\ǯJKK_9sSĵ-Zx/Z[޽ !YYY݋Riٲe֭[l),4gH4sLTߚ5kBCCW^Du G&Ϟ=wcddܱgߞxa5$sœGSڷ0c􀀀~<{,22222266oؘ`Æ k֬:@t_555uTPxosν{=~cek׵7tq:@MI/>~fCo|||rRuֵk"##i4oNb]BBB{zŊ 8 fyP}OP%/_^|ܹs;t@uz G^Ξ={+WZƞ-x6kkjnAu:WTXaԃ7݉Qyyݻw޾nRyՋ/>~¢sν{@}hZO>%}U\\\PP J #J T*UT*JPH2RT) \&Wjl6122 ' PĠӹ|pyncȘ |q_.Pd E: jB4jN%UTKzBB.#zBNtjRjԪ⢢"Z-֨%\/+dJ#* IDATtR:.x"H(x<>o(Nx&&&&&&b?XHW|4h@uGP3juXXؕ+Woܻj]zjٲCC§H.-wQ혨'h5ri׮mzQ?ϟ?t˗ EV|}}i4ZmfC >| j999999eEi~A@*I*U  P$\s\p< |c}.ᅧ"~j BZT JѨJJШUJP Z]QJC\fX) M&&b+-,,ͭQTZɓZ @աjN{axxxx+WXFv ]z7rkċmh ccF?}09.V.9ڵk׮M6A--::.22nݒH$ٳgMV;Ǝۮ]  CQQYQvvNNnnNvTZP֙d "P"@$ DB/ "HjmU!"LKrB&3|VrB&痯RpfVVV憂$CeD"H$t:[_&Lйsɓ'SA|X%%%wލ?#Fclvvph’PhԪb<--ȧ\\[nٲe֭fYOAA ?. Au*>}z &MDuPWT{bbbZzzFF"Ċ/ DbS R"b# SȤٙ T!dfe*dR\Irz3Ͷqvv)/YO]vmѢE-: @}#U:ӧQQQ߿BAEN5pvqprqljm߀`Rꐼ)/⟧$ƥ$g$0Lwww4oޜeҥK!!!oӦMmѢE4mܹT_xlc@,,-%+3KԌPiԪ쌴ܬ"C7.ggg޾aCGGGdž Z[[$Z͛[l155: @#XJJJllgϞ>}YӧO333!,M66 l ߍl#ÇURHOO}"=E䔤\N nnnnn...FFFT~_qqqǎ 3778p`>}MY˗+W: ccc 5FIIII/_( C3sK]+; kK+Cɢ6<| r333r2s22^dfH+!,##;;;GGdžj$gggwww3O$~Yti/;PxuL&}illlbbbbRRbBb^^ᬅʮJ SUqQQvfz^vVV˜̗)i/uZ-!4trrvrjذΎPjj}$ɰaúudֹuvqΝM6Q<{ɓ'?~Ibba46cRbe`sB&MO}"= bllܴi''ƍ7iͭnb?~ռ6n?lٲҒ, ~OOOOMMHMMMOO255##3''1[ljjbfabn!41515[MĦf|H "T^WȥJ\)IyؘrJPˊ4BR!/ԨrB.Se T%+2áR(?23370XJ$Ksss KKKK?[[[ B^;tЙ3gD"ѣ;uDѨtc^z%HX Z=z-Z̜9,u ۷ooݺ5==_~%j ڇ￟;w筢sΝ9s6,,ӫMM}h`?tڸ'11F_wZQaa o>{ݻuuի/^|y˖-Pw)--~-[T*՘1cz]ۄZR۱kMD)WΝJOMf0 `.6CK}_V"+:%:]˲yM+#EBܭ/}t/B( ̘1m۶6Uzz1cƎ;`jY(<㏔!C1d~O>}=ћz3gD&]ҧ-ks'BH&vE;۶K-{>Hx~j!$7+΍zk=*|߾bn!,#3|;6cT]|Uzj˱ _iV)wZmֺ᳕U=I]xi_y xue(\FkӡsA^;6*RN޻e]~'[*65Sn^[dn[wC66|ޱb:UORޯSLdٳ3fL-VV4jԨ}7gPxP1CSN2dȨQ>oKJJ*NNN֭;z]Ν+H>D,Cf{7~֐k?@5=.XZ/ uZc6G KkQݲ.73cr $>%:uƇ=J誸hRe^>~vmb1B*h֢DM~=ۓ?+,XXt|PA# 6XdbڽߠWܿ+{ң',Ĥ7/{hmY(6l: uGRh+ܶS}W|Uplox,o /۷eݓ-[?**>%BHQa7B)lȷa| ?ۈ1?n_ԥK/rӦM\.63+$$d׮]gϮy:foܸQ}bFS˿'矣FK!D ]:uKCB~hǦKD1dL ٻNB߾z"ϓegUl1t;۞MkM]7 =2qhû #=~/ $4ZJBܥSߏ,JWk⢢y?N|a'T҉,Z脡Q%'3}٬IKM'1Y-S̘}uФxf-ӥS kN<+ .1G⇁=m]7|Ĭ#BO?{\Өެs(SHV@uwYUJڼry.=bε+g^ZZZ#L-,g,cᚭBB6gg2GrJrrrm P/`#ڵkn9ydZ]˅G'O>}yK}mZr_;t!QdFwa粻W!{juqOb1?6J !dc¬;O9:BTJŤ//k !VE3KɮלB%i oҿC3S"F\ 5kզykߎ]$6v fDfMzC1Ym/YJ!9|߸|!`HhϢL\jxy_msU>9}]~Q?=f/8p8qX@e<ٙ8mXGRNN}x̾L-,˷ i7_Pz1/_B^=M*Nfi.j -;֮رfE{uGޟ7t>soҮ]ڜeX<|$ɪUvڵlٲѣG/FcjjZ#"33N-SubE\h.=wo"\֡{j Q!|'cc`ekolamSs2o_Իc#WC /#C>0F?c5iѪkO`wmPljޢ}E͘ʫg [TZZZSW}.|FCC*T2|{_p6 'iqcv 1%̭333kyR6dȐ%K$'';::u >fL&s͚5[xq||ܹs| P(joW&OOO^ Ojm Zp&[h4ϖmGԭp6kmҸi5mB#*kjҘ6W}@N);e4_d|]Q,;3}9~-ݸl/|c5;xUvg{WQק&'M5dIN[m8|c'ݲvǚku4Jj4OڟC1cFP7ѩOPPPRR?>CrPXSťw>- 4SuK<!۷]ׯt*Vbie:ygӚ͝bcV:VqQ\ZPVWbekoiesԤ4UBHVo F̰_ǮeUGI /_$nbcҩᆱi4/_SM(<$[tԩiiiG.  Vׯ:nR!ykJn!mghou|>k"BœG;eJ-fOI04 Lȃ;֮ްǷi J<{{.z]KMjA=ngΝ9fͰF~g.4FEoBӏouRtԝ~s2j<*](+(8][N=A*=^y{zUFK Oȡwoos̟W.;sxu+_zY+_S ?g:Y7WYwF~{;6n/ JtE(:u l𩰴\vܹsL#T\ IDATҰannvl^?Ys~5#M͚ڶQNqcɆTliӡG1XBNܧ˫y{C{e,6fU $6vSmZی \*)m=!V~u]؆ 7,_`2۴jO6&-}ޗn8jE'BB/۳CRvОz4kQyxՂYAZL ;tLǼ.Yvȑ#b2b۶jal; ͛NdA\yڮo|a_ԬYJ<7+Ǝͭ =JX; V\T2E(61137d[o*4`?}M@tE-[}ޗLV*kH&pykjڡi޷%"pϞڵ6T*/Ǎ׷o_j(<9s椥^Ʀ~w7ojI5رcSL=h6p$;OtBHiio]9wjh=r݇vn*˝9c/­bŊ-[Pzt@mrK,177_Ri/'~ho_=_"wi=k숈kz]iii'OߪRKtȑ#G8pUы/ݻ{gϞZڵnٷcVm;ryU*jKJ<}%gE"СCFٶm[ɑ#GQi)"݉}Q333ݻW^T{g ,PT+W:PxnZm BRB((rBQTTVJN"FMt:]$EbP`  bს?\.sJKK/^͛7Y$ɴij-tnݺt۷oGDe26Ӹg6MZxzDb3|t:ml;1ܿbyyy6mmddԿD"Vǵkז,YrwqUWϽ̻\A *{ieSM+--s\5,A@{u3t?s>9Y(#455ԔWUUUTT֚ $RT"Hj%RJloaabs `0\-i`2,6kd2V &ҒXXX8\:i4} M:]Vojj^RFRi2J`ШUZAmlW+ Vըzy4[Nh'ًD$X,]\\PjSL^`}M<9.._o`h4fgg_x… /\!y98Rsjrn\P/vrճgllltty>Zo߾{644 }͎TDD"1!fg655B,N.bW7Gg7]*;6uҪʲ򒪲ҪRZmѦevMMM߼y3ɜ4iR߾}i4ZM͛G,X@uj:ɔP-,-=}zy]q R'()Ϲv=+FUFcemݭ[7[vG4m4>pn?/8t5v #b0ˋS\T\TVZ!Nbg{G';Q$vw;n.0 uJiMuMeBZS%(+i'h4GGo  ?8|p``;HI8x5kكYx::.Lvs%=hLpHx@Xx@h/vy2Hr3s3ӯgfVWYXXիW޽rʜ9s.]|k{R07 **+kj _ wptpr;88EBO`tik52D&I2ZZ[][Y^W[SSU![N\c15+//_n]BBB>}}Gu0aw}Iu :Nwܹcǎ>Ojj1$[XtȮVj)PRz)3%9+r\;.n CAF mmذ!11~*@WWWUUUVVVWWTTUV;{@|=O( D<csy\.ߖɤp9ЦtjRrNV'IF T.Ȥ2zŅӧW\I}x[oգGɓ'S(<>rS4o`pD^!]â]ܨNTRYR/g\q9`GEG:tȐ!ݺuzm#))>[jos%K*++; =ٚjkk%IMMMMMͭkjjk%ښ[!VV\>屹<\pl.sx|bsL-bsZ4644k4jFתEEJ\,0RJZP)J^qiog/E"X,DͯOh!JZfͱcǺw>}tGGGUVT 2&)99yΝۗp?&3#jj\Hp29TyI@ 򬙍 B@ |@ h~moob(Y{Ǒ?ӧ?3TORRҼyvPxd2%%%ڵk]%^>CFjaaIu:4J /&L<~8=-c/;l0T C\r۶m=r}H'ԉ455rJ%5FQT BVZT) FQU*Ih3ͱb2Y666 B aeeMaXVC !.h4Bt ^jl56Bڦ&!DQzBF2BN1oE^mlh,;YYYXl[[[&.fX<lֿY,n~- ڎ^?l=sLPHu"BjG7o^\\Y ֮Y_זzxlaR :ښ3G>/E[űcHsuz ƍ{W_xsǎ;fjAohhh4:NRz\n4r^WT:NјBZmcc#!DV755B y\n2M&\.' FRyIZzب666 ݋x !dB8l!㚏k4FwrVVVl6֖`p8<‚盻=lTx|YYY/9sfLL q!dʔ)QQQSL:@{Ce˖mOkka/,mR/TU?ƆmQt:Aw8QIA^~.1vFuݯ{~eEׯ~wW˲K[eJppCBBo]]!D(R ঑#G,X`ĉs΍~?.[EPP^ *%PxO/^oK\[2ۍ 68R!W2Ζutkg^lG3Wn^whן{ۭ?׮/^ȽedG~`L8vh_-uKg?f۸zz1N\է}3e˖:;;,O6֫WķzK*@|E}gΨQ(nܸ#xڠZYyy/]ti;Gf {Æ [jդIm.,,b]tI F{7|||/^\XX8o<&]ΓPGj hfCmû&'~oeŢ%Us]ּ ӏrpry-.TU~7+M9}cqosZD"-Zcscoܼ|F &{O|CΟ>~lȘ^Ͼ:!Z{fW !h4ʅ}!Ξ!qۃ|Ƶ7G}iҴQ_%we+8MѨU܂oJH[XB.>npO@y}>x.\\(r-s"BH勓of?}E?3Y;3E!]/wl΁Ƙd$TO5Q[`_kչYV̰m_:?eԤTe\õZmuuH$: 8;;/_|ܹŋ===g^wwwVZZ>3t(<V`2VZ=jN.TgֶG1 t s]"R.5wHN<dz(/=Y3Κ8>)t! y{!~~4˸lemu[oO'DDas~gKk*+<}v LQc"v9\sVKYnk av.]Oͤ΋SSS###)Yxzz2 DKuc~'|2k֬oǧ&Deee0@ǁ#h`#Nٟ5-|t>amjlll/Oۏ0lэ\ɔx+͍ ׮ \=}Bvo^w=--+Ke0 !ٗ^߷uɃ{Ǽ6h0>omlmmx=|nFM@ IDAT~[nZ(4;_ p ZNs8ԟ,k…|ٳ-Z=ggvS ?zheex^̈3 .\HQ+} aB˳splpv0yUDNέB!Vo8CEۿ|NR; -ybB źKظC}|_|kJQSGEѸ|\.0C/.@GfmEEE0sEEE;Lq`#h...es&Wc9]{x&$+F e0R.e2<-!$~Wޞh4uA665j}%E'  hSٿ0Q`>6%wk)ο7`ȣ%| 5Tt|}} mvL̵3gOm:+W 0̾}ٵ <"+G£l BHTl\ų~vG8}CަwKDxfk,]cR.kjzz|ϻG=`zc_naԐȮ4meM:ݭ:WeYIIQe-XN[9q`g'BןT/J n;nC{Ӓί[ƕ?w v1l}XOg?/wdwf~]5pԘ?.h?7Q^xmrQ^#|JRrU}G2is<0*%Td]mNR懯'NhooOUNG$Bd2* l~j>FV OcРA'O^4{pqn "Hx6£n=!|]Ƚ\F{ā=I#l糾x2!N1ܱƘ> 5ޙ%w}6:'ky>Y񗟾;1g9<>O`w?|VP_; xEԝZSS!DTRQxŋmlDT;;;BH]]Xi@36@KtG$_x햰J);2TgyiI秽N>|_~٣GVcQkj<0t:???O?ѣvjd2Y[ 1Zkv)99/>ʲJ *JΚ7|+TgiC ޥ9۷o߼y3ͦ:Td.'0\pӒ mCǡض- 's~G Ph48;;S౼UUU_~e<<16y$Px٢"Du/jjiӦ/XuPxOxmzԩSN=}_~|D{G3G?3bHCZS}ӇJbȌݻ}|||}}͟]\\tyںйt:Fc0J%!D&BT*mL&\ޒLm<Nl+++akkkmmbZi$^`w͟?Fʰ, OSGNׯ_oݺm˯={g}BNUNޗv/x1c^w/juAAA~~~aaajj޽{u:O```@@@@@N+++B@ JTg*544jrFh4jZPhZsZj4JJPFZTP@m~ K .bLP(`XL&p\&d2dX .Km~h]Bps믿F*cb#xа4Pի۶mۺukaawLgb⟉e`P ::xՋLN8zdܸqhy PVVVPP\n|~[/ϟ:u_HH{GuheJ"4Wd:YL&drmClچf3Lk[cmðpֶ6 ͱe0mllll-LNgs6Gј,E+HRLzZ77u:]c`0h5jɤV*ݚt:F]456j5&Nu ZJi4|_( /H$DbX$ڶrMmݺuӦMK.kю=aÆ S@P,99y߾}Gjeeӣ{<|Z$QȤωRIې! 6t^Wyy9!1 (((88;dĉ,k޼yTǁRJKKKKK+**eF55ZDR-,-B{. 8<>/\'r._|/|JD&\˔:\TȔ?rN))2TPD"H$rwwwqqqqqnc25kְmΝז-[Z%@LJ#(4ͩSf...T}0Vc0ܢ"""g6lذ{nΝ{VסH$Wfgggfed(rB/?ALF8O4y(zN쒢}S_pppHpppppddSZjjj:uX,^p#rرe˖@(<NL榧gdd\.,('Wwo_wowo_6Fj7F0 FiaASޥK6Mub0 RRRRRR222zk׮OFs׻RRUUu%nYY F{x{xzz[Y4 IuUnfzQ^n፜sºt+::::::((g>k׮͘1c̙ z+V8putX(<'NιqR0ߵwp]Įnb7Ay564Hj5U%%e%UeU&BWHpP``````PPP@@ǣ:x婩iii #<<<&&{T{tSLسgO?Fu`0ddd$&&pK&?hp.bcBPegd_̸QݠGGwً;ҥK֭[hT5xڠ|2XV;;:;"G{Xh qB_nd02R^$5u5URIM]MJoQg3///''y׍˗/_|Yz{{w=&&&88ӽ-frqq9rܹsKuΧ!99911sΝSB{QXtL@hx@hЎ$hlhμ\w2""w>}K$QCjofLL̇~}9soawoܸq׮]m BIZ-$D"JT"I*^Y.b,-iie`,,XlNgs4:t6QM:]VԤj^RMFRa2JhЪT*BQO@ f㧅 ӫW/wwwovԭ['RCkjjJHH8x nѽ%_r3'K\ސC5jȐ!BtˬYj/ݻw۶m۷oo` `P*r\RT*RRrEccFt*J (ˍF\.7JZ6 [ƭ- ֆbY[[s+++kaai4@ <qr|zSRREHuuu{ݻ7СCk֬ f͢:NGd2׭[_ _l= ki}ec)ʻ~_I'>_3f ɤ:ZPPP;̘1cС;߿y6 ѠzEEE gΜ)--DqqqYfOT~TX6lذn.!^Tx0BxԡOg2^zioKu.-[6liS6l8{ڵk.@#\P\\uߵkWϹ0aСC322jt'O?d3 !]($Gl;sKqA^``O7- k/+-j͚5YYY˖-k` :ׯ'&&&$$TTTD}4ӓ<&i >LѨJA>|x.%Fu}iz;â|W4jUlֈ5Yisrw^~>KQ^ ޾Ξ wrhYA*܋dʸSϚ{=G7o޵kƍ\n YtiEEŋ4@ǁ#9yduu?ɤIN8DA\r壏fϙ^2ezmx(3! f58R!W2*8"|Ζwe ?kl :BQhgFdr9~|-mlƾ1e1oxOƿZܝ_bmYoog_kOaV}׆:q>644̟?-st  o~VZl@b0$ R]]ti4O?tŊa1kv 3d2_Xf|<8|̯eRֵy6~ FMK`ɔ~NӤ-\GҠݻc1~XIk*F8ۯUXw~:2_|xddd;lFp9++ж=⢏~WgeB;B#}cJz$9Y7?_7YZZ{얛s3Bz&8<̏+d-ko\dueEa1~`hj\iIzODžA]"]W-wJ懯6q 0Bȝѩ+}o"rt+5 sqqj٩eaaa0v5rHkk߱cG``;$Vo7trdD»(ʿSxd2;$s2>v% ,Bo\YB:yU5:]ZKgBO[~Z#4iڨB»BYxAuE]= !W[0] S.>npO@0!h0~8qp=4_ry4{ϖ,jEyl=`(!h4.Y0gu=  >/N9oLi|oӇiť/ $fyYr񂚪_ Ij^U/K+:aHi~:*6ܩc#^p܊+e-Z򒢷ޚxz.~9&9|⋖kd2jn(t:=66vſ{nݶlK/}WYYY~ryIINka;M6M=S.llm{|@IK:%G)Κ;$'2W=Zuxg_~Y3TU$%H!B_pN4Lʊ.J9vh1#BniV=I\uD1 *JΌϿ۲e U(1zhBpn`0`#x`#'ۻ+>|3fҥ˨Qzm>oqٳRTTy;gϚ< ?x#3RC"%?8lMZ c_-k2vr}B\=}rtڝ\!57h4 ˒<%:ֻL_PhnfzsLB [[f:~yā=׳2r\R)-MWv8<~}O:ۏ}I߿&H!BrP;eȮ m>ltmJ`g_[+:E{9rdVV%888W(a#'NիW^ o߾tM6 #F~JKKȫW>=G^^^rY]muщ,wbss)LHDWc`x\8kd:y>°>~#^y{zshj6Kkkث6>ouBHTބ7OoBHQ_wvx]\<2x^_R]u[˭Xէ= fՆ}ZXԦ+mSY=GSEFF:;;=ze555L&bg0juu5gΜ?G֭8qbBB£ խ[7V{m?$}v_Mu<"+G£l BHTl\ų<萸;Kdn8}CަwKDxzحtJAfZY[vm65U~o(td6yGK {7A<<}Nح`o|}A5H滧πzh:*-/+.]JtmjJrVzʸqh4СCO:tsjkk~t:}ƵΜ{o_y`V\Ͼzk[iQ+`r8mZ6))^PxO!<]D"ܹsW\i2N?kݓ%233.d2ugGҮPxn=tQ=nEtA BQ$2rܫ9W~7zV][b_qZ^ fG9rܫl?u/sw\SW?ȞSb݃gajkmZk>u-K6ae$@~?h ]_mrɽ{Q|z R{gmG/xaZ;`VΛ9cVwS9<+_A^}7De[~\ab:=uut2r}y/?t'Ӿ9gtuEY鼏3mlX<6Fɥyר}|7n8v9s8pZE``˗iH$B6F/43:۶mx_~eǎ_.\XvQOFZvǏ|>2222t%I+JmLfPd]\?MS)%vN +5ZiVZKoȆJ휜6P{>Z]R囙 ,#ETü;miΚJ55|\.;w߿/¼/_l6SL0`{ #Zeeƍܹ3f̘>_?RSS3bP{/~t%KZKy~w4t"x3GtdƄN?ӯ;JӵFz禟9{Ç,,,tYYYwܹ{nVVyϞ={.H*js۷oC:.221K: |wlmmwu`&&&feeEFF2ipFFF{ӧCo\+sAbll|d)ϊihN]]{GqkV޼y !Ct]ݼyѣ111*_?i[(JjjjQQQ^H$9r!G@\]].^xQOOOkkxW^h-pttOBnۺNn, Zo?Ђ؛W&[v uQN۵|˧N|oÇ_#9̂G/HN>}:SVRT'O9rd;?{I8#2󍌌 pLMM|>!B엽x;:uj͑3Bjjj q ޽{,gw n xs?hÇ:"?KKJJΜ9syRٿɓ' n3JHH?~TTu̙3Mf`-#hWjkk^EbX&rT&J$\&+JIL)&ERL&B3*`P4Ah4:F4FB,)!F.bJ2LBRiyA]SѨ ! NɥBVQ*!*V%eR]}}]]B.UuuuJV[T֪ZFRj5RѨkT&P(l6q8.f\aܼE|o^_\\ҥKupgܓ6k֬^z-^riiiN:qT; /K`HXp jtHISQ^:|ذȞ={SR*O>|Z6lبQx<^x5fȑ3g4h~D 6lƌ #o mPeeeeee"]TYYUYUY]U]-ߍ(*gs,6\ҿeslesy,2,Cc[hr\&UȤ2D))?dRL&I2R.S.I*ht $BM݂IJJZxq^g8p@<ܹsׯ_~FNN6 ߥ[PhO`0kr'FT{GDD 8 !ڵk{D 4iR[Y>7omyy{キ~z___ha(@jKKKKKKE"H$*---+JKoaF3o8<3.qf\7~Q+jdbTR-W$^RT,7 Vh) mllBP(qttd2Gbb{W_==–-[fxmT*w˗/^X__oaiԙgCV?JHNJONLN*˩j߽{pWWWCg|6FsكdC;~s;v-\رc#h9b8;;$''G";;F?ǔBbsB+ Kkgai-VUi55ee%2T&WUJRa]+ffnngkjccc腳3W4/hrHM4|Æ FR*4? KΝ;w yZeV=Jĉn=^ݻw,Yra.K9vؾ}u.]jbbBF=iҤÇ:@KCVMIIILLLLL|V\TDaَ.nNnvN. G0?'I'Y9YO3+De.߿cNZ7 ѣ[n5kVdddŋ?xO>7TM]]]~~~deeeeee2:amgoaemaekek/1X}t:qUDTRX^ZҰ;$Jwws׌0lݻ[lH$|[kvqƎ;$ѣ`Chi('JRS5 wttqrtuwt󰴶5tR7E.HO?|ҩSN:u7tRCZ`A>}>&RiAAAaaaQQQAAAAAAaQQ~~~aaL*mͅB\h7[ -峹<:/V&$bD,*UWV*+ʫ+UՕ} !4ڰʩT;v8qss̱4t"ByUN<ѣȑ#\.СZGo5N}Ny{{x9:Z2#aFrRf̔Eys={B mٲԩS}]׮]/\vZ:H:dҲ2\$h C!ovai IDAT3gٳЉ #N]]]RR͛7oܼy+VEE9N odL"Hy(^UFw+g=l3Nqϟ?wi7o^jjuLLL ^F'bquUuUuZT*%3OBg0Lfq8&tӔBT:Ԕd8\B322b&xrTW_T(jkjJQk5U}mR!'D'JjTJ&<< &df|3333ss|~kPbjۏ?>gî0T[[p΀a #EiiSN:u Tjf. ߹[!:R M*~{OrLMM## :4 ,Nm۶#G̚5+22R?(MT*'M4yd&P( \.H$JRTbBT*e2D"ZVRh4\QWW'J!ՄL^[[:ZMM0Lc\ؘfS(&Iө4*211WU!\.d2L333d29NfyD֮]K?~N dɃ>{'Nh$@;|ԩcǏ=x@g0B{P'7lм*݉zqaCPm/*****jĉw]cǎ\.߰aÍ7&N8ydcccĘ?@ rʕ+CBB P<hGZ;sXO*&d #vE,o߾}ǎ6 oO@p }lr+p7tGK C{fM$<w=M2rg?>[Y. :vo*)̿usŚ &Lgy{{:W3[|_mnn^__~ ߏ7$++kŊJrɒ%-_uQ*o߾4@+@;ɓիWڽ{Ȉ#tڒW}׋?^ f9w糧M-Nj.|ͫw܆ BBB/_ޒh=L ^Wee+~ۺ/9|'tw~rEk6G^B{0Օٽwț䗭MN`س}:嗀222:{dţKg2isޞ0[f\t4>}o y8;;o޼yÆ ,0a¤I/_>s̬~ɒ%-YZl׭[_>A]]s\Bm4R~LL Nn B׫mӚ'kqxOk w삺_=s|Βhtz3zzWUu466g@>n?|ʕl˕Z'p€[޹sg޼yW5k֭[}ChܸqVVVk׮^x1 l34:NjkN(Ubx.^<}Τ鳩- WvȾ{f~LheÒүYyqj?7'޻#Jt?|ߋm\[؉GvpY7ڥ'u >lBH+yfٻmwMLL;u_ Og;t'G%Zj]|׉@]Ssx\, 5 cڿ~ {ێ]6Z'!!q՚5kf̘qqk\.w۷o7t4h:taÆs疗{vŠGmҧӦe>r𬣫L[7A]ܝఞB"D65&n S?:~2!$K&#?,UV\5{gWBB.5q9`lbBsjٛn^> 5yMB&y>BHyԹ ?+ΞPb?wiշO7t~Nr=QIy߾`%*)yuS~~d5;6Lsm} ߉J,m#g J <0g}B-[xlώw7{/K=7BN|7%%:Q022:thDDĮ]N~Zg:[vvvׯ_xܹs׬Yckk殕Eysh@ۓמ=!4:[DoBcow֫o[ zz[)/E!=o{4|L86~D"Zƥ?w~0P)lw {D%/Bg2 u/R?r16aH4Z\LtAn~Ow9`?vPQ\la^QyK󔊫/<ң`}bll7tNnllͰ@s 'Wn:ˉyɴ :'ދ (RA3W8m N}ljb\àZ]CyHݽ}_?nOGmMM) o &!V}٫ 0ľ]WNkgO}w$na0Y]yw+wSSJJƒyfn={d%97g@9/5z癟CҙLo䤆b!,6'r#G.[Y+ӣݻwղkך'˖-[h7|?xxJ/H*tmڞ2 +kCxiGPcA];u K'a\*+VXZ5upHk;MobJߡcœ ! b*#Nz7 S*O?;ᓙ]3s2 +'/1ebn%~0/Q}PO'y%^y*rBt4&]R׿[ʦ)ޠ:Zj˖-fff)));v쨨0t.hL`f?jj*Fc2( G@sd:K`9}7QP:ɴqp{:yB"DNzBްbJk[xfܢ+yt"~^V r-L!V9:OdOfkjڶqdž5s{3;Bd5b_WJl2idlG|}_zi6Ç߿N: 2$<<}c2?ŋ͛?;995<<7oޓ.{Z Lإ[[A.vF |bicɗOMjmD \K}7Bq!.}N`h>>E0 3xΙ:90sΒ-mo,/;tEs#f;n2!$g|>~޾U{K lMcxr֞d:˫Hkwe?[___^Z\ROg2\\3IU2eecglbh <7w RQ^Zblbf_Ң+E_>?gΜ~䩯[B/W\122:pӕ hg ٺn۶nDw̙7̟?[T޾} ,+""o߾X\^Yqq9sWZEP^</f_~ڽ{)S4cH6dҥf3fРAbniխh [tJn“vE_:Ţ^~oУM*knٲСZOOO;wH3gΈ⠠:o,ۇ~D"p8 mٷo_IIIXXثkkk7mq1777f &`##!!aӦM{c0Y}"G 6'0С̝2Z\UgȈIg: e%Op@Nfz=gϞ5|pV^^jժLfddtRttZ cنN mLLL̲eƏӿ⋝;wO2eРAǏomGMyyyTT;RSRlֻ`hB5t4NNfZՋ^HM&M㏱0tǏl6[*vm̙ j۷\O ѣGyտx<Oh4E믿j4O>5M\\\tt~ $wwP///PZB(***++*++++**%RTrM :og0s@`ޘP4͂ RML|ǟ}ٟD:t̙3 R(D"QLLLtt1 qZ7/ן:#@jr2222Sfh7wݻwС~\.rR.d2}B&UWW7s96-l6!8~Pmͨ۷Ņ`<|K.~Zmmmbb;wbccx<^HHHhhhpp0n[eeennnnnn~~fTPPX&*r8\eqxl屹<Gc0taX4:b3Yl`P1V[ReRuJR$bF]S#JjT*D,IRB&K%2D&4$RVVVVVV......vvvOL&mllr>|422j^|ynZ *@+Rywdt:{G'O//?1ZFJKHy8afJRVFZV+Xu%,,NPNjh#5i)S9I 4i)_rRzz _]]}m__?0 ,--{n\\Vurrڵk׮]}}}k^iiiٹ999yy2bdddaieek'ZtCg BT[ZTѨ !T*'3999g:t'|򯓗,YbjjdBHUUոq֯_O˰{(@SZ6333.....*fݫ~;eB IDATחfeeee=ΐJFFF^:tܹsppppBiZT/$S9a>Bp8 K%=$a]]݉' F޽222&LH$ UHHHppp@@Aj2>>>555555%%555r]mllml)T#7 QiIA~I'OJD%nnݺ| 9t:ȑ#L2|pBH^^'|}vGGǖJ кxB.?|0%%%---%%%-- B3\<]=lmmo 7;?qANV^VfuU%!{{{v7 yFdMIMZJ'ERRrR 6maa+8*СCwrrի׍7?~4a„9CmmmrrrllllllAAg```N|}}i4ڛV޽{q%FFFvN^N^.^.\Rm 7;qF㌼'ُ,V`` ڢ-[\pa4'''gڴi+!Ç_~CZ ڠx/M&WHMKKIIWWWGaXv6ζԷ`puu₼'" w%>>>fjjuHJj('UTT( $RIMZJl6[(X,ޑޓ'On׫W+W$$$taaaa/D"IJJJNNNNN~[PPPPP}-Daa7oތHQh~94;B8593%)3ԇYuuuVVݻ3""%B-\P$L&s;gϞÇѯt9o-h4'Ofg!XXZ;XXmlV6B[+;aC; ,/-JJJ*JE%%EZ-!F;;\.[痓***Zm痓Bi۹sgNNN>}zuڵׯs!C 6{y d2 ԩk(\pƍoͥRi>A}<}-ضըTYccboKx<~xxxDDϾ}v_TWWO>= `ѢEϜlٲe˖ߞ={v۶mǏo GI$})'' ??T&&& K+;; + +[+;3 B [ ,w$⪊rqUeUyYUEyXTRTQZRVRV|;;;'GG;;;}ְ}9>n[J嵵 夆6-%Phj CN{'::ŋ~ >9&=YYY񉉉555 O8x-N:utnNFѹ{/ڟoNqo<|p7-Qi@ЧwÇj%%%͟?كnrHӍ3f„ Fҏ߿ٳwnG`ZH(??aa###3/0ZHK+3s 7xvirL"Jʊ qUEUH_3UU++ZM|ѱ5l63`9Iܹ377744tĈ999ǏD:u2dHXX+JJJSRRwvv:th``7.\PVVЯ_ݻXR4555999---++KT8;;{zzzyyyyy9;;2K3gd0'O>|+;qV}9`X=rѕ3.<2}iӦ|CB)//6mZ~f̘0rʚ+W6̙3c̙*x홾 d2X,d2T*H$ obT*drLPTJZry|SSMht!bpcffkx4.'5MR MLLT(~~~!!!VVV Nh4T*M_BrwwwpphX'Onڴ!*O;w\~}~~~;nrPpoVd?vľ]4{lWWWCrҥ~i͚5N7~QF;a{7|#oM*֊bV+U*UMM3t:X,&h4\AQ(j"HR3/'j8"x<3tpLMM|BJل&;x<d2Y,Jx<JX,|J`Xrƍ*ںP"hoNZR}Pҿ677*++SRR333j~… zԩ=zxEU*?Ͽ5!'hK>'hjӇ:ckiqᘱc_Сv+WLKK?LfAAG}iӦ: <믿իAcGtcǎ%$$EDD 0@(^xիYYY ښ%!3Igju^^^vvvvvvNNNNNR$X[[9sɧqww1cFǎ{.\uUu3G?7o-ڹS;XVR4gEq\Cz{)S͛7̙3۶m;zh:deee&MڰaasGҗRj۷o޼DP:wbaajR~gƆ}ܚָDPMZJ $B}G5y3!wB@ qաZGݣujmmQօ* (SP {vaeHKyAe9$亯'=}  LRr… y?z9~QG|wQҺsGˏLcǎ'OVDÇ׬YaÆ۷oo޼R||_|qq}}}NZ@P(nݺuZ'''B~xR>bĈӧ_tiEVvK7ʯ͠fy72vn++Z9KyKF&f^PO$*+ 9kΟfX?B֯_/R1cLR_}?*// a0}ӧLIIyÇL&{Ay%%%dR}PQ(Bb]|yҬ󗮦oc߼eW} ߲X˻}5󃌔!E'6hOJu{}!y+;45 ڼ3ssw̢Pii\YYm۶?~<((ȑ#* @@e+++‚7o,lmm=mڴǏGGGupWn橬9w [G'{gtVɚm;]9-l!>Qӫo(~՟p->1B=__ׯ7](j*N#p:tȇ?ȑ#<_~^^^ÇQQQ111vH$NNN|>/i4Z^^x2P(sG?a6L!Mtu!&<;76aƼuL, OddjѿV.6l檞ۑd\.w׮]K @<V@@@@@L& ;qℚwww8q"J-..NHHxIddѣGR wpppqqylyyyLY_P(t:f{xxxzzYYYmݺ?WۦZ"wXo`diMQA?++?Yjhb6u,lw6Kyrᨇ'\p'BSOBHmM}D<6~?aS/:"t+ ro\8g{lTi6h7=;=|f|SMt쨇!'jz gOY'u6_~=u6{îC &0abhhH}:F||F,fee_G/@͛W\\}ʕp8>:gQ^^Đj---kkkkkk[[[KKK55sssi4L&EaÆ 0an)++kusXѻCB!Z.3i*!B,:uw\>fG^B3;5臡)IXyiRVRGfe ibnq I!zMJt򈖎P2S.c2cFM+ w[ :s0𮟲3}y YDM_;aCǾlP(ϦmSGJlwf9syxAQC 8VTTZXXz:C 2dBHnnnlll||իW8d2]\\nj3sLLԤk׮I$*jff !)Hyyy #GJ""hԩu'T͙_}!wG Qd]B ?rNAⓏ <L%רBm샗l!SƯ|h*Fyp禞Aʭ24<ΫFBȟw6zY/7 =z8{|/` Mnӱ҇Ho\qt}IT0/gխ›s3iwm={viAc2NNN666?-ZMwSSSSSӑ#GB"##O:%ɴ}cccBH~~~JJJjjjjjիW !::: QsTJqG1uT==s ?FS͏sսޓdT-&gΜ5kTVV5@{puu+Brrr233r+/,, =}Wπw(W_u)A:mba'=eE\.4TkGh?c?%9/utޮUWUVh t:o-ooo77gϞ?^t#0 7`iӦM2%ww;=^N}r몓:E0$]owxYԶRǜ}wOb_ثFTVZ-4Si#M~աce9Ag߽v9p‡m=FcÂrO{/Jqqqjj:ujuuuK]GM[[[MMB&IP ñu0/#'loHBS<*+b5-B͋gP^v + L,41a~zx6\㚥k!P㗬i/:ڴwc{g ʇ"<ÃFkͻzD𰰰v]gee5 h(OOOIP7jժBr[#уf7988xȐ!hgUEEƦM ñ?8?VIJ_ҷY: IDAT4)p…} ݻwoӦMϟgX 틈000رc  L<ܼ 믿.X66djhr54U=:uheAij3' Ν[[[xO?_YI:O ssߺb*N\>ut۷o?z Y0=JW̟/׭]{%uuX^,##iښ2iҤLU ) x4hPDD j{}W%TDO9xG?k +7i˗//[=yB6Blll!}8s <xXXXܽ{gÆo?yH+rUm)16FlΐAqq#FPDQ\\5iTOKK'P(wy֭[@D2L.+,//oxT*7QWWgX +,K]]0L.`0455i4Z?tt:>}ڵk_婃O`LGV|x7޻woUO}ƺ5'%%988Կ}VúD"?~U P_ .ܾ};IT #v򲳳 r BaAOKFZ:::z:zZ:Z:zںzZ:z̮k`\^^ZRVRT^RRZRTV\TZRT^ZR^R\Z\T^Z\VR\RT(˕khjYXYZZx @w&>ÑFc6N +/-y܍MMͦLpܹvvv7dԨ8\nkkۯ_?ooo;;;zF'O,YѣFFF ѣǒ%K:pFN#ryFF@ HWjjZzzzAAOCc}Cc5uudҢ‚Ba0XXP$+ E‚"?ߪ&ZCx666ث#egg;vlAa/pU=ZP(}#izzS|8m4//?XVV㈈Ǐݻo߾|&&&_}Us;vF3g9rԩS+ GE¸ԄĔԬLTJP,,x:zfٙx<*2\r /& \ > kbn麋 (Qxxwodfh9rر\r#"""""l;AI&7n…Fjtieee7onT/++`0T=/@ٳK.]tAXL&363wߣO>V֪= <}"lmƎ3f???:%JKK###CBBRo Z߼ .ܻw/kti֬Y>>>3gl5k6$tmAP<}4<<<666*::.6Fl{;,Mͩ4W(+)Ld&Y\Tj3\ngg?`VVVtUU2^UUollN+vy/^~DDDGE ڶKO'*+IigIckkkX,{^obҡ_]]]]TTThhhhhH$rppPf@z]/;O->>/8zQOM8qԩn ) xKmmmhh7ܽU[SohՇѫ;T2SDG>H~&x.|} EFFF?EEEB44yV=̬Lu0bI0'+=]<#E&xMa2>}zիw...mrZ+)b++u6mZ@@iϞ={3gμ[n-((y@N#RSS_~굿®{G/W>fTB,J~(уG2kȑ#Fݻ7 '%$$&&&Bh4SMMS9\^ZTX\$,Jʬ";:;;|'''>okkF/#JݻZQQrU=ZURR2iҤM6իѥ͛7De ޸qӧ55q^!t(ӧOuBJr2WC146UtUK$|;"t#Ox#GX,UO ”fggKR Z:FzƺFzFFZ::Zښ:Z:T*U%WVEeQyH_,,(),(d2͆F66 YYYaGT۷o* ooCի3T%,,lݺuϟp8.͜9?~g{/rȐ!<&@gt4B~̙SdefXZ?ų߀BKe< }fPluuV&5 $&Jssssrr Bavvv~AANvvAZZ:Zj,:`9Luu6pY,qjk$bQMuuuD,*$eeQJ::FFFFfFFF憆FFFl6KTQQ|ƍD--A 6Nsu" ߻woD"?~ڵk}||544A:Naaݻٛine=hԸ;z.x ^t'B죇, /^%*..V(//H$bX$WUU+"b~F445ib0.GSSlmbtttX,P(xΪ׮]KMM>|ȑ#q@!dҥ_~ez||_|4gϞnRM x!66>Lڨ?: ;W/\8Gzr߀?lܸqoH@P0@Uϥ2 bg3fLKgϞ=qӧ  LuV_@Wxx+޽ód#ޙgޟ>72{'L`aa7+g͚ERU=@CPo޼tEgg@555Urss%}K y<^xx8GM`#h/999W8v[~S.7mϵ3H*쪾gw^Y!℘QŅf=a_CuٳQjܸqk׮yeן?5hc999|0922}8S5uvZ; \O^up_[lKՂgWiZisw~ՃdVV:vpLkZt#kw%(».?z`ͧ^CI W/ggߺs*wwcǎ:444&M4q/Ylر#GTowe)F ٳg^^V$<0|޿n84}flՠ!ܲ45aƼee6?>bA1eb5kΟ M,{xy?O~I\}&_/`O떍5~={'(@ 8wܞ={N83fzv!۴k``В&ڦ @wԁY9l}P0AgGܿhz#eMk Wl~,541sBȱ=;>[ݮR?%\:y8I3 Шӣ_b"Tz{?U ,mGOr}sXiۃv =<?Hu󖮪O\JO44!]O"y6͏2FM~ 5D7I-a&ggܣ4ݣόObB~N==Zu9o՜g3w\1}zs -[6gΜĉǏ;vᆱA[u P(^JJJzNH/윘vt^TU]Dmmq-;!DCS֥sRN֥sO"Rx$ahkbG55/ygӷwv}Ic#*[޾helZ$P!)[%D?Rmd]s+k>MDu(6taAެqCI n}S>P(^n/o`Ԓ%IBH7>nBcGWw6,]T,h}KΛt3grNAⓏ <L%רi샗l!SƯ|h*Fyp禞Aʶ^|nKp VWU  m8L&m4F'e}3Ke}zM$/?@AÔ53 ܻ~qXKO/Hܣ,Wʷ>}'dv63?:62l޼;lQ`\~ԩSw8pɓ---U=Zk%''gLEEENNk|D"IOOi: (~} MT=?սޓdT-&tСCFEE۷o֬Y}1cG{iiicƌiZOJJky+*jmmvtR@(//'hhjz=h( 'qsXi*b#p5*DA[&@\M-=CuS +cvz001myCclf/K P(Mm2UxzzZ`ߌ3ޮݏ$P(jzI vGJVVVm1@333.p5z ދBzUgl&Vo6=!)s?/rIe-Z=_;8aJK oEyFSL-Z:jϦ5¼Bׯ_޽o޼yѹs>|ڴiE eKIIIm1@0:36=pࠫgzN}r몓:E0$]HŠmճ' ;6͜hV[S#*+H^v'_O~5_Wʕo_e%WCn]JK?xXKx,F~֥2tu8 ێF1СC-z3ϚUjL&ظQ],988nCWZZ C_/ {K I|g?_eų_RB\BcCy_lZYlmf`ѷ ;ûe=?~ۺe/|j۱WP,`/߭wrLăsG7qXpo߁}YJ.^ARY1aϟ~k?k`8}-ZkiUw?l5k~ǬЭѣG=z?>})SΟ?/떲 IDATU=Ws233̚nݗP( x< @aÆ͙3gӲOU=t{{zz[!*_x'=߀~5z=t^_OfO&+4_0ҽ|=~lXh;?t鮆vkfkmhUꪪoLڴiS,mwy#Fػw9sU=KeffZXX4'%%nCt^760ptDd䖽\zP!mS.g *";G~3m_JRYgfţm5X/Jϙq~.#??yzfΜ?}F 6խ_ z.^G .l:)xmd^|iNrL;&Ρ SG*ʳst|f96v %g()/ E#Y[[oڴiӦMg>yT*UPJyyyIJJ٭ Cڒډ'wx׶F' YLw mgg^zݻwY"##U=?rssRiH$wppxSC޴i"#"mmOfegz"jkjuQ~Y)Nƍ/f ~4/;s.:6pr֬Y'O?P(444lZOMMm}@FW] 4hРA<~ı=;-y6GׯxpVuU\.$_-4.{~h{ҥݻw#u֡h&MڵkW]]O:!ѓHQyۧςys|||lvqqqƿΝ;WSSCrVVVVVVVVV666l6[߷o-Z~Ң"BHZsΚͮle #tTNIII >}hB`s8vN.ήή6Nj8i$s2I)O##c__ ӓNbyzz7)((Pӟ?Ce699ӧϟ?'Qϟ9DDXCK[uv. 2r2 r2ruu&ių;;M|w|=:xND^jjjyϞ=mۖzjMMͶj^TTt,:nll,M:3Ka2 iiiiQoȨPޠodohk`ohghodoomJɤ奥"a^I0?HX"/ u1 ssskk7'q#x<gmmmbbBRU/4$J F._\WWGDyF삂IO\/(ȯSU}j9\&GCᲹ\6jtښIeEeBT^Y!TTH*+$%RⲒ\!Jao6dYVtˢHIIIQQQ.\4а~K$D:~K, h}OH_oNӕ'tU@«Ņ  ӒKdr.SM]Ŧ3,FgpT*IR5)T*W VI$uu TZ)JQB!drD,+++'5`0\ ]=]}=}=}=; c=w+R644ӻO^ELOOxӧE07o߶nݚ>k, Қ"mYYYiDRrytZGE-Lۼ6L&bX,DbLV,KҲR\.$岲2\.*5&I+WTSWgVX,a2\ I1)Jzw=H t)r PVZEb2 h|򉁁-[`0ެUUUT*mU]]Mi4ZâP(lQ]]Bi+ApE***F!"@7L^zӦM...Huuu!BѱMFc0m sBmr[Eb0<OH266F :f͚-[,_|ƍnnn/ɚnGԶ;E te]QRFFFTTTII !f+wEB *lٲ͛7Zsuumf\NRVbqUUU[R)v< #庸4!  E XX{׵w]説 wTQ)H{ I @GNj(`߳˓̽9 2'3R&ڔ" k"99]vmٲeӦMǎ#Nm[X,H]&a5зA>W[\\\TT(:HP yyݻw[_=|bۣ8m "H5zcccw-t#N$RQQQtt'K>^wz׬YwݻwcX!YY-v@B@۠`/"JLLL$>@(ʎ;6np8C|>V_}zPkk+x,K744;`Žm[X#QQQkp9!$ʍmO 3xyyv|H$eee`J)_P;kllp8,`p8U!.8D"~$H@ 3WXq Ӷu׊GL&!Go#0::d28nhh`29p8-ia`UB*dL&I"D$fD"HTRRRRR=W&r(C&(jds8Nd2immm65sŒHJ迉QII'x L x BcS(MMZVCYma a9&mWP)d Y*BP(ZZZr 555UUU4M\]DvCDINNO$**$EMܼ쏒ZiUee-mm'GGwww'''kxWBSSӉ'&Nf͚#Gv'Ov+ |~~~~jjjZZZzzzjjZqqQkka?a?[u aC0u͗0!mmlllll455%/R<+++_Y55!UGPGPKOҠ˭*/(-,-(-(-*+)/)!hllbmeimmmiiimmmll]н:Ydjjj``]Y[ZZ^j``0tP ]zVZZḼ-m ~"ښə'ecX$%%BCCϝ;wԩKN:ݻ .zχjhhطo_׻@jAҥ!!!!%%%==}jjVV '+kdbnlamlnodGk@;zF}YqayqaQ^NއUe!5uu;[;99Y[[;qh䴴YLBHKGjjT[PGPCKGⲢE9Y%EVY99SSS+++k++++?NR⪪*Q)xI$-EXnR+VJ---Ϟ=x43#svqay;EŮt#9^$Ľ`54FxQSStRRR6mt@"8k,__߮yfmmw+ a IIIqqq1U Fjlnμy;5M-I z\kkKYQAv9iz:353hee/JHHm哞d0&@#Sshy996" Z%)444 ˗~U0,޽{n݊r<݇B(-z*:"k~q>>s166thjkkgΜ_YZZ]6??Μ93fz?ܹsR ׯ_GEEMLH`xvvVvZHZ>9}rVjrQ^@ 70p9|p333IW111^'$& BMm]3k[vfֶPj :!}NzjNFjQ~SUSsttJ$%&p8)E244|õPH/.ۘظ8nbμy{c}A30/<]]]]1et:]T$Fb!DREuHO|04,,f5uMn.n\ܨ&撎}tZƧ+ G7nlveeeUZZZ>y29sܿTfeeU#KG=aѣGS(IGa2'O2?kjjۿ[F3:f|P(|/B]|9**ŋC>|LKK۰aUUaqGЗA݉޾}ٳqqrr=z6t Yҡ(/œRHJJ|}/_"@' cbbΟ?&A56u:bАvή8+KQ^N|t`?otht'~ZCGoCƌi!?^DYYY8q|СsSNr8oy=z_}o#G~~3gΟ`2<9apEEI~DU/#o_io?`e3g$ Aeee.]:BA~ȉS܇34t\|x,^|SE3/XUq|>m#&++_ @h҂j:R-/+ԡ] gΚu?544$zkٳtҍ71s͛7oܸѽ mݻwӧ:>SgL%@!.= { '/xѢm۶I:(GDEE>ӧx{߸ͬm%߂N}tz+yk֬^`lGU@@@HH\KKP(666622244`0W̜d`c"2^_y--N1cAM4iǏ8vXXXѣG/^(+-+8{ԩS*R v)))7oy4sx`;DpjZ6;[Z}ʲVa8m}c}NCZJeY0))i֭knn7oނ Ãr8={t{H(<[m۶;w~ۢ[m]zhz\玺uq[/B:z-C;RSפjyVY9.XC#vс-kn_A?vvIhLzxkJ${,XH:($%%/5kj[ܔe?Г~߱˕S&S5aOyMs-~=}UMU _wsBÇn:b-ut/ ttÇ߼yD"I:˹s^z?.Y$00J>y$(( 7mڤnݺ道t>aaa- 9ۣc 7/ Vv阋PcsK:ڵT-+zЕ'F[~j#Ġ@Lj/cɒ%W^x񂞞L)pv`rcN==b_~ '8!  +'a_p}M>s1IYf6!PH>^yՋ.Fc"jV]<ϋ;w>0Ço޼y_g/[-$,w`TM01<< ]oܸР`TԩSCCCSgݹϻqK6lxpkBO>?9?;SU]S^?w*=mMe۰Q#'L=sx/[~%)Û78*c kul@$ZuCFOtp zR_WBVut䰱x-gU&SFNrX,nUrҷ,mދ<{۴iӘLEܼm6yyyooo7776_bh,=iZ7Vu4'aԵH$RA BSL~xxW,vr9Ba]t:]b5X bYb" D"AVNN^Q9ՀB! b}D"D"I$%IEEEYYD")))Q(RWW= nm<jPx@gݾ}{۶mwBIHJʑ:;{ZQQU7V-d-5vsb񓕽CIAޅ$ľ8u#TolDҡN=zLFF:LO9rϋ>^b pq*S7B۶t|]9 pVZ3eTU!ǿ}.IM|h&$>GyiL_0nȌEOsvmׂЮꊲ B6kͬ- zTUCRKcs+/ذxoG7϶Oo/}2(M=['n^EC<{ BH ݵ^y#;nvQ\hmlP(\>+gOLD]SE5o^>hZ rD|mnd\۷9s{ z7CWmjT :m|>` qlu=OB_PTۢ#[ă[£56:uhWMU롢K95&xq׋oj}4 O\^Rp99}9>I  Z[[_zbF&.}`X/\Xv HIsF]]IwwpiÜ_D{r 3~Fiȝ#~ dddVnzvP`sFdП2f= fˁo^>kr;s_DRVO)-72F\z8?5Moߓ y-l?x LiVQQqO}CO-ٯL(R41m[^txwvFp8(IX HHLjDEbb9sBC&MZzuFFu>h4L=@MOOÇNVVπc`gyOZzzZz*PI%X,NMSKv|~mueeYiUyIEiqUYiRZփU!999SS+KKsss+++ssskkk~4(<S t4tܛg-Sonje#'"*)#n@ QIYUCm豺N'{UW~ax 5sحKgE=IOmdBxb=t"I trQ50B%(Чk Ќ+)&"<1eă\5uAƞ@$)az N'IrzESt3|x?5vB߼6?yCk77wѻtZ NB")CVU믿$щFh4F#~MzEF_O*"t!!NNN=Znr~~Ç/'# ..=<<\\\ՉHq6YY$ȧyxAAQ!:6!I~ECKѝx0L--m}v!ܻˈ0!y9p oH!CkܼpZҁtDBhު_(jHkKa㡿$;3:1~"~ǡc5RM#ds+I\ZیӦMt B3f tҴiӆ dfK**Lt2w1 w;P&n מ|۷okᲲz;J]]I@ HMM=uٳ gϞ8򙆡;ލxZ|1OLz# -|Lԇo?y Sx{{dGuݺuB})C;}]1xP+9>Ʌ2zrՋe%lY?%+DKyA9>^>鑝[>F6{=CZJ͋fG?PMSKFFfͯ{9%F>w3-McY1oQ'nMM7,2*&Ѻ9~m[鷚5'F? ~!>z~_F3+se mL߿ Eebr̙&&+W|!]u`Ο?7p5 +''2YyPXA;BPT?3C;nڜȇw߽wꢶ-.Î,F ;q΃+ubaqʭ/Z!zuZ6ݴR( sź=zԨQs]09Vrr=#=4$f5Ъt(-Yں:2X45rj*u 15pY_Ǭ7](j**KKx=C#'gjMmO^T.~{R'0EEEIWkk9s߻jn w@ ()eḼ;;NݢC_5s]?>b0,1k_gE@0Dd۹f_~BaHH;@d@^CT~^=S'ē>.9ܼ#O>qĨ(WWŋ Yfy{{/\Lɓ{{f޽{֭O 7G7/'w/S+(665'zqEiΔ)Lt;(<ۼg@47ۗΟ?ӟ\AB}ݽ6;g 鈀tپ|^nfڍg mk.WN QP(ܽaGE՗\_‰?x{ܾ} RPUBo~|Y$vvv߿?sLCgϞ R!??ٲeϟz>ٳkׯ߻{j8hO{QДth iяB[X̜1cڴiP |3똙%%%N8ay[,ϕtDt <{.]ty:`K6vH:I][-2"l_ڭ3uvZқSqN4Ό+{EՑ8[޿r#QQPuǏS̚PWS-p@<UG4xCCB:WUUUnnGh4|.[niU K9|Pu1]Ĺ GGg666J:@Fk׮9o Fƒ ? ܹSGGGAާ500p׮,6g G?&3c}g/[ĸ^,S.+rn]yEki@;^-77w„ջOspt8[i\zܹӧK:@ ={gHHƍ ٳG1o޼Ͻ<,,ٳ}?ָx7chYX= rY\zxm;g֭[2uuuSN|e 3.""޹s]|}}}}M6=n ^xqܹJKK[~CTTyW.\Y׭۾}z(<ZZZϜ=~&g-7H?N +p/7ysaÆz֭[8N|(!!aǎW\QWWk9R]]}СlB~<{Ԫmts^pjZ6;[Z}Ң|S+=Cv>T 1b?m/UWS>)+vCSķ4<3CH/]8¾}{,X ###Gt˗[Z[܇o<(哰Io--,Y`&cs+IG>d8Ӫ'?^f8(noii[lرBtǎ***Ijj_4yfO<9ZQ6.^sE2BV]uCGnwlώ[PM/FϢP }qJAgB>u;yVyY9yv!;{_]=sB}]m ᮊ0do?+fff=:Ы6'N8s"oq[ ̠I::8Lxα֭#УTnnNll︱&8u1MM ¬wG/2?L tWUU<@abb͛5% |ZX%`1:4uý6KffTIѣGgddƶmMJJ i4jا.^dܹ&_z3uvU~'os谟&Ѯ)>qK)˾p:?}=;]=}QrDZ>Sg >zW] yiiutt{nO^/s̙3g };+;G7/'w/މa%$ƿH{Y^Zl`h8/+,63 ~ȑ>yr pswo߿OyO6o >===@3yI&ݻwo=z 2gl#X̗7ܿ)ݼiի%4UUU"z?`;:: OAWijjǹk= E!g@51ަ_=auucCnj3ޞS_?q}'/adj_dʕ3CMsg{-]SL9qĊ+$ Lz D6mڴiӚURW/3p8@%;H͛i4ڣG?TPPdSgݹϻqK6lxpkDG?mׂڰƅl]{,V( '9-ZUܒ5u:gY}Zfsح+N3ػ 'MGlѽK'вP(KFو(rA@D^ 8 ! e YF #I&? hI['999yϱ&͛wr {\eʜtv'Msp7q봿l\w;LR-AիNɟ~mZ=aQaQâb:ƳR|7<^V\hO8pzD" 6lذyÆO@HX~= mF籃gʾuB2iҶQoE c@pĉţ `HRl6ߦM8m[B &}n^*A:fϖVq&[g n^XR;o*\חHjRMUYVk`#_o۩+AO뒛qxv6OHypuuk= {-۵ITñPU^kc$q{GuJM9x̘;>gS)SѥK//GϕرcǎKDvvŋ\r}6l6OxLv1C""|wGW;y+'̛:JM7ɉD"UUUeeeeff]A b/_.H.]tׯGBAvv  on4LCqAnQ̼ۙ-&6vw9""]^w=q޽{߽m57!<*a xFeWϟII>rk}}߾}cǢh8qŋbٗHÇRI}Y['}mF.=νQhڋGSI$'׍ţk'qXG}rm/9'JDl-!J*˷>cuڷ_RnϜ{ ~>A޺%v#_z e- IDATȁY{Po&9%z`0^8lziuy٪m?6m!;7.:{ &22222rƌA+W^IMejRA30]Pxd@hxpxpƶirY삜ۅw sn5AtIv{_855u޽f g/!QTF5jfaatWj4j n@ho`H@HX@H_phl%yEw rrJ rl6KDDdN55>>>::aZgggH'Oܷo߁훶Yp;vթgN=|i57\zK)}]vQ<<ЦmFo2l&G}p}BAxؒji(n}_Юm%yG>ljFwx;!!ϼCM C5K?;wFix]XXx^O@  xx2~.''^E˾z[ At7 ?/?@ ="WzVRY^]^&,//)*+//*(/X >~𘘘(oog|FTmATUU{H999,--$t@_) ^BlZ4$,JՕe bWppPtXpҰᑑG8;;w֭[n/t)))˗|~l63Y;FG|בtuwn߼ZS]եKںȅ$$$<+:hLrPNTbN2ʘÐh>eӨ{5A0Xlr_éC$~ϲ{a" v7V~k5 (c6t }4j%AT7-ŊnX^]]]GAp{>,, /hM¯7V%*****j„ %6<777///777'7‰>wrr{x}=E^K){pNdCM1L D&H*+$5Ue5UZھ I-,,,$$$44|YH!!!nnn!$?߿aI}}}iiiß3.bާ U. :P.qfrBIՕriu\Z]R*쫹zy{4q\pppPP&p 1d{l6]|ҥK\YA  h]Z$?7nv9UeA0MСCeeӧju}}=Fstdh~~~}pGt:],Aǡ ));~`W#C# ʺyzyyBP(qo8\_~EӹDGGGDD?fx*H$Ɵl+ʕ}s|O!{ |w永<?~EhTJRRȕrLRITˤ*Ng_L& "?????ߞۇl}iكU$"JVE *d29 !>h4eeeeeeeeeWdk5XlÃsysyxrL60Xl /W_oѪZJVrB(2BIrJ!Webw_N|}}BL rGBZ`A2,===333###==;&A,6' P(drkJ!I*JKʋ S=J*m6S@@`+:::666 0-3g<{Ν;׷o;nWYL2ܹs/^lV~Sv,صgڕ ..}=ܑaKmxAeG6Fy87;t`Ǒ\|>{ݻw'fddddee;vlǎd29<<<>>>..., @֚H$X,uv]:R"H$*IMMfIL&X, +S(TpYl.ar,61*Nѩt:ɢ34:SZzF z^oѠ7 jBRiJJU+jZԨ ARX$<;xzzD"P)E"9;;?v:20$HXjRT*VUUٯTWWKrJ55 M;WW7dlaL0l dݨ4 Jg0 JPV)`0 F^՘j hjT FNiZJV5t.4H( zzxxxxx@`⨽&޿{}}}aaa~~~~~~^^^^~KJꈿBO׽1|9<>}zdd Z5oo>}߿AAAoMJeKߚ3{tt5`ʏ=g礿Fؽ?$EC\.A'Z]zy>d7mƿ1.HKƵm 7rɐ?\aKڜgO.iX׽Wj9=[lU{ ò7qP(̴ɿ(Kw(5K?J:VmTVTo\x0ş-z3'% eZ8;$.H/^)K"NDEEEff͛7:?3:{xxZ^ #<<<<>>]:ƈŃ|}}bSH$R׮]v횕{ŋ5ǢmY޴]\\?Xzָ!Vվ$iG~;2hpk>B¿Yށٴ ggv~׭W5E޾Sf/X? wp'6}fGAQ}v_}h׶={o0OV;p) G9tPWWЬ'N$%%͜9 )SY]v L0aرGv\h4tk~@jdja35A_SU0MvQ.?YB.u1 wﹴ }JZ8iӽ?o\nݬY,/_rD"x]vѣGǎ@#h U\{!j>XEo"{73dȐ $$&TWW[oINeԗR(st'Sp7{KQ^t)''`ѣO>:tWeB}RH"j߾}T*5))iĈ8 4]vm޼ys%b֬Y;v>}^8|e˖u١1[;v̙;ui ۆ_vNV?0m<.J_ڵ}$%%ٳ,gϞ QQQ$!yG<Ѹ4L*~ߝFE b4iZ޾}ҥK-'|bW"Lq.hz6-+Ϝ81kӧ BGzv͓'O?L&KÇ tt.xAx-H&;wh4C ?~6Mę3gVXqqmFٵk׷VܽG pt.hVk۝zZ2d׺TdG;vLTv_ҥ NAx̃UR͆*:%99yΝ*j*G?q_ !ȑ#[nݿӵA]Mմ!#z% {  Z͖w;Cg^VRn Ǐ stgXΟ?gggD1c 4z_E÷?X,gΜٱcGMMMbbɓ f?^}]v%bGپ}ӵeVҥK{_2\ޝzҧ?pt:hj*;}[ z}Xx_?~59sd&%%˘ B Z{hΝ$11W^pt(x :99C !b֭W\ٰaFcJJJrr'޹`2ԫ_L|P{ AƻҮ~LvzLѳĘ66P*۷NNNÇOJJp8mGB@ Zv~o߾SLDoѢE7n߿E [Gzᔔ$''''':}ZV3Y쨎"Ew>#!P$7f߼}Zz%((81qA^z%a0'NػwRXzЬP<HbY,?_U*#G7nrt(b:t(A;BꫯjҥKeZ.\pҥeed2904<))iر4ѡ@VEhQ$TX,۷ ÇO06m:~V7o޹s缽͛P*++o߾}ƍׯXVg/84 $?8"6(nq~NEiqq^Nq~F"Jo߾S||\\\dddhh(ttV@8p`߾} eڴi {Xh(<PQQC*))l IDATF l>v/R__o.U߷ol6~~~qqqӧOwt(x,R4+++''Ν;wܽ{nYY)Adggo_/@W#z9AHTj]:f'OH&v̙+V^zܹd2yҤICSt999999o.,,,...*.Kg0|^>B/_w){B:6yP_oQdjy~YS]YSQVUQZUQn#7 ?444<<]v85>333!!_^<=HЬR;bizD/[n{;qď?~zGd2WIIiyyyM־] pr=="X\csl.QTHsӪUjBTUJJV*4*B&UHkd*F.ZLX%b'''G &%%eӦMZ7xGaU$!WD"@ Jwy񠠠3foщ^Do֭[lXGA*J$rDRQQQ]]]QQQUU-rB!oBesl.R Ac0it͡ݻɠLd9991,s)Ψ֚LZI:Fi zA3t:F:^gox|%DbX(zyy/1SdaX߿m6ookщAz}ee%HJJJmۖұcӧ;:ыE"L](::ы`01/ԩǎ}v6믿:;;;:&ZVVT*ͦT*VZh4uuu:VכL&aL&I6rI$!,ٙdt777d2\n006СC[lp8-GP<hQEjCx fϭ[1cƌ7JLhr6mK/4x L?QQQVrt:'#Jɓ'O8L&;:(: U$xÇ/d2_OLLtrrrt6nѯax޽{/_Ç;w<'O]>qthP<h"UUU*l6(-A[U@TUFd2Lύ~T*~KQtZs`0fy$L&ŅΠQXL&L&dOl6|>&hK6lؐѫW3fG'jk-Z9mڴ1c|W۷/W*SLX,6mvlHs֭/~bq%BfZkjj$IEE2\P(! JR,FwR4:tR(T&CR]](T+Jsqq.TŅFg ÛMZh5uf`5A_FAjjF٤ӨMFhtzK4:sy\wX,fϞPEz4^_^^.Hr\&IRL.r\.k|b3TJ1Xl F(4:ŢPTFg8PitW7777j?+L'2dHgl4-^Z^Z`6LN1fd4hj`4 zVn7"=|w>^H [(zxx݃j#}DѨV2J!W+*\!Q)jB)2yMd*B@ 6ͰX,?Ӕ)S 3vXzuyyŋGr:47%%eҥ?/@+e6׭[~"o?Ǐ)p<"WGo&\*,-,+(-*+T˥{.HC*k!'h{L"֭;zbx뭷bbb*duuuVVVvv۷ {5G'}!q.fU*J'CZ!T  8\n```_vڡ(֭߿3\bw>|GbŊ;>޽{7mi&+;;?0=ءx:d􌌌^O' /?_@RK ˊ ʋ ˊ + ˊ <=QQQ11111_V)HNVVVH$f}뭷ną7o޺u[ee6B{y2&kx"uuUe%yeEE%yJ .ա=(A7h4*eYQAIa^۹Y鹷3:K:o>>>>>>I>ɴgϞ]v 3gvщZK۷oя(rʓ'Ov? T*裏T*ղe˂ #BP\xŋ.\(jXTLhdlXtl@Ho`0FwtLhz2Iuq~NQܬ\*z٣GΝ;chUQ 2LvrrJJJ4iRڌFx+Wu: yL&;?"Tddfͺ%а0o߾Жg^۷̙3|&iiiΝ;_yGO.^| ?8??/ wtp$Iן;wɓ/\LOeEvlKi; d7ҮNOyd4r8ܮݺg۷wrrrtF`Gfg̘d2OyիFw%c l%Yi2o\JZR.2o>׏NG l3glܸh4k#F Ɏ:͞={3g/U;cFh,˲eˮ]駟>s mGϛjMKK?";{ZzKAΝkٷnL pw?qx{{;: 9rȺut7{.Q:=вiWӯ^Fvvճ tml޽{]<==ΝGUUՔ)SVZ;,[sիW9rwƍ(x@eZs-^[ns;T(W/u7Go6t:^p^4 a_~9))K.4 ֭;zbiXd6 lj`0p= GR\pٓΟQȤ>#{܉#9"Ѹcǎ۽{w4ʕ+W֬Yc4L2b`j4裏>Z| ?ݻl |~h>V믿NIIYb%xx,Vl8!l. MnGΝ8T1Wg͚\0557++kO?^bsz PRs?,)1c̙3=== -0L{_͛D-TRRoyiӦ 6x+V8;;/_<&&4+_\z믿 qtxP<hbjz֭}}~~^.=س &\yѽ;U&Ν;gРAb:(r|ƍk׮LrmG0_}1rʚ5kf̘1`Gi+JgΜtZ_~ٳgL~ߤ9so7^~o͙G{<{-lV=[7ڵÕk#bÇtRPؽirٯn%MiwI4:o`;o\>f;t߽꫎/ͶbŊŋ#CoׇFޛh0_ᛥ ?|0x_$iШi.\'o uڵkttMꫳgΛ7ʱRf6z#NNN7|7?~|x>Bg}pŸ~#T]]=l%ee_oեw~: pmmo6M'״;)[ڲz믿|r'''Gb̘1c_1h/coAVSkׯo ;ً>8y3z虜|ѡZ7:>Zjڴi'O7n܋<h4\.h4>FѥK n޼9%%/d~HhKJJ***jjjR)A޾BR...bX €wwwf/""b+Wׯ@BiB6O8׫ϼ .rLR5n}7Ky:k>A;7UW[?)ȹCҮƬ3~oIf?uNmȱFX#a^7^àKgN]zA|7ر(d3t̤Gx쒪ʧ8=mrR<$SSou_6~C&y =cG?ݓf=Fu~߉wׯj>|^n͛7o|w}ѡbj&R}kBp͟yjj)S>쳘g,vEEEׯ_~zNNݻ9EEAH$߼Ue5Օ޾ᆄDGGq83HH IDATH(..obqxx@3BlѣF}'x-bN&}n^*A:fϖVq&[g7\,)ȝ BVHk~3†! @ۺZj{+*U֭uZV{fBe|?Or9{#9s Un:O0)NWΟ8=y_@10"( _>wp*Ϻwʜ1,y֍Zq-yn^Y5w^>p{L&M?;3EH{g ?} PxCxxK/wӨI7{7{pƶc)JT*uѾ&M~QQQAlڴ) cǎAAA&ZkΝXS=/!hx$>9zaxTqⰅ>=H~bh*~>fjJ@P_@{7-4zظ]ZUvw>|ğ^&9ymۮ[nر&Lҥ ١H`nnP(8NRRR4hbbv[Μ9]v3fK/^xq/_kbjw wމohaţӍJӚRHKIKNJ& nܝ<>ABB;vؾ}:[Ao}MXXضm0y@-#/vզ L գޣPv2Vp:Am:w/qkǾWCL9xAKlY5wJfZsל\ˤS^6m܉O4AwmecMw/CA!3BTgڱnD}沕-AJž>W/ΩI2~9z0B.2F.jpe;RJOwjoL_ڰe{6}'z؝Vet>d 4(×tAuZg;_zT,~tkapAⓃ䧇̎2Rhܢt=sKQfvW CՒ ;&rԩ}VM^ vڵ 6\xqΜ9dRfffzX,W`ݻw zݻw,XXC###:t KuӠ6Xͳ~)k>d:9A(_=ѓR   pF1~=j8NVRq~{͹q鏎=-dGMEPsɣ; o [|=gAA9x )C-t:V}u|(FsIUj)dgj5Bfx~t?_Wsȼwoz$?14/]LHn# (U&-XR*Ky|j;7iծSx3663fƍ%ɸq;VUx< h4D"ؖ---7mߪTŋd%K_}q{]]!א>~:yVmFN zͯڟֻdb`l+={~@eG_ѣG}Ovt~ϳ/6nOG(&&wn9 &[_}hJ$">y˯:w[QBDEyϝz&R{&i%;}AC:piشE_Dq'̜9kܸSGZߴiw?iPxe$N3Zm;߻u;E <|t:wf28S24[63/ZY`Ϥ};YƵ5n۸i6XP|=ywSH4P&B!7 XA ;1S[.`֭[7vquڵ֗j ba{[nO[l9qĢEENן8qbŊ/j=BJi"/;uxիW/,, uPݺu]zmmm?Q b„M[?XlNV!n]mԔB`yz?{d; <|YAm:w6nrFNL Ucc 9+l(1JnA$y]|7/cJ0$M lL,V.T;]8dDRyh=uw~NJ@_%7:s-Nh4:usέU4jhTjJ;s'7oم yhn=}9_AJ/%񝃃#*/qL>ܜPں DRG7oqĉg̘@l?~>>TԾ}{Ftt!0B~vxw都4?aQk޹)5~"s䧇h4ًϘ0ex!c&0Lyųqrq##!Q]ã{$%Lz uGٳe˖yuaԩL;ZY[[ B*ZمG{tҎ;N89{U; ?e>G-]5C~[\#zų_<}k P( I&۷ b2C~uw֭7X8=tMՇ2`?İshu s8]R JԫE'&FBv(HHTͫ;~ [lwJV$,k޼yAAA6l?١*{1˫)JΝ۴isС'Nر#F@Qu>u4#;NYXXީ׀&6nߏ5oޜPPcW;J(pya{m-{#;KI%9vNlPJOI6ZXX [2R<cOJQS(ęmB7Уot:]vFZ0d: \f#fe2YToN,ua᪹Sn\:ԩ8P\tITi?>t^CFN]Z$?=4 ;>p#!Qm[ 2vP($&֬Y;dȐ#FԲҥK7ovss_?PŽK#G>}Z2#Ft֭N.UCtSn۶mԤY&ϪA}LNfƲc>|xƌl Bx{{7nŋgϞd&""G(vN;&Թsg\͛ϟ}(z/޵{]Q(6s2֭ ԩS)%ָq㈈ @ya57gܳ.S7$:ÿɤ9gϚ5b ꮤYg8~ܿioLJtJpPc_ط'7nЩS'DFFO-rpp ;Ny :4 ŋL&8A ܹsǏH$zں:uLDDD>}m0T"V3oĸ.Kv߿pe˖C@Eu͛#""V9k[{CA0=:r=zɵnZ~m}p6njPPt+OQ N2rH###sGeff%''O>";N̞=͛vrqq!;i۷o;v,>>JR(-[v5 5UI$_ktu661lN*Ҫo^;v ; ?cttݻQ P⥧޽{]!tѺ}3ٹ6Ku"޾~'nA}ݻUtޮ[f z*WΝLO٫הɓkkCVڵ:t6mI5. 6ϟhт8w7oj4 ̺vھ}{@@vi>p1<_ dddDEݻ})ҹ{}h%K%k"<= Ov.b`ٵcǎEDD(QFٓ8P(^zل*|_ݶm[++]0999|`҂,O;+fpU)iL@qʕ5k֬Yqdg2B@+((xǏ;{N,mܴY믚nݰ1NCȤwoݿuɉ. 8p`@@>c߾}tT*Uz bll,SSS Om;nY4u{Q/Gݸ+GG :I&dGrIMM]bEzziڶmKv/v˗6kl̘1dbǧM6X4VXq70enD&jsH&GwrqεEvzy󲳳w؁%j(TCŋ/];11̜4(i̓st&;Tk:e=}G^߬YN:ѣiӦd(k׮ZꃟEh4VK^WT*ͳq`PN )J'(+#-7~*&/7|u={nݚJ*Rܴiӕ+W8z5§5I&&&&˗/';x+Wr9B $__ߚP}xyoֶsӇ_2׈+ SN-Ra]ݻvr'#X^c<iZP8aFDSp IDATt:_=|pkk/_^~=22[d۸o>~ή}퓗yGOx@&rZj*$$e˖FFFZ6+++))))))11p KKKCAzXHݻPZt~uٚ߼ys7nB bX*+ ĄڡCng{?kшql-+ ܱaAm$+ۥw{|lac>#+[ E@U ~`%?wտl]X6}T*zZ~Xz5Yzyݝ;w"#x\zxyԫ[۷w%fZt/޼yUlZJ2A3[4077';)@YT%&&fe2Zkڴ]\\A(޺u+22[1:ΔɬW߷q)z}jrb|Lo^}ACpp֭[hOSR$()Rʕ+LҥKʺuRSScbbmAv H>}zƍB*j(Brssk޼yÆ }||0֬Yu[kϡsOs[' r2nn#m}ns6\ˤC{yo=r ufPDTᣆ uX ~2OD@PC3g\tiV_G՗RyYttgϞ=#gcZVOni?BJ&ݛ䄷 o  ͍Bt䄄dZM wqqG{n#(^'NlҤIidO>}ɓ'O_ļP)4:CPSPCw0FIu2RIo'}KTJPܛ4i_Kdgg/EJLLTT*ֶR$jKٳڵIǎ;sX,9sfɎS O00аD)RTT '666(ET1c|}}W^xb C}JzrrrAbb"Y*XoVRz*::ѣG_~MRR @ }_̴qz Q~L"R\]Nwg6X\vn_kk"ȷq#mZ跞 5tDo<'/'IPfǏ=zÇGMv8 P899999uڵhKVV֫W^~*.ΥsIIeh4#љgkgem1wNLOHIHMHf$ {xxxyyv𕗗'$79lQ k4 t:B߿2-JիWqqq/_|,( F;;|'3ƎgcW$2`.LNOMN&g&&'TJ h4W:w2ʊ5C?XRR$@`Ӳe˭[.]tĉK.";GyzzR(ssWxT#4M\\\tt$ɫWZ-Aǧ^z|>޾O[i.\ذag?:mnNVy::AyKS&hJѼㇿa7fem^eێ?nWT_b9G]8=59S^>'ynV&Avvvi& aÆݻk׮Aj; )ڢ ɉIIQW.$&&Nab°YyV_^=CA05h juLLLLL̦M\nfͺv[r1'3P*ʿ)I O{`# Lpȣ;7jSz}6 oS,yEtwEN~I3d:nkk[vnݻ vڵxb@iQJ5@-ˋ\ sׂõ0Zr\sׂb2YL68fLd1j,>R@!We \!J%bU(_/KDRq8/O$ʓI$okmmcmchoog|Ɔc#>[fTTʌާ룢\]]ZtԌLPY'BZX[Zs- 5cpXl6d8f\&UerT!)dRX28?_"s%|q~8?PUtCdoghggdkkkqʨHIIIBPtkkk"T1V1nܸVXg'/" uH_NLLT*A^)ʗ 5dz/?sBK899mA%)iغįݽ5ux,ۼkPۦן;^|3Ri>i 7s݇< ]8SG =qssrMNz۷o˞>}:{իWJG\9"LjX&8*j8dMLɤ3,d ?t:͡hRTʂBP,PjB1hrB&S(drLL6mieeeiYYZ.ZZYYx8 C՗tj00dgg999999999D$L&OAȈa46a3 aTd94mf^rVˤZV&t:ThrFV( UJ\&J7g6Қxֆ_<ΎbۺRd^O?j 5ŋ7mԺuٳgWå0;vm۶yxxBP({N(fg3,JP(Es#QT6mxbmmr,,,ͫիVn'++K䇹K Vӷ79sŸ>>[xDC{.ˤA;Z.!Zo:xڰO܋gj+A_u… srroߎ5 d2To $X,JrP&jDh$RFH$ZV*}lbLLQojjj0155e0,&ĄbX,cccO6pliecB¤ˌ( GQŒJD*JRX, %L&ST @TBUaT:N/*ޔVwҵ1LM&AfӍ膑͂kAR-,4Ȉfp8:clI9iW =yd`ٲedǏϝ;d;{dǩt:]vvvvvvVVa޼>1R$ršIII 6$;M8B(={ʵjJRՆ LjLh WW&D"ònbSq8ôT*b&Oh4&LX ҠAqկ_ ӧ8tH3Eq۰l^VZ_ۀaiڟgLΝ;,T:rnݺ}wdg@@u~QvvFA@ͥP(RSS? HFFF(E(Ÿ~3fС\KDUSNl@Et;w~QNKKˢǷQkTa/3}dQ^Nn}OZvbш.cǎuѣGVd2 "F;;;"t۶m;{رc @v e˖?6mڔ8P:uT䚹ûufdd}jc9'Zͼqbccc\.qh4GnذYO'2:ʌ?x2j&QE.JGR'M?vX҇ aaa+>FFFA5*00rzZ`ųlTa*!twn\#@t:}ׯ0`@ ;|f<::.999999111>>x@ @|L&KOO/^N2,ІR$ܹrf͚-Xؘ0Gh666+W$7 T{ݸqcȐ!Υ_:sv h\^]'Nӧq&LpppXt)YPxPYJRSSd2 5Jl}R${{{TgϞ-Ysٲe侸ڶm۷Jɓ'Q jzԨQ'O ݴ3cWTVvϞ8pɎӝ;w.]yfooobH_#+E$;,@ŋ?ʕ+Ɋd^o9::N7um۶4kԤTD啓lOO:թS'@m6m45k֐> Ge2#)d2Y)JOR$ByLLLV^mccCJBѯ_? f͚վ}{R2@5>mڴM[,\gkGvw,,Ncƌk6nܘ,(<<@mRR$WWW Enn%ɪU\]]I0sLP8c R@tEc/37Q~nux>}KbP̝;WRmܸ (<(eF,U)!!!??x͍Tϟ/~Gwwpcǎ1#GT}PI%KlٲM[TԅgmO M64DPzjɫVjڴ)Y$@]2#(EzH$"+ErwwTPmdŋ'&&^˫{7&'bϞ=U;T?:m[nݴo9Fp_~?~Q U/444++_~P(dg@-z>)) eF_D)۷ob1R$7778 ՇZ^bœ'OVXѨQZ6L"3wU5 w]?8ՠa!dlbBvJO=y '+ S&O9s5١JLL7n#J_fdoof P|ҲhJ$m(Ei4._I&U-[^ڠA+VTePܼys-g9t5=y7 1k/v,7nDb$ -[I@2# QfPrss ^))ah4Vw޲eG͟?`:uNWYPCܹsII|WNݚmظj͡P(  ԭ[7kk>.2äG :B@R$>^z֭[/\`*ڵkWW/RA-ÇŽz𮰰  bɳYXBDљ?Ä0ju(7'+#M!s~~~M6 055?~+H86/i&?PxE }p-z%J޾}T*i4Mg"@۷GDD̙3}ݝJׯZ>y$^BjMYYYAH$Vk؇`888ٹx>}z<.ݻw&LXjU@@Y PxUeFJ"yFR Fׇ9sf̙:unܸx␐ }4fej.&&fsłkP͜!?h IDAT9dH:Z-D"\.W(W"_011a24̌X,r(7|eFiiir̨AݺuCq BR@N.STMxXb#B1 l60~RTss8jJhڬ'Ǐ9sx)au6>OR_gi4Tj' /$ J\-ؘb]522bl6ؘ2 SSM5i4ڵktz孃FZn}ҥǏlٲz{޺u?\lȐ!Ϗ ; @]fddP("\.S5b1Y,6چdz*ֶb>Qfdaaٌt"H$D"RP(D"QAAAAAAх|EA@WPT* T*%B"t:lN3 )PfMMMl6033c٦0 .knnn8OAKR$ÅB:XRJن(*EyybXTHV[y8ff&&ldZp-\K .r-rmll)JiϞ=ǎ7o^۶m+ϟϘ1e˖˗/.*J7n\2PM8a…dPx_ --۷o߾5T Œ􌬬Lt##s9cn69\הsL)fqLL)SrOrL.*  \*Q(JBYERH&$"X,$"D,2)CeFP[̜N|H/EbD,-6+A40 C72f #1 AXA,J0LMLht:&mfNP S#c=4^/JPȤZPT):N.!Iu:JYPRiZLZTTJTժ2J,T2F](JUJJ,޾ 5қx<ʪb  BP(LNNJOOHOV;mNg9ss6nj0Y&bsl9ؘadF,6؄mfndllj,[0Z,PerDT2D]XX(rT!eRL"2\&KJ忙i4kk5A |:kZv:uԒ%K*oFshJ\7o^BPN7o\r寿Dv: Ga"ŋ/^m7޽3I266wrw:9:[9:8:8ΩWz>/;+3=5;#-+=53-5+#-'#-#UaxCY׫[~}###Wˌ Bq\777AMf(-Q[Ą4Zp̸lssr̸f\ο Ŕ3.N&ˤRP?X"7\IDRH*seRiѭtϊgeͳgloohkkӮP=i4OjR$@Pg͍KHHHNNNN& I*?%d[ZXٙ Vf$.. eF`hb2ŅUPX>@XDD^Q$GPjkk*Jjj(5 JM5}6`tzyyyiiiOw2&S?xh͚5d2y{{%TVV&_VVvii !+Tpxu*\6{lggg~~;oCC&D]f$$$neF`a2999fKSƩ)p:5-Q֖"r^I~^Q~^I`\B"XOJ>yۖݥuɒ%}͓T*͛7o߾ }[TT˧gdb`fehfkh؋NNHHH65JIIꪪt:}yyy'OTSSț6my///`दn߾, >>ϫW@#M{{Ço޺d2-m:M4IAnc &HJJzK/3fSfԳQ2p8CM}}}lllLLL|Bbjj B)t tt 05jms2s2ss3Hy]BBD5vL[P(h4̙3gܹT9WWW={<]TGG2Nv4hĄbrSXLIf͚elltڽ{wIIɓ'9^VV֦M<==.]ʩ1hkW\v_~ٻwرcF#(<`HHHvw:::Mwv Y97MpD,²eKt(3ʊC&h@KW_i%dv)3-;-]ZZ\XX1f__x&cxxx/^BTTiINF/5uԮw3 : Fkkk8}.`9)a/y:ijUWR7o`0N@EuCCüy ~~4TT4\C֚5kTUUw 0@

:"->H4;w΂ Ը :555 .Dbh4K!&&&JHIO`yR >4U~uʕ+ktP(7ob>>>??KKK޽Bkl0lsLb0N%`GGG_|!ƍO>u?4AG 3fzɛ:cO~=:4Nm<Բe$ŵX;8LZU^je?^HX]Y)Օv][N >ݽqƓ'O0=v,# .jh йFҌT]ZPLBR.=9yh4'Sj%R&Vvgim?}qfvZo;wzxxfF8qx=]kHoK ͬX3%N7sܽښ?|ݽ>eԋ/(**r%(sN''7P{۽{À|0@WX Դ`׻r; "Px1klq)Ƚ ]_k7'VGu鼒҃wT4=c3Ϸp;6|xvh5K޽~,6+#;Iݳ2(]CDڽgOУGz9KW;N;\FҌt;QPHs6 |1'g}~W /fVnL4x% Y)LOOȑ#ӦMv"0eee-X07/o#i}oMp1縵ϟGj|Zϝ Xp`z4=xٳOLL̾}tttΝ;ǩl v5(CO~~~`` A`w2~ž92g,?/={}׉/7+{GM]׍uw.WQ:c.E':JX,</'Յyz1c_/"U59fͷ_/.XhD:t`}Բ޶mEDD̙XXX d< 4ccI&?cP3s5kdddr; PxP;cLϻ4}k[+ Ώ6{*}?m9^@5Eg)ذ%LjH *36yً':qQij=&M~ /m<Ñ֞/9WS /^ۡF&8OMMHGG+((|^6eŘqO~#o!r[k=N;vۉFǷ;wNDDd?6?~ׯ?e&`X"..ҥK;wvA xG!Nϛ穬O#ѝ舵S`o9ߎ vj6YE7 ڸ؅ ry~zrlܥ#~EA;WΥǴ6S,l#={d9 }%%-j*<}`beA_Wg?nHHJY7oQ1IW ?n=gݜix={~ꇎ0#y._ލG//۴=Y4 }Bv촤jeI\Pϯ}LL~qj*>Fq%ށ8{si, Y)A7r;;;dg͚߳X+m&lwxL5מ}oҥ W^D"H$C)))}}}===<]]]>}XCWhs;ۦہiIM D3E7}r@gt$}X4cbmdݯ||qj>Fe8vF@PH{i!!N ߵ@ xyyq||iӦ p)GGϟ-_\LLO`ٴi޽{Ǐoii8Ǵi|}}꠩= "\r%77wɋ|||jQ1σb#߲4߿A-U奏o^%%W45Stwu}}؊oqVRJgڹSb#{ǹe&'"(Ti󠬔D<]Ǖ IDAT."*!Ym <}v}]E;%9=NK~^ܿEp}9@HXDtNJaf' C1K7nzӧNJ0,}mɤP(/^ܼy+${O#d8ϷKxufrŠu5eޅE ޴hfVjѸGyKbC= 9;J@TMpk׭ɂ L뛑c#DeeeABBB8 `mm|ԩVng?^x 0ZG i~~'ySS[/ $>rE'ơP{pA^YFƌ$ HYQhO }tHuyMaXgO0kϯAGwcezkRW[TTLiA[0+OJ!پ{އ7S,Dw_Eiokݰ`:NO*n}{.nomݹs)W2B^,8N766n=|9oη|4Q2FdU*yw.Y+D?mHS{u }ic2k*3=:ug@Oz[e߾}OVSS&NxOΞ={0˗/ v`H`0!!! .0X.D&\ ŠqpJ` `hl3)9= m]%=]ʸjS>?zJ|z3-ca?K'}.+*`obq*q||&M{>Ǐdl2Rf$AaaAzW,}65|bƮ:BB]:;>y>aFR\yqd&}̥}b?Z{.A`Z4׽{rTpB"=Ps=yD ccoE.s-tmٍ]u ϺTq"b 7ibj*J8#>:"blq4ŷoYj 4 }v]];vuuu;c0]իWIIIL2Çx0teeeP(ф[\D#.o&_Kc .S>"ee$'Pػʊ 'kA>@xxx\=潼}˗:^WWW[[[UUUUUERNgu|[^\ yjZ:4gWTU뙯BNr7{.~z=3NSg hgliwyy>``0߶mϞ=+..]O655-,,|䉭`ۏ3ӗ/_}&++kiisng Z[[yyxq"//_\tn^f-zD&#"&Lwva;YMQ'ZFA V&sWAsڱΓ'~z[*H?FHT@zˌrv& *_,}j6""($c1f+#9K d<^kTAY]<;A +}R )n:s wcFv mgGRمG9;m}Cͳ^S?6Qm%( T* ??Ç7nܸg___0svvIII)..~mp׺u/_~UVq; :uݻajAG ]]Ԧq ,W'DGP(nr{!!^U#2e=Lf{[kϧ=`q~'Ke RVT -'Ͼ=`i4%U5k=WxΝZig#*qq :LSS3pWzF_}SU"RQZ%䐠ݦkNb8Q\R*ѝJO}}̥ۏڮߎVW=qⱋ)SZ@8;I~NV?S}-/+Z %999...--BP.&)""`BBBtzcŋݻlۆ|^{#,+.J7m7W/ՁPUQB\7qqcǎmڴѣ@O1c`0ϟ_O`b'O3f @YXX˿|rڵ#‚'c438LJKz6DT@PAS1ɱ#\E"+IytNu?]52Ӿ8VwWWsScg{ꛘPuw~V'U奆 # T _@`M osSDIt-XGc(3To_>uO9R©*(~572H_n: {ɭ?5ut >91 #"׊*85-Q[ +/6ֿ|pk3{ϟ?/::][ **jll6o{_U_ܲfBS^>Nx, L,8fЍ~v|q׊%S^ܿqġ[ 0Csk}۞߻wV:f8"q\muמt K.=תnga1#|p?|/{͒y,+J:dfkϋ#޶b!>F۾>3)3k~|~ڒ?i>\4<~9&mFrW/p(/$ qi|~fYm-h4?rN;mƍ ڧOnذa{}BCD@@}̙FFF>{nZZ/\S,VP'O.\-;;[RB;gfI)MAG^~é<=?y OIM]3ʝo62#!2K`ړ=={-EƸZ׮zZE<}ϥ}ST|-_9Cv|l3FЅ/?`L]aKk2Z[l\8b+.. @P,O[[[MM TWWΘ1CGG k'bX 5Fz5-oFm[lj'ۿkkm~}O_뎓KJq2@uZWW706nxi,gꪪ'OL>}7~K.۫q; X,688ŅY`$C/V\y+OÔTոZ[j~~4&I*+RƩ}60FPHXNAH峇w~iN @oMMMnS$%&m{tJy񬦆 n3zoSP|lyb __Kt:L&̂&bx.!qD{{͛L3gy|DD3f /~zaa'N`P( .ܵkG L&СC7qUpN~\ېwӻ:<|d4y,e5 n`6S߽~Ô 6_jsbn޼BP(麺***555(lر666ښVXXbTTTVE 8 Amm5k}3s^^ޒ%_{#VZg^0w_8Ex¬Y~fG"H$BAx|`':;{-Z4sL>>>nG?3$$޽{`0:@$;v'Oh iii,KIIȈ]obQQQ}/PPP &&&## rʑ#Gg,\`zqI|!`_=ښU+WٳA yyyiiihjjptAIIɦMlmmm̓/]1k,OOA |իWh чqF?{_.Pxuԩ#GJb=W/ P۪K^Mw\ĉ|/_i4k Z܎gľ{laapyBpER߿n`LpVVJӛ8qqqqrrr&&&ڋhhhHIIz'[neXjjjꊊ޽;yTsK9Syi7(!<{rew.2ݭo```aac%&&ٳk}YVVl27ob0Ih4ooo55{r; ,)7mڴEq; @PxpUZZzС7nKZr¥"UHʹ>~΃ݿ\tݻw7od}᭼ɓ\AL1m!ChCC߻ᝆ۽;)tz||7o^~%Y[M-%  Q]]9)IqIIq&u WggNjAFP._ p***%,--LbaaSwwwBBBtttbb"J011SN^ F 3 IDATM`W!HHH&:NH#?FUk̚h""q6׫NJJMJJZZZ666 X,ց233>YqyM<Ǐ755̐pV[[mmmׯ_, 6l۽{7HG(IIIoh712EYM۹F&CʲMM+{yy)((p;N޽PjyyԵ Fx^(.vL0Ѻ I9Eܼ"RnK3U@Pv1cƌ΀#GWW׃t:f2@ ̜9sر }0NchhhJJ NJ ,ٳg koۢh!!e˖/? }`0zfvF6uxLK.û6L:UCc8nVҢdee5f@յug1={6-- =zt0qQQQG9}tk}0BBBΞ={]qqqng =z㰰0F4sd5QCG縮؏B*Je䦻{xxL08`dee%&&$1u-6AU/һߋX_O.) s29Ym F@050 hmmeIRg̘>beffFFFFEE555iii7nܸqrrrb֖vvv"®3h<]f1o޼/+y&: IX3[{LCM]MufJBrQd~~~;;;gggWWW###n)L&3;;;...66XJJjرAׯ_S 2f͚+W^|900+_VVv%^^^ngZGGǼy,Y2c ng ɨT˗/?~ֆ1cjcongvag%'D'}LNRQQ9c ;;;7kLf~~~JJJJJJrrJJJJ]A>>~N%$GEӪJ He2AAAFD"QPPy>qDEE bX------...sYq˗zzzcƌsmhP(t:Bp8`|||zm^iҤI .Or&?twwXIH/ѺIYY)IY 깸8;;;;88 q;#畕>::L&KKK;ё@ -[_;f͚5999zzz[lxp\}}ef͚pBngݩSF(<`Tꊍ  hʪ&x= >w -ԦV,Vq{T|\[\\DSPTTUWPVUPQUT)qr܎ OkKseYIUYIUYieyIUYiUYqyi1FCD^^@ h`MQ̙36eee[[[yxxf̘d2CBB℄\]]q,--ec.3 _hahh OgggrrrlllLLLLLlEE9 R"htDO]3,rvF~Nf~NVWW`qWuuutttTTTnnh^'>>~޽K.;wx˗-[xM,Ԃӧ.]x"ܔiӦkkks; Px& c`klF hhT5 A֖¼삼Ԥ2RTTstt422;p\wwwAAAnnn^^^aaaQQQaaQYY)?*NQYUNYUQ'- + - -+G0Jm]mu]M5 rA[[]\FP( 6|'O{x~eQf$//?555%%~g5eAxxxdeeW\9fN-SQQF""%#E5P&kkKpt YUV\d2D(_<,,۷NNNw?#"G&Hd2WPHHAIEVQYVAINQINQY^QEBJZJFvDXOaX[UQ]Q^[U^[YQSUA I<㵵xw/!!!'NtuuUQQvA`0vYVVvy))OoݺԩSvZz5j௿zիWG:g`hjjܺuGד/(((f㗖SSWb%bXqI2Fnnl65KmlTPj)5ZxyyUTqZZZ7Fʺ: R[[KP(uuZJMMM]}]G{{񋊋 K    krm #6 vw bvb1PQL8VLD0l,~< ۳/&>psqߪtS7q+|>[(WUU܊r_r+9e28<.ATՕ&s׮] E"̙3[jUTTueX<`aÆf+Z"榧'%%IkFҞ5#CCF,x?~LOOOO@ >JUcijjhjL S3tSRkH*8eerN=YRTPT).*.,(*ȫ9Q(}}33333SSSS6-f VTTtƍ˗/ 6[narm6*UfMִiS ӧ+W+W-[@~˕^**.WUodhhffjhhhbbbddddddbbblldxRSݒҒҒN)_EQBSQ`2i4A L)*) `0) MUUYYMGDRQ!ǭ >_U)H*UE"J"ny9WU~q次Dk54X,&bi4Yd2knk?~:A| "t}Ĉ]vwԌӥ }ekkhkF?OH˝yy99%%UDAAACFb jt U5IUVVU壪J˭+*+/*yJnEYYYi@UJJJL&KWOOOW@___WW@OOOOO:#=ztW^Μ9)))A(((Ι3رc-[=zt۶mY9f-hjjZXXf /x<ލ7Ξ=ӱcG777[[[CՖ'N]ぁfZxqHH5Y dN2udgkΝ޽ۻw/Ar EAAaرɮ_4rrr>TTTb,--Q3w޽{߿oժըQw(6oѣ@ss󚃩ӦM  bK,!/ ܽ{wdgF #/_uV2dHttw'L`ccS\\,-%%%}^3b2VVV4`gϞu떁ѣHv(Y/--ݳgɬ9khhضm۷=zTWWĐ|  l H$ݻw"; Cꅽ{9s !Cddd<ƦEUUUҾffaaannfmllP3herCD^^ޔ)SƍFvh8s}($'OPQQQUU-))QTTD֌IN cxxݻwMMM=<~ȑ# dgdŋwޝ,}.@|2444%%K.'O600 ;˖-KKK "bѢE^^^VСd#88aaat:,zxxYŅ,r ##5I4*..&FliMӊ<<>>d'MP3ŋ;.CBBH  ;zhwwwrϓ$888::F :t̘1ݻwАxpqƑ@xP⌌ѧO5#6mcc#STׅ ٣T]]u 0>3g4id޼yl6D?E$-^8%%EYY9""ٳXM6ܹΎ,Јx"44 #z5Ο?`08F;s F#;HIIٱcGzzYTT4}td#Gzxx @ hA2w޽={vhh9Y GH$ fZYYY G';7H$s΅ZYY-^ĄD?8o<]]Ǐ:t(::(wBC=uI&1,XH$OO^zM0,r#:5####uuuW^-]˗AlڴM6d+##cCKGEEviܸqC !;,EDDDDDx͚5dg͛7~~~m Wx@DRZZZ^^^^^^QQQ^^.=^]]]QQi4Zf[***t:`0L ee RS3JOO.h'G9Ͷi`5/xٳgB''-[ )鉮rPXqcX ,KIIIznÀ޽۲eKiiO=Ȏ=.\سgɓ.\XE_]vdgFA"7o߾dg'(Ȟ_XXXXXWXXXPXXXPXPXW\YͨNg }}==]]]]===cccdgjF5 5Ԛ֮]HRLSvEbqaaaQQQaaayyyYYYYYYIIIYYY]ҒRXT^VV!UTUUh*Te*`2 &`0X,d0 `hkkkkkeH?|c"##;u4g }[uuرcy<9Ǐۇ.40[n;x P7_|JvyH$IIIYYYiiYY E%%&Kdi05|5,U5u5:]UM] 6|>[Vq*<.ǭUWqJJKKK8%e%J (FAfr Դh5/\vm۶mݻwy󦂂©S ١OeeedggI˔EEEEEEEE5OVPPk0*jꪪjj455UU5u :]II`JN*TTUi*4(bnyH(q+WUUY-" nyYU%q+**y<>f(u:][K[OOOGWGG[[ZH744466644Gɣ{E"Ѽy󜝝Ɏmx^^^Zv ١d˫^^^dgF!!!aܹ`dg(,Pݻ7o$''>9% )[Xa&;5A*'+=SfOy2󲳲33 s PTT433mbk۴iӖ-[hѢ.P7rrr>H7cX}ڵkA_^~1===+++777##3777SV%'}ajj3uY,-SS&QDBNqqIqaiqQqA~iIQiQQIQAIQAYIqiqQA^NbuT*UOO@O6maaaaaahhH'2p>|驨Hv/{xxl͛7$ P2vҥ}>D>`qƑ@nx|_|ի/^&$&L֦VVVfZzdCȒD"R۶m:sP^z~ GFF۷{@722ݻW>}z쩣Cv())n EHUURZ3jث:Pemm}= ^Wi$^|EEE#S5҆:UUYCəS*+)gLLL V]]ճg9sh4ל9sX,СC-Z$HoaaAv(۵k׃ D";vA<<< P<+++sV-kդYuwjdi>%Ľ~ɽ[Oc֭gڵ#;ADiiijj*jFu󡡡'N$;Q#RQQϟ?ŋ>H$]}[Miʶ11RW#H2RS?$O"ttt[999999uؘ?|͛ǎsrrڼy3١dbҤIݻw1cY۽{wBB¾} P<FԩS8}u:kv;wgX_ ʅ*{|zVVF1c888YÇkF***VVV>?~x6KuusΑKKK{_c*BiľC&-ګ5C$fOxWo~vm;vسgOy۸qcZZo=ȎC!'L:}ӧX[[ @Ʈ]}`+++@ի @xP(vԭ窫Ǹ͚5m۶7ZeeejF hfffl6[4A͈,(JQQ_Evї/_wH(wl]sttPw꤄/?{݊r{ׯCJJJdln߾`ddT]pww4iҰaÂƏIn*KKK1c_߾} \``۷oKv94d߿_n]ddcH!Ldjx܊kO86mv+V4/ɚSTT~B?JV>}zĉs>25;wwֻ]n &р|Baݾ8zڇd&էo1nn46ׯŋ]]] &FM svZXX.Ԣ >|j)@4Lk֮ ?~}oCR~$2l.ivݺ}JIIf,mfTI$ooO> ѣG{{{Hǟ~45Hn[V_ٙcݽz)#:]c!cƌٳ'J%;Z#"vɓ !q)S^5""ȑ#dE <o...~~~dgL, >GД/_|޽&l Xȕ6!,p˽tɵ} PHPlV_7oA.]fO=zto߼30hAÛp$;ȓn^zRKK{ҤfffdjDnݺ`ccﯥEVիWٳ㹻6mڬ\<Ν;6l l֬Y!۹sgRRRpp0A;Arʴiӹ3=x$V ?'ڹvDP٦uQFYYY ~Ӛ5k}\eHHH&MϟeR28884kԩSA1BQQe˖{MII!%@5kVzzK Y˖-tÇPa#h ݻ[\] Asv??܊r.=$oMFjSLַ}!%^Nf3RSΞ=ӵk׺de NNN[l!;< {]bY"^C:}?qH$=kO&yymڸQWWP D"2)7.sdL3d +VtܙDr#66w#{O]Nא E ~D"vTբ7L>B{ɦM WZ_SI&n׷lܸq#Fx񢣣2 @m/&; 4X|Xq Ƕn:uhuY~F܋tȞM+ rnESQپr9wyo xܼfDHA{򨢌ӲmCG5kgxyr?a A<G74v:ztҜ21wǏ#|>A|>cǎdǑ+VؽgϪ} %7I}>}~K|UUU2rHwCgjj2*bg]:LYLռSRtȁ/\'.ںb~nozEE)s<û#XR䇳QuN!ާO響DDD@@@FFw?G pѣGkiiɓJLL\~={hEw>>>'O>{ѣ kPPPUU_Vk JKK7m}Cz,2lg^<ʈ ?$7!SR$}~Q~iz߻KS[楨Yn_=},_>۱jM+^<#(7.M|L/PM< o:Mm=hXvm]8yD"fNYQR.\=.ӧe8,s1 T*h XttƍlIz눨ߧ/`wot}sٛ^8֩S 000`XX.D">CGFvߧ/`v+QODo` =Ng]2g1c6TSeM~nvЉKҵx _BaOߟmFϚ4uԶmжm۝;wXwݺufff=fnN>=`]]^z8qO>[liӦKmg3111{]lYbXvvv>СY)x*3: IDAT.=uhڢU=_+--pt5[[[*jkkKv(9p4LSs:ud-)*ȳwl&0=ڔڛU+D&yYZRLQŋ{yy/DjAXYcg K7ƌ+%BWW'vi ,TUU---055gYq޵nyn6YClK R>?66?/igf?FՍ̴lv]l _P(nnnWFFիVOlժɓ'LMM;utΝ;HOvvv4;@3229rÇt颥Evhh\]]ܹ3m4G_w~gɚK߿qYK'KN._<.}^חsDȪ3'ǎ }«o%JKxoyO`ze]9JJԲҒ&WOiii[YY/^(rrr4iBv(0`'n7ed~/22e[7q HzD$8TN7Չ\9xjC%{zAlFBΝ7mڔ9ڛhԨQiiiAxxx?z #GnzӦMXnwww 0@ꚝ-=P<y5bĈO?$2{^QzɵSRb|]e"&A/9qXGf.^qh/>Bߢ /3͜2tgϞBaTT`XI&|>‚\rc휒|"YCN_Ŀxܹ.ǪE^t)ZGҒ%K<<<8 _RÆ p8Axzzy&..NԩS 7m$ e;/Yl¤_訪ZK 5իWu˗{wen݄meKvY2An޼~ĈUUUEEEXܥKbHԧO gm]).n֥1,}T)((9^ <gt.}dg{nN ;+3f̘ۿxB D(??;N0tr,;;{ҥǏsr5ӥkO.m yhըH;; x"99R(`z۷+V000X~=Œհ%%%SNuuuYM @"D秠@PȎ 9r%KtBvz+@ѩS6myhuS{\coMqυ%K۷OUUD=W^WTTrzzzÆ ;rH4iBv:91lذA%ڶ楳 JM # Xd5-wբE޽{NMMӧOo߾tɓ'o޼͛BEEE&tuu;v}ʕm2 ƍ!C(((0pWWWn M6ϟONNڵLf B>r䈡qPVVNHH(((ԩYx Yx[qпykgADa^Nslx-Z~l̙wܑH$s0`U:txA%*ۀ oI=9/qtڇ~/X0 ߿REEґ`ٲe6m277ɘ'O^|tٳg3<ٳg˖-[xq=d2#=zt!,uرӧO P#h޽hǏ;t=ou35^e%v=vd/_>c EEEC}aG>}tӦM ҭ[7]v5k֌ 9|gOt?v f[&=744;vo,K&RSS߼yOPLMMLMMk#?  64mT&cY&'''$$Bd2[ldhh(Y7n|r,56uԚfϞ`06lP>?c m6 CBBBBB,,, Ĕ)S\\\LBv#h$Ʌ v޹}| Fejj! ]r!G-fΜ1}t:Nv.d̘1?uꔂ¦M̙sȑ :ub=wѯ_ǫչK]{ TUYѽ޾)K_ߠ~߿J߾}˸ߋD"6زeKJkX,~yz\ 88B<}tٲe_,z5jԨ?tbxƌ c֭dgbO> %;@}4 ?p`IISn0LKW\ GuݘE>& ۱cGsxy.\uѣG^x+W|2#EEEnݺ~ru 8hƥyvvZ+)Q.;3=g cSS;u4hРAYZZ}ˏ?*((4iiDo߾gN>}8ڻwkB!$A)QqzU܊hݫuSŪu=*k QTPdMN#R~_R?_ٙ`%%u՞s3g޽1ŋ ,_{TgӧN®2(<6$00̙3q1^ļ}[UUҵ{׮]ݛ">zH(jkkuЁNS|={ CѾ:v۶m%,\`lذYf 0`̙ߚϟ\f˿:Mݻ۷oO>͛|knUVVN:ߟ,3f͚5Tg 111ݻw~zz!D/0155672e*HR^ļy<>6&5T*ev~pRRR.]4xٳg/00ŋO:#|X/b⊋!4M]SK[PVc`g(Rne[c99Yi)ɉə)UUallbccmaaammmaaaaaDu#~ٲe j>\bņ -՜9s@=|BvvvttHT8X,''odkdb`NTKW_SGO%}8;;B]+zGIٳgɺ=}w֭:t3sƍx :3g: l;|Y(#]^VV3`T%"KYIᲔ,eKYY TT "T$,/BaIqQA^H(I|B*///X|…ɓ'0ŋ?s@ 8}y1˳sssddggKJE:'+U8\͖999y G^^f0L%%E%%RUJ$bX,. *+*ʪ*+KE’bYQEEysTT8|@|ukhhw@ hXwll,ׯ.չZ7oYE~w]nݡC !/h7o3tƌFFFk֬iڽ{}1Cuh$ѣFEu}ֿP@ $rssrk %%%B '=#D$N]9Td*)2[<GECfx<MMMuuuY$uuu55{КݻW(1:++Ke_***DJ6KQQаib $IAAlNUUUINz^yyiYiiiYEEDX]]]s)TZTTXX F.+''t (++ ?***q\Wo:x޾}ƍgΜ144߿?˥:`֮]M6-_|ڵ_Z{ԭ[SN;wnńI&-XٳguXŋ7oׯ_C*L4Ν;N: `rrrΏ?F 'P͛ׯ_JzJNNJ/J`0 3˫RZ@ӧO?~SNX|>t۶m˖-[nhѣGo۶m񚚚666'NزeK޻wFfǏ0`###@ yfPf7цSh"""obLMMSRRt6!Nh4BT*ųhlfff|||M ? ![lXlYiiۻwo 'MӧmٲE*6@hJ }L++#G߿?==aBP- | WWp@#6*!!_~)--MOO:xDp(Aӻu}{n۶mܸq'N(**:Z3qƼ~\#GvimmxرN4i֦MZYfeff^r Ђu1???>> TB@[Ӆ o~L&իW BHvvvMQUU:@affwݻ_pa„ {IKK:Wsa``u˗YdXAAACYӣg*((~ҥK ":::C=y$J᫙m ڜ۷o/]K.V54p8<@ )JSDt<fBGG'00pΜ9ѓ'OG ==_5##31Ç_tI(B?ڵ3fÇSSS27;vOh...aaaT XqQF-^NLLL!<O6Nk/[,33sΜ96l@5 !DGGg˖-˖-+++S Bӯ^*;5=pBPbM4 Tg9..}-C@[lٲ)Sh !UUUxb#lFѣׯ_6et?"mٲ%==}ʕ8dȐ@Yˉ'>8Y^^|M```hro׮ݾ}-F:ePx&̙ܿ;wѣGedG5j 3GG]vmذp(?߰aÛ7o~O>|D" 7.66ӧlhh8f̘'N5dh&G|||߿Ouhé@r۶m[reΝkddTgBbbT*B8:R)j9sttܹs?#|-WƘlܸ+Wd:eeeOO:$Y[[;99;vc󽽽n*J66@֭sDDChPxКL:޽{+VXpsL!D$t&){vN'5h4Z.]?'%%M6m׮]EEETFv֭[ŋk~r:tH$}pԩ>d:lٲׯ__pC43g_x "999{ @@디pµkvĉ]vT]]]999BHYYRKuZ#4s[vgƍw!HDu. XZZ[.22rݺu 0Ӳѣk㡯?nܸ#G$%%5Jt>rӧOSZsss.PGMyy޽{ݻwzgddhkk>D,%%%J#l-c@@Ynݺ5a„sεJkk+W>z;7É'&%%ݽ{c󽼼m&H84@fG:<4122 @@3fsٹs'OIOO)沵/d2 㑬pww;y nݺEu&2lذ1cر3tгgϖB|N:%AF:x 6\nƌyyy/^:0NNN999Thj(<haRiHH<ؿ'Nxyy1̯ZAAu6"H$:Kl6v#4քN6ѣ7o}ա”)S qǏp¨QbqMqAǏ_h`gΜ)**: $:t`2m R ,_Mp5t:WPP@PxSYY9k֬۷Yfuu111fzRB|x``!CX,1b===UTT>v &ܻwoϞ=VjwXxʕC\,b8;;x\.WCCC `k8μy<==w1u#FL0ցd\rѢEkxÇ72bĈ˗/N< .Yd޼yoݻw!''7uT[[[@`ll@#hr'+++++0? T$}KY`9EE%SU`0Jl555-]2KYNW`(*2 NӋ rss sSr^Ľ-L)Nb0ZZzzz::::zzzFFF&&&&&&(hMh4,Yҭ[~U ͛7ϟ?GqҥBtܹ3gsS>z( `ɒ%̜9￿sN^-Ӗ-[| кZ6DݻYQrJJrrrzZznnlW੩ju@M*PWUr=t?aqQ^Nva~^A^N'u+Xzzz&&&uɹ|[ V^4D"Ū9d0u:|TZPPZ/_}VVf$4/SUSl(RVkh ԩ踪KJEܬ̌쬬̴oegdeʺ԰W Z555??رc&L:th^f͢E6o޼tҚ74bĈs 6f31c8p`]X,ּy/_޽{N:5՛h`&&&ҥ ɤ:b8::͍,MGb˞x"66mBBaAUWXM]SM]K?@CK{@=.545؄ʢ쬔WY)ɲBIg&&&&ƭzի󏜜\^<==۵kהl:d[Jeddz/ߗVfl Mʹ - 710RVP`PYc)ڙ3%E)Iɉ)I)w=:uljR"!`kgcmmeeemmmeeeaa2n޽Ǐ߿xx544V^tRuuӧ׌:ŋ.\8q"!dgΜ;wn=WsuuݻݻjW,'O t钗YPUU555@(<f˗/^xU_JMM4MCK[H̾k}#}}#5u C4C @S]%)IIi)))IOS+++!>߹s';;]v޽;AAG#&YUU%Jk@x<&%]i0WKKK~LQp M Mۻhhjn\KOmZ.=WgJJOz&.)!.tB˳qvrrtttttDR󧨨8sL-[L>}ԩ{{{__ 6ÇFyÇcܹsԨQ\gԩG={vhx`ĈO۷/S4m3 IDAT@PVVӘ/^fB8\Y{j*PQ 11=(Hr2ғSƿ{udB E666NNN-DEEŃnݺح[}PܺNG"BF233#(̍LZTld;W:׌% o>~؁JKX:8;9999u‚P?={/^;5^zeeenݺ O2ү_ԩS\̚5kÆ ݻwg&@suƍSNTgܹsZZ 5D"Çݻ$""3#&Pogaeh~jafFlФ4u5u;vJy61Io^߽wݛ8Dlo@-X~֭GI$Ν;Zٹv%$T*B k !ZZZYYYJ2A/^_z^fF30i'/6_l=YG~vѲRe6[>}t?w F8p֭[#FL4%y{{_^EE8jԨSN >ɍ?~Æ ^^^\W^wݶm[@@RRR?~ݻlhhHuhLftt4 IR3@[rϟTVTU8fֶؙ[w76E39Gǽ~Yfz*F365uqvɭk׮:thIҗ/_>x $$$##ãwjjjTGZsVz{yym۶ֶfڮ]ǎdɒ 6MQ6M(޺u+ƍM|z~٫~YҥK׮]vuqqQTTlxUUUO>}󵴴cjjڔ1>X,&.p844MMͰ0HDX,VSl]v!wbkCgELu:hx &ō"߼,ߒ>>>6 4cǎ͡dn:o޼#GN0uh~~~K,Y|Ν;ՙLѣ?>rHG&Ljժ1cϟ}QQQ6`ppppT*@[G_~տdlѭBxYQa=~ 7'dv8h@OOOKKƻo~~Ç=zYUUeeeս{w77H$:t j>eʔAՌ[~ؿ+WHǟ:u_z\һn8|bڭC.v (6j${AăJJLLMN7L;'OTWWo]WWAߨBaM2W^}]HBB̙3nj_9smE^^ٳgO<8,L]K׀}wp(/7o߼srlt?~5չlڴ۷&M5jT(MȘ;wŪU䂂:t >O ߽{yILL5kghx fӧYYH$xC: @C|cǎ:[||sֳs~Ԩ𯪪ʚf!) jjÇ Չ@||… {pŠ{xxL>]X,޶m'sĉ/>|XVmٲ%""رcL&,Ь\Z7W*//tґ#GoS;dT7ήh_ʻso^Śo?uʔrC4X+H͝R0`ի;uT3j*:|3ǎ֬Y1[oݶ-*2ҹK!ޓLBO##輊 {ٳfР:TaÆǏ=> [bŌ3Fq#G?~\V?իs]ťTWW˾8׮]$^^^ޤIƎMuh._|ر .Z=,sRSS.\3nܸ=Qu-ǮC_֬100?rȳgS5{{{POuFGW^}I`G3h S Q@Sc/&"L$,qާ!}7ſw'<{(/'w5{~Bt' f߾MNxS{DQk`gdRv#ܿv*/-|ҩ#/cwICCٳg111/_ֶѡ:o۷ҥK{Y3r̙7n8q;v_#G8qbglf?2@+++4iR.]ΝKuhR1cEuƅ#,ūW޽g@]s̹>Q{r֫(/ث]zxϿ)c~7y辞[;^}a޾̈́}:ujEy7+aIS}-fX*~7l=ߺר]{BϞt_wx2‚bQ 0`…}[YrΝM6]~7o$|q@k?o01l뷦4 k/Mp&,)>cӅ]>dee@dǎw߿ՉX,^|wvohhO?^ڲeKttѣG?P(N2[nsi"88xǎ722: 4_6l(,,ܰaAZOx񢅅'f/Yu!{'#Wy_k evՌ,Z鋮ֱ[^>.=spϛW5?h4Z 7`/oA ގSAþym:uv~ khjfԮOO34sύs9}mH61䪪5ԍj3olfԩUYZ'Ľ|YޥYqm\uۯݺuOMM:QbXeeeG! !{ ܹD~_} k4Y<}iq^^^{|4޽{=zTKKkΜ9'NhQX_~G OOSNZ޽{;::n߾!399)S~+OQ Rw|['W{QfkF^D=xWeZ:}8rI$+;GHZr[c#U8\.,UQ^~瑏3ҍwկ3oeOi2r^SfX1gJ]BCC 8CaXGx<̴,++h%%%MHNNoji%2Ih ԻfeYvo ؚS"I>sݮ1Uϙ37QoPUU]nݥK8d>Ouf͚ :88~Hk ?%1KIqች-{)'+cއ~]/;NoV/~6?yJ31{>Xү_:9RG4MSSNǣ :޴Z D2zOoV/\Bh$Z_B_vo `O,Zr9+nרϚ=}k6JhaÆm߾=;;{̙aaaT'J 3008|i.;jԨs :::'O,rM6-..T>** }աX>}Μ9#H!#GzM+xyyݹsg׮]ׯo ܼk׮ԩlSZ:ϲ2%%%4t<۴yS'>éLEN<W"Bݷ`ߩGȇd11=u""aI3CN9W2m;j!fV6O=F!h4?c"R{ ?7_t;P"''7g*ŏ{Ąi=&%by:/0q?;c[^VTb)/Y~y5(J3ҋ n]cHvJO5S|NcGYYY5R4..NOO/--iӵǎoAifKN-\"9Knkݮ ˏYpڵܦ#ԃb-Y?7o^ ]]'Lн{wyyY#EEEooON͛q·4SL̼y&Aϟ?:@#B#3ןսߠ;7|ḙl=YV*b2<5qW\61T* 4fөGBQ;*_Щg g&, \|Xs&ͯ_޴ZasQ_ms E25-Ԓk췯ȭ{'O߿) affv9svL֏F-Z(11ݻw$ 4(((ԩS ,lmmo>6p_JWW?ω'zd2322z Y :TWWsUըQzz((0B.+~]"G?}),.wW\TDas| ͚_:}./+>+(0>?@yY_eOmt<n\ejzvRYZk¥G]uDwaMOHH 6a/A@{VuV[+^uVDm:DQTwHD%syrsF@97MJ,&CD&]S]-˛桥CR!<O(6hjjZRR"H4U"y2_}}}D9߳H6f5diʹ4޽{sATJvCWZ h4ו+W3̙3e2Y``Wuuu8X;tӧdP!xoALLL_6,obs$[ ұsw MM+;ǘw5L#3sΟ0ږ aP.WI !s͚5kϞ=vvv Ĵƍ:b.Kvhq:u.8YT;M<#1[ IDATZG߽v]{>1>{uWA'\vܬꫮꭇԇxٳG;;v /x5J Lug! OSs2?!'001s|DEYikWS{ *>fu2𠵵MΝI̠:<###<|Q.] ƛ}Fy-t3g,o_?OZB\vTuSzznݺ5Mz}6۷ot޽K.Ϟ=;{,A eڴi |ذa...;vhu>(M4FZ"*9T Gv+Vi5Aީ p{>^}^=&A+zE<>뷞 eޏE~5'C"&dJֶjjja!ܺo!~,IKz??WIs~GGa,s^{sIw3'l-TI҆jJ T%'77k׮ $77ؒ%KR"B}x 9\vTu}5‚~-^H-2tvӺpVZ/^ѽ{wF6PP(K,9wcϞ=[TTDvhqL-@6V000Jxm>-j VZuƍŋ瓝x<ޤI(2Y>}ӘMMM'LR\\*1f]]ÇZ"77gZ7M2n-ę3g|m^WoCvf%Uj0-0J,62|p,r 7[GO`4qw䛘[P4]Ҵr1?uh!HƎe˖]رc.]:rȺu6nHD@@Ç}}}I ۊIG<~dg)GNdQ1{܏]cIYŢʕ䤥ܿNu7&yfXjժS"xzzٳGSSs{P(v֬Yvvv֭kMڵk۷o?x𠅅Ye駟N8Ӿډ6hǏyFJsa}n] ;Nbs6vd=2`Nc3ֶ O 041kΪ# 4,G}%M(+-e7ڲ_}}}pA,b6nnn^TTTRRݫW/堉I^^~h{ףϟhZ1{܏]cMNw!ŹwFQ+bee_^beX_uuuuaaݻ Ō3RRR"##s9Xhѝ;w=z0x`++FvvٙJ*;Q=m'&$z娑XاONBE;5ѣG=ىAQQk@P?J_9hjjZ[[>8FSSBDƍ>;}Qd'6N,mYcXx\0Z&vŋ]V,Ǝ񜝝o߾}) d\ޭ[^z۷VQB>}- ptt|9ATGa<`3h&_5ѝ7/'3}Ǻ' ?xqkimȈFݽ{gϞASSS rrr;b[APV\y y]_Z[SCv(h"]6+wyE]]]'9r;RSSΝDvSL-[ _TT_lݺU&5*$$oĉ٪ 3gΌ{!Aeqqq.--%;@C|;o߿`>Yܼth'Y?aӲlZpppjjŋ555Ɏj :NRt꠩innnsEkh4… fx{9K^/hz{r#]޶m̙mۺuqo߾gTJvwhӦMqƨQ֮];~s5r' ={`Mh/-F%;@ӣ6dUUUgΜ q:1`H!ûdɎvr,铻׮ܽ~9+-~tΝ_~ŋ4anĉ2…  a|֭"_~!#i$vSPP_|9{AtsAN];Z"M6m111%%%Ax<kkkkkkSSST#j7nصkutttȎv bzzz .KY,Vcf]|O?4p@Uhr999fZ|СC-Ȓ%Klll-ZDv&#h999ΟJԣw!{74&;ADMu_۱cL0GdGk-ZtaCCÆ˗/G100h?rȵkׂHڦIҰ׮9܁# rb_xU~N®GNKNtt9u֬Y|>P+ @ XM6QTݽ{6nTWWZox!CfϞ~/^3LFP={DEE%4A )^|W\E:uֽ[=:uCg0Ȏ-Br|W]S>_oܹ/MKKS!%%%KR&ikkࠬCo?|͛7'''#;[(%K;v=ʕ+GYYٌ3F1gUhreee'N$; O|Fj 7nի[f('CT*}k"####VV <- {{gWή6FXQ$1yb%EjjjnnCbȐ!ݻwp8dglO>xSP(.\}||~纺M65) 'NuM#".D\(7إKn.]z9`lsc}GYi)jTj}G=zhUaԤ$'''%%%''gee) '[ t]vYbu7oNKK;tP}}ŋqr|g $רQONvh).\pB4%@~ѓ'ODEahljbbli`d*h-DEYiZĸ)q/ReRv.]vڥK={ٰaڵk vgbbrĉ;vՓnj3w#F}۷~oÔxLؿ_~ 29fddr]]]ggg''''''kkk*la7nd27mdffFv?cƌnԨQ .鶶[li qqq˖-[v-6(,,,(((00瓝Z__ߨ(___4%ʢS$*77  Msk[pKeEi )I eA9wwb#kkkz<8tPmmizh" ?~f͚3gμwٳ{_'۷n~aMu5M]`G.f'>O}"1B899,7g``@vL*>>^YPSSޠ[SNd׭[L{6nH֭[9֭[_xʤMnݺu[d YExO:dPx-Hyyyƽ|RYD3̭m& sKsK ayiNFznVFNfZnfz^VFVZ .`nn?Mƍ۷o8w\PPPPP.A&MzںuX,֪U C*GGGDG<{JYڛ[Y9ZY9,l0=%1=9!=)!35)5!N,QT[[.]:wԉ咝d2YjjBPCCcǎ:urssC;6޽͛s7nqP(?~AG522 jgKYYǍ7m4fP{׮],@>D2~ݛ,MGТ „ԔԔ* u:X`a"46002Գ%* r 32s2EAh4ήCdnΝo?ۻ%OOOS6_{!#)|L&KHHyylll|, tX`alf&;oTW[,iiuɩcǎnnn,켟(???&&&66ӧ IYA"P(;6a„ٳgƵǏ?~xPPBXbEllŋGBCC}}}-:2lΜ9 8;;/X MG+_UW F&|#.@gIdҊҊ¼₼eAL9ZnFݻʾ8[lFN8AFR/_}忱/_r 8\\DZKaY}}]YqQQA^^Vf^vF^Vf~Nf^VFqa:N:tprrС ٩L&KLL|ӧOtuu;uԭ[Ν;=ڞ۷oo߾}-7Ymmӻw6%N*JϜ9h\GHT:g͛78,@S6ܿ?AxفdPxmDMMMvvvnnnvv쬬ܼ$ ,3xQ_W'VT +De%%e%%%Ee%e% 3Y,33>>+-ˤIB}^{*vǏ5ܾ}_~|2}ZڌWKb ,6[XPOHXoolcoNu奕e%EEEy%%%Ņ%EM̬^EnW[[Ә$ ؽ{]Z[[cfvZ&? իnSA<~x͚5;w޺uk#gYr/ҭ[7U&PElܸ @* @WSSWXXX\\\TTTPPP\\\\\_T\TR\RRRIh\87,6`j0lWdXnihxUqMUUMMHXQS]]S]U%I"H( +DJHX7~u6chh |744DuQk7}t^[tiHHѫ#ǎ͞T(rrr󳲲 JN>>d! ł |||#k֬yڵkI6lؐ秮ɓիWdgD &lܸgϞdgh(< d2YqqqUTT D"V'*lWŢt:ԤRLB< &EkfJ!PTIRF&H D$"B\)Dof,-mmmmmmm--w- |&\rTmmm^3f̏?8p@H~~޽{=,D${B MMp4,:AghhXTr1dsy4:Ţ3 I(ɪĢښ꺺*H&rJ,U*]KPx<-.ko]]]S~2\'O$%%QԎ;v֭W^dkjjjl7,$Rr{ne!TuuW_}% 3CQQь3<=='OMoŊt:_%;oܹs%;@@GH$"J"TTTH$*T*J"\^! BPEbT B(hL&EW6Q(CXL`h0XL&Fp8 EX,&l6dZZZL&S9Do&ϟ xsז ̛7OyXWW7rȍ7իBKWSS# ++++++˕(G$IuuuMMX,//dn IDATzX\S]SSST*lphlDR9\`LMˡhZZZT*t.r\.BUA(FEE=~8::Z(ZYY۷O>dGkke='O:uqUVI$?Cq/,,r޽(88zzz* bcc-[sN미}i`W'^6DFFZ/77st:.++kޤ:hhhhhhZ.7xqΝ7n>}ՕJ-PSS5kџY\\drΙ3g޼yw۷/Acǎ={lVVց-ZԘk׮:t觟~RqX&{n\\\Ο?/l6Y.7k׮1bɓY,։'\\\,< .]ͭ#@:f̘~?|0,,,"""==F6,;,,,9˞={6ro!UͽvڨQnݺdnnW7h4}} 7778B#;t휖ɓ'MMMPxNԬ_YJR;wXN:vzxxx޽uuu#wޥh={l6)+˞={2s]r|nsΧOٳ'$+cx<=A111 ֭[p8A $$$ܼysȑKEOO/))#FP6ICC;w&; @7dT*ݴiSYYن vKJJzd3336j5---PLY=1cF``CFŋO6yyydkOĂ Ɋa``0f̘*̙3 | jkk3ɼyrrr.^ʤ*1cƌGHֱcMGL&۴iSJJΝ;_G.11QPv>B}Df 풅A]=k֬BӵJ:::vYbuSLQ(NRvرGA6f@0v@Bcii٧O7݂vcǎ555dh(<h_ Ν;={yfccW_o^j* @+88x߾}.\\tŋv́Fܴiׯ_R2o&,,L92gΜ!C?͛ӓ`2)JxyyeddDFF"J>>>dgvZ77^x'OtttxϏ7Nŋ &4Of tuuv:f++gϞ={6//O[[[OOtZ= X,ҥ Bi vvvOQQr#WTTɓ~0fuuuܵkWC뢥{ڵѣGavdՕ, _ Bwe˖tyrr/988($!v<~p@塮O8gggp `k׮8,@366:tÇZ''x|@#vƍ<_޺Qe[;88$$$(?f Td֬Y'NXjX,^r3BCCB!ZΝ;oݺ5--mʕvQ(s>xٳgʑJ.߻w;}?8͈#:GL:&;cǎ555d\(<hjkk7mŋ͛7d;;7_o({l˗/{\.';Z ejj~6hѢ9s###F222 \xm>ӓx{{>/@SoBŋP(NNNqqqd\(<hbbbΝKR8`ggטKh4[ T˗/ @&O{nmm͛77!!!V~^bETTTjȑWnGRO~ƍUV|244􃓌1B >/@S=zDZd ^hh;paJJJJJʰa^ht:sbܹs#FnML__9wܩSrrrLMMȎֲhdffZXX4}O:ER;vH@ xETTԔ)S444;w3YPPIhNNNNdgP(s\|:5RtϞ=N9s9s5D"pW_}ER_{)%%%--ã*<<|ẺM@U8N׮]`0nݺuԩTCCC=== jjj}H$:thjhhqqMMM >tPI 333\2zh55VCCC&<<|dǁ榭faaaccCvOڔ~ƍWtC޽[CC㧟~={?b'O?ɓ'߯P(T};6}+W)Gf̘QXXxEz_|?>$$D(:0@b&L Ddg8;;nVڂ;w>G__sf{eAAA^xO022:}?F$4hP޽ ;S(++P&9::(111111C%fWWW9sfȑfff۷/{$.\ ݺuSiZekk{N:T* 5j$@kZ <~xÆ ,9Sll웻\&$$7 ʕ+}}}|}}O^[[Kv. <_sΆ  ;w>|< 8~8AVVVϻ0Loo UhB'N={6JRM8?Jkᑃ\.OKK#Pxmɜcƌ4۷o///_bJ>?~`eF5k͛7 ߿!Cv nnn=z8pL&S]T&7flz>999TWWQl@$UWWjDReeq܆uuu6rL&ҢP(WVVΙ3gĈ*{ yfpp/}ݻwtRxx8Vݡ=H$N(JRP b=3ijjjhhp\\$U Tz#G 0ȈP(**Zr%BٶmW]M6py)G/_.CP$ɼy󬭭}||3I^^̙3QF('*9s& ȑ#ZZZdgSVV6y~SNdg(<h2$77 *IUUuX$REΫ{^*U^^pUWWe˖^O544'"uuu/^|CCÍ7*GlْO8|phh5X,6lٳU@EN,|._o߾g5BǗrMc3s#3sc3@*\./)*,(*'`wƆBVV7k,CC:xUU՘1cs&$^|4JNNIMM-**T70|o`d`lg`70zr 0p0/ /GZ_OͶ:T Q.|MjU__yw˖-ڵk߯܈СC.] Qy͛7oӦM{ 2l޼yfffׯWEB9~'=f$;;{ƌY> *,,|qttttttTTtAA>B1[؛[[:,v@*NOHNLONHIHILMdLͭKpttD#s6_>44T[[ƎDϟGGGWḓl̍Mf c*;[yٙyYyٙyYy9Atk.;;99)7---U*D"9y3glGj(JM65sYdɰaӦMhhر]<|pݺu;w|9-MUUԩSǎEvh& bĉcǎ%; GC/999oߎs'211A.9:88:u`kc'žH$ {կ_Ǯ{7n//޽{U HƏf͚~ҤITI TUUٳ'ODG$''IR Msk[sk[ [ ;+;GCS3MmVIaAFjRFJbFrbVjrzrByY)A&;uhDp--)S1Ԗ~ݻ6mRDkZ{sNPP$:ؘ Bnݺ̃*Ox~|/چÇ>}ȑ#Xnƚ5kPxm_~~իWo߾}t:{>\\udljSb} x<>}oȐ!:u";`k#;;3f!Zpŋ_4iD"pr~TT'O^J|n]ܭ;X PHҴ)I/_<"MLͺvҵKnݺ==z`̙=z ;Qs;wyuzٴD"oo/ROM*Ξ=v***fϞݽ{]dffΝ;wCmx#HNW_M2,L?q1|4@$JoݺqBzZڵ{^o.Bu14hԨQcǎrdkܹcff6u??RMP=688XѣGڵTI$Z:]\]twp?M*OM01yR܋D555;{} 2/";#|̐;wϚ5FLP_/^\fM>}v򰰰 `ݕv<޽{>>>k׮߿&Ƀ,F=y =z3w̙mFSPW^]n]^pfT:k,UV)od:cǎsoѣUB{ܸqM @D"ԩSL2yd@s;vUSF 2ڈÇ>|$99Ρ#{ }Zݽ~%63iW}iQ6L$_xQ(8p-sWl|5kA޽g̘Abv%!!gϝ:޹W?}ܺutVRNM 7Oy rرG۷/ڲV#&&YYYd'R!Bo߾ ._i{EFFn޼ae˖mذwb9s7oIBCC>ܰs@wʕÇcvb;v?>A> ugd=}{d;CPeE/s>,S yΝ;JKKtkkk 2asssCŋ.]0rԩӧOUVVnٲlAJJJHHȱSSRuz 3dX>9}P( >ҽWR_jk|iӦ~ "22׷/2eJrA5՜ bҥT*uΝO[t9111VZb['J3gtttT*BOOOc?rZBR$J$B/RHrJ$YFSd˾˵/~>;>s>u,|~ѢEhg#˙ho;t^ng'i-NL6.(,v4YD5Mk[ zz]:{lee H{{{ll}}ݻO>ϟ7dcAAA6ܹ##3k,nwxliYy`0TI6v6K>{ RRR9a0iiiKKK d:>^ƴi4N517eeeQVV&}M6w"X,VPP0 @[[[D[ \\\MMMs΅?ŋç0@#=mmmΝ;w|GgǜEvba ֨РW+J/YrرzH9dgg_csRRݻo޼),,quuUQQ144ܱcGpp Ǚ3gܼu25V6Sf?~HUEɴ۷͞={ U~Z AAAQQQ...h'.~~~wٽ{wm:{BB{N1w Z~=n}E~cE]] Y_*`LGKX,͛7͛(bGC}YXG{9xAu+#BO:d2899ю6CCCCBBzzz/_sΙ3gJHH睂!!!rrr>,LKK+88XKKKBB۷o7mڼqvM;9w!MbюF~A#&L!Ա#w( ZF1...===ss?zyy䨨|=X3}TUUCCC;;;QVV200`Op***<<<***\DJJ*00NMNC$룣͛*D" `ვ˗̜sF͹hC*[Cr4MCC\ߩ6&&+((bʔ)...VRTT@;񉉉mmm쇻˗/?'kHOO_s<7C];>cg~QAٓ3D[r2eĉ>}`0ڹVss?N888~wSSS>>><O&s/",,\\\#kkkcNP(JJJhg.##jڴiho[`lX~sj~pgܫBTQ m_]R| Ydn2rp%dh2}P}+ÃʘP^^˗/_sqqM2TKKk|mz@@Ǐ  >>>aaa8ahØLÇ/\f^M=Zyj*3R>mokS2Q&=[bo=iJCc o_tw U奁oL:.ŊbbyyyEEE۷qvv`Q=ڴi''ٳgtwwoڴ@ YSS`x5hg+444888$$ ]{{:g ['!h `FhoܫFf|~K ?f HMeES}϶ 'beggxիW<<~ʐbN52ISwPPUYׯ ݥRn~bqFAUJHLmƅ_|ҷ H$ի-,,nݪqF*v`6lb܆HKKʕ+x<^UU[OONVV> @OON A˗wqrr< aa3g޾}||tH 22200z.KNIy_NIuW b4)vga1b^]AywIg!TqG`^Y_h4tfff&&&&%%effX,333CCCUUաmT3 qpp(++LKJJdddP 8ưX 6^ܥ+,F:2w#3s}͍ ʻO\ S="n1o?,;L{8vTc4ѣW\qrr?o 0ƍqssۿ.zHA֮]jժ/Zo˗/O>94D"-]ƍs<e˖=|dzfB; FAAA!## ,ٳgfV}?JxdÞj*+b;CDLb˖ Ϛ{<1 l]q-A:;:n]8Q`ŊO.gn /n[Y^~dyV|h'Z𾬸ppa~ٙm¢-hy߫->2Rj*+h MBueK^xb,_ӓd2EDD͛E }LSSAIII,[TTGСC>.ZE1h yub{Rq 3VK~ >F̚+߾%_b>qFjrx> ee.T}muYAe5B+|PW{3#5Nc -_inrjnG.7{/s9+W"## Ǐg̘1j[j=zYMLLl cd2YXXxAAA3g$9X,v۶mׯ{'7\7o ƶm~$ #FLL,(( o)))ho0ҿJZuȟi,]fsӝWc#ғ#%E٥0o_x uUG ARPUuoU_<~m.8`0Esb#޿M7xR^!"$g:BDSS*!!AII{haa!Ɩ877-[u]w:%3 N..Kkk r~vN^N椲c;6]8'WwHsSㆥVɯ)wלN;/(/qP//D]7klfTPigݻwNv횖֙3gvUPPv!=}v0TTT_ :`pEPh#:M͝ A1Dҫg y) &V{3'#}e7O?`A+WG>a?Doa6oxиXAWO PczzT]&?^ *Oj'+(BE/zhAϺU3B&!b\\V*ᇜO^z8>0윜캺:<`%%TTT899.]\ZZtl۶]G]\iaAoO.RQ^ڿޞ"f:mnS.eWEf3_5o 5 j>`Uu _KN۾7BbN{D]}Az{{O5:$HNY?gNJVy woܸQV[`tܹsܹs/_`+VU Օb9rիW9sZVVH$ZʊNM[dI||/]4xõ3f]v0MLLn޼9}q |ZoooVV&Y@F0G#dF⋿{{z8\J ɯ'$<{"_lk]!uϞL HcC{})+_d /dz{{Z[+>q4`BUGzf9]u u=> ?f/^MII󋊊sss?~EP~D 166?.--V1'+++1GP8AdtP[ "?@ |+#""*~ {"(D1ϙ 5\;#IC[66_@ >y96#AX=GNiY-p288xϞ=#vR0$===.]z걾ٴi G9x𠾾w/eff`###\rۺusHHȲe`! FիiӦ AAA (<PxѨ@MK &VOb">UIIx9XQU#m-\/ح2UANz菌vAr2ޱKHȫ|s')fBb99R&37`_ZC]mldXܬwo/jh teA޿MAAEkkkKJJ 隚""@888xDA))w8NN.M=CϘщK RQV HH]C[s 8d 4GkqQ1 C"!~e䕺>ohpxm #s:0䌍 ٳgr_!6qIiQ Ib߱•k𔽿+ iM6TYrţ{/55#B677yZ]]]EEEeeeii)بA...)))999:NdX,VYYYwwwyyؿRRR]]] '566bXϘ SŸ3~n‡Է? N..AZ/ A."ù+yޗc۳gsi%%[gwܱGdڵNNNQQQ`m|ŋXAVVvڴi~~~FFF&OG㘪*,))1`a @::o=A7Ԥ1*DA$~S/wa}nDDT\NY-{]^h)ɵ:;:[[0[ :*XR~[BZFDLvO^D8"liiikko>OOχ N6mgΜa0&e IDAT ׯ҂!_)**孨@+bjj'G;ȿFnvr(TcCݡk{z:uZ["6&춀/V&%zoGKAܯT'znaa1bg̜9wĉnnnﯬbwޭ{#??ݝ;w111$%% /T[[}yK.LM蒓|=A@F)aU(f:A;AS#چSߧOM2Cd AGwo(/)]rZ=iZ\3wٓ'-bCƾKN˸j7H(-w*/'1/<:ɃV6n"DZX[ /_{_~QQQΝ۱cY455JGGdzgLMM555SSSZdBW"+W2γ7# Fn"45Ի,uгؘ7ϟ^8fVFZzyf?"~GmYϟqו ?:m`0;4758/ޝ7^w^܏,X`]Ξ=[^^`0Fr!8@w]\\}؈ߵ 0֖N;wwKT**00eܙ2uuuuu[n <v*PxQF?k@H"S5u : <^SA~A<;].>92x;.5Ͻyv W#sQTqگNTVpZxvN(-xd/ -r_SY ~׉ G>|Lx7 ,055А3bcc,,,455JJJ***:v[nÇwwtm_Ӄv;7:sk᱊a~{֭u"ew^>PuϏwԀܻ}gI=n~WҢg-[~kh:oXjuվ/ɷ ~H$0aիWBCC׬Yv&,,k׮Q㝝_WX9 m۶-'''<=캻[#oٲeIII=MhA7w_gff=8oF;˰`67TVӸFBbT w56׋IJW6ٰ~3g,?[N^^~ǎ=== ,Xzu߫>>>)))^^^(&[2oRE&SpRZbllw QÇ7onڴIXXŦԘM(--}-!:3iҩcG?l28'   }4|0 "M.i_X.."/y?==~O{m ϟ`0#s^ 4}ts}!!!:voehhr|{MJPPBQTT`0T*`L0AT ?yfffVPTT|AmmxxxLMM77ݻwutt``T[vŋ=?{s{[qȉq~hHȗBCCTUUN8155'uQQ斖I 5e%Bnx)Isx"T$O~S''+|@;7(<`jj/+#nmXe|bXEgmbTTԮ]Q߿/!!yyy7BR1LEE6AAA/^t67~xwEi1ڡvqYQ_-JאXbE@@KNNډӧsrr;MǒH$gg,A,X8`#''իWcX''W^hfnnN& (< ))7M [SFjƥV7135IKK@;@'.8 CLL PA$ @TT|fjjj_9::ff~Tmo9u۪%"v R,+-~]dyMENF;-$$$Ξ=f͚1GMMСCqqq.]1kVV֣G^jUTTT~~'O:u 䔕F5>ASTTp0Aaaa//ɓ۶XLCZ{E]c3sRϟꢝ OaaGV\9ufsssPx4$Xŋ߾M?$OrrrϖW{)/.<0{>ӧN۷h``0s߹s Z[[U&MwׯӁ222־L&AsssEEE//37n8`\YYƍߺ涶\E:...iiL:t LDDd…]k7}/g2^~NkO#}__ߣG ?X,vÆ YcP(wvvxI^^v"""q]tEx*.h rz|(..nmmA;)uH$Ҍ3CBB"""ĤߤDDD|||ب`ddd$%%O#<<<'O\PP\ Éϯv0rssQ(`0o3.\TVXFGaH{+..ag|ڵHotJLLܻw'':tȑ#w=<<Ϝ93"޽}vDDdz;>2)fM̸yHhGë7=9y1EEε177L& ''';;0??H$h4iiiEEENNN ޱƮcKVxx˗.\G=|ܹsW\E㙙~~~4uV/// .~: kRLL˗߿? `()) 󻞓-($3uڔl],]R,AA!;&MB;u߿ssݻs__3iiaJHL2452ҟ/ ǃ#-K~ޮo`8o ٺKJJrrrإHyyymmm8F)((HKK0:ߗ/_`06l]r##66ӧ=ySR0A`g?q`tjmaf}UZ&SXDd̙33\mm-)''Av3$EEEiii11!06޸q#<<\GGg֭BBBh'^^^nnn__aÆ:=44_@@`̀__ޏ=b0Cr G{{{$],kk֬B; |`<̌|eOOmd#4tMSC}Zb /s>ϝkmmm=uTaqrrqpp4xb[[ŋ#'Nyɓ99*iLTT͐FΎw޽LKNO)KLfbjjjjj6MDDTT]3'YBB{OO͛*X,[bbٳg_ٳg<<<NNN۷o0ٙJ?~xccEVX14pڸq'tttҎ;T{PxBSS;.))K*2AKy&cOww̌io3ߥd%eg+HKK|{VWW_r?kŎ=~1ARRRv 8&o$""NUV+()d tKs?|!uuG^^~$KLfnnǏsrrJKKhJJJ򜜜#/<<|ԩ6m}^xQBBka23g\n O>=~޽۶m۞={LMM3P?Tٶm;}4AP{յkG鴴~ٳg ok1]NYCKQ}0fsanv~Nfvƻw)uvvĉ::&&&kϘv &䈈??w\/F^yy7oSzzz4]BWTKHӡruuuddeg2RE54յtttX,ydfgggeeeeeeggWWWp8iiitvL0,Ν;յy)SZ[[mz 5\xKVVA[\pap_|׿~֬Yk֬ `۷o'\0>x݃Q +,,|?ɍ  J2 Jrte i:U\'vDUWd~,]QZ :l6>խ]vʔ)[lWTVV.**rrrgdd>ݻE_ Ҥe$ehҲ2R2"b"ԟꪫj*ʊ K J ˊK *J{{{PTUU444444̶wyyy9999998F)((IKK֊IkkOtt-[xyyNi [l9{,H,kx<ܹs &77wÆ wA'''ݹs' ƍCy% vZ:w^!SWWgkk{i---ASVV3222jpTq 1(MZ\RJ&-F S9N45յ5UeŅE%EeEmprq)))Abvp%ڇb-]fҥ+Vs:::>~r‚NA00UHTL*J QEb"A!2EL=zOk A #&&.'''//'///2&gdddfffdduww (++++++**rss 7o޸h-[HKK?~@Ȝ7?>11\\\fb;y򤶶v`gg^ÇΝ&㉝ղeGǏ+))fO SD"TAL)|d Z[M ͍ uMM 55UUuՕ5Uu5===""T:.+KOZZ]|Z;vɓK.pႚڰe#= S!a~ "@߼$>2|ZN]]]^^WǢxwww<}ycOIIٻw͚5ksrssU,,,V^ HHHH@@J0jwttvrrRSS۹s^Ν; #((L& A`2uelnjjjokoii; ||87777O$D"B!2ښѠEIIi IDATv+Wh4kkcǎ SN07S__vgggcccww7m&=f_O"DN.N>>><@'pxI$"LJd2L# @F'++ 1d^t鯿={(lɓ'N]vѢE9ݵ[JJ{͚5 {<ݻ/_|ӧ/ hmm]|E~믿. yڵˋD"},kVVV2221Ǐ޽{}]]SPPPWW0aws{𡗗Ν;Ў3PDDĥKo>k֬/dX6m"OF?ƀ===6l>w\_i#rvv?xp\C? ^}CGGǼyv=m4':v:>}&!!c0F :>!cTQQ111Yx\{{{rrrDDDHHȫWJKK{zz( @@;/4999  &`XCKII_YYY\\ 31ץi4ڻw---tbbbb}M_ COOOHHh/ ))yQX/YÇ}||lb``݋TTTxb…7>|||FFF_h& o߾ uVlllaaaggmLLLdrPPPbbV]^^#((111s CDDD^^~L!!P =$%%޿?cƌOIIɋ/aǏyyyhO#~FIIIǎ[hяnii5i$z"bbbs̙3g"KKK{nbbbEE 8A())xƍD"QYYyT3`0ɓ'gdd}aJHHHww&Ba2wܱ\QWW7(**`0&L **:,Б RTThhgCA?~MOO󇄄(((x: H[hĉ{zz҂o޼իrAQ+H$̙3 _zz777ڡAX)SLLLDfDtuCCC ب7`&L[MLL,===))b@P޽{1k,!Í) Y` (<R]]m6 \ ǿz A)SEFϨٳeddZZZ?B&yxxNb:::111aaaRRRhBzzz<>}~)(($&&yܜD" ~/'' KK˾"])))]d@&o޼ihh( vdrhh!uPxOn۶m|||NBOoRXXiӦ ɚH:u%KfΜIR"""n߾d2FIǝyuuoyyIڡ"{Ν?{۸**'''//2+ QTT P(A!!ܸ8++Q#..WUUeddv0LBBBOOO`#~{moo?}4Le߿bLMMGI x˫hbbbccÇ?3<<<99D"B tݻwcbbEDDiiiWUU}|ѣ2,+$$N9sfFFF@@@{{ X,eee}}}yxxTTT>7MMM-::Z___XX<**jΜ9hcϬ444d󗖖Z[[~|NbXZZZhg?9::~F(<`c2;v쨮>.jmm=:^~<<< &&&K.500MKK}۷dvC$ON"'LLJn$F$tAAAI& hjj`03ك AAABBB {11o޼uu`l B; ?Px8ֶ'OGfH$''-XB 9 FPPP]]b̙UUU>wޫWjjj0 I- bddߺuH$*++WUUmllqㆦf_t:=33;:f0fqՁȭA*v.mncV֖J3WRTDRR\q̸ٵ~$|?wևiӈD" 077'HLLLe8"H JJJhg?͛RRRhgGwUTTt1yy!%;;NNN!H掎jjj---= -++hP&2DdEuuu```qq6C1ϤIrrrxyyxJ@@{S6N2i FII) WEE}PAA! B@1xxx>|8k,(0˗/  il޼C-???==֖L&,OX,VBBbɳg϶KOO B;Ʌǫ <}ݻ_koo $HW\QUU')Lf0!!!x<A"X[[3sLNN%JTT4 @YYYBB,edd̜9 SQQΝ;;&""2s<{L[[[RRrH'E"TUUmllfΜ)))YPP$$$D SyOggqjbn߾jff UUո~8J^z!&&6qġ G^^leeeaaaL&S@@H$'cffF"]Vu4iRPPP~~Q(,+))n| ǫ8 \~}r^<Oo߾=sL,;LP(???CCa <+,,vuÇ ݇Yorrr~~>0L?GQQ|ܹƍkllKJJT*팣QUU4iRll͛7eddz_6};1._*&&]"b}}}MMMdutt{I&CBB,--=D0 "%%5n8+))IIIqpp@; {n֭uuuGM4h߼y!%%5̳``0BBB:::sjmmqL&d3JFFF7n 'N,..ӣP(=UQQyqfflFFƓ'Olmm{W񪫫#`0"##Xl}};wQ=EsssddY#FJII9rDRRrgt钭maa!@0*ԺvaKIIa24 }/~~~kk/N4it0޽kff]99WJHHh4`X2秥%$$ BHH{5F, @"HZQ?~YvI"?CeeeXXܹs+++KKK͇? qqqGGG55蠠vQQQ9:::!!!7n\CC ĤsrrvWHH֭[ӦM)++s玭-1lVVVbbnjjy3z A">~+wB?~]3rss✝t'O̙J R]HҪ OKKkjjA|QrrrHH0outt?~hbbc'5 :]]]UUfmm(((ST%%%PnnnuuaL&7@; SaXhgɵ744tvv!BY,VCCC{{{X,NπD"A2`xyyX,@&u`D voNRQ ŋ]vd AZA~d=d/w=sppH$yxx`c,0Z[[=z٩mbbbll Hakk!{E-Z[^^^[o99ރ9sѣGW^ev۷_}nժU[nE;ర7nGZ/AәL&ohh`M &YW_~ljiiiimib2͏bI$^ OGD$2D"D& @'HD"/xT?:uGQRRrʅ >}ZCCH`477wL&N3 XWWd2 &QPWWhd55747A2 @$T*H$^^^>>>zHP{=$ `jll|iRRRjj*~A|xqpG6ױd4771zAZ[ZƆ&FcP\_]Fp8L!S(T BP)h4MTT_m6qqq!lܸQAAaۻN>P;tttÊ^[[KQ9D&Hx<ōqsqqpD/'''pxACǏ`D'' QcC=jb477541;::FX_>^[Z榦ֆzzkKkskXNNN2B] =C!!! oƬ߿???F[ZZJIIkD?>|fkk;S;wݻ'OTQQ~~2?'?m:zM=PW[Ok5u uںښ궶֮T&"",,,LDDD$$$) ws}JHHHHHRQQ2e 4???ss7[^GGݻ===i4Z|||/_,,,|ĉTj=FXza0/3g… ooAcQtҥh#vEEE>}z^XTTXXX򹤪}% $$@"SidEFTAEF lchTVWְ(TWtRRﲲrrr*++Ϟ=3 +VPTܹsveeeǏG;XӧO> .?.,,,..ngÃRUP, @& dw1z51ՕՕڪʚ zuumuUmU^[>[LLL\\BZZJ\\]))))//Ϗ]AРiaaall ?ٳgǏP({쑑ILƍq8G?+WJHHt:j͚5GHII> hho*%F%Ko&&&hgqÇ 0eee}c^./,&L K IЄzZjj+K *ʪ*K j*˪*K {)999y#++;B:=::חD=%$$:u֭[BCCCBBnܸvS^7]1 {҄E$Ei¢8..i uυe5%E;ۑj䤥w+:0Z[[={ãoii ?zA"$/b.//RIIIw#F333C;qʕ`ssM6qssä_޾} ,Y#G222|||x gIIʕ+ q㆟4=#ً/v-++v^~e˖D*#BSSSFFׯ߾}&+۷%%TeTŤE%$cOcwJ SVQ?nyʻw.]+cc+V6lؠvZˊ_~_~&+]:: "b2*rJ򊢒bB"bMύ^S]RTPRTP1/]~Nva~^{[KQQQMMM]MMMMMSSSAAoGu޽&mmmkkkv8 Hrr'#--= 3޹s;w433:X[[bii斕y;v|޽{U~~ŋϘ1G# Z| 6n܈vݚf͚o>CCC% ӧ?NKK{VVZ U&-?}'5յFruN$''+++\rܸqh'KKKٳlbۯXbfERSS^RV|UN֫w_fec0YyyI:zǏm`.]:yd}[ZZڮ]Z~FG%?}"Ǐ,KXT\I}xe JEЎ F&&Cwo^. (=I_o|ڽbmٲӳzս/:weee-Z4{_~eH3# ]\\ۑ#G`(XG=~81QQa^mx-uqiY8zM7r2߽xXGG}ymppprrE Fϓ'O._)H)))=zɓ'Oꩂqړ5&(kW֘H  Z?d|C8QаLwޭԴ011F;ݻwYeeB \L&sƍX,]' J# GFFFF~4A M] U'hpPlБ!'#%9-9)FCY3f022bhjii 5k8ZadΞ={&&&ݏzzzFEE ummmIIIQQQ"#?xtN20k -?v5կR?{a|>>~i6fδ["Q*++ݻguuu[[[o0SN=~e޼yCڝ%55_lق GZZZV\)++y;w?~ty󦯯/@ 6h={|&ioon``vXGQW^'L5j=Ԍ O1*Y{O+ϣP 3FeeellltttCCܹsĆ3 zCCCDb/_ܾ}{hh(???ZPb=zq.#7R=,ʀ%CN{ĽJ{ASeK:::Bybbcc988L2m4s 7q]];v3.\p!]]];w?~<--ǧw˗;;;ϙ3`,ZhNNNCw)???AAAlٲS.]  0@>>WYsM,mMD Tػ7>{eŢC7c{{gܹ 2mڴ3gR(q Gqdҥ^^^cgWk׮\x+6Ҳh=}3A`|ggg===s/kmm}Ytt˗/lll5233:D$'##3t>}gϞȑ#_tRKKͪUz_ޗʕ+T*իQQQx<~#Z[[,Xh"sa&y!:(<w+..rj}}_la350}w?fsSӴi۶m566)>|Ö;;;MM! fx;::._|̙=jkk۷o0wBEBBɓ$3-RRv(NxPLA ;;;-Fw޽{NSS-DYeencA޾}sΑH$Ajkk]\\֬Ys .xyyd.[tڵ -Zx9s('?Çhg!$$$$$$88   8?sR E%bGq1_{WPXdnG{ؠgj1%EXQI)s;Aa¼|}3Ī?FF:u`0ccc_~-((hcc3m46(G/^޽; r899999͞={ w)Z: L=%?b¼ݏ R22r?8x/&hK)>~1ATR[p\A:7EX,V7ߏP۷m]v-Xqqq)))d2vHmmm/^_r]Ԭ]VZZ*::ٳk֬!N]O|Ν?[ZZҥKqqqׯ_K ]JJJ-[6F&۶m @; `L#K}}wM+\sl?`:__t}sjGDw6d*I(t=Y}dpE]>g9qdјt=+i ?Gaookjjn۶m޽OP]][<o``w^MM͟AKK˃.]ˇ3`08Bc5' ?bȶ㼒8AX,VMU7|ws _d dERr?A&&U muvnL=BDHDlݮ ]]rW˗}.^VVx}RҫW^|'Obbb8 0m4[[/iXXX߿ڵ{QSS)TUU7mtI999 yf77Yf?^WWH$v~Ș8q]pp 3f߿XBB,DhNNGK{{֭[Ϝ9c9c}G)]Zgd R1w٪5 wX܎$cK[Fcákn^3BsؐkާNO /^<~իW&Mھ}} NJJJss)Svpz{̌.>|pp 'f8-/?b&*_~YEm}i?dgUP]*K Z6HC-;;t UHҲhw߻"}~./-c1f~*)*PA^oS*JKd ̬fA޿@N+)OX[߸\}/e_n+ōwcŻp?j5kn89Wf¯}8@uśgrrrsuuy :999::&''GGG:tJZXX̚5FnQ'Nx{{?~<77wժU^eVPPI".\ѣg9rdޖ=:\rIIIց666X,<#Udd EN~0n}Uu /g/}>RZ\x ?ٓ kjٗTW| Kg)j Q7:M=ԓج/<4 ~7AGMz Ү)Op,sq:gYrkkVϱ)3l_:}h7d)zxmCBBv1{۷&&&{:uة:jllLMM BBB---jhZYYJxQUGwߵ"b5)O qLA*K2tLs`jM+Y,V^S >vO'v5:4" >^'&$݋ٴxvVF=V;~۪U޽;Sb&&&ǎ|ELL̢EٓbN7899׬Ysw555;>[[[:ىlْ`oo/--}ܹޟKϟ_SS7DӧOg0IIIhAIIf=.PU /KNN>{^'']c3!N|O{5XZbso8ϘuȑK~ !# a/7 Mz8!k1Ija L5~}<)AXLbu Lͅ۽9,{)"^@HAfo3Ԟܿ7}")1K08a{mU埾t<{stW{>³/oZYV\tzdCAX,֚,[nR\ue붲/_;[# 3>2 g;m۶Q(}}}'''555{ɌAw:ujdEӅ8mغuk{g籋x,= l=b|{b[kKKݨ$2U@Ic<`5c??rb c0jOXLv\HCvצ pjg='S:+^g}`}sٸsaDv_#))dɒ;vHHHL6tIOOs߾}nnn***88B9pM^⢦fgg5iҤoٲÇ8._|ٲeQQQVVV?w`R'O677G; /EEE veO71 _ãojIbgG ϟ?"c ))~FcCLXଅ˺%x]7(+yHf}4f/^~%H:w󯠨Vxn9&{/g/*%'.c#6"f:NK*/c{J55UcMUGppp۵۞AߌϤ?:zk;v  fǑvhinf!-Zr+;UQZ]&,löOyzziii#eiiwW!TRRIv IDATz;/?,_0þCK'ZO'm&*<șck"Ì-mUGpppG^8 HfZʓwܿ^'5ՕOu52 ǻ46=\SSb00\\\ׄ |}},XpFgΜٲeKlliӦDAVXu 333 _~aT "[[ׯ_DE;`LGܶ_ej=̗ꚓ2R LE61bnqZOTuzjCiCy?teGG;fgw;0DBDCkR$d嶶~gwOt "_O1),O@33[?JKK333C1Hŋ3f}N}ڨcZۡFzhdn#("/&%ojn2cOX,x!U5޿y5 QoqZ]'k.8ttצً֖#w'Oʕ 6mZbÇo޼i&EEE;;;ss󟣲>>>޽[n;h,,,rrrN:%%%%++vZŊ=.Y`All7\]]̠tttcccaEsrrNӠ_POZp\ݗSV}&sŖ݊j:;;^>%7יX J@͂MLRZD\5MTV=KҕQPb!xMX\Iݜ7ꚓBy}l?*9@]sҜ+5x9%ѷ.]^kԟMMȿمGϤ=>ZAޯ .**''gUUA!))ijjjH$^ _5ZC6ǥ+WcLfc# Rϝ DRsSSggg?On=p".2,^4+^+X>(uH$ھ|2::ŋSLA;ݏpuuUPP8uTaa޽{AZjժO>ٳ篿222244<}ŋ/^|E YY_~ҥK3fXhsRRR; cmmy/RRRy&)c XD)6k"wI꣇'a0qړyx9%yQIiE5 +% _V:d4rzhoo;kӜ%+6;87~p&*voS-}F׶>lf:^QV06R^Y\YV HA5,#SOC[)*J'&&) '|̽dfg6-y9=#A%%%ɻw_WW7ԑ,&,v/-a?SRFA=?9bR?Eyg0>ev 080VMMM\\\dddttԩSQ*L"%%~EEAs׮]k׮pww߰a}}}/_~=//'NdƌnݺvMMML`%/99,_kkk) YcT cӼ`_vzz֫wT'hh?{a?6E 6;f\{k/E%DE}X/$"2~{{}SE>|~լ97X;:w`Q )9%;AwzpVuE9{N\ZFHTnDϙ~l+@III0ԑ)Sh4+җX"ZX LX\RNINxآO ̬?wAD0&j# 80{* `QT'''__cǎ 8qݤh?DNNڴiS||` KR:GR/_~W^=|X,v񹹹/**JNN0 .v_o C ek{kjm ciDkhdefJ3B qaWK {q۱0/izB͌>g_򘠣1}/j+z˽癍\:}4w3܉ A"AaiyE>v_fy9Au^Z͜}>c06Wϝvfg׽N޾@oӢo{z۞? b#-;H}O :|V)UTTϙ3*NFnn݃\x ,_5!{1 b2Wζ{3usgmt҄ms;!WΝ`sȪ96 xk?Yc}ѝ-,,ϟ?o``pe˖9rݻwhG8^^Ç;88?~ҥKߢonnn)))vvv'OTQQ133pBSk6ccc555ooo999==AP`oXRj|||4Ǐ>n #""r劏#f?E`~Z>>22r***&&&q5WWWqqs}yx<LJ>r䈗ז-[VZj*gggWW^zÆ /^Xd[jjH)+;]]]X~)cfO)<<|/L20}?vaP_U^&"&C ʀڒFc4'gw[[ZJ  H"70E%)VTR sOqqv>owTWWdɒ_~XDdϞ=Ck-Z8fĺA_ɨ,+_:P| ''7BԁCnnn+++GGGaaaC Dvv;L>pBkkM:::Ξ=K.]pAJ](..>ݻ[[[=<<~<Cڵk111p v]vv\{ ,*!%vM `q/(,"&)G`zUpbd3f?E߁yx| σ'S_pB]aއ,yѣGkU&]t|ǎ`nn> ''GIO7OfÁ)FrϣGvn8aB\=qqqrrrdQQQ}feeS___%%9iҤ˗'&&fdd]ɓ'=Η qqs`b0QQQgGGIIIgg‚Ӈg<") $ Oc,B3gډWZZzI55_QVVfcc3t133377 |dC]Yc<~4`utDŽY:c<=ϑH$C4 &888ɽ|200ӧ FZZzD133+--I$ŋlmm]&**jaaq5iiiii'WWWGGG\2###770Dbvv~"77wxx(mGF f͚ecc_'L{FK@3).}#;6Vy:_AcdiիWvvvC RRR+WzpRZ^qLu?cAsSӭk6c|IЅSZZzڴiQQQD"ti``@R/\PQQzKHHtvv^r*$$deeeݳQz }}}???}}}*ulmg F nn@+++:H$RDD*YccÛfIm6Iwi^eTdXDA%(ÁAAM ! mi)Еm4{?h{:\zq?pBCC_0GΞ^jԽ6U&g_9v8?*G}?w ؽWZGGG?\R\\q}'V~{{]ۣFRT?ܹs Xjvرe˖ 6̚5so#@(,,4i_ݡC8z%K~w|GPJJJvu,JԫA?OoC`>}C?\NN~vĈIIIdGkvĉ;v>wر_~ރ5e篿_s_dgANNN6l#.5PK߿X,={1bCX^~Ν;Gꫯ>J.55uʕoΘ1cРAu70ac=z͛7 G>7}9s%?6'V{~fSd\|n:t١[tкTW_qHѣaC Kvf`ƍ{ݰa@ x޽{֭޷oopعkn=;v߾Ƨ̽q_W*5>;dȐ>}h4AtkÇ۷oS~߿}Μ9Q։[t3g&L~ϟ?v؆ |~㏳f0`I ׬Y}vCm4=lذiӦQsh(@>yѣGO8r"c:tݡ[z (!Av8]Nϸp柋23v[ddO<O 4H$7RTڄ Î;۷y UVVֻ?O73Вx<={dĈO>$ ;]|O? OwKn>}:]riӺt2{캛9W_}]v[nݲe Y,QF,L>=667$;:(@s:W\9rӧO>c4x|"*66}lQf.3+72/ȼRYQNPw ޽;%;cvg̘AP/_6nzС7oh4G9W._vAc;&OU;ׯ^y%K%7 rmV\x'{ջw3BRs!6xY\`AUUէ~+T7xO>W߾}?}u7;vؗ_~jժȑG3g/XbA?\xf]pŋiii &Nh' Q(Biofܼ~#Jn?y97\N߿k.]vҥK=Ɏټݻwݺuk֬ {/'N駟1X S^^_yU:F o."6><:N &;&4]vUw ͬ9YWn^jXtd2 p82L~P($;5v6رc)))ݻwu'Ͷx˗/={|:uO?2dHjjҥKo^QQz꺋y<7xC"d͛7a 4='Ch_voO@#CȤn.`0Ѳ舘68iBHT\/̽Ys0/ ^%vԩlIvҖCVk#G;vgƍgϞ]vm}ko.edd 8YDtxtlxt<*F$!;)b6VT(̻.)x>k[ömt٬T* juaaA4-$$[BR(DPtOZs…m۶]v-::z6n5k;f̘q=NCVVV~GӦM?~ȑ#ns… ,^x…>[3fL~^}U~7lJvh]P<&mY*<2J* )B!"H6RKbҖ( J%"eQ~A_EoӦMbbB\\\bbb\\\.y?Z~/^6EEE׮]^* <<2JG!Y8#06DYPZTPZ,-,P(TAǷi&>>>&&~fZm#yy<&kG") L+h233s̙!C <~7O>[oUwR}r:ljC ݹsO?TwwyF3glڴ!6lpС[S/ IDATb0mSp8}' ; .(@f0_yƍܼ\B7$L.)BdR"H"K@TR2ɨ)SJ4ejUqH**(),0Ah4L㽳6={˗/oӦ#j͚5YYY|M jVWWbRBAҐ` _u4^*є5ee#»TQ_ZZZZTTTxTj``$HryTTܕJڻwTSO=ꖴE.X!JQSNYYY˖-[tL&n9sy}嗳f8p`'eeeƍ[hQnfݻw4iAuAܼܼJU:W,KBAD, @Nkz]\)Sk媒JuU7FR(QQQꑑQQQr'KvvY&N /<ޖ-[VQQ_<^\.WQQQmJdn`0CBAPq$0X,":ݗz]RS۹Ԕ+%2J7$44*d23,)))**"n BBb3?سg`ٳ /Gv(  hE=D~wXI͛駟&%%f޼yz>,,`͚5C4k, _|842ťEEEERUm' - BH, DQ@\bx"M\Muɠ7&^VUV*ZmBi۳0YhHHhh\. ߟ;X)S Ey<ܝ"h,...))$xGyX,Bq@(Ł._ 8<>q/͋4 &du*]NSQ**5UZ^V\.~~~R4$$Tu1d!!!˽8NF-!yHEEE]EDVy%p:Ǐ߹sRLHHxzMN:?T}Qvk֬ٿ?AF*..駟ϟ2eʴiӾ QKh :bŊ۷|=l߾=%% кx-nWTLh4J]TVVj# Nas bq<&`2,6#CZvn zfYfl>s놺Qo6޺n46[=p`IX( AAAAAAb888bɒ%ϟD"Qpܹ"wީA}1L*{ Teee /__?@u1p|.O |>~Ldsl׏d0\~lحVjZ&fYj8l6`0 l&%%q8P,H$b%1((G.U$#k#) Cx<.]ڳgυ $Irr3WXAv'sap42fX,Fd2YVŢ-j>t:Vp8Vt&ۭ7 l2;κx<KIri4cY,r}|||6b|>aXG X,Ef3gΘ1c^~zɓ{=~z'4Abf`ZVkd2 m6kjjl6n6-.`4QUUEģ\,CPx|Bp8t:d1 _?_MRy<Aal<{^\n'K:խ"꼼<@͖J"RTÇ x'G!J o}~7h=|*+>}N/]W_}u5>tGlذ!44,pO/!CFMvhEP<h4ʹiڶm; /OhfwiH: :"yH2L&5KXC /"Y#=222.\G=дu>>>s]hѻ;`WU*ի:lذ={2<<=z7,pO}F[`AA5kf[jŪ=\A͛7@KR[ER6RYYh!!!U$DP(8)4k555GٵkWqqqǎGչsƏQPP0o<6g络N3JexxxLLɓ'駺&-[v8s̆֬Ysܹꚬ7?~&;"(R+W|8###??_VWWWx<F@ ׯ_^4MJJʁl6[dddՏX,V333嗈y?vؕ+WƍuΝ;bGզtر!DӧO[nݺFٳ'))09z_~9cƌgy!ϛ7o޽l6!,)))**T\\v  v0RDDD." MYYYݻ8@RzQFD9o<8}!CVZd2V^MR/iw5##c֭-[ٳg{6M'99yExDxкdee-\099y tWfddL0Br}?aFSOuI*:Gn߾=555---++KVl6ugZ*ӵkS(ڵD.>4B޽YndҥSN'N4hٳglvU,ҥKNb7<۷/hd>>>.\xT*p¶m222ACOgLHHضm˗{#.YE}dL ^/H"##49ٳgOrrti?s & :n̙,kɒ%l6A5mڴmN2A(Zmmj:??_fRiHw|effر󑑑#Fׯ_ #BTΛ7d~gAAA9s222gu`7nL&k׮/_Z}7$d25jƌO>$Y._>}9$$,*x ٳg\e˖ >s=7a„aÆ5l.VLN#N{H6L&d rrrv}رÇ?3 7OΟ?_}111f{饗v{ ֭[g4/^p8,˼yΜ9s)M?@G}dۿK]8aÆ͛7v@BZ~YYs%99fVm2CBBBjHD.cɡ/??Ν'O / A~d-Z?̛7/))7zYª.^-P(aZ/;uߩS-Zuր]L8O>&L ; (dI K.m oƍRi#1fZ]w0RmI,oFj:(X#F :bQ\.׷~{iӦ1ŋl6;>>K nn}||~{`p8F[oai6O?%; 4@Ctl^rL&kX,D8hL':::::ZZZZF:]n7J # yᖠ7xc„ ۹s-[~#G*ododԩ>>>A?~|~~~[lAx<(lc01'󋉉FiNG-V}wkjjVXh-((^hX,ԧO3N[EP*555ABBQ;)""!f`XFzg=؅ lo&$$?cǎwlYVV6aLtR.{h4VqݵO:_|q׮].sjH$w Zࡡxr?~|ɒ%IIIsm4-&& ܉D"HԩSgU$Zm#z lT*V$L&" M6{ /bk;v)**zw-[pef3.R[n={vqq}&~'&&ƍdt)U@%p?cJJ??ydn?_v-22Ϗ0*RgfR*$d2B!)xKW_effر? hwU*X,uOTnڴٳn4-,,lҥ\.o9wܮ]_NRQiӦ : ^xL&3//[nynEӍ5/ܹ3YN.kذaf߿?Y#񤤤_]vsq#rq8gjjjJKKmڵvS@H$(AbLPb rGt;˖-:ާO>}䤦>|vnt۽aÆX,xm۶mذvv@ii͛ϟT*Oz) 7oD Raaad#QUU}`2N'A6nQSSc6jpe*B| B"Zee_|k%''zj``H$";4zr EYwriWn*>&`0բ BP,))"eff߿ P]+""bwU\\GdR\ޭ%B/P(|>Jr8:Ab cX{Z4r\~o8/^\d JڶmKv[O9c @h4F}PUUe4 FAo0 nv74>_@Ry|xB?y >/Ntj4l6RQQ xfVK1%%厅RQQQ_}TNӧٓMN4ifj:Niڊ Ax\.WARYvl) IDATFp<bBQH$ BHf#R@ #B iӦGnܸ pvڽ{m-i0 ^j }`٬^mVՠ7vzRi46CR. P(*bi4:A~~~ &AT*ž r.Cc0|Ah4&{555v m1O!f8kjv8;A.j5ha6<lr+\Njq9va;jn+nVL&rL&ù{|>d6WYZk׮=p@=f͚EjL&͛7_x@=3jRSYj*5&vc__?.b,ɢYl~2Yl(T*ǧhL6xr]pmva1.hp\VaX&cŬ֕ڭ7-fdZ-VZg DAAbq@[aaaAAA hD"$%%yq\*ZV*GN&}#=wF]7p\ ,Xx_ݗ<Oiii~~~~~~QQQYYYiiJ.--Z-RT$˾~ @ |>9<]~ c &9\?&xFnlfm6b66`0 y%eWo zAo2j &S*J%АP@tZ͛7[VFkýpGvh0Hc42j"^_U7xf F?18<bq~~ p |L1,6`2L6`0LNJ[NfXLjfX̦jaYValVTmmV&V< Y$WK~Jr˗/'b̙7SN}gk\p8J{GT*--1nu}EbP/EbaX E"q@ Pj:mUeRiJXeڿ|}}%!!RTP(pZV[xR,((ZAp8DRG7oLOO(++h4t t:ڴi3hР7n* |}$aA`I$D$ %Rq_@݃Y(PV4erUL-WK5eˆȈm۶iӆ咝Cyy1c/_HvV}-[t&@?ɤR***yEZVUj:V8N .esxr<6p\cs\1חszxFh0L$fj6MFh2[{WoҒ@/  Q@BH$ 5?SjjjnfΜ)Nt˗Z Fcvvv^^fv @IP,  IRQ`0@LvvY- \)Sk++Ju 7BBBPU$Zm#{WeR[EH$2L.7ӿp+ʌ\JNgMMͅ Pyxpc6F`(S] `H$RT/J%HnV&5b?\nByOv;vl'L@vgee]vk^~*bђP$L"SHRB,|x&^U\*Rzo×+K AFFE%&$'$$ŵ9m:fRYw0N#N{H6L&dͱO>^V*W(bQѱq6,/S(ȹ̹̽qUJѢcbtܹs޽{wر9={T*5kA.yLoZ2*++KKKKJJJKKJJJKJKjP   a?@/"1_D@:m2TUi+u*F[QTi5ڊ2Nxg`dP]o |7YYYC}W&>`^^ޔ)SVZզMvW._).."#c1(yd"*&84/\h+ s r so,)WmtܩSN:i=$hfZF*++x<4-$$D.]~zh4sMLL;vP(3 ,ٳgOm۶E Y[zիW{]|+V ;d(jV ??[3**..---))]ĊIB%!A@T( A€@?SxtnJ[YhJmEyeyY\]QUjFRd2YhHhXXL& Q(bq/A7nxӧGEE!O8i&Fٳii隊 **k16<*FLvL?(?0fε\ydڵoңG8c4,ŢRZEۼsNZhJP(#G9r$|NG=vDſkjj£b:|]m;֬:z.]p6iCN(=~}>Sdv+VMmn(vڽ{.IAUZuU*NJA`I< 0( 0X*SA| ʊ2mEL)Sj+եV :QWdd@0Z֭[ݻW"L:SN}BoܸqzzZdee={ȑ#Ϝ)STjL|b&EDQלTȼr#JfƅmV+鑔4`^zuQ4555)mbMR#"##U'ڴikjjht:_>|!ػw};fZ۴ر[.;m´'32駟2dO?Mc2_󐟟믯]6<<,pk׮ۛ7o "; X(@Z6++ڵkYYY7sr󋊊 |}$a2I\&ʥ24L.)Xl٩DUT"URUTh2 H"""ڴiP(N[n5L/҃(%w+WǓ%3灃O8Cb۶ԾkREdQpdss_~b2 ޏ~,xNgIIImɻXT$ yEDDX, .\x̙7T*?~A}=/ͶgϞ-[=zkۡA=&O +Ԫ`njӣGp:Æ 9swZ .LJJ"; X(4{YYY׮egffj4AlETLXxVH! <:J]R-$)UJr Xlv\l\bbB||||||BBBP(.ѣ7ojC y饗|>q6lpȑ͛7cSO:rvֱ{v]'vdN r޸v.O;{d4$m;tȐ!CtޝJY¢"jP`BxBx}wƍoaY1f?g:yh_ލظ Ə;6$$hpOSNС_6Mcƌr פG6T|ٳׯ١.,YR^^_bL&sܹd #f4xbZZ^_EPdQm;DG#Q3h~*e e9Q0t_vuڵK.]thd'7W^5kիh۷o嗿/\K={tR4ܳG?۵+Ґcƌ;6!!\$+..8qo~cUWW^f 9vȗ#b4NHxNgͅlYю:?gΈ#0Iٳg/{n]_ܹs֭#;X(4E'33رcG;wPyxlbuMlbsȎ rܼ~erg9kj,V}_~={d0dǼҥKsrr֬YCvfɓ+VLMMc0j>߱{/LW\{J2Co9_n qُ?_6P( tq?C_0b$@Hݼvu˚P/^٨QNx[l $; _}վ}B 9vѣǎ8^Ѱ9v];ukӮc\X^UμqrKΔJׯ[nM΁f5j+2|p4W555;w\l٥.<;zB~O kSSg'ysڴS/B[nݼysMMT*FUWW{< "JT L 3X,r)QoÿتU+;t@v" VkrrܳgOJɓ׮]NvhP< l>tPjj?3Yv]:vձ{vx)/?sKTlN>}~fС2T^bŎ;\.Y/۽nݺO?]TV^oаѓߌIhGv(h:~ܳejyuą D"C4+W߿X DDDDEE ^t)c13?^֥ ?ϔ)S,Yao7nǎKv:tۯ_?@˄9FcJJʎ;O>>F|Y٥ڬ(3ΟISG&c>|̘1c}Q#HKK:K/=;zK  =W- (J@`<*5;}՗k8_Ov en_~1q4_ɓ2,22n#vǎ&M xoxtC=}m>kJJ u}'ߗ;ݺu{W-G=z~ong߁wn6 ^ԗkfO|0殓ATذ;t4_~ *5Ng w{|eJcƸuh />ڶ;dأ'M{^SGZSOh:BNgͥgO9x}JMRRW^K/F8zQQѤI>쳮]6Z {fMn=f|EDL EŚ01S޾d2bcٯ]jCUo]BB=[sDR|tVwN[cg_ZŶ+S)ݽi-+x-abJŋ0Ӧ-BLJs=~z qԺ,XK]Տx>BN=zw{7_>}lڴ?~ܬY{ 'Ozxx@QGDD l8D31Q !+ݿu;6 _ϺE3f˧Fqn.]U2 _swيc{e]$=r v{ݒyǎNByyy8p@Th ԐNhwFKTT\miw<͏Yl;Ǎja ;nb}W-, VnemzR*~;-& Vx4E0ش[9kSsuYmfH$naEuȱ[m>mڢEzP$&&fƌys~s\vqtv4QSqBys^ |wtM \ޭ79eOÆ ۴iӴi887oӧ9إ{vJco@`qa۞=LؽjjM4s11=z;QKi2222џvã :rԨgO ߤg4)jҩoM[mٲjIqA_7WZd#uo8_v\%w=|L 3Y]~ao_JO1|´ :s htFK%jY~o2ȟ_>}$Jvw܆ nYUG5јؼM-|j4'{DRIJԳ}|̐[sa?eW/Y,VTdAQ#a2Ba6mhx{u +<}eʼ%M!Dg0c.N*s-љ{D"B()ؿB2D^"K ʵڷ`&F=cli?}|'䤇ZeՒ"AstrCsJ[uZ.>>+s"4e_`U`7c6+WmΝ 'usse4r?[uڨ.)ϒBA]Ӣa5TiGS>qڄSSSXԓDX_M4iرGϯeyy3ãFӢklMX]yœGl۴g}.k~I:wӚy㇛L&Տrk@ |jhZlY}K TFeff s/Ga<2kʡc&!J$şwػy͒; Bѳؿ|Ä ;}.tW.+[;ՆmǢ߻3GFw]JOqEegnY5-mҒn)!d4W/}a5an>'y5N64՛v9$iu͛7Jexxx]u>|.W19Yl˔߲ί]'ͫaՏ𵽞62Ly=sa@#!={%,;p ٘*#lf;8"L&B.{(ek9X[(My'WM[ƛWXt&kowYd[&&3)) j|> f<dzB/-*&L7_OXv!d0H y7Gg'bm\Xl!{'ggDZe1j,Ӑ~&PW")qbO0/C듪o_jX z]ML[֤v!±#HpUe>WjIj{^/GMdO?I [}?û5Ajj:fżce9)G5kV>fo`Di7/FG:U 9rd̘1'O>sLII B2 1UݿsʝW]}pGZT()*x|y֢jX:E|tVv?܌8hL;\Zmlll=% z=A@<<<PO`#^dddYRO-ǯce*KKwob3=VVktڥO7jP]{Ar^5vR΍Ӈ]:xL*pM򳬴?Pe{wS2oQ* w~0\-!Nf4Zm_q9jPrk`j޲&mh4PNJЙ,W+Nj0ZW7lܔS#F||W-GęxF<}zճc}3,|x2QrB /W^Qர"rɄU eddl߾?ر7]>Ӵ_<6\&c/.\|xTkM8{ю5?ų_@.z|ȭ x=<**>B,2# @Ј4'!W^35/LIu]g,kk4>Gc0~ⒺL1~svu;p\ nu{sچFpH'{͋gm;Vo7؉n_ŶҭM`Ǩ169gA&WKE7ͿDx/_ s2ޗjҲ&5j5Ъ"+kZ}ڞWG"Ypܸߕ`8|p>BӕTt i*Y@7{h4ݹ5} _Z,;w?,ԚM L&hLLLmhIU&7Vd._sW/bGՏ'NoЭ޽y3rLvttf?MeTFaGwng@\L~n^1cF@ׯ_%"h2(JϞ={5iy >z"W? z]Ε>qӴ?7۾-!(? Z8 >޷o_<<<Bff&@f'NٙxgN~vevAVn?߫~?[]<[|^|6vl^**jKe%*8;:\=e7L@t 6I0l͈odg3[]qqZ\8%/`[ ][+t}޾\U*˙?aIw:г@P_{`[|,^X*ikv#9*|'QF7^<$Mض]`NUyA/]-K(S*'G صS?|~wEg\eUM$Oy/>1r55?7'ͫ5D$-\&/)g'y_G 9+]/#{7ٻy~fWteN_C~oYw@ LDQ*2t3=}p`ۆgPmhP5VhI #GS+W#GIe֬Yi);ʨ.4:!$FwX&!dƴGΜ95=hBH$B( `ܹ'O\bEHH?92ՋGnᘰqUGWMiT$16c0qݒyLyI5?|뺅3Mmcyx/J[-xwZ Ɍj"L7s;ԇcڵq;iߩ+BŶkOp:)Ίm8nܷt pԺ%~9!D$#f/sm3_oZF'i/j7 v?srqtߖ_glm6:߫k>۲m.%YXuxnmkWP?L3CN{}emn}9?!Dc0_=e*eϮjkNn^#N۱cՋ ֜Jڽ{wDDK$lQڶm;k֬M?/iӶuxABgvP)+{CɊ|xuu zRL$/[R*8.<{xWrV#blm-l{Gʿ?Wz@ Hi?|y}Kme2a zOR`2^kê#Flٲb}|{xi4>^8p;wz|0JE邉#r2޽hD"{AAYrCdkx gJ Gc]N.S}毓elҠ:鹠`ܸq&L[&Z5thlL%+?k〖?o(^v84K. 2dI| PI1Q&6!̵ÇGDD 6 ɓ'ڵǃ%ҥK4T*o߾SLZ[?Oɍ/ Y4ED"ԁoŕ)/?ص12WxGx2n۪g&ވ|;kéClٲE̝;+zL&>B!ょwnh϶w;hΔߗ/\xnbcc.#hi[n_%w ki).^=K36Lqqם%%%T={TFӏ?ަM>w@3 <::/_&Itd@Own=/35@ *_8ޡ>ʵڇwoގt‚1c>|c&o޼>}?ЫWźqƌ3_1iZZY4Cb.o\PR.iӦdFE t6wPnjFko[?dȐ{0 {;wTaĉݺuw@Gn$ٳg/DG_zUx ܣ]`:w:@c^=KJJpZm ,22VP2 3f̠Rk֬uj^߱cKllߔ_t/>-O;vUFΝ;N<!$}_M6z,+*鸞n26[q?%KH$މBŭ^ L\R,_ f ϟ?Ci۾s:wOy$)Γ;O&\\\?$,,,lȱc>k.''z=PT\\aÆm۶!#33@N߽M >((P4+VDd2ˍT}մMRQoړwxlٲ944D?Bp„ ۷o; ѣ.]:x A Kqqq|||\\\lׯSH$Ƿu@`}|-,`laʳWϓ^?SRigg֪U7iҤ#G>a2)]vm{~~~Ͼ~եW zs'bΟR);vΜ9x:rNH$FB(;;ۆ2zbϾD"AG(9ԁ&aٲSNVx >l֬Y; ,!!aɒ%gϞoG@㕗w>{TP(>~|[m!‚4 EOR%~$Y@ xtرSN{hL& ֭[aOgQm;t99sDWϝp*#ѣ&Lw.ps_~wn޼帩?ʪ'gœI$Ҕɓ,X`ggw(Po& `ʔ)x5jӦMxg4Px4 :ŋ>|_x鬩TV޾hZӧO?~ŋ/_y!W+w+W+|/(E Do2ޤ FVn:((cǎl6())8qbgϞwŋ'Nںs]Cu vp;hhZq;N:xp!Ck ,##C,Tj^Uiӂsrrvرl_ t&N[fjœG;)-.ޣqn eMӧ9rI*̚5gڴix4Px4999/_LNN~.+C1,.sqr.<.ƅ$VJ'抲¼la8O+'>Ziӓj5M&… vT{… 2Ysێ]:tӦ P8%2҈$RHϞ~駟~*N@Cj"(+++;;[( KKK.ry<?bq}I$oz1ѣG8x\.iӶ[ho߮ ?:]qw_yx;>/G3~ѣG “'O͛w1Xsrr֮]w@G@j߼yl`@;x.\;őfM;8NW^\_W(¼|qAG988zyyyyyn5uM6y{{?֭[7nܸqƃZ%c׶: j݆L|8ɔ+Jyţ%4 }}{&-T*2Oe$ J%Bf|޿|>Fܹc‚L&92""&rܹsΝʕ2Ͽkh.!ad`둼Dx^ܵ{פE\/bȐȐ"w:Pk_|Ŋ+:wwPٹs<Q-NJ 5--##C` h qw8:r\6;9ʋŅBqnQHW ).EߪH$W77/OeFt:.''gԩQQQcƌ; ZNLLqF|ZmA& [k߮;m(0aUf4s_;v d0x']fR.3rqqLqqq+W$ݺu?~G6ϟ?yVIjcӦ}G|`*27/>~ѫRFOhho ;#3?F[p!A@er<**~ ; #D"Db 77kF`ٳl{,b3mm,6Ӗʹep'4Z]*/)-e%rD.+)I ebIaH@ 888:::pܰ"#WW?~[nxg`0<~ӧ/^xUv!DXzxp>>x.\;׋r6/[-efx" ,6m۶ j߾TW$FH$t:"n1Šzdٳ۷*1Ϟ=w^¬,ͷ]<|Z;:q.^&篞>NyR*drۀ.]w޻wobݻv܉wPQFEDDL@>D"򊊊bq~~~AAan^nQaT*t$ -d1mt-fll;&˖if64 A3L'-uJ(U)*E\VR*J%%2\VRZ")KsQ֖ꂕq8GGG&.0ϟ?7oԩS wPJKK_zŋW^=W9F!Dg0]|;ŝpqa+lZSFtriQaa~^H'sy|mm٭[oצM???WWWSP/+.& sssz=LJ35޿?|P* XlO.\_߻مH$!kyYԔ)Yi)Œ4NG$.]:wԩs΁VVVx...nϟP(xg}w\.w֬Yx4PxUZZ*H%D"JH%DTVڑF :ÆFJә,A3^Rmht5ՆFU Rh42BժURBT*J*EJP*JU2R(U)JK2Ra0*vbiifagv2?n!7>FqqԩS;u4|j2*HOO464#Ǒbʶs`SmhoHZDRZ"-.̗%EedSPyj2 EEEzҒb5F؜F̨͠"V[TTT\\\XXXXX斔k>|$ d+qS;rm:źrIQAQReakyZ P8a„۷{yyTiӦL@rD"KKKrL&d 2L&KR*ok*`P,-mlt2ʊJV4:ʚJRmHTD DLlwIJie*^Q˵uV[j5jNQu:uJTke*eRQ^UTe*Vє F.+,-`0,&b2 &d2Y,_7l>+^wߩT-[$-\aaarrrbH/&P(L[[ێŶcYv [[ݿբt` :DjRJEJP)D*J%R\Z").T潬ܝ\w₭J+HVkbqaa`4Oh'OᅨU $H$ l91cƌ5*777==B}gFFFFՊd C9\>e`,flxLSRJJe%2T.+-JŅEyI1ֲʂK///W`0|gfׯY@egϞ=xSh&OAh( p85EV2\V+>dIT.Sd2ZVu% N'I64damccaAFQ,-)V!~`J!*e.52hT*JR9S4!j5B`0ULvBRdz{dNVV :[љtNt:ښFUzەgϞt:!GGGGG_h4ښCѨj#֕({ P:Zh!N|k-9@UBPDP6TH4,l1͆bCAYT*!D"̿PgXdDA"h4LP(T*4Q?y̙3|>Y@feeTL`3Օ`-*JVk4l8- PQk4MŮrYst )H$:NXPT+++naAr!HL&B0 akk;2*@VRRi1 %x<^HH6Q*3zۈ#VXQ}I&EEEU׷uO]x` HFqX'OڞȠAN:5vX2\}9@ % Lxd "H,ceFyyy*\fq8(3-LvsYZZjڊ AUjcbbΟ?aaaUN=NNN矱eM&DСÃ.]+K.UZӿܾ};44PC!GDx4Px@K~M6a hZFH$DXP(x`ՕJ❷ >rH||IL&͛ͥ?aԨQÆ {[n￉D"BHWz¢k׮h4:t!Rn&\umj j{Rl6[nPx4OwS (<9zgwW^^n^. STTD; \.ԍ$&&͙3'44B:tH"j:0LoOt1L&L[bEZZc4/\Pi]I8 B2@ ;˕drdWOZw۷oshZmũBaaa`P(<ㅇc̨>>|811k]t!KÆ ۱cd!)ˏ=Z~*""իW6lo7 VUB0ؤJ5z)SjGjN $$$T8Dm۶; Ƀ/ +W 9r$Y ZNOO7eeeaXZZbˌI$ycǎ%''V*924h۷դ1c_vRiBQ(WF.VIMBFQ&46#믿ƍGPj/5$N8Q^^ޞF B(<|<(<HKK[hQ.]͛mT @.JeFceFvvvxmAL&Sbb"Vraw5\n];'-//OcI$҈#N:E ޞ먶$Im B ؿ͛7`D^^^xgq\Pw @sG?… k #J+aJ%BJzxx@Qc`4cccO<ٳgm۶y{{aaƍW\4iҍ7RSSz=@`X[zuRRGakd2{ GS( (O ^r ¾{=R\lYjjU3}b0f BPVZu?!d0>($I"|XsfeejH$wP.w @s@3j/_n0~g*wh*a5Fb+3p8ʌ3V{ҥSNIGFFr8:? 6`YYن &&f͚ӧcBXXؑ#GBii)V{J$kRD$?l#Pvx<ŋMa=P=@GǓJ NдA͙V]dINNΆ `0FQ$D"sQnnnYY@pvvxAAAXÁ2L\|ɓRo߾Æ suul6{|a !F?L֮]{l͛׬YM /?2L\x0`C&L`ii. !! <!$ڴiw@G4[ ᅲ7ovrr;4 :.++˼\P(beF|>@Frٳgϝ;8tPz:VBBŠ+~GkkJV믿7nhgg7k|Z- -ZtXl#T* dBH$닊>8m~o :$rD" J B(<|$(<yJZnThZTF"^O$y<^HHrd2@ֲ?okk;z] TΟ?uAM>D"U899y߾}ƍtz:t 5j͛=z~z&{k׮1?\*`0z G>Pzz:56X5P(;Ƀ#!T:|NvZGGG@chҰҰ2B@Px<ӧVffaQ/^?~<11͙3'44^Sɴ}gN:522 Ŋ+:u4tЊ۩TGi-vvv!k~b}LϞ=;--cm >33sxgAN7fLpBFf:deee橌R)B[4-<oޘ:i$iRRJ3xڵk ;i#zBT*5MiiRtWKJJ޵ B1?fX5_4&GСd2N@T*l4 FQwTSI2 e  :٪uT[Q{TֽEEPDL3̰?Ⱦ F:uX[PBBB\\wo9nc2_2*((H$2looϫ1RSSB#*jffvСQFd>|8>>޾Gرǯ]bcc TTT466񣑑Z7ҥKt cԌG;Lhjj^#X\\LӫkjjgMUuuMMuKsKCCCCC=X,N\\\BRO%%%eeN)))+W:uj l5661g0 FCccKK3le675[DDDJJZXXXZFZPPb1X)i)i)),`1LyM999M͟?n1*--l6[PPH$dggguuuD a,*++΢ RRRϞ=#п( G; 2r GvfKJJ tziiiIIiYyyiiISc#o7Q FHc0VAHKHHJIIˈKJIHȈKHv̖V&Qd2[LfKkKK}Q[_WMmkkm/**WQx<^_Ɓ~sCCCdVTT/+)jkjkow<,VL\BL\\DĤUUEDE%$ED$xJJ KJI IH`k--m{c+lnbXMlf767752U--M M̖ƆFDEEq8YY9^9?deexVDRˌ󫫫u3233#d2YQQʌ@/=x˗X,vܹ&L@_IIۛO@'333 󊊊x*UUj:啔UTUTdG!l69/cKxdB?OɼvǏw j5dh¢":^^^^RRZNG II9EVVUR60XYyFV;^7)6ŨjFMumMU]MM^ =SQ]]S]~^+HRQQ!D"߿`kjjk ʌn(#rKOO'7ntpp]v?z555O}JKO,,,p8BBBx5 FgbW#$IAIEPPԽ$$$WTwVZTXZTXVDOJ..oinFD^^AWWWWwȑ#􌌌P\+AAݻw%}qƞ@1̽{R(+V|kw80::z#IIIƃZGkBRhPWW#@_@~D޽KLLLLLLHL,+-EDNAQk >>K.5kV/~Ν;W]]}o-8d2_>iҤ---mժU=D999_SLˁBC;Dz9)| yullorr9isu Td(,n7}27#-SjΧΝcJJ66vvvG5jꫢ /_5:A;@YCCçORSSSRR333U%TIϘFڑt""D*afWˊ Ņ%ѯܽ˫Fbq:::F**S r kSWW700pss#PAaaݻwĦM.''v466۷/55޾g }޽{>ٳg_v6 133k_633d"FOIHH899xxx S`xP(~~~hgA&[ZZġ0+Px,%%%***&6ի2q C3KISWj)*+Xq{ԔwȱJ& IIK {{{{{{;;;1~ .M4iRRRh'$&&s\ VseώHj$ueU`5BPHH W3xmuUQ ??7+#SeEvp ˌ Y, x<C@Q\\RR]]]%" ѣ8C~~O?dee}ݻ7uT,xEEE||mG B/ɓ?}?8WÞ.,,B; ri46Y| 0FFEUUVdl(K4 ⒒,E^:}}3ãw~4ϟ|2HD;< A~Q\\bYkĔFkhЎ  NN''o`j>ZOJKJ̺{AuesVmmmm_.b dkkk^2#\]]={XYY :wpgΜ]ݻwkiiyzzv˝5kVp 3z ?~hjjڋ$CPFGDQQQ* GCH~~>z 0L<|G̖m] 3~l0BXlJʎ8N H眸ȝ;wyyyO2eܹ#F@;PxgϞÇ Șظ<*U@@@42YKT[H\B5""#5G^r8BjNFJRFJRbJZ[8Y9 QAnnnN"d,AAAAcƌYzڡ:qq33[ өS9"vt555=7o^\.7$$QXy&L]qss_edd`"T* #!!!"XXXv#gϞݾ}E AAAv묠ܛMMԞKKs󇷱q1ڽ{٨y~={ϟ߽{q…3fE;@4-222"22""5v6WTT)IPPP]kֈ bfg$}Jp1cLLL tz@@@pppss̙3555չ_|eÆ u?=={(**v۽{Ma<==ۻ}Ǐl6ܼwyzŋaaaӧOaLCC &(<E;@o$''ܿdZ;s6yhp8)"888^)Sh 0߿`.X@NNP`@FGG?}EH\q c 3;s[{m=C(}W^R&72YY9'''nnnh?'O~ZRRrҤISNUPP@;TN8dɒs>>_ g~Cm-<=zt݇ttƍW 8utLtHC5uuz@PPv΃ ݛ5{5k-[@=z)͞>})SXs3 >ɓ/^c008m(k*mn3F$?7;ML|LĊ+YѣLᡥvL0<ӧ[nuA@ӷoN<8jԨ^pٲe]yM'vojj^dɗ vvvNkO>MMM522GSS`TUUA-PC$KKKDD`r@ Oxk׮ݻF+sx3KC>ge?эݷs׮+Vl۶m?hhh zqccYp##"8\-vU hG?u-u- 575EG {]OOsɢEl=zm6mmmC}GffΝ;ϝ;p#Gxyyu" 44t˖-_{|rvvn))))))uxH$~`` ~APR>!Hl6L&!((hL55Dy谢Juˮ%m}ԕ+WlsݺuhGO< qss9s}Je및3fhr8уf%ſy<`[m>}+a%w\.7))?>>̘1ݝ/jjN<9j(///IIɾ>|8qℌL{^~B888|ŋ666_!!!ABB/zĉqQPPRhgA h4z 0}yٲ/Ǻ8sv"0P$$~Zyw/ۻoٳ||L6 \bEEEC|; QPR|YTԈhBBkD?aĈqѢE &3mccp\___ٳg{zz l޽qo6rȮ|վ}hr0!! aaa?*0CPT*)@GbbbJJJ4 ?vƍիר5| LbcÂY,ַ*(Yvl c߹ RM>}ʕ'OctUTTDDD<f&&&_dyݖ-[,F={Eth8删 YKGZ͓e$4n%%~ӼYܹuߵsEX{~(t:Ç---^^^CUvMMM񣗗SVVVvСǻwk׮YZvr STT JNN^tiK``̙3 ; v Gށ# Q ˗x.}Haص~[[Gs=? RY^v=Q_K_ L= 11~H1ׯ_&%%p8wwwsWZZiwX;(duC}=..)xWIE׾Qsw ([; No#KlsU9si;;;T>ުj222ӧOUڕر`=zTOOgc2vRQQ߾ǏO:&e}ϧO/?~hjjb 0CN4-Gl畀(.zG،7")%ݣY;jsDuG_K_ Lǻݸj1ސ`ph&iee{n n~7n[^ =tqztk}CZF>{ѽj$uISB_wEC!Қ{[rzV_~ȑ#|j &yfXUK{QQQ9wBO[QQqRpk׮511?JTUUUUU׈DA`` `مZZZhgA$CBY' ]# 9U=9Y+HZ#zwXҿsǯ۴cʔW&&&h'JHH733[z@p87o>y%o*.!1WNwvxg@hyZE`}mC$ wgO׏=z|׉ŋO;vƍʋ/ӝ/_fff_n 100PSSr0!!vG%*i]#SAZ̻mCfԟtiqf7QC}ּGNzzƭ%OLFOϛ#2.ufڏDDD?ҹSNKNb}pRRRbcc_zU]]M"<<<455ю]|;w\vv ;AZ[#]ߝ̖fESfƝliw|ڇw NmxlVVn哒'$$lj=zMbb>quDHMUNVa֒U2`ŅAp1;P_WJK56yZ9z&,~ltKX ?~͛7&Mrssh .{{͞=z-''gܹݹǏ'z IDATH_oe0_ްa× ,{>?|hh9sLRhnMPx)AGxx+W6?A k@ 8e8eC}݃+Ÿ=N7RZT Iq_E@QSۿ^d~=m4[+hD>w/ғNi9'%z_&l]ltNXXd [{*44fڼyszz˗/_xb:ٳ[}#d2S1{ulo_tU: KA.1g]Wp\A#bB/1qI}]'m^~魿,xtq283G7/;AU3'֣> cB>\=Xm]i эz8fu/5;-m,77w5CŊ޴i볳===oܸl2>:jhh~ҥKꨮnƋ/O>_dI[DEELLL266{>?~|PPP ^Ѐ£!HNNNZZFC[;vN⒒^<{ ) *jjocG#KA:$z'SڒsAc #]^RtYA HcCo^aL o䕔hCluŕFw鯉t_}+,]ك;vܩ4pĄ<CC9sڪ~N+{'?HԐrq=cqvn_I2 -M<^GϚ;Y/޴s 9{+y}Rmزx&G?m:xJRJ^Z9c ;^9s# [QTcNRE/7y򂐐0 ޭ?>> d^ӿ`^Nx񢦦l׮]666(++k⾾D"_r9" ՝2۷oϘ1CVVBBBƎ+ow:===II~G>LLL KFPN:A  Px!˨=>Q &.n39u4zᇷx;HcC}?X~̲ ^ΉqpFQ[}?A5 zz_~Hٌ̭|pL;===L&3###%%%%%%33dx OOOOܹsx"yh`709Bؕl7nenU!氅5ߝ]]mMX#;I#AW+"K#iU>^Z#ʼn%}&jh".g((HY~FPHh#A ,'LpFqaIsGdM>}fBzMPPPRRӝWO644ܶmL/11رc<ݻwEEEN~977w͚\nbbi!nPUU566 #G jaG^# !iiil6c]ݣd$雚|faMbb ob~Zra>&2-|J=>W#kDΆ⾛|p~q@R__b VXaffF /D؏w?;Ț߰Xm)I>l^v_ν*ܬPrFY}9(.)k{JRV IAXmmHHJ-߰ѽs4G[Yqu߾~ FTTRV6n|#A'zܾx&??Vtz@@@XXXMMաCLLL-GX,ٳggُ͚3JLL|Uu+))yɚ5k$$$:!$$DUUUOOA*ZSScaa+++ T* v # ! HJ/h|l$enVZ[ 9vlC~[/NԈ 4ލGHVQgE|t; Y[[]]]-""c``0gΜ#Gp"w5lk堎`F_֛:L^:9yB?~='`jeoj>sъ{v'C?}:.|&)%p]n71O߾FR?u1@wKGo}݁"R]] GˍOJJ`0&L4iҰYp]KT?t hu`٥yyy\.WEEeĈ3fё`PB;Es8Ouye%gnqt9{As;V%%f._=wjfK\9}^Nw'J Z[EDEG ==Ud!B&pi0 Ƌ/KJJ̼mllDzR!7ܹSPP[ظ{nMMˢu!++˗{˗mmmǏ0`jjڡ ]Ǐ ;w0PIRN:"\.hH<>L!D@;2==9Us]c3q A̬|{>X׮|%U͑cέ 'Pڗ頕ɬiijb_&un'(/)dwq֭\rK,9p@LLq8ѣ7oz{{Ϛ5@f̘QSvL H]mM[fs{-sQA^7():߫϶NKKgbLh菱_ SMld>|ONQIK7c}1vv`0<|a޽sνwݕ+W>loo?ׯ_vܹ}vr>Ҳ}vanŋMMMCPPИ1c0̗iiiC[eeB£!HMMMHH >0,\ s ~+/ٹL<{?cͿ_, a8@z?wn^:=W+(u/c kΟ*=yfz[#5uv'[/8H$78Ū555eee%%%%%%x<@;v,DRWWBBB {/>~m=wuH; Abe7K|x $dܼpJBBAN%((Kf>~?UIqW})*-uwp#sk9E;6h45?b:|د]Q^j1ƁQ]%Z'/}~50軖--իW;::*[sʕ̚5kɒ%͛>|8ylwWیKKK999+V0fq x33@+++>FPZ[[EP',,i4A| 0xyyݼu҉kA1VVC+31 AprxĮW<{AI'w:ywAAAA'v :[[@%>&mUV=z`:tdddn߾5ޭjG~ⰲ ꥤey]eU†]/ٳyތw"/'Ȟ{|swm߼oj.+"*ji2XwKJIwbןn+ǎɳbxi~ *ۏw6[7xyy988 A{iTT7n܆ 5 ߟ~]w111n?ɩKꆆXlww{++++ 6]XXkD">#%۷,Xy 9yd*TT C@J^HZ>W[KS\\bX,++++'' ++;J@0ٳfͲsvI@wdbp bR575VՅz*z2^MWVbsrrէN %%vBv`0vadd\]]W^}}}\9s,^x6yzz.[ ͞7oޤI.\vlǺuƏ`0 .\@;@# 9ݳwAk푴 fȖ)t y9֤|>@UWWx"((rû,66رcD"JJJ~]v1bժU?SN-ׅ4F2ruu 矅Q# !!!2LR:"O>>DbVT쾗/_޻wo˖-=:ݻ8ݽ}444;եM2qΝ;ˡ- MMMQUU%//v222X,F7z0ӧOE>{4_>L&ڡp9()3ǹMW@;虶ָЧ_G/[t \'QQӧO>dFFFك;4tlGؙZЎ ķobӒ :s>u򤇇"@wFFFPT 2|gggs#66رc:::'Nyҥ'Od^pյ몣7~)--ƦgQhiiGw444N:" ?ZS=@A#+.z'OZ9x̴s(.)v4.>.,/*81z̘͛7~ ~l6͛7/^LLLr#LmF[upr3?6MqN'NaUQKKKDDDXXاOdee]\\\]]D"ڹPp\Yf-YDHHh@/pܹ}b;w|8 @TT,JJJ-Z3rHt<puuuuue2zoܷWm=[G\u~UH,zYI/_775=rxƌhG`P ߏ477'&&~:4,ϫZ[ ͭFY007:$S9;5]rB\vZ2-jkkog܈pܤo2L[[C  MGIJJڴirIIIϟENs… :Yre[߼y_݃,,,?l2f OEEEDDFAʀа:Y~#s+,Nt?Ԥķ? bmmᡯv:W^ǿOHha`c`:2BO]KGظ\niQ!5+#SJVnj aaa}k+++++xFȏCBB^|IѴǎ طoȎ;a1֢kuw>|833ҥK]Ǐ_~]ɯth4OOSNǤ۷o߽{WDD,ϰlu BY!˗xzzOOOOO϶g߼, chnmdnmbiJ@;pP>.#%l0kWWW99s SN:u* l6;##ݻwqqq.X,!aa:ECG2BWC{H}UC` IDATIp誮f}fgdQ3r!VSjԨQ_/bEDD6l```r7o޼}ի ~gffFDD޽#.8vNlXn/hĉnzY"yyyhH$v ߀# C"""NNNNNNǎ+))}uLLl[l6[EUm# R2iY)YiYl6@ -_O-ΧfVW!Xb!q򻌌𨨨uCY~iӦM...pE6o>cǎ+:rϜ93j(LKKh[lt۷o---SuPP^P(Px4W^7ÜٳgϞ H]]ݛ7o޼y^ *oo3RCkHt^9 7;+=%'=jk411q`mDB;&ÇiH]]]zzzjjjfffvvgyymmm`qD M5QCFRV#*UT""LPQE///-ӊ%ye%\.AUU5mscfddvd?>Y`cBYiii9}\gΜb8<""J^x{S(7n켾w|˫@Ƣg(ʻwN:"l6[k~0a„ x/>|ADDDIM=NQ!"̖Ң’s r >11244fffSi ɉxrW$(((FTī)UU *jD%y%eYyIw\.^ZL/-)-*(+2y)+hjjЙ檭-%%nxjjjBCC 'Nhoov!ڝ;wx Z {^|e77^[[zN&$$ "x|PPʕ+ Ba0P9DUZZ Մ#@ཬJOOM<6 4@RQ# $O )x셅EPDWʊir*v+,9rȑ#D"_jDᔕUPPVYYѾ'+SWV))(+)+18Y,NVӛ XKSSQ˨TUTUЫ+ՕU5Օl$N"MG'd"H$I$dĄQLLihG9vZ77AΟ?xbKKޝ޽{K,Νn322&NdQQ(f=klGC @hPx(<ja2T* ]fJ̋}dTd啔e8 VVb8n"\.QS`3jyTUV˪+5UʶV22d2YCCΖL&khhʢ5@ ~N2ZfJ|i Noin<,p2XYi `e18 FRZZBRJ\RJZ#%--.!%&.>6P_P_ȫ.g1ju5 e BBBJJJjj:d5eK3%%%<"//*222"##֮] --v+==}gΜݻaܹ;CYYÇ-[_4iҤN+Y,ֻw-ZԻCĉoܸ;n8~bTQORRRNN G{I aCF8P* :]lJUۊց`UAD {'@}/m,A~˹<x%]]ݮ]vՙR4ѭ'%JX,.Pel]G_e2}KY;LY]TVW(JeFU@KK345307 NB9.4H$H$TYYYeggSdۿjBhAUUL&(dUUJL^[[p{YYff:?gc2%%%ׯ__pp\GGf>>>?sDDİaè톍 H$(i{RiΝ#hݼySPΚ5kTGkbccnfwmooRSS׭[7xӧd'NiӦ5fpHH2dȫܺuCKK%4AQ< %u@hut:=;;#x#QUUy=Zݳg{zzlW*Ν{ J)((Xj_~ْyRSSŋ7RF*++͎immmCBB^ssD"QPP)yB0''xRNNNS]oaaw^kkkJ27rntԀ֘Ν۷٫DEE$1bgϞd2H$*,,d(zj@S@;t827oތS*SN0`)ջw 7nܬYtttJ{~Ĥ%󔗗}twww ӽJCBBW_Q~(OYY_- WXCyyÇGmkk[KKKnj17oԩGѽUއv횟YUUU|>,@Mu t(@P(ܹs֭w֬YNNNiZWZZڦM .]:tP555ׯh6lhGљ>}zo9w\>}^S*"I2::n{/((~ZD"FH$(iPGu t(@{{w* X<|޽{w%$cǎ988|wI[ly왿lɓK.-_煥=Νxz(~||||||nn.rqq={v޽MMMNmݺѣG3ft:Չ =z֭-[XYY|={ 2wD"WW׌yP(lmT.]삃Q<DBPT_(&d/77W[[ͭs}B<oΝ]t:߮^_:;;ʄ/^H$E&Ϛ5nܸowToȑsp8TgM'éN! A^#uuuiiiKHHP*.P?44tܸq|򉮮.ՉcǎI&1U&,++;zرcmllŋ СC_3&##C*zzz8c;0dȐ^vmTgM'~j&Iu!ѣY@sxTRT>LHHHLLLLLT*}9r!o 7o=<}c<DHOO_zu޽͛Zs>zʕ++W|}92l̘1vƍ~uGҵfL&S"xQBavv6)@xm$'OTUU|nnnT+((ضm[bbY>jZaʕLVٳeРA$ӧO45222222l7b}pp0Gz4V"PC S4GTĄǏr8ggӧw޽SNZZZTg믿+Vrk׮e0Z3}5"##Zۻw履~Ouh"(==B0//OR,c(++P _U(JUh{200rL&SOOO__QedRiddԭ[I&u],kԖ9*Rt۶mIII3f5꯿zM:>f<#3 #S1N͟x𠑑Ν;tBu;zׯ_ߺ e2޽{{ѤKJJBCC.\ƽ|nܸ1]v F^C__D"Ջ,PGT*MLLL)IR$f[ Bs9_hf7[Lπgh3үTEy9҂4ݻ7o7nܤIZw暚;vqע]vMPqdddgGz{{}9h HtJ555P ǏGEEގ}Z6tr1~Z.vf|3X.=8h"U֗4P޾o߾3f̰755m0@H]]͛7QuRRR6lЯ_qT٩S 7mN}3\NѬFeccccccll/ ڍ7oիW{yyQ ***֮]khhjժV?z$ݻwD?:u_~96ڵk^^^8: ??۷R4H$TKR!!!gϝrI;p8/wSVg޶3I$D݋Z~i߾ƍ;vlN^u{UUUùi)))999*JWWsbTPP{cN>fS  ʕ+vޭ_t)11qϞ=t:޿?99?gϞC#//_re„ Tg %өNQ<WA@)ska$IG5` d4MlUliձQᑗn%Ku6ui,,,JJJkF%%%A{yyؘ5H0$'NT'z˗ܹԴ/**:pqqѽ{w7066b<~x/%Ξ=Ku @ GÇ>q>^W|s0}.\2G Vݎ~7ZjРA$ijjکSÇwԩsΖ^%33sǎO>4i҄ ti555k֬߱cGc2k3g61]6`69r3gݩH,s\,--N #SWWw̙-[޽{Ƕ |Ǝ71:PNg7#=&Sk…<Zh:*>sX,޻wX,:Q.55~ oc[nEDD|ͫa>}ֶW^o"J{f򮲲޽{pp0GR" D}4@ (((֦: h-?j/43#+&#_;v]zuqq1@C%%%͟?so/#$mv޽7 4hG3nϿ~G}ԘM""";7::o_R&&&\.W"PIˣ:h"4ӧ|'.]Y~g7oϗ7~7 \A_pܟ~iܸqt:PB={"##ׯ_:ǎ7o^n?s挑8$k׮ 8=g/_:h(HFAP4Z޳g>l_]?eϧvЍ!*U_51hRrYeޭr3_ f=VC|ǵvPbM5:_m}Ç:P/>>~׮]2lzj77ǏϞ=_6򐐐iӦ1oɓ'8gE '88xĉZZ('?~Lu T*:h"D]f߃6ܟXeuoϖ6~c{wf%ODQ~ީ ý/^iu?yxA&%E*Umo-[3~槍15f ݪ#FL0q}ͫS;baaa[pՉɓgϞ]ti~*j׮]=zhvK/$$N91_. 욷ֻsN^'BBBK|>#x)(T*g̜|s2ڭđ $YW?]<=.o%bs4[oA?.-.:ypm΋WZׅ3tV32Vew#75=8Cc25<#5;|Ǝߺ޽_Dѡ Œ%Kھ6:"̙3GYpСC*999k׮mGT={vȑΛ<"""YQ,--]]]Q<bRceeEu@ @^ #j(ʱcEݼpG*6) Zvvhl͘:%EC{zzA؜CGe-,8seŜx_ڵէ wA͛7=nyuҥ~iG~{/Ǐ͛!88XP?1>|XRR2x~TgbkkK$ G2!!P<ܹsoyLTe9s2Fg+כ[_qӚu+?Yjf): ~=(/wњm^ AAܘ]ݵF>>vEDDb&^_~<ﯿ:u*Y@ D:bh9@R t ?p(&Μ9sĉ5;(lo 3zhSYeGBLyףZZa򽘛QaQVR\^Z\KqA~R+ %α[ųM{S?Ͱٱv$!h4 2RBLw~sO]zQ*W/$=IKТ?[~'럾fdk$vDX䕐/xsʊv~9Ys?=,6sk!_XԤ_ϛӶo M o[$$[רT ,x fϞ4gΜQllMF'ՅΟ?d:޼^ZZZ:q VQQQLN6lإKG,K$S?|Z.((:hI_gG}zS׀L+6 S xx6e!ܽu䲸A {ƯIy0s{f-=q*A.}iAB[1ArYǮb{Zt:A¯ X?W4yd܎ fvٻG/> oYEErŌK~6/6˵zd' -+V޽[] (QXX=k,ccc5ӣG6lhT*=tЄ bqfPՁn`eee jrߩSbccCu,"ʕ+TR;۷o''?83Lf߁wnFԩAܿ}K}U? Fؾk}Iʐ3'oFýl/WIoR^VfG[8vޟI}ŧ,6g/g^h\Aų۾Yꅟ4rѦLtQSa$IJK"AÞU,6D>{7F$f/<zoeӼ$M{Ӊ'`-hKjԩSqNNζmۖ/_~[G)))Wիj$ɝ;wz>#333ww/R4H$S(Tq8TJu8moi_ Osry?6B*\Wy':s1$I޸݆Je5A)}ϛ mNMţG ;7#HxgiҘEom`h7#xGmB߀Ku4T[[kbOk;G:[ko3R pA2B'M (?/&"[/W>~^|W̝r3rr,T ע@俟Nـa#o\ y鳿X:кyaĀK)+m sڵ}e˖}wo>UPPp>s͞dVqZ#ҥK3f̠: h F(P<hk|> ORն7wS4ٽ7SOOl5VŲs֌i;1o r.YTG v/>6}Fp3r4{7.Z6b &bĆjV`m;igf[񇕛wnf>6n$sΝ8qdnذO>T'j̥Km޼fյHܾ}[2ϯ!7~K8tCBBL]Clmm% A|>Tv :Ju= nT襮.nL== 􏏉q};"_ẑߩӥ3*Um~ =iƒWUTVV+/>XY\8%Ib$yfA{i/$|+AgK믨ժC{E]fy%.9u vEBTD k^bO?uT/_~ŋ_uYcܿ?))iɍ_RR?xf9T"Q<(|>?// YP<hkVVVF>{10tAխO+n&>;q z̹~|k3SO >{vpUsyHw떿 lu=K͚~uܔM-xoog+ח~6q:J::cdjÚAN$=vUUZACJAL: ւ|׮]fR*-zϑJ+VhQaaa@@ߥKzzzkɢi^.^Hu,"(==cLB|> YP<͛ٸ A\C}kkk]<ї ӫKBfQ&=}ć/^5x3^?{ǛGoO_uۿᬱޫ|ي_R?1s}{?Yξv/j"8жӖ5{Fߺ~u޲5&2Н'\~^ ZI.]={vTTԂ v4T*]dѦMڠuD޽{ ZxZJJJ||KXXX~tttZn{]TJu "H.P&ɡ:h*_M6sҏ-:%(ϳ ,VLXQV*ʐ*-|+-: } F'3u{ _-/+).c-/ںݽxx3Oh؀ &L0AWWDuyf+^ti׮];wlNE/~zTȟ?x-Y"Irԩ OB.7nÆ AcΚ5Ϗ AT蠦LRYY`|i tޕ8}VЀgh3lE_D?$~ja(%%%**jݺuiv횉[Kh4/\0}t`A655MOOGHs|L(3o<++)S&ދ[y[/AƏHOODuڲuuɓ'wԩSoG^}Hu. e%ſ bN{]8͍\(s\~իաZ_}lڴZGA:u*==}ٲet:S &ܹSZZ:x.h#G^|,BD":H6f6u---''#bllfd<[b}eTGʨժkW?c\?c?n2ѣGŅh(jٳ&M:}9s9Iuum۶#==3f̰jT^K]|ٙpu>|By&A@#tkkkd2_鑖%@xx<޲e˞>MqFo6mŜ)+/-:ښۑ׶}}L&#J{utt:4۷͛w:t׷[h&ZG*j˖-|Ag Mڻ<::zذa-_ ===/^Hub8==ѣ\sOT*@@ѣyzkhʸPފj_A.7w3g&=ZkSLӣ: 4,XfGGǏ/\QmͥuDD```NNΗ_~܇͐6q&mwաÇ322A$a#L4Xֹsg"`PL__̙3gά &f=x=K51dqQ޹(>6#:1{#GP,%%СC^^^˖-~{@xо0Looooo۷GFF]Úuuub;>\<8p7eI?svtB|RYmck=dK}||!J>|ƍnݺ޽#tR]]ݭ[[BqF1cƴ|+W,\h'hӧq@=6bĈ'OΜ9SWW8@1XLDzz;Y:4mmɓ'ݻxDӝ#vI[[{Ȑ!r_~ڵka$Լk]9q tx6I'=HO3552dܙS R*S%%%Ǐ|͛ܨN$7mpx+%KlOxCm]aaa7n: PP"xD#G@u"({\.w̘1~^h4S.Nb;uqZh4Swe%Oӟ>NONJKJH}Fb۫W/N:QZJPoϟg ,>|8N:T[HOO_lP(ܸq#n### 6nyyy/^\`v磌 6lT[߿ŋQ< D"D": cAj{{{F@bddS4333..Ν;>|L Xlv'"{GCW+[Fl)'-URX,=;#=#59-)1=Ia~A\nwgg\0ɩI9&?J5eʔcvV\ioo~z&ƫ1o߾2ofjjHw-))6lXd]dɳglmmߧ:A8qND"Fˬ?eee=JHHxG . 6"H( mD+sP[ 5EyҜ I IvFB.'BWWsݻw;rsnlll $ɨ9''gӦM322:Tyʕ+vnݺZ$uV3V0++ˋ/nj)իBUbgTgDϫ&c03gܾ}U)xЁx 0JQQQjjjjjjJJJjjjʓaAgJKK100|s̜gh32z?UJ r rs r 󤅹E$Idb{;;:?kkk---[D[;&Hn:+++C^od{رvZ:y@ h^2͛~id1ĉ|IoE$fgg$ B.WVVrLX.WTT$YVVFDii)Aeeuuu*UL&RT)禥h]8DE44lZݖ`lKd2zLp8t:fl.pcH KĤO>XRR23߉RVW׏h<#cC#c ؄gd34pl}obsxe/WT*+ YEyeEyeyYIQaYiqyIqIQAYqQiqqmmM-t:Z(vhmm-BaF+DdhhSj*kkkCuֹZ80qD''V0333,,lM ^~$AJ xСC9#ckkKQ<%%%%%%~-..))-)-)de%pLo@ǀ4LKKTġz,NmkjB.WjUU55JHTVVWeU*\V)d2YeEBTV8.򌍌 _򫙙vk@gddddd _^^^^ZңEE*߷tcfL==.G߀`8L]&o* Um\VYT*rV^YQ[[R++e/~e`xff]DVfMMMMLL,,,LMM-,,$7n8q"33sW߽{wݺu{^b%?}G5}zIzEm]tk﫨XP+WE+vTP @ $/k'sr6r8}})Sŋ?ݻS#++ۻw`4Ĵt/brrro󋊊 kXedddddizvr T* F *#)%-EP2dZ3p &Ubj&ŪaUU3***SUʊʊښUTUTU4UTTTUU544TUU@Poa2******|Օe0555*FCCCc{4o:"+++*&*'''%)%%%%++#&%%߿C'+((ATTԅ vl2333w1bٳZʕ+~~~-Sl*==ɓ'֭;NHHؼy@b׸/Y$--Ȉ,@&FN!'///+++++dFffVVVNvNYYi49yEe%EUm+}啔eeed]EDde~*}He%ťEeŅYEEIŅeŵ6'kikk|.4#0*JR"</""III^Q@@#Gf̘1vX2_ti̙4MP5/^hhhػw=ѣGrrr]tT"+++}}Ѕ DBBBNjkkRSSRRR"""ʪjZ:*ZV RQVSWTQUPR';~#&.95‚¼ܢܜܜ܊2I))}=}cccc###:::v@?냃 tRvtD.\p FV-[888 oo]!4477ӧOϜ9SZZ,@b&ٞ77ˋKNNNIMMMMxA(ijw&"!mMJC3ԡ~~ 7(? /7+#'~j %$ MM̬-,,7$@2P2ww#FhhhL<ԩS7nXr I-[&]Ν;gjj'y󦼼|J0`'O>ydȐ!dgh4GӭX~Q\\|\\\EE9A zCt777ORJJD,ǜ9лc YZYYY477$%<x@{]vƍ&;x<ށ߿գG|r׮]rrrӌs޽kiiAPx;SUUR6UUU}ׯ_|KJL-u501}{/UTUTm744pr2)$zJ?7nڽ177֭[n,--0]5q֭ZWW1cƨccܹ3""b֭$&:rѣ;u$.]233ҥϞXVVtRosww_pajj1YBBB4NE\^zudddJr2UQS72vE'aBDDTXyPH}]]FZ =5))ۘ\a)vusppի&Z 7}'OO8UZZPB}}۷o:ۼy3F>}&$$DDDl߾>|PJJIy͍,YBv FKKKkGFF?x嫗5,e'QZYR2:"1qqc +c FGJ bb"ǜ>~^^^RRRx[``+?y$++˫XgϞ͘1C߹s'))̌,@iiiuuu:޳gU())9'L,1 N FMp5][6鋰vr4h֟aQFm 'OHKK6lኊdj^~yfGGUV9#""v)+++ܹs...8ɓ'<EǙe``@ӛq>r$$%{wuOߺrn3g̘3g7f?~=o޼JHHzΝ;>k֬\||cǦOncc#+**2eJNsNϞ=T`Ssww?|9sU=h'O)?޸iӳO M:b UF%&.1cdFZJݵkWn^,@xdg4gϞ  9p1c<==CQUU՜9s fO:O>kg`*)555ƍ>}$xٖ-[$%%;9>>~wޱu1yn}^쌏zO%ž=`X "3!aΎUcrBVzZS!!!11qe#3KqAFEV3N?\iQaBLTw55m:򂿏|YWv, rSKZJFFPŠGб׿x"444&&FIIiܸqVVV&;W{Ξ={ʕs18A<ח-_\]PAAA555'Nl"LSwaÆ>9hc4eff~cZmmž 7Bn\~bbM\<rTm< *.~&s?Rn?WN}>.'EJAۛ11?Nĵ3G 1s-;K/{)~Ͼ#)-=nƼf8}gϞ;z􈻻{]xUFFFhhhXXɴ߰aٹ:6[oooGGG+00͛7rrrb^:rUQB:KKK@[ҒHOOFQvv;=3cCMnxi홹du]񧔗\9᧣oS2^{XZװX1_۽e_'pݣn} MpKns{9+-DDD3Ғ9}4CW~pA5lq .p=u .ܳg@#`ܹLCCCOOO'''*Jvrw!m)11&Mxׯ1jԨ+&av7$,,Oӿ6!))_2 JBije6 -/<7_ͻy IDATJ :mDN-/;t3{vHN^qݮý ٲ|^Ffkſ@Ct \.ݻwaaa<wދ-"4?%77wڵ ;ο}||lll7O'hx<^9޼xT[[9p(Q"""tn_8wWcUeys'c_v=/\~YO܆'fe;;!&ZFVα޾cr"A9|\Nv/?]O%ⓧ_#M!!%#7ŮqDxؽby>*#KĥK ymϬf2.?URX3}y۵EXX?Ǝ υ+C_:s}̤KKNؙ#&&fnyŸ)*Qf_9yW̪Jmbͯ_K/9ij/|Hv F9k4et=wWR|qB䳰ycݣ_32֧qAϪ.{iɤ?}QY9AOP,Z焰iI UesF Hsɨ8x*J+K `2J l >>}3[O~Q}]]ȍ Jʖ6?rSkN9YAIgWy3|Woz"5cXZw~ѝAFu衭oy IIcKK2Ғ#ܣ_=76?9chƣM/Y1 JVaǺǼn/mvs7Ϟ=ۖxTvvӧO=z;|غu-))Ivw/^ܹS^^^ oݺ5gΜf;w455 MBB!!!#GDF1ee;r=B!+A'N|Ծ}i>9zAQ1ѓTe="}1~ aU3N7Nɤ\zڂǹ?'My05!nG3 7?Gw)cUT xʊQ J>o5.*ύ|)3lΟ|w$Z4ʱ][ ra׭'ZsGti nC^4NAtaQQ b_/4u{^#;6圹Td,8|Y7F/mɾ{flذq"ZGо?.//zjsul<سgO߾}-[&*ڎ>!8vؘ1clllZɓ'555ܚw:;رcҮ :֭[:u"; )FNںI%$$gT>,:x'?72s_ :A4pDDE?R#6n%MN[|oZNin1o" kO>D?(kp_=7nJFN^\B"lG!AkjM/QYQ($ V|][[QZB^Y9y KOED{3 F z>7+CKWLF j\KBd͊"?T_ ӖFLqDTTm%FϞ= z;wnNɎֱx_tiܸqӧOoW 45557o6226mZkOHHx͛]S6=x`յ FFNNNII)==k׮Mdzt(N[ҡXȎMAW?!'W҇oHK~è4nCmASkjꋊ5>&S_OsUVݲ}:6{7oJJ璵G}7wfhjѩK7iH r3\.׺4c3AA|-aa~.AZ/Dmvz>c'G<ЄQlv-A r H EDD222xCׯ^*//ׯڵkɎ`X[n￝Ȏ<LJbڵv9y򤝝]nݚ]!88gϞrrrLgϞء3:ɠbF\")y>7~ƼG!o !)IdRekSvAQkA4X,Vuu5fښ狊 P( ; ͛7o0L==:::ZZZx:חܹ‚8ݻZ~DDD\\ܑ#G]!55511S@P9r1cƐڔ7o>tvv>slYI )Ya./WPwwێk\ig 4>3 "#-鄴mGXX8'#M54pt9ٵ8ClXPSG ܬWz~nM,]uܫ'u$LAn-lKɪoF'>q_\.U͔vxZR]t!;u444dgg󟕔V3L&BT BH++(++)+))+++)))++(++khhhkkKI}⡵xLii.]̛7ɴ///iihhh|{IOOVjhh8~a~*9qq= pD,3bUl{$fkdhf9i΢v56B7ؠMIo e NC[5uL:Փ~?tձٵ5,qq Iiϟ~ͣj&áOԛO{z;A.>ﷷiA-=}U {ק_&g p= υ+^bLO(۸hVCgު5\Ŀ;7*[}r#ꚆfwӘwo=zy'olKe%sLC{#h&Fsrrrrrrs󲳳 WWSkYvPdd(22RR) EBJIIKHչ ^:wuuuNmڙ-,,<ͦճ&7t؄R _NA A\.[~ں7/:5kw$ⓧ|!/ ̩}4[)i{S8*ZQUQnla]b_p{w:9+{/p3KHJ=n:FJjwٺb1CsZttuJķS}zjY5'(+o۶. h<tRSRSS RUPQ2s5Mmu-mU -r?>.)--.}ѓ쬺:6ATCC#c####333kkkKKK4CNNλa2vtt477$/^0`%KNp\ |Vf`XgϞ6lXKZ =zr $` X:::VVVh<ꊊGAɓ3f̨,;rZr P^qѝ+f#BUCk=Ԥ#;{1`)‚?4biΝX{_n޹"\Ȉ֒RZo|l v?E5KKWGnjϙ{6ڱV0%+}Ȏe/_ܸqUJ(++6mڔ)SF" .ܷoq8Ǐ9rdg}vu/fҶ3ߐa<ՓQ/M]G?cRU S&;μx@ȍF0`ى>~Suuu=EElv٪/<@rS߽}M2U5.]\\ݕ(`qqq999\.ȈH۷mܸn8U__d.o>Bg^jU~]`?~֬YC`6h%yyyӦM۶m[.]m71-??TY{ֱ{4Yzj?Fv!G}u݁c_\<ڵ3g2`0_V[[kfeӹGZu͗v_Gp8vv'O644$;Z3xĸl!!!feeeaaѩS'3A/^8`ŋ߿!V\cӦMGi7Nz*J`6h=+VP(7n$; &~wrvv]Ν;Ϭf:tԮK9BdTt\ZRŋOohx[xϞ=;utPPPeeuW7'Ww~5yz/8N'S=ZZZhWYYfeeemmmh4}fwٳͭ]/zo>oooGGֻJTTԚ5kے-x<޴i:wh"fVS/z&M1bί?uӧOt1!xG}}ݻG!a!""cnjѣٹGs?~"%%ڦ'Ww-]}s?4eIfͲ&;p8:LFFFF"""dDŽ/(++۸qcvvuɎ-qqq+V0aɓ[* gjIׯ_[ĉzzzL8cҤIdg6|rMMͥKgΜt2==][ep:u&_v@FeEӰD> az5mڴѣGS((4o~$$$]1vEzMܹy5{^ã%@LIIIIIIMMMOO300011RWW'% 6P(oooMMM|Kiiy,,,Z>88ȑ#Nj7fw%`6N:vEl8|pbb]!666000 ݻhyEǾ.]{ܣs|%E|p11>˶AG#_Pll얭[o\N36$$%x1o"n;^׈#r6_(555;;RT+++cccccc%%֎ ___SSuʒ[8βe˘L[uA&9mڴA͜9%urrr<==ׯ_߻woAeQPP0eʔ͛7w֍,ܹww4fff޺u+(((ښ}Ccn=s%ߏ 0iQ/GG<\]]cÇ suuFСt2~ѴڛIg>baaygggg2t:======Ǐl6[TTFیLLLh4` m={ի#G?.x|CtttZBǏ ;sL ۛ; .>zj11͛7BRR_ummmAd? {ud}}Ug3k[NvF&"" ?ULI>)]̛W%EJJ}svvvv677'; `p:~CQ{wxǦ7/L8qݪͫrssӛ(,,$Jh4}}}j4ʶlْzjGGG|ߝ;wݻaÆ={rssgΜ9|wwԩ?~ѣ'L lЖ^x}555@c֭ӧOkgXO|t Y9y3}c3=CcX$ƪfdgg|ɠS2S2> [[Y񴲲ܹ)5 V<vڵzCGڶWL\[jkkvg/x2?\MDIa?g8jak?Hk8cӕS PVQ++)p3}!Itލ9$+++''㉊jiiHII޷o_XX،3ƌ!>p8˗//++ke\ܹsUTTlRK.=x𠙙@)'MaÆ=zZ݅ >|x9qqqqeAjjjhhGUCSLoؠU999Yl" u-̭,--) ّȄV_l׮]+W|ݤ9Rtc|̱WT"BC[WȴyFO-X^تm$P{RdlY>ap:uq~‰ô}}}Ɏ$ٶmhmؖ߿e˖AOuuӧuttZX8<<|ٲe rww߰aCAAgCGFx<^FFY>%!!a`````д$---333'''/%>ѽBqq uuEeUy%eEeUEeU%e%U5%e%e5u)ix<^yiIEYIYqQiqQEYIiQaYIqeyiiQAYIIiq!{(111 MM]Nutttuu$%%ɾGRIIɴ+lRQ*),X>BUCkŗ,)_ c=>Ɉy'; +'YUiӵM,elYC3t3wg-][wun=ʟ#"\nC[8t%5Ɛ9{}>剳[X};[X=v77QF 8tぁ΋/@~޽ƍ4hP\ƍ&MjyPYYپ}[ndg֥!%%HYYYYYoZTTMQaaYYiLII)ee9yY9y|i "#+,,ܶ욚jFEEUeQYQUYΨ(gVU0*+*e SVVQQU4Rs謮1RWW%_+6#[TL|eZ7; &\.c$B9Y]EĻ̏)UVֱٟQQVh҈khܺrnl:vھ[J\SP">>}S\\)̘fɿ _CrK_yKMz 4b̊+.*)--ݶm[rr+ @vy]MGaaקN*''RovssGaaaWW)SMHHH__N$%%x(/3)QUYY))ii UFZFFJJZR"MP2AAʈHS"Rb⒒RbMk OdUlhhfr8ښ:6][WWǮװ9YͨaղX,&YUb԰j&ODDDAAQ^AAQQQQQAWMIHQQQAAAUUUCCCUUUUUUEE廙a0Ϝ\BiK;')-~чBBZZQ޼xB{ӳ<7ݣ LMWOF8cSa^Ιۏ f2Ni %Us M-6pnt{8}]15YX05MN]:ptꯦ|i"×oXn6\rln?[ڹ( o>###奤f!!6CFRϞ=:thKA;1hРK.zwdge`` 4}ַ544{LfEEEuuuuu5f2 ,YͬxATTɭ? A4ELLBQuy JP(rrr222 B(i(+.(hmh<x?ΪABWdw'O ""#:ٚXXGzcs~wOf2BLW%kVq.ATV:"Š ZOF)bD<{;ABBB}]壨01o"v{1q ~0iYuƣ;uԵkל,Y"--MvvQQQ6EFFFDDJJJ-/턊CHH~y4ӧ<mZ3,SYYr a2,f7r+++[JTTTFxQQQ "..Nwq #'!!AMC}3,ҾG 렫jXo_>=uV3f&xBG5ٵA&{t-MWGhL7/~z+'?7x62/>-Z͍8?ٳ_USSk>|ֶRЮ[.77@f``d2UUyS+\200?zhΝz?ZJBջ;|Uc/;^\nC̛W U}6sUMUVNIU񏦎Hu- /XRX|bFZJ* q)qcIf""?M(T&IJJZpannoG:zѕ+W/^leeق_^^>{lAU333kfvz@hBBBd6k,֢dŠGJiqYP2]zym!!!knRR&ѯ^HJKk}54&}⬿\.)!)*..9kgE|BBB{+˱^2'?']9?M Tb Ν;gggj*RKRRݻ6W,,,tĉ[P/^^奠2d͛7N*&&Fvh-T*UYY9##ё,s$%%W\t҇b5 +tC/\ҥKK.ݶm[G:*))ٰay'OTQQ=z@)++G ՠ4hPuuuxx8Auh4:Nv hKKˑ#G:t,|h<xLLLo_=OV|Rg^=zr>kr A<|6?'#VmJO7=,$}v?Ǧ]/ּy{=W}mkQ9{Ԡ{y$);A+gIjM= pdY' Ŀ{یl-6iN&}ܸq Ǐ̙SWW7`4G}}֭[V\),F7ɓ' ,աCiy5hCBB[u\***v>M[tm/:wȶkw ,҈1v7Eo=|VC[n}=kņ!,,mۛӶ[NqЮA5M7-" Hx>,|̙3N<o׮]o8@ ޿㹹}{6W^Gvh-4ڵkS#7.\044?:(!ttD\.GEe'n>&;1U%ڂj&CMCKSGO <'lYwMMM[>(--m۶m+WT )N{l@k?=jhhHvh3gܼyرc }5yq $,YQq0T'hQQq+WA j.A@Yd?Km{ᓜ$`9Rd܅ -ZGjf;G]CUFf:D?qπǎ먅 .\Xl#Gdڵk.\pssfQYYY@@/"ϤB>|;wbddAv~SN566)G֭R/SiQ!q|p]vM<8 N^^^'O8qm455N:믿2Du&M$ /_lgg/ 6lXmmmDDA@RLLLx$VZի+WdXϞ=>mNw$8JNـsyxxɓ'{޽{M&cnfoݺi̙Ҭ͛۷oϚ5KYYY,;V,A3`0Bv &fN?bM2ĉYYYdgo#fnnGfN8ӀddM;RyΝ'Ħz۶m7ovrr:~%ى~Hqq L;BZ]PץKk+Wtرk׮9WWL0LxL8b 7@־}֦M‭dEqaE3>o߾d'3g΋/vܹh"qmC-[())yyy)))Itpp0cSqqGƌ#@&t(44 ), C=<ܸqt$?>>Xʥ>=i$qMX[[2rHq 2aȐ!>$;H@Q0vX >Ov*h<hi~䤋/fpq\3wrDF|xC)֎sqIի23===i4ٹ@< ܨT_N$7o޼t… v*O|XPP0a1 2͛d`2B #Gѣ#; ||>֭[k*+*w?ɹSnrdk! rc#ݾ$R4nܸqiii /))׷|#FP(d'˗wurr{YYY ,7oޘ1c5P(\`5'Ȝ+W:uT*, fiiiK. h۶-Y@^[[ =QQQsww:th P{{Su EEٳgw .l׮]HHY@X,Nb`0/^c;;^z>G!eee{{{{{{www JJJݸxWWG:CØ24aX&zFmte?>Wegdeded B޽sud2[^ |QNN΁G=m4:Nv"?"##wd2I v֭UVq׋qNi#F8~yN1̼:*Jv'''H___`4667o޼IOO@v]=öںmu 4u4455545 i((/+/)((/-)/)*(-./.D400l߾y&:thL ?{ŋ ,--N$)Zn݀H -Z{n8p !!? jjj&N8|WWW8Θ1~ԩY@̪ΝkccrJd/@s //onnnnn ܜ)nrM-m&UUUFSSh4:]M Nu-[WTWq9ռZ.[SU^VQVVW^iyymm}}ccc] m=F/^߿???#GTPhDGG9rdڴiduq̙m۶먬 .D4hNNNׯ_GQ chhHR322x򨫫Xb%;+2HG)---)))...)))-----p8S)++ȬpyrȄ % 6lݵk 1Iyy#GFٹsgOwM2E3CKb:vBv'Zym^^^ k?ԩSC !;-[&SSS|7.]ܸq t:6cǎdgh]Zo sBatt+6m$''gvvv|#/8qbѢEÆ #;bcco޼&C8{e+?\~Ǐ?B񨵡P(W?s YZ4̨|3l`08w^ܼy3f=z4Y&:dɩO>*իI&Ih~h%OܹCv&#Z!}}ٳg;wիWdghEe/_tRttQ\]]ռܸqoڴi'O&;?=* ,Y"ΝرJ@k8xǣQ1{ B|+[#G>yСCdh4_|>?22rڵ˗/\paPPдiug-]tʔ)dgGll۷WX.QQQǏЪ9 !! X,-**";HBqww/++ $; @k9*,, uVeeݮ]wG>}:00pٲedg萵AIJPPJ@ahhح[7nٓ,C(JFFY@ttt.\g;;;+++|h<fĄ=zС3VX1|pÇIW^EDDxyy# e׮]dgGtuulD2dHttϱcTTTȎ¡I(VTTnWTTB  p8 zmyyhJJJzTSSSt`A PUUUVV ^Bٳgwލο9ٹǏ_x}ذadg?wݲe F\ӧOw^r%ׯ۷'MDv!L&3##@779s8qB@r555\.ںں:n-W4HDC}CMM AF>+~T U %%%U*A hDNNNW !QXXx޽l5uԁ6g_|yݺu ;)++>|x߾}%W%--ɓ'$WZ!CL8Qԫ 2b=~@x;vՋ8-dRMMMTTTnrʚ.[UU]U]][p8UUu\RUTee2LURVVR*)ST%eU]KK'!J!''GAP(j фtu#]MN^ q*E78UB n 'GD=P__W%sk8|.XR46@XS](hOUWTTTMUSCSEUEUEESSSUUUEE`h4 nkhhHaqHT^^uu_}dGrʺuB… %ZԩSVVV666ŋiL&… Z6''H___:Nv GEuuuIIIqqq4uUVVWWWTTTUVUUU~p`BQSg1T*MM]YEEYYư]JUUjT*MMLUQchP*JJT{C<J TWrkxSW[[WTWjjk++xN]fޫZn=éjh`NC`04hOQWWYY$%%%;;;OOO|fBѣG^~Cׯ_OLL_TT_TTTZZZRR"+*.....))-)+-+--DQQICSFWS1hjtݶ- :MMNW+Aɉ:Z7SUɩTWnWWU6+yV4^Y^U EK^$Q?N6m TUUs߮<:::""ٳg 6666lUno" ;f͚fuy_C-ԭ[=zH Z...۷o/**%; |'###%% 4f+Vؼys߾}mmmɎ2G5665/??//NL9996 :CASgu]WO`14ttC47T2/UWVTWUTWVTWVVWVTTaVWVΕ#BIIIKK[SK}F+ދǏSSSzf;;;j%޽a|{{{kn-ٳ}I f}Լ}ԩSI^^$## @2;;ݻ_]G dg 999YYY999YYrr55P(-6::zmtjjkjK{*+J KK J ˊJ *JK JJxSRRjFD__r ^bvvv}ի7<oIII۶mڵ+q>ɓW^=|D )))H r'O '; |']vHVSS3o}Z^^goopB+++|l\McnnNvHLL<e$uzVpuupBll=Y;1xSh4ڪU֬Yӯ_fxJ)֫"%%ŋyfWmohlo:v= CS4G++J J senll$BCSdallk׮k.Vtؗ/_.@gaaaуfffvޝ,@'$$߿֭dghQ+>Lɩ))))))))Ahhj:v62cY041kklkbF@j,:XX?P_.#7+3]fn;SYBPIISN&$KK.]0L BV~YfUUݻw7ݻ`HP( kAckk}3fFAR=<<œɎrZاO&%%Aә;2;ZLsЙաV]XJvvrk2__x*ՋJYZXƦwޝ:u#)x3f׮]c:Nv+**1bD޽%]+&&&==}Ւ. "//?lذ)S`6effAv h.,--njsnݺiӆ8-E0̩!YV LȎ (gNx6-5-Y|~zϞ=lmmmlllllȎIԍ7vSEE8' 7lؐ}QUUUIZtD xʔ)6mׯY{>|855d梡aѢEZZZv΋b\%aaa<|*M hhjucIZCKm؋x_$LLxpŸAٹ]vz-[:wIRɎI/_tA?~#G$]}mڴqd  h1EEEe˖%@4w</***,,ݻAvujmd$; %e.ֽX}PWeEYZҳ c/wL;;;;;4HGGܴR{n{{k***RSS?>k֬.]H?zY,k|uӦMyyydgod2y<^nn.6҃&Ǐ?r䈵5~~Zf*;;իׯ߈rL=ӿv< yG / ]G >f̘^z+?~…SN:9_`uu۵kuV)vѣGO<'Z SN0`ٳߌ9rӦM IDATdgf/[LIIi߾}߶2Gм]Ϟjvzsa``d"wC|ӷa%p;{pz^v 1:z$")/xM>)+)|p|˗/=`0$]N6mϗt-:}kΞ=dd̙3 0m4@f/^hACV͚(),FYt)z#bw܉CA++)zl?s2|Mľ>o}`ۆ?3;6?q}gˀߟaM'Qbȏe]/S r%Ν-f͚9{lMMMs}?.u֔ 6ۓ _~ݻwwU 傂\HӥP&OvZGGG7ۺu@ $;4;gΜ9wÇ ]MMovǍWZݸPptDVA'XϨX[J/oͶ#~./-9{zڋG="^9 מqRh›Gu H:&QR[A$=} o^4 f}S^ZҫD>ޖJT]f-8}'V-FƋ-bdGo߾ݳgO:zÇ'N(?sܸq:iii޸q =LfFF)98q"ܽ{@ ; CF GZsuMc1W4ߒ+XdUSZeySǓb5k>3y޴!]F{AIJ>؏3:XX% B B `WF>pv#z(5~;vgm& 1}N9...dM6lݺU]]8_vݻwK\^^ލ7,Y RٳAhhy߆d ¬ gllƾ۴d6˦rzM裩>Zb[45!:Ҵ} vYv}x/_&ߤYt.?l)zXv/MGwBݦ>>|>,2 ;eff0]g˝GPUTȎlRUUc#0  ENm舞}4AC]z޼H99KFMJDvq۫0/Ff, j8&rw39yy j }ԮAFi;s{߽݅}^̣{zF]{vc8HSD>`gp<8L[W :Qvq?E77}A%?o7=2_(),=-9S))ɜkg,Y%xkxU4!omDĭ,}:ى>͛~~~\b |^}ѣGJ7o@p}M`C]+Jî:5)3Urʊ'7P(MwwPPPlLϤohH46v;Zur˷/TTiZ{@IYM LX?3y(UҺST^[q_|6 ,,lܸqdgٶm[ZZmllȎN8{aEE/?[+r_#33̌, LfDD)Y9r'O|||:LvY@ ML"+**DܯּJIaڮ@И4ER[C]􏡱ȟ+g+),qtf]q} }"uJҧ^A/Աu=UZ\hiqf?NT߱$ r^y9EO#tOzsJx)Fu#/}ֿZڒFW%;?,Y~:믿.\hh Px1+++TJݻw722y&A0꒒@EP cHflDxdgQ4ZF<ދBX:tN[tiMڙ8uM[QREwa ֹ2mۖS(.ys}P m0xSMHI) ;H/bf/_4noa7͜MM~pmI~ k׮dϷnڶm[///---|]v vmm :1^5y.3az -yks~ ;f,=f3mg.''w)?AXrBK'Z~;+-^UY^x?O~!hŴ_j8U&URVbݛ~M4uϷ^雵4N_SYq9ɑQP(ω ^}$qa^[\6{۷'7ݸqchhƍ'L@PMBBBׯ_+555F244ZQoꚚ.d2-`0/^|ڵ8+%+GMLTWQUQUQUé3hkhl*'//`<^~;u MMmHAnE:|~BWH:s1?˿u}y.,k+GlOpBoooUqROO|OO.][~mĉӦMfÇ9st}ɒ%du޽={\~]ASSSt:Y;4***vyOE6f1Sfi!;Ș]BkCBVn^?w/F1dLmC}ЫNz"y>>͡'99y۶m';η\hۥKSNNܹs-Z4rH>/_ :<m2fϟ?̌, ΝkkkNvNӓ zQϝ;WtXБSTTi&F/T$<=oWdح) 9u%;kkՋwYzO:zji QB0((ˋ`[ OOOk.eim%KPeL:h.^G.\`iid22@YY߿CFFFdhְ4ŋ<;h9I0)]q xF ١ZfR ~lƌӧOo&$s8oo︸%Kϟ?p@vY7>>~ڵ;vݻ4|7oo~ Νkoo?k,ؽ{w\\:Y/4@K.]i2ڭ}{^} NEqQ#=z̘1珅LOOϺM6YZZ{<}tÆ ˖-suV`…;vf]v!sssWٹsgMM2f޼yׯ'; @#hCCCݻ_\\дޡg&,lU&DGGG$DGxLgaìNvqƍ2wHAAEj*)y󦟟ѣGMLL\G̝;K.˗/';|_~̙3dYٳ5klܸdghx2@(&&&ݽQӷ޳Ejdg/%%dyEDnv4h ?--)cбug+k=uPPP$;&| /^%'%'R6{w:::dg۷~zʕ ;;t۷2!AeNl+ت}PqUq ***j8P\ 2?Vn Ջ+'B޼ɉt &VVVV"0t:} OKKw3U hmۑ׾cv6L6@=q0=yZČ***;vѣǴ'ѣSNcv0%%eժU2,00cǎs>ޥKN>lٲ:*,,<~I0u0`ٳg1x*p8t a0>>>W\2dGк|>?fRi|||LL̳gNGQ](϶cںzھIiɉ3RӒ r(hjurp3nݺhj ř3gBCC,YM=yd˖-5۷O__ȑ~HNNn߾=x7NZ#G;;;hYe))) Ϟ=KINd&V&Vf֦VV3L\./ʨSe9;::;88|ɟD <}tڴi#Fh>^~~ٳ]\\-Z7?we˖yh,3f̰!}Ԡ !͜9SWW7 Uht<RQQŋ/^xQ&PA726661445346H r rr223r2+B ];[ٙnL}#RRR~ٳgcwEWa5P.ZZZ={ٳ<3diiIG 9&qM Q~nQ^nqAna^ٮ]]?so3hÿʕJOׯݺW(ׯ;vh#nܸ;w6S4]r/$%Iaa1h}lx/ IDATmmݻwwԔt@K#JWWG=zxD"ʾ$++J"?GSkhbohog`odooho`lbsH ֖䕕%EŅ&XZZZYYlnnneeeaaannn``@&Uaa5kRSSg̘ڷWwСw6/igh\,kH%XR)H*55UUꚚׯOg0Z\-.WG[hۘrܿ4bĈ@Z[d2Yff-h,,,&Oo߾=z|9$a-PQQH$UUUկ}]jkk+++)J"(BQVWBNQTEEL&(R\YWW_eWb5s:D[G˭CNQb)bi1L444l6EQZZZUQQο~\94W\ ޲e=t3g̟?]v?^VV6}tRMܹs񎎎[?t '믣7le@^bX,Z)Ht#Fxyy6o7߸j(,,߱cp d***Cգh>tФIHB:)S$&&Ϝ9M-[lSN%jhh8zh M3**J(xdȐHBA/+++//'mF @@߿̙:::\._fMqqu455 :uh֬YsrrHEa5h,ӧO?>}J ryWDDĢE H5ݻw?yd͚53JJJ<8f̘:}DDO:::m g}֧O7VUUnhn<e! W^xb_~͍tQS9uӧ}}};t@$,,LWW#М<==o޼Z2q͙3j޽CS('ONMM 3g!Tn߾k.///UO<6K.=z["رcʔ)t:tT*,,\|y׮]g͚E &@GAAǏIx\!r<44t@M>>>믃lllH5-Xd P~~~XX؄ ȖaaaA:JEEAҚ;w ݻG`ښݻwϘ1C&ر մRH$Zr%"Cm߾o%@۷KKKIhhha͛E"#h;d2٩SƏEm۶瓎jr "00ٳgk֬122"C]~sQUU%@L~455/]D:ތc̙3ԂI4 @?gΜСCh4Qa۶mn %B;wzzzvؑt IjjjC [ x<^ZZ hly]EaZիWϝ;WKK+$$dƌtT39x.]jggG(jϞ=SL!@GqqÇIxDB:ڦ.]xxxl۶M nhZ<VL$zyy]ҒtT9uԁ~gWWW-EQϟ1c"@iΝ#""H|BI:,ooo6D:iaZ%Po߾_v~ڽ{w׮]IG5]vM4ݝt EQTmm֭[]]]Hw-))!fddb4{޽+WnhBj>LqqC.^hhh8{)ݯ<>|?rqƑnyѣׯ'Ђݛ^pa[h4uzz:hFl``@:I`#h5֯_?qX{+QJJʪU;}t-/eee>|xҤI[Z55>,22R.n|2O X,9/ٳgĈ|>t @ y޽B!<Fa5h'N455ݰa6\ H$555}ꪪ_GUUUKK#4M[[ ˭ML$:u*22o߾7ovtt$ET*]f@  jQ_ػvbٓ'O&r]paҤI[oG__?==G[SSS[`YN>mI|0HTZZ*H$b\ X\]]U]U]]]]U]US]***ZZ\-V6W[Sphjjjjjjkks8===]]]]]]222=abbB:EJWNLLܰa9霿ݽ{ڵkk׮[Z.UU?<22rܸq-gD(c#h|>{֭Fj7TZTT_TTTXX0`TRRZ* Ai]]]ç0L:2, 0:605wd0YtCN3tt:Р33Lu O+"\.UԿdH&KĢRTR)Tkښ*QJ"^_HzzzFFF&&&-gǫK&ݿ… <==[Ԣ>d-_<11100֖tߪwէO,NÆ ;|{CbbbHW3fݻw7nvh30xtJKK333233 srr EiLKOP[OձQGWGOqut:4TҲayTX& JKJ% eҒ9fFff/ͭMLLTUU?= ɹxKy@^%֮]ߢ( H$s% t=""G- ;~T*ŷh3f8vؘ1cH43F u Luk`ogho``dPօ|Xl1z9uue%%²gI/J eR)EQfffVVVVVVVVVV666-j` .\|933dԨQ 200 du=zޞt?>-5(mVHJM- 3K J s233K (RSSl׎|>Si .DEE?޽;օz#BqƨUVuڕt?H$iӦuaٲe[Z \>qAxI*>|޼y&BP̛7288KmA#G.>yӧqqqqqO333d2܊okgn7NE9ii9i鹙iYU EQ:99999;;;880LҽCP<~  `٤Z.BiӦk׮ZŅtοmݺ֭[aaaXoΝ;|0 ZooݻO2t(ooQFM4t 3VÇ?}$!>A"TSWts6fUV< Kpz '#-;#5-)1*}Ev휝;urvvٳ!ŋ7nDEE :t۷')-[+WlSG-YSGwqss#/xt\vڡC9+Dr<11۷nݺuvzzEQF:wpk\TQ"ayzgO=Ix,ˍMusqqq۷o>}ZzH ">>>**֭[Ŗwss&jܹܹsK.ӧ&khׯ'/=z̙3&EP,YpΝt:t@ +WyZtttA~Cg{g ^;F(&>}aGbQq֭[!CK]JWRٳg݋522ׯ_;t耯rԩŋQܹg,wqbbb.]/n/^ĉZZZ[@L:uذaSN%0x@XQQիW\rҥܜm].=8tfܵcg:A:Z\Qq_$ٜqwwo@CDbmmݣG~a8pC !_dɊ+zMR(&L0`)SHEQTIIرc7oDŋ7mڴi&|A#2?~|ԩ=yҽ{߁wRQQ!]FQ~[ߺNTt_5jMmT*{ݻw9k^ Χ8qDHHٳK-o NtR-ÇO}ԨQ[ 4@0n8__߁ny晛ϙ3t(#P8eʔϞ=t P#w ,y>j;8:c/*h,***;8:Sqa7.;V]Cc̙3 ϯ4z@ p8ƍ޽yc߄ ;vܹs -ov+V`+""G-KNN&]JΜ9յ[ns>V<hBrҥK;Ο30͸A_`O EYiIԥ?%N y=H$,*`333#jkkW\3'''9osҥ@Cm?~FF5e_N͞7oނ ~#O%'O|]!CQyHk402?WRX(`?oلsn/)o΀IE;zݛߌkguĮSjkjD+{ 1mkZy~;įacnOY\w]zjs\|U\- Ԥ=wCרMᄇw;8Ԝ(aY_Þ>TgA# oܾzX[G{~?+fשKQLQ~϶CA ꛆ \áUUUgyt~nBO]۷o۷o6*+V$$$[tn߾omQydd̙3I(;wСzs} x.]xxxl۶IGGta5OvڣǎuLQŽrW*}gbd:􋊊 EQ޾uEQRaYiE55?mH;^ ?5;'_ l^ ٣ruĹGښeҒQQUpwj̭kcNfs'EB!EQٙ_~xvc3 S/ǿwZ 'EQŅ^_ PP=ze&b4Bp_Q"LSgQE[̟?Ir_J|je#H-Z§RɓIe4ҥK555[ǓYYYC(ooo6e!+|5kNYܭO-oŊu}w({pFS163{}~S3W?k) Ͼ>`_@Qsw(jy9fnͧ(R,q܈szJQTzFFF`OQ\&Y\zzd_Vjʽwֳsޮ/e>v_YT$ǍJTIQ?8em۰o놴_ٵ~eƋ$ (\eS8aݣw]8ywgyFb7V\m5;OjHHHȬY:<$׭[gkkO YYYwVUU% :_~qСCI(5333: mrʐ!-6xI٣7k3yp\&(*펝:0Qbn^㷷 bQ#_or9S.**ȻwDrSGE;U?#,6gS;~=ٛu5ƥ?e^w&ܸ> 6 o)MoG3z{XEy':(JEEeւZ:i85~O P(EyooJB ̛7/==}Æ vvvs!!!ӦM{@KK_~CFNOO'@Q0rb->ɭ[{ wk}?oݺOQcǎZ!JCKKK#]𒺺o\\\dd$iqux ;p(lf>no^w܍F9d0vo1X, +[{Ǐe;[9n rRLg0РҺEs8urWh4^n_XХMWG(z'd2i]mةNUS]}(t۾oZ-fa(*#5J;".+텚9鐶#*** K.˖-cHKv˗/s\-eذabX[////++i3堄lmmG{.]`ShZ._}e˂"!o3'o]9oܕdRյ߼/w#Ʀ::?T^`wo3^U[SSQ^V-񈱙饳5P(ܾAQTnEi%%/MDQL&vLcS +kWΝ6| z oqQ`L1GMMՕ^(#3 ~{'/6uBvzjACZ>UǴ k׮2dȪUZūZTTu#FnP:2ƍCǣ( A2qDSS 6Z'@#O2fSSӍK}vj9AQTC]]ڻ_r|\c5EQϞ8}xVb`yVZ TTT~\FR)6jSǞ>wp?M504cǡGѷ/ZD: ۺuqΝJ:ry@@ԩSI(#ӿp!Jb5hQ,Xti-o#Ob5浝+ZDuޫkG(J[W? M̆7ex۠-N+:_wv={o;tqpIL1dKK~>kJ5kQV4Ւo=oiz ,ggk0̀Ѓ2d o)?̭ۭ_{&1nܸþZ.TjbQEIa9j VegVEF&fV*S%,3VS{lTZGTU^$O"(tQt[nJX.(-*dF&f] eZc7;[˔LUSSnݺ4tJMML2jԨw Mf;v3gsN! ̙CтTT ,hGwԑCRH4Mƚ:(JK[Sg^̭oaVl_:5swr\MM]UUMP ݦص{>7巷31ЩrKMK:VL_x0uBccc[Qmm FI@ 6?H$Cl炒SUUMKK;vS]b]v},Jw܍搎R***'쉹yM"={t?lK+Ogy=lDzWVTp)S` ŋ]SNs>@ppl6egnn~q==ۓnQR ٳ r[jhh߿W^:::sL&۷o啕=[N'ܾq45Ǹ WvJO>}>V/--mҥ4mݺuVVVs>K6mڴ~Ν;n͛7'%%QRÇ_dS(ͫ VSkYh2@Ł9Z_4 zF@y}O9j[[[QmիW7olgg秥E:}ĉIKIIIg޾}{ǎI()///77I&xooQFKZmYbŋ'=n8ۤ@Iggް뾝6,о]tt'0u EXXк$ի&L@֡C[[ۈ!ʋ秥x3ccc//#G$%%nx GMdݺu9هK*~7b^a[RN (.:}x܉󳳳9J:-Yvcf̘1o޼Vɖ-[.\HH? 6ڵkbtx+ûvaÆ-#>z?qcs}  @hks2{n^ؾ݅ RR}}} H׵`_fȑ#I|ȨŋkkknRJJO?4a„cǒnw3f̄ FEE={v'O$nk֬IHH p8[@Ia(((ĄZUUUskU;[ %%ƒo[@MuuvԬԬ)IU EQNNN:uԩ*^%b D|r9I$͘1rڵt&%}Ǐݻ6O9rD__t ;TTTL:gϞ>>>[@IaKJJ{irr/jjj(jXZڙXXZY7E9Y驹iYi)9 FYXXvо}NNNNNNZZZaɒ%\.tGR(~~~vžMHzzi6oތX,9ruwN޽z={neF:>cLRrݛyyr( &wmG]mmYiqqA~QA^anNa^N^Nfq~n~NBXMǎ<j&I^'J###U8~zL.<><<G͌cZWWWww͛7{=4?xd%###33+#3#7'i`dg`og`o``lgas; FX.(/(/+./+-../+).-.,+. JϤhFFVVVVVVVVVVVmPPZZzT$7~x-.]e˖#GhkknQ.K,Z`RYY9m4GGEn#%P( sss NVSWjhq:6W[WS[dYlhj9[JuR$$*RT!2aY@$, exA MLLM MMMLLLt:[Ozj˗ڒ$fڵŋ"@kTSS3vرcǎ=tr ~HH ,]͍t (lh4  KKK@ xAiEFJLP&R럮fs8L`jtTt^djhLF#JQ\.*rXT!k\0!ld D+jlkGmEu/Hj:qUQVatks !A) *+Y IDATUU EeeEBQX_\TT^^'133766leeeeiiiii7lllqhJw͛7jj٦R`[[ӧ )}}}z_&\gϞ кu뀀uy{{[XXA=¯gbbbbb,--U(yyy+((P(%%%YT(*xTYZ\\T(yBe///MLg"JͤRVs3---3ZZZfffڦfff&&&oTDA3.[ݻG~74Vzo߾۷ojJtK="SSS]\\Dט1cnܸzEnA=O4h@t?Smm5kxxxΩv:s̲elmmEG7oerrrIHH`x5b``0s̩S8q_t -"EDD̜9aݺu:z͛Gպuk-j@@@ rssE#:::5JHH<//=~Xt Gə5kGbaa!/[wo5O&;vLtH"A9zʕ*Jt G>NLL\lـRP\\;88nPctttzu!f/#)]]ݙ3g޹sâ[P/0<KEEExx)SVZ.**$$pzzzsԤgeeݸqCtH=ꚝ]\\,:xn ڰaCzzh>GIOOݷoh8G@XbѢE~~~aaar\tQMJLL\l٫믋nP[vjjjz1!T*uqqax:lذ-[n&cx4ܕ+W7o.I b…NNN'NСCUUU[ \jmȐ!r|Ŋh5k|'[޼ysVD0JrJB'PF.ׯ_6l/OΝ-,,;&:^d\'N*Θ1###c[ Q\\f͚3g6lpӦMRTtTHLL\hQ݇.KݧOGVVVn\]]4ȑ#w+Ǐ?uTppҥKmmmEՖO>D.O:USUD@@ӧO^*:^ ߦMR)Poϟ={\./5xS^^`--E Mv"""D r<%%BtOIҩSlݺUt 4 #?ܰyY[[]֭KHH?\v-++Kt)))CРAcڵݻ[9RN<tĉcǮ^CtT۶m̙*H>>>և5jik}ҥˊ+JJJD@C0<j&22rܸq!!!>>>_믿-:߿֭3gرiiiѣVtttALeT*:@xƍ4!N.?~}4LpppeeMD@_ PPWKRd2==g7 j=OR]reΝmڴYjUEGlyyys̱7o?:t`ccsȑQFndr\"$$$x{{nj)S͛ץK;΁w썧Osrssx )O2rsfii,8;;zxx4mѱ_$رc(aT*UHHȵkVXرcDDãZ%=z$y2lڴifҥKnD@-1<Ǐoݺu111YYDOOٮ[.5rkhFtҲh-.Rd&gd%gd&;~2=嫂zx^YRflܮm;_߮]tܹ:zvSNT*__͛+~駕+WC@mܹs׮];vݢxEnjEttԩSg̘ϋhϟ9sܹW\)*RX6nپS>^-<ɌE7jʊćދ{kb7۵kW+++эdff8q鎎ݻ7_u֜9sz=yd-Inno=cƌW^yEt>|x~XBmذѣ7ou4ĉ+KK]4nۡ]g?ډ/JoF^p&{oy6kZݻw2;w~211޽{^6m*Ή9sf6m>---9ŋsssWZ%:Dc͛7`Μ9CR^^>n8++e˖IR9P @ܹsokާc^,/s.9qܧO6 2xpݵEռ'O9s&&&F__W^X+..n-Z?~=YY7oޜ9s͛]\\Dhŋ7oԢ &n`x --߾7wϿOW##iبۗϜxX̝[vvC :thDՀk׮>}ҥK[56D?4m4wwŋ:bT*|о}qƉnLO^|uuuE/ܻwƍ6l(_~i3 fv9I]%'䡽kmQFYZZznO<9w˗ڵk׭[N:7KSL[|jl׮]}Ν;Ť6$%%5jƍ[ZTQQ1~xCCիWsJ @-l޼9l}xffF>}mץ6JQWcڿߖ>,x͛k.]tݻwZlٹsΝ;[YYNS999SL122ZrL&@ :tɽzݢ*++_{)SnjW||G=`-P @dgg/Y-[tu1p(;AeJ}?zc>tI<-''ҥK7nܸ{nnnn |}}}||7o'NL6rժUshKfggYFtf;vl۶mDn;vEcxjhժU!!+ eN7p(QSf[Z|GKFXCFZuVYY>|b VGjU``ɓx... +nȑ>>>{ls .8.xT*}?w\=wjֶ-$+suΛac0dϞdfL4|G1[o\>7O{<[.S*w|v%EA~z1I3]cGy7_ܼza9z]yY[[O&LO_8k%ǵkn}@eeeFFFRRRJJJrrrrrrbbRqrrrss֭[ƍ k)UQQtҘ˗ἼrÇ'M$EӸ޿_tR!!!\/GPM4IG_/u$HLLNӶo%/7TUUװI$ۿp߼|!уI<}Z!Oʔ߽gҰ)I7r9b߬}$Ʌz 5H$Q܉{FgeLVңl١ӝ'"^<y=yY+^y3?!31nuS~2~n^>?f޽{饤<[VTTHRkkkGGǦM].^DEEŋoݺtROOO9ꅀ-[n(rѣ*J!RԩSn$:u#sw=o]=zxt'Tepҹѵ%__}E߿Q^2\"l{}S\\%I07N.:nec᳍=U?mݦ.g_&>][_jY{}ٹG_^(;#-xeIIr>kD^5e{W?~S/[c$œ>5ԑ&MJMMUTG#JJJ>㤤P7779 /ԩS[4\./))̴< 4;vlhh- ٳgE 70yLUe+hդKp)&[R(<㎷GO|2cQSf9ʹSK$>[I$fݛ5 /}{^I$---9b S&  J?u߃l}rvF[}f斯 x n55 uSqq,:@="8f9;;K҄Gosҥ+Vlܸ{K ιuWvZZZ:r Mn]ضs&ͼH_ A~MUTw;RDwnӫ^HrCJբm_i`d<6v‚qdeYX(0304H$5GZz`w۶mk +..;wnFFʕ+Ew'N!Es'$$tYt mٲe„ [PV*(,42ŃN=z]9w(6N}VUU޾vޝn_ %E::u )V($o?F2Ғ*D(_ IDATwndqؗOW~2jutu%"ȌMJKJʄKs\b#B4mСCC4\.OHH]`ii9a„DFFnAαv+Jlؤ]nΝjN*zh`hƥFF_rj.H3z;7k%TstqH$G:9W_Vª/w8;NͿY+JVz 222BBBX_~6l=zA&gΜ]ѣG .ZjӦM‚j\nݺE݌,'0'xlc`h(HtqsT{]M⿇m۰V>2 /wo9[G&Gy'$nuBjާy{ү?"7{WmX;(KkwMՃM̧/^i@KssF)+==}Jr\pݻw紵%+++DbN2ѣW\݂:9}cDffaժ}6=׿s?D"y,dΔn'00essUVYZZD" w࠯ :ǧW^V*,,*ov Wa{9BQX$+Ӯa###=ppvyޏ}r^W.\)WbbbΝdL&:k...3f9ƍײe1cƈ)**=ztgϞ-q#~qġhY&.nM^H#*//?)ٟNqG}Դi˗:P9s \PdiӦ:uٳ[ #O:v^gE΁`I ^xcǺv*:ulrsz衭} ! Hڴinݺ\-]VVV.< ̛80?OtPTn__K3w:SN:wԉ:gϞ*Jt999Cƌ#V^-:"1<:MWWws{wUU(<ݝޠ>dʔ?8$ue˖ :t::/rQQQC4D"G̙3\53G~t7?-.#5yq^))+9s̲etuuEGT*m6nܸ#FHREg\]]===:$:DCXXX3<$׀?~,b0<`gg_ܾ}iʻoM+++Dw݋Z>k;:=_|ꔊ˗>|O>y7DxYN)... j#G <//gϞu7qm|M~S]'0?ٽ{oWөSgϞ}O?Wt]~~~Ǐ!\]]tuugΜyÇn @]|ǯ4Wٓ.~lZr\ ?sΝ绸,\Tt)S4h`ܹCԞR߿yv*+Ǐ?zn4Mtt>|EJլe=tmֲHR%=zpkNF^<[\TЯ_@@@=tttD/|پ};>sGGG-xI駟:t'O7mʻmǖ|v01;[w#ގuj^non{#wwwсnݺm۶aÆ >#C4h[… RyDuHeeɓR5kDe`xORݻw.\8w|bbݣWK[7mn`d$:SUUV&'<{~;nuҥk.]vm߾LaÆ 2Dt ^GP拉?ҥK7nܸy떢P[[ͽWKf.n΍m6Y) %>}wvlݒbm۴СC׮]7o_VS˗/裏|}}E@III9reڶm+E?~([޽/ suu݂Z굪ܸqׯ߸uV~~D"1ɜ7qrusqprus7odh$+FEEyVzZFJRI$%={8K"yz6k۶M۶m۴iӲeK.k͛`f͚6}tSSS{7iDt PTӧAbx111ߏ\.s KFNvvl:X61jQ?z8+359#5%#-9+-%35qVfeeD"133oڴW3Mzzzran޼xb ZZZwԩ۾}5R^{ &Gt Pdff3f#F݂ E|||RRRBBBbbbRRRBBbRRRNhkk[ZY[X[[YYX57j`jfabfnjnnbjnjnabf+U>}̼Odg>V*Ko`"]\]\\]]]mmm{ݸqcϞ='O++jOEEСC|͡CnQo&Lh޼رcEuс׮]!fggegggdddfffddg?~S^^ˌMM dFƺzF2c#HBSj5 E E*jܹYYYsP[jB}FNNNiiiQQQAAAiiiaHQlR虍d2=]g7 eFFfff2__pa||ܹs۷o/:j]zz{キdɒ:nQc{ٱcǮ]Duԓ'O$cQtg,XT*CCC7n,:^ nСC \kaa!4h0vPooo9\7_gϞ8qYW\!jU"$$$>}tyŊ%%%[P+b͚5K,yWXann.^.]=zTt333`xࢢ-[A`xꝬI&9sfѢEJeݻÇD1WWWG0a"##E1<͛7Ǐ_VV#:ׯߓ'O^*:Dx@]ףGnݺZJPnA cx̙3cs@$;;vEDDQcr<99Fiĉ6m K, :t%KExW^rRLKKufffSL9z+WD&1</::zԨQQQQ#FJN񱲲:zu쬥 :P>>>zZjUaaG@T[N6iƍޢ~W>\QQ!E-9880<q脅Aax4Vaaym/[Lt9&L&6mکSΞ=+5L>8qbTT… j𻬭;t!:D]1<K6m֭[+54*666ްaCND@pt!jI.gddƘ1cd2իE0<%55588믿~w׭[gkk+꺎;=zTtZ**))It6 fΜyʕ'Nn?hJwޱcǖ **jɒ%&M200jҲcǎCԒ\.gx۷Ot ^#NgΜ9o޼ƍo(})**:5cfffee/:PKΖ-[RRRD1<!++kcǎX~ܹsmllDGFܹsDD#˹†*WXQUU%χ늋m6zӧpΝ$!jOhkkϜ93>>~݂#:P痔啔]7MLLttGڦƆ&&&|4Rܿ?PVV6pMֺuk#G;Vt:P8::{_~e\]]E?5YYYYYY9iӜEEE%%%ŵ+ZZXXZYZYEVVV666рNT۷~:thDGJ}>===9jC.999n/]%PRJ%f***RRRSRRҲSSS?.++~Lfbfljjljflbf$LL M b6EbEHQ,---)V(KKEa0_Q_WXmllm5jdgk`gg'rL&O>RO?}999C H~~СCN/Em~~~[59f̘1Bt b?T*߿$$$'$$&UTTH$}}{GG+kv;vzu[{+k[kV l^Q#V!y9OӞfgfg?xqǰܜX[۸]\\7nܬY3OOO0+..ݻommm-: 33]FDD0mnnO>ݾ}{7ovqqݢ6>SRh"!zSTs 굒yJC#&ͼ]=\_ڽ{m۾{87]ti}?wرPooo-3 ^P('N8s̙gܾ]YYڤikm:7v7ݨrg?w7/_YVttr׷w΢=zTTVPP0t>}nQÇ_vmfD`7n444݂?4*-.v̥S/9:0 p!={''EGG;v̙3J}jǎuttDwBTTԔ)S>s777-aҤI$rԩe˖-]]v[ڹsn~=ҶC^zjա4ØKO?q$u;;:|VZO>ydJJs>}ziii) Ek&''4ǒ%Kݻi&ccc- @TǏ]ɌM^Z?xIxYfǏw5ܱ3gΜ:u*..ܼ[nzjڴ.ػw_c###-j_}޽{E#??;v:uGJKKm۶j11zmȈ~sxp;ޘ1'Lࠖ'eee]xٳ2k׮ݻwoݺ58Pk bȐ!ƍׯ5pݩSرA[qy-^cǎ[k @-)>,$dE~~~.nMDG) ?%j IDATf7r;/nԨ訿Ç/^xG;vؽ{vNԌ+V$$$Q b~iDeŊ_|񅉉GfT*ݻ?Ac-XB(//;~ǯ֭{dڴ}QZZzΝW^|9++ƦSN;wnѢ{#<111[oSN3ao.n}ke2ٻ*!qя$z`Kɞ|Iݸq~pP:T:i$ +WR'@KWRR0yBoNx+q!:Sw^~EM]Famx]\Tx|v3K27[HҢt=u٬ >>aaMqgϞ=<)))99JCC}ر&&&MqR… (dDF>cVVV~:99911155NOOaرvvv***Dj\t˗3ܜd B4''Cn۶}TlW{a_FsȈ[04g›?.-]n+Vl\:k3e6!m9ٱn 'cF|[nоCuU}<| .+u3$bح6X uо'&]lmtֵ;x8BH1ߓaou :g[ CgTeJDElKx]"xtR܄&bWq`AAAâ"?abEϬ,\&\\\ dlluh׮mhh( ޏd|PأGN}]ttƍ׮]U)#իWk׮py;vM-yxwBԁ]uuu#d?zpOK{4kQQiq␢ꪪ=4;#k&|>~']=;Bݸ{am]}BB_~ᜪ*KQih_93BHzJ_ =tnф}44KA!,6{}mݺuܹ\SSZ_i$!FFFݻw611[5sɓ'kh|˘6@  Nj̟?̙/^8p q:\ׯ71rwSמl5ȻGhtc/A(mBH\~۫ >B\=;7jY`f^v V|!+fO<`Bܺ5:t1Q1֯hC4_3>~8|[XYM]cǯˋ 6>RuG>fS3~uUUU2XLֶ޽-sϞ=7naln߻SW[Kg0>gޭK̃9(v>D\~gE(w^і#뫎!ζ Z'Ϫ?ܯgQstt^?pBӧ/Zq#ފ4M{e0YYY2`x<''}xqi}v.!'WVHX,A&~°ryĵ OW qgj8d05d2U9jYMMfkB{džkjX(7s#&f\hCCCסC>񌍍14A&$$895$;+++\tL M_ :8m~heSAyUTTEܴsH|;ab[GgQ4e~}~°B>רa1LD+&4C20UTH++bs8M]xDK,i>44%5ahhФF~OOO>Ou6 G-%f7\nkhv֑Fxx9v1L,>v3sk[BH&ΨoYlbSUKh]jXWWgo-122Mc۶m:u&YZ(faa! 1ѣGׯ߼y3N:N[B;88> Emn}E߽~՝B;wyx7*v:ݑ-\cSk{KgOd~#sJ|]cUWUK+*޺>- ܪå3'KKo](?|HXܵkצ>CUUڵkTiѬPx  SRRN:Eu6 G-7ߌxh ]{':޹ݧkR|ln^gM[Wr-_Lee)~p#Gl]cgg % ؄oJ|lcnjٱcGS _͞=.^ -D":tU&N4/;v,Y˩dmm::TQ>UKGOf`9ZJHg?uaԧW ɓl6,-˗\3Y uuxzzP Rk-݌36nܸeufK+*G RB ùvAZ.@  NІ 4}TgiCPx={7.&8LJO˖.t"á:?X,V޽CCCr9YZ(++S!4mܹ"(88,m >={5tq9Չ }œaaa ,+}hYrrr>}JuJ dffd2!'O>uT\\Y nuOуx+}p}WΝܿOg}:[9;;R2,== mK߾}}||6lPYYIu6G1{WƍmOc?zPZQAu.P\uO:H_7::TxD"D|>d B93gΔH$:H#Ϗ߫{?,Kɢ:|*4&,,ƍnnnT~~~W^:HKd2QxOc~(<\߿?=-mWϟ `[:|'7-_+xw}P 0>}rDGѣߦMb1YZ9|޸\e22ۧRWlք7<7.lr2m8>3{VPxawww|hD(<Ќ3jkkCuVIuP5nܸqƉD3g:<m]w}ugȥ:c[WS]q+óS-,?>((ɉh544cǎTgiqAAAX,Р: @=gΜKzyyQբ.Rll_cW7o?k{G:7'EߌY,*⛙ 4hP^TTTNwYv#G Ҳ9rӦM...Tgh֯_o>MMMN(<hrssCCCCCC]^!hjiٵk L|YO#?}t?ìT:10pP@@L&9rF:K3to&00 mD"8qE:{nYiCvn.n;YPsU^Z2'ϟ&<.e2~~]|}}Єw#G`bFΝkaa1k,]111 . - zUR\.ճwqsqsigneJuҖH.fez"ĸiBB!ӳg.]թN Lrrrƍj*///,۶m{͛Цmٲ%""b޽TgimPx,::QQ\`2斖ֶ[{s+NM}uUUvFZV059Q*1uR oQ̌YpʪUҲݻhTghRI,,,V\IuGXEE˗/_xLF450曛-f| c_WPs;M"./-HLLH/Ut011upppttprrwrr24463@qUVQ={#Gp[?wBbۋ׮] C-&QSSswwwwwoNII B055U(&?)Hсdr ƺZ::Z:ںzZ::Z]JJJKJ/JDEEyyyEy9JEg6#X ,v$,--utty{{^reرTgiAF (<СCm־}{P~򺺺W^k׎t1x<###///+++???333???33+7//?/o .GM]MC44X,6VeP+UHqTZ!W˫Ҋ J*-+).+)6xFFF<X 9x˗=db o 9r$A:T:a„BB\.WQQ3f̈#>:D")--(.-J%iBJ:&ϯ 0p8z (6UUU{2p'NDFFPB@˫?!ɢPx_܇\nǎPxԐս{NЦoڴݻ4YL.'$$TUUX, }TV" ***// -@ ̬:@۵hѢBV)&$$P@(ŋ҂ڌ ]vvvrFKEE%&&#(<}|L&:KKUUUB!Aڮ3f,[f3Fjjj=zDIG4/--}AZ aff#jݻʊ`4% KKK)I аSNaaaTiAAJJ ):##͛7hˮgϞQ쳆#P,3***SN]|9ͮN?y`/2yzzrK.Q***ZN-Ͼ}lllG2,22P+2h_|,-@ Rr7mԿBFˣ:gIuhmȑ{uޝ, TgΚ5uƍRD,⒒D"HKJJr⨲7Gp8l6[bhjj7|o``|PxJ׹s簰0)XZZ BSQ$===;;;+++###''(?@T$THI&I$C4855u 5u uMM#IRieZZfff<㙙FI(< XhQff&ϧ: ˗/NԤ%'''''zUrrjjjVfVYY*DKWOE[WO[WO[W_[GW[OQckh*1U]]IZYQ"JDEEe%%Es+U\Ϸ+1$,,lҤITg@ r\.hTgh%d2YRRRllgb^LLOKd-mgaթG?1ׄghbj530lt:]S[GS[jj rs rr2RNJO"khX[۸8;SSfA(F߿ӧUUUPL TVV䴄BTmmm\\>{P]UEg0~[xm=~4Uc1ϬQ{]]]^vfV03MpUQa!DOOknn;wdz9b&*--1b?OuUVV~YR|lʫD6۫W^zuЁN7ѩQxMӧۻw%Y(|rdPϟ? Ągɯ_OwZTdF|q3ADD_+}K@S~ԩSBCݹsThYΟ?;4:׫M;}jjc? yar!zꥬ $@:}cN8bB_~%$$Lv…={^vTڽ[ߞ}tt:&'ݹ~%41>VGGw̘&LpqqâPYYو#f͚էOP)##oݱc-Yo߾}u6૑=pԩVdg=̱ޓ'M6lڧFWn8tFux<% @AYYY:r싱|ӟ{ EQs253ea,6}… E"'#hZ _:t9 mzWAA;w~ʭ]{8jL=C.չ4;gy74~;mV\YRRQ`5h>RT*VVVVWWK$Xܨ[YYYmmMOزX,555 &Iӵy Td啕bsRG5zr8pxf6a„Ϙ1 TڰaCQQѺu|O~iGo7[TVHBO9kKMu+O`0>@G(---..DD,⒒D"HKKKD,)-+U/..d Iuu5Ui4!D[GFiiiikhhhhkkiiikkkkjj*^hhh}>JMMM^^^vvvQQ"HT$*)2Yl-m-uuu}=}}}=Or ")Ν >qͦ: eΜ9s'OR9#GÏu) 2)+)޵aU#>>vtrrCPx_PP__]T$Er4TYl6GM]CS⨩ih*^k0L:SE横UKEp**5uJ+k2YD\[[[!.2BHyi !D\^V%J++$5RieD,VVVVH˫Ia5tuuuuuto*BՐH$,/ShZZ::ZZZښZꚚ,6GCSQc5u 5RieT*)/VV+*$RiD\!Ke2IyyjhF|>_ XZZ1L%4hbçMֿP&::z…Oѡ: @*//=fLXhQLHC }6b"[cFJ͛LMMKK./((ȗd &SO@KWW[GOSGW[N[GOѢۺ?,JEe%QyIIiXTZ,*-Js<)r|>Lg[D )))BP(L :z\SC#S}#c/\cS#c Ok< 5?СV&*,**.)}$NTp='3JJa2g/bH++wppu[y~uuU=xfi7nڴiO>ݶm{>bZTի̌Դl2=t:]ߐk`ohgg`g73h4QY!)-.*(.*,+.* K EU\V__KOSRRŋ/^BB`33[[M&fJݭ(LHLLUʨc0 Ցbgޱc-Y(4bĈ/ M%22_&u{pMxJsen][Go#.?~;Wqqq5RRR^B ߌgfkȵtv'LwQS7X աJ*-*NO--NO},՜ʊ B*ǷrtttrrlJ|"##?!-,M,,=Ҧ־M=fF\Fo򲳄I/S3R/]eʊ ήpJTqrr/^5kY(cii) NT^xѯ_[g5;Ԕ;M9(^WVT<|{B8_k;9N:yR[GgxGDu(.*/ }ʪ(<~ѷ9hᅓ}~~r#µur<1)TsvxԴ-ZaÆ7;%剉111qqqϟ?*5459}ojnɳZh9TTTynjq&J+ M jW#3{ݸR\Tٵo&khjBV3kEO؞?E9{A[Mg,^pI5og;} F7ϟ80ۉF筮:e}st]v[:!_;š}%d{?޸t=<ϨDJ<|\X{q555lΩk[[jj3SS?JLKN| "XuXcǎzwUrJhhիRSn|\<:vup3Tl*+$OGݻs?<1>F 4hЛnBqƤݻwSӧO?y<Y)//b_^o_;O_lgMupNUҿ+~~c ݼ|t HOI^vsфuvLSܺiP^'CL3L?ɣ[yٙ&Θ`YMM֣5_<@vN !3FN&khh4N>tt>yKDEFHڻ?yp뺸']=;?՚3R^{j&6?g%Ӈr/5څ(SWWw֭ȬL:namk6-+{7[f0X**[{bS1S˸/>{rieVw]|wfX׮];qdhXXQa)s^ƿQSMDN^vܾ+Vpvq:dȨQu 8ˉm+kiiIфB! 9rV4cr !r$6cחݽu}!DZS`g{7 (cllYαYv:733|4m_()/5yWBŮdE!(?{ &!$.&r[WӍ늼̃n-!qQCV̞x& xO뷽Jx͠#8|ohþo233|~](<hn nݺy۷E"1]9W,.4 k۾C!W/㞾}r5k֨v߳GϞ=X Vyz111G9vx~~sALމ\m)CFzރ[ۿj*ONG>|8˥:#(mXXX,d~_fի0`]&NKP(:wm=.VZ"ڽaE![߀Q cSbKK9j,޵aՈ^^v;zyvӳYº:wφ󏪲Xw%"-&<3C#}\=CN~հ(U\.v1it}cU*!N[G=[MȔ֨GM(555$$pBHN>þމNSZ!=8 "eW̞=ip`````Nڠ?c=u`gC|;x];CNy9#GĤn/{޼y300,7oޤ:f>ޏ+7\ 9{j=;]gǩCǯMܲjq}u3 ï}уVCSPTTUе᫗'"/;ҲQ;>4r#G2.[&prЙ /Wl+`(* ӽs?:qၣ9>: @S)//駟oމXn#'LGN`k׭hbGdzgR >E``P(LHH:ryjj*A{w<͋InywU_u!|ϲQwor6 dcf2UJȳuZZYYx`#B9l\:/59ၥ%&ʦ.XްBrꪪKNrͼ56wtLVSxdז~nVϟkiIEܬ޽{vxUUU߼y˫WI.?X?p([M\Y9Z9Cû'Lv?i[CVdKxqY]v58.]}ǏkjjRM6yʔ)TPڽp O#o_ƦN:Ngnh9+%rBׄ W/w_uˑ/7-_年4^'u򅭫"0c.\i0PzJƥ>VLAdX9L[ûkÄ3F..*;uk !FS-;tCF?ظt :s9'T.s¹ /;7+DoK~h GҥKsMII 1v.JϚ}sGk¼ܓwX_fr=B[MmFOnCWlݫx  dU)f2Q};_~fs8t:B"hCMI冷ћES-ʮ;mCIQŋ~UU /*7/oѺ]zSʘ!\=jjw_uqܱf+qph:Rtƍ:t(Yƍ֯_Oue;zkn>|Eѣ*'3]KGWW@ђgaDTQS72 UZ\TZ\lbfyjkɉUR{LMQSh3[:RqO4c>Dg8~XW:R&r \^x}ostuWk|h^~= nfiS-Ma]\kk"#nuЮ x= ~kz)D=z~9k= 8~_fRۖO޹+r~\MTI IDATu/;lԿkAa0}9p;W^}?<槙Z{ ;$TYöp{i/?N}mmm%Mf_paȐ!48J thذaTIII\:zغ~VheVd{9c6Z<ťqq&JKKuuuL.^?`kv65:Q e3_%o5g(А߶%ߺ_\LwOع}ݻw`#h"iU݇k{dE޽=1Ǐh41waM}OHNX!HXZ@EqԭEjnvmUkuԶ֪UmREJ$$dA #-/ںø?sq9wB=Ҟ|tA\A_ʸL~)-A|bq#gĒ@ /=u߹kT'' .96Yms]([Ϻ:rܘǕ&Cfm~ݮCT ^I << ENVʹ?S-ұs^}E|VwBUw1P|n&O~wko!g2-_wyN<޽LZӻn׮]vnСÀ cټrW^/!%aS}e{d \ن{}+W,P_z?:u_&;KJ(A fێ;{qg/vtpi5Zrdώnqq}P<x\jǟ~zϹ<YGӻꗚtfR$.2ϟ mIDN}L{>4:#B^7A!"BEO}}[ڴj_wͫ]\]sԷ“ fǁW:q$?8ux?By~.X`cAfE]VJyq{,6gwjs@+%*$8[_f/X>G;,fsݝ @&eDwȑ#FP(47nQ( &KK,r?jŒ#:9䔗a͑_ <8t|"+55A_`YC~k\|1[vwo4i4zs#_eeg\Zl""+$.RsݛJGr3#::t) At[?T ..(#yQ*, 7NK\EwcayEաSSNq\@+eh Y,Ԕ6-DbǟvElhWλ7KJJbN p<\U2doܸѱcG4Tza͆0в1/b̘1K.75pH< WVMmprr7wo(<.F,oT]\\SΟl6)s懴٬7\bq]EOqJ ]w/@x#zö[Q6uצ)Nw7qPV\|61"s &kN{o?3^yYw#L<'k܀/Uvy]ԤpxիWZ)%iZ zǞ\8yqecw FՖҒRyj \]]}P(~رV<.,,{\+ɾ%\{~qɵYs'sZooW+WOGK*Z-EnvSXAL;&wP(]nnm.]3>~w8B5pȸonl&F;>uu]zٵiLӵ|G,7k͛75v6ph6^߸z!nnADvOKp_3{P/5:f޾cU:dzF/!Bn~^BOn=5,Acbyݷ7wquŲ{uXRqJoalqx!KM5+d1r@bCov9q^xӥ_O%7[Ӽ?YltY#ʖrψǩ=z+swu 6,\pȐ!l6իk֬y뭷 6~?x˖-gΜQ(ٓddi<47// M",]4_طoE_2g6ݏd_5>޳e7o޼tk,ZL<x\T*uѢSL5 cndy{G9AQz߾Pf]Чp| Noٺ#p̏~0iWtwﴔ l\סSlsz߶ovF?7,6 Ua~ݍh% a^I:Ų⋱p44*j]]]w>`;n koAbȦy~p3^ٞЗ8zR~YdSF֝dZJL&2,))_l4- ((((((888$$յ>^Dҿcǎ5BHRrvvNHHHHH(..>p{~1 %K]zmfꛩ)ϝxd^=?|ذU_.ׯ_}mxMfǁdǹޱS״ Q];tԕ =_{}eB߮$-'[^·ARwqIg=vl=xDLFܩ)ĦBo߾_~qqq,|X=[5\ٞ1O\V/9mڴz<_/EgZ L&ڹsFR~~~!!!C^xEGGHSNdӧO>}ziiQ]{<u*dϝ|KMFX7pkW۷۱QMMȑNq򃥫IvFeʊ"1F7V̗ zo__ɩ!RS]}7n8'}z}$dksՙ3Ɏٳgju^#w6mڮ{{Kg5ڶ_o]'ט ݻwܑ6m6222222$$ĩajI}`4ŋ:t͍,Mj~zbbS.>"/ÓHYR,+.*VeBL oHDvjB/lac^ &;t'zx׶{w{z~Ez";.++Ju'N|ՅFႾ1N3uۿfOvs___=ݞ}ʕ˗/߹snK.]ŅnU*իtΝ;1ZJT~Wdh jjjryvvvvvvVVVVvL&+,(*;`dghu,ƍ 3-%hT55גΟ:~b2,mBcFDD ~,^8))yQ(gg皚 Z`zթD**߿}=;j&L;wn`` ١Rxbrr[tz\\\޽laZǍ?a4_~y111dgh]4Ͳen޼)oOO#V=z'OTm?\l="Xer33^:vI&SL/% OHH %;@=۶m۞={բL…1X~C_8|TQE|>{SΟp5k[,ZҥKΝ|2իWNZpi֭;vR޻{W^~#GINN/fb!F:t_TGԩSyΝ ׈G ]hg3l"JKpk)Iuw>3dԧ|B!ɮ^o{:;;;99M0ae 6o޼}ipha#-7b|x\vfjʉ{`xw^}uԨQgű)ӧO>}:??_(8p-URR2a„ŋƒ͝;W |dhjWP(YTjLL̲eȎ,x@ǩS7_P(!":G72oݸ~#m(J]t)Aƍ~|JrѢE jntrr6mZBB/HVXXx…˗/\Vi216C#:@ IDATn/*Pee˸yz%E**ֶKΝ:u֭[dddkXZ0^TT(d2\R B H$>>>, !C8&8899lI&ŏeT]]xǎ{ҳsqxlVkvfFgo&[-C6,22tMnvڱc.^H{/~$%%-^xdgiXNo9ªcM͙3gkRui&DBFf#&bܾ}˗/_NI|NjurvJCJCä!amR*K%Ź޻!˹g4|tܹs.]İl<ǯD"&o?~|qq1A mΘ1#,,I\~ѣIKj1tع/_,>G(84Ol6e$KKK- Fwt3<==BzJjZZZ]Nɔ%>bǹBV+yYwYjPT4S蘘(CvV`0;vСCjW^cƌH$dzb~bY|9AҥK?3X2lrx]wHѧ@TRRRPP/ |\^TOt77wO/C%{{y=8<>.=;lzV*2H[^)/UhKe%=|ž~~~b_$5rUUUٵ#JURRbZtzPPP@///'''6w獵߹s7##H?G =BEngd5e겒be@W Ņ|A'900(""<,,,<<<,,m۶nnndo,wޝ7nܸ`C= O", hΝ;ВYȑ# ߉D"Ѷm ֬xкX,⒒G]PYRZZR\Q\gx,9:Inn :d,6ɤ1,6Ŧ6A2*MFhWLF^o:NWT+4]EVjOwc0BH$Ÿ-dͭd2ZMJ0- F'd<,vK%tv 9<2x@*NTh5:FWk5򲲒"uiIyiqYJ]^fX;{H$@D"J};o޶mGKvb'LлwI&]ti…d0dghf̙3 FEEc4 /[oCGMMMIIFQՎ4MyZє˵d4F1,6b9991N477WFw\]i477W7əfseeMMudZLf3nUGd2 FP(.b/pw|?;{zz2XZFW1 (9fDT*UQQR,...,,t̥+**V*.Gtcsy4: `LNg0Y &ɧUUUUhWJdt.@CP|[,u)E"P(l6hDv;v{nTTĉh;v8|/҂M0a;L}gΜٴiܲeˁXhQ\\њ1 Vk4F^p!;KKb'fv].+ J)JX[3rt|||P3hoܸqҤIÇ=ztӼ b, E*呝eڸqjE!xl6BP(#\^XXhX(@@@llcBٳgLL̞={ߟ8y}R(ooǏO:, E*={-PJJʉ'>3. a5fv4RBRI$X_DRZZ?&&&o';صk׾}vJvq{_~$; @ˡ'OeBI3uGZ1r>>**,-Zh$jv4@ jFD\|y͚5fٳ'avoѹs3fl޼ʕ+6l ;@K`\a:Nv n/**rtT*Uݚ@ H$H$,׹s[nٲeҥ:u3gH 2x]v4 G*߿b8;V>3ILLLIIYjZG UݚcR5#P3fի_uuu;ӣGbTTT3fΜ9#+C͝6mڦMZZrtʔ) >}:YZ>fS( v4RYSSCPBaݎjFbhիW'%% ãO!H?o7B #;@s믿~h5>Ir\PT*GHTF D"G\ f͚xⰰ>c||֭['O`0\I*撝x ???FXj ͦP( c$ - B ˥I$Ԍ+V̞={ z.+̜9^h5Çoݺ ,Mby7LW_}?2# Muuu:jF"dm…۷oꫯrrrONR\L&W^Gmaţ@XRRMvnΝ*jÆ h#h$f(#\^RRbZT_@@@Ϟ=% yiP('}q5G ogee4)T*P(yyy(]v͜9S(Rkаfd"BO+**l6};l?8hng...:;;%*++srrj;F2LVX(1_,;;㗥F2_'r8''O|>Nwssrt:ĠAݹsgѢEgɒ% W 1cFhh@'Ÿq 2f4]fy̙˖-ø#xnj:l6kZl4 lvtfYӛL*sF!\e$B4b88;;, X,͕ntáhl6jL&fr\p\+/ q,VfD<==Q3(///...))ԡj5Zh4jlU*+Mfᒰl:bL/<_P( @Ӷm/X`֬Y ,СCC^ظqiZ?R4//M?VWX0U(+++Q*tZVt:B`2]rN &ŕFn. əR(WW CP\\it77 lJuvqqc0 `T ^ѠlJ `X,J?ZVd4a2-f:d6UUUj^oZuB9lr|rp@ݡ#͝Z]1`0AӃjxyyZBp)))Q*%%EҒjnta9Lf8<&dYl+htWt77&긐>)nU*l6W}\i2F^gLQ7] YV,K(ŎrCGTUUX"99w4hPd23fCe˖-ɛ6m";@u֭{8p YZ;= RxPVVrR+/`rl6&p9\eq8,68\6p]q#6U0t]^Wa:^gUFΨz]EF]i2}:w@ pwwD^^^Mpn/**rtT*UݚJ$$ht555wʒ2r#G`F *++MpBGMnw,_U\\\XXTE*Ʊ+M x|w <\>\dZjBiZMFU Bk:ZՔ ڧxxxzy{|D>>BPh#b??F%խ9:F*Q3xcjF  [neddܻw/333#L{x E~^>޾~B_?oG'{D͈00XYPT_TP(76&MXX6m`ZtرkǿTj}N=wެY֭[V%L&2eʆ |gϞݼy3%; xdh4(JJh;8E^B7{z;>rx|&jڲ?uZuiIyIQIR9v>"QP|||D" twm6BP()JGB e$HX,T֠ձW^MzH"fi' i#HHCü|D.dmZZe\eeʲ3 9w*ggИ(@@vXh$iii/n۶  F=y̙~=DeС~߾}дΟ?޼y{&; Gh4ʖdEE*Wy|S%~^Bw/!EfӖ KʂbeaIHYTXP^ZlZ `s8:b1B{LV\\./,,X, E(ef555׮]tRRRRrrJ~ _P!"Eb*f<ʼY IDATȹ\\\ڵ ֵk׸8TJvLhXP(\lY=N+9~w}{ԩS;wKHp6GvƖI/Ϻs;/ݹylu׫W{% Jr޼yA,_\$1+++G>^H/B/[ MȪURRR6mpC>UUU;Vȸ};1LjdJCD~"/Tݕeg*eE Z]^n46,̱QǎQ9Vf]xѣo\n":DDun%2쀭jfݺz95쵔$MyC}b1>k4?<((^f͚7on޼esС_~ MEJJʧ~gƒGϤƍWҮ_q@uri+ nԦ44OBvXhՊ̜;̼{w3*+AA##bbbbbb|>Ij={{?~<_`9zvѻs}NY7.?si>QF`X`Avv… ӦM[zuxxt/_ߏ.At)S|dgX,)/߾uZ44,044LJl6U"YVfNfFV-Enn ܩSLLLNX,Icў={W\\&C:x]h''g1*R/|tRѣ_5j?YUUU-Yƍ|I0y뭷bG}"]iiرcWZIv}7nd2dg?3iii&>]Q-Bq#ʹiwni˨Tj6az۷o޽47lذmоC yOZ?K;AcYW/O= %noذ~3gΠAPfyǏ1bD}#ќ9sgϞMv2Sw!; <G;yF-\lVZŴ ד/fevmĈF!Np?ͶgϞ%K޹>K¸74Օ\PʊȞeÆlpCSڶmΝ;g͚~۴-[P(FueggY dZ`\.߰a5M(ALcǎݻرcfss]ݵ$M kPԥ%i&^Hû#+/)Nzu}_ڥWiHC#5oө6SΟo8Nu9rΜ9:t ;"v}|apX۟~ޮCԳ]Xc{wmXPsǎhۻwƍ_{q=N:jժ]vxL&/^ܵkW46>w\Zw߹Gꔖ.[lT*uPL m8.6WUW\q7Fs=FDYqў=vzŻ|GbqquQOo O;8غv'5t77*d4P(CXJWh'~s藟e ZhQOx:%%%'L8so}0a;T'z9l b;[Jw{^=4f6_px\W;d=Ѻʔlצ~ڛn_ws/xywpwaMOB  CPAqS NU*ֽ޺^*VDA a$GZ s\ߜp=σvoZ٭w3dhwX3/Otr5_;td_:iҤ-[5g hW޾};xſlmiƖkԪisu?[2:&m2dJݹsguui_>z^vfffFv 斛1cƠCo߾͛7c=?sUԛ?Iod 346~?j$55fV߻^3R7=}}h:U9zfַ\JL^<\oBP̬:0Y(,_byQQw}ЈbAMiɋMݾh \Q&[7zةG_ɾ"xju٣ΰ˅96vu O:}`A?: ag;6h{phj;vp8wVUUԌhxͣƍcƌQhu$Z˗/ߺukƍl6,eT4[nM0a1O]|qK ^\pKo^>eg^>}JWQO$+RRX >:2}i-m:]7C݌ضfͫ߼ ( 2SB/FEȷyCbh՜Rֽu~T=={6{'L,\z/ݼlsKz&8:fo\wd܉Ó߾qZiϡ޻b} ?idHk;rAɽ7,{-yY3}.5uEG;!WM|99>ëHL3K:~F;޼dC7~|:G):"B"(h|^8|˿bks ,v?amW$t̫{{L&+%WR|C|UG[Wxo oX>og@n}v:DBvh n߾-0 -jnI]TRV|0+-E? }od"(ݾz}# T߲L '}hMJaIOM5jT@@gF8p`HHH]HAA8-- ٳK.ڂ:@wz>R/wo\}eۥ珝z[]TUeJ> {Y7(Uӣ M-:}d s͕ ayDKr%;=[J}1wYiIh䄘/eM[Wnh) q2}U,;uNxGkR\N:5M6r7ntp' "##vڤ񚔙 =HMM=yO?dddDvht<6_Nף@EEgTUV$vrŵT*yI\K{W &íOdZ_GO,.ȿvĺu:{ɋ={&ŽI|}=?qpd/J lt]л }#⧞SEKpӒZK?se2isu ((( ;@ ;E}Rz{?'~isn]ˬ#/;R($BNow5uzuUT*- rsswP(sٳի깗õkך4[S333KMM%;@Ӫ !; 4 :@geejR/tFמ_((q ̭:ݸgYiIBofc6woYf>>>fff</,,lΝ˖-۰aÑ#GBBB^z?'|J]tիBgϞ7ollMܜ mX||3gMKvh0@7eG3'~سer8 kN;8'FǾ=ZZAܾzpd5Iz]A'nsڹKOҩ#;[n[Wo_)[^<K|Sj}C fJ^8yɽИ/<TUsS66J:>7nϞZ;BX@pgpiQF}?pQ8{G]E>+޲:I* 5֭dg6{'Fv8c kRrvsugޘ?}컺t8^|T|̫WXT[[w JrCepA]>;̛8{aî7++-r;vؿ'.Yd۶mgΜu˗;޽{?sɒ%F6lٳϞ=Ӽi~z&b Pi4ڠABBBkul DNNNdgSVV}=`mCv/b;v#vփ &mB/E= ߸{#O^m5sARy _vWttq :}㻷 r 7mR}x>o`_4N~% u篿W}2f̺5퐰\P\oVr2*\=}#BDyٙL--|$?'QRVS[[CPhoc'{{qp :BX+J- oYszyK.ښEݷc~y֩)f/NJUy&u+]~@UMgAUeEQ~))7;aa={dyRzzzFFFffH$"B[[ZS<|yY[[]VKX|'[۳gO||]bbb-ZxAHX H$֭325u.Z4q2U*JL&u>Lt@nV_\:l\.ى J'L޸DwdǁG*\˕?9sfԨQ{pLPRRB˕W XYY)7WlhѢϟ?[>z_=uT+< ٷoիWڒ3fXXXY,֮]Kv@RĄ=wKaB Z"*zV ߼|qxG7'g7Z=ZPQ>y+4 2rĈ̌_WI%.TW6] 7{Ο??bĈF?>Ba0FFF}5j=,((xիWϝ; yo$ / f;tpaֹsli``pM i T[[<`AvFM6azlڣ7o,mG=!١ʼn?%S(T#S>z";TU]Uv򵳧b^pqq]|СC(fq3Yu=qd2‰7899:uܜo߾KOOJvvvڤj_s/.t7n>}Fk}KVUU 6l͚5߲b @//}!; |@yÇwucGπ\IuUՓ{ ~rX,=W^dv'%%e$ߗ/_ii2Yd'rǼ:uC .ܰaC Y鬲2!!!666:::..N$;888::lzx ?MQQĉ׬Y֜A&NHvF  OnkkrJBwbXʵ׫l{{zn Z a; ~ L,=z„ h~I$}_jܴ9cGEMP|2Rl|fp7[\RSSׯ_ʼnb##nݺu޾TJ:2,000<<|۶m:tf+V bƍѬYFZ ~{C444 G pBkmzӣ:'H߼Ƀ絵5=ƌc`VaRTTTl߾=0p+MIiXa}ʮ͋z ݴi7ىK,GDDDDD$''+))uڵ[ndkebҥKwd2?͓'O֬YsI]]fN8qG[]vdgF#UUUݸq㯿snrR٭mgM*#%)"~ |{Ç';Ǖ8xgtՇB Sq,%1޵G=J+x/^DFF|.fgg@vA ̙3b**~lR׷_~SNmx7nz*bA&O޵k%K >'''ݻ s'=-MUM}NζΝtzdh|U1^Eƽ{YTdj׷o߾vvv>7bҥKw d`l{Ā!#ͭ: IM{.= !J'DvF#>}T֭[7ӵt?ʕ+?Zkxԩk׮>}F5o5uԽ{ZZZmڴ)66)F233ݻOEG8:utpupslJI%W/߾~ H;t6U{ϝ;caݩ׈CF @*z84..Ǎ4i";Z qll,FsrrӧO=ȎrEFFX?~M4iŊ͟[HҡCΝ;wРAdgJ<ذa.]G_C"GFFFFFx񢦦FCijimjamfimSg5u:I'ҒӒӒғ3r$IN:wёNO/Aϟ?yTZj6ӣW?Ϯ==L%y~?"~=~LJfYO>|022RAA{}qqq[uҥXgW^-lٳfΜIvQZZ:cƌ޽{ϝ;,ИPxJJJ"##߼y6.ZF3213djL ;,/55쌴䄴ķi T*޾svvv]t ;,@3H$߿qƍ7cc());tsګcv4";AMTD$ƫwC "SB\P&ˊ y%żB^IqiqQ}F--i]c63336244ʕ+cƌիW{k%V\o>U78eʔ=z̜9x w={d2ق bqPPF#;4;"D |@PVV&nD xe|>_$e}:*/HP(JJ*A54 E!CB***hRF`YePR[+ JP"QUY!FDJJJL&SSC&wDCCfmN~~Y]aa_]aaann^~A~QaQYU44 M2PRRQVU34_D& |ZT]-"QuuUF$W[ e~Y?zbjr9y'6yo6chhHMhN2,**ŋ/^5j2ٹOyyٳuuuqsΝ9sFIjqƞ={g*h].]tС={ ^bqEEP(D|>J DJH?EDYYL&*+*2H$$B?ART ?G2 NA)h4 At:]QQF tTQQQUUPVVf0jjjZZZJJJ_wx2;|--UWWWVU|QnꪺJbhh(PmMb05**tuu`0յd2ߴ6/??ҥK7nܠRG!;T3III7oȑ#N*Ǐ_hQV?c 9~~~?Ä M GǻrJppH$7n\;Y;w\fMϞ=#6l(--ݶmO$ 2dժUdg$T:o< vءe;9--ɓ'ӦM{I<7`+u\wLLLzz:@YYYOO/-- sٴK=@@<|SN͛7/<<|ܸq;v())!;W֭['ppp044 !;WZԓ'ON<Ȉ,PxNh:thƌO>:u'T֬YS\\}v (۷uHYjj*)>LJ,LPxЮ)))1Bޤ$88vD"!;Wr .sNhh(A ';W}UWW#N>d Bvh&(<ˏN>s!__۷od2s5={hhhd/SSSLIvǟ9sfڴidg#رc:dggx℄C5iӦ]V$y{{%''^ 4"( ۛ,ЬPxY|#GL9sVZUTTDvƤbŊٙ޸qPBRMLLPx-͉'x<… Z{###UV^:99y֬Y7olK+,X 888<< &;T_111.\5k6Y>C 5k۷oNhzuVڻw^Px-JUUU@@@Ϟ= Dv  s}}}wڥ`WUUqiii޽dǩ333>@qȁ#:ܹsΜ9̙3NTTTVZDv/333#M%xEpp&Y(<zP(ާNrrrZhee%١ԩSo޼*iii1T@{' mѧOiPx @ϟ~/_Θ1#**DjȑNNNB0,,URR&; G`^lَ;N(ҥK sq G@7o.X@CC,@&\jՒ%K߿Ovb~Tz|YffT*%;S ((hРAdg>?ӧOjggg77'O D"Qnn.Aڽ{7F={6A|(<of7lذhѢgΝ;,_\QQ1((H&sLMM) V[Rܿ޽{/VWW'; Gw^T:k֬0| Ç_t,#h~vҥ YE@4CCà *5ؤIh4ڑ#Grrr9fffdvgt:}ƌdGhh4-[^|9}85  Jd$333t|xMMMbbIfffyyydpϞ=#G%; 4@R^^^[[w]4* ɤP(򯚚mT.nBP,UWWWUU DR쇳Ԕ IDAThjj*++tuuu%%Mٺuɓ'޾};ww[2ssskkkTzĉnݺ#d2YFF5YdԩS- E&ZҒRP(|<OMy_&;^.(H$Bn7) M*!/Ebt:kii!555R@&y<+++++Ee2q#1ZJJJjjt:]||H #A7իW^nܸgccc @vIҡCΙ3#; }׮]۳gOPP%YeAʫJKKKJJKJJJy<^@.*** :CCEUMYUUMNhjtW5:]AU5u:8LU&+ Qu\WW B(y:JEUbiYlfs8r9N  $YYYYYYEEEyyyEEnK:]N3t 5:CPRRkhUJJ*jUWWՈBF,X$VW+++B_Q.VWWWɏʧC!Z(G_>==}ѢEd2H4nܸ!C\xwرd'??Ν;Ϛ5 Μ9gdgGKeeezzzffffffnnn~~vxnnnaaH$o@Xښ,d5YlM&Kd4,m&dņ@5R~Y)WJeeR>T+STG@3/@ HJJJJJJIIJOOή+Ф3:\=-hstY:,eis,6WR\\_ZTXRTXR_Z\T\WVR\\_\PPS#&BpFVVVd YMM͡C._5gΜ*;n:v튊#I(&&&k322222333KJs :,ap[[bkc%ϫJ yŅ%E%eyf*&&&&Ʀ&&R$SSSKKK]]]r@H$8yQbbRBBBaaA \}g3r 7LVRXP]SSS]+)&FYZYZ[YYZZZYYu3at}988$;礦Μ9~;zD"ٹs'J%;s3g\p Ж]x{177'; D(<hBaBBBlll\\\jjjJjjJJ MPDDؔjstMuzX r2r3s2 K 22RA(**u`nccckkkS""""##&%&*h&fֺF&ƦVfLöh55ܬ Lаqvvvvvҥ:y9[N,_Ғ83o<]]q͞={#G$;e˖;wNKK,6Ϟ={ĉ&L ; P(<heRijjjtttLLLLLLttLzzZMM J504417634574174572QRV&;2K*egdedfeDA88wFUUEuuuddgϞ={4 X:;Y٘[uJU 1 ?-)>%>.5mZ۴*%%%[ή....VVV׆]6##cʕݺu#;'ݺuk+WΝ;wA}}}C3ɉ,Ν;WAAaǎXd >G-]eeeDDīWbbb^~WYQ@YXuhkѱYCSscS41jd2Ya^NvFZvzjJB\ؔXayyvv...Xq޹sٳgO>~F٩m:wbk]J$9Iq11Fb2\\\\]]zFvLhdd޽'N%;ljDO0afb2-$nƍ!;AgΜ9}}- ZTѣGR Zwvu`fQWߐ?;neiI o^'y$H8nk3X JKKBCCoMKKUVVqźC'' "7+#:iL䳘iI T*q ݻ mې˗/߿c-ݻwgώ?0o޼xӧ%JJVv:9888/+}eܫq/߾~*8:vqճ{F/KIIpOֈV{vvFgh>'7+#"A/>>|޻ŋ7n455]vm ̜6mZ@@o޼y!Ro߾{ڔZ???:u Z )---44vh蝰;%%\=}G6Ν,m:+*Ŀ ;#-U/c"%]]] 8`]*?޾}{.D~g[nY:Ad؈"G>~HR8jСCY,$%%^ZUUuÆ dy… Y,ʕ+E"ь3ׯ_OvݼysW^Rdgĉ.]:p/B@s˗CnHKMUӻӣJ"?~//;KSٯ_#{{{kiiǏ?q۷qlNA^}حl3en޻=Lگ_i~6l"+Y&??:u";u?CKK+VXnٹ ̙s1CCC@?9sx{{Z4[n]|98Wjek߳gw>6 4Aѽ'nG?ʤ{9rذadGhR4,,W]]PoԆ aݾr:SN6mZ_&00ÇK,ׯqUSS3~ѣG; M6>|XUUhH$2dȪUmH$5kކ  ܃wUQuS7^^zF&d炶BX^胿=ZUY:sƌcǶ[MA,=z40pkjjcc'{2?'{AWٳ'١չs.]_0tCq'yѝ["<.(hىa=zynݺUVV&;AĒ%KtG&͟?v׮]T*`'O ;q19sؠAPxИ***oFcÚ:?f! {%P\UkuZWb GjEꪭ{d2 $!@ $?NjJB~^ᜓsG|Aè4kNqJcgmC~h d]뢴+'|y0-U:p7Iw<պCg+kT*գ[7N^z]&((ETGvvvxx6j̴9vN:!XxUS-]:{lcccCW!))iѢE...˗/_֭[W>v옍 A7law]|yLL9غu;w[~ܠA@7j~eQpĄiƆ[XDݚ*JJ>vc^kvNK=s9AySvt=E+ԆkϬ]8SQRbbjj`J|~gWL}{Cj2~?}{ʄg'Mo /1c5vmBu8rCZciO޿iѣG ]|w-\NYN7pZNT1bРAȎ;^z&i²~m۶ מ+n>?XR?kvz5Ӽسͣ)Gt֨}4 lӢM[ /;kʙa:{U=9o\ZXXݻww=|lffTL&۰aC.]:j@{cdj}-[t>ך+ˣI53 3I7eU >mC@6XjZRFNnfaiقNB'ߨD"4,Ku{Νƍ3tQ᧟~ޱc-_Q75VK˫1Κu߾"jY8::n޼ySN]f۷ӧ>}ڶm[ (ɓ/_ޫW-[*###a۹sJ6m z #IJJKwvfUϝx|4GZ_z5őN.g۽5ioѫI&ҩ66+iԒ Rm/?I ۴_zilY񋛧w#~\Lv#?+~{`:lR/ԑVF EI}ѯ?r<}:|ի>%xz辌Ԕb;GڳE㻷%zwru3xėH.U]LeA$H~Tq{G^ݛr9韢Lܶn„ :@% QQQm۶ڵ?D[FGG/޸[Azz~Fu߯3'ϟ{{{| %t:}ݺuKdd5k USHHHll&xDDΝ۵kyݻw0///z߿ڵ˗h4C ǤRi}\<## h7.t[Y7./s!/ݿU $q|AnBe8s ? S{f]M|tÒyV-~)A"q޸t>S}rgvB>;k푪 w*n>3-YΘV?+bX7m׹jGwlnwo%[I{h؝k}b*(ϘswGVܶN$vHD"8-rSNqfzennnll3 =;OOO :ۀ#^.}d¨.ǎ)PիW{{{Ϟ=;99ـ7..N hL4I \xрUyzzuK*nٲW^+t<e˖EGv vʜBy|VaG"9<{xUA\ܫ3DjԟU>7ʜB1`㻷$|VJ=pEFF+WtO"ʿq|jb|7 ϟH433T*U`H{4i8>J7jO+U7/޽hv.'ǎ;ziptuUΙ,Zhڵ .\bEppkׯߩS?~ܾ?ĉWXѯ_@`0tzFFFHHgH$mݺ-[4t-P!xPM +k ]{˯ٛfRzJU7/U,/"JֶpvswtqӼsr,(.nio˕&-{x'N-PXRK5=vkљ-uh޲wa7/YsJZ T?dz*(AM[\9;x򄚭Fgdeemڴ C#doo_*D"X,M?UU^1/}V4kiT?sΑoٲe/ s[ܹspppttttt4DsIAxxx|7Rԉ#jrww',+aKU뎝ܽռEkتoS(Nn>CD^FN=RE2m SSOklzT!#+*'VQy|AR+ r=~Ζ wێC&jZ̓ lNfŷ3 IDAT^9Wj)ż [pf6'~M[T]vmPoM]`gȑ#'N) Djݺu˖-;/kl游TD>}:AAG}]tinn'L2yWGk ?~a33TSӦM^:uЅ|X^_=wJs BBxޓcG6rRY=wt-*SQB!K~6u6ngUVZn\@{\ܼ|]9R"מw*7#W=Ft>zfear♒b[o^{tf.UX^>{ؾCϲkCܝry94$ؘ 9s={vŊu5^UkKRYvƕ=g:%Q^-[#=ޮ];+WT<ѷod2=C'F oyۻ<E~=}û.:CDc!_ht蔚Yd`g̹8<1o 'mİ~qe܃[&4eyȾ[lX:ZRnޣV ŷž|}v{N/8TSMeH6۞.Nxwt%?gهE{cddt𞇷n$<|i#ZXPYdE^y%?;՘zx]Ųǀl-.*͐,[ $v`@L&gĉǏ_n]=5yK sybZc^.:/;V?AdzLݻ+WJe?Z>v>T(999Z~z;;;+Tȑ# hʏi)2kM6JCPEAЙ6?ɥQ) /-#:9` Spp/mg>~q0vN_Ŝ<0b7zUzV]ԭ;v~"Ƃb"rJо6iݱKY̥krㆇsWl1A݊r;~ĵg=oզݷj3pDXYi{[3lq3kD._1LwDGyj2  Ʒ~cǎ۷4ήe..fL,++5DUhK_zjʕgϞjzǀ٣Z"TJ=ŋ\.WA"222o+I ~Dō qgbc/m^qF~vds C:mqÝn߾ I$.eii+V<<**W?-Z?|޼yWnժ~*Xt)DZd>'BR͚5t֭=C@7=1e%j̴ȯhح8@6./ɾ{ʂ՛I3ަl[['O^~2PO<|oYRتˁҧ*/?M~U\Vsss59$6! ӆ<==]]]?*JrgϞEEEaFZ=jԨ]7ҩŋرHh>|>xfzܹsFt #YdɁ<'sϾm̰$n}0'=LH;mݍKo޼k׮z@$ɼy!YI3 ]T~OZ5a„32259lJell"Rjyk[݀BX`ANNƍj{:H4rwҥҩ7o:tHoq۶m~~~R9}t2i&t#Zq[^p¢0EA%/]9w±}޶ivI?)RP?xӓJ\r] Q3nkݵ#NNN2f̘dׯ_}699L&4o}(22`Æ =ҥK*dG8p`XXXmנR 0u޽{gFN8qر;vh<EСCwIOOkٮC:kP@8_wq#?8qb- ]@\֭[L&ۛd^~tM?2+m,.ԑc/:881cƘ;V^^f߼y͛LJeggi닦#-??֬Yfffׯչ>}?߿յҩ3g:tvvvZVDDD```xx~/==}ʔ)Ǐ>ך}̚4idl.̘1~W'N8{'ޏݼysժUM4Ξ={ɳga.L&T>}vvv… Oy衩Y`;viݱ zDV(}r=ɴ f!Cwnaaatfz˗t:UVڵkժF3tuۋ/~篿?c5|rXaÆO%%%͘1cժUZ4bСC׬YS[AmS(NNN+V&kP<C222ݻѣNHP*v͂Z6 u@)I~:RU*ա}:jՊ.ЀrMƈfffr8>V) ~aaaw/",,#_r?B1}_lju$5UӸzWRRճG=zٳuS/^xI|||yyyfڶmۦM&MիW7nذa4ŋ/ΝgϞ.A-߾}~ 2|DPڵի{챵5t-!xPG=}Ç=z@KlҬ_3=}76*/dKILKIJOMJKIjE֭ۇo߾]vΆ@j5gl6;33fxy9y-[~ʼJ2..Njq\RY[oѪyV[Ҭk§d&xYҫIeet:㫯ѣGކ.P?ɓǏ B&پ}:l3Nڷo߬Yz]cǶm6<<g„ ,/kc"##̙SA?gΜ9sе@Ç@ 'ӛ§ɸi܌4N;NwoJI$gppP@@@PPP``A}Vl6xQNNNQQDbXNNNٵk^VVF"H$ĉ;uT>"EEEϞ=Ӥ>>~~~~~ަJKK+nV.1eee-YM6=FG/_zիWAXѬY^.^,&.,'}Sy,nF:7]Vf:7]6]VVJ hԢE ?~|޽.] T5R`uV{{o`ӦMo߾}͛7ns 33sg{'g;GG7{'g{'[GӖδ1j%*JJ$|AnOԒ-ed r5"-(?__MW]R(qqqo&.]qOd2yӦMUX=g޽{;*IQF >|Ĉ"BѿEuԩf:H&M0!006t-Ј xH✜>ANNNnn.¼\{umѵ7A֭{ݻ:}B>L 6?_'eEBR,-h*L6d jD6L6XZXP,MtPZ@ՅMHV jך"yX.s %d0L W{{{H#ryzz6f)P(ژD" P(@ y¢K.}1t]uׯ͛׽{3gvs9rɓ(.. ի׸qt;oEK.%HK,)w޲e˖/_jZqAj@/X}]PP J5_ JTZT*Je戬PT*+X\R()zR###ͺAk5D$nM722ӭ+_ CښF5f-ȉD"i2 :meQ-QD,KSZZ*KKK ebPZMC&+VdAffffVT*jijj`0LMM---T*C}tbfflܹbŊApXT:bĈiӦ?~:t͛񡮑H$Ǐ 3gkF#ƂiK3b2[yxx hА˗/߾}Ĥk׮_5 q.Ycǎ:v͚5YYY[nٲ1cƴkn:"M*&&~-11qϞ= е@@V|~VF<O&H$GGNJ#'''Č LvX.ۤI>}t޽1'j5k>|uVag̘tWlllttt5iE\.wر۶mN}ʕ+׮]ۢE CGZfG1Ζnj--- ]/ZNHHwi>}ZJ}Jr|!b0 IDAT>۶mt:]WN0! য়~ؤƍ 5kfHR 0`ԩ  H4a„/rڴi)Jp1#6T*ܴ#bbbbz׮];w@ hٲAڵkG" ]IҩS2̨(]/^ܿɓ'?PƍQQQsuuɌDDDPw,Zڵе@#@P(*flP(`@=T*ܹs…??wuUzzO?ԹsH XTT4lذ}~J5~f͚jJBڵkkcp#_~ 64oе@@RRRr+ƌAyyd4a#;;;Č@RRRΟ?{{!CE-[7duֽ}v׮]@h޽nnn:gϞ:u̙3:@0q>}L4е@i3F" cFd2@'/]tJիWÇ3LC'G9z۶m[RRRM}v__^PM={63gtV͛'*Gz"Hy<^6cncccbQ.\Q2duj~{m\\\j>`xxϬY>v_vhz$ f͚ݎ uAll۷lcZCVD"i2 kkkooo'''Č111ΝS(|͐!C ]T?і-[j8ڥKv}) 4M6m:w!C >|: +''gҤI}]XXk@j5ϯ1xɬÃJ^ϠT*]vQL֧O#F0 CUrrrLҶm p(\>bĈq 0c^ӣH9svX0,J5k֬ҭ[bV <tnѢŏ?o>//֭[d~]|999Yfh6l5jsMjD"pX0}5 #;effxvYfdJRRRMvA T*ON&7o~B/BQ JM]ruum]=-??ȑ#W\aXFܹ+ұӧoڴ̬\|9::ɓUtŻ~ƍ8PÐSE%%% XhQNt5&Ǐ?c777C<Ƣݻwl6ibFT1rrrBӥ޽;!!cǎHNکS"*..>|1c kJ1cڶm;}jOnݺ=ZcA}vǏvMiiѣv:iҤVZ١Cn޼yA] q .޽u#x}T b#G視ϟ?zNST :uj޽k>߮]^w^DΪRT*p8&fTVVF"CBB 䄘@=B"zѺuݻwϟ?sӧOb?l۶snffֽ{˗/<5 :w\llkV/AȨPΝD2t<=)--]V*ژbF ÇmۦT*LҹsgCS}jz|>?::B|9㣢lϞ=ׯ_?zY GTTP(\vm͇}&MYxk G'%%%eee2LRQPPR*^=,,,+266P(ffffff L&h4]} t b+#6- J6cb\\\LLL ]/@ݢY +~Ueﯢ377xXZVPAqqC.\о}ӧ3LCWTMdAAA?s5>c {{ߛ7z興~UwSN9sC>mٲݻ{} 1VkIRX,D.i^L&e2DR ˋEJ**t: fD6P(KFYQ(KKK:NP(5JP(T*ښ`0 :N& ⴴ4mƈ rm̨{1P@ Ed2L*jBL&HBLV(+J*JlJ9ccc*ؘjEդ6t++ښFQT&d2s U}yIll%K:5\.|P( yyy'"H"H˵222Z-Lͬh& K)jenA115Y PdܜllLH$*͚ K++#?QPRJKKKr\&SղB)AE*Uy\^V(*BiYYiqQQTQ(*JJ#[h ?c2@pttupp->\.OOOƌ233E"Afff,KHqhxAnnnNN@ "(?_/|E/#dccKK*܂B[[Ѭ--,V4ՊF$+ h֚5DJeHYV_eEE"YR)/)JyL.+Tˋ bEIIT9R(VӊFc06664goo`0tR?kJܹs={+C={6::s/-->|aÆ VeYYYcǎ_j3H$6lڵk[lYá@?d2ل U @<hȔJ%p8B B@Ba\؂BaҬ4ÊƠ4:ʚn`Ҭ4:ʚA3htqc@R K%T"JR͋@"D,kbbbbkkgkgdoogggViãzA$iwLӼdćbFh  P(d|+dgg BP܂ak˰f0itΤ34:acKg rD/@"*KDR@$ U3ss{;M43bX Ű)99yݺu`„ wjudd\.߼ys:tOtRP}UJ1dȐÇ|̙֭[Ϟ=޵  &MիפI>\.wܸqW ⲔiӦ[.88fs̩8[lCCC ] 'A>),,LMMM --=+[VVF%jknchnc`kheM7t퍝$_y|Q^n' sk >jWle41#kkkooo'''Č!.IIIP+͝iY?YnX?k[Yi0]s8,v*W*]7o4R͛5kֈDiӦu|w.__܌ٳtEl֬Y+WAAщ:iJ"?}g6t- # %%%1119991))%9*J l]YN,wg7wg7w[G2Ug8,6f8<.,+#߿Yf5kZj6c- `2[yxx>4III III<^Affn.^.,OW/W/WwO['###C TᲳ2ӳ2ӳ9t~NJ211   /_P(wN:͜9~aÆ޽:6ݼys͚5ǎ:ѣŋ޽ã&E^re.]w[56+WLJJڳgz#B.xIIIy99AXѬ=}z4htrc9y^]J/drߥ&g{"ʊ/0 Yf͛7 qtt|Jp1#6 999Ule4<˩VVMx7ke茧TYii6'H{:-%13mRIoآE֭[}s7R7m|*B`0>}aQ*#FoG?:*o3 90 )  خv'ډ`tqA>az9z}sif̙r 93tgϞyzzٳO>(<7yAHikWV:) FCVĴČĴ$%NX캺:F݌T*HMMUVV׷9ʞ?YH_*('Z:Fzƽ{k㬴)sίekkcaaakkkff~%%%̙3'L&%%-YdΜ9[{:u*44ҥK83 Qoeuc6 J?OjbXҺ:::t$ct'OGD{SW[K2mnۜ&ю%=5w o?IXYY doo߻wo!p=:r䈆ƺuyM.^奮.9993gҬaڴiÆ 3f6lӿg:7nuA@b0o߾{<"<@J5k[TDQEA(OM!U^a˾ 0` d2?~/_0 ]#SJ#uM^>9C|ۄoc^JK 6^S?9=TVV֎;.]:d^i^jUii`{ZBlٲ{W޸qW;Nݲe DڼysG: @K߽Y]U%N0o@~t Md^_Bw#߽|KFH+++2~+)) };ɓ'J*j}m0&)tIOIzMWUtf^NNGu:Ǐ𡫫ܹsxEEEsqtt;wnܹ222\ɓ'Ϛ5]G5s…O?#@)((3gӜ9sx#PxiL/J0Y q Va~nˈW/CIK8;;8:::K```͛d6;XFYLF\̛gO$ru5zhGGG^zAUUՍ7:N+mi`0L2jԨSroyȑw@ް;v$f^WVϯh :Addn+:ܬ >ځf''||ы!:tG3\_MMϩS_P;9:[v:r2 FHXx\m۶eff._|РA OOϸ816-\gϞ}˗We[nXٳg?~\WWc#@W :z6t :.''ҥKgϝKJL쥫D5x J_={WaOTqwIfͲu.$%%}m۬\~}}}޽{;b.^ѱc#@Ξ7o޸qf̘,#xqJO544\xYp tW^mܸGʪ&Mw?EJFסWxgZf"CCnذAJJq)::zڵk׮2dH[گ]ܛyfڵ޽zX Λ7cݡsXȑ#d2q:Gs޽-[E~ebYCF S(>G ƷޕW01>DWZwFHOILKN$Ƀ;  )i6"UkcG~?'gVߥp IDAT4q_@i+/X@DD׹甜n>{,Rwo޿-.WPV5ߧN녑OFNA][W*މ-!%"""nz%yyy.l;j޽{Xw\ΝRWWu#Z|Exs,2ʉcJ]m޵ϕbI7%(?܉!#\hJ;ssGq]ޭu2WVX?qnǦ?~37:[>7C {w, G7<خS}wRR۷o9s&Du(ymܸ[E׼luչ??ZJ7_VW[+ (H*),`Xͷ;+)S|kaPf.\>uޒN[-=a!mh{^{Yfa=={|r֬Y&L虿uuusUUUmu# LԩSGy[^^^W\@*??7nt/t L6ݝYW=稬\v' fq~εmkhp/-.=u\UC.EH$ҽk_=t^Yщ6߶tमIJlWST^vd3ԩӧN: BBBf~ٖ=.'[K{&}l71W޾r{t>mMƆ{jC:kVT@@}0qs5P(7o~ٳgWZ%**P Zjٲe!!!ÇޘL&1޽{SL$:88;wݻSN@*MMͲ]`ٳGKKkĉ PxЊ~z!յt&BQEMC[c9sb}s+^ipw5()*謉{?7)٥w9{x{wNF>>> ,1jֿi]=ϴfe\8vEʿeb)s9u[~¨chK{/ٴsU}qotW^p;sVHH)00p„ yJiiifff 뙙'NFxGܼ{naJjg*(:Ӆk±]>XֳJ9Ei^9ZdN[>'&wgz/S3 |O{u Ȏ Z.\8:b_ssBoqsȧ]!i{wx 7;:2l-7A.(+)s4}tYIEi6xq1on^>FVAi8qwW^9>(?OQEuX#FH5^;MC>fV"J"V<$,"εK1W{P~CC[O^TTtرcXD;RƵ] QsG1 sWnh:j2n?wSp_B/DbfeKD}}][fx*B Iiˁ'̚'F'{2eklj ~yMNkq!2r70pم=CoСC۶m[lٚ5k ܎={7o߿{n벲w^xDˍ7""" Q;= 8q͗9/Ϟ|tל+_2o]91/#Ÿ< Ӿ +f9\>yDRZFI]GA\̛W۵79q͸7BѽߦܺN" =E2SSfxJ*(߆6vo_ ^=Y0pumZgm|ܻ~mUd2ĄfܳGMDa~nNfYN׼-Ḳ;kfWRXmUGK6z.\Ω%K]T\Hv]HVf/CU5P LxoKS}˧ ̭m2˺ӽnH8wd9SzuӦ#H{tٌ-.\F{)1)))>|zӦMׯ_u/_ݻ{͛7yyyܛܺuc455:طoo,;|ӂ )T'/ :KsP^8 7H$>e- ""*< ;G9q֨,r4 ޖVͮq9_=UED).G&#i9 ´ `1YmF54v] r9W*%#۴^o)-*0a?'[%$/jl S(c_?-+)8U2n`&ui^ݻw333 G-W+gӗ9_lHtl>u" LK4ebnٴ~CelSM/ S(:Ɖ7^ilg^x|k?XL{ 8E76ɓV^ͫ #36WRu~TNQD"f78~\IdA<{ûVhmYjֿ0 1N{-|.(T@PX M<`p~~6﷈PDh|lצ}űc6nܸpm۶4vWV\dɒǏsi|An73jԨ'Ozxx+f]]]NNr:w۳g3t2D\B'`=A@@z$~k |BLF(4#lTW!&NkCIU]AY"Bs7y޾10c' =@mM A"f XxtωJHɘ`dw܌9k{Z.+K hXt:A1f)b55, ?v1#K 2qx~8Tq ^hPDU?'3 yjA4HĻבm AVM+2b1}OVocNC u圲ơK7U~-꺑K&ADO\|m۶-_|͚5 u;رcfff\*ׯݻw[-<6lӧ>|8~v% Hiii(}I$Ea^o_ S(:VMK ;G)s7^dXUƍv:zMR~oeFu9k(%"#5i*!%l#[qyB~m?^{w%U 3ӛv|浡Σu Mы f?')7~u4ceٙOojic.)N[Kc6>p!#]:ট)*/-o!SmXZPS3>'ڏ> hoPVpXϑ?äf)kC>r,i)AKQݻw{yymٲeԩӧOu͜93""ĉ6lyÆ DDD4nܸvŠiiim)666 `ʕ\~\+srr tAst{Aosa ̭l߾ zj}o"ot?]>yxD^iT_WWQVZ[]J#~~n߾}圖qf PTQkpZӞ,.z.a@veCYidx! &Lg|0A+5ZYIq{d}0t8cD(}C;]$5)!*``R\lhoD$ѝW~lʂ՛3SLtyrֻWguec޼tB\44ֽ^cZ_D"[lo]SDDS/Bx:SDD(y_RZ~mN&[ 7ϩ޿U>cF,ߟvTWѯ.yYBJa-mBJ|r6{)*Fr^8M{3 8;!F'"7;YLZIߴ2ҧ޽ܻ~90`Alk'_:m,=U#w{6my~;v<|ŊeeewzC=vXuK$- ۔y``u{ijjtӧkkk,Y ]GߴjժC5c܇ye4I> ~^Қ  )io|-m܎6.oMz!Nl_wD(;V.?؝ $'qsP_ok?&ɳ:*JW̚PZ%2̫:yѰa̦XH6][ٞ~;._0sCRi3O q &A~^}؁s7T4^&}4զQ1fƄ?|-Kuԉ'v^{_|yNNA,Xܹs\ڌ1*<<ܢەASS3'']c.]JгGYjkk'LåwN8ݍ^YQ"Le%tArdKHJJpegI %C[* e̚¼\eu 2-߽\4ukVvmi?l\8b>zϓ 2d J*Mb!eX m=#.r Qf)/+).+*obMuUAnFYerwNJ -(ئ5xxƍEEE:::C۷FF-Lsl۶b߾}܇b2ӦM={vdee͞=㺺m@=<o@@@[kX,ŋۗi޽111>>>bb- Qk {s8X߽סWqp뚵sܝhy7W17Lv{? E|?MMͨ&n%SGǿDcُoMu~p."3 _aC,[,//[ ͕}4oO:ʕ+-6 H#G >ݻw@SSG]СC#F߿?t9>t:ɓ,(7pȈ1; :@'u??woΜ1cժUZZZ?-6v4[Mz Du. ꪇoܺ|sbÎQ@sxC.]JL1E߿u}Æ >Tekwƍv熶LHHP(@X"--ٳ|KY۸". tPA^Υ 7nd\TRSQu]D"?>!!ۻ`1Gܺ|hKzx)yn4GBPu1bĦM>}m۶:^ K.~ h4M[qZYVVVVV.vϞ=[bKVV˗/^SF/" IDATa#l9O&\*2SSŸ<|068}ҴiӬy ~Q111>>>/_!HH;G~ :* rB=*BRR_MMM]]]SSSCCCCCCAAr6lؠ}vƫ'Nxӧedd~ݻw+WA4StvI[:u***ݗ,Y2|pĬZ-qxyy;vcksqrr3gt+t/^?S3;U&Ŧ%}iYLf3{ǏssrĨ^z&M-u@AX,Vѯ߿y}p{{P(NS)E&&&c`````sz͛7xzzdYf3fƌ_{#GpfϘ1fܹmǏ ]f^K@@q [EEEdddtt7oDG"BYM]TT[HCGOAY//8-)1-Sb\lJ|lJb*.nannaaѷo_++6n{a2o޼y˗/#_717mc`K[>''~|)mE&&mbUU))))>>0 OOϨ-[۷\~NRVVnև'Nhkksڵkm)|ŋϟ?AAA^^^Gm #!EGGGE!BXXD]KGMKGSG_]KGSG_Y]LuXIɉӒ?!*&ffffٷ/HGG%k y/^|][SC"4 {310VRU#y:SmMMZ򧔄 i ) qe%A[[[Y[[[YYWT%h ZZZ(9o߾O_ֶgg0sUVV޶mzxx.^ EEESLY~AZuӦM?y7=~z(<YJJJ?%|$B@@PM ??Nsggegggggfg|N('F000022722200PWW!)M1>|!666==f hj)kR륭KGUETy 3R>g|IKLMb LLMLLLMMMLLzɒ?~crrr}}=B, 'X,CBBVXͳĬZjǎo֭[Ο?ׯ'ӳ-3Θ1~ڴi ,믿jhh8rKB@OWYYӧϟ?NMsEy9Ad~~Eee5MEUue5M9%%9%9Eei9y$|%EEy9_rddfge!((g`````?ʏ?~!>>>11111)33d!'KUCKQUM^IE^IERZבiL& 7'?';?;+;+=+svԔ*:  kbbbbbXSSÇ?&$$P(CCC###SSS===!!!^g'N.]tȑ<;O:լNO4i…F ۱cǕ+Wdee[n˖-|||6mп<syyy: oTTTϟ?.(gXAI)*+)(**++)$dd4 ^U֖|))*R[[__iFIhhjhk57ESRR>}JLII+,,*",&%#+# B]?6]Z\TZ\X%/;+?K~vVa~,L@@@EUUOOO_Shod2SRR8ur?~,//ldbbly3;.,,'M4yfoݻ7==G`0&M3f#|… Νx_^zz M,<#GCCCnnnVV֗/_9|YP`08%%ed%$dd$e$d$4 8U\U/\U++*++ʊ JˊK J KK jKK(++(++())zr tڌgddfdggg744p+JJIKJ+JJJHˈKHJHJx{=PQVVQVZQVRRTXTWZTTTWZTXZTPTWR\O%1*UUUUSSSC]]?|||<+..Ȗf?;ӧg̘1unҥKgΜoz=>>~ɒ%^^^:::G8qDddŋ[- sv 8p'.h ~ L&3//MAAAaQQA~A^^^aQa]mm.bT*&AӨb4 8JQ%DD(QQEL&,BGC}}mMueEymMumMM5^S]]W[SY^VYQJ//WWWUq6 222 򲲲 o啔yxa,+777///77 ''5//?/??771MB&)EIPiT q$MRR&)"**BSĨQQ(ETLLC|\P__]MTWU5􊲲ҊҊҊαhddd䔔8_9ˣ$RXXݻw )pj&Ntۤ cΜ97nlּy.]}t}ݛ{ˬٳg?~\WWB\{ UUU^g%*++JSVVҒҒ7%F PE8Q 0"*F"4 D❻EUe%ŬT1*:f+ d1Y55Uu55UtzsO3b4qIII)I)II HH4^VV KuqIqIIiI ^[Suw ETʩI"DI$8D"QI$8*N#[9hb2Ut&Q]]b2t&YSEg2tzeEyuUUCC׃PDŤ8_pQRRǷoFEE rvBƟG(((ѣFZhQ=طo߮^zΝM߹s׮]kuEZ{3xbGG INN^x9s<>GAeeet:Ns.Q^^btzCCCMmmMuMCCC%bQQ^t X,VEEy[ 5FHJ'S(!!!a!a B&i4q 8jd BPũT*B\hbbb:ɬଙt: N଍_Y,VYy ./k}ڿyG@CXXX]]~300`2_sNJJJCC cHΞ=[]]=GO<Ȱm(##ˢp.((7|p111.jjj]]]] -[nyp ~B***VVVcƌ0`FKLL @RikkȜ={bӧlauY lWWWqAAA"""&&&\ [ZZ***vZڙ3gvt'*_ ~f$IJJiѪnE!Etttddd|||H$iWO>ruTUUo޼)!!ϥ/_~~~ddf"""wQUU500?Ç/]ؘYz*:n8;wEGGKIIQT^gtttd2̈́: 嵴8W ¸W!..~5kkkiii.͢ FgAuuڵkf͚,= ~9lmmG[n+** :cO#&&v)=R偁...rrrW\WVV644ҒKd''3:qDZZ0,(<u jii 2d̘1ׯ_OII!Ɋd2{N푐PWe``fw|uAA <3f ߷=zݽ47ׯO|xTUUEEEy7 .\`ddE?^GGS$))5 +ݻѣGw~ݻ+**m& ,= dÐ!CX,փ]$!!mD"vsssEFF&;;;$$ٙ 2;??#F|2޽{&L?ЫWn޼YUUYz4@G5JAAÇ׮] gjjj&1$i񾾾RRR]1իWPQQ P(FFF\z)))ݹsGDDظ|||o߶? 61ՕYz:@ 899ؔ+++ST^&|||7o޴h>hmm ??qqӧOGe)>>/^؀J޸qCWWW[[3vY[[yf*>^֟pӧ/]4,,b:Zwھ}ի b www2y9jԨseoo|||jjjiiiׯ_ZJHHY~(<N# sAiiiOOYft^GrvYzuiii/""2mڴ7ojll̽Ǐ@SSG^^^ƍ344u oܸۻO>.]1cƙ3gxkhݻw744Y+jFxEKgg爈V={f[|Gl6{߾}3gu hhh,[իǏɴi8\]HVػ︦V63F*CVunZVju.Zh{[VTPāG"$珴

|Ȑ!l+j IDAT~=ztرt~~~ҳg?ɓ'ourr Ns̺uj_~~MV?>0aB-ܳg@ 4iҺuj?k֬6m,ZFB6lw}׭[Λ7o̙#Fu GAj:99ŋIII/^xRH$ށcϵ:8:qrokaeBW-XLMJ{!H`0~~~:tu^=>ȑK.hѣG2~$/^RmF7LyP(4iҴiӆ7]:~#GnҤI n`_EEŜ9sX,͛@>^>Oxaɶvtkɭ[;e뤭Z.好LM᥾䥽䥽뻸v߱cG 밠3b̙3'O=ztK|M(.Xn rJttG֭[]ˊJ!!!?SNj %H}]jΜ9р P|Px߿?.>>..>?/D"9iϣ[[:)FSK{ɣEd2mvv鉵I>B%%%x񢥥Ir/XbE\L& ǎ;a„nnn/Ѿw[nٳ#5))) .7oާ~,- H$o߾{ן$&VUU9ulƫCN.m=d]gI%)O?}UғgĢR*%0_~ر#DuFh:|>/_7n'|B+V3fɓd;v,::ĉ׮]۷o::tѣǎZLLϞ=ۢהzJr666ׯuG:edd9s+[./'o`W;Gg]:T%?IH71.yB\\nkg׷O!C>4hNu@h"EEEt钃Cppp=t>n߾~y :GS(!!!>|xppphhh.]Yڏ?z{NNԩSwᑚݻw_z522\YZ<@hΜ9sϞLzعk(6jUEH&<ߧw#:F)$''GEE%&&N:M6NTgчZn߇v{ݻ_~!|̙dɒja͛7pl=}tҥ˖-ׯ(<{9zXnn}~t0ǿ A bo\s҃ E'Ǐ755u4ht=JMMѣԩS9ՁFٴiSllmۜ>pI&u'44t߾}l6]>|ȑ7w[3gNg͚a-\>sLwwիW: @+"7Dv}~Dq,~ 솪8b=_+ڌz2g̘W\Qպ/<<|Æ 999'O޸qP(ud77իW~h&L8ŋkܫWNNN9T*u+@ŋ79zT__נa??POOO׹@e7/tpb\ܹs̙`0t F~^VV6|qQT]z/dT*u˖-FFF2Tee)SL 8PcA͙3yҥ7?~ѣGV\\ܷ~,V<&!!aԨϽ?|O^)' @˄B 7qk֬iAk@]?:::88ܹs!!!GQT ?iӦ\7L&3ŋ"t޽{^otrr*--Dyd[nݻ7~hh3I&d }sW|M60u.hL_#&N5023b͛e2Y``A ^^^ Ǐ{s&R:v!C9;;_vMTX~#Gmll?`mm!1۷[ 塡!!T_vN[ɥA8sbƫd^˷Il:T-<{ 35ÃCOYZ8 6cGWFZyYz 45ܶm[]BRz9;;[XX:Wmlofnn^qH$G}>}kA:RMLLΞ=kgg׮]zghܹgϞիW;::: @kk4ׯO>T4kwCFO$H 8x_O;B]qG[:ulVcٳa>~ڣo4 kE:v7ơK|{e( DLIDB/?8dЈZ߲.PãGvޝ3tА:Dٹs 6oQA*++L׫WiӦgTTԵkkA|1yk#'4 .¶KOOGQQQ_|ѣGMPoG"VZbVX!=ΠA,,,$IYYYll컺iҲF'''jNyfllҥK)N(<f*""bڵC7N9_1.8pן ]8 ~}q "lڕA{A;pFohϭP*hG^xV=uߞ:G83&$޼pƙC{jpo{}?-&H:H*?yBfVm]X{vlqM]{,&Nl5@,--/_aH4wܨ(k EJ߷ &zz$k[G "[A8Vn K}|^}5ll0AkkE{ݴst&L&?a gyL'kVc\xR/uqӞZ 3q9?} ȿnn&B!_5,CFO$bR۾ PW.pK[z\TqAރB-ZA{zԎMQ7eJ^r2PWl >SFA3{ׯ_9sfϞ=uxzz.\vppݻw=F.zneeu…3g[ǎ)ʽ{&&&]v4W\ۺufXLvĉ1_֩薑q޽""ݶ}pom;7ilL&xg'WKѧ-ZQ\MmXTݖ%8n^#VA"Z񽱉I.d=S]5~Cpu}=맭O@^ЊHaÆEGGw~;wnJJC1_~yeF.zdjjzՊ!5v[svvn+ܹ?hEV<fӧrnt=ylǞ;%p>{x_alfcX^KFsJA/uՏ [GvuvC>o߀_ =9pDxWIOyi/%K"m\^:A^^d9QT( u70_g6;u+2٠NW!>/ɦF͙3gС۷YLsc̙yyyk֬ 777d2/ؽ{ZnAAA6lt֭I[fl6{ɺa#hvb1At&KAѥwwn^>حc`7IOdqcryA4܊]c7t !=7bd;7~/yvAPjYQ=.jݛlg=iB. ~Bg2E"QM͍ ֮]ɓ)S:uJV:ADZr%N_v>accsw  Hqqq-NNNJ>s=|ٲeMWŠGsi[~ FԵG[>:8K1bcuǰ.nA8dŒyՍjZ^&326>544jKxy wK?[F>nj:2EUUU*T7}R8#j?eņ ~oͳk ڳgݻcbbϟPBYfͼynݺlٲn``0f̘\f*ڡCk[juvvozyyyƍsuuuV<fˋñq񌮃$=yK:jW p;z}#ͻZ9.m=/8\Yk߽}O:VR)*>}Oϫ+K~UG9Y6v.?\A7/>S#c dNUoꪪۗ 4iF͛7/<<\Vϙ3'22RP:agg7\~Uj1x` B/^>AAAKq8CCz&Zyf.;a]gX4wё,:׽'A?z77IO|>kLSS =qڍl|MvF1Cp*AlԎM;t1Ocۖo}jF"GG޻uYB܉MĄR*YOOoֲѬ/>r;lJ{LҾS/}}Ⱦgb7ZRY ݿU?͞=iu+VzI]DDΝLŋkdd4bBqwTQQcS}}}Xxte˖: G-Xm)1M}T])>PTļ{lllusFFFNj rѫލYyiݽ:߹PqL*Zs)0oRY`[h[ r, E%rΡXT",.2P6&Y$U#<=/&Zm۶edd5*$$Pw"B1o<2m6~'ɓ;vxk:uȑ#$ Ǐ=zѣ ITVVΟ?h˖-zzzGLo Oqptuo⪣Z542⺸UWamkoLY-UG VL{;;:sу==]pUGP 77m۶M0ԩSsMJJUccm۶QF E"ѫWOJKKE"чnJ^x1 ҥK|\^*dp|8tVΞ4~ܸ׮t]'`ĉ-ھ}L&I[[˗_ϟӉ| L>w[;8;;h:99>,oIMMݿ_~ioo,@q·+WnaJzDRi4͛7W3K IDATaÆk>x 88… :) ?~|xxgtرcjիW [;W1w-ԬTTTlܸ{1B4w˗/c(˚ey9-L߷L꥓'<|߳gO]')00022;vXtiNE&M]n@ x,--{YQQqͷvOKK+-->uttlGK.&k:#hcc޽ qWY驺͝Fs⌑O<..nǎ^ >J3gΖ-[$ٳ+++2ފ+:Mh9֣d29>>^9##6#G̘1f: GJ~$IUUARTGQLRzVEEEYYY=Ro=d``@ 3zLJ\.'VUUI$ ߺ$B(//~5H$&I AL&D"?@V;vlwoȱ2xLJ]9s9Ͽbʕ޺Jee'-ZԶmۦ˗-fΜg-YӧootUtRxxsJBJr666ׯu 2L&ryyym\[TUTThKCbJ,WD"D,QAH$b탖E__NgA"0L>`3 2&CCC*jddDPӛhPTA) J@#D"T*H D"QTbX[$JU*H$VUJe2UDRd2 de*Jш"]_Mm(T!A,SAFT*NjoPe``@ӵwE&i```0X,hllFs…""._D ȱm}t tB˧ـBStIFgH$ (4?jPidL(T24/A2 *U*탪Jy JLFDZ-I >P2D*JeJUyYYJ(WT(JBP( -+h1, bB1a2tJҨTEP( ɤhml^WVVVRRRRR" _wWT--H%%RT*JeR+i&!J' BO`$קd2BalB$ĄI"St uTJRQ^T!J4jue ryJhd1AJEyyBT*rݵRU&iURXQKbF-Hje``@3Ld &AtSSSmej x틊ړ֭>m׾c]B.{r+7d:uСCߵ/@h4O^dIS.}m۶_ryʤIN%"Xf4:` Eg0ht&3ڏL:iF(4 \*$bD,HdRL"IRD&T".-~.40ז#YYYiklQcVbPP܂2cL,S:˔4e2X )E}dRIiXT*.-EQXT"$RH$H"QP,*>BZ[[[l lv}>yٳܾ!v~A=uDu>TQ~O(./d:/u322x<^fffFFH$cNNNΎvvvM|lbbbonbbdɒ;6EEEgԩʕ+#Gj4SNy_MJJڵkAk֬!Ͱgwލd2 4MAAAAAA~~_ EW'-LܒMcLɴ6bә,:EgIPH"D$EBX,d_$(.E%BA!,SSñp86+BW}w]32BJ"BOOŠYͭ}jmnŶ3oWT("AQAPP\X/ID⢂ Ɩqvvvvv\>*^zƍ7n,(7P|z@tWqA^ljqMKyAw}ӧO޽1JK.xԬtXL;rnnn Ih@%%%;v숍0D/{YX;:::;888::b7 Zl[&Ԓmmű`[[m; +k6ʚ@9CP EN~8ib~Am۶۷O޽{enn^aBaVVVVV֫W***dvw6.kcc;v/Zϯ8s]]]seeСC#""jR*F7ocbb֯_泅L&6mZVX,@HTfddeeehx<^Qa3K5ͱZs-,m8f斖6Ss |͓JUQ* |!0?(/8?R"B__ߊ~`or]]]ҩjŋ4mQZzSUT23:::;:[[Zs,6V6Mc1bUU⢢>>+/^'$$$%%=y k;OG׶NmmNl6jJ"/;3/+3*9UrƫJ===G'~~~M,??7'GڵkMTRR2{l//իWggP8nܸ.]|5>}?<~ްa,X0`Ɖ\7w~&XA S-< O>}S^LKK+brN\';-׉JkPA&eefee2s2syB~1AB\]]۸{{{{{{o߾&Z'O$$$Z%b~QA~NË̼ǔlgޞ۷h?RXcw6Ri됴Izzz ͔H$ ѣǂ  F#MΟ?Ȑ!yƌ999Ν#ɯoٲ{>>>3glO$M6-((hź)ʤ$woO>}YaaAtӹM;g2#[ux\)37+3'#5UL"!Ɔ޻C^^^أՓH$ zYUUeɶvɭknТUUUggeJJOLMIO~KOUWNI%)((HKKKOO~MMMKKKEڣ4mͱ`Xp96VLSs9Q%R_/* Š %Azzzv...|mԝIeeennvw6H5vgr...L&~v#4nݺ5,{9~xXXs=VZ5a„ɓ'84iҤ^zM2eӦM%%%6lh/444---""B: ?T'Oܿ>JKK$p]ںrn^'ZW)/_$eJH$nn:u900}X uʺ}͛7ލMOOS,3>m|ڶiтm\^ӔgS>~I/ ++޽{㣯œܼL%̜ajfjnijn433T:FghL٬QUTH%2D&I%RH&$H\R"*K%H(T(ʫϲr9qtt4664*LWE(//'L[}`hh밠c%%%۶mAfΜI6Ok4+Vܹ?5jZ>ydOxx/Ï;v#G4x:yO?i&&(;;߿w r O.m=]ڴ㺺ZRUR_e|ŋ' /'&&~];bi%;;֭[nݺqfG60h޷=WtI*_,RqNז"Qt}F742222Pid2')oFhdJUQ.+媊2R%IUJB!/i ʚ b[YYZZXXl+++ cV\]T'BP )33Al۶r]tiE"̙3V^]{}Y L[fͱcҾcǎX|37w\]ewi£ܫW^z5&NAAٵ]?ώ<}:9iOQ UUULNz0 iñѣ `kk111NpbffGA>]:cIQi)IObb/-X}1bħ~ÿD@TbH$bqii_"HRIr\^.JU HTd#2!?KLY4JXL2d2( Fc/ֿP"Soeee</333##C@?LƇ-[ō9rԩ ֓'O-[`MP >?x].5jŊ^^^cƌټyZzunnݻtޥQ ryLLիW/]L60ӧZ4)ыG NJ|XRyxz8p=z011u]yykN:u칒a] {ԅF᥽L|{ڣ իר#?3kkH 833S[SUUE&\\\\LB㊉ٺu+F[|WwޣG9;;mժUqqq񇃃 .r-'L0bĈ._u֭[zxx$Ԯ! rssO:u̙U*Nnm:u߭WA&ߙ^,~xVf+#c{|ٰ#Fp8]T˗/GwEEy_Cz6j A&ܻyo_P*7vܸq溎Z.**zvBFCR\V|i}7oٳ?| FY|yIIIxxx-Yf}GGG_zuK.p8/n`ﯸxC6mZ B:Bu/Gn,6 }ܹv]G-޾?ڳGd"Z|Cl[&.W] JzܭԵgjyU;hU%z?{;.ƽ[ΝǍ;qDSS&Nxaaa;txZw9t%F0===CS K׶~77/D"YXYs]itƇ*)1ݺ|.ꅪC^z:r2ix<^ZZR$Hl6[[r^+hN>77ȥfܹseCǏՍϟ?_h޽{O:PޓFYlX,700h=}Pѝ;wvy)}}^4,{o{}S*:ڵSf:v; AQ=zV9- +|ÚCo=lI*AW]_&0{2 kV˫qGFN5^Gx*ʸ;7o^:syF3j9stUWyZgϞ[ĉ斟~1ck[,ь dm_^Qkc e%g-,M "Jn\8}Ⱦ䧏;v]?QUUU\\HA`Iքmܸ1;;;$$d OVZ|y߾};vn9rI$Ү]Ξ=*~]v6¯ IDATP'YMќ| rݵ!akfL&mڴiͫe7mڴgϞmذ_~Q^^ۭ[v__%Keff6YZ޼y fF:TKuo廯]9I}yzD1mHl+w/7s>Y!T_D㧿sRh'hh3+-VP3d[褕]J8hFMBP%x¥ZO`H cNw:ג\Fu1~gXEGyp_"w cCql+YG2bi?{zekhͨ>G%ZwNYZlOf- uAHJ}B?cA{%]>{ε_{^8c{@8OWO,5?Ecxei;=bXɉW/[d6ޜ2!T^\Iq}DA|NAѨt;m)TMn6{wOo2!ml EN~Aðly}xZ߸޺ےÇ/RǍaQ!Cui=Lۚi=t<8x\\-e r#< OGػ| ƦqQeY3/vvqk g޺aŅoNuc米OxXWAv|;L{c\.Z2E CeeeAAAAAAvvv||F!nnn~~~|>?((dZ7lRqxxmbcc?ȶtr-Zqư={6?ÃcjޖFGGǴ4//z={9#-Z0o޼sm;-_¨9e&ZF 3h͹zOKQ l)@CͲhkyZNMyopL]`}QW_޽{wǑnO᯳,z,zf6R,6g&e,-PhضZ~x-=†КaotB5ɉW'͎]7߶8QLgGw&? kGO@$%2LB,??Xi6{{{.?xֿ͛7\rڴign @CMMMݸqݻ FMaÆǏ/_bн{D@ JUUUQQQt:yqS{Ъģ۷oB~3}dy.nLKyϠa!D-B_p_4n%b˞| ݎ8ˡFP/P &I#M:za3!tBSdoӴ4СC x<gvP(JKK f3NX*rq:''M6:u_Xb G-X`֭W4L& m۶7n,\P,޽;##H$ 0rHɄ=kر-jkѣUUUwO]EN>cШM8k=L;#NxnGW{w~w t[Zg6o^:qҨjB9qWOߠ[fÞ߻V^>(FRBI˴ſN2[,vR: ΍O̱8MXt9t~¼̴TTVYZ ݸs;&7@c㧿=3ivhvac߲%-Ƿ0-!4zҴ\FG5 [z5Cqnyht3Ƅû:u ZҥKx,' {行~b fu*N<#'$@顡odEEEEEEF [7sNܳk7,{^Q1!zO~w޶5+c4j5BL6LX.rtbIcS밪C©λL0j9yƹ!j tfN.֎ <ӢjEoeٷ/şqo,񨍳%{DtAƚL?x߰Q:==>#ܼxޝċi]SR/6Zh4uzWs?>CFsx6Ӗ/6l{`YϣA֎:E$au nݺ%x3 b2Vcccs˖- ,/BBBho裏4 v+5OO8u ֮] EZZ]llA۹雎 f.FPBaҒn޼>pdpu 95~6wfZAR=q]8{?}T"Yo]PQR3dӞr`e%)w8!dK&5VPQvNbQYWU`<7o'6v_ZaS J;wζFU˧ƌ?_I8xȉS,/6ObFVBF9sH1j(eϖti-m_? ypp)-'BH&i@1rōBF;Ou}X{ſv[2yDؿ`εKwΝk@%p8ѳg^fͱcǎ=7߼t:=11qʕ'O:uʕ+:$+"&&f߾}~COEEVŲPED"o5cǎ͟?ٹܓj#''d2e+BGAO?<%b}>XdBOLCxn[>Xs}0ͩ/88%:gG^O~՘IWl|#nhD7qZJx)1g2Ԥ;6;:Si9O6c&Oođ;G±}X c%'y#B,`Y p<=*PiM:w2nX!>~-!qr7έ*|ĸmƚ|Z8f:Ѱs7gǝkۼ6nݺ?sϞ=˗/p87n\J[lIJJBϟl7+}´ZMz=f̘Ҵĉ:;wnezxvdT蓖t+O?gD˞N<ױSg]N8|{xn[ Щ->z\Ƅ%7%Գ7F }G+?f3&ekc^ p\W^QO+%R3[+g%7LC9\~ wצo}b[ܙÿlK|B`._t~R㧿lΓBxg;lI7.Gm6uOoqj t8/A\\N3v]v-\PX]xzKYά MʹO ̉2xKWalٜdsݾTitgykWΞy-zh4믍{6f/ d^U ûy˾}{l TWW#Lf@@`0;K.ر… & !D$}}}mָ,Z~~7|#QTQSSӤJH8nʕo{*j޼y+Wl{ox#Z޿M+*âoll=>ZoVWݼ| xki/$={z>sٲm׋tʕ/*99)s?y*Jc,/W̛7~ve0JJJ f3Jl-(--ꫯ,p8… 'NظQRׯ_G5IXnryN믿zxCmm۶ݾ}{޽L&0z>!!a߯^*wAET%N뇾1q֎5j\;EN77gϞ=zh"{\r/QoMTGg=[[iZ&N',={6Bv\SEEEh4%aZP(;wFi@"K.m۶h4 3 IDATH$Κ5+&&?t#,+$g϶j`JJW_}zꘘ6v6%YTVV?~ԩIIwm^Qzo_`;tBRo]w;1#NGٳϕW% Nμ~#wc;jnH}:a 6tȑ#Ǎd^GZ6!!ԩS;'|=`(mQ'ܺ|֥siIM&c~ޚ8qԩ\.ڡJI=@@p9%5?7Hݻ?Df<icǯX.۷իM222C9h4\x…RSSL&P^!½|BGЎLFcIAnV{/)'Q#G1bDDDȝVrʙ3g:'.WaQ}â֎A!fMK|QfذaoM8n8GGH/UCCBHTt:NT*-Md2KQ(2ܤƆF! :N",tEr%!Z;Gpݻ剏&&&~:h4Y&::!t#G m۶u#ۯ_?^P(,=p8"i߼ys͚5ׯoX_G%5&H\rͻII:Fu ҳwpp6ǡc.'~vƽJ[[^aaQQ:t(ɴvੌF۷ϟ?#1{:ͽGT߰~a]5R*2R'JMbۀ:f;;;kJ%H$T*U*RTVT FT)%lVZVo+]ŷ.dBt:H"ڒT &S4*bQ( |f3LbD_x KRAAR$|>?000000 wdĴ4@ \#?ӒBw};lذtF#jݻrV̐x<`xz=y{{.Y$&&O>ixԘVMOOONNNNN{7!M O! F(/(78Qq^Nue9B˻O訨^zX;RT*UrrrbbדSR*={X@A{t1#//}0/l2D]WWhh4ZHHHppphhh``+y x.F_uuuF$A He2Nk\ J"1$ J#S(D@$Rit2J1x-bccK 4:B`p82J"D cz^VfLR+^i*٤B*h4hFR* zB.3ZZT zL4jJ4LbYl7!d::::ٙ_YA$Yeggre sz>33ݻW^d.}o022223333D2Vsp::8<{G=ɶg9,{{*xЅģ&Barr3 O@_oPيA*?*.T8?OD_n!!!QQQNNN֎'Nw޽w޻w/5^QQ!{ 3[Od aLFcYqAnfFnfF~VF~vV;"wTTT~EfsYYYfffVVVfff]]H իWݩT_ hZNT_/7>ŶgvLEg,e`1vL6, uVf6R\&K%rD&mKoeRA!*dT"*666ǁdIHrqqqssr\.׊ D"QvvvVVV~~~aaV%>>>X@Qt7oJRI$Ҿ}8NbbիWo߹s=JEB}BBC{ṱQANV~NfᣬGYEFsӷo#FtyʉGMƲ윜윜FC"8\x|;7?%V#҂ꊲRAEL(udrppphHGxxӊWRLOOS3L &/7//AV) r2K KsK eJ̍ݻw~+2ݲUVV^z+$$D"ڋ\./)))//Dzʊ ;ql{&۞qbq8L=asm8Վ/"oIbIH" "YX  TJ%v I+;vF[)//`0h4OOЀF.l6ܾ}ʕ+bD"HLTTA=CzV)2d?(~Vzj}c̘ѣG9r$L~!WJuq{zx=]= t(T+(*+*/./TUeR@-488[n/Dô2utttddc4g2rssss L&Buuwvu纸q]ݹn<7wg7*kd 0 u5U5U5Օʚrwڶdw``@@@```@@]R,)))((x<$ c~'Nͨa&N4Dtq6'p'.\`pΨK&=P((//(---////(//bڒynl'G.ɑcsxl :JY+nn DubaQ IZ6\www>r@1EEEEaq8sp:q]x\Ww'ds;J4juMUE]MuJX]%T jUUez!DP}}ֿ***SSS333Fc@@@dddDD?,о ãG233ssssrss ҹn|o?o/Սs<7X%$UW`2:88a5"zfxA#,!d2"_f3[ly3?p9Cߘ 7jG8~̙|I``W'i4M9TQQVV&A@P]U][+4a*ՙjc;89:Xeb۳9L{S)H"4 "X\[SP_+Tc !"q8XhL&DrssIJx<, E*ZA, )<7wG#qtbs<2LQ}V  kkUu5U*IOBqpws c"X7h4)))BbEDD'""OdeeF t$k LZU^ZR[RWSYVRWZo2vvݻw ݻ7Zxg3/|ذaWdqF\\_ŋDC"7ɂ)@VZx5;:4۔)o; ta&~}E|/^f0{?Wc?|m/I%o,HCouGd0*++-H&D"aHX6 +F%''_v-99d2EFF5*22@ X;46̌;|2[o9`O@w\x3 >}bygԩS&C¦LX1c$%''$$;fK s2;֭:#G O`0$$K6N#|>q6mRnݺu…,6=l0X]Rvޓuɣ&N v\t8ѐx?߾|d25zѢj@#M18K%%%K3*楄~1kZmgr\eלy)44tQzJHHhh?AԀS,lˉ6Xp>,]J K L̟Vvxmvo=͛-kG:\H +͆qX,Ft4f8tF,kɓ'O.((8}͛o>bĈzZ;:$ɜ?Ϝ???xy>][]bV'~Po/̾~lT&5q㟳D"iٺ BJ>FهϞ ^hŝņmo|W~Z YG}}K{SGǿdizaڲs'묅޳FxպV=B%;ts IKP^!VǾ2R*d}FLx? @ۿ):/=OV:+"\xizECtֿ7G\qtnMc{h["D,:gG΃[x䬅_8}L,\ !bIL8p*g;j4'}Q͉?h{ vo.V4=|dώŋ?x_~/3Й/ 2$::ģM6<і3;<ъ5Ka_攙6"i߾)/D 6cGCYmTȏ)za }Fp%8vڵkڵ/ 4ˆ"k֬9tЙ3gvD3g,_|'N6nxر$@`6>X˂ N8_.Yd.]2L R9zNuc0/'N~Uer9tVZ ",?st֕ !X$maNjj:y v܉~8^9{éo>HMz}Bv_/i{+/*p:;v@ݧ} ӯGdV?4 3myl/mCT^\!'1zDDgΝ8I7`$߸rZ+J.'K|ٻ7asibؾ9fʗ ý3-~;xpժU/?iݽ{wڵ&MڰaCJJhl~djjjqqةr:^32ӻd SDyFL7 33n, T?Ȟ[xDQޣ/EOq-ZV<XN**J `k#]tl6h4la$۲$t9$iOOO?~MN81mڴAmRx >쳊pX;'?Lܺ]x/s]]߽3!z:Bh7?kŦ9Y4=Mݤ!k7 װkJ|;xt<{D`hdFKw1 Vy%G1vd{G&/v˱uG.]U^Tx%9񊳋[Q=#cV j汽X-΍~thdڸb'&:IN:iv쒯7`߾iM2l[j 6lРAVt6ؽZƍW^۷AzM$>uuޖUFoߧ=T^\h9V#?B Bi)gNW[;-w]MeNꋽo9gk/iᣏ; I$ $$̰]­:QVj[kj[:ꪸMX!B?)o[>}$w޹?~Y: QT,[nXd*((˳"[,""aH|>éwEGGGGG:th:x`N,o޲哅4٬#LK pZX!-o\:ܾjS'3e4ˤ_.hԭ+I=z#2;bYG!AD "6B̬lnվ1m3B1Sf!8͋&߸rGp hq匥*Vh?DQ;?:B999^nL"ݻ~%?'3yVa> 1὿KL&Nx Tj=zٳV1yALbUՁd!Jm-NxIJB-Ky$q[a^.oV'4uz3:Bp~N:{R᭢>} G4H<4>T( ܛ7o޽`0.fl$???g犋L>}С߱c޿ rl;dANyr?MtHvFM"^S0lnFjrēlz!xyi- nLƧ)7>v_na{ժ]G,GR޽vI'fm8pHɫCDBQmtaCFcO~ݻCPhD˶uѩWb>vsϞ=k0 pҗcSN?~G,.^7*.*XTl-l.ӛmߧU#ۄYGB,W"8AD/P$+flvǎ/0%%%TCzVD"96~G>>>3f7nܑ#GG1h ~UVVF%O=D[W.L b~xT)ðZ!Dg0ݽ9xܵSS"۴~zCjBd ˜d 6G5ѓgt3'^|;pl?qoA߰aL&st,2I$g UyzT곔Uux>zD8dFo#(Tk_{4RÁ+"!ʄ/9rDx///$&((;&9~ѣG>}z۶m;w8pQtC"00P.+/.̷4M4K\ٺ-kӁL'߸JR<+?Hw)lEV^\\Wvk_kYL<2~9gs]lߎbb^;Z\TP_GG[!*-!OX,,71;9U_".nT?l2\3FOvnXϥ^n)nn{ut Iʚ:uKph4k͚RIkn][o\}p0gZO"WMXԮKl߶sܹҷ5|,aㆌ4D\QF=ztΝȑ#J$QF]vmIaN&߼ki.!rs"Iȋ8rߺڿپ-}|;{2BɩW!s~waw]R4 xlώ=;tZwrM,{2ۣ_|?j h?Dz/ۼ{ŷ8:B`~;6k+vQ^9{D&KSrp*b}䫹XgWwi-8r [hk5B@ u_Ll پ eu <}.[7aDa<ܙDZ7 g~ GMwأ!zd.]Y, %}0T*Hd_jt6m/T$JwqIGuZ_bŠQgkhTJD\mj *79񎊤C$I5*[0mDZuO jˤe%b :p+xIEst8 1LrssԩLs>}Kd5k9'3M £X r4z j?%J{)پymΊccׯ_6 Hg#YVpT$6  Dܹɓ'Onݺ#@s8 ' wfrћDn[b5-[ܝ@3Vmocynd2u_ g~(f<7Clxd2R- @rX=$>󝜜/% mv)SH_l߾eL 3>Э#қxh-f?uԗbIJJbX>>>/}Ì9ڍ[wa:xg|vZÙ_0꣆]ұn\<٤OHHpt,- d*--ŒlHdLs,ݹsgӦMBwߝ0attDh߿o;9l¤AI5 63сԛ;6۳l6}2{yhN>l262|}}}|||||l7o׮;wŖ]L0?'kuߙDr`$6yǍ=j$@2%%%Hyyyz@ xzzF"5o0z…-[q <.@ܿ{Pi 3xxvPU*ϙ3gL6qfѣGͫЈxl;99hB~h~sDMlaTg)-GxeeerssZ-J"a$@C0LGݺu+J8qb޽q8@TXXe˖;v=fsz H3=AD Ν93&w|qWW T3Ϟ=' sBҒ9:Y.x $˱ l6#j`@iZNWJd KUR(2rvvh!<`0Ћu"͝}*H$ʒ!777l]6L`` JutoFfB@T*h4U*Uζi6Lf˿l#p؄KbP(vqᐐӧ;:"4cwݱcǮ]%%b^@PlZDIKKn\:w;W yLLǍ9ѡf죏>˫OXXܹsSRRFA;p=+ާSϟp8$59E.jVP(SO,=~bBVt:VZ-Bd4a-B!wν)y:N BT*D"Q)T2LR(d2LS(~D:`0( F;zJ–fFJ!:-͆"涎;vΝ'CMdr\.zJT*zBPz^&aiyLө5j,mȠ7h4LVF D"HB L..t2`0T*LfXbH$Fc0 33sڵqqq'O:fٳg>| IDATl2۵cDZy~Wf1?{[Χ=N:t۷{@3&JҮ]bD"͘1Vٳ#Go.߿nٿ111rt8 d2y%JRTj4Z-˵ZZ)ɴZV˴Z^jL2L~dgD&I$3L"Hdvۙ*pt6~Q.x<!DP!lF8>:G V2L !dZU/TJvըTf !j zNg^3uX7V[U$2B\Y JX,JR NP(......L;, RD"6fl+h0tZR.CZAoXJBHQM&ѨըB*l2 iuZhP)ITVhF& &`2nnL&~pww|xXsmڴ`0| \ Ueee9s3_P*<1Z/H &ˠ?MrfjGn)2~}ӧW^pԍZNOOoTZZ\\\=zdX;;99Y,!Ct:!Crrsg}ӻFUsJ!_ˢ{wΘ1'$Ֆl.erL.lw*<@$0ht F")T:B"*݅A"S $)d IPHd ݅APD"J%oѠhFNQ)zV*2^T N*BZZը:VVJd4VrֳoZ{%X GRD"HVNll$ nڷo> )՞bŅbuK%2ID\VV[ ñ]L& 3Xt`2,Ņɢ3.L `9FRT J)WeJTT _\&//rC1$˖pl6!7z+h Zv׮]{ ={6\b2n޼tƍׯ+rW7Q[ƴkXI%N{;OR .]:wܹwAAA4? ɓ'R@ @x|nnɓ퟈x<ܹs^:Z֯_߮s?eSͷZǘ1co5HrI$cw4SƖ$ bqaa‚<5iҤ]Vƨ$-- {:###-==77[Htpپlzs|9l.|G3e%bqQAqa@\TP"*x{}}}!!RXIw޽{̙3|dd[,yA! ~``Ae4 9¬,aVF~v0;S#4Z-۴iݦM6mDEEU.?@5VP(Ήgeet::e+kÞ;wnΝ'N֭[R+W\7^w{? 8Mlrm%߼֪U xTZZSPP/Xxs}=}8>n^lWwO6Zs)MV.-I$%"iiD\\R\TRTX"*,-)6Hx<_xAAAP`v򍢢e2YjPBL+/ /(pxn^L) E¼̼LqQj%:;VZ1LG]jգGG%_hLz>===-----ٳgϞ) F9|?g}pD.D¢)QTlӡShvӟ?vŅyg9{-MMM\{z:hmJEyFEyD\bm#ggg.7[XTe„ ">VBCa / k1M¢ܜgigb52""&&&&&&22222@j|Vׯ'3gܹ#[M$={,---###''';''''G!#p8gؾ~>\_7Oo/6˛5H@a6JKJEEe|Q (_ep86 "rӧOӥR)iח@ 8:̗X,ǎۼyS,Vk.={3cޮMlAk$8쉧QO/TRSSjZFљ :Vje=J{$;I~nd]"ڴiݾ]ۇ7Hjz֭jٲ9s|}}Ri윜>^lw/o/6ۋeܙnPQÁL.- JqqYID\\&)X,XOww???,ߟk?NMM2B~~~Fͮ\.?tPbn077770$c]{Dl"woH:{9F' 2f̘&8&H.?y$55ǩSSSbN  sM<fG*) r r 3s2Ӱl$vdddQX6ptT3gά[{`0XqNt&˛ޢeNn^2 9iiOӞfl6p8 za4iXYd2ñd{h˗^VB;v,((8vDRJPZi>M;Ad /^d2d=Mɷs2ӭVkxxĻ;t2h.)H"ܹs۷y(??!D"~@AX@Hx ԇ˃h|X)gOs3r3zBlղ}<< MR.]t̙ >}b6Cؾ~-wnӁL8:FjfXr3R>ɃYV֭k|||||*x]J񃻏Ky&1,=z􀹫!deeX";;{ԨQcǎGx#YVD"\./drYBP B  prr"Q(D3@!!J#J!\z#jVR!Gi5jh4t:bQ+!Fe6 z^S*zB L),WteX,d`d2===tzUQ(i/` p8.ؑJ.]pBZZBBx<~(=ztƍ7o*GRr7rsgy0\ݘLW_~N+JeRL"I2QA>6o899q8܈Ȉ-Z` DFFRxL&]By}=|K 6yF8~իM&ĉnj#˅Barrrbb"Juuu-))tr L$T[Z-c2Y!2wvvnh|x_~3g&߻gXhaZ9YO&?~xͫ9i!:&O||\\\ll&1/^LLLܿLV2C~u [G*)w󧮞?e2zō=z:Yb+߿N:Le4F&V+ipt eʔ)999U=E^R-[vu,y`ա!D2m4L֮]nEEE}zFAp8; 1H(>|رW]j4\tlטخѱ]<<=J@S&--wʽW߸R/P]t0|{=ydÆ bAxTAzH F}ܩsGܾwzw&Oԯ_?'''G&Z'NذaO[jo \t,[=VH h4GHRRR,XPx<~͚5AAA{ŋ5dBp8\>}2ҳgO}v[TTdX#ƍtM٫% ۷ݷ/CCv]zDwm܂+gO`Kyxn_ݻV);v]'yٙ/}ț͍hTcsdGkfmw|T<|C. jW\tyB޺M?~c &@iii3f̼p|>7ghTmryi`mxG}Is~]dM{BBjp8СC;tlٲO>dܸqF7|6$2L/L&&)0"պgϞ,"hZmD?lRRM&SHm۶]rݻwmfJU"n!t9H<Ue`Xv?dX76aD6F nBl_~Wz'4& IDAT=R/<2hT}پV*UAD?0˩.:V#P_νHa^,mŊ-Z8m4~T֯_?O}WsuF:Lˍk E#sx7CnC?~ի 5k\.wŊ'NX~Kٯ& bbPӨD"/;o<cx<~ر_t?… ʋ#xӧOb_owbbk7޽{wҥ?M&ĉw<ѓf4jdЫN˯4'EV^uZ~/mliELyҴԇD"1Uɳ<sb mZm[O frB=i޽e2#yc˗O0/JKK߼ys۶m .9r̙sQܯ_~СC{'NإK:=NdɒŋgժUXBh񑑑V/I@@jg4+טu^V7OŊGwy}~t%_BlM\TJ{ srݸөBՋ}?뫥2NcFGjױB BhݒE[&a+Uc|?gʾS7κ{yo=q9(4!d1[}ĶQLnw1ogŵH?D1+0ojnfmb/ܩg[:Q㔏3x^pk/=6[E 6:i1څ3FC]]Zђ߻3(,!?pت97~0lөɷKDS,SMаZ*q#ZEǽ;ƗAMU䕶[h&?p?͟λ^|9&&59_ff۷n=zڵ+E Ю]֯_:w\5ۜj7-W?Ϡ͟:L˕Ǭ@rF[W"BDܪ]췿~?Jɸ?}v٦5M{s/>QN,JsX].o?G>sV<&xȑ#[ndɒɓ'Ϛ5+..AT*MOOVOKOOJ8 QF @jե@-eff/ ᅬiҥq4iR6m,YP(fsa_Z<ט)lϥ]&rGn]I!$IqvNW%P.&m3B)zxTa - Y#ƿlF999|s;g{5~wt7Q6acYG!Ō'rTRzܩ klf~cd*5~аc{vʤe,7wйc. ą̬^PhIJͻ,ڄWṵSU?r˶^iՏժՔą~26aڴn݄wk2ܹrΝ;ѣm۶x<~|g訦u؜cZ<&jir`!Ԧn[D9іj"}Grn5N5v͋Ewamxf?89}wK:ǑM: ]z,YѣSڧT* uӅBJ"!!!;v 4ev,պgϞ[nz宮uFbbb6o޼hѢGUXF ;-U7jkx[?sMVVVru{O4#LNyr?MtHvFM"^S0lnFjrēlz!vޔn"}5*iߒiZ[t@RQizz} =;mLJ"Oovqx ;z qJnfڣ;Jl rBQmwaCF#vwza&Y{J;m9E~AULƧ)7>εy)+囪L+mhtz) S=}={hTڙL&NKJJ:<Ŋe`]494-tF [dsyVb$nfe'8-ء6/O VEPB&0u}H|8eʔ!C~\٩Szp D`Ø&ٳ&MrmxTXXL}O$:ߺr!04<-5e-,;7 J!֧j!:iӃ|<'WPyLJV۠:b`tj`OU)NNN[׮jX,'OcwuKgy)MOǯ>:8lLr2B"[h}Ⱦa&ݿ}]*)hiٮZ,]uBjRVP7U#v_a޽{rci6dsLvI2 :~d(r5E%&XFoqCm^,b&ù{z::7PllM-[6k֬ÇU]pɔx< ÇiۿJ?BCC6dZx… KJJ~קOZ,E1̳g?Zk90@3S;-Zprrs%oGT_htݹr1u["B OqLy~ׯ ~!ԽSf-Fqv&.ث<} ?!^OnV:lC` SGo=PGtۇτ*'ocUR\ǯc{n0;~pŒr ү?v (4"EC^Z#Jһ_m^ j~2+mJE9PM٭+6nbKSXգd2GGGj*q}e鍟QLըEyFlkDqx~jkPYШUy9!!\ d2'N[Ç_~%SDB0===##C(bٿ>fd2mذСCqqqfz4m۶[@ p8?cJuuӦMÆ KMM}왓+Gm︹}P\切Q?wVd !ݱKͫw\޷7xp"OO4-'cZگecϠ+d:w7~@LZfkzT~NV^}zVsܾޣ@#Lo(_x꣪Xakvm:*`پm!N.+o"~P vb߮oL 8|BV^cxvOϛ6oG~V߿ 7!FL&sذa'L5xȐ4R񲑽Ɯ0'f;-7BZ1<Tg;j"vH &$$8:7߿իziΝ;xƌgϮ]vΜ9 &LXh˗tzBBŋk|~'$DU*jj[jۺUV[Gnk]hŁ d$0BHB$)*.4;g\I\ .2dH||T*TRR2mڴGN2eƌ/:qƮ]ƎcƌN:t3f7nLJJjѢ͛ &J]]]l6H֧RaaaӧO={v=!Y,]ʕS]a_N%vOw|osظ}~D8s !l6[N|ё3N9pF]:1яm?Y2GI^"Ȟ_?SoC7wgyx<~ј2[,y߻s=I[5\ؑ=;v{?aݷoۣ:$4\XUYI߻uPLg2ڶ!Be ՜c>a!z 7d*"D{ujdG|'`"~)}3S5=n?4=盱C|}/^Z.,ENCBBu[ti峦Xj49=iyɨٞ_B$29Yew:jT{n*ϝD덄>>>'O1cP(D~iEEZ|… B"ɓ/S z |/Z3_(~t]|[0gɣBx~#Nr'}t,z{=vH"~6f̔)SD"z;{v۶m|dcݹ9X,vܴFQ\8yҤo͆ !C.[lرf rvQ8fXOlLB|>_"t ai@sƍdͶdɒ6m4>fw}'Fj:Beff:ʐd!DbٴZ-*..vuum"cbxʕsݵkϿ<:wKLw%l9y*鳓>ٵ& 9vR>6vX,g&C裏6mڔ-^>ohŇvrdjͨ#O.H]@ȵk.^/iI>|P&a=kkk]]]RD"IHH &iG:uj#~fRaÆ^gff.^F:t((i4Z,b@lرcǎo߾}v2ҺmlD;m 6HuZ^g՚}ey%d4FEE5>QψBL<>۵kWjz}:)}`gW@ӢqgƎ]8Nrr͛ׯ_3eʔFi, @Rrss I={h4gW MNNβe***O؈{NKK;~ \n"(** BVE\.Bj!fFvmYRRrѴ'Ӕ ۭuȘ6qR[%yqZ.h5j.׳KΝ;wѣ|xdddl߾}Ϟ-MөG_?>zjYkn|q߾}!]t)99cܹ|L&L4 Bx IDATd!hW/Ͷ};wϘ15 'Lеk׉'6VOF_bEaaʕ+ř3gr8iӦݸqc{ٰaCMM… f@#~֭'O<~6]_S#[E n`V@SUWݿun^{pzeE9Nҹs.]p8kYִ]v@Qhשm\X2xl6[νۗϞrnԩf*͆Z^hQVVԩS}]g X[[[]]Bt:Ro>F#$4 cS;1LhР{oРA'|ҧO>̙3/>vŋvٳl@X_/W\9}%8NE["B;ј}փ[߼uy~.Bj6zʤ;v&M@ڵk׮]ׯ_ĉGLDRxtwmλ!oeYs3UJ[w3l|pSY4Knٲeɒ%7oޜ8q"\FVꪪ*Vz`h4555At:^_]jznkPuj:A B!Ȯ4: !FP)FQ(&I) `0 N3L7776fn/--d2L&xH)H<<<],xN:zj|򐐐FMׯ_cmm}ꥎ"""Ś DR [,2FH$crʕ+/_|攥Z/зEK `PܸM˰l%9YyY fZ, &Md?߶mhHJ H{ݻ7BH&wpC"B#C"ZC'$LlYw]{JQjh4l2cΝ;GDDZ@5jTHHHrrrNNΜ9s0cT RYVVVUUEjJUVUFQ?DӉD D`\]4:Lq^~.D*¦H"d FGљ,G*,A_kM&`j!]n\k5vZFFi&hU[̦h0ͦ;hlfnlIl6p\.8NCf0rss݌d2NC`1#PԽT*Ujjw>vW#p~ y)Z̤hAAAbaa!BH,#j56ba0^<yybX,ׯBf=xʕ+wܹ{;rnP>Ҁ i@o`Կ >Ņ9Yy rfeg'HݢE a$Ɉ#Fa޽{K.׫l6W-  oI(sv4Z{o\s㪮viJjZ׮]{@@/}k֬Y` 6m8"4oJRPrBP(JR,--++/TVVV*Ɖ ;b3Xl: -L6f bLvӿK;5"VSQk5j QQk5UMaEսjZRT&ѱFp8<7D"DLl6\ŌFؼi$_*&$$HR:bA`.Cmڴ{ZyaNNNvvvYYBbh"(((((y8^bŊϏ;wv9hJKK򊋋 \^X\R\RRb2P\tsgs<,7wÃr`y} oFШTjRYUTWUjTU JY7fy E"7/X,}́JMVPP͛bD"H$Q%%%˗/{~8x`*bZO^UUvڧRrʷ~a__z;߿aoW^ݰaBh8nٟy``_4  1<>|annbx|T z <7O z?VkmeyYYIQDQ(+)) ee͆ {/x{{ꈥp8lv^I_$wZ]dȷExWZYyY =̶D"1$44U zR7W6-VWW+--_Ex)Rf:psrrL!WRRP(rr E*[(sy}=<˃cB5Pi1M 6h(S)*J eʲRYY;eBՊ"|o]AAA44Lu9McX~~~ JM- v}۶m\re˖-_ݱ6nܘ,#О={"""ꥎBot۷wd2l5ZArnQd2u֭[;sss+'ьB,BA 8<%<-zy{zys=q8 nWU)+JKe%%ҒʊrOm</ۄO/5~) ^^^ C ݖ{o?oO/W(I}E>En+ s yeyŅ2km-Bӓ:=Z٪Ug`DFFFFFbjo^SSC |||[l) AWo߾ ,8qNxKl6Lu޽䔖*B <^^B_(8ndrf$˭V+Hĺ%$$`7+***ݻ2*8poy7srr_xGrD"tDZƦZiJX,%%%rH&ee^L+*(qu%ۃrp8<xypNH @dZU UeBYR*UreyiBa5==yBP$Ķ BH5yt:P(8cx.;f̘8lLvvΥ"_ b//Eb/_QJ K ErFi h4 F@]b^lhl6;&&&&&!d A>AktեE"y@6FaQ֭[S(\G7b^Ἴ$I.]RX, x1FG^^^)))p˗/ٳgǎe}:f m۶u,沲2G#FbB~:8d:o XXXXTTŒJJJJJ 9\w9bܰzYnj#` MJTUj4j\YVQ)e URp$?(T*ߋ{yyyy{{x @R#G֭[GjZTV2GcWW/o_ BНzys<<8Ϩח)*%ebyYQaiHT*H$|>߹cVkaaݻwܹsΝR  RxxxK=@S`6WZ6|84^ڵ̫9ٵd2'?' H'0- oDjm,??A~NaVìBffX8fp\g ?CVVְa:&iҤI)))қlС_|E׮]kРAcoٲE(ZݻϚ5+>>~={cx˽䀀[]]]\\\^^ B(--̺]Q^RUH$L̓dݙlwNg0 &$A 25Z]VWժUJVi2FZuJ2M\\\=\P Dyyyxd2۴iӦMV_2,?&[ՕrOퟯ\Ov&DMZYN*/-Q)+J*eTQ(+)6ؚJ%q"%&RiSNT*JB߿sݻw= oժ"8}t 6O:D"9(<\zDRB"tp_ x.tEhxpHU2;ys+,ȳZFo߾}0xa6mϞ=۶mDk׮} ]fMeeqFwѻ\BRCCC# E  4nǦZX,0 5`V+***?RYQQ,˺qYUR*fsݭDO`ҙ,?$rhtJ#TFgdCMZ5:hIi5jmMuZ[Si5xVjӟaD;ǃxC9ǿ\.kE@#X, `b`%ϗH$:u’DuṸX֮]4e. $qqq*))Q ]yEIINu!2vsgy=8,7w۝b=`h &RWSTUi*U mUJU4UJeVӓj k󱯞+Ʈtݻs΍7~w޺u배+շo_HhѢSΛ7SM`z_q!RICZGg؀0̓6ݶqbF>7^;wo=xxٲe6- E:t pέ4|gٯĉ'NXp3#=?˗/GDDԽ+??_"`?!,#z GOfl&9hJjZ]*+Vk4ZFՕHRL&D&St&Dd:IPIp%+B%$ H$d"L"$Dh?d4MFd2&h4M&l6 zb4-fѠUkMFѠjFdiFd2Z^_/B!S(,&bl6aD-X`,`d2rGH&UTT:&2F|>@m6@lcǎ}<^FSVVT*heeeyy9v(΍JRN/` IgXH͕H3$2H"17t' d֚TQcg:Z[Tk5ahp8>\ ,7p8o[?t:m۶۷nݺyCl6JuvokΙ3gs}lW=z׮eZ,gXvOm o׉LDDDDa5ۙn]t_i2zѽ{wHjA5:ںuD"Yn9ÇSSSخ]gȑ#={>zb~q96a#}=*@Sgd2L泯o65Muuuuu^h4A׫j`0z`PW zV[X,55:!H$2LƾbY%@Bx<`!Dc0xBBBDD~3a#,36/y9B!{Vl6AZBd2M&c"T*ՕF1L*J<&BqssP( fST*d2t:Ba0 bWDlFÇe2BbFVÉbDҥK,c$^ YZZƌӡCW( l`bǤBK Yl$XBRt;ҙ,aO<Oc0BTŕB&7Xz!ըB&l6v]!dZ,Z!֚MF^_S֙9.Ld2,&fY+{ܘLf$%iʳ5 B2L999w޽vڡCjkk######ಏ;55uٲe_~IwB*?b[nL躃v[Tt2!~&D",Eٌ}& j0F#q`0 ,NCl69qT "W[kEfBh0OtյO$a...t{P("I4!Bpr]8Vcya4t:JH$ B& D"a+PT"H^rN9ZT*DX, 󳳳Xy'T6LZd2a1PѨVF^jV;"B5z]jʴNWck-%Va2Y6 "T!fq8B%xt3Y. AR;t֡s7Pa~3'O޿kWooA<8445-33sժUf„ =zxWڵٳ?óaZwѹsg>._\o6<9;: xNR d25D"a9bFp͗@ {ZݻvիW>L$#""bbbbbb DбcGX,7]l۞ܺu  4Mjjjzzz\\܄ ^{W\ټy[l[.Zm۶`^^c^6R=X,x8gKKKf 3P(RT/607nܸx |>@ ᫠T*ϟ/g̘r7փ~ݻYl @UW?'yE}ҽyFWХ1J{A".|sR_)d^H1?4i#3 sGL)Sx9s֯_[2\/4zÇc:th޽߿?y;vxzzc`5xY6M.rǼi%%%!.JCCC$T*FGGGGGO{z<>6feYKSI^Ü|q#vl\,ULxyYBz#Ɲ>zHpɴ57.g贚]|?}x1_|r_ѮE[(U xZ!t?7lAEݽ~uw'jtտn\sf/uqzp8k &+"ðӈ$RO{D;!,5ƽ[7O;QUYvt!.t'B}5ߛ9X"k%%-= #FaÆKzyy9;w]vȐ!/oiΝaaaOZܹsX!//D" lQT"8B`0@gh,,,3*//Z8N,K$.]`#@@R]/G5ͅ 7nܸiӦmv9&&56KgϞ2eʼygORzH ^/u6z Ukwo`z}4k (رeWs_c`=d6q=O=_B Ba z][exd}ZR~CFM[ysjUyOS=b+_~.C¼M3?Իw=ˁ %%glV+@q|Pց-îeV|o`0y.5v~2fc[1jGtt]Bju.-CZ>iJ~敋?|-l}ؽ9KܹO=h!MBVRrnIԑRG!7cKLF#6Bg0B=*:&,򿙛:fܴRwԚ?=!kz!C{"KS O=t^n_;!T*!x4Yݻ!CΛׯ__nã^`󊊊SNM4ryIIɣ#|||#JR"` Gfn) ,fDR}||1#D\GFFFFFZ,#G̜9-11gϞ^^Nn%EGG\r֬Y'N\h@ pvE@()ҪI&!ٿCZGp6o`sd*/ԝىB z~:fcfktg"IϾZү??dspmǝO;QVRڦm-/-I]mwn[ݒERP ܜcwuJ2ً]\r^OZk1[bǣ'|K WȾ{H$>:p:VyǏ[d…;v8pa׮] sywwz999urm0Ф[.\p}2dٳۧRBCCGr:t(%%?۷odd$o'WWe˖mٲ%11?2dȌ3kkk]]zj*:y۷o;IѣJFg z޽yH2ysW 9oWmm߰־Ywn>i_fI2.z D^0?nz BUTL&5kő:*-?D8h087J޾a6HO-"*'ʹ<>wqqŶesa=BVkcCCC$T*m:-.iF1bč79xb]]ᑜpooqvE@E,iQ£qݓg}t'26n߶7~'mrsC>._(72~#s޵K~ݸ:<:&4"Iܿ5K7ɫ]bC} a؊"ѽf}B[7y t&3έmR(jiqQ^}]Lg/bA}>5D}ҳP2O8D) jܹ?̙UW 3Gľjw)=m|2l6޼^'Xbح[2\QČ8`S*iii޽{wDDDRRRll 5XN_hQjjܹs'MTj5iҤi#>ZfsLBgx,7]<lut{#!!O׀'~u?z# zܺ9NLl.6uǁRfc-0sQvtPpeL9V4[ZkSupǖ;vT 4Z?;v,88xڵή1~۷o\PZZzĉɓ'7>pFFBqLV{=  ;FX 2Dq!*. g[ZqպW(N\V@eofvdH/?6|>}$O ܼ۫G BG:BꪃqU.3˓ Ғb1 U$+d/^ܹs۷4mĈÆ P(%rʁF5gΜM*++8iK/=p?w~m4eB>8'3]$fL v$7+L500 ;;DWOGXl[E /[T tY+rsXV%ꮆiS_޿>vXe@3H$gΜzܹs+W۴wٹsIvݻǏ\xj*== 111W|;w.]5{ݻϘ1چ?@H$"򲲲477~lttt<=====9έ[.]t̯hѣdoV@eX,?رcʕ#.]jVDYXc!S T=}cjfQ#R (F jx(TC .8<3m ڹih`ս{w BJ222Rt̙>>>-ϟ?|OQ/Y򦄄 kp8<^N"pGh3Zh2.</99977B.bXnnn ʌ3f̘6mZLL̕+WΝkgg7b///C8pڵkCBBE-`0K.6l ~3P nBS{g΃8p ))iȑSL!HZ7ntuu>}N Tn_V(=z)!!:k!6mbb+Ja5#@WLS !===բinnnz#eFВiii'&&޺ukG4hNtt-֭[WZ~zXÇn޼2u{_q ˗D,}ܥSG3&Mr疭[;v>wad1%wBKggUM5ʕ+_*9{؝;w~;w^]ƊD"wwʛ0L#ӻwoRRn P£Rr!BBr#d2@ (EPD&U}7T*XhRJ2===##C]c-BÇgXVVVYX @&HR)BH$"|\.Gq\RY%LWD"ŢrI!M&@LGGӳO>޽zΝ;7zhpǎ!!!ۺu\\\4ТѣGw8sލ׭ޫg?5 $>ySZXXN8qD%P*o>{@ 4iokrݻw1:;B=}֖`Tޔ`nn#eee(U(_ x|pȑ$ooɓ'1_xq3f;R;ZhQrӧOǎ[ք Jꮪ.)5DR\\r\H$D"@D"H,xBP$I*g"::QGz8=}VO(X5Q[[@$ HdU "D"C"SB--"@$5 DB4J(+ CJ%BH"JPG) "@.EBYYYH\V$(JJRX$++ r\(& "HP%v2DRW&D*JR oE˔KSϗd Ԕbj NZ TZ\\J <O BH|@(D|>UOH&ka6HbqxUē tt6--2&H!,#tBxC<%զ& U=TRT  2D*JJKJBT,B>O!d2D,*-HT0|PLDLR"D$H$ *N2DjwlLg̘q…K.c?*X,vա6lÇtD@@"&O~mtBg]=~}mڸFс:~gϜv!99yÇ?~v9:>xZ#۷o[}6a„#l6!x$t< ; _u]Qq1W}㖔?P%)@"x=O$4 Ǔpx# $F߂U("@,H$DJ$bX,|T,H"a;D*"_$ Sw00ǫfx2 jPxT-D@.gs؅ˉq8B%(D H,g HJ$SH2P p2I |!'s*~KP r I&&4uY Fc0L&J$duQZZZQQBHKK‚byyyYYYYZZamb833fs8|6_PP_XXY[[ȘD(T"J$Mmڑ$ D(Td~UAS7UR'q|SV./OŅ%%RxFMi&41NWeHccc333ъPttt lgg7f̘O6R(}xC?mf̘1c @ ~YԳgO.JU;{{'W{W{gWm<IBo~LZVVjlLׯzZ]4aaat:}ʕ}iuIҐf͚ZWF'N0 ooZϞ=a5---;;|H$сR< SRRrrrrss).*R`L3c:L%)T]gw#ꊸ1aDC϶ 'Sf/J 9\'s 8v!0S..*TwQ304d2Ld2֖J</99977B.bXnnn ܼQ~)B0==]6UYr$LsB$S inv](jlb_BlX]Cc1 x܂<x[s8>ǫ*; 8JR3`1666JɞqwwwwwrF=l0===MG||}}q8Ν;%o@߃D"yyyyyy!ALL۷o߿KaG Q;GgvVv-mkޠҒ%~MKii sq77nݺ9;;G=-={۷ ,YҿxLP_`Ϟ=uRRÇW^]>԰Zbbe"^g !$ aJK Q=LZzznNn^GȈfb03j߱g# ͔iH311eR X] Z=}}inR^QQ;(?/S]PITQ~^qQj7 cbB7e0&4B1444hA)--Uߧ)xD2MfN)f061jko1TjAsٹy;'vnaA*%"h4Ų+hΉ.\8xKƎ;th ?ūVF@ H8p@ x߽{ 'd2˶=ˮm{CF-\.HOKNHNLONHNHOIy!"ԩS-5Vbٳg_̙3dȐ{N8͛7WY}5JHHBf۫B@ n*p܄ 4Ūh&f&LsS3sS1Ԙ061BiмNnA.cs2ӸEܜLv*%sr 8ܼlvV&;+#7;_ᦁ%b$kkk{{{g+{ň0v#F0;}rJ~FrjPZZo߾[7@")6 sҊibX,:L ״uR$'3-'#=7+='#='3='#5+=!`0;t`oooiiAd{>}Z$]o߾e˖ڼ}?.]t]tugL0nܸ[J1cN:jԨcǎW=z(ZZx$>~Z@$l,Cc1ݔi/5W99i9vQ'73==%I$"llmllllll]]]I$-K`D2,X *y0mK@&pr 899i9Yr!djprvqtttrrnu ~ bƍ gܸq?H ccM6 OhQ233}Ĕ䔔ԔTbfLK+SsK0aMit|x|Nn>;fgg? ,occ̈Bh6l=d2ݻwy}[BBfzL&fY[٘-m-ḽlqܬ̴̬vNB.ѱ`۷wrttrrrqqqrr~(eee_|ϟc|J::LsM; k[4:CDBAfjrfjrFJRfjRfZrfjX$B];vر |ЈbqDDĹsRСCǏohh頚\fffPPߺu|/777?))))[]5؄n072L4:CPȈj`ehX$,*q9܂-JTp6666d%bŋׯ_Ǐi]T޾}zj??Yf5֜^ ٳgOjs=~x˖-׮]-333g̘q;;;Ȇ ryHHhZb\.OJJǴTBAP:8YXYXٚ[XX2-YX,@Eee9Iii)I_}O>}ׯ"eƎij:X4&FJKIONHa#XVV];vtquuرmݤR;w'Olll頚 ڲe Ft8\.gYYY999ٙY9X'D2)dC̈́b`H10Q d L!)!R<'syEEnq![XP\-**)L S KK3&ܜ`XXX0LW&.]JBIII[޽.]X-J/d2㏺/Ǝ;~*YC>|۷*?͛+V\rH$FVXAі,Y}ڂRxW^z%D*6upSɄa0hٙ_㓾%K*q8={.RH$~/޽}261mlK;G @͊ ?'~M%63-E.xgzի]L:ׯߔ)SLjBEEE˗/[nmhx<^nnnAAAAASf9yyeee!H!(D HWDId>NW__uCO_H"RX*EBPP"J"P HJ'TF"_ \!/W!1nJh4NM`-P(|k E[*9Bq8 ڮ[NGymێ9baaQ_~jժYC-\]v ,(?xͣG^zU=`gg_~{ +<Do޼yŋ/_zUPcԹs;Ggv&MF*$|Is721ӽGO]ژϟ?<ٳO?d2ԩs;upnbh =6.R$[|o޿IMP(XVV}xxxK&=zyyy4ij*BpŊyyy7ot8hdEEE\.Պ\nV9@$z8")!<'B$2l#7EDT(>BH$(D.I"R)RT*UNb "LP TW~A B͛7/_,H|}}ǎKP4Tr-P(۶mkĊӧu}dTCݜ:wuҽKg}  E_>6&ybN:Ç 6llMJJJn߾}…CN4.&HBBB7npIbX"xk׮:tĉt:.׺ϟ,YVƍKJJ֮]7nܤI|}}'~@Gw޽sndd@3ͺݹs7 kZXJeFJRן^zQ;Lxyyy{:thnP%&&޺u[QQQr[\pp=B57ϟD= ..#6ll"""Ξ=}||Ə>GPQa'''M@3gDGGh4ooo}}}Mr5kv`0qfX8`s񐘘իWUW?\r%<<… T*mF}… 7nތu޳{=<X7#BJ—G1Q>~%JGi:6ϟrjrRjsǀ!'S 4d_|t{)IC 7nСmo㦠Z|ԩSÆ 0aA[r2lӦMk׮ҥEP*qqqVVVƍ߿[m_=zh۷oܙϞ=?:u_ܾ}{ZZ޽{!$$W3f IDATP(=z͛cOj£cǎ OKMeZ<ާkzu.mLVVc[mH(p[*7f4+FMfªs΍4mmᣍ馵ֶHb^D=zzVnV fΜimmڈ#G>bβ;dǀ!.nݴ $f%.3-9⿚?fe䭣k?P(z xD7/JKK{RVZʋG%H=z?ZLq)D2r &M՘ Ν;as6ONSS*_>{x -X0rb={l7o S |i H`.}G.!H":O /'D80dF ;/[\:Eu;4;BSc}={ʏgffΘ1_.X-4Nú˗/]ӧn={߰_T*Tϟ8t=ʭ{%PxB]3JT gaehZy)<ɥ W:6PuЭ_|X*BL5@KG>}Z`xî/6?Q B sK+;6v/w`X46N]M8s(uwl\qKSIMl]8BO 4L$_:/U 1koߧwPͧ`Ǐy-.=4$fc}lwf! ēvd[4CShu郻gϞowMqh8. aaa7nܘ0aw`0sݼyR0`#i)+WdC 񚎫9LƌSCbqTT?\>qqq۷ѩXBEP9 ,6jxQYYҥKoЙ{/Y֍V}\Lԣy+ M!͡vn02g{ عB6G/z**`ƜGUб3Bѽb^ "p s o {c _R ͔9DPXYgjik) -ވFazP *J/:ADqa>[~Ϯ˒L]Gf-NٳauΝW^Z;wLH14 =ss^vʜ?:&zeN[ Iɳ9l-Kgߴ|KZ3iu]]AݿqD*:z>rU)?g͙5Zy1W$Պ PkxE3~]yE٣G l߾mti:d2y֬Y>>>aaa{u̙3ti f͚E"6o, 4N.GEE]tׯAAA}\Vl޼oM1ll'OzϞ=S(5cwwwsBJ2r7n4uTBZp.kUG3y7sJIɳ9-yҙs|!"ᡫ!*7 koʲmgzr\.So9sּsTk2s IREݡZj%k8xp--{Lt:}ҥG533[b˓4T#9s޽{_Xhdv߾};p֭4hO?+CU LݺuZH ddd89UVCvvv#Xg t_ãqj c= &253{2JlgB}(ʭ{c0kSB+ lY:qjuPpҨGL'o?wD)%lQpó]L*<?TȺ%Ӓm:!P(Z[w4 0B.jݹ0ڭ皿jk >Y4yt;PQggeuꢪhCT;=~gidBGIūF;>xoĸɕ#YAtyǮ=:up;PՈUo 5͎~/p֯k6Fn={kJIo9nlss͛7k:'&&fi3]ceNT)ha2'<+YyI#o^>kUز.$Nժ}l~^AT#5gΚVs2IKhPkx-I-mfM]viWZ5eʔ'OΙ3mΜ9VVV`0{"hd2˗/o߾[ccc???ooo###M/^^Oq=~۷oQ>|a/_ 򘝝]a 5ӧO׊-!߳כOr;wtyjG6;.^֋H(}ğ%I~]QzBEO_Q_nY=C*`u+2[xTa #|n zҚǃW.:vހ#B2YY]v^Oue[H3᭫G[`0ME?}X""gM[Tu1!$Wȵut*g ݧ||^F=yK _C6U.kPW "Qzzo_De&[X"&`1ݴa6.=,Yu۪%SL2Gp"7sh:iQ5F<'j`o=uVϏ:>t7ϟ`0^#ǍTG5gΚ7ך$>a]k9zx. ٸy݊iӦY[eiiwȑٳg:400Pq5ܸqTGJW@)))ׯ_qIIΝ;zIXb D4cǎ 8ή^>|D"ٳ}(JqLp )wC̋.]I"==7/sMKT*ߎV=XR"E%V]4P:͇\ܺװC9ˏd&)ʎ]zAo[&il̲.;3,htFn=JON(;-UPu+?hv!#E7.'}JKk[]u9k!nB"'OtZVZX+Z~]yp۟z;vڣ[~T,h9M۷իPxT͎~zjչ7֕9Qmɳ93yZX\ONZ~S޵dgԃ94:m [޿7ך$>ax1b#;6ܾ}{޼yqrr믿;__߉'xM@cǎ`0S(Gt8CYYѻw F5l0#p8˗/ iu\fΜY߿ߧOÑ|i h~ zl6flWzFG=-OKVstQ(_$)B>sL+BD2EAi25Pݦ1,?" Bx">xQ*( Um#25zJ#!PP!|^1B'TÅlYK54ésW?seu;| 8WO"ݺ[ٵWCFxD$~r;c ?3xXԽo^/+Vm;P!#&@=P("r)BHWl*Y~!Pa%K诱xyMuS`]aRe$!iaH+?xrᣨF' Jeu| 8W,iM`0]zy U(SPm/\.++-3Ӽ ?+J={{wؼi5-N4{w꾏~Z2ui5{^%tTu]LJ.x/勇JR7/ Yֺz%$ɺOXZ$MҊ >|.\ {1́J1c4UKII{nTTTAAӬY<==I$}Z__ܸzJ`0j^$%%ʎG By@g֐%'Mn ihS!#>}y>rsճQiGGLLNw.demɦqJKJbX\FA7ipnQzYd;aqr͚(~YZ5B54NjGe\+D,OXǽs9ܐfbס 3 ,D<{郻xj͝}3SS+MSfjfabʼwbfj;X| BcWs7T c/gnOXGW*iRܳa5H8qciYp8O?t"tkaGӱ4wdNT]l@Dm(y:8M{D}IS?ļ7ħB"=}~C}r3߾xZsyk]Q-Iݡa?BT*w]njjXZ=xȑvڭ_~ٲe Z??ٳg|8pG"X*K]a5˥P(І5D:~بQHܠ5Zu^A[Wv5Hps)(`._S! E s#s>s܀3fE?;{xk7wݪrرBMXuO*.Uոgβ4ү.TKKkKy_س͐f2uꎪK`cҒxt_j.}>XdΨSKKK?X~n /:!֙{%N5a<=};ݽ5b VWWKK#D29!S]8Ŧ}?t䙮IjnVg_>=y1U`ٶo 5PLvstŷ/S"o\~|斕Gzxԥ!YBHKKkQ{Bytx!ԵW}o}J%VW{AԱQV0v/Vv[s qܼucrb[]wcp؁]!ciCF$p^g u|]B4-}x l_l]{ݧuzʱ][޻]i>oV O t8mMmÇ#F BCCJ% !J_|ɓׯ_+N:믽zF   .cǎ:zmttmPu}{{{&Yn(+vvk#ƼVh0KllIY0}_' 8lSyzY$bQ>;׌e?n^nJʂŅ#^(8'3]$fL VCu//0 lL,^{{3gNW ,P ?wnȨO~[23'\l.sekaɼ.I-Gcwo0?2RyL6eʔ#Gj˚]xs=zc? D'ODGGdN:۷W^d2YӡPbx۷o )9shXD2nܸ~iȑ5얗7iҤm۶uԩ&L6|+VO=hѢ3gΘ=M B2!!kJi~Sf4mE'hKת5.܋'\?w~?sʫA/:f܄Y-m5 ɼ:"ڹW/YDWr.$Ʌ MMMMҥK7ocm{߽{'\]]ۻwo Z4Xb cǎ:Bݹs'44=622rǎϟgՓ'O6nxUWaSff3߮];/֬Ys-tttϟ?eʔ={k#{xy4ͽ7 @ۦT*߾xz̉wTAχf2dȐ{ 7ϟާ_O=<hiii:4wIKJvr|9AAA͏;vy666N'J4hkӟ0b^^̕.$oܰar/g)))G?̙bכ;V9rD"5_tO>}qNNJݻӃD2rڵky<ݻmll:`'OTTfjŶUUUIII֭{c&WC"Lf+BtW:ZϜ9s߲2_Xr{{@cJ$MGޫq==>|ʔ)SZRTTt铧NggeZ08tGM:V,Alϒi4ĉM:o߾ bcc;&>I&ugq.\dɒ#G;%I$ħO֚mS?#.{z[ ,XhQ?_=w\Cg}y搐k;v4l޻wo+tKxT/99ڵk117B^~7ȳG@hڄVIOM|_x 5bǣFwt\BB˗o܈y,ؿWhȇ YߡBH$}~?>_ee 1rȏ?*wNbԩS׮]cի#z'O>}zٲe#Fw,ϏIFFV ݻC몔J  ;,HӭXBR߿õbyyxx,_nm.]&/\`A۷mڴQMEV<|C 3t3eee111o܈I;A}z9x}{YBܳħiIOӟt=G9bĈֽȑ#O> ꫯl#zٳV|z{0w5NW<鳄Ex<ӫO~ >\1HII9tPiiQf̘A&Qs;vիW8P߱喙:T*d2L& F$jXR$ %  L. L&W*!\P(Br\PZFN!f``3X[ @ tFd2L611auIJ2---)))!!ùdjmBTnܸ1;;;""u9@ gΜ7ߴn'O8q⍟͝;7((h޼yWL8e"sgƌ t}[RRɓ'_M!]<]<}=]<] ;8H7ZU"=EZm5D&1^>fVH&`Wiyi/Jv ݻ'D"ӧWWEyxx;tlܸ1$$D EXP o4mΠ1D"ɘD$ ŘH")TH"H4:H"dBщ$H8|8h4ԉMOOOLLLLLLKOP*FFVl7Wk;=΁mciRt:^i1[RTV\XY]TuDb@``// oo!X,Ʈ )))rȂixtt0?;LV-.,**/)*+. x<ݽgϞ= ~9tPFFϟ9t}Mzp***UVVVUj>ZoBP,SA1(4Ơ4:J4JgL=hN"I"H( %"X$l,%˂~["d2553477gnnnnnnaaammMw|2F%bp`7W]]rJVk. uxx@ 8|p]z5@ضm{FEE=ï[ŋ4l &Lh<}֩^!H322rrr3rsrJ%Bږeޡ`Օ򲒲j~B%OOOooo*&zO)̬yuuu8Βmmldlcdec˶#3SU<.WRTRWRWZWRTp66nnnHtǎ6mژ1c:a+NsGmݺD"QII r bW(X7gfaIg0l!14:ܒ`b P, bP,TWV+"D$ʊJNYߟibf96_uPŋ,RibbuT_+WH;wvs=ڼysddOF:uu ?~kW^mjjrʆsZ!JGiڢ̬윜b젌lƊckecgemcfiE RkhU nYyi1[VQVR--/+U*!gkkjoo ?.Z.((|"333[dm쬬mllvVֶl[;ܡSj啕JKKUܲ^i 1]'nEeb?| E;Wiڈw۶m~~~h⒒⢢ҪzE$2ْmmbjnffY7jjnAwŠ{hš~ee9_YUWjUUj~ZzI$]RҲkjj|||gY,V+x3.rJcǎ~_P̜9w͚5ԩSٳgߘ$'&LiӦ>}4aʔ)G4iRƤK.hV fvQJeII gkQQQaaaaaQqqQiiJB ,VՒc >@ǓI%k X9΃v&,Xvvv ϝ;wڵӧO:H@%5CUTTx&aIjZLRML͙,S,!2r&L C=*UD$ PP[#/HPS% 5U!33s+6ښcp8kkk6mmmmeeeii Y.aSry > 315cbIHf&f  ˌendON${8=*P( BZP[]˯ jښ~_[]RoB8kmkkp8ikkkiiيEXRNN<RX@cJܹsҥK(5kpܽ{ZYY;ݜBxyZZZFƋܜBU]BBZ;Y;;;Z;;Y{USKKJ J J ʊ xŅ& @  u:>!ү5k_P_=z]o߾e~yE9ϯח Őd4A1 Ơ1T:JgL*AP)4:D&0QQg r\.E2D"H( %"X,RP,EBHX_cL$ZYZa,-- V]6.WVVUU5 714434FgR &$4DHT Z%J"\&ˤIEbR$b@,!lnnniieaannffaaQ077766nCþx/jkkA˯AmMmV( j_IXPTB$it`L2Bx5jjkkkjkjk^wp4:BIdBTL&)d*B(cc"L100xyd0xF304$5SH%bZ-I B!Ԫ:) 5L"JrT.I%bX$IrL"-ꔯ k``d0MLLLLX&&,IcإܼdlԓdyyyX*RAAR$ؼl...zy :N=l4k֬!C;B_###i4bzqqqO|xv $F#T*D"J B.d2R)HT*X,VBk][[tVc"4jX,nrZV%%:_'B >L[01abMLLB83 fddDPd2D" ȈFt ZV jXT*e2vͬZj4,.!\+BRTYDD"F M&mH"MRWK!D  :BF$2lll]L&@`0X7ٰۆhmE+iiix}ɓ2+\m9!J>#ƏI!͓d6mɅ ~駣Gھ8Bpɋ-1bDK_z.]zC7n܈r+wg͚uQ''w *p8No+**233O8!]uDDD\\܁߿?{#F1c~-BYh_j͛_vZݝ _vmmmݻ[8+Y;x'N8q;f!bcc  =zhtzQQ]㻝$-A#vQ?/[zzzFFB 666>>>PP(O>ҥK̿y//c:^iiÇDy9/Wac c[t|$m }^ӧʕ+wI$'Lt􈈈sQhO=q_:[WϞ\뀗_ BdtvĖkx>qKzCF_~;e*J{opv ӿcx+ OZطy_C>XvNK|kTuuۢNtX$g=zӇ=9{ի,Yx4MSzz---mbݻwYGuֵnnD" hOaaa޽WWWX,:wppppp2dBH"d/_Fq8I 'H...z'>|t@D2x`>?ZXX[ްaCttMԘHwPS1Y!{FtƼ ܾn``}/DB)~CFH%,~K' 8+ك׳R}:,wC|2#^iSvDD`۶_~eMة$''oڴq˖-zO QQQaaamv-777''ONNf2nѱ񪚚l:!@ QԠI҂~M x[[[lF=zXZZ7`aܸq;tի<|L8Q,GDDt@uS]Dߞ>k-_>c|Mĩ6`[Ojٙr ۣ"6e@];w2)ę_+-=BuJo<}, Cvu#?/ǒ37EV*}0#5_Qζx4~՟=L31΀mch W>oN_9P7oܿϞ=׭[f6663gλ%ٳg[.==w_^8qdj|6?wo''Dn ?cCZRrb]JON^uJE_ W7iւ&krG &LzŭwUK~wc]Z01,?'?[\m{w.bl4 nUc]ן4lۿ,IzJX$8gʗ9 y2u/9S^h|'>qqnBɁFUUf|l -M6i>6nyų 5`bGvm{c֩P6<{-704O~~# jz޽'O޼ysg:JLLs… dv ccAL&KOOٳg3}Tj Ffff ЭA#N9:::::9!$bHH$$חB;dЄ//G۷/..nɒ% jjj6nܸg[[;s3gNx7Kk7H&?}tĩg Op8ue# pd}9ɳ4!J B*?_ !$|>es/'B򗘿ݽBZM;NԧÖVm(y'ߵۿW-96 ʎv/i&3GkjaRȾϽ;#?-y ?>!T[o|!Vz_Q>>I,!n3}}pȿbKPv~WY=t:V,J&,|Zzx[P /f8zG#ZV_>SC5gkяZ^Z䅀}B:OG>0a\sKv᷋;/c]60L}GԾ$֭[?vځ;R({۷o߾}}4FsÇ<*55U4xTPPd{?+**,tʕ+wURR2{ׯwp#ngg^UUՑ~,YǣhBȘH Q? B(?=C?(#Ӈ9ybI$oE*\m̔RTs< k j6DB^>L%<5BP|Og̣w_~݊ /USUL0 wOXBH ,8چ26k12b kkJ1itJ΍!cYG'4y6^_͜HPՋrwBx<~a&:gk?BAͽW òvdǞEk7+na͇ ?.JnݪXWiiEvIBOJK,i|ѣ[IBB hOnnKvV[]]maaց;x5x0MOOHKKAyyyal!ر/FEEݸqcŊMio'FFF[n׮]g*3>i$''Gy'ϒz<7O7/߫gOeRccb¿c}VaNN{gLFJb}R@d<#g5/8/8!$ypOQZ}鎡Q40l:ڥgYϓBA̬ '344rpq300o10xG~;=$2BHRj5_}|:cɶFU^AVp\N#wUD2'+-q6s`hZvtpth$LL>1ӻww,%55u,VVV祜 .,ZbɀW^ l&  hV-,,񿢦Ft|ew@G]p8C AIҌrss=zZ &Nػwŋ?~醆o޲-m۶-]tÆ FFM Ux<gaw $tCC'9{f=ZW/_VJgHDCZ1\&EQAYoqqb}{9a-*m?wog=hzƢ;zc`>;&,wݷemlkB`Q[l&ɦ9Zɮχ4BFD)T\jx|3q(^wnEZLiA5$HawZVֶ'sΞ={zf2p^j{+}wIII۶mk&\.6?ZiiRtvvn A@GP_>񒒒N:UUUE&=<<=<ZXl´96h؎BsvuG w|`[ 8d_ktN속/j^={[W{eU?BlB0/cg/͟[^I1B&Ey97/6˷5rO>&tÇ_|yĉ3gTGEE5^.nܸaccSO%dW3} 񦦦o*DW[&lvXXXxxzɹsXW._O> ?w\ZZZwmffdɒ{*5ٺukJJʁ:fډ똱cl]';w2`G7=$B(0䃤G|99/[,87/U7#;5ҫ:R$UdMXYZXq\PR%!ԣgHM:Ң׍V8.. kF}ء}^9?O׌EEE|JvNe9}ߛYZ limyYAMu}GJ Gw`[߾r^!ׯi߮G_-׮Q_}ƔJ͛]|ٳgwǏO<ѱMdw {4??LϷi^{ee%łu .hsIHgΜ9yŋl6{ܸq'OLJJRuKK;v[ѣGsMNNoڴ'O=h'pZ73?w,o뿟 k /;Yzj̳01Ay_OJlY8?gđwo\NyOw  h(ȥSGFn ]ˆ#2dބD?<寛WW͞_bUa4L`ήx<ߏ}c?C"J_ܶ_;amI}ܩ&H%bI Ƨ˂m5U' ?7g kwx<~ɺ2d'Co_yGm\:en1}~ ͜[`%_sݺq6Nͼ|^<گM6mҤI-UVV.Y$%%e۶m#Fw8Z޶mVcjÇ|Jbo!phRܣЗG!&5IBlQ^mQ'6v[z6ܸdB |SDgȨS=#7C^A_o}۳C]ݽ~֕ u:Q~÷1~ͿCL026޿uE3BIT+/+kL!83f̈w8m)++k8.22J >| kݸqT*ddd(7&}'M#@p0G,̪ӓҊDW````` $!:tH$XϯxӧOoڴ)$$ͽtV2lʕGѳ9Er+ 94 j%ERؒmͱǷ6u)b: k)/+aYk-Vp8`"}F4̃fr3uZ h\&*Y;4VхZQ+oۛ3AQӈk-Z;o޼A䤤TTjnnb]$ݻ7jԨٳgHܹ{nvl< |? t '߮b?6:n߼'VֶXoHPp 6tԜVJv튋9sg} TՋ-"?C~zL?V ,pww_ti3}/\`4;8qĉ'}rr@3f B%%%%%%߿_&X,^zAM6DW^=dȐG-]O>ŋdk۷n#@{m۾}՜)ֶa}6aC]ϾؾjW4bN{|?6߿-XYG@Zrճ'ݸ̞7t@}T*ݹsiٳg\ѣG0먤ɓ'7n|rssg̘||d֑Z&A#&??KBzZfفyA3d2YtttLLL~-[Fo_jzڵ\.wP cǎ>sF" pC  4/W~=Qm>?0}Z/y_7>u 8״iS'Oljj###֯_iSa ,X0s &?q[%3DEE]xѸw) oxUyyԩS85Ax "##KBpX###ju{>J˗/700:`~7C._vŋ7bb2_P|#!m;'  ܯq=&O8iҤn V|Ν;m[gΜ_dr˷?~yFL7Z=jԨ+W4ڻw޽;&&~}#-rBjB!BH"T*Z-wD#3 <J1!D& NttJemmtZcJXb+Vh]л۷o߾s{"?ۿw@O_oVYMONHOIHIzT* :lذvIII۷og27nw8yu6;JL>O> ,x ׬Ys̙泠rssǏ5^{ׯ>} @ BPT*E"T*U*%U*2L *JD,KjN%JBBҤRiFFFd !d2D `Ѝi4J%t:L&D&I$I$dhF㌌ 6[= `W":t޽#GΙ3Rׯ_?eʔiӦ:Zw޽'O=yRS]M ==zz;B5 : B"5p.!{gȐ!G \zuUo"hܹ~mێí[/VVVoaTTTjjѣGvƍ+W4[`޽eee[~tIjWWWc_+**B@ BO "H(iT`ȘH$(JgӘhK$)c㚺 HSAE|ݭڪZkmպںj**Zua I ,EdE|n=ysD"Ŗ85L"G3Bd5@t榦FD56447FNAFIoh@i*YzJW*15*hkz`h=LftEbYV8y"^^^^^^fRTiiicccmll:l0.kH4mƍF:x`jjjDD_z/b+>>gH1bĈ#"Q_~nnnuC7m$yمy%fd!!!!!!l6a*V7w9s<V/\YG!H4z'v+((|',J.q H.KRX,JRiMMBrEF^#W Ec0 Ơ1=h &Π14:FMӭ-u^ҍiTJZU*VҨZZVjԪ:TRj4*Z]WhdCp`H . l@k #<<<<<!$HҾ>A =zt͚5&MZd L)^zCمuYsE544%%%eff޻Z-stvqsO X:p^ \,ͨ 'KC&OaHHϳmC>s կ_?KdW^۽{7)߻wXQQ!HBBB3??q{Rvv@K NWZZZ^^.*++WT&e2^ǺHd=m`,6f űc0 6{% ٥hTJeBUbuU]JYU+52Zup\.B! ťAa4srrD"QZZZaa!ׯ_XXX@@@;۷(JDDD_/ƍ.iuuuYYYYYYYY25!:)pvqq'pr8:y@a$l6K*˫K*奒2IETRp8WW?_@???___///kf0eƌ<.dŋ?~>޽{맽}/ƞ9s_}׏3^bʕǏt8b6#""jjjnV^UU{EDDt"gw_|y뭷8EGF8`OAx;{.ɞ/\#O:pᅧolVI*eU2qT\Q-WWUJMMz ]rtbj\3LyyyIIIIII!!!|>=s\r!.anYծY8px eWPPPȱ[[+tr BDe#+tJBV%U2춧TbhnF'''~fO`>ף?#WWWKQO8cbbStY__?cƌ75Ƿ~{…GF\fͩS*@G:޽{XQn^^~~L*AHdOG7Og7OGW7+p񭬠vxZ&UUJŅeEZJž"}DccݻwE"Qbb\.gXaaaAAA B&۷/''g޼y3g5rmm+={^N/+++++(//////--++/TU5au Yv<ޞ'`qx|gjnnTK5Ւ:Z"S岪jIJYuhNNNNNd=V}ƍiӦ-\9~ŋ>J3g{׉ܹsγgh{8p@,߿{^yҥ] G@D؂)ˇOBc0-,x575UUUB<>?(000z羾p+--MLLLKK@/,,, ҡYl_//P]#^:<<|ڵ5&`2$IYYYyyyEEEeeD"H$UUF;,=;,d3Xl&`&eBUPb)#F.(jk-܅b|_(|>bAEikkaÆ[:h/^cǎ駟~:O?ԉS[[o߾'\t/^Ƚ'Ovǟ6@GMզ&%%%%'gܻW\Xh4mi4_w<|{ 좼Y!2tP@`HARwMKKKHHx666ΒJKK[QQ`iӦuݍ[.\pƌ2 >RYUU%JbT*Ŷ++T&j580Yl`,6c`L6f84:JghPj4VҪUʺZUN!W*kjeZSȕz<;; |P(x ׉q ׮]6mڂ H$#z:|IvvѣGD׿/X0cƌw}wڴiljj:ujDDѣa bO#DQbbNvh:8ijww|GgK BiTʢܬ9f144$4$dСT*aa6 lkkk??0g>w`駀?Z_cbbm6|n4^P(r\.KPHyMV755>lcC3CbPt*AѩtFK; ؐ6T:֖H属!:]CAWը :Zei5jZը4jV|VRUFT*:p8]+jhYJvv_|T*WZnp˗G9yd'jknڴɓ[b֭srrZj# 4ɔvʕ\Ւ64 oH0 f'g'gMUT__cnj?~ԨQL9tP>x(;;{߾}*jƍ1>߿_~2 УjBP/Jղ]WS֩*JR)ێ@Plt:lCPit2BPl4:نB8J [*@$RlD"ƖJXY}BV2l6k*TQFVc4uZCs3NРoijNoQcAVH$2LbL&b2L&`0p8Pxر_544tl6=e˖M6m…=1dzwvN_<~ر?o+̚5aH<ʕ+ϵ 91(8t`/LxUUe%OMLU^RdM" 6q2[:@ݻ'R):thHHHPPPJ;}ݯ:rUV.h6oߞ{!{{HE𢩫S*:^Vk4lkt* kjJeNիUjɨQښD!$2D&[!leMBYd2BȚD"XMˁ! Wlh*d6cw75لi& !ט&PVc2dqF'TNRl) ͢P(4NS( b :NlmmLfW t8a0VZe2z[۷o}k6gϞ=eʔ~###%Ƚaʔ)6m5jӆ# _~9C& 4|TQ^!%丛q7Sn+j9W^2k֬qDKGzT*MMMD3 44ϯAJIIٿdZvmhhhGkhhXf k1 Y655cz^566644444466t:^Fcc!بk!BM&l-ȊMOdeeekK}^?a26L16t:@hAшD"`xpbax<`t"f"QTѷnݚ9>|YAb 6cǎNrʯ,YhѢGJs=t萏O'"x/ӧO|TvVO8zԐCI$K@1ywn63s7|sȑx"H$) DP,]jvڸq>.& )+W}tN\\ܡC ʕ+-N]vmϞ=[l鹳ڵk߉Ï;vƍ'Nz_~KW͞c5o}܏N4)00hO_z饞X ?~u:]JJJbb;w.]`0BCCH/J{=}'6nhoo߹{voSZZz3gΙ3vȑꘘ:Bt.!`0:x/77_~tBsH<^ߵk}|aĮG9vl¶%[bK}BG{ǶSvrlIiCF~?mi#J ~8pN,prD"jic&O"_~թS\\\,A %<<<<|#W^tҖ-[ARRR"mBBBx|G:+tŃt0E={[E?xc4mӧs|wq5|ΟBw/ѯ >ܛ~[ע>h s̱tPp8_____T$HW_8p%44444Y:.quu/?\$YJ}P̊+*++nݹ `0;wӶ۷o tDݣ<**jʔ)=:ѩS\\\ ֹrssg̘ёr&MԹ`}$s?|} 'w?./;tMsXˡ[2=$2kbzp?R.ں+f'Dg_zo4!ԤןݤZ6aLo{wnvrƜs?|hG2I?2|yXWji_1/r,+Hx̴jIϰ1'Ln߻n7:zo<53oO 1޿@ .”3'Fl  {ԙ?^@  uU*~>evFv`йKWw$>ğwN>;$$$DGGw`0Blz>++K$]v-66`5*00G((l2,Ydƍ xAD֭[W\s>_D$%%9r7ޘ5k F޽-YG'yfDDDH\<gU*U}}=,h|Ϸ鯽>~ͬ#θyэ[F}WW?H*/tHݹBHYP)jY^߶'fq|\YS2EqJOܶi)+/*ڶm[B52ɂc=lFCJw]}",IӁqK#޿{ؑG 1o^KsuʲרTěnsyײ Q+Oع~,._N|cKf%?}\&VWElѣ۷ol0"H$R@@eN:7߼eee[n>}-[.]T[[k;i|󍋋˺uN8a2v:cǎѝƍ!!!666霛LPס!GA#x3fgy #ǐ);7^5!t/%ԄہBwn FM}Y+pūoE>Ԃ:YU߯;#굚Ld_nc_8p|!d2nzya ~KC'`F}1rd'yq丗B&'/<6lVPCM?wpOɎ.nm޶j;<卷zHO<'"Zf+ao9tRl1{kx?8|Gk.ג넗_{!3b#&L`pŸ;2,%%E$>|8::#44?c|:,kΝѣGSRR6mj 6l߾W_8O՞>}… |>ΝCtDW^ݵkSN$ɮ\rN௭woX,&HvvvG@<Ǿ[Fu"aƥ4xnb\A}%:$ݾz*ZsZX[*mMxz!TڨZ|xBm[BR^ME+o;fs#O2uBx<~ˉodpwG͛gӪ/O#>NS5!]F{ɪ&g$%Ut&տNeaɵ?wd^ko;>#r'O}w^t|0f̘aذaÇy<^I Nwwt_~`lذaȑp޽GΝ;700:wʽxڑF1??ܸq|>$s 0d[:'5q?/Kt7)>pXlՓH[3-İyfwS[FPA},Hk9>v̇ZK f}Wy<xd'O:{S8;完BJ$Vن247W!Lc0]=};8xO{eMKjZ*jX`L0a„ qqq>bjȑ#}ݻ?aƼeee}YTT+Bŋ111رc=443fOu[y!w9|9s\*?7ooo߾JJJz}~SUU9V]Sc(:$lx++u韗yy4 T:CVO܉at!*qn8J]!m|E"(mT(Ɔf/XK6z|D֎.ilh@!Fyv8\\SSG-++UV&&&&$$hg DZlddE6mPL@f?֮]nݺ[FFF~l(..vw:vg6E"я?XTT4qyq8K# Î;t~ :uJꫝAT޽{wƍ쟓CP# }$sۻ 랥[*-hxx~p8w;d 5Ş !4j9V4L&]D&co;TڎP;B0nEg, F/:nuL>'k3\&yeM&SEi1,Aջ u֬Y2,>>^$ڵH$2$<<<,,Y]>|vڷzkܹ-7S_k.X[[oٲe޽Rl6#D+W/^ۧzdvZlllUUՔ)So`zW_}U^^_R(?: pBkkNoeeuBT)St:$@љ/ <#{丛Ӓ,H8%+#?mlB#Dwo5rGǵ8[xS"""r9BH,߿!TPPpG($IK2pʕVD8tʕE} 8~e^쬣7n\xqսHٳgtɝYZ䴿Z]]NY 96qW^}urKd#ǿO#a#eez:k  !t_;Ƕ-6l+/.X6kʵK&w"&?8tGy&zEnN BٟC_x'?ؼSW]ڄ/xm-[ە2oZWOZyMmv\llhرvikzXɓpK"j%3_™dщ"VRl0C.mn߾ұ?~~z…O>g^lى'***,p8ӣr%Knݺyfш2LǎYll  CvJP0 +V]\\իWs\Kճ ?s?0\.x㍮;Rw `V[YYNX G|;~Xx&gάVk,4ѝGBL61IB|+^|zbg1۶9p[o}3yښ{gNm ;;8BQO]ܿefБ7|v`v1֬7ZƤ"OgsyYq$2f裥:x F,6r[ħ!tQOk;tzfǚi;/] >@ t|NXL"/u&gSmmS$,ݸ}Vˤ<#[~* DJ joOΘ jIŕH*eNH"T/e~uL&SvvH$}vUU6lXhh?@xFյ"v޽{XoƂ ǎ;}4B666KWO^t… *j̘13gP^f5˺B.ϛ7o…ӧO81HO:رcn#=ڕ}$`0رc~Wo;8𼪕ݿScǍqX[nD:>tаCGonn~ך.]:uԞbҥz{###m߽{7220R y掗wU^^~ԩ7oӧK AټsΌÇrrG}ߕZ̙3׭[7vvZ@nݺv|&i۶m GѪ!;v{#a/x3#YdxȪ*v|4?Y) 7d;oD"ٹs3lrʕzxO>Duo<a׮]{xofϞM Մ\ҽk׮EeffǏ5kV:B}ǽu$7xUE"B($$ ~7X, #xq_ׯ_7,63',4ٜp{ˊoJy93f̰t\/xӧO?xٳgWZ|W^}…Z͛7U5fsBB{wӍaLG5L2--$i޼y~BaF199YVwclt?cٲe˗/H$6mO;=SD"ѱc/^9s&Ht\ڄtXXw}*3x..h4;w.>>>;;ՏZ/1W^ill!+V2eJlNOOtRBBL4iĉ,TVV\2$$dƍ6imm;3^{̞=?!ϟmOuu9s<=m#xIԩit3|ѓ ' ]%Ut/2[[[ȑt:`X,[[[Kz}zzH$+,,lÅFDDtNzƍ`4]x<`;vt ÷o&F J__'O :_;Jh/D"ڼQQQǎӰ.\Μ9֭[D֭[铒iӦh ӧO:u:77b NGFFv%<@K@2hРAm߾]޼yիW^=s+kkR 78m`HƆwғ3ӓ3Ӓr?v;vlH$>WLkZ,? KNr D"rZnh$ao[Y,V-AߑNB[ -&&&//od2YVrBb@uuJRR?OߪBSit֖D"[*'L @zP(VVx+@ C蜺ʖ"X,UbLR@$9v |pLg,ɦ &b3ٜ+5Z3 :Z.u u]ZY~e5<.W(p\,'I(::::;;}Zmbb۷SRRǍ7b bОQ ۷o7o[oS߻w?/ š,Yrzw?~ܹsRf̘gϞ. F6A$-Z*++KNNw^FFƝ/u)Bb{sݓmgo AW_QZ\QRX[]#./3 &s+/O4hP@@lz,顜$V+Hjkkkjj CK,9顜6p=|rƲ⪪*DR\\\TT,T566"p8מcs9\=`98\;.c%}x=FWKղ2iZ[J*[xcXn_ ÃdsnŕX"<ϱw^#<=׎si &\P?S"ξ#jJ]Y˫ejiARrLQ=D&|ǃ j> `\.}͛7d7ot =zٳ{Ǐt=!tuC D"8p`B]g@#OATfdd`yHwfdfebQt'WGWw'7g7O'7GWw[sPu<; 򲊒BqYqEIQTnnC 4h?-[٭uNC)JXRK䤶)J-,녹 djjHwr\=_ Gюg0ٖP++%*YUFZ%*B8幻x{zzz j^`MMM%%%utaaaAAaaQAl::v\O8|W\H%biUeD\-JE /N3\\=% -SH$IIID"1((hĈO| jjjV^cee˳'%%m޼СC]l6ϙ3gܸqQ7oܳgυ _ҥKG_)V@G@3LyeeW:yB'Љ8ZY[[:p`IfYQ-TI*+ \ZY!,,7 !{{oo/oo/aZ퇖xkB,%Eo 㹫2 Z Bd9y8{9yN<#Wqjlhx$WTUV45B<>sРADxeeebTVTF<wtrrptpts B#g0 rTVU)KZBȆBׯ߀!333)))11J9288=7JUlmmЙ%K­[v}]ѣnnn?*&&&++w;rHfft⼼ҒҲRNp<3>X-ȁǶtF*W˪IJ RZY.WbߑD K0f0/jnnVXBC9I-Jdj9+6' UR*W^yzn^%JBTW?~';`nQ)*J rK e%yeŅFH$zyyn`a$%%%;;;+++%5 ]=}\<}ή'WO;.PssSTR[ZWUQ*(/ϑWBLw߃+!C~길8H hVCCZmTTEBߺukΝGuuuh_~eFFƷ~TG-YdȐ!/nۦML  # {-)--))j4X<ϱs8p9<KHbٳC:ϐ&eB]WWH%552IF&QTWXO]]\\[8::Bɜ^o]6o555n*alvO%Y|y~~>stt5k֘1chMNNNJN{7#+3SVxww>ݼ;C#tڒܢlMG'A le9I'iZ\^%9I[,]bueŨz!p8wQkg{o+ $Kޥ RD.UQ)(H ( IH'}on$ =>yv̙3ygL1bĔ)SBasˋzcb^(r&ۥovOUeEvZJvFѩG={޽{XXͶtΩ 4zU\\L =ݼ|ܼܽ|a7#Б9i/S^_?=zu=885KݰnXQJJ`puuڵkXXXpp0BiÏ2;w|7|cΝ;wǏ~<غuެn۶… oTVǍaÆVG x+@MRVTTDJkEEEeeeEſ﫪DF]T0,&`,6a b)&Md2%S(*bj8 ZT):VTU*V4^K% .RJf$SdrVS,6[( B/|@ ^|E>&xsaI{&U$LQ5OC7E Op8Ck̘1f H4ͽ{:uoѦݾ}O<-//n^>~]xx&) ШTqqq)q/*Kx:x`ZΝ;o~QvvB/8?8?$'07,%>&9.&%.:-)^PP(A2o߾& 7IIIqqq*ʪk:vٳg7oN?D*Ι3g„ gn׭[wѬۗo߾edd,ZرcNNN#AeeT*H$DZDZ%KTiknT ") `$"H3B Ǔ) lBFHdHg1p:VV#dR BHVtZɤTBjh0:B&j5Z!LzP4*p8.rjx5|2 F) oL&Jb,bD"dZ>Lp8l6cf9eX[lD"`0N2o߾5˱ѿo*,(hA=CzݯKWר 9.:Etl䣬<ߵkaCӧ4T*۷oݾ%H ;[w.`O#YƜ̴Q )Tj}2dȐ0P]Yզ&&&&%%j:ڭ[7WWW}N?ܳgϧ~:fKp?~J3f\rȐ!ͺq޼yz7o^ܹ{W #o)Rj%Zh4bXժT*TZ`tؙPl6jZc2$R BHP:>B.ڊl6) F!'tB!!bD"LƎr `l CRl6NRm+ vvBRd2`hrpp6m/\'CB֧@0$ၷJA̓/>,ˡ zwʔs8KGΟ?…f_@^ܣ7,o_D>} :thLKKKKK3 B0((?00 n?۾}̙c͛駟1Mx'Μ9ӬbUUUӦM۶m[XXX5;ɓua"x:ŋ7\w0$GoѮ>|8LCϟرcȑ~HJJz֭[{}||:1tExKA$ m>xl6D"1;'G"7iƼv!}xzǽ llhzk1ϔ yggg{?$5S,9.:51N.880˷jltL{i#&NI|nюN .Xhv(Ӌ۽{ xg#KH"l@*)̿wjqA.@sr2jւ4uZgD׋㏛WUVܿy9rӂ-Zde͛7:O?p l6>|844Gfjح[{c\\\VKJJZ-G?#H4 VVVnnnqO9 SYn{0$QѼj;>;-/+ʲ3 %mz/ 5aޟMt䱽[tT ' 7d5;);VZ);S޼x/^h\nUXo_9{1gwױ !Ц`ГW-jÁs,8Tg\9}ƅ?p8 ֬YGm%==}ʕaaak׮Rwݾ}CۤA0}cΚ5Y7VVVN>}Νݺukfjj%K?nooߊHotf}tss۷o߷~#FycW&__9}bͮ} fZZ,\=ꖴU`asǏt5=|fs|T䥓n_VJQbyV_>D"4Z3;;Fٵ(@[ @g&-[GD  w΄97ë5׊stviYkS,hZΩd&_^8[yv힖pkiI>5oy ; 9|>qGع`³g1X@q… ?^}%R IDATKo;ccVK3'^D>:SįKWNqϟ*d#Owޯrr{kJϹ=MZ% Uj4Hz񼼤˧&84LZWuP}y;:Uĸ)K$]{s2R{|s;7fuַ[aiX L&?O.܄U[DGPV xX3RBPCW  !}ќTF-7yإǶc'vpORl>㧤Ŀ/qlo#'M870.*KŢN|\TtOW}AG!͝mrċGJh]]xY_lý}c؋Vo5彯?_%8 -}gl6{t:ݲo3fhAЫ(O.Y 2)5srr \Y߿f͚E_l\ub9^w{;tŤϱKѝ!IH*aEe:n V N \xHwn&F'F8\~Vcë[Ұm-AU|8no7Qp޹YW,ܸllnY`1ϼM FU^ݙ;lLr_\\eUoas;ߦ6޾C ȰT6vCٵo6uu=zu|:~?+ك;ܱw3G^;**L>"|kFvl/=ݙqKo|XT91/Y!lYYV:_ȣ;7X_5.3vn*/-5l R{ }: \*U6j,D"ЌaΞ=;c Kh6ټ~ac'u#ԱԵN^wꋧ\t7pͶV)6i9K>DzBF@$ʥm'{ l2QN*7W9<9bs O>_`: D")b \YV*EݿyJhݣv[ [sԁXvy`YG`!d28p 44o߾mlff˗/ϟ߂{_xOiu999!\x:'xU[Y0|W^&t {$Oo+S 5l%bsf懷TjPFJ"6Wd q䷠n=^unJs2fsО5Pt/W5;PyIѫ* zG rԔwv%7JBNc܎U;tx H<MTXXxKToր:{BJ<'ݽܬ#&R)6`hIՋ i/RIv5JH$wn׾j\\i2}AN>AtG GLv7LyhxxƈB;-b;xԨuqFnnCڼYz2'ֳY]Bb5?@[ @$tZҁ4IAH$%%|bdzds2iQ-hVR"lNJGZhgkfB3LZm2N[db\k]x/iWmU-4m?6zgYzm-%BVBFkvoĀ4n=a0Y1j5{k=?rp&k>]&?-kg^5.Ƣ"%VxtqLy~̓2 SFM`m:`֑L&;zQ\\\ڰYV{Ν3g6^lXڔ999 tN<&ƅt,c0Ya  pA=4ߋtKǛ !4`/.4L*BboƷYnm*qruGfתn[X+{ʐQj]z|!ԭwnoJ_z?c =)>bPOKspvt,MF /MѲ kpUGp`{=hضǫ7i\fLn8΍n^ǾѷX__KGѡZnݺd!N<̙Ӷ޿_EDDh.ٔ999ݻwoSo9̙?I%UI  nT !ԭW0ՙu'- qOꃺji2XR5Pz6N~7.T ݾYgps(6IdjMt7^4R >m<ۂ[:@Kp&8Nt,M15:8Y}|AN{>BKX=`huQANVa^N {'WOW/H^FYiqqx}}wŽ9o n9Y|ծ]:ι`999W\yun7nŋ]<`U C~~>xhH<_|A!2WV[:6!tzJ闞3sx<Э+.0ޒE_lX4u?/={rl +k.vtdwh!S\h~J?1Kgc<Æ/ZѲVlYUQp;gOΨrd}LV#3Gt,>q\0kwl#j1go m4mޢWEUoS fc|C6pયH=kpR˂o6ر@$vQi7ҔAIS#w :m?krt?s4v:[nӧիDGGڵ@ m7o޴ i|j^ģl"Ԃrp+2r(Rj}cp,F!U;R͘{ *eEiku2S&g ;f_GGFg4yo'NP(KGhqI;op,m2 O9;[tZmIa>XIiQZk̗sFظ1o瞎9o ^wnAϟk١Z޽{v9lذe˖u,B1wݻ\m[ӦMz>܂rndɒ fXfgwOKeLѳ,FgwD&u;f_GGlwe#G>CKGhzJJJ`Y\,e 屹6iU)%if+D" !d6?D"vk61GztJٵO?P)5ᇉ'Ο?Y:_5L ,h?~R޲cbbB(77յe-ЙƎ7nӦM#F8uN.Nƥ''X:4li#HO#:Pxſ`О/HItPĘg;̱X6{ҭ+5eǍ+ɴw^#Fyqqq_un!M\UU% u@̸\.h4"Zm^^Nٳ'Bcg8x}HdK @VUYqkwo'S++G- &L0?8e{63xc{ H> ,|*Juލ ёBy.\F t۶mZn]~,N=]s؇M?+/^P2##G#Йq8\KBBx<.kPHЩwٹy1{߁$2d 𯪊]{J|S;7tJjZuND V}4bg@]_Kt,>96&ѽ^&a~eܸqZ}g}wgϭtJ 'w~oZ$Ƀ2^&QiQ#G]٨Q {TTTYFTٳ=zđ#GX,֜9sڣTѣG,Dݒ233a#@:>,G.jB!ɌF\.7 XRt*JժjFiZRJED"T,IM&E?\k1Y,"d !DPtLa0$bD-x&.8F\.Ja L&Òb1B&I$DR}xdSN>|8NOMMx;w>}Q흜C > 4?kޟLz|/gTJ#""ƍW}j!ԕwҥ;w@.>𚘌ĸ_|x%Fg̙={;h4O>L&HX@0P/X :FUQVY 8`t7h{?}Jtpr ?8; n:I(%EJ\\4x |󤧧WBp֭v`XpP(ܾ}{{'ٳ' e-Z])Rɓw&H<ЖrH$WHbT*H2T*jZt&MRY.3`sTJe4:B1X,*NRLΠPt&`A$,;,I!jF#IuVˤZ+ѪZF!iT*NjVQduD"as<p5XYY|<o ڋ`~2Ta?"jf(p<"`J'.a6jJ-H4L&eAwvvݻW^?mB?ѣGϞ={yqqL?$?oDz.=9!%EjЫWOld UƃvW_h4KJ'N8{#Gۣo&''-]PLqD''d2G9rHmqqqLLǏ<|Zyzyyzrx6l.)IOMKLH6gϞgL fX HCd2YBBǏ>|t`ۺ " k!@Qӓs3sSs3r2*Kq8o_!aff/_}zo={vDD̙3[D#脊sss4‚rDZZ9X;m6V3ll,NtZLTQ&UVEeŅeŅj `0Irrrrwwwqq! z; n:Qۚx.[+-buJ?ee!<ohlcdddddmgO${xSҢ‚Ң₢\ !D"\\\64 3331_*jlhchhchl%@-z0h4"gn a>yf@`ppYf5=>}aÆ_Żj.YM/'Me˖={G)))Yd<6VBgWٕ/PKtRq8? TTQVRWY^ZY^swwp\\\:oSjyV3gl6g5L@ `2Do'\oRffNNN~~~nn^~~v%9:[;:8Y9m[+r:%JU^Z,UVTU嗗H%\\\\]\\]]ܼ===]]]_V^ATg#eee䖖`Ԑ[{[' 6|5/wMUEEzeYiyIQYqayIaIaAJuvqqqvvqqqqq Ȳ=zs.]]N[:F>L۷W^m?~֭'O6~\\ʕ+Ϝ9ceerxoٜˌҒ*gjb_㫵=h:XTW\$䕗cVl6'00׷m7X6Lb:K']T+N B,;VvQ= JIIInn.6sSXX(q _h \+Jh- \+k;; ,Q*DRQeyeYiUEL,(+)ޏ .......l6lIyyyyyE5G[|5O(X@as8<+V++*JĢʲqeEEy _耭FζtرgN4飏>񖎨qW^=p?ĝZ?ܼys^ZȢE|||.]Ν;3gZD#fs^^^JJJRRRJJJRRԗءk[7/9Fp8DוeF" T*)Qt"uu}ao+J*))?^p8l6 d2LF@ $Hc9\+ϊpxVc &bÿg4rR.WȤ L"*X,TIU2IXT)WacdPhhcc`kkkoookkkggggggmmM$-3EEEEEEeeeť%%%e啕5q8gY<6׊y<׊k\+&`l~#$:>N˔ R.IRq6RIL"$bQa5D mllllmllaƬD[l/Za:UTT̛7oܸqsm8pӧ'Nhqdee3m6Ze˖=B0 hLIIIyT(BVk@ ]=}ܼ|\-B"<A!LqvPL:f"Vhs2r2RӒt]@ 0 !,kݺuAAA.jHeIRL&H$I͒œlD*J%RN[7W `0TjXJI$23X!A D1X,<@"it:B&XZNAɤNj5fY!!4*A3*!V)u:B&j4Z!dccd2srr1\.B9pV|&JoP׏Hz9MBzt肽5Ey9/b_&Ħ%]qCVH.]0dȐ~FGVV֫KAAAk׮p8uhFRZV&)ʴؔd@"8edV \. ^/(Fd FNS*!TV375lpu˩T*FEx<FR8N"B.BX0 rT*FrIIIn۷~H!AL&cc7.l,\=VF"hZRP(ZT*ET*Vk2J\)՚LDJj5&I&}Vo8nTD"D1LD$,Bbd"ruqb Lx Nl2f566&R7<{lǏoͦ>H$ڷoߘ1cBBB)FҥK7111}Qof!Jx˗wݻ'9\^p> p8BF!7#eBlr\ wM"9lՋ iZmPPPNNhu ;wn+wcD"?~ӧJcC8nŊÆ kgYаaf̘nٲeȑ#f#Xj nZVViӦ=zX:f0;v .l=|bɭi$!!Aի鷤|< څ\.yknߺURRdhy<}:1D߀DxGG۴iwQcƌquut#呑?P(uD"ꫯpUAA'O=zpXH$ݻdalllvuÇ'%%}羾 _߿9._wv=d !tܹ޽{ڶgϞZ[[7TU4hLv3g޻h4wգn5UW6Aݚ 1R!5`h[lYi)ٙ^s }`ڶ땛F GBBtk3jXoXۺxzo₼OF?yLԥˤg͚nЀܽ{722233Fӧwݺu[ti~~~u5"n:.Z@.\2;;{[wtc:ݻw'$$L2oy%NI&޽;22ޛ9s$;77wSN={v>())i}```kڙ={v͛[M6~iӦ;@۸w?|%{U[3(͵od7.h^u5|G~ozk>/+ʲ3ꌟ%m3ciOFmε˿!tA=k]j4PeA=jثT:}f.\ڮOo#N.N.ߝi0=yp?nڴ)<ܹL>JZ:FZȼ<קOٳgw֭H:u`0`M6m̙b())n`}l^bEg:BVo} [4WBBŽ;D={,N ]v{2먨{MB$@GG*z{KLL`ac'qV rl6arkvfֳ S,\=s8ꖴUȰv;m p/xu\A-sㇾ:hF ?D$#ݹ~G\꣏-][삎h4GFF>y򤬬L(wٲeuĉD"H$\m{9TZ!C׶hp8ܨQBCCw޽lٲɓ'GMa09r.]`X:8uT~~p_ݨ {[>[;q|s%3Kfue)NAo>f}ϽnxuQVV4r̠c+oLȡC':- t ϟ?OHHp8{455ma+sssKKm۶|,XlMIEEEbŊ/1i7ԴQ||ڵkDMuuu```FFƲe&MԕvK.-^Kuu]]0&&ã]egg}G cyϟ=<+|E¯%D=]q.k93|㮃-{us"../[ȮmoBw:Ï˞nbT/:2!a5i,o6e>aڬ롧Rbm2{WN1!m>:GEB?NI,cm5`hSZ9!Z-Hz^ʲop@3Rn\]NPX5q)3NU8҉8%%e'^]8v MM~Ƹs|j|?}j!E--zYsDHfZ2ɴw?g?7`)))/ZȻW.,[o"ڹ1T5 :mREkΟ<򠥫w¯93ϝ:t@ DFFΞ=ݝNqÇ?egQRRZfʕ+&6l@ JcիWC#OyѣG555CBBND@{{Kp06egg&7?$-;#B{#Y\9},) XKYI͋gYî6>ڲx kj?LHKÆyOFjޭ xBEwod&a}mGlP9-滤;7ZvvÚ+ ^61>&FXXy*g\ޕ ?}8a3^&[;r9sG!DUxtzԣơd2C̪J3 SB-y?zv$LuJ^߸qcx O_R. .ݖ7-{<7uM#Fi3ΐd^-tn|ʇgGY5jԙ3g8&yO2e޽իW_zu'On{QHNN޸q#HlBIIQɋ^PPʕ+o߾|yGЍ0 ??}M>_oBܹsk֬rMWVV7ngM$INN$:T<)))bU!RSS^j*}}/=X,}رc?xLL[nU{N$| kD(X:{ \*(*)vpO:$D=5;څ_deDyњ G=:!f1\4ãm޶}>3DHc6kjݹ>x8,!bn^;w1˧8m SZ!!&N=k?7]!*9mӔF>s_:BI%ee.Ltu[Oiqe S Q>\d1k"^nȔgl:s+QhꨵSoէot?#OƲynx)??ǎFO C*[;5tzpppxxc---|TVVݻ7--m>>>_WL&?6l؄ ͟?^[[_~][eeeϜ$@D۷nmu: =wS\_&piik:':oI-}#ɢgLnlWX⑁M[4u⼽sO}16˓d.nM; 6}޼Nkyiu6R62zxtZ1p'2zYqFNFzAޛW)\6i}cSe«Bn>wg"D4񍝗 01Xܐzԑ??sj˧H"!86 LZX544z0Q.k6 mH7s+[W~tgmv.DDDL|=H$/^TTThkk43id2ٕ+WBCCwܩXvرcd7a+"" %008djjjV\2h :Cƪׯ][egg[ZZvrrovlhh001w c('fV6o^/^*%ƒ(T5 !Xtodg`֦w~ҏٴQ!,lD uuR ZMOqW) mܿ5gꇓ^ =qtv;')mSʟ.ji`m5R^0h8so5twR$'Fi пyNMژx5c^'|x͋g MA74pvuVHd MCTށIIIϟ?OLLd^^^Mjjjϟ?uf9Rfff7n8ٷYuօ8j!!!/_/^oիiii'wޭ_󇊉qvvVSSkVYYY AFB>N$@Ĩgv .nx553Kh<@72ibMF =a֒RT5QUz>:fF#S3PA^N>9&߲wblƐ0FQ5W(pr~6j=21{O˚Ңn[Z;m𰓇 s*/CmT*-.xK*|PuK$cWXB$^rrr ^r%>@'Ξ={++G;Αu̙sZYYu͌aaa333qArrox%%%p3Y((([dHŞ^CFOHKۦ3^M !>(%.:1ِѭ;0E7e\8v`YÚ8Z@ѷBY̚%kuv5q{n]3=*%獿~tFފΝ34&Q(9ۯF(/-yefijj(oK'C 4$2!TVZm/]aɬS]F8-16Ws08>~&͜W__fZ_ih j{ abqÀa{ Ң-+p7=U:$IZZZ\\\\\\YY6o߱cܼyA#lo߾=zhZZڤI̙C&Qg  6lPPPmlZiߪ,]]]#h/UU۷n-ZhӲy\.@]SKAuU]ӱGJ\u|y hvNҡ|Ü7Rc8rnhܬe ]ubl޻rF7mLofc/ҡ}죁uӁ 7\>7l7U]d*Id7-Fku]"Qvqᴀ:|?{aNF{71:ɦeka|ս޴묮l]w?A\CFOhs7$;$**B}CARRRlllbb"666twwzӿd2ٕ+WΝ;׻w;v;+}t֭SN%$$E>_p֭[&&&򎨓EDD<~?PWWRRRvC/Z1tJ`F/^\jU}}E+[BPQr+ c:TIp[CJ(4Ɣb -U-Lӗ݇p -z6)e _˪N,c6.׮,fMeK7PTRj9vu D쟻URnҥAAAjjjPUUkTNb2f͚5kRvyyy>>>P_)X|˗/%K < u+V7nҥ]6+**9Cij q#L6eʔ3gnh$@DZݻO,9ebCS3ygٴl^n櫿$vM"·Gqï]zhԩ[nP4L-VXXH$=<<<<<)qqqjjj7nܿ(DrڵP###(TL&:رA4J$ٯRSӓuu..&M|866ٳrwh޽n6l??@|)uuu?xdk>}^MMT*LJNK|ruuF>|c;x"...--f 0+nԣWd0wə?)Szv+}dddn:sssyGoL&{ŋf͚emm-8|rcc?+K39s,Zhɟ?X,:u̙3Nڮ kjjOk.0x]ɓTTT-mlz+**;FQSY*5+-fQ(!C1bĈvvv*..~Elllvv;Nwh_L& ?qΩa ((۷3f̘={62ЀX#¾"SJR6ᩕdr d2VQ]]{A$UUU;<;bqTTTXXXAAAf͚<%%ɶlRXXxȑt;w\pA3K߲eŋ۵wyN 0x]۷O>KHLDɺ}_{''ctn4NYY@su߿!C\]]"ӱH$SG={$%%M6mܹpi,}dnnoll,D"p8@(X,PXWW} .+ !H$b1ÕdZ͖J!PTWWJNeee- =`ǫUTT$"FEh4,@ p8, KRPPh!*H$Lp E{S;w2dƌ\xŋ{N<oSL={v {wCeff9rS $<ե&%%%&&&&&HRM/ ^VT#|\HTSmNVaޛwoJ d2nUGGGޑd %%%!!!>>d꺹yxx888|ki7'֭zZYAAA```aaܹsN D"rkkk9r\.D"6]WW' ZHlv}BE(EE5"QYYǫUT"DF4D?Spxdls5(Tl'}"'HB"HX5r,E]@\_ux\}P$|TqB<6 !$si]_\  EBX GD*JbL4uG"d2'D"ST*JLRXӗ:F_7nxH$z{{{{{c^ߎ_~eժU&LO:M$M6m&Mj?e>? hGЍp8䬬l6116eiݫU.P__S6'(?BDѱ_~FFF+((HHHHLL|T*ussswwj9~%K4VAVٳPZra2l6baD9Zr>\LEED&Id<#)8*OPTTqx5DVUH$5QEUDxULjJ"I.-J|.!u>P/xuuz`L\6^( "Q_'DB>?ғD"S(%%ihciIo/111wIOOן4iѣ{G˗/8p.b͙3gΜ9ӦM~0 =-[ v}lmmťl]]Cmˠ D׿yݻwAAAP UUUa2kkjZ&٬JPiD2@$HdD$d L!D@&$BPo"7Ky\>+q|>Or9f MG ZZ2嵏RSSsֺN0۬%׮]CBB:P8q"""u~p8AAA0!!ar x_&d TTU M LFںt]}C m"OY FiQ9F<.!--,,-,,,--MLL͟E&aFt:]əH$:zhxx}}}T#XwP/ Hڲ2Q(cjkBac2K'Si$ L(42FRT  \6aq,.,s\6as٬ZfIt^.T*MJJzALL J=zuuuOwgϞCt555s}||:eS.] gΜH$@OP[["啕1OUTttuzt}.@KK7ց`_c IDAT -q9UҒrFQ]QVVZ,{J=B0xcyɱIII,K[[]XR{Z___OOOy> >|uˋ FiiiIIIYYYQQqyEEY{ F hjki455t545ui4MM Unêe1++X5յꚪjvmMMeymMu$EEE--m-m-}:P__АN| ]?ѣG###CCCU;ړ'O._܁6___ccc??NAX"{QXXXT\(-jikjkkjiihkikkj@bd5,fuuEymuUMueMeEmMUuEQ""{bܔج,CFbٳg]A$_J}}}aaaAAAiiiqqqYYYQqqii)lIS[GSGOKWOGO_SGWS[W]K't ŬeV3*˪+ʪ++JoQpt:P_nllLӍ{ձl6;**ÇYYYcƌrM_ح[]?{uuy,Y2q3 @,رDɓ'zyyuV0# ’򲲲J{khjhkkjkkjkQ54 zrٵLv-Ŭj,fmuuue9J"cUUUu uuu o>͈Fw_GDW^%'''$$H$ggRj>T\\XPPtq#=۷o+q8ܷM2eeeZotT@LfMUEuEyMUEiQAMe9Qx[nfffn.xϟ?OMMURR8p1cfQwޭ^zȑVK={lg՝rӦM[fM^zwܹ@ @s`TTTTTT0JQ^QQ^V^VVVì5Y]QQAhTu MD&7 @3u>s|.ͪ尘Z&UozQVJJJ:t}:]OGG@[[[_}w L&{]RRRrrׯ\]]lmm`w$ɮ\ryKKKGS5>\v->t.X7o1!FztX]SKށcI$2FYIQYIQyI1L*"jj-,lll(˗/_~:d/6b :sN7WUU5o޼˗O0|\B"ڻKݻwҥ Av55555555TVU2̦cH L!)D@dB$S(TD$S$Fp8<'Q`P  \n/ \r8|.>q\q\`7xMikkiiii~@KKK]]]^ :EEEERRR\\\ZZZ]]֪ϟ?eGśGxYYYٙYy !]Yo ИnhghD70ѕw+XBRiqYIQIA~a~ֶի\2l!Xd2:D&Ϝ9Ӊ'eƍ***kݴiH_:+hG6f9bX8,6bYl,WSHd @"O pxL px'H۷oSRS332BJʆƦ&fM{ZXYI2*EyoTWU TUU-,999}qٳ'**r |V;vlgbOnݺÇw[T:y z{{wV<t#<f B%l6ϯp8<b/8.˭x<.+Hx_(HL*9h 6lck֬qrrڲeoEEEǏ,qΝ|˖-JJJ۶mx)H<&HSSSSRR$I^}>L& ?y򤆆ڵkmmmFϝ;wUyGbqLL(""KTսo?G:zUJ$y/^%Ʀ'Tɔ5n8 yAVիމ WffﯿމÞ>}:""ŋH>>> .Đ$6))))))o߾J666jj\%]ee}RRRh>g{k=|fL-,՝D= şTKW޹G{q݇:wJJt#'k1u+{.vHOih: x7EoƦfT20?'-1.5>&1inaw?k.뫬o>\+)))uRt֬Y#FXhQ6\zӧ:1*hGd2Y^^lUWWݿgg>}hhh;+tt MMMyG5(}@#?~z:ˀ6JD3 tѻO\lhk^sy B3Gut>ݽ=#!-m]fuXܠl]K,vizľ?>:z徽KP8ݖػr vV}nsªC>OE? /5339sƂ Z+D"ڵkL55吠(>>~˖-aSSS׭[w)pҥ{]tCVet[III))),D"9;;Ot:]@ #888## 6RUU]h~'(}W?~ĉyyN l1{ -my;Oe2)ʙw.bk!IsmjkN62hLsݹ|≐Q>ih rhG.~GQy\N3`1K;{L&cVW= V.:s禍ҷ婢R-ٯ^>};v5kŊ&Lg_*%%%o֑D"9qĠA:7!#++e!RSS۹!@Sߝ)/_{!daa1zh''>}p8y3d;vL&-.666ǎ;wӧ|~HHH``X"=iږ̭Ts&_ck ;\f:'yjj!4x8>nbGM1gAO ؉㛶߿v҆Y]| t{v*9>/+Ƥo [_s yGظ][}C;+7:ؘ'_n0g/B≐;ږ& !ts)qQ?if-6N"QةC/byv~^Zc}Q/ f]=o݋޾6pyfoRI]&SS[!aT6NBI7..'[(8eGǃkxyO9tD26zҴѓfܺx&K8|f`o;q!IqJJNVcښk^$<Zy ?`Hz)e/"vG  ;AmMM],%)-ly[S`bG-`hjn9.5k|ۼSvN0aןN;\rM69887Ht1ctH$Æ  NNN4Gߖ/_fdd)((XXX8;;ϝ;ƆJ;oX,t_ebbrQsssyGnMKǯ]Jnܸq1;uj.aB\9}L*~7m6V@3`Sb sV`1kص5&5"G[VϞ(.X|ufihi; ihG>޹~L*0m6B(cE%[:?a665=.Ɏu+UUq#öˆdcj\#J zYqyS*eB,BHK[>Z؝\ݓů!G>޻uk/ ѣSN-\pСݺuK ̛7#7772ܱSSS  zfFVVVքʯWnnnpppqqyL$@O>0`@pp%K.\8i$(}@o۶m{!Է{WU0J}jhjfMZdB(#MHs+[lX~v7.uE#:9>d᧢4.QVQ>u+BSG!$na~ru jkp&$(`1,ѧgcģfғ0'< -ع@$!^Y8|BH筚5I,nh f;V6fŅ_s2\C? Gwoq,|3wњΧ>6'L~#|[ǖRMz{/"i}Z PYV̇pw9}:4*2Q߿̘1?p8˗/4sG.//OKKRSSK#d#555y-jhh v횥#GБ!6yͦm"iqGw+(( &`'j:Q]4Z,g!$Jt]V50qOZtZG#!)n|5>-1ajaY[S2r ?h k#skBK .ҴO*"]Q/s+G}磥j#P }leZ3GII!$J|ۆV`L}jw:v ws8}`5JOO߳gOmmʕ+Ǎh-ZgϞŋ/Y7˗/24s4CFOxT;'ח /\xZ߹|NI/">UF&E= |( B cS ܷ;My~K OxMNj`CFO`1k"H/{*%f5MK4US KeeeO~olڴ'^74 I%kǰðģ¨4#F7qXfӱft3upu7h^X-|jmlBFңcq85}c!#3Z=M5SaRRR^' }U߾>Snn6oJݺu맟~G=e2ÇLOOdM@WL&efffdddff(((w$I1TWWwp''ݻw;"a8>JJJ LzSoҒL&Dܸt6O3YVVaE= Oz?nhG>A[l2fާvӯܐ'Z IDAT\AA 7nhiiyR҅ 455Ǐt-*-- u?@۱촴ׯ_ B*ڷoO>z&?rLrr}ȑ#{ҝe5> GtNNNeTcDugb3;GW{7MJl4@|t1VF =a֒RTx쭪* 6NwΦ .c?`|*D-VY8/F8X§?b`b*iژѱwqM^$$Q@Q\.hNnQ+w[pwի ( {@&GZ.?*|? 'o'>g]/c>6w硞3|gxtoPΝyފ+V8::O8\X7o\E vM777GHKKk6mL&xzʕ+[noǍO?{yycƌ􄪣C&ٳgʕу|}}?bĈ]vZ:#>w3fp[WԨM28Yʃ[ P@<vQ!IJso{)cw 䖕}*X(PojkȲb\q~LON5ެQbzT[R[R_KgDjÈV9uxoo,;GjaCF}㿹{xئux ?qxԹaXX()^i[c>6u};X4>8?w3f̰oy/_`0ZNՑ^ߵk&>>~ 󋊊> KD**###===##իWr4ϯ]vD"9۷O,]tN|j[/f͚5k>h4ӧGX2m_Yr7ն5K.y|ҿ]z9{[}1tA8No[v錐y'NcmNM|pn~/#Q#fն=ocطc7)3Rh򒢫q'ݽ5ft;z{z㖕up"Sc$%y/ݼ7fgnn>9jwx<32sq9RװI Vnx\&b~X* <}:(gNj455}O!=_ϱ>f?:Lz|O߾ۛs^Xb ,yfԜSۿSOHHd jp4,۱cG#fG-P(|UFFFFFFvvJ"H>>>Ǐ7?#40;w5k9BgvzŋL3էO{ƎW_ZzDT KS'(4un=S?aS! ,X޺t6-1aӾ9No282̯K׆B>:|ݖ٩GٹLX2sz;NKmnm1D[ӎW6ڰjױs Nc7hW}۲1: ϣo~v֐y@=@$w׎u˷ 7̰,bĩz~c|;X62-?릫gN9r9J˖-S(4歟L&;rȰa\\\"KzemmO>m׮] h̚g[Y6X<<<|}}4'O>}9<<۷o f>[L&[rett4o ~D\ŭsA,ʤ61nbjJg0m #V6f{5333 eƴv4릛7H$WWr Dc:,ϱ1N#1ғ]<F۽{ĉsvZ;v89T>|ڵB=xQQь36oܵkݹs'Gi%KJ?v0-[D2eɣIj~H^N^477G ܽvD[{GSgg9:.sǏ>u֖lYfAR]6++k۶m-YfGnLHH۱cG ('''###==TP(___OOO///OOOhkډ۷ow544QH09.{\nE.7`(MS?/[өˀazR;/|զNh>s4W_}lEYi^~͜\._jUEEŶmZT#ڵko(3cN4AΝ;GH$zezzzzzzAAL&-3p8͛7:`-Zht4u0-Z}'O^xQVw oPݼڛ:5j$';Wff.n_ n5αըi |tfIa7߄L4cǎ&G",_\ l۶ѱeJNN^r/ҩSݭ[?~1WZE ~G#&Ghsrr t:6]{g3w!̀ݻ7!!aРAs̡hzb̙3-T*vڵk׮^Vl9ֳS. yR)O&=|8#-YPt?|@F$XB*n߾f*wh4?uhe˖WT_uhh_~iའ)ܜׯ_h4e7N4V{ܹX:ֹsgSg@cT#G?[n666Bz>55߿/ ]{w߭5uD*HIz'^>ZSvqqׯo~lgggH$ZlR_X,y:t&j_ZZOݻwop5k֜:u1=AaZV,#JB@I$FB;_"Jkjj>i:ΛHD"Ch4sss CRBx<4>̜j7Psqq!ɦN4={~ĈX,\mGJJʎ;r9>jiiiݻ{"D&{t˯9c4-\&Lx9YZóoߠ}ׯEmdV]]tRssm۶H4mڴ#FL>8|ݻwcccq****==}FL G ɿR@ J BTJ$PXwP$k4PVe2BH!WT*X,t> )X,̌F!,-q$D$p8:bi4#$ҒFYXXPA BPT'dzz0'''''J#WWWdLAQQQAAAs΅0Mz*>%tϞ=~JJJJjj֫W@ zztZ:S@sEYϳӟgg<|^(TjNu֯_mUUU˖-`0۶mc0Nw޽~H$6E|F3iҤ#GN21qNڿ7@N"%BX,J"@(6I$RT(JQh43dFѐ9B17sss"b$2kA$B8"Q(f LAYp8<!D$1XBd*W@kjjBRHk5LR)j!$Jt:NI!ZT(jjBV*ZT *5jB.Qr歶LDB)d*JѩT B!4FQ(aUhJu+ d2FnnnM}|:… 111$ih] SSSRRR_jKKH/.))xU!deeݹs.] <<<AK"mfmmmt!''gK,2dHM?;v1w|~~~F GLF p\WQQruʋj>_ 76,PiT:LIJ$Id BPi$ D)"BPTZ Ber L*$D,JdD,T"R\&DRX&FS7Ff0+HbX,֖b1LLKhrsssssE"Bf*<<<<==t3իݻwL8Ѱ!m^mݻK~wIOOOKK{W^eek4 cIZ^_QZ\S:(uI^N^N_"S(^^^^^ڵСC@@%%%+W$[nmd5 Ɩ-[n+VXZZnذ1AΝ;nPxHҢE<^Ey˭23`X N1(t:JT:JcPt N3t:2D"EBP "D$bP"HBX( UllLbs8uk8=nҜE"Qnnn޿ ]]]=<<(JZ‹Ν;/\ܒwءP(]YYYffHzzzFffQaNds8Gg{'kۆekqp0 V-+-+*(+.,-*(+.,/.,+*!خ];www____777771GzEDDDv"""y~СCMK]YYٴi6ln+W$Hk֬1VbAPxt:]AAAYYYyyy^^^Ҳ2~uZ6Fљl[2fͲf)4 ֚68<޴'Z [UY! *ՕR*V5Lg0\8vvvnnn?-,,>i^Je7v4[[[gggCO#ggg6 l}n޼yaN7{AV٪ѣGXX>ͨ6ܩWVVB +k#cĶs`rlX &|G(j ^E[-+-/.WTJwquuwssuuuuuussswwjK l_,[ Ś:wr3f 2eJrgB;vlXXXo#E.--)EV,6frl Yٰ ߍy WQ^VUq˫|[VV]Ui ٹc28充نbJV<<<\\\ F...d2t Z}=~xgnw`,͛7x`Sh*jp%Bp5ŲfslX,[;UAkA,TUVTVWrU܊J.˯133wuuuwO77kB\re_ٳ[rEڵkKJJ8tQfÇo'11}izz˗>!Dvvrprpvr`;:_>H/|]SS:(uyIN^^>>;wܹSNk=/_9r~ [P?h}$PTAe%[Yɫu1TJgit*A3(4zmeF'QDDnH%bT"JR?DBX(b@"JDP( Dn/h`aa`X0m8[[6NuQh1j?z={:ؿ[=JRn;vlLӧܹXǀ#h㪫Ҟ>}:'GZ3Y>\<<==htAj07(?uNanW:Ζܩs@@N:u z|o߾ݥKy9:::#Z;w,\ZC:|>_- ZX2JPId L!DDRB"S%JbUI%jJ!)dRJ%J$bHo]aȤRD"ҒbXYY[YY[[ղi@PLrm\.ߴiӋ/֮]ۥKS999 ,XhѰaÚt۷8pqΜ9s8̠N'E!oGo?o?/,[;S ieYO3g?+{TZΝ ӧOϞ=I$Yh4gΜ9uDZ`A``3Gf|H$ bX"%jbX HDVBYpDXXZdda#Q(8<xIddfFB$ ܜ@$a-,p8%gaa'w1ZHI%:N!ijj*Jhj2NI$!XTV)rTV2J.W2DTU*HVu6頋D&S)T JPh4ART*B0ZYYAT^^!7net>@-\"22Io['O^pW_}P+VP(W6JbF^D"!L ۹ 9)䲜Y^>O{"K׾A} #z[o߾ &L8`III&44O>NޤT*%)P IDATD"J*J$) R)T*\.D*J*JRR)rB *JPhjdR'`0$2!DBD cAYp8}:4uFRжt:H z^"h4\R LF"zPD:!T* E!Dj(QR?UM!\RD֮aŒmFPX Bàg$KKKC j~ Bd2 NQ(,K$q8#u#6G8p`xx0>?cƌ/rΜ9M:F2eʐ!COP?ɓ'|<(</^w1cƘ:nݺׯ_:t@ 4Dwٶm۱c_-믿ٳ('#h5Ҏ;v‚&۶} S}qֵ7JFPIj |رc[ŝUFBpyyyW޽X###}}}zPf͚Fj&L?~|HHQOG #G=z43340xLa|ק7j4=kö ^$ʤZCfe~SlO.͜OW/@$x*#-/-Nx3s@5h@ZbVڻ#kw]za5i7o׮]ŋcǎ !###u:ݢEzmt """t:݆ Zv <o֬YC 7o^Sի FFF52ԋ//^|QGGG *..޲e11:n`CLF:={[hR׽TPo-y{nY{w>5p5Ѽyy蕸'n>vrxݻqL+&Isx{菵5kJJJ8klRRRPHLLԯGPwǂꪓ:xԖ=D"v )ֿm8:pw'L̡m[M@!\_tq֭L ܹs̙39'O?e˖5Cݼy3)))22 7J0(ZӧO.қ-\SXIpv}LFq\<mVp~ 1Z1>3諧IS׮]֯_O$MK]v-&&F-X`С I <|Ç׭[oڴ)33344tNx{=׷|2B߿Cq^z5>4 @ "f̘2se8<ꙓI_F6GTq+Vn]KYsÎSUQ(}[fD]:s\HBjᨧIbCFY8O|iI ▗}=z;1|c~oǼwv!RyȾԤ2WO^2j\%fp`O4ՐQO<1{ڂXֹ"#-#ٯJnȨqM}9<6wYę\PiQQf>KPioLW"s()?<;#d>Kt:7װIus+ oܹϟkܠ^x]PP_ɟ֛ j[EFFΚ5+44ZmOJJʖ-[xݻ===?ft:}ƌ0ZtRppDb҃#&NE=ON433OytK ГwB} Ud?73 B(zznYo8!dRIfŧc0GwnZ\wA鴺K7FB'b8a+lo|H63+N\ܱ1iXby+-!w^oI$BZ`eb##}w)}1()t\w.מj籴Ąl}}߷u3@ü[W_븡U {rwcGx@ :O*:u,kÆ n4߽{̙3-Z=N l޼ŋs=ztk,5jTlxb޽"77w֬Y G"߿նRu=JNj1 :vဤwܼ*H>L*z k_K"Sf\:#$!DBcjZ<} uz{!<%Υf/Dv̷GB͋g f(A_sq1 57 Kc))s4d'+\<Bc9m UG!Nb%"A&:+k1_#IЇwo?>Pudw/m96<ؐ]nt2\~ĉ .e˖ӧ5^sԱc={]6(((,,B:)4DFFƦMZm:th5xî]h4ZlJMM 3JdD#h._L4kS'i~|ŗ|;w}K /O*20~w 'K߿y5iJJDd0;x}Ͼ󍑢zcuҟ/9`!MM׾_ շ.x^:EH}"XХ{͆w Z7FwwZ͐Qϝ;GMٳV>}#XZZ :^QXXXϞ=M>˗=<<֬Yd2MN6YlMBOԩQ%$$L -˵fMȧeyJ>k*O:ٓGd*M* ހ !Dj9:;39v o|cD."dIdBa4LSu H_oj?Fo]Oܣo㾛kO `׿ l)Dyޣ v}W*B ,z'9 S!ɳt:L ZZ惷c1*xavNΆOMpuS6l[ e7Զ)UVŭkӧꫯ&Oz􈈈G၁N rʡCh4Zddooz_~P(fjIO>٥KD{1֭Q@V3BlD>Y/3|@ :@@"M0L|>ڶf?OKM@>gb#3y+־%4!tN#hy.2obsmةN-Я+1l7yB_'Zg#~ɚif=dƢvNϞM>{ԩC|T%Ϗv횽{eG׮]kh}4c h}4iii۷oWTk֬ 2u:}...6i\\m߾}MT̟?(1Zc۷o%yaD3(4un=S?aS!{X޺t6-1aӾ9Nos׈kCg! _ۃ=~dBk{O^ҟ_)B789ݱeeX`^Aa?8mnmA8~ڑ*zۆ]V:v)33߾|ͫ8<~蘉^5;^k"%& 2d>M;2so~6gBLؼ챣rY qkհ9b\Z=>s &jժ>}:)@ Сî]""" 6{lb+! DuV```xx80uF%˷lҭ[1c4ۤ|>ƍs177ΖDnfu07nL<O$w1=D\ŭshiX WQnW*ʋD+JjJg0m #V6,K62{gP]$˥H5WS:… BY`A=Lq/~G:z7bcc---p۶m;v0J4h (<ㅇ8qc_#h3ԧ v_oСmIHSN]xM4iذa+@k׮B#$vYXX2q6sΝ;7o޴iSn޴)dɓ'7nʔ)F j'N8q% 4@ n+/{0}Π_[X `,/ROy#"o:z>$$dȑILђ%K:wltς\.?qę3g<<<-Zaꌌ?~ssq b)))+W5J@h (<ٳgw>~H<|aL[ŸgOe hQQjs믚cǎ3X_m߽{7>VvMlfffꤌF-^XPDEEYXX4ۼfԩAAAs5V_~d׮] G xG̴wr=phC:u6߿ ^g'ܾiT*m)ӧO7u^V~E"ј1cƏOL%߹s'HG@SnE"ф &LMƞ>}:**ť9qΝ;cbbLQT &L6m̘1F GК$%%9s Y*GЀHMmVy~xzqa>jaGn3Nvɓ':ydc}U|>׮]=6l?1ƒw޽{Ϛ5_FFƒ%K̙3zWϘ1{ƊaÆ'OZYY+&4@u…/$&>637عcص [(Z&+GϞÆ Сl z;߳g)Sxzz:)@wch}h~RT&d2@ jX,jBPՊD"C ~P3$*X"hjBsB!b`X2$!O$HDP%a(Wb DI$L&H D"YZZ>Syyy[bb̙3LQS?Ӌ/-x͛PP?~Μ9Ɗ Gv=x刺x]<<};@ L#-N-J<;YVsBaدoP޽ ___}]ZO::qDcDZhA IDATdI[ФD"P(H(J!RL.IRHhd*cPi L`"x%L`d pʼnB#*BIdkA Bx?=8\L*t!XzT,Bt:Djr!TV+rJT)*BVeRV+u:T,2DdjJTsR LgI$D& PD&tD`pJcxǏ߸qbM2emBɓ'cbbvѾ}f:--mٲe;v0⭭wݲeӧ#h$ÇRSSSJJ]=|=};xu`* gBdeeN|3gbkkkmϏLLLGZ"VUUx<W]]-@ "H(*ljI$ F Jx@$Qht'$2B%@"4daaa(2.JFRerLKŢ rD,VeJ\KDB\&jjuCxAӭ Q&dذl&d2xη8uTbbôi5+WΝ;w̘1?{hh(D2b#кuJ-[ H={$99';[Rit;'g/7vv.n+9s^ddUUV lm9]tڵ3mj+WΜ9󃃃ǎfM $6OVꊸ\.ǫUp+xUUjS$چBT2NT*J*BQt2F)4kaSbT,DPbT,4<TW׭R",&b3YL bX$ckk9&SSSTGG4ms<o޼yݺu[lYɓիWGEEyyy+L&?~|hhСC s233333_|Q]UގnNvvN.Ah4nYiYQAiQAׅ%!Ю}{}||ڷof|>CQ\\P(>|qX,eu[͙3nf)..++++//ioRi8 ZYذlYl2Fmض,6Jh6l5Z$KBHX]ɭ0(UՕH"VUrkHJg08ñ?]\\Z6d555w܉СÄ zh4pRgϞVϟ`06mdİ7oތ?dЂ@xeFFFf̊rS k{'g[g{'3z#'WrJZ-BLn۾}{~]h47oŋJѣǍGMrwؑh!z}aaavvv~~~aaa~?Ox;Gg#űgrl-cG$A?`z^PūUjJ +Jeŕ:!d9::[eeewXKeҗ"HB^b-y-j41Fc7&bMlQL쨈"RPea-c? 6E~<3wf=3;b=s'w=uY,V^+T};wܚ5k.\^S厬.]ZJaÆ͜9k׮u-C*)333777???'77//O*P;VNvN{$G  Ve%E%e%%"aqD$,* $rj7AYZZZYYqiNקO;(p;wrܙ3g6o|@2rFcbbwtvpruwrwD"x$b"{IQaI0qAܬ LFh4kܸẘ%/^xlo¢nhLҿ(ܼysu^(**j֭;nndܼǏ H!4okkkllmx6|k[{9\>ʈ'oI2X*)Jĥ%%"TZ$~C ի@ÀG@"$%%%%%%&%=x&,( htFM\<x4vmĭQF!w}b"""[#08Z]\\\XX(j.’"NW?Fpy㳹<\2,`PBU*BTRR.JʥrDB-H2lh8,>PnܸqᔔooQF4)T]͜93 4MzzzRRRbbbbbRbRbDŽ[{&|ݛxz4\RVf?C~vBn,y󀀀''7?99ѕݻwoժy;D/\0==}۶m<(1ܸq#""b֭umii#͛סC:N OriiYYYYiYiyYX\\lzd`8ܚiI,ܜdY4:݊4`syfff &Fz9Z\VVWVVT(F&h5UJ\RTTRR!W2RP5UUOd|k5ښ[Aj/^<~GBCC oj#֭[w>}|W dff޸qJefnǿ?a3t:]㬇>H~ %#5PH Ԟ1#._CݻѱNA;qĎ;VZhrGvvv-۞Og J:qDQQQΝ ҤIcJG;v(}P;Juk11ׯ -,6i7o@ꓤRݿ_cjjݬYv¼=X,Vv:ucn߾=wq 2X1P厶mVOOngg7gΜN >2J,WUUrQ*j4XV !DTT*BD"tZV"B*++JBL&h4z^"x^sΙ3gw||EKAVVƎCQZ$vn&ޭرkrr2 رcpp>ڳ233O޵kשS+^?qD m%%%#G\`A۶mg:#x'N\pҲO> EtxU>9sff͌1I$sE9uFT(ttv حEpV7cGDz %έ1ѩ &8ݻO>!!!fff)//2eˍ`;wzxxmϿÇ7E ?ҥK'Nx𡟟7 ׭['|Ǝ^=zcb4nک[hnM}Zw=ҹs3|^{}2dH޽t32J5c Byf6m0rG ""{/Zj5y !D"XVV##UVVڳ[a[hCW?Ue勶s/?H?@)˶νhIm}Zt筄[;b"~1>xu5/mYЮ-϶15zQ,^:yIw54iرcWڿ-[ֲ1i4{{{Ϟ=;߸qvQ=̚j111ǏOII={vXXzիG7oޜ9s&J{&''gőNMa\Q"s^eǩÑsVo ZLkҡsojЮ-=϶ԹS#}_γQ*䷯_ٴlO#x P?a~D@-W^k8yt3>#y9~1aO>[g/[|'L@BctRddIuDE"ʕ+gJuҥѣGyuGDrܹ6mڬ\288ì 2}[oA#xoTVV]vkt;Ԉ7o2w !D ME󧹹7ҭ! &}> lI/&}>c~rpffAmLY=I qJGrNtF̵ BeRj"ZzmGoķmws̅Sį_O+"≉IN󧏧܉節6ajj䱙1534{s=W.L/!WHŅ+lpf>LmѲ '{٬I?o\5uԠG[ 7:٨iܽB&Gnݰt֤':} &˳ŨߏyG)Ͻ^IMC keןXoc۶kO6˦5Ǝ+gO4_Bզ>,Xd?Jv( {  H_lܚSYGNkfn.Wf42مgmӥ@Q )/{n$,6gԄoW;닄%gc*:^g/e٬cu|=E?Xگ󛵝},iׯfeP[GrM'WM̦]BeBhXK9RqSwCeBLMM'}UBjUŵQ#O<;m۶ׯϛ7ر>z?ӹsgssT?UUUgΜ}6۷o>}iݺuեM~yt'O2wE]:w̩wZݍ2 IDATo*  Uue?LWEݿ{Q$<֩!u{l:cs)d^vg_襁uO\VzGiI dql5ҳsVKG=V B*7NmТ/&Oj4U޽uⰾs?}5KFt iۼUHv»APsaG>xz}!5>ij?}BSĿ^jh|[w8~x~^`ǜ9sZnmX!d޽ s5Du G<^_|YPϛ7/<<oQPPڵkL2dȐ1c*4dr\!9 ^kֹͫ{%'1oNw+ʥ=AJ!V8;:RvxeDTx#p'Y5Lc~zb.襁ٻs۪E%s^=ڙ[<&`CTv_ڵ敋t++R빏?}>WF_r~qvظōړFzj8NQe/ngfb0Y:)/UI(,4vu̙3'Oԩc!+W,Y S ;wqx xl ^ZRR7nܸ:lc>.}m۶Yfy4X=FLHƎM0YVm;ܺzٯE+!t+^> սt֤)!c~~5Q)r*UbiI{5?Li Vl711i>?% 6-ֹm{kYkqvoL~^у:<}Cpyk*uLjF믿xblٲqƾ}"QlBѦL{nFcoi"we7v oc~)n_;'0*.Ƶ[W/wY{g3r;:5iwaz?jѸz⭧U*R|nSGs2g<>>&ҼU, 5YXnYGYy^[]qru>jj5woS<!Rqy~nWE_O37˫wP*NfHgwpvmsaqYia2KFw`Ǧb믿6v oÇWn׮7nHNN;vQݺ5)G X|ڵD ŋj ?xȑ{޺uk̙(} ĉ/H͌kk߽yV olnbb2q !Nt!\ܞmYcOoؗlln^;ss`PZsVo~nK>aՋ\<'8 }Ƿ^uB3so(|izi! GA$'$$ܻwO"PōBCCh4U]hĈFB:h ?Jecfmw %u%Q4}z۷wsE*(==}ڵ ͪqyzzΟ?p=z~>Yx!ijZPPbRTT*BVJ.4rkN[YYBLMM'fXKKK&CCSTIIIoNHH277  ~oC U_5kVC+𔊊訨̠[YhвPkk>\9ɷ2ۧwށƎ ,Xjժf͚;o߳gcǎ 2e0$D.T*DBBRVU(jvHR!z^"P+*\ryT^ YBl)#x\SSS*iʊNSyKfff !̌dt.KIm窪JJJJHHHHH055m޼yppppppƍ 774٫W~g}'csr6n&e6. {NJK|;.έ"yу;Fj+W~ҥK 7+))/ 駟n3fܹQ#w ^I$d2D"RTRIRBRb\,P*2RUkي4:Š415a8KLLL݊aaiiiI[YB ߗLsssBu8pnIBLMM,Q*JUIt ٓKJ\B*Oj5ɤO* MU!D(rS2NT*4UUʊ*ZV**4ZR.ۋh4++á,bt.`0t:ǣ3x<6ͩq8R7zGdZI%tc & o޼{#v|Rimk7ǿ[#OS[v*G)< 9#Aee 4,4<,,44e˖ aFbŊ؅ i<NJ+we+W,((شi0$h4eϨ+TD*IeRTDb-,i,6feeaa,i4bs,it+dYh &`Zh,6Jb9&&&LO: G.u BR)ʊ*J&S)PrTP* ZR**RTd J%Ed`p6fs|.$6mmmmccc]5\Ct=HbZhA9;;;:05k֠4Mbbb\\ݻw޻T(t&>M|=y5igEGR>HHM~t?9/'[9: Z~/ &''/[, <ǽ{fΜdɒPÍ"HF7p9 P(,***+++--WDɤҚGhtdLaq b3YldT S *+*rB.SerDR.SdrT.V(HO[YY|k['9I5 76EѤ$''H$ۼy ///| 5U>jڴY\]]*((~JJJii:9y8;7jݨi3FML0^/).}( Hb0[jٲA'T ޿ٲe9Z ,YbЁN8믿>|a P;$|prss ˅BaͅraP\^^csl.9<6rmm\BdRPT2X&$bD߂D\Z,*-*I%2X\VVU>N N'5$5_w6tHH%t:www???@P >XiiibbbZZZZZZjjjZZ:յQg&n\].xqYia~na~nܬܬҒbBwf͚5kGьrCQQQ1o޼G-_<k׮]v999n^?vؠ)SnAI&QEB0777?@(O4LLL6|kΞocǷȯMⲒ⢲Ⲓqiqi:3I&]\\^QLLL<=={h4ǎ_fΜGSTiii驩KjUJ$Y1 veET0?0?W')˩P*\\\5n֬qnk-]aΰFH$cƌ8p1c :Э[Ν/8;;t A;<;;;''1+((S(LSeiIups9 l|k[ږgccffnܳRqyYIXTVZ\^RR$/)*, 2C#fbbp}||Rff5krssGGA)++{qvv69b|k{^dk7x@h"a~YqQQaAX$,+*,TSSSGGGF+S(Zly'$$φS5|Zj*`8H<ht:]vvvffffffAAP(ϣ  ]ll$h[{GKnxJ\ZZZ,*D"QaIH/7-7nܸIfn=xU(}PD"yǏ yyՅdh4F[rmy6< +ReeERqYX$,+.* K EE:V$psuutttqqR<<<\]]---{ٳgWTT\PjjԩS͛סC$ ? m֠LjBُJI0HO%2Lζ2fF?_b7v89qݻwlЁT*Ç:b`PH<?j:999!!!!!ΝxgT0=|pΜ9˗/p86"hܸqC=z7o|A.k GT*L۷理TUUh>^~=zSFæɥGYSs2OJOIB<5 n#h4io^hoDD0v8/1w;vC &xxx̞=XAA˗]j>M{5kՌ>d)iɉ)SKEgg6;vرc@@ФYF$H,kZDhd2ZV( BVd2F#/ !:N"B4T*#jBN TVTVVV>wЊ JzP, Ps8S3SB˥OY !<bnnf !L&B h,‚ᘙ|SSS.KB᯿ڴiS޽N{^zuɒ%֭ 0XSLY~}=`PH<lGL̼}Zzz7wkijff*$KtB.۷o߹s:AVGFF9rg֬Y( 5j \>v6m|0ҥKE"͛a,BH$Ν;sK,-i>̓ۄ hBx-Z{b]O'.+ryڵݻW޽7nlPz~׮]Gꫯ bp^ɦM^gA}gfڵ04$P?q"u^߼eH-Z4vMWEi^z&oOԤ¼]'K_TXжKOKL17ժ6;hW qK&-z>Qݸ;7c]J^ 6lX˖F̙3Q-*j͚5111fҥy%|ʹiz]޽… 377 GDT폎`2vֹ{H.,׸usQ`oBHۮ=W'Oٳ}={ܸqc֬YNNN 6iiil6{ӦMU۷lժU3ܹsjug8CC ,^x޽=xz{̓*ա?ݍK%z IeMK6joՌ9M]t#A!mK=6*+59!HXШwx=mcR.ߺOܜ<(3Y{ˤ#OٳiuZ= T'Br?ݿwDT(pqNW߱|Fʣb.S^Z۴niXlN()w9+=ѩ!}UyiɋN)DاyP-7W2|#ʪzSݹye d K.}u;(QڞWwuȐ![nkp|||m۶o߾={ܹsgƌ$=zt׮];wo-,,Ϋh4֭ ׯ_x֭ p482?"b؉ush!?}Ԫ\&}''Q-¼~15}1.MJKCJDj-?&mS_ 4߽[7b.r'~ZOLL!9ϟ>r'՗zn6cvݽa^Oۄeg/1aᴯzy݌plԴуSh!#nX:k5>ٓG' {?={.ُ^KE3v`׃;7l`/^Lm3g;,ضړiͬ#kDyab{ztZ\X:ȤZN#| MKjɹ|s]=Uݿ^eE -&Oś^m՘-[#GƍaÆ_.Z^jΝ;G߿CYGCN>޾ :~x=<ղ_N_rhLQeS?hWG153#^:gc7Jo_ۖf,\U==S;6[=iz9lر}ބNawQ]+CtZK{E7M=fLju~N*Wld0Y"Q`BѦzeڥy"%?s`!csl[EQIQ+?l+lZՙ6QQر|m!ʹB}c.7tKOZ-Rwy-Q6٭~7/>IN+O5ncУoN]7bc=___ѦM^G`t"(""lڵ͛cߪdeeTkQeQ 9X&=nE7^Z$Ⲉkf5Z~=Jݽ{wĉfff[n}粎t:݆ 4i2hРz~suum߾}PPDF0Zi{tԃ;~A]ow@7pp{wp2\(}ٰ2SsTn,=P˴mrEHeK|o>BB"+}F^wΖe[^-O`X].|VB,"جVMG>{?(NRS^fRZ%4 ! _)sm]!£c%J7a72`(B篻\(/||Vjtw[O3~/>;OO<7td/CF?Ng0n1e/]QQLu_bcc6nxyD"C?ظqcrr… Y,qؗ_~Y^^uVo Gy饗l[7#7qS>{>~8, S.ۛOqx|F6l]L78:E{rРBXUh]]]4s4^w]f7n}5fA1ΛwZIaznRa#Ɍ?~᧯vlb$ &wBlۇ+xzw7{ /n|g-6ގ?w**[?ssΜT4ʚ(C!UUU(<ܜf͚ɓ'#Ff-[8>3K.}SNk_d?fWh(<ݻgOl795-dLfXT2,$082&. $ >^|yn0VYBKם堳ꢼU甗\ vVi6bˋ/wOꮪo\j{x4TBw1Bڿho|QSj)/Mظk_}wz}im;o4?kn5t&/\#&zcNMevG\s'A:\[c;[nu>̜;w.Z}URR|rѸvx ټjժݻ&k:n޽O={~=p:@odgnVGsׄ$II|Vf߲ݑ#b_.fߞV_npbXͮb15*`VuoT y`Jvwb'|5j|?UWvK}~w)GtN-"&W}u#žkytH\`{ti4wJy?0ꨪ.ywr}q&]G6jV/={6ǣ: gM2e޽W?cBp'(ʹse}9Gyͮf_RSSWZ`ښ~ϞV9?}e񋏉ˌזQ|rpϏvW`I@U#3.]0i܌G=4/o3޶)!w\͹O6dtM}ı6'ng3\>wS/>>lҬ~AyY;7'̘{wb>7϶=?j/G sc+~o'H_.@B۫J,_{w-F`f>/̣9gȨB!7y zHvJo2f4[rE tuuAJ/n`2YҚ+Eueλ^׾oy/_oDdOxmf~ޓ9~Gh}N۸qcƍ7a777ݥܟy޼ymf駟rmGW7oϴOs֒S :ѽ SL9҇"qX?guw~$ 誑GǵK,9:xsZqik{=tG[vYx/9w-|w=/T/-z/8-V>yGߴKKoI@s3n~on x.^Ǟ 3փNO__ ƌ{nko96FYuo-\hdW~YBM ʭ-4"|]YѥW-۸l/e$a{yK\6{nj떗h+?\}L4>h<8zf͚)SL2e[kײX.]Pu%''vÇ+ʱcǶEڌ z\WYYS>Խg ѧ[XtZMc/bQ_LZ:v]&dX(/?i۫KYlm>kQ+jR~FjBPd}$MuՕۤR6mڔ1dȐS +T:mڴA͚5/+p{ fPxp ]Ǐԁ} 3p7~ +u%3aJǞ?|ބl>u䑃YGVUǏCu4.^fF3yd>[:|֭[]]]_~~Qs ͛7{xsss,XqF|  Xuu={wե[Jމ)}>Td0瞽} l=iFj>  m۶۷/%%eΜ9T'|.\9rɓl6ՉZǗ_~k׮-[.\hZ׭[hK(<{FرcG=zعsgm6[Phx|rĞ}SHNpt^ gkZ0`aÆR:sέ[`0\EVoݺСC1113g :Q)((7oɓǎƗ.,,5k￟ƗhK(<h:ĉG>cZžnѱ QqD>3@b ]οPTxnr 8ߟЩ@b6 jtv]VBJU9O BU#l6Fq\@@...wa2&L0fWWWC8c ooUV{ҥr|m|]6#g0NhE^T* ^jyRtz^jn:f4f39.FcXtfaXG X,\.b /''磏>*--:tI<==NVXuVHƗ.++:uҥKSSSm GL&;srrΝ;_ZZB !AaAa @gV)*U]*+ xzz%%%Խ{oXs룞={Ι3ˋDRd RTT* gBT(*JRbt:2,w:3t.3l͍btAg0n4qqupy׊%Y-d:ݮj!Z8zn zj6fNfѠZ,f^o4-fN5˿*@( == BSD"LfkTyy|^zM4)44D_ݼyʕ++V())ٶm>NGmMR^ty IDATʕ+]T/BLVpxD`XdHDTPXdpxd`hyG}muEIQEɕҢ+ y#!DGGGGEu%>>>)))88ruF>hfZꪪjkkRiCCCLVW'molY,擅^|'/ <|_x|!O( ӧOO81..D`>}+(i8~ܹF #^QQQTTTZZZVVVZZZRZZVVR* !n47 ??/0G-:VBPWX/TT6TUWTVLFBN b0Tgcͭf̘1tP&gҚjg"&%{|}|>b_._@ufUrY}meycB 몫!0,4,<_5k\llLLL\\\rr2%o(aَ?{K.%&&>=z%GW^yGPhT*ZU4*Zl.# "H,IbH$D ¥t8gΜٰaj9sf4ٜ}NeggKnnnq q q1q,65Hk/]w9?Jyc[t.)))ׯ_tt4Uaa}9>bĈ1cP8ŋ\. uuu/œ9s((<[0 kr\P(r\!W*ז(Bes,rM6bsX.csylםNpy M;4`ZdZʠ9ˉZAj֠4F}՟Ih4P)//p?t?Zɓǎe>c6Bzdży.^b NX,`08a0<b1 @`0L@ rGp_Gٳ=TW :fqqqT[YY;VSSSڣG3XT:cƌ}Ο?ׯ?wܧ~J(Px^X,&h4Z,^Ԥh!JhZFq8*::jB,Nw*U*Nq:BMv7im6]/ߤ +`0OͿr{pL g'E !4庸Bwuup8L&`xxxl777G w dfΜٯ_?@p8=cǎEՆGw3hXaɮg+tZM#'~!BL8B ĉǏC6lD"$LaϟәL&U1***^|W_}*UPxֲѬYw>dǎCnjM4LLu.75=?~^4hҤI=hKB:xDNaƍ޼ys` =y[u v>}zv}֬YTɓxz 3vFv:Z-'_dg'>?w܀V(((ʪJKKKKKE]KK?{%%%QҥK3g\t)~L ܩK~@rߴ'&L3pW9~pfѽ>I=oNuF;Ӻ 9O4lɩ!% +K[- p%׿|V~,^*G6 ;;ɓUUU</555---11FLVV֒%KMS_wFm XVVֆ n^_SLzbZMݛ۾0BpÏ$p{H+j݅܋O4u=Fٲb[=b=ҼgͺInrPl2믷mR*gϚop8ܹsyyyFӳW^ HLLtssk؝CyyY 0w\j.X`ʕv]jc?޲e[oGp-ŲlٲUWGv])+s;ўo>_jSLߥ,UJy7ھ%0$ڑVԺ i]Kmw[-3볭 4bLdO3=¨nY׻n?sLj8O>$11UG C p>}O2e֬Y}@"˟xblSĩmҵ%8?ubݹ]H+IdL\PXӞ;z6+vbaˋOe?vNXYZ<'TƔ~ã.==a,6Ź .]!$y?y1I;Wgg\\\N;DhYxT]Q篻:euL{;Of+ DfLr>>>4-"""11bcc8Ugo .: 9rHqq|@uZAZZZn6mڄGtG[!g LQgх]\\}ϝ:,<!؛sZټZi-oގ&|̛p6kמy/ud/7B+R66|Y!dW.»Ķhuy)v >ۼ6&!yhl8s,]CTg!fyÇ: Ů(]/^xq^^ɓO:Eu"hS&)=}3fKrtπ!gO75BrO-!Oe:O8sHXTWg~57?Nz#JdRȘǟ,xh9pyLa#GC]-!D(@ڰΪ#B˯`2 ^~~_ӟ=kv|)2/ϝ<^UVS^i{{ܧiNvgrzqQu*JJJVX1rSB~gVSzx(==}ɒ%iiisp8TpEB>xTGٿ 9ݓsϜ7-*&~7_ z:qdƓ^iˋ.;k4M‹}!Dtw儷/(FsodBlV+!r~._mZ[NuIpxfu!盏?ȝue)sm]!£c%J7a-S&}?...F9.t>27ވy饗B!joyDZqA:@dɒI&͙3wTNPBx!AnϠz9”"cS_Q y zB t$~N qLF#%yUQI=o|x޴k y1OywdW;B6|[t+}^<rUWdF%Kx<ޒ%Khv}ܸqThſIKKOOO_x1Z<BBB! %Ӻs6}hlbK|^ &3,S KwGB /~t;rhD%vl֍']ϻ\YR ޼Sw%I@PXT?|UEPB4*-cdg^8xvlXwBg$BHS_nz忟OK BǍ{͛~mO?9ntJ(<+--m푑چ  wh{#AnB~#I}_)Pwn Y {~O+;2cҢO:'wu )㺧\w_|2G亷^]-L{uV~黼?XޫطnY!u5U-Hvɂ_'W1f4ңoѸlO8Vzr͓i۞n_>7m4Jt&;wܻwҥKPXXxI&M ;P[oeddlܸٳsMJJ:#G+88z%9£Ĕ>W jtO?篻sNxO%A׎J.YtBykE4t͎o-}3!7rA|_u1Npo\4XW~YBLRpo??`UOn2m75]m3ٽ{].\سgOΝ;GuvFNTnܸɓ#FxY,Չ9ٳgoٲY>;mՉڔNi0(=PNtbU yC=_0 u!4^&Ӷ aܩ]Æ kɱc}݉'?,Le˖H#(<l}d2͛׽{wN IDAT@۾}˯%=trq\gϞ_ӱ;w7|GONu1'NLHHXD\۷GDD,\pÆ DʦLshPxC#Nb|7;v8>2vGu.bZN921'ǎ2eJ>}IsX5kְl˗_yE 8, nFijjjjjh4d4ǯ=`0۟Օ_.>!L&`4Z'BaÆ,>>>,Ns\'\; ͞7oZtb?/쩬<{c6RxЁdgX̽z3qS1 .T*ׯDTǹZffe6nصkWS(<@)Z*J4TjZjuZVj4W@swgL݃`0=t:AgL&bsh4C\\]9\!ăNqp\]d:BdMMMq`Xv]Vj4ai4]6٬j b2r.G(p\@ x\.^^^΃vx0)ן>}yyy{_rΟgى=S{;5*&~Leg>{ĥytca<2zԨQbtbYt+W֮]BuLI&%&&.X, J^*644HE BT(Jbi(.\.cs,q<6 \.cq.9\6K?٬jZ^iZyjuh:N:FR6lwqq =Bg%bD"}||Pw!##cg TPSSo߾G9r%Iڽwjd8!A3uyY9YygN^s8ݺ% 8`Ȑ!Ʒ +[oX"::8GS-b_/K:%ɤUzΛNn6oG$~~~aaaaaaBUǾ}m͛GSNeggg=c4LVTl\dLBdl|xtLpx$Ŧ:&GK% _RWQZl}||SRSRRSSS|>1,p̝;fP]C܁ZVBW+{}E[Au|h_vJ!olj҆yC]cC}}m^sB@@k~bXKShV49?((ըՄ`Ϗpeٲe+W: mٲȑ#;wrTgPx 2 yyy9999/_/ZEGGFD;&F! +%W*Jʋ.TU4lQQ11]wCuXWͭNV-......))qwqqTZDquu}}D~>~b_?O%ep8T J(oIkdZTP[U/i4LfpPpDdDdDDDDDxxxDDDpp;:ɴx+VʦO>cƌGy, **'''''Ο/r[%(2lꚚAUUuUUU}n;Oc0Boo/ӛ-xz <><pCZ-ݮըjVR)JL(S4TFeLؠRȕFg!`{{{Skj_WT+W : 9YftWWWt (<.]qرSJ !ޢ踄." ڎARpŜyW*JP3%xxxPG}$ ZjJRA&IzL&K륍FYs !čFlۻw𰄔>]b]ܨNЁV9u6#Uʄ{l̘1 TGJk׮xرc'LO(TYY3UVyzzR222/_f͚nݺQA@#v7ߞ>AJ6td:v\S-'ı?s.8$ɱc{xl}`h<.^dɒe˖t:ݤIRRRϟOuG߷|k~HIa02e\8:jպUzlݶjUuﭏEq TDH0dH8P y^usrs&T{QhמjٮMv;6mYޞ>-JBwh#ebf7>eukܬUf```ddlicSzVT۴/(*.|G<'F͂Q=V[_8w27';(رcFQ eGu֪UZj5:/7FEEٳ̌,u j;Jk׽xչgev}qm-V:A]LDM}_LyYU _5{g |RFyuKLmll>ھ}Ü9s0@͸xMz1uTFu{Ŵi̙ӵkWITw9ܹRRR4o6/\Vmۻܑ l jkЎ>‚ûyW*|&7lTZ僕dݱ~Ŝ=ۻyV7 l<6126.Jܻc3G qJU쫱Oh[6o:eٿgm۶ϟ?o֬Y t zٴiO>SԀ8p`у:K(u5i$,,,u j)>?yʔ3O}.po[XYB<7Ϗ_|p]>> |5)={1J8}oh',S])Lߖ-rh-j?Kkg aѽWZcWhh(չpܵk> :@=jǏ;vРATǩ}^,u jW:vMS].<|vlW..]jɿ_nu>q ruҔ !s{𨉑VhmԄ{R(E}y3'Ц\x滓=n<~ճǛ3tn;Why}^|H_<ށ*v>'ؾ1e_~c{7+.6jϿ2Xw 1yVaOΝ/ԉك֭[7m4L}Pr5kܹ3o޼Ν;S^|yiӦY[[SÅ1Zo^8uWB8O܈=Jl8*=] ?;RkW!¢BQqn<\^E~ao vߏ}ʳ}GAfJrSUny}Vn!tוZ- j*=%i KgjLP\wߗZ퟿+SUugfnb~]Τ6 ]nԩSϞ=;iҤd`ڴiO>_PՑBXfM&MzAu 3.ԣԉySZ`EzpBȓ4'wo7kJuҾ[Zfsrb_w:fJ! !A-B*B^|;!D*]e3ƝG !w#w閇!DZpZVh!ڱ֮1ƶrolٶzY+wծKwBFuU7'jX K땇rpfC#?DXBd?~7![W/-.ש!Tμxn҂VgjZU} =Pݟcܰlg4ѽ| ?aЈqֶgo޼ȑ#>jҤi#G44#/99~bٛ6mrpp:8|pAA/E>_]V\ine=:QuD1a0Z F 5 |t7Jýۑ޾zR"\:yqS5e |ۑ:t!Eyxr !{FvTBl+YE,,va=tUG6ykNؿKWx XXVݽu31#B5P"*&"tOWuK5ekNdkZ+ٳCZ-i4;콟TB1. =±¢B +kBHąl3N6ju/1O?-:t q ׯ_ҥm۶ݻw/<3s 7ORI:_au!7{x;콟TB=n#wߏѨՑv oѣVZQ S|˗/oڴcǎfͪ[RT֭ݻ7Yꃺ;h4A}]Ҫcq>//PQ?1E]{~DBcFEmuTBL*% Le[XYs'o^+<:o,lo|qPsYi)!xO 1YN.)/jn=5B~4BH;w T{?{\oF _=wbc)*֘Ulh4Znn.A=0Q*۶mpˆ#:T٩SmVN(<Eh4wb=Q͚ ͂LQ ZyMp IDATyxBwݸFF#+'16լ*Y͝*n)Iٲek׮ :KKK?GPOШc„!zaTeߠ &4o*b#*R܁j_Ѭ\.dhtN.޾O"dԵz]tD*k܌Y]E9Yi)im3#&|0?OpĔV6(uJ"wT|RU ʸa3YNqBA߾ݫy*r纟۷Cu*WW׍7N FvEQDu=x`ĉ:GӧΝkkkKuz@ PdȑO7lY fQL*:8:3X,RY FP-B.ggr,,-mt-l|/ɤRh4RjU?{gʷ9Ҿ Q4SG\bcm}退JNN^vmNNNϞ=`ƌ=z6@Mw޺u댍,XOu$HƍI j#GL6L.fԄA#Ʊ9T'‰#~FSDܸ|e>}Y0>Jڽ{˗KKK5p͞f2l=zt^{zʕ;w47ǥjF:Ր!CRR^ sϝ⼜lCPe~őSfS[u$/+;}pwa!Kgkբٳg֭[#P":"h%Kd2ԌO7K.4iR:;w.>xPݻwoڴ9++e_ܮKwxP1PXTйgaS!!G_IaaッéP?P/^ݗ/_b0-C;=}g3s gj+׮L 3f---EiiQ ٳ꫚LP|РA4Z^?GΝ;7??۶m3A@=z٨۷ h&-[U_qyTG?J{ߎs#B,zyywРA͛7:|^YYYF222RZ322ڲeK j8g"6mӥK1cX[[S߿رc7o?>a.\8}]*5iܦI֍XR=,Jl޼E~}Ku:9/_KHHP( CP/Bhvvv;wd22RJ"H&d2PJ**7@bX,133cXj-TP(BaYYYiiX,Vg%JzkY,!d0&&&l6Mќ={v߾}l6{ԩT'sΝ8qb~P>dW^yVb3F0ElcekGu@ګ4!~|?R(䎎Nڷo_;99QR?ѣ/^h4!5AʯJYYYEEEEEEEE2YX$.)ykiѧ07`XL?}h"\.rssBOfPPȅBR!+)ܑ,,,Y,6miaiiiQ_Rx^|cǎgϞgȑf=2H4aooKB@}S\\}[>|T(x <||7 lЈeʦ:#jUZҋ _}T*ׯsssYBL&Œ13`s,s3 i1g0Y &efL&2hRTV"-JJK2XTV*+ɤD$RX*EBX$t/466wvvr\n]Tb8+++###+++77W | /7W,4pXlS3)25359̔mfllX ؘdLt:㲕* XT(Je%2\. ?IT"+ȤRXT"HK$R]t:ֆqrrx...ΘBN۽{7&NEujj-Zc6D>/g111>AFF:Fsu hda-4juzJҋ/'%''>+++57h֬YZlٶm[ ˟?ԔԌtRpRSSllN\g[=΁kc5}[Zm ??7 -ܜ<~Z"4pww:;@m$SRR2ӳ%bn=ʚDR ܢAA_XXP[T*!<sqvvvssvss322 BwWW7mڔDܹs[lYn]`` Y?|AR KF1p乺z{5tiݐüPw _=OHKzeZ˂\Byf͛7qtt:)RZ699 Ϟ={4!55ER \\yn\W'7'W7GWG[)Wy9s2_gddedgg&pr5jdbbBudVuFII/_#t{G';=Ɏdurpr:8T!Z0?//';::/u>?;:bhh; _BqܹC 6믿644:T5KII:uGAu/ \qqqϞ=KLL|3PHmٵQW@H*uVZ666i7 7((u6Ϟ={xYI ݻwn>>A6_H"URZҋg_xV"toli@>>~~~2-##ƍ7oJOOhA 7 lULVez4I ryEm:uءCƍtc|޻w?==becݻGC7Oo(Vܴ)/S%=OK~YVVjll퍛 ?\.?sǕJcnnNueŊO>ݶmV1(<w),,LMMMMMMIIIMMMIIMMM}:[VB=׎dluub$ZH-ƜSqwwph4RTPBX,sssx<_I@eW\vzFz ٨YfC7 2eQQiI/?zxv 1 ԩc׮]999ׯ_cRikд枾>~6Tg"hי^_Tvwrvrqvvuuuqqpwwwwwp8[IINNNzzzFFjt:_$*;~ybI!Zoަo sT7D|xHXңG^zu k@QTTtڵHKK51ahʦ>Wf!9YO<}ὴ4-q.]twgϞrJYYY߾} Tg9INN>}СCNu/ h4쌌]M!N[ZXZX[XXZ:XZXXXr-8,z@!bQX(, ya /P./occupuu幸899x<ggggggqT*Uvvvff)###++KJ\ÃdVӡ@m'NFYYYK1]3@=PZZzԩ{nniվ[]j*DS$)i+7"F~NNNT/O}jv#//׮]+**j۶m~UN8{ 6RK#{BX,K$D"CX\\,K$X"J%ҲRyY:l3 btC)C16a3)Nh4S3!D?ퟹF*k5J%+BeeJ$VQdR)!D^VT(tTD![ᘛ’1ӳ4+‚ᘙYYYju~~>W#JHnnn_SS||5kN?u 1.k)J{{bn^k֬ysO?&ڵk;v|СCB|AbRDr\&IRR) JD")---++jZVbBHYYD$]$o%jX2 :U+zSsFYL XXog2vsss###cbbblfX&&&vޫ0_iii2f\nj$=o@m8{+W.{ 8WqIHJ|z`o7o}ժ:m bϞ=k׮KMMiܢU:v{y9x ߥKO?-j۶-ա_nnׯ\۴iݻiӦN?YM2c*(<*T[M_TTTD155uttD)@  ˖-}˖>, i뢬=D?վ}M6RRw?{Eu(Fu؞mܥ/oժաAqq͛7###?nkkW_988P2r|ƌ*jӦML&8_.|<})~6>O122ҕ"骑x<ǣhT??>yR9f>CG`ߖ/Hy8uUV}39vܹsssz~؄vT'=W=խW6m:())~z\\ ܹs`` XjՃlbo#$J|~rssZJ>R ߸qcAM;%JgmzoOƖH%!|b213:5nVy>F9-+8~Qjׯ_O8 _>r[{nt[ooG\&ZmJKyY\Ǡ+UҢ#%EGҥv]Ze޽3f4jcPjޜrFľK<|*߈{WΟ޳Wg|WT'ZGΝ;wGM;k Qכðވq|£RYIFM*4:qSubΤ֭ۜ:uSNT2,..޽{'$$dذa͚5w\}:%PxP ʗ" |H=:}B XYY髑<<oekW=zx- !\g6h .6`Ls}N Ou۶70s_oۅug0ύ1|{ k>bm8~Cߣgϋ.tܙA n$)s??& ͻϜЯG<͝R"LN܊鄐[tǏQkf-]_Yu\y^3[+Ye ^W. !eOӺcW;vvߌiy1<d+W:FLEm:t~2#2E_*/++?{\J=ٸ&5ymɃ13珜2G!"/e靌ML0~@.]To ")))99Y?!6mڴSN\pɓ .Vӡ\$JHw}f\nj$PuZpSfShվ˃FF7l/(nG{|ߎ)lᣇގlա !D$,x*__ utD&t̅gh`F̓[кSWCÊU9t乕!"ʪݧj:ƕ}JHOOOII#,,ۛh |Б#GRGK|~b$})IW RW[xVÌco_w}d쬅^~lT,2AJe%6ξ|nۖ[FW|L+,SvYiFѝ|`o63H$53fb6P:u~بEc#&ϺYqq}҃;=q^'o:޳JBQrd1A|>+6ҕٹw&"h…...g; P;f-Jיj[nJ24|666^ jFn,q7)$4 i(&ȸ}wή}[GC' 5AāwyMZTK!ʌM,V##&ϲ5FE\JK2fRuREOHZՊUZ7\h<,ԩðrᘛ)هx?ƜQC~gn!& 3oU,,g:LR>Ƿ T*!ޞ円:88p\.kccS*@[lINNްaYPxo`hhXI VgKOOљ3gr9N!q\WWWOOOƿTETTԊ+\\\7nPWɰagSFk;p ޴uA &_Ɨ[ZB>wRv:*L$|I{ 5QlԡZ!__ǀ lPCoVx{XU9R6mъY?|39\ߏٻy݈IC5:{[FA/ل /Y2td[{.Y_ס+|ЈXڭ_.{dNV;UسVUVv6mڸXYYYZZvytҥKO~w@ BZ+E gϞ-++#XYY'FrwwgU4 PBHzzzVVѣGi4{HHHӦM}}} LiVZ֍[zմU[]K!Voduzb'יW%8ӯO_dXBFԳ̥>%c*7vb!y[[SZظe~S}7#/;}AM ֤IvعlƸ_42xݥ:t~H =_Wqy͂+qfASjAղe˽{xzzRL&DM6YYYQ> nP*_W#eeei4CCC])xHŢ֞}S=ykCLFQ#ܿDY?ƍT:ZjΝ6sw\C5>=w/Zȑ#PV{)E_͍8Pxu^qqL&dbXw[H$h4BPJtCjZ$jXR$ !DRQKbc0L`0L!Ąb1 &dLCWdjjjllftr8:nnnbX,nO T*@ ͇F̔円M˓NrǏR@R񿊋rL&H$r\,D"\.J%%2y!bX( YI Շf_&&l6̌mlllaa`0L&166p8--,,LLL8ñ%IwaQ]`zcP.]M,טMMl7E]hc{Ә~\TD`ϓrN.8;vOvDQPTl%e6.u/\YYΝ;a„6lٲe5{!#T%T ٖd&`0bcczE~qʕ?Q>Đq8>u`7ر-?TetIII.@g@@o f4Vl6LhEo,Vl66n*Qh4,K1 Lc1X2H*')`82 %S`X  B#At6ۍ ns\8vˉ p98ycqcp9N鰻\.q6۬jx=z=uHHLi$L"1 L"Tj]`0t:j`Hhpp8.8ꫯ~OMM}BjH&ɨMFle6,K!!$294F H24: %H(TI$r[<>H&#B"Spx<CYfC[LF|[;4 >j6{nv8\.f=VFcm3DLQi4:Nh4Ik%n^@uuu |]v-[0~@s0}6:}xOMO9̙35L&khhd2vDFFFGGDEEb@c \.Ν;׮ر,6gԤec$d<{O },555$FVUiZMD` zh0 x˾"JId2J$SbD$HHdJH$(4:H #Е8L›c1>dt8j6mV&nwmn:6f1va767H"1 :d0 \`0lvxx8&=YzD"ihh@aXlXvovhRy_|1&&g*JRi4RtMz Jg(T:Jh*BS t Nй^~rY&h6-&l2\F[& zbYp&go|> <(J2c4Y*INZv۽^߈=X $rhMڡÆ=xc=+hh/޺u[yyY8;rã'O;<F#OsI3wΜsR('VZ?0;;;ص<$بjZmss3-jjif]YtkHH(ŢLz/xu1 |'FǼh5,fl24 Yo IDATY6as֙$@CtłN͆jhh(R``X[oCI&-\5VD"Q(iZQ*CELV8Ţ3XT`јL:`ә,*IgX ٌAoli6&}b덆Ao2Z[tMr8\rB! 22R$뫼^`h7K.bX8ñgϞ ~:p`hXXV;䱳=('< D{:-QzQ$tL&۱cǖ- K6*gبt!Ξ,9wQ&Ri>wΜq`WO?iӦ}y<LT*U*U믍JJ2-CCøˣJcyp.JcPt*tFZNl447itd0 fQU4i hi5?W@  BP Hh4hL&Cl6 #Љ 1̙3ϟPIl *}+NA 8<>ã\>cs\':67nl24k5:YiMfb2,o &S ؛GX,7ǃBE}HUUնmvQRR3l1sE]Zf6Jϝ?qܱC:F3f(((g-QS"EGGh~>vdYCFf 6hpTl<|r:W^,tԕ E=&6vǏ0aJ v3vܹf͚^xG v-AgX>u\.d2D"U(*:0CHH(L6n|rx|Kgp8|pcQ蛛Ԫ&mFբ*}sFhp8DQb8222***22@$jjj֯_q8@XpiSh\ښں:\BCx!/E|a/|xŊ>ݟ]c0xxBt|'{]&J)䲆`dgggffׁ!T:l6:uԩSEEEKJKHHhRjĴdq|H vUʥuUׯ^*/-1 8.%55/7wQQQ.^V :$9(dr… WZ LVxBJZԘQ1q1 Vx+|^Z7k**ꫯ;1hРYo:~GзW]++3CBQ((:&BÏ x5iT^!mh64JzՊ HHhX,NOHMMIKKKOOOIIq@k֭۲eK xЎIC0d1x  S)dʆ 5jÁҲrrrrrr F+@bܒ% ̆nu(1Ph뭨(......,,pX,V,OMJMEI \R__]Y_])jr:DEEQ$Tr 4իWKKK\rʕjte*'lj<F5n WTZ^^_(.A fZž!߯رoy u inn3vʕVAAD8~@dL\Dt 4"p8|hiH Iv􌌌 X s=h ŋ/^xEJq~')ADt€!` ]|>\P]PSU_UQSqMZ_`brFCHYYY=ǹkl6fإECET*FI>򲲲W54{^AlQT R, EQ1l3^OIR+dJT)(e\Q6SSSRSSRRRtz.E]CTUUUTWd2o0O( / \3Yl+t8 -fFUk QjlR5j VvDIĄD6Aٹs5k}Yf] G ¢˥*A "NL۷%^wBsܼ|XJA$`0"BH0DTD {n:vbva Na zaޞFx<>"""|~DD@ ;( LI.|>"]---jIRiڦ&Zj&ZeF-d4F!H$+ D"L;9ns\fv۬[vvj1f- $$Ng9.#\.ܛD"o ޽{W\ # x|C:\|f2R2Sfe Dp+\yRyŊK -8.99eܸ&L5jD v~QQ֭[w][[FH?<+xrfVHPFCKiѹKgJ U_ 2t訑#D1 ƛ`04`h4&`0t:&Gt:`0t:4jٌFblfh4ZmVf4;Z3 F3+H$"HhTL D"H$4wW|g{@  ^ohrzeZfnMwxnw "s"Faa*BCCCLfhh(LP(ܠlK/M:5ص.<`R*:x#GuMt&+kȈԁ9d@]@)$%eKΝ5ԅ 6lI&LȀnݺu[rq\¨ISsJ =g-Eg O()p %666333**NX,MX,6@6$~?DBHb $|C?~~ضmۛo9v`AzxmGyYYhhXzauF3'.=UrO4G8q"H vuu1*6`1Mnׅ3'i'X3`D\СC]#9eeeׯ}6\&7yQ%dLÈl?=+GVRdGY]U=\O[F}sy+4|QdFvO~|>_MŵgO;~ZIHzᇞ|ɓ'p`W`qݛ7o^EJON?vПL+WZyIqᣃ;~voR25$2垎7 .)]7~@w5a&2}gW}eZ-杛~?pw[P錻gtUѫ f>xu5{~۸z7yyhÁ^}_蘞<;sGg |D%nXEڠ_H"+ϾF$~v:飗âO;㷿dd},nC%: #5Y&W zWٴvNze'k>w]U% {~RGz]Ir:auiyɘ9xȄG[{1qS>m>qR?|hMl! |{WݕNc5e*eLB1'L}hT;7k{~a~x|A6ir An׆znwޟ"ڽy3o%Dk^|#:5a|UvΘ܉̩ri_+1zYvËA;ܩV|~%No- #nמE ?pڼ'O߽fٿ77N81uR---H$3fLnnnHHȝ8qrGH ]mR8m]̄i*9{jҒKg^G,7p?Uɗ 枎ֹctqR;r.4|ܤ!6;qĺu+{B&o"Y,J:RP(sHbb(wyǯ^}Ս]mooH6*~d!#> io}>Թ #T َM?>t˅guկ,l74k5.5,KG,vo0L'ڶ%MבSw9/$&/}lذJAPnEJϟoiiA GMM{'>C*r4@WGPY/F҂]=1@"9v_X`"Qh3'5q-;|UME٢{o= H[|=#ıX-dl=u!rp.oþSqI)a|-VwXlNlןV}&#\Ύ-F]|^ s:zHx[*ln>#\ ?姜=vhmAo-]ӽyO=<*TU5>m_0qZ+K>Aͺ2~\/EVQ1hYwvm^Jg|f7˖/ ;߮SGCFxpEgd LLIt A㱉h?=Z:)ԧ_Ǜ>>d8AѺ4!%-!%vߢ:g^BNǼeɠ?{ۈ`ѽ;}ܡ0RY?? IDATu- 5[9Ub|//M yqx٨\viY{l243XٻB=t/_ef8'caoȝ0oK˕09ѝy<Avɓ'9Bnj3r?~^:Bੋ }?u!)_ʅ\:wo`0'O{mɧ,LJL6kt5:h{Xnε]ݽ+spcOǟ<3V3xy %----E:w^GDbcc F ڱc>ǿ+x@Ҷm.zkQ&N9w˩rJe{FFx:tͽTӇUV:Aj*ݴ(q|rӳrovzgdހ@"%$U]q1Vz圿g{uUImյKF|6y?pׯ1ɧ}^}Mُ3섄z@*ޑ;a0g޼6l.wQ(w]vرC$\ܶ =u23Y-gOny}u5&Ϛ잳s3aqN흛ݽzՌOm櫒Çr(ٳg &GӃW8-ٳziӦ 0:< x]i4j@Bː!!E&%W]&|+Sht8rÝ8fEBFA #Ht#hW,AH-ېX=F$Ⱥ ׃Χ H빽J߰eK,rf/|߽ݑچww>objƀvoӗϵ蚦]˿wީgp" sZe؈ ûǮ9 )9wdO(ҝmvnmbXFB]HgΜAF(}۶m[hc=r`䔋gO6+صtB6s0LzvHMLt DDFwnAFM3/V|>J'44K.vze8AIm-HꪅQh'V0y/߯><~ˏ#dhʕsHOwm޻wڼZLrt;~v ԩU i\rx_|yl=Ϯտ]r{?`0X,%%%3p-F/O]T:ɿO[`0CF=zPTe"j3YoZy^t_۶ݫakW|>߀]θ]F*J$Ǐl6AX,V NF"W8F?~G}{ѝ< @g !o;~xT /&N)Rr, HVKg.>1j]h# ߶q~_O{y\Nɠwl~%x7Z+9 o:fB [7XlηXyr.׊%oYL7A'2j\ #oSHڜFv ;r:rfI}[=q`s߾ҝ/wbWU# zyn ՟?s,Hu:U@ XhƍWZ5cƌ~Z(M{?O](ڽUPzIA2r;L>ݳԡ}gEWvhsM\>oMMEhiƌW_}k׮͛7/[l޼y{צO裏k֬?v{k]@վRt:+͟?>k6 >:t҈񓗿-!km@03޽#e o^xtʣO=]*:U 1o\%z~_Ю"c;8}^_40*ʅW}pz #S%/-~qޔ gҙU;N<|3'Kb[EѪˮn+"nTWW&&mһaG]ϋ D?m/߯BGt%ĝ/w*{舢SG?xG/t\[{0Nm۳Ǯt;.c^Zz;<x8ΤIF)[4!!_j?D1YÃT=}>u|Ozv gΧ*l_Ο82cSlv¹|a'LX߹EgO?Zt𬬬l@SGG$W8g/^x<իlv[@Y~=}cǟ}yotfC.r~!0X᩷R DS}Ȟ헋~[֌8˟gɛz`1?ڿ?jnʼc;>]ΰQu~Hhh?Jgt{?Kܽ bӳs}IӨ@Grz/ 6bĈ,f~T*G gMO|rӎu_-7Oʿ>3X=Pdoɓ]^G]ZZZ.]70s=?ud 5EQ>o.s;w/kW^-).(_dff~h?mg,x bt+ׯ[ >OrHRT&EJHHHt˗ .@o#^RtŊ?[`N9mޓ)Yw r;Ze#yG^x`xZG$nE )w:lٲNJJz뭷A+Ad߾}***z)9F F :@Μxĕ =!!q &M?~"tP]]݊+rSO=5c d:zCj6!f3 ^f`jvt:vr:vZ-^j1{vF $:NP(d Lf2L"ɌL&p>mH2xH)** HzJR"H$LjU*RRk4*fRi4 N(4 TZh(LIа02J ˆd*ӏJt]Nhp9Nl2:a6-&lMVb6YL&`}CCC9P(y>_ M$۴UVVI$DܬC2X V8ɢ3XL6b)T2JҨtJPid*Mj4CdԷZY߬k5p</bbbbbb8)))99yaaa ԩS=p x}~zQQѕ+W* t31%-:~@lRJ|rjlb^BR}Q.*5999#==---777++ },ӧϟ?_TT\\\l0IdrZ aDTԁybF:4T_rK 5^7..>//777wĈ0` .Ѩhtz`0 p8FPi$ @$:H$H$"L$H"S$ @$I$ vr(,7MFmVlrmj6٬&fsmhwf3QX,`tb#bI\.og>Ejn_~Z*64H$BN<~8Oqp.<_oz=-&IIӨ4Fłn cbb8&&&99999fv@xˋ]V^^Q^^Ѩ!ɑ8aX%ELj0(h\NR.QHe iR&Q$J䬬܈Z|/U<>rTTT_XR^Q.H~?EтhQX- "`dTnfwOkKk2h@ddf2` IT曃dx^Fx^pHjj7TIjW]i HN8p B vAa6i#ZmSSS ZVktMͺf lO$p*N)t:JJgXISt*NIdx%.b2ÐMtcHl2M&`1,&h0[Zg9l6p8\.7I|>@vkjj7vHArʕe2pQ$?"'DD DQ(~D,An2BVU Q(8vARRR222BaKF*ԩS.m0BlD~ rIj%UՕڪ2'X B$]);dzo߾~>SN:GO򚛪яsXat(*F% Ep- zQT(A%(J "E$&&'A[+V8r-3~Aۍ(t :&v@jRF'ov)eFiZZ[P}naؘ؁iiiiiiYYY.O>OVT*RRo7-CCøˣ=gsyT:JcPt6O2@Or:fl24k5:l4FVݢ՘Mh2tZM.) D"@  522'fkll ԭQC͟??::꿅F)...)))))XRbs#cb`ѠKTJR[|>FHOϾ)99{T*{ȑgΨUДAI9z$V]qJUٕq8\Ǎ7n܈#`R^=ztƍ:Zp!w A-#Jkjjohg9>$\Q_FpB(/@*Q(W+I4Ur͆nNLLLJj3JH =]|ǎ#btq(:&":+A t (kK% i}Q֠Q69nFFFFFzZZZFFFJJ ~˃.xJ%:L&C#JeFɈnX6sy\'9?2"2&FuX,αZJ;HoիWX -ZbgϞ>}s55>'%'$%f#!4qf]meYuŵ: 1bİaò!~ǎ;w*<H7<{ȈT:#u/R˅/i5t:cI3f̘\w\SWEf$@HA"(" uUjh˶j[kVkQ'NB%;ad$?nA>G>soOrÅ;+++VUaDK#gyyx y0CRkkeRE]MVV%*5HRwHXܣG eNJ SR)~U]bX 4al_"hǎ;k֬G[ ͛'N8}ٳ52 ;2:":6O<G}1Px77͛W.\xFFѢ * t?;wܓ~-7()%6qx9 2cq8jB J2E]ZUjV`*'$@ sA{ql?H@$gΜ9f̘f%TUUayHEEEX2ߙ{% |D޾^"S{\ ݞAIFZQ^#U+u14M,4:h/v8777//=xH'^n6xX-jiUYI]L^S]U^"-/*/VV`+r܀аP(ڤQ*R~~B@h4*~3IVO4a'L&O6m„ Rݻ'N8\^d/MOf΅S^Wp׍La0BG ooolfnpdయ BnVFFbi@QF͘1ݽMߴZEX9{%Zy{x<Ǝ:ujϞ=] ܹzm۶̦a#}~怸lN9};6  ?oܹsa c4222d2YRRԩS\n <.QWW'wK.Υ0Db3,aX &b3YlMg,J34:BBRbZLN6&QQ4jFըmVht;'1nnn|;ߝ===sD БL&VȹEMMfP(D(bS>K+Nxn2dK/$+۷[_pAx|pesx,L:IgJ{ tZAi5zVTU Z)W+Zտ-*j_F /P(+h_ ֭[o߾u[sohW#I|~-0u*a Iw1nnnA}zݻwxxxxxD"AtWF[N<p8ϟߧOh4۷o˖Yx|䘡b&{ g2?sGȤQӧO{}||\%/_^gdxy3•sݸoǦQԅ [Q(ۿNKHH8qb=\n&b1# b6#,&lBY-fɄMfl2&[dx͢t0t:`0l6FhNh4&ٰv@T*gT*uq8,+hrQS۷o_~=B秥%%%uD%9s| ɧR ZJk5jFR`xPo*͍bsn$*1xeBXj0Bbɑ` pssp8.b-]EaaaVVV֡CgϜUUD)84<~#|m!Hi5rr^ɽjH$Rdd#G8p \fM0E Dł"ZN D0A;ؽ};6l̝f @;ڸqHZ:jTȌiwjbݚ/޾1O֭[zꈺC;vLFEEM81** >~΋v{uh Ze˖-[^pJ& :,:.d8s@}}{ zGF[W.uژڣ(WV\./Ohߨ'ӝ[ץe㓚R{-FV58)0~bZ^*+.,'j ӫa:ƕn^3!}DD!3L/|ÙUbdϙ3'((%Nhƍ ,~ڱgiEɃKP7,uokm;Jښ_,sֹfju?lX2=O|\~9wGFu777 ӧO_~bDGG><&&^$Z%%%RԙfTYYY__E"3חH$:!>|RPMOO_vnv=--mp+Ok׮}wCSF'8$ɧ 5L;xXʪ_gO)-UP]l?'zi~bŶ~lvװ[}߇Z뙻n=r/G]ԡ{/=l֓ڴJyCt@R6v?]Rˏ+?)YQ#ϘH$WܹuxfƑjMXpx C^~yΝ;̙[K󪏷 !ᥨ-Y>W79ՠm<vaMN\ @n+///1iP$r6:8]u˪v_z~h|=|ҥ . xW4='o@'d62*--wssr. wF9vةSX,VRRŋ%Oxf?ʹ>_34jPo׮j.]:sLNNj م=u*&T*biF5556L&cbF>pܾ}СCgΜ1LK,pΝO>5˾\B&[۶n=_6JTq{!GG_iPOtu7s.۱i~YJ+:?mZ#b@ B(XV度7WVTpt773iK˚ٴ!T[-}c֤Ң"co\8?܉+k!cmt&g.Ӛ{|>$m:ݣAVn=yv.xaRueEԠQ.>6>]v0!7zP]lߏK_qGfOnˡ")rl Y[W/+ h)qwnpX֟%૟& oef]ˍ7ߟRRR$I#=~_FD9 ( v‚>ƶ1p*E݀q`͜/Ai &v@73>Çjvo~Hpڙ#/]o@_^^^UUua1lذf>??G M~bDDjժW -%Gns븫2Dbky{P.-Y19!r ,hn]pb,_~͋ru##RԹ\Z4#.<|pPiF# IDAT 9k׮eff^x!4dȐ~|;;رcɒ%8+ձY$ vI,fE/r xtIД  nlԴcDE iԂyU;uקx] G^o~pQ =ó=FF}6K eӐQ!ݾ78k9xŅoc]0eV~C3B[~H"q2>}06gW*lo`3[~~ҋs=-}蹐TG ]f-@Dݺziь}l5= &ͩnxˋ*+.TG{>} /cvW@Z!Bk׮m۶䔔I_|jࡍF5o򲢂]<}۷O} hܖǨV}flvnZF_[ŁWf!~O|aA;.}΢wX|Ŋ!gB:7NOHHHNN s^TTt\ =쫟^H|k9/ot,z5\M?zP.xN ]7`0ܹs'>^ORSS/EH<p8d2Y#Txk 5EƏHqBJ#!4qVڋM#lvHԪXH33FfB8ݕk.>n6Zۚs'^Sl~ !;2znXYV'iDZWu&6'!>pSRktk gNxGp2r]v㓔4|p77'O|4:7._83ٻ%Mg10F)j:Y /|ckk:ĴuoؚaAtg&MqϞ=6Ceff#FT#V:nyW^ >}k碇$bE>Z3|9^K`VZUVZ+(((,,+))힞gH$-/t9x*{MߙGMICXX8no8Kt<3CZQ:5aMv\*J=B>bP_/,xN[2G?7](kaok΅Ѡ߷cӄsO<!  Ӻ>C;^Ww8k *Gl5laz޼yv{TTTbbbll,Z .xX% |D{wM&t;S>cކOn ~!wmaL6kwpŐ᣾\[ݿ:rАݛ~G8V46:wn$k2̙2~u٭~1 ٬#ОM~XS~ZBmf 35Oǿ7_|xBB_ýnd{N}}o nyV/#̙vmmҬ; 5yF<_fVj:N@]]J¾*JgE= "bqtt@ ,@gVҰ BșfyzzW ߿ѣ&)..nܹ8qବcƌM;ïnMzldlw@,B= IS3sb~S״e`|Қ^Ί_Fqo|cF榍ㇵr!w>{g EI|?k%7{%\Q/SӚ}h/?ygggOd鷛GF&ٲFıSf#-}͚oB^)edlo;4etˡ>Æ>2?ٳy~@!k6슊ҚS֬h٣Y~9s\xtXa͛[¥tP$}nKoVWF/o}iܖ JW,!ol^oP+v9Gs};6mذAy<@ IIIFfNcO'O'sg/]xn񊕾b=ϝ8EuUj273xyׯ3aHlRj2]v`0X,l4m6VlFK9~:h4:`0|>JEgõ~m( i؆NCQԀD"h6-;;{߾}7n{gY.Yе}啌QO{su":Z&mڅѠI}Ē*iyF3Xm^b6K+X.oYe9ݳa RV*"?y6{.^6V)|n()XM}b5LA!:jv_}ݏBM6<1ۿTTԃ&ڲe̙3l)3;4*JYU^i>"1a4Pj  }z[}&eŅOMJLؽkדt-aQQQS\\ܻOI/̝O&VzbWerՈg6N.""H_@ h4*J&T*F# NdAۆGc$Jh4H3rLgϞ#GXԠ Wx:thѢEER??g^phoWG9\HM>Xx1-?䓷?s@p&=zpv9eʔUn4ձ|X,H$ >vٳg333]&f͚5|p8WIIIͽ}|g3at{/穬4:m/^\p+V,Ȼpiv(5-޿!0y䌌ϗ,ϿzG:ؽ-==*tQZZZVV14 !P( ͨ3PYYYqqq*Nn9rdÆ a𰑉ό8$MkdfN^sWҵݹuxfɃ{山^zɓ'zѣ3gIw@W4J-[lٲe]1 ,3XvSC]#WeU/7n:uA@;eee4z' BH3T^yy6f̘gyA@jݻnv 2/&.:.1zH?աF>ugOTWU5}iӦաNbYg͚uuDIlw[ƍV333䫔]Sd0C;ӧ: $lncTZZZ[[bD"鮎4fegggddܺu+ g6lJuu\*2:zN=$xe^˹xDN;n  5j>ۯ_?WG\ߦhAAA8/GM?\(׽]8ut헟槥}'f[|_|1r7>ZEw:\ѝ܏ר7m8bWւ#y:j"L&hDYVNjAjM)J y4L&#d2FC \.QL&Syyy4͆E"Dru!t:]ff޽{ry\\ܸq]<"zܹC7n\a}?,HѨT*RVUjFVk&é4"S(L6 LЙ,*F&SL&J#S(tJ)I3N'a14jd6d2Zl2b-fl6`ZѨ7L:iHd,6Ylx|G}CBB:tcիV}ՄٳyBBB>aÆX,$3iH(Qr87._8j5qq3O>}:puhl6/J݋2uk#]TdXeŅFZbEt4@GZh4d2T*oN.u B[,CD"c0Yt&`1ldL:`L6k'IӨuZ^izV`j:Z`WR(|w>w===Baˋd9L0H*biF4YH,P)))8~8H7n\jj*epZyyysr\Z-"XlD(OЃJe x6^»e%RiyLZYo􈈈ݛvATuϵBi_<<<Ν;dȐҘÇ={MA)k:YՅGe]m4bc¬'¯-t~c+W~q9q@g&MK}n:m[[8nZ_;_ tuPx\x!juEET*R*؆T*R*Jl6cGaL)`L6`&e6jZըjV֪U:JQc*j_~ <[(z{{^_[[VBnnn"O"`y{{C5n,??ǎgϞ;vQ^ax{ݽ{ ?? DxDW$A65Ҫ iEYe齊⪲{e:B ٳgppp^BBB\5Jjkkݻj0Bl6ϯ䧟~Vv"T*5---%%{Gh5_$:~؀>9 rֵ+\^޾oG+q 2rYeBZQVWSثWzAWU3*++s\YYY__D"޽pB 8q)SZ^oZϜ9s}p={?oto{>[u[W.̹xn^3M<ȔѣGx@Vw^p7ld|8X!V9xȁgO ǿIII#膪KJJ4Ҳښ")xzxx ݽ}[6MӫOd={G@1d1 }77޺^faB\_(BQD$|a x.ɠ3&dtZ]Fעѵu-mZx9L&J!cHHXXB#&ލuG>le6O8qĉ3g [Z4PyLbJLXiHhn!kUWWUU,os FjjjzZZVVr<;vػwÇ&KfONLM #܎/٬Xمs ϟ>^Tpn99xnt>An >Fr.?P& UwxIo zec=IjnU5ַ7<"<2"2..6)))!!!.. 6N/0eʔ(pI466*UӶbq8|_  x._9\r!t簘d-&Aj4LzѠ3&d z^מ+BlD*HBCCbqhhX, H$!!!;{pƌJFIҎ1#TzC]YmmJη Ϝ9Sp³*!D&SyDtXtlhX$$p uuՕUՕ !b$HOOOOKK߮nw^^^nnnO\.,ޢ]9ꊲ ϝ)+*x<ѣ3fLNNNTԝpGW%%%/^,))xf""IxtL1cGnQXlonS6WU4z<ô?ӡC\#<2~x.ϧ@ѴOj4jViNgǥ esl.8XNbq,6d BO6fmv6+f6[LFńM4f6af6ch#P  AABX,GPPH$§!zSxO577l6P```LLL_ČX^^^\\\^^^RZZZRZWW,4D.ɥ!rIH4D."1_ =FNmiU+MuSQܨm3Œ8BCC[3s:gϞ?}t^骪JGãbâ¢c#be0i\Һڊ:K|> } ]9fמ43w:555G}]]FnG$ /Bq|69\#vOMd6,&#Aն-]Vkn f+pԇCd0_\x2 H,*$!rL.P, )},f]Ơ[5:mQܠjjP6cf3B7xo!o #WYYYPP:?s6LD%&F%EDqW :ʲˊZ&";xР̔}544OdӦM=z4DwQ)m4-lZVd2aO fZ-dZ3LVv-sA" Bht JBTL"4:JEhtx !Dg0-7dD|K30!z3B0 Z,mmnv6ە7p e2Lp&`0x<b2L&-m!1#RiZB|>?<<bFp444T*JhJ`w㳹< `L&BetJ1Y_*-&p:t:dtN3}׮x<~H$CBd"(88X,K$T*JZp꺺ںں榎z6+l6a9l0sMZ,lVŠZӁ KiK"\.Hp8$fS(&IR Nh JX,2f! n!*cHRax3S6M }ncfXl`nX,.Frkf0'<N<>Ag<vq@>ǃ8fSjwL&d6 h4r!<^7㟋L&<.r\.D$IRH$o<\@+--=p@nC.2hȀqɩ)tVWY^Ztܙsy'drcsƌ=:++Y=iii2.3r3z OX,{ڽ;w>JbS2 =<*.@ @ߴ'vԗ] جؙGZ׋G&/Ou!CGf ;:϶ӯƿ5_HKgT}rՅK.MJJwEoFcMMbF#G@z_7 'L~q!PN>  !؞NY7@A'M"\NG1cb>{G ݙ'D"˹{XZVf_^u"FY~}nnB]L&SuuuטFAzBTΜ5CSf<==6>zxKk5?ϸN]$=+Mkժ/]?/w$f6dfK|;~lۺgOyq'_:YNOuvt8-*extM~ Ѩ^>M~Uˋ NYCg0Bv=n"@]aRg oIM~pƒӻڪVӱqܤKAk/Ob6^Aŷkgx#C(<ʛ^xm~klX~ԨQwhڍ7ݻWP,Y$-->g{3hQԨ("u+++@"/߼39m 6k{zy!Y̿ USÎMk}c>>S+^بי :|]tv)c߽>,{Wy/@])*]gVՙWW 1&ePvQ;Ne+.uwx?ܳu3͉MN={o5׾G !ԃuM cc Cx¼#N ʮ(}{AD̥ADo-lKHI۾ASgw]k,kT~l{:򖻙H$i3GɼWƎjժ'xEѸvڿK$͛7o1fwhBT*U.+lB 1##>MMM#FG~z3y{4hhq!TJ+ʛ:s#!Hk &ˍ;:wWɣwطs[@@{&:I`z#&MݶaV%{w Fv/'?{_|.:۷g'O3#91# f! xtoo}-:?;K&8~؎ IDATwD1 ;l۬T*đf=݃U|;t:B%LxkhՆ+ l:;66V|;@c0/z][~Zʯ>o]cK$uζ6GoޒÏKlJJԃy`ڷ/hQ+w-w{EuYqFBuŊGBCC]^{̨CC BCC ń bbb fn]Jx_qĨ[ϟ9g|JNGe +oE u8}^wߝ9sɓ{>ԩS %''g޼y>OVVT* kye|m#?wM&mmVzrKq|оۼ^!N-ϽOM{_ wQ= R3 OKff#xADR}{/ !D FO`صq1טAAe 束?ʠwh˻ڮE6x^\Z[Y'/78s!_mkxbFAzN~߹377p$$f M:(AzfŒ1cF={ wD׿-^XP~r1#T*3J,X͠h8puud2%&19695~5ESZtlم &#9jdΘ1cƌILLwקbً/ w9Z. !p8v;BrYV1͗[tlm]n?"pi>Op\Ӗbmzju:Fn;-5L[Nh,Fq8Ax<^.j<`'6#jjjy`PA[f6'ʊε!B1hР#GfddDeeeS(|'X,ݎall6 n0bi!c2^dxd4a=_tRt!D"l6DD"&r~G4<`t|Ju~p8ZZZJ;zAocfŬr\捣hth@>_D&^Wu|m GOvٳ^KGDćGņqyЭ鬫,(*,on|"8sPffFFfffFFH$w7̙3 .LNN?>*f?`2l6n7 vn FfYfvb:Id2$HL&H"1,` D"&l6@`9l_] 1,y+!|>f,f׋۬mn7B᰻].t6jxlxlV0aZ^3}>|ٞHe24:pl:f8Ng2\.O)q tښIccFiiiinVjZZ*+~ds,60YlbsXlɢ*O6_?Ylr2s96+f\Nbv:.b2:łYVن-&`3f6\N|q*&E T*HR\.W(t$]cFJbFcA|̙3gΔF H/ csarWWUUT6TW֔47{< b{y̷~ƨEfU1Wd4h4fvwZ8N3XJhlJtC34Ŧ3Td1Yl F3Hd2^NڃM;vlۜ جY1fq:vf1;ݎMb19Nd0\\R6=$B@ Z:^_VVVVVV[[[___[[W__R)Bd2E$ EH" H"K"P$a\NEըt-mZQk[5EQ5 NPP(r<<<<66666V.,#ukQTƌ|~xx8Č3%%%5/V{^ $* <,8T,SDD  Mʆ:ec}sC^XPg6B"$))1)11111"""!!!88%C y7 ˹58NFT*;ZVmmjuZN:fd pXla9,6M[66b,lMV30{baflg0g0@@( #]" %H$DwB8WWWwŲRNP2B, HdYD" ķǢdT77USF٨inR6[=)fR0 Cxt Gpx]YYY]]]UUUU]]]UBd %X,ȃCä T$op#,&cZQ6kMeѩh4ZDddTddTTTdddTTTLLBs-\p/ҝWvJJj4 JJ٬4 H$ \esx"P$asl.BpXLFh1-&UըlFԪQFJRD"pཌྷ[1@ âbQ2yXXT t5ڕj,W6VWUV;v"(+ӳB^ړFẍFFFBAn"UWWWUUWUUTJU,RY$8H,RP,KeA #`sZnnjUZJUjTqNTdTTԥ3dw#9rܹsjucccSSScccCCCSSSccSccckkg#Ɂ@$ DB/I)*>1:.)2.bF=vjʫJ/VWW^4 D"1..~ȐC2$::ڿE^.f`0 Ett4Čt: M|2$E H BH(AB/tZ^ը VEע1ZQU+lV+>' ^.z.\wРAo6Hw9}nWWW755555766T*˅# qD*HA"N [?=v :Vk[u]FlnU+[JusfgcءP!T.򈈈n'8v'*"bSe'fD'*"Dk iMUϟ?Q|n e>l؈#2225wя;vdЛ z^g6LFAնVEۢi[=mm %(H$bD"Je2Y{<tcpM {N.âDiH,4$$2y H,KCӸ]VJQZ4zFo(-VGFt~!_Z> cPbSht x gN:w\lf0roh4@/ x3ͦT*5FQ*---JRѨUjJG9$O9@dsXlܹmVbZ,Vd4zAo6 ]6 .})"(KRH$dAAAFp?;vlѢE{ /pfNgIIIIIŋKK˪kkjjHd$8$Xà f6!,<:vÁMNt`&[an7p9q. &"kҥSLygyp;w.?????vPExL\XTldlBXT"*LXDfh#\^RRRffFffffffTTT?ڀѣ~ov3ȹce9 \Sw}:.n& B-}kKMeYmEiUYIgff 4!Lp l6mZbLx]Qn+;~>w,9)I,:tr\.S($ xvaZ.f9Np8nw:6rYVۍzMKzB vBf!:o6uBukD& JAQ4"IΥT`६&HT*!DR Ba2d2bH$6M$9@r<!;[v͛g̘1sL?mmm(8S`0?``܀ )ih2=aY/-)*,;_lj@ˆ 3f̘g-_IS{2q`OQܲ~u)S>xx#;\lÇ_}q*..޿}X́BQZĴ̄i *zA--:[z|.3,<|lNNNNѣBNp8ŋx|iO=7i\Gk IDATE>3.X ] Gw.Z`V;臘 ݻs׮}SU,6'uCFGá}p\8wѳ^8z 'OX`XV7or6;%3kiRnjGikkܫB$9mе™<+fDuyICMU/\OWM񹂲 ,&L>xD]Uy# )cRDۣg,N9yj$O1cСC]f/a1畷DzCG{Իmm][6CB]Gwӹjժ]v;^KO^bů[:cF0tx./Wt8.1?^6i.Di5|wݓovmu|1,>5ڱǯvht:@Y1xyo|;6P~f}SgOƢ압_sj*J=WFEE?9sDDɓ'>jWGM;Iw?n&6bhMxbaGK. O>Έ#nֽ^֭[.]w*,*fsOy8Ptǝ}>/>˚;4d]+266贛&4,oז>2銘B0=>їuݪa/{?2.?c㏹]E߮M8l;~;i껟}@ !5@[ 11_[Ztv֟|ߟsMLLwumٲe٣ƾxiRw/]l͂G/oe͊7|… V"{-?/h6mڵ{FFG}$nr; ˹ˍ;Ҳ_*(@ICaQ=[C靲n4GˊmX52UH$2ޘ=ZH*{k7Zz鋷G?<}-~{k_} ))f]nj3yg|>)0П;'M`}yS]MHXDmկaSEĿlj*Wp#.X592W^y婧b07 ̙3w];eƓ~:ɣO;Qiq϶͛V-Od񖯗߳ms}-|>겒̬MchۚkږS!Y٩%H,E΍+\mo 1گ>|GX뚕V|Wv_~l2SyNױ%ء~L,u]׹qWZ"شM+ܴO\ȸ;s+}F(tD"E[1H* vB+?b^lɞu郉$_|gOu5lPll./8T/n26\e7TW>x/{8|Ne[đU/0t@l>X?YqdK{ u\F{n22:eƓi~ݴ%CdͮPVVdD+_+++ǎw^O?)غ?ؤ~CGzw!WC>_ڻ Ē/]%N_DW%OBQW "<:! ^_?vm0aSO=b]a7NӍ7u}7y뽂ڞ=GGa/?z=<#}aǦ5Ͼ1!tꊗ/6u&_עq9][BFS# ݿ{})Y&(.._+swmP׵ʺk BUzuGI]Tp*w~oʀjaE'$Eu3$VvBy=[73ٜԳvYS}_6F!d,]ӲgG_`F5xĘP=]8w>X*=~|$ eΫoT_kg^t#ߘX0(u^0%oz'><=Ʒ뫖ۣ_:r}}p-wE/?s<oرGv'|2D{K]?o;ZMJs3H=I+_C|AO ۴F, MHM;7lyXdJf֩#"B͹t+\"\U|v3W_&N(˯<m]ٳYYY+W 58ѣ茦voފ Mc0N; ɣx\&!;.5%oԣs^4qPJfVw/(:c,/=vWz,>XɃ"=G"cB^w.}ȈN-V. S( n[xa]U܃zcC7n[d4u\h_uSs^}k sOxp%_GsO9ԬʿxaZ͖"lVoks_vȤտ DbIY =] 7xW-J*%}JΟ?B[[Bh4n߾_F1bDRRRl:~؊G*J.T=3._{o<]7~ )p4BȠ>0t_MQOzl^^2B@ .}?콚4ш#A>|xÆ Rn2eD"w\>|xAޛ@.S795Bb&gq8DDL!dBc,)!tֽ.%Qфڪ.j+d66wɳv9U/!$={|Os4^U^)[u秝GݬVٓ0 a@Gم_1oRQZXhc?]/8) {9rĉF/\p6.gs}NV柾[RߢD]C.:JO> 9{;i\CHPuGlvmxg}j>c_}խ:!O=۱q.hm#Yl6!$}Cy{'LrG3QΔB1 }r3OߟyΜQ[(tC^ߦ(kCMi}  `0>~.X7_48d}Q;734vuDeF|l| 6Bʞ0#먡[s" H{n_nכ, /X߱h4 CO/ԩS'NPj90qYG&5qUCyE^M Շsۤq`4@pxp%z۾}nwnnҥKy>/-[lYzù$|m.>>fo>'O>Kb1!dugTN<,{OZc~g1^{rɱwlpt[CB].א!CfΜ9nܸ.\^7vEo^uΑ6}߶[c't?{9WHO?ah޽@gH<2(ʭ[ڵKզ_=z4w\`c;=+QbIjfvѡqlB(P|e9ޱs_%rr]=?!T*5w֍.r&eBH ֳ^Z0Y'=|Q͹w|g._aRȥ_OHI~;dO7?~ㅏ_[NG}OIatҒ]7df̽{w`Eأ_-OC靚S'?y_|ܝ/﯑^k=7{/X"009955uTE|w8cƌM$ \vҫ ' 3Kwl\w`;t#;vϷӧO3f ~%%tr_^dזg{5}^ťݶiͮ ۵oDqzM,tt5h4ƍw_(Ο0 ݱq :pC zKKKwܹo>՚Zl_oSUu*95y<{./w\pMضW()udu7xރ{w=oTmUֵm'mKuf=lYNNVg̘2ᜁ9 u/?@ O:Ƽ:""bҤI Zy<~mժU~f7qSfJ\ w9uBGEϼy~δY .xy;T, [kС n_|o9qƜ@$wD`dz|QYJv઄#:}t^^^~~~mmmHHHNNΤIbcce=.)%={#2jV5=Wx`_f*<<'M [lE:y|*ʎ(8O>@z+**J\.ɹƗlvڱcǎ;#ӳsFfON`0 \:mkѡ7ԞfXcL:ee}YX{>3mBwPpVU|YYYGf4n7!b8NBZm4wa{{l[L&,bل: ! E$ ܬV:T\\l2'L0zh\Js]vرSlbF$HO4"]ߴ;K(*/)>YRT[}BM:eƍ}TWW??Ф3eLA*:ao6,W_9s#s@\Vf3 ^WBt:!D{^_dr\fl8Njwm6n#]T!k0;Kp &!d9lBF4*M(R(XDD E(RT_ϧ</ 2 6fE"aBc2#G8pfō3&;;;::ߡ]N<{Ç)(x<@IgDzOWW?VYzt9̱c;L;[o]b_7o+, Wۆӧ*njydɒyawEA G7&`0 h8Kvͦl6nokl6ͪmVnpn_ P(/ydqqqQQQYY!$)))333###66B;kN+---+++--=QZzf !D FDG*#C#ᑊkm!.~k*ʆZUCEr:T*uh|a11ѾLX nرǟ~ڰ~nKJ9&'sQcGP[Uׯ?Q\`ٲy›nI*;4$iooohhP*:NR)JcNRT*n,CB!O |/B,D" Es}Mɨ7&wڬimV[Ao2L}[k]d2@q8T B.bAxxy֗lTRRbZryZZZfffZZ\UVTTTutBD!HED""*X ЅM۬VZUCַ@(KJJj%mmm[lٶm;RYp渉c'%wt:xуyGV2Ϙ1cΜ9G ۭV5"*( K`(P$ʂŒ ,D$R#٬}Vۢi[[5j]kEm赭j]kpBFJC#"""CCCv$pĉⶶ6H2cv;R++O91ā2B& +d! <4X&+Bز bfET75*FآnjQ4&(;`4 oݹm۶mݺB1:%=3e䨸a41^T u%G(:rӕ'=ODDu͜1cɓy<K#M[[ӧkkk5# B`y"L"%R,D, KTͿCDfY׶hT:mKFݢQ5+Z&*##"|Hѡo'N?~ĉᤤ2;]M4Mccoi7444TvBBKCRX$%ҠX$  RI0֖VZmiѨt-m-fb6qy𰈈0$Jd0yx\rJdLKZYyF 2nqEFF;FOH<RSNtSSo z@@"T)HCYT;?9vmFY_ڬ6kkZ4m-#c t,+>>~#FHKkQgklhhhnnnR*jZֵu ArD*$AQD( BQP,4 6^gе۴mͺmZڢVi[ZN2N r\P(BCC"##D"UZ.dE'].ŎMLKJKJ 34Puzf4Tן:YZUvMJ HOKKOO=z4w0Pxpehjj*+++---++;UUuFMp(yxdhD"[M ʆ:eǺJUce0IIIÆ C*jjZ,YmkMkX:_EP!_(eX.3Y,6K9.= 1G8<>JT K.xn-f㱘Gk6^d$ znY&fuVn8vl1vo.t@ bX$D:b߁D"ndkntJX$%AY@(|/"Pɠ7&d0 zQkmiըmڶEӦmu\\/""":::2""222222""bȐ!!!! *H<‚GL&#N0<-&>qH\BTl4bX-ڪʚS'UXf:H jl:fl6^oZVh46d2&f2FjZvgtR_P`2G=ernnnQ\qxL&oe˖w(M.wDfvqi'hLX_|xe3kus̉wt=#~c4׭[?ٻr1vbzi4rFc:YipHJzV[;~l=aJkey*X:2ӝ~MʆZ.t:OIJc]M޷d4 ~M7q Bxv_߰dO2~uٓ Egrrn?ٱ۞=+ҪQ'f\ߑӽ}k>蜧&ϚŠӞ|1!Dr0|}>}PDtlSO?pmx,0Hv\#eozrڟsnjkm3fwߵ`Ხpq:_}Պ&OfHȗx_wzヤ龒\بI1cugGvu/Ͻ.\`z쉍߯vSyɳ%V}+^~WO9&B\ݮvAd9ng_>wuk?-{{-Y$44Y駟QTS%OwP8J!򰈨v]?a]yx8NxXl6!卟zlz;7oģB\HχF<}fͦ?G,y'B8GvoѢ ],KQm]Hޞ~!(X+Z5bJ~nLz?vjՒ^儐M?*:w=ܳ.%,ñ9h6FdfOIg+Z3Cbf>Q)Sڨ7,r`ώO{{[֮RۿEGU!qcrOah`-jFxܝv2IPpGIФ?Rξ'^y>r8ڪQg޼`9 墝zI(v-߭FO=c0 ŅWQSyn(0oּ!_Ut(|yk !o!]*oT# qDmx(Pt-hY]>vK]Ŋ7?⋯r֬Y B sر1?nsWb!/ܴޝf/?ݹi#UcoRCwJѷi :Yt8c՟KqIvmްׯŅ<ć>wP(էvnZ_Z\iOto{IFɟKFdeVWz؈l샋NWwRiO0qMlZ{eY)J {0h>xϧoؓN{m7;j2W}K9o.:;tT'jBXt\Z-5 ^E1 .:8'[sk*7_my#FWXGRQQ1qҤԌ>_@W,H9A))yM{¢ !#WL!Ȃ޺/&>q{.c{cr:?t^;g#Ov,fӥ%/.~3~LBy'7r̤i6>\}v޷+X6㯯#Bʞ0prU8'zh/'W,fuknk_`2K?0}mK290rLФcZLV}y_=Uzvl-;vBNϞ8ܫf_[MJz*tosI}M>rT ,'.qXʼn?.HO="s4!b6}/lz}3o+;s]y;ͼi~5xjk<OJzf!q C!ŅQtz@SCqB&LoܴxQɠ@.|\*yhxPsɈ߯>Qؓe0s}͛ﻯ/?G=D霾pE˞45 q8owt|bʼn,}*.)qQp'iЬo"@ر,"<2$4w$W\z]tosl&px.u8\fx;gڬ'~ߵl-W땟(P6jLrZƼ;{?Op o=B,vK|Yͦü21oF#$T||<<;2&߱.16 oorjBI9fGM,:pqIlDL!dBc;c0ɨmv. &VUvS[]e60?2o?y ed~("3o˛ʽnOB(£!]>mnKP[Uڥ冚jipR:kV+WIS_%^oOғk֣ `0:JOWBᑝ]:)jOW1߁L&G7O;1a?ܖ8"fBG+:_w /w=GL,Dm.W{ǹ՟?#5f9^gZ_GMܶ{}0 5crOIDAT . Ql߸U^pp7!nGRwmڰosֽBhdL?m/cs8܋vAPV-?g>_`v+˞0#'ɵ}flᛎNcdI2HحWxxh9s;a#^x[~ΗYXdoHTϼwӴEKPDDQp ]u{GftB~9{! BD5nc5]?{~g_\z÷߸L{ﶍ{~8eܰv:4)eʻfOXpȘ8z`ޏ_~p =1qT*uB"xA剒o>}樛OWGM@zrmzdX+^zE7Ц]곆e/`v]V`Q6._;w8.xzm… oޥT ŒC|%لQ$<2y[عi}/?yXDQ9Zs˞*;Gv)nquQ9{xD;5zvK{#k'^~/9QcV|^߇ou+?{8d_̛o=q}KMa\3>x!F0O.azAw^##<+2yhO{t럾E !2y/Ss'oOzkУ<,bK?|o>y" yϹj@K޺nG>'~}a} QE|z1,ǃ7/;l2j!0XdZZԪ(߲ozb6CT{֠#񴨕z9'wájbWnjʺ0_*X{/m.VU}wP t:o^yyaC\=,fӯXƺ}a'$\^r_R)S3g<9\G}xnz GMLLw\]!oٲeժU[lRi#䌛2c WQx`_έvoom֤΅ , 4S[[?ƍ;vp iǥ7"+;:\nɒcE?~fȼΝ.Gfٳgǎv>q8J6<5klzlxʲEGA"<9w3f̐x0ZZZٳ{]vWUqRRRREhtHl BBv@CjnnV*YT677T*Jin֨Fs}6# E@ _$E"(P( D<py|&= #{parent}" end end puts '}' twitter-6.1.0/etc/erd.svg000066400000000000000000001772251303650752200153070ustar00rootroot00000000000000 classes ArgumentError ArgumentError StandardError StandardError ArgumentError->StandardError Array Array Object Object Array->Object Exception Exception Exception->Object Faraday__Middleware Faraday::Middleware Faraday__Middleware->Object Faraday__Response__Middleware Faraday::Response::Middleware Faraday__Response__Middleware->Faraday__Middleware Naught__BasicObject Naught::BasicObject Naught__BasicObject->Object StandardError->Exception Twitter__Arguments Twitter::Arguments Twitter__Arguments->Array Twitter__Base Twitter::Base Twitter__Base->Object Twitter__BasicUser Twitter::BasicUser Twitter__Identity Twitter::Identity Twitter__BasicUser->Twitter__Identity Twitter__Client Twitter::Client Twitter__Client->Object Twitter__Configuration Twitter::Configuration Twitter__Configuration->Twitter__Base Twitter__Cursor Twitter::Cursor Twitter__Cursor->Object Twitter__DirectMessage Twitter::DirectMessage Twitter__DirectMessage->Twitter__Identity Twitter__Entity Twitter::Entity Twitter__Entity->Twitter__Base Twitter__Entity__Hashtag Twitter::Entity::Hashtag Twitter__Entity__Hashtag->Twitter__Entity Twitter__Entity__Symbol Twitter::Entity::Symbol Twitter__Entity__Symbol->Twitter__Entity Twitter__Entity__URI Twitter::Entity::URI Twitter__Entity__URI->Twitter__Entity Twitter__Entity__UserMention Twitter::Entity::UserMention Twitter__Entity__UserMention->Twitter__Entity Twitter__Error Twitter::Error Twitter__Error->StandardError Twitter__Error__AlreadyFavorited Twitter::Error::AlreadyFavorited Twitter__Error__Forbidden Twitter::Error::Forbidden Twitter__Error__AlreadyFavorited->Twitter__Error__Forbidden Twitter__Error__AlreadyRetweeted Twitter::Error::AlreadyRetweeted Twitter__Error__AlreadyRetweeted->Twitter__Error__Forbidden Twitter__Error__BadGateway Twitter::Error::BadGateway Twitter__Error__ServerError Twitter::Error::ServerError Twitter__Error__BadGateway->Twitter__Error__ServerError Twitter__Error__BadRequest Twitter::Error::BadRequest Twitter__Error__ClientError Twitter::Error::ClientError Twitter__Error__BadRequest->Twitter__Error__ClientError Twitter__Error__ClientError->Twitter__Error Twitter__Error__ConfigurationError Twitter::Error::ConfigurationError Twitter__Error__ConfigurationError->ArgumentError Twitter__Error__DuplicateStatus Twitter::Error::DuplicateStatus Twitter__Error__DuplicateStatus->Twitter__Error__Forbidden Twitter__Error__Forbidden->Twitter__Error__ClientError Twitter__Error__GatewayTimeout Twitter::Error::GatewayTimeout Twitter__Error__GatewayTimeout->Twitter__Error__ServerError Twitter__Error__InternalServerError Twitter::Error::InternalServerError Twitter__Error__InternalServerError->Twitter__Error__ServerError Twitter__Error__NotAcceptable Twitter::Error::NotAcceptable Twitter__Error__NotAcceptable->Twitter__Error__ClientError Twitter__Error__NotFound Twitter::Error::NotFound Twitter__Error__NotFound->Twitter__Error__ClientError Twitter__Error__RequestTimeout Twitter::Error::RequestTimeout Twitter__Error__RequestTimeout->Twitter__Error__ClientError Twitter__Error__ServerError->Twitter__Error Twitter__Error__ServiceUnavailable Twitter::Error::ServiceUnavailable Twitter__Error__ServiceUnavailable->Twitter__Error__ServerError Twitter__Error__TooManyRequests Twitter::Error::TooManyRequests Twitter__Error__TooManyRequests->Twitter__Error__ClientError Twitter__Error__UnacceptableIO Twitter::Error::UnacceptableIO Twitter__Error__UnacceptableIO->StandardError Twitter__Error__Unauthorized Twitter::Error::Unauthorized Twitter__Error__Unauthorized->Twitter__Error__ClientError Twitter__Error__UnprocessableEntity Twitter::Error::UnprocessableEntity Twitter__Error__UnprocessableEntity->Twitter__Error__ClientError Twitter__Factory Twitter::Factory Twitter__Factory->Object Twitter__Geo Twitter::Geo Twitter__Geo->Twitter__Base Twitter__GeoFactory Twitter::GeoFactory Twitter__GeoFactory->Twitter__Factory Twitter__GeoResults Twitter::GeoResults Twitter__GeoResults->Object Twitter__Geo__Point Twitter::Geo::Point Twitter__Geo__Point->Twitter__Geo Twitter__Geo__Polygon Twitter::Geo::Polygon Twitter__Geo__Polygon->Twitter__Geo Twitter__Headers Twitter::Headers Twitter__Headers->Object Twitter__Identity->Twitter__Base Twitter__Language Twitter::Language Twitter__Language->Twitter__Base Twitter__List Twitter::List Twitter__List->Twitter__Identity Twitter__MediaFactory Twitter::MediaFactory Twitter__MediaFactory->Twitter__Factory Twitter__Media__AnimatedGif Twitter::Media::AnimatedGif Twitter__Media__Video Twitter::Media::Video Twitter__Media__AnimatedGif->Twitter__Media__Video Twitter__Media__Photo Twitter::Media::Photo Twitter__Media__Photo->Twitter__Identity Twitter__Media__Video->Twitter__Identity Twitter__Media__VideoInfo Twitter::Media::VideoInfo Twitter__Media__VideoInfo->Twitter__Base Twitter__Metadata Twitter::Metadata Twitter__Metadata->Twitter__Base Twitter__NullObject Twitter::NullObject Twitter__NullObject->Naught__BasicObject Twitter__OEmbed Twitter::OEmbed Twitter__OEmbed->Twitter__Base Twitter__Place Twitter::Place Twitter__Place->Twitter__Identity Twitter__ProfileBanner Twitter::ProfileBanner Twitter__ProfileBanner->Twitter__Base Twitter__REST__Client Twitter::REST::Client Twitter__REST__Client->Twitter__Client Twitter__REST__Request Twitter::REST::Request Twitter__REST__Request->Object Twitter__REST__Request__MultipartWithFile Twitter::REST::Request::MultipartWithFile Twitter__REST__Request__MultipartWithFile->Faraday__Middleware Twitter__REST__Response__ParseErrorJson Twitter::REST::Response::ParseErrorJson Twitter__REST__Response__ParseJson Twitter::REST::Response::ParseJson Twitter__REST__Response__ParseErrorJson->Twitter__REST__Response__ParseJson Twitter__REST__Response__ParseJson->Faraday__Response__Middleware Twitter__REST__Response__RaiseError Twitter::REST::Response::RaiseError Twitter__REST__Response__RaiseError->Faraday__Response__Middleware Twitter__RateLimit Twitter::RateLimit Twitter__RateLimit->Twitter__Base Twitter__Relationship Twitter::Relationship Twitter__Relationship->Twitter__Base Twitter__SavedSearch Twitter::SavedSearch Twitter__SavedSearch->Twitter__Identity Twitter__SearchResults Twitter::SearchResults Twitter__SearchResults->Object Twitter__Settings Twitter::Settings Twitter__Settings->Twitter__Base Twitter__Size Twitter::Size Twitter__Size->Twitter__Base Twitter__SourceUser Twitter::SourceUser Twitter__SourceUser->Twitter__BasicUser Twitter__Streaming__Client Twitter::Streaming::Client Twitter__Streaming__Client->Twitter__Client Twitter__Streaming__Connection Twitter::Streaming::Connection Twitter__Streaming__Connection->Object Twitter__Streaming__DeletedTweet Twitter::Streaming::DeletedTweet Twitter__Streaming__DeletedTweet->Twitter__Identity Twitter__Streaming__Event Twitter::Streaming::Event Twitter__Streaming__Event->Object Twitter__Streaming__FriendList Twitter::Streaming::FriendList Twitter__Streaming__FriendList->Array Twitter__Streaming__MessageParser Twitter::Streaming::MessageParser Twitter__Streaming__MessageParser->Object Twitter__Streaming__Response Twitter::Streaming::Response Twitter__Streaming__Response->Object Twitter__Streaming__StallWarning Twitter::Streaming::StallWarning Twitter__Streaming__StallWarning->Twitter__Base Twitter__Suggestion Twitter::Suggestion Twitter__Suggestion->Twitter__Base Twitter__TargetUser Twitter::TargetUser Twitter__TargetUser->Twitter__BasicUser Twitter__Token Twitter::Token Twitter__Token->Twitter__Base Twitter__Trend Twitter::Trend Twitter__Trend->Twitter__Base Twitter__TrendResults Twitter::TrendResults Twitter__TrendResults->Object Twitter__Tweet Twitter::Tweet Twitter__Tweet->Twitter__Identity Twitter__User Twitter::User Twitter__User->Twitter__BasicUser Twitter__Variant Twitter::Variant Twitter__Variant->Twitter__Base twitter-6.1.0/examples/000077500000000000000000000000001303650752200150415ustar00rootroot00000000000000twitter-6.1.0/examples/AllTweets.md000066400000000000000000000020021303650752200172610ustar00rootroot00000000000000# All Tweets This example assumes you have a configured Twitter REST `client`. Instructions on how to configure a client can be found in [examples/Configuration.md][cfg]. [cfg]: https://github.com/sferik/twitter/blob/master/examples/Configuration.md You can fetch up to 3,200 tweets for a user, 200 at a time. Here is an example of recursively getting pages of 200 Tweets until you receive an empty response. **Note: This may result in [rate limiting][].** [rate limiting]: https://github.com/sferik/twitter/blob/master/examples/RateLimiting.md ```ruby def collect_with_max_id(collection=[], max_id=nil, &block) response = yield(max_id) collection += response response.empty? ? collection.flatten : collect_with_max_id(collection, response.last.id - 1, &block) end def client.get_all_tweets(user) collect_with_max_id do |max_id| options = {:count => 200, :include_rts => true} options[:max_id] = max_id unless max_id.nil? user_timeline(user, options) end end client.get_all_tweets("sferik") ``` twitter-6.1.0/examples/Configuration.md000066400000000000000000000100011303650752200201620ustar00rootroot00000000000000# Configuration Twitter API version 1.1 requires authentication on all requests. Some requests can be made with [application-only authentication][application-only] while other requests require [single-user authentication][single-user]. [application-only]: https://dev.twitter.com/oauth/application-only [single-user]: https://dev.twitter.com/oauth/overview/single-user ## Application-only Authentication To start using the Twitter API, you need to [register your application with Twitter][register]. Registration requires you to answer some questions about your application and agree to the [Twitter API Terms of Use][api-terms]. [register]: https://apps.twitter.com/ [api-terms]: https://dev.twitter.com/overview/terms/agreement-and-policy Once you've registered an application, it's important that you set the correct access level. Otherwise you may see the error: Read-only application cannot POST Your new application will be assigned a consumer key/secret pair that identifies your application to Twitter. This is all you need to configure your client for application-only authentication. ```ruby client = Twitter::REST::Client.new do |config| config.consumer_key = "YOUR_CONSUMER_KEY" config.consumer_secret = "YOUR_CONSUMER_SECRET" end ``` If you prefer, you can pass in configuration as a `Hash`: ```ruby config = { :consumer_key => "YOUR_CONSUMER_KEY", :consumer_secret => "YOUR_CONSUMER_SECRET", } client = Twitter::REST::Client.new(config) ``` Regardless of your configuration style, you should now be able to use this client to make any Twitter API request that does not require single-user authentication. For example: ```ruby client.user("sferik") ``` Note: The first time this method is called, it will make two API requests. First, it will fetch an access token to perform the request. Then, it will fetch the requested user. The access token will be cached for subsequent requests made with the same client but you may wish to manually fetch the access token once and use it when initializing clients to avoid making two requests every time. ```ruby client.bearer_token ``` This token never expires and will not change unless it is invalidated. Once you've obtained a bearer token, you can use it to initialize clients to avoid making an extra request. ```ruby client = Twitter::REST::Client.new do |config| config.consumer_key = "YOUR_CONSUMER_KEY" config.consumer_secret = "YOUR_CONSUMER_SECRET" config.bearer_token = "YOUR_BEARER_TOKEN" end ``` ## Single-user Authentication Not all Twitter API resources are accessible with application-only authentication. Some resources require single-user authentication tokens, which you can obtain from the [3-legged authorization][3-legged-authorization] flow. [3-legged-authorization]: https://dev.twitter.com/oauth/3-legged ```ruby client = Twitter::REST::Client.new do |config| config.consumer_key = "YOUR_CONSUMER_KEY" config.consumer_secret = "YOUR_CONSUMER_SECRET" config.access_token = "YOUR_ACCESS_TOKEN" config.access_token_secret = "YOUR_ACCESS_SECRET" end ``` You can use this client to make any Twitter REST API request. For example: ```ruby client.update("I'm tweeting with @gem!") ``` ## Streaming Clients Streaming clients are initialized just like single-user authenticated REST clients: ```ruby client = Twitter::Streaming::Client.new do |config| config.consumer_key = "YOUR_CONSUMER_KEY" config.consumer_secret = "YOUR_CONSUMER_SECRET" config.access_token = "YOUR_ACCESS_TOKEN" config.access_token_secret = "YOUR_ACCESS_SECRET" end ``` ```ruby client.sample do |object| puts object.text if object.is_a?(Twitter::Tweet) end ``` For more information, see the documentation for the [`Twitter::Client`][client], [`Twitter::REST::Client`][rest-client], and [`Twitter::Streaming::Client`][streaming-client] classes. [client]: http://rdoc.info/gems/twitter/Twitter/Client [rest-client]: http://rdoc.info/gems/twitter/Twitter/REST/Client [streaming-client]: http://rdoc.info/gems/twitter/Twitter/Streaming/Client twitter-6.1.0/examples/RateLimiting.md000066400000000000000000000012001303650752200177440ustar00rootroot00000000000000# Rate Limits This example assumes you have a configured Twitter REST `client`. Instructions on how to configure a client can be found in [examples/Configuration.md][cfg]. [cfg]: https://github.com/sferik/twitter/blob/master/examples/Configuration.md Here's an example of how to handle rate limits: ```ruby follower_ids = client.follower_ids('justinbieber') begin follower_ids.to_a rescue Twitter::Error::TooManyRequests => error # NOTE: Your process could go to sleep for up to 15 minutes but if you # retry any sooner, it will almost certainly fail with the same exception. sleep error.rate_limit.reset_in + 1 retry end ``` twitter-6.1.0/examples/Search.md000066400000000000000000000007771303650752200166030ustar00rootroot00000000000000# Search This example assumes you have a configured Twitter REST `client`. Instructions on how to configure a client can be found in [examples/Configuration.md][cfg]. [cfg]: https://github.com/sferik/twitter/blob/master/examples/Configuration.md Here's a simple example of how to search for tweets. This query will return the three most recent marriage proposals to @justinbieber. ```ruby client.search("to:justinbieber marry me", :result_type => "recent").take(3).each do |tweet| puts tweet.text end ``` twitter-6.1.0/examples/Streaming.md000066400000000000000000000006541303650752200173210ustar00rootroot00000000000000# Streaming This example assumes you have a configured Twitter Streaming `client`. Instructions on how to configure a client can be found in [examples/Configuration.md][cfg]. [cfg]: https://github.com/sferik/twitter/blob/master/examples/Configuration.md Here's a simple example of how to stream tweets from San Francisco: ```ruby client.filter(:locations => "-122.75,36.8,-121.75,37.8") do |tweet| puts tweet.text end ``` twitter-6.1.0/examples/Update.md000066400000000000000000000040511303650752200166050ustar00rootroot00000000000000# Update These examples assume you have a configured Twitter REST `client`. Instructions on how to configure a client can be found in [examples/Configuration.md][cfg]. [cfg]: https://github.com/sferik/twitter/blob/master/examples/Configuration.md If the authenticated user has granted read/write permission to your application, you may tweet as them. ```ruby client.update("I'm tweeting with @gem!") ``` Post an update in reply to another tweet. ```ruby client.update("I'm tweeting with @gem!", :in_reply_to_status_id => 402712877960019968) ``` Post an update with precise coordinates. ```ruby client.update("I'm tweeting with @gem!", :lat => 37.7821120598956, :long => -122.400612831116, :display_coordinates => true) ``` Post an update from a specific place. Place IDs can be retrieved using the [`#reverse_geocode`][reverse_geocode] method. [reverse_geocode]: http://rdoc.info/gems/twitter/Twitter/REST/API/PlacesAndGeo#reverse_geocode-instance_method ```ruby client.update("I'm tweeting with @gem!", :place_id => "df51dec6f4ee2b2c") ``` Post an update with an image. ```ruby client.update_with_media("I'm tweeting with @gem!", File.new("/path/to/media.png")) ``` Post an update with a possibly-sensitive image. ```ruby client.update_with_media("I'm tweeting with @gem!", File.new("/path/to/sensitive-media.png"), :possibly_sensitive => true) ``` Post an update with multiple images. This will return media IDs, which you can pass into the media_ids parameter (as a comma-separated string) of the update method. ```ruby media_ids = %w(/path/to/media1.png /path/to/media2.png).map do |filename| Thread.new do client.upload(File.new(filename)) end end.map(&:value) client.update("I'm tweeting with @gem!", :media_ids => media_ids.join(',')) ``` For more information, see the documentation for the [`#update`][update] and [`#update_with_media`][update_with_media] methods. [update]: http://rdoc.info/gems/twitter/Twitter/REST/Tweets#update-instance_method [update_with_media]: http://rdoc.info/gems/twitter/Twitter/REST/Tweets#update_with_media-instance_method twitter-6.1.0/lib/000077500000000000000000000000001303650752200137715ustar00rootroot00000000000000twitter-6.1.0/lib/twitter.rb000066400000000000000000000015751303650752200160300ustar00rootroot00000000000000require 'addressable/uri' require 'twitter/configuration' require 'twitter/cursor' require 'twitter/direct_message' require 'twitter/entity' require 'twitter/entity/hashtag' require 'twitter/entity/symbol' require 'twitter/entity/uri' require 'twitter/entity/user_mention' require 'twitter/geo_factory' require 'twitter/language' require 'twitter/list' require 'twitter/media_factory' require 'twitter/metadata' require 'twitter/oembed' require 'twitter/place' require 'twitter/profile_banner' require 'twitter/rate_limit' require 'twitter/relationship' require 'twitter/rest/client' require 'twitter/saved_search' require 'twitter/search_results' require 'twitter/settings' require 'twitter/size' require 'twitter/source_user' require 'twitter/streaming/client' require 'twitter/suggestion' require 'twitter/target_user' require 'twitter/trend' require 'twitter/tweet' require 'twitter/user' twitter-6.1.0/lib/twitter/000077500000000000000000000000001303650752200154735ustar00rootroot00000000000000twitter-6.1.0/lib/twitter/arguments.rb000066400000000000000000000004501303650752200200240ustar00rootroot00000000000000module Twitter class Arguments < Array # @return [Hash] attr_reader :options # Initializes a new Arguments object # # @return [Twitter::Arguments] def initialize(args) @options = args.last.is_a?(::Hash) ? args.pop : {} super(args.flatten) end end end twitter-6.1.0/lib/twitter/base.rb000066400000000000000000000102001303650752200167230ustar00rootroot00000000000000require 'addressable/uri' require 'forwardable' require 'memoizable' require 'twitter/null_object' require 'twitter/utils' module Twitter class Base extend Forwardable include Memoizable include Twitter::Utils # @return [Hash] attr_reader :attrs alias to_h attrs alias to_hash to_h deprecate_alias :to_hsh, :to_hash class << self # Define methods that retrieve the value from attributes # # @param attrs [Array, Symbol] def attr_reader(*attrs) attrs.each do |attr| define_attribute_method(attr) define_predicate_method(attr) end end def predicate_attr_reader(*attrs) attrs.each do |attr| define_predicate_method(attr) deprecate_attribute_method(attr) end end # Define object methods from attributes # # @param klass [Symbol] # @param key1 [Symbol] # @param key2 [Symbol] def object_attr_reader(klass, key1, key2 = nil) define_attribute_method(key1, klass, key2) define_predicate_method(key1) end # Define URI methods from attributes # # @param attrs [Array, Symbol] def uri_attr_reader(*attrs) attrs.each do |uri_key| array = uri_key.to_s.split('_') index = array.index('uri') array[index] = 'url' url_key = array.join('_').to_sym define_uri_method(uri_key, url_key) alias_method(url_key, uri_key) define_predicate_method(uri_key, url_key) alias_method(:"#{url_key}?", :"#{uri_key}?") end end # Define display_uri attribute methods def display_uri_attr_reader define_attribute_method(:display_url) alias_method(:display_uri, :display_url) define_predicate_method(:display_uri, :display_url) alias_method(:display_url?, :display_uri?) end # Dynamically define a method for a URI # # @param key1 [Symbol] # @param key2 [Symbol] def define_uri_method(key1, key2) define_method(key1) do Addressable::URI.parse(@attrs[key2].chomp('#')) unless @attrs[key2].nil? end memoize(key1) end # Dynamically define a method for an attribute # # @param key1 [Symbol] # @param klass [Symbol] # @param key2 [Symbol] def define_attribute_method(key1, klass = nil, key2 = nil) define_method(key1) do if attr_falsey_or_empty?(key1) NullObject.new elsif klass.nil? @attrs[key1] else attrs = attrs_for_object(key1, key2) Twitter.const_get(klass).new(attrs) end end memoize(key1) end # @param key [Symbol] def deprecate_attribute_method(key) define_method(key) do warn "#{Kernel.caller.first}: [DEPRECATION] ##{key} is deprecated. Use ##{key}? instead." @attrs[key] end memoize(key) end # Dynamically define a predicate method for an attribute # # @param key1 [Symbol] # @param key2 [Symbol] def define_predicate_method(key1, key2 = key1) define_method(:"#{key1}?") do !attr_falsey_or_empty?(key2) end memoize(:"#{key1}?") end end # Initializes a new object # # @param attrs [Hash] # @return [Twitter::Base] def initialize(attrs = {}) @attrs = attrs || {} end # Fetches an attribute of an object using hash notation # # @param method [String, Symbol] Message to send to the object def [](method) warn "#{Kernel.caller.first}: [DEPRECATION] #[#{method.inspect}] is deprecated. Use ##{method} to fetch the value." send(method.to_sym) rescue NoMethodError nil end private def attr_falsey_or_empty?(key) @attrs[key].nil? || @attrs[key] == false || @attrs[key].respond_to?(:empty?) && @attrs[key].empty? end def attrs_for_object(key1, key2 = nil) if key2.nil? @attrs[key1] else attrs = @attrs.dup attrs.delete(key1).merge(key2 => attrs) end end end end twitter-6.1.0/lib/twitter/basic_user.rb000066400000000000000000000005171303650752200201420ustar00rootroot00000000000000require 'twitter/identity' require 'twitter/utils' module Twitter class BasicUser < Twitter::Identity # @return [String] attr_reader :screen_name deprecate_alias :handle, :screen_name deprecate_alias :username, :screen_name deprecate_alias :user_name, :screen_name predicate_attr_reader :following end end twitter-6.1.0/lib/twitter/client.rb000066400000000000000000000035721303650752200173050ustar00rootroot00000000000000require 'twitter/error' require 'twitter/utils' require 'twitter/version' module Twitter class Client include Twitter::Utils attr_accessor :access_token, :access_token_secret, :consumer_key, :consumer_secret, :proxy attr_writer :user_agent deprecate_alias :oauth_token, :access_token deprecate_alias :oauth_token=, :access_token= deprecate_alias :oauth_token_secret, :access_token_secret deprecate_alias :oauth_token_secret=, :access_token_secret= # Initializes a new Client object # # @param options [Hash] # @return [Twitter::Client] def initialize(options = {}) options.each do |key, value| instance_variable_set("@#{key}", value) end yield(self) if block_given? validate_credentials! end # @return [Boolean] def user_token? !!(access_token && access_token_secret) end # @return [String] def user_agent @user_agent ||= "TwitterRubyGem/#{Twitter::Version}" end # @return [Hash] def credentials { consumer_key: consumer_key, consumer_secret: consumer_secret, token: access_token, token_secret: access_token_secret, ignore_extra_keys: true, } end # @return [Boolean] def credentials? credentials.values.all? end private # Ensures that all credentials set during configuration are of a # valid type. Valid types are String and Boolean. # # @raise [Twitter::Error::ConfigurationError] Error is raised when # supplied twitter credentials are not a String or Boolean. def validate_credentials! credentials.each do |credential, value| next if value.nil? || value == true || value == false || value.is_a?(String) raise(Twitter::Error::ConfigurationError.new("Invalid #{credential} specified: #{value.inspect} must be a String.")) end end end end twitter-6.1.0/lib/twitter/configuration.rb000066400000000000000000000013421303650752200206670ustar00rootroot00000000000000require 'memoizable' require 'twitter/base' module Twitter class Configuration < Twitter::Base include Memoizable # @return [Array] attr_reader :non_username_paths # @return [Integer] attr_reader :characters_reserved_per_media, :max_media_per_upload, :photo_size_limit, :short_url_length, :short_url_length_https alias short_uri_length short_url_length alias short_uri_length_https short_url_length_https # Returns an array of photo sizes # # @return [Array] def photo_sizes @attrs.fetch(:photo_sizes, []).each_with_object({}) do |(key, value), object| object[key] = Size.new(value) end end memoize :photo_sizes end end twitter-6.1.0/lib/twitter/creatable.rb000066400000000000000000000006231303650752200177430ustar00rootroot00000000000000require 'time' require 'memoizable' module Twitter module Creatable include Memoizable # Time when the object was created on Twitter # # @return [Time] def created_at Time.parse(@attrs[:created_at]) unless @attrs[:created_at].nil? end memoize :created_at # @return [Boolean] def created? !!@attrs[:created_at] end memoize :created? end end twitter-6.1.0/lib/twitter/cursor.rb000066400000000000000000000027231303650752200173410ustar00rootroot00000000000000require 'twitter/enumerable' require 'twitter/rest/request' require 'twitter/utils' module Twitter class Cursor include Twitter::Enumerable include Twitter::Utils # @return [Hash] attr_reader :attrs alias to_h attrs alias to_hash to_h deprecate_alias :to_hsh, :to_hash # Initializes a new Cursor # # @param key [String, Symbol] The key to fetch the data from the response # @param klass [Class] The class to instantiate objects in the response # @param request [Twitter::REST::Request] # @return [Twitter::Cursor] def initialize(key, klass, request) @key = key.to_sym @klass = klass @client = request.client @request_method = request.verb @path = request.path @options = request.options @collection = [] self.attrs = request.perform end private # @return [Integer] def next_cursor @attrs[:next_cursor] || -1 end alias next next_cursor # @return [Boolean] def last? next_cursor.zero? end # @return [Hash] def fetch_next_page response = Twitter::REST::Request.new(@client, @request_method, @path, @options.merge(cursor: next_cursor)).perform self.attrs = response end # @param attrs [Hash] # @return [Hash] def attrs=(attrs) @attrs = attrs @attrs.fetch(@key, []).each do |element| @collection << (@klass ? @klass.new(element) : element) end @attrs end end end twitter-6.1.0/lib/twitter/direct_message.rb000066400000000000000000000005501303650752200207760ustar00rootroot00000000000000require 'twitter/creatable' require 'twitter/entities' require 'twitter/identity' module Twitter class DirectMessage < Twitter::Identity include Twitter::Creatable include Twitter::Entities # @return [String] attr_reader :text alias full_text text object_attr_reader :User, :recipient object_attr_reader :User, :sender end end twitter-6.1.0/lib/twitter/entities.rb000066400000000000000000000044211303650752200176450ustar00rootroot00000000000000require 'memoizable' require 'twitter/entity/hashtag' require 'twitter/entity/symbol' require 'twitter/entity/uri' require 'twitter/entity/user_mention' require 'twitter/media_factory' module Twitter module Entities include Memoizable # @return [Boolean] def entities? !@attrs[:entities].nil? && @attrs[:entities].any? { |_, array| array.any? } end memoize :entities? # @note Must include entities in your request for this method to work # @return [Array] def hashtags entities(Entity::Hashtag, :hashtags) end memoize :hashtags # @return [Boolean] def hashtags? hashtags.any? end memoize :hashtags? # @note Must include entities in your request for this method to work # @return [Array] def media extended_entities = entities(MediaFactory, :media, :extended_entities) extended_entities.empty? ? entities(MediaFactory, :media) : extended_entities end memoize :media # @return [Boolean] def media? media.any? end memoize :media? # @note Must include entities in your request for this method to work # @return [Array] def symbols entities(Entity::Symbol, :symbols) end memoize :symbols # @return [Boolean] def symbols? symbols.any? end memoize :symbols? # @note Must include entities in your request for this method to work # @return [Array] def uris entities(Entity::URI, :urls) end memoize :uris alias urls uris # @return [Boolean] def uris? uris.any? end alias urls? uris? # @note Must include entities in your request for this method to work # @return [Array] def user_mentions entities(Entity::UserMention, :user_mentions) end memoize :user_mentions # @return [Boolean] def user_mentions? user_mentions.any? end memoize :user_mentions? private # @param klass [Class] # @param key2 [Symbol] # @param key1 [Symbol] def entities(klass, key2, key1 = :entities) @attrs.fetch(key1.to_sym, {}).fetch(key2.to_sym, []).collect do |entity| klass.new(entity) end end end end twitter-6.1.0/lib/twitter/entity.rb000066400000000000000000000002101303650752200173250ustar00rootroot00000000000000require 'twitter/base' module Twitter class Entity < Twitter::Base # @return [Array] attr_reader :indices end end twitter-6.1.0/lib/twitter/entity/000077500000000000000000000000001303650752200170075ustar00rootroot00000000000000twitter-6.1.0/lib/twitter/entity/hashtag.rb000066400000000000000000000002371303650752200207550ustar00rootroot00000000000000require 'twitter/entity' module Twitter class Entity class Hashtag < Twitter::Entity # @return [String] attr_reader :text end end end twitter-6.1.0/lib/twitter/entity/symbol.rb000066400000000000000000000002361303650752200206420ustar00rootroot00000000000000require 'twitter/entity' module Twitter class Entity class Symbol < Twitter::Entity # @return [String] attr_reader :text end end end twitter-6.1.0/lib/twitter/entity/uri.rb000066400000000000000000000003351303650752200201340ustar00rootroot00000000000000require 'twitter/entity' module Twitter class Entity class URI < Twitter::Entity display_uri_attr_reader uri_attr_reader :expanded_uri, :uri end URL = URI Uri = URI Url = URI end end twitter-6.1.0/lib/twitter/entity/user_mention.rb000066400000000000000000000003411303650752200220410ustar00rootroot00000000000000require 'twitter/entity' module Twitter class Entity class UserMention < Twitter::Entity # @return [Integer] attr_reader :id # @return [String] attr_reader :name, :screen_name end end end twitter-6.1.0/lib/twitter/enumerable.rb000066400000000000000000000007421303650752200201420ustar00rootroot00000000000000module Twitter module Enumerable include ::Enumerable # @return [Enumerator] def each(start = 0) return to_enum(:each, start) unless block_given? Array(@collection[start..-1]).each do |element| yield(element) end unless last? start = [@collection.size, start].max fetch_next_page each(start, &Proc.new) end self end private # @return [Boolean] def last? true end end end twitter-6.1.0/lib/twitter/error.rb000066400000000000000000000130231303650752200171500ustar00rootroot00000000000000require 'twitter/rate_limit' module Twitter # Custom error class for rescuing from all Twitter errors class Error < StandardError # @return [Integer] attr_reader :code # @return [Twitter::RateLimit] attr_reader :rate_limit # If error code is missing see https://dev.twitter.com/overview/api/response-codes module Code AUTHENTICATION_PROBLEM = 32 RESOURCE_NOT_FOUND = 34 SUSPENDED_ACCOUNT = 64 DEPRECATED_CALL = 68 RATE_LIMIT_EXCEEDED = 88 INVALID_OR_EXPIRED_TOKEN = 89 SSL_REQUIRED = 92 UNABLE_TO_VERIFY_CREDENTIALS = 99 OVER_CAPACITY = 130 INTERNAL_ERROR = 131 OAUTH_TIMESTAMP_OUT_OF_RANGE = 135 ALREADY_FAVORITED = 139 FOLLOW_ALREADY_REQUESTED = 160 FOLLOW_LIMIT_EXCEEDED = 161 PROTECTED_STATUS = 179 OVER_UPDATE_LIMIT = 185 DUPLICATE_STATUS = 187 BAD_AUTHENTICATION_DATA = 215 SPAM = 226 LOGIN_VERIFICATION_NEEDED = 231 ENDPOINT_RETIRED = 251 CANNOT_WRITE = 261 CANNOT_MUTE = 271 CANNOT_UNMUTE = 272 end Codes = Code class << self # Create a new error from an HTTP response # # @param response [Faraday::Response] # @return [Twitter::Error] def from_response(response) message, code = parse_error(response.body) new(message, response.response_headers, code) end # @return [Hash] def errors @errors ||= { 400 => Twitter::Error::BadRequest, 401 => Twitter::Error::Unauthorized, 403 => Twitter::Error::Forbidden, 404 => Twitter::Error::NotFound, 406 => Twitter::Error::NotAcceptable, 408 => Twitter::Error::RequestTimeout, 420 => Twitter::Error::EnhanceYourCalm, 422 => Twitter::Error::UnprocessableEntity, 429 => Twitter::Error::TooManyRequests, 500 => Twitter::Error::InternalServerError, 502 => Twitter::Error::BadGateway, 503 => Twitter::Error::ServiceUnavailable, 504 => Twitter::Error::GatewayTimeout, } end def forbidden_messages @forbidden_messages ||= { 'Status is a duplicate.' => Twitter::Error::DuplicateStatus, 'You have already favorited this status.' => Twitter::Error::AlreadyFavorited, 'sharing is not permissible for this status (Share validations failed)' => Twitter::Error::AlreadyRetweeted, } end private def parse_error(body) if body.nil? ['', nil] elsif body[:error] [body[:error], nil] elsif body[:errors] extract_message_from_errors(body) end end def extract_message_from_errors(body) first = Array(body[:errors]).first if first.is_a?(Hash) [first[:message].chomp, first[:code]] else [first.chomp, nil] end end end # Initializes a new Error object # # @param message [Exception, String] # @param rate_limit [Hash] # @param code [Integer] # @return [Twitter::Error] def initialize(message = '', rate_limit = {}, code = nil) super(message) @rate_limit = Twitter::RateLimit.new(rate_limit) @code = code end ConfigurationError = Class.new(::ArgumentError) # Raised when a Tweet includes media that doesn't have a to_io method class UnacceptableIO < StandardError def initialize super('The IO object for media must respond to to_io') end end # Raised when Twitter returns a 4xx HTTP status code ClientError = Class.new(self) # Raised when Twitter returns the HTTP status code 400 BadRequest = Class.new(ClientError) # Raised when Twitter returns the HTTP status code 401 Unauthorized = Class.new(ClientError) # Raised when Twitter returns the HTTP status code 403 Forbidden = Class.new(ClientError) # Raised when a Tweet has already been favorited AlreadyFavorited = Class.new(Forbidden) # Raised when a Tweet has already been retweeted AlreadyRetweeted = Class.new(Forbidden) # Raised when a Tweet has already been posted DuplicateStatus = Class.new(Forbidden) AlreadyPosted = DuplicateStatus # Raised when Twitter returns the HTTP status code 404 NotFound = Class.new(ClientError) # Raised when Twitter returns the HTTP status code 406 NotAcceptable = Class.new(ClientError) # Raised when Twitter returns the HTTP status code 408 RequestTimeout = Class.new(ClientError) # Raised when Twitter returns the HTTP status code 422 UnprocessableEntity = Class.new(ClientError) # Raised when Twitter returns the HTTP status code 429 TooManyRequests = Class.new(ClientError) EnhanceYourCalm = TooManyRequests RateLimited = TooManyRequests # Raised when Twitter returns a 5xx HTTP status code ServerError = Class.new(self) # Raised when Twitter returns the HTTP status code 500 InternalServerError = Class.new(ServerError) # Raised when Twitter returns the HTTP status code 502 BadGateway = Class.new(ServerError) # Raised when Twitter returns the HTTP status code 503 ServiceUnavailable = Class.new(ServerError) # Raised when Twitter returns the HTTP status code 504 GatewayTimeout = Class.new(ServerError) end end twitter-6.1.0/lib/twitter/factory.rb000066400000000000000000000010071303650752200174650ustar00rootroot00000000000000module Twitter class Factory class << self # Construct a new object # # @param method [Symbol] # @param klass [Class] # @param attrs [Hash] # @raise [IndexError] Error raised when supplied argument is missing a key. # @return [Twitter::Base] def new(method, klass, attrs = {}) type = attrs.fetch(method.to_sym) const_name = type.split('_').collect(&:capitalize).join klass.const_get(const_name.to_sym).new(attrs) end end end end twitter-6.1.0/lib/twitter/geo.rb000066400000000000000000000003401303650752200165670ustar00rootroot00000000000000require 'equalizer' require 'twitter/base' module Twitter class Geo < Twitter::Base include Equalizer.new(:coordinates) # @return [Array] attr_reader :coordinates alias coords coordinates end end twitter-6.1.0/lib/twitter/geo/000077500000000000000000000000001303650752200162455ustar00rootroot00000000000000twitter-6.1.0/lib/twitter/geo/point.rb000066400000000000000000000005171303650752200177260ustar00rootroot00000000000000require 'twitter/geo' module Twitter class Geo class Point < Twitter::Geo # @return [Integer] def latitude coordinates[0] end alias lat latitude # @return [Integer] def longitude coordinates[1] end alias long longitude alias lng longitude end end end twitter-6.1.0/lib/twitter/geo/polygon.rb000066400000000000000000000001451303650752200202610ustar00rootroot00000000000000require 'twitter/geo' module Twitter class Geo class Polygon < Twitter::Geo end end end twitter-6.1.0/lib/twitter/geo_factory.rb000066400000000000000000000006611303650752200203240ustar00rootroot00000000000000require 'twitter/factory' require 'twitter/geo/point' require 'twitter/geo/polygon' module Twitter class GeoFactory < Twitter::Factory class << self # Construct a new geo object # # @param attrs [Hash] # @raise [IndexError] Error raised when supplied argument is missing a :type key. # @return [Twitter::Geo] def new(attrs = {}) super(:type, Geo, attrs) end end end end twitter-6.1.0/lib/twitter/geo_results.rb000066400000000000000000000011661303650752200203570ustar00rootroot00000000000000require 'twitter/enumerable' require 'twitter/utils' module Twitter class GeoResults include Twitter::Enumerable include Twitter::Utils # @return [Hash] attr_reader :attrs alias to_h attrs alias to_hash to_h deprecate_alias :to_hsh, :to_hash # Initializes a new GeoResults object # # @param attrs [Hash] # @return [Twitter::GeoResults] def initialize(attrs = {}) @attrs = attrs @collection = @attrs[:result].fetch(:places, []).collect do |place| Place.new(place) end end # @return [String] def token @attrs[:token] end end end twitter-6.1.0/lib/twitter/headers.rb000066400000000000000000000032731303650752200174400ustar00rootroot00000000000000require 'addressable/uri' require 'base64' require 'simple_oauth' module Twitter class Headers def initialize(client, request_method, url, options = {}) @client = client @request_method = request_method.to_sym @uri = Addressable::URI.parse(url) @options = options @signature_options = @request_method == :post && @options.values.any? { |value| value.respond_to?(:to_io) } ? {} : @options end def oauth_auth_header SimpleOAuth::Header.new(@request_method, @uri, @signature_options, @client.credentials) end def request_headers bearer_token_request = @options.delete(:bearer_token_request) headers = {} if bearer_token_request headers[:accept] = '*/*' headers[:authorization] = bearer_token_credentials_auth_header headers[:content_type] = 'application/x-www-form-urlencoded; charset=UTF-8' else headers[:authorization] = auth_header end headers end private def auth_header if @client.user_token? oauth_auth_header.to_s else @client.bearer_token = @client.token unless @client.bearer_token? bearer_auth_header end end def bearer_auth_header bearer_token = @client.bearer_token token = bearer_token.is_a?(Twitter::Token) && bearer_token.bearer? ? bearer_token.access_token : bearer_token "Bearer #{token}" end # Generates authentication header for a bearer token request # # @return [String] def bearer_token_credentials_auth_header basic_auth_token = Base64.strict_encode64("#{@client.consumer_key}:#{@client.consumer_secret}") "Basic #{basic_auth_token}" end end end twitter-6.1.0/lib/twitter/identity.rb000066400000000000000000000006651303650752200176600ustar00rootroot00000000000000require 'equalizer' require 'twitter/base' module Twitter class Identity < Twitter::Base include Equalizer.new(:id) # @return [Integer] attr_reader :id # Initializes a new object # # @param attrs [Hash] # @raise [ArgumentError] Error raised when supplied argument is missing an :id key. # @return [Twitter::Identity] def initialize(attrs = {}) attrs.fetch(:id) super end end end twitter-6.1.0/lib/twitter/language.rb000066400000000000000000000002171303650752200176030ustar00rootroot00000000000000require 'twitter/base' module Twitter class Language < Twitter::Base # @return [String] attr_reader :code, :name, :status end end twitter-6.1.0/lib/twitter/list.rb000066400000000000000000000020721303650752200167740ustar00rootroot00000000000000require 'twitter/creatable' require 'twitter/identity' module Twitter class List < Twitter::Identity include Twitter::Creatable # @return [Integer] attr_reader :member_count, :subscriber_count # @return [String] attr_reader :description, :full_name, :mode, :name, :slug object_attr_reader :User, :user predicate_attr_reader :following # @return [Addressable::URI] The URI to the list members. def members_uri Addressable::URI.parse("#{uri}/members") if uri? end memoize :members_uri alias members_url members_uri # @return [Addressable::URI] The URI to the list subscribers. def subscribers_uri Addressable::URI.parse("#{uri}/subscribers") if uri? end memoize :subscribers_uri alias subscribers_url subscribers_uri # @return [Addressable::URI] The URI to the list. def uri Addressable::URI.parse("https://twitter.com/#{user.screen_name}/#{slug}") if slug? && user.screen_name? end memoize :uri alias url uri def uri? !!uri end memoize :uri? end end twitter-6.1.0/lib/twitter/media/000077500000000000000000000000001303650752200165525ustar00rootroot00000000000000twitter-6.1.0/lib/twitter/media/animated_gif.rb000066400000000000000000000001551303650752200215070ustar00rootroot00000000000000require 'twitter/media/video' module Twitter module Media class AnimatedGif < Video end end end twitter-6.1.0/lib/twitter/media/photo.rb000066400000000000000000000011141303650752200202250ustar00rootroot00000000000000require 'memoizable' require 'twitter/identity' module Twitter module Media class Photo < Twitter::Identity include Memoizable # @return [Array] attr_reader :indices display_uri_attr_reader uri_attr_reader :expanded_uri, :media_uri, :media_uri_https, :uri # Returns an array of photo sizes # # @return [Array] def sizes @attrs.fetch(:sizes, []).each_with_object({}) do |(key, value), object| object[key] = Size.new(value) end end memoize :sizes end end end twitter-6.1.0/lib/twitter/media/video.rb000066400000000000000000000015241303650752200202070ustar00rootroot00000000000000require 'memoizable' require 'twitter/identity' require 'twitter/media/video_info' module Twitter module Media class Video < Twitter::Identity include Memoizable # @return [Array] attr_reader :indices display_uri_attr_reader uri_attr_reader :expanded_uri, :media_uri, :media_uri_https, :uri # Returns an array of photo sizes # # @return [Array] def sizes @attrs.fetch(:sizes, []).each_with_object({}) do |(key, value), object| object[key] = Size.new(value) object end end memoize :sizes # Returns video info # # @return [Twitter::Media::VideoInfo] def video_info VideoInfo.new(@attrs[:video_info]) unless @attrs[:video_info].nil? end memoize :video_info end end end twitter-6.1.0/lib/twitter/media/video_info.rb000066400000000000000000000010171303650752200212170ustar00rootroot00000000000000require 'memoizable' require 'twitter/variant' module Twitter module Media class VideoInfo < Twitter::Base include Memoizable # @return [Array] def variants @attrs.fetch(:variants, []).map do |variant| Variant.new(variant) end end memoize :variants end end end twitter-6.1.0/lib/twitter/media_factory.rb000066400000000000000000000007401303650752200206270ustar00rootroot00000000000000require 'twitter/factory' require 'twitter/media/animated_gif' require 'twitter/media/photo' require 'twitter/media/video' module Twitter class MediaFactory < Twitter::Factory class << self # Construct a new media object # # @param attrs [Hash] # @raise [IndexError] Error raised when supplied argument is missing a :type key. # @return [Twitter::Media] def new(attrs = {}) super(:type, Media, attrs) end end end end twitter-6.1.0/lib/twitter/metadata.rb000066400000000000000000000002321303650752200175750ustar00rootroot00000000000000require 'twitter/base' module Twitter class Metadata < Twitter::Base # @return [String] attr_reader :iso_language_code, :result_type end end twitter-6.1.0/lib/twitter/null_object.rb000066400000000000000000000015611303650752200203230ustar00rootroot00000000000000require 'naught' module Twitter NullObject = Naught.build do |config| include Comparable config.black_hole config.define_explicit_conversions config.define_implicit_conversions config.predicates_return false def ! true end def respond_to?(*) true end def instance_of?(klass) raise(TypeError.new('class or module required')) unless klass.is_a?(Class) self.class == klass end def kind_of?(mod) raise(TypeError.new('class or module required')) unless mod.is_a?(Module) self.class.ancestors.include?(mod) end alias_method :is_a?, :kind_of? def <=>(other) if other.is_a?(self.class) 0 else -1 end end def nil? true end def as_json(*) 'null' end def to_json(*args) nil.to_json(*args) end end end twitter-6.1.0/lib/twitter/oembed.rb000066400000000000000000000004651303650752200172600ustar00rootroot00000000000000require 'twitter/base' module Twitter class OEmbed < Twitter::Base # @return [Integer] attr_reader :height, :width # @return [String] attr_reader :author_name, :cache_age, :html, :provider_name, :type, :version uri_attr_reader :author_uri, :provider_uri, :uri end end twitter-6.1.0/lib/twitter/place.rb000066400000000000000000000021231303650752200171020ustar00rootroot00000000000000require 'memoizable' require 'twitter/identity' module Twitter class Place < Twitter::Identity include Memoizable # @return [Hash] attr_reader :attributes # @return [String] attr_reader :country, :full_name, :name alias woe_id id alias woeid id object_attr_reader :GeoFactory, :bounding_box object_attr_reader :Place, :contained_within alias contained? contained_within? uri_attr_reader :uri # Initializes a new place # # @param attrs [Hash] # @raise [ArgumentError] Error raised when supplied argument is missing a :woeid key. # @return [Twitter::Place] def initialize(attrs = {}) attrs[:id] ||= attrs.fetch(:woeid) super end # @return [String] def country_code @attrs[:country_code] || @attrs[:countryCode] end memoize :country_code # @return [Integer] def parent_id @attrs[:parentid] end memoize :parent_id # @return [String] def place_type @attrs[:place_type] || @attrs[:placeType] && @attrs[:placeType][:name] end memoize :place_type end end twitter-6.1.0/lib/twitter/profile.rb000066400000000000000000000066301303650752200174650ustar00rootroot00000000000000require 'addressable/uri' require 'memoizable' module Twitter module Profile PROFILE_IMAGE_SUFFIX_REGEX = /_normal(\.gif|\.jpe?g|\.png)$/i PREDICATE_URI_METHOD_REGEX = /_uri\?$/ include Memoizable class << self private def alias_predicate_uri_methods(method) %w(_url? _uri_https? _url_https?).each do |replacement| alias_method_sub(method, PREDICATE_URI_METHOD_REGEX, replacement) end end def alias_method_sub(method, pattern, replacement) alias_method(method.to_s.sub(pattern, replacement).to_sym, method) end end # Return the URL to the user's profile banner image # # @param size [String, Symbol] The size of the image. Must be one of: 'mobile', 'mobile_retina', 'web', 'web_retina', 'ipad', or 'ipad_retina' # @return [Addressable::URI] def profile_banner_uri(size = :web) parse_uri(insecure_uri([@attrs[:profile_banner_url], size].join('/'))) unless @attrs[:profile_banner_url].nil? end alias profile_banner_url profile_banner_uri # Return the secure URL to the user's profile banner image # # @param size [String, Symbol] The size of the image. Must be one of: 'mobile', 'mobile_retina', 'web', 'web_retina', 'ipad', or 'ipad_retina' # @return [Addressable::URI] def profile_banner_uri_https(size = :web) parse_uri([@attrs[:profile_banner_url], size].join('/')) unless @attrs[:profile_banner_url].nil? end alias profile_banner_url_https profile_banner_uri_https # @return [Boolean] def profile_banner_uri? !!@attrs[:profile_banner_url] end memoize :profile_banner_uri? alias_predicate_uri_methods :profile_banner_uri? # Return the URL to the user's profile image # # @param size [String, Symbol] The size of the image. Must be one of: 'mini', 'normal', 'bigger' or 'original' # @return [Addressable::URI] def profile_image_uri(size = :normal) parse_uri(insecure_uri(profile_image_uri_https(size))) unless @attrs[:profile_image_url_https].nil? end alias profile_image_url profile_image_uri # Return the secure URL to the user's profile image # # @param size [String, Symbol] The size of the image. Must be one of: 'mini', 'normal', 'bigger' or 'original' # @return [Addressable::URI] def profile_image_uri_https(size = :normal) # The profile image URL comes in looking like like this: # https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png # It can be converted to any of the following sizes: # https://a0.twimg.com/profile_images/1759857427/image1326743606.png # https://a0.twimg.com/profile_images/1759857427/image1326743606_mini.png # https://a0.twimg.com/profile_images/1759857427/image1326743606_bigger.png parse_uri(@attrs[:profile_image_url_https].sub(PROFILE_IMAGE_SUFFIX_REGEX, profile_image_suffix(size))) unless @attrs[:profile_image_url_https].nil? end alias profile_image_url_https profile_image_uri_https # @return [Boolean] def profile_image_uri? !!@attrs[:profile_image_url_https] end memoize :profile_image_uri? alias_predicate_uri_methods :profile_image_uri? private def parse_uri(uri) Addressable::URI.parse(uri) end def insecure_uri(uri) uri.to_s.sub(/^https/i, 'http') end def profile_image_suffix(size) :original == size.to_sym ? '\\1' : "_#{size}\\1" end end end twitter-6.1.0/lib/twitter/profile_banner.rb000066400000000000000000000005741303650752200210130ustar00rootroot00000000000000require 'memoizable' require 'twitter/base' module Twitter class ProfileBanner < Twitter::Base include Memoizable # Returns an array of photo sizes # # @return [Array] def sizes @attrs.fetch(:sizes, []).each_with_object({}) do |(key, value), object| object[key] = Size.new(value) end end memoize :sizes end end twitter-6.1.0/lib/twitter/rate_limit.rb000066400000000000000000000012501303650752200201470ustar00rootroot00000000000000require 'memoizable' module Twitter class RateLimit < Twitter::Base include Memoizable # @return [Integer] def limit limit = @attrs['x-rate-limit-limit'] limit.to_i if limit end memoize :limit # @return [Integer] def remaining remaining = @attrs['x-rate-limit-remaining'] remaining.to_i if remaining end memoize :remaining # @return [Time] def reset_at reset = @attrs['x-rate-limit-reset'] Time.at(reset.to_i) if reset end memoize :reset_at # @return [Integer] def reset_in [(reset_at - Time.now).ceil, 0].max if reset_at end alias retry_after reset_in end end twitter-6.1.0/lib/twitter/relationship.rb000066400000000000000000000005371303650752200205260ustar00rootroot00000000000000require 'twitter/base' module Twitter class Relationship < Twitter::Base object_attr_reader :SourceUser, :source object_attr_reader :TargetUser, :target # Initializes a new object # # @param attrs [Hash] # @return [Twitter::Relationship] def initialize(attrs = {}) @attrs = attrs[:relationship] end end end twitter-6.1.0/lib/twitter/rest/000077500000000000000000000000001303650752200164505ustar00rootroot00000000000000twitter-6.1.0/lib/twitter/rest/api.rb000066400000000000000000000030101303650752200175400ustar00rootroot00000000000000require 'twitter/rest/direct_messages' require 'twitter/rest/favorites' require 'twitter/rest/friends_and_followers' require 'twitter/rest/help' require 'twitter/rest/lists' require 'twitter/rest/media' require 'twitter/rest/oauth' require 'twitter/rest/places_and_geo' require 'twitter/rest/saved_searches' require 'twitter/rest/search' require 'twitter/rest/spam_reporting' require 'twitter/rest/suggested_users' require 'twitter/rest/timelines' require 'twitter/rest/trends' require 'twitter/rest/tweets' require 'twitter/rest/undocumented' require 'twitter/rest/users' module Twitter module REST # @note All methods have been separated into modules and follow the same grouping used in {http://dev.twitter.com/doc the Twitter API Documentation}. # @see https://dev.twitter.com/overview/general/things-every-developer-should-know module API include Twitter::REST::DirectMessages include Twitter::REST::Favorites include Twitter::REST::FriendsAndFollowers include Twitter::REST::Help include Twitter::REST::Lists include Twitter::REST::Media include Twitter::REST::OAuth include Twitter::REST::PlacesAndGeo include Twitter::REST::SavedSearches include Twitter::REST::Search include Twitter::REST::SpamReporting include Twitter::REST::SuggestedUsers include Twitter::REST::Timelines include Twitter::REST::Trends include Twitter::REST::Tweets include Twitter::REST::Undocumented include Twitter::REST::Users end end end twitter-6.1.0/lib/twitter/rest/client.rb000066400000000000000000000067021303650752200202600ustar00rootroot00000000000000require 'faraday' require 'faraday/request/multipart' require 'twitter/client' require 'twitter/rest/api' require 'twitter/rest/request' require 'twitter/rest/request/multipart_with_file' require 'twitter/rest/response/parse_json' require 'twitter/rest/response/raise_error' require 'twitter/rest/utils' module Twitter module REST class Client < Twitter::Client include Twitter::REST::API BASE_URL = 'https://api.twitter.com'.freeze URL_PREFIX = BASE_URL ENDPOINT = BASE_URL attr_accessor :bearer_token # @param connection_options [Hash] # @return [Hash] def connection_options=(connection_options) warn "#{Kernel.caller.first}: [DEPRECATION] #{self.class.name}##{__method__} is deprecated and will be removed." @connection_options = connection_options end # @return [Hash] def connection_options @connection_options ||= { builder: middleware, headers: { accept: 'application/json', user_agent: user_agent, }, request: { open_timeout: 10, timeout: 30, }, proxy: proxy, } end # @params middleware [Faraday::RackBuilder] # @return [Faraday::RackBuilder] def middleware=(middleware) warn "#{Kernel.caller.first}: [DEPRECATION] #{self.class.name}##{__method__} is deprecated and will be removed." @middleware = middleware end # @note Faraday's middleware stack implementation is comparable to that of Rack middleware. The order of middleware is important: the first middleware on the list wraps all others, while the last middleware is the innermost one. # @see https://github.com/technoweenie/faraday#advanced-middleware-usage # @see http://mislav.uniqpath.com/2011/07/faraday-advanced-http/ # @return [Faraday::RackBuilder] def middleware @middleware ||= Faraday::RackBuilder.new do |faraday| # Convert file uploads to Faraday::UploadIO objects faraday.request :twitter_multipart_with_file # Checks for files in the payload, otherwise leaves everything untouched faraday.request :multipart # Encodes as "application/x-www-form-urlencoded" if not already encoded faraday.request :url_encoded # Handle error responses faraday.response :twitter_raise_error # Parse JSON response bodies faraday.response :twitter_parse_json # Set default HTTP adapter faraday.adapter :net_http end end # Perform an HTTP GET request def get(path, options = {}) warn "#{Kernel.caller.first}: [DEPRECATION] #{self.class.name}##{__method__} is deprecated. Use Twitter::REST::Request#perform instead." perform_get(path, options) end # Perform an HTTP POST request def post(path, options = {}) warn "#{Kernel.caller.first}: [DEPRECATION] #{self.class.name}##{__method__} is deprecated. Use Twitter::REST::Request#perform instead." perform_post(path, options) end # @return [Boolean] def bearer_token? !!bearer_token end # @return [Boolean] def credentials? super || bearer_token? end # Returns a Faraday::Connection object # # @return [Faraday::Connection] def connection @connection ||= Faraday.new(BASE_URL, connection_options) end end end end twitter-6.1.0/lib/twitter/rest/direct_messages.rb000066400000000000000000000172431303650752200221450ustar00rootroot00000000000000require 'twitter/arguments' require 'twitter/direct_message' require 'twitter/rest/utils' require 'twitter/user' require 'twitter/utils' module Twitter module REST module DirectMessages include Twitter::REST::Utils include Twitter::Utils # Returns the 20 most recent direct messages sent to the authenticating user # # @see https://dev.twitter.com/rest/reference/get/direct_messages # @note This method requires an access token with RWD (read, write & direct message) permissions. Consult The Application Permission Model for more information. # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] Direct messages sent to the authenticating user. # @param options [Hash] A customizable set of options. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. # @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID. # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200. # @option options [Integer] :page Specifies the page of results to retrieve. def direct_messages_received(options = {}) perform_get_with_objects('/1.1/direct_messages.json', options, Twitter::DirectMessage) end # Returns the 20 most recent direct messages sent by the authenticating user # # @see https://dev.twitter.com/rest/reference/get/direct_messages/sent # @note This method requires an access token with RWD (read, write & direct message) permissions. Consult The Application Permission Model for more information. # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] Direct messages sent by the authenticating user. # @param options [Hash] A customizable set of options. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. # @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID. # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200. # @option options [Integer] :page Specifies the page of results to retrieve. def direct_messages_sent(options = {}) perform_get_with_objects('/1.1/direct_messages/sent.json', options, Twitter::DirectMessage) end # Returns a direct message # # @see https://dev.twitter.com/rest/reference/get/direct_messages/show # @note This method requires an access token with RWD (read, write & direct message) permissions. Consult The Application Permission Model for more information. # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::DirectMessage] The requested messages. # @param id [Integer] A direct message ID. # @param options [Hash] A customizable set of options. def direct_message(id, options = {}) options[:id] = id perform_get_with_object('/1.1/direct_messages/show.json', options, Twitter::DirectMessage) end # @note This method requires an access token with RWD (read, write & direct message) permissions. Consult The Application Permission Model for more information. # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] The requested messages. # @overload direct_messages(options = {}) # Returns the 20 most recent direct messages sent to the authenticating user # # @see https://dev.twitter.com/rest/reference/get/direct_messages # @param options [Hash] A customizable set of options. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. # @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID. # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200. # @option options [Integer] :page Specifies the page of results to retrieve. # @overload direct_messages(*ids) # Returns direct messages # # @see https://dev.twitter.com/rest/reference/get/direct_messages/show # @param ids [Enumerable] A collection of direct message IDs. # @overload direct_messages(*ids, options) # Returns direct messages # # @see https://dev.twitter.com/rest/reference/get/direct_messages/show # @param ids [Enumerable] A collection of direct message IDs. # @param options [Hash] A customizable set of options. def direct_messages(*args) arguments = Twitter::Arguments.new(args) if arguments.empty? direct_messages_received(arguments.options) else pmap(arguments) do |id| direct_message(id, arguments.options) end end end # Destroys direct messages # # @see https://dev.twitter.com/rest/reference/post/direct_messages/destroy # @note This method requires an access token with RWD (read, write & direct message) permissions. Consult The Application Permission Model for more information. # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] Deleted direct message. # @overload destroy_direct_message(*ids) # @param ids [Enumerable] A collection of direct message IDs. # @overload destroy_direct_message(*ids, options) # @param ids [Enumerable] A collection of direct message IDs. # @param options [Hash] A customizable set of options. def destroy_direct_message(*args) parallel_objects_from_response(Twitter::DirectMessage, :post, '/1.1/direct_messages/destroy.json', args) end deprecate_alias :direct_message_destroy, :destroy_direct_message # Sends a new direct message to the specified user from the authenticating user # # @see https://dev.twitter.com/rest/reference/post/direct_messages/new # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::DirectMessage] The sent message. # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param text [String] The text of your direct message, up to 140 characters. # @param options [Hash] A customizable set of options. def create_direct_message(user, text, options = {}) merge_user!(options, user) options[:text] = text perform_post_with_object('/1.1/direct_messages/new.json', options, Twitter::DirectMessage) end alias d create_direct_message alias m create_direct_message alias dm create_direct_message deprecate_alias :direct_message_create, :create_direct_message end end end twitter-6.1.0/lib/twitter/rest/favorites.rb000066400000000000000000000126741303650752200210110ustar00rootroot00000000000000require 'twitter/arguments' require 'twitter/error' require 'twitter/rest/utils' require 'twitter/tweet' require 'twitter/user' require 'twitter/utils' module Twitter module REST module Favorites include Twitter::REST::Utils include Twitter::Utils # @see https://dev.twitter.com/rest/reference/get/favorites/list # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] favorite Tweets. # @overload favorites(options = {}) # Returns the 20 most recent favorite Tweets for the authenticating user # # @param options [Hash] A customizable set of options. # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 100. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. # @overload favorites(user, options = {}) # Returns the 20 most recent favorite Tweets for the specified user # # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 100. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. def favorites(*args) arguments = Twitter::Arguments.new(args) merge_user!(arguments.options, arguments.pop) if arguments.last perform_get_with_objects('/1.1/favorites/list.json', arguments.options, Twitter::Tweet) end # Un-favorites the specified Tweets as the authenticating user # # @see https://dev.twitter.com/rest/reference/post/favorites/destroy # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] The un-favorited Tweets. # @overload unfavorite(*tweets) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @overload unfavorite(*tweets, options) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @param options [Hash] A customizable set of options. def unfavorite(*args) parallel_objects_from_response(Twitter::Tweet, :post, '/1.1/favorites/destroy.json', args) end alias destroy_favorite unfavorite deprecate_alias :favorite_destroy, :unfavorite # Favorites the specified Tweets as the authenticating user # # @see https://dev.twitter.com/rest/reference/post/favorites/create # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] The favorited Tweets. # @overload favorite(*tweets) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @overload favorite(*tweets, options) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @param options [Hash] A customizable set of options. def favorite(*args) arguments = Twitter::Arguments.new(args) pmap(arguments) do |tweet| begin perform_post_with_object('/1.1/favorites/create.json', arguments.options.merge(id: extract_id(tweet)), Twitter::Tweet) rescue Twitter::Error::AlreadyFavorited, Twitter::Error::NotFound next end end.compact end alias fav favorite alias fave favorite deprecate_alias :favorite_create, :favorite # Favorites the specified Tweets as the authenticating user and raises an error if one has already been favorited # # @see https://dev.twitter.com/rest/reference/post/favorites/create # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::AlreadyFavorited] Error raised when tweet has already been favorited. # @raise [Twitter::Error::NotFound] Error raised when tweet does not exist or has been deleted. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] The favorited Tweets. # @overload favorite!(*tweets) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @overload favorite!(*tweets, options) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @param options [Hash] A customizable set of options. def favorite!(*args) arguments = Twitter::Arguments.new(args) pmap(arguments) do |tweet| perform_post_with_object('/1.1/favorites/create.json', arguments.options.merge(id: extract_id(tweet)), Twitter::Tweet) end end alias create_favorite! favorite! alias fav! favorite! alias fave! favorite! deprecate_alias :favorite_create!, :favorite! end end end twitter-6.1.0/lib/twitter/rest/friends_and_followers.rb000066400000000000000000000353451303650752200233570ustar00rootroot00000000000000require 'twitter/arguments' require 'twitter/cursor' require 'twitter/relationship' require 'twitter/rest/request' require 'twitter/rest/utils' require 'twitter/user' require 'twitter/utils' module Twitter module REST module FriendsAndFollowers include Twitter::REST::Utils include Twitter::Utils # @see https://dev.twitter.com/rest/reference/get/friends/ids # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Cursor] # @overload friend_ids(options = {}) # Returns an array of numeric IDs for every user the authenticated user is following # # @param options [Hash] A customizable set of options. # @overload friend_ids(user, options = {}) # Returns an array of numeric IDs for every user the specified user is following # # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param options [Hash] A customizable set of options. def friend_ids(*args) cursor_from_response_with_user(:ids, nil, '/1.1/friends/ids.json', args) end # @see https://dev.twitter.com/rest/reference/get/followers/ids # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Cursor] # @overload follower_ids(options = {}) # Returns an array of numeric IDs for every user following the authenticated user # # @param options [Hash] A customizable set of options. # @overload follower_ids(user, options = {}) # Returns an array of numeric IDs for every user following the specified user # # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param options [Hash] A customizable set of options. def follower_ids(*args) cursor_from_response_with_user(:ids, nil, '/1.1/followers/ids.json', args) end # Returns the relationship of the authenticating user to the comma separated list of up to 100 screen_names or user_ids provided. Values for connections can be: following, following_requested, followed_by, none. # # @see https://dev.twitter.com/rest/reference/get/friendships/lookup # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] The requested users. # @overload friendships(*users) # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @overload friendships(*users, options) # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @param options [Hash] A customizable set of options. def friendships(*args) arguments = Twitter::Arguments.new(args) merge_users!(arguments.options, arguments) perform_get_with_objects('/1.1/friendships/lookup.json', arguments.options, Twitter::User) end # Returns an array of numeric IDs for every user who has a pending request to follow the authenticating user # # @see https://dev.twitter.com/rest/reference/get/friendships/incoming # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Cursor] # @param options [Hash] A customizable set of options. def friendships_incoming(options = {}) perform_get_with_cursor('/1.1/friendships/incoming.json', options, :ids) end # Returns an array of numeric IDs for every protected user for whom the authenticating user has a pending follow request # # @see https://dev.twitter.com/rest/reference/get/friendships/outgoing # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Cursor] # @param options [Hash] A customizable set of options. def friendships_outgoing(options = {}) perform_get_with_cursor('/1.1/friendships/outgoing.json', options, :ids) end # Allows the authenticating user to follow the specified users, unless they are already followed # # @see https://dev.twitter.com/rest/reference/post/friendships/create # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] The followed users. # @overload follow(*users) # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @overload follow(*users, options) # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @param options [Hash] A customizable set of options. # @option options [Boolean] :follow (false) Enable notifications for the target user. def follow(*args) arguments = Twitter::Arguments.new(args) existing_friends = Thread.new do friend_ids.to_a end new_friends = Thread.new do users(args).collect(&:id) end follow!(new_friends.value - existing_friends.value, arguments.options) end alias create_friendship follow deprecate_alias :friendship_create, :follow # Allows the authenticating user to follow the specified users # # @see https://dev.twitter.com/rest/reference/post/friendships/create # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] The followed users. # @overload follow!(*users) # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @overload follow!(*users, options) # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @param options [Hash] A customizable set of options. # @option options [Boolean] :follow (false) Enable notifications for the target user. def follow!(*args) arguments = Twitter::Arguments.new(args) pmap(arguments) do |user| perform_post_with_object('/1.1/friendships/create.json', merge_user(arguments.options, user), Twitter::User) end.compact end alias create_friendship! follow! deprecate_alias :friendship_create!, :follow! # Allows the authenticating user to unfollow the specified users # # @see https://dev.twitter.com/rest/reference/post/friendships/destroy # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] The unfollowed users. # @overload unfollow(*users) # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @overload unfollow(*users, options) # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @param options [Hash] A customizable set of options. def unfollow(*args) parallel_users_from_response(:post, '/1.1/friendships/destroy.json', args) end alias destroy_friendship unfollow deprecate_alias :friendship_destroy, :unfollow # Allows one to enable or disable retweets and device notifications from the specified user. # # @see https://dev.twitter.com/rest/reference/post/friendships/update # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Relationship] # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Boolean] :device Enable/disable device notifications from the target user. # @option options [Boolean] :retweets Enable/disable retweets from the target user. def friendship_update(user, options = {}) merge_user!(options, user) perform_post_with_object('/1.1/friendships/update.json', options, Twitter::Relationship) end # Returns detailed information about the relationship between two users # # @see https://dev.twitter.com/rest/reference/get/friendships/show # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Relationship] # @param source [Integer, String, Twitter::User] The Twitter user ID, screen name, or object of the source user. # @param target [Integer, String, Twitter::User] The Twitter user ID, screen name, or object of the target user. # @param options [Hash] A customizable set of options. def friendship(source, target, options = {}) merge_user!(options, source, 'source') options[:source_id] = options.delete(:source_user_id) unless options[:source_user_id].nil? merge_user!(options, target, 'target') options[:target_id] = options.delete(:target_user_id) unless options[:target_user_id].nil? perform_get_with_object('/1.1/friendships/show.json', options, Twitter::Relationship) end alias friendship_show friendship alias relationship friendship # Test for the existence of friendship between two users # # @see https://dev.twitter.com/rest/reference/get/friendships/show # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Boolean] true if user_a follows user_b, otherwise false. # @param source [Integer, String, Twitter::User] The Twitter user ID, screen name, or object of the source user. # @param target [Integer, String, Twitter::User] The Twitter user ID, screen name, or object of the target user. # @param options [Hash] A customizable set of options. def friendship?(source, target, options = {}) friendship(source, target, options).source.following? end # Returns a cursored collection of user objects for users following the specified user. # # @see https://dev.twitter.com/rest/reference/get/followers/list # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Cursor] # @overload followers(options = {}) # Returns a cursored collection of user objects for users following the authenticated user. # # @param options [Hash] A customizable set of options. # @option options [Boolean, String, Integer] :skip_status Do not include contributee's Tweets when set to true, 't' or 1. # @option options [Boolean, String, Integer] :include_user_entities The user entities node will be disincluded when set to false. # @overload followers(user, options = {}) # Returns a cursored collection of user objects for users following the specified user. # # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Boolean, String, Integer] :skip_status Do not include contributee's Tweets when set to true, 't' or 1. # @option options [Boolean, String, Integer] :include_user_entities The user entities node will be disincluded when set to false. def followers(*args) cursor_from_response_with_user(:users, Twitter::User, '/1.1/followers/list.json', args) end # Returns a cursored collection of user objects for every user the specified user is following (otherwise known as their "friends"). # # @see https://dev.twitter.com/rest/reference/get/friends/list # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Cursor] # @overload friends(options = {}) # Returns a cursored collection of user objects for every user the authenticated user is following (otherwise known as their "friends"). # # @param options [Hash] A customizable set of options. # @option options [Boolean, String, Integer] :skip_status Do not include contributee's Tweets when set to true, 't' or 1. # @option options [Boolean, String, Integer] :include_user_entities The user entities node will be disincluded when set to false. # @overload friends(user, options = {}) # Returns a cursored collection of user objects for every user the specified user is following (otherwise known as their "friends"). # # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Boolean, String, Integer] :skip_status Do not include contributee's Tweets when set to true, 't' or 1. # @option options [Boolean, String, Integer] :include_user_entities The user entities node will be disincluded when set to false. def friends(*args) cursor_from_response_with_user(:users, Twitter::User, '/1.1/friends/list.json', args) end alias following friends # Returns a collection of user IDs that the currently authenticated user does not want to receive retweets from. # @see https://dev.twitter.com/rest/reference/get/friendships/no_retweets/ids # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] # @param options [Hash] A customizable set of options. def no_retweet_ids(options = {}) perform_get('/1.1/friendships/no_retweets/ids.json', options).collect(&:to_i) end alias no_retweets_ids no_retweet_ids end end end twitter-6.1.0/lib/twitter/rest/help.rb000066400000000000000000000041321303650752200177250ustar00rootroot00000000000000require 'twitter/configuration' require 'twitter/language' require 'twitter/rest/request' require 'twitter/rest/utils' module Twitter module REST module Help include Twitter::REST::Utils # Returns the current configuration used by Twitter # # @see https://dev.twitter.com/rest/reference/get/help/configuration # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Configuration] Twitter's configuration. def configuration(options = {}) perform_get_with_object('/1.1/help/configuration.json', options, Twitter::Configuration) end # Returns the list of languages supported by Twitter # # @see https://dev.twitter.com/rest/reference/get/help/languages # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] def languages(options = {}) perform_get_with_objects('/1.1/help/languages.json', options, Twitter::Language) end # Returns {https://twitter.com/privacy Twitter's Privacy Policy} # # @see https://dev.twitter.com/rest/reference/get/help/privacy # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [String] def privacy(options = {}) perform_get('/1.1/help/privacy.json', options)[:privacy] end # Returns {https://twitter.com/tos Twitter's Terms of Service} # # @see https://dev.twitter.com/rest/reference/get/help/tos # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [String] def tos(options = {}) perform_get('/1.1/help/tos.json', options)[:tos] end end end end twitter-6.1.0/lib/twitter/rest/lists.rb000066400000000000000000000675751303650752200201570ustar00rootroot00000000000000require 'twitter/arguments' require 'twitter/cursor' require 'twitter/error' require 'twitter/list' require 'twitter/rest/request' require 'twitter/rest/utils' require 'twitter/tweet' require 'twitter/user' require 'twitter/utils' module Twitter module REST module Lists include Twitter::REST::Utils include Twitter::Utils MAX_USERS_PER_REQUEST = 100 URI_SUBSTRING = '://'.freeze # Returns all lists the authenticating or specified user subscribes to, including their own # # @see https://dev.twitter.com/rest/reference/get/lists/list # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] # @overload lists(options = {}) # @param options [Hash] A customizable set of options. # @option options [Boolean] :reverse Set this to true if you would like owned lists to be returned first. # @overload lists(user, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Boolean] :reverse Set this to true if you would like owned lists to be returned first. def lists(*args) objects_from_response_with_user(Twitter::List, :get, '/1.1/lists/list.json', args) end alias lists_subscribed_to lists # Show tweet timeline for members of the specified list # # @see https://dev.twitter.com/rest/reference/get/lists/statuses # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::NotFound] Error raised when supplied list is not found. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] # @overload list_timeline(list, options = {}) # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. # @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID. # @option options [Integer] :count The number of results to retrieve. # @overload list_timeline(user, list, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. # @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID. # @option options [Integer] :count The number of results to retrieve. def list_timeline(*args) arguments = Twitter::Arguments.new(args) merge_list!(arguments.options, arguments.pop) merge_owner!(arguments.options, arguments.pop) perform_get_with_objects('/1.1/lists/statuses.json', arguments.options, Twitter::Tweet) end # Removes the specified member from the list # # @see https://dev.twitter.com/rest/reference/post/lists/members/destroy # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::NotFound] Error raised when supplied list is not found. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::List] The list. # @overload remove_list_member(list, user_to_remove, options = {}) # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param user_to_remove [Integer, String] The user id or screen name of the list member to remove. # @param options [Hash] A customizable set of options. # @overload remove_list_member(user, list, user_to_remove, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param user_to_remove [Integer, String] The user id or screen name of the list member to remove. # @param options [Hash] A customizable set of options. def remove_list_member(*args) list_from_response_with_user('/1.1/lists/members/destroy.json', args) end deprecate_alias :list_remove_member, :remove_list_member # List the lists the specified user has been added to # # @see https://dev.twitter.com/rest/reference/get/lists/memberships # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Cursor] # @overload memberships(options = {}) # @param options [Hash] A customizable set of options. # @option options [Integer] :count The amount of results to return per page. Defaults to 20. No more than 1000 results will ever be returned in a single page. # @option options [Boolean, String, Integer] :filter_to_owned_lists When set to true, t or 1, will return just lists the authenticating user owns, and the user represented by user_id or screen_name is a member of. # @overload memberships(user, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Integer] :count The amount of results to return per page. Defaults to 20. No more than 1000 results will ever be returned in a single page. # @option options [Boolean, String, Integer] :filter_to_owned_lists When set to true, t or 1, will return just lists the authenticating user owns, and the user represented by user_id or screen_name is a member of. def memberships(*args) cursor_from_response_with_user(:lists, Twitter::List, '/1.1/lists/memberships.json', args) end # Returns the subscribers of the specified list # # @see https://dev.twitter.com/rest/reference/get/lists/subscribers # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::NotFound] Error raised when supplied list is not found. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Cursor] The subscribers of the specified list. # @overload list_subscribers(list, options = {}) # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. # @overload list_subscribers(user, list, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. def list_subscribers(*args) cursor_from_response_with_list('/1.1/lists/subscribers.json', args) end # Make the authenticated user follow the specified list # # @see https://dev.twitter.com/rest/reference/post/lists/subscribers/create # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::NotFound] Error raised when supplied list is not found. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::List] The specified list. # @overload list_subscribe(list, options = {}) # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. # @overload list_subscribe(user, list, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. def list_subscribe(*args) list_from_response(:post, '/1.1/lists/subscribers/create.json', args) end # Check if a user is a subscriber of the specified list # # @see https://dev.twitter.com/rest/reference/get/lists/subscribers/show # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::NotFound] Error raised when supplied list is not found. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Boolean] true if user is a subscriber of the specified list, otherwise false. # @overload list_subscriber?(list, user_to_check, options = {}) # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param user_to_check [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param options [Hash] A customizable set of options. # @overload list_subscriber?(user, list, user_to_check, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param user_to_check [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param options [Hash] A customizable set of options. # @return [Boolean] true if user is a subscriber of the specified list, otherwise false. def list_subscriber?(*args) list_user?(:get, '/1.1/lists/subscribers/show.json', args) end # Unsubscribes the authenticated user form the specified list # # @see https://dev.twitter.com/rest/reference/post/lists/subscribers/destroy # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::NotFound] Error raised when supplied list is not found. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::List] The specified list. # @overload list_unsubscribe(list, options = {}) # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. # @overload list_unsubscribe(user, list, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. def list_unsubscribe(*args) list_from_response(:post, '/1.1/lists/subscribers/destroy.json', args) end # Adds specified members to a list # # @see https://dev.twitter.com/rest/reference/post/lists/members/create_all # @note Lists are limited to having 5,000 members, and you are limited to adding up to 100 members to a list at a time with this method. # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Forbidden] Error raised when user has already been added. # @raise [Twitter::Error::NotFound] Error raised when supplied list is not found. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::List] The list. # @overload add_list_members(list, users, options = {}) # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @param options [Hash] A customizable set of options. # @overload add_list_members(user, list, users, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @param options [Hash] A customizable set of options. def add_list_members(*args) list_from_response_with_users('/1.1/lists/members/create_all.json', args) end deprecate_alias :list_add_members, :add_list_members # Check if a user is a member of the specified list # # @see https://dev.twitter.com/rest/reference/get/lists/members/show # @authentication Requires user context # @rate_limited Yes # @raise [Twitter::Error::NotFound] Error raised when supplied list is not found. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Boolean] true if user is a member of the specified list, otherwise false. # @overload list_member?(list, user_to_check, options = {}) # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param user_to_check [Integer, String] The user ID or screen name of the list member. # @param options [Hash] A customizable set of options. # @overload list_member?(user, list, user_to_check, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param user_to_check [Integer, String] The user ID or screen name of the list member. # @param options [Hash] A customizable set of options. def list_member?(*args) list_user?(:get, '/1.1/lists/members/show.json', args) end # Returns the members of the specified list # # @see https://dev.twitter.com/rest/reference/get/lists/members # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::NotFound] Error raised when supplied list is not found. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Cursor] # @overload list_members(list, options = {}) # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. # @overload list_members(user, list, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. def list_members(*args) cursor_from_response_with_list('/1.1/lists/members.json', args) end # Add a member to a list # # @see https://dev.twitter.com/rest/reference/post/lists/members/create # @note Lists are limited to having 5,000 members. # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::NotFound] Error raised when supplied list is not found. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::List] The list. # @overload add_list_member(list, user_to_add, options = {}) # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param user_to_add [Integer, String] The user id or screen name to add to the list. # @param options [Hash] A customizable set of options. # @overload add_list_member(user, list, user_to_add, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param user_to_add [Integer, String] The user id or screen name to add to the list. # @param options [Hash] A customizable set of options. def add_list_member(*args) list_from_response_with_user('/1.1/lists/members/create.json', args) end deprecate_alias :list_add_member, :add_list_member # Deletes the specified list # # @see https://dev.twitter.com/rest/reference/post/lists/destroy # @note Must be owned by the authenticated user. # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::NotFound] Error raised when supplied list is not found. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::List] The deleted list. # @overload destroy_list(list, options = {}) # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. # @overload destroy_list(user, list, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. def destroy_list(*args) list_from_response(:post, '/1.1/lists/destroy.json', args) end deprecate_alias :list_destroy, :destroy_list # Updates the specified list # # @see https://dev.twitter.com/rest/reference/post/lists/update # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::NotFound] Error raised when supplied list is not found. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::List] The created list. # @overload list_update(list, options = {}) # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. # @option options [String] :mode ('public') Whether your list is public or private. Values can be 'public' or 'private'. # @option options [String] :description The description to give the list. # @overload list_update(user, list, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. # @option options [String] :mode ('public') Whether your list is public or private. Values can be 'public' or 'private'. # @option options [String] :description The description to give the list. def list_update(*args) list_from_response(:post, '/1.1/lists/update.json', args) end # Creates a new list for the authenticated user # # @see https://dev.twitter.com/rest/reference/post/lists/create # @note Accounts are limited to 20 lists. # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::List] The created list. # @param name [String] The name for the list. # @param options [Hash] A customizable set of options. # @option options [String] :mode ('public') Whether your list is public or private. Values can be 'public' or 'private'. # @option options [String] :description The description to give the list. def create_list(name, options = {}) perform_post_with_object('/1.1/lists/create.json', options.merge(name: name), Twitter::List) end deprecate_alias :list_create, :create_list # Show the specified list # # @see https://dev.twitter.com/rest/reference/get/lists/show # @note Private lists will only be shown if the authenticated user owns the specified list. # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::NotFound] Error raised when supplied list is not found. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::List] The specified list. # @overload list(list, options = {}) # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. # @overload list(user, list, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param options [Hash] A customizable set of options. def list(*args) list_from_response(:get, '/1.1/lists/show.json', args) end # List the lists the specified user follows # # @see https://dev.twitter.com/rest/reference/get/lists/subscriptions # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Cursor] # @overload subscriptions(options = {}) # @param options [Hash] A customizable set of options. # @overload subscriptions(user, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param options [Hash] A customizable set of options. def subscriptions(*args) cursor_from_response_with_user(:lists, Twitter::List, '/1.1/lists/subscriptions.json', args) end # Removes specified members from the list # # @see https://dev.twitter.com/rest/reference/post/lists/members/destroy_all # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::NotFound] Error raised when supplied list is not found. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::List] The list. # @overload remove_list_members(list, users, options = {}) # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @param options [Hash] A customizable set of options. # @overload remove_list_members(user, list, users, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param list [Integer, String, Twitter::List] A Twitter list ID, slug, URI, or object. # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @param options [Hash] A customizable set of options. def remove_list_members(*args) list_from_response_with_users('/1.1/lists/members/destroy_all.json', args) end deprecate_alias :list_remove_members, :remove_list_members # Returns the lists owned by the specified Twitter user # # @see https://dev.twitter.com/rest/reference/get/lists/ownerships # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] # @overload owned_lists(options = {}) # @param options [Hash] A customizable set of options. # @option options [Integer] :count The amount of results to return per page. Defaults to 20. No more than 1000 results will ever be returned in a single page. # @overload owned_lists(user, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Integer] :count The amount of results to return per page. Defaults to 20. No more than 1000 results will ever be returned in a single page. def owned_lists(*args) cursor_from_response_with_user(:lists, Twitter::List, '/1.1/lists/ownerships.json', args) end deprecate_alias :lists_ownerships, :owned_lists deprecate_alias :lists_owned, :owned_lists private # @param request_method [Symbol] # @param path [String] # @param args [Array] # @return [Array] def list_from_response(request_method, path, args) arguments = Twitter::Arguments.new(args) merge_list!(arguments.options, arguments.pop) merge_owner!(arguments.options, arguments.pop) perform_request_with_object(request_method, path, arguments.options, Twitter::List) end def cursor_from_response_with_list(path, args) arguments = Twitter::Arguments.new(args) merge_list!(arguments.options, arguments.pop) merge_owner!(arguments.options, arguments.pop) perform_get_with_cursor(path, arguments.options, :users, Twitter::User) end def list_user?(request_method, path, args) arguments = Twitter::Arguments.new(args) merge_user!(arguments.options, arguments.pop) merge_list!(arguments.options, arguments.pop) merge_owner!(arguments.options, arguments.pop) perform_request(request_method.to_sym, path, arguments.options) true rescue Twitter::Error::Forbidden, Twitter::Error::NotFound false end def list_from_response_with_user(path, args) arguments = Twitter::Arguments.new(args) merge_user!(arguments.options, arguments.pop) merge_list!(arguments.options, arguments.pop) merge_owner!(arguments.options, arguments.pop) perform_post_with_object(path, arguments.options, Twitter::List) end def list_from_response_with_users(path, args) arguments = args.dup options = arguments.last.is_a?(::Hash) ? arguments.pop : {} members = arguments.pop merge_list!(options, arguments.pop) merge_owner!(options, arguments.pop) pmap(members.each_slice(MAX_USERS_PER_REQUEST)) do |users| perform_post_with_object(path, merge_users(options, users), Twitter::List) end.last end # Take a list and merge it into the hash with the correct key # # @param hash [Hash] # @param list [Integer, String, URI, Twitter::List] A Twitter list ID, slug, URI, or object. # @return [Hash] def merge_list!(hash, list) # rubocop:disable MethodLength case list when Integer hash[:list_id] = list when String if list[URI_SUBSTRING] list = list.split('/') hash[:slug] = list.pop hash[:owner_screen_name] = list.pop else hash[:slug] = list end when URI list = list.path.split('/') hash[:slug] = list.pop hash[:owner_screen_name] = list.pop when Twitter::List hash[:list_id] = list.id merge_owner!(hash, list.user) end hash end # Take an owner and merge it into the hash with the correct key # # @param hash [Hash] # @param user[Integer, String, Twitter::User] A Twitter user ID, screen_name, or object. # @return [Hash] def merge_owner!(hash, user) return hash if hash[:owner_id] || hash[:owner_screen_name] if user merge_user!(hash, user, 'owner') hash[:owner_id] = hash.delete(:owner_user_id) unless hash[:owner_user_id].nil? else hash[:owner_id] = user_id end hash end end end end twitter-6.1.0/lib/twitter/rest/media.rb000066400000000000000000000024021303650752200200520ustar00rootroot00000000000000require 'twitter/error' require 'twitter/headers' require 'twitter/rest/utils' module Twitter module REST module Media # Uploads media to attach to a tweet # # @see https://dev.twitter.com/rest/public/uploading-media-multiple-photos # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @raise [Twitter::Error::UnacceptableIO] Error when the IO object for the media argument does not have a to_io method. # @return [Integer] The uploaded media ID. # @param media [File, Hash] A File object with your picture (PNG, JPEG or GIF) # @param options [Hash] A customizable set of options. def upload(media, options = {}) raise(Twitter::Error::UnacceptableIO.new) unless media.respond_to?(:to_io) base_url = 'https://upload.twitter.com' path = '/1.1/media/upload.json' conn = connection.dup conn.url_prefix = base_url headers = Twitter::Headers.new(self, :post, base_url + path, options).request_headers options[:media] = media conn.post(path, options) { |request| request.headers.update(headers) }.env.body[:media_id] end end end end twitter-6.1.0/lib/twitter/rest/oauth.rb000066400000000000000000000061061303650752200201200ustar00rootroot00000000000000require 'twitter/headers' require 'twitter/rest/utils' require 'twitter/rest/response/parse_error_json' require 'twitter/token' module Twitter module REST module OAuth include Twitter::REST::Utils # Allows a registered application to obtain an OAuth 2 Bearer Token, which can be used to make API requests # on an application's own behalf, without a user context. # # Only one bearer token may exist outstanding for an application, and repeated requests to this method # will yield the same already-existent token until it has been invalidated. # # @see https://dev.twitter.com/rest/reference/post/oauth2/token # @rate_limited No # @authentication Required # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Token] The Bearer Token. token_type should be 'bearer'. # @param options [Hash] A customizable set of options. # @example Generate a Bearer Token # client = Twitter::REST::Client.new(:consumer_key => "abc", :consumer_secret => 'def') # bearer_token = client.token def token(options = {}) options[:bearer_token_request] = true options[:grant_type] ||= 'client_credentials' perform_post_with_object('/oauth2/token', options, Twitter::Token) end alias bearer_token token # Allows a registered application to revoke an issued OAuth 2 Bearer Token by presenting its client credentials. # # @see https://dev.twitter.com/rest/reference/post/oauth2/invalidate_token # @rate_limited No # @authentication Required # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @param access_token [String, Twitter::Token] The bearer token to revoke. # @param options [Hash] A customizable set of options. # @return [Twitter::Token] The invalidated token. token_type should be nil. def invalidate_token(access_token, options = {}) access_token = access_token.access_token if access_token.is_a?(Twitter::Token) options[:access_token] = access_token perform_post_with_object('/oauth2/invalidate_token', options, Twitter::Token) end # Allows a registered application to revoke an issued OAuth 2 Bearer Token by presenting its client credentials. # # @see https://dev.twitter.com/rest/reference/post/oauth2/invalidate_token # @rate_limited No # @authentication Required # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [String] The token string. def reverse_token conn = connection.dup conn.builder.swap(4, Twitter::REST::Response::ParseErrorJson) response = conn.post('/oauth/request_token?x_auth_mode=reverse_auth') do |request| request.headers[:authorization] = Twitter::Headers.new(self, :post, 'https://api.twitter.com/oauth/request_token', x_auth_mode: 'reverse_auth').oauth_auth_header.to_s end response.body end end end end twitter-6.1.0/lib/twitter/rest/places_and_geo.rb000066400000000000000000000171101303650752200217200ustar00rootroot00000000000000require 'twitter/geo_results' require 'twitter/place' require 'twitter/rest/utils' module Twitter module REST module PlacesAndGeo include Twitter::REST::Utils # Returns all the information about a known place # # @see https://dev.twitter.com/rest/reference/get/geo/id/:place_id # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @param place_id [String] A place in the world. These IDs can be retrieved from {Twitter::REST::PlacesAndGeo#reverse_geocode}. # @param options [Hash] A customizable set of options. # @return [Twitter::Place] The requested place. def place(place_id, options = {}) perform_get_with_object("/1.1/geo/id/#{place_id}.json", options, Twitter::Place) end # Searches for up to 20 places that can be used as a place_id # # @see https://dev.twitter.com/rest/reference/get/geo/reverse_geocode # @note This request is an informative call and will deliver generalized results about geography. # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @param options [Hash] A customizable set of options. # @option options [Float] :lat The latitude to search around. This option will be ignored unless it is inside the range -90.0 to +90.0 (North is positive) inclusive. It will also be ignored if there isn't a corresponding :long option. # @option options [Float] :long The longitude to search around. The valid range for longitude is -180.0 to +180.0 (East is positive) inclusive. This option will be ignored if outside that range, if it is not a number, if geo_enabled is disabled, or if there not a corresponding :lat option. # @option options [String] :accuracy ('0m') A hint on the "region" in which to search. If a number, then this is a radius in meters, but it can also take a string that is suffixed with ft to specify feet. If coming from a device, in practice, this value is whatever accuracy the device has measuring its location (whether it be coming from a GPS, WiFi triangulation, etc.). # @option options [String] :granularity ('neighborhood') This is the minimal granularity of place types to return and must be one of: 'poi', 'neighborhood', 'city', 'admin' or 'country'. # @option options [Integer] :max_results A hint as to the number of results to return. This does not guarantee that the number of results returned will equal max_results, but instead informs how many "nearby" results to return. Ideally, only pass in the number of places you intend to display to the user here. # @return [Array] def reverse_geocode(options = {}) perform_get_with_object('/1.1/geo/reverse_geocode.json', options, Twitter::GeoResults) end # Search for places that can be attached to a {Twitter::REST::Tweets#update} # # @see https://dev.twitter.com/rest/reference/get/geo/search # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @param options [Hash] A customizable set of options. # @option options [Float] :lat The latitude to search around. This option will be ignored unless it is inside the range -90.0 to +90.0 (North is positive) inclusive. It will also be ignored if there isn't a corresponding :long option. # @option options [Float] :long The longitude to search around. The valid range for longitude is -180.0 to +180.0 (East is positive) inclusive. This option will be ignored if outside that range, if it is not a number, if geo_enabled is disabled, or if there not a corresponding :lat option. # @option options [String] :query Free-form text to match against while executing a geo-based query, best suited for finding nearby locations by name. # @option options [String] :ip An IP address. Used when attempting to fix geolocation based off of the user's IP address. # @option options [String] :granularity ('neighborhood') This is the minimal granularity of place types to return and must be one of: 'poi', 'neighborhood', 'city', 'admin' or 'country'. # @option options [String] :accuracy ('0m') A hint on the "region" in which to search. If a number, then this is a radius in meters, but it can also take a string that is suffixed with ft to specify feet. If coming from a device, in practice, this value is whatever accuracy the device has measuring its location (whether it be coming from a GPS, WiFi triangulation, etc.). # @option options [Integer] :max_results A hint as to the number of results to return. This does not guarantee that the number of results returned will equal max_results, but instead informs how many "nearby" results to return. Ideally, only pass in the number of places you intend to display to the user here. # @option options [String] :contained_within This is the place_id which you would like to restrict the search results to. Setting this value means only places within the given place_id will be found. # @option options [String] :"attribute:street_address" This option searches for places which have this given street address. There are other well-known and application-specific attributes available. Custom attributes are also permitted. # @return [Array] def geo_search(options = {}) perform_get_with_object('/1.1/geo/search.json', options, Twitter::GeoResults) end alias places_nearby geo_search # Locates places near the given coordinates which are similar in name # # @see https://dev.twitter.com/rest/reference/get/geo/similar_places # @note Conceptually, you would use this method to get a list of known places to choose from first. Then, if the desired place doesn't exist, make a request to {Twitter::REST::PlacesAndGeo#place} to create a new one. The token contained in the response is the token necessary to create a new place. # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @param options [Hash] A customizable set of options. # @option options [Float] :lat The latitude to search around. This option will be ignored unless it is inside the range -90.0 to +90.0 (North is positive) inclusive. It will also be ignored if there isn't a corresponding :long option. # @option options [Float] :long The longitude to search around. The valid range for longitude is -180.0 to +180.0 (East is positive) inclusive. This option will be ignored if outside that range, if it is not a number, if geo_enabled is disabled, or if there not a corresponding :lat option. # @option options [String] :name The name a place is known as. # @option options [String] :contained_within This is the place_id which you would like to restrict the search results to. Setting this value means only places within the given place_id will be found. # @option options [String] :"attribute:street_address" This option searches for places which have this given street address. There are other well-known and application-specific attributes available. Custom attributes are also permitted. # @return [Array] def similar_places(options = {}) perform_get_with_object('/1.1/geo/similar_places.json', options, Twitter::GeoResults) end alias places_similar similar_places end end end twitter-6.1.0/lib/twitter/rest/request.rb000066400000000000000000000027061303650752200204720ustar00rootroot00000000000000require 'addressable/uri' require 'faraday' require 'json' require 'timeout' require 'twitter/error' require 'twitter/headers' require 'twitter/rate_limit' module Twitter module REST class Request attr_accessor :client, :headers, :options, :rate_limit, :request_method, :path, :uri alias verb request_method # @param client [Twitter::Client] # @param request_method [String, Symbol] # @param path [String] # @param options [Hash] # @return [Twitter::REST::Request] def initialize(client, request_method, path, options = {}) @client = client @request_method = request_method.to_sym @path = path @uri = Addressable::URI.parse(client.connection.url_prefix + path) @options = options end # @return [Array, Hash] def perform @headers = Twitter::Headers.new(@client, @request_method, @uri.to_s, @options).request_headers begin response = @client.connection.send(@request_method, @path, @options) { |request| request.headers.update(@headers) }.env rescue Faraday::Error::TimeoutError, Timeout::Error => error raise(Twitter::Error::RequestTimeout.new(error)) rescue Faraday::Error::ClientError, JSON::ParserError => error raise(Twitter::Error.new(error)) end @rate_limit = Twitter::RateLimit.new(response.response_headers) response.body end end end end twitter-6.1.0/lib/twitter/rest/request/000077500000000000000000000000001303650752200201405ustar00rootroot00000000000000twitter-6.1.0/lib/twitter/rest/request/multipart_with_file.rb000066400000000000000000000022331303650752200245400ustar00rootroot00000000000000require 'faraday' module Twitter module REST class Request class MultipartWithFile < Faraday::Middleware CONTENT_TYPE = 'Content-Type'.freeze BMP_REGEX = /\.bmp/i GIF_REGEX = /\.gif$/i JPEG_REGEX = /\.jpe?g/i PNG_REGEX = /\.png$/i WEBP_REGEX = /\.webp/i def call(request) if request.body.is_a?(::Hash) request.body.each do |key, value| next unless value.respond_to?(:to_io) request.body[key] = Faraday::UploadIO.new(value, mime_type(value.path), value.path) end end @app.call(request) end private def mime_type(path) case path when BMP_REGEX 'image/bmp' when GIF_REGEX 'image/gif' when JPEG_REGEX 'image/jpeg' when PNG_REGEX 'image/png' when WEBP_REGEX 'image/webp' else 'application/octet-stream' end end end end end end Faraday::Request.register_middleware twitter_multipart_with_file: Twitter::REST::Request::MultipartWithFile twitter-6.1.0/lib/twitter/rest/response/000077500000000000000000000000001303650752200203065ustar00rootroot00000000000000twitter-6.1.0/lib/twitter/rest/response/parse_error_json.rb000066400000000000000000000004011303650752200242020ustar00rootroot00000000000000require 'twitter/rest/response/parse_json' module Twitter module REST module Response class ParseErrorJson < Twitter::REST::Response::ParseJson def unparsable_status_codes super + [200] end end end end end twitter-6.1.0/lib/twitter/rest/response/parse_json.rb000066400000000000000000000013441303650752200230000ustar00rootroot00000000000000require 'faraday' require 'json' module Twitter module REST module Response class ParseJson < Faraday::Response::Middleware WHITESPACE_REGEX = /\A^\s*$\z/ def parse(body) case body when WHITESPACE_REGEX, nil nil else JSON.parse(body, symbolize_names: true) end end def on_complete(response) response.body = parse(response.body) if respond_to?(:parse) && !unparsable_status_codes.include?(response.status) end def unparsable_status_codes [204, 301, 302, 304] end end end end end Faraday::Response.register_middleware twitter_parse_json: Twitter::REST::Response::ParseJson twitter-6.1.0/lib/twitter/rest/response/raise_error.rb000066400000000000000000000016021303650752200231460ustar00rootroot00000000000000require 'faraday' require 'twitter/error' module Twitter module REST module Response class RaiseError < Faraday::Response::Middleware def on_complete(response) status_code = response.status.to_i klass = Twitter::Error.errors[status_code] return unless klass raise(handle_forbidden_errors(response)) if klass == Twitter::Error::Forbidden raise(klass.from_response(response)) end private def handle_forbidden_errors(response) error = Twitter::Error::Forbidden.from_response(response) klass = Twitter::Error.forbidden_messages[error.message] if klass klass.from_response(response) else error end end end end end end Faraday::Response.register_middleware twitter_raise_error: Twitter::REST::Response::RaiseError twitter-6.1.0/lib/twitter/rest/saved_searches.rb000066400000000000000000000103341303650752200217550ustar00rootroot00000000000000require 'twitter/arguments' require 'twitter/rest/utils' require 'twitter/saved_search' require 'twitter/utils' module Twitter module REST module SavedSearches include Twitter::REST::Utils include Twitter::Utils # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] The saved searches. # @overload saved_search(options = {}) # Returns the authenticated user's saved search queries # # @see https://dev.twitter.com/rest/reference/get/saved_searches/list # @param options [Hash] A customizable set of options. # @overload saved_search(*ids) # Retrieve the data for saved searches owned by the authenticating user # # @see https://dev.twitter.com/rest/reference/get/saved_searches/show/:id # @param ids [Enumerable] A collection of saved search IDs. # @overload saved_search(*ids, options) # Retrieve the data for saved searches owned by the authenticating user # # @see https://dev.twitter.com/rest/reference/get/saved_searches/show/:id # @param ids [Enumerable] A collection of saved search IDs. # @param options [Hash] A customizable set of options. def saved_searches(*args) arguments = Twitter::Arguments.new(args) if arguments.empty? perform_get_with_objects('/1.1/saved_searches/list.json', arguments.options, Twitter::SavedSearch) else pmap(arguments) do |id| saved_search(id, arguments.options) end end end # Retrieve the data for saved searches owned by the authenticating user # # @see https://dev.twitter.com/rest/reference/get/saved_searches/show/:id # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::SavedSearch] The saved searches. # @param id [Integer] The ID of the saved search. # @param options [Hash] A customizable set of options. def saved_search(id, options = {}) perform_get_with_object("/1.1/saved_searches/show/#{id}.json", options, Twitter::SavedSearch) end # Creates a saved search for the authenticated user # # @see https://dev.twitter.com/rest/reference/post/saved_searches/create # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::SavedSearch] The created saved search. # @param query [String] The query of the search the user would like to save. # @param options [Hash] A customizable set of options. def create_saved_search(query, options = {}) perform_post_with_object('/1.1/saved_searches/create.json', options.merge(query: query), Twitter::SavedSearch) end deprecate_alias :saved_search_create, :create_saved_search # Destroys saved searches for the authenticated user # # @see https://dev.twitter.com/rest/reference/post/saved_searches/destroy/:id # @note The search specified by ID must be owned by the authenticating user. # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] The deleted saved searches. # @overload destroy_saved_search(*ids) # @param ids [Enumerable] A collection of saved search IDs. # @overload destroy_saved_search(*ids, options) # @param ids [Enumerable] A collection of saved search IDs. # @param options [Hash] A customizable set of options. def destroy_saved_search(*args) arguments = Twitter::Arguments.new(args) pmap(arguments) do |id| perform_post_with_object("/1.1/saved_searches/destroy/#{id}.json", arguments.options, Twitter::SavedSearch) end end deprecate_alias :saved_search_destroy, :destroy_saved_search end end end twitter-6.1.0/lib/twitter/rest/search.rb000066400000000000000000000056251303650752200202520ustar00rootroot00000000000000require 'twitter/rest/request' require 'twitter/search_results' module Twitter module REST module Search MAX_TWEETS_PER_REQUEST = 100 # Returns tweets that match a specified query. # # @see https://dev.twitter.com/rest/reference/get/search/tweets # @see https://dev.twitter.com/rest/public/search # @note Please note that Twitter's search service and, by extension, the Search API is not meant to be an exhaustive source of Tweets. Not all Tweets will be indexed or made available via the search interface. # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @param q [String] A search term. # @param options [Hash] A customizable set of options. # @option options [String] :geocode Returns tweets by users located within a given radius of the given latitude/longitude. The location is preferentially taking from the Geotagging API, but will fall back to their Twitter profile. The parameter value is specified by "latitude,longitude,radius", where radius units must be specified as either "mi" (miles) or "km" (kilometers). Note that you cannot use the near operator via the API to geocode arbitrary locations; however you can use this geocode parameter to search near geocodes directly. # @option options [String] :lang Restricts tweets to the given language, given by an ISO 639-1 code. # @option options [String] :locale Specify the language of the query you are sending (only ja is currently effective). This is intended for language-specific clients and the default should work in the majority of cases. # @option options [String] :result_type Specifies what type of search results you would prefer to receive. Options are "mixed", "recent", and "popular". The current default is "mixed." # @option options [Integer] :count The number of tweets to return per page, up to a maximum of 100. # @option options [String] :until Optional. Returns tweets generated before the given date. Date should be formatted as YYYY-MM-DD. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. There are limits to the number of Tweets which can be accessed through the API. If the limit of Tweets has occured since the since_id, the since_id will be forced to the oldest ID available. # @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID. # @return [Twitter::SearchResults] Return tweets that match a specified query with search metadata def search(q, options = {}) options[:count] ||= MAX_TWEETS_PER_REQUEST request = Twitter::REST::Request.new(self, :get, '/1.1/search/tweets.json', options.merge(q: q)) Twitter::SearchResults.new(request) end end end end twitter-6.1.0/lib/twitter/rest/spam_reporting.rb000066400000000000000000000021071303650752200220260ustar00rootroot00000000000000require 'twitter/rest/utils' require 'twitter/user' module Twitter module REST module SpamReporting include Twitter::REST::Utils # The users specified are blocked by the authenticated user and reported as spammers # # @see https://dev.twitter.com/rest/reference/post/users/report_spam # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] The reported users. # @overload report_spam(*users) # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @overload report_spam(*users, options) # @param users [Enumerable] A collection of Twitter user IDs, screen names, or objects. # @param options [Hash] A customizable set of options. def report_spam(*args) parallel_users_from_response(:post, '/1.1/users/report_spam.json', args) end end end end twitter-6.1.0/lib/twitter/rest/suggested_users.rb000066400000000000000000000037411303650752200222150ustar00rootroot00000000000000require 'twitter/arguments' require 'twitter/rest/utils' require 'twitter/suggestion' require 'twitter/user' module Twitter module REST module SuggestedUsers include Twitter::REST::Utils # @return [Array] # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @overload suggestions(options = {}) # Returns the list of suggested user categories # # @see https://dev.twitter.com/rest/reference/get/users/suggestions # @param options [Hash] A customizable set of options. # @overload suggestions(slug, options = {}) # Returns the users in a given category # # @see https://dev.twitter.com/rest/reference/get/users/suggestions/:slug # @param slug [String] The short name of list or a category. # @param options [Hash] A customizable set of options. def suggestions(*args) arguments = Twitter::Arguments.new(args) if arguments.last perform_get_with_object("/1.1/users/suggestions/#{arguments.pop}.json", arguments.options, Twitter::Suggestion) else perform_get_with_objects('/1.1/users/suggestions.json', arguments.options, Twitter::Suggestion) end end # Access the users in a given category of the Twitter suggested user list and return their most recent Tweet if they are not a protected user # # @see https://dev.twitter.com/rest/reference/get/users/suggestions/:slug/members # @rate_limited Yes # @authentication Requires user context # @param slug [String] The short name of list or a category. # @param options [Hash] A customizable set of options. # @return [Array] def suggest_users(slug, options = {}) perform_get_with_objects("/1.1/users/suggestions/#{slug}/members.json", options, Twitter::User) end end end end twitter-6.1.0/lib/twitter/rest/timelines.rb000066400000000000000000000330551303650752200207740ustar00rootroot00000000000000require 'twitter/rest/utils' require 'twitter/tweet' require 'twitter/user' module Twitter module REST module Timelines include Twitter::REST::Utils DEFAULT_TWEETS_PER_REQUEST = 20 MAX_TWEETS_PER_REQUEST = 200 # Returns the 20 most recent mentions (statuses containing @username) for the authenticating user # # @see https://dev.twitter.com/rest/reference/get/statuses/mentions_timeline # @note This method can only return up to 800 Tweets. # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] # @param options [Hash] A customizable set of options. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. # @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID. # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. def mentions_timeline(options = {}) perform_get_with_objects('/1.1/statuses/mentions_timeline.json', options, Twitter::Tweet) end alias mentions mentions_timeline # Returns the 20 most recent Tweets posted by the specified user # # @see https://dev.twitter.com/rest/reference/get/statuses/user_timeline # @note This method can only return up to 3,200 Tweets. # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] # @overload user_timeline(user, options = {}) # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. # @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID. # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. # @option options [Boolean, String, Integer] :exclude_replies This parameter will prevent replies from appearing in the returned timeline. Using exclude_replies with the count parameter will mean you will receive up-to count tweets - this is because the count parameter retrieves that many tweets before filtering out retweets and replies. # @option options [Boolean, String, Integer] :contributor_details Specifies that the contributors element should be enhanced to include the screen_name of the contributor. # @option options [Boolean, String, Integer] :include_rts Specifies that the timeline should include native retweets in addition to regular tweets. Note: If you're using the trim_user parameter in conjunction with include_rts, the retweets will no longer contain a full user object. def user_timeline(*args) objects_from_response_with_user(Twitter::Tweet, :get, '/1.1/statuses/user_timeline.json', args) end # Returns the 20 most recent retweets posted by the specified user # # @see https://dev.twitter.com/rest/reference/get/statuses/user_timeline # @note This method can only return up to 3,200 Tweets. # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] # @param user [Integer, String, Twitter::User] A Twitter user ID, screen name, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. # @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID. # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. # @option options [Boolean, String, Integer] :exclude_replies This parameter will prevent replies from appearing in the returned timeline. Using exclude_replies with the count parameter will mean you will receive up-to count tweets - this is because the count parameter retrieves that many tweets before filtering out retweets and replies. # @option options [Boolean, String, Integer] :contributor_details Specifies that the contributors element should be enhanced to include the screen_name of the contributor. def retweeted_by_user(user, options = {}) retweets_from_timeline(options) do |opts| user_timeline(user, opts) end end alias retweeted_by retweeted_by_user # Returns the 20 most recent retweets posted by the authenticating user # # @see https://dev.twitter.com/rest/reference/get/statuses/user_timeline # @note This method can only return up to 3,200 Tweets. # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] # @param options [Hash] A customizable set of options. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. # @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID. # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. # @option options [Boolean, String, Integer] :exclude_replies This parameter will prevent replies from appearing in the returned timeline. Using exclude_replies with the count parameter will mean you will receive up-to count tweets - this is because the count parameter retrieves that many tweets before filtering out retweets and replies. # @option options [Boolean, String, Integer] :contributor_details Specifies that the contributors element should be enhanced to include the screen_name of the contributor. def retweeted_by_me(options = {}) retweets_from_timeline(options) do |opts| user_timeline(opts) end end # Returns the 20 most recent Tweets, including retweets if they exist, posted by the authenticating user and the users they follow # # @see https://dev.twitter.com/rest/reference/get/statuses/home_timeline # @note This method can only return up to 800 Tweets, including retweets. # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] # @param options [Hash] A customizable set of options. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. # @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID. # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. # @option options [Boolean, String, Integer] :exclude_replies This parameter will prevent replies from appearing in the returned timeline. Using exclude_replies with the count parameter will mean you will receive up-to count tweets - this is because the count parameter retrieves that many tweets before filtering out retweets and replies. # @option options [Boolean, String, Integer] :include_rts Specifies that the timeline should include native retweets in addition to regular tweets. Note: If you're using the trim_user parameter in conjunction with include_rts, the retweets will no longer contain a full user object. # @option options [Boolean, String, Integer] :contributor_details Specifies that the contributors element should be enhanced to include the screen_name of the contributor. def home_timeline(options = {}) perform_get_with_objects('/1.1/statuses/home_timeline.json', options, Twitter::Tweet) end # Returns the 20 most recent retweets posted by users the authenticating user follow. # # @see https://dev.twitter.com/rest/reference/get/statuses/home_timeline # @note This method can only return up to 800 Tweets, including retweets. # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] # @param options [Hash] A customizable set of options. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. # @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID. # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. # @option options [Boolean, String, Integer] :exclude_replies This parameter will prevent replies from appearing in the returned timeline. Using exclude_replies with the count parameter will mean you will receive up-to count tweets - this is because the count parameter retrieves that many tweets before filtering out retweets and replies. # @option options [Boolean, String, Integer] :contributor_details Specifies that the contributors element should be enhanced to include the screen_name of the contributor. def retweeted_to_me(options = {}) retweets_from_timeline(options) do |opts| home_timeline(opts) end end # Returns the 20 most recent tweets of the authenticated user that have been retweeted by others # # @see https://dev.twitter.com/rest/reference/get/statuses/retweets_of_me # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] # @param options [Hash] A customizable set of options. # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 200. # @option options [Integer] :since_id Returns results with an ID greater than (that is, more recent than) the specified ID. # @option options [Integer] :max_id Returns results with an ID less than (that is, older than) or equal to the specified ID. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. # @option options [Boolean, String, Integer] :include_user_entities The user entities node will be disincluded when set to false. def retweets_of_me(options = {}) perform_get_with_objects('/1.1/statuses/retweets_of_me.json', options, Twitter::Tweet) end private def retweets_from_timeline(options) options[:include_rts] = true count = options[:count] || DEFAULT_TWEETS_PER_REQUEST collect_with_count(count) do |count_options| select_retweets(yield(options.merge(count_options))) end end # @param tweets [Array] # @return [Array] def select_retweets(tweets) tweets.select(&:retweet?) end # @param count [Integer] # @return [Array] def collect_with_count(count) options = {} options[:count] = MAX_TWEETS_PER_REQUEST collect_with_max_id do |max_id| options[:max_id] = max_id unless max_id.nil? if count > 0 tweets = yield(options) count -= tweets.length tweets end end.flatten.compact[0...count] end # @param collection [Array] # @param max_id [Integer, NilClass] # @return [Array] def collect_with_max_id(collection = [], max_id = nil, &block) tweets = yield(max_id) return collection if tweets.nil? collection += tweets tweets.empty? ? collection.flatten : collect_with_max_id(collection, tweets.last.id - 1, &block) end end end end twitter-6.1.0/lib/twitter/rest/trends.rb000066400000000000000000000057341303650752200203050ustar00rootroot00000000000000require 'twitter/place' require 'twitter/rest/request' require 'twitter/rest/utils' require 'twitter/trend_results' module Twitter module REST module Trends include Twitter::REST::Utils # Returns the top 50 trending topics for a specific WOEID # # @see https://dev.twitter.com/rest/reference/get/trends/place # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @param id [Integer] The {https://developer.yahoo.com/geo/geoplanet Yahoo! Where On Earth ID} of the location to return trending information for. WOEIDs can be retrieved by calling {Twitter::REST::Trends#trends_available}. Global information is available by using 1 as the WOEID. # @param options [Hash] A customizable set of options. # @option options [String] :exclude Setting this equal to 'hashtags' will remove all hashtags from the trends list. # @return [Array] def trends(id = 1, options = {}) options[:id] = id response = perform_get('/1.1/trends/place.json', options).first Twitter::TrendResults.new(response) end alias local_trends trends alias trends_place trends # Returns the locations that Twitter has trending topic information for # # @see https://dev.twitter.com/rest/reference/get/trends/available # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @param options [Hash] A customizable set of options. # @return [Array] def trends_available(options = {}) perform_get_with_objects('/1.1/trends/available.json', options, Twitter::Place) end alias trend_locations trends_available # Returns the locations that Twitter has trending topic information for, closest to a specified location. # # @see https://dev.twitter.com/rest/reference/get/trends/closest # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @param options [Hash] A customizable set of options. # @option options [Float] :lat If provided with a :long option the available trend locations will be sorted by distance, nearest to furthest, to the co-ordinate pair. The valid ranges for latitude are -90.0 to +90.0 (North is positive) inclusive. # @option options [Float] :long If provided with a :lat option the available trend locations will be sorted by distance, nearest to furthest, to the co-ordinate pair. The valid ranges for longitude are -180.0 to +180.0 (East is positive) inclusive. # @return [Array] def trends_closest(options = {}) perform_get_with_objects('/1.1/trends/closest.json', options, Twitter::Place) end end end end twitter-6.1.0/lib/twitter/rest/tweets.rb000066400000000000000000000573151303650752200203230ustar00rootroot00000000000000require 'twitter/arguments' require 'twitter/error' require 'twitter/oembed' require 'twitter/rest/request' require 'twitter/rest/utils' require 'twitter/tweet' require 'twitter/utils' module Twitter module REST module Tweets include Twitter::REST::Utils include Twitter::Utils MAX_TWEETS_PER_REQUEST = 100 # Returns up to 100 of the first retweets of a given tweet # # @see https://dev.twitter.com/rest/reference/get/statuses/retweets/:id # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] # @param tweet [Integer, String, URI, Twitter::Tweet] A Tweet ID, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 100. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. def retweets(tweet, options = {}) perform_get_with_objects("/1.1/statuses/retweets/#{extract_id(tweet)}.json", options, Twitter::Tweet) end # Show up to 100 users who retweeted the Tweet # # @see https://dev.twitter.com/rest/reference/get/statuses/retweets/:id # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] # @param tweet [Integer, String, URI, Twitter::Tweet] A Tweet ID, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Integer] :count Specifies the number of records to retrieve. Must be less than or equal to 100. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. # @option options [Boolean] :ids_only ('false') Only return user IDs instead of full user objects. def retweeters_of(tweet, options = {}) ids_only = !!options.delete(:ids_only) retweeters = retweets(tweet, options).collect(&:user) ids_only ? retweeters.collect(&:id) : retweeters end # Returns a Tweet # # @see https://dev.twitter.com/rest/reference/get/statuses/show/:id # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @raise [Twitter::Error::Forbidden] Error raised when supplied status is over 140 characters. # @return [Twitter::Tweet] The requested Tweet. # @param tweet [Integer, String, URI, Twitter::Tweet] A Tweet ID, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. def status(tweet, options = {}) perform_get_with_object("/1.1/statuses/show/#{extract_id(tweet)}.json", options, Twitter::Tweet) end # Returns Tweets # # @see https://dev.twitter.com/rest/reference/get/statuses/lookup # @rate_limited Yes # @authentication Required # @return [Array] The requested Tweets. # @overload statuses(*tweets) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @overload statuses(*tweets, options) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @param options [Hash] A customizable set of options. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. def statuses(*args) arguments = Twitter::Arguments.new(args) flat_pmap(arguments.each_slice(MAX_TWEETS_PER_REQUEST)) do |tweets| perform_post_with_objects('/1.1/statuses/lookup.json', arguments.options.merge(id: tweets.collect { |u| extract_id(u) }.join(',')), Twitter::Tweet) end end # Destroys the specified Tweets # # @see https://dev.twitter.com/rest/reference/post/statuses/destroy/:id # @note The authenticating user must be the author of the specified Tweets. # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] The deleted Tweets. # @overload destroy_status(*tweets) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @overload destroy_status(*tweets, options) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @param options [Hash] A customizable set of options. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. def destroy_status(*args) arguments = Twitter::Arguments.new(args) pmap(arguments) do |tweet| perform_post_with_object("/1.1/statuses/destroy/#{extract_id(tweet)}.json", arguments.options, Twitter::Tweet) end end alias destroy_tweet destroy_status deprecate_alias :status_destroy, :destroy_status deprecate_alias :tweet_destroy, :destroy_status # Updates the authenticating user's status # # @see https://dev.twitter.com/rest/reference/post/statuses/update # @note A status update with text identical to the authenticating user's current status will be ignored to prevent duplicates. # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::Tweet] The created Tweet. When the tweet is deemed a duplicate by Twitter, returns the last Tweet from the user's timeline. # @param status [String] The text of your status update, up to 140 characters. # @param options [Hash] A customizable set of options. # @option options [Boolean, String, Integer] :possibly_sensitive Set to true for content which may not be suitable for every audience. # @option options [Twitter::Tweet] :in_reply_to_status An existing status that the update is in reply to. If the status being replied to was not originally posted by the authenticated user, the text of the status must begin with an @-mention, or twitter will reject the update. # @option options [Integer] :in_reply_to_status_id The ID of an existing status that the update is in reply to. # @option options [Float] :lat The latitude of the location this tweet refers to. This option will be ignored unless it is inside the range -90.0 to +90.0 (North is positive) inclusive. It will also be ignored if there isn't a corresponding :long option. # @option options [Float] :long The longitude of the location this tweet refers to. The valid ranges for longitude is -180.0 to +180.0 (East is positive) inclusive. This option will be ignored if outside that range, if it is not a number, if geo_enabled is disabled, or if there not a corresponding :lat option. # @option options [Twitter::Place] :place A place in the world. These can be retrieved from {Twitter::REST::PlacesAndGeo#reverse_geocode}. # @option options [String] :place_id A place in the world. These IDs can be retrieved from {Twitter::REST::PlacesAndGeo#reverse_geocode}. # @option options [String] :media_ids A comma separated list of uploaded media IDs to attach to the Tweet. # @option options [String] :display_coordinates Whether or not to put a pin on the exact coordinates a tweet has been sent from. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. def update(status, options = {}) update!(status, options) rescue Twitter::Error::DuplicateStatus user_timeline(count: 1).first end # Updates the authenticating user's status # # @see https://dev.twitter.com/rest/reference/post/statuses/update # @note A status update with text identical to the authenticating user's current status will be ignored to prevent duplicates. # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @raise [Twitter::Error::DuplicateStatus] Error raised when a duplicate status is posted. # @return [Twitter::Tweet] The created Tweet. # @param status [String] The text of your status update, up to 140 characters. # @param options [Hash] A customizable set of options. # @option options [Boolean, String, Integer] :possibly_sensitive Set to true for content which may not be suitable for every audience. # @option options [Twitter::Tweet] :in_reply_to_status An existing status that the update is in reply to. If the status being replied to was not originally posted by the authenticated user, the text of the status must begin with an @-mention, or twitter will reject the update. # @option options [Integer] :in_reply_to_status_id The ID of an existing status that the update is in reply to. # @option options [Float] :lat The latitude of the location this tweet refers to. This option will be ignored unless it is inside the range -90.0 to +90.0 (North is positive) inclusive. It will also be ignored if there isn't a corresponding :long option. # @option options [Float] :long The longitude of the location this tweet refers to. The valid ranges for longitude is -180.0 to +180.0 (East is positive) inclusive. This option will be ignored if outside that range, if it is not a number, if geo_enabled is disabled, or if there not a corresponding :lat option. # @option options [Twitter::Place] :place A place in the world. These can be retrieved from {Twitter::REST::PlacesAndGeo#reverse_geocode}. # @option options [String] :place_id A place in the world. These IDs can be retrieved from {Twitter::REST::PlacesAndGeo#reverse_geocode}. # @option options [String] :media_ids A comma separated list of uploaded media IDs to attach to the Tweet. # @option options [String] :display_coordinates Whether or not to put a pin on the exact coordinates a tweet has been sent from. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. def update!(status, options = {}) hash = options.dup hash[:in_reply_to_status_id] = hash.delete(:in_reply_to_status).id unless hash[:in_reply_to_status].nil? hash[:place_id] = hash.delete(:place).woeid unless hash[:place].nil? perform_post_with_object('/1.1/statuses/update.json', hash.merge(status: status), Twitter::Tweet) end # Retweets the specified Tweets as the authenticating user # # @see https://dev.twitter.com/rest/reference/post/statuses/retweet/:id # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] The original tweets with retweet details embedded. # @overload retweet(*tweets) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @overload retweet(*tweets, options) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @param options [Hash] A customizable set of options. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. def retweet(*args) arguments = Twitter::Arguments.new(args) pmap(arguments) do |tweet| begin post_retweet(extract_id(tweet), arguments.options) rescue Twitter::Error::AlreadyRetweeted, Twitter::Error::NotFound next end end.compact end # Retweets the specified Tweets as the authenticating user and raises an error if one has already been retweeted # # @see https://dev.twitter.com/rest/reference/post/statuses/retweet/:id # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::AlreadyRetweeted] Error raised when tweet has already been retweeted. # @raise [Twitter::Error::NotFound] Error raised when tweet does not exist or has been deleted. # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Array] The original tweets with retweet details embedded. # @overload retweet!(*tweets) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @overload retweet!(*tweets, options) # @param tweets [Enumerable] A collection of Tweet IDs, URIs, or objects. # @param options [Hash] A customizable set of options. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. def retweet!(*args) arguments = Twitter::Arguments.new(args) pmap(arguments) do |tweet| post_retweet(extract_id(tweet), arguments.options) end.compact end # Updates the authenticating user's status with media # # @see https://dev.twitter.com/rest/reference/post/statuses/update_with_media # @note A status update with text/media identical to the authenticating user's current status will NOT be ignored # @rate_limited No # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @raise [Twitter::Error::UnacceptableIO] Error when the IO object for the media argument does not have a to_io method. # @return [Twitter::Tweet] The created Tweet. # @param status [String] The text of your status update, up to 140 characters. # @param media [File, Hash] A File object with your picture (PNG, JPEG or GIF) # @param options [Hash] A customizable set of options. # @option options [Boolean, String, Integer] :possibly_sensitive Set to true for content which may not be suitable for every audience. # @option options [Twitter::Tweet] :in_reply_to_status An existing status that the update is in reply to. # @option options [Integer] :in_reply_to_status_id The ID of an existing Tweet that the update is in reply to. # @option options [Float] :lat The latitude of the location this tweet refers to. This option will be ignored unless it is inside the range -90.0 to +90.0 (North is positive) inclusive. It will also be ignored if there isn't a corresponding :long option. # @option options [Float] :long The longitude of the location this tweet refers to. The valid ranges for longitude is -180.0 to +180.0 (East is positive) inclusive. This option will be ignored if outside that range, if it is not a number, if geo_enabled is disabled, or if there not a corresponding :lat option. # @option options [Twitter::Place] :place A place in the world. These can be retrieved from {Twitter::REST::PlacesAndGeo#reverse_geocode}. # @option options [String] :place_id A place in the world. These IDs can be retrieved from {Twitter::REST::PlacesAndGeo#reverse_geocode}. # @option options [String] :display_coordinates Whether or not to put a pin on the exact coordinates a tweet has been sent from. # @option options [Boolean, String, Integer] :trim_user Each tweet returned in a timeline will include a user object with only the author's numerical ID when set to true, 't' or 1. def update_with_media(status, media, options = {}) raise(Twitter::Error::UnacceptableIO.new) unless media.respond_to?(:to_io) hash = options.dup hash[:in_reply_to_status_id] = hash.delete(:in_reply_to_status).id unless hash[:in_reply_to_status].nil? hash[:place_id] = hash.delete(:place).woeid unless hash[:place].nil? perform_post_with_object('/1.1/statuses/update_with_media.json', hash.merge('media[]' => media, 'status' => status), Twitter::Tweet) end # Returns oEmbed for a Tweet # # @see https://dev.twitter.com/rest/reference/get/statuses/oembed # @rate_limited Yes # @authentication Requires user context # @raise [Twitter::Error::Unauthorized] Error raised when supplied user credentials are not valid. # @return [Twitter::OEmbed] OEmbed for the requested Tweet. # @param tweet [Integer, String, URI, Twitter::Tweet] A Tweet ID, URI, or object. # @param options [Hash] A customizable set of options. # @option options [Integer] :maxwidth The maximum width in pixels that the embed should be rendered at. This value is constrained to be between 250 and 550 pixels. # @option options [Boolean, String, Integer] :hide_media Specifies whether the embedded Tweet should automatically expand images which were uploaded via {https://dev.twitter.com/rest/reference/post/statuses/update_with_media POST statuses/update_with_media}. When set to either true, t or 1 images will not be expanded. Defaults to false. # @option options [Boolean, String, Integer] :hide_thread Specifies whether the embedded Tweet should automatically show the original message in the case that the embedded Tweet is a reply. When set to either true, t or 1 the original Tweet will not be shown. Defaults to false. # @option options [Boolean, String, Integer] :omit_script Specifies whether the embedded Tweet HTML should include a `